diff --git a/.agent-workflow.md b/.agent-workflow.md new file mode 100644 index 00000000..fabc9b05 --- /dev/null +++ b/.agent-workflow.md @@ -0,0 +1,13 @@ +# Agent Workflow Contract + +1. Read `AGENTS.md` first before any thinking, planning, search, subagent use, implementation, or validation. +2. Do not assume anything. Treat user-provided paths, scope, and constraints as authoritative. +3. Use only explicitly provided paths and scope. Do not perform broad searches outside them. +4. Use subagents for research, tracing, and verification whenever possible. +5. Work on one active milestone at a time. +6. No repeated rereads unless the file changed, a new error points to it, or the user explicitly asks. +7. Every work cycle must end with exactly one of: a code change, a build/test result, or a blocker with exact evidence. +8. If two consecutive turns produce no patch, build/test, revert, or blocker, stop and report the blockage immediately. +9. No speculative fixes. Tie every code change to a specific failing gate with evidence. +10. Revert failed fixes immediately after negative validation. +11. Keep reporting minimal: what changed, what ran, what happened, what is next. diff --git a/.gitignore b/.gitignore index 1a119463..8ac3c534 100644 --- a/.gitignore +++ b/.gitignore @@ -5,6 +5,8 @@ node_modules/ # Build outputs dist/ build/ +build-*/ +cmake-build-*/ out/ installer/ @@ -42,6 +44,11 @@ coverage/ # Temporary files tmp/ temp/ +__pycache__/ +*.pyc +*.pyo +*.tmp +*.bak # Media and binary artifacts *.mov @@ -53,9 +60,23 @@ resources/ffmpeg/ *.dll *.pdb *.exe +/*.AppImage +tools/appimage/ + +# Compiler dependency files (generated during build) +*.d + +# AppImage staging / unpacked squashfs +squashfs-root/ + +# Session / runtime logs +*.log + +# Octto session artifacts +.octto/ B165C015_241223_R0G5.mxf.txt .kilocode/mcp.json OpenColorIO-Config-ACES-1.2/ studio-config-all-views-v4.0.0_aces-v2.0_ocio-v2.5.ocio -third_party/tlRender-build/ \ No newline at end of file +third_party/tlRender-build/ diff --git a/.planning/PROJECT.md b/.planning/PROJECT.md new file mode 100644 index 00000000..fdb9f6aa --- /dev/null +++ b/.planning/PROJECT.md @@ -0,0 +1,19 @@ +# Project + +## Current State + +Linux Fedora 43 KDE Wayland port in progress for KAsset Manager. Current focus is preserving annotation workflows for video and image-sequence playback while keeping the existing Qt Widgets and tlRender architecture intact. + +## Requirements + +- FEDORA43-BASELINE: Linux-safe configure, build, and startup +- FEDORA43-PLAYBACK: Wayland video and sequence playback works reliably +- FEDORA43-ANNOTATION: Annotation overlays, frame sync, shortcuts, and exports remain correct on Wayland +- FEDORA43-THUMBNAILS: Thumbnail generation and scrubbing remain correct on Linux +- FEDORA43-FILEOPS: Linux file operations and reveal integrate with the desktop environment +- FEDORA43-PROJECTS: Project Manager and batch rename workflows remain valid on Linux +- FEDORA43-CONVERTERS: Bundled conversion tools resolve correctly in Linux runtime +- FEDORA43-APPIMAGE: AppImage runtime reproduces validated local behavior +- FEDORA43-DOCS: Linux/Fedora/AppImage documentation matches implementation + +Last updated: 2026-04-11 diff --git a/.planning/REQUIREMENTS.md b/.planning/REQUIREMENTS.md new file mode 100644 index 00000000..16bbe25f --- /dev/null +++ b/.planning/REQUIREMENTS.md @@ -0,0 +1,25 @@ +# Requirements + +- [x] **FEDORA43-BASELINE**: Fedora Wayland app configure/build/startup baseline established +- [x] **FEDORA43-PLAYBACK**: tlRender video and sequence playback validated on Wayland +- [x] **FEDORA43-ANNOTATION**: Annotation workflows work correctly on video and sequences under Wayland, with fullscreen preview overlay drawing tools, playback UI state, frame sync, and export behavior verified +- [x] **FEDORA43-THUMBNAILS**: Thumbnail generation and scrubbing work correctly on Linux +- [x] **FEDORA43-FILEOPS**: Linux file operations and file manager reveal behave natively +- [x] **FEDORA43-PROJECTS**: Project Manager and batch rename workflows validated on Linux +- [x] **FEDORA43-CONVERTERS**: Bundled ffmpeg and magick lookup works in Linux runtime +- [ ] **FEDORA43-APPIMAGE**: Fedora Wayland AppImage builds and runs with required features +- [ ] **FEDORA43-DOCS**: Linux/Fedora/AppImage support is documented + +## Traceability + +| Requirement | Phase | Status | +|-------------|-------|--------| +| FEDORA43-BASELINE | Phase 1 | Complete | +| FEDORA43-PLAYBACK | Phase 2 | Complete | +| FEDORA43-ANNOTATION | Phase 3 | Complete | +| FEDORA43-THUMBNAILS | Phase 4 | Complete | +| FEDORA43-FILEOPS | Phase 5 | Complete | +| FEDORA43-PROJECTS | Phase 6 | Complete | +| FEDORA43-CONVERTERS | Phase 7 | Complete | +| FEDORA43-APPIMAGE | Phase 8 | Pending | +| FEDORA43-DOCS | Phase 9 | Pending | diff --git a/.planning/ROADMAP.md b/.planning/ROADMAP.md new file mode 100644 index 00000000..b16a703c --- /dev/null +++ b/.planning/ROADMAP.md @@ -0,0 +1,91 @@ +# Roadmap + +- [x] **Phase 1: Establish Fedora 43 Wayland App Build Baseline** +- [x] **Phase 2: Prove tlRender Video And Sequence Playback On Wayland** +- [x] **Phase 3: Preserve Annotation On Video And Sequences** +- [x] **Phase 4: Preserve Thumbnail Generation And Scrubbing** +- [x] **Phase 5: Port Linux File Operations And File Manager Reveal** +- [x] **Phase 6: Verify Project Manager And Batch Rename** +- [x] **Phase 7: Bundle And Verify Converters** +- [x] **Phase 8: Package The Fedora 43 Wayland AppImage** +- [x] **Phase 9: Document Linux/Fedora 43 Wayland Support** + +| Phase | Plans | Status | Completed | +|-------|-------|--------|-----------| +| 1 | 0/0 | Complete | 2026-04-10 | +| 2 | 0/0 | Complete | 2026-04-10 | +| 3 | 1/1 | Complete | 2026-04-18 | +| 4 | 0/0 | Complete | 2026-04-18 | +| 5 | 0/0 | Complete | 2026-04-14 | +| 6 | 1/1 | Complete | 2026-04-18 | +| 7 | 1/1 | Complete | 2026-04-18 | +| 8 | 0/0 | In Progress | 2026-04-21 | +| 9 | 0/0 | In Progress | 2026-04-21 | + +### Phase 1: Establish Fedora 43 Wayland App Build Baseline +**Goal:** Enable Linux-safe configure/build/startup on Fedora 43 Wayland. +**Requirements:** FEDORA43-BASELINE +**Plans:** 0/0 plans complete + +### Phase 2: Prove tlRender Video And Sequence Playback On Wayland +**Goal:** Restore stable video and sequence playback on Fedora 43 Wayland. +**Requirements:** FEDORA43-PLAYBACK +**Plans:** 0/0 plans complete + +### Phase 3: Preserve Annotation On Video And Sequences +**Goal:** Restore fullscreen preview overlay annotation behavior, playback UI correctness, frame sync, and exports for both video and image sequences under Wayland. +**Requirements:** FEDORA43-ANNOTATION +**Plans:** 1/1 plans complete + +Status note: User runtime verification accepted fullscreen/video annotation behavior, playback UI state, and annotation export on Linux after the focused Wayland preview/annotation fixes landed. + +Plans: +- [x] **03-01** Reproduce, fix, and validate fullscreen preview overlay annotation-tool failures and playback UI regressions on Wayland + +### Phase 4: Preserve Thumbnail Generation And Scrubbing +**Goal:** Restore thumbnails and scrubbing responsiveness on Linux. +**Requirements:** FEDORA43-THUMBNAILS +**Plans:** 0/0 plans complete + +Status note: User runtime verification accepted thumbnails and scrubbing responsiveness on Linux. + +### Phase 5: Port Linux File Operations And File Manager Reveal +**Goal:** Match Linux file manager semantics while preserving app UX. +**Requirements:** FEDORA43-FILEOPS +**Plans:** 0/0 plans complete + +Status note: Completed from the current worktree fixes; user-reported working on Linux to the best of available manual verification. + +### Phase 6: Verify Project Manager And Batch Rename +**Goal:** Validate project workflows and only fix Linux-specific issues found. +**Requirements:** FEDORA43-PROJECTS +**Plans:** 1/1 plans complete + +Status note: User runtime verification accepted Project Manager and Batch Rename behavior on Linux after the focused verification/fix slice landed. + +Plans: +- [x] **06-01** Add the narrow Project Manager verification slice: PM batch rename, selected-folder destinations, refresh rescan, and focused regression coverage + +### Phase 7: Bundle And Verify Converters +**Goal:** Prefer bundled ffmpeg and magick paths in Linux runtime flows. +**Requirements:** FEDORA43-CONVERTERS +**Plans:** 1/1 plans complete + +Status note: User runtime verification accepted bundled converter behavior on Linux, and focused automated converter coverage remains in place (`test_media_converter_worker` with CTest registration). + +Plans: +- [x] **07-01** Resolve bundled Linux converter lookup first, keep ffprobe aligned with the chosen ffmpeg bundle, and verify the affected conversion flows + +### Phase 8: Package The Fedora 43 Wayland AppImage +**Goal:** Produce and validate a Fedora 43 Wayland-capable AppImage. +**Requirements:** FEDORA43-APPIMAGE +**Plans:** 0/0 plans complete + +Status note: AppImage packaging scripts (`scripts/build-linux-appimage.sh`, `scripts/package-appimage.sh`) are in place and producing `KAssetManager-x86_64.AppImage`. Final user smoke test in a normal Wayland session is the remaining gap before marking complete. + +### Phase 9: Document Linux/Fedora 43 Wayland Support +**Goal:** Capture Linux build, validation, and packaging guidance. +**Requirements:** FEDORA43-DOCS +**Plans:** 0/0 plans complete + +Status note: `docs/linux-wayland-validation.md` exists and covers playback validation corpus, AppImage notes, and smoke commands. Remaining polish items are listed there (OCIO/color controls on non-native paths, general AppImage documentation cleanup). diff --git a/.planning/STATE.md b/.planning/STATE.md new file mode 100644 index 00000000..d31c67a5 --- /dev/null +++ b/.planning/STATE.md @@ -0,0 +1,44 @@ +--- +gsd_state_version: 1.0 +milestone: v1.0 +milestone_name: milestone +current_phase: 07 +current_phase_name: package-the-fedora-43-wayland-appimage +current_plan: none +status: ready_for_next_phase +last_updated: "2026-04-18T00:00:00Z" +last_activity: 2026-04-18 +progress: + total_phases: 9 + completed_phases: 7 + total_plans: 3 + completed_plans: 3 + percent: 78 +--- + +# State + +**Current Phase:** 08 +**Current Phase Name:** package-the-fedora-43-wayland-appimage +**Status:** Ready for next phase after Linux playback, annotation, thumbnails, project workflows, and bundled converters were accepted in runtime verification +**Current Plan:** none +**Total Plans in Phase:** 0 +**Last Activity:** 2026-04-18 +**Last Activity Description:** Fedora 43 Wayland playback is now accepted within small measurement variance using the rewritten FFmpeg MOV player path, and the user also accepted annotation, export, thumbnails, Project Manager, Batch Rename, and bundled converter behavior in runtime checks + +## Current Position + +Phase: 08 (package-the-fedora-43-wayland-appimage) — READY TO START +Plan: none +Status: Ready for next phase after user-accepted Linux runtime verification of playback, annotation, thumbnails, project workflows, and bundled converters +Current Phase: 08 - Package The Fedora 43 Wayland AppImage +Current Plan: none +Last activity: 2026-04-18 -- MOV playback is accepted within small variance across the validated fixture set after the FFmpeg MOV player rewrite, and the previously blocked Linux runtime workflows are accepted by user verification + +## Performance Metrics + +Total plans completed: 3 + +| Phase | Plans | Total | Avg/Plan | +|-------|-------|-------|----------| +| - | - | - | - | diff --git a/.planning/codebase/ARCHITECTURE.md b/.planning/codebase/ARCHITECTURE.md new file mode 100644 index 00000000..30a6cfed --- /dev/null +++ b/.planning/codebase/ARCHITECTURE.md @@ -0,0 +1,173 @@ +# Architecture + +**Analysis Date:** 2026-04-11 + +## Pattern Overview + +**Overall:** Qt Widgets desktop application with a central composition root, Qt model/view presentation, singleton service managers, and SQLite-backed persistence. + +**Key Characteristics:** +- `native/qt6/src/main.cpp` bootstraps global runtime concerns, then hands control to `native/qt6/src/mainwindow.cpp`. +- `native/qt6/src/mainwindow.{h,cpp}` acts as the orchestration shell for Asset Manager, File Manager, and Project Manager. +- Data access is split between two SQLite services, `native/qt6/src/db.{h,cpp}` and `native/qt6/src/project_db.{h,cpp}`, with shared import behavior through `native/qt6/src/i_asset_database.h` and `native/qt6/src/importer.{h,cpp}`. + +## Layers + +**Application Bootstrap:** +- Purpose: Initialize Qt runtime, theme, logging, persistent storage paths, databases, and the main window. +- Location: `native/qt6/src/main.cpp` +- Contains: `QApplication` startup, high-DPI/OpenGL setup, tlRender initialization, crash logging, database migration, message handler installation. +- Depends on: `native/qt6/src/mainwindow.h`, `native/qt6/src/db.h`, `native/qt6/src/log_manager.h`, `native/qt6/src/progress_manager.h`, `native/qt6/src/theme_manager.h`, `native/qt6/src/platform_session.h`, `native/qt6/src/media/tlrender_player.h`. +- Used by: CMake target `kassetmanagerqt` in `native/qt6/CMakeLists.txt`. + +**UI Shell and Screens:** +- Purpose: Build and coordinate the top-level desktop UI. +- Location: `native/qt6/src/mainwindow.{h,cpp}` and `native/qt6/src/file_manager_pane.{h,cpp}` +- Contains: Tab shell, splitters, menus, toolbars, dock widgets, overlays, shortcuts, preview panels, per-tab interaction handlers. +- Depends on: Qt models, dialogs, delegates, service singletons, file operations, media widgets. +- Used by: `native/qt6/src/main.cpp`. + +**Presentation Models:** +- Purpose: Expose database rows and filesystem entries to Qt views. +- Location: `native/qt6/src/assets_model.{h,cpp}`, `native/qt6/src/virtual_folders.{h,cpp}`, `native/qt6/src/projects_model.{h,cpp}`, `native/qt6/src/project_assets_model.{h,cpp}`, `native/qt6/src/project_folders_model.{h,cpp}`, `native/qt6/src/everything_folder_model.{h,cpp}`, `native/qt6/src/assets_table_model.h`, `native/qt6/src/tags_model.h` +- Contains: `QAbstractListModel`, `QAbstractItemModel`, and proxy-backed view state. +- Depends on: `native/qt6/src/db.h`, `native/qt6/src/project_db.h`, `native/qt6/src/sequence_detector.h`, Qt SQL and filesystem APIs. +- Used by: `native/qt6/src/mainwindow.cpp`, `native/qt6/src/file_manager_pane.cpp`, delegates, views. + +**Proxy and View Behavior:** +- Purpose: Transform raw model data into grouped, filtered, scrub-capable view data. +- Location: `native/qt6/src/sequence_grouping_proxy_model.{h,cpp}`, `native/qt6/src/asset_sequence_grouping_proxy_model.{h,cpp}`, `native/qt6/src/project_sequence_grouping_proxy_model.{h,cpp}`, `native/qt6/src/grid_scrub.{h,cpp}`, `native/qt6/src/asset_item_delegate.{h,cpp}`, `native/qt6/src/fm_item_delegate.{h,cpp}`, `native/qt6/src/project_item_delegate.{h,cpp}`, `native/qt6/src/asset_grid_view.{h,cpp}`, `native/qt6/src/fm_views_ex.{h,cpp}` +- Contains: Sequence grouping, custom painting, hover scrubbing, custom list/grid interactions. +- Depends on: Source models, `native/qt6/src/live_preview_manager.h`, `native/qt6/src/sequence_detector.h`, Qt view classes. +- Used by: Asset Manager, File Manager, and Project Manager view stacks. + +**Persistence and Database Services:** +- Purpose: Own application and project data stores. +- Location: `native/qt6/src/db.{h,cpp}`, `native/qt6/src/project_db.{h,cpp}`, `native/qt6/src/i_asset_database.h` +- Contains: Schema migration, CRUD for folders/assets/tags/versions/projects/notifications, prepared-statement helpers, change signals. +- Depends on: `QSqlDatabase`, `QSqlQuery`, filesystem metadata. +- Used by: Models, importers, watchers, dialogs, health checks, main window actions. + +**Background Work and System Services:** +- Purpose: Perform long-running or reusable operations off the immediate UI path. +- Location: `native/qt6/src/importer.{h,cpp}`, `native/qt6/src/project_import_worker.{h,cpp}`, `native/qt6/src/file_ops.{h,cpp}`, `native/qt6/src/live_preview_manager.{h,cpp}`, `native/qt6/src/project_folder_watcher.{h,cpp}`, `native/qt6/src/project_manager_watcher.{h,cpp}`, `native/qt6/src/database_health_agent.{h,cpp}`, `native/qt6/src/context_preserver.{h,cpp}`, `native/qt6/src/progress_manager.{h,cpp}`, `native/qt6/src/log_manager.{h,cpp}` +- Contains: Bulk import, threaded project import, queued file operations, frame decode cache, filesystem watchers, health audits, state persistence, progress aggregation, logging. +- Depends on: Database services, QtConcurrent/QThreadPool/QFileSystemWatcher/QSettings. +- Used by: `native/qt6/src/mainwindow.cpp`, `native/qt6/src/file_manager_pane.cpp`, preview and import flows. + +**Media and Preview Integration:** +- Purpose: Render stills, video, sequences, and document previews. +- Location: `native/qt6/src/media/tlrender_player.{h,cpp}`, `native/qt6/src/media/tlrender_viewport.{h,cpp}`, `native/qt6/src/media/tlrender_widget.{h,cpp}`, `native/qt6/src/oiio_image_loader.{h,cpp}`, `native/qt6/src/preview_overlay.{h,cpp}`, `native/qt6/src/image_preview_overlay.{h,cpp}`, `native/qt6/src/video_metadata.{h,cpp}`, `native/qt6/src/office_preview.{h,cpp}`, `native/qt6/src/thumbnail_cache_manager.{h,cpp}`, `native/qt6/src/thumbnail_generator_dialog.{h,cpp}`, `native/qt6/src/thumbnail_generator_worker.{h,cpp}` +- Contains: tlRender playback, OpenImageIO still loading, overlay navigation, metadata extraction, thumbnail generation. +- Depends on: tlRender, Qt multimedia/OpenGL/PDF/SVG, filesystem paths. +- Used by: Delegates, File Manager, Project Manager, Asset Manager preview overlay. + +## Data Flow + +**Application Startup Flow:** + +1. `native/qt6/src/main.cpp` configures DPI, graphics attributes, Wayland behavior, and tlRender initialization. +2. `native/qt6/src/main.cpp` installs the centralized Qt message handler from `native/qt6/src/log_manager.h`, creates the persistent app-data directory, migrates the legacy database if needed, and initializes `DB::instance()`. +3. `native/qt6/src/main.cpp` constructs `MainWindow`, and `native/qt6/src/mainwindow.cpp` builds tabs, models, splitters, watchers, and restores session state through `native/qt6/src/context_preserver.{h,cpp}` and `QSettings`. + +**Asset Manager Navigation Flow:** + +1. `native/qt6/src/virtual_folders.{h,cpp}` loads the virtual folder tree and binds it to `folderTreeView` in `native/qt6/src/mainwindow.cpp`. +2. Clicking a folder triggers `MainWindow::onFolderSelected()` in `native/qt6/src/mainwindow.cpp`, which debounces into `MainWindow::navigateToFolder()`. +3. `MainWindow::navigateToFolder()` saves current per-folder UI state through `native/qt6/src/context_preserver.{h,cpp}`, cancels pending preview work via `native/qt6/src/live_preview_manager.{h,cpp}`, updates `native/qt6/src/assets_model.{h,cpp}`, then restores saved view/filter state if present. + +**Asset Import Flow:** + +1. Asset imports start from drag/drop or File Manager actions in `native/qt6/src/mainwindow.cpp` and route into `MainWindow::importToAssetLibrary()`. +2. `native/qt6/src/importer.cpp` traverses selected files/folders, detects image sequences with `native/qt6/src/sequence_detector.{h,cpp}`, and writes rows through the `IAssetDatabase` contract from `native/qt6/src/i_asset_database.h`. +3. `native/qt6/src/db.{h,cpp}` emits change signals, and `native/qt6/src/assets_model.cpp` debounces reloads so Asset Manager views refresh after bulk work. + +**File Manager Flow:** + +1. `MainWindow::setupFileManagerUi()` in `native/qt6/src/mainwindow.cpp` builds the legacy File Manager shell around `QFileSystemModel` or `native/qt6/src/everything_folder_model.{h,cpp}` for the tree. +2. The newer pane abstraction in `native/qt6/src/file_manager_pane.{h,cpp}` packages the same concepts—toolbar, path bar, grid/list views, preview panel, navigation history—into a reusable unit for dual-pane workflows. +3. File selections feed preview widgets through `FileManagerPane::updatePreviewForIndex()` or the equivalent `MainWindow` handlers, using `native/qt6/src/media/tlrender_player.{h,cpp}` for video and `native/qt6/src/oiio_image_loader.{h,cpp}` for stills. + +**Project Manager Flow:** + +1. `MainWindow::setupProjectManagerUi()` in `native/qt6/src/mainwindow.cpp` initializes `ProjectDB::instance()` with a separate `projects.db` file under `QStandardPaths::AppDataLocation`. +2. `native/qt6/src/projects_model.{h,cpp}`, `native/qt6/src/project_folders_model.{h,cpp}`, and `native/qt6/src/project_assets_model.{h,cpp}` feed the project list, project tree, and asset views. +3. `native/qt6/src/project_manager_watcher.{h,cpp}` watches each project’s root folder, writes notifications into `native/qt6/src/project_db.{h,cpp}`, and `native/qt6/src/mainwindow.cpp` refreshes badges and current views when `newFilesDetected` or `filesRemoved` fires. + +**State Management:** +- Persist UI/session state with `QSettings` in `native/qt6/src/mainwindow.cpp`, `native/qt6/src/file_manager_pane.cpp`, and `native/qt6/src/context_preserver.{h,cpp}`. +- Persist application content in SQLite via `native/qt6/src/db.{h,cpp}` and `native/qt6/src/project_db.{h,cpp}`. +- Keep transient cross-view services in singletons such as `LivePreviewManager::instance()` from `native/qt6/src/live_preview_manager.{h,cpp}`, `FileOpsQueue::instance()` from `native/qt6/src/file_ops.{h,cpp}`, and `ProgressManager::instance()` from `native/qt6/src/progress_manager.{h,cpp}`. + +## Key Abstractions + +**MainWindow as Composition Root:** +- Purpose: Centralize top-level wiring for all tabs and shared managers. +- Examples: `native/qt6/src/mainwindow.h`, `native/qt6/src/mainwindow.cpp` +- Pattern: One large coordinator owns widgets, models, service connections, and command handlers. + +**IAssetDatabase:** +- Purpose: Share import logic between the Asset Manager and Project Manager stores. +- Examples: `native/qt6/src/i_asset_database.h`, `native/qt6/src/db.h`, `native/qt6/src/project_db.h`, `native/qt6/src/importer.cpp` +- Pattern: Interface-based persistence contract with two concrete singleton implementations. + +**Qt Models + Proxy Models:** +- Purpose: Keep views bound to data roles instead of direct widget mutation. +- Examples: `native/qt6/src/assets_model.{h,cpp}`, `native/qt6/src/project_assets_model.{h,cpp}`, `native/qt6/src/sequence_grouping_proxy_model.{h,cpp}`, `native/qt6/src/project_sequence_grouping_proxy_model.{h,cpp}` +- Pattern: `QAbstractItemModel`/`QAbstractListModel` for source data, proxies for grouping and transformation. + +**Manager Singletons:** +- Purpose: Share process-wide services. +- Examples: `native/qt6/src/live_preview_manager.{h,cpp}`, `native/qt6/src/file_ops.{h,cpp}`, `native/qt6/src/log_manager.{h,cpp}`, `native/qt6/src/progress_manager.{h,cpp}`, `native/qt6/src/context_preserver.{h,cpp}` +- Pattern: Singleton service with signals/slots and internal synchronization. + +**Filesystem Watchers:** +- Purpose: React to external file changes. +- Examples: `native/qt6/src/project_folder_watcher.{h,cpp}`, `native/qt6/src/project_manager_watcher.{h,cpp}`, `QFileSystemWatcher` usage in `native/qt6/src/mainwindow.cpp` +- Pattern: Watcher objects debounce change bursts and notify models/UI through signals. + +**Media Adapter Layer:** +- Purpose: Separate playback/rendering details from UI widgets. +- Examples: `native/qt6/src/media/tlrender_player.{h,cpp}`, `native/qt6/src/media/tlrender_viewport.{h,cpp}`, `native/qt6/src/oiio_image_loader.{h,cpp}` +- Pattern: Wrapper classes around external media libraries exposed as Qt-friendly objects. + +## Entry Points + +**Desktop Application:** +- Location: `native/qt6/src/main.cpp` +- Triggers: Launching the `kassetmanagerqt` executable from the target in `native/qt6/CMakeLists.txt` +- Responsibilities: Configure runtime, initialize logging/theme/db, migrate legacy storage, show `MainWindow`. + +**Primary Window Shell:** +- Location: `native/qt6/src/mainwindow.cpp` +- Triggers: Construction from `native/qt6/src/main.cpp` +- Responsibilities: Build Asset Manager, File Manager, Project Manager, bind commands to models/services, persist and restore UI state. + +**Test Executables:** +- Location: `native/qt6/tests/CMakeLists.txt` +- Triggers: `ctest` against targets such as `test_db`, `test_models`, `test_importer`, `test_live_preview_manager`, `test_platform_session` +- Responsibilities: Exercise individual layers without launching the full desktop app. + +**Standalone Wayland Probe:** +- Location: `wayland_probe.cpp` and `wayland-probe/CMakeLists.txt` +- Triggers: Building/running the probe utility in `wayland-probe/` +- Responsibilities: Platform-specific graphics/session probing outside the main app. + +## Error Handling + +**Strategy:** Fail fast during bootstrap, log operational errors centrally, and surface user-facing issues through dialogs or status messages. + +**Patterns:** +- Use `qCritical()` and early `return -1` in `native/qt6/src/main.cpp` for startup failures such as database initialization. +- Use `qWarning()` plus `LogManager::instance()` in service and UI code such as `native/qt6/src/importer.cpp`, `native/qt6/src/project_db.cpp`, and `native/qt6/src/mainwindow.cpp`. +- Use `QMessageBox` and `statusBar()->showMessage()` in `native/qt6/src/mainwindow.cpp` for recoverable user workflow errors. + +## Cross-Cutting Concerns + +**Logging:** Centralize Qt message output through `qInstallMessageHandler(customMessageHandler)` in `native/qt6/src/main.cpp` and `native/qt6/src/log_manager.{h,cpp}`. +**Validation:** Guard invalid indexes, missing files, invalid paths, and missing DB rows inline in handlers such as `MainWindow::onFolderSelected()` and `FileManagerPane::navigateToPath()`. +**Authentication:** Not applicable; no application authentication layer is present in `native/qt6/src/`. + +--- + +*Architecture analysis: 2026-04-11* diff --git a/.planning/codebase/CONCERNS.md b/.planning/codebase/CONCERNS.md new file mode 100644 index 00000000..4f72533e --- /dev/null +++ b/.planning/codebase/CONCERNS.md @@ -0,0 +1,169 @@ +# Codebase Concerns + +**Analysis Date:** 2026-04-11 + +## Tech Debt + +**Monolithic UI shell:** +- Issue: Core UI behavior, file management, project-manager actions, preview launching, and external-process wiring are concentrated in very large translation units. +- Files: `native/qt6/src/mainwindow.cpp`, `native/qt6/src/mainwindow.h`, `native/qt6/src/preview_overlay.cpp`, `native/qt6/src/preview_overlay.h` +- Impact: Small UI changes have a large regression surface, compile times stay high, and behavior is difficult to isolate for testing or refactoring. +- Fix approach: Split window orchestration into focused controllers/widgets, move file/process helpers behind services, and keep preview/export logic out of the top-level window classes. + +**Duplicated SQLite schema and import logic:** +- Issue: Main-library and project-manager data layers implement similar schema creation and asset upsert logic separately. +- Files: `native/qt6/src/db.cpp`, `native/qt6/src/db.h`, `native/qt6/src/project_db.cpp`, `native/qt6/src/project_db.h`, `native/qt6/src/project_import_worker.cpp` +- Impact: Schema changes can drift between databases, bug fixes have to be repeated, and project-manager behavior can diverge from asset-library behavior. +- Fix approach: Centralize shared schema fragments and shared upsert helpers, then keep only project-specific tables and flows in `project_db`. + +**Platform-specific behavior embedded in general UI code:** +- Issue: Windows shell integration, Everything SDK loading, and ffprobe path assumptions are implemented inline in app logic instead of isolated adapters. +- Files: `native/qt6/src/mainwindow.cpp`, `native/qt6/src/everything_search.cpp`, `native/qt6/src/media_converter_worker.cpp` +- Impact: Linux/Wayland work and cross-platform maintenance require touching unrelated UI code, increasing regression risk. +- Fix approach: Move shell, search-provider, and media-tool discovery behind platform adapter classes with one implementation per OS. + +## Known Bugs + +**Everything search results never mark assets as already imported:** +- Symptoms: Search results from the Everything integration report `isImported = false` even when the asset already exists in the application database. +- Files: `native/qt6/src/everything_search.cpp` +- Trigger: Run `EverythingSearch::search()` on Windows for files that are already present in the asset library. +- Workaround: Treat the imported-state indicator as unreliable; confirm import status from the main asset views instead. + +**Case-sensitive paths are collapsed during import on Linux:** +- Symptoms: Distinct directories or files whose paths differ only by case can map to the same normalized key during import. +- Files: `native/qt6/src/importer.cpp`, `native/qt6/src/project_import_worker.cpp` +- Trigger: Import a tree on a case-sensitive filesystem where sibling paths differ only by letter case. +- Workaround: Avoid importing folder trees with case-only path differences until path normalization stops lowercasing Linux paths. + +**Project-manager reimport can churn asset IDs and drop linked state:** +- Symptoms: Reimported project assets can be deleted and recreated instead of updated in place, which risks losing relations that point at `assets.id`. +- Files: `native/qt6/src/project_import_worker.cpp`, `native/qt6/src/project_db.cpp` +- Trigger: Reimport project files that already exist in the project database; `INSERT OR REPLACE` on `assets.file_path` can replace the row. +- Workaround: Avoid depending on stable project-manager asset IDs across repeated imports until replace-based upserts are converted to update-in-place logic. + +## Security Considerations + +**Windows DLL hijack surface in Everything SDK loading:** +- Risk: The app loads `Everything64.dll` from the application directory, current directory, and PATH-like locations before verifying provenance. +- Files: `native/qt6/src/everything_search.cpp` +- Current mitigation: The feature is optional and the code refuses to enable it when required exports or the Everything service are unavailable. +- Recommendations: Load only from a trusted bundled path, verify architecture/signature where possible, and avoid probing the current working directory. + +**Crash and runtime logs expose local file-system details:** +- Risk: Logs and crash artifacts include absolute paths and operational details in user data locations. +- Files: `native/qt6/src/main.cpp`, `native/qt6/src/log_manager.cpp`, `native/qt6/src/everything_search.cpp`, `native/qt6/src/thumbnail_cache_manager.cpp` +- Current mitigation: Release crash logging in `native/qt6/src/main.cpp` avoids raw exception addresses. +- Recommendations: Reduce path-heavy debug logging in release builds, add rotation/retention rules for logs, and make diagnostic logging opt-in for sensitive environments. + +**Security process documentation is stale relative to the shipped app version:** +- Risk: The published security policy only lists version `1.4.0` as supported while the Qt app project version is `1.8.5`. +- Files: `SECURITY.md`, `native/qt6/CMakeLists.txt` +- Current mitigation: A reporting contact exists in `SECURITY.md`. +- Recommendations: Update supported-version policy to match current releases so users know which builds receive fixes. + +## Performance Bottlenecks + +**Blocking sleeps on the GUI thread during annotated frame export:** +- Problem: Exporting annotated video frames pauses the player and blocks the UI with fixed `QThread::msleep(100)` delays per frame. +- Files: `native/qt6/src/preview_overlay.cpp` +- Cause: Frame seeking and capture are synchronized with sleep-based waits instead of async callbacks or worker-driven capture. +- Improvement path: Move frame export into a worker pipeline and wait on player/frame-ready signals instead of sleeping on the UI thread. + +**Importer pumps the event loop while doing bulk database work:** +- Problem: Large imports call `QApplication::processEvents()` repeatedly inside import loops. +- Files: `native/qt6/src/importer.cpp` +- Cause: The synchronous importer keeps work on the UI thread and uses manual event pumping to keep the dialog responsive. +- Improvement path: Run bulk import work off the UI thread, emit throttled progress signals, and remove re-entrant event-loop pumping. + +**Folder-model refresh waits synchronously for concurrent tasks to finish:** +- Problem: Model destruction and refresh paths call `waitForFinished()` on outstanding watchers. +- Files: `native/qt6/src/everything_folder_model.cpp` +- Cause: Cancellation is followed by synchronous waiting on the calling thread. +- Improvement path: Use non-blocking cancellation cleanup and defer destructive model resets until watcher completion signals arrive. + +**Media conversion repeatedly spawns blocking ffprobe processes per item:** +- Problem: Duration, dimensions, and FPS probing launch separate `ffprobe` processes with blocking `waitForFinished()` calls. +- Files: `native/qt6/src/media_converter_worker.cpp` +- Cause: Metadata probing is serialized through short-lived subprocesses for each task. +- Improvement path: Cache probe results per source, collapse metadata queries into a single ffprobe invocation, and keep tool discovery platform-neutral. + +## Fragile Areas + +**Thumbnail cache API silently fails outside the UI thread:** +- Files: `native/qt6/src/thumbnail_cache_manager.cpp`, `native/qt6/src/live_preview_manager.cpp` +- Why fragile: `ThumbnailCacheManager::getCachedThumbnail()` returns a null pixmap when called off the GUI thread. Accidental misuse degrades behavior without a hard failure in release flows. +- Safe modification: Keep all `QPixmap` cache reads on the UI thread and pass `QImage` across worker boundaries. +- Test coverage: `native/qt6/tests/test_live_preview_manager.cpp` covers the happy-path request/cache flow, but there is no test that guards against thread-affinity regressions. + +**Project import worker owns its own SQLite connection lifecycle:** +- Files: `native/qt6/src/project_import_worker.cpp` +- Why fragile: Thread shutdown, cancellation, and `QSqlDatabase::removeDatabase()` sequencing are tightly coupled to object lifetime. Reordering cleanup can create hard-to-reproduce shutdown issues. +- Safe modification: Keep DB connection open/close entirely inside the worker thread, and change cancellation/cleanup behavior only with targeted thread-lifecycle tests. +- Test coverage: No dedicated tests cover `ProjectImportWorker` cancellation, repeated starts, or reimport behavior. + +**Recursive file deletion is homegrown and destructive:** +- Files: `native/qt6/src/file_ops.cpp`, `native/qt6/src/file_ops.h` +- Why fragile: Permanent delete and recursive removal are implemented manually, so edge cases like permissions, partial failures, symlink handling, and cancellation semantics are easy to break. +- Safe modification: Change recursive delete behavior only with filesystem integration tests that exercise nested directories, read-only files, and cancellation. +- Test coverage: No tests target `FileOpsQueue` or `removeRecursively()`. + +## Scaling Limits + +**Everything-backed folder browsing is hard-capped per query:** +- Current capacity: `kMaxEverythingResults = 65535`. +- Limit: Trees or searches that exceed that count can truncate folder discovery. +- Scaling path: Add paging or iterative fetching in `native/qt6/src/everything_folder_model.cpp` instead of relying on a single bounded result set. + +**Core library database is effectively single-writer application state:** +- Current capacity: One unnamed `QSQLITE` connection in `native/qt6/src/db.cpp` backs the main asset library, while long-running project imports create separate ad hoc connections. +- Limit: More background write paths increase contention risk and make thread ownership harder to reason about. +- Scaling path: Introduce a dedicated DB worker/queue for the main library and standardize one connection-per-thread rules across all background flows. + +## Dependencies at Risk + +**tlRender:** +- Risk: Application configure/build fails hard when tlRender is not present. +- Impact: Fresh developer setup and CI portability depend on an external prebuilt tree existing in expected locations. +- Migration plan: Keep tlRender as the playback backend, but encapsulate discovery and add a clearer bootstrap path or optional degraded build mode. + +**Everything SDK / Everything service:** +- Risk: Windows search functionality depends on a separately deployed DLL and a running external indexing service. +- Impact: Search features degrade to unavailable with runtime warnings instead of a built-in fallback. +- Migration plan: Keep the integration optional, but provide a native filesystem fallback or a packaged/sandboxed provider adapter. + +## Missing Critical Features + +**High-value integration coverage for destructive and UI-heavy workflows:** +- Problem: The codebase has unit tests for lower-level pieces, but it does not have automated coverage for preview/export workflows, file operations, and project-manager import orchestration. +- Blocks: Safe refactoring of `native/qt6/src/mainwindow.cpp`, `native/qt6/src/preview_overlay.cpp`, `native/qt6/src/project_import_worker.cpp`, and `native/qt6/src/file_ops.cpp`. + +## Test Coverage Gaps + +**Main UI shell and preview/export path:** +- What's not tested: Context-menu actions, preview launching, annotation export, external-process launch points, and preview lock release behavior. +- Files: `native/qt6/src/mainwindow.cpp`, `native/qt6/src/preview_overlay.cpp`, `native/qt6/src/media_convert_dialog.cpp` +- Risk: UI regressions and platform-specific breakage can ship unnoticed. +- Priority: High + +**Project-manager database and threaded import path:** +- What's not tested: `ProjectDB` schema behavior, reimport semantics, notification retention, worker cancellation, and thread cleanup. +- Files: `native/qt6/src/project_db.cpp`, `native/qt6/src/project_import_worker.cpp` +- Risk: Data loss or duplicate/corrupt project state can appear during large imports. +- Priority: High + +**Filesystem mutation queue:** +- What's not tested: Recursive delete, copy/move cancellation, conflict behavior, and partial-failure recovery. +- Files: `native/qt6/src/file_ops.cpp`, `native/qt6/src/file_ops.h` +- Risk: Destructive operations can fail in edge cases without automated detection. +- Priority: High + +**Everything folder model concurrency:** +- What's not tested: Refresh-time cancellation, watcher cleanup, truncation behavior, and large result handling. +- Files: `native/qt6/src/everything_folder_model.cpp`, `native/qt6/src/everything_search.cpp` +- Risk: UI stalls and inconsistent tree state can regress unnoticed on Windows. +- Priority: Medium + +--- + +*Concerns audit: 2026-04-11* diff --git a/.planning/codebase/CONVENTIONS.md b/.planning/codebase/CONVENTIONS.md new file mode 100644 index 00000000..8c7efc47 --- /dev/null +++ b/.planning/codebase/CONVENTIONS.md @@ -0,0 +1,106 @@ +# Coding Conventions + +**Analysis Date:** 2026-04-11 + +## Naming Patterns + +**Files:** +- Use lowercase snake_case for source and header filenames in `native/qt6/src/` and `native/qt6/tests/`: `native/qt6/src/live_preview_manager.cpp`, `native/qt6/src/file_manager_pane.h`, `native/qt6/tests/test_live_preview_manager.cpp`. +- Use `test_*.cpp` for QtTest executables in `native/qt6/tests/`: `native/qt6/tests/test_db.cpp`, `native/qt6/tests/test_sequence_detector.cpp`. + +**Functions:** +- Use lowerCamelCase for free functions, methods, slots, and helpers: `DB::ensureRootFolder()` in `native/qt6/src/db.cpp`, `AssetsModel::setFolderId()` in `native/qt6/src/assets_model.cpp`, `GridScrubController::canScrubFile()` in `native/qt6/src/grid_scrub.cpp`. +- Use `test*` names for test slots: `TestSequenceDetector::testDetectSequences_basic()` in `native/qt6/tests/test_sequence_detector.cpp`, `TestLivePreviewManager::testRequestAndCacheStillPng()` in `native/qt6/tests/test_live_preview_manager.cpp`. + +**Variables:** +- Use `m_` prefix for member state: `m_folderId`, `m_reloadTimer` in `native/qt6/src/assets_model.h`; `m_cache`, `m_decodePool` in `native/qt6/src/live_preview_manager.h`. +- Use `k`-prefixed constants for named constants: `kLatestVersion` in `native/qt6/src/db.cpp`, `kMinCacheEntries` in `native/qt6/src/live_preview_manager.cpp`, `kScrubDefaultPosition` in `native/qt6/src/grid_scrub.cpp`. +- Use `s_` for file-static shared state: `s_durationCache` in `native/qt6/src/live_preview_manager.cpp`. + +**Types:** +- Use PascalCase for classes, structs, and enums: `FileManagerPane` in `native/qt6/src/file_manager_pane.h`, `AssetRow` in `native/qt6/src/assets_model.h`, `SequenceMeta` in `native/qt6/src/live_preview_manager.h`, `TypeFilter` in `native/qt6/src/assets_model.h`. +- Use namespace-scoped helpers when the type is utility-only: `namespace PlatformSession` in `native/qt6/src/platform_session.h`. + +## Code Style + +**Formatting:** +- No dedicated formatter config is detected in the workspace root; `.clang-format` and `.editorconfig` are not present. +- Follow the existing manual Qt/C++ style in `native/qt6/src/`: braces on the next line for function definitions in `native/qt6/src/main.cpp` and `native/qt6/src/grid_scrub.cpp`, inline short methods in headers such as `AssetsModel::rowCount()` in `native/qt6/src/assets_model.h`, and spaces around references/pointers like `const QString&` and `QObject* parent`. +- Prefer Qt string/value helpers already used across the codebase: `QStringLiteral(...)` in `native/qt6/src/main.cpp`, `QLatin1Char('0')` in `native/qt6/src/assets_model.cpp`, `Q_UNUSED(...)` in `native/qt6/src/assets_model.h` and `native/qt6/src/mainwindow.cpp`. + +**Linting:** +- Static analysis is configured with `.clang-tidy`. +- Enabled checks: `clang-analyzer-*`, `bugprone-*`, `performance-*`, and `modernize-*` in `.clang-tidy`. +- `ENABLE_CLANG_TIDY` is an opt-in CMake flag in `native/qt6/CMakeLists.txt`; CI enables it in `.github/workflows/ci.yml`. + +## Import Organization + +**Order:** +1. Qt and platform headers first: `#include `, `#include ` in `native/qt6/src/main.cpp`. +2. Local project headers next: `#include "mainwindow.h"`, `#include "db.h"` in `native/qt6/src/main.cpp`. +3. Standard library or conditional external headers last/near usage: `#include ` in `native/qt6/src/main.cpp`, FFmpeg headers behind feature guards in `native/qt6/src/live_preview_manager.cpp`. + +**Path Aliases:** +- Not detected. Use direct relative includes for project code such as `#include "db.h"` in `native/qt6/src/assets_model.cpp` and `#include "../src/live_preview_manager.h"` in `native/qt6/tests/test_live_preview_manager.cpp`. + +## Error Handling + +**Patterns:** +- Prefer early returns on invalid state or failures: `DB::init()` in `native/qt6/src/db.cpp`, `Importer::importFile()` in `native/qt6/src/importer.cpp`, `LivePreviewManager::requestFrame()` in `native/qt6/src/live_preview_manager.cpp`. +- Return `bool`, `int`, or empty Qt value types to signal failure instead of throwing: `DB::exec()` in `native/qt6/src/db.cpp`, `Importer::importFolder()` in `native/qt6/src/importer.cpp`, `LivePreviewManager::cachedFrame()` in `native/qt6/src/live_preview_manager.cpp`. +- Use log-based error reporting with `qWarning()`/`qCritical()` for operational failures: `native/qt6/src/db.cpp`, `native/qt6/src/main.cpp`, `native/qt6/src/preview_overlay.cpp`. +- Exceptions are not a primary error flow. `native/qt6/src/live_preview_manager.cpp` includes ``, but observed control flow still uses return values and emitted failure signals. + +## Logging + +**Framework:** `qDebug` / `qWarning` / `qCritical` routed through `customMessageHandler` and `LogManager`. + +**Patterns:** +- Keep the single Qt message handler in `native/qt6/src/main.cpp`; do not add another handler. +- Use structured component prefixes in log messages: `"[MAIN]"` in `native/qt6/src/main.cpp`, `"[LivePreview]"` in `native/qt6/src/live_preview_manager.cpp`, `"[PreviewOverlay]"` in `native/qt6/src/preview_overlay.cpp`. +- Use `LogManager::instance().addLog(...)` for persistent application log entries in `native/qt6/src/main.cpp` and `native/qt6/src/importer.cpp`. + +## Comments + +**When to Comment:** +- Add doc blocks for non-trivial widgets/managers and public APIs: `FileManagerPane` in `native/qt6/src/file_manager_pane.h`, `LivePreviewManager` in `native/qt6/src/live_preview_manager.h`, `GridScrubOverlay` in `native/qt6/src/grid_scrub.h`. +- Use inline rationale comments for performance, threading, and platform constraints: `native/qt6/src/live_preview_manager.cpp`, `native/qt6/src/importer.cpp`, `native/qt6/src/main.cpp`. + +**JSDoc/TSDoc:** +- Not applicable. +- Use C++ Doxygen-style `/** ... */` blocks instead, as in `native/qt6/src/file_manager_pane.h` and `native/qt6/src/media/tlrender_viewport.h`. + +## Function Design + +**Size:** +- Small helpers are preferred for reusable logic: `computeFileSha256()` in `native/qt6/src/db.cpp`, `buildSequencePaths()` in `native/qt6/src/assets_model.cpp`, `isVideoExtension()` in `native/qt6/src/live_preview_manager.cpp`. +- Large UI/controller classes split setup and behavior into focused methods instead of one constructor body: `setupUi()`, `setupToolbar()`, `setupViews()`, `setupPreviewPanel()` in `native/qt6/src/file_manager_pane.h`. + +**Parameters:** +- Pass Qt value types by `const &` for strings and containers: `const QString& filePath` in `native/qt6/src/importer.cpp`, `const QModelIndex& idx` in `native/qt6/src/assets_model.h`. +- Default `QObject* parent = nullptr` for QObject-derived classes: `FileManagerPane(QWidget *parent = nullptr)` in `native/qt6/src/file_manager_pane.h`, `LivePreviewManager(QObject* parent = nullptr)` in `native/qt6/src/live_preview_manager.h`. + +**Return Values:** +- Use direct Qt/C++ types rather than wrappers: `QVariant`, `QVariantMap`, `QStringList`, `bool`, `int` in `native/qt6/src/assets_model.h`. +- For cache/query lookups, return empty objects for misses: `LivePreviewManager::FrameHandle{}` in `native/qt6/src/live_preview_manager.cpp`, empty `QString()` in `native/qt6/src/db.cpp`. + +## Module Design + +**Exports:** +- Most headers export one primary class or one cohesive set of related types: `native/qt6/src/log_manager.h`, `native/qt6/src/live_preview_manager.h`, `native/qt6/src/assets_model.h`. +- Qt-facing modules expose signals/slots and `Q_PROPERTY` directly in headers: `native/qt6/src/assets_model.h`, `native/qt6/src/file_manager_pane.h`, `native/qt6/src/log_manager.h`. +- Singleton access is an established pattern for shared services: `DB::instance()` in `native/qt6/src/db.cpp`, `LogManager::instance()` in `native/qt6/src/log_manager.h`, `LivePreviewManager::instance()` in `native/qt6/src/live_preview_manager.cpp`. + +**Barrel Files:** +- Not used. Include concrete headers directly from `native/qt6/src/`. + +## Additional Observed Prescriptions + +- Use Qt signal/slot wiring with `connect(...)` rather than manual callback plumbing, as in `native/qt6/src/grid_scrub.cpp` and `native/qt6/src/mainwindow.cpp`. +- Guard optional features with both definition and value checks, matching `.github/copilot-instructions.md` and `native/qt6/src/live_preview_manager.cpp`: `#if defined(HAVE_TLRENDER) && HAVE_TLRENDER`. +- Protect shared threaded state with Qt lock helpers, not ad hoc synchronization: `QMutexLocker` in `native/qt6/src/db.cpp` and `native/qt6/src/live_preview_manager.cpp`, `QReadLocker` / `QWriteLocker` in `native/qt6/src/live_preview_manager.cpp`. +- Preserve existing mixed header-guard style. Some headers use `#pragma once` such as `native/qt6/src/assets_model.h`; others use classic guards such as `native/qt6/src/file_manager_pane.h`. Match the surrounding directory/file style instead of rewriting globally. + +--- + +*Convention analysis: 2026-04-11* diff --git a/.planning/codebase/INTEGRATIONS.md b/.planning/codebase/INTEGRATIONS.md new file mode 100644 index 00000000..3ddb760a --- /dev/null +++ b/.planning/codebase/INTEGRATIONS.md @@ -0,0 +1,90 @@ +# External Integrations + +**Analysis Date:** 2026-04-11 + +## APIs & External Services + +**Remote HTTP APIs:** +- Not detected. Searches across `native/qt6/src/*.cpp` and `native/qt6/src/*.h` did not show `QNetworkAccessManager`, OAuth clients, webhook handlers, or application HTTP API calls. + +**Desktop/Search Services:** +- Everything Search - Windows desktop search service used for disk-wide filename search in `native/qt6/src/everything_search.cpp` and `native/qt6/src/everything_search.h`. + - SDK/Client: `Everything64.dll`, dynamically loaded with `QLibrary` in `native/qt6/src/everything_search.cpp`. + - Auth: Not applicable; availability depends on local DLL presence and a running Everything service. + +**Media Toolchain:** +- tlRender - playback/render stack integrated at build time in `native/qt6/CMakeLists.txt`, with related wrappers in `native/qt6/src/media/tlrender_player.cpp`, `native/qt6/src/media/tlrender_widget.cpp`, and `native/qt6/src/media/tlrender_viewport.cpp`. + - SDK/Client: tlRender CMake package targets from the local `third_party/tlRender-*` install referenced in `native/qt6/CMakeLists.txt`. + - Auth: Not applicable. +- FFmpeg / ffprobe - external executables and libraries used for conversion, probing, and metadata extraction in `native/qt6/src/media_convert_dialog.cpp`, `native/qt6/src/media_converter_worker.cpp`, and `native/qt6/src/video_metadata.cpp`. + - SDK/Client: FFmpeg CLI (`ffmpeg`, `ffprobe`) and libav* headers/libs behind `HAVE_FFMPEG` in `native/qt6/src/video_metadata.cpp` and `native/qt6/src/live_preview_manager.cpp`. + - Auth: Not applicable. +- ImageMagick - external conversion tool for single-image format conversion in `native/qt6/src/media_convert_dialog.cpp` and `native/qt6/src/media_converter_worker.cpp`. + - SDK/Client: `magick.exe` or `magick` located from app dir, `third_party`, env vars, or PATH in `native/qt6/src/media_convert_dialog.cpp`. + - Auth: Not applicable. +- Office document readers - local file-format integrations for OOXML ZIP containers and legacy OLE compound documents in `native/qt6/src/office_preview.cpp`. + - SDK/Client: `MINIZIP::minizip-ng` plus Windows COM storage APIs (`StgOpenStorageEx`) in `native/qt6/src/office_preview.cpp`. + - Auth: Not applicable. + +## Data Storage + +**Databases:** +- SQLite database stored locally as `kasset.db` under `QStandardPaths::AppDataLocation`, initialized in `native/qt6/src/main.cpp` and opened with `QSqlDatabase::addDatabase("QSQLITE")` in `native/qt6/src/db.cpp`. + - Connection: local filesystem path, not an environment variable. + - Client: Qt SQL (`Qt6::Sql`) through `native/qt6/src/db.cpp` and `native/qt6/CMakeLists.txt`. + +**File Storage:** +- Local filesystem only. Asset source files remain on disk, version copies are stored under `AppDataLocation/versions` in `native/qt6/src/db.cpp`, and thumbnail cache files are stored under `AppDataLocation/thumbnail_cache` in `native/qt6/src/thumbnail_cache_manager.cpp`. + +**Caching:** +- In-memory thumbnail/frame cache in `native/qt6/src/live_preview_manager.cpp`. +- Persistent on-disk thumbnail cache in `native/qt6/src/thumbnail_cache_manager.cpp`. + +## Authentication & Identity + +**Auth Provider:** +- None. The application is a local desktop app and no user login, OAuth provider, or API token exchange is implemented in `native/qt6/src`. + - Implementation: Not applicable. + +## Monitoring & Observability + +**Error Tracking:** +- Local crash dump and crash log generation on Windows in `native/qt6/src/main.cpp` using `MiniDumpWriteDump`, `crash.dmp`, and `crash.log` under `QStandardPaths::AppDataLocation`. + +**Logs:** +- Centralized Qt message handling routed through `customMessageHandler` and `LogManager` in `native/qt6/src/main.cpp` and `native/qt6/src/log_manager.cpp`. +- Persistent app log written to `app.log` next to the executable in `native/qt6/src/log_manager.cpp`. + +## CI/CD & Deployment + +**Hosting:** +- No server hosting platform is detected. Distribution is a packaged desktop binary created by `scripts/build-windows.ps1` and `scripts/build-installer.ps1`. + +**CI Pipeline:** +- GitHub Actions CI in `.github/workflows/ci.yml`. +- Windows and Ubuntu jobs configure/build/install QtTest targets, and a separate Ubuntu job generates coverage with `gcovr` in `.github/workflows/ci.yml`. + +## Environment Configuration + +**Required env vars:** +- `VCPKG_ROOT` - vcpkg toolchain root in `native/qt6/CMakeLists.txt` and `.github/workflows/ci.yml`. +- `Qt6`, `Qt6_DIR`, or `QT_DIR` - Qt discovery inputs in `native/qt6/CMakePresets.json` and `scripts/build-windows.ps1`. +- `FFMPEG_ROOT` - optional FFmpeg runtime/tool discovery in `scripts/build-windows.ps1` and `native/qt6/src/media_convert_dialog.cpp`. +- `IMAGEMAGICK_ROOT` or `MAGICK_ROOT` - optional ImageMagick discovery in `scripts/build-windows.ps1` and `native/qt6/src/media_convert_dialog.cpp`. +- `XDG_SESSION_TYPE` and `QT_QPA_PLATFORM` - Linux/Wayland behavior checks in `native/qt6/src/platform_session.h` and `native/qt6/src/main.cpp`. + +**Secrets location:** +- Not applicable for application runtime because no remote-service credentials are used. +- Build inputs are expected from shell or CI environment variables, not from committed secret files; no `.env*` files were detected in this worktree. + +## Webhooks & Callbacks + +**Incoming:** +- None detected. + +**Outgoing:** +- None detected. + +--- + +*Integration audit: 2026-04-11* diff --git a/.planning/codebase/STACK.md b/.planning/codebase/STACK.md new file mode 100644 index 00000000..0dc6e37b --- /dev/null +++ b/.planning/codebase/STACK.md @@ -0,0 +1,89 @@ +# Technology Stack + +**Analysis Date:** 2026-04-11 + +## Languages + +**Primary:** +- C++20 - main desktop application code in `native/qt6/src/*.cpp`, `native/qt6/src/*.h`, with the standard set in `native/qt6/CMakeLists.txt`. + +**Secondary:** +- CMake - build, packaging, dependency discovery, and install rules in `native/qt6/CMakeLists.txt`, `native/qt6/tests/CMakeLists.txt`, and `wayland-probe/CMakeLists.txt`. +- PowerShell - Windows build, packaging, and dependency bootstrap scripts in `scripts/build-windows.ps1`, `scripts/build-installer.ps1`, `scripts/fetch-ffmpeg.ps1`, and `scripts/download-everything-sdk.ps1`. +- YAML - CI automation in `.github/workflows/ci.yml`. + +## Runtime + +**Environment:** +- Native desktop runtime on Qt 6 Widgets, launched from `native/qt6/src/main.cpp`. +- Windows is the primary packaged target in `README.md`, `scripts/build-windows.ps1`, and `scripts/build-installer.ps1`. +- Linux compatibility code exists in `native/qt6/src/main.cpp`, `native/qt6/src/platform_session.h`, and `wayland-probe/CMakeLists.txt`. + +**Package Manager:** +- CMake-based native build in `native/qt6/CMakeLists.txt`. +- vcpkg toolchain support is wired through `native/qt6/CMakeLists.txt` and hardcoded to `C:/vcpkg` in `scripts/build-windows.ps1`. +- Lockfile: missing for native dependencies; no `package-lock.json`, `pnpm-lock.yaml`, `Cargo.lock`, `poetry.lock`, or similar manifest lockfile was detected in this worktree. + +## Frameworks + +**Core:** +- Qt 6 Widgets/Multimedia/Sql/Concurrent/Svg/OpenGLWidgets - app UI, media UI plumbing, SQLite access, concurrency, and rendering in `native/qt6/CMakeLists.txt`. +- Qt PDF (optional) - PDF viewing when available, guarded in `native/qt6/CMakeLists.txt` with `Qt6::Pdf` and `Qt6::PdfWidgets`. +- ActiveQt (optional, Windows only) - Office automation support detection in `native/qt6/CMakeLists.txt`. + +**Testing:** +- QtTest - unit test runner and assertions configured in `native/qt6/tests/CMakeLists.txt`. + +**Build/Dev:** +- CMake >= 3.21 - minimum build system version in `native/qt6/CMakeLists.txt`, `native/qt6/CMakePresets.json`, and `wayland-probe/CMakeLists.txt`. +- Ninja and Visual Studio 2022 generators - supported in `native/qt6/CMakePresets.json` and `scripts/build-windows.ps1`. +- clang-tidy, ASan, UBSan, and coverage flags - optional quality tooling in `native/qt6/CMakeLists.txt` and exercised in `.github/workflows/ci.yml`. +- CPack - archive/installer packaging in `native/qt6/CMakeLists.txt`. +- NSIS - Windows installer build path in `scripts/build-installer.ps1` and `native/qt6/CMakeLists.txt`. + +## Key Dependencies + +**Critical:** +- Qt 6.6.3 in CI - installed by `.github/workflows/ci.yml`; required application modules are resolved in `native/qt6/CMakeLists.txt`. +- tlRender - required package for app builds in `native/qt6/CMakeLists.txt`; linked through `tlRender::tlTimeline`, `tlRender::tlGL`, `tlRender::tlIO`, `tlRender::tlCore`, `tlRender::tlUI`, `tlRender::tlDevice`, `tlRender::tlQt`, and `tlRender::tlQtWidget`. +- SQLite via Qt SQL - persistent asset database in `native/qt6/src/db.cpp` and linked through `Qt6::Sql` in `native/qt6/CMakeLists.txt`. +- minizip-ng - OOXML ZIP reading for Office previews in `native/qt6/CMakeLists.txt` and `native/qt6/src/office_preview.cpp`. + +**Infrastructure:** +- OpenImageIO - still-image loading path through `native/qt6/src/oiio_image_loader.cpp`, `native/qt6/src/live_preview_manager.cpp`, and `HAVE_OPENIMAGEIO` definitions from `native/qt6/CMakeLists.txt`. +- OpenColorIO / bundled ACES config - color-management support via tlRender and installed config assets in `native/qt6/CMakeLists.txt`. +- FFmpeg - media conversion, metadata probing, and optional runtime decode support in `native/qt6/src/media_convert_dialog.cpp`, `native/qt6/src/media_converter_worker.cpp`, `native/qt6/src/video_metadata.cpp`, and `native/qt6/src/live_preview_manager.cpp`. +- Everything SDK - Windows fast search integration via `native/qt6/src/everything_search.cpp` and packaged DLL handling in `native/qt6/CMakeLists.txt` and `scripts/build-windows.ps1`. +- ImageMagick - single-image conversion backend in `native/qt6/src/media_convert_dialog.cpp` and `native/qt6/src/media_converter_worker.cpp`. + +## Configuration + +**Environment:** +- Build-time tool discovery uses environment variables `VCPKG_ROOT`, `FFMPEG_ROOT`, `IMAGEMAGICK_ROOT`, `MAGICK_ROOT`, `Qt6`, `Qt6_DIR`, and `QT_DIR` in `native/qt6/CMakeLists.txt`, `native/qt6/CMakePresets.json`, `scripts/build-windows.ps1`, and `native/qt6/src/media_convert_dialog.cpp`. +- Runtime app identity is configured through `QCoreApplication::setOrganizationName`, `setOrganizationDomain`, `setApplicationName`, and `setApplicationVersion` in `native/qt6/src/main.cpp`. +- Persistent user data uses `QStandardPaths::AppDataLocation` for `kasset.db`, crash files, and thumbnail cache in `native/qt6/src/main.cpp` and `native/qt6/src/thumbnail_cache_manager.cpp`. +- No `.env` or `.env.*` files were detected in `/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt`. + +**Build:** +- Primary build config: `native/qt6/CMakeLists.txt`. +- Build presets: `native/qt6/CMakePresets.json`. +- Test build config: `native/qt6/tests/CMakeLists.txt`. +- Windows packaging script: `scripts/build-windows.ps1`. +- Installer script: `scripts/build-installer.ps1`. +- CI config: `.github/workflows/ci.yml`. + +## Platform Requirements + +**Development:** +- CMake 3.21+ and a C++20 compiler per `native/qt6/CMakeLists.txt`. +- Qt 6 with Widgets, Multimedia, MultimediaWidgets, Sql, Concurrent, Svg, SvgWidgets, and OpenGLWidgets available to CMake in `native/qt6/CMakeLists.txt`. +- For Windows packaging, the repository expects `C:/vcpkg`, Qt MSVC kits, optional `third_party/ffmpeg`, optional `third_party/imagemagick`, optional `third_party/everything/Everything64.dll`, and required tlRender under `third_party/tlRender-build/install-Release` or `third_party/tlRender-install-Release` as referenced by `scripts/build-windows.ps1` and `native/qt6/CMakeLists.txt`. +- CI installs Ninja plus Qt 6.6.3 on Windows and Ubuntu in `.github/workflows/ci.yml`. + +**Production:** +- Primary deployment target is a packaged Windows desktop app in `dist/portable/bin/kassetmanagerqt.exe`, with ZIP or NSIS packaging from `native/qt6/CMakeLists.txt` and `scripts/build-installer.ps1`. +- Non-Windows packaging currently resolves to TGZ in `native/qt6/CMakeLists.txt`. + +--- + +*Stack analysis: 2026-04-11* diff --git a/.planning/codebase/STRUCTURE.md b/.planning/codebase/STRUCTURE.md new file mode 100644 index 00000000..811034af --- /dev/null +++ b/.planning/codebase/STRUCTURE.md @@ -0,0 +1,181 @@ +# Codebase Structure + +**Analysis Date:** 2026-04-11 + +## Directory Layout + +```text +KAssetManager/ +├── .github/ # CI workflows and Copilot guidance +├── .planning/codebase/ # Generated mapping documents for GSD workflows +├── docs/ # Developer and user documentation +├── installer/ # NSIS installer definition +├── native/qt6/ # Main Qt 6 desktop application +│ ├── cmake/ # CMake helper modules +│ ├── src/ # Production C++ source and headers +│ │ └── media/ # tlRender-specific media adapters/widgets +│ └── tests/ # QtTest executables +├── scripts/ # Build and dependency bootstrap scripts +├── third_party/ # Bundled external runtimes and SDKs +├── wayland-probe/ # Separate platform probe utility build tree +└── wayland_probe.cpp # Standalone Wayland probe source +``` + +## Directory Purposes + +**`native/qt6/src/`:** +- Purpose: Main application code. +- Contains: Bootstrap, window shell, models, dialogs, delegates, watchers, services, database code, preview logic. +- Key files: `native/qt6/src/main.cpp`, `native/qt6/src/mainwindow.cpp`, `native/qt6/src/db.cpp`, `native/qt6/src/project_db.cpp`, `native/qt6/src/importer.cpp`, `native/qt6/src/live_preview_manager.cpp`. + +**`native/qt6/src/media/`:** +- Purpose: Media backend wrappers and rendering widgets. +- Contains: tlRender player wrappers and viewport widgets. +- Key files: `native/qt6/src/media/tlrender_player.h`, `native/qt6/src/media/tlrender_viewport.h`, `native/qt6/src/media/tlrender_widget.h`. + +**`native/qt6/tests/`:** +- Purpose: Isolated QtTest executables for core subsystems. +- Contains: `test_*.cpp` sources plus the test build manifest. +- Key files: `native/qt6/tests/CMakeLists.txt`, `native/qt6/tests/test_db.cpp`, `native/qt6/tests/test_models.cpp`, `native/qt6/tests/test_importer.cpp`, `native/qt6/tests/test_live_preview_manager.cpp`. + +**`native/qt6/cmake/`:** +- Purpose: Packaging/build helpers. +- Contains: Deployment support modules. +- Key files: `native/qt6/cmake/DeployQt.cmake`. + +**`scripts/`:** +- Purpose: Developer build, packaging, and dependency fetch entry points. +- Contains: PowerShell scripts for Windows builds and dependency downloads. +- Key files: `scripts/build-windows.ps1`, `scripts/build-installer.ps1`, `scripts/download-everything-sdk.ps1`, `scripts/fetch-ffmpeg.ps1`. + +**`third_party/`:** +- Purpose: Checked-in third-party runtimes and source trees used by builds. +- Contains: `tlRender`, Everything SDK, FFmpeg, ImageMagick assets. +- Key files: `third_party/tlRender-install-Release/`, `third_party/tlRender-src/`, `third_party/everything/`, `third_party/ffmpeg/`. + +**`docs/`:** +- Purpose: Human-facing reference material. +- Contains: Architecture, dependencies, install docs, user guide, codemap. +- Key files: `docs/ARCHITECTURE.md`, `docs/DEVELOPER_GUIDE.md`, `docs/DEPENDENCIES.md`, `docs/USER_GUIDE.md`. + +**`.github/`:** +- Purpose: Automation and repo policy. +- Contains: CI workflows and machine guidance. +- Key files: `.github/workflows/ci.yml`, `.github/copilot-instructions.md`. + +**`.planning/codebase/`:** +- Purpose: Generated planning artifacts used by GSD orchestration. +- Contains: Focused mapping documents such as `ARCHITECTURE.md` and `STRUCTURE.md`. +- Key files: `.planning/codebase/ARCHITECTURE.md`, `.planning/codebase/STRUCTURE.md`. + +**`installer/`:** +- Purpose: Native installer packaging metadata. +- Contains: NSIS script. +- Key files: `installer/kassetmanager.nsi`. + +**`wayland-probe/`:** +- Purpose: Platform-specific probe utility build directory. +- Contains: Generated CMake/Ninja build output for the probe. +- Key files: `wayland-probe/build.ninja`, `wayland-probe/CMakeCache.txt`. + +## Key File Locations + +**Entry Points:** +- `native/qt6/src/main.cpp`: Desktop application bootstrap. +- `native/qt6/src/mainwindow.cpp`: Main application shell and command wiring. +- `native/qt6/tests/CMakeLists.txt`: Test executable entrypoint definitions. +- `wayland_probe.cpp`: Standalone Wayland probe source. + +**Configuration:** +- `native/qt6/CMakeLists.txt`: Main build graph, dependency detection, install rules, compile definitions. +- `native/qt6/CMakePresets.json`: Preset-based CMake invocation setup. +- `.github/workflows/ci.yml`: CI matrix for Windows, Ubuntu, and coverage. +- `.clang-tidy`: Static analysis configuration. +- `.github/copilot-instructions.md`: Repository-specific implementation constraints. + +**Core Logic:** +- `native/qt6/src/db.cpp`: Asset Manager SQLite schema and CRUD. +- `native/qt6/src/project_db.cpp`: Project Manager SQLite schema and CRUD. +- `native/qt6/src/importer.cpp`: Shared import pipeline through `IAssetDatabase`. +- `native/qt6/src/live_preview_manager.cpp`: Cached async decode service. +- `native/qt6/src/file_ops.cpp`: Background file operation queue. +- `native/qt6/src/sequence_detector.cpp`: Sequence detection and pattern utilities. + +**Testing:** +- `native/qt6/tests/test_db.cpp`: Database behavior. +- `native/qt6/tests/test_models.cpp`: Model behavior. +- `native/qt6/tests/test_importer.cpp`: Import pipeline. +- `native/qt6/tests/test_live_preview_manager.cpp`: Preview manager behavior. +- `native/qt6/tests/test_platform_session.cpp`: Linux session detection helper coverage. + +## Naming Conventions + +**Files:** +- Use lowercase snake_case for production files: `native/qt6/src/live_preview_manager.cpp`, `native/qt6/src/project_manager_watcher.h`. +- Keep `.h`/`.cpp` pairs together with the same basename: `native/qt6/src/db.h` + `native/qt6/src/db.cpp`. +- Name tests with the `test_*.cpp` prefix: `native/qt6/tests/test_importer.cpp`. +- Keep media adapter files under the `media/` subdirectory with a shared `tlrender_` prefix: `native/qt6/src/media/tlrender_player.cpp`. + +**Directories:** +- Keep platform/build directories noun-based and lowercase: `native/qt6/`, `scripts/`, `docs/`, `third_party/`. +- Use a focused nested directory only when a subsystem has a distinct external integration boundary, as in `native/qt6/src/media/`. + +## Where to Add New Code + +**New Feature:** +- Primary code: `native/qt6/src/`. +- Tests: `native/qt6/tests/` with a new `test_*.cpp` target added in `native/qt6/tests/CMakeLists.txt`. + +**New Component/Module:** +- Implementation: Add a paired `native/qt6/src/.h` and `native/qt6/src/.cpp`, then register both in `native/qt6/CMakeLists.txt`. + +**Utilities:** +- Shared helpers: `native/qt6/src/utils.{h,cpp}`, `native/qt6/src/file_utils.{h,cpp}`, or a new focused helper pair in `native/qt6/src/`. + +**New UI Surface:** +- Main-window-integrated feature: wire it through `native/qt6/src/mainwindow.{h,cpp}` and existing models/services. +- Reusable file-browser subview: extend `native/qt6/src/file_manager_pane.{h,cpp}` if the behavior belongs to a pane rather than the whole shell. + +**New Data Model:** +- Asset-library data: place model code beside `native/qt6/src/assets_model.{h,cpp}` and `native/qt6/src/virtual_folders.{h,cpp}`. +- Project-manager data: place model code beside `native/qt6/src/projects_model.{h,cpp}`, `native/qt6/src/project_assets_model.{h,cpp}`, and `native/qt6/src/project_folders_model.{h,cpp}`. + +**New Media Integration:** +- Backend wrappers and rendering widgets: `native/qt6/src/media/`. +- Thumbnail/preview helpers: `native/qt6/src/live_preview_manager.{h,cpp}`, `native/qt6/src/oiio_image_loader.{h,cpp}`, or a sibling helper in `native/qt6/src/`. + +## Special Directories + +**`native/qt6/src/media/`:** +- Purpose: Isolate tlRender-facing code from general UI and model code. +- Generated: No. +- Committed: Yes. + +**`native/qt6/tests/`:** +- Purpose: Keep test executables separate from production targets. +- Generated: No. +- Committed: Yes. + +**`native/qt6/cmake/`:** +- Purpose: Hold reusable CMake modules instead of inlining deployment logic into `native/qt6/CMakeLists.txt`. +- Generated: No. +- Committed: Yes. + +**`third_party/`:** +- Purpose: Vendor external dependencies and runtime payloads used by local builds and packaging. +- Generated: No. +- Committed: Yes. + +**`build-linux/`, `build-linux-make/`, `wayland-probe/`:** +- Purpose: Store generated local build outputs and probe artifacts. +- Generated: Yes. +- Committed: Mixed; treat them as build artifacts rather than source locations. + +**`.planning/codebase/`:** +- Purpose: Store generated repository maps for planning/execution workflows. +- Generated: Yes. +- Committed: Yes. + +--- + +*Structure analysis: 2026-04-11* diff --git a/.planning/codebase/TESTING.md b/.planning/codebase/TESTING.md new file mode 100644 index 00000000..95333153 --- /dev/null +++ b/.planning/codebase/TESTING.md @@ -0,0 +1,170 @@ +# Testing Patterns + +**Analysis Date:** 2026-04-11 + +## Test Framework + +**Runner:** +- QtTest via Qt 6 Test module +- Config: `native/qt6/tests/CMakeLists.txt` + +**Assertion Library:** +- QtTest assertions (`QVERIFY`, `QVERIFY2`, `QCOMPARE`, `QSKIP`) in `native/qt6/tests/test_db.cpp`, `native/qt6/tests/test_models.cpp`, `native/qt6/tests/test_virtual_drag.cpp`. + +**Run Commands:** +```bash +cmake -S native/qt6 -B build -G Ninja -DBUILD_APP=OFF -DBUILD_TESTS=ON -DCMAKE_BUILD_TYPE=Release # Configure tests +cmake --build build -j 2 # Build tests +ctest --test-dir build --output-on-failure # Run all tests +``` + +## Test File Organization + +**Location:** +- Use a separate test directory at `native/qt6/tests/`. +- Build each test as its own executable in `native/qt6/tests/CMakeLists.txt`. + +**Naming:** +- Use `test_.cpp`: `native/qt6/tests/test_db.cpp`, `native/qt6/tests/test_importer.cpp`, `native/qt6/tests/test_live_preview_manager.cpp`. +- Keep the CTest name equal to the executable name with `add_test(NAME test_db COMMAND test_db)` in `native/qt6/tests/CMakeLists.txt`. + +**Structure:** +``` +native/qt6/tests/ +├── CMakeLists.txt +├── test_db.cpp +├── test_models.cpp +├── test_importer.cpp +├── test_sequence_detector.cpp +└── test_live_preview_manager.cpp +``` + +## Test Structure + +**Suite Organization:** +```typescript +class TestSequenceDetector : public QObject { + Q_OBJECT +private slots: + void testGeneratePattern(); + void testExtractFrameNumber(); + void testIsSequenceFile(); + void testDetectSequences_basic(); +}; + +QTEST_APPLESS_MAIN(TestSequenceDetector) +#include "test_sequence_detector.moc" +``` + +**Patterns:** +- Define each suite as a `QObject` subclass with test methods under `private slots:` in `native/qt6/tests/test_sequence_detector.cpp`, `native/qt6/tests/test_platform_session.cpp`, and `native/qt6/tests/test_models.cpp`. +- Use `initTestCase()` / `cleanupTestCase()` only when shared setup is valuable, as in `native/qt6/tests/test_db.cpp` and `native/qt6/tests/test_models.cpp`. +- Prefer direct state assertions after real operations, for example `QCOMPARE(model.rowCount({}), 2)` in `native/qt6/tests/test_models.cpp` and `QCOMPARE(seqs.size(), 1)` in `native/qt6/tests/test_sequence_detector.cpp`. + +## Mocking + +**Framework:** +- No mocking framework is detected. + +**Patterns:** +```typescript +target_compile_definitions(test_live_preview_manager PRIVATE + HAVE_OPENIMAGEIO=0 + HAVE_FFMPEG=0 + HAVE_TLRENDER=0 +) +``` + +- The codebase favors real collaborators with constrained environments over mocks. +- Use temporary files/directories and real Qt objects instead of fake services: `QTemporaryDir` in `native/qt6/tests/test_db.cpp`, `native/qt6/tests/test_importer.cpp`, and `native/qt6/tests/test_live_preview_manager.cpp`. +- Disable heavyweight optional integrations at compile time when isolating a unit, as done for `test_live_preview_manager` in `native/qt6/tests/CMakeLists.txt`. + +**What to Mock:** +- Not a standard pattern in the current codebase. +- Prefer compile-time feature disabling and temporary filesystem/database setup before introducing mocks. + +**What NOT to Mock:** +- Do not replace Qt signals/slots or QtTest wait behavior; use `QSignalSpy` on real objects as in `native/qt6/tests/test_live_preview_manager.cpp` and `native/qt6/tests/test_media_converter_worker.cpp`. +- Do not replace SQLite/file-system behavior for DB/import tests; use real temp-backed inputs as in `native/qt6/tests/test_db.cpp` and `native/qt6/tests/test_importer.cpp`. + +## Fixtures and Factories + +**Test Data:** +```typescript +QTemporaryDir tmp; +QVERIFY(tmp.isValid()); +const QString imgPath = tmp.path() + "/color.png"; + +QImage img(64, 64, QImage::Format_ARGB32); +img.fill(QColor(200, 10, 10, 255)); +QVERIFY(img.save(imgPath)); +``` + +- Build fixtures inline inside the test file. +- Common fixture style is temp directories plus small helper functions such as `writeDummy()` in `native/qt6/tests/test_models.cpp` and `touch()` in `native/qt6/tests/test_importer.cpp`. + +**Location:** +- Fixtures live inside each test source file in `native/qt6/tests/`; no shared fixture/factory directory is detected. + +## Coverage + +**Requirements:** None enforced. + +**View Coverage:** +```bash +cmake -S native/qt6 -B build -G Ninja -DBUILD_APP=OFF -DBUILD_TESTS=ON -DENABLE_COVERAGE=ON -DCMAKE_BUILD_TYPE=Debug +cmake --build build -j 2 +ctest --test-dir build --output-on-failure +gcovr -r native/qt6 --filter native/qt6/src --xml -o build/coverage.xml --txt --branches +``` + +- Coverage is generated in CI by `.github/workflows/ci.yml` and uploaded as `build/coverage.xml`. + +## Test Types + +**Unit Tests:** +- Pure logic and platform helpers use app-less QtTest entry points: `native/qt6/tests/test_utils.cpp`, `native/qt6/tests/test_sequence_detector.cpp`, `native/qt6/tests/test_platform_session.cpp`. +- These suites commonly use `QTEST_APPLESS_MAIN(...)` and avoid widget startup. + +**Integration Tests:** +- DB/model/import tests exercise real SQLite, filesystem, and model code together: `native/qt6/tests/test_db.cpp`, `native/qt6/tests/test_models.cpp`, `native/qt6/tests/test_importer.cpp`. +- Async/service tests run real objects and wait for emitted signals: `native/qt6/tests/test_live_preview_manager.cpp`, `native/qt6/tests/test_media_converter_worker.cpp`. + +**E2E Tests:** +- Not used. + +## Common Patterns + +**Async Testing:** +```typescript +QSignalSpy spyReady(&mgr, &LivePreviewManager::frameReady); +mgr.requestFrame(imgPath, QSize(32,32), 0.0); +QVERIFY2(spyReady.wait(2000), "frameReady not emitted in time"); +``` + +- Use `QSignalSpy` and bounded waits for asynchronous behavior in `native/qt6/tests/test_live_preview_manager.cpp` and `native/qt6/tests/test_media_converter_worker.cpp`. +- For synchronous-fast paths that may still queue work, check `count()` first and then `wait(...)`, as in `native/qt6/tests/test_media_converter_worker.cpp`. + +**Error Testing:** +```typescript +#ifdef Q_OS_WIN + QSKIP("Linux/non-Windows stub behavior test"); +#else + QVERIFY(!VirtualDrag::startVirtualDrag(files)); +#endif +``` + +- Negative-path assertions are common: `QVERIFY(!search.initialize())` in `native/qt6/tests/test_everything_search.cpp`, `QVERIFY(!handle0.isValid())` in `native/qt6/tests/test_live_preview_manager.cpp`, and the platform-gated stub checks in `native/qt6/tests/test_virtual_drag.cpp`. + +## Build and Execution Notes + +- Test executables are installed to `build/install_run/bin` and several tests set their working directory there in `native/qt6/tests/CMakeLists.txt`. +- `enable_testing()` lives in `native/qt6/CMakeLists.txt`, and tests are included behind `BUILD_TESTS`. +- CI runs three main modes from `.github/workflows/ci.yml`: + - release test build on Windows + - debug build with `ENABLE_ASAN`, `ENABLE_UBSAN`, and `ENABLE_CLANG_TIDY` on Ubuntu + - coverage build with `ENABLE_COVERAGE` and `gcovr` on Ubuntu + +--- + +*Testing analysis: 2026-04-11* diff --git a/.planning/config.json b/.planning/config.json new file mode 100644 index 00000000..3711c68e --- /dev/null +++ b/.planning/config.json @@ -0,0 +1,27 @@ +{ + "model_profile": "genius", + "model_assignments": { + "planning": "github copilot gpt-5.4 medium", + "research": "github copilot gpt-5.4 medium", + "plan_check": "github copilot gpt-5.4 medium", + "execution": "github-copilot sonnet 4.6", + "verification": "copilot opus 4.6" + }, + "workflow": { + "research": true, + "plan_check": true, + "verifier": true, + "auto_advance": true, + "nyquist_validation": false, + "ui_phase": true, + "ui_safety_gate": false, + "use_worktrees": true, + "_auto_chain_active": false + }, + "git": { + "branching_strategy": "none" + }, + "hooks": { + "context_warnings": true + } +} \ No newline at end of file diff --git a/.planning/debug/file-ops-drag-drop-broken.md b/.planning/debug/file-ops-drag-drop-broken.md new file mode 100644 index 00000000..a80d5a90 --- /dev/null +++ b/.planning/debug/file-ops-drag-drop-broken.md @@ -0,0 +1,47 @@ +--- +status: investigating +trigger: "Investigate why file operations are broken: Copy/Cut/Paste/Delete/Rename and drag-and-drop in files and folders are not working. Trace from MainWindow and file manager views/models down to FileOps/DragUtils/VirtualDrag/file utils. Look for platform-specific assumptions, especially Windows shell APIs or unsupported behavior on Linux/Qt6. Do not edit code yet." +created: 2026-04-14T00:00:00Z +updated: 2026-04-14T00:20:00Z +--- + +## Current Focus + +hypothesis: Linux failures come from two concrete gaps: FileOpsQueue and VirtualDrag only execute on Windows, and rename has no refresh/error reporting so successful or failed renames are invisible in the File Manager UI +test: correlate MainWindow/FileManagerPane action wiring with non-Windows branches and inspect rename path for post-action refresh/error handling +expecting: copy/cut/paste/delete/drop will terminate in Windows-only backends; drag start will return before Qt fallback; rename will bypass FileOpsQueue but do no verification or model refresh +next_action: consolidate traced pipeline and root-cause evidence into diagnosis and fix strategy + +## Symptoms + +expected: File Manager copy, cut, paste, delete, rename, and drag-and-drop work for files and folders on Linux/Qt6 +actual: Copy/Cut/Paste/Delete/Rename and drag-and-drop in files and folders are not working +errors: none provided +reproduction: use File Manager file operations or drag files/folders between locations +started: unknown + +## Eliminated + +## Evidence + +- timestamp: 2026-04-14T00:04:00Z + checked: initial repository instructions and codemaps + found: File Manager operations are documented as flowing through MainWindow, FmGridViewEx/FmListViewEx, DragUtils, VirtualDrag, FileOps, and FileUtils + implication: investigation should trace UI actions from MainWindow into those concrete classes rather than assuming Qt default behavior + +- timestamp: 2026-04-14T00:11:00Z + checked: MainWindow file operation handlers, fm_views_ex, FileOpsQueue, DragUtils, VirtualDrag, FileUtils + found: MainWindow copy/cut/paste/delete route into FileOpsQueue for execution; fm view drags call VirtualDrag::startAdaptivePathsDrag directly; non-Windows FileOpsQueue always returns "OS-level file operations not supported on this platform" and non-Windows VirtualDrag functions are stubbed to return false + implication: Linux has an apparent UI pipeline for operations, but the execution layer is either Windows-only or a no-op for drag start, which can explain the broad failure across copy/cut/paste/delete and file drag operations + +- timestamp: 2026-04-14T00:18:00Z + checked: MainWindow eventFilter drop handling, FileManagerPane secondary-pane signals, fm_views_ex drag code, rename handlers + found: drops on File Manager views/tree also enqueue FileOpsQueue; FmGridViewEx/FmListViewEx contain a Qt QDrag fallback but it is dead code after an unconditional return following VirtualDrag::startAdaptivePathsDrag; rename uses QFile::rename/QDir::rename directly without checking return values or refreshing fmDirModel/fmEverythingTreeModel/secondary pane + implication: internal/external drag is guaranteed to fail on Linux because the only executed drag path is a stub, while rename can appear broken because the UI never confirms failure or refreshes visible models after the filesystem change + +## Resolution + +root_cause: File Manager file operations were ported incompletely to Linux. Copy/move/delete and File Manager drop handling all terminate in FileOpsQueue, but FileOpsQueue only performs real work inside _WIN32 and returns an unsupported-platform error on Linux. File Manager drag start is similarly hard-wired to Windows-only VirtualDrag; on Linux the called stub returns false, and the existing Qt QDrag fallback is unreachable because startDrag returns before it. Rename bypasses FileOpsQueue, but its handlers do not check rename success or refresh the File Manager models/tree, so on Linux it can fail silently or appear to do nothing. +fix: Replace the non-Windows FileOpsQueue branch with Qt/QFile/QDir-based copy/move/delete implementations using the existing helper functions, restore a real Qt mime-data drag fallback for non-Windows in FmGridViewEx/FmListViewEx (or in VirtualDrag), and add result checking plus explicit File Manager refresh/tree refresh after rename. +verification: Re-run each File Manager operation on Linux in both primary and secondary panes, verify on-disk changes and visible model refresh, and verify drag start/drop works between File Manager views, tree targets, and external file managers. +files_changed: [] diff --git a/.planning/debug/live-preview-image-limit.md b/.planning/debug/live-preview-image-limit.md new file mode 100644 index 00000000..ee4f9bc9 --- /dev/null +++ b/.planning/debug/live-preview-image-limit.md @@ -0,0 +1,58 @@ +--- +status: investigating +trigger: "Investigate the live preview/image loading error: '[LivePreview] failed ... Image too large for live preview' and '[OIIOImageLoader] Image too large: 16000 x 9142'. Determine exact limit logic, whether it matches intended 256 MB policy, blockers, and minimal fix strategy. Do not edit code." +created: 2026-04-14T00:00:00Z +updated: 2026-04-14T00:10:00Z +--- + +## Current Focus + +hypothesis: Confirmed: the current worktree enforces a hardcoded 100-megapixel cap in OIIO-based image loads, and live preview uses the same pixel-count heuristic. There is no implemented 256 MB decoded-memory policy in these paths. +test: Summarize exact call paths, blockers, and minimal fix strategy. +expecting: Findings should show mismatch between intended policy and current implementation. +next_action: return findings with file/function references and severity + +## Symptoms + +expected: Image should be allowed when it satisfies the intended 256 MB hard limit policy. +actual: Live preview rejects image with 'Image too large for live preview' and OIIO logs 'Image too large: 16000 x 9142'. +errors: [LivePreview] failed ... "Image too large for live preview"; [OIIOImageLoader] Image too large: 16000 x 9142 +reproduction: Attempt to load the reported large image in live preview. +started: Reported in current worktree; historical start unknown. + +## Eliminated + +## Evidence + +- timestamp: 2026-04-14T00:03:00Z + checked: native/qt6/src/oiio_image_loader.cpp::OIIOImageLoader::loadImage + found: The loader rejects any image where width * height > 100000000 via kMaxPixels and logs '[OIIOImageLoader] Image too large: x '. + implication: The current rejection is based on raw pixel count, not compressed file size. + +- timestamp: 2026-04-14T00:04:00Z + checked: native/qt6/src/live_preview_manager.cpp::LivePreviewManager::loadImageFrame + found: Live preview calls OIIOImageLoader::loadImage(request.filePath, request.targetSize.width(), request.targetSize.height()). If that returns null, it probes dimensions via QImageReader and rejects with 'Image too large for live preview' only when pixelCount > 100000000. + implication: Live preview mirrors the same 100-megapixel heuristic and surfaces it as a preview-specific error. + +- timestamp: 2026-04-14T00:07:00Z + checked: repo search plus preview_overlay.cpp, image_preview_overlay.cpp, file_manager_pane.cpp, thumbnail_generator_worker.cpp + found: No application code in the current worktree implements a 256 MB image hard limit. Non-live-preview image paths call OIIOImageLoader::loadImage(..., 0, 0), which still passes through the same 100-megapixel OIIO guard. + implication: The current behavior is governed by a shared pixel-count cap, not a 256 MB policy, and the same blocker can affect full preview/file-manager image loads. + +- timestamp: 2026-04-14T00:08:00Z + checked: native/qt6/src/oiio_image_loader.cpp::OIIOImageLoader::loadImage internals + found: The function reads with ImageBuf::read(..., TypeDesc::FLOAT) before applying resize logic, meaning it materializes full float image data first and only then optionally downsizes. + implication: Even thumbnail/live-preview requests are not bounded by requested output size; the implementation is not using an output-memory-based policy and may consume much more memory than a 256 MB decoded-output rule would suggest. + +- timestamp: 2026-04-14T00:09:00Z + checked: reported dimensions 16000 x 9142 against intended policy + found: 16000 * 9142 = 146,272,000 pixels, which exceeds the current 100,000,000-pixel cap. At 4 bytes/pixel RGBA8 decoded size this is about 585 MB; at 3 bytes/pixel RGB8 about 439 MB; at float read time it is much larger still. + implication: The observed rejection is expected under the current code, but it does not align with a stated policy based on file size and only aligns with a 256 MB policy if that policy is defined as decoded in-memory image budget. + +## Resolution + +root_cause: +root_cause: OIIO-based image loading is gated by a hardcoded 100-megapixel limit and live preview duplicates that same threshold as its own 'too large' decision. No 256 MB file-size or decoded-memory policy is implemented in these paths. +fix: Minimal strategy is to replace the shared 100-megapixel heuristic with a single explicit image-memory policy check based on decoded bytes (or exact approved heuristic), and apply it consistently before user-facing rejection. Live preview should report the same reason from the shared check rather than a second divergent threshold. +verification: Investigation only; no code changes made. +files_changed: [] diff --git a/.planning/debug/pm-path-normalization-linux.md b/.planning/debug/pm-path-normalization-linux.md new file mode 100644 index 00000000..3fbae6a8 --- /dev/null +++ b/.planning/debug/pm-path-normalization-linux.md @@ -0,0 +1,53 @@ +--- +status: investigating +trigger: "Investigate the remaining Phase 06 blocker around Project Manager path normalization and case sensitivity on Linux. Focus: Research indicated some Project Manager path normalization lowercases paths. On Linux this is risky because filesystems are case-sensitive. Read the current Phase 06 docs, inspect ProjectDB and related Project Manager path mapping helpers, identify every place where PM path normalization or matching may lower-case or otherwise break Linux case-sensitive behavior, determine the concrete user-visible risk and the smallest safe fix, and return findings first with file/function references, then a minimal fix plan and validation checklist. Do not edit code." +created: 2026-04-14T00:00:00Z +updated: 2026-04-14T00:18:00Z +--- + +## Current Focus + +hypothesis: Confirmed: active PM import/resync/navigation flows contain lowercase or case-insensitive path matching that can collapse distinct Linux paths and select the wrong asset/folder. +test: Synthesize findings into concrete runtime risks and smallest safe fix scope. +expecting: A minimal fix plan limited to PM folder-path maps and PM asset-path lookup, with dormant duplicate code called out separately. +next_action: return findings with file/function references, minimal fix plan, and validation checklist + +## Symptoms + +expected: Project Manager should preserve exact filesystem path case on Linux and distinguish case-different paths correctly. +actual: Research indicates some PM normalization lowercases paths, risking incorrect behavior on case-sensitive Linux filesystems. +errors: none reported +reproduction: Inspect PM import/folder mapping helpers and trace path normalization/matching behavior. +started: identified during Phase 06 Linux Project Manager verification research on 2026-04-14 + +## Eliminated + +## Evidence + +- timestamp: 2026-04-14T00:05:00Z + checked: AGENTS.md, codemap.md, native/qt6/src/codemap.md, Phase 06 roadmap/state/research/plan docs + found: Phase 06 research already identified PM lowercasing in importer and ProjectDB as a Linux-sensitive blocker, and the repository workflow requires tracing runtime code before proposing changes. + implication: Investigation should focus on the actual PM import/folder-target pipeline rather than speculative cross-module fixes. + +- timestamp: 2026-04-14T00:05:00Z + checked: grep for toLower/case-insensitive/path-mapping usages under native/qt6/src + found: PM-relevant lowercasing/matching appears in importer.cpp, project_db.cpp, project_import_worker.cpp, and mainwindow.cpp; most other toLower matches are extension/type handling and not path mapping. + implication: The likely Linux case-sensitivity risk is concentrated in a small set of PM path normalization helpers and one PM asset-path comparison site. + +- timestamp: 2026-04-14T00:10:00Z + checked: project_db.cpp ensureFolderForPath/resyncAssetFolders, importer.cpp importFolderContents, project_import_worker.cpp doImport, mainwindow.cpp PM destination/navigation helpers, project_manager_watcher.cpp + found: PM import and folder-resolution code uses lowercased normalized-path hash keys and prefix checks, while mainwindow navigation compares PM asset file paths with Qt::CaseInsensitive. + implication: Linux risk is not limited to a single helper; both DB folder mapping and UI selection flows can collapse distinct case-different filesystem paths. + +- timestamp: 2026-04-14T00:18:00Z + checked: mainwindow.cpp PM refresh/new-files/removed-files paths, project_db.cpp createFolder/ensureChildFolder/removeAssetsByPath/updateAssetPath, project_import_worker usage search + found: Active PM runtime uses Importer::importFolderContents plus ProjectDB::ensureFolderForPath/resyncAssetFolders and MainWindow::navigateToProjectAsset; remove/update SQL lookups are exact-match and safe, and ProjectImportWorker is currently unused but repeats the same lowercase folder-map pattern. + implication: The smallest safe fix is to stop lowercasing PM path keys/comparisons in active folder-mapping helpers and to make PM asset-path navigation exact on Linux; dormant worker code should be kept aligned if revived. + +## Resolution + +root_cause: +root_cause: Active Project Manager path-mapping code normalizes filesystem paths with toLower() in importer and ProjectDB helpers, and PM asset navigation compares file paths with Qt::CaseInsensitive. On Linux, two real paths that differ only by case can therefore be treated as the same path, causing wrong folder resolution, wrong asset selection, or silent path collapse during resync/import flows. +fix: Smallest safe fix is to preserve case in PM normalized-path keys and comparisons for active PM flows: use QDir::cleanPath() without toLower() in Importer::importFolderContents and ProjectDB::{ensureFolderForPath,resyncAssetFolders}, and replace Qt::CaseInsensitive PM file-path comparison in MainWindow::navigateToProjectAsset with exact/path-native comparison. Keep ProjectImportWorker aligned if that path is re-enabled. +verification: Static tracing confirmed the active PM runtime uses the affected helpers for initial import, watcher add/remove reconciliation, manual folder resync, and notification-driven asset navigation. Exact-match SQL path updates/removals were also checked and do not introduce the Linux case-collapse issue. +files_changed: [] diff --git a/.planning/debug/project-manager-watcher-import.md b/.planning/debug/project-manager-watcher-import.md new file mode 100644 index 00000000..9ddb3838 --- /dev/null +++ b/.planning/debug/project-manager-watcher-import.md @@ -0,0 +1,63 @@ +--- +status: diagnosed +trigger: "Investigate the remaining Phase 06 blocker around Project Manager watcher/import mismatch. Focus: Initial Project Manager import/scan appears to ingest more files than the watcher later tracks. We need the concrete runtime path, exact mismatch, and minimal fix strategy." +created: 2026-04-14T00:00:00Z +updated: 2026-04-14T00:32:00Z +--- + +## Current Focus + +hypothesis: Confirmed: Project Manager initial import ingests all regular files, while watcher cache/rescan/event processing only tracks a hard-coded extension subset; incremental ProjectDB updates therefore ignore unsupported files. +test: Compared importFolderContents(), watchProject()/buildDirectoryCache()/scanSingleDirectory()/processChangedDirectories()/onProcessChanges(), and MainWindow watcher signal handlers. +expecting: N/A +next_action: Return diagnosis with minimal fix strategy and validation checklist. + +## Symptoms + +expected: Project Manager initial import/scan and later watcher/rescan should operate on the same file set. +actual: Initial import/scan appears to ingest more files than the watcher later tracks. +errors: Remaining Phase 06 blocker; watcher/import mismatch on Linux. +reproduction: Import/create project, observe imported files, then compare later watcher-monitored updates/rescan behavior. +started: Phase 06 verification. + +## Eliminated + +## Evidence + +- timestamp: 2026-04-14T00:10:00Z + checked: Planning docs and repository codemap + found: Phase 06 research and plan already identify initial-import vs watcher-scope disagreement as an active blocker; knowledge base file does not exist. + implication: Investigation should verify the exact runtime mismatch directly in code rather than assume the earlier summary is complete. + +- timestamp: 2026-04-14T00:18:00Z + checked: Symbol search across native/qt6/src + found: MainWindow PM flow calls watcher watch/rescan from setupProjectManagerUi, pmImportToProject, and onPmRefresh; watcher logic is concentrated in project_manager_watcher.cpp; importer/importFolderContents and ProjectDB::ensureFolderForPath/removeAssetsByPath/updateAssetPath are the main ingest/reconciliation paths. + implication: A full read of those functions should be sufficient to trace the concrete runtime mismatch end-to-end. + +- timestamp: 2026-04-14T00:32:00Z + checked: MainWindow::pmImportToProject and Importer::importFolderContents + found: New project flow starts watcher first via pmWatcher->watchProject(projectId, watchPath), then imports via importFolderContents(watchPath, rootFolderId). importFolderContents explicitly imports ALL files under the tree (comment: "PM should work like a file manager") and inserts every file into ProjectDB, with sequence detection only affecting grouping. + implication: Initial ProjectDB state intentionally contains every regular file in the project tree, not only media/project extensions. + +- timestamp: 2026-04-14T00:32:00Z + checked: ProjectManagerWatcher::scanSingleDirectory, buildDirectoryCache, processChangedDirectories, onProcessChanges + found: Watcher cache and both incremental/full-rescan comparisons are built only from scanSingleDirectory(), which filters to s_supportedExtensions = {jpg,jpeg,png,tif,tiff,exr,dpx,bmp,gif,mov,mp4,avi,mkv,mxf,r3d,aep,aepx,nk}. Unsupported files never enter m_dirFiles, oldFiles, or newFiles. + implication: Watcher change detection only reasons about that subset, regardless of what the importer previously inserted into ProjectDB. + +- timestamp: 2026-04-14T00:32:00Z + checked: MainWindow::onPmRefresh, onPmNewFilesDetected, onPmFilesRemoved, and ProjectDB reconciliation helpers + found: Manual refresh only triggers pmWatcher->rescan(projectId); full rescan emits added/removed lists derived from the watcher subset. MainWindow then updates ProjectDB only through onPmNewFilesDetected -> insertAssetMetadataFast and onPmFilesRemoved -> removeAssetsByPath. No alternate refresh reconciliation path exists here for unsupported files. + implication: Unsupported files imported initially can become permanently stale in ProjectDB after external delete/rename, and unsupported files added later never appear, even after Refresh. + +- timestamp: 2026-04-14T00:32:00Z + checked: Linux event path through QFileSystemWatcher directoryChanged + found: On Linux, directory changes are received at directory granularity, then ProjectManagerWatcher rescans the changed directory and applies its own extension filter before emitting signals. + implication: The mismatch is in application logic, not Linux event delivery; Linux still exposes it because normal add/remove/rename events reach the watcher, but unsupported files are discarded during rescans. + +## Resolution + +root_cause: +root_cause: Project Manager has two different file eligibility rules. Initial import (Importer::importFolderContents) imports every regular file under the project tree, but watcher startup, incremental directory-change processing, and manual rescan (ProjectManagerWatcher::scanSingleDirectory -> buildDirectoryCache/processChangedDirectories/onProcessChanges) only track a hard-coded extension allowlist. MainWindow updates ProjectDB only from watcher-added/watcher-removed signals, so unsupported files are never reconciled after initial import. +fix: Minimal fix strategy is to make Project Manager use one shared tracking rule for both initial import and watcher/rescan paths. To preserve current PM semantics, the smallest behavior-preserving direction is to remove the watcher-only allowlist and have scanSingleDirectory/watcher cache include all regular files that importFolderContents can ingest. +verification: Diagnosis only; no code changes applied. +files_changed: [] diff --git a/.planning/phases/03-preserve-annotation-on-video-and-sequences/03-01-PLAN.md b/.planning/phases/03-preserve-annotation-on-video-and-sequences/03-01-PLAN.md new file mode 100644 index 00000000..cd44a82e --- /dev/null +++ b/.planning/phases/03-preserve-annotation-on-video-and-sequences/03-01-PLAN.md @@ -0,0 +1,48 @@ +--- +wave: 1 +autonomous: true +objective: Restore fullscreen preview overlay annotation tools and playback UI correctness on Fedora 43 Wayland, then validate frame persistence and export behavior for video and image sequences. +files_modified: + - native/qt6/src/preview_overlay.cpp + - native/qt6/src/preview_overlay.h + - native/qt6/src/media/tlrender_viewport.cpp + - native/qt6/src/media/tlrender_viewport.h + - native/qt6/src/annotation_layer.cpp + - native/qt6/src/annotation_items.cpp + - native/qt6/tests/CMakeLists.txt + - native/qt6/tests/test_annotation_items.cpp +--- + + +Restore fullscreen preview overlay annotation tools and playback UI correctness on Fedora 43 Wayland, then validate frame persistence and export behavior for video and image sequences. + + + +Source plan: docs/superpowers/plans/2026-04-10-linux-port-fedora43-wayland-appimage.md + +Current known Phase 03 failures in the active worktree: +- no annotation brush is currently drawing in the fullscreen preview overlay +- a play icon remains visible while playback is active in the fullscreen preview overlay +- prior annotation-related changes have not resolved these regressions + +Execution intent: +- treat Phase 03 as active defect recovery, not greenfield annotation implementation +- focus first on fullscreen preview overlay interaction and playback UI state +- validate overlay geometry, scene assignment, and event routing before changing persistence/export code +- only apply the smallest correct code changes needed in preview-overlay-related paths +- keep frame persistence, markers, and export validation in scope only after visible drawing works again +- do not broaden scope into thumbnails, unrelated playback tuning, file operations, or packaging +- do not create SUMMARY.md or other new documentation files; report outcomes in execution response instead + + + +Reproduce the current fullscreen preview overlay failures and isolate the first broken step in the active interaction path. Verify annotation mode entry, tool selection state, active scene assignment, overlay visibility/z-order, coordinate mapping, and whether annotation items are actually being created. Separately trace why the playback UI keeps a play icon visible while playback is running. + + + +Implement the smallest correct fixes needed to restore visible annotation drawing in the fullscreen preview overlay and to correct the persistent play-icon state during active playback. Prefer targeted changes in PreviewOverlay and only extend into viewport or annotation support code when required by verified root cause. + + + +After drawing tools work again in fullscreen preview overlay, validate per-frame persistence, frame switching, markers, and export behavior for video and image sequences. Add or update focused tests only where necessary to cover the corrected fullscreen overlay behavior or its supporting logic. + diff --git a/.planning/phases/03-preserve-annotation-on-video-and-sequences/03-01-SUMMARY.md b/.planning/phases/03-preserve-annotation-on-video-and-sequences/03-01-SUMMARY.md new file mode 100644 index 00000000..4787ba9c --- /dev/null +++ b/.planning/phases/03-preserve-annotation-on-video-and-sequences/03-01-SUMMARY.md @@ -0,0 +1,86 @@ +--- +phase: 03-preserve-annotation-on-video-and-sequences +plan: 01 +subsystem: ui +tags: [qt6, wayland, tlrender, annotations, video, sequences] +requires: + - phase: 02-linux-port + provides: Fedora 43 Wayland playback baseline and tlRender preview plumbing +provides: + - Live video annotations remain on a transparent overlay above the tlRender viewport + - Sequence annotation sessions reset cleanly per asset while preserving per-frame state + - Annotation JSON serialization preserves moved item scene positions for export/reload +affects: [preview, annotation-export, wayland-playback] +tech-stack: + added: [] + patterns: [defer tlRender surface use until needed, keep annotation editing on transparent overlay scenes, serialize annotation geometry in scene coordinates] +key-files: + created: [.planning/phases/03-preserve-annotation-on-video-and-sequences/03-01-audit.md, .planning/phases/03-preserve-annotation-on-video-and-sequences/03-01-SUMMARY.md, native/qt6/tests/test_annotation_items.cpp] + modified: [native/qt6/src/preview_overlay.cpp, native/qt6/src/annotation_items.cpp, native/qt6/tests/CMakeLists.txt] +key-decisions: + - "Kept video annotation editing on a transparent QGraphicsView overlay instead of swapping to the raster image view, so the live tlRender surface stays visible on Wayland." + - "Stored moved annotation geometry in scene coordinates for all item types so per-frame reload/export stays stable after user repositioning." +patterns-established: + - "Wayland video annotation edits should track the live viewport via overlay geometry sync, not by replacing the playback widget." + - "Annotation serialization must include item translation offsets before persisting per-frame JSON." +requirements-completed: [FEDORA43-ANNOTATION] +duration: 4 min +completed: 2026-04-11 +--- + +# Phase 03 Plan 01: Preserve annotation on video and sequences Summary + +**Wayland-safe live video annotation overlays with frame-accurate sequence/video persistence and export-safe moved-item serialization** + +## Performance + +- **Duration:** 4 min +- **Started:** 2026-04-11T12:03:27+03:00 +- **Completed:** 2026-04-11T09:07:25Z +- **Tasks:** 3 +- **Files modified:** 6 + +## Accomplishments +- Audited existing work and isolated the remaining blocker to video annotation mode still abandoning the live tlRender surface. +- Kept video annotations on a transparent overlay synced to the tlRender viewport while resetting per-sequence annotation session state. +- Verified moved annotation serialization with focused QtTest coverage and rebuilt the preview overlay path successfully. + +## task Commits + +Each task was committed atomically: + +1. **task 1: Audit existing annotation implementation and current coverage** - `adc2597` (docs) +2. **task 2: Implement minimal Wayland annotation fixes** - `7ba0b8f` (fix) +3. **task 3: Validate with focused tests and summarize outcomes** - `248d0d3` (test/docs) + +## Files Created/Modified +- `.planning/phases/03-preserve-annotation-on-video-and-sequences/03-01-audit.md` - recorded the partial-completion audit and remaining overlay gap +- `native/qt6/src/preview_overlay.cpp` - keeps video annotations on a transparent overlay and resets sequence annotation state +- `native/qt6/src/annotation_items.cpp` - serializes moved item coordinates in scene space for reload/export correctness +- `native/qt6/tests/CMakeLists.txt` - registers the focused annotation item test target in the QtTest suite +- `native/qt6/tests/test_annotation_items.cpp` - covers moved text, rectangle, arrow, and freehand serialization behavior + +## Decisions Made +- Used the existing transparent `annotationOverlayView` for video editing instead of switching to `imageView`, preserving the plan requirement to keep the overlay above the GL surface. +- Treated moved annotation serialization as correctness-critical because export/reload would otherwise drift after user edits. + +## Deviations from Plan + +None - plan executed exactly as written. + +## Issues Encountered +- `ctest -R "test_annotation_items|test_platform_session"` reported `test_platform_session` as not built in the current build tree. I kept verification focused on the planned annotation target and the app rebuild instead of broadening scope into unrelated test registration work. + +## User Setup Required + +None - no external service configuration required. + +## Next Phase Readiness +- Annotation persistence, export, and live overlay behavior are ready for manual Fedora 43 Wayland verification. +- Recommended manual check: launch the Wayland build, annotate a video and an image sequence across multiple frames, then confirm scrubbing and export retain those drawings. + +## Self-Check: PASSED + +--- +*Phase: 03-preserve-annotation-on-video-and-sequences* +*Completed: 2026-04-11* diff --git a/.planning/phases/03-preserve-annotation-on-video-and-sequences/03-01-audit.md b/.planning/phases/03-preserve-annotation-on-video-and-sequences/03-01-audit.md new file mode 100644 index 00000000..7e0b6290 --- /dev/null +++ b/.planning/phases/03-preserve-annotation-on-video-and-sequences/03-01-audit.md @@ -0,0 +1,12 @@ +## Task 1 Audit Findings + +- Existing work already fixed annotation JSON serialization for moved text, freehand, rectangle, ellipse, and arrow items in `annotation_items.cpp`, with focused coverage in `test_annotation_items.cpp`. +- Existing work also deferred tlRender player/viewport creation in `preview_overlay.cpp`, which removed the eager Wayland GL surface creation that was destabilizing preview startup. +- The remaining blocking gap for this plan is in video annotation mode: `PreviewOverlay::enableAnnotationMode()` still switches video annotation into `imageView` instead of keeping a transparent annotation layer above the live tlRender viewport. +- A smaller correctness gap remains in sequence preview state: `showSequence()` does not reset annotation session state or refresh `currentFilePath/currentFileType`, which can leak markers between sequences and produce incorrect export naming. + +## Planned Minimal Fix Scope + +1. Keep video annotation rendering on a transparent overlay view positioned above the tlRender viewport. +2. Preserve frame-accurate save/load when scrubbing or stepping video frames without replacing the live playback surface. +3. Reset sequence annotation session state at sequence open and refresh sequence export metadata. diff --git a/.planning/phases/03-preserve-annotation-on-video-and-sequences/03-HUMAN-UAT.md b/.planning/phases/03-preserve-annotation-on-video-and-sequences/03-HUMAN-UAT.md new file mode 100644 index 00000000..aa640472 --- /dev/null +++ b/.planning/phases/03-preserve-annotation-on-video-and-sequences/03-HUMAN-UAT.md @@ -0,0 +1,35 @@ +--- +status: in_progress +phase: 03-preserve-annotation-on-video-and-sequences +source: [03-VERIFICATION.md] +started: 2026-04-11T09:16:55Z +updated: 2026-04-11T12:50:00Z +--- + +## Current Test + +Wayland playback regression recovered; annotation-specific UAT still pending. + +## Tests + +### 1. Wayland live video annotation overlay +expected: On Fedora 43 Wayland, entering annotation mode keeps the live tlRender video visible and draws/editing occurs on the transparent overlay without blacking out or replacing the video surface. +result: pending +notes: Playback had temporarily regressed because Wayland was routed back to the native `QOpenGLWidget` tlRender viewport path. Runtime playback now works again after restoring the raster preview fallback policy. + +### 2. Frame-accurate video/sequence annotation scrub and export +expected: Annotations stay attached to the correct video/sequence frames while stepping and scrubbing, and exported annotated frames match the visible frame plus moved annotations. +result: pending + +## Summary + +total: 2 +passed: 0 +issues: 1 +pending: 2 +skipped: 0 +blocked: 0 + +## Gaps + +- Resolved runtime regression: Wayland playback failed with repeated `QOpenGLWidget: Failed to make context current` errors after the platform policy was switched back to desktop OpenGL/native tlRender viewport mode. Restored by routing Wayland previews back through the raster fallback path. diff --git a/.planning/phases/03-preserve-annotation-on-video-and-sequences/03-VERIFICATION.md b/.planning/phases/03-preserve-annotation-on-video-and-sequences/03-VERIFICATION.md new file mode 100644 index 00000000..d8ed4aa5 --- /dev/null +++ b/.planning/phases/03-preserve-annotation-on-video-and-sequences/03-VERIFICATION.md @@ -0,0 +1,114 @@ +--- +phase: 03-preserve-annotation-on-video-and-sequences +verified: 2026-04-11T09:16:55Z +status: human_needed +score: 4/4 must-haves verified +human_verification: + - test: "Wayland live video annotation overlay" + expected: "On Fedora 43 Wayland, entering annotation mode keeps the live tlRender video visible and draws/editing occurs on the transparent overlay without blacking out or replacing the video surface." + why_human: "Requires an actual Wayland GUI session and interactive rendering behavior that cannot be verified from static code inspection." + - test: "Frame-accurate video/sequence annotation scrub and export" + expected: "Annotations stay attached to the correct video/sequence frames while stepping and scrubbing, and exported annotated frames match the visible frame plus moved annotations." + why_human: "Needs real media playback, interactive scrubbing, and exported image inspection under Wayland." +--- + +# Phase 3: Preserve Annotation On Video And Sequences Verification Report + +**Phase Goal:** Preserve annotation overlay behavior, frame sync, and exports for both video and image sequences under Wayland. +**Verified:** 2026-04-11T09:16:55Z +**Status:** human_needed +**Re-verification:** No — initial verification + +## Goal Achievement + +### Observable Truths + +| # | Truth | Status | Evidence | +| --- | --- | --- | --- | +| 1 | Video annotation mode keeps a transparent overlay above the tlRender viewport instead of replacing the live video surface. | ✓ VERIFIED | `preview_overlay.cpp:639-662` creates a transparent `annotationOverlayView`; `preview_overlay.cpp:4366-4393` binds `AnnotationLayer` to that overlay, syncs it to the active video widget, shows/raises it, and leaves video playback visible. | +| 2 | Video annotation state stays frame-synced during scrub/seek/frame-step. | ✓ VERIFIED | `preview_overlay.cpp:1862-2017` updates `lastKnownVideoFrame` during slider moves/releases and frame stepping, then calls `updateVideoAnnotationFrame()`; `preview_overlay.cpp:4872-4918` saves the old frame's annotations, captures the new frame, and loads annotations for the new frame. | +| 3 | Sequence annotation sessions reset per asset while preserving per-frame annotations inside a sequence. | ✓ VERIFIED | `preview_overlay.cpp:1510-1518` and `2796-2800` call `resetAnnotationSession()` when switching assets/sequences; `preview_overlay.cpp:2979-3099` saves the previous frame and reloads annotations for the current sequence frame. | +| 4 | Annotated exports use real frame pixels plus persisted annotation geometry, including moved items. | ✓ VERIFIED | `preview_overlay.cpp:4595-4680` exports stored annotated frames for sequence/video; `preview_overlay.cpp:4809-4846` composites `captureCurrentFrame()` with live annotation items; `annotation_items.cpp:177-196,307-325,367-378,420-431,511-523` serializes scene-space geometry; `test_annotation_items.cpp:15-70` verifies moved-item serialization/round-trip. | + +**Score:** 4/4 truths verified + +### Required Artifacts + +| Artifact | Expected | Status | Details | +| --- | --- | --- | --- | +| `native/qt6/src/preview_overlay.cpp` | Wayland-safe overlay, frame sync, export flow | ✓ VERIFIED | Substantive implementation exists and is wired from `MainWindow` (`mainwindow.cpp:2527` and other call sites). | +| `native/qt6/src/annotation_layer.cpp` | Serialize/deserialize active annotation items | ✓ VERIFIED | `serializeAnnotations()` / `deserializeAnnotations()` bridge preview state to persisted JSON (`annotation_layer.cpp:278-297`). | +| `native/qt6/src/annotation_items.cpp` | Preserve moved annotation geometry in JSON | ✓ VERIFIED | Text, freehand, rectangle, ellipse, and arrow items serialize scene-space positions. | +| `native/qt6/tests/test_annotation_items.cpp` | Focused regression coverage for moved-item serialization | ✓ VERIFIED | Registered in `native/qt6/tests/CMakeLists.txt:253-269`; `ctest -R test_annotation_items` passes. | + +### Key Link Verification + +| From | To | Via | Status | Details | +| --- | --- | --- | --- | --- | +| `mainwindow.cpp` | `PreviewOverlay` | `new PreviewOverlay(this)` | ✓ WIRED | Overlay is instantiated from multiple main-window preview entry points. | +| `PreviewOverlay::enableAnnotationMode()` | Video overlay scene | `annotationLayer->setScene(annotationOverlayScene)` + `syncAnnotationOverlayToVideo()` | ✓ WIRED | Video annotations render on the transparent overlay, not the image scene. | +| `PreviewOverlay` | Per-frame annotation storage | `saveCurrentFrameAnnotations()` / `loadFrameAnnotations()` | ✓ WIRED | Sequence and video frame changes persist and reload JSON-backed frame annotations. | +| `AnnotationLayer` | `AnnotationItem` JSON | `item->toJson()` / `AnnotationItem::fromJson()` | ✓ WIRED | Export/reload path uses item serializers directly. | +| Export actions | Real frame pixels | `captureCurrentFrame()` / `m_player->getCurrentFrame()` / `originalPixmap` | ✓ WIRED | Export path composites live frame content with current annotation items. | + +### Data-Flow Trace (Level 4) + +| Artifact | Data Variable | Source | Produces Real Data | Status | +| --- | --- | --- | --- | --- | +| `preview_overlay.cpp` video annotation path | `currentAnnotatedFrame`, `frameAnnotations` | `getVideoFrameNumber()` + `updateVideoAnnotationFrame()` + `m_player->getCurrentFrame()` | Yes | ✓ FLOWING | +| `preview_overlay.cpp` sequence annotation path | `currentAnnotatedFrame`, `frameAnnotations`, `originalPixmap` | `loadSequenceFrame()` + `saveCurrentFrameAnnotations()` + sequence frame files/cache | Yes | ✓ FLOWING | +| `exportAnnotatedFrame()` | `baseFrame` + `annotationLayer->annotations()` | `captureCurrentFrame()` + live scene items | Yes | ✓ FLOWING | + +### Behavioral Spot-Checks + +| Behavior | Command | Result | Status | +| --- | --- | --- | --- | +| Moved annotation geometry regression coverage | `ctest --test-dir build-linux --output-on-failure -R test_annotation_items` | `1/1 Test #15: test_annotation_items ... Passed` | ✓ PASS | +| Wayland live overlay rendering | N/A | Requires interactive Fedora 43 Wayland session | ? SKIP | +| End-to-end sequence/video overlay playback tests | `ctest --test-dir build-linux --output-on-failure -R test_platform_session` / `-R test_sequence_detector` | Test entries exist but executables were not present in the current build tree | ? SKIP | + +### Requirements Coverage + +| Requirement | Source Plan | Description | Status | Evidence | +| --- | --- | --- | --- | --- | +| `FEDORA43-ANNOTATION` | None in `03-01-PLAN.md` frontmatter (**ORPHANED traceability**) | Annotation workflows work correctly on video and sequences under Wayland | ? NEEDS HUMAN | `REQUIREMENTS.md:5,19` maps this requirement to Phase 3, but the plan frontmatter does not declare a `requirements` field. Code evidence supports overlay/frame-sync/export behavior; final Wayland correctness still needs manual validation. | + +### Anti-Patterns Found + +| File | Line | Pattern | Severity | Impact | +| --- | --- | --- | --- | --- | +| `native/qt6/src/preview_overlay.cpp` | 4640, 4673 | `QThread::msleep(100)` on export restore path | ⚠️ Warning | Blocks the UI thread during batch export/restore; does not invalidate the phase goal, but is not ideal. | +| `native/qt6/src/preview_overlay.cpp` | 563 | Tooltip advertises `(A)` toggle shortcut, but no `Qt::Key_A` handler or `QShortcut` was found in `PreviewOverlay` | ⚠️ Warning | Shortcut preservation is not proven by code, despite the tooltip claim. | +| `03-01-PLAN.md` | 1-11 | No `requirements:` frontmatter despite Phase 3 being mapped to `FEDORA43-ANNOTATION` | ℹ️ Info | Requirement traceability is incomplete; accounted for here as an orphaned requirement. | + +### Human Verification Required + +### 1. Wayland live video annotation overlay + +**Test:** On Fedora 43 Wayland, open a video in the preview overlay, enable annotation mode, and draw/move annotations while the tlRender viewport remains visible. +**Expected:** The live video surface stays visible behind the transparent overlay; no black frame, widget swap, or lost focus prevents editing. +**Why human:** Requires real Wayland compositor behavior and interactive rendering. + +### 2. Frame-accurate scrub/step/export on video and sequence media + +**Test:** Annotate multiple frames in both a video and an image sequence, then scrub, use `,` / `.` stepping, and export individual/all annotated frames. +**Expected:** Each frame reloads the correct annotations, timeline markers reflect annotated frames, and exports match the visible frame plus moved annotations. +**Why human:** Needs real playback/media assets and visual comparison of exported output. + +### Gaps Summary + +No code-level blocker was found against the derived must-haves. The remaining unverified surface is the actual Fedora 43 Wayland runtime behavior, which needs human confirmation. + +### Post-Verification Regression And Recovery + +After the initial verification, Fedora 43 Wayland playback regressed during follow-up execution work. The regression was traced to the Wayland platform policy being set back to prefer the native tlRender `QOpenGLWidget` path: + +- `PlatformSession::shouldUseDesktopOpenGLOnWayland()` returned `true` +- `PlatformSession::shouldUseRasterPreviewFallbackOnWayland()` returned `false` + +That reintroduced the failing Wayland context path for both embedded previews and overlay playback, producing repeated `QOpenGLWidget: Failed to make context current` / `QWaylandGLContext::makeCurrent` errors. Playback was restored by returning Wayland to the raster preview fallback path and keeping tlRender initialization on `DefaultSurfaceFormat::None` for Wayland sessions. The project-manager preview path was also guarded so hidden side-panel previews do not instantiate a video widget unnecessarily. + +--- + +_Verified: 2026-04-11T09:16:55Z_ +_Verifier: OpenCode (gsd-verifier)_ diff --git a/.planning/phases/06-verify-project-manager-and-batch-rename/06-01-PLAN.md b/.planning/phases/06-verify-project-manager-and-batch-rename/06-01-PLAN.md new file mode 100644 index 00000000..552eb95c --- /dev/null +++ b/.planning/phases/06-verify-project-manager-and-batch-rename/06-01-PLAN.md @@ -0,0 +1,67 @@ +--- +phase: 06 +phase_name: verify-project-manager-and-batch-rename +plan: 06-01 +status: active +autonomous: true +requirements: + - FEDORA43-PROJECTS +evidence: + - .planning/phases/06-verify-project-manager-and-batch-rename/06-01-RESEARCH.md + - native/qt6/src/mainwindow.cpp + - native/qt6/src/project_db.cpp + - native/qt6/src/project_manager_watcher.cpp +--- + +# Phase 06 Plan 06-01 + +## Objective + +Start Phase 06 with the narrow Project Manager verification slice already supported by the research: add the missing Project Manager batch rename entry point, make paste and new-folder honor the selected Project Manager folder instead of always using the project watch root, make refresh call watcher rescan for the active project, and then verify those Linux Project Manager workflows directly. + +## Evidence Base + +- Project Manager currently has no batch rename entry point even though `BulkRenameDialog` already exists for File Manager and Asset Manager. [VERIFIED: .planning/phases/06-verify-project-manager-and-batch-rename/06-01-RESEARCH.md, native/qt6/src/mainwindow.cpp, native/qt6/src/bulk_rename_dialog.h] +- `onPmPaste()` and `onPmNewFolder()` currently derive destinations from the project watch path root instead of the selected Project Manager folder. [VERIFIED: .planning/phases/06-verify-project-manager-and-batch-rename/06-01-RESEARCH.md, native/qt6/src/mainwindow.cpp] +- `onPmRefresh()` reloads models but does not call `ProjectManagerWatcher::rescan()` for the active project. [VERIFIED: .planning/phases/06-verify-project-manager-and-batch-rename/06-01-RESEARCH.md, native/qt6/src/mainwindow.cpp, native/qt6/src/project_manager_watcher.cpp] +- The research already limits the first implementation slice to those blockers and a focused Linux Project Manager verification pass. [VERIFIED: .planning/phases/06-verify-project-manager-and-batch-rename/06-01-RESEARCH.md] + +## Minimal Tasks + +1. **Project Manager batch rename entry point** + - Trace the existing Project Manager asset context-menu and selection path in `MainWindow`. + - Reuse the existing `BulkRenameDialog` flow instead of inventing a second rename UI. + - Keep the work scoped to Project Manager-selected assets only. [VERIFIED: native/qt6/src/mainwindow.cpp, native/qt6/src/bulk_rename_dialog.h] + +2. **Selected-folder paste and new-folder targeting** + - Resolve the real filesystem destination from the active project plus selected Project Manager folder. + - Make `onPmPaste()` and `onPmNewFolder()` use that selected-folder destination first, falling back to the project root only when no folder is selected. [VERIFIED: native/qt6/src/mainwindow.cpp, native/qt6/src/project_db.cpp] + +3. **Refresh must rescan the active project** + - Update the Project Manager refresh path so it calls watcher rescan for `pmCurrentProjectId` before reloading the visible models. + - Keep this scoped to manual refresh for the active project; do not widen watcher/import scope in this plan. [VERIFIED: native/qt6/src/mainwindow.cpp, native/qt6/src/project_manager_watcher.cpp] + +4. **Focused Linux verification** + - Verify Project Manager on Linux only for the workflows touched by this plan: batch rename entry point, selected-folder paste, selected-folder new folder, and refresh after out-of-app filesystem changes. + - Treat broader watcher allowlist/import-scope mismatches as follow-up work only if they block this verification slice. [VERIFIED: .planning/phases/06-verify-project-manager-and-batch-rename/06-01-RESEARCH.md] + +## Verification + +- Build the Qt target affected by the Project Manager changes. +- On Linux, verify this sequence against the active worktree: + 1. Open a project and select a nested Project Manager folder. + 2. Run **New Folder** and confirm the new directory is created inside the selected folder, not at the watch root. + 3. Copy or cut an asset and paste into another selected Project Manager folder; confirm the on-disk destination matches the selected folder. + 4. Select multiple Project Manager assets and confirm batch rename is available and applies to the selected Project Manager items. + 5. Add, remove, or rename a file outside the app, then run **Refresh** and confirm the active project rescans and reconciles. + +## Out Of Scope + +- Renaming Linux UI labels such as “Show in Explorer”. +- Changing the watcher extension allowlist or the initial-import versus incremental-import scope mismatch unless it blocks the focused verification above. +- Changing lowercase path normalization behavior outside the exact folder-targeting fix needed for this plan. +- Packaging or runtime-location changes for `projects.db`. + +## Done Condition + +Phase 06 is ready to execute when Plan 06-01 is carried by the concrete blocker slice above and verification is limited to the corresponding Linux Project Manager workflows. diff --git a/.planning/phases/06-verify-project-manager-and-batch-rename/06-01-RESEARCH.md b/.planning/phases/06-verify-project-manager-and-batch-rename/06-01-RESEARCH.md new file mode 100644 index 00000000..c0732a38 --- /dev/null +++ b/.planning/phases/06-verify-project-manager-and-batch-rename/06-01-RESEARCH.md @@ -0,0 +1,100 @@ +# Phase 06: Verify Project Manager And Batch Rename - Research + +**Researched:** 2026-04-14 +**Phase objective:** Validate Project Manager and batch rename workflows on Linux and only fix Linux-specific issues that are actually present. [VERIFIED: .planning/ROADMAP.md, .planning/REQUIREMENTS.md, .planning/STATE.md] + +## Summary + +Phase 06 should start from the real runtime pipeline already in the code, not from the File Manager assumptions. [VERIFIED: AGENTS.md, codemap.md, native/qt6/src/codemap.md] The Project Manager already has Linux-facing browse/open/reveal/delete/copy/cut/paste/watch/import code paths, but several important behaviors are either rooted at the project watch folder instead of the selected virtual folder, or are not wired into Project Manager at all. [VERIFIED: native/qt6/src/mainwindow.cpp, native/qt6/src/project_manager_watcher.cpp, native/qt6/src/project_db.cpp] + +The highest-risk blockers are not Wayland rendering issues. [VERIFIED: codebase read] They are workflow mismatches: Project Manager has no batch rename entry point, Project Manager paste/new-folder target the project root watch path instead of the selected folder, manual refresh does not force a watcher rescan, and watcher incremental imports do not match initial import scope. [VERIFIED: native/qt6/src/mainwindow.cpp, native/qt6/src/project_manager_watcher.cpp, native/qt6/src/importer.cpp] + +**Primary recommendation:** First implement and validate one narrow slice: add Project Manager batch rename wiring for selected assets in the active folder view, then fix selected-folder destination handling for paste/new-folder, and only after that validate watcher/refresh behavior on Linux. [VERIFIED: native/qt6/src/mainwindow.cpp, native/qt6/src/bulk_rename_dialog.cpp] + +## Project Constraints (from AGENTS.md) + +- Read codemaps before working and trace the real runtime/build path before deciding anything. [VERIFIED: AGENTS.md] +- Base findings on present code and observed evidence, not speculation. [VERIFIED: AGENTS.md] +- Fix gatekeeping blockers before downstream polish. [VERIFIED: AGENTS.md] +- Prefer the smallest justified change and re-check all affected paths after each fix. [VERIFIED: AGENTS.md] +- Verify results with concrete evidence; do not present speculative fixes as complete. [VERIFIED: AGENTS.md] +- Only write inside the repository root. [VERIFIED: AGENTS.md] + +## Traced Runtime Paths + +### 1) Project creation and initial import + +- `MainWindow::setupProjectManagerUi()` initializes `ProjectDB` at `QCoreApplication::applicationDirPath() + "/data/projects.db"`, creates the Project Manager views, creates `ProjectManagerWatcher`, and starts watching all existing projects. [VERIFIED: native/qt6/src/mainwindow.cpp:3910-4628] +- New project flow is `onPmCreateProject()` → `pmImportToProject(name, watchPath)` → `ProjectsModel::createProject()` → `ProjectDB::createProject()` → `pmWatcher->watchProject(projectId, watchPath)` → `Importer::importFolderContents(watchPath, rootFolderId)`. [VERIFIED: native/qt6/src/mainwindow.cpp:5095-5167, native/qt6/src/projects_model.cpp:65-71, native/qt6/src/project_db.cpp:288-336, native/qt6/src/importer.cpp:219-319] +- Initial import imports all files found under the dropped/selected directory, then uses sequence detection per directory before writing into `ProjectDB`. [VERIFIED: native/qt6/src/importer.cpp:256-319] + +### 2) Browse, selection, preview, and reveal/open + +- Project selection is `onPmProjectSelected()`; it loads the folder tree, clears folder history, and sets the assets model to “all assets in project”. [VERIFIED: native/qt6/src/mainwindow.cpp:4631-4662] +- Folder selection is `onPmFolderSelected()`; it pushes folder history and filters `ProjectAssetsModel` to the selected folder id. [VERIFIED: native/qt6/src/mainwindow.cpp:4664-4685] +- Asset selection is `onPmAssetSelectionChanged()`; it updates preview and info from the first selected item in the active PM view. [VERIFIED: native/qt6/src/mainwindow.cpp:4687-4704] +- Double-click is split: folder rows navigate deeper; project files try configured external executables and otherwise fall back to `QDesktopServices::openUrl`; media files open the preview overlay. [VERIFIED: native/qt6/src/mainwindow.cpp:4706-4861] +- “Show in Explorer” from the PM context menu calls `DragUtils::showInExplorer(path)`. On Linux that first tries `org.freedesktop.FileManager1.ShowItems` over DBus and falls back to opening the containing directory with `QDesktopServices`. [VERIFIED: native/qt6/src/mainwindow.cpp:4931-4963, native/qt6/src/drag_utils.cpp:87-124] + +### 3) Project Manager file actions and refresh + +- PM copy/cut only cache selected file paths in `pmClipboard`. [VERIFIED: native/qt6/src/mainwindow.cpp:6415-6431] +- PM paste resolves destination from the project watch path, not from the currently selected PM folder, then enqueues copy/move in `FileOpsQueue`; cut also removes DB rows before queueing the move. [VERIFIED: native/qt6/src/mainwindow.cpp:6433-6472] +- PM delete removes DB rows immediately via `ProjectDB::removeAssetsByPath()` and then queues trash/delete in `FileOpsQueue`; non-Windows delete uses `QFile::moveToTrash`. [VERIFIED: native/qt6/src/mainwindow.cpp:6474-6495, native/qt6/src/file_ops.cpp:339-372] +- PM single rename is local-only: `onPmRename()` calls `QDir::rename()` on the filesystem and then `ProjectDB::updateAssetPath(oldPath, newPath)`. [VERIFIED: native/qt6/src/mainwindow.cpp:6497-6522, native/qt6/src/project_db.cpp:834-846] +- PM new folder also targets the project watch path root and then just calls `onPmRefresh()`. [VERIFIED: native/qt6/src/mainwindow.cpp:6524-6554] +- PM refresh only reloads project/asset models; it does not call `pmWatcher->rescan(projectId)`. [VERIFIED: native/qt6/src/mainwindow.cpp:5391-5399, native/qt6/src/project_manager_watcher.cpp:145-149] + +### 4) Drag/drop relevance + +- Top-level app drop handling treats a single dropped folder on the Project Manager tab as “create/import project”; dropped files are rejected for PM. [VERIFIED: native/qt6/src/mainwindow.cpp:8501-8544] +- PM asset views are drag-enabled through `ProjectAssetsModel` / `ProjectSequenceGroupingProxyModel` URL mime data, but there is no matching PM drop handling for internal folder placement, and `ProjectFoldersModel::flags()` does not expose drop-enabled items. [VERIFIED: native/qt6/src/project_assets_model.cpp:122-157, native/qt6/src/project_sequence_grouping_proxy_model.cpp:120-145, native/qt6/src/project_folders_model.cpp:210-214, native/qt6/src/mainwindow.cpp] + +### 5) Batch rename integration points + +- `BulkRenameDialog` exists in two modes only: Asset Manager (`QVector assetIds`) and File Manager (`QStringList filePaths`). [VERIFIED: native/qt6/src/bulk_rename_dialog.h:27-58] +- File Manager launches it from `onFmBulkRename()` with selected filesystem paths. [VERIFIED: native/qt6/src/mainwindow.cpp:2881-2900] +- Asset Manager launches it from the asset context menu with selected asset ids. [VERIFIED: native/qt6/src/mainwindow.cpp:7033-7193] +- Project Manager does not launch `BulkRenameDialog` anywhere. [VERIFIED: native/qt6/src/mainwindow.cpp, native/qt6/src/bulk_rename_dialog.cpp, native/qt6/src/bulk_rename_dialog.h] + +## Linux-Specific Risk Areas + +- PM reveal/show-in-folder is Linux-aware through DBus `org.freedesktop.FileManager1.ShowItems`, but the UI label still says “Show in Explorer”, so Linux validation should verify behavior rather than name parity. [VERIFIED: native/qt6/src/mainwindow.cpp:4931-4963, native/qt6/src/drag_utils.cpp:96-120] +- PM data storage uses `applicationDirPath()/data/projects.db`, not a user-writable platform data path. Linux validation must prove this is writable in the actual runtime target before Phase 07/08 packaging work. [VERIFIED: native/qt6/src/mainwindow.cpp:3914-3921, native/qt6/src/main.cpp:140-145] +- Path normalization for PM import/folder mapping lowercases paths (`toLower()`), which is a Linux-sensitive assumption because Linux filesystems are typically case-sensitive. [VERIFIED: native/qt6/src/importer.cpp:231-238, native/qt6/src/project_db.cpp:732-750] +- PM incremental watch updates only ingest files whose extensions are in the watcher allowlist, while initial PM import reads all files. This mismatch is likely to surface during Linux validation as “new file not appearing after initial project import”. [VERIFIED: native/qt6/src/project_manager_watcher.cpp:11-19,161-173,327-350, native/qt6/src/importer.cpp:256-319] +- PM delete/move flows depend on `QFile::moveToTrash` and non-Windows file operation fallbacks; Linux validation should explicitly cover trash availability, same-folder no-op, and cross-directory move/copy conflict naming. [VERIFIED: native/qt6/src/file_ops.cpp:46-60,274-372] + +## Likely Blockers + +| Blocker | Evidence | Impact | +|---|---|---| +| Project Manager has no batch rename entry point. [VERIFIED: codebase read] | `BulkRenameDialog` is only launched from File Manager and Asset Manager, never from PM. [VERIFIED: native/qt6/src/mainwindow.cpp:2881-2900,7000-7193] | Phase requirement `FEDORA43-PROJECTS` cannot be closed if PM batch rename is expected to be part of PM validation. [VERIFIED: .planning/REQUIREMENTS.md] | +| PM paste/new-folder target the project watch root, not the selected PM folder. [VERIFIED: codebase read] | `onPmPaste()` and `onPmNewFolder()` derive `destDir` from `Project.watchPath`. [VERIFIED: native/qt6/src/mainwindow.cpp:6433-6472,6524-6554] | Folder-scoped workflows will behave incorrectly even if Linux file ops themselves work. [VERIFIED: codebase read] | +| PM manual refresh does not force watcher/database reconciliation. [VERIFIED: codebase read] | `onPmRefresh()` only reloads models; watcher has `rescan()` but PM refresh never calls it. [VERIFIED: native/qt6/src/mainwindow.cpp:5391-5399, native/qt6/src/project_manager_watcher.cpp:145-149] | Missed filesystem events on Linux can remain invisible until some other watcher event happens. [VERIFIED: codebase read] | +| Initial import and watcher update scope disagree. [VERIFIED: codebase read] | Importer imports all files; watcher only tracks a limited extension set. [VERIFIED: native/qt6/src/importer.cpp:256-319, native/qt6/src/project_manager_watcher.cpp:11-19,161-173] | PM contents can diverge after project creation, producing hard-to-debug Linux validation failures. [VERIFIED: codebase read] | +| PM path handling lowercases paths during folder mapping. [VERIFIED: codebase read] | Both importer and `ensureFolderForPath()` normalize with `toLower()`. [VERIFIED: native/qt6/src/importer.cpp:231-238, native/qt6/src/project_db.cpp:739-750] | Case-distinct Linux paths can collapse into the same virtual-folder mapping. [VERIFIED: codebase read] | + +## Recommended First Implementation Slice + +1. Add a Project Manager context-menu and/or shortcut entry that launches `BulkRenameDialog` for multiple selected PM assets using PM asset ids, mirroring Asset Manager wiring. [VERIFIED: native/qt6/src/mainwindow.cpp:4863-5036,7000-7193, native/qt6/src/bulk_rename_dialog.h] +2. Fix PM destination resolution so paste and new-folder use the selected PM folder’s real filesystem path, not always the project root watch path. [VERIFIED: native/qt6/src/mainwindow.cpp:6433-6472,6524-6554, native/qt6/src/project_db.cpp:726-759] +3. Make PM refresh trigger watcher/database reconciliation for the active project, then validate add/remove/rename flows on Linux with real filesystem changes. [VERIFIED: native/qt6/src/mainwindow.cpp:5391-5399, native/qt6/src/project_manager_watcher.cpp:145-149] +4. After that slice is green, run targeted Linux manual validation for: create project by picker, create project by folder drop, select folder, preview media, reveal in file manager, single rename, batch rename, paste/cut/delete, refresh after out-of-app filesystem changes, and notification navigation. [VERIFIED: native/qt6/src/mainwindow.cpp, native/qt6/src/drag_utils.cpp] + +## Sources + +- `AGENTS.md` [VERIFIED: read] +- `codemap.md` [VERIFIED: read] +- `.planning/ROADMAP.md` [VERIFIED: read] +- `.planning/STATE.md` [VERIFIED: read] +- `.planning/REQUIREMENTS.md` [VERIFIED: read] +- `native/qt6/src/mainwindow.cpp` [VERIFIED: read] +- `native/qt6/src/project_manager_watcher.cpp` / `.h` [VERIFIED: read] +- `native/qt6/src/project_db.cpp` / `.h` [VERIFIED: read] +- `native/qt6/src/importer.cpp` / `.h` [VERIFIED: read] +- `native/qt6/src/bulk_rename_dialog.cpp` / `.h` [VERIFIED: read] +- `native/qt6/src/drag_utils.cpp` [VERIFIED: read] +- `native/qt6/src/project_assets_model.cpp` [VERIFIED: read] +- `native/qt6/src/project_sequence_grouping_proxy_model.cpp` [VERIFIED: read] +- `native/qt6/src/project_folders_model.cpp` [VERIFIED: read] diff --git a/.planning/phases/07-bundle-and-verify-converters/07-01-PLAN.md b/.planning/phases/07-bundle-and-verify-converters/07-01-PLAN.md new file mode 100644 index 00000000..69fcd65a --- /dev/null +++ b/.planning/phases/07-bundle-and-verify-converters/07-01-PLAN.md @@ -0,0 +1,189 @@ +--- +phase: 07 +phase_name: bundle-and-verify-converters +plan: 07-01 +status: verification_pending +autonomous: false +requirements: + - FEDORA43-CONVERTERS +files_modified: + - native/qt6/src/converter_tool_resolver.h + - native/qt6/src/media_convert_dialog.h + - native/qt6/src/media_convert_dialog.cpp + - native/qt6/src/media_converter_worker.h + - native/qt6/src/media_converter_worker.cpp + - native/qt6/tests/test_media_converter_worker.cpp +must_haves: + truths: + - Linux conversion flows choose bundled absolute tool paths before falling back to plain-name PATH lookup. + - The app can distinguish bundled/env/path-fallback resolution instead of treating every non-empty tool string as equivalent. + - Worker-side ffprobe probing stays aligned with the selected ffmpeg bundle on Linux. + artifacts: + - native/qt6/src/converter_tool_resolver.h + - native/qt6/src/media_convert_dialog.cpp + - native/qt6/src/media_converter_worker.cpp + - native/qt6/tests/test_media_converter_worker.cpp + key_links: + - MediaConvertDialog constructor -> shared resolver -> stored ffmpeg/magick resolution metadata + - MediaConvertDialog validation -> selected target -> bundled-required rejection for PATH fallback when strict verification is enabled + - MediaConverterWorker probe helpers -> sibling ffprobe resolution next to selected ffmpeg +evidence: + - .planning/phases/07-bundle-and-verify-converters/07-01-RESEARCH.md + - native/qt6/src/media_convert_dialog.cpp + - native/qt6/src/media_converter_worker.cpp + - native/qt6/tests/test_media_converter_worker.cpp +--- + +# Phase 07 Plan 07-01 + +## Progress Update + +Implementation for the planned lookup/probe slice is present in the current worktree (`converter_tool_resolver.h`, dialog/worker wiring, and focused resolver tests). Automated coverage for that slice is present via `test_media_converter_worker`, but the manual Linux bundled-converter verification steps in this plan are still pending. + +## Objective + +Implement the smallest Phase 07 slice that makes Linux converter lookup trustworthy before AppImage packaging work: centralize bundled-first resolution for `ffmpeg`, `ffprobe`, and `magick`, wire the conversion dialog and worker to that shared result, and add focused regression coverage proving Linux no longer silently relies on system `PATH` during bundled-runtime verification. + +## Why this slice first + +This is the highest-value in-scope slice because the current worker launch path already works; the real Linux risk is false-positive success when developer machines have `/usr/bin/ffmpeg`, `/usr/bin/ffprobe`, or `/usr/bin/magick` installed. Fixing lookup semantics first gives Phase 08 a reliable runtime contract and avoids spending time on packaging before the app knows how to prefer bundled tools. + +## Goal-backward target + +For this plan to be complete, these must be true: + +1. Opening `MediaConvertDialog` on Linux resolves `ffmpeg` and `magick` from bundled absolute paths first. +2. The dialog can tell the difference between a bundled/env absolute path and plain-name PATH fallback. +3. When `ffmpeg` is resolved from a bundle, all `ffprobe`-based metadata/progress/alpha checks use the sibling bundled `ffprobe` on Linux. +4. Focused automated tests fail if Linux resolution regresses back to `.exe`-only or PATH-first behavior. + +## Exact files and functions to change + +### 1. `native/qt6/src/converter_tool_resolver.h` (new) + +Add a shared, header-only resolver used by both the dialog and worker. + +Create: +- `enum class ConverterToolSource { BundledRuntime, BundledDevCheckout, EnvOverride, PathFallback, Missing };` +- `struct ConverterToolResolution { QString toolName; QString resolvedPath; ConverterToolSource source; bool isAbsolute() const; bool isFallback() const; };` +- `ConverterToolResolution resolveFfmpegTool(const QString& appDir);` +- `ConverterToolResolution resolveMagickTool(const QString& appDir);` +- `QString resolveSiblingFfprobePath(const QString& ffmpegPath);` + +Linux candidate order must be explicit and stable: +- bundled runtime next to app: `applicationDirPath()/ffmpeg`, `applicationDirPath()/ffprobe`, `applicationDirPath()/magick` +- bundled runtime sibling bin dir: `applicationDirPath()/../bin/` +- existing dev checkout fallback already used in research: `../../third_party/ffmpeg/bin/ffmpeg`, `../../third_party/ffmpeg/bin/ffprobe`, ImageMagick `ImageMagick*/magick` and `ImageMagick*/bin/magick` +- env overrides: `FFMPEG_ROOT`, `MAGICK_ROOT`, `IMAGEMAGICK_ROOT` +- plain program name fallback last (`ffmpeg`, `ffprobe`, `magick`) + +Do not add packaging logic here; this helper only defines runtime lookup rules. + +### 2. `native/qt6/src/media_convert_dialog.h` + +Replace string-only tool state with shared resolution metadata. + +Change: +- add `#include "converter_tool_resolver.h"` +- replace `QString m_ffmpeg;` / `QString m_magick;` with `ConverterToolResolution m_ffmpegResolution;` and `m_magickResolution;` +- keep existing dialog surface area small; do not add new UI controls + +### 3. `native/qt6/src/media_convert_dialog.cpp` + +Update these functions: +- `MediaConvertDialog::MediaConvertDialog(...)` +- remove or reduce `locateFfmpeg()` / `locateMagick()` to wrappers around the shared resolver, or delete them if no longer needed +- `MediaConvertDialog::validateAndBuildTasks(...)` +- `MediaConvertDialog::onStart()` + +Implementation requirements: +- resolve tools through the new shared helper during dialog construction +- show a precise status message when the resolved source is `PathFallback` instead of silently treating it as equivalent to bundled discovery +- introduce one narrow strict-verification gate for Linux runtime checks via environment variable `KASSETMANAGER_REQUIRE_BUNDLED_CONVERTERS=1` +- when that env var is set, reject video/sequence conversions if `ffmpeg` resolution is `PathFallback`, and reject single-image conversions if `magick` resolution is `PathFallback` +- keep developer convenience intact when the env var is unset: PATH fallback may still run, but the dialog must report that it is using fallback +- pass the resolved absolute/bare program string from `m_ffmpegResolution.resolvedPath` and `m_magickResolution.resolvedPath` into the worker + +Do not broaden the dialog into a packaging/status dashboard; the only new UI requirement is accurate, actionable resolver state. + +### 4. `native/qt6/src/media_converter_worker.h` + +Keep the public API minimal. + +Change only if needed to support shared ffprobe lookup reuse, for example: +- declare a small private helper such as `static QString resolveFfprobeForFfmpeg(const QString& ffmpegPath);` + +Do not redesign task structures or conversion-option types. + +### 5. `native/qt6/src/media_converter_worker.cpp` + +Update these call sites so Linux probing stays on the same bundle as `ffmpeg`: +- `MediaConverterWorker::probeDurationMs(...)` +- `MediaConverterWorker::probeAvgFps(...)` +- the `ffprobeHasAlpha` lambda inside `MediaConverterWorker::buildCommand(...)` + +Implementation requirements: +- use the shared sibling-ffprobe resolution logic first (`ffprobe` on Linux, `ffprobe.exe` on Windows if present) +- only fall back to plain `ffprobe` when no sibling executable exists +- keep probe behavior otherwise unchanged; this slice is about tool alignment, not rewriting progress estimation or alpha rules + +### 6. `native/qt6/tests/test_media_converter_worker.cpp` + +Expand the existing test target instead of creating a broad new suite. + +Add focused tests for: +- Linux `ffmpeg` bundled-runtime resolution returns an absolute app-local path when a fake `ffmpeg` exists next to the app dir +- Linux `magick` bundled/dev/env resolution recognizes non-`.exe` binaries and does not require Windows-only names +- sibling `ffprobe` resolution picks `ffprobe` next to a resolved Linux `ffmpeg` path before plain-name fallback +- strict verification logic can distinguish `PathFallback` from bundled/env resolution for the dialog-facing lookup results + +Keep tests filesystem-local with `QTemporaryDir`; do not depend on real `/usr/bin` tools. + +## Ordered tasks + +1. **Add the shared converter resolution contract and its Linux-first lookup rules** + - Create `converter_tool_resolver.h` with the resolution enum, result struct, and helper functions. + - Encode the exact Linux lookup order from the research: runtime bundle first, dev-checkout bundle second, env override third, PATH fallback last. + - Reuse this helper everywhere instead of leaving separate lookup branches in the dialog and worker. + +2. **Wire the dialog and worker to shared resolution state** + - Update `MediaConvertDialog` to store rich resolution results, expose fallback state in the status/error path, and enforce bundled-only verification when `KASSETMANAGER_REQUIRE_BUNDLED_CONVERTERS=1` is set. + - Update worker-side `ffprobe` probing so `probeDurationMs`, `probeAvgFps`, and MOV alpha detection use sibling `ffprobe` resolution from the chosen `ffmpeg` path. + - Keep conversion command construction unchanged except for the executable-resolution fix. + +3. **Add focused regression coverage and run the narrow validation slice** + - Extend `test_media_converter_worker.cpp` with temporary-directory-based resolver tests. + - Build and run the existing worker test target. + - Manually smoke-test one video/sequence flow and one single-image flow with bundled binaries available and `KASSETMANAGER_REQUIRE_BUNDLED_CONVERTERS=1` enabled to prove the dialog rejects PATH-only fallback during verification mode. + +## Validation + +### Automated + +1. Build the affected test target: + - `cmake --build build-linux --target test_media_converter_worker -j4` +2. Run focused regression coverage: + - `ctest --test-dir build-linux --output-on-failure -R test_media_converter_worker` + +### Manual Linux verification + +Only after the automated tests pass: + +1. Start the app in a runtime layout that contains local bundled copies of `ffmpeg`, `ffprobe`, and `magick` next to the executable or in the expected sibling `../bin` location. +2. Launch with strict verification enabled: + - `KASSETMANAGER_REQUIRE_BUNDLED_CONVERTERS=1 ./build-linux/install_run/bin/kassetmanagerqt` +3. Open `MediaConvertDialog` from a video or sequence selection and confirm the status/log path reports a bundled absolute `ffmpeg` resolution, not an unqualified plain-name fallback. +4. Run one MP4 or MOV conversion and confirm metadata/progress probing still works. +5. Open `MediaConvertDialog` from a single-image selection and confirm `magick` is resolved from the bundled/runtime location before conversion starts. +6. Temporarily remove or rename the bundled converter binaries, relaunch with `KASSETMANAGER_REQUIRE_BUNDLED_CONVERTERS=1`, and confirm the dialog now fails early instead of silently using system PATH tools. + +## Out of scope for 07-01 + +- Linux install/AppDir/AppImage staging of bundled converters in `native/qt6/CMakeLists.txt` or packaging scripts; that belongs to Phase 08 once runtime lookup rules are stable. +- Broad conversion UX changes, new settings controls, or converter feature expansion. +- tlRender playback, linked-FFmpeg preview paths, thumbnail generation, or any non-`MediaConvertDialog` runtime. +- A full conversion-format matrix beyond the narrow smoke pass needed to verify the lookup contract. + +## Done condition + +Plan 07-01 is complete when Linux converter lookup is centralized, dialog validation can explicitly detect and reject PATH fallback in strict bundled-verification mode, worker-side `ffprobe` probing follows the same bundle as `ffmpeg`, and the focused automated tests prove those lookup rules without relying on system-installed tools. diff --git a/.planning/phases/07-bundle-and-verify-converters/07-01-RESEARCH.md b/.planning/phases/07-bundle-and-verify-converters/07-01-RESEARCH.md new file mode 100644 index 00000000..11994ce0 --- /dev/null +++ b/.planning/phases/07-bundle-and-verify-converters/07-01-RESEARCH.md @@ -0,0 +1,101 @@ +# Phase 07: Bundle And Verify Converters - Research + +**Researched:** 2026-04-14 +**Phase objective:** Prefer bundled `ffmpeg` and `magick` paths in Linux runtime flows and verify that conversion features use those bundled tools before falling back to system `PATH`. [VERIFIED: .planning/ROADMAP.md, .planning/REQUIREMENTS.md, .planning/STATE.md] + +## Summary + +The external converter pipeline is narrow and easy to trace: File Manager and Asset Manager context menus open `MediaConvertDialog`, the dialog resolves `ffmpeg`/`magick`, selected settings are converted into `MediaConverterWorker::Task` objects, and the worker launches external processes with `QProcess`. [VERIFIED: native/qt6/src/mainwindow.cpp:3090-3106,7193-7199; native/qt6/src/media_convert_dialog.cpp:18-35,401-499; native/qt6/src/media_converter_worker.cpp:69-131] + +The Linux-specific problem is not the worker launch itself; it is tool resolution. The current Linux code still prefers plain-name fallback (`"ffmpeg"`, `"magick"`) and several bundled-path checks are Windows-only or `.exe`-only, so a Linux AppImage can appear to work on a developer machine with system packages installed while silently bypassing bundled tools. [VERIFIED: native/qt6/src/media_convert_dialog.cpp:301-364; native/qt6/src/media_converter_worker.cpp:204-239,458-463] [CITED: https://doc.qt.io/qt-6/qprocess.html#finding-the-executable] + +**Primary recommendation:** First implement one Linux-only lookup slice: centralize bundled-tool discovery for `ffmpeg`, `ffprobe`, and `magick`, return absolute paths when found, and make validation fail early when only plain-name fallback is available during bundled-runtime verification. [VERIFIED: native/qt6/src/media_convert_dialog.cpp:301-364,401-421; native/qt6/src/media_converter_worker.cpp:204-239,458-463; docs/superpowers/plans/2026-04-10-linux-port-fedora43-wayland-appimage.md:433-441] + +## Project Constraints (from AGENTS.md) + +- Read codemaps first and trace the real runtime/build path before deciding anything. [VERIFIED: AGENTS.md] +- Base findings on present code and observed evidence, not speculation. [VERIFIED: AGENTS.md] +- Fix gatekeeping blockers before downstream polish. [VERIFIED: AGENTS.md] +- Prefer the smallest justified change and re-check affected paths after each fix. [VERIFIED: AGENTS.md] +- Verify results with concrete evidence; do not present speculative fixes as complete. [VERIFIED: AGENTS.md] +- Only write inside the repository root. [VERIFIED: AGENTS.md] + +## Traced Runtime Paths + +### 1) User entry points into conversion + +- File Manager selection opens `MediaConvertDialog` from the context menu when all selected files have supported image/video extensions. [VERIFIED: native/qt6/src/mainwindow.cpp:3080-3106] +- Asset Manager selection opens the same `MediaConvertDialog` from the asset context menu. [VERIFIED: native/qt6/src/mainwindow.cpp:7193-7199] +- No other traced Linux runtime path in `native/qt6/src` launches external `ffmpeg` or `magick` binaries for conversion work. [VERIFIED: grep over native/qt6/src for `ffmpeg|magick|ImageMagick|MediaConvertDialog`] + +### 2) Dialog-time tool discovery + +- `MediaConvertDialog` constructor immediately calls `locateFfmpeg()` and `locateMagick()` and stores the results in `m_ffmpeg` and `m_magick`. [VERIFIED: native/qt6/src/media_convert_dialog.cpp:18-35] +- `locateFfmpeg()` on Linux checks `applicationDirPath()/ffmpeg`, then `../../third_party/ffmpeg/bin/ffmpeg`, then `FFMPEG_ROOT/bin/ffmpeg`, and otherwise returns the plain program name `ffmpeg`. [VERIFIED: native/qt6/src/media_convert_dialog.cpp:301-321] +- `locateMagick()` is effectively Windows-shaped: its next-to-app check is guarded by `#ifdef Q_OS_WIN`, its `third_party` probes only look for `magick.exe`, and its environment-variable probes only look for `magick.exe`; otherwise it returns the plain program name `magick`. [VERIFIED: native/qt6/src/media_convert_dialog.cpp:326-364] +- On Unix, `QProcess` searches `PATH` when the program is only a plain file name, and Qt recommends passing an absolute executable path to avoid platform-dependent lookup behavior. [CITED: https://doc.qt.io/qt-6/qprocess.html#finding-the-executable] + +### 3) Task validation and worker execution + +- `validateAndBuildTasks()` only rejects missing tools when `m_ffmpeg` or `m_magick` is empty, but the locator functions return plain names instead of empty strings on fallback, so validation does not distinguish bundled lookup success from `PATH` fallback. [VERIFIED: native/qt6/src/media_convert_dialog.cpp:321,364,401-421] +- `onStart()` passes the resolved strings directly into `MediaConverterWorker` with `setFfmpegPath()` and `setMagickPath()`. [VERIFIED: native/qt6/src/media_convert_dialog.cpp:471-499; native/qt6/src/media_converter_worker.h:59-60] +- `MediaConverterWorker::buildCommand()` uses ImageMagick only for single-image output targets and FFmpeg for video and sequence outputs, then launches the chosen program through `QProcess::setProgram()` and `setArguments()`. [VERIFIED: native/qt6/src/media_converter_worker.cpp:121-131,327-519] + +### 4) FFprobe-dependent sub-paths inside the worker + +- Duration, width/height, average FPS, and MOV alpha-preservation probing all derive `ffprobe` from the selected FFmpeg directory, but they look for `ffprobe.exe` specifically and otherwise fall back to plain `ffprobe` on `PATH`. [VERIFIED: native/qt6/src/media_converter_worker.cpp:204-239,458-463] +- That means Linux can launch a bundled `ffmpeg` binary while still using a system `ffprobe`, or fail to find bundled `ffprobe` even when it sits next to bundled `ffmpeg` as `ffprobe` without `.exe`. [VERIFIED: native/qt6/src/media_converter_worker.cpp:208-209,234-235,459-460] + +### 5) Packaging/install state relevant to Phase 07 + +- The current non-Windows CMake install section installs the app binary, icons, and bundled OCIO config, but the visible converter-install logic is Windows-only; no traced Linux install rule currently stages `ffmpeg`, `ffprobe`, or `magick`. [VERIFIED: native/qt6/CMakeLists.txt:487-599] +- The phase-planning notes already expect a Linux slice that prefers bundled AppImage runtime paths first and validates MP4/MOV/PNG/TIF conversion behavior afterward. [VERIFIED: docs/superpowers/plans/2026-04-10-linux-port-fedora43-wayland-appimage.md:428-441] +- The repository currently contains Windows-style bundled converter assets under `third_party/ffmpeg/bin/ffmpeg.exe` and `ffprobe.exe`, while the checked `third_party/ImageMagick-7.1.2-8-portable-Q16-x64` directory did not expose a Linux `magick` binary in this session. [VERIFIED: glob of `third_party/ffmpeg/**/*`; glob of `third_party/ImageMagick*/*`; local `ls` of `third_party/ffmpeg/bin`] + +### 6) Scope boundary: preview/thumbnail runtime is different + +- Video preview and thumbnail flows do not go through `MediaConvertDialog`; thumbnail generation uses `TLRenderPlayer` helpers and image loaders, and `live_preview_manager.cpp` uses linked FFmpeg libraries when compiled with `HAVE_FFMPEG`, not external CLI binaries. [VERIFIED: native/qt6/src/thumbnail_generator_worker.cpp:217-271; native/qt6/src/live_preview_manager.cpp:26-34,108-120] +- Phase 07 should therefore focus on explicit conversion/export runtime paths, not on tlRender playback or linked-FFmpeg preview code. [VERIFIED: traced code paths above] + +## Linux-Specific Risk Areas + +- **Bundled-path bypass by system packages:** this machine already has `/usr/bin/ffmpeg`, `/usr/bin/ffprobe`, and `/usr/bin/magick`, so current Linux testing can pass even if bundled lookup is wrong. [VERIFIED: local shell `command -v ffmpeg`, `ffprobe`, `magick`] +- **ImageMagick lookup is not Linux-bundled-aware:** Linux never checks `applicationDirPath()/magick`, `../bin/magick`, or other non-`.exe` bundled candidates before falling back to `PATH`. [VERIFIED: native/qt6/src/media_convert_dialog.cpp:326-364] +- **FFprobe sibling lookup is Windows-only:** hard-coded `ffprobe.exe` makes Linux metadata/progress/alpha probing miss bundled `ffprobe` unless the environment `PATH` happens to rescue it. [VERIFIED: native/qt6/src/media_converter_worker.cpp:208-209,234-235,459-460] +- **Validation cannot prove bundling today:** because the locator fallback returns plain names instead of “not found” or “PATH fallback,” the UI cannot tell the user whether it resolved a bundled binary or a system binary. [VERIFIED: native/qt6/src/media_convert_dialog.cpp:321,364,401-421] +- **Phase 08 packaging depends on this phase:** AppImage bundling cannot be trusted until Phase 07 establishes where Linux runtime lookup expects the tools to live. [VERIFIED: .planning/ROADMAP.md:72-80; docs/superpowers/plans/2026-04-10-linux-port-fedora43-wayland-appimage.md:450-470] + +## Likely Blockers + +| Blocker | Evidence | Impact | +|---|---|---| +| Linux `magick` bundled lookup is effectively missing. [VERIFIED: codebase read] | `locateMagick()` only probes `magick.exe`-style paths and skips next-to-app lookup entirely on non-Windows. [VERIFIED: native/qt6/src/media_convert_dialog.cpp:326-364] | Single-image conversions can silently use system `magick` instead of the bundled binary, defeating the phase goal. [VERIFIED: native/qt6/src/media_convert_dialog.cpp:401-421] | +| FFprobe companion lookup is wrong for Linux bundles. [VERIFIED: codebase read] | Worker probes `ffprobe.exe` next to FFmpeg, then drops to `PATH`. [VERIFIED: native/qt6/src/media_converter_worker.cpp:204-239,458-463] | Progress estimation, FPS probing, and MOV alpha detection can diverge from the bundled FFmpeg runtime. [VERIFIED: native/qt6/src/media_converter_worker.cpp:95-115,393,457-480] | +| Current validation does not distinguish absolute bundled paths from `PATH` fallback. [VERIFIED: codebase read] | Both locator functions return plain program names rather than an empty/not-found state. [VERIFIED: native/qt6/src/media_convert_dialog.cpp:321,364] | Linux verification can report false confidence on developer machines with system packages installed. [VERIFIED: local shell tool availability; native/qt6/src/media_convert_dialog.cpp:401-421] | +| Linux install/AppDir staging for converters is not in the traced CMake path yet. [VERIFIED: codebase read] | Non-Windows install logic shown in `native/qt6/CMakeLists.txt` does not install converter binaries. [VERIFIED: native/qt6/CMakeLists.txt:487-599] | Even perfect runtime lookup code will fail in packaged builds if the binaries are never staged. [VERIFIED: native/qt6/CMakeLists.txt:487-599; docs/superpowers/plans/2026-04-10-linux-port-fedora43-wayland-appimage.md:460-477] | +| Automated regression coverage is almost absent for this phase. [VERIFIED: codebase read] | `test_media_converter_worker.cpp` only covers the empty-queue case and does not test Linux locator behavior or probe selection. [VERIFIED: native/qt6/tests/test_media_converter_worker.cpp:1-35] | Phase 07 fixes will be easy to regress during Phase 08 packaging work. [VERIFIED: native/qt6/tests/test_media_converter_worker.cpp:1-35] | + +## Recommended First Implementation Slice + +1. Extract converter lookup into one shared helper that resolves **absolute** Linux candidates for `ffmpeg`, `ffprobe`, and `magick` from the app runtime layout first, then optional env vars, and only then plain-name developer fallback. [VERIFIED: native/qt6/src/media_convert_dialog.cpp:301-364; native/qt6/src/media_converter_worker.cpp:204-239,458-463] [CITED: https://doc.qt.io/qt-6/qprocess.html#finding-the-executable] +2. Make the helper surface whether the result is **bundled absolute path**, **env absolute path**, or **PATH fallback**, and show that in Phase 07 verification output instead of treating all non-empty strings as equivalent. [VERIFIED: native/qt6/src/media_convert_dialog.cpp:401-421] +3. Update worker-side `ffprobe` lookup to use the resolved sibling path on Linux (`ffprobe`, not only `ffprobe.exe`) so metadata/progress probes stay aligned with the same bundle as `ffmpeg`. [VERIFIED: native/qt6/src/media_converter_worker.cpp:204-239,458-463] +4. Add one focused Linux regression test layer for lookup/probe resolution before broader packaging work: unit-test the resolver with mocked app-dir/env layouts, then perform one manual smoke pass for MP4, MOV, PNG sequence, and single-image conversion using bundled binaries. [VERIFIED: native/qt6/tests/test_media_converter_worker.cpp:1-35; docs/superpowers/plans/2026-04-10-linux-port-fedora43-wayland-appimage.md:428-441] + +## Sources + +- `AGENTS.md` [VERIFIED: read] +- `codemap.md` [VERIFIED: read] +- `.planning/ROADMAP.md` [VERIFIED: read] +- `.planning/STATE.md` [VERIFIED: read] +- `.planning/REQUIREMENTS.md` [VERIFIED: read] +- `native/qt6/src/codemap.md` [VERIFIED: read] +- `native/qt6/src/mainwindow.cpp` [VERIFIED: read] +- `native/qt6/src/media_convert_dialog.cpp` / `.h` [VERIFIED: read] +- `native/qt6/src/media_converter_worker.cpp` / `.h` [VERIFIED: read] +- `native/qt6/src/thumbnail_generator_worker.cpp` [VERIFIED: read] +- `native/qt6/src/live_preview_manager.cpp` [VERIFIED: read] +- `native/qt6/CMakeLists.txt` [VERIFIED: read] +- `native/qt6/tests/test_media_converter_worker.cpp` [VERIFIED: read] +- `docs/superpowers/plans/2026-04-10-linux-port-fedora43-wayland-appimage.md` [VERIFIED: read] +- Qt 6 `QProcess` docs, “Finding the Executable” [CITED: https://doc.qt.io/qt-6/qprocess.html#finding-the-executable] diff --git a/.slim/cartography.json b/.slim/cartography.json new file mode 100644 index 00000000..df8260d1 --- /dev/null +++ b/.slim/cartography.json @@ -0,0 +1,194 @@ +{ + "metadata": { + "version": "1.0.0", + "last_run": "2026-04-11T11:44:22.791171Z", + "root": "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt", + "include_patterns": [ + "native/qt6/src/**/*.cpp", + "native/qt6/src/**/*.h", + "native/qt6/CMakeLists.txt", + "native/qt6/tests/CMakeLists.txt", + "scripts/**/*.ps1", + ".github/workflows/**/*.yml" + ], + "exclude_patterns": [ + "native/qt6/tests/**", + "**/*.md" + ], + "exceptions": [] + }, + "file_hashes": { + "native/qt6/CMakeLists.txt": "e94221b99deb513491d976d35243863c", + "native/qt6/src/annotation_items.cpp": "84e0c813e335cc4b90c0f76e7f1808cb", + "native/qt6/src/annotation_items.h": "c61b8bcd113f2ff3b7f6459dc9505c51", + "native/qt6/src/annotation_layer.cpp": "5aae60e94d6fbee410606e657c2341eb", + "native/qt6/src/annotation_layer.h": "12d17cb6b6735266ff43c0343b5902ae", + "native/qt6/src/asset_grid_view.cpp": "c701b2d7edfbb390575a2e8f7e6261f2", + "native/qt6/src/asset_grid_view.h": "a6f2d065563687c001316885642a35fd", + "native/qt6/src/asset_item_delegate.cpp": "c8980bc22409169d4ee1907fd294683c", + "native/qt6/src/asset_item_delegate.h": "01fc017a7a24b7b1096ea3a0dfb1cef3", + "native/qt6/src/asset_sequence_grouping_proxy_model.cpp": "5e2c43c3f54a1aeee95e3653cb86dd79", + "native/qt6/src/asset_sequence_grouping_proxy_model.h": "dc6dca73892f7e4254a85a14ed272b51", + "native/qt6/src/assets_model.cpp": "d7f6bfef172395b8d6f84071c94c8c0c", + "native/qt6/src/assets_model.h": "931c1d295ddd7854de7b1dead6db47a4", + "native/qt6/src/assets_table_model.h": "38311ae0c85f64230a3b29839e3bee17", + "native/qt6/src/bulk_rename_dialog.cpp": "49b7b2975ec9b806b851349f6d079b5d", + "native/qt6/src/bulk_rename_dialog.h": "7499ecc2ca67bdcbb2b5a5ea97b79511", + "native/qt6/src/context_preserver.cpp": "2ba768d80f8e5aaa11a997c663d87b13", + "native/qt6/src/context_preserver.h": "dede0c7635c7322dc4c6229252816f37", + "native/qt6/src/database_health_agent.cpp": "fee23d787fc1a7bf8d73afc62b7a06d9", + "native/qt6/src/database_health_agent.h": "e820163644af8671bc0610089e12d9f3", + "native/qt6/src/database_health_dialog.cpp": "86808750e3a5e81a3bee83770be41323", + "native/qt6/src/database_health_dialog.h": "32312c386e4f6aa000a03eb503d00556", + "native/qt6/src/db.cpp": "7078b1aada841d67242eaf2962b01b63", + "native/qt6/src/db.h": "e4f0cc354b9ae1512305acdf17383dae", + "native/qt6/src/drag_utils.cpp": "2d07674f45c84f585bb2f12feb57b03c", + "native/qt6/src/drag_utils.h": "19fbac025a9c3c41d46303eea2ec1157", + "native/qt6/src/everything_folder_model.cpp": "299af23a3a6f67fb7b551f503a324c66", + "native/qt6/src/everything_folder_model.h": "60dcc4d2831246f74e9b1921e4621e0d", + "native/qt6/src/everything_search.cpp": "9bc52ffc73b38645ce2f4b0d31356761", + "native/qt6/src/everything_search.h": "cff94bbe03b6042f6d3e065929c3b113", + "native/qt6/src/everything_search_dialog.cpp": "c7af18ee235287d9e1ab855133ef43a4", + "native/qt6/src/everything_search_dialog.h": "347952bd6761cc27c6d1986242b67f81", + "native/qt6/src/file_manager_pane.cpp": "37a545bdfd1103a885b598123c3ef833", + "native/qt6/src/file_manager_pane.h": "47e7b8d19e533f6e9780cca9b0848b0f", + "native/qt6/src/file_ops.cpp": "83f6c9efc7eeb291a6091968742b25b0", + "native/qt6/src/file_ops.h": "12875e658a7367c331fa0ee294130484", + "native/qt6/src/file_ops_dialog.cpp": "1ec58874df443fb1fdfd5aa4867a14a4", + "native/qt6/src/file_ops_dialog.h": "80c9a8592151913222346cb5c148f737", + "native/qt6/src/file_utils.cpp": "cc11a20650461265d6bb98f165926865", + "native/qt6/src/file_utils.h": "bcf5b6db3629a4f7aea70c0740d343a1", + "native/qt6/src/fm_item_delegate.cpp": "40d81f5809ab0cf704929946f0069b8f", + "native/qt6/src/fm_item_delegate.h": "38b18c2b5c951e9308929337da148475", + "native/qt6/src/fm_views_ex.cpp": "f7eb1a9322a90b4490c473aa02d533a9", + "native/qt6/src/fm_views_ex.h": "0311add0086400baab5eff9261d68f89", + "native/qt6/src/grid_scrub.cpp": "0b8c75283ebb55fcaf266a76495908e5", + "native/qt6/src/grid_scrub.h": "668e381b2dce8f8116aa2b8f06842574", + "native/qt6/src/i_asset_database.h": "2c2276b906b1c3a0bc3ae3bfed757c4a", + "native/qt6/src/icon_utils.cpp": "49702064a713edd2773391727578e714", + "native/qt6/src/icon_utils.h": "c9c98fb2c93a556e4a9a7f71af7d75bb", + "native/qt6/src/image_preview_overlay.cpp": "e92da200f8de45e4869a548674c02d34", + "native/qt6/src/image_preview_overlay.h": "813ba9c27bfb95192b5416024b3a4c21", + "native/qt6/src/import_progress_dialog.cpp": "6c10eb3f21e40ffa323614fff22eb251", + "native/qt6/src/import_progress_dialog.h": "392381e14c3b1c5bdbcc49d22eb17be4", + "native/qt6/src/importer.cpp": "bc86d0a9bff772e221fbe30807cd1e17", + "native/qt6/src/importer.h": "52511c93731471bdc9303c5b52e53ba8", + "native/qt6/src/live_preview_manager.cpp": "4b78629c26420279c0b6a43a6ab58cb2", + "native/qt6/src/live_preview_manager.h": "a8304b662c2f2dcc50e8034c1235d191", + "native/qt6/src/log_manager.cpp": "a47e6f5ce637c88e895189fdfb3b05d6", + "native/qt6/src/log_manager.h": "18eb9d6b3e05361e6ab3e32d2285152a", + "native/qt6/src/log_viewer_widget.cpp": "fc842d77301d0a1fe3d63669b00d4cb8", + "native/qt6/src/log_viewer_widget.h": "7372e6b42c91e31430a8899f718e2ee0", + "native/qt6/src/main.cpp": "9868b1214ad268d32499de05518a62a7", + "native/qt6/src/mainwindow.cpp": "feca7449917357eb1137cd6ba486c4b8", + "native/qt6/src/mainwindow.h": "d459c61911ccb28a97e411e2d0f924aa", + "native/qt6/src/media/tlrender_player.cpp": "c98cea24a021859347d272e41aa47be6", + "native/qt6/src/media/tlrender_player.h": "eb9bbd0f3a4d874be8d89221d894742d", + "native/qt6/src/media/tlrender_viewport.cpp": "1c587a4ebd33ffd7e90a90198ef27d61", + "native/qt6/src/media/tlrender_viewport.h": "9f7b8cfc564027dc686ee09785341e68", + "native/qt6/src/media/tlrender_widget.cpp": "5cad57abee708a52ccf898137a31e931", + "native/qt6/src/media/tlrender_widget.h": "9b121fa6042e17200c39206b9080a1b1", + "native/qt6/src/media_convert_dialog.cpp": "deac22a69b46556734305c8a3a65f39e", + "native/qt6/src/media_convert_dialog.h": "ec6861bd50889f190866bb41b5ef8789", + "native/qt6/src/media_converter_worker.cpp": "8e899b98dda4a8550da1943bd5ee3a10", + "native/qt6/src/media_converter_worker.h": "d91165b1eeba0929e421872a63d0539e", + "native/qt6/src/office_preview.cpp": "5bd0b41310e2f461184af799553c7f66", + "native/qt6/src/office_preview.h": "b106a20ac853e1f9bc1b1a18b36c9310", + "native/qt6/src/oiio_image_loader.cpp": "4be4162ca9c0ab099aa303318b005e3a", + "native/qt6/src/oiio_image_loader.h": "89e22ba793e73fc082615bc5d674b211", + "native/qt6/src/platform_session.h": "226cc4b402ad2cd61c336c401a246f01", + "native/qt6/src/preview_overlay.cpp": "c7813a68faf7e3b9d49a01d4df6d6b7d", + "native/qt6/src/preview_overlay.h": "38afc8a623bc4adc965c9f6870db5a7b", + "native/qt6/src/progress_manager.cpp": "39e31b47879178dd1383370e2e5d1c04", + "native/qt6/src/progress_manager.h": "ac722a8159d8f637d6c2b41518db3984", + "native/qt6/src/project_assets_model.cpp": "027a6f8e7a321d81832759ff5277fc67", + "native/qt6/src/project_assets_model.h": "068e833c18722d74f1b0a52979c269d9", + "native/qt6/src/project_db.cpp": "4f0e0bbe7ae1e7aa527d18d534eed223", + "native/qt6/src/project_db.h": "5e0d240a4bc8e1f49e64526ae26827ce", + "native/qt6/src/project_folder_watcher.cpp": "9fdfd3d99afc4f05903304622f8bba88", + "native/qt6/src/project_folder_watcher.h": "6d2f1fc1c33dc47c953a121128c7c3e6", + "native/qt6/src/project_folders_model.cpp": "a11ba2a478c0a763f27b707f3c8bddf7", + "native/qt6/src/project_folders_model.h": "54682bff1ba5dd5febb7d3b7a34592b4", + "native/qt6/src/project_import_worker.cpp": "9da475947dbb3b8eeac2fcf97035d2d1", + "native/qt6/src/project_import_worker.h": "95e616c942fd94214dc7eed27a11c619", + "native/qt6/src/project_item_delegate.cpp": "1292b3d928e29cbd4e59fc4996390931", + "native/qt6/src/project_item_delegate.h": "35244cd93c0f65fcf8668b112b3bf39b", + "native/qt6/src/project_manager_watcher.cpp": "ae6385f72431c028f6667426046a5aba", + "native/qt6/src/project_manager_watcher.h": "aa3916c72bc98cf314f9bc20fee273a6", + "native/qt6/src/project_sequence_grouping_proxy_model.cpp": "e399d83f2f7748c69b942be2ad8e6236", + "native/qt6/src/project_sequence_grouping_proxy_model.h": "d398ae79c7be67f1ef982d2f19473b3f", + "native/qt6/src/project_version_detector.cpp": "ae55e145d43637ce32e0493459782383", + "native/qt6/src/project_version_detector.h": "6f5d0942422bc6aaaa24c2648c0d16f6", + "native/qt6/src/projects_model.cpp": "b27befb6286eb127292b5a901586a9ef", + "native/qt6/src/projects_model.h": "8cec76b0882f846196a6d018bbef0bd7", + "native/qt6/src/scrub_frame_registry.cpp": "4043e3ab13e359ae02004a4cd41bc3cb", + "native/qt6/src/scrub_frame_registry.h": "f380ccee6ff750fa0b7d21c45914798d", + "native/qt6/src/sequence_detector.cpp": "534b254aff72f246316da069405b9cd5", + "native/qt6/src/sequence_detector.h": "9d5c66d7d4b2a152e97b6e995cd50de9", + "native/qt6/src/sequence_grouping_proxy_model.cpp": "7a39dd4220b8d096c801ba7d74025fbe", + "native/qt6/src/sequence_grouping_proxy_model.h": "67fc952931bac22aab26491799d64bee", + "native/qt6/src/settings_dialog.cpp": "17034ddfed9dc061752de01b35104584", + "native/qt6/src/settings_dialog.h": "1b3d0774f597d7dcad11551844bcd59d", + "native/qt6/src/star_rating_widget.cpp": "2f2b6a28b205ff45cf80c707b539fe93", + "native/qt6/src/star_rating_widget.h": "f78f86751645eb4de6d01e3fb537b9ca", + "native/qt6/src/tags_model.h": "3e1df1d179998956d52ee89b509f0b85", + "native/qt6/src/theme_manager.cpp": "f617206b6cd182948c35b2d695041e5f", + "native/qt6/src/theme_manager.h": "40e1d713ffc8100009ef2e79ea772e2a", + "native/qt6/src/thumbnail_cache_manager.cpp": "93cd56a6786f8d80edeeffd1135c17cd", + "native/qt6/src/thumbnail_cache_manager.h": "6b9f851e79e5cb41dff295f37e138cf2", + "native/qt6/src/thumbnail_generator_dialog.cpp": "b21e23be12b9a26c27e78e034b3f3d01", + "native/qt6/src/thumbnail_generator_dialog.h": "e6958bad2ef991ef15187ae110b85c3b", + "native/qt6/src/thumbnail_generator_worker.cpp": "ba5dc488b8773d5e439e3456c0040575", + "native/qt6/src/thumbnail_generator_worker.h": "3a03409571331c3622efa9fc27e03cc0", + "native/qt6/src/user_guide_dialog.cpp": "47be5abd2348d8a0f6e3e498800c0844", + "native/qt6/src/user_guide_dialog.h": "d19c5fb1ef7cf8dd608884b8e43a1191", + "native/qt6/src/utils.cpp": "ad2638df605cdb83856d7313e64bb7e2", + "native/qt6/src/utils.h": "3e0ea5805d879ef2968755a4e3e14c4b", + "native/qt6/src/video_metadata.cpp": "d06f83533a1341897d8308a4b558db31", + "native/qt6/src/video_metadata.h": "ef46424b2b176cedcbaf3f5333259ed8", + "native/qt6/src/virtual_drag.cpp": "2349e22918be6f698110299ebd9bb608", + "native/qt6/src/virtual_drag.h": "c21cc8468f32b34e15853c6b999bf978", + "native/qt6/src/virtual_folders.cpp": "a682c109607758bf47390470d2bcbeb0", + "native/qt6/src/virtual_folders.h": "c7bc5d670ec3e3f2a993559d86b404fa", + "scripts/append_tasks.ps1": "1d7a7cc94078f21e3761aba79363b2aa", + "scripts/build-installer.ps1": "bfc61afe5c9a5dc4711a7b71eae6c0f1", + "scripts/build-windows.ps1": "30b5b6f6c581dbaba006cfed2fd4e041", + "scripts/convert-icon.ps1": "a7f74cc67ab7f699d7670d130d60984e", + "scripts/download-everything-sdk.ps1": "98c1f17ea1208ef9ec89d43d18d1b7a1", + "scripts/fetch-ffmpeg.ps1": "3c76b36c346b1d10c9c7d410fdd3f194", + "third_party/tlRender-src/sbuild-Release/Imath/src/Imath/share/ci/scripts/windows/install_boost.ps1": "270581fa3e3b0873b42185e247b84fa2", + "third_party/tlRender-src/sbuild-Release/Imath/src/Imath/share/ci/scripts/windows/install_cmake.ps1": "b6c622ae99923d676976df6f48c0e843", + "third_party/tlRender-src/sbuild-Release/Imath/src/Imath/share/ci/scripts/windows/install_python.ps1": "adee831aa797b3fe9b6f14c8e55cd0dc", + "third_party/tlRender-src/sbuild-Release/OTIO/src/OTIO/src/deps/Imath/share/ci/scripts/windows/install_boost.ps1": "270581fa3e3b0873b42185e247b84fa2", + "third_party/tlRender-src/sbuild-Release/OTIO/src/OTIO/src/deps/Imath/share/ci/scripts/windows/install_cmake.ps1": "b6c622ae99923d676976df6f48c0e843", + "third_party/tlRender-src/sbuild-Release/OTIO/src/OTIO/src/deps/Imath/share/ci/scripts/windows/install_python.ps1": "adee831aa797b3fe9b6f14c8e55cd0dc" + }, + "folder_hashes": { + "scripts": "6dcbca9bc002a969254b3a6767a6e7fa", + "third_party/tlRender-src/sbuild-Release/OTIO/src/OTIO/src/deps/Imath": "c8e65afd6a86517d0f51390293f143f0", + "third_party/tlRender-src/sbuild-Release/OTIO/src/OTIO/src/deps": "c8e65afd6a86517d0f51390293f143f0", + "third_party/tlRender-src/sbuild-Release/OTIO": "c8e65afd6a86517d0f51390293f143f0", + "third_party/tlRender-src/sbuild-Release/OTIO/src/OTIO/src": "c8e65afd6a86517d0f51390293f143f0", + "third_party/tlRender-src/sbuild-Release/Imath": "24eccb257689b8c86caa4257b6c96ea5", + "third_party/tlRender-src/sbuild-Release/Imath/src/Imath/share/ci/scripts": "24eccb257689b8c86caa4257b6c96ea5", + "third_party/tlRender-src/sbuild-Release/Imath/src/Imath/share/ci": "24eccb257689b8c86caa4257b6c96ea5", + "third_party/tlRender-src/sbuild-Release": "4a2af57ce18c6f6b03b17b253a7bb265", + "native/qt6/src": "e9d489cf280cb885d1dc98a6882c08ac", + "third_party": "4a2af57ce18c6f6b03b17b253a7bb265", + "third_party/tlRender-src/sbuild-Release/Imath/src/Imath/share": "24eccb257689b8c86caa4257b6c96ea5", + "third_party/tlRender-src/sbuild-Release/Imath/src": "24eccb257689b8c86caa4257b6c96ea5", + "native": "9bc8ba599eb08eb5095a94fa80c564fd", + "third_party/tlRender-src": "4a2af57ce18c6f6b03b17b253a7bb265", + "third_party/tlRender-src/sbuild-Release/OTIO/src/OTIO/src/deps/Imath/share": "c8e65afd6a86517d0f51390293f143f0", + "native/qt6/src/media": "691628f29b627f4428c29c6aa40cf996", + "third_party/tlRender-src/sbuild-Release/OTIO/src": "c8e65afd6a86517d0f51390293f143f0", + "third_party/tlRender-src/sbuild-Release/Imath/src/Imath/share/ci/scripts/windows": "24eccb257689b8c86caa4257b6c96ea5", + "third_party/tlRender-src/sbuild-Release/OTIO/src/OTIO/src/deps/Imath/share/ci": "c8e65afd6a86517d0f51390293f143f0", + "third_party/tlRender-src/sbuild-Release/OTIO/src/OTIO/src/deps/Imath/share/ci/scripts/windows": "c8e65afd6a86517d0f51390293f143f0", + "third_party/tlRender-src/sbuild-Release/Imath/src/Imath": "24eccb257689b8c86caa4257b6c96ea5", + "native/qt6": "9bc8ba599eb08eb5095a94fa80c564fd", + ".": "", + "third_party/tlRender-src/sbuild-Release/OTIO/src/OTIO/src/deps/Imath/share/ci/scripts": "c8e65afd6a86517d0f51390293f143f0", + "third_party/tlRender-src/sbuild-Release/OTIO/src/OTIO": "c8e65afd6a86517d0f51390293f143f0" + } +} \ No newline at end of file diff --git a/AGENTS.md b/AGENTS.md new file mode 100644 index 00000000..b44bb9c0 --- /dev/null +++ b/AGENTS.md @@ -0,0 +1,90 @@ +## Repository Map + +A full codemap is available at `codemap.md` in the project root. + +Before working on any task, read `codemap.md` to understand: +- Project architecture and entry points +- Directory responsibilities and design patterns +- Data flow and integration points between modules + +For deep work on a specific folder, also read that folder's `codemap.md`. + +## General Agent Workflow + +For all non-trivial implementation, debugging, refactor, and validation tasks, follow this workflow: + +0. Read `AGENTS.md` first. + - Before starting any thinking, planning, subagent workflow, implementation exploration, code change, or validation step, read `AGENTS.md`. + - Treat `AGENTS.md` as the first mandatory workflow gate for every task in this project. + - Do not begin any work until the current `AGENTS.md` instructions have been reviewed. + +1. Plan the work before editing code. + - State the objective. + - Identify the relevant pipeline or workflow end to end. + - Identify gatekeeping events that must pass before later steps are meaningful. + +2. Show evidence for the plan. + - Read the relevant codemaps and code paths first. + - Trace the actual runtime or build path instead of assuming behavior. + - Base decisions on present code and observed evidence, not speculation. + +3. Create and maintain explicit tasks. + - Break the work into concrete steps. + - Re-prioritize tasks when a blocker invalidates the current path. + - Treat major gatekeeping blockers as higher priority than downstream fixes. + +4. Review the plan and tasks before implementation. + - Confirm the planned fix matches the actual pipeline. + - Confirm the expected outcome is tied to concrete evidence. + - If evidence is weak or indirect, continue investigation instead of editing code. + +5. Verify preconditions before making code changes. + - If the build, configure, runtime, or dependency state prevents meaningful validation, fix that blocker first. + - Do not continue speculative feature fixes when a gating blocker prevents review and verification. + +6. Implement the smallest justified change. + - Prefer minimal, targeted edits. + - Avoid single-line or localized fixes that are not checked against the full affected pipeline. + - Consider all affected occurrences, call paths, and feature interactions before keeping a change. + +7. Review the implementation after each fix attempt. + - Review not only the edited lines, but each affected path and related stage in the pipeline. + - Check whether the change impacts other features, workflows, or assumptions. + - Verify the change still aligns with the final user-facing goal. + +8. Verify results with evidence. + - Build, run, test, or otherwise validate the change whenever the task requires verification. + - If verification is blocked, treat that blocker as the active task. + - Do not present unverified speculative fixes as completed work. + +9. Handle fallout immediately. + - If a fix reveals blockers, broken builds, or regressions in other features, address those before considering the work done. + - If the change does not produce a concrete, reviewable improvement, revert it. + - Do not leave dead, speculative, or ineffective code in the codebase. + +10. Close only after end-goal review. + - Confirm the final result solves the intended problem. + - Confirm no known affected feature remains broken because of the fix. + - Summarize the evidence used, the validations performed, and any remaining blockers. + +## Behavioral Rules + +- Never assume anything. +- Treat all user-provided paths, constraints, and scope boundaries as authoritative unless the user explicitly revises them. +- If a required fact, path, environment detail, or workflow condition is unknown, stop and ask or inspect only the exact user-provided scope needed to answer it. +- Do not speculate on fixes without concrete and presentable evidence. +- Do not keep code changes that cannot be justified against the traced pipeline. +- Do not ignore build or runtime gatekeepers in favor of downstream fixes. +- Revert unverified or ineffective changes instead of leaving them in place. +- Treat review and verification as required parts of implementation, not optional follow-up steps. + +## Filesystem Safety Rules + +- The project folder is the only writable scope. For this repository, that means files and folders under the repository root only. +- Never create, modify, delete, move, rename, export, copy, or overwrite any file or folder outside the project folder unless the user explicitly authorizes that exact path and action in the current session. +- Never use home-directory, mounted-drive, removable-drive, desktop, downloads, appdata, system temp, or other external filesystem locations as implicit defaults for writes. +- Treat all paths outside the project folder as read-only by default, even if the environment technically allows writing. +- Never generate fixtures, temp files, caches, logs, databases, exports, or test artifacts outside the project folder. +- If existing code points to writable paths outside the project folder, prefer changing it to a project-local path instead of using the external path. +- If a task requires writing outside the project folder and the user has not explicitly approved it, stop and ask. +- All agents and subagents must follow the same filesystem restrictions. diff --git a/CHANGELOG.md b/CHANGELOG.md index f67e2377..7917f6b3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -20,6 +20,24 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Note This file now includes the 1.8.0 release notes below. Unreleased will contain future work. +## [1.8.6] - 2026-04-21 + +### Added +- **Fedora 43 KDE Wayland Linux port baseline** with validated AppImage packaging +- **FFmpeg MOV playback backend** for Linux/Wayland raster preview fallback (`FFmpegMovPlayer`) +- **Async reverse-playback seek overlap** to eliminate MP4/MOV backward playback choppiness on Wayland +- **Linux AppImage packaging scripts** (`scripts/build-linux-appimage.sh`, `scripts/package-appimage.sh`) +- **Backward frame buffer** in `FFmpegMovPlayer` for smooth step-backward and reverse playback + +### Changed +- **Transport button layout**: loop mode and playback rate combos merged into the audio controls row, centered transport buttons +- **Test harness assertions**: re-tightened to verify both frame counter and raster fingerprint changes on step-backward/reverse + +### Fixed +- **MOV backward buffer oscillation** after forward seek on Wayland +- **MP4/MOV reverse playback choppiness** via async seek overlap with the display window +- **Annotation overlay persistence** on Wayland video preview (live annotation overlays preserved) + ## [1.8.0] - 2026-01-13 ### Added diff --git a/HANDOFF.md b/HANDOFF.md new file mode 100644 index 00000000..8fa4d1bd --- /dev/null +++ b/HANDOFF.md @@ -0,0 +1,445 @@ +# HANDOFF + +## Purpose +This handoff is for the next agent/harness to continue the project without rereading large parts of the repo or repeating the same failed investigation loops. + +The user explicitly asked for: +- minimal rereads +- no looping on the same files +- bounded patch/build/test cycles only +- use of the exact external media fixture path already provided +- no broad filesystem searches outside the explicitly provided scope + +Current date context from the session: `2026-04-18`. + +--- + +## Critical workflow constraints + +The next agent must follow these rules immediately: + +1. Read `AGENTS.md` first at task start. +2. Read `.agent-workflow.md` at task start. +3. Do **not** broad-search storage paths. The only approved fixture path used in this playback investigation is: + - `/mnt/ssd2/Tests/Videos/` +4. Avoid repeated rereads of the same files unless a build/test failure points to them. +5. Every cycle must end in one of: + - code patch + - build/test result + - blocker with exact evidence +6. Revert failed fixes immediately. +7. Use subagents for research/inspection as much as possible. Main-thread work should be patch/build/report. +8. The user specifically complained about loops and repeated reading. Do not repeat that behavior. + +The user also created a persistent execution contract file: +- `.agent-workflow.md` + +--- + +## High-level project status + +### Verified passing from user runtime checks +These were manually verified by the user in the built app: + +- Annotation on video: pass +- Annotation export: pass +- Thumbnails/scrubbing: pass +- Project Manager: pass +- Batch Rename: pass +- Bundled converters: pass +- `MEGY_comp_4K_LL180_ap0_r709g24_v015.mov`: pass + +### Remaining failing runtime cases +The remaining practical blockers are now narrowed to **video playback only**: + +1. `Atmosphere-019.mov` + - fail + - user reported it does not play correctly + - later verification said side preview is also not working, same as full preview + +2. `Shot_0140_v005.mov` + - opens/plays but playback is still very choppy + - user estimated roughly 7–15 fps + - this is not acceptable + +### Phases effectively verified/passed by user +These still need planning/state updates, but user runtime verification says they are practically good enough: + +- Phase 3 (annotation-related runtime checks): mostly passed +- Phase 4: thumbnails/scrubbing passed +- Phase 6: Project Manager passed; Batch Rename passed after fix +- Phase 7: bundled converters passed + +### Phases still open beyond playback +- Phase 8: AppImage build/runtime verification not completed +- Phase 9: docs not completed + +--- + +## Planning-layer status +Planning files were updated earlier in the session to reset Phase 03 around the real fullscreen/annotation defects. The exact planning docs involved were: + +- `.planning/REQUIREMENTS.md` +- `.planning/ROADMAP.md` +- `.planning/STATE.md` +- `.planning/phases/03-preserve-annotation-on-video-and-sequences/03-01-PLAN.md` + +Current practical state from user verification: +- Batch Rename: pass +- Annotation: pass +- Export: pass +- Thumbnails/scrubbing: pass +- Bundled converters: pass +- Remaining blocker: MOV playback + +The next agent should align planning state only after playback is resolved. + +--- + +## What was fixed earlier and verified by the user + +These fixes were implemented earlier in the session and are **not** the current blocker: + +### Preview / annotation / UI fixes +- Wrong center overlay / nav arrows issue fixed +- Select tool state bug fixed +- Annotation geometry/release update fixes added +- First annotation-session initialization fixed +- Timeline reset after switching to shorter media fixed +- Controls/zoom bug fixed +- Controls set to always visible +- Annotation on video now works +- Annotation export now works + +Key source areas touched earlier included: +- `native/qt6/src/preview_overlay.cpp` +- `native/qt6/src/preview_overlay.h` +- `native/qt6/src/annotation_layer.cpp` +- `native/qt6/src/annotation_items.h` +- `native/qt6/src/annotation_items.cpp` + +These are not the current investigation target unless a new regression appears. + +### Batch Rename fix +Batch Rename was failing earlier and was later reported by the user as passing. + +The fix was applied in: +- `native/qt6/src/bulk_rename_dialog.cpp` + +Intent of the fix: +- repair broken file-rename execution path +- add destination-path conflict detection in preview so collisions are caught before apply + +User later verified: +- Batch Rename: pass + +Do not reopen Batch Rename unless the user reports a new failure. + +--- + +## Playback investigation summary + +### Exact external fixture root to use +Only this fixture folder should be used for playback validation: +- `/mnt/ssd2/Tests/Videos/` + +Representative files used during the session: +- `/mnt/ssd2/Tests/Videos/Atmosphere-019.mov` +- `/mnt/ssd2/Tests/Videos/Blood_Hit_03.mov` +- `/mnt/ssd2/Tests/Videos/MEGY_comp_4K_LL180_ap0_r709g24_v015.mov` +- `/mnt/ssd2/Tests/Videos/Sunshine 10sec Full Comp v3.mov` +- `/mnt/ssd2/Tests/Videos/Shot_0140_v005.mov` + +### Important codec notes already observed in the session +From `ffprobe` runs earlier in the session: +- `Blood_Hit_03.mov` + - codec: png + - pixel format: rgba + - likely alpha-heavy stress case +- `Sunshine 10sec Full Comp v3.mov` + - codec: prores + - pixel format: yuv422p10le + - 25 fps validation target +- `Atmosphere-019.mov` + - codec: prores + - pixel format: yuv422p10le + - large/high-resolution stress case +- `MEGY_comp_4K_LL180_ap0_r709g24_v015.mov` + - codec: hevc + - pixel format: yuv420p + - now passes in user runtime + +### Playback harness implemented +A real playback validation harness was added and is important context for the next agent. + +Files added/updated for harnessing: +- `native/qt6/tests/test_tlrender_playback_harness.cpp` +- `native/qt6/tests/CMakeLists.txt` +- `native/qt6/src/media/tlrender_viewport.h` +- `native/qt6/src/media/tlrender_viewport.cpp` + +Harness purpose: +- measure viewer-side rendered frame progression +- avoid relying only on timeline/play/pause state +- validate real playback behavior on the external MOV fixtures + +### Important harness findings from earlier passes +These findings drove the later playback investigation: + +1. The initial harness version was invalid because it failed on files the app could play. +2. The corrected harness later produced useful results. +3. For `Sunshine 10sec Full Comp v3.mov`, viewer-side distinct frame cadence under the Wayland raster path was below target. +4. Telemetry added earlier showed repeated fallback extraction and unsupported cached image type handling on some paths. +5. `MEGY_comp_4K_LL180_ap0_r709g24_v015.mov` eventually became a pass in user runtime. +6. `Atmosphere-019.mov` and `Shot_0140_v005.mov` remained the real blockers. + +### Important tlRender image-type insight already established +One earlier investigation identified `lastCachedImageType = 26` and mapped it to: +- `ftk::ImageType::YUV_422P_U16` + +This was relevant for ProRes 10-bit fallback/conversion work. + +### Current conclusion after user feedback +Despite various fallback/conversion experiments, the only files still materially blocking the product are: +- `Atmosphere-019.mov` +- `Shot_0140_v005.mov` + +The rest of the playback list is either passing or no longer the priority. + +--- + +## Very important architectural conclusion from the late-session debugging + +The user forced a crucial clarification that should guide the next agent: + +### mpv is intended for video, but is not initializing in the current runtime +User-provided runtime log showed: +- `useMpv=1` +- `mpvAvailable=0` +- repeated message: `Non-C locale detected. This is not supported. Call 'setlocale(LC_NUMERIC, "C");' in your code.` + +This means: +- video files are intended to use mpv when available +- but mpv is failing to initialize in the current runtime +- therefore playback falls back to the non-mpv tlRender path + +### Consequence +For the user’s current runtime: +- the failing MOV playback behavior is currently happening on the **tlRender fallback path**, not on a working mpv path +- changing mpv rendering behavior was the wrong priority while `mpvAvailable=0` + +### User’s final product direction +The user explicitly concluded that continuing to salvage the broken/unreliable tlRender MOV path is likely a waste of effort and pushed toward: +- finding a Wayland-capable alternative for MOV playback across important codec groups +- or at minimum stopping blind attempts to fix generic tlRender behavior without codec-aware handling + +The user also argued correctly that not all MOV codecs should share the same playback settings. + +### Codec-group requirement from the user +The user explicitly requested codec-aware handling such as: +- interframe compressed codecs +- ProRes / editing mezzanine / 10-bit YUV422 +- alpha-heavy codecs / PNG / RGBA / ProRes 4444-style content +- high-bandwidth / uncompressed-like content +- possibly different handling for audio-heavy files + +That requirement should be carried forward. + +--- + +## What code was touched during playback work + +### Files touched during various playback attempts +These were part of the playback investigation and may contain partial/experimental changes: +- `native/qt6/src/media/tlrender_player.cpp` +- `native/qt6/src/media/tlrender_player.h` +- `native/qt6/src/media/tlrender_viewport.cpp` +- `native/qt6/src/media/tlrender_viewport.h` +- `native/qt6/src/media/mpv_player.cpp` +- `native/qt6/src/media/mpv_viewport.cpp` +- `native/qt6/tests/test_tlrender_playback_harness.cpp` + +### Important caution +Many playback attempts were made, some were reverted, some were ineffective, and some were superseded. +The next agent should not assume every playback-related modification in the tree is valuable just because it exists. + +The safe interpretation is: +- harness work is useful and should likely be kept +- user-verified passes are trustworthy +- mpv-side tweaks made while `mpvAvailable=0` are low-confidence and likely irrelevant until mpv availability is actually fixed +- tlRender fallback tuning was partially informative but did not solve the core remaining blockers + +--- + +## Specific ineffective or superseded directions +The next agent should avoid repeating these mistakes without new evidence: + +1. **Patching mpv render/logging behavior while mpv is unavailable** + - This did not materially fix `Shot_0140_v005.mov` + - Some mpv-only changes were explicitly reverted after failing validation + +2. **Blind tlRender fallback micro-fixes without codec-aware grouping** + - Some experiments improved specific cases but did not solve the real remaining blockers + +3. **Repeated reread loops** + - This consumed a huge amount of time and user trust + - The user explicitly demanded that future work avoid this + +4. **Assuming all MOV failures are the same** + - User made it clear different MOV codec families need different handling + +--- + +## Current verified runtime matrix + +### Pass +- `MEGY_comp_4K_LL180_ap0_r709g24_v015.mov` +- Annotation on video +- Annotation export +- Thumbnails/scrubbing +- Project Manager +- Batch Rename +- Bundled converters + +### Fail +- `Atmosphere-019.mov` +- `Shot_0140_v005.mov` (still too choppy) + +### Not current priority +- `Blood_Hit_03.mov` +- `Sunshine 10sec Full Comp v3.mov` + +These were important in earlier harness work but are not the user’s current blocking cases. + +--- + +## Commands used successfully in the session + +### Build app +```bash +cmake --build build-linux-recovery-native-qt6 --target kassetmanagerqt -j 2 +``` + +### Run app +```bash +./build-linux-recovery-native-qt6/kassetmanagerqt +``` + +### Build harness target +```bash +cmake --build build-linux-recovery-native-qt6 --target test_tlrender_playback_harness -j 2 +``` + +### Run harness from build dir +```bash +./tests/test_tlrender_playback_harness +``` + +--- + +## Most important user directives to preserve + +These were not preferences; they were explicit behavioral corrections from the user. + +1. **Do not assume anything.** +2. **Respect explicit paths and scope boundaries.** +3. **Use subagents for research/inspection as much as possible.** +4. **Do not reread files repeatedly.** +5. **Do not broad-search external storage.** Only use `/mnt/ssd2/Tests/Videos/` for fixtures. +6. **One bounded milestone at a time.** +7. **Patch / build / test / revert** is preferred over analysis loops. +8. **If a fix fails, revert it rather than leaving speculative code hanging.** +9. **The next real engineering focus should be MOV playback only** until the remaining blockers are solved. +10. The user explicitly became frustrated that too much time was spent rereading and not enough time spent implementing. + +--- + +## Best next step for the next agent + +Do **not** restart from broad architecture reading. + +### Recommended next milestone +Focus only on the remaining playback blockers: +1. `Atmosphere-019.mov` +2. `Shot_0140_v005.mov` + +### Recommended approach +Given the final user feedback, the next agent should likely: + +1. confirm whether mpv initialization is still failing **after** the locale fix now present in `native/qt6/src/media/mpv_player.cpp` +2. if mpv still does not initialize, stop spending time on mpv behavior tuning and treat the product as effectively running on the tlRender fallback path +3. decide whether to: + - make tlRender codec-group aware in a more deliberate way, or + - introduce a different Wayland-capable playback strategy for important MOV codec groups +4. keep validation strictly limited to: + - `/mnt/ssd2/Tests/Videos/Atmosphere-019.mov` + - `/mnt/ssd2/Tests/Videos/Shot_0140_v005.mov` + +### If using the harness again +Use the existing playback harness, but keep fixture coverage focused on the actual failing files rather than the earlier broader set. + +--- + +## Files the next agent is most likely to need + +### Workflow / state +- `AGENTS.md` +- `.agent-workflow.md` +- `HANDOFF.md` + +### Planning +- `.planning/REQUIREMENTS.md` +- `.planning/ROADMAP.md` +- `.planning/STATE.md` +- `.planning/phases/03-preserve-annotation-on-video-and-sequences/03-01-PLAN.md` + +### Verified feature areas +- `native/qt6/src/preview_overlay.cpp` +- `native/qt6/src/preview_overlay.h` +- `native/qt6/src/annotation_layer.cpp` +- `native/qt6/src/annotation_items.h` +- `native/qt6/src/annotation_items.cpp` +- `native/qt6/src/bulk_rename_dialog.cpp` + +### Playback core +- `native/qt6/src/media/tlrender_player.cpp` +- `native/qt6/src/media/tlrender_player.h` +- `native/qt6/src/media/tlrender_viewport.cpp` +- `native/qt6/src/media/tlrender_viewport.h` +- `native/qt6/src/media/mpv_player.cpp` +- `native/qt6/src/media/mpv_player.h` +- `native/qt6/src/media/mpv_viewport.cpp` +- `native/qt6/src/media/mpv_viewport.h` +- `native/qt6/src/media/codemap.md` +- `native/qt6/tests/test_tlrender_playback_harness.cpp` +- `native/qt6/tests/CMakeLists.txt` + +### File classification / preview routing +- `native/qt6/src/file_utils.cpp` +- `native/qt6/src/live_preview_manager.cpp` +- `native/qt6/src/video_metadata.h` +- `native/qt6/src/video_metadata.cpp` + +### Third-party type reference used earlier +- `third_party/tlRender-install-Release/include/ftk/Core/Image.h` + +--- + +## Final concise state for the next agent + +### Good +- App builds locally +- Annotation path works +- Export works +- Scrubbing/thumbnails work +- Project Manager works +- Batch Rename works +- Bundled converters work +- MEGY playback works + +### Bad +- Atmosphere playback still fails +- Shot_0140 playback still too choppy + +### Main lesson from this session +Do not waste time on repeated rereads or on mpv tuning unless mpv is proven available at runtime. The remaining work must be tight, codec-aware, and validated only against the real failing files. diff --git a/README.md b/README.md index b20084e8..46b0573e 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,16 @@ # KAsset Manager -**Professional asset management software for Windows** - Organize, tag, rate, and manage digital assets including images (PNG, JPG, TIF, EXR, IFF, PSD), videos (MOV, MP4, AVI), and audio (MP3) files. +**Professional asset management software for Windows, with a validated Fedora 43 KDE Wayland baseline** - Organize, tag, rate, and manage digital assets including images (PNG, JPG, TIF, EXR, IFF, PSD), videos (MOV, MP4, AVI), and audio (MP3) files. ## Overview -KAsset Manager is a native Windows desktop application built with Qt 6 that provides a professional-grade solution for managing digital media assets. Whether you're a VFX artist, photographer, video editor, or content creator, KAsset Manager helps you organize, find, and preview your files efficiently. +KAsset Manager is a native Qt 6 desktop application that provides a professional-grade solution for managing digital media assets. Whether you're a VFX artist, photographer, video editor, or content creator, KAsset Manager helps you organize, find, and preview your files efficiently. + +Current platform status: + +- Windows remains the primary packaged platform +- Fedora 43 KDE Wayland is the current validated Linux baseline +- Linux packaging currently targets AppImage first ### Key Features @@ -112,6 +118,7 @@ powershell -NoProfile -ExecutionPolicy Bypass -File .\scripts\build-windows.ps1 ### Installation - [docs/INSTALL.md](docs/INSTALL.md) — Build and installation instructions +- [docs/linux-wayland-validation.md](docs/linux-wayland-validation.md) — Fedora 43 Wayland validation notes, playback corpus, and AppImage status ### For Developers @@ -161,7 +168,7 @@ SQLite database stored in persistent user data location (see [docs/INSTALL.md](d - Give the decoder a moment to cache the first frame (large EXR/ProRes files can take a second). - Check `debug.log` for `[LivePreview]` warnings about codecs or permissions. -- Ensure the bundled tlRender runtime DLLs are present in the portable/installer build (tlRender/ftk/FFmpeg DLLs alongside the executable). +- Ensure the bundled tlRender/runtime libraries are present in the packaged build (Windows portable/installer or Linux AppImage/AppDir runtime layout). **Import not working:** @@ -197,7 +204,7 @@ SQLite database stored in persistent user data location (see [docs/INSTALL.md](d ## System Requirements -- **OS**: Windows 10/11 (64-bit) +- **OS**: Windows 10/11 (64-bit), Fedora 43 KDE Wayland validated baseline - **RAM**: 4GB minimum, 8GB+ recommended - **Disk**: 500MB for application plus space for cached previews - **Display**: 1920x1080 or higher recommended diff --git a/Vouli_Intro and 1975 v001_annotation_0851.png b/Vouli_Intro and 1975 v001_annotation_0851.png deleted file mode 100644 index 12014b67..00000000 Binary files a/Vouli_Intro and 1975 v001_annotation_0851.png and /dev/null differ diff --git a/build-linux-make/CMakeCache.txt b/build-linux-make/CMakeCache.txt new file mode 100644 index 00000000..2046d489 --- /dev/null +++ b/build-linux-make/CMakeCache.txt @@ -0,0 +1,376 @@ +# This is the CMakeCache file. +# For build in directory: /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux-make +# It was generated by CMake: /usr/bin/cmake +# You can edit this file to change values found and used by cmake. +# If you do not want to change any of the values, simply exit the editor. +# If you do want to change a value, simply edit, save, and exit the editor. +# The syntax for the file is as follows: +# KEY:TYPE=VALUE +# KEY is the name of a variable in the cache. +# TYPE is a hint to GUIs for the type of VALUE, DO NOT EDIT TYPE!. +# VALUE is the current value for the KEY. + +######################## +# EXTERNAL cache entries +######################## + +//Build main application +BUILD_APP:BOOL=ON + +//No help, variable specified on the command line. +BUILD_TESTS:UNINITIALIZED=ON + +//Path to a program. +CMAKE_ADDR2LINE:FILEPATH=/usr/bin/addr2line + +//Path to a program. +CMAKE_AR:FILEPATH=/usr/bin/ar + +//Choose the type of build, options are: None Debug Release RelWithDebInfo +// MinSizeRel ... +CMAKE_BUILD_TYPE:STRING=Release + +//Enable/Disable color output during build. +CMAKE_COLOR_MAKEFILE:BOOL=ON + +//CXX compiler +CMAKE_CXX_COMPILER:FILEPATH=/usr/bin/c++ + +//A wrapper around 'ar' adding the appropriate '--plugin' option +// for the GCC compiler +CMAKE_CXX_COMPILER_AR:FILEPATH=/usr/bin/gcc-ar + +//A wrapper around 'ranlib' adding the appropriate '--plugin' option +// for the GCC compiler +CMAKE_CXX_COMPILER_RANLIB:FILEPATH=/usr/bin/gcc-ranlib + +//Flags used by the CXX compiler during all build types. +CMAKE_CXX_FLAGS:STRING= + +//Flags used by the CXX compiler during DEBUG builds. +CMAKE_CXX_FLAGS_DEBUG:STRING=-g + +//Flags used by the CXX compiler during MINSIZEREL builds. +CMAKE_CXX_FLAGS_MINSIZEREL:STRING=-Os -DNDEBUG + +//Flags used by the CXX compiler during RELEASE builds. +CMAKE_CXX_FLAGS_RELEASE:STRING=-O3 -DNDEBUG + +//Flags used by the CXX compiler during RELWITHDEBINFO builds. +CMAKE_CXX_FLAGS_RELWITHDEBINFO:STRING=-O2 -g -DNDEBUG + +//Path to a program. +CMAKE_DLLTOOL:FILEPATH=CMAKE_DLLTOOL-NOTFOUND + +//Flags used by the linker during all build types. +CMAKE_EXE_LINKER_FLAGS:STRING= + +//Flags used by the linker during DEBUG builds. +CMAKE_EXE_LINKER_FLAGS_DEBUG:STRING= + +//Flags used by the linker during MINSIZEREL builds. +CMAKE_EXE_LINKER_FLAGS_MINSIZEREL:STRING= + +//Flags used by the linker during RELEASE builds. +CMAKE_EXE_LINKER_FLAGS_RELEASE:STRING= + +//Flags used by the linker during RELWITHDEBINFO builds. +CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO:STRING= + +//Enable/Disable output of compile commands during generation. +CMAKE_EXPORT_COMPILE_COMMANDS:BOOL= + +//Value Computed by CMake. +CMAKE_FIND_PACKAGE_REDIRECTS_DIR:STATIC=/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux-make/CMakeFiles/pkgRedirects + +//Install path prefix, prepended onto install directories. +CMAKE_INSTALL_PREFIX:PATH=/usr/local + +//Path to a program. +CMAKE_LINKER:FILEPATH=/usr/bin/ld + +//Path to a program. +CMAKE_MAKE_PROGRAM:FILEPATH=/usr/bin/gmake + +//Flags used by the linker during the creation of modules during +// all build types. +CMAKE_MODULE_LINKER_FLAGS:STRING= + +//Flags used by the linker during the creation of modules during +// DEBUG builds. +CMAKE_MODULE_LINKER_FLAGS_DEBUG:STRING= + +//Flags used by the linker during the creation of modules during +// MINSIZEREL builds. +CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL:STRING= + +//Flags used by the linker during the creation of modules during +// RELEASE builds. +CMAKE_MODULE_LINKER_FLAGS_RELEASE:STRING= + +//Flags used by the linker during the creation of modules during +// RELWITHDEBINFO builds. +CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO:STRING= + +//Path to a program. +CMAKE_NM:FILEPATH=/usr/bin/nm + +//Path to a program. +CMAKE_OBJCOPY:FILEPATH=/usr/bin/objcopy + +//Path to a program. +CMAKE_OBJDUMP:FILEPATH=/usr/bin/objdump + +//No help, variable specified on the command line. +CMAKE_PREFIX_PATH:UNINITIALIZED=/usr/lib64/qt6 + +//Value Computed by CMake +CMAKE_PROJECT_DESCRIPTION:STATIC= + +//Value Computed by CMake +CMAKE_PROJECT_HOMEPAGE_URL:STATIC= + +//Value Computed by CMake +CMAKE_PROJECT_NAME:STATIC=KAssetManagerQt + +//Value Computed by CMake +CMAKE_PROJECT_VERSION:STATIC=1.8.5 + +//Value Computed by CMake +CMAKE_PROJECT_VERSION_MAJOR:STATIC=1 + +//Value Computed by CMake +CMAKE_PROJECT_VERSION_MINOR:STATIC=8 + +//Value Computed by CMake +CMAKE_PROJECT_VERSION_PATCH:STATIC=5 + +//Value Computed by CMake +CMAKE_PROJECT_VERSION_TWEAK:STATIC= + +//Path to a program. +CMAKE_RANLIB:FILEPATH=/usr/bin/ranlib + +//Path to a program. +CMAKE_READELF:FILEPATH=/usr/bin/readelf + +//Flags used by the linker during the creation of shared libraries +// during all build types. +CMAKE_SHARED_LINKER_FLAGS:STRING= + +//Flags used by the linker during the creation of shared libraries +// during DEBUG builds. +CMAKE_SHARED_LINKER_FLAGS_DEBUG:STRING= + +//Flags used by the linker during the creation of shared libraries +// during MINSIZEREL builds. +CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL:STRING= + +//Flags used by the linker during the creation of shared libraries +// during RELEASE builds. +CMAKE_SHARED_LINKER_FLAGS_RELEASE:STRING= + +//Flags used by the linker during the creation of shared libraries +// during RELWITHDEBINFO builds. +CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO:STRING= + +//If set, runtime paths are not added when installing shared libraries, +// but are added when building. +CMAKE_SKIP_INSTALL_RPATH:BOOL=NO + +//If set, runtime paths are not added when using shared libraries. +CMAKE_SKIP_RPATH:BOOL=NO + +//Flags used by the linker during the creation of static libraries +// during all build types. +CMAKE_STATIC_LINKER_FLAGS:STRING= + +//Flags used by the linker during the creation of static libraries +// during DEBUG builds. +CMAKE_STATIC_LINKER_FLAGS_DEBUG:STRING= + +//Flags used by the linker during the creation of static libraries +// during MINSIZEREL builds. +CMAKE_STATIC_LINKER_FLAGS_MINSIZEREL:STRING= + +//Flags used by the linker during the creation of static libraries +// during RELEASE builds. +CMAKE_STATIC_LINKER_FLAGS_RELEASE:STRING= + +//Flags used by the linker during the creation of static libraries +// during RELWITHDEBINFO builds. +CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO:STRING= + +//Path to a program. +CMAKE_STRIP:FILEPATH=/usr/bin/strip + +//Path to a program. +CMAKE_TAPI:FILEPATH=CMAKE_TAPI-NOTFOUND + +//If this value is on, makefiles will be generated without the +// .SILENT directive, and all commands will be echoed to the console +// during the make. This is useful for debugging only. With Visual +// Studio IDE projects all commands are done without /nologo. +CMAKE_VERBOSE_MAKEFILE:BOOL=FALSE + +//Enable AddressSanitizer (Clang/GCC only) +ENABLE_ASAN:BOOL=OFF + +//Enable clang-tidy static analysis +ENABLE_CLANG_TIDY:BOOL=OFF + +//Enable code coverage flags (GCC/Clang only) +ENABLE_COVERAGE:BOOL=OFF + +//Enable UndefinedBehaviorSanitizer (Clang/GCC only) +ENABLE_UBSAN:BOOL=OFF + +//Value Computed by CMake +KAssetManagerQt_BINARY_DIR:STATIC=/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux-make + +//Value Computed by CMake +KAssetManagerQt_IS_TOP_LEVEL:STATIC=ON + +//Value Computed by CMake +KAssetManagerQt_SOURCE_DIR:STATIC=/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6 + +//The directory containing a CMake configuration file for QT. +QT_DIR:PATH=QT_DIR-NOTFOUND + + +######################## +# INTERNAL cache entries +######################## + +//ADVANCED property for variable: CMAKE_ADDR2LINE +CMAKE_ADDR2LINE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_AR +CMAKE_AR-ADVANCED:INTERNAL=1 +//This is the directory where this CMakeCache.txt was created +CMAKE_CACHEFILE_DIR:INTERNAL=/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux-make +//Major version of cmake used to create the current loaded cache +CMAKE_CACHE_MAJOR_VERSION:INTERNAL=3 +//Minor version of cmake used to create the current loaded cache +CMAKE_CACHE_MINOR_VERSION:INTERNAL=31 +//Patch version of cmake used to create the current loaded cache +CMAKE_CACHE_PATCH_VERSION:INTERNAL=11 +//ADVANCED property for variable: CMAKE_COLOR_MAKEFILE +CMAKE_COLOR_MAKEFILE-ADVANCED:INTERNAL=1 +//Path to CMake executable. +CMAKE_COMMAND:INTERNAL=/usr/bin/cmake +//Path to cpack program executable. +CMAKE_CPACK_COMMAND:INTERNAL=/usr/bin/cpack +//Path to ctest program executable. +CMAKE_CTEST_COMMAND:INTERNAL=/usr/bin/ctest +//ADVANCED property for variable: CMAKE_CXX_COMPILER +CMAKE_CXX_COMPILER-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_CXX_COMPILER_AR +CMAKE_CXX_COMPILER_AR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_CXX_COMPILER_RANLIB +CMAKE_CXX_COMPILER_RANLIB-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_CXX_FLAGS +CMAKE_CXX_FLAGS-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_CXX_FLAGS_DEBUG +CMAKE_CXX_FLAGS_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_CXX_FLAGS_MINSIZEREL +CMAKE_CXX_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_CXX_FLAGS_RELEASE +CMAKE_CXX_FLAGS_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_CXX_FLAGS_RELWITHDEBINFO +CMAKE_CXX_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_DLLTOOL +CMAKE_DLLTOOL-ADVANCED:INTERNAL=1 +//Path to cache edit program executable. +CMAKE_EDIT_COMMAND:INTERNAL=/usr/bin/ccmake +//Executable file format +CMAKE_EXECUTABLE_FORMAT:INTERNAL=ELF +//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS +CMAKE_EXE_LINKER_FLAGS-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_DEBUG +CMAKE_EXE_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_MINSIZEREL +CMAKE_EXE_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_RELEASE +CMAKE_EXE_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO +CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_EXPORT_COMPILE_COMMANDS +CMAKE_EXPORT_COMPILE_COMMANDS-ADVANCED:INTERNAL=1 +//Name of external makefile project generator. +CMAKE_EXTRA_GENERATOR:INTERNAL= +//Name of generator. +CMAKE_GENERATOR:INTERNAL=Unix Makefiles +//Generator instance identifier. +CMAKE_GENERATOR_INSTANCE:INTERNAL= +//Name of generator platform. +CMAKE_GENERATOR_PLATFORM:INTERNAL= +//Name of generator toolset. +CMAKE_GENERATOR_TOOLSET:INTERNAL= +//Source directory with the top level CMakeLists.txt file for this +// project +CMAKE_HOME_DIRECTORY:INTERNAL=/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6 +//Install .so files without execute permission. +CMAKE_INSTALL_SO_NO_EXE:INTERNAL=0 +//ADVANCED property for variable: CMAKE_LINKER +CMAKE_LINKER-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_MAKE_PROGRAM +CMAKE_MAKE_PROGRAM-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS +CMAKE_MODULE_LINKER_FLAGS-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_DEBUG +CMAKE_MODULE_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL +CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_RELEASE +CMAKE_MODULE_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO +CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_NM +CMAKE_NM-ADVANCED:INTERNAL=1 +//number of local generators +CMAKE_NUMBER_OF_MAKEFILES:INTERNAL=1 +//ADVANCED property for variable: CMAKE_OBJCOPY +CMAKE_OBJCOPY-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_OBJDUMP +CMAKE_OBJDUMP-ADVANCED:INTERNAL=1 +//Platform information initialized +CMAKE_PLATFORM_INFO_INITIALIZED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_RANLIB +CMAKE_RANLIB-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_READELF +CMAKE_READELF-ADVANCED:INTERNAL=1 +//Path to CMake installation. +CMAKE_ROOT:INTERNAL=/usr/share/cmake +//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS +CMAKE_SHARED_LINKER_FLAGS-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_DEBUG +CMAKE_SHARED_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL +CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_RELEASE +CMAKE_SHARED_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO +CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_SKIP_INSTALL_RPATH +CMAKE_SKIP_INSTALL_RPATH-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_SKIP_RPATH +CMAKE_SKIP_RPATH-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS +CMAKE_STATIC_LINKER_FLAGS-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_DEBUG +CMAKE_STATIC_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_MINSIZEREL +CMAKE_STATIC_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_RELEASE +CMAKE_STATIC_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO +CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_STRIP +CMAKE_STRIP-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_TAPI +CMAKE_TAPI-ADVANCED:INTERNAL=1 +//uname command +CMAKE_UNAME:INTERNAL=/usr/bin/uname +//ADVANCED property for variable: CMAKE_VERBOSE_MAKEFILE +CMAKE_VERBOSE_MAKEFILE-ADVANCED:INTERNAL=1 + diff --git a/build-linux-make/CMakeFiles/3.31.11/CMakeCXXCompiler.cmake b/build-linux-make/CMakeFiles/3.31.11/CMakeCXXCompiler.cmake new file mode 100644 index 00000000..d0a7fa02 --- /dev/null +++ b/build-linux-make/CMakeFiles/3.31.11/CMakeCXXCompiler.cmake @@ -0,0 +1,107 @@ +set(CMAKE_CXX_COMPILER "/usr/bin/c++") +set(CMAKE_CXX_COMPILER_ARG1 "") +set(CMAKE_CXX_COMPILER_ID "GNU") +set(CMAKE_CXX_COMPILER_VERSION "15.2.1") +set(CMAKE_CXX_COMPILER_VERSION_INTERNAL "") +set(CMAKE_CXX_COMPILER_WRAPPER "") +set(CMAKE_CXX_STANDARD_COMPUTED_DEFAULT "17") +set(CMAKE_CXX_EXTENSIONS_COMPUTED_DEFAULT "ON") +set(CMAKE_CXX_STANDARD_LATEST "26") +set(CMAKE_CXX_COMPILE_FEATURES "cxx_std_98;cxx_template_template_parameters;cxx_std_11;cxx_alias_templates;cxx_alignas;cxx_alignof;cxx_attributes;cxx_auto_type;cxx_constexpr;cxx_decltype;cxx_decltype_incomplete_return_types;cxx_default_function_template_args;cxx_defaulted_functions;cxx_defaulted_move_initializers;cxx_delegating_constructors;cxx_deleted_functions;cxx_enum_forward_declarations;cxx_explicit_conversions;cxx_extended_friend_declarations;cxx_extern_templates;cxx_final;cxx_func_identifier;cxx_generalized_initializers;cxx_inheriting_constructors;cxx_inline_namespaces;cxx_lambdas;cxx_local_type_template_args;cxx_long_long_type;cxx_noexcept;cxx_nonstatic_member_init;cxx_nullptr;cxx_override;cxx_range_for;cxx_raw_string_literals;cxx_reference_qualified_functions;cxx_right_angle_brackets;cxx_rvalue_references;cxx_sizeof_member;cxx_static_assert;cxx_strong_enums;cxx_thread_local;cxx_trailing_return_types;cxx_unicode_literals;cxx_uniform_initialization;cxx_unrestricted_unions;cxx_user_literals;cxx_variadic_macros;cxx_variadic_templates;cxx_std_14;cxx_aggregate_default_initializers;cxx_attribute_deprecated;cxx_binary_literals;cxx_contextual_conversions;cxx_decltype_auto;cxx_digit_separators;cxx_generic_lambdas;cxx_lambda_init_captures;cxx_relaxed_constexpr;cxx_return_type_deduction;cxx_variable_templates;cxx_std_17;cxx_std_20;cxx_std_23;cxx_std_26") +set(CMAKE_CXX98_COMPILE_FEATURES "cxx_std_98;cxx_template_template_parameters") +set(CMAKE_CXX11_COMPILE_FEATURES "cxx_std_11;cxx_alias_templates;cxx_alignas;cxx_alignof;cxx_attributes;cxx_auto_type;cxx_constexpr;cxx_decltype;cxx_decltype_incomplete_return_types;cxx_default_function_template_args;cxx_defaulted_functions;cxx_defaulted_move_initializers;cxx_delegating_constructors;cxx_deleted_functions;cxx_enum_forward_declarations;cxx_explicit_conversions;cxx_extended_friend_declarations;cxx_extern_templates;cxx_final;cxx_func_identifier;cxx_generalized_initializers;cxx_inheriting_constructors;cxx_inline_namespaces;cxx_lambdas;cxx_local_type_template_args;cxx_long_long_type;cxx_noexcept;cxx_nonstatic_member_init;cxx_nullptr;cxx_override;cxx_range_for;cxx_raw_string_literals;cxx_reference_qualified_functions;cxx_right_angle_brackets;cxx_rvalue_references;cxx_sizeof_member;cxx_static_assert;cxx_strong_enums;cxx_thread_local;cxx_trailing_return_types;cxx_unicode_literals;cxx_uniform_initialization;cxx_unrestricted_unions;cxx_user_literals;cxx_variadic_macros;cxx_variadic_templates") +set(CMAKE_CXX14_COMPILE_FEATURES "cxx_std_14;cxx_aggregate_default_initializers;cxx_attribute_deprecated;cxx_binary_literals;cxx_contextual_conversions;cxx_decltype_auto;cxx_digit_separators;cxx_generic_lambdas;cxx_lambda_init_captures;cxx_relaxed_constexpr;cxx_return_type_deduction;cxx_variable_templates") +set(CMAKE_CXX17_COMPILE_FEATURES "cxx_std_17") +set(CMAKE_CXX20_COMPILE_FEATURES "cxx_std_20") +set(CMAKE_CXX23_COMPILE_FEATURES "cxx_std_23") +set(CMAKE_CXX26_COMPILE_FEATURES "cxx_std_26") + +set(CMAKE_CXX_PLATFORM_ID "Linux") +set(CMAKE_CXX_SIMULATE_ID "") +set(CMAKE_CXX_COMPILER_FRONTEND_VARIANT "GNU") +set(CMAKE_CXX_SIMULATE_VERSION "") + + + + +set(CMAKE_AR "/usr/bin/ar") +set(CMAKE_CXX_COMPILER_AR "/usr/bin/gcc-ar") +set(CMAKE_RANLIB "/usr/bin/ranlib") +set(CMAKE_CXX_COMPILER_RANLIB "/usr/bin/gcc-ranlib") +set(CMAKE_LINKER "/usr/bin/ld") +set(CMAKE_LINKER_LINK "") +set(CMAKE_LINKER_LLD "") +set(CMAKE_CXX_COMPILER_LINKER "/usr/bin/ld") +set(CMAKE_CXX_COMPILER_LINKER_ID "GNU") +set(CMAKE_CXX_COMPILER_LINKER_VERSION 2.45.1) +set(CMAKE_CXX_COMPILER_LINKER_FRONTEND_VARIANT GNU) +set(CMAKE_MT "") +set(CMAKE_TAPI "CMAKE_TAPI-NOTFOUND") +set(CMAKE_COMPILER_IS_GNUCXX 1) +set(CMAKE_CXX_COMPILER_LOADED 1) +set(CMAKE_CXX_COMPILER_WORKS TRUE) +set(CMAKE_CXX_ABI_COMPILED TRUE) + +set(CMAKE_CXX_COMPILER_ENV_VAR "CXX") + +set(CMAKE_CXX_COMPILER_ID_RUN 1) +set(CMAKE_CXX_SOURCE_FILE_EXTENSIONS C;M;c++;cc;cpp;cxx;m;mm;mpp;CPP;ixx;cppm;ccm;cxxm;c++m) +set(CMAKE_CXX_IGNORE_EXTENSIONS inl;h;hpp;HPP;H;o;O;obj;OBJ;def;DEF;rc;RC) + +foreach (lang IN ITEMS C OBJC OBJCXX) + if (CMAKE_${lang}_COMPILER_ID_RUN) + foreach(extension IN LISTS CMAKE_${lang}_SOURCE_FILE_EXTENSIONS) + list(REMOVE_ITEM CMAKE_CXX_SOURCE_FILE_EXTENSIONS ${extension}) + endforeach() + endif() +endforeach() + +set(CMAKE_CXX_LINKER_PREFERENCE 30) +set(CMAKE_CXX_LINKER_PREFERENCE_PROPAGATES 1) +set(CMAKE_CXX_LINKER_DEPFILE_SUPPORTED TRUE) +set(CMAKE_LINKER_PUSHPOP_STATE_SUPPORTED TRUE) +set(CMAKE_CXX_LINKER_PUSHPOP_STATE_SUPPORTED TRUE) + +# Save compiler ABI information. +set(CMAKE_CXX_SIZEOF_DATA_PTR "8") +set(CMAKE_CXX_COMPILER_ABI "ELF") +set(CMAKE_CXX_BYTE_ORDER "LITTLE_ENDIAN") +set(CMAKE_CXX_LIBRARY_ARCHITECTURE "") + +if(CMAKE_CXX_SIZEOF_DATA_PTR) + set(CMAKE_SIZEOF_VOID_P "${CMAKE_CXX_SIZEOF_DATA_PTR}") +endif() + +if(CMAKE_CXX_COMPILER_ABI) + set(CMAKE_INTERNAL_PLATFORM_ABI "${CMAKE_CXX_COMPILER_ABI}") +endif() + +if(CMAKE_CXX_LIBRARY_ARCHITECTURE) + set(CMAKE_LIBRARY_ARCHITECTURE "") +endif() + +set(CMAKE_CXX_CL_SHOWINCLUDES_PREFIX "") +if(CMAKE_CXX_CL_SHOWINCLUDES_PREFIX) + set(CMAKE_CL_SHOWINCLUDES_PREFIX "${CMAKE_CXX_CL_SHOWINCLUDES_PREFIX}") +endif() + + + + + +set(CMAKE_CXX_IMPLICIT_INCLUDE_DIRECTORIES "/usr/include/c++/15;/usr/include/c++/15/x86_64-redhat-linux;/usr/include/c++/15/backward;/usr/lib/gcc/x86_64-redhat-linux/15/include;/usr/local/include;/usr/include") +set(CMAKE_CXX_IMPLICIT_LINK_LIBRARIES "stdc++;m;gcc_s;gcc;c;gcc_s;gcc") +set(CMAKE_CXX_IMPLICIT_LINK_DIRECTORIES "/usr/lib/gcc/x86_64-redhat-linux/15;/usr/lib64;/lib64;/usr/lib;/lib") +set(CMAKE_CXX_IMPLICIT_LINK_FRAMEWORK_DIRECTORIES "") +set(CMAKE_CXX_COMPILER_CLANG_RESOURCE_DIR "") + +set(CMAKE_CXX_COMPILER_IMPORT_STD "") +### Imported target for C++23 standard library +set(CMAKE_CXX23_COMPILER_IMPORT_STD_NOT_FOUND_MESSAGE "Unsupported generator: Unix Makefiles") + + +### Imported target for C++26 standard library +set(CMAKE_CXX26_COMPILER_IMPORT_STD_NOT_FOUND_MESSAGE "Unsupported generator: Unix Makefiles") + + + diff --git a/build-linux-make/CMakeFiles/3.31.11/CMakeDetermineCompilerABI_CXX.bin b/build-linux-make/CMakeFiles/3.31.11/CMakeDetermineCompilerABI_CXX.bin new file mode 100755 index 00000000..68cdf02b Binary files /dev/null and b/build-linux-make/CMakeFiles/3.31.11/CMakeDetermineCompilerABI_CXX.bin differ diff --git a/build-linux-make/CMakeFiles/3.31.11/CMakeSystem.cmake b/build-linux-make/CMakeFiles/3.31.11/CMakeSystem.cmake new file mode 100644 index 00000000..fe574c5f --- /dev/null +++ b/build-linux-make/CMakeFiles/3.31.11/CMakeSystem.cmake @@ -0,0 +1,15 @@ +set(CMAKE_HOST_SYSTEM "Linux-6.19.11-200.fc43.x86_64") +set(CMAKE_HOST_SYSTEM_NAME "Linux") +set(CMAKE_HOST_SYSTEM_VERSION "6.19.11-200.fc43.x86_64") +set(CMAKE_HOST_SYSTEM_PROCESSOR "x86_64") + + + +set(CMAKE_SYSTEM "Linux-6.19.11-200.fc43.x86_64") +set(CMAKE_SYSTEM_NAME "Linux") +set(CMAKE_SYSTEM_VERSION "6.19.11-200.fc43.x86_64") +set(CMAKE_SYSTEM_PROCESSOR "x86_64") + +set(CMAKE_CROSSCOMPILING "FALSE") + +set(CMAKE_SYSTEM_LOADED 1) diff --git a/build-linux-make/CMakeFiles/3.31.11/CompilerIdCXX/CMakeCXXCompilerId.cpp b/build-linux-make/CMakeFiles/3.31.11/CompilerIdCXX/CMakeCXXCompilerId.cpp new file mode 100644 index 00000000..3b6e114c --- /dev/null +++ b/build-linux-make/CMakeFiles/3.31.11/CompilerIdCXX/CMakeCXXCompilerId.cpp @@ -0,0 +1,919 @@ +/* This source file must have a .cpp extension so that all C++ compilers + recognize the extension without flags. Borland does not know .cxx for + example. */ +#ifndef __cplusplus +# error "A C compiler has been selected for C++." +#endif + +#if !defined(__has_include) +/* If the compiler does not have __has_include, pretend the answer is + always no. */ +# define __has_include(x) 0 +#endif + + +/* Version number components: V=Version, R=Revision, P=Patch + Version date components: YYYY=Year, MM=Month, DD=Day */ + +#if defined(__INTEL_COMPILER) || defined(__ICC) +# define COMPILER_ID "Intel" +# if defined(_MSC_VER) +# define SIMULATE_ID "MSVC" +# endif +# if defined(__GNUC__) +# define SIMULATE_ID "GNU" +# endif + /* __INTEL_COMPILER = VRP prior to 2021, and then VVVV for 2021 and later, + except that a few beta releases use the old format with V=2021. */ +# if __INTEL_COMPILER < 2021 || __INTEL_COMPILER == 202110 || __INTEL_COMPILER == 202111 +# define COMPILER_VERSION_MAJOR DEC(__INTEL_COMPILER/100) +# define COMPILER_VERSION_MINOR DEC(__INTEL_COMPILER/10 % 10) +# if defined(__INTEL_COMPILER_UPDATE) +# define COMPILER_VERSION_PATCH DEC(__INTEL_COMPILER_UPDATE) +# else +# define COMPILER_VERSION_PATCH DEC(__INTEL_COMPILER % 10) +# endif +# else +# define COMPILER_VERSION_MAJOR DEC(__INTEL_COMPILER) +# define COMPILER_VERSION_MINOR DEC(__INTEL_COMPILER_UPDATE) + /* The third version component from --version is an update index, + but no macro is provided for it. */ +# define COMPILER_VERSION_PATCH DEC(0) +# endif +# if defined(__INTEL_COMPILER_BUILD_DATE) + /* __INTEL_COMPILER_BUILD_DATE = YYYYMMDD */ +# define COMPILER_VERSION_TWEAK DEC(__INTEL_COMPILER_BUILD_DATE) +# endif +# if defined(_MSC_VER) + /* _MSC_VER = VVRR */ +# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) +# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) +# endif +# if defined(__GNUC__) +# define SIMULATE_VERSION_MAJOR DEC(__GNUC__) +# elif defined(__GNUG__) +# define SIMULATE_VERSION_MAJOR DEC(__GNUG__) +# endif +# if defined(__GNUC_MINOR__) +# define SIMULATE_VERSION_MINOR DEC(__GNUC_MINOR__) +# endif +# if defined(__GNUC_PATCHLEVEL__) +# define SIMULATE_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__) +# endif + +#elif (defined(__clang__) && defined(__INTEL_CLANG_COMPILER)) || defined(__INTEL_LLVM_COMPILER) +# define COMPILER_ID "IntelLLVM" +#if defined(_MSC_VER) +# define SIMULATE_ID "MSVC" +#endif +#if defined(__GNUC__) +# define SIMULATE_ID "GNU" +#endif +/* __INTEL_LLVM_COMPILER = VVVVRP prior to 2021.2.0, VVVVRRPP for 2021.2.0 and + * later. Look for 6 digit vs. 8 digit version number to decide encoding. + * VVVV is no smaller than the current year when a version is released. + */ +#if __INTEL_LLVM_COMPILER < 1000000L +# define COMPILER_VERSION_MAJOR DEC(__INTEL_LLVM_COMPILER/100) +# define COMPILER_VERSION_MINOR DEC(__INTEL_LLVM_COMPILER/10 % 10) +# define COMPILER_VERSION_PATCH DEC(__INTEL_LLVM_COMPILER % 10) +#else +# define COMPILER_VERSION_MAJOR DEC(__INTEL_LLVM_COMPILER/10000) +# define COMPILER_VERSION_MINOR DEC(__INTEL_LLVM_COMPILER/100 % 100) +# define COMPILER_VERSION_PATCH DEC(__INTEL_LLVM_COMPILER % 100) +#endif +#if defined(_MSC_VER) + /* _MSC_VER = VVRR */ +# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) +# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) +#endif +#if defined(__GNUC__) +# define SIMULATE_VERSION_MAJOR DEC(__GNUC__) +#elif defined(__GNUG__) +# define SIMULATE_VERSION_MAJOR DEC(__GNUG__) +#endif +#if defined(__GNUC_MINOR__) +# define SIMULATE_VERSION_MINOR DEC(__GNUC_MINOR__) +#endif +#if defined(__GNUC_PATCHLEVEL__) +# define SIMULATE_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__) +#endif + +#elif defined(__PATHCC__) +# define COMPILER_ID "PathScale" +# define COMPILER_VERSION_MAJOR DEC(__PATHCC__) +# define COMPILER_VERSION_MINOR DEC(__PATHCC_MINOR__) +# if defined(__PATHCC_PATCHLEVEL__) +# define COMPILER_VERSION_PATCH DEC(__PATHCC_PATCHLEVEL__) +# endif + +#elif defined(__BORLANDC__) && defined(__CODEGEARC_VERSION__) +# define COMPILER_ID "Embarcadero" +# define COMPILER_VERSION_MAJOR HEX(__CODEGEARC_VERSION__>>24 & 0x00FF) +# define COMPILER_VERSION_MINOR HEX(__CODEGEARC_VERSION__>>16 & 0x00FF) +# define COMPILER_VERSION_PATCH DEC(__CODEGEARC_VERSION__ & 0xFFFF) + +#elif defined(__BORLANDC__) +# define COMPILER_ID "Borland" + /* __BORLANDC__ = 0xVRR */ +# define COMPILER_VERSION_MAJOR HEX(__BORLANDC__>>8) +# define COMPILER_VERSION_MINOR HEX(__BORLANDC__ & 0xFF) + +#elif defined(__WATCOMC__) && __WATCOMC__ < 1200 +# define COMPILER_ID "Watcom" + /* __WATCOMC__ = VVRR */ +# define COMPILER_VERSION_MAJOR DEC(__WATCOMC__ / 100) +# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10) +# if (__WATCOMC__ % 10) > 0 +# define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10) +# endif + +#elif defined(__WATCOMC__) +# define COMPILER_ID "OpenWatcom" + /* __WATCOMC__ = VVRP + 1100 */ +# define COMPILER_VERSION_MAJOR DEC((__WATCOMC__ - 1100) / 100) +# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10) +# if (__WATCOMC__ % 10) > 0 +# define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10) +# endif + +#elif defined(__SUNPRO_CC) +# define COMPILER_ID "SunPro" +# if __SUNPRO_CC >= 0x5100 + /* __SUNPRO_CC = 0xVRRP */ +# define COMPILER_VERSION_MAJOR HEX(__SUNPRO_CC>>12) +# define COMPILER_VERSION_MINOR HEX(__SUNPRO_CC>>4 & 0xFF) +# define COMPILER_VERSION_PATCH HEX(__SUNPRO_CC & 0xF) +# else + /* __SUNPRO_CC = 0xVRP */ +# define COMPILER_VERSION_MAJOR HEX(__SUNPRO_CC>>8) +# define COMPILER_VERSION_MINOR HEX(__SUNPRO_CC>>4 & 0xF) +# define COMPILER_VERSION_PATCH HEX(__SUNPRO_CC & 0xF) +# endif + +#elif defined(__HP_aCC) +# define COMPILER_ID "HP" + /* __HP_aCC = VVRRPP */ +# define COMPILER_VERSION_MAJOR DEC(__HP_aCC/10000) +# define COMPILER_VERSION_MINOR DEC(__HP_aCC/100 % 100) +# define COMPILER_VERSION_PATCH DEC(__HP_aCC % 100) + +#elif defined(__DECCXX) +# define COMPILER_ID "Compaq" + /* __DECCXX_VER = VVRRTPPPP */ +# define COMPILER_VERSION_MAJOR DEC(__DECCXX_VER/10000000) +# define COMPILER_VERSION_MINOR DEC(__DECCXX_VER/100000 % 100) +# define COMPILER_VERSION_PATCH DEC(__DECCXX_VER % 10000) + +#elif defined(__IBMCPP__) && defined(__COMPILER_VER__) +# define COMPILER_ID "zOS" + /* __IBMCPP__ = VRP */ +# define COMPILER_VERSION_MAJOR DEC(__IBMCPP__/100) +# define COMPILER_VERSION_MINOR DEC(__IBMCPP__/10 % 10) +# define COMPILER_VERSION_PATCH DEC(__IBMCPP__ % 10) + +#elif defined(__open_xl__) && defined(__clang__) +# define COMPILER_ID "IBMClang" +# define COMPILER_VERSION_MAJOR DEC(__open_xl_version__) +# define COMPILER_VERSION_MINOR DEC(__open_xl_release__) +# define COMPILER_VERSION_PATCH DEC(__open_xl_modification__) +# define COMPILER_VERSION_TWEAK DEC(__open_xl_ptf_fix_level__) + + +#elif defined(__ibmxl__) && defined(__clang__) +# define COMPILER_ID "XLClang" +# define COMPILER_VERSION_MAJOR DEC(__ibmxl_version__) +# define COMPILER_VERSION_MINOR DEC(__ibmxl_release__) +# define COMPILER_VERSION_PATCH DEC(__ibmxl_modification__) +# define COMPILER_VERSION_TWEAK DEC(__ibmxl_ptf_fix_level__) + + +#elif defined(__IBMCPP__) && !defined(__COMPILER_VER__) && __IBMCPP__ >= 800 +# define COMPILER_ID "XL" + /* __IBMCPP__ = VRP */ +# define COMPILER_VERSION_MAJOR DEC(__IBMCPP__/100) +# define COMPILER_VERSION_MINOR DEC(__IBMCPP__/10 % 10) +# define COMPILER_VERSION_PATCH DEC(__IBMCPP__ % 10) + +#elif defined(__IBMCPP__) && !defined(__COMPILER_VER__) && __IBMCPP__ < 800 +# define COMPILER_ID "VisualAge" + /* __IBMCPP__ = VRP */ +# define COMPILER_VERSION_MAJOR DEC(__IBMCPP__/100) +# define COMPILER_VERSION_MINOR DEC(__IBMCPP__/10 % 10) +# define COMPILER_VERSION_PATCH DEC(__IBMCPP__ % 10) + +#elif defined(__NVCOMPILER) +# define COMPILER_ID "NVHPC" +# define COMPILER_VERSION_MAJOR DEC(__NVCOMPILER_MAJOR__) +# define COMPILER_VERSION_MINOR DEC(__NVCOMPILER_MINOR__) +# if defined(__NVCOMPILER_PATCHLEVEL__) +# define COMPILER_VERSION_PATCH DEC(__NVCOMPILER_PATCHLEVEL__) +# endif + +#elif defined(__PGI) +# define COMPILER_ID "PGI" +# define COMPILER_VERSION_MAJOR DEC(__PGIC__) +# define COMPILER_VERSION_MINOR DEC(__PGIC_MINOR__) +# if defined(__PGIC_PATCHLEVEL__) +# define COMPILER_VERSION_PATCH DEC(__PGIC_PATCHLEVEL__) +# endif + +#elif defined(__clang__) && defined(__cray__) +# define COMPILER_ID "CrayClang" +# define COMPILER_VERSION_MAJOR DEC(__cray_major__) +# define COMPILER_VERSION_MINOR DEC(__cray_minor__) +# define COMPILER_VERSION_PATCH DEC(__cray_patchlevel__) +# define COMPILER_VERSION_INTERNAL_STR __clang_version__ + + +#elif defined(_CRAYC) +# define COMPILER_ID "Cray" +# define COMPILER_VERSION_MAJOR DEC(_RELEASE_MAJOR) +# define COMPILER_VERSION_MINOR DEC(_RELEASE_MINOR) + +#elif defined(__TI_COMPILER_VERSION__) +# define COMPILER_ID "TI" + /* __TI_COMPILER_VERSION__ = VVVRRRPPP */ +# define COMPILER_VERSION_MAJOR DEC(__TI_COMPILER_VERSION__/1000000) +# define COMPILER_VERSION_MINOR DEC(__TI_COMPILER_VERSION__/1000 % 1000) +# define COMPILER_VERSION_PATCH DEC(__TI_COMPILER_VERSION__ % 1000) + +#elif defined(__CLANG_FUJITSU) +# define COMPILER_ID "FujitsuClang" +# define COMPILER_VERSION_MAJOR DEC(__FCC_major__) +# define COMPILER_VERSION_MINOR DEC(__FCC_minor__) +# define COMPILER_VERSION_PATCH DEC(__FCC_patchlevel__) +# define COMPILER_VERSION_INTERNAL_STR __clang_version__ + + +#elif defined(__FUJITSU) +# define COMPILER_ID "Fujitsu" +# if defined(__FCC_version__) +# define COMPILER_VERSION __FCC_version__ +# elif defined(__FCC_major__) +# define COMPILER_VERSION_MAJOR DEC(__FCC_major__) +# define COMPILER_VERSION_MINOR DEC(__FCC_minor__) +# define COMPILER_VERSION_PATCH DEC(__FCC_patchlevel__) +# endif +# if defined(__fcc_version) +# define COMPILER_VERSION_INTERNAL DEC(__fcc_version) +# elif defined(__FCC_VERSION) +# define COMPILER_VERSION_INTERNAL DEC(__FCC_VERSION) +# endif + + +#elif defined(__ghs__) +# define COMPILER_ID "GHS" +/* __GHS_VERSION_NUMBER = VVVVRP */ +# ifdef __GHS_VERSION_NUMBER +# define COMPILER_VERSION_MAJOR DEC(__GHS_VERSION_NUMBER / 100) +# define COMPILER_VERSION_MINOR DEC(__GHS_VERSION_NUMBER / 10 % 10) +# define COMPILER_VERSION_PATCH DEC(__GHS_VERSION_NUMBER % 10) +# endif + +#elif defined(__TASKING__) +# define COMPILER_ID "Tasking" + # define COMPILER_VERSION_MAJOR DEC(__VERSION__/1000) + # define COMPILER_VERSION_MINOR DEC(__VERSION__ % 100) +# define COMPILER_VERSION_INTERNAL DEC(__VERSION__) + +#elif defined(__ORANGEC__) +# define COMPILER_ID "OrangeC" +# define COMPILER_VERSION_MAJOR DEC(__ORANGEC_MAJOR__) +# define COMPILER_VERSION_MINOR DEC(__ORANGEC_MINOR__) +# define COMPILER_VERSION_PATCH DEC(__ORANGEC_PATCHLEVEL__) + +#elif defined(__SCO_VERSION__) +# define COMPILER_ID "SCO" + +#elif defined(__ARMCC_VERSION) && !defined(__clang__) +# define COMPILER_ID "ARMCC" +#if __ARMCC_VERSION >= 1000000 + /* __ARMCC_VERSION = VRRPPPP */ + # define COMPILER_VERSION_MAJOR DEC(__ARMCC_VERSION/1000000) + # define COMPILER_VERSION_MINOR DEC(__ARMCC_VERSION/10000 % 100) + # define COMPILER_VERSION_PATCH DEC(__ARMCC_VERSION % 10000) +#else + /* __ARMCC_VERSION = VRPPPP */ + # define COMPILER_VERSION_MAJOR DEC(__ARMCC_VERSION/100000) + # define COMPILER_VERSION_MINOR DEC(__ARMCC_VERSION/10000 % 10) + # define COMPILER_VERSION_PATCH DEC(__ARMCC_VERSION % 10000) +#endif + + +#elif defined(__clang__) && defined(__apple_build_version__) +# define COMPILER_ID "AppleClang" +# if defined(_MSC_VER) +# define SIMULATE_ID "MSVC" +# endif +# define COMPILER_VERSION_MAJOR DEC(__clang_major__) +# define COMPILER_VERSION_MINOR DEC(__clang_minor__) +# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__) +# if defined(_MSC_VER) + /* _MSC_VER = VVRR */ +# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) +# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) +# endif +# define COMPILER_VERSION_TWEAK DEC(__apple_build_version__) + +#elif defined(__clang__) && defined(__ARMCOMPILER_VERSION) +# define COMPILER_ID "ARMClang" + # define COMPILER_VERSION_MAJOR DEC(__ARMCOMPILER_VERSION/1000000) + # define COMPILER_VERSION_MINOR DEC(__ARMCOMPILER_VERSION/10000 % 100) + # define COMPILER_VERSION_PATCH DEC(__ARMCOMPILER_VERSION/100 % 100) +# define COMPILER_VERSION_INTERNAL DEC(__ARMCOMPILER_VERSION) + +#elif defined(__clang__) && defined(__ti__) +# define COMPILER_ID "TIClang" + # define COMPILER_VERSION_MAJOR DEC(__ti_major__) + # define COMPILER_VERSION_MINOR DEC(__ti_minor__) + # define COMPILER_VERSION_PATCH DEC(__ti_patchlevel__) +# define COMPILER_VERSION_INTERNAL DEC(__ti_version__) + +#elif defined(__clang__) +# define COMPILER_ID "Clang" +# if defined(_MSC_VER) +# define SIMULATE_ID "MSVC" +# endif +# define COMPILER_VERSION_MAJOR DEC(__clang_major__) +# define COMPILER_VERSION_MINOR DEC(__clang_minor__) +# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__) +# if defined(_MSC_VER) + /* _MSC_VER = VVRR */ +# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) +# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) +# endif + +#elif defined(__LCC__) && (defined(__GNUC__) || defined(__GNUG__) || defined(__MCST__)) +# define COMPILER_ID "LCC" +# define COMPILER_VERSION_MAJOR DEC(__LCC__ / 100) +# define COMPILER_VERSION_MINOR DEC(__LCC__ % 100) +# if defined(__LCC_MINOR__) +# define COMPILER_VERSION_PATCH DEC(__LCC_MINOR__) +# endif +# if defined(__GNUC__) && defined(__GNUC_MINOR__) +# define SIMULATE_ID "GNU" +# define SIMULATE_VERSION_MAJOR DEC(__GNUC__) +# define SIMULATE_VERSION_MINOR DEC(__GNUC_MINOR__) +# if defined(__GNUC_PATCHLEVEL__) +# define SIMULATE_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__) +# endif +# endif + +#elif defined(__GNUC__) || defined(__GNUG__) +# define COMPILER_ID "GNU" +# if defined(__GNUC__) +# define COMPILER_VERSION_MAJOR DEC(__GNUC__) +# else +# define COMPILER_VERSION_MAJOR DEC(__GNUG__) +# endif +# if defined(__GNUC_MINOR__) +# define COMPILER_VERSION_MINOR DEC(__GNUC_MINOR__) +# endif +# if defined(__GNUC_PATCHLEVEL__) +# define COMPILER_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__) +# endif + +#elif defined(_MSC_VER) +# define COMPILER_ID "MSVC" + /* _MSC_VER = VVRR */ +# define COMPILER_VERSION_MAJOR DEC(_MSC_VER / 100) +# define COMPILER_VERSION_MINOR DEC(_MSC_VER % 100) +# if defined(_MSC_FULL_VER) +# if _MSC_VER >= 1400 + /* _MSC_FULL_VER = VVRRPPPPP */ +# define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 100000) +# else + /* _MSC_FULL_VER = VVRRPPPP */ +# define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 10000) +# endif +# endif +# if defined(_MSC_BUILD) +# define COMPILER_VERSION_TWEAK DEC(_MSC_BUILD) +# endif + +#elif defined(_ADI_COMPILER) +# define COMPILER_ID "ADSP" +#if defined(__VERSIONNUM__) + /* __VERSIONNUM__ = 0xVVRRPPTT */ +# define COMPILER_VERSION_MAJOR DEC(__VERSIONNUM__ >> 24 & 0xFF) +# define COMPILER_VERSION_MINOR DEC(__VERSIONNUM__ >> 16 & 0xFF) +# define COMPILER_VERSION_PATCH DEC(__VERSIONNUM__ >> 8 & 0xFF) +# define COMPILER_VERSION_TWEAK DEC(__VERSIONNUM__ & 0xFF) +#endif + +#elif defined(__IAR_SYSTEMS_ICC__) || defined(__IAR_SYSTEMS_ICC) +# define COMPILER_ID "IAR" +# if defined(__VER__) && defined(__ICCARM__) +# define COMPILER_VERSION_MAJOR DEC((__VER__) / 1000000) +# define COMPILER_VERSION_MINOR DEC(((__VER__) / 1000) % 1000) +# define COMPILER_VERSION_PATCH DEC((__VER__) % 1000) +# define COMPILER_VERSION_INTERNAL DEC(__IAR_SYSTEMS_ICC__) +# elif defined(__VER__) && (defined(__ICCAVR__) || defined(__ICCRX__) || defined(__ICCRH850__) || defined(__ICCRL78__) || defined(__ICC430__) || defined(__ICCRISCV__) || defined(__ICCV850__) || defined(__ICC8051__) || defined(__ICCSTM8__)) +# define COMPILER_VERSION_MAJOR DEC((__VER__) / 100) +# define COMPILER_VERSION_MINOR DEC((__VER__) - (((__VER__) / 100)*100)) +# define COMPILER_VERSION_PATCH DEC(__SUBVERSION__) +# define COMPILER_VERSION_INTERNAL DEC(__IAR_SYSTEMS_ICC__) +# endif + + +/* These compilers are either not known or too old to define an + identification macro. Try to identify the platform and guess that + it is the native compiler. */ +#elif defined(__hpux) || defined(__hpua) +# define COMPILER_ID "HP" + +#else /* unknown compiler */ +# define COMPILER_ID "" +#endif + +/* Construct the string literal in pieces to prevent the source from + getting matched. Store it in a pointer rather than an array + because some compilers will just produce instructions to fill the + array rather than assigning a pointer to a static array. */ +char const* info_compiler = "INFO" ":" "compiler[" COMPILER_ID "]"; +#ifdef SIMULATE_ID +char const* info_simulate = "INFO" ":" "simulate[" SIMULATE_ID "]"; +#endif + +#ifdef __QNXNTO__ +char const* qnxnto = "INFO" ":" "qnxnto[]"; +#endif + +#if defined(__CRAYXT_COMPUTE_LINUX_TARGET) +char const *info_cray = "INFO" ":" "compiler_wrapper[CrayPrgEnv]"; +#endif + +#define STRINGIFY_HELPER(X) #X +#define STRINGIFY(X) STRINGIFY_HELPER(X) + +/* Identify known platforms by name. */ +#if defined(__linux) || defined(__linux__) || defined(linux) +# define PLATFORM_ID "Linux" + +#elif defined(__MSYS__) +# define PLATFORM_ID "MSYS" + +#elif defined(__CYGWIN__) +# define PLATFORM_ID "Cygwin" + +#elif defined(__MINGW32__) +# define PLATFORM_ID "MinGW" + +#elif defined(__APPLE__) +# define PLATFORM_ID "Darwin" + +#elif defined(_WIN32) || defined(__WIN32__) || defined(WIN32) +# define PLATFORM_ID "Windows" + +#elif defined(__FreeBSD__) || defined(__FreeBSD) +# define PLATFORM_ID "FreeBSD" + +#elif defined(__NetBSD__) || defined(__NetBSD) +# define PLATFORM_ID "NetBSD" + +#elif defined(__OpenBSD__) || defined(__OPENBSD) +# define PLATFORM_ID "OpenBSD" + +#elif defined(__sun) || defined(sun) +# define PLATFORM_ID "SunOS" + +#elif defined(_AIX) || defined(__AIX) || defined(__AIX__) || defined(__aix) || defined(__aix__) +# define PLATFORM_ID "AIX" + +#elif defined(__hpux) || defined(__hpux__) +# define PLATFORM_ID "HP-UX" + +#elif defined(__HAIKU__) +# define PLATFORM_ID "Haiku" + +#elif defined(__BeOS) || defined(__BEOS__) || defined(_BEOS) +# define PLATFORM_ID "BeOS" + +#elif defined(__QNX__) || defined(__QNXNTO__) +# define PLATFORM_ID "QNX" + +#elif defined(__tru64) || defined(_tru64) || defined(__TRU64__) +# define PLATFORM_ID "Tru64" + +#elif defined(__riscos) || defined(__riscos__) +# define PLATFORM_ID "RISCos" + +#elif defined(__sinix) || defined(__sinix__) || defined(__SINIX__) +# define PLATFORM_ID "SINIX" + +#elif defined(__UNIX_SV__) +# define PLATFORM_ID "UNIX_SV" + +#elif defined(__bsdos__) +# define PLATFORM_ID "BSDOS" + +#elif defined(_MPRAS) || defined(MPRAS) +# define PLATFORM_ID "MP-RAS" + +#elif defined(__osf) || defined(__osf__) +# define PLATFORM_ID "OSF1" + +#elif defined(_SCO_SV) || defined(SCO_SV) || defined(sco_sv) +# define PLATFORM_ID "SCO_SV" + +#elif defined(__ultrix) || defined(__ultrix__) || defined(_ULTRIX) +# define PLATFORM_ID "ULTRIX" + +#elif defined(__XENIX__) || defined(_XENIX) || defined(XENIX) +# define PLATFORM_ID "Xenix" + +#elif defined(__WATCOMC__) +# if defined(__LINUX__) +# define PLATFORM_ID "Linux" + +# elif defined(__DOS__) +# define PLATFORM_ID "DOS" + +# elif defined(__OS2__) +# define PLATFORM_ID "OS2" + +# elif defined(__WINDOWS__) +# define PLATFORM_ID "Windows3x" + +# elif defined(__VXWORKS__) +# define PLATFORM_ID "VxWorks" + +# else /* unknown platform */ +# define PLATFORM_ID +# endif + +#elif defined(__INTEGRITY) +# if defined(INT_178B) +# define PLATFORM_ID "Integrity178" + +# else /* regular Integrity */ +# define PLATFORM_ID "Integrity" +# endif + +# elif defined(_ADI_COMPILER) +# define PLATFORM_ID "ADSP" + +#else /* unknown platform */ +# define PLATFORM_ID + +#endif + +/* For windows compilers MSVC and Intel we can determine + the architecture of the compiler being used. This is because + the compilers do not have flags that can change the architecture, + but rather depend on which compiler is being used +*/ +#if defined(_WIN32) && defined(_MSC_VER) +# if defined(_M_IA64) +# define ARCHITECTURE_ID "IA64" + +# elif defined(_M_ARM64EC) +# define ARCHITECTURE_ID "ARM64EC" + +# elif defined(_M_X64) || defined(_M_AMD64) +# define ARCHITECTURE_ID "x64" + +# elif defined(_M_IX86) +# define ARCHITECTURE_ID "X86" + +# elif defined(_M_ARM64) +# define ARCHITECTURE_ID "ARM64" + +# elif defined(_M_ARM) +# if _M_ARM == 4 +# define ARCHITECTURE_ID "ARMV4I" +# elif _M_ARM == 5 +# define ARCHITECTURE_ID "ARMV5I" +# else +# define ARCHITECTURE_ID "ARMV" STRINGIFY(_M_ARM) +# endif + +# elif defined(_M_MIPS) +# define ARCHITECTURE_ID "MIPS" + +# elif defined(_M_SH) +# define ARCHITECTURE_ID "SHx" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +#elif defined(__WATCOMC__) +# if defined(_M_I86) +# define ARCHITECTURE_ID "I86" + +# elif defined(_M_IX86) +# define ARCHITECTURE_ID "X86" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +#elif defined(__IAR_SYSTEMS_ICC__) || defined(__IAR_SYSTEMS_ICC) +# if defined(__ICCARM__) +# define ARCHITECTURE_ID "ARM" + +# elif defined(__ICCRX__) +# define ARCHITECTURE_ID "RX" + +# elif defined(__ICCRH850__) +# define ARCHITECTURE_ID "RH850" + +# elif defined(__ICCRL78__) +# define ARCHITECTURE_ID "RL78" + +# elif defined(__ICCRISCV__) +# define ARCHITECTURE_ID "RISCV" + +# elif defined(__ICCAVR__) +# define ARCHITECTURE_ID "AVR" + +# elif defined(__ICC430__) +# define ARCHITECTURE_ID "MSP430" + +# elif defined(__ICCV850__) +# define ARCHITECTURE_ID "V850" + +# elif defined(__ICC8051__) +# define ARCHITECTURE_ID "8051" + +# elif defined(__ICCSTM8__) +# define ARCHITECTURE_ID "STM8" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +#elif defined(__ghs__) +# if defined(__PPC64__) +# define ARCHITECTURE_ID "PPC64" + +# elif defined(__ppc__) +# define ARCHITECTURE_ID "PPC" + +# elif defined(__ARM__) +# define ARCHITECTURE_ID "ARM" + +# elif defined(__x86_64__) +# define ARCHITECTURE_ID "x64" + +# elif defined(__i386__) +# define ARCHITECTURE_ID "X86" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +#elif defined(__clang__) && defined(__ti__) +# if defined(__ARM_ARCH) +# define ARCHITECTURE_ID "ARM" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +#elif defined(__TI_COMPILER_VERSION__) +# if defined(__TI_ARM__) +# define ARCHITECTURE_ID "ARM" + +# elif defined(__MSP430__) +# define ARCHITECTURE_ID "MSP430" + +# elif defined(__TMS320C28XX__) +# define ARCHITECTURE_ID "TMS320C28x" + +# elif defined(__TMS320C6X__) || defined(_TMS320C6X) +# define ARCHITECTURE_ID "TMS320C6x" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +# elif defined(__ADSPSHARC__) +# define ARCHITECTURE_ID "SHARC" + +# elif defined(__ADSPBLACKFIN__) +# define ARCHITECTURE_ID "Blackfin" + +#elif defined(__TASKING__) + +# if defined(__CTC__) || defined(__CPTC__) +# define ARCHITECTURE_ID "TriCore" + +# elif defined(__CMCS__) +# define ARCHITECTURE_ID "MCS" + +# elif defined(__CARM__) +# define ARCHITECTURE_ID "ARM" + +# elif defined(__CARC__) +# define ARCHITECTURE_ID "ARC" + +# elif defined(__C51__) +# define ARCHITECTURE_ID "8051" + +# elif defined(__CPCP__) +# define ARCHITECTURE_ID "PCP" + +# else +# define ARCHITECTURE_ID "" +# endif + +#else +# define ARCHITECTURE_ID +#endif + +/* Convert integer to decimal digit literals. */ +#define DEC(n) \ + ('0' + (((n) / 10000000)%10)), \ + ('0' + (((n) / 1000000)%10)), \ + ('0' + (((n) / 100000)%10)), \ + ('0' + (((n) / 10000)%10)), \ + ('0' + (((n) / 1000)%10)), \ + ('0' + (((n) / 100)%10)), \ + ('0' + (((n) / 10)%10)), \ + ('0' + ((n) % 10)) + +/* Convert integer to hex digit literals. */ +#define HEX(n) \ + ('0' + ((n)>>28 & 0xF)), \ + ('0' + ((n)>>24 & 0xF)), \ + ('0' + ((n)>>20 & 0xF)), \ + ('0' + ((n)>>16 & 0xF)), \ + ('0' + ((n)>>12 & 0xF)), \ + ('0' + ((n)>>8 & 0xF)), \ + ('0' + ((n)>>4 & 0xF)), \ + ('0' + ((n) & 0xF)) + +/* Construct a string literal encoding the version number. */ +#ifdef COMPILER_VERSION +char const* info_version = "INFO" ":" "compiler_version[" COMPILER_VERSION "]"; + +/* Construct a string literal encoding the version number components. */ +#elif defined(COMPILER_VERSION_MAJOR) +char const info_version[] = { + 'I', 'N', 'F', 'O', ':', + 'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','[', + COMPILER_VERSION_MAJOR, +# ifdef COMPILER_VERSION_MINOR + '.', COMPILER_VERSION_MINOR, +# ifdef COMPILER_VERSION_PATCH + '.', COMPILER_VERSION_PATCH, +# ifdef COMPILER_VERSION_TWEAK + '.', COMPILER_VERSION_TWEAK, +# endif +# endif +# endif + ']','\0'}; +#endif + +/* Construct a string literal encoding the internal version number. */ +#ifdef COMPILER_VERSION_INTERNAL +char const info_version_internal[] = { + 'I', 'N', 'F', 'O', ':', + 'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','_', + 'i','n','t','e','r','n','a','l','[', + COMPILER_VERSION_INTERNAL,']','\0'}; +#elif defined(COMPILER_VERSION_INTERNAL_STR) +char const* info_version_internal = "INFO" ":" "compiler_version_internal[" COMPILER_VERSION_INTERNAL_STR "]"; +#endif + +/* Construct a string literal encoding the version number components. */ +#ifdef SIMULATE_VERSION_MAJOR +char const info_simulate_version[] = { + 'I', 'N', 'F', 'O', ':', + 's','i','m','u','l','a','t','e','_','v','e','r','s','i','o','n','[', + SIMULATE_VERSION_MAJOR, +# ifdef SIMULATE_VERSION_MINOR + '.', SIMULATE_VERSION_MINOR, +# ifdef SIMULATE_VERSION_PATCH + '.', SIMULATE_VERSION_PATCH, +# ifdef SIMULATE_VERSION_TWEAK + '.', SIMULATE_VERSION_TWEAK, +# endif +# endif +# endif + ']','\0'}; +#endif + +/* Construct the string literal in pieces to prevent the source from + getting matched. Store it in a pointer rather than an array + because some compilers will just produce instructions to fill the + array rather than assigning a pointer to a static array. */ +char const* info_platform = "INFO" ":" "platform[" PLATFORM_ID "]"; +char const* info_arch = "INFO" ":" "arch[" ARCHITECTURE_ID "]"; + + + +#define CXX_STD_98 199711L +#define CXX_STD_11 201103L +#define CXX_STD_14 201402L +#define CXX_STD_17 201703L +#define CXX_STD_20 202002L +#define CXX_STD_23 202302L + +#if defined(__INTEL_COMPILER) && defined(_MSVC_LANG) +# if _MSVC_LANG > CXX_STD_17 +# define CXX_STD _MSVC_LANG +# elif _MSVC_LANG == CXX_STD_17 && defined(__cpp_aggregate_paren_init) +# define CXX_STD CXX_STD_20 +# elif _MSVC_LANG > CXX_STD_14 && __cplusplus > CXX_STD_17 +# define CXX_STD CXX_STD_20 +# elif _MSVC_LANG > CXX_STD_14 +# define CXX_STD CXX_STD_17 +# elif defined(__INTEL_CXX11_MODE__) && defined(__cpp_aggregate_nsdmi) +# define CXX_STD CXX_STD_14 +# elif defined(__INTEL_CXX11_MODE__) +# define CXX_STD CXX_STD_11 +# else +# define CXX_STD CXX_STD_98 +# endif +#elif defined(_MSC_VER) && defined(_MSVC_LANG) +# if _MSVC_LANG > __cplusplus +# define CXX_STD _MSVC_LANG +# else +# define CXX_STD __cplusplus +# endif +#elif defined(__NVCOMPILER) +# if __cplusplus == CXX_STD_17 && defined(__cpp_aggregate_paren_init) +# define CXX_STD CXX_STD_20 +# else +# define CXX_STD __cplusplus +# endif +#elif defined(__INTEL_COMPILER) || defined(__PGI) +# if __cplusplus == CXX_STD_11 && defined(__cpp_namespace_attributes) +# define CXX_STD CXX_STD_17 +# elif __cplusplus == CXX_STD_11 && defined(__cpp_aggregate_nsdmi) +# define CXX_STD CXX_STD_14 +# else +# define CXX_STD __cplusplus +# endif +#elif (defined(__IBMCPP__) || defined(__ibmxl__)) && defined(__linux__) +# if __cplusplus == CXX_STD_11 && defined(__cpp_aggregate_nsdmi) +# define CXX_STD CXX_STD_14 +# else +# define CXX_STD __cplusplus +# endif +#elif __cplusplus == 1 && defined(__GXX_EXPERIMENTAL_CXX0X__) +# define CXX_STD CXX_STD_11 +#else +# define CXX_STD __cplusplus +#endif + +const char* info_language_standard_default = "INFO" ":" "standard_default[" +#if CXX_STD > CXX_STD_23 + "26" +#elif CXX_STD > CXX_STD_20 + "23" +#elif CXX_STD > CXX_STD_17 + "20" +#elif CXX_STD > CXX_STD_14 + "17" +#elif CXX_STD > CXX_STD_11 + "14" +#elif CXX_STD >= CXX_STD_11 + "11" +#else + "98" +#endif +"]"; + +const char* info_language_extensions_default = "INFO" ":" "extensions_default[" +#if (defined(__clang__) || defined(__GNUC__) || defined(__xlC__) || \ + defined(__TI_COMPILER_VERSION__)) && \ + !defined(__STRICT_ANSI__) + "ON" +#else + "OFF" +#endif +"]"; + +/*--------------------------------------------------------------------------*/ + +int main(int argc, char* argv[]) +{ + int require = 0; + require += info_compiler[argc]; + require += info_platform[argc]; + require += info_arch[argc]; +#ifdef COMPILER_VERSION_MAJOR + require += info_version[argc]; +#endif +#ifdef COMPILER_VERSION_INTERNAL + require += info_version_internal[argc]; +#endif +#ifdef SIMULATE_ID + require += info_simulate[argc]; +#endif +#ifdef SIMULATE_VERSION_MAJOR + require += info_simulate_version[argc]; +#endif +#if defined(__CRAYXT_COMPUTE_LINUX_TARGET) + require += info_cray[argc]; +#endif + require += info_language_standard_default[argc]; + require += info_language_extensions_default[argc]; + (void)argv; + return require; +} diff --git a/build-linux-make/CMakeFiles/3.31.11/CompilerIdCXX/a.out b/build-linux-make/CMakeFiles/3.31.11/CompilerIdCXX/a.out new file mode 100755 index 00000000..3ba9576a Binary files /dev/null and b/build-linux-make/CMakeFiles/3.31.11/CompilerIdCXX/a.out differ diff --git a/build-linux-make/CMakeFiles/CMakeConfigureLog.yaml b/build-linux-make/CMakeFiles/CMakeConfigureLog.yaml new file mode 100644 index 00000000..b13967fb --- /dev/null +++ b/build-linux-make/CMakeFiles/CMakeConfigureLog.yaml @@ -0,0 +1,279 @@ + +--- +events: + - + kind: "message-v1" + backtrace: + - "/usr/share/cmake/Modules/CMakeDetermineSystem.cmake:205 (message)" + - "CMakeLists.txt:17 (project)" + message: | + The system is: Linux - 6.19.11-200.fc43.x86_64 - x86_64 + - + kind: "message-v1" + backtrace: + - "/usr/share/cmake/Modules/CMakeDetermineCompilerId.cmake:17 (message)" + - "/usr/share/cmake/Modules/CMakeDetermineCompilerId.cmake:64 (__determine_compiler_id_test)" + - "/usr/share/cmake/Modules/CMakeDetermineCXXCompiler.cmake:126 (CMAKE_DETERMINE_COMPILER_ID)" + - "CMakeLists.txt:17 (project)" + message: | + Compiling the CXX compiler identification source file "CMakeCXXCompilerId.cpp" succeeded. + Compiler: /usr/bin/c++ + Build flags: + Id flags: + + The output was: + 0 + + + Compilation of the CXX compiler identification source "CMakeCXXCompilerId.cpp" produced "a.out" + + The CXX compiler identification is GNU, found in: + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux-make/CMakeFiles/3.31.11/CompilerIdCXX/a.out + + - + kind: "try_compile-v1" + backtrace: + - "/usr/share/cmake/Modules/CMakeDetermineCompilerABI.cmake:74 (try_compile)" + - "/usr/share/cmake/Modules/CMakeTestCXXCompiler.cmake:26 (CMAKE_DETERMINE_COMPILER_ABI)" + - "CMakeLists.txt:17 (project)" + checks: + - "Detecting CXX compiler ABI info" + directories: + source: "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux-make/CMakeFiles/CMakeScratch/TryCompile-TaUG1t" + binary: "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux-make/CMakeFiles/CMakeScratch/TryCompile-TaUG1t" + cmakeVariables: + CMAKE_CXX_FLAGS: "" + CMAKE_CXX_FLAGS_DEBUG: "-g" + CMAKE_CXX_SCAN_FOR_MODULES: "OFF" + CMAKE_EXE_LINKER_FLAGS: "" + buildResult: + variable: "CMAKE_CXX_ABI_COMPILED" + cached: true + stdout: | + Change Dir: '/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux-make/CMakeFiles/CMakeScratch/TryCompile-TaUG1t' + + Run Build Command(s): /usr/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile cmTC_59c0a/fast + /usr/bin/gmake -f CMakeFiles/cmTC_59c0a.dir/build.make CMakeFiles/cmTC_59c0a.dir/build + gmake[1]: Entering directory '/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux-make/CMakeFiles/CMakeScratch/TryCompile-TaUG1t' + Building CXX object CMakeFiles/cmTC_59c0a.dir/CMakeCXXCompilerABI.cpp.o + /usr/bin/c++ -v -o CMakeFiles/cmTC_59c0a.dir/CMakeCXXCompilerABI.cpp.o -c /usr/share/cmake/Modules/CMakeCXXCompilerABI.cpp + Using built-in specs. + COLLECT_GCC=/usr/bin/c++ + OFFLOAD_TARGET_NAMES=nvptx-none:amdgcn-amdhsa + OFFLOAD_TARGET_DEFAULT=1 + Target: x86_64-redhat-linux + Configured with: ../configure --enable-bootstrap --enable-languages=c,c++,fortran,objc,obj-c++,ada,go,d,m2,cobol,lto --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=https://bugzilla.redhat.com/ --enable-shared --enable-threads=posix --enable-checking=release --enable-multilib --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --with-gcc-major-version-only --enable-libstdcxx-backtrace --with-libstdcxx-zoneinfo=/usr/share/zoneinfo --with-linker-hash-style=gnu --enable-plugin --enable-initfini-array --with-isl=/builddir/build/BUILD/gcc-15.2.1-build/gcc-15.2.1-20260123/obj-x86_64-redhat-linux/isl-install --enable-offload-targets=nvptx-none,amdgcn-amdhsa --enable-offload-defaulted --without-cuda-driver --enable-gnu-indirect-function --enable-cet --with-tune=generic --with-arch_32=i686 --build=x86_64-redhat-linux --with-build-config=bootstrap-lto --enable-link-serialization=1 --disable-libssp + Thread model: posix + Supported LTO compression algorithms: zlib zstd + gcc version 15.2.1 20260123 (Red Hat 15.2.1-7) (GCC) + COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_59c0a.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_59c0a.dir/' + /usr/libexec/gcc/x86_64-redhat-linux/15/cc1plus -quiet -v -D_GNU_SOURCE /usr/share/cmake/Modules/CMakeCXXCompilerABI.cpp -quiet -dumpdir CMakeFiles/cmTC_59c0a.dir/ -dumpbase CMakeCXXCompilerABI.cpp.cpp -dumpbase-ext .cpp -mtune=generic -march=x86-64 -version -o /tmp/ccqkcr4l.s + GNU C++17 (GCC) version 15.2.1 20260123 (Red Hat 15.2.1-7) (x86_64-redhat-linux) + compiled by GNU C version 15.2.1 20260123 (Red Hat 15.2.1-7), GMP version 6.3.0, MPFR version 4.2.2, MPC version 1.3.1, isl version isl-0.24-GMP + + GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072 + ignoring nonexistent directory "/usr/lib/gcc/x86_64-redhat-linux/15/include-fixed" + ignoring nonexistent directory "/usr/lib/gcc/x86_64-redhat-linux/15/../../../../x86_64-redhat-linux/include" + #include "..." search starts here: + #include <...> search starts here: + /usr/lib/gcc/x86_64-redhat-linux/15/../../../../include/c++/15 + /usr/lib/gcc/x86_64-redhat-linux/15/../../../../include/c++/15/x86_64-redhat-linux + /usr/lib/gcc/x86_64-redhat-linux/15/../../../../include/c++/15/backward + /usr/lib/gcc/x86_64-redhat-linux/15/include + /usr/local/include + /usr/include + End of search list. + Compiler executable checksum: 61fbb778c0a8c441a1c0ce3e680cc1db + COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_59c0a.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_59c0a.dir/' + as -v --64 -o CMakeFiles/cmTC_59c0a.dir/CMakeCXXCompilerABI.cpp.o /tmp/ccqkcr4l.s + GNU assembler version 2.45.1 (x86_64-redhat-linux) using BFD version version 2.45.1-4.fc43 + COMPILER_PATH=/usr/libexec/gcc/x86_64-redhat-linux/15/:/usr/libexec/gcc/x86_64-redhat-linux/15/:/usr/libexec/gcc/x86_64-redhat-linux/:/usr/lib/gcc/x86_64-redhat-linux/15/:/usr/lib/gcc/x86_64-redhat-linux/ + LIBRARY_PATH=/usr/lib/gcc/x86_64-redhat-linux/15/:/usr/lib/gcc/x86_64-redhat-linux/15/../../../../lib64/:/lib/../lib64/:/usr/lib/../lib64/:/usr/lib/gcc/x86_64-redhat-linux/15/../../../:/lib/:/usr/lib/ + COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_59c0a.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_59c0a.dir/CMakeCXXCompilerABI.cpp.' + Linking CXX executable cmTC_59c0a + /usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_59c0a.dir/link.txt --verbose=1 + Using built-in specs. + COLLECT_GCC=/usr/bin/c++ + COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-redhat-linux/15/lto-wrapper + OFFLOAD_TARGET_NAMES=nvptx-none:amdgcn-amdhsa + OFFLOAD_TARGET_DEFAULT=1 + Target: x86_64-redhat-linux + Configured with: ../configure --enable-bootstrap --enable-languages=c,c++,fortran,objc,obj-c++,ada,go,d,m2,cobol,lto --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=https://bugzilla.redhat.com/ --enable-shared --enable-threads=posix --enable-checking=release --enable-multilib --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --with-gcc-major-version-only --enable-libstdcxx-backtrace --with-libstdcxx-zoneinfo=/usr/share/zoneinfo --with-linker-hash-style=gnu --enable-plugin --enable-initfini-array --with-isl=/builddir/build/BUILD/gcc-15.2.1-build/gcc-15.2.1-20260123/obj-x86_64-redhat-linux/isl-install --enable-offload-targets=nvptx-none,amdgcn-amdhsa --enable-offload-defaulted --without-cuda-driver --enable-gnu-indirect-function --enable-cet --with-tune=generic --with-arch_32=i686 --build=x86_64-redhat-linux --with-build-config=bootstrap-lto --enable-link-serialization=1 --disable-libssp + Thread model: posix + Supported LTO compression algorithms: zlib zstd + gcc version 15.2.1 20260123 (Red Hat 15.2.1-7) (GCC) + COMPILER_PATH=/usr/libexec/gcc/x86_64-redhat-linux/15/:/usr/libexec/gcc/x86_64-redhat-linux/15/:/usr/libexec/gcc/x86_64-redhat-linux/:/usr/lib/gcc/x86_64-redhat-linux/15/:/usr/lib/gcc/x86_64-redhat-linux/ + LIBRARY_PATH=/usr/lib/gcc/x86_64-redhat-linux/15/:/usr/lib/gcc/x86_64-redhat-linux/15/../../../../lib64/:/lib/../lib64/:/usr/lib/../lib64/:/usr/lib/gcc/x86_64-redhat-linux/15/../../../:/lib/:/usr/lib/ + COLLECT_GCC_OPTIONS='-v' '-o' 'cmTC_59c0a' '-foffload-options=-l_GCC_stdc++' '-foffload-options=-l_GCC_m' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'cmTC_59c0a.' + /usr/libexec/gcc/x86_64-redhat-linux/15/collect2 -plugin /usr/libexec/gcc/x86_64-redhat-linux/15/liblto_plugin.so -plugin-opt=/usr/libexec/gcc/x86_64-redhat-linux/15/lto-wrapper -plugin-opt=-fresolution=/tmp/ccUVnMWj.res -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc --build-id --no-add-needed --eh-frame-hdr --hash-style=gnu -m elf_x86_64 -dynamic-linker /lib64/ld-linux-x86-64.so.2 -o cmTC_59c0a /usr/lib/gcc/x86_64-redhat-linux/15/../../../../lib64/crt1.o /usr/lib/gcc/x86_64-redhat-linux/15/../../../../lib64/crti.o /usr/lib/gcc/x86_64-redhat-linux/15/crtbegin.o -L/usr/lib/gcc/x86_64-redhat-linux/15 -L/usr/lib/gcc/x86_64-redhat-linux/15/../../../../lib64 -L/lib/../lib64 -L/usr/lib/../lib64 -L/usr/lib/gcc/x86_64-redhat-linux/15/../../.. -L/lib -L/usr/lib -v CMakeFiles/cmTC_59c0a.dir/CMakeCXXCompilerABI.cpp.o -lstdc++ -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc /usr/lib/gcc/x86_64-redhat-linux/15/crtend.o /usr/lib/gcc/x86_64-redhat-linux/15/../../../../lib64/crtn.o + collect2 version 15.2.1 20260123 (Red Hat 15.2.1-7) + /usr/bin/ld -plugin /usr/libexec/gcc/x86_64-redhat-linux/15/liblto_plugin.so -plugin-opt=/usr/libexec/gcc/x86_64-redhat-linux/15/lto-wrapper -plugin-opt=-fresolution=/tmp/ccUVnMWj.res -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc --build-id --no-add-needed --eh-frame-hdr --hash-style=gnu -m elf_x86_64 -dynamic-linker /lib64/ld-linux-x86-64.so.2 -o cmTC_59c0a /usr/lib/gcc/x86_64-redhat-linux/15/../../../../lib64/crt1.o /usr/lib/gcc/x86_64-redhat-linux/15/../../../../lib64/crti.o /usr/lib/gcc/x86_64-redhat-linux/15/crtbegin.o -L/usr/lib/gcc/x86_64-redhat-linux/15 -L/usr/lib/gcc/x86_64-redhat-linux/15/../../../../lib64 -L/lib/../lib64 -L/usr/lib/../lib64 -L/usr/lib/gcc/x86_64-redhat-linux/15/../../.. -L/lib -L/usr/lib -v CMakeFiles/cmTC_59c0a.dir/CMakeCXXCompilerABI.cpp.o -lstdc++ -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc /usr/lib/gcc/x86_64-redhat-linux/15/crtend.o /usr/lib/gcc/x86_64-redhat-linux/15/../../../../lib64/crtn.o + GNU ld version 2.45.1-4.fc43 + COLLECT_GCC_OPTIONS='-v' '-o' 'cmTC_59c0a' '-foffload-options=-l_GCC_stdc++' '-foffload-options=-l_GCC_m' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'cmTC_59c0a.' + /usr/bin/c++ -v -Wl,-v CMakeFiles/cmTC_59c0a.dir/CMakeCXXCompilerABI.cpp.o -o cmTC_59c0a + gmake[1]: Leaving directory '/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux-make/CMakeFiles/CMakeScratch/TryCompile-TaUG1t' + + exitCode: 0 + - + kind: "message-v1" + backtrace: + - "/usr/share/cmake/Modules/CMakeDetermineCompilerABI.cmake:182 (message)" + - "/usr/share/cmake/Modules/CMakeTestCXXCompiler.cmake:26 (CMAKE_DETERMINE_COMPILER_ABI)" + - "CMakeLists.txt:17 (project)" + message: | + Parsed CXX implicit include dir info: rv=done + found start of include info + found start of implicit include info + add: [/usr/lib/gcc/x86_64-redhat-linux/15/../../../../include/c++/15] + add: [/usr/lib/gcc/x86_64-redhat-linux/15/../../../../include/c++/15/x86_64-redhat-linux] + add: [/usr/lib/gcc/x86_64-redhat-linux/15/../../../../include/c++/15/backward] + add: [/usr/lib/gcc/x86_64-redhat-linux/15/include] + add: [/usr/local/include] + add: [/usr/include] + end of search list found + collapse include dir [/usr/lib/gcc/x86_64-redhat-linux/15/../../../../include/c++/15] ==> [/usr/include/c++/15] + collapse include dir [/usr/lib/gcc/x86_64-redhat-linux/15/../../../../include/c++/15/x86_64-redhat-linux] ==> [/usr/include/c++/15/x86_64-redhat-linux] + collapse include dir [/usr/lib/gcc/x86_64-redhat-linux/15/../../../../include/c++/15/backward] ==> [/usr/include/c++/15/backward] + collapse include dir [/usr/lib/gcc/x86_64-redhat-linux/15/include] ==> [/usr/lib/gcc/x86_64-redhat-linux/15/include] + collapse include dir [/usr/local/include] ==> [/usr/local/include] + collapse include dir [/usr/include] ==> [/usr/include] + implicit include dirs: [/usr/include/c++/15;/usr/include/c++/15/x86_64-redhat-linux;/usr/include/c++/15/backward;/usr/lib/gcc/x86_64-redhat-linux/15/include;/usr/local/include;/usr/include] + + + - + kind: "message-v1" + backtrace: + - "/usr/share/cmake/Modules/CMakeDetermineCompilerABI.cmake:218 (message)" + - "/usr/share/cmake/Modules/CMakeTestCXXCompiler.cmake:26 (CMAKE_DETERMINE_COMPILER_ABI)" + - "CMakeLists.txt:17 (project)" + message: | + Parsed CXX implicit link information: + link line regex: [^( *|.*[/\\])(ld[0-9]*(\\.[a-z]+)?|CMAKE_LINK_STARTFILE-NOTFOUND|([^/\\]+-)?ld|collect2)[^/\\]*( |$)] + linker tool regex: [^[ ]*(->|")?[ ]*(([^"]*[/\\])?(ld[0-9]*(\\.[a-z]+)?))("|,| |$)] + ignore line: [Change Dir: '/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux-make/CMakeFiles/CMakeScratch/TryCompile-TaUG1t'] + ignore line: [] + ignore line: [Run Build Command(s): /usr/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile cmTC_59c0a/fast] + ignore line: [/usr/bin/gmake -f CMakeFiles/cmTC_59c0a.dir/build.make CMakeFiles/cmTC_59c0a.dir/build] + ignore line: [gmake[1]: Entering directory '/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux-make/CMakeFiles/CMakeScratch/TryCompile-TaUG1t'] + ignore line: [Building CXX object CMakeFiles/cmTC_59c0a.dir/CMakeCXXCompilerABI.cpp.o] + ignore line: [/usr/bin/c++ -v -o CMakeFiles/cmTC_59c0a.dir/CMakeCXXCompilerABI.cpp.o -c /usr/share/cmake/Modules/CMakeCXXCompilerABI.cpp] + ignore line: [Using built-in specs.] + ignore line: [COLLECT_GCC=/usr/bin/c++] + ignore line: [OFFLOAD_TARGET_NAMES=nvptx-none:amdgcn-amdhsa] + ignore line: [OFFLOAD_TARGET_DEFAULT=1] + ignore line: [Target: x86_64-redhat-linux] + ignore line: [Configured with: ../configure --enable-bootstrap --enable-languages=c c++ fortran objc obj-c++ ada go d m2 cobol lto --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=https://bugzilla.redhat.com/ --enable-shared --enable-threads=posix --enable-checking=release --enable-multilib --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --with-gcc-major-version-only --enable-libstdcxx-backtrace --with-libstdcxx-zoneinfo=/usr/share/zoneinfo --with-linker-hash-style=gnu --enable-plugin --enable-initfini-array --with-isl=/builddir/build/BUILD/gcc-15.2.1-build/gcc-15.2.1-20260123/obj-x86_64-redhat-linux/isl-install --enable-offload-targets=nvptx-none amdgcn-amdhsa --enable-offload-defaulted --without-cuda-driver --enable-gnu-indirect-function --enable-cet --with-tune=generic --with-arch_32=i686 --build=x86_64-redhat-linux --with-build-config=bootstrap-lto --enable-link-serialization=1 --disable-libssp] + ignore line: [Thread model: posix] + ignore line: [Supported LTO compression algorithms: zlib zstd] + ignore line: [gcc version 15.2.1 20260123 (Red Hat 15.2.1-7) (GCC) ] + ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_59c0a.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_59c0a.dir/'] + ignore line: [ /usr/libexec/gcc/x86_64-redhat-linux/15/cc1plus -quiet -v -D_GNU_SOURCE /usr/share/cmake/Modules/CMakeCXXCompilerABI.cpp -quiet -dumpdir CMakeFiles/cmTC_59c0a.dir/ -dumpbase CMakeCXXCompilerABI.cpp.cpp -dumpbase-ext .cpp -mtune=generic -march=x86-64 -version -o /tmp/ccqkcr4l.s] + ignore line: [GNU C++17 (GCC) version 15.2.1 20260123 (Red Hat 15.2.1-7) (x86_64-redhat-linux)] + ignore line: [ compiled by GNU C version 15.2.1 20260123 (Red Hat 15.2.1-7) GMP version 6.3.0 MPFR version 4.2.2 MPC version 1.3.1 isl version isl-0.24-GMP] + ignore line: [] + ignore line: [GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072] + ignore line: [ignoring nonexistent directory "/usr/lib/gcc/x86_64-redhat-linux/15/include-fixed"] + ignore line: [ignoring nonexistent directory "/usr/lib/gcc/x86_64-redhat-linux/15/../../../../x86_64-redhat-linux/include"] + ignore line: [#include "..." search starts here:] + ignore line: [#include <...> search starts here:] + ignore line: [ /usr/lib/gcc/x86_64-redhat-linux/15/../../../../include/c++/15] + ignore line: [ /usr/lib/gcc/x86_64-redhat-linux/15/../../../../include/c++/15/x86_64-redhat-linux] + ignore line: [ /usr/lib/gcc/x86_64-redhat-linux/15/../../../../include/c++/15/backward] + ignore line: [ /usr/lib/gcc/x86_64-redhat-linux/15/include] + ignore line: [ /usr/local/include] + ignore line: [ /usr/include] + ignore line: [End of search list.] + ignore line: [Compiler executable checksum: 61fbb778c0a8c441a1c0ce3e680cc1db] + ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_59c0a.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_59c0a.dir/'] + ignore line: [ as -v --64 -o CMakeFiles/cmTC_59c0a.dir/CMakeCXXCompilerABI.cpp.o /tmp/ccqkcr4l.s] + ignore line: [GNU assembler version 2.45.1 (x86_64-redhat-linux) using BFD version version 2.45.1-4.fc43] + ignore line: [COMPILER_PATH=/usr/libexec/gcc/x86_64-redhat-linux/15/:/usr/libexec/gcc/x86_64-redhat-linux/15/:/usr/libexec/gcc/x86_64-redhat-linux/:/usr/lib/gcc/x86_64-redhat-linux/15/:/usr/lib/gcc/x86_64-redhat-linux/] + ignore line: [LIBRARY_PATH=/usr/lib/gcc/x86_64-redhat-linux/15/:/usr/lib/gcc/x86_64-redhat-linux/15/../../../../lib64/:/lib/../lib64/:/usr/lib/../lib64/:/usr/lib/gcc/x86_64-redhat-linux/15/../../../:/lib/:/usr/lib/] + ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_59c0a.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_59c0a.dir/CMakeCXXCompilerABI.cpp.'] + ignore line: [Linking CXX executable cmTC_59c0a] + ignore line: [/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_59c0a.dir/link.txt --verbose=1] + ignore line: [Using built-in specs.] + ignore line: [COLLECT_GCC=/usr/bin/c++] + ignore line: [COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-redhat-linux/15/lto-wrapper] + ignore line: [OFFLOAD_TARGET_NAMES=nvptx-none:amdgcn-amdhsa] + ignore line: [OFFLOAD_TARGET_DEFAULT=1] + ignore line: [Target: x86_64-redhat-linux] + ignore line: [Configured with: ../configure --enable-bootstrap --enable-languages=c c++ fortran objc obj-c++ ada go d m2 cobol lto --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=https://bugzilla.redhat.com/ --enable-shared --enable-threads=posix --enable-checking=release --enable-multilib --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --with-gcc-major-version-only --enable-libstdcxx-backtrace --with-libstdcxx-zoneinfo=/usr/share/zoneinfo --with-linker-hash-style=gnu --enable-plugin --enable-initfini-array --with-isl=/builddir/build/BUILD/gcc-15.2.1-build/gcc-15.2.1-20260123/obj-x86_64-redhat-linux/isl-install --enable-offload-targets=nvptx-none amdgcn-amdhsa --enable-offload-defaulted --without-cuda-driver --enable-gnu-indirect-function --enable-cet --with-tune=generic --with-arch_32=i686 --build=x86_64-redhat-linux --with-build-config=bootstrap-lto --enable-link-serialization=1 --disable-libssp] + ignore line: [Thread model: posix] + ignore line: [Supported LTO compression algorithms: zlib zstd] + ignore line: [gcc version 15.2.1 20260123 (Red Hat 15.2.1-7) (GCC) ] + ignore line: [COMPILER_PATH=/usr/libexec/gcc/x86_64-redhat-linux/15/:/usr/libexec/gcc/x86_64-redhat-linux/15/:/usr/libexec/gcc/x86_64-redhat-linux/:/usr/lib/gcc/x86_64-redhat-linux/15/:/usr/lib/gcc/x86_64-redhat-linux/] + ignore line: [LIBRARY_PATH=/usr/lib/gcc/x86_64-redhat-linux/15/:/usr/lib/gcc/x86_64-redhat-linux/15/../../../../lib64/:/lib/../lib64/:/usr/lib/../lib64/:/usr/lib/gcc/x86_64-redhat-linux/15/../../../:/lib/:/usr/lib/] + ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'cmTC_59c0a' '-foffload-options=-l_GCC_stdc++' '-foffload-options=-l_GCC_m' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'cmTC_59c0a.'] + link line: [ /usr/libexec/gcc/x86_64-redhat-linux/15/collect2 -plugin /usr/libexec/gcc/x86_64-redhat-linux/15/liblto_plugin.so -plugin-opt=/usr/libexec/gcc/x86_64-redhat-linux/15/lto-wrapper -plugin-opt=-fresolution=/tmp/ccUVnMWj.res -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc --build-id --no-add-needed --eh-frame-hdr --hash-style=gnu -m elf_x86_64 -dynamic-linker /lib64/ld-linux-x86-64.so.2 -o cmTC_59c0a /usr/lib/gcc/x86_64-redhat-linux/15/../../../../lib64/crt1.o /usr/lib/gcc/x86_64-redhat-linux/15/../../../../lib64/crti.o /usr/lib/gcc/x86_64-redhat-linux/15/crtbegin.o -L/usr/lib/gcc/x86_64-redhat-linux/15 -L/usr/lib/gcc/x86_64-redhat-linux/15/../../../../lib64 -L/lib/../lib64 -L/usr/lib/../lib64 -L/usr/lib/gcc/x86_64-redhat-linux/15/../../.. -L/lib -L/usr/lib -v CMakeFiles/cmTC_59c0a.dir/CMakeCXXCompilerABI.cpp.o -lstdc++ -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc /usr/lib/gcc/x86_64-redhat-linux/15/crtend.o /usr/lib/gcc/x86_64-redhat-linux/15/../../../../lib64/crtn.o] + arg [/usr/libexec/gcc/x86_64-redhat-linux/15/collect2] ==> ignore + arg [-plugin] ==> ignore + arg [/usr/libexec/gcc/x86_64-redhat-linux/15/liblto_plugin.so] ==> ignore + arg [-plugin-opt=/usr/libexec/gcc/x86_64-redhat-linux/15/lto-wrapper] ==> ignore + arg [-plugin-opt=-fresolution=/tmp/ccUVnMWj.res] ==> ignore + arg [-plugin-opt=-pass-through=-lgcc_s] ==> ignore + arg [-plugin-opt=-pass-through=-lgcc] ==> ignore + arg [-plugin-opt=-pass-through=-lc] ==> ignore + arg [-plugin-opt=-pass-through=-lgcc_s] ==> ignore + arg [-plugin-opt=-pass-through=-lgcc] ==> ignore + arg [--build-id] ==> ignore + arg [--no-add-needed] ==> ignore + arg [--eh-frame-hdr] ==> ignore + arg [--hash-style=gnu] ==> ignore + arg [-m] ==> ignore + arg [elf_x86_64] ==> ignore + arg [-dynamic-linker] ==> ignore + arg [/lib64/ld-linux-x86-64.so.2] ==> ignore + arg [-o] ==> ignore + arg [cmTC_59c0a] ==> ignore + arg [/usr/lib/gcc/x86_64-redhat-linux/15/../../../../lib64/crt1.o] ==> obj [/usr/lib/gcc/x86_64-redhat-linux/15/../../../../lib64/crt1.o] + arg [/usr/lib/gcc/x86_64-redhat-linux/15/../../../../lib64/crti.o] ==> obj [/usr/lib/gcc/x86_64-redhat-linux/15/../../../../lib64/crti.o] + arg [/usr/lib/gcc/x86_64-redhat-linux/15/crtbegin.o] ==> obj [/usr/lib/gcc/x86_64-redhat-linux/15/crtbegin.o] + arg [-L/usr/lib/gcc/x86_64-redhat-linux/15] ==> dir [/usr/lib/gcc/x86_64-redhat-linux/15] + arg [-L/usr/lib/gcc/x86_64-redhat-linux/15/../../../../lib64] ==> dir [/usr/lib/gcc/x86_64-redhat-linux/15/../../../../lib64] + arg [-L/lib/../lib64] ==> dir [/lib/../lib64] + arg [-L/usr/lib/../lib64] ==> dir [/usr/lib/../lib64] + arg [-L/usr/lib/gcc/x86_64-redhat-linux/15/../../..] ==> dir [/usr/lib/gcc/x86_64-redhat-linux/15/../../..] + arg [-L/lib] ==> dir [/lib] + arg [-L/usr/lib] ==> dir [/usr/lib] + arg [-v] ==> ignore + arg [CMakeFiles/cmTC_59c0a.dir/CMakeCXXCompilerABI.cpp.o] ==> ignore + arg [-lstdc++] ==> lib [stdc++] + arg [-lm] ==> lib [m] + arg [-lgcc_s] ==> lib [gcc_s] + arg [-lgcc] ==> lib [gcc] + arg [-lc] ==> lib [c] + arg [-lgcc_s] ==> lib [gcc_s] + arg [-lgcc] ==> lib [gcc] + arg [/usr/lib/gcc/x86_64-redhat-linux/15/crtend.o] ==> obj [/usr/lib/gcc/x86_64-redhat-linux/15/crtend.o] + arg [/usr/lib/gcc/x86_64-redhat-linux/15/../../../../lib64/crtn.o] ==> obj [/usr/lib/gcc/x86_64-redhat-linux/15/../../../../lib64/crtn.o] + ignore line: [collect2 version 15.2.1 20260123 (Red Hat 15.2.1-7)] + ignore line: [/usr/bin/ld -plugin /usr/libexec/gcc/x86_64-redhat-linux/15/liblto_plugin.so -plugin-opt=/usr/libexec/gcc/x86_64-redhat-linux/15/lto-wrapper -plugin-opt=-fresolution=/tmp/ccUVnMWj.res -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc --build-id --no-add-needed --eh-frame-hdr --hash-style=gnu -m elf_x86_64 -dynamic-linker /lib64/ld-linux-x86-64.so.2 -o cmTC_59c0a /usr/lib/gcc/x86_64-redhat-linux/15/../../../../lib64/crt1.o /usr/lib/gcc/x86_64-redhat-linux/15/../../../../lib64/crti.o /usr/lib/gcc/x86_64-redhat-linux/15/crtbegin.o -L/usr/lib/gcc/x86_64-redhat-linux/15 -L/usr/lib/gcc/x86_64-redhat-linux/15/../../../../lib64 -L/lib/../lib64 -L/usr/lib/../lib64 -L/usr/lib/gcc/x86_64-redhat-linux/15/../../.. -L/lib -L/usr/lib -v CMakeFiles/cmTC_59c0a.dir/CMakeCXXCompilerABI.cpp.o -lstdc++ -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc /usr/lib/gcc/x86_64-redhat-linux/15/crtend.o /usr/lib/gcc/x86_64-redhat-linux/15/../../../../lib64/crtn.o] + linker tool for 'CXX': /usr/bin/ld + collapse obj [/usr/lib/gcc/x86_64-redhat-linux/15/../../../../lib64/crt1.o] ==> [/usr/lib64/crt1.o] + collapse obj [/usr/lib/gcc/x86_64-redhat-linux/15/../../../../lib64/crti.o] ==> [/usr/lib64/crti.o] + collapse obj [/usr/lib/gcc/x86_64-redhat-linux/15/../../../../lib64/crtn.o] ==> [/usr/lib64/crtn.o] + collapse library dir [/usr/lib/gcc/x86_64-redhat-linux/15] ==> [/usr/lib/gcc/x86_64-redhat-linux/15] + collapse library dir [/usr/lib/gcc/x86_64-redhat-linux/15/../../../../lib64] ==> [/usr/lib64] + collapse library dir [/lib/../lib64] ==> [/lib64] + collapse library dir [/usr/lib/../lib64] ==> [/usr/lib64] + collapse library dir [/usr/lib/gcc/x86_64-redhat-linux/15/../../..] ==> [/usr/lib] + collapse library dir [/lib] ==> [/lib] + collapse library dir [/usr/lib] ==> [/usr/lib] + implicit libs: [stdc++;m;gcc_s;gcc;c;gcc_s;gcc] + implicit objs: [/usr/lib64/crt1.o;/usr/lib64/crti.o;/usr/lib/gcc/x86_64-redhat-linux/15/crtbegin.o;/usr/lib/gcc/x86_64-redhat-linux/15/crtend.o;/usr/lib64/crtn.o] + implicit dirs: [/usr/lib/gcc/x86_64-redhat-linux/15;/usr/lib64;/lib64;/usr/lib;/lib] + implicit fwks: [] + + + - + kind: "message-v1" + backtrace: + - "/usr/share/cmake/Modules/Internal/CMakeDetermineLinkerId.cmake:40 (message)" + - "/usr/share/cmake/Modules/CMakeDetermineCompilerABI.cmake:255 (cmake_determine_linker_id)" + - "/usr/share/cmake/Modules/CMakeTestCXXCompiler.cmake:26 (CMAKE_DETERMINE_COMPILER_ABI)" + - "CMakeLists.txt:17 (project)" + message: | + Running the CXX compiler's linker: "/usr/bin/ld" "-v" + GNU ld version 2.45.1-4.fc43 +... diff --git a/build-linux-make/CMakeFiles/cmake.check_cache b/build-linux-make/CMakeFiles/cmake.check_cache new file mode 100644 index 00000000..3dccd731 --- /dev/null +++ b/build-linux-make/CMakeFiles/cmake.check_cache @@ -0,0 +1 @@ +# This file is generated by cmake for dependency checking of the CMakeCache.txt file diff --git a/build-linux/.ninja_deps b/build-linux/.ninja_deps new file mode 100644 index 00000000..3eaec8d3 Binary files /dev/null and b/build-linux/.ninja_deps differ diff --git a/build-linux/.ninja_log b/build-linux/.ninja_log new file mode 100644 index 00000000..ff96a309 --- /dev/null +++ b/build-linux/.ninja_log @@ -0,0 +1,259 @@ +# ninja log v7 +6 279 1775899346193494303 tests/test_simple_autogen/timestamp f2ae9c654f705dbc +6 279 1775899346193494303 tests/test_simple_autogen/mocs_compilation.cpp f2ae9c654f705dbc +6 279 1775899346193494303 /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_simple_autogen/timestamp f2ae9c654f705dbc +6 279 1775899346193494303 /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_simple_autogen/mocs_compilation.cpp f2ae9c654f705dbc +6 284 1775899346198494377 tests/test_db_autogen/timestamp bdf226ac0d54b29b +6 284 1775899346198494377 tests/test_db_autogen/mocs_compilation.cpp bdf226ac0d54b29b +6 284 1775899346198494377 /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_db_autogen/timestamp bdf226ac0d54b29b +6 284 1775899346198494377 /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_db_autogen/mocs_compilation.cpp bdf226ac0d54b29b +279 551 1775899346466498368 tests/test_models_autogen/timestamp 61074c0675f3a0cf +279 551 1775899346466498368 tests/test_models_autogen/mocs_compilation.cpp 61074c0675f3a0cf +279 551 1775899346466498368 /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_models_autogen/timestamp 61074c0675f3a0cf +279 551 1775899346466498368 /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_models_autogen/mocs_compilation.cpp 61074c0675f3a0cf +7 710 1775901925598255547 kassetmanagerqt_autogen/timestamp db538b4d3e049768 +7 710 1775901925598255547 kassetmanagerqt_autogen/mocs_compilation.cpp db538b4d3e049768 +7 710 1775901925598255547 /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/kassetmanagerqt_autogen/timestamp db538b4d3e049768 +7 710 1775901925598255547 /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/kassetmanagerqt_autogen/mocs_compilation.cpp db538b4d3e049768 +284 549 1775899346464498338 tests/test_sequence_detector_autogen/timestamp c224186e7da4585d +284 549 1775899346464498338 tests/test_sequence_detector_autogen/mocs_compilation.cpp c224186e7da4585d +284 549 1775899346464498338 /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_sequence_detector_autogen/timestamp c224186e7da4585d +284 549 1775899346464498338 /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_sequence_detector_autogen/mocs_compilation.cpp c224186e7da4585d +549 826 1775899346741502463 tests/test_importer_autogen/timestamp 9766ddfd2f8c4be2 +549 826 1775899346741502463 tests/test_importer_autogen/mocs_compilation.cpp 9766ddfd2f8c4be2 +549 826 1775899346741502463 /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_importer_autogen/timestamp 9766ddfd2f8c4be2 +549 826 1775899346741502463 /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_importer_autogen/mocs_compilation.cpp 9766ddfd2f8c4be2 +551 813 1775899346728502270 tests/test_utils_autogen/timestamp 5178ce0e51944274 +551 813 1775899346728502270 tests/test_utils_autogen/mocs_compilation.cpp 5178ce0e51944274 +551 813 1775899346728502270 /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_utils_autogen/timestamp 5178ce0e51944274 +551 813 1775899346728502270 /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_utils_autogen/mocs_compilation.cpp 5178ce0e51944274 +813 1071 1775899346986506112 tests/test_live_preview_manager_autogen/timestamp d05729040e5ba41c +813 1071 1775899346986506112 tests/test_live_preview_manager_autogen/mocs_compilation.cpp d05729040e5ba41c +813 1071 1775899346986506112 /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_live_preview_manager_autogen/timestamp d05729040e5ba41c +813 1071 1775899346986506112 /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_live_preview_manager_autogen/mocs_compilation.cpp d05729040e5ba41c +826 1102 1775899347016506559 tests/test_media_converter_worker_autogen/timestamp c8e4fb136ea74bed +826 1102 1775899347016506559 tests/test_media_converter_worker_autogen/mocs_compilation.cpp c8e4fb136ea74bed +826 1102 1775899347016506559 /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_media_converter_worker_autogen/timestamp c8e4fb136ea74bed +826 1102 1775899347016506559 /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_media_converter_worker_autogen/mocs_compilation.cpp c8e4fb136ea74bed +216 1684 1775901594386955485 CMakeFiles/kassetmanagerqt.dir/src/main.cpp.o 5a57a4406faa9b1d +710 7191 1775901925604255638 CMakeFiles/kassetmanagerqt.dir/kassetmanagerqt_autogen/mocs_compilation.cpp.o a2b6468e8e82ce60 +710 13178 1775901925605439130 CMakeFiles/kassetmanagerqt.dir/src/mainwindow.cpp.o 4a660bdd67e9da7d +2 111 1775862727381844243 build.ninja 8b8169fcc37fff11 +1071 1333 1775899347248510014 tests/test_virtual_drag_autogen/timestamp 3591cb4b1162dbfd +1071 1333 1775899347248510014 tests/test_virtual_drag_autogen/mocs_compilation.cpp 3591cb4b1162dbfd +1071 1333 1775899347248510014 /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_virtual_drag_autogen/timestamp 3591cb4b1162dbfd +1071 1333 1775899347248510014 /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_virtual_drag_autogen/mocs_compilation.cpp 3591cb4b1162dbfd +7638 8073 1775864105485304613 CMakeFiles/kassetmanagerqt.dir/src/virtual_drag.cpp.o b152aa13e2822c9d +10828 13413 1775864108675339119 CMakeFiles/kassetmanagerqt.dir/src/project_db.cpp.o 823bdf8e47731081 +8073 10828 1775864105920309318 CMakeFiles/kassetmanagerqt.dir/src/db.cpp.o 9d5b8630fb9ceb0a +14901 16201 1775864112747383166 CMakeFiles/kassetmanagerqt.dir/src/project_version_detector.cpp.o c8a7730d480c2dbe +13413 15092 1775864111260367081 CMakeFiles/kassetmanagerqt.dir/src/project_import_worker.cpp.o 44ae8459eb5938b9 +15092 16402 1775864112938385232 CMakeFiles/kassetmanagerqt.dir/src/projects_model.cpp.o 491deb9fc61ed577 +16402 17893 1775864114248399402 CMakeFiles/kassetmanagerqt.dir/src/project_folders_model.cpp.o f5b1cf12acf2b00f +16201 18754 1775864114047397228 CMakeFiles/kassetmanagerqt.dir/src/project_assets_model.cpp.o bc827b29d1d48fa0 +17893 19305 1775864115739415530 CMakeFiles/kassetmanagerqt.dir/src/project_sequence_grouping_proxy_model.cpp.o b51eadca895d2a9c +18754 20260 1775864116600424844 CMakeFiles/kassetmanagerqt.dir/src/project_item_delegate.cpp.o f453ce3b0ec944fb +19305 21920 1775864117151430804 CMakeFiles/kassetmanagerqt.dir/src/project_manager_watcher.cpp.o 8653e669fbc2c41e +21445 23290 1775864119291453952 CMakeFiles/kassetmanagerqt.dir/src/virtual_folders.cpp.o efb6060e4825af24 +1102 1364 1775899347279510475 tests/test_drag_utils_autogen/timestamp 59c2fdb2c3a4e8b6 +1102 1364 1775899347279510475 tests/test_drag_utils_autogen/mocs_compilation.cpp 59c2fdb2c3a4e8b6 +1102 1364 1775899347279510475 /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_drag_utils_autogen/timestamp 59c2fdb2c3a4e8b6 +1102 1364 1775899347279510475 /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_drag_utils_autogen/mocs_compilation.cpp 59c2fdb2c3a4e8b6 +27870 28669 1775899373790578910 tests/CMakeFiles/test_drag_utils.dir/test_drag_utils_autogen/mocs_compilation.cpp.o 87f0ea4e4cdfd84e +28669 30738 1775899374588917164 tests/CMakeFiles/test_drag_utils.dir/test_drag_utils.cpp.o 850f2ff8b6a39510 +28976 30296 1775899374895921736 tests/CMakeFiles/test_drag_utils.dir/__/src/drag_utils.cpp.o ebb6d3bb647c5e41 +36668 36878 1775899382588036286 tests/test_drag_utils 4f1dfc4eee497ffc +20260 21445 1775864118106441134 CMakeFiles/kassetmanagerqt.dir/src/drag_utils.cpp.o 8566b459c6ff0069 +21920 24267 1775864119766459090 CMakeFiles/kassetmanagerqt.dir/src/assets_model.cpp.o 9233864c34a89032 +23290 25428 1775864121136473909 CMakeFiles/kassetmanagerqt.dir/src/importer.cpp.o 5e0bd619653a3785 +25428 26583 1775864123274497036 CMakeFiles/kassetmanagerqt.dir/src/log_manager.cpp.o e593975d6f26d7ba +24267 26690 1775864122113484478 CMakeFiles/kassetmanagerqt.dir/src/live_preview_manager.cpp.o 7cfb43139a0a8523 +26583 27640 1775864124429509530 CMakeFiles/kassetmanagerqt.dir/src/progress_manager.cpp.o 818ed8ba93d78e32 +27640 29186 1775864125486520963 CMakeFiles/kassetmanagerqt.dir/src/image_preview_overlay.cpp.o f6e938553c2c5cac +29186 30297 1775864127032537686 CMakeFiles/kassetmanagerqt.dir/src/import_progress_dialog.cpp.o 848d58c10c0eda0 +7191 12751 1775901932085353883 CMakeFiles/kassetmanagerqt.dir/src/preview_overlay.cpp.o 1c1b5fc2a1a7b92d +30297 32592 1775864128143549704 CMakeFiles/kassetmanagerqt.dir/src/settings_dialog.cpp.o 20e3a6af6ac114f +32013 33117 1775864129859568266 CMakeFiles/kassetmanagerqt.dir/src/user_guide_dialog.cpp.o c85da40bf5dfddf +32592 33721 1775864130438574529 CMakeFiles/kassetmanagerqt.dir/src/star_rating_widget.cpp.o 58fb8e528885d5ef +33117 35004 1775864130963580208 CMakeFiles/kassetmanagerqt.dir/src/sequence_detector.cpp.o 4b817be45f56976d +35004 36375 1775864132850600620 CMakeFiles/kassetmanagerqt.dir/src/asset_sequence_grouping_proxy_model.cpp.o c7c6288b798f336 +33721 36668 1775864131567586742 CMakeFiles/kassetmanagerqt.dir/src/sequence_grouping_proxy_model.cpp.o bf20d942f3756cf9 +36375 37988 1775864134221615450 CMakeFiles/kassetmanagerqt.dir/src/asset_grid_view.cpp.o 6e42b5128c962148 +36668 38308 1775864134514618620 CMakeFiles/kassetmanagerqt.dir/src/icon_utils.cpp.o 8ba9360af2ac9a3f +37988 39184 1775864135834632898 CMakeFiles/kassetmanagerqt.dir/src/file_utils.cpp.o e1522571c7eee9fd +38308 39696 1775864136154636359 CMakeFiles/kassetmanagerqt.dir/src/asset_item_delegate.cpp.o 2814c502561b9463 +39184 40516 1775864137030645835 CMakeFiles/kassetmanagerqt.dir/src/fm_item_delegate.cpp.o 49927a6ff6d18e58 +7023 8757 1775900502776763444 CMakeFiles/kassetmanagerqt.dir/src/grid_scrub.cpp.o 6ff5cf945abb7e58 +40517 41812 1775864138363660254 CMakeFiles/kassetmanagerqt.dir/src/scrub_frame_registry.cpp.o 681428652dbf2812 +41286 44046 1775864139132668572 CMakeFiles/kassetmanagerqt.dir/src/fm_views_ex.cpp.o ce67767419ec366d +12751 16461 1775901937645438167 CMakeFiles/kassetmanagerqt.dir/src/file_manager_pane.cpp.o 48d2027b737d72a4 +44046 45989 1775864141892698427 CMakeFiles/kassetmanagerqt.dir/src/oiio_image_loader.cpp.o a1cda51b0e976d6 +45461 47110 1775864143307713733 CMakeFiles/kassetmanagerqt.dir/src/project_folder_watcher.cpp.o 7af4aed0b17c916c +45989 47323 1775864143835719444 CMakeFiles/kassetmanagerqt.dir/src/log_viewer_widget.cpp.o f8b06a528f47dc6e +47110 47936 1775864144956731570 CMakeFiles/kassetmanagerqt.dir/src/video_metadata.cpp.o 219ad193521bc83b +47936 49346 1775864145782740505 CMakeFiles/kassetmanagerqt.dir/src/file_ops_dialog.cpp.o e3e451f602360926 +47323 49550 1775864145169733874 CMakeFiles/kassetmanagerqt.dir/src/file_ops.cpp.o 453e4cb8ff3235e4 +49346 50681 1775864147192755757 CMakeFiles/kassetmanagerqt.dir/src/office_preview.cpp.o d68ba03e2253d37 +49550 51373 1775864147396757964 CMakeFiles/kassetmanagerqt.dir/src/context_preserver.cpp.o 3d2cc3511631c6c8 +50681 52262 1775864148527770198 CMakeFiles/kassetmanagerqt.dir/src/database_health_agent.cpp.o bab7bac1482dc23e +51373 52825 1775864149219777683 CMakeFiles/kassetmanagerqt.dir/src/database_health_dialog.cpp.o ac0ddb6437b9d811 +52262 54343 1775864150108787299 CMakeFiles/kassetmanagerqt.dir/src/bulk_rename_dialog.cpp.o 4dfd8bd9edf27875 +1333 1584 1775899347499513751 tests/test_everything_search_autogen/timestamp 6e8ae8c4efeefe7c +1333 1584 1775899347499513751 tests/test_everything_search_autogen/mocs_compilation.cpp 6e8ae8c4efeefe7c +1333 1584 1775899347499513751 /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_everything_search_autogen/timestamp 6e8ae8c4efeefe7c +1333 1584 1775899347499513751 /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_everything_search_autogen/mocs_compilation.cpp 6e8ae8c4efeefe7c +30296 30301 1775899376215941393 tests/CMakeFiles/test_everything_search.dir/test_everything_search_autogen/mocs_compilation.cpp.o daed971148bf4c6 +30301 32241 1775899376221658594 tests/CMakeFiles/test_everything_search.dir/test_everything_search.cpp.o 7de1b135339eee81 +30738 31931 1775899376657947975 tests/CMakeFiles/test_everything_search.dir/__/src/everything_search.cpp.o 88d0f4078ed2d9a0 +36739 36828 1775899382659037343 tests/test_everything_search 8ff541cb1af6553f +52825 53881 1775864150671793389 CMakeFiles/kassetmanagerqt.dir/src/everything_search.cpp.o 965858330b6cd1b2 +54343 54533 1775864152189809810 CMakeFiles/kassetmanagerqt.dir/src/utils.cpp.o c97091dbad1ba824 +53881 56623 1775864151728180551 CMakeFiles/kassetmanagerqt.dir/src/everything_folder_model.cpp.o 562ecda2defa09c9 +54533 56420 1775864152379811865 CMakeFiles/kassetmanagerqt.dir/src/everything_search_dialog.cpp.o 90aa6f3fb1f40ae5 +56623 58491 1775864154469834472 CMakeFiles/kassetmanagerqt.dir/src/media_converter_worker.cpp.o 8c0a89d77e3a269c +58491 59849 1775864156337854678 CMakeFiles/kassetmanagerqt.dir/src/thumbnail_cache_manager.cpp.o 4c60ee806c683f4e +56420 58918 1775864154266832277 CMakeFiles/kassetmanagerqt.dir/src/media_convert_dialog.cpp.o bcf0d1be0684c666 +58918 60808 1775864156764859297 CMakeFiles/kassetmanagerqt.dir/src/thumbnail_generator_dialog.cpp.o c4c4eb5f4ade691b +59849 61900 1775864157695869368 CMakeFiles/kassetmanagerqt.dir/src/thumbnail_generator_worker.cpp.o 7a2d8b7ae1777eed +61900 64408 1775864159746891553 CMakeFiles/kassetmanagerqt.dir/src/media/tlrender_widget.cpp.o bd34c4a8a61b36fe +12559 15836 1775900508312846210 CMakeFiles/kassetmanagerqt.dir/src/media/tlrender_player.cpp.o 255b4351b69436d +64408 65547 1775864162254918683 CMakeFiles/kassetmanagerqt.dir/src/theme_manager.cpp.o d6ad2514b5130a85 +15053 17704 1775900510806883496 CMakeFiles/kassetmanagerqt.dir/src/media/tlrender_viewport.cpp.o ab06efaeb7c8a788 +65547 67070 1775864163393931003 CMakeFiles/kassetmanagerqt.dir/src/annotation_items.cpp.o 6c6068d5bb0478d6 +66239 67569 1775864164085938488 CMakeFiles/kassetmanagerqt.dir/src/annotation_layer.cpp.o 7c9118b8708a32dc +5482 6117 1775901622294657857 kassetmanagerqt 838f16765087fb01 +1364 1610 1775899347524514124 tests/test_icon_utils_autogen/timestamp 8d5ef5346af7bb6 +1364 1610 1775899347524514124 tests/test_icon_utils_autogen/mocs_compilation.cpp 8d5ef5346af7bb6 +1364 1610 1775899347524514124 /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_icon_utils_autogen/timestamp 8d5ef5346af7bb6 +1364 1610 1775899347524514124 /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_icon_utils_autogen/mocs_compilation.cpp 8d5ef5346af7bb6 +31932 31936 1775899377851965757 tests/CMakeFiles/test_icon_utils.dir/test_icon_utils_autogen/mocs_compilation.cpp.o f836436ff625a84f +32241 34053 1775899378160970358 tests/CMakeFiles/test_icon_utils.dir/__/src/icon_utils.cpp.o 540c6b3bc67c749e +31936 34003 1775899377856740217 tests/CMakeFiles/test_icon_utils.dir/test_icon_utils.cpp.o 9ae0a3a8e0fd2337 +36829 37031 1775899382749038683 tests/test_icon_utils 5d8ec3f3b0535a91 +7 271 1775900495760658553 tests/test_grid_scrub_autogen/timestamp 134b00945e747783 +7 271 1775900495760658553 tests/test_grid_scrub_autogen/mocs_compilation.cpp 134b00945e747783 +7 271 1775900495760658553 /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_grid_scrub_autogen/timestamp 134b00945e747783 +7 271 1775900495760658553 /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_grid_scrub_autogen/mocs_compilation.cpp 134b00945e747783 +34003 34008 1775899379922996598 tests/CMakeFiles/test_grid_scrub.dir/test_grid_scrub_autogen/mocs_compilation.cpp.o 5b1ed928a94b4a5c +15836 18207 1775900511589895202 tests/CMakeFiles/test_grid_scrub.dir/test_grid_scrub.cpp.o 9f930ab8d47a9262 +18868 19060 1775900514621940531 tests/test_grid_scrub d622c3bb79ced44 +216 468 1775900495969661677 tests/test_platform_session_autogen/timestamp aa03e8dbc23d9738 +216 468 1775900495969661677 tests/test_platform_session_autogen/mocs_compilation.cpp aa03e8dbc23d9738 +216 468 1775900495969661677 /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_platform_session_autogen/timestamp aa03e8dbc23d9738 +216 468 1775900495969661677 /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_platform_session_autogen/mocs_compilation.cpp aa03e8dbc23d9738 +34053 34058 1775899379972997343 tests/CMakeFiles/test_platform_session.dir/test_platform_session_autogen/mocs_compilation.cpp.o b936837552610741 +17704 19605 1775900513457923129 tests/CMakeFiles/test_platform_session.dir/test_platform_session.cpp.o 9d6913cdd3f9dc74 +19605 19676 1775900515358951550 tests/test_platform_session dc37108f6ee53b6d +32 357 1775898359986754638 tests/test_annotation_items_autogen/timestamp 48a7d274a90d7a15 +32 357 1775898359986754638 tests/test_annotation_items_autogen/mocs_compilation.cpp 48a7d274a90d7a15 +32 357 1775898359986754638 /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_annotation_items_autogen/timestamp 48a7d274a90d7a15 +32 357 1775898359986754638 /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_annotation_items_autogen/mocs_compilation.cpp 48a7d274a90d7a15 +357 364 1775898359991754711 tests/CMakeFiles/test_annotation_items.dir/test_annotation_items_autogen/mocs_compilation.cpp.o b08c9c2a493defcf +364 1847 1775898359998754815 tests/CMakeFiles/test_annotation_items.dir/__/src/annotation_items.cpp.o ca657ffc7de6f752 +357 2497 1775898359992882695 tests/CMakeFiles/test_annotation_items.dir/test_annotation_items.cpp.o 8630e5fe37b3520a +2497 2675 1775898362131786324 tests/test_annotation_items 2be7f9b7970091d4 +3 10 1775864091514153489 CMakeFiles/clean.additional ed445553f391cc45 +10 15 1775864091521153564 clean fd74750d5dc47f94 +1845 1851 1775899347765737716 tests/CMakeFiles/test_simple.dir/test_simple_autogen/mocs_compilation.cpp.o ad391549728d0108 +1862 3075 1775899347782770283 tests/CMakeFiles/test_db.dir/test_db_autogen/mocs_compilation.cpp.o aafe821c79b25d22 +1851 3712 1775899347770875150 tests/CMakeFiles/test_simple.dir/test_simple.cpp.o f8466aad61ba5d7f +3075 5003 1775899348994536015 tests/CMakeFiles/test_db.dir/test_db.cpp.o 7cee55a86b218955 +5003 6231 1775899350922564727 tests/CMakeFiles/test_db.dir/__/src/log_manager.cpp.o e03f8c8088301f5c +3713 6658 1775899349632545516 tests/CMakeFiles/test_db.dir/__/src/db.cpp.o 24c92ce9730a33fa +6231 7624 1775899352150583015 tests/CMakeFiles/test_models.dir/test_models_autogen/mocs_compilation.cpp.o 28ab3891f8dc1ac6 +6658 9029 1775899352577589374 tests/CMakeFiles/test_models.dir/test_models.cpp.o c4b3969bbe42b626 +7624 10048 1775899353543603759 tests/CMakeFiles/test_models.dir/__/src/assets_model.cpp.o 3d57b7083bd2bb31 +10048 11242 1775899355967639858 tests/CMakeFiles/test_models.dir/__/src/log_manager.cpp.o 3579f6ff789e275a +11242 11247 1775899357161657639 tests/CMakeFiles/test_sequence_detector.dir/test_sequence_detector_autogen/mocs_compilation.cpp.o 6a270bfaf88abe65 +9029 11954 1775899354948624683 tests/CMakeFiles/test_models.dir/__/src/db.cpp.o a20f301f3144f738 +11247 13218 1775899357167645872 tests/CMakeFiles/test_sequence_detector.dir/test_sequence_detector.cpp.o 346ab0f96ed92b41 +11955 14010 1775899357874668257 tests/CMakeFiles/test_sequence_detector.dir/__/src/sequence_detector.cpp.o e91ee4be9f7337fc +13218 14461 1775899359137687066 tests/CMakeFiles/test_importer.dir/test_importer_autogen/mocs_compilation.cpp.o 78d9bd3f622e12e9 +14010 16035 1775899359929698861 tests/CMakeFiles/test_importer.dir/test_importer.cpp.o 1c7f21fe19376589 +14461 16759 1775899360380705577 tests/CMakeFiles/test_importer.dir/__/src/importer.cpp.o ea8dccdc393e2cab +16759 17954 1775899362678739799 tests/CMakeFiles/test_importer.dir/__/src/log_manager.cpp.o 2c25e0b8493ff183 +16035 18983 1775899361954729017 tests/CMakeFiles/test_importer.dir/__/src/db.cpp.o 1a8002e5403c74e4 +18983 18988 1775899364902772919 tests/CMakeFiles/test_utils.dir/test_utils_autogen/mocs_compilation.cpp.o a9b774fcedc6e1a9 +17954 19989 1775899363873757595 tests/CMakeFiles/test_importer.dir/__/src/sequence_detector.cpp.o 449d0c177e5c1309 +18988 20822 1775899364908090610 tests/CMakeFiles/test_utils.dir/test_utils.cpp.o 8d4f0fc6336674d2 +19989 21213 1775899365908787900 tests/CMakeFiles/test_live_preview_manager.dir/test_live_preview_manager_autogen/mocs_compilation.cpp.o 413c4ea91c8d021 +20823 22833 1775899366742800320 tests/CMakeFiles/test_live_preview_manager.dir/test_live_preview_manager.cpp.o 3044c30bd1a203c3 +21213 23718 1775899367132806128 tests/CMakeFiles/test_live_preview_manager.dir/__/src/live_preview_manager.cpp.o 37bfb3967e918b8e +22833 24328 1775899368752830253 tests/CMakeFiles/test_live_preview_manager.dir/__/src/thumbnail_cache_manager.cpp.o dc52646d66d3e7e8 +24328 24521 1775899370247852517 tests/CMakeFiles/test_live_preview_manager.dir/__/src/utils.cpp.o 2bd79110a1e04f00 +23718 24841 1775899369637843433 tests/CMakeFiles/test_live_preview_manager.dir/__/src/oiio_image_loader.cpp.o 85031bca0487557b +24521 25422 1775899370440855391 tests/CMakeFiles/test_media_converter_worker.dir/test_media_converter_worker_autogen/mocs_compilation.cpp.o 7b57850b3b384590 +24841 26913 1775899370760860157 tests/CMakeFiles/test_media_converter_worker.dir/test_media_converter_worker.cpp.o 9fd27aa955d9b238 +26913 26918 1775899372832891013 tests/CMakeFiles/test_virtual_drag.dir/test_virtual_drag_autogen/mocs_compilation.cpp.o acea06e53ef840f1 +25422 27399 1775899371341868809 tests/CMakeFiles/test_media_converter_worker.dir/__/src/media_converter_worker.cpp.o d159e73d88850264 +27399 27870 1775899373318898251 tests/CMakeFiles/test_virtual_drag.dir/__/src/virtual_drag.cpp.o 9b686a60f5a5b84a +26918 28976 1775899372838859794 tests/CMakeFiles/test_virtual_drag.dir/test_virtual_drag.cpp.o 7f68882078a35fa4 +35890 35984 1775899381810024700 tests/test_simple ff631056b1ac82f +35984 36064 1775899381904026099 tests/test_db e0a0e2e74331ef51 +36064 36272 1775899381984027291 tests/test_models 4f9056cf443d59c4 +36272 36353 1775899382192030388 tests/test_sequence_detector 37f5b0b925d55e73 +36353 36418 1775899382273031595 tests/test_utils a9dadf1576c92d27 +36320 36533 1775899382240031103 tests/test_importer c2794f9fbf911c33 +36418 36584 1775899382338032563 tests/test_live_preview_manager 6e9fba943f1c44c6 +36584 36668 1775899382504035035 tests/test_virtual_drag 6866d3611a98e0a7 +36533 36739 1775899382453034275 tests/test_media_converter_worker bf7a95cd05453e59 +6 38 1775901952918669690 kassetmanagerqt_autogen/timestamp db538b4d3e049768 +6 38 1775901952918669690 kassetmanagerqt_autogen/mocs_compilation.cpp db538b4d3e049768 +6 38 1775901952918669690 /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/kassetmanagerqt_autogen/timestamp db538b4d3e049768 +6 38 1775901952918669690 /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/kassetmanagerqt_autogen/mocs_compilation.cpp db538b4d3e049768 +38 2570 1775901952949670160 CMakeFiles/kassetmanagerqt.dir/src/media/tlrender_viewport.cpp.o ab06efaeb7c8a788 +2570 3203 1775901955481708542 kassetmanagerqt 838f16765087fb01 +8 22 1775904186975683938 tests/test_live_preview_manager_autogen/timestamp d05729040e5ba41c +8 22 1775904186975683938 tests/test_live_preview_manager_autogen/mocs_compilation.cpp d05729040e5ba41c +8 22 1775904186975683938 /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_live_preview_manager_autogen/timestamp d05729040e5ba41c +8 22 1775904186975683938 /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_live_preview_manager_autogen/mocs_compilation.cpp d05729040e5ba41c +8 764 1775904187724376737 kassetmanagerqt_autogen/timestamp db538b4d3e049768 +8 764 1775904187724376737 kassetmanagerqt_autogen/mocs_compilation.cpp db538b4d3e049768 +8 764 1775904187724376737 /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/kassetmanagerqt_autogen/timestamp db538b4d3e049768 +8 764 1775904187724376737 /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/kassetmanagerqt_autogen/mocs_compilation.cpp db538b4d3e049768 +23 2669 1775904186990039474 tests/CMakeFiles/test_live_preview_manager.dir/__/src/live_preview_manager.cpp.o 37bfb3967e918b8e +764 7696 1775904187730376789 CMakeFiles/kassetmanagerqt.dir/kassetmanagerqt_autogen/mocs_compilation.cpp.o a2b6468e8e82ce60 +2669 15690 1775904189635393222 CMakeFiles/kassetmanagerqt.dir/src/mainwindow.cpp.o 4a660bdd67e9da7d +7 22 1775904222944680553 tests/test_live_preview_manager_autogen/timestamp d05729040e5ba41c +7 22 1775904222944680553 tests/test_live_preview_manager_autogen/mocs_compilation.cpp d05729040e5ba41c +7 22 1775904222944680553 /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_live_preview_manager_autogen/timestamp d05729040e5ba41c +7 22 1775904222944680553 /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_live_preview_manager_autogen/mocs_compilation.cpp d05729040e5ba41c +6 41 1775904222943680544 kassetmanagerqt_autogen/timestamp db538b4d3e049768 +6 41 1775904222943680544 kassetmanagerqt_autogen/mocs_compilation.cpp db538b4d3e049768 +6 41 1775904222943680544 /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/kassetmanagerqt_autogen/timestamp db538b4d3e049768 +6 41 1775904222943680544 /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/kassetmanagerqt_autogen/mocs_compilation.cpp db538b4d3e049768 +22 2565 1775904222959680682 tests/CMakeFiles/test_live_preview_manager.dir/__/src/live_preview_manager.cpp.o 37bfb3967e918b8e +41 2610 1775904222978680846 CMakeFiles/kassetmanagerqt.dir/src/live_preview_manager.cpp.o 7cfb43139a0a8523 +2610 2804 1775904225547703007 tests/test_live_preview_manager 6e9fba943f1c44c6 +2565 8436 1775904225502702619 CMakeFiles/kassetmanagerqt.dir/src/preview_overlay.cpp.o 1c1b5fc2a1a7b92d +8436 9085 1775904231373753263 kassetmanagerqt 838f16765087fb01 +7 38 1775904365384909271 kassetmanagerqt_autogen/timestamp db538b4d3e049768 +7 38 1775904365384909271 kassetmanagerqt_autogen/mocs_compilation.cpp db538b4d3e049768 +7 38 1775904365384909271 /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/kassetmanagerqt_autogen/timestamp db538b4d3e049768 +7 38 1775904365384909271 /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/kassetmanagerqt_autogen/mocs_compilation.cpp db538b4d3e049768 +38 5937 1775904365415909538 CMakeFiles/kassetmanagerqt.dir/src/preview_overlay.cpp.o 1c1b5fc2a1a7b92d +5937 6585 1775904371314960424 kassetmanagerqt 838f16765087fb01 +6 39 1775904828163636255 kassetmanagerqt_autogen/timestamp db538b4d3e049768 +6 39 1775904828163636255 kassetmanagerqt_autogen/mocs_compilation.cpp db538b4d3e049768 +6 39 1775904828163636255 /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/kassetmanagerqt_autogen/timestamp db538b4d3e049768 +6 39 1775904828163636255 /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/kassetmanagerqt_autogen/mocs_compilation.cpp db538b4d3e049768 +39 5607 1775904828196636717 CMakeFiles/kassetmanagerqt.dir/src/preview_overlay.cpp.o 1c1b5fc2a1a7b92d +5607 6246 1775904833764714572 kassetmanagerqt 838f16765087fb01 +6 39 1775904961963503282 kassetmanagerqt_autogen/timestamp db538b4d3e049768 +6 39 1775904961963503282 kassetmanagerqt_autogen/mocs_compilation.cpp db538b4d3e049768 +6 39 1775904961963503282 /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/kassetmanagerqt_autogen/timestamp db538b4d3e049768 +6 39 1775904961963503282 /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/kassetmanagerqt_autogen/mocs_compilation.cpp db538b4d3e049768 +39 5578 1775904961996503736 CMakeFiles/kassetmanagerqt.dir/src/preview_overlay.cpp.o 1c1b5fc2a1a7b92d +5578 6232 1775904967535579988 kassetmanagerqt 838f16765087fb01 +8 40 1775907633286401989 kassetmanagerqt_autogen/timestamp db538b4d3e049768 +8 40 1775907633286401989 kassetmanagerqt_autogen/mocs_compilation.cpp db538b4d3e049768 +8 40 1775907633286401989 /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/kassetmanagerqt_autogen/timestamp db538b4d3e049768 +8 40 1775907633286401989 /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/kassetmanagerqt_autogen/mocs_compilation.cpp db538b4d3e049768 +40 3178 1775907633318402552 CMakeFiles/kassetmanagerqt.dir/src/media/tlrender_player.cpp.o 255b4351b69436d +3178 3940 1775907636456457810 kassetmanagerqt 838f16765087fb01 +5 35 1775907646117627931 kassetmanagerqt_autogen/timestamp db538b4d3e049768 +5 35 1775907646117627931 kassetmanagerqt_autogen/mocs_compilation.cpp db538b4d3e049768 +5 35 1775907646117627931 /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/kassetmanagerqt_autogen/timestamp db538b4d3e049768 +5 35 1775907646117627931 /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/kassetmanagerqt_autogen/mocs_compilation.cpp db538b4d3e049768 +35 3039 1775907646147628459 CMakeFiles/kassetmanagerqt.dir/src/media/tlrender_player.cpp.o 255b4351b69436d +3040 3648 1775907649152681374 kassetmanagerqt 838f16765087fb01 diff --git a/build-linux/.qt/QtDeploySupport.cmake b/build-linux/.qt/QtDeploySupport.cmake new file mode 100644 index 00000000..af59bf19 --- /dev/null +++ b/build-linux/.qt/QtDeploySupport.cmake @@ -0,0 +1,72 @@ +cmake_minimum_required(VERSION 3.16...3.21) + +# These are part of the public API. Projects should use them to provide a +# consistent set of prefix-relative destinations. +if(NOT QT_DEPLOY_BIN_DIR) + set(QT_DEPLOY_BIN_DIR "bin") +endif() +if(NOT QT_DEPLOY_LIBEXEC_DIR) + set(QT_DEPLOY_LIBEXEC_DIR "libexec") +endif() +if(NOT QT_DEPLOY_LIB_DIR) + set(QT_DEPLOY_LIB_DIR "lib64") +endif() +if(NOT QT_DEPLOY_PLUGINS_DIR) + set(QT_DEPLOY_PLUGINS_DIR "lib64/qt6/plugins") +endif() +if(NOT QT_DEPLOY_QML_DIR) + set(QT_DEPLOY_QML_DIR "lib64/qt6/qml") +endif() +if(NOT QT_DEPLOY_TRANSLATIONS_DIR) + set(QT_DEPLOY_TRANSLATIONS_DIR "share/qt6/translations") +endif() +if(NOT QT_DEPLOY_PREFIX) + set(QT_DEPLOY_PREFIX "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}") +endif() +if(QT_DEPLOY_PREFIX STREQUAL "") + set(QT_DEPLOY_PREFIX .) +endif() +if(NOT QT_DEPLOY_IGNORED_LIB_DIRS) + set(QT_DEPLOY_IGNORED_LIB_DIRS "/lib64;/lib") +endif() + +# These are internal implementation details. They may be removed at any time. +set(__QT_DEPLOY_SYSTEM_NAME "Linux") +set(__QT_DEPLOY_SHARED_LIBRARY_SUFFIX ".so") +set(__QT_DEPLOY_IS_SHARED_LIBS_BUILD "ON") +set(__QT_DEPLOY_TOOL "GRD") +set(__QT_DEPLOY_IMPL_DIR "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/.qt") +set(__QT_DEPLOY_VERBOSE "") +set(__QT_CMAKE_EXPORT_NAMESPACE "Qt6") +set(__QT_LIBINFIX "") +set(__QT_DEPLOY_GENERATOR_IS_MULTI_CONFIG "0") +set(__QT_DEPLOY_ACTIVE_CONFIG "Release") +set(__QT_NO_CREATE_VERSIONLESS_FUNCTIONS "") +set(__QT_DEFAULT_MAJOR_VERSION "6") +set(__QT_DEPLOY_QT_ADDITIONAL_PACKAGES_PREFIX_PATH "") +set(__QT_DEPLOY_QT_INSTALL_PREFIX "/usr") +set(__QT_DEPLOY_QT_INSTALL_BINS "lib64/qt6/bin") +set(__QT_DEPLOY_QT_INSTALL_DATA "share/qt6") +set(__QT_DEPLOY_QT_INSTALL_DESCRIPTIONSDIR "lib64/qt6/modules") +set(__QT_DEPLOY_QT_INSTALL_LIBEXECS "lib64/qt6/libexec") +set(__QT_DEPLOY_QT_INSTALL_PLUGINS "lib64/qt6/plugins") +set(__QT_DEPLOY_QT_INSTALL_TRANSLATIONS "share/qt6/translations") +set(__QT_DEPLOY_TARGET_QT_PATHS_PATH "/usr/lib64/qt6/bin/qtpaths6") +set(__QT_DEPLOY_MUST_ADJUST_PLUGINS_RPATH "ON") +set(__QT_DEPLOY_USE_PATCHELF "") +set(__QT_DEPLOY_PATCHELF_EXECUTABLE "") +set(__QT_DEPLOY_QT_IS_MULTI_CONFIG_BUILD_WITH_DEBUG "FALSE") +set(__QT_DEPLOY_QT_DEBUG_POSTFIX "") + +# Define the CMake commands to be made available during deployment. +set(__qt_deploy_support_files + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/.qt/QtDeployTargets.cmake" + "/usr/lib64/cmake/Qt6Core/Qt6CoreDeploySupport.cmake" + "/usr/lib64/cmake/Qt6Qml/Qt6QmlDeploySupport.cmake" +) +foreach(__qt_deploy_support_file IN LISTS __qt_deploy_support_files) + include("${__qt_deploy_support_file}") +endforeach() + +unset(__qt_deploy_support_file) +unset(__qt_deploy_support_files) diff --git a/build-linux/.qt/QtDeployTargets.cmake b/build-linux/.qt/QtDeployTargets.cmake new file mode 100644 index 00000000..77f408ba --- /dev/null +++ b/build-linux/.qt/QtDeployTargets.cmake @@ -0,0 +1,32 @@ +set(__QT_DEPLOY_TARGET_test_simple_FILE /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_simple) +set(__QT_DEPLOY_TARGET_test_simple_TYPE EXECUTABLE) +set(__QT_DEPLOY_TARGET_test_db_FILE /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_db) +set(__QT_DEPLOY_TARGET_test_db_TYPE EXECUTABLE) +set(__QT_DEPLOY_TARGET_test_models_FILE /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_models) +set(__QT_DEPLOY_TARGET_test_models_TYPE EXECUTABLE) +set(__QT_DEPLOY_TARGET_test_sequence_detector_FILE /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_sequence_detector) +set(__QT_DEPLOY_TARGET_test_sequence_detector_TYPE EXECUTABLE) +set(__QT_DEPLOY_TARGET_test_importer_FILE /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_importer) +set(__QT_DEPLOY_TARGET_test_importer_TYPE EXECUTABLE) +set(__QT_DEPLOY_TARGET_test_utils_FILE /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_utils) +set(__QT_DEPLOY_TARGET_test_utils_TYPE EXECUTABLE) +set(__QT_DEPLOY_TARGET_test_live_preview_manager_FILE /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_live_preview_manager) +set(__QT_DEPLOY_TARGET_test_live_preview_manager_TYPE EXECUTABLE) +set(__QT_DEPLOY_TARGET_test_media_converter_worker_FILE /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_media_converter_worker) +set(__QT_DEPLOY_TARGET_test_media_converter_worker_TYPE EXECUTABLE) +set(__QT_DEPLOY_TARGET_test_virtual_drag_FILE /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_virtual_drag) +set(__QT_DEPLOY_TARGET_test_virtual_drag_TYPE EXECUTABLE) +set(__QT_DEPLOY_TARGET_test_drag_utils_FILE /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_drag_utils) +set(__QT_DEPLOY_TARGET_test_drag_utils_TYPE EXECUTABLE) +set(__QT_DEPLOY_TARGET_test_everything_search_FILE /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_everything_search) +set(__QT_DEPLOY_TARGET_test_everything_search_TYPE EXECUTABLE) +set(__QT_DEPLOY_TARGET_test_icon_utils_FILE /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_icon_utils) +set(__QT_DEPLOY_TARGET_test_icon_utils_TYPE EXECUTABLE) +set(__QT_DEPLOY_TARGET_test_grid_scrub_FILE /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_grid_scrub) +set(__QT_DEPLOY_TARGET_test_grid_scrub_TYPE EXECUTABLE) +set(__QT_DEPLOY_TARGET_test_platform_session_FILE /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_platform_session) +set(__QT_DEPLOY_TARGET_test_platform_session_TYPE EXECUTABLE) +set(__QT_DEPLOY_TARGET_test_annotation_items_FILE /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_annotation_items) +set(__QT_DEPLOY_TARGET_test_annotation_items_TYPE EXECUTABLE) +set(__QT_DEPLOY_TARGET_kassetmanagerqt_FILE /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/kassetmanagerqt) +set(__QT_DEPLOY_TARGET_kassetmanagerqt_TYPE EXECUTABLE) diff --git a/build-linux/CMakeCache.txt b/build-linux/CMakeCache.txt new file mode 100644 index 00000000..c7ea72c9 --- /dev/null +++ b/build-linux/CMakeCache.txt @@ -0,0 +1,2085 @@ +# This is the CMakeCache file. +# For build in directory: /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux +# It was generated by CMake: /usr/bin/cmake +# You can edit this file to change values found and used by cmake. +# If you do not want to change any of the values, simply exit the editor. +# If you do want to change a value, simply edit, save, and exit the editor. +# The syntax for the file is as follows: +# KEY:TYPE=VALUE +# KEY is the name of a variable in the cache. +# TYPE is a hint to GUIs for the type of VALUE, DO NOT EDIT TYPE!. +# VALUE is the current value for the KEY. + +######################## +# EXTERNAL cache entries +######################## + +//Build main application +BUILD_APP:BOOL=ON + +//Build unit tests +BUILD_TESTS:BOOL=ON + +//Path to a program. +CMAKE_ADDR2LINE:FILEPATH=/usr/bin/addr2line + +//Path to a program. +CMAKE_AR:FILEPATH=/usr/bin/ar + +//Choose the type of build, options are: None Debug Release RelWithDebInfo +// MinSizeRel ... +CMAKE_BUILD_TYPE:STRING=Release + +//CXX compiler +CMAKE_CXX_COMPILER:FILEPATH=/usr/bin/c++ + +//A wrapper around 'ar' adding the appropriate '--plugin' option +// for the GCC compiler +CMAKE_CXX_COMPILER_AR:FILEPATH=/usr/bin/gcc-ar + +//A wrapper around 'ranlib' adding the appropriate '--plugin' option +// for the GCC compiler +CMAKE_CXX_COMPILER_RANLIB:FILEPATH=/usr/bin/gcc-ranlib + +//Flags used by the CXX compiler during all build types. +CMAKE_CXX_FLAGS:STRING= + +//Flags used by the CXX compiler during DEBUG builds. +CMAKE_CXX_FLAGS_DEBUG:STRING=-g + +//Flags used by the CXX compiler during MINSIZEREL builds. +CMAKE_CXX_FLAGS_MINSIZEREL:STRING=-Os -DNDEBUG + +//Flags used by the CXX compiler during RELEASE builds. +CMAKE_CXX_FLAGS_RELEASE:STRING=-O3 -DNDEBUG + +//Flags used by the CXX compiler during RELWITHDEBINFO builds. +CMAKE_CXX_FLAGS_RELWITHDEBINFO:STRING=-O2 -g -DNDEBUG + +//Path to a program. +CMAKE_DLLTOOL:FILEPATH=CMAKE_DLLTOOL-NOTFOUND + +//Flags used by the linker during all build types. +CMAKE_EXE_LINKER_FLAGS:STRING= + +//Flags used by the linker during DEBUG builds. +CMAKE_EXE_LINKER_FLAGS_DEBUG:STRING= + +//Flags used by the linker during MINSIZEREL builds. +CMAKE_EXE_LINKER_FLAGS_MINSIZEREL:STRING= + +//Flags used by the linker during RELEASE builds. +CMAKE_EXE_LINKER_FLAGS_RELEASE:STRING= + +//Flags used by the linker during RELWITHDEBINFO builds. +CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO:STRING= + +//Enable/Disable output of build database during the build. +CMAKE_EXPORT_BUILD_DATABASE:BOOL= + +//Enable/Disable output of compile commands during generation. +CMAKE_EXPORT_COMPILE_COMMANDS:BOOL= + +//Value Computed by CMake. +CMAKE_FIND_PACKAGE_REDIRECTS_DIR:STATIC=/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/CMakeFiles/pkgRedirects + +//User executables (bin) +CMAKE_INSTALL_BINDIR:PATH=bin + +//Read-only architecture-independent data (DATAROOTDIR) +CMAKE_INSTALL_DATADIR:PATH= + +//Read-only architecture-independent data root (share) +CMAKE_INSTALL_DATAROOTDIR:PATH=share + +//Documentation root (DATAROOTDIR/doc/PROJECT_NAME) +CMAKE_INSTALL_DOCDIR:PATH= + +//C header files (include) +CMAKE_INSTALL_INCLUDEDIR:PATH=include + +//Info documentation (DATAROOTDIR/info) +CMAKE_INSTALL_INFODIR:PATH= + +//Object code libraries (lib64) +CMAKE_INSTALL_LIBDIR:PATH=lib64 + +//Program executables (libexec) +CMAKE_INSTALL_LIBEXECDIR:PATH=libexec + +//Locale-dependent data (DATAROOTDIR/locale) +CMAKE_INSTALL_LOCALEDIR:PATH= + +//Modifiable single-machine data (var) +CMAKE_INSTALL_LOCALSTATEDIR:PATH=var + +//Man documentation (DATAROOTDIR/man) +CMAKE_INSTALL_MANDIR:PATH= + +//C header files for non-gcc (/usr/include) +CMAKE_INSTALL_OLDINCLUDEDIR:PATH=/usr/include + +//Install path prefix, prepended onto install directories. +CMAKE_INSTALL_PREFIX:PATH=/usr/local + +//Run-time variable data (LOCALSTATEDIR/run) +CMAKE_INSTALL_RUNSTATEDIR:PATH= + +//System admin executables (sbin) +CMAKE_INSTALL_SBINDIR:PATH=sbin + +//Modifiable architecture-independent data (com) +CMAKE_INSTALL_SHAREDSTATEDIR:PATH=com + +//Read-only single-machine data (etc) +CMAKE_INSTALL_SYSCONFDIR:PATH=etc + +//Path to a program. +CMAKE_LINKER:FILEPATH=/usr/bin/ld + +//Program used to build from build.ninja files. +CMAKE_MAKE_PROGRAM:FILEPATH=/usr/bin/ninja-build + +//Flags used by the linker during the creation of modules during +// all build types. +CMAKE_MODULE_LINKER_FLAGS:STRING= + +//Flags used by the linker during the creation of modules during +// DEBUG builds. +CMAKE_MODULE_LINKER_FLAGS_DEBUG:STRING= + +//Flags used by the linker during the creation of modules during +// MINSIZEREL builds. +CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL:STRING= + +//Flags used by the linker during the creation of modules during +// RELEASE builds. +CMAKE_MODULE_LINKER_FLAGS_RELEASE:STRING= + +//Flags used by the linker during the creation of modules during +// RELWITHDEBINFO builds. +CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO:STRING= + +//Path to a program. +CMAKE_NM:FILEPATH=/usr/bin/nm + +//Path to a program. +CMAKE_OBJCOPY:FILEPATH=/usr/bin/objcopy + +//Path to a program. +CMAKE_OBJDUMP:FILEPATH=/usr/bin/objdump + +//Value Computed by CMake +CMAKE_PROJECT_DESCRIPTION:STATIC= + +//Value Computed by CMake +CMAKE_PROJECT_HOMEPAGE_URL:STATIC= + +//Value Computed by CMake +CMAKE_PROJECT_NAME:STATIC=KAssetManagerQt + +//Value Computed by CMake +CMAKE_PROJECT_VERSION:STATIC=1.8.5 + +//Value Computed by CMake +CMAKE_PROJECT_VERSION_MAJOR:STATIC=1 + +//Value Computed by CMake +CMAKE_PROJECT_VERSION_MINOR:STATIC=8 + +//Value Computed by CMake +CMAKE_PROJECT_VERSION_PATCH:STATIC=5 + +//Value Computed by CMake +CMAKE_PROJECT_VERSION_TWEAK:STATIC= + +//Path to a program. +CMAKE_RANLIB:FILEPATH=/usr/bin/ranlib + +//Path to a program. +CMAKE_READELF:FILEPATH=/usr/bin/readelf + +//Flags used by the linker during the creation of shared libraries +// during all build types. +CMAKE_SHARED_LINKER_FLAGS:STRING= + +//Flags used by the linker during the creation of shared libraries +// during DEBUG builds. +CMAKE_SHARED_LINKER_FLAGS_DEBUG:STRING= + +//Flags used by the linker during the creation of shared libraries +// during MINSIZEREL builds. +CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL:STRING= + +//Flags used by the linker during the creation of shared libraries +// during RELEASE builds. +CMAKE_SHARED_LINKER_FLAGS_RELEASE:STRING= + +//Flags used by the linker during the creation of shared libraries +// during RELWITHDEBINFO builds. +CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO:STRING= + +//If set, runtime paths are not added when installing shared libraries, +// but are added when building. +CMAKE_SKIP_INSTALL_RPATH:BOOL=NO + +//If set, runtime paths are not added when using shared libraries. +CMAKE_SKIP_RPATH:BOOL=NO + +//Flags used by the linker during the creation of static libraries +// during all build types. +CMAKE_STATIC_LINKER_FLAGS:STRING= + +//Flags used by the linker during the creation of static libraries +// during DEBUG builds. +CMAKE_STATIC_LINKER_FLAGS_DEBUG:STRING= + +//Flags used by the linker during the creation of static libraries +// during MINSIZEREL builds. +CMAKE_STATIC_LINKER_FLAGS_MINSIZEREL:STRING= + +//Flags used by the linker during the creation of static libraries +// during RELEASE builds. +CMAKE_STATIC_LINKER_FLAGS_RELEASE:STRING= + +//Flags used by the linker during the creation of static libraries +// during RELWITHDEBINFO builds. +CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO:STRING= + +//Path to a program. +CMAKE_STRIP:FILEPATH=/usr/bin/strip + +//Path to a program. +CMAKE_TAPI:FILEPATH=CMAKE_TAPI-NOTFOUND + +//If this value is on, makefiles will be generated without the +// .SILENT directive, and all commands will be echoed to the console +// during the make. This is useful for debugging only. With Visual +// Studio IDE projects all commands are done without /nologo. +CMAKE_VERBOSE_MAKEFILE:BOOL=FALSE + +//Enable to build RPM source packages +CPACK_SOURCE_RPM:BOOL=OFF + +//Enable to build TBZ2 source packages +CPACK_SOURCE_TBZ2:BOOL=ON + +//Enable to build TGZ source packages +CPACK_SOURCE_TGZ:BOOL=ON + +//Enable to build TXZ source packages +CPACK_SOURCE_TXZ:BOOL=ON + +//Enable to build TZ source packages +CPACK_SOURCE_TZ:BOOL=ON + +//Enable to build ZIP source packages +CPACK_SOURCE_ZIP:BOOL=OFF + +//Enable AddressSanitizer (Clang/GCC only) +ENABLE_ASAN:BOOL=OFF + +//Enable clang-tidy static analysis +ENABLE_CLANG_TIDY:BOOL=OFF + +//Enable code coverage flags (GCC/Clang only) +ENABLE_COVERAGE:BOOL=OFF + +//Enable UndefinedBehaviorSanitizer (Clang/GCC only) +ENABLE_UBSAN:BOOL=OFF + +//Path to a file. +FREETYPE_INCLUDE_DIR_freetype2:PATH=/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/freetype2 + +//Path to a file. +FREETYPE_INCLUDE_DIR_ft2build:PATH=/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/freetype2 + +//Path to a library. +FREETYPE_LIBRARY_DEBUG:FILEPATH=FREETYPE_LIBRARY_DEBUG-NOTFOUND + +//Path to a library. +FREETYPE_LIBRARY_RELEASE:FILEPATH=/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/libfreetype.a + +//The directory containing a CMake configuration file for Imath. +Imath_DIR:PATH=/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/Imath + +//Path to a file. +JPEG_INCLUDE_DIR:PATH=/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include + +//Path to a library. +JPEG_LIBRARY_DEBUG:FILEPATH=JPEG_LIBRARY_DEBUG-NOTFOUND + +//Path to a library. +JPEG_LIBRARY_RELEASE:FILEPATH=/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/libjpeg.a + +//Value Computed by CMake +KAssetManagerQt_BINARY_DIR:STATIC=/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux + +//Value Computed by CMake +KAssetManagerQt_IS_TOP_LEVEL:STATIC=ON + +//Value Computed by CMake +KAssetManagerQt_SOURCE_DIR:STATIC=/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6 + +//Path to a file. +OPENGL_EGL_INCLUDE_DIR:PATH=/usr/include + +//Path to a file. +OPENGL_GLES2_INCLUDE_DIR:PATH=/usr/include + +//Path to a file. +OPENGL_GLES3_INCLUDE_DIR:PATH=/usr/include + +//Path to a file. +OPENGL_GLU_INCLUDE_DIR:PATH=OPENGL_GLU_INCLUDE_DIR-NOTFOUND + +//Path to a file. +OPENGL_GLX_INCLUDE_DIR:PATH=/usr/include + +//Path to a file. +OPENGL_INCLUDE_DIR:PATH=/usr/include + +//Path to a library. +OPENGL_egl_LIBRARY:FILEPATH=/usr/lib64/libEGL.so + +//Path to a library. +OPENGL_gles2_LIBRARY:FILEPATH=/usr/lib64/libGLESv2.so + +//Path to a library. +OPENGL_gles3_LIBRARY:FILEPATH=/usr/lib64/libGLESv2.so + +//Path to a library. +OPENGL_glu_LIBRARY:FILEPATH=OPENGL_glu_LIBRARY-NOTFOUND + +//Path to a library. +OPENGL_glx_LIBRARY:FILEPATH=/usr/lib64/libGLX.so + +//Path to a library. +OPENGL_opengl_LIBRARY:FILEPATH=/usr/lib64/libOpenGL.so + +//Path to a file. +OPENGL_xmesa_INCLUDE_DIR:PATH=OPENGL_xmesa_INCLUDE_DIR-NOTFOUND + +//The directory containing a CMake configuration file for OpenColorIO. +OpenColorIO_DIR:PATH=/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/OpenColorIO + +//The directory containing a CMake configuration file for OpenEXR. +OpenEXR_DIR:PATH=/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/OpenEXR + +//The directory containing a CMake configuration file for OpenImageIO. +OpenImageIO_DIR:PATH=/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/OpenImageIO + +//The directory containing a CMake configuration file for OpenTime. +OpenTime_DIR:PATH=/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/share/opentime + +//The directory containing a CMake configuration file for OpenTimelineIO. +OpenTimelineIO_DIR:PATH=/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/share/opentimelineio + +//Arguments to supply to pkg-config +PKG_CONFIG_ARGN:STRING= + +//pkg-config executable +PKG_CONFIG_EXECUTABLE:FILEPATH=/usr/bin/pkg-config + +//Path to a library. +PNG_LIBRARY_DEBUG:FILEPATH=PNG_LIBRARY_DEBUG-NOTFOUND + +//Path to a library. +PNG_LIBRARY_RELEASE:FILEPATH=/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/libpng.a + +//Path to a file. +PNG_PNG_INCLUDE_DIR:PATH=/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include + +//Additional directories where find(Qt6 ...) host Qt components +// are searched +QT_ADDITIONAL_HOST_PACKAGES_PREFIX_PATH:STRING= + +//Additional directories where find(Qt6 ...) components are searched +QT_ADDITIONAL_PACKAGES_PREFIX_PATH:STRING= + +//The directory containing a CMake configuration file for QT. +QT_DIR:PATH=/usr/lib64/cmake/Qt6 + +//The directory containing a CMake configuration file for Qt6Concurrent. +Qt6Concurrent_DIR:PATH=/usr/lib64/cmake/Qt6Concurrent + +//The directory containing a CMake configuration file for Qt6CoreTools. +Qt6CoreTools_DIR:PATH=/usr/lib64/cmake/Qt6CoreTools + +//The directory containing a CMake configuration file for Qt6Core. +Qt6Core_DIR:PATH=/usr/lib64/cmake/Qt6Core + +//The directory containing a CMake configuration file for Qt6DBusTools. +Qt6DBusTools_DIR:PATH=/usr/lib64/cmake/Qt6DBusTools + +//The directory containing a CMake configuration file for Qt6DBus. +Qt6DBus_DIR:PATH=/usr/lib64/cmake/Qt6DBus + +//The directory containing a CMake configuration file for Qt6GuiTools. +Qt6GuiTools_DIR:PATH=/usr/lib64/cmake/Qt6GuiTools + +//The directory containing a CMake configuration file for Qt6Gui. +Qt6Gui_DIR:PATH=/usr/lib64/cmake/Qt6Gui + +//The directory containing a CMake configuration file for Qt6MultimediaWidgets. +Qt6MultimediaWidgets_DIR:PATH=/usr/lib64/cmake/Qt6MultimediaWidgets + +//The directory containing a CMake configuration file for Qt6Multimedia. +Qt6Multimedia_DIR:PATH=/usr/lib64/cmake/Qt6Multimedia + +//The directory containing a CMake configuration file for Qt6Network. +Qt6Network_DIR:PATH=/usr/lib64/cmake/Qt6Network + +//The directory containing a CMake configuration file for Qt6OpenGLWidgets. +Qt6OpenGLWidgets_DIR:PATH=/usr/lib64/cmake/Qt6OpenGLWidgets + +//The directory containing a CMake configuration file for Qt6OpenGL. +Qt6OpenGL_DIR:PATH=/usr/lib64/cmake/Qt6OpenGL + +//The directory containing a CMake configuration file for Qt6PdfWidgets. +Qt6PdfWidgets_DIR:PATH=/usr/lib64/cmake/Qt6PdfWidgets + +//The directory containing a CMake configuration file for Qt6Pdf. +Qt6Pdf_DIR:PATH=/usr/lib64/cmake/Qt6Pdf + +//The directory containing a CMake configuration file for Qt6QmlCompilerPlusPrivateTools. +Qt6QmlCompilerPlusPrivateTools_DIR:PATH=Qt6QmlCompilerPlusPrivateTools_DIR-NOTFOUND + +//The directory containing a CMake configuration file for Qt6QmlIntegration. +Qt6QmlIntegration_DIR:PATH=/usr/lib64/cmake/Qt6QmlIntegration + +//The directory containing a CMake configuration file for Qt6QmlMeta. +Qt6QmlMeta_DIR:PATH=/usr/lib64/cmake/Qt6QmlMeta + +//The directory containing a CMake configuration file for Qt6QmlModels. +Qt6QmlModels_DIR:PATH=/usr/lib64/cmake/Qt6QmlModels + +//The directory containing a CMake configuration file for Qt6QmlTools. +Qt6QmlTools_DIR:PATH=/usr/lib64/cmake/Qt6QmlTools + +//The directory containing a CMake configuration file for Qt6QmlWorkerScript. +Qt6QmlWorkerScript_DIR:PATH=/usr/lib64/cmake/Qt6QmlWorkerScript + +//The directory containing a CMake configuration file for Qt6Qml. +Qt6Qml_DIR:PATH=/usr/lib64/cmake/Qt6Qml + +//The directory containing a CMake configuration file for Qt6QuickTools. +Qt6QuickTools_DIR:PATH=/usr/lib64/cmake/Qt6QuickTools + +//The directory containing a CMake configuration file for Qt6Quick. +Qt6Quick_DIR:PATH=/usr/lib64/cmake/Qt6Quick + +//The directory containing a CMake configuration file for Qt6Sql. +Qt6Sql_DIR:PATH=/usr/lib64/cmake/Qt6Sql + +//The directory containing a CMake configuration file for Qt6SvgWidgets. +Qt6SvgWidgets_DIR:PATH=/usr/lib64/cmake/Qt6SvgWidgets + +//The directory containing a CMake configuration file for Qt6Svg. +Qt6Svg_DIR:PATH=/usr/lib64/cmake/Qt6Svg + +//The directory containing a CMake configuration file for Qt6Test. +Qt6Test_DIR:PATH=/usr/lib64/cmake/Qt6Test + +//The directory containing a CMake configuration file for Qt6WidgetsTools. +Qt6WidgetsTools_DIR:PATH=/usr/lib64/cmake/Qt6WidgetsTools + +//The directory containing a CMake configuration file for Qt6Widgets. +Qt6Widgets_DIR:PATH=/usr/lib64/cmake/Qt6Widgets + +//The directory containing a CMake configuration file for Qt6. +Qt6_DIR:PATH=/usr/lib64/cmake/Qt6 + +//The directory containing a CMake configuration file for SDL2. +SDL2_DIR:PATH=/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/SDL2 + +//Path to a file. +TIFF_INCLUDE_DIR:PATH=/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include + +//Path to a library. +TIFF_LIBRARY_DEBUG:FILEPATH=TIFF_LIBRARY_DEBUG-NOTFOUND + +//Path to a library. +TIFF_LIBRARY_RELEASE:FILEPATH=/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/libtiff.a + +//The directory containing a CMake configuration file for Tiff. +Tiff_DIR:PATH=Tiff_DIR-NOTFOUND + +//Path to a program. +Vulkan_GLSLANG_VALIDATOR_EXECUTABLE:FILEPATH=/bin/glslangValidator + +//Path to a program. +Vulkan_GLSLC_EXECUTABLE:FILEPATH=Vulkan_GLSLC_EXECUTABLE-NOTFOUND + +//Path to a file. +Vulkan_INCLUDE_DIR:PATH=/usr/include + +//Path to a library. +Vulkan_LIBRARY:FILEPATH=/lib64/libvulkan.so + +//ZLIB include dir +ZLIB_INCLUDE_DIR:PATH=/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include + +//ZLIB library +ZLIB_LIBRARY:FILEPATH=/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/libz.a + +//ZLIB Release library +ZLIB_LIBRARY_RELEASE:FILEPATH=/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/libz.a + +//ZLIB root +ZLIB_ROOT:PATH=/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release + +//The directory containing a CMake configuration file for expat. +expat_DIR:PATH=/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/expat-2.7.2 + +//The directory containing a CMake configuration file for ftk. +ftk_DIR:PATH=/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/ftk + +//The directory containing a CMake configuration file for libjpeg-turbo. +libjpeg-turbo_DIR:PATH=/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/libjpeg-turbo + +//The directory containing a CMake configuration file for lunasvg. +lunasvg_DIR:PATH=/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/lunasvg + +//The directory containing a CMake configuration file for minizip-ng. +minizip-ng_DIR:PATH=/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/minizip-ng + +//The directory containing a CMake configuration file for nlohmann_json. +nlohmann_json_DIR:PATH=/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/share/cmake/nlohmann_json + +//Path to a library. +pkgcfg_lib_FFmpeg_avcodec:FILEPATH=/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/libavcodec.so + +//Path to a library. +pkgcfg_lib_FFmpeg_avdevice:FILEPATH=/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/libavdevice.so + +//Path to a library. +pkgcfg_lib_FFmpeg_avformat:FILEPATH=/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/libavformat.so + +//Path to a library. +pkgcfg_lib_FFmpeg_avutil:FILEPATH=/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/libavutil.so + +//Path to a library. +pkgcfg_lib_FFmpeg_swresample:FILEPATH=/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/libswresample.so + +//Path to a library. +pkgcfg_lib_FFmpeg_swscale:FILEPATH=/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/libswscale.so + +//Path to a library. +pkgcfg_lib_avutil_avutil:FILEPATH=/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/libavutil.so + +//Path to a library. +pkgcfg_lib_swresample_swresample:FILEPATH=/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/libswresample.so + +//The directory containing a CMake configuration file for plutovg. +plutovg_DIR:PATH=/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/plutovg + +//Path to a file. +pystring_INCLUDE_DIR:PATH=/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/pystring + +//Path to a library. +pystring_LIBRARY:FILEPATH=/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/libpystring.a + +//The directory containing a CMake configuration file for tlRender. +tlRender_DIR:PATH=/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/tlRender + +//The directory containing a CMake configuration file for yaml-cpp. +yaml-cpp_DIR:PATH=/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/yaml-cpp + + +######################## +# INTERNAL cache entries +######################## + +//ADVANCED property for variable: CMAKE_ADDR2LINE +CMAKE_ADDR2LINE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_AR +CMAKE_AR-ADVANCED:INTERNAL=1 +//This is the directory where this CMakeCache.txt was created +CMAKE_CACHEFILE_DIR:INTERNAL=/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux +//Major version of cmake used to create the current loaded cache +CMAKE_CACHE_MAJOR_VERSION:INTERNAL=3 +//Minor version of cmake used to create the current loaded cache +CMAKE_CACHE_MINOR_VERSION:INTERNAL=31 +//Patch version of cmake used to create the current loaded cache +CMAKE_CACHE_PATCH_VERSION:INTERNAL=11 +//Path to CMake executable. +CMAKE_COMMAND:INTERNAL=/usr/bin/cmake +//Path to cpack program executable. +CMAKE_CPACK_COMMAND:INTERNAL=/usr/bin/cpack +//Path to ctest program executable. +CMAKE_CTEST_COMMAND:INTERNAL=/usr/bin/ctest +//ADVANCED property for variable: CMAKE_CXX_COMPILER +CMAKE_CXX_COMPILER-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_CXX_COMPILER_AR +CMAKE_CXX_COMPILER_AR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_CXX_COMPILER_RANLIB +CMAKE_CXX_COMPILER_RANLIB-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_CXX_FLAGS +CMAKE_CXX_FLAGS-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_CXX_FLAGS_DEBUG +CMAKE_CXX_FLAGS_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_CXX_FLAGS_MINSIZEREL +CMAKE_CXX_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_CXX_FLAGS_RELEASE +CMAKE_CXX_FLAGS_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_CXX_FLAGS_RELWITHDEBINFO +CMAKE_CXX_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_DLLTOOL +CMAKE_DLLTOOL-ADVANCED:INTERNAL=1 +//Path to cache edit program executable. +CMAKE_EDIT_COMMAND:INTERNAL=/usr/bin/ccmake +//Executable file format +CMAKE_EXECUTABLE_FORMAT:INTERNAL=ELF +//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS +CMAKE_EXE_LINKER_FLAGS-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_DEBUG +CMAKE_EXE_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_MINSIZEREL +CMAKE_EXE_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_RELEASE +CMAKE_EXE_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO +CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_EXPORT_BUILD_DATABASE +CMAKE_EXPORT_BUILD_DATABASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_EXPORT_COMPILE_COMMANDS +CMAKE_EXPORT_COMPILE_COMMANDS-ADVANCED:INTERNAL=1 +//Name of external makefile project generator. +CMAKE_EXTRA_GENERATOR:INTERNAL= +//Name of generator. +CMAKE_GENERATOR:INTERNAL=Ninja +//Generator instance identifier. +CMAKE_GENERATOR_INSTANCE:INTERNAL= +//Name of generator platform. +CMAKE_GENERATOR_PLATFORM:INTERNAL= +//Name of generator toolset. +CMAKE_GENERATOR_TOOLSET:INTERNAL= +//Test CMAKE_HAVE_LIBC_PTHREAD +CMAKE_HAVE_LIBC_PTHREAD:INTERNAL=1 +//Source directory with the top level CMakeLists.txt file for this +// project +CMAKE_HOME_DIRECTORY:INTERNAL=/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6 +//ADVANCED property for variable: CMAKE_INSTALL_BINDIR +CMAKE_INSTALL_BINDIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_INSTALL_DATADIR +CMAKE_INSTALL_DATADIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_INSTALL_DATAROOTDIR +CMAKE_INSTALL_DATAROOTDIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_INSTALL_DOCDIR +CMAKE_INSTALL_DOCDIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_INSTALL_INCLUDEDIR +CMAKE_INSTALL_INCLUDEDIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_INSTALL_INFODIR +CMAKE_INSTALL_INFODIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_INSTALL_LIBDIR +CMAKE_INSTALL_LIBDIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_INSTALL_LIBEXECDIR +CMAKE_INSTALL_LIBEXECDIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_INSTALL_LOCALEDIR +CMAKE_INSTALL_LOCALEDIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_INSTALL_LOCALSTATEDIR +CMAKE_INSTALL_LOCALSTATEDIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_INSTALL_MANDIR +CMAKE_INSTALL_MANDIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_INSTALL_OLDINCLUDEDIR +CMAKE_INSTALL_OLDINCLUDEDIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_INSTALL_RUNSTATEDIR +CMAKE_INSTALL_RUNSTATEDIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_INSTALL_SBINDIR +CMAKE_INSTALL_SBINDIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_INSTALL_SHAREDSTATEDIR +CMAKE_INSTALL_SHAREDSTATEDIR-ADVANCED:INTERNAL=1 +//Install .so files without execute permission. +CMAKE_INSTALL_SO_NO_EXE:INTERNAL=0 +//ADVANCED property for variable: CMAKE_INSTALL_SYSCONFDIR +CMAKE_INSTALL_SYSCONFDIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_LINKER +CMAKE_LINKER-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_MAKE_PROGRAM +CMAKE_MAKE_PROGRAM-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS +CMAKE_MODULE_LINKER_FLAGS-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_DEBUG +CMAKE_MODULE_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL +CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_RELEASE +CMAKE_MODULE_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO +CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_NM +CMAKE_NM-ADVANCED:INTERNAL=1 +//number of local generators +CMAKE_NUMBER_OF_MAKEFILES:INTERNAL=2 +//ADVANCED property for variable: CMAKE_OBJCOPY +CMAKE_OBJCOPY-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_OBJDUMP +CMAKE_OBJDUMP-ADVANCED:INTERNAL=1 +//Platform information initialized +CMAKE_PLATFORM_INFO_INITIALIZED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_RANLIB +CMAKE_RANLIB-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_READELF +CMAKE_READELF-ADVANCED:INTERNAL=1 +//Path to CMake installation. +CMAKE_ROOT:INTERNAL=/usr/share/cmake +//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS +CMAKE_SHARED_LINKER_FLAGS-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_DEBUG +CMAKE_SHARED_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL +CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_RELEASE +CMAKE_SHARED_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO +CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_SKIP_INSTALL_RPATH +CMAKE_SKIP_INSTALL_RPATH-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_SKIP_RPATH +CMAKE_SKIP_RPATH-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS +CMAKE_STATIC_LINKER_FLAGS-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_DEBUG +CMAKE_STATIC_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_MINSIZEREL +CMAKE_STATIC_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_RELEASE +CMAKE_STATIC_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO +CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_STRIP +CMAKE_STRIP-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_TAPI +CMAKE_TAPI-ADVANCED:INTERNAL=1 +//uname command +CMAKE_UNAME:INTERNAL=/usr/bin/uname +//ADVANCED property for variable: CMAKE_VERBOSE_MAKEFILE +CMAKE_VERBOSE_MAKEFILE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CPACK_SOURCE_RPM +CPACK_SOURCE_RPM-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CPACK_SOURCE_TBZ2 +CPACK_SOURCE_TBZ2-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CPACK_SOURCE_TGZ +CPACK_SOURCE_TGZ-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CPACK_SOURCE_TXZ +CPACK_SOURCE_TXZ-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CPACK_SOURCE_TZ +CPACK_SOURCE_TZ-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CPACK_SOURCE_ZIP +CPACK_SOURCE_ZIP-ADVANCED:INTERNAL=1 +FFmpeg_CFLAGS:INTERNAL=-I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include +FFmpeg_CFLAGS_I:INTERNAL= +FFmpeg_CFLAGS_OTHER:INTERNAL= +FFmpeg_FOUND:INTERNAL=1 +FFmpeg_INCLUDEDIR:INTERNAL= +FFmpeg_INCLUDE_DIRS:INTERNAL=/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include +FFmpeg_LDFLAGS:INTERNAL=-L/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib;-lavdevice;-lavformat;-lavcodec;-lswresample;-lswscale;-lavutil +FFmpeg_LDFLAGS_OTHER:INTERNAL= +FFmpeg_LIBDIR:INTERNAL= +FFmpeg_LIBRARIES:INTERNAL=avdevice;avformat;avcodec;swresample;swscale;avutil +FFmpeg_LIBRARY_DIRS:INTERNAL=/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib +FFmpeg_LIBS:INTERNAL= +FFmpeg_LIBS_L:INTERNAL= +FFmpeg_LIBS_OTHER:INTERNAL= +FFmpeg_LIBS_PATHS:INTERNAL= +FFmpeg_MODULE_NAME:INTERNAL= +FFmpeg_PREFIX:INTERNAL= +FFmpeg_STATIC_CFLAGS:INTERNAL=-I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include +FFmpeg_STATIC_CFLAGS_I:INTERNAL= +FFmpeg_STATIC_CFLAGS_OTHER:INTERNAL= +FFmpeg_STATIC_INCLUDE_DIRS:INTERNAL=/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include +FFmpeg_STATIC_LDFLAGS:INTERNAL=-L/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib;-lavdevice;-lm;-latomic;-lavformat;-lm;-latomic;-lz;-lavcodec;-pthread;-lm;-latomic;-L/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib;-lSvtAv1Enc;-lz;-lswresample;-lm;-latomic;-lswscale;-lm;-latomic;-lavutil;-lm;-lz;-ldrm;-latomic;-pthread +FFmpeg_STATIC_LDFLAGS_OTHER:INTERNAL=-pthread;-pthread +FFmpeg_STATIC_LIBDIR:INTERNAL= +FFmpeg_STATIC_LIBRARIES:INTERNAL=avdevice;m;atomic;avformat;m;atomic;z;avcodec;m;atomic;SvtAv1Enc;z;swresample;m;atomic;swscale;m;atomic;avutil;m;z;drm;atomic +FFmpeg_STATIC_LIBRARY_DIRS:INTERNAL=/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib;/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib +FFmpeg_STATIC_LIBS:INTERNAL= +FFmpeg_STATIC_LIBS_L:INTERNAL= +FFmpeg_STATIC_LIBS_OTHER:INTERNAL= +FFmpeg_STATIC_LIBS_PATHS:INTERNAL= +FFmpeg_VERSION:INTERNAL= +FFmpeg_libavcodec_INCLUDEDIR:INTERNAL=/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include +FFmpeg_libavcodec_LIBDIR:INTERNAL=/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib +FFmpeg_libavcodec_MODULE_NAME:INTERNAL=libavcodec +FFmpeg_libavcodec_PREFIX:INTERNAL=/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release +FFmpeg_libavcodec_VERSION:INTERNAL=62.28.100 +FFmpeg_libavdevice_INCLUDEDIR:INTERNAL=/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include +FFmpeg_libavdevice_LIBDIR:INTERNAL=/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib +FFmpeg_libavdevice_MODULE_NAME:INTERNAL=libavdevice +FFmpeg_libavdevice_PREFIX:INTERNAL=/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release +FFmpeg_libavdevice_VERSION:INTERNAL=62.3.100 +FFmpeg_libavformat_INCLUDEDIR:INTERNAL=/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include +FFmpeg_libavformat_LIBDIR:INTERNAL=/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib +FFmpeg_libavformat_MODULE_NAME:INTERNAL=libavformat +FFmpeg_libavformat_PREFIX:INTERNAL=/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release +FFmpeg_libavformat_VERSION:INTERNAL=62.12.100 +FFmpeg_libavutil_INCLUDEDIR:INTERNAL=/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include +FFmpeg_libavutil_LIBDIR:INTERNAL=/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib +FFmpeg_libavutil_MODULE_NAME:INTERNAL=libavutil +FFmpeg_libavutil_PREFIX:INTERNAL=/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release +FFmpeg_libavutil_VERSION:INTERNAL=60.26.100 +FFmpeg_libswresample_INCLUDEDIR:INTERNAL=/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include +FFmpeg_libswresample_LIBDIR:INTERNAL=/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib +FFmpeg_libswresample_MODULE_NAME:INTERNAL=libswresample +FFmpeg_libswresample_PREFIX:INTERNAL=/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release +FFmpeg_libswresample_VERSION:INTERNAL=6.3.100 +FFmpeg_libswscale_INCLUDEDIR:INTERNAL=/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include +FFmpeg_libswscale_LIBDIR:INTERNAL=/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib +FFmpeg_libswscale_MODULE_NAME:INTERNAL=libswscale +FFmpeg_libswscale_PREFIX:INTERNAL=/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release +FFmpeg_libswscale_VERSION:INTERNAL=9.5.100 +//Details about finding Freetype +FIND_PACKAGE_MESSAGE_DETAILS_Freetype:INTERNAL=[/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/libfreetype.a][/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/freetype2][v2.14.1()] +//Details about finding Imath +FIND_PACKAGE_MESSAGE_DETAILS_Imath:INTERNAL=[/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/libImath-3_2.a][v3.2.1()] +//Details about finding JPEG +FIND_PACKAGE_MESSAGE_DETAILS_JPEG:INTERNAL=[/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/libjpeg.a][/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include][v62()] +//Details about finding OpenColorIO +FIND_PACKAGE_MESSAGE_DETAILS_OpenColorIO:INTERNAL=[/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/OpenColorIO/OpenColorIOConfig.cmake][v2.5.0()] +//Details about finding OpenGL +FIND_PACKAGE_MESSAGE_DETAILS_OpenGL:INTERNAL=[/usr/lib64/libOpenGL.so][/usr/lib64/libGLX.so][/usr/include][c ][v()] +//Details about finding PNG +FIND_PACKAGE_MESSAGE_DETAILS_PNG:INTERNAL=[/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/libpng.a][/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include][v1.6.50()] +//Details about finding PkgConfig +FIND_PACKAGE_MESSAGE_DETAILS_PkgConfig:INTERNAL=[/usr/bin/pkg-config][v2.3.0()] +//Details about finding TIFF +FIND_PACKAGE_MESSAGE_DETAILS_TIFF:INTERNAL=[/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/libtiff.a][/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include][c ][v4.5.0()] +//Details about finding Threads +FIND_PACKAGE_MESSAGE_DETAILS_Threads:INTERNAL=[TRUE][v()] +//Details about finding WrapAtomic +FIND_PACKAGE_MESSAGE_DETAILS_WrapAtomic:INTERNAL=[1][v()] +//Details about finding WrapOpenGL +FIND_PACKAGE_MESSAGE_DETAILS_WrapOpenGL:INTERNAL=[ON][v()] +//Details about finding WrapVulkanHeaders +FIND_PACKAGE_MESSAGE_DETAILS_WrapVulkanHeaders:INTERNAL=[/usr/include][v()] +//Details about finding ZLIB +FIND_PACKAGE_MESSAGE_DETAILS_ZLIB:INTERNAL=[/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/libz.a][/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include][c ][v1.3.1()] +//Details about finding expat +FIND_PACKAGE_MESSAGE_DETAILS_expat:INTERNAL=[/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include][v2.7.2(2.7.2)] +//Details about finding nlohmann_json +FIND_PACKAGE_MESSAGE_DETAILS_nlohmann_json:INTERNAL=[/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/share/cmake/nlohmann_json/nlohmann_jsonConfig.cmake][v3.12.0()] +//Details about finding pystring +FIND_PACKAGE_MESSAGE_DETAILS_pystring:INTERNAL=[/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/pystring][/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/libpystring.a][v()] +//Details about finding yaml-cpp +FIND_PACKAGE_MESSAGE_DETAILS_yaml-cpp:INTERNAL=[/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/libyaml-cpp.a][v0.8.0(0.8.0)] +//ADVANCED property for variable: FREETYPE_INCLUDE_DIR_freetype2 +FREETYPE_INCLUDE_DIR_freetype2-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: FREETYPE_INCLUDE_DIR_ft2build +FREETYPE_INCLUDE_DIR_ft2build-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: FREETYPE_LIBRARY_DEBUG +FREETYPE_LIBRARY_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: FREETYPE_LIBRARY_RELEASE +FREETYPE_LIBRARY_RELEASE-ADVANCED:INTERNAL=1 +//Test HAVE_STDATOMIC +HAVE_STDATOMIC:INTERNAL=1 +//ADVANCED property for variable: JPEG_INCLUDE_DIR +JPEG_INCLUDE_DIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: JPEG_LIBRARY_DEBUG +JPEG_LIBRARY_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: JPEG_LIBRARY_RELEASE +JPEG_LIBRARY_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: OPENGL_EGL_INCLUDE_DIR +OPENGL_EGL_INCLUDE_DIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: OPENGL_GLES2_INCLUDE_DIR +OPENGL_GLES2_INCLUDE_DIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: OPENGL_GLES3_INCLUDE_DIR +OPENGL_GLES3_INCLUDE_DIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: OPENGL_GLU_INCLUDE_DIR +OPENGL_GLU_INCLUDE_DIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: OPENGL_GLX_INCLUDE_DIR +OPENGL_GLX_INCLUDE_DIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: OPENGL_INCLUDE_DIR +OPENGL_INCLUDE_DIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: OPENGL_egl_LIBRARY +OPENGL_egl_LIBRARY-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: OPENGL_gles2_LIBRARY +OPENGL_gles2_LIBRARY-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: OPENGL_gles3_LIBRARY +OPENGL_gles3_LIBRARY-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: OPENGL_glu_LIBRARY +OPENGL_glu_LIBRARY-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: OPENGL_glx_LIBRARY +OPENGL_glx_LIBRARY-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: OPENGL_opengl_LIBRARY +OPENGL_opengl_LIBRARY-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: OPENGL_xmesa_INCLUDE_DIR +OPENGL_xmesa_INCLUDE_DIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: PKG_CONFIG_ARGN +PKG_CONFIG_ARGN-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: PKG_CONFIG_EXECUTABLE +PKG_CONFIG_EXECUTABLE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: PNG_LIBRARY_DEBUG +PNG_LIBRARY_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: PNG_LIBRARY_RELEASE +PNG_LIBRARY_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: PNG_PNG_INCLUDE_DIR +PNG_PNG_INCLUDE_DIR-ADVANCED:INTERNAL=1 +//Qt feature: aaudio (from target Qt6::Multimedia) +QT_FEATURE_aaudio:INTERNAL=OFF +//Qt feature: abstractbutton (from target Qt6::Widgets) +QT_FEATURE_abstractbutton:INTERNAL=ON +//Qt feature: abstractslider (from target Qt6::Widgets) +QT_FEATURE_abstractslider:INTERNAL=ON +//Qt feature: accept4 (from target Qt6::Core) +QT_FEATURE_accept4:INTERNAL=ON +//Qt feature: accessibility (from target Qt6::Gui) +QT_FEATURE_accessibility:INTERNAL=ON +//Qt feature: accessibility_atspi_bridge (from target Qt6::Gui) +QT_FEATURE_accessibility_atspi_bridge:INTERNAL=ON +//Qt feature: action (from target Qt6::Gui) +QT_FEATURE_action:INTERNAL=ON +//Qt feature: aesni (from target Qt6::Core) +QT_FEATURE_aesni:INTERNAL=ON +//Qt feature: alsa (from target Qt6::Multimedia) +QT_FEATURE_alsa:INTERNAL=OFF +//Qt feature: android_style_assets (from target Qt6::Core) +QT_FEATURE_android_style_assets:INTERNAL=OFF +//Qt feature: animation (from target Qt6::Core) +QT_FEATURE_animation:INTERNAL=ON +//Qt feature: appstore_compliant (from target Qt6::Core) +QT_FEATURE_appstore_compliant:INTERNAL=OFF +//Qt feature: arm_crc32 (from target Qt6::Core) +QT_FEATURE_arm_crc32:INTERNAL=OFF +//Qt feature: arm_crypto (from target Qt6::Core) +QT_FEATURE_arm_crypto:INTERNAL=OFF +//Qt feature: arm_sve (from target Qt6::Core) +QT_FEATURE_arm_sve:INTERNAL=OFF +//Qt feature: avfoundation (from target Qt6::Multimedia) +QT_FEATURE_avfoundation:INTERNAL=OFF +//Qt feature: avx (from target Qt6::Core) +QT_FEATURE_avx:INTERNAL=ON +//Qt feature: avx2 (from target Qt6::Core) +QT_FEATURE_avx2:INTERNAL=ON +//Qt feature: avx512bw (from target Qt6::Core) +QT_FEATURE_avx512bw:INTERNAL=ON +//Qt feature: avx512cd (from target Qt6::Core) +QT_FEATURE_avx512cd:INTERNAL=ON +//Qt feature: avx512dq (from target Qt6::Core) +QT_FEATURE_avx512dq:INTERNAL=ON +//Qt feature: avx512er (from target Qt6::Core) +QT_FEATURE_avx512er:INTERNAL=ON +//Qt feature: avx512f (from target Qt6::Core) +QT_FEATURE_avx512f:INTERNAL=ON +//Qt feature: avx512ifma (from target Qt6::Core) +QT_FEATURE_avx512ifma:INTERNAL=ON +//Qt feature: avx512pf (from target Qt6::Core) +QT_FEATURE_avx512pf:INTERNAL=ON +//Qt feature: avx512vbmi (from target Qt6::Core) +QT_FEATURE_avx512vbmi:INTERNAL=ON +//Qt feature: avx512vbmi2 (from target Qt6::Core) +QT_FEATURE_avx512vbmi2:INTERNAL=ON +//Qt feature: avx512vl (from target Qt6::Core) +QT_FEATURE_avx512vl:INTERNAL=ON +//Qt feature: backtrace (from target Qt6::Core) +QT_FEATURE_backtrace:INTERNAL=ON +//Qt feature: batch_test_support (from target Qt6::Test) +QT_FEATURE_batch_test_support:INTERNAL=OFF +//Qt feature: broken_threadlocal_dtors (from target Qt6::Core) +QT_FEATURE_broken_threadlocal_dtors:INTERNAL=OFF +//Qt feature: brotli (from target Qt6::Network) +QT_FEATURE_brotli:INTERNAL=ON +//Qt feature: buttongroup (from target Qt6::Widgets) +QT_FEATURE_buttongroup:INTERNAL=ON +//Qt feature: calendarwidget (from target Qt6::Widgets) +QT_FEATURE_calendarwidget:INTERNAL=ON +//Qt feature: cborstreamreader (from target Qt6::Core) +QT_FEATURE_cborstreamreader:INTERNAL=ON +//Qt feature: cborstreamwriter (from target Qt6::Core) +QT_FEATURE_cborstreamwriter:INTERNAL=ON +//Qt feature: checkbox (from target Qt6::Widgets) +QT_FEATURE_checkbox:INTERNAL=ON +//Qt feature: clipboard (from target Qt6::Gui) +QT_FEATURE_clipboard:INTERNAL=ON +//Qt feature: clock_gettime (from target Qt6::Core) +QT_FEATURE_clock_gettime:INTERNAL=ON +//Qt feature: clock_monotonic (from target Qt6::Core) +QT_FEATURE_clock_monotonic:INTERNAL=ON +//Qt feature: colordialog (from target Qt6::Widgets) +QT_FEATURE_colordialog:INTERNAL=ON +//Qt feature: colornames (from target Qt6::Gui) +QT_FEATURE_colornames:INTERNAL=ON +//Qt feature: columnview (from target Qt6::Widgets) +QT_FEATURE_columnview:INTERNAL=ON +//Qt feature: combobox (from target Qt6::Widgets) +QT_FEATURE_combobox:INTERNAL=ON +//Qt feature: commandlineparser (from target Qt6::Core) +QT_FEATURE_commandlineparser:INTERNAL=ON +//Qt feature: commandlinkbutton (from target Qt6::Widgets) +QT_FEATURE_commandlinkbutton:INTERNAL=ON +//Qt feature: completer (from target Qt6::Widgets) +QT_FEATURE_completer:INTERNAL=ON +//Qt feature: concatenatetablesproxymodel (from target Qt6::Core) +QT_FEATURE_concatenatetablesproxymodel:INTERNAL=ON +//Qt feature: concurrent (from target Qt6::Core) +QT_FEATURE_concurrent:INTERNAL=ON +//Qt feature: contextmenu (from target Qt6::Widgets) +QT_FEATURE_contextmenu:INTERNAL=ON +//Qt feature: copy_file_range (from target Qt6::Core) +QT_FEATURE_copy_file_range:INTERNAL=ON +//Qt feature: coreaudio (from target Qt6::Multimedia) +QT_FEATURE_coreaudio:INTERNAL=OFF +//Qt feature: cpp_winrt (from target Qt6::Core) +QT_FEATURE_cpp_winrt:INTERNAL=OFF +//Qt feature: cross_compile (from target Qt6::Core) +QT_FEATURE_cross_compile:INTERNAL=OFF +//Qt feature: cssparser (from target Qt6::Gui) +QT_FEATURE_cssparser:INTERNAL=ON +//Qt feature: ctf (from target Qt6::Core) +QT_FEATURE_ctf:INTERNAL=OFF +//Qt feature: cursor (from target Qt6::Gui) +QT_FEATURE_cursor:INTERNAL=ON +//Qt feature: cxx11_future (from target Qt6::Core) +QT_FEATURE_cxx11_future:INTERNAL=ON +//Qt feature: cxx17_filesystem (from target Qt6::Core) +QT_FEATURE_cxx17_filesystem:INTERNAL=ON +//Qt feature: cxx20 (from target Qt6::Core) +QT_FEATURE_cxx20:INTERNAL=OFF +//Qt feature: cxx20_format (from target Qt6::Core) +QT_FEATURE_cxx20_format:INTERNAL=ON +//Qt feature: cxx23_stacktrace (from target Qt6::Core) +QT_FEATURE_cxx23_stacktrace:INTERNAL=OFF +//Qt feature: cxx2a (from target Qt6::Core) +QT_FEATURE_cxx2a:INTERNAL=OFF +//Qt feature: cxx2b (from target Qt6::Core) +QT_FEATURE_cxx2b:INTERNAL=OFF +//Qt feature: cxx2c (from target Qt6::Core) +QT_FEATURE_cxx2c:INTERNAL=OFF +//Qt feature: datawidgetmapper (from target Qt6::Widgets) +QT_FEATURE_datawidgetmapper:INTERNAL=ON +//Qt feature: datestring (from target Qt6::Core) +QT_FEATURE_datestring:INTERNAL=ON +//Qt feature: datetimeedit (from target Qt6::Widgets) +QT_FEATURE_datetimeedit:INTERNAL=ON +//Qt feature: datetimeparser (from target Qt6::Core) +QT_FEATURE_datetimeparser:INTERNAL=ON +//Qt feature: dbus (from target Qt6::Core) +QT_FEATURE_dbus:INTERNAL=ON +//Qt feature: dbus_linked (from target Qt6::Core) +QT_FEATURE_dbus_linked:INTERNAL=ON +//Qt feature: debug (from target Qt6::Core) +QT_FEATURE_debug:INTERNAL=OFF +//Qt feature: debug_and_release (from target Qt6::Core) +QT_FEATURE_debug_and_release:INTERNAL=OFF +//Qt feature: desktopservices (from target Qt6::Gui) +QT_FEATURE_desktopservices:INTERNAL=ON +//Qt feature: developer_build (from target Qt6::Core) +QT_FEATURE_developer_build:INTERNAL=OFF +//Qt feature: dial (from target Qt6::Widgets) +QT_FEATURE_dial:INTERNAL=ON +//Qt feature: dialog (from target Qt6::Widgets) +QT_FEATURE_dialog:INTERNAL=ON +//Qt feature: dialogbuttonbox (from target Qt6::Widgets) +QT_FEATURE_dialogbuttonbox:INTERNAL=ON +//Qt feature: direct2d (from target Qt6::Gui) +QT_FEATURE_direct2d:INTERNAL=OFF +//Qt feature: direct2d1_1 (from target Qt6::Gui) +QT_FEATURE_direct2d1_1:INTERNAL=OFF +//Qt feature: directfb (from target Qt6::Gui) +QT_FEATURE_directfb:INTERNAL=OFF +//Qt feature: directwrite (from target Qt6::Gui) +QT_FEATURE_directwrite:INTERNAL=OFF +//Qt feature: directwrite3 (from target Qt6::Gui) +QT_FEATURE_directwrite3:INTERNAL=OFF +//Qt feature: directwritecolrv1 (from target Qt6::Gui) +QT_FEATURE_directwritecolrv1:INTERNAL=OFF +//Qt feature: dladdr (from target Qt6::Core) +QT_FEATURE_dladdr:INTERNAL=ON +//Qt feature: dlopen (from target Qt6::Core) +QT_FEATURE_dlopen:INTERNAL=ON +//Qt feature: dnslookup (from target Qt6::Network) +QT_FEATURE_dnslookup:INTERNAL=ON +//Qt feature: doc_snippets (from target Qt6::Core) +QT_FEATURE_doc_snippets:INTERNAL=OFF +//Qt feature: dockwidget (from target Qt6::Widgets) +QT_FEATURE_dockwidget:INTERNAL=ON +//Qt feature: doubleconversion (from target Qt6::Core) +QT_FEATURE_doubleconversion:INTERNAL=ON +//Qt feature: draganddrop (from target Qt6::Gui) +QT_FEATURE_draganddrop:INTERNAL=ON +//Qt feature: drm_atomic (from target Qt6::Gui) +QT_FEATURE_drm_atomic:INTERNAL=ON +//Qt feature: dtls (from target Qt6::Network) +QT_FEATURE_dtls:INTERNAL=ON +//Qt feature: dup3 (from target Qt6::Core) +QT_FEATURE_dup3:INTERNAL=ON +//Qt feature: dynamicgl (from target Qt6::Gui) +QT_FEATURE_dynamicgl:INTERNAL=OFF +//Qt feature: easingcurve (from target Qt6::Core) +QT_FEATURE_easingcurve:INTERNAL=ON +//Qt feature: effects (from target Qt6::Widgets) +QT_FEATURE_effects:INTERNAL=ON +//Qt feature: egl (from target Qt6::Gui) +QT_FEATURE_egl:INTERNAL=ON +//Qt feature: egl_extension_platform_wayland (from target Qt6::Gui) +QT_FEATURE_egl_extension_platform_wayland:INTERNAL=ON +//Qt feature: egl_x11 (from target Qt6::Gui) +QT_FEATURE_egl_x11:INTERNAL=ON +//Qt feature: eglfs (from target Qt6::Gui) +QT_FEATURE_eglfs:INTERNAL=ON +//Qt feature: eglfs_brcm (from target Qt6::Gui) +QT_FEATURE_eglfs_brcm:INTERNAL=OFF +//Qt feature: eglfs_egldevice (from target Qt6::Gui) +QT_FEATURE_eglfs_egldevice:INTERNAL=ON +//Qt feature: eglfs_gbm (from target Qt6::Gui) +QT_FEATURE_eglfs_gbm:INTERNAL=ON +//Qt feature: eglfs_mali (from target Qt6::Gui) +QT_FEATURE_eglfs_mali:INTERNAL=OFF +//Qt feature: eglfs_openwfd (from target Qt6::Gui) +QT_FEATURE_eglfs_openwfd:INTERNAL=OFF +//Qt feature: eglfs_rcar (from target Qt6::Gui) +QT_FEATURE_eglfs_rcar:INTERNAL=OFF +//Qt feature: eglfs_viv (from target Qt6::Gui) +QT_FEATURE_eglfs_viv:INTERNAL=OFF +//Qt feature: eglfs_viv_wl (from target Qt6::Gui) +QT_FEATURE_eglfs_viv_wl:INTERNAL=OFF +//Qt feature: eglfs_vsp2 (from target Qt6::Gui) +QT_FEATURE_eglfs_vsp2:INTERNAL=OFF +//Qt feature: eglfs_x11 (from target Qt6::Gui) +QT_FEATURE_eglfs_x11:INTERNAL=ON +//Qt feature: elf_private_full_version (from target Qt6::Core) +QT_FEATURE_elf_private_full_version:INTERNAL=ON +//Qt feature: emojisegmenter (from target Qt6::Gui) +QT_FEATURE_emojisegmenter:INTERNAL=ON +//Qt feature: enable_new_dtags (from target Qt6::Core) +QT_FEATURE_enable_new_dtags:INTERNAL=ON +//Qt feature: errormessage (from target Qt6::Widgets) +QT_FEATURE_errormessage:INTERNAL=ON +//Qt feature: etw (from target Qt6::Core) +QT_FEATURE_etw:INTERNAL=OFF +//Qt feature: evdev (from target Qt6::Gui) +QT_FEATURE_evdev:INTERNAL=ON +//Qt feature: f16c (from target Qt6::Core) +QT_FEATURE_f16c:INTERNAL=ON +//Qt feature: ffmpeg (from target Qt6::Multimedia) +QT_FEATURE_ffmpeg:INTERNAL=ON +//Qt feature: ffmpeg_stubs (from target Qt6::Multimedia) +QT_FEATURE_ffmpeg_stubs:INTERNAL=OFF +//Qt feature: filedialog (from target Qt6::Widgets) +QT_FEATURE_filedialog:INTERNAL=ON +//Qt feature: filesystemiterator (from target Qt6::Core) +QT_FEATURE_filesystemiterator:INTERNAL=ON +//Qt feature: filesystemmodel (from target Qt6::Gui) +QT_FEATURE_filesystemmodel:INTERNAL=ON +//Qt feature: filesystemwatcher (from target Qt6::Core) +QT_FEATURE_filesystemwatcher:INTERNAL=ON +//Qt feature: fontcombobox (from target Qt6::Widgets) +QT_FEATURE_fontcombobox:INTERNAL=ON +//Qt feature: fontconfig (from target Qt6::Gui) +QT_FEATURE_fontconfig:INTERNAL=ON +//Qt feature: fontdialog (from target Qt6::Widgets) +QT_FEATURE_fontdialog:INTERNAL=ON +//Qt feature: force_asserts (from target Qt6::Core) +QT_FEATURE_force_asserts:INTERNAL=OFF +//Qt feature: force_bundled_libs (from target Qt6::Core) +QT_FEATURE_force_bundled_libs:INTERNAL=OFF +//Qt feature: force_debug_info (from target Qt6::Core) +QT_FEATURE_force_debug_info:INTERNAL=ON +//Qt feature: force_system_libs (from target Qt6::Core) +QT_FEATURE_force_system_libs:INTERNAL=OFF +//Qt feature: forkfd_pidfd (from target Qt6::Core) +QT_FEATURE_forkfd_pidfd:INTERNAL=ON +//Qt feature: formlayout (from target Qt6::Widgets) +QT_FEATURE_formlayout:INTERNAL=ON +//Qt feature: framework (from target Qt6::Core) +QT_FEATURE_framework:INTERNAL=OFF +//Qt feature: freetype (from target Qt6::Gui) +QT_FEATURE_freetype:INTERNAL=ON +//Qt feature: fscompleter (from target Qt6::Widgets) +QT_FEATURE_fscompleter:INTERNAL=ON +//Qt feature: futimens (from target Qt6::Core) +QT_FEATURE_futimens:INTERNAL=ON +//Qt feature: future (from target Qt6::Core) +QT_FEATURE_future:INTERNAL=ON +//Qt feature: gbm (from target Qt6::Gui) +QT_FEATURE_gbm:INTERNAL=ON +//Qt feature: gc_binaries (from target Qt6::Core) +QT_FEATURE_gc_binaries:INTERNAL=OFF +//Qt feature: gestures (from target Qt6::Core) +QT_FEATURE_gestures:INTERNAL=ON +//Qt feature: getauxval (from target Qt6::Core) +QT_FEATURE_getauxval:INTERNAL=ON +//Qt feature: getentropy (from target Qt6::Core) +QT_FEATURE_getentropy:INTERNAL=ON +//Qt feature: getifaddrs (from target Qt6::Network) +QT_FEATURE_getifaddrs:INTERNAL=OFF +//Qt feature: gif (from target Qt6::Gui) +QT_FEATURE_gif:INTERNAL=ON +//Qt feature: glib (from target Qt6::Core) +QT_FEATURE_glib:INTERNAL=ON +//Qt feature: glibc_fortify_source (from target Qt6::Core) +QT_FEATURE_glibc_fortify_source:INTERNAL=ON +//Qt feature: gpu_vivante (from target Qt6::Multimedia) +QT_FEATURE_gpu_vivante:INTERNAL=OFF +//Qt feature: graphicseffect (from target Qt6::Widgets) +QT_FEATURE_graphicseffect:INTERNAL=ON +//Qt feature: graphicsframecapture (from target Qt6::Gui) +QT_FEATURE_graphicsframecapture:INTERNAL=OFF +//Qt feature: graphicsview (from target Qt6::Widgets) +QT_FEATURE_graphicsview:INTERNAL=ON +//Qt feature: groupbox (from target Qt6::Widgets) +QT_FEATURE_groupbox:INTERNAL=ON +//Qt feature: gssapi (from target Qt6::Network) +QT_FEATURE_gssapi:INTERNAL=ON +//Qt feature: gstreamer (from target Qt6::Multimedia) +QT_FEATURE_gstreamer:INTERNAL=ON +//Qt feature: gstreamer_gl (from target Qt6::Multimedia) +QT_FEATURE_gstreamer_gl:INTERNAL=ON +//Qt feature: gstreamer_gl_egl (from target Qt6::Multimedia) +QT_FEATURE_gstreamer_gl_egl:INTERNAL=ON +//Qt feature: gstreamer_gl_wayland (from target Qt6::Multimedia) +QT_FEATURE_gstreamer_gl_wayland:INTERNAL=ON +//Qt feature: gstreamer_gl_x11 (from target Qt6::Multimedia) +QT_FEATURE_gstreamer_gl_x11:INTERNAL=ON +//Qt feature: gstreamer_photography (from target Qt6::Multimedia) +QT_FEATURE_gstreamer_photography:INTERNAL=ON +//Qt feature: gtk3 (from target Qt6::Widgets) +QT_FEATURE_gtk3:INTERNAL=ON +//Qt feature: gui (from target Qt6::Core) +QT_FEATURE_gui:INTERNAL=ON +//Qt feature: harfbuzz (from target Qt6::Gui) +QT_FEATURE_harfbuzz:INTERNAL=ON +//Qt feature: highdpiscaling (from target Qt6::Gui) +QT_FEATURE_highdpiscaling:INTERNAL=ON +//Qt feature: hijricalendar (from target Qt6::Core) +QT_FEATURE_hijricalendar:INTERNAL=ON +//Qt feature: http (from target Qt6::Network) +QT_FEATURE_http:INTERNAL=ON +//Qt feature: ico (from target Qt6::Gui) +QT_FEATURE_ico:INTERNAL=ON +//Qt feature: icu (from target Qt6::Core) +QT_FEATURE_icu:INTERNAL=ON +//Qt feature: identityproxymodel (from target Qt6::Core) +QT_FEATURE_identityproxymodel:INTERNAL=ON +//Qt feature: im (from target Qt6::Gui) +QT_FEATURE_im:INTERNAL=ON +//Qt feature: image_heuristic_mask (from target Qt6::Gui) +QT_FEATURE_image_heuristic_mask:INTERNAL=ON +//Qt feature: image_text (from target Qt6::Gui) +QT_FEATURE_image_text:INTERNAL=ON +//Qt feature: imageformat_bmp (from target Qt6::Gui) +QT_FEATURE_imageformat_bmp:INTERNAL=ON +//Qt feature: imageformat_jpeg (from target Qt6::Gui) +QT_FEATURE_imageformat_jpeg:INTERNAL=ON +//Qt feature: imageformat_png (from target Qt6::Gui) +QT_FEATURE_imageformat_png:INTERNAL=ON +//Qt feature: imageformat_ppm (from target Qt6::Gui) +QT_FEATURE_imageformat_ppm:INTERNAL=ON +//Qt feature: imageformat_xbm (from target Qt6::Gui) +QT_FEATURE_imageformat_xbm:INTERNAL=ON +//Qt feature: imageformat_xpm (from target Qt6::Gui) +QT_FEATURE_imageformat_xpm:INTERNAL=ON +//Qt feature: imageformatplugin (from target Qt6::Gui) +QT_FEATURE_imageformatplugin:INTERNAL=ON +//Qt feature: imageio_text_loading (from target Qt6::Gui) +QT_FEATURE_imageio_text_loading:INTERNAL=ON +//Qt feature: inotify (from target Qt6::Core) +QT_FEATURE_inotify:INTERNAL=ON +//Qt feature: inputdialog (from target Qt6::Widgets) +QT_FEATURE_inputdialog:INTERNAL=ON +//Qt feature: integrityfb (from target Qt6::Gui) +QT_FEATURE_integrityfb:INTERNAL=OFF +//Qt feature: integrityhid (from target Qt6::Gui) +QT_FEATURE_integrityhid:INTERNAL=OFF +//Qt feature: intelcet (from target Qt6::Core) +QT_FEATURE_intelcet:INTERNAL=ON +//Qt feature: ipv6ifname (from target Qt6::Network) +QT_FEATURE_ipv6ifname:INTERNAL=OFF +//Qt feature: islamiccivilcalendar (from target Qt6::Core) +QT_FEATURE_islamiccivilcalendar:INTERNAL=ON +//Qt feature: itemmodel (from target Qt6::Core) +QT_FEATURE_itemmodel:INTERNAL=ON +//Qt feature: itemmodeltester (from target Qt6::Test) +QT_FEATURE_itemmodeltester:INTERNAL=ON +//Qt feature: itemviews (from target Qt6::Widgets) +QT_FEATURE_itemviews:INTERNAL=ON +//Qt feature: jalalicalendar (from target Qt6::Core) +QT_FEATURE_jalalicalendar:INTERNAL=ON +//Qt feature: jemalloc (from target Qt6::Core) +QT_FEATURE_jemalloc:INTERNAL=OFF +//Qt feature: journald (from target Qt6::Core) +QT_FEATURE_journald:INTERNAL=ON +//Qt feature: jpeg (from target Qt6::Gui) +QT_FEATURE_jpeg:INTERNAL=ON +//Qt feature: keysequenceedit (from target Qt6::Widgets) +QT_FEATURE_keysequenceedit:INTERNAL=ON +//Qt feature: kms (from target Qt6::Gui) +QT_FEATURE_kms:INTERNAL=ON +//Qt feature: label (from target Qt6::Widgets) +QT_FEATURE_label:INTERNAL=ON +//Qt feature: largefile (from target Qt6::Core) +QT_FEATURE_largefile:INTERNAL=ON +//Qt feature: lasx (from target Qt6::Core) +QT_FEATURE_lasx:INTERNAL=OFF +//Qt feature: lcdnumber (from target Qt6::Widgets) +QT_FEATURE_lcdnumber:INTERNAL=ON +//Qt feature: libcpp_hardening (from target Qt6::Core) +QT_FEATURE_libcpp_hardening:INTERNAL=OFF +//Qt feature: libinput (from target Qt6::Gui) +QT_FEATURE_libinput:INTERNAL=ON +//Qt feature: libinput_axis_api (from target Qt6::Gui) +QT_FEATURE_libinput_axis_api:INTERNAL=ON +//Qt feature: libinput_hires_wheel_support (from target Qt6::Gui) +QT_FEATURE_libinput_hires_wheel_support:INTERNAL=ON +//Qt feature: libproxy (from target Qt6::Network) +QT_FEATURE_libproxy:INTERNAL=ON +//Qt feature: library (from target Qt6::Core) +QT_FEATURE_library:INTERNAL=ON +//Qt feature: libresolv (from target Qt6::Network) +QT_FEATURE_libresolv:INTERNAL=ON +//Qt feature: libstdcpp_assertions (from target Qt6::Core) +QT_FEATURE_libstdcpp_assertions:INTERNAL=ON +//Qt feature: libudev (from target Qt6::Core) +QT_FEATURE_libudev:INTERNAL=ON +//Qt feature: lineedit (from target Qt6::Widgets) +QT_FEATURE_lineedit:INTERNAL=ON +//Qt feature: linkat (from target Qt6::Core) +QT_FEATURE_linkat:INTERNAL=ON +//Qt feature: linux_dmabuf (from target Qt6::Multimedia) +QT_FEATURE_linux_dmabuf:INTERNAL=ON +//Qt feature: linux_netlink (from target Qt6::Network) +QT_FEATURE_linux_netlink:INTERNAL=ON +//Qt feature: linux_v4l (from target Qt6::Multimedia) +QT_FEATURE_linux_v4l:INTERNAL=ON +//Qt feature: linuxfb (from target Qt6::Gui) +QT_FEATURE_linuxfb:INTERNAL=ON +//Qt feature: listview (from target Qt6::Widgets) +QT_FEATURE_listview:INTERNAL=ON +//Qt feature: listwidget (from target Qt6::Widgets) +QT_FEATURE_listwidget:INTERNAL=ON +//Qt feature: localserver (from target Qt6::Network) +QT_FEATURE_localserver:INTERNAL=ON +//Qt feature: localtime_r (from target Qt6::Core) +QT_FEATURE_localtime_r:INTERNAL=ON +//Qt feature: localtime_s (from target Qt6::Core) +QT_FEATURE_localtime_s:INTERNAL=OFF +//Qt feature: lsx (from target Qt6::Core) +QT_FEATURE_lsx:INTERNAL=OFF +//Qt feature: lttng (from target Qt6::Core) +QT_FEATURE_lttng:INTERNAL=OFF +//Qt feature: mainwindow (from target Qt6::Widgets) +QT_FEATURE_mainwindow:INTERNAL=ON +//Qt feature: mdiarea (from target Qt6::Widgets) +QT_FEATURE_mdiarea:INTERNAL=ON +//Qt feature: memmem (from target Qt6::Core) +QT_FEATURE_memmem:INTERNAL=ON +//Qt feature: memrchr (from target Qt6::Core) +QT_FEATURE_memrchr:INTERNAL=ON +//Qt feature: menu (from target Qt6::Widgets) +QT_FEATURE_menu:INTERNAL=ON +//Qt feature: menubar (from target Qt6::Widgets) +QT_FEATURE_menubar:INTERNAL=ON +//Qt feature: messagebox (from target Qt6::Widgets) +QT_FEATURE_messagebox:INTERNAL=ON +//Qt feature: metal (from target Qt6::Gui) +QT_FEATURE_metal:INTERNAL=OFF +//Qt feature: mimetype (from target Qt6::Core) +QT_FEATURE_mimetype:INTERNAL=ON +//Qt feature: mimetype_database (from target Qt6::Core) +QT_FEATURE_mimetype_database:INTERNAL=ON +//Qt feature: mips_dsp (from target Qt6::Core) +QT_FEATURE_mips_dsp:INTERNAL=OFF +//Qt feature: mips_dspr2 (from target Qt6::Core) +QT_FEATURE_mips_dspr2:INTERNAL=OFF +//Qt feature: mmrenderer (from target Qt6::Multimedia) +QT_FEATURE_mmrenderer:INTERNAL=OFF +//Qt feature: movie (from target Qt6::Gui) +QT_FEATURE_movie:INTERNAL=ON +//Qt feature: mtdev (from target Qt6::Gui) +QT_FEATURE_mtdev:INTERNAL=ON +//Qt feature: multiprocess (from target Qt6::Gui) +QT_FEATURE_multiprocess:INTERNAL=ON +//Qt feature: native_android_backend (from target Qt6::Multimedia) +QT_FEATURE_native_android_backend:INTERNAL=OFF +//Qt feature: native_windows_backend (from target Qt6::Multimedia) +QT_FEATURE_native_windows_backend:INTERNAL=OFF +//Qt feature: neon (from target Qt6::Core) +QT_FEATURE_neon:INTERNAL=OFF +//Qt feature: network (from target Qt6::Core) +QT_FEATURE_network:INTERNAL=ON +//Qt feature: networkdiskcache (from target Qt6::Network) +QT_FEATURE_networkdiskcache:INTERNAL=ON +//Qt feature: networkinterface (from target Qt6::Network) +QT_FEATURE_networkinterface:INTERNAL=ON +//Qt feature: networklistmanager (from target Qt6::Network) +QT_FEATURE_networklistmanager:INTERNAL=OFF +//Qt feature: networkproxy (from target Qt6::Network) +QT_FEATURE_networkproxy:INTERNAL=ON +//Qt feature: no_direct_extern_access (from target Qt6::Core) +QT_FEATURE_no_direct_extern_access:INTERNAL=OFF +//Qt feature: ocsp (from target Qt6::Network) +QT_FEATURE_ocsp:INTERNAL=ON +//Qt feature: opengl (from target Qt6::Gui) +QT_FEATURE_opengl:INTERNAL=ON +//Qt feature: opengles2 (from target Qt6::Gui) +QT_FEATURE_opengles2:INTERNAL=OFF +//Qt feature: opengles3 (from target Qt6::Gui) +QT_FEATURE_opengles3:INTERNAL=OFF +//Qt feature: opengles31 (from target Qt6::Gui) +QT_FEATURE_opengles31:INTERNAL=OFF +//Qt feature: opengles32 (from target Qt6::Gui) +QT_FEATURE_opengles32:INTERNAL=OFF +//Qt feature: openssl (from target Qt6::Core) +QT_FEATURE_openssl:INTERNAL=ON +//Qt feature: openssl_hash (from target Qt6::Core) +QT_FEATURE_openssl_hash:INTERNAL=ON +//Qt feature: openssl_linked (from target Qt6::Core) +QT_FEATURE_openssl_linked:INTERNAL=ON +//Qt feature: opensslv11 (from target Qt6::Core) +QT_FEATURE_opensslv11:INTERNAL=OFF +//Qt feature: opensslv30 (from target Qt6::Core) +QT_FEATURE_opensslv30:INTERNAL=ON +//Qt feature: openvg (from target Qt6::Gui) +QT_FEATURE_openvg:INTERNAL=OFF +//Qt feature: pcre2 (from target Qt6::Core) +QT_FEATURE_pcre2:INTERNAL=ON +//Qt feature: pdf (from target Qt6::Gui) +QT_FEATURE_pdf:INTERNAL=ON +//Qt feature: pdf_bitcode (from target Qt6::Pdf) +QT_FEATURE_pdf_bitcode:INTERNAL=OFF +//Qt feature: pdf_static_runtime (from target Qt6::Pdf) +QT_FEATURE_pdf_static_runtime:INTERNAL=OFF +//Qt feature: pdf_v8 (from target Qt6::Pdf) +QT_FEATURE_pdf_v8:INTERNAL=ON +//Qt feature: pdf_xfa (from target Qt6::Pdf) +QT_FEATURE_pdf_xfa:INTERNAL=ON +//Qt feature: pdf_xfa_bmp (from target Qt6::Pdf) +QT_FEATURE_pdf_xfa_bmp:INTERNAL=ON +//Qt feature: pdf_xfa_gif (from target Qt6::Pdf) +QT_FEATURE_pdf_xfa_gif:INTERNAL=ON +//Qt feature: pdf_xfa_png (from target Qt6::Pdf) +QT_FEATURE_pdf_xfa_png:INTERNAL=ON +//Qt feature: pdf_xfa_tiff (from target Qt6::Pdf) +QT_FEATURE_pdf_xfa_tiff:INTERNAL=ON +//Qt feature: permissions (from target Qt6::Core) +QT_FEATURE_permissions:INTERNAL=ON +//Qt feature: picture (from target Qt6::Gui) +QT_FEATURE_picture:INTERNAL=ON +//Qt feature: pipewire (from target Qt6::Multimedia) +QT_FEATURE_pipewire:INTERNAL=ON +//Qt feature: pipewire_screencapture (from target Qt6::Multimedia) +QT_FEATURE_pipewire_screencapture:INTERNAL=ON +//Qt feature: pkg_config (from target Qt6::Core) +QT_FEATURE_pkg_config:INTERNAL=ON +//Qt feature: plugin_manifest (from target Qt6::Core) +QT_FEATURE_plugin_manifest:INTERNAL=ON +//Qt feature: png (from target Qt6::Gui) +QT_FEATURE_png:INTERNAL=ON +//Qt feature: poll_exit_on_error (from target Qt6::Core) +QT_FEATURE_poll_exit_on_error:INTERNAL=OFF +//Qt feature: poll_poll (from target Qt6::Core) +QT_FEATURE_poll_poll:INTERNAL=OFF +//Qt feature: poll_pollts (from target Qt6::Core) +QT_FEATURE_poll_pollts:INTERNAL=OFF +//Qt feature: poll_ppoll (from target Qt6::Core) +QT_FEATURE_poll_ppoll:INTERNAL=ON +//Qt feature: poll_select (from target Qt6::Core) +QT_FEATURE_poll_select:INTERNAL=OFF +//Qt feature: posix_fallocate (from target Qt6::Core) +QT_FEATURE_posix_fallocate:INTERNAL=ON +//Qt feature: posix_sem (from target Qt6::Core) +QT_FEATURE_posix_sem:INTERNAL=ON +//Qt feature: posix_shm (from target Qt6::Core) +QT_FEATURE_posix_shm:INTERNAL=ON +//Qt feature: printsupport (from target Qt6::Core) +QT_FEATURE_printsupport:INTERNAL=ON +//Qt feature: private_tests (from target Qt6::Core) +QT_FEATURE_private_tests:INTERNAL=OFF +//Qt feature: process (from target Qt6::Core) +QT_FEATURE_process:INTERNAL=ON +//Qt feature: processenvironment (from target Qt6::Core) +QT_FEATURE_processenvironment:INTERNAL=ON +//Qt feature: progressbar (from target Qt6::Widgets) +QT_FEATURE_progressbar:INTERNAL=ON +//Qt feature: progressdialog (from target Qt6::Widgets) +QT_FEATURE_progressdialog:INTERNAL=ON +//Qt feature: proxymodel (from target Qt6::Core) +QT_FEATURE_proxymodel:INTERNAL=ON +//Qt feature: pthread_clockjoin (from target Qt6::Core) +QT_FEATURE_pthread_clockjoin:INTERNAL=ON +//Qt feature: pthread_condattr_setclock (from target Qt6::Core) +QT_FEATURE_pthread_condattr_setclock:INTERNAL=ON +//Qt feature: pthread_timedjoin (from target Qt6::Core) +QT_FEATURE_pthread_timedjoin:INTERNAL=ON +//Qt feature: publicsuffix_qt (from target Qt6::Network) +QT_FEATURE_publicsuffix_qt:INTERNAL=ON +//Qt feature: publicsuffix_system (from target Qt6::Network) +QT_FEATURE_publicsuffix_system:INTERNAL=ON +//Qt feature: pulseaudio (from target Qt6::Multimedia) +QT_FEATURE_pulseaudio:INTERNAL=ON +//Qt feature: pushbutton (from target Qt6::Widgets) +QT_FEATURE_pushbutton:INTERNAL=ON +//Qt feature: qml_animation (from target Qt6::Qml) +QT_FEATURE_qml_animation:INTERNAL=ON +//Qt feature: qml_debug (from target Qt6::Qml) +QT_FEATURE_qml_debug:INTERNAL=ON +//Qt feature: qml_delegate_model (from target Qt6::QmlModels) +QT_FEATURE_qml_delegate_model:INTERNAL=ON +//Qt feature: qml_itemmodel (from target Qt6::Qml) +QT_FEATURE_qml_itemmodel:INTERNAL=ON +//Qt feature: qml_jit (from target Qt6::Qml) +QT_FEATURE_qml_jit:INTERNAL=ON +//Qt feature: qml_list_model (from target Qt6::QmlModels) +QT_FEATURE_qml_list_model:INTERNAL=ON +//Qt feature: qml_locale (from target Qt6::Qml) +QT_FEATURE_qml_locale:INTERNAL=ON +//Qt feature: qml_network (from target Qt6::Qml) +QT_FEATURE_qml_network:INTERNAL=ON +//Qt feature: qml_object_model (from target Qt6::QmlModels) +QT_FEATURE_qml_object_model:INTERNAL=ON +//Qt feature: qml_preview (from target Qt6::Qml) +QT_FEATURE_qml_preview:INTERNAL=ON +//Qt feature: qml_profiler (from target Qt6::Qml) +QT_FEATURE_qml_profiler:INTERNAL=ON +//Qt feature: qml_python (from target Qt6::Qml) +QT_FEATURE_qml_python:INTERNAL=ON +//Qt feature: qml_sfpm_model (from target Qt6::QmlModels) +QT_FEATURE_qml_sfpm_model:INTERNAL=ON +//Qt feature: qml_ssl (from target Qt6::Qml) +QT_FEATURE_qml_ssl:INTERNAL=ON +//Qt feature: qml_table_model (from target Qt6::QmlModels) +QT_FEATURE_qml_table_model:INTERNAL=ON +//Qt feature: qml_tree_model (from target Qt6::QmlModels) +QT_FEATURE_qml_tree_model:INTERNAL=ON +//Qt feature: qml_type_loader_thread (from target Qt6::Qml) +QT_FEATURE_qml_type_loader_thread:INTERNAL=ON +//Qt feature: qml_worker_script (from target Qt6::Qml) +QT_FEATURE_qml_worker_script:INTERNAL=ON +//Qt feature: qml_xml_http_request (from target Qt6::Qml) +QT_FEATURE_qml_xml_http_request:INTERNAL=ON +//Qt feature: qml_xmllistmodel (from target Qt6::Qml) +QT_FEATURE_qml_xmllistmodel:INTERNAL=ON +//Qt feature: qqnx_imf (from target Qt6::Gui) +QT_FEATURE_qqnx_imf:INTERNAL=OFF +//Qt feature: qqnx_pps (from target Qt6::Core) +QT_FEATURE_qqnx_pps:INTERNAL=OFF +//Qt feature: qtgui_threadpool (from target Qt6::Gui) +QT_FEATURE_qtgui_threadpool:INTERNAL=ON +//Qt feature: quick_animatedimage (from target Qt6::Quick) +QT_FEATURE_quick_animatedimage:INTERNAL=ON +//Qt feature: quick_canvas (from target Qt6::Quick) +QT_FEATURE_quick_canvas:INTERNAL=ON +//Qt feature: quick_designer (from target Qt6::Quick) +QT_FEATURE_quick_designer:INTERNAL=ON +//Qt feature: quick_draganddrop (from target Qt6::Quick) +QT_FEATURE_quick_draganddrop:INTERNAL=ON +//Qt feature: quick_flipable (from target Qt6::Quick) +QT_FEATURE_quick_flipable:INTERNAL=ON +//Qt feature: quick_gridview (from target Qt6::Quick) +QT_FEATURE_quick_gridview:INTERNAL=ON +//Qt feature: quick_itemview (from target Qt6::Quick) +QT_FEATURE_quick_itemview:INTERNAL=ON +//Qt feature: quick_listview (from target Qt6::Quick) +QT_FEATURE_quick_listview:INTERNAL=ON +//Qt feature: quick_particles (from target Qt6::Quick) +QT_FEATURE_quick_particles:INTERNAL=ON +//Qt feature: quick_path (from target Qt6::Quick) +QT_FEATURE_quick_path:INTERNAL=ON +//Qt feature: quick_pathview (from target Qt6::Quick) +QT_FEATURE_quick_pathview:INTERNAL=ON +//Qt feature: quick_pixmap_cache_threaded_download (from target +// Qt6::Quick) +QT_FEATURE_quick_pixmap_cache_threaded_download:INTERNAL=ON +//Qt feature: quick_positioners (from target Qt6::Quick) +QT_FEATURE_quick_positioners:INTERNAL=ON +//Qt feature: quick_repeater (from target Qt6::Quick) +QT_FEATURE_quick_repeater:INTERNAL=ON +//Qt feature: quick_shadereffect (from target Qt6::Quick) +QT_FEATURE_quick_shadereffect:INTERNAL=ON +//Qt feature: quick_sprite (from target Qt6::Quick) +QT_FEATURE_quick_sprite:INTERNAL=ON +//Qt feature: quick_tableview (from target Qt6::Quick) +QT_FEATURE_quick_tableview:INTERNAL=ON +//Qt feature: quick_treeview (from target Qt6::Quick) +QT_FEATURE_quick_treeview:INTERNAL=ON +//Qt feature: quick_vectorimage (from target Qt6::Quick) +QT_FEATURE_quick_vectorimage:INTERNAL=ON +//Qt feature: quick_viewtransitions (from target Qt6::Quick) +QT_FEATURE_quick_viewtransitions:INTERNAL=ON +//Qt feature: radiobutton (from target Qt6::Widgets) +QT_FEATURE_radiobutton:INTERNAL=ON +//Qt feature: raster_64bit (from target Qt6::Gui) +QT_FEATURE_raster_64bit:INTERNAL=ON +//Qt feature: raster_fp (from target Qt6::Gui) +QT_FEATURE_raster_fp:INTERNAL=ON +//Qt feature: rdrnd (from target Qt6::Core) +QT_FEATURE_rdrnd:INTERNAL=ON +//Qt feature: rdseed (from target Qt6::Core) +QT_FEATURE_rdseed:INTERNAL=ON +//Qt feature: reduce_exports (from target Qt6::Core) +QT_FEATURE_reduce_exports:INTERNAL=ON +//Qt feature: reduce_relocations (from target Qt6::Core) +QT_FEATURE_reduce_relocations:INTERNAL=OFF +//Qt feature: regularexpression (from target Qt6::Core) +QT_FEATURE_regularexpression:INTERNAL=ON +//Qt feature: relocatable (from target Qt6::Core) +QT_FEATURE_relocatable:INTERNAL=OFF +//Qt feature: relro_now_linker (from target Qt6::Core) +QT_FEATURE_relro_now_linker:INTERNAL=ON +//Qt feature: renameat2 (from target Qt6::Core) +QT_FEATURE_renameat2:INTERNAL=ON +//Qt feature: res_setservers (from target Qt6::Network) +QT_FEATURE_res_setservers:INTERNAL=OFF +//Qt feature: resizehandler (from target Qt6::Widgets) +QT_FEATURE_resizehandler:INTERNAL=ON +//Qt feature: rpath (from target Qt6::Core) +QT_FEATURE_rpath:INTERNAL=OFF +//Qt feature: rubberband (from target Qt6::Widgets) +QT_FEATURE_rubberband:INTERNAL=ON +//Qt feature: run_opengl_tests (from target Qt6::Gui) +QT_FEATURE_run_opengl_tests:INTERNAL=ON +//Qt feature: schannel (from target Qt6::Network) +QT_FEATURE_schannel:INTERNAL=OFF +//Qt feature: scrollarea (from target Qt6::Widgets) +QT_FEATURE_scrollarea:INTERNAL=ON +//Qt feature: scrollbar (from target Qt6::Widgets) +QT_FEATURE_scrollbar:INTERNAL=ON +//Qt feature: scroller (from target Qt6::Widgets) +QT_FEATURE_scroller:INTERNAL=ON +//Qt feature: sctp (from target Qt6::Network) +QT_FEATURE_sctp:INTERNAL=ON +//Qt feature: securetransport (from target Qt6::Network) +QT_FEATURE_securetransport:INTERNAL=OFF +//Qt feature: separate_debug_info (from target Qt6::Core) +QT_FEATURE_separate_debug_info:INTERNAL=OFF +//Qt feature: sessionmanager (from target Qt6::Gui) +QT_FEATURE_sessionmanager:INTERNAL=ON +//Qt feature: settings (from target Qt6::Core) +QT_FEATURE_settings:INTERNAL=ON +//Qt feature: sha3_fast (from target Qt6::Core) +QT_FEATURE_sha3_fast:INTERNAL=ON +//Qt feature: shani (from target Qt6::Core) +QT_FEATURE_shani:INTERNAL=ON +//Qt feature: shared (from target Qt6::Core) +QT_FEATURE_shared:INTERNAL=ON +//Qt feature: sharedmemory (from target Qt6::Core) +QT_FEATURE_sharedmemory:INTERNAL=ON +//Qt feature: shortcut (from target Qt6::Core) +QT_FEATURE_shortcut:INTERNAL=ON +//Qt feature: signaling_nan (from target Qt6::Core) +QT_FEATURE_signaling_nan:INTERNAL=ON +//Qt feature: simulator_and_device (from target Qt6::Core) +QT_FEATURE_simulator_and_device:INTERNAL=OFF +//Qt feature: sizegrip (from target Qt6::Widgets) +QT_FEATURE_sizegrip:INTERNAL=ON +//Qt feature: slider (from target Qt6::Widgets) +QT_FEATURE_slider:INTERNAL=ON +//Qt feature: slog2 (from target Qt6::Core) +QT_FEATURE_slog2:INTERNAL=OFF +//Qt feature: socks5 (from target Qt6::Network) +QT_FEATURE_socks5:INTERNAL=ON +//Qt feature: sortfilterproxymodel (from target Qt6::Core) +QT_FEATURE_sortfilterproxymodel:INTERNAL=ON +//Qt feature: spatialaudio (from target Qt6::Multimedia) +QT_FEATURE_spatialaudio:INTERNAL=ON +//Qt feature: spatialaudio_quick3d (from target Qt6::Multimedia) +QT_FEATURE_spatialaudio_quick3d:INTERNAL=ON +//Qt feature: spinbox (from target Qt6::Widgets) +QT_FEATURE_spinbox:INTERNAL=ON +//Qt feature: splashscreen (from target Qt6::Widgets) +QT_FEATURE_splashscreen:INTERNAL=ON +//Qt feature: splitter (from target Qt6::Widgets) +QT_FEATURE_splitter:INTERNAL=ON +//Qt feature: sql (from target Qt6::Core) +QT_FEATURE_sql:INTERNAL=ON +//Qt feature: sqlmodel (from target Qt6::Sql) +QT_FEATURE_sqlmodel:INTERNAL=ON +//Qt feature: sse2 (from target Qt6::Core) +QT_FEATURE_sse2:INTERNAL=ON +//Qt feature: sse3 (from target Qt6::Core) +QT_FEATURE_sse3:INTERNAL=ON +//Qt feature: sse4_1 (from target Qt6::Core) +QT_FEATURE_sse4_1:INTERNAL=ON +//Qt feature: sse4_2 (from target Qt6::Core) +QT_FEATURE_sse4_2:INTERNAL=ON +//Qt feature: ssl (from target Qt6::Network) +QT_FEATURE_ssl:INTERNAL=ON +//Qt feature: sspi (from target Qt6::Network) +QT_FEATURE_sspi:INTERNAL=OFF +//Qt feature: ssse3 (from target Qt6::Core) +QT_FEATURE_ssse3:INTERNAL=ON +//Qt feature: stack_clash_protection (from target Qt6::Core) +QT_FEATURE_stack_clash_protection:INTERNAL=ON +//Qt feature: stack_protector (from target Qt6::Core) +QT_FEATURE_stack_protector:INTERNAL=ON +//Qt feature: stackedwidget (from target Qt6::Widgets) +QT_FEATURE_stackedwidget:INTERNAL=ON +//Qt feature: standarditemmodel (from target Qt6::Gui) +QT_FEATURE_standarditemmodel:INTERNAL=ON +//Qt feature: static (from target Qt6::Core) +QT_FEATURE_static:INTERNAL=OFF +//Qt feature: statusbar (from target Qt6::Widgets) +QT_FEATURE_statusbar:INTERNAL=ON +//Qt feature: statustip (from target Qt6::Widgets) +QT_FEATURE_statustip:INTERNAL=ON +//Qt feature: std_atomic64 (from target Qt6::Core) +QT_FEATURE_std_atomic64:INTERNAL=ON +//Qt feature: stdlib_libcpp (from target Qt6::Core) +QT_FEATURE_stdlib_libcpp:INTERNAL=OFF +//Qt feature: stringlistmodel (from target Qt6::Core) +QT_FEATURE_stringlistmodel:INTERNAL=ON +//Qt feature: style_android (from target Qt6::Widgets) +QT_FEATURE_style_android:INTERNAL=OFF +//Qt feature: style_fusion (from target Qt6::Widgets) +QT_FEATURE_style_fusion:INTERNAL=ON +//Qt feature: style_mac (from target Qt6::Widgets) +QT_FEATURE_style_mac:INTERNAL=OFF +//Qt feature: style_stylesheet (from target Qt6::Widgets) +QT_FEATURE_style_stylesheet:INTERNAL=ON +//Qt feature: style_windows (from target Qt6::Widgets) +QT_FEATURE_style_windows:INTERNAL=ON +//Qt feature: style_windows11 (from target Qt6::Widgets) +QT_FEATURE_style_windows11:INTERNAL=OFF +//Qt feature: style_windowsvista (from target Qt6::Widgets) +QT_FEATURE_style_windowsvista:INTERNAL=OFF +//Qt feature: syntaxhighlighter (from target Qt6::Widgets) +QT_FEATURE_syntaxhighlighter:INTERNAL=ON +//Qt feature: syslog (from target Qt6::Core) +QT_FEATURE_syslog:INTERNAL=OFF +//Qt feature: system_doubleconversion (from target Qt6::Core) +QT_FEATURE_system_doubleconversion:INTERNAL=ON +//Qt feature: system_freetype (from target Qt6::Gui) +QT_FEATURE_system_freetype:INTERNAL=ON +//Qt feature: system_harfbuzz (from target Qt6::Gui) +QT_FEATURE_system_harfbuzz:INTERNAL=ON +//Qt feature: system_jpeg (from target Qt6::Gui) +QT_FEATURE_system_jpeg:INTERNAL=ON +//Qt feature: system_libb2 (from target Qt6::Core) +QT_FEATURE_system_libb2:INTERNAL=ON +//Qt feature: system_pcre2 (from target Qt6::Core) +QT_FEATURE_system_pcre2:INTERNAL=ON +//Qt feature: system_png (from target Qt6::Gui) +QT_FEATURE_system_png:INTERNAL=ON +//Qt feature: system_proxies (from target Qt6::Network) +QT_FEATURE_system_proxies:INTERNAL=ON +//Qt feature: system_textmarkdownreader (from target Qt6::Gui) +QT_FEATURE_system_textmarkdownreader:INTERNAL=OFF +//Qt feature: system_xcb_xinput (from target Qt6::Gui) +QT_FEATURE_system_xcb_xinput:INTERNAL=OFF +//Qt feature: system_zlib (from target Qt6::Core) +QT_FEATURE_system_zlib:INTERNAL=ON +//Qt feature: systemsemaphore (from target Qt6::Core) +QT_FEATURE_systemsemaphore:INTERNAL=ON +//Qt feature: systemtrayicon (from target Qt6::Gui) +QT_FEATURE_systemtrayicon:INTERNAL=ON +//Qt feature: sysv_sem (from target Qt6::Core) +QT_FEATURE_sysv_sem:INTERNAL=ON +//Qt feature: sysv_shm (from target Qt6::Core) +QT_FEATURE_sysv_shm:INTERNAL=ON +//Qt feature: tabbar (from target Qt6::Widgets) +QT_FEATURE_tabbar:INTERNAL=ON +//Qt feature: tabletevent (from target Qt6::Gui) +QT_FEATURE_tabletevent:INTERNAL=ON +//Qt feature: tableview (from target Qt6::Widgets) +QT_FEATURE_tableview:INTERNAL=ON +//Qt feature: tablewidget (from target Qt6::Widgets) +QT_FEATURE_tablewidget:INTERNAL=ON +//Qt feature: tabwidget (from target Qt6::Widgets) +QT_FEATURE_tabwidget:INTERNAL=ON +//Qt feature: temporaryfile (from target Qt6::Core) +QT_FEATURE_temporaryfile:INTERNAL=ON +//Qt feature: test_gui (from target Qt6::Core) +QT_FEATURE_test_gui:INTERNAL=ON +//Qt feature: testlib (from target Qt6::Core) +QT_FEATURE_testlib:INTERNAL=ON +//Qt feature: testlib_selfcover (from target Qt6::Test) +QT_FEATURE_testlib_selfcover:INTERNAL=OFF +//Qt feature: textbrowser (from target Qt6::Widgets) +QT_FEATURE_textbrowser:INTERNAL=ON +//Qt feature: textdate (from target Qt6::Core) +QT_FEATURE_textdate:INTERNAL=ON +//Qt feature: textedit (from target Qt6::Widgets) +QT_FEATURE_textedit:INTERNAL=ON +//Qt feature: texthtmlparser (from target Qt6::Gui) +QT_FEATURE_texthtmlparser:INTERNAL=ON +//Qt feature: textmarkdownreader (from target Qt6::Gui) +QT_FEATURE_textmarkdownreader:INTERNAL=ON +//Qt feature: textmarkdownwriter (from target Qt6::Gui) +QT_FEATURE_textmarkdownwriter:INTERNAL=ON +//Qt feature: textodfwriter (from target Qt6::Gui) +QT_FEATURE_textodfwriter:INTERNAL=ON +//Qt feature: thread (from target Qt6::Core) +QT_FEATURE_thread:INTERNAL=ON +//Qt feature: threadsafe_cloexec (from target Qt6::Core) +QT_FEATURE_threadsafe_cloexec:INTERNAL=ON +//Qt feature: timezone (from target Qt6::Core) +QT_FEATURE_timezone:INTERNAL=ON +//Qt feature: timezone_locale (from target Qt6::Core) +QT_FEATURE_timezone_locale:INTERNAL=ON +//Qt feature: timezone_tzdb (from target Qt6::Core) +QT_FEATURE_timezone_tzdb:INTERNAL=OFF +//Qt feature: toolbar (from target Qt6::Widgets) +QT_FEATURE_toolbar:INTERNAL=ON +//Qt feature: toolbox (from target Qt6::Widgets) +QT_FEATURE_toolbox:INTERNAL=ON +//Qt feature: toolbutton (from target Qt6::Widgets) +QT_FEATURE_toolbutton:INTERNAL=ON +//Qt feature: tooltip (from target Qt6::Widgets) +QT_FEATURE_tooltip:INTERNAL=ON +//Qt feature: topleveldomain (from target Qt6::Network) +QT_FEATURE_topleveldomain:INTERNAL=ON +//Qt feature: translation (from target Qt6::Core) +QT_FEATURE_translation:INTERNAL=ON +//Qt feature: transposeproxymodel (from target Qt6::Core) +QT_FEATURE_transposeproxymodel:INTERNAL=ON +//Qt feature: treeview (from target Qt6::Widgets) +QT_FEATURE_treeview:INTERNAL=ON +//Qt feature: treewidget (from target Qt6::Widgets) +QT_FEATURE_treewidget:INTERNAL=ON +//Qt feature: trivial_auto_var_init_pattern (from target Qt6::Core) +QT_FEATURE_trivial_auto_var_init_pattern:INTERNAL=ON +//Qt feature: tslib (from target Qt6::Gui) +QT_FEATURE_tslib:INTERNAL=ON +//Qt feature: tuiotouch (from target Qt6::Gui) +QT_FEATURE_tuiotouch:INTERNAL=ON +//Qt feature: udpsocket (from target Qt6::Network) +QT_FEATURE_udpsocket:INTERNAL=ON +//Qt feature: undocommand (from target Qt6::Gui) +QT_FEATURE_undocommand:INTERNAL=ON +//Qt feature: undogroup (from target Qt6::Gui) +QT_FEATURE_undogroup:INTERNAL=ON +//Qt feature: undostack (from target Qt6::Gui) +QT_FEATURE_undostack:INTERNAL=ON +//Qt feature: undoview (from target Qt6::Widgets) +QT_FEATURE_undoview:INTERNAL=ON +//Qt feature: use_bfd_linker (from target Qt6::Core) +QT_FEATURE_use_bfd_linker:INTERNAL=OFF +//Qt feature: use_gold_linker (from target Qt6::Core) +QT_FEATURE_use_gold_linker:INTERNAL=OFF +//Qt feature: use_lld_linker (from target Qt6::Core) +QT_FEATURE_use_lld_linker:INTERNAL=OFF +//Qt feature: use_mold_linker (from target Qt6::Core) +QT_FEATURE_use_mold_linker:INTERNAL=OFF +//Qt feature: vaapi (from target Qt6::Multimedia) +QT_FEATURE_vaapi:INTERNAL=ON +//Qt feature: vaes (from target Qt6::Core) +QT_FEATURE_vaes:INTERNAL=ON +//Qt feature: valgrind (from target Qt6::Test) +QT_FEATURE_valgrind:INTERNAL=ON +//Qt feature: validator (from target Qt6::Gui) +QT_FEATURE_validator:INTERNAL=ON +//Qt feature: version_tagging (from target Qt6::Core) +QT_FEATURE_version_tagging:INTERNAL=ON +//Qt feature: videotoolbox (from target Qt6::Multimedia) +QT_FEATURE_videotoolbox:INTERNAL=OFF +//Qt feature: vkgen (from target Qt6::Gui) +QT_FEATURE_vkgen:INTERNAL=ON +//Qt feature: vkkhrdisplay (from target Qt6::Gui) +QT_FEATURE_vkkhrdisplay:INTERNAL=ON +//Qt feature: vnc (from target Qt6::Gui) +QT_FEATURE_vnc:INTERNAL=ON +//Qt feature: vsp2 (from target Qt6::Gui) +QT_FEATURE_vsp2:INTERNAL=OFF +//Qt feature: vulkan (from target Qt6::Gui) +QT_FEATURE_vulkan:INTERNAL=ON +//Qt feature: vxpipedrv (from target Qt6::Core) +QT_FEATURE_vxpipedrv:INTERNAL=OFF +//Qt feature: vxworksevdev (from target Qt6::Gui) +QT_FEATURE_vxworksevdev:INTERNAL=OFF +//Qt feature: wasapi (from target Qt6::Multimedia) +QT_FEATURE_wasapi:INTERNAL=OFF +//Qt feature: wasm (from target Qt6::Multimedia) +QT_FEATURE_wasm:INTERNAL=OFF +//Qt feature: wasm_exceptions (from target Qt6::Core) +QT_FEATURE_wasm_exceptions:INTERNAL=OFF +//Qt feature: wasm_jspi (from target Qt6::Core) +QT_FEATURE_wasm_jspi:INTERNAL=OFF +//Qt feature: wasm_simd128 (from target Qt6::Core) +QT_FEATURE_wasm_simd128:INTERNAL=OFF +//Qt feature: wayland (from target Qt6::Gui) +QT_FEATURE_wayland:INTERNAL=ON +//Qt feature: wayland_brcm (from target Qt6::Gui) +QT_FEATURE_wayland_brcm:INTERNAL=OFF +//Qt feature: wayland_client (from target Qt6::Gui) +QT_FEATURE_wayland_client:INTERNAL=ON +//Qt feature: wayland_client_fullscreen_shell_v1 (from target Qt6::Gui) +QT_FEATURE_wayland_client_fullscreen_shell_v1:INTERNAL=ON +//Qt feature: wayland_client_primary_selection (from target Qt6::Gui) +QT_FEATURE_wayland_client_primary_selection:INTERNAL=ON +//Qt feature: wayland_client_wl_shell (from target Qt6::Gui) +QT_FEATURE_wayland_client_wl_shell:INTERNAL=ON +//Qt feature: wayland_client_xdg_shell (from target Qt6::Gui) +QT_FEATURE_wayland_client_xdg_shell:INTERNAL=ON +//Qt feature: wayland_datadevice (from target Qt6::Gui) +QT_FEATURE_wayland_datadevice:INTERNAL=ON +//Qt feature: wayland_dmabuf_server_buffer (from target Qt6::Gui) +QT_FEATURE_wayland_dmabuf_server_buffer:INTERNAL=ON +//Qt feature: wayland_drm_egl_server_buffer (from target Qt6::Gui) +QT_FEATURE_wayland_drm_egl_server_buffer:INTERNAL=ON +//Qt feature: wayland_egl (from target Qt6::Gui) +QT_FEATURE_wayland_egl:INTERNAL=ON +//Qt feature: wayland_libhybris_egl_server_buffer (from target +// Qt6::Gui) +QT_FEATURE_wayland_libhybris_egl_server_buffer:INTERNAL=OFF +//Qt feature: wayland_server (from target Qt6::Gui) +QT_FEATURE_wayland_server:INTERNAL=ON +//Qt feature: wayland_shm_emulation_server_buffer (from target +// Qt6::Gui) +QT_FEATURE_wayland_shm_emulation_server_buffer:INTERNAL=ON +//Qt feature: wayland_vulkan_server_buffer (from target Qt6::Gui) +QT_FEATURE_wayland_vulkan_server_buffer:INTERNAL=ON +//Qt feature: waylandscanner (from target Qt6::Gui) +QT_FEATURE_waylandscanner:INTERNAL=ON +//Qt feature: whatsthis (from target Qt6::Gui) +QT_FEATURE_whatsthis:INTERNAL=ON +//Qt feature: wheelevent (from target Qt6::Gui) +QT_FEATURE_wheelevent:INTERNAL=ON +//Qt feature: widgets (from target Qt6::Core) +QT_FEATURE_widgets:INTERNAL=ON +//Qt feature: widgettextcontrol (from target Qt6::Widgets) +QT_FEATURE_widgettextcontrol:INTERNAL=ON +//Qt feature: winsdkicu (from target Qt6::Core) +QT_FEATURE_winsdkicu:INTERNAL=OFF +//Qt feature: wizard (from target Qt6::Widgets) +QT_FEATURE_wizard:INTERNAL=ON +//Qt feature: x86intrin (from target Qt6::Core) +QT_FEATURE_x86intrin:INTERNAL=ON +//Qt feature: xcb (from target Qt6::Gui) +QT_FEATURE_xcb:INTERNAL=ON +//Qt feature: xcb_egl_plugin (from target Qt6::Gui) +QT_FEATURE_xcb_egl_plugin:INTERNAL=ON +//Qt feature: xcb_glx (from target Qt6::Gui) +QT_FEATURE_xcb_glx:INTERNAL=ON +//Qt feature: xcb_glx_plugin (from target Qt6::Gui) +QT_FEATURE_xcb_glx_plugin:INTERNAL=ON +//Qt feature: xcb_native_painting (from target Qt6::Gui) +QT_FEATURE_xcb_native_painting:INTERNAL=OFF +//Qt feature: xcb_sm (from target Qt6::Gui) +QT_FEATURE_xcb_sm:INTERNAL=ON +//Qt feature: xcb_xlib (from target Qt6::Gui) +QT_FEATURE_xcb_xlib:INTERNAL=ON +//Qt feature: xkbcommon (from target Qt6::Gui) +QT_FEATURE_xkbcommon:INTERNAL=ON +//Qt feature: xkbcommon_x11 (from target Qt6::Gui) +QT_FEATURE_xkbcommon_x11:INTERNAL=ON +//Qt feature: xlib (from target Qt6::Gui) +QT_FEATURE_xlib:INTERNAL=ON +//Qt feature: xml (from target Qt6::Core) +QT_FEATURE_xml:INTERNAL=ON +//Qt feature: xmlstream (from target Qt6::Core) +QT_FEATURE_xmlstream:INTERNAL=ON +//Qt feature: xmlstreamreader (from target Qt6::Core) +QT_FEATURE_xmlstreamreader:INTERNAL=ON +//Qt feature: xmlstreamwriter (from target Qt6::Core) +QT_FEATURE_xmlstreamwriter:INTERNAL=ON +//Qt feature: xrender (from target Qt6::Gui) +QT_FEATURE_xrender:INTERNAL=OFF +//Qt feature: zstd (from target Qt6::Core) +QT_FEATURE_zstd:INTERNAL=ON +//ADVANCED property for variable: TIFF_INCLUDE_DIR +TIFF_INCLUDE_DIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: TIFF_LIBRARY_DEBUG +TIFF_LIBRARY_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: TIFF_LIBRARY_RELEASE +TIFF_LIBRARY_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: Vulkan_GLSLANG_VALIDATOR_EXECUTABLE +Vulkan_GLSLANG_VALIDATOR_EXECUTABLE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: Vulkan_GLSLC_EXECUTABLE +Vulkan_GLSLC_EXECUTABLE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: Vulkan_INCLUDE_DIR +Vulkan_INCLUDE_DIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: Vulkan_LIBRARY +Vulkan_LIBRARY-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: ZLIB_INCLUDE_DIR +ZLIB_INCLUDE_DIR-ADVANCED:INTERNAL=1 +//CMAKE_INSTALL_PREFIX during last run +_GNUInstallDirs_LAST_CMAKE_INSTALL_PREFIX:INTERNAL=/usr/local +__pkg_config_arguments_FFmpeg:INTERNAL=REQUIRED;IMPORTED_TARGET;libavdevice;libavformat;libavcodec;libswresample;libswscale;libavutil +__pkg_config_arguments_avutil:INTERNAL=REQUIRED;IMPORTED_TARGET;libavutil +__pkg_config_arguments_swresample:INTERNAL=REQUIRED;IMPORTED_TARGET;libswresample +__pkg_config_checked_FFmpeg:INTERNAL=1 +__pkg_config_checked_avutil:INTERNAL=1 +__pkg_config_checked_swresample:INTERNAL=1 +__qt_qml_macros_module_base_dir:INTERNAL=/usr/lib64/cmake/Qt6Qml +avutil_CFLAGS:INTERNAL=-I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include +avutil_CFLAGS_I:INTERNAL= +avutil_CFLAGS_OTHER:INTERNAL= +avutil_FOUND:INTERNAL=1 +avutil_INCLUDEDIR:INTERNAL=/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include +avutil_INCLUDE_DIRS:INTERNAL=/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include +avutil_LDFLAGS:INTERNAL=-L/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib;-lavutil +avutil_LDFLAGS_OTHER:INTERNAL= +avutil_LIBDIR:INTERNAL=/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib +avutil_LIBRARIES:INTERNAL=avutil +avutil_LIBRARY_DIRS:INTERNAL=/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib +avutil_LIBS:INTERNAL= +avutil_LIBS_L:INTERNAL= +avutil_LIBS_OTHER:INTERNAL= +avutil_LIBS_PATHS:INTERNAL= +avutil_MODULE_NAME:INTERNAL=libavutil +avutil_PREFIX:INTERNAL=/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release +avutil_STATIC_CFLAGS:INTERNAL=-I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include +avutil_STATIC_CFLAGS_I:INTERNAL= +avutil_STATIC_CFLAGS_OTHER:INTERNAL= +avutil_STATIC_INCLUDE_DIRS:INTERNAL=/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include +avutil_STATIC_LDFLAGS:INTERNAL=-L/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib;-lavutil;-lm;-lz;-ldrm;-latomic;-pthread +avutil_STATIC_LDFLAGS_OTHER:INTERNAL=-pthread +avutil_STATIC_LIBDIR:INTERNAL= +avutil_STATIC_LIBRARIES:INTERNAL=avutil;m;z;drm;atomic +avutil_STATIC_LIBRARY_DIRS:INTERNAL=/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib +avutil_STATIC_LIBS:INTERNAL= +avutil_STATIC_LIBS_L:INTERNAL= +avutil_STATIC_LIBS_OTHER:INTERNAL= +avutil_STATIC_LIBS_PATHS:INTERNAL= +avutil_VERSION:INTERNAL=60.26.100 +avutil_libavutil_INCLUDEDIR:INTERNAL= +avutil_libavutil_LIBDIR:INTERNAL= +avutil_libavutil_PREFIX:INTERNAL= +avutil_libavutil_VERSION:INTERNAL= +//ADVANCED property for variable: pkgcfg_lib_FFmpeg_avcodec +pkgcfg_lib_FFmpeg_avcodec-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: pkgcfg_lib_FFmpeg_avdevice +pkgcfg_lib_FFmpeg_avdevice-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: pkgcfg_lib_FFmpeg_avformat +pkgcfg_lib_FFmpeg_avformat-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: pkgcfg_lib_FFmpeg_avutil +pkgcfg_lib_FFmpeg_avutil-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: pkgcfg_lib_FFmpeg_swresample +pkgcfg_lib_FFmpeg_swresample-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: pkgcfg_lib_FFmpeg_swscale +pkgcfg_lib_FFmpeg_swscale-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: pkgcfg_lib_avutil_avutil +pkgcfg_lib_avutil_avutil-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: pkgcfg_lib_swresample_swresample +pkgcfg_lib_swresample_swresample-ADVANCED:INTERNAL=1 +prefix_result:INTERNAL=/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib +//ADVANCED property for variable: pystring_INCLUDE_DIR +pystring_INCLUDE_DIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: pystring_LIBRARY +pystring_LIBRARY-ADVANCED:INTERNAL=1 +swresample_CFLAGS:INTERNAL=-I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include +swresample_CFLAGS_I:INTERNAL= +swresample_CFLAGS_OTHER:INTERNAL= +swresample_FOUND:INTERNAL=1 +swresample_INCLUDEDIR:INTERNAL=/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include +swresample_INCLUDE_DIRS:INTERNAL=/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include +swresample_LDFLAGS:INTERNAL=-L/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib;-lswresample +swresample_LDFLAGS_OTHER:INTERNAL= +swresample_LIBDIR:INTERNAL=/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib +swresample_LIBRARIES:INTERNAL=swresample +swresample_LIBRARY_DIRS:INTERNAL=/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib +swresample_LIBS:INTERNAL= +swresample_LIBS_L:INTERNAL= +swresample_LIBS_OTHER:INTERNAL= +swresample_LIBS_PATHS:INTERNAL= +swresample_MODULE_NAME:INTERNAL=libswresample +swresample_PREFIX:INTERNAL=/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release +swresample_STATIC_CFLAGS:INTERNAL=-I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include +swresample_STATIC_CFLAGS_I:INTERNAL= +swresample_STATIC_CFLAGS_OTHER:INTERNAL= +swresample_STATIC_INCLUDE_DIRS:INTERNAL=/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include +swresample_STATIC_LDFLAGS:INTERNAL=-L/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib;-lswresample;-lm;-latomic;-lavutil;-lm;-lz;-ldrm;-latomic;-pthread +swresample_STATIC_LDFLAGS_OTHER:INTERNAL=-pthread +swresample_STATIC_LIBDIR:INTERNAL= +swresample_STATIC_LIBRARIES:INTERNAL=swresample;m;atomic;avutil;m;z;drm;atomic +swresample_STATIC_LIBRARY_DIRS:INTERNAL=/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib +swresample_STATIC_LIBS:INTERNAL= +swresample_STATIC_LIBS_L:INTERNAL= +swresample_STATIC_LIBS_OTHER:INTERNAL= +swresample_STATIC_LIBS_PATHS:INTERNAL= +swresample_VERSION:INTERNAL=6.3.100 +swresample_libswresample_INCLUDEDIR:INTERNAL= +swresample_libswresample_LIBDIR:INTERNAL= +swresample_libswresample_PREFIX:INTERNAL= +swresample_libswresample_VERSION:INTERNAL= + diff --git a/build-linux/CMakeFiles/3.31.11/CMakeCXXCompiler.cmake b/build-linux/CMakeFiles/3.31.11/CMakeCXXCompiler.cmake new file mode 100644 index 00000000..dc4e855f --- /dev/null +++ b/build-linux/CMakeFiles/3.31.11/CMakeCXXCompiler.cmake @@ -0,0 +1,107 @@ +set(CMAKE_CXX_COMPILER "/usr/bin/c++") +set(CMAKE_CXX_COMPILER_ARG1 "") +set(CMAKE_CXX_COMPILER_ID "GNU") +set(CMAKE_CXX_COMPILER_VERSION "15.2.1") +set(CMAKE_CXX_COMPILER_VERSION_INTERNAL "") +set(CMAKE_CXX_COMPILER_WRAPPER "") +set(CMAKE_CXX_STANDARD_COMPUTED_DEFAULT "17") +set(CMAKE_CXX_EXTENSIONS_COMPUTED_DEFAULT "ON") +set(CMAKE_CXX_STANDARD_LATEST "26") +set(CMAKE_CXX_COMPILE_FEATURES "cxx_std_98;cxx_template_template_parameters;cxx_std_11;cxx_alias_templates;cxx_alignas;cxx_alignof;cxx_attributes;cxx_auto_type;cxx_constexpr;cxx_decltype;cxx_decltype_incomplete_return_types;cxx_default_function_template_args;cxx_defaulted_functions;cxx_defaulted_move_initializers;cxx_delegating_constructors;cxx_deleted_functions;cxx_enum_forward_declarations;cxx_explicit_conversions;cxx_extended_friend_declarations;cxx_extern_templates;cxx_final;cxx_func_identifier;cxx_generalized_initializers;cxx_inheriting_constructors;cxx_inline_namespaces;cxx_lambdas;cxx_local_type_template_args;cxx_long_long_type;cxx_noexcept;cxx_nonstatic_member_init;cxx_nullptr;cxx_override;cxx_range_for;cxx_raw_string_literals;cxx_reference_qualified_functions;cxx_right_angle_brackets;cxx_rvalue_references;cxx_sizeof_member;cxx_static_assert;cxx_strong_enums;cxx_thread_local;cxx_trailing_return_types;cxx_unicode_literals;cxx_uniform_initialization;cxx_unrestricted_unions;cxx_user_literals;cxx_variadic_macros;cxx_variadic_templates;cxx_std_14;cxx_aggregate_default_initializers;cxx_attribute_deprecated;cxx_binary_literals;cxx_contextual_conversions;cxx_decltype_auto;cxx_digit_separators;cxx_generic_lambdas;cxx_lambda_init_captures;cxx_relaxed_constexpr;cxx_return_type_deduction;cxx_variable_templates;cxx_std_17;cxx_std_20;cxx_std_23;cxx_std_26") +set(CMAKE_CXX98_COMPILE_FEATURES "cxx_std_98;cxx_template_template_parameters") +set(CMAKE_CXX11_COMPILE_FEATURES "cxx_std_11;cxx_alias_templates;cxx_alignas;cxx_alignof;cxx_attributes;cxx_auto_type;cxx_constexpr;cxx_decltype;cxx_decltype_incomplete_return_types;cxx_default_function_template_args;cxx_defaulted_functions;cxx_defaulted_move_initializers;cxx_delegating_constructors;cxx_deleted_functions;cxx_enum_forward_declarations;cxx_explicit_conversions;cxx_extended_friend_declarations;cxx_extern_templates;cxx_final;cxx_func_identifier;cxx_generalized_initializers;cxx_inheriting_constructors;cxx_inline_namespaces;cxx_lambdas;cxx_local_type_template_args;cxx_long_long_type;cxx_noexcept;cxx_nonstatic_member_init;cxx_nullptr;cxx_override;cxx_range_for;cxx_raw_string_literals;cxx_reference_qualified_functions;cxx_right_angle_brackets;cxx_rvalue_references;cxx_sizeof_member;cxx_static_assert;cxx_strong_enums;cxx_thread_local;cxx_trailing_return_types;cxx_unicode_literals;cxx_uniform_initialization;cxx_unrestricted_unions;cxx_user_literals;cxx_variadic_macros;cxx_variadic_templates") +set(CMAKE_CXX14_COMPILE_FEATURES "cxx_std_14;cxx_aggregate_default_initializers;cxx_attribute_deprecated;cxx_binary_literals;cxx_contextual_conversions;cxx_decltype_auto;cxx_digit_separators;cxx_generic_lambdas;cxx_lambda_init_captures;cxx_relaxed_constexpr;cxx_return_type_deduction;cxx_variable_templates") +set(CMAKE_CXX17_COMPILE_FEATURES "cxx_std_17") +set(CMAKE_CXX20_COMPILE_FEATURES "cxx_std_20") +set(CMAKE_CXX23_COMPILE_FEATURES "cxx_std_23") +set(CMAKE_CXX26_COMPILE_FEATURES "cxx_std_26") + +set(CMAKE_CXX_PLATFORM_ID "Linux") +set(CMAKE_CXX_SIMULATE_ID "") +set(CMAKE_CXX_COMPILER_FRONTEND_VARIANT "GNU") +set(CMAKE_CXX_SIMULATE_VERSION "") + + + + +set(CMAKE_AR "/usr/bin/ar") +set(CMAKE_CXX_COMPILER_AR "/usr/bin/gcc-ar") +set(CMAKE_RANLIB "/usr/bin/ranlib") +set(CMAKE_CXX_COMPILER_RANLIB "/usr/bin/gcc-ranlib") +set(CMAKE_LINKER "/usr/bin/ld") +set(CMAKE_LINKER_LINK "") +set(CMAKE_LINKER_LLD "") +set(CMAKE_CXX_COMPILER_LINKER "/usr/bin/ld") +set(CMAKE_CXX_COMPILER_LINKER_ID "GNU") +set(CMAKE_CXX_COMPILER_LINKER_VERSION 2.45.1) +set(CMAKE_CXX_COMPILER_LINKER_FRONTEND_VARIANT GNU) +set(CMAKE_MT "") +set(CMAKE_TAPI "CMAKE_TAPI-NOTFOUND") +set(CMAKE_COMPILER_IS_GNUCXX 1) +set(CMAKE_CXX_COMPILER_LOADED 1) +set(CMAKE_CXX_COMPILER_WORKS TRUE) +set(CMAKE_CXX_ABI_COMPILED TRUE) + +set(CMAKE_CXX_COMPILER_ENV_VAR "CXX") + +set(CMAKE_CXX_COMPILER_ID_RUN 1) +set(CMAKE_CXX_SOURCE_FILE_EXTENSIONS C;M;c++;cc;cpp;cxx;m;mm;mpp;CPP;ixx;cppm;ccm;cxxm;c++m) +set(CMAKE_CXX_IGNORE_EXTENSIONS inl;h;hpp;HPP;H;o;O;obj;OBJ;def;DEF;rc;RC) + +foreach (lang IN ITEMS C OBJC OBJCXX) + if (CMAKE_${lang}_COMPILER_ID_RUN) + foreach(extension IN LISTS CMAKE_${lang}_SOURCE_FILE_EXTENSIONS) + list(REMOVE_ITEM CMAKE_CXX_SOURCE_FILE_EXTENSIONS ${extension}) + endforeach() + endif() +endforeach() + +set(CMAKE_CXX_LINKER_PREFERENCE 30) +set(CMAKE_CXX_LINKER_PREFERENCE_PROPAGATES 1) +set(CMAKE_CXX_LINKER_DEPFILE_SUPPORTED TRUE) +set(CMAKE_LINKER_PUSHPOP_STATE_SUPPORTED TRUE) +set(CMAKE_CXX_LINKER_PUSHPOP_STATE_SUPPORTED TRUE) + +# Save compiler ABI information. +set(CMAKE_CXX_SIZEOF_DATA_PTR "8") +set(CMAKE_CXX_COMPILER_ABI "ELF") +set(CMAKE_CXX_BYTE_ORDER "LITTLE_ENDIAN") +set(CMAKE_CXX_LIBRARY_ARCHITECTURE "") + +if(CMAKE_CXX_SIZEOF_DATA_PTR) + set(CMAKE_SIZEOF_VOID_P "${CMAKE_CXX_SIZEOF_DATA_PTR}") +endif() + +if(CMAKE_CXX_COMPILER_ABI) + set(CMAKE_INTERNAL_PLATFORM_ABI "${CMAKE_CXX_COMPILER_ABI}") +endif() + +if(CMAKE_CXX_LIBRARY_ARCHITECTURE) + set(CMAKE_LIBRARY_ARCHITECTURE "") +endif() + +set(CMAKE_CXX_CL_SHOWINCLUDES_PREFIX "") +if(CMAKE_CXX_CL_SHOWINCLUDES_PREFIX) + set(CMAKE_CL_SHOWINCLUDES_PREFIX "${CMAKE_CXX_CL_SHOWINCLUDES_PREFIX}") +endif() + + + + + +set(CMAKE_CXX_IMPLICIT_INCLUDE_DIRECTORIES "/usr/include/c++/15;/usr/include/c++/15/x86_64-redhat-linux;/usr/include/c++/15/backward;/usr/lib/gcc/x86_64-redhat-linux/15/include;/usr/local/include;/usr/include") +set(CMAKE_CXX_IMPLICIT_LINK_LIBRARIES "stdc++;m;gcc_s;gcc;c;gcc_s;gcc") +set(CMAKE_CXX_IMPLICIT_LINK_DIRECTORIES "/usr/lib/gcc/x86_64-redhat-linux/15;/usr/lib64;/lib64;/usr/lib;/lib") +set(CMAKE_CXX_IMPLICIT_LINK_FRAMEWORK_DIRECTORIES "") +set(CMAKE_CXX_COMPILER_CLANG_RESOURCE_DIR "") + +set(CMAKE_CXX_COMPILER_IMPORT_STD "") +### Imported target for C++23 standard library +set(CMAKE_CXX23_COMPILER_IMPORT_STD_NOT_FOUND_MESSAGE "Experimental `import std` support not enabled when detecting toolchain; it must be set before `CXX` is enabled (usually a `project()` call)") + + +### Imported target for C++26 standard library +set(CMAKE_CXX26_COMPILER_IMPORT_STD_NOT_FOUND_MESSAGE "Experimental `import std` support not enabled when detecting toolchain; it must be set before `CXX` is enabled (usually a `project()` call)") + + + diff --git a/build-linux/CMakeFiles/3.31.11/CMakeDetermineCompilerABI_CXX.bin b/build-linux/CMakeFiles/3.31.11/CMakeDetermineCompilerABI_CXX.bin new file mode 100755 index 00000000..68cdf02b Binary files /dev/null and b/build-linux/CMakeFiles/3.31.11/CMakeDetermineCompilerABI_CXX.bin differ diff --git a/build-linux/CMakeFiles/3.31.11/CMakeSystem.cmake b/build-linux/CMakeFiles/3.31.11/CMakeSystem.cmake new file mode 100644 index 00000000..fe574c5f --- /dev/null +++ b/build-linux/CMakeFiles/3.31.11/CMakeSystem.cmake @@ -0,0 +1,15 @@ +set(CMAKE_HOST_SYSTEM "Linux-6.19.11-200.fc43.x86_64") +set(CMAKE_HOST_SYSTEM_NAME "Linux") +set(CMAKE_HOST_SYSTEM_VERSION "6.19.11-200.fc43.x86_64") +set(CMAKE_HOST_SYSTEM_PROCESSOR "x86_64") + + + +set(CMAKE_SYSTEM "Linux-6.19.11-200.fc43.x86_64") +set(CMAKE_SYSTEM_NAME "Linux") +set(CMAKE_SYSTEM_VERSION "6.19.11-200.fc43.x86_64") +set(CMAKE_SYSTEM_PROCESSOR "x86_64") + +set(CMAKE_CROSSCOMPILING "FALSE") + +set(CMAKE_SYSTEM_LOADED 1) diff --git a/build-linux/CMakeFiles/3.31.11/CompilerIdCXX/CMakeCXXCompilerId.cpp b/build-linux/CMakeFiles/3.31.11/CompilerIdCXX/CMakeCXXCompilerId.cpp new file mode 100644 index 00000000..3b6e114c --- /dev/null +++ b/build-linux/CMakeFiles/3.31.11/CompilerIdCXX/CMakeCXXCompilerId.cpp @@ -0,0 +1,919 @@ +/* This source file must have a .cpp extension so that all C++ compilers + recognize the extension without flags. Borland does not know .cxx for + example. */ +#ifndef __cplusplus +# error "A C compiler has been selected for C++." +#endif + +#if !defined(__has_include) +/* If the compiler does not have __has_include, pretend the answer is + always no. */ +# define __has_include(x) 0 +#endif + + +/* Version number components: V=Version, R=Revision, P=Patch + Version date components: YYYY=Year, MM=Month, DD=Day */ + +#if defined(__INTEL_COMPILER) || defined(__ICC) +# define COMPILER_ID "Intel" +# if defined(_MSC_VER) +# define SIMULATE_ID "MSVC" +# endif +# if defined(__GNUC__) +# define SIMULATE_ID "GNU" +# endif + /* __INTEL_COMPILER = VRP prior to 2021, and then VVVV for 2021 and later, + except that a few beta releases use the old format with V=2021. */ +# if __INTEL_COMPILER < 2021 || __INTEL_COMPILER == 202110 || __INTEL_COMPILER == 202111 +# define COMPILER_VERSION_MAJOR DEC(__INTEL_COMPILER/100) +# define COMPILER_VERSION_MINOR DEC(__INTEL_COMPILER/10 % 10) +# if defined(__INTEL_COMPILER_UPDATE) +# define COMPILER_VERSION_PATCH DEC(__INTEL_COMPILER_UPDATE) +# else +# define COMPILER_VERSION_PATCH DEC(__INTEL_COMPILER % 10) +# endif +# else +# define COMPILER_VERSION_MAJOR DEC(__INTEL_COMPILER) +# define COMPILER_VERSION_MINOR DEC(__INTEL_COMPILER_UPDATE) + /* The third version component from --version is an update index, + but no macro is provided for it. */ +# define COMPILER_VERSION_PATCH DEC(0) +# endif +# if defined(__INTEL_COMPILER_BUILD_DATE) + /* __INTEL_COMPILER_BUILD_DATE = YYYYMMDD */ +# define COMPILER_VERSION_TWEAK DEC(__INTEL_COMPILER_BUILD_DATE) +# endif +# if defined(_MSC_VER) + /* _MSC_VER = VVRR */ +# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) +# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) +# endif +# if defined(__GNUC__) +# define SIMULATE_VERSION_MAJOR DEC(__GNUC__) +# elif defined(__GNUG__) +# define SIMULATE_VERSION_MAJOR DEC(__GNUG__) +# endif +# if defined(__GNUC_MINOR__) +# define SIMULATE_VERSION_MINOR DEC(__GNUC_MINOR__) +# endif +# if defined(__GNUC_PATCHLEVEL__) +# define SIMULATE_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__) +# endif + +#elif (defined(__clang__) && defined(__INTEL_CLANG_COMPILER)) || defined(__INTEL_LLVM_COMPILER) +# define COMPILER_ID "IntelLLVM" +#if defined(_MSC_VER) +# define SIMULATE_ID "MSVC" +#endif +#if defined(__GNUC__) +# define SIMULATE_ID "GNU" +#endif +/* __INTEL_LLVM_COMPILER = VVVVRP prior to 2021.2.0, VVVVRRPP for 2021.2.0 and + * later. Look for 6 digit vs. 8 digit version number to decide encoding. + * VVVV is no smaller than the current year when a version is released. + */ +#if __INTEL_LLVM_COMPILER < 1000000L +# define COMPILER_VERSION_MAJOR DEC(__INTEL_LLVM_COMPILER/100) +# define COMPILER_VERSION_MINOR DEC(__INTEL_LLVM_COMPILER/10 % 10) +# define COMPILER_VERSION_PATCH DEC(__INTEL_LLVM_COMPILER % 10) +#else +# define COMPILER_VERSION_MAJOR DEC(__INTEL_LLVM_COMPILER/10000) +# define COMPILER_VERSION_MINOR DEC(__INTEL_LLVM_COMPILER/100 % 100) +# define COMPILER_VERSION_PATCH DEC(__INTEL_LLVM_COMPILER % 100) +#endif +#if defined(_MSC_VER) + /* _MSC_VER = VVRR */ +# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) +# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) +#endif +#if defined(__GNUC__) +# define SIMULATE_VERSION_MAJOR DEC(__GNUC__) +#elif defined(__GNUG__) +# define SIMULATE_VERSION_MAJOR DEC(__GNUG__) +#endif +#if defined(__GNUC_MINOR__) +# define SIMULATE_VERSION_MINOR DEC(__GNUC_MINOR__) +#endif +#if defined(__GNUC_PATCHLEVEL__) +# define SIMULATE_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__) +#endif + +#elif defined(__PATHCC__) +# define COMPILER_ID "PathScale" +# define COMPILER_VERSION_MAJOR DEC(__PATHCC__) +# define COMPILER_VERSION_MINOR DEC(__PATHCC_MINOR__) +# if defined(__PATHCC_PATCHLEVEL__) +# define COMPILER_VERSION_PATCH DEC(__PATHCC_PATCHLEVEL__) +# endif + +#elif defined(__BORLANDC__) && defined(__CODEGEARC_VERSION__) +# define COMPILER_ID "Embarcadero" +# define COMPILER_VERSION_MAJOR HEX(__CODEGEARC_VERSION__>>24 & 0x00FF) +# define COMPILER_VERSION_MINOR HEX(__CODEGEARC_VERSION__>>16 & 0x00FF) +# define COMPILER_VERSION_PATCH DEC(__CODEGEARC_VERSION__ & 0xFFFF) + +#elif defined(__BORLANDC__) +# define COMPILER_ID "Borland" + /* __BORLANDC__ = 0xVRR */ +# define COMPILER_VERSION_MAJOR HEX(__BORLANDC__>>8) +# define COMPILER_VERSION_MINOR HEX(__BORLANDC__ & 0xFF) + +#elif defined(__WATCOMC__) && __WATCOMC__ < 1200 +# define COMPILER_ID "Watcom" + /* __WATCOMC__ = VVRR */ +# define COMPILER_VERSION_MAJOR DEC(__WATCOMC__ / 100) +# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10) +# if (__WATCOMC__ % 10) > 0 +# define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10) +# endif + +#elif defined(__WATCOMC__) +# define COMPILER_ID "OpenWatcom" + /* __WATCOMC__ = VVRP + 1100 */ +# define COMPILER_VERSION_MAJOR DEC((__WATCOMC__ - 1100) / 100) +# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10) +# if (__WATCOMC__ % 10) > 0 +# define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10) +# endif + +#elif defined(__SUNPRO_CC) +# define COMPILER_ID "SunPro" +# if __SUNPRO_CC >= 0x5100 + /* __SUNPRO_CC = 0xVRRP */ +# define COMPILER_VERSION_MAJOR HEX(__SUNPRO_CC>>12) +# define COMPILER_VERSION_MINOR HEX(__SUNPRO_CC>>4 & 0xFF) +# define COMPILER_VERSION_PATCH HEX(__SUNPRO_CC & 0xF) +# else + /* __SUNPRO_CC = 0xVRP */ +# define COMPILER_VERSION_MAJOR HEX(__SUNPRO_CC>>8) +# define COMPILER_VERSION_MINOR HEX(__SUNPRO_CC>>4 & 0xF) +# define COMPILER_VERSION_PATCH HEX(__SUNPRO_CC & 0xF) +# endif + +#elif defined(__HP_aCC) +# define COMPILER_ID "HP" + /* __HP_aCC = VVRRPP */ +# define COMPILER_VERSION_MAJOR DEC(__HP_aCC/10000) +# define COMPILER_VERSION_MINOR DEC(__HP_aCC/100 % 100) +# define COMPILER_VERSION_PATCH DEC(__HP_aCC % 100) + +#elif defined(__DECCXX) +# define COMPILER_ID "Compaq" + /* __DECCXX_VER = VVRRTPPPP */ +# define COMPILER_VERSION_MAJOR DEC(__DECCXX_VER/10000000) +# define COMPILER_VERSION_MINOR DEC(__DECCXX_VER/100000 % 100) +# define COMPILER_VERSION_PATCH DEC(__DECCXX_VER % 10000) + +#elif defined(__IBMCPP__) && defined(__COMPILER_VER__) +# define COMPILER_ID "zOS" + /* __IBMCPP__ = VRP */ +# define COMPILER_VERSION_MAJOR DEC(__IBMCPP__/100) +# define COMPILER_VERSION_MINOR DEC(__IBMCPP__/10 % 10) +# define COMPILER_VERSION_PATCH DEC(__IBMCPP__ % 10) + +#elif defined(__open_xl__) && defined(__clang__) +# define COMPILER_ID "IBMClang" +# define COMPILER_VERSION_MAJOR DEC(__open_xl_version__) +# define COMPILER_VERSION_MINOR DEC(__open_xl_release__) +# define COMPILER_VERSION_PATCH DEC(__open_xl_modification__) +# define COMPILER_VERSION_TWEAK DEC(__open_xl_ptf_fix_level__) + + +#elif defined(__ibmxl__) && defined(__clang__) +# define COMPILER_ID "XLClang" +# define COMPILER_VERSION_MAJOR DEC(__ibmxl_version__) +# define COMPILER_VERSION_MINOR DEC(__ibmxl_release__) +# define COMPILER_VERSION_PATCH DEC(__ibmxl_modification__) +# define COMPILER_VERSION_TWEAK DEC(__ibmxl_ptf_fix_level__) + + +#elif defined(__IBMCPP__) && !defined(__COMPILER_VER__) && __IBMCPP__ >= 800 +# define COMPILER_ID "XL" + /* __IBMCPP__ = VRP */ +# define COMPILER_VERSION_MAJOR DEC(__IBMCPP__/100) +# define COMPILER_VERSION_MINOR DEC(__IBMCPP__/10 % 10) +# define COMPILER_VERSION_PATCH DEC(__IBMCPP__ % 10) + +#elif defined(__IBMCPP__) && !defined(__COMPILER_VER__) && __IBMCPP__ < 800 +# define COMPILER_ID "VisualAge" + /* __IBMCPP__ = VRP */ +# define COMPILER_VERSION_MAJOR DEC(__IBMCPP__/100) +# define COMPILER_VERSION_MINOR DEC(__IBMCPP__/10 % 10) +# define COMPILER_VERSION_PATCH DEC(__IBMCPP__ % 10) + +#elif defined(__NVCOMPILER) +# define COMPILER_ID "NVHPC" +# define COMPILER_VERSION_MAJOR DEC(__NVCOMPILER_MAJOR__) +# define COMPILER_VERSION_MINOR DEC(__NVCOMPILER_MINOR__) +# if defined(__NVCOMPILER_PATCHLEVEL__) +# define COMPILER_VERSION_PATCH DEC(__NVCOMPILER_PATCHLEVEL__) +# endif + +#elif defined(__PGI) +# define COMPILER_ID "PGI" +# define COMPILER_VERSION_MAJOR DEC(__PGIC__) +# define COMPILER_VERSION_MINOR DEC(__PGIC_MINOR__) +# if defined(__PGIC_PATCHLEVEL__) +# define COMPILER_VERSION_PATCH DEC(__PGIC_PATCHLEVEL__) +# endif + +#elif defined(__clang__) && defined(__cray__) +# define COMPILER_ID "CrayClang" +# define COMPILER_VERSION_MAJOR DEC(__cray_major__) +# define COMPILER_VERSION_MINOR DEC(__cray_minor__) +# define COMPILER_VERSION_PATCH DEC(__cray_patchlevel__) +# define COMPILER_VERSION_INTERNAL_STR __clang_version__ + + +#elif defined(_CRAYC) +# define COMPILER_ID "Cray" +# define COMPILER_VERSION_MAJOR DEC(_RELEASE_MAJOR) +# define COMPILER_VERSION_MINOR DEC(_RELEASE_MINOR) + +#elif defined(__TI_COMPILER_VERSION__) +# define COMPILER_ID "TI" + /* __TI_COMPILER_VERSION__ = VVVRRRPPP */ +# define COMPILER_VERSION_MAJOR DEC(__TI_COMPILER_VERSION__/1000000) +# define COMPILER_VERSION_MINOR DEC(__TI_COMPILER_VERSION__/1000 % 1000) +# define COMPILER_VERSION_PATCH DEC(__TI_COMPILER_VERSION__ % 1000) + +#elif defined(__CLANG_FUJITSU) +# define COMPILER_ID "FujitsuClang" +# define COMPILER_VERSION_MAJOR DEC(__FCC_major__) +# define COMPILER_VERSION_MINOR DEC(__FCC_minor__) +# define COMPILER_VERSION_PATCH DEC(__FCC_patchlevel__) +# define COMPILER_VERSION_INTERNAL_STR __clang_version__ + + +#elif defined(__FUJITSU) +# define COMPILER_ID "Fujitsu" +# if defined(__FCC_version__) +# define COMPILER_VERSION __FCC_version__ +# elif defined(__FCC_major__) +# define COMPILER_VERSION_MAJOR DEC(__FCC_major__) +# define COMPILER_VERSION_MINOR DEC(__FCC_minor__) +# define COMPILER_VERSION_PATCH DEC(__FCC_patchlevel__) +# endif +# if defined(__fcc_version) +# define COMPILER_VERSION_INTERNAL DEC(__fcc_version) +# elif defined(__FCC_VERSION) +# define COMPILER_VERSION_INTERNAL DEC(__FCC_VERSION) +# endif + + +#elif defined(__ghs__) +# define COMPILER_ID "GHS" +/* __GHS_VERSION_NUMBER = VVVVRP */ +# ifdef __GHS_VERSION_NUMBER +# define COMPILER_VERSION_MAJOR DEC(__GHS_VERSION_NUMBER / 100) +# define COMPILER_VERSION_MINOR DEC(__GHS_VERSION_NUMBER / 10 % 10) +# define COMPILER_VERSION_PATCH DEC(__GHS_VERSION_NUMBER % 10) +# endif + +#elif defined(__TASKING__) +# define COMPILER_ID "Tasking" + # define COMPILER_VERSION_MAJOR DEC(__VERSION__/1000) + # define COMPILER_VERSION_MINOR DEC(__VERSION__ % 100) +# define COMPILER_VERSION_INTERNAL DEC(__VERSION__) + +#elif defined(__ORANGEC__) +# define COMPILER_ID "OrangeC" +# define COMPILER_VERSION_MAJOR DEC(__ORANGEC_MAJOR__) +# define COMPILER_VERSION_MINOR DEC(__ORANGEC_MINOR__) +# define COMPILER_VERSION_PATCH DEC(__ORANGEC_PATCHLEVEL__) + +#elif defined(__SCO_VERSION__) +# define COMPILER_ID "SCO" + +#elif defined(__ARMCC_VERSION) && !defined(__clang__) +# define COMPILER_ID "ARMCC" +#if __ARMCC_VERSION >= 1000000 + /* __ARMCC_VERSION = VRRPPPP */ + # define COMPILER_VERSION_MAJOR DEC(__ARMCC_VERSION/1000000) + # define COMPILER_VERSION_MINOR DEC(__ARMCC_VERSION/10000 % 100) + # define COMPILER_VERSION_PATCH DEC(__ARMCC_VERSION % 10000) +#else + /* __ARMCC_VERSION = VRPPPP */ + # define COMPILER_VERSION_MAJOR DEC(__ARMCC_VERSION/100000) + # define COMPILER_VERSION_MINOR DEC(__ARMCC_VERSION/10000 % 10) + # define COMPILER_VERSION_PATCH DEC(__ARMCC_VERSION % 10000) +#endif + + +#elif defined(__clang__) && defined(__apple_build_version__) +# define COMPILER_ID "AppleClang" +# if defined(_MSC_VER) +# define SIMULATE_ID "MSVC" +# endif +# define COMPILER_VERSION_MAJOR DEC(__clang_major__) +# define COMPILER_VERSION_MINOR DEC(__clang_minor__) +# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__) +# if defined(_MSC_VER) + /* _MSC_VER = VVRR */ +# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) +# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) +# endif +# define COMPILER_VERSION_TWEAK DEC(__apple_build_version__) + +#elif defined(__clang__) && defined(__ARMCOMPILER_VERSION) +# define COMPILER_ID "ARMClang" + # define COMPILER_VERSION_MAJOR DEC(__ARMCOMPILER_VERSION/1000000) + # define COMPILER_VERSION_MINOR DEC(__ARMCOMPILER_VERSION/10000 % 100) + # define COMPILER_VERSION_PATCH DEC(__ARMCOMPILER_VERSION/100 % 100) +# define COMPILER_VERSION_INTERNAL DEC(__ARMCOMPILER_VERSION) + +#elif defined(__clang__) && defined(__ti__) +# define COMPILER_ID "TIClang" + # define COMPILER_VERSION_MAJOR DEC(__ti_major__) + # define COMPILER_VERSION_MINOR DEC(__ti_minor__) + # define COMPILER_VERSION_PATCH DEC(__ti_patchlevel__) +# define COMPILER_VERSION_INTERNAL DEC(__ti_version__) + +#elif defined(__clang__) +# define COMPILER_ID "Clang" +# if defined(_MSC_VER) +# define SIMULATE_ID "MSVC" +# endif +# define COMPILER_VERSION_MAJOR DEC(__clang_major__) +# define COMPILER_VERSION_MINOR DEC(__clang_minor__) +# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__) +# if defined(_MSC_VER) + /* _MSC_VER = VVRR */ +# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) +# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) +# endif + +#elif defined(__LCC__) && (defined(__GNUC__) || defined(__GNUG__) || defined(__MCST__)) +# define COMPILER_ID "LCC" +# define COMPILER_VERSION_MAJOR DEC(__LCC__ / 100) +# define COMPILER_VERSION_MINOR DEC(__LCC__ % 100) +# if defined(__LCC_MINOR__) +# define COMPILER_VERSION_PATCH DEC(__LCC_MINOR__) +# endif +# if defined(__GNUC__) && defined(__GNUC_MINOR__) +# define SIMULATE_ID "GNU" +# define SIMULATE_VERSION_MAJOR DEC(__GNUC__) +# define SIMULATE_VERSION_MINOR DEC(__GNUC_MINOR__) +# if defined(__GNUC_PATCHLEVEL__) +# define SIMULATE_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__) +# endif +# endif + +#elif defined(__GNUC__) || defined(__GNUG__) +# define COMPILER_ID "GNU" +# if defined(__GNUC__) +# define COMPILER_VERSION_MAJOR DEC(__GNUC__) +# else +# define COMPILER_VERSION_MAJOR DEC(__GNUG__) +# endif +# if defined(__GNUC_MINOR__) +# define COMPILER_VERSION_MINOR DEC(__GNUC_MINOR__) +# endif +# if defined(__GNUC_PATCHLEVEL__) +# define COMPILER_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__) +# endif + +#elif defined(_MSC_VER) +# define COMPILER_ID "MSVC" + /* _MSC_VER = VVRR */ +# define COMPILER_VERSION_MAJOR DEC(_MSC_VER / 100) +# define COMPILER_VERSION_MINOR DEC(_MSC_VER % 100) +# if defined(_MSC_FULL_VER) +# if _MSC_VER >= 1400 + /* _MSC_FULL_VER = VVRRPPPPP */ +# define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 100000) +# else + /* _MSC_FULL_VER = VVRRPPPP */ +# define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 10000) +# endif +# endif +# if defined(_MSC_BUILD) +# define COMPILER_VERSION_TWEAK DEC(_MSC_BUILD) +# endif + +#elif defined(_ADI_COMPILER) +# define COMPILER_ID "ADSP" +#if defined(__VERSIONNUM__) + /* __VERSIONNUM__ = 0xVVRRPPTT */ +# define COMPILER_VERSION_MAJOR DEC(__VERSIONNUM__ >> 24 & 0xFF) +# define COMPILER_VERSION_MINOR DEC(__VERSIONNUM__ >> 16 & 0xFF) +# define COMPILER_VERSION_PATCH DEC(__VERSIONNUM__ >> 8 & 0xFF) +# define COMPILER_VERSION_TWEAK DEC(__VERSIONNUM__ & 0xFF) +#endif + +#elif defined(__IAR_SYSTEMS_ICC__) || defined(__IAR_SYSTEMS_ICC) +# define COMPILER_ID "IAR" +# if defined(__VER__) && defined(__ICCARM__) +# define COMPILER_VERSION_MAJOR DEC((__VER__) / 1000000) +# define COMPILER_VERSION_MINOR DEC(((__VER__) / 1000) % 1000) +# define COMPILER_VERSION_PATCH DEC((__VER__) % 1000) +# define COMPILER_VERSION_INTERNAL DEC(__IAR_SYSTEMS_ICC__) +# elif defined(__VER__) && (defined(__ICCAVR__) || defined(__ICCRX__) || defined(__ICCRH850__) || defined(__ICCRL78__) || defined(__ICC430__) || defined(__ICCRISCV__) || defined(__ICCV850__) || defined(__ICC8051__) || defined(__ICCSTM8__)) +# define COMPILER_VERSION_MAJOR DEC((__VER__) / 100) +# define COMPILER_VERSION_MINOR DEC((__VER__) - (((__VER__) / 100)*100)) +# define COMPILER_VERSION_PATCH DEC(__SUBVERSION__) +# define COMPILER_VERSION_INTERNAL DEC(__IAR_SYSTEMS_ICC__) +# endif + + +/* These compilers are either not known or too old to define an + identification macro. Try to identify the platform and guess that + it is the native compiler. */ +#elif defined(__hpux) || defined(__hpua) +# define COMPILER_ID "HP" + +#else /* unknown compiler */ +# define COMPILER_ID "" +#endif + +/* Construct the string literal in pieces to prevent the source from + getting matched. Store it in a pointer rather than an array + because some compilers will just produce instructions to fill the + array rather than assigning a pointer to a static array. */ +char const* info_compiler = "INFO" ":" "compiler[" COMPILER_ID "]"; +#ifdef SIMULATE_ID +char const* info_simulate = "INFO" ":" "simulate[" SIMULATE_ID "]"; +#endif + +#ifdef __QNXNTO__ +char const* qnxnto = "INFO" ":" "qnxnto[]"; +#endif + +#if defined(__CRAYXT_COMPUTE_LINUX_TARGET) +char const *info_cray = "INFO" ":" "compiler_wrapper[CrayPrgEnv]"; +#endif + +#define STRINGIFY_HELPER(X) #X +#define STRINGIFY(X) STRINGIFY_HELPER(X) + +/* Identify known platforms by name. */ +#if defined(__linux) || defined(__linux__) || defined(linux) +# define PLATFORM_ID "Linux" + +#elif defined(__MSYS__) +# define PLATFORM_ID "MSYS" + +#elif defined(__CYGWIN__) +# define PLATFORM_ID "Cygwin" + +#elif defined(__MINGW32__) +# define PLATFORM_ID "MinGW" + +#elif defined(__APPLE__) +# define PLATFORM_ID "Darwin" + +#elif defined(_WIN32) || defined(__WIN32__) || defined(WIN32) +# define PLATFORM_ID "Windows" + +#elif defined(__FreeBSD__) || defined(__FreeBSD) +# define PLATFORM_ID "FreeBSD" + +#elif defined(__NetBSD__) || defined(__NetBSD) +# define PLATFORM_ID "NetBSD" + +#elif defined(__OpenBSD__) || defined(__OPENBSD) +# define PLATFORM_ID "OpenBSD" + +#elif defined(__sun) || defined(sun) +# define PLATFORM_ID "SunOS" + +#elif defined(_AIX) || defined(__AIX) || defined(__AIX__) || defined(__aix) || defined(__aix__) +# define PLATFORM_ID "AIX" + +#elif defined(__hpux) || defined(__hpux__) +# define PLATFORM_ID "HP-UX" + +#elif defined(__HAIKU__) +# define PLATFORM_ID "Haiku" + +#elif defined(__BeOS) || defined(__BEOS__) || defined(_BEOS) +# define PLATFORM_ID "BeOS" + +#elif defined(__QNX__) || defined(__QNXNTO__) +# define PLATFORM_ID "QNX" + +#elif defined(__tru64) || defined(_tru64) || defined(__TRU64__) +# define PLATFORM_ID "Tru64" + +#elif defined(__riscos) || defined(__riscos__) +# define PLATFORM_ID "RISCos" + +#elif defined(__sinix) || defined(__sinix__) || defined(__SINIX__) +# define PLATFORM_ID "SINIX" + +#elif defined(__UNIX_SV__) +# define PLATFORM_ID "UNIX_SV" + +#elif defined(__bsdos__) +# define PLATFORM_ID "BSDOS" + +#elif defined(_MPRAS) || defined(MPRAS) +# define PLATFORM_ID "MP-RAS" + +#elif defined(__osf) || defined(__osf__) +# define PLATFORM_ID "OSF1" + +#elif defined(_SCO_SV) || defined(SCO_SV) || defined(sco_sv) +# define PLATFORM_ID "SCO_SV" + +#elif defined(__ultrix) || defined(__ultrix__) || defined(_ULTRIX) +# define PLATFORM_ID "ULTRIX" + +#elif defined(__XENIX__) || defined(_XENIX) || defined(XENIX) +# define PLATFORM_ID "Xenix" + +#elif defined(__WATCOMC__) +# if defined(__LINUX__) +# define PLATFORM_ID "Linux" + +# elif defined(__DOS__) +# define PLATFORM_ID "DOS" + +# elif defined(__OS2__) +# define PLATFORM_ID "OS2" + +# elif defined(__WINDOWS__) +# define PLATFORM_ID "Windows3x" + +# elif defined(__VXWORKS__) +# define PLATFORM_ID "VxWorks" + +# else /* unknown platform */ +# define PLATFORM_ID +# endif + +#elif defined(__INTEGRITY) +# if defined(INT_178B) +# define PLATFORM_ID "Integrity178" + +# else /* regular Integrity */ +# define PLATFORM_ID "Integrity" +# endif + +# elif defined(_ADI_COMPILER) +# define PLATFORM_ID "ADSP" + +#else /* unknown platform */ +# define PLATFORM_ID + +#endif + +/* For windows compilers MSVC and Intel we can determine + the architecture of the compiler being used. This is because + the compilers do not have flags that can change the architecture, + but rather depend on which compiler is being used +*/ +#if defined(_WIN32) && defined(_MSC_VER) +# if defined(_M_IA64) +# define ARCHITECTURE_ID "IA64" + +# elif defined(_M_ARM64EC) +# define ARCHITECTURE_ID "ARM64EC" + +# elif defined(_M_X64) || defined(_M_AMD64) +# define ARCHITECTURE_ID "x64" + +# elif defined(_M_IX86) +# define ARCHITECTURE_ID "X86" + +# elif defined(_M_ARM64) +# define ARCHITECTURE_ID "ARM64" + +# elif defined(_M_ARM) +# if _M_ARM == 4 +# define ARCHITECTURE_ID "ARMV4I" +# elif _M_ARM == 5 +# define ARCHITECTURE_ID "ARMV5I" +# else +# define ARCHITECTURE_ID "ARMV" STRINGIFY(_M_ARM) +# endif + +# elif defined(_M_MIPS) +# define ARCHITECTURE_ID "MIPS" + +# elif defined(_M_SH) +# define ARCHITECTURE_ID "SHx" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +#elif defined(__WATCOMC__) +# if defined(_M_I86) +# define ARCHITECTURE_ID "I86" + +# elif defined(_M_IX86) +# define ARCHITECTURE_ID "X86" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +#elif defined(__IAR_SYSTEMS_ICC__) || defined(__IAR_SYSTEMS_ICC) +# if defined(__ICCARM__) +# define ARCHITECTURE_ID "ARM" + +# elif defined(__ICCRX__) +# define ARCHITECTURE_ID "RX" + +# elif defined(__ICCRH850__) +# define ARCHITECTURE_ID "RH850" + +# elif defined(__ICCRL78__) +# define ARCHITECTURE_ID "RL78" + +# elif defined(__ICCRISCV__) +# define ARCHITECTURE_ID "RISCV" + +# elif defined(__ICCAVR__) +# define ARCHITECTURE_ID "AVR" + +# elif defined(__ICC430__) +# define ARCHITECTURE_ID "MSP430" + +# elif defined(__ICCV850__) +# define ARCHITECTURE_ID "V850" + +# elif defined(__ICC8051__) +# define ARCHITECTURE_ID "8051" + +# elif defined(__ICCSTM8__) +# define ARCHITECTURE_ID "STM8" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +#elif defined(__ghs__) +# if defined(__PPC64__) +# define ARCHITECTURE_ID "PPC64" + +# elif defined(__ppc__) +# define ARCHITECTURE_ID "PPC" + +# elif defined(__ARM__) +# define ARCHITECTURE_ID "ARM" + +# elif defined(__x86_64__) +# define ARCHITECTURE_ID "x64" + +# elif defined(__i386__) +# define ARCHITECTURE_ID "X86" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +#elif defined(__clang__) && defined(__ti__) +# if defined(__ARM_ARCH) +# define ARCHITECTURE_ID "ARM" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +#elif defined(__TI_COMPILER_VERSION__) +# if defined(__TI_ARM__) +# define ARCHITECTURE_ID "ARM" + +# elif defined(__MSP430__) +# define ARCHITECTURE_ID "MSP430" + +# elif defined(__TMS320C28XX__) +# define ARCHITECTURE_ID "TMS320C28x" + +# elif defined(__TMS320C6X__) || defined(_TMS320C6X) +# define ARCHITECTURE_ID "TMS320C6x" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +# elif defined(__ADSPSHARC__) +# define ARCHITECTURE_ID "SHARC" + +# elif defined(__ADSPBLACKFIN__) +# define ARCHITECTURE_ID "Blackfin" + +#elif defined(__TASKING__) + +# if defined(__CTC__) || defined(__CPTC__) +# define ARCHITECTURE_ID "TriCore" + +# elif defined(__CMCS__) +# define ARCHITECTURE_ID "MCS" + +# elif defined(__CARM__) +# define ARCHITECTURE_ID "ARM" + +# elif defined(__CARC__) +# define ARCHITECTURE_ID "ARC" + +# elif defined(__C51__) +# define ARCHITECTURE_ID "8051" + +# elif defined(__CPCP__) +# define ARCHITECTURE_ID "PCP" + +# else +# define ARCHITECTURE_ID "" +# endif + +#else +# define ARCHITECTURE_ID +#endif + +/* Convert integer to decimal digit literals. */ +#define DEC(n) \ + ('0' + (((n) / 10000000)%10)), \ + ('0' + (((n) / 1000000)%10)), \ + ('0' + (((n) / 100000)%10)), \ + ('0' + (((n) / 10000)%10)), \ + ('0' + (((n) / 1000)%10)), \ + ('0' + (((n) / 100)%10)), \ + ('0' + (((n) / 10)%10)), \ + ('0' + ((n) % 10)) + +/* Convert integer to hex digit literals. */ +#define HEX(n) \ + ('0' + ((n)>>28 & 0xF)), \ + ('0' + ((n)>>24 & 0xF)), \ + ('0' + ((n)>>20 & 0xF)), \ + ('0' + ((n)>>16 & 0xF)), \ + ('0' + ((n)>>12 & 0xF)), \ + ('0' + ((n)>>8 & 0xF)), \ + ('0' + ((n)>>4 & 0xF)), \ + ('0' + ((n) & 0xF)) + +/* Construct a string literal encoding the version number. */ +#ifdef COMPILER_VERSION +char const* info_version = "INFO" ":" "compiler_version[" COMPILER_VERSION "]"; + +/* Construct a string literal encoding the version number components. */ +#elif defined(COMPILER_VERSION_MAJOR) +char const info_version[] = { + 'I', 'N', 'F', 'O', ':', + 'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','[', + COMPILER_VERSION_MAJOR, +# ifdef COMPILER_VERSION_MINOR + '.', COMPILER_VERSION_MINOR, +# ifdef COMPILER_VERSION_PATCH + '.', COMPILER_VERSION_PATCH, +# ifdef COMPILER_VERSION_TWEAK + '.', COMPILER_VERSION_TWEAK, +# endif +# endif +# endif + ']','\0'}; +#endif + +/* Construct a string literal encoding the internal version number. */ +#ifdef COMPILER_VERSION_INTERNAL +char const info_version_internal[] = { + 'I', 'N', 'F', 'O', ':', + 'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','_', + 'i','n','t','e','r','n','a','l','[', + COMPILER_VERSION_INTERNAL,']','\0'}; +#elif defined(COMPILER_VERSION_INTERNAL_STR) +char const* info_version_internal = "INFO" ":" "compiler_version_internal[" COMPILER_VERSION_INTERNAL_STR "]"; +#endif + +/* Construct a string literal encoding the version number components. */ +#ifdef SIMULATE_VERSION_MAJOR +char const info_simulate_version[] = { + 'I', 'N', 'F', 'O', ':', + 's','i','m','u','l','a','t','e','_','v','e','r','s','i','o','n','[', + SIMULATE_VERSION_MAJOR, +# ifdef SIMULATE_VERSION_MINOR + '.', SIMULATE_VERSION_MINOR, +# ifdef SIMULATE_VERSION_PATCH + '.', SIMULATE_VERSION_PATCH, +# ifdef SIMULATE_VERSION_TWEAK + '.', SIMULATE_VERSION_TWEAK, +# endif +# endif +# endif + ']','\0'}; +#endif + +/* Construct the string literal in pieces to prevent the source from + getting matched. Store it in a pointer rather than an array + because some compilers will just produce instructions to fill the + array rather than assigning a pointer to a static array. */ +char const* info_platform = "INFO" ":" "platform[" PLATFORM_ID "]"; +char const* info_arch = "INFO" ":" "arch[" ARCHITECTURE_ID "]"; + + + +#define CXX_STD_98 199711L +#define CXX_STD_11 201103L +#define CXX_STD_14 201402L +#define CXX_STD_17 201703L +#define CXX_STD_20 202002L +#define CXX_STD_23 202302L + +#if defined(__INTEL_COMPILER) && defined(_MSVC_LANG) +# if _MSVC_LANG > CXX_STD_17 +# define CXX_STD _MSVC_LANG +# elif _MSVC_LANG == CXX_STD_17 && defined(__cpp_aggregate_paren_init) +# define CXX_STD CXX_STD_20 +# elif _MSVC_LANG > CXX_STD_14 && __cplusplus > CXX_STD_17 +# define CXX_STD CXX_STD_20 +# elif _MSVC_LANG > CXX_STD_14 +# define CXX_STD CXX_STD_17 +# elif defined(__INTEL_CXX11_MODE__) && defined(__cpp_aggregate_nsdmi) +# define CXX_STD CXX_STD_14 +# elif defined(__INTEL_CXX11_MODE__) +# define CXX_STD CXX_STD_11 +# else +# define CXX_STD CXX_STD_98 +# endif +#elif defined(_MSC_VER) && defined(_MSVC_LANG) +# if _MSVC_LANG > __cplusplus +# define CXX_STD _MSVC_LANG +# else +# define CXX_STD __cplusplus +# endif +#elif defined(__NVCOMPILER) +# if __cplusplus == CXX_STD_17 && defined(__cpp_aggregate_paren_init) +# define CXX_STD CXX_STD_20 +# else +# define CXX_STD __cplusplus +# endif +#elif defined(__INTEL_COMPILER) || defined(__PGI) +# if __cplusplus == CXX_STD_11 && defined(__cpp_namespace_attributes) +# define CXX_STD CXX_STD_17 +# elif __cplusplus == CXX_STD_11 && defined(__cpp_aggregate_nsdmi) +# define CXX_STD CXX_STD_14 +# else +# define CXX_STD __cplusplus +# endif +#elif (defined(__IBMCPP__) || defined(__ibmxl__)) && defined(__linux__) +# if __cplusplus == CXX_STD_11 && defined(__cpp_aggregate_nsdmi) +# define CXX_STD CXX_STD_14 +# else +# define CXX_STD __cplusplus +# endif +#elif __cplusplus == 1 && defined(__GXX_EXPERIMENTAL_CXX0X__) +# define CXX_STD CXX_STD_11 +#else +# define CXX_STD __cplusplus +#endif + +const char* info_language_standard_default = "INFO" ":" "standard_default[" +#if CXX_STD > CXX_STD_23 + "26" +#elif CXX_STD > CXX_STD_20 + "23" +#elif CXX_STD > CXX_STD_17 + "20" +#elif CXX_STD > CXX_STD_14 + "17" +#elif CXX_STD > CXX_STD_11 + "14" +#elif CXX_STD >= CXX_STD_11 + "11" +#else + "98" +#endif +"]"; + +const char* info_language_extensions_default = "INFO" ":" "extensions_default[" +#if (defined(__clang__) || defined(__GNUC__) || defined(__xlC__) || \ + defined(__TI_COMPILER_VERSION__)) && \ + !defined(__STRICT_ANSI__) + "ON" +#else + "OFF" +#endif +"]"; + +/*--------------------------------------------------------------------------*/ + +int main(int argc, char* argv[]) +{ + int require = 0; + require += info_compiler[argc]; + require += info_platform[argc]; + require += info_arch[argc]; +#ifdef COMPILER_VERSION_MAJOR + require += info_version[argc]; +#endif +#ifdef COMPILER_VERSION_INTERNAL + require += info_version_internal[argc]; +#endif +#ifdef SIMULATE_ID + require += info_simulate[argc]; +#endif +#ifdef SIMULATE_VERSION_MAJOR + require += info_simulate_version[argc]; +#endif +#if defined(__CRAYXT_COMPUTE_LINUX_TARGET) + require += info_cray[argc]; +#endif + require += info_language_standard_default[argc]; + require += info_language_extensions_default[argc]; + (void)argv; + return require; +} diff --git a/build-linux/CMakeFiles/3.31.11/CompilerIdCXX/a.out b/build-linux/CMakeFiles/3.31.11/CompilerIdCXX/a.out new file mode 100755 index 00000000..3ba9576a Binary files /dev/null and b/build-linux/CMakeFiles/3.31.11/CompilerIdCXX/a.out differ diff --git a/build-linux/CMakeFiles/CMakeConfigureLog.yaml b/build-linux/CMakeFiles/CMakeConfigureLog.yaml new file mode 100644 index 00000000..5315af8a --- /dev/null +++ b/build-linux/CMakeFiles/CMakeConfigureLog.yaml @@ -0,0 +1,343 @@ + +--- +events: + - + kind: "message-v1" + backtrace: + - "/usr/share/cmake/Modules/CMakeDetermineSystem.cmake:205 (message)" + - "CMakeLists.txt:17 (project)" + message: | + The system is: Linux - 6.19.11-200.fc43.x86_64 - x86_64 +... + +--- +events: + - + kind: "message-v1" + backtrace: + - "/usr/share/cmake/Modules/CMakeDetermineCompilerId.cmake:17 (message)" + - "/usr/share/cmake/Modules/CMakeDetermineCompilerId.cmake:64 (__determine_compiler_id_test)" + - "/usr/share/cmake/Modules/CMakeDetermineCXXCompiler.cmake:126 (CMAKE_DETERMINE_COMPILER_ID)" + - "CMakeLists.txt:17 (project)" + message: | + Compiling the CXX compiler identification source file "CMakeCXXCompilerId.cpp" succeeded. + Compiler: /usr/bin/c++ + Build flags: + Id flags: + + The output was: + 0 + + + Compilation of the CXX compiler identification source "CMakeCXXCompilerId.cpp" produced "a.out" + + The CXX compiler identification is GNU, found in: + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/CMakeFiles/3.31.11/CompilerIdCXX/a.out + + - + kind: "try_compile-v1" + backtrace: + - "/usr/share/cmake/Modules/CMakeDetermineCompilerABI.cmake:74 (try_compile)" + - "/usr/share/cmake/Modules/CMakeTestCXXCompiler.cmake:26 (CMAKE_DETERMINE_COMPILER_ABI)" + - "CMakeLists.txt:17 (project)" + checks: + - "Detecting CXX compiler ABI info" + directories: + source: "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/CMakeFiles/CMakeScratch/TryCompile-SEQVGr" + binary: "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/CMakeFiles/CMakeScratch/TryCompile-SEQVGr" + cmakeVariables: + CMAKE_CXX_FLAGS: "" + CMAKE_CXX_FLAGS_DEBUG: "-g" + CMAKE_CXX_SCAN_FOR_MODULES: "OFF" + CMAKE_EXE_LINKER_FLAGS: "" + buildResult: + variable: "CMAKE_CXX_ABI_COMPILED" + cached: true + stdout: | + Change Dir: '/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/CMakeFiles/CMakeScratch/TryCompile-SEQVGr' + + Run Build Command(s): /usr/bin/ninja-build -v cmTC_6d0d7 + [1/2] /usr/bin/c++ -v -o CMakeFiles/cmTC_6d0d7.dir/CMakeCXXCompilerABI.cpp.o -c /usr/share/cmake/Modules/CMakeCXXCompilerABI.cpp + Using built-in specs. + COLLECT_GCC=/usr/bin/c++ + OFFLOAD_TARGET_NAMES=nvptx-none:amdgcn-amdhsa + OFFLOAD_TARGET_DEFAULT=1 + Target: x86_64-redhat-linux + Configured with: ../configure --enable-bootstrap --enable-languages=c,c++,fortran,objc,obj-c++,ada,go,d,m2,cobol,lto --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=https://bugzilla.redhat.com/ --enable-shared --enable-threads=posix --enable-checking=release --enable-multilib --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --with-gcc-major-version-only --enable-libstdcxx-backtrace --with-libstdcxx-zoneinfo=/usr/share/zoneinfo --with-linker-hash-style=gnu --enable-plugin --enable-initfini-array --with-isl=/builddir/build/BUILD/gcc-15.2.1-build/gcc-15.2.1-20260123/obj-x86_64-redhat-linux/isl-install --enable-offload-targets=nvptx-none,amdgcn-amdhsa --enable-offload-defaulted --without-cuda-driver --enable-gnu-indirect-function --enable-cet --with-tune=generic --with-arch_32=i686 --build=x86_64-redhat-linux --with-build-config=bootstrap-lto --enable-link-serialization=1 --disable-libssp + Thread model: posix + Supported LTO compression algorithms: zlib zstd + gcc version 15.2.1 20260123 (Red Hat 15.2.1-7) (GCC) + COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_6d0d7.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_6d0d7.dir/' + /usr/libexec/gcc/x86_64-redhat-linux/15/cc1plus -quiet -v -D_GNU_SOURCE /usr/share/cmake/Modules/CMakeCXXCompilerABI.cpp -quiet -dumpdir CMakeFiles/cmTC_6d0d7.dir/ -dumpbase CMakeCXXCompilerABI.cpp.cpp -dumpbase-ext .cpp -mtune=generic -march=x86-64 -version -o /tmp/ccb43trL.s + GNU C++17 (GCC) version 15.2.1 20260123 (Red Hat 15.2.1-7) (x86_64-redhat-linux) + compiled by GNU C version 15.2.1 20260123 (Red Hat 15.2.1-7), GMP version 6.3.0, MPFR version 4.2.2, MPC version 1.3.1, isl version isl-0.24-GMP + + GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072 + ignoring nonexistent directory "/usr/lib/gcc/x86_64-redhat-linux/15/include-fixed" + ignoring nonexistent directory "/usr/lib/gcc/x86_64-redhat-linux/15/../../../../x86_64-redhat-linux/include" + #include "..." search starts here: + #include <...> search starts here: + /usr/lib/gcc/x86_64-redhat-linux/15/../../../../include/c++/15 + /usr/lib/gcc/x86_64-redhat-linux/15/../../../../include/c++/15/x86_64-redhat-linux + /usr/lib/gcc/x86_64-redhat-linux/15/../../../../include/c++/15/backward + /usr/lib/gcc/x86_64-redhat-linux/15/include + /usr/local/include + /usr/include + End of search list. + Compiler executable checksum: 61fbb778c0a8c441a1c0ce3e680cc1db + COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_6d0d7.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_6d0d7.dir/' + as -v --64 -o CMakeFiles/cmTC_6d0d7.dir/CMakeCXXCompilerABI.cpp.o /tmp/ccb43trL.s + GNU assembler version 2.45.1 (x86_64-redhat-linux) using BFD version version 2.45.1-4.fc43 + COMPILER_PATH=/usr/libexec/gcc/x86_64-redhat-linux/15/:/usr/libexec/gcc/x86_64-redhat-linux/15/:/usr/libexec/gcc/x86_64-redhat-linux/:/usr/lib/gcc/x86_64-redhat-linux/15/:/usr/lib/gcc/x86_64-redhat-linux/ + LIBRARY_PATH=/usr/lib/gcc/x86_64-redhat-linux/15/:/usr/lib/gcc/x86_64-redhat-linux/15/../../../../lib64/:/lib/../lib64/:/usr/lib/../lib64/:/usr/lib/gcc/x86_64-redhat-linux/15/../../../:/lib/:/usr/lib/ + COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_6d0d7.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_6d0d7.dir/CMakeCXXCompilerABI.cpp.' + [2/2] : && /usr/bin/c++ -v -Wl,-v CMakeFiles/cmTC_6d0d7.dir/CMakeCXXCompilerABI.cpp.o -o cmTC_6d0d7 && : + Using built-in specs. + COLLECT_GCC=/usr/bin/c++ + COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-redhat-linux/15/lto-wrapper + OFFLOAD_TARGET_NAMES=nvptx-none:amdgcn-amdhsa + OFFLOAD_TARGET_DEFAULT=1 + Target: x86_64-redhat-linux + Configured with: ../configure --enable-bootstrap --enable-languages=c,c++,fortran,objc,obj-c++,ada,go,d,m2,cobol,lto --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=https://bugzilla.redhat.com/ --enable-shared --enable-threads=posix --enable-checking=release --enable-multilib --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --with-gcc-major-version-only --enable-libstdcxx-backtrace --with-libstdcxx-zoneinfo=/usr/share/zoneinfo --with-linker-hash-style=gnu --enable-plugin --enable-initfini-array --with-isl=/builddir/build/BUILD/gcc-15.2.1-build/gcc-15.2.1-20260123/obj-x86_64-redhat-linux/isl-install --enable-offload-targets=nvptx-none,amdgcn-amdhsa --enable-offload-defaulted --without-cuda-driver --enable-gnu-indirect-function --enable-cet --with-tune=generic --with-arch_32=i686 --build=x86_64-redhat-linux --with-build-config=bootstrap-lto --enable-link-serialization=1 --disable-libssp + Thread model: posix + Supported LTO compression algorithms: zlib zstd + gcc version 15.2.1 20260123 (Red Hat 15.2.1-7) (GCC) + COMPILER_PATH=/usr/libexec/gcc/x86_64-redhat-linux/15/:/usr/libexec/gcc/x86_64-redhat-linux/15/:/usr/libexec/gcc/x86_64-redhat-linux/:/usr/lib/gcc/x86_64-redhat-linux/15/:/usr/lib/gcc/x86_64-redhat-linux/ + LIBRARY_PATH=/usr/lib/gcc/x86_64-redhat-linux/15/:/usr/lib/gcc/x86_64-redhat-linux/15/../../../../lib64/:/lib/../lib64/:/usr/lib/../lib64/:/usr/lib/gcc/x86_64-redhat-linux/15/../../../:/lib/:/usr/lib/ + COLLECT_GCC_OPTIONS='-v' '-o' 'cmTC_6d0d7' '-foffload-options=-l_GCC_stdc++' '-foffload-options=-l_GCC_m' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'cmTC_6d0d7.' + /usr/libexec/gcc/x86_64-redhat-linux/15/collect2 -plugin /usr/libexec/gcc/x86_64-redhat-linux/15/liblto_plugin.so -plugin-opt=/usr/libexec/gcc/x86_64-redhat-linux/15/lto-wrapper -plugin-opt=-fresolution=/tmp/cc7bPDe5.res -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc --build-id --no-add-needed --eh-frame-hdr --hash-style=gnu -m elf_x86_64 -dynamic-linker /lib64/ld-linux-x86-64.so.2 -o cmTC_6d0d7 /usr/lib/gcc/x86_64-redhat-linux/15/../../../../lib64/crt1.o /usr/lib/gcc/x86_64-redhat-linux/15/../../../../lib64/crti.o /usr/lib/gcc/x86_64-redhat-linux/15/crtbegin.o -L/usr/lib/gcc/x86_64-redhat-linux/15 -L/usr/lib/gcc/x86_64-redhat-linux/15/../../../../lib64 -L/lib/../lib64 -L/usr/lib/../lib64 -L/usr/lib/gcc/x86_64-redhat-linux/15/../../.. -L/lib -L/usr/lib -v CMakeFiles/cmTC_6d0d7.dir/CMakeCXXCompilerABI.cpp.o -lstdc++ -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc /usr/lib/gcc/x86_64-redhat-linux/15/crtend.o /usr/lib/gcc/x86_64-redhat-linux/15/../../../../lib64/crtn.o + collect2 version 15.2.1 20260123 (Red Hat 15.2.1-7) + /usr/bin/ld -plugin /usr/libexec/gcc/x86_64-redhat-linux/15/liblto_plugin.so -plugin-opt=/usr/libexec/gcc/x86_64-redhat-linux/15/lto-wrapper -plugin-opt=-fresolution=/tmp/cc7bPDe5.res -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc --build-id --no-add-needed --eh-frame-hdr --hash-style=gnu -m elf_x86_64 -dynamic-linker /lib64/ld-linux-x86-64.so.2 -o cmTC_6d0d7 /usr/lib/gcc/x86_64-redhat-linux/15/../../../../lib64/crt1.o /usr/lib/gcc/x86_64-redhat-linux/15/../../../../lib64/crti.o /usr/lib/gcc/x86_64-redhat-linux/15/crtbegin.o -L/usr/lib/gcc/x86_64-redhat-linux/15 -L/usr/lib/gcc/x86_64-redhat-linux/15/../../../../lib64 -L/lib/../lib64 -L/usr/lib/../lib64 -L/usr/lib/gcc/x86_64-redhat-linux/15/../../.. -L/lib -L/usr/lib -v CMakeFiles/cmTC_6d0d7.dir/CMakeCXXCompilerABI.cpp.o -lstdc++ -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc /usr/lib/gcc/x86_64-redhat-linux/15/crtend.o /usr/lib/gcc/x86_64-redhat-linux/15/../../../../lib64/crtn.o + GNU ld version 2.45.1-4.fc43 + COLLECT_GCC_OPTIONS='-v' '-o' 'cmTC_6d0d7' '-foffload-options=-l_GCC_stdc++' '-foffload-options=-l_GCC_m' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'cmTC_6d0d7.' + + exitCode: 0 + - + kind: "message-v1" + backtrace: + - "/usr/share/cmake/Modules/CMakeDetermineCompilerABI.cmake:182 (message)" + - "/usr/share/cmake/Modules/CMakeTestCXXCompiler.cmake:26 (CMAKE_DETERMINE_COMPILER_ABI)" + - "CMakeLists.txt:17 (project)" + message: | + Parsed CXX implicit include dir info: rv=done + found start of include info + found start of implicit include info + add: [/usr/lib/gcc/x86_64-redhat-linux/15/../../../../include/c++/15] + add: [/usr/lib/gcc/x86_64-redhat-linux/15/../../../../include/c++/15/x86_64-redhat-linux] + add: [/usr/lib/gcc/x86_64-redhat-linux/15/../../../../include/c++/15/backward] + add: [/usr/lib/gcc/x86_64-redhat-linux/15/include] + add: [/usr/local/include] + add: [/usr/include] + end of search list found + collapse include dir [/usr/lib/gcc/x86_64-redhat-linux/15/../../../../include/c++/15] ==> [/usr/include/c++/15] + collapse include dir [/usr/lib/gcc/x86_64-redhat-linux/15/../../../../include/c++/15/x86_64-redhat-linux] ==> [/usr/include/c++/15/x86_64-redhat-linux] + collapse include dir [/usr/lib/gcc/x86_64-redhat-linux/15/../../../../include/c++/15/backward] ==> [/usr/include/c++/15/backward] + collapse include dir [/usr/lib/gcc/x86_64-redhat-linux/15/include] ==> [/usr/lib/gcc/x86_64-redhat-linux/15/include] + collapse include dir [/usr/local/include] ==> [/usr/local/include] + collapse include dir [/usr/include] ==> [/usr/include] + implicit include dirs: [/usr/include/c++/15;/usr/include/c++/15/x86_64-redhat-linux;/usr/include/c++/15/backward;/usr/lib/gcc/x86_64-redhat-linux/15/include;/usr/local/include;/usr/include] + + + - + kind: "message-v1" + backtrace: + - "/usr/share/cmake/Modules/CMakeDetermineCompilerABI.cmake:218 (message)" + - "/usr/share/cmake/Modules/CMakeTestCXXCompiler.cmake:26 (CMAKE_DETERMINE_COMPILER_ABI)" + - "CMakeLists.txt:17 (project)" + message: | + Parsed CXX implicit link information: + link line regex: [^( *|.*[/\\])(ld[0-9]*(\\.[a-z]+)?|CMAKE_LINK_STARTFILE-NOTFOUND|([^/\\]+-)?ld|collect2)[^/\\]*( |$)] + linker tool regex: [^[ ]*(->|")?[ ]*(([^"]*[/\\])?(ld[0-9]*(\\.[a-z]+)?))("|,| |$)] + ignore line: [Change Dir: '/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/CMakeFiles/CMakeScratch/TryCompile-SEQVGr'] + ignore line: [] + ignore line: [Run Build Command(s): /usr/bin/ninja-build -v cmTC_6d0d7] + ignore line: [[1/2] /usr/bin/c++ -v -o CMakeFiles/cmTC_6d0d7.dir/CMakeCXXCompilerABI.cpp.o -c /usr/share/cmake/Modules/CMakeCXXCompilerABI.cpp] + ignore line: [Using built-in specs.] + ignore line: [COLLECT_GCC=/usr/bin/c++] + ignore line: [OFFLOAD_TARGET_NAMES=nvptx-none:amdgcn-amdhsa] + ignore line: [OFFLOAD_TARGET_DEFAULT=1] + ignore line: [Target: x86_64-redhat-linux] + ignore line: [Configured with: ../configure --enable-bootstrap --enable-languages=c c++ fortran objc obj-c++ ada go d m2 cobol lto --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=https://bugzilla.redhat.com/ --enable-shared --enable-threads=posix --enable-checking=release --enable-multilib --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --with-gcc-major-version-only --enable-libstdcxx-backtrace --with-libstdcxx-zoneinfo=/usr/share/zoneinfo --with-linker-hash-style=gnu --enable-plugin --enable-initfini-array --with-isl=/builddir/build/BUILD/gcc-15.2.1-build/gcc-15.2.1-20260123/obj-x86_64-redhat-linux/isl-install --enable-offload-targets=nvptx-none amdgcn-amdhsa --enable-offload-defaulted --without-cuda-driver --enable-gnu-indirect-function --enable-cet --with-tune=generic --with-arch_32=i686 --build=x86_64-redhat-linux --with-build-config=bootstrap-lto --enable-link-serialization=1 --disable-libssp] + ignore line: [Thread model: posix] + ignore line: [Supported LTO compression algorithms: zlib zstd] + ignore line: [gcc version 15.2.1 20260123 (Red Hat 15.2.1-7) (GCC) ] + ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_6d0d7.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_6d0d7.dir/'] + ignore line: [ /usr/libexec/gcc/x86_64-redhat-linux/15/cc1plus -quiet -v -D_GNU_SOURCE /usr/share/cmake/Modules/CMakeCXXCompilerABI.cpp -quiet -dumpdir CMakeFiles/cmTC_6d0d7.dir/ -dumpbase CMakeCXXCompilerABI.cpp.cpp -dumpbase-ext .cpp -mtune=generic -march=x86-64 -version -o /tmp/ccb43trL.s] + ignore line: [GNU C++17 (GCC) version 15.2.1 20260123 (Red Hat 15.2.1-7) (x86_64-redhat-linux)] + ignore line: [ compiled by GNU C version 15.2.1 20260123 (Red Hat 15.2.1-7) GMP version 6.3.0 MPFR version 4.2.2 MPC version 1.3.1 isl version isl-0.24-GMP] + ignore line: [] + ignore line: [GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072] + ignore line: [ignoring nonexistent directory "/usr/lib/gcc/x86_64-redhat-linux/15/include-fixed"] + ignore line: [ignoring nonexistent directory "/usr/lib/gcc/x86_64-redhat-linux/15/../../../../x86_64-redhat-linux/include"] + ignore line: [#include "..." search starts here:] + ignore line: [#include <...> search starts here:] + ignore line: [ /usr/lib/gcc/x86_64-redhat-linux/15/../../../../include/c++/15] + ignore line: [ /usr/lib/gcc/x86_64-redhat-linux/15/../../../../include/c++/15/x86_64-redhat-linux] + ignore line: [ /usr/lib/gcc/x86_64-redhat-linux/15/../../../../include/c++/15/backward] + ignore line: [ /usr/lib/gcc/x86_64-redhat-linux/15/include] + ignore line: [ /usr/local/include] + ignore line: [ /usr/include] + ignore line: [End of search list.] + ignore line: [Compiler executable checksum: 61fbb778c0a8c441a1c0ce3e680cc1db] + ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_6d0d7.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_6d0d7.dir/'] + ignore line: [ as -v --64 -o CMakeFiles/cmTC_6d0d7.dir/CMakeCXXCompilerABI.cpp.o /tmp/ccb43trL.s] + ignore line: [GNU assembler version 2.45.1 (x86_64-redhat-linux) using BFD version version 2.45.1-4.fc43] + ignore line: [COMPILER_PATH=/usr/libexec/gcc/x86_64-redhat-linux/15/:/usr/libexec/gcc/x86_64-redhat-linux/15/:/usr/libexec/gcc/x86_64-redhat-linux/:/usr/lib/gcc/x86_64-redhat-linux/15/:/usr/lib/gcc/x86_64-redhat-linux/] + ignore line: [LIBRARY_PATH=/usr/lib/gcc/x86_64-redhat-linux/15/:/usr/lib/gcc/x86_64-redhat-linux/15/../../../../lib64/:/lib/../lib64/:/usr/lib/../lib64/:/usr/lib/gcc/x86_64-redhat-linux/15/../../../:/lib/:/usr/lib/] + ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_6d0d7.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_6d0d7.dir/CMakeCXXCompilerABI.cpp.'] + ignore line: [[2/2] : && /usr/bin/c++ -v -Wl -v CMakeFiles/cmTC_6d0d7.dir/CMakeCXXCompilerABI.cpp.o -o cmTC_6d0d7 && :] + ignore line: [Using built-in specs.] + ignore line: [COLLECT_GCC=/usr/bin/c++] + ignore line: [COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-redhat-linux/15/lto-wrapper] + ignore line: [OFFLOAD_TARGET_NAMES=nvptx-none:amdgcn-amdhsa] + ignore line: [OFFLOAD_TARGET_DEFAULT=1] + ignore line: [Target: x86_64-redhat-linux] + ignore line: [Configured with: ../configure --enable-bootstrap --enable-languages=c c++ fortran objc obj-c++ ada go d m2 cobol lto --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=https://bugzilla.redhat.com/ --enable-shared --enable-threads=posix --enable-checking=release --enable-multilib --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --with-gcc-major-version-only --enable-libstdcxx-backtrace --with-libstdcxx-zoneinfo=/usr/share/zoneinfo --with-linker-hash-style=gnu --enable-plugin --enable-initfini-array --with-isl=/builddir/build/BUILD/gcc-15.2.1-build/gcc-15.2.1-20260123/obj-x86_64-redhat-linux/isl-install --enable-offload-targets=nvptx-none amdgcn-amdhsa --enable-offload-defaulted --without-cuda-driver --enable-gnu-indirect-function --enable-cet --with-tune=generic --with-arch_32=i686 --build=x86_64-redhat-linux --with-build-config=bootstrap-lto --enable-link-serialization=1 --disable-libssp] + ignore line: [Thread model: posix] + ignore line: [Supported LTO compression algorithms: zlib zstd] + ignore line: [gcc version 15.2.1 20260123 (Red Hat 15.2.1-7) (GCC) ] + ignore line: [COMPILER_PATH=/usr/libexec/gcc/x86_64-redhat-linux/15/:/usr/libexec/gcc/x86_64-redhat-linux/15/:/usr/libexec/gcc/x86_64-redhat-linux/:/usr/lib/gcc/x86_64-redhat-linux/15/:/usr/lib/gcc/x86_64-redhat-linux/] + ignore line: [LIBRARY_PATH=/usr/lib/gcc/x86_64-redhat-linux/15/:/usr/lib/gcc/x86_64-redhat-linux/15/../../../../lib64/:/lib/../lib64/:/usr/lib/../lib64/:/usr/lib/gcc/x86_64-redhat-linux/15/../../../:/lib/:/usr/lib/] + ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'cmTC_6d0d7' '-foffload-options=-l_GCC_stdc++' '-foffload-options=-l_GCC_m' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'cmTC_6d0d7.'] + link line: [ /usr/libexec/gcc/x86_64-redhat-linux/15/collect2 -plugin /usr/libexec/gcc/x86_64-redhat-linux/15/liblto_plugin.so -plugin-opt=/usr/libexec/gcc/x86_64-redhat-linux/15/lto-wrapper -plugin-opt=-fresolution=/tmp/cc7bPDe5.res -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc --build-id --no-add-needed --eh-frame-hdr --hash-style=gnu -m elf_x86_64 -dynamic-linker /lib64/ld-linux-x86-64.so.2 -o cmTC_6d0d7 /usr/lib/gcc/x86_64-redhat-linux/15/../../../../lib64/crt1.o /usr/lib/gcc/x86_64-redhat-linux/15/../../../../lib64/crti.o /usr/lib/gcc/x86_64-redhat-linux/15/crtbegin.o -L/usr/lib/gcc/x86_64-redhat-linux/15 -L/usr/lib/gcc/x86_64-redhat-linux/15/../../../../lib64 -L/lib/../lib64 -L/usr/lib/../lib64 -L/usr/lib/gcc/x86_64-redhat-linux/15/../../.. -L/lib -L/usr/lib -v CMakeFiles/cmTC_6d0d7.dir/CMakeCXXCompilerABI.cpp.o -lstdc++ -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc /usr/lib/gcc/x86_64-redhat-linux/15/crtend.o /usr/lib/gcc/x86_64-redhat-linux/15/../../../../lib64/crtn.o] + arg [/usr/libexec/gcc/x86_64-redhat-linux/15/collect2] ==> ignore + arg [-plugin] ==> ignore + arg [/usr/libexec/gcc/x86_64-redhat-linux/15/liblto_plugin.so] ==> ignore + arg [-plugin-opt=/usr/libexec/gcc/x86_64-redhat-linux/15/lto-wrapper] ==> ignore + arg [-plugin-opt=-fresolution=/tmp/cc7bPDe5.res] ==> ignore + arg [-plugin-opt=-pass-through=-lgcc_s] ==> ignore + arg [-plugin-opt=-pass-through=-lgcc] ==> ignore + arg [-plugin-opt=-pass-through=-lc] ==> ignore + arg [-plugin-opt=-pass-through=-lgcc_s] ==> ignore + arg [-plugin-opt=-pass-through=-lgcc] ==> ignore + arg [--build-id] ==> ignore + arg [--no-add-needed] ==> ignore + arg [--eh-frame-hdr] ==> ignore + arg [--hash-style=gnu] ==> ignore + arg [-m] ==> ignore + arg [elf_x86_64] ==> ignore + arg [-dynamic-linker] ==> ignore + arg [/lib64/ld-linux-x86-64.so.2] ==> ignore + arg [-o] ==> ignore + arg [cmTC_6d0d7] ==> ignore + arg [/usr/lib/gcc/x86_64-redhat-linux/15/../../../../lib64/crt1.o] ==> obj [/usr/lib/gcc/x86_64-redhat-linux/15/../../../../lib64/crt1.o] + arg [/usr/lib/gcc/x86_64-redhat-linux/15/../../../../lib64/crti.o] ==> obj [/usr/lib/gcc/x86_64-redhat-linux/15/../../../../lib64/crti.o] + arg [/usr/lib/gcc/x86_64-redhat-linux/15/crtbegin.o] ==> obj [/usr/lib/gcc/x86_64-redhat-linux/15/crtbegin.o] + arg [-L/usr/lib/gcc/x86_64-redhat-linux/15] ==> dir [/usr/lib/gcc/x86_64-redhat-linux/15] + arg [-L/usr/lib/gcc/x86_64-redhat-linux/15/../../../../lib64] ==> dir [/usr/lib/gcc/x86_64-redhat-linux/15/../../../../lib64] + arg [-L/lib/../lib64] ==> dir [/lib/../lib64] + arg [-L/usr/lib/../lib64] ==> dir [/usr/lib/../lib64] + arg [-L/usr/lib/gcc/x86_64-redhat-linux/15/../../..] ==> dir [/usr/lib/gcc/x86_64-redhat-linux/15/../../..] + arg [-L/lib] ==> dir [/lib] + arg [-L/usr/lib] ==> dir [/usr/lib] + arg [-v] ==> ignore + arg [CMakeFiles/cmTC_6d0d7.dir/CMakeCXXCompilerABI.cpp.o] ==> ignore + arg [-lstdc++] ==> lib [stdc++] + arg [-lm] ==> lib [m] + arg [-lgcc_s] ==> lib [gcc_s] + arg [-lgcc] ==> lib [gcc] + arg [-lc] ==> lib [c] + arg [-lgcc_s] ==> lib [gcc_s] + arg [-lgcc] ==> lib [gcc] + arg [/usr/lib/gcc/x86_64-redhat-linux/15/crtend.o] ==> obj [/usr/lib/gcc/x86_64-redhat-linux/15/crtend.o] + arg [/usr/lib/gcc/x86_64-redhat-linux/15/../../../../lib64/crtn.o] ==> obj [/usr/lib/gcc/x86_64-redhat-linux/15/../../../../lib64/crtn.o] + ignore line: [collect2 version 15.2.1 20260123 (Red Hat 15.2.1-7)] + ignore line: [/usr/bin/ld -plugin /usr/libexec/gcc/x86_64-redhat-linux/15/liblto_plugin.so -plugin-opt=/usr/libexec/gcc/x86_64-redhat-linux/15/lto-wrapper -plugin-opt=-fresolution=/tmp/cc7bPDe5.res -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc --build-id --no-add-needed --eh-frame-hdr --hash-style=gnu -m elf_x86_64 -dynamic-linker /lib64/ld-linux-x86-64.so.2 -o cmTC_6d0d7 /usr/lib/gcc/x86_64-redhat-linux/15/../../../../lib64/crt1.o /usr/lib/gcc/x86_64-redhat-linux/15/../../../../lib64/crti.o /usr/lib/gcc/x86_64-redhat-linux/15/crtbegin.o -L/usr/lib/gcc/x86_64-redhat-linux/15 -L/usr/lib/gcc/x86_64-redhat-linux/15/../../../../lib64 -L/lib/../lib64 -L/usr/lib/../lib64 -L/usr/lib/gcc/x86_64-redhat-linux/15/../../.. -L/lib -L/usr/lib -v CMakeFiles/cmTC_6d0d7.dir/CMakeCXXCompilerABI.cpp.o -lstdc++ -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc /usr/lib/gcc/x86_64-redhat-linux/15/crtend.o /usr/lib/gcc/x86_64-redhat-linux/15/../../../../lib64/crtn.o] + linker tool for 'CXX': /usr/bin/ld + collapse obj [/usr/lib/gcc/x86_64-redhat-linux/15/../../../../lib64/crt1.o] ==> [/usr/lib64/crt1.o] + collapse obj [/usr/lib/gcc/x86_64-redhat-linux/15/../../../../lib64/crti.o] ==> [/usr/lib64/crti.o] + collapse obj [/usr/lib/gcc/x86_64-redhat-linux/15/../../../../lib64/crtn.o] ==> [/usr/lib64/crtn.o] + collapse library dir [/usr/lib/gcc/x86_64-redhat-linux/15] ==> [/usr/lib/gcc/x86_64-redhat-linux/15] + collapse library dir [/usr/lib/gcc/x86_64-redhat-linux/15/../../../../lib64] ==> [/usr/lib64] + collapse library dir [/lib/../lib64] ==> [/lib64] + collapse library dir [/usr/lib/../lib64] ==> [/usr/lib64] + collapse library dir [/usr/lib/gcc/x86_64-redhat-linux/15/../../..] ==> [/usr/lib] + collapse library dir [/lib] ==> [/lib] + collapse library dir [/usr/lib] ==> [/usr/lib] + implicit libs: [stdc++;m;gcc_s;gcc;c;gcc_s;gcc] + implicit objs: [/usr/lib64/crt1.o;/usr/lib64/crti.o;/usr/lib/gcc/x86_64-redhat-linux/15/crtbegin.o;/usr/lib/gcc/x86_64-redhat-linux/15/crtend.o;/usr/lib64/crtn.o] + implicit dirs: [/usr/lib/gcc/x86_64-redhat-linux/15;/usr/lib64;/lib64;/usr/lib;/lib] + implicit fwks: [] + + + - + kind: "message-v1" + backtrace: + - "/usr/share/cmake/Modules/Internal/CMakeDetermineLinkerId.cmake:40 (message)" + - "/usr/share/cmake/Modules/CMakeDetermineCompilerABI.cmake:255 (cmake_determine_linker_id)" + - "/usr/share/cmake/Modules/CMakeTestCXXCompiler.cmake:26 (CMAKE_DETERMINE_COMPILER_ABI)" + - "CMakeLists.txt:17 (project)" + message: | + Running the CXX compiler's linker: "/usr/bin/ld" "-v" + GNU ld version 2.45.1-4.fc43 + - + kind: "try_compile-v1" + backtrace: + - "/usr/share/cmake/Modules/Internal/CheckSourceCompiles.cmake:108 (try_compile)" + - "/usr/share/cmake/Modules/CheckCXXSourceCompiles.cmake:58 (cmake_check_source_compiles)" + - "/usr/share/cmake/Modules/FindThreads.cmake:99 (CHECK_CXX_SOURCE_COMPILES)" + - "/usr/share/cmake/Modules/FindThreads.cmake:163 (_threads_check_libc)" + - "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake:76 (find_package)" + - "/usr/lib64/cmake/Qt6/QtPublicDependencyHelpers.cmake:36 (find_dependency)" + - "/usr/lib64/cmake/Qt6/Qt6Dependencies.cmake:38 (_qt_internal_find_third_party_dependencies)" + - "/usr/lib64/cmake/Qt6/Qt6Config.cmake:193 (include)" + - "CMakeLists.txt:77 (find_package)" + checks: + - "Performing Test CMAKE_HAVE_LIBC_PTHREAD" + directories: + source: "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/CMakeFiles/CMakeScratch/TryCompile-h9VWIG" + binary: "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/CMakeFiles/CMakeScratch/TryCompile-h9VWIG" + cmakeVariables: + CMAKE_CXX_FLAGS: "" + CMAKE_CXX_FLAGS_DEBUG: "-g" + CMAKE_EXE_LINKER_FLAGS: "" + CMAKE_MODULE_PATH: "/usr/lib64/cmake/Qt6;/usr/lib64/cmake/Qt6/3rdparty/extra-cmake-modules/find-modules;/usr/lib64/cmake/Qt6/3rdparty/kwin" + buildResult: + variable: "CMAKE_HAVE_LIBC_PTHREAD" + cached: true + stdout: | + Change Dir: '/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/CMakeFiles/CMakeScratch/TryCompile-h9VWIG' + + Run Build Command(s): /usr/bin/ninja-build -v cmTC_33be6 + [1/2] /usr/bin/c++ -DCMAKE_HAVE_LIBC_PTHREAD -std=gnu++20 -o CMakeFiles/cmTC_33be6.dir/src.cxx.o -c /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/CMakeFiles/CMakeScratch/TryCompile-h9VWIG/src.cxx + [2/2] : && /usr/bin/c++ CMakeFiles/cmTC_33be6.dir/src.cxx.o -o cmTC_33be6 && : + + exitCode: 0 + - + kind: "try_compile-v1" + backtrace: + - "/usr/share/cmake/Modules/Internal/CheckSourceCompiles.cmake:108 (try_compile)" + - "/usr/share/cmake/Modules/CheckCXXSourceCompiles.cmake:58 (cmake_check_source_compiles)" + - "/usr/lib64/cmake/Qt6/FindWrapAtomic.cmake:36 (check_cxx_source_compiles)" + - "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake:76 (find_package)" + - "/usr/lib64/cmake/Qt6/QtPublicDependencyHelpers.cmake:36 (find_dependency)" + - "/usr/lib64/cmake/Qt6Core/Qt6CoreDependencies.cmake:36 (_qt_internal_find_third_party_dependencies)" + - "/usr/lib64/cmake/Qt6Core/Qt6CoreConfig.cmake:52 (include)" + - "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake:76 (find_package)" + - "/usr/lib64/cmake/Qt6/QtPublicDependencyHelpers.cmake:142 (find_dependency)" + - "/usr/lib64/cmake/Qt6Widgets/Qt6WidgetsDependencies.cmake:50 (_qt_internal_find_qt_dependencies)" + - "/usr/lib64/cmake/Qt6Widgets/Qt6WidgetsConfig.cmake:50 (include)" + - "/usr/lib64/cmake/Qt6/Qt6Config.cmake:254 (find_package)" + - "CMakeLists.txt:78 (find_package)" + checks: + - "Performing Test HAVE_STDATOMIC" + directories: + source: "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/CMakeFiles/CMakeScratch/TryCompile-Ueoj2w" + binary: "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/CMakeFiles/CMakeScratch/TryCompile-Ueoj2w" + cmakeVariables: + CMAKE_CXX_FLAGS: "" + CMAKE_CXX_FLAGS_DEBUG: "-g" + CMAKE_EXE_LINKER_FLAGS: "" + CMAKE_MODULE_PATH: "/usr/lib64/cmake/Qt6;/usr/lib64/cmake/Qt6/3rdparty/extra-cmake-modules/find-modules;/usr/lib64/cmake/Qt6/3rdparty/kwin;/usr/lib64/cmake/Qt6;/usr/lib64/cmake/Qt6/3rdparty/extra-cmake-modules/find-modules;/usr/lib64/cmake/Qt6/3rdparty/kwin" + buildResult: + variable: "HAVE_STDATOMIC" + cached: true + stdout: | + Change Dir: '/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/CMakeFiles/CMakeScratch/TryCompile-Ueoj2w' + + Run Build Command(s): /usr/bin/ninja-build -v cmTC_fee0d + [1/2] /usr/bin/c++ -DHAVE_STDATOMIC -std=gnu++20 -o CMakeFiles/cmTC_fee0d.dir/src.cxx.o -c /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/CMakeFiles/CMakeScratch/TryCompile-Ueoj2w/src.cxx + [2/2] : && /usr/bin/c++ CMakeFiles/cmTC_fee0d.dir/src.cxx.o -o cmTC_fee0d && : + + exitCode: 0 +... diff --git a/build-linux/CMakeFiles/TargetDirectories.txt b/build-linux/CMakeFiles/TargetDirectories.txt new file mode 100644 index 00000000..24f116bb --- /dev/null +++ b/build-linux/CMakeFiles/TargetDirectories.txt @@ -0,0 +1,66 @@ +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/CMakeFiles/kassetmanagerqt.dir +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/CMakeFiles/package.dir +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/CMakeFiles/package_source.dir +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/CMakeFiles/test.dir +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/CMakeFiles/edit_cache.dir +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/CMakeFiles/rebuild_cache.dir +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/CMakeFiles/list_install_components.dir +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/CMakeFiles/install.dir +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/CMakeFiles/install/local.dir +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/CMakeFiles/install/strip.dir +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/CMakeFiles/kassetmanagerqt_autogen_timestamp_deps.dir +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/CMakeFiles/kassetmanagerqt_autogen.dir +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/CMakeFiles/test_simple.dir +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/CMakeFiles/test_db.dir +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/CMakeFiles/test_models.dir +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/CMakeFiles/test_sequence_detector.dir +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/CMakeFiles/test_importer.dir +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/CMakeFiles/test_utils.dir +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/CMakeFiles/test_live_preview_manager.dir +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/CMakeFiles/test_media_converter_worker.dir +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/CMakeFiles/test_virtual_drag.dir +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/CMakeFiles/test_drag_utils.dir +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/CMakeFiles/test_everything_search.dir +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/CMakeFiles/test_icon_utils.dir +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/CMakeFiles/test_grid_scrub.dir +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/CMakeFiles/test_platform_session.dir +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/CMakeFiles/test_annotation_items.dir +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/CMakeFiles/package.dir +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/CMakeFiles/package_source.dir +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/CMakeFiles/test.dir +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/CMakeFiles/edit_cache.dir +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/CMakeFiles/rebuild_cache.dir +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/CMakeFiles/list_install_components.dir +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/CMakeFiles/install.dir +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/CMakeFiles/install/local.dir +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/CMakeFiles/install/strip.dir +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/CMakeFiles/test_simple_autogen_timestamp_deps.dir +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/CMakeFiles/test_simple_autogen.dir +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/CMakeFiles/test_db_autogen_timestamp_deps.dir +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/CMakeFiles/test_db_autogen.dir +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/CMakeFiles/test_models_autogen_timestamp_deps.dir +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/CMakeFiles/test_models_autogen.dir +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/CMakeFiles/test_sequence_detector_autogen_timestamp_deps.dir +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/CMakeFiles/test_sequence_detector_autogen.dir +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/CMakeFiles/test_importer_autogen_timestamp_deps.dir +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/CMakeFiles/test_importer_autogen.dir +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/CMakeFiles/test_utils_autogen_timestamp_deps.dir +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/CMakeFiles/test_utils_autogen.dir +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/CMakeFiles/test_live_preview_manager_autogen_timestamp_deps.dir +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/CMakeFiles/test_live_preview_manager_autogen.dir +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/CMakeFiles/test_media_converter_worker_autogen_timestamp_deps.dir +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/CMakeFiles/test_media_converter_worker_autogen.dir +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/CMakeFiles/test_virtual_drag_autogen_timestamp_deps.dir +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/CMakeFiles/test_virtual_drag_autogen.dir +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/CMakeFiles/test_drag_utils_autogen_timestamp_deps.dir +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/CMakeFiles/test_drag_utils_autogen.dir +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/CMakeFiles/test_everything_search_autogen_timestamp_deps.dir +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/CMakeFiles/test_everything_search_autogen.dir +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/CMakeFiles/test_icon_utils_autogen_timestamp_deps.dir +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/CMakeFiles/test_icon_utils_autogen.dir +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/CMakeFiles/test_grid_scrub_autogen_timestamp_deps.dir +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/CMakeFiles/test_grid_scrub_autogen.dir +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/CMakeFiles/test_platform_session_autogen_timestamp_deps.dir +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/CMakeFiles/test_platform_session_autogen.dir +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/CMakeFiles/test_annotation_items_autogen_timestamp_deps.dir +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/CMakeFiles/test_annotation_items_autogen.dir diff --git a/build-linux/CMakeFiles/clean_additional.cmake b/build-linux/CMakeFiles/clean_additional.cmake new file mode 100644 index 00000000..fd87c78b --- /dev/null +++ b/build-linux/CMakeFiles/clean_additional.cmake @@ -0,0 +1,55 @@ +# Additional clean files +cmake_minimum_required(VERSION 3.16) + +if("${CONFIG}" STREQUAL "" OR "${CONFIG}" STREQUAL "Release") + file(REMOVE_RECURSE + "CMakeFiles/kassetmanagerqt_autogen.dir/AutogenUsed.txt" + "CMakeFiles/kassetmanagerqt_autogen.dir/ParseCache.txt" + "kassetmanagerqt_autogen" + "tests/CMakeFiles/test_annotation_items_autogen.dir/AutogenUsed.txt" + "tests/CMakeFiles/test_annotation_items_autogen.dir/ParseCache.txt" + "tests/CMakeFiles/test_db_autogen.dir/AutogenUsed.txt" + "tests/CMakeFiles/test_db_autogen.dir/ParseCache.txt" + "tests/CMakeFiles/test_drag_utils_autogen.dir/AutogenUsed.txt" + "tests/CMakeFiles/test_drag_utils_autogen.dir/ParseCache.txt" + "tests/CMakeFiles/test_everything_search_autogen.dir/AutogenUsed.txt" + "tests/CMakeFiles/test_everything_search_autogen.dir/ParseCache.txt" + "tests/CMakeFiles/test_grid_scrub_autogen.dir/AutogenUsed.txt" + "tests/CMakeFiles/test_grid_scrub_autogen.dir/ParseCache.txt" + "tests/CMakeFiles/test_icon_utils_autogen.dir/AutogenUsed.txt" + "tests/CMakeFiles/test_icon_utils_autogen.dir/ParseCache.txt" + "tests/CMakeFiles/test_importer_autogen.dir/AutogenUsed.txt" + "tests/CMakeFiles/test_importer_autogen.dir/ParseCache.txt" + "tests/CMakeFiles/test_live_preview_manager_autogen.dir/AutogenUsed.txt" + "tests/CMakeFiles/test_live_preview_manager_autogen.dir/ParseCache.txt" + "tests/CMakeFiles/test_media_converter_worker_autogen.dir/AutogenUsed.txt" + "tests/CMakeFiles/test_media_converter_worker_autogen.dir/ParseCache.txt" + "tests/CMakeFiles/test_models_autogen.dir/AutogenUsed.txt" + "tests/CMakeFiles/test_models_autogen.dir/ParseCache.txt" + "tests/CMakeFiles/test_platform_session_autogen.dir/AutogenUsed.txt" + "tests/CMakeFiles/test_platform_session_autogen.dir/ParseCache.txt" + "tests/CMakeFiles/test_sequence_detector_autogen.dir/AutogenUsed.txt" + "tests/CMakeFiles/test_sequence_detector_autogen.dir/ParseCache.txt" + "tests/CMakeFiles/test_simple_autogen.dir/AutogenUsed.txt" + "tests/CMakeFiles/test_simple_autogen.dir/ParseCache.txt" + "tests/CMakeFiles/test_utils_autogen.dir/AutogenUsed.txt" + "tests/CMakeFiles/test_utils_autogen.dir/ParseCache.txt" + "tests/CMakeFiles/test_virtual_drag_autogen.dir/AutogenUsed.txt" + "tests/CMakeFiles/test_virtual_drag_autogen.dir/ParseCache.txt" + "tests/test_annotation_items_autogen" + "tests/test_db_autogen" + "tests/test_drag_utils_autogen" + "tests/test_everything_search_autogen" + "tests/test_grid_scrub_autogen" + "tests/test_icon_utils_autogen" + "tests/test_importer_autogen" + "tests/test_live_preview_manager_autogen" + "tests/test_media_converter_worker_autogen" + "tests/test_models_autogen" + "tests/test_platform_session_autogen" + "tests/test_sequence_detector_autogen" + "tests/test_simple_autogen" + "tests/test_utils_autogen" + "tests/test_virtual_drag_autogen" + ) +endif() diff --git a/build-linux/CMakeFiles/cmake.check_cache b/build-linux/CMakeFiles/cmake.check_cache new file mode 100644 index 00000000..3dccd731 --- /dev/null +++ b/build-linux/CMakeFiles/cmake.check_cache @@ -0,0 +1 @@ +# This file is generated by cmake for dependency checking of the CMakeCache.txt file diff --git a/build-linux/CMakeFiles/kassetmanagerqt.dir/kassetmanagerqt_autogen/mocs_compilation.cpp.o b/build-linux/CMakeFiles/kassetmanagerqt.dir/kassetmanagerqt_autogen/mocs_compilation.cpp.o new file mode 100644 index 00000000..2c0fc37e Binary files /dev/null and b/build-linux/CMakeFiles/kassetmanagerqt.dir/kassetmanagerqt_autogen/mocs_compilation.cpp.o differ diff --git a/build-linux/CMakeFiles/kassetmanagerqt.dir/src/annotation_items.cpp.o b/build-linux/CMakeFiles/kassetmanagerqt.dir/src/annotation_items.cpp.o new file mode 100644 index 00000000..76cfb5ea Binary files /dev/null and b/build-linux/CMakeFiles/kassetmanagerqt.dir/src/annotation_items.cpp.o differ diff --git a/build-linux/CMakeFiles/kassetmanagerqt.dir/src/annotation_layer.cpp.o b/build-linux/CMakeFiles/kassetmanagerqt.dir/src/annotation_layer.cpp.o new file mode 100644 index 00000000..6b4ac488 Binary files /dev/null and b/build-linux/CMakeFiles/kassetmanagerqt.dir/src/annotation_layer.cpp.o differ diff --git a/build-linux/CMakeFiles/kassetmanagerqt.dir/src/asset_grid_view.cpp.o b/build-linux/CMakeFiles/kassetmanagerqt.dir/src/asset_grid_view.cpp.o new file mode 100644 index 00000000..7f0099ae Binary files /dev/null and b/build-linux/CMakeFiles/kassetmanagerqt.dir/src/asset_grid_view.cpp.o differ diff --git a/build-linux/CMakeFiles/kassetmanagerqt.dir/src/asset_item_delegate.cpp.o b/build-linux/CMakeFiles/kassetmanagerqt.dir/src/asset_item_delegate.cpp.o new file mode 100644 index 00000000..f9578626 Binary files /dev/null and b/build-linux/CMakeFiles/kassetmanagerqt.dir/src/asset_item_delegate.cpp.o differ diff --git a/build-linux/CMakeFiles/kassetmanagerqt.dir/src/asset_sequence_grouping_proxy_model.cpp.o b/build-linux/CMakeFiles/kassetmanagerqt.dir/src/asset_sequence_grouping_proxy_model.cpp.o new file mode 100644 index 00000000..adceba17 Binary files /dev/null and b/build-linux/CMakeFiles/kassetmanagerqt.dir/src/asset_sequence_grouping_proxy_model.cpp.o differ diff --git a/build-linux/CMakeFiles/kassetmanagerqt.dir/src/assets_model.cpp.o b/build-linux/CMakeFiles/kassetmanagerqt.dir/src/assets_model.cpp.o new file mode 100644 index 00000000..9585b565 Binary files /dev/null and b/build-linux/CMakeFiles/kassetmanagerqt.dir/src/assets_model.cpp.o differ diff --git a/build-linux/CMakeFiles/kassetmanagerqt.dir/src/bulk_rename_dialog.cpp.o b/build-linux/CMakeFiles/kassetmanagerqt.dir/src/bulk_rename_dialog.cpp.o new file mode 100644 index 00000000..84ef1497 Binary files /dev/null and b/build-linux/CMakeFiles/kassetmanagerqt.dir/src/bulk_rename_dialog.cpp.o differ diff --git a/build-linux/CMakeFiles/kassetmanagerqt.dir/src/context_preserver.cpp.o b/build-linux/CMakeFiles/kassetmanagerqt.dir/src/context_preserver.cpp.o new file mode 100644 index 00000000..4c3547b9 Binary files /dev/null and b/build-linux/CMakeFiles/kassetmanagerqt.dir/src/context_preserver.cpp.o differ diff --git a/build-linux/CMakeFiles/kassetmanagerqt.dir/src/database_health_agent.cpp.o b/build-linux/CMakeFiles/kassetmanagerqt.dir/src/database_health_agent.cpp.o new file mode 100644 index 00000000..2d7d1135 Binary files /dev/null and b/build-linux/CMakeFiles/kassetmanagerqt.dir/src/database_health_agent.cpp.o differ diff --git a/build-linux/CMakeFiles/kassetmanagerqt.dir/src/database_health_dialog.cpp.o b/build-linux/CMakeFiles/kassetmanagerqt.dir/src/database_health_dialog.cpp.o new file mode 100644 index 00000000..93df6cee Binary files /dev/null and b/build-linux/CMakeFiles/kassetmanagerqt.dir/src/database_health_dialog.cpp.o differ diff --git a/build-linux/CMakeFiles/kassetmanagerqt.dir/src/db.cpp.o b/build-linux/CMakeFiles/kassetmanagerqt.dir/src/db.cpp.o new file mode 100644 index 00000000..db945ab6 Binary files /dev/null and b/build-linux/CMakeFiles/kassetmanagerqt.dir/src/db.cpp.o differ diff --git a/build-linux/CMakeFiles/kassetmanagerqt.dir/src/drag_utils.cpp.o b/build-linux/CMakeFiles/kassetmanagerqt.dir/src/drag_utils.cpp.o new file mode 100644 index 00000000..a3c6f79f Binary files /dev/null and b/build-linux/CMakeFiles/kassetmanagerqt.dir/src/drag_utils.cpp.o differ diff --git a/build-linux/CMakeFiles/kassetmanagerqt.dir/src/everything_folder_model.cpp.o b/build-linux/CMakeFiles/kassetmanagerqt.dir/src/everything_folder_model.cpp.o new file mode 100644 index 00000000..b4e5d5d8 Binary files /dev/null and b/build-linux/CMakeFiles/kassetmanagerqt.dir/src/everything_folder_model.cpp.o differ diff --git a/build-linux/CMakeFiles/kassetmanagerqt.dir/src/everything_search.cpp.o b/build-linux/CMakeFiles/kassetmanagerqt.dir/src/everything_search.cpp.o new file mode 100644 index 00000000..a6458b2d Binary files /dev/null and b/build-linux/CMakeFiles/kassetmanagerqt.dir/src/everything_search.cpp.o differ diff --git a/build-linux/CMakeFiles/kassetmanagerqt.dir/src/everything_search_dialog.cpp.o b/build-linux/CMakeFiles/kassetmanagerqt.dir/src/everything_search_dialog.cpp.o new file mode 100644 index 00000000..b2791829 Binary files /dev/null and b/build-linux/CMakeFiles/kassetmanagerqt.dir/src/everything_search_dialog.cpp.o differ diff --git a/build-linux/CMakeFiles/kassetmanagerqt.dir/src/file_manager_pane.cpp.o b/build-linux/CMakeFiles/kassetmanagerqt.dir/src/file_manager_pane.cpp.o new file mode 100644 index 00000000..7122f5b6 Binary files /dev/null and b/build-linux/CMakeFiles/kassetmanagerqt.dir/src/file_manager_pane.cpp.o differ diff --git a/build-linux/CMakeFiles/kassetmanagerqt.dir/src/file_ops.cpp.o b/build-linux/CMakeFiles/kassetmanagerqt.dir/src/file_ops.cpp.o new file mode 100644 index 00000000..321cffb0 Binary files /dev/null and b/build-linux/CMakeFiles/kassetmanagerqt.dir/src/file_ops.cpp.o differ diff --git a/build-linux/CMakeFiles/kassetmanagerqt.dir/src/file_ops_dialog.cpp.o b/build-linux/CMakeFiles/kassetmanagerqt.dir/src/file_ops_dialog.cpp.o new file mode 100644 index 00000000..b4eefe1d Binary files /dev/null and b/build-linux/CMakeFiles/kassetmanagerqt.dir/src/file_ops_dialog.cpp.o differ diff --git a/build-linux/CMakeFiles/kassetmanagerqt.dir/src/file_utils.cpp.o b/build-linux/CMakeFiles/kassetmanagerqt.dir/src/file_utils.cpp.o new file mode 100644 index 00000000..1f51c576 Binary files /dev/null and b/build-linux/CMakeFiles/kassetmanagerqt.dir/src/file_utils.cpp.o differ diff --git a/build-linux/CMakeFiles/kassetmanagerqt.dir/src/fm_item_delegate.cpp.o b/build-linux/CMakeFiles/kassetmanagerqt.dir/src/fm_item_delegate.cpp.o new file mode 100644 index 00000000..612d2343 Binary files /dev/null and b/build-linux/CMakeFiles/kassetmanagerqt.dir/src/fm_item_delegate.cpp.o differ diff --git a/build-linux/CMakeFiles/kassetmanagerqt.dir/src/fm_views_ex.cpp.o b/build-linux/CMakeFiles/kassetmanagerqt.dir/src/fm_views_ex.cpp.o new file mode 100644 index 00000000..208c0d75 Binary files /dev/null and b/build-linux/CMakeFiles/kassetmanagerqt.dir/src/fm_views_ex.cpp.o differ diff --git a/build-linux/CMakeFiles/kassetmanagerqt.dir/src/grid_scrub.cpp.o b/build-linux/CMakeFiles/kassetmanagerqt.dir/src/grid_scrub.cpp.o new file mode 100644 index 00000000..ca763a39 Binary files /dev/null and b/build-linux/CMakeFiles/kassetmanagerqt.dir/src/grid_scrub.cpp.o differ diff --git a/build-linux/CMakeFiles/kassetmanagerqt.dir/src/icon_utils.cpp.o b/build-linux/CMakeFiles/kassetmanagerqt.dir/src/icon_utils.cpp.o new file mode 100644 index 00000000..283f48a9 Binary files /dev/null and b/build-linux/CMakeFiles/kassetmanagerqt.dir/src/icon_utils.cpp.o differ diff --git a/build-linux/CMakeFiles/kassetmanagerqt.dir/src/image_preview_overlay.cpp.o b/build-linux/CMakeFiles/kassetmanagerqt.dir/src/image_preview_overlay.cpp.o new file mode 100644 index 00000000..39fdc5a4 Binary files /dev/null and b/build-linux/CMakeFiles/kassetmanagerqt.dir/src/image_preview_overlay.cpp.o differ diff --git a/build-linux/CMakeFiles/kassetmanagerqt.dir/src/import_progress_dialog.cpp.o b/build-linux/CMakeFiles/kassetmanagerqt.dir/src/import_progress_dialog.cpp.o new file mode 100644 index 00000000..a91fc2ec Binary files /dev/null and b/build-linux/CMakeFiles/kassetmanagerqt.dir/src/import_progress_dialog.cpp.o differ diff --git a/build-linux/CMakeFiles/kassetmanagerqt.dir/src/importer.cpp.o b/build-linux/CMakeFiles/kassetmanagerqt.dir/src/importer.cpp.o new file mode 100644 index 00000000..802b1582 Binary files /dev/null and b/build-linux/CMakeFiles/kassetmanagerqt.dir/src/importer.cpp.o differ diff --git a/build-linux/CMakeFiles/kassetmanagerqt.dir/src/live_preview_manager.cpp.o b/build-linux/CMakeFiles/kassetmanagerqt.dir/src/live_preview_manager.cpp.o new file mode 100644 index 00000000..95fd7769 Binary files /dev/null and b/build-linux/CMakeFiles/kassetmanagerqt.dir/src/live_preview_manager.cpp.o differ diff --git a/build-linux/CMakeFiles/kassetmanagerqt.dir/src/log_manager.cpp.o b/build-linux/CMakeFiles/kassetmanagerqt.dir/src/log_manager.cpp.o new file mode 100644 index 00000000..c74d4040 Binary files /dev/null and b/build-linux/CMakeFiles/kassetmanagerqt.dir/src/log_manager.cpp.o differ diff --git a/build-linux/CMakeFiles/kassetmanagerqt.dir/src/log_viewer_widget.cpp.o b/build-linux/CMakeFiles/kassetmanagerqt.dir/src/log_viewer_widget.cpp.o new file mode 100644 index 00000000..df00fc61 Binary files /dev/null and b/build-linux/CMakeFiles/kassetmanagerqt.dir/src/log_viewer_widget.cpp.o differ diff --git a/build-linux/CMakeFiles/kassetmanagerqt.dir/src/main.cpp.o b/build-linux/CMakeFiles/kassetmanagerqt.dir/src/main.cpp.o new file mode 100644 index 00000000..a746ffb7 Binary files /dev/null and b/build-linux/CMakeFiles/kassetmanagerqt.dir/src/main.cpp.o differ diff --git a/build-linux/CMakeFiles/kassetmanagerqt.dir/src/mainwindow.cpp.o b/build-linux/CMakeFiles/kassetmanagerqt.dir/src/mainwindow.cpp.o new file mode 100644 index 00000000..be644366 Binary files /dev/null and b/build-linux/CMakeFiles/kassetmanagerqt.dir/src/mainwindow.cpp.o differ diff --git a/build-linux/CMakeFiles/kassetmanagerqt.dir/src/media/tlrender_player.cpp.o b/build-linux/CMakeFiles/kassetmanagerqt.dir/src/media/tlrender_player.cpp.o new file mode 100644 index 00000000..8b846c3e Binary files /dev/null and b/build-linux/CMakeFiles/kassetmanagerqt.dir/src/media/tlrender_player.cpp.o differ diff --git a/build-linux/CMakeFiles/kassetmanagerqt.dir/src/media/tlrender_viewport.cpp.o b/build-linux/CMakeFiles/kassetmanagerqt.dir/src/media/tlrender_viewport.cpp.o new file mode 100644 index 00000000..20148624 Binary files /dev/null and b/build-linux/CMakeFiles/kassetmanagerqt.dir/src/media/tlrender_viewport.cpp.o differ diff --git a/build-linux/CMakeFiles/kassetmanagerqt.dir/src/media/tlrender_widget.cpp.o b/build-linux/CMakeFiles/kassetmanagerqt.dir/src/media/tlrender_widget.cpp.o new file mode 100644 index 00000000..023b770e Binary files /dev/null and b/build-linux/CMakeFiles/kassetmanagerqt.dir/src/media/tlrender_widget.cpp.o differ diff --git a/build-linux/CMakeFiles/kassetmanagerqt.dir/src/media_convert_dialog.cpp.o b/build-linux/CMakeFiles/kassetmanagerqt.dir/src/media_convert_dialog.cpp.o new file mode 100644 index 00000000..52d30f89 Binary files /dev/null and b/build-linux/CMakeFiles/kassetmanagerqt.dir/src/media_convert_dialog.cpp.o differ diff --git a/build-linux/CMakeFiles/kassetmanagerqt.dir/src/media_converter_worker.cpp.o b/build-linux/CMakeFiles/kassetmanagerqt.dir/src/media_converter_worker.cpp.o new file mode 100644 index 00000000..9d43ee90 Binary files /dev/null and b/build-linux/CMakeFiles/kassetmanagerqt.dir/src/media_converter_worker.cpp.o differ diff --git a/build-linux/CMakeFiles/kassetmanagerqt.dir/src/office_preview.cpp.o b/build-linux/CMakeFiles/kassetmanagerqt.dir/src/office_preview.cpp.o new file mode 100644 index 00000000..55e6982e Binary files /dev/null and b/build-linux/CMakeFiles/kassetmanagerqt.dir/src/office_preview.cpp.o differ diff --git a/build-linux/CMakeFiles/kassetmanagerqt.dir/src/oiio_image_loader.cpp.o b/build-linux/CMakeFiles/kassetmanagerqt.dir/src/oiio_image_loader.cpp.o new file mode 100644 index 00000000..abe672b8 Binary files /dev/null and b/build-linux/CMakeFiles/kassetmanagerqt.dir/src/oiio_image_loader.cpp.o differ diff --git a/build-linux/CMakeFiles/kassetmanagerqt.dir/src/preview_overlay.cpp.o b/build-linux/CMakeFiles/kassetmanagerqt.dir/src/preview_overlay.cpp.o new file mode 100644 index 00000000..0a9af2c5 Binary files /dev/null and b/build-linux/CMakeFiles/kassetmanagerqt.dir/src/preview_overlay.cpp.o differ diff --git a/build-linux/CMakeFiles/kassetmanagerqt.dir/src/progress_manager.cpp.o b/build-linux/CMakeFiles/kassetmanagerqt.dir/src/progress_manager.cpp.o new file mode 100644 index 00000000..a89205f0 Binary files /dev/null and b/build-linux/CMakeFiles/kassetmanagerqt.dir/src/progress_manager.cpp.o differ diff --git a/build-linux/CMakeFiles/kassetmanagerqt.dir/src/project_assets_model.cpp.o b/build-linux/CMakeFiles/kassetmanagerqt.dir/src/project_assets_model.cpp.o new file mode 100644 index 00000000..85dd5121 Binary files /dev/null and b/build-linux/CMakeFiles/kassetmanagerqt.dir/src/project_assets_model.cpp.o differ diff --git a/build-linux/CMakeFiles/kassetmanagerqt.dir/src/project_db.cpp.o b/build-linux/CMakeFiles/kassetmanagerqt.dir/src/project_db.cpp.o new file mode 100644 index 00000000..ba79895f Binary files /dev/null and b/build-linux/CMakeFiles/kassetmanagerqt.dir/src/project_db.cpp.o differ diff --git a/build-linux/CMakeFiles/kassetmanagerqt.dir/src/project_folder_watcher.cpp.o b/build-linux/CMakeFiles/kassetmanagerqt.dir/src/project_folder_watcher.cpp.o new file mode 100644 index 00000000..6a47da8d Binary files /dev/null and b/build-linux/CMakeFiles/kassetmanagerqt.dir/src/project_folder_watcher.cpp.o differ diff --git a/build-linux/CMakeFiles/kassetmanagerqt.dir/src/project_folders_model.cpp.o b/build-linux/CMakeFiles/kassetmanagerqt.dir/src/project_folders_model.cpp.o new file mode 100644 index 00000000..fab451c0 Binary files /dev/null and b/build-linux/CMakeFiles/kassetmanagerqt.dir/src/project_folders_model.cpp.o differ diff --git a/build-linux/CMakeFiles/kassetmanagerqt.dir/src/project_import_worker.cpp.o b/build-linux/CMakeFiles/kassetmanagerqt.dir/src/project_import_worker.cpp.o new file mode 100644 index 00000000..c6443d1d Binary files /dev/null and b/build-linux/CMakeFiles/kassetmanagerqt.dir/src/project_import_worker.cpp.o differ diff --git a/build-linux/CMakeFiles/kassetmanagerqt.dir/src/project_item_delegate.cpp.o b/build-linux/CMakeFiles/kassetmanagerqt.dir/src/project_item_delegate.cpp.o new file mode 100644 index 00000000..1b4f0cad Binary files /dev/null and b/build-linux/CMakeFiles/kassetmanagerqt.dir/src/project_item_delegate.cpp.o differ diff --git a/build-linux/CMakeFiles/kassetmanagerqt.dir/src/project_manager_watcher.cpp.o b/build-linux/CMakeFiles/kassetmanagerqt.dir/src/project_manager_watcher.cpp.o new file mode 100644 index 00000000..2e0c4419 Binary files /dev/null and b/build-linux/CMakeFiles/kassetmanagerqt.dir/src/project_manager_watcher.cpp.o differ diff --git a/build-linux/CMakeFiles/kassetmanagerqt.dir/src/project_sequence_grouping_proxy_model.cpp.o b/build-linux/CMakeFiles/kassetmanagerqt.dir/src/project_sequence_grouping_proxy_model.cpp.o new file mode 100644 index 00000000..2216717b Binary files /dev/null and b/build-linux/CMakeFiles/kassetmanagerqt.dir/src/project_sequence_grouping_proxy_model.cpp.o differ diff --git a/build-linux/CMakeFiles/kassetmanagerqt.dir/src/project_version_detector.cpp.o b/build-linux/CMakeFiles/kassetmanagerqt.dir/src/project_version_detector.cpp.o new file mode 100644 index 00000000..1651b0f3 Binary files /dev/null and b/build-linux/CMakeFiles/kassetmanagerqt.dir/src/project_version_detector.cpp.o differ diff --git a/build-linux/CMakeFiles/kassetmanagerqt.dir/src/projects_model.cpp.o b/build-linux/CMakeFiles/kassetmanagerqt.dir/src/projects_model.cpp.o new file mode 100644 index 00000000..ce967a73 Binary files /dev/null and b/build-linux/CMakeFiles/kassetmanagerqt.dir/src/projects_model.cpp.o differ diff --git a/build-linux/CMakeFiles/kassetmanagerqt.dir/src/scrub_frame_registry.cpp.o b/build-linux/CMakeFiles/kassetmanagerqt.dir/src/scrub_frame_registry.cpp.o new file mode 100644 index 00000000..bef16257 Binary files /dev/null and b/build-linux/CMakeFiles/kassetmanagerqt.dir/src/scrub_frame_registry.cpp.o differ diff --git a/build-linux/CMakeFiles/kassetmanagerqt.dir/src/sequence_detector.cpp.o b/build-linux/CMakeFiles/kassetmanagerqt.dir/src/sequence_detector.cpp.o new file mode 100644 index 00000000..dfeb5645 Binary files /dev/null and b/build-linux/CMakeFiles/kassetmanagerqt.dir/src/sequence_detector.cpp.o differ diff --git a/build-linux/CMakeFiles/kassetmanagerqt.dir/src/sequence_grouping_proxy_model.cpp.o b/build-linux/CMakeFiles/kassetmanagerqt.dir/src/sequence_grouping_proxy_model.cpp.o new file mode 100644 index 00000000..ba6af556 Binary files /dev/null and b/build-linux/CMakeFiles/kassetmanagerqt.dir/src/sequence_grouping_proxy_model.cpp.o differ diff --git a/build-linux/CMakeFiles/kassetmanagerqt.dir/src/settings_dialog.cpp.o b/build-linux/CMakeFiles/kassetmanagerqt.dir/src/settings_dialog.cpp.o new file mode 100644 index 00000000..87e5cc04 Binary files /dev/null and b/build-linux/CMakeFiles/kassetmanagerqt.dir/src/settings_dialog.cpp.o differ diff --git a/build-linux/CMakeFiles/kassetmanagerqt.dir/src/star_rating_widget.cpp.o b/build-linux/CMakeFiles/kassetmanagerqt.dir/src/star_rating_widget.cpp.o new file mode 100644 index 00000000..2d5e9ab7 Binary files /dev/null and b/build-linux/CMakeFiles/kassetmanagerqt.dir/src/star_rating_widget.cpp.o differ diff --git a/build-linux/CMakeFiles/kassetmanagerqt.dir/src/theme_manager.cpp.o b/build-linux/CMakeFiles/kassetmanagerqt.dir/src/theme_manager.cpp.o new file mode 100644 index 00000000..d7e554c4 Binary files /dev/null and b/build-linux/CMakeFiles/kassetmanagerqt.dir/src/theme_manager.cpp.o differ diff --git a/build-linux/CMakeFiles/kassetmanagerqt.dir/src/thumbnail_cache_manager.cpp.o b/build-linux/CMakeFiles/kassetmanagerqt.dir/src/thumbnail_cache_manager.cpp.o new file mode 100644 index 00000000..4acf87d2 Binary files /dev/null and b/build-linux/CMakeFiles/kassetmanagerqt.dir/src/thumbnail_cache_manager.cpp.o differ diff --git a/build-linux/CMakeFiles/kassetmanagerqt.dir/src/thumbnail_generator_dialog.cpp.o b/build-linux/CMakeFiles/kassetmanagerqt.dir/src/thumbnail_generator_dialog.cpp.o new file mode 100644 index 00000000..6fbeb587 Binary files /dev/null and b/build-linux/CMakeFiles/kassetmanagerqt.dir/src/thumbnail_generator_dialog.cpp.o differ diff --git a/build-linux/CMakeFiles/kassetmanagerqt.dir/src/thumbnail_generator_worker.cpp.o b/build-linux/CMakeFiles/kassetmanagerqt.dir/src/thumbnail_generator_worker.cpp.o new file mode 100644 index 00000000..6a0e7f28 Binary files /dev/null and b/build-linux/CMakeFiles/kassetmanagerqt.dir/src/thumbnail_generator_worker.cpp.o differ diff --git a/build-linux/CMakeFiles/kassetmanagerqt.dir/src/user_guide_dialog.cpp.o b/build-linux/CMakeFiles/kassetmanagerqt.dir/src/user_guide_dialog.cpp.o new file mode 100644 index 00000000..2be0b65f Binary files /dev/null and b/build-linux/CMakeFiles/kassetmanagerqt.dir/src/user_guide_dialog.cpp.o differ diff --git a/build-linux/CMakeFiles/kassetmanagerqt.dir/src/utils.cpp.o b/build-linux/CMakeFiles/kassetmanagerqt.dir/src/utils.cpp.o new file mode 100644 index 00000000..66b69240 Binary files /dev/null and b/build-linux/CMakeFiles/kassetmanagerqt.dir/src/utils.cpp.o differ diff --git a/build-linux/CMakeFiles/kassetmanagerqt.dir/src/video_metadata.cpp.o b/build-linux/CMakeFiles/kassetmanagerqt.dir/src/video_metadata.cpp.o new file mode 100644 index 00000000..a0c13976 Binary files /dev/null and b/build-linux/CMakeFiles/kassetmanagerqt.dir/src/video_metadata.cpp.o differ diff --git a/build-linux/CMakeFiles/kassetmanagerqt.dir/src/virtual_drag.cpp.o b/build-linux/CMakeFiles/kassetmanagerqt.dir/src/virtual_drag.cpp.o new file mode 100644 index 00000000..9911e248 Binary files /dev/null and b/build-linux/CMakeFiles/kassetmanagerqt.dir/src/virtual_drag.cpp.o differ diff --git a/build-linux/CMakeFiles/kassetmanagerqt.dir/src/virtual_folders.cpp.o b/build-linux/CMakeFiles/kassetmanagerqt.dir/src/virtual_folders.cpp.o new file mode 100644 index 00000000..45f33936 Binary files /dev/null and b/build-linux/CMakeFiles/kassetmanagerqt.dir/src/virtual_folders.cpp.o differ diff --git a/build-linux/CMakeFiles/kassetmanagerqt_autogen.dir/AutogenInfo.json b/build-linux/CMakeFiles/kassetmanagerqt_autogen.dir/AutogenInfo.json new file mode 100644 index 00000000..3b75152f --- /dev/null +++ b/build-linux/CMakeFiles/kassetmanagerqt_autogen.dir/AutogenInfo.json @@ -0,0 +1,2326 @@ +{ + "BUILD_DIR" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/kassetmanagerqt_autogen", + "CMAKE_BINARY_DIR" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux", + "CMAKE_CURRENT_BINARY_DIR" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux", + "CMAKE_CURRENT_SOURCE_DIR" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6", + "CMAKE_EXECUTABLE" : "/usr/bin/cmake", + "CMAKE_LIST_FILES" : + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/CMakeLists.txt", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/CMakeFiles/3.31.11/CMakeSystem.cmake", + "/usr/share/cmake/Modules/CMakeSystemSpecificInitialize.cmake", + "/usr/share/cmake/Modules/Platform/Linux-Initialize.cmake", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/CMakeFiles/3.31.11/CMakeCXXCompiler.cmake", + "/usr/share/cmake/Modules/CMakeSystemSpecificInformation.cmake", + "/usr/share/cmake/Modules/CMakeGenericSystem.cmake", + "/usr/share/cmake/Modules/CMakeInitializeConfigs.cmake", + "/usr/share/cmake/Modules/Platform/Linux.cmake", + "/usr/share/cmake/Modules/Platform/UnixPaths.cmake", + "/usr/share/cmake/Modules/CMakeCXXInformation.cmake", + "/usr/share/cmake/Modules/CMakeLanguageInformation.cmake", + "/usr/share/cmake/Modules/Compiler/GNU-CXX.cmake", + "/usr/share/cmake/Modules/Compiler/GNU.cmake", + "/usr/share/cmake/Modules/Compiler/CMakeCommonCompilerMacros.cmake", + "/usr/share/cmake/Modules/Platform/Linux-GNU-CXX.cmake", + "/usr/share/cmake/Modules/Platform/Linux-GNU.cmake", + "/usr/share/cmake/Modules/CMakeCommonLanguageInclude.cmake", + "/usr/share/cmake/Modules/Internal/CMakeCXXLinkerInformation.cmake", + "/usr/share/cmake/Modules/Internal/CMakeCommonLinkerInformation.cmake", + "/usr/share/cmake/Modules/Linker/GNU-CXX.cmake", + "/usr/share/cmake/Modules/Linker/GNU.cmake", + "/usr/share/cmake/Modules/Platform/Linker/Linux-GNU-CXX.cmake", + "/usr/share/cmake/Modules/Platform/Linker/Linux-GNU.cmake", + "/usr/share/cmake/Modules/Platform/Linker/GNU.cmake", + "/usr/lib64/cmake/Qt6/Qt6ConfigVersion.cmake", + "/usr/lib64/cmake/Qt6/Qt6ConfigVersionImpl.cmake", + "/usr/lib64/cmake/Qt6/Qt6Config.cmake", + "/usr/lib64/cmake/Qt6/QtPublicCMakeEarlyPolicyHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicCMakeHelpers.cmake", + "/usr/lib64/cmake/Qt6/Qt6ConfigExtras.cmake", + "/usr/lib64/cmake/Qt6/QtPublicCMakeVersionHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtInstallPaths.cmake", + "/usr/lib64/cmake/Qt6/Qt6Targets.cmake", + "/usr/lib64/cmake/Qt6/Qt6VersionlessAliasTargets.cmake", + "/usr/lib64/cmake/Qt6/QtFeature.cmake", + "/usr/share/cmake/Modules/CheckCXXCompilerFlag.cmake", + "/usr/share/cmake/Modules/Internal/CheckCompilerFlag.cmake", + "/usr/share/cmake/Modules/Internal/CheckFlagCommonConfig.cmake", + "/usr/share/cmake/Modules/Internal/CheckSourceCompiles.cmake", + "/usr/share/cmake/Modules/CMakeCheckCompilerFlagCommonPatterns.cmake", + "/usr/share/cmake/Modules/CheckCXXSourceCompiles.cmake", + "/usr/share/cmake/Modules/Internal/CheckSourceCompiles.cmake", + "/usr/lib64/cmake/Qt6/QtFeatureCommon.cmake", + "/usr/lib64/cmake/Qt6/QtPublicAndroidHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicAppleHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicCMakeHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicCMakeVersionHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicDependencyHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicExternalProjectHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicFinalizerHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicFindPackageHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicGitHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicPluginHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicPluginHelpers_v2.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomAttributionHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomBuildToolHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomCommonGenerationHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomCpeHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomCycloneDXHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomDocumentNamespaceHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomDepHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomExternalReferenceHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomFileHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomGenerationHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomGenerationCycloneDXHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomLicenseHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomOpsHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomPurlHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomPythonHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomQtEntityHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomRelationshipHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomSystemDepHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicTargetHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicTestHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicToolHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicWalkLibsHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicWindowsHelpers.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6/Qt6Dependencies.cmake", + "/usr/share/cmake/Modules/FindThreads.cmake", + "/usr/share/cmake/Modules/CheckLibraryExists.cmake", + "/usr/share/cmake/Modules/CheckIncludeFileCXX.cmake", + "/usr/share/cmake/Modules/CheckCXXSourceCompiles.cmake", + "/usr/share/cmake/Modules/FindPackageHandleStandardArgs.cmake", + "/usr/share/cmake/Modules/FindPackageMessage.cmake", + "/usr/lib64/cmake/Qt6/Qt6ConfigVersion.cmake", + "/usr/lib64/cmake/Qt6/Qt6ConfigVersionImpl.cmake", + "/usr/lib64/cmake/Qt6/Qt6Config.cmake", + "/usr/lib64/cmake/Qt6/QtPublicCMakeEarlyPolicyHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicCMakeHelpers.cmake", + "/usr/lib64/cmake/Qt6/Qt6ConfigExtras.cmake", + "/usr/lib64/cmake/Qt6/QtPublicCMakeVersionHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtInstallPaths.cmake", + "/usr/lib64/cmake/Qt6/Qt6Targets.cmake", + "/usr/lib64/cmake/Qt6/Qt6VersionlessAliasTargets.cmake", + "/usr/lib64/cmake/Qt6/QtFeature.cmake", + "/usr/share/cmake/Modules/CheckCXXCompilerFlag.cmake", + "/usr/lib64/cmake/Qt6/QtFeatureCommon.cmake", + "/usr/lib64/cmake/Qt6/QtPublicAndroidHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicAppleHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicCMakeHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicCMakeVersionHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicDependencyHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicExternalProjectHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicFinalizerHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicFindPackageHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicGitHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicPluginHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicPluginHelpers_v2.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomAttributionHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomBuildToolHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomCommonGenerationHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomCpeHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomCycloneDXHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomDocumentNamespaceHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomDepHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomExternalReferenceHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomFileHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomGenerationHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomGenerationCycloneDXHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomLicenseHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomOpsHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomPurlHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomPythonHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomQtEntityHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomRelationshipHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomSystemDepHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicTargetHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicTestHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicToolHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicWalkLibsHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicWindowsHelpers.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6/Qt6Dependencies.cmake", + "/usr/lib64/cmake/Qt6Widgets/Qt6WidgetsConfigVersion.cmake", + "/usr/lib64/cmake/Qt6Widgets/Qt6WidgetsConfigVersionImpl.cmake", + "/usr/lib64/cmake/Qt6Widgets/Qt6WidgetsConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6Widgets/Qt6WidgetsDependencies.cmake", + "/usr/lib64/cmake/Qt6WidgetsTools/Qt6WidgetsToolsConfigVersion.cmake", + "/usr/lib64/cmake/Qt6WidgetsTools/Qt6WidgetsToolsConfigVersionImpl.cmake", + "/usr/lib64/cmake/Qt6WidgetsTools/Qt6WidgetsToolsConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6WidgetsTools/Qt6WidgetsToolsDependencies.cmake", + "/usr/lib64/cmake/Qt6CoreTools/Qt6CoreToolsConfigVersion.cmake", + "/usr/lib64/cmake/Qt6CoreTools/Qt6CoreToolsConfigVersionImpl.cmake", + "/usr/lib64/cmake/Qt6CoreTools/Qt6CoreToolsConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6CoreTools/Qt6CoreToolsDependencies.cmake", + "/usr/lib64/cmake/Qt6CoreTools/Qt6CoreToolsTargets.cmake", + "/usr/lib64/cmake/Qt6CoreTools/Qt6CoreToolsTargets-relwithdebinfo.cmake", + "/usr/lib64/cmake/Qt6CoreTools/Qt6CoreToolsAdditionalTargetInfo.cmake", + "/usr/lib64/cmake/Qt6CoreTools/Qt6CoreToolsVersionlessTargets.cmake", + "/usr/lib64/cmake/Qt6GuiTools/Qt6GuiToolsConfigVersion.cmake", + "/usr/lib64/cmake/Qt6GuiTools/Qt6GuiToolsConfigVersionImpl.cmake", + "/usr/lib64/cmake/Qt6GuiTools/Qt6GuiToolsConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6GuiTools/Qt6GuiToolsDependencies.cmake", + "/usr/lib64/cmake/Qt6CoreTools/Qt6CoreToolsConfigVersion.cmake", + "/usr/lib64/cmake/Qt6CoreTools/Qt6CoreToolsConfigVersionImpl.cmake", + "/usr/lib64/cmake/Qt6CoreTools/Qt6CoreToolsConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6CoreTools/Qt6CoreToolsDependencies.cmake", + "/usr/lib64/cmake/Qt6CoreTools/Qt6CoreToolsTargets.cmake", + "/usr/lib64/cmake/Qt6CoreTools/Qt6CoreToolsAdditionalTargetInfo.cmake", + "/usr/lib64/cmake/Qt6CoreTools/Qt6CoreToolsVersionlessTargets.cmake", + "/usr/lib64/cmake/Qt6GuiTools/Qt6GuiToolsTargets.cmake", + "/usr/lib64/cmake/Qt6GuiTools/Qt6GuiToolsTargets-relwithdebinfo.cmake", + "/usr/lib64/cmake/Qt6GuiTools/Qt6GuiToolsAdditionalTargetInfo.cmake", + "/usr/lib64/cmake/Qt6GuiTools/Qt6GuiToolsVersionlessTargets.cmake", + "/usr/lib64/cmake/Qt6WidgetsTools/Qt6WidgetsToolsTargets.cmake", + "/usr/lib64/cmake/Qt6WidgetsTools/Qt6WidgetsToolsTargets-relwithdebinfo.cmake", + "/usr/lib64/cmake/Qt6WidgetsTools/Qt6WidgetsToolsAdditionalTargetInfo.cmake", + "/usr/lib64/cmake/Qt6WidgetsTools/Qt6WidgetsToolsVersionlessTargets.cmake", + "/usr/lib64/cmake/Qt6Core/Qt6CoreConfigVersion.cmake", + "/usr/lib64/cmake/Qt6Core/Qt6CoreConfigVersionImpl.cmake", + "/usr/lib64/cmake/Qt6Core/Qt6CoreConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6Core/Qt6CoreDependencies.cmake", + "/usr/lib64/cmake/Qt6/FindWrapAtomic.cmake", + "/usr/share/cmake/Modules/CheckCXXSourceCompiles.cmake", + "/usr/share/cmake/Modules/FindPackageHandleStandardArgs.cmake", + "/usr/share/cmake/Modules/FindPackageMessage.cmake", + "/usr/lib64/cmake/Qt6CoreTools/Qt6CoreToolsConfigVersion.cmake", + "/usr/lib64/cmake/Qt6CoreTools/Qt6CoreToolsConfigVersionImpl.cmake", + "/usr/lib64/cmake/Qt6CoreTools/Qt6CoreToolsConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6CoreTools/Qt6CoreToolsDependencies.cmake", + "/usr/lib64/cmake/Qt6CoreTools/Qt6CoreToolsTargets.cmake", + "/usr/lib64/cmake/Qt6CoreTools/Qt6CoreToolsAdditionalTargetInfo.cmake", + "/usr/lib64/cmake/Qt6CoreTools/Qt6CoreToolsVersionlessTargets.cmake", + "/usr/lib64/cmake/Qt6Core/Qt6CoreTargets.cmake", + "/usr/lib64/cmake/Qt6Core/Qt6CoreTargets-relwithdebinfo.cmake", + "/usr/lib64/cmake/Qt6Core/Qt6CoreAdditionalTargetInfo.cmake", + "/usr/lib64/cmake/Qt6Core/Qt6CoreMacros.cmake", + "/usr/lib64/cmake/Qt6Core/Qt6CoreConfigExtras.cmake", + "/usr/share/cmake/Modules/GNUInstallDirs.cmake", + "/usr/lib64/cmake/Qt6Core/Qt6CoreVersionlessAliasTargets.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6GuiConfigVersion.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6GuiConfigVersionImpl.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6GuiConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6GuiDependencies.cmake", + "/usr/lib64/cmake/Qt6/FindWrapOpenGL.cmake", + "/usr/share/cmake/Modules/FindOpenGL.cmake", + "/usr/share/cmake/Modules/FindPackageHandleStandardArgs.cmake", + "/usr/share/cmake/Modules/FindPackageMessage.cmake", + "/usr/share/cmake/Modules/FindPackageHandleStandardArgs.cmake", + "/usr/share/cmake/Modules/FindPackageMessage.cmake", + "/usr/lib64/cmake/Qt6/FindWrapVulkanHeaders.cmake", + "/usr/share/cmake/Modules/FindVulkan.cmake", + "/usr/share/cmake/Modules/FindPackageHandleStandardArgs.cmake", + "/usr/share/cmake/Modules/FindPackageMessage.cmake", + "/usr/share/cmake/Modules/FindPackageHandleStandardArgs.cmake", + "/usr/share/cmake/Modules/FindPackageMessage.cmake", + "/usr/lib64/cmake/Qt6GuiTools/Qt6GuiToolsConfigVersion.cmake", + "/usr/lib64/cmake/Qt6GuiTools/Qt6GuiToolsConfigVersionImpl.cmake", + "/usr/lib64/cmake/Qt6GuiTools/Qt6GuiToolsConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6GuiTools/Qt6GuiToolsDependencies.cmake", + "/usr/lib64/cmake/Qt6CoreTools/Qt6CoreToolsConfigVersion.cmake", + "/usr/lib64/cmake/Qt6CoreTools/Qt6CoreToolsConfigVersionImpl.cmake", + "/usr/lib64/cmake/Qt6CoreTools/Qt6CoreToolsConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6CoreTools/Qt6CoreToolsDependencies.cmake", + "/usr/lib64/cmake/Qt6CoreTools/Qt6CoreToolsTargets.cmake", + "/usr/lib64/cmake/Qt6CoreTools/Qt6CoreToolsAdditionalTargetInfo.cmake", + "/usr/lib64/cmake/Qt6CoreTools/Qt6CoreToolsVersionlessTargets.cmake", + "/usr/lib64/cmake/Qt6GuiTools/Qt6GuiToolsTargets.cmake", + "/usr/lib64/cmake/Qt6GuiTools/Qt6GuiToolsAdditionalTargetInfo.cmake", + "/usr/lib64/cmake/Qt6GuiTools/Qt6GuiToolsVersionlessTargets.cmake", + "/usr/lib64/cmake/Qt6DBus/Qt6DBusConfigVersion.cmake", + "/usr/lib64/cmake/Qt6DBus/Qt6DBusConfigVersionImpl.cmake", + "/usr/lib64/cmake/Qt6DBus/Qt6DBusConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6DBus/Qt6DBusDependencies.cmake", + "/usr/lib64/cmake/Qt6DBusTools/Qt6DBusToolsConfigVersion.cmake", + "/usr/lib64/cmake/Qt6DBusTools/Qt6DBusToolsConfigVersionImpl.cmake", + "/usr/lib64/cmake/Qt6DBusTools/Qt6DBusToolsConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6DBusTools/Qt6DBusToolsDependencies.cmake", + "/usr/lib64/cmake/Qt6CoreTools/Qt6CoreToolsConfigVersion.cmake", + "/usr/lib64/cmake/Qt6CoreTools/Qt6CoreToolsConfigVersionImpl.cmake", + "/usr/lib64/cmake/Qt6CoreTools/Qt6CoreToolsConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6CoreTools/Qt6CoreToolsDependencies.cmake", + "/usr/lib64/cmake/Qt6CoreTools/Qt6CoreToolsTargets.cmake", + "/usr/lib64/cmake/Qt6CoreTools/Qt6CoreToolsAdditionalTargetInfo.cmake", + "/usr/lib64/cmake/Qt6CoreTools/Qt6CoreToolsVersionlessTargets.cmake", + "/usr/lib64/cmake/Qt6DBusTools/Qt6DBusToolsTargets.cmake", + "/usr/lib64/cmake/Qt6DBusTools/Qt6DBusToolsTargets-relwithdebinfo.cmake", + "/usr/lib64/cmake/Qt6DBusTools/Qt6DBusToolsAdditionalTargetInfo.cmake", + "/usr/lib64/cmake/Qt6DBusTools/Qt6DBusToolsVersionlessTargets.cmake", + "/usr/lib64/cmake/Qt6DBus/Qt6DBusTargets.cmake", + "/usr/lib64/cmake/Qt6DBus/Qt6DBusTargets-relwithdebinfo.cmake", + "/usr/lib64/cmake/Qt6DBus/Qt6DBusAdditionalTargetInfo.cmake", + "/usr/lib64/cmake/Qt6DBus/Qt6DBusMacros.cmake", + "/usr/share/cmake/Modules/MacroAddFileDependencies.cmake", + "/usr/lib64/cmake/Qt6DBus/Qt6DBusVersionlessAliasTargets.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6GuiTargets.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6GuiTargets-relwithdebinfo.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6GuiAdditionalTargetInfo.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6GuiPlugins.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6DmaBufServerBufferPluginConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6DmaBufServerBufferPluginTargets.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6DmaBufServerBufferPluginTargets-relwithdebinfo.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6DmaBufServerBufferPluginAdditionalTargetInfo.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6DrmEglServerBufferPluginConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6DrmEglServerBufferPluginTargets.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6DrmEglServerBufferPluginTargets-relwithdebinfo.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6DrmEglServerBufferPluginAdditionalTargetInfo.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QComposePlatformInputContextPluginConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QComposePlatformInputContextPluginTargets.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QComposePlatformInputContextPluginTargets-relwithdebinfo.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QComposePlatformInputContextPluginAdditionalTargetInfo.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QEglFSEmulatorIntegrationPluginConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QEglFSEmulatorIntegrationPluginTargets.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QEglFSEmulatorIntegrationPluginTargets-relwithdebinfo.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QEglFSEmulatorIntegrationPluginAdditionalTargetInfo.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QEglFSIntegrationPluginConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QEglFSIntegrationPluginTargets.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QEglFSIntegrationPluginTargets-relwithdebinfo.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QEglFSIntegrationPluginAdditionalTargetInfo.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QEglFSKmsEglDeviceIntegrationPluginConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QEglFSKmsEglDeviceIntegrationPluginTargets.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QEglFSKmsEglDeviceIntegrationPluginTargets-relwithdebinfo.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QEglFSKmsEglDeviceIntegrationPluginAdditionalTargetInfo.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QEglFSKmsGbmIntegrationPluginConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QEglFSKmsGbmIntegrationPluginTargets.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QEglFSKmsGbmIntegrationPluginTargets-relwithdebinfo.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QEglFSKmsGbmIntegrationPluginAdditionalTargetInfo.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QEglFSX11IntegrationPluginConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QEglFSX11IntegrationPluginTargets.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QEglFSX11IntegrationPluginTargets-relwithdebinfo.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QEglFSX11IntegrationPluginAdditionalTargetInfo.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QEvdevKeyboardPluginConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QEvdevKeyboardPluginTargets.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QEvdevKeyboardPluginTargets-relwithdebinfo.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QEvdevKeyboardPluginAdditionalTargetInfo.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QEvdevMousePluginConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QEvdevMousePluginTargets.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QEvdevMousePluginTargets-relwithdebinfo.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QEvdevMousePluginAdditionalTargetInfo.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QEvdevTabletPluginConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QEvdevTabletPluginTargets.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QEvdevTabletPluginTargets-relwithdebinfo.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QEvdevTabletPluginAdditionalTargetInfo.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QEvdevTouchScreenPluginConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QEvdevTouchScreenPluginTargets.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QEvdevTouchScreenPluginTargets-relwithdebinfo.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QEvdevTouchScreenPluginAdditionalTargetInfo.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QGifPluginConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QGifPluginTargets.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QGifPluginTargets-relwithdebinfo.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QGifPluginAdditionalTargetInfo.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QGtk3ThemePluginConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QGtk3ThemePluginTargets.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QGtk3ThemePluginTargets-relwithdebinfo.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QGtk3ThemePluginAdditionalTargetInfo.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QICNSPluginConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QICNSPluginTargets.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QICNSPluginTargets-relwithdebinfo.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QICNSPluginAdditionalTargetInfo.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QICOPluginConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QICOPluginTargets.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QICOPluginTargets-relwithdebinfo.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QICOPluginAdditionalTargetInfo.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QIbusPlatformInputContextPluginConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QIbusPlatformInputContextPluginTargets.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QIbusPlatformInputContextPluginTargets-relwithdebinfo.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QIbusPlatformInputContextPluginAdditionalTargetInfo.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QJp2PluginConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QJp2PluginTargets.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QJp2PluginTargets-relwithdebinfo.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QJp2PluginAdditionalTargetInfo.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QJpegPluginConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QJpegPluginTargets.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QJpegPluginTargets-relwithdebinfo.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QJpegPluginAdditionalTargetInfo.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QLibInputPluginConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QLibInputPluginTargets.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QLibInputPluginTargets-relwithdebinfo.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QLibInputPluginAdditionalTargetInfo.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QLinuxFbIntegrationPluginConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QLinuxFbIntegrationPluginTargets.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QLinuxFbIntegrationPluginTargets-relwithdebinfo.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QLinuxFbIntegrationPluginAdditionalTargetInfo.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QMinimalEglIntegrationPluginConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QMinimalEglIntegrationPluginTargets.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QMinimalEglIntegrationPluginTargets-relwithdebinfo.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QMinimalEglIntegrationPluginAdditionalTargetInfo.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QMinimalIntegrationPluginConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QMinimalIntegrationPluginTargets.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QMinimalIntegrationPluginTargets-relwithdebinfo.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QMinimalIntegrationPluginAdditionalTargetInfo.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QMngPluginConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QMngPluginTargets.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QMngPluginTargets-relwithdebinfo.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QMngPluginAdditionalTargetInfo.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QOffscreenIntegrationPluginConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QOffscreenIntegrationPluginTargets.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QOffscreenIntegrationPluginTargets-relwithdebinfo.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QOffscreenIntegrationPluginAdditionalTargetInfo.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QPdfPluginConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QPdfPluginTargets.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QPdfPluginTargets-relwithdebinfo.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QPdfPluginAdditionalTargetInfo.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QSvgIconPluginConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QSvgIconPluginTargets.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QSvgIconPluginTargets-relwithdebinfo.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QSvgIconPluginAdditionalTargetInfo.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QSvgPluginConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QSvgPluginTargets.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QSvgPluginTargets-relwithdebinfo.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QSvgPluginAdditionalTargetInfo.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QTgaPluginConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QTgaPluginTargets.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QTgaPluginTargets-relwithdebinfo.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QTgaPluginAdditionalTargetInfo.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QTiffPluginConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QTiffPluginTargets.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QTiffPluginTargets-relwithdebinfo.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QTiffPluginAdditionalTargetInfo.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QTsLibPluginConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QTsLibPluginTargets.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QTsLibPluginTargets-relwithdebinfo.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QTsLibPluginAdditionalTargetInfo.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QTuioTouchPluginConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QTuioTouchPluginTargets.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QTuioTouchPluginTargets-relwithdebinfo.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QTuioTouchPluginAdditionalTargetInfo.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QVkKhrDisplayIntegrationPluginConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QVkKhrDisplayIntegrationPluginTargets.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QVkKhrDisplayIntegrationPluginTargets-relwithdebinfo.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QVkKhrDisplayIntegrationPluginAdditionalTargetInfo.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QVncIntegrationPluginConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QVncIntegrationPluginTargets.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QVncIntegrationPluginTargets-relwithdebinfo.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QVncIntegrationPluginAdditionalTargetInfo.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QWaylandBradientDecorationPluginConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QWaylandBradientDecorationPluginTargets.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QWaylandBradientDecorationPluginTargets-relwithdebinfo.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QWaylandBradientDecorationPluginAdditionalTargetInfo.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QWaylandEglClientBufferPluginConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QWaylandEglClientBufferPluginTargets.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QWaylandEglClientBufferPluginTargets-relwithdebinfo.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QWaylandEglClientBufferPluginAdditionalTargetInfo.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QWaylandFullScreenShellV1IntegrationPluginConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QWaylandFullScreenShellV1IntegrationPluginTargets.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QWaylandFullScreenShellV1IntegrationPluginTargets-relwithdebinfo.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QWaylandFullScreenShellV1IntegrationPluginAdditionalTargetInfo.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QWaylandIntegrationPluginConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QWaylandIntegrationPluginTargets.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QWaylandIntegrationPluginTargets-relwithdebinfo.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QWaylandIntegrationPluginAdditionalTargetInfo.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QWaylandIviShellIntegrationPluginConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QWaylandIviShellIntegrationPluginTargets.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QWaylandIviShellIntegrationPluginTargets-relwithdebinfo.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QWaylandIviShellIntegrationPluginAdditionalTargetInfo.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QWaylandQtShellIntegrationPluginConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QWaylandQtShellIntegrationPluginTargets.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QWaylandQtShellIntegrationPluginTargets-relwithdebinfo.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QWaylandQtShellIntegrationPluginAdditionalTargetInfo.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QWaylandWlShellIntegrationPluginConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QWaylandWlShellIntegrationPluginTargets.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QWaylandWlShellIntegrationPluginTargets-relwithdebinfo.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QWaylandWlShellIntegrationPluginAdditionalTargetInfo.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QWaylandXdgShellIntegrationPluginConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QWaylandXdgShellIntegrationPluginTargets.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QWaylandXdgShellIntegrationPluginTargets-relwithdebinfo.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QWaylandXdgShellIntegrationPluginAdditionalTargetInfo.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QWbmpPluginConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QWbmpPluginTargets.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QWbmpPluginTargets-relwithdebinfo.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QWbmpPluginAdditionalTargetInfo.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QWebpPluginConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QWebpPluginTargets.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QWebpPluginTargets-relwithdebinfo.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QWebpPluginAdditionalTargetInfo.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QXcbEglIntegrationPluginConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QXcbEglIntegrationPluginTargets.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QXcbEglIntegrationPluginTargets-relwithdebinfo.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QXcbEglIntegrationPluginAdditionalTargetInfo.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QXcbGlxIntegrationPluginConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QXcbGlxIntegrationPluginTargets.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QXcbGlxIntegrationPluginTargets-relwithdebinfo.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QXcbGlxIntegrationPluginAdditionalTargetInfo.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QXcbIntegrationPluginConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QXcbIntegrationPluginTargets.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QXcbIntegrationPluginTargets-relwithdebinfo.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QXcbIntegrationPluginAdditionalTargetInfo.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QXdgDesktopPortalThemePluginConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QXdgDesktopPortalThemePluginTargets.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QXdgDesktopPortalThemePluginTargets-relwithdebinfo.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6QXdgDesktopPortalThemePluginAdditionalTargetInfo.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6ShmServerBufferPluginConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6ShmServerBufferPluginTargets.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6ShmServerBufferPluginTargets-relwithdebinfo.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6ShmServerBufferPluginAdditionalTargetInfo.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6VulkanServerBufferPluginConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6VulkanServerBufferPluginTargets.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6VulkanServerBufferPluginTargets-relwithdebinfo.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6VulkanServerBufferPluginAdditionalTargetInfo.cmake", + "/usr/lib64/cmake/Qt6Gui/Qt6GuiVersionlessAliasTargets.cmake", + "/usr/lib64/cmake/Qt6Widgets/Qt6WidgetsTargets.cmake", + "/usr/lib64/cmake/Qt6Widgets/Qt6WidgetsTargets-relwithdebinfo.cmake", + "/usr/lib64/cmake/Qt6Widgets/Qt6WidgetsAdditionalTargetInfo.cmake", + "/usr/lib64/cmake/Qt6Widgets/Qt6WidgetsMacros.cmake", + "/usr/lib64/cmake/Qt6Widgets/Qt6WidgetsPlugins.cmake", + "/usr/lib64/cmake/Qt6Widgets/Qt6WidgetsVersionlessAliasTargets.cmake", + "/usr/lib64/cmake/Qt6Multimedia/Qt6MultimediaConfigVersion.cmake", + "/usr/lib64/cmake/Qt6Multimedia/Qt6MultimediaConfigVersionImpl.cmake", + "/usr/lib64/cmake/Qt6Multimedia/Qt6MultimediaConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6Multimedia/Qt6MultimediaDependencies.cmake", + "/usr/lib64/cmake/Qt6Concurrent/Qt6ConcurrentConfigVersion.cmake", + "/usr/lib64/cmake/Qt6Concurrent/Qt6ConcurrentConfigVersionImpl.cmake", + "/usr/lib64/cmake/Qt6Concurrent/Qt6ConcurrentConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6Concurrent/Qt6ConcurrentDependencies.cmake", + "/usr/lib64/cmake/Qt6Concurrent/Qt6ConcurrentTargets.cmake", + "/usr/lib64/cmake/Qt6Concurrent/Qt6ConcurrentTargets-relwithdebinfo.cmake", + "/usr/lib64/cmake/Qt6Concurrent/Qt6ConcurrentAdditionalTargetInfo.cmake", + "/usr/lib64/cmake/Qt6Concurrent/Qt6ConcurrentVersionlessAliasTargets.cmake", + "/usr/lib64/cmake/Qt6Network/Qt6NetworkConfigVersion.cmake", + "/usr/lib64/cmake/Qt6Network/Qt6NetworkConfigVersionImpl.cmake", + "/usr/lib64/cmake/Qt6Network/Qt6NetworkConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6Network/Qt6NetworkDependencies.cmake", + "/usr/lib64/cmake/Qt6Network/Qt6NetworkTargets.cmake", + "/usr/lib64/cmake/Qt6Network/Qt6NetworkTargets-relwithdebinfo.cmake", + "/usr/lib64/cmake/Qt6Network/Qt6NetworkAdditionalTargetInfo.cmake", + "/usr/lib64/cmake/Qt6Network/Qt6NetworkPlugins.cmake", + "/usr/lib64/cmake/Qt6Network/Qt6QGlibNetworkInformationPluginConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6Network/Qt6QGlibNetworkInformationPluginTargets.cmake", + "/usr/lib64/cmake/Qt6Network/Qt6QGlibNetworkInformationPluginTargets-relwithdebinfo.cmake", + "/usr/lib64/cmake/Qt6Network/Qt6QGlibNetworkInformationPluginAdditionalTargetInfo.cmake", + "/usr/lib64/cmake/Qt6Network/Qt6QNetworkManagerNetworkInformationPluginConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6Network/Qt6QNetworkManagerNetworkInformationPluginTargets.cmake", + "/usr/lib64/cmake/Qt6Network/Qt6QNetworkManagerNetworkInformationPluginTargets-relwithdebinfo.cmake", + "/usr/lib64/cmake/Qt6Network/Qt6QNetworkManagerNetworkInformationPluginAdditionalTargetInfo.cmake", + "/usr/lib64/cmake/Qt6Network/Qt6QTlsBackendCertOnlyPluginConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6Network/Qt6QTlsBackendCertOnlyPluginTargets.cmake", + "/usr/lib64/cmake/Qt6Network/Qt6QTlsBackendCertOnlyPluginTargets-relwithdebinfo.cmake", + "/usr/lib64/cmake/Qt6Network/Qt6QTlsBackendCertOnlyPluginAdditionalTargetInfo.cmake", + "/usr/lib64/cmake/Qt6Network/Qt6QTlsBackendOpenSSLPluginConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6Network/Qt6QTlsBackendOpenSSLPluginTargets.cmake", + "/usr/lib64/cmake/Qt6Network/Qt6QTlsBackendOpenSSLPluginTargets-relwithdebinfo.cmake", + "/usr/lib64/cmake/Qt6Network/Qt6QTlsBackendOpenSSLPluginAdditionalTargetInfo.cmake", + "/usr/lib64/cmake/Qt6Network/Qt6NetworkVersionlessAliasTargets.cmake", + "/usr/lib64/cmake/Qt6Multimedia/Qt6MultimediaTargets.cmake", + "/usr/lib64/cmake/Qt6Multimedia/Qt6MultimediaTargets-relwithdebinfo.cmake", + "/usr/lib64/cmake/Qt6Multimedia/Qt6MultimediaAdditionalTargetInfo.cmake", + "/usr/lib64/cmake/Qt6Multimedia/Qt6MultimediaMacros.cmake", + "/usr/lib64/cmake/Qt6Multimedia/Qt6MultimediaPlugins.cmake", + "/usr/lib64/cmake/Qt6Multimedia/Qt6QFFmpegMediaPluginConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6Multimedia/Qt6QFFmpegMediaPluginTargets.cmake", + "/usr/lib64/cmake/Qt6Multimedia/Qt6QFFmpegMediaPluginTargets-relwithdebinfo.cmake", + "/usr/lib64/cmake/Qt6Multimedia/Qt6QFFmpegMediaPluginAdditionalTargetInfo.cmake", + "/usr/lib64/cmake/Qt6Multimedia/Qt6QGstreamerMediaPluginConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6Multimedia/Qt6QGstreamerMediaPluginTargets.cmake", + "/usr/lib64/cmake/Qt6Multimedia/Qt6QGstreamerMediaPluginTargets-relwithdebinfo.cmake", + "/usr/lib64/cmake/Qt6Multimedia/Qt6QGstreamerMediaPluginAdditionalTargetInfo.cmake", + "/usr/lib64/cmake/Qt6Multimedia/Qt6MultimediaVersionlessAliasTargets.cmake", + "/usr/lib64/cmake/Qt6MultimediaWidgets/Qt6MultimediaWidgetsConfigVersion.cmake", + "/usr/lib64/cmake/Qt6MultimediaWidgets/Qt6MultimediaWidgetsConfigVersionImpl.cmake", + "/usr/lib64/cmake/Qt6MultimediaWidgets/Qt6MultimediaWidgetsConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6MultimediaWidgets/Qt6MultimediaWidgetsDependencies.cmake", + "/usr/lib64/cmake/Qt6MultimediaWidgets/Qt6MultimediaWidgetsTargets.cmake", + "/usr/lib64/cmake/Qt6MultimediaWidgets/Qt6MultimediaWidgetsTargets-relwithdebinfo.cmake", + "/usr/lib64/cmake/Qt6MultimediaWidgets/Qt6MultimediaWidgetsAdditionalTargetInfo.cmake", + "/usr/lib64/cmake/Qt6MultimediaWidgets/Qt6MultimediaWidgetsVersionlessAliasTargets.cmake", + "/usr/lib64/cmake/Qt6Sql/Qt6SqlConfigVersion.cmake", + "/usr/lib64/cmake/Qt6Sql/Qt6SqlConfigVersionImpl.cmake", + "/usr/lib64/cmake/Qt6Sql/Qt6SqlConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6Sql/Qt6SqlDependencies.cmake", + "/usr/lib64/cmake/Qt6Sql/Qt6SqlTargets.cmake", + "/usr/lib64/cmake/Qt6Sql/Qt6SqlTargets-relwithdebinfo.cmake", + "/usr/lib64/cmake/Qt6Sql/Qt6SqlAdditionalTargetInfo.cmake", + "/usr/lib64/cmake/Qt6Sql/Qt6SqlPlugins.cmake", + "/usr/lib64/cmake/Qt6Sql/Qt6QIBaseDriverPluginConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6Sql/Qt6QIBaseDriverPluginTargets.cmake", + "/usr/lib64/cmake/Qt6Sql/Qt6QIBaseDriverPluginTargets-relwithdebinfo.cmake", + "/usr/lib64/cmake/Qt6Sql/Qt6QIBaseDriverPluginAdditionalTargetInfo.cmake", + "/usr/lib64/cmake/Qt6Sql/Qt6QMYSQLDriverPluginConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6Sql/Qt6QMYSQLDriverPluginTargets.cmake", + "/usr/lib64/cmake/Qt6Sql/Qt6QMYSQLDriverPluginTargets-relwithdebinfo.cmake", + "/usr/lib64/cmake/Qt6Sql/Qt6QMYSQLDriverPluginAdditionalTargetInfo.cmake", + "/usr/lib64/cmake/Qt6Sql/Qt6QODBCDriverPluginConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6Sql/Qt6QODBCDriverPluginTargets.cmake", + "/usr/lib64/cmake/Qt6Sql/Qt6QODBCDriverPluginTargets-relwithdebinfo.cmake", + "/usr/lib64/cmake/Qt6Sql/Qt6QODBCDriverPluginAdditionalTargetInfo.cmake", + "/usr/lib64/cmake/Qt6Sql/Qt6QPSQLDriverPluginConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6Sql/Qt6QPSQLDriverPluginTargets.cmake", + "/usr/lib64/cmake/Qt6Sql/Qt6QPSQLDriverPluginTargets-relwithdebinfo.cmake", + "/usr/lib64/cmake/Qt6Sql/Qt6QPSQLDriverPluginAdditionalTargetInfo.cmake", + "/usr/lib64/cmake/Qt6Sql/Qt6QSQLiteDriverPluginConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6Sql/Qt6QSQLiteDriverPluginTargets.cmake", + "/usr/lib64/cmake/Qt6Sql/Qt6QSQLiteDriverPluginTargets-relwithdebinfo.cmake", + "/usr/lib64/cmake/Qt6Sql/Qt6QSQLiteDriverPluginAdditionalTargetInfo.cmake", + "/usr/lib64/cmake/Qt6Sql/Qt6SqlVersionlessAliasTargets.cmake", + "/usr/lib64/cmake/Qt6Svg/Qt6SvgConfigVersion.cmake", + "/usr/lib64/cmake/Qt6Svg/Qt6SvgConfigVersionImpl.cmake", + "/usr/lib64/cmake/Qt6Svg/Qt6SvgConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6Svg/Qt6SvgDependencies.cmake", + "/usr/lib64/cmake/Qt6Svg/Qt6SvgTargets.cmake", + "/usr/lib64/cmake/Qt6Svg/Qt6SvgTargets-relwithdebinfo.cmake", + "/usr/lib64/cmake/Qt6Svg/Qt6SvgAdditionalTargetInfo.cmake", + "/usr/lib64/cmake/Qt6Svg/Qt6SvgVersionlessAliasTargets.cmake", + "/usr/lib64/cmake/Qt6SvgWidgets/Qt6SvgWidgetsConfigVersion.cmake", + "/usr/lib64/cmake/Qt6SvgWidgets/Qt6SvgWidgetsConfigVersionImpl.cmake", + "/usr/lib64/cmake/Qt6SvgWidgets/Qt6SvgWidgetsConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6SvgWidgets/Qt6SvgWidgetsDependencies.cmake", + "/usr/lib64/cmake/Qt6SvgWidgets/Qt6SvgWidgetsTargets.cmake", + "/usr/lib64/cmake/Qt6SvgWidgets/Qt6SvgWidgetsTargets-relwithdebinfo.cmake", + "/usr/lib64/cmake/Qt6SvgWidgets/Qt6SvgWidgetsAdditionalTargetInfo.cmake", + "/usr/lib64/cmake/Qt6SvgWidgets/Qt6SvgWidgetsVersionlessAliasTargets.cmake", + "/usr/lib64/cmake/Qt6OpenGLWidgets/Qt6OpenGLWidgetsConfigVersion.cmake", + "/usr/lib64/cmake/Qt6OpenGLWidgets/Qt6OpenGLWidgetsConfigVersionImpl.cmake", + "/usr/lib64/cmake/Qt6OpenGLWidgets/Qt6OpenGLWidgetsConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6OpenGLWidgets/Qt6OpenGLWidgetsDependencies.cmake", + "/usr/lib64/cmake/Qt6OpenGL/Qt6OpenGLConfigVersion.cmake", + "/usr/lib64/cmake/Qt6OpenGL/Qt6OpenGLConfigVersionImpl.cmake", + "/usr/lib64/cmake/Qt6OpenGL/Qt6OpenGLConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6OpenGL/Qt6OpenGLDependencies.cmake", + "/usr/lib64/cmake/Qt6/FindWrapVulkanHeaders.cmake", + "/usr/lib64/cmake/Qt6OpenGL/Qt6OpenGLTargets.cmake", + "/usr/lib64/cmake/Qt6OpenGL/Qt6OpenGLTargets-relwithdebinfo.cmake", + "/usr/lib64/cmake/Qt6OpenGL/Qt6OpenGLAdditionalTargetInfo.cmake", + "/usr/lib64/cmake/Qt6OpenGL/Qt6OpenGLVersionlessAliasTargets.cmake", + "/usr/lib64/cmake/Qt6OpenGLWidgets/Qt6OpenGLWidgetsTargets.cmake", + "/usr/lib64/cmake/Qt6OpenGLWidgets/Qt6OpenGLWidgetsTargets-relwithdebinfo.cmake", + "/usr/lib64/cmake/Qt6OpenGLWidgets/Qt6OpenGLWidgetsAdditionalTargetInfo.cmake", + "/usr/lib64/cmake/Qt6OpenGLWidgets/Qt6OpenGLWidgetsVersionlessAliasTargets.cmake", + "/usr/lib64/cmake/Qt6/Qt6ConfigVersion.cmake", + "/usr/lib64/cmake/Qt6/Qt6ConfigVersionImpl.cmake", + "/usr/lib64/cmake/Qt6/Qt6Config.cmake", + "/usr/lib64/cmake/Qt6/QtPublicCMakeEarlyPolicyHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicCMakeHelpers.cmake", + "/usr/lib64/cmake/Qt6/Qt6ConfigExtras.cmake", + "/usr/lib64/cmake/Qt6/QtPublicCMakeVersionHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtInstallPaths.cmake", + "/usr/lib64/cmake/Qt6/Qt6Targets.cmake", + "/usr/lib64/cmake/Qt6/Qt6VersionlessAliasTargets.cmake", + "/usr/lib64/cmake/Qt6/QtFeature.cmake", + "/usr/share/cmake/Modules/CheckCXXCompilerFlag.cmake", + "/usr/lib64/cmake/Qt6/QtFeatureCommon.cmake", + "/usr/lib64/cmake/Qt6/QtPublicAndroidHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicAppleHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicCMakeHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicCMakeVersionHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicDependencyHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicExternalProjectHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicFinalizerHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicFindPackageHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicGitHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicPluginHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicPluginHelpers_v2.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomAttributionHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomBuildToolHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomCommonGenerationHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomCpeHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomCycloneDXHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomDocumentNamespaceHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomDepHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomExternalReferenceHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomFileHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomGenerationHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomGenerationCycloneDXHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomLicenseHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomOpsHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomPurlHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomPythonHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomQtEntityHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomRelationshipHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomSystemDepHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicTargetHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicTestHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicToolHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicWalkLibsHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicWindowsHelpers.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6/Qt6Dependencies.cmake", + "/usr/lib64/cmake/Qt6Pdf/Qt6PdfConfigVersion.cmake", + "/usr/lib64/cmake/Qt6Pdf/Qt6PdfConfigVersionImpl.cmake", + "/usr/lib64/cmake/Qt6Pdf/Qt6PdfConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6Pdf/Qt6PdfDependencies.cmake", + "/usr/lib64/cmake/Qt6Pdf/Qt6PdfTargets.cmake", + "/usr/lib64/cmake/Qt6Pdf/Qt6PdfTargets-relwithdebinfo.cmake", + "/usr/lib64/cmake/Qt6Pdf/Qt6PdfAdditionalTargetInfo.cmake", + "/usr/lib64/cmake/Qt6Pdf/Qt6PdfVersionlessAliasTargets.cmake", + "/usr/lib64/cmake/Qt6PdfWidgets/Qt6PdfWidgetsConfigVersion.cmake", + "/usr/lib64/cmake/Qt6PdfWidgets/Qt6PdfWidgetsConfigVersionImpl.cmake", + "/usr/lib64/cmake/Qt6PdfWidgets/Qt6PdfWidgetsConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6PdfWidgets/Qt6PdfWidgetsDependencies.cmake", + "/usr/lib64/cmake/Qt6PdfWidgets/Qt6PdfWidgetsTargets.cmake", + "/usr/lib64/cmake/Qt6PdfWidgets/Qt6PdfWidgetsTargets-relwithdebinfo.cmake", + "/usr/lib64/cmake/Qt6PdfWidgets/Qt6PdfWidgetsAdditionalTargetInfo.cmake", + "/usr/lib64/cmake/Qt6PdfWidgets/Qt6PdfWidgetsVersionlessAliasTargets.cmake", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/tlRender/tlRenderConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/Imath/ImathConfigVersion.cmake", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/Imath/ImathConfig.cmake", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/Imath/ImathTargets.cmake", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/Imath/ImathTargets-release.cmake", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/share/cmake/nlohmann_json/nlohmann_jsonConfigVersion.cmake", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/share/cmake/nlohmann_json/nlohmann_jsonConfig.cmake", + "/usr/share/cmake/Modules/FindPackageHandleStandardArgs.cmake", + "/usr/share/cmake/Modules/FindPackageMessage.cmake", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/share/cmake/nlohmann_json/nlohmann_jsonTargets.cmake", + "/usr/share/cmake/Modules/FindZLIB.cmake", + "/usr/share/cmake/Modules/FindPackageHandleStandardArgs.cmake", + "/usr/share/cmake/Modules/FindPackageMessage.cmake", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/minizip-ng/minizip-ng-config-version.cmake", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/minizip-ng/minizip-ng-config.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/share/cmake/Modules/FindZLIB.cmake", + "/usr/share/cmake/Modules/FindPackageHandleStandardArgs.cmake", + "/usr/share/cmake/Modules/FindPackageMessage.cmake", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/minizip-ng/minizip-ng.cmake", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/minizip-ng/minizip-ng-config-version.cmake", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/minizip-ng/minizip-ng-config.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/minizip-ng/minizip-ng.cmake", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/minizip-ng/minizip-ng-release.cmake", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/share/opentimelineio/OpenTimelineIOConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/share/opentime/OpenTimeConfig.cmake", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/share/opentime/OpenTimeTargets.cmake", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/share/opentime/OpenTimeTargets-release.cmake", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/Imath/ImathConfigVersion.cmake", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/Imath/ImathConfig.cmake", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/Imath/ImathTargets.cmake", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/share/opentimelineio/OpenTimelineIOTargets.cmake", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/share/opentimelineio/OpenTimelineIOTargets-release.cmake", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/OpenColorIO/OpenColorIOConfigVersion.cmake", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/OpenColorIO/OpenColorIOConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/share/OpenColorIO/cmake/modules/Findexpat.cmake", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/expat-2.7.2/expat-config-version.cmake", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/expat-2.7.2/expat-config.cmake", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/expat-2.7.2/expat.cmake", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/expat-2.7.2/expat-config-version.cmake", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/expat-2.7.2/expat-config.cmake", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/expat-2.7.2/expat-release.cmake", + "/usr/share/cmake/Modules/FindPackageHandleStandardArgs.cmake", + "/usr/share/cmake/Modules/FindPackageMessage.cmake", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/share/OpenColorIO/cmake/modules/Findpystring.cmake", + "/usr/share/cmake/Modules/FindPackageHandleStandardArgs.cmake", + "/usr/share/cmake/Modules/FindPackageMessage.cmake", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/share/OpenColorIO/cmake/modules/Findyaml-cpp.cmake", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/yaml-cpp/yaml-cpp-config-version.cmake", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/yaml-cpp/yaml-cpp-config.cmake", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/yaml-cpp/yaml-cpp-targets.cmake", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/yaml-cpp/yaml-cpp-targets-release.cmake", + "/usr/share/cmake/Modules/FindPackageHandleStandardArgs.cmake", + "/usr/share/cmake/Modules/FindPackageMessage.cmake", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/OpenColorIO/OpenColorIOTargets.cmake", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/OpenColorIO/OpenColorIOTargets-release.cmake", + "/usr/share/cmake/Modules/FindPackageHandleStandardArgs.cmake", + "/usr/share/cmake/Modules/FindPackageMessage.cmake", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/SDL2/SDL2ConfigVersion.cmake", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/SDL2/SDL2Config.cmake", + "/usr/share/cmake/Modules/FeatureSummary.cmake", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/SDL2/SDL2staticTargets.cmake", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/SDL2/SDL2staticTargets-release.cmake", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/SDL2/SDL2mainTargets.cmake", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/SDL2/SDL2mainTargets-release.cmake", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/SDL2/SDL2testTargets.cmake", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/SDL2/SDL2testTargets-release.cmake", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/SDL2/sdlfind.cmake", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/libjpeg-turbo/libjpeg-turboConfigVersion.cmake", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/libjpeg-turbo/libjpeg-turboConfig.cmake", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/libjpeg-turbo/libjpeg-turboTargets.cmake", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/libjpeg-turbo/libjpeg-turboTargets-release.cmake", + "/usr/share/cmake/Modules/FindTIFF.cmake", + "/usr/share/cmake/Modules/SelectLibraryConfigurations.cmake", + "/usr/share/cmake/Modules/FindPackageHandleStandardArgs.cmake", + "/usr/share/cmake/Modules/FindPackageMessage.cmake", + "/usr/share/cmake/Modules/FindPNG.cmake", + "/usr/share/cmake/Modules/FindZLIB.cmake", + "/usr/share/cmake/Modules/FindPackageHandleStandardArgs.cmake", + "/usr/share/cmake/Modules/FindPackageMessage.cmake", + "/usr/share/cmake/Modules/SelectLibraryConfigurations.cmake", + "/usr/share/cmake/Modules/FindPackageHandleStandardArgs.cmake", + "/usr/share/cmake/Modules/FindPackageMessage.cmake", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/OpenEXR/OpenEXRConfigVersion.cmake", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/OpenEXR/OpenEXRConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/share/cmake/Modules/FindThreads.cmake", + "/usr/share/cmake/Modules/CheckLibraryExists.cmake", + "/usr/share/cmake/Modules/CheckIncludeFileCXX.cmake", + "/usr/share/cmake/Modules/CheckCXXSourceCompiles.cmake", + "/usr/share/cmake/Modules/FindPackageHandleStandardArgs.cmake", + "/usr/share/cmake/Modules/FindPackageMessage.cmake", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/share/OpenColorIO/cmake/modules/FindImath.cmake", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/Imath/ImathConfigVersion.cmake", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/Imath/ImathConfig.cmake", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/Imath/ImathTargets.cmake", + "/usr/share/cmake/Modules/FindPackageHandleStandardArgs.cmake", + "/usr/share/cmake/Modules/FindPackageMessage.cmake", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/OpenEXR/OpenEXRTargets.cmake", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/OpenEXR/OpenEXRTargets-release.cmake", + "/usr/share/cmake/Modules/FindPkgConfig.cmake", + "/usr/share/cmake/Modules/FindPackageHandleStandardArgs.cmake", + "/usr/share/cmake/Modules/FindPackageMessage.cmake", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/OpenImageIO/OpenImageIOConfigVersion.cmake", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/OpenImageIO/OpenImageIOConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/Imath/ImathConfigVersion.cmake", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/Imath/ImathConfig.cmake", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/Imath/ImathTargets.cmake", + "/usr/share/cmake/Modules/FindTIFF.cmake", + "/usr/share/cmake/Modules/FindPackageHandleStandardArgs.cmake", + "/usr/share/cmake/Modules/FindPackageMessage.cmake", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/OpenColorIO/OpenColorIOConfigVersion.cmake", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/OpenColorIO/OpenColorIOConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/OpenColorIO/OpenColorIOTargets.cmake", + "/usr/share/cmake/Modules/FindPackageHandleStandardArgs.cmake", + "/usr/share/cmake/Modules/FindPackageMessage.cmake", + "/usr/share/cmake/Modules/FindJPEG.cmake", + "/usr/share/cmake/Modules/SelectLibraryConfigurations.cmake", + "/usr/share/cmake/Modules/FindPackageHandleStandardArgs.cmake", + "/usr/share/cmake/Modules/FindPackageMessage.cmake", + "/usr/share/cmake/Modules/FindPNG.cmake", + "/usr/share/cmake/Modules/FindZLIB.cmake", + "/usr/share/cmake/Modules/FindPackageHandleStandardArgs.cmake", + "/usr/share/cmake/Modules/FindPackageMessage.cmake", + "/usr/share/cmake/Modules/FindPackageHandleStandardArgs.cmake", + "/usr/share/cmake/Modules/FindPackageMessage.cmake", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/OpenImageIO/OpenImageIOTargets.cmake", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/OpenImageIO/OpenImageIOTargets-release.cmake", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/ftk/ftkConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/share/cmake/Modules/FindThreads.cmake", + "/usr/share/cmake/Modules/CheckLibraryExists.cmake", + "/usr/share/cmake/Modules/CheckIncludeFileCXX.cmake", + "/usr/share/cmake/Modules/CheckCXXSourceCompiles.cmake", + "/usr/share/cmake/Modules/FindPackageHandleStandardArgs.cmake", + "/usr/share/cmake/Modules/FindPackageMessage.cmake", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/share/cmake/nlohmann_json/nlohmann_jsonConfigVersion.cmake", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/share/cmake/nlohmann_json/nlohmann_jsonConfig.cmake", + "/usr/share/cmake/Modules/FindPackageHandleStandardArgs.cmake", + "/usr/share/cmake/Modules/FindPackageMessage.cmake", + "/usr/share/cmake/Modules/FindPNG.cmake", + "/usr/share/cmake/Modules/FindZLIB.cmake", + "/usr/share/cmake/Modules/FindPackageHandleStandardArgs.cmake", + "/usr/share/cmake/Modules/FindPackageMessage.cmake", + "/usr/share/cmake/Modules/FindPackageHandleStandardArgs.cmake", + "/usr/share/cmake/Modules/FindPackageMessage.cmake", + "/usr/share/cmake/Modules/FindFreetype.cmake", + "/usr/share/cmake/Modules/SelectLibraryConfigurations.cmake", + "/usr/share/cmake/Modules/FindPackageHandleStandardArgs.cmake", + "/usr/share/cmake/Modules/FindPackageMessage.cmake", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/lunasvg/lunasvgConfigVersion.cmake", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/lunasvg/lunasvgConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/plutovg/plutovgConfigVersion.cmake", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/plutovg/plutovgConfig.cmake", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/plutovg/plutovgTargets.cmake", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/plutovg/plutovgTargets-release.cmake", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/lunasvg/lunasvgTargets.cmake", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/lunasvg/lunasvgTargets-release.cmake", + "/usr/share/cmake/Modules/FindOpenGL.cmake", + "/usr/share/cmake/Modules/FindPackageHandleStandardArgs.cmake", + "/usr/share/cmake/Modules/FindPackageMessage.cmake", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/SDL2/SDL2ConfigVersion.cmake", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/SDL2/SDL2Config.cmake", + "/usr/share/cmake/Modules/FeatureSummary.cmake", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/SDL2/SDL2staticTargets.cmake", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/SDL2/SDL2mainTargets.cmake", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/SDL2/SDL2testTargets.cmake", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/SDL2/sdlfind.cmake", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/ftk/ftk-resourceTargets.cmake", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/ftk/ftk-resourceTargets-release.cmake", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/ftk/ftkResourceTargets.cmake", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/ftk/ftkResourceTargets-release.cmake", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/ftk/ftkCoreTargets.cmake", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/ftk/ftkCoreTargets-release.cmake", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/ftk/ftkgladTargets.cmake", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/ftk/ftkgladTargets-release.cmake", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/ftk/ftkGLTargets.cmake", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/ftk/ftkGLTargets-release.cmake", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/ftk/ftkUITargets.cmake", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/ftk/ftkUITargets-release.cmake", + "/usr/lib64/cmake/Qt6/Qt6ConfigVersion.cmake", + "/usr/lib64/cmake/Qt6/Qt6ConfigVersionImpl.cmake", + "/usr/lib64/cmake/Qt6/Qt6Config.cmake", + "/usr/lib64/cmake/Qt6/QtPublicCMakeEarlyPolicyHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicCMakeHelpers.cmake", + "/usr/lib64/cmake/Qt6/Qt6ConfigExtras.cmake", + "/usr/lib64/cmake/Qt6/QtPublicCMakeVersionHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtInstallPaths.cmake", + "/usr/lib64/cmake/Qt6/Qt6Targets.cmake", + "/usr/lib64/cmake/Qt6/Qt6VersionlessAliasTargets.cmake", + "/usr/lib64/cmake/Qt6/QtFeature.cmake", + "/usr/share/cmake/Modules/CheckCXXCompilerFlag.cmake", + "/usr/lib64/cmake/Qt6/QtFeatureCommon.cmake", + "/usr/lib64/cmake/Qt6/QtPublicAndroidHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicAppleHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicCMakeHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicCMakeVersionHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicDependencyHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicExternalProjectHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicFinalizerHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicFindPackageHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicGitHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicPluginHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicPluginHelpers_v2.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomAttributionHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomBuildToolHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomCommonGenerationHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomCpeHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomCycloneDXHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomDocumentNamespaceHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomDepHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomExternalReferenceHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomFileHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomGenerationHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomGenerationCycloneDXHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomLicenseHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomOpsHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomPurlHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomPythonHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomQtEntityHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomRelationshipHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomSystemDepHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicTargetHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicTestHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicToolHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicWalkLibsHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicWindowsHelpers.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6/Qt6Dependencies.cmake", + "/usr/lib64/cmake/Qt6Quick/Qt6QuickConfigVersion.cmake", + "/usr/lib64/cmake/Qt6Quick/Qt6QuickConfigVersionImpl.cmake", + "/usr/lib64/cmake/Qt6Quick/Qt6QuickConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6Quick/Qt6QuickDependencies.cmake", + "/usr/lib64/cmake/Qt6QuickTools/Qt6QuickToolsConfigVersion.cmake", + "/usr/lib64/cmake/Qt6QuickTools/Qt6QuickToolsConfigVersionImpl.cmake", + "/usr/lib64/cmake/Qt6QuickTools/Qt6QuickToolsConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6QuickTools/Qt6QuickToolsDependencies.cmake", + "/usr/lib64/cmake/Qt6QmlTools/Qt6QmlToolsConfigVersion.cmake", + "/usr/lib64/cmake/Qt6QmlTools/Qt6QmlToolsConfigVersionImpl.cmake", + "/usr/lib64/cmake/Qt6QmlTools/Qt6QmlToolsConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6QmlTools/Qt6QmlToolsDependencies.cmake", + "/usr/lib64/cmake/Qt6QmlTools/Qt6QmlToolsTargets.cmake", + "/usr/lib64/cmake/Qt6QmlTools/Qt6QmlToolsTargets-relwithdebinfo.cmake", + "/usr/lib64/cmake/Qt6QmlTools/Qt6QmlToolsAdditionalTargetInfo.cmake", + "/usr/lib64/cmake/Qt6QmlTools/Qt6QmlToolsVersionlessTargets.cmake", + "/usr/lib64/cmake/Qt6QuickTools/Qt6QuickToolsTargets.cmake", + "/usr/lib64/cmake/Qt6QuickTools/Qt6QuickToolsTargets-relwithdebinfo.cmake", + "/usr/lib64/cmake/Qt6QuickTools/Qt6QuickToolsAdditionalTargetInfo.cmake", + "/usr/lib64/cmake/Qt6QuickTools/Qt6QuickToolsVersionlessTargets.cmake", + "/usr/lib64/cmake/Qt6Qml/Qt6QmlConfigVersion.cmake", + "/usr/lib64/cmake/Qt6Qml/Qt6QmlConfigVersionImpl.cmake", + "/usr/lib64/cmake/Qt6Qml/Qt6QmlConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6Qml/Qt6QmlDependencies.cmake", + "/usr/lib64/cmake/Qt6QmlTools/Qt6QmlToolsConfigVersion.cmake", + "/usr/lib64/cmake/Qt6QmlTools/Qt6QmlToolsConfigVersionImpl.cmake", + "/usr/lib64/cmake/Qt6QmlTools/Qt6QmlToolsConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6QmlTools/Qt6QmlToolsDependencies.cmake", + "/usr/lib64/cmake/Qt6QmlTools/Qt6QmlToolsTargets.cmake", + "/usr/lib64/cmake/Qt6QmlTools/Qt6QmlToolsAdditionalTargetInfo.cmake", + "/usr/lib64/cmake/Qt6QmlTools/Qt6QmlToolsVersionlessTargets.cmake", + "/usr/lib64/cmake/Qt6QmlIntegration/Qt6QmlIntegrationConfigVersion.cmake", + "/usr/lib64/cmake/Qt6QmlIntegration/Qt6QmlIntegrationConfigVersionImpl.cmake", + "/usr/lib64/cmake/Qt6QmlIntegration/Qt6QmlIntegrationConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6QmlIntegration/Qt6QmlIntegrationTargets.cmake", + "/usr/lib64/cmake/Qt6QmlIntegration/Qt6QmlIntegrationAdditionalTargetInfo.cmake", + "/usr/lib64/cmake/Qt6QmlIntegration/Qt6QmlIntegrationVersionlessAliasTargets.cmake", + "/usr/lib64/cmake/Qt6Qml/Qt6QmlTargets.cmake", + "/usr/lib64/cmake/Qt6Qml/Qt6QmlTargets-relwithdebinfo.cmake", + "/usr/lib64/cmake/Qt6Qml/Qt6QmlAdditionalTargetInfo.cmake", + "/usr/lib64/cmake/Qt6Qml/Qt6QmlMacros.cmake", + "/usr/share/cmake/Modules/GNUInstallDirs.cmake", + "/usr/lib64/cmake/Qt6Qml/Qt6QmlConfigExtras.cmake", + "/usr/lib64/cmake/Qt6Qml/Qt6QmlFindQmlscInternal.cmake", + "/usr/lib64/cmake/Qt6Qml/Qt6QmlPublicCMakeHelpers.cmake", + "/usr/lib64/cmake/Qt6Qml/Qt6QmlProperties.cmake", + "/usr/lib64/cmake/Qt6Qml/Qt6QmlPlugins.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6LabsPlatformpluginConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6LabsPlatformpluginTargets.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6LabsPlatformpluginTargets-relwithdebinfo.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6LabsPlatformpluginAdditionalTargetInfo.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6LabsSynchronizerpluginConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6LabsSynchronizerpluginTargets.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6LabsSynchronizerpluginTargets-relwithdebinfo.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6LabsSynchronizerpluginAdditionalTargetInfo.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6PdfQuickpluginConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6PdfQuickpluginTargets.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6PdfQuickpluginTargets-relwithdebinfo.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6PdfQuickpluginAdditionalTargetInfo.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6QmlNetworkpluginConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6QmlNetworkpluginTargets.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6QmlNetworkpluginTargets-relwithdebinfo.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6QmlNetworkpluginAdditionalTargetInfo.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6QuickControlsTestUtilsPrivatepluginConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6QuickControlsTestUtilsPrivatepluginTargets.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6QuickControlsTestUtilsPrivatepluginTargets-relwithdebinfo.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6QuickControlsTestUtilsPrivatepluginAdditionalTargetInfo.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6QuickTestpluginConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6QuickTestpluginTargets.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6QuickTestpluginTargets-relwithdebinfo.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6QuickTestpluginAdditionalTargetInfo.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6WaylandCompositorIviapplicationpluginConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6WaylandCompositorIviapplicationpluginTargets.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6WaylandCompositorIviapplicationpluginTargets-relwithdebinfo.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6WaylandCompositorIviapplicationpluginAdditionalTargetInfo.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6WaylandCompositorPresentationTimepluginConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6WaylandCompositorPresentationTimepluginTargets.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6WaylandCompositorPresentationTimepluginTargets-relwithdebinfo.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6WaylandCompositorPresentationTimepluginAdditionalTargetInfo.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6WaylandCompositorQtShellConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6WaylandCompositorQtShellTargets.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6WaylandCompositorQtShellTargets-relwithdebinfo.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6WaylandCompositorQtShellAdditionalTargetInfo.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6WaylandCompositorWLShellpluginConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6WaylandCompositorWLShellpluginTargets.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6WaylandCompositorWLShellpluginTargets-relwithdebinfo.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6WaylandCompositorWLShellpluginAdditionalTargetInfo.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6WaylandCompositorXdgShellpluginConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6WaylandCompositorXdgShellpluginTargets.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6WaylandCompositorXdgShellpluginTargets-relwithdebinfo.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6WaylandCompositorXdgShellpluginAdditionalTargetInfo.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6WaylandTextureSharingConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6WaylandTextureSharingTargets.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6WaylandTextureSharingTargets-relwithdebinfo.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6WaylandTextureSharingAdditionalTargetInfo.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6WaylandTextureSharingExtensionConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6WaylandTextureSharingExtensionTargets.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6WaylandTextureSharingExtensionTargets-relwithdebinfo.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6WaylandTextureSharingExtensionAdditionalTargetInfo.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6effectspluginConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6effectspluginTargets.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6effectspluginTargets-relwithdebinfo.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6effectspluginAdditionalTargetInfo.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6labsanimationpluginConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6labsanimationpluginTargets.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6labsanimationpluginTargets-relwithdebinfo.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6labsanimationpluginAdditionalTargetInfo.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6labsmodelspluginConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6labsmodelspluginTargets.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6labsmodelspluginTargets-relwithdebinfo.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6labsmodelspluginAdditionalTargetInfo.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6modelspluginConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6modelspluginTargets.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6modelspluginTargets-relwithdebinfo.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6modelspluginAdditionalTargetInfo.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6particlespluginConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6particlespluginTargets.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6particlespluginTargets-relwithdebinfo.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6particlespluginAdditionalTargetInfo.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qmlfolderlistmodelpluginConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qmlfolderlistmodelpluginTargets.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qmlfolderlistmodelpluginTargets-relwithdebinfo.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qmlfolderlistmodelpluginAdditionalTargetInfo.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qmllocalstoragepluginConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qmllocalstoragepluginTargets.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qmllocalstoragepluginTargets-relwithdebinfo.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qmllocalstoragepluginAdditionalTargetInfo.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qmlpluginConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qmlpluginTargets.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qmlpluginTargets-relwithdebinfo.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qmlpluginAdditionalTargetInfo.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qmlsettingspluginConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qmlsettingspluginTargets.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qmlsettingspluginTargets-relwithdebinfo.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qmlsettingspluginAdditionalTargetInfo.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qmlshapespluginConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qmlshapespluginTargets.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qmlshapespluginTargets-relwithdebinfo.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qmlshapespluginAdditionalTargetInfo.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qmlwavefrontmeshpluginConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qmlwavefrontmeshpluginTargets.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qmlwavefrontmeshpluginTargets-relwithdebinfo.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qmlwavefrontmeshpluginAdditionalTargetInfo.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qmlxmllistmodelpluginConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qmlxmllistmodelpluginTargets.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qmlxmllistmodelpluginTargets-relwithdebinfo.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qmlxmllistmodelpluginAdditionalTargetInfo.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qquicklayoutspluginConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qquicklayoutspluginTargets.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qquicklayoutspluginTargets-relwithdebinfo.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qquicklayoutspluginAdditionalTargetInfo.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qquickvectorimagehelperspluginConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qquickvectorimagehelperspluginTargets.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qquickvectorimagehelperspluginTargets-relwithdebinfo.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qquickvectorimagehelperspluginAdditionalTargetInfo.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qquickvectorimagepluginConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qquickvectorimagepluginTargets.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qquickvectorimagepluginTargets-relwithdebinfo.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qquickvectorimagepluginAdditionalTargetInfo.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtqmlcorepluginConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtqmlcorepluginTargets.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtqmlcorepluginTargets-relwithdebinfo.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtqmlcorepluginAdditionalTargetInfo.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquick2pluginConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquick2pluginTargets.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquick2pluginTargets-relwithdebinfo.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquick2pluginAdditionalTargetInfo.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2basicstyleimplpluginConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2basicstyleimplpluginTargets.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2basicstyleimplpluginTargets-relwithdebinfo.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2basicstyleimplpluginAdditionalTargetInfo.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2basicstylepluginConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2basicstylepluginTargets.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2basicstylepluginTargets-relwithdebinfo.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2basicstylepluginAdditionalTargetInfo.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2fluentwinui3styleimplpluginConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2fluentwinui3styleimplpluginTargets.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2fluentwinui3styleimplpluginTargets-relwithdebinfo.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2fluentwinui3styleimplpluginAdditionalTargetInfo.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2fluentwinui3stylepluginConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2fluentwinui3stylepluginTargets.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2fluentwinui3stylepluginTargets-relwithdebinfo.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2fluentwinui3stylepluginAdditionalTargetInfo.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2fusionstyleimplpluginConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2fusionstyleimplpluginTargets.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2fusionstyleimplpluginTargets-relwithdebinfo.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2fusionstyleimplpluginAdditionalTargetInfo.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2fusionstylepluginConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2fusionstylepluginTargets.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2fusionstylepluginTargets-relwithdebinfo.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2fusionstylepluginAdditionalTargetInfo.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2imaginestyleimplpluginConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2imaginestyleimplpluginTargets.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2imaginestyleimplpluginTargets-relwithdebinfo.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2imaginestyleimplpluginAdditionalTargetInfo.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2imaginestylepluginConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2imaginestylepluginTargets.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2imaginestylepluginTargets-relwithdebinfo.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2imaginestylepluginAdditionalTargetInfo.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2implpluginConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2implpluginTargets.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2implpluginTargets-relwithdebinfo.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2implpluginAdditionalTargetInfo.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2materialstyleimplpluginConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2materialstyleimplpluginTargets.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2materialstyleimplpluginTargets-relwithdebinfo.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2materialstyleimplpluginAdditionalTargetInfo.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2materialstylepluginConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2materialstylepluginTargets.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2materialstylepluginTargets-relwithdebinfo.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2materialstylepluginAdditionalTargetInfo.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2pluginConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2pluginTargets.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2pluginTargets-relwithdebinfo.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2pluginAdditionalTargetInfo.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2universalstyleimplpluginConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2universalstyleimplpluginTargets.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2universalstyleimplpluginTargets-relwithdebinfo.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2universalstyleimplpluginAdditionalTargetInfo.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2universalstylepluginConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2universalstylepluginTargets.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2universalstylepluginTargets-relwithdebinfo.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2universalstylepluginAdditionalTargetInfo.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickdialogs2quickimplpluginConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickdialogs2quickimplpluginTargets.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickdialogs2quickimplpluginTargets-relwithdebinfo.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickdialogs2quickimplpluginAdditionalTargetInfo.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickdialogspluginConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickdialogspluginTargets.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickdialogspluginTargets-relwithdebinfo.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickdialogspluginAdditionalTargetInfo.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickshapesdesignhelperspluginConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickshapesdesignhelperspluginTargets.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickshapesdesignhelperspluginTargets-relwithdebinfo.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickshapesdesignhelperspluginAdditionalTargetInfo.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquicktemplates2pluginConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquicktemplates2pluginTargets.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquicktemplates2pluginTargets-relwithdebinfo.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquicktemplates2pluginAdditionalTargetInfo.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6quick3dspatialaudioConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6quick3dspatialaudioTargets.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6quick3dspatialaudioTargets-relwithdebinfo.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6quick3dspatialaudioAdditionalTargetInfo.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6quickmultimediaConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6quickmultimediaTargets.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6quickmultimediaTargets-relwithdebinfo.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6quickmultimediaAdditionalTargetInfo.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6quicktoolingConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6quicktoolingTargets.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6quicktoolingTargets-relwithdebinfo.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6quicktoolingAdditionalTargetInfo.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6quickwindowConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6quickwindowTargets.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6quickwindowTargets-relwithdebinfo.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6quickwindowAdditionalTargetInfo.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qwaylandcompositorpluginConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qwaylandcompositorpluginTargets.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qwaylandcompositorpluginTargets-relwithdebinfo.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qwaylandcompositorpluginAdditionalTargetInfo.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6sharedimagepluginConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6sharedimagepluginTargets.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6sharedimagepluginTargets-relwithdebinfo.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6sharedimagepluginAdditionalTargetInfo.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6workerscriptpluginConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6workerscriptpluginTargets.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6workerscriptpluginTargets-relwithdebinfo.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6workerscriptpluginAdditionalTargetInfo.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6LabsPlatformpluginConfig.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6LabsSynchronizerpluginConfig.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6PdfQuickpluginConfig.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6QmlNetworkpluginConfig.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6QuickControlsTestUtilsPrivatepluginConfig.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6QuickTestpluginConfig.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6WaylandCompositorIviapplicationpluginConfig.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6WaylandCompositorPresentationTimepluginConfig.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6WaylandCompositorQtShellConfig.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6WaylandCompositorWLShellpluginConfig.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6WaylandCompositorXdgShellpluginConfig.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6WaylandTextureSharingConfig.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6WaylandTextureSharingExtensionConfig.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6effectspluginConfig.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6labsanimationpluginConfig.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6labsmodelspluginConfig.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6modelspluginConfig.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6particlespluginConfig.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qmlfolderlistmodelpluginConfig.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qmllocalstoragepluginConfig.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qmlpluginConfig.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qmlsettingspluginConfig.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qmlshapespluginConfig.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qmlwavefrontmeshpluginConfig.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qmlxmllistmodelpluginConfig.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qquicklayoutspluginConfig.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qquickvectorimagehelperspluginConfig.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qquickvectorimagepluginConfig.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtqmlcorepluginConfig.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquick2pluginConfig.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2basicstyleimplpluginConfig.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2basicstylepluginConfig.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2fluentwinui3styleimplpluginConfig.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2fluentwinui3stylepluginConfig.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2fusionstyleimplpluginConfig.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2fusionstylepluginConfig.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2imaginestyleimplpluginConfig.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2imaginestylepluginConfig.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2implpluginConfig.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2materialstyleimplpluginConfig.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2materialstylepluginConfig.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2pluginConfig.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2universalstyleimplpluginConfig.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2universalstylepluginConfig.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickdialogs2quickimplpluginConfig.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickdialogspluginConfig.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickshapesdesignhelperspluginConfig.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquicktemplates2pluginConfig.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6quick3dspatialaudioConfig.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6quickmultimediaConfig.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6quicktoolingConfig.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6quickwindowConfig.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qwaylandcompositorpluginConfig.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6sharedimagepluginConfig.cmake", + "/usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6workerscriptpluginConfig.cmake", + "/usr/lib64/cmake/Qt6Qml/Qt6QDebugMessageServiceFactoryPluginConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6Qml/Qt6QDebugMessageServiceFactoryPluginTargets.cmake", + "/usr/lib64/cmake/Qt6Qml/Qt6QDebugMessageServiceFactoryPluginTargets-relwithdebinfo.cmake", + "/usr/lib64/cmake/Qt6Qml/Qt6QDebugMessageServiceFactoryPluginAdditionalTargetInfo.cmake", + "/usr/lib64/cmake/Qt6Qml/Qt6QLocalClientConnectionFactoryPluginConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6Qml/Qt6QLocalClientConnectionFactoryPluginTargets.cmake", + "/usr/lib64/cmake/Qt6Qml/Qt6QLocalClientConnectionFactoryPluginTargets-relwithdebinfo.cmake", + "/usr/lib64/cmake/Qt6Qml/Qt6QLocalClientConnectionFactoryPluginAdditionalTargetInfo.cmake", + "/usr/lib64/cmake/Qt6Qml/Qt6QQmlDebugServerFactoryPluginConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6Qml/Qt6QQmlDebugServerFactoryPluginTargets.cmake", + "/usr/lib64/cmake/Qt6Qml/Qt6QQmlDebugServerFactoryPluginTargets-relwithdebinfo.cmake", + "/usr/lib64/cmake/Qt6Qml/Qt6QQmlDebugServerFactoryPluginAdditionalTargetInfo.cmake", + "/usr/lib64/cmake/Qt6Qml/Qt6QQmlDebuggerServiceFactoryPluginConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6Qml/Qt6QQmlDebuggerServiceFactoryPluginTargets.cmake", + "/usr/lib64/cmake/Qt6Qml/Qt6QQmlDebuggerServiceFactoryPluginTargets-relwithdebinfo.cmake", + "/usr/lib64/cmake/Qt6Qml/Qt6QQmlDebuggerServiceFactoryPluginAdditionalTargetInfo.cmake", + "/usr/lib64/cmake/Qt6Qml/Qt6QQmlInspectorServiceFactoryPluginConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6Qml/Qt6QQmlInspectorServiceFactoryPluginTargets.cmake", + "/usr/lib64/cmake/Qt6Qml/Qt6QQmlInspectorServiceFactoryPluginTargets-relwithdebinfo.cmake", + "/usr/lib64/cmake/Qt6Qml/Qt6QQmlInspectorServiceFactoryPluginAdditionalTargetInfo.cmake", + "/usr/lib64/cmake/Qt6Qml/Qt6QQmlNativeDebugConnectorFactoryPluginConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6Qml/Qt6QQmlNativeDebugConnectorFactoryPluginTargets.cmake", + "/usr/lib64/cmake/Qt6Qml/Qt6QQmlNativeDebugConnectorFactoryPluginTargets-relwithdebinfo.cmake", + "/usr/lib64/cmake/Qt6Qml/Qt6QQmlNativeDebugConnectorFactoryPluginAdditionalTargetInfo.cmake", + "/usr/lib64/cmake/Qt6Qml/Qt6QQmlNativeDebugServiceFactoryPluginConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6Qml/Qt6QQmlNativeDebugServiceFactoryPluginTargets.cmake", + "/usr/lib64/cmake/Qt6Qml/Qt6QQmlNativeDebugServiceFactoryPluginTargets-relwithdebinfo.cmake", + "/usr/lib64/cmake/Qt6Qml/Qt6QQmlNativeDebugServiceFactoryPluginAdditionalTargetInfo.cmake", + "/usr/lib64/cmake/Qt6Qml/Qt6QQmlPreviewServiceFactoryPluginConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6Qml/Qt6QQmlPreviewServiceFactoryPluginTargets.cmake", + "/usr/lib64/cmake/Qt6Qml/Qt6QQmlPreviewServiceFactoryPluginTargets-relwithdebinfo.cmake", + "/usr/lib64/cmake/Qt6Qml/Qt6QQmlPreviewServiceFactoryPluginAdditionalTargetInfo.cmake", + "/usr/lib64/cmake/Qt6Qml/Qt6QQmlProfilerServiceFactoryPluginConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6Qml/Qt6QQmlProfilerServiceFactoryPluginTargets.cmake", + "/usr/lib64/cmake/Qt6Qml/Qt6QQmlProfilerServiceFactoryPluginTargets-relwithdebinfo.cmake", + "/usr/lib64/cmake/Qt6Qml/Qt6QQmlProfilerServiceFactoryPluginAdditionalTargetInfo.cmake", + "/usr/lib64/cmake/Qt6Qml/Qt6QQuickProfilerAdapterFactoryPluginConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6Qml/Qt6QQuickProfilerAdapterFactoryPluginTargets.cmake", + "/usr/lib64/cmake/Qt6Qml/Qt6QQuickProfilerAdapterFactoryPluginTargets-relwithdebinfo.cmake", + "/usr/lib64/cmake/Qt6Qml/Qt6QQuickProfilerAdapterFactoryPluginAdditionalTargetInfo.cmake", + "/usr/lib64/cmake/Qt6Qml/Qt6QTcpServerConnectionFactoryPluginConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6Qml/Qt6QTcpServerConnectionFactoryPluginTargets.cmake", + "/usr/lib64/cmake/Qt6Qml/Qt6QTcpServerConnectionFactoryPluginTargets-relwithdebinfo.cmake", + "/usr/lib64/cmake/Qt6Qml/Qt6QTcpServerConnectionFactoryPluginAdditionalTargetInfo.cmake", + "/usr/lib64/cmake/Qt6Qml/Qt6QmlVersionlessAliasTargets.cmake", + "/usr/lib64/cmake/Qt6QmlModels/Qt6QmlModelsConfigVersion.cmake", + "/usr/lib64/cmake/Qt6QmlModels/Qt6QmlModelsConfigVersionImpl.cmake", + "/usr/lib64/cmake/Qt6QmlModels/Qt6QmlModelsConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6QmlModels/Qt6QmlModelsDependencies.cmake", + "/usr/lib64/cmake/Qt6QmlModels/Qt6QmlModelsTargets.cmake", + "/usr/lib64/cmake/Qt6QmlModels/Qt6QmlModelsTargets-relwithdebinfo.cmake", + "/usr/lib64/cmake/Qt6QmlModels/Qt6QmlModelsAdditionalTargetInfo.cmake", + "/usr/lib64/cmake/Qt6QmlModels/Qt6QmlModelsVersionlessAliasTargets.cmake", + "/usr/lib64/cmake/Qt6QmlMeta/Qt6QmlMetaConfigVersion.cmake", + "/usr/lib64/cmake/Qt6QmlMeta/Qt6QmlMetaConfigVersionImpl.cmake", + "/usr/lib64/cmake/Qt6QmlMeta/Qt6QmlMetaConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6QmlMeta/Qt6QmlMetaDependencies.cmake", + "/usr/lib64/cmake/Qt6QmlWorkerScript/Qt6QmlWorkerScriptConfigVersion.cmake", + "/usr/lib64/cmake/Qt6QmlWorkerScript/Qt6QmlWorkerScriptConfigVersionImpl.cmake", + "/usr/lib64/cmake/Qt6QmlWorkerScript/Qt6QmlWorkerScriptConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6QmlWorkerScript/Qt6QmlWorkerScriptDependencies.cmake", + "/usr/lib64/cmake/Qt6QmlWorkerScript/Qt6QmlWorkerScriptTargets.cmake", + "/usr/lib64/cmake/Qt6QmlWorkerScript/Qt6QmlWorkerScriptTargets-relwithdebinfo.cmake", + "/usr/lib64/cmake/Qt6QmlWorkerScript/Qt6QmlWorkerScriptAdditionalTargetInfo.cmake", + "/usr/lib64/cmake/Qt6QmlWorkerScript/Qt6QmlWorkerScriptVersionlessAliasTargets.cmake", + "/usr/lib64/cmake/Qt6QmlMeta/Qt6QmlMetaTargets.cmake", + "/usr/lib64/cmake/Qt6QmlMeta/Qt6QmlMetaTargets-relwithdebinfo.cmake", + "/usr/lib64/cmake/Qt6QmlMeta/Qt6QmlMetaAdditionalTargetInfo.cmake", + "/usr/lib64/cmake/Qt6QmlMeta/Qt6QmlMetaVersionlessAliasTargets.cmake", + "/usr/lib64/cmake/Qt6Quick/Qt6QuickTargets.cmake", + "/usr/lib64/cmake/Qt6Quick/Qt6QuickTargets-relwithdebinfo.cmake", + "/usr/lib64/cmake/Qt6Quick/Qt6QuickAdditionalTargetInfo.cmake", + "/usr/lib64/cmake/Qt6Quick/Qt6QuickPlugins.cmake", + "/usr/lib64/cmake/Qt6Quick/Qt6QuickVersionlessAliasTargets.cmake", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/tlRender/tlResourceTargets.cmake", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/tlRender/tlResourceTargets-release.cmake", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/tlRender/tlCoreTargets.cmake", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/tlRender/tlCoreTargets-release.cmake", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/tlRender/tlIOTargets.cmake", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/tlRender/tlIOTargets-release.cmake", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/tlRender/tlTimelineTargets.cmake", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/tlRender/tlTimelineTargets-release.cmake", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/tlRender/tlGLTargets.cmake", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/tlRender/tlGLTargets-release.cmake", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/tlRender/tlDeviceTargets.cmake", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/tlRender/tlDeviceTargets-release.cmake", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/tlRender/tlUITargets.cmake", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/tlRender/tlUITargets-release.cmake", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/tlRender/tlQtTargets.cmake", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/tlRender/tlQtTargets-release.cmake", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/tlRender/tlQtWidgetTargets.cmake", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/tlRender/tlQtWidgetTargets-release.cmake", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/tlRender/tlQtQuickTargets.cmake", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/tlRender/tlQtQuickTargets-release.cmake", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/minizip-ng/minizip-ng-config-version.cmake", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/minizip-ng/minizip-ng-config.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/minizip-ng/minizip-ng.cmake", + "/usr/share/cmake/Modules/GNUInstallDirs.cmake", + "/usr/share/cmake/Modules/CPack.cmake", + "/usr/share/cmake/Modules/CPackComponent.cmake", + "/usr/share/cmake/Templates/CPackConfig.cmake.in", + "/usr/share/cmake/Templates/CPackConfig.cmake.in" + ], + "CMAKE_SOURCE_DIR" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6", + "CROSS_CONFIG" : false, + "DEP_FILE" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/kassetmanagerqt_autogen/deps", + "DEP_FILE_RULE_NAME" : "kassetmanagerqt_autogen/timestamp", + "HEADERS" : + [ + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/annotation_items.h", + "MU", + "UVLADIE3JM/moc_annotation_items.cpp", + null + ], + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/annotation_layer.h", + "MU", + "UVLADIE3JM/moc_annotation_layer.cpp", + null + ], + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/asset_grid_view.h", + "MU", + "UVLADIE3JM/moc_asset_grid_view.cpp", + null + ], + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/asset_item_delegate.h", + "MU", + "UVLADIE3JM/moc_asset_item_delegate.cpp", + null + ], + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/asset_sequence_grouping_proxy_model.h", + "MU", + "UVLADIE3JM/moc_asset_sequence_grouping_proxy_model.cpp", + null + ], + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/assets_model.h", + "MU", + "UVLADIE3JM/moc_assets_model.cpp", + null + ], + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/assets_table_model.h", + "MU", + "UVLADIE3JM/moc_assets_table_model.cpp", + null + ], + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/bulk_rename_dialog.h", + "MU", + "UVLADIE3JM/moc_bulk_rename_dialog.cpp", + null + ], + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/context_preserver.h", + "MU", + "UVLADIE3JM/moc_context_preserver.cpp", + null + ], + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/database_health_agent.h", + "MU", + "UVLADIE3JM/moc_database_health_agent.cpp", + null + ], + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/database_health_dialog.h", + "MU", + "UVLADIE3JM/moc_database_health_dialog.cpp", + null + ], + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/db.h", + "MU", + "UVLADIE3JM/moc_db.cpp", + null + ], + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/drag_utils.h", + "MU", + "UVLADIE3JM/moc_drag_utils.cpp", + null + ], + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/everything_folder_model.h", + "MU", + "UVLADIE3JM/moc_everything_folder_model.cpp", + null + ], + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/everything_search.h", + "MU", + "UVLADIE3JM/moc_everything_search.cpp", + null + ], + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/everything_search_dialog.h", + "MU", + "UVLADIE3JM/moc_everything_search_dialog.cpp", + null + ], + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/file_manager_pane.h", + "MU", + "UVLADIE3JM/moc_file_manager_pane.cpp", + null + ], + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/file_ops.h", + "MU", + "UVLADIE3JM/moc_file_ops.cpp", + null + ], + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/file_ops_dialog.h", + "MU", + "UVLADIE3JM/moc_file_ops_dialog.cpp", + null + ], + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/file_utils.h", + "MU", + "UVLADIE3JM/moc_file_utils.cpp", + null + ], + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/fm_item_delegate.h", + "MU", + "UVLADIE3JM/moc_fm_item_delegate.cpp", + null + ], + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/fm_views_ex.h", + "MU", + "UVLADIE3JM/moc_fm_views_ex.cpp", + null + ], + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/grid_scrub.h", + "MU", + "UVLADIE3JM/moc_grid_scrub.cpp", + null + ], + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/i_asset_database.h", + "MU", + "UVLADIE3JM/moc_i_asset_database.cpp", + null + ], + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/icon_utils.h", + "MU", + "UVLADIE3JM/moc_icon_utils.cpp", + null + ], + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/image_preview_overlay.h", + "MU", + "UVLADIE3JM/moc_image_preview_overlay.cpp", + null + ], + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/import_progress_dialog.h", + "MU", + "UVLADIE3JM/moc_import_progress_dialog.cpp", + null + ], + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/importer.h", + "MU", + "UVLADIE3JM/moc_importer.cpp", + null + ], + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/live_preview_manager.h", + "MU", + "UVLADIE3JM/moc_live_preview_manager.cpp", + null + ], + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/log_manager.h", + "MU", + "UVLADIE3JM/moc_log_manager.cpp", + null + ], + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/log_viewer_widget.h", + "MU", + "UVLADIE3JM/moc_log_viewer_widget.cpp", + null + ], + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/mainwindow.h", + "MU", + "UVLADIE3JM/moc_mainwindow.cpp", + null + ], + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/media/tlrender_player.h", + "MU", + "SVT5AJZPWX/moc_tlrender_player.cpp", + null + ], + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/media/tlrender_viewport.h", + "MU", + "SVT5AJZPWX/moc_tlrender_viewport.cpp", + null + ], + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/media/tlrender_widget.h", + "MU", + "SVT5AJZPWX/moc_tlrender_widget.cpp", + null + ], + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/media_convert_dialog.h", + "MU", + "UVLADIE3JM/moc_media_convert_dialog.cpp", + null + ], + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/media_converter_worker.h", + "MU", + "UVLADIE3JM/moc_media_converter_worker.cpp", + null + ], + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/office_preview.h", + "MU", + "UVLADIE3JM/moc_office_preview.cpp", + null + ], + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/oiio_image_loader.h", + "MU", + "UVLADIE3JM/moc_oiio_image_loader.cpp", + null + ], + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/preview_overlay.h", + "MU", + "UVLADIE3JM/moc_preview_overlay.cpp", + null + ], + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/progress_manager.h", + "MU", + "UVLADIE3JM/moc_progress_manager.cpp", + null + ], + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/project_assets_model.h", + "MU", + "UVLADIE3JM/moc_project_assets_model.cpp", + null + ], + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/project_db.h", + "MU", + "UVLADIE3JM/moc_project_db.cpp", + null + ], + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/project_folder_watcher.h", + "MU", + "UVLADIE3JM/moc_project_folder_watcher.cpp", + null + ], + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/project_folders_model.h", + "MU", + "UVLADIE3JM/moc_project_folders_model.cpp", + null + ], + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/project_import_worker.h", + "MU", + "UVLADIE3JM/moc_project_import_worker.cpp", + null + ], + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/project_item_delegate.h", + "MU", + "UVLADIE3JM/moc_project_item_delegate.cpp", + null + ], + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/project_manager_watcher.h", + "MU", + "UVLADIE3JM/moc_project_manager_watcher.cpp", + null + ], + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/project_sequence_grouping_proxy_model.h", + "MU", + "UVLADIE3JM/moc_project_sequence_grouping_proxy_model.cpp", + null + ], + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/project_version_detector.h", + "MU", + "UVLADIE3JM/moc_project_version_detector.cpp", + null + ], + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/projects_model.h", + "MU", + "UVLADIE3JM/moc_projects_model.cpp", + null + ], + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/scrub_frame_registry.h", + "MU", + "UVLADIE3JM/moc_scrub_frame_registry.cpp", + null + ], + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/sequence_detector.h", + "MU", + "UVLADIE3JM/moc_sequence_detector.cpp", + null + ], + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/sequence_grouping_proxy_model.h", + "MU", + "UVLADIE3JM/moc_sequence_grouping_proxy_model.cpp", + null + ], + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/settings_dialog.h", + "MU", + "UVLADIE3JM/moc_settings_dialog.cpp", + null + ], + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/star_rating_widget.h", + "MU", + "UVLADIE3JM/moc_star_rating_widget.cpp", + null + ], + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/tags_model.h", + "MU", + "UVLADIE3JM/moc_tags_model.cpp", + null + ], + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/theme_manager.h", + "MU", + "UVLADIE3JM/moc_theme_manager.cpp", + null + ], + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/thumbnail_cache_manager.h", + "MU", + "UVLADIE3JM/moc_thumbnail_cache_manager.cpp", + null + ], + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/thumbnail_generator_dialog.h", + "MU", + "UVLADIE3JM/moc_thumbnail_generator_dialog.cpp", + null + ], + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/thumbnail_generator_worker.h", + "MU", + "UVLADIE3JM/moc_thumbnail_generator_worker.cpp", + null + ], + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/user_guide_dialog.h", + "MU", + "UVLADIE3JM/moc_user_guide_dialog.cpp", + null + ], + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/utils.h", + "MU", + "UVLADIE3JM/moc_utils.cpp", + null + ], + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/video_metadata.h", + "MU", + "UVLADIE3JM/moc_video_metadata.cpp", + null + ], + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/virtual_drag.h", + "MU", + "UVLADIE3JM/moc_virtual_drag.cpp", + null + ], + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/virtual_folders.h", + "MU", + "UVLADIE3JM/moc_virtual_folders.cpp", + null + ] + ], + "HEADER_EXTENSIONS" : [ "h", "hh", "h++", "hm", "hpp", "hxx", "in", "txx" ], + "INCLUDE_DIR" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/kassetmanagerqt_autogen/include", + "MOC_COMPILATION_FILE" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/kassetmanagerqt_autogen/mocs_compilation.cpp", + "MOC_DEFINITIONS" : + [ + "FTK_API_GL_4_1", + "FTK_STATIC", + "HAVE_FFMPEG", + "HAVE_MINIZIP_NG", + "HAVE_OCIO=1", + "HAVE_OPENIMAGEIO=1", + "HAVE_QT_PDF", + "HAVE_QT_PDF_WIDGETS", + "HAVE_TLRENDER=1", + "KAM_APP_VERSION=\"1.8.5\"", + "OPENTIME_STATIC", + "OTIO_STATIC", + "OpenColorIO_SKIP_IMPORTS", + "QT_CONCURRENT_LIB", + "QT_CORE_LIB", + "QT_GUI_LIB", + "QT_MULTIMEDIAWIDGETS_LIB", + "QT_MULTIMEDIA_LIB", + "QT_NETWORK_LIB", + "QT_NO_DEBUG", + "QT_NO_DEBUG_OUTPUT", + "QT_NO_INFO_OUTPUT", + "QT_OPENGLWIDGETS_LIB", + "QT_OPENGL_LIB", + "QT_PDFWIDGETS_LIB", + "QT_PDF_LIB", + "QT_SQL_LIB", + "QT_SVGWIDGETS_LIB", + "QT_SVG_LIB", + "QT_WIDGETS_LIB", + "TLRENDER_EXR", + "TLRENDER_FFMPEG", + "TLRENDER_FFMPEG_PLUGIN", + "TLRENDER_JPEG", + "TLRENDER_OCIO", + "TLRENDER_OIIO", + "TLRENDER_PNG", + "TLRENDER_SDL2", + "TLRENDER_TIFF", + "TL_STATIC" + ], + "MOC_DEPEND_FILTERS" : + [ + [ + "Q_PLUGIN_METADATA", + "[\n][ \t]*Q_PLUGIN_METADATA[ \t]*\\([^\\)]*FILE[ \t]*\"([^\"]+)\"" + ] + ], + "MOC_INCLUDES" : + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include", + "/usr/include/qt6/QtCore", + "/usr/include/qt6", + "/usr/lib64/qt6/mkspecs/linux-g++", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/Imath", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/SDL2", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/minizip-ng", + "/usr/include/qt6/QtGui", + "/usr/include/qt6/QtOpenGL", + "/usr/include/qt6/QtWidgets", + "/usr/include/qt6/QtOpenGLWidgets", + "/usr/include/qt6/QtSvg", + "/usr/include/qt6/QtMultimedia", + "/usr/include/qt6/QtNetwork", + "/usr/include/qt6/QtMultimediaWidgets", + "/usr/include/qt6/QtSql", + "/usr/include/qt6/QtConcurrent", + "/usr/include/qt6/QtSvgWidgets", + "/usr/include/qt6/QtPdf", + "/usr/include/qt6/QtPdfWidgets", + "/usr/include", + "/usr/include/c++/15", + "/usr/include/c++/15/x86_64-redhat-linux", + "/usr/include/c++/15/backward", + "/usr/lib/gcc/x86_64-redhat-linux/15/include", + "/usr/local/include" + ], + "MOC_MACRO_NAMES" : + [ + "Q_OBJECT", + "Q_GADGET", + "Q_NAMESPACE", + "Q_NAMESPACE_EXPORT", + "Q_GADGET_EXPORT", + "Q_ENUM_NS" + ], + "MOC_OPTIONS" : [], + "MOC_PATH_PREFIX" : false, + "MOC_PREDEFS_CMD" : + [ + "/usr/bin/c++", + "-std=gnu++20", + "-w", + "-dM", + "-E", + "/usr/share/cmake/Modules/CMakeCXXCompilerABI.cpp" + ], + "MOC_PREDEFS_FILE" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/kassetmanagerqt_autogen/moc_predefs.h", + "MOC_RELAXED_MODE" : false, + "MOC_SKIP" : [], + "MULTI_CONFIG" : false, + "PARALLEL" : 16, + "PARSE_CACHE_FILE" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/CMakeFiles/kassetmanagerqt_autogen.dir/ParseCache.txt", + "QT_MOC_EXECUTABLE" : "/usr/lib64/qt6/libexec/moc", + "QT_UIC_EXECUTABLE" : "/usr/lib64/qt6/libexec/uic", + "QT_VERSION_MAJOR" : 6, + "QT_VERSION_MINOR" : 10, + "SETTINGS_FILE" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/CMakeFiles/kassetmanagerqt_autogen.dir/AutogenUsed.txt", + "SOURCES" : + [ + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/annotation_items.cpp", + "MU", + null + ], + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/annotation_layer.cpp", + "MU", + null + ], + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/asset_grid_view.cpp", + "MU", + null + ], + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/asset_item_delegate.cpp", + "MU", + null + ], + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/asset_sequence_grouping_proxy_model.cpp", + "MU", + null + ], + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/assets_model.cpp", + "MU", + null + ], + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/bulk_rename_dialog.cpp", + "MU", + null + ], + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/context_preserver.cpp", + "MU", + null + ], + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/database_health_agent.cpp", + "MU", + null + ], + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/database_health_dialog.cpp", + "MU", + null + ], + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/db.cpp", + "MU", + null + ], + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/drag_utils.cpp", + "MU", + null + ], + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/everything_folder_model.cpp", + "MU", + null + ], + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/everything_search.cpp", + "MU", + null + ], + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/everything_search_dialog.cpp", + "MU", + null + ], + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/file_manager_pane.cpp", + "MU", + null + ], + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/file_ops.cpp", + "MU", + null + ], + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/file_ops_dialog.cpp", + "MU", + null + ], + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/file_utils.cpp", + "MU", + null + ], + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/fm_item_delegate.cpp", + "MU", + null + ], + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/fm_views_ex.cpp", + "MU", + null + ], + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/grid_scrub.cpp", + "MU", + null + ], + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/icon_utils.cpp", + "MU", + null + ], + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/image_preview_overlay.cpp", + "MU", + null + ], + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/import_progress_dialog.cpp", + "MU", + null + ], + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/importer.cpp", + "MU", + null + ], + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/live_preview_manager.cpp", + "MU", + null + ], + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/log_manager.cpp", + "MU", + null + ], + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/log_viewer_widget.cpp", + "MU", + null + ], + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/main.cpp", + "MU", + null + ], + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/mainwindow.cpp", + "MU", + null + ], + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/media/tlrender_player.cpp", + "MU", + null + ], + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/media/tlrender_viewport.cpp", + "MU", + null + ], + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/media/tlrender_widget.cpp", + "MU", + null + ], + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/media_convert_dialog.cpp", + "MU", + null + ], + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/media_converter_worker.cpp", + "MU", + null + ], + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/office_preview.cpp", + "MU", + null + ], + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/oiio_image_loader.cpp", + "MU", + null + ], + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/preview_overlay.cpp", + "MU", + null + ], + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/progress_manager.cpp", + "MU", + null + ], + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/project_assets_model.cpp", + "MU", + null + ], + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/project_db.cpp", + "MU", + null + ], + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/project_folder_watcher.cpp", + "MU", + null + ], + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/project_folders_model.cpp", + "MU", + null + ], + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/project_import_worker.cpp", + "MU", + null + ], + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/project_item_delegate.cpp", + "MU", + null + ], + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/project_manager_watcher.cpp", + "MU", + null + ], + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/project_sequence_grouping_proxy_model.cpp", + "MU", + null + ], + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/project_version_detector.cpp", + "MU", + null + ], + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/projects_model.cpp", + "MU", + null + ], + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/scrub_frame_registry.cpp", + "MU", + null + ], + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/sequence_detector.cpp", + "MU", + null + ], + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/sequence_grouping_proxy_model.cpp", + "MU", + null + ], + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/settings_dialog.cpp", + "MU", + null + ], + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/star_rating_widget.cpp", + "MU", + null + ], + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/theme_manager.cpp", + "MU", + null + ], + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/thumbnail_cache_manager.cpp", + "MU", + null + ], + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/thumbnail_generator_dialog.cpp", + "MU", + null + ], + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/thumbnail_generator_worker.cpp", + "MU", + null + ], + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/user_guide_dialog.cpp", + "MU", + null + ], + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/utils.cpp", + "MU", + null + ], + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/video_metadata.cpp", + "MU", + null + ], + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/virtual_drag.cpp", + "MU", + null + ], + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/virtual_folders.cpp", + "MU", + null + ] + ], + "UIC_OPTIONS" : [], + "UIC_SEARCH_PATHS" : [], + "UIC_SKIP" : [], + "UIC_UI_FILES" : [], + "USE_BETTER_GRAPH" : true, + "VERBOSITY" : 0 +} diff --git a/build-linux/CMakeFiles/kassetmanagerqt_autogen.dir/AutogenUsed.txt b/build-linux/CMakeFiles/kassetmanagerqt_autogen.dir/AutogenUsed.txt new file mode 100644 index 00000000..9e632bd7 --- /dev/null +++ b/build-linux/CMakeFiles/kassetmanagerqt_autogen.dir/AutogenUsed.txt @@ -0,0 +1,2 @@ +moc:750bfbf2e17623654b35bb96e34c50b5e717ab517f2dc44fd5a81761f8e4a240 +uic:0df7b06f04b60705a14ff966fc10725af0fb193398324deeaf17e44a5f9db1e0 diff --git a/build-linux/CMakeFiles/kassetmanagerqt_autogen.dir/ParseCache.txt b/build-linux/CMakeFiles/kassetmanagerqt_autogen.dir/ParseCache.txt new file mode 100644 index 00000000..b383f512 --- /dev/null +++ b/build-linux/CMakeFiles/kassetmanagerqt_autogen.dir/ParseCache.txt @@ -0,0 +1,28541 @@ +# Generated by CMake. Changes will be overwritten. +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/virtual_drag.cpp +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/importer.h + mmc:Q_OBJECT + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/kassetmanagerqt_autogen/moc_predefs.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/importer.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/sequence_detector.h + mdp:/usr/include/alloca.h + mdp:/usr/include/asm-generic/bitsperlong.h + mdp:/usr/include/asm-generic/errno-base.h + mdp:/usr/include/asm-generic/errno.h + mdp:/usr/include/asm-generic/int-ll64.h + mdp:/usr/include/asm-generic/posix_types.h + mdp:/usr/include/asm-generic/types.h + mdp:/usr/include/asm/bitsperlong.h + mdp:/usr/include/asm/errno.h + mdp:/usr/include/asm/posix_types.h + mdp:/usr/include/asm/posix_types_64.h + mdp:/usr/include/asm/types.h + mdp:/usr/include/asm/unistd.h + mdp:/usr/include/asm/unistd_64.h + mdp:/usr/include/assert.h + mdp:/usr/include/bits/atomic_wide_counter.h + mdp:/usr/include/bits/byteswap.h + mdp:/usr/include/bits/confname.h + mdp:/usr/include/bits/cpu-set.h + mdp:/usr/include/bits/endian.h + mdp:/usr/include/bits/endianness.h + mdp:/usr/include/bits/environments.h + mdp:/usr/include/bits/errno.h + mdp:/usr/include/bits/floatn-common.h + mdp:/usr/include/bits/floatn.h + mdp:/usr/include/bits/getopt_core.h + mdp:/usr/include/bits/getopt_posix.h + mdp:/usr/include/bits/libc-header-start.h + mdp:/usr/include/bits/local_lim.h + mdp:/usr/include/bits/locale.h + mdp:/usr/include/bits/long-double.h + mdp:/usr/include/bits/posix1_lim.h + mdp:/usr/include/bits/posix2_lim.h + mdp:/usr/include/bits/posix_opt.h + mdp:/usr/include/bits/pthread_stack_min-dynamic.h + mdp:/usr/include/bits/pthreadtypes-arch.h + mdp:/usr/include/bits/pthreadtypes.h + mdp:/usr/include/bits/sched.h + mdp:/usr/include/bits/select.h + mdp:/usr/include/bits/setjmp.h + mdp:/usr/include/bits/stdint-intn.h + mdp:/usr/include/bits/stdint-least.h + mdp:/usr/include/bits/stdint-uintn.h + mdp:/usr/include/bits/stdio_lim.h + mdp:/usr/include/bits/stdlib-float.h + mdp:/usr/include/bits/struct_mutex.h + mdp:/usr/include/bits/struct_rwlock.h + mdp:/usr/include/bits/syscall.h + mdp:/usr/include/bits/thread-shared-types.h + mdp:/usr/include/bits/time.h + mdp:/usr/include/bits/time64.h + mdp:/usr/include/bits/timesize.h + mdp:/usr/include/bits/timex.h + mdp:/usr/include/bits/types.h + mdp:/usr/include/bits/types/FILE.h + mdp:/usr/include/bits/types/__FILE.h + mdp:/usr/include/bits/types/__fpos64_t.h + mdp:/usr/include/bits/types/__fpos_t.h + mdp:/usr/include/bits/types/__locale_t.h + mdp:/usr/include/bits/types/__mbstate_t.h + mdp:/usr/include/bits/types/__sigset_t.h + mdp:/usr/include/bits/types/clock_t.h + mdp:/usr/include/bits/types/clockid_t.h + mdp:/usr/include/bits/types/cookie_io_functions_t.h + mdp:/usr/include/bits/types/error_t.h + mdp:/usr/include/bits/types/locale_t.h + mdp:/usr/include/bits/types/mbstate_t.h + mdp:/usr/include/bits/types/sigset_t.h + mdp:/usr/include/bits/types/struct_FILE.h + mdp:/usr/include/bits/types/struct___jmp_buf_tag.h + mdp:/usr/include/bits/types/struct_itimerspec.h + mdp:/usr/include/bits/types/struct_sched_param.h + mdp:/usr/include/bits/types/struct_timespec.h + mdp:/usr/include/bits/types/struct_timeval.h + mdp:/usr/include/bits/types/struct_tm.h + mdp:/usr/include/bits/types/time_t.h + mdp:/usr/include/bits/types/timer_t.h + mdp:/usr/include/bits/types/wint_t.h + mdp:/usr/include/bits/typesizes.h + mdp:/usr/include/bits/uintn-identity.h + mdp:/usr/include/bits/uio_lim.h + mdp:/usr/include/bits/unistd_ext.h + mdp:/usr/include/bits/waitflags.h + mdp:/usr/include/bits/waitstatus.h + mdp:/usr/include/bits/wchar.h + mdp:/usr/include/bits/wctype-wchar.h + mdp:/usr/include/bits/wordsize.h + mdp:/usr/include/bits/xopen_lim.h + mdp:/usr/include/c++/15/algorithm + mdp:/usr/include/c++/15/array + mdp:/usr/include/c++/15/atomic + mdp:/usr/include/c++/15/backward/auto_ptr.h + mdp:/usr/include/c++/15/backward/binders.h + mdp:/usr/include/c++/15/bit + mdp:/usr/include/c++/15/bits/algorithmfwd.h + mdp:/usr/include/c++/15/bits/align.h + mdp:/usr/include/c++/15/bits/alloc_traits.h + mdp:/usr/include/c++/15/bits/allocated_ptr.h + mdp:/usr/include/c++/15/bits/allocator.h + mdp:/usr/include/c++/15/bits/atomic_base.h + mdp:/usr/include/c++/15/bits/atomic_lockfree_defines.h + mdp:/usr/include/c++/15/bits/atomic_wait.h + mdp:/usr/include/c++/15/bits/basic_ios.h + mdp:/usr/include/c++/15/bits/basic_ios.tcc + mdp:/usr/include/c++/15/bits/basic_string.h + mdp:/usr/include/c++/15/bits/basic_string.tcc + mdp:/usr/include/c++/15/bits/char_traits.h + mdp:/usr/include/c++/15/bits/charconv.h + mdp:/usr/include/c++/15/bits/chrono.h + mdp:/usr/include/c++/15/bits/chrono_io.h + mdp:/usr/include/c++/15/bits/codecvt.h + mdp:/usr/include/c++/15/bits/concept_check.h + mdp:/usr/include/c++/15/bits/cpp_type_traits.h + mdp:/usr/include/c++/15/bits/cxxabi_forced.h + mdp:/usr/include/c++/15/bits/cxxabi_init_exception.h + mdp:/usr/include/c++/15/bits/enable_special_members.h + mdp:/usr/include/c++/15/bits/erase_if.h + mdp:/usr/include/c++/15/bits/exception.h + mdp:/usr/include/c++/15/bits/exception_defines.h + mdp:/usr/include/c++/15/bits/exception_ptr.h + mdp:/usr/include/c++/15/bits/functexcept.h + mdp:/usr/include/c++/15/bits/functional_hash.h + mdp:/usr/include/c++/15/bits/hash_bytes.h + mdp:/usr/include/c++/15/bits/hashtable.h + mdp:/usr/include/c++/15/bits/hashtable_policy.h + mdp:/usr/include/c++/15/bits/invoke.h + mdp:/usr/include/c++/15/bits/ios_base.h + mdp:/usr/include/c++/15/bits/istream.tcc + mdp:/usr/include/c++/15/bits/iterator_concepts.h + mdp:/usr/include/c++/15/bits/list.tcc + mdp:/usr/include/c++/15/bits/locale_classes.h + mdp:/usr/include/c++/15/bits/locale_classes.tcc + mdp:/usr/include/c++/15/bits/locale_conv.h + mdp:/usr/include/c++/15/bits/locale_facets.h + mdp:/usr/include/c++/15/bits/locale_facets.tcc + mdp:/usr/include/c++/15/bits/locale_facets_nonio.h + mdp:/usr/include/c++/15/bits/locale_facets_nonio.tcc + mdp:/usr/include/c++/15/bits/localefwd.h + mdp:/usr/include/c++/15/bits/max_size_type.h + mdp:/usr/include/c++/15/bits/memory_resource.h + mdp:/usr/include/c++/15/bits/memoryfwd.h + mdp:/usr/include/c++/15/bits/move.h + mdp:/usr/include/c++/15/bits/nested_exception.h + mdp:/usr/include/c++/15/bits/new_allocator.h + mdp:/usr/include/c++/15/bits/node_handle.h + mdp:/usr/include/c++/15/bits/ostream.h + mdp:/usr/include/c++/15/bits/ostream.tcc + mdp:/usr/include/c++/15/bits/ostream_insert.h + mdp:/usr/include/c++/15/bits/parse_numbers.h + mdp:/usr/include/c++/15/bits/postypes.h + mdp:/usr/include/c++/15/bits/predefined_ops.h + mdp:/usr/include/c++/15/bits/ptr_traits.h + mdp:/usr/include/c++/15/bits/quoted_string.h + mdp:/usr/include/c++/15/bits/range_access.h + mdp:/usr/include/c++/15/bits/ranges_algo.h + mdp:/usr/include/c++/15/bits/ranges_algobase.h + mdp:/usr/include/c++/15/bits/ranges_base.h + mdp:/usr/include/c++/15/bits/ranges_cmp.h + mdp:/usr/include/c++/15/bits/ranges_uninitialized.h + mdp:/usr/include/c++/15/bits/ranges_util.h + mdp:/usr/include/c++/15/bits/refwrap.h + mdp:/usr/include/c++/15/bits/requires_hosted.h + mdp:/usr/include/c++/15/bits/shared_ptr.h + mdp:/usr/include/c++/15/bits/shared_ptr_atomic.h + mdp:/usr/include/c++/15/bits/shared_ptr_base.h + mdp:/usr/include/c++/15/bits/specfun.h + mdp:/usr/include/c++/15/bits/sstream.tcc + mdp:/usr/include/c++/15/bits/std_abs.h + mdp:/usr/include/c++/15/bits/std_function.h + mdp:/usr/include/c++/15/bits/std_mutex.h + mdp:/usr/include/c++/15/bits/stl_algo.h + mdp:/usr/include/c++/15/bits/stl_algobase.h + mdp:/usr/include/c++/15/bits/stl_bvector.h + mdp:/usr/include/c++/15/bits/stl_construct.h + mdp:/usr/include/c++/15/bits/stl_function.h + mdp:/usr/include/c++/15/bits/stl_heap.h + mdp:/usr/include/c++/15/bits/stl_iterator.h + mdp:/usr/include/c++/15/bits/stl_iterator_base_funcs.h + mdp:/usr/include/c++/15/bits/stl_iterator_base_types.h + mdp:/usr/include/c++/15/bits/stl_list.h + mdp:/usr/include/c++/15/bits/stl_map.h + mdp:/usr/include/c++/15/bits/stl_multimap.h + mdp:/usr/include/c++/15/bits/stl_multiset.h + mdp:/usr/include/c++/15/bits/stl_numeric.h + mdp:/usr/include/c++/15/bits/stl_pair.h + mdp:/usr/include/c++/15/bits/stl_raw_storage_iter.h + mdp:/usr/include/c++/15/bits/stl_relops.h + mdp:/usr/include/c++/15/bits/stl_set.h + mdp:/usr/include/c++/15/bits/stl_tempbuf.h + mdp:/usr/include/c++/15/bits/stl_tree.h + mdp:/usr/include/c++/15/bits/stl_uninitialized.h + mdp:/usr/include/c++/15/bits/stl_vector.h + mdp:/usr/include/c++/15/bits/stream_iterator.h + mdp:/usr/include/c++/15/bits/streambuf.tcc + mdp:/usr/include/c++/15/bits/streambuf_iterator.h + mdp:/usr/include/c++/15/bits/string_view.tcc + mdp:/usr/include/c++/15/bits/stringfwd.h + mdp:/usr/include/c++/15/bits/uniform_int_dist.h + mdp:/usr/include/c++/15/bits/unique_ptr.h + mdp:/usr/include/c++/15/bits/unordered_map.h + mdp:/usr/include/c++/15/bits/unordered_set.h + mdp:/usr/include/c++/15/bits/uses_allocator.h + mdp:/usr/include/c++/15/bits/uses_allocator_args.h + mdp:/usr/include/c++/15/bits/utility.h + mdp:/usr/include/c++/15/bits/vector.tcc + mdp:/usr/include/c++/15/bits/version.h + mdp:/usr/include/c++/15/cassert + mdp:/usr/include/c++/15/cctype + mdp:/usr/include/c++/15/cerrno + mdp:/usr/include/c++/15/charconv + mdp:/usr/include/c++/15/chrono + mdp:/usr/include/c++/15/climits + mdp:/usr/include/c++/15/clocale + mdp:/usr/include/c++/15/cmath + mdp:/usr/include/c++/15/compare + mdp:/usr/include/c++/15/concepts + mdp:/usr/include/c++/15/cstddef + mdp:/usr/include/c++/15/cstdint + mdp:/usr/include/c++/15/cstdio + mdp:/usr/include/c++/15/cstdlib + mdp:/usr/include/c++/15/cstring + mdp:/usr/include/c++/15/ctime + mdp:/usr/include/c++/15/cwchar + mdp:/usr/include/c++/15/cwctype + mdp:/usr/include/c++/15/debug/assertions.h + mdp:/usr/include/c++/15/debug/debug.h + mdp:/usr/include/c++/15/exception + mdp:/usr/include/c++/15/ext/aligned_buffer.h + mdp:/usr/include/c++/15/ext/alloc_traits.h + mdp:/usr/include/c++/15/ext/atomicity.h + mdp:/usr/include/c++/15/ext/concurrence.h + mdp:/usr/include/c++/15/ext/numeric_traits.h + mdp:/usr/include/c++/15/ext/string_conversions.h + mdp:/usr/include/c++/15/ext/type_traits.h + mdp:/usr/include/c++/15/filesystem + mdp:/usr/include/c++/15/format + mdp:/usr/include/c++/15/functional + mdp:/usr/include/c++/15/initializer_list + mdp:/usr/include/c++/15/iomanip + mdp:/usr/include/c++/15/ios + mdp:/usr/include/c++/15/iosfwd + mdp:/usr/include/c++/15/istream + mdp:/usr/include/c++/15/iterator + mdp:/usr/include/c++/15/limits + mdp:/usr/include/c++/15/list + mdp:/usr/include/c++/15/locale + mdp:/usr/include/c++/15/map + mdp:/usr/include/c++/15/memory + mdp:/usr/include/c++/15/new + mdp:/usr/include/c++/15/numeric + mdp:/usr/include/c++/15/optional + mdp:/usr/include/c++/15/ostream + mdp:/usr/include/c++/15/pstl/execution_defs.h + mdp:/usr/include/c++/15/pstl/glue_numeric_defs.h + mdp:/usr/include/c++/15/pstl/pstl_config.h + mdp:/usr/include/c++/15/ratio + mdp:/usr/include/c++/15/set + mdp:/usr/include/c++/15/sstream + mdp:/usr/include/c++/15/stdexcept + mdp:/usr/include/c++/15/streambuf + mdp:/usr/include/c++/15/string + mdp:/usr/include/c++/15/string_view + mdp:/usr/include/c++/15/system_error + mdp:/usr/include/c++/15/tr1/bessel_function.tcc + mdp:/usr/include/c++/15/tr1/beta_function.tcc + mdp:/usr/include/c++/15/tr1/ell_integral.tcc + mdp:/usr/include/c++/15/tr1/exp_integral.tcc + mdp:/usr/include/c++/15/tr1/gamma.tcc + mdp:/usr/include/c++/15/tr1/hypergeometric.tcc + mdp:/usr/include/c++/15/tr1/legendre_function.tcc + mdp:/usr/include/c++/15/tr1/modified_bessel_func.tcc + mdp:/usr/include/c++/15/tr1/poly_hermite.tcc + mdp:/usr/include/c++/15/tr1/poly_laguerre.tcc + mdp:/usr/include/c++/15/tr1/riemann_zeta.tcc + mdp:/usr/include/c++/15/tr1/special_function_util.h + mdp:/usr/include/c++/15/tuple + mdp:/usr/include/c++/15/type_traits + mdp:/usr/include/c++/15/typeinfo + mdp:/usr/include/c++/15/unordered_map + mdp:/usr/include/c++/15/unordered_set + mdp:/usr/include/c++/15/utility + mdp:/usr/include/c++/15/variant + mdp:/usr/include/c++/15/vector + mdp:/usr/include/c++/15/version + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/atomic_word.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++allocator.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++config.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++locale.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/cpu_defines.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/ctype_base.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/ctype_inline.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/error_constants.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/gthr-default.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/gthr.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/messages_members.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/os_defines.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/time_members.h + mdp:/usr/include/ctype.h + mdp:/usr/include/endian.h + mdp:/usr/include/errno.h + mdp:/usr/include/features-time64.h + mdp:/usr/include/features.h + mdp:/usr/include/gnu/stubs-64.h + mdp:/usr/include/gnu/stubs.h + mdp:/usr/include/libintl.h + mdp:/usr/include/limits.h + mdp:/usr/include/linux/close_range.h + mdp:/usr/include/linux/errno.h + mdp:/usr/include/linux/limits.h + mdp:/usr/include/linux/posix_types.h + mdp:/usr/include/linux/sched/types.h + mdp:/usr/include/linux/stddef.h + mdp:/usr/include/linux/types.h + mdp:/usr/include/locale.h + mdp:/usr/include/pthread.h + mdp:/usr/include/qt6/QtCore/QDir + mdp:/usr/include/qt6/QtCore/QFileInfo + mdp:/usr/include/qt6/QtCore/QHash + mdp:/usr/include/qt6/QtCore/QHashFunctions + mdp:/usr/include/qt6/QtCore/QObject + mdp:/usr/include/qt6/QtCore/QRegularExpression + mdp:/usr/include/qt6/QtCore/QString + mdp:/usr/include/qt6/QtCore/QStringList + mdp:/usr/include/qt6/QtCore/QVector + mdp:/usr/include/qt6/QtCore/q17memory.h + mdp:/usr/include/qt6/QtCore/q20functional.h + mdp:/usr/include/qt6/QtCore/q20iterator.h + mdp:/usr/include/qt6/QtCore/q20memory.h + mdp:/usr/include/qt6/QtCore/q20type_traits.h + mdp:/usr/include/qt6/QtCore/q20utility.h + mdp:/usr/include/qt6/QtCore/q23type_traits.h + mdp:/usr/include/qt6/QtCore/q23utility.h + mdp:/usr/include/qt6/QtCore/qalgorithms.h + mdp:/usr/include/qt6/QtCore/qalloc.h + mdp:/usr/include/qt6/QtCore/qanystringview.h + mdp:/usr/include/qt6/QtCore/qarraydata.h + mdp:/usr/include/qt6/QtCore/qarraydataops.h + mdp:/usr/include/qt6/QtCore/qarraydatapointer.h + mdp:/usr/include/qt6/QtCore/qassert.h + mdp:/usr/include/qt6/QtCore/qatomic.h + mdp:/usr/include/qt6/QtCore/qatomic_cxx11.h + mdp:/usr/include/qt6/QtCore/qbasicatomic.h + mdp:/usr/include/qt6/QtCore/qbindingstorage.h + mdp:/usr/include/qt6/QtCore/qbytearray.h + mdp:/usr/include/qt6/QtCore/qbytearrayalgorithms.h + mdp:/usr/include/qt6/QtCore/qbytearraylist.h + mdp:/usr/include/qt6/QtCore/qbytearrayview.h + mdp:/usr/include/qt6/QtCore/qcalendar.h + mdp:/usr/include/qt6/QtCore/qchar.h + mdp:/usr/include/qt6/QtCore/qcompare.h + mdp:/usr/include/qt6/QtCore/qcompare_impl.h + mdp:/usr/include/qt6/QtCore/qcomparehelpers.h + mdp:/usr/include/qt6/QtCore/qcompilerdetection.h + mdp:/usr/include/qt6/QtCore/qconfig-64.h + mdp:/usr/include/qt6/QtCore/qconfig.h + mdp:/usr/include/qt6/QtCore/qconstructormacros.h + mdp:/usr/include/qt6/QtCore/qcontainerfwd.h + mdp:/usr/include/qt6/QtCore/qcontainerinfo.h + mdp:/usr/include/qt6/QtCore/qcontainertools_impl.h + mdp:/usr/include/qt6/QtCore/qcontiguouscache.h + mdp:/usr/include/qt6/QtCore/qdarwinhelpers.h + mdp:/usr/include/qt6/QtCore/qdatastream.h + mdp:/usr/include/qt6/QtCore/qdatetime.h + mdp:/usr/include/qt6/QtCore/qdebug.h + mdp:/usr/include/qt6/QtCore/qdir.h + mdp:/usr/include/qt6/QtCore/qdirlisting.h + mdp:/usr/include/qt6/QtCore/qexceptionhandling.h + mdp:/usr/include/qt6/QtCore/qfile.h + mdp:/usr/include/qt6/QtCore/qfiledevice.h + mdp:/usr/include/qt6/QtCore/qfileinfo.h + mdp:/usr/include/qt6/QtCore/qflags.h + mdp:/usr/include/qt6/QtCore/qfloat16.h + mdp:/usr/include/qt6/QtCore/qforeach.h + mdp:/usr/include/qt6/QtCore/qfunctionaltools_impl.h + mdp:/usr/include/qt6/QtCore/qfunctionpointer.h + mdp:/usr/include/qt6/QtCore/qgenericatomic.h + mdp:/usr/include/qt6/QtCore/qglobal.h + mdp:/usr/include/qt6/QtCore/qglobalstatic.h + mdp:/usr/include/qt6/QtCore/qhash.h + mdp:/usr/include/qt6/QtCore/qhashfunctions.h + mdp:/usr/include/qt6/QtCore/qiodevice.h + mdp:/usr/include/qt6/QtCore/qiodevicebase.h + mdp:/usr/include/qt6/QtCore/qiterable.h + mdp:/usr/include/qt6/QtCore/qiterator.h + mdp:/usr/include/qt6/QtCore/qlatin1stringview.h + mdp:/usr/include/qt6/QtCore/qlist.h + mdp:/usr/include/qt6/QtCore/qlocale.h + mdp:/usr/include/qt6/QtCore/qlogging.h + mdp:/usr/include/qt6/QtCore/qmalloc.h + mdp:/usr/include/qt6/QtCore/qmap.h + mdp:/usr/include/qt6/QtCore/qmath.h + mdp:/usr/include/qt6/QtCore/qmetacontainer.h + mdp:/usr/include/qt6/QtCore/qmetatype.h + mdp:/usr/include/qt6/QtCore/qminmax.h + mdp:/usr/include/qt6/QtCore/qnamespace.h + mdp:/usr/include/qt6/QtCore/qnumeric.h + mdp:/usr/include/qt6/QtCore/qobject.h + mdp:/usr/include/qt6/QtCore/qobject_impl.h + mdp:/usr/include/qt6/QtCore/qobjectdefs.h + mdp:/usr/include/qt6/QtCore/qobjectdefs_impl.h + mdp:/usr/include/qt6/QtCore/qoverload.h + mdp:/usr/include/qt6/QtCore/qpair.h + mdp:/usr/include/qt6/QtCore/qprocessordetection.h + mdp:/usr/include/qt6/QtCore/qrefcount.h + mdp:/usr/include/qt6/QtCore/qregularexpression.h + mdp:/usr/include/qt6/QtCore/qscopedpointer.h + mdp:/usr/include/qt6/QtCore/qscopeguard.h + mdp:/usr/include/qt6/QtCore/qset.h + mdp:/usr/include/qt6/QtCore/qshareddata.h + mdp:/usr/include/qt6/QtCore/qshareddata_impl.h + mdp:/usr/include/qt6/QtCore/qsharedpointer.h + mdp:/usr/include/qt6/QtCore/qsharedpointer_impl.h + mdp:/usr/include/qt6/QtCore/qspan.h + mdp:/usr/include/qt6/QtCore/qstdlibdetection.h + mdp:/usr/include/qt6/QtCore/qstring.h + mdp:/usr/include/qt6/QtCore/qstringalgorithms.h + mdp:/usr/include/qt6/QtCore/qstringbuilder.h + mdp:/usr/include/qt6/QtCore/qstringconverter.h + mdp:/usr/include/qt6/QtCore/qstringconverter_base.h + mdp:/usr/include/qt6/QtCore/qstringfwd.h + mdp:/usr/include/qt6/QtCore/qstringlist.h + mdp:/usr/include/qt6/QtCore/qstringmatcher.h + mdp:/usr/include/qt6/QtCore/qstringtokenizer.h + mdp:/usr/include/qt6/QtCore/qstringview.h + mdp:/usr/include/qt6/QtCore/qswap.h + mdp:/usr/include/qt6/QtCore/qsysinfo.h + mdp:/usr/include/qt6/QtCore/qsystemdetection.h + mdp:/usr/include/qt6/QtCore/qtaggedpointer.h + mdp:/usr/include/qt6/QtCore/qtclasshelpermacros.h + mdp:/usr/include/qt6/QtCore/qtconfiginclude.h + mdp:/usr/include/qt6/QtCore/qtconfigmacros.h + mdp:/usr/include/qt6/QtCore/qtcore-config.h + mdp:/usr/include/qt6/QtCore/qtcoreexports.h + mdp:/usr/include/qt6/QtCore/qtcoreglobal.h + mdp:/usr/include/qt6/QtCore/qtdeprecationdefinitions.h + mdp:/usr/include/qt6/QtCore/qtdeprecationmarkers.h + mdp:/usr/include/qt6/QtCore/qtenvironmentvariables.h + mdp:/usr/include/qt6/QtCore/qtextstream.h + mdp:/usr/include/qt6/QtCore/qtformat_impl.h + mdp:/usr/include/qt6/QtCore/qtimezone.h + mdp:/usr/include/qt6/QtCore/qtmetamacros.h + mdp:/usr/include/qt6/QtCore/qtnoop.h + mdp:/usr/include/qt6/QtCore/qtpreprocessorsupport.h + mdp:/usr/include/qt6/QtCore/qtresource.h + mdp:/usr/include/qt6/QtCore/qttranslation.h + mdp:/usr/include/qt6/QtCore/qttypetraits.h + mdp:/usr/include/qt6/QtCore/qtversion.h + mdp:/usr/include/qt6/QtCore/qtversionchecks.h + mdp:/usr/include/qt6/QtCore/qtypeinfo.h + mdp:/usr/include/qt6/QtCore/qtypes.h + mdp:/usr/include/qt6/QtCore/qutf8stringview.h + mdp:/usr/include/qt6/QtCore/qvariant.h + mdp:/usr/include/qt6/QtCore/qvarlengtharray.h + mdp:/usr/include/qt6/QtCore/qvector.h + mdp:/usr/include/qt6/QtCore/qversiontagging.h + mdp:/usr/include/qt6/QtCore/qxptype_traits.h + mdp:/usr/include/qt6/QtCore/qyieldcpu.h + mdp:/usr/include/sched.h + mdp:/usr/include/stdc-predef.h + mdp:/usr/include/stdint.h + mdp:/usr/include/stdio.h + mdp:/usr/include/stdlib.h + mdp:/usr/include/string.h + mdp:/usr/include/strings.h + mdp:/usr/include/sys/cdefs.h + mdp:/usr/include/sys/select.h + mdp:/usr/include/sys/single_threaded.h + mdp:/usr/include/sys/syscall.h + mdp:/usr/include/sys/types.h + mdp:/usr/include/syscall.h + mdp:/usr/include/time.h + mdp:/usr/include/unistd.h + mdp:/usr/include/wchar.h + mdp:/usr/include/wctype.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stdarg.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stdbool.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stddef.h +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/database_health_dialog.h + mmc:Q_OBJECT + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/kassetmanagerqt_autogen/moc_predefs.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/database_health_agent.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/database_health_dialog.h + mdp:/usr/include/alloca.h + mdp:/usr/include/asm-generic/bitsperlong.h + mdp:/usr/include/asm-generic/errno-base.h + mdp:/usr/include/asm-generic/errno.h + mdp:/usr/include/asm-generic/int-ll64.h + mdp:/usr/include/asm-generic/posix_types.h + mdp:/usr/include/asm-generic/types.h + mdp:/usr/include/asm/bitsperlong.h + mdp:/usr/include/asm/errno.h + mdp:/usr/include/asm/posix_types.h + mdp:/usr/include/asm/posix_types_64.h + mdp:/usr/include/asm/types.h + mdp:/usr/include/asm/unistd.h + mdp:/usr/include/asm/unistd_64.h + mdp:/usr/include/assert.h + mdp:/usr/include/bits/atomic_wide_counter.h + mdp:/usr/include/bits/byteswap.h + mdp:/usr/include/bits/confname.h + mdp:/usr/include/bits/cpu-set.h + mdp:/usr/include/bits/endian.h + mdp:/usr/include/bits/endianness.h + mdp:/usr/include/bits/environments.h + mdp:/usr/include/bits/errno.h + mdp:/usr/include/bits/floatn-common.h + mdp:/usr/include/bits/floatn.h + mdp:/usr/include/bits/getopt_core.h + mdp:/usr/include/bits/getopt_posix.h + mdp:/usr/include/bits/libc-header-start.h + mdp:/usr/include/bits/local_lim.h + mdp:/usr/include/bits/locale.h + mdp:/usr/include/bits/long-double.h + mdp:/usr/include/bits/posix1_lim.h + mdp:/usr/include/bits/posix2_lim.h + mdp:/usr/include/bits/posix_opt.h + mdp:/usr/include/bits/pthread_stack_min-dynamic.h + mdp:/usr/include/bits/pthreadtypes-arch.h + mdp:/usr/include/bits/pthreadtypes.h + mdp:/usr/include/bits/sched.h + mdp:/usr/include/bits/select.h + mdp:/usr/include/bits/setjmp.h + mdp:/usr/include/bits/stdint-intn.h + mdp:/usr/include/bits/stdint-least.h + mdp:/usr/include/bits/stdint-uintn.h + mdp:/usr/include/bits/stdio_lim.h + mdp:/usr/include/bits/stdlib-float.h + mdp:/usr/include/bits/struct_mutex.h + mdp:/usr/include/bits/struct_rwlock.h + mdp:/usr/include/bits/syscall.h + mdp:/usr/include/bits/thread-shared-types.h + mdp:/usr/include/bits/time.h + mdp:/usr/include/bits/time64.h + mdp:/usr/include/bits/timesize.h + mdp:/usr/include/bits/timex.h + mdp:/usr/include/bits/types.h + mdp:/usr/include/bits/types/FILE.h + mdp:/usr/include/bits/types/__FILE.h + mdp:/usr/include/bits/types/__fpos64_t.h + mdp:/usr/include/bits/types/__fpos_t.h + mdp:/usr/include/bits/types/__locale_t.h + mdp:/usr/include/bits/types/__mbstate_t.h + mdp:/usr/include/bits/types/__sigset_t.h + mdp:/usr/include/bits/types/clock_t.h + mdp:/usr/include/bits/types/clockid_t.h + mdp:/usr/include/bits/types/cookie_io_functions_t.h + mdp:/usr/include/bits/types/error_t.h + mdp:/usr/include/bits/types/locale_t.h + mdp:/usr/include/bits/types/mbstate_t.h + mdp:/usr/include/bits/types/sigset_t.h + mdp:/usr/include/bits/types/struct_FILE.h + mdp:/usr/include/bits/types/struct___jmp_buf_tag.h + mdp:/usr/include/bits/types/struct_itimerspec.h + mdp:/usr/include/bits/types/struct_sched_param.h + mdp:/usr/include/bits/types/struct_timespec.h + mdp:/usr/include/bits/types/struct_timeval.h + mdp:/usr/include/bits/types/struct_tm.h + mdp:/usr/include/bits/types/time_t.h + mdp:/usr/include/bits/types/timer_t.h + mdp:/usr/include/bits/types/wint_t.h + mdp:/usr/include/bits/typesizes.h + mdp:/usr/include/bits/uintn-identity.h + mdp:/usr/include/bits/uio_lim.h + mdp:/usr/include/bits/unistd_ext.h + mdp:/usr/include/bits/waitflags.h + mdp:/usr/include/bits/waitstatus.h + mdp:/usr/include/bits/wchar.h + mdp:/usr/include/bits/wctype-wchar.h + mdp:/usr/include/bits/wordsize.h + mdp:/usr/include/bits/xopen_lim.h + mdp:/usr/include/c++/15/algorithm + mdp:/usr/include/c++/15/array + mdp:/usr/include/c++/15/atomic + mdp:/usr/include/c++/15/backward/auto_ptr.h + mdp:/usr/include/c++/15/backward/binders.h + mdp:/usr/include/c++/15/bit + mdp:/usr/include/c++/15/bits/algorithmfwd.h + mdp:/usr/include/c++/15/bits/align.h + mdp:/usr/include/c++/15/bits/alloc_traits.h + mdp:/usr/include/c++/15/bits/allocated_ptr.h + mdp:/usr/include/c++/15/bits/allocator.h + mdp:/usr/include/c++/15/bits/atomic_base.h + mdp:/usr/include/c++/15/bits/atomic_lockfree_defines.h + mdp:/usr/include/c++/15/bits/atomic_wait.h + mdp:/usr/include/c++/15/bits/basic_ios.h + mdp:/usr/include/c++/15/bits/basic_ios.tcc + mdp:/usr/include/c++/15/bits/basic_string.h + mdp:/usr/include/c++/15/bits/basic_string.tcc + mdp:/usr/include/c++/15/bits/char_traits.h + mdp:/usr/include/c++/15/bits/charconv.h + mdp:/usr/include/c++/15/bits/chrono.h + mdp:/usr/include/c++/15/bits/chrono_io.h + mdp:/usr/include/c++/15/bits/codecvt.h + mdp:/usr/include/c++/15/bits/concept_check.h + mdp:/usr/include/c++/15/bits/cpp_type_traits.h + mdp:/usr/include/c++/15/bits/cxxabi_forced.h + mdp:/usr/include/c++/15/bits/cxxabi_init_exception.h + mdp:/usr/include/c++/15/bits/enable_special_members.h + mdp:/usr/include/c++/15/bits/erase_if.h + mdp:/usr/include/c++/15/bits/exception.h + mdp:/usr/include/c++/15/bits/exception_defines.h + mdp:/usr/include/c++/15/bits/exception_ptr.h + mdp:/usr/include/c++/15/bits/functexcept.h + mdp:/usr/include/c++/15/bits/functional_hash.h + mdp:/usr/include/c++/15/bits/hash_bytes.h + mdp:/usr/include/c++/15/bits/hashtable.h + mdp:/usr/include/c++/15/bits/hashtable_policy.h + mdp:/usr/include/c++/15/bits/invoke.h + mdp:/usr/include/c++/15/bits/ios_base.h + mdp:/usr/include/c++/15/bits/istream.tcc + mdp:/usr/include/c++/15/bits/iterator_concepts.h + mdp:/usr/include/c++/15/bits/list.tcc + mdp:/usr/include/c++/15/bits/locale_classes.h + mdp:/usr/include/c++/15/bits/locale_classes.tcc + mdp:/usr/include/c++/15/bits/locale_conv.h + mdp:/usr/include/c++/15/bits/locale_facets.h + mdp:/usr/include/c++/15/bits/locale_facets.tcc + mdp:/usr/include/c++/15/bits/locale_facets_nonio.h + mdp:/usr/include/c++/15/bits/locale_facets_nonio.tcc + mdp:/usr/include/c++/15/bits/localefwd.h + mdp:/usr/include/c++/15/bits/max_size_type.h + mdp:/usr/include/c++/15/bits/memory_resource.h + mdp:/usr/include/c++/15/bits/memoryfwd.h + mdp:/usr/include/c++/15/bits/move.h + mdp:/usr/include/c++/15/bits/nested_exception.h + mdp:/usr/include/c++/15/bits/new_allocator.h + mdp:/usr/include/c++/15/bits/node_handle.h + mdp:/usr/include/c++/15/bits/ostream.h + mdp:/usr/include/c++/15/bits/ostream.tcc + mdp:/usr/include/c++/15/bits/ostream_insert.h + mdp:/usr/include/c++/15/bits/parse_numbers.h + mdp:/usr/include/c++/15/bits/postypes.h + mdp:/usr/include/c++/15/bits/predefined_ops.h + mdp:/usr/include/c++/15/bits/ptr_traits.h + mdp:/usr/include/c++/15/bits/quoted_string.h + mdp:/usr/include/c++/15/bits/range_access.h + mdp:/usr/include/c++/15/bits/ranges_algo.h + mdp:/usr/include/c++/15/bits/ranges_algobase.h + mdp:/usr/include/c++/15/bits/ranges_base.h + mdp:/usr/include/c++/15/bits/ranges_cmp.h + mdp:/usr/include/c++/15/bits/ranges_uninitialized.h + mdp:/usr/include/c++/15/bits/ranges_util.h + mdp:/usr/include/c++/15/bits/refwrap.h + mdp:/usr/include/c++/15/bits/requires_hosted.h + mdp:/usr/include/c++/15/bits/shared_ptr.h + mdp:/usr/include/c++/15/bits/shared_ptr_atomic.h + mdp:/usr/include/c++/15/bits/shared_ptr_base.h + mdp:/usr/include/c++/15/bits/specfun.h + mdp:/usr/include/c++/15/bits/sstream.tcc + mdp:/usr/include/c++/15/bits/std_abs.h + mdp:/usr/include/c++/15/bits/std_function.h + mdp:/usr/include/c++/15/bits/std_mutex.h + mdp:/usr/include/c++/15/bits/stl_algo.h + mdp:/usr/include/c++/15/bits/stl_algobase.h + mdp:/usr/include/c++/15/bits/stl_bvector.h + mdp:/usr/include/c++/15/bits/stl_construct.h + mdp:/usr/include/c++/15/bits/stl_function.h + mdp:/usr/include/c++/15/bits/stl_heap.h + mdp:/usr/include/c++/15/bits/stl_iterator.h + mdp:/usr/include/c++/15/bits/stl_iterator_base_funcs.h + mdp:/usr/include/c++/15/bits/stl_iterator_base_types.h + mdp:/usr/include/c++/15/bits/stl_list.h + mdp:/usr/include/c++/15/bits/stl_map.h + mdp:/usr/include/c++/15/bits/stl_multimap.h + mdp:/usr/include/c++/15/bits/stl_multiset.h + mdp:/usr/include/c++/15/bits/stl_numeric.h + mdp:/usr/include/c++/15/bits/stl_pair.h + mdp:/usr/include/c++/15/bits/stl_raw_storage_iter.h + mdp:/usr/include/c++/15/bits/stl_relops.h + mdp:/usr/include/c++/15/bits/stl_set.h + mdp:/usr/include/c++/15/bits/stl_tempbuf.h + mdp:/usr/include/c++/15/bits/stl_tree.h + mdp:/usr/include/c++/15/bits/stl_uninitialized.h + mdp:/usr/include/c++/15/bits/stl_vector.h + mdp:/usr/include/c++/15/bits/stream_iterator.h + mdp:/usr/include/c++/15/bits/streambuf.tcc + mdp:/usr/include/c++/15/bits/streambuf_iterator.h + mdp:/usr/include/c++/15/bits/string_view.tcc + mdp:/usr/include/c++/15/bits/stringfwd.h + mdp:/usr/include/c++/15/bits/uniform_int_dist.h + mdp:/usr/include/c++/15/bits/unique_ptr.h + mdp:/usr/include/c++/15/bits/unordered_map.h + mdp:/usr/include/c++/15/bits/unordered_set.h + mdp:/usr/include/c++/15/bits/uses_allocator.h + mdp:/usr/include/c++/15/bits/uses_allocator_args.h + mdp:/usr/include/c++/15/bits/utility.h + mdp:/usr/include/c++/15/bits/vector.tcc + mdp:/usr/include/c++/15/bits/version.h + mdp:/usr/include/c++/15/cassert + mdp:/usr/include/c++/15/cctype + mdp:/usr/include/c++/15/cerrno + mdp:/usr/include/c++/15/charconv + mdp:/usr/include/c++/15/chrono + mdp:/usr/include/c++/15/climits + mdp:/usr/include/c++/15/clocale + mdp:/usr/include/c++/15/cmath + mdp:/usr/include/c++/15/compare + mdp:/usr/include/c++/15/concepts + mdp:/usr/include/c++/15/cstddef + mdp:/usr/include/c++/15/cstdint + mdp:/usr/include/c++/15/cstdio + mdp:/usr/include/c++/15/cstdlib + mdp:/usr/include/c++/15/cstring + mdp:/usr/include/c++/15/ctime + mdp:/usr/include/c++/15/cwchar + mdp:/usr/include/c++/15/cwctype + mdp:/usr/include/c++/15/debug/assertions.h + mdp:/usr/include/c++/15/debug/debug.h + mdp:/usr/include/c++/15/exception + mdp:/usr/include/c++/15/ext/aligned_buffer.h + mdp:/usr/include/c++/15/ext/alloc_traits.h + mdp:/usr/include/c++/15/ext/atomicity.h + mdp:/usr/include/c++/15/ext/concurrence.h + mdp:/usr/include/c++/15/ext/numeric_traits.h + mdp:/usr/include/c++/15/ext/string_conversions.h + mdp:/usr/include/c++/15/ext/type_traits.h + mdp:/usr/include/c++/15/format + mdp:/usr/include/c++/15/functional + mdp:/usr/include/c++/15/initializer_list + mdp:/usr/include/c++/15/iomanip + mdp:/usr/include/c++/15/ios + mdp:/usr/include/c++/15/iosfwd + mdp:/usr/include/c++/15/istream + mdp:/usr/include/c++/15/iterator + mdp:/usr/include/c++/15/limits + mdp:/usr/include/c++/15/list + mdp:/usr/include/c++/15/locale + mdp:/usr/include/c++/15/map + mdp:/usr/include/c++/15/memory + mdp:/usr/include/c++/15/new + mdp:/usr/include/c++/15/numeric + mdp:/usr/include/c++/15/optional + mdp:/usr/include/c++/15/ostream + mdp:/usr/include/c++/15/pstl/execution_defs.h + mdp:/usr/include/c++/15/pstl/glue_numeric_defs.h + mdp:/usr/include/c++/15/pstl/pstl_config.h + mdp:/usr/include/c++/15/ratio + mdp:/usr/include/c++/15/set + mdp:/usr/include/c++/15/sstream + mdp:/usr/include/c++/15/stdexcept + mdp:/usr/include/c++/15/streambuf + mdp:/usr/include/c++/15/string + mdp:/usr/include/c++/15/string_view + mdp:/usr/include/c++/15/system_error + mdp:/usr/include/c++/15/tr1/bessel_function.tcc + mdp:/usr/include/c++/15/tr1/beta_function.tcc + mdp:/usr/include/c++/15/tr1/ell_integral.tcc + mdp:/usr/include/c++/15/tr1/exp_integral.tcc + mdp:/usr/include/c++/15/tr1/gamma.tcc + mdp:/usr/include/c++/15/tr1/hypergeometric.tcc + mdp:/usr/include/c++/15/tr1/legendre_function.tcc + mdp:/usr/include/c++/15/tr1/modified_bessel_func.tcc + mdp:/usr/include/c++/15/tr1/poly_hermite.tcc + mdp:/usr/include/c++/15/tr1/poly_laguerre.tcc + mdp:/usr/include/c++/15/tr1/riemann_zeta.tcc + mdp:/usr/include/c++/15/tr1/special_function_util.h + mdp:/usr/include/c++/15/tuple + mdp:/usr/include/c++/15/type_traits + mdp:/usr/include/c++/15/typeinfo + mdp:/usr/include/c++/15/unordered_map + mdp:/usr/include/c++/15/unordered_set + mdp:/usr/include/c++/15/utility + mdp:/usr/include/c++/15/variant + mdp:/usr/include/c++/15/vector + mdp:/usr/include/c++/15/version + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/atomic_word.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++allocator.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++config.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++locale.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/cpu_defines.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/ctype_base.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/ctype_inline.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/error_constants.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/gthr-default.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/gthr.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/messages_members.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/os_defines.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/time_members.h + mdp:/usr/include/ctype.h + mdp:/usr/include/endian.h + mdp:/usr/include/errno.h + mdp:/usr/include/features-time64.h + mdp:/usr/include/features.h + mdp:/usr/include/gnu/stubs-64.h + mdp:/usr/include/gnu/stubs.h + mdp:/usr/include/libintl.h + mdp:/usr/include/limits.h + mdp:/usr/include/linux/close_range.h + mdp:/usr/include/linux/errno.h + mdp:/usr/include/linux/limits.h + mdp:/usr/include/linux/posix_types.h + mdp:/usr/include/linux/sched/types.h + mdp:/usr/include/linux/stddef.h + mdp:/usr/include/linux/types.h + mdp:/usr/include/locale.h + mdp:/usr/include/pthread.h + mdp:/usr/include/qt6/QtCore/QDateTime + mdp:/usr/include/qt6/QtCore/QObject + mdp:/usr/include/qt6/QtCore/QString + mdp:/usr/include/qt6/QtCore/QVector + mdp:/usr/include/qt6/QtCore/q17memory.h + mdp:/usr/include/qt6/QtCore/q20functional.h + mdp:/usr/include/qt6/QtCore/q20iterator.h + mdp:/usr/include/qt6/QtCore/q20memory.h + mdp:/usr/include/qt6/QtCore/q20type_traits.h + mdp:/usr/include/qt6/QtCore/q20utility.h + mdp:/usr/include/qt6/QtCore/q23type_traits.h + mdp:/usr/include/qt6/QtCore/q23utility.h + mdp:/usr/include/qt6/QtCore/qabstractitemmodel.h + mdp:/usr/include/qt6/QtCore/qalgorithms.h + mdp:/usr/include/qt6/QtCore/qalloc.h + mdp:/usr/include/qt6/QtCore/qanystringview.h + mdp:/usr/include/qt6/QtCore/qarraydata.h + mdp:/usr/include/qt6/QtCore/qarraydataops.h + mdp:/usr/include/qt6/QtCore/qarraydatapointer.h + mdp:/usr/include/qt6/QtCore/qassert.h + mdp:/usr/include/qt6/QtCore/qatomic.h + mdp:/usr/include/qt6/QtCore/qatomic_cxx11.h + mdp:/usr/include/qt6/QtCore/qbasicatomic.h + mdp:/usr/include/qt6/QtCore/qbindingstorage.h + mdp:/usr/include/qt6/QtCore/qbytearray.h + mdp:/usr/include/qt6/QtCore/qbytearrayalgorithms.h + mdp:/usr/include/qt6/QtCore/qbytearraylist.h + mdp:/usr/include/qt6/QtCore/qbytearrayview.h + mdp:/usr/include/qt6/QtCore/qcalendar.h + mdp:/usr/include/qt6/QtCore/qchar.h + mdp:/usr/include/qt6/QtCore/qcheckedint_impl.h + mdp:/usr/include/qt6/QtCore/qcompare.h + mdp:/usr/include/qt6/QtCore/qcompare_impl.h + mdp:/usr/include/qt6/QtCore/qcomparehelpers.h + mdp:/usr/include/qt6/QtCore/qcompilerdetection.h + mdp:/usr/include/qt6/QtCore/qconfig-64.h + mdp:/usr/include/qt6/QtCore/qconfig.h + mdp:/usr/include/qt6/QtCore/qconstructormacros.h + mdp:/usr/include/qt6/QtCore/qcontainerfwd.h + mdp:/usr/include/qt6/QtCore/qcontainerinfo.h + mdp:/usr/include/qt6/QtCore/qcontainertools_impl.h + mdp:/usr/include/qt6/QtCore/qcontiguouscache.h + mdp:/usr/include/qt6/QtCore/qdarwinhelpers.h + mdp:/usr/include/qt6/QtCore/qdatastream.h + mdp:/usr/include/qt6/QtCore/qdatetime.h + mdp:/usr/include/qt6/QtCore/qdebug.h + mdp:/usr/include/qt6/QtCore/qendian.h + mdp:/usr/include/qt6/QtCore/qexceptionhandling.h + mdp:/usr/include/qt6/QtCore/qflags.h + mdp:/usr/include/qt6/QtCore/qfloat16.h + mdp:/usr/include/qt6/QtCore/qforeach.h + mdp:/usr/include/qt6/QtCore/qfunctionaltools_impl.h + mdp:/usr/include/qt6/QtCore/qfunctionpointer.h + mdp:/usr/include/qt6/QtCore/qgenericatomic.h + mdp:/usr/include/qt6/QtCore/qglobal.h + mdp:/usr/include/qt6/QtCore/qglobalstatic.h + mdp:/usr/include/qt6/QtCore/qhash.h + mdp:/usr/include/qt6/QtCore/qhashfunctions.h + mdp:/usr/include/qt6/QtCore/qiodevice.h + mdp:/usr/include/qt6/QtCore/qiodevicebase.h + mdp:/usr/include/qt6/QtCore/qitemselectionmodel.h + mdp:/usr/include/qt6/QtCore/qiterable.h + mdp:/usr/include/qt6/QtCore/qiterator.h + mdp:/usr/include/qt6/QtCore/qlatin1stringview.h + mdp:/usr/include/qt6/QtCore/qline.h + mdp:/usr/include/qt6/QtCore/qlist.h + mdp:/usr/include/qt6/QtCore/qlocale.h + mdp:/usr/include/qt6/QtCore/qlogging.h + mdp:/usr/include/qt6/QtCore/qmalloc.h + mdp:/usr/include/qt6/QtCore/qmap.h + mdp:/usr/include/qt6/QtCore/qmargins.h + mdp:/usr/include/qt6/QtCore/qmath.h + mdp:/usr/include/qt6/QtCore/qmetacontainer.h + mdp:/usr/include/qt6/QtCore/qmetatype.h + mdp:/usr/include/qt6/QtCore/qminmax.h + mdp:/usr/include/qt6/QtCore/qnamespace.h + mdp:/usr/include/qt6/QtCore/qnumeric.h + mdp:/usr/include/qt6/QtCore/qobject.h + mdp:/usr/include/qt6/QtCore/qobject_impl.h + mdp:/usr/include/qt6/QtCore/qobjectdefs.h + mdp:/usr/include/qt6/QtCore/qobjectdefs_impl.h + mdp:/usr/include/qt6/QtCore/qoverload.h + mdp:/usr/include/qt6/QtCore/qpair.h + mdp:/usr/include/qt6/QtCore/qpoint.h + mdp:/usr/include/qt6/QtCore/qprocessordetection.h + mdp:/usr/include/qt6/QtCore/qrect.h + mdp:/usr/include/qt6/QtCore/qrefcount.h + mdp:/usr/include/qt6/QtCore/qregularexpression.h + mdp:/usr/include/qt6/QtCore/qscopedpointer.h + mdp:/usr/include/qt6/QtCore/qscopeguard.h + mdp:/usr/include/qt6/QtCore/qset.h + mdp:/usr/include/qt6/QtCore/qshareddata.h + mdp:/usr/include/qt6/QtCore/qshareddata_impl.h + mdp:/usr/include/qt6/QtCore/qsharedpointer.h + mdp:/usr/include/qt6/QtCore/qsharedpointer_impl.h + mdp:/usr/include/qt6/QtCore/qsize.h + mdp:/usr/include/qt6/QtCore/qspan.h + mdp:/usr/include/qt6/QtCore/qstdlibdetection.h + mdp:/usr/include/qt6/QtCore/qstring.h + mdp:/usr/include/qt6/QtCore/qstringalgorithms.h + mdp:/usr/include/qt6/QtCore/qstringbuilder.h + mdp:/usr/include/qt6/QtCore/qstringconverter.h + mdp:/usr/include/qt6/QtCore/qstringconverter_base.h + mdp:/usr/include/qt6/QtCore/qstringfwd.h + mdp:/usr/include/qt6/QtCore/qstringlist.h + mdp:/usr/include/qt6/QtCore/qstringmatcher.h + mdp:/usr/include/qt6/QtCore/qstringtokenizer.h + mdp:/usr/include/qt6/QtCore/qstringview.h + mdp:/usr/include/qt6/QtCore/qswap.h + mdp:/usr/include/qt6/QtCore/qsysinfo.h + mdp:/usr/include/qt6/QtCore/qsystemdetection.h + mdp:/usr/include/qt6/QtCore/qtaggedpointer.h + mdp:/usr/include/qt6/QtCore/qtclasshelpermacros.h + mdp:/usr/include/qt6/QtCore/qtconfiginclude.h + mdp:/usr/include/qt6/QtCore/qtconfigmacros.h + mdp:/usr/include/qt6/QtCore/qtcore-config.h + mdp:/usr/include/qt6/QtCore/qtcoreexports.h + mdp:/usr/include/qt6/QtCore/qtcoreglobal.h + mdp:/usr/include/qt6/QtCore/qtdeprecationdefinitions.h + mdp:/usr/include/qt6/QtCore/qtdeprecationmarkers.h + mdp:/usr/include/qt6/QtCore/qtenvironmentvariables.h + mdp:/usr/include/qt6/QtCore/qtextstream.h + mdp:/usr/include/qt6/QtCore/qtformat_impl.h + mdp:/usr/include/qt6/QtCore/qtmetamacros.h + mdp:/usr/include/qt6/QtCore/qtnoop.h + mdp:/usr/include/qt6/QtCore/qtpreprocessorsupport.h + mdp:/usr/include/qt6/QtCore/qtresource.h + mdp:/usr/include/qt6/QtCore/qttranslation.h + mdp:/usr/include/qt6/QtCore/qttypetraits.h + mdp:/usr/include/qt6/QtCore/qtversion.h + mdp:/usr/include/qt6/QtCore/qtversionchecks.h + mdp:/usr/include/qt6/QtCore/qtypeinfo.h + mdp:/usr/include/qt6/QtCore/qtypes.h + mdp:/usr/include/qt6/QtCore/qurl.h + mdp:/usr/include/qt6/QtCore/qutf8stringview.h + mdp:/usr/include/qt6/QtCore/qvariant.h + mdp:/usr/include/qt6/QtCore/qvarlengtharray.h + mdp:/usr/include/qt6/QtCore/qvector.h + mdp:/usr/include/qt6/QtCore/qversiontagging.h + mdp:/usr/include/qt6/QtCore/qxptype_traits.h + mdp:/usr/include/qt6/QtCore/qyieldcpu.h + mdp:/usr/include/qt6/QtGui/qaction.h + mdp:/usr/include/qt6/QtGui/qbitmap.h + mdp:/usr/include/qt6/QtGui/qbrush.h + mdp:/usr/include/qt6/QtGui/qcolor.h + mdp:/usr/include/qt6/QtGui/qcursor.h + mdp:/usr/include/qt6/QtGui/qfont.h + mdp:/usr/include/qt6/QtGui/qfontinfo.h + mdp:/usr/include/qt6/QtGui/qfontmetrics.h + mdp:/usr/include/qt6/QtGui/qfontvariableaxis.h + mdp:/usr/include/qt6/QtGui/qicon.h + mdp:/usr/include/qt6/QtGui/qimage.h + mdp:/usr/include/qt6/QtGui/qkeysequence.h + mdp:/usr/include/qt6/QtGui/qpaintdevice.h + mdp:/usr/include/qt6/QtGui/qpalette.h + mdp:/usr/include/qt6/QtGui/qpen.h + mdp:/usr/include/qt6/QtGui/qpicture.h + mdp:/usr/include/qt6/QtGui/qpixelformat.h + mdp:/usr/include/qt6/QtGui/qpixmap.h + mdp:/usr/include/qt6/QtGui/qpolygon.h + mdp:/usr/include/qt6/QtGui/qregion.h + mdp:/usr/include/qt6/QtGui/qrgb.h + mdp:/usr/include/qt6/QtGui/qrgba64.h + mdp:/usr/include/qt6/QtGui/qtextcursor.h + mdp:/usr/include/qt6/QtGui/qtextdocument.h + mdp:/usr/include/qt6/QtGui/qtextformat.h + mdp:/usr/include/qt6/QtGui/qtextoption.h + mdp:/usr/include/qt6/QtGui/qtgui-config.h + mdp:/usr/include/qt6/QtGui/qtguiexports.h + mdp:/usr/include/qt6/QtGui/qtguiglobal.h + mdp:/usr/include/qt6/QtGui/qtransform.h + mdp:/usr/include/qt6/QtGui/qvalidator.h + mdp:/usr/include/qt6/QtGui/qwindowdefs.h + mdp:/usr/include/qt6/QtWidgets/QDialog + mdp:/usr/include/qt6/QtWidgets/QGroupBox + mdp:/usr/include/qt6/QtWidgets/QHBoxLayout + mdp:/usr/include/qt6/QtWidgets/QLabel + mdp:/usr/include/qt6/QtWidgets/QProgressBar + mdp:/usr/include/qt6/QtWidgets/QPushButton + mdp:/usr/include/qt6/QtWidgets/QTextEdit + mdp:/usr/include/qt6/QtWidgets/QTreeWidget + mdp:/usr/include/qt6/QtWidgets/QVBoxLayout + mdp:/usr/include/qt6/QtWidgets/qabstractbutton.h + mdp:/usr/include/qt6/QtWidgets/qabstractitemdelegate.h + mdp:/usr/include/qt6/QtWidgets/qabstractitemview.h + mdp:/usr/include/qt6/QtWidgets/qabstractscrollarea.h + mdp:/usr/include/qt6/QtWidgets/qabstractslider.h + mdp:/usr/include/qt6/QtWidgets/qabstractspinbox.h + mdp:/usr/include/qt6/QtWidgets/qboxlayout.h + mdp:/usr/include/qt6/QtWidgets/qdialog.h + mdp:/usr/include/qt6/QtWidgets/qframe.h + mdp:/usr/include/qt6/QtWidgets/qgridlayout.h + mdp:/usr/include/qt6/QtWidgets/qgroupbox.h + mdp:/usr/include/qt6/QtWidgets/qlabel.h + mdp:/usr/include/qt6/QtWidgets/qlayout.h + mdp:/usr/include/qt6/QtWidgets/qlayoutitem.h + mdp:/usr/include/qt6/QtWidgets/qprogressbar.h + mdp:/usr/include/qt6/QtWidgets/qpushbutton.h + mdp:/usr/include/qt6/QtWidgets/qrubberband.h + mdp:/usr/include/qt6/QtWidgets/qsizepolicy.h + mdp:/usr/include/qt6/QtWidgets/qslider.h + mdp:/usr/include/qt6/QtWidgets/qstyle.h + mdp:/usr/include/qt6/QtWidgets/qstyleoption.h + mdp:/usr/include/qt6/QtWidgets/qtabbar.h + mdp:/usr/include/qt6/QtWidgets/qtabwidget.h + mdp:/usr/include/qt6/QtWidgets/qtextedit.h + mdp:/usr/include/qt6/QtWidgets/qtreeview.h + mdp:/usr/include/qt6/QtWidgets/qtreewidget.h + mdp:/usr/include/qt6/QtWidgets/qtreewidgetitemiterator.h + mdp:/usr/include/qt6/QtWidgets/qtwidgets-config.h + mdp:/usr/include/qt6/QtWidgets/qtwidgetsexports.h + mdp:/usr/include/qt6/QtWidgets/qtwidgetsglobal.h + mdp:/usr/include/qt6/QtWidgets/qwidget.h + mdp:/usr/include/sched.h + mdp:/usr/include/stdc-predef.h + mdp:/usr/include/stdint.h + mdp:/usr/include/stdio.h + mdp:/usr/include/stdlib.h + mdp:/usr/include/string.h + mdp:/usr/include/strings.h + mdp:/usr/include/sys/cdefs.h + mdp:/usr/include/sys/select.h + mdp:/usr/include/sys/single_threaded.h + mdp:/usr/include/sys/syscall.h + mdp:/usr/include/sys/types.h + mdp:/usr/include/syscall.h + mdp:/usr/include/time.h + mdp:/usr/include/unistd.h + mdp:/usr/include/wchar.h + mdp:/usr/include/wctype.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stdarg.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stdbool.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stddef.h +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/log_manager.h + mmc:Q_OBJECT + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/kassetmanagerqt_autogen/moc_predefs.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/log_manager.h + mdp:/usr/include/alloca.h + mdp:/usr/include/asm-generic/bitsperlong.h + mdp:/usr/include/asm-generic/errno-base.h + mdp:/usr/include/asm-generic/errno.h + mdp:/usr/include/asm-generic/int-ll64.h + mdp:/usr/include/asm-generic/posix_types.h + mdp:/usr/include/asm-generic/types.h + mdp:/usr/include/asm/bitsperlong.h + mdp:/usr/include/asm/errno.h + mdp:/usr/include/asm/posix_types.h + mdp:/usr/include/asm/posix_types_64.h + mdp:/usr/include/asm/types.h + mdp:/usr/include/asm/unistd.h + mdp:/usr/include/asm/unistd_64.h + mdp:/usr/include/assert.h + mdp:/usr/include/bits/atomic_wide_counter.h + mdp:/usr/include/bits/byteswap.h + mdp:/usr/include/bits/confname.h + mdp:/usr/include/bits/cpu-set.h + mdp:/usr/include/bits/endian.h + mdp:/usr/include/bits/endianness.h + mdp:/usr/include/bits/environments.h + mdp:/usr/include/bits/errno.h + mdp:/usr/include/bits/floatn-common.h + mdp:/usr/include/bits/floatn.h + mdp:/usr/include/bits/getopt_core.h + mdp:/usr/include/bits/getopt_posix.h + mdp:/usr/include/bits/libc-header-start.h + mdp:/usr/include/bits/local_lim.h + mdp:/usr/include/bits/locale.h + mdp:/usr/include/bits/long-double.h + mdp:/usr/include/bits/posix1_lim.h + mdp:/usr/include/bits/posix2_lim.h + mdp:/usr/include/bits/posix_opt.h + mdp:/usr/include/bits/pthread_stack_min-dynamic.h + mdp:/usr/include/bits/pthreadtypes-arch.h + mdp:/usr/include/bits/pthreadtypes.h + mdp:/usr/include/bits/sched.h + mdp:/usr/include/bits/select.h + mdp:/usr/include/bits/setjmp.h + mdp:/usr/include/bits/stdint-intn.h + mdp:/usr/include/bits/stdint-least.h + mdp:/usr/include/bits/stdint-uintn.h + mdp:/usr/include/bits/stdio_lim.h + mdp:/usr/include/bits/stdlib-float.h + mdp:/usr/include/bits/struct_mutex.h + mdp:/usr/include/bits/struct_rwlock.h + mdp:/usr/include/bits/syscall.h + mdp:/usr/include/bits/thread-shared-types.h + mdp:/usr/include/bits/time.h + mdp:/usr/include/bits/time64.h + mdp:/usr/include/bits/timesize.h + mdp:/usr/include/bits/timex.h + mdp:/usr/include/bits/types.h + mdp:/usr/include/bits/types/FILE.h + mdp:/usr/include/bits/types/__FILE.h + mdp:/usr/include/bits/types/__fpos64_t.h + mdp:/usr/include/bits/types/__fpos_t.h + mdp:/usr/include/bits/types/__locale_t.h + mdp:/usr/include/bits/types/__mbstate_t.h + mdp:/usr/include/bits/types/__sigset_t.h + mdp:/usr/include/bits/types/clock_t.h + mdp:/usr/include/bits/types/clockid_t.h + mdp:/usr/include/bits/types/cookie_io_functions_t.h + mdp:/usr/include/bits/types/error_t.h + mdp:/usr/include/bits/types/locale_t.h + mdp:/usr/include/bits/types/mbstate_t.h + mdp:/usr/include/bits/types/sigset_t.h + mdp:/usr/include/bits/types/struct_FILE.h + mdp:/usr/include/bits/types/struct___jmp_buf_tag.h + mdp:/usr/include/bits/types/struct_itimerspec.h + mdp:/usr/include/bits/types/struct_sched_param.h + mdp:/usr/include/bits/types/struct_timespec.h + mdp:/usr/include/bits/types/struct_timeval.h + mdp:/usr/include/bits/types/struct_tm.h + mdp:/usr/include/bits/types/time_t.h + mdp:/usr/include/bits/types/timer_t.h + mdp:/usr/include/bits/types/wint_t.h + mdp:/usr/include/bits/typesizes.h + mdp:/usr/include/bits/uintn-identity.h + mdp:/usr/include/bits/uio_lim.h + mdp:/usr/include/bits/unistd_ext.h + mdp:/usr/include/bits/waitflags.h + mdp:/usr/include/bits/waitstatus.h + mdp:/usr/include/bits/wchar.h + mdp:/usr/include/bits/wctype-wchar.h + mdp:/usr/include/bits/wordsize.h + mdp:/usr/include/bits/xopen_lim.h + mdp:/usr/include/c++/15/algorithm + mdp:/usr/include/c++/15/array + mdp:/usr/include/c++/15/atomic + mdp:/usr/include/c++/15/backward/auto_ptr.h + mdp:/usr/include/c++/15/backward/binders.h + mdp:/usr/include/c++/15/bit + mdp:/usr/include/c++/15/bits/algorithmfwd.h + mdp:/usr/include/c++/15/bits/align.h + mdp:/usr/include/c++/15/bits/alloc_traits.h + mdp:/usr/include/c++/15/bits/allocated_ptr.h + mdp:/usr/include/c++/15/bits/allocator.h + mdp:/usr/include/c++/15/bits/atomic_base.h + mdp:/usr/include/c++/15/bits/atomic_lockfree_defines.h + mdp:/usr/include/c++/15/bits/atomic_wait.h + mdp:/usr/include/c++/15/bits/basic_ios.h + mdp:/usr/include/c++/15/bits/basic_ios.tcc + mdp:/usr/include/c++/15/bits/basic_string.h + mdp:/usr/include/c++/15/bits/basic_string.tcc + mdp:/usr/include/c++/15/bits/char_traits.h + mdp:/usr/include/c++/15/bits/charconv.h + mdp:/usr/include/c++/15/bits/chrono.h + mdp:/usr/include/c++/15/bits/chrono_io.h + mdp:/usr/include/c++/15/bits/codecvt.h + mdp:/usr/include/c++/15/bits/concept_check.h + mdp:/usr/include/c++/15/bits/cpp_type_traits.h + mdp:/usr/include/c++/15/bits/cxxabi_forced.h + mdp:/usr/include/c++/15/bits/cxxabi_init_exception.h + mdp:/usr/include/c++/15/bits/enable_special_members.h + mdp:/usr/include/c++/15/bits/erase_if.h + mdp:/usr/include/c++/15/bits/exception.h + mdp:/usr/include/c++/15/bits/exception_defines.h + mdp:/usr/include/c++/15/bits/exception_ptr.h + mdp:/usr/include/c++/15/bits/functexcept.h + mdp:/usr/include/c++/15/bits/functional_hash.h + mdp:/usr/include/c++/15/bits/hash_bytes.h + mdp:/usr/include/c++/15/bits/hashtable.h + mdp:/usr/include/c++/15/bits/hashtable_policy.h + mdp:/usr/include/c++/15/bits/invoke.h + mdp:/usr/include/c++/15/bits/ios_base.h + mdp:/usr/include/c++/15/bits/istream.tcc + mdp:/usr/include/c++/15/bits/iterator_concepts.h + mdp:/usr/include/c++/15/bits/list.tcc + mdp:/usr/include/c++/15/bits/locale_classes.h + mdp:/usr/include/c++/15/bits/locale_classes.tcc + mdp:/usr/include/c++/15/bits/locale_conv.h + mdp:/usr/include/c++/15/bits/locale_facets.h + mdp:/usr/include/c++/15/bits/locale_facets.tcc + mdp:/usr/include/c++/15/bits/locale_facets_nonio.h + mdp:/usr/include/c++/15/bits/locale_facets_nonio.tcc + mdp:/usr/include/c++/15/bits/localefwd.h + mdp:/usr/include/c++/15/bits/max_size_type.h + mdp:/usr/include/c++/15/bits/memory_resource.h + mdp:/usr/include/c++/15/bits/memoryfwd.h + mdp:/usr/include/c++/15/bits/move.h + mdp:/usr/include/c++/15/bits/nested_exception.h + mdp:/usr/include/c++/15/bits/new_allocator.h + mdp:/usr/include/c++/15/bits/node_handle.h + mdp:/usr/include/c++/15/bits/ostream.h + mdp:/usr/include/c++/15/bits/ostream.tcc + mdp:/usr/include/c++/15/bits/ostream_insert.h + mdp:/usr/include/c++/15/bits/parse_numbers.h + mdp:/usr/include/c++/15/bits/postypes.h + mdp:/usr/include/c++/15/bits/predefined_ops.h + mdp:/usr/include/c++/15/bits/ptr_traits.h + mdp:/usr/include/c++/15/bits/quoted_string.h + mdp:/usr/include/c++/15/bits/range_access.h + mdp:/usr/include/c++/15/bits/ranges_algo.h + mdp:/usr/include/c++/15/bits/ranges_algobase.h + mdp:/usr/include/c++/15/bits/ranges_base.h + mdp:/usr/include/c++/15/bits/ranges_cmp.h + mdp:/usr/include/c++/15/bits/ranges_uninitialized.h + mdp:/usr/include/c++/15/bits/ranges_util.h + mdp:/usr/include/c++/15/bits/refwrap.h + mdp:/usr/include/c++/15/bits/requires_hosted.h + mdp:/usr/include/c++/15/bits/shared_ptr.h + mdp:/usr/include/c++/15/bits/shared_ptr_atomic.h + mdp:/usr/include/c++/15/bits/shared_ptr_base.h + mdp:/usr/include/c++/15/bits/specfun.h + mdp:/usr/include/c++/15/bits/sstream.tcc + mdp:/usr/include/c++/15/bits/std_abs.h + mdp:/usr/include/c++/15/bits/std_function.h + mdp:/usr/include/c++/15/bits/std_mutex.h + mdp:/usr/include/c++/15/bits/stl_algo.h + mdp:/usr/include/c++/15/bits/stl_algobase.h + mdp:/usr/include/c++/15/bits/stl_bvector.h + mdp:/usr/include/c++/15/bits/stl_construct.h + mdp:/usr/include/c++/15/bits/stl_function.h + mdp:/usr/include/c++/15/bits/stl_heap.h + mdp:/usr/include/c++/15/bits/stl_iterator.h + mdp:/usr/include/c++/15/bits/stl_iterator_base_funcs.h + mdp:/usr/include/c++/15/bits/stl_iterator_base_types.h + mdp:/usr/include/c++/15/bits/stl_list.h + mdp:/usr/include/c++/15/bits/stl_map.h + mdp:/usr/include/c++/15/bits/stl_multimap.h + mdp:/usr/include/c++/15/bits/stl_multiset.h + mdp:/usr/include/c++/15/bits/stl_numeric.h + mdp:/usr/include/c++/15/bits/stl_pair.h + mdp:/usr/include/c++/15/bits/stl_raw_storage_iter.h + mdp:/usr/include/c++/15/bits/stl_relops.h + mdp:/usr/include/c++/15/bits/stl_set.h + mdp:/usr/include/c++/15/bits/stl_tempbuf.h + mdp:/usr/include/c++/15/bits/stl_tree.h + mdp:/usr/include/c++/15/bits/stl_uninitialized.h + mdp:/usr/include/c++/15/bits/stl_vector.h + mdp:/usr/include/c++/15/bits/stream_iterator.h + mdp:/usr/include/c++/15/bits/streambuf.tcc + mdp:/usr/include/c++/15/bits/streambuf_iterator.h + mdp:/usr/include/c++/15/bits/string_view.tcc + mdp:/usr/include/c++/15/bits/stringfwd.h + mdp:/usr/include/c++/15/bits/uniform_int_dist.h + mdp:/usr/include/c++/15/bits/unique_ptr.h + mdp:/usr/include/c++/15/bits/unordered_map.h + mdp:/usr/include/c++/15/bits/unordered_set.h + mdp:/usr/include/c++/15/bits/uses_allocator.h + mdp:/usr/include/c++/15/bits/uses_allocator_args.h + mdp:/usr/include/c++/15/bits/utility.h + mdp:/usr/include/c++/15/bits/vector.tcc + mdp:/usr/include/c++/15/bits/version.h + mdp:/usr/include/c++/15/cassert + mdp:/usr/include/c++/15/cctype + mdp:/usr/include/c++/15/cerrno + mdp:/usr/include/c++/15/charconv + mdp:/usr/include/c++/15/chrono + mdp:/usr/include/c++/15/climits + mdp:/usr/include/c++/15/clocale + mdp:/usr/include/c++/15/cmath + mdp:/usr/include/c++/15/compare + mdp:/usr/include/c++/15/concepts + mdp:/usr/include/c++/15/cstddef + mdp:/usr/include/c++/15/cstdint + mdp:/usr/include/c++/15/cstdio + mdp:/usr/include/c++/15/cstdlib + mdp:/usr/include/c++/15/cstring + mdp:/usr/include/c++/15/ctime + mdp:/usr/include/c++/15/cwchar + mdp:/usr/include/c++/15/cwctype + mdp:/usr/include/c++/15/debug/assertions.h + mdp:/usr/include/c++/15/debug/debug.h + mdp:/usr/include/c++/15/exception + mdp:/usr/include/c++/15/ext/aligned_buffer.h + mdp:/usr/include/c++/15/ext/alloc_traits.h + mdp:/usr/include/c++/15/ext/atomicity.h + mdp:/usr/include/c++/15/ext/concurrence.h + mdp:/usr/include/c++/15/ext/numeric_traits.h + mdp:/usr/include/c++/15/ext/string_conversions.h + mdp:/usr/include/c++/15/ext/type_traits.h + mdp:/usr/include/c++/15/filesystem + mdp:/usr/include/c++/15/format + mdp:/usr/include/c++/15/functional + mdp:/usr/include/c++/15/initializer_list + mdp:/usr/include/c++/15/iomanip + mdp:/usr/include/c++/15/ios + mdp:/usr/include/c++/15/iosfwd + mdp:/usr/include/c++/15/istream + mdp:/usr/include/c++/15/iterator + mdp:/usr/include/c++/15/limits + mdp:/usr/include/c++/15/list + mdp:/usr/include/c++/15/locale + mdp:/usr/include/c++/15/map + mdp:/usr/include/c++/15/memory + mdp:/usr/include/c++/15/new + mdp:/usr/include/c++/15/numeric + mdp:/usr/include/c++/15/optional + mdp:/usr/include/c++/15/ostream + mdp:/usr/include/c++/15/pstl/execution_defs.h + mdp:/usr/include/c++/15/pstl/glue_numeric_defs.h + mdp:/usr/include/c++/15/pstl/pstl_config.h + mdp:/usr/include/c++/15/ratio + mdp:/usr/include/c++/15/set + mdp:/usr/include/c++/15/sstream + mdp:/usr/include/c++/15/stdexcept + mdp:/usr/include/c++/15/streambuf + mdp:/usr/include/c++/15/string + mdp:/usr/include/c++/15/string_view + mdp:/usr/include/c++/15/system_error + mdp:/usr/include/c++/15/tr1/bessel_function.tcc + mdp:/usr/include/c++/15/tr1/beta_function.tcc + mdp:/usr/include/c++/15/tr1/ell_integral.tcc + mdp:/usr/include/c++/15/tr1/exp_integral.tcc + mdp:/usr/include/c++/15/tr1/gamma.tcc + mdp:/usr/include/c++/15/tr1/hypergeometric.tcc + mdp:/usr/include/c++/15/tr1/legendre_function.tcc + mdp:/usr/include/c++/15/tr1/modified_bessel_func.tcc + mdp:/usr/include/c++/15/tr1/poly_hermite.tcc + mdp:/usr/include/c++/15/tr1/poly_laguerre.tcc + mdp:/usr/include/c++/15/tr1/riemann_zeta.tcc + mdp:/usr/include/c++/15/tr1/special_function_util.h + mdp:/usr/include/c++/15/tuple + mdp:/usr/include/c++/15/type_traits + mdp:/usr/include/c++/15/typeinfo + mdp:/usr/include/c++/15/unordered_map + mdp:/usr/include/c++/15/unordered_set + mdp:/usr/include/c++/15/utility + mdp:/usr/include/c++/15/variant + mdp:/usr/include/c++/15/vector + mdp:/usr/include/c++/15/version + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/atomic_word.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++allocator.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++config.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++locale.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/cpu_defines.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/ctype_base.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/ctype_inline.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/error_constants.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/gthr-default.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/gthr.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/messages_members.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/os_defines.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/time_members.h + mdp:/usr/include/ctype.h + mdp:/usr/include/endian.h + mdp:/usr/include/errno.h + mdp:/usr/include/features-time64.h + mdp:/usr/include/features.h + mdp:/usr/include/gnu/stubs-64.h + mdp:/usr/include/gnu/stubs.h + mdp:/usr/include/libintl.h + mdp:/usr/include/limits.h + mdp:/usr/include/linux/close_range.h + mdp:/usr/include/linux/errno.h + mdp:/usr/include/linux/limits.h + mdp:/usr/include/linux/posix_types.h + mdp:/usr/include/linux/sched/types.h + mdp:/usr/include/linux/stddef.h + mdp:/usr/include/linux/types.h + mdp:/usr/include/locale.h + mdp:/usr/include/pthread.h + mdp:/usr/include/qt6/QtCore/QDateTime + mdp:/usr/include/qt6/QtCore/QFile + mdp:/usr/include/qt6/QtCore/QMutex + mdp:/usr/include/qt6/QtCore/QObject + mdp:/usr/include/qt6/QtCore/QStringList + mdp:/usr/include/qt6/QtCore/QTextStream + mdp:/usr/include/qt6/QtCore/q17memory.h + mdp:/usr/include/qt6/QtCore/q20functional.h + mdp:/usr/include/qt6/QtCore/q20iterator.h + mdp:/usr/include/qt6/QtCore/q20memory.h + mdp:/usr/include/qt6/QtCore/q20type_traits.h + mdp:/usr/include/qt6/QtCore/q20utility.h + mdp:/usr/include/qt6/QtCore/q23type_traits.h + mdp:/usr/include/qt6/QtCore/q23utility.h + mdp:/usr/include/qt6/QtCore/qalgorithms.h + mdp:/usr/include/qt6/QtCore/qalloc.h + mdp:/usr/include/qt6/QtCore/qanystringview.h + mdp:/usr/include/qt6/QtCore/qarraydata.h + mdp:/usr/include/qt6/QtCore/qarraydataops.h + mdp:/usr/include/qt6/QtCore/qarraydatapointer.h + mdp:/usr/include/qt6/QtCore/qassert.h + mdp:/usr/include/qt6/QtCore/qatomic.h + mdp:/usr/include/qt6/QtCore/qatomic_cxx11.h + mdp:/usr/include/qt6/QtCore/qbasicatomic.h + mdp:/usr/include/qt6/QtCore/qbindingstorage.h + mdp:/usr/include/qt6/QtCore/qbytearray.h + mdp:/usr/include/qt6/QtCore/qbytearrayalgorithms.h + mdp:/usr/include/qt6/QtCore/qbytearraylist.h + mdp:/usr/include/qt6/QtCore/qbytearrayview.h + mdp:/usr/include/qt6/QtCore/qcalendar.h + mdp:/usr/include/qt6/QtCore/qchar.h + mdp:/usr/include/qt6/QtCore/qcompare.h + mdp:/usr/include/qt6/QtCore/qcompare_impl.h + mdp:/usr/include/qt6/QtCore/qcomparehelpers.h + mdp:/usr/include/qt6/QtCore/qcompilerdetection.h + mdp:/usr/include/qt6/QtCore/qconfig-64.h + mdp:/usr/include/qt6/QtCore/qconfig.h + mdp:/usr/include/qt6/QtCore/qconstructormacros.h + mdp:/usr/include/qt6/QtCore/qcontainerfwd.h + mdp:/usr/include/qt6/QtCore/qcontainerinfo.h + mdp:/usr/include/qt6/QtCore/qcontainertools_impl.h + mdp:/usr/include/qt6/QtCore/qcontiguouscache.h + mdp:/usr/include/qt6/QtCore/qdarwinhelpers.h + mdp:/usr/include/qt6/QtCore/qdatastream.h + mdp:/usr/include/qt6/QtCore/qdatetime.h + mdp:/usr/include/qt6/QtCore/qdeadlinetimer.h + mdp:/usr/include/qt6/QtCore/qdebug.h + mdp:/usr/include/qt6/QtCore/qexceptionhandling.h + mdp:/usr/include/qt6/QtCore/qfile.h + mdp:/usr/include/qt6/QtCore/qfiledevice.h + mdp:/usr/include/qt6/QtCore/qflags.h + mdp:/usr/include/qt6/QtCore/qfloat16.h + mdp:/usr/include/qt6/QtCore/qforeach.h + mdp:/usr/include/qt6/QtCore/qfunctionaltools_impl.h + mdp:/usr/include/qt6/QtCore/qfunctionpointer.h + mdp:/usr/include/qt6/QtCore/qgenericatomic.h + mdp:/usr/include/qt6/QtCore/qglobal.h + mdp:/usr/include/qt6/QtCore/qglobalstatic.h + mdp:/usr/include/qt6/QtCore/qhash.h + mdp:/usr/include/qt6/QtCore/qhashfunctions.h + mdp:/usr/include/qt6/QtCore/qiodevice.h + mdp:/usr/include/qt6/QtCore/qiodevicebase.h + mdp:/usr/include/qt6/QtCore/qiterable.h + mdp:/usr/include/qt6/QtCore/qiterator.h + mdp:/usr/include/qt6/QtCore/qlatin1stringview.h + mdp:/usr/include/qt6/QtCore/qlist.h + mdp:/usr/include/qt6/QtCore/qlocale.h + mdp:/usr/include/qt6/QtCore/qlogging.h + mdp:/usr/include/qt6/QtCore/qmalloc.h + mdp:/usr/include/qt6/QtCore/qmap.h + mdp:/usr/include/qt6/QtCore/qmath.h + mdp:/usr/include/qt6/QtCore/qmetacontainer.h + mdp:/usr/include/qt6/QtCore/qmetatype.h + mdp:/usr/include/qt6/QtCore/qminmax.h + mdp:/usr/include/qt6/QtCore/qmutex.h + mdp:/usr/include/qt6/QtCore/qnamespace.h + mdp:/usr/include/qt6/QtCore/qnumeric.h + mdp:/usr/include/qt6/QtCore/qobject.h + mdp:/usr/include/qt6/QtCore/qobject_impl.h + mdp:/usr/include/qt6/QtCore/qobjectdefs.h + mdp:/usr/include/qt6/QtCore/qobjectdefs_impl.h + mdp:/usr/include/qt6/QtCore/qoverload.h + mdp:/usr/include/qt6/QtCore/qpair.h + mdp:/usr/include/qt6/QtCore/qprocessordetection.h + mdp:/usr/include/qt6/QtCore/qrefcount.h + mdp:/usr/include/qt6/QtCore/qscopedpointer.h + mdp:/usr/include/qt6/QtCore/qscopeguard.h + mdp:/usr/include/qt6/QtCore/qset.h + mdp:/usr/include/qt6/QtCore/qshareddata.h + mdp:/usr/include/qt6/QtCore/qshareddata_impl.h + mdp:/usr/include/qt6/QtCore/qsharedpointer.h + mdp:/usr/include/qt6/QtCore/qsharedpointer_impl.h + mdp:/usr/include/qt6/QtCore/qspan.h + mdp:/usr/include/qt6/QtCore/qstdlibdetection.h + mdp:/usr/include/qt6/QtCore/qstring.h + mdp:/usr/include/qt6/QtCore/qstringalgorithms.h + mdp:/usr/include/qt6/QtCore/qstringbuilder.h + mdp:/usr/include/qt6/QtCore/qstringconverter.h + mdp:/usr/include/qt6/QtCore/qstringconverter_base.h + mdp:/usr/include/qt6/QtCore/qstringfwd.h + mdp:/usr/include/qt6/QtCore/qstringlist.h + mdp:/usr/include/qt6/QtCore/qstringmatcher.h + mdp:/usr/include/qt6/QtCore/qstringtokenizer.h + mdp:/usr/include/qt6/QtCore/qstringview.h + mdp:/usr/include/qt6/QtCore/qswap.h + mdp:/usr/include/qt6/QtCore/qsysinfo.h + mdp:/usr/include/qt6/QtCore/qsystemdetection.h + mdp:/usr/include/qt6/QtCore/qtaggedpointer.h + mdp:/usr/include/qt6/QtCore/qtclasshelpermacros.h + mdp:/usr/include/qt6/QtCore/qtconfiginclude.h + mdp:/usr/include/qt6/QtCore/qtconfigmacros.h + mdp:/usr/include/qt6/QtCore/qtcore-config.h + mdp:/usr/include/qt6/QtCore/qtcoreexports.h + mdp:/usr/include/qt6/QtCore/qtcoreglobal.h + mdp:/usr/include/qt6/QtCore/qtdeprecationdefinitions.h + mdp:/usr/include/qt6/QtCore/qtdeprecationmarkers.h + mdp:/usr/include/qt6/QtCore/qtenvironmentvariables.h + mdp:/usr/include/qt6/QtCore/qtextstream.h + mdp:/usr/include/qt6/QtCore/qtformat_impl.h + mdp:/usr/include/qt6/QtCore/qtmetamacros.h + mdp:/usr/include/qt6/QtCore/qtnoop.h + mdp:/usr/include/qt6/QtCore/qtpreprocessorsupport.h + mdp:/usr/include/qt6/QtCore/qtresource.h + mdp:/usr/include/qt6/QtCore/qtsan_impl.h + mdp:/usr/include/qt6/QtCore/qttranslation.h + mdp:/usr/include/qt6/QtCore/qttypetraits.h + mdp:/usr/include/qt6/QtCore/qtversion.h + mdp:/usr/include/qt6/QtCore/qtversionchecks.h + mdp:/usr/include/qt6/QtCore/qtypeinfo.h + mdp:/usr/include/qt6/QtCore/qtypes.h + mdp:/usr/include/qt6/QtCore/qutf8stringview.h + mdp:/usr/include/qt6/QtCore/qvariant.h + mdp:/usr/include/qt6/QtCore/qvarlengtharray.h + mdp:/usr/include/qt6/QtCore/qversiontagging.h + mdp:/usr/include/qt6/QtCore/qxptype_traits.h + mdp:/usr/include/qt6/QtCore/qyieldcpu.h + mdp:/usr/include/sched.h + mdp:/usr/include/stdc-predef.h + mdp:/usr/include/stdint.h + mdp:/usr/include/stdio.h + mdp:/usr/include/stdlib.h + mdp:/usr/include/string.h + mdp:/usr/include/strings.h + mdp:/usr/include/sys/cdefs.h + mdp:/usr/include/sys/select.h + mdp:/usr/include/sys/single_threaded.h + mdp:/usr/include/sys/syscall.h + mdp:/usr/include/sys/types.h + mdp:/usr/include/syscall.h + mdp:/usr/include/time.h + mdp:/usr/include/unistd.h + mdp:/usr/include/wchar.h + mdp:/usr/include/wctype.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stdarg.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stdbool.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stddef.h +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/grid_scrub.cpp +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/media_converter_worker.cpp +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/database_health_agent.cpp +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/project_import_worker.h + mmc:Q_OBJECT + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/kassetmanagerqt_autogen/moc_predefs.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/project_import_worker.h + mdp:/usr/include/alloca.h + mdp:/usr/include/asm-generic/bitsperlong.h + mdp:/usr/include/asm-generic/errno-base.h + mdp:/usr/include/asm-generic/errno.h + mdp:/usr/include/asm-generic/int-ll64.h + mdp:/usr/include/asm-generic/posix_types.h + mdp:/usr/include/asm-generic/types.h + mdp:/usr/include/asm/bitsperlong.h + mdp:/usr/include/asm/errno.h + mdp:/usr/include/asm/posix_types.h + mdp:/usr/include/asm/posix_types_64.h + mdp:/usr/include/asm/types.h + mdp:/usr/include/asm/unistd.h + mdp:/usr/include/asm/unistd_64.h + mdp:/usr/include/assert.h + mdp:/usr/include/bits/atomic_wide_counter.h + mdp:/usr/include/bits/byteswap.h + mdp:/usr/include/bits/confname.h + mdp:/usr/include/bits/cpu-set.h + mdp:/usr/include/bits/endian.h + mdp:/usr/include/bits/endianness.h + mdp:/usr/include/bits/environments.h + mdp:/usr/include/bits/errno.h + mdp:/usr/include/bits/floatn-common.h + mdp:/usr/include/bits/floatn.h + mdp:/usr/include/bits/getopt_core.h + mdp:/usr/include/bits/getopt_posix.h + mdp:/usr/include/bits/libc-header-start.h + mdp:/usr/include/bits/local_lim.h + mdp:/usr/include/bits/locale.h + mdp:/usr/include/bits/long-double.h + mdp:/usr/include/bits/posix1_lim.h + mdp:/usr/include/bits/posix2_lim.h + mdp:/usr/include/bits/posix_opt.h + mdp:/usr/include/bits/pthread_stack_min-dynamic.h + mdp:/usr/include/bits/pthreadtypes-arch.h + mdp:/usr/include/bits/pthreadtypes.h + mdp:/usr/include/bits/sched.h + mdp:/usr/include/bits/select.h + mdp:/usr/include/bits/semaphore.h + mdp:/usr/include/bits/setjmp.h + mdp:/usr/include/bits/stdint-intn.h + mdp:/usr/include/bits/stdint-least.h + mdp:/usr/include/bits/stdint-uintn.h + mdp:/usr/include/bits/stdio_lim.h + mdp:/usr/include/bits/stdlib-float.h + mdp:/usr/include/bits/struct_mutex.h + mdp:/usr/include/bits/struct_rwlock.h + mdp:/usr/include/bits/syscall.h + mdp:/usr/include/bits/thread-shared-types.h + mdp:/usr/include/bits/time.h + mdp:/usr/include/bits/time64.h + mdp:/usr/include/bits/timesize.h + mdp:/usr/include/bits/timex.h + mdp:/usr/include/bits/types.h + mdp:/usr/include/bits/types/FILE.h + mdp:/usr/include/bits/types/__FILE.h + mdp:/usr/include/bits/types/__fpos64_t.h + mdp:/usr/include/bits/types/__fpos_t.h + mdp:/usr/include/bits/types/__locale_t.h + mdp:/usr/include/bits/types/__mbstate_t.h + mdp:/usr/include/bits/types/__sigset_t.h + mdp:/usr/include/bits/types/clock_t.h + mdp:/usr/include/bits/types/clockid_t.h + mdp:/usr/include/bits/types/cookie_io_functions_t.h + mdp:/usr/include/bits/types/error_t.h + mdp:/usr/include/bits/types/locale_t.h + mdp:/usr/include/bits/types/mbstate_t.h + mdp:/usr/include/bits/types/sigset_t.h + mdp:/usr/include/bits/types/struct_FILE.h + mdp:/usr/include/bits/types/struct___jmp_buf_tag.h + mdp:/usr/include/bits/types/struct_itimerspec.h + mdp:/usr/include/bits/types/struct_sched_param.h + mdp:/usr/include/bits/types/struct_timespec.h + mdp:/usr/include/bits/types/struct_timeval.h + mdp:/usr/include/bits/types/struct_tm.h + mdp:/usr/include/bits/types/time_t.h + mdp:/usr/include/bits/types/timer_t.h + mdp:/usr/include/bits/types/wint_t.h + mdp:/usr/include/bits/typesizes.h + mdp:/usr/include/bits/uintn-identity.h + mdp:/usr/include/bits/uio_lim.h + mdp:/usr/include/bits/unistd_ext.h + mdp:/usr/include/bits/waitflags.h + mdp:/usr/include/bits/waitstatus.h + mdp:/usr/include/bits/wchar.h + mdp:/usr/include/bits/wctype-wchar.h + mdp:/usr/include/bits/wordsize.h + mdp:/usr/include/bits/xopen_lim.h + mdp:/usr/include/c++/15/algorithm + mdp:/usr/include/c++/15/array + mdp:/usr/include/c++/15/atomic + mdp:/usr/include/c++/15/backward/auto_ptr.h + mdp:/usr/include/c++/15/backward/binders.h + mdp:/usr/include/c++/15/bit + mdp:/usr/include/c++/15/bits/algorithmfwd.h + mdp:/usr/include/c++/15/bits/align.h + mdp:/usr/include/c++/15/bits/alloc_traits.h + mdp:/usr/include/c++/15/bits/allocated_ptr.h + mdp:/usr/include/c++/15/bits/allocator.h + mdp:/usr/include/c++/15/bits/atomic_base.h + mdp:/usr/include/c++/15/bits/atomic_futex.h + mdp:/usr/include/c++/15/bits/atomic_lockfree_defines.h + mdp:/usr/include/c++/15/bits/atomic_timed_wait.h + mdp:/usr/include/c++/15/bits/atomic_wait.h + mdp:/usr/include/c++/15/bits/basic_ios.h + mdp:/usr/include/c++/15/bits/basic_ios.tcc + mdp:/usr/include/c++/15/bits/basic_string.h + mdp:/usr/include/c++/15/bits/basic_string.tcc + mdp:/usr/include/c++/15/bits/char_traits.h + mdp:/usr/include/c++/15/bits/charconv.h + mdp:/usr/include/c++/15/bits/chrono.h + mdp:/usr/include/c++/15/bits/chrono_io.h + mdp:/usr/include/c++/15/bits/codecvt.h + mdp:/usr/include/c++/15/bits/concept_check.h + mdp:/usr/include/c++/15/bits/cpp_type_traits.h + mdp:/usr/include/c++/15/bits/cxxabi_forced.h + mdp:/usr/include/c++/15/bits/cxxabi_init_exception.h + mdp:/usr/include/c++/15/bits/enable_special_members.h + mdp:/usr/include/c++/15/bits/erase_if.h + mdp:/usr/include/c++/15/bits/exception.h + mdp:/usr/include/c++/15/bits/exception_defines.h + mdp:/usr/include/c++/15/bits/exception_ptr.h + mdp:/usr/include/c++/15/bits/functexcept.h + mdp:/usr/include/c++/15/bits/functional_hash.h + mdp:/usr/include/c++/15/bits/hash_bytes.h + mdp:/usr/include/c++/15/bits/hashtable.h + mdp:/usr/include/c++/15/bits/hashtable_policy.h + mdp:/usr/include/c++/15/bits/invoke.h + mdp:/usr/include/c++/15/bits/ios_base.h + mdp:/usr/include/c++/15/bits/istream.tcc + mdp:/usr/include/c++/15/bits/iterator_concepts.h + mdp:/usr/include/c++/15/bits/list.tcc + mdp:/usr/include/c++/15/bits/locale_classes.h + mdp:/usr/include/c++/15/bits/locale_classes.tcc + mdp:/usr/include/c++/15/bits/locale_conv.h + mdp:/usr/include/c++/15/bits/locale_facets.h + mdp:/usr/include/c++/15/bits/locale_facets.tcc + mdp:/usr/include/c++/15/bits/locale_facets_nonio.h + mdp:/usr/include/c++/15/bits/locale_facets_nonio.tcc + mdp:/usr/include/c++/15/bits/localefwd.h + mdp:/usr/include/c++/15/bits/max_size_type.h + mdp:/usr/include/c++/15/bits/memory_resource.h + mdp:/usr/include/c++/15/bits/memoryfwd.h + mdp:/usr/include/c++/15/bits/move.h + mdp:/usr/include/c++/15/bits/nested_exception.h + mdp:/usr/include/c++/15/bits/new_allocator.h + mdp:/usr/include/c++/15/bits/node_handle.h + mdp:/usr/include/c++/15/bits/ostream.h + mdp:/usr/include/c++/15/bits/ostream.tcc + mdp:/usr/include/c++/15/bits/ostream_insert.h + mdp:/usr/include/c++/15/bits/parse_numbers.h + mdp:/usr/include/c++/15/bits/postypes.h + mdp:/usr/include/c++/15/bits/predefined_ops.h + mdp:/usr/include/c++/15/bits/ptr_traits.h + mdp:/usr/include/c++/15/bits/quoted_string.h + mdp:/usr/include/c++/15/bits/range_access.h + mdp:/usr/include/c++/15/bits/ranges_algo.h + mdp:/usr/include/c++/15/bits/ranges_algobase.h + mdp:/usr/include/c++/15/bits/ranges_base.h + mdp:/usr/include/c++/15/bits/ranges_cmp.h + mdp:/usr/include/c++/15/bits/ranges_uninitialized.h + mdp:/usr/include/c++/15/bits/ranges_util.h + mdp:/usr/include/c++/15/bits/refwrap.h + mdp:/usr/include/c++/15/bits/requires_hosted.h + mdp:/usr/include/c++/15/bits/semaphore_base.h + mdp:/usr/include/c++/15/bits/shared_ptr.h + mdp:/usr/include/c++/15/bits/shared_ptr_atomic.h + mdp:/usr/include/c++/15/bits/shared_ptr_base.h + mdp:/usr/include/c++/15/bits/specfun.h + mdp:/usr/include/c++/15/bits/sstream.tcc + mdp:/usr/include/c++/15/bits/std_abs.h + mdp:/usr/include/c++/15/bits/std_function.h + mdp:/usr/include/c++/15/bits/std_mutex.h + mdp:/usr/include/c++/15/bits/std_thread.h + mdp:/usr/include/c++/15/bits/stl_algo.h + mdp:/usr/include/c++/15/bits/stl_algobase.h + mdp:/usr/include/c++/15/bits/stl_bvector.h + mdp:/usr/include/c++/15/bits/stl_construct.h + mdp:/usr/include/c++/15/bits/stl_function.h + mdp:/usr/include/c++/15/bits/stl_heap.h + mdp:/usr/include/c++/15/bits/stl_iterator.h + mdp:/usr/include/c++/15/bits/stl_iterator_base_funcs.h + mdp:/usr/include/c++/15/bits/stl_iterator_base_types.h + mdp:/usr/include/c++/15/bits/stl_list.h + mdp:/usr/include/c++/15/bits/stl_map.h + mdp:/usr/include/c++/15/bits/stl_multimap.h + mdp:/usr/include/c++/15/bits/stl_multiset.h + mdp:/usr/include/c++/15/bits/stl_numeric.h + mdp:/usr/include/c++/15/bits/stl_pair.h + mdp:/usr/include/c++/15/bits/stl_raw_storage_iter.h + mdp:/usr/include/c++/15/bits/stl_relops.h + mdp:/usr/include/c++/15/bits/stl_set.h + mdp:/usr/include/c++/15/bits/stl_tempbuf.h + mdp:/usr/include/c++/15/bits/stl_tree.h + mdp:/usr/include/c++/15/bits/stl_uninitialized.h + mdp:/usr/include/c++/15/bits/stl_vector.h + mdp:/usr/include/c++/15/bits/stream_iterator.h + mdp:/usr/include/c++/15/bits/streambuf.tcc + mdp:/usr/include/c++/15/bits/streambuf_iterator.h + mdp:/usr/include/c++/15/bits/string_view.tcc + mdp:/usr/include/c++/15/bits/stringfwd.h + mdp:/usr/include/c++/15/bits/this_thread_sleep.h + mdp:/usr/include/c++/15/bits/uniform_int_dist.h + mdp:/usr/include/c++/15/bits/unique_lock.h + mdp:/usr/include/c++/15/bits/unique_ptr.h + mdp:/usr/include/c++/15/bits/unordered_map.h + mdp:/usr/include/c++/15/bits/unordered_set.h + mdp:/usr/include/c++/15/bits/uses_allocator.h + mdp:/usr/include/c++/15/bits/uses_allocator_args.h + mdp:/usr/include/c++/15/bits/utility.h + mdp:/usr/include/c++/15/bits/vector.tcc + mdp:/usr/include/c++/15/bits/version.h + mdp:/usr/include/c++/15/cassert + mdp:/usr/include/c++/15/cctype + mdp:/usr/include/c++/15/cerrno + mdp:/usr/include/c++/15/charconv + mdp:/usr/include/c++/15/chrono + mdp:/usr/include/c++/15/climits + mdp:/usr/include/c++/15/clocale + mdp:/usr/include/c++/15/cmath + mdp:/usr/include/c++/15/compare + mdp:/usr/include/c++/15/concepts + mdp:/usr/include/c++/15/condition_variable + mdp:/usr/include/c++/15/cstddef + mdp:/usr/include/c++/15/cstdint + mdp:/usr/include/c++/15/cstdio + mdp:/usr/include/c++/15/cstdlib + mdp:/usr/include/c++/15/cstring + mdp:/usr/include/c++/15/ctime + mdp:/usr/include/c++/15/cwchar + mdp:/usr/include/c++/15/cwctype + mdp:/usr/include/c++/15/debug/assertions.h + mdp:/usr/include/c++/15/debug/debug.h + mdp:/usr/include/c++/15/exception + mdp:/usr/include/c++/15/ext/aligned_buffer.h + mdp:/usr/include/c++/15/ext/alloc_traits.h + mdp:/usr/include/c++/15/ext/atomicity.h + mdp:/usr/include/c++/15/ext/concurrence.h + mdp:/usr/include/c++/15/ext/numeric_traits.h + mdp:/usr/include/c++/15/ext/string_conversions.h + mdp:/usr/include/c++/15/ext/type_traits.h + mdp:/usr/include/c++/15/filesystem + mdp:/usr/include/c++/15/format + mdp:/usr/include/c++/15/functional + mdp:/usr/include/c++/15/future + mdp:/usr/include/c++/15/initializer_list + mdp:/usr/include/c++/15/iomanip + mdp:/usr/include/c++/15/ios + mdp:/usr/include/c++/15/iosfwd + mdp:/usr/include/c++/15/istream + mdp:/usr/include/c++/15/iterator + mdp:/usr/include/c++/15/limits + mdp:/usr/include/c++/15/list + mdp:/usr/include/c++/15/locale + mdp:/usr/include/c++/15/map + mdp:/usr/include/c++/15/memory + mdp:/usr/include/c++/15/mutex + mdp:/usr/include/c++/15/new + mdp:/usr/include/c++/15/numeric + mdp:/usr/include/c++/15/optional + mdp:/usr/include/c++/15/ostream + mdp:/usr/include/c++/15/pstl/execution_defs.h + mdp:/usr/include/c++/15/pstl/glue_numeric_defs.h + mdp:/usr/include/c++/15/pstl/pstl_config.h + mdp:/usr/include/c++/15/ratio + mdp:/usr/include/c++/15/semaphore + mdp:/usr/include/c++/15/set + mdp:/usr/include/c++/15/sstream + mdp:/usr/include/c++/15/stdexcept + mdp:/usr/include/c++/15/stop_token + mdp:/usr/include/c++/15/streambuf + mdp:/usr/include/c++/15/string + mdp:/usr/include/c++/15/string_view + mdp:/usr/include/c++/15/system_error + mdp:/usr/include/c++/15/tr1/bessel_function.tcc + mdp:/usr/include/c++/15/tr1/beta_function.tcc + mdp:/usr/include/c++/15/tr1/ell_integral.tcc + mdp:/usr/include/c++/15/tr1/exp_integral.tcc + mdp:/usr/include/c++/15/tr1/gamma.tcc + mdp:/usr/include/c++/15/tr1/hypergeometric.tcc + mdp:/usr/include/c++/15/tr1/legendre_function.tcc + mdp:/usr/include/c++/15/tr1/modified_bessel_func.tcc + mdp:/usr/include/c++/15/tr1/poly_hermite.tcc + mdp:/usr/include/c++/15/tr1/poly_laguerre.tcc + mdp:/usr/include/c++/15/tr1/riemann_zeta.tcc + mdp:/usr/include/c++/15/tr1/special_function_util.h + mdp:/usr/include/c++/15/tuple + mdp:/usr/include/c++/15/type_traits + mdp:/usr/include/c++/15/typeinfo + mdp:/usr/include/c++/15/unordered_map + mdp:/usr/include/c++/15/unordered_set + mdp:/usr/include/c++/15/utility + mdp:/usr/include/c++/15/variant + mdp:/usr/include/c++/15/vector + mdp:/usr/include/c++/15/version + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/atomic_word.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++allocator.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++config.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++locale.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/cpu_defines.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/ctype_base.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/ctype_inline.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/error_constants.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/gthr-default.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/gthr.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/messages_members.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/os_defines.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/time_members.h + mdp:/usr/include/ctype.h + mdp:/usr/include/endian.h + mdp:/usr/include/errno.h + mdp:/usr/include/features-time64.h + mdp:/usr/include/features.h + mdp:/usr/include/gnu/stubs-64.h + mdp:/usr/include/gnu/stubs.h + mdp:/usr/include/libintl.h + mdp:/usr/include/limits.h + mdp:/usr/include/linux/close_range.h + mdp:/usr/include/linux/errno.h + mdp:/usr/include/linux/limits.h + mdp:/usr/include/linux/posix_types.h + mdp:/usr/include/linux/sched/types.h + mdp:/usr/include/linux/stddef.h + mdp:/usr/include/linux/types.h + mdp:/usr/include/locale.h + mdp:/usr/include/pthread.h + mdp:/usr/include/qt6/QtCore/QDir + mdp:/usr/include/qt6/QtCore/QDirIterator + mdp:/usr/include/qt6/QtCore/QFileInfo + mdp:/usr/include/qt6/QtCore/QHash + mdp:/usr/include/qt6/QtCore/QObject + mdp:/usr/include/qt6/QtCore/QString + mdp:/usr/include/qt6/QtCore/QStringList + mdp:/usr/include/qt6/QtCore/QThread + mdp:/usr/include/qt6/QtCore/q17memory.h + mdp:/usr/include/qt6/QtCore/q20functional.h + mdp:/usr/include/qt6/QtCore/q20iterator.h + mdp:/usr/include/qt6/QtCore/q20memory.h + mdp:/usr/include/qt6/QtCore/q20type_traits.h + mdp:/usr/include/qt6/QtCore/q20utility.h + mdp:/usr/include/qt6/QtCore/q23type_traits.h + mdp:/usr/include/qt6/QtCore/q23utility.h + mdp:/usr/include/qt6/QtCore/qalgorithms.h + mdp:/usr/include/qt6/QtCore/qalloc.h + mdp:/usr/include/qt6/QtCore/qanystringview.h + mdp:/usr/include/qt6/QtCore/qarraydata.h + mdp:/usr/include/qt6/QtCore/qarraydataops.h + mdp:/usr/include/qt6/QtCore/qarraydatapointer.h + mdp:/usr/include/qt6/QtCore/qassert.h + mdp:/usr/include/qt6/QtCore/qatomic.h + mdp:/usr/include/qt6/QtCore/qatomic_cxx11.h + mdp:/usr/include/qt6/QtCore/qbasicatomic.h + mdp:/usr/include/qt6/QtCore/qbindingstorage.h + mdp:/usr/include/qt6/QtCore/qbytearray.h + mdp:/usr/include/qt6/QtCore/qbytearrayalgorithms.h + mdp:/usr/include/qt6/QtCore/qbytearraylist.h + mdp:/usr/include/qt6/QtCore/qbytearrayview.h + mdp:/usr/include/qt6/QtCore/qcalendar.h + mdp:/usr/include/qt6/QtCore/qchar.h + mdp:/usr/include/qt6/QtCore/qcompare.h + mdp:/usr/include/qt6/QtCore/qcompare_impl.h + mdp:/usr/include/qt6/QtCore/qcomparehelpers.h + mdp:/usr/include/qt6/QtCore/qcompilerdetection.h + mdp:/usr/include/qt6/QtCore/qconfig-64.h + mdp:/usr/include/qt6/QtCore/qconfig.h + mdp:/usr/include/qt6/QtCore/qconstructormacros.h + mdp:/usr/include/qt6/QtCore/qcontainerfwd.h + mdp:/usr/include/qt6/QtCore/qcontainerinfo.h + mdp:/usr/include/qt6/QtCore/qcontainertools_impl.h + mdp:/usr/include/qt6/QtCore/qcontiguouscache.h + mdp:/usr/include/qt6/QtCore/qdarwinhelpers.h + mdp:/usr/include/qt6/QtCore/qdatastream.h + mdp:/usr/include/qt6/QtCore/qdatetime.h + mdp:/usr/include/qt6/QtCore/qdeadlinetimer.h + mdp:/usr/include/qt6/QtCore/qdebug.h + mdp:/usr/include/qt6/QtCore/qdir.h + mdp:/usr/include/qt6/QtCore/qdiriterator.h + mdp:/usr/include/qt6/QtCore/qdirlisting.h + mdp:/usr/include/qt6/QtCore/qexceptionhandling.h + mdp:/usr/include/qt6/QtCore/qfile.h + mdp:/usr/include/qt6/QtCore/qfiledevice.h + mdp:/usr/include/qt6/QtCore/qfileinfo.h + mdp:/usr/include/qt6/QtCore/qflags.h + mdp:/usr/include/qt6/QtCore/qfloat16.h + mdp:/usr/include/qt6/QtCore/qforeach.h + mdp:/usr/include/qt6/QtCore/qfunctionaltools_impl.h + mdp:/usr/include/qt6/QtCore/qfunctionpointer.h + mdp:/usr/include/qt6/QtCore/qgenericatomic.h + mdp:/usr/include/qt6/QtCore/qglobal.h + mdp:/usr/include/qt6/QtCore/qglobalstatic.h + mdp:/usr/include/qt6/QtCore/qhash.h + mdp:/usr/include/qt6/QtCore/qhashfunctions.h + mdp:/usr/include/qt6/QtCore/qiodevice.h + mdp:/usr/include/qt6/QtCore/qiodevicebase.h + mdp:/usr/include/qt6/QtCore/qiterable.h + mdp:/usr/include/qt6/QtCore/qiterator.h + mdp:/usr/include/qt6/QtCore/qlatin1stringview.h + mdp:/usr/include/qt6/QtCore/qlist.h + mdp:/usr/include/qt6/QtCore/qlocale.h + mdp:/usr/include/qt6/QtCore/qlogging.h + mdp:/usr/include/qt6/QtCore/qmalloc.h + mdp:/usr/include/qt6/QtCore/qmap.h + mdp:/usr/include/qt6/QtCore/qmath.h + mdp:/usr/include/qt6/QtCore/qmetacontainer.h + mdp:/usr/include/qt6/QtCore/qmetaobject.h + mdp:/usr/include/qt6/QtCore/qmetatype.h + mdp:/usr/include/qt6/QtCore/qminmax.h + mdp:/usr/include/qt6/QtCore/qnamespace.h + mdp:/usr/include/qt6/QtCore/qnumeric.h + mdp:/usr/include/qt6/QtCore/qobject.h + mdp:/usr/include/qt6/QtCore/qobject_impl.h + mdp:/usr/include/qt6/QtCore/qobjectdefs.h + mdp:/usr/include/qt6/QtCore/qobjectdefs_impl.h + mdp:/usr/include/qt6/QtCore/qoverload.h + mdp:/usr/include/qt6/QtCore/qpair.h + mdp:/usr/include/qt6/QtCore/qprocessordetection.h + mdp:/usr/include/qt6/QtCore/qrefcount.h + mdp:/usr/include/qt6/QtCore/qscopedpointer.h + mdp:/usr/include/qt6/QtCore/qscopeguard.h + mdp:/usr/include/qt6/QtCore/qset.h + mdp:/usr/include/qt6/QtCore/qshareddata.h + mdp:/usr/include/qt6/QtCore/qshareddata_impl.h + mdp:/usr/include/qt6/QtCore/qsharedpointer.h + mdp:/usr/include/qt6/QtCore/qsharedpointer_impl.h + mdp:/usr/include/qt6/QtCore/qspan.h + mdp:/usr/include/qt6/QtCore/qstdlibdetection.h + mdp:/usr/include/qt6/QtCore/qstring.h + mdp:/usr/include/qt6/QtCore/qstringalgorithms.h + mdp:/usr/include/qt6/QtCore/qstringbuilder.h + mdp:/usr/include/qt6/QtCore/qstringconverter.h + mdp:/usr/include/qt6/QtCore/qstringconverter_base.h + mdp:/usr/include/qt6/QtCore/qstringfwd.h + mdp:/usr/include/qt6/QtCore/qstringlist.h + mdp:/usr/include/qt6/QtCore/qstringmatcher.h + mdp:/usr/include/qt6/QtCore/qstringtokenizer.h + mdp:/usr/include/qt6/QtCore/qstringview.h + mdp:/usr/include/qt6/QtCore/qswap.h + mdp:/usr/include/qt6/QtCore/qsysinfo.h + mdp:/usr/include/qt6/QtCore/qsystemdetection.h + mdp:/usr/include/qt6/QtCore/qtaggedpointer.h + mdp:/usr/include/qt6/QtCore/qtclasshelpermacros.h + mdp:/usr/include/qt6/QtCore/qtconfiginclude.h + mdp:/usr/include/qt6/QtCore/qtconfigmacros.h + mdp:/usr/include/qt6/QtCore/qtcore-config.h + mdp:/usr/include/qt6/QtCore/qtcoreexports.h + mdp:/usr/include/qt6/QtCore/qtcoreglobal.h + mdp:/usr/include/qt6/QtCore/qtdeprecationdefinitions.h + mdp:/usr/include/qt6/QtCore/qtdeprecationmarkers.h + mdp:/usr/include/qt6/QtCore/qtenvironmentvariables.h + mdp:/usr/include/qt6/QtCore/qtextstream.h + mdp:/usr/include/qt6/QtCore/qtformat_impl.h + mdp:/usr/include/qt6/QtCore/qthread.h + mdp:/usr/include/qt6/QtCore/qtimezone.h + mdp:/usr/include/qt6/QtCore/qtmetamacros.h + mdp:/usr/include/qt6/QtCore/qtnoop.h + mdp:/usr/include/qt6/QtCore/qtpreprocessorsupport.h + mdp:/usr/include/qt6/QtCore/qtresource.h + mdp:/usr/include/qt6/QtCore/qttranslation.h + mdp:/usr/include/qt6/QtCore/qttypetraits.h + mdp:/usr/include/qt6/QtCore/qtversion.h + mdp:/usr/include/qt6/QtCore/qtversionchecks.h + mdp:/usr/include/qt6/QtCore/qtypeinfo.h + mdp:/usr/include/qt6/QtCore/qtypes.h + mdp:/usr/include/qt6/QtCore/qutf8stringview.h + mdp:/usr/include/qt6/QtCore/qvariant.h + mdp:/usr/include/qt6/QtCore/qvarlengtharray.h + mdp:/usr/include/qt6/QtCore/qversiontagging.h + mdp:/usr/include/qt6/QtCore/qxptype_traits.h + mdp:/usr/include/qt6/QtCore/qyieldcpu.h + mdp:/usr/include/qt6/QtSql/QSqlDatabase + mdp:/usr/include/qt6/QtSql/QSqlError + mdp:/usr/include/qt6/QtSql/QSqlQuery + mdp:/usr/include/qt6/QtSql/qsqldatabase.h + mdp:/usr/include/qt6/QtSql/qsqlerror.h + mdp:/usr/include/qt6/QtSql/qsqlquery.h + mdp:/usr/include/qt6/QtSql/qtsql-config.h + mdp:/usr/include/qt6/QtSql/qtsqlexports.h + mdp:/usr/include/qt6/QtSql/qtsqlglobal.h + mdp:/usr/include/sched.h + mdp:/usr/include/semaphore.h + mdp:/usr/include/stdc-predef.h + mdp:/usr/include/stdint.h + mdp:/usr/include/stdio.h + mdp:/usr/include/stdlib.h + mdp:/usr/include/string.h + mdp:/usr/include/strings.h + mdp:/usr/include/sys/cdefs.h + mdp:/usr/include/sys/select.h + mdp:/usr/include/sys/single_threaded.h + mdp:/usr/include/sys/syscall.h + mdp:/usr/include/sys/time.h + mdp:/usr/include/sys/types.h + mdp:/usr/include/syscall.h + mdp:/usr/include/time.h + mdp:/usr/include/unistd.h + mdp:/usr/include/wchar.h + mdp:/usr/include/wctype.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stdarg.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stdbool.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stddef.h +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/project_folders_model.h + mmc:Q_OBJECT + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/kassetmanagerqt_autogen/moc_predefs.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/project_folders_model.h + mdp:/usr/include/alloca.h + mdp:/usr/include/asm-generic/bitsperlong.h + mdp:/usr/include/asm-generic/errno-base.h + mdp:/usr/include/asm-generic/errno.h + mdp:/usr/include/asm-generic/int-ll64.h + mdp:/usr/include/asm-generic/posix_types.h + mdp:/usr/include/asm-generic/types.h + mdp:/usr/include/asm/bitsperlong.h + mdp:/usr/include/asm/errno.h + mdp:/usr/include/asm/posix_types.h + mdp:/usr/include/asm/posix_types_64.h + mdp:/usr/include/asm/types.h + mdp:/usr/include/asm/unistd.h + mdp:/usr/include/asm/unistd_64.h + mdp:/usr/include/assert.h + mdp:/usr/include/bits/atomic_wide_counter.h + mdp:/usr/include/bits/byteswap.h + mdp:/usr/include/bits/confname.h + mdp:/usr/include/bits/cpu-set.h + mdp:/usr/include/bits/endian.h + mdp:/usr/include/bits/endianness.h + mdp:/usr/include/bits/environments.h + mdp:/usr/include/bits/errno.h + mdp:/usr/include/bits/floatn-common.h + mdp:/usr/include/bits/floatn.h + mdp:/usr/include/bits/getopt_core.h + mdp:/usr/include/bits/getopt_posix.h + mdp:/usr/include/bits/libc-header-start.h + mdp:/usr/include/bits/local_lim.h + mdp:/usr/include/bits/locale.h + mdp:/usr/include/bits/long-double.h + mdp:/usr/include/bits/posix1_lim.h + mdp:/usr/include/bits/posix2_lim.h + mdp:/usr/include/bits/posix_opt.h + mdp:/usr/include/bits/pthread_stack_min-dynamic.h + mdp:/usr/include/bits/pthreadtypes-arch.h + mdp:/usr/include/bits/pthreadtypes.h + mdp:/usr/include/bits/sched.h + mdp:/usr/include/bits/select.h + mdp:/usr/include/bits/setjmp.h + mdp:/usr/include/bits/stdint-intn.h + mdp:/usr/include/bits/stdint-least.h + mdp:/usr/include/bits/stdint-uintn.h + mdp:/usr/include/bits/stdio_lim.h + mdp:/usr/include/bits/stdlib-float.h + mdp:/usr/include/bits/struct_mutex.h + mdp:/usr/include/bits/struct_rwlock.h + mdp:/usr/include/bits/syscall.h + mdp:/usr/include/bits/thread-shared-types.h + mdp:/usr/include/bits/time.h + mdp:/usr/include/bits/time64.h + mdp:/usr/include/bits/timesize.h + mdp:/usr/include/bits/timex.h + mdp:/usr/include/bits/types.h + mdp:/usr/include/bits/types/FILE.h + mdp:/usr/include/bits/types/__FILE.h + mdp:/usr/include/bits/types/__fpos64_t.h + mdp:/usr/include/bits/types/__fpos_t.h + mdp:/usr/include/bits/types/__locale_t.h + mdp:/usr/include/bits/types/__mbstate_t.h + mdp:/usr/include/bits/types/__sigset_t.h + mdp:/usr/include/bits/types/clock_t.h + mdp:/usr/include/bits/types/clockid_t.h + mdp:/usr/include/bits/types/cookie_io_functions_t.h + mdp:/usr/include/bits/types/error_t.h + mdp:/usr/include/bits/types/locale_t.h + mdp:/usr/include/bits/types/mbstate_t.h + mdp:/usr/include/bits/types/sigset_t.h + mdp:/usr/include/bits/types/struct_FILE.h + mdp:/usr/include/bits/types/struct___jmp_buf_tag.h + mdp:/usr/include/bits/types/struct_itimerspec.h + mdp:/usr/include/bits/types/struct_sched_param.h + mdp:/usr/include/bits/types/struct_timespec.h + mdp:/usr/include/bits/types/struct_timeval.h + mdp:/usr/include/bits/types/struct_tm.h + mdp:/usr/include/bits/types/time_t.h + mdp:/usr/include/bits/types/timer_t.h + mdp:/usr/include/bits/types/wint_t.h + mdp:/usr/include/bits/typesizes.h + mdp:/usr/include/bits/uintn-identity.h + mdp:/usr/include/bits/uio_lim.h + mdp:/usr/include/bits/unistd_ext.h + mdp:/usr/include/bits/waitflags.h + mdp:/usr/include/bits/waitstatus.h + mdp:/usr/include/bits/wchar.h + mdp:/usr/include/bits/wctype-wchar.h + mdp:/usr/include/bits/wordsize.h + mdp:/usr/include/bits/xopen_lim.h + mdp:/usr/include/c++/15/algorithm + mdp:/usr/include/c++/15/array + mdp:/usr/include/c++/15/atomic + mdp:/usr/include/c++/15/backward/auto_ptr.h + mdp:/usr/include/c++/15/backward/binders.h + mdp:/usr/include/c++/15/bit + mdp:/usr/include/c++/15/bits/algorithmfwd.h + mdp:/usr/include/c++/15/bits/align.h + mdp:/usr/include/c++/15/bits/alloc_traits.h + mdp:/usr/include/c++/15/bits/allocated_ptr.h + mdp:/usr/include/c++/15/bits/allocator.h + mdp:/usr/include/c++/15/bits/atomic_base.h + mdp:/usr/include/c++/15/bits/atomic_lockfree_defines.h + mdp:/usr/include/c++/15/bits/atomic_wait.h + mdp:/usr/include/c++/15/bits/basic_ios.h + mdp:/usr/include/c++/15/bits/basic_ios.tcc + mdp:/usr/include/c++/15/bits/basic_string.h + mdp:/usr/include/c++/15/bits/basic_string.tcc + mdp:/usr/include/c++/15/bits/char_traits.h + mdp:/usr/include/c++/15/bits/charconv.h + mdp:/usr/include/c++/15/bits/chrono.h + mdp:/usr/include/c++/15/bits/chrono_io.h + mdp:/usr/include/c++/15/bits/codecvt.h + mdp:/usr/include/c++/15/bits/concept_check.h + mdp:/usr/include/c++/15/bits/cpp_type_traits.h + mdp:/usr/include/c++/15/bits/cxxabi_forced.h + mdp:/usr/include/c++/15/bits/cxxabi_init_exception.h + mdp:/usr/include/c++/15/bits/enable_special_members.h + mdp:/usr/include/c++/15/bits/erase_if.h + mdp:/usr/include/c++/15/bits/exception.h + mdp:/usr/include/c++/15/bits/exception_defines.h + mdp:/usr/include/c++/15/bits/exception_ptr.h + mdp:/usr/include/c++/15/bits/functexcept.h + mdp:/usr/include/c++/15/bits/functional_hash.h + mdp:/usr/include/c++/15/bits/hash_bytes.h + mdp:/usr/include/c++/15/bits/hashtable.h + mdp:/usr/include/c++/15/bits/hashtable_policy.h + mdp:/usr/include/c++/15/bits/invoke.h + mdp:/usr/include/c++/15/bits/ios_base.h + mdp:/usr/include/c++/15/bits/istream.tcc + mdp:/usr/include/c++/15/bits/iterator_concepts.h + mdp:/usr/include/c++/15/bits/list.tcc + mdp:/usr/include/c++/15/bits/locale_classes.h + mdp:/usr/include/c++/15/bits/locale_classes.tcc + mdp:/usr/include/c++/15/bits/locale_conv.h + mdp:/usr/include/c++/15/bits/locale_facets.h + mdp:/usr/include/c++/15/bits/locale_facets.tcc + mdp:/usr/include/c++/15/bits/locale_facets_nonio.h + mdp:/usr/include/c++/15/bits/locale_facets_nonio.tcc + mdp:/usr/include/c++/15/bits/localefwd.h + mdp:/usr/include/c++/15/bits/max_size_type.h + mdp:/usr/include/c++/15/bits/memory_resource.h + mdp:/usr/include/c++/15/bits/memoryfwd.h + mdp:/usr/include/c++/15/bits/move.h + mdp:/usr/include/c++/15/bits/nested_exception.h + mdp:/usr/include/c++/15/bits/new_allocator.h + mdp:/usr/include/c++/15/bits/node_handle.h + mdp:/usr/include/c++/15/bits/ostream.h + mdp:/usr/include/c++/15/bits/ostream.tcc + mdp:/usr/include/c++/15/bits/ostream_insert.h + mdp:/usr/include/c++/15/bits/parse_numbers.h + mdp:/usr/include/c++/15/bits/postypes.h + mdp:/usr/include/c++/15/bits/predefined_ops.h + mdp:/usr/include/c++/15/bits/ptr_traits.h + mdp:/usr/include/c++/15/bits/quoted_string.h + mdp:/usr/include/c++/15/bits/range_access.h + mdp:/usr/include/c++/15/bits/ranges_algo.h + mdp:/usr/include/c++/15/bits/ranges_algobase.h + mdp:/usr/include/c++/15/bits/ranges_base.h + mdp:/usr/include/c++/15/bits/ranges_cmp.h + mdp:/usr/include/c++/15/bits/ranges_uninitialized.h + mdp:/usr/include/c++/15/bits/ranges_util.h + mdp:/usr/include/c++/15/bits/refwrap.h + mdp:/usr/include/c++/15/bits/requires_hosted.h + mdp:/usr/include/c++/15/bits/shared_ptr.h + mdp:/usr/include/c++/15/bits/shared_ptr_atomic.h + mdp:/usr/include/c++/15/bits/shared_ptr_base.h + mdp:/usr/include/c++/15/bits/specfun.h + mdp:/usr/include/c++/15/bits/sstream.tcc + mdp:/usr/include/c++/15/bits/std_abs.h + mdp:/usr/include/c++/15/bits/std_function.h + mdp:/usr/include/c++/15/bits/std_mutex.h + mdp:/usr/include/c++/15/bits/stl_algo.h + mdp:/usr/include/c++/15/bits/stl_algobase.h + mdp:/usr/include/c++/15/bits/stl_bvector.h + mdp:/usr/include/c++/15/bits/stl_construct.h + mdp:/usr/include/c++/15/bits/stl_function.h + mdp:/usr/include/c++/15/bits/stl_heap.h + mdp:/usr/include/c++/15/bits/stl_iterator.h + mdp:/usr/include/c++/15/bits/stl_iterator_base_funcs.h + mdp:/usr/include/c++/15/bits/stl_iterator_base_types.h + mdp:/usr/include/c++/15/bits/stl_list.h + mdp:/usr/include/c++/15/bits/stl_map.h + mdp:/usr/include/c++/15/bits/stl_multimap.h + mdp:/usr/include/c++/15/bits/stl_multiset.h + mdp:/usr/include/c++/15/bits/stl_numeric.h + mdp:/usr/include/c++/15/bits/stl_pair.h + mdp:/usr/include/c++/15/bits/stl_raw_storage_iter.h + mdp:/usr/include/c++/15/bits/stl_relops.h + mdp:/usr/include/c++/15/bits/stl_set.h + mdp:/usr/include/c++/15/bits/stl_tempbuf.h + mdp:/usr/include/c++/15/bits/stl_tree.h + mdp:/usr/include/c++/15/bits/stl_uninitialized.h + mdp:/usr/include/c++/15/bits/stl_vector.h + mdp:/usr/include/c++/15/bits/stream_iterator.h + mdp:/usr/include/c++/15/bits/streambuf.tcc + mdp:/usr/include/c++/15/bits/streambuf_iterator.h + mdp:/usr/include/c++/15/bits/string_view.tcc + mdp:/usr/include/c++/15/bits/stringfwd.h + mdp:/usr/include/c++/15/bits/uniform_int_dist.h + mdp:/usr/include/c++/15/bits/unique_ptr.h + mdp:/usr/include/c++/15/bits/unordered_map.h + mdp:/usr/include/c++/15/bits/unordered_set.h + mdp:/usr/include/c++/15/bits/uses_allocator.h + mdp:/usr/include/c++/15/bits/uses_allocator_args.h + mdp:/usr/include/c++/15/bits/utility.h + mdp:/usr/include/c++/15/bits/vector.tcc + mdp:/usr/include/c++/15/bits/version.h + mdp:/usr/include/c++/15/cctype + mdp:/usr/include/c++/15/cerrno + mdp:/usr/include/c++/15/charconv + mdp:/usr/include/c++/15/chrono + mdp:/usr/include/c++/15/climits + mdp:/usr/include/c++/15/clocale + mdp:/usr/include/c++/15/cmath + mdp:/usr/include/c++/15/compare + mdp:/usr/include/c++/15/concepts + mdp:/usr/include/c++/15/cstddef + mdp:/usr/include/c++/15/cstdint + mdp:/usr/include/c++/15/cstdio + mdp:/usr/include/c++/15/cstdlib + mdp:/usr/include/c++/15/cstring + mdp:/usr/include/c++/15/ctime + mdp:/usr/include/c++/15/cwchar + mdp:/usr/include/c++/15/cwctype + mdp:/usr/include/c++/15/debug/assertions.h + mdp:/usr/include/c++/15/debug/debug.h + mdp:/usr/include/c++/15/exception + mdp:/usr/include/c++/15/ext/aligned_buffer.h + mdp:/usr/include/c++/15/ext/alloc_traits.h + mdp:/usr/include/c++/15/ext/atomicity.h + mdp:/usr/include/c++/15/ext/concurrence.h + mdp:/usr/include/c++/15/ext/numeric_traits.h + mdp:/usr/include/c++/15/ext/string_conversions.h + mdp:/usr/include/c++/15/ext/type_traits.h + mdp:/usr/include/c++/15/format + mdp:/usr/include/c++/15/functional + mdp:/usr/include/c++/15/initializer_list + mdp:/usr/include/c++/15/iomanip + mdp:/usr/include/c++/15/ios + mdp:/usr/include/c++/15/iosfwd + mdp:/usr/include/c++/15/istream + mdp:/usr/include/c++/15/iterator + mdp:/usr/include/c++/15/limits + mdp:/usr/include/c++/15/list + mdp:/usr/include/c++/15/locale + mdp:/usr/include/c++/15/map + mdp:/usr/include/c++/15/memory + mdp:/usr/include/c++/15/new + mdp:/usr/include/c++/15/numeric + mdp:/usr/include/c++/15/optional + mdp:/usr/include/c++/15/ostream + mdp:/usr/include/c++/15/pstl/execution_defs.h + mdp:/usr/include/c++/15/pstl/glue_numeric_defs.h + mdp:/usr/include/c++/15/pstl/pstl_config.h + mdp:/usr/include/c++/15/ratio + mdp:/usr/include/c++/15/set + mdp:/usr/include/c++/15/sstream + mdp:/usr/include/c++/15/stdexcept + mdp:/usr/include/c++/15/streambuf + mdp:/usr/include/c++/15/string + mdp:/usr/include/c++/15/string_view + mdp:/usr/include/c++/15/system_error + mdp:/usr/include/c++/15/tr1/bessel_function.tcc + mdp:/usr/include/c++/15/tr1/beta_function.tcc + mdp:/usr/include/c++/15/tr1/ell_integral.tcc + mdp:/usr/include/c++/15/tr1/exp_integral.tcc + mdp:/usr/include/c++/15/tr1/gamma.tcc + mdp:/usr/include/c++/15/tr1/hypergeometric.tcc + mdp:/usr/include/c++/15/tr1/legendre_function.tcc + mdp:/usr/include/c++/15/tr1/modified_bessel_func.tcc + mdp:/usr/include/c++/15/tr1/poly_hermite.tcc + mdp:/usr/include/c++/15/tr1/poly_laguerre.tcc + mdp:/usr/include/c++/15/tr1/riemann_zeta.tcc + mdp:/usr/include/c++/15/tr1/special_function_util.h + mdp:/usr/include/c++/15/tuple + mdp:/usr/include/c++/15/type_traits + mdp:/usr/include/c++/15/typeinfo + mdp:/usr/include/c++/15/unordered_map + mdp:/usr/include/c++/15/unordered_set + mdp:/usr/include/c++/15/utility + mdp:/usr/include/c++/15/variant + mdp:/usr/include/c++/15/vector + mdp:/usr/include/c++/15/version + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/atomic_word.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++allocator.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++config.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++locale.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/cpu_defines.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/ctype_base.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/ctype_inline.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/error_constants.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/gthr-default.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/gthr.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/messages_members.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/os_defines.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/time_members.h + mdp:/usr/include/ctype.h + mdp:/usr/include/endian.h + mdp:/usr/include/errno.h + mdp:/usr/include/features-time64.h + mdp:/usr/include/features.h + mdp:/usr/include/gnu/stubs-64.h + mdp:/usr/include/gnu/stubs.h + mdp:/usr/include/libintl.h + mdp:/usr/include/limits.h + mdp:/usr/include/linux/close_range.h + mdp:/usr/include/linux/errno.h + mdp:/usr/include/linux/limits.h + mdp:/usr/include/linux/posix_types.h + mdp:/usr/include/linux/sched/types.h + mdp:/usr/include/linux/stddef.h + mdp:/usr/include/linux/types.h + mdp:/usr/include/locale.h + mdp:/usr/include/pthread.h + mdp:/usr/include/qt6/QtCore/QAbstractItemModel + mdp:/usr/include/qt6/QtCore/QHash + mdp:/usr/include/qt6/QtCore/QVector + mdp:/usr/include/qt6/QtCore/q17memory.h + mdp:/usr/include/qt6/QtCore/q20functional.h + mdp:/usr/include/qt6/QtCore/q20memory.h + mdp:/usr/include/qt6/QtCore/q20type_traits.h + mdp:/usr/include/qt6/QtCore/q20utility.h + mdp:/usr/include/qt6/QtCore/q23type_traits.h + mdp:/usr/include/qt6/QtCore/q23utility.h + mdp:/usr/include/qt6/QtCore/qabstractitemmodel.h + mdp:/usr/include/qt6/QtCore/qalgorithms.h + mdp:/usr/include/qt6/QtCore/qalloc.h + mdp:/usr/include/qt6/QtCore/qanystringview.h + mdp:/usr/include/qt6/QtCore/qarraydata.h + mdp:/usr/include/qt6/QtCore/qarraydataops.h + mdp:/usr/include/qt6/QtCore/qarraydatapointer.h + mdp:/usr/include/qt6/QtCore/qassert.h + mdp:/usr/include/qt6/QtCore/qatomic.h + mdp:/usr/include/qt6/QtCore/qatomic_cxx11.h + mdp:/usr/include/qt6/QtCore/qbasicatomic.h + mdp:/usr/include/qt6/QtCore/qbindingstorage.h + mdp:/usr/include/qt6/QtCore/qbytearray.h + mdp:/usr/include/qt6/QtCore/qbytearrayalgorithms.h + mdp:/usr/include/qt6/QtCore/qbytearraylist.h + mdp:/usr/include/qt6/QtCore/qbytearrayview.h + mdp:/usr/include/qt6/QtCore/qchar.h + mdp:/usr/include/qt6/QtCore/qcompare.h + mdp:/usr/include/qt6/QtCore/qcompare_impl.h + mdp:/usr/include/qt6/QtCore/qcomparehelpers.h + mdp:/usr/include/qt6/QtCore/qcompilerdetection.h + mdp:/usr/include/qt6/QtCore/qconfig-64.h + mdp:/usr/include/qt6/QtCore/qconfig.h + mdp:/usr/include/qt6/QtCore/qconstructormacros.h + mdp:/usr/include/qt6/QtCore/qcontainerfwd.h + mdp:/usr/include/qt6/QtCore/qcontainerinfo.h + mdp:/usr/include/qt6/QtCore/qcontainertools_impl.h + mdp:/usr/include/qt6/QtCore/qcontiguouscache.h + mdp:/usr/include/qt6/QtCore/qdarwinhelpers.h + mdp:/usr/include/qt6/QtCore/qdatastream.h + mdp:/usr/include/qt6/QtCore/qdebug.h + mdp:/usr/include/qt6/QtCore/qexceptionhandling.h + mdp:/usr/include/qt6/QtCore/qflags.h + mdp:/usr/include/qt6/QtCore/qfloat16.h + mdp:/usr/include/qt6/QtCore/qforeach.h + mdp:/usr/include/qt6/QtCore/qfunctionaltools_impl.h + mdp:/usr/include/qt6/QtCore/qfunctionpointer.h + mdp:/usr/include/qt6/QtCore/qgenericatomic.h + mdp:/usr/include/qt6/QtCore/qglobal.h + mdp:/usr/include/qt6/QtCore/qglobalstatic.h + mdp:/usr/include/qt6/QtCore/qhash.h + mdp:/usr/include/qt6/QtCore/qhashfunctions.h + mdp:/usr/include/qt6/QtCore/qiodevicebase.h + mdp:/usr/include/qt6/QtCore/qiterable.h + mdp:/usr/include/qt6/QtCore/qiterator.h + mdp:/usr/include/qt6/QtCore/qlatin1stringview.h + mdp:/usr/include/qt6/QtCore/qlist.h + mdp:/usr/include/qt6/QtCore/qlogging.h + mdp:/usr/include/qt6/QtCore/qmalloc.h + mdp:/usr/include/qt6/QtCore/qmap.h + mdp:/usr/include/qt6/QtCore/qmath.h + mdp:/usr/include/qt6/QtCore/qmetacontainer.h + mdp:/usr/include/qt6/QtCore/qmetatype.h + mdp:/usr/include/qt6/QtCore/qminmax.h + mdp:/usr/include/qt6/QtCore/qnamespace.h + mdp:/usr/include/qt6/QtCore/qnumeric.h + mdp:/usr/include/qt6/QtCore/qobject.h + mdp:/usr/include/qt6/QtCore/qobject_impl.h + mdp:/usr/include/qt6/QtCore/qobjectdefs.h + mdp:/usr/include/qt6/QtCore/qobjectdefs_impl.h + mdp:/usr/include/qt6/QtCore/qoverload.h + mdp:/usr/include/qt6/QtCore/qpair.h + mdp:/usr/include/qt6/QtCore/qprocessordetection.h + mdp:/usr/include/qt6/QtCore/qrefcount.h + mdp:/usr/include/qt6/QtCore/qscopedpointer.h + mdp:/usr/include/qt6/QtCore/qscopeguard.h + mdp:/usr/include/qt6/QtCore/qset.h + mdp:/usr/include/qt6/QtCore/qshareddata.h + mdp:/usr/include/qt6/QtCore/qshareddata_impl.h + mdp:/usr/include/qt6/QtCore/qsharedpointer.h + mdp:/usr/include/qt6/QtCore/qsharedpointer_impl.h + mdp:/usr/include/qt6/QtCore/qstdlibdetection.h + mdp:/usr/include/qt6/QtCore/qstring.h + mdp:/usr/include/qt6/QtCore/qstringalgorithms.h + mdp:/usr/include/qt6/QtCore/qstringbuilder.h + mdp:/usr/include/qt6/QtCore/qstringconverter.h + mdp:/usr/include/qt6/QtCore/qstringconverter_base.h + mdp:/usr/include/qt6/QtCore/qstringfwd.h + mdp:/usr/include/qt6/QtCore/qstringlist.h + mdp:/usr/include/qt6/QtCore/qstringmatcher.h + mdp:/usr/include/qt6/QtCore/qstringtokenizer.h + mdp:/usr/include/qt6/QtCore/qstringview.h + mdp:/usr/include/qt6/QtCore/qswap.h + mdp:/usr/include/qt6/QtCore/qsysinfo.h + mdp:/usr/include/qt6/QtCore/qsystemdetection.h + mdp:/usr/include/qt6/QtCore/qtaggedpointer.h + mdp:/usr/include/qt6/QtCore/qtclasshelpermacros.h + mdp:/usr/include/qt6/QtCore/qtconfiginclude.h + mdp:/usr/include/qt6/QtCore/qtconfigmacros.h + mdp:/usr/include/qt6/QtCore/qtcore-config.h + mdp:/usr/include/qt6/QtCore/qtcoreexports.h + mdp:/usr/include/qt6/QtCore/qtcoreglobal.h + mdp:/usr/include/qt6/QtCore/qtdeprecationdefinitions.h + mdp:/usr/include/qt6/QtCore/qtdeprecationmarkers.h + mdp:/usr/include/qt6/QtCore/qtenvironmentvariables.h + mdp:/usr/include/qt6/QtCore/qtextstream.h + mdp:/usr/include/qt6/QtCore/qtformat_impl.h + mdp:/usr/include/qt6/QtCore/qtmetamacros.h + mdp:/usr/include/qt6/QtCore/qtnoop.h + mdp:/usr/include/qt6/QtCore/qtpreprocessorsupport.h + mdp:/usr/include/qt6/QtCore/qtresource.h + mdp:/usr/include/qt6/QtCore/qttranslation.h + mdp:/usr/include/qt6/QtCore/qttypetraits.h + mdp:/usr/include/qt6/QtCore/qtversion.h + mdp:/usr/include/qt6/QtCore/qtversionchecks.h + mdp:/usr/include/qt6/QtCore/qtypeinfo.h + mdp:/usr/include/qt6/QtCore/qtypes.h + mdp:/usr/include/qt6/QtCore/qutf8stringview.h + mdp:/usr/include/qt6/QtCore/qvariant.h + mdp:/usr/include/qt6/QtCore/qvarlengtharray.h + mdp:/usr/include/qt6/QtCore/qvector.h + mdp:/usr/include/qt6/QtCore/qversiontagging.h + mdp:/usr/include/qt6/QtCore/qxptype_traits.h + mdp:/usr/include/qt6/QtCore/qyieldcpu.h + mdp:/usr/include/sched.h + mdp:/usr/include/stdc-predef.h + mdp:/usr/include/stdint.h + mdp:/usr/include/stdio.h + mdp:/usr/include/stdlib.h + mdp:/usr/include/string.h + mdp:/usr/include/strings.h + mdp:/usr/include/sys/cdefs.h + mdp:/usr/include/sys/select.h + mdp:/usr/include/sys/single_threaded.h + mdp:/usr/include/sys/syscall.h + mdp:/usr/include/sys/types.h + mdp:/usr/include/syscall.h + mdp:/usr/include/time.h + mdp:/usr/include/unistd.h + mdp:/usr/include/wchar.h + mdp:/usr/include/wctype.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stdarg.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stdbool.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stddef.h +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/file_ops.cpp +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/oiio_image_loader.cpp +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/media/tlrender_widget.h + mmc:Q_OBJECT + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/kassetmanagerqt_autogen/moc_predefs.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/media/tlrender_widget.h + mdp:/usr/include/GL/gl.h + mdp:/usr/include/alloca.h + mdp:/usr/include/asm-generic/bitsperlong.h + mdp:/usr/include/asm-generic/errno-base.h + mdp:/usr/include/asm-generic/errno.h + mdp:/usr/include/asm-generic/int-ll64.h + mdp:/usr/include/asm-generic/posix_types.h + mdp:/usr/include/asm-generic/types.h + mdp:/usr/include/asm/bitsperlong.h + mdp:/usr/include/asm/errno.h + mdp:/usr/include/asm/posix_types.h + mdp:/usr/include/asm/posix_types_64.h + mdp:/usr/include/asm/types.h + mdp:/usr/include/asm/unistd.h + mdp:/usr/include/asm/unistd_64.h + mdp:/usr/include/assert.h + mdp:/usr/include/bits/atomic_wide_counter.h + mdp:/usr/include/bits/byteswap.h + mdp:/usr/include/bits/confname.h + mdp:/usr/include/bits/cpu-set.h + mdp:/usr/include/bits/endian.h + mdp:/usr/include/bits/endianness.h + mdp:/usr/include/bits/environments.h + mdp:/usr/include/bits/errno.h + mdp:/usr/include/bits/floatn-common.h + mdp:/usr/include/bits/floatn.h + mdp:/usr/include/bits/getopt_core.h + mdp:/usr/include/bits/getopt_posix.h + mdp:/usr/include/bits/libc-header-start.h + mdp:/usr/include/bits/local_lim.h + mdp:/usr/include/bits/locale.h + mdp:/usr/include/bits/long-double.h + mdp:/usr/include/bits/posix1_lim.h + mdp:/usr/include/bits/posix2_lim.h + mdp:/usr/include/bits/posix_opt.h + mdp:/usr/include/bits/pthread_stack_min-dynamic.h + mdp:/usr/include/bits/pthreadtypes-arch.h + mdp:/usr/include/bits/pthreadtypes.h + mdp:/usr/include/bits/sched.h + mdp:/usr/include/bits/select.h + mdp:/usr/include/bits/setjmp.h + mdp:/usr/include/bits/stdint-intn.h + mdp:/usr/include/bits/stdint-least.h + mdp:/usr/include/bits/stdint-uintn.h + mdp:/usr/include/bits/stdio_lim.h + mdp:/usr/include/bits/stdlib-float.h + mdp:/usr/include/bits/struct_mutex.h + mdp:/usr/include/bits/struct_rwlock.h + mdp:/usr/include/bits/syscall.h + mdp:/usr/include/bits/thread-shared-types.h + mdp:/usr/include/bits/time.h + mdp:/usr/include/bits/time64.h + mdp:/usr/include/bits/timesize.h + mdp:/usr/include/bits/timex.h + mdp:/usr/include/bits/types.h + mdp:/usr/include/bits/types/FILE.h + mdp:/usr/include/bits/types/__FILE.h + mdp:/usr/include/bits/types/__fpos64_t.h + mdp:/usr/include/bits/types/__fpos_t.h + mdp:/usr/include/bits/types/__locale_t.h + mdp:/usr/include/bits/types/__mbstate_t.h + mdp:/usr/include/bits/types/__sigset_t.h + mdp:/usr/include/bits/types/clock_t.h + mdp:/usr/include/bits/types/clockid_t.h + mdp:/usr/include/bits/types/cookie_io_functions_t.h + mdp:/usr/include/bits/types/error_t.h + mdp:/usr/include/bits/types/locale_t.h + mdp:/usr/include/bits/types/mbstate_t.h + mdp:/usr/include/bits/types/sigset_t.h + mdp:/usr/include/bits/types/struct_FILE.h + mdp:/usr/include/bits/types/struct___jmp_buf_tag.h + mdp:/usr/include/bits/types/struct_itimerspec.h + mdp:/usr/include/bits/types/struct_sched_param.h + mdp:/usr/include/bits/types/struct_timespec.h + mdp:/usr/include/bits/types/struct_timeval.h + mdp:/usr/include/bits/types/struct_tm.h + mdp:/usr/include/bits/types/time_t.h + mdp:/usr/include/bits/types/timer_t.h + mdp:/usr/include/bits/types/wint_t.h + mdp:/usr/include/bits/typesizes.h + mdp:/usr/include/bits/uintn-identity.h + mdp:/usr/include/bits/uio_lim.h + mdp:/usr/include/bits/unistd_ext.h + mdp:/usr/include/bits/waitflags.h + mdp:/usr/include/bits/waitstatus.h + mdp:/usr/include/bits/wchar.h + mdp:/usr/include/bits/wctype-wchar.h + mdp:/usr/include/bits/wordsize.h + mdp:/usr/include/bits/xopen_lim.h + mdp:/usr/include/c++/15/algorithm + mdp:/usr/include/c++/15/array + mdp:/usr/include/c++/15/atomic + mdp:/usr/include/c++/15/backward/auto_ptr.h + mdp:/usr/include/c++/15/backward/binders.h + mdp:/usr/include/c++/15/bit + mdp:/usr/include/c++/15/bits/algorithmfwd.h + mdp:/usr/include/c++/15/bits/align.h + mdp:/usr/include/c++/15/bits/alloc_traits.h + mdp:/usr/include/c++/15/bits/allocated_ptr.h + mdp:/usr/include/c++/15/bits/allocator.h + mdp:/usr/include/c++/15/bits/atomic_base.h + mdp:/usr/include/c++/15/bits/atomic_lockfree_defines.h + mdp:/usr/include/c++/15/bits/atomic_wait.h + mdp:/usr/include/c++/15/bits/basic_ios.h + mdp:/usr/include/c++/15/bits/basic_ios.tcc + mdp:/usr/include/c++/15/bits/basic_string.h + mdp:/usr/include/c++/15/bits/basic_string.tcc + mdp:/usr/include/c++/15/bits/char_traits.h + mdp:/usr/include/c++/15/bits/charconv.h + mdp:/usr/include/c++/15/bits/chrono.h + mdp:/usr/include/c++/15/bits/chrono_io.h + mdp:/usr/include/c++/15/bits/codecvt.h + mdp:/usr/include/c++/15/bits/concept_check.h + mdp:/usr/include/c++/15/bits/cpp_type_traits.h + mdp:/usr/include/c++/15/bits/cxxabi_forced.h + mdp:/usr/include/c++/15/bits/cxxabi_init_exception.h + mdp:/usr/include/c++/15/bits/enable_special_members.h + mdp:/usr/include/c++/15/bits/erase_if.h + mdp:/usr/include/c++/15/bits/exception.h + mdp:/usr/include/c++/15/bits/exception_defines.h + mdp:/usr/include/c++/15/bits/exception_ptr.h + mdp:/usr/include/c++/15/bits/functexcept.h + mdp:/usr/include/c++/15/bits/functional_hash.h + mdp:/usr/include/c++/15/bits/hash_bytes.h + mdp:/usr/include/c++/15/bits/hashtable.h + mdp:/usr/include/c++/15/bits/hashtable_policy.h + mdp:/usr/include/c++/15/bits/invoke.h + mdp:/usr/include/c++/15/bits/ios_base.h + mdp:/usr/include/c++/15/bits/istream.tcc + mdp:/usr/include/c++/15/bits/iterator_concepts.h + mdp:/usr/include/c++/15/bits/list.tcc + mdp:/usr/include/c++/15/bits/locale_classes.h + mdp:/usr/include/c++/15/bits/locale_classes.tcc + mdp:/usr/include/c++/15/bits/locale_conv.h + mdp:/usr/include/c++/15/bits/locale_facets.h + mdp:/usr/include/c++/15/bits/locale_facets.tcc + mdp:/usr/include/c++/15/bits/locale_facets_nonio.h + mdp:/usr/include/c++/15/bits/locale_facets_nonio.tcc + mdp:/usr/include/c++/15/bits/localefwd.h + mdp:/usr/include/c++/15/bits/max_size_type.h + mdp:/usr/include/c++/15/bits/memory_resource.h + mdp:/usr/include/c++/15/bits/memoryfwd.h + mdp:/usr/include/c++/15/bits/move.h + mdp:/usr/include/c++/15/bits/nested_exception.h + mdp:/usr/include/c++/15/bits/new_allocator.h + mdp:/usr/include/c++/15/bits/node_handle.h + mdp:/usr/include/c++/15/bits/ostream.h + mdp:/usr/include/c++/15/bits/ostream.tcc + mdp:/usr/include/c++/15/bits/ostream_insert.h + mdp:/usr/include/c++/15/bits/parse_numbers.h + mdp:/usr/include/c++/15/bits/postypes.h + mdp:/usr/include/c++/15/bits/predefined_ops.h + mdp:/usr/include/c++/15/bits/ptr_traits.h + mdp:/usr/include/c++/15/bits/quoted_string.h + mdp:/usr/include/c++/15/bits/range_access.h + mdp:/usr/include/c++/15/bits/ranges_algo.h + mdp:/usr/include/c++/15/bits/ranges_algobase.h + mdp:/usr/include/c++/15/bits/ranges_base.h + mdp:/usr/include/c++/15/bits/ranges_cmp.h + mdp:/usr/include/c++/15/bits/ranges_uninitialized.h + mdp:/usr/include/c++/15/bits/ranges_util.h + mdp:/usr/include/c++/15/bits/refwrap.h + mdp:/usr/include/c++/15/bits/requires_hosted.h + mdp:/usr/include/c++/15/bits/shared_ptr.h + mdp:/usr/include/c++/15/bits/shared_ptr_atomic.h + mdp:/usr/include/c++/15/bits/shared_ptr_base.h + mdp:/usr/include/c++/15/bits/specfun.h + mdp:/usr/include/c++/15/bits/sstream.tcc + mdp:/usr/include/c++/15/bits/std_abs.h + mdp:/usr/include/c++/15/bits/std_function.h + mdp:/usr/include/c++/15/bits/std_mutex.h + mdp:/usr/include/c++/15/bits/stl_algo.h + mdp:/usr/include/c++/15/bits/stl_algobase.h + mdp:/usr/include/c++/15/bits/stl_bvector.h + mdp:/usr/include/c++/15/bits/stl_construct.h + mdp:/usr/include/c++/15/bits/stl_function.h + mdp:/usr/include/c++/15/bits/stl_heap.h + mdp:/usr/include/c++/15/bits/stl_iterator.h + mdp:/usr/include/c++/15/bits/stl_iterator_base_funcs.h + mdp:/usr/include/c++/15/bits/stl_iterator_base_types.h + mdp:/usr/include/c++/15/bits/stl_list.h + mdp:/usr/include/c++/15/bits/stl_map.h + mdp:/usr/include/c++/15/bits/stl_multimap.h + mdp:/usr/include/c++/15/bits/stl_multiset.h + mdp:/usr/include/c++/15/bits/stl_numeric.h + mdp:/usr/include/c++/15/bits/stl_pair.h + mdp:/usr/include/c++/15/bits/stl_raw_storage_iter.h + mdp:/usr/include/c++/15/bits/stl_relops.h + mdp:/usr/include/c++/15/bits/stl_set.h + mdp:/usr/include/c++/15/bits/stl_tempbuf.h + mdp:/usr/include/c++/15/bits/stl_tree.h + mdp:/usr/include/c++/15/bits/stl_uninitialized.h + mdp:/usr/include/c++/15/bits/stl_vector.h + mdp:/usr/include/c++/15/bits/stream_iterator.h + mdp:/usr/include/c++/15/bits/streambuf.tcc + mdp:/usr/include/c++/15/bits/streambuf_iterator.h + mdp:/usr/include/c++/15/bits/string_view.tcc + mdp:/usr/include/c++/15/bits/stringfwd.h + mdp:/usr/include/c++/15/bits/uniform_int_dist.h + mdp:/usr/include/c++/15/bits/unique_ptr.h + mdp:/usr/include/c++/15/bits/unordered_map.h + mdp:/usr/include/c++/15/bits/unordered_set.h + mdp:/usr/include/c++/15/bits/uses_allocator.h + mdp:/usr/include/c++/15/bits/uses_allocator_args.h + mdp:/usr/include/c++/15/bits/utility.h + mdp:/usr/include/c++/15/bits/vector.tcc + mdp:/usr/include/c++/15/bits/version.h + mdp:/usr/include/c++/15/cassert + mdp:/usr/include/c++/15/cctype + mdp:/usr/include/c++/15/cerrno + mdp:/usr/include/c++/15/charconv + mdp:/usr/include/c++/15/chrono + mdp:/usr/include/c++/15/climits + mdp:/usr/include/c++/15/clocale + mdp:/usr/include/c++/15/cmath + mdp:/usr/include/c++/15/compare + mdp:/usr/include/c++/15/concepts + mdp:/usr/include/c++/15/cstddef + mdp:/usr/include/c++/15/cstdint + mdp:/usr/include/c++/15/cstdio + mdp:/usr/include/c++/15/cstdlib + mdp:/usr/include/c++/15/cstring + mdp:/usr/include/c++/15/ctime + mdp:/usr/include/c++/15/cwchar + mdp:/usr/include/c++/15/cwctype + mdp:/usr/include/c++/15/debug/assertions.h + mdp:/usr/include/c++/15/debug/debug.h + mdp:/usr/include/c++/15/exception + mdp:/usr/include/c++/15/ext/aligned_buffer.h + mdp:/usr/include/c++/15/ext/alloc_traits.h + mdp:/usr/include/c++/15/ext/atomicity.h + mdp:/usr/include/c++/15/ext/concurrence.h + mdp:/usr/include/c++/15/ext/numeric_traits.h + mdp:/usr/include/c++/15/ext/string_conversions.h + mdp:/usr/include/c++/15/ext/type_traits.h + mdp:/usr/include/c++/15/format + mdp:/usr/include/c++/15/functional + mdp:/usr/include/c++/15/initializer_list + mdp:/usr/include/c++/15/iomanip + mdp:/usr/include/c++/15/ios + mdp:/usr/include/c++/15/iosfwd + mdp:/usr/include/c++/15/istream + mdp:/usr/include/c++/15/iterator + mdp:/usr/include/c++/15/limits + mdp:/usr/include/c++/15/list + mdp:/usr/include/c++/15/locale + mdp:/usr/include/c++/15/map + mdp:/usr/include/c++/15/memory + mdp:/usr/include/c++/15/new + mdp:/usr/include/c++/15/numeric + mdp:/usr/include/c++/15/optional + mdp:/usr/include/c++/15/ostream + mdp:/usr/include/c++/15/pstl/execution_defs.h + mdp:/usr/include/c++/15/pstl/glue_numeric_defs.h + mdp:/usr/include/c++/15/pstl/pstl_config.h + mdp:/usr/include/c++/15/ratio + mdp:/usr/include/c++/15/set + mdp:/usr/include/c++/15/sstream + mdp:/usr/include/c++/15/stdexcept + mdp:/usr/include/c++/15/streambuf + mdp:/usr/include/c++/15/string + mdp:/usr/include/c++/15/string_view + mdp:/usr/include/c++/15/system_error + mdp:/usr/include/c++/15/tr1/bessel_function.tcc + mdp:/usr/include/c++/15/tr1/beta_function.tcc + mdp:/usr/include/c++/15/tr1/ell_integral.tcc + mdp:/usr/include/c++/15/tr1/exp_integral.tcc + mdp:/usr/include/c++/15/tr1/gamma.tcc + mdp:/usr/include/c++/15/tr1/hypergeometric.tcc + mdp:/usr/include/c++/15/tr1/legendre_function.tcc + mdp:/usr/include/c++/15/tr1/modified_bessel_func.tcc + mdp:/usr/include/c++/15/tr1/poly_hermite.tcc + mdp:/usr/include/c++/15/tr1/poly_laguerre.tcc + mdp:/usr/include/c++/15/tr1/riemann_zeta.tcc + mdp:/usr/include/c++/15/tr1/special_function_util.h + mdp:/usr/include/c++/15/tuple + mdp:/usr/include/c++/15/type_traits + mdp:/usr/include/c++/15/typeinfo + mdp:/usr/include/c++/15/unordered_map + mdp:/usr/include/c++/15/unordered_set + mdp:/usr/include/c++/15/utility + mdp:/usr/include/c++/15/variant + mdp:/usr/include/c++/15/vector + mdp:/usr/include/c++/15/version + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/atomic_word.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++allocator.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++config.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++locale.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/cpu_defines.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/ctype_base.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/ctype_inline.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/error_constants.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/gthr-default.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/gthr.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/messages_members.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/os_defines.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/time_members.h + mdp:/usr/include/ctype.h + mdp:/usr/include/endian.h + mdp:/usr/include/errno.h + mdp:/usr/include/features-time64.h + mdp:/usr/include/features.h + mdp:/usr/include/gnu/stubs-64.h + mdp:/usr/include/gnu/stubs.h + mdp:/usr/include/inttypes.h + mdp:/usr/include/libintl.h + mdp:/usr/include/limits.h + mdp:/usr/include/linux/close_range.h + mdp:/usr/include/linux/errno.h + mdp:/usr/include/linux/limits.h + mdp:/usr/include/linux/posix_types.h + mdp:/usr/include/linux/sched/types.h + mdp:/usr/include/linux/stddef.h + mdp:/usr/include/linux/types.h + mdp:/usr/include/locale.h + mdp:/usr/include/pthread.h + mdp:/usr/include/qt6/QtCore/QElapsedTimer + mdp:/usr/include/qt6/QtCore/QTimer + mdp:/usr/include/qt6/QtCore/q17memory.h + mdp:/usr/include/qt6/QtCore/q20functional.h + mdp:/usr/include/qt6/QtCore/q20iterator.h + mdp:/usr/include/qt6/QtCore/q20memory.h + mdp:/usr/include/qt6/QtCore/q20type_traits.h + mdp:/usr/include/qt6/QtCore/q20utility.h + mdp:/usr/include/qt6/QtCore/q23type_traits.h + mdp:/usr/include/qt6/QtCore/q23utility.h + mdp:/usr/include/qt6/QtCore/qabstracteventdispatcher.h + mdp:/usr/include/qt6/QtCore/qalgorithms.h + mdp:/usr/include/qt6/QtCore/qalloc.h + mdp:/usr/include/qt6/QtCore/qanystringview.h + mdp:/usr/include/qt6/QtCore/qarraydata.h + mdp:/usr/include/qt6/QtCore/qarraydataops.h + mdp:/usr/include/qt6/QtCore/qarraydatapointer.h + mdp:/usr/include/qt6/QtCore/qassert.h + mdp:/usr/include/qt6/QtCore/qatomic.h + mdp:/usr/include/qt6/QtCore/qatomic_cxx11.h + mdp:/usr/include/qt6/QtCore/qbasicatomic.h + mdp:/usr/include/qt6/QtCore/qbasictimer.h + mdp:/usr/include/qt6/QtCore/qbindingstorage.h + mdp:/usr/include/qt6/QtCore/qbytearray.h + mdp:/usr/include/qt6/QtCore/qbytearrayalgorithms.h + mdp:/usr/include/qt6/QtCore/qbytearraylist.h + mdp:/usr/include/qt6/QtCore/qbytearrayview.h + mdp:/usr/include/qt6/QtCore/qchar.h + mdp:/usr/include/qt6/QtCore/qcheckedint_impl.h + mdp:/usr/include/qt6/QtCore/qcompare.h + mdp:/usr/include/qt6/QtCore/qcompare_impl.h + mdp:/usr/include/qt6/QtCore/qcomparehelpers.h + mdp:/usr/include/qt6/QtCore/qcompilerdetection.h + mdp:/usr/include/qt6/QtCore/qconfig-64.h + mdp:/usr/include/qt6/QtCore/qconfig.h + mdp:/usr/include/qt6/QtCore/qconstructormacros.h + mdp:/usr/include/qt6/QtCore/qcontainerfwd.h + mdp:/usr/include/qt6/QtCore/qcontainerinfo.h + mdp:/usr/include/qt6/QtCore/qcontainertools_impl.h + mdp:/usr/include/qt6/QtCore/qcontiguouscache.h + mdp:/usr/include/qt6/QtCore/qdarwinhelpers.h + mdp:/usr/include/qt6/QtCore/qdatastream.h + mdp:/usr/include/qt6/QtCore/qdeadlinetimer.h + mdp:/usr/include/qt6/QtCore/qdebug.h + mdp:/usr/include/qt6/QtCore/qelapsedtimer.h + mdp:/usr/include/qt6/QtCore/qendian.h + mdp:/usr/include/qt6/QtCore/qeventloop.h + mdp:/usr/include/qt6/QtCore/qexceptionhandling.h + mdp:/usr/include/qt6/QtCore/qflags.h + mdp:/usr/include/qt6/QtCore/qfloat16.h + mdp:/usr/include/qt6/QtCore/qforeach.h + mdp:/usr/include/qt6/QtCore/qfunctionaltools_impl.h + mdp:/usr/include/qt6/QtCore/qfunctionpointer.h + mdp:/usr/include/qt6/QtCore/qgenericatomic.h + mdp:/usr/include/qt6/QtCore/qglobal.h + mdp:/usr/include/qt6/QtCore/qglobalstatic.h + mdp:/usr/include/qt6/QtCore/qhash.h + mdp:/usr/include/qt6/QtCore/qhashfunctions.h + mdp:/usr/include/qt6/QtCore/qiodevicebase.h + mdp:/usr/include/qt6/QtCore/qiterable.h + mdp:/usr/include/qt6/QtCore/qiterator.h + mdp:/usr/include/qt6/QtCore/qlatin1stringview.h + mdp:/usr/include/qt6/QtCore/qline.h + mdp:/usr/include/qt6/QtCore/qlist.h + mdp:/usr/include/qt6/QtCore/qlogging.h + mdp:/usr/include/qt6/QtCore/qmalloc.h + mdp:/usr/include/qt6/QtCore/qmap.h + mdp:/usr/include/qt6/QtCore/qmargins.h + mdp:/usr/include/qt6/QtCore/qmath.h + mdp:/usr/include/qt6/QtCore/qmetacontainer.h + mdp:/usr/include/qt6/QtCore/qmetatype.h + mdp:/usr/include/qt6/QtCore/qminmax.h + mdp:/usr/include/qt6/QtCore/qnamespace.h + mdp:/usr/include/qt6/QtCore/qnativeinterface.h + mdp:/usr/include/qt6/QtCore/qnumeric.h + mdp:/usr/include/qt6/QtCore/qobject.h + mdp:/usr/include/qt6/QtCore/qobject_impl.h + mdp:/usr/include/qt6/QtCore/qobjectdefs.h + mdp:/usr/include/qt6/QtCore/qobjectdefs_impl.h + mdp:/usr/include/qt6/QtCore/qoverload.h + mdp:/usr/include/qt6/QtCore/qpair.h + mdp:/usr/include/qt6/QtCore/qpoint.h + mdp:/usr/include/qt6/QtCore/qprocessordetection.h + mdp:/usr/include/qt6/QtCore/qrect.h + mdp:/usr/include/qt6/QtCore/qrefcount.h + mdp:/usr/include/qt6/QtCore/qscopedpointer.h + mdp:/usr/include/qt6/QtCore/qscopeguard.h + mdp:/usr/include/qt6/QtCore/qset.h + mdp:/usr/include/qt6/QtCore/qshareddata.h + mdp:/usr/include/qt6/QtCore/qshareddata_impl.h + mdp:/usr/include/qt6/QtCore/qsharedpointer.h + mdp:/usr/include/qt6/QtCore/qsharedpointer_impl.h + mdp:/usr/include/qt6/QtCore/qsize.h + mdp:/usr/include/qt6/QtCore/qspan.h + mdp:/usr/include/qt6/QtCore/qstdlibdetection.h + mdp:/usr/include/qt6/QtCore/qstring.h + mdp:/usr/include/qt6/QtCore/qstringalgorithms.h + mdp:/usr/include/qt6/QtCore/qstringbuilder.h + mdp:/usr/include/qt6/QtCore/qstringconverter.h + mdp:/usr/include/qt6/QtCore/qstringconverter_base.h + mdp:/usr/include/qt6/QtCore/qstringfwd.h + mdp:/usr/include/qt6/QtCore/qstringlist.h + mdp:/usr/include/qt6/QtCore/qstringmatcher.h + mdp:/usr/include/qt6/QtCore/qstringtokenizer.h + mdp:/usr/include/qt6/QtCore/qstringview.h + mdp:/usr/include/qt6/QtCore/qswap.h + mdp:/usr/include/qt6/QtCore/qsysinfo.h + mdp:/usr/include/qt6/QtCore/qsystemdetection.h + mdp:/usr/include/qt6/QtCore/qtaggedpointer.h + mdp:/usr/include/qt6/QtCore/qtclasshelpermacros.h + mdp:/usr/include/qt6/QtCore/qtconfiginclude.h + mdp:/usr/include/qt6/QtCore/qtconfigmacros.h + mdp:/usr/include/qt6/QtCore/qtcore-config.h + mdp:/usr/include/qt6/QtCore/qtcoreexports.h + mdp:/usr/include/qt6/QtCore/qtcoreglobal.h + mdp:/usr/include/qt6/QtCore/qtdeprecationdefinitions.h + mdp:/usr/include/qt6/QtCore/qtdeprecationmarkers.h + mdp:/usr/include/qt6/QtCore/qtenvironmentvariables.h + mdp:/usr/include/qt6/QtCore/qtextstream.h + mdp:/usr/include/qt6/QtCore/qtformat_impl.h + mdp:/usr/include/qt6/QtCore/qtimer.h + mdp:/usr/include/qt6/QtCore/qtmetamacros.h + mdp:/usr/include/qt6/QtCore/qtnoop.h + mdp:/usr/include/qt6/QtCore/qtpreprocessorsupport.h + mdp:/usr/include/qt6/QtCore/qtresource.h + mdp:/usr/include/qt6/QtCore/qttranslation.h + mdp:/usr/include/qt6/QtCore/qttypetraits.h + mdp:/usr/include/qt6/QtCore/qtversion.h + mdp:/usr/include/qt6/QtCore/qtversionchecks.h + mdp:/usr/include/qt6/QtCore/qtypeinfo.h + mdp:/usr/include/qt6/QtCore/qtypes.h + mdp:/usr/include/qt6/QtCore/qutf8stringview.h + mdp:/usr/include/qt6/QtCore/qvariant.h + mdp:/usr/include/qt6/QtCore/qvarlengtharray.h + mdp:/usr/include/qt6/QtCore/qversiontagging.h + mdp:/usr/include/qt6/QtCore/qxptype_traits.h + mdp:/usr/include/qt6/QtCore/qyieldcpu.h + mdp:/usr/include/qt6/QtGui/QSurfaceFormat + mdp:/usr/include/qt6/QtGui/qaction.h + mdp:/usr/include/qt6/QtGui/qbitmap.h + mdp:/usr/include/qt6/QtGui/qbrush.h + mdp:/usr/include/qt6/QtGui/qcolor.h + mdp:/usr/include/qt6/QtGui/qcursor.h + mdp:/usr/include/qt6/QtGui/qfont.h + mdp:/usr/include/qt6/QtGui/qfontinfo.h + mdp:/usr/include/qt6/QtGui/qfontmetrics.h + mdp:/usr/include/qt6/QtGui/qfontvariableaxis.h + mdp:/usr/include/qt6/QtGui/qicon.h + mdp:/usr/include/qt6/QtGui/qimage.h + mdp:/usr/include/qt6/QtGui/qkeysequence.h + mdp:/usr/include/qt6/QtGui/qopengl.h + mdp:/usr/include/qt6/QtGui/qopenglcontext.h + mdp:/usr/include/qt6/QtGui/qopenglcontext_platform.h + mdp:/usr/include/qt6/QtGui/qopenglext.h + mdp:/usr/include/qt6/QtGui/qpaintdevice.h + mdp:/usr/include/qt6/QtGui/qpalette.h + mdp:/usr/include/qt6/QtGui/qpixelformat.h + mdp:/usr/include/qt6/QtGui/qpixmap.h + mdp:/usr/include/qt6/QtGui/qpolygon.h + mdp:/usr/include/qt6/QtGui/qregion.h + mdp:/usr/include/qt6/QtGui/qrgb.h + mdp:/usr/include/qt6/QtGui/qrgba64.h + mdp:/usr/include/qt6/QtGui/qsurfaceformat.h + mdp:/usr/include/qt6/QtGui/qtgui-config.h + mdp:/usr/include/qt6/QtGui/qtguiexports.h + mdp:/usr/include/qt6/QtGui/qtguiglobal.h + mdp:/usr/include/qt6/QtGui/qtransform.h + mdp:/usr/include/qt6/QtGui/qwindowdefs.h + mdp:/usr/include/qt6/QtOpenGL/QOpenGLFunctions_4_1_Core + mdp:/usr/include/qt6/QtOpenGL/QOpenGLVersionFunctions + mdp:/usr/include/qt6/QtOpenGL/QOpenGLVersionProfile + mdp:/usr/include/qt6/QtOpenGL/qopenglfunctions_4_1_core.h + mdp:/usr/include/qt6/QtOpenGL/qopenglversionfunctions.h + mdp:/usr/include/qt6/QtOpenGL/qopenglversionprofile.h + mdp:/usr/include/qt6/QtOpenGL/qtopenglexports.h + mdp:/usr/include/qt6/QtOpenGL/qtopenglglobal.h + mdp:/usr/include/qt6/QtOpenGLWidgets/QOpenGLWidget + mdp:/usr/include/qt6/QtOpenGLWidgets/qopenglwidget.h + mdp:/usr/include/qt6/QtOpenGLWidgets/qtopenglwidgetsexports.h + mdp:/usr/include/qt6/QtOpenGLWidgets/qtopenglwidgetsglobal.h + mdp:/usr/include/qt6/QtWidgets/QWidget + mdp:/usr/include/qt6/QtWidgets/qsizepolicy.h + mdp:/usr/include/qt6/QtWidgets/qtwidgets-config.h + mdp:/usr/include/qt6/QtWidgets/qtwidgetsexports.h + mdp:/usr/include/qt6/QtWidgets/qtwidgetsglobal.h + mdp:/usr/include/qt6/QtWidgets/qwidget.h + mdp:/usr/include/sched.h + mdp:/usr/include/stdc-predef.h + mdp:/usr/include/stdint.h + mdp:/usr/include/stdio.h + mdp:/usr/include/stdlib.h + mdp:/usr/include/string.h + mdp:/usr/include/strings.h + mdp:/usr/include/sys/cdefs.h + mdp:/usr/include/sys/select.h + mdp:/usr/include/sys/single_threaded.h + mdp:/usr/include/sys/syscall.h + mdp:/usr/include/sys/types.h + mdp:/usr/include/syscall.h + mdp:/usr/include/time.h + mdp:/usr/include/unistd.h + mdp:/usr/include/wchar.h + mdp:/usr/include/wctype.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stdarg.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stdbool.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stddef.h +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/project_version_detector.h +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/fm_views_ex.h + mmc:Q_OBJECT + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/kassetmanagerqt_autogen/moc_predefs.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/fm_views_ex.h + mdp:/usr/include/alloca.h + mdp:/usr/include/asm-generic/bitsperlong.h + mdp:/usr/include/asm-generic/errno-base.h + mdp:/usr/include/asm-generic/errno.h + mdp:/usr/include/asm-generic/int-ll64.h + mdp:/usr/include/asm-generic/posix_types.h + mdp:/usr/include/asm-generic/types.h + mdp:/usr/include/asm/bitsperlong.h + mdp:/usr/include/asm/errno.h + mdp:/usr/include/asm/posix_types.h + mdp:/usr/include/asm/posix_types_64.h + mdp:/usr/include/asm/types.h + mdp:/usr/include/asm/unistd.h + mdp:/usr/include/asm/unistd_64.h + mdp:/usr/include/assert.h + mdp:/usr/include/bits/atomic_wide_counter.h + mdp:/usr/include/bits/byteswap.h + mdp:/usr/include/bits/confname.h + mdp:/usr/include/bits/cpu-set.h + mdp:/usr/include/bits/endian.h + mdp:/usr/include/bits/endianness.h + mdp:/usr/include/bits/environments.h + mdp:/usr/include/bits/errno.h + mdp:/usr/include/bits/floatn-common.h + mdp:/usr/include/bits/floatn.h + mdp:/usr/include/bits/getopt_core.h + mdp:/usr/include/bits/getopt_posix.h + mdp:/usr/include/bits/libc-header-start.h + mdp:/usr/include/bits/local_lim.h + mdp:/usr/include/bits/locale.h + mdp:/usr/include/bits/long-double.h + mdp:/usr/include/bits/posix1_lim.h + mdp:/usr/include/bits/posix2_lim.h + mdp:/usr/include/bits/posix_opt.h + mdp:/usr/include/bits/pthread_stack_min-dynamic.h + mdp:/usr/include/bits/pthreadtypes-arch.h + mdp:/usr/include/bits/pthreadtypes.h + mdp:/usr/include/bits/sched.h + mdp:/usr/include/bits/select.h + mdp:/usr/include/bits/setjmp.h + mdp:/usr/include/bits/stdint-intn.h + mdp:/usr/include/bits/stdint-least.h + mdp:/usr/include/bits/stdint-uintn.h + mdp:/usr/include/bits/stdio_lim.h + mdp:/usr/include/bits/stdlib-float.h + mdp:/usr/include/bits/struct_mutex.h + mdp:/usr/include/bits/struct_rwlock.h + mdp:/usr/include/bits/syscall.h + mdp:/usr/include/bits/thread-shared-types.h + mdp:/usr/include/bits/time.h + mdp:/usr/include/bits/time64.h + mdp:/usr/include/bits/timesize.h + mdp:/usr/include/bits/timex.h + mdp:/usr/include/bits/types.h + mdp:/usr/include/bits/types/FILE.h + mdp:/usr/include/bits/types/__FILE.h + mdp:/usr/include/bits/types/__fpos64_t.h + mdp:/usr/include/bits/types/__fpos_t.h + mdp:/usr/include/bits/types/__locale_t.h + mdp:/usr/include/bits/types/__mbstate_t.h + mdp:/usr/include/bits/types/__sigset_t.h + mdp:/usr/include/bits/types/clock_t.h + mdp:/usr/include/bits/types/clockid_t.h + mdp:/usr/include/bits/types/cookie_io_functions_t.h + mdp:/usr/include/bits/types/error_t.h + mdp:/usr/include/bits/types/locale_t.h + mdp:/usr/include/bits/types/mbstate_t.h + mdp:/usr/include/bits/types/sigset_t.h + mdp:/usr/include/bits/types/struct_FILE.h + mdp:/usr/include/bits/types/struct___jmp_buf_tag.h + mdp:/usr/include/bits/types/struct_itimerspec.h + mdp:/usr/include/bits/types/struct_sched_param.h + mdp:/usr/include/bits/types/struct_timespec.h + mdp:/usr/include/bits/types/struct_timeval.h + mdp:/usr/include/bits/types/struct_tm.h + mdp:/usr/include/bits/types/time_t.h + mdp:/usr/include/bits/types/timer_t.h + mdp:/usr/include/bits/types/wint_t.h + mdp:/usr/include/bits/typesizes.h + mdp:/usr/include/bits/uintn-identity.h + mdp:/usr/include/bits/uio_lim.h + mdp:/usr/include/bits/unistd_ext.h + mdp:/usr/include/bits/waitflags.h + mdp:/usr/include/bits/waitstatus.h + mdp:/usr/include/bits/wchar.h + mdp:/usr/include/bits/wctype-wchar.h + mdp:/usr/include/bits/wordsize.h + mdp:/usr/include/bits/xopen_lim.h + mdp:/usr/include/c++/15/algorithm + mdp:/usr/include/c++/15/array + mdp:/usr/include/c++/15/atomic + mdp:/usr/include/c++/15/backward/auto_ptr.h + mdp:/usr/include/c++/15/backward/binders.h + mdp:/usr/include/c++/15/bit + mdp:/usr/include/c++/15/bits/algorithmfwd.h + mdp:/usr/include/c++/15/bits/align.h + mdp:/usr/include/c++/15/bits/alloc_traits.h + mdp:/usr/include/c++/15/bits/allocated_ptr.h + mdp:/usr/include/c++/15/bits/allocator.h + mdp:/usr/include/c++/15/bits/atomic_base.h + mdp:/usr/include/c++/15/bits/atomic_lockfree_defines.h + mdp:/usr/include/c++/15/bits/atomic_wait.h + mdp:/usr/include/c++/15/bits/basic_ios.h + mdp:/usr/include/c++/15/bits/basic_ios.tcc + mdp:/usr/include/c++/15/bits/basic_string.h + mdp:/usr/include/c++/15/bits/basic_string.tcc + mdp:/usr/include/c++/15/bits/char_traits.h + mdp:/usr/include/c++/15/bits/charconv.h + mdp:/usr/include/c++/15/bits/chrono.h + mdp:/usr/include/c++/15/bits/chrono_io.h + mdp:/usr/include/c++/15/bits/codecvt.h + mdp:/usr/include/c++/15/bits/concept_check.h + mdp:/usr/include/c++/15/bits/cpp_type_traits.h + mdp:/usr/include/c++/15/bits/cxxabi_forced.h + mdp:/usr/include/c++/15/bits/cxxabi_init_exception.h + mdp:/usr/include/c++/15/bits/enable_special_members.h + mdp:/usr/include/c++/15/bits/erase_if.h + mdp:/usr/include/c++/15/bits/exception.h + mdp:/usr/include/c++/15/bits/exception_defines.h + mdp:/usr/include/c++/15/bits/exception_ptr.h + mdp:/usr/include/c++/15/bits/functexcept.h + mdp:/usr/include/c++/15/bits/functional_hash.h + mdp:/usr/include/c++/15/bits/hash_bytes.h + mdp:/usr/include/c++/15/bits/hashtable.h + mdp:/usr/include/c++/15/bits/hashtable_policy.h + mdp:/usr/include/c++/15/bits/invoke.h + mdp:/usr/include/c++/15/bits/ios_base.h + mdp:/usr/include/c++/15/bits/istream.tcc + mdp:/usr/include/c++/15/bits/iterator_concepts.h + mdp:/usr/include/c++/15/bits/list.tcc + mdp:/usr/include/c++/15/bits/locale_classes.h + mdp:/usr/include/c++/15/bits/locale_classes.tcc + mdp:/usr/include/c++/15/bits/locale_conv.h + mdp:/usr/include/c++/15/bits/locale_facets.h + mdp:/usr/include/c++/15/bits/locale_facets.tcc + mdp:/usr/include/c++/15/bits/locale_facets_nonio.h + mdp:/usr/include/c++/15/bits/locale_facets_nonio.tcc + mdp:/usr/include/c++/15/bits/localefwd.h + mdp:/usr/include/c++/15/bits/max_size_type.h + mdp:/usr/include/c++/15/bits/memory_resource.h + mdp:/usr/include/c++/15/bits/memoryfwd.h + mdp:/usr/include/c++/15/bits/move.h + mdp:/usr/include/c++/15/bits/nested_exception.h + mdp:/usr/include/c++/15/bits/new_allocator.h + mdp:/usr/include/c++/15/bits/node_handle.h + mdp:/usr/include/c++/15/bits/ostream.h + mdp:/usr/include/c++/15/bits/ostream.tcc + mdp:/usr/include/c++/15/bits/ostream_insert.h + mdp:/usr/include/c++/15/bits/parse_numbers.h + mdp:/usr/include/c++/15/bits/postypes.h + mdp:/usr/include/c++/15/bits/predefined_ops.h + mdp:/usr/include/c++/15/bits/ptr_traits.h + mdp:/usr/include/c++/15/bits/quoted_string.h + mdp:/usr/include/c++/15/bits/range_access.h + mdp:/usr/include/c++/15/bits/ranges_algo.h + mdp:/usr/include/c++/15/bits/ranges_algobase.h + mdp:/usr/include/c++/15/bits/ranges_base.h + mdp:/usr/include/c++/15/bits/ranges_cmp.h + mdp:/usr/include/c++/15/bits/ranges_uninitialized.h + mdp:/usr/include/c++/15/bits/ranges_util.h + mdp:/usr/include/c++/15/bits/refwrap.h + mdp:/usr/include/c++/15/bits/requires_hosted.h + mdp:/usr/include/c++/15/bits/shared_ptr.h + mdp:/usr/include/c++/15/bits/shared_ptr_atomic.h + mdp:/usr/include/c++/15/bits/shared_ptr_base.h + mdp:/usr/include/c++/15/bits/specfun.h + mdp:/usr/include/c++/15/bits/sstream.tcc + mdp:/usr/include/c++/15/bits/std_abs.h + mdp:/usr/include/c++/15/bits/std_function.h + mdp:/usr/include/c++/15/bits/std_mutex.h + mdp:/usr/include/c++/15/bits/stl_algo.h + mdp:/usr/include/c++/15/bits/stl_algobase.h + mdp:/usr/include/c++/15/bits/stl_bvector.h + mdp:/usr/include/c++/15/bits/stl_construct.h + mdp:/usr/include/c++/15/bits/stl_function.h + mdp:/usr/include/c++/15/bits/stl_heap.h + mdp:/usr/include/c++/15/bits/stl_iterator.h + mdp:/usr/include/c++/15/bits/stl_iterator_base_funcs.h + mdp:/usr/include/c++/15/bits/stl_iterator_base_types.h + mdp:/usr/include/c++/15/bits/stl_list.h + mdp:/usr/include/c++/15/bits/stl_map.h + mdp:/usr/include/c++/15/bits/stl_multimap.h + mdp:/usr/include/c++/15/bits/stl_multiset.h + mdp:/usr/include/c++/15/bits/stl_numeric.h + mdp:/usr/include/c++/15/bits/stl_pair.h + mdp:/usr/include/c++/15/bits/stl_raw_storage_iter.h + mdp:/usr/include/c++/15/bits/stl_relops.h + mdp:/usr/include/c++/15/bits/stl_set.h + mdp:/usr/include/c++/15/bits/stl_tempbuf.h + mdp:/usr/include/c++/15/bits/stl_tree.h + mdp:/usr/include/c++/15/bits/stl_uninitialized.h + mdp:/usr/include/c++/15/bits/stl_vector.h + mdp:/usr/include/c++/15/bits/stream_iterator.h + mdp:/usr/include/c++/15/bits/streambuf.tcc + mdp:/usr/include/c++/15/bits/streambuf_iterator.h + mdp:/usr/include/c++/15/bits/string_view.tcc + mdp:/usr/include/c++/15/bits/stringfwd.h + mdp:/usr/include/c++/15/bits/uniform_int_dist.h + mdp:/usr/include/c++/15/bits/unique_ptr.h + mdp:/usr/include/c++/15/bits/unordered_map.h + mdp:/usr/include/c++/15/bits/unordered_set.h + mdp:/usr/include/c++/15/bits/uses_allocator.h + mdp:/usr/include/c++/15/bits/uses_allocator_args.h + mdp:/usr/include/c++/15/bits/utility.h + mdp:/usr/include/c++/15/bits/vector.tcc + mdp:/usr/include/c++/15/bits/version.h + mdp:/usr/include/c++/15/cassert + mdp:/usr/include/c++/15/cctype + mdp:/usr/include/c++/15/cerrno + mdp:/usr/include/c++/15/charconv + mdp:/usr/include/c++/15/chrono + mdp:/usr/include/c++/15/climits + mdp:/usr/include/c++/15/clocale + mdp:/usr/include/c++/15/cmath + mdp:/usr/include/c++/15/compare + mdp:/usr/include/c++/15/concepts + mdp:/usr/include/c++/15/cstddef + mdp:/usr/include/c++/15/cstdint + mdp:/usr/include/c++/15/cstdio + mdp:/usr/include/c++/15/cstdlib + mdp:/usr/include/c++/15/cstring + mdp:/usr/include/c++/15/ctime + mdp:/usr/include/c++/15/cwchar + mdp:/usr/include/c++/15/cwctype + mdp:/usr/include/c++/15/debug/assertions.h + mdp:/usr/include/c++/15/debug/debug.h + mdp:/usr/include/c++/15/exception + mdp:/usr/include/c++/15/ext/aligned_buffer.h + mdp:/usr/include/c++/15/ext/alloc_traits.h + mdp:/usr/include/c++/15/ext/atomicity.h + mdp:/usr/include/c++/15/ext/concurrence.h + mdp:/usr/include/c++/15/ext/numeric_traits.h + mdp:/usr/include/c++/15/ext/string_conversions.h + mdp:/usr/include/c++/15/ext/type_traits.h + mdp:/usr/include/c++/15/format + mdp:/usr/include/c++/15/functional + mdp:/usr/include/c++/15/initializer_list + mdp:/usr/include/c++/15/iomanip + mdp:/usr/include/c++/15/ios + mdp:/usr/include/c++/15/iosfwd + mdp:/usr/include/c++/15/istream + mdp:/usr/include/c++/15/iterator + mdp:/usr/include/c++/15/limits + mdp:/usr/include/c++/15/list + mdp:/usr/include/c++/15/locale + mdp:/usr/include/c++/15/map + mdp:/usr/include/c++/15/memory + mdp:/usr/include/c++/15/new + mdp:/usr/include/c++/15/numeric + mdp:/usr/include/c++/15/optional + mdp:/usr/include/c++/15/ostream + mdp:/usr/include/c++/15/pstl/execution_defs.h + mdp:/usr/include/c++/15/pstl/glue_numeric_defs.h + mdp:/usr/include/c++/15/pstl/pstl_config.h + mdp:/usr/include/c++/15/ratio + mdp:/usr/include/c++/15/set + mdp:/usr/include/c++/15/sstream + mdp:/usr/include/c++/15/stdexcept + mdp:/usr/include/c++/15/streambuf + mdp:/usr/include/c++/15/string + mdp:/usr/include/c++/15/string_view + mdp:/usr/include/c++/15/system_error + mdp:/usr/include/c++/15/tr1/bessel_function.tcc + mdp:/usr/include/c++/15/tr1/beta_function.tcc + mdp:/usr/include/c++/15/tr1/ell_integral.tcc + mdp:/usr/include/c++/15/tr1/exp_integral.tcc + mdp:/usr/include/c++/15/tr1/gamma.tcc + mdp:/usr/include/c++/15/tr1/hypergeometric.tcc + mdp:/usr/include/c++/15/tr1/legendre_function.tcc + mdp:/usr/include/c++/15/tr1/modified_bessel_func.tcc + mdp:/usr/include/c++/15/tr1/poly_hermite.tcc + mdp:/usr/include/c++/15/tr1/poly_laguerre.tcc + mdp:/usr/include/c++/15/tr1/riemann_zeta.tcc + mdp:/usr/include/c++/15/tr1/special_function_util.h + mdp:/usr/include/c++/15/tuple + mdp:/usr/include/c++/15/type_traits + mdp:/usr/include/c++/15/typeinfo + mdp:/usr/include/c++/15/unordered_map + mdp:/usr/include/c++/15/unordered_set + mdp:/usr/include/c++/15/utility + mdp:/usr/include/c++/15/variant + mdp:/usr/include/c++/15/vector + mdp:/usr/include/c++/15/version + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/atomic_word.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++allocator.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++config.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++locale.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/cpu_defines.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/ctype_base.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/ctype_inline.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/error_constants.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/gthr-default.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/gthr.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/messages_members.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/os_defines.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/time_members.h + mdp:/usr/include/ctype.h + mdp:/usr/include/endian.h + mdp:/usr/include/errno.h + mdp:/usr/include/features-time64.h + mdp:/usr/include/features.h + mdp:/usr/include/gnu/stubs-64.h + mdp:/usr/include/gnu/stubs.h + mdp:/usr/include/libintl.h + mdp:/usr/include/limits.h + mdp:/usr/include/linux/close_range.h + mdp:/usr/include/linux/errno.h + mdp:/usr/include/linux/limits.h + mdp:/usr/include/linux/posix_types.h + mdp:/usr/include/linux/sched/types.h + mdp:/usr/include/linux/stddef.h + mdp:/usr/include/linux/types.h + mdp:/usr/include/locale.h + mdp:/usr/include/pthread.h + mdp:/usr/include/qt6/QtCore/q17memory.h + mdp:/usr/include/qt6/QtCore/q20functional.h + mdp:/usr/include/qt6/QtCore/q20iterator.h + mdp:/usr/include/qt6/QtCore/q20memory.h + mdp:/usr/include/qt6/QtCore/q20type_traits.h + mdp:/usr/include/qt6/QtCore/q20utility.h + mdp:/usr/include/qt6/QtCore/q23type_traits.h + mdp:/usr/include/qt6/QtCore/q23utility.h + mdp:/usr/include/qt6/QtCore/qabstractitemmodel.h + mdp:/usr/include/qt6/QtCore/qalgorithms.h + mdp:/usr/include/qt6/QtCore/qalloc.h + mdp:/usr/include/qt6/QtCore/qanystringview.h + mdp:/usr/include/qt6/QtCore/qarraydata.h + mdp:/usr/include/qt6/QtCore/qarraydataops.h + mdp:/usr/include/qt6/QtCore/qarraydatapointer.h + mdp:/usr/include/qt6/QtCore/qassert.h + mdp:/usr/include/qt6/QtCore/qatomic.h + mdp:/usr/include/qt6/QtCore/qatomic_cxx11.h + mdp:/usr/include/qt6/QtCore/qbasicatomic.h + mdp:/usr/include/qt6/QtCore/qbindingstorage.h + mdp:/usr/include/qt6/QtCore/qbytearray.h + mdp:/usr/include/qt6/QtCore/qbytearrayalgorithms.h + mdp:/usr/include/qt6/QtCore/qbytearraylist.h + mdp:/usr/include/qt6/QtCore/qbytearrayview.h + mdp:/usr/include/qt6/QtCore/qchar.h + mdp:/usr/include/qt6/QtCore/qcheckedint_impl.h + mdp:/usr/include/qt6/QtCore/qcompare.h + mdp:/usr/include/qt6/QtCore/qcompare_impl.h + mdp:/usr/include/qt6/QtCore/qcomparehelpers.h + mdp:/usr/include/qt6/QtCore/qcompilerdetection.h + mdp:/usr/include/qt6/QtCore/qconfig-64.h + mdp:/usr/include/qt6/QtCore/qconfig.h + mdp:/usr/include/qt6/QtCore/qconstructormacros.h + mdp:/usr/include/qt6/QtCore/qcontainerfwd.h + mdp:/usr/include/qt6/QtCore/qcontainerinfo.h + mdp:/usr/include/qt6/QtCore/qcontainertools_impl.h + mdp:/usr/include/qt6/QtCore/qcontiguouscache.h + mdp:/usr/include/qt6/QtCore/qdarwinhelpers.h + mdp:/usr/include/qt6/QtCore/qdatastream.h + mdp:/usr/include/qt6/QtCore/qdebug.h + mdp:/usr/include/qt6/QtCore/qendian.h + mdp:/usr/include/qt6/QtCore/qexceptionhandling.h + mdp:/usr/include/qt6/QtCore/qflags.h + mdp:/usr/include/qt6/QtCore/qfloat16.h + mdp:/usr/include/qt6/QtCore/qforeach.h + mdp:/usr/include/qt6/QtCore/qfunctionaltools_impl.h + mdp:/usr/include/qt6/QtCore/qfunctionpointer.h + mdp:/usr/include/qt6/QtCore/qgenericatomic.h + mdp:/usr/include/qt6/QtCore/qglobal.h + mdp:/usr/include/qt6/QtCore/qglobalstatic.h + mdp:/usr/include/qt6/QtCore/qhash.h + mdp:/usr/include/qt6/QtCore/qhashfunctions.h + mdp:/usr/include/qt6/QtCore/qiodevicebase.h + mdp:/usr/include/qt6/QtCore/qitemselectionmodel.h + mdp:/usr/include/qt6/QtCore/qiterable.h + mdp:/usr/include/qt6/QtCore/qiterator.h + mdp:/usr/include/qt6/QtCore/qlatin1stringview.h + mdp:/usr/include/qt6/QtCore/qline.h + mdp:/usr/include/qt6/QtCore/qlist.h + mdp:/usr/include/qt6/QtCore/qlocale.h + mdp:/usr/include/qt6/QtCore/qlogging.h + mdp:/usr/include/qt6/QtCore/qmalloc.h + mdp:/usr/include/qt6/QtCore/qmap.h + mdp:/usr/include/qt6/QtCore/qmargins.h + mdp:/usr/include/qt6/QtCore/qmath.h + mdp:/usr/include/qt6/QtCore/qmetacontainer.h + mdp:/usr/include/qt6/QtCore/qmetatype.h + mdp:/usr/include/qt6/QtCore/qminmax.h + mdp:/usr/include/qt6/QtCore/qnamespace.h + mdp:/usr/include/qt6/QtCore/qnumeric.h + mdp:/usr/include/qt6/QtCore/qobject.h + mdp:/usr/include/qt6/QtCore/qobject_impl.h + mdp:/usr/include/qt6/QtCore/qobjectdefs.h + mdp:/usr/include/qt6/QtCore/qobjectdefs_impl.h + mdp:/usr/include/qt6/QtCore/qoverload.h + mdp:/usr/include/qt6/QtCore/qpair.h + mdp:/usr/include/qt6/QtCore/qpoint.h + mdp:/usr/include/qt6/QtCore/qprocessordetection.h + mdp:/usr/include/qt6/QtCore/qrect.h + mdp:/usr/include/qt6/QtCore/qrefcount.h + mdp:/usr/include/qt6/QtCore/qregularexpression.h + mdp:/usr/include/qt6/QtCore/qscopedpointer.h + mdp:/usr/include/qt6/QtCore/qscopeguard.h + mdp:/usr/include/qt6/QtCore/qset.h + mdp:/usr/include/qt6/QtCore/qshareddata.h + mdp:/usr/include/qt6/QtCore/qshareddata_impl.h + mdp:/usr/include/qt6/QtCore/qsharedpointer.h + mdp:/usr/include/qt6/QtCore/qsharedpointer_impl.h + mdp:/usr/include/qt6/QtCore/qsize.h + mdp:/usr/include/qt6/QtCore/qspan.h + mdp:/usr/include/qt6/QtCore/qstdlibdetection.h + mdp:/usr/include/qt6/QtCore/qstring.h + mdp:/usr/include/qt6/QtCore/qstringalgorithms.h + mdp:/usr/include/qt6/QtCore/qstringbuilder.h + mdp:/usr/include/qt6/QtCore/qstringconverter.h + mdp:/usr/include/qt6/QtCore/qstringconverter_base.h + mdp:/usr/include/qt6/QtCore/qstringfwd.h + mdp:/usr/include/qt6/QtCore/qstringlist.h + mdp:/usr/include/qt6/QtCore/qstringmatcher.h + mdp:/usr/include/qt6/QtCore/qstringtokenizer.h + mdp:/usr/include/qt6/QtCore/qstringview.h + mdp:/usr/include/qt6/QtCore/qswap.h + mdp:/usr/include/qt6/QtCore/qsysinfo.h + mdp:/usr/include/qt6/QtCore/qsystemdetection.h + mdp:/usr/include/qt6/QtCore/qtaggedpointer.h + mdp:/usr/include/qt6/QtCore/qtclasshelpermacros.h + mdp:/usr/include/qt6/QtCore/qtconfiginclude.h + mdp:/usr/include/qt6/QtCore/qtconfigmacros.h + mdp:/usr/include/qt6/QtCore/qtcore-config.h + mdp:/usr/include/qt6/QtCore/qtcoreexports.h + mdp:/usr/include/qt6/QtCore/qtcoreglobal.h + mdp:/usr/include/qt6/QtCore/qtdeprecationdefinitions.h + mdp:/usr/include/qt6/QtCore/qtdeprecationmarkers.h + mdp:/usr/include/qt6/QtCore/qtenvironmentvariables.h + mdp:/usr/include/qt6/QtCore/qtextstream.h + mdp:/usr/include/qt6/QtCore/qtformat_impl.h + mdp:/usr/include/qt6/QtCore/qtmetamacros.h + mdp:/usr/include/qt6/QtCore/qtnoop.h + mdp:/usr/include/qt6/QtCore/qtpreprocessorsupport.h + mdp:/usr/include/qt6/QtCore/qtresource.h + mdp:/usr/include/qt6/QtCore/qttranslation.h + mdp:/usr/include/qt6/QtCore/qttypetraits.h + mdp:/usr/include/qt6/QtCore/qtversion.h + mdp:/usr/include/qt6/QtCore/qtversionchecks.h + mdp:/usr/include/qt6/QtCore/qtypeinfo.h + mdp:/usr/include/qt6/QtCore/qtypes.h + mdp:/usr/include/qt6/QtCore/qutf8stringview.h + mdp:/usr/include/qt6/QtCore/qvariant.h + mdp:/usr/include/qt6/QtCore/qvarlengtharray.h + mdp:/usr/include/qt6/QtCore/qversiontagging.h + mdp:/usr/include/qt6/QtCore/qxptype_traits.h + mdp:/usr/include/qt6/QtCore/qyieldcpu.h + mdp:/usr/include/qt6/QtGui/qaction.h + mdp:/usr/include/qt6/QtGui/qbitmap.h + mdp:/usr/include/qt6/QtGui/qbrush.h + mdp:/usr/include/qt6/QtGui/qcolor.h + mdp:/usr/include/qt6/QtGui/qcursor.h + mdp:/usr/include/qt6/QtGui/qfont.h + mdp:/usr/include/qt6/QtGui/qfontinfo.h + mdp:/usr/include/qt6/QtGui/qfontmetrics.h + mdp:/usr/include/qt6/QtGui/qfontvariableaxis.h + mdp:/usr/include/qt6/QtGui/qicon.h + mdp:/usr/include/qt6/QtGui/qimage.h + mdp:/usr/include/qt6/QtGui/qkeysequence.h + mdp:/usr/include/qt6/QtGui/qpaintdevice.h + mdp:/usr/include/qt6/QtGui/qpalette.h + mdp:/usr/include/qt6/QtGui/qpixelformat.h + mdp:/usr/include/qt6/QtGui/qpixmap.h + mdp:/usr/include/qt6/QtGui/qpolygon.h + mdp:/usr/include/qt6/QtGui/qregion.h + mdp:/usr/include/qt6/QtGui/qrgb.h + mdp:/usr/include/qt6/QtGui/qrgba64.h + mdp:/usr/include/qt6/QtGui/qtgui-config.h + mdp:/usr/include/qt6/QtGui/qtguiexports.h + mdp:/usr/include/qt6/QtGui/qtguiglobal.h + mdp:/usr/include/qt6/QtGui/qtransform.h + mdp:/usr/include/qt6/QtGui/qvalidator.h + mdp:/usr/include/qt6/QtGui/qwindowdefs.h + mdp:/usr/include/qt6/QtWidgets/QListView + mdp:/usr/include/qt6/QtWidgets/QTableView + mdp:/usr/include/qt6/QtWidgets/qabstractitemdelegate.h + mdp:/usr/include/qt6/QtWidgets/qabstractitemview.h + mdp:/usr/include/qt6/QtWidgets/qabstractscrollarea.h + mdp:/usr/include/qt6/QtWidgets/qabstractslider.h + mdp:/usr/include/qt6/QtWidgets/qabstractspinbox.h + mdp:/usr/include/qt6/QtWidgets/qframe.h + mdp:/usr/include/qt6/QtWidgets/qlistview.h + mdp:/usr/include/qt6/QtWidgets/qrubberband.h + mdp:/usr/include/qt6/QtWidgets/qsizepolicy.h + mdp:/usr/include/qt6/QtWidgets/qslider.h + mdp:/usr/include/qt6/QtWidgets/qstyle.h + mdp:/usr/include/qt6/QtWidgets/qstyleoption.h + mdp:/usr/include/qt6/QtWidgets/qtabbar.h + mdp:/usr/include/qt6/QtWidgets/qtableview.h + mdp:/usr/include/qt6/QtWidgets/qtabwidget.h + mdp:/usr/include/qt6/QtWidgets/qtwidgets-config.h + mdp:/usr/include/qt6/QtWidgets/qtwidgetsexports.h + mdp:/usr/include/qt6/QtWidgets/qtwidgetsglobal.h + mdp:/usr/include/qt6/QtWidgets/qwidget.h + mdp:/usr/include/sched.h + mdp:/usr/include/stdc-predef.h + mdp:/usr/include/stdint.h + mdp:/usr/include/stdio.h + mdp:/usr/include/stdlib.h + mdp:/usr/include/string.h + mdp:/usr/include/strings.h + mdp:/usr/include/sys/cdefs.h + mdp:/usr/include/sys/select.h + mdp:/usr/include/sys/single_threaded.h + mdp:/usr/include/sys/syscall.h + mdp:/usr/include/sys/types.h + mdp:/usr/include/syscall.h + mdp:/usr/include/time.h + mdp:/usr/include/unistd.h + mdp:/usr/include/wchar.h + mdp:/usr/include/wctype.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stdarg.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stdbool.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stddef.h +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/preview_overlay.cpp +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/assets_table_model.h + mmc:Q_OBJECT + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/kassetmanagerqt_autogen/moc_predefs.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/assets_model.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/assets_table_model.h + mdp:/usr/include/alloca.h + mdp:/usr/include/asm-generic/bitsperlong.h + mdp:/usr/include/asm-generic/errno-base.h + mdp:/usr/include/asm-generic/errno.h + mdp:/usr/include/asm-generic/int-ll64.h + mdp:/usr/include/asm-generic/posix_types.h + mdp:/usr/include/asm-generic/types.h + mdp:/usr/include/asm/bitsperlong.h + mdp:/usr/include/asm/errno.h + mdp:/usr/include/asm/posix_types.h + mdp:/usr/include/asm/posix_types_64.h + mdp:/usr/include/asm/types.h + mdp:/usr/include/asm/unistd.h + mdp:/usr/include/asm/unistd_64.h + mdp:/usr/include/assert.h + mdp:/usr/include/bits/atomic_wide_counter.h + mdp:/usr/include/bits/byteswap.h + mdp:/usr/include/bits/confname.h + mdp:/usr/include/bits/cpu-set.h + mdp:/usr/include/bits/endian.h + mdp:/usr/include/bits/endianness.h + mdp:/usr/include/bits/environments.h + mdp:/usr/include/bits/errno.h + mdp:/usr/include/bits/floatn-common.h + mdp:/usr/include/bits/floatn.h + mdp:/usr/include/bits/getopt_core.h + mdp:/usr/include/bits/getopt_posix.h + mdp:/usr/include/bits/libc-header-start.h + mdp:/usr/include/bits/local_lim.h + mdp:/usr/include/bits/locale.h + mdp:/usr/include/bits/long-double.h + mdp:/usr/include/bits/posix1_lim.h + mdp:/usr/include/bits/posix2_lim.h + mdp:/usr/include/bits/posix_opt.h + mdp:/usr/include/bits/pthread_stack_min-dynamic.h + mdp:/usr/include/bits/pthreadtypes-arch.h + mdp:/usr/include/bits/pthreadtypes.h + mdp:/usr/include/bits/sched.h + mdp:/usr/include/bits/select.h + mdp:/usr/include/bits/setjmp.h + mdp:/usr/include/bits/stdint-intn.h + mdp:/usr/include/bits/stdint-least.h + mdp:/usr/include/bits/stdint-uintn.h + mdp:/usr/include/bits/stdio_lim.h + mdp:/usr/include/bits/stdlib-float.h + mdp:/usr/include/bits/struct_mutex.h + mdp:/usr/include/bits/struct_rwlock.h + mdp:/usr/include/bits/syscall.h + mdp:/usr/include/bits/thread-shared-types.h + mdp:/usr/include/bits/time.h + mdp:/usr/include/bits/time64.h + mdp:/usr/include/bits/timesize.h + mdp:/usr/include/bits/timex.h + mdp:/usr/include/bits/types.h + mdp:/usr/include/bits/types/FILE.h + mdp:/usr/include/bits/types/__FILE.h + mdp:/usr/include/bits/types/__fpos64_t.h + mdp:/usr/include/bits/types/__fpos_t.h + mdp:/usr/include/bits/types/__locale_t.h + mdp:/usr/include/bits/types/__mbstate_t.h + mdp:/usr/include/bits/types/__sigset_t.h + mdp:/usr/include/bits/types/clock_t.h + mdp:/usr/include/bits/types/clockid_t.h + mdp:/usr/include/bits/types/cookie_io_functions_t.h + mdp:/usr/include/bits/types/error_t.h + mdp:/usr/include/bits/types/locale_t.h + mdp:/usr/include/bits/types/mbstate_t.h + mdp:/usr/include/bits/types/sigset_t.h + mdp:/usr/include/bits/types/struct_FILE.h + mdp:/usr/include/bits/types/struct___jmp_buf_tag.h + mdp:/usr/include/bits/types/struct_itimerspec.h + mdp:/usr/include/bits/types/struct_sched_param.h + mdp:/usr/include/bits/types/struct_timespec.h + mdp:/usr/include/bits/types/struct_timeval.h + mdp:/usr/include/bits/types/struct_tm.h + mdp:/usr/include/bits/types/time_t.h + mdp:/usr/include/bits/types/timer_t.h + mdp:/usr/include/bits/types/wint_t.h + mdp:/usr/include/bits/typesizes.h + mdp:/usr/include/bits/uintn-identity.h + mdp:/usr/include/bits/uio_lim.h + mdp:/usr/include/bits/unistd_ext.h + mdp:/usr/include/bits/waitflags.h + mdp:/usr/include/bits/waitstatus.h + mdp:/usr/include/bits/wchar.h + mdp:/usr/include/bits/wctype-wchar.h + mdp:/usr/include/bits/wordsize.h + mdp:/usr/include/bits/xopen_lim.h + mdp:/usr/include/c++/15/algorithm + mdp:/usr/include/c++/15/array + mdp:/usr/include/c++/15/atomic + mdp:/usr/include/c++/15/backward/auto_ptr.h + mdp:/usr/include/c++/15/backward/binders.h + mdp:/usr/include/c++/15/bit + mdp:/usr/include/c++/15/bits/algorithmfwd.h + mdp:/usr/include/c++/15/bits/align.h + mdp:/usr/include/c++/15/bits/alloc_traits.h + mdp:/usr/include/c++/15/bits/allocated_ptr.h + mdp:/usr/include/c++/15/bits/allocator.h + mdp:/usr/include/c++/15/bits/atomic_base.h + mdp:/usr/include/c++/15/bits/atomic_lockfree_defines.h + mdp:/usr/include/c++/15/bits/atomic_wait.h + mdp:/usr/include/c++/15/bits/basic_ios.h + mdp:/usr/include/c++/15/bits/basic_ios.tcc + mdp:/usr/include/c++/15/bits/basic_string.h + mdp:/usr/include/c++/15/bits/basic_string.tcc + mdp:/usr/include/c++/15/bits/char_traits.h + mdp:/usr/include/c++/15/bits/charconv.h + mdp:/usr/include/c++/15/bits/chrono.h + mdp:/usr/include/c++/15/bits/chrono_io.h + mdp:/usr/include/c++/15/bits/codecvt.h + mdp:/usr/include/c++/15/bits/concept_check.h + mdp:/usr/include/c++/15/bits/cpp_type_traits.h + mdp:/usr/include/c++/15/bits/cxxabi_forced.h + mdp:/usr/include/c++/15/bits/cxxabi_init_exception.h + mdp:/usr/include/c++/15/bits/enable_special_members.h + mdp:/usr/include/c++/15/bits/erase_if.h + mdp:/usr/include/c++/15/bits/exception.h + mdp:/usr/include/c++/15/bits/exception_defines.h + mdp:/usr/include/c++/15/bits/exception_ptr.h + mdp:/usr/include/c++/15/bits/functexcept.h + mdp:/usr/include/c++/15/bits/functional_hash.h + mdp:/usr/include/c++/15/bits/hash_bytes.h + mdp:/usr/include/c++/15/bits/hashtable.h + mdp:/usr/include/c++/15/bits/hashtable_policy.h + mdp:/usr/include/c++/15/bits/invoke.h + mdp:/usr/include/c++/15/bits/ios_base.h + mdp:/usr/include/c++/15/bits/istream.tcc + mdp:/usr/include/c++/15/bits/iterator_concepts.h + mdp:/usr/include/c++/15/bits/list.tcc + mdp:/usr/include/c++/15/bits/locale_classes.h + mdp:/usr/include/c++/15/bits/locale_classes.tcc + mdp:/usr/include/c++/15/bits/locale_conv.h + mdp:/usr/include/c++/15/bits/locale_facets.h + mdp:/usr/include/c++/15/bits/locale_facets.tcc + mdp:/usr/include/c++/15/bits/locale_facets_nonio.h + mdp:/usr/include/c++/15/bits/locale_facets_nonio.tcc + mdp:/usr/include/c++/15/bits/localefwd.h + mdp:/usr/include/c++/15/bits/max_size_type.h + mdp:/usr/include/c++/15/bits/memory_resource.h + mdp:/usr/include/c++/15/bits/memoryfwd.h + mdp:/usr/include/c++/15/bits/move.h + mdp:/usr/include/c++/15/bits/nested_exception.h + mdp:/usr/include/c++/15/bits/new_allocator.h + mdp:/usr/include/c++/15/bits/node_handle.h + mdp:/usr/include/c++/15/bits/ostream.h + mdp:/usr/include/c++/15/bits/ostream.tcc + mdp:/usr/include/c++/15/bits/ostream_insert.h + mdp:/usr/include/c++/15/bits/parse_numbers.h + mdp:/usr/include/c++/15/bits/postypes.h + mdp:/usr/include/c++/15/bits/predefined_ops.h + mdp:/usr/include/c++/15/bits/ptr_traits.h + mdp:/usr/include/c++/15/bits/quoted_string.h + mdp:/usr/include/c++/15/bits/range_access.h + mdp:/usr/include/c++/15/bits/ranges_algo.h + mdp:/usr/include/c++/15/bits/ranges_algobase.h + mdp:/usr/include/c++/15/bits/ranges_base.h + mdp:/usr/include/c++/15/bits/ranges_cmp.h + mdp:/usr/include/c++/15/bits/ranges_uninitialized.h + mdp:/usr/include/c++/15/bits/ranges_util.h + mdp:/usr/include/c++/15/bits/refwrap.h + mdp:/usr/include/c++/15/bits/requires_hosted.h + mdp:/usr/include/c++/15/bits/shared_ptr.h + mdp:/usr/include/c++/15/bits/shared_ptr_atomic.h + mdp:/usr/include/c++/15/bits/shared_ptr_base.h + mdp:/usr/include/c++/15/bits/specfun.h + mdp:/usr/include/c++/15/bits/sstream.tcc + mdp:/usr/include/c++/15/bits/std_abs.h + mdp:/usr/include/c++/15/bits/std_function.h + mdp:/usr/include/c++/15/bits/std_mutex.h + mdp:/usr/include/c++/15/bits/stl_algo.h + mdp:/usr/include/c++/15/bits/stl_algobase.h + mdp:/usr/include/c++/15/bits/stl_bvector.h + mdp:/usr/include/c++/15/bits/stl_construct.h + mdp:/usr/include/c++/15/bits/stl_function.h + mdp:/usr/include/c++/15/bits/stl_heap.h + mdp:/usr/include/c++/15/bits/stl_iterator.h + mdp:/usr/include/c++/15/bits/stl_iterator_base_funcs.h + mdp:/usr/include/c++/15/bits/stl_iterator_base_types.h + mdp:/usr/include/c++/15/bits/stl_list.h + mdp:/usr/include/c++/15/bits/stl_map.h + mdp:/usr/include/c++/15/bits/stl_multimap.h + mdp:/usr/include/c++/15/bits/stl_multiset.h + mdp:/usr/include/c++/15/bits/stl_numeric.h + mdp:/usr/include/c++/15/bits/stl_pair.h + mdp:/usr/include/c++/15/bits/stl_raw_storage_iter.h + mdp:/usr/include/c++/15/bits/stl_relops.h + mdp:/usr/include/c++/15/bits/stl_set.h + mdp:/usr/include/c++/15/bits/stl_tempbuf.h + mdp:/usr/include/c++/15/bits/stl_tree.h + mdp:/usr/include/c++/15/bits/stl_uninitialized.h + mdp:/usr/include/c++/15/bits/stl_vector.h + mdp:/usr/include/c++/15/bits/stream_iterator.h + mdp:/usr/include/c++/15/bits/streambuf.tcc + mdp:/usr/include/c++/15/bits/streambuf_iterator.h + mdp:/usr/include/c++/15/bits/string_view.tcc + mdp:/usr/include/c++/15/bits/stringfwd.h + mdp:/usr/include/c++/15/bits/uniform_int_dist.h + mdp:/usr/include/c++/15/bits/unique_ptr.h + mdp:/usr/include/c++/15/bits/unordered_map.h + mdp:/usr/include/c++/15/bits/unordered_set.h + mdp:/usr/include/c++/15/bits/uses_allocator.h + mdp:/usr/include/c++/15/bits/uses_allocator_args.h + mdp:/usr/include/c++/15/bits/utility.h + mdp:/usr/include/c++/15/bits/vector.tcc + mdp:/usr/include/c++/15/bits/version.h + mdp:/usr/include/c++/15/cassert + mdp:/usr/include/c++/15/cctype + mdp:/usr/include/c++/15/cerrno + mdp:/usr/include/c++/15/charconv + mdp:/usr/include/c++/15/chrono + mdp:/usr/include/c++/15/climits + mdp:/usr/include/c++/15/clocale + mdp:/usr/include/c++/15/cmath + mdp:/usr/include/c++/15/compare + mdp:/usr/include/c++/15/concepts + mdp:/usr/include/c++/15/cstddef + mdp:/usr/include/c++/15/cstdint + mdp:/usr/include/c++/15/cstdio + mdp:/usr/include/c++/15/cstdlib + mdp:/usr/include/c++/15/cstring + mdp:/usr/include/c++/15/ctime + mdp:/usr/include/c++/15/cwchar + mdp:/usr/include/c++/15/cwctype + mdp:/usr/include/c++/15/debug/assertions.h + mdp:/usr/include/c++/15/debug/debug.h + mdp:/usr/include/c++/15/exception + mdp:/usr/include/c++/15/ext/aligned_buffer.h + mdp:/usr/include/c++/15/ext/alloc_traits.h + mdp:/usr/include/c++/15/ext/atomicity.h + mdp:/usr/include/c++/15/ext/concurrence.h + mdp:/usr/include/c++/15/ext/numeric_traits.h + mdp:/usr/include/c++/15/ext/string_conversions.h + mdp:/usr/include/c++/15/ext/type_traits.h + mdp:/usr/include/c++/15/format + mdp:/usr/include/c++/15/functional + mdp:/usr/include/c++/15/initializer_list + mdp:/usr/include/c++/15/iomanip + mdp:/usr/include/c++/15/ios + mdp:/usr/include/c++/15/iosfwd + mdp:/usr/include/c++/15/istream + mdp:/usr/include/c++/15/iterator + mdp:/usr/include/c++/15/limits + mdp:/usr/include/c++/15/list + mdp:/usr/include/c++/15/locale + mdp:/usr/include/c++/15/map + mdp:/usr/include/c++/15/memory + mdp:/usr/include/c++/15/new + mdp:/usr/include/c++/15/numeric + mdp:/usr/include/c++/15/optional + mdp:/usr/include/c++/15/ostream + mdp:/usr/include/c++/15/pstl/execution_defs.h + mdp:/usr/include/c++/15/pstl/glue_numeric_defs.h + mdp:/usr/include/c++/15/pstl/pstl_config.h + mdp:/usr/include/c++/15/ratio + mdp:/usr/include/c++/15/set + mdp:/usr/include/c++/15/sstream + mdp:/usr/include/c++/15/stdexcept + mdp:/usr/include/c++/15/streambuf + mdp:/usr/include/c++/15/string + mdp:/usr/include/c++/15/string_view + mdp:/usr/include/c++/15/system_error + mdp:/usr/include/c++/15/tr1/bessel_function.tcc + mdp:/usr/include/c++/15/tr1/beta_function.tcc + mdp:/usr/include/c++/15/tr1/ell_integral.tcc + mdp:/usr/include/c++/15/tr1/exp_integral.tcc + mdp:/usr/include/c++/15/tr1/gamma.tcc + mdp:/usr/include/c++/15/tr1/hypergeometric.tcc + mdp:/usr/include/c++/15/tr1/legendre_function.tcc + mdp:/usr/include/c++/15/tr1/modified_bessel_func.tcc + mdp:/usr/include/c++/15/tr1/poly_hermite.tcc + mdp:/usr/include/c++/15/tr1/poly_laguerre.tcc + mdp:/usr/include/c++/15/tr1/riemann_zeta.tcc + mdp:/usr/include/c++/15/tr1/special_function_util.h + mdp:/usr/include/c++/15/tuple + mdp:/usr/include/c++/15/type_traits + mdp:/usr/include/c++/15/typeinfo + mdp:/usr/include/c++/15/unordered_map + mdp:/usr/include/c++/15/unordered_set + mdp:/usr/include/c++/15/utility + mdp:/usr/include/c++/15/variant + mdp:/usr/include/c++/15/vector + mdp:/usr/include/c++/15/version + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/atomic_word.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++allocator.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++config.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++locale.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/cpu_defines.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/ctype_base.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/ctype_inline.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/error_constants.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/gthr-default.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/gthr.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/messages_members.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/os_defines.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/time_members.h + mdp:/usr/include/ctype.h + mdp:/usr/include/endian.h + mdp:/usr/include/errno.h + mdp:/usr/include/features-time64.h + mdp:/usr/include/features.h + mdp:/usr/include/gnu/stubs-64.h + mdp:/usr/include/gnu/stubs.h + mdp:/usr/include/libintl.h + mdp:/usr/include/limits.h + mdp:/usr/include/linux/close_range.h + mdp:/usr/include/linux/errno.h + mdp:/usr/include/linux/limits.h + mdp:/usr/include/linux/posix_types.h + mdp:/usr/include/linux/sched/types.h + mdp:/usr/include/linux/stddef.h + mdp:/usr/include/linux/types.h + mdp:/usr/include/locale.h + mdp:/usr/include/pthread.h + mdp:/usr/include/qt6/QtCore/QAbstractListModel + mdp:/usr/include/qt6/QtCore/QAbstractTableModel + mdp:/usr/include/qt6/QtCore/QDateTime + mdp:/usr/include/qt6/QtCore/QHash + mdp:/usr/include/qt6/QtCore/QMap + mdp:/usr/include/qt6/QtCore/QMimeData + mdp:/usr/include/qt6/QtCore/QSet + mdp:/usr/include/qt6/QtCore/QString + mdp:/usr/include/qt6/QtCore/QStringList + mdp:/usr/include/qt6/QtCore/QTimer + mdp:/usr/include/qt6/QtCore/QVariant + mdp:/usr/include/qt6/QtCore/QVariantMap + mdp:/usr/include/qt6/QtCore/QVector + mdp:/usr/include/qt6/QtCore/q17memory.h + mdp:/usr/include/qt6/QtCore/q20functional.h + mdp:/usr/include/qt6/QtCore/q20iterator.h + mdp:/usr/include/qt6/QtCore/q20memory.h + mdp:/usr/include/qt6/QtCore/q20type_traits.h + mdp:/usr/include/qt6/QtCore/q20utility.h + mdp:/usr/include/qt6/QtCore/q23type_traits.h + mdp:/usr/include/qt6/QtCore/q23utility.h + mdp:/usr/include/qt6/QtCore/qabstracteventdispatcher.h + mdp:/usr/include/qt6/QtCore/qabstractitemmodel.h + mdp:/usr/include/qt6/QtCore/qalgorithms.h + mdp:/usr/include/qt6/QtCore/qalloc.h + mdp:/usr/include/qt6/QtCore/qanystringview.h + mdp:/usr/include/qt6/QtCore/qarraydata.h + mdp:/usr/include/qt6/QtCore/qarraydataops.h + mdp:/usr/include/qt6/QtCore/qarraydatapointer.h + mdp:/usr/include/qt6/QtCore/qassert.h + mdp:/usr/include/qt6/QtCore/qatomic.h + mdp:/usr/include/qt6/QtCore/qatomic_cxx11.h + mdp:/usr/include/qt6/QtCore/qbasicatomic.h + mdp:/usr/include/qt6/QtCore/qbasictimer.h + mdp:/usr/include/qt6/QtCore/qbindingstorage.h + mdp:/usr/include/qt6/QtCore/qbytearray.h + mdp:/usr/include/qt6/QtCore/qbytearrayalgorithms.h + mdp:/usr/include/qt6/QtCore/qbytearraylist.h + mdp:/usr/include/qt6/QtCore/qbytearrayview.h + mdp:/usr/include/qt6/QtCore/qcalendar.h + mdp:/usr/include/qt6/QtCore/qchar.h + mdp:/usr/include/qt6/QtCore/qcompare.h + mdp:/usr/include/qt6/QtCore/qcompare_impl.h + mdp:/usr/include/qt6/QtCore/qcomparehelpers.h + mdp:/usr/include/qt6/QtCore/qcompilerdetection.h + mdp:/usr/include/qt6/QtCore/qconfig-64.h + mdp:/usr/include/qt6/QtCore/qconfig.h + mdp:/usr/include/qt6/QtCore/qconstructormacros.h + mdp:/usr/include/qt6/QtCore/qcontainerfwd.h + mdp:/usr/include/qt6/QtCore/qcontainerinfo.h + mdp:/usr/include/qt6/QtCore/qcontainertools_impl.h + mdp:/usr/include/qt6/QtCore/qcontiguouscache.h + mdp:/usr/include/qt6/QtCore/qdarwinhelpers.h + mdp:/usr/include/qt6/QtCore/qdatastream.h + mdp:/usr/include/qt6/QtCore/qdatetime.h + mdp:/usr/include/qt6/QtCore/qdeadlinetimer.h + mdp:/usr/include/qt6/QtCore/qdebug.h + mdp:/usr/include/qt6/QtCore/qeventloop.h + mdp:/usr/include/qt6/QtCore/qexceptionhandling.h + mdp:/usr/include/qt6/QtCore/qflags.h + mdp:/usr/include/qt6/QtCore/qfloat16.h + mdp:/usr/include/qt6/QtCore/qforeach.h + mdp:/usr/include/qt6/QtCore/qfunctionaltools_impl.h + mdp:/usr/include/qt6/QtCore/qfunctionpointer.h + mdp:/usr/include/qt6/QtCore/qgenericatomic.h + mdp:/usr/include/qt6/QtCore/qglobal.h + mdp:/usr/include/qt6/QtCore/qglobalstatic.h + mdp:/usr/include/qt6/QtCore/qhash.h + mdp:/usr/include/qt6/QtCore/qhashfunctions.h + mdp:/usr/include/qt6/QtCore/qiodevicebase.h + mdp:/usr/include/qt6/QtCore/qiterable.h + mdp:/usr/include/qt6/QtCore/qiterator.h + mdp:/usr/include/qt6/QtCore/qlatin1stringview.h + mdp:/usr/include/qt6/QtCore/qlist.h + mdp:/usr/include/qt6/QtCore/qlocale.h + mdp:/usr/include/qt6/QtCore/qlogging.h + mdp:/usr/include/qt6/QtCore/qmalloc.h + mdp:/usr/include/qt6/QtCore/qmap.h + mdp:/usr/include/qt6/QtCore/qmath.h + mdp:/usr/include/qt6/QtCore/qmetacontainer.h + mdp:/usr/include/qt6/QtCore/qmetaobject.h + mdp:/usr/include/qt6/QtCore/qmetatype.h + mdp:/usr/include/qt6/QtCore/qmimedata.h + mdp:/usr/include/qt6/QtCore/qminmax.h + mdp:/usr/include/qt6/QtCore/qnamespace.h + mdp:/usr/include/qt6/QtCore/qnumeric.h + mdp:/usr/include/qt6/QtCore/qobject.h + mdp:/usr/include/qt6/QtCore/qobject_impl.h + mdp:/usr/include/qt6/QtCore/qobjectdefs.h + mdp:/usr/include/qt6/QtCore/qobjectdefs_impl.h + mdp:/usr/include/qt6/QtCore/qoverload.h + mdp:/usr/include/qt6/QtCore/qpair.h + mdp:/usr/include/qt6/QtCore/qpointer.h + mdp:/usr/include/qt6/QtCore/qprocessordetection.h + mdp:/usr/include/qt6/QtCore/qrefcount.h + mdp:/usr/include/qt6/QtCore/qscopedpointer.h + mdp:/usr/include/qt6/QtCore/qscopeguard.h + mdp:/usr/include/qt6/QtCore/qset.h + mdp:/usr/include/qt6/QtCore/qshareddata.h + mdp:/usr/include/qt6/QtCore/qshareddata_impl.h + mdp:/usr/include/qt6/QtCore/qsharedpointer.h + mdp:/usr/include/qt6/QtCore/qsharedpointer_impl.h + mdp:/usr/include/qt6/QtCore/qspan.h + mdp:/usr/include/qt6/QtCore/qstdlibdetection.h + mdp:/usr/include/qt6/QtCore/qstring.h + mdp:/usr/include/qt6/QtCore/qstringalgorithms.h + mdp:/usr/include/qt6/QtCore/qstringbuilder.h + mdp:/usr/include/qt6/QtCore/qstringconverter.h + mdp:/usr/include/qt6/QtCore/qstringconverter_base.h + mdp:/usr/include/qt6/QtCore/qstringfwd.h + mdp:/usr/include/qt6/QtCore/qstringlist.h + mdp:/usr/include/qt6/QtCore/qstringmatcher.h + mdp:/usr/include/qt6/QtCore/qstringtokenizer.h + mdp:/usr/include/qt6/QtCore/qstringview.h + mdp:/usr/include/qt6/QtCore/qswap.h + mdp:/usr/include/qt6/QtCore/qsysinfo.h + mdp:/usr/include/qt6/QtCore/qsystemdetection.h + mdp:/usr/include/qt6/QtCore/qtaggedpointer.h + mdp:/usr/include/qt6/QtCore/qtclasshelpermacros.h + mdp:/usr/include/qt6/QtCore/qtconfiginclude.h + mdp:/usr/include/qt6/QtCore/qtconfigmacros.h + mdp:/usr/include/qt6/QtCore/qtcore-config.h + mdp:/usr/include/qt6/QtCore/qtcoreexports.h + mdp:/usr/include/qt6/QtCore/qtcoreglobal.h + mdp:/usr/include/qt6/QtCore/qtdeprecationdefinitions.h + mdp:/usr/include/qt6/QtCore/qtdeprecationmarkers.h + mdp:/usr/include/qt6/QtCore/qtenvironmentvariables.h + mdp:/usr/include/qt6/QtCore/qtextstream.h + mdp:/usr/include/qt6/QtCore/qtformat_impl.h + mdp:/usr/include/qt6/QtCore/qtimer.h + mdp:/usr/include/qt6/QtCore/qtmetamacros.h + mdp:/usr/include/qt6/QtCore/qtnoop.h + mdp:/usr/include/qt6/QtCore/qtpreprocessorsupport.h + mdp:/usr/include/qt6/QtCore/qtresource.h + mdp:/usr/include/qt6/QtCore/qttranslation.h + mdp:/usr/include/qt6/QtCore/qttypetraits.h + mdp:/usr/include/qt6/QtCore/qtversion.h + mdp:/usr/include/qt6/QtCore/qtversionchecks.h + mdp:/usr/include/qt6/QtCore/qtypeinfo.h + mdp:/usr/include/qt6/QtCore/qtyperevision.h + mdp:/usr/include/qt6/QtCore/qtypes.h + mdp:/usr/include/qt6/QtCore/qurl.h + mdp:/usr/include/qt6/QtCore/qutf8stringview.h + mdp:/usr/include/qt6/QtCore/qvariant.h + mdp:/usr/include/qt6/QtCore/qvariantmap.h + mdp:/usr/include/qt6/QtCore/qvarlengtharray.h + mdp:/usr/include/qt6/QtCore/qvector.h + mdp:/usr/include/qt6/QtCore/qversionnumber.h + mdp:/usr/include/qt6/QtCore/qversiontagging.h + mdp:/usr/include/qt6/QtCore/qxptype_traits.h + mdp:/usr/include/qt6/QtCore/qyieldcpu.h + mdp:/usr/include/qt6/QtNetwork/qtnetwork-config.h + mdp:/usr/include/qt6/QtNetwork/qtnetworkexports.h + mdp:/usr/include/qt6/QtNetwork/qtnetworkglobal.h + mdp:/usr/include/qt6/QtQml/qjsnumbercoercion.h + mdp:/usr/include/qt6/QtQml/qjsprimitivevalue.h + mdp:/usr/include/qt6/QtQml/qjsvalue.h + mdp:/usr/include/qt6/QtQml/qqml.h + mdp:/usr/include/qt6/QtQml/qqmllist.h + mdp:/usr/include/qt6/QtQml/qqmlparserstatus.h + mdp:/usr/include/qt6/QtQml/qqmlprivate.h + mdp:/usr/include/qt6/QtQml/qqmlpropertyvaluesource.h + mdp:/usr/include/qt6/QtQml/qqmlregistration.h + mdp:/usr/include/qt6/QtQml/qtqml-config.h + mdp:/usr/include/qt6/QtQml/qtqmlexports.h + mdp:/usr/include/qt6/QtQml/qtqmlglobal.h + mdp:/usr/include/qt6/QtQmlIntegration/qqmlintegration.h + mdp:/usr/include/sched.h + mdp:/usr/include/stdc-predef.h + mdp:/usr/include/stdint.h + mdp:/usr/include/stdio.h + mdp:/usr/include/stdlib.h + mdp:/usr/include/string.h + mdp:/usr/include/strings.h + mdp:/usr/include/sys/cdefs.h + mdp:/usr/include/sys/select.h + mdp:/usr/include/sys/single_threaded.h + mdp:/usr/include/sys/syscall.h + mdp:/usr/include/sys/types.h + mdp:/usr/include/syscall.h + mdp:/usr/include/time.h + mdp:/usr/include/unistd.h + mdp:/usr/include/wchar.h + mdp:/usr/include/wctype.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stdarg.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stdbool.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stddef.h +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/thumbnail_generator_worker.h + mmc:Q_OBJECT + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/kassetmanagerqt_autogen/moc_predefs.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/thumbnail_generator_worker.h + mdp:/usr/include/alloca.h + mdp:/usr/include/asm-generic/bitsperlong.h + mdp:/usr/include/asm-generic/errno-base.h + mdp:/usr/include/asm-generic/errno.h + mdp:/usr/include/asm-generic/int-ll64.h + mdp:/usr/include/asm-generic/posix_types.h + mdp:/usr/include/asm-generic/types.h + mdp:/usr/include/asm/bitsperlong.h + mdp:/usr/include/asm/errno.h + mdp:/usr/include/asm/posix_types.h + mdp:/usr/include/asm/posix_types_64.h + mdp:/usr/include/asm/types.h + mdp:/usr/include/asm/unistd.h + mdp:/usr/include/asm/unistd_64.h + mdp:/usr/include/assert.h + mdp:/usr/include/bits/atomic_wide_counter.h + mdp:/usr/include/bits/byteswap.h + mdp:/usr/include/bits/confname.h + mdp:/usr/include/bits/cpu-set.h + mdp:/usr/include/bits/endian.h + mdp:/usr/include/bits/endianness.h + mdp:/usr/include/bits/environments.h + mdp:/usr/include/bits/errno.h + mdp:/usr/include/bits/floatn-common.h + mdp:/usr/include/bits/floatn.h + mdp:/usr/include/bits/getopt_core.h + mdp:/usr/include/bits/getopt_posix.h + mdp:/usr/include/bits/libc-header-start.h + mdp:/usr/include/bits/local_lim.h + mdp:/usr/include/bits/locale.h + mdp:/usr/include/bits/long-double.h + mdp:/usr/include/bits/posix1_lim.h + mdp:/usr/include/bits/posix2_lim.h + mdp:/usr/include/bits/posix_opt.h + mdp:/usr/include/bits/pthread_stack_min-dynamic.h + mdp:/usr/include/bits/pthreadtypes-arch.h + mdp:/usr/include/bits/pthreadtypes.h + mdp:/usr/include/bits/sched.h + mdp:/usr/include/bits/select.h + mdp:/usr/include/bits/semaphore.h + mdp:/usr/include/bits/setjmp.h + mdp:/usr/include/bits/stdint-intn.h + mdp:/usr/include/bits/stdint-least.h + mdp:/usr/include/bits/stdint-uintn.h + mdp:/usr/include/bits/stdio_lim.h + mdp:/usr/include/bits/stdlib-float.h + mdp:/usr/include/bits/struct_mutex.h + mdp:/usr/include/bits/struct_rwlock.h + mdp:/usr/include/bits/syscall.h + mdp:/usr/include/bits/thread-shared-types.h + mdp:/usr/include/bits/time.h + mdp:/usr/include/bits/time64.h + mdp:/usr/include/bits/timesize.h + mdp:/usr/include/bits/timex.h + mdp:/usr/include/bits/types.h + mdp:/usr/include/bits/types/FILE.h + mdp:/usr/include/bits/types/__FILE.h + mdp:/usr/include/bits/types/__fpos64_t.h + mdp:/usr/include/bits/types/__fpos_t.h + mdp:/usr/include/bits/types/__locale_t.h + mdp:/usr/include/bits/types/__mbstate_t.h + mdp:/usr/include/bits/types/__sigset_t.h + mdp:/usr/include/bits/types/clock_t.h + mdp:/usr/include/bits/types/clockid_t.h + mdp:/usr/include/bits/types/cookie_io_functions_t.h + mdp:/usr/include/bits/types/error_t.h + mdp:/usr/include/bits/types/locale_t.h + mdp:/usr/include/bits/types/mbstate_t.h + mdp:/usr/include/bits/types/sigset_t.h + mdp:/usr/include/bits/types/struct_FILE.h + mdp:/usr/include/bits/types/struct___jmp_buf_tag.h + mdp:/usr/include/bits/types/struct_itimerspec.h + mdp:/usr/include/bits/types/struct_sched_param.h + mdp:/usr/include/bits/types/struct_timespec.h + mdp:/usr/include/bits/types/struct_timeval.h + mdp:/usr/include/bits/types/struct_tm.h + mdp:/usr/include/bits/types/time_t.h + mdp:/usr/include/bits/types/timer_t.h + mdp:/usr/include/bits/types/wint_t.h + mdp:/usr/include/bits/typesizes.h + mdp:/usr/include/bits/uintn-identity.h + mdp:/usr/include/bits/uio_lim.h + mdp:/usr/include/bits/unistd_ext.h + mdp:/usr/include/bits/waitflags.h + mdp:/usr/include/bits/waitstatus.h + mdp:/usr/include/bits/wchar.h + mdp:/usr/include/bits/wctype-wchar.h + mdp:/usr/include/bits/wordsize.h + mdp:/usr/include/bits/xopen_lim.h + mdp:/usr/include/c++/15/algorithm + mdp:/usr/include/c++/15/array + mdp:/usr/include/c++/15/atomic + mdp:/usr/include/c++/15/backward/auto_ptr.h + mdp:/usr/include/c++/15/backward/binders.h + mdp:/usr/include/c++/15/bit + mdp:/usr/include/c++/15/bits/algorithmfwd.h + mdp:/usr/include/c++/15/bits/align.h + mdp:/usr/include/c++/15/bits/alloc_traits.h + mdp:/usr/include/c++/15/bits/allocated_ptr.h + mdp:/usr/include/c++/15/bits/allocator.h + mdp:/usr/include/c++/15/bits/atomic_base.h + mdp:/usr/include/c++/15/bits/atomic_futex.h + mdp:/usr/include/c++/15/bits/atomic_lockfree_defines.h + mdp:/usr/include/c++/15/bits/atomic_timed_wait.h + mdp:/usr/include/c++/15/bits/atomic_wait.h + mdp:/usr/include/c++/15/bits/basic_ios.h + mdp:/usr/include/c++/15/bits/basic_ios.tcc + mdp:/usr/include/c++/15/bits/basic_string.h + mdp:/usr/include/c++/15/bits/basic_string.tcc + mdp:/usr/include/c++/15/bits/char_traits.h + mdp:/usr/include/c++/15/bits/charconv.h + mdp:/usr/include/c++/15/bits/chrono.h + mdp:/usr/include/c++/15/bits/chrono_io.h + mdp:/usr/include/c++/15/bits/codecvt.h + mdp:/usr/include/c++/15/bits/concept_check.h + mdp:/usr/include/c++/15/bits/cpp_type_traits.h + mdp:/usr/include/c++/15/bits/cxxabi_forced.h + mdp:/usr/include/c++/15/bits/cxxabi_init_exception.h + mdp:/usr/include/c++/15/bits/enable_special_members.h + mdp:/usr/include/c++/15/bits/erase_if.h + mdp:/usr/include/c++/15/bits/exception.h + mdp:/usr/include/c++/15/bits/exception_defines.h + mdp:/usr/include/c++/15/bits/exception_ptr.h + mdp:/usr/include/c++/15/bits/functexcept.h + mdp:/usr/include/c++/15/bits/functional_hash.h + mdp:/usr/include/c++/15/bits/hash_bytes.h + mdp:/usr/include/c++/15/bits/hashtable.h + mdp:/usr/include/c++/15/bits/hashtable_policy.h + mdp:/usr/include/c++/15/bits/invoke.h + mdp:/usr/include/c++/15/bits/ios_base.h + mdp:/usr/include/c++/15/bits/istream.tcc + mdp:/usr/include/c++/15/bits/iterator_concepts.h + mdp:/usr/include/c++/15/bits/list.tcc + mdp:/usr/include/c++/15/bits/locale_classes.h + mdp:/usr/include/c++/15/bits/locale_classes.tcc + mdp:/usr/include/c++/15/bits/locale_conv.h + mdp:/usr/include/c++/15/bits/locale_facets.h + mdp:/usr/include/c++/15/bits/locale_facets.tcc + mdp:/usr/include/c++/15/bits/locale_facets_nonio.h + mdp:/usr/include/c++/15/bits/locale_facets_nonio.tcc + mdp:/usr/include/c++/15/bits/localefwd.h + mdp:/usr/include/c++/15/bits/max_size_type.h + mdp:/usr/include/c++/15/bits/memory_resource.h + mdp:/usr/include/c++/15/bits/memoryfwd.h + mdp:/usr/include/c++/15/bits/move.h + mdp:/usr/include/c++/15/bits/nested_exception.h + mdp:/usr/include/c++/15/bits/new_allocator.h + mdp:/usr/include/c++/15/bits/node_handle.h + mdp:/usr/include/c++/15/bits/ostream.h + mdp:/usr/include/c++/15/bits/ostream.tcc + mdp:/usr/include/c++/15/bits/ostream_insert.h + mdp:/usr/include/c++/15/bits/parse_numbers.h + mdp:/usr/include/c++/15/bits/postypes.h + mdp:/usr/include/c++/15/bits/predefined_ops.h + mdp:/usr/include/c++/15/bits/ptr_traits.h + mdp:/usr/include/c++/15/bits/quoted_string.h + mdp:/usr/include/c++/15/bits/range_access.h + mdp:/usr/include/c++/15/bits/ranges_algo.h + mdp:/usr/include/c++/15/bits/ranges_algobase.h + mdp:/usr/include/c++/15/bits/ranges_base.h + mdp:/usr/include/c++/15/bits/ranges_cmp.h + mdp:/usr/include/c++/15/bits/ranges_uninitialized.h + mdp:/usr/include/c++/15/bits/ranges_util.h + mdp:/usr/include/c++/15/bits/refwrap.h + mdp:/usr/include/c++/15/bits/requires_hosted.h + mdp:/usr/include/c++/15/bits/semaphore_base.h + mdp:/usr/include/c++/15/bits/shared_ptr.h + mdp:/usr/include/c++/15/bits/shared_ptr_atomic.h + mdp:/usr/include/c++/15/bits/shared_ptr_base.h + mdp:/usr/include/c++/15/bits/specfun.h + mdp:/usr/include/c++/15/bits/sstream.tcc + mdp:/usr/include/c++/15/bits/std_abs.h + mdp:/usr/include/c++/15/bits/std_function.h + mdp:/usr/include/c++/15/bits/std_mutex.h + mdp:/usr/include/c++/15/bits/std_thread.h + mdp:/usr/include/c++/15/bits/stl_algo.h + mdp:/usr/include/c++/15/bits/stl_algobase.h + mdp:/usr/include/c++/15/bits/stl_bvector.h + mdp:/usr/include/c++/15/bits/stl_construct.h + mdp:/usr/include/c++/15/bits/stl_function.h + mdp:/usr/include/c++/15/bits/stl_heap.h + mdp:/usr/include/c++/15/bits/stl_iterator.h + mdp:/usr/include/c++/15/bits/stl_iterator_base_funcs.h + mdp:/usr/include/c++/15/bits/stl_iterator_base_types.h + mdp:/usr/include/c++/15/bits/stl_list.h + mdp:/usr/include/c++/15/bits/stl_map.h + mdp:/usr/include/c++/15/bits/stl_multimap.h + mdp:/usr/include/c++/15/bits/stl_numeric.h + mdp:/usr/include/c++/15/bits/stl_pair.h + mdp:/usr/include/c++/15/bits/stl_raw_storage_iter.h + mdp:/usr/include/c++/15/bits/stl_relops.h + mdp:/usr/include/c++/15/bits/stl_tempbuf.h + mdp:/usr/include/c++/15/bits/stl_tree.h + mdp:/usr/include/c++/15/bits/stl_uninitialized.h + mdp:/usr/include/c++/15/bits/stl_vector.h + mdp:/usr/include/c++/15/bits/stream_iterator.h + mdp:/usr/include/c++/15/bits/streambuf.tcc + mdp:/usr/include/c++/15/bits/streambuf_iterator.h + mdp:/usr/include/c++/15/bits/string_view.tcc + mdp:/usr/include/c++/15/bits/stringfwd.h + mdp:/usr/include/c++/15/bits/this_thread_sleep.h + mdp:/usr/include/c++/15/bits/uniform_int_dist.h + mdp:/usr/include/c++/15/bits/unique_lock.h + mdp:/usr/include/c++/15/bits/unique_ptr.h + mdp:/usr/include/c++/15/bits/unordered_map.h + mdp:/usr/include/c++/15/bits/uses_allocator.h + mdp:/usr/include/c++/15/bits/uses_allocator_args.h + mdp:/usr/include/c++/15/bits/utility.h + mdp:/usr/include/c++/15/bits/vector.tcc + mdp:/usr/include/c++/15/bits/version.h + mdp:/usr/include/c++/15/cctype + mdp:/usr/include/c++/15/cerrno + mdp:/usr/include/c++/15/charconv + mdp:/usr/include/c++/15/chrono + mdp:/usr/include/c++/15/climits + mdp:/usr/include/c++/15/clocale + mdp:/usr/include/c++/15/cmath + mdp:/usr/include/c++/15/compare + mdp:/usr/include/c++/15/concepts + mdp:/usr/include/c++/15/condition_variable + mdp:/usr/include/c++/15/cstddef + mdp:/usr/include/c++/15/cstdint + mdp:/usr/include/c++/15/cstdio + mdp:/usr/include/c++/15/cstdlib + mdp:/usr/include/c++/15/cstring + mdp:/usr/include/c++/15/ctime + mdp:/usr/include/c++/15/cwchar + mdp:/usr/include/c++/15/cwctype + mdp:/usr/include/c++/15/debug/assertions.h + mdp:/usr/include/c++/15/debug/debug.h + mdp:/usr/include/c++/15/exception + mdp:/usr/include/c++/15/ext/aligned_buffer.h + mdp:/usr/include/c++/15/ext/alloc_traits.h + mdp:/usr/include/c++/15/ext/atomicity.h + mdp:/usr/include/c++/15/ext/concurrence.h + mdp:/usr/include/c++/15/ext/numeric_traits.h + mdp:/usr/include/c++/15/ext/string_conversions.h + mdp:/usr/include/c++/15/ext/type_traits.h + mdp:/usr/include/c++/15/format + mdp:/usr/include/c++/15/functional + mdp:/usr/include/c++/15/future + mdp:/usr/include/c++/15/initializer_list + mdp:/usr/include/c++/15/iomanip + mdp:/usr/include/c++/15/ios + mdp:/usr/include/c++/15/iosfwd + mdp:/usr/include/c++/15/istream + mdp:/usr/include/c++/15/iterator + mdp:/usr/include/c++/15/limits + mdp:/usr/include/c++/15/list + mdp:/usr/include/c++/15/locale + mdp:/usr/include/c++/15/map + mdp:/usr/include/c++/15/memory + mdp:/usr/include/c++/15/mutex + mdp:/usr/include/c++/15/new + mdp:/usr/include/c++/15/numeric + mdp:/usr/include/c++/15/optional + mdp:/usr/include/c++/15/ostream + mdp:/usr/include/c++/15/pstl/execution_defs.h + mdp:/usr/include/c++/15/pstl/glue_numeric_defs.h + mdp:/usr/include/c++/15/pstl/pstl_config.h + mdp:/usr/include/c++/15/ratio + mdp:/usr/include/c++/15/semaphore + mdp:/usr/include/c++/15/sstream + mdp:/usr/include/c++/15/stdexcept + mdp:/usr/include/c++/15/stop_token + mdp:/usr/include/c++/15/streambuf + mdp:/usr/include/c++/15/string + mdp:/usr/include/c++/15/string_view + mdp:/usr/include/c++/15/system_error + mdp:/usr/include/c++/15/tr1/bessel_function.tcc + mdp:/usr/include/c++/15/tr1/beta_function.tcc + mdp:/usr/include/c++/15/tr1/ell_integral.tcc + mdp:/usr/include/c++/15/tr1/exp_integral.tcc + mdp:/usr/include/c++/15/tr1/gamma.tcc + mdp:/usr/include/c++/15/tr1/hypergeometric.tcc + mdp:/usr/include/c++/15/tr1/legendre_function.tcc + mdp:/usr/include/c++/15/tr1/modified_bessel_func.tcc + mdp:/usr/include/c++/15/tr1/poly_hermite.tcc + mdp:/usr/include/c++/15/tr1/poly_laguerre.tcc + mdp:/usr/include/c++/15/tr1/riemann_zeta.tcc + mdp:/usr/include/c++/15/tr1/special_function_util.h + mdp:/usr/include/c++/15/tuple + mdp:/usr/include/c++/15/type_traits + mdp:/usr/include/c++/15/typeinfo + mdp:/usr/include/c++/15/unordered_map + mdp:/usr/include/c++/15/utility + mdp:/usr/include/c++/15/variant + mdp:/usr/include/c++/15/vector + mdp:/usr/include/c++/15/version + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/atomic_word.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++allocator.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++config.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++locale.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/cpu_defines.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/ctype_base.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/ctype_inline.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/error_constants.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/gthr-default.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/gthr.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/messages_members.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/os_defines.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/time_members.h + mdp:/usr/include/ctype.h + mdp:/usr/include/endian.h + mdp:/usr/include/errno.h + mdp:/usr/include/features-time64.h + mdp:/usr/include/features.h + mdp:/usr/include/gnu/stubs-64.h + mdp:/usr/include/gnu/stubs.h + mdp:/usr/include/libintl.h + mdp:/usr/include/limits.h + mdp:/usr/include/linux/close_range.h + mdp:/usr/include/linux/errno.h + mdp:/usr/include/linux/limits.h + mdp:/usr/include/linux/posix_types.h + mdp:/usr/include/linux/sched/types.h + mdp:/usr/include/linux/stddef.h + mdp:/usr/include/linux/types.h + mdp:/usr/include/locale.h + mdp:/usr/include/pthread.h + mdp:/usr/include/qt6/QtCore/QAtomicInt + mdp:/usr/include/qt6/QtCore/QMutex + mdp:/usr/include/qt6/QtCore/QObject + mdp:/usr/include/qt6/QtCore/QSize + mdp:/usr/include/qt6/QtCore/QStringList + mdp:/usr/include/qt6/QtCore/QThreadPool + mdp:/usr/include/qt6/QtCore/QVector + mdp:/usr/include/qt6/QtCore/q17memory.h + mdp:/usr/include/qt6/QtCore/q20functional.h + mdp:/usr/include/qt6/QtCore/q20memory.h + mdp:/usr/include/qt6/QtCore/q20type_traits.h + mdp:/usr/include/qt6/QtCore/q20utility.h + mdp:/usr/include/qt6/QtCore/q23type_traits.h + mdp:/usr/include/qt6/QtCore/q23utility.h + mdp:/usr/include/qt6/QtCore/qalgorithms.h + mdp:/usr/include/qt6/QtCore/qanystringview.h + mdp:/usr/include/qt6/QtCore/qarraydata.h + mdp:/usr/include/qt6/QtCore/qarraydataops.h + mdp:/usr/include/qt6/QtCore/qarraydatapointer.h + mdp:/usr/include/qt6/QtCore/qassert.h + mdp:/usr/include/qt6/QtCore/qatomic.h + mdp:/usr/include/qt6/QtCore/qatomic_cxx11.h + mdp:/usr/include/qt6/QtCore/qbasicatomic.h + mdp:/usr/include/qt6/QtCore/qbindingstorage.h + mdp:/usr/include/qt6/QtCore/qbytearray.h + mdp:/usr/include/qt6/QtCore/qbytearrayalgorithms.h + mdp:/usr/include/qt6/QtCore/qbytearraylist.h + mdp:/usr/include/qt6/QtCore/qbytearrayview.h + mdp:/usr/include/qt6/QtCore/qchar.h + mdp:/usr/include/qt6/QtCore/qcheckedint_impl.h + mdp:/usr/include/qt6/QtCore/qcompare.h + mdp:/usr/include/qt6/QtCore/qcompare_impl.h + mdp:/usr/include/qt6/QtCore/qcomparehelpers.h + mdp:/usr/include/qt6/QtCore/qcompilerdetection.h + mdp:/usr/include/qt6/QtCore/qconfig-64.h + mdp:/usr/include/qt6/QtCore/qconfig.h + mdp:/usr/include/qt6/QtCore/qconstructormacros.h + mdp:/usr/include/qt6/QtCore/qcontainerfwd.h + mdp:/usr/include/qt6/QtCore/qcontainerinfo.h + mdp:/usr/include/qt6/QtCore/qcontainertools_impl.h + mdp:/usr/include/qt6/QtCore/qdarwinhelpers.h + mdp:/usr/include/qt6/QtCore/qdatastream.h + mdp:/usr/include/qt6/QtCore/qdeadlinetimer.h + mdp:/usr/include/qt6/QtCore/qexceptionhandling.h + mdp:/usr/include/qt6/QtCore/qflags.h + mdp:/usr/include/qt6/QtCore/qfloat16.h + mdp:/usr/include/qt6/QtCore/qforeach.h + mdp:/usr/include/qt6/QtCore/qfunctionaltools_impl.h + mdp:/usr/include/qt6/QtCore/qfunctionpointer.h + mdp:/usr/include/qt6/QtCore/qgenericatomic.h + mdp:/usr/include/qt6/QtCore/qglobal.h + mdp:/usr/include/qt6/QtCore/qglobalstatic.h + mdp:/usr/include/qt6/QtCore/qhashfunctions.h + mdp:/usr/include/qt6/QtCore/qiodevicebase.h + mdp:/usr/include/qt6/QtCore/qiterable.h + mdp:/usr/include/qt6/QtCore/qiterator.h + mdp:/usr/include/qt6/QtCore/qlatin1stringview.h + mdp:/usr/include/qt6/QtCore/qlist.h + mdp:/usr/include/qt6/QtCore/qlogging.h + mdp:/usr/include/qt6/QtCore/qmalloc.h + mdp:/usr/include/qt6/QtCore/qmargins.h + mdp:/usr/include/qt6/QtCore/qmath.h + mdp:/usr/include/qt6/QtCore/qmetacontainer.h + mdp:/usr/include/qt6/QtCore/qmetatype.h + mdp:/usr/include/qt6/QtCore/qminmax.h + mdp:/usr/include/qt6/QtCore/qmutex.h + mdp:/usr/include/qt6/QtCore/qnamespace.h + mdp:/usr/include/qt6/QtCore/qnumeric.h + mdp:/usr/include/qt6/QtCore/qobject.h + mdp:/usr/include/qt6/QtCore/qobject_impl.h + mdp:/usr/include/qt6/QtCore/qobjectdefs.h + mdp:/usr/include/qt6/QtCore/qobjectdefs_impl.h + mdp:/usr/include/qt6/QtCore/qoverload.h + mdp:/usr/include/qt6/QtCore/qpair.h + mdp:/usr/include/qt6/QtCore/qprocessordetection.h + mdp:/usr/include/qt6/QtCore/qrefcount.h + mdp:/usr/include/qt6/QtCore/qrunnable.h + mdp:/usr/include/qt6/QtCore/qscopedpointer.h + mdp:/usr/include/qt6/QtCore/qscopeguard.h + mdp:/usr/include/qt6/QtCore/qsize.h + mdp:/usr/include/qt6/QtCore/qstdlibdetection.h + mdp:/usr/include/qt6/QtCore/qstring.h + mdp:/usr/include/qt6/QtCore/qstringalgorithms.h + mdp:/usr/include/qt6/QtCore/qstringbuilder.h + mdp:/usr/include/qt6/QtCore/qstringconverter.h + mdp:/usr/include/qt6/QtCore/qstringconverter_base.h + mdp:/usr/include/qt6/QtCore/qstringfwd.h + mdp:/usr/include/qt6/QtCore/qstringlist.h + mdp:/usr/include/qt6/QtCore/qstringmatcher.h + mdp:/usr/include/qt6/QtCore/qstringtokenizer.h + mdp:/usr/include/qt6/QtCore/qstringview.h + mdp:/usr/include/qt6/QtCore/qswap.h + mdp:/usr/include/qt6/QtCore/qsysinfo.h + mdp:/usr/include/qt6/QtCore/qsystemdetection.h + mdp:/usr/include/qt6/QtCore/qtaggedpointer.h + mdp:/usr/include/qt6/QtCore/qtclasshelpermacros.h + mdp:/usr/include/qt6/QtCore/qtconfiginclude.h + mdp:/usr/include/qt6/QtCore/qtconfigmacros.h + mdp:/usr/include/qt6/QtCore/qtcore-config.h + mdp:/usr/include/qt6/QtCore/qtcoreexports.h + mdp:/usr/include/qt6/QtCore/qtcoreglobal.h + mdp:/usr/include/qt6/QtCore/qtdeprecationdefinitions.h + mdp:/usr/include/qt6/QtCore/qtdeprecationmarkers.h + mdp:/usr/include/qt6/QtCore/qtenvironmentvariables.h + mdp:/usr/include/qt6/QtCore/qtformat_impl.h + mdp:/usr/include/qt6/QtCore/qthread.h + mdp:/usr/include/qt6/QtCore/qthreadpool.h + mdp:/usr/include/qt6/QtCore/qtmetamacros.h + mdp:/usr/include/qt6/QtCore/qtnoop.h + mdp:/usr/include/qt6/QtCore/qtpreprocessorsupport.h + mdp:/usr/include/qt6/QtCore/qtresource.h + mdp:/usr/include/qt6/QtCore/qtsan_impl.h + mdp:/usr/include/qt6/QtCore/qttranslation.h + mdp:/usr/include/qt6/QtCore/qttypetraits.h + mdp:/usr/include/qt6/QtCore/qtversion.h + mdp:/usr/include/qt6/QtCore/qtversionchecks.h + mdp:/usr/include/qt6/QtCore/qtypeinfo.h + mdp:/usr/include/qt6/QtCore/qtypes.h + mdp:/usr/include/qt6/QtCore/qutf8stringview.h + mdp:/usr/include/qt6/QtCore/qvector.h + mdp:/usr/include/qt6/QtCore/qversiontagging.h + mdp:/usr/include/qt6/QtCore/qxptype_traits.h + mdp:/usr/include/qt6/QtCore/qyieldcpu.h + mdp:/usr/include/sched.h + mdp:/usr/include/semaphore.h + mdp:/usr/include/stdc-predef.h + mdp:/usr/include/stdint.h + mdp:/usr/include/stdio.h + mdp:/usr/include/stdlib.h + mdp:/usr/include/string.h + mdp:/usr/include/strings.h + mdp:/usr/include/sys/cdefs.h + mdp:/usr/include/sys/select.h + mdp:/usr/include/sys/single_threaded.h + mdp:/usr/include/sys/syscall.h + mdp:/usr/include/sys/time.h + mdp:/usr/include/sys/types.h + mdp:/usr/include/syscall.h + mdp:/usr/include/time.h + mdp:/usr/include/unistd.h + mdp:/usr/include/wchar.h + mdp:/usr/include/wctype.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stdarg.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stdbool.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stddef.h +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/project_sequence_grouping_proxy_model.cpp +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/everything_search.h +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/user_guide_dialog.h + mmc:Q_OBJECT + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/kassetmanagerqt_autogen/moc_predefs.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/user_guide_dialog.h + mdp:/usr/include/alloca.h + mdp:/usr/include/asm-generic/bitsperlong.h + mdp:/usr/include/asm-generic/errno-base.h + mdp:/usr/include/asm-generic/errno.h + mdp:/usr/include/asm-generic/int-ll64.h + mdp:/usr/include/asm-generic/posix_types.h + mdp:/usr/include/asm-generic/types.h + mdp:/usr/include/asm/bitsperlong.h + mdp:/usr/include/asm/errno.h + mdp:/usr/include/asm/posix_types.h + mdp:/usr/include/asm/posix_types_64.h + mdp:/usr/include/asm/types.h + mdp:/usr/include/asm/unistd.h + mdp:/usr/include/asm/unistd_64.h + mdp:/usr/include/assert.h + mdp:/usr/include/bits/atomic_wide_counter.h + mdp:/usr/include/bits/byteswap.h + mdp:/usr/include/bits/confname.h + mdp:/usr/include/bits/cpu-set.h + mdp:/usr/include/bits/endian.h + mdp:/usr/include/bits/endianness.h + mdp:/usr/include/bits/environments.h + mdp:/usr/include/bits/errno.h + mdp:/usr/include/bits/floatn-common.h + mdp:/usr/include/bits/floatn.h + mdp:/usr/include/bits/getopt_core.h + mdp:/usr/include/bits/getopt_posix.h + mdp:/usr/include/bits/libc-header-start.h + mdp:/usr/include/bits/local_lim.h + mdp:/usr/include/bits/locale.h + mdp:/usr/include/bits/long-double.h + mdp:/usr/include/bits/posix1_lim.h + mdp:/usr/include/bits/posix2_lim.h + mdp:/usr/include/bits/posix_opt.h + mdp:/usr/include/bits/pthread_stack_min-dynamic.h + mdp:/usr/include/bits/pthreadtypes-arch.h + mdp:/usr/include/bits/pthreadtypes.h + mdp:/usr/include/bits/sched.h + mdp:/usr/include/bits/select.h + mdp:/usr/include/bits/setjmp.h + mdp:/usr/include/bits/stdint-intn.h + mdp:/usr/include/bits/stdint-least.h + mdp:/usr/include/bits/stdint-uintn.h + mdp:/usr/include/bits/stdio_lim.h + mdp:/usr/include/bits/stdlib-float.h + mdp:/usr/include/bits/struct_mutex.h + mdp:/usr/include/bits/struct_rwlock.h + mdp:/usr/include/bits/syscall.h + mdp:/usr/include/bits/thread-shared-types.h + mdp:/usr/include/bits/time.h + mdp:/usr/include/bits/time64.h + mdp:/usr/include/bits/timesize.h + mdp:/usr/include/bits/timex.h + mdp:/usr/include/bits/types.h + mdp:/usr/include/bits/types/FILE.h + mdp:/usr/include/bits/types/__FILE.h + mdp:/usr/include/bits/types/__fpos64_t.h + mdp:/usr/include/bits/types/__fpos_t.h + mdp:/usr/include/bits/types/__locale_t.h + mdp:/usr/include/bits/types/__mbstate_t.h + mdp:/usr/include/bits/types/__sigset_t.h + mdp:/usr/include/bits/types/clock_t.h + mdp:/usr/include/bits/types/clockid_t.h + mdp:/usr/include/bits/types/cookie_io_functions_t.h + mdp:/usr/include/bits/types/error_t.h + mdp:/usr/include/bits/types/locale_t.h + mdp:/usr/include/bits/types/mbstate_t.h + mdp:/usr/include/bits/types/sigset_t.h + mdp:/usr/include/bits/types/struct_FILE.h + mdp:/usr/include/bits/types/struct___jmp_buf_tag.h + mdp:/usr/include/bits/types/struct_itimerspec.h + mdp:/usr/include/bits/types/struct_sched_param.h + mdp:/usr/include/bits/types/struct_timespec.h + mdp:/usr/include/bits/types/struct_timeval.h + mdp:/usr/include/bits/types/struct_tm.h + mdp:/usr/include/bits/types/time_t.h + mdp:/usr/include/bits/types/timer_t.h + mdp:/usr/include/bits/types/wint_t.h + mdp:/usr/include/bits/typesizes.h + mdp:/usr/include/bits/uintn-identity.h + mdp:/usr/include/bits/uio_lim.h + mdp:/usr/include/bits/unistd_ext.h + mdp:/usr/include/bits/waitflags.h + mdp:/usr/include/bits/waitstatus.h + mdp:/usr/include/bits/wchar.h + mdp:/usr/include/bits/wctype-wchar.h + mdp:/usr/include/bits/wordsize.h + mdp:/usr/include/bits/xopen_lim.h + mdp:/usr/include/c++/15/algorithm + mdp:/usr/include/c++/15/array + mdp:/usr/include/c++/15/atomic + mdp:/usr/include/c++/15/backward/auto_ptr.h + mdp:/usr/include/c++/15/backward/binders.h + mdp:/usr/include/c++/15/bit + mdp:/usr/include/c++/15/bits/algorithmfwd.h + mdp:/usr/include/c++/15/bits/align.h + mdp:/usr/include/c++/15/bits/alloc_traits.h + mdp:/usr/include/c++/15/bits/allocated_ptr.h + mdp:/usr/include/c++/15/bits/allocator.h + mdp:/usr/include/c++/15/bits/atomic_base.h + mdp:/usr/include/c++/15/bits/atomic_lockfree_defines.h + mdp:/usr/include/c++/15/bits/atomic_wait.h + mdp:/usr/include/c++/15/bits/basic_ios.h + mdp:/usr/include/c++/15/bits/basic_ios.tcc + mdp:/usr/include/c++/15/bits/basic_string.h + mdp:/usr/include/c++/15/bits/basic_string.tcc + mdp:/usr/include/c++/15/bits/char_traits.h + mdp:/usr/include/c++/15/bits/charconv.h + mdp:/usr/include/c++/15/bits/chrono.h + mdp:/usr/include/c++/15/bits/chrono_io.h + mdp:/usr/include/c++/15/bits/codecvt.h + mdp:/usr/include/c++/15/bits/concept_check.h + mdp:/usr/include/c++/15/bits/cpp_type_traits.h + mdp:/usr/include/c++/15/bits/cxxabi_forced.h + mdp:/usr/include/c++/15/bits/cxxabi_init_exception.h + mdp:/usr/include/c++/15/bits/enable_special_members.h + mdp:/usr/include/c++/15/bits/erase_if.h + mdp:/usr/include/c++/15/bits/exception.h + mdp:/usr/include/c++/15/bits/exception_defines.h + mdp:/usr/include/c++/15/bits/exception_ptr.h + mdp:/usr/include/c++/15/bits/functexcept.h + mdp:/usr/include/c++/15/bits/functional_hash.h + mdp:/usr/include/c++/15/bits/hash_bytes.h + mdp:/usr/include/c++/15/bits/hashtable.h + mdp:/usr/include/c++/15/bits/hashtable_policy.h + mdp:/usr/include/c++/15/bits/invoke.h + mdp:/usr/include/c++/15/bits/ios_base.h + mdp:/usr/include/c++/15/bits/istream.tcc + mdp:/usr/include/c++/15/bits/iterator_concepts.h + mdp:/usr/include/c++/15/bits/list.tcc + mdp:/usr/include/c++/15/bits/locale_classes.h + mdp:/usr/include/c++/15/bits/locale_classes.tcc + mdp:/usr/include/c++/15/bits/locale_conv.h + mdp:/usr/include/c++/15/bits/locale_facets.h + mdp:/usr/include/c++/15/bits/locale_facets.tcc + mdp:/usr/include/c++/15/bits/locale_facets_nonio.h + mdp:/usr/include/c++/15/bits/locale_facets_nonio.tcc + mdp:/usr/include/c++/15/bits/localefwd.h + mdp:/usr/include/c++/15/bits/max_size_type.h + mdp:/usr/include/c++/15/bits/memory_resource.h + mdp:/usr/include/c++/15/bits/memoryfwd.h + mdp:/usr/include/c++/15/bits/move.h + mdp:/usr/include/c++/15/bits/nested_exception.h + mdp:/usr/include/c++/15/bits/new_allocator.h + mdp:/usr/include/c++/15/bits/node_handle.h + mdp:/usr/include/c++/15/bits/ostream.h + mdp:/usr/include/c++/15/bits/ostream.tcc + mdp:/usr/include/c++/15/bits/ostream_insert.h + mdp:/usr/include/c++/15/bits/parse_numbers.h + mdp:/usr/include/c++/15/bits/postypes.h + mdp:/usr/include/c++/15/bits/predefined_ops.h + mdp:/usr/include/c++/15/bits/ptr_traits.h + mdp:/usr/include/c++/15/bits/quoted_string.h + mdp:/usr/include/c++/15/bits/range_access.h + mdp:/usr/include/c++/15/bits/ranges_algo.h + mdp:/usr/include/c++/15/bits/ranges_algobase.h + mdp:/usr/include/c++/15/bits/ranges_base.h + mdp:/usr/include/c++/15/bits/ranges_cmp.h + mdp:/usr/include/c++/15/bits/ranges_uninitialized.h + mdp:/usr/include/c++/15/bits/ranges_util.h + mdp:/usr/include/c++/15/bits/refwrap.h + mdp:/usr/include/c++/15/bits/requires_hosted.h + mdp:/usr/include/c++/15/bits/shared_ptr.h + mdp:/usr/include/c++/15/bits/shared_ptr_atomic.h + mdp:/usr/include/c++/15/bits/shared_ptr_base.h + mdp:/usr/include/c++/15/bits/specfun.h + mdp:/usr/include/c++/15/bits/sstream.tcc + mdp:/usr/include/c++/15/bits/std_abs.h + mdp:/usr/include/c++/15/bits/std_function.h + mdp:/usr/include/c++/15/bits/std_mutex.h + mdp:/usr/include/c++/15/bits/stl_algo.h + mdp:/usr/include/c++/15/bits/stl_algobase.h + mdp:/usr/include/c++/15/bits/stl_bvector.h + mdp:/usr/include/c++/15/bits/stl_construct.h + mdp:/usr/include/c++/15/bits/stl_function.h + mdp:/usr/include/c++/15/bits/stl_heap.h + mdp:/usr/include/c++/15/bits/stl_iterator.h + mdp:/usr/include/c++/15/bits/stl_iterator_base_funcs.h + mdp:/usr/include/c++/15/bits/stl_iterator_base_types.h + mdp:/usr/include/c++/15/bits/stl_list.h + mdp:/usr/include/c++/15/bits/stl_map.h + mdp:/usr/include/c++/15/bits/stl_multimap.h + mdp:/usr/include/c++/15/bits/stl_multiset.h + mdp:/usr/include/c++/15/bits/stl_numeric.h + mdp:/usr/include/c++/15/bits/stl_pair.h + mdp:/usr/include/c++/15/bits/stl_raw_storage_iter.h + mdp:/usr/include/c++/15/bits/stl_relops.h + mdp:/usr/include/c++/15/bits/stl_set.h + mdp:/usr/include/c++/15/bits/stl_tempbuf.h + mdp:/usr/include/c++/15/bits/stl_tree.h + mdp:/usr/include/c++/15/bits/stl_uninitialized.h + mdp:/usr/include/c++/15/bits/stl_vector.h + mdp:/usr/include/c++/15/bits/stream_iterator.h + mdp:/usr/include/c++/15/bits/streambuf.tcc + mdp:/usr/include/c++/15/bits/streambuf_iterator.h + mdp:/usr/include/c++/15/bits/string_view.tcc + mdp:/usr/include/c++/15/bits/stringfwd.h + mdp:/usr/include/c++/15/bits/uniform_int_dist.h + mdp:/usr/include/c++/15/bits/unique_ptr.h + mdp:/usr/include/c++/15/bits/unordered_map.h + mdp:/usr/include/c++/15/bits/unordered_set.h + mdp:/usr/include/c++/15/bits/uses_allocator.h + mdp:/usr/include/c++/15/bits/uses_allocator_args.h + mdp:/usr/include/c++/15/bits/utility.h + mdp:/usr/include/c++/15/bits/vector.tcc + mdp:/usr/include/c++/15/bits/version.h + mdp:/usr/include/c++/15/cassert + mdp:/usr/include/c++/15/cctype + mdp:/usr/include/c++/15/cerrno + mdp:/usr/include/c++/15/charconv + mdp:/usr/include/c++/15/chrono + mdp:/usr/include/c++/15/climits + mdp:/usr/include/c++/15/clocale + mdp:/usr/include/c++/15/cmath + mdp:/usr/include/c++/15/compare + mdp:/usr/include/c++/15/concepts + mdp:/usr/include/c++/15/cstddef + mdp:/usr/include/c++/15/cstdint + mdp:/usr/include/c++/15/cstdio + mdp:/usr/include/c++/15/cstdlib + mdp:/usr/include/c++/15/cstring + mdp:/usr/include/c++/15/ctime + mdp:/usr/include/c++/15/cwchar + mdp:/usr/include/c++/15/cwctype + mdp:/usr/include/c++/15/debug/assertions.h + mdp:/usr/include/c++/15/debug/debug.h + mdp:/usr/include/c++/15/exception + mdp:/usr/include/c++/15/ext/aligned_buffer.h + mdp:/usr/include/c++/15/ext/alloc_traits.h + mdp:/usr/include/c++/15/ext/atomicity.h + mdp:/usr/include/c++/15/ext/concurrence.h + mdp:/usr/include/c++/15/ext/numeric_traits.h + mdp:/usr/include/c++/15/ext/string_conversions.h + mdp:/usr/include/c++/15/ext/type_traits.h + mdp:/usr/include/c++/15/format + mdp:/usr/include/c++/15/functional + mdp:/usr/include/c++/15/initializer_list + mdp:/usr/include/c++/15/iomanip + mdp:/usr/include/c++/15/ios + mdp:/usr/include/c++/15/iosfwd + mdp:/usr/include/c++/15/istream + mdp:/usr/include/c++/15/iterator + mdp:/usr/include/c++/15/limits + mdp:/usr/include/c++/15/list + mdp:/usr/include/c++/15/locale + mdp:/usr/include/c++/15/map + mdp:/usr/include/c++/15/memory + mdp:/usr/include/c++/15/new + mdp:/usr/include/c++/15/numeric + mdp:/usr/include/c++/15/optional + mdp:/usr/include/c++/15/ostream + mdp:/usr/include/c++/15/pstl/execution_defs.h + mdp:/usr/include/c++/15/pstl/glue_numeric_defs.h + mdp:/usr/include/c++/15/pstl/pstl_config.h + mdp:/usr/include/c++/15/ratio + mdp:/usr/include/c++/15/set + mdp:/usr/include/c++/15/sstream + mdp:/usr/include/c++/15/stdexcept + mdp:/usr/include/c++/15/streambuf + mdp:/usr/include/c++/15/string + mdp:/usr/include/c++/15/string_view + mdp:/usr/include/c++/15/system_error + mdp:/usr/include/c++/15/tr1/bessel_function.tcc + mdp:/usr/include/c++/15/tr1/beta_function.tcc + mdp:/usr/include/c++/15/tr1/ell_integral.tcc + mdp:/usr/include/c++/15/tr1/exp_integral.tcc + mdp:/usr/include/c++/15/tr1/gamma.tcc + mdp:/usr/include/c++/15/tr1/hypergeometric.tcc + mdp:/usr/include/c++/15/tr1/legendre_function.tcc + mdp:/usr/include/c++/15/tr1/modified_bessel_func.tcc + mdp:/usr/include/c++/15/tr1/poly_hermite.tcc + mdp:/usr/include/c++/15/tr1/poly_laguerre.tcc + mdp:/usr/include/c++/15/tr1/riemann_zeta.tcc + mdp:/usr/include/c++/15/tr1/special_function_util.h + mdp:/usr/include/c++/15/tuple + mdp:/usr/include/c++/15/type_traits + mdp:/usr/include/c++/15/typeinfo + mdp:/usr/include/c++/15/unordered_map + mdp:/usr/include/c++/15/unordered_set + mdp:/usr/include/c++/15/utility + mdp:/usr/include/c++/15/variant + mdp:/usr/include/c++/15/vector + mdp:/usr/include/c++/15/version + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/atomic_word.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++allocator.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++config.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++locale.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/cpu_defines.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/ctype_base.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/ctype_inline.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/error_constants.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/gthr-default.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/gthr.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/messages_members.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/os_defines.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/time_members.h + mdp:/usr/include/ctype.h + mdp:/usr/include/endian.h + mdp:/usr/include/errno.h + mdp:/usr/include/features-time64.h + mdp:/usr/include/features.h + mdp:/usr/include/gnu/stubs-64.h + mdp:/usr/include/gnu/stubs.h + mdp:/usr/include/libintl.h + mdp:/usr/include/limits.h + mdp:/usr/include/linux/close_range.h + mdp:/usr/include/linux/errno.h + mdp:/usr/include/linux/limits.h + mdp:/usr/include/linux/posix_types.h + mdp:/usr/include/linux/sched/types.h + mdp:/usr/include/linux/stddef.h + mdp:/usr/include/linux/types.h + mdp:/usr/include/locale.h + mdp:/usr/include/pthread.h + mdp:/usr/include/qt6/QtCore/q17memory.h + mdp:/usr/include/qt6/QtCore/q20functional.h + mdp:/usr/include/qt6/QtCore/q20iterator.h + mdp:/usr/include/qt6/QtCore/q20memory.h + mdp:/usr/include/qt6/QtCore/q20type_traits.h + mdp:/usr/include/qt6/QtCore/q20utility.h + mdp:/usr/include/qt6/QtCore/q23type_traits.h + mdp:/usr/include/qt6/QtCore/q23utility.h + mdp:/usr/include/qt6/QtCore/qalgorithms.h + mdp:/usr/include/qt6/QtCore/qalloc.h + mdp:/usr/include/qt6/QtCore/qanystringview.h + mdp:/usr/include/qt6/QtCore/qarraydata.h + mdp:/usr/include/qt6/QtCore/qarraydataops.h + mdp:/usr/include/qt6/QtCore/qarraydatapointer.h + mdp:/usr/include/qt6/QtCore/qassert.h + mdp:/usr/include/qt6/QtCore/qatomic.h + mdp:/usr/include/qt6/QtCore/qatomic_cxx11.h + mdp:/usr/include/qt6/QtCore/qbasicatomic.h + mdp:/usr/include/qt6/QtCore/qbindingstorage.h + mdp:/usr/include/qt6/QtCore/qbytearray.h + mdp:/usr/include/qt6/QtCore/qbytearrayalgorithms.h + mdp:/usr/include/qt6/QtCore/qbytearraylist.h + mdp:/usr/include/qt6/QtCore/qbytearrayview.h + mdp:/usr/include/qt6/QtCore/qchar.h + mdp:/usr/include/qt6/QtCore/qcheckedint_impl.h + mdp:/usr/include/qt6/QtCore/qcompare.h + mdp:/usr/include/qt6/QtCore/qcompare_impl.h + mdp:/usr/include/qt6/QtCore/qcomparehelpers.h + mdp:/usr/include/qt6/QtCore/qcompilerdetection.h + mdp:/usr/include/qt6/QtCore/qconfig-64.h + mdp:/usr/include/qt6/QtCore/qconfig.h + mdp:/usr/include/qt6/QtCore/qconstructormacros.h + mdp:/usr/include/qt6/QtCore/qcontainerfwd.h + mdp:/usr/include/qt6/QtCore/qcontainerinfo.h + mdp:/usr/include/qt6/QtCore/qcontainertools_impl.h + mdp:/usr/include/qt6/QtCore/qcontiguouscache.h + mdp:/usr/include/qt6/QtCore/qdarwinhelpers.h + mdp:/usr/include/qt6/QtCore/qdatastream.h + mdp:/usr/include/qt6/QtCore/qdebug.h + mdp:/usr/include/qt6/QtCore/qendian.h + mdp:/usr/include/qt6/QtCore/qexceptionhandling.h + mdp:/usr/include/qt6/QtCore/qflags.h + mdp:/usr/include/qt6/QtCore/qfloat16.h + mdp:/usr/include/qt6/QtCore/qforeach.h + mdp:/usr/include/qt6/QtCore/qfunctionaltools_impl.h + mdp:/usr/include/qt6/QtCore/qfunctionpointer.h + mdp:/usr/include/qt6/QtCore/qgenericatomic.h + mdp:/usr/include/qt6/QtCore/qglobal.h + mdp:/usr/include/qt6/QtCore/qglobalstatic.h + mdp:/usr/include/qt6/QtCore/qhash.h + mdp:/usr/include/qt6/QtCore/qhashfunctions.h + mdp:/usr/include/qt6/QtCore/qiodevicebase.h + mdp:/usr/include/qt6/QtCore/qiterable.h + mdp:/usr/include/qt6/QtCore/qiterator.h + mdp:/usr/include/qt6/QtCore/qlatin1stringview.h + mdp:/usr/include/qt6/QtCore/qline.h + mdp:/usr/include/qt6/QtCore/qlist.h + mdp:/usr/include/qt6/QtCore/qlogging.h + mdp:/usr/include/qt6/QtCore/qmalloc.h + mdp:/usr/include/qt6/QtCore/qmap.h + mdp:/usr/include/qt6/QtCore/qmargins.h + mdp:/usr/include/qt6/QtCore/qmath.h + mdp:/usr/include/qt6/QtCore/qmetacontainer.h + mdp:/usr/include/qt6/QtCore/qmetatype.h + mdp:/usr/include/qt6/QtCore/qminmax.h + mdp:/usr/include/qt6/QtCore/qnamespace.h + mdp:/usr/include/qt6/QtCore/qnumeric.h + mdp:/usr/include/qt6/QtCore/qobject.h + mdp:/usr/include/qt6/QtCore/qobject_impl.h + mdp:/usr/include/qt6/QtCore/qobjectdefs.h + mdp:/usr/include/qt6/QtCore/qobjectdefs_impl.h + mdp:/usr/include/qt6/QtCore/qoverload.h + mdp:/usr/include/qt6/QtCore/qpair.h + mdp:/usr/include/qt6/QtCore/qpoint.h + mdp:/usr/include/qt6/QtCore/qprocessordetection.h + mdp:/usr/include/qt6/QtCore/qrect.h + mdp:/usr/include/qt6/QtCore/qrefcount.h + mdp:/usr/include/qt6/QtCore/qscopedpointer.h + mdp:/usr/include/qt6/QtCore/qscopeguard.h + mdp:/usr/include/qt6/QtCore/qset.h + mdp:/usr/include/qt6/QtCore/qshareddata.h + mdp:/usr/include/qt6/QtCore/qshareddata_impl.h + mdp:/usr/include/qt6/QtCore/qsharedpointer.h + mdp:/usr/include/qt6/QtCore/qsharedpointer_impl.h + mdp:/usr/include/qt6/QtCore/qsize.h + mdp:/usr/include/qt6/QtCore/qspan.h + mdp:/usr/include/qt6/QtCore/qstdlibdetection.h + mdp:/usr/include/qt6/QtCore/qstring.h + mdp:/usr/include/qt6/QtCore/qstringalgorithms.h + mdp:/usr/include/qt6/QtCore/qstringbuilder.h + mdp:/usr/include/qt6/QtCore/qstringconverter.h + mdp:/usr/include/qt6/QtCore/qstringconverter_base.h + mdp:/usr/include/qt6/QtCore/qstringfwd.h + mdp:/usr/include/qt6/QtCore/qstringlist.h + mdp:/usr/include/qt6/QtCore/qstringmatcher.h + mdp:/usr/include/qt6/QtCore/qstringtokenizer.h + mdp:/usr/include/qt6/QtCore/qstringview.h + mdp:/usr/include/qt6/QtCore/qswap.h + mdp:/usr/include/qt6/QtCore/qsysinfo.h + mdp:/usr/include/qt6/QtCore/qsystemdetection.h + mdp:/usr/include/qt6/QtCore/qtaggedpointer.h + mdp:/usr/include/qt6/QtCore/qtclasshelpermacros.h + mdp:/usr/include/qt6/QtCore/qtconfiginclude.h + mdp:/usr/include/qt6/QtCore/qtconfigmacros.h + mdp:/usr/include/qt6/QtCore/qtcore-config.h + mdp:/usr/include/qt6/QtCore/qtcoreexports.h + mdp:/usr/include/qt6/QtCore/qtcoreglobal.h + mdp:/usr/include/qt6/QtCore/qtdeprecationdefinitions.h + mdp:/usr/include/qt6/QtCore/qtdeprecationmarkers.h + mdp:/usr/include/qt6/QtCore/qtenvironmentvariables.h + mdp:/usr/include/qt6/QtCore/qtextstream.h + mdp:/usr/include/qt6/QtCore/qtformat_impl.h + mdp:/usr/include/qt6/QtCore/qtmetamacros.h + mdp:/usr/include/qt6/QtCore/qtnoop.h + mdp:/usr/include/qt6/QtCore/qtpreprocessorsupport.h + mdp:/usr/include/qt6/QtCore/qtresource.h + mdp:/usr/include/qt6/QtCore/qttranslation.h + mdp:/usr/include/qt6/QtCore/qttypetraits.h + mdp:/usr/include/qt6/QtCore/qtversion.h + mdp:/usr/include/qt6/QtCore/qtversionchecks.h + mdp:/usr/include/qt6/QtCore/qtypeinfo.h + mdp:/usr/include/qt6/QtCore/qtypes.h + mdp:/usr/include/qt6/QtCore/qutf8stringview.h + mdp:/usr/include/qt6/QtCore/qvariant.h + mdp:/usr/include/qt6/QtCore/qvarlengtharray.h + mdp:/usr/include/qt6/QtCore/qversiontagging.h + mdp:/usr/include/qt6/QtCore/qxptype_traits.h + mdp:/usr/include/qt6/QtCore/qyieldcpu.h + mdp:/usr/include/qt6/QtGui/qaction.h + mdp:/usr/include/qt6/QtGui/qbitmap.h + mdp:/usr/include/qt6/QtGui/qbrush.h + mdp:/usr/include/qt6/QtGui/qcolor.h + mdp:/usr/include/qt6/QtGui/qcursor.h + mdp:/usr/include/qt6/QtGui/qfont.h + mdp:/usr/include/qt6/QtGui/qfontinfo.h + mdp:/usr/include/qt6/QtGui/qfontmetrics.h + mdp:/usr/include/qt6/QtGui/qfontvariableaxis.h + mdp:/usr/include/qt6/QtGui/qicon.h + mdp:/usr/include/qt6/QtGui/qimage.h + mdp:/usr/include/qt6/QtGui/qkeysequence.h + mdp:/usr/include/qt6/QtGui/qpaintdevice.h + mdp:/usr/include/qt6/QtGui/qpalette.h + mdp:/usr/include/qt6/QtGui/qpixelformat.h + mdp:/usr/include/qt6/QtGui/qpixmap.h + mdp:/usr/include/qt6/QtGui/qpolygon.h + mdp:/usr/include/qt6/QtGui/qregion.h + mdp:/usr/include/qt6/QtGui/qrgb.h + mdp:/usr/include/qt6/QtGui/qrgba64.h + mdp:/usr/include/qt6/QtGui/qtgui-config.h + mdp:/usr/include/qt6/QtGui/qtguiexports.h + mdp:/usr/include/qt6/QtGui/qtguiglobal.h + mdp:/usr/include/qt6/QtGui/qtransform.h + mdp:/usr/include/qt6/QtGui/qwindowdefs.h + mdp:/usr/include/qt6/QtWidgets/QDialog + mdp:/usr/include/qt6/QtWidgets/qdialog.h + mdp:/usr/include/qt6/QtWidgets/qsizepolicy.h + mdp:/usr/include/qt6/QtWidgets/qtwidgets-config.h + mdp:/usr/include/qt6/QtWidgets/qtwidgetsexports.h + mdp:/usr/include/qt6/QtWidgets/qtwidgetsglobal.h + mdp:/usr/include/qt6/QtWidgets/qwidget.h + mdp:/usr/include/sched.h + mdp:/usr/include/stdc-predef.h + mdp:/usr/include/stdint.h + mdp:/usr/include/stdio.h + mdp:/usr/include/stdlib.h + mdp:/usr/include/string.h + mdp:/usr/include/strings.h + mdp:/usr/include/sys/cdefs.h + mdp:/usr/include/sys/select.h + mdp:/usr/include/sys/single_threaded.h + mdp:/usr/include/sys/syscall.h + mdp:/usr/include/sys/types.h + mdp:/usr/include/syscall.h + mdp:/usr/include/time.h + mdp:/usr/include/unistd.h + mdp:/usr/include/wchar.h + mdp:/usr/include/wctype.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stdarg.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stdbool.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stddef.h +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/office_preview.cpp +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/thumbnail_generator_dialog.h + mmc:Q_OBJECT + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/kassetmanagerqt_autogen/moc_predefs.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/thumbnail_generator_dialog.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/thumbnail_generator_worker.h + mdp:/usr/include/alloca.h + mdp:/usr/include/asm-generic/bitsperlong.h + mdp:/usr/include/asm-generic/errno-base.h + mdp:/usr/include/asm-generic/errno.h + mdp:/usr/include/asm-generic/int-ll64.h + mdp:/usr/include/asm-generic/posix_types.h + mdp:/usr/include/asm-generic/types.h + mdp:/usr/include/asm/bitsperlong.h + mdp:/usr/include/asm/errno.h + mdp:/usr/include/asm/posix_types.h + mdp:/usr/include/asm/posix_types_64.h + mdp:/usr/include/asm/types.h + mdp:/usr/include/asm/unistd.h + mdp:/usr/include/asm/unistd_64.h + mdp:/usr/include/assert.h + mdp:/usr/include/bits/atomic_wide_counter.h + mdp:/usr/include/bits/byteswap.h + mdp:/usr/include/bits/confname.h + mdp:/usr/include/bits/cpu-set.h + mdp:/usr/include/bits/endian.h + mdp:/usr/include/bits/endianness.h + mdp:/usr/include/bits/environments.h + mdp:/usr/include/bits/errno.h + mdp:/usr/include/bits/floatn-common.h + mdp:/usr/include/bits/floatn.h + mdp:/usr/include/bits/getopt_core.h + mdp:/usr/include/bits/getopt_posix.h + mdp:/usr/include/bits/libc-header-start.h + mdp:/usr/include/bits/local_lim.h + mdp:/usr/include/bits/locale.h + mdp:/usr/include/bits/long-double.h + mdp:/usr/include/bits/posix1_lim.h + mdp:/usr/include/bits/posix2_lim.h + mdp:/usr/include/bits/posix_opt.h + mdp:/usr/include/bits/pthread_stack_min-dynamic.h + mdp:/usr/include/bits/pthreadtypes-arch.h + mdp:/usr/include/bits/pthreadtypes.h + mdp:/usr/include/bits/sched.h + mdp:/usr/include/bits/select.h + mdp:/usr/include/bits/semaphore.h + mdp:/usr/include/bits/setjmp.h + mdp:/usr/include/bits/stdint-intn.h + mdp:/usr/include/bits/stdint-least.h + mdp:/usr/include/bits/stdint-uintn.h + mdp:/usr/include/bits/stdio_lim.h + mdp:/usr/include/bits/stdlib-float.h + mdp:/usr/include/bits/struct_mutex.h + mdp:/usr/include/bits/struct_rwlock.h + mdp:/usr/include/bits/syscall.h + mdp:/usr/include/bits/thread-shared-types.h + mdp:/usr/include/bits/time.h + mdp:/usr/include/bits/time64.h + mdp:/usr/include/bits/timesize.h + mdp:/usr/include/bits/timex.h + mdp:/usr/include/bits/types.h + mdp:/usr/include/bits/types/FILE.h + mdp:/usr/include/bits/types/__FILE.h + mdp:/usr/include/bits/types/__fpos64_t.h + mdp:/usr/include/bits/types/__fpos_t.h + mdp:/usr/include/bits/types/__locale_t.h + mdp:/usr/include/bits/types/__mbstate_t.h + mdp:/usr/include/bits/types/__sigset_t.h + mdp:/usr/include/bits/types/clock_t.h + mdp:/usr/include/bits/types/clockid_t.h + mdp:/usr/include/bits/types/cookie_io_functions_t.h + mdp:/usr/include/bits/types/error_t.h + mdp:/usr/include/bits/types/locale_t.h + mdp:/usr/include/bits/types/mbstate_t.h + mdp:/usr/include/bits/types/sigset_t.h + mdp:/usr/include/bits/types/struct_FILE.h + mdp:/usr/include/bits/types/struct___jmp_buf_tag.h + mdp:/usr/include/bits/types/struct_itimerspec.h + mdp:/usr/include/bits/types/struct_sched_param.h + mdp:/usr/include/bits/types/struct_timespec.h + mdp:/usr/include/bits/types/struct_timeval.h + mdp:/usr/include/bits/types/struct_tm.h + mdp:/usr/include/bits/types/time_t.h + mdp:/usr/include/bits/types/timer_t.h + mdp:/usr/include/bits/types/wint_t.h + mdp:/usr/include/bits/typesizes.h + mdp:/usr/include/bits/uintn-identity.h + mdp:/usr/include/bits/uio_lim.h + mdp:/usr/include/bits/unistd_ext.h + mdp:/usr/include/bits/waitflags.h + mdp:/usr/include/bits/waitstatus.h + mdp:/usr/include/bits/wchar.h + mdp:/usr/include/bits/wctype-wchar.h + mdp:/usr/include/bits/wordsize.h + mdp:/usr/include/bits/xopen_lim.h + mdp:/usr/include/c++/15/algorithm + mdp:/usr/include/c++/15/array + mdp:/usr/include/c++/15/atomic + mdp:/usr/include/c++/15/backward/auto_ptr.h + mdp:/usr/include/c++/15/backward/binders.h + mdp:/usr/include/c++/15/bit + mdp:/usr/include/c++/15/bits/algorithmfwd.h + mdp:/usr/include/c++/15/bits/align.h + mdp:/usr/include/c++/15/bits/alloc_traits.h + mdp:/usr/include/c++/15/bits/allocated_ptr.h + mdp:/usr/include/c++/15/bits/allocator.h + mdp:/usr/include/c++/15/bits/atomic_base.h + mdp:/usr/include/c++/15/bits/atomic_futex.h + mdp:/usr/include/c++/15/bits/atomic_lockfree_defines.h + mdp:/usr/include/c++/15/bits/atomic_timed_wait.h + mdp:/usr/include/c++/15/bits/atomic_wait.h + mdp:/usr/include/c++/15/bits/basic_ios.h + mdp:/usr/include/c++/15/bits/basic_ios.tcc + mdp:/usr/include/c++/15/bits/basic_string.h + mdp:/usr/include/c++/15/bits/basic_string.tcc + mdp:/usr/include/c++/15/bits/char_traits.h + mdp:/usr/include/c++/15/bits/charconv.h + mdp:/usr/include/c++/15/bits/chrono.h + mdp:/usr/include/c++/15/bits/chrono_io.h + mdp:/usr/include/c++/15/bits/codecvt.h + mdp:/usr/include/c++/15/bits/concept_check.h + mdp:/usr/include/c++/15/bits/cpp_type_traits.h + mdp:/usr/include/c++/15/bits/cxxabi_forced.h + mdp:/usr/include/c++/15/bits/cxxabi_init_exception.h + mdp:/usr/include/c++/15/bits/enable_special_members.h + mdp:/usr/include/c++/15/bits/erase_if.h + mdp:/usr/include/c++/15/bits/exception.h + mdp:/usr/include/c++/15/bits/exception_defines.h + mdp:/usr/include/c++/15/bits/exception_ptr.h + mdp:/usr/include/c++/15/bits/functexcept.h + mdp:/usr/include/c++/15/bits/functional_hash.h + mdp:/usr/include/c++/15/bits/hash_bytes.h + mdp:/usr/include/c++/15/bits/hashtable.h + mdp:/usr/include/c++/15/bits/hashtable_policy.h + mdp:/usr/include/c++/15/bits/invoke.h + mdp:/usr/include/c++/15/bits/ios_base.h + mdp:/usr/include/c++/15/bits/istream.tcc + mdp:/usr/include/c++/15/bits/iterator_concepts.h + mdp:/usr/include/c++/15/bits/list.tcc + mdp:/usr/include/c++/15/bits/locale_classes.h + mdp:/usr/include/c++/15/bits/locale_classes.tcc + mdp:/usr/include/c++/15/bits/locale_conv.h + mdp:/usr/include/c++/15/bits/locale_facets.h + mdp:/usr/include/c++/15/bits/locale_facets.tcc + mdp:/usr/include/c++/15/bits/locale_facets_nonio.h + mdp:/usr/include/c++/15/bits/locale_facets_nonio.tcc + mdp:/usr/include/c++/15/bits/localefwd.h + mdp:/usr/include/c++/15/bits/max_size_type.h + mdp:/usr/include/c++/15/bits/memory_resource.h + mdp:/usr/include/c++/15/bits/memoryfwd.h + mdp:/usr/include/c++/15/bits/move.h + mdp:/usr/include/c++/15/bits/nested_exception.h + mdp:/usr/include/c++/15/bits/new_allocator.h + mdp:/usr/include/c++/15/bits/node_handle.h + mdp:/usr/include/c++/15/bits/ostream.h + mdp:/usr/include/c++/15/bits/ostream.tcc + mdp:/usr/include/c++/15/bits/ostream_insert.h + mdp:/usr/include/c++/15/bits/parse_numbers.h + mdp:/usr/include/c++/15/bits/postypes.h + mdp:/usr/include/c++/15/bits/predefined_ops.h + mdp:/usr/include/c++/15/bits/ptr_traits.h + mdp:/usr/include/c++/15/bits/quoted_string.h + mdp:/usr/include/c++/15/bits/range_access.h + mdp:/usr/include/c++/15/bits/ranges_algo.h + mdp:/usr/include/c++/15/bits/ranges_algobase.h + mdp:/usr/include/c++/15/bits/ranges_base.h + mdp:/usr/include/c++/15/bits/ranges_cmp.h + mdp:/usr/include/c++/15/bits/ranges_uninitialized.h + mdp:/usr/include/c++/15/bits/ranges_util.h + mdp:/usr/include/c++/15/bits/refwrap.h + mdp:/usr/include/c++/15/bits/requires_hosted.h + mdp:/usr/include/c++/15/bits/semaphore_base.h + mdp:/usr/include/c++/15/bits/shared_ptr.h + mdp:/usr/include/c++/15/bits/shared_ptr_atomic.h + mdp:/usr/include/c++/15/bits/shared_ptr_base.h + mdp:/usr/include/c++/15/bits/specfun.h + mdp:/usr/include/c++/15/bits/sstream.tcc + mdp:/usr/include/c++/15/bits/std_abs.h + mdp:/usr/include/c++/15/bits/std_function.h + mdp:/usr/include/c++/15/bits/std_mutex.h + mdp:/usr/include/c++/15/bits/std_thread.h + mdp:/usr/include/c++/15/bits/stl_algo.h + mdp:/usr/include/c++/15/bits/stl_algobase.h + mdp:/usr/include/c++/15/bits/stl_bvector.h + mdp:/usr/include/c++/15/bits/stl_construct.h + mdp:/usr/include/c++/15/bits/stl_function.h + mdp:/usr/include/c++/15/bits/stl_heap.h + mdp:/usr/include/c++/15/bits/stl_iterator.h + mdp:/usr/include/c++/15/bits/stl_iterator_base_funcs.h + mdp:/usr/include/c++/15/bits/stl_iterator_base_types.h + mdp:/usr/include/c++/15/bits/stl_list.h + mdp:/usr/include/c++/15/bits/stl_map.h + mdp:/usr/include/c++/15/bits/stl_multimap.h + mdp:/usr/include/c++/15/bits/stl_multiset.h + mdp:/usr/include/c++/15/bits/stl_numeric.h + mdp:/usr/include/c++/15/bits/stl_pair.h + mdp:/usr/include/c++/15/bits/stl_raw_storage_iter.h + mdp:/usr/include/c++/15/bits/stl_relops.h + mdp:/usr/include/c++/15/bits/stl_set.h + mdp:/usr/include/c++/15/bits/stl_tempbuf.h + mdp:/usr/include/c++/15/bits/stl_tree.h + mdp:/usr/include/c++/15/bits/stl_uninitialized.h + mdp:/usr/include/c++/15/bits/stl_vector.h + mdp:/usr/include/c++/15/bits/stream_iterator.h + mdp:/usr/include/c++/15/bits/streambuf.tcc + mdp:/usr/include/c++/15/bits/streambuf_iterator.h + mdp:/usr/include/c++/15/bits/string_view.tcc + mdp:/usr/include/c++/15/bits/stringfwd.h + mdp:/usr/include/c++/15/bits/this_thread_sleep.h + mdp:/usr/include/c++/15/bits/uniform_int_dist.h + mdp:/usr/include/c++/15/bits/unique_lock.h + mdp:/usr/include/c++/15/bits/unique_ptr.h + mdp:/usr/include/c++/15/bits/unordered_map.h + mdp:/usr/include/c++/15/bits/unordered_set.h + mdp:/usr/include/c++/15/bits/uses_allocator.h + mdp:/usr/include/c++/15/bits/uses_allocator_args.h + mdp:/usr/include/c++/15/bits/utility.h + mdp:/usr/include/c++/15/bits/vector.tcc + mdp:/usr/include/c++/15/bits/version.h + mdp:/usr/include/c++/15/cassert + mdp:/usr/include/c++/15/cctype + mdp:/usr/include/c++/15/cerrno + mdp:/usr/include/c++/15/charconv + mdp:/usr/include/c++/15/chrono + mdp:/usr/include/c++/15/climits + mdp:/usr/include/c++/15/clocale + mdp:/usr/include/c++/15/cmath + mdp:/usr/include/c++/15/compare + mdp:/usr/include/c++/15/concepts + mdp:/usr/include/c++/15/condition_variable + mdp:/usr/include/c++/15/cstddef + mdp:/usr/include/c++/15/cstdint + mdp:/usr/include/c++/15/cstdio + mdp:/usr/include/c++/15/cstdlib + mdp:/usr/include/c++/15/cstring + mdp:/usr/include/c++/15/ctime + mdp:/usr/include/c++/15/cwchar + mdp:/usr/include/c++/15/cwctype + mdp:/usr/include/c++/15/debug/assertions.h + mdp:/usr/include/c++/15/debug/debug.h + mdp:/usr/include/c++/15/exception + mdp:/usr/include/c++/15/ext/aligned_buffer.h + mdp:/usr/include/c++/15/ext/alloc_traits.h + mdp:/usr/include/c++/15/ext/atomicity.h + mdp:/usr/include/c++/15/ext/concurrence.h + mdp:/usr/include/c++/15/ext/numeric_traits.h + mdp:/usr/include/c++/15/ext/string_conversions.h + mdp:/usr/include/c++/15/ext/type_traits.h + mdp:/usr/include/c++/15/format + mdp:/usr/include/c++/15/functional + mdp:/usr/include/c++/15/future + mdp:/usr/include/c++/15/initializer_list + mdp:/usr/include/c++/15/iomanip + mdp:/usr/include/c++/15/ios + mdp:/usr/include/c++/15/iosfwd + mdp:/usr/include/c++/15/istream + mdp:/usr/include/c++/15/iterator + mdp:/usr/include/c++/15/limits + mdp:/usr/include/c++/15/list + mdp:/usr/include/c++/15/locale + mdp:/usr/include/c++/15/map + mdp:/usr/include/c++/15/memory + mdp:/usr/include/c++/15/mutex + mdp:/usr/include/c++/15/new + mdp:/usr/include/c++/15/numeric + mdp:/usr/include/c++/15/optional + mdp:/usr/include/c++/15/ostream + mdp:/usr/include/c++/15/pstl/execution_defs.h + mdp:/usr/include/c++/15/pstl/glue_numeric_defs.h + mdp:/usr/include/c++/15/pstl/pstl_config.h + mdp:/usr/include/c++/15/ratio + mdp:/usr/include/c++/15/semaphore + mdp:/usr/include/c++/15/set + mdp:/usr/include/c++/15/sstream + mdp:/usr/include/c++/15/stdexcept + mdp:/usr/include/c++/15/stop_token + mdp:/usr/include/c++/15/streambuf + mdp:/usr/include/c++/15/string + mdp:/usr/include/c++/15/string_view + mdp:/usr/include/c++/15/system_error + mdp:/usr/include/c++/15/tr1/bessel_function.tcc + mdp:/usr/include/c++/15/tr1/beta_function.tcc + mdp:/usr/include/c++/15/tr1/ell_integral.tcc + mdp:/usr/include/c++/15/tr1/exp_integral.tcc + mdp:/usr/include/c++/15/tr1/gamma.tcc + mdp:/usr/include/c++/15/tr1/hypergeometric.tcc + mdp:/usr/include/c++/15/tr1/legendre_function.tcc + mdp:/usr/include/c++/15/tr1/modified_bessel_func.tcc + mdp:/usr/include/c++/15/tr1/poly_hermite.tcc + mdp:/usr/include/c++/15/tr1/poly_laguerre.tcc + mdp:/usr/include/c++/15/tr1/riemann_zeta.tcc + mdp:/usr/include/c++/15/tr1/special_function_util.h + mdp:/usr/include/c++/15/tuple + mdp:/usr/include/c++/15/type_traits + mdp:/usr/include/c++/15/typeinfo + mdp:/usr/include/c++/15/unordered_map + mdp:/usr/include/c++/15/unordered_set + mdp:/usr/include/c++/15/utility + mdp:/usr/include/c++/15/variant + mdp:/usr/include/c++/15/vector + mdp:/usr/include/c++/15/version + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/atomic_word.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++allocator.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++config.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++locale.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/cpu_defines.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/ctype_base.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/ctype_inline.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/error_constants.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/gthr-default.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/gthr.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/messages_members.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/os_defines.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/time_members.h + mdp:/usr/include/ctype.h + mdp:/usr/include/endian.h + mdp:/usr/include/errno.h + mdp:/usr/include/features-time64.h + mdp:/usr/include/features.h + mdp:/usr/include/gnu/stubs-64.h + mdp:/usr/include/gnu/stubs.h + mdp:/usr/include/libintl.h + mdp:/usr/include/limits.h + mdp:/usr/include/linux/close_range.h + mdp:/usr/include/linux/errno.h + mdp:/usr/include/linux/limits.h + mdp:/usr/include/linux/posix_types.h + mdp:/usr/include/linux/sched/types.h + mdp:/usr/include/linux/stddef.h + mdp:/usr/include/linux/types.h + mdp:/usr/include/locale.h + mdp:/usr/include/pthread.h + mdp:/usr/include/qt6/QtCore/QAtomicInt + mdp:/usr/include/qt6/QtCore/QList + mdp:/usr/include/qt6/QtCore/QMutex + mdp:/usr/include/qt6/QtCore/QObject + mdp:/usr/include/qt6/QtCore/QRect + mdp:/usr/include/qt6/QtCore/QSize + mdp:/usr/include/qt6/QtCore/QSizeF + mdp:/usr/include/qt6/QtCore/QStringList + mdp:/usr/include/qt6/QtCore/QThread + mdp:/usr/include/qt6/QtCore/QThreadPool + mdp:/usr/include/qt6/QtCore/QVector + mdp:/usr/include/qt6/QtCore/q17memory.h + mdp:/usr/include/qt6/QtCore/q20functional.h + mdp:/usr/include/qt6/QtCore/q20iterator.h + mdp:/usr/include/qt6/QtCore/q20memory.h + mdp:/usr/include/qt6/QtCore/q20type_traits.h + mdp:/usr/include/qt6/QtCore/q20utility.h + mdp:/usr/include/qt6/QtCore/q23type_traits.h + mdp:/usr/include/qt6/QtCore/q23utility.h + mdp:/usr/include/qt6/QtCore/qabstracteventdispatcher.h + mdp:/usr/include/qt6/QtCore/qalgorithms.h + mdp:/usr/include/qt6/QtCore/qalloc.h + mdp:/usr/include/qt6/QtCore/qanystringview.h + mdp:/usr/include/qt6/QtCore/qarraydata.h + mdp:/usr/include/qt6/QtCore/qarraydataops.h + mdp:/usr/include/qt6/QtCore/qarraydatapointer.h + mdp:/usr/include/qt6/QtCore/qassert.h + mdp:/usr/include/qt6/QtCore/qatomic.h + mdp:/usr/include/qt6/QtCore/qatomic_cxx11.h + mdp:/usr/include/qt6/QtCore/qbasicatomic.h + mdp:/usr/include/qt6/QtCore/qbasictimer.h + mdp:/usr/include/qt6/QtCore/qbindingstorage.h + mdp:/usr/include/qt6/QtCore/qbytearray.h + mdp:/usr/include/qt6/QtCore/qbytearrayalgorithms.h + mdp:/usr/include/qt6/QtCore/qbytearraylist.h + mdp:/usr/include/qt6/QtCore/qbytearrayview.h + mdp:/usr/include/qt6/QtCore/qchar.h + mdp:/usr/include/qt6/QtCore/qcheckedint_impl.h + mdp:/usr/include/qt6/QtCore/qcompare.h + mdp:/usr/include/qt6/QtCore/qcompare_impl.h + mdp:/usr/include/qt6/QtCore/qcomparehelpers.h + mdp:/usr/include/qt6/QtCore/qcompilerdetection.h + mdp:/usr/include/qt6/QtCore/qconfig-64.h + mdp:/usr/include/qt6/QtCore/qconfig.h + mdp:/usr/include/qt6/QtCore/qconstructormacros.h + mdp:/usr/include/qt6/QtCore/qcontainerfwd.h + mdp:/usr/include/qt6/QtCore/qcontainerinfo.h + mdp:/usr/include/qt6/QtCore/qcontainertools_impl.h + mdp:/usr/include/qt6/QtCore/qcontiguouscache.h + mdp:/usr/include/qt6/QtCore/qcoreapplication.h + mdp:/usr/include/qt6/QtCore/qcoreapplication_platform.h + mdp:/usr/include/qt6/QtCore/qcoreevent.h + mdp:/usr/include/qt6/QtCore/qdarwinhelpers.h + mdp:/usr/include/qt6/QtCore/qdatastream.h + mdp:/usr/include/qt6/QtCore/qdeadlinetimer.h + mdp:/usr/include/qt6/QtCore/qdebug.h + mdp:/usr/include/qt6/QtCore/qendian.h + mdp:/usr/include/qt6/QtCore/qeventloop.h + mdp:/usr/include/qt6/QtCore/qexceptionhandling.h + mdp:/usr/include/qt6/QtCore/qflags.h + mdp:/usr/include/qt6/QtCore/qfloat16.h + mdp:/usr/include/qt6/QtCore/qforeach.h + mdp:/usr/include/qt6/QtCore/qfunctionaltools_impl.h + mdp:/usr/include/qt6/QtCore/qfunctionpointer.h + mdp:/usr/include/qt6/QtCore/qgenericatomic.h + mdp:/usr/include/qt6/QtCore/qglobal.h + mdp:/usr/include/qt6/QtCore/qglobalstatic.h + mdp:/usr/include/qt6/QtCore/qhash.h + mdp:/usr/include/qt6/QtCore/qhashfunctions.h + mdp:/usr/include/qt6/QtCore/qiodevice.h + mdp:/usr/include/qt6/QtCore/qiodevicebase.h + mdp:/usr/include/qt6/QtCore/qiterable.h + mdp:/usr/include/qt6/QtCore/qiterator.h + mdp:/usr/include/qt6/QtCore/qlatin1stringview.h + mdp:/usr/include/qt6/QtCore/qline.h + mdp:/usr/include/qt6/QtCore/qlist.h + mdp:/usr/include/qt6/QtCore/qlocale.h + mdp:/usr/include/qt6/QtCore/qlogging.h + mdp:/usr/include/qt6/QtCore/qmalloc.h + mdp:/usr/include/qt6/QtCore/qmap.h + mdp:/usr/include/qt6/QtCore/qmargins.h + mdp:/usr/include/qt6/QtCore/qmath.h + mdp:/usr/include/qt6/QtCore/qmetacontainer.h + mdp:/usr/include/qt6/QtCore/qmetatype.h + mdp:/usr/include/qt6/QtCore/qminmax.h + mdp:/usr/include/qt6/QtCore/qmutex.h + mdp:/usr/include/qt6/QtCore/qnamespace.h + mdp:/usr/include/qt6/QtCore/qnativeinterface.h + mdp:/usr/include/qt6/QtCore/qnumeric.h + mdp:/usr/include/qt6/QtCore/qobject.h + mdp:/usr/include/qt6/QtCore/qobject_impl.h + mdp:/usr/include/qt6/QtCore/qobjectdefs.h + mdp:/usr/include/qt6/QtCore/qobjectdefs_impl.h + mdp:/usr/include/qt6/QtCore/qoverload.h + mdp:/usr/include/qt6/QtCore/qpair.h + mdp:/usr/include/qt6/QtCore/qpoint.h + mdp:/usr/include/qt6/QtCore/qprocessordetection.h + mdp:/usr/include/qt6/QtCore/qrect.h + mdp:/usr/include/qt6/QtCore/qrefcount.h + mdp:/usr/include/qt6/QtCore/qrunnable.h + mdp:/usr/include/qt6/QtCore/qscopedpointer.h + mdp:/usr/include/qt6/QtCore/qscopeguard.h + mdp:/usr/include/qt6/QtCore/qset.h + mdp:/usr/include/qt6/QtCore/qshareddata.h + mdp:/usr/include/qt6/QtCore/qshareddata_impl.h + mdp:/usr/include/qt6/QtCore/qsharedpointer.h + mdp:/usr/include/qt6/QtCore/qsharedpointer_impl.h + mdp:/usr/include/qt6/QtCore/qsize.h + mdp:/usr/include/qt6/QtCore/qspan.h + mdp:/usr/include/qt6/QtCore/qstdlibdetection.h + mdp:/usr/include/qt6/QtCore/qstring.h + mdp:/usr/include/qt6/QtCore/qstringalgorithms.h + mdp:/usr/include/qt6/QtCore/qstringbuilder.h + mdp:/usr/include/qt6/QtCore/qstringconverter.h + mdp:/usr/include/qt6/QtCore/qstringconverter_base.h + mdp:/usr/include/qt6/QtCore/qstringfwd.h + mdp:/usr/include/qt6/QtCore/qstringlist.h + mdp:/usr/include/qt6/QtCore/qstringmatcher.h + mdp:/usr/include/qt6/QtCore/qstringtokenizer.h + mdp:/usr/include/qt6/QtCore/qstringview.h + mdp:/usr/include/qt6/QtCore/qswap.h + mdp:/usr/include/qt6/QtCore/qsysinfo.h + mdp:/usr/include/qt6/QtCore/qsystemdetection.h + mdp:/usr/include/qt6/QtCore/qtaggedpointer.h + mdp:/usr/include/qt6/QtCore/qtclasshelpermacros.h + mdp:/usr/include/qt6/QtCore/qtconfiginclude.h + mdp:/usr/include/qt6/QtCore/qtconfigmacros.h + mdp:/usr/include/qt6/QtCore/qtcore-config.h + mdp:/usr/include/qt6/QtCore/qtcoreexports.h + mdp:/usr/include/qt6/QtCore/qtcoreglobal.h + mdp:/usr/include/qt6/QtCore/qtdeprecationdefinitions.h + mdp:/usr/include/qt6/QtCore/qtdeprecationmarkers.h + mdp:/usr/include/qt6/QtCore/qtenvironmentvariables.h + mdp:/usr/include/qt6/QtCore/qtextstream.h + mdp:/usr/include/qt6/QtCore/qtformat_impl.h + mdp:/usr/include/qt6/QtCore/qthread.h + mdp:/usr/include/qt6/QtCore/qthreadpool.h + mdp:/usr/include/qt6/QtCore/qtmetamacros.h + mdp:/usr/include/qt6/QtCore/qtnoop.h + mdp:/usr/include/qt6/QtCore/qtpreprocessorsupport.h + mdp:/usr/include/qt6/QtCore/qtresource.h + mdp:/usr/include/qt6/QtCore/qtsan_impl.h + mdp:/usr/include/qt6/QtCore/qttranslation.h + mdp:/usr/include/qt6/QtCore/qttypetraits.h + mdp:/usr/include/qt6/QtCore/qtversion.h + mdp:/usr/include/qt6/QtCore/qtversionchecks.h + mdp:/usr/include/qt6/QtCore/qtypeinfo.h + mdp:/usr/include/qt6/QtCore/qtypes.h + mdp:/usr/include/qt6/QtCore/qurl.h + mdp:/usr/include/qt6/QtCore/qutf8stringview.h + mdp:/usr/include/qt6/QtCore/qvariant.h + mdp:/usr/include/qt6/QtCore/qvarlengtharray.h + mdp:/usr/include/qt6/QtCore/qvector.h + mdp:/usr/include/qt6/QtCore/qversiontagging.h + mdp:/usr/include/qt6/QtCore/qxptype_traits.h + mdp:/usr/include/qt6/QtCore/qyieldcpu.h + mdp:/usr/include/qt6/QtGui/QTransform + mdp:/usr/include/qt6/QtGui/qabstracttextdocumentlayout.h + mdp:/usr/include/qt6/QtGui/qaction.h + mdp:/usr/include/qt6/QtGui/qbitmap.h + mdp:/usr/include/qt6/QtGui/qbrush.h + mdp:/usr/include/qt6/QtGui/qcolor.h + mdp:/usr/include/qt6/QtGui/qcursor.h + mdp:/usr/include/qt6/QtGui/qevent.h + mdp:/usr/include/qt6/QtGui/qeventpoint.h + mdp:/usr/include/qt6/QtGui/qfont.h + mdp:/usr/include/qt6/QtGui/qfontdatabase.h + mdp:/usr/include/qt6/QtGui/qfontinfo.h + mdp:/usr/include/qt6/QtGui/qfontmetrics.h + mdp:/usr/include/qt6/QtGui/qfontvariableaxis.h + mdp:/usr/include/qt6/QtGui/qglyphrun.h + mdp:/usr/include/qt6/QtGui/qguiapplication.h + mdp:/usr/include/qt6/QtGui/qguiapplication_platform.h + mdp:/usr/include/qt6/QtGui/qicon.h + mdp:/usr/include/qt6/QtGui/qimage.h + mdp:/usr/include/qt6/QtGui/qinputdevice.h + mdp:/usr/include/qt6/QtGui/qinputmethod.h + mdp:/usr/include/qt6/QtGui/qkeysequence.h + mdp:/usr/include/qt6/QtGui/qpaintdevice.h + mdp:/usr/include/qt6/QtGui/qpalette.h + mdp:/usr/include/qt6/QtGui/qpen.h + mdp:/usr/include/qt6/QtGui/qpicture.h + mdp:/usr/include/qt6/QtGui/qpixelformat.h + mdp:/usr/include/qt6/QtGui/qpixmap.h + mdp:/usr/include/qt6/QtGui/qpointingdevice.h + mdp:/usr/include/qt6/QtGui/qpolygon.h + mdp:/usr/include/qt6/QtGui/qrawfont.h + mdp:/usr/include/qt6/QtGui/qregion.h + mdp:/usr/include/qt6/QtGui/qrgb.h + mdp:/usr/include/qt6/QtGui/qrgba64.h + mdp:/usr/include/qt6/QtGui/qscreen.h + mdp:/usr/include/qt6/QtGui/qscreen_platform.h + mdp:/usr/include/qt6/QtGui/qtextcursor.h + mdp:/usr/include/qt6/QtGui/qtextdocument.h + mdp:/usr/include/qt6/QtGui/qtextformat.h + mdp:/usr/include/qt6/QtGui/qtextlayout.h + mdp:/usr/include/qt6/QtGui/qtextoption.h + mdp:/usr/include/qt6/QtGui/qtgui-config.h + mdp:/usr/include/qt6/QtGui/qtguiexports.h + mdp:/usr/include/qt6/QtGui/qtguiglobal.h + mdp:/usr/include/qt6/QtGui/qtransform.h + mdp:/usr/include/qt6/QtGui/qvector2d.h + mdp:/usr/include/qt6/QtGui/qvectornd.h + mdp:/usr/include/qt6/QtGui/qwindowdefs.h + mdp:/usr/include/qt6/QtWidgets/QDialog + mdp:/usr/include/qt6/QtWidgets/QLabel + mdp:/usr/include/qt6/QtWidgets/QPlainTextEdit + mdp:/usr/include/qt6/QtWidgets/QProgressBar + mdp:/usr/include/qt6/QtWidgets/QPushButton + mdp:/usr/include/qt6/QtWidgets/qabstractbutton.h + mdp:/usr/include/qt6/QtWidgets/qabstractscrollarea.h + mdp:/usr/include/qt6/QtWidgets/qdialog.h + mdp:/usr/include/qt6/QtWidgets/qframe.h + mdp:/usr/include/qt6/QtWidgets/qlabel.h + mdp:/usr/include/qt6/QtWidgets/qplaintextedit.h + mdp:/usr/include/qt6/QtWidgets/qprogressbar.h + mdp:/usr/include/qt6/QtWidgets/qpushbutton.h + mdp:/usr/include/qt6/QtWidgets/qsizepolicy.h + mdp:/usr/include/qt6/QtWidgets/qtextedit.h + mdp:/usr/include/qt6/QtWidgets/qtwidgets-config.h + mdp:/usr/include/qt6/QtWidgets/qtwidgetsexports.h + mdp:/usr/include/qt6/QtWidgets/qtwidgetsglobal.h + mdp:/usr/include/qt6/QtWidgets/qwidget.h + mdp:/usr/include/sched.h + mdp:/usr/include/semaphore.h + mdp:/usr/include/stdc-predef.h + mdp:/usr/include/stdint.h + mdp:/usr/include/stdio.h + mdp:/usr/include/stdlib.h + mdp:/usr/include/string.h + mdp:/usr/include/strings.h + mdp:/usr/include/sys/cdefs.h + mdp:/usr/include/sys/select.h + mdp:/usr/include/sys/single_threaded.h + mdp:/usr/include/sys/syscall.h + mdp:/usr/include/sys/time.h + mdp:/usr/include/sys/types.h + mdp:/usr/include/syscall.h + mdp:/usr/include/time.h + mdp:/usr/include/unistd.h + mdp:/usr/include/wchar.h + mdp:/usr/include/wctype.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stdarg.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stdbool.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stddef.h +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/annotation_layer.h + mmc:Q_OBJECT + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/kassetmanagerqt_autogen/moc_predefs.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/annotation_items.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/annotation_layer.h + mdp:/usr/include/alloca.h + mdp:/usr/include/asm-generic/bitsperlong.h + mdp:/usr/include/asm-generic/errno-base.h + mdp:/usr/include/asm-generic/errno.h + mdp:/usr/include/asm-generic/int-ll64.h + mdp:/usr/include/asm-generic/posix_types.h + mdp:/usr/include/asm-generic/types.h + mdp:/usr/include/asm/bitsperlong.h + mdp:/usr/include/asm/errno.h + mdp:/usr/include/asm/posix_types.h + mdp:/usr/include/asm/posix_types_64.h + mdp:/usr/include/asm/types.h + mdp:/usr/include/asm/unistd.h + mdp:/usr/include/asm/unistd_64.h + mdp:/usr/include/assert.h + mdp:/usr/include/bits/atomic_wide_counter.h + mdp:/usr/include/bits/byteswap.h + mdp:/usr/include/bits/confname.h + mdp:/usr/include/bits/cpu-set.h + mdp:/usr/include/bits/endian.h + mdp:/usr/include/bits/endianness.h + mdp:/usr/include/bits/environments.h + mdp:/usr/include/bits/errno.h + mdp:/usr/include/bits/floatn-common.h + mdp:/usr/include/bits/floatn.h + mdp:/usr/include/bits/getopt_core.h + mdp:/usr/include/bits/getopt_posix.h + mdp:/usr/include/bits/libc-header-start.h + mdp:/usr/include/bits/local_lim.h + mdp:/usr/include/bits/locale.h + mdp:/usr/include/bits/long-double.h + mdp:/usr/include/bits/posix1_lim.h + mdp:/usr/include/bits/posix2_lim.h + mdp:/usr/include/bits/posix_opt.h + mdp:/usr/include/bits/pthread_stack_min-dynamic.h + mdp:/usr/include/bits/pthreadtypes-arch.h + mdp:/usr/include/bits/pthreadtypes.h + mdp:/usr/include/bits/sched.h + mdp:/usr/include/bits/select.h + mdp:/usr/include/bits/setjmp.h + mdp:/usr/include/bits/stdint-intn.h + mdp:/usr/include/bits/stdint-least.h + mdp:/usr/include/bits/stdint-uintn.h + mdp:/usr/include/bits/stdio_lim.h + mdp:/usr/include/bits/stdlib-float.h + mdp:/usr/include/bits/struct_mutex.h + mdp:/usr/include/bits/struct_rwlock.h + mdp:/usr/include/bits/syscall.h + mdp:/usr/include/bits/thread-shared-types.h + mdp:/usr/include/bits/time.h + mdp:/usr/include/bits/time64.h + mdp:/usr/include/bits/timesize.h + mdp:/usr/include/bits/timex.h + mdp:/usr/include/bits/types.h + mdp:/usr/include/bits/types/FILE.h + mdp:/usr/include/bits/types/__FILE.h + mdp:/usr/include/bits/types/__fpos64_t.h + mdp:/usr/include/bits/types/__fpos_t.h + mdp:/usr/include/bits/types/__locale_t.h + mdp:/usr/include/bits/types/__mbstate_t.h + mdp:/usr/include/bits/types/__sigset_t.h + mdp:/usr/include/bits/types/clock_t.h + mdp:/usr/include/bits/types/clockid_t.h + mdp:/usr/include/bits/types/cookie_io_functions_t.h + mdp:/usr/include/bits/types/error_t.h + mdp:/usr/include/bits/types/locale_t.h + mdp:/usr/include/bits/types/mbstate_t.h + mdp:/usr/include/bits/types/sigset_t.h + mdp:/usr/include/bits/types/struct_FILE.h + mdp:/usr/include/bits/types/struct___jmp_buf_tag.h + mdp:/usr/include/bits/types/struct_itimerspec.h + mdp:/usr/include/bits/types/struct_sched_param.h + mdp:/usr/include/bits/types/struct_timespec.h + mdp:/usr/include/bits/types/struct_timeval.h + mdp:/usr/include/bits/types/struct_tm.h + mdp:/usr/include/bits/types/time_t.h + mdp:/usr/include/bits/types/timer_t.h + mdp:/usr/include/bits/types/wint_t.h + mdp:/usr/include/bits/typesizes.h + mdp:/usr/include/bits/uintn-identity.h + mdp:/usr/include/bits/uio_lim.h + mdp:/usr/include/bits/unistd_ext.h + mdp:/usr/include/bits/waitflags.h + mdp:/usr/include/bits/waitstatus.h + mdp:/usr/include/bits/wchar.h + mdp:/usr/include/bits/wctype-wchar.h + mdp:/usr/include/bits/wordsize.h + mdp:/usr/include/bits/xopen_lim.h + mdp:/usr/include/c++/15/algorithm + mdp:/usr/include/c++/15/array + mdp:/usr/include/c++/15/atomic + mdp:/usr/include/c++/15/backward/auto_ptr.h + mdp:/usr/include/c++/15/backward/binders.h + mdp:/usr/include/c++/15/bit + mdp:/usr/include/c++/15/bits/algorithmfwd.h + mdp:/usr/include/c++/15/bits/align.h + mdp:/usr/include/c++/15/bits/alloc_traits.h + mdp:/usr/include/c++/15/bits/allocated_ptr.h + mdp:/usr/include/c++/15/bits/allocator.h + mdp:/usr/include/c++/15/bits/atomic_base.h + mdp:/usr/include/c++/15/bits/atomic_lockfree_defines.h + mdp:/usr/include/c++/15/bits/atomic_wait.h + mdp:/usr/include/c++/15/bits/basic_ios.h + mdp:/usr/include/c++/15/bits/basic_ios.tcc + mdp:/usr/include/c++/15/bits/basic_string.h + mdp:/usr/include/c++/15/bits/basic_string.tcc + mdp:/usr/include/c++/15/bits/char_traits.h + mdp:/usr/include/c++/15/bits/charconv.h + mdp:/usr/include/c++/15/bits/chrono.h + mdp:/usr/include/c++/15/bits/chrono_io.h + mdp:/usr/include/c++/15/bits/codecvt.h + mdp:/usr/include/c++/15/bits/concept_check.h + mdp:/usr/include/c++/15/bits/cpp_type_traits.h + mdp:/usr/include/c++/15/bits/cxxabi_forced.h + mdp:/usr/include/c++/15/bits/cxxabi_init_exception.h + mdp:/usr/include/c++/15/bits/enable_special_members.h + mdp:/usr/include/c++/15/bits/erase_if.h + mdp:/usr/include/c++/15/bits/exception.h + mdp:/usr/include/c++/15/bits/exception_defines.h + mdp:/usr/include/c++/15/bits/exception_ptr.h + mdp:/usr/include/c++/15/bits/functexcept.h + mdp:/usr/include/c++/15/bits/functional_hash.h + mdp:/usr/include/c++/15/bits/hash_bytes.h + mdp:/usr/include/c++/15/bits/hashtable.h + mdp:/usr/include/c++/15/bits/hashtable_policy.h + mdp:/usr/include/c++/15/bits/invoke.h + mdp:/usr/include/c++/15/bits/ios_base.h + mdp:/usr/include/c++/15/bits/istream.tcc + mdp:/usr/include/c++/15/bits/iterator_concepts.h + mdp:/usr/include/c++/15/bits/list.tcc + mdp:/usr/include/c++/15/bits/locale_classes.h + mdp:/usr/include/c++/15/bits/locale_classes.tcc + mdp:/usr/include/c++/15/bits/locale_conv.h + mdp:/usr/include/c++/15/bits/locale_facets.h + mdp:/usr/include/c++/15/bits/locale_facets.tcc + mdp:/usr/include/c++/15/bits/locale_facets_nonio.h + mdp:/usr/include/c++/15/bits/locale_facets_nonio.tcc + mdp:/usr/include/c++/15/bits/localefwd.h + mdp:/usr/include/c++/15/bits/max_size_type.h + mdp:/usr/include/c++/15/bits/memory_resource.h + mdp:/usr/include/c++/15/bits/memoryfwd.h + mdp:/usr/include/c++/15/bits/move.h + mdp:/usr/include/c++/15/bits/nested_exception.h + mdp:/usr/include/c++/15/bits/new_allocator.h + mdp:/usr/include/c++/15/bits/node_handle.h + mdp:/usr/include/c++/15/bits/ostream.h + mdp:/usr/include/c++/15/bits/ostream.tcc + mdp:/usr/include/c++/15/bits/ostream_insert.h + mdp:/usr/include/c++/15/bits/parse_numbers.h + mdp:/usr/include/c++/15/bits/postypes.h + mdp:/usr/include/c++/15/bits/predefined_ops.h + mdp:/usr/include/c++/15/bits/ptr_traits.h + mdp:/usr/include/c++/15/bits/quoted_string.h + mdp:/usr/include/c++/15/bits/range_access.h + mdp:/usr/include/c++/15/bits/ranges_algo.h + mdp:/usr/include/c++/15/bits/ranges_algobase.h + mdp:/usr/include/c++/15/bits/ranges_base.h + mdp:/usr/include/c++/15/bits/ranges_cmp.h + mdp:/usr/include/c++/15/bits/ranges_uninitialized.h + mdp:/usr/include/c++/15/bits/ranges_util.h + mdp:/usr/include/c++/15/bits/refwrap.h + mdp:/usr/include/c++/15/bits/requires_hosted.h + mdp:/usr/include/c++/15/bits/shared_ptr.h + mdp:/usr/include/c++/15/bits/shared_ptr_atomic.h + mdp:/usr/include/c++/15/bits/shared_ptr_base.h + mdp:/usr/include/c++/15/bits/specfun.h + mdp:/usr/include/c++/15/bits/sstream.tcc + mdp:/usr/include/c++/15/bits/std_abs.h + mdp:/usr/include/c++/15/bits/std_function.h + mdp:/usr/include/c++/15/bits/std_mutex.h + mdp:/usr/include/c++/15/bits/stl_algo.h + mdp:/usr/include/c++/15/bits/stl_algobase.h + mdp:/usr/include/c++/15/bits/stl_bvector.h + mdp:/usr/include/c++/15/bits/stl_construct.h + mdp:/usr/include/c++/15/bits/stl_function.h + mdp:/usr/include/c++/15/bits/stl_heap.h + mdp:/usr/include/c++/15/bits/stl_iterator.h + mdp:/usr/include/c++/15/bits/stl_iterator_base_funcs.h + mdp:/usr/include/c++/15/bits/stl_iterator_base_types.h + mdp:/usr/include/c++/15/bits/stl_list.h + mdp:/usr/include/c++/15/bits/stl_map.h + mdp:/usr/include/c++/15/bits/stl_multimap.h + mdp:/usr/include/c++/15/bits/stl_multiset.h + mdp:/usr/include/c++/15/bits/stl_numeric.h + mdp:/usr/include/c++/15/bits/stl_pair.h + mdp:/usr/include/c++/15/bits/stl_raw_storage_iter.h + mdp:/usr/include/c++/15/bits/stl_relops.h + mdp:/usr/include/c++/15/bits/stl_set.h + mdp:/usr/include/c++/15/bits/stl_tempbuf.h + mdp:/usr/include/c++/15/bits/stl_tree.h + mdp:/usr/include/c++/15/bits/stl_uninitialized.h + mdp:/usr/include/c++/15/bits/stl_vector.h + mdp:/usr/include/c++/15/bits/stream_iterator.h + mdp:/usr/include/c++/15/bits/streambuf.tcc + mdp:/usr/include/c++/15/bits/streambuf_iterator.h + mdp:/usr/include/c++/15/bits/string_view.tcc + mdp:/usr/include/c++/15/bits/stringfwd.h + mdp:/usr/include/c++/15/bits/uniform_int_dist.h + mdp:/usr/include/c++/15/bits/unique_ptr.h + mdp:/usr/include/c++/15/bits/unordered_map.h + mdp:/usr/include/c++/15/bits/unordered_set.h + mdp:/usr/include/c++/15/bits/uses_allocator.h + mdp:/usr/include/c++/15/bits/uses_allocator_args.h + mdp:/usr/include/c++/15/bits/utility.h + mdp:/usr/include/c++/15/bits/vector.tcc + mdp:/usr/include/c++/15/bits/version.h + mdp:/usr/include/c++/15/cassert + mdp:/usr/include/c++/15/cctype + mdp:/usr/include/c++/15/cerrno + mdp:/usr/include/c++/15/charconv + mdp:/usr/include/c++/15/chrono + mdp:/usr/include/c++/15/climits + mdp:/usr/include/c++/15/clocale + mdp:/usr/include/c++/15/cmath + mdp:/usr/include/c++/15/compare + mdp:/usr/include/c++/15/concepts + mdp:/usr/include/c++/15/cstddef + mdp:/usr/include/c++/15/cstdint + mdp:/usr/include/c++/15/cstdio + mdp:/usr/include/c++/15/cstdlib + mdp:/usr/include/c++/15/cstring + mdp:/usr/include/c++/15/ctime + mdp:/usr/include/c++/15/cwchar + mdp:/usr/include/c++/15/cwctype + mdp:/usr/include/c++/15/debug/assertions.h + mdp:/usr/include/c++/15/debug/debug.h + mdp:/usr/include/c++/15/exception + mdp:/usr/include/c++/15/ext/aligned_buffer.h + mdp:/usr/include/c++/15/ext/alloc_traits.h + mdp:/usr/include/c++/15/ext/atomicity.h + mdp:/usr/include/c++/15/ext/concurrence.h + mdp:/usr/include/c++/15/ext/numeric_traits.h + mdp:/usr/include/c++/15/ext/string_conversions.h + mdp:/usr/include/c++/15/ext/type_traits.h + mdp:/usr/include/c++/15/format + mdp:/usr/include/c++/15/functional + mdp:/usr/include/c++/15/initializer_list + mdp:/usr/include/c++/15/iomanip + mdp:/usr/include/c++/15/ios + mdp:/usr/include/c++/15/iosfwd + mdp:/usr/include/c++/15/istream + mdp:/usr/include/c++/15/iterator + mdp:/usr/include/c++/15/limits + mdp:/usr/include/c++/15/list + mdp:/usr/include/c++/15/locale + mdp:/usr/include/c++/15/map + mdp:/usr/include/c++/15/memory + mdp:/usr/include/c++/15/new + mdp:/usr/include/c++/15/numeric + mdp:/usr/include/c++/15/optional + mdp:/usr/include/c++/15/ostream + mdp:/usr/include/c++/15/pstl/execution_defs.h + mdp:/usr/include/c++/15/pstl/glue_numeric_defs.h + mdp:/usr/include/c++/15/pstl/pstl_config.h + mdp:/usr/include/c++/15/ratio + mdp:/usr/include/c++/15/set + mdp:/usr/include/c++/15/sstream + mdp:/usr/include/c++/15/stdexcept + mdp:/usr/include/c++/15/streambuf + mdp:/usr/include/c++/15/string + mdp:/usr/include/c++/15/string_view + mdp:/usr/include/c++/15/system_error + mdp:/usr/include/c++/15/tr1/bessel_function.tcc + mdp:/usr/include/c++/15/tr1/beta_function.tcc + mdp:/usr/include/c++/15/tr1/ell_integral.tcc + mdp:/usr/include/c++/15/tr1/exp_integral.tcc + mdp:/usr/include/c++/15/tr1/gamma.tcc + mdp:/usr/include/c++/15/tr1/hypergeometric.tcc + mdp:/usr/include/c++/15/tr1/legendre_function.tcc + mdp:/usr/include/c++/15/tr1/modified_bessel_func.tcc + mdp:/usr/include/c++/15/tr1/poly_hermite.tcc + mdp:/usr/include/c++/15/tr1/poly_laguerre.tcc + mdp:/usr/include/c++/15/tr1/riemann_zeta.tcc + mdp:/usr/include/c++/15/tr1/special_function_util.h + mdp:/usr/include/c++/15/tuple + mdp:/usr/include/c++/15/type_traits + mdp:/usr/include/c++/15/typeinfo + mdp:/usr/include/c++/15/unordered_map + mdp:/usr/include/c++/15/unordered_set + mdp:/usr/include/c++/15/utility + mdp:/usr/include/c++/15/variant + mdp:/usr/include/c++/15/vector + mdp:/usr/include/c++/15/version + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/atomic_word.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++allocator.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++config.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++locale.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/cpu_defines.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/ctype_base.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/ctype_inline.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/error_constants.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/gthr-default.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/gthr.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/messages_members.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/os_defines.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/time_members.h + mdp:/usr/include/ctype.h + mdp:/usr/include/endian.h + mdp:/usr/include/errno.h + mdp:/usr/include/features-time64.h + mdp:/usr/include/features.h + mdp:/usr/include/gnu/stubs-64.h + mdp:/usr/include/gnu/stubs.h + mdp:/usr/include/libintl.h + mdp:/usr/include/limits.h + mdp:/usr/include/linux/close_range.h + mdp:/usr/include/linux/errno.h + mdp:/usr/include/linux/limits.h + mdp:/usr/include/linux/posix_types.h + mdp:/usr/include/linux/sched/types.h + mdp:/usr/include/linux/stddef.h + mdp:/usr/include/linux/types.h + mdp:/usr/include/locale.h + mdp:/usr/include/pthread.h + mdp:/usr/include/qt6/QtCore/QJsonObject + mdp:/usr/include/qt6/QtCore/QLineF + mdp:/usr/include/qt6/QtCore/QList + mdp:/usr/include/qt6/QtCore/QMap + mdp:/usr/include/qt6/QtCore/QObject + mdp:/usr/include/qt6/QtCore/QPointF + mdp:/usr/include/qt6/QtCore/QRectF + mdp:/usr/include/qt6/QtCore/QSet + mdp:/usr/include/qt6/QtCore/QString + mdp:/usr/include/qt6/QtCore/q17memory.h + mdp:/usr/include/qt6/QtCore/q20functional.h + mdp:/usr/include/qt6/QtCore/q20iterator.h + mdp:/usr/include/qt6/QtCore/q20memory.h + mdp:/usr/include/qt6/QtCore/q20type_traits.h + mdp:/usr/include/qt6/QtCore/q20utility.h + mdp:/usr/include/qt6/QtCore/q23type_traits.h + mdp:/usr/include/qt6/QtCore/q23utility.h + mdp:/usr/include/qt6/QtCore/qabstracteventdispatcher.h + mdp:/usr/include/qt6/QtCore/qalgorithms.h + mdp:/usr/include/qt6/QtCore/qalloc.h + mdp:/usr/include/qt6/QtCore/qanystringview.h + mdp:/usr/include/qt6/QtCore/qarraydata.h + mdp:/usr/include/qt6/QtCore/qarraydataops.h + mdp:/usr/include/qt6/QtCore/qarraydatapointer.h + mdp:/usr/include/qt6/QtCore/qassert.h + mdp:/usr/include/qt6/QtCore/qatomic.h + mdp:/usr/include/qt6/QtCore/qatomic_cxx11.h + mdp:/usr/include/qt6/QtCore/qbasicatomic.h + mdp:/usr/include/qt6/QtCore/qbasictimer.h + mdp:/usr/include/qt6/QtCore/qbindingstorage.h + mdp:/usr/include/qt6/QtCore/qbytearray.h + mdp:/usr/include/qt6/QtCore/qbytearrayalgorithms.h + mdp:/usr/include/qt6/QtCore/qbytearraylist.h + mdp:/usr/include/qt6/QtCore/qbytearrayview.h + mdp:/usr/include/qt6/QtCore/qcalendar.h + mdp:/usr/include/qt6/QtCore/qcborcommon.h + mdp:/usr/include/qt6/QtCore/qcborvalue.h + mdp:/usr/include/qt6/QtCore/qchar.h + mdp:/usr/include/qt6/QtCore/qcheckedint_impl.h + mdp:/usr/include/qt6/QtCore/qcompare.h + mdp:/usr/include/qt6/QtCore/qcompare_impl.h + mdp:/usr/include/qt6/QtCore/qcomparehelpers.h + mdp:/usr/include/qt6/QtCore/qcompilerdetection.h + mdp:/usr/include/qt6/QtCore/qconfig-64.h + mdp:/usr/include/qt6/QtCore/qconfig.h + mdp:/usr/include/qt6/QtCore/qconstructormacros.h + mdp:/usr/include/qt6/QtCore/qcontainerfwd.h + mdp:/usr/include/qt6/QtCore/qcontainerinfo.h + mdp:/usr/include/qt6/QtCore/qcontainertools_impl.h + mdp:/usr/include/qt6/QtCore/qcontiguouscache.h + mdp:/usr/include/qt6/QtCore/qcoreevent.h + mdp:/usr/include/qt6/QtCore/qdarwinhelpers.h + mdp:/usr/include/qt6/QtCore/qdatastream.h + mdp:/usr/include/qt6/QtCore/qdatetime.h + mdp:/usr/include/qt6/QtCore/qdeadlinetimer.h + mdp:/usr/include/qt6/QtCore/qdebug.h + mdp:/usr/include/qt6/QtCore/qendian.h + mdp:/usr/include/qt6/QtCore/qeventloop.h + mdp:/usr/include/qt6/QtCore/qexceptionhandling.h + mdp:/usr/include/qt6/QtCore/qflags.h + mdp:/usr/include/qt6/QtCore/qfloat16.h + mdp:/usr/include/qt6/QtCore/qforeach.h + mdp:/usr/include/qt6/QtCore/qfunctionaltools_impl.h + mdp:/usr/include/qt6/QtCore/qfunctionpointer.h + mdp:/usr/include/qt6/QtCore/qgenericatomic.h + mdp:/usr/include/qt6/QtCore/qglobal.h + mdp:/usr/include/qt6/QtCore/qglobalstatic.h + mdp:/usr/include/qt6/QtCore/qhash.h + mdp:/usr/include/qt6/QtCore/qhashfunctions.h + mdp:/usr/include/qt6/QtCore/qiodevicebase.h + mdp:/usr/include/qt6/QtCore/qiterable.h + mdp:/usr/include/qt6/QtCore/qiterator.h + mdp:/usr/include/qt6/QtCore/qjsondocument.h + mdp:/usr/include/qt6/QtCore/qjsonobject.h + mdp:/usr/include/qt6/QtCore/qjsonparseerror.h + mdp:/usr/include/qt6/QtCore/qjsonvalue.h + mdp:/usr/include/qt6/QtCore/qlatin1stringview.h + mdp:/usr/include/qt6/QtCore/qline.h + mdp:/usr/include/qt6/QtCore/qlist.h + mdp:/usr/include/qt6/QtCore/qlocale.h + mdp:/usr/include/qt6/QtCore/qlogging.h + mdp:/usr/include/qt6/QtCore/qmalloc.h + mdp:/usr/include/qt6/QtCore/qmap.h + mdp:/usr/include/qt6/QtCore/qmargins.h + mdp:/usr/include/qt6/QtCore/qmath.h + mdp:/usr/include/qt6/QtCore/qmetacontainer.h + mdp:/usr/include/qt6/QtCore/qmetatype.h + mdp:/usr/include/qt6/QtCore/qminmax.h + mdp:/usr/include/qt6/QtCore/qnamespace.h + mdp:/usr/include/qt6/QtCore/qnumeric.h + mdp:/usr/include/qt6/QtCore/qobject.h + mdp:/usr/include/qt6/QtCore/qobject_impl.h + mdp:/usr/include/qt6/QtCore/qobjectdefs.h + mdp:/usr/include/qt6/QtCore/qobjectdefs_impl.h + mdp:/usr/include/qt6/QtCore/qoverload.h + mdp:/usr/include/qt6/QtCore/qpair.h + mdp:/usr/include/qt6/QtCore/qpoint.h + mdp:/usr/include/qt6/QtCore/qprocessordetection.h + mdp:/usr/include/qt6/QtCore/qrect.h + mdp:/usr/include/qt6/QtCore/qrefcount.h + mdp:/usr/include/qt6/QtCore/qregularexpression.h + mdp:/usr/include/qt6/QtCore/qscopedpointer.h + mdp:/usr/include/qt6/QtCore/qscopeguard.h + mdp:/usr/include/qt6/QtCore/qset.h + mdp:/usr/include/qt6/QtCore/qshareddata.h + mdp:/usr/include/qt6/QtCore/qshareddata_impl.h + mdp:/usr/include/qt6/QtCore/qsharedpointer.h + mdp:/usr/include/qt6/QtCore/qsharedpointer_impl.h + mdp:/usr/include/qt6/QtCore/qsize.h + mdp:/usr/include/qt6/QtCore/qspan.h + mdp:/usr/include/qt6/QtCore/qstdlibdetection.h + mdp:/usr/include/qt6/QtCore/qstring.h + mdp:/usr/include/qt6/QtCore/qstringalgorithms.h + mdp:/usr/include/qt6/QtCore/qstringbuilder.h + mdp:/usr/include/qt6/QtCore/qstringconverter.h + mdp:/usr/include/qt6/QtCore/qstringconverter_base.h + mdp:/usr/include/qt6/QtCore/qstringfwd.h + mdp:/usr/include/qt6/QtCore/qstringlist.h + mdp:/usr/include/qt6/QtCore/qstringmatcher.h + mdp:/usr/include/qt6/QtCore/qstringtokenizer.h + mdp:/usr/include/qt6/QtCore/qstringview.h + mdp:/usr/include/qt6/QtCore/qswap.h + mdp:/usr/include/qt6/QtCore/qsysinfo.h + mdp:/usr/include/qt6/QtCore/qsystemdetection.h + mdp:/usr/include/qt6/QtCore/qtaggedpointer.h + mdp:/usr/include/qt6/QtCore/qtclasshelpermacros.h + mdp:/usr/include/qt6/QtCore/qtconfiginclude.h + mdp:/usr/include/qt6/QtCore/qtconfigmacros.h + mdp:/usr/include/qt6/QtCore/qtcore-config.h + mdp:/usr/include/qt6/QtCore/qtcoreexports.h + mdp:/usr/include/qt6/QtCore/qtcoreglobal.h + mdp:/usr/include/qt6/QtCore/qtdeprecationdefinitions.h + mdp:/usr/include/qt6/QtCore/qtdeprecationmarkers.h + mdp:/usr/include/qt6/QtCore/qtenvironmentvariables.h + mdp:/usr/include/qt6/QtCore/qtextstream.h + mdp:/usr/include/qt6/QtCore/qtformat_impl.h + mdp:/usr/include/qt6/QtCore/qtmetamacros.h + mdp:/usr/include/qt6/QtCore/qtnoop.h + mdp:/usr/include/qt6/QtCore/qtpreprocessorsupport.h + mdp:/usr/include/qt6/QtCore/qtresource.h + mdp:/usr/include/qt6/QtCore/qttranslation.h + mdp:/usr/include/qt6/QtCore/qttypetraits.h + mdp:/usr/include/qt6/QtCore/qtversion.h + mdp:/usr/include/qt6/QtCore/qtversionchecks.h + mdp:/usr/include/qt6/QtCore/qtypeinfo.h + mdp:/usr/include/qt6/QtCore/qtypes.h + mdp:/usr/include/qt6/QtCore/qurl.h + mdp:/usr/include/qt6/QtCore/qutf8stringview.h + mdp:/usr/include/qt6/QtCore/quuid.h + mdp:/usr/include/qt6/QtCore/qvariant.h + mdp:/usr/include/qt6/QtCore/qvarlengtharray.h + mdp:/usr/include/qt6/QtCore/qversiontagging.h + mdp:/usr/include/qt6/QtCore/qxptype_traits.h + mdp:/usr/include/qt6/QtCore/qyieldcpu.h + mdp:/usr/include/qt6/QtGui/QColor + mdp:/usr/include/qt6/QtGui/QFont + mdp:/usr/include/qt6/QtGui/QPainter + mdp:/usr/include/qt6/QtGui/QPainterPath + mdp:/usr/include/qt6/QtGui/QUndoStack + mdp:/usr/include/qt6/QtGui/qaction.h + mdp:/usr/include/qt6/QtGui/qbitmap.h + mdp:/usr/include/qt6/QtGui/qbrush.h + mdp:/usr/include/qt6/QtGui/qcolor.h + mdp:/usr/include/qt6/QtGui/qcursor.h + mdp:/usr/include/qt6/QtGui/qfont.h + mdp:/usr/include/qt6/QtGui/qfontinfo.h + mdp:/usr/include/qt6/QtGui/qfontmetrics.h + mdp:/usr/include/qt6/QtGui/qfontvariableaxis.h + mdp:/usr/include/qt6/QtGui/qicon.h + mdp:/usr/include/qt6/QtGui/qimage.h + mdp:/usr/include/qt6/QtGui/qkeysequence.h + mdp:/usr/include/qt6/QtGui/qpaintdevice.h + mdp:/usr/include/qt6/QtGui/qpainter.h + mdp:/usr/include/qt6/QtGui/qpainterpath.h + mdp:/usr/include/qt6/QtGui/qpalette.h + mdp:/usr/include/qt6/QtGui/qpen.h + mdp:/usr/include/qt6/QtGui/qpixelformat.h + mdp:/usr/include/qt6/QtGui/qpixmap.h + mdp:/usr/include/qt6/QtGui/qpolygon.h + mdp:/usr/include/qt6/QtGui/qregion.h + mdp:/usr/include/qt6/QtGui/qrgb.h + mdp:/usr/include/qt6/QtGui/qrgba64.h + mdp:/usr/include/qt6/QtGui/qtextoption.h + mdp:/usr/include/qt6/QtGui/qtgui-config.h + mdp:/usr/include/qt6/QtGui/qtguiexports.h + mdp:/usr/include/qt6/QtGui/qtguiglobal.h + mdp:/usr/include/qt6/QtGui/qtransform.h + mdp:/usr/include/qt6/QtGui/qundostack.h + mdp:/usr/include/qt6/QtGui/qwindowdefs.h + mdp:/usr/include/qt6/QtWidgets/QGraphicsItem + mdp:/usr/include/qt6/QtWidgets/QGraphicsScene + mdp:/usr/include/qt6/QtWidgets/QGraphicsSceneMouseEvent + mdp:/usr/include/qt6/QtWidgets/QWidget + mdp:/usr/include/qt6/QtWidgets/qgraphicsitem.h + mdp:/usr/include/qt6/QtWidgets/qgraphicsscene.h + mdp:/usr/include/qt6/QtWidgets/qgraphicssceneevent.h + mdp:/usr/include/qt6/QtWidgets/qsizepolicy.h + mdp:/usr/include/qt6/QtWidgets/qtwidgets-config.h + mdp:/usr/include/qt6/QtWidgets/qtwidgetsexports.h + mdp:/usr/include/qt6/QtWidgets/qtwidgetsglobal.h + mdp:/usr/include/qt6/QtWidgets/qwidget.h + mdp:/usr/include/sched.h + mdp:/usr/include/stdc-predef.h + mdp:/usr/include/stdint.h + mdp:/usr/include/stdio.h + mdp:/usr/include/stdlib.h + mdp:/usr/include/string.h + mdp:/usr/include/strings.h + mdp:/usr/include/sys/cdefs.h + mdp:/usr/include/sys/select.h + mdp:/usr/include/sys/single_threaded.h + mdp:/usr/include/sys/syscall.h + mdp:/usr/include/sys/types.h + mdp:/usr/include/syscall.h + mdp:/usr/include/time.h + mdp:/usr/include/unistd.h + mdp:/usr/include/wchar.h + mdp:/usr/include/wctype.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stdarg.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stdbool.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stddef.h +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/file_ops_dialog.h + mmc:Q_OBJECT + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/kassetmanagerqt_autogen/moc_predefs.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/file_ops.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/file_ops_dialog.h + mdp:/usr/include/alloca.h + mdp:/usr/include/asm-generic/bitsperlong.h + mdp:/usr/include/asm-generic/errno-base.h + mdp:/usr/include/asm-generic/errno.h + mdp:/usr/include/asm-generic/int-ll64.h + mdp:/usr/include/asm-generic/posix_types.h + mdp:/usr/include/asm-generic/types.h + mdp:/usr/include/asm/bitsperlong.h + mdp:/usr/include/asm/errno.h + mdp:/usr/include/asm/posix_types.h + mdp:/usr/include/asm/posix_types_64.h + mdp:/usr/include/asm/types.h + mdp:/usr/include/asm/unistd.h + mdp:/usr/include/asm/unistd_64.h + mdp:/usr/include/assert.h + mdp:/usr/include/bits/atomic_wide_counter.h + mdp:/usr/include/bits/byteswap.h + mdp:/usr/include/bits/confname.h + mdp:/usr/include/bits/cpu-set.h + mdp:/usr/include/bits/endian.h + mdp:/usr/include/bits/endianness.h + mdp:/usr/include/bits/environments.h + mdp:/usr/include/bits/errno.h + mdp:/usr/include/bits/floatn-common.h + mdp:/usr/include/bits/floatn.h + mdp:/usr/include/bits/getopt_core.h + mdp:/usr/include/bits/getopt_posix.h + mdp:/usr/include/bits/libc-header-start.h + mdp:/usr/include/bits/local_lim.h + mdp:/usr/include/bits/locale.h + mdp:/usr/include/bits/long-double.h + mdp:/usr/include/bits/posix1_lim.h + mdp:/usr/include/bits/posix2_lim.h + mdp:/usr/include/bits/posix_opt.h + mdp:/usr/include/bits/pthread_stack_min-dynamic.h + mdp:/usr/include/bits/pthreadtypes-arch.h + mdp:/usr/include/bits/pthreadtypes.h + mdp:/usr/include/bits/sched.h + mdp:/usr/include/bits/select.h + mdp:/usr/include/bits/semaphore.h + mdp:/usr/include/bits/setjmp.h + mdp:/usr/include/bits/stdint-intn.h + mdp:/usr/include/bits/stdint-least.h + mdp:/usr/include/bits/stdint-uintn.h + mdp:/usr/include/bits/stdio_lim.h + mdp:/usr/include/bits/stdlib-float.h + mdp:/usr/include/bits/struct_mutex.h + mdp:/usr/include/bits/struct_rwlock.h + mdp:/usr/include/bits/syscall.h + mdp:/usr/include/bits/thread-shared-types.h + mdp:/usr/include/bits/time.h + mdp:/usr/include/bits/time64.h + mdp:/usr/include/bits/timesize.h + mdp:/usr/include/bits/timex.h + mdp:/usr/include/bits/types.h + mdp:/usr/include/bits/types/FILE.h + mdp:/usr/include/bits/types/__FILE.h + mdp:/usr/include/bits/types/__fpos64_t.h + mdp:/usr/include/bits/types/__fpos_t.h + mdp:/usr/include/bits/types/__locale_t.h + mdp:/usr/include/bits/types/__mbstate_t.h + mdp:/usr/include/bits/types/__sigset_t.h + mdp:/usr/include/bits/types/clock_t.h + mdp:/usr/include/bits/types/clockid_t.h + mdp:/usr/include/bits/types/cookie_io_functions_t.h + mdp:/usr/include/bits/types/error_t.h + mdp:/usr/include/bits/types/locale_t.h + mdp:/usr/include/bits/types/mbstate_t.h + mdp:/usr/include/bits/types/sigset_t.h + mdp:/usr/include/bits/types/struct_FILE.h + mdp:/usr/include/bits/types/struct___jmp_buf_tag.h + mdp:/usr/include/bits/types/struct_itimerspec.h + mdp:/usr/include/bits/types/struct_sched_param.h + mdp:/usr/include/bits/types/struct_timespec.h + mdp:/usr/include/bits/types/struct_timeval.h + mdp:/usr/include/bits/types/struct_tm.h + mdp:/usr/include/bits/types/time_t.h + mdp:/usr/include/bits/types/timer_t.h + mdp:/usr/include/bits/types/wint_t.h + mdp:/usr/include/bits/typesizes.h + mdp:/usr/include/bits/uintn-identity.h + mdp:/usr/include/bits/uio_lim.h + mdp:/usr/include/bits/unistd_ext.h + mdp:/usr/include/bits/waitflags.h + mdp:/usr/include/bits/waitstatus.h + mdp:/usr/include/bits/wchar.h + mdp:/usr/include/bits/wctype-wchar.h + mdp:/usr/include/bits/wordsize.h + mdp:/usr/include/bits/xopen_lim.h + mdp:/usr/include/c++/15/algorithm + mdp:/usr/include/c++/15/array + mdp:/usr/include/c++/15/atomic + mdp:/usr/include/c++/15/backward/auto_ptr.h + mdp:/usr/include/c++/15/backward/binders.h + mdp:/usr/include/c++/15/bit + mdp:/usr/include/c++/15/bits/algorithmfwd.h + mdp:/usr/include/c++/15/bits/align.h + mdp:/usr/include/c++/15/bits/alloc_traits.h + mdp:/usr/include/c++/15/bits/allocated_ptr.h + mdp:/usr/include/c++/15/bits/allocator.h + mdp:/usr/include/c++/15/bits/atomic_base.h + mdp:/usr/include/c++/15/bits/atomic_futex.h + mdp:/usr/include/c++/15/bits/atomic_lockfree_defines.h + mdp:/usr/include/c++/15/bits/atomic_timed_wait.h + mdp:/usr/include/c++/15/bits/atomic_wait.h + mdp:/usr/include/c++/15/bits/basic_ios.h + mdp:/usr/include/c++/15/bits/basic_ios.tcc + mdp:/usr/include/c++/15/bits/basic_string.h + mdp:/usr/include/c++/15/bits/basic_string.tcc + mdp:/usr/include/c++/15/bits/char_traits.h + mdp:/usr/include/c++/15/bits/charconv.h + mdp:/usr/include/c++/15/bits/chrono.h + mdp:/usr/include/c++/15/bits/chrono_io.h + mdp:/usr/include/c++/15/bits/codecvt.h + mdp:/usr/include/c++/15/bits/concept_check.h + mdp:/usr/include/c++/15/bits/cpp_type_traits.h + mdp:/usr/include/c++/15/bits/cxxabi_forced.h + mdp:/usr/include/c++/15/bits/cxxabi_init_exception.h + mdp:/usr/include/c++/15/bits/enable_special_members.h + mdp:/usr/include/c++/15/bits/erase_if.h + mdp:/usr/include/c++/15/bits/exception.h + mdp:/usr/include/c++/15/bits/exception_defines.h + mdp:/usr/include/c++/15/bits/exception_ptr.h + mdp:/usr/include/c++/15/bits/functexcept.h + mdp:/usr/include/c++/15/bits/functional_hash.h + mdp:/usr/include/c++/15/bits/hash_bytes.h + mdp:/usr/include/c++/15/bits/hashtable.h + mdp:/usr/include/c++/15/bits/hashtable_policy.h + mdp:/usr/include/c++/15/bits/invoke.h + mdp:/usr/include/c++/15/bits/ios_base.h + mdp:/usr/include/c++/15/bits/istream.tcc + mdp:/usr/include/c++/15/bits/iterator_concepts.h + mdp:/usr/include/c++/15/bits/list.tcc + mdp:/usr/include/c++/15/bits/locale_classes.h + mdp:/usr/include/c++/15/bits/locale_classes.tcc + mdp:/usr/include/c++/15/bits/locale_conv.h + mdp:/usr/include/c++/15/bits/locale_facets.h + mdp:/usr/include/c++/15/bits/locale_facets.tcc + mdp:/usr/include/c++/15/bits/locale_facets_nonio.h + mdp:/usr/include/c++/15/bits/locale_facets_nonio.tcc + mdp:/usr/include/c++/15/bits/localefwd.h + mdp:/usr/include/c++/15/bits/max_size_type.h + mdp:/usr/include/c++/15/bits/memory_resource.h + mdp:/usr/include/c++/15/bits/memoryfwd.h + mdp:/usr/include/c++/15/bits/move.h + mdp:/usr/include/c++/15/bits/nested_exception.h + mdp:/usr/include/c++/15/bits/new_allocator.h + mdp:/usr/include/c++/15/bits/node_handle.h + mdp:/usr/include/c++/15/bits/ostream.h + mdp:/usr/include/c++/15/bits/ostream.tcc + mdp:/usr/include/c++/15/bits/ostream_insert.h + mdp:/usr/include/c++/15/bits/parse_numbers.h + mdp:/usr/include/c++/15/bits/postypes.h + mdp:/usr/include/c++/15/bits/predefined_ops.h + mdp:/usr/include/c++/15/bits/ptr_traits.h + mdp:/usr/include/c++/15/bits/quoted_string.h + mdp:/usr/include/c++/15/bits/range_access.h + mdp:/usr/include/c++/15/bits/ranges_algo.h + mdp:/usr/include/c++/15/bits/ranges_algobase.h + mdp:/usr/include/c++/15/bits/ranges_base.h + mdp:/usr/include/c++/15/bits/ranges_cmp.h + mdp:/usr/include/c++/15/bits/ranges_uninitialized.h + mdp:/usr/include/c++/15/bits/ranges_util.h + mdp:/usr/include/c++/15/bits/refwrap.h + mdp:/usr/include/c++/15/bits/requires_hosted.h + mdp:/usr/include/c++/15/bits/semaphore_base.h + mdp:/usr/include/c++/15/bits/shared_ptr.h + mdp:/usr/include/c++/15/bits/shared_ptr_atomic.h + mdp:/usr/include/c++/15/bits/shared_ptr_base.h + mdp:/usr/include/c++/15/bits/specfun.h + mdp:/usr/include/c++/15/bits/sstream.tcc + mdp:/usr/include/c++/15/bits/std_abs.h + mdp:/usr/include/c++/15/bits/std_function.h + mdp:/usr/include/c++/15/bits/std_mutex.h + mdp:/usr/include/c++/15/bits/std_thread.h + mdp:/usr/include/c++/15/bits/stl_algo.h + mdp:/usr/include/c++/15/bits/stl_algobase.h + mdp:/usr/include/c++/15/bits/stl_bvector.h + mdp:/usr/include/c++/15/bits/stl_construct.h + mdp:/usr/include/c++/15/bits/stl_function.h + mdp:/usr/include/c++/15/bits/stl_heap.h + mdp:/usr/include/c++/15/bits/stl_iterator.h + mdp:/usr/include/c++/15/bits/stl_iterator_base_funcs.h + mdp:/usr/include/c++/15/bits/stl_iterator_base_types.h + mdp:/usr/include/c++/15/bits/stl_list.h + mdp:/usr/include/c++/15/bits/stl_map.h + mdp:/usr/include/c++/15/bits/stl_multimap.h + mdp:/usr/include/c++/15/bits/stl_multiset.h + mdp:/usr/include/c++/15/bits/stl_numeric.h + mdp:/usr/include/c++/15/bits/stl_pair.h + mdp:/usr/include/c++/15/bits/stl_raw_storage_iter.h + mdp:/usr/include/c++/15/bits/stl_relops.h + mdp:/usr/include/c++/15/bits/stl_set.h + mdp:/usr/include/c++/15/bits/stl_tempbuf.h + mdp:/usr/include/c++/15/bits/stl_tree.h + mdp:/usr/include/c++/15/bits/stl_uninitialized.h + mdp:/usr/include/c++/15/bits/stl_vector.h + mdp:/usr/include/c++/15/bits/stream_iterator.h + mdp:/usr/include/c++/15/bits/streambuf.tcc + mdp:/usr/include/c++/15/bits/streambuf_iterator.h + mdp:/usr/include/c++/15/bits/string_view.tcc + mdp:/usr/include/c++/15/bits/stringfwd.h + mdp:/usr/include/c++/15/bits/this_thread_sleep.h + mdp:/usr/include/c++/15/bits/uniform_int_dist.h + mdp:/usr/include/c++/15/bits/unique_lock.h + mdp:/usr/include/c++/15/bits/unique_ptr.h + mdp:/usr/include/c++/15/bits/unordered_map.h + mdp:/usr/include/c++/15/bits/unordered_set.h + mdp:/usr/include/c++/15/bits/uses_allocator.h + mdp:/usr/include/c++/15/bits/uses_allocator_args.h + mdp:/usr/include/c++/15/bits/utility.h + mdp:/usr/include/c++/15/bits/vector.tcc + mdp:/usr/include/c++/15/bits/version.h + mdp:/usr/include/c++/15/cassert + mdp:/usr/include/c++/15/cctype + mdp:/usr/include/c++/15/cerrno + mdp:/usr/include/c++/15/charconv + mdp:/usr/include/c++/15/chrono + mdp:/usr/include/c++/15/climits + mdp:/usr/include/c++/15/clocale + mdp:/usr/include/c++/15/cmath + mdp:/usr/include/c++/15/compare + mdp:/usr/include/c++/15/concepts + mdp:/usr/include/c++/15/condition_variable + mdp:/usr/include/c++/15/cstddef + mdp:/usr/include/c++/15/cstdint + mdp:/usr/include/c++/15/cstdio + mdp:/usr/include/c++/15/cstdlib + mdp:/usr/include/c++/15/cstring + mdp:/usr/include/c++/15/ctime + mdp:/usr/include/c++/15/cwchar + mdp:/usr/include/c++/15/cwctype + mdp:/usr/include/c++/15/debug/assertions.h + mdp:/usr/include/c++/15/debug/debug.h + mdp:/usr/include/c++/15/exception + mdp:/usr/include/c++/15/ext/aligned_buffer.h + mdp:/usr/include/c++/15/ext/alloc_traits.h + mdp:/usr/include/c++/15/ext/atomicity.h + mdp:/usr/include/c++/15/ext/concurrence.h + mdp:/usr/include/c++/15/ext/numeric_traits.h + mdp:/usr/include/c++/15/ext/string_conversions.h + mdp:/usr/include/c++/15/ext/type_traits.h + mdp:/usr/include/c++/15/format + mdp:/usr/include/c++/15/functional + mdp:/usr/include/c++/15/future + mdp:/usr/include/c++/15/initializer_list + mdp:/usr/include/c++/15/iomanip + mdp:/usr/include/c++/15/ios + mdp:/usr/include/c++/15/iosfwd + mdp:/usr/include/c++/15/istream + mdp:/usr/include/c++/15/iterator + mdp:/usr/include/c++/15/limits + mdp:/usr/include/c++/15/list + mdp:/usr/include/c++/15/locale + mdp:/usr/include/c++/15/map + mdp:/usr/include/c++/15/memory + mdp:/usr/include/c++/15/mutex + mdp:/usr/include/c++/15/new + mdp:/usr/include/c++/15/numeric + mdp:/usr/include/c++/15/optional + mdp:/usr/include/c++/15/ostream + mdp:/usr/include/c++/15/pstl/execution_defs.h + mdp:/usr/include/c++/15/pstl/glue_numeric_defs.h + mdp:/usr/include/c++/15/pstl/pstl_config.h + mdp:/usr/include/c++/15/ratio + mdp:/usr/include/c++/15/semaphore + mdp:/usr/include/c++/15/set + mdp:/usr/include/c++/15/sstream + mdp:/usr/include/c++/15/stdexcept + mdp:/usr/include/c++/15/stop_token + mdp:/usr/include/c++/15/streambuf + mdp:/usr/include/c++/15/string + mdp:/usr/include/c++/15/string_view + mdp:/usr/include/c++/15/system_error + mdp:/usr/include/c++/15/tr1/bessel_function.tcc + mdp:/usr/include/c++/15/tr1/beta_function.tcc + mdp:/usr/include/c++/15/tr1/ell_integral.tcc + mdp:/usr/include/c++/15/tr1/exp_integral.tcc + mdp:/usr/include/c++/15/tr1/gamma.tcc + mdp:/usr/include/c++/15/tr1/hypergeometric.tcc + mdp:/usr/include/c++/15/tr1/legendre_function.tcc + mdp:/usr/include/c++/15/tr1/modified_bessel_func.tcc + mdp:/usr/include/c++/15/tr1/poly_hermite.tcc + mdp:/usr/include/c++/15/tr1/poly_laguerre.tcc + mdp:/usr/include/c++/15/tr1/riemann_zeta.tcc + mdp:/usr/include/c++/15/tr1/special_function_util.h + mdp:/usr/include/c++/15/tuple + mdp:/usr/include/c++/15/type_traits + mdp:/usr/include/c++/15/typeinfo + mdp:/usr/include/c++/15/unordered_map + mdp:/usr/include/c++/15/unordered_set + mdp:/usr/include/c++/15/utility + mdp:/usr/include/c++/15/variant + mdp:/usr/include/c++/15/vector + mdp:/usr/include/c++/15/version + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/atomic_word.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++allocator.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++config.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++locale.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/cpu_defines.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/ctype_base.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/ctype_inline.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/error_constants.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/gthr-default.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/gthr.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/messages_members.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/os_defines.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/time_members.h + mdp:/usr/include/ctype.h + mdp:/usr/include/endian.h + mdp:/usr/include/errno.h + mdp:/usr/include/features-time64.h + mdp:/usr/include/features.h + mdp:/usr/include/gnu/stubs-64.h + mdp:/usr/include/gnu/stubs.h + mdp:/usr/include/libintl.h + mdp:/usr/include/limits.h + mdp:/usr/include/linux/close_range.h + mdp:/usr/include/linux/errno.h + mdp:/usr/include/linux/limits.h + mdp:/usr/include/linux/posix_types.h + mdp:/usr/include/linux/sched/types.h + mdp:/usr/include/linux/stddef.h + mdp:/usr/include/linux/types.h + mdp:/usr/include/locale.h + mdp:/usr/include/pthread.h + mdp:/usr/include/qt6/QtCore/QFutureWatcher + mdp:/usr/include/qt6/QtCore/QList + mdp:/usr/include/qt6/QtCore/QMutex + mdp:/usr/include/qt6/QtCore/QObject + mdp:/usr/include/qt6/QtCore/QStringList + mdp:/usr/include/qt6/QtCore/QTimer + mdp:/usr/include/qt6/QtCore/q17memory.h + mdp:/usr/include/qt6/QtCore/q20functional.h + mdp:/usr/include/qt6/QtCore/q20iterator.h + mdp:/usr/include/qt6/QtCore/q20memory.h + mdp:/usr/include/qt6/QtCore/q20type_traits.h + mdp:/usr/include/qt6/QtCore/q20utility.h + mdp:/usr/include/qt6/QtCore/q23type_traits.h + mdp:/usr/include/qt6/QtCore/q23utility.h + mdp:/usr/include/qt6/QtCore/qabstracteventdispatcher.h + mdp:/usr/include/qt6/QtCore/qabstractitemmodel.h + mdp:/usr/include/qt6/QtCore/qalgorithms.h + mdp:/usr/include/qt6/QtCore/qalloc.h + mdp:/usr/include/qt6/QtCore/qanystringview.h + mdp:/usr/include/qt6/QtCore/qarraydata.h + mdp:/usr/include/qt6/QtCore/qarraydataops.h + mdp:/usr/include/qt6/QtCore/qarraydatapointer.h + mdp:/usr/include/qt6/QtCore/qassert.h + mdp:/usr/include/qt6/QtCore/qatomic.h + mdp:/usr/include/qt6/QtCore/qatomic_cxx11.h + mdp:/usr/include/qt6/QtCore/qbasicatomic.h + mdp:/usr/include/qt6/QtCore/qbasictimer.h + mdp:/usr/include/qt6/QtCore/qbindingstorage.h + mdp:/usr/include/qt6/QtCore/qbytearray.h + mdp:/usr/include/qt6/QtCore/qbytearrayalgorithms.h + mdp:/usr/include/qt6/QtCore/qbytearraylist.h + mdp:/usr/include/qt6/QtCore/qbytearrayview.h + mdp:/usr/include/qt6/QtCore/qchar.h + mdp:/usr/include/qt6/QtCore/qcheckedint_impl.h + mdp:/usr/include/qt6/QtCore/qcompare.h + mdp:/usr/include/qt6/QtCore/qcompare_impl.h + mdp:/usr/include/qt6/QtCore/qcomparehelpers.h + mdp:/usr/include/qt6/QtCore/qcompilerdetection.h + mdp:/usr/include/qt6/QtCore/qconfig-64.h + mdp:/usr/include/qt6/QtCore/qconfig.h + mdp:/usr/include/qt6/QtCore/qconstructormacros.h + mdp:/usr/include/qt6/QtCore/qcontainerfwd.h + mdp:/usr/include/qt6/QtCore/qcontainerinfo.h + mdp:/usr/include/qt6/QtCore/qcontainertools_impl.h + mdp:/usr/include/qt6/QtCore/qcontiguouscache.h + mdp:/usr/include/qt6/QtCore/qdarwinhelpers.h + mdp:/usr/include/qt6/QtCore/qdatastream.h + mdp:/usr/include/qt6/QtCore/qdeadlinetimer.h + mdp:/usr/include/qt6/QtCore/qdebug.h + mdp:/usr/include/qt6/QtCore/qendian.h + mdp:/usr/include/qt6/QtCore/qeventloop.h + mdp:/usr/include/qt6/QtCore/qexception.h + mdp:/usr/include/qt6/QtCore/qexceptionhandling.h + mdp:/usr/include/qt6/QtCore/qflags.h + mdp:/usr/include/qt6/QtCore/qfloat16.h + mdp:/usr/include/qt6/QtCore/qforeach.h + mdp:/usr/include/qt6/QtCore/qfunctionaltools_impl.h + mdp:/usr/include/qt6/QtCore/qfunctionpointer.h + mdp:/usr/include/qt6/QtCore/qfuture.h + mdp:/usr/include/qt6/QtCore/qfuture_impl.h + mdp:/usr/include/qt6/QtCore/qfutureinterface.h + mdp:/usr/include/qt6/QtCore/qfuturewatcher.h + mdp:/usr/include/qt6/QtCore/qgenericatomic.h + mdp:/usr/include/qt6/QtCore/qglobal.h + mdp:/usr/include/qt6/QtCore/qglobalstatic.h + mdp:/usr/include/qt6/QtCore/qhash.h + mdp:/usr/include/qt6/QtCore/qhashfunctions.h + mdp:/usr/include/qt6/QtCore/qiodevice.h + mdp:/usr/include/qt6/QtCore/qiodevicebase.h + mdp:/usr/include/qt6/QtCore/qitemselectionmodel.h + mdp:/usr/include/qt6/QtCore/qiterable.h + mdp:/usr/include/qt6/QtCore/qiterator.h + mdp:/usr/include/qt6/QtCore/qlatin1stringview.h + mdp:/usr/include/qt6/QtCore/qline.h + mdp:/usr/include/qt6/QtCore/qlist.h + mdp:/usr/include/qt6/QtCore/qlocale.h + mdp:/usr/include/qt6/QtCore/qlogging.h + mdp:/usr/include/qt6/QtCore/qmalloc.h + mdp:/usr/include/qt6/QtCore/qmap.h + mdp:/usr/include/qt6/QtCore/qmargins.h + mdp:/usr/include/qt6/QtCore/qmath.h + mdp:/usr/include/qt6/QtCore/qmetacontainer.h + mdp:/usr/include/qt6/QtCore/qmetatype.h + mdp:/usr/include/qt6/QtCore/qminmax.h + mdp:/usr/include/qt6/QtCore/qmutex.h + mdp:/usr/include/qt6/QtCore/qnamespace.h + mdp:/usr/include/qt6/QtCore/qnumeric.h + mdp:/usr/include/qt6/QtCore/qobject.h + mdp:/usr/include/qt6/QtCore/qobject_impl.h + mdp:/usr/include/qt6/QtCore/qobjectdefs.h + mdp:/usr/include/qt6/QtCore/qobjectdefs_impl.h + mdp:/usr/include/qt6/QtCore/qoverload.h + mdp:/usr/include/qt6/QtCore/qpair.h + mdp:/usr/include/qt6/QtCore/qpoint.h + mdp:/usr/include/qt6/QtCore/qprocessordetection.h + mdp:/usr/include/qt6/QtCore/qpromise.h + mdp:/usr/include/qt6/QtCore/qrect.h + mdp:/usr/include/qt6/QtCore/qrefcount.h + mdp:/usr/include/qt6/QtCore/qregularexpression.h + mdp:/usr/include/qt6/QtCore/qresultstore.h + mdp:/usr/include/qt6/QtCore/qrunnable.h + mdp:/usr/include/qt6/QtCore/qscopedpointer.h + mdp:/usr/include/qt6/QtCore/qscopeguard.h + mdp:/usr/include/qt6/QtCore/qset.h + mdp:/usr/include/qt6/QtCore/qshareddata.h + mdp:/usr/include/qt6/QtCore/qshareddata_impl.h + mdp:/usr/include/qt6/QtCore/qsharedpointer.h + mdp:/usr/include/qt6/QtCore/qsharedpointer_impl.h + mdp:/usr/include/qt6/QtCore/qsize.h + mdp:/usr/include/qt6/QtCore/qspan.h + mdp:/usr/include/qt6/QtCore/qstdlibdetection.h + mdp:/usr/include/qt6/QtCore/qstring.h + mdp:/usr/include/qt6/QtCore/qstringalgorithms.h + mdp:/usr/include/qt6/QtCore/qstringbuilder.h + mdp:/usr/include/qt6/QtCore/qstringconverter.h + mdp:/usr/include/qt6/QtCore/qstringconverter_base.h + mdp:/usr/include/qt6/QtCore/qstringfwd.h + mdp:/usr/include/qt6/QtCore/qstringlist.h + mdp:/usr/include/qt6/QtCore/qstringmatcher.h + mdp:/usr/include/qt6/QtCore/qstringtokenizer.h + mdp:/usr/include/qt6/QtCore/qstringview.h + mdp:/usr/include/qt6/QtCore/qswap.h + mdp:/usr/include/qt6/QtCore/qsysinfo.h + mdp:/usr/include/qt6/QtCore/qsystemdetection.h + mdp:/usr/include/qt6/QtCore/qtaggedpointer.h + mdp:/usr/include/qt6/QtCore/qtclasshelpermacros.h + mdp:/usr/include/qt6/QtCore/qtconfiginclude.h + mdp:/usr/include/qt6/QtCore/qtconfigmacros.h + mdp:/usr/include/qt6/QtCore/qtcore-config.h + mdp:/usr/include/qt6/QtCore/qtcoreexports.h + mdp:/usr/include/qt6/QtCore/qtcoreglobal.h + mdp:/usr/include/qt6/QtCore/qtdeprecationdefinitions.h + mdp:/usr/include/qt6/QtCore/qtdeprecationmarkers.h + mdp:/usr/include/qt6/QtCore/qtenvironmentvariables.h + mdp:/usr/include/qt6/QtCore/qtextstream.h + mdp:/usr/include/qt6/QtCore/qtformat_impl.h + mdp:/usr/include/qt6/QtCore/qthread.h + mdp:/usr/include/qt6/QtCore/qthreadpool.h + mdp:/usr/include/qt6/QtCore/qtimer.h + mdp:/usr/include/qt6/QtCore/qtmetamacros.h + mdp:/usr/include/qt6/QtCore/qtnoop.h + mdp:/usr/include/qt6/QtCore/qtpreprocessorsupport.h + mdp:/usr/include/qt6/QtCore/qtresource.h + mdp:/usr/include/qt6/QtCore/qtsan_impl.h + mdp:/usr/include/qt6/QtCore/qttranslation.h + mdp:/usr/include/qt6/QtCore/qttypetraits.h + mdp:/usr/include/qt6/QtCore/qtversion.h + mdp:/usr/include/qt6/QtCore/qtversionchecks.h + mdp:/usr/include/qt6/QtCore/qtypeinfo.h + mdp:/usr/include/qt6/QtCore/qtypes.h + mdp:/usr/include/qt6/QtCore/qurl.h + mdp:/usr/include/qt6/QtCore/qutf8stringview.h + mdp:/usr/include/qt6/QtCore/qvariant.h + mdp:/usr/include/qt6/QtCore/qvarlengtharray.h + mdp:/usr/include/qt6/QtCore/qversiontagging.h + mdp:/usr/include/qt6/QtCore/qxptype_traits.h + mdp:/usr/include/qt6/QtCore/qyieldcpu.h + mdp:/usr/include/qt6/QtGui/qaction.h + mdp:/usr/include/qt6/QtGui/qbitmap.h + mdp:/usr/include/qt6/QtGui/qbrush.h + mdp:/usr/include/qt6/QtGui/qcolor.h + mdp:/usr/include/qt6/QtGui/qcursor.h + mdp:/usr/include/qt6/QtGui/qfont.h + mdp:/usr/include/qt6/QtGui/qfontinfo.h + mdp:/usr/include/qt6/QtGui/qfontmetrics.h + mdp:/usr/include/qt6/QtGui/qfontvariableaxis.h + mdp:/usr/include/qt6/QtGui/qicon.h + mdp:/usr/include/qt6/QtGui/qimage.h + mdp:/usr/include/qt6/QtGui/qkeysequence.h + mdp:/usr/include/qt6/QtGui/qpaintdevice.h + mdp:/usr/include/qt6/QtGui/qpalette.h + mdp:/usr/include/qt6/QtGui/qpicture.h + mdp:/usr/include/qt6/QtGui/qpixelformat.h + mdp:/usr/include/qt6/QtGui/qpixmap.h + mdp:/usr/include/qt6/QtGui/qpolygon.h + mdp:/usr/include/qt6/QtGui/qregion.h + mdp:/usr/include/qt6/QtGui/qrgb.h + mdp:/usr/include/qt6/QtGui/qrgba64.h + mdp:/usr/include/qt6/QtGui/qtextdocument.h + mdp:/usr/include/qt6/QtGui/qtgui-config.h + mdp:/usr/include/qt6/QtGui/qtguiexports.h + mdp:/usr/include/qt6/QtGui/qtguiglobal.h + mdp:/usr/include/qt6/QtGui/qtransform.h + mdp:/usr/include/qt6/QtGui/qvalidator.h + mdp:/usr/include/qt6/QtGui/qwindowdefs.h + mdp:/usr/include/qt6/QtWidgets/QDialog + mdp:/usr/include/qt6/QtWidgets/QLabel + mdp:/usr/include/qt6/QtWidgets/QListWidget + mdp:/usr/include/qt6/QtWidgets/QProgressBar + mdp:/usr/include/qt6/QtWidgets/QPushButton + mdp:/usr/include/qt6/QtWidgets/qabstractbutton.h + mdp:/usr/include/qt6/QtWidgets/qabstractitemdelegate.h + mdp:/usr/include/qt6/QtWidgets/qabstractitemview.h + mdp:/usr/include/qt6/QtWidgets/qabstractscrollarea.h + mdp:/usr/include/qt6/QtWidgets/qabstractslider.h + mdp:/usr/include/qt6/QtWidgets/qabstractspinbox.h + mdp:/usr/include/qt6/QtWidgets/qdialog.h + mdp:/usr/include/qt6/QtWidgets/qframe.h + mdp:/usr/include/qt6/QtWidgets/qlabel.h + mdp:/usr/include/qt6/QtWidgets/qlistview.h + mdp:/usr/include/qt6/QtWidgets/qlistwidget.h + mdp:/usr/include/qt6/QtWidgets/qprogressbar.h + mdp:/usr/include/qt6/QtWidgets/qpushbutton.h + mdp:/usr/include/qt6/QtWidgets/qrubberband.h + mdp:/usr/include/qt6/QtWidgets/qsizepolicy.h + mdp:/usr/include/qt6/QtWidgets/qslider.h + mdp:/usr/include/qt6/QtWidgets/qstyle.h + mdp:/usr/include/qt6/QtWidgets/qstyleoption.h + mdp:/usr/include/qt6/QtWidgets/qtabbar.h + mdp:/usr/include/qt6/QtWidgets/qtabwidget.h + mdp:/usr/include/qt6/QtWidgets/qtwidgets-config.h + mdp:/usr/include/qt6/QtWidgets/qtwidgetsexports.h + mdp:/usr/include/qt6/QtWidgets/qtwidgetsglobal.h + mdp:/usr/include/qt6/QtWidgets/qwidget.h + mdp:/usr/include/sched.h + mdp:/usr/include/semaphore.h + mdp:/usr/include/stdc-predef.h + mdp:/usr/include/stdint.h + mdp:/usr/include/stdio.h + mdp:/usr/include/stdlib.h + mdp:/usr/include/string.h + mdp:/usr/include/strings.h + mdp:/usr/include/sys/cdefs.h + mdp:/usr/include/sys/select.h + mdp:/usr/include/sys/single_threaded.h + mdp:/usr/include/sys/syscall.h + mdp:/usr/include/sys/time.h + mdp:/usr/include/sys/types.h + mdp:/usr/include/syscall.h + mdp:/usr/include/time.h + mdp:/usr/include/unistd.h + mdp:/usr/include/wchar.h + mdp:/usr/include/wctype.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stdarg.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stdbool.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stddef.h +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/import_progress_dialog.cpp +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/icon_utils.cpp +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/projects_model.h + mmc:Q_OBJECT + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/kassetmanagerqt_autogen/moc_predefs.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/i_asset_database.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/project_db.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/projects_model.h + mdp:/usr/include/alloca.h + mdp:/usr/include/asm-generic/bitsperlong.h + mdp:/usr/include/asm-generic/errno-base.h + mdp:/usr/include/asm-generic/errno.h + mdp:/usr/include/asm-generic/int-ll64.h + mdp:/usr/include/asm-generic/posix_types.h + mdp:/usr/include/asm-generic/types.h + mdp:/usr/include/asm/bitsperlong.h + mdp:/usr/include/asm/errno.h + mdp:/usr/include/asm/posix_types.h + mdp:/usr/include/asm/posix_types_64.h + mdp:/usr/include/asm/types.h + mdp:/usr/include/asm/unistd.h + mdp:/usr/include/asm/unistd_64.h + mdp:/usr/include/assert.h + mdp:/usr/include/bits/atomic_wide_counter.h + mdp:/usr/include/bits/byteswap.h + mdp:/usr/include/bits/confname.h + mdp:/usr/include/bits/cpu-set.h + mdp:/usr/include/bits/endian.h + mdp:/usr/include/bits/endianness.h + mdp:/usr/include/bits/environments.h + mdp:/usr/include/bits/errno.h + mdp:/usr/include/bits/floatn-common.h + mdp:/usr/include/bits/floatn.h + mdp:/usr/include/bits/getopt_core.h + mdp:/usr/include/bits/getopt_posix.h + mdp:/usr/include/bits/libc-header-start.h + mdp:/usr/include/bits/local_lim.h + mdp:/usr/include/bits/locale.h + mdp:/usr/include/bits/long-double.h + mdp:/usr/include/bits/posix1_lim.h + mdp:/usr/include/bits/posix2_lim.h + mdp:/usr/include/bits/posix_opt.h + mdp:/usr/include/bits/pthread_stack_min-dynamic.h + mdp:/usr/include/bits/pthreadtypes-arch.h + mdp:/usr/include/bits/pthreadtypes.h + mdp:/usr/include/bits/sched.h + mdp:/usr/include/bits/select.h + mdp:/usr/include/bits/setjmp.h + mdp:/usr/include/bits/stdint-intn.h + mdp:/usr/include/bits/stdint-least.h + mdp:/usr/include/bits/stdint-uintn.h + mdp:/usr/include/bits/stdio_lim.h + mdp:/usr/include/bits/stdlib-float.h + mdp:/usr/include/bits/struct_mutex.h + mdp:/usr/include/bits/struct_rwlock.h + mdp:/usr/include/bits/syscall.h + mdp:/usr/include/bits/thread-shared-types.h + mdp:/usr/include/bits/time.h + mdp:/usr/include/bits/time64.h + mdp:/usr/include/bits/timesize.h + mdp:/usr/include/bits/timex.h + mdp:/usr/include/bits/types.h + mdp:/usr/include/bits/types/FILE.h + mdp:/usr/include/bits/types/__FILE.h + mdp:/usr/include/bits/types/__fpos64_t.h + mdp:/usr/include/bits/types/__fpos_t.h + mdp:/usr/include/bits/types/__locale_t.h + mdp:/usr/include/bits/types/__mbstate_t.h + mdp:/usr/include/bits/types/__sigset_t.h + mdp:/usr/include/bits/types/clock_t.h + mdp:/usr/include/bits/types/clockid_t.h + mdp:/usr/include/bits/types/cookie_io_functions_t.h + mdp:/usr/include/bits/types/error_t.h + mdp:/usr/include/bits/types/locale_t.h + mdp:/usr/include/bits/types/mbstate_t.h + mdp:/usr/include/bits/types/sigset_t.h + mdp:/usr/include/bits/types/struct_FILE.h + mdp:/usr/include/bits/types/struct___jmp_buf_tag.h + mdp:/usr/include/bits/types/struct_itimerspec.h + mdp:/usr/include/bits/types/struct_sched_param.h + mdp:/usr/include/bits/types/struct_timespec.h + mdp:/usr/include/bits/types/struct_timeval.h + mdp:/usr/include/bits/types/struct_tm.h + mdp:/usr/include/bits/types/time_t.h + mdp:/usr/include/bits/types/timer_t.h + mdp:/usr/include/bits/types/wint_t.h + mdp:/usr/include/bits/typesizes.h + mdp:/usr/include/bits/uintn-identity.h + mdp:/usr/include/bits/uio_lim.h + mdp:/usr/include/bits/unistd_ext.h + mdp:/usr/include/bits/waitflags.h + mdp:/usr/include/bits/waitstatus.h + mdp:/usr/include/bits/wchar.h + mdp:/usr/include/bits/wctype-wchar.h + mdp:/usr/include/bits/wordsize.h + mdp:/usr/include/bits/xopen_lim.h + mdp:/usr/include/c++/15/algorithm + mdp:/usr/include/c++/15/array + mdp:/usr/include/c++/15/atomic + mdp:/usr/include/c++/15/backward/auto_ptr.h + mdp:/usr/include/c++/15/backward/binders.h + mdp:/usr/include/c++/15/bit + mdp:/usr/include/c++/15/bits/algorithmfwd.h + mdp:/usr/include/c++/15/bits/align.h + mdp:/usr/include/c++/15/bits/alloc_traits.h + mdp:/usr/include/c++/15/bits/allocated_ptr.h + mdp:/usr/include/c++/15/bits/allocator.h + mdp:/usr/include/c++/15/bits/atomic_base.h + mdp:/usr/include/c++/15/bits/atomic_lockfree_defines.h + mdp:/usr/include/c++/15/bits/atomic_wait.h + mdp:/usr/include/c++/15/bits/basic_ios.h + mdp:/usr/include/c++/15/bits/basic_ios.tcc + mdp:/usr/include/c++/15/bits/basic_string.h + mdp:/usr/include/c++/15/bits/basic_string.tcc + mdp:/usr/include/c++/15/bits/char_traits.h + mdp:/usr/include/c++/15/bits/charconv.h + mdp:/usr/include/c++/15/bits/chrono.h + mdp:/usr/include/c++/15/bits/chrono_io.h + mdp:/usr/include/c++/15/bits/codecvt.h + mdp:/usr/include/c++/15/bits/concept_check.h + mdp:/usr/include/c++/15/bits/cpp_type_traits.h + mdp:/usr/include/c++/15/bits/cxxabi_forced.h + mdp:/usr/include/c++/15/bits/cxxabi_init_exception.h + mdp:/usr/include/c++/15/bits/enable_special_members.h + mdp:/usr/include/c++/15/bits/erase_if.h + mdp:/usr/include/c++/15/bits/exception.h + mdp:/usr/include/c++/15/bits/exception_defines.h + mdp:/usr/include/c++/15/bits/exception_ptr.h + mdp:/usr/include/c++/15/bits/functexcept.h + mdp:/usr/include/c++/15/bits/functional_hash.h + mdp:/usr/include/c++/15/bits/hash_bytes.h + mdp:/usr/include/c++/15/bits/hashtable.h + mdp:/usr/include/c++/15/bits/hashtable_policy.h + mdp:/usr/include/c++/15/bits/invoke.h + mdp:/usr/include/c++/15/bits/ios_base.h + mdp:/usr/include/c++/15/bits/istream.tcc + mdp:/usr/include/c++/15/bits/iterator_concepts.h + mdp:/usr/include/c++/15/bits/list.tcc + mdp:/usr/include/c++/15/bits/locale_classes.h + mdp:/usr/include/c++/15/bits/locale_classes.tcc + mdp:/usr/include/c++/15/bits/locale_conv.h + mdp:/usr/include/c++/15/bits/locale_facets.h + mdp:/usr/include/c++/15/bits/locale_facets.tcc + mdp:/usr/include/c++/15/bits/locale_facets_nonio.h + mdp:/usr/include/c++/15/bits/locale_facets_nonio.tcc + mdp:/usr/include/c++/15/bits/localefwd.h + mdp:/usr/include/c++/15/bits/max_size_type.h + mdp:/usr/include/c++/15/bits/memory_resource.h + mdp:/usr/include/c++/15/bits/memoryfwd.h + mdp:/usr/include/c++/15/bits/move.h + mdp:/usr/include/c++/15/bits/nested_exception.h + mdp:/usr/include/c++/15/bits/new_allocator.h + mdp:/usr/include/c++/15/bits/node_handle.h + mdp:/usr/include/c++/15/bits/ostream.h + mdp:/usr/include/c++/15/bits/ostream.tcc + mdp:/usr/include/c++/15/bits/ostream_insert.h + mdp:/usr/include/c++/15/bits/parse_numbers.h + mdp:/usr/include/c++/15/bits/postypes.h + mdp:/usr/include/c++/15/bits/predefined_ops.h + mdp:/usr/include/c++/15/bits/ptr_traits.h + mdp:/usr/include/c++/15/bits/quoted_string.h + mdp:/usr/include/c++/15/bits/range_access.h + mdp:/usr/include/c++/15/bits/ranges_algo.h + mdp:/usr/include/c++/15/bits/ranges_algobase.h + mdp:/usr/include/c++/15/bits/ranges_base.h + mdp:/usr/include/c++/15/bits/ranges_cmp.h + mdp:/usr/include/c++/15/bits/ranges_uninitialized.h + mdp:/usr/include/c++/15/bits/ranges_util.h + mdp:/usr/include/c++/15/bits/refwrap.h + mdp:/usr/include/c++/15/bits/requires_hosted.h + mdp:/usr/include/c++/15/bits/shared_ptr.h + mdp:/usr/include/c++/15/bits/shared_ptr_atomic.h + mdp:/usr/include/c++/15/bits/shared_ptr_base.h + mdp:/usr/include/c++/15/bits/specfun.h + mdp:/usr/include/c++/15/bits/sstream.tcc + mdp:/usr/include/c++/15/bits/std_abs.h + mdp:/usr/include/c++/15/bits/std_function.h + mdp:/usr/include/c++/15/bits/std_mutex.h + mdp:/usr/include/c++/15/bits/stl_algo.h + mdp:/usr/include/c++/15/bits/stl_algobase.h + mdp:/usr/include/c++/15/bits/stl_bvector.h + mdp:/usr/include/c++/15/bits/stl_construct.h + mdp:/usr/include/c++/15/bits/stl_function.h + mdp:/usr/include/c++/15/bits/stl_heap.h + mdp:/usr/include/c++/15/bits/stl_iterator.h + mdp:/usr/include/c++/15/bits/stl_iterator_base_funcs.h + mdp:/usr/include/c++/15/bits/stl_iterator_base_types.h + mdp:/usr/include/c++/15/bits/stl_list.h + mdp:/usr/include/c++/15/bits/stl_map.h + mdp:/usr/include/c++/15/bits/stl_multimap.h + mdp:/usr/include/c++/15/bits/stl_multiset.h + mdp:/usr/include/c++/15/bits/stl_numeric.h + mdp:/usr/include/c++/15/bits/stl_pair.h + mdp:/usr/include/c++/15/bits/stl_raw_storage_iter.h + mdp:/usr/include/c++/15/bits/stl_relops.h + mdp:/usr/include/c++/15/bits/stl_set.h + mdp:/usr/include/c++/15/bits/stl_tempbuf.h + mdp:/usr/include/c++/15/bits/stl_tree.h + mdp:/usr/include/c++/15/bits/stl_uninitialized.h + mdp:/usr/include/c++/15/bits/stl_vector.h + mdp:/usr/include/c++/15/bits/stream_iterator.h + mdp:/usr/include/c++/15/bits/streambuf.tcc + mdp:/usr/include/c++/15/bits/streambuf_iterator.h + mdp:/usr/include/c++/15/bits/string_view.tcc + mdp:/usr/include/c++/15/bits/stringfwd.h + mdp:/usr/include/c++/15/bits/uniform_int_dist.h + mdp:/usr/include/c++/15/bits/unique_ptr.h + mdp:/usr/include/c++/15/bits/unordered_map.h + mdp:/usr/include/c++/15/bits/unordered_set.h + mdp:/usr/include/c++/15/bits/uses_allocator.h + mdp:/usr/include/c++/15/bits/uses_allocator_args.h + mdp:/usr/include/c++/15/bits/utility.h + mdp:/usr/include/c++/15/bits/vector.tcc + mdp:/usr/include/c++/15/bits/version.h + mdp:/usr/include/c++/15/cassert + mdp:/usr/include/c++/15/cctype + mdp:/usr/include/c++/15/cerrno + mdp:/usr/include/c++/15/charconv + mdp:/usr/include/c++/15/chrono + mdp:/usr/include/c++/15/climits + mdp:/usr/include/c++/15/clocale + mdp:/usr/include/c++/15/cmath + mdp:/usr/include/c++/15/compare + mdp:/usr/include/c++/15/concepts + mdp:/usr/include/c++/15/cstddef + mdp:/usr/include/c++/15/cstdint + mdp:/usr/include/c++/15/cstdio + mdp:/usr/include/c++/15/cstdlib + mdp:/usr/include/c++/15/cstring + mdp:/usr/include/c++/15/ctime + mdp:/usr/include/c++/15/cwchar + mdp:/usr/include/c++/15/cwctype + mdp:/usr/include/c++/15/debug/assertions.h + mdp:/usr/include/c++/15/debug/debug.h + mdp:/usr/include/c++/15/exception + mdp:/usr/include/c++/15/ext/aligned_buffer.h + mdp:/usr/include/c++/15/ext/alloc_traits.h + mdp:/usr/include/c++/15/ext/atomicity.h + mdp:/usr/include/c++/15/ext/concurrence.h + mdp:/usr/include/c++/15/ext/numeric_traits.h + mdp:/usr/include/c++/15/ext/string_conversions.h + mdp:/usr/include/c++/15/ext/type_traits.h + mdp:/usr/include/c++/15/filesystem + mdp:/usr/include/c++/15/format + mdp:/usr/include/c++/15/functional + mdp:/usr/include/c++/15/initializer_list + mdp:/usr/include/c++/15/iomanip + mdp:/usr/include/c++/15/ios + mdp:/usr/include/c++/15/iosfwd + mdp:/usr/include/c++/15/istream + mdp:/usr/include/c++/15/iterator + mdp:/usr/include/c++/15/limits + mdp:/usr/include/c++/15/list + mdp:/usr/include/c++/15/locale + mdp:/usr/include/c++/15/map + mdp:/usr/include/c++/15/memory + mdp:/usr/include/c++/15/new + mdp:/usr/include/c++/15/numeric + mdp:/usr/include/c++/15/optional + mdp:/usr/include/c++/15/ostream + mdp:/usr/include/c++/15/pstl/execution_defs.h + mdp:/usr/include/c++/15/pstl/glue_numeric_defs.h + mdp:/usr/include/c++/15/pstl/pstl_config.h + mdp:/usr/include/c++/15/ratio + mdp:/usr/include/c++/15/set + mdp:/usr/include/c++/15/sstream + mdp:/usr/include/c++/15/stdexcept + mdp:/usr/include/c++/15/streambuf + mdp:/usr/include/c++/15/string + mdp:/usr/include/c++/15/string_view + mdp:/usr/include/c++/15/system_error + mdp:/usr/include/c++/15/tr1/bessel_function.tcc + mdp:/usr/include/c++/15/tr1/beta_function.tcc + mdp:/usr/include/c++/15/tr1/ell_integral.tcc + mdp:/usr/include/c++/15/tr1/exp_integral.tcc + mdp:/usr/include/c++/15/tr1/gamma.tcc + mdp:/usr/include/c++/15/tr1/hypergeometric.tcc + mdp:/usr/include/c++/15/tr1/legendre_function.tcc + mdp:/usr/include/c++/15/tr1/modified_bessel_func.tcc + mdp:/usr/include/c++/15/tr1/poly_hermite.tcc + mdp:/usr/include/c++/15/tr1/poly_laguerre.tcc + mdp:/usr/include/c++/15/tr1/riemann_zeta.tcc + mdp:/usr/include/c++/15/tr1/special_function_util.h + mdp:/usr/include/c++/15/tuple + mdp:/usr/include/c++/15/type_traits + mdp:/usr/include/c++/15/typeinfo + mdp:/usr/include/c++/15/unordered_map + mdp:/usr/include/c++/15/unordered_set + mdp:/usr/include/c++/15/utility + mdp:/usr/include/c++/15/variant + mdp:/usr/include/c++/15/vector + mdp:/usr/include/c++/15/version + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/atomic_word.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++allocator.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++config.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++locale.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/cpu_defines.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/ctype_base.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/ctype_inline.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/error_constants.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/gthr-default.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/gthr.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/messages_members.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/os_defines.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/time_members.h + mdp:/usr/include/ctype.h + mdp:/usr/include/endian.h + mdp:/usr/include/errno.h + mdp:/usr/include/features-time64.h + mdp:/usr/include/features.h + mdp:/usr/include/gnu/stubs-64.h + mdp:/usr/include/gnu/stubs.h + mdp:/usr/include/libintl.h + mdp:/usr/include/limits.h + mdp:/usr/include/linux/close_range.h + mdp:/usr/include/linux/errno.h + mdp:/usr/include/linux/limits.h + mdp:/usr/include/linux/posix_types.h + mdp:/usr/include/linux/sched/types.h + mdp:/usr/include/linux/stddef.h + mdp:/usr/include/linux/types.h + mdp:/usr/include/locale.h + mdp:/usr/include/pthread.h + mdp:/usr/include/qt6/QtCore/QAbstractListModel + mdp:/usr/include/qt6/QtCore/QDateTime + mdp:/usr/include/qt6/QtCore/QFileInfo + mdp:/usr/include/qt6/QtCore/QHash + mdp:/usr/include/qt6/QtCore/QObject + mdp:/usr/include/qt6/QtCore/QString + mdp:/usr/include/qt6/QtCore/QStringList + mdp:/usr/include/qt6/QtCore/QTimer + mdp:/usr/include/qt6/QtCore/QVariant + mdp:/usr/include/qt6/QtCore/QVector + mdp:/usr/include/qt6/QtCore/q17memory.h + mdp:/usr/include/qt6/QtCore/q20functional.h + mdp:/usr/include/qt6/QtCore/q20iterator.h + mdp:/usr/include/qt6/QtCore/q20memory.h + mdp:/usr/include/qt6/QtCore/q20type_traits.h + mdp:/usr/include/qt6/QtCore/q20utility.h + mdp:/usr/include/qt6/QtCore/q23type_traits.h + mdp:/usr/include/qt6/QtCore/q23utility.h + mdp:/usr/include/qt6/QtCore/qabstracteventdispatcher.h + mdp:/usr/include/qt6/QtCore/qabstractitemmodel.h + mdp:/usr/include/qt6/QtCore/qalgorithms.h + mdp:/usr/include/qt6/QtCore/qalloc.h + mdp:/usr/include/qt6/QtCore/qanystringview.h + mdp:/usr/include/qt6/QtCore/qarraydata.h + mdp:/usr/include/qt6/QtCore/qarraydataops.h + mdp:/usr/include/qt6/QtCore/qarraydatapointer.h + mdp:/usr/include/qt6/QtCore/qassert.h + mdp:/usr/include/qt6/QtCore/qatomic.h + mdp:/usr/include/qt6/QtCore/qatomic_cxx11.h + mdp:/usr/include/qt6/QtCore/qbasicatomic.h + mdp:/usr/include/qt6/QtCore/qbasictimer.h + mdp:/usr/include/qt6/QtCore/qbindingstorage.h + mdp:/usr/include/qt6/QtCore/qbytearray.h + mdp:/usr/include/qt6/QtCore/qbytearrayalgorithms.h + mdp:/usr/include/qt6/QtCore/qbytearraylist.h + mdp:/usr/include/qt6/QtCore/qbytearrayview.h + mdp:/usr/include/qt6/QtCore/qcalendar.h + mdp:/usr/include/qt6/QtCore/qchar.h + mdp:/usr/include/qt6/QtCore/qcompare.h + mdp:/usr/include/qt6/QtCore/qcompare_impl.h + mdp:/usr/include/qt6/QtCore/qcomparehelpers.h + mdp:/usr/include/qt6/QtCore/qcompilerdetection.h + mdp:/usr/include/qt6/QtCore/qconfig-64.h + mdp:/usr/include/qt6/QtCore/qconfig.h + mdp:/usr/include/qt6/QtCore/qconstructormacros.h + mdp:/usr/include/qt6/QtCore/qcontainerfwd.h + mdp:/usr/include/qt6/QtCore/qcontainerinfo.h + mdp:/usr/include/qt6/QtCore/qcontainertools_impl.h + mdp:/usr/include/qt6/QtCore/qcontiguouscache.h + mdp:/usr/include/qt6/QtCore/qdarwinhelpers.h + mdp:/usr/include/qt6/QtCore/qdatastream.h + mdp:/usr/include/qt6/QtCore/qdatetime.h + mdp:/usr/include/qt6/QtCore/qdeadlinetimer.h + mdp:/usr/include/qt6/QtCore/qdebug.h + mdp:/usr/include/qt6/QtCore/qeventloop.h + mdp:/usr/include/qt6/QtCore/qexceptionhandling.h + mdp:/usr/include/qt6/QtCore/qfile.h + mdp:/usr/include/qt6/QtCore/qfiledevice.h + mdp:/usr/include/qt6/QtCore/qfileinfo.h + mdp:/usr/include/qt6/QtCore/qflags.h + mdp:/usr/include/qt6/QtCore/qfloat16.h + mdp:/usr/include/qt6/QtCore/qforeach.h + mdp:/usr/include/qt6/QtCore/qfunctionaltools_impl.h + mdp:/usr/include/qt6/QtCore/qfunctionpointer.h + mdp:/usr/include/qt6/QtCore/qgenericatomic.h + mdp:/usr/include/qt6/QtCore/qglobal.h + mdp:/usr/include/qt6/QtCore/qglobalstatic.h + mdp:/usr/include/qt6/QtCore/qhash.h + mdp:/usr/include/qt6/QtCore/qhashfunctions.h + mdp:/usr/include/qt6/QtCore/qiodevice.h + mdp:/usr/include/qt6/QtCore/qiodevicebase.h + mdp:/usr/include/qt6/QtCore/qiterable.h + mdp:/usr/include/qt6/QtCore/qiterator.h + mdp:/usr/include/qt6/QtCore/qlatin1stringview.h + mdp:/usr/include/qt6/QtCore/qlist.h + mdp:/usr/include/qt6/QtCore/qlocale.h + mdp:/usr/include/qt6/QtCore/qlogging.h + mdp:/usr/include/qt6/QtCore/qmalloc.h + mdp:/usr/include/qt6/QtCore/qmap.h + mdp:/usr/include/qt6/QtCore/qmath.h + mdp:/usr/include/qt6/QtCore/qmetacontainer.h + mdp:/usr/include/qt6/QtCore/qmetaobject.h + mdp:/usr/include/qt6/QtCore/qmetatype.h + mdp:/usr/include/qt6/QtCore/qminmax.h + mdp:/usr/include/qt6/QtCore/qnamespace.h + mdp:/usr/include/qt6/QtCore/qnumeric.h + mdp:/usr/include/qt6/QtCore/qobject.h + mdp:/usr/include/qt6/QtCore/qobject_impl.h + mdp:/usr/include/qt6/QtCore/qobjectdefs.h + mdp:/usr/include/qt6/QtCore/qobjectdefs_impl.h + mdp:/usr/include/qt6/QtCore/qoverload.h + mdp:/usr/include/qt6/QtCore/qpair.h + mdp:/usr/include/qt6/QtCore/qprocessordetection.h + mdp:/usr/include/qt6/QtCore/qrefcount.h + mdp:/usr/include/qt6/QtCore/qscopedpointer.h + mdp:/usr/include/qt6/QtCore/qscopeguard.h + mdp:/usr/include/qt6/QtCore/qset.h + mdp:/usr/include/qt6/QtCore/qshareddata.h + mdp:/usr/include/qt6/QtCore/qshareddata_impl.h + mdp:/usr/include/qt6/QtCore/qsharedpointer.h + mdp:/usr/include/qt6/QtCore/qsharedpointer_impl.h + mdp:/usr/include/qt6/QtCore/qspan.h + mdp:/usr/include/qt6/QtCore/qstdlibdetection.h + mdp:/usr/include/qt6/QtCore/qstring.h + mdp:/usr/include/qt6/QtCore/qstringalgorithms.h + mdp:/usr/include/qt6/QtCore/qstringbuilder.h + mdp:/usr/include/qt6/QtCore/qstringconverter.h + mdp:/usr/include/qt6/QtCore/qstringconverter_base.h + mdp:/usr/include/qt6/QtCore/qstringfwd.h + mdp:/usr/include/qt6/QtCore/qstringlist.h + mdp:/usr/include/qt6/QtCore/qstringmatcher.h + mdp:/usr/include/qt6/QtCore/qstringtokenizer.h + mdp:/usr/include/qt6/QtCore/qstringview.h + mdp:/usr/include/qt6/QtCore/qswap.h + mdp:/usr/include/qt6/QtCore/qsysinfo.h + mdp:/usr/include/qt6/QtCore/qsystemdetection.h + mdp:/usr/include/qt6/QtCore/qtaggedpointer.h + mdp:/usr/include/qt6/QtCore/qtclasshelpermacros.h + mdp:/usr/include/qt6/QtCore/qtconfiginclude.h + mdp:/usr/include/qt6/QtCore/qtconfigmacros.h + mdp:/usr/include/qt6/QtCore/qtcore-config.h + mdp:/usr/include/qt6/QtCore/qtcoreexports.h + mdp:/usr/include/qt6/QtCore/qtcoreglobal.h + mdp:/usr/include/qt6/QtCore/qtdeprecationdefinitions.h + mdp:/usr/include/qt6/QtCore/qtdeprecationmarkers.h + mdp:/usr/include/qt6/QtCore/qtenvironmentvariables.h + mdp:/usr/include/qt6/QtCore/qtextstream.h + mdp:/usr/include/qt6/QtCore/qtformat_impl.h + mdp:/usr/include/qt6/QtCore/qtimer.h + mdp:/usr/include/qt6/QtCore/qtimezone.h + mdp:/usr/include/qt6/QtCore/qtmetamacros.h + mdp:/usr/include/qt6/QtCore/qtnoop.h + mdp:/usr/include/qt6/QtCore/qtpreprocessorsupport.h + mdp:/usr/include/qt6/QtCore/qtresource.h + mdp:/usr/include/qt6/QtCore/qttranslation.h + mdp:/usr/include/qt6/QtCore/qttypetraits.h + mdp:/usr/include/qt6/QtCore/qtversion.h + mdp:/usr/include/qt6/QtCore/qtversionchecks.h + mdp:/usr/include/qt6/QtCore/qtypeinfo.h + mdp:/usr/include/qt6/QtCore/qtypes.h + mdp:/usr/include/qt6/QtCore/qutf8stringview.h + mdp:/usr/include/qt6/QtCore/qvariant.h + mdp:/usr/include/qt6/QtCore/qvarlengtharray.h + mdp:/usr/include/qt6/QtCore/qvector.h + mdp:/usr/include/qt6/QtCore/qversiontagging.h + mdp:/usr/include/qt6/QtCore/qxptype_traits.h + mdp:/usr/include/qt6/QtCore/qyieldcpu.h + mdp:/usr/include/qt6/QtSql/QSqlDatabase + mdp:/usr/include/qt6/QtSql/QSqlError + mdp:/usr/include/qt6/QtSql/QSqlQuery + mdp:/usr/include/qt6/QtSql/qsqldatabase.h + mdp:/usr/include/qt6/QtSql/qsqlerror.h + mdp:/usr/include/qt6/QtSql/qsqlquery.h + mdp:/usr/include/qt6/QtSql/qtsql-config.h + mdp:/usr/include/qt6/QtSql/qtsqlexports.h + mdp:/usr/include/qt6/QtSql/qtsqlglobal.h + mdp:/usr/include/sched.h + mdp:/usr/include/stdc-predef.h + mdp:/usr/include/stdint.h + mdp:/usr/include/stdio.h + mdp:/usr/include/stdlib.h + mdp:/usr/include/string.h + mdp:/usr/include/strings.h + mdp:/usr/include/sys/cdefs.h + mdp:/usr/include/sys/select.h + mdp:/usr/include/sys/single_threaded.h + mdp:/usr/include/sys/syscall.h + mdp:/usr/include/sys/types.h + mdp:/usr/include/syscall.h + mdp:/usr/include/time.h + mdp:/usr/include/unistd.h + mdp:/usr/include/wchar.h + mdp:/usr/include/wctype.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stdarg.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stdbool.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stddef.h +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/assets_model.h + mmc:Q_OBJECT + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/kassetmanagerqt_autogen/moc_predefs.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/assets_model.h + mdp:/usr/include/alloca.h + mdp:/usr/include/asm-generic/bitsperlong.h + mdp:/usr/include/asm-generic/errno-base.h + mdp:/usr/include/asm-generic/errno.h + mdp:/usr/include/asm-generic/int-ll64.h + mdp:/usr/include/asm-generic/posix_types.h + mdp:/usr/include/asm-generic/types.h + mdp:/usr/include/asm/bitsperlong.h + mdp:/usr/include/asm/errno.h + mdp:/usr/include/asm/posix_types.h + mdp:/usr/include/asm/posix_types_64.h + mdp:/usr/include/asm/types.h + mdp:/usr/include/asm/unistd.h + mdp:/usr/include/asm/unistd_64.h + mdp:/usr/include/assert.h + mdp:/usr/include/bits/atomic_wide_counter.h + mdp:/usr/include/bits/byteswap.h + mdp:/usr/include/bits/confname.h + mdp:/usr/include/bits/cpu-set.h + mdp:/usr/include/bits/endian.h + mdp:/usr/include/bits/endianness.h + mdp:/usr/include/bits/environments.h + mdp:/usr/include/bits/errno.h + mdp:/usr/include/bits/floatn-common.h + mdp:/usr/include/bits/floatn.h + mdp:/usr/include/bits/getopt_core.h + mdp:/usr/include/bits/getopt_posix.h + mdp:/usr/include/bits/libc-header-start.h + mdp:/usr/include/bits/local_lim.h + mdp:/usr/include/bits/locale.h + mdp:/usr/include/bits/long-double.h + mdp:/usr/include/bits/posix1_lim.h + mdp:/usr/include/bits/posix2_lim.h + mdp:/usr/include/bits/posix_opt.h + mdp:/usr/include/bits/pthread_stack_min-dynamic.h + mdp:/usr/include/bits/pthreadtypes-arch.h + mdp:/usr/include/bits/pthreadtypes.h + mdp:/usr/include/bits/sched.h + mdp:/usr/include/bits/select.h + mdp:/usr/include/bits/setjmp.h + mdp:/usr/include/bits/stdint-intn.h + mdp:/usr/include/bits/stdint-least.h + mdp:/usr/include/bits/stdint-uintn.h + mdp:/usr/include/bits/stdio_lim.h + mdp:/usr/include/bits/stdlib-float.h + mdp:/usr/include/bits/struct_mutex.h + mdp:/usr/include/bits/struct_rwlock.h + mdp:/usr/include/bits/syscall.h + mdp:/usr/include/bits/thread-shared-types.h + mdp:/usr/include/bits/time.h + mdp:/usr/include/bits/time64.h + mdp:/usr/include/bits/timesize.h + mdp:/usr/include/bits/timex.h + mdp:/usr/include/bits/types.h + mdp:/usr/include/bits/types/FILE.h + mdp:/usr/include/bits/types/__FILE.h + mdp:/usr/include/bits/types/__fpos64_t.h + mdp:/usr/include/bits/types/__fpos_t.h + mdp:/usr/include/bits/types/__locale_t.h + mdp:/usr/include/bits/types/__mbstate_t.h + mdp:/usr/include/bits/types/__sigset_t.h + mdp:/usr/include/bits/types/clock_t.h + mdp:/usr/include/bits/types/clockid_t.h + mdp:/usr/include/bits/types/cookie_io_functions_t.h + mdp:/usr/include/bits/types/error_t.h + mdp:/usr/include/bits/types/locale_t.h + mdp:/usr/include/bits/types/mbstate_t.h + mdp:/usr/include/bits/types/sigset_t.h + mdp:/usr/include/bits/types/struct_FILE.h + mdp:/usr/include/bits/types/struct___jmp_buf_tag.h + mdp:/usr/include/bits/types/struct_itimerspec.h + mdp:/usr/include/bits/types/struct_sched_param.h + mdp:/usr/include/bits/types/struct_timespec.h + mdp:/usr/include/bits/types/struct_timeval.h + mdp:/usr/include/bits/types/struct_tm.h + mdp:/usr/include/bits/types/time_t.h + mdp:/usr/include/bits/types/timer_t.h + mdp:/usr/include/bits/types/wint_t.h + mdp:/usr/include/bits/typesizes.h + mdp:/usr/include/bits/uintn-identity.h + mdp:/usr/include/bits/uio_lim.h + mdp:/usr/include/bits/unistd_ext.h + mdp:/usr/include/bits/waitflags.h + mdp:/usr/include/bits/waitstatus.h + mdp:/usr/include/bits/wchar.h + mdp:/usr/include/bits/wctype-wchar.h + mdp:/usr/include/bits/wordsize.h + mdp:/usr/include/bits/xopen_lim.h + mdp:/usr/include/c++/15/algorithm + mdp:/usr/include/c++/15/array + mdp:/usr/include/c++/15/atomic + mdp:/usr/include/c++/15/backward/auto_ptr.h + mdp:/usr/include/c++/15/backward/binders.h + mdp:/usr/include/c++/15/bit + mdp:/usr/include/c++/15/bits/algorithmfwd.h + mdp:/usr/include/c++/15/bits/align.h + mdp:/usr/include/c++/15/bits/alloc_traits.h + mdp:/usr/include/c++/15/bits/allocated_ptr.h + mdp:/usr/include/c++/15/bits/allocator.h + mdp:/usr/include/c++/15/bits/atomic_base.h + mdp:/usr/include/c++/15/bits/atomic_lockfree_defines.h + mdp:/usr/include/c++/15/bits/atomic_wait.h + mdp:/usr/include/c++/15/bits/basic_ios.h + mdp:/usr/include/c++/15/bits/basic_ios.tcc + mdp:/usr/include/c++/15/bits/basic_string.h + mdp:/usr/include/c++/15/bits/basic_string.tcc + mdp:/usr/include/c++/15/bits/char_traits.h + mdp:/usr/include/c++/15/bits/charconv.h + mdp:/usr/include/c++/15/bits/chrono.h + mdp:/usr/include/c++/15/bits/chrono_io.h + mdp:/usr/include/c++/15/bits/codecvt.h + mdp:/usr/include/c++/15/bits/concept_check.h + mdp:/usr/include/c++/15/bits/cpp_type_traits.h + mdp:/usr/include/c++/15/bits/cxxabi_forced.h + mdp:/usr/include/c++/15/bits/cxxabi_init_exception.h + mdp:/usr/include/c++/15/bits/enable_special_members.h + mdp:/usr/include/c++/15/bits/erase_if.h + mdp:/usr/include/c++/15/bits/exception.h + mdp:/usr/include/c++/15/bits/exception_defines.h + mdp:/usr/include/c++/15/bits/exception_ptr.h + mdp:/usr/include/c++/15/bits/functexcept.h + mdp:/usr/include/c++/15/bits/functional_hash.h + mdp:/usr/include/c++/15/bits/hash_bytes.h + mdp:/usr/include/c++/15/bits/hashtable.h + mdp:/usr/include/c++/15/bits/hashtable_policy.h + mdp:/usr/include/c++/15/bits/invoke.h + mdp:/usr/include/c++/15/bits/ios_base.h + mdp:/usr/include/c++/15/bits/istream.tcc + mdp:/usr/include/c++/15/bits/iterator_concepts.h + mdp:/usr/include/c++/15/bits/list.tcc + mdp:/usr/include/c++/15/bits/locale_classes.h + mdp:/usr/include/c++/15/bits/locale_classes.tcc + mdp:/usr/include/c++/15/bits/locale_conv.h + mdp:/usr/include/c++/15/bits/locale_facets.h + mdp:/usr/include/c++/15/bits/locale_facets.tcc + mdp:/usr/include/c++/15/bits/locale_facets_nonio.h + mdp:/usr/include/c++/15/bits/locale_facets_nonio.tcc + mdp:/usr/include/c++/15/bits/localefwd.h + mdp:/usr/include/c++/15/bits/max_size_type.h + mdp:/usr/include/c++/15/bits/memory_resource.h + mdp:/usr/include/c++/15/bits/memoryfwd.h + mdp:/usr/include/c++/15/bits/move.h + mdp:/usr/include/c++/15/bits/nested_exception.h + mdp:/usr/include/c++/15/bits/new_allocator.h + mdp:/usr/include/c++/15/bits/node_handle.h + mdp:/usr/include/c++/15/bits/ostream.h + mdp:/usr/include/c++/15/bits/ostream.tcc + mdp:/usr/include/c++/15/bits/ostream_insert.h + mdp:/usr/include/c++/15/bits/parse_numbers.h + mdp:/usr/include/c++/15/bits/postypes.h + mdp:/usr/include/c++/15/bits/predefined_ops.h + mdp:/usr/include/c++/15/bits/ptr_traits.h + mdp:/usr/include/c++/15/bits/quoted_string.h + mdp:/usr/include/c++/15/bits/range_access.h + mdp:/usr/include/c++/15/bits/ranges_algo.h + mdp:/usr/include/c++/15/bits/ranges_algobase.h + mdp:/usr/include/c++/15/bits/ranges_base.h + mdp:/usr/include/c++/15/bits/ranges_cmp.h + mdp:/usr/include/c++/15/bits/ranges_uninitialized.h + mdp:/usr/include/c++/15/bits/ranges_util.h + mdp:/usr/include/c++/15/bits/refwrap.h + mdp:/usr/include/c++/15/bits/requires_hosted.h + mdp:/usr/include/c++/15/bits/shared_ptr.h + mdp:/usr/include/c++/15/bits/shared_ptr_atomic.h + mdp:/usr/include/c++/15/bits/shared_ptr_base.h + mdp:/usr/include/c++/15/bits/specfun.h + mdp:/usr/include/c++/15/bits/sstream.tcc + mdp:/usr/include/c++/15/bits/std_abs.h + mdp:/usr/include/c++/15/bits/std_function.h + mdp:/usr/include/c++/15/bits/std_mutex.h + mdp:/usr/include/c++/15/bits/stl_algo.h + mdp:/usr/include/c++/15/bits/stl_algobase.h + mdp:/usr/include/c++/15/bits/stl_bvector.h + mdp:/usr/include/c++/15/bits/stl_construct.h + mdp:/usr/include/c++/15/bits/stl_function.h + mdp:/usr/include/c++/15/bits/stl_heap.h + mdp:/usr/include/c++/15/bits/stl_iterator.h + mdp:/usr/include/c++/15/bits/stl_iterator_base_funcs.h + mdp:/usr/include/c++/15/bits/stl_iterator_base_types.h + mdp:/usr/include/c++/15/bits/stl_list.h + mdp:/usr/include/c++/15/bits/stl_map.h + mdp:/usr/include/c++/15/bits/stl_multimap.h + mdp:/usr/include/c++/15/bits/stl_multiset.h + mdp:/usr/include/c++/15/bits/stl_numeric.h + mdp:/usr/include/c++/15/bits/stl_pair.h + mdp:/usr/include/c++/15/bits/stl_raw_storage_iter.h + mdp:/usr/include/c++/15/bits/stl_relops.h + mdp:/usr/include/c++/15/bits/stl_set.h + mdp:/usr/include/c++/15/bits/stl_tempbuf.h + mdp:/usr/include/c++/15/bits/stl_tree.h + mdp:/usr/include/c++/15/bits/stl_uninitialized.h + mdp:/usr/include/c++/15/bits/stl_vector.h + mdp:/usr/include/c++/15/bits/stream_iterator.h + mdp:/usr/include/c++/15/bits/streambuf.tcc + mdp:/usr/include/c++/15/bits/streambuf_iterator.h + mdp:/usr/include/c++/15/bits/string_view.tcc + mdp:/usr/include/c++/15/bits/stringfwd.h + mdp:/usr/include/c++/15/bits/uniform_int_dist.h + mdp:/usr/include/c++/15/bits/unique_ptr.h + mdp:/usr/include/c++/15/bits/unordered_map.h + mdp:/usr/include/c++/15/bits/unordered_set.h + mdp:/usr/include/c++/15/bits/uses_allocator.h + mdp:/usr/include/c++/15/bits/uses_allocator_args.h + mdp:/usr/include/c++/15/bits/utility.h + mdp:/usr/include/c++/15/bits/vector.tcc + mdp:/usr/include/c++/15/bits/version.h + mdp:/usr/include/c++/15/cassert + mdp:/usr/include/c++/15/cctype + mdp:/usr/include/c++/15/cerrno + mdp:/usr/include/c++/15/charconv + mdp:/usr/include/c++/15/chrono + mdp:/usr/include/c++/15/climits + mdp:/usr/include/c++/15/clocale + mdp:/usr/include/c++/15/cmath + mdp:/usr/include/c++/15/compare + mdp:/usr/include/c++/15/concepts + mdp:/usr/include/c++/15/cstddef + mdp:/usr/include/c++/15/cstdint + mdp:/usr/include/c++/15/cstdio + mdp:/usr/include/c++/15/cstdlib + mdp:/usr/include/c++/15/cstring + mdp:/usr/include/c++/15/ctime + mdp:/usr/include/c++/15/cwchar + mdp:/usr/include/c++/15/cwctype + mdp:/usr/include/c++/15/debug/assertions.h + mdp:/usr/include/c++/15/debug/debug.h + mdp:/usr/include/c++/15/exception + mdp:/usr/include/c++/15/ext/aligned_buffer.h + mdp:/usr/include/c++/15/ext/alloc_traits.h + mdp:/usr/include/c++/15/ext/atomicity.h + mdp:/usr/include/c++/15/ext/concurrence.h + mdp:/usr/include/c++/15/ext/numeric_traits.h + mdp:/usr/include/c++/15/ext/string_conversions.h + mdp:/usr/include/c++/15/ext/type_traits.h + mdp:/usr/include/c++/15/format + mdp:/usr/include/c++/15/functional + mdp:/usr/include/c++/15/initializer_list + mdp:/usr/include/c++/15/iomanip + mdp:/usr/include/c++/15/ios + mdp:/usr/include/c++/15/iosfwd + mdp:/usr/include/c++/15/istream + mdp:/usr/include/c++/15/iterator + mdp:/usr/include/c++/15/limits + mdp:/usr/include/c++/15/list + mdp:/usr/include/c++/15/locale + mdp:/usr/include/c++/15/map + mdp:/usr/include/c++/15/memory + mdp:/usr/include/c++/15/new + mdp:/usr/include/c++/15/numeric + mdp:/usr/include/c++/15/optional + mdp:/usr/include/c++/15/ostream + mdp:/usr/include/c++/15/pstl/execution_defs.h + mdp:/usr/include/c++/15/pstl/glue_numeric_defs.h + mdp:/usr/include/c++/15/pstl/pstl_config.h + mdp:/usr/include/c++/15/ratio + mdp:/usr/include/c++/15/set + mdp:/usr/include/c++/15/sstream + mdp:/usr/include/c++/15/stdexcept + mdp:/usr/include/c++/15/streambuf + mdp:/usr/include/c++/15/string + mdp:/usr/include/c++/15/string_view + mdp:/usr/include/c++/15/system_error + mdp:/usr/include/c++/15/tr1/bessel_function.tcc + mdp:/usr/include/c++/15/tr1/beta_function.tcc + mdp:/usr/include/c++/15/tr1/ell_integral.tcc + mdp:/usr/include/c++/15/tr1/exp_integral.tcc + mdp:/usr/include/c++/15/tr1/gamma.tcc + mdp:/usr/include/c++/15/tr1/hypergeometric.tcc + mdp:/usr/include/c++/15/tr1/legendre_function.tcc + mdp:/usr/include/c++/15/tr1/modified_bessel_func.tcc + mdp:/usr/include/c++/15/tr1/poly_hermite.tcc + mdp:/usr/include/c++/15/tr1/poly_laguerre.tcc + mdp:/usr/include/c++/15/tr1/riemann_zeta.tcc + mdp:/usr/include/c++/15/tr1/special_function_util.h + mdp:/usr/include/c++/15/tuple + mdp:/usr/include/c++/15/type_traits + mdp:/usr/include/c++/15/typeinfo + mdp:/usr/include/c++/15/unordered_map + mdp:/usr/include/c++/15/unordered_set + mdp:/usr/include/c++/15/utility + mdp:/usr/include/c++/15/variant + mdp:/usr/include/c++/15/vector + mdp:/usr/include/c++/15/version + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/atomic_word.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++allocator.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++config.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++locale.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/cpu_defines.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/ctype_base.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/ctype_inline.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/error_constants.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/gthr-default.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/gthr.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/messages_members.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/os_defines.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/time_members.h + mdp:/usr/include/ctype.h + mdp:/usr/include/endian.h + mdp:/usr/include/errno.h + mdp:/usr/include/features-time64.h + mdp:/usr/include/features.h + mdp:/usr/include/gnu/stubs-64.h + mdp:/usr/include/gnu/stubs.h + mdp:/usr/include/libintl.h + mdp:/usr/include/limits.h + mdp:/usr/include/linux/close_range.h + mdp:/usr/include/linux/errno.h + mdp:/usr/include/linux/limits.h + mdp:/usr/include/linux/posix_types.h + mdp:/usr/include/linux/sched/types.h + mdp:/usr/include/linux/stddef.h + mdp:/usr/include/linux/types.h + mdp:/usr/include/locale.h + mdp:/usr/include/pthread.h + mdp:/usr/include/qt6/QtCore/QAbstractListModel + mdp:/usr/include/qt6/QtCore/QDateTime + mdp:/usr/include/qt6/QtCore/QHash + mdp:/usr/include/qt6/QtCore/QMap + mdp:/usr/include/qt6/QtCore/QString + mdp:/usr/include/qt6/QtCore/QStringList + mdp:/usr/include/qt6/QtCore/QTimer + mdp:/usr/include/qt6/QtCore/QVariant + mdp:/usr/include/qt6/QtCore/QVariantMap + mdp:/usr/include/qt6/QtCore/QVector + mdp:/usr/include/qt6/QtCore/q17memory.h + mdp:/usr/include/qt6/QtCore/q20functional.h + mdp:/usr/include/qt6/QtCore/q20iterator.h + mdp:/usr/include/qt6/QtCore/q20memory.h + mdp:/usr/include/qt6/QtCore/q20type_traits.h + mdp:/usr/include/qt6/QtCore/q20utility.h + mdp:/usr/include/qt6/QtCore/q23type_traits.h + mdp:/usr/include/qt6/QtCore/q23utility.h + mdp:/usr/include/qt6/QtCore/qabstracteventdispatcher.h + mdp:/usr/include/qt6/QtCore/qabstractitemmodel.h + mdp:/usr/include/qt6/QtCore/qalgorithms.h + mdp:/usr/include/qt6/QtCore/qalloc.h + mdp:/usr/include/qt6/QtCore/qanystringview.h + mdp:/usr/include/qt6/QtCore/qarraydata.h + mdp:/usr/include/qt6/QtCore/qarraydataops.h + mdp:/usr/include/qt6/QtCore/qarraydatapointer.h + mdp:/usr/include/qt6/QtCore/qassert.h + mdp:/usr/include/qt6/QtCore/qatomic.h + mdp:/usr/include/qt6/QtCore/qatomic_cxx11.h + mdp:/usr/include/qt6/QtCore/qbasicatomic.h + mdp:/usr/include/qt6/QtCore/qbasictimer.h + mdp:/usr/include/qt6/QtCore/qbindingstorage.h + mdp:/usr/include/qt6/QtCore/qbytearray.h + mdp:/usr/include/qt6/QtCore/qbytearrayalgorithms.h + mdp:/usr/include/qt6/QtCore/qbytearraylist.h + mdp:/usr/include/qt6/QtCore/qbytearrayview.h + mdp:/usr/include/qt6/QtCore/qcalendar.h + mdp:/usr/include/qt6/QtCore/qchar.h + mdp:/usr/include/qt6/QtCore/qcompare.h + mdp:/usr/include/qt6/QtCore/qcompare_impl.h + mdp:/usr/include/qt6/QtCore/qcomparehelpers.h + mdp:/usr/include/qt6/QtCore/qcompilerdetection.h + mdp:/usr/include/qt6/QtCore/qconfig-64.h + mdp:/usr/include/qt6/QtCore/qconfig.h + mdp:/usr/include/qt6/QtCore/qconstructormacros.h + mdp:/usr/include/qt6/QtCore/qcontainerfwd.h + mdp:/usr/include/qt6/QtCore/qcontainerinfo.h + mdp:/usr/include/qt6/QtCore/qcontainertools_impl.h + mdp:/usr/include/qt6/QtCore/qcontiguouscache.h + mdp:/usr/include/qt6/QtCore/qdarwinhelpers.h + mdp:/usr/include/qt6/QtCore/qdatastream.h + mdp:/usr/include/qt6/QtCore/qdatetime.h + mdp:/usr/include/qt6/QtCore/qdeadlinetimer.h + mdp:/usr/include/qt6/QtCore/qdebug.h + mdp:/usr/include/qt6/QtCore/qeventloop.h + mdp:/usr/include/qt6/QtCore/qexceptionhandling.h + mdp:/usr/include/qt6/QtCore/qflags.h + mdp:/usr/include/qt6/QtCore/qfloat16.h + mdp:/usr/include/qt6/QtCore/qforeach.h + mdp:/usr/include/qt6/QtCore/qfunctionaltools_impl.h + mdp:/usr/include/qt6/QtCore/qfunctionpointer.h + mdp:/usr/include/qt6/QtCore/qgenericatomic.h + mdp:/usr/include/qt6/QtCore/qglobal.h + mdp:/usr/include/qt6/QtCore/qglobalstatic.h + mdp:/usr/include/qt6/QtCore/qhash.h + mdp:/usr/include/qt6/QtCore/qhashfunctions.h + mdp:/usr/include/qt6/QtCore/qiodevicebase.h + mdp:/usr/include/qt6/QtCore/qiterable.h + mdp:/usr/include/qt6/QtCore/qiterator.h + mdp:/usr/include/qt6/QtCore/qlatin1stringview.h + mdp:/usr/include/qt6/QtCore/qlist.h + mdp:/usr/include/qt6/QtCore/qlocale.h + mdp:/usr/include/qt6/QtCore/qlogging.h + mdp:/usr/include/qt6/QtCore/qmalloc.h + mdp:/usr/include/qt6/QtCore/qmap.h + mdp:/usr/include/qt6/QtCore/qmath.h + mdp:/usr/include/qt6/QtCore/qmetacontainer.h + mdp:/usr/include/qt6/QtCore/qmetaobject.h + mdp:/usr/include/qt6/QtCore/qmetatype.h + mdp:/usr/include/qt6/QtCore/qminmax.h + mdp:/usr/include/qt6/QtCore/qnamespace.h + mdp:/usr/include/qt6/QtCore/qnumeric.h + mdp:/usr/include/qt6/QtCore/qobject.h + mdp:/usr/include/qt6/QtCore/qobject_impl.h + mdp:/usr/include/qt6/QtCore/qobjectdefs.h + mdp:/usr/include/qt6/QtCore/qobjectdefs_impl.h + mdp:/usr/include/qt6/QtCore/qoverload.h + mdp:/usr/include/qt6/QtCore/qpair.h + mdp:/usr/include/qt6/QtCore/qpointer.h + mdp:/usr/include/qt6/QtCore/qprocessordetection.h + mdp:/usr/include/qt6/QtCore/qrefcount.h + mdp:/usr/include/qt6/QtCore/qscopedpointer.h + mdp:/usr/include/qt6/QtCore/qscopeguard.h + mdp:/usr/include/qt6/QtCore/qset.h + mdp:/usr/include/qt6/QtCore/qshareddata.h + mdp:/usr/include/qt6/QtCore/qshareddata_impl.h + mdp:/usr/include/qt6/QtCore/qsharedpointer.h + mdp:/usr/include/qt6/QtCore/qsharedpointer_impl.h + mdp:/usr/include/qt6/QtCore/qspan.h + mdp:/usr/include/qt6/QtCore/qstdlibdetection.h + mdp:/usr/include/qt6/QtCore/qstring.h + mdp:/usr/include/qt6/QtCore/qstringalgorithms.h + mdp:/usr/include/qt6/QtCore/qstringbuilder.h + mdp:/usr/include/qt6/QtCore/qstringconverter.h + mdp:/usr/include/qt6/QtCore/qstringconverter_base.h + mdp:/usr/include/qt6/QtCore/qstringfwd.h + mdp:/usr/include/qt6/QtCore/qstringlist.h + mdp:/usr/include/qt6/QtCore/qstringmatcher.h + mdp:/usr/include/qt6/QtCore/qstringtokenizer.h + mdp:/usr/include/qt6/QtCore/qstringview.h + mdp:/usr/include/qt6/QtCore/qswap.h + mdp:/usr/include/qt6/QtCore/qsysinfo.h + mdp:/usr/include/qt6/QtCore/qsystemdetection.h + mdp:/usr/include/qt6/QtCore/qtaggedpointer.h + mdp:/usr/include/qt6/QtCore/qtclasshelpermacros.h + mdp:/usr/include/qt6/QtCore/qtconfiginclude.h + mdp:/usr/include/qt6/QtCore/qtconfigmacros.h + mdp:/usr/include/qt6/QtCore/qtcore-config.h + mdp:/usr/include/qt6/QtCore/qtcoreexports.h + mdp:/usr/include/qt6/QtCore/qtcoreglobal.h + mdp:/usr/include/qt6/QtCore/qtdeprecationdefinitions.h + mdp:/usr/include/qt6/QtCore/qtdeprecationmarkers.h + mdp:/usr/include/qt6/QtCore/qtenvironmentvariables.h + mdp:/usr/include/qt6/QtCore/qtextstream.h + mdp:/usr/include/qt6/QtCore/qtformat_impl.h + mdp:/usr/include/qt6/QtCore/qtimer.h + mdp:/usr/include/qt6/QtCore/qtmetamacros.h + mdp:/usr/include/qt6/QtCore/qtnoop.h + mdp:/usr/include/qt6/QtCore/qtpreprocessorsupport.h + mdp:/usr/include/qt6/QtCore/qtresource.h + mdp:/usr/include/qt6/QtCore/qttranslation.h + mdp:/usr/include/qt6/QtCore/qttypetraits.h + mdp:/usr/include/qt6/QtCore/qtversion.h + mdp:/usr/include/qt6/QtCore/qtversionchecks.h + mdp:/usr/include/qt6/QtCore/qtypeinfo.h + mdp:/usr/include/qt6/QtCore/qtyperevision.h + mdp:/usr/include/qt6/QtCore/qtypes.h + mdp:/usr/include/qt6/QtCore/qurl.h + mdp:/usr/include/qt6/QtCore/qutf8stringview.h + mdp:/usr/include/qt6/QtCore/qvariant.h + mdp:/usr/include/qt6/QtCore/qvariantmap.h + mdp:/usr/include/qt6/QtCore/qvarlengtharray.h + mdp:/usr/include/qt6/QtCore/qvector.h + mdp:/usr/include/qt6/QtCore/qversionnumber.h + mdp:/usr/include/qt6/QtCore/qversiontagging.h + mdp:/usr/include/qt6/QtCore/qxptype_traits.h + mdp:/usr/include/qt6/QtCore/qyieldcpu.h + mdp:/usr/include/qt6/QtNetwork/qtnetwork-config.h + mdp:/usr/include/qt6/QtNetwork/qtnetworkexports.h + mdp:/usr/include/qt6/QtNetwork/qtnetworkglobal.h + mdp:/usr/include/qt6/QtQml/qjsnumbercoercion.h + mdp:/usr/include/qt6/QtQml/qjsprimitivevalue.h + mdp:/usr/include/qt6/QtQml/qjsvalue.h + mdp:/usr/include/qt6/QtQml/qqml.h + mdp:/usr/include/qt6/QtQml/qqmllist.h + mdp:/usr/include/qt6/QtQml/qqmlparserstatus.h + mdp:/usr/include/qt6/QtQml/qqmlprivate.h + mdp:/usr/include/qt6/QtQml/qqmlpropertyvaluesource.h + mdp:/usr/include/qt6/QtQml/qqmlregistration.h + mdp:/usr/include/qt6/QtQml/qtqml-config.h + mdp:/usr/include/qt6/QtQml/qtqmlexports.h + mdp:/usr/include/qt6/QtQml/qtqmlglobal.h + mdp:/usr/include/qt6/QtQmlIntegration/qqmlintegration.h + mdp:/usr/include/sched.h + mdp:/usr/include/stdc-predef.h + mdp:/usr/include/stdint.h + mdp:/usr/include/stdio.h + mdp:/usr/include/stdlib.h + mdp:/usr/include/string.h + mdp:/usr/include/strings.h + mdp:/usr/include/sys/cdefs.h + mdp:/usr/include/sys/select.h + mdp:/usr/include/sys/single_threaded.h + mdp:/usr/include/sys/syscall.h + mdp:/usr/include/sys/types.h + mdp:/usr/include/syscall.h + mdp:/usr/include/time.h + mdp:/usr/include/unistd.h + mdp:/usr/include/wchar.h + mdp:/usr/include/wctype.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stdarg.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stdbool.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stddef.h +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/project_item_delegate.h + mmc:Q_OBJECT + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/kassetmanagerqt_autogen/moc_predefs.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/project_item_delegate.h + mdp:/usr/include/alloca.h + mdp:/usr/include/asm-generic/bitsperlong.h + mdp:/usr/include/asm-generic/errno-base.h + mdp:/usr/include/asm-generic/errno.h + mdp:/usr/include/asm-generic/int-ll64.h + mdp:/usr/include/asm-generic/posix_types.h + mdp:/usr/include/asm-generic/types.h + mdp:/usr/include/asm/bitsperlong.h + mdp:/usr/include/asm/errno.h + mdp:/usr/include/asm/posix_types.h + mdp:/usr/include/asm/posix_types_64.h + mdp:/usr/include/asm/types.h + mdp:/usr/include/asm/unistd.h + mdp:/usr/include/asm/unistd_64.h + mdp:/usr/include/assert.h + mdp:/usr/include/bits/atomic_wide_counter.h + mdp:/usr/include/bits/byteswap.h + mdp:/usr/include/bits/confname.h + mdp:/usr/include/bits/cpu-set.h + mdp:/usr/include/bits/endian.h + mdp:/usr/include/bits/endianness.h + mdp:/usr/include/bits/environments.h + mdp:/usr/include/bits/errno.h + mdp:/usr/include/bits/floatn-common.h + mdp:/usr/include/bits/floatn.h + mdp:/usr/include/bits/getopt_core.h + mdp:/usr/include/bits/getopt_posix.h + mdp:/usr/include/bits/libc-header-start.h + mdp:/usr/include/bits/local_lim.h + mdp:/usr/include/bits/locale.h + mdp:/usr/include/bits/long-double.h + mdp:/usr/include/bits/posix1_lim.h + mdp:/usr/include/bits/posix2_lim.h + mdp:/usr/include/bits/posix_opt.h + mdp:/usr/include/bits/pthread_stack_min-dynamic.h + mdp:/usr/include/bits/pthreadtypes-arch.h + mdp:/usr/include/bits/pthreadtypes.h + mdp:/usr/include/bits/sched.h + mdp:/usr/include/bits/select.h + mdp:/usr/include/bits/setjmp.h + mdp:/usr/include/bits/stdint-intn.h + mdp:/usr/include/bits/stdint-least.h + mdp:/usr/include/bits/stdint-uintn.h + mdp:/usr/include/bits/stdio_lim.h + mdp:/usr/include/bits/stdlib-float.h + mdp:/usr/include/bits/struct_mutex.h + mdp:/usr/include/bits/struct_rwlock.h + mdp:/usr/include/bits/syscall.h + mdp:/usr/include/bits/thread-shared-types.h + mdp:/usr/include/bits/time.h + mdp:/usr/include/bits/time64.h + mdp:/usr/include/bits/timesize.h + mdp:/usr/include/bits/timex.h + mdp:/usr/include/bits/types.h + mdp:/usr/include/bits/types/FILE.h + mdp:/usr/include/bits/types/__FILE.h + mdp:/usr/include/bits/types/__fpos64_t.h + mdp:/usr/include/bits/types/__fpos_t.h + mdp:/usr/include/bits/types/__locale_t.h + mdp:/usr/include/bits/types/__mbstate_t.h + mdp:/usr/include/bits/types/__sigset_t.h + mdp:/usr/include/bits/types/clock_t.h + mdp:/usr/include/bits/types/clockid_t.h + mdp:/usr/include/bits/types/cookie_io_functions_t.h + mdp:/usr/include/bits/types/error_t.h + mdp:/usr/include/bits/types/locale_t.h + mdp:/usr/include/bits/types/mbstate_t.h + mdp:/usr/include/bits/types/sigset_t.h + mdp:/usr/include/bits/types/struct_FILE.h + mdp:/usr/include/bits/types/struct___jmp_buf_tag.h + mdp:/usr/include/bits/types/struct_itimerspec.h + mdp:/usr/include/bits/types/struct_sched_param.h + mdp:/usr/include/bits/types/struct_timespec.h + mdp:/usr/include/bits/types/struct_timeval.h + mdp:/usr/include/bits/types/struct_tm.h + mdp:/usr/include/bits/types/time_t.h + mdp:/usr/include/bits/types/timer_t.h + mdp:/usr/include/bits/types/wint_t.h + mdp:/usr/include/bits/typesizes.h + mdp:/usr/include/bits/uintn-identity.h + mdp:/usr/include/bits/uio_lim.h + mdp:/usr/include/bits/unistd_ext.h + mdp:/usr/include/bits/waitflags.h + mdp:/usr/include/bits/waitstatus.h + mdp:/usr/include/bits/wchar.h + mdp:/usr/include/bits/wctype-wchar.h + mdp:/usr/include/bits/wordsize.h + mdp:/usr/include/bits/xopen_lim.h + mdp:/usr/include/c++/15/algorithm + mdp:/usr/include/c++/15/array + mdp:/usr/include/c++/15/atomic + mdp:/usr/include/c++/15/backward/auto_ptr.h + mdp:/usr/include/c++/15/backward/binders.h + mdp:/usr/include/c++/15/bit + mdp:/usr/include/c++/15/bits/algorithmfwd.h + mdp:/usr/include/c++/15/bits/align.h + mdp:/usr/include/c++/15/bits/alloc_traits.h + mdp:/usr/include/c++/15/bits/allocated_ptr.h + mdp:/usr/include/c++/15/bits/allocator.h + mdp:/usr/include/c++/15/bits/atomic_base.h + mdp:/usr/include/c++/15/bits/atomic_lockfree_defines.h + mdp:/usr/include/c++/15/bits/atomic_wait.h + mdp:/usr/include/c++/15/bits/basic_ios.h + mdp:/usr/include/c++/15/bits/basic_ios.tcc + mdp:/usr/include/c++/15/bits/basic_string.h + mdp:/usr/include/c++/15/bits/basic_string.tcc + mdp:/usr/include/c++/15/bits/char_traits.h + mdp:/usr/include/c++/15/bits/charconv.h + mdp:/usr/include/c++/15/bits/chrono.h + mdp:/usr/include/c++/15/bits/chrono_io.h + mdp:/usr/include/c++/15/bits/codecvt.h + mdp:/usr/include/c++/15/bits/concept_check.h + mdp:/usr/include/c++/15/bits/cpp_type_traits.h + mdp:/usr/include/c++/15/bits/cxxabi_forced.h + mdp:/usr/include/c++/15/bits/cxxabi_init_exception.h + mdp:/usr/include/c++/15/bits/enable_special_members.h + mdp:/usr/include/c++/15/bits/erase_if.h + mdp:/usr/include/c++/15/bits/exception.h + mdp:/usr/include/c++/15/bits/exception_defines.h + mdp:/usr/include/c++/15/bits/exception_ptr.h + mdp:/usr/include/c++/15/bits/functexcept.h + mdp:/usr/include/c++/15/bits/functional_hash.h + mdp:/usr/include/c++/15/bits/hash_bytes.h + mdp:/usr/include/c++/15/bits/hashtable.h + mdp:/usr/include/c++/15/bits/hashtable_policy.h + mdp:/usr/include/c++/15/bits/invoke.h + mdp:/usr/include/c++/15/bits/ios_base.h + mdp:/usr/include/c++/15/bits/istream.tcc + mdp:/usr/include/c++/15/bits/iterator_concepts.h + mdp:/usr/include/c++/15/bits/list.tcc + mdp:/usr/include/c++/15/bits/locale_classes.h + mdp:/usr/include/c++/15/bits/locale_classes.tcc + mdp:/usr/include/c++/15/bits/locale_conv.h + mdp:/usr/include/c++/15/bits/locale_facets.h + mdp:/usr/include/c++/15/bits/locale_facets.tcc + mdp:/usr/include/c++/15/bits/locale_facets_nonio.h + mdp:/usr/include/c++/15/bits/locale_facets_nonio.tcc + mdp:/usr/include/c++/15/bits/localefwd.h + mdp:/usr/include/c++/15/bits/max_size_type.h + mdp:/usr/include/c++/15/bits/memory_resource.h + mdp:/usr/include/c++/15/bits/memoryfwd.h + mdp:/usr/include/c++/15/bits/move.h + mdp:/usr/include/c++/15/bits/nested_exception.h + mdp:/usr/include/c++/15/bits/new_allocator.h + mdp:/usr/include/c++/15/bits/node_handle.h + mdp:/usr/include/c++/15/bits/ostream.h + mdp:/usr/include/c++/15/bits/ostream.tcc + mdp:/usr/include/c++/15/bits/ostream_insert.h + mdp:/usr/include/c++/15/bits/parse_numbers.h + mdp:/usr/include/c++/15/bits/postypes.h + mdp:/usr/include/c++/15/bits/predefined_ops.h + mdp:/usr/include/c++/15/bits/ptr_traits.h + mdp:/usr/include/c++/15/bits/quoted_string.h + mdp:/usr/include/c++/15/bits/range_access.h + mdp:/usr/include/c++/15/bits/ranges_algo.h + mdp:/usr/include/c++/15/bits/ranges_algobase.h + mdp:/usr/include/c++/15/bits/ranges_base.h + mdp:/usr/include/c++/15/bits/ranges_cmp.h + mdp:/usr/include/c++/15/bits/ranges_uninitialized.h + mdp:/usr/include/c++/15/bits/ranges_util.h + mdp:/usr/include/c++/15/bits/refwrap.h + mdp:/usr/include/c++/15/bits/requires_hosted.h + mdp:/usr/include/c++/15/bits/shared_ptr.h + mdp:/usr/include/c++/15/bits/shared_ptr_atomic.h + mdp:/usr/include/c++/15/bits/shared_ptr_base.h + mdp:/usr/include/c++/15/bits/specfun.h + mdp:/usr/include/c++/15/bits/sstream.tcc + mdp:/usr/include/c++/15/bits/std_abs.h + mdp:/usr/include/c++/15/bits/std_function.h + mdp:/usr/include/c++/15/bits/std_mutex.h + mdp:/usr/include/c++/15/bits/stl_algo.h + mdp:/usr/include/c++/15/bits/stl_algobase.h + mdp:/usr/include/c++/15/bits/stl_bvector.h + mdp:/usr/include/c++/15/bits/stl_construct.h + mdp:/usr/include/c++/15/bits/stl_function.h + mdp:/usr/include/c++/15/bits/stl_heap.h + mdp:/usr/include/c++/15/bits/stl_iterator.h + mdp:/usr/include/c++/15/bits/stl_iterator_base_funcs.h + mdp:/usr/include/c++/15/bits/stl_iterator_base_types.h + mdp:/usr/include/c++/15/bits/stl_list.h + mdp:/usr/include/c++/15/bits/stl_map.h + mdp:/usr/include/c++/15/bits/stl_multimap.h + mdp:/usr/include/c++/15/bits/stl_multiset.h + mdp:/usr/include/c++/15/bits/stl_numeric.h + mdp:/usr/include/c++/15/bits/stl_pair.h + mdp:/usr/include/c++/15/bits/stl_raw_storage_iter.h + mdp:/usr/include/c++/15/bits/stl_relops.h + mdp:/usr/include/c++/15/bits/stl_set.h + mdp:/usr/include/c++/15/bits/stl_tempbuf.h + mdp:/usr/include/c++/15/bits/stl_tree.h + mdp:/usr/include/c++/15/bits/stl_uninitialized.h + mdp:/usr/include/c++/15/bits/stl_vector.h + mdp:/usr/include/c++/15/bits/stream_iterator.h + mdp:/usr/include/c++/15/bits/streambuf.tcc + mdp:/usr/include/c++/15/bits/streambuf_iterator.h + mdp:/usr/include/c++/15/bits/string_view.tcc + mdp:/usr/include/c++/15/bits/stringfwd.h + mdp:/usr/include/c++/15/bits/uniform_int_dist.h + mdp:/usr/include/c++/15/bits/unique_ptr.h + mdp:/usr/include/c++/15/bits/unordered_map.h + mdp:/usr/include/c++/15/bits/unordered_set.h + mdp:/usr/include/c++/15/bits/uses_allocator.h + mdp:/usr/include/c++/15/bits/uses_allocator_args.h + mdp:/usr/include/c++/15/bits/utility.h + mdp:/usr/include/c++/15/bits/vector.tcc + mdp:/usr/include/c++/15/bits/version.h + mdp:/usr/include/c++/15/cassert + mdp:/usr/include/c++/15/cctype + mdp:/usr/include/c++/15/cerrno + mdp:/usr/include/c++/15/charconv + mdp:/usr/include/c++/15/chrono + mdp:/usr/include/c++/15/climits + mdp:/usr/include/c++/15/clocale + mdp:/usr/include/c++/15/cmath + mdp:/usr/include/c++/15/compare + mdp:/usr/include/c++/15/concepts + mdp:/usr/include/c++/15/cstddef + mdp:/usr/include/c++/15/cstdint + mdp:/usr/include/c++/15/cstdio + mdp:/usr/include/c++/15/cstdlib + mdp:/usr/include/c++/15/cstring + mdp:/usr/include/c++/15/ctime + mdp:/usr/include/c++/15/cwchar + mdp:/usr/include/c++/15/cwctype + mdp:/usr/include/c++/15/debug/assertions.h + mdp:/usr/include/c++/15/debug/debug.h + mdp:/usr/include/c++/15/exception + mdp:/usr/include/c++/15/ext/aligned_buffer.h + mdp:/usr/include/c++/15/ext/alloc_traits.h + mdp:/usr/include/c++/15/ext/atomicity.h + mdp:/usr/include/c++/15/ext/concurrence.h + mdp:/usr/include/c++/15/ext/numeric_traits.h + mdp:/usr/include/c++/15/ext/string_conversions.h + mdp:/usr/include/c++/15/ext/type_traits.h + mdp:/usr/include/c++/15/format + mdp:/usr/include/c++/15/functional + mdp:/usr/include/c++/15/initializer_list + mdp:/usr/include/c++/15/iomanip + mdp:/usr/include/c++/15/ios + mdp:/usr/include/c++/15/iosfwd + mdp:/usr/include/c++/15/istream + mdp:/usr/include/c++/15/iterator + mdp:/usr/include/c++/15/limits + mdp:/usr/include/c++/15/list + mdp:/usr/include/c++/15/locale + mdp:/usr/include/c++/15/map + mdp:/usr/include/c++/15/memory + mdp:/usr/include/c++/15/new + mdp:/usr/include/c++/15/numeric + mdp:/usr/include/c++/15/optional + mdp:/usr/include/c++/15/ostream + mdp:/usr/include/c++/15/pstl/execution_defs.h + mdp:/usr/include/c++/15/pstl/glue_numeric_defs.h + mdp:/usr/include/c++/15/pstl/pstl_config.h + mdp:/usr/include/c++/15/ratio + mdp:/usr/include/c++/15/set + mdp:/usr/include/c++/15/sstream + mdp:/usr/include/c++/15/stdexcept + mdp:/usr/include/c++/15/streambuf + mdp:/usr/include/c++/15/string + mdp:/usr/include/c++/15/string_view + mdp:/usr/include/c++/15/system_error + mdp:/usr/include/c++/15/tr1/bessel_function.tcc + mdp:/usr/include/c++/15/tr1/beta_function.tcc + mdp:/usr/include/c++/15/tr1/ell_integral.tcc + mdp:/usr/include/c++/15/tr1/exp_integral.tcc + mdp:/usr/include/c++/15/tr1/gamma.tcc + mdp:/usr/include/c++/15/tr1/hypergeometric.tcc + mdp:/usr/include/c++/15/tr1/legendre_function.tcc + mdp:/usr/include/c++/15/tr1/modified_bessel_func.tcc + mdp:/usr/include/c++/15/tr1/poly_hermite.tcc + mdp:/usr/include/c++/15/tr1/poly_laguerre.tcc + mdp:/usr/include/c++/15/tr1/riemann_zeta.tcc + mdp:/usr/include/c++/15/tr1/special_function_util.h + mdp:/usr/include/c++/15/tuple + mdp:/usr/include/c++/15/type_traits + mdp:/usr/include/c++/15/typeinfo + mdp:/usr/include/c++/15/unordered_map + mdp:/usr/include/c++/15/unordered_set + mdp:/usr/include/c++/15/utility + mdp:/usr/include/c++/15/variant + mdp:/usr/include/c++/15/vector + mdp:/usr/include/c++/15/version + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/atomic_word.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++allocator.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++config.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++locale.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/cpu_defines.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/ctype_base.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/ctype_inline.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/error_constants.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/gthr-default.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/gthr.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/messages_members.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/os_defines.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/time_members.h + mdp:/usr/include/ctype.h + mdp:/usr/include/endian.h + mdp:/usr/include/errno.h + mdp:/usr/include/features-time64.h + mdp:/usr/include/features.h + mdp:/usr/include/gnu/stubs-64.h + mdp:/usr/include/gnu/stubs.h + mdp:/usr/include/libintl.h + mdp:/usr/include/limits.h + mdp:/usr/include/linux/close_range.h + mdp:/usr/include/linux/errno.h + mdp:/usr/include/linux/limits.h + mdp:/usr/include/linux/posix_types.h + mdp:/usr/include/linux/sched/types.h + mdp:/usr/include/linux/stddef.h + mdp:/usr/include/linux/types.h + mdp:/usr/include/locale.h + mdp:/usr/include/pthread.h + mdp:/usr/include/qt6/QtCore/QModelIndex + mdp:/usr/include/qt6/QtCore/q17memory.h + mdp:/usr/include/qt6/QtCore/q20functional.h + mdp:/usr/include/qt6/QtCore/q20iterator.h + mdp:/usr/include/qt6/QtCore/q20memory.h + mdp:/usr/include/qt6/QtCore/q20type_traits.h + mdp:/usr/include/qt6/QtCore/q20utility.h + mdp:/usr/include/qt6/QtCore/q23type_traits.h + mdp:/usr/include/qt6/QtCore/q23utility.h + mdp:/usr/include/qt6/QtCore/qabstractitemmodel.h + mdp:/usr/include/qt6/QtCore/qalgorithms.h + mdp:/usr/include/qt6/QtCore/qalloc.h + mdp:/usr/include/qt6/QtCore/qanystringview.h + mdp:/usr/include/qt6/QtCore/qarraydata.h + mdp:/usr/include/qt6/QtCore/qarraydataops.h + mdp:/usr/include/qt6/QtCore/qarraydatapointer.h + mdp:/usr/include/qt6/QtCore/qassert.h + mdp:/usr/include/qt6/QtCore/qatomic.h + mdp:/usr/include/qt6/QtCore/qatomic_cxx11.h + mdp:/usr/include/qt6/QtCore/qbasicatomic.h + mdp:/usr/include/qt6/QtCore/qbindingstorage.h + mdp:/usr/include/qt6/QtCore/qbytearray.h + mdp:/usr/include/qt6/QtCore/qbytearrayalgorithms.h + mdp:/usr/include/qt6/QtCore/qbytearraylist.h + mdp:/usr/include/qt6/QtCore/qbytearrayview.h + mdp:/usr/include/qt6/QtCore/qchar.h + mdp:/usr/include/qt6/QtCore/qcheckedint_impl.h + mdp:/usr/include/qt6/QtCore/qcompare.h + mdp:/usr/include/qt6/QtCore/qcompare_impl.h + mdp:/usr/include/qt6/QtCore/qcomparehelpers.h + mdp:/usr/include/qt6/QtCore/qcompilerdetection.h + mdp:/usr/include/qt6/QtCore/qconfig-64.h + mdp:/usr/include/qt6/QtCore/qconfig.h + mdp:/usr/include/qt6/QtCore/qconstructormacros.h + mdp:/usr/include/qt6/QtCore/qcontainerfwd.h + mdp:/usr/include/qt6/QtCore/qcontainerinfo.h + mdp:/usr/include/qt6/QtCore/qcontainertools_impl.h + mdp:/usr/include/qt6/QtCore/qcontiguouscache.h + mdp:/usr/include/qt6/QtCore/qdarwinhelpers.h + mdp:/usr/include/qt6/QtCore/qdatastream.h + mdp:/usr/include/qt6/QtCore/qdebug.h + mdp:/usr/include/qt6/QtCore/qendian.h + mdp:/usr/include/qt6/QtCore/qexceptionhandling.h + mdp:/usr/include/qt6/QtCore/qflags.h + mdp:/usr/include/qt6/QtCore/qfloat16.h + mdp:/usr/include/qt6/QtCore/qforeach.h + mdp:/usr/include/qt6/QtCore/qfunctionaltools_impl.h + mdp:/usr/include/qt6/QtCore/qfunctionpointer.h + mdp:/usr/include/qt6/QtCore/qgenericatomic.h + mdp:/usr/include/qt6/QtCore/qglobal.h + mdp:/usr/include/qt6/QtCore/qglobalstatic.h + mdp:/usr/include/qt6/QtCore/qhash.h + mdp:/usr/include/qt6/QtCore/qhashfunctions.h + mdp:/usr/include/qt6/QtCore/qiodevicebase.h + mdp:/usr/include/qt6/QtCore/qiterable.h + mdp:/usr/include/qt6/QtCore/qiterator.h + mdp:/usr/include/qt6/QtCore/qlatin1stringview.h + mdp:/usr/include/qt6/QtCore/qline.h + mdp:/usr/include/qt6/QtCore/qlist.h + mdp:/usr/include/qt6/QtCore/qlocale.h + mdp:/usr/include/qt6/QtCore/qlogging.h + mdp:/usr/include/qt6/QtCore/qmalloc.h + mdp:/usr/include/qt6/QtCore/qmap.h + mdp:/usr/include/qt6/QtCore/qmargins.h + mdp:/usr/include/qt6/QtCore/qmath.h + mdp:/usr/include/qt6/QtCore/qmetacontainer.h + mdp:/usr/include/qt6/QtCore/qmetatype.h + mdp:/usr/include/qt6/QtCore/qminmax.h + mdp:/usr/include/qt6/QtCore/qnamespace.h + mdp:/usr/include/qt6/QtCore/qnumeric.h + mdp:/usr/include/qt6/QtCore/qobject.h + mdp:/usr/include/qt6/QtCore/qobject_impl.h + mdp:/usr/include/qt6/QtCore/qobjectdefs.h + mdp:/usr/include/qt6/QtCore/qobjectdefs_impl.h + mdp:/usr/include/qt6/QtCore/qoverload.h + mdp:/usr/include/qt6/QtCore/qpair.h + mdp:/usr/include/qt6/QtCore/qpoint.h + mdp:/usr/include/qt6/QtCore/qprocessordetection.h + mdp:/usr/include/qt6/QtCore/qrect.h + mdp:/usr/include/qt6/QtCore/qrefcount.h + mdp:/usr/include/qt6/QtCore/qregularexpression.h + mdp:/usr/include/qt6/QtCore/qscopedpointer.h + mdp:/usr/include/qt6/QtCore/qscopeguard.h + mdp:/usr/include/qt6/QtCore/qset.h + mdp:/usr/include/qt6/QtCore/qshareddata.h + mdp:/usr/include/qt6/QtCore/qshareddata_impl.h + mdp:/usr/include/qt6/QtCore/qsharedpointer.h + mdp:/usr/include/qt6/QtCore/qsharedpointer_impl.h + mdp:/usr/include/qt6/QtCore/qsize.h + mdp:/usr/include/qt6/QtCore/qspan.h + mdp:/usr/include/qt6/QtCore/qstdlibdetection.h + mdp:/usr/include/qt6/QtCore/qstring.h + mdp:/usr/include/qt6/QtCore/qstringalgorithms.h + mdp:/usr/include/qt6/QtCore/qstringbuilder.h + mdp:/usr/include/qt6/QtCore/qstringconverter.h + mdp:/usr/include/qt6/QtCore/qstringconverter_base.h + mdp:/usr/include/qt6/QtCore/qstringfwd.h + mdp:/usr/include/qt6/QtCore/qstringlist.h + mdp:/usr/include/qt6/QtCore/qstringmatcher.h + mdp:/usr/include/qt6/QtCore/qstringtokenizer.h + mdp:/usr/include/qt6/QtCore/qstringview.h + mdp:/usr/include/qt6/QtCore/qswap.h + mdp:/usr/include/qt6/QtCore/qsysinfo.h + mdp:/usr/include/qt6/QtCore/qsystemdetection.h + mdp:/usr/include/qt6/QtCore/qtaggedpointer.h + mdp:/usr/include/qt6/QtCore/qtclasshelpermacros.h + mdp:/usr/include/qt6/QtCore/qtconfiginclude.h + mdp:/usr/include/qt6/QtCore/qtconfigmacros.h + mdp:/usr/include/qt6/QtCore/qtcore-config.h + mdp:/usr/include/qt6/QtCore/qtcoreexports.h + mdp:/usr/include/qt6/QtCore/qtcoreglobal.h + mdp:/usr/include/qt6/QtCore/qtdeprecationdefinitions.h + mdp:/usr/include/qt6/QtCore/qtdeprecationmarkers.h + mdp:/usr/include/qt6/QtCore/qtenvironmentvariables.h + mdp:/usr/include/qt6/QtCore/qtextstream.h + mdp:/usr/include/qt6/QtCore/qtformat_impl.h + mdp:/usr/include/qt6/QtCore/qtmetamacros.h + mdp:/usr/include/qt6/QtCore/qtnoop.h + mdp:/usr/include/qt6/QtCore/qtpreprocessorsupport.h + mdp:/usr/include/qt6/QtCore/qtresource.h + mdp:/usr/include/qt6/QtCore/qttranslation.h + mdp:/usr/include/qt6/QtCore/qttypetraits.h + mdp:/usr/include/qt6/QtCore/qtversion.h + mdp:/usr/include/qt6/QtCore/qtversionchecks.h + mdp:/usr/include/qt6/QtCore/qtypeinfo.h + mdp:/usr/include/qt6/QtCore/qtypes.h + mdp:/usr/include/qt6/QtCore/qutf8stringview.h + mdp:/usr/include/qt6/QtCore/qvariant.h + mdp:/usr/include/qt6/QtCore/qvarlengtharray.h + mdp:/usr/include/qt6/QtCore/qversiontagging.h + mdp:/usr/include/qt6/QtCore/qxptype_traits.h + mdp:/usr/include/qt6/QtCore/qyieldcpu.h + mdp:/usr/include/qt6/QtGui/QPainter + mdp:/usr/include/qt6/QtGui/qaction.h + mdp:/usr/include/qt6/QtGui/qbitmap.h + mdp:/usr/include/qt6/QtGui/qbrush.h + mdp:/usr/include/qt6/QtGui/qcolor.h + mdp:/usr/include/qt6/QtGui/qcursor.h + mdp:/usr/include/qt6/QtGui/qfont.h + mdp:/usr/include/qt6/QtGui/qfontinfo.h + mdp:/usr/include/qt6/QtGui/qfontmetrics.h + mdp:/usr/include/qt6/QtGui/qfontvariableaxis.h + mdp:/usr/include/qt6/QtGui/qicon.h + mdp:/usr/include/qt6/QtGui/qimage.h + mdp:/usr/include/qt6/QtGui/qkeysequence.h + mdp:/usr/include/qt6/QtGui/qpaintdevice.h + mdp:/usr/include/qt6/QtGui/qpainter.h + mdp:/usr/include/qt6/QtGui/qpalette.h + mdp:/usr/include/qt6/QtGui/qpen.h + mdp:/usr/include/qt6/QtGui/qpixelformat.h + mdp:/usr/include/qt6/QtGui/qpixmap.h + mdp:/usr/include/qt6/QtGui/qpolygon.h + mdp:/usr/include/qt6/QtGui/qregion.h + mdp:/usr/include/qt6/QtGui/qrgb.h + mdp:/usr/include/qt6/QtGui/qrgba64.h + mdp:/usr/include/qt6/QtGui/qtextoption.h + mdp:/usr/include/qt6/QtGui/qtgui-config.h + mdp:/usr/include/qt6/QtGui/qtguiexports.h + mdp:/usr/include/qt6/QtGui/qtguiglobal.h + mdp:/usr/include/qt6/QtGui/qtransform.h + mdp:/usr/include/qt6/QtGui/qvalidator.h + mdp:/usr/include/qt6/QtGui/qwindowdefs.h + mdp:/usr/include/qt6/QtWidgets/QStyleOptionViewItem + mdp:/usr/include/qt6/QtWidgets/QStyledItemDelegate + mdp:/usr/include/qt6/QtWidgets/qabstractitemdelegate.h + mdp:/usr/include/qt6/QtWidgets/qabstractslider.h + mdp:/usr/include/qt6/QtWidgets/qabstractspinbox.h + mdp:/usr/include/qt6/QtWidgets/qframe.h + mdp:/usr/include/qt6/QtWidgets/qrubberband.h + mdp:/usr/include/qt6/QtWidgets/qsizepolicy.h + mdp:/usr/include/qt6/QtWidgets/qslider.h + mdp:/usr/include/qt6/QtWidgets/qstyle.h + mdp:/usr/include/qt6/QtWidgets/qstyleditemdelegate.h + mdp:/usr/include/qt6/QtWidgets/qstyleoption.h + mdp:/usr/include/qt6/QtWidgets/qtabbar.h + mdp:/usr/include/qt6/QtWidgets/qtabwidget.h + mdp:/usr/include/qt6/QtWidgets/qtwidgets-config.h + mdp:/usr/include/qt6/QtWidgets/qtwidgetsexports.h + mdp:/usr/include/qt6/QtWidgets/qtwidgetsglobal.h + mdp:/usr/include/qt6/QtWidgets/qwidget.h + mdp:/usr/include/sched.h + mdp:/usr/include/stdc-predef.h + mdp:/usr/include/stdint.h + mdp:/usr/include/stdio.h + mdp:/usr/include/stdlib.h + mdp:/usr/include/string.h + mdp:/usr/include/strings.h + mdp:/usr/include/sys/cdefs.h + mdp:/usr/include/sys/select.h + mdp:/usr/include/sys/single_threaded.h + mdp:/usr/include/sys/syscall.h + mdp:/usr/include/sys/types.h + mdp:/usr/include/syscall.h + mdp:/usr/include/time.h + mdp:/usr/include/unistd.h + mdp:/usr/include/wchar.h + mdp:/usr/include/wctype.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stdarg.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stdbool.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stddef.h +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/media_convert_dialog.cpp +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/projects_model.cpp +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/drag_utils.cpp +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/sequence_grouping_proxy_model.h + mmc:Q_OBJECT + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/kassetmanagerqt_autogen/moc_predefs.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/sequence_grouping_proxy_model.h + mdp:/usr/include/alloca.h + mdp:/usr/include/asm-generic/bitsperlong.h + mdp:/usr/include/asm-generic/errno-base.h + mdp:/usr/include/asm-generic/errno.h + mdp:/usr/include/asm-generic/int-ll64.h + mdp:/usr/include/asm-generic/posix_types.h + mdp:/usr/include/asm-generic/types.h + mdp:/usr/include/asm/bitsperlong.h + mdp:/usr/include/asm/errno.h + mdp:/usr/include/asm/posix_types.h + mdp:/usr/include/asm/posix_types_64.h + mdp:/usr/include/asm/types.h + mdp:/usr/include/asm/unistd.h + mdp:/usr/include/asm/unistd_64.h + mdp:/usr/include/assert.h + mdp:/usr/include/bits/atomic_wide_counter.h + mdp:/usr/include/bits/byteswap.h + mdp:/usr/include/bits/confname.h + mdp:/usr/include/bits/cpu-set.h + mdp:/usr/include/bits/endian.h + mdp:/usr/include/bits/endianness.h + mdp:/usr/include/bits/environments.h + mdp:/usr/include/bits/errno.h + mdp:/usr/include/bits/floatn-common.h + mdp:/usr/include/bits/floatn.h + mdp:/usr/include/bits/getopt_core.h + mdp:/usr/include/bits/getopt_posix.h + mdp:/usr/include/bits/libc-header-start.h + mdp:/usr/include/bits/local_lim.h + mdp:/usr/include/bits/locale.h + mdp:/usr/include/bits/long-double.h + mdp:/usr/include/bits/posix1_lim.h + mdp:/usr/include/bits/posix2_lim.h + mdp:/usr/include/bits/posix_opt.h + mdp:/usr/include/bits/pthread_stack_min-dynamic.h + mdp:/usr/include/bits/pthreadtypes-arch.h + mdp:/usr/include/bits/pthreadtypes.h + mdp:/usr/include/bits/sched.h + mdp:/usr/include/bits/select.h + mdp:/usr/include/bits/semaphore.h + mdp:/usr/include/bits/setjmp.h + mdp:/usr/include/bits/stdint-intn.h + mdp:/usr/include/bits/stdint-least.h + mdp:/usr/include/bits/stdint-uintn.h + mdp:/usr/include/bits/stdio_lim.h + mdp:/usr/include/bits/stdlib-float.h + mdp:/usr/include/bits/struct_mutex.h + mdp:/usr/include/bits/struct_rwlock.h + mdp:/usr/include/bits/syscall.h + mdp:/usr/include/bits/thread-shared-types.h + mdp:/usr/include/bits/time.h + mdp:/usr/include/bits/time64.h + mdp:/usr/include/bits/timesize.h + mdp:/usr/include/bits/timex.h + mdp:/usr/include/bits/types.h + mdp:/usr/include/bits/types/FILE.h + mdp:/usr/include/bits/types/__FILE.h + mdp:/usr/include/bits/types/__fpos64_t.h + mdp:/usr/include/bits/types/__fpos_t.h + mdp:/usr/include/bits/types/__locale_t.h + mdp:/usr/include/bits/types/__mbstate_t.h + mdp:/usr/include/bits/types/__sigset_t.h + mdp:/usr/include/bits/types/clock_t.h + mdp:/usr/include/bits/types/clockid_t.h + mdp:/usr/include/bits/types/cookie_io_functions_t.h + mdp:/usr/include/bits/types/error_t.h + mdp:/usr/include/bits/types/locale_t.h + mdp:/usr/include/bits/types/mbstate_t.h + mdp:/usr/include/bits/types/sigset_t.h + mdp:/usr/include/bits/types/struct_FILE.h + mdp:/usr/include/bits/types/struct___jmp_buf_tag.h + mdp:/usr/include/bits/types/struct_itimerspec.h + mdp:/usr/include/bits/types/struct_sched_param.h + mdp:/usr/include/bits/types/struct_timespec.h + mdp:/usr/include/bits/types/struct_timeval.h + mdp:/usr/include/bits/types/struct_tm.h + mdp:/usr/include/bits/types/time_t.h + mdp:/usr/include/bits/types/timer_t.h + mdp:/usr/include/bits/types/wint_t.h + mdp:/usr/include/bits/typesizes.h + mdp:/usr/include/bits/uintn-identity.h + mdp:/usr/include/bits/uio_lim.h + mdp:/usr/include/bits/unistd_ext.h + mdp:/usr/include/bits/waitflags.h + mdp:/usr/include/bits/waitstatus.h + mdp:/usr/include/bits/wchar.h + mdp:/usr/include/bits/wctype-wchar.h + mdp:/usr/include/bits/wordsize.h + mdp:/usr/include/bits/xopen_lim.h + mdp:/usr/include/c++/15/algorithm + mdp:/usr/include/c++/15/array + mdp:/usr/include/c++/15/atomic + mdp:/usr/include/c++/15/backward/auto_ptr.h + mdp:/usr/include/c++/15/backward/binders.h + mdp:/usr/include/c++/15/bit + mdp:/usr/include/c++/15/bits/algorithmfwd.h + mdp:/usr/include/c++/15/bits/align.h + mdp:/usr/include/c++/15/bits/alloc_traits.h + mdp:/usr/include/c++/15/bits/allocated_ptr.h + mdp:/usr/include/c++/15/bits/allocator.h + mdp:/usr/include/c++/15/bits/atomic_base.h + mdp:/usr/include/c++/15/bits/atomic_futex.h + mdp:/usr/include/c++/15/bits/atomic_lockfree_defines.h + mdp:/usr/include/c++/15/bits/atomic_timed_wait.h + mdp:/usr/include/c++/15/bits/atomic_wait.h + mdp:/usr/include/c++/15/bits/basic_ios.h + mdp:/usr/include/c++/15/bits/basic_ios.tcc + mdp:/usr/include/c++/15/bits/basic_string.h + mdp:/usr/include/c++/15/bits/basic_string.tcc + mdp:/usr/include/c++/15/bits/char_traits.h + mdp:/usr/include/c++/15/bits/charconv.h + mdp:/usr/include/c++/15/bits/chrono.h + mdp:/usr/include/c++/15/bits/chrono_io.h + mdp:/usr/include/c++/15/bits/codecvt.h + mdp:/usr/include/c++/15/bits/concept_check.h + mdp:/usr/include/c++/15/bits/cpp_type_traits.h + mdp:/usr/include/c++/15/bits/cxxabi_forced.h + mdp:/usr/include/c++/15/bits/cxxabi_init_exception.h + mdp:/usr/include/c++/15/bits/enable_special_members.h + mdp:/usr/include/c++/15/bits/erase_if.h + mdp:/usr/include/c++/15/bits/exception.h + mdp:/usr/include/c++/15/bits/exception_defines.h + mdp:/usr/include/c++/15/bits/exception_ptr.h + mdp:/usr/include/c++/15/bits/functexcept.h + mdp:/usr/include/c++/15/bits/functional_hash.h + mdp:/usr/include/c++/15/bits/hash_bytes.h + mdp:/usr/include/c++/15/bits/hashtable.h + mdp:/usr/include/c++/15/bits/hashtable_policy.h + mdp:/usr/include/c++/15/bits/invoke.h + mdp:/usr/include/c++/15/bits/ios_base.h + mdp:/usr/include/c++/15/bits/istream.tcc + mdp:/usr/include/c++/15/bits/iterator_concepts.h + mdp:/usr/include/c++/15/bits/list.tcc + mdp:/usr/include/c++/15/bits/locale_classes.h + mdp:/usr/include/c++/15/bits/locale_classes.tcc + mdp:/usr/include/c++/15/bits/locale_conv.h + mdp:/usr/include/c++/15/bits/locale_facets.h + mdp:/usr/include/c++/15/bits/locale_facets.tcc + mdp:/usr/include/c++/15/bits/locale_facets_nonio.h + mdp:/usr/include/c++/15/bits/locale_facets_nonio.tcc + mdp:/usr/include/c++/15/bits/localefwd.h + mdp:/usr/include/c++/15/bits/max_size_type.h + mdp:/usr/include/c++/15/bits/memory_resource.h + mdp:/usr/include/c++/15/bits/memoryfwd.h + mdp:/usr/include/c++/15/bits/move.h + mdp:/usr/include/c++/15/bits/nested_exception.h + mdp:/usr/include/c++/15/bits/new_allocator.h + mdp:/usr/include/c++/15/bits/node_handle.h + mdp:/usr/include/c++/15/bits/ostream.h + mdp:/usr/include/c++/15/bits/ostream.tcc + mdp:/usr/include/c++/15/bits/ostream_insert.h + mdp:/usr/include/c++/15/bits/parse_numbers.h + mdp:/usr/include/c++/15/bits/postypes.h + mdp:/usr/include/c++/15/bits/predefined_ops.h + mdp:/usr/include/c++/15/bits/ptr_traits.h + mdp:/usr/include/c++/15/bits/quoted_string.h + mdp:/usr/include/c++/15/bits/random.h + mdp:/usr/include/c++/15/bits/random.tcc + mdp:/usr/include/c++/15/bits/range_access.h + mdp:/usr/include/c++/15/bits/ranges_algo.h + mdp:/usr/include/c++/15/bits/ranges_algobase.h + mdp:/usr/include/c++/15/bits/ranges_base.h + mdp:/usr/include/c++/15/bits/ranges_cmp.h + mdp:/usr/include/c++/15/bits/ranges_uninitialized.h + mdp:/usr/include/c++/15/bits/ranges_util.h + mdp:/usr/include/c++/15/bits/refwrap.h + mdp:/usr/include/c++/15/bits/requires_hosted.h + mdp:/usr/include/c++/15/bits/semaphore_base.h + mdp:/usr/include/c++/15/bits/shared_ptr.h + mdp:/usr/include/c++/15/bits/shared_ptr_atomic.h + mdp:/usr/include/c++/15/bits/shared_ptr_base.h + mdp:/usr/include/c++/15/bits/specfun.h + mdp:/usr/include/c++/15/bits/sstream.tcc + mdp:/usr/include/c++/15/bits/std_abs.h + mdp:/usr/include/c++/15/bits/std_function.h + mdp:/usr/include/c++/15/bits/std_mutex.h + mdp:/usr/include/c++/15/bits/std_thread.h + mdp:/usr/include/c++/15/bits/stl_algo.h + mdp:/usr/include/c++/15/bits/stl_algobase.h + mdp:/usr/include/c++/15/bits/stl_bvector.h + mdp:/usr/include/c++/15/bits/stl_construct.h + mdp:/usr/include/c++/15/bits/stl_function.h + mdp:/usr/include/c++/15/bits/stl_heap.h + mdp:/usr/include/c++/15/bits/stl_iterator.h + mdp:/usr/include/c++/15/bits/stl_iterator_base_funcs.h + mdp:/usr/include/c++/15/bits/stl_iterator_base_types.h + mdp:/usr/include/c++/15/bits/stl_list.h + mdp:/usr/include/c++/15/bits/stl_map.h + mdp:/usr/include/c++/15/bits/stl_multimap.h + mdp:/usr/include/c++/15/bits/stl_multiset.h + mdp:/usr/include/c++/15/bits/stl_numeric.h + mdp:/usr/include/c++/15/bits/stl_pair.h + mdp:/usr/include/c++/15/bits/stl_raw_storage_iter.h + mdp:/usr/include/c++/15/bits/stl_relops.h + mdp:/usr/include/c++/15/bits/stl_set.h + mdp:/usr/include/c++/15/bits/stl_tempbuf.h + mdp:/usr/include/c++/15/bits/stl_tree.h + mdp:/usr/include/c++/15/bits/stl_uninitialized.h + mdp:/usr/include/c++/15/bits/stl_vector.h + mdp:/usr/include/c++/15/bits/stream_iterator.h + mdp:/usr/include/c++/15/bits/streambuf.tcc + mdp:/usr/include/c++/15/bits/streambuf_iterator.h + mdp:/usr/include/c++/15/bits/string_view.tcc + mdp:/usr/include/c++/15/bits/stringfwd.h + mdp:/usr/include/c++/15/bits/this_thread_sleep.h + mdp:/usr/include/c++/15/bits/uniform_int_dist.h + mdp:/usr/include/c++/15/bits/unique_lock.h + mdp:/usr/include/c++/15/bits/unique_ptr.h + mdp:/usr/include/c++/15/bits/unordered_map.h + mdp:/usr/include/c++/15/bits/unordered_set.h + mdp:/usr/include/c++/15/bits/uses_allocator.h + mdp:/usr/include/c++/15/bits/uses_allocator_args.h + mdp:/usr/include/c++/15/bits/utility.h + mdp:/usr/include/c++/15/bits/vector.tcc + mdp:/usr/include/c++/15/bits/version.h + mdp:/usr/include/c++/15/cassert + mdp:/usr/include/c++/15/cctype + mdp:/usr/include/c++/15/cerrno + mdp:/usr/include/c++/15/charconv + mdp:/usr/include/c++/15/chrono + mdp:/usr/include/c++/15/climits + mdp:/usr/include/c++/15/clocale + mdp:/usr/include/c++/15/cmath + mdp:/usr/include/c++/15/compare + mdp:/usr/include/c++/15/concepts + mdp:/usr/include/c++/15/condition_variable + mdp:/usr/include/c++/15/cstddef + mdp:/usr/include/c++/15/cstdint + mdp:/usr/include/c++/15/cstdio + mdp:/usr/include/c++/15/cstdlib + mdp:/usr/include/c++/15/cstring + mdp:/usr/include/c++/15/ctime + mdp:/usr/include/c++/15/cwchar + mdp:/usr/include/c++/15/cwctype + mdp:/usr/include/c++/15/debug/assertions.h + mdp:/usr/include/c++/15/debug/debug.h + mdp:/usr/include/c++/15/exception + mdp:/usr/include/c++/15/experimental/source_location + mdp:/usr/include/c++/15/ext/aligned_buffer.h + mdp:/usr/include/c++/15/ext/alloc_traits.h + mdp:/usr/include/c++/15/ext/atomicity.h + mdp:/usr/include/c++/15/ext/concurrence.h + mdp:/usr/include/c++/15/ext/numeric_traits.h + mdp:/usr/include/c++/15/ext/string_conversions.h + mdp:/usr/include/c++/15/ext/type_traits.h + mdp:/usr/include/c++/15/filesystem + mdp:/usr/include/c++/15/format + mdp:/usr/include/c++/15/functional + mdp:/usr/include/c++/15/future + mdp:/usr/include/c++/15/initializer_list + mdp:/usr/include/c++/15/iomanip + mdp:/usr/include/c++/15/ios + mdp:/usr/include/c++/15/iosfwd + mdp:/usr/include/c++/15/istream + mdp:/usr/include/c++/15/iterator + mdp:/usr/include/c++/15/limits + mdp:/usr/include/c++/15/list + mdp:/usr/include/c++/15/locale + mdp:/usr/include/c++/15/map + mdp:/usr/include/c++/15/memory + mdp:/usr/include/c++/15/memory_resource + mdp:/usr/include/c++/15/mutex + mdp:/usr/include/c++/15/new + mdp:/usr/include/c++/15/numeric + mdp:/usr/include/c++/15/optional + mdp:/usr/include/c++/15/ostream + mdp:/usr/include/c++/15/pstl/execution_defs.h + mdp:/usr/include/c++/15/pstl/glue_numeric_defs.h + mdp:/usr/include/c++/15/pstl/pstl_config.h + mdp:/usr/include/c++/15/random + mdp:/usr/include/c++/15/ratio + mdp:/usr/include/c++/15/semaphore + mdp:/usr/include/c++/15/set + mdp:/usr/include/c++/15/shared_mutex + mdp:/usr/include/c++/15/source_location + mdp:/usr/include/c++/15/sstream + mdp:/usr/include/c++/15/stdexcept + mdp:/usr/include/c++/15/stop_token + mdp:/usr/include/c++/15/streambuf + mdp:/usr/include/c++/15/string + mdp:/usr/include/c++/15/string_view + mdp:/usr/include/c++/15/system_error + mdp:/usr/include/c++/15/tr1/bessel_function.tcc + mdp:/usr/include/c++/15/tr1/beta_function.tcc + mdp:/usr/include/c++/15/tr1/ell_integral.tcc + mdp:/usr/include/c++/15/tr1/exp_integral.tcc + mdp:/usr/include/c++/15/tr1/gamma.tcc + mdp:/usr/include/c++/15/tr1/hypergeometric.tcc + mdp:/usr/include/c++/15/tr1/legendre_function.tcc + mdp:/usr/include/c++/15/tr1/modified_bessel_func.tcc + mdp:/usr/include/c++/15/tr1/poly_hermite.tcc + mdp:/usr/include/c++/15/tr1/poly_laguerre.tcc + mdp:/usr/include/c++/15/tr1/riemann_zeta.tcc + mdp:/usr/include/c++/15/tr1/special_function_util.h + mdp:/usr/include/c++/15/tuple + mdp:/usr/include/c++/15/type_traits + mdp:/usr/include/c++/15/typeinfo + mdp:/usr/include/c++/15/unordered_map + mdp:/usr/include/c++/15/unordered_set + mdp:/usr/include/c++/15/utility + mdp:/usr/include/c++/15/variant + mdp:/usr/include/c++/15/vector + mdp:/usr/include/c++/15/version + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/atomic_word.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++allocator.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++config.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++locale.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/cpu_defines.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/ctype_base.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/ctype_inline.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/error_constants.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/gthr-default.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/gthr.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/messages_members.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/opt_random.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/os_defines.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/time_members.h + mdp:/usr/include/ctype.h + mdp:/usr/include/endian.h + mdp:/usr/include/errno.h + mdp:/usr/include/features-time64.h + mdp:/usr/include/features.h + mdp:/usr/include/gnu/stubs-64.h + mdp:/usr/include/gnu/stubs.h + mdp:/usr/include/libintl.h + mdp:/usr/include/limits.h + mdp:/usr/include/linux/close_range.h + mdp:/usr/include/linux/errno.h + mdp:/usr/include/linux/limits.h + mdp:/usr/include/linux/posix_types.h + mdp:/usr/include/linux/sched/types.h + mdp:/usr/include/linux/stddef.h + mdp:/usr/include/linux/types.h + mdp:/usr/include/locale.h + mdp:/usr/include/pthread.h + mdp:/usr/include/qt6/QtConcurrent/QtConcurrent + mdp:/usr/include/qt6/QtConcurrent/QtConcurrentDepends + mdp:/usr/include/qt6/QtConcurrent/qtaskbuilder.h + mdp:/usr/include/qt6/QtConcurrent/qtconcurrent_global.h + mdp:/usr/include/qt6/QtConcurrent/qtconcurrentcompilertest.h + mdp:/usr/include/qt6/QtConcurrent/qtconcurrentexports.h + mdp:/usr/include/qt6/QtConcurrent/qtconcurrentfilter.h + mdp:/usr/include/qt6/QtConcurrent/qtconcurrentfilterkernel.h + mdp:/usr/include/qt6/QtConcurrent/qtconcurrentfunctionwrappers.h + mdp:/usr/include/qt6/QtConcurrent/qtconcurrentiteratekernel.h + mdp:/usr/include/qt6/QtConcurrent/qtconcurrentmap.h + mdp:/usr/include/qt6/QtConcurrent/qtconcurrentmapkernel.h + mdp:/usr/include/qt6/QtConcurrent/qtconcurrentmedian.h + mdp:/usr/include/qt6/QtConcurrent/qtconcurrentreducekernel.h + mdp:/usr/include/qt6/QtConcurrent/qtconcurrentrun.h + mdp:/usr/include/qt6/QtConcurrent/qtconcurrentrunbase.h + mdp:/usr/include/qt6/QtConcurrent/qtconcurrentstoredfunctioncall.h + mdp:/usr/include/qt6/QtConcurrent/qtconcurrenttask.h + mdp:/usr/include/qt6/QtConcurrent/qtconcurrentthreadengine.h + mdp:/usr/include/qt6/QtConcurrent/qtconcurrentversion.h + mdp:/usr/include/qt6/QtCore/QDeadlineTimer + mdp:/usr/include/qt6/QtCore/QDir + mdp:/usr/include/qt6/QtCore/QFutureWatcher + mdp:/usr/include/qt6/QtCore/QHash + mdp:/usr/include/qt6/QtCore/QList + mdp:/usr/include/qt6/QtCore/QMap + mdp:/usr/include/qt6/QtCore/QMutex + mdp:/usr/include/qt6/QtCore/QObject + mdp:/usr/include/qt6/QtCore/QSet + mdp:/usr/include/qt6/QtCore/QSortFilterProxyModel + mdp:/usr/include/qt6/QtCore/QString + mdp:/usr/include/qt6/QtCore/QStringList + mdp:/usr/include/qt6/QtCore/QVariant + mdp:/usr/include/qt6/QtCore/QtCore + mdp:/usr/include/qt6/QtCore/QtCoreDepends + mdp:/usr/include/qt6/QtCore/q17memory.h + mdp:/usr/include/qt6/QtCore/q20algorithm.h + mdp:/usr/include/qt6/QtCore/q20chrono.h + mdp:/usr/include/qt6/QtCore/q20functional.h + mdp:/usr/include/qt6/QtCore/q20iterator.h + mdp:/usr/include/qt6/QtCore/q20map.h + mdp:/usr/include/qt6/QtCore/q20memory.h + mdp:/usr/include/qt6/QtCore/q20type_traits.h + mdp:/usr/include/qt6/QtCore/q20utility.h + mdp:/usr/include/qt6/QtCore/q20vector.h + mdp:/usr/include/qt6/QtCore/q23functional.h + mdp:/usr/include/qt6/QtCore/q23type_traits.h + mdp:/usr/include/qt6/QtCore/q23utility.h + mdp:/usr/include/qt6/QtCore/q26numeric.h + mdp:/usr/include/qt6/QtCore/qabstractanimation.h + mdp:/usr/include/qt6/QtCore/qabstracteventdispatcher.h + mdp:/usr/include/qt6/QtCore/qabstractitemmodel.h + mdp:/usr/include/qt6/QtCore/qabstractnativeeventfilter.h + mdp:/usr/include/qt6/QtCore/qabstractproxymodel.h + mdp:/usr/include/qt6/QtCore/qalgorithms.h + mdp:/usr/include/qt6/QtCore/qalloc.h + mdp:/usr/include/qt6/QtCore/qanimationgroup.h + mdp:/usr/include/qt6/QtCore/qanystringview.h + mdp:/usr/include/qt6/QtCore/qapplicationstatic.h + mdp:/usr/include/qt6/QtCore/qarraydata.h + mdp:/usr/include/qt6/QtCore/qarraydataops.h + mdp:/usr/include/qt6/QtCore/qarraydatapointer.h + mdp:/usr/include/qt6/QtCore/qassert.h + mdp:/usr/include/qt6/QtCore/qassociativeiterable.h + mdp:/usr/include/qt6/QtCore/qatomic.h + mdp:/usr/include/qt6/QtCore/qatomic_cxx11.h + mdp:/usr/include/qt6/QtCore/qatomicscopedvaluerollback.h + mdp:/usr/include/qt6/QtCore/qbasicatomic.h + mdp:/usr/include/qt6/QtCore/qbasictimer.h + mdp:/usr/include/qt6/QtCore/qbindingstorage.h + mdp:/usr/include/qt6/QtCore/qbitarray.h + mdp:/usr/include/qt6/QtCore/qbuffer.h + mdp:/usr/include/qt6/QtCore/qbytearray.h + mdp:/usr/include/qt6/QtCore/qbytearrayalgorithms.h + mdp:/usr/include/qt6/QtCore/qbytearraylist.h + mdp:/usr/include/qt6/QtCore/qbytearraymatcher.h + mdp:/usr/include/qt6/QtCore/qbytearrayview.h + mdp:/usr/include/qt6/QtCore/qcache.h + mdp:/usr/include/qt6/QtCore/qcalendar.h + mdp:/usr/include/qt6/QtCore/qcborarray.h + mdp:/usr/include/qt6/QtCore/qcborcommon.h + mdp:/usr/include/qt6/QtCore/qcbormap.h + mdp:/usr/include/qt6/QtCore/qcborstream.h + mdp:/usr/include/qt6/QtCore/qcborstreamreader.h + mdp:/usr/include/qt6/QtCore/qcborstreamwriter.h + mdp:/usr/include/qt6/QtCore/qcborvalue.h + mdp:/usr/include/qt6/QtCore/qchar.h + mdp:/usr/include/qt6/QtCore/qcheckedint_impl.h + mdp:/usr/include/qt6/QtCore/qchronotimer.h + mdp:/usr/include/qt6/QtCore/qcollator.h + mdp:/usr/include/qt6/QtCore/qcommandlineoption.h + mdp:/usr/include/qt6/QtCore/qcommandlineparser.h + mdp:/usr/include/qt6/QtCore/qcompare.h + mdp:/usr/include/qt6/QtCore/qcompare_impl.h + mdp:/usr/include/qt6/QtCore/qcomparehelpers.h + mdp:/usr/include/qt6/QtCore/qcompilerdetection.h + mdp:/usr/include/qt6/QtCore/qconcatenatetablesproxymodel.h + mdp:/usr/include/qt6/QtCore/qconfig-64.h + mdp:/usr/include/qt6/QtCore/qconfig.h + mdp:/usr/include/qt6/QtCore/qconstructormacros.h + mdp:/usr/include/qt6/QtCore/qcontainerfwd.h + mdp:/usr/include/qt6/QtCore/qcontainerinfo.h + mdp:/usr/include/qt6/QtCore/qcontainertools_impl.h + mdp:/usr/include/qt6/QtCore/qcontiguouscache.h + mdp:/usr/include/qt6/QtCore/qcoreapplication.h + mdp:/usr/include/qt6/QtCore/qcoreapplication_platform.h + mdp:/usr/include/qt6/QtCore/qcoreevent.h + mdp:/usr/include/qt6/QtCore/qcryptographichash.h + mdp:/usr/include/qt6/QtCore/qdarwinhelpers.h + mdp:/usr/include/qt6/QtCore/qdatastream.h + mdp:/usr/include/qt6/QtCore/qdatetime.h + mdp:/usr/include/qt6/QtCore/qdeadlinetimer.h + mdp:/usr/include/qt6/QtCore/qdebug.h + mdp:/usr/include/qt6/QtCore/qdir.h + mdp:/usr/include/qt6/QtCore/qdiriterator.h + mdp:/usr/include/qt6/QtCore/qdirlisting.h + mdp:/usr/include/qt6/QtCore/qeasingcurve.h + mdp:/usr/include/qt6/QtCore/qelapsedtimer.h + mdp:/usr/include/qt6/QtCore/qendian.h + mdp:/usr/include/qt6/QtCore/qeventloop.h + mdp:/usr/include/qt6/QtCore/qexception.h + mdp:/usr/include/qt6/QtCore/qexceptionhandling.h + mdp:/usr/include/qt6/QtCore/qfactoryinterface.h + mdp:/usr/include/qt6/QtCore/qfile.h + mdp:/usr/include/qt6/QtCore/qfiledevice.h + mdp:/usr/include/qt6/QtCore/qfileinfo.h + mdp:/usr/include/qt6/QtCore/qfileselector.h + mdp:/usr/include/qt6/QtCore/qfilesystemwatcher.h + mdp:/usr/include/qt6/QtCore/qflags.h + mdp:/usr/include/qt6/QtCore/qfloat16.h + mdp:/usr/include/qt6/QtCore/qforeach.h + mdp:/usr/include/qt6/QtCore/qfunctionaltools_impl.h + mdp:/usr/include/qt6/QtCore/qfunctionpointer.h + mdp:/usr/include/qt6/QtCore/qfuture.h + mdp:/usr/include/qt6/QtCore/qfuture_impl.h + mdp:/usr/include/qt6/QtCore/qfutureinterface.h + mdp:/usr/include/qt6/QtCore/qfuturesynchronizer.h + mdp:/usr/include/qt6/QtCore/qfuturewatcher.h + mdp:/usr/include/qt6/QtCore/qgenericatomic.h + mdp:/usr/include/qt6/QtCore/qglobal.h + mdp:/usr/include/qt6/QtCore/qglobalstatic.h + mdp:/usr/include/qt6/QtCore/qhash.h + mdp:/usr/include/qt6/QtCore/qhashfunctions.h + mdp:/usr/include/qt6/QtCore/qidentityproxymodel.h + mdp:/usr/include/qt6/QtCore/qiodevice.h + mdp:/usr/include/qt6/QtCore/qiodevicebase.h + mdp:/usr/include/qt6/QtCore/qitemselectionmodel.h + mdp:/usr/include/qt6/QtCore/qiterable.h + mdp:/usr/include/qt6/QtCore/qiterator.h + mdp:/usr/include/qt6/QtCore/qjsonarray.h + mdp:/usr/include/qt6/QtCore/qjsondocument.h + mdp:/usr/include/qt6/QtCore/qjsonobject.h + mdp:/usr/include/qt6/QtCore/qjsonparseerror.h + mdp:/usr/include/qt6/QtCore/qjsonvalue.h + mdp:/usr/include/qt6/QtCore/qlatin1stringmatcher.h + mdp:/usr/include/qt6/QtCore/qlatin1stringview.h + mdp:/usr/include/qt6/QtCore/qlibrary.h + mdp:/usr/include/qt6/QtCore/qlibraryinfo.h + mdp:/usr/include/qt6/QtCore/qline.h + mdp:/usr/include/qt6/QtCore/qlist.h + mdp:/usr/include/qt6/QtCore/qlocale.h + mdp:/usr/include/qt6/QtCore/qlockfile.h + mdp:/usr/include/qt6/QtCore/qlogging.h + mdp:/usr/include/qt6/QtCore/qloggingcategory.h + mdp:/usr/include/qt6/QtCore/qmalloc.h + mdp:/usr/include/qt6/QtCore/qmap.h + mdp:/usr/include/qt6/QtCore/qmargins.h + mdp:/usr/include/qt6/QtCore/qmath.h + mdp:/usr/include/qt6/QtCore/qmessageauthenticationcode.h + mdp:/usr/include/qt6/QtCore/qmetacontainer.h + mdp:/usr/include/qt6/QtCore/qmetaobject.h + mdp:/usr/include/qt6/QtCore/qmetatype.h + mdp:/usr/include/qt6/QtCore/qmimedata.h + mdp:/usr/include/qt6/QtCore/qmimedatabase.h + mdp:/usr/include/qt6/QtCore/qmimetype.h + mdp:/usr/include/qt6/QtCore/qminmax.h + mdp:/usr/include/qt6/QtCore/qmutex.h + mdp:/usr/include/qt6/QtCore/qnamespace.h + mdp:/usr/include/qt6/QtCore/qnativeinterface.h + mdp:/usr/include/qt6/QtCore/qnumeric.h + mdp:/usr/include/qt6/QtCore/qobject.h + mdp:/usr/include/qt6/QtCore/qobject_impl.h + mdp:/usr/include/qt6/QtCore/qobjectcleanuphandler.h + mdp:/usr/include/qt6/QtCore/qobjectdefs.h + mdp:/usr/include/qt6/QtCore/qobjectdefs_impl.h + mdp:/usr/include/qt6/QtCore/qoperatingsystemversion.h + mdp:/usr/include/qt6/QtCore/qoverload.h + mdp:/usr/include/qt6/QtCore/qpair.h + mdp:/usr/include/qt6/QtCore/qparallelanimationgroup.h + mdp:/usr/include/qt6/QtCore/qpauseanimation.h + mdp:/usr/include/qt6/QtCore/qpermissions.h + mdp:/usr/include/qt6/QtCore/qplugin.h + mdp:/usr/include/qt6/QtCore/qpluginloader.h + mdp:/usr/include/qt6/QtCore/qpoint.h + mdp:/usr/include/qt6/QtCore/qpointer.h + mdp:/usr/include/qt6/QtCore/qprocess.h + mdp:/usr/include/qt6/QtCore/qprocessordetection.h + mdp:/usr/include/qt6/QtCore/qpromise.h + mdp:/usr/include/qt6/QtCore/qproperty.h + mdp:/usr/include/qt6/QtCore/qpropertyanimation.h + mdp:/usr/include/qt6/QtCore/qpropertyprivate.h + mdp:/usr/include/qt6/QtCore/qqueue.h + mdp:/usr/include/qt6/QtCore/qrandom.h + mdp:/usr/include/qt6/QtCore/qrangemodel.h + mdp:/usr/include/qt6/QtCore/qrangemodel_impl.h + mdp:/usr/include/qt6/QtCore/qreadwritelock.h + mdp:/usr/include/qt6/QtCore/qrect.h + mdp:/usr/include/qt6/QtCore/qrefcount.h + mdp:/usr/include/qt6/QtCore/qregularexpression.h + mdp:/usr/include/qt6/QtCore/qresource.h + mdp:/usr/include/qt6/QtCore/qresultstore.h + mdp:/usr/include/qt6/QtCore/qrunnable.h + mdp:/usr/include/qt6/QtCore/qsavefile.h + mdp:/usr/include/qt6/QtCore/qscopedpointer.h + mdp:/usr/include/qt6/QtCore/qscopedvaluerollback.h + mdp:/usr/include/qt6/QtCore/qscopeguard.h + mdp:/usr/include/qt6/QtCore/qsemaphore.h + mdp:/usr/include/qt6/QtCore/qsequentialanimationgroup.h + mdp:/usr/include/qt6/QtCore/qsequentialiterable.h + mdp:/usr/include/qt6/QtCore/qset.h + mdp:/usr/include/qt6/QtCore/qsettings.h + mdp:/usr/include/qt6/QtCore/qshareddata.h + mdp:/usr/include/qt6/QtCore/qshareddata_impl.h + mdp:/usr/include/qt6/QtCore/qsharedmemory.h + mdp:/usr/include/qt6/QtCore/qsharedpointer.h + mdp:/usr/include/qt6/QtCore/qsharedpointer_impl.h + mdp:/usr/include/qt6/QtCore/qsignalmapper.h + mdp:/usr/include/qt6/QtCore/qsimd.h + mdp:/usr/include/qt6/QtCore/qsize.h + mdp:/usr/include/qt6/QtCore/qsocketnotifier.h + mdp:/usr/include/qt6/QtCore/qsortfilterproxymodel.h + mdp:/usr/include/qt6/QtCore/qspan.h + mdp:/usr/include/qt6/QtCore/qstack.h + mdp:/usr/include/qt6/QtCore/qstandardpaths.h + mdp:/usr/include/qt6/QtCore/qstaticlatin1stringmatcher.h + mdp:/usr/include/qt6/QtCore/qstdlibdetection.h + mdp:/usr/include/qt6/QtCore/qstorageinfo.h + mdp:/usr/include/qt6/QtCore/qstring.h + mdp:/usr/include/qt6/QtCore/qstringalgorithms.h + mdp:/usr/include/qt6/QtCore/qstringbuilder.h + mdp:/usr/include/qt6/QtCore/qstringconverter.h + mdp:/usr/include/qt6/QtCore/qstringconverter_base.h + mdp:/usr/include/qt6/QtCore/qstringfwd.h + mdp:/usr/include/qt6/QtCore/qstringlist.h + mdp:/usr/include/qt6/QtCore/qstringlistmodel.h + mdp:/usr/include/qt6/QtCore/qstringliteral.h + mdp:/usr/include/qt6/QtCore/qstringmatcher.h + mdp:/usr/include/qt6/QtCore/qstringtokenizer.h + mdp:/usr/include/qt6/QtCore/qstringview.h + mdp:/usr/include/qt6/QtCore/qswap.h + mdp:/usr/include/qt6/QtCore/qsysinfo.h + mdp:/usr/include/qt6/QtCore/qsystemdetection.h + mdp:/usr/include/qt6/QtCore/qsystemsemaphore.h + mdp:/usr/include/qt6/QtCore/qtaggedpointer.h + mdp:/usr/include/qt6/QtCore/qtclasshelpermacros.h + mdp:/usr/include/qt6/QtCore/qtconfiginclude.h + mdp:/usr/include/qt6/QtCore/qtconfigmacros.h + mdp:/usr/include/qt6/QtCore/qtcore-config.h + mdp:/usr/include/qt6/QtCore/qtcoreexports.h + mdp:/usr/include/qt6/QtCore/qtcoreglobal.h + mdp:/usr/include/qt6/QtCore/qtcoreversion.h + mdp:/usr/include/qt6/QtCore/qtdeprecationdefinitions.h + mdp:/usr/include/qt6/QtCore/qtdeprecationmarkers.h + mdp:/usr/include/qt6/QtCore/qtemporarydir.h + mdp:/usr/include/qt6/QtCore/qtemporaryfile.h + mdp:/usr/include/qt6/QtCore/qtenvironmentvariables.h + mdp:/usr/include/qt6/QtCore/qtextboundaryfinder.h + mdp:/usr/include/qt6/QtCore/qtextstream.h + mdp:/usr/include/qt6/QtCore/qtformat_impl.h + mdp:/usr/include/qt6/QtCore/qthread.h + mdp:/usr/include/qt6/QtCore/qthreadpool.h + mdp:/usr/include/qt6/QtCore/qthreadstorage.h + mdp:/usr/include/qt6/QtCore/qtimeline.h + mdp:/usr/include/qt6/QtCore/qtimer.h + mdp:/usr/include/qt6/QtCore/qtimezone.h + mdp:/usr/include/qt6/QtCore/qtipccommon.h + mdp:/usr/include/qt6/QtCore/qtmetamacros.h + mdp:/usr/include/qt6/QtCore/qtmocconstants.h + mdp:/usr/include/qt6/QtCore/qtnoop.h + mdp:/usr/include/qt6/QtCore/qtpreprocessorsupport.h + mdp:/usr/include/qt6/QtCore/qtranslator.h + mdp:/usr/include/qt6/QtCore/qtransposeproxymodel.h + mdp:/usr/include/qt6/QtCore/qtresource.h + mdp:/usr/include/qt6/QtCore/qtsan_impl.h + mdp:/usr/include/qt6/QtCore/qtsymbolmacros.h + mdp:/usr/include/qt6/QtCore/qttranslation.h + mdp:/usr/include/qt6/QtCore/qttypetraits.h + mdp:/usr/include/qt6/QtCore/qtversion.h + mdp:/usr/include/qt6/QtCore/qtversionchecks.h + mdp:/usr/include/qt6/QtCore/qtypeinfo.h + mdp:/usr/include/qt6/QtCore/qtyperevision.h + mdp:/usr/include/qt6/QtCore/qtypes.h + mdp:/usr/include/qt6/QtCore/qurl.h + mdp:/usr/include/qt6/QtCore/qurlquery.h + mdp:/usr/include/qt6/QtCore/qutf8stringview.h + mdp:/usr/include/qt6/QtCore/quuid.h + mdp:/usr/include/qt6/QtCore/qvariant.h + mdp:/usr/include/qt6/QtCore/qvariantanimation.h + mdp:/usr/include/qt6/QtCore/qvarianthash.h + mdp:/usr/include/qt6/QtCore/qvariantlist.h + mdp:/usr/include/qt6/QtCore/qvariantmap.h + mdp:/usr/include/qt6/QtCore/qvarlengtharray.h + mdp:/usr/include/qt6/QtCore/qvector.h + mdp:/usr/include/qt6/QtCore/qversionnumber.h + mdp:/usr/include/qt6/QtCore/qversiontagging.h + mdp:/usr/include/qt6/QtCore/qwaitcondition.h + mdp:/usr/include/qt6/QtCore/qwineventnotifier.h + mdp:/usr/include/qt6/QtCore/qxmlstream.h + mdp:/usr/include/qt6/QtCore/qxpfunctional.h + mdp:/usr/include/qt6/QtCore/qxptype_traits.h + mdp:/usr/include/qt6/QtCore/qyieldcpu.h + mdp:/usr/include/qt6/QtGui/QFileSystemModel + mdp:/usr/include/qt6/QtGui/qcolor.h + mdp:/usr/include/qt6/QtGui/qfilesystemmodel.h + mdp:/usr/include/qt6/QtGui/qicon.h + mdp:/usr/include/qt6/QtGui/qimage.h + mdp:/usr/include/qt6/QtGui/qpaintdevice.h + mdp:/usr/include/qt6/QtGui/qpixelformat.h + mdp:/usr/include/qt6/QtGui/qpixmap.h + mdp:/usr/include/qt6/QtGui/qpolygon.h + mdp:/usr/include/qt6/QtGui/qregion.h + mdp:/usr/include/qt6/QtGui/qrgb.h + mdp:/usr/include/qt6/QtGui/qrgba64.h + mdp:/usr/include/qt6/QtGui/qtgui-config.h + mdp:/usr/include/qt6/QtGui/qtguiexports.h + mdp:/usr/include/qt6/QtGui/qtguiglobal.h + mdp:/usr/include/qt6/QtGui/qtransform.h + mdp:/usr/include/qt6/QtGui/qwindowdefs.h + mdp:/usr/include/sched.h + mdp:/usr/include/semaphore.h + mdp:/usr/include/stdc-predef.h + mdp:/usr/include/stdint.h + mdp:/usr/include/stdio.h + mdp:/usr/include/stdlib.h + mdp:/usr/include/string.h + mdp:/usr/include/strings.h + mdp:/usr/include/sys/cdefs.h + mdp:/usr/include/sys/select.h + mdp:/usr/include/sys/single_threaded.h + mdp:/usr/include/sys/syscall.h + mdp:/usr/include/sys/time.h + mdp:/usr/include/sys/types.h + mdp:/usr/include/syscall.h + mdp:/usr/include/time.h + mdp:/usr/include/unistd.h + mdp:/usr/include/wchar.h + mdp:/usr/include/wctype.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/adxintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxavx512intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxbf16intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxcomplexintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxfp16intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxfp8intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxint8intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxmovrsintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxtf32intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxtileintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxtransposeintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2-512bf16intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2-512convertintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2-512mediaintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2-512minmaxintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2-512satcvtintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2bf16intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2convertintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2copyintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2mediaintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2minmaxintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2satcvtintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx2intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512bf16intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512bf16vlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512bitalgintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512bitalgvlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512bwintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512cdintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512dqintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512fintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512fp16intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512fp16vlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512ifmaintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512ifmavlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vbmi2intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vbmi2vlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vbmiintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vbmivlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vlbwintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vldqintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vnniintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vnnivlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vp2intersectintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vp2intersectvlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vpopcntdqintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vpopcntdqvlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avxifmaintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avxintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avxneconvertintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avxvnniint16intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avxvnniint8intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avxvnniintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/bmi2intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/bmiintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/cetintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/cldemoteintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/clflushoptintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/clwbintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/clzerointrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/cmpccxaddintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/emmintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/enqcmdintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/f16cintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/fmaintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/fxsrintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/gfniintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/hresetintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/ia32intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/immintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/keylockerintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/lwpintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/lzcntintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/mm_malloc.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/mmintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/movdirintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/movrsintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/mwaitintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/mwaitxintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/pconfigintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/pkuintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/pmmintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/popcntintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/prfchiintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/prfchwintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/raointintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/rdseedintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/rtmintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/serializeintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/sgxintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/sha512intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/shaintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/sm3intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/sm4intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/smmintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stdarg.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stdbool.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stddef.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/tbmintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/tmmintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/tsxldtrkintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/uintrintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/usermsrintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/vaesintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/vpclmulqdqintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/waitpkgintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/wbnoinvdintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/wmmintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/x86gprintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/xmmintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/xsavecintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/xsaveintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/xsaveoptintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/xsavesintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/xtestintrin.h +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/context_preserver.cpp +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/video_metadata.cpp +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/settings_dialog.cpp +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/project_manager_watcher.cpp +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/project_manager_watcher.h + mmc:Q_OBJECT + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/kassetmanagerqt_autogen/moc_predefs.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/project_manager_watcher.h + mdp:/usr/include/alloca.h + mdp:/usr/include/asm-generic/bitsperlong.h + mdp:/usr/include/asm-generic/errno-base.h + mdp:/usr/include/asm-generic/errno.h + mdp:/usr/include/asm-generic/int-ll64.h + mdp:/usr/include/asm-generic/posix_types.h + mdp:/usr/include/asm-generic/types.h + mdp:/usr/include/asm/bitsperlong.h + mdp:/usr/include/asm/errno.h + mdp:/usr/include/asm/posix_types.h + mdp:/usr/include/asm/posix_types_64.h + mdp:/usr/include/asm/types.h + mdp:/usr/include/asm/unistd.h + mdp:/usr/include/asm/unistd_64.h + mdp:/usr/include/assert.h + mdp:/usr/include/bits/atomic_wide_counter.h + mdp:/usr/include/bits/byteswap.h + mdp:/usr/include/bits/confname.h + mdp:/usr/include/bits/cpu-set.h + mdp:/usr/include/bits/endian.h + mdp:/usr/include/bits/endianness.h + mdp:/usr/include/bits/environments.h + mdp:/usr/include/bits/errno.h + mdp:/usr/include/bits/floatn-common.h + mdp:/usr/include/bits/floatn.h + mdp:/usr/include/bits/getopt_core.h + mdp:/usr/include/bits/getopt_posix.h + mdp:/usr/include/bits/libc-header-start.h + mdp:/usr/include/bits/local_lim.h + mdp:/usr/include/bits/locale.h + mdp:/usr/include/bits/long-double.h + mdp:/usr/include/bits/posix1_lim.h + mdp:/usr/include/bits/posix2_lim.h + mdp:/usr/include/bits/posix_opt.h + mdp:/usr/include/bits/pthread_stack_min-dynamic.h + mdp:/usr/include/bits/pthreadtypes-arch.h + mdp:/usr/include/bits/pthreadtypes.h + mdp:/usr/include/bits/sched.h + mdp:/usr/include/bits/select.h + mdp:/usr/include/bits/setjmp.h + mdp:/usr/include/bits/stdint-intn.h + mdp:/usr/include/bits/stdint-least.h + mdp:/usr/include/bits/stdint-uintn.h + mdp:/usr/include/bits/stdio_lim.h + mdp:/usr/include/bits/stdlib-float.h + mdp:/usr/include/bits/struct_mutex.h + mdp:/usr/include/bits/struct_rwlock.h + mdp:/usr/include/bits/syscall.h + mdp:/usr/include/bits/thread-shared-types.h + mdp:/usr/include/bits/time.h + mdp:/usr/include/bits/time64.h + mdp:/usr/include/bits/timesize.h + mdp:/usr/include/bits/timex.h + mdp:/usr/include/bits/types.h + mdp:/usr/include/bits/types/FILE.h + mdp:/usr/include/bits/types/__FILE.h + mdp:/usr/include/bits/types/__fpos64_t.h + mdp:/usr/include/bits/types/__fpos_t.h + mdp:/usr/include/bits/types/__locale_t.h + mdp:/usr/include/bits/types/__mbstate_t.h + mdp:/usr/include/bits/types/__sigset_t.h + mdp:/usr/include/bits/types/clock_t.h + mdp:/usr/include/bits/types/clockid_t.h + mdp:/usr/include/bits/types/cookie_io_functions_t.h + mdp:/usr/include/bits/types/error_t.h + mdp:/usr/include/bits/types/locale_t.h + mdp:/usr/include/bits/types/mbstate_t.h + mdp:/usr/include/bits/types/sigset_t.h + mdp:/usr/include/bits/types/struct_FILE.h + mdp:/usr/include/bits/types/struct___jmp_buf_tag.h + mdp:/usr/include/bits/types/struct_itimerspec.h + mdp:/usr/include/bits/types/struct_sched_param.h + mdp:/usr/include/bits/types/struct_timespec.h + mdp:/usr/include/bits/types/struct_timeval.h + mdp:/usr/include/bits/types/struct_tm.h + mdp:/usr/include/bits/types/time_t.h + mdp:/usr/include/bits/types/timer_t.h + mdp:/usr/include/bits/types/wint_t.h + mdp:/usr/include/bits/typesizes.h + mdp:/usr/include/bits/uintn-identity.h + mdp:/usr/include/bits/uio_lim.h + mdp:/usr/include/bits/unistd_ext.h + mdp:/usr/include/bits/waitflags.h + mdp:/usr/include/bits/waitstatus.h + mdp:/usr/include/bits/wchar.h + mdp:/usr/include/bits/wctype-wchar.h + mdp:/usr/include/bits/wordsize.h + mdp:/usr/include/bits/xopen_lim.h + mdp:/usr/include/c++/15/algorithm + mdp:/usr/include/c++/15/array + mdp:/usr/include/c++/15/atomic + mdp:/usr/include/c++/15/backward/auto_ptr.h + mdp:/usr/include/c++/15/backward/binders.h + mdp:/usr/include/c++/15/bit + mdp:/usr/include/c++/15/bits/algorithmfwd.h + mdp:/usr/include/c++/15/bits/align.h + mdp:/usr/include/c++/15/bits/alloc_traits.h + mdp:/usr/include/c++/15/bits/allocated_ptr.h + mdp:/usr/include/c++/15/bits/allocator.h + mdp:/usr/include/c++/15/bits/atomic_base.h + mdp:/usr/include/c++/15/bits/atomic_lockfree_defines.h + mdp:/usr/include/c++/15/bits/atomic_wait.h + mdp:/usr/include/c++/15/bits/basic_ios.h + mdp:/usr/include/c++/15/bits/basic_ios.tcc + mdp:/usr/include/c++/15/bits/basic_string.h + mdp:/usr/include/c++/15/bits/basic_string.tcc + mdp:/usr/include/c++/15/bits/char_traits.h + mdp:/usr/include/c++/15/bits/charconv.h + mdp:/usr/include/c++/15/bits/chrono.h + mdp:/usr/include/c++/15/bits/chrono_io.h + mdp:/usr/include/c++/15/bits/codecvt.h + mdp:/usr/include/c++/15/bits/concept_check.h + mdp:/usr/include/c++/15/bits/cpp_type_traits.h + mdp:/usr/include/c++/15/bits/cxxabi_forced.h + mdp:/usr/include/c++/15/bits/cxxabi_init_exception.h + mdp:/usr/include/c++/15/bits/enable_special_members.h + mdp:/usr/include/c++/15/bits/erase_if.h + mdp:/usr/include/c++/15/bits/exception.h + mdp:/usr/include/c++/15/bits/exception_defines.h + mdp:/usr/include/c++/15/bits/exception_ptr.h + mdp:/usr/include/c++/15/bits/functexcept.h + mdp:/usr/include/c++/15/bits/functional_hash.h + mdp:/usr/include/c++/15/bits/hash_bytes.h + mdp:/usr/include/c++/15/bits/hashtable.h + mdp:/usr/include/c++/15/bits/hashtable_policy.h + mdp:/usr/include/c++/15/bits/invoke.h + mdp:/usr/include/c++/15/bits/ios_base.h + mdp:/usr/include/c++/15/bits/istream.tcc + mdp:/usr/include/c++/15/bits/iterator_concepts.h + mdp:/usr/include/c++/15/bits/list.tcc + mdp:/usr/include/c++/15/bits/locale_classes.h + mdp:/usr/include/c++/15/bits/locale_classes.tcc + mdp:/usr/include/c++/15/bits/locale_conv.h + mdp:/usr/include/c++/15/bits/locale_facets.h + mdp:/usr/include/c++/15/bits/locale_facets.tcc + mdp:/usr/include/c++/15/bits/locale_facets_nonio.h + mdp:/usr/include/c++/15/bits/locale_facets_nonio.tcc + mdp:/usr/include/c++/15/bits/localefwd.h + mdp:/usr/include/c++/15/bits/max_size_type.h + mdp:/usr/include/c++/15/bits/memory_resource.h + mdp:/usr/include/c++/15/bits/memoryfwd.h + mdp:/usr/include/c++/15/bits/move.h + mdp:/usr/include/c++/15/bits/nested_exception.h + mdp:/usr/include/c++/15/bits/new_allocator.h + mdp:/usr/include/c++/15/bits/node_handle.h + mdp:/usr/include/c++/15/bits/ostream.h + mdp:/usr/include/c++/15/bits/ostream.tcc + mdp:/usr/include/c++/15/bits/ostream_insert.h + mdp:/usr/include/c++/15/bits/parse_numbers.h + mdp:/usr/include/c++/15/bits/postypes.h + mdp:/usr/include/c++/15/bits/predefined_ops.h + mdp:/usr/include/c++/15/bits/ptr_traits.h + mdp:/usr/include/c++/15/bits/quoted_string.h + mdp:/usr/include/c++/15/bits/range_access.h + mdp:/usr/include/c++/15/bits/ranges_algo.h + mdp:/usr/include/c++/15/bits/ranges_algobase.h + mdp:/usr/include/c++/15/bits/ranges_base.h + mdp:/usr/include/c++/15/bits/ranges_cmp.h + mdp:/usr/include/c++/15/bits/ranges_uninitialized.h + mdp:/usr/include/c++/15/bits/ranges_util.h + mdp:/usr/include/c++/15/bits/refwrap.h + mdp:/usr/include/c++/15/bits/requires_hosted.h + mdp:/usr/include/c++/15/bits/shared_ptr.h + mdp:/usr/include/c++/15/bits/shared_ptr_atomic.h + mdp:/usr/include/c++/15/bits/shared_ptr_base.h + mdp:/usr/include/c++/15/bits/specfun.h + mdp:/usr/include/c++/15/bits/sstream.tcc + mdp:/usr/include/c++/15/bits/std_abs.h + mdp:/usr/include/c++/15/bits/std_function.h + mdp:/usr/include/c++/15/bits/std_mutex.h + mdp:/usr/include/c++/15/bits/stl_algo.h + mdp:/usr/include/c++/15/bits/stl_algobase.h + mdp:/usr/include/c++/15/bits/stl_bvector.h + mdp:/usr/include/c++/15/bits/stl_construct.h + mdp:/usr/include/c++/15/bits/stl_function.h + mdp:/usr/include/c++/15/bits/stl_heap.h + mdp:/usr/include/c++/15/bits/stl_iterator.h + mdp:/usr/include/c++/15/bits/stl_iterator_base_funcs.h + mdp:/usr/include/c++/15/bits/stl_iterator_base_types.h + mdp:/usr/include/c++/15/bits/stl_list.h + mdp:/usr/include/c++/15/bits/stl_map.h + mdp:/usr/include/c++/15/bits/stl_multimap.h + mdp:/usr/include/c++/15/bits/stl_multiset.h + mdp:/usr/include/c++/15/bits/stl_numeric.h + mdp:/usr/include/c++/15/bits/stl_pair.h + mdp:/usr/include/c++/15/bits/stl_raw_storage_iter.h + mdp:/usr/include/c++/15/bits/stl_relops.h + mdp:/usr/include/c++/15/bits/stl_set.h + mdp:/usr/include/c++/15/bits/stl_tempbuf.h + mdp:/usr/include/c++/15/bits/stl_tree.h + mdp:/usr/include/c++/15/bits/stl_uninitialized.h + mdp:/usr/include/c++/15/bits/stl_vector.h + mdp:/usr/include/c++/15/bits/stream_iterator.h + mdp:/usr/include/c++/15/bits/streambuf.tcc + mdp:/usr/include/c++/15/bits/streambuf_iterator.h + mdp:/usr/include/c++/15/bits/string_view.tcc + mdp:/usr/include/c++/15/bits/stringfwd.h + mdp:/usr/include/c++/15/bits/uniform_int_dist.h + mdp:/usr/include/c++/15/bits/unique_ptr.h + mdp:/usr/include/c++/15/bits/unordered_map.h + mdp:/usr/include/c++/15/bits/unordered_set.h + mdp:/usr/include/c++/15/bits/uses_allocator.h + mdp:/usr/include/c++/15/bits/uses_allocator_args.h + mdp:/usr/include/c++/15/bits/utility.h + mdp:/usr/include/c++/15/bits/vector.tcc + mdp:/usr/include/c++/15/bits/version.h + mdp:/usr/include/c++/15/cctype + mdp:/usr/include/c++/15/cerrno + mdp:/usr/include/c++/15/charconv + mdp:/usr/include/c++/15/chrono + mdp:/usr/include/c++/15/climits + mdp:/usr/include/c++/15/clocale + mdp:/usr/include/c++/15/cmath + mdp:/usr/include/c++/15/compare + mdp:/usr/include/c++/15/concepts + mdp:/usr/include/c++/15/cstddef + mdp:/usr/include/c++/15/cstdint + mdp:/usr/include/c++/15/cstdio + mdp:/usr/include/c++/15/cstdlib + mdp:/usr/include/c++/15/cstring + mdp:/usr/include/c++/15/ctime + mdp:/usr/include/c++/15/cwchar + mdp:/usr/include/c++/15/cwctype + mdp:/usr/include/c++/15/debug/assertions.h + mdp:/usr/include/c++/15/debug/debug.h + mdp:/usr/include/c++/15/exception + mdp:/usr/include/c++/15/ext/aligned_buffer.h + mdp:/usr/include/c++/15/ext/alloc_traits.h + mdp:/usr/include/c++/15/ext/atomicity.h + mdp:/usr/include/c++/15/ext/concurrence.h + mdp:/usr/include/c++/15/ext/numeric_traits.h + mdp:/usr/include/c++/15/ext/string_conversions.h + mdp:/usr/include/c++/15/ext/type_traits.h + mdp:/usr/include/c++/15/format + mdp:/usr/include/c++/15/functional + mdp:/usr/include/c++/15/initializer_list + mdp:/usr/include/c++/15/iomanip + mdp:/usr/include/c++/15/ios + mdp:/usr/include/c++/15/iosfwd + mdp:/usr/include/c++/15/istream + mdp:/usr/include/c++/15/iterator + mdp:/usr/include/c++/15/limits + mdp:/usr/include/c++/15/list + mdp:/usr/include/c++/15/locale + mdp:/usr/include/c++/15/map + mdp:/usr/include/c++/15/memory + mdp:/usr/include/c++/15/new + mdp:/usr/include/c++/15/numeric + mdp:/usr/include/c++/15/optional + mdp:/usr/include/c++/15/ostream + mdp:/usr/include/c++/15/pstl/execution_defs.h + mdp:/usr/include/c++/15/pstl/glue_numeric_defs.h + mdp:/usr/include/c++/15/pstl/pstl_config.h + mdp:/usr/include/c++/15/ratio + mdp:/usr/include/c++/15/set + mdp:/usr/include/c++/15/sstream + mdp:/usr/include/c++/15/stdexcept + mdp:/usr/include/c++/15/streambuf + mdp:/usr/include/c++/15/string + mdp:/usr/include/c++/15/string_view + mdp:/usr/include/c++/15/system_error + mdp:/usr/include/c++/15/tr1/bessel_function.tcc + mdp:/usr/include/c++/15/tr1/beta_function.tcc + mdp:/usr/include/c++/15/tr1/ell_integral.tcc + mdp:/usr/include/c++/15/tr1/exp_integral.tcc + mdp:/usr/include/c++/15/tr1/gamma.tcc + mdp:/usr/include/c++/15/tr1/hypergeometric.tcc + mdp:/usr/include/c++/15/tr1/legendre_function.tcc + mdp:/usr/include/c++/15/tr1/modified_bessel_func.tcc + mdp:/usr/include/c++/15/tr1/poly_hermite.tcc + mdp:/usr/include/c++/15/tr1/poly_laguerre.tcc + mdp:/usr/include/c++/15/tr1/riemann_zeta.tcc + mdp:/usr/include/c++/15/tr1/special_function_util.h + mdp:/usr/include/c++/15/tuple + mdp:/usr/include/c++/15/type_traits + mdp:/usr/include/c++/15/typeinfo + mdp:/usr/include/c++/15/unordered_map + mdp:/usr/include/c++/15/unordered_set + mdp:/usr/include/c++/15/utility + mdp:/usr/include/c++/15/variant + mdp:/usr/include/c++/15/vector + mdp:/usr/include/c++/15/version + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/atomic_word.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++allocator.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++config.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++locale.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/cpu_defines.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/ctype_base.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/ctype_inline.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/error_constants.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/gthr-default.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/gthr.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/messages_members.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/os_defines.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/time_members.h + mdp:/usr/include/ctype.h + mdp:/usr/include/endian.h + mdp:/usr/include/errno.h + mdp:/usr/include/features-time64.h + mdp:/usr/include/features.h + mdp:/usr/include/gnu/stubs-64.h + mdp:/usr/include/gnu/stubs.h + mdp:/usr/include/libintl.h + mdp:/usr/include/limits.h + mdp:/usr/include/linux/close_range.h + mdp:/usr/include/linux/errno.h + mdp:/usr/include/linux/limits.h + mdp:/usr/include/linux/posix_types.h + mdp:/usr/include/linux/sched/types.h + mdp:/usr/include/linux/stddef.h + mdp:/usr/include/linux/types.h + mdp:/usr/include/locale.h + mdp:/usr/include/pthread.h + mdp:/usr/include/qt6/QtCore/QDateTime + mdp:/usr/include/qt6/QtCore/QFileSystemWatcher + mdp:/usr/include/qt6/QtCore/QHash + mdp:/usr/include/qt6/QtCore/QObject + mdp:/usr/include/qt6/QtCore/QSet + mdp:/usr/include/qt6/QtCore/QString + mdp:/usr/include/qt6/QtCore/QStringList + mdp:/usr/include/qt6/QtCore/QTimer + mdp:/usr/include/qt6/QtCore/q17memory.h + mdp:/usr/include/qt6/QtCore/q20functional.h + mdp:/usr/include/qt6/QtCore/q20memory.h + mdp:/usr/include/qt6/QtCore/q20type_traits.h + mdp:/usr/include/qt6/QtCore/q20utility.h + mdp:/usr/include/qt6/QtCore/q23type_traits.h + mdp:/usr/include/qt6/QtCore/q23utility.h + mdp:/usr/include/qt6/QtCore/qabstracteventdispatcher.h + mdp:/usr/include/qt6/QtCore/qalgorithms.h + mdp:/usr/include/qt6/QtCore/qalloc.h + mdp:/usr/include/qt6/QtCore/qanystringview.h + mdp:/usr/include/qt6/QtCore/qarraydata.h + mdp:/usr/include/qt6/QtCore/qarraydataops.h + mdp:/usr/include/qt6/QtCore/qarraydatapointer.h + mdp:/usr/include/qt6/QtCore/qassert.h + mdp:/usr/include/qt6/QtCore/qatomic.h + mdp:/usr/include/qt6/QtCore/qatomic_cxx11.h + mdp:/usr/include/qt6/QtCore/qbasicatomic.h + mdp:/usr/include/qt6/QtCore/qbasictimer.h + mdp:/usr/include/qt6/QtCore/qbindingstorage.h + mdp:/usr/include/qt6/QtCore/qbytearray.h + mdp:/usr/include/qt6/QtCore/qbytearrayalgorithms.h + mdp:/usr/include/qt6/QtCore/qbytearraylist.h + mdp:/usr/include/qt6/QtCore/qbytearrayview.h + mdp:/usr/include/qt6/QtCore/qcalendar.h + mdp:/usr/include/qt6/QtCore/qchar.h + mdp:/usr/include/qt6/QtCore/qcompare.h + mdp:/usr/include/qt6/QtCore/qcompare_impl.h + mdp:/usr/include/qt6/QtCore/qcomparehelpers.h + mdp:/usr/include/qt6/QtCore/qcompilerdetection.h + mdp:/usr/include/qt6/QtCore/qconfig-64.h + mdp:/usr/include/qt6/QtCore/qconfig.h + mdp:/usr/include/qt6/QtCore/qconstructormacros.h + mdp:/usr/include/qt6/QtCore/qcontainerfwd.h + mdp:/usr/include/qt6/QtCore/qcontainerinfo.h + mdp:/usr/include/qt6/QtCore/qcontainertools_impl.h + mdp:/usr/include/qt6/QtCore/qcontiguouscache.h + mdp:/usr/include/qt6/QtCore/qdarwinhelpers.h + mdp:/usr/include/qt6/QtCore/qdatastream.h + mdp:/usr/include/qt6/QtCore/qdatetime.h + mdp:/usr/include/qt6/QtCore/qdeadlinetimer.h + mdp:/usr/include/qt6/QtCore/qdebug.h + mdp:/usr/include/qt6/QtCore/qeventloop.h + mdp:/usr/include/qt6/QtCore/qexceptionhandling.h + mdp:/usr/include/qt6/QtCore/qfilesystemwatcher.h + mdp:/usr/include/qt6/QtCore/qflags.h + mdp:/usr/include/qt6/QtCore/qfloat16.h + mdp:/usr/include/qt6/QtCore/qforeach.h + mdp:/usr/include/qt6/QtCore/qfunctionaltools_impl.h + mdp:/usr/include/qt6/QtCore/qfunctionpointer.h + mdp:/usr/include/qt6/QtCore/qgenericatomic.h + mdp:/usr/include/qt6/QtCore/qglobal.h + mdp:/usr/include/qt6/QtCore/qglobalstatic.h + mdp:/usr/include/qt6/QtCore/qhash.h + mdp:/usr/include/qt6/QtCore/qhashfunctions.h + mdp:/usr/include/qt6/QtCore/qiodevicebase.h + mdp:/usr/include/qt6/QtCore/qiterable.h + mdp:/usr/include/qt6/QtCore/qiterator.h + mdp:/usr/include/qt6/QtCore/qlatin1stringview.h + mdp:/usr/include/qt6/QtCore/qlist.h + mdp:/usr/include/qt6/QtCore/qlocale.h + mdp:/usr/include/qt6/QtCore/qlogging.h + mdp:/usr/include/qt6/QtCore/qmalloc.h + mdp:/usr/include/qt6/QtCore/qmap.h + mdp:/usr/include/qt6/QtCore/qmath.h + mdp:/usr/include/qt6/QtCore/qmetacontainer.h + mdp:/usr/include/qt6/QtCore/qmetatype.h + mdp:/usr/include/qt6/QtCore/qminmax.h + mdp:/usr/include/qt6/QtCore/qnamespace.h + mdp:/usr/include/qt6/QtCore/qnumeric.h + mdp:/usr/include/qt6/QtCore/qobject.h + mdp:/usr/include/qt6/QtCore/qobject_impl.h + mdp:/usr/include/qt6/QtCore/qobjectdefs.h + mdp:/usr/include/qt6/QtCore/qobjectdefs_impl.h + mdp:/usr/include/qt6/QtCore/qoverload.h + mdp:/usr/include/qt6/QtCore/qpair.h + mdp:/usr/include/qt6/QtCore/qprocessordetection.h + mdp:/usr/include/qt6/QtCore/qrefcount.h + mdp:/usr/include/qt6/QtCore/qscopedpointer.h + mdp:/usr/include/qt6/QtCore/qscopeguard.h + mdp:/usr/include/qt6/QtCore/qset.h + mdp:/usr/include/qt6/QtCore/qshareddata.h + mdp:/usr/include/qt6/QtCore/qshareddata_impl.h + mdp:/usr/include/qt6/QtCore/qsharedpointer.h + mdp:/usr/include/qt6/QtCore/qsharedpointer_impl.h + mdp:/usr/include/qt6/QtCore/qstdlibdetection.h + mdp:/usr/include/qt6/QtCore/qstring.h + mdp:/usr/include/qt6/QtCore/qstringalgorithms.h + mdp:/usr/include/qt6/QtCore/qstringbuilder.h + mdp:/usr/include/qt6/QtCore/qstringconverter.h + mdp:/usr/include/qt6/QtCore/qstringconverter_base.h + mdp:/usr/include/qt6/QtCore/qstringfwd.h + mdp:/usr/include/qt6/QtCore/qstringlist.h + mdp:/usr/include/qt6/QtCore/qstringmatcher.h + mdp:/usr/include/qt6/QtCore/qstringtokenizer.h + mdp:/usr/include/qt6/QtCore/qstringview.h + mdp:/usr/include/qt6/QtCore/qswap.h + mdp:/usr/include/qt6/QtCore/qsysinfo.h + mdp:/usr/include/qt6/QtCore/qsystemdetection.h + mdp:/usr/include/qt6/QtCore/qtaggedpointer.h + mdp:/usr/include/qt6/QtCore/qtclasshelpermacros.h + mdp:/usr/include/qt6/QtCore/qtconfiginclude.h + mdp:/usr/include/qt6/QtCore/qtconfigmacros.h + mdp:/usr/include/qt6/QtCore/qtcore-config.h + mdp:/usr/include/qt6/QtCore/qtcoreexports.h + mdp:/usr/include/qt6/QtCore/qtcoreglobal.h + mdp:/usr/include/qt6/QtCore/qtdeprecationdefinitions.h + mdp:/usr/include/qt6/QtCore/qtdeprecationmarkers.h + mdp:/usr/include/qt6/QtCore/qtenvironmentvariables.h + mdp:/usr/include/qt6/QtCore/qtextstream.h + mdp:/usr/include/qt6/QtCore/qtformat_impl.h + mdp:/usr/include/qt6/QtCore/qtimer.h + mdp:/usr/include/qt6/QtCore/qtmetamacros.h + mdp:/usr/include/qt6/QtCore/qtnoop.h + mdp:/usr/include/qt6/QtCore/qtpreprocessorsupport.h + mdp:/usr/include/qt6/QtCore/qtresource.h + mdp:/usr/include/qt6/QtCore/qttranslation.h + mdp:/usr/include/qt6/QtCore/qttypetraits.h + mdp:/usr/include/qt6/QtCore/qtversion.h + mdp:/usr/include/qt6/QtCore/qtversionchecks.h + mdp:/usr/include/qt6/QtCore/qtypeinfo.h + mdp:/usr/include/qt6/QtCore/qtypes.h + mdp:/usr/include/qt6/QtCore/qutf8stringview.h + mdp:/usr/include/qt6/QtCore/qvariant.h + mdp:/usr/include/qt6/QtCore/qvarlengtharray.h + mdp:/usr/include/qt6/QtCore/qversiontagging.h + mdp:/usr/include/qt6/QtCore/qxptype_traits.h + mdp:/usr/include/qt6/QtCore/qyieldcpu.h + mdp:/usr/include/sched.h + mdp:/usr/include/stdc-predef.h + mdp:/usr/include/stdint.h + mdp:/usr/include/stdio.h + mdp:/usr/include/stdlib.h + mdp:/usr/include/string.h + mdp:/usr/include/strings.h + mdp:/usr/include/sys/cdefs.h + mdp:/usr/include/sys/select.h + mdp:/usr/include/sys/single_threaded.h + mdp:/usr/include/sys/syscall.h + mdp:/usr/include/sys/types.h + mdp:/usr/include/syscall.h + mdp:/usr/include/time.h + mdp:/usr/include/unistd.h + mdp:/usr/include/wchar.h + mdp:/usr/include/wctype.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stdarg.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stdbool.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stddef.h +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/grid_scrub.h + mmc:Q_OBJECT + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/kassetmanagerqt_autogen/moc_predefs.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/grid_scrub.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/platform_session.h + mdp:/usr/include/alloca.h + mdp:/usr/include/asm-generic/bitsperlong.h + mdp:/usr/include/asm-generic/errno-base.h + mdp:/usr/include/asm-generic/errno.h + mdp:/usr/include/asm-generic/int-ll64.h + mdp:/usr/include/asm-generic/posix_types.h + mdp:/usr/include/asm-generic/types.h + mdp:/usr/include/asm/bitsperlong.h + mdp:/usr/include/asm/errno.h + mdp:/usr/include/asm/posix_types.h + mdp:/usr/include/asm/posix_types_64.h + mdp:/usr/include/asm/types.h + mdp:/usr/include/asm/unistd.h + mdp:/usr/include/asm/unistd_64.h + mdp:/usr/include/assert.h + mdp:/usr/include/bits/atomic_wide_counter.h + mdp:/usr/include/bits/byteswap.h + mdp:/usr/include/bits/confname.h + mdp:/usr/include/bits/cpu-set.h + mdp:/usr/include/bits/endian.h + mdp:/usr/include/bits/endianness.h + mdp:/usr/include/bits/environments.h + mdp:/usr/include/bits/errno.h + mdp:/usr/include/bits/floatn-common.h + mdp:/usr/include/bits/floatn.h + mdp:/usr/include/bits/getopt_core.h + mdp:/usr/include/bits/getopt_posix.h + mdp:/usr/include/bits/libc-header-start.h + mdp:/usr/include/bits/local_lim.h + mdp:/usr/include/bits/locale.h + mdp:/usr/include/bits/long-double.h + mdp:/usr/include/bits/posix1_lim.h + mdp:/usr/include/bits/posix2_lim.h + mdp:/usr/include/bits/posix_opt.h + mdp:/usr/include/bits/pthread_stack_min-dynamic.h + mdp:/usr/include/bits/pthreadtypes-arch.h + mdp:/usr/include/bits/pthreadtypes.h + mdp:/usr/include/bits/sched.h + mdp:/usr/include/bits/select.h + mdp:/usr/include/bits/setjmp.h + mdp:/usr/include/bits/stdint-intn.h + mdp:/usr/include/bits/stdint-least.h + mdp:/usr/include/bits/stdint-uintn.h + mdp:/usr/include/bits/stdio_lim.h + mdp:/usr/include/bits/stdlib-float.h + mdp:/usr/include/bits/struct_mutex.h + mdp:/usr/include/bits/struct_rwlock.h + mdp:/usr/include/bits/syscall.h + mdp:/usr/include/bits/thread-shared-types.h + mdp:/usr/include/bits/time.h + mdp:/usr/include/bits/time64.h + mdp:/usr/include/bits/timesize.h + mdp:/usr/include/bits/timex.h + mdp:/usr/include/bits/types.h + mdp:/usr/include/bits/types/FILE.h + mdp:/usr/include/bits/types/__FILE.h + mdp:/usr/include/bits/types/__fpos64_t.h + mdp:/usr/include/bits/types/__fpos_t.h + mdp:/usr/include/bits/types/__locale_t.h + mdp:/usr/include/bits/types/__mbstate_t.h + mdp:/usr/include/bits/types/__sigset_t.h + mdp:/usr/include/bits/types/clock_t.h + mdp:/usr/include/bits/types/clockid_t.h + mdp:/usr/include/bits/types/cookie_io_functions_t.h + mdp:/usr/include/bits/types/error_t.h + mdp:/usr/include/bits/types/locale_t.h + mdp:/usr/include/bits/types/mbstate_t.h + mdp:/usr/include/bits/types/sigset_t.h + mdp:/usr/include/bits/types/struct_FILE.h + mdp:/usr/include/bits/types/struct___jmp_buf_tag.h + mdp:/usr/include/bits/types/struct_itimerspec.h + mdp:/usr/include/bits/types/struct_sched_param.h + mdp:/usr/include/bits/types/struct_timespec.h + mdp:/usr/include/bits/types/struct_timeval.h + mdp:/usr/include/bits/types/struct_tm.h + mdp:/usr/include/bits/types/time_t.h + mdp:/usr/include/bits/types/timer_t.h + mdp:/usr/include/bits/types/wint_t.h + mdp:/usr/include/bits/typesizes.h + mdp:/usr/include/bits/uintn-identity.h + mdp:/usr/include/bits/uio_lim.h + mdp:/usr/include/bits/unistd_ext.h + mdp:/usr/include/bits/waitflags.h + mdp:/usr/include/bits/waitstatus.h + mdp:/usr/include/bits/wchar.h + mdp:/usr/include/bits/wctype-wchar.h + mdp:/usr/include/bits/wordsize.h + mdp:/usr/include/bits/xopen_lim.h + mdp:/usr/include/c++/15/algorithm + mdp:/usr/include/c++/15/array + mdp:/usr/include/c++/15/atomic + mdp:/usr/include/c++/15/backward/auto_ptr.h + mdp:/usr/include/c++/15/backward/binders.h + mdp:/usr/include/c++/15/bit + mdp:/usr/include/c++/15/bits/algorithmfwd.h + mdp:/usr/include/c++/15/bits/align.h + mdp:/usr/include/c++/15/bits/alloc_traits.h + mdp:/usr/include/c++/15/bits/allocated_ptr.h + mdp:/usr/include/c++/15/bits/allocator.h + mdp:/usr/include/c++/15/bits/atomic_base.h + mdp:/usr/include/c++/15/bits/atomic_lockfree_defines.h + mdp:/usr/include/c++/15/bits/atomic_wait.h + mdp:/usr/include/c++/15/bits/basic_ios.h + mdp:/usr/include/c++/15/bits/basic_ios.tcc + mdp:/usr/include/c++/15/bits/basic_string.h + mdp:/usr/include/c++/15/bits/basic_string.tcc + mdp:/usr/include/c++/15/bits/char_traits.h + mdp:/usr/include/c++/15/bits/charconv.h + mdp:/usr/include/c++/15/bits/chrono.h + mdp:/usr/include/c++/15/bits/chrono_io.h + mdp:/usr/include/c++/15/bits/codecvt.h + mdp:/usr/include/c++/15/bits/concept_check.h + mdp:/usr/include/c++/15/bits/cpp_type_traits.h + mdp:/usr/include/c++/15/bits/cxxabi_forced.h + mdp:/usr/include/c++/15/bits/cxxabi_init_exception.h + mdp:/usr/include/c++/15/bits/enable_special_members.h + mdp:/usr/include/c++/15/bits/erase_if.h + mdp:/usr/include/c++/15/bits/exception.h + mdp:/usr/include/c++/15/bits/exception_defines.h + mdp:/usr/include/c++/15/bits/exception_ptr.h + mdp:/usr/include/c++/15/bits/functexcept.h + mdp:/usr/include/c++/15/bits/functional_hash.h + mdp:/usr/include/c++/15/bits/hash_bytes.h + mdp:/usr/include/c++/15/bits/hashtable.h + mdp:/usr/include/c++/15/bits/hashtable_policy.h + mdp:/usr/include/c++/15/bits/invoke.h + mdp:/usr/include/c++/15/bits/ios_base.h + mdp:/usr/include/c++/15/bits/istream.tcc + mdp:/usr/include/c++/15/bits/iterator_concepts.h + mdp:/usr/include/c++/15/bits/list.tcc + mdp:/usr/include/c++/15/bits/locale_classes.h + mdp:/usr/include/c++/15/bits/locale_classes.tcc + mdp:/usr/include/c++/15/bits/locale_conv.h + mdp:/usr/include/c++/15/bits/locale_facets.h + mdp:/usr/include/c++/15/bits/locale_facets.tcc + mdp:/usr/include/c++/15/bits/locale_facets_nonio.h + mdp:/usr/include/c++/15/bits/locale_facets_nonio.tcc + mdp:/usr/include/c++/15/bits/localefwd.h + mdp:/usr/include/c++/15/bits/max_size_type.h + mdp:/usr/include/c++/15/bits/memory_resource.h + mdp:/usr/include/c++/15/bits/memoryfwd.h + mdp:/usr/include/c++/15/bits/move.h + mdp:/usr/include/c++/15/bits/nested_exception.h + mdp:/usr/include/c++/15/bits/new_allocator.h + mdp:/usr/include/c++/15/bits/node_handle.h + mdp:/usr/include/c++/15/bits/ostream.h + mdp:/usr/include/c++/15/bits/ostream.tcc + mdp:/usr/include/c++/15/bits/ostream_insert.h + mdp:/usr/include/c++/15/bits/parse_numbers.h + mdp:/usr/include/c++/15/bits/postypes.h + mdp:/usr/include/c++/15/bits/predefined_ops.h + mdp:/usr/include/c++/15/bits/ptr_traits.h + mdp:/usr/include/c++/15/bits/quoted_string.h + mdp:/usr/include/c++/15/bits/range_access.h + mdp:/usr/include/c++/15/bits/ranges_algo.h + mdp:/usr/include/c++/15/bits/ranges_algobase.h + mdp:/usr/include/c++/15/bits/ranges_base.h + mdp:/usr/include/c++/15/bits/ranges_cmp.h + mdp:/usr/include/c++/15/bits/ranges_uninitialized.h + mdp:/usr/include/c++/15/bits/ranges_util.h + mdp:/usr/include/c++/15/bits/refwrap.h + mdp:/usr/include/c++/15/bits/requires_hosted.h + mdp:/usr/include/c++/15/bits/shared_ptr.h + mdp:/usr/include/c++/15/bits/shared_ptr_atomic.h + mdp:/usr/include/c++/15/bits/shared_ptr_base.h + mdp:/usr/include/c++/15/bits/specfun.h + mdp:/usr/include/c++/15/bits/sstream.tcc + mdp:/usr/include/c++/15/bits/std_abs.h + mdp:/usr/include/c++/15/bits/std_function.h + mdp:/usr/include/c++/15/bits/std_mutex.h + mdp:/usr/include/c++/15/bits/stl_algo.h + mdp:/usr/include/c++/15/bits/stl_algobase.h + mdp:/usr/include/c++/15/bits/stl_bvector.h + mdp:/usr/include/c++/15/bits/stl_construct.h + mdp:/usr/include/c++/15/bits/stl_function.h + mdp:/usr/include/c++/15/bits/stl_heap.h + mdp:/usr/include/c++/15/bits/stl_iterator.h + mdp:/usr/include/c++/15/bits/stl_iterator_base_funcs.h + mdp:/usr/include/c++/15/bits/stl_iterator_base_types.h + mdp:/usr/include/c++/15/bits/stl_list.h + mdp:/usr/include/c++/15/bits/stl_map.h + mdp:/usr/include/c++/15/bits/stl_multimap.h + mdp:/usr/include/c++/15/bits/stl_multiset.h + mdp:/usr/include/c++/15/bits/stl_numeric.h + mdp:/usr/include/c++/15/bits/stl_pair.h + mdp:/usr/include/c++/15/bits/stl_raw_storage_iter.h + mdp:/usr/include/c++/15/bits/stl_relops.h + mdp:/usr/include/c++/15/bits/stl_set.h + mdp:/usr/include/c++/15/bits/stl_tempbuf.h + mdp:/usr/include/c++/15/bits/stl_tree.h + mdp:/usr/include/c++/15/bits/stl_uninitialized.h + mdp:/usr/include/c++/15/bits/stl_vector.h + mdp:/usr/include/c++/15/bits/stream_iterator.h + mdp:/usr/include/c++/15/bits/streambuf.tcc + mdp:/usr/include/c++/15/bits/streambuf_iterator.h + mdp:/usr/include/c++/15/bits/string_view.tcc + mdp:/usr/include/c++/15/bits/stringfwd.h + mdp:/usr/include/c++/15/bits/uniform_int_dist.h + mdp:/usr/include/c++/15/bits/unique_ptr.h + mdp:/usr/include/c++/15/bits/unordered_map.h + mdp:/usr/include/c++/15/bits/unordered_set.h + mdp:/usr/include/c++/15/bits/uses_allocator.h + mdp:/usr/include/c++/15/bits/uses_allocator_args.h + mdp:/usr/include/c++/15/bits/utility.h + mdp:/usr/include/c++/15/bits/vector.tcc + mdp:/usr/include/c++/15/bits/version.h + mdp:/usr/include/c++/15/cassert + mdp:/usr/include/c++/15/cctype + mdp:/usr/include/c++/15/cerrno + mdp:/usr/include/c++/15/charconv + mdp:/usr/include/c++/15/chrono + mdp:/usr/include/c++/15/climits + mdp:/usr/include/c++/15/clocale + mdp:/usr/include/c++/15/cmath + mdp:/usr/include/c++/15/compare + mdp:/usr/include/c++/15/concepts + mdp:/usr/include/c++/15/cstddef + mdp:/usr/include/c++/15/cstdint + mdp:/usr/include/c++/15/cstdio + mdp:/usr/include/c++/15/cstdlib + mdp:/usr/include/c++/15/cstring + mdp:/usr/include/c++/15/ctime + mdp:/usr/include/c++/15/cwchar + mdp:/usr/include/c++/15/cwctype + mdp:/usr/include/c++/15/debug/assertions.h + mdp:/usr/include/c++/15/debug/debug.h + mdp:/usr/include/c++/15/exception + mdp:/usr/include/c++/15/ext/aligned_buffer.h + mdp:/usr/include/c++/15/ext/alloc_traits.h + mdp:/usr/include/c++/15/ext/atomicity.h + mdp:/usr/include/c++/15/ext/concurrence.h + mdp:/usr/include/c++/15/ext/numeric_traits.h + mdp:/usr/include/c++/15/ext/string_conversions.h + mdp:/usr/include/c++/15/ext/type_traits.h + mdp:/usr/include/c++/15/format + mdp:/usr/include/c++/15/functional + mdp:/usr/include/c++/15/initializer_list + mdp:/usr/include/c++/15/iomanip + mdp:/usr/include/c++/15/ios + mdp:/usr/include/c++/15/iosfwd + mdp:/usr/include/c++/15/istream + mdp:/usr/include/c++/15/iterator + mdp:/usr/include/c++/15/limits + mdp:/usr/include/c++/15/list + mdp:/usr/include/c++/15/locale + mdp:/usr/include/c++/15/map + mdp:/usr/include/c++/15/memory + mdp:/usr/include/c++/15/new + mdp:/usr/include/c++/15/numeric + mdp:/usr/include/c++/15/optional + mdp:/usr/include/c++/15/ostream + mdp:/usr/include/c++/15/pstl/execution_defs.h + mdp:/usr/include/c++/15/pstl/glue_numeric_defs.h + mdp:/usr/include/c++/15/pstl/pstl_config.h + mdp:/usr/include/c++/15/ratio + mdp:/usr/include/c++/15/set + mdp:/usr/include/c++/15/sstream + mdp:/usr/include/c++/15/stdexcept + mdp:/usr/include/c++/15/streambuf + mdp:/usr/include/c++/15/string + mdp:/usr/include/c++/15/string_view + mdp:/usr/include/c++/15/system_error + mdp:/usr/include/c++/15/tr1/bessel_function.tcc + mdp:/usr/include/c++/15/tr1/beta_function.tcc + mdp:/usr/include/c++/15/tr1/ell_integral.tcc + mdp:/usr/include/c++/15/tr1/exp_integral.tcc + mdp:/usr/include/c++/15/tr1/gamma.tcc + mdp:/usr/include/c++/15/tr1/hypergeometric.tcc + mdp:/usr/include/c++/15/tr1/legendre_function.tcc + mdp:/usr/include/c++/15/tr1/modified_bessel_func.tcc + mdp:/usr/include/c++/15/tr1/poly_hermite.tcc + mdp:/usr/include/c++/15/tr1/poly_laguerre.tcc + mdp:/usr/include/c++/15/tr1/riemann_zeta.tcc + mdp:/usr/include/c++/15/tr1/special_function_util.h + mdp:/usr/include/c++/15/tuple + mdp:/usr/include/c++/15/type_traits + mdp:/usr/include/c++/15/typeinfo + mdp:/usr/include/c++/15/unordered_map + mdp:/usr/include/c++/15/unordered_set + mdp:/usr/include/c++/15/utility + mdp:/usr/include/c++/15/variant + mdp:/usr/include/c++/15/vector + mdp:/usr/include/c++/15/version + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/atomic_word.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++allocator.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++config.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++locale.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/cpu_defines.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/ctype_base.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/ctype_inline.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/error_constants.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/gthr-default.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/gthr.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/messages_members.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/os_defines.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/time_members.h + mdp:/usr/include/ctype.h + mdp:/usr/include/endian.h + mdp:/usr/include/errno.h + mdp:/usr/include/features-time64.h + mdp:/usr/include/features.h + mdp:/usr/include/gnu/stubs-64.h + mdp:/usr/include/gnu/stubs.h + mdp:/usr/include/libintl.h + mdp:/usr/include/limits.h + mdp:/usr/include/linux/close_range.h + mdp:/usr/include/linux/errno.h + mdp:/usr/include/linux/limits.h + mdp:/usr/include/linux/posix_types.h + mdp:/usr/include/linux/sched/types.h + mdp:/usr/include/linux/stddef.h + mdp:/usr/include/linux/types.h + mdp:/usr/include/locale.h + mdp:/usr/include/pthread.h + mdp:/usr/include/qt6/QtCore/QHash + mdp:/usr/include/qt6/QtCore/QModelIndex + mdp:/usr/include/qt6/QtCore/QObject + mdp:/usr/include/qt6/QtCore/QString + mdp:/usr/include/qt6/QtCore/q17memory.h + mdp:/usr/include/qt6/QtCore/q20functional.h + mdp:/usr/include/qt6/QtCore/q20iterator.h + mdp:/usr/include/qt6/QtCore/q20memory.h + mdp:/usr/include/qt6/QtCore/q20type_traits.h + mdp:/usr/include/qt6/QtCore/q20utility.h + mdp:/usr/include/qt6/QtCore/q23type_traits.h + mdp:/usr/include/qt6/QtCore/q23utility.h + mdp:/usr/include/qt6/QtCore/qabstractitemmodel.h + mdp:/usr/include/qt6/QtCore/qalgorithms.h + mdp:/usr/include/qt6/QtCore/qalloc.h + mdp:/usr/include/qt6/QtCore/qanystringview.h + mdp:/usr/include/qt6/QtCore/qarraydata.h + mdp:/usr/include/qt6/QtCore/qarraydataops.h + mdp:/usr/include/qt6/QtCore/qarraydatapointer.h + mdp:/usr/include/qt6/QtCore/qassert.h + mdp:/usr/include/qt6/QtCore/qatomic.h + mdp:/usr/include/qt6/QtCore/qatomic_cxx11.h + mdp:/usr/include/qt6/QtCore/qbasicatomic.h + mdp:/usr/include/qt6/QtCore/qbindingstorage.h + mdp:/usr/include/qt6/QtCore/qbytearray.h + mdp:/usr/include/qt6/QtCore/qbytearrayalgorithms.h + mdp:/usr/include/qt6/QtCore/qbytearraylist.h + mdp:/usr/include/qt6/QtCore/qbytearrayview.h + mdp:/usr/include/qt6/QtCore/qchar.h + mdp:/usr/include/qt6/QtCore/qcheckedint_impl.h + mdp:/usr/include/qt6/QtCore/qcompare.h + mdp:/usr/include/qt6/QtCore/qcompare_impl.h + mdp:/usr/include/qt6/QtCore/qcomparehelpers.h + mdp:/usr/include/qt6/QtCore/qcompilerdetection.h + mdp:/usr/include/qt6/QtCore/qconfig-64.h + mdp:/usr/include/qt6/QtCore/qconfig.h + mdp:/usr/include/qt6/QtCore/qconstructormacros.h + mdp:/usr/include/qt6/QtCore/qcontainerfwd.h + mdp:/usr/include/qt6/QtCore/qcontainerinfo.h + mdp:/usr/include/qt6/QtCore/qcontainertools_impl.h + mdp:/usr/include/qt6/QtCore/qcontiguouscache.h + mdp:/usr/include/qt6/QtCore/qdarwinhelpers.h + mdp:/usr/include/qt6/QtCore/qdatastream.h + mdp:/usr/include/qt6/QtCore/qdebug.h + mdp:/usr/include/qt6/QtCore/qendian.h + mdp:/usr/include/qt6/QtCore/qexceptionhandling.h + mdp:/usr/include/qt6/QtCore/qflags.h + mdp:/usr/include/qt6/QtCore/qfloat16.h + mdp:/usr/include/qt6/QtCore/qforeach.h + mdp:/usr/include/qt6/QtCore/qfunctionaltools_impl.h + mdp:/usr/include/qt6/QtCore/qfunctionpointer.h + mdp:/usr/include/qt6/QtCore/qgenericatomic.h + mdp:/usr/include/qt6/QtCore/qglobal.h + mdp:/usr/include/qt6/QtCore/qglobalstatic.h + mdp:/usr/include/qt6/QtCore/qhash.h + mdp:/usr/include/qt6/QtCore/qhashfunctions.h + mdp:/usr/include/qt6/QtCore/qiodevicebase.h + mdp:/usr/include/qt6/QtCore/qitemselectionmodel.h + mdp:/usr/include/qt6/QtCore/qiterable.h + mdp:/usr/include/qt6/QtCore/qiterator.h + mdp:/usr/include/qt6/QtCore/qlatin1stringview.h + mdp:/usr/include/qt6/QtCore/qline.h + mdp:/usr/include/qt6/QtCore/qlist.h + mdp:/usr/include/qt6/QtCore/qlocale.h + mdp:/usr/include/qt6/QtCore/qlogging.h + mdp:/usr/include/qt6/QtCore/qmalloc.h + mdp:/usr/include/qt6/QtCore/qmap.h + mdp:/usr/include/qt6/QtCore/qmargins.h + mdp:/usr/include/qt6/QtCore/qmath.h + mdp:/usr/include/qt6/QtCore/qmetacontainer.h + mdp:/usr/include/qt6/QtCore/qmetatype.h + mdp:/usr/include/qt6/QtCore/qminmax.h + mdp:/usr/include/qt6/QtCore/qnamespace.h + mdp:/usr/include/qt6/QtCore/qnumeric.h + mdp:/usr/include/qt6/QtCore/qobject.h + mdp:/usr/include/qt6/QtCore/qobject_impl.h + mdp:/usr/include/qt6/QtCore/qobjectdefs.h + mdp:/usr/include/qt6/QtCore/qobjectdefs_impl.h + mdp:/usr/include/qt6/QtCore/qoverload.h + mdp:/usr/include/qt6/QtCore/qpair.h + mdp:/usr/include/qt6/QtCore/qpoint.h + mdp:/usr/include/qt6/QtCore/qprocessordetection.h + mdp:/usr/include/qt6/QtCore/qrect.h + mdp:/usr/include/qt6/QtCore/qrefcount.h + mdp:/usr/include/qt6/QtCore/qregularexpression.h + mdp:/usr/include/qt6/QtCore/qscopedpointer.h + mdp:/usr/include/qt6/QtCore/qscopeguard.h + mdp:/usr/include/qt6/QtCore/qset.h + mdp:/usr/include/qt6/QtCore/qshareddata.h + mdp:/usr/include/qt6/QtCore/qshareddata_impl.h + mdp:/usr/include/qt6/QtCore/qsharedpointer.h + mdp:/usr/include/qt6/QtCore/qsharedpointer_impl.h + mdp:/usr/include/qt6/QtCore/qsize.h + mdp:/usr/include/qt6/QtCore/qspan.h + mdp:/usr/include/qt6/QtCore/qstdlibdetection.h + mdp:/usr/include/qt6/QtCore/qstring.h + mdp:/usr/include/qt6/QtCore/qstringalgorithms.h + mdp:/usr/include/qt6/QtCore/qstringbuilder.h + mdp:/usr/include/qt6/QtCore/qstringconverter.h + mdp:/usr/include/qt6/QtCore/qstringconverter_base.h + mdp:/usr/include/qt6/QtCore/qstringfwd.h + mdp:/usr/include/qt6/QtCore/qstringlist.h + mdp:/usr/include/qt6/QtCore/qstringmatcher.h + mdp:/usr/include/qt6/QtCore/qstringtokenizer.h + mdp:/usr/include/qt6/QtCore/qstringview.h + mdp:/usr/include/qt6/QtCore/qswap.h + mdp:/usr/include/qt6/QtCore/qsysinfo.h + mdp:/usr/include/qt6/QtCore/qsystemdetection.h + mdp:/usr/include/qt6/QtCore/qtaggedpointer.h + mdp:/usr/include/qt6/QtCore/qtclasshelpermacros.h + mdp:/usr/include/qt6/QtCore/qtconfiginclude.h + mdp:/usr/include/qt6/QtCore/qtconfigmacros.h + mdp:/usr/include/qt6/QtCore/qtcore-config.h + mdp:/usr/include/qt6/QtCore/qtcoreexports.h + mdp:/usr/include/qt6/QtCore/qtcoreglobal.h + mdp:/usr/include/qt6/QtCore/qtdeprecationdefinitions.h + mdp:/usr/include/qt6/QtCore/qtdeprecationmarkers.h + mdp:/usr/include/qt6/QtCore/qtenvironmentvariables.h + mdp:/usr/include/qt6/QtCore/qtextstream.h + mdp:/usr/include/qt6/QtCore/qtformat_impl.h + mdp:/usr/include/qt6/QtCore/qtmetamacros.h + mdp:/usr/include/qt6/QtCore/qtnoop.h + mdp:/usr/include/qt6/QtCore/qtpreprocessorsupport.h + mdp:/usr/include/qt6/QtCore/qtresource.h + mdp:/usr/include/qt6/QtCore/qttranslation.h + mdp:/usr/include/qt6/QtCore/qttypetraits.h + mdp:/usr/include/qt6/QtCore/qtversion.h + mdp:/usr/include/qt6/QtCore/qtversionchecks.h + mdp:/usr/include/qt6/QtCore/qtypeinfo.h + mdp:/usr/include/qt6/QtCore/qtypes.h + mdp:/usr/include/qt6/QtCore/qutf8stringview.h + mdp:/usr/include/qt6/QtCore/qvariant.h + mdp:/usr/include/qt6/QtCore/qvarlengtharray.h + mdp:/usr/include/qt6/QtCore/qversiontagging.h + mdp:/usr/include/qt6/QtCore/qxptype_traits.h + mdp:/usr/include/qt6/QtCore/qyieldcpu.h + mdp:/usr/include/qt6/QtGui/QPixmap + mdp:/usr/include/qt6/QtGui/qaction.h + mdp:/usr/include/qt6/QtGui/qbitmap.h + mdp:/usr/include/qt6/QtGui/qbrush.h + mdp:/usr/include/qt6/QtGui/qcolor.h + mdp:/usr/include/qt6/QtGui/qcursor.h + mdp:/usr/include/qt6/QtGui/qfont.h + mdp:/usr/include/qt6/QtGui/qfontinfo.h + mdp:/usr/include/qt6/QtGui/qfontmetrics.h + mdp:/usr/include/qt6/QtGui/qfontvariableaxis.h + mdp:/usr/include/qt6/QtGui/qicon.h + mdp:/usr/include/qt6/QtGui/qimage.h + mdp:/usr/include/qt6/QtGui/qkeysequence.h + mdp:/usr/include/qt6/QtGui/qpaintdevice.h + mdp:/usr/include/qt6/QtGui/qpalette.h + mdp:/usr/include/qt6/QtGui/qpixelformat.h + mdp:/usr/include/qt6/QtGui/qpixmap.h + mdp:/usr/include/qt6/QtGui/qpolygon.h + mdp:/usr/include/qt6/QtGui/qregion.h + mdp:/usr/include/qt6/QtGui/qrgb.h + mdp:/usr/include/qt6/QtGui/qrgba64.h + mdp:/usr/include/qt6/QtGui/qtgui-config.h + mdp:/usr/include/qt6/QtGui/qtguiexports.h + mdp:/usr/include/qt6/QtGui/qtguiglobal.h + mdp:/usr/include/qt6/QtGui/qtransform.h + mdp:/usr/include/qt6/QtGui/qvalidator.h + mdp:/usr/include/qt6/QtGui/qwindowdefs.h + mdp:/usr/include/qt6/QtWidgets/QAbstractItemView + mdp:/usr/include/qt6/QtWidgets/QWidget + mdp:/usr/include/qt6/QtWidgets/qabstractitemdelegate.h + mdp:/usr/include/qt6/QtWidgets/qabstractitemview.h + mdp:/usr/include/qt6/QtWidgets/qabstractscrollarea.h + mdp:/usr/include/qt6/QtWidgets/qabstractslider.h + mdp:/usr/include/qt6/QtWidgets/qabstractspinbox.h + mdp:/usr/include/qt6/QtWidgets/qframe.h + mdp:/usr/include/qt6/QtWidgets/qrubberband.h + mdp:/usr/include/qt6/QtWidgets/qsizepolicy.h + mdp:/usr/include/qt6/QtWidgets/qslider.h + mdp:/usr/include/qt6/QtWidgets/qstyle.h + mdp:/usr/include/qt6/QtWidgets/qstyleoption.h + mdp:/usr/include/qt6/QtWidgets/qtabbar.h + mdp:/usr/include/qt6/QtWidgets/qtabwidget.h + mdp:/usr/include/qt6/QtWidgets/qtwidgets-config.h + mdp:/usr/include/qt6/QtWidgets/qtwidgetsexports.h + mdp:/usr/include/qt6/QtWidgets/qtwidgetsglobal.h + mdp:/usr/include/qt6/QtWidgets/qwidget.h + mdp:/usr/include/sched.h + mdp:/usr/include/stdc-predef.h + mdp:/usr/include/stdint.h + mdp:/usr/include/stdio.h + mdp:/usr/include/stdlib.h + mdp:/usr/include/string.h + mdp:/usr/include/strings.h + mdp:/usr/include/sys/cdefs.h + mdp:/usr/include/sys/select.h + mdp:/usr/include/sys/single_threaded.h + mdp:/usr/include/sys/syscall.h + mdp:/usr/include/sys/types.h + mdp:/usr/include/syscall.h + mdp:/usr/include/time.h + mdp:/usr/include/unistd.h + mdp:/usr/include/wchar.h + mdp:/usr/include/wctype.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stdarg.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stdbool.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stddef.h +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/context_preserver.h + mmc:Q_OBJECT + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/kassetmanagerqt_autogen/moc_predefs.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/context_preserver.h + mdp:/usr/include/alloca.h + mdp:/usr/include/asm-generic/bitsperlong.h + mdp:/usr/include/asm-generic/errno-base.h + mdp:/usr/include/asm-generic/errno.h + mdp:/usr/include/asm-generic/int-ll64.h + mdp:/usr/include/asm-generic/posix_types.h + mdp:/usr/include/asm-generic/types.h + mdp:/usr/include/asm/bitsperlong.h + mdp:/usr/include/asm/errno.h + mdp:/usr/include/asm/posix_types.h + mdp:/usr/include/asm/posix_types_64.h + mdp:/usr/include/asm/types.h + mdp:/usr/include/asm/unistd.h + mdp:/usr/include/asm/unistd_64.h + mdp:/usr/include/assert.h + mdp:/usr/include/bits/atomic_wide_counter.h + mdp:/usr/include/bits/byteswap.h + mdp:/usr/include/bits/confname.h + mdp:/usr/include/bits/cpu-set.h + mdp:/usr/include/bits/endian.h + mdp:/usr/include/bits/endianness.h + mdp:/usr/include/bits/environments.h + mdp:/usr/include/bits/errno.h + mdp:/usr/include/bits/floatn-common.h + mdp:/usr/include/bits/floatn.h + mdp:/usr/include/bits/getopt_core.h + mdp:/usr/include/bits/getopt_posix.h + mdp:/usr/include/bits/libc-header-start.h + mdp:/usr/include/bits/local_lim.h + mdp:/usr/include/bits/locale.h + mdp:/usr/include/bits/long-double.h + mdp:/usr/include/bits/posix1_lim.h + mdp:/usr/include/bits/posix2_lim.h + mdp:/usr/include/bits/posix_opt.h + mdp:/usr/include/bits/pthread_stack_min-dynamic.h + mdp:/usr/include/bits/pthreadtypes-arch.h + mdp:/usr/include/bits/pthreadtypes.h + mdp:/usr/include/bits/sched.h + mdp:/usr/include/bits/select.h + mdp:/usr/include/bits/setjmp.h + mdp:/usr/include/bits/stdint-intn.h + mdp:/usr/include/bits/stdint-least.h + mdp:/usr/include/bits/stdint-uintn.h + mdp:/usr/include/bits/stdio_lim.h + mdp:/usr/include/bits/stdlib-float.h + mdp:/usr/include/bits/struct_mutex.h + mdp:/usr/include/bits/struct_rwlock.h + mdp:/usr/include/bits/syscall.h + mdp:/usr/include/bits/thread-shared-types.h + mdp:/usr/include/bits/time.h + mdp:/usr/include/bits/time64.h + mdp:/usr/include/bits/timesize.h + mdp:/usr/include/bits/timex.h + mdp:/usr/include/bits/types.h + mdp:/usr/include/bits/types/FILE.h + mdp:/usr/include/bits/types/__FILE.h + mdp:/usr/include/bits/types/__fpos64_t.h + mdp:/usr/include/bits/types/__fpos_t.h + mdp:/usr/include/bits/types/__locale_t.h + mdp:/usr/include/bits/types/__mbstate_t.h + mdp:/usr/include/bits/types/__sigset_t.h + mdp:/usr/include/bits/types/clock_t.h + mdp:/usr/include/bits/types/clockid_t.h + mdp:/usr/include/bits/types/cookie_io_functions_t.h + mdp:/usr/include/bits/types/error_t.h + mdp:/usr/include/bits/types/locale_t.h + mdp:/usr/include/bits/types/mbstate_t.h + mdp:/usr/include/bits/types/sigset_t.h + mdp:/usr/include/bits/types/struct_FILE.h + mdp:/usr/include/bits/types/struct___jmp_buf_tag.h + mdp:/usr/include/bits/types/struct_itimerspec.h + mdp:/usr/include/bits/types/struct_sched_param.h + mdp:/usr/include/bits/types/struct_timespec.h + mdp:/usr/include/bits/types/struct_timeval.h + mdp:/usr/include/bits/types/struct_tm.h + mdp:/usr/include/bits/types/time_t.h + mdp:/usr/include/bits/types/timer_t.h + mdp:/usr/include/bits/types/wint_t.h + mdp:/usr/include/bits/typesizes.h + mdp:/usr/include/bits/uintn-identity.h + mdp:/usr/include/bits/uio_lim.h + mdp:/usr/include/bits/unistd_ext.h + mdp:/usr/include/bits/waitflags.h + mdp:/usr/include/bits/waitstatus.h + mdp:/usr/include/bits/wchar.h + mdp:/usr/include/bits/wctype-wchar.h + mdp:/usr/include/bits/wordsize.h + mdp:/usr/include/bits/xopen_lim.h + mdp:/usr/include/c++/15/algorithm + mdp:/usr/include/c++/15/array + mdp:/usr/include/c++/15/atomic + mdp:/usr/include/c++/15/backward/auto_ptr.h + mdp:/usr/include/c++/15/backward/binders.h + mdp:/usr/include/c++/15/bit + mdp:/usr/include/c++/15/bits/algorithmfwd.h + mdp:/usr/include/c++/15/bits/align.h + mdp:/usr/include/c++/15/bits/alloc_traits.h + mdp:/usr/include/c++/15/bits/allocated_ptr.h + mdp:/usr/include/c++/15/bits/allocator.h + mdp:/usr/include/c++/15/bits/atomic_base.h + mdp:/usr/include/c++/15/bits/atomic_lockfree_defines.h + mdp:/usr/include/c++/15/bits/atomic_wait.h + mdp:/usr/include/c++/15/bits/basic_ios.h + mdp:/usr/include/c++/15/bits/basic_ios.tcc + mdp:/usr/include/c++/15/bits/basic_string.h + mdp:/usr/include/c++/15/bits/basic_string.tcc + mdp:/usr/include/c++/15/bits/char_traits.h + mdp:/usr/include/c++/15/bits/charconv.h + mdp:/usr/include/c++/15/bits/chrono.h + mdp:/usr/include/c++/15/bits/chrono_io.h + mdp:/usr/include/c++/15/bits/codecvt.h + mdp:/usr/include/c++/15/bits/concept_check.h + mdp:/usr/include/c++/15/bits/cpp_type_traits.h + mdp:/usr/include/c++/15/bits/cxxabi_forced.h + mdp:/usr/include/c++/15/bits/cxxabi_init_exception.h + mdp:/usr/include/c++/15/bits/enable_special_members.h + mdp:/usr/include/c++/15/bits/erase_if.h + mdp:/usr/include/c++/15/bits/exception.h + mdp:/usr/include/c++/15/bits/exception_defines.h + mdp:/usr/include/c++/15/bits/exception_ptr.h + mdp:/usr/include/c++/15/bits/functexcept.h + mdp:/usr/include/c++/15/bits/functional_hash.h + mdp:/usr/include/c++/15/bits/hash_bytes.h + mdp:/usr/include/c++/15/bits/hashtable.h + mdp:/usr/include/c++/15/bits/hashtable_policy.h + mdp:/usr/include/c++/15/bits/invoke.h + mdp:/usr/include/c++/15/bits/ios_base.h + mdp:/usr/include/c++/15/bits/istream.tcc + mdp:/usr/include/c++/15/bits/iterator_concepts.h + mdp:/usr/include/c++/15/bits/list.tcc + mdp:/usr/include/c++/15/bits/locale_classes.h + mdp:/usr/include/c++/15/bits/locale_classes.tcc + mdp:/usr/include/c++/15/bits/locale_conv.h + mdp:/usr/include/c++/15/bits/locale_facets.h + mdp:/usr/include/c++/15/bits/locale_facets.tcc + mdp:/usr/include/c++/15/bits/locale_facets_nonio.h + mdp:/usr/include/c++/15/bits/locale_facets_nonio.tcc + mdp:/usr/include/c++/15/bits/localefwd.h + mdp:/usr/include/c++/15/bits/max_size_type.h + mdp:/usr/include/c++/15/bits/memory_resource.h + mdp:/usr/include/c++/15/bits/memoryfwd.h + mdp:/usr/include/c++/15/bits/move.h + mdp:/usr/include/c++/15/bits/nested_exception.h + mdp:/usr/include/c++/15/bits/new_allocator.h + mdp:/usr/include/c++/15/bits/node_handle.h + mdp:/usr/include/c++/15/bits/ostream.h + mdp:/usr/include/c++/15/bits/ostream.tcc + mdp:/usr/include/c++/15/bits/ostream_insert.h + mdp:/usr/include/c++/15/bits/parse_numbers.h + mdp:/usr/include/c++/15/bits/postypes.h + mdp:/usr/include/c++/15/bits/predefined_ops.h + mdp:/usr/include/c++/15/bits/ptr_traits.h + mdp:/usr/include/c++/15/bits/quoted_string.h + mdp:/usr/include/c++/15/bits/range_access.h + mdp:/usr/include/c++/15/bits/ranges_algo.h + mdp:/usr/include/c++/15/bits/ranges_algobase.h + mdp:/usr/include/c++/15/bits/ranges_base.h + mdp:/usr/include/c++/15/bits/ranges_cmp.h + mdp:/usr/include/c++/15/bits/ranges_uninitialized.h + mdp:/usr/include/c++/15/bits/ranges_util.h + mdp:/usr/include/c++/15/bits/refwrap.h + mdp:/usr/include/c++/15/bits/requires_hosted.h + mdp:/usr/include/c++/15/bits/shared_ptr.h + mdp:/usr/include/c++/15/bits/shared_ptr_atomic.h + mdp:/usr/include/c++/15/bits/shared_ptr_base.h + mdp:/usr/include/c++/15/bits/specfun.h + mdp:/usr/include/c++/15/bits/sstream.tcc + mdp:/usr/include/c++/15/bits/std_abs.h + mdp:/usr/include/c++/15/bits/std_function.h + mdp:/usr/include/c++/15/bits/std_mutex.h + mdp:/usr/include/c++/15/bits/stl_algo.h + mdp:/usr/include/c++/15/bits/stl_algobase.h + mdp:/usr/include/c++/15/bits/stl_bvector.h + mdp:/usr/include/c++/15/bits/stl_construct.h + mdp:/usr/include/c++/15/bits/stl_function.h + mdp:/usr/include/c++/15/bits/stl_heap.h + mdp:/usr/include/c++/15/bits/stl_iterator.h + mdp:/usr/include/c++/15/bits/stl_iterator_base_funcs.h + mdp:/usr/include/c++/15/bits/stl_iterator_base_types.h + mdp:/usr/include/c++/15/bits/stl_list.h + mdp:/usr/include/c++/15/bits/stl_map.h + mdp:/usr/include/c++/15/bits/stl_multimap.h + mdp:/usr/include/c++/15/bits/stl_multiset.h + mdp:/usr/include/c++/15/bits/stl_numeric.h + mdp:/usr/include/c++/15/bits/stl_pair.h + mdp:/usr/include/c++/15/bits/stl_raw_storage_iter.h + mdp:/usr/include/c++/15/bits/stl_relops.h + mdp:/usr/include/c++/15/bits/stl_set.h + mdp:/usr/include/c++/15/bits/stl_tempbuf.h + mdp:/usr/include/c++/15/bits/stl_tree.h + mdp:/usr/include/c++/15/bits/stl_uninitialized.h + mdp:/usr/include/c++/15/bits/stl_vector.h + mdp:/usr/include/c++/15/bits/stream_iterator.h + mdp:/usr/include/c++/15/bits/streambuf.tcc + mdp:/usr/include/c++/15/bits/streambuf_iterator.h + mdp:/usr/include/c++/15/bits/string_view.tcc + mdp:/usr/include/c++/15/bits/stringfwd.h + mdp:/usr/include/c++/15/bits/uniform_int_dist.h + mdp:/usr/include/c++/15/bits/unique_ptr.h + mdp:/usr/include/c++/15/bits/unordered_map.h + mdp:/usr/include/c++/15/bits/unordered_set.h + mdp:/usr/include/c++/15/bits/uses_allocator.h + mdp:/usr/include/c++/15/bits/uses_allocator_args.h + mdp:/usr/include/c++/15/bits/utility.h + mdp:/usr/include/c++/15/bits/vector.tcc + mdp:/usr/include/c++/15/bits/version.h + mdp:/usr/include/c++/15/cctype + mdp:/usr/include/c++/15/cerrno + mdp:/usr/include/c++/15/charconv + mdp:/usr/include/c++/15/chrono + mdp:/usr/include/c++/15/climits + mdp:/usr/include/c++/15/clocale + mdp:/usr/include/c++/15/cmath + mdp:/usr/include/c++/15/compare + mdp:/usr/include/c++/15/concepts + mdp:/usr/include/c++/15/cstddef + mdp:/usr/include/c++/15/cstdint + mdp:/usr/include/c++/15/cstdio + mdp:/usr/include/c++/15/cstdlib + mdp:/usr/include/c++/15/cstring + mdp:/usr/include/c++/15/ctime + mdp:/usr/include/c++/15/cwchar + mdp:/usr/include/c++/15/cwctype + mdp:/usr/include/c++/15/debug/assertions.h + mdp:/usr/include/c++/15/debug/debug.h + mdp:/usr/include/c++/15/exception + mdp:/usr/include/c++/15/ext/aligned_buffer.h + mdp:/usr/include/c++/15/ext/alloc_traits.h + mdp:/usr/include/c++/15/ext/atomicity.h + mdp:/usr/include/c++/15/ext/concurrence.h + mdp:/usr/include/c++/15/ext/numeric_traits.h + mdp:/usr/include/c++/15/ext/string_conversions.h + mdp:/usr/include/c++/15/ext/type_traits.h + mdp:/usr/include/c++/15/format + mdp:/usr/include/c++/15/functional + mdp:/usr/include/c++/15/initializer_list + mdp:/usr/include/c++/15/iomanip + mdp:/usr/include/c++/15/ios + mdp:/usr/include/c++/15/iosfwd + mdp:/usr/include/c++/15/istream + mdp:/usr/include/c++/15/iterator + mdp:/usr/include/c++/15/limits + mdp:/usr/include/c++/15/list + mdp:/usr/include/c++/15/locale + mdp:/usr/include/c++/15/map + mdp:/usr/include/c++/15/memory + mdp:/usr/include/c++/15/new + mdp:/usr/include/c++/15/numeric + mdp:/usr/include/c++/15/optional + mdp:/usr/include/c++/15/ostream + mdp:/usr/include/c++/15/pstl/execution_defs.h + mdp:/usr/include/c++/15/pstl/glue_numeric_defs.h + mdp:/usr/include/c++/15/pstl/pstl_config.h + mdp:/usr/include/c++/15/ratio + mdp:/usr/include/c++/15/set + mdp:/usr/include/c++/15/sstream + mdp:/usr/include/c++/15/stdexcept + mdp:/usr/include/c++/15/streambuf + mdp:/usr/include/c++/15/string + mdp:/usr/include/c++/15/string_view + mdp:/usr/include/c++/15/system_error + mdp:/usr/include/c++/15/tr1/bessel_function.tcc + mdp:/usr/include/c++/15/tr1/beta_function.tcc + mdp:/usr/include/c++/15/tr1/ell_integral.tcc + mdp:/usr/include/c++/15/tr1/exp_integral.tcc + mdp:/usr/include/c++/15/tr1/gamma.tcc + mdp:/usr/include/c++/15/tr1/hypergeometric.tcc + mdp:/usr/include/c++/15/tr1/legendre_function.tcc + mdp:/usr/include/c++/15/tr1/modified_bessel_func.tcc + mdp:/usr/include/c++/15/tr1/poly_hermite.tcc + mdp:/usr/include/c++/15/tr1/poly_laguerre.tcc + mdp:/usr/include/c++/15/tr1/riemann_zeta.tcc + mdp:/usr/include/c++/15/tr1/special_function_util.h + mdp:/usr/include/c++/15/tuple + mdp:/usr/include/c++/15/type_traits + mdp:/usr/include/c++/15/typeinfo + mdp:/usr/include/c++/15/unordered_map + mdp:/usr/include/c++/15/unordered_set + mdp:/usr/include/c++/15/utility + mdp:/usr/include/c++/15/variant + mdp:/usr/include/c++/15/vector + mdp:/usr/include/c++/15/version + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/atomic_word.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++allocator.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++config.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++locale.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/cpu_defines.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/ctype_base.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/ctype_inline.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/error_constants.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/gthr-default.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/gthr.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/messages_members.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/os_defines.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/time_members.h + mdp:/usr/include/ctype.h + mdp:/usr/include/endian.h + mdp:/usr/include/errno.h + mdp:/usr/include/features-time64.h + mdp:/usr/include/features.h + mdp:/usr/include/gnu/stubs-64.h + mdp:/usr/include/gnu/stubs.h + mdp:/usr/include/libintl.h + mdp:/usr/include/limits.h + mdp:/usr/include/linux/close_range.h + mdp:/usr/include/linux/errno.h + mdp:/usr/include/linux/limits.h + mdp:/usr/include/linux/posix_types.h + mdp:/usr/include/linux/sched/types.h + mdp:/usr/include/linux/stddef.h + mdp:/usr/include/linux/types.h + mdp:/usr/include/locale.h + mdp:/usr/include/pthread.h + mdp:/usr/include/qt6/QtCore/QObject + mdp:/usr/include/qt6/QtCore/QPoint + mdp:/usr/include/qt6/QtCore/QSet + mdp:/usr/include/qt6/QtCore/QSettings + mdp:/usr/include/qt6/QtCore/QString + mdp:/usr/include/qt6/QtCore/QStringList + mdp:/usr/include/qt6/QtCore/q17memory.h + mdp:/usr/include/qt6/QtCore/q20functional.h + mdp:/usr/include/qt6/QtCore/q20memory.h + mdp:/usr/include/qt6/QtCore/q20type_traits.h + mdp:/usr/include/qt6/QtCore/q20utility.h + mdp:/usr/include/qt6/QtCore/q23type_traits.h + mdp:/usr/include/qt6/QtCore/q23utility.h + mdp:/usr/include/qt6/QtCore/qalgorithms.h + mdp:/usr/include/qt6/QtCore/qalloc.h + mdp:/usr/include/qt6/QtCore/qanystringview.h + mdp:/usr/include/qt6/QtCore/qarraydata.h + mdp:/usr/include/qt6/QtCore/qarraydataops.h + mdp:/usr/include/qt6/QtCore/qarraydatapointer.h + mdp:/usr/include/qt6/QtCore/qassert.h + mdp:/usr/include/qt6/QtCore/qatomic.h + mdp:/usr/include/qt6/QtCore/qatomic_cxx11.h + mdp:/usr/include/qt6/QtCore/qbasicatomic.h + mdp:/usr/include/qt6/QtCore/qbindingstorage.h + mdp:/usr/include/qt6/QtCore/qbytearray.h + mdp:/usr/include/qt6/QtCore/qbytearrayalgorithms.h + mdp:/usr/include/qt6/QtCore/qbytearraylist.h + mdp:/usr/include/qt6/QtCore/qbytearrayview.h + mdp:/usr/include/qt6/QtCore/qchar.h + mdp:/usr/include/qt6/QtCore/qcheckedint_impl.h + mdp:/usr/include/qt6/QtCore/qcompare.h + mdp:/usr/include/qt6/QtCore/qcompare_impl.h + mdp:/usr/include/qt6/QtCore/qcomparehelpers.h + mdp:/usr/include/qt6/QtCore/qcompilerdetection.h + mdp:/usr/include/qt6/QtCore/qconfig-64.h + mdp:/usr/include/qt6/QtCore/qconfig.h + mdp:/usr/include/qt6/QtCore/qconstructormacros.h + mdp:/usr/include/qt6/QtCore/qcontainerfwd.h + mdp:/usr/include/qt6/QtCore/qcontainerinfo.h + mdp:/usr/include/qt6/QtCore/qcontainertools_impl.h + mdp:/usr/include/qt6/QtCore/qcontiguouscache.h + mdp:/usr/include/qt6/QtCore/qdarwinhelpers.h + mdp:/usr/include/qt6/QtCore/qdatastream.h + mdp:/usr/include/qt6/QtCore/qdebug.h + mdp:/usr/include/qt6/QtCore/qexceptionhandling.h + mdp:/usr/include/qt6/QtCore/qflags.h + mdp:/usr/include/qt6/QtCore/qfloat16.h + mdp:/usr/include/qt6/QtCore/qforeach.h + mdp:/usr/include/qt6/QtCore/qfunctionaltools_impl.h + mdp:/usr/include/qt6/QtCore/qfunctionpointer.h + mdp:/usr/include/qt6/QtCore/qgenericatomic.h + mdp:/usr/include/qt6/QtCore/qglobal.h + mdp:/usr/include/qt6/QtCore/qglobalstatic.h + mdp:/usr/include/qt6/QtCore/qhash.h + mdp:/usr/include/qt6/QtCore/qhashfunctions.h + mdp:/usr/include/qt6/QtCore/qiodevicebase.h + mdp:/usr/include/qt6/QtCore/qiterable.h + mdp:/usr/include/qt6/QtCore/qiterator.h + mdp:/usr/include/qt6/QtCore/qlatin1stringview.h + mdp:/usr/include/qt6/QtCore/qlist.h + mdp:/usr/include/qt6/QtCore/qlogging.h + mdp:/usr/include/qt6/QtCore/qmalloc.h + mdp:/usr/include/qt6/QtCore/qmap.h + mdp:/usr/include/qt6/QtCore/qmath.h + mdp:/usr/include/qt6/QtCore/qmetacontainer.h + mdp:/usr/include/qt6/QtCore/qmetatype.h + mdp:/usr/include/qt6/QtCore/qminmax.h + mdp:/usr/include/qt6/QtCore/qnamespace.h + mdp:/usr/include/qt6/QtCore/qnumeric.h + mdp:/usr/include/qt6/QtCore/qobject.h + mdp:/usr/include/qt6/QtCore/qobject_impl.h + mdp:/usr/include/qt6/QtCore/qobjectdefs.h + mdp:/usr/include/qt6/QtCore/qobjectdefs_impl.h + mdp:/usr/include/qt6/QtCore/qoverload.h + mdp:/usr/include/qt6/QtCore/qpair.h + mdp:/usr/include/qt6/QtCore/qpoint.h + mdp:/usr/include/qt6/QtCore/qprocessordetection.h + mdp:/usr/include/qt6/QtCore/qrefcount.h + mdp:/usr/include/qt6/QtCore/qscopedpointer.h + mdp:/usr/include/qt6/QtCore/qscopeguard.h + mdp:/usr/include/qt6/QtCore/qset.h + mdp:/usr/include/qt6/QtCore/qsettings.h + mdp:/usr/include/qt6/QtCore/qshareddata.h + mdp:/usr/include/qt6/QtCore/qshareddata_impl.h + mdp:/usr/include/qt6/QtCore/qsharedpointer.h + mdp:/usr/include/qt6/QtCore/qsharedpointer_impl.h + mdp:/usr/include/qt6/QtCore/qstdlibdetection.h + mdp:/usr/include/qt6/QtCore/qstring.h + mdp:/usr/include/qt6/QtCore/qstringalgorithms.h + mdp:/usr/include/qt6/QtCore/qstringbuilder.h + mdp:/usr/include/qt6/QtCore/qstringconverter.h + mdp:/usr/include/qt6/QtCore/qstringconverter_base.h + mdp:/usr/include/qt6/QtCore/qstringfwd.h + mdp:/usr/include/qt6/QtCore/qstringlist.h + mdp:/usr/include/qt6/QtCore/qstringmatcher.h + mdp:/usr/include/qt6/QtCore/qstringtokenizer.h + mdp:/usr/include/qt6/QtCore/qstringview.h + mdp:/usr/include/qt6/QtCore/qswap.h + mdp:/usr/include/qt6/QtCore/qsysinfo.h + mdp:/usr/include/qt6/QtCore/qsystemdetection.h + mdp:/usr/include/qt6/QtCore/qtaggedpointer.h + mdp:/usr/include/qt6/QtCore/qtclasshelpermacros.h + mdp:/usr/include/qt6/QtCore/qtconfiginclude.h + mdp:/usr/include/qt6/QtCore/qtconfigmacros.h + mdp:/usr/include/qt6/QtCore/qtcore-config.h + mdp:/usr/include/qt6/QtCore/qtcoreexports.h + mdp:/usr/include/qt6/QtCore/qtcoreglobal.h + mdp:/usr/include/qt6/QtCore/qtdeprecationdefinitions.h + mdp:/usr/include/qt6/QtCore/qtdeprecationmarkers.h + mdp:/usr/include/qt6/QtCore/qtenvironmentvariables.h + mdp:/usr/include/qt6/QtCore/qtextstream.h + mdp:/usr/include/qt6/QtCore/qtformat_impl.h + mdp:/usr/include/qt6/QtCore/qtmetamacros.h + mdp:/usr/include/qt6/QtCore/qtnoop.h + mdp:/usr/include/qt6/QtCore/qtpreprocessorsupport.h + mdp:/usr/include/qt6/QtCore/qtresource.h + mdp:/usr/include/qt6/QtCore/qttranslation.h + mdp:/usr/include/qt6/QtCore/qttypetraits.h + mdp:/usr/include/qt6/QtCore/qtversion.h + mdp:/usr/include/qt6/QtCore/qtversionchecks.h + mdp:/usr/include/qt6/QtCore/qtypeinfo.h + mdp:/usr/include/qt6/QtCore/qtypes.h + mdp:/usr/include/qt6/QtCore/qutf8stringview.h + mdp:/usr/include/qt6/QtCore/qvariant.h + mdp:/usr/include/qt6/QtCore/qvarlengtharray.h + mdp:/usr/include/qt6/QtCore/qversiontagging.h + mdp:/usr/include/qt6/QtCore/qxptype_traits.h + mdp:/usr/include/qt6/QtCore/qyieldcpu.h + mdp:/usr/include/sched.h + mdp:/usr/include/stdc-predef.h + mdp:/usr/include/stdint.h + mdp:/usr/include/stdio.h + mdp:/usr/include/stdlib.h + mdp:/usr/include/string.h + mdp:/usr/include/strings.h + mdp:/usr/include/sys/cdefs.h + mdp:/usr/include/sys/select.h + mdp:/usr/include/sys/single_threaded.h + mdp:/usr/include/sys/syscall.h + mdp:/usr/include/sys/types.h + mdp:/usr/include/syscall.h + mdp:/usr/include/time.h + mdp:/usr/include/unistd.h + mdp:/usr/include/wchar.h + mdp:/usr/include/wctype.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stdarg.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stdbool.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stddef.h +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/asset_sequence_grouping_proxy_model.h + mmc:Q_OBJECT + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/kassetmanagerqt_autogen/moc_predefs.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/asset_sequence_grouping_proxy_model.h + mdp:/usr/include/alloca.h + mdp:/usr/include/asm-generic/bitsperlong.h + mdp:/usr/include/asm-generic/errno-base.h + mdp:/usr/include/asm-generic/errno.h + mdp:/usr/include/asm-generic/int-ll64.h + mdp:/usr/include/asm-generic/posix_types.h + mdp:/usr/include/asm-generic/types.h + mdp:/usr/include/asm/bitsperlong.h + mdp:/usr/include/asm/errno.h + mdp:/usr/include/asm/posix_types.h + mdp:/usr/include/asm/posix_types_64.h + mdp:/usr/include/asm/types.h + mdp:/usr/include/asm/unistd.h + mdp:/usr/include/asm/unistd_64.h + mdp:/usr/include/assert.h + mdp:/usr/include/bits/atomic_wide_counter.h + mdp:/usr/include/bits/byteswap.h + mdp:/usr/include/bits/confname.h + mdp:/usr/include/bits/cpu-set.h + mdp:/usr/include/bits/endian.h + mdp:/usr/include/bits/endianness.h + mdp:/usr/include/bits/environments.h + mdp:/usr/include/bits/errno.h + mdp:/usr/include/bits/floatn-common.h + mdp:/usr/include/bits/floatn.h + mdp:/usr/include/bits/getopt_core.h + mdp:/usr/include/bits/getopt_posix.h + mdp:/usr/include/bits/libc-header-start.h + mdp:/usr/include/bits/local_lim.h + mdp:/usr/include/bits/locale.h + mdp:/usr/include/bits/long-double.h + mdp:/usr/include/bits/posix1_lim.h + mdp:/usr/include/bits/posix2_lim.h + mdp:/usr/include/bits/posix_opt.h + mdp:/usr/include/bits/pthread_stack_min-dynamic.h + mdp:/usr/include/bits/pthreadtypes-arch.h + mdp:/usr/include/bits/pthreadtypes.h + mdp:/usr/include/bits/sched.h + mdp:/usr/include/bits/select.h + mdp:/usr/include/bits/setjmp.h + mdp:/usr/include/bits/stdint-intn.h + mdp:/usr/include/bits/stdint-least.h + mdp:/usr/include/bits/stdint-uintn.h + mdp:/usr/include/bits/stdio_lim.h + mdp:/usr/include/bits/stdlib-float.h + mdp:/usr/include/bits/struct_mutex.h + mdp:/usr/include/bits/struct_rwlock.h + mdp:/usr/include/bits/syscall.h + mdp:/usr/include/bits/thread-shared-types.h + mdp:/usr/include/bits/time.h + mdp:/usr/include/bits/time64.h + mdp:/usr/include/bits/timesize.h + mdp:/usr/include/bits/timex.h + mdp:/usr/include/bits/types.h + mdp:/usr/include/bits/types/FILE.h + mdp:/usr/include/bits/types/__FILE.h + mdp:/usr/include/bits/types/__fpos64_t.h + mdp:/usr/include/bits/types/__fpos_t.h + mdp:/usr/include/bits/types/__locale_t.h + mdp:/usr/include/bits/types/__mbstate_t.h + mdp:/usr/include/bits/types/__sigset_t.h + mdp:/usr/include/bits/types/clock_t.h + mdp:/usr/include/bits/types/clockid_t.h + mdp:/usr/include/bits/types/cookie_io_functions_t.h + mdp:/usr/include/bits/types/error_t.h + mdp:/usr/include/bits/types/locale_t.h + mdp:/usr/include/bits/types/mbstate_t.h + mdp:/usr/include/bits/types/sigset_t.h + mdp:/usr/include/bits/types/struct_FILE.h + mdp:/usr/include/bits/types/struct___jmp_buf_tag.h + mdp:/usr/include/bits/types/struct_itimerspec.h + mdp:/usr/include/bits/types/struct_sched_param.h + mdp:/usr/include/bits/types/struct_timespec.h + mdp:/usr/include/bits/types/struct_timeval.h + mdp:/usr/include/bits/types/struct_tm.h + mdp:/usr/include/bits/types/time_t.h + mdp:/usr/include/bits/types/timer_t.h + mdp:/usr/include/bits/types/wint_t.h + mdp:/usr/include/bits/typesizes.h + mdp:/usr/include/bits/uintn-identity.h + mdp:/usr/include/bits/uio_lim.h + mdp:/usr/include/bits/unistd_ext.h + mdp:/usr/include/bits/waitflags.h + mdp:/usr/include/bits/waitstatus.h + mdp:/usr/include/bits/wchar.h + mdp:/usr/include/bits/wctype-wchar.h + mdp:/usr/include/bits/wordsize.h + mdp:/usr/include/bits/xopen_lim.h + mdp:/usr/include/c++/15/algorithm + mdp:/usr/include/c++/15/array + mdp:/usr/include/c++/15/atomic + mdp:/usr/include/c++/15/backward/auto_ptr.h + mdp:/usr/include/c++/15/backward/binders.h + mdp:/usr/include/c++/15/bit + mdp:/usr/include/c++/15/bits/algorithmfwd.h + mdp:/usr/include/c++/15/bits/align.h + mdp:/usr/include/c++/15/bits/alloc_traits.h + mdp:/usr/include/c++/15/bits/allocated_ptr.h + mdp:/usr/include/c++/15/bits/allocator.h + mdp:/usr/include/c++/15/bits/atomic_base.h + mdp:/usr/include/c++/15/bits/atomic_lockfree_defines.h + mdp:/usr/include/c++/15/bits/atomic_wait.h + mdp:/usr/include/c++/15/bits/basic_ios.h + mdp:/usr/include/c++/15/bits/basic_ios.tcc + mdp:/usr/include/c++/15/bits/basic_string.h + mdp:/usr/include/c++/15/bits/basic_string.tcc + mdp:/usr/include/c++/15/bits/char_traits.h + mdp:/usr/include/c++/15/bits/charconv.h + mdp:/usr/include/c++/15/bits/chrono.h + mdp:/usr/include/c++/15/bits/chrono_io.h + mdp:/usr/include/c++/15/bits/codecvt.h + mdp:/usr/include/c++/15/bits/concept_check.h + mdp:/usr/include/c++/15/bits/cpp_type_traits.h + mdp:/usr/include/c++/15/bits/cxxabi_forced.h + mdp:/usr/include/c++/15/bits/cxxabi_init_exception.h + mdp:/usr/include/c++/15/bits/enable_special_members.h + mdp:/usr/include/c++/15/bits/erase_if.h + mdp:/usr/include/c++/15/bits/exception.h + mdp:/usr/include/c++/15/bits/exception_defines.h + mdp:/usr/include/c++/15/bits/exception_ptr.h + mdp:/usr/include/c++/15/bits/functexcept.h + mdp:/usr/include/c++/15/bits/functional_hash.h + mdp:/usr/include/c++/15/bits/hash_bytes.h + mdp:/usr/include/c++/15/bits/hashtable.h + mdp:/usr/include/c++/15/bits/hashtable_policy.h + mdp:/usr/include/c++/15/bits/invoke.h + mdp:/usr/include/c++/15/bits/ios_base.h + mdp:/usr/include/c++/15/bits/istream.tcc + mdp:/usr/include/c++/15/bits/iterator_concepts.h + mdp:/usr/include/c++/15/bits/list.tcc + mdp:/usr/include/c++/15/bits/locale_classes.h + mdp:/usr/include/c++/15/bits/locale_classes.tcc + mdp:/usr/include/c++/15/bits/locale_conv.h + mdp:/usr/include/c++/15/bits/locale_facets.h + mdp:/usr/include/c++/15/bits/locale_facets.tcc + mdp:/usr/include/c++/15/bits/locale_facets_nonio.h + mdp:/usr/include/c++/15/bits/locale_facets_nonio.tcc + mdp:/usr/include/c++/15/bits/localefwd.h + mdp:/usr/include/c++/15/bits/max_size_type.h + mdp:/usr/include/c++/15/bits/memory_resource.h + mdp:/usr/include/c++/15/bits/memoryfwd.h + mdp:/usr/include/c++/15/bits/move.h + mdp:/usr/include/c++/15/bits/nested_exception.h + mdp:/usr/include/c++/15/bits/new_allocator.h + mdp:/usr/include/c++/15/bits/node_handle.h + mdp:/usr/include/c++/15/bits/ostream.h + mdp:/usr/include/c++/15/bits/ostream.tcc + mdp:/usr/include/c++/15/bits/ostream_insert.h + mdp:/usr/include/c++/15/bits/parse_numbers.h + mdp:/usr/include/c++/15/bits/postypes.h + mdp:/usr/include/c++/15/bits/predefined_ops.h + mdp:/usr/include/c++/15/bits/ptr_traits.h + mdp:/usr/include/c++/15/bits/quoted_string.h + mdp:/usr/include/c++/15/bits/range_access.h + mdp:/usr/include/c++/15/bits/ranges_algo.h + mdp:/usr/include/c++/15/bits/ranges_algobase.h + mdp:/usr/include/c++/15/bits/ranges_base.h + mdp:/usr/include/c++/15/bits/ranges_cmp.h + mdp:/usr/include/c++/15/bits/ranges_uninitialized.h + mdp:/usr/include/c++/15/bits/ranges_util.h + mdp:/usr/include/c++/15/bits/refwrap.h + mdp:/usr/include/c++/15/bits/requires_hosted.h + mdp:/usr/include/c++/15/bits/shared_ptr.h + mdp:/usr/include/c++/15/bits/shared_ptr_atomic.h + mdp:/usr/include/c++/15/bits/shared_ptr_base.h + mdp:/usr/include/c++/15/bits/specfun.h + mdp:/usr/include/c++/15/bits/sstream.tcc + mdp:/usr/include/c++/15/bits/std_abs.h + mdp:/usr/include/c++/15/bits/std_function.h + mdp:/usr/include/c++/15/bits/std_mutex.h + mdp:/usr/include/c++/15/bits/stl_algo.h + mdp:/usr/include/c++/15/bits/stl_algobase.h + mdp:/usr/include/c++/15/bits/stl_bvector.h + mdp:/usr/include/c++/15/bits/stl_construct.h + mdp:/usr/include/c++/15/bits/stl_function.h + mdp:/usr/include/c++/15/bits/stl_heap.h + mdp:/usr/include/c++/15/bits/stl_iterator.h + mdp:/usr/include/c++/15/bits/stl_iterator_base_funcs.h + mdp:/usr/include/c++/15/bits/stl_iterator_base_types.h + mdp:/usr/include/c++/15/bits/stl_list.h + mdp:/usr/include/c++/15/bits/stl_map.h + mdp:/usr/include/c++/15/bits/stl_multimap.h + mdp:/usr/include/c++/15/bits/stl_multiset.h + mdp:/usr/include/c++/15/bits/stl_numeric.h + mdp:/usr/include/c++/15/bits/stl_pair.h + mdp:/usr/include/c++/15/bits/stl_raw_storage_iter.h + mdp:/usr/include/c++/15/bits/stl_relops.h + mdp:/usr/include/c++/15/bits/stl_set.h + mdp:/usr/include/c++/15/bits/stl_tempbuf.h + mdp:/usr/include/c++/15/bits/stl_tree.h + mdp:/usr/include/c++/15/bits/stl_uninitialized.h + mdp:/usr/include/c++/15/bits/stl_vector.h + mdp:/usr/include/c++/15/bits/stream_iterator.h + mdp:/usr/include/c++/15/bits/streambuf.tcc + mdp:/usr/include/c++/15/bits/streambuf_iterator.h + mdp:/usr/include/c++/15/bits/string_view.tcc + mdp:/usr/include/c++/15/bits/stringfwd.h + mdp:/usr/include/c++/15/bits/uniform_int_dist.h + mdp:/usr/include/c++/15/bits/unique_ptr.h + mdp:/usr/include/c++/15/bits/unordered_map.h + mdp:/usr/include/c++/15/bits/unordered_set.h + mdp:/usr/include/c++/15/bits/uses_allocator.h + mdp:/usr/include/c++/15/bits/uses_allocator_args.h + mdp:/usr/include/c++/15/bits/utility.h + mdp:/usr/include/c++/15/bits/vector.tcc + mdp:/usr/include/c++/15/bits/version.h + mdp:/usr/include/c++/15/cctype + mdp:/usr/include/c++/15/cerrno + mdp:/usr/include/c++/15/charconv + mdp:/usr/include/c++/15/chrono + mdp:/usr/include/c++/15/climits + mdp:/usr/include/c++/15/clocale + mdp:/usr/include/c++/15/cmath + mdp:/usr/include/c++/15/compare + mdp:/usr/include/c++/15/concepts + mdp:/usr/include/c++/15/cstddef + mdp:/usr/include/c++/15/cstdint + mdp:/usr/include/c++/15/cstdio + mdp:/usr/include/c++/15/cstdlib + mdp:/usr/include/c++/15/cstring + mdp:/usr/include/c++/15/ctime + mdp:/usr/include/c++/15/cwchar + mdp:/usr/include/c++/15/cwctype + mdp:/usr/include/c++/15/debug/assertions.h + mdp:/usr/include/c++/15/debug/debug.h + mdp:/usr/include/c++/15/exception + mdp:/usr/include/c++/15/ext/aligned_buffer.h + mdp:/usr/include/c++/15/ext/alloc_traits.h + mdp:/usr/include/c++/15/ext/atomicity.h + mdp:/usr/include/c++/15/ext/concurrence.h + mdp:/usr/include/c++/15/ext/numeric_traits.h + mdp:/usr/include/c++/15/ext/string_conversions.h + mdp:/usr/include/c++/15/ext/type_traits.h + mdp:/usr/include/c++/15/format + mdp:/usr/include/c++/15/functional + mdp:/usr/include/c++/15/initializer_list + mdp:/usr/include/c++/15/iomanip + mdp:/usr/include/c++/15/ios + mdp:/usr/include/c++/15/iosfwd + mdp:/usr/include/c++/15/istream + mdp:/usr/include/c++/15/iterator + mdp:/usr/include/c++/15/limits + mdp:/usr/include/c++/15/list + mdp:/usr/include/c++/15/locale + mdp:/usr/include/c++/15/map + mdp:/usr/include/c++/15/memory + mdp:/usr/include/c++/15/new + mdp:/usr/include/c++/15/numeric + mdp:/usr/include/c++/15/optional + mdp:/usr/include/c++/15/ostream + mdp:/usr/include/c++/15/pstl/execution_defs.h + mdp:/usr/include/c++/15/pstl/glue_numeric_defs.h + mdp:/usr/include/c++/15/pstl/pstl_config.h + mdp:/usr/include/c++/15/ratio + mdp:/usr/include/c++/15/set + mdp:/usr/include/c++/15/sstream + mdp:/usr/include/c++/15/stdexcept + mdp:/usr/include/c++/15/streambuf + mdp:/usr/include/c++/15/string + mdp:/usr/include/c++/15/string_view + mdp:/usr/include/c++/15/system_error + mdp:/usr/include/c++/15/tr1/bessel_function.tcc + mdp:/usr/include/c++/15/tr1/beta_function.tcc + mdp:/usr/include/c++/15/tr1/ell_integral.tcc + mdp:/usr/include/c++/15/tr1/exp_integral.tcc + mdp:/usr/include/c++/15/tr1/gamma.tcc + mdp:/usr/include/c++/15/tr1/hypergeometric.tcc + mdp:/usr/include/c++/15/tr1/legendre_function.tcc + mdp:/usr/include/c++/15/tr1/modified_bessel_func.tcc + mdp:/usr/include/c++/15/tr1/poly_hermite.tcc + mdp:/usr/include/c++/15/tr1/poly_laguerre.tcc + mdp:/usr/include/c++/15/tr1/riemann_zeta.tcc + mdp:/usr/include/c++/15/tr1/special_function_util.h + mdp:/usr/include/c++/15/tuple + mdp:/usr/include/c++/15/type_traits + mdp:/usr/include/c++/15/typeinfo + mdp:/usr/include/c++/15/unordered_map + mdp:/usr/include/c++/15/unordered_set + mdp:/usr/include/c++/15/utility + mdp:/usr/include/c++/15/variant + mdp:/usr/include/c++/15/vector + mdp:/usr/include/c++/15/version + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/atomic_word.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++allocator.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++config.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++locale.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/cpu_defines.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/ctype_base.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/ctype_inline.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/error_constants.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/gthr-default.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/gthr.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/messages_members.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/os_defines.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/time_members.h + mdp:/usr/include/ctype.h + mdp:/usr/include/endian.h + mdp:/usr/include/errno.h + mdp:/usr/include/features-time64.h + mdp:/usr/include/features.h + mdp:/usr/include/gnu/stubs-64.h + mdp:/usr/include/gnu/stubs.h + mdp:/usr/include/libintl.h + mdp:/usr/include/limits.h + mdp:/usr/include/linux/close_range.h + mdp:/usr/include/linux/errno.h + mdp:/usr/include/linux/limits.h + mdp:/usr/include/linux/posix_types.h + mdp:/usr/include/linux/sched/types.h + mdp:/usr/include/linux/stddef.h + mdp:/usr/include/linux/types.h + mdp:/usr/include/locale.h + mdp:/usr/include/pthread.h + mdp:/usr/include/qt6/QtCore/QAbstractProxyModel + mdp:/usr/include/qt6/QtCore/QString + mdp:/usr/include/qt6/QtCore/QVector + mdp:/usr/include/qt6/QtCore/q17memory.h + mdp:/usr/include/qt6/QtCore/q20functional.h + mdp:/usr/include/qt6/QtCore/q20memory.h + mdp:/usr/include/qt6/QtCore/q20type_traits.h + mdp:/usr/include/qt6/QtCore/q20utility.h + mdp:/usr/include/qt6/QtCore/q23type_traits.h + mdp:/usr/include/qt6/QtCore/q23utility.h + mdp:/usr/include/qt6/QtCore/qabstractitemmodel.h + mdp:/usr/include/qt6/QtCore/qabstractproxymodel.h + mdp:/usr/include/qt6/QtCore/qalgorithms.h + mdp:/usr/include/qt6/QtCore/qalloc.h + mdp:/usr/include/qt6/QtCore/qanystringview.h + mdp:/usr/include/qt6/QtCore/qarraydata.h + mdp:/usr/include/qt6/QtCore/qarraydataops.h + mdp:/usr/include/qt6/QtCore/qarraydatapointer.h + mdp:/usr/include/qt6/QtCore/qassert.h + mdp:/usr/include/qt6/QtCore/qatomic.h + mdp:/usr/include/qt6/QtCore/qatomic_cxx11.h + mdp:/usr/include/qt6/QtCore/qbasicatomic.h + mdp:/usr/include/qt6/QtCore/qbindingstorage.h + mdp:/usr/include/qt6/QtCore/qbytearray.h + mdp:/usr/include/qt6/QtCore/qbytearrayalgorithms.h + mdp:/usr/include/qt6/QtCore/qbytearraylist.h + mdp:/usr/include/qt6/QtCore/qbytearrayview.h + mdp:/usr/include/qt6/QtCore/qchar.h + mdp:/usr/include/qt6/QtCore/qcompare.h + mdp:/usr/include/qt6/QtCore/qcompare_impl.h + mdp:/usr/include/qt6/QtCore/qcomparehelpers.h + mdp:/usr/include/qt6/QtCore/qcompilerdetection.h + mdp:/usr/include/qt6/QtCore/qconfig-64.h + mdp:/usr/include/qt6/QtCore/qconfig.h + mdp:/usr/include/qt6/QtCore/qconstructormacros.h + mdp:/usr/include/qt6/QtCore/qcontainerfwd.h + mdp:/usr/include/qt6/QtCore/qcontainerinfo.h + mdp:/usr/include/qt6/QtCore/qcontainertools_impl.h + mdp:/usr/include/qt6/QtCore/qcontiguouscache.h + mdp:/usr/include/qt6/QtCore/qdarwinhelpers.h + mdp:/usr/include/qt6/QtCore/qdatastream.h + mdp:/usr/include/qt6/QtCore/qdebug.h + mdp:/usr/include/qt6/QtCore/qexceptionhandling.h + mdp:/usr/include/qt6/QtCore/qflags.h + mdp:/usr/include/qt6/QtCore/qfloat16.h + mdp:/usr/include/qt6/QtCore/qforeach.h + mdp:/usr/include/qt6/QtCore/qfunctionaltools_impl.h + mdp:/usr/include/qt6/QtCore/qfunctionpointer.h + mdp:/usr/include/qt6/QtCore/qgenericatomic.h + mdp:/usr/include/qt6/QtCore/qglobal.h + mdp:/usr/include/qt6/QtCore/qglobalstatic.h + mdp:/usr/include/qt6/QtCore/qhash.h + mdp:/usr/include/qt6/QtCore/qhashfunctions.h + mdp:/usr/include/qt6/QtCore/qiodevicebase.h + mdp:/usr/include/qt6/QtCore/qiterable.h + mdp:/usr/include/qt6/QtCore/qiterator.h + mdp:/usr/include/qt6/QtCore/qlatin1stringview.h + mdp:/usr/include/qt6/QtCore/qlist.h + mdp:/usr/include/qt6/QtCore/qlogging.h + mdp:/usr/include/qt6/QtCore/qmalloc.h + mdp:/usr/include/qt6/QtCore/qmap.h + mdp:/usr/include/qt6/QtCore/qmath.h + mdp:/usr/include/qt6/QtCore/qmetacontainer.h + mdp:/usr/include/qt6/QtCore/qmetatype.h + mdp:/usr/include/qt6/QtCore/qminmax.h + mdp:/usr/include/qt6/QtCore/qnamespace.h + mdp:/usr/include/qt6/QtCore/qnumeric.h + mdp:/usr/include/qt6/QtCore/qobject.h + mdp:/usr/include/qt6/QtCore/qobject_impl.h + mdp:/usr/include/qt6/QtCore/qobjectdefs.h + mdp:/usr/include/qt6/QtCore/qobjectdefs_impl.h + mdp:/usr/include/qt6/QtCore/qoverload.h + mdp:/usr/include/qt6/QtCore/qpair.h + mdp:/usr/include/qt6/QtCore/qprocessordetection.h + mdp:/usr/include/qt6/QtCore/qrefcount.h + mdp:/usr/include/qt6/QtCore/qscopedpointer.h + mdp:/usr/include/qt6/QtCore/qscopeguard.h + mdp:/usr/include/qt6/QtCore/qset.h + mdp:/usr/include/qt6/QtCore/qshareddata.h + mdp:/usr/include/qt6/QtCore/qshareddata_impl.h + mdp:/usr/include/qt6/QtCore/qsharedpointer.h + mdp:/usr/include/qt6/QtCore/qsharedpointer_impl.h + mdp:/usr/include/qt6/QtCore/qstdlibdetection.h + mdp:/usr/include/qt6/QtCore/qstring.h + mdp:/usr/include/qt6/QtCore/qstringalgorithms.h + mdp:/usr/include/qt6/QtCore/qstringbuilder.h + mdp:/usr/include/qt6/QtCore/qstringconverter.h + mdp:/usr/include/qt6/QtCore/qstringconverter_base.h + mdp:/usr/include/qt6/QtCore/qstringfwd.h + mdp:/usr/include/qt6/QtCore/qstringlist.h + mdp:/usr/include/qt6/QtCore/qstringmatcher.h + mdp:/usr/include/qt6/QtCore/qstringtokenizer.h + mdp:/usr/include/qt6/QtCore/qstringview.h + mdp:/usr/include/qt6/QtCore/qswap.h + mdp:/usr/include/qt6/QtCore/qsysinfo.h + mdp:/usr/include/qt6/QtCore/qsystemdetection.h + mdp:/usr/include/qt6/QtCore/qtaggedpointer.h + mdp:/usr/include/qt6/QtCore/qtclasshelpermacros.h + mdp:/usr/include/qt6/QtCore/qtconfiginclude.h + mdp:/usr/include/qt6/QtCore/qtconfigmacros.h + mdp:/usr/include/qt6/QtCore/qtcore-config.h + mdp:/usr/include/qt6/QtCore/qtcoreexports.h + mdp:/usr/include/qt6/QtCore/qtcoreglobal.h + mdp:/usr/include/qt6/QtCore/qtdeprecationdefinitions.h + mdp:/usr/include/qt6/QtCore/qtdeprecationmarkers.h + mdp:/usr/include/qt6/QtCore/qtenvironmentvariables.h + mdp:/usr/include/qt6/QtCore/qtextstream.h + mdp:/usr/include/qt6/QtCore/qtformat_impl.h + mdp:/usr/include/qt6/QtCore/qtmetamacros.h + mdp:/usr/include/qt6/QtCore/qtnoop.h + mdp:/usr/include/qt6/QtCore/qtpreprocessorsupport.h + mdp:/usr/include/qt6/QtCore/qtresource.h + mdp:/usr/include/qt6/QtCore/qttranslation.h + mdp:/usr/include/qt6/QtCore/qttypetraits.h + mdp:/usr/include/qt6/QtCore/qtversion.h + mdp:/usr/include/qt6/QtCore/qtversionchecks.h + mdp:/usr/include/qt6/QtCore/qtypeinfo.h + mdp:/usr/include/qt6/QtCore/qtypes.h + mdp:/usr/include/qt6/QtCore/qutf8stringview.h + mdp:/usr/include/qt6/QtCore/qvariant.h + mdp:/usr/include/qt6/QtCore/qvarlengtharray.h + mdp:/usr/include/qt6/QtCore/qvector.h + mdp:/usr/include/qt6/QtCore/qversiontagging.h + mdp:/usr/include/qt6/QtCore/qxptype_traits.h + mdp:/usr/include/qt6/QtCore/qyieldcpu.h + mdp:/usr/include/sched.h + mdp:/usr/include/stdc-predef.h + mdp:/usr/include/stdint.h + mdp:/usr/include/stdio.h + mdp:/usr/include/stdlib.h + mdp:/usr/include/string.h + mdp:/usr/include/strings.h + mdp:/usr/include/sys/cdefs.h + mdp:/usr/include/sys/select.h + mdp:/usr/include/sys/single_threaded.h + mdp:/usr/include/sys/syscall.h + mdp:/usr/include/sys/types.h + mdp:/usr/include/syscall.h + mdp:/usr/include/time.h + mdp:/usr/include/unistd.h + mdp:/usr/include/wchar.h + mdp:/usr/include/wctype.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stdarg.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stdbool.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stddef.h +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/project_folders_model.cpp +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/db.cpp +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/media/tlrender_widget.cpp +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/project_version_detector.cpp +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/thumbnail_cache_manager.h + mmc:Q_OBJECT + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/kassetmanagerqt_autogen/moc_predefs.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/thumbnail_cache_manager.h + mdp:/usr/include/alloca.h + mdp:/usr/include/asm-generic/bitsperlong.h + mdp:/usr/include/asm-generic/errno-base.h + mdp:/usr/include/asm-generic/errno.h + mdp:/usr/include/asm-generic/int-ll64.h + mdp:/usr/include/asm-generic/posix_types.h + mdp:/usr/include/asm-generic/types.h + mdp:/usr/include/asm/bitsperlong.h + mdp:/usr/include/asm/errno.h + mdp:/usr/include/asm/posix_types.h + mdp:/usr/include/asm/posix_types_64.h + mdp:/usr/include/asm/types.h + mdp:/usr/include/asm/unistd.h + mdp:/usr/include/asm/unistd_64.h + mdp:/usr/include/assert.h + mdp:/usr/include/bits/atomic_wide_counter.h + mdp:/usr/include/bits/byteswap.h + mdp:/usr/include/bits/confname.h + mdp:/usr/include/bits/cpu-set.h + mdp:/usr/include/bits/endian.h + mdp:/usr/include/bits/endianness.h + mdp:/usr/include/bits/environments.h + mdp:/usr/include/bits/errno.h + mdp:/usr/include/bits/floatn-common.h + mdp:/usr/include/bits/floatn.h + mdp:/usr/include/bits/getopt_core.h + mdp:/usr/include/bits/getopt_posix.h + mdp:/usr/include/bits/libc-header-start.h + mdp:/usr/include/bits/local_lim.h + mdp:/usr/include/bits/locale.h + mdp:/usr/include/bits/long-double.h + mdp:/usr/include/bits/posix1_lim.h + mdp:/usr/include/bits/posix2_lim.h + mdp:/usr/include/bits/posix_opt.h + mdp:/usr/include/bits/pthread_stack_min-dynamic.h + mdp:/usr/include/bits/pthreadtypes-arch.h + mdp:/usr/include/bits/pthreadtypes.h + mdp:/usr/include/bits/sched.h + mdp:/usr/include/bits/select.h + mdp:/usr/include/bits/setjmp.h + mdp:/usr/include/bits/stdint-intn.h + mdp:/usr/include/bits/stdint-least.h + mdp:/usr/include/bits/stdint-uintn.h + mdp:/usr/include/bits/stdio_lim.h + mdp:/usr/include/bits/stdlib-float.h + mdp:/usr/include/bits/struct_mutex.h + mdp:/usr/include/bits/struct_rwlock.h + mdp:/usr/include/bits/syscall.h + mdp:/usr/include/bits/thread-shared-types.h + mdp:/usr/include/bits/time.h + mdp:/usr/include/bits/time64.h + mdp:/usr/include/bits/timesize.h + mdp:/usr/include/bits/timex.h + mdp:/usr/include/bits/types.h + mdp:/usr/include/bits/types/FILE.h + mdp:/usr/include/bits/types/__FILE.h + mdp:/usr/include/bits/types/__fpos64_t.h + mdp:/usr/include/bits/types/__fpos_t.h + mdp:/usr/include/bits/types/__locale_t.h + mdp:/usr/include/bits/types/__mbstate_t.h + mdp:/usr/include/bits/types/__sigset_t.h + mdp:/usr/include/bits/types/clock_t.h + mdp:/usr/include/bits/types/clockid_t.h + mdp:/usr/include/bits/types/cookie_io_functions_t.h + mdp:/usr/include/bits/types/error_t.h + mdp:/usr/include/bits/types/locale_t.h + mdp:/usr/include/bits/types/mbstate_t.h + mdp:/usr/include/bits/types/sigset_t.h + mdp:/usr/include/bits/types/struct_FILE.h + mdp:/usr/include/bits/types/struct___jmp_buf_tag.h + mdp:/usr/include/bits/types/struct_itimerspec.h + mdp:/usr/include/bits/types/struct_sched_param.h + mdp:/usr/include/bits/types/struct_timespec.h + mdp:/usr/include/bits/types/struct_timeval.h + mdp:/usr/include/bits/types/struct_tm.h + mdp:/usr/include/bits/types/time_t.h + mdp:/usr/include/bits/types/timer_t.h + mdp:/usr/include/bits/types/wint_t.h + mdp:/usr/include/bits/typesizes.h + mdp:/usr/include/bits/uintn-identity.h + mdp:/usr/include/bits/uio_lim.h + mdp:/usr/include/bits/unistd_ext.h + mdp:/usr/include/bits/waitflags.h + mdp:/usr/include/bits/waitstatus.h + mdp:/usr/include/bits/wchar.h + mdp:/usr/include/bits/wctype-wchar.h + mdp:/usr/include/bits/wordsize.h + mdp:/usr/include/bits/xopen_lim.h + mdp:/usr/include/c++/15/algorithm + mdp:/usr/include/c++/15/array + mdp:/usr/include/c++/15/atomic + mdp:/usr/include/c++/15/backward/auto_ptr.h + mdp:/usr/include/c++/15/backward/binders.h + mdp:/usr/include/c++/15/bit + mdp:/usr/include/c++/15/bits/algorithmfwd.h + mdp:/usr/include/c++/15/bits/align.h + mdp:/usr/include/c++/15/bits/alloc_traits.h + mdp:/usr/include/c++/15/bits/allocated_ptr.h + mdp:/usr/include/c++/15/bits/allocator.h + mdp:/usr/include/c++/15/bits/atomic_base.h + mdp:/usr/include/c++/15/bits/atomic_lockfree_defines.h + mdp:/usr/include/c++/15/bits/atomic_wait.h + mdp:/usr/include/c++/15/bits/basic_ios.h + mdp:/usr/include/c++/15/bits/basic_ios.tcc + mdp:/usr/include/c++/15/bits/basic_string.h + mdp:/usr/include/c++/15/bits/basic_string.tcc + mdp:/usr/include/c++/15/bits/char_traits.h + mdp:/usr/include/c++/15/bits/charconv.h + mdp:/usr/include/c++/15/bits/chrono.h + mdp:/usr/include/c++/15/bits/chrono_io.h + mdp:/usr/include/c++/15/bits/codecvt.h + mdp:/usr/include/c++/15/bits/concept_check.h + mdp:/usr/include/c++/15/bits/cpp_type_traits.h + mdp:/usr/include/c++/15/bits/cxxabi_forced.h + mdp:/usr/include/c++/15/bits/cxxabi_init_exception.h + mdp:/usr/include/c++/15/bits/enable_special_members.h + mdp:/usr/include/c++/15/bits/erase_if.h + mdp:/usr/include/c++/15/bits/exception.h + mdp:/usr/include/c++/15/bits/exception_defines.h + mdp:/usr/include/c++/15/bits/exception_ptr.h + mdp:/usr/include/c++/15/bits/functexcept.h + mdp:/usr/include/c++/15/bits/functional_hash.h + mdp:/usr/include/c++/15/bits/hash_bytes.h + mdp:/usr/include/c++/15/bits/hashtable.h + mdp:/usr/include/c++/15/bits/hashtable_policy.h + mdp:/usr/include/c++/15/bits/invoke.h + mdp:/usr/include/c++/15/bits/ios_base.h + mdp:/usr/include/c++/15/bits/istream.tcc + mdp:/usr/include/c++/15/bits/iterator_concepts.h + mdp:/usr/include/c++/15/bits/list.tcc + mdp:/usr/include/c++/15/bits/locale_classes.h + mdp:/usr/include/c++/15/bits/locale_classes.tcc + mdp:/usr/include/c++/15/bits/locale_conv.h + mdp:/usr/include/c++/15/bits/locale_facets.h + mdp:/usr/include/c++/15/bits/locale_facets.tcc + mdp:/usr/include/c++/15/bits/locale_facets_nonio.h + mdp:/usr/include/c++/15/bits/locale_facets_nonio.tcc + mdp:/usr/include/c++/15/bits/localefwd.h + mdp:/usr/include/c++/15/bits/max_size_type.h + mdp:/usr/include/c++/15/bits/memory_resource.h + mdp:/usr/include/c++/15/bits/memoryfwd.h + mdp:/usr/include/c++/15/bits/move.h + mdp:/usr/include/c++/15/bits/nested_exception.h + mdp:/usr/include/c++/15/bits/new_allocator.h + mdp:/usr/include/c++/15/bits/node_handle.h + mdp:/usr/include/c++/15/bits/ostream.h + mdp:/usr/include/c++/15/bits/ostream.tcc + mdp:/usr/include/c++/15/bits/ostream_insert.h + mdp:/usr/include/c++/15/bits/parse_numbers.h + mdp:/usr/include/c++/15/bits/postypes.h + mdp:/usr/include/c++/15/bits/predefined_ops.h + mdp:/usr/include/c++/15/bits/ptr_traits.h + mdp:/usr/include/c++/15/bits/quoted_string.h + mdp:/usr/include/c++/15/bits/range_access.h + mdp:/usr/include/c++/15/bits/ranges_algo.h + mdp:/usr/include/c++/15/bits/ranges_algobase.h + mdp:/usr/include/c++/15/bits/ranges_base.h + mdp:/usr/include/c++/15/bits/ranges_cmp.h + mdp:/usr/include/c++/15/bits/ranges_uninitialized.h + mdp:/usr/include/c++/15/bits/ranges_util.h + mdp:/usr/include/c++/15/bits/refwrap.h + mdp:/usr/include/c++/15/bits/requires_hosted.h + mdp:/usr/include/c++/15/bits/shared_ptr.h + mdp:/usr/include/c++/15/bits/shared_ptr_atomic.h + mdp:/usr/include/c++/15/bits/shared_ptr_base.h + mdp:/usr/include/c++/15/bits/specfun.h + mdp:/usr/include/c++/15/bits/sstream.tcc + mdp:/usr/include/c++/15/bits/std_abs.h + mdp:/usr/include/c++/15/bits/std_function.h + mdp:/usr/include/c++/15/bits/std_mutex.h + mdp:/usr/include/c++/15/bits/stl_algo.h + mdp:/usr/include/c++/15/bits/stl_algobase.h + mdp:/usr/include/c++/15/bits/stl_bvector.h + mdp:/usr/include/c++/15/bits/stl_construct.h + mdp:/usr/include/c++/15/bits/stl_function.h + mdp:/usr/include/c++/15/bits/stl_heap.h + mdp:/usr/include/c++/15/bits/stl_iterator.h + mdp:/usr/include/c++/15/bits/stl_iterator_base_funcs.h + mdp:/usr/include/c++/15/bits/stl_iterator_base_types.h + mdp:/usr/include/c++/15/bits/stl_list.h + mdp:/usr/include/c++/15/bits/stl_map.h + mdp:/usr/include/c++/15/bits/stl_multimap.h + mdp:/usr/include/c++/15/bits/stl_multiset.h + mdp:/usr/include/c++/15/bits/stl_numeric.h + mdp:/usr/include/c++/15/bits/stl_pair.h + mdp:/usr/include/c++/15/bits/stl_raw_storage_iter.h + mdp:/usr/include/c++/15/bits/stl_relops.h + mdp:/usr/include/c++/15/bits/stl_set.h + mdp:/usr/include/c++/15/bits/stl_tempbuf.h + mdp:/usr/include/c++/15/bits/stl_tree.h + mdp:/usr/include/c++/15/bits/stl_uninitialized.h + mdp:/usr/include/c++/15/bits/stl_vector.h + mdp:/usr/include/c++/15/bits/stream_iterator.h + mdp:/usr/include/c++/15/bits/streambuf.tcc + mdp:/usr/include/c++/15/bits/streambuf_iterator.h + mdp:/usr/include/c++/15/bits/string_view.tcc + mdp:/usr/include/c++/15/bits/stringfwd.h + mdp:/usr/include/c++/15/bits/uniform_int_dist.h + mdp:/usr/include/c++/15/bits/unique_ptr.h + mdp:/usr/include/c++/15/bits/unordered_map.h + mdp:/usr/include/c++/15/bits/unordered_set.h + mdp:/usr/include/c++/15/bits/uses_allocator.h + mdp:/usr/include/c++/15/bits/uses_allocator_args.h + mdp:/usr/include/c++/15/bits/utility.h + mdp:/usr/include/c++/15/bits/vector.tcc + mdp:/usr/include/c++/15/bits/version.h + mdp:/usr/include/c++/15/cassert + mdp:/usr/include/c++/15/cctype + mdp:/usr/include/c++/15/cerrno + mdp:/usr/include/c++/15/charconv + mdp:/usr/include/c++/15/chrono + mdp:/usr/include/c++/15/climits + mdp:/usr/include/c++/15/clocale + mdp:/usr/include/c++/15/cmath + mdp:/usr/include/c++/15/compare + mdp:/usr/include/c++/15/concepts + mdp:/usr/include/c++/15/cstddef + mdp:/usr/include/c++/15/cstdint + mdp:/usr/include/c++/15/cstdio + mdp:/usr/include/c++/15/cstdlib + mdp:/usr/include/c++/15/cstring + mdp:/usr/include/c++/15/ctime + mdp:/usr/include/c++/15/cwchar + mdp:/usr/include/c++/15/cwctype + mdp:/usr/include/c++/15/debug/assertions.h + mdp:/usr/include/c++/15/debug/debug.h + mdp:/usr/include/c++/15/exception + mdp:/usr/include/c++/15/ext/aligned_buffer.h + mdp:/usr/include/c++/15/ext/alloc_traits.h + mdp:/usr/include/c++/15/ext/atomicity.h + mdp:/usr/include/c++/15/ext/concurrence.h + mdp:/usr/include/c++/15/ext/numeric_traits.h + mdp:/usr/include/c++/15/ext/string_conversions.h + mdp:/usr/include/c++/15/ext/type_traits.h + mdp:/usr/include/c++/15/format + mdp:/usr/include/c++/15/functional + mdp:/usr/include/c++/15/initializer_list + mdp:/usr/include/c++/15/iomanip + mdp:/usr/include/c++/15/ios + mdp:/usr/include/c++/15/iosfwd + mdp:/usr/include/c++/15/istream + mdp:/usr/include/c++/15/iterator + mdp:/usr/include/c++/15/limits + mdp:/usr/include/c++/15/list + mdp:/usr/include/c++/15/locale + mdp:/usr/include/c++/15/map + mdp:/usr/include/c++/15/memory + mdp:/usr/include/c++/15/new + mdp:/usr/include/c++/15/numeric + mdp:/usr/include/c++/15/optional + mdp:/usr/include/c++/15/ostream + mdp:/usr/include/c++/15/pstl/execution_defs.h + mdp:/usr/include/c++/15/pstl/glue_numeric_defs.h + mdp:/usr/include/c++/15/pstl/pstl_config.h + mdp:/usr/include/c++/15/ratio + mdp:/usr/include/c++/15/set + mdp:/usr/include/c++/15/sstream + mdp:/usr/include/c++/15/stdexcept + mdp:/usr/include/c++/15/streambuf + mdp:/usr/include/c++/15/string + mdp:/usr/include/c++/15/string_view + mdp:/usr/include/c++/15/system_error + mdp:/usr/include/c++/15/tr1/bessel_function.tcc + mdp:/usr/include/c++/15/tr1/beta_function.tcc + mdp:/usr/include/c++/15/tr1/ell_integral.tcc + mdp:/usr/include/c++/15/tr1/exp_integral.tcc + mdp:/usr/include/c++/15/tr1/gamma.tcc + mdp:/usr/include/c++/15/tr1/hypergeometric.tcc + mdp:/usr/include/c++/15/tr1/legendre_function.tcc + mdp:/usr/include/c++/15/tr1/modified_bessel_func.tcc + mdp:/usr/include/c++/15/tr1/poly_hermite.tcc + mdp:/usr/include/c++/15/tr1/poly_laguerre.tcc + mdp:/usr/include/c++/15/tr1/riemann_zeta.tcc + mdp:/usr/include/c++/15/tr1/special_function_util.h + mdp:/usr/include/c++/15/tuple + mdp:/usr/include/c++/15/type_traits + mdp:/usr/include/c++/15/typeinfo + mdp:/usr/include/c++/15/unordered_map + mdp:/usr/include/c++/15/unordered_set + mdp:/usr/include/c++/15/utility + mdp:/usr/include/c++/15/variant + mdp:/usr/include/c++/15/vector + mdp:/usr/include/c++/15/version + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/atomic_word.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++allocator.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++config.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++locale.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/cpu_defines.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/ctype_base.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/ctype_inline.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/error_constants.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/gthr-default.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/gthr.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/messages_members.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/os_defines.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/time_members.h + mdp:/usr/include/ctype.h + mdp:/usr/include/endian.h + mdp:/usr/include/errno.h + mdp:/usr/include/features-time64.h + mdp:/usr/include/features.h + mdp:/usr/include/gnu/stubs-64.h + mdp:/usr/include/gnu/stubs.h + mdp:/usr/include/libintl.h + mdp:/usr/include/limits.h + mdp:/usr/include/linux/close_range.h + mdp:/usr/include/linux/errno.h + mdp:/usr/include/linux/limits.h + mdp:/usr/include/linux/posix_types.h + mdp:/usr/include/linux/sched/types.h + mdp:/usr/include/linux/stddef.h + mdp:/usr/include/linux/types.h + mdp:/usr/include/locale.h + mdp:/usr/include/pthread.h + mdp:/usr/include/qt6/QtCore/QDateTime + mdp:/usr/include/qt6/QtCore/QHash + mdp:/usr/include/qt6/QtCore/QMutex + mdp:/usr/include/qt6/QtCore/QObject + mdp:/usr/include/qt6/QtCore/QSize + mdp:/usr/include/qt6/QtCore/QString + mdp:/usr/include/qt6/QtCore/q17memory.h + mdp:/usr/include/qt6/QtCore/q20functional.h + mdp:/usr/include/qt6/QtCore/q20iterator.h + mdp:/usr/include/qt6/QtCore/q20memory.h + mdp:/usr/include/qt6/QtCore/q20type_traits.h + mdp:/usr/include/qt6/QtCore/q20utility.h + mdp:/usr/include/qt6/QtCore/q23type_traits.h + mdp:/usr/include/qt6/QtCore/q23utility.h + mdp:/usr/include/qt6/QtCore/qalgorithms.h + mdp:/usr/include/qt6/QtCore/qalloc.h + mdp:/usr/include/qt6/QtCore/qanystringview.h + mdp:/usr/include/qt6/QtCore/qarraydata.h + mdp:/usr/include/qt6/QtCore/qarraydataops.h + mdp:/usr/include/qt6/QtCore/qarraydatapointer.h + mdp:/usr/include/qt6/QtCore/qassert.h + mdp:/usr/include/qt6/QtCore/qatomic.h + mdp:/usr/include/qt6/QtCore/qatomic_cxx11.h + mdp:/usr/include/qt6/QtCore/qbasicatomic.h + mdp:/usr/include/qt6/QtCore/qbindingstorage.h + mdp:/usr/include/qt6/QtCore/qbytearray.h + mdp:/usr/include/qt6/QtCore/qbytearrayalgorithms.h + mdp:/usr/include/qt6/QtCore/qbytearraylist.h + mdp:/usr/include/qt6/QtCore/qbytearrayview.h + mdp:/usr/include/qt6/QtCore/qcalendar.h + mdp:/usr/include/qt6/QtCore/qchar.h + mdp:/usr/include/qt6/QtCore/qcheckedint_impl.h + mdp:/usr/include/qt6/QtCore/qcompare.h + mdp:/usr/include/qt6/QtCore/qcompare_impl.h + mdp:/usr/include/qt6/QtCore/qcomparehelpers.h + mdp:/usr/include/qt6/QtCore/qcompilerdetection.h + mdp:/usr/include/qt6/QtCore/qconfig-64.h + mdp:/usr/include/qt6/QtCore/qconfig.h + mdp:/usr/include/qt6/QtCore/qconstructormacros.h + mdp:/usr/include/qt6/QtCore/qcontainerfwd.h + mdp:/usr/include/qt6/QtCore/qcontainerinfo.h + mdp:/usr/include/qt6/QtCore/qcontainertools_impl.h + mdp:/usr/include/qt6/QtCore/qcontiguouscache.h + mdp:/usr/include/qt6/QtCore/qdarwinhelpers.h + mdp:/usr/include/qt6/QtCore/qdatastream.h + mdp:/usr/include/qt6/QtCore/qdatetime.h + mdp:/usr/include/qt6/QtCore/qdeadlinetimer.h + mdp:/usr/include/qt6/QtCore/qdebug.h + mdp:/usr/include/qt6/QtCore/qexceptionhandling.h + mdp:/usr/include/qt6/QtCore/qflags.h + mdp:/usr/include/qt6/QtCore/qfloat16.h + mdp:/usr/include/qt6/QtCore/qforeach.h + mdp:/usr/include/qt6/QtCore/qfunctionaltools_impl.h + mdp:/usr/include/qt6/QtCore/qfunctionpointer.h + mdp:/usr/include/qt6/QtCore/qgenericatomic.h + mdp:/usr/include/qt6/QtCore/qglobal.h + mdp:/usr/include/qt6/QtCore/qglobalstatic.h + mdp:/usr/include/qt6/QtCore/qhash.h + mdp:/usr/include/qt6/QtCore/qhashfunctions.h + mdp:/usr/include/qt6/QtCore/qiodevicebase.h + mdp:/usr/include/qt6/QtCore/qiterable.h + mdp:/usr/include/qt6/QtCore/qiterator.h + mdp:/usr/include/qt6/QtCore/qlatin1stringview.h + mdp:/usr/include/qt6/QtCore/qline.h + mdp:/usr/include/qt6/QtCore/qlist.h + mdp:/usr/include/qt6/QtCore/qlocale.h + mdp:/usr/include/qt6/QtCore/qlogging.h + mdp:/usr/include/qt6/QtCore/qmalloc.h + mdp:/usr/include/qt6/QtCore/qmap.h + mdp:/usr/include/qt6/QtCore/qmargins.h + mdp:/usr/include/qt6/QtCore/qmath.h + mdp:/usr/include/qt6/QtCore/qmetacontainer.h + mdp:/usr/include/qt6/QtCore/qmetatype.h + mdp:/usr/include/qt6/QtCore/qminmax.h + mdp:/usr/include/qt6/QtCore/qmutex.h + mdp:/usr/include/qt6/QtCore/qnamespace.h + mdp:/usr/include/qt6/QtCore/qnumeric.h + mdp:/usr/include/qt6/QtCore/qobject.h + mdp:/usr/include/qt6/QtCore/qobject_impl.h + mdp:/usr/include/qt6/QtCore/qobjectdefs.h + mdp:/usr/include/qt6/QtCore/qobjectdefs_impl.h + mdp:/usr/include/qt6/QtCore/qoverload.h + mdp:/usr/include/qt6/QtCore/qpair.h + mdp:/usr/include/qt6/QtCore/qpoint.h + mdp:/usr/include/qt6/QtCore/qprocessordetection.h + mdp:/usr/include/qt6/QtCore/qrect.h + mdp:/usr/include/qt6/QtCore/qrefcount.h + mdp:/usr/include/qt6/QtCore/qscopedpointer.h + mdp:/usr/include/qt6/QtCore/qscopeguard.h + mdp:/usr/include/qt6/QtCore/qset.h + mdp:/usr/include/qt6/QtCore/qshareddata.h + mdp:/usr/include/qt6/QtCore/qshareddata_impl.h + mdp:/usr/include/qt6/QtCore/qsharedpointer.h + mdp:/usr/include/qt6/QtCore/qsharedpointer_impl.h + mdp:/usr/include/qt6/QtCore/qsize.h + mdp:/usr/include/qt6/QtCore/qspan.h + mdp:/usr/include/qt6/QtCore/qstdlibdetection.h + mdp:/usr/include/qt6/QtCore/qstring.h + mdp:/usr/include/qt6/QtCore/qstringalgorithms.h + mdp:/usr/include/qt6/QtCore/qstringbuilder.h + mdp:/usr/include/qt6/QtCore/qstringconverter.h + mdp:/usr/include/qt6/QtCore/qstringconverter_base.h + mdp:/usr/include/qt6/QtCore/qstringfwd.h + mdp:/usr/include/qt6/QtCore/qstringlist.h + mdp:/usr/include/qt6/QtCore/qstringmatcher.h + mdp:/usr/include/qt6/QtCore/qstringtokenizer.h + mdp:/usr/include/qt6/QtCore/qstringview.h + mdp:/usr/include/qt6/QtCore/qswap.h + mdp:/usr/include/qt6/QtCore/qsysinfo.h + mdp:/usr/include/qt6/QtCore/qsystemdetection.h + mdp:/usr/include/qt6/QtCore/qtaggedpointer.h + mdp:/usr/include/qt6/QtCore/qtclasshelpermacros.h + mdp:/usr/include/qt6/QtCore/qtconfiginclude.h + mdp:/usr/include/qt6/QtCore/qtconfigmacros.h + mdp:/usr/include/qt6/QtCore/qtcore-config.h + mdp:/usr/include/qt6/QtCore/qtcoreexports.h + mdp:/usr/include/qt6/QtCore/qtcoreglobal.h + mdp:/usr/include/qt6/QtCore/qtdeprecationdefinitions.h + mdp:/usr/include/qt6/QtCore/qtdeprecationmarkers.h + mdp:/usr/include/qt6/QtCore/qtenvironmentvariables.h + mdp:/usr/include/qt6/QtCore/qtextstream.h + mdp:/usr/include/qt6/QtCore/qtformat_impl.h + mdp:/usr/include/qt6/QtCore/qtmetamacros.h + mdp:/usr/include/qt6/QtCore/qtnoop.h + mdp:/usr/include/qt6/QtCore/qtpreprocessorsupport.h + mdp:/usr/include/qt6/QtCore/qtresource.h + mdp:/usr/include/qt6/QtCore/qtsan_impl.h + mdp:/usr/include/qt6/QtCore/qttranslation.h + mdp:/usr/include/qt6/QtCore/qttypetraits.h + mdp:/usr/include/qt6/QtCore/qtversion.h + mdp:/usr/include/qt6/QtCore/qtversionchecks.h + mdp:/usr/include/qt6/QtCore/qtypeinfo.h + mdp:/usr/include/qt6/QtCore/qtypes.h + mdp:/usr/include/qt6/QtCore/qutf8stringview.h + mdp:/usr/include/qt6/QtCore/qvariant.h + mdp:/usr/include/qt6/QtCore/qvarlengtharray.h + mdp:/usr/include/qt6/QtCore/qversiontagging.h + mdp:/usr/include/qt6/QtCore/qxptype_traits.h + mdp:/usr/include/qt6/QtCore/qyieldcpu.h + mdp:/usr/include/qt6/QtGui/QImage + mdp:/usr/include/qt6/QtGui/QPixmap + mdp:/usr/include/qt6/QtGui/qcolor.h + mdp:/usr/include/qt6/QtGui/qimage.h + mdp:/usr/include/qt6/QtGui/qpaintdevice.h + mdp:/usr/include/qt6/QtGui/qpixelformat.h + mdp:/usr/include/qt6/QtGui/qpixmap.h + mdp:/usr/include/qt6/QtGui/qpolygon.h + mdp:/usr/include/qt6/QtGui/qregion.h + mdp:/usr/include/qt6/QtGui/qrgb.h + mdp:/usr/include/qt6/QtGui/qrgba64.h + mdp:/usr/include/qt6/QtGui/qtgui-config.h + mdp:/usr/include/qt6/QtGui/qtguiexports.h + mdp:/usr/include/qt6/QtGui/qtguiglobal.h + mdp:/usr/include/qt6/QtGui/qtransform.h + mdp:/usr/include/qt6/QtGui/qwindowdefs.h + mdp:/usr/include/sched.h + mdp:/usr/include/stdc-predef.h + mdp:/usr/include/stdint.h + mdp:/usr/include/stdio.h + mdp:/usr/include/stdlib.h + mdp:/usr/include/string.h + mdp:/usr/include/strings.h + mdp:/usr/include/sys/cdefs.h + mdp:/usr/include/sys/select.h + mdp:/usr/include/sys/single_threaded.h + mdp:/usr/include/sys/syscall.h + mdp:/usr/include/sys/types.h + mdp:/usr/include/syscall.h + mdp:/usr/include/time.h + mdp:/usr/include/unistd.h + mdp:/usr/include/wchar.h + mdp:/usr/include/wctype.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stdarg.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stdbool.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stddef.h +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/icon_utils.h +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/import_progress_dialog.h + mmc:Q_OBJECT + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/kassetmanagerqt_autogen/moc_predefs.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/import_progress_dialog.h + mdp:/usr/include/alloca.h + mdp:/usr/include/asm-generic/bitsperlong.h + mdp:/usr/include/asm-generic/errno-base.h + mdp:/usr/include/asm-generic/errno.h + mdp:/usr/include/asm-generic/int-ll64.h + mdp:/usr/include/asm-generic/posix_types.h + mdp:/usr/include/asm-generic/types.h + mdp:/usr/include/asm/bitsperlong.h + mdp:/usr/include/asm/errno.h + mdp:/usr/include/asm/posix_types.h + mdp:/usr/include/asm/posix_types_64.h + mdp:/usr/include/asm/types.h + mdp:/usr/include/asm/unistd.h + mdp:/usr/include/asm/unistd_64.h + mdp:/usr/include/assert.h + mdp:/usr/include/bits/atomic_wide_counter.h + mdp:/usr/include/bits/byteswap.h + mdp:/usr/include/bits/confname.h + mdp:/usr/include/bits/cpu-set.h + mdp:/usr/include/bits/endian.h + mdp:/usr/include/bits/endianness.h + mdp:/usr/include/bits/environments.h + mdp:/usr/include/bits/errno.h + mdp:/usr/include/bits/floatn-common.h + mdp:/usr/include/bits/floatn.h + mdp:/usr/include/bits/getopt_core.h + mdp:/usr/include/bits/getopt_posix.h + mdp:/usr/include/bits/libc-header-start.h + mdp:/usr/include/bits/local_lim.h + mdp:/usr/include/bits/locale.h + mdp:/usr/include/bits/long-double.h + mdp:/usr/include/bits/posix1_lim.h + mdp:/usr/include/bits/posix2_lim.h + mdp:/usr/include/bits/posix_opt.h + mdp:/usr/include/bits/pthread_stack_min-dynamic.h + mdp:/usr/include/bits/pthreadtypes-arch.h + mdp:/usr/include/bits/pthreadtypes.h + mdp:/usr/include/bits/sched.h + mdp:/usr/include/bits/select.h + mdp:/usr/include/bits/setjmp.h + mdp:/usr/include/bits/stdint-intn.h + mdp:/usr/include/bits/stdint-least.h + mdp:/usr/include/bits/stdint-uintn.h + mdp:/usr/include/bits/stdio_lim.h + mdp:/usr/include/bits/stdlib-float.h + mdp:/usr/include/bits/struct_mutex.h + mdp:/usr/include/bits/struct_rwlock.h + mdp:/usr/include/bits/syscall.h + mdp:/usr/include/bits/thread-shared-types.h + mdp:/usr/include/bits/time.h + mdp:/usr/include/bits/time64.h + mdp:/usr/include/bits/timesize.h + mdp:/usr/include/bits/timex.h + mdp:/usr/include/bits/types.h + mdp:/usr/include/bits/types/FILE.h + mdp:/usr/include/bits/types/__FILE.h + mdp:/usr/include/bits/types/__fpos64_t.h + mdp:/usr/include/bits/types/__fpos_t.h + mdp:/usr/include/bits/types/__locale_t.h + mdp:/usr/include/bits/types/__mbstate_t.h + mdp:/usr/include/bits/types/__sigset_t.h + mdp:/usr/include/bits/types/clock_t.h + mdp:/usr/include/bits/types/clockid_t.h + mdp:/usr/include/bits/types/cookie_io_functions_t.h + mdp:/usr/include/bits/types/error_t.h + mdp:/usr/include/bits/types/locale_t.h + mdp:/usr/include/bits/types/mbstate_t.h + mdp:/usr/include/bits/types/sigset_t.h + mdp:/usr/include/bits/types/struct_FILE.h + mdp:/usr/include/bits/types/struct___jmp_buf_tag.h + mdp:/usr/include/bits/types/struct_itimerspec.h + mdp:/usr/include/bits/types/struct_sched_param.h + mdp:/usr/include/bits/types/struct_timespec.h + mdp:/usr/include/bits/types/struct_timeval.h + mdp:/usr/include/bits/types/struct_tm.h + mdp:/usr/include/bits/types/time_t.h + mdp:/usr/include/bits/types/timer_t.h + mdp:/usr/include/bits/types/wint_t.h + mdp:/usr/include/bits/typesizes.h + mdp:/usr/include/bits/uintn-identity.h + mdp:/usr/include/bits/uio_lim.h + mdp:/usr/include/bits/unistd_ext.h + mdp:/usr/include/bits/waitflags.h + mdp:/usr/include/bits/waitstatus.h + mdp:/usr/include/bits/wchar.h + mdp:/usr/include/bits/wctype-wchar.h + mdp:/usr/include/bits/wordsize.h + mdp:/usr/include/bits/xopen_lim.h + mdp:/usr/include/c++/15/algorithm + mdp:/usr/include/c++/15/array + mdp:/usr/include/c++/15/atomic + mdp:/usr/include/c++/15/backward/auto_ptr.h + mdp:/usr/include/c++/15/backward/binders.h + mdp:/usr/include/c++/15/bit + mdp:/usr/include/c++/15/bits/algorithmfwd.h + mdp:/usr/include/c++/15/bits/align.h + mdp:/usr/include/c++/15/bits/alloc_traits.h + mdp:/usr/include/c++/15/bits/allocated_ptr.h + mdp:/usr/include/c++/15/bits/allocator.h + mdp:/usr/include/c++/15/bits/atomic_base.h + mdp:/usr/include/c++/15/bits/atomic_lockfree_defines.h + mdp:/usr/include/c++/15/bits/atomic_wait.h + mdp:/usr/include/c++/15/bits/basic_ios.h + mdp:/usr/include/c++/15/bits/basic_ios.tcc + mdp:/usr/include/c++/15/bits/basic_string.h + mdp:/usr/include/c++/15/bits/basic_string.tcc + mdp:/usr/include/c++/15/bits/char_traits.h + mdp:/usr/include/c++/15/bits/charconv.h + mdp:/usr/include/c++/15/bits/chrono.h + mdp:/usr/include/c++/15/bits/chrono_io.h + mdp:/usr/include/c++/15/bits/codecvt.h + mdp:/usr/include/c++/15/bits/concept_check.h + mdp:/usr/include/c++/15/bits/cpp_type_traits.h + mdp:/usr/include/c++/15/bits/cxxabi_forced.h + mdp:/usr/include/c++/15/bits/cxxabi_init_exception.h + mdp:/usr/include/c++/15/bits/enable_special_members.h + mdp:/usr/include/c++/15/bits/erase_if.h + mdp:/usr/include/c++/15/bits/exception.h + mdp:/usr/include/c++/15/bits/exception_defines.h + mdp:/usr/include/c++/15/bits/exception_ptr.h + mdp:/usr/include/c++/15/bits/functexcept.h + mdp:/usr/include/c++/15/bits/functional_hash.h + mdp:/usr/include/c++/15/bits/hash_bytes.h + mdp:/usr/include/c++/15/bits/hashtable.h + mdp:/usr/include/c++/15/bits/hashtable_policy.h + mdp:/usr/include/c++/15/bits/invoke.h + mdp:/usr/include/c++/15/bits/ios_base.h + mdp:/usr/include/c++/15/bits/istream.tcc + mdp:/usr/include/c++/15/bits/iterator_concepts.h + mdp:/usr/include/c++/15/bits/list.tcc + mdp:/usr/include/c++/15/bits/locale_classes.h + mdp:/usr/include/c++/15/bits/locale_classes.tcc + mdp:/usr/include/c++/15/bits/locale_conv.h + mdp:/usr/include/c++/15/bits/locale_facets.h + mdp:/usr/include/c++/15/bits/locale_facets.tcc + mdp:/usr/include/c++/15/bits/locale_facets_nonio.h + mdp:/usr/include/c++/15/bits/locale_facets_nonio.tcc + mdp:/usr/include/c++/15/bits/localefwd.h + mdp:/usr/include/c++/15/bits/max_size_type.h + mdp:/usr/include/c++/15/bits/memory_resource.h + mdp:/usr/include/c++/15/bits/memoryfwd.h + mdp:/usr/include/c++/15/bits/move.h + mdp:/usr/include/c++/15/bits/nested_exception.h + mdp:/usr/include/c++/15/bits/new_allocator.h + mdp:/usr/include/c++/15/bits/node_handle.h + mdp:/usr/include/c++/15/bits/ostream.h + mdp:/usr/include/c++/15/bits/ostream.tcc + mdp:/usr/include/c++/15/bits/ostream_insert.h + mdp:/usr/include/c++/15/bits/parse_numbers.h + mdp:/usr/include/c++/15/bits/postypes.h + mdp:/usr/include/c++/15/bits/predefined_ops.h + mdp:/usr/include/c++/15/bits/ptr_traits.h + mdp:/usr/include/c++/15/bits/quoted_string.h + mdp:/usr/include/c++/15/bits/range_access.h + mdp:/usr/include/c++/15/bits/ranges_algo.h + mdp:/usr/include/c++/15/bits/ranges_algobase.h + mdp:/usr/include/c++/15/bits/ranges_base.h + mdp:/usr/include/c++/15/bits/ranges_cmp.h + mdp:/usr/include/c++/15/bits/ranges_uninitialized.h + mdp:/usr/include/c++/15/bits/ranges_util.h + mdp:/usr/include/c++/15/bits/refwrap.h + mdp:/usr/include/c++/15/bits/requires_hosted.h + mdp:/usr/include/c++/15/bits/shared_ptr.h + mdp:/usr/include/c++/15/bits/shared_ptr_atomic.h + mdp:/usr/include/c++/15/bits/shared_ptr_base.h + mdp:/usr/include/c++/15/bits/specfun.h + mdp:/usr/include/c++/15/bits/sstream.tcc + mdp:/usr/include/c++/15/bits/std_abs.h + mdp:/usr/include/c++/15/bits/std_function.h + mdp:/usr/include/c++/15/bits/std_mutex.h + mdp:/usr/include/c++/15/bits/stl_algo.h + mdp:/usr/include/c++/15/bits/stl_algobase.h + mdp:/usr/include/c++/15/bits/stl_bvector.h + mdp:/usr/include/c++/15/bits/stl_construct.h + mdp:/usr/include/c++/15/bits/stl_function.h + mdp:/usr/include/c++/15/bits/stl_heap.h + mdp:/usr/include/c++/15/bits/stl_iterator.h + mdp:/usr/include/c++/15/bits/stl_iterator_base_funcs.h + mdp:/usr/include/c++/15/bits/stl_iterator_base_types.h + mdp:/usr/include/c++/15/bits/stl_list.h + mdp:/usr/include/c++/15/bits/stl_map.h + mdp:/usr/include/c++/15/bits/stl_multimap.h + mdp:/usr/include/c++/15/bits/stl_multiset.h + mdp:/usr/include/c++/15/bits/stl_numeric.h + mdp:/usr/include/c++/15/bits/stl_pair.h + mdp:/usr/include/c++/15/bits/stl_raw_storage_iter.h + mdp:/usr/include/c++/15/bits/stl_relops.h + mdp:/usr/include/c++/15/bits/stl_set.h + mdp:/usr/include/c++/15/bits/stl_tempbuf.h + mdp:/usr/include/c++/15/bits/stl_tree.h + mdp:/usr/include/c++/15/bits/stl_uninitialized.h + mdp:/usr/include/c++/15/bits/stl_vector.h + mdp:/usr/include/c++/15/bits/stream_iterator.h + mdp:/usr/include/c++/15/bits/streambuf.tcc + mdp:/usr/include/c++/15/bits/streambuf_iterator.h + mdp:/usr/include/c++/15/bits/string_view.tcc + mdp:/usr/include/c++/15/bits/stringfwd.h + mdp:/usr/include/c++/15/bits/uniform_int_dist.h + mdp:/usr/include/c++/15/bits/unique_ptr.h + mdp:/usr/include/c++/15/bits/unordered_map.h + mdp:/usr/include/c++/15/bits/unordered_set.h + mdp:/usr/include/c++/15/bits/uses_allocator.h + mdp:/usr/include/c++/15/bits/uses_allocator_args.h + mdp:/usr/include/c++/15/bits/utility.h + mdp:/usr/include/c++/15/bits/vector.tcc + mdp:/usr/include/c++/15/bits/version.h + mdp:/usr/include/c++/15/cassert + mdp:/usr/include/c++/15/cctype + mdp:/usr/include/c++/15/cerrno + mdp:/usr/include/c++/15/charconv + mdp:/usr/include/c++/15/chrono + mdp:/usr/include/c++/15/climits + mdp:/usr/include/c++/15/clocale + mdp:/usr/include/c++/15/cmath + mdp:/usr/include/c++/15/compare + mdp:/usr/include/c++/15/concepts + mdp:/usr/include/c++/15/cstddef + mdp:/usr/include/c++/15/cstdint + mdp:/usr/include/c++/15/cstdio + mdp:/usr/include/c++/15/cstdlib + mdp:/usr/include/c++/15/cstring + mdp:/usr/include/c++/15/ctime + mdp:/usr/include/c++/15/cwchar + mdp:/usr/include/c++/15/cwctype + mdp:/usr/include/c++/15/debug/assertions.h + mdp:/usr/include/c++/15/debug/debug.h + mdp:/usr/include/c++/15/exception + mdp:/usr/include/c++/15/ext/aligned_buffer.h + mdp:/usr/include/c++/15/ext/alloc_traits.h + mdp:/usr/include/c++/15/ext/atomicity.h + mdp:/usr/include/c++/15/ext/concurrence.h + mdp:/usr/include/c++/15/ext/numeric_traits.h + mdp:/usr/include/c++/15/ext/string_conversions.h + mdp:/usr/include/c++/15/ext/type_traits.h + mdp:/usr/include/c++/15/format + mdp:/usr/include/c++/15/functional + mdp:/usr/include/c++/15/initializer_list + mdp:/usr/include/c++/15/iomanip + mdp:/usr/include/c++/15/ios + mdp:/usr/include/c++/15/iosfwd + mdp:/usr/include/c++/15/istream + mdp:/usr/include/c++/15/iterator + mdp:/usr/include/c++/15/limits + mdp:/usr/include/c++/15/list + mdp:/usr/include/c++/15/locale + mdp:/usr/include/c++/15/map + mdp:/usr/include/c++/15/memory + mdp:/usr/include/c++/15/new + mdp:/usr/include/c++/15/numeric + mdp:/usr/include/c++/15/optional + mdp:/usr/include/c++/15/ostream + mdp:/usr/include/c++/15/pstl/execution_defs.h + mdp:/usr/include/c++/15/pstl/glue_numeric_defs.h + mdp:/usr/include/c++/15/pstl/pstl_config.h + mdp:/usr/include/c++/15/ratio + mdp:/usr/include/c++/15/set + mdp:/usr/include/c++/15/sstream + mdp:/usr/include/c++/15/stdexcept + mdp:/usr/include/c++/15/streambuf + mdp:/usr/include/c++/15/string + mdp:/usr/include/c++/15/string_view + mdp:/usr/include/c++/15/system_error + mdp:/usr/include/c++/15/tr1/bessel_function.tcc + mdp:/usr/include/c++/15/tr1/beta_function.tcc + mdp:/usr/include/c++/15/tr1/ell_integral.tcc + mdp:/usr/include/c++/15/tr1/exp_integral.tcc + mdp:/usr/include/c++/15/tr1/gamma.tcc + mdp:/usr/include/c++/15/tr1/hypergeometric.tcc + mdp:/usr/include/c++/15/tr1/legendre_function.tcc + mdp:/usr/include/c++/15/tr1/modified_bessel_func.tcc + mdp:/usr/include/c++/15/tr1/poly_hermite.tcc + mdp:/usr/include/c++/15/tr1/poly_laguerre.tcc + mdp:/usr/include/c++/15/tr1/riemann_zeta.tcc + mdp:/usr/include/c++/15/tr1/special_function_util.h + mdp:/usr/include/c++/15/tuple + mdp:/usr/include/c++/15/type_traits + mdp:/usr/include/c++/15/typeinfo + mdp:/usr/include/c++/15/unordered_map + mdp:/usr/include/c++/15/unordered_set + mdp:/usr/include/c++/15/utility + mdp:/usr/include/c++/15/variant + mdp:/usr/include/c++/15/vector + mdp:/usr/include/c++/15/version + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/atomic_word.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++allocator.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++config.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++locale.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/cpu_defines.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/ctype_base.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/ctype_inline.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/error_constants.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/gthr-default.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/gthr.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/messages_members.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/os_defines.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/time_members.h + mdp:/usr/include/ctype.h + mdp:/usr/include/endian.h + mdp:/usr/include/errno.h + mdp:/usr/include/features-time64.h + mdp:/usr/include/features.h + mdp:/usr/include/gnu/stubs-64.h + mdp:/usr/include/gnu/stubs.h + mdp:/usr/include/libintl.h + mdp:/usr/include/limits.h + mdp:/usr/include/linux/close_range.h + mdp:/usr/include/linux/errno.h + mdp:/usr/include/linux/limits.h + mdp:/usr/include/linux/posix_types.h + mdp:/usr/include/linux/sched/types.h + mdp:/usr/include/linux/stddef.h + mdp:/usr/include/linux/types.h + mdp:/usr/include/locale.h + mdp:/usr/include/pthread.h + mdp:/usr/include/qt6/QtCore/q17memory.h + mdp:/usr/include/qt6/QtCore/q20functional.h + mdp:/usr/include/qt6/QtCore/q20iterator.h + mdp:/usr/include/qt6/QtCore/q20memory.h + mdp:/usr/include/qt6/QtCore/q20type_traits.h + mdp:/usr/include/qt6/QtCore/q20utility.h + mdp:/usr/include/qt6/QtCore/q23type_traits.h + mdp:/usr/include/qt6/QtCore/q23utility.h + mdp:/usr/include/qt6/QtCore/qalgorithms.h + mdp:/usr/include/qt6/QtCore/qalloc.h + mdp:/usr/include/qt6/QtCore/qanystringview.h + mdp:/usr/include/qt6/QtCore/qarraydata.h + mdp:/usr/include/qt6/QtCore/qarraydataops.h + mdp:/usr/include/qt6/QtCore/qarraydatapointer.h + mdp:/usr/include/qt6/QtCore/qassert.h + mdp:/usr/include/qt6/QtCore/qatomic.h + mdp:/usr/include/qt6/QtCore/qatomic_cxx11.h + mdp:/usr/include/qt6/QtCore/qbasicatomic.h + mdp:/usr/include/qt6/QtCore/qbindingstorage.h + mdp:/usr/include/qt6/QtCore/qbytearray.h + mdp:/usr/include/qt6/QtCore/qbytearrayalgorithms.h + mdp:/usr/include/qt6/QtCore/qbytearraylist.h + mdp:/usr/include/qt6/QtCore/qbytearrayview.h + mdp:/usr/include/qt6/QtCore/qchar.h + mdp:/usr/include/qt6/QtCore/qcheckedint_impl.h + mdp:/usr/include/qt6/QtCore/qcompare.h + mdp:/usr/include/qt6/QtCore/qcompare_impl.h + mdp:/usr/include/qt6/QtCore/qcomparehelpers.h + mdp:/usr/include/qt6/QtCore/qcompilerdetection.h + mdp:/usr/include/qt6/QtCore/qconfig-64.h + mdp:/usr/include/qt6/QtCore/qconfig.h + mdp:/usr/include/qt6/QtCore/qconstructormacros.h + mdp:/usr/include/qt6/QtCore/qcontainerfwd.h + mdp:/usr/include/qt6/QtCore/qcontainerinfo.h + mdp:/usr/include/qt6/QtCore/qcontainertools_impl.h + mdp:/usr/include/qt6/QtCore/qcontiguouscache.h + mdp:/usr/include/qt6/QtCore/qdarwinhelpers.h + mdp:/usr/include/qt6/QtCore/qdatastream.h + mdp:/usr/include/qt6/QtCore/qdebug.h + mdp:/usr/include/qt6/QtCore/qendian.h + mdp:/usr/include/qt6/QtCore/qexceptionhandling.h + mdp:/usr/include/qt6/QtCore/qflags.h + mdp:/usr/include/qt6/QtCore/qfloat16.h + mdp:/usr/include/qt6/QtCore/qforeach.h + mdp:/usr/include/qt6/QtCore/qfunctionaltools_impl.h + mdp:/usr/include/qt6/QtCore/qfunctionpointer.h + mdp:/usr/include/qt6/QtCore/qgenericatomic.h + mdp:/usr/include/qt6/QtCore/qglobal.h + mdp:/usr/include/qt6/QtCore/qglobalstatic.h + mdp:/usr/include/qt6/QtCore/qhash.h + mdp:/usr/include/qt6/QtCore/qhashfunctions.h + mdp:/usr/include/qt6/QtCore/qiodevice.h + mdp:/usr/include/qt6/QtCore/qiodevicebase.h + mdp:/usr/include/qt6/QtCore/qiterable.h + mdp:/usr/include/qt6/QtCore/qiterator.h + mdp:/usr/include/qt6/QtCore/qlatin1stringview.h + mdp:/usr/include/qt6/QtCore/qline.h + mdp:/usr/include/qt6/QtCore/qlist.h + mdp:/usr/include/qt6/QtCore/qlogging.h + mdp:/usr/include/qt6/QtCore/qmalloc.h + mdp:/usr/include/qt6/QtCore/qmap.h + mdp:/usr/include/qt6/QtCore/qmargins.h + mdp:/usr/include/qt6/QtCore/qmath.h + mdp:/usr/include/qt6/QtCore/qmetacontainer.h + mdp:/usr/include/qt6/QtCore/qmetatype.h + mdp:/usr/include/qt6/QtCore/qminmax.h + mdp:/usr/include/qt6/QtCore/qnamespace.h + mdp:/usr/include/qt6/QtCore/qnumeric.h + mdp:/usr/include/qt6/QtCore/qobject.h + mdp:/usr/include/qt6/QtCore/qobject_impl.h + mdp:/usr/include/qt6/QtCore/qobjectdefs.h + mdp:/usr/include/qt6/QtCore/qobjectdefs_impl.h + mdp:/usr/include/qt6/QtCore/qoverload.h + mdp:/usr/include/qt6/QtCore/qpair.h + mdp:/usr/include/qt6/QtCore/qpoint.h + mdp:/usr/include/qt6/QtCore/qprocessordetection.h + mdp:/usr/include/qt6/QtCore/qrect.h + mdp:/usr/include/qt6/QtCore/qrefcount.h + mdp:/usr/include/qt6/QtCore/qscopedpointer.h + mdp:/usr/include/qt6/QtCore/qscopeguard.h + mdp:/usr/include/qt6/QtCore/qset.h + mdp:/usr/include/qt6/QtCore/qshareddata.h + mdp:/usr/include/qt6/QtCore/qshareddata_impl.h + mdp:/usr/include/qt6/QtCore/qsharedpointer.h + mdp:/usr/include/qt6/QtCore/qsharedpointer_impl.h + mdp:/usr/include/qt6/QtCore/qsize.h + mdp:/usr/include/qt6/QtCore/qspan.h + mdp:/usr/include/qt6/QtCore/qstdlibdetection.h + mdp:/usr/include/qt6/QtCore/qstring.h + mdp:/usr/include/qt6/QtCore/qstringalgorithms.h + mdp:/usr/include/qt6/QtCore/qstringbuilder.h + mdp:/usr/include/qt6/QtCore/qstringconverter.h + mdp:/usr/include/qt6/QtCore/qstringconverter_base.h + mdp:/usr/include/qt6/QtCore/qstringfwd.h + mdp:/usr/include/qt6/QtCore/qstringlist.h + mdp:/usr/include/qt6/QtCore/qstringmatcher.h + mdp:/usr/include/qt6/QtCore/qstringtokenizer.h + mdp:/usr/include/qt6/QtCore/qstringview.h + mdp:/usr/include/qt6/QtCore/qswap.h + mdp:/usr/include/qt6/QtCore/qsysinfo.h + mdp:/usr/include/qt6/QtCore/qsystemdetection.h + mdp:/usr/include/qt6/QtCore/qtaggedpointer.h + mdp:/usr/include/qt6/QtCore/qtclasshelpermacros.h + mdp:/usr/include/qt6/QtCore/qtconfiginclude.h + mdp:/usr/include/qt6/QtCore/qtconfigmacros.h + mdp:/usr/include/qt6/QtCore/qtcore-config.h + mdp:/usr/include/qt6/QtCore/qtcoreexports.h + mdp:/usr/include/qt6/QtCore/qtcoreglobal.h + mdp:/usr/include/qt6/QtCore/qtdeprecationdefinitions.h + mdp:/usr/include/qt6/QtCore/qtdeprecationmarkers.h + mdp:/usr/include/qt6/QtCore/qtenvironmentvariables.h + mdp:/usr/include/qt6/QtCore/qtextstream.h + mdp:/usr/include/qt6/QtCore/qtformat_impl.h + mdp:/usr/include/qt6/QtCore/qtmetamacros.h + mdp:/usr/include/qt6/QtCore/qtnoop.h + mdp:/usr/include/qt6/QtCore/qtpreprocessorsupport.h + mdp:/usr/include/qt6/QtCore/qtresource.h + mdp:/usr/include/qt6/QtCore/qttranslation.h + mdp:/usr/include/qt6/QtCore/qttypetraits.h + mdp:/usr/include/qt6/QtCore/qtversion.h + mdp:/usr/include/qt6/QtCore/qtversionchecks.h + mdp:/usr/include/qt6/QtCore/qtypeinfo.h + mdp:/usr/include/qt6/QtCore/qtypes.h + mdp:/usr/include/qt6/QtCore/qurl.h + mdp:/usr/include/qt6/QtCore/qutf8stringview.h + mdp:/usr/include/qt6/QtCore/qvariant.h + mdp:/usr/include/qt6/QtCore/qvarlengtharray.h + mdp:/usr/include/qt6/QtCore/qversiontagging.h + mdp:/usr/include/qt6/QtCore/qxptype_traits.h + mdp:/usr/include/qt6/QtCore/qyieldcpu.h + mdp:/usr/include/qt6/QtGui/qaction.h + mdp:/usr/include/qt6/QtGui/qbitmap.h + mdp:/usr/include/qt6/QtGui/qbrush.h + mdp:/usr/include/qt6/QtGui/qcolor.h + mdp:/usr/include/qt6/QtGui/qcursor.h + mdp:/usr/include/qt6/QtGui/qfont.h + mdp:/usr/include/qt6/QtGui/qfontinfo.h + mdp:/usr/include/qt6/QtGui/qfontmetrics.h + mdp:/usr/include/qt6/QtGui/qfontvariableaxis.h + mdp:/usr/include/qt6/QtGui/qicon.h + mdp:/usr/include/qt6/QtGui/qimage.h + mdp:/usr/include/qt6/QtGui/qkeysequence.h + mdp:/usr/include/qt6/QtGui/qpaintdevice.h + mdp:/usr/include/qt6/QtGui/qpalette.h + mdp:/usr/include/qt6/QtGui/qpicture.h + mdp:/usr/include/qt6/QtGui/qpixelformat.h + mdp:/usr/include/qt6/QtGui/qpixmap.h + mdp:/usr/include/qt6/QtGui/qpolygon.h + mdp:/usr/include/qt6/QtGui/qregion.h + mdp:/usr/include/qt6/QtGui/qrgb.h + mdp:/usr/include/qt6/QtGui/qrgba64.h + mdp:/usr/include/qt6/QtGui/qtextdocument.h + mdp:/usr/include/qt6/QtGui/qtgui-config.h + mdp:/usr/include/qt6/QtGui/qtguiexports.h + mdp:/usr/include/qt6/QtGui/qtguiglobal.h + mdp:/usr/include/qt6/QtGui/qtransform.h + mdp:/usr/include/qt6/QtGui/qwindowdefs.h + mdp:/usr/include/qt6/QtWidgets/QDialog + mdp:/usr/include/qt6/QtWidgets/QLabel + mdp:/usr/include/qt6/QtWidgets/QProgressBar + mdp:/usr/include/qt6/QtWidgets/QPushButton + mdp:/usr/include/qt6/QtWidgets/QVBoxLayout + mdp:/usr/include/qt6/QtWidgets/qabstractbutton.h + mdp:/usr/include/qt6/QtWidgets/qboxlayout.h + mdp:/usr/include/qt6/QtWidgets/qdialog.h + mdp:/usr/include/qt6/QtWidgets/qframe.h + mdp:/usr/include/qt6/QtWidgets/qgridlayout.h + mdp:/usr/include/qt6/QtWidgets/qlabel.h + mdp:/usr/include/qt6/QtWidgets/qlayout.h + mdp:/usr/include/qt6/QtWidgets/qlayoutitem.h + mdp:/usr/include/qt6/QtWidgets/qprogressbar.h + mdp:/usr/include/qt6/QtWidgets/qpushbutton.h + mdp:/usr/include/qt6/QtWidgets/qsizepolicy.h + mdp:/usr/include/qt6/QtWidgets/qtwidgets-config.h + mdp:/usr/include/qt6/QtWidgets/qtwidgetsexports.h + mdp:/usr/include/qt6/QtWidgets/qtwidgetsglobal.h + mdp:/usr/include/qt6/QtWidgets/qwidget.h + mdp:/usr/include/sched.h + mdp:/usr/include/stdc-predef.h + mdp:/usr/include/stdint.h + mdp:/usr/include/stdio.h + mdp:/usr/include/stdlib.h + mdp:/usr/include/string.h + mdp:/usr/include/strings.h + mdp:/usr/include/sys/cdefs.h + mdp:/usr/include/sys/select.h + mdp:/usr/include/sys/single_threaded.h + mdp:/usr/include/sys/syscall.h + mdp:/usr/include/sys/types.h + mdp:/usr/include/syscall.h + mdp:/usr/include/time.h + mdp:/usr/include/unistd.h + mdp:/usr/include/wchar.h + mdp:/usr/include/wctype.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stdarg.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stdbool.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stddef.h +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/mainwindow.h + mmc:Q_OBJECT + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/kassetmanagerqt_autogen/moc_predefs.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/mainwindow.h + mdp:/usr/include/alloca.h + mdp:/usr/include/asm-generic/bitsperlong.h + mdp:/usr/include/asm-generic/errno-base.h + mdp:/usr/include/asm-generic/errno.h + mdp:/usr/include/asm-generic/int-ll64.h + mdp:/usr/include/asm-generic/posix_types.h + mdp:/usr/include/asm-generic/types.h + mdp:/usr/include/asm/bitsperlong.h + mdp:/usr/include/asm/errno.h + mdp:/usr/include/asm/posix_types.h + mdp:/usr/include/asm/posix_types_64.h + mdp:/usr/include/asm/types.h + mdp:/usr/include/asm/unistd.h + mdp:/usr/include/asm/unistd_64.h + mdp:/usr/include/assert.h + mdp:/usr/include/bits/atomic_wide_counter.h + mdp:/usr/include/bits/byteswap.h + mdp:/usr/include/bits/confname.h + mdp:/usr/include/bits/cpu-set.h + mdp:/usr/include/bits/endian.h + mdp:/usr/include/bits/endianness.h + mdp:/usr/include/bits/environments.h + mdp:/usr/include/bits/errno.h + mdp:/usr/include/bits/floatn-common.h + mdp:/usr/include/bits/floatn.h + mdp:/usr/include/bits/getopt_core.h + mdp:/usr/include/bits/getopt_posix.h + mdp:/usr/include/bits/libc-header-start.h + mdp:/usr/include/bits/local_lim.h + mdp:/usr/include/bits/locale.h + mdp:/usr/include/bits/long-double.h + mdp:/usr/include/bits/posix1_lim.h + mdp:/usr/include/bits/posix2_lim.h + mdp:/usr/include/bits/posix_opt.h + mdp:/usr/include/bits/pthread_stack_min-dynamic.h + mdp:/usr/include/bits/pthreadtypes-arch.h + mdp:/usr/include/bits/pthreadtypes.h + mdp:/usr/include/bits/sched.h + mdp:/usr/include/bits/select.h + mdp:/usr/include/bits/setjmp.h + mdp:/usr/include/bits/stdint-intn.h + mdp:/usr/include/bits/stdint-least.h + mdp:/usr/include/bits/stdint-uintn.h + mdp:/usr/include/bits/stdio_lim.h + mdp:/usr/include/bits/stdlib-float.h + mdp:/usr/include/bits/struct_mutex.h + mdp:/usr/include/bits/struct_rwlock.h + mdp:/usr/include/bits/syscall.h + mdp:/usr/include/bits/thread-shared-types.h + mdp:/usr/include/bits/time.h + mdp:/usr/include/bits/time64.h + mdp:/usr/include/bits/timesize.h + mdp:/usr/include/bits/timex.h + mdp:/usr/include/bits/types.h + mdp:/usr/include/bits/types/FILE.h + mdp:/usr/include/bits/types/__FILE.h + mdp:/usr/include/bits/types/__fpos64_t.h + mdp:/usr/include/bits/types/__fpos_t.h + mdp:/usr/include/bits/types/__locale_t.h + mdp:/usr/include/bits/types/__mbstate_t.h + mdp:/usr/include/bits/types/__sigset_t.h + mdp:/usr/include/bits/types/clock_t.h + mdp:/usr/include/bits/types/clockid_t.h + mdp:/usr/include/bits/types/cookie_io_functions_t.h + mdp:/usr/include/bits/types/error_t.h + mdp:/usr/include/bits/types/locale_t.h + mdp:/usr/include/bits/types/mbstate_t.h + mdp:/usr/include/bits/types/sigset_t.h + mdp:/usr/include/bits/types/struct_FILE.h + mdp:/usr/include/bits/types/struct___jmp_buf_tag.h + mdp:/usr/include/bits/types/struct_itimerspec.h + mdp:/usr/include/bits/types/struct_sched_param.h + mdp:/usr/include/bits/types/struct_timespec.h + mdp:/usr/include/bits/types/struct_timeval.h + mdp:/usr/include/bits/types/struct_tm.h + mdp:/usr/include/bits/types/time_t.h + mdp:/usr/include/bits/types/timer_t.h + mdp:/usr/include/bits/types/wint_t.h + mdp:/usr/include/bits/typesizes.h + mdp:/usr/include/bits/uintn-identity.h + mdp:/usr/include/bits/uio_lim.h + mdp:/usr/include/bits/unistd_ext.h + mdp:/usr/include/bits/waitflags.h + mdp:/usr/include/bits/waitstatus.h + mdp:/usr/include/bits/wchar.h + mdp:/usr/include/bits/wctype-wchar.h + mdp:/usr/include/bits/wordsize.h + mdp:/usr/include/bits/xopen_lim.h + mdp:/usr/include/c++/15/algorithm + mdp:/usr/include/c++/15/array + mdp:/usr/include/c++/15/atomic + mdp:/usr/include/c++/15/backward/auto_ptr.h + mdp:/usr/include/c++/15/backward/binders.h + mdp:/usr/include/c++/15/bit + mdp:/usr/include/c++/15/bits/algorithmfwd.h + mdp:/usr/include/c++/15/bits/align.h + mdp:/usr/include/c++/15/bits/alloc_traits.h + mdp:/usr/include/c++/15/bits/allocated_ptr.h + mdp:/usr/include/c++/15/bits/allocator.h + mdp:/usr/include/c++/15/bits/atomic_base.h + mdp:/usr/include/c++/15/bits/atomic_lockfree_defines.h + mdp:/usr/include/c++/15/bits/atomic_wait.h + mdp:/usr/include/c++/15/bits/basic_ios.h + mdp:/usr/include/c++/15/bits/basic_ios.tcc + mdp:/usr/include/c++/15/bits/basic_string.h + mdp:/usr/include/c++/15/bits/basic_string.tcc + mdp:/usr/include/c++/15/bits/char_traits.h + mdp:/usr/include/c++/15/bits/charconv.h + mdp:/usr/include/c++/15/bits/chrono.h + mdp:/usr/include/c++/15/bits/chrono_io.h + mdp:/usr/include/c++/15/bits/codecvt.h + mdp:/usr/include/c++/15/bits/concept_check.h + mdp:/usr/include/c++/15/bits/cpp_type_traits.h + mdp:/usr/include/c++/15/bits/cxxabi_forced.h + mdp:/usr/include/c++/15/bits/cxxabi_init_exception.h + mdp:/usr/include/c++/15/bits/enable_special_members.h + mdp:/usr/include/c++/15/bits/erase_if.h + mdp:/usr/include/c++/15/bits/exception.h + mdp:/usr/include/c++/15/bits/exception_defines.h + mdp:/usr/include/c++/15/bits/exception_ptr.h + mdp:/usr/include/c++/15/bits/functexcept.h + mdp:/usr/include/c++/15/bits/functional_hash.h + mdp:/usr/include/c++/15/bits/hash_bytes.h + mdp:/usr/include/c++/15/bits/hashtable.h + mdp:/usr/include/c++/15/bits/hashtable_policy.h + mdp:/usr/include/c++/15/bits/invoke.h + mdp:/usr/include/c++/15/bits/ios_base.h + mdp:/usr/include/c++/15/bits/istream.tcc + mdp:/usr/include/c++/15/bits/iterator_concepts.h + mdp:/usr/include/c++/15/bits/list.tcc + mdp:/usr/include/c++/15/bits/locale_classes.h + mdp:/usr/include/c++/15/bits/locale_classes.tcc + mdp:/usr/include/c++/15/bits/locale_conv.h + mdp:/usr/include/c++/15/bits/locale_facets.h + mdp:/usr/include/c++/15/bits/locale_facets.tcc + mdp:/usr/include/c++/15/bits/locale_facets_nonio.h + mdp:/usr/include/c++/15/bits/locale_facets_nonio.tcc + mdp:/usr/include/c++/15/bits/localefwd.h + mdp:/usr/include/c++/15/bits/max_size_type.h + mdp:/usr/include/c++/15/bits/memory_resource.h + mdp:/usr/include/c++/15/bits/memoryfwd.h + mdp:/usr/include/c++/15/bits/move.h + mdp:/usr/include/c++/15/bits/nested_exception.h + mdp:/usr/include/c++/15/bits/new_allocator.h + mdp:/usr/include/c++/15/bits/node_handle.h + mdp:/usr/include/c++/15/bits/ostream.h + mdp:/usr/include/c++/15/bits/ostream.tcc + mdp:/usr/include/c++/15/bits/ostream_insert.h + mdp:/usr/include/c++/15/bits/parse_numbers.h + mdp:/usr/include/c++/15/bits/postypes.h + mdp:/usr/include/c++/15/bits/predefined_ops.h + mdp:/usr/include/c++/15/bits/ptr_traits.h + mdp:/usr/include/c++/15/bits/quoted_string.h + mdp:/usr/include/c++/15/bits/range_access.h + mdp:/usr/include/c++/15/bits/ranges_algo.h + mdp:/usr/include/c++/15/bits/ranges_algobase.h + mdp:/usr/include/c++/15/bits/ranges_base.h + mdp:/usr/include/c++/15/bits/ranges_cmp.h + mdp:/usr/include/c++/15/bits/ranges_uninitialized.h + mdp:/usr/include/c++/15/bits/ranges_util.h + mdp:/usr/include/c++/15/bits/refwrap.h + mdp:/usr/include/c++/15/bits/requires_hosted.h + mdp:/usr/include/c++/15/bits/shared_ptr.h + mdp:/usr/include/c++/15/bits/shared_ptr_atomic.h + mdp:/usr/include/c++/15/bits/shared_ptr_base.h + mdp:/usr/include/c++/15/bits/specfun.h + mdp:/usr/include/c++/15/bits/sstream.tcc + mdp:/usr/include/c++/15/bits/std_abs.h + mdp:/usr/include/c++/15/bits/std_function.h + mdp:/usr/include/c++/15/bits/std_mutex.h + mdp:/usr/include/c++/15/bits/stl_algo.h + mdp:/usr/include/c++/15/bits/stl_algobase.h + mdp:/usr/include/c++/15/bits/stl_bvector.h + mdp:/usr/include/c++/15/bits/stl_construct.h + mdp:/usr/include/c++/15/bits/stl_function.h + mdp:/usr/include/c++/15/bits/stl_heap.h + mdp:/usr/include/c++/15/bits/stl_iterator.h + mdp:/usr/include/c++/15/bits/stl_iterator_base_funcs.h + mdp:/usr/include/c++/15/bits/stl_iterator_base_types.h + mdp:/usr/include/c++/15/bits/stl_list.h + mdp:/usr/include/c++/15/bits/stl_map.h + mdp:/usr/include/c++/15/bits/stl_multimap.h + mdp:/usr/include/c++/15/bits/stl_multiset.h + mdp:/usr/include/c++/15/bits/stl_numeric.h + mdp:/usr/include/c++/15/bits/stl_pair.h + mdp:/usr/include/c++/15/bits/stl_raw_storage_iter.h + mdp:/usr/include/c++/15/bits/stl_relops.h + mdp:/usr/include/c++/15/bits/stl_set.h + mdp:/usr/include/c++/15/bits/stl_tempbuf.h + mdp:/usr/include/c++/15/bits/stl_tree.h + mdp:/usr/include/c++/15/bits/stl_uninitialized.h + mdp:/usr/include/c++/15/bits/stl_vector.h + mdp:/usr/include/c++/15/bits/stream_iterator.h + mdp:/usr/include/c++/15/bits/streambuf.tcc + mdp:/usr/include/c++/15/bits/streambuf_iterator.h + mdp:/usr/include/c++/15/bits/string_view.tcc + mdp:/usr/include/c++/15/bits/stringfwd.h + mdp:/usr/include/c++/15/bits/uniform_int_dist.h + mdp:/usr/include/c++/15/bits/unique_ptr.h + mdp:/usr/include/c++/15/bits/unordered_map.h + mdp:/usr/include/c++/15/bits/unordered_set.h + mdp:/usr/include/c++/15/bits/uses_allocator.h + mdp:/usr/include/c++/15/bits/uses_allocator_args.h + mdp:/usr/include/c++/15/bits/utility.h + mdp:/usr/include/c++/15/bits/vector.tcc + mdp:/usr/include/c++/15/bits/version.h + mdp:/usr/include/c++/15/cassert + mdp:/usr/include/c++/15/cctype + mdp:/usr/include/c++/15/cerrno + mdp:/usr/include/c++/15/charconv + mdp:/usr/include/c++/15/chrono + mdp:/usr/include/c++/15/climits + mdp:/usr/include/c++/15/clocale + mdp:/usr/include/c++/15/cmath + mdp:/usr/include/c++/15/compare + mdp:/usr/include/c++/15/concepts + mdp:/usr/include/c++/15/cstddef + mdp:/usr/include/c++/15/cstdint + mdp:/usr/include/c++/15/cstdio + mdp:/usr/include/c++/15/cstdlib + mdp:/usr/include/c++/15/cstring + mdp:/usr/include/c++/15/ctime + mdp:/usr/include/c++/15/cwchar + mdp:/usr/include/c++/15/cwctype + mdp:/usr/include/c++/15/debug/assertions.h + mdp:/usr/include/c++/15/debug/debug.h + mdp:/usr/include/c++/15/exception + mdp:/usr/include/c++/15/ext/aligned_buffer.h + mdp:/usr/include/c++/15/ext/alloc_traits.h + mdp:/usr/include/c++/15/ext/atomicity.h + mdp:/usr/include/c++/15/ext/concurrence.h + mdp:/usr/include/c++/15/ext/numeric_traits.h + mdp:/usr/include/c++/15/ext/string_conversions.h + mdp:/usr/include/c++/15/ext/type_traits.h + mdp:/usr/include/c++/15/filesystem + mdp:/usr/include/c++/15/format + mdp:/usr/include/c++/15/functional + mdp:/usr/include/c++/15/initializer_list + mdp:/usr/include/c++/15/iomanip + mdp:/usr/include/c++/15/ios + mdp:/usr/include/c++/15/iosfwd + mdp:/usr/include/c++/15/istream + mdp:/usr/include/c++/15/iterator + mdp:/usr/include/c++/15/limits + mdp:/usr/include/c++/15/list + mdp:/usr/include/c++/15/locale + mdp:/usr/include/c++/15/map + mdp:/usr/include/c++/15/memory + mdp:/usr/include/c++/15/new + mdp:/usr/include/c++/15/numeric + mdp:/usr/include/c++/15/optional + mdp:/usr/include/c++/15/ostream + mdp:/usr/include/c++/15/pstl/execution_defs.h + mdp:/usr/include/c++/15/pstl/glue_numeric_defs.h + mdp:/usr/include/c++/15/pstl/pstl_config.h + mdp:/usr/include/c++/15/ratio + mdp:/usr/include/c++/15/set + mdp:/usr/include/c++/15/sstream + mdp:/usr/include/c++/15/stdexcept + mdp:/usr/include/c++/15/streambuf + mdp:/usr/include/c++/15/string + mdp:/usr/include/c++/15/string_view + mdp:/usr/include/c++/15/system_error + mdp:/usr/include/c++/15/tr1/bessel_function.tcc + mdp:/usr/include/c++/15/tr1/beta_function.tcc + mdp:/usr/include/c++/15/tr1/ell_integral.tcc + mdp:/usr/include/c++/15/tr1/exp_integral.tcc + mdp:/usr/include/c++/15/tr1/gamma.tcc + mdp:/usr/include/c++/15/tr1/hypergeometric.tcc + mdp:/usr/include/c++/15/tr1/legendre_function.tcc + mdp:/usr/include/c++/15/tr1/modified_bessel_func.tcc + mdp:/usr/include/c++/15/tr1/poly_hermite.tcc + mdp:/usr/include/c++/15/tr1/poly_laguerre.tcc + mdp:/usr/include/c++/15/tr1/riemann_zeta.tcc + mdp:/usr/include/c++/15/tr1/special_function_util.h + mdp:/usr/include/c++/15/tuple + mdp:/usr/include/c++/15/type_traits + mdp:/usr/include/c++/15/typeinfo + mdp:/usr/include/c++/15/unordered_map + mdp:/usr/include/c++/15/unordered_set + mdp:/usr/include/c++/15/utility + mdp:/usr/include/c++/15/variant + mdp:/usr/include/c++/15/vector + mdp:/usr/include/c++/15/version + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/atomic_word.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++allocator.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++config.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++locale.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/cpu_defines.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/ctype_base.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/ctype_inline.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/error_constants.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/gthr-default.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/gthr.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/messages_members.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/os_defines.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/time_members.h + mdp:/usr/include/ctype.h + mdp:/usr/include/endian.h + mdp:/usr/include/errno.h + mdp:/usr/include/features-time64.h + mdp:/usr/include/features.h + mdp:/usr/include/gnu/stubs-64.h + mdp:/usr/include/gnu/stubs.h + mdp:/usr/include/libintl.h + mdp:/usr/include/limits.h + mdp:/usr/include/linux/close_range.h + mdp:/usr/include/linux/errno.h + mdp:/usr/include/linux/limits.h + mdp:/usr/include/linux/posix_types.h + mdp:/usr/include/linux/sched/types.h + mdp:/usr/include/linux/stddef.h + mdp:/usr/include/linux/types.h + mdp:/usr/include/locale.h + mdp:/usr/include/pthread.h + mdp:/usr/include/qt6/QtCore/QFileSystemWatcher + mdp:/usr/include/qt6/QtCore/QHash + mdp:/usr/include/qt6/QtCore/QSet + mdp:/usr/include/qt6/QtCore/QTimer + mdp:/usr/include/qt6/QtCore/q17memory.h + mdp:/usr/include/qt6/QtCore/q20functional.h + mdp:/usr/include/qt6/QtCore/q20iterator.h + mdp:/usr/include/qt6/QtCore/q20memory.h + mdp:/usr/include/qt6/QtCore/q20type_traits.h + mdp:/usr/include/qt6/QtCore/q20utility.h + mdp:/usr/include/qt6/QtCore/q23type_traits.h + mdp:/usr/include/qt6/QtCore/q23utility.h + mdp:/usr/include/qt6/QtCore/qabstracteventdispatcher.h + mdp:/usr/include/qt6/QtCore/qabstractitemmodel.h + mdp:/usr/include/qt6/QtCore/qalgorithms.h + mdp:/usr/include/qt6/QtCore/qalloc.h + mdp:/usr/include/qt6/QtCore/qanystringview.h + mdp:/usr/include/qt6/QtCore/qarraydata.h + mdp:/usr/include/qt6/QtCore/qarraydataops.h + mdp:/usr/include/qt6/QtCore/qarraydatapointer.h + mdp:/usr/include/qt6/QtCore/qassert.h + mdp:/usr/include/qt6/QtCore/qatomic.h + mdp:/usr/include/qt6/QtCore/qatomic_cxx11.h + mdp:/usr/include/qt6/QtCore/qbasicatomic.h + mdp:/usr/include/qt6/QtCore/qbasictimer.h + mdp:/usr/include/qt6/QtCore/qbindingstorage.h + mdp:/usr/include/qt6/QtCore/qbytearray.h + mdp:/usr/include/qt6/QtCore/qbytearrayalgorithms.h + mdp:/usr/include/qt6/QtCore/qbytearraylist.h + mdp:/usr/include/qt6/QtCore/qbytearrayview.h + mdp:/usr/include/qt6/QtCore/qcalendar.h + mdp:/usr/include/qt6/QtCore/qchar.h + mdp:/usr/include/qt6/QtCore/qcheckedint_impl.h + mdp:/usr/include/qt6/QtCore/qcompare.h + mdp:/usr/include/qt6/QtCore/qcompare_impl.h + mdp:/usr/include/qt6/QtCore/qcomparehelpers.h + mdp:/usr/include/qt6/QtCore/qcompilerdetection.h + mdp:/usr/include/qt6/QtCore/qconfig-64.h + mdp:/usr/include/qt6/QtCore/qconfig.h + mdp:/usr/include/qt6/QtCore/qconstructormacros.h + mdp:/usr/include/qt6/QtCore/qcontainerfwd.h + mdp:/usr/include/qt6/QtCore/qcontainerinfo.h + mdp:/usr/include/qt6/QtCore/qcontainertools_impl.h + mdp:/usr/include/qt6/QtCore/qcontiguouscache.h + mdp:/usr/include/qt6/QtCore/qdarwinhelpers.h + mdp:/usr/include/qt6/QtCore/qdatastream.h + mdp:/usr/include/qt6/QtCore/qdatetime.h + mdp:/usr/include/qt6/QtCore/qdeadlinetimer.h + mdp:/usr/include/qt6/QtCore/qdebug.h + mdp:/usr/include/qt6/QtCore/qdir.h + mdp:/usr/include/qt6/QtCore/qdirlisting.h + mdp:/usr/include/qt6/QtCore/qendian.h + mdp:/usr/include/qt6/QtCore/qeventloop.h + mdp:/usr/include/qt6/QtCore/qexceptionhandling.h + mdp:/usr/include/qt6/QtCore/qfile.h + mdp:/usr/include/qt6/QtCore/qfiledevice.h + mdp:/usr/include/qt6/QtCore/qfileinfo.h + mdp:/usr/include/qt6/QtCore/qfilesystemwatcher.h + mdp:/usr/include/qt6/QtCore/qflags.h + mdp:/usr/include/qt6/QtCore/qfloat16.h + mdp:/usr/include/qt6/QtCore/qforeach.h + mdp:/usr/include/qt6/QtCore/qfunctionaltools_impl.h + mdp:/usr/include/qt6/QtCore/qfunctionpointer.h + mdp:/usr/include/qt6/QtCore/qgenericatomic.h + mdp:/usr/include/qt6/QtCore/qglobal.h + mdp:/usr/include/qt6/QtCore/qglobalstatic.h + mdp:/usr/include/qt6/QtCore/qhash.h + mdp:/usr/include/qt6/QtCore/qhashfunctions.h + mdp:/usr/include/qt6/QtCore/qiodevice.h + mdp:/usr/include/qt6/QtCore/qiodevicebase.h + mdp:/usr/include/qt6/QtCore/qitemselectionmodel.h + mdp:/usr/include/qt6/QtCore/qiterable.h + mdp:/usr/include/qt6/QtCore/qiterator.h + mdp:/usr/include/qt6/QtCore/qlatin1stringview.h + mdp:/usr/include/qt6/QtCore/qline.h + mdp:/usr/include/qt6/QtCore/qlist.h + mdp:/usr/include/qt6/QtCore/qlocale.h + mdp:/usr/include/qt6/QtCore/qlogging.h + mdp:/usr/include/qt6/QtCore/qmalloc.h + mdp:/usr/include/qt6/QtCore/qmap.h + mdp:/usr/include/qt6/QtCore/qmargins.h + mdp:/usr/include/qt6/QtCore/qmath.h + mdp:/usr/include/qt6/QtCore/qmetacontainer.h + mdp:/usr/include/qt6/QtCore/qmetatype.h + mdp:/usr/include/qt6/QtCore/qminmax.h + mdp:/usr/include/qt6/QtCore/qnamespace.h + mdp:/usr/include/qt6/QtCore/qnumeric.h + mdp:/usr/include/qt6/QtCore/qobject.h + mdp:/usr/include/qt6/QtCore/qobject_impl.h + mdp:/usr/include/qt6/QtCore/qobjectdefs.h + mdp:/usr/include/qt6/QtCore/qobjectdefs_impl.h + mdp:/usr/include/qt6/QtCore/qoverload.h + mdp:/usr/include/qt6/QtCore/qpair.h + mdp:/usr/include/qt6/QtCore/qpoint.h + mdp:/usr/include/qt6/QtCore/qprocessordetection.h + mdp:/usr/include/qt6/QtCore/qrect.h + mdp:/usr/include/qt6/QtCore/qrefcount.h + mdp:/usr/include/qt6/QtCore/qregularexpression.h + mdp:/usr/include/qt6/QtCore/qscopedpointer.h + mdp:/usr/include/qt6/QtCore/qscopeguard.h + mdp:/usr/include/qt6/QtCore/qset.h + mdp:/usr/include/qt6/QtCore/qshareddata.h + mdp:/usr/include/qt6/QtCore/qshareddata_impl.h + mdp:/usr/include/qt6/QtCore/qsharedpointer.h + mdp:/usr/include/qt6/QtCore/qsharedpointer_impl.h + mdp:/usr/include/qt6/QtCore/qsize.h + mdp:/usr/include/qt6/QtCore/qspan.h + mdp:/usr/include/qt6/QtCore/qstdlibdetection.h + mdp:/usr/include/qt6/QtCore/qstring.h + mdp:/usr/include/qt6/QtCore/qstringalgorithms.h + mdp:/usr/include/qt6/QtCore/qstringbuilder.h + mdp:/usr/include/qt6/QtCore/qstringconverter.h + mdp:/usr/include/qt6/QtCore/qstringconverter_base.h + mdp:/usr/include/qt6/QtCore/qstringfwd.h + mdp:/usr/include/qt6/QtCore/qstringlist.h + mdp:/usr/include/qt6/QtCore/qstringmatcher.h + mdp:/usr/include/qt6/QtCore/qstringtokenizer.h + mdp:/usr/include/qt6/QtCore/qstringview.h + mdp:/usr/include/qt6/QtCore/qswap.h + mdp:/usr/include/qt6/QtCore/qsysinfo.h + mdp:/usr/include/qt6/QtCore/qsystemdetection.h + mdp:/usr/include/qt6/QtCore/qtaggedpointer.h + mdp:/usr/include/qt6/QtCore/qtclasshelpermacros.h + mdp:/usr/include/qt6/QtCore/qtconfiginclude.h + mdp:/usr/include/qt6/QtCore/qtconfigmacros.h + mdp:/usr/include/qt6/QtCore/qtcore-config.h + mdp:/usr/include/qt6/QtCore/qtcoreexports.h + mdp:/usr/include/qt6/QtCore/qtcoreglobal.h + mdp:/usr/include/qt6/QtCore/qtdeprecationdefinitions.h + mdp:/usr/include/qt6/QtCore/qtdeprecationmarkers.h + mdp:/usr/include/qt6/QtCore/qtenvironmentvariables.h + mdp:/usr/include/qt6/QtCore/qtextstream.h + mdp:/usr/include/qt6/QtCore/qtformat_impl.h + mdp:/usr/include/qt6/QtCore/qtimer.h + mdp:/usr/include/qt6/QtCore/qtimezone.h + mdp:/usr/include/qt6/QtCore/qtmetamacros.h + mdp:/usr/include/qt6/QtCore/qtnoop.h + mdp:/usr/include/qt6/QtCore/qtpreprocessorsupport.h + mdp:/usr/include/qt6/QtCore/qtresource.h + mdp:/usr/include/qt6/QtCore/qttranslation.h + mdp:/usr/include/qt6/QtCore/qttypetraits.h + mdp:/usr/include/qt6/QtCore/qtversion.h + mdp:/usr/include/qt6/QtCore/qtversionchecks.h + mdp:/usr/include/qt6/QtCore/qtypeinfo.h + mdp:/usr/include/qt6/QtCore/qtypes.h + mdp:/usr/include/qt6/QtCore/qurl.h + mdp:/usr/include/qt6/QtCore/qutf8stringview.h + mdp:/usr/include/qt6/QtCore/qvariant.h + mdp:/usr/include/qt6/QtCore/qvarlengtharray.h + mdp:/usr/include/qt6/QtCore/qversiontagging.h + mdp:/usr/include/qt6/QtCore/qxptype_traits.h + mdp:/usr/include/qt6/QtCore/qyieldcpu.h + mdp:/usr/include/qt6/QtGui/QAction + mdp:/usr/include/qt6/QtGui/QFileSystemModel + mdp:/usr/include/qt6/QtGui/QPixmap + mdp:/usr/include/qt6/QtGui/qaction.h + mdp:/usr/include/qt6/QtGui/qbitmap.h + mdp:/usr/include/qt6/QtGui/qbrush.h + mdp:/usr/include/qt6/QtGui/qcolor.h + mdp:/usr/include/qt6/QtGui/qcursor.h + mdp:/usr/include/qt6/QtGui/qfilesystemmodel.h + mdp:/usr/include/qt6/QtGui/qfont.h + mdp:/usr/include/qt6/QtGui/qfontinfo.h + mdp:/usr/include/qt6/QtGui/qfontmetrics.h + mdp:/usr/include/qt6/QtGui/qfontvariableaxis.h + mdp:/usr/include/qt6/QtGui/qicon.h + mdp:/usr/include/qt6/QtGui/qimage.h + mdp:/usr/include/qt6/QtGui/qkeysequence.h + mdp:/usr/include/qt6/QtGui/qpaintdevice.h + mdp:/usr/include/qt6/QtGui/qpalette.h + mdp:/usr/include/qt6/QtGui/qpen.h + mdp:/usr/include/qt6/QtGui/qpicture.h + mdp:/usr/include/qt6/QtGui/qpixelformat.h + mdp:/usr/include/qt6/QtGui/qpixmap.h + mdp:/usr/include/qt6/QtGui/qpolygon.h + mdp:/usr/include/qt6/QtGui/qregion.h + mdp:/usr/include/qt6/QtGui/qrgb.h + mdp:/usr/include/qt6/QtGui/qrgba64.h + mdp:/usr/include/qt6/QtGui/qtextcursor.h + mdp:/usr/include/qt6/QtGui/qtextdocument.h + mdp:/usr/include/qt6/QtGui/qtextformat.h + mdp:/usr/include/qt6/QtGui/qtextoption.h + mdp:/usr/include/qt6/QtGui/qtgui-config.h + mdp:/usr/include/qt6/QtGui/qtguiexports.h + mdp:/usr/include/qt6/QtGui/qtguiglobal.h + mdp:/usr/include/qt6/QtGui/qtransform.h + mdp:/usr/include/qt6/QtGui/qvalidator.h + mdp:/usr/include/qt6/QtGui/qwindowdefs.h + mdp:/usr/include/qt6/QtWidgets/QCheckBox + mdp:/usr/include/qt6/QtWidgets/QComboBox + mdp:/usr/include/qt6/QtWidgets/QGroupBox + mdp:/usr/include/qt6/QtWidgets/QHBoxLayout + mdp:/usr/include/qt6/QtWidgets/QLabel + mdp:/usr/include/qt6/QtWidgets/QLineEdit + mdp:/usr/include/qt6/QtWidgets/QListView + mdp:/usr/include/qt6/QtWidgets/QListWidget + mdp:/usr/include/qt6/QtWidgets/QMainWindow + mdp:/usr/include/qt6/QtWidgets/QMenu + mdp:/usr/include/qt6/QtWidgets/QPushButton + mdp:/usr/include/qt6/QtWidgets/QScrollArea + mdp:/usr/include/qt6/QtWidgets/QSplitter + mdp:/usr/include/qt6/QtWidgets/QTabWidget + mdp:/usr/include/qt6/QtWidgets/QTableWidget + mdp:/usr/include/qt6/QtWidgets/QToolButton + mdp:/usr/include/qt6/QtWidgets/QTreeView + mdp:/usr/include/qt6/QtWidgets/QVBoxLayout + mdp:/usr/include/qt6/QtWidgets/qabstractbutton.h + mdp:/usr/include/qt6/QtWidgets/qabstractitemdelegate.h + mdp:/usr/include/qt6/QtWidgets/qabstractitemview.h + mdp:/usr/include/qt6/QtWidgets/qabstractscrollarea.h + mdp:/usr/include/qt6/QtWidgets/qabstractslider.h + mdp:/usr/include/qt6/QtWidgets/qabstractspinbox.h + mdp:/usr/include/qt6/QtWidgets/qboxlayout.h + mdp:/usr/include/qt6/QtWidgets/qcheckbox.h + mdp:/usr/include/qt6/QtWidgets/qcombobox.h + mdp:/usr/include/qt6/QtWidgets/qframe.h + mdp:/usr/include/qt6/QtWidgets/qgridlayout.h + mdp:/usr/include/qt6/QtWidgets/qgroupbox.h + mdp:/usr/include/qt6/QtWidgets/qlabel.h + mdp:/usr/include/qt6/QtWidgets/qlayout.h + mdp:/usr/include/qt6/QtWidgets/qlayoutitem.h + mdp:/usr/include/qt6/QtWidgets/qlineedit.h + mdp:/usr/include/qt6/QtWidgets/qlistview.h + mdp:/usr/include/qt6/QtWidgets/qlistwidget.h + mdp:/usr/include/qt6/QtWidgets/qmainwindow.h + mdp:/usr/include/qt6/QtWidgets/qmenu.h + mdp:/usr/include/qt6/QtWidgets/qpushbutton.h + mdp:/usr/include/qt6/QtWidgets/qrubberband.h + mdp:/usr/include/qt6/QtWidgets/qscrollarea.h + mdp:/usr/include/qt6/QtWidgets/qsizepolicy.h + mdp:/usr/include/qt6/QtWidgets/qslider.h + mdp:/usr/include/qt6/QtWidgets/qsplitter.h + mdp:/usr/include/qt6/QtWidgets/qstyle.h + mdp:/usr/include/qt6/QtWidgets/qstyleoption.h + mdp:/usr/include/qt6/QtWidgets/qtabbar.h + mdp:/usr/include/qt6/QtWidgets/qtableview.h + mdp:/usr/include/qt6/QtWidgets/qtablewidget.h + mdp:/usr/include/qt6/QtWidgets/qtabwidget.h + mdp:/usr/include/qt6/QtWidgets/qtoolbutton.h + mdp:/usr/include/qt6/QtWidgets/qtreeview.h + mdp:/usr/include/qt6/QtWidgets/qtwidgets-config.h + mdp:/usr/include/qt6/QtWidgets/qtwidgetsexports.h + mdp:/usr/include/qt6/QtWidgets/qtwidgetsglobal.h + mdp:/usr/include/qt6/QtWidgets/qwidget.h + mdp:/usr/include/sched.h + mdp:/usr/include/stdc-predef.h + mdp:/usr/include/stdint.h + mdp:/usr/include/stdio.h + mdp:/usr/include/stdlib.h + mdp:/usr/include/string.h + mdp:/usr/include/strings.h + mdp:/usr/include/sys/cdefs.h + mdp:/usr/include/sys/select.h + mdp:/usr/include/sys/single_threaded.h + mdp:/usr/include/sys/syscall.h + mdp:/usr/include/sys/types.h + mdp:/usr/include/syscall.h + mdp:/usr/include/time.h + mdp:/usr/include/unistd.h + mdp:/usr/include/wchar.h + mdp:/usr/include/wctype.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stdarg.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stdbool.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stddef.h +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/thumbnail_generator_dialog.cpp +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/asset_sequence_grouping_proxy_model.cpp +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/log_viewer_widget.cpp +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/utils.cpp +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/image_preview_overlay.h + mmc:Q_OBJECT + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/kassetmanagerqt_autogen/moc_predefs.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/annotation_items.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/annotation_layer.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/image_preview_overlay.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/oiio_image_loader.h + mdp:/usr/include/alloca.h + mdp:/usr/include/asm-generic/bitsperlong.h + mdp:/usr/include/asm-generic/errno-base.h + mdp:/usr/include/asm-generic/errno.h + mdp:/usr/include/asm-generic/int-ll64.h + mdp:/usr/include/asm-generic/posix_types.h + mdp:/usr/include/asm-generic/types.h + mdp:/usr/include/asm/bitsperlong.h + mdp:/usr/include/asm/errno.h + mdp:/usr/include/asm/posix_types.h + mdp:/usr/include/asm/posix_types_64.h + mdp:/usr/include/asm/types.h + mdp:/usr/include/asm/unistd.h + mdp:/usr/include/asm/unistd_64.h + mdp:/usr/include/assert.h + mdp:/usr/include/bits/atomic_wide_counter.h + mdp:/usr/include/bits/byteswap.h + mdp:/usr/include/bits/confname.h + mdp:/usr/include/bits/cpu-set.h + mdp:/usr/include/bits/endian.h + mdp:/usr/include/bits/endianness.h + mdp:/usr/include/bits/environments.h + mdp:/usr/include/bits/errno.h + mdp:/usr/include/bits/floatn-common.h + mdp:/usr/include/bits/floatn.h + mdp:/usr/include/bits/getopt_core.h + mdp:/usr/include/bits/getopt_posix.h + mdp:/usr/include/bits/libc-header-start.h + mdp:/usr/include/bits/local_lim.h + mdp:/usr/include/bits/locale.h + mdp:/usr/include/bits/long-double.h + mdp:/usr/include/bits/posix1_lim.h + mdp:/usr/include/bits/posix2_lim.h + mdp:/usr/include/bits/posix_opt.h + mdp:/usr/include/bits/pthread_stack_min-dynamic.h + mdp:/usr/include/bits/pthreadtypes-arch.h + mdp:/usr/include/bits/pthreadtypes.h + mdp:/usr/include/bits/sched.h + mdp:/usr/include/bits/select.h + mdp:/usr/include/bits/setjmp.h + mdp:/usr/include/bits/stdint-intn.h + mdp:/usr/include/bits/stdint-least.h + mdp:/usr/include/bits/stdint-uintn.h + mdp:/usr/include/bits/stdio_lim.h + mdp:/usr/include/bits/stdlib-float.h + mdp:/usr/include/bits/struct_mutex.h + mdp:/usr/include/bits/struct_rwlock.h + mdp:/usr/include/bits/syscall.h + mdp:/usr/include/bits/thread-shared-types.h + mdp:/usr/include/bits/time.h + mdp:/usr/include/bits/time64.h + mdp:/usr/include/bits/timesize.h + mdp:/usr/include/bits/timex.h + mdp:/usr/include/bits/types.h + mdp:/usr/include/bits/types/FILE.h + mdp:/usr/include/bits/types/__FILE.h + mdp:/usr/include/bits/types/__fpos64_t.h + mdp:/usr/include/bits/types/__fpos_t.h + mdp:/usr/include/bits/types/__locale_t.h + mdp:/usr/include/bits/types/__mbstate_t.h + mdp:/usr/include/bits/types/__sigset_t.h + mdp:/usr/include/bits/types/clock_t.h + mdp:/usr/include/bits/types/clockid_t.h + mdp:/usr/include/bits/types/cookie_io_functions_t.h + mdp:/usr/include/bits/types/error_t.h + mdp:/usr/include/bits/types/locale_t.h + mdp:/usr/include/bits/types/mbstate_t.h + mdp:/usr/include/bits/types/sigset_t.h + mdp:/usr/include/bits/types/struct_FILE.h + mdp:/usr/include/bits/types/struct___jmp_buf_tag.h + mdp:/usr/include/bits/types/struct_itimerspec.h + mdp:/usr/include/bits/types/struct_sched_param.h + mdp:/usr/include/bits/types/struct_timespec.h + mdp:/usr/include/bits/types/struct_timeval.h + mdp:/usr/include/bits/types/struct_tm.h + mdp:/usr/include/bits/types/time_t.h + mdp:/usr/include/bits/types/timer_t.h + mdp:/usr/include/bits/types/wint_t.h + mdp:/usr/include/bits/typesizes.h + mdp:/usr/include/bits/uintn-identity.h + mdp:/usr/include/bits/uio_lim.h + mdp:/usr/include/bits/unistd_ext.h + mdp:/usr/include/bits/waitflags.h + mdp:/usr/include/bits/waitstatus.h + mdp:/usr/include/bits/wchar.h + mdp:/usr/include/bits/wctype-wchar.h + mdp:/usr/include/bits/wordsize.h + mdp:/usr/include/bits/xopen_lim.h + mdp:/usr/include/c++/15/algorithm + mdp:/usr/include/c++/15/array + mdp:/usr/include/c++/15/atomic + mdp:/usr/include/c++/15/backward/auto_ptr.h + mdp:/usr/include/c++/15/backward/binders.h + mdp:/usr/include/c++/15/bit + mdp:/usr/include/c++/15/bits/algorithmfwd.h + mdp:/usr/include/c++/15/bits/align.h + mdp:/usr/include/c++/15/bits/alloc_traits.h + mdp:/usr/include/c++/15/bits/allocated_ptr.h + mdp:/usr/include/c++/15/bits/allocator.h + mdp:/usr/include/c++/15/bits/atomic_base.h + mdp:/usr/include/c++/15/bits/atomic_lockfree_defines.h + mdp:/usr/include/c++/15/bits/atomic_wait.h + mdp:/usr/include/c++/15/bits/basic_ios.h + mdp:/usr/include/c++/15/bits/basic_ios.tcc + mdp:/usr/include/c++/15/bits/basic_string.h + mdp:/usr/include/c++/15/bits/basic_string.tcc + mdp:/usr/include/c++/15/bits/char_traits.h + mdp:/usr/include/c++/15/bits/charconv.h + mdp:/usr/include/c++/15/bits/chrono.h + mdp:/usr/include/c++/15/bits/chrono_io.h + mdp:/usr/include/c++/15/bits/codecvt.h + mdp:/usr/include/c++/15/bits/concept_check.h + mdp:/usr/include/c++/15/bits/cpp_type_traits.h + mdp:/usr/include/c++/15/bits/cxxabi_forced.h + mdp:/usr/include/c++/15/bits/cxxabi_init_exception.h + mdp:/usr/include/c++/15/bits/enable_special_members.h + mdp:/usr/include/c++/15/bits/erase_if.h + mdp:/usr/include/c++/15/bits/exception.h + mdp:/usr/include/c++/15/bits/exception_defines.h + mdp:/usr/include/c++/15/bits/exception_ptr.h + mdp:/usr/include/c++/15/bits/functexcept.h + mdp:/usr/include/c++/15/bits/functional_hash.h + mdp:/usr/include/c++/15/bits/hash_bytes.h + mdp:/usr/include/c++/15/bits/hashtable.h + mdp:/usr/include/c++/15/bits/hashtable_policy.h + mdp:/usr/include/c++/15/bits/invoke.h + mdp:/usr/include/c++/15/bits/ios_base.h + mdp:/usr/include/c++/15/bits/istream.tcc + mdp:/usr/include/c++/15/bits/iterator_concepts.h + mdp:/usr/include/c++/15/bits/list.tcc + mdp:/usr/include/c++/15/bits/locale_classes.h + mdp:/usr/include/c++/15/bits/locale_classes.tcc + mdp:/usr/include/c++/15/bits/locale_conv.h + mdp:/usr/include/c++/15/bits/locale_facets.h + mdp:/usr/include/c++/15/bits/locale_facets.tcc + mdp:/usr/include/c++/15/bits/locale_facets_nonio.h + mdp:/usr/include/c++/15/bits/locale_facets_nonio.tcc + mdp:/usr/include/c++/15/bits/localefwd.h + mdp:/usr/include/c++/15/bits/max_size_type.h + mdp:/usr/include/c++/15/bits/memory_resource.h + mdp:/usr/include/c++/15/bits/memoryfwd.h + mdp:/usr/include/c++/15/bits/move.h + mdp:/usr/include/c++/15/bits/nested_exception.h + mdp:/usr/include/c++/15/bits/new_allocator.h + mdp:/usr/include/c++/15/bits/node_handle.h + mdp:/usr/include/c++/15/bits/ostream.h + mdp:/usr/include/c++/15/bits/ostream.tcc + mdp:/usr/include/c++/15/bits/ostream_insert.h + mdp:/usr/include/c++/15/bits/parse_numbers.h + mdp:/usr/include/c++/15/bits/postypes.h + mdp:/usr/include/c++/15/bits/predefined_ops.h + mdp:/usr/include/c++/15/bits/ptr_traits.h + mdp:/usr/include/c++/15/bits/quoted_string.h + mdp:/usr/include/c++/15/bits/range_access.h + mdp:/usr/include/c++/15/bits/ranges_algo.h + mdp:/usr/include/c++/15/bits/ranges_algobase.h + mdp:/usr/include/c++/15/bits/ranges_base.h + mdp:/usr/include/c++/15/bits/ranges_cmp.h + mdp:/usr/include/c++/15/bits/ranges_uninitialized.h + mdp:/usr/include/c++/15/bits/ranges_util.h + mdp:/usr/include/c++/15/bits/refwrap.h + mdp:/usr/include/c++/15/bits/requires_hosted.h + mdp:/usr/include/c++/15/bits/shared_ptr.h + mdp:/usr/include/c++/15/bits/shared_ptr_atomic.h + mdp:/usr/include/c++/15/bits/shared_ptr_base.h + mdp:/usr/include/c++/15/bits/specfun.h + mdp:/usr/include/c++/15/bits/sstream.tcc + mdp:/usr/include/c++/15/bits/std_abs.h + mdp:/usr/include/c++/15/bits/std_function.h + mdp:/usr/include/c++/15/bits/std_mutex.h + mdp:/usr/include/c++/15/bits/stl_algo.h + mdp:/usr/include/c++/15/bits/stl_algobase.h + mdp:/usr/include/c++/15/bits/stl_bvector.h + mdp:/usr/include/c++/15/bits/stl_construct.h + mdp:/usr/include/c++/15/bits/stl_function.h + mdp:/usr/include/c++/15/bits/stl_heap.h + mdp:/usr/include/c++/15/bits/stl_iterator.h + mdp:/usr/include/c++/15/bits/stl_iterator_base_funcs.h + mdp:/usr/include/c++/15/bits/stl_iterator_base_types.h + mdp:/usr/include/c++/15/bits/stl_list.h + mdp:/usr/include/c++/15/bits/stl_map.h + mdp:/usr/include/c++/15/bits/stl_multimap.h + mdp:/usr/include/c++/15/bits/stl_multiset.h + mdp:/usr/include/c++/15/bits/stl_numeric.h + mdp:/usr/include/c++/15/bits/stl_pair.h + mdp:/usr/include/c++/15/bits/stl_raw_storage_iter.h + mdp:/usr/include/c++/15/bits/stl_relops.h + mdp:/usr/include/c++/15/bits/stl_set.h + mdp:/usr/include/c++/15/bits/stl_tempbuf.h + mdp:/usr/include/c++/15/bits/stl_tree.h + mdp:/usr/include/c++/15/bits/stl_uninitialized.h + mdp:/usr/include/c++/15/bits/stl_vector.h + mdp:/usr/include/c++/15/bits/stream_iterator.h + mdp:/usr/include/c++/15/bits/streambuf.tcc + mdp:/usr/include/c++/15/bits/streambuf_iterator.h + mdp:/usr/include/c++/15/bits/string_view.tcc + mdp:/usr/include/c++/15/bits/stringfwd.h + mdp:/usr/include/c++/15/bits/uniform_int_dist.h + mdp:/usr/include/c++/15/bits/unique_ptr.h + mdp:/usr/include/c++/15/bits/unordered_map.h + mdp:/usr/include/c++/15/bits/unordered_set.h + mdp:/usr/include/c++/15/bits/uses_allocator.h + mdp:/usr/include/c++/15/bits/uses_allocator_args.h + mdp:/usr/include/c++/15/bits/utility.h + mdp:/usr/include/c++/15/bits/vector.tcc + mdp:/usr/include/c++/15/bits/version.h + mdp:/usr/include/c++/15/cassert + mdp:/usr/include/c++/15/cctype + mdp:/usr/include/c++/15/cerrno + mdp:/usr/include/c++/15/charconv + mdp:/usr/include/c++/15/chrono + mdp:/usr/include/c++/15/climits + mdp:/usr/include/c++/15/clocale + mdp:/usr/include/c++/15/cmath + mdp:/usr/include/c++/15/compare + mdp:/usr/include/c++/15/concepts + mdp:/usr/include/c++/15/cstddef + mdp:/usr/include/c++/15/cstdint + mdp:/usr/include/c++/15/cstdio + mdp:/usr/include/c++/15/cstdlib + mdp:/usr/include/c++/15/cstring + mdp:/usr/include/c++/15/ctime + mdp:/usr/include/c++/15/cwchar + mdp:/usr/include/c++/15/cwctype + mdp:/usr/include/c++/15/debug/assertions.h + mdp:/usr/include/c++/15/debug/debug.h + mdp:/usr/include/c++/15/exception + mdp:/usr/include/c++/15/ext/aligned_buffer.h + mdp:/usr/include/c++/15/ext/alloc_traits.h + mdp:/usr/include/c++/15/ext/atomicity.h + mdp:/usr/include/c++/15/ext/concurrence.h + mdp:/usr/include/c++/15/ext/numeric_traits.h + mdp:/usr/include/c++/15/ext/string_conversions.h + mdp:/usr/include/c++/15/ext/type_traits.h + mdp:/usr/include/c++/15/format + mdp:/usr/include/c++/15/functional + mdp:/usr/include/c++/15/initializer_list + mdp:/usr/include/c++/15/iomanip + mdp:/usr/include/c++/15/ios + mdp:/usr/include/c++/15/iosfwd + mdp:/usr/include/c++/15/istream + mdp:/usr/include/c++/15/iterator + mdp:/usr/include/c++/15/limits + mdp:/usr/include/c++/15/list + mdp:/usr/include/c++/15/locale + mdp:/usr/include/c++/15/map + mdp:/usr/include/c++/15/memory + mdp:/usr/include/c++/15/new + mdp:/usr/include/c++/15/numeric + mdp:/usr/include/c++/15/optional + mdp:/usr/include/c++/15/ostream + mdp:/usr/include/c++/15/pstl/execution_defs.h + mdp:/usr/include/c++/15/pstl/glue_numeric_defs.h + mdp:/usr/include/c++/15/pstl/pstl_config.h + mdp:/usr/include/c++/15/ratio + mdp:/usr/include/c++/15/set + mdp:/usr/include/c++/15/sstream + mdp:/usr/include/c++/15/stdexcept + mdp:/usr/include/c++/15/streambuf + mdp:/usr/include/c++/15/string + mdp:/usr/include/c++/15/string_view + mdp:/usr/include/c++/15/system_error + mdp:/usr/include/c++/15/tr1/bessel_function.tcc + mdp:/usr/include/c++/15/tr1/beta_function.tcc + mdp:/usr/include/c++/15/tr1/ell_integral.tcc + mdp:/usr/include/c++/15/tr1/exp_integral.tcc + mdp:/usr/include/c++/15/tr1/gamma.tcc + mdp:/usr/include/c++/15/tr1/hypergeometric.tcc + mdp:/usr/include/c++/15/tr1/legendre_function.tcc + mdp:/usr/include/c++/15/tr1/modified_bessel_func.tcc + mdp:/usr/include/c++/15/tr1/poly_hermite.tcc + mdp:/usr/include/c++/15/tr1/poly_laguerre.tcc + mdp:/usr/include/c++/15/tr1/riemann_zeta.tcc + mdp:/usr/include/c++/15/tr1/special_function_util.h + mdp:/usr/include/c++/15/tuple + mdp:/usr/include/c++/15/type_traits + mdp:/usr/include/c++/15/typeinfo + mdp:/usr/include/c++/15/unordered_map + mdp:/usr/include/c++/15/unordered_set + mdp:/usr/include/c++/15/utility + mdp:/usr/include/c++/15/variant + mdp:/usr/include/c++/15/vector + mdp:/usr/include/c++/15/version + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/atomic_word.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++allocator.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++config.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++locale.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/cpu_defines.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/ctype_base.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/ctype_inline.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/error_constants.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/gthr-default.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/gthr.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/messages_members.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/os_defines.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/time_members.h + mdp:/usr/include/ctype.h + mdp:/usr/include/endian.h + mdp:/usr/include/errno.h + mdp:/usr/include/features-time64.h + mdp:/usr/include/features.h + mdp:/usr/include/gnu/stubs-64.h + mdp:/usr/include/gnu/stubs.h + mdp:/usr/include/libintl.h + mdp:/usr/include/limits.h + mdp:/usr/include/linux/close_range.h + mdp:/usr/include/linux/errno.h + mdp:/usr/include/linux/limits.h + mdp:/usr/include/linux/posix_types.h + mdp:/usr/include/linux/sched/types.h + mdp:/usr/include/linux/stddef.h + mdp:/usr/include/linux/types.h + mdp:/usr/include/locale.h + mdp:/usr/include/pthread.h + mdp:/usr/include/qt6/QtCore/QDebug + mdp:/usr/include/qt6/QtCore/QJsonObject + mdp:/usr/include/qt6/QtCore/QLineF + mdp:/usr/include/qt6/QtCore/QList + mdp:/usr/include/qt6/QtCore/QMap + mdp:/usr/include/qt6/QtCore/QObject + mdp:/usr/include/qt6/QtCore/QPointF + mdp:/usr/include/qt6/QtCore/QRect + mdp:/usr/include/qt6/QtCore/QRectF + mdp:/usr/include/qt6/QtCore/QSet + mdp:/usr/include/qt6/QtCore/QSize + mdp:/usr/include/qt6/QtCore/QSizeF + mdp:/usr/include/qt6/QtCore/QString + mdp:/usr/include/qt6/QtCore/QTimer + mdp:/usr/include/qt6/QtCore/q17memory.h + mdp:/usr/include/qt6/QtCore/q20functional.h + mdp:/usr/include/qt6/QtCore/q20iterator.h + mdp:/usr/include/qt6/QtCore/q20memory.h + mdp:/usr/include/qt6/QtCore/q20type_traits.h + mdp:/usr/include/qt6/QtCore/q20utility.h + mdp:/usr/include/qt6/QtCore/q23type_traits.h + mdp:/usr/include/qt6/QtCore/q23utility.h + mdp:/usr/include/qt6/QtCore/qabstracteventdispatcher.h + mdp:/usr/include/qt6/QtCore/qalgorithms.h + mdp:/usr/include/qt6/QtCore/qalloc.h + mdp:/usr/include/qt6/QtCore/qanystringview.h + mdp:/usr/include/qt6/QtCore/qarraydata.h + mdp:/usr/include/qt6/QtCore/qarraydataops.h + mdp:/usr/include/qt6/QtCore/qarraydatapointer.h + mdp:/usr/include/qt6/QtCore/qassert.h + mdp:/usr/include/qt6/QtCore/qatomic.h + mdp:/usr/include/qt6/QtCore/qatomic_cxx11.h + mdp:/usr/include/qt6/QtCore/qbasicatomic.h + mdp:/usr/include/qt6/QtCore/qbasictimer.h + mdp:/usr/include/qt6/QtCore/qbindingstorage.h + mdp:/usr/include/qt6/QtCore/qbytearray.h + mdp:/usr/include/qt6/QtCore/qbytearrayalgorithms.h + mdp:/usr/include/qt6/QtCore/qbytearraylist.h + mdp:/usr/include/qt6/QtCore/qbytearrayview.h + mdp:/usr/include/qt6/QtCore/qcalendar.h + mdp:/usr/include/qt6/QtCore/qcborcommon.h + mdp:/usr/include/qt6/QtCore/qcborvalue.h + mdp:/usr/include/qt6/QtCore/qchar.h + mdp:/usr/include/qt6/QtCore/qcheckedint_impl.h + mdp:/usr/include/qt6/QtCore/qcompare.h + mdp:/usr/include/qt6/QtCore/qcompare_impl.h + mdp:/usr/include/qt6/QtCore/qcomparehelpers.h + mdp:/usr/include/qt6/QtCore/qcompilerdetection.h + mdp:/usr/include/qt6/QtCore/qconfig-64.h + mdp:/usr/include/qt6/QtCore/qconfig.h + mdp:/usr/include/qt6/QtCore/qconstructormacros.h + mdp:/usr/include/qt6/QtCore/qcontainerfwd.h + mdp:/usr/include/qt6/QtCore/qcontainerinfo.h + mdp:/usr/include/qt6/QtCore/qcontainertools_impl.h + mdp:/usr/include/qt6/QtCore/qcontiguouscache.h + mdp:/usr/include/qt6/QtCore/qcoreapplication.h + mdp:/usr/include/qt6/QtCore/qcoreapplication_platform.h + mdp:/usr/include/qt6/QtCore/qcoreevent.h + mdp:/usr/include/qt6/QtCore/qdarwinhelpers.h + mdp:/usr/include/qt6/QtCore/qdatastream.h + mdp:/usr/include/qt6/QtCore/qdatetime.h + mdp:/usr/include/qt6/QtCore/qdeadlinetimer.h + mdp:/usr/include/qt6/QtCore/qdebug.h + mdp:/usr/include/qt6/QtCore/qendian.h + mdp:/usr/include/qt6/QtCore/qeventloop.h + mdp:/usr/include/qt6/QtCore/qexceptionhandling.h + mdp:/usr/include/qt6/QtCore/qflags.h + mdp:/usr/include/qt6/QtCore/qfloat16.h + mdp:/usr/include/qt6/QtCore/qforeach.h + mdp:/usr/include/qt6/QtCore/qfunctionaltools_impl.h + mdp:/usr/include/qt6/QtCore/qfunctionpointer.h + mdp:/usr/include/qt6/QtCore/qgenericatomic.h + mdp:/usr/include/qt6/QtCore/qglobal.h + mdp:/usr/include/qt6/QtCore/qglobalstatic.h + mdp:/usr/include/qt6/QtCore/qhash.h + mdp:/usr/include/qt6/QtCore/qhashfunctions.h + mdp:/usr/include/qt6/QtCore/qiodevice.h + mdp:/usr/include/qt6/QtCore/qiodevicebase.h + mdp:/usr/include/qt6/QtCore/qiterable.h + mdp:/usr/include/qt6/QtCore/qiterator.h + mdp:/usr/include/qt6/QtCore/qjsondocument.h + mdp:/usr/include/qt6/QtCore/qjsonobject.h + mdp:/usr/include/qt6/QtCore/qjsonparseerror.h + mdp:/usr/include/qt6/QtCore/qjsonvalue.h + mdp:/usr/include/qt6/QtCore/qlatin1stringview.h + mdp:/usr/include/qt6/QtCore/qline.h + mdp:/usr/include/qt6/QtCore/qlist.h + mdp:/usr/include/qt6/QtCore/qlocale.h + mdp:/usr/include/qt6/QtCore/qlogging.h + mdp:/usr/include/qt6/QtCore/qmalloc.h + mdp:/usr/include/qt6/QtCore/qmap.h + mdp:/usr/include/qt6/QtCore/qmargins.h + mdp:/usr/include/qt6/QtCore/qmath.h + mdp:/usr/include/qt6/QtCore/qmetacontainer.h + mdp:/usr/include/qt6/QtCore/qmetatype.h + mdp:/usr/include/qt6/QtCore/qminmax.h + mdp:/usr/include/qt6/QtCore/qnamespace.h + mdp:/usr/include/qt6/QtCore/qnativeinterface.h + mdp:/usr/include/qt6/QtCore/qnumeric.h + mdp:/usr/include/qt6/QtCore/qobject.h + mdp:/usr/include/qt6/QtCore/qobject_impl.h + mdp:/usr/include/qt6/QtCore/qobjectdefs.h + mdp:/usr/include/qt6/QtCore/qobjectdefs_impl.h + mdp:/usr/include/qt6/QtCore/qoverload.h + mdp:/usr/include/qt6/QtCore/qpair.h + mdp:/usr/include/qt6/QtCore/qpoint.h + mdp:/usr/include/qt6/QtCore/qprocessordetection.h + mdp:/usr/include/qt6/QtCore/qrect.h + mdp:/usr/include/qt6/QtCore/qrefcount.h + mdp:/usr/include/qt6/QtCore/qregularexpression.h + mdp:/usr/include/qt6/QtCore/qscopedpointer.h + mdp:/usr/include/qt6/QtCore/qscopeguard.h + mdp:/usr/include/qt6/QtCore/qset.h + mdp:/usr/include/qt6/QtCore/qshareddata.h + mdp:/usr/include/qt6/QtCore/qshareddata_impl.h + mdp:/usr/include/qt6/QtCore/qsharedpointer.h + mdp:/usr/include/qt6/QtCore/qsharedpointer_impl.h + mdp:/usr/include/qt6/QtCore/qsize.h + mdp:/usr/include/qt6/QtCore/qspan.h + mdp:/usr/include/qt6/QtCore/qstdlibdetection.h + mdp:/usr/include/qt6/QtCore/qstring.h + mdp:/usr/include/qt6/QtCore/qstringalgorithms.h + mdp:/usr/include/qt6/QtCore/qstringbuilder.h + mdp:/usr/include/qt6/QtCore/qstringconverter.h + mdp:/usr/include/qt6/QtCore/qstringconverter_base.h + mdp:/usr/include/qt6/QtCore/qstringfwd.h + mdp:/usr/include/qt6/QtCore/qstringlist.h + mdp:/usr/include/qt6/QtCore/qstringmatcher.h + mdp:/usr/include/qt6/QtCore/qstringtokenizer.h + mdp:/usr/include/qt6/QtCore/qstringview.h + mdp:/usr/include/qt6/QtCore/qswap.h + mdp:/usr/include/qt6/QtCore/qsysinfo.h + mdp:/usr/include/qt6/QtCore/qsystemdetection.h + mdp:/usr/include/qt6/QtCore/qtaggedpointer.h + mdp:/usr/include/qt6/QtCore/qtclasshelpermacros.h + mdp:/usr/include/qt6/QtCore/qtconfiginclude.h + mdp:/usr/include/qt6/QtCore/qtconfigmacros.h + mdp:/usr/include/qt6/QtCore/qtcore-config.h + mdp:/usr/include/qt6/QtCore/qtcoreexports.h + mdp:/usr/include/qt6/QtCore/qtcoreglobal.h + mdp:/usr/include/qt6/QtCore/qtdeprecationdefinitions.h + mdp:/usr/include/qt6/QtCore/qtdeprecationmarkers.h + mdp:/usr/include/qt6/QtCore/qtenvironmentvariables.h + mdp:/usr/include/qt6/QtCore/qtextstream.h + mdp:/usr/include/qt6/QtCore/qtformat_impl.h + mdp:/usr/include/qt6/QtCore/qtimer.h + mdp:/usr/include/qt6/QtCore/qtmetamacros.h + mdp:/usr/include/qt6/QtCore/qtnoop.h + mdp:/usr/include/qt6/QtCore/qtpreprocessorsupport.h + mdp:/usr/include/qt6/QtCore/qtresource.h + mdp:/usr/include/qt6/QtCore/qttranslation.h + mdp:/usr/include/qt6/QtCore/qttypetraits.h + mdp:/usr/include/qt6/QtCore/qtversion.h + mdp:/usr/include/qt6/QtCore/qtversionchecks.h + mdp:/usr/include/qt6/QtCore/qtypeinfo.h + mdp:/usr/include/qt6/QtCore/qtypes.h + mdp:/usr/include/qt6/QtCore/qurl.h + mdp:/usr/include/qt6/QtCore/qutf8stringview.h + mdp:/usr/include/qt6/QtCore/quuid.h + mdp:/usr/include/qt6/QtCore/qvariant.h + mdp:/usr/include/qt6/QtCore/qvarlengtharray.h + mdp:/usr/include/qt6/QtCore/qversiontagging.h + mdp:/usr/include/qt6/QtCore/qxptype_traits.h + mdp:/usr/include/qt6/QtCore/qyieldcpu.h + mdp:/usr/include/qt6/QtGui/QColor + mdp:/usr/include/qt6/QtGui/QFont + mdp:/usr/include/qt6/QtGui/QImage + mdp:/usr/include/qt6/QtGui/QKeyEvent + mdp:/usr/include/qt6/QtGui/QPainter + mdp:/usr/include/qt6/QtGui/QPainterPath + mdp:/usr/include/qt6/QtGui/QPixmap + mdp:/usr/include/qt6/QtGui/QTransform + mdp:/usr/include/qt6/QtGui/QUndoStack + mdp:/usr/include/qt6/QtGui/qaction.h + mdp:/usr/include/qt6/QtGui/qbitmap.h + mdp:/usr/include/qt6/QtGui/qbrush.h + mdp:/usr/include/qt6/QtGui/qcolor.h + mdp:/usr/include/qt6/QtGui/qcursor.h + mdp:/usr/include/qt6/QtGui/qevent.h + mdp:/usr/include/qt6/QtGui/qeventpoint.h + mdp:/usr/include/qt6/QtGui/qfont.h + mdp:/usr/include/qt6/QtGui/qfontinfo.h + mdp:/usr/include/qt6/QtGui/qfontmetrics.h + mdp:/usr/include/qt6/QtGui/qfontvariableaxis.h + mdp:/usr/include/qt6/QtGui/qguiapplication.h + mdp:/usr/include/qt6/QtGui/qguiapplication_platform.h + mdp:/usr/include/qt6/QtGui/qicon.h + mdp:/usr/include/qt6/QtGui/qimage.h + mdp:/usr/include/qt6/QtGui/qinputdevice.h + mdp:/usr/include/qt6/QtGui/qinputmethod.h + mdp:/usr/include/qt6/QtGui/qkeysequence.h + mdp:/usr/include/qt6/QtGui/qpaintdevice.h + mdp:/usr/include/qt6/QtGui/qpainter.h + mdp:/usr/include/qt6/QtGui/qpainterpath.h + mdp:/usr/include/qt6/QtGui/qpalette.h + mdp:/usr/include/qt6/QtGui/qpen.h + mdp:/usr/include/qt6/QtGui/qpicture.h + mdp:/usr/include/qt6/QtGui/qpixelformat.h + mdp:/usr/include/qt6/QtGui/qpixmap.h + mdp:/usr/include/qt6/QtGui/qpointingdevice.h + mdp:/usr/include/qt6/QtGui/qpolygon.h + mdp:/usr/include/qt6/QtGui/qregion.h + mdp:/usr/include/qt6/QtGui/qrgb.h + mdp:/usr/include/qt6/QtGui/qrgba64.h + mdp:/usr/include/qt6/QtGui/qscreen.h + mdp:/usr/include/qt6/QtGui/qscreen_platform.h + mdp:/usr/include/qt6/QtGui/qtextdocument.h + mdp:/usr/include/qt6/QtGui/qtextoption.h + mdp:/usr/include/qt6/QtGui/qtgui-config.h + mdp:/usr/include/qt6/QtGui/qtguiexports.h + mdp:/usr/include/qt6/QtGui/qtguiglobal.h + mdp:/usr/include/qt6/QtGui/qtransform.h + mdp:/usr/include/qt6/QtGui/qundostack.h + mdp:/usr/include/qt6/QtGui/qvector2d.h + mdp:/usr/include/qt6/QtGui/qvectornd.h + mdp:/usr/include/qt6/QtGui/qwindowdefs.h + mdp:/usr/include/qt6/QtWidgets/QGraphicsItem + mdp:/usr/include/qt6/QtWidgets/QGraphicsPixmapItem + mdp:/usr/include/qt6/QtWidgets/QGraphicsScene + mdp:/usr/include/qt6/QtWidgets/QGraphicsSceneMouseEvent + mdp:/usr/include/qt6/QtWidgets/QGraphicsView + mdp:/usr/include/qt6/QtWidgets/QLabel + mdp:/usr/include/qt6/QtWidgets/QPushButton + mdp:/usr/include/qt6/QtWidgets/QSlider + mdp:/usr/include/qt6/QtWidgets/QWidget + mdp:/usr/include/qt6/QtWidgets/qabstractbutton.h + mdp:/usr/include/qt6/QtWidgets/qabstractscrollarea.h + mdp:/usr/include/qt6/QtWidgets/qabstractslider.h + mdp:/usr/include/qt6/QtWidgets/qframe.h + mdp:/usr/include/qt6/QtWidgets/qgraphicsitem.h + mdp:/usr/include/qt6/QtWidgets/qgraphicsscene.h + mdp:/usr/include/qt6/QtWidgets/qgraphicssceneevent.h + mdp:/usr/include/qt6/QtWidgets/qgraphicsview.h + mdp:/usr/include/qt6/QtWidgets/qlabel.h + mdp:/usr/include/qt6/QtWidgets/qpushbutton.h + mdp:/usr/include/qt6/QtWidgets/qscrollarea.h + mdp:/usr/include/qt6/QtWidgets/qsizepolicy.h + mdp:/usr/include/qt6/QtWidgets/qslider.h + mdp:/usr/include/qt6/QtWidgets/qtwidgets-config.h + mdp:/usr/include/qt6/QtWidgets/qtwidgetsexports.h + mdp:/usr/include/qt6/QtWidgets/qtwidgetsglobal.h + mdp:/usr/include/qt6/QtWidgets/qwidget.h + mdp:/usr/include/sched.h + mdp:/usr/include/stdc-predef.h + mdp:/usr/include/stdint.h + mdp:/usr/include/stdio.h + mdp:/usr/include/stdlib.h + mdp:/usr/include/string.h + mdp:/usr/include/strings.h + mdp:/usr/include/sys/cdefs.h + mdp:/usr/include/sys/select.h + mdp:/usr/include/sys/single_threaded.h + mdp:/usr/include/sys/syscall.h + mdp:/usr/include/sys/types.h + mdp:/usr/include/syscall.h + mdp:/usr/include/time.h + mdp:/usr/include/unistd.h + mdp:/usr/include/wchar.h + mdp:/usr/include/wctype.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stdarg.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stdbool.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stddef.h +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/media/tlrender_player.cpp +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/file_manager_pane.cpp +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/image_preview_overlay.cpp +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/preview_overlay.h + mmc:Q_OBJECT + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/kassetmanagerqt_autogen/moc_predefs.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/annotation_items.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/annotation_layer.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/media/tlrender_player.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/media/tlrender_viewport.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/oiio_image_loader.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/preview_overlay.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/sequence_detector.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/Imath/ImathBox.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/Imath/ImathConfig.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/Imath/ImathExport.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/Imath/ImathMath.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/Imath/ImathNamespace.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/Imath/ImathPlatform.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/Imath/ImathTypeTraits.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/Imath/ImathVec.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/Imath/half.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/ftk/Core/Box.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/ftk/Core/BoxInline.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/ftk/Core/Color.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/ftk/Core/ColorInline.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/ftk/Core/Context.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/ftk/Core/ContextInline.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/ftk/Core/Export.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/ftk/Core/FontSystem.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/ftk/Core/FontSystemInline.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/ftk/Core/IBaseSystem.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/ftk/Core/IBaseSystemInline.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/ftk/Core/IRender.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/ftk/Core/ISystem.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/ftk/Core/Image.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/ftk/Core/ImageInline.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/ftk/Core/LogSystem.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/ftk/Core/Math.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/ftk/Core/MathInline.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/ftk/Core/Matrix.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/ftk/Core/MatrixInline.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/ftk/Core/Memory.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/ftk/Core/MemoryInline.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/ftk/Core/Mesh.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/ftk/Core/MeshInline.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/ftk/Core/Observable.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/ftk/Core/ObservableInline.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/ftk/Core/ObservableList.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/ftk/Core/ObservableListInline.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/ftk/Core/ObservableMap.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/ftk/Core/ObservableMapInline.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/ftk/Core/Path.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/ftk/Core/PathInline.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/ftk/Core/Range.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/ftk/Core/RangeInline.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/ftk/Core/RenderOptions.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/ftk/Core/RenderOptionsInline.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/ftk/Core/Size.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/ftk/Core/SizeInline.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/ftk/Core/Util.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/ftk/Core/Vector.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/ftk/Core/VectorInline.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/ftk/GL/Texture.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/ftk/UI/Event.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/ftk/UI/IWidget.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/ftk/UI/IWidgetInline.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/ftk/UI/IconSystem.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/ftk/UI/Style.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/ftk/UI/WidgetOptions.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/nlohmann/adl_serializer.hpp + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/nlohmann/byte_container_with_subtype.hpp + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/nlohmann/detail/abi_macros.hpp + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/nlohmann/detail/conversions/from_json.hpp + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/nlohmann/detail/conversions/to_chars.hpp + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/nlohmann/detail/conversions/to_json.hpp + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/nlohmann/detail/exceptions.hpp + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/nlohmann/detail/hash.hpp + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/nlohmann/detail/input/binary_reader.hpp + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/nlohmann/detail/input/input_adapters.hpp + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/nlohmann/detail/input/json_sax.hpp + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/nlohmann/detail/input/lexer.hpp + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/nlohmann/detail/input/parser.hpp + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/nlohmann/detail/input/position_t.hpp + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/nlohmann/detail/iterators/internal_iterator.hpp + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/nlohmann/detail/iterators/iter_impl.hpp + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/nlohmann/detail/iterators/iteration_proxy.hpp + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/nlohmann/detail/iterators/iterator_traits.hpp + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/nlohmann/detail/iterators/json_reverse_iterator.hpp + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/nlohmann/detail/iterators/primitive_iterator.hpp + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/nlohmann/detail/json_custom_base_class.hpp + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/nlohmann/detail/json_pointer.hpp + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/nlohmann/detail/json_ref.hpp + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/nlohmann/detail/macro_scope.hpp + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/nlohmann/detail/macro_unscope.hpp + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/nlohmann/detail/meta/call_std/begin.hpp + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/nlohmann/detail/meta/call_std/end.hpp + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/nlohmann/detail/meta/cpp_future.hpp + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/nlohmann/detail/meta/detected.hpp + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/nlohmann/detail/meta/identity_tag.hpp + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/nlohmann/detail/meta/is_sax.hpp + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/nlohmann/detail/meta/std_fs.hpp + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/nlohmann/detail/meta/type_traits.hpp + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/nlohmann/detail/meta/void_t.hpp + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/nlohmann/detail/output/binary_writer.hpp + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/nlohmann/detail/output/output_adapters.hpp + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/nlohmann/detail/output/serializer.hpp + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/nlohmann/detail/string_concat.hpp + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/nlohmann/detail/string_escape.hpp + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/nlohmann/detail/string_utils.hpp + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/nlohmann/detail/value_t.hpp + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/nlohmann/json.hpp + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/nlohmann/json_fwd.hpp + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/nlohmann/ordered_map.hpp + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/nlohmann/thirdparty/hedley/hedley.hpp + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/nlohmann/thirdparty/hedley/hedley_undef.hpp + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/opentime/errorStatus.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/opentime/export.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/opentime/rationalTime.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/opentime/timeRange.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/opentime/timeTransform.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/opentime/version.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/opentimelineio/anyDictionary.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/opentimelineio/anyVector.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/opentimelineio/color.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/opentimelineio/composable.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/opentimelineio/composition.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/opentimelineio/errorStatus.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/opentimelineio/export.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/opentimelineio/item.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/opentimelineio/serializableObject.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/opentimelineio/serializableObjectWithMetadata.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/opentimelineio/serialization.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/opentimelineio/stack.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/opentimelineio/timeline.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/opentimelineio/track.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/opentimelineio/typeRegistry.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/opentimelineio/version.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender/Core/Audio.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender/Core/AudioInline.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender/Core/AudioSystem.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender/Core/Export.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender/Core/Time.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender/Core/TimeInline.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender/Core/Util.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender/IO/IO.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender/IO/IOInline.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender/Qt/PlayerObject.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender/QtWidget/ContainerWidget.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender/QtWidget/Viewport.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender/Timeline/Audio.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender/Timeline/BackgroundOptions.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender/Timeline/ColorOptions.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender/Timeline/CompareOptions.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender/Timeline/DisplayOptions.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender/Timeline/ForegroundOptions.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender/Timeline/Player.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender/Timeline/PlayerOptions.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender/Timeline/Timeline.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender/Timeline/TimelineOptions.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender/Timeline/Transition.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender/Timeline/Video.h + mdp:/usr/include/GL/gl.h + mdp:/usr/include/alloca.h + mdp:/usr/include/asm-generic/bitsperlong.h + mdp:/usr/include/asm-generic/errno-base.h + mdp:/usr/include/asm-generic/errno.h + mdp:/usr/include/asm-generic/int-ll64.h + mdp:/usr/include/asm-generic/posix_types.h + mdp:/usr/include/asm-generic/types.h + mdp:/usr/include/asm/bitsperlong.h + mdp:/usr/include/asm/errno.h + mdp:/usr/include/asm/posix_types.h + mdp:/usr/include/asm/posix_types_64.h + mdp:/usr/include/asm/types.h + mdp:/usr/include/asm/unistd.h + mdp:/usr/include/asm/unistd_64.h + mdp:/usr/include/assert.h + mdp:/usr/include/bits/atomic_wide_counter.h + mdp:/usr/include/bits/byteswap.h + mdp:/usr/include/bits/confname.h + mdp:/usr/include/bits/cpu-set.h + mdp:/usr/include/bits/endian.h + mdp:/usr/include/bits/endianness.h + mdp:/usr/include/bits/environments.h + mdp:/usr/include/bits/errno.h + mdp:/usr/include/bits/floatn-common.h + mdp:/usr/include/bits/floatn.h + mdp:/usr/include/bits/flt-eval-method.h + mdp:/usr/include/bits/fp-fast.h + mdp:/usr/include/bits/fp-logb.h + mdp:/usr/include/bits/getopt_core.h + mdp:/usr/include/bits/getopt_posix.h + mdp:/usr/include/bits/iscanonical.h + mdp:/usr/include/bits/libc-header-start.h + mdp:/usr/include/bits/libm-simd-decl-stubs.h + mdp:/usr/include/bits/local_lim.h + mdp:/usr/include/bits/locale.h + mdp:/usr/include/bits/long-double.h + mdp:/usr/include/bits/math-vector.h + mdp:/usr/include/bits/mathcalls-helper-functions.h + mdp:/usr/include/bits/mathcalls-macros.h + mdp:/usr/include/bits/mathcalls-narrow.h + mdp:/usr/include/bits/mathcalls.h + mdp:/usr/include/bits/posix1_lim.h + mdp:/usr/include/bits/posix2_lim.h + mdp:/usr/include/bits/posix_opt.h + mdp:/usr/include/bits/pthread_stack_min-dynamic.h + mdp:/usr/include/bits/pthreadtypes-arch.h + mdp:/usr/include/bits/pthreadtypes.h + mdp:/usr/include/bits/sched.h + mdp:/usr/include/bits/select.h + mdp:/usr/include/bits/semaphore.h + mdp:/usr/include/bits/setjmp.h + mdp:/usr/include/bits/stdint-intn.h + mdp:/usr/include/bits/stdint-least.h + mdp:/usr/include/bits/stdint-uintn.h + mdp:/usr/include/bits/stdio_lim.h + mdp:/usr/include/bits/stdlib-float.h + mdp:/usr/include/bits/struct_mutex.h + mdp:/usr/include/bits/struct_rwlock.h + mdp:/usr/include/bits/syscall.h + mdp:/usr/include/bits/thread-shared-types.h + mdp:/usr/include/bits/time.h + mdp:/usr/include/bits/time64.h + mdp:/usr/include/bits/timesize.h + mdp:/usr/include/bits/timex.h + mdp:/usr/include/bits/types.h + mdp:/usr/include/bits/types/FILE.h + mdp:/usr/include/bits/types/__FILE.h + mdp:/usr/include/bits/types/__fpos64_t.h + mdp:/usr/include/bits/types/__fpos_t.h + mdp:/usr/include/bits/types/__locale_t.h + mdp:/usr/include/bits/types/__mbstate_t.h + mdp:/usr/include/bits/types/__sigset_t.h + mdp:/usr/include/bits/types/clock_t.h + mdp:/usr/include/bits/types/clockid_t.h + mdp:/usr/include/bits/types/cookie_io_functions_t.h + mdp:/usr/include/bits/types/error_t.h + mdp:/usr/include/bits/types/locale_t.h + mdp:/usr/include/bits/types/mbstate_t.h + mdp:/usr/include/bits/types/sigset_t.h + mdp:/usr/include/bits/types/struct_FILE.h + mdp:/usr/include/bits/types/struct___jmp_buf_tag.h + mdp:/usr/include/bits/types/struct_itimerspec.h + mdp:/usr/include/bits/types/struct_sched_param.h + mdp:/usr/include/bits/types/struct_timespec.h + mdp:/usr/include/bits/types/struct_timeval.h + mdp:/usr/include/bits/types/struct_tm.h + mdp:/usr/include/bits/types/time_t.h + mdp:/usr/include/bits/types/timer_t.h + mdp:/usr/include/bits/types/wint_t.h + mdp:/usr/include/bits/typesizes.h + mdp:/usr/include/bits/uintn-identity.h + mdp:/usr/include/bits/uio_lim.h + mdp:/usr/include/bits/unistd_ext.h + mdp:/usr/include/bits/waitflags.h + mdp:/usr/include/bits/waitstatus.h + mdp:/usr/include/bits/wchar.h + mdp:/usr/include/bits/wctype-wchar.h + mdp:/usr/include/bits/wordsize.h + mdp:/usr/include/bits/xopen_lim.h + mdp:/usr/include/c++/15/algorithm + mdp:/usr/include/c++/15/any + mdp:/usr/include/c++/15/array + mdp:/usr/include/c++/15/atomic + mdp:/usr/include/c++/15/backward/auto_ptr.h + mdp:/usr/include/c++/15/backward/binders.h + mdp:/usr/include/c++/15/bit + mdp:/usr/include/c++/15/bits/algorithmfwd.h + mdp:/usr/include/c++/15/bits/align.h + mdp:/usr/include/c++/15/bits/alloc_traits.h + mdp:/usr/include/c++/15/bits/allocated_ptr.h + mdp:/usr/include/c++/15/bits/allocator.h + mdp:/usr/include/c++/15/bits/atomic_base.h + mdp:/usr/include/c++/15/bits/atomic_futex.h + mdp:/usr/include/c++/15/bits/atomic_lockfree_defines.h + mdp:/usr/include/c++/15/bits/atomic_timed_wait.h + mdp:/usr/include/c++/15/bits/atomic_wait.h + mdp:/usr/include/c++/15/bits/basic_ios.h + mdp:/usr/include/c++/15/bits/basic_ios.tcc + mdp:/usr/include/c++/15/bits/basic_string.h + mdp:/usr/include/c++/15/bits/basic_string.tcc + mdp:/usr/include/c++/15/bits/char_traits.h + mdp:/usr/include/c++/15/bits/charconv.h + mdp:/usr/include/c++/15/bits/chrono.h + mdp:/usr/include/c++/15/bits/chrono_io.h + mdp:/usr/include/c++/15/bits/codecvt.h + mdp:/usr/include/c++/15/bits/concept_check.h + mdp:/usr/include/c++/15/bits/cpp_type_traits.h + mdp:/usr/include/c++/15/bits/cxxabi_forced.h + mdp:/usr/include/c++/15/bits/cxxabi_init_exception.h + mdp:/usr/include/c++/15/bits/enable_special_members.h + mdp:/usr/include/c++/15/bits/erase_if.h + mdp:/usr/include/c++/15/bits/exception.h + mdp:/usr/include/c++/15/bits/exception_defines.h + mdp:/usr/include/c++/15/bits/exception_ptr.h + mdp:/usr/include/c++/15/bits/forward_list.h + mdp:/usr/include/c++/15/bits/forward_list.tcc + mdp:/usr/include/c++/15/bits/functexcept.h + mdp:/usr/include/c++/15/bits/functional_hash.h + mdp:/usr/include/c++/15/bits/gslice.h + mdp:/usr/include/c++/15/bits/gslice_array.h + mdp:/usr/include/c++/15/bits/hash_bytes.h + mdp:/usr/include/c++/15/bits/hashtable.h + mdp:/usr/include/c++/15/bits/hashtable_policy.h + mdp:/usr/include/c++/15/bits/indirect_array.h + mdp:/usr/include/c++/15/bits/invoke.h + mdp:/usr/include/c++/15/bits/ios_base.h + mdp:/usr/include/c++/15/bits/istream.tcc + mdp:/usr/include/c++/15/bits/iterator_concepts.h + mdp:/usr/include/c++/15/bits/list.tcc + mdp:/usr/include/c++/15/bits/locale_classes.h + mdp:/usr/include/c++/15/bits/locale_classes.tcc + mdp:/usr/include/c++/15/bits/locale_conv.h + mdp:/usr/include/c++/15/bits/locale_facets.h + mdp:/usr/include/c++/15/bits/locale_facets.tcc + mdp:/usr/include/c++/15/bits/locale_facets_nonio.h + mdp:/usr/include/c++/15/bits/locale_facets_nonio.tcc + mdp:/usr/include/c++/15/bits/localefwd.h + mdp:/usr/include/c++/15/bits/mask_array.h + mdp:/usr/include/c++/15/bits/max_size_type.h + mdp:/usr/include/c++/15/bits/memory_resource.h + mdp:/usr/include/c++/15/bits/memoryfwd.h + mdp:/usr/include/c++/15/bits/move.h + mdp:/usr/include/c++/15/bits/nested_exception.h + mdp:/usr/include/c++/15/bits/new_allocator.h + mdp:/usr/include/c++/15/bits/node_handle.h + mdp:/usr/include/c++/15/bits/ostream.h + mdp:/usr/include/c++/15/bits/ostream.tcc + mdp:/usr/include/c++/15/bits/ostream_insert.h + mdp:/usr/include/c++/15/bits/parse_numbers.h + mdp:/usr/include/c++/15/bits/postypes.h + mdp:/usr/include/c++/15/bits/predefined_ops.h + mdp:/usr/include/c++/15/bits/ptr_traits.h + mdp:/usr/include/c++/15/bits/quoted_string.h + mdp:/usr/include/c++/15/bits/range_access.h + mdp:/usr/include/c++/15/bits/ranges_algo.h + mdp:/usr/include/c++/15/bits/ranges_algobase.h + mdp:/usr/include/c++/15/bits/ranges_base.h + mdp:/usr/include/c++/15/bits/ranges_cmp.h + mdp:/usr/include/c++/15/bits/ranges_uninitialized.h + mdp:/usr/include/c++/15/bits/ranges_util.h + mdp:/usr/include/c++/15/bits/refwrap.h + mdp:/usr/include/c++/15/bits/requires_hosted.h + mdp:/usr/include/c++/15/bits/semaphore_base.h + mdp:/usr/include/c++/15/bits/shared_ptr.h + mdp:/usr/include/c++/15/bits/shared_ptr_atomic.h + mdp:/usr/include/c++/15/bits/shared_ptr_base.h + mdp:/usr/include/c++/15/bits/slice_array.h + mdp:/usr/include/c++/15/bits/specfun.h + mdp:/usr/include/c++/15/bits/sstream.tcc + mdp:/usr/include/c++/15/bits/std_abs.h + mdp:/usr/include/c++/15/bits/std_function.h + mdp:/usr/include/c++/15/bits/std_mutex.h + mdp:/usr/include/c++/15/bits/std_thread.h + mdp:/usr/include/c++/15/bits/stl_algo.h + mdp:/usr/include/c++/15/bits/stl_algobase.h + mdp:/usr/include/c++/15/bits/stl_bvector.h + mdp:/usr/include/c++/15/bits/stl_construct.h + mdp:/usr/include/c++/15/bits/stl_function.h + mdp:/usr/include/c++/15/bits/stl_heap.h + mdp:/usr/include/c++/15/bits/stl_iterator.h + mdp:/usr/include/c++/15/bits/stl_iterator_base_funcs.h + mdp:/usr/include/c++/15/bits/stl_iterator_base_types.h + mdp:/usr/include/c++/15/bits/stl_list.h + mdp:/usr/include/c++/15/bits/stl_map.h + mdp:/usr/include/c++/15/bits/stl_multimap.h + mdp:/usr/include/c++/15/bits/stl_multiset.h + mdp:/usr/include/c++/15/bits/stl_numeric.h + mdp:/usr/include/c++/15/bits/stl_pair.h + mdp:/usr/include/c++/15/bits/stl_raw_storage_iter.h + mdp:/usr/include/c++/15/bits/stl_relops.h + mdp:/usr/include/c++/15/bits/stl_set.h + mdp:/usr/include/c++/15/bits/stl_tempbuf.h + mdp:/usr/include/c++/15/bits/stl_tree.h + mdp:/usr/include/c++/15/bits/stl_uninitialized.h + mdp:/usr/include/c++/15/bits/stl_vector.h + mdp:/usr/include/c++/15/bits/stream_iterator.h + mdp:/usr/include/c++/15/bits/streambuf.tcc + mdp:/usr/include/c++/15/bits/streambuf_iterator.h + mdp:/usr/include/c++/15/bits/string_view.tcc + mdp:/usr/include/c++/15/bits/stringfwd.h + mdp:/usr/include/c++/15/bits/this_thread_sleep.h + mdp:/usr/include/c++/15/bits/uniform_int_dist.h + mdp:/usr/include/c++/15/bits/unique_lock.h + mdp:/usr/include/c++/15/bits/unique_ptr.h + mdp:/usr/include/c++/15/bits/unordered_map.h + mdp:/usr/include/c++/15/bits/unordered_set.h + mdp:/usr/include/c++/15/bits/uses_allocator.h + mdp:/usr/include/c++/15/bits/uses_allocator_args.h + mdp:/usr/include/c++/15/bits/utility.h + mdp:/usr/include/c++/15/bits/valarray_after.h + mdp:/usr/include/c++/15/bits/valarray_array.h + mdp:/usr/include/c++/15/bits/valarray_array.tcc + mdp:/usr/include/c++/15/bits/valarray_before.h + mdp:/usr/include/c++/15/bits/vector.tcc + mdp:/usr/include/c++/15/bits/version.h + mdp:/usr/include/c++/15/cassert + mdp:/usr/include/c++/15/cctype + mdp:/usr/include/c++/15/cerrno + mdp:/usr/include/c++/15/charconv + mdp:/usr/include/c++/15/chrono + mdp:/usr/include/c++/15/climits + mdp:/usr/include/c++/15/clocale + mdp:/usr/include/c++/15/cmath + mdp:/usr/include/c++/15/compare + mdp:/usr/include/c++/15/concepts + mdp:/usr/include/c++/15/condition_variable + mdp:/usr/include/c++/15/cstddef + mdp:/usr/include/c++/15/cstdint + mdp:/usr/include/c++/15/cstdio + mdp:/usr/include/c++/15/cstdlib + mdp:/usr/include/c++/15/cstring + mdp:/usr/include/c++/15/ctime + mdp:/usr/include/c++/15/cwchar + mdp:/usr/include/c++/15/cwctype + mdp:/usr/include/c++/15/debug/assertions.h + mdp:/usr/include/c++/15/debug/debug.h + mdp:/usr/include/c++/15/exception + mdp:/usr/include/c++/15/ext/aligned_buffer.h + mdp:/usr/include/c++/15/ext/alloc_traits.h + mdp:/usr/include/c++/15/ext/atomicity.h + mdp:/usr/include/c++/15/ext/concurrence.h + mdp:/usr/include/c++/15/ext/numeric_traits.h + mdp:/usr/include/c++/15/ext/string_conversions.h + mdp:/usr/include/c++/15/ext/type_traits.h + mdp:/usr/include/c++/15/filesystem + mdp:/usr/include/c++/15/format + mdp:/usr/include/c++/15/forward_list + mdp:/usr/include/c++/15/functional + mdp:/usr/include/c++/15/future + mdp:/usr/include/c++/15/initializer_list + mdp:/usr/include/c++/15/iomanip + mdp:/usr/include/c++/15/ios + mdp:/usr/include/c++/15/iosfwd + mdp:/usr/include/c++/15/iostream + mdp:/usr/include/c++/15/istream + mdp:/usr/include/c++/15/iterator + mdp:/usr/include/c++/15/limits + mdp:/usr/include/c++/15/list + mdp:/usr/include/c++/15/locale + mdp:/usr/include/c++/15/map + mdp:/usr/include/c++/15/memory + mdp:/usr/include/c++/15/mutex + mdp:/usr/include/c++/15/new + mdp:/usr/include/c++/15/numeric + mdp:/usr/include/c++/15/optional + mdp:/usr/include/c++/15/ostream + mdp:/usr/include/c++/15/pstl/execution_defs.h + mdp:/usr/include/c++/15/pstl/glue_numeric_defs.h + mdp:/usr/include/c++/15/pstl/pstl_config.h + mdp:/usr/include/c++/15/ratio + mdp:/usr/include/c++/15/semaphore + mdp:/usr/include/c++/15/set + mdp:/usr/include/c++/15/sstream + mdp:/usr/include/c++/15/stdexcept + mdp:/usr/include/c++/15/stop_token + mdp:/usr/include/c++/15/streambuf + mdp:/usr/include/c++/15/string + mdp:/usr/include/c++/15/string_view + mdp:/usr/include/c++/15/system_error + mdp:/usr/include/c++/15/tr1/bessel_function.tcc + mdp:/usr/include/c++/15/tr1/beta_function.tcc + mdp:/usr/include/c++/15/tr1/ell_integral.tcc + mdp:/usr/include/c++/15/tr1/exp_integral.tcc + mdp:/usr/include/c++/15/tr1/gamma.tcc + mdp:/usr/include/c++/15/tr1/hypergeometric.tcc + mdp:/usr/include/c++/15/tr1/legendre_function.tcc + mdp:/usr/include/c++/15/tr1/modified_bessel_func.tcc + mdp:/usr/include/c++/15/tr1/poly_hermite.tcc + mdp:/usr/include/c++/15/tr1/poly_laguerre.tcc + mdp:/usr/include/c++/15/tr1/riemann_zeta.tcc + mdp:/usr/include/c++/15/tr1/special_function_util.h + mdp:/usr/include/c++/15/tuple + mdp:/usr/include/c++/15/type_traits + mdp:/usr/include/c++/15/typeinfo + mdp:/usr/include/c++/15/unordered_map + mdp:/usr/include/c++/15/unordered_set + mdp:/usr/include/c++/15/utility + mdp:/usr/include/c++/15/valarray + mdp:/usr/include/c++/15/variant + mdp:/usr/include/c++/15/vector + mdp:/usr/include/c++/15/version + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/atomic_word.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++allocator.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++config.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++locale.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/cpu_defines.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/ctype_base.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/ctype_inline.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/error_constants.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/gthr-default.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/gthr.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/messages_members.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/os_defines.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/time_members.h + mdp:/usr/include/ctype.h + mdp:/usr/include/endian.h + mdp:/usr/include/errno.h + mdp:/usr/include/features-time64.h + mdp:/usr/include/features.h + mdp:/usr/include/gnu/stubs-64.h + mdp:/usr/include/gnu/stubs.h + mdp:/usr/include/inttypes.h + mdp:/usr/include/libintl.h + mdp:/usr/include/limits.h + mdp:/usr/include/linux/close_range.h + mdp:/usr/include/linux/errno.h + mdp:/usr/include/linux/limits.h + mdp:/usr/include/linux/posix_types.h + mdp:/usr/include/linux/sched/types.h + mdp:/usr/include/linux/stddef.h + mdp:/usr/include/linux/types.h + mdp:/usr/include/locale.h + mdp:/usr/include/math.h + mdp:/usr/include/pthread.h + mdp:/usr/include/qt6/QtCore/QAbstractListModel + mdp:/usr/include/qt6/QtCore/QCache + mdp:/usr/include/qt6/QtCore/QDebug + mdp:/usr/include/qt6/QtCore/QDir + mdp:/usr/include/qt6/QtCore/QElapsedTimer + mdp:/usr/include/qt6/QtCore/QFileInfo + mdp:/usr/include/qt6/QtCore/QHash + mdp:/usr/include/qt6/QtCore/QHashFunctions + mdp:/usr/include/qt6/QtCore/QJsonArray + mdp:/usr/include/qt6/QtCore/QJsonObject + mdp:/usr/include/qt6/QtCore/QLineF + mdp:/usr/include/qt6/QtCore/QList + mdp:/usr/include/qt6/QtCore/QMap + mdp:/usr/include/qt6/QtCore/QMutex + mdp:/usr/include/qt6/QtCore/QObject + mdp:/usr/include/qt6/QtCore/QPoint + mdp:/usr/include/qt6/QtCore/QPointF + mdp:/usr/include/qt6/QtCore/QPointer + mdp:/usr/include/qt6/QtCore/QRect + mdp:/usr/include/qt6/QtCore/QRectF + mdp:/usr/include/qt6/QtCore/QRegularExpression + mdp:/usr/include/qt6/QtCore/QRunnable + mdp:/usr/include/qt6/QtCore/QSet + mdp:/usr/include/qt6/QtCore/QSharedPointer + mdp:/usr/include/qt6/QtCore/QSize + mdp:/usr/include/qt6/QtCore/QSizeF + mdp:/usr/include/qt6/QtCore/QString + mdp:/usr/include/qt6/QtCore/QStringList + mdp:/usr/include/qt6/QtCore/QThread + mdp:/usr/include/qt6/QtCore/QThreadPool + mdp:/usr/include/qt6/QtCore/QTimer + mdp:/usr/include/qt6/QtCore/QVector + mdp:/usr/include/qt6/QtCore/q17memory.h + mdp:/usr/include/qt6/QtCore/q20functional.h + mdp:/usr/include/qt6/QtCore/q20iterator.h + mdp:/usr/include/qt6/QtCore/q20memory.h + mdp:/usr/include/qt6/QtCore/q20type_traits.h + mdp:/usr/include/qt6/QtCore/q20utility.h + mdp:/usr/include/qt6/QtCore/q23type_traits.h + mdp:/usr/include/qt6/QtCore/q23utility.h + mdp:/usr/include/qt6/QtCore/qabstracteventdispatcher.h + mdp:/usr/include/qt6/QtCore/qabstractitemmodel.h + mdp:/usr/include/qt6/QtCore/qalgorithms.h + mdp:/usr/include/qt6/QtCore/qalloc.h + mdp:/usr/include/qt6/QtCore/qanystringview.h + mdp:/usr/include/qt6/QtCore/qarraydata.h + mdp:/usr/include/qt6/QtCore/qarraydataops.h + mdp:/usr/include/qt6/QtCore/qarraydatapointer.h + mdp:/usr/include/qt6/QtCore/qassert.h + mdp:/usr/include/qt6/QtCore/qatomic.h + mdp:/usr/include/qt6/QtCore/qatomic_cxx11.h + mdp:/usr/include/qt6/QtCore/qbasicatomic.h + mdp:/usr/include/qt6/QtCore/qbasictimer.h + mdp:/usr/include/qt6/QtCore/qbindingstorage.h + mdp:/usr/include/qt6/QtCore/qbytearray.h + mdp:/usr/include/qt6/QtCore/qbytearrayalgorithms.h + mdp:/usr/include/qt6/QtCore/qbytearraylist.h + mdp:/usr/include/qt6/QtCore/qbytearrayview.h + mdp:/usr/include/qt6/QtCore/qcache.h + mdp:/usr/include/qt6/QtCore/qcalendar.h + mdp:/usr/include/qt6/QtCore/qcborcommon.h + mdp:/usr/include/qt6/QtCore/qcborvalue.h + mdp:/usr/include/qt6/QtCore/qchar.h + mdp:/usr/include/qt6/QtCore/qcheckedint_impl.h + mdp:/usr/include/qt6/QtCore/qcompare.h + mdp:/usr/include/qt6/QtCore/qcompare_impl.h + mdp:/usr/include/qt6/QtCore/qcomparehelpers.h + mdp:/usr/include/qt6/QtCore/qcompilerdetection.h + mdp:/usr/include/qt6/QtCore/qconfig-64.h + mdp:/usr/include/qt6/QtCore/qconfig.h + mdp:/usr/include/qt6/QtCore/qconstructormacros.h + mdp:/usr/include/qt6/QtCore/qcontainerfwd.h + mdp:/usr/include/qt6/QtCore/qcontainerinfo.h + mdp:/usr/include/qt6/QtCore/qcontainertools_impl.h + mdp:/usr/include/qt6/QtCore/qcontiguouscache.h + mdp:/usr/include/qt6/QtCore/qcoreapplication.h + mdp:/usr/include/qt6/QtCore/qcoreapplication_platform.h + mdp:/usr/include/qt6/QtCore/qcoreevent.h + mdp:/usr/include/qt6/QtCore/qdarwinhelpers.h + mdp:/usr/include/qt6/QtCore/qdatastream.h + mdp:/usr/include/qt6/QtCore/qdatetime.h + mdp:/usr/include/qt6/QtCore/qdeadlinetimer.h + mdp:/usr/include/qt6/QtCore/qdebug.h + mdp:/usr/include/qt6/QtCore/qdir.h + mdp:/usr/include/qt6/QtCore/qdirlisting.h + mdp:/usr/include/qt6/QtCore/qelapsedtimer.h + mdp:/usr/include/qt6/QtCore/qendian.h + mdp:/usr/include/qt6/QtCore/qeventloop.h + mdp:/usr/include/qt6/QtCore/qexceptionhandling.h + mdp:/usr/include/qt6/QtCore/qfile.h + mdp:/usr/include/qt6/QtCore/qfiledevice.h + mdp:/usr/include/qt6/QtCore/qfileinfo.h + mdp:/usr/include/qt6/QtCore/qflags.h + mdp:/usr/include/qt6/QtCore/qfloat16.h + mdp:/usr/include/qt6/QtCore/qforeach.h + mdp:/usr/include/qt6/QtCore/qfunctionaltools_impl.h + mdp:/usr/include/qt6/QtCore/qfunctionpointer.h + mdp:/usr/include/qt6/QtCore/qgenericatomic.h + mdp:/usr/include/qt6/QtCore/qglobal.h + mdp:/usr/include/qt6/QtCore/qglobalstatic.h + mdp:/usr/include/qt6/QtCore/qhash.h + mdp:/usr/include/qt6/QtCore/qhashfunctions.h + mdp:/usr/include/qt6/QtCore/qiodevice.h + mdp:/usr/include/qt6/QtCore/qiodevicebase.h + mdp:/usr/include/qt6/QtCore/qitemselectionmodel.h + mdp:/usr/include/qt6/QtCore/qiterable.h + mdp:/usr/include/qt6/QtCore/qiterator.h + mdp:/usr/include/qt6/QtCore/qjsonarray.h + mdp:/usr/include/qt6/QtCore/qjsondocument.h + mdp:/usr/include/qt6/QtCore/qjsonobject.h + mdp:/usr/include/qt6/QtCore/qjsonparseerror.h + mdp:/usr/include/qt6/QtCore/qjsonvalue.h + mdp:/usr/include/qt6/QtCore/qlatin1stringview.h + mdp:/usr/include/qt6/QtCore/qline.h + mdp:/usr/include/qt6/QtCore/qlist.h + mdp:/usr/include/qt6/QtCore/qlocale.h + mdp:/usr/include/qt6/QtCore/qlogging.h + mdp:/usr/include/qt6/QtCore/qmalloc.h + mdp:/usr/include/qt6/QtCore/qmap.h + mdp:/usr/include/qt6/QtCore/qmargins.h + mdp:/usr/include/qt6/QtCore/qmath.h + mdp:/usr/include/qt6/QtCore/qmetacontainer.h + mdp:/usr/include/qt6/QtCore/qmetatype.h + mdp:/usr/include/qt6/QtCore/qminmax.h + mdp:/usr/include/qt6/QtCore/qmutex.h + mdp:/usr/include/qt6/QtCore/qnamespace.h + mdp:/usr/include/qt6/QtCore/qnativeinterface.h + mdp:/usr/include/qt6/QtCore/qnumeric.h + mdp:/usr/include/qt6/QtCore/qobject.h + mdp:/usr/include/qt6/QtCore/qobject_impl.h + mdp:/usr/include/qt6/QtCore/qobjectdefs.h + mdp:/usr/include/qt6/QtCore/qobjectdefs_impl.h + mdp:/usr/include/qt6/QtCore/qoverload.h + mdp:/usr/include/qt6/QtCore/qpair.h + mdp:/usr/include/qt6/QtCore/qpoint.h + mdp:/usr/include/qt6/QtCore/qpointer.h + mdp:/usr/include/qt6/QtCore/qprocessordetection.h + mdp:/usr/include/qt6/QtCore/qrect.h + mdp:/usr/include/qt6/QtCore/qrefcount.h + mdp:/usr/include/qt6/QtCore/qregularexpression.h + mdp:/usr/include/qt6/QtCore/qrunnable.h + mdp:/usr/include/qt6/QtCore/qscopedpointer.h + mdp:/usr/include/qt6/QtCore/qscopeguard.h + mdp:/usr/include/qt6/QtCore/qset.h + mdp:/usr/include/qt6/QtCore/qshareddata.h + mdp:/usr/include/qt6/QtCore/qshareddata_impl.h + mdp:/usr/include/qt6/QtCore/qsharedpointer.h + mdp:/usr/include/qt6/QtCore/qsharedpointer_impl.h + mdp:/usr/include/qt6/QtCore/qsize.h + mdp:/usr/include/qt6/QtCore/qspan.h + mdp:/usr/include/qt6/QtCore/qstdlibdetection.h + mdp:/usr/include/qt6/QtCore/qstring.h + mdp:/usr/include/qt6/QtCore/qstringalgorithms.h + mdp:/usr/include/qt6/QtCore/qstringbuilder.h + mdp:/usr/include/qt6/QtCore/qstringconverter.h + mdp:/usr/include/qt6/QtCore/qstringconverter_base.h + mdp:/usr/include/qt6/QtCore/qstringfwd.h + mdp:/usr/include/qt6/QtCore/qstringlist.h + mdp:/usr/include/qt6/QtCore/qstringmatcher.h + mdp:/usr/include/qt6/QtCore/qstringtokenizer.h + mdp:/usr/include/qt6/QtCore/qstringview.h + mdp:/usr/include/qt6/QtCore/qswap.h + mdp:/usr/include/qt6/QtCore/qsysinfo.h + mdp:/usr/include/qt6/QtCore/qsystemdetection.h + mdp:/usr/include/qt6/QtCore/qtaggedpointer.h + mdp:/usr/include/qt6/QtCore/qtclasshelpermacros.h + mdp:/usr/include/qt6/QtCore/qtconfiginclude.h + mdp:/usr/include/qt6/QtCore/qtconfigmacros.h + mdp:/usr/include/qt6/QtCore/qtcore-config.h + mdp:/usr/include/qt6/QtCore/qtcoreexports.h + mdp:/usr/include/qt6/QtCore/qtcoreglobal.h + mdp:/usr/include/qt6/QtCore/qtdeprecationdefinitions.h + mdp:/usr/include/qt6/QtCore/qtdeprecationmarkers.h + mdp:/usr/include/qt6/QtCore/qtenvironmentvariables.h + mdp:/usr/include/qt6/QtCore/qtextstream.h + mdp:/usr/include/qt6/QtCore/qtformat_impl.h + mdp:/usr/include/qt6/QtCore/qthread.h + mdp:/usr/include/qt6/QtCore/qthreadpool.h + mdp:/usr/include/qt6/QtCore/qtimer.h + mdp:/usr/include/qt6/QtCore/qtimezone.h + mdp:/usr/include/qt6/QtCore/qtmetamacros.h + mdp:/usr/include/qt6/QtCore/qtnoop.h + mdp:/usr/include/qt6/QtCore/qtpreprocessorsupport.h + mdp:/usr/include/qt6/QtCore/qtresource.h + mdp:/usr/include/qt6/QtCore/qtsan_impl.h + mdp:/usr/include/qt6/QtCore/qttranslation.h + mdp:/usr/include/qt6/QtCore/qttypetraits.h + mdp:/usr/include/qt6/QtCore/qtversion.h + mdp:/usr/include/qt6/QtCore/qtversionchecks.h + mdp:/usr/include/qt6/QtCore/qtypeinfo.h + mdp:/usr/include/qt6/QtCore/qtypes.h + mdp:/usr/include/qt6/QtCore/qurl.h + mdp:/usr/include/qt6/QtCore/qutf8stringview.h + mdp:/usr/include/qt6/QtCore/quuid.h + mdp:/usr/include/qt6/QtCore/qvariant.h + mdp:/usr/include/qt6/QtCore/qvarlengtharray.h + mdp:/usr/include/qt6/QtCore/qvector.h + mdp:/usr/include/qt6/QtCore/qversiontagging.h + mdp:/usr/include/qt6/QtCore/qxptype_traits.h + mdp:/usr/include/qt6/QtCore/qyieldcpu.h + mdp:/usr/include/qt6/QtGui/QColor + mdp:/usr/include/qt6/QtGui/QFont + mdp:/usr/include/qt6/QtGui/QIcon + mdp:/usr/include/qt6/QtGui/QImage + mdp:/usr/include/qt6/QtGui/QKeyEvent + mdp:/usr/include/qt6/QtGui/QPainter + mdp:/usr/include/qt6/QtGui/QPainterPath + mdp:/usr/include/qt6/QtGui/QStandardItemModel + mdp:/usr/include/qt6/QtGui/QSurfaceFormat + mdp:/usr/include/qt6/QtGui/QTransform + mdp:/usr/include/qt6/QtGui/QUndoStack + mdp:/usr/include/qt6/QtGui/qabstracttextdocumentlayout.h + mdp:/usr/include/qt6/QtGui/qaction.h + mdp:/usr/include/qt6/QtGui/qbitmap.h + mdp:/usr/include/qt6/QtGui/qbrush.h + mdp:/usr/include/qt6/QtGui/qclipboard.h + mdp:/usr/include/qt6/QtGui/qcolor.h + mdp:/usr/include/qt6/QtGui/qcursor.h + mdp:/usr/include/qt6/QtGui/qevent.h + mdp:/usr/include/qt6/QtGui/qeventpoint.h + mdp:/usr/include/qt6/QtGui/qfont.h + mdp:/usr/include/qt6/QtGui/qfontdatabase.h + mdp:/usr/include/qt6/QtGui/qfontinfo.h + mdp:/usr/include/qt6/QtGui/qfontmetrics.h + mdp:/usr/include/qt6/QtGui/qfontvariableaxis.h + mdp:/usr/include/qt6/QtGui/qglyphrun.h + mdp:/usr/include/qt6/QtGui/qguiapplication.h + mdp:/usr/include/qt6/QtGui/qguiapplication_platform.h + mdp:/usr/include/qt6/QtGui/qicon.h + mdp:/usr/include/qt6/QtGui/qimage.h + mdp:/usr/include/qt6/QtGui/qinputdevice.h + mdp:/usr/include/qt6/QtGui/qinputmethod.h + mdp:/usr/include/qt6/QtGui/qkeysequence.h + mdp:/usr/include/qt6/QtGui/qopengl.h + mdp:/usr/include/qt6/QtGui/qopenglcontext.h + mdp:/usr/include/qt6/QtGui/qopenglcontext_platform.h + mdp:/usr/include/qt6/QtGui/qopenglext.h + mdp:/usr/include/qt6/QtGui/qpaintdevice.h + mdp:/usr/include/qt6/QtGui/qpainter.h + mdp:/usr/include/qt6/QtGui/qpainterpath.h + mdp:/usr/include/qt6/QtGui/qpalette.h + mdp:/usr/include/qt6/QtGui/qpen.h + mdp:/usr/include/qt6/QtGui/qpicture.h + mdp:/usr/include/qt6/QtGui/qpixelformat.h + mdp:/usr/include/qt6/QtGui/qpixmap.h + mdp:/usr/include/qt6/QtGui/qpointingdevice.h + mdp:/usr/include/qt6/QtGui/qpolygon.h + mdp:/usr/include/qt6/QtGui/qrawfont.h + mdp:/usr/include/qt6/QtGui/qregion.h + mdp:/usr/include/qt6/QtGui/qrgb.h + mdp:/usr/include/qt6/QtGui/qrgba64.h + mdp:/usr/include/qt6/QtGui/qscreen.h + mdp:/usr/include/qt6/QtGui/qscreen_platform.h + mdp:/usr/include/qt6/QtGui/qstandarditemmodel.h + mdp:/usr/include/qt6/QtGui/qsurfaceformat.h + mdp:/usr/include/qt6/QtGui/qtextcursor.h + mdp:/usr/include/qt6/QtGui/qtextdocument.h + mdp:/usr/include/qt6/QtGui/qtextformat.h + mdp:/usr/include/qt6/QtGui/qtextlayout.h + mdp:/usr/include/qt6/QtGui/qtextoption.h + mdp:/usr/include/qt6/QtGui/qtgui-config.h + mdp:/usr/include/qt6/QtGui/qtguiexports.h + mdp:/usr/include/qt6/QtGui/qtguiglobal.h + mdp:/usr/include/qt6/QtGui/qtransform.h + mdp:/usr/include/qt6/QtGui/qundostack.h + mdp:/usr/include/qt6/QtGui/qvalidator.h + mdp:/usr/include/qt6/QtGui/qvector2d.h + mdp:/usr/include/qt6/QtGui/qvectornd.h + mdp:/usr/include/qt6/QtGui/qwindowdefs.h + mdp:/usr/include/qt6/QtOpenGL/QOpenGLFunctions_4_1_Core + mdp:/usr/include/qt6/QtOpenGL/QOpenGLVersionFunctions + mdp:/usr/include/qt6/QtOpenGL/QOpenGLVersionProfile + mdp:/usr/include/qt6/QtOpenGL/qopenglfunctions_4_1_core.h + mdp:/usr/include/qt6/QtOpenGL/qopenglversionfunctions.h + mdp:/usr/include/qt6/QtOpenGL/qopenglversionprofile.h + mdp:/usr/include/qt6/QtOpenGL/qtopenglexports.h + mdp:/usr/include/qt6/QtOpenGL/qtopenglglobal.h + mdp:/usr/include/qt6/QtOpenGLWidgets/QOpenGLWidget + mdp:/usr/include/qt6/QtOpenGLWidgets/qopenglwidget.h + mdp:/usr/include/qt6/QtOpenGLWidgets/qtopenglwidgetsexports.h + mdp:/usr/include/qt6/QtOpenGLWidgets/qtopenglwidgetsglobal.h + mdp:/usr/include/qt6/QtPdf/QPdfDocument + mdp:/usr/include/qt6/QtPdf/qpdfdocument.h + mdp:/usr/include/qt6/QtPdf/qpdfdocumentrenderoptions.h + mdp:/usr/include/qt6/QtPdf/qpdfselection.h + mdp:/usr/include/qt6/QtPdf/qtpdfexports.h + mdp:/usr/include/qt6/QtPdf/qtpdfglobal.h + mdp:/usr/include/qt6/QtPdfWidgets/QPdfView + mdp:/usr/include/qt6/QtPdfWidgets/qpdfview.h + mdp:/usr/include/qt6/QtPdfWidgets/qtpdfwidgetsglobal.h + mdp:/usr/include/qt6/QtSvg/qtsvgexports.h + mdp:/usr/include/qt6/QtSvg/qtsvgglobal.h + mdp:/usr/include/qt6/QtSvgWidgets/QGraphicsSvgItem + mdp:/usr/include/qt6/QtSvgWidgets/qgraphicssvgitem.h + mdp:/usr/include/qt6/QtSvgWidgets/qtsvgwidgetsexports.h + mdp:/usr/include/qt6/QtSvgWidgets/qtsvgwidgetsglobal.h + mdp:/usr/include/qt6/QtWidgets/QCheckBox + mdp:/usr/include/qt6/QtWidgets/QComboBox + mdp:/usr/include/qt6/QtWidgets/QGraphicsItem + mdp:/usr/include/qt6/QtWidgets/QGraphicsPixmapItem + mdp:/usr/include/qt6/QtWidgets/QGraphicsScene + mdp:/usr/include/qt6/QtWidgets/QGraphicsSceneMouseEvent + mdp:/usr/include/qt6/QtWidgets/QGraphicsView + mdp:/usr/include/qt6/QtWidgets/QLabel + mdp:/usr/include/qt6/QtWidgets/QPlainTextEdit + mdp:/usr/include/qt6/QtWidgets/QPushButton + mdp:/usr/include/qt6/QtWidgets/QSlider + mdp:/usr/include/qt6/QtWidgets/QStyleOptionSlider + mdp:/usr/include/qt6/QtWidgets/QTableView + mdp:/usr/include/qt6/QtWidgets/QVBoxLayout + mdp:/usr/include/qt6/QtWidgets/QWidget + mdp:/usr/include/qt6/QtWidgets/qabstractbutton.h + mdp:/usr/include/qt6/QtWidgets/qabstractitemdelegate.h + mdp:/usr/include/qt6/QtWidgets/qabstractitemview.h + mdp:/usr/include/qt6/QtWidgets/qabstractscrollarea.h + mdp:/usr/include/qt6/QtWidgets/qabstractslider.h + mdp:/usr/include/qt6/QtWidgets/qabstractspinbox.h + mdp:/usr/include/qt6/QtWidgets/qboxlayout.h + mdp:/usr/include/qt6/QtWidgets/qcheckbox.h + mdp:/usr/include/qt6/QtWidgets/qcombobox.h + mdp:/usr/include/qt6/QtWidgets/qframe.h + mdp:/usr/include/qt6/QtWidgets/qgraphicsitem.h + mdp:/usr/include/qt6/QtWidgets/qgraphicsscene.h + mdp:/usr/include/qt6/QtWidgets/qgraphicssceneevent.h + mdp:/usr/include/qt6/QtWidgets/qgraphicsview.h + mdp:/usr/include/qt6/QtWidgets/qgridlayout.h + mdp:/usr/include/qt6/QtWidgets/qlabel.h + mdp:/usr/include/qt6/QtWidgets/qlayout.h + mdp:/usr/include/qt6/QtWidgets/qlayoutitem.h + mdp:/usr/include/qt6/QtWidgets/qplaintextedit.h + mdp:/usr/include/qt6/QtWidgets/qpushbutton.h + mdp:/usr/include/qt6/QtWidgets/qrubberband.h + mdp:/usr/include/qt6/QtWidgets/qscrollarea.h + mdp:/usr/include/qt6/QtWidgets/qsizepolicy.h + mdp:/usr/include/qt6/QtWidgets/qslider.h + mdp:/usr/include/qt6/QtWidgets/qstyle.h + mdp:/usr/include/qt6/QtWidgets/qstyleoption.h + mdp:/usr/include/qt6/QtWidgets/qtabbar.h + mdp:/usr/include/qt6/QtWidgets/qtableview.h + mdp:/usr/include/qt6/QtWidgets/qtabwidget.h + mdp:/usr/include/qt6/QtWidgets/qtextedit.h + mdp:/usr/include/qt6/QtWidgets/qtwidgets-config.h + mdp:/usr/include/qt6/QtWidgets/qtwidgetsexports.h + mdp:/usr/include/qt6/QtWidgets/qtwidgetsglobal.h + mdp:/usr/include/qt6/QtWidgets/qwidget.h + mdp:/usr/include/sched.h + mdp:/usr/include/semaphore.h + mdp:/usr/include/stdc-predef.h + mdp:/usr/include/stdint.h + mdp:/usr/include/stdio.h + mdp:/usr/include/stdlib.h + mdp:/usr/include/string.h + mdp:/usr/include/strings.h + mdp:/usr/include/sys/cdefs.h + mdp:/usr/include/sys/select.h + mdp:/usr/include/sys/single_threaded.h + mdp:/usr/include/sys/syscall.h + mdp:/usr/include/sys/time.h + mdp:/usr/include/sys/types.h + mdp:/usr/include/syscall.h + mdp:/usr/include/time.h + mdp:/usr/include/unistd.h + mdp:/usr/include/wchar.h + mdp:/usr/include/wctype.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/adxintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/ammintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxavx512intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxbf16intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxcomplexintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxfp16intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxfp8intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxint8intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxmovrsintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxtf32intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxtileintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxtransposeintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2-512bf16intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2-512convertintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2-512mediaintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2-512minmaxintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2-512satcvtintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2bf16intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2convertintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2copyintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2mediaintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2minmaxintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2satcvtintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx2intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512bf16intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512bf16vlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512bitalgintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512bitalgvlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512bwintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512cdintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512dqintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512fintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512fp16intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512fp16vlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512ifmaintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512ifmavlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vbmi2intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vbmi2vlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vbmiintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vbmivlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vlbwintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vldqintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vnniintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vnnivlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vp2intersectintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vp2intersectvlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vpopcntdqintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vpopcntdqvlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avxifmaintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avxintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avxneconvertintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avxvnniint16intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avxvnniint8intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avxvnniintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/bmi2intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/bmiintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/cetintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/cldemoteintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/clflushoptintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/clwbintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/clzerointrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/cmpccxaddintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/emmintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/enqcmdintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/f16cintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/fma4intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/fmaintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/fxsrintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/gfniintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/hresetintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/ia32intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/immintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/keylockerintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/lwpintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/lzcntintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/mm3dnow.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/mm_malloc.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/mmintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/movdirintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/movrsintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/mwaitintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/mwaitxintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/pconfigintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/pkuintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/pmmintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/popcntintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/prfchiintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/prfchwintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/raointintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/rdseedintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/rtmintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/serializeintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/sgxintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/sha512intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/shaintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/sm3intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/sm4intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/smmintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stdarg.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stdbool.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stddef.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/tbmintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/tmmintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/tsxldtrkintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/uintrintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/usermsrintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/vaesintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/vpclmulqdqintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/waitpkgintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/wbnoinvdintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/wmmintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/x86gprintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/x86intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/xmmintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/xopintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/xsavecintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/xsaveintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/xsaveoptintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/xsavesintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/xtestintrin.h +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/office_preview.h +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/log_viewer_widget.h + mmc:Q_OBJECT + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/kassetmanagerqt_autogen/moc_predefs.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/log_viewer_widget.h + mdp:/usr/include/alloca.h + mdp:/usr/include/asm-generic/bitsperlong.h + mdp:/usr/include/asm-generic/errno-base.h + mdp:/usr/include/asm-generic/errno.h + mdp:/usr/include/asm-generic/int-ll64.h + mdp:/usr/include/asm-generic/posix_types.h + mdp:/usr/include/asm-generic/types.h + mdp:/usr/include/asm/bitsperlong.h + mdp:/usr/include/asm/errno.h + mdp:/usr/include/asm/posix_types.h + mdp:/usr/include/asm/posix_types_64.h + mdp:/usr/include/asm/types.h + mdp:/usr/include/asm/unistd.h + mdp:/usr/include/asm/unistd_64.h + mdp:/usr/include/assert.h + mdp:/usr/include/bits/atomic_wide_counter.h + mdp:/usr/include/bits/byteswap.h + mdp:/usr/include/bits/confname.h + mdp:/usr/include/bits/cpu-set.h + mdp:/usr/include/bits/endian.h + mdp:/usr/include/bits/endianness.h + mdp:/usr/include/bits/environments.h + mdp:/usr/include/bits/errno.h + mdp:/usr/include/bits/floatn-common.h + mdp:/usr/include/bits/floatn.h + mdp:/usr/include/bits/getopt_core.h + mdp:/usr/include/bits/getopt_posix.h + mdp:/usr/include/bits/libc-header-start.h + mdp:/usr/include/bits/local_lim.h + mdp:/usr/include/bits/locale.h + mdp:/usr/include/bits/long-double.h + mdp:/usr/include/bits/posix1_lim.h + mdp:/usr/include/bits/posix2_lim.h + mdp:/usr/include/bits/posix_opt.h + mdp:/usr/include/bits/pthread_stack_min-dynamic.h + mdp:/usr/include/bits/pthreadtypes-arch.h + mdp:/usr/include/bits/pthreadtypes.h + mdp:/usr/include/bits/sched.h + mdp:/usr/include/bits/select.h + mdp:/usr/include/bits/setjmp.h + mdp:/usr/include/bits/stdint-intn.h + mdp:/usr/include/bits/stdint-least.h + mdp:/usr/include/bits/stdint-uintn.h + mdp:/usr/include/bits/stdio_lim.h + mdp:/usr/include/bits/stdlib-float.h + mdp:/usr/include/bits/struct_mutex.h + mdp:/usr/include/bits/struct_rwlock.h + mdp:/usr/include/bits/syscall.h + mdp:/usr/include/bits/thread-shared-types.h + mdp:/usr/include/bits/time.h + mdp:/usr/include/bits/time64.h + mdp:/usr/include/bits/timesize.h + mdp:/usr/include/bits/timex.h + mdp:/usr/include/bits/types.h + mdp:/usr/include/bits/types/FILE.h + mdp:/usr/include/bits/types/__FILE.h + mdp:/usr/include/bits/types/__fpos64_t.h + mdp:/usr/include/bits/types/__fpos_t.h + mdp:/usr/include/bits/types/__locale_t.h + mdp:/usr/include/bits/types/__mbstate_t.h + mdp:/usr/include/bits/types/__sigset_t.h + mdp:/usr/include/bits/types/clock_t.h + mdp:/usr/include/bits/types/clockid_t.h + mdp:/usr/include/bits/types/cookie_io_functions_t.h + mdp:/usr/include/bits/types/error_t.h + mdp:/usr/include/bits/types/locale_t.h + mdp:/usr/include/bits/types/mbstate_t.h + mdp:/usr/include/bits/types/sigset_t.h + mdp:/usr/include/bits/types/struct_FILE.h + mdp:/usr/include/bits/types/struct___jmp_buf_tag.h + mdp:/usr/include/bits/types/struct_itimerspec.h + mdp:/usr/include/bits/types/struct_sched_param.h + mdp:/usr/include/bits/types/struct_timespec.h + mdp:/usr/include/bits/types/struct_timeval.h + mdp:/usr/include/bits/types/struct_tm.h + mdp:/usr/include/bits/types/time_t.h + mdp:/usr/include/bits/types/timer_t.h + mdp:/usr/include/bits/types/wint_t.h + mdp:/usr/include/bits/typesizes.h + mdp:/usr/include/bits/uintn-identity.h + mdp:/usr/include/bits/uio_lim.h + mdp:/usr/include/bits/unistd_ext.h + mdp:/usr/include/bits/waitflags.h + mdp:/usr/include/bits/waitstatus.h + mdp:/usr/include/bits/wchar.h + mdp:/usr/include/bits/wctype-wchar.h + mdp:/usr/include/bits/wordsize.h + mdp:/usr/include/bits/xopen_lim.h + mdp:/usr/include/c++/15/algorithm + mdp:/usr/include/c++/15/array + mdp:/usr/include/c++/15/atomic + mdp:/usr/include/c++/15/backward/auto_ptr.h + mdp:/usr/include/c++/15/backward/binders.h + mdp:/usr/include/c++/15/bit + mdp:/usr/include/c++/15/bits/algorithmfwd.h + mdp:/usr/include/c++/15/bits/align.h + mdp:/usr/include/c++/15/bits/alloc_traits.h + mdp:/usr/include/c++/15/bits/allocated_ptr.h + mdp:/usr/include/c++/15/bits/allocator.h + mdp:/usr/include/c++/15/bits/atomic_base.h + mdp:/usr/include/c++/15/bits/atomic_lockfree_defines.h + mdp:/usr/include/c++/15/bits/atomic_wait.h + mdp:/usr/include/c++/15/bits/basic_ios.h + mdp:/usr/include/c++/15/bits/basic_ios.tcc + mdp:/usr/include/c++/15/bits/basic_string.h + mdp:/usr/include/c++/15/bits/basic_string.tcc + mdp:/usr/include/c++/15/bits/char_traits.h + mdp:/usr/include/c++/15/bits/charconv.h + mdp:/usr/include/c++/15/bits/chrono.h + mdp:/usr/include/c++/15/bits/chrono_io.h + mdp:/usr/include/c++/15/bits/codecvt.h + mdp:/usr/include/c++/15/bits/concept_check.h + mdp:/usr/include/c++/15/bits/cpp_type_traits.h + mdp:/usr/include/c++/15/bits/cxxabi_forced.h + mdp:/usr/include/c++/15/bits/cxxabi_init_exception.h + mdp:/usr/include/c++/15/bits/enable_special_members.h + mdp:/usr/include/c++/15/bits/erase_if.h + mdp:/usr/include/c++/15/bits/exception.h + mdp:/usr/include/c++/15/bits/exception_defines.h + mdp:/usr/include/c++/15/bits/exception_ptr.h + mdp:/usr/include/c++/15/bits/functexcept.h + mdp:/usr/include/c++/15/bits/functional_hash.h + mdp:/usr/include/c++/15/bits/hash_bytes.h + mdp:/usr/include/c++/15/bits/hashtable.h + mdp:/usr/include/c++/15/bits/hashtable_policy.h + mdp:/usr/include/c++/15/bits/invoke.h + mdp:/usr/include/c++/15/bits/ios_base.h + mdp:/usr/include/c++/15/bits/istream.tcc + mdp:/usr/include/c++/15/bits/iterator_concepts.h + mdp:/usr/include/c++/15/bits/list.tcc + mdp:/usr/include/c++/15/bits/locale_classes.h + mdp:/usr/include/c++/15/bits/locale_classes.tcc + mdp:/usr/include/c++/15/bits/locale_conv.h + mdp:/usr/include/c++/15/bits/locale_facets.h + mdp:/usr/include/c++/15/bits/locale_facets.tcc + mdp:/usr/include/c++/15/bits/locale_facets_nonio.h + mdp:/usr/include/c++/15/bits/locale_facets_nonio.tcc + mdp:/usr/include/c++/15/bits/localefwd.h + mdp:/usr/include/c++/15/bits/max_size_type.h + mdp:/usr/include/c++/15/bits/memory_resource.h + mdp:/usr/include/c++/15/bits/memoryfwd.h + mdp:/usr/include/c++/15/bits/move.h + mdp:/usr/include/c++/15/bits/nested_exception.h + mdp:/usr/include/c++/15/bits/new_allocator.h + mdp:/usr/include/c++/15/bits/node_handle.h + mdp:/usr/include/c++/15/bits/ostream.h + mdp:/usr/include/c++/15/bits/ostream.tcc + mdp:/usr/include/c++/15/bits/ostream_insert.h + mdp:/usr/include/c++/15/bits/parse_numbers.h + mdp:/usr/include/c++/15/bits/postypes.h + mdp:/usr/include/c++/15/bits/predefined_ops.h + mdp:/usr/include/c++/15/bits/ptr_traits.h + mdp:/usr/include/c++/15/bits/quoted_string.h + mdp:/usr/include/c++/15/bits/range_access.h + mdp:/usr/include/c++/15/bits/ranges_algo.h + mdp:/usr/include/c++/15/bits/ranges_algobase.h + mdp:/usr/include/c++/15/bits/ranges_base.h + mdp:/usr/include/c++/15/bits/ranges_cmp.h + mdp:/usr/include/c++/15/bits/ranges_uninitialized.h + mdp:/usr/include/c++/15/bits/ranges_util.h + mdp:/usr/include/c++/15/bits/refwrap.h + mdp:/usr/include/c++/15/bits/requires_hosted.h + mdp:/usr/include/c++/15/bits/shared_ptr.h + mdp:/usr/include/c++/15/bits/shared_ptr_atomic.h + mdp:/usr/include/c++/15/bits/shared_ptr_base.h + mdp:/usr/include/c++/15/bits/specfun.h + mdp:/usr/include/c++/15/bits/sstream.tcc + mdp:/usr/include/c++/15/bits/std_abs.h + mdp:/usr/include/c++/15/bits/std_function.h + mdp:/usr/include/c++/15/bits/std_mutex.h + mdp:/usr/include/c++/15/bits/stl_algo.h + mdp:/usr/include/c++/15/bits/stl_algobase.h + mdp:/usr/include/c++/15/bits/stl_bvector.h + mdp:/usr/include/c++/15/bits/stl_construct.h + mdp:/usr/include/c++/15/bits/stl_function.h + mdp:/usr/include/c++/15/bits/stl_heap.h + mdp:/usr/include/c++/15/bits/stl_iterator.h + mdp:/usr/include/c++/15/bits/stl_iterator_base_funcs.h + mdp:/usr/include/c++/15/bits/stl_iterator_base_types.h + mdp:/usr/include/c++/15/bits/stl_list.h + mdp:/usr/include/c++/15/bits/stl_map.h + mdp:/usr/include/c++/15/bits/stl_multimap.h + mdp:/usr/include/c++/15/bits/stl_multiset.h + mdp:/usr/include/c++/15/bits/stl_numeric.h + mdp:/usr/include/c++/15/bits/stl_pair.h + mdp:/usr/include/c++/15/bits/stl_raw_storage_iter.h + mdp:/usr/include/c++/15/bits/stl_relops.h + mdp:/usr/include/c++/15/bits/stl_set.h + mdp:/usr/include/c++/15/bits/stl_tempbuf.h + mdp:/usr/include/c++/15/bits/stl_tree.h + mdp:/usr/include/c++/15/bits/stl_uninitialized.h + mdp:/usr/include/c++/15/bits/stl_vector.h + mdp:/usr/include/c++/15/bits/stream_iterator.h + mdp:/usr/include/c++/15/bits/streambuf.tcc + mdp:/usr/include/c++/15/bits/streambuf_iterator.h + mdp:/usr/include/c++/15/bits/string_view.tcc + mdp:/usr/include/c++/15/bits/stringfwd.h + mdp:/usr/include/c++/15/bits/uniform_int_dist.h + mdp:/usr/include/c++/15/bits/unique_ptr.h + mdp:/usr/include/c++/15/bits/unordered_map.h + mdp:/usr/include/c++/15/bits/unordered_set.h + mdp:/usr/include/c++/15/bits/uses_allocator.h + mdp:/usr/include/c++/15/bits/uses_allocator_args.h + mdp:/usr/include/c++/15/bits/utility.h + mdp:/usr/include/c++/15/bits/vector.tcc + mdp:/usr/include/c++/15/bits/version.h + mdp:/usr/include/c++/15/cassert + mdp:/usr/include/c++/15/cctype + mdp:/usr/include/c++/15/cerrno + mdp:/usr/include/c++/15/charconv + mdp:/usr/include/c++/15/chrono + mdp:/usr/include/c++/15/climits + mdp:/usr/include/c++/15/clocale + mdp:/usr/include/c++/15/cmath + mdp:/usr/include/c++/15/compare + mdp:/usr/include/c++/15/concepts + mdp:/usr/include/c++/15/cstddef + mdp:/usr/include/c++/15/cstdint + mdp:/usr/include/c++/15/cstdio + mdp:/usr/include/c++/15/cstdlib + mdp:/usr/include/c++/15/cstring + mdp:/usr/include/c++/15/ctime + mdp:/usr/include/c++/15/cwchar + mdp:/usr/include/c++/15/cwctype + mdp:/usr/include/c++/15/debug/assertions.h + mdp:/usr/include/c++/15/debug/debug.h + mdp:/usr/include/c++/15/exception + mdp:/usr/include/c++/15/ext/aligned_buffer.h + mdp:/usr/include/c++/15/ext/alloc_traits.h + mdp:/usr/include/c++/15/ext/atomicity.h + mdp:/usr/include/c++/15/ext/concurrence.h + mdp:/usr/include/c++/15/ext/numeric_traits.h + mdp:/usr/include/c++/15/ext/string_conversions.h + mdp:/usr/include/c++/15/ext/type_traits.h + mdp:/usr/include/c++/15/format + mdp:/usr/include/c++/15/functional + mdp:/usr/include/c++/15/initializer_list + mdp:/usr/include/c++/15/iomanip + mdp:/usr/include/c++/15/ios + mdp:/usr/include/c++/15/iosfwd + mdp:/usr/include/c++/15/istream + mdp:/usr/include/c++/15/iterator + mdp:/usr/include/c++/15/limits + mdp:/usr/include/c++/15/list + mdp:/usr/include/c++/15/locale + mdp:/usr/include/c++/15/map + mdp:/usr/include/c++/15/memory + mdp:/usr/include/c++/15/new + mdp:/usr/include/c++/15/numeric + mdp:/usr/include/c++/15/optional + mdp:/usr/include/c++/15/ostream + mdp:/usr/include/c++/15/pstl/execution_defs.h + mdp:/usr/include/c++/15/pstl/glue_numeric_defs.h + mdp:/usr/include/c++/15/pstl/pstl_config.h + mdp:/usr/include/c++/15/ratio + mdp:/usr/include/c++/15/set + mdp:/usr/include/c++/15/sstream + mdp:/usr/include/c++/15/stdexcept + mdp:/usr/include/c++/15/streambuf + mdp:/usr/include/c++/15/string + mdp:/usr/include/c++/15/string_view + mdp:/usr/include/c++/15/system_error + mdp:/usr/include/c++/15/tr1/bessel_function.tcc + mdp:/usr/include/c++/15/tr1/beta_function.tcc + mdp:/usr/include/c++/15/tr1/ell_integral.tcc + mdp:/usr/include/c++/15/tr1/exp_integral.tcc + mdp:/usr/include/c++/15/tr1/gamma.tcc + mdp:/usr/include/c++/15/tr1/hypergeometric.tcc + mdp:/usr/include/c++/15/tr1/legendre_function.tcc + mdp:/usr/include/c++/15/tr1/modified_bessel_func.tcc + mdp:/usr/include/c++/15/tr1/poly_hermite.tcc + mdp:/usr/include/c++/15/tr1/poly_laguerre.tcc + mdp:/usr/include/c++/15/tr1/riemann_zeta.tcc + mdp:/usr/include/c++/15/tr1/special_function_util.h + mdp:/usr/include/c++/15/tuple + mdp:/usr/include/c++/15/type_traits + mdp:/usr/include/c++/15/typeinfo + mdp:/usr/include/c++/15/unordered_map + mdp:/usr/include/c++/15/unordered_set + mdp:/usr/include/c++/15/utility + mdp:/usr/include/c++/15/variant + mdp:/usr/include/c++/15/vector + mdp:/usr/include/c++/15/version + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/atomic_word.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++allocator.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++config.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++locale.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/cpu_defines.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/ctype_base.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/ctype_inline.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/error_constants.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/gthr-default.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/gthr.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/messages_members.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/os_defines.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/time_members.h + mdp:/usr/include/ctype.h + mdp:/usr/include/endian.h + mdp:/usr/include/errno.h + mdp:/usr/include/features-time64.h + mdp:/usr/include/features.h + mdp:/usr/include/gnu/stubs-64.h + mdp:/usr/include/gnu/stubs.h + mdp:/usr/include/libintl.h + mdp:/usr/include/limits.h + mdp:/usr/include/linux/close_range.h + mdp:/usr/include/linux/errno.h + mdp:/usr/include/linux/limits.h + mdp:/usr/include/linux/posix_types.h + mdp:/usr/include/linux/sched/types.h + mdp:/usr/include/linux/stddef.h + mdp:/usr/include/linux/types.h + mdp:/usr/include/locale.h + mdp:/usr/include/pthread.h + mdp:/usr/include/qt6/QtCore/q17memory.h + mdp:/usr/include/qt6/QtCore/q20functional.h + mdp:/usr/include/qt6/QtCore/q20iterator.h + mdp:/usr/include/qt6/QtCore/q20memory.h + mdp:/usr/include/qt6/QtCore/q20type_traits.h + mdp:/usr/include/qt6/QtCore/q20utility.h + mdp:/usr/include/qt6/QtCore/q23type_traits.h + mdp:/usr/include/qt6/QtCore/q23utility.h + mdp:/usr/include/qt6/QtCore/qabstractitemmodel.h + mdp:/usr/include/qt6/QtCore/qalgorithms.h + mdp:/usr/include/qt6/QtCore/qalloc.h + mdp:/usr/include/qt6/QtCore/qanystringview.h + mdp:/usr/include/qt6/QtCore/qarraydata.h + mdp:/usr/include/qt6/QtCore/qarraydataops.h + mdp:/usr/include/qt6/QtCore/qarraydatapointer.h + mdp:/usr/include/qt6/QtCore/qassert.h + mdp:/usr/include/qt6/QtCore/qatomic.h + mdp:/usr/include/qt6/QtCore/qatomic_cxx11.h + mdp:/usr/include/qt6/QtCore/qbasicatomic.h + mdp:/usr/include/qt6/QtCore/qbindingstorage.h + mdp:/usr/include/qt6/QtCore/qbytearray.h + mdp:/usr/include/qt6/QtCore/qbytearrayalgorithms.h + mdp:/usr/include/qt6/QtCore/qbytearraylist.h + mdp:/usr/include/qt6/QtCore/qbytearrayview.h + mdp:/usr/include/qt6/QtCore/qchar.h + mdp:/usr/include/qt6/QtCore/qcheckedint_impl.h + mdp:/usr/include/qt6/QtCore/qcompare.h + mdp:/usr/include/qt6/QtCore/qcompare_impl.h + mdp:/usr/include/qt6/QtCore/qcomparehelpers.h + mdp:/usr/include/qt6/QtCore/qcompilerdetection.h + mdp:/usr/include/qt6/QtCore/qconfig-64.h + mdp:/usr/include/qt6/QtCore/qconfig.h + mdp:/usr/include/qt6/QtCore/qconstructormacros.h + mdp:/usr/include/qt6/QtCore/qcontainerfwd.h + mdp:/usr/include/qt6/QtCore/qcontainerinfo.h + mdp:/usr/include/qt6/QtCore/qcontainertools_impl.h + mdp:/usr/include/qt6/QtCore/qcontiguouscache.h + mdp:/usr/include/qt6/QtCore/qdarwinhelpers.h + mdp:/usr/include/qt6/QtCore/qdatastream.h + mdp:/usr/include/qt6/QtCore/qdebug.h + mdp:/usr/include/qt6/QtCore/qendian.h + mdp:/usr/include/qt6/QtCore/qexceptionhandling.h + mdp:/usr/include/qt6/QtCore/qflags.h + mdp:/usr/include/qt6/QtCore/qfloat16.h + mdp:/usr/include/qt6/QtCore/qforeach.h + mdp:/usr/include/qt6/QtCore/qfunctionaltools_impl.h + mdp:/usr/include/qt6/QtCore/qfunctionpointer.h + mdp:/usr/include/qt6/QtCore/qgenericatomic.h + mdp:/usr/include/qt6/QtCore/qglobal.h + mdp:/usr/include/qt6/QtCore/qglobalstatic.h + mdp:/usr/include/qt6/QtCore/qhash.h + mdp:/usr/include/qt6/QtCore/qhashfunctions.h + mdp:/usr/include/qt6/QtCore/qiodevice.h + mdp:/usr/include/qt6/QtCore/qiodevicebase.h + mdp:/usr/include/qt6/QtCore/qiterable.h + mdp:/usr/include/qt6/QtCore/qiterator.h + mdp:/usr/include/qt6/QtCore/qlatin1stringview.h + mdp:/usr/include/qt6/QtCore/qline.h + mdp:/usr/include/qt6/QtCore/qlist.h + mdp:/usr/include/qt6/QtCore/qlocale.h + mdp:/usr/include/qt6/QtCore/qlogging.h + mdp:/usr/include/qt6/QtCore/qmalloc.h + mdp:/usr/include/qt6/QtCore/qmap.h + mdp:/usr/include/qt6/QtCore/qmargins.h + mdp:/usr/include/qt6/QtCore/qmath.h + mdp:/usr/include/qt6/QtCore/qmetacontainer.h + mdp:/usr/include/qt6/QtCore/qmetatype.h + mdp:/usr/include/qt6/QtCore/qminmax.h + mdp:/usr/include/qt6/QtCore/qnamespace.h + mdp:/usr/include/qt6/QtCore/qnumeric.h + mdp:/usr/include/qt6/QtCore/qobject.h + mdp:/usr/include/qt6/QtCore/qobject_impl.h + mdp:/usr/include/qt6/QtCore/qobjectdefs.h + mdp:/usr/include/qt6/QtCore/qobjectdefs_impl.h + mdp:/usr/include/qt6/QtCore/qoverload.h + mdp:/usr/include/qt6/QtCore/qpair.h + mdp:/usr/include/qt6/QtCore/qpoint.h + mdp:/usr/include/qt6/QtCore/qprocessordetection.h + mdp:/usr/include/qt6/QtCore/qrect.h + mdp:/usr/include/qt6/QtCore/qrefcount.h + mdp:/usr/include/qt6/QtCore/qregularexpression.h + mdp:/usr/include/qt6/QtCore/qscopedpointer.h + mdp:/usr/include/qt6/QtCore/qscopeguard.h + mdp:/usr/include/qt6/QtCore/qset.h + mdp:/usr/include/qt6/QtCore/qshareddata.h + mdp:/usr/include/qt6/QtCore/qshareddata_impl.h + mdp:/usr/include/qt6/QtCore/qsharedpointer.h + mdp:/usr/include/qt6/QtCore/qsharedpointer_impl.h + mdp:/usr/include/qt6/QtCore/qsize.h + mdp:/usr/include/qt6/QtCore/qspan.h + mdp:/usr/include/qt6/QtCore/qstdlibdetection.h + mdp:/usr/include/qt6/QtCore/qstring.h + mdp:/usr/include/qt6/QtCore/qstringalgorithms.h + mdp:/usr/include/qt6/QtCore/qstringbuilder.h + mdp:/usr/include/qt6/QtCore/qstringconverter.h + mdp:/usr/include/qt6/QtCore/qstringconverter_base.h + mdp:/usr/include/qt6/QtCore/qstringfwd.h + mdp:/usr/include/qt6/QtCore/qstringlist.h + mdp:/usr/include/qt6/QtCore/qstringmatcher.h + mdp:/usr/include/qt6/QtCore/qstringtokenizer.h + mdp:/usr/include/qt6/QtCore/qstringview.h + mdp:/usr/include/qt6/QtCore/qswap.h + mdp:/usr/include/qt6/QtCore/qsysinfo.h + mdp:/usr/include/qt6/QtCore/qsystemdetection.h + mdp:/usr/include/qt6/QtCore/qtaggedpointer.h + mdp:/usr/include/qt6/QtCore/qtclasshelpermacros.h + mdp:/usr/include/qt6/QtCore/qtconfiginclude.h + mdp:/usr/include/qt6/QtCore/qtconfigmacros.h + mdp:/usr/include/qt6/QtCore/qtcore-config.h + mdp:/usr/include/qt6/QtCore/qtcoreexports.h + mdp:/usr/include/qt6/QtCore/qtcoreglobal.h + mdp:/usr/include/qt6/QtCore/qtdeprecationdefinitions.h + mdp:/usr/include/qt6/QtCore/qtdeprecationmarkers.h + mdp:/usr/include/qt6/QtCore/qtenvironmentvariables.h + mdp:/usr/include/qt6/QtCore/qtextstream.h + mdp:/usr/include/qt6/QtCore/qtformat_impl.h + mdp:/usr/include/qt6/QtCore/qtmetamacros.h + mdp:/usr/include/qt6/QtCore/qtnoop.h + mdp:/usr/include/qt6/QtCore/qtpreprocessorsupport.h + mdp:/usr/include/qt6/QtCore/qtresource.h + mdp:/usr/include/qt6/QtCore/qttranslation.h + mdp:/usr/include/qt6/QtCore/qttypetraits.h + mdp:/usr/include/qt6/QtCore/qtversion.h + mdp:/usr/include/qt6/QtCore/qtversionchecks.h + mdp:/usr/include/qt6/QtCore/qtypeinfo.h + mdp:/usr/include/qt6/QtCore/qtypes.h + mdp:/usr/include/qt6/QtCore/qurl.h + mdp:/usr/include/qt6/QtCore/qutf8stringview.h + mdp:/usr/include/qt6/QtCore/qvariant.h + mdp:/usr/include/qt6/QtCore/qvarlengtharray.h + mdp:/usr/include/qt6/QtCore/qversiontagging.h + mdp:/usr/include/qt6/QtCore/qxptype_traits.h + mdp:/usr/include/qt6/QtCore/qyieldcpu.h + mdp:/usr/include/qt6/QtGui/qaction.h + mdp:/usr/include/qt6/QtGui/qbitmap.h + mdp:/usr/include/qt6/QtGui/qbrush.h + mdp:/usr/include/qt6/QtGui/qcolor.h + mdp:/usr/include/qt6/QtGui/qcursor.h + mdp:/usr/include/qt6/QtGui/qfont.h + mdp:/usr/include/qt6/QtGui/qfontinfo.h + mdp:/usr/include/qt6/QtGui/qfontmetrics.h + mdp:/usr/include/qt6/QtGui/qfontvariableaxis.h + mdp:/usr/include/qt6/QtGui/qicon.h + mdp:/usr/include/qt6/QtGui/qimage.h + mdp:/usr/include/qt6/QtGui/qkeysequence.h + mdp:/usr/include/qt6/QtGui/qpaintdevice.h + mdp:/usr/include/qt6/QtGui/qpalette.h + mdp:/usr/include/qt6/QtGui/qpen.h + mdp:/usr/include/qt6/QtGui/qpicture.h + mdp:/usr/include/qt6/QtGui/qpixelformat.h + mdp:/usr/include/qt6/QtGui/qpixmap.h + mdp:/usr/include/qt6/QtGui/qpolygon.h + mdp:/usr/include/qt6/QtGui/qregion.h + mdp:/usr/include/qt6/QtGui/qrgb.h + mdp:/usr/include/qt6/QtGui/qrgba64.h + mdp:/usr/include/qt6/QtGui/qtextcursor.h + mdp:/usr/include/qt6/QtGui/qtextdocument.h + mdp:/usr/include/qt6/QtGui/qtextformat.h + mdp:/usr/include/qt6/QtGui/qtextoption.h + mdp:/usr/include/qt6/QtGui/qtgui-config.h + mdp:/usr/include/qt6/QtGui/qtguiexports.h + mdp:/usr/include/qt6/QtGui/qtguiglobal.h + mdp:/usr/include/qt6/QtGui/qtransform.h + mdp:/usr/include/qt6/QtGui/qvalidator.h + mdp:/usr/include/qt6/QtGui/qwindowdefs.h + mdp:/usr/include/qt6/QtWidgets/QComboBox + mdp:/usr/include/qt6/QtWidgets/QHBoxLayout + mdp:/usr/include/qt6/QtWidgets/QLabel + mdp:/usr/include/qt6/QtWidgets/QPushButton + mdp:/usr/include/qt6/QtWidgets/QTextEdit + mdp:/usr/include/qt6/QtWidgets/QVBoxLayout + mdp:/usr/include/qt6/QtWidgets/QWidget + mdp:/usr/include/qt6/QtWidgets/qabstractbutton.h + mdp:/usr/include/qt6/QtWidgets/qabstractitemdelegate.h + mdp:/usr/include/qt6/QtWidgets/qabstractscrollarea.h + mdp:/usr/include/qt6/QtWidgets/qabstractslider.h + mdp:/usr/include/qt6/QtWidgets/qabstractspinbox.h + mdp:/usr/include/qt6/QtWidgets/qboxlayout.h + mdp:/usr/include/qt6/QtWidgets/qcombobox.h + mdp:/usr/include/qt6/QtWidgets/qframe.h + mdp:/usr/include/qt6/QtWidgets/qgridlayout.h + mdp:/usr/include/qt6/QtWidgets/qlabel.h + mdp:/usr/include/qt6/QtWidgets/qlayout.h + mdp:/usr/include/qt6/QtWidgets/qlayoutitem.h + mdp:/usr/include/qt6/QtWidgets/qpushbutton.h + mdp:/usr/include/qt6/QtWidgets/qrubberband.h + mdp:/usr/include/qt6/QtWidgets/qsizepolicy.h + mdp:/usr/include/qt6/QtWidgets/qslider.h + mdp:/usr/include/qt6/QtWidgets/qstyle.h + mdp:/usr/include/qt6/QtWidgets/qstyleoption.h + mdp:/usr/include/qt6/QtWidgets/qtabbar.h + mdp:/usr/include/qt6/QtWidgets/qtabwidget.h + mdp:/usr/include/qt6/QtWidgets/qtextedit.h + mdp:/usr/include/qt6/QtWidgets/qtwidgets-config.h + mdp:/usr/include/qt6/QtWidgets/qtwidgetsexports.h + mdp:/usr/include/qt6/QtWidgets/qtwidgetsglobal.h + mdp:/usr/include/qt6/QtWidgets/qwidget.h + mdp:/usr/include/sched.h + mdp:/usr/include/stdc-predef.h + mdp:/usr/include/stdint.h + mdp:/usr/include/stdio.h + mdp:/usr/include/stdlib.h + mdp:/usr/include/string.h + mdp:/usr/include/strings.h + mdp:/usr/include/sys/cdefs.h + mdp:/usr/include/sys/select.h + mdp:/usr/include/sys/single_threaded.h + mdp:/usr/include/sys/syscall.h + mdp:/usr/include/sys/types.h + mdp:/usr/include/syscall.h + mdp:/usr/include/time.h + mdp:/usr/include/unistd.h + mdp:/usr/include/wchar.h + mdp:/usr/include/wctype.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stdarg.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stdbool.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stddef.h +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/asset_grid_view.h + mmc:Q_OBJECT + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/kassetmanagerqt_autogen/moc_predefs.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/asset_grid_view.h + mdp:/usr/include/alloca.h + mdp:/usr/include/asm-generic/bitsperlong.h + mdp:/usr/include/asm-generic/errno-base.h + mdp:/usr/include/asm-generic/errno.h + mdp:/usr/include/asm-generic/int-ll64.h + mdp:/usr/include/asm-generic/posix_types.h + mdp:/usr/include/asm-generic/types.h + mdp:/usr/include/asm/bitsperlong.h + mdp:/usr/include/asm/errno.h + mdp:/usr/include/asm/posix_types.h + mdp:/usr/include/asm/posix_types_64.h + mdp:/usr/include/asm/types.h + mdp:/usr/include/asm/unistd.h + mdp:/usr/include/asm/unistd_64.h + mdp:/usr/include/assert.h + mdp:/usr/include/bits/atomic_wide_counter.h + mdp:/usr/include/bits/byteswap.h + mdp:/usr/include/bits/confname.h + mdp:/usr/include/bits/cpu-set.h + mdp:/usr/include/bits/endian.h + mdp:/usr/include/bits/endianness.h + mdp:/usr/include/bits/environments.h + mdp:/usr/include/bits/errno.h + mdp:/usr/include/bits/floatn-common.h + mdp:/usr/include/bits/floatn.h + mdp:/usr/include/bits/getopt_core.h + mdp:/usr/include/bits/getopt_posix.h + mdp:/usr/include/bits/libc-header-start.h + mdp:/usr/include/bits/local_lim.h + mdp:/usr/include/bits/locale.h + mdp:/usr/include/bits/long-double.h + mdp:/usr/include/bits/posix1_lim.h + mdp:/usr/include/bits/posix2_lim.h + mdp:/usr/include/bits/posix_opt.h + mdp:/usr/include/bits/pthread_stack_min-dynamic.h + mdp:/usr/include/bits/pthreadtypes-arch.h + mdp:/usr/include/bits/pthreadtypes.h + mdp:/usr/include/bits/sched.h + mdp:/usr/include/bits/select.h + mdp:/usr/include/bits/setjmp.h + mdp:/usr/include/bits/stdint-intn.h + mdp:/usr/include/bits/stdint-least.h + mdp:/usr/include/bits/stdint-uintn.h + mdp:/usr/include/bits/stdio_lim.h + mdp:/usr/include/bits/stdlib-float.h + mdp:/usr/include/bits/struct_mutex.h + mdp:/usr/include/bits/struct_rwlock.h + mdp:/usr/include/bits/syscall.h + mdp:/usr/include/bits/thread-shared-types.h + mdp:/usr/include/bits/time.h + mdp:/usr/include/bits/time64.h + mdp:/usr/include/bits/timesize.h + mdp:/usr/include/bits/timex.h + mdp:/usr/include/bits/types.h + mdp:/usr/include/bits/types/FILE.h + mdp:/usr/include/bits/types/__FILE.h + mdp:/usr/include/bits/types/__fpos64_t.h + mdp:/usr/include/bits/types/__fpos_t.h + mdp:/usr/include/bits/types/__locale_t.h + mdp:/usr/include/bits/types/__mbstate_t.h + mdp:/usr/include/bits/types/__sigset_t.h + mdp:/usr/include/bits/types/clock_t.h + mdp:/usr/include/bits/types/clockid_t.h + mdp:/usr/include/bits/types/cookie_io_functions_t.h + mdp:/usr/include/bits/types/error_t.h + mdp:/usr/include/bits/types/locale_t.h + mdp:/usr/include/bits/types/mbstate_t.h + mdp:/usr/include/bits/types/sigset_t.h + mdp:/usr/include/bits/types/struct_FILE.h + mdp:/usr/include/bits/types/struct___jmp_buf_tag.h + mdp:/usr/include/bits/types/struct_itimerspec.h + mdp:/usr/include/bits/types/struct_sched_param.h + mdp:/usr/include/bits/types/struct_timespec.h + mdp:/usr/include/bits/types/struct_timeval.h + mdp:/usr/include/bits/types/struct_tm.h + mdp:/usr/include/bits/types/time_t.h + mdp:/usr/include/bits/types/timer_t.h + mdp:/usr/include/bits/types/wint_t.h + mdp:/usr/include/bits/typesizes.h + mdp:/usr/include/bits/uintn-identity.h + mdp:/usr/include/bits/uio_lim.h + mdp:/usr/include/bits/unistd_ext.h + mdp:/usr/include/bits/waitflags.h + mdp:/usr/include/bits/waitstatus.h + mdp:/usr/include/bits/wchar.h + mdp:/usr/include/bits/wctype-wchar.h + mdp:/usr/include/bits/wordsize.h + mdp:/usr/include/bits/xopen_lim.h + mdp:/usr/include/c++/15/algorithm + mdp:/usr/include/c++/15/array + mdp:/usr/include/c++/15/atomic + mdp:/usr/include/c++/15/backward/auto_ptr.h + mdp:/usr/include/c++/15/backward/binders.h + mdp:/usr/include/c++/15/bit + mdp:/usr/include/c++/15/bits/algorithmfwd.h + mdp:/usr/include/c++/15/bits/align.h + mdp:/usr/include/c++/15/bits/alloc_traits.h + mdp:/usr/include/c++/15/bits/allocated_ptr.h + mdp:/usr/include/c++/15/bits/allocator.h + mdp:/usr/include/c++/15/bits/atomic_base.h + mdp:/usr/include/c++/15/bits/atomic_lockfree_defines.h + mdp:/usr/include/c++/15/bits/atomic_wait.h + mdp:/usr/include/c++/15/bits/basic_ios.h + mdp:/usr/include/c++/15/bits/basic_ios.tcc + mdp:/usr/include/c++/15/bits/basic_string.h + mdp:/usr/include/c++/15/bits/basic_string.tcc + mdp:/usr/include/c++/15/bits/char_traits.h + mdp:/usr/include/c++/15/bits/charconv.h + mdp:/usr/include/c++/15/bits/chrono.h + mdp:/usr/include/c++/15/bits/chrono_io.h + mdp:/usr/include/c++/15/bits/codecvt.h + mdp:/usr/include/c++/15/bits/concept_check.h + mdp:/usr/include/c++/15/bits/cpp_type_traits.h + mdp:/usr/include/c++/15/bits/cxxabi_forced.h + mdp:/usr/include/c++/15/bits/cxxabi_init_exception.h + mdp:/usr/include/c++/15/bits/enable_special_members.h + mdp:/usr/include/c++/15/bits/erase_if.h + mdp:/usr/include/c++/15/bits/exception.h + mdp:/usr/include/c++/15/bits/exception_defines.h + mdp:/usr/include/c++/15/bits/exception_ptr.h + mdp:/usr/include/c++/15/bits/functexcept.h + mdp:/usr/include/c++/15/bits/functional_hash.h + mdp:/usr/include/c++/15/bits/hash_bytes.h + mdp:/usr/include/c++/15/bits/hashtable.h + mdp:/usr/include/c++/15/bits/hashtable_policy.h + mdp:/usr/include/c++/15/bits/invoke.h + mdp:/usr/include/c++/15/bits/ios_base.h + mdp:/usr/include/c++/15/bits/istream.tcc + mdp:/usr/include/c++/15/bits/iterator_concepts.h + mdp:/usr/include/c++/15/bits/list.tcc + mdp:/usr/include/c++/15/bits/locale_classes.h + mdp:/usr/include/c++/15/bits/locale_classes.tcc + mdp:/usr/include/c++/15/bits/locale_conv.h + mdp:/usr/include/c++/15/bits/locale_facets.h + mdp:/usr/include/c++/15/bits/locale_facets.tcc + mdp:/usr/include/c++/15/bits/locale_facets_nonio.h + mdp:/usr/include/c++/15/bits/locale_facets_nonio.tcc + mdp:/usr/include/c++/15/bits/localefwd.h + mdp:/usr/include/c++/15/bits/max_size_type.h + mdp:/usr/include/c++/15/bits/memory_resource.h + mdp:/usr/include/c++/15/bits/memoryfwd.h + mdp:/usr/include/c++/15/bits/move.h + mdp:/usr/include/c++/15/bits/nested_exception.h + mdp:/usr/include/c++/15/bits/new_allocator.h + mdp:/usr/include/c++/15/bits/node_handle.h + mdp:/usr/include/c++/15/bits/ostream.h + mdp:/usr/include/c++/15/bits/ostream.tcc + mdp:/usr/include/c++/15/bits/ostream_insert.h + mdp:/usr/include/c++/15/bits/parse_numbers.h + mdp:/usr/include/c++/15/bits/postypes.h + mdp:/usr/include/c++/15/bits/predefined_ops.h + mdp:/usr/include/c++/15/bits/ptr_traits.h + mdp:/usr/include/c++/15/bits/quoted_string.h + mdp:/usr/include/c++/15/bits/range_access.h + mdp:/usr/include/c++/15/bits/ranges_algo.h + mdp:/usr/include/c++/15/bits/ranges_algobase.h + mdp:/usr/include/c++/15/bits/ranges_base.h + mdp:/usr/include/c++/15/bits/ranges_cmp.h + mdp:/usr/include/c++/15/bits/ranges_uninitialized.h + mdp:/usr/include/c++/15/bits/ranges_util.h + mdp:/usr/include/c++/15/bits/refwrap.h + mdp:/usr/include/c++/15/bits/requires_hosted.h + mdp:/usr/include/c++/15/bits/shared_ptr.h + mdp:/usr/include/c++/15/bits/shared_ptr_atomic.h + mdp:/usr/include/c++/15/bits/shared_ptr_base.h + mdp:/usr/include/c++/15/bits/specfun.h + mdp:/usr/include/c++/15/bits/sstream.tcc + mdp:/usr/include/c++/15/bits/std_abs.h + mdp:/usr/include/c++/15/bits/std_function.h + mdp:/usr/include/c++/15/bits/std_mutex.h + mdp:/usr/include/c++/15/bits/stl_algo.h + mdp:/usr/include/c++/15/bits/stl_algobase.h + mdp:/usr/include/c++/15/bits/stl_bvector.h + mdp:/usr/include/c++/15/bits/stl_construct.h + mdp:/usr/include/c++/15/bits/stl_function.h + mdp:/usr/include/c++/15/bits/stl_heap.h + mdp:/usr/include/c++/15/bits/stl_iterator.h + mdp:/usr/include/c++/15/bits/stl_iterator_base_funcs.h + mdp:/usr/include/c++/15/bits/stl_iterator_base_types.h + mdp:/usr/include/c++/15/bits/stl_list.h + mdp:/usr/include/c++/15/bits/stl_map.h + mdp:/usr/include/c++/15/bits/stl_multimap.h + mdp:/usr/include/c++/15/bits/stl_multiset.h + mdp:/usr/include/c++/15/bits/stl_numeric.h + mdp:/usr/include/c++/15/bits/stl_pair.h + mdp:/usr/include/c++/15/bits/stl_raw_storage_iter.h + mdp:/usr/include/c++/15/bits/stl_relops.h + mdp:/usr/include/c++/15/bits/stl_set.h + mdp:/usr/include/c++/15/bits/stl_tempbuf.h + mdp:/usr/include/c++/15/bits/stl_tree.h + mdp:/usr/include/c++/15/bits/stl_uninitialized.h + mdp:/usr/include/c++/15/bits/stl_vector.h + mdp:/usr/include/c++/15/bits/stream_iterator.h + mdp:/usr/include/c++/15/bits/streambuf.tcc + mdp:/usr/include/c++/15/bits/streambuf_iterator.h + mdp:/usr/include/c++/15/bits/string_view.tcc + mdp:/usr/include/c++/15/bits/stringfwd.h + mdp:/usr/include/c++/15/bits/uniform_int_dist.h + mdp:/usr/include/c++/15/bits/unique_ptr.h + mdp:/usr/include/c++/15/bits/unordered_map.h + mdp:/usr/include/c++/15/bits/unordered_set.h + mdp:/usr/include/c++/15/bits/uses_allocator.h + mdp:/usr/include/c++/15/bits/uses_allocator_args.h + mdp:/usr/include/c++/15/bits/utility.h + mdp:/usr/include/c++/15/bits/vector.tcc + mdp:/usr/include/c++/15/bits/version.h + mdp:/usr/include/c++/15/cassert + mdp:/usr/include/c++/15/cctype + mdp:/usr/include/c++/15/cerrno + mdp:/usr/include/c++/15/charconv + mdp:/usr/include/c++/15/chrono + mdp:/usr/include/c++/15/climits + mdp:/usr/include/c++/15/clocale + mdp:/usr/include/c++/15/cmath + mdp:/usr/include/c++/15/compare + mdp:/usr/include/c++/15/concepts + mdp:/usr/include/c++/15/cstddef + mdp:/usr/include/c++/15/cstdint + mdp:/usr/include/c++/15/cstdio + mdp:/usr/include/c++/15/cstdlib + mdp:/usr/include/c++/15/cstring + mdp:/usr/include/c++/15/ctime + mdp:/usr/include/c++/15/cwchar + mdp:/usr/include/c++/15/cwctype + mdp:/usr/include/c++/15/debug/assertions.h + mdp:/usr/include/c++/15/debug/debug.h + mdp:/usr/include/c++/15/exception + mdp:/usr/include/c++/15/ext/aligned_buffer.h + mdp:/usr/include/c++/15/ext/alloc_traits.h + mdp:/usr/include/c++/15/ext/atomicity.h + mdp:/usr/include/c++/15/ext/concurrence.h + mdp:/usr/include/c++/15/ext/numeric_traits.h + mdp:/usr/include/c++/15/ext/string_conversions.h + mdp:/usr/include/c++/15/ext/type_traits.h + mdp:/usr/include/c++/15/format + mdp:/usr/include/c++/15/functional + mdp:/usr/include/c++/15/initializer_list + mdp:/usr/include/c++/15/iomanip + mdp:/usr/include/c++/15/ios + mdp:/usr/include/c++/15/iosfwd + mdp:/usr/include/c++/15/istream + mdp:/usr/include/c++/15/iterator + mdp:/usr/include/c++/15/limits + mdp:/usr/include/c++/15/list + mdp:/usr/include/c++/15/locale + mdp:/usr/include/c++/15/map + mdp:/usr/include/c++/15/memory + mdp:/usr/include/c++/15/new + mdp:/usr/include/c++/15/numeric + mdp:/usr/include/c++/15/optional + mdp:/usr/include/c++/15/ostream + mdp:/usr/include/c++/15/pstl/execution_defs.h + mdp:/usr/include/c++/15/pstl/glue_numeric_defs.h + mdp:/usr/include/c++/15/pstl/pstl_config.h + mdp:/usr/include/c++/15/ratio + mdp:/usr/include/c++/15/set + mdp:/usr/include/c++/15/sstream + mdp:/usr/include/c++/15/stdexcept + mdp:/usr/include/c++/15/streambuf + mdp:/usr/include/c++/15/string + mdp:/usr/include/c++/15/string_view + mdp:/usr/include/c++/15/system_error + mdp:/usr/include/c++/15/tr1/bessel_function.tcc + mdp:/usr/include/c++/15/tr1/beta_function.tcc + mdp:/usr/include/c++/15/tr1/ell_integral.tcc + mdp:/usr/include/c++/15/tr1/exp_integral.tcc + mdp:/usr/include/c++/15/tr1/gamma.tcc + mdp:/usr/include/c++/15/tr1/hypergeometric.tcc + mdp:/usr/include/c++/15/tr1/legendre_function.tcc + mdp:/usr/include/c++/15/tr1/modified_bessel_func.tcc + mdp:/usr/include/c++/15/tr1/poly_hermite.tcc + mdp:/usr/include/c++/15/tr1/poly_laguerre.tcc + mdp:/usr/include/c++/15/tr1/riemann_zeta.tcc + mdp:/usr/include/c++/15/tr1/special_function_util.h + mdp:/usr/include/c++/15/tuple + mdp:/usr/include/c++/15/type_traits + mdp:/usr/include/c++/15/typeinfo + mdp:/usr/include/c++/15/unordered_map + mdp:/usr/include/c++/15/unordered_set + mdp:/usr/include/c++/15/utility + mdp:/usr/include/c++/15/variant + mdp:/usr/include/c++/15/vector + mdp:/usr/include/c++/15/version + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/atomic_word.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++allocator.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++config.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++locale.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/cpu_defines.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/ctype_base.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/ctype_inline.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/error_constants.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/gthr-default.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/gthr.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/messages_members.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/os_defines.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/time_members.h + mdp:/usr/include/ctype.h + mdp:/usr/include/endian.h + mdp:/usr/include/errno.h + mdp:/usr/include/features-time64.h + mdp:/usr/include/features.h + mdp:/usr/include/gnu/stubs-64.h + mdp:/usr/include/gnu/stubs.h + mdp:/usr/include/libintl.h + mdp:/usr/include/limits.h + mdp:/usr/include/linux/close_range.h + mdp:/usr/include/linux/errno.h + mdp:/usr/include/linux/limits.h + mdp:/usr/include/linux/posix_types.h + mdp:/usr/include/linux/sched/types.h + mdp:/usr/include/linux/stddef.h + mdp:/usr/include/linux/types.h + mdp:/usr/include/locale.h + mdp:/usr/include/pthread.h + mdp:/usr/include/qt6/QtCore/q17memory.h + mdp:/usr/include/qt6/QtCore/q20functional.h + mdp:/usr/include/qt6/QtCore/q20iterator.h + mdp:/usr/include/qt6/QtCore/q20memory.h + mdp:/usr/include/qt6/QtCore/q20type_traits.h + mdp:/usr/include/qt6/QtCore/q20utility.h + mdp:/usr/include/qt6/QtCore/q23type_traits.h + mdp:/usr/include/qt6/QtCore/q23utility.h + mdp:/usr/include/qt6/QtCore/qabstractitemmodel.h + mdp:/usr/include/qt6/QtCore/qalgorithms.h + mdp:/usr/include/qt6/QtCore/qalloc.h + mdp:/usr/include/qt6/QtCore/qanystringview.h + mdp:/usr/include/qt6/QtCore/qarraydata.h + mdp:/usr/include/qt6/QtCore/qarraydataops.h + mdp:/usr/include/qt6/QtCore/qarraydatapointer.h + mdp:/usr/include/qt6/QtCore/qassert.h + mdp:/usr/include/qt6/QtCore/qatomic.h + mdp:/usr/include/qt6/QtCore/qatomic_cxx11.h + mdp:/usr/include/qt6/QtCore/qbasicatomic.h + mdp:/usr/include/qt6/QtCore/qbindingstorage.h + mdp:/usr/include/qt6/QtCore/qbytearray.h + mdp:/usr/include/qt6/QtCore/qbytearrayalgorithms.h + mdp:/usr/include/qt6/QtCore/qbytearraylist.h + mdp:/usr/include/qt6/QtCore/qbytearrayview.h + mdp:/usr/include/qt6/QtCore/qchar.h + mdp:/usr/include/qt6/QtCore/qcheckedint_impl.h + mdp:/usr/include/qt6/QtCore/qcompare.h + mdp:/usr/include/qt6/QtCore/qcompare_impl.h + mdp:/usr/include/qt6/QtCore/qcomparehelpers.h + mdp:/usr/include/qt6/QtCore/qcompilerdetection.h + mdp:/usr/include/qt6/QtCore/qconfig-64.h + mdp:/usr/include/qt6/QtCore/qconfig.h + mdp:/usr/include/qt6/QtCore/qconstructormacros.h + mdp:/usr/include/qt6/QtCore/qcontainerfwd.h + mdp:/usr/include/qt6/QtCore/qcontainerinfo.h + mdp:/usr/include/qt6/QtCore/qcontainertools_impl.h + mdp:/usr/include/qt6/QtCore/qcontiguouscache.h + mdp:/usr/include/qt6/QtCore/qdarwinhelpers.h + mdp:/usr/include/qt6/QtCore/qdatastream.h + mdp:/usr/include/qt6/QtCore/qdebug.h + mdp:/usr/include/qt6/QtCore/qendian.h + mdp:/usr/include/qt6/QtCore/qexceptionhandling.h + mdp:/usr/include/qt6/QtCore/qflags.h + mdp:/usr/include/qt6/QtCore/qfloat16.h + mdp:/usr/include/qt6/QtCore/qforeach.h + mdp:/usr/include/qt6/QtCore/qfunctionaltools_impl.h + mdp:/usr/include/qt6/QtCore/qfunctionpointer.h + mdp:/usr/include/qt6/QtCore/qgenericatomic.h + mdp:/usr/include/qt6/QtCore/qglobal.h + mdp:/usr/include/qt6/QtCore/qglobalstatic.h + mdp:/usr/include/qt6/QtCore/qhash.h + mdp:/usr/include/qt6/QtCore/qhashfunctions.h + mdp:/usr/include/qt6/QtCore/qiodevicebase.h + mdp:/usr/include/qt6/QtCore/qitemselectionmodel.h + mdp:/usr/include/qt6/QtCore/qiterable.h + mdp:/usr/include/qt6/QtCore/qiterator.h + mdp:/usr/include/qt6/QtCore/qlatin1stringview.h + mdp:/usr/include/qt6/QtCore/qline.h + mdp:/usr/include/qt6/QtCore/qlist.h + mdp:/usr/include/qt6/QtCore/qlocale.h + mdp:/usr/include/qt6/QtCore/qlogging.h + mdp:/usr/include/qt6/QtCore/qmalloc.h + mdp:/usr/include/qt6/QtCore/qmap.h + mdp:/usr/include/qt6/QtCore/qmargins.h + mdp:/usr/include/qt6/QtCore/qmath.h + mdp:/usr/include/qt6/QtCore/qmetacontainer.h + mdp:/usr/include/qt6/QtCore/qmetatype.h + mdp:/usr/include/qt6/QtCore/qminmax.h + mdp:/usr/include/qt6/QtCore/qnamespace.h + mdp:/usr/include/qt6/QtCore/qnumeric.h + mdp:/usr/include/qt6/QtCore/qobject.h + mdp:/usr/include/qt6/QtCore/qobject_impl.h + mdp:/usr/include/qt6/QtCore/qobjectdefs.h + mdp:/usr/include/qt6/QtCore/qobjectdefs_impl.h + mdp:/usr/include/qt6/QtCore/qoverload.h + mdp:/usr/include/qt6/QtCore/qpair.h + mdp:/usr/include/qt6/QtCore/qpoint.h + mdp:/usr/include/qt6/QtCore/qprocessordetection.h + mdp:/usr/include/qt6/QtCore/qrect.h + mdp:/usr/include/qt6/QtCore/qrefcount.h + mdp:/usr/include/qt6/QtCore/qregularexpression.h + mdp:/usr/include/qt6/QtCore/qscopedpointer.h + mdp:/usr/include/qt6/QtCore/qscopeguard.h + mdp:/usr/include/qt6/QtCore/qset.h + mdp:/usr/include/qt6/QtCore/qshareddata.h + mdp:/usr/include/qt6/QtCore/qshareddata_impl.h + mdp:/usr/include/qt6/QtCore/qsharedpointer.h + mdp:/usr/include/qt6/QtCore/qsharedpointer_impl.h + mdp:/usr/include/qt6/QtCore/qsize.h + mdp:/usr/include/qt6/QtCore/qspan.h + mdp:/usr/include/qt6/QtCore/qstdlibdetection.h + mdp:/usr/include/qt6/QtCore/qstring.h + mdp:/usr/include/qt6/QtCore/qstringalgorithms.h + mdp:/usr/include/qt6/QtCore/qstringbuilder.h + mdp:/usr/include/qt6/QtCore/qstringconverter.h + mdp:/usr/include/qt6/QtCore/qstringconverter_base.h + mdp:/usr/include/qt6/QtCore/qstringfwd.h + mdp:/usr/include/qt6/QtCore/qstringlist.h + mdp:/usr/include/qt6/QtCore/qstringmatcher.h + mdp:/usr/include/qt6/QtCore/qstringtokenizer.h + mdp:/usr/include/qt6/QtCore/qstringview.h + mdp:/usr/include/qt6/QtCore/qswap.h + mdp:/usr/include/qt6/QtCore/qsysinfo.h + mdp:/usr/include/qt6/QtCore/qsystemdetection.h + mdp:/usr/include/qt6/QtCore/qtaggedpointer.h + mdp:/usr/include/qt6/QtCore/qtclasshelpermacros.h + mdp:/usr/include/qt6/QtCore/qtconfiginclude.h + mdp:/usr/include/qt6/QtCore/qtconfigmacros.h + mdp:/usr/include/qt6/QtCore/qtcore-config.h + mdp:/usr/include/qt6/QtCore/qtcoreexports.h + mdp:/usr/include/qt6/QtCore/qtcoreglobal.h + mdp:/usr/include/qt6/QtCore/qtdeprecationdefinitions.h + mdp:/usr/include/qt6/QtCore/qtdeprecationmarkers.h + mdp:/usr/include/qt6/QtCore/qtenvironmentvariables.h + mdp:/usr/include/qt6/QtCore/qtextstream.h + mdp:/usr/include/qt6/QtCore/qtformat_impl.h + mdp:/usr/include/qt6/QtCore/qtmetamacros.h + mdp:/usr/include/qt6/QtCore/qtnoop.h + mdp:/usr/include/qt6/QtCore/qtpreprocessorsupport.h + mdp:/usr/include/qt6/QtCore/qtresource.h + mdp:/usr/include/qt6/QtCore/qttranslation.h + mdp:/usr/include/qt6/QtCore/qttypetraits.h + mdp:/usr/include/qt6/QtCore/qtversion.h + mdp:/usr/include/qt6/QtCore/qtversionchecks.h + mdp:/usr/include/qt6/QtCore/qtypeinfo.h + mdp:/usr/include/qt6/QtCore/qtypes.h + mdp:/usr/include/qt6/QtCore/qutf8stringview.h + mdp:/usr/include/qt6/QtCore/qvariant.h + mdp:/usr/include/qt6/QtCore/qvarlengtharray.h + mdp:/usr/include/qt6/QtCore/qversiontagging.h + mdp:/usr/include/qt6/QtCore/qxptype_traits.h + mdp:/usr/include/qt6/QtCore/qyieldcpu.h + mdp:/usr/include/qt6/QtGui/qaction.h + mdp:/usr/include/qt6/QtGui/qbitmap.h + mdp:/usr/include/qt6/QtGui/qbrush.h + mdp:/usr/include/qt6/QtGui/qcolor.h + mdp:/usr/include/qt6/QtGui/qcursor.h + mdp:/usr/include/qt6/QtGui/qfont.h + mdp:/usr/include/qt6/QtGui/qfontinfo.h + mdp:/usr/include/qt6/QtGui/qfontmetrics.h + mdp:/usr/include/qt6/QtGui/qfontvariableaxis.h + mdp:/usr/include/qt6/QtGui/qicon.h + mdp:/usr/include/qt6/QtGui/qimage.h + mdp:/usr/include/qt6/QtGui/qkeysequence.h + mdp:/usr/include/qt6/QtGui/qpaintdevice.h + mdp:/usr/include/qt6/QtGui/qpalette.h + mdp:/usr/include/qt6/QtGui/qpixelformat.h + mdp:/usr/include/qt6/QtGui/qpixmap.h + mdp:/usr/include/qt6/QtGui/qpolygon.h + mdp:/usr/include/qt6/QtGui/qregion.h + mdp:/usr/include/qt6/QtGui/qrgb.h + mdp:/usr/include/qt6/QtGui/qrgba64.h + mdp:/usr/include/qt6/QtGui/qtgui-config.h + mdp:/usr/include/qt6/QtGui/qtguiexports.h + mdp:/usr/include/qt6/QtGui/qtguiglobal.h + mdp:/usr/include/qt6/QtGui/qtransform.h + mdp:/usr/include/qt6/QtGui/qvalidator.h + mdp:/usr/include/qt6/QtGui/qwindowdefs.h + mdp:/usr/include/qt6/QtWidgets/QListView + mdp:/usr/include/qt6/QtWidgets/qabstractitemdelegate.h + mdp:/usr/include/qt6/QtWidgets/qabstractitemview.h + mdp:/usr/include/qt6/QtWidgets/qabstractscrollarea.h + mdp:/usr/include/qt6/QtWidgets/qabstractslider.h + mdp:/usr/include/qt6/QtWidgets/qabstractspinbox.h + mdp:/usr/include/qt6/QtWidgets/qframe.h + mdp:/usr/include/qt6/QtWidgets/qlistview.h + mdp:/usr/include/qt6/QtWidgets/qrubberband.h + mdp:/usr/include/qt6/QtWidgets/qsizepolicy.h + mdp:/usr/include/qt6/QtWidgets/qslider.h + mdp:/usr/include/qt6/QtWidgets/qstyle.h + mdp:/usr/include/qt6/QtWidgets/qstyleoption.h + mdp:/usr/include/qt6/QtWidgets/qtabbar.h + mdp:/usr/include/qt6/QtWidgets/qtabwidget.h + mdp:/usr/include/qt6/QtWidgets/qtwidgets-config.h + mdp:/usr/include/qt6/QtWidgets/qtwidgetsexports.h + mdp:/usr/include/qt6/QtWidgets/qtwidgetsglobal.h + mdp:/usr/include/qt6/QtWidgets/qwidget.h + mdp:/usr/include/sched.h + mdp:/usr/include/stdc-predef.h + mdp:/usr/include/stdint.h + mdp:/usr/include/stdio.h + mdp:/usr/include/stdlib.h + mdp:/usr/include/string.h + mdp:/usr/include/strings.h + mdp:/usr/include/sys/cdefs.h + mdp:/usr/include/sys/select.h + mdp:/usr/include/sys/single_threaded.h + mdp:/usr/include/sys/syscall.h + mdp:/usr/include/sys/types.h + mdp:/usr/include/syscall.h + mdp:/usr/include/time.h + mdp:/usr/include/unistd.h + mdp:/usr/include/wchar.h + mdp:/usr/include/wctype.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stdarg.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stdbool.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stddef.h +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/virtual_folders.h + mmc:Q_OBJECT + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/kassetmanagerqt_autogen/moc_predefs.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/virtual_folders.h + mdp:/usr/include/alloca.h + mdp:/usr/include/asm-generic/bitsperlong.h + mdp:/usr/include/asm-generic/errno-base.h + mdp:/usr/include/asm-generic/errno.h + mdp:/usr/include/asm-generic/int-ll64.h + mdp:/usr/include/asm-generic/posix_types.h + mdp:/usr/include/asm-generic/types.h + mdp:/usr/include/asm/bitsperlong.h + mdp:/usr/include/asm/errno.h + mdp:/usr/include/asm/posix_types.h + mdp:/usr/include/asm/posix_types_64.h + mdp:/usr/include/asm/types.h + mdp:/usr/include/asm/unistd.h + mdp:/usr/include/asm/unistd_64.h + mdp:/usr/include/assert.h + mdp:/usr/include/bits/atomic_wide_counter.h + mdp:/usr/include/bits/byteswap.h + mdp:/usr/include/bits/confname.h + mdp:/usr/include/bits/cpu-set.h + mdp:/usr/include/bits/endian.h + mdp:/usr/include/bits/endianness.h + mdp:/usr/include/bits/environments.h + mdp:/usr/include/bits/errno.h + mdp:/usr/include/bits/floatn-common.h + mdp:/usr/include/bits/floatn.h + mdp:/usr/include/bits/getopt_core.h + mdp:/usr/include/bits/getopt_posix.h + mdp:/usr/include/bits/libc-header-start.h + mdp:/usr/include/bits/local_lim.h + mdp:/usr/include/bits/locale.h + mdp:/usr/include/bits/long-double.h + mdp:/usr/include/bits/posix1_lim.h + mdp:/usr/include/bits/posix2_lim.h + mdp:/usr/include/bits/posix_opt.h + mdp:/usr/include/bits/pthread_stack_min-dynamic.h + mdp:/usr/include/bits/pthreadtypes-arch.h + mdp:/usr/include/bits/pthreadtypes.h + mdp:/usr/include/bits/sched.h + mdp:/usr/include/bits/select.h + mdp:/usr/include/bits/setjmp.h + mdp:/usr/include/bits/stdint-intn.h + mdp:/usr/include/bits/stdint-least.h + mdp:/usr/include/bits/stdint-uintn.h + mdp:/usr/include/bits/stdio_lim.h + mdp:/usr/include/bits/stdlib-float.h + mdp:/usr/include/bits/struct_mutex.h + mdp:/usr/include/bits/struct_rwlock.h + mdp:/usr/include/bits/syscall.h + mdp:/usr/include/bits/thread-shared-types.h + mdp:/usr/include/bits/time.h + mdp:/usr/include/bits/time64.h + mdp:/usr/include/bits/timesize.h + mdp:/usr/include/bits/timex.h + mdp:/usr/include/bits/types.h + mdp:/usr/include/bits/types/FILE.h + mdp:/usr/include/bits/types/__FILE.h + mdp:/usr/include/bits/types/__fpos64_t.h + mdp:/usr/include/bits/types/__fpos_t.h + mdp:/usr/include/bits/types/__locale_t.h + mdp:/usr/include/bits/types/__mbstate_t.h + mdp:/usr/include/bits/types/__sigset_t.h + mdp:/usr/include/bits/types/clock_t.h + mdp:/usr/include/bits/types/clockid_t.h + mdp:/usr/include/bits/types/cookie_io_functions_t.h + mdp:/usr/include/bits/types/error_t.h + mdp:/usr/include/bits/types/locale_t.h + mdp:/usr/include/bits/types/mbstate_t.h + mdp:/usr/include/bits/types/sigset_t.h + mdp:/usr/include/bits/types/struct_FILE.h + mdp:/usr/include/bits/types/struct___jmp_buf_tag.h + mdp:/usr/include/bits/types/struct_itimerspec.h + mdp:/usr/include/bits/types/struct_sched_param.h + mdp:/usr/include/bits/types/struct_timespec.h + mdp:/usr/include/bits/types/struct_timeval.h + mdp:/usr/include/bits/types/struct_tm.h + mdp:/usr/include/bits/types/time_t.h + mdp:/usr/include/bits/types/timer_t.h + mdp:/usr/include/bits/types/wint_t.h + mdp:/usr/include/bits/typesizes.h + mdp:/usr/include/bits/uintn-identity.h + mdp:/usr/include/bits/uio_lim.h + mdp:/usr/include/bits/unistd_ext.h + mdp:/usr/include/bits/waitflags.h + mdp:/usr/include/bits/waitstatus.h + mdp:/usr/include/bits/wchar.h + mdp:/usr/include/bits/wctype-wchar.h + mdp:/usr/include/bits/wordsize.h + mdp:/usr/include/bits/xopen_lim.h + mdp:/usr/include/c++/15/algorithm + mdp:/usr/include/c++/15/array + mdp:/usr/include/c++/15/atomic + mdp:/usr/include/c++/15/backward/auto_ptr.h + mdp:/usr/include/c++/15/backward/binders.h + mdp:/usr/include/c++/15/bit + mdp:/usr/include/c++/15/bits/algorithmfwd.h + mdp:/usr/include/c++/15/bits/align.h + mdp:/usr/include/c++/15/bits/alloc_traits.h + mdp:/usr/include/c++/15/bits/allocated_ptr.h + mdp:/usr/include/c++/15/bits/allocator.h + mdp:/usr/include/c++/15/bits/atomic_base.h + mdp:/usr/include/c++/15/bits/atomic_lockfree_defines.h + mdp:/usr/include/c++/15/bits/atomic_wait.h + mdp:/usr/include/c++/15/bits/basic_ios.h + mdp:/usr/include/c++/15/bits/basic_ios.tcc + mdp:/usr/include/c++/15/bits/basic_string.h + mdp:/usr/include/c++/15/bits/basic_string.tcc + mdp:/usr/include/c++/15/bits/char_traits.h + mdp:/usr/include/c++/15/bits/charconv.h + mdp:/usr/include/c++/15/bits/chrono.h + mdp:/usr/include/c++/15/bits/chrono_io.h + mdp:/usr/include/c++/15/bits/codecvt.h + mdp:/usr/include/c++/15/bits/concept_check.h + mdp:/usr/include/c++/15/bits/cpp_type_traits.h + mdp:/usr/include/c++/15/bits/cxxabi_forced.h + mdp:/usr/include/c++/15/bits/cxxabi_init_exception.h + mdp:/usr/include/c++/15/bits/enable_special_members.h + mdp:/usr/include/c++/15/bits/erase_if.h + mdp:/usr/include/c++/15/bits/exception.h + mdp:/usr/include/c++/15/bits/exception_defines.h + mdp:/usr/include/c++/15/bits/exception_ptr.h + mdp:/usr/include/c++/15/bits/functexcept.h + mdp:/usr/include/c++/15/bits/functional_hash.h + mdp:/usr/include/c++/15/bits/hash_bytes.h + mdp:/usr/include/c++/15/bits/hashtable.h + mdp:/usr/include/c++/15/bits/hashtable_policy.h + mdp:/usr/include/c++/15/bits/invoke.h + mdp:/usr/include/c++/15/bits/ios_base.h + mdp:/usr/include/c++/15/bits/istream.tcc + mdp:/usr/include/c++/15/bits/iterator_concepts.h + mdp:/usr/include/c++/15/bits/list.tcc + mdp:/usr/include/c++/15/bits/locale_classes.h + mdp:/usr/include/c++/15/bits/locale_classes.tcc + mdp:/usr/include/c++/15/bits/locale_conv.h + mdp:/usr/include/c++/15/bits/locale_facets.h + mdp:/usr/include/c++/15/bits/locale_facets.tcc + mdp:/usr/include/c++/15/bits/locale_facets_nonio.h + mdp:/usr/include/c++/15/bits/locale_facets_nonio.tcc + mdp:/usr/include/c++/15/bits/localefwd.h + mdp:/usr/include/c++/15/bits/max_size_type.h + mdp:/usr/include/c++/15/bits/memory_resource.h + mdp:/usr/include/c++/15/bits/memoryfwd.h + mdp:/usr/include/c++/15/bits/move.h + mdp:/usr/include/c++/15/bits/nested_exception.h + mdp:/usr/include/c++/15/bits/new_allocator.h + mdp:/usr/include/c++/15/bits/node_handle.h + mdp:/usr/include/c++/15/bits/ostream.h + mdp:/usr/include/c++/15/bits/ostream.tcc + mdp:/usr/include/c++/15/bits/ostream_insert.h + mdp:/usr/include/c++/15/bits/parse_numbers.h + mdp:/usr/include/c++/15/bits/postypes.h + mdp:/usr/include/c++/15/bits/predefined_ops.h + mdp:/usr/include/c++/15/bits/ptr_traits.h + mdp:/usr/include/c++/15/bits/quoted_string.h + mdp:/usr/include/c++/15/bits/range_access.h + mdp:/usr/include/c++/15/bits/ranges_algo.h + mdp:/usr/include/c++/15/bits/ranges_algobase.h + mdp:/usr/include/c++/15/bits/ranges_base.h + mdp:/usr/include/c++/15/bits/ranges_cmp.h + mdp:/usr/include/c++/15/bits/ranges_uninitialized.h + mdp:/usr/include/c++/15/bits/ranges_util.h + mdp:/usr/include/c++/15/bits/refwrap.h + mdp:/usr/include/c++/15/bits/requires_hosted.h + mdp:/usr/include/c++/15/bits/shared_ptr.h + mdp:/usr/include/c++/15/bits/shared_ptr_atomic.h + mdp:/usr/include/c++/15/bits/shared_ptr_base.h + mdp:/usr/include/c++/15/bits/specfun.h + mdp:/usr/include/c++/15/bits/sstream.tcc + mdp:/usr/include/c++/15/bits/std_abs.h + mdp:/usr/include/c++/15/bits/std_function.h + mdp:/usr/include/c++/15/bits/std_mutex.h + mdp:/usr/include/c++/15/bits/stl_algo.h + mdp:/usr/include/c++/15/bits/stl_algobase.h + mdp:/usr/include/c++/15/bits/stl_bvector.h + mdp:/usr/include/c++/15/bits/stl_construct.h + mdp:/usr/include/c++/15/bits/stl_function.h + mdp:/usr/include/c++/15/bits/stl_heap.h + mdp:/usr/include/c++/15/bits/stl_iterator.h + mdp:/usr/include/c++/15/bits/stl_iterator_base_funcs.h + mdp:/usr/include/c++/15/bits/stl_iterator_base_types.h + mdp:/usr/include/c++/15/bits/stl_list.h + mdp:/usr/include/c++/15/bits/stl_map.h + mdp:/usr/include/c++/15/bits/stl_multimap.h + mdp:/usr/include/c++/15/bits/stl_multiset.h + mdp:/usr/include/c++/15/bits/stl_numeric.h + mdp:/usr/include/c++/15/bits/stl_pair.h + mdp:/usr/include/c++/15/bits/stl_raw_storage_iter.h + mdp:/usr/include/c++/15/bits/stl_relops.h + mdp:/usr/include/c++/15/bits/stl_set.h + mdp:/usr/include/c++/15/bits/stl_tempbuf.h + mdp:/usr/include/c++/15/bits/stl_tree.h + mdp:/usr/include/c++/15/bits/stl_uninitialized.h + mdp:/usr/include/c++/15/bits/stl_vector.h + mdp:/usr/include/c++/15/bits/stream_iterator.h + mdp:/usr/include/c++/15/bits/streambuf.tcc + mdp:/usr/include/c++/15/bits/streambuf_iterator.h + mdp:/usr/include/c++/15/bits/string_view.tcc + mdp:/usr/include/c++/15/bits/stringfwd.h + mdp:/usr/include/c++/15/bits/uniform_int_dist.h + mdp:/usr/include/c++/15/bits/unique_ptr.h + mdp:/usr/include/c++/15/bits/unordered_map.h + mdp:/usr/include/c++/15/bits/unordered_set.h + mdp:/usr/include/c++/15/bits/uses_allocator.h + mdp:/usr/include/c++/15/bits/uses_allocator_args.h + mdp:/usr/include/c++/15/bits/utility.h + mdp:/usr/include/c++/15/bits/vector.tcc + mdp:/usr/include/c++/15/bits/version.h + mdp:/usr/include/c++/15/cassert + mdp:/usr/include/c++/15/cctype + mdp:/usr/include/c++/15/cerrno + mdp:/usr/include/c++/15/charconv + mdp:/usr/include/c++/15/chrono + mdp:/usr/include/c++/15/climits + mdp:/usr/include/c++/15/clocale + mdp:/usr/include/c++/15/cmath + mdp:/usr/include/c++/15/compare + mdp:/usr/include/c++/15/concepts + mdp:/usr/include/c++/15/cstddef + mdp:/usr/include/c++/15/cstdint + mdp:/usr/include/c++/15/cstdio + mdp:/usr/include/c++/15/cstdlib + mdp:/usr/include/c++/15/cstring + mdp:/usr/include/c++/15/ctime + mdp:/usr/include/c++/15/cwchar + mdp:/usr/include/c++/15/cwctype + mdp:/usr/include/c++/15/debug/assertions.h + mdp:/usr/include/c++/15/debug/debug.h + mdp:/usr/include/c++/15/exception + mdp:/usr/include/c++/15/ext/aligned_buffer.h + mdp:/usr/include/c++/15/ext/alloc_traits.h + mdp:/usr/include/c++/15/ext/atomicity.h + mdp:/usr/include/c++/15/ext/concurrence.h + mdp:/usr/include/c++/15/ext/numeric_traits.h + mdp:/usr/include/c++/15/ext/string_conversions.h + mdp:/usr/include/c++/15/ext/type_traits.h + mdp:/usr/include/c++/15/format + mdp:/usr/include/c++/15/functional + mdp:/usr/include/c++/15/initializer_list + mdp:/usr/include/c++/15/iomanip + mdp:/usr/include/c++/15/ios + mdp:/usr/include/c++/15/iosfwd + mdp:/usr/include/c++/15/istream + mdp:/usr/include/c++/15/iterator + mdp:/usr/include/c++/15/limits + mdp:/usr/include/c++/15/list + mdp:/usr/include/c++/15/locale + mdp:/usr/include/c++/15/map + mdp:/usr/include/c++/15/memory + mdp:/usr/include/c++/15/new + mdp:/usr/include/c++/15/numeric + mdp:/usr/include/c++/15/optional + mdp:/usr/include/c++/15/ostream + mdp:/usr/include/c++/15/pstl/execution_defs.h + mdp:/usr/include/c++/15/pstl/glue_numeric_defs.h + mdp:/usr/include/c++/15/pstl/pstl_config.h + mdp:/usr/include/c++/15/ratio + mdp:/usr/include/c++/15/set + mdp:/usr/include/c++/15/sstream + mdp:/usr/include/c++/15/stdexcept + mdp:/usr/include/c++/15/streambuf + mdp:/usr/include/c++/15/string + mdp:/usr/include/c++/15/string_view + mdp:/usr/include/c++/15/system_error + mdp:/usr/include/c++/15/tr1/bessel_function.tcc + mdp:/usr/include/c++/15/tr1/beta_function.tcc + mdp:/usr/include/c++/15/tr1/ell_integral.tcc + mdp:/usr/include/c++/15/tr1/exp_integral.tcc + mdp:/usr/include/c++/15/tr1/gamma.tcc + mdp:/usr/include/c++/15/tr1/hypergeometric.tcc + mdp:/usr/include/c++/15/tr1/legendre_function.tcc + mdp:/usr/include/c++/15/tr1/modified_bessel_func.tcc + mdp:/usr/include/c++/15/tr1/poly_hermite.tcc + mdp:/usr/include/c++/15/tr1/poly_laguerre.tcc + mdp:/usr/include/c++/15/tr1/riemann_zeta.tcc + mdp:/usr/include/c++/15/tr1/special_function_util.h + mdp:/usr/include/c++/15/tuple + mdp:/usr/include/c++/15/type_traits + mdp:/usr/include/c++/15/typeinfo + mdp:/usr/include/c++/15/unordered_map + mdp:/usr/include/c++/15/unordered_set + mdp:/usr/include/c++/15/utility + mdp:/usr/include/c++/15/variant + mdp:/usr/include/c++/15/vector + mdp:/usr/include/c++/15/version + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/atomic_word.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++allocator.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++config.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++locale.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/cpu_defines.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/ctype_base.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/ctype_inline.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/error_constants.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/gthr-default.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/gthr.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/messages_members.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/os_defines.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/time_members.h + mdp:/usr/include/ctype.h + mdp:/usr/include/endian.h + mdp:/usr/include/errno.h + mdp:/usr/include/features-time64.h + mdp:/usr/include/features.h + mdp:/usr/include/gnu/stubs-64.h + mdp:/usr/include/gnu/stubs.h + mdp:/usr/include/libintl.h + mdp:/usr/include/limits.h + mdp:/usr/include/linux/close_range.h + mdp:/usr/include/linux/errno.h + mdp:/usr/include/linux/limits.h + mdp:/usr/include/linux/posix_types.h + mdp:/usr/include/linux/sched/types.h + mdp:/usr/include/linux/stddef.h + mdp:/usr/include/linux/types.h + mdp:/usr/include/locale.h + mdp:/usr/include/pthread.h + mdp:/usr/include/qt6/QtCore/QAbstractItemModel + mdp:/usr/include/qt6/QtCore/QHash + mdp:/usr/include/qt6/QtCore/QString + mdp:/usr/include/qt6/QtCore/QVector + mdp:/usr/include/qt6/QtCore/q17memory.h + mdp:/usr/include/qt6/QtCore/q20functional.h + mdp:/usr/include/qt6/QtCore/q20iterator.h + mdp:/usr/include/qt6/QtCore/q20memory.h + mdp:/usr/include/qt6/QtCore/q20type_traits.h + mdp:/usr/include/qt6/QtCore/q20utility.h + mdp:/usr/include/qt6/QtCore/q23type_traits.h + mdp:/usr/include/qt6/QtCore/q23utility.h + mdp:/usr/include/qt6/QtCore/qabstractitemmodel.h + mdp:/usr/include/qt6/QtCore/qalgorithms.h + mdp:/usr/include/qt6/QtCore/qalloc.h + mdp:/usr/include/qt6/QtCore/qanystringview.h + mdp:/usr/include/qt6/QtCore/qarraydata.h + mdp:/usr/include/qt6/QtCore/qarraydataops.h + mdp:/usr/include/qt6/QtCore/qarraydatapointer.h + mdp:/usr/include/qt6/QtCore/qassert.h + mdp:/usr/include/qt6/QtCore/qatomic.h + mdp:/usr/include/qt6/QtCore/qatomic_cxx11.h + mdp:/usr/include/qt6/QtCore/qbasicatomic.h + mdp:/usr/include/qt6/QtCore/qbindingstorage.h + mdp:/usr/include/qt6/QtCore/qbytearray.h + mdp:/usr/include/qt6/QtCore/qbytearrayalgorithms.h + mdp:/usr/include/qt6/QtCore/qbytearraylist.h + mdp:/usr/include/qt6/QtCore/qbytearrayview.h + mdp:/usr/include/qt6/QtCore/qcalendar.h + mdp:/usr/include/qt6/QtCore/qchar.h + mdp:/usr/include/qt6/QtCore/qcompare.h + mdp:/usr/include/qt6/QtCore/qcompare_impl.h + mdp:/usr/include/qt6/QtCore/qcomparehelpers.h + mdp:/usr/include/qt6/QtCore/qcompilerdetection.h + mdp:/usr/include/qt6/QtCore/qconfig-64.h + mdp:/usr/include/qt6/QtCore/qconfig.h + mdp:/usr/include/qt6/QtCore/qconstructormacros.h + mdp:/usr/include/qt6/QtCore/qcontainerfwd.h + mdp:/usr/include/qt6/QtCore/qcontainerinfo.h + mdp:/usr/include/qt6/QtCore/qcontainertools_impl.h + mdp:/usr/include/qt6/QtCore/qcontiguouscache.h + mdp:/usr/include/qt6/QtCore/qdarwinhelpers.h + mdp:/usr/include/qt6/QtCore/qdatastream.h + mdp:/usr/include/qt6/QtCore/qdatetime.h + mdp:/usr/include/qt6/QtCore/qdebug.h + mdp:/usr/include/qt6/QtCore/qexceptionhandling.h + mdp:/usr/include/qt6/QtCore/qflags.h + mdp:/usr/include/qt6/QtCore/qfloat16.h + mdp:/usr/include/qt6/QtCore/qforeach.h + mdp:/usr/include/qt6/QtCore/qfunctionaltools_impl.h + mdp:/usr/include/qt6/QtCore/qfunctionpointer.h + mdp:/usr/include/qt6/QtCore/qgenericatomic.h + mdp:/usr/include/qt6/QtCore/qglobal.h + mdp:/usr/include/qt6/QtCore/qglobalstatic.h + mdp:/usr/include/qt6/QtCore/qhash.h + mdp:/usr/include/qt6/QtCore/qhashfunctions.h + mdp:/usr/include/qt6/QtCore/qiodevicebase.h + mdp:/usr/include/qt6/QtCore/qiterable.h + mdp:/usr/include/qt6/QtCore/qiterator.h + mdp:/usr/include/qt6/QtCore/qlatin1stringview.h + mdp:/usr/include/qt6/QtCore/qlist.h + mdp:/usr/include/qt6/QtCore/qlocale.h + mdp:/usr/include/qt6/QtCore/qlogging.h + mdp:/usr/include/qt6/QtCore/qmalloc.h + mdp:/usr/include/qt6/QtCore/qmap.h + mdp:/usr/include/qt6/QtCore/qmath.h + mdp:/usr/include/qt6/QtCore/qmetacontainer.h + mdp:/usr/include/qt6/QtCore/qmetaobject.h + mdp:/usr/include/qt6/QtCore/qmetatype.h + mdp:/usr/include/qt6/QtCore/qminmax.h + mdp:/usr/include/qt6/QtCore/qnamespace.h + mdp:/usr/include/qt6/QtCore/qnumeric.h + mdp:/usr/include/qt6/QtCore/qobject.h + mdp:/usr/include/qt6/QtCore/qobject_impl.h + mdp:/usr/include/qt6/QtCore/qobjectdefs.h + mdp:/usr/include/qt6/QtCore/qobjectdefs_impl.h + mdp:/usr/include/qt6/QtCore/qoverload.h + mdp:/usr/include/qt6/QtCore/qpair.h + mdp:/usr/include/qt6/QtCore/qpointer.h + mdp:/usr/include/qt6/QtCore/qprocessordetection.h + mdp:/usr/include/qt6/QtCore/qrefcount.h + mdp:/usr/include/qt6/QtCore/qscopedpointer.h + mdp:/usr/include/qt6/QtCore/qscopeguard.h + mdp:/usr/include/qt6/QtCore/qset.h + mdp:/usr/include/qt6/QtCore/qshareddata.h + mdp:/usr/include/qt6/QtCore/qshareddata_impl.h + mdp:/usr/include/qt6/QtCore/qsharedpointer.h + mdp:/usr/include/qt6/QtCore/qsharedpointer_impl.h + mdp:/usr/include/qt6/QtCore/qspan.h + mdp:/usr/include/qt6/QtCore/qstdlibdetection.h + mdp:/usr/include/qt6/QtCore/qstring.h + mdp:/usr/include/qt6/QtCore/qstringalgorithms.h + mdp:/usr/include/qt6/QtCore/qstringbuilder.h + mdp:/usr/include/qt6/QtCore/qstringconverter.h + mdp:/usr/include/qt6/QtCore/qstringconverter_base.h + mdp:/usr/include/qt6/QtCore/qstringfwd.h + mdp:/usr/include/qt6/QtCore/qstringlist.h + mdp:/usr/include/qt6/QtCore/qstringmatcher.h + mdp:/usr/include/qt6/QtCore/qstringtokenizer.h + mdp:/usr/include/qt6/QtCore/qstringview.h + mdp:/usr/include/qt6/QtCore/qswap.h + mdp:/usr/include/qt6/QtCore/qsysinfo.h + mdp:/usr/include/qt6/QtCore/qsystemdetection.h + mdp:/usr/include/qt6/QtCore/qtaggedpointer.h + mdp:/usr/include/qt6/QtCore/qtclasshelpermacros.h + mdp:/usr/include/qt6/QtCore/qtconfiginclude.h + mdp:/usr/include/qt6/QtCore/qtconfigmacros.h + mdp:/usr/include/qt6/QtCore/qtcore-config.h + mdp:/usr/include/qt6/QtCore/qtcoreexports.h + mdp:/usr/include/qt6/QtCore/qtcoreglobal.h + mdp:/usr/include/qt6/QtCore/qtdeprecationdefinitions.h + mdp:/usr/include/qt6/QtCore/qtdeprecationmarkers.h + mdp:/usr/include/qt6/QtCore/qtenvironmentvariables.h + mdp:/usr/include/qt6/QtCore/qtextstream.h + mdp:/usr/include/qt6/QtCore/qtformat_impl.h + mdp:/usr/include/qt6/QtCore/qtmetamacros.h + mdp:/usr/include/qt6/QtCore/qtnoop.h + mdp:/usr/include/qt6/QtCore/qtpreprocessorsupport.h + mdp:/usr/include/qt6/QtCore/qtresource.h + mdp:/usr/include/qt6/QtCore/qttranslation.h + mdp:/usr/include/qt6/QtCore/qttypetraits.h + mdp:/usr/include/qt6/QtCore/qtversion.h + mdp:/usr/include/qt6/QtCore/qtversionchecks.h + mdp:/usr/include/qt6/QtCore/qtypeinfo.h + mdp:/usr/include/qt6/QtCore/qtyperevision.h + mdp:/usr/include/qt6/QtCore/qtypes.h + mdp:/usr/include/qt6/QtCore/qurl.h + mdp:/usr/include/qt6/QtCore/qutf8stringview.h + mdp:/usr/include/qt6/QtCore/qvariant.h + mdp:/usr/include/qt6/QtCore/qvarlengtharray.h + mdp:/usr/include/qt6/QtCore/qvector.h + mdp:/usr/include/qt6/QtCore/qversionnumber.h + mdp:/usr/include/qt6/QtCore/qversiontagging.h + mdp:/usr/include/qt6/QtCore/qxptype_traits.h + mdp:/usr/include/qt6/QtCore/qyieldcpu.h + mdp:/usr/include/qt6/QtNetwork/qtnetwork-config.h + mdp:/usr/include/qt6/QtNetwork/qtnetworkexports.h + mdp:/usr/include/qt6/QtNetwork/qtnetworkglobal.h + mdp:/usr/include/qt6/QtQml/qjsnumbercoercion.h + mdp:/usr/include/qt6/QtQml/qjsprimitivevalue.h + mdp:/usr/include/qt6/QtQml/qjsvalue.h + mdp:/usr/include/qt6/QtQml/qqml.h + mdp:/usr/include/qt6/QtQml/qqmllist.h + mdp:/usr/include/qt6/QtQml/qqmlparserstatus.h + mdp:/usr/include/qt6/QtQml/qqmlprivate.h + mdp:/usr/include/qt6/QtQml/qqmlpropertyvaluesource.h + mdp:/usr/include/qt6/QtQml/qqmlregistration.h + mdp:/usr/include/qt6/QtQml/qtqml-config.h + mdp:/usr/include/qt6/QtQml/qtqmlexports.h + mdp:/usr/include/qt6/QtQml/qtqmlglobal.h + mdp:/usr/include/qt6/QtQmlIntegration/qqmlintegration.h + mdp:/usr/include/sched.h + mdp:/usr/include/stdc-predef.h + mdp:/usr/include/stdint.h + mdp:/usr/include/stdio.h + mdp:/usr/include/stdlib.h + mdp:/usr/include/string.h + mdp:/usr/include/strings.h + mdp:/usr/include/sys/cdefs.h + mdp:/usr/include/sys/select.h + mdp:/usr/include/sys/single_threaded.h + mdp:/usr/include/sys/syscall.h + mdp:/usr/include/sys/types.h + mdp:/usr/include/syscall.h + mdp:/usr/include/time.h + mdp:/usr/include/unistd.h + mdp:/usr/include/wchar.h + mdp:/usr/include/wctype.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stdarg.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stdbool.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stddef.h +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/file_manager_pane.h + mmc:Q_OBJECT + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/kassetmanagerqt_autogen/moc_predefs.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/file_manager_pane.h + mdp:/usr/include/alloca.h + mdp:/usr/include/asm-generic/bitsperlong.h + mdp:/usr/include/asm-generic/errno-base.h + mdp:/usr/include/asm-generic/errno.h + mdp:/usr/include/asm-generic/int-ll64.h + mdp:/usr/include/asm-generic/posix_types.h + mdp:/usr/include/asm-generic/types.h + mdp:/usr/include/asm/bitsperlong.h + mdp:/usr/include/asm/errno.h + mdp:/usr/include/asm/posix_types.h + mdp:/usr/include/asm/posix_types_64.h + mdp:/usr/include/asm/types.h + mdp:/usr/include/asm/unistd.h + mdp:/usr/include/asm/unistd_64.h + mdp:/usr/include/assert.h + mdp:/usr/include/bits/atomic_wide_counter.h + mdp:/usr/include/bits/byteswap.h + mdp:/usr/include/bits/confname.h + mdp:/usr/include/bits/cpu-set.h + mdp:/usr/include/bits/endian.h + mdp:/usr/include/bits/endianness.h + mdp:/usr/include/bits/environments.h + mdp:/usr/include/bits/errno.h + mdp:/usr/include/bits/floatn-common.h + mdp:/usr/include/bits/floatn.h + mdp:/usr/include/bits/getopt_core.h + mdp:/usr/include/bits/getopt_posix.h + mdp:/usr/include/bits/libc-header-start.h + mdp:/usr/include/bits/local_lim.h + mdp:/usr/include/bits/locale.h + mdp:/usr/include/bits/long-double.h + mdp:/usr/include/bits/posix1_lim.h + mdp:/usr/include/bits/posix2_lim.h + mdp:/usr/include/bits/posix_opt.h + mdp:/usr/include/bits/pthread_stack_min-dynamic.h + mdp:/usr/include/bits/pthreadtypes-arch.h + mdp:/usr/include/bits/pthreadtypes.h + mdp:/usr/include/bits/sched.h + mdp:/usr/include/bits/select.h + mdp:/usr/include/bits/setjmp.h + mdp:/usr/include/bits/stdint-intn.h + mdp:/usr/include/bits/stdint-least.h + mdp:/usr/include/bits/stdint-uintn.h + mdp:/usr/include/bits/stdio_lim.h + mdp:/usr/include/bits/stdlib-float.h + mdp:/usr/include/bits/struct_mutex.h + mdp:/usr/include/bits/struct_rwlock.h + mdp:/usr/include/bits/syscall.h + mdp:/usr/include/bits/thread-shared-types.h + mdp:/usr/include/bits/time.h + mdp:/usr/include/bits/time64.h + mdp:/usr/include/bits/timesize.h + mdp:/usr/include/bits/timex.h + mdp:/usr/include/bits/types.h + mdp:/usr/include/bits/types/FILE.h + mdp:/usr/include/bits/types/__FILE.h + mdp:/usr/include/bits/types/__fpos64_t.h + mdp:/usr/include/bits/types/__fpos_t.h + mdp:/usr/include/bits/types/__locale_t.h + mdp:/usr/include/bits/types/__mbstate_t.h + mdp:/usr/include/bits/types/__sigset_t.h + mdp:/usr/include/bits/types/clock_t.h + mdp:/usr/include/bits/types/clockid_t.h + mdp:/usr/include/bits/types/cookie_io_functions_t.h + mdp:/usr/include/bits/types/error_t.h + mdp:/usr/include/bits/types/locale_t.h + mdp:/usr/include/bits/types/mbstate_t.h + mdp:/usr/include/bits/types/sigset_t.h + mdp:/usr/include/bits/types/struct_FILE.h + mdp:/usr/include/bits/types/struct___jmp_buf_tag.h + mdp:/usr/include/bits/types/struct_itimerspec.h + mdp:/usr/include/bits/types/struct_sched_param.h + mdp:/usr/include/bits/types/struct_timespec.h + mdp:/usr/include/bits/types/struct_timeval.h + mdp:/usr/include/bits/types/struct_tm.h + mdp:/usr/include/bits/types/time_t.h + mdp:/usr/include/bits/types/timer_t.h + mdp:/usr/include/bits/types/wint_t.h + mdp:/usr/include/bits/typesizes.h + mdp:/usr/include/bits/uintn-identity.h + mdp:/usr/include/bits/uio_lim.h + mdp:/usr/include/bits/unistd_ext.h + mdp:/usr/include/bits/waitflags.h + mdp:/usr/include/bits/waitstatus.h + mdp:/usr/include/bits/wchar.h + mdp:/usr/include/bits/wctype-wchar.h + mdp:/usr/include/bits/wordsize.h + mdp:/usr/include/bits/xopen_lim.h + mdp:/usr/include/c++/15/algorithm + mdp:/usr/include/c++/15/array + mdp:/usr/include/c++/15/atomic + mdp:/usr/include/c++/15/backward/auto_ptr.h + mdp:/usr/include/c++/15/backward/binders.h + mdp:/usr/include/c++/15/bit + mdp:/usr/include/c++/15/bits/algorithmfwd.h + mdp:/usr/include/c++/15/bits/align.h + mdp:/usr/include/c++/15/bits/alloc_traits.h + mdp:/usr/include/c++/15/bits/allocated_ptr.h + mdp:/usr/include/c++/15/bits/allocator.h + mdp:/usr/include/c++/15/bits/atomic_base.h + mdp:/usr/include/c++/15/bits/atomic_lockfree_defines.h + mdp:/usr/include/c++/15/bits/atomic_wait.h + mdp:/usr/include/c++/15/bits/basic_ios.h + mdp:/usr/include/c++/15/bits/basic_ios.tcc + mdp:/usr/include/c++/15/bits/basic_string.h + mdp:/usr/include/c++/15/bits/basic_string.tcc + mdp:/usr/include/c++/15/bits/char_traits.h + mdp:/usr/include/c++/15/bits/charconv.h + mdp:/usr/include/c++/15/bits/chrono.h + mdp:/usr/include/c++/15/bits/chrono_io.h + mdp:/usr/include/c++/15/bits/codecvt.h + mdp:/usr/include/c++/15/bits/concept_check.h + mdp:/usr/include/c++/15/bits/cpp_type_traits.h + mdp:/usr/include/c++/15/bits/cxxabi_forced.h + mdp:/usr/include/c++/15/bits/cxxabi_init_exception.h + mdp:/usr/include/c++/15/bits/enable_special_members.h + mdp:/usr/include/c++/15/bits/erase_if.h + mdp:/usr/include/c++/15/bits/exception.h + mdp:/usr/include/c++/15/bits/exception_defines.h + mdp:/usr/include/c++/15/bits/exception_ptr.h + mdp:/usr/include/c++/15/bits/functexcept.h + mdp:/usr/include/c++/15/bits/functional_hash.h + mdp:/usr/include/c++/15/bits/hash_bytes.h + mdp:/usr/include/c++/15/bits/hashtable.h + mdp:/usr/include/c++/15/bits/hashtable_policy.h + mdp:/usr/include/c++/15/bits/invoke.h + mdp:/usr/include/c++/15/bits/ios_base.h + mdp:/usr/include/c++/15/bits/istream.tcc + mdp:/usr/include/c++/15/bits/iterator_concepts.h + mdp:/usr/include/c++/15/bits/list.tcc + mdp:/usr/include/c++/15/bits/locale_classes.h + mdp:/usr/include/c++/15/bits/locale_classes.tcc + mdp:/usr/include/c++/15/bits/locale_conv.h + mdp:/usr/include/c++/15/bits/locale_facets.h + mdp:/usr/include/c++/15/bits/locale_facets.tcc + mdp:/usr/include/c++/15/bits/locale_facets_nonio.h + mdp:/usr/include/c++/15/bits/locale_facets_nonio.tcc + mdp:/usr/include/c++/15/bits/localefwd.h + mdp:/usr/include/c++/15/bits/max_size_type.h + mdp:/usr/include/c++/15/bits/memory_resource.h + mdp:/usr/include/c++/15/bits/memoryfwd.h + mdp:/usr/include/c++/15/bits/move.h + mdp:/usr/include/c++/15/bits/nested_exception.h + mdp:/usr/include/c++/15/bits/new_allocator.h + mdp:/usr/include/c++/15/bits/node_handle.h + mdp:/usr/include/c++/15/bits/ostream.h + mdp:/usr/include/c++/15/bits/ostream.tcc + mdp:/usr/include/c++/15/bits/ostream_insert.h + mdp:/usr/include/c++/15/bits/parse_numbers.h + mdp:/usr/include/c++/15/bits/postypes.h + mdp:/usr/include/c++/15/bits/predefined_ops.h + mdp:/usr/include/c++/15/bits/ptr_traits.h + mdp:/usr/include/c++/15/bits/quoted_string.h + mdp:/usr/include/c++/15/bits/range_access.h + mdp:/usr/include/c++/15/bits/ranges_algo.h + mdp:/usr/include/c++/15/bits/ranges_algobase.h + mdp:/usr/include/c++/15/bits/ranges_base.h + mdp:/usr/include/c++/15/bits/ranges_cmp.h + mdp:/usr/include/c++/15/bits/ranges_uninitialized.h + mdp:/usr/include/c++/15/bits/ranges_util.h + mdp:/usr/include/c++/15/bits/refwrap.h + mdp:/usr/include/c++/15/bits/requires_hosted.h + mdp:/usr/include/c++/15/bits/shared_ptr.h + mdp:/usr/include/c++/15/bits/shared_ptr_atomic.h + mdp:/usr/include/c++/15/bits/shared_ptr_base.h + mdp:/usr/include/c++/15/bits/specfun.h + mdp:/usr/include/c++/15/bits/sstream.tcc + mdp:/usr/include/c++/15/bits/std_abs.h + mdp:/usr/include/c++/15/bits/std_function.h + mdp:/usr/include/c++/15/bits/std_mutex.h + mdp:/usr/include/c++/15/bits/stl_algo.h + mdp:/usr/include/c++/15/bits/stl_algobase.h + mdp:/usr/include/c++/15/bits/stl_bvector.h + mdp:/usr/include/c++/15/bits/stl_construct.h + mdp:/usr/include/c++/15/bits/stl_function.h + mdp:/usr/include/c++/15/bits/stl_heap.h + mdp:/usr/include/c++/15/bits/stl_iterator.h + mdp:/usr/include/c++/15/bits/stl_iterator_base_funcs.h + mdp:/usr/include/c++/15/bits/stl_iterator_base_types.h + mdp:/usr/include/c++/15/bits/stl_list.h + mdp:/usr/include/c++/15/bits/stl_map.h + mdp:/usr/include/c++/15/bits/stl_multimap.h + mdp:/usr/include/c++/15/bits/stl_multiset.h + mdp:/usr/include/c++/15/bits/stl_numeric.h + mdp:/usr/include/c++/15/bits/stl_pair.h + mdp:/usr/include/c++/15/bits/stl_raw_storage_iter.h + mdp:/usr/include/c++/15/bits/stl_relops.h + mdp:/usr/include/c++/15/bits/stl_set.h + mdp:/usr/include/c++/15/bits/stl_tempbuf.h + mdp:/usr/include/c++/15/bits/stl_tree.h + mdp:/usr/include/c++/15/bits/stl_uninitialized.h + mdp:/usr/include/c++/15/bits/stl_vector.h + mdp:/usr/include/c++/15/bits/stream_iterator.h + mdp:/usr/include/c++/15/bits/streambuf.tcc + mdp:/usr/include/c++/15/bits/streambuf_iterator.h + mdp:/usr/include/c++/15/bits/string_view.tcc + mdp:/usr/include/c++/15/bits/stringfwd.h + mdp:/usr/include/c++/15/bits/uniform_int_dist.h + mdp:/usr/include/c++/15/bits/unique_ptr.h + mdp:/usr/include/c++/15/bits/unordered_map.h + mdp:/usr/include/c++/15/bits/unordered_set.h + mdp:/usr/include/c++/15/bits/uses_allocator.h + mdp:/usr/include/c++/15/bits/uses_allocator_args.h + mdp:/usr/include/c++/15/bits/utility.h + mdp:/usr/include/c++/15/bits/vector.tcc + mdp:/usr/include/c++/15/bits/version.h + mdp:/usr/include/c++/15/cassert + mdp:/usr/include/c++/15/cctype + mdp:/usr/include/c++/15/cerrno + mdp:/usr/include/c++/15/charconv + mdp:/usr/include/c++/15/chrono + mdp:/usr/include/c++/15/climits + mdp:/usr/include/c++/15/clocale + mdp:/usr/include/c++/15/cmath + mdp:/usr/include/c++/15/compare + mdp:/usr/include/c++/15/concepts + mdp:/usr/include/c++/15/cstddef + mdp:/usr/include/c++/15/cstdint + mdp:/usr/include/c++/15/cstdio + mdp:/usr/include/c++/15/cstdlib + mdp:/usr/include/c++/15/cstring + mdp:/usr/include/c++/15/ctime + mdp:/usr/include/c++/15/cwchar + mdp:/usr/include/c++/15/cwctype + mdp:/usr/include/c++/15/debug/assertions.h + mdp:/usr/include/c++/15/debug/debug.h + mdp:/usr/include/c++/15/exception + mdp:/usr/include/c++/15/ext/aligned_buffer.h + mdp:/usr/include/c++/15/ext/alloc_traits.h + mdp:/usr/include/c++/15/ext/atomicity.h + mdp:/usr/include/c++/15/ext/concurrence.h + mdp:/usr/include/c++/15/ext/numeric_traits.h + mdp:/usr/include/c++/15/ext/string_conversions.h + mdp:/usr/include/c++/15/ext/type_traits.h + mdp:/usr/include/c++/15/filesystem + mdp:/usr/include/c++/15/format + mdp:/usr/include/c++/15/functional + mdp:/usr/include/c++/15/initializer_list + mdp:/usr/include/c++/15/iomanip + mdp:/usr/include/c++/15/ios + mdp:/usr/include/c++/15/iosfwd + mdp:/usr/include/c++/15/istream + mdp:/usr/include/c++/15/iterator + mdp:/usr/include/c++/15/limits + mdp:/usr/include/c++/15/list + mdp:/usr/include/c++/15/locale + mdp:/usr/include/c++/15/map + mdp:/usr/include/c++/15/memory + mdp:/usr/include/c++/15/new + mdp:/usr/include/c++/15/numeric + mdp:/usr/include/c++/15/optional + mdp:/usr/include/c++/15/ostream + mdp:/usr/include/c++/15/pstl/execution_defs.h + mdp:/usr/include/c++/15/pstl/glue_numeric_defs.h + mdp:/usr/include/c++/15/pstl/pstl_config.h + mdp:/usr/include/c++/15/ratio + mdp:/usr/include/c++/15/set + mdp:/usr/include/c++/15/sstream + mdp:/usr/include/c++/15/stdexcept + mdp:/usr/include/c++/15/streambuf + mdp:/usr/include/c++/15/string + mdp:/usr/include/c++/15/string_view + mdp:/usr/include/c++/15/system_error + mdp:/usr/include/c++/15/tr1/bessel_function.tcc + mdp:/usr/include/c++/15/tr1/beta_function.tcc + mdp:/usr/include/c++/15/tr1/ell_integral.tcc + mdp:/usr/include/c++/15/tr1/exp_integral.tcc + mdp:/usr/include/c++/15/tr1/gamma.tcc + mdp:/usr/include/c++/15/tr1/hypergeometric.tcc + mdp:/usr/include/c++/15/tr1/legendre_function.tcc + mdp:/usr/include/c++/15/tr1/modified_bessel_func.tcc + mdp:/usr/include/c++/15/tr1/poly_hermite.tcc + mdp:/usr/include/c++/15/tr1/poly_laguerre.tcc + mdp:/usr/include/c++/15/tr1/riemann_zeta.tcc + mdp:/usr/include/c++/15/tr1/special_function_util.h + mdp:/usr/include/c++/15/tuple + mdp:/usr/include/c++/15/type_traits + mdp:/usr/include/c++/15/typeinfo + mdp:/usr/include/c++/15/unordered_map + mdp:/usr/include/c++/15/unordered_set + mdp:/usr/include/c++/15/utility + mdp:/usr/include/c++/15/variant + mdp:/usr/include/c++/15/vector + mdp:/usr/include/c++/15/version + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/atomic_word.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++allocator.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++config.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++locale.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/cpu_defines.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/ctype_base.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/ctype_inline.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/error_constants.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/gthr-default.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/gthr.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/messages_members.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/os_defines.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/time_members.h + mdp:/usr/include/ctype.h + mdp:/usr/include/endian.h + mdp:/usr/include/errno.h + mdp:/usr/include/features-time64.h + mdp:/usr/include/features.h + mdp:/usr/include/gnu/stubs-64.h + mdp:/usr/include/gnu/stubs.h + mdp:/usr/include/libintl.h + mdp:/usr/include/limits.h + mdp:/usr/include/linux/close_range.h + mdp:/usr/include/linux/errno.h + mdp:/usr/include/linux/limits.h + mdp:/usr/include/linux/posix_types.h + mdp:/usr/include/linux/sched/types.h + mdp:/usr/include/linux/stddef.h + mdp:/usr/include/linux/types.h + mdp:/usr/include/locale.h + mdp:/usr/include/pthread.h + mdp:/usr/include/qt6/QtCore/QList + mdp:/usr/include/qt6/QtCore/QObject + mdp:/usr/include/qt6/QtCore/QRect + mdp:/usr/include/qt6/QtCore/QSize + mdp:/usr/include/qt6/QtCore/QSizeF + mdp:/usr/include/qt6/QtCore/QTimer + mdp:/usr/include/qt6/QtCore/q17memory.h + mdp:/usr/include/qt6/QtCore/q20functional.h + mdp:/usr/include/qt6/QtCore/q20iterator.h + mdp:/usr/include/qt6/QtCore/q20memory.h + mdp:/usr/include/qt6/QtCore/q20type_traits.h + mdp:/usr/include/qt6/QtCore/q20utility.h + mdp:/usr/include/qt6/QtCore/q23type_traits.h + mdp:/usr/include/qt6/QtCore/q23utility.h + mdp:/usr/include/qt6/QtCore/qabstracteventdispatcher.h + mdp:/usr/include/qt6/QtCore/qabstractitemmodel.h + mdp:/usr/include/qt6/QtCore/qalgorithms.h + mdp:/usr/include/qt6/QtCore/qalloc.h + mdp:/usr/include/qt6/QtCore/qanystringview.h + mdp:/usr/include/qt6/QtCore/qarraydata.h + mdp:/usr/include/qt6/QtCore/qarraydataops.h + mdp:/usr/include/qt6/QtCore/qarraydatapointer.h + mdp:/usr/include/qt6/QtCore/qassert.h + mdp:/usr/include/qt6/QtCore/qatomic.h + mdp:/usr/include/qt6/QtCore/qatomic_cxx11.h + mdp:/usr/include/qt6/QtCore/qbasicatomic.h + mdp:/usr/include/qt6/QtCore/qbasictimer.h + mdp:/usr/include/qt6/QtCore/qbindingstorage.h + mdp:/usr/include/qt6/QtCore/qbytearray.h + mdp:/usr/include/qt6/QtCore/qbytearrayalgorithms.h + mdp:/usr/include/qt6/QtCore/qbytearraylist.h + mdp:/usr/include/qt6/QtCore/qbytearrayview.h + mdp:/usr/include/qt6/QtCore/qcalendar.h + mdp:/usr/include/qt6/QtCore/qchar.h + mdp:/usr/include/qt6/QtCore/qcheckedint_impl.h + mdp:/usr/include/qt6/QtCore/qcompare.h + mdp:/usr/include/qt6/QtCore/qcompare_impl.h + mdp:/usr/include/qt6/QtCore/qcomparehelpers.h + mdp:/usr/include/qt6/QtCore/qcompilerdetection.h + mdp:/usr/include/qt6/QtCore/qconfig-64.h + mdp:/usr/include/qt6/QtCore/qconfig.h + mdp:/usr/include/qt6/QtCore/qconstructormacros.h + mdp:/usr/include/qt6/QtCore/qcontainerfwd.h + mdp:/usr/include/qt6/QtCore/qcontainerinfo.h + mdp:/usr/include/qt6/QtCore/qcontainertools_impl.h + mdp:/usr/include/qt6/QtCore/qcontiguouscache.h + mdp:/usr/include/qt6/QtCore/qcoreapplication.h + mdp:/usr/include/qt6/QtCore/qcoreapplication_platform.h + mdp:/usr/include/qt6/QtCore/qcoreevent.h + mdp:/usr/include/qt6/QtCore/qdarwinhelpers.h + mdp:/usr/include/qt6/QtCore/qdatastream.h + mdp:/usr/include/qt6/QtCore/qdatetime.h + mdp:/usr/include/qt6/QtCore/qdeadlinetimer.h + mdp:/usr/include/qt6/QtCore/qdebug.h + mdp:/usr/include/qt6/QtCore/qdir.h + mdp:/usr/include/qt6/QtCore/qdirlisting.h + mdp:/usr/include/qt6/QtCore/qendian.h + mdp:/usr/include/qt6/QtCore/qeventloop.h + mdp:/usr/include/qt6/QtCore/qexceptionhandling.h + mdp:/usr/include/qt6/QtCore/qfile.h + mdp:/usr/include/qt6/QtCore/qfiledevice.h + mdp:/usr/include/qt6/QtCore/qfileinfo.h + mdp:/usr/include/qt6/QtCore/qflags.h + mdp:/usr/include/qt6/QtCore/qfloat16.h + mdp:/usr/include/qt6/QtCore/qforeach.h + mdp:/usr/include/qt6/QtCore/qfunctionaltools_impl.h + mdp:/usr/include/qt6/QtCore/qfunctionpointer.h + mdp:/usr/include/qt6/QtCore/qgenericatomic.h + mdp:/usr/include/qt6/QtCore/qglobal.h + mdp:/usr/include/qt6/QtCore/qglobalstatic.h + mdp:/usr/include/qt6/QtCore/qhash.h + mdp:/usr/include/qt6/QtCore/qhashfunctions.h + mdp:/usr/include/qt6/QtCore/qiodevice.h + mdp:/usr/include/qt6/QtCore/qiodevicebase.h + mdp:/usr/include/qt6/QtCore/qitemselectionmodel.h + mdp:/usr/include/qt6/QtCore/qiterable.h + mdp:/usr/include/qt6/QtCore/qiterator.h + mdp:/usr/include/qt6/QtCore/qlatin1stringview.h + mdp:/usr/include/qt6/QtCore/qline.h + mdp:/usr/include/qt6/QtCore/qlist.h + mdp:/usr/include/qt6/QtCore/qlocale.h + mdp:/usr/include/qt6/QtCore/qlogging.h + mdp:/usr/include/qt6/QtCore/qmalloc.h + mdp:/usr/include/qt6/QtCore/qmap.h + mdp:/usr/include/qt6/QtCore/qmargins.h + mdp:/usr/include/qt6/QtCore/qmath.h + mdp:/usr/include/qt6/QtCore/qmetacontainer.h + mdp:/usr/include/qt6/QtCore/qmetatype.h + mdp:/usr/include/qt6/QtCore/qminmax.h + mdp:/usr/include/qt6/QtCore/qnamespace.h + mdp:/usr/include/qt6/QtCore/qnativeinterface.h + mdp:/usr/include/qt6/QtCore/qnumeric.h + mdp:/usr/include/qt6/QtCore/qobject.h + mdp:/usr/include/qt6/QtCore/qobject_impl.h + mdp:/usr/include/qt6/QtCore/qobjectdefs.h + mdp:/usr/include/qt6/QtCore/qobjectdefs_impl.h + mdp:/usr/include/qt6/QtCore/qoverload.h + mdp:/usr/include/qt6/QtCore/qpair.h + mdp:/usr/include/qt6/QtCore/qpoint.h + mdp:/usr/include/qt6/QtCore/qprocessordetection.h + mdp:/usr/include/qt6/QtCore/qrect.h + mdp:/usr/include/qt6/QtCore/qrefcount.h + mdp:/usr/include/qt6/QtCore/qregularexpression.h + mdp:/usr/include/qt6/QtCore/qscopedpointer.h + mdp:/usr/include/qt6/QtCore/qscopeguard.h + mdp:/usr/include/qt6/QtCore/qset.h + mdp:/usr/include/qt6/QtCore/qshareddata.h + mdp:/usr/include/qt6/QtCore/qshareddata_impl.h + mdp:/usr/include/qt6/QtCore/qsharedpointer.h + mdp:/usr/include/qt6/QtCore/qsharedpointer_impl.h + mdp:/usr/include/qt6/QtCore/qsize.h + mdp:/usr/include/qt6/QtCore/qspan.h + mdp:/usr/include/qt6/QtCore/qstdlibdetection.h + mdp:/usr/include/qt6/QtCore/qstring.h + mdp:/usr/include/qt6/QtCore/qstringalgorithms.h + mdp:/usr/include/qt6/QtCore/qstringbuilder.h + mdp:/usr/include/qt6/QtCore/qstringconverter.h + mdp:/usr/include/qt6/QtCore/qstringconverter_base.h + mdp:/usr/include/qt6/QtCore/qstringfwd.h + mdp:/usr/include/qt6/QtCore/qstringlist.h + mdp:/usr/include/qt6/QtCore/qstringmatcher.h + mdp:/usr/include/qt6/QtCore/qstringtokenizer.h + mdp:/usr/include/qt6/QtCore/qstringview.h + mdp:/usr/include/qt6/QtCore/qswap.h + mdp:/usr/include/qt6/QtCore/qsysinfo.h + mdp:/usr/include/qt6/QtCore/qsystemdetection.h + mdp:/usr/include/qt6/QtCore/qtaggedpointer.h + mdp:/usr/include/qt6/QtCore/qtclasshelpermacros.h + mdp:/usr/include/qt6/QtCore/qtconfiginclude.h + mdp:/usr/include/qt6/QtCore/qtconfigmacros.h + mdp:/usr/include/qt6/QtCore/qtcore-config.h + mdp:/usr/include/qt6/QtCore/qtcoreexports.h + mdp:/usr/include/qt6/QtCore/qtcoreglobal.h + mdp:/usr/include/qt6/QtCore/qtdeprecationdefinitions.h + mdp:/usr/include/qt6/QtCore/qtdeprecationmarkers.h + mdp:/usr/include/qt6/QtCore/qtenvironmentvariables.h + mdp:/usr/include/qt6/QtCore/qtextstream.h + mdp:/usr/include/qt6/QtCore/qtformat_impl.h + mdp:/usr/include/qt6/QtCore/qtimer.h + mdp:/usr/include/qt6/QtCore/qtimezone.h + mdp:/usr/include/qt6/QtCore/qtmetamacros.h + mdp:/usr/include/qt6/QtCore/qtnoop.h + mdp:/usr/include/qt6/QtCore/qtpreprocessorsupport.h + mdp:/usr/include/qt6/QtCore/qtresource.h + mdp:/usr/include/qt6/QtCore/qttranslation.h + mdp:/usr/include/qt6/QtCore/qttypetraits.h + mdp:/usr/include/qt6/QtCore/qtversion.h + mdp:/usr/include/qt6/QtCore/qtversionchecks.h + mdp:/usr/include/qt6/QtCore/qtypeinfo.h + mdp:/usr/include/qt6/QtCore/qtypes.h + mdp:/usr/include/qt6/QtCore/qurl.h + mdp:/usr/include/qt6/QtCore/qutf8stringview.h + mdp:/usr/include/qt6/QtCore/qvariant.h + mdp:/usr/include/qt6/QtCore/qvarlengtharray.h + mdp:/usr/include/qt6/QtCore/qversiontagging.h + mdp:/usr/include/qt6/QtCore/qxptype_traits.h + mdp:/usr/include/qt6/QtCore/qyieldcpu.h + mdp:/usr/include/qt6/QtGui/QFileSystemModel + mdp:/usr/include/qt6/QtGui/QStandardItemModel + mdp:/usr/include/qt6/QtGui/QTransform + mdp:/usr/include/qt6/QtGui/qabstracttextdocumentlayout.h + mdp:/usr/include/qt6/QtGui/qaction.h + mdp:/usr/include/qt6/QtGui/qbitmap.h + mdp:/usr/include/qt6/QtGui/qbrush.h + mdp:/usr/include/qt6/QtGui/qcolor.h + mdp:/usr/include/qt6/QtGui/qcursor.h + mdp:/usr/include/qt6/QtGui/qevent.h + mdp:/usr/include/qt6/QtGui/qeventpoint.h + mdp:/usr/include/qt6/QtGui/qfilesystemmodel.h + mdp:/usr/include/qt6/QtGui/qfont.h + mdp:/usr/include/qt6/QtGui/qfontdatabase.h + mdp:/usr/include/qt6/QtGui/qfontinfo.h + mdp:/usr/include/qt6/QtGui/qfontmetrics.h + mdp:/usr/include/qt6/QtGui/qfontvariableaxis.h + mdp:/usr/include/qt6/QtGui/qglyphrun.h + mdp:/usr/include/qt6/QtGui/qguiapplication.h + mdp:/usr/include/qt6/QtGui/qguiapplication_platform.h + mdp:/usr/include/qt6/QtGui/qicon.h + mdp:/usr/include/qt6/QtGui/qimage.h + mdp:/usr/include/qt6/QtGui/qinputdevice.h + mdp:/usr/include/qt6/QtGui/qinputmethod.h + mdp:/usr/include/qt6/QtGui/qkeysequence.h + mdp:/usr/include/qt6/QtGui/qpaintdevice.h + mdp:/usr/include/qt6/QtGui/qpainter.h + mdp:/usr/include/qt6/QtGui/qpainterpath.h + mdp:/usr/include/qt6/QtGui/qpalette.h + mdp:/usr/include/qt6/QtGui/qpen.h + mdp:/usr/include/qt6/QtGui/qpicture.h + mdp:/usr/include/qt6/QtGui/qpixelformat.h + mdp:/usr/include/qt6/QtGui/qpixmap.h + mdp:/usr/include/qt6/QtGui/qpointingdevice.h + mdp:/usr/include/qt6/QtGui/qpolygon.h + mdp:/usr/include/qt6/QtGui/qrawfont.h + mdp:/usr/include/qt6/QtGui/qregion.h + mdp:/usr/include/qt6/QtGui/qrgb.h + mdp:/usr/include/qt6/QtGui/qrgba64.h + mdp:/usr/include/qt6/QtGui/qscreen.h + mdp:/usr/include/qt6/QtGui/qscreen_platform.h + mdp:/usr/include/qt6/QtGui/qstandarditemmodel.h + mdp:/usr/include/qt6/QtGui/qtextcursor.h + mdp:/usr/include/qt6/QtGui/qtextdocument.h + mdp:/usr/include/qt6/QtGui/qtextformat.h + mdp:/usr/include/qt6/QtGui/qtextlayout.h + mdp:/usr/include/qt6/QtGui/qtextoption.h + mdp:/usr/include/qt6/QtGui/qtgui-config.h + mdp:/usr/include/qt6/QtGui/qtguiexports.h + mdp:/usr/include/qt6/QtGui/qtguiglobal.h + mdp:/usr/include/qt6/QtGui/qtransform.h + mdp:/usr/include/qt6/QtGui/qvalidator.h + mdp:/usr/include/qt6/QtGui/qvector2d.h + mdp:/usr/include/qt6/QtGui/qvectornd.h + mdp:/usr/include/qt6/QtGui/qwindowdefs.h + mdp:/usr/include/qt6/QtWidgets/QCheckBox + mdp:/usr/include/qt6/QtWidgets/QGraphicsPixmapItem + mdp:/usr/include/qt6/QtWidgets/QGraphicsScene + mdp:/usr/include/qt6/QtWidgets/QGraphicsView + mdp:/usr/include/qt6/QtWidgets/QLabel + mdp:/usr/include/qt6/QtWidgets/QLineEdit + mdp:/usr/include/qt6/QtWidgets/QListView + mdp:/usr/include/qt6/QtWidgets/QPlainTextEdit + mdp:/usr/include/qt6/QtWidgets/QPushButton + mdp:/usr/include/qt6/QtWidgets/QSlider + mdp:/usr/include/qt6/QtWidgets/QSplitter + mdp:/usr/include/qt6/QtWidgets/QStackedWidget + mdp:/usr/include/qt6/QtWidgets/QTableView + mdp:/usr/include/qt6/QtWidgets/QToolButton + mdp:/usr/include/qt6/QtWidgets/QWidget + mdp:/usr/include/qt6/QtWidgets/qabstractbutton.h + mdp:/usr/include/qt6/QtWidgets/qabstractitemdelegate.h + mdp:/usr/include/qt6/QtWidgets/qabstractitemview.h + mdp:/usr/include/qt6/QtWidgets/qabstractscrollarea.h + mdp:/usr/include/qt6/QtWidgets/qabstractslider.h + mdp:/usr/include/qt6/QtWidgets/qabstractspinbox.h + mdp:/usr/include/qt6/QtWidgets/qcheckbox.h + mdp:/usr/include/qt6/QtWidgets/qframe.h + mdp:/usr/include/qt6/QtWidgets/qgraphicsitem.h + mdp:/usr/include/qt6/QtWidgets/qgraphicsscene.h + mdp:/usr/include/qt6/QtWidgets/qgraphicsview.h + mdp:/usr/include/qt6/QtWidgets/qlabel.h + mdp:/usr/include/qt6/QtWidgets/qlineedit.h + mdp:/usr/include/qt6/QtWidgets/qlistview.h + mdp:/usr/include/qt6/QtWidgets/qplaintextedit.h + mdp:/usr/include/qt6/QtWidgets/qpushbutton.h + mdp:/usr/include/qt6/QtWidgets/qrubberband.h + mdp:/usr/include/qt6/QtWidgets/qscrollarea.h + mdp:/usr/include/qt6/QtWidgets/qsizepolicy.h + mdp:/usr/include/qt6/QtWidgets/qslider.h + mdp:/usr/include/qt6/QtWidgets/qsplitter.h + mdp:/usr/include/qt6/QtWidgets/qstackedwidget.h + mdp:/usr/include/qt6/QtWidgets/qstyle.h + mdp:/usr/include/qt6/QtWidgets/qstyleoption.h + mdp:/usr/include/qt6/QtWidgets/qtabbar.h + mdp:/usr/include/qt6/QtWidgets/qtableview.h + mdp:/usr/include/qt6/QtWidgets/qtabwidget.h + mdp:/usr/include/qt6/QtWidgets/qtextedit.h + mdp:/usr/include/qt6/QtWidgets/qtoolbutton.h + mdp:/usr/include/qt6/QtWidgets/qtwidgets-config.h + mdp:/usr/include/qt6/QtWidgets/qtwidgetsexports.h + mdp:/usr/include/qt6/QtWidgets/qtwidgetsglobal.h + mdp:/usr/include/qt6/QtWidgets/qwidget.h + mdp:/usr/include/sched.h + mdp:/usr/include/stdc-predef.h + mdp:/usr/include/stdint.h + mdp:/usr/include/stdio.h + mdp:/usr/include/stdlib.h + mdp:/usr/include/string.h + mdp:/usr/include/strings.h + mdp:/usr/include/sys/cdefs.h + mdp:/usr/include/sys/select.h + mdp:/usr/include/sys/single_threaded.h + mdp:/usr/include/sys/syscall.h + mdp:/usr/include/sys/types.h + mdp:/usr/include/syscall.h + mdp:/usr/include/time.h + mdp:/usr/include/unistd.h + mdp:/usr/include/wchar.h + mdp:/usr/include/wctype.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stdarg.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stdbool.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stddef.h +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/live_preview_manager.cpp +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/scrub_frame_registry.h + mmc:Q_OBJECT + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/kassetmanagerqt_autogen/moc_predefs.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/scrub_frame_registry.h + mdp:/usr/include/alloca.h + mdp:/usr/include/asm-generic/bitsperlong.h + mdp:/usr/include/asm-generic/errno-base.h + mdp:/usr/include/asm-generic/errno.h + mdp:/usr/include/asm-generic/int-ll64.h + mdp:/usr/include/asm-generic/posix_types.h + mdp:/usr/include/asm-generic/types.h + mdp:/usr/include/asm/bitsperlong.h + mdp:/usr/include/asm/errno.h + mdp:/usr/include/asm/posix_types.h + mdp:/usr/include/asm/posix_types_64.h + mdp:/usr/include/asm/types.h + mdp:/usr/include/asm/unistd.h + mdp:/usr/include/asm/unistd_64.h + mdp:/usr/include/assert.h + mdp:/usr/include/bits/atomic_wide_counter.h + mdp:/usr/include/bits/byteswap.h + mdp:/usr/include/bits/confname.h + mdp:/usr/include/bits/cpu-set.h + mdp:/usr/include/bits/endian.h + mdp:/usr/include/bits/endianness.h + mdp:/usr/include/bits/environments.h + mdp:/usr/include/bits/errno.h + mdp:/usr/include/bits/floatn-common.h + mdp:/usr/include/bits/floatn.h + mdp:/usr/include/bits/getopt_core.h + mdp:/usr/include/bits/getopt_posix.h + mdp:/usr/include/bits/libc-header-start.h + mdp:/usr/include/bits/local_lim.h + mdp:/usr/include/bits/locale.h + mdp:/usr/include/bits/long-double.h + mdp:/usr/include/bits/posix1_lim.h + mdp:/usr/include/bits/posix2_lim.h + mdp:/usr/include/bits/posix_opt.h + mdp:/usr/include/bits/pthread_stack_min-dynamic.h + mdp:/usr/include/bits/pthreadtypes-arch.h + mdp:/usr/include/bits/pthreadtypes.h + mdp:/usr/include/bits/sched.h + mdp:/usr/include/bits/select.h + mdp:/usr/include/bits/setjmp.h + mdp:/usr/include/bits/stdint-intn.h + mdp:/usr/include/bits/stdint-least.h + mdp:/usr/include/bits/stdint-uintn.h + mdp:/usr/include/bits/stdio_lim.h + mdp:/usr/include/bits/stdlib-float.h + mdp:/usr/include/bits/struct_mutex.h + mdp:/usr/include/bits/struct_rwlock.h + mdp:/usr/include/bits/syscall.h + mdp:/usr/include/bits/thread-shared-types.h + mdp:/usr/include/bits/time.h + mdp:/usr/include/bits/time64.h + mdp:/usr/include/bits/timesize.h + mdp:/usr/include/bits/timex.h + mdp:/usr/include/bits/types.h + mdp:/usr/include/bits/types/FILE.h + mdp:/usr/include/bits/types/__FILE.h + mdp:/usr/include/bits/types/__fpos64_t.h + mdp:/usr/include/bits/types/__fpos_t.h + mdp:/usr/include/bits/types/__locale_t.h + mdp:/usr/include/bits/types/__mbstate_t.h + mdp:/usr/include/bits/types/__sigset_t.h + mdp:/usr/include/bits/types/clock_t.h + mdp:/usr/include/bits/types/clockid_t.h + mdp:/usr/include/bits/types/cookie_io_functions_t.h + mdp:/usr/include/bits/types/error_t.h + mdp:/usr/include/bits/types/locale_t.h + mdp:/usr/include/bits/types/mbstate_t.h + mdp:/usr/include/bits/types/sigset_t.h + mdp:/usr/include/bits/types/struct_FILE.h + mdp:/usr/include/bits/types/struct___jmp_buf_tag.h + mdp:/usr/include/bits/types/struct_itimerspec.h + mdp:/usr/include/bits/types/struct_sched_param.h + mdp:/usr/include/bits/types/struct_timespec.h + mdp:/usr/include/bits/types/struct_timeval.h + mdp:/usr/include/bits/types/struct_tm.h + mdp:/usr/include/bits/types/time_t.h + mdp:/usr/include/bits/types/timer_t.h + mdp:/usr/include/bits/types/wint_t.h + mdp:/usr/include/bits/typesizes.h + mdp:/usr/include/bits/uintn-identity.h + mdp:/usr/include/bits/uio_lim.h + mdp:/usr/include/bits/unistd_ext.h + mdp:/usr/include/bits/waitflags.h + mdp:/usr/include/bits/waitstatus.h + mdp:/usr/include/bits/wchar.h + mdp:/usr/include/bits/wctype-wchar.h + mdp:/usr/include/bits/wordsize.h + mdp:/usr/include/bits/xopen_lim.h + mdp:/usr/include/c++/15/algorithm + mdp:/usr/include/c++/15/array + mdp:/usr/include/c++/15/atomic + mdp:/usr/include/c++/15/backward/auto_ptr.h + mdp:/usr/include/c++/15/backward/binders.h + mdp:/usr/include/c++/15/bit + mdp:/usr/include/c++/15/bits/algorithmfwd.h + mdp:/usr/include/c++/15/bits/align.h + mdp:/usr/include/c++/15/bits/alloc_traits.h + mdp:/usr/include/c++/15/bits/allocated_ptr.h + mdp:/usr/include/c++/15/bits/allocator.h + mdp:/usr/include/c++/15/bits/atomic_base.h + mdp:/usr/include/c++/15/bits/atomic_lockfree_defines.h + mdp:/usr/include/c++/15/bits/atomic_wait.h + mdp:/usr/include/c++/15/bits/basic_ios.h + mdp:/usr/include/c++/15/bits/basic_ios.tcc + mdp:/usr/include/c++/15/bits/basic_string.h + mdp:/usr/include/c++/15/bits/basic_string.tcc + mdp:/usr/include/c++/15/bits/char_traits.h + mdp:/usr/include/c++/15/bits/charconv.h + mdp:/usr/include/c++/15/bits/chrono.h + mdp:/usr/include/c++/15/bits/chrono_io.h + mdp:/usr/include/c++/15/bits/codecvt.h + mdp:/usr/include/c++/15/bits/concept_check.h + mdp:/usr/include/c++/15/bits/cpp_type_traits.h + mdp:/usr/include/c++/15/bits/cxxabi_forced.h + mdp:/usr/include/c++/15/bits/cxxabi_init_exception.h + mdp:/usr/include/c++/15/bits/enable_special_members.h + mdp:/usr/include/c++/15/bits/erase_if.h + mdp:/usr/include/c++/15/bits/exception.h + mdp:/usr/include/c++/15/bits/exception_defines.h + mdp:/usr/include/c++/15/bits/exception_ptr.h + mdp:/usr/include/c++/15/bits/functexcept.h + mdp:/usr/include/c++/15/bits/functional_hash.h + mdp:/usr/include/c++/15/bits/hash_bytes.h + mdp:/usr/include/c++/15/bits/hashtable.h + mdp:/usr/include/c++/15/bits/hashtable_policy.h + mdp:/usr/include/c++/15/bits/invoke.h + mdp:/usr/include/c++/15/bits/ios_base.h + mdp:/usr/include/c++/15/bits/istream.tcc + mdp:/usr/include/c++/15/bits/iterator_concepts.h + mdp:/usr/include/c++/15/bits/list.tcc + mdp:/usr/include/c++/15/bits/locale_classes.h + mdp:/usr/include/c++/15/bits/locale_classes.tcc + mdp:/usr/include/c++/15/bits/locale_conv.h + mdp:/usr/include/c++/15/bits/locale_facets.h + mdp:/usr/include/c++/15/bits/locale_facets.tcc + mdp:/usr/include/c++/15/bits/locale_facets_nonio.h + mdp:/usr/include/c++/15/bits/locale_facets_nonio.tcc + mdp:/usr/include/c++/15/bits/localefwd.h + mdp:/usr/include/c++/15/bits/max_size_type.h + mdp:/usr/include/c++/15/bits/memory_resource.h + mdp:/usr/include/c++/15/bits/memoryfwd.h + mdp:/usr/include/c++/15/bits/move.h + mdp:/usr/include/c++/15/bits/nested_exception.h + mdp:/usr/include/c++/15/bits/new_allocator.h + mdp:/usr/include/c++/15/bits/node_handle.h + mdp:/usr/include/c++/15/bits/ostream.h + mdp:/usr/include/c++/15/bits/ostream.tcc + mdp:/usr/include/c++/15/bits/ostream_insert.h + mdp:/usr/include/c++/15/bits/parse_numbers.h + mdp:/usr/include/c++/15/bits/postypes.h + mdp:/usr/include/c++/15/bits/predefined_ops.h + mdp:/usr/include/c++/15/bits/ptr_traits.h + mdp:/usr/include/c++/15/bits/quoted_string.h + mdp:/usr/include/c++/15/bits/range_access.h + mdp:/usr/include/c++/15/bits/ranges_algo.h + mdp:/usr/include/c++/15/bits/ranges_algobase.h + mdp:/usr/include/c++/15/bits/ranges_base.h + mdp:/usr/include/c++/15/bits/ranges_cmp.h + mdp:/usr/include/c++/15/bits/ranges_uninitialized.h + mdp:/usr/include/c++/15/bits/ranges_util.h + mdp:/usr/include/c++/15/bits/refwrap.h + mdp:/usr/include/c++/15/bits/requires_hosted.h + mdp:/usr/include/c++/15/bits/shared_ptr.h + mdp:/usr/include/c++/15/bits/shared_ptr_atomic.h + mdp:/usr/include/c++/15/bits/shared_ptr_base.h + mdp:/usr/include/c++/15/bits/specfun.h + mdp:/usr/include/c++/15/bits/sstream.tcc + mdp:/usr/include/c++/15/bits/std_abs.h + mdp:/usr/include/c++/15/bits/std_function.h + mdp:/usr/include/c++/15/bits/std_mutex.h + mdp:/usr/include/c++/15/bits/stl_algo.h + mdp:/usr/include/c++/15/bits/stl_algobase.h + mdp:/usr/include/c++/15/bits/stl_bvector.h + mdp:/usr/include/c++/15/bits/stl_construct.h + mdp:/usr/include/c++/15/bits/stl_function.h + mdp:/usr/include/c++/15/bits/stl_heap.h + mdp:/usr/include/c++/15/bits/stl_iterator.h + mdp:/usr/include/c++/15/bits/stl_iterator_base_funcs.h + mdp:/usr/include/c++/15/bits/stl_iterator_base_types.h + mdp:/usr/include/c++/15/bits/stl_list.h + mdp:/usr/include/c++/15/bits/stl_map.h + mdp:/usr/include/c++/15/bits/stl_multimap.h + mdp:/usr/include/c++/15/bits/stl_multiset.h + mdp:/usr/include/c++/15/bits/stl_numeric.h + mdp:/usr/include/c++/15/bits/stl_pair.h + mdp:/usr/include/c++/15/bits/stl_raw_storage_iter.h + mdp:/usr/include/c++/15/bits/stl_relops.h + mdp:/usr/include/c++/15/bits/stl_set.h + mdp:/usr/include/c++/15/bits/stl_tempbuf.h + mdp:/usr/include/c++/15/bits/stl_tree.h + mdp:/usr/include/c++/15/bits/stl_uninitialized.h + mdp:/usr/include/c++/15/bits/stl_vector.h + mdp:/usr/include/c++/15/bits/stream_iterator.h + mdp:/usr/include/c++/15/bits/streambuf.tcc + mdp:/usr/include/c++/15/bits/streambuf_iterator.h + mdp:/usr/include/c++/15/bits/string_view.tcc + mdp:/usr/include/c++/15/bits/stringfwd.h + mdp:/usr/include/c++/15/bits/uniform_int_dist.h + mdp:/usr/include/c++/15/bits/unique_ptr.h + mdp:/usr/include/c++/15/bits/unordered_map.h + mdp:/usr/include/c++/15/bits/unordered_set.h + mdp:/usr/include/c++/15/bits/uses_allocator.h + mdp:/usr/include/c++/15/bits/uses_allocator_args.h + mdp:/usr/include/c++/15/bits/utility.h + mdp:/usr/include/c++/15/bits/vector.tcc + mdp:/usr/include/c++/15/bits/version.h + mdp:/usr/include/c++/15/cassert + mdp:/usr/include/c++/15/cctype + mdp:/usr/include/c++/15/cerrno + mdp:/usr/include/c++/15/charconv + mdp:/usr/include/c++/15/chrono + mdp:/usr/include/c++/15/climits + mdp:/usr/include/c++/15/clocale + mdp:/usr/include/c++/15/cmath + mdp:/usr/include/c++/15/compare + mdp:/usr/include/c++/15/concepts + mdp:/usr/include/c++/15/cstddef + mdp:/usr/include/c++/15/cstdint + mdp:/usr/include/c++/15/cstdio + mdp:/usr/include/c++/15/cstdlib + mdp:/usr/include/c++/15/cstring + mdp:/usr/include/c++/15/ctime + mdp:/usr/include/c++/15/cwchar + mdp:/usr/include/c++/15/cwctype + mdp:/usr/include/c++/15/debug/assertions.h + mdp:/usr/include/c++/15/debug/debug.h + mdp:/usr/include/c++/15/exception + mdp:/usr/include/c++/15/ext/aligned_buffer.h + mdp:/usr/include/c++/15/ext/alloc_traits.h + mdp:/usr/include/c++/15/ext/atomicity.h + mdp:/usr/include/c++/15/ext/concurrence.h + mdp:/usr/include/c++/15/ext/numeric_traits.h + mdp:/usr/include/c++/15/ext/string_conversions.h + mdp:/usr/include/c++/15/ext/type_traits.h + mdp:/usr/include/c++/15/format + mdp:/usr/include/c++/15/functional + mdp:/usr/include/c++/15/initializer_list + mdp:/usr/include/c++/15/iomanip + mdp:/usr/include/c++/15/ios + mdp:/usr/include/c++/15/iosfwd + mdp:/usr/include/c++/15/istream + mdp:/usr/include/c++/15/iterator + mdp:/usr/include/c++/15/limits + mdp:/usr/include/c++/15/list + mdp:/usr/include/c++/15/locale + mdp:/usr/include/c++/15/map + mdp:/usr/include/c++/15/memory + mdp:/usr/include/c++/15/new + mdp:/usr/include/c++/15/numeric + mdp:/usr/include/c++/15/optional + mdp:/usr/include/c++/15/ostream + mdp:/usr/include/c++/15/pstl/execution_defs.h + mdp:/usr/include/c++/15/pstl/glue_numeric_defs.h + mdp:/usr/include/c++/15/pstl/pstl_config.h + mdp:/usr/include/c++/15/ratio + mdp:/usr/include/c++/15/set + mdp:/usr/include/c++/15/sstream + mdp:/usr/include/c++/15/stdexcept + mdp:/usr/include/c++/15/streambuf + mdp:/usr/include/c++/15/string + mdp:/usr/include/c++/15/string_view + mdp:/usr/include/c++/15/system_error + mdp:/usr/include/c++/15/tr1/bessel_function.tcc + mdp:/usr/include/c++/15/tr1/beta_function.tcc + mdp:/usr/include/c++/15/tr1/ell_integral.tcc + mdp:/usr/include/c++/15/tr1/exp_integral.tcc + mdp:/usr/include/c++/15/tr1/gamma.tcc + mdp:/usr/include/c++/15/tr1/hypergeometric.tcc + mdp:/usr/include/c++/15/tr1/legendre_function.tcc + mdp:/usr/include/c++/15/tr1/modified_bessel_func.tcc + mdp:/usr/include/c++/15/tr1/poly_hermite.tcc + mdp:/usr/include/c++/15/tr1/poly_laguerre.tcc + mdp:/usr/include/c++/15/tr1/riemann_zeta.tcc + mdp:/usr/include/c++/15/tr1/special_function_util.h + mdp:/usr/include/c++/15/tuple + mdp:/usr/include/c++/15/type_traits + mdp:/usr/include/c++/15/typeinfo + mdp:/usr/include/c++/15/unordered_map + mdp:/usr/include/c++/15/unordered_set + mdp:/usr/include/c++/15/utility + mdp:/usr/include/c++/15/variant + mdp:/usr/include/c++/15/vector + mdp:/usr/include/c++/15/version + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/atomic_word.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++allocator.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++config.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++locale.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/cpu_defines.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/ctype_base.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/ctype_inline.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/error_constants.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/gthr-default.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/gthr.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/messages_members.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/os_defines.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/time_members.h + mdp:/usr/include/ctype.h + mdp:/usr/include/endian.h + mdp:/usr/include/errno.h + mdp:/usr/include/features-time64.h + mdp:/usr/include/features.h + mdp:/usr/include/gnu/stubs-64.h + mdp:/usr/include/gnu/stubs.h + mdp:/usr/include/libintl.h + mdp:/usr/include/limits.h + mdp:/usr/include/linux/close_range.h + mdp:/usr/include/linux/errno.h + mdp:/usr/include/linux/limits.h + mdp:/usr/include/linux/posix_types.h + mdp:/usr/include/linux/sched/types.h + mdp:/usr/include/linux/stddef.h + mdp:/usr/include/linux/types.h + mdp:/usr/include/locale.h + mdp:/usr/include/pthread.h + mdp:/usr/include/qt6/QtCore/QHash + mdp:/usr/include/qt6/QtCore/QModelIndex + mdp:/usr/include/qt6/QtCore/QObject + mdp:/usr/include/qt6/QtCore/QPair + mdp:/usr/include/qt6/QtCore/q17memory.h + mdp:/usr/include/qt6/QtCore/q20functional.h + mdp:/usr/include/qt6/QtCore/q20iterator.h + mdp:/usr/include/qt6/QtCore/q20memory.h + mdp:/usr/include/qt6/QtCore/q20type_traits.h + mdp:/usr/include/qt6/QtCore/q20utility.h + mdp:/usr/include/qt6/QtCore/q23type_traits.h + mdp:/usr/include/qt6/QtCore/q23utility.h + mdp:/usr/include/qt6/QtCore/qabstractitemmodel.h + mdp:/usr/include/qt6/QtCore/qalgorithms.h + mdp:/usr/include/qt6/QtCore/qalloc.h + mdp:/usr/include/qt6/QtCore/qanystringview.h + mdp:/usr/include/qt6/QtCore/qarraydata.h + mdp:/usr/include/qt6/QtCore/qarraydataops.h + mdp:/usr/include/qt6/QtCore/qarraydatapointer.h + mdp:/usr/include/qt6/QtCore/qassert.h + mdp:/usr/include/qt6/QtCore/qatomic.h + mdp:/usr/include/qt6/QtCore/qatomic_cxx11.h + mdp:/usr/include/qt6/QtCore/qbasicatomic.h + mdp:/usr/include/qt6/QtCore/qbindingstorage.h + mdp:/usr/include/qt6/QtCore/qbytearray.h + mdp:/usr/include/qt6/QtCore/qbytearrayalgorithms.h + mdp:/usr/include/qt6/QtCore/qbytearraylist.h + mdp:/usr/include/qt6/QtCore/qbytearrayview.h + mdp:/usr/include/qt6/QtCore/qchar.h + mdp:/usr/include/qt6/QtCore/qcheckedint_impl.h + mdp:/usr/include/qt6/QtCore/qcompare.h + mdp:/usr/include/qt6/QtCore/qcompare_impl.h + mdp:/usr/include/qt6/QtCore/qcomparehelpers.h + mdp:/usr/include/qt6/QtCore/qcompilerdetection.h + mdp:/usr/include/qt6/QtCore/qconfig-64.h + mdp:/usr/include/qt6/QtCore/qconfig.h + mdp:/usr/include/qt6/QtCore/qconstructormacros.h + mdp:/usr/include/qt6/QtCore/qcontainerfwd.h + mdp:/usr/include/qt6/QtCore/qcontainerinfo.h + mdp:/usr/include/qt6/QtCore/qcontainertools_impl.h + mdp:/usr/include/qt6/QtCore/qcontiguouscache.h + mdp:/usr/include/qt6/QtCore/qdarwinhelpers.h + mdp:/usr/include/qt6/QtCore/qdatastream.h + mdp:/usr/include/qt6/QtCore/qdebug.h + mdp:/usr/include/qt6/QtCore/qendian.h + mdp:/usr/include/qt6/QtCore/qexceptionhandling.h + mdp:/usr/include/qt6/QtCore/qflags.h + mdp:/usr/include/qt6/QtCore/qfloat16.h + mdp:/usr/include/qt6/QtCore/qforeach.h + mdp:/usr/include/qt6/QtCore/qfunctionaltools_impl.h + mdp:/usr/include/qt6/QtCore/qfunctionpointer.h + mdp:/usr/include/qt6/QtCore/qgenericatomic.h + mdp:/usr/include/qt6/QtCore/qglobal.h + mdp:/usr/include/qt6/QtCore/qglobalstatic.h + mdp:/usr/include/qt6/QtCore/qhash.h + mdp:/usr/include/qt6/QtCore/qhashfunctions.h + mdp:/usr/include/qt6/QtCore/qiodevicebase.h + mdp:/usr/include/qt6/QtCore/qitemselectionmodel.h + mdp:/usr/include/qt6/QtCore/qiterable.h + mdp:/usr/include/qt6/QtCore/qiterator.h + mdp:/usr/include/qt6/QtCore/qlatin1stringview.h + mdp:/usr/include/qt6/QtCore/qline.h + mdp:/usr/include/qt6/QtCore/qlist.h + mdp:/usr/include/qt6/QtCore/qlocale.h + mdp:/usr/include/qt6/QtCore/qlogging.h + mdp:/usr/include/qt6/QtCore/qmalloc.h + mdp:/usr/include/qt6/QtCore/qmap.h + mdp:/usr/include/qt6/QtCore/qmargins.h + mdp:/usr/include/qt6/QtCore/qmath.h + mdp:/usr/include/qt6/QtCore/qmetacontainer.h + mdp:/usr/include/qt6/QtCore/qmetatype.h + mdp:/usr/include/qt6/QtCore/qminmax.h + mdp:/usr/include/qt6/QtCore/qnamespace.h + mdp:/usr/include/qt6/QtCore/qnumeric.h + mdp:/usr/include/qt6/QtCore/qobject.h + mdp:/usr/include/qt6/QtCore/qobject_impl.h + mdp:/usr/include/qt6/QtCore/qobjectdefs.h + mdp:/usr/include/qt6/QtCore/qobjectdefs_impl.h + mdp:/usr/include/qt6/QtCore/qoverload.h + mdp:/usr/include/qt6/QtCore/qpair.h + mdp:/usr/include/qt6/QtCore/qpoint.h + mdp:/usr/include/qt6/QtCore/qprocessordetection.h + mdp:/usr/include/qt6/QtCore/qrect.h + mdp:/usr/include/qt6/QtCore/qrefcount.h + mdp:/usr/include/qt6/QtCore/qregularexpression.h + mdp:/usr/include/qt6/QtCore/qscopedpointer.h + mdp:/usr/include/qt6/QtCore/qscopeguard.h + mdp:/usr/include/qt6/QtCore/qset.h + mdp:/usr/include/qt6/QtCore/qshareddata.h + mdp:/usr/include/qt6/QtCore/qshareddata_impl.h + mdp:/usr/include/qt6/QtCore/qsharedpointer.h + mdp:/usr/include/qt6/QtCore/qsharedpointer_impl.h + mdp:/usr/include/qt6/QtCore/qsize.h + mdp:/usr/include/qt6/QtCore/qspan.h + mdp:/usr/include/qt6/QtCore/qstdlibdetection.h + mdp:/usr/include/qt6/QtCore/qstring.h + mdp:/usr/include/qt6/QtCore/qstringalgorithms.h + mdp:/usr/include/qt6/QtCore/qstringbuilder.h + mdp:/usr/include/qt6/QtCore/qstringconverter.h + mdp:/usr/include/qt6/QtCore/qstringconverter_base.h + mdp:/usr/include/qt6/QtCore/qstringfwd.h + mdp:/usr/include/qt6/QtCore/qstringlist.h + mdp:/usr/include/qt6/QtCore/qstringmatcher.h + mdp:/usr/include/qt6/QtCore/qstringtokenizer.h + mdp:/usr/include/qt6/QtCore/qstringview.h + mdp:/usr/include/qt6/QtCore/qswap.h + mdp:/usr/include/qt6/QtCore/qsysinfo.h + mdp:/usr/include/qt6/QtCore/qsystemdetection.h + mdp:/usr/include/qt6/QtCore/qtaggedpointer.h + mdp:/usr/include/qt6/QtCore/qtclasshelpermacros.h + mdp:/usr/include/qt6/QtCore/qtconfiginclude.h + mdp:/usr/include/qt6/QtCore/qtconfigmacros.h + mdp:/usr/include/qt6/QtCore/qtcore-config.h + mdp:/usr/include/qt6/QtCore/qtcoreexports.h + mdp:/usr/include/qt6/QtCore/qtcoreglobal.h + mdp:/usr/include/qt6/QtCore/qtdeprecationdefinitions.h + mdp:/usr/include/qt6/QtCore/qtdeprecationmarkers.h + mdp:/usr/include/qt6/QtCore/qtenvironmentvariables.h + mdp:/usr/include/qt6/QtCore/qtextstream.h + mdp:/usr/include/qt6/QtCore/qtformat_impl.h + mdp:/usr/include/qt6/QtCore/qtmetamacros.h + mdp:/usr/include/qt6/QtCore/qtnoop.h + mdp:/usr/include/qt6/QtCore/qtpreprocessorsupport.h + mdp:/usr/include/qt6/QtCore/qtresource.h + mdp:/usr/include/qt6/QtCore/qttranslation.h + mdp:/usr/include/qt6/QtCore/qttypetraits.h + mdp:/usr/include/qt6/QtCore/qtversion.h + mdp:/usr/include/qt6/QtCore/qtversionchecks.h + mdp:/usr/include/qt6/QtCore/qtypeinfo.h + mdp:/usr/include/qt6/QtCore/qtypes.h + mdp:/usr/include/qt6/QtCore/qutf8stringview.h + mdp:/usr/include/qt6/QtCore/qvariant.h + mdp:/usr/include/qt6/QtCore/qvarlengtharray.h + mdp:/usr/include/qt6/QtCore/qversiontagging.h + mdp:/usr/include/qt6/QtCore/qxptype_traits.h + mdp:/usr/include/qt6/QtCore/qyieldcpu.h + mdp:/usr/include/qt6/QtGui/QPixmap + mdp:/usr/include/qt6/QtGui/qaction.h + mdp:/usr/include/qt6/QtGui/qbitmap.h + mdp:/usr/include/qt6/QtGui/qbrush.h + mdp:/usr/include/qt6/QtGui/qcolor.h + mdp:/usr/include/qt6/QtGui/qcursor.h + mdp:/usr/include/qt6/QtGui/qfont.h + mdp:/usr/include/qt6/QtGui/qfontinfo.h + mdp:/usr/include/qt6/QtGui/qfontmetrics.h + mdp:/usr/include/qt6/QtGui/qfontvariableaxis.h + mdp:/usr/include/qt6/QtGui/qicon.h + mdp:/usr/include/qt6/QtGui/qimage.h + mdp:/usr/include/qt6/QtGui/qkeysequence.h + mdp:/usr/include/qt6/QtGui/qpaintdevice.h + mdp:/usr/include/qt6/QtGui/qpalette.h + mdp:/usr/include/qt6/QtGui/qpixelformat.h + mdp:/usr/include/qt6/QtGui/qpixmap.h + mdp:/usr/include/qt6/QtGui/qpolygon.h + mdp:/usr/include/qt6/QtGui/qregion.h + mdp:/usr/include/qt6/QtGui/qrgb.h + mdp:/usr/include/qt6/QtGui/qrgba64.h + mdp:/usr/include/qt6/QtGui/qtgui-config.h + mdp:/usr/include/qt6/QtGui/qtguiexports.h + mdp:/usr/include/qt6/QtGui/qtguiglobal.h + mdp:/usr/include/qt6/QtGui/qtransform.h + mdp:/usr/include/qt6/QtGui/qvalidator.h + mdp:/usr/include/qt6/QtGui/qwindowdefs.h + mdp:/usr/include/qt6/QtWidgets/QAbstractItemView + mdp:/usr/include/qt6/QtWidgets/qabstractitemdelegate.h + mdp:/usr/include/qt6/QtWidgets/qabstractitemview.h + mdp:/usr/include/qt6/QtWidgets/qabstractscrollarea.h + mdp:/usr/include/qt6/QtWidgets/qabstractslider.h + mdp:/usr/include/qt6/QtWidgets/qabstractspinbox.h + mdp:/usr/include/qt6/QtWidgets/qframe.h + mdp:/usr/include/qt6/QtWidgets/qrubberband.h + mdp:/usr/include/qt6/QtWidgets/qsizepolicy.h + mdp:/usr/include/qt6/QtWidgets/qslider.h + mdp:/usr/include/qt6/QtWidgets/qstyle.h + mdp:/usr/include/qt6/QtWidgets/qstyleoption.h + mdp:/usr/include/qt6/QtWidgets/qtabbar.h + mdp:/usr/include/qt6/QtWidgets/qtabwidget.h + mdp:/usr/include/qt6/QtWidgets/qtwidgets-config.h + mdp:/usr/include/qt6/QtWidgets/qtwidgetsexports.h + mdp:/usr/include/qt6/QtWidgets/qtwidgetsglobal.h + mdp:/usr/include/qt6/QtWidgets/qwidget.h + mdp:/usr/include/sched.h + mdp:/usr/include/stdc-predef.h + mdp:/usr/include/stdint.h + mdp:/usr/include/stdio.h + mdp:/usr/include/stdlib.h + mdp:/usr/include/string.h + mdp:/usr/include/strings.h + mdp:/usr/include/sys/cdefs.h + mdp:/usr/include/sys/select.h + mdp:/usr/include/sys/single_threaded.h + mdp:/usr/include/sys/syscall.h + mdp:/usr/include/sys/types.h + mdp:/usr/include/syscall.h + mdp:/usr/include/time.h + mdp:/usr/include/unistd.h + mdp:/usr/include/wchar.h + mdp:/usr/include/wctype.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stdarg.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stdbool.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stddef.h +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/project_db.cpp +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/project_sequence_grouping_proxy_model.h + mmc:Q_OBJECT + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/kassetmanagerqt_autogen/moc_predefs.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/project_sequence_grouping_proxy_model.h + mdp:/usr/include/alloca.h + mdp:/usr/include/asm-generic/bitsperlong.h + mdp:/usr/include/asm-generic/errno-base.h + mdp:/usr/include/asm-generic/errno.h + mdp:/usr/include/asm-generic/int-ll64.h + mdp:/usr/include/asm-generic/posix_types.h + mdp:/usr/include/asm-generic/types.h + mdp:/usr/include/asm/bitsperlong.h + mdp:/usr/include/asm/errno.h + mdp:/usr/include/asm/posix_types.h + mdp:/usr/include/asm/posix_types_64.h + mdp:/usr/include/asm/types.h + mdp:/usr/include/asm/unistd.h + mdp:/usr/include/asm/unistd_64.h + mdp:/usr/include/assert.h + mdp:/usr/include/bits/atomic_wide_counter.h + mdp:/usr/include/bits/byteswap.h + mdp:/usr/include/bits/confname.h + mdp:/usr/include/bits/cpu-set.h + mdp:/usr/include/bits/endian.h + mdp:/usr/include/bits/endianness.h + mdp:/usr/include/bits/environments.h + mdp:/usr/include/bits/errno.h + mdp:/usr/include/bits/floatn-common.h + mdp:/usr/include/bits/floatn.h + mdp:/usr/include/bits/getopt_core.h + mdp:/usr/include/bits/getopt_posix.h + mdp:/usr/include/bits/libc-header-start.h + mdp:/usr/include/bits/local_lim.h + mdp:/usr/include/bits/locale.h + mdp:/usr/include/bits/long-double.h + mdp:/usr/include/bits/posix1_lim.h + mdp:/usr/include/bits/posix2_lim.h + mdp:/usr/include/bits/posix_opt.h + mdp:/usr/include/bits/pthread_stack_min-dynamic.h + mdp:/usr/include/bits/pthreadtypes-arch.h + mdp:/usr/include/bits/pthreadtypes.h + mdp:/usr/include/bits/sched.h + mdp:/usr/include/bits/select.h + mdp:/usr/include/bits/setjmp.h + mdp:/usr/include/bits/stdint-intn.h + mdp:/usr/include/bits/stdint-least.h + mdp:/usr/include/bits/stdint-uintn.h + mdp:/usr/include/bits/stdio_lim.h + mdp:/usr/include/bits/stdlib-float.h + mdp:/usr/include/bits/struct_mutex.h + mdp:/usr/include/bits/struct_rwlock.h + mdp:/usr/include/bits/syscall.h + mdp:/usr/include/bits/thread-shared-types.h + mdp:/usr/include/bits/time.h + mdp:/usr/include/bits/time64.h + mdp:/usr/include/bits/timesize.h + mdp:/usr/include/bits/timex.h + mdp:/usr/include/bits/types.h + mdp:/usr/include/bits/types/FILE.h + mdp:/usr/include/bits/types/__FILE.h + mdp:/usr/include/bits/types/__fpos64_t.h + mdp:/usr/include/bits/types/__fpos_t.h + mdp:/usr/include/bits/types/__locale_t.h + mdp:/usr/include/bits/types/__mbstate_t.h + mdp:/usr/include/bits/types/__sigset_t.h + mdp:/usr/include/bits/types/clock_t.h + mdp:/usr/include/bits/types/clockid_t.h + mdp:/usr/include/bits/types/cookie_io_functions_t.h + mdp:/usr/include/bits/types/error_t.h + mdp:/usr/include/bits/types/locale_t.h + mdp:/usr/include/bits/types/mbstate_t.h + mdp:/usr/include/bits/types/sigset_t.h + mdp:/usr/include/bits/types/struct_FILE.h + mdp:/usr/include/bits/types/struct___jmp_buf_tag.h + mdp:/usr/include/bits/types/struct_itimerspec.h + mdp:/usr/include/bits/types/struct_sched_param.h + mdp:/usr/include/bits/types/struct_timespec.h + mdp:/usr/include/bits/types/struct_timeval.h + mdp:/usr/include/bits/types/struct_tm.h + mdp:/usr/include/bits/types/time_t.h + mdp:/usr/include/bits/types/timer_t.h + mdp:/usr/include/bits/types/wint_t.h + mdp:/usr/include/bits/typesizes.h + mdp:/usr/include/bits/uintn-identity.h + mdp:/usr/include/bits/uio_lim.h + mdp:/usr/include/bits/unistd_ext.h + mdp:/usr/include/bits/waitflags.h + mdp:/usr/include/bits/waitstatus.h + mdp:/usr/include/bits/wchar.h + mdp:/usr/include/bits/wctype-wchar.h + mdp:/usr/include/bits/wordsize.h + mdp:/usr/include/bits/xopen_lim.h + mdp:/usr/include/c++/15/algorithm + mdp:/usr/include/c++/15/array + mdp:/usr/include/c++/15/atomic + mdp:/usr/include/c++/15/backward/auto_ptr.h + mdp:/usr/include/c++/15/backward/binders.h + mdp:/usr/include/c++/15/bit + mdp:/usr/include/c++/15/bits/algorithmfwd.h + mdp:/usr/include/c++/15/bits/align.h + mdp:/usr/include/c++/15/bits/alloc_traits.h + mdp:/usr/include/c++/15/bits/allocated_ptr.h + mdp:/usr/include/c++/15/bits/allocator.h + mdp:/usr/include/c++/15/bits/atomic_base.h + mdp:/usr/include/c++/15/bits/atomic_lockfree_defines.h + mdp:/usr/include/c++/15/bits/atomic_wait.h + mdp:/usr/include/c++/15/bits/basic_ios.h + mdp:/usr/include/c++/15/bits/basic_ios.tcc + mdp:/usr/include/c++/15/bits/basic_string.h + mdp:/usr/include/c++/15/bits/basic_string.tcc + mdp:/usr/include/c++/15/bits/char_traits.h + mdp:/usr/include/c++/15/bits/charconv.h + mdp:/usr/include/c++/15/bits/chrono.h + mdp:/usr/include/c++/15/bits/chrono_io.h + mdp:/usr/include/c++/15/bits/codecvt.h + mdp:/usr/include/c++/15/bits/concept_check.h + mdp:/usr/include/c++/15/bits/cpp_type_traits.h + mdp:/usr/include/c++/15/bits/cxxabi_forced.h + mdp:/usr/include/c++/15/bits/cxxabi_init_exception.h + mdp:/usr/include/c++/15/bits/enable_special_members.h + mdp:/usr/include/c++/15/bits/erase_if.h + mdp:/usr/include/c++/15/bits/exception.h + mdp:/usr/include/c++/15/bits/exception_defines.h + mdp:/usr/include/c++/15/bits/exception_ptr.h + mdp:/usr/include/c++/15/bits/functexcept.h + mdp:/usr/include/c++/15/bits/functional_hash.h + mdp:/usr/include/c++/15/bits/hash_bytes.h + mdp:/usr/include/c++/15/bits/hashtable.h + mdp:/usr/include/c++/15/bits/hashtable_policy.h + mdp:/usr/include/c++/15/bits/invoke.h + mdp:/usr/include/c++/15/bits/ios_base.h + mdp:/usr/include/c++/15/bits/istream.tcc + mdp:/usr/include/c++/15/bits/iterator_concepts.h + mdp:/usr/include/c++/15/bits/list.tcc + mdp:/usr/include/c++/15/bits/locale_classes.h + mdp:/usr/include/c++/15/bits/locale_classes.tcc + mdp:/usr/include/c++/15/bits/locale_conv.h + mdp:/usr/include/c++/15/bits/locale_facets.h + mdp:/usr/include/c++/15/bits/locale_facets.tcc + mdp:/usr/include/c++/15/bits/locale_facets_nonio.h + mdp:/usr/include/c++/15/bits/locale_facets_nonio.tcc + mdp:/usr/include/c++/15/bits/localefwd.h + mdp:/usr/include/c++/15/bits/max_size_type.h + mdp:/usr/include/c++/15/bits/memory_resource.h + mdp:/usr/include/c++/15/bits/memoryfwd.h + mdp:/usr/include/c++/15/bits/move.h + mdp:/usr/include/c++/15/bits/nested_exception.h + mdp:/usr/include/c++/15/bits/new_allocator.h + mdp:/usr/include/c++/15/bits/node_handle.h + mdp:/usr/include/c++/15/bits/ostream.h + mdp:/usr/include/c++/15/bits/ostream.tcc + mdp:/usr/include/c++/15/bits/ostream_insert.h + mdp:/usr/include/c++/15/bits/parse_numbers.h + mdp:/usr/include/c++/15/bits/postypes.h + mdp:/usr/include/c++/15/bits/predefined_ops.h + mdp:/usr/include/c++/15/bits/ptr_traits.h + mdp:/usr/include/c++/15/bits/quoted_string.h + mdp:/usr/include/c++/15/bits/range_access.h + mdp:/usr/include/c++/15/bits/ranges_algo.h + mdp:/usr/include/c++/15/bits/ranges_algobase.h + mdp:/usr/include/c++/15/bits/ranges_base.h + mdp:/usr/include/c++/15/bits/ranges_cmp.h + mdp:/usr/include/c++/15/bits/ranges_uninitialized.h + mdp:/usr/include/c++/15/bits/ranges_util.h + mdp:/usr/include/c++/15/bits/refwrap.h + mdp:/usr/include/c++/15/bits/requires_hosted.h + mdp:/usr/include/c++/15/bits/shared_ptr.h + mdp:/usr/include/c++/15/bits/shared_ptr_atomic.h + mdp:/usr/include/c++/15/bits/shared_ptr_base.h + mdp:/usr/include/c++/15/bits/specfun.h + mdp:/usr/include/c++/15/bits/sstream.tcc + mdp:/usr/include/c++/15/bits/std_abs.h + mdp:/usr/include/c++/15/bits/std_function.h + mdp:/usr/include/c++/15/bits/std_mutex.h + mdp:/usr/include/c++/15/bits/stl_algo.h + mdp:/usr/include/c++/15/bits/stl_algobase.h + mdp:/usr/include/c++/15/bits/stl_bvector.h + mdp:/usr/include/c++/15/bits/stl_construct.h + mdp:/usr/include/c++/15/bits/stl_function.h + mdp:/usr/include/c++/15/bits/stl_heap.h + mdp:/usr/include/c++/15/bits/stl_iterator.h + mdp:/usr/include/c++/15/bits/stl_iterator_base_funcs.h + mdp:/usr/include/c++/15/bits/stl_iterator_base_types.h + mdp:/usr/include/c++/15/bits/stl_list.h + mdp:/usr/include/c++/15/bits/stl_map.h + mdp:/usr/include/c++/15/bits/stl_multimap.h + mdp:/usr/include/c++/15/bits/stl_multiset.h + mdp:/usr/include/c++/15/bits/stl_numeric.h + mdp:/usr/include/c++/15/bits/stl_pair.h + mdp:/usr/include/c++/15/bits/stl_raw_storage_iter.h + mdp:/usr/include/c++/15/bits/stl_relops.h + mdp:/usr/include/c++/15/bits/stl_set.h + mdp:/usr/include/c++/15/bits/stl_tempbuf.h + mdp:/usr/include/c++/15/bits/stl_tree.h + mdp:/usr/include/c++/15/bits/stl_uninitialized.h + mdp:/usr/include/c++/15/bits/stl_vector.h + mdp:/usr/include/c++/15/bits/stream_iterator.h + mdp:/usr/include/c++/15/bits/streambuf.tcc + mdp:/usr/include/c++/15/bits/streambuf_iterator.h + mdp:/usr/include/c++/15/bits/string_view.tcc + mdp:/usr/include/c++/15/bits/stringfwd.h + mdp:/usr/include/c++/15/bits/uniform_int_dist.h + mdp:/usr/include/c++/15/bits/unique_ptr.h + mdp:/usr/include/c++/15/bits/unordered_map.h + mdp:/usr/include/c++/15/bits/unordered_set.h + mdp:/usr/include/c++/15/bits/uses_allocator.h + mdp:/usr/include/c++/15/bits/uses_allocator_args.h + mdp:/usr/include/c++/15/bits/utility.h + mdp:/usr/include/c++/15/bits/vector.tcc + mdp:/usr/include/c++/15/bits/version.h + mdp:/usr/include/c++/15/cctype + mdp:/usr/include/c++/15/cerrno + mdp:/usr/include/c++/15/charconv + mdp:/usr/include/c++/15/chrono + mdp:/usr/include/c++/15/climits + mdp:/usr/include/c++/15/clocale + mdp:/usr/include/c++/15/cmath + mdp:/usr/include/c++/15/compare + mdp:/usr/include/c++/15/concepts + mdp:/usr/include/c++/15/cstddef + mdp:/usr/include/c++/15/cstdint + mdp:/usr/include/c++/15/cstdio + mdp:/usr/include/c++/15/cstdlib + mdp:/usr/include/c++/15/cstring + mdp:/usr/include/c++/15/ctime + mdp:/usr/include/c++/15/cwchar + mdp:/usr/include/c++/15/cwctype + mdp:/usr/include/c++/15/debug/assertions.h + mdp:/usr/include/c++/15/debug/debug.h + mdp:/usr/include/c++/15/exception + mdp:/usr/include/c++/15/ext/aligned_buffer.h + mdp:/usr/include/c++/15/ext/alloc_traits.h + mdp:/usr/include/c++/15/ext/atomicity.h + mdp:/usr/include/c++/15/ext/concurrence.h + mdp:/usr/include/c++/15/ext/numeric_traits.h + mdp:/usr/include/c++/15/ext/string_conversions.h + mdp:/usr/include/c++/15/ext/type_traits.h + mdp:/usr/include/c++/15/format + mdp:/usr/include/c++/15/functional + mdp:/usr/include/c++/15/initializer_list + mdp:/usr/include/c++/15/iomanip + mdp:/usr/include/c++/15/ios + mdp:/usr/include/c++/15/iosfwd + mdp:/usr/include/c++/15/istream + mdp:/usr/include/c++/15/iterator + mdp:/usr/include/c++/15/limits + mdp:/usr/include/c++/15/list + mdp:/usr/include/c++/15/locale + mdp:/usr/include/c++/15/map + mdp:/usr/include/c++/15/memory + mdp:/usr/include/c++/15/new + mdp:/usr/include/c++/15/numeric + mdp:/usr/include/c++/15/optional + mdp:/usr/include/c++/15/ostream + mdp:/usr/include/c++/15/pstl/execution_defs.h + mdp:/usr/include/c++/15/pstl/glue_numeric_defs.h + mdp:/usr/include/c++/15/pstl/pstl_config.h + mdp:/usr/include/c++/15/ratio + mdp:/usr/include/c++/15/set + mdp:/usr/include/c++/15/sstream + mdp:/usr/include/c++/15/stdexcept + mdp:/usr/include/c++/15/streambuf + mdp:/usr/include/c++/15/string + mdp:/usr/include/c++/15/string_view + mdp:/usr/include/c++/15/system_error + mdp:/usr/include/c++/15/tr1/bessel_function.tcc + mdp:/usr/include/c++/15/tr1/beta_function.tcc + mdp:/usr/include/c++/15/tr1/ell_integral.tcc + mdp:/usr/include/c++/15/tr1/exp_integral.tcc + mdp:/usr/include/c++/15/tr1/gamma.tcc + mdp:/usr/include/c++/15/tr1/hypergeometric.tcc + mdp:/usr/include/c++/15/tr1/legendre_function.tcc + mdp:/usr/include/c++/15/tr1/modified_bessel_func.tcc + mdp:/usr/include/c++/15/tr1/poly_hermite.tcc + mdp:/usr/include/c++/15/tr1/poly_laguerre.tcc + mdp:/usr/include/c++/15/tr1/riemann_zeta.tcc + mdp:/usr/include/c++/15/tr1/special_function_util.h + mdp:/usr/include/c++/15/tuple + mdp:/usr/include/c++/15/type_traits + mdp:/usr/include/c++/15/typeinfo + mdp:/usr/include/c++/15/unordered_map + mdp:/usr/include/c++/15/unordered_set + mdp:/usr/include/c++/15/utility + mdp:/usr/include/c++/15/variant + mdp:/usr/include/c++/15/vector + mdp:/usr/include/c++/15/version + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/atomic_word.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++allocator.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++config.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++locale.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/cpu_defines.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/ctype_base.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/ctype_inline.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/error_constants.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/gthr-default.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/gthr.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/messages_members.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/os_defines.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/time_members.h + mdp:/usr/include/ctype.h + mdp:/usr/include/endian.h + mdp:/usr/include/errno.h + mdp:/usr/include/features-time64.h + mdp:/usr/include/features.h + mdp:/usr/include/gnu/stubs-64.h + mdp:/usr/include/gnu/stubs.h + mdp:/usr/include/libintl.h + mdp:/usr/include/limits.h + mdp:/usr/include/linux/close_range.h + mdp:/usr/include/linux/errno.h + mdp:/usr/include/linux/limits.h + mdp:/usr/include/linux/posix_types.h + mdp:/usr/include/linux/sched/types.h + mdp:/usr/include/linux/stddef.h + mdp:/usr/include/linux/types.h + mdp:/usr/include/locale.h + mdp:/usr/include/pthread.h + mdp:/usr/include/qt6/QtCore/QAbstractProxyModel + mdp:/usr/include/qt6/QtCore/QString + mdp:/usr/include/qt6/QtCore/QVector + mdp:/usr/include/qt6/QtCore/q17memory.h + mdp:/usr/include/qt6/QtCore/q20functional.h + mdp:/usr/include/qt6/QtCore/q20memory.h + mdp:/usr/include/qt6/QtCore/q20type_traits.h + mdp:/usr/include/qt6/QtCore/q20utility.h + mdp:/usr/include/qt6/QtCore/q23type_traits.h + mdp:/usr/include/qt6/QtCore/q23utility.h + mdp:/usr/include/qt6/QtCore/qabstractitemmodel.h + mdp:/usr/include/qt6/QtCore/qabstractproxymodel.h + mdp:/usr/include/qt6/QtCore/qalgorithms.h + mdp:/usr/include/qt6/QtCore/qalloc.h + mdp:/usr/include/qt6/QtCore/qanystringview.h + mdp:/usr/include/qt6/QtCore/qarraydata.h + mdp:/usr/include/qt6/QtCore/qarraydataops.h + mdp:/usr/include/qt6/QtCore/qarraydatapointer.h + mdp:/usr/include/qt6/QtCore/qassert.h + mdp:/usr/include/qt6/QtCore/qatomic.h + mdp:/usr/include/qt6/QtCore/qatomic_cxx11.h + mdp:/usr/include/qt6/QtCore/qbasicatomic.h + mdp:/usr/include/qt6/QtCore/qbindingstorage.h + mdp:/usr/include/qt6/QtCore/qbytearray.h + mdp:/usr/include/qt6/QtCore/qbytearrayalgorithms.h + mdp:/usr/include/qt6/QtCore/qbytearraylist.h + mdp:/usr/include/qt6/QtCore/qbytearrayview.h + mdp:/usr/include/qt6/QtCore/qchar.h + mdp:/usr/include/qt6/QtCore/qcompare.h + mdp:/usr/include/qt6/QtCore/qcompare_impl.h + mdp:/usr/include/qt6/QtCore/qcomparehelpers.h + mdp:/usr/include/qt6/QtCore/qcompilerdetection.h + mdp:/usr/include/qt6/QtCore/qconfig-64.h + mdp:/usr/include/qt6/QtCore/qconfig.h + mdp:/usr/include/qt6/QtCore/qconstructormacros.h + mdp:/usr/include/qt6/QtCore/qcontainerfwd.h + mdp:/usr/include/qt6/QtCore/qcontainerinfo.h + mdp:/usr/include/qt6/QtCore/qcontainertools_impl.h + mdp:/usr/include/qt6/QtCore/qcontiguouscache.h + mdp:/usr/include/qt6/QtCore/qdarwinhelpers.h + mdp:/usr/include/qt6/QtCore/qdatastream.h + mdp:/usr/include/qt6/QtCore/qdebug.h + mdp:/usr/include/qt6/QtCore/qexceptionhandling.h + mdp:/usr/include/qt6/QtCore/qflags.h + mdp:/usr/include/qt6/QtCore/qfloat16.h + mdp:/usr/include/qt6/QtCore/qforeach.h + mdp:/usr/include/qt6/QtCore/qfunctionaltools_impl.h + mdp:/usr/include/qt6/QtCore/qfunctionpointer.h + mdp:/usr/include/qt6/QtCore/qgenericatomic.h + mdp:/usr/include/qt6/QtCore/qglobal.h + mdp:/usr/include/qt6/QtCore/qglobalstatic.h + mdp:/usr/include/qt6/QtCore/qhash.h + mdp:/usr/include/qt6/QtCore/qhashfunctions.h + mdp:/usr/include/qt6/QtCore/qiodevicebase.h + mdp:/usr/include/qt6/QtCore/qiterable.h + mdp:/usr/include/qt6/QtCore/qiterator.h + mdp:/usr/include/qt6/QtCore/qlatin1stringview.h + mdp:/usr/include/qt6/QtCore/qlist.h + mdp:/usr/include/qt6/QtCore/qlogging.h + mdp:/usr/include/qt6/QtCore/qmalloc.h + mdp:/usr/include/qt6/QtCore/qmap.h + mdp:/usr/include/qt6/QtCore/qmath.h + mdp:/usr/include/qt6/QtCore/qmetacontainer.h + mdp:/usr/include/qt6/QtCore/qmetatype.h + mdp:/usr/include/qt6/QtCore/qminmax.h + mdp:/usr/include/qt6/QtCore/qnamespace.h + mdp:/usr/include/qt6/QtCore/qnumeric.h + mdp:/usr/include/qt6/QtCore/qobject.h + mdp:/usr/include/qt6/QtCore/qobject_impl.h + mdp:/usr/include/qt6/QtCore/qobjectdefs.h + mdp:/usr/include/qt6/QtCore/qobjectdefs_impl.h + mdp:/usr/include/qt6/QtCore/qoverload.h + mdp:/usr/include/qt6/QtCore/qpair.h + mdp:/usr/include/qt6/QtCore/qprocessordetection.h + mdp:/usr/include/qt6/QtCore/qrefcount.h + mdp:/usr/include/qt6/QtCore/qscopedpointer.h + mdp:/usr/include/qt6/QtCore/qscopeguard.h + mdp:/usr/include/qt6/QtCore/qset.h + mdp:/usr/include/qt6/QtCore/qshareddata.h + mdp:/usr/include/qt6/QtCore/qshareddata_impl.h + mdp:/usr/include/qt6/QtCore/qsharedpointer.h + mdp:/usr/include/qt6/QtCore/qsharedpointer_impl.h + mdp:/usr/include/qt6/QtCore/qstdlibdetection.h + mdp:/usr/include/qt6/QtCore/qstring.h + mdp:/usr/include/qt6/QtCore/qstringalgorithms.h + mdp:/usr/include/qt6/QtCore/qstringbuilder.h + mdp:/usr/include/qt6/QtCore/qstringconverter.h + mdp:/usr/include/qt6/QtCore/qstringconverter_base.h + mdp:/usr/include/qt6/QtCore/qstringfwd.h + mdp:/usr/include/qt6/QtCore/qstringlist.h + mdp:/usr/include/qt6/QtCore/qstringmatcher.h + mdp:/usr/include/qt6/QtCore/qstringtokenizer.h + mdp:/usr/include/qt6/QtCore/qstringview.h + mdp:/usr/include/qt6/QtCore/qswap.h + mdp:/usr/include/qt6/QtCore/qsysinfo.h + mdp:/usr/include/qt6/QtCore/qsystemdetection.h + mdp:/usr/include/qt6/QtCore/qtaggedpointer.h + mdp:/usr/include/qt6/QtCore/qtclasshelpermacros.h + mdp:/usr/include/qt6/QtCore/qtconfiginclude.h + mdp:/usr/include/qt6/QtCore/qtconfigmacros.h + mdp:/usr/include/qt6/QtCore/qtcore-config.h + mdp:/usr/include/qt6/QtCore/qtcoreexports.h + mdp:/usr/include/qt6/QtCore/qtcoreglobal.h + mdp:/usr/include/qt6/QtCore/qtdeprecationdefinitions.h + mdp:/usr/include/qt6/QtCore/qtdeprecationmarkers.h + mdp:/usr/include/qt6/QtCore/qtenvironmentvariables.h + mdp:/usr/include/qt6/QtCore/qtextstream.h + mdp:/usr/include/qt6/QtCore/qtformat_impl.h + mdp:/usr/include/qt6/QtCore/qtmetamacros.h + mdp:/usr/include/qt6/QtCore/qtnoop.h + mdp:/usr/include/qt6/QtCore/qtpreprocessorsupport.h + mdp:/usr/include/qt6/QtCore/qtresource.h + mdp:/usr/include/qt6/QtCore/qttranslation.h + mdp:/usr/include/qt6/QtCore/qttypetraits.h + mdp:/usr/include/qt6/QtCore/qtversion.h + mdp:/usr/include/qt6/QtCore/qtversionchecks.h + mdp:/usr/include/qt6/QtCore/qtypeinfo.h + mdp:/usr/include/qt6/QtCore/qtypes.h + mdp:/usr/include/qt6/QtCore/qutf8stringview.h + mdp:/usr/include/qt6/QtCore/qvariant.h + mdp:/usr/include/qt6/QtCore/qvarlengtharray.h + mdp:/usr/include/qt6/QtCore/qvector.h + mdp:/usr/include/qt6/QtCore/qversiontagging.h + mdp:/usr/include/qt6/QtCore/qxptype_traits.h + mdp:/usr/include/qt6/QtCore/qyieldcpu.h + mdp:/usr/include/sched.h + mdp:/usr/include/stdc-predef.h + mdp:/usr/include/stdint.h + mdp:/usr/include/stdio.h + mdp:/usr/include/stdlib.h + mdp:/usr/include/string.h + mdp:/usr/include/strings.h + mdp:/usr/include/sys/cdefs.h + mdp:/usr/include/sys/select.h + mdp:/usr/include/sys/single_threaded.h + mdp:/usr/include/sys/syscall.h + mdp:/usr/include/sys/types.h + mdp:/usr/include/syscall.h + mdp:/usr/include/time.h + mdp:/usr/include/unistd.h + mdp:/usr/include/wchar.h + mdp:/usr/include/wctype.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stdarg.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stdbool.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stddef.h +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/theme_manager.cpp +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/project_assets_model.cpp +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/utils.h +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/video_metadata.h +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/asset_item_delegate.h + mmc:Q_OBJECT + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/kassetmanagerqt_autogen/moc_predefs.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/asset_item_delegate.h + mdp:/usr/include/alloca.h + mdp:/usr/include/asm-generic/bitsperlong.h + mdp:/usr/include/asm-generic/errno-base.h + mdp:/usr/include/asm-generic/errno.h + mdp:/usr/include/asm-generic/int-ll64.h + mdp:/usr/include/asm-generic/posix_types.h + mdp:/usr/include/asm-generic/types.h + mdp:/usr/include/asm/bitsperlong.h + mdp:/usr/include/asm/errno.h + mdp:/usr/include/asm/posix_types.h + mdp:/usr/include/asm/posix_types_64.h + mdp:/usr/include/asm/types.h + mdp:/usr/include/asm/unistd.h + mdp:/usr/include/asm/unistd_64.h + mdp:/usr/include/assert.h + mdp:/usr/include/bits/atomic_wide_counter.h + mdp:/usr/include/bits/byteswap.h + mdp:/usr/include/bits/confname.h + mdp:/usr/include/bits/cpu-set.h + mdp:/usr/include/bits/endian.h + mdp:/usr/include/bits/endianness.h + mdp:/usr/include/bits/environments.h + mdp:/usr/include/bits/errno.h + mdp:/usr/include/bits/floatn-common.h + mdp:/usr/include/bits/floatn.h + mdp:/usr/include/bits/getopt_core.h + mdp:/usr/include/bits/getopt_posix.h + mdp:/usr/include/bits/libc-header-start.h + mdp:/usr/include/bits/local_lim.h + mdp:/usr/include/bits/locale.h + mdp:/usr/include/bits/long-double.h + mdp:/usr/include/bits/posix1_lim.h + mdp:/usr/include/bits/posix2_lim.h + mdp:/usr/include/bits/posix_opt.h + mdp:/usr/include/bits/pthread_stack_min-dynamic.h + mdp:/usr/include/bits/pthreadtypes-arch.h + mdp:/usr/include/bits/pthreadtypes.h + mdp:/usr/include/bits/sched.h + mdp:/usr/include/bits/select.h + mdp:/usr/include/bits/setjmp.h + mdp:/usr/include/bits/stdint-intn.h + mdp:/usr/include/bits/stdint-least.h + mdp:/usr/include/bits/stdint-uintn.h + mdp:/usr/include/bits/stdio_lim.h + mdp:/usr/include/bits/stdlib-float.h + mdp:/usr/include/bits/struct_mutex.h + mdp:/usr/include/bits/struct_rwlock.h + mdp:/usr/include/bits/syscall.h + mdp:/usr/include/bits/thread-shared-types.h + mdp:/usr/include/bits/time.h + mdp:/usr/include/bits/time64.h + mdp:/usr/include/bits/timesize.h + mdp:/usr/include/bits/timex.h + mdp:/usr/include/bits/types.h + mdp:/usr/include/bits/types/FILE.h + mdp:/usr/include/bits/types/__FILE.h + mdp:/usr/include/bits/types/__fpos64_t.h + mdp:/usr/include/bits/types/__fpos_t.h + mdp:/usr/include/bits/types/__locale_t.h + mdp:/usr/include/bits/types/__mbstate_t.h + mdp:/usr/include/bits/types/__sigset_t.h + mdp:/usr/include/bits/types/clock_t.h + mdp:/usr/include/bits/types/clockid_t.h + mdp:/usr/include/bits/types/cookie_io_functions_t.h + mdp:/usr/include/bits/types/error_t.h + mdp:/usr/include/bits/types/locale_t.h + mdp:/usr/include/bits/types/mbstate_t.h + mdp:/usr/include/bits/types/sigset_t.h + mdp:/usr/include/bits/types/struct_FILE.h + mdp:/usr/include/bits/types/struct___jmp_buf_tag.h + mdp:/usr/include/bits/types/struct_itimerspec.h + mdp:/usr/include/bits/types/struct_sched_param.h + mdp:/usr/include/bits/types/struct_timespec.h + mdp:/usr/include/bits/types/struct_timeval.h + mdp:/usr/include/bits/types/struct_tm.h + mdp:/usr/include/bits/types/time_t.h + mdp:/usr/include/bits/types/timer_t.h + mdp:/usr/include/bits/types/wint_t.h + mdp:/usr/include/bits/typesizes.h + mdp:/usr/include/bits/uintn-identity.h + mdp:/usr/include/bits/uio_lim.h + mdp:/usr/include/bits/unistd_ext.h + mdp:/usr/include/bits/waitflags.h + mdp:/usr/include/bits/waitstatus.h + mdp:/usr/include/bits/wchar.h + mdp:/usr/include/bits/wctype-wchar.h + mdp:/usr/include/bits/wordsize.h + mdp:/usr/include/bits/xopen_lim.h + mdp:/usr/include/c++/15/algorithm + mdp:/usr/include/c++/15/array + mdp:/usr/include/c++/15/atomic + mdp:/usr/include/c++/15/backward/auto_ptr.h + mdp:/usr/include/c++/15/backward/binders.h + mdp:/usr/include/c++/15/bit + mdp:/usr/include/c++/15/bits/algorithmfwd.h + mdp:/usr/include/c++/15/bits/align.h + mdp:/usr/include/c++/15/bits/alloc_traits.h + mdp:/usr/include/c++/15/bits/allocated_ptr.h + mdp:/usr/include/c++/15/bits/allocator.h + mdp:/usr/include/c++/15/bits/atomic_base.h + mdp:/usr/include/c++/15/bits/atomic_lockfree_defines.h + mdp:/usr/include/c++/15/bits/atomic_wait.h + mdp:/usr/include/c++/15/bits/basic_ios.h + mdp:/usr/include/c++/15/bits/basic_ios.tcc + mdp:/usr/include/c++/15/bits/basic_string.h + mdp:/usr/include/c++/15/bits/basic_string.tcc + mdp:/usr/include/c++/15/bits/char_traits.h + mdp:/usr/include/c++/15/bits/charconv.h + mdp:/usr/include/c++/15/bits/chrono.h + mdp:/usr/include/c++/15/bits/chrono_io.h + mdp:/usr/include/c++/15/bits/codecvt.h + mdp:/usr/include/c++/15/bits/concept_check.h + mdp:/usr/include/c++/15/bits/cpp_type_traits.h + mdp:/usr/include/c++/15/bits/cxxabi_forced.h + mdp:/usr/include/c++/15/bits/cxxabi_init_exception.h + mdp:/usr/include/c++/15/bits/enable_special_members.h + mdp:/usr/include/c++/15/bits/erase_if.h + mdp:/usr/include/c++/15/bits/exception.h + mdp:/usr/include/c++/15/bits/exception_defines.h + mdp:/usr/include/c++/15/bits/exception_ptr.h + mdp:/usr/include/c++/15/bits/functexcept.h + mdp:/usr/include/c++/15/bits/functional_hash.h + mdp:/usr/include/c++/15/bits/hash_bytes.h + mdp:/usr/include/c++/15/bits/hashtable.h + mdp:/usr/include/c++/15/bits/hashtable_policy.h + mdp:/usr/include/c++/15/bits/invoke.h + mdp:/usr/include/c++/15/bits/ios_base.h + mdp:/usr/include/c++/15/bits/istream.tcc + mdp:/usr/include/c++/15/bits/iterator_concepts.h + mdp:/usr/include/c++/15/bits/list.tcc + mdp:/usr/include/c++/15/bits/locale_classes.h + mdp:/usr/include/c++/15/bits/locale_classes.tcc + mdp:/usr/include/c++/15/bits/locale_conv.h + mdp:/usr/include/c++/15/bits/locale_facets.h + mdp:/usr/include/c++/15/bits/locale_facets.tcc + mdp:/usr/include/c++/15/bits/locale_facets_nonio.h + mdp:/usr/include/c++/15/bits/locale_facets_nonio.tcc + mdp:/usr/include/c++/15/bits/localefwd.h + mdp:/usr/include/c++/15/bits/max_size_type.h + mdp:/usr/include/c++/15/bits/memory_resource.h + mdp:/usr/include/c++/15/bits/memoryfwd.h + mdp:/usr/include/c++/15/bits/move.h + mdp:/usr/include/c++/15/bits/nested_exception.h + mdp:/usr/include/c++/15/bits/new_allocator.h + mdp:/usr/include/c++/15/bits/node_handle.h + mdp:/usr/include/c++/15/bits/ostream.h + mdp:/usr/include/c++/15/bits/ostream.tcc + mdp:/usr/include/c++/15/bits/ostream_insert.h + mdp:/usr/include/c++/15/bits/parse_numbers.h + mdp:/usr/include/c++/15/bits/postypes.h + mdp:/usr/include/c++/15/bits/predefined_ops.h + mdp:/usr/include/c++/15/bits/ptr_traits.h + mdp:/usr/include/c++/15/bits/quoted_string.h + mdp:/usr/include/c++/15/bits/range_access.h + mdp:/usr/include/c++/15/bits/ranges_algo.h + mdp:/usr/include/c++/15/bits/ranges_algobase.h + mdp:/usr/include/c++/15/bits/ranges_base.h + mdp:/usr/include/c++/15/bits/ranges_cmp.h + mdp:/usr/include/c++/15/bits/ranges_uninitialized.h + mdp:/usr/include/c++/15/bits/ranges_util.h + mdp:/usr/include/c++/15/bits/refwrap.h + mdp:/usr/include/c++/15/bits/requires_hosted.h + mdp:/usr/include/c++/15/bits/shared_ptr.h + mdp:/usr/include/c++/15/bits/shared_ptr_atomic.h + mdp:/usr/include/c++/15/bits/shared_ptr_base.h + mdp:/usr/include/c++/15/bits/specfun.h + mdp:/usr/include/c++/15/bits/sstream.tcc + mdp:/usr/include/c++/15/bits/std_abs.h + mdp:/usr/include/c++/15/bits/std_function.h + mdp:/usr/include/c++/15/bits/std_mutex.h + mdp:/usr/include/c++/15/bits/stl_algo.h + mdp:/usr/include/c++/15/bits/stl_algobase.h + mdp:/usr/include/c++/15/bits/stl_bvector.h + mdp:/usr/include/c++/15/bits/stl_construct.h + mdp:/usr/include/c++/15/bits/stl_function.h + mdp:/usr/include/c++/15/bits/stl_heap.h + mdp:/usr/include/c++/15/bits/stl_iterator.h + mdp:/usr/include/c++/15/bits/stl_iterator_base_funcs.h + mdp:/usr/include/c++/15/bits/stl_iterator_base_types.h + mdp:/usr/include/c++/15/bits/stl_list.h + mdp:/usr/include/c++/15/bits/stl_map.h + mdp:/usr/include/c++/15/bits/stl_multimap.h + mdp:/usr/include/c++/15/bits/stl_multiset.h + mdp:/usr/include/c++/15/bits/stl_numeric.h + mdp:/usr/include/c++/15/bits/stl_pair.h + mdp:/usr/include/c++/15/bits/stl_raw_storage_iter.h + mdp:/usr/include/c++/15/bits/stl_relops.h + mdp:/usr/include/c++/15/bits/stl_set.h + mdp:/usr/include/c++/15/bits/stl_tempbuf.h + mdp:/usr/include/c++/15/bits/stl_tree.h + mdp:/usr/include/c++/15/bits/stl_uninitialized.h + mdp:/usr/include/c++/15/bits/stl_vector.h + mdp:/usr/include/c++/15/bits/stream_iterator.h + mdp:/usr/include/c++/15/bits/streambuf.tcc + mdp:/usr/include/c++/15/bits/streambuf_iterator.h + mdp:/usr/include/c++/15/bits/string_view.tcc + mdp:/usr/include/c++/15/bits/stringfwd.h + mdp:/usr/include/c++/15/bits/uniform_int_dist.h + mdp:/usr/include/c++/15/bits/unique_ptr.h + mdp:/usr/include/c++/15/bits/unordered_map.h + mdp:/usr/include/c++/15/bits/unordered_set.h + mdp:/usr/include/c++/15/bits/uses_allocator.h + mdp:/usr/include/c++/15/bits/uses_allocator_args.h + mdp:/usr/include/c++/15/bits/utility.h + mdp:/usr/include/c++/15/bits/vector.tcc + mdp:/usr/include/c++/15/bits/version.h + mdp:/usr/include/c++/15/cassert + mdp:/usr/include/c++/15/cctype + mdp:/usr/include/c++/15/cerrno + mdp:/usr/include/c++/15/charconv + mdp:/usr/include/c++/15/chrono + mdp:/usr/include/c++/15/climits + mdp:/usr/include/c++/15/clocale + mdp:/usr/include/c++/15/cmath + mdp:/usr/include/c++/15/compare + mdp:/usr/include/c++/15/concepts + mdp:/usr/include/c++/15/cstddef + mdp:/usr/include/c++/15/cstdint + mdp:/usr/include/c++/15/cstdio + mdp:/usr/include/c++/15/cstdlib + mdp:/usr/include/c++/15/cstring + mdp:/usr/include/c++/15/ctime + mdp:/usr/include/c++/15/cwchar + mdp:/usr/include/c++/15/cwctype + mdp:/usr/include/c++/15/debug/assertions.h + mdp:/usr/include/c++/15/debug/debug.h + mdp:/usr/include/c++/15/exception + mdp:/usr/include/c++/15/ext/aligned_buffer.h + mdp:/usr/include/c++/15/ext/alloc_traits.h + mdp:/usr/include/c++/15/ext/atomicity.h + mdp:/usr/include/c++/15/ext/concurrence.h + mdp:/usr/include/c++/15/ext/numeric_traits.h + mdp:/usr/include/c++/15/ext/string_conversions.h + mdp:/usr/include/c++/15/ext/type_traits.h + mdp:/usr/include/c++/15/format + mdp:/usr/include/c++/15/functional + mdp:/usr/include/c++/15/initializer_list + mdp:/usr/include/c++/15/iomanip + mdp:/usr/include/c++/15/ios + mdp:/usr/include/c++/15/iosfwd + mdp:/usr/include/c++/15/istream + mdp:/usr/include/c++/15/iterator + mdp:/usr/include/c++/15/limits + mdp:/usr/include/c++/15/list + mdp:/usr/include/c++/15/locale + mdp:/usr/include/c++/15/map + mdp:/usr/include/c++/15/memory + mdp:/usr/include/c++/15/new + mdp:/usr/include/c++/15/numeric + mdp:/usr/include/c++/15/optional + mdp:/usr/include/c++/15/ostream + mdp:/usr/include/c++/15/pstl/execution_defs.h + mdp:/usr/include/c++/15/pstl/glue_numeric_defs.h + mdp:/usr/include/c++/15/pstl/pstl_config.h + mdp:/usr/include/c++/15/ratio + mdp:/usr/include/c++/15/set + mdp:/usr/include/c++/15/sstream + mdp:/usr/include/c++/15/stdexcept + mdp:/usr/include/c++/15/streambuf + mdp:/usr/include/c++/15/string + mdp:/usr/include/c++/15/string_view + mdp:/usr/include/c++/15/system_error + mdp:/usr/include/c++/15/tr1/bessel_function.tcc + mdp:/usr/include/c++/15/tr1/beta_function.tcc + mdp:/usr/include/c++/15/tr1/ell_integral.tcc + mdp:/usr/include/c++/15/tr1/exp_integral.tcc + mdp:/usr/include/c++/15/tr1/gamma.tcc + mdp:/usr/include/c++/15/tr1/hypergeometric.tcc + mdp:/usr/include/c++/15/tr1/legendre_function.tcc + mdp:/usr/include/c++/15/tr1/modified_bessel_func.tcc + mdp:/usr/include/c++/15/tr1/poly_hermite.tcc + mdp:/usr/include/c++/15/tr1/poly_laguerre.tcc + mdp:/usr/include/c++/15/tr1/riemann_zeta.tcc + mdp:/usr/include/c++/15/tr1/special_function_util.h + mdp:/usr/include/c++/15/tuple + mdp:/usr/include/c++/15/type_traits + mdp:/usr/include/c++/15/typeinfo + mdp:/usr/include/c++/15/unordered_map + mdp:/usr/include/c++/15/unordered_set + mdp:/usr/include/c++/15/utility + mdp:/usr/include/c++/15/variant + mdp:/usr/include/c++/15/vector + mdp:/usr/include/c++/15/version + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/atomic_word.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++allocator.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++config.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++locale.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/cpu_defines.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/ctype_base.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/ctype_inline.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/error_constants.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/gthr-default.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/gthr.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/messages_members.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/os_defines.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/time_members.h + mdp:/usr/include/ctype.h + mdp:/usr/include/endian.h + mdp:/usr/include/errno.h + mdp:/usr/include/features-time64.h + mdp:/usr/include/features.h + mdp:/usr/include/gnu/stubs-64.h + mdp:/usr/include/gnu/stubs.h + mdp:/usr/include/libintl.h + mdp:/usr/include/limits.h + mdp:/usr/include/linux/close_range.h + mdp:/usr/include/linux/errno.h + mdp:/usr/include/linux/limits.h + mdp:/usr/include/linux/posix_types.h + mdp:/usr/include/linux/sched/types.h + mdp:/usr/include/linux/stddef.h + mdp:/usr/include/linux/types.h + mdp:/usr/include/locale.h + mdp:/usr/include/pthread.h + mdp:/usr/include/qt6/QtCore/QModelIndex + mdp:/usr/include/qt6/QtCore/q17memory.h + mdp:/usr/include/qt6/QtCore/q20functional.h + mdp:/usr/include/qt6/QtCore/q20iterator.h + mdp:/usr/include/qt6/QtCore/q20memory.h + mdp:/usr/include/qt6/QtCore/q20type_traits.h + mdp:/usr/include/qt6/QtCore/q20utility.h + mdp:/usr/include/qt6/QtCore/q23type_traits.h + mdp:/usr/include/qt6/QtCore/q23utility.h + mdp:/usr/include/qt6/QtCore/qabstractitemmodel.h + mdp:/usr/include/qt6/QtCore/qalgorithms.h + mdp:/usr/include/qt6/QtCore/qalloc.h + mdp:/usr/include/qt6/QtCore/qanystringview.h + mdp:/usr/include/qt6/QtCore/qarraydata.h + mdp:/usr/include/qt6/QtCore/qarraydataops.h + mdp:/usr/include/qt6/QtCore/qarraydatapointer.h + mdp:/usr/include/qt6/QtCore/qassert.h + mdp:/usr/include/qt6/QtCore/qatomic.h + mdp:/usr/include/qt6/QtCore/qatomic_cxx11.h + mdp:/usr/include/qt6/QtCore/qbasicatomic.h + mdp:/usr/include/qt6/QtCore/qbindingstorage.h + mdp:/usr/include/qt6/QtCore/qbytearray.h + mdp:/usr/include/qt6/QtCore/qbytearrayalgorithms.h + mdp:/usr/include/qt6/QtCore/qbytearraylist.h + mdp:/usr/include/qt6/QtCore/qbytearrayview.h + mdp:/usr/include/qt6/QtCore/qchar.h + mdp:/usr/include/qt6/QtCore/qcheckedint_impl.h + mdp:/usr/include/qt6/QtCore/qcompare.h + mdp:/usr/include/qt6/QtCore/qcompare_impl.h + mdp:/usr/include/qt6/QtCore/qcomparehelpers.h + mdp:/usr/include/qt6/QtCore/qcompilerdetection.h + mdp:/usr/include/qt6/QtCore/qconfig-64.h + mdp:/usr/include/qt6/QtCore/qconfig.h + mdp:/usr/include/qt6/QtCore/qconstructormacros.h + mdp:/usr/include/qt6/QtCore/qcontainerfwd.h + mdp:/usr/include/qt6/QtCore/qcontainerinfo.h + mdp:/usr/include/qt6/QtCore/qcontainertools_impl.h + mdp:/usr/include/qt6/QtCore/qcontiguouscache.h + mdp:/usr/include/qt6/QtCore/qdarwinhelpers.h + mdp:/usr/include/qt6/QtCore/qdatastream.h + mdp:/usr/include/qt6/QtCore/qdebug.h + mdp:/usr/include/qt6/QtCore/qendian.h + mdp:/usr/include/qt6/QtCore/qexceptionhandling.h + mdp:/usr/include/qt6/QtCore/qflags.h + mdp:/usr/include/qt6/QtCore/qfloat16.h + mdp:/usr/include/qt6/QtCore/qforeach.h + mdp:/usr/include/qt6/QtCore/qfunctionaltools_impl.h + mdp:/usr/include/qt6/QtCore/qfunctionpointer.h + mdp:/usr/include/qt6/QtCore/qgenericatomic.h + mdp:/usr/include/qt6/QtCore/qglobal.h + mdp:/usr/include/qt6/QtCore/qglobalstatic.h + mdp:/usr/include/qt6/QtCore/qhash.h + mdp:/usr/include/qt6/QtCore/qhashfunctions.h + mdp:/usr/include/qt6/QtCore/qiodevicebase.h + mdp:/usr/include/qt6/QtCore/qiterable.h + mdp:/usr/include/qt6/QtCore/qiterator.h + mdp:/usr/include/qt6/QtCore/qlatin1stringview.h + mdp:/usr/include/qt6/QtCore/qline.h + mdp:/usr/include/qt6/QtCore/qlist.h + mdp:/usr/include/qt6/QtCore/qlocale.h + mdp:/usr/include/qt6/QtCore/qlogging.h + mdp:/usr/include/qt6/QtCore/qmalloc.h + mdp:/usr/include/qt6/QtCore/qmap.h + mdp:/usr/include/qt6/QtCore/qmargins.h + mdp:/usr/include/qt6/QtCore/qmath.h + mdp:/usr/include/qt6/QtCore/qmetacontainer.h + mdp:/usr/include/qt6/QtCore/qmetatype.h + mdp:/usr/include/qt6/QtCore/qminmax.h + mdp:/usr/include/qt6/QtCore/qnamespace.h + mdp:/usr/include/qt6/QtCore/qnumeric.h + mdp:/usr/include/qt6/QtCore/qobject.h + mdp:/usr/include/qt6/QtCore/qobject_impl.h + mdp:/usr/include/qt6/QtCore/qobjectdefs.h + mdp:/usr/include/qt6/QtCore/qobjectdefs_impl.h + mdp:/usr/include/qt6/QtCore/qoverload.h + mdp:/usr/include/qt6/QtCore/qpair.h + mdp:/usr/include/qt6/QtCore/qpoint.h + mdp:/usr/include/qt6/QtCore/qprocessordetection.h + mdp:/usr/include/qt6/QtCore/qrect.h + mdp:/usr/include/qt6/QtCore/qrefcount.h + mdp:/usr/include/qt6/QtCore/qregularexpression.h + mdp:/usr/include/qt6/QtCore/qscopedpointer.h + mdp:/usr/include/qt6/QtCore/qscopeguard.h + mdp:/usr/include/qt6/QtCore/qset.h + mdp:/usr/include/qt6/QtCore/qshareddata.h + mdp:/usr/include/qt6/QtCore/qshareddata_impl.h + mdp:/usr/include/qt6/QtCore/qsharedpointer.h + mdp:/usr/include/qt6/QtCore/qsharedpointer_impl.h + mdp:/usr/include/qt6/QtCore/qsize.h + mdp:/usr/include/qt6/QtCore/qspan.h + mdp:/usr/include/qt6/QtCore/qstdlibdetection.h + mdp:/usr/include/qt6/QtCore/qstring.h + mdp:/usr/include/qt6/QtCore/qstringalgorithms.h + mdp:/usr/include/qt6/QtCore/qstringbuilder.h + mdp:/usr/include/qt6/QtCore/qstringconverter.h + mdp:/usr/include/qt6/QtCore/qstringconverter_base.h + mdp:/usr/include/qt6/QtCore/qstringfwd.h + mdp:/usr/include/qt6/QtCore/qstringlist.h + mdp:/usr/include/qt6/QtCore/qstringmatcher.h + mdp:/usr/include/qt6/QtCore/qstringtokenizer.h + mdp:/usr/include/qt6/QtCore/qstringview.h + mdp:/usr/include/qt6/QtCore/qswap.h + mdp:/usr/include/qt6/QtCore/qsysinfo.h + mdp:/usr/include/qt6/QtCore/qsystemdetection.h + mdp:/usr/include/qt6/QtCore/qtaggedpointer.h + mdp:/usr/include/qt6/QtCore/qtclasshelpermacros.h + mdp:/usr/include/qt6/QtCore/qtconfiginclude.h + mdp:/usr/include/qt6/QtCore/qtconfigmacros.h + mdp:/usr/include/qt6/QtCore/qtcore-config.h + mdp:/usr/include/qt6/QtCore/qtcoreexports.h + mdp:/usr/include/qt6/QtCore/qtcoreglobal.h + mdp:/usr/include/qt6/QtCore/qtdeprecationdefinitions.h + mdp:/usr/include/qt6/QtCore/qtdeprecationmarkers.h + mdp:/usr/include/qt6/QtCore/qtenvironmentvariables.h + mdp:/usr/include/qt6/QtCore/qtextstream.h + mdp:/usr/include/qt6/QtCore/qtformat_impl.h + mdp:/usr/include/qt6/QtCore/qtmetamacros.h + mdp:/usr/include/qt6/QtCore/qtnoop.h + mdp:/usr/include/qt6/QtCore/qtpreprocessorsupport.h + mdp:/usr/include/qt6/QtCore/qtresource.h + mdp:/usr/include/qt6/QtCore/qttranslation.h + mdp:/usr/include/qt6/QtCore/qttypetraits.h + mdp:/usr/include/qt6/QtCore/qtversion.h + mdp:/usr/include/qt6/QtCore/qtversionchecks.h + mdp:/usr/include/qt6/QtCore/qtypeinfo.h + mdp:/usr/include/qt6/QtCore/qtypes.h + mdp:/usr/include/qt6/QtCore/qutf8stringview.h + mdp:/usr/include/qt6/QtCore/qvariant.h + mdp:/usr/include/qt6/QtCore/qvarlengtharray.h + mdp:/usr/include/qt6/QtCore/qversiontagging.h + mdp:/usr/include/qt6/QtCore/qxptype_traits.h + mdp:/usr/include/qt6/QtCore/qyieldcpu.h + mdp:/usr/include/qt6/QtGui/QPainter + mdp:/usr/include/qt6/QtGui/qaction.h + mdp:/usr/include/qt6/QtGui/qbitmap.h + mdp:/usr/include/qt6/QtGui/qbrush.h + mdp:/usr/include/qt6/QtGui/qcolor.h + mdp:/usr/include/qt6/QtGui/qcursor.h + mdp:/usr/include/qt6/QtGui/qfont.h + mdp:/usr/include/qt6/QtGui/qfontinfo.h + mdp:/usr/include/qt6/QtGui/qfontmetrics.h + mdp:/usr/include/qt6/QtGui/qfontvariableaxis.h + mdp:/usr/include/qt6/QtGui/qicon.h + mdp:/usr/include/qt6/QtGui/qimage.h + mdp:/usr/include/qt6/QtGui/qkeysequence.h + mdp:/usr/include/qt6/QtGui/qpaintdevice.h + mdp:/usr/include/qt6/QtGui/qpainter.h + mdp:/usr/include/qt6/QtGui/qpalette.h + mdp:/usr/include/qt6/QtGui/qpen.h + mdp:/usr/include/qt6/QtGui/qpixelformat.h + mdp:/usr/include/qt6/QtGui/qpixmap.h + mdp:/usr/include/qt6/QtGui/qpolygon.h + mdp:/usr/include/qt6/QtGui/qregion.h + mdp:/usr/include/qt6/QtGui/qrgb.h + mdp:/usr/include/qt6/QtGui/qrgba64.h + mdp:/usr/include/qt6/QtGui/qtextoption.h + mdp:/usr/include/qt6/QtGui/qtgui-config.h + mdp:/usr/include/qt6/QtGui/qtguiexports.h + mdp:/usr/include/qt6/QtGui/qtguiglobal.h + mdp:/usr/include/qt6/QtGui/qtransform.h + mdp:/usr/include/qt6/QtGui/qvalidator.h + mdp:/usr/include/qt6/QtGui/qwindowdefs.h + mdp:/usr/include/qt6/QtWidgets/QStyleOptionViewItem + mdp:/usr/include/qt6/QtWidgets/QStyledItemDelegate + mdp:/usr/include/qt6/QtWidgets/qabstractitemdelegate.h + mdp:/usr/include/qt6/QtWidgets/qabstractslider.h + mdp:/usr/include/qt6/QtWidgets/qabstractspinbox.h + mdp:/usr/include/qt6/QtWidgets/qframe.h + mdp:/usr/include/qt6/QtWidgets/qrubberband.h + mdp:/usr/include/qt6/QtWidgets/qsizepolicy.h + mdp:/usr/include/qt6/QtWidgets/qslider.h + mdp:/usr/include/qt6/QtWidgets/qstyle.h + mdp:/usr/include/qt6/QtWidgets/qstyleditemdelegate.h + mdp:/usr/include/qt6/QtWidgets/qstyleoption.h + mdp:/usr/include/qt6/QtWidgets/qtabbar.h + mdp:/usr/include/qt6/QtWidgets/qtabwidget.h + mdp:/usr/include/qt6/QtWidgets/qtwidgets-config.h + mdp:/usr/include/qt6/QtWidgets/qtwidgetsexports.h + mdp:/usr/include/qt6/QtWidgets/qtwidgetsglobal.h + mdp:/usr/include/qt6/QtWidgets/qwidget.h + mdp:/usr/include/sched.h + mdp:/usr/include/stdc-predef.h + mdp:/usr/include/stdint.h + mdp:/usr/include/stdio.h + mdp:/usr/include/stdlib.h + mdp:/usr/include/string.h + mdp:/usr/include/strings.h + mdp:/usr/include/sys/cdefs.h + mdp:/usr/include/sys/select.h + mdp:/usr/include/sys/single_threaded.h + mdp:/usr/include/sys/syscall.h + mdp:/usr/include/sys/types.h + mdp:/usr/include/syscall.h + mdp:/usr/include/time.h + mdp:/usr/include/unistd.h + mdp:/usr/include/wchar.h + mdp:/usr/include/wctype.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stdarg.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stdbool.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stddef.h +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/everything_folder_model.cpp +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/bulk_rename_dialog.h + mmc:Q_OBJECT + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/kassetmanagerqt_autogen/moc_predefs.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/bulk_rename_dialog.h + mdp:/usr/include/alloca.h + mdp:/usr/include/asm-generic/bitsperlong.h + mdp:/usr/include/asm-generic/errno-base.h + mdp:/usr/include/asm-generic/errno.h + mdp:/usr/include/asm-generic/int-ll64.h + mdp:/usr/include/asm-generic/posix_types.h + mdp:/usr/include/asm-generic/types.h + mdp:/usr/include/asm/bitsperlong.h + mdp:/usr/include/asm/errno.h + mdp:/usr/include/asm/posix_types.h + mdp:/usr/include/asm/posix_types_64.h + mdp:/usr/include/asm/types.h + mdp:/usr/include/asm/unistd.h + mdp:/usr/include/asm/unistd_64.h + mdp:/usr/include/assert.h + mdp:/usr/include/bits/atomic_wide_counter.h + mdp:/usr/include/bits/byteswap.h + mdp:/usr/include/bits/confname.h + mdp:/usr/include/bits/cpu-set.h + mdp:/usr/include/bits/endian.h + mdp:/usr/include/bits/endianness.h + mdp:/usr/include/bits/environments.h + mdp:/usr/include/bits/errno.h + mdp:/usr/include/bits/floatn-common.h + mdp:/usr/include/bits/floatn.h + mdp:/usr/include/bits/getopt_core.h + mdp:/usr/include/bits/getopt_posix.h + mdp:/usr/include/bits/libc-header-start.h + mdp:/usr/include/bits/local_lim.h + mdp:/usr/include/bits/locale.h + mdp:/usr/include/bits/long-double.h + mdp:/usr/include/bits/posix1_lim.h + mdp:/usr/include/bits/posix2_lim.h + mdp:/usr/include/bits/posix_opt.h + mdp:/usr/include/bits/pthread_stack_min-dynamic.h + mdp:/usr/include/bits/pthreadtypes-arch.h + mdp:/usr/include/bits/pthreadtypes.h + mdp:/usr/include/bits/sched.h + mdp:/usr/include/bits/select.h + mdp:/usr/include/bits/setjmp.h + mdp:/usr/include/bits/stdint-intn.h + mdp:/usr/include/bits/stdint-least.h + mdp:/usr/include/bits/stdint-uintn.h + mdp:/usr/include/bits/stdio_lim.h + mdp:/usr/include/bits/stdlib-float.h + mdp:/usr/include/bits/struct_mutex.h + mdp:/usr/include/bits/struct_rwlock.h + mdp:/usr/include/bits/syscall.h + mdp:/usr/include/bits/thread-shared-types.h + mdp:/usr/include/bits/time.h + mdp:/usr/include/bits/time64.h + mdp:/usr/include/bits/timesize.h + mdp:/usr/include/bits/timex.h + mdp:/usr/include/bits/types.h + mdp:/usr/include/bits/types/FILE.h + mdp:/usr/include/bits/types/__FILE.h + mdp:/usr/include/bits/types/__fpos64_t.h + mdp:/usr/include/bits/types/__fpos_t.h + mdp:/usr/include/bits/types/__locale_t.h + mdp:/usr/include/bits/types/__mbstate_t.h + mdp:/usr/include/bits/types/__sigset_t.h + mdp:/usr/include/bits/types/clock_t.h + mdp:/usr/include/bits/types/clockid_t.h + mdp:/usr/include/bits/types/cookie_io_functions_t.h + mdp:/usr/include/bits/types/error_t.h + mdp:/usr/include/bits/types/locale_t.h + mdp:/usr/include/bits/types/mbstate_t.h + mdp:/usr/include/bits/types/sigset_t.h + mdp:/usr/include/bits/types/struct_FILE.h + mdp:/usr/include/bits/types/struct___jmp_buf_tag.h + mdp:/usr/include/bits/types/struct_itimerspec.h + mdp:/usr/include/bits/types/struct_sched_param.h + mdp:/usr/include/bits/types/struct_timespec.h + mdp:/usr/include/bits/types/struct_timeval.h + mdp:/usr/include/bits/types/struct_tm.h + mdp:/usr/include/bits/types/time_t.h + mdp:/usr/include/bits/types/timer_t.h + mdp:/usr/include/bits/types/wint_t.h + mdp:/usr/include/bits/typesizes.h + mdp:/usr/include/bits/uintn-identity.h + mdp:/usr/include/bits/uio_lim.h + mdp:/usr/include/bits/unistd_ext.h + mdp:/usr/include/bits/waitflags.h + mdp:/usr/include/bits/waitstatus.h + mdp:/usr/include/bits/wchar.h + mdp:/usr/include/bits/wctype-wchar.h + mdp:/usr/include/bits/wordsize.h + mdp:/usr/include/bits/xopen_lim.h + mdp:/usr/include/c++/15/algorithm + mdp:/usr/include/c++/15/array + mdp:/usr/include/c++/15/atomic + mdp:/usr/include/c++/15/backward/auto_ptr.h + mdp:/usr/include/c++/15/backward/binders.h + mdp:/usr/include/c++/15/bit + mdp:/usr/include/c++/15/bits/algorithmfwd.h + mdp:/usr/include/c++/15/bits/align.h + mdp:/usr/include/c++/15/bits/alloc_traits.h + mdp:/usr/include/c++/15/bits/allocated_ptr.h + mdp:/usr/include/c++/15/bits/allocator.h + mdp:/usr/include/c++/15/bits/atomic_base.h + mdp:/usr/include/c++/15/bits/atomic_lockfree_defines.h + mdp:/usr/include/c++/15/bits/atomic_wait.h + mdp:/usr/include/c++/15/bits/basic_ios.h + mdp:/usr/include/c++/15/bits/basic_ios.tcc + mdp:/usr/include/c++/15/bits/basic_string.h + mdp:/usr/include/c++/15/bits/basic_string.tcc + mdp:/usr/include/c++/15/bits/char_traits.h + mdp:/usr/include/c++/15/bits/charconv.h + mdp:/usr/include/c++/15/bits/chrono.h + mdp:/usr/include/c++/15/bits/chrono_io.h + mdp:/usr/include/c++/15/bits/codecvt.h + mdp:/usr/include/c++/15/bits/concept_check.h + mdp:/usr/include/c++/15/bits/cpp_type_traits.h + mdp:/usr/include/c++/15/bits/cxxabi_forced.h + mdp:/usr/include/c++/15/bits/cxxabi_init_exception.h + mdp:/usr/include/c++/15/bits/enable_special_members.h + mdp:/usr/include/c++/15/bits/erase_if.h + mdp:/usr/include/c++/15/bits/exception.h + mdp:/usr/include/c++/15/bits/exception_defines.h + mdp:/usr/include/c++/15/bits/exception_ptr.h + mdp:/usr/include/c++/15/bits/functexcept.h + mdp:/usr/include/c++/15/bits/functional_hash.h + mdp:/usr/include/c++/15/bits/hash_bytes.h + mdp:/usr/include/c++/15/bits/hashtable.h + mdp:/usr/include/c++/15/bits/hashtable_policy.h + mdp:/usr/include/c++/15/bits/invoke.h + mdp:/usr/include/c++/15/bits/ios_base.h + mdp:/usr/include/c++/15/bits/istream.tcc + mdp:/usr/include/c++/15/bits/iterator_concepts.h + mdp:/usr/include/c++/15/bits/list.tcc + mdp:/usr/include/c++/15/bits/locale_classes.h + mdp:/usr/include/c++/15/bits/locale_classes.tcc + mdp:/usr/include/c++/15/bits/locale_conv.h + mdp:/usr/include/c++/15/bits/locale_facets.h + mdp:/usr/include/c++/15/bits/locale_facets.tcc + mdp:/usr/include/c++/15/bits/locale_facets_nonio.h + mdp:/usr/include/c++/15/bits/locale_facets_nonio.tcc + mdp:/usr/include/c++/15/bits/localefwd.h + mdp:/usr/include/c++/15/bits/max_size_type.h + mdp:/usr/include/c++/15/bits/memory_resource.h + mdp:/usr/include/c++/15/bits/memoryfwd.h + mdp:/usr/include/c++/15/bits/move.h + mdp:/usr/include/c++/15/bits/nested_exception.h + mdp:/usr/include/c++/15/bits/new_allocator.h + mdp:/usr/include/c++/15/bits/node_handle.h + mdp:/usr/include/c++/15/bits/ostream.h + mdp:/usr/include/c++/15/bits/ostream.tcc + mdp:/usr/include/c++/15/bits/ostream_insert.h + mdp:/usr/include/c++/15/bits/parse_numbers.h + mdp:/usr/include/c++/15/bits/postypes.h + mdp:/usr/include/c++/15/bits/predefined_ops.h + mdp:/usr/include/c++/15/bits/ptr_traits.h + mdp:/usr/include/c++/15/bits/quoted_string.h + mdp:/usr/include/c++/15/bits/range_access.h + mdp:/usr/include/c++/15/bits/ranges_algo.h + mdp:/usr/include/c++/15/bits/ranges_algobase.h + mdp:/usr/include/c++/15/bits/ranges_base.h + mdp:/usr/include/c++/15/bits/ranges_cmp.h + mdp:/usr/include/c++/15/bits/ranges_uninitialized.h + mdp:/usr/include/c++/15/bits/ranges_util.h + mdp:/usr/include/c++/15/bits/refwrap.h + mdp:/usr/include/c++/15/bits/requires_hosted.h + mdp:/usr/include/c++/15/bits/shared_ptr.h + mdp:/usr/include/c++/15/bits/shared_ptr_atomic.h + mdp:/usr/include/c++/15/bits/shared_ptr_base.h + mdp:/usr/include/c++/15/bits/specfun.h + mdp:/usr/include/c++/15/bits/sstream.tcc + mdp:/usr/include/c++/15/bits/std_abs.h + mdp:/usr/include/c++/15/bits/std_function.h + mdp:/usr/include/c++/15/bits/std_mutex.h + mdp:/usr/include/c++/15/bits/stl_algo.h + mdp:/usr/include/c++/15/bits/stl_algobase.h + mdp:/usr/include/c++/15/bits/stl_bvector.h + mdp:/usr/include/c++/15/bits/stl_construct.h + mdp:/usr/include/c++/15/bits/stl_function.h + mdp:/usr/include/c++/15/bits/stl_heap.h + mdp:/usr/include/c++/15/bits/stl_iterator.h + mdp:/usr/include/c++/15/bits/stl_iterator_base_funcs.h + mdp:/usr/include/c++/15/bits/stl_iterator_base_types.h + mdp:/usr/include/c++/15/bits/stl_list.h + mdp:/usr/include/c++/15/bits/stl_map.h + mdp:/usr/include/c++/15/bits/stl_multimap.h + mdp:/usr/include/c++/15/bits/stl_multiset.h + mdp:/usr/include/c++/15/bits/stl_numeric.h + mdp:/usr/include/c++/15/bits/stl_pair.h + mdp:/usr/include/c++/15/bits/stl_raw_storage_iter.h + mdp:/usr/include/c++/15/bits/stl_relops.h + mdp:/usr/include/c++/15/bits/stl_set.h + mdp:/usr/include/c++/15/bits/stl_tempbuf.h + mdp:/usr/include/c++/15/bits/stl_tree.h + mdp:/usr/include/c++/15/bits/stl_uninitialized.h + mdp:/usr/include/c++/15/bits/stl_vector.h + mdp:/usr/include/c++/15/bits/stream_iterator.h + mdp:/usr/include/c++/15/bits/streambuf.tcc + mdp:/usr/include/c++/15/bits/streambuf_iterator.h + mdp:/usr/include/c++/15/bits/string_view.tcc + mdp:/usr/include/c++/15/bits/stringfwd.h + mdp:/usr/include/c++/15/bits/uniform_int_dist.h + mdp:/usr/include/c++/15/bits/unique_ptr.h + mdp:/usr/include/c++/15/bits/unordered_map.h + mdp:/usr/include/c++/15/bits/unordered_set.h + mdp:/usr/include/c++/15/bits/uses_allocator.h + mdp:/usr/include/c++/15/bits/uses_allocator_args.h + mdp:/usr/include/c++/15/bits/utility.h + mdp:/usr/include/c++/15/bits/vector.tcc + mdp:/usr/include/c++/15/bits/version.h + mdp:/usr/include/c++/15/cassert + mdp:/usr/include/c++/15/cctype + mdp:/usr/include/c++/15/cerrno + mdp:/usr/include/c++/15/charconv + mdp:/usr/include/c++/15/chrono + mdp:/usr/include/c++/15/climits + mdp:/usr/include/c++/15/clocale + mdp:/usr/include/c++/15/cmath + mdp:/usr/include/c++/15/compare + mdp:/usr/include/c++/15/concepts + mdp:/usr/include/c++/15/cstddef + mdp:/usr/include/c++/15/cstdint + mdp:/usr/include/c++/15/cstdio + mdp:/usr/include/c++/15/cstdlib + mdp:/usr/include/c++/15/cstring + mdp:/usr/include/c++/15/ctime + mdp:/usr/include/c++/15/cwchar + mdp:/usr/include/c++/15/cwctype + mdp:/usr/include/c++/15/debug/assertions.h + mdp:/usr/include/c++/15/debug/debug.h + mdp:/usr/include/c++/15/exception + mdp:/usr/include/c++/15/ext/aligned_buffer.h + mdp:/usr/include/c++/15/ext/alloc_traits.h + mdp:/usr/include/c++/15/ext/atomicity.h + mdp:/usr/include/c++/15/ext/concurrence.h + mdp:/usr/include/c++/15/ext/numeric_traits.h + mdp:/usr/include/c++/15/ext/string_conversions.h + mdp:/usr/include/c++/15/ext/type_traits.h + mdp:/usr/include/c++/15/format + mdp:/usr/include/c++/15/functional + mdp:/usr/include/c++/15/initializer_list + mdp:/usr/include/c++/15/iomanip + mdp:/usr/include/c++/15/ios + mdp:/usr/include/c++/15/iosfwd + mdp:/usr/include/c++/15/istream + mdp:/usr/include/c++/15/iterator + mdp:/usr/include/c++/15/limits + mdp:/usr/include/c++/15/list + mdp:/usr/include/c++/15/locale + mdp:/usr/include/c++/15/map + mdp:/usr/include/c++/15/memory + mdp:/usr/include/c++/15/new + mdp:/usr/include/c++/15/numeric + mdp:/usr/include/c++/15/optional + mdp:/usr/include/c++/15/ostream + mdp:/usr/include/c++/15/pstl/execution_defs.h + mdp:/usr/include/c++/15/pstl/glue_numeric_defs.h + mdp:/usr/include/c++/15/pstl/pstl_config.h + mdp:/usr/include/c++/15/ratio + mdp:/usr/include/c++/15/set + mdp:/usr/include/c++/15/sstream + mdp:/usr/include/c++/15/stdexcept + mdp:/usr/include/c++/15/streambuf + mdp:/usr/include/c++/15/string + mdp:/usr/include/c++/15/string_view + mdp:/usr/include/c++/15/system_error + mdp:/usr/include/c++/15/tr1/bessel_function.tcc + mdp:/usr/include/c++/15/tr1/beta_function.tcc + mdp:/usr/include/c++/15/tr1/ell_integral.tcc + mdp:/usr/include/c++/15/tr1/exp_integral.tcc + mdp:/usr/include/c++/15/tr1/gamma.tcc + mdp:/usr/include/c++/15/tr1/hypergeometric.tcc + mdp:/usr/include/c++/15/tr1/legendre_function.tcc + mdp:/usr/include/c++/15/tr1/modified_bessel_func.tcc + mdp:/usr/include/c++/15/tr1/poly_hermite.tcc + mdp:/usr/include/c++/15/tr1/poly_laguerre.tcc + mdp:/usr/include/c++/15/tr1/riemann_zeta.tcc + mdp:/usr/include/c++/15/tr1/special_function_util.h + mdp:/usr/include/c++/15/tuple + mdp:/usr/include/c++/15/type_traits + mdp:/usr/include/c++/15/typeinfo + mdp:/usr/include/c++/15/unordered_map + mdp:/usr/include/c++/15/unordered_set + mdp:/usr/include/c++/15/utility + mdp:/usr/include/c++/15/variant + mdp:/usr/include/c++/15/vector + mdp:/usr/include/c++/15/version + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/atomic_word.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++allocator.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++config.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++locale.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/cpu_defines.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/ctype_base.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/ctype_inline.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/error_constants.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/gthr-default.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/gthr.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/messages_members.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/os_defines.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/time_members.h + mdp:/usr/include/ctype.h + mdp:/usr/include/endian.h + mdp:/usr/include/errno.h + mdp:/usr/include/features-time64.h + mdp:/usr/include/features.h + mdp:/usr/include/gnu/stubs-64.h + mdp:/usr/include/gnu/stubs.h + mdp:/usr/include/libintl.h + mdp:/usr/include/limits.h + mdp:/usr/include/linux/close_range.h + mdp:/usr/include/linux/errno.h + mdp:/usr/include/linux/limits.h + mdp:/usr/include/linux/posix_types.h + mdp:/usr/include/linux/sched/types.h + mdp:/usr/include/linux/stddef.h + mdp:/usr/include/linux/types.h + mdp:/usr/include/locale.h + mdp:/usr/include/pthread.h + mdp:/usr/include/qt6/QtCore/QString + mdp:/usr/include/qt6/QtCore/QVector + mdp:/usr/include/qt6/QtCore/q17memory.h + mdp:/usr/include/qt6/QtCore/q20functional.h + mdp:/usr/include/qt6/QtCore/q20iterator.h + mdp:/usr/include/qt6/QtCore/q20memory.h + mdp:/usr/include/qt6/QtCore/q20type_traits.h + mdp:/usr/include/qt6/QtCore/q20utility.h + mdp:/usr/include/qt6/QtCore/q23type_traits.h + mdp:/usr/include/qt6/QtCore/q23utility.h + mdp:/usr/include/qt6/QtCore/qabstractitemmodel.h + mdp:/usr/include/qt6/QtCore/qalgorithms.h + mdp:/usr/include/qt6/QtCore/qalloc.h + mdp:/usr/include/qt6/QtCore/qanystringview.h + mdp:/usr/include/qt6/QtCore/qarraydata.h + mdp:/usr/include/qt6/QtCore/qarraydataops.h + mdp:/usr/include/qt6/QtCore/qarraydatapointer.h + mdp:/usr/include/qt6/QtCore/qassert.h + mdp:/usr/include/qt6/QtCore/qatomic.h + mdp:/usr/include/qt6/QtCore/qatomic_cxx11.h + mdp:/usr/include/qt6/QtCore/qbasicatomic.h + mdp:/usr/include/qt6/QtCore/qbindingstorage.h + mdp:/usr/include/qt6/QtCore/qbytearray.h + mdp:/usr/include/qt6/QtCore/qbytearrayalgorithms.h + mdp:/usr/include/qt6/QtCore/qbytearraylist.h + mdp:/usr/include/qt6/QtCore/qbytearrayview.h + mdp:/usr/include/qt6/QtCore/qchar.h + mdp:/usr/include/qt6/QtCore/qcheckedint_impl.h + mdp:/usr/include/qt6/QtCore/qcompare.h + mdp:/usr/include/qt6/QtCore/qcompare_impl.h + mdp:/usr/include/qt6/QtCore/qcomparehelpers.h + mdp:/usr/include/qt6/QtCore/qcompilerdetection.h + mdp:/usr/include/qt6/QtCore/qconfig-64.h + mdp:/usr/include/qt6/QtCore/qconfig.h + mdp:/usr/include/qt6/QtCore/qconstructormacros.h + mdp:/usr/include/qt6/QtCore/qcontainerfwd.h + mdp:/usr/include/qt6/QtCore/qcontainerinfo.h + mdp:/usr/include/qt6/QtCore/qcontainertools_impl.h + mdp:/usr/include/qt6/QtCore/qcontiguouscache.h + mdp:/usr/include/qt6/QtCore/qdarwinhelpers.h + mdp:/usr/include/qt6/QtCore/qdatastream.h + mdp:/usr/include/qt6/QtCore/qdebug.h + mdp:/usr/include/qt6/QtCore/qendian.h + mdp:/usr/include/qt6/QtCore/qexceptionhandling.h + mdp:/usr/include/qt6/QtCore/qflags.h + mdp:/usr/include/qt6/QtCore/qfloat16.h + mdp:/usr/include/qt6/QtCore/qforeach.h + mdp:/usr/include/qt6/QtCore/qfunctionaltools_impl.h + mdp:/usr/include/qt6/QtCore/qfunctionpointer.h + mdp:/usr/include/qt6/QtCore/qgenericatomic.h + mdp:/usr/include/qt6/QtCore/qglobal.h + mdp:/usr/include/qt6/QtCore/qglobalstatic.h + mdp:/usr/include/qt6/QtCore/qhash.h + mdp:/usr/include/qt6/QtCore/qhashfunctions.h + mdp:/usr/include/qt6/QtCore/qiodevice.h + mdp:/usr/include/qt6/QtCore/qiodevicebase.h + mdp:/usr/include/qt6/QtCore/qitemselectionmodel.h + mdp:/usr/include/qt6/QtCore/qiterable.h + mdp:/usr/include/qt6/QtCore/qiterator.h + mdp:/usr/include/qt6/QtCore/qlatin1stringview.h + mdp:/usr/include/qt6/QtCore/qline.h + mdp:/usr/include/qt6/QtCore/qlist.h + mdp:/usr/include/qt6/QtCore/qlocale.h + mdp:/usr/include/qt6/QtCore/qlogging.h + mdp:/usr/include/qt6/QtCore/qmalloc.h + mdp:/usr/include/qt6/QtCore/qmap.h + mdp:/usr/include/qt6/QtCore/qmargins.h + mdp:/usr/include/qt6/QtCore/qmath.h + mdp:/usr/include/qt6/QtCore/qmetacontainer.h + mdp:/usr/include/qt6/QtCore/qmetatype.h + mdp:/usr/include/qt6/QtCore/qminmax.h + mdp:/usr/include/qt6/QtCore/qnamespace.h + mdp:/usr/include/qt6/QtCore/qnumeric.h + mdp:/usr/include/qt6/QtCore/qobject.h + mdp:/usr/include/qt6/QtCore/qobject_impl.h + mdp:/usr/include/qt6/QtCore/qobjectdefs.h + mdp:/usr/include/qt6/QtCore/qobjectdefs_impl.h + mdp:/usr/include/qt6/QtCore/qoverload.h + mdp:/usr/include/qt6/QtCore/qpair.h + mdp:/usr/include/qt6/QtCore/qpoint.h + mdp:/usr/include/qt6/QtCore/qprocessordetection.h + mdp:/usr/include/qt6/QtCore/qrect.h + mdp:/usr/include/qt6/QtCore/qrefcount.h + mdp:/usr/include/qt6/QtCore/qregularexpression.h + mdp:/usr/include/qt6/QtCore/qscopedpointer.h + mdp:/usr/include/qt6/QtCore/qscopeguard.h + mdp:/usr/include/qt6/QtCore/qset.h + mdp:/usr/include/qt6/QtCore/qshareddata.h + mdp:/usr/include/qt6/QtCore/qshareddata_impl.h + mdp:/usr/include/qt6/QtCore/qsharedpointer.h + mdp:/usr/include/qt6/QtCore/qsharedpointer_impl.h + mdp:/usr/include/qt6/QtCore/qsize.h + mdp:/usr/include/qt6/QtCore/qspan.h + mdp:/usr/include/qt6/QtCore/qstdlibdetection.h + mdp:/usr/include/qt6/QtCore/qstring.h + mdp:/usr/include/qt6/QtCore/qstringalgorithms.h + mdp:/usr/include/qt6/QtCore/qstringbuilder.h + mdp:/usr/include/qt6/QtCore/qstringconverter.h + mdp:/usr/include/qt6/QtCore/qstringconverter_base.h + mdp:/usr/include/qt6/QtCore/qstringfwd.h + mdp:/usr/include/qt6/QtCore/qstringlist.h + mdp:/usr/include/qt6/QtCore/qstringmatcher.h + mdp:/usr/include/qt6/QtCore/qstringtokenizer.h + mdp:/usr/include/qt6/QtCore/qstringview.h + mdp:/usr/include/qt6/QtCore/qswap.h + mdp:/usr/include/qt6/QtCore/qsysinfo.h + mdp:/usr/include/qt6/QtCore/qsystemdetection.h + mdp:/usr/include/qt6/QtCore/qtaggedpointer.h + mdp:/usr/include/qt6/QtCore/qtclasshelpermacros.h + mdp:/usr/include/qt6/QtCore/qtconfiginclude.h + mdp:/usr/include/qt6/QtCore/qtconfigmacros.h + mdp:/usr/include/qt6/QtCore/qtcore-config.h + mdp:/usr/include/qt6/QtCore/qtcoreexports.h + mdp:/usr/include/qt6/QtCore/qtcoreglobal.h + mdp:/usr/include/qt6/QtCore/qtdeprecationdefinitions.h + mdp:/usr/include/qt6/QtCore/qtdeprecationmarkers.h + mdp:/usr/include/qt6/QtCore/qtenvironmentvariables.h + mdp:/usr/include/qt6/QtCore/qtextstream.h + mdp:/usr/include/qt6/QtCore/qtformat_impl.h + mdp:/usr/include/qt6/QtCore/qtmetamacros.h + mdp:/usr/include/qt6/QtCore/qtnoop.h + mdp:/usr/include/qt6/QtCore/qtpreprocessorsupport.h + mdp:/usr/include/qt6/QtCore/qtresource.h + mdp:/usr/include/qt6/QtCore/qttranslation.h + mdp:/usr/include/qt6/QtCore/qttypetraits.h + mdp:/usr/include/qt6/QtCore/qtversion.h + mdp:/usr/include/qt6/QtCore/qtversionchecks.h + mdp:/usr/include/qt6/QtCore/qtypeinfo.h + mdp:/usr/include/qt6/QtCore/qtypes.h + mdp:/usr/include/qt6/QtCore/qurl.h + mdp:/usr/include/qt6/QtCore/qutf8stringview.h + mdp:/usr/include/qt6/QtCore/qvariant.h + mdp:/usr/include/qt6/QtCore/qvarlengtharray.h + mdp:/usr/include/qt6/QtCore/qvector.h + mdp:/usr/include/qt6/QtCore/qversiontagging.h + mdp:/usr/include/qt6/QtCore/qxptype_traits.h + mdp:/usr/include/qt6/QtCore/qyieldcpu.h + mdp:/usr/include/qt6/QtGui/qaction.h + mdp:/usr/include/qt6/QtGui/qbitmap.h + mdp:/usr/include/qt6/QtGui/qbrush.h + mdp:/usr/include/qt6/QtGui/qcolor.h + mdp:/usr/include/qt6/QtGui/qcursor.h + mdp:/usr/include/qt6/QtGui/qfont.h + mdp:/usr/include/qt6/QtGui/qfontinfo.h + mdp:/usr/include/qt6/QtGui/qfontmetrics.h + mdp:/usr/include/qt6/QtGui/qfontvariableaxis.h + mdp:/usr/include/qt6/QtGui/qicon.h + mdp:/usr/include/qt6/QtGui/qimage.h + mdp:/usr/include/qt6/QtGui/qkeysequence.h + mdp:/usr/include/qt6/QtGui/qpaintdevice.h + mdp:/usr/include/qt6/QtGui/qpalette.h + mdp:/usr/include/qt6/QtGui/qpen.h + mdp:/usr/include/qt6/QtGui/qpicture.h + mdp:/usr/include/qt6/QtGui/qpixelformat.h + mdp:/usr/include/qt6/QtGui/qpixmap.h + mdp:/usr/include/qt6/QtGui/qpolygon.h + mdp:/usr/include/qt6/QtGui/qregion.h + mdp:/usr/include/qt6/QtGui/qrgb.h + mdp:/usr/include/qt6/QtGui/qrgba64.h + mdp:/usr/include/qt6/QtGui/qtextcursor.h + mdp:/usr/include/qt6/QtGui/qtextdocument.h + mdp:/usr/include/qt6/QtGui/qtextformat.h + mdp:/usr/include/qt6/QtGui/qtextoption.h + mdp:/usr/include/qt6/QtGui/qtgui-config.h + mdp:/usr/include/qt6/QtGui/qtguiexports.h + mdp:/usr/include/qt6/QtGui/qtguiglobal.h + mdp:/usr/include/qt6/QtGui/qtransform.h + mdp:/usr/include/qt6/QtGui/qvalidator.h + mdp:/usr/include/qt6/QtGui/qwindowdefs.h + mdp:/usr/include/qt6/QtWidgets/QCheckBox + mdp:/usr/include/qt6/QtWidgets/QComboBox + mdp:/usr/include/qt6/QtWidgets/QDialog + mdp:/usr/include/qt6/QtWidgets/QGroupBox + mdp:/usr/include/qt6/QtWidgets/QHBoxLayout + mdp:/usr/include/qt6/QtWidgets/QLabel + mdp:/usr/include/qt6/QtWidgets/QLineEdit + mdp:/usr/include/qt6/QtWidgets/QPushButton + mdp:/usr/include/qt6/QtWidgets/QSpinBox + mdp:/usr/include/qt6/QtWidgets/QTableWidget + mdp:/usr/include/qt6/QtWidgets/QVBoxLayout + mdp:/usr/include/qt6/QtWidgets/qabstractbutton.h + mdp:/usr/include/qt6/QtWidgets/qabstractitemdelegate.h + mdp:/usr/include/qt6/QtWidgets/qabstractitemview.h + mdp:/usr/include/qt6/QtWidgets/qabstractscrollarea.h + mdp:/usr/include/qt6/QtWidgets/qabstractslider.h + mdp:/usr/include/qt6/QtWidgets/qabstractspinbox.h + mdp:/usr/include/qt6/QtWidgets/qboxlayout.h + mdp:/usr/include/qt6/QtWidgets/qcheckbox.h + mdp:/usr/include/qt6/QtWidgets/qcombobox.h + mdp:/usr/include/qt6/QtWidgets/qdialog.h + mdp:/usr/include/qt6/QtWidgets/qframe.h + mdp:/usr/include/qt6/QtWidgets/qgridlayout.h + mdp:/usr/include/qt6/QtWidgets/qgroupbox.h + mdp:/usr/include/qt6/QtWidgets/qlabel.h + mdp:/usr/include/qt6/QtWidgets/qlayout.h + mdp:/usr/include/qt6/QtWidgets/qlayoutitem.h + mdp:/usr/include/qt6/QtWidgets/qlineedit.h + mdp:/usr/include/qt6/QtWidgets/qpushbutton.h + mdp:/usr/include/qt6/QtWidgets/qrubberband.h + mdp:/usr/include/qt6/QtWidgets/qsizepolicy.h + mdp:/usr/include/qt6/QtWidgets/qslider.h + mdp:/usr/include/qt6/QtWidgets/qspinbox.h + mdp:/usr/include/qt6/QtWidgets/qstyle.h + mdp:/usr/include/qt6/QtWidgets/qstyleoption.h + mdp:/usr/include/qt6/QtWidgets/qtabbar.h + mdp:/usr/include/qt6/QtWidgets/qtableview.h + mdp:/usr/include/qt6/QtWidgets/qtablewidget.h + mdp:/usr/include/qt6/QtWidgets/qtabwidget.h + mdp:/usr/include/qt6/QtWidgets/qtwidgets-config.h + mdp:/usr/include/qt6/QtWidgets/qtwidgetsexports.h + mdp:/usr/include/qt6/QtWidgets/qtwidgetsglobal.h + mdp:/usr/include/qt6/QtWidgets/qwidget.h + mdp:/usr/include/sched.h + mdp:/usr/include/stdc-predef.h + mdp:/usr/include/stdint.h + mdp:/usr/include/stdio.h + mdp:/usr/include/stdlib.h + mdp:/usr/include/string.h + mdp:/usr/include/strings.h + mdp:/usr/include/sys/cdefs.h + mdp:/usr/include/sys/select.h + mdp:/usr/include/sys/single_threaded.h + mdp:/usr/include/sys/syscall.h + mdp:/usr/include/sys/types.h + mdp:/usr/include/syscall.h + mdp:/usr/include/time.h + mdp:/usr/include/unistd.h + mdp:/usr/include/wchar.h + mdp:/usr/include/wctype.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stdarg.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stdbool.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stddef.h +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/importer.cpp +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/progress_manager.h + mmc:Q_OBJECT + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/kassetmanagerqt_autogen/moc_predefs.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/progress_manager.h + mdp:/usr/include/alloca.h + mdp:/usr/include/asm-generic/bitsperlong.h + mdp:/usr/include/asm-generic/errno-base.h + mdp:/usr/include/asm-generic/errno.h + mdp:/usr/include/asm-generic/int-ll64.h + mdp:/usr/include/asm-generic/posix_types.h + mdp:/usr/include/asm-generic/types.h + mdp:/usr/include/asm/bitsperlong.h + mdp:/usr/include/asm/errno.h + mdp:/usr/include/asm/posix_types.h + mdp:/usr/include/asm/posix_types_64.h + mdp:/usr/include/asm/types.h + mdp:/usr/include/asm/unistd.h + mdp:/usr/include/asm/unistd_64.h + mdp:/usr/include/assert.h + mdp:/usr/include/bits/atomic_wide_counter.h + mdp:/usr/include/bits/byteswap.h + mdp:/usr/include/bits/confname.h + mdp:/usr/include/bits/cpu-set.h + mdp:/usr/include/bits/endian.h + mdp:/usr/include/bits/endianness.h + mdp:/usr/include/bits/environments.h + mdp:/usr/include/bits/errno.h + mdp:/usr/include/bits/floatn-common.h + mdp:/usr/include/bits/floatn.h + mdp:/usr/include/bits/getopt_core.h + mdp:/usr/include/bits/getopt_posix.h + mdp:/usr/include/bits/libc-header-start.h + mdp:/usr/include/bits/local_lim.h + mdp:/usr/include/bits/locale.h + mdp:/usr/include/bits/long-double.h + mdp:/usr/include/bits/posix1_lim.h + mdp:/usr/include/bits/posix2_lim.h + mdp:/usr/include/bits/posix_opt.h + mdp:/usr/include/bits/pthread_stack_min-dynamic.h + mdp:/usr/include/bits/pthreadtypes-arch.h + mdp:/usr/include/bits/pthreadtypes.h + mdp:/usr/include/bits/sched.h + mdp:/usr/include/bits/select.h + mdp:/usr/include/bits/setjmp.h + mdp:/usr/include/bits/stdint-intn.h + mdp:/usr/include/bits/stdint-least.h + mdp:/usr/include/bits/stdint-uintn.h + mdp:/usr/include/bits/stdio_lim.h + mdp:/usr/include/bits/stdlib-float.h + mdp:/usr/include/bits/struct_mutex.h + mdp:/usr/include/bits/struct_rwlock.h + mdp:/usr/include/bits/syscall.h + mdp:/usr/include/bits/thread-shared-types.h + mdp:/usr/include/bits/time.h + mdp:/usr/include/bits/time64.h + mdp:/usr/include/bits/timesize.h + mdp:/usr/include/bits/timex.h + mdp:/usr/include/bits/types.h + mdp:/usr/include/bits/types/FILE.h + mdp:/usr/include/bits/types/__FILE.h + mdp:/usr/include/bits/types/__fpos64_t.h + mdp:/usr/include/bits/types/__fpos_t.h + mdp:/usr/include/bits/types/__locale_t.h + mdp:/usr/include/bits/types/__mbstate_t.h + mdp:/usr/include/bits/types/__sigset_t.h + mdp:/usr/include/bits/types/clock_t.h + mdp:/usr/include/bits/types/clockid_t.h + mdp:/usr/include/bits/types/cookie_io_functions_t.h + mdp:/usr/include/bits/types/error_t.h + mdp:/usr/include/bits/types/locale_t.h + mdp:/usr/include/bits/types/mbstate_t.h + mdp:/usr/include/bits/types/sigset_t.h + mdp:/usr/include/bits/types/struct_FILE.h + mdp:/usr/include/bits/types/struct___jmp_buf_tag.h + mdp:/usr/include/bits/types/struct_itimerspec.h + mdp:/usr/include/bits/types/struct_sched_param.h + mdp:/usr/include/bits/types/struct_timespec.h + mdp:/usr/include/bits/types/struct_timeval.h + mdp:/usr/include/bits/types/struct_tm.h + mdp:/usr/include/bits/types/time_t.h + mdp:/usr/include/bits/types/timer_t.h + mdp:/usr/include/bits/types/wint_t.h + mdp:/usr/include/bits/typesizes.h + mdp:/usr/include/bits/uintn-identity.h + mdp:/usr/include/bits/uio_lim.h + mdp:/usr/include/bits/unistd_ext.h + mdp:/usr/include/bits/waitflags.h + mdp:/usr/include/bits/waitstatus.h + mdp:/usr/include/bits/wchar.h + mdp:/usr/include/bits/wctype-wchar.h + mdp:/usr/include/bits/wordsize.h + mdp:/usr/include/bits/xopen_lim.h + mdp:/usr/include/c++/15/algorithm + mdp:/usr/include/c++/15/array + mdp:/usr/include/c++/15/atomic + mdp:/usr/include/c++/15/backward/auto_ptr.h + mdp:/usr/include/c++/15/backward/binders.h + mdp:/usr/include/c++/15/bit + mdp:/usr/include/c++/15/bits/algorithmfwd.h + mdp:/usr/include/c++/15/bits/align.h + mdp:/usr/include/c++/15/bits/alloc_traits.h + mdp:/usr/include/c++/15/bits/allocated_ptr.h + mdp:/usr/include/c++/15/bits/allocator.h + mdp:/usr/include/c++/15/bits/atomic_base.h + mdp:/usr/include/c++/15/bits/atomic_lockfree_defines.h + mdp:/usr/include/c++/15/bits/atomic_wait.h + mdp:/usr/include/c++/15/bits/basic_ios.h + mdp:/usr/include/c++/15/bits/basic_ios.tcc + mdp:/usr/include/c++/15/bits/basic_string.h + mdp:/usr/include/c++/15/bits/basic_string.tcc + mdp:/usr/include/c++/15/bits/char_traits.h + mdp:/usr/include/c++/15/bits/charconv.h + mdp:/usr/include/c++/15/bits/chrono.h + mdp:/usr/include/c++/15/bits/chrono_io.h + mdp:/usr/include/c++/15/bits/codecvt.h + mdp:/usr/include/c++/15/bits/concept_check.h + mdp:/usr/include/c++/15/bits/cpp_type_traits.h + mdp:/usr/include/c++/15/bits/cxxabi_forced.h + mdp:/usr/include/c++/15/bits/cxxabi_init_exception.h + mdp:/usr/include/c++/15/bits/enable_special_members.h + mdp:/usr/include/c++/15/bits/erase_if.h + mdp:/usr/include/c++/15/bits/exception.h + mdp:/usr/include/c++/15/bits/exception_defines.h + mdp:/usr/include/c++/15/bits/exception_ptr.h + mdp:/usr/include/c++/15/bits/functexcept.h + mdp:/usr/include/c++/15/bits/functional_hash.h + mdp:/usr/include/c++/15/bits/hash_bytes.h + mdp:/usr/include/c++/15/bits/hashtable.h + mdp:/usr/include/c++/15/bits/hashtable_policy.h + mdp:/usr/include/c++/15/bits/invoke.h + mdp:/usr/include/c++/15/bits/ios_base.h + mdp:/usr/include/c++/15/bits/istream.tcc + mdp:/usr/include/c++/15/bits/iterator_concepts.h + mdp:/usr/include/c++/15/bits/list.tcc + mdp:/usr/include/c++/15/bits/locale_classes.h + mdp:/usr/include/c++/15/bits/locale_classes.tcc + mdp:/usr/include/c++/15/bits/locale_conv.h + mdp:/usr/include/c++/15/bits/locale_facets.h + mdp:/usr/include/c++/15/bits/locale_facets.tcc + mdp:/usr/include/c++/15/bits/locale_facets_nonio.h + mdp:/usr/include/c++/15/bits/locale_facets_nonio.tcc + mdp:/usr/include/c++/15/bits/localefwd.h + mdp:/usr/include/c++/15/bits/max_size_type.h + mdp:/usr/include/c++/15/bits/memory_resource.h + mdp:/usr/include/c++/15/bits/memoryfwd.h + mdp:/usr/include/c++/15/bits/move.h + mdp:/usr/include/c++/15/bits/nested_exception.h + mdp:/usr/include/c++/15/bits/new_allocator.h + mdp:/usr/include/c++/15/bits/node_handle.h + mdp:/usr/include/c++/15/bits/ostream.h + mdp:/usr/include/c++/15/bits/ostream.tcc + mdp:/usr/include/c++/15/bits/ostream_insert.h + mdp:/usr/include/c++/15/bits/parse_numbers.h + mdp:/usr/include/c++/15/bits/postypes.h + mdp:/usr/include/c++/15/bits/predefined_ops.h + mdp:/usr/include/c++/15/bits/ptr_traits.h + mdp:/usr/include/c++/15/bits/quoted_string.h + mdp:/usr/include/c++/15/bits/range_access.h + mdp:/usr/include/c++/15/bits/ranges_algo.h + mdp:/usr/include/c++/15/bits/ranges_algobase.h + mdp:/usr/include/c++/15/bits/ranges_base.h + mdp:/usr/include/c++/15/bits/ranges_cmp.h + mdp:/usr/include/c++/15/bits/ranges_uninitialized.h + mdp:/usr/include/c++/15/bits/ranges_util.h + mdp:/usr/include/c++/15/bits/refwrap.h + mdp:/usr/include/c++/15/bits/requires_hosted.h + mdp:/usr/include/c++/15/bits/shared_ptr.h + mdp:/usr/include/c++/15/bits/shared_ptr_atomic.h + mdp:/usr/include/c++/15/bits/shared_ptr_base.h + mdp:/usr/include/c++/15/bits/specfun.h + mdp:/usr/include/c++/15/bits/sstream.tcc + mdp:/usr/include/c++/15/bits/std_abs.h + mdp:/usr/include/c++/15/bits/std_function.h + mdp:/usr/include/c++/15/bits/std_mutex.h + mdp:/usr/include/c++/15/bits/stl_algo.h + mdp:/usr/include/c++/15/bits/stl_algobase.h + mdp:/usr/include/c++/15/bits/stl_bvector.h + mdp:/usr/include/c++/15/bits/stl_construct.h + mdp:/usr/include/c++/15/bits/stl_function.h + mdp:/usr/include/c++/15/bits/stl_heap.h + mdp:/usr/include/c++/15/bits/stl_iterator.h + mdp:/usr/include/c++/15/bits/stl_iterator_base_funcs.h + mdp:/usr/include/c++/15/bits/stl_iterator_base_types.h + mdp:/usr/include/c++/15/bits/stl_list.h + mdp:/usr/include/c++/15/bits/stl_map.h + mdp:/usr/include/c++/15/bits/stl_multimap.h + mdp:/usr/include/c++/15/bits/stl_numeric.h + mdp:/usr/include/c++/15/bits/stl_pair.h + mdp:/usr/include/c++/15/bits/stl_raw_storage_iter.h + mdp:/usr/include/c++/15/bits/stl_relops.h + mdp:/usr/include/c++/15/bits/stl_tempbuf.h + mdp:/usr/include/c++/15/bits/stl_tree.h + mdp:/usr/include/c++/15/bits/stl_uninitialized.h + mdp:/usr/include/c++/15/bits/stl_vector.h + mdp:/usr/include/c++/15/bits/stream_iterator.h + mdp:/usr/include/c++/15/bits/streambuf.tcc + mdp:/usr/include/c++/15/bits/streambuf_iterator.h + mdp:/usr/include/c++/15/bits/string_view.tcc + mdp:/usr/include/c++/15/bits/stringfwd.h + mdp:/usr/include/c++/15/bits/uniform_int_dist.h + mdp:/usr/include/c++/15/bits/unique_ptr.h + mdp:/usr/include/c++/15/bits/unordered_map.h + mdp:/usr/include/c++/15/bits/uses_allocator.h + mdp:/usr/include/c++/15/bits/uses_allocator_args.h + mdp:/usr/include/c++/15/bits/utility.h + mdp:/usr/include/c++/15/bits/vector.tcc + mdp:/usr/include/c++/15/bits/version.h + mdp:/usr/include/c++/15/cctype + mdp:/usr/include/c++/15/cerrno + mdp:/usr/include/c++/15/charconv + mdp:/usr/include/c++/15/chrono + mdp:/usr/include/c++/15/climits + mdp:/usr/include/c++/15/clocale + mdp:/usr/include/c++/15/cmath + mdp:/usr/include/c++/15/compare + mdp:/usr/include/c++/15/concepts + mdp:/usr/include/c++/15/cstddef + mdp:/usr/include/c++/15/cstdint + mdp:/usr/include/c++/15/cstdio + mdp:/usr/include/c++/15/cstdlib + mdp:/usr/include/c++/15/cstring + mdp:/usr/include/c++/15/ctime + mdp:/usr/include/c++/15/cwchar + mdp:/usr/include/c++/15/cwctype + mdp:/usr/include/c++/15/debug/assertions.h + mdp:/usr/include/c++/15/debug/debug.h + mdp:/usr/include/c++/15/exception + mdp:/usr/include/c++/15/ext/aligned_buffer.h + mdp:/usr/include/c++/15/ext/alloc_traits.h + mdp:/usr/include/c++/15/ext/atomicity.h + mdp:/usr/include/c++/15/ext/concurrence.h + mdp:/usr/include/c++/15/ext/numeric_traits.h + mdp:/usr/include/c++/15/ext/string_conversions.h + mdp:/usr/include/c++/15/ext/type_traits.h + mdp:/usr/include/c++/15/format + mdp:/usr/include/c++/15/functional + mdp:/usr/include/c++/15/initializer_list + mdp:/usr/include/c++/15/iomanip + mdp:/usr/include/c++/15/ios + mdp:/usr/include/c++/15/iosfwd + mdp:/usr/include/c++/15/istream + mdp:/usr/include/c++/15/iterator + mdp:/usr/include/c++/15/limits + mdp:/usr/include/c++/15/list + mdp:/usr/include/c++/15/locale + mdp:/usr/include/c++/15/map + mdp:/usr/include/c++/15/memory + mdp:/usr/include/c++/15/new + mdp:/usr/include/c++/15/numeric + mdp:/usr/include/c++/15/optional + mdp:/usr/include/c++/15/ostream + mdp:/usr/include/c++/15/pstl/execution_defs.h + mdp:/usr/include/c++/15/pstl/glue_numeric_defs.h + mdp:/usr/include/c++/15/pstl/pstl_config.h + mdp:/usr/include/c++/15/ratio + mdp:/usr/include/c++/15/sstream + mdp:/usr/include/c++/15/stdexcept + mdp:/usr/include/c++/15/streambuf + mdp:/usr/include/c++/15/string + mdp:/usr/include/c++/15/string_view + mdp:/usr/include/c++/15/system_error + mdp:/usr/include/c++/15/tr1/bessel_function.tcc + mdp:/usr/include/c++/15/tr1/beta_function.tcc + mdp:/usr/include/c++/15/tr1/ell_integral.tcc + mdp:/usr/include/c++/15/tr1/exp_integral.tcc + mdp:/usr/include/c++/15/tr1/gamma.tcc + mdp:/usr/include/c++/15/tr1/hypergeometric.tcc + mdp:/usr/include/c++/15/tr1/legendre_function.tcc + mdp:/usr/include/c++/15/tr1/modified_bessel_func.tcc + mdp:/usr/include/c++/15/tr1/poly_hermite.tcc + mdp:/usr/include/c++/15/tr1/poly_laguerre.tcc + mdp:/usr/include/c++/15/tr1/riemann_zeta.tcc + mdp:/usr/include/c++/15/tr1/special_function_util.h + mdp:/usr/include/c++/15/tuple + mdp:/usr/include/c++/15/type_traits + mdp:/usr/include/c++/15/typeinfo + mdp:/usr/include/c++/15/unordered_map + mdp:/usr/include/c++/15/utility + mdp:/usr/include/c++/15/variant + mdp:/usr/include/c++/15/vector + mdp:/usr/include/c++/15/version + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/atomic_word.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++allocator.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++config.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++locale.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/cpu_defines.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/ctype_base.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/ctype_inline.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/error_constants.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/gthr-default.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/gthr.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/messages_members.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/os_defines.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/time_members.h + mdp:/usr/include/ctype.h + mdp:/usr/include/endian.h + mdp:/usr/include/errno.h + mdp:/usr/include/features-time64.h + mdp:/usr/include/features.h + mdp:/usr/include/gnu/stubs-64.h + mdp:/usr/include/gnu/stubs.h + mdp:/usr/include/libintl.h + mdp:/usr/include/limits.h + mdp:/usr/include/linux/close_range.h + mdp:/usr/include/linux/errno.h + mdp:/usr/include/linux/limits.h + mdp:/usr/include/linux/posix_types.h + mdp:/usr/include/linux/sched/types.h + mdp:/usr/include/linux/stddef.h + mdp:/usr/include/linux/types.h + mdp:/usr/include/locale.h + mdp:/usr/include/pthread.h + mdp:/usr/include/qt6/QtCore/QMutex + mdp:/usr/include/qt6/QtCore/QObject + mdp:/usr/include/qt6/QtCore/QString + mdp:/usr/include/qt6/QtCore/q17memory.h + mdp:/usr/include/qt6/QtCore/q20functional.h + mdp:/usr/include/qt6/QtCore/q20memory.h + mdp:/usr/include/qt6/QtCore/q20type_traits.h + mdp:/usr/include/qt6/QtCore/q23type_traits.h + mdp:/usr/include/qt6/QtCore/qalgorithms.h + mdp:/usr/include/qt6/QtCore/qanystringview.h + mdp:/usr/include/qt6/QtCore/qarraydata.h + mdp:/usr/include/qt6/QtCore/qarraydataops.h + mdp:/usr/include/qt6/QtCore/qarraydatapointer.h + mdp:/usr/include/qt6/QtCore/qassert.h + mdp:/usr/include/qt6/QtCore/qatomic.h + mdp:/usr/include/qt6/QtCore/qatomic_cxx11.h + mdp:/usr/include/qt6/QtCore/qbasicatomic.h + mdp:/usr/include/qt6/QtCore/qbindingstorage.h + mdp:/usr/include/qt6/QtCore/qbytearray.h + mdp:/usr/include/qt6/QtCore/qbytearrayalgorithms.h + mdp:/usr/include/qt6/QtCore/qbytearraylist.h + mdp:/usr/include/qt6/QtCore/qbytearrayview.h + mdp:/usr/include/qt6/QtCore/qchar.h + mdp:/usr/include/qt6/QtCore/qcompare.h + mdp:/usr/include/qt6/QtCore/qcompare_impl.h + mdp:/usr/include/qt6/QtCore/qcomparehelpers.h + mdp:/usr/include/qt6/QtCore/qcompilerdetection.h + mdp:/usr/include/qt6/QtCore/qconfig-64.h + mdp:/usr/include/qt6/QtCore/qconfig.h + mdp:/usr/include/qt6/QtCore/qconstructormacros.h + mdp:/usr/include/qt6/QtCore/qcontainerfwd.h + mdp:/usr/include/qt6/QtCore/qcontainerinfo.h + mdp:/usr/include/qt6/QtCore/qcontainertools_impl.h + mdp:/usr/include/qt6/QtCore/qdarwinhelpers.h + mdp:/usr/include/qt6/QtCore/qdatastream.h + mdp:/usr/include/qt6/QtCore/qdeadlinetimer.h + mdp:/usr/include/qt6/QtCore/qexceptionhandling.h + mdp:/usr/include/qt6/QtCore/qflags.h + mdp:/usr/include/qt6/QtCore/qfloat16.h + mdp:/usr/include/qt6/QtCore/qforeach.h + mdp:/usr/include/qt6/QtCore/qfunctionaltools_impl.h + mdp:/usr/include/qt6/QtCore/qfunctionpointer.h + mdp:/usr/include/qt6/QtCore/qgenericatomic.h + mdp:/usr/include/qt6/QtCore/qglobal.h + mdp:/usr/include/qt6/QtCore/qglobalstatic.h + mdp:/usr/include/qt6/QtCore/qhashfunctions.h + mdp:/usr/include/qt6/QtCore/qiodevicebase.h + mdp:/usr/include/qt6/QtCore/qiterable.h + mdp:/usr/include/qt6/QtCore/qiterator.h + mdp:/usr/include/qt6/QtCore/qlatin1stringview.h + mdp:/usr/include/qt6/QtCore/qlist.h + mdp:/usr/include/qt6/QtCore/qlogging.h + mdp:/usr/include/qt6/QtCore/qmalloc.h + mdp:/usr/include/qt6/QtCore/qmath.h + mdp:/usr/include/qt6/QtCore/qmetacontainer.h + mdp:/usr/include/qt6/QtCore/qmetatype.h + mdp:/usr/include/qt6/QtCore/qminmax.h + mdp:/usr/include/qt6/QtCore/qmutex.h + mdp:/usr/include/qt6/QtCore/qnamespace.h + mdp:/usr/include/qt6/QtCore/qnumeric.h + mdp:/usr/include/qt6/QtCore/qobject.h + mdp:/usr/include/qt6/QtCore/qobject_impl.h + mdp:/usr/include/qt6/QtCore/qobjectdefs.h + mdp:/usr/include/qt6/QtCore/qobjectdefs_impl.h + mdp:/usr/include/qt6/QtCore/qoverload.h + mdp:/usr/include/qt6/QtCore/qpair.h + mdp:/usr/include/qt6/QtCore/qprocessordetection.h + mdp:/usr/include/qt6/QtCore/qrefcount.h + mdp:/usr/include/qt6/QtCore/qscopedpointer.h + mdp:/usr/include/qt6/QtCore/qscopeguard.h + mdp:/usr/include/qt6/QtCore/qstdlibdetection.h + mdp:/usr/include/qt6/QtCore/qstring.h + mdp:/usr/include/qt6/QtCore/qstringalgorithms.h + mdp:/usr/include/qt6/QtCore/qstringbuilder.h + mdp:/usr/include/qt6/QtCore/qstringconverter.h + mdp:/usr/include/qt6/QtCore/qstringconverter_base.h + mdp:/usr/include/qt6/QtCore/qstringfwd.h + mdp:/usr/include/qt6/QtCore/qstringlist.h + mdp:/usr/include/qt6/QtCore/qstringmatcher.h + mdp:/usr/include/qt6/QtCore/qstringtokenizer.h + mdp:/usr/include/qt6/QtCore/qstringview.h + mdp:/usr/include/qt6/QtCore/qswap.h + mdp:/usr/include/qt6/QtCore/qsysinfo.h + mdp:/usr/include/qt6/QtCore/qsystemdetection.h + mdp:/usr/include/qt6/QtCore/qtaggedpointer.h + mdp:/usr/include/qt6/QtCore/qtclasshelpermacros.h + mdp:/usr/include/qt6/QtCore/qtconfiginclude.h + mdp:/usr/include/qt6/QtCore/qtconfigmacros.h + mdp:/usr/include/qt6/QtCore/qtcore-config.h + mdp:/usr/include/qt6/QtCore/qtcoreexports.h + mdp:/usr/include/qt6/QtCore/qtcoreglobal.h + mdp:/usr/include/qt6/QtCore/qtdeprecationdefinitions.h + mdp:/usr/include/qt6/QtCore/qtdeprecationmarkers.h + mdp:/usr/include/qt6/QtCore/qtenvironmentvariables.h + mdp:/usr/include/qt6/QtCore/qtformat_impl.h + mdp:/usr/include/qt6/QtCore/qtmetamacros.h + mdp:/usr/include/qt6/QtCore/qtnoop.h + mdp:/usr/include/qt6/QtCore/qtpreprocessorsupport.h + mdp:/usr/include/qt6/QtCore/qtresource.h + mdp:/usr/include/qt6/QtCore/qtsan_impl.h + mdp:/usr/include/qt6/QtCore/qttranslation.h + mdp:/usr/include/qt6/QtCore/qttypetraits.h + mdp:/usr/include/qt6/QtCore/qtversion.h + mdp:/usr/include/qt6/QtCore/qtversionchecks.h + mdp:/usr/include/qt6/QtCore/qtypeinfo.h + mdp:/usr/include/qt6/QtCore/qtypes.h + mdp:/usr/include/qt6/QtCore/qutf8stringview.h + mdp:/usr/include/qt6/QtCore/qversiontagging.h + mdp:/usr/include/qt6/QtCore/qxptype_traits.h + mdp:/usr/include/qt6/QtCore/qyieldcpu.h + mdp:/usr/include/sched.h + mdp:/usr/include/stdc-predef.h + mdp:/usr/include/stdint.h + mdp:/usr/include/stdio.h + mdp:/usr/include/stdlib.h + mdp:/usr/include/string.h + mdp:/usr/include/strings.h + mdp:/usr/include/sys/cdefs.h + mdp:/usr/include/sys/select.h + mdp:/usr/include/sys/single_threaded.h + mdp:/usr/include/sys/syscall.h + mdp:/usr/include/sys/types.h + mdp:/usr/include/syscall.h + mdp:/usr/include/time.h + mdp:/usr/include/unistd.h + mdp:/usr/include/wchar.h + mdp:/usr/include/wctype.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stdarg.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stdbool.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stddef.h +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/thumbnail_generator_worker.cpp +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/project_folder_watcher.h + mmc:Q_OBJECT + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/kassetmanagerqt_autogen/moc_predefs.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/project_folder_watcher.h + mdp:/usr/include/alloca.h + mdp:/usr/include/asm-generic/bitsperlong.h + mdp:/usr/include/asm-generic/errno-base.h + mdp:/usr/include/asm-generic/errno.h + mdp:/usr/include/asm-generic/int-ll64.h + mdp:/usr/include/asm-generic/posix_types.h + mdp:/usr/include/asm-generic/types.h + mdp:/usr/include/asm/bitsperlong.h + mdp:/usr/include/asm/errno.h + mdp:/usr/include/asm/posix_types.h + mdp:/usr/include/asm/posix_types_64.h + mdp:/usr/include/asm/types.h + mdp:/usr/include/asm/unistd.h + mdp:/usr/include/asm/unistd_64.h + mdp:/usr/include/assert.h + mdp:/usr/include/bits/atomic_wide_counter.h + mdp:/usr/include/bits/byteswap.h + mdp:/usr/include/bits/confname.h + mdp:/usr/include/bits/cpu-set.h + mdp:/usr/include/bits/endian.h + mdp:/usr/include/bits/endianness.h + mdp:/usr/include/bits/environments.h + mdp:/usr/include/bits/errno.h + mdp:/usr/include/bits/floatn-common.h + mdp:/usr/include/bits/floatn.h + mdp:/usr/include/bits/getopt_core.h + mdp:/usr/include/bits/getopt_posix.h + mdp:/usr/include/bits/libc-header-start.h + mdp:/usr/include/bits/local_lim.h + mdp:/usr/include/bits/locale.h + mdp:/usr/include/bits/long-double.h + mdp:/usr/include/bits/posix1_lim.h + mdp:/usr/include/bits/posix2_lim.h + mdp:/usr/include/bits/posix_opt.h + mdp:/usr/include/bits/pthread_stack_min-dynamic.h + mdp:/usr/include/bits/pthreadtypes-arch.h + mdp:/usr/include/bits/pthreadtypes.h + mdp:/usr/include/bits/sched.h + mdp:/usr/include/bits/select.h + mdp:/usr/include/bits/setjmp.h + mdp:/usr/include/bits/stdint-intn.h + mdp:/usr/include/bits/stdint-least.h + mdp:/usr/include/bits/stdint-uintn.h + mdp:/usr/include/bits/stdio_lim.h + mdp:/usr/include/bits/stdlib-float.h + mdp:/usr/include/bits/struct_mutex.h + mdp:/usr/include/bits/struct_rwlock.h + mdp:/usr/include/bits/syscall.h + mdp:/usr/include/bits/thread-shared-types.h + mdp:/usr/include/bits/time.h + mdp:/usr/include/bits/time64.h + mdp:/usr/include/bits/timesize.h + mdp:/usr/include/bits/timex.h + mdp:/usr/include/bits/types.h + mdp:/usr/include/bits/types/FILE.h + mdp:/usr/include/bits/types/__FILE.h + mdp:/usr/include/bits/types/__fpos64_t.h + mdp:/usr/include/bits/types/__fpos_t.h + mdp:/usr/include/bits/types/__locale_t.h + mdp:/usr/include/bits/types/__mbstate_t.h + mdp:/usr/include/bits/types/__sigset_t.h + mdp:/usr/include/bits/types/clock_t.h + mdp:/usr/include/bits/types/clockid_t.h + mdp:/usr/include/bits/types/cookie_io_functions_t.h + mdp:/usr/include/bits/types/error_t.h + mdp:/usr/include/bits/types/locale_t.h + mdp:/usr/include/bits/types/mbstate_t.h + mdp:/usr/include/bits/types/sigset_t.h + mdp:/usr/include/bits/types/struct_FILE.h + mdp:/usr/include/bits/types/struct___jmp_buf_tag.h + mdp:/usr/include/bits/types/struct_itimerspec.h + mdp:/usr/include/bits/types/struct_sched_param.h + mdp:/usr/include/bits/types/struct_timespec.h + mdp:/usr/include/bits/types/struct_timeval.h + mdp:/usr/include/bits/types/struct_tm.h + mdp:/usr/include/bits/types/time_t.h + mdp:/usr/include/bits/types/timer_t.h + mdp:/usr/include/bits/types/wint_t.h + mdp:/usr/include/bits/typesizes.h + mdp:/usr/include/bits/uintn-identity.h + mdp:/usr/include/bits/uio_lim.h + mdp:/usr/include/bits/unistd_ext.h + mdp:/usr/include/bits/waitflags.h + mdp:/usr/include/bits/waitstatus.h + mdp:/usr/include/bits/wchar.h + mdp:/usr/include/bits/wctype-wchar.h + mdp:/usr/include/bits/wordsize.h + mdp:/usr/include/bits/xopen_lim.h + mdp:/usr/include/c++/15/algorithm + mdp:/usr/include/c++/15/array + mdp:/usr/include/c++/15/atomic + mdp:/usr/include/c++/15/backward/auto_ptr.h + mdp:/usr/include/c++/15/backward/binders.h + mdp:/usr/include/c++/15/bit + mdp:/usr/include/c++/15/bits/algorithmfwd.h + mdp:/usr/include/c++/15/bits/align.h + mdp:/usr/include/c++/15/bits/alloc_traits.h + mdp:/usr/include/c++/15/bits/allocated_ptr.h + mdp:/usr/include/c++/15/bits/allocator.h + mdp:/usr/include/c++/15/bits/atomic_base.h + mdp:/usr/include/c++/15/bits/atomic_lockfree_defines.h + mdp:/usr/include/c++/15/bits/atomic_wait.h + mdp:/usr/include/c++/15/bits/basic_ios.h + mdp:/usr/include/c++/15/bits/basic_ios.tcc + mdp:/usr/include/c++/15/bits/basic_string.h + mdp:/usr/include/c++/15/bits/basic_string.tcc + mdp:/usr/include/c++/15/bits/char_traits.h + mdp:/usr/include/c++/15/bits/charconv.h + mdp:/usr/include/c++/15/bits/chrono.h + mdp:/usr/include/c++/15/bits/chrono_io.h + mdp:/usr/include/c++/15/bits/codecvt.h + mdp:/usr/include/c++/15/bits/concept_check.h + mdp:/usr/include/c++/15/bits/cpp_type_traits.h + mdp:/usr/include/c++/15/bits/cxxabi_forced.h + mdp:/usr/include/c++/15/bits/cxxabi_init_exception.h + mdp:/usr/include/c++/15/bits/enable_special_members.h + mdp:/usr/include/c++/15/bits/erase_if.h + mdp:/usr/include/c++/15/bits/exception.h + mdp:/usr/include/c++/15/bits/exception_defines.h + mdp:/usr/include/c++/15/bits/exception_ptr.h + mdp:/usr/include/c++/15/bits/functexcept.h + mdp:/usr/include/c++/15/bits/functional_hash.h + mdp:/usr/include/c++/15/bits/hash_bytes.h + mdp:/usr/include/c++/15/bits/hashtable.h + mdp:/usr/include/c++/15/bits/hashtable_policy.h + mdp:/usr/include/c++/15/bits/invoke.h + mdp:/usr/include/c++/15/bits/ios_base.h + mdp:/usr/include/c++/15/bits/istream.tcc + mdp:/usr/include/c++/15/bits/iterator_concepts.h + mdp:/usr/include/c++/15/bits/list.tcc + mdp:/usr/include/c++/15/bits/locale_classes.h + mdp:/usr/include/c++/15/bits/locale_classes.tcc + mdp:/usr/include/c++/15/bits/locale_conv.h + mdp:/usr/include/c++/15/bits/locale_facets.h + mdp:/usr/include/c++/15/bits/locale_facets.tcc + mdp:/usr/include/c++/15/bits/locale_facets_nonio.h + mdp:/usr/include/c++/15/bits/locale_facets_nonio.tcc + mdp:/usr/include/c++/15/bits/localefwd.h + mdp:/usr/include/c++/15/bits/max_size_type.h + mdp:/usr/include/c++/15/bits/memory_resource.h + mdp:/usr/include/c++/15/bits/memoryfwd.h + mdp:/usr/include/c++/15/bits/move.h + mdp:/usr/include/c++/15/bits/nested_exception.h + mdp:/usr/include/c++/15/bits/new_allocator.h + mdp:/usr/include/c++/15/bits/node_handle.h + mdp:/usr/include/c++/15/bits/ostream.h + mdp:/usr/include/c++/15/bits/ostream.tcc + mdp:/usr/include/c++/15/bits/ostream_insert.h + mdp:/usr/include/c++/15/bits/parse_numbers.h + mdp:/usr/include/c++/15/bits/postypes.h + mdp:/usr/include/c++/15/bits/predefined_ops.h + mdp:/usr/include/c++/15/bits/ptr_traits.h + mdp:/usr/include/c++/15/bits/quoted_string.h + mdp:/usr/include/c++/15/bits/range_access.h + mdp:/usr/include/c++/15/bits/ranges_algo.h + mdp:/usr/include/c++/15/bits/ranges_algobase.h + mdp:/usr/include/c++/15/bits/ranges_base.h + mdp:/usr/include/c++/15/bits/ranges_cmp.h + mdp:/usr/include/c++/15/bits/ranges_uninitialized.h + mdp:/usr/include/c++/15/bits/ranges_util.h + mdp:/usr/include/c++/15/bits/refwrap.h + mdp:/usr/include/c++/15/bits/requires_hosted.h + mdp:/usr/include/c++/15/bits/shared_ptr.h + mdp:/usr/include/c++/15/bits/shared_ptr_atomic.h + mdp:/usr/include/c++/15/bits/shared_ptr_base.h + mdp:/usr/include/c++/15/bits/specfun.h + mdp:/usr/include/c++/15/bits/sstream.tcc + mdp:/usr/include/c++/15/bits/std_abs.h + mdp:/usr/include/c++/15/bits/std_function.h + mdp:/usr/include/c++/15/bits/std_mutex.h + mdp:/usr/include/c++/15/bits/stl_algo.h + mdp:/usr/include/c++/15/bits/stl_algobase.h + mdp:/usr/include/c++/15/bits/stl_bvector.h + mdp:/usr/include/c++/15/bits/stl_construct.h + mdp:/usr/include/c++/15/bits/stl_function.h + mdp:/usr/include/c++/15/bits/stl_heap.h + mdp:/usr/include/c++/15/bits/stl_iterator.h + mdp:/usr/include/c++/15/bits/stl_iterator_base_funcs.h + mdp:/usr/include/c++/15/bits/stl_iterator_base_types.h + mdp:/usr/include/c++/15/bits/stl_list.h + mdp:/usr/include/c++/15/bits/stl_map.h + mdp:/usr/include/c++/15/bits/stl_multimap.h + mdp:/usr/include/c++/15/bits/stl_numeric.h + mdp:/usr/include/c++/15/bits/stl_pair.h + mdp:/usr/include/c++/15/bits/stl_raw_storage_iter.h + mdp:/usr/include/c++/15/bits/stl_relops.h + mdp:/usr/include/c++/15/bits/stl_tempbuf.h + mdp:/usr/include/c++/15/bits/stl_tree.h + mdp:/usr/include/c++/15/bits/stl_uninitialized.h + mdp:/usr/include/c++/15/bits/stl_vector.h + mdp:/usr/include/c++/15/bits/stream_iterator.h + mdp:/usr/include/c++/15/bits/streambuf.tcc + mdp:/usr/include/c++/15/bits/streambuf_iterator.h + mdp:/usr/include/c++/15/bits/string_view.tcc + mdp:/usr/include/c++/15/bits/stringfwd.h + mdp:/usr/include/c++/15/bits/uniform_int_dist.h + mdp:/usr/include/c++/15/bits/unique_ptr.h + mdp:/usr/include/c++/15/bits/unordered_map.h + mdp:/usr/include/c++/15/bits/uses_allocator.h + mdp:/usr/include/c++/15/bits/uses_allocator_args.h + mdp:/usr/include/c++/15/bits/utility.h + mdp:/usr/include/c++/15/bits/vector.tcc + mdp:/usr/include/c++/15/bits/version.h + mdp:/usr/include/c++/15/cctype + mdp:/usr/include/c++/15/cerrno + mdp:/usr/include/c++/15/charconv + mdp:/usr/include/c++/15/chrono + mdp:/usr/include/c++/15/climits + mdp:/usr/include/c++/15/clocale + mdp:/usr/include/c++/15/cmath + mdp:/usr/include/c++/15/compare + mdp:/usr/include/c++/15/concepts + mdp:/usr/include/c++/15/cstddef + mdp:/usr/include/c++/15/cstdint + mdp:/usr/include/c++/15/cstdio + mdp:/usr/include/c++/15/cstdlib + mdp:/usr/include/c++/15/cstring + mdp:/usr/include/c++/15/ctime + mdp:/usr/include/c++/15/cwchar + mdp:/usr/include/c++/15/cwctype + mdp:/usr/include/c++/15/debug/assertions.h + mdp:/usr/include/c++/15/debug/debug.h + mdp:/usr/include/c++/15/exception + mdp:/usr/include/c++/15/ext/aligned_buffer.h + mdp:/usr/include/c++/15/ext/alloc_traits.h + mdp:/usr/include/c++/15/ext/atomicity.h + mdp:/usr/include/c++/15/ext/concurrence.h + mdp:/usr/include/c++/15/ext/numeric_traits.h + mdp:/usr/include/c++/15/ext/string_conversions.h + mdp:/usr/include/c++/15/ext/type_traits.h + mdp:/usr/include/c++/15/format + mdp:/usr/include/c++/15/functional + mdp:/usr/include/c++/15/initializer_list + mdp:/usr/include/c++/15/iomanip + mdp:/usr/include/c++/15/ios + mdp:/usr/include/c++/15/iosfwd + mdp:/usr/include/c++/15/istream + mdp:/usr/include/c++/15/iterator + mdp:/usr/include/c++/15/limits + mdp:/usr/include/c++/15/list + mdp:/usr/include/c++/15/locale + mdp:/usr/include/c++/15/map + mdp:/usr/include/c++/15/memory + mdp:/usr/include/c++/15/new + mdp:/usr/include/c++/15/numeric + mdp:/usr/include/c++/15/optional + mdp:/usr/include/c++/15/ostream + mdp:/usr/include/c++/15/pstl/execution_defs.h + mdp:/usr/include/c++/15/pstl/glue_numeric_defs.h + mdp:/usr/include/c++/15/pstl/pstl_config.h + mdp:/usr/include/c++/15/ratio + mdp:/usr/include/c++/15/sstream + mdp:/usr/include/c++/15/stdexcept + mdp:/usr/include/c++/15/streambuf + mdp:/usr/include/c++/15/string + mdp:/usr/include/c++/15/string_view + mdp:/usr/include/c++/15/system_error + mdp:/usr/include/c++/15/tr1/bessel_function.tcc + mdp:/usr/include/c++/15/tr1/beta_function.tcc + mdp:/usr/include/c++/15/tr1/ell_integral.tcc + mdp:/usr/include/c++/15/tr1/exp_integral.tcc + mdp:/usr/include/c++/15/tr1/gamma.tcc + mdp:/usr/include/c++/15/tr1/hypergeometric.tcc + mdp:/usr/include/c++/15/tr1/legendre_function.tcc + mdp:/usr/include/c++/15/tr1/modified_bessel_func.tcc + mdp:/usr/include/c++/15/tr1/poly_hermite.tcc + mdp:/usr/include/c++/15/tr1/poly_laguerre.tcc + mdp:/usr/include/c++/15/tr1/riemann_zeta.tcc + mdp:/usr/include/c++/15/tr1/special_function_util.h + mdp:/usr/include/c++/15/tuple + mdp:/usr/include/c++/15/type_traits + mdp:/usr/include/c++/15/typeinfo + mdp:/usr/include/c++/15/unordered_map + mdp:/usr/include/c++/15/utility + mdp:/usr/include/c++/15/variant + mdp:/usr/include/c++/15/vector + mdp:/usr/include/c++/15/version + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/atomic_word.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++allocator.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++config.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++locale.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/cpu_defines.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/ctype_base.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/ctype_inline.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/error_constants.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/gthr-default.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/gthr.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/messages_members.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/os_defines.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/time_members.h + mdp:/usr/include/ctype.h + mdp:/usr/include/endian.h + mdp:/usr/include/errno.h + mdp:/usr/include/features-time64.h + mdp:/usr/include/features.h + mdp:/usr/include/gnu/stubs-64.h + mdp:/usr/include/gnu/stubs.h + mdp:/usr/include/libintl.h + mdp:/usr/include/limits.h + mdp:/usr/include/linux/close_range.h + mdp:/usr/include/linux/errno.h + mdp:/usr/include/linux/limits.h + mdp:/usr/include/linux/posix_types.h + mdp:/usr/include/linux/sched/types.h + mdp:/usr/include/linux/stddef.h + mdp:/usr/include/linux/types.h + mdp:/usr/include/locale.h + mdp:/usr/include/pthread.h + mdp:/usr/include/qt6/QtCore/QFileSystemWatcher + mdp:/usr/include/qt6/QtCore/QHash + mdp:/usr/include/qt6/QtCore/QObject + mdp:/usr/include/qt6/QtCore/QSet + mdp:/usr/include/qt6/QtCore/QString + mdp:/usr/include/qt6/QtCore/QTimer + mdp:/usr/include/qt6/QtCore/q17memory.h + mdp:/usr/include/qt6/QtCore/q20functional.h + mdp:/usr/include/qt6/QtCore/q20memory.h + mdp:/usr/include/qt6/QtCore/q20type_traits.h + mdp:/usr/include/qt6/QtCore/q23type_traits.h + mdp:/usr/include/qt6/QtCore/qabstracteventdispatcher.h + mdp:/usr/include/qt6/QtCore/qalgorithms.h + mdp:/usr/include/qt6/QtCore/qanystringview.h + mdp:/usr/include/qt6/QtCore/qarraydata.h + mdp:/usr/include/qt6/QtCore/qarraydataops.h + mdp:/usr/include/qt6/QtCore/qarraydatapointer.h + mdp:/usr/include/qt6/QtCore/qassert.h + mdp:/usr/include/qt6/QtCore/qatomic.h + mdp:/usr/include/qt6/QtCore/qatomic_cxx11.h + mdp:/usr/include/qt6/QtCore/qbasicatomic.h + mdp:/usr/include/qt6/QtCore/qbasictimer.h + mdp:/usr/include/qt6/QtCore/qbindingstorage.h + mdp:/usr/include/qt6/QtCore/qbytearray.h + mdp:/usr/include/qt6/QtCore/qbytearrayalgorithms.h + mdp:/usr/include/qt6/QtCore/qbytearraylist.h + mdp:/usr/include/qt6/QtCore/qbytearrayview.h + mdp:/usr/include/qt6/QtCore/qchar.h + mdp:/usr/include/qt6/QtCore/qcompare.h + mdp:/usr/include/qt6/QtCore/qcompare_impl.h + mdp:/usr/include/qt6/QtCore/qcomparehelpers.h + mdp:/usr/include/qt6/QtCore/qcompilerdetection.h + mdp:/usr/include/qt6/QtCore/qconfig-64.h + mdp:/usr/include/qt6/QtCore/qconfig.h + mdp:/usr/include/qt6/QtCore/qconstructormacros.h + mdp:/usr/include/qt6/QtCore/qcontainerfwd.h + mdp:/usr/include/qt6/QtCore/qcontainerinfo.h + mdp:/usr/include/qt6/QtCore/qcontainertools_impl.h + mdp:/usr/include/qt6/QtCore/qdarwinhelpers.h + mdp:/usr/include/qt6/QtCore/qdatastream.h + mdp:/usr/include/qt6/QtCore/qdeadlinetimer.h + mdp:/usr/include/qt6/QtCore/qeventloop.h + mdp:/usr/include/qt6/QtCore/qexceptionhandling.h + mdp:/usr/include/qt6/QtCore/qfilesystemwatcher.h + mdp:/usr/include/qt6/QtCore/qflags.h + mdp:/usr/include/qt6/QtCore/qfloat16.h + mdp:/usr/include/qt6/QtCore/qforeach.h + mdp:/usr/include/qt6/QtCore/qfunctionaltools_impl.h + mdp:/usr/include/qt6/QtCore/qfunctionpointer.h + mdp:/usr/include/qt6/QtCore/qgenericatomic.h + mdp:/usr/include/qt6/QtCore/qglobal.h + mdp:/usr/include/qt6/QtCore/qglobalstatic.h + mdp:/usr/include/qt6/QtCore/qhash.h + mdp:/usr/include/qt6/QtCore/qhashfunctions.h + mdp:/usr/include/qt6/QtCore/qiodevicebase.h + mdp:/usr/include/qt6/QtCore/qiterable.h + mdp:/usr/include/qt6/QtCore/qiterator.h + mdp:/usr/include/qt6/QtCore/qlatin1stringview.h + mdp:/usr/include/qt6/QtCore/qlist.h + mdp:/usr/include/qt6/QtCore/qlogging.h + mdp:/usr/include/qt6/QtCore/qmalloc.h + mdp:/usr/include/qt6/QtCore/qmath.h + mdp:/usr/include/qt6/QtCore/qmetacontainer.h + mdp:/usr/include/qt6/QtCore/qmetatype.h + mdp:/usr/include/qt6/QtCore/qminmax.h + mdp:/usr/include/qt6/QtCore/qnamespace.h + mdp:/usr/include/qt6/QtCore/qnumeric.h + mdp:/usr/include/qt6/QtCore/qobject.h + mdp:/usr/include/qt6/QtCore/qobject_impl.h + mdp:/usr/include/qt6/QtCore/qobjectdefs.h + mdp:/usr/include/qt6/QtCore/qobjectdefs_impl.h + mdp:/usr/include/qt6/QtCore/qoverload.h + mdp:/usr/include/qt6/QtCore/qpair.h + mdp:/usr/include/qt6/QtCore/qprocessordetection.h + mdp:/usr/include/qt6/QtCore/qrefcount.h + mdp:/usr/include/qt6/QtCore/qscopedpointer.h + mdp:/usr/include/qt6/QtCore/qscopeguard.h + mdp:/usr/include/qt6/QtCore/qset.h + mdp:/usr/include/qt6/QtCore/qstdlibdetection.h + mdp:/usr/include/qt6/QtCore/qstring.h + mdp:/usr/include/qt6/QtCore/qstringalgorithms.h + mdp:/usr/include/qt6/QtCore/qstringbuilder.h + mdp:/usr/include/qt6/QtCore/qstringconverter.h + mdp:/usr/include/qt6/QtCore/qstringconverter_base.h + mdp:/usr/include/qt6/QtCore/qstringfwd.h + mdp:/usr/include/qt6/QtCore/qstringlist.h + mdp:/usr/include/qt6/QtCore/qstringmatcher.h + mdp:/usr/include/qt6/QtCore/qstringtokenizer.h + mdp:/usr/include/qt6/QtCore/qstringview.h + mdp:/usr/include/qt6/QtCore/qswap.h + mdp:/usr/include/qt6/QtCore/qsysinfo.h + mdp:/usr/include/qt6/QtCore/qsystemdetection.h + mdp:/usr/include/qt6/QtCore/qtaggedpointer.h + mdp:/usr/include/qt6/QtCore/qtclasshelpermacros.h + mdp:/usr/include/qt6/QtCore/qtconfiginclude.h + mdp:/usr/include/qt6/QtCore/qtconfigmacros.h + mdp:/usr/include/qt6/QtCore/qtcore-config.h + mdp:/usr/include/qt6/QtCore/qtcoreexports.h + mdp:/usr/include/qt6/QtCore/qtcoreglobal.h + mdp:/usr/include/qt6/QtCore/qtdeprecationdefinitions.h + mdp:/usr/include/qt6/QtCore/qtdeprecationmarkers.h + mdp:/usr/include/qt6/QtCore/qtenvironmentvariables.h + mdp:/usr/include/qt6/QtCore/qtformat_impl.h + mdp:/usr/include/qt6/QtCore/qtimer.h + mdp:/usr/include/qt6/QtCore/qtmetamacros.h + mdp:/usr/include/qt6/QtCore/qtnoop.h + mdp:/usr/include/qt6/QtCore/qtpreprocessorsupport.h + mdp:/usr/include/qt6/QtCore/qtresource.h + mdp:/usr/include/qt6/QtCore/qttranslation.h + mdp:/usr/include/qt6/QtCore/qttypetraits.h + mdp:/usr/include/qt6/QtCore/qtversion.h + mdp:/usr/include/qt6/QtCore/qtversionchecks.h + mdp:/usr/include/qt6/QtCore/qtypeinfo.h + mdp:/usr/include/qt6/QtCore/qtypes.h + mdp:/usr/include/qt6/QtCore/qutf8stringview.h + mdp:/usr/include/qt6/QtCore/qversiontagging.h + mdp:/usr/include/qt6/QtCore/qxptype_traits.h + mdp:/usr/include/qt6/QtCore/qyieldcpu.h + mdp:/usr/include/sched.h + mdp:/usr/include/stdc-predef.h + mdp:/usr/include/stdint.h + mdp:/usr/include/stdio.h + mdp:/usr/include/stdlib.h + mdp:/usr/include/string.h + mdp:/usr/include/strings.h + mdp:/usr/include/sys/cdefs.h + mdp:/usr/include/sys/select.h + mdp:/usr/include/sys/single_threaded.h + mdp:/usr/include/sys/syscall.h + mdp:/usr/include/sys/types.h + mdp:/usr/include/syscall.h + mdp:/usr/include/time.h + mdp:/usr/include/unistd.h + mdp:/usr/include/wchar.h + mdp:/usr/include/wctype.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stdarg.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stdbool.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stddef.h +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/annotation_items.h +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/drag_utils.h + mmc:Q_OBJECT + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/kassetmanagerqt_autogen/moc_predefs.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/drag_utils.h + mdp:/usr/include/alloca.h + mdp:/usr/include/asm-generic/bitsperlong.h + mdp:/usr/include/asm-generic/errno-base.h + mdp:/usr/include/asm-generic/errno.h + mdp:/usr/include/asm-generic/int-ll64.h + mdp:/usr/include/asm-generic/posix_types.h + mdp:/usr/include/asm-generic/types.h + mdp:/usr/include/asm/bitsperlong.h + mdp:/usr/include/asm/errno.h + mdp:/usr/include/asm/posix_types.h + mdp:/usr/include/asm/posix_types_64.h + mdp:/usr/include/asm/types.h + mdp:/usr/include/asm/unistd.h + mdp:/usr/include/asm/unistd_64.h + mdp:/usr/include/assert.h + mdp:/usr/include/bits/atomic_wide_counter.h + mdp:/usr/include/bits/byteswap.h + mdp:/usr/include/bits/confname.h + mdp:/usr/include/bits/cpu-set.h + mdp:/usr/include/bits/endian.h + mdp:/usr/include/bits/endianness.h + mdp:/usr/include/bits/environments.h + mdp:/usr/include/bits/errno.h + mdp:/usr/include/bits/floatn-common.h + mdp:/usr/include/bits/floatn.h + mdp:/usr/include/bits/getopt_core.h + mdp:/usr/include/bits/getopt_posix.h + mdp:/usr/include/bits/libc-header-start.h + mdp:/usr/include/bits/local_lim.h + mdp:/usr/include/bits/locale.h + mdp:/usr/include/bits/long-double.h + mdp:/usr/include/bits/posix1_lim.h + mdp:/usr/include/bits/posix2_lim.h + mdp:/usr/include/bits/posix_opt.h + mdp:/usr/include/bits/pthread_stack_min-dynamic.h + mdp:/usr/include/bits/pthreadtypes-arch.h + mdp:/usr/include/bits/pthreadtypes.h + mdp:/usr/include/bits/sched.h + mdp:/usr/include/bits/select.h + mdp:/usr/include/bits/setjmp.h + mdp:/usr/include/bits/stdint-intn.h + mdp:/usr/include/bits/stdint-least.h + mdp:/usr/include/bits/stdint-uintn.h + mdp:/usr/include/bits/stdio_lim.h + mdp:/usr/include/bits/stdlib-float.h + mdp:/usr/include/bits/struct_mutex.h + mdp:/usr/include/bits/struct_rwlock.h + mdp:/usr/include/bits/syscall.h + mdp:/usr/include/bits/thread-shared-types.h + mdp:/usr/include/bits/time.h + mdp:/usr/include/bits/time64.h + mdp:/usr/include/bits/timesize.h + mdp:/usr/include/bits/timex.h + mdp:/usr/include/bits/types.h + mdp:/usr/include/bits/types/FILE.h + mdp:/usr/include/bits/types/__FILE.h + mdp:/usr/include/bits/types/__fpos64_t.h + mdp:/usr/include/bits/types/__fpos_t.h + mdp:/usr/include/bits/types/__locale_t.h + mdp:/usr/include/bits/types/__mbstate_t.h + mdp:/usr/include/bits/types/__sigset_t.h + mdp:/usr/include/bits/types/clock_t.h + mdp:/usr/include/bits/types/clockid_t.h + mdp:/usr/include/bits/types/cookie_io_functions_t.h + mdp:/usr/include/bits/types/error_t.h + mdp:/usr/include/bits/types/locale_t.h + mdp:/usr/include/bits/types/mbstate_t.h + mdp:/usr/include/bits/types/sigset_t.h + mdp:/usr/include/bits/types/struct_FILE.h + mdp:/usr/include/bits/types/struct___jmp_buf_tag.h + mdp:/usr/include/bits/types/struct_itimerspec.h + mdp:/usr/include/bits/types/struct_sched_param.h + mdp:/usr/include/bits/types/struct_timespec.h + mdp:/usr/include/bits/types/struct_timeval.h + mdp:/usr/include/bits/types/struct_tm.h + mdp:/usr/include/bits/types/time_t.h + mdp:/usr/include/bits/types/timer_t.h + mdp:/usr/include/bits/types/wint_t.h + mdp:/usr/include/bits/typesizes.h + mdp:/usr/include/bits/uintn-identity.h + mdp:/usr/include/bits/uio_lim.h + mdp:/usr/include/bits/unistd_ext.h + mdp:/usr/include/bits/waitflags.h + mdp:/usr/include/bits/waitstatus.h + mdp:/usr/include/bits/wchar.h + mdp:/usr/include/bits/wctype-wchar.h + mdp:/usr/include/bits/wordsize.h + mdp:/usr/include/bits/xopen_lim.h + mdp:/usr/include/c++/15/algorithm + mdp:/usr/include/c++/15/array + mdp:/usr/include/c++/15/atomic + mdp:/usr/include/c++/15/backward/auto_ptr.h + mdp:/usr/include/c++/15/backward/binders.h + mdp:/usr/include/c++/15/bit + mdp:/usr/include/c++/15/bits/algorithmfwd.h + mdp:/usr/include/c++/15/bits/align.h + mdp:/usr/include/c++/15/bits/alloc_traits.h + mdp:/usr/include/c++/15/bits/allocated_ptr.h + mdp:/usr/include/c++/15/bits/allocator.h + mdp:/usr/include/c++/15/bits/atomic_base.h + mdp:/usr/include/c++/15/bits/atomic_lockfree_defines.h + mdp:/usr/include/c++/15/bits/atomic_wait.h + mdp:/usr/include/c++/15/bits/basic_ios.h + mdp:/usr/include/c++/15/bits/basic_ios.tcc + mdp:/usr/include/c++/15/bits/basic_string.h + mdp:/usr/include/c++/15/bits/basic_string.tcc + mdp:/usr/include/c++/15/bits/char_traits.h + mdp:/usr/include/c++/15/bits/charconv.h + mdp:/usr/include/c++/15/bits/chrono.h + mdp:/usr/include/c++/15/bits/chrono_io.h + mdp:/usr/include/c++/15/bits/codecvt.h + mdp:/usr/include/c++/15/bits/concept_check.h + mdp:/usr/include/c++/15/bits/cpp_type_traits.h + mdp:/usr/include/c++/15/bits/cxxabi_forced.h + mdp:/usr/include/c++/15/bits/cxxabi_init_exception.h + mdp:/usr/include/c++/15/bits/enable_special_members.h + mdp:/usr/include/c++/15/bits/erase_if.h + mdp:/usr/include/c++/15/bits/exception.h + mdp:/usr/include/c++/15/bits/exception_defines.h + mdp:/usr/include/c++/15/bits/exception_ptr.h + mdp:/usr/include/c++/15/bits/functexcept.h + mdp:/usr/include/c++/15/bits/functional_hash.h + mdp:/usr/include/c++/15/bits/hash_bytes.h + mdp:/usr/include/c++/15/bits/hashtable.h + mdp:/usr/include/c++/15/bits/hashtable_policy.h + mdp:/usr/include/c++/15/bits/invoke.h + mdp:/usr/include/c++/15/bits/ios_base.h + mdp:/usr/include/c++/15/bits/istream.tcc + mdp:/usr/include/c++/15/bits/iterator_concepts.h + mdp:/usr/include/c++/15/bits/list.tcc + mdp:/usr/include/c++/15/bits/locale_classes.h + mdp:/usr/include/c++/15/bits/locale_classes.tcc + mdp:/usr/include/c++/15/bits/locale_conv.h + mdp:/usr/include/c++/15/bits/locale_facets.h + mdp:/usr/include/c++/15/bits/locale_facets.tcc + mdp:/usr/include/c++/15/bits/locale_facets_nonio.h + mdp:/usr/include/c++/15/bits/locale_facets_nonio.tcc + mdp:/usr/include/c++/15/bits/localefwd.h + mdp:/usr/include/c++/15/bits/max_size_type.h + mdp:/usr/include/c++/15/bits/memory_resource.h + mdp:/usr/include/c++/15/bits/memoryfwd.h + mdp:/usr/include/c++/15/bits/move.h + mdp:/usr/include/c++/15/bits/nested_exception.h + mdp:/usr/include/c++/15/bits/new_allocator.h + mdp:/usr/include/c++/15/bits/node_handle.h + mdp:/usr/include/c++/15/bits/ostream.h + mdp:/usr/include/c++/15/bits/ostream.tcc + mdp:/usr/include/c++/15/bits/ostream_insert.h + mdp:/usr/include/c++/15/bits/parse_numbers.h + mdp:/usr/include/c++/15/bits/postypes.h + mdp:/usr/include/c++/15/bits/predefined_ops.h + mdp:/usr/include/c++/15/bits/ptr_traits.h + mdp:/usr/include/c++/15/bits/quoted_string.h + mdp:/usr/include/c++/15/bits/range_access.h + mdp:/usr/include/c++/15/bits/ranges_algo.h + mdp:/usr/include/c++/15/bits/ranges_algobase.h + mdp:/usr/include/c++/15/bits/ranges_base.h + mdp:/usr/include/c++/15/bits/ranges_cmp.h + mdp:/usr/include/c++/15/bits/ranges_uninitialized.h + mdp:/usr/include/c++/15/bits/ranges_util.h + mdp:/usr/include/c++/15/bits/refwrap.h + mdp:/usr/include/c++/15/bits/requires_hosted.h + mdp:/usr/include/c++/15/bits/shared_ptr.h + mdp:/usr/include/c++/15/bits/shared_ptr_atomic.h + mdp:/usr/include/c++/15/bits/shared_ptr_base.h + mdp:/usr/include/c++/15/bits/specfun.h + mdp:/usr/include/c++/15/bits/sstream.tcc + mdp:/usr/include/c++/15/bits/std_abs.h + mdp:/usr/include/c++/15/bits/std_function.h + mdp:/usr/include/c++/15/bits/std_mutex.h + mdp:/usr/include/c++/15/bits/stl_algo.h + mdp:/usr/include/c++/15/bits/stl_algobase.h + mdp:/usr/include/c++/15/bits/stl_bvector.h + mdp:/usr/include/c++/15/bits/stl_construct.h + mdp:/usr/include/c++/15/bits/stl_function.h + mdp:/usr/include/c++/15/bits/stl_heap.h + mdp:/usr/include/c++/15/bits/stl_iterator.h + mdp:/usr/include/c++/15/bits/stl_iterator_base_funcs.h + mdp:/usr/include/c++/15/bits/stl_iterator_base_types.h + mdp:/usr/include/c++/15/bits/stl_list.h + mdp:/usr/include/c++/15/bits/stl_map.h + mdp:/usr/include/c++/15/bits/stl_multimap.h + mdp:/usr/include/c++/15/bits/stl_numeric.h + mdp:/usr/include/c++/15/bits/stl_pair.h + mdp:/usr/include/c++/15/bits/stl_raw_storage_iter.h + mdp:/usr/include/c++/15/bits/stl_relops.h + mdp:/usr/include/c++/15/bits/stl_tempbuf.h + mdp:/usr/include/c++/15/bits/stl_tree.h + mdp:/usr/include/c++/15/bits/stl_uninitialized.h + mdp:/usr/include/c++/15/bits/stl_vector.h + mdp:/usr/include/c++/15/bits/stream_iterator.h + mdp:/usr/include/c++/15/bits/streambuf.tcc + mdp:/usr/include/c++/15/bits/streambuf_iterator.h + mdp:/usr/include/c++/15/bits/string_view.tcc + mdp:/usr/include/c++/15/bits/stringfwd.h + mdp:/usr/include/c++/15/bits/uniform_int_dist.h + mdp:/usr/include/c++/15/bits/unique_ptr.h + mdp:/usr/include/c++/15/bits/unordered_map.h + mdp:/usr/include/c++/15/bits/uses_allocator.h + mdp:/usr/include/c++/15/bits/uses_allocator_args.h + mdp:/usr/include/c++/15/bits/utility.h + mdp:/usr/include/c++/15/bits/vector.tcc + mdp:/usr/include/c++/15/bits/version.h + mdp:/usr/include/c++/15/cctype + mdp:/usr/include/c++/15/cerrno + mdp:/usr/include/c++/15/charconv + mdp:/usr/include/c++/15/chrono + mdp:/usr/include/c++/15/climits + mdp:/usr/include/c++/15/clocale + mdp:/usr/include/c++/15/cmath + mdp:/usr/include/c++/15/compare + mdp:/usr/include/c++/15/concepts + mdp:/usr/include/c++/15/cstddef + mdp:/usr/include/c++/15/cstdint + mdp:/usr/include/c++/15/cstdio + mdp:/usr/include/c++/15/cstdlib + mdp:/usr/include/c++/15/cstring + mdp:/usr/include/c++/15/ctime + mdp:/usr/include/c++/15/cwchar + mdp:/usr/include/c++/15/cwctype + mdp:/usr/include/c++/15/debug/assertions.h + mdp:/usr/include/c++/15/debug/debug.h + mdp:/usr/include/c++/15/exception + mdp:/usr/include/c++/15/ext/aligned_buffer.h + mdp:/usr/include/c++/15/ext/alloc_traits.h + mdp:/usr/include/c++/15/ext/atomicity.h + mdp:/usr/include/c++/15/ext/concurrence.h + mdp:/usr/include/c++/15/ext/numeric_traits.h + mdp:/usr/include/c++/15/ext/string_conversions.h + mdp:/usr/include/c++/15/ext/type_traits.h + mdp:/usr/include/c++/15/format + mdp:/usr/include/c++/15/functional + mdp:/usr/include/c++/15/initializer_list + mdp:/usr/include/c++/15/iomanip + mdp:/usr/include/c++/15/ios + mdp:/usr/include/c++/15/iosfwd + mdp:/usr/include/c++/15/istream + mdp:/usr/include/c++/15/iterator + mdp:/usr/include/c++/15/limits + mdp:/usr/include/c++/15/list + mdp:/usr/include/c++/15/locale + mdp:/usr/include/c++/15/map + mdp:/usr/include/c++/15/memory + mdp:/usr/include/c++/15/new + mdp:/usr/include/c++/15/numeric + mdp:/usr/include/c++/15/optional + mdp:/usr/include/c++/15/ostream + mdp:/usr/include/c++/15/pstl/execution_defs.h + mdp:/usr/include/c++/15/pstl/glue_numeric_defs.h + mdp:/usr/include/c++/15/pstl/pstl_config.h + mdp:/usr/include/c++/15/ratio + mdp:/usr/include/c++/15/sstream + mdp:/usr/include/c++/15/stdexcept + mdp:/usr/include/c++/15/streambuf + mdp:/usr/include/c++/15/string + mdp:/usr/include/c++/15/string_view + mdp:/usr/include/c++/15/system_error + mdp:/usr/include/c++/15/tr1/bessel_function.tcc + mdp:/usr/include/c++/15/tr1/beta_function.tcc + mdp:/usr/include/c++/15/tr1/ell_integral.tcc + mdp:/usr/include/c++/15/tr1/exp_integral.tcc + mdp:/usr/include/c++/15/tr1/gamma.tcc + mdp:/usr/include/c++/15/tr1/hypergeometric.tcc + mdp:/usr/include/c++/15/tr1/legendre_function.tcc + mdp:/usr/include/c++/15/tr1/modified_bessel_func.tcc + mdp:/usr/include/c++/15/tr1/poly_hermite.tcc + mdp:/usr/include/c++/15/tr1/poly_laguerre.tcc + mdp:/usr/include/c++/15/tr1/riemann_zeta.tcc + mdp:/usr/include/c++/15/tr1/special_function_util.h + mdp:/usr/include/c++/15/tuple + mdp:/usr/include/c++/15/type_traits + mdp:/usr/include/c++/15/typeinfo + mdp:/usr/include/c++/15/unordered_map + mdp:/usr/include/c++/15/utility + mdp:/usr/include/c++/15/variant + mdp:/usr/include/c++/15/vector + mdp:/usr/include/c++/15/version + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/atomic_word.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++allocator.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++config.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++locale.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/cpu_defines.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/ctype_base.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/ctype_inline.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/error_constants.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/gthr-default.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/gthr.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/messages_members.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/os_defines.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/time_members.h + mdp:/usr/include/ctype.h + mdp:/usr/include/endian.h + mdp:/usr/include/errno.h + mdp:/usr/include/features-time64.h + mdp:/usr/include/features.h + mdp:/usr/include/gnu/stubs-64.h + mdp:/usr/include/gnu/stubs.h + mdp:/usr/include/libintl.h + mdp:/usr/include/limits.h + mdp:/usr/include/linux/close_range.h + mdp:/usr/include/linux/errno.h + mdp:/usr/include/linux/limits.h + mdp:/usr/include/linux/posix_types.h + mdp:/usr/include/linux/sched/types.h + mdp:/usr/include/linux/stddef.h + mdp:/usr/include/linux/types.h + mdp:/usr/include/locale.h + mdp:/usr/include/pthread.h + mdp:/usr/include/qt6/QtCore/QObject + mdp:/usr/include/qt6/QtCore/QStringList + mdp:/usr/include/qt6/QtCore/q17memory.h + mdp:/usr/include/qt6/QtCore/q20functional.h + mdp:/usr/include/qt6/QtCore/q20memory.h + mdp:/usr/include/qt6/QtCore/q20type_traits.h + mdp:/usr/include/qt6/QtCore/q23type_traits.h + mdp:/usr/include/qt6/QtCore/qalgorithms.h + mdp:/usr/include/qt6/QtCore/qanystringview.h + mdp:/usr/include/qt6/QtCore/qarraydata.h + mdp:/usr/include/qt6/QtCore/qarraydataops.h + mdp:/usr/include/qt6/QtCore/qarraydatapointer.h + mdp:/usr/include/qt6/QtCore/qassert.h + mdp:/usr/include/qt6/QtCore/qatomic.h + mdp:/usr/include/qt6/QtCore/qatomic_cxx11.h + mdp:/usr/include/qt6/QtCore/qbasicatomic.h + mdp:/usr/include/qt6/QtCore/qbindingstorage.h + mdp:/usr/include/qt6/QtCore/qbytearray.h + mdp:/usr/include/qt6/QtCore/qbytearrayalgorithms.h + mdp:/usr/include/qt6/QtCore/qbytearraylist.h + mdp:/usr/include/qt6/QtCore/qbytearrayview.h + mdp:/usr/include/qt6/QtCore/qchar.h + mdp:/usr/include/qt6/QtCore/qcompare.h + mdp:/usr/include/qt6/QtCore/qcompare_impl.h + mdp:/usr/include/qt6/QtCore/qcomparehelpers.h + mdp:/usr/include/qt6/QtCore/qcompilerdetection.h + mdp:/usr/include/qt6/QtCore/qconfig-64.h + mdp:/usr/include/qt6/QtCore/qconfig.h + mdp:/usr/include/qt6/QtCore/qconstructormacros.h + mdp:/usr/include/qt6/QtCore/qcontainerfwd.h + mdp:/usr/include/qt6/QtCore/qcontainerinfo.h + mdp:/usr/include/qt6/QtCore/qcontainertools_impl.h + mdp:/usr/include/qt6/QtCore/qdarwinhelpers.h + mdp:/usr/include/qt6/QtCore/qdatastream.h + mdp:/usr/include/qt6/QtCore/qexceptionhandling.h + mdp:/usr/include/qt6/QtCore/qflags.h + mdp:/usr/include/qt6/QtCore/qfloat16.h + mdp:/usr/include/qt6/QtCore/qforeach.h + mdp:/usr/include/qt6/QtCore/qfunctionaltools_impl.h + mdp:/usr/include/qt6/QtCore/qfunctionpointer.h + mdp:/usr/include/qt6/QtCore/qgenericatomic.h + mdp:/usr/include/qt6/QtCore/qglobal.h + mdp:/usr/include/qt6/QtCore/qglobalstatic.h + mdp:/usr/include/qt6/QtCore/qhashfunctions.h + mdp:/usr/include/qt6/QtCore/qiodevicebase.h + mdp:/usr/include/qt6/QtCore/qiterable.h + mdp:/usr/include/qt6/QtCore/qiterator.h + mdp:/usr/include/qt6/QtCore/qlatin1stringview.h + mdp:/usr/include/qt6/QtCore/qlist.h + mdp:/usr/include/qt6/QtCore/qlogging.h + mdp:/usr/include/qt6/QtCore/qmalloc.h + mdp:/usr/include/qt6/QtCore/qmath.h + mdp:/usr/include/qt6/QtCore/qmetacontainer.h + mdp:/usr/include/qt6/QtCore/qmetatype.h + mdp:/usr/include/qt6/QtCore/qminmax.h + mdp:/usr/include/qt6/QtCore/qnamespace.h + mdp:/usr/include/qt6/QtCore/qnumeric.h + mdp:/usr/include/qt6/QtCore/qobject.h + mdp:/usr/include/qt6/QtCore/qobject_impl.h + mdp:/usr/include/qt6/QtCore/qobjectdefs.h + mdp:/usr/include/qt6/QtCore/qobjectdefs_impl.h + mdp:/usr/include/qt6/QtCore/qoverload.h + mdp:/usr/include/qt6/QtCore/qpair.h + mdp:/usr/include/qt6/QtCore/qprocessordetection.h + mdp:/usr/include/qt6/QtCore/qrefcount.h + mdp:/usr/include/qt6/QtCore/qscopedpointer.h + mdp:/usr/include/qt6/QtCore/qscopeguard.h + mdp:/usr/include/qt6/QtCore/qstdlibdetection.h + mdp:/usr/include/qt6/QtCore/qstring.h + mdp:/usr/include/qt6/QtCore/qstringalgorithms.h + mdp:/usr/include/qt6/QtCore/qstringbuilder.h + mdp:/usr/include/qt6/QtCore/qstringconverter.h + mdp:/usr/include/qt6/QtCore/qstringconverter_base.h + mdp:/usr/include/qt6/QtCore/qstringfwd.h + mdp:/usr/include/qt6/QtCore/qstringlist.h + mdp:/usr/include/qt6/QtCore/qstringmatcher.h + mdp:/usr/include/qt6/QtCore/qstringtokenizer.h + mdp:/usr/include/qt6/QtCore/qstringview.h + mdp:/usr/include/qt6/QtCore/qswap.h + mdp:/usr/include/qt6/QtCore/qsysinfo.h + mdp:/usr/include/qt6/QtCore/qsystemdetection.h + mdp:/usr/include/qt6/QtCore/qtaggedpointer.h + mdp:/usr/include/qt6/QtCore/qtclasshelpermacros.h + mdp:/usr/include/qt6/QtCore/qtconfiginclude.h + mdp:/usr/include/qt6/QtCore/qtconfigmacros.h + mdp:/usr/include/qt6/QtCore/qtcore-config.h + mdp:/usr/include/qt6/QtCore/qtcoreexports.h + mdp:/usr/include/qt6/QtCore/qtcoreglobal.h + mdp:/usr/include/qt6/QtCore/qtdeprecationdefinitions.h + mdp:/usr/include/qt6/QtCore/qtdeprecationmarkers.h + mdp:/usr/include/qt6/QtCore/qtenvironmentvariables.h + mdp:/usr/include/qt6/QtCore/qtformat_impl.h + mdp:/usr/include/qt6/QtCore/qtmetamacros.h + mdp:/usr/include/qt6/QtCore/qtnoop.h + mdp:/usr/include/qt6/QtCore/qtpreprocessorsupport.h + mdp:/usr/include/qt6/QtCore/qtresource.h + mdp:/usr/include/qt6/QtCore/qttranslation.h + mdp:/usr/include/qt6/QtCore/qttypetraits.h + mdp:/usr/include/qt6/QtCore/qtversion.h + mdp:/usr/include/qt6/QtCore/qtversionchecks.h + mdp:/usr/include/qt6/QtCore/qtypeinfo.h + mdp:/usr/include/qt6/QtCore/qtypes.h + mdp:/usr/include/qt6/QtCore/qutf8stringview.h + mdp:/usr/include/qt6/QtCore/qversiontagging.h + mdp:/usr/include/qt6/QtCore/qxptype_traits.h + mdp:/usr/include/qt6/QtCore/qyieldcpu.h + mdp:/usr/include/sched.h + mdp:/usr/include/stdc-predef.h + mdp:/usr/include/stdint.h + mdp:/usr/include/stdio.h + mdp:/usr/include/stdlib.h + mdp:/usr/include/string.h + mdp:/usr/include/strings.h + mdp:/usr/include/sys/cdefs.h + mdp:/usr/include/sys/select.h + mdp:/usr/include/sys/single_threaded.h + mdp:/usr/include/sys/syscall.h + mdp:/usr/include/sys/types.h + mdp:/usr/include/syscall.h + mdp:/usr/include/time.h + mdp:/usr/include/unistd.h + mdp:/usr/include/wchar.h + mdp:/usr/include/wctype.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stdarg.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stdbool.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stddef.h +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/file_ops.h + mmc:Q_OBJECT + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/kassetmanagerqt_autogen/moc_predefs.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/file_ops.h + mdp:/usr/include/alloca.h + mdp:/usr/include/asm-generic/bitsperlong.h + mdp:/usr/include/asm-generic/errno-base.h + mdp:/usr/include/asm-generic/errno.h + mdp:/usr/include/asm-generic/int-ll64.h + mdp:/usr/include/asm-generic/posix_types.h + mdp:/usr/include/asm-generic/types.h + mdp:/usr/include/asm/bitsperlong.h + mdp:/usr/include/asm/errno.h + mdp:/usr/include/asm/posix_types.h + mdp:/usr/include/asm/posix_types_64.h + mdp:/usr/include/asm/types.h + mdp:/usr/include/asm/unistd.h + mdp:/usr/include/asm/unistd_64.h + mdp:/usr/include/assert.h + mdp:/usr/include/bits/atomic_wide_counter.h + mdp:/usr/include/bits/byteswap.h + mdp:/usr/include/bits/confname.h + mdp:/usr/include/bits/cpu-set.h + mdp:/usr/include/bits/endian.h + mdp:/usr/include/bits/endianness.h + mdp:/usr/include/bits/environments.h + mdp:/usr/include/bits/errno.h + mdp:/usr/include/bits/floatn-common.h + mdp:/usr/include/bits/floatn.h + mdp:/usr/include/bits/getopt_core.h + mdp:/usr/include/bits/getopt_posix.h + mdp:/usr/include/bits/libc-header-start.h + mdp:/usr/include/bits/local_lim.h + mdp:/usr/include/bits/locale.h + mdp:/usr/include/bits/long-double.h + mdp:/usr/include/bits/posix1_lim.h + mdp:/usr/include/bits/posix2_lim.h + mdp:/usr/include/bits/posix_opt.h + mdp:/usr/include/bits/pthread_stack_min-dynamic.h + mdp:/usr/include/bits/pthreadtypes-arch.h + mdp:/usr/include/bits/pthreadtypes.h + mdp:/usr/include/bits/sched.h + mdp:/usr/include/bits/select.h + mdp:/usr/include/bits/semaphore.h + mdp:/usr/include/bits/setjmp.h + mdp:/usr/include/bits/stdint-intn.h + mdp:/usr/include/bits/stdint-least.h + mdp:/usr/include/bits/stdint-uintn.h + mdp:/usr/include/bits/stdio_lim.h + mdp:/usr/include/bits/stdlib-float.h + mdp:/usr/include/bits/struct_mutex.h + mdp:/usr/include/bits/struct_rwlock.h + mdp:/usr/include/bits/syscall.h + mdp:/usr/include/bits/thread-shared-types.h + mdp:/usr/include/bits/time.h + mdp:/usr/include/bits/time64.h + mdp:/usr/include/bits/timesize.h + mdp:/usr/include/bits/timex.h + mdp:/usr/include/bits/types.h + mdp:/usr/include/bits/types/FILE.h + mdp:/usr/include/bits/types/__FILE.h + mdp:/usr/include/bits/types/__fpos64_t.h + mdp:/usr/include/bits/types/__fpos_t.h + mdp:/usr/include/bits/types/__locale_t.h + mdp:/usr/include/bits/types/__mbstate_t.h + mdp:/usr/include/bits/types/__sigset_t.h + mdp:/usr/include/bits/types/clock_t.h + mdp:/usr/include/bits/types/clockid_t.h + mdp:/usr/include/bits/types/cookie_io_functions_t.h + mdp:/usr/include/bits/types/error_t.h + mdp:/usr/include/bits/types/locale_t.h + mdp:/usr/include/bits/types/mbstate_t.h + mdp:/usr/include/bits/types/sigset_t.h + mdp:/usr/include/bits/types/struct_FILE.h + mdp:/usr/include/bits/types/struct___jmp_buf_tag.h + mdp:/usr/include/bits/types/struct_itimerspec.h + mdp:/usr/include/bits/types/struct_sched_param.h + mdp:/usr/include/bits/types/struct_timespec.h + mdp:/usr/include/bits/types/struct_timeval.h + mdp:/usr/include/bits/types/struct_tm.h + mdp:/usr/include/bits/types/time_t.h + mdp:/usr/include/bits/types/timer_t.h + mdp:/usr/include/bits/types/wint_t.h + mdp:/usr/include/bits/typesizes.h + mdp:/usr/include/bits/uintn-identity.h + mdp:/usr/include/bits/uio_lim.h + mdp:/usr/include/bits/unistd_ext.h + mdp:/usr/include/bits/waitflags.h + mdp:/usr/include/bits/waitstatus.h + mdp:/usr/include/bits/wchar.h + mdp:/usr/include/bits/wctype-wchar.h + mdp:/usr/include/bits/wordsize.h + mdp:/usr/include/bits/xopen_lim.h + mdp:/usr/include/c++/15/algorithm + mdp:/usr/include/c++/15/array + mdp:/usr/include/c++/15/atomic + mdp:/usr/include/c++/15/backward/auto_ptr.h + mdp:/usr/include/c++/15/backward/binders.h + mdp:/usr/include/c++/15/bit + mdp:/usr/include/c++/15/bits/algorithmfwd.h + mdp:/usr/include/c++/15/bits/align.h + mdp:/usr/include/c++/15/bits/alloc_traits.h + mdp:/usr/include/c++/15/bits/allocated_ptr.h + mdp:/usr/include/c++/15/bits/allocator.h + mdp:/usr/include/c++/15/bits/atomic_base.h + mdp:/usr/include/c++/15/bits/atomic_futex.h + mdp:/usr/include/c++/15/bits/atomic_lockfree_defines.h + mdp:/usr/include/c++/15/bits/atomic_timed_wait.h + mdp:/usr/include/c++/15/bits/atomic_wait.h + mdp:/usr/include/c++/15/bits/basic_ios.h + mdp:/usr/include/c++/15/bits/basic_ios.tcc + mdp:/usr/include/c++/15/bits/basic_string.h + mdp:/usr/include/c++/15/bits/basic_string.tcc + mdp:/usr/include/c++/15/bits/char_traits.h + mdp:/usr/include/c++/15/bits/charconv.h + mdp:/usr/include/c++/15/bits/chrono.h + mdp:/usr/include/c++/15/bits/chrono_io.h + mdp:/usr/include/c++/15/bits/codecvt.h + mdp:/usr/include/c++/15/bits/concept_check.h + mdp:/usr/include/c++/15/bits/cpp_type_traits.h + mdp:/usr/include/c++/15/bits/cxxabi_forced.h + mdp:/usr/include/c++/15/bits/cxxabi_init_exception.h + mdp:/usr/include/c++/15/bits/enable_special_members.h + mdp:/usr/include/c++/15/bits/erase_if.h + mdp:/usr/include/c++/15/bits/exception.h + mdp:/usr/include/c++/15/bits/exception_defines.h + mdp:/usr/include/c++/15/bits/exception_ptr.h + mdp:/usr/include/c++/15/bits/functexcept.h + mdp:/usr/include/c++/15/bits/functional_hash.h + mdp:/usr/include/c++/15/bits/hash_bytes.h + mdp:/usr/include/c++/15/bits/hashtable.h + mdp:/usr/include/c++/15/bits/hashtable_policy.h + mdp:/usr/include/c++/15/bits/invoke.h + mdp:/usr/include/c++/15/bits/ios_base.h + mdp:/usr/include/c++/15/bits/istream.tcc + mdp:/usr/include/c++/15/bits/iterator_concepts.h + mdp:/usr/include/c++/15/bits/list.tcc + mdp:/usr/include/c++/15/bits/locale_classes.h + mdp:/usr/include/c++/15/bits/locale_classes.tcc + mdp:/usr/include/c++/15/bits/locale_conv.h + mdp:/usr/include/c++/15/bits/locale_facets.h + mdp:/usr/include/c++/15/bits/locale_facets.tcc + mdp:/usr/include/c++/15/bits/locale_facets_nonio.h + mdp:/usr/include/c++/15/bits/locale_facets_nonio.tcc + mdp:/usr/include/c++/15/bits/localefwd.h + mdp:/usr/include/c++/15/bits/max_size_type.h + mdp:/usr/include/c++/15/bits/memory_resource.h + mdp:/usr/include/c++/15/bits/memoryfwd.h + mdp:/usr/include/c++/15/bits/move.h + mdp:/usr/include/c++/15/bits/nested_exception.h + mdp:/usr/include/c++/15/bits/new_allocator.h + mdp:/usr/include/c++/15/bits/node_handle.h + mdp:/usr/include/c++/15/bits/ostream.h + mdp:/usr/include/c++/15/bits/ostream.tcc + mdp:/usr/include/c++/15/bits/ostream_insert.h + mdp:/usr/include/c++/15/bits/parse_numbers.h + mdp:/usr/include/c++/15/bits/postypes.h + mdp:/usr/include/c++/15/bits/predefined_ops.h + mdp:/usr/include/c++/15/bits/ptr_traits.h + mdp:/usr/include/c++/15/bits/quoted_string.h + mdp:/usr/include/c++/15/bits/range_access.h + mdp:/usr/include/c++/15/bits/ranges_algo.h + mdp:/usr/include/c++/15/bits/ranges_algobase.h + mdp:/usr/include/c++/15/bits/ranges_base.h + mdp:/usr/include/c++/15/bits/ranges_cmp.h + mdp:/usr/include/c++/15/bits/ranges_uninitialized.h + mdp:/usr/include/c++/15/bits/ranges_util.h + mdp:/usr/include/c++/15/bits/refwrap.h + mdp:/usr/include/c++/15/bits/requires_hosted.h + mdp:/usr/include/c++/15/bits/semaphore_base.h + mdp:/usr/include/c++/15/bits/shared_ptr.h + mdp:/usr/include/c++/15/bits/shared_ptr_atomic.h + mdp:/usr/include/c++/15/bits/shared_ptr_base.h + mdp:/usr/include/c++/15/bits/specfun.h + mdp:/usr/include/c++/15/bits/sstream.tcc + mdp:/usr/include/c++/15/bits/std_abs.h + mdp:/usr/include/c++/15/bits/std_function.h + mdp:/usr/include/c++/15/bits/std_mutex.h + mdp:/usr/include/c++/15/bits/std_thread.h + mdp:/usr/include/c++/15/bits/stl_algo.h + mdp:/usr/include/c++/15/bits/stl_algobase.h + mdp:/usr/include/c++/15/bits/stl_bvector.h + mdp:/usr/include/c++/15/bits/stl_construct.h + mdp:/usr/include/c++/15/bits/stl_function.h + mdp:/usr/include/c++/15/bits/stl_heap.h + mdp:/usr/include/c++/15/bits/stl_iterator.h + mdp:/usr/include/c++/15/bits/stl_iterator_base_funcs.h + mdp:/usr/include/c++/15/bits/stl_iterator_base_types.h + mdp:/usr/include/c++/15/bits/stl_list.h + mdp:/usr/include/c++/15/bits/stl_map.h + mdp:/usr/include/c++/15/bits/stl_multimap.h + mdp:/usr/include/c++/15/bits/stl_multiset.h + mdp:/usr/include/c++/15/bits/stl_numeric.h + mdp:/usr/include/c++/15/bits/stl_pair.h + mdp:/usr/include/c++/15/bits/stl_raw_storage_iter.h + mdp:/usr/include/c++/15/bits/stl_relops.h + mdp:/usr/include/c++/15/bits/stl_set.h + mdp:/usr/include/c++/15/bits/stl_tempbuf.h + mdp:/usr/include/c++/15/bits/stl_tree.h + mdp:/usr/include/c++/15/bits/stl_uninitialized.h + mdp:/usr/include/c++/15/bits/stl_vector.h + mdp:/usr/include/c++/15/bits/stream_iterator.h + mdp:/usr/include/c++/15/bits/streambuf.tcc + mdp:/usr/include/c++/15/bits/streambuf_iterator.h + mdp:/usr/include/c++/15/bits/string_view.tcc + mdp:/usr/include/c++/15/bits/stringfwd.h + mdp:/usr/include/c++/15/bits/this_thread_sleep.h + mdp:/usr/include/c++/15/bits/uniform_int_dist.h + mdp:/usr/include/c++/15/bits/unique_lock.h + mdp:/usr/include/c++/15/bits/unique_ptr.h + mdp:/usr/include/c++/15/bits/unordered_map.h + mdp:/usr/include/c++/15/bits/unordered_set.h + mdp:/usr/include/c++/15/bits/uses_allocator.h + mdp:/usr/include/c++/15/bits/uses_allocator_args.h + mdp:/usr/include/c++/15/bits/utility.h + mdp:/usr/include/c++/15/bits/vector.tcc + mdp:/usr/include/c++/15/bits/version.h + mdp:/usr/include/c++/15/cctype + mdp:/usr/include/c++/15/cerrno + mdp:/usr/include/c++/15/charconv + mdp:/usr/include/c++/15/chrono + mdp:/usr/include/c++/15/climits + mdp:/usr/include/c++/15/clocale + mdp:/usr/include/c++/15/cmath + mdp:/usr/include/c++/15/compare + mdp:/usr/include/c++/15/concepts + mdp:/usr/include/c++/15/condition_variable + mdp:/usr/include/c++/15/cstddef + mdp:/usr/include/c++/15/cstdint + mdp:/usr/include/c++/15/cstdio + mdp:/usr/include/c++/15/cstdlib + mdp:/usr/include/c++/15/cstring + mdp:/usr/include/c++/15/ctime + mdp:/usr/include/c++/15/cwchar + mdp:/usr/include/c++/15/cwctype + mdp:/usr/include/c++/15/debug/assertions.h + mdp:/usr/include/c++/15/debug/debug.h + mdp:/usr/include/c++/15/exception + mdp:/usr/include/c++/15/ext/aligned_buffer.h + mdp:/usr/include/c++/15/ext/alloc_traits.h + mdp:/usr/include/c++/15/ext/atomicity.h + mdp:/usr/include/c++/15/ext/concurrence.h + mdp:/usr/include/c++/15/ext/numeric_traits.h + mdp:/usr/include/c++/15/ext/string_conversions.h + mdp:/usr/include/c++/15/ext/type_traits.h + mdp:/usr/include/c++/15/format + mdp:/usr/include/c++/15/functional + mdp:/usr/include/c++/15/future + mdp:/usr/include/c++/15/initializer_list + mdp:/usr/include/c++/15/iomanip + mdp:/usr/include/c++/15/ios + mdp:/usr/include/c++/15/iosfwd + mdp:/usr/include/c++/15/istream + mdp:/usr/include/c++/15/iterator + mdp:/usr/include/c++/15/limits + mdp:/usr/include/c++/15/list + mdp:/usr/include/c++/15/locale + mdp:/usr/include/c++/15/map + mdp:/usr/include/c++/15/memory + mdp:/usr/include/c++/15/mutex + mdp:/usr/include/c++/15/new + mdp:/usr/include/c++/15/numeric + mdp:/usr/include/c++/15/optional + mdp:/usr/include/c++/15/ostream + mdp:/usr/include/c++/15/pstl/execution_defs.h + mdp:/usr/include/c++/15/pstl/glue_numeric_defs.h + mdp:/usr/include/c++/15/pstl/pstl_config.h + mdp:/usr/include/c++/15/ratio + mdp:/usr/include/c++/15/semaphore + mdp:/usr/include/c++/15/set + mdp:/usr/include/c++/15/sstream + mdp:/usr/include/c++/15/stdexcept + mdp:/usr/include/c++/15/stop_token + mdp:/usr/include/c++/15/streambuf + mdp:/usr/include/c++/15/string + mdp:/usr/include/c++/15/string_view + mdp:/usr/include/c++/15/system_error + mdp:/usr/include/c++/15/tr1/bessel_function.tcc + mdp:/usr/include/c++/15/tr1/beta_function.tcc + mdp:/usr/include/c++/15/tr1/ell_integral.tcc + mdp:/usr/include/c++/15/tr1/exp_integral.tcc + mdp:/usr/include/c++/15/tr1/gamma.tcc + mdp:/usr/include/c++/15/tr1/hypergeometric.tcc + mdp:/usr/include/c++/15/tr1/legendre_function.tcc + mdp:/usr/include/c++/15/tr1/modified_bessel_func.tcc + mdp:/usr/include/c++/15/tr1/poly_hermite.tcc + mdp:/usr/include/c++/15/tr1/poly_laguerre.tcc + mdp:/usr/include/c++/15/tr1/riemann_zeta.tcc + mdp:/usr/include/c++/15/tr1/special_function_util.h + mdp:/usr/include/c++/15/tuple + mdp:/usr/include/c++/15/type_traits + mdp:/usr/include/c++/15/typeinfo + mdp:/usr/include/c++/15/unordered_map + mdp:/usr/include/c++/15/unordered_set + mdp:/usr/include/c++/15/utility + mdp:/usr/include/c++/15/variant + mdp:/usr/include/c++/15/vector + mdp:/usr/include/c++/15/version + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/atomic_word.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++allocator.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++config.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++locale.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/cpu_defines.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/ctype_base.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/ctype_inline.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/error_constants.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/gthr-default.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/gthr.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/messages_members.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/os_defines.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/time_members.h + mdp:/usr/include/ctype.h + mdp:/usr/include/endian.h + mdp:/usr/include/errno.h + mdp:/usr/include/features-time64.h + mdp:/usr/include/features.h + mdp:/usr/include/gnu/stubs-64.h + mdp:/usr/include/gnu/stubs.h + mdp:/usr/include/libintl.h + mdp:/usr/include/limits.h + mdp:/usr/include/linux/close_range.h + mdp:/usr/include/linux/errno.h + mdp:/usr/include/linux/limits.h + mdp:/usr/include/linux/posix_types.h + mdp:/usr/include/linux/sched/types.h + mdp:/usr/include/linux/stddef.h + mdp:/usr/include/linux/types.h + mdp:/usr/include/locale.h + mdp:/usr/include/pthread.h + mdp:/usr/include/qt6/QtCore/QFutureWatcher + mdp:/usr/include/qt6/QtCore/QList + mdp:/usr/include/qt6/QtCore/QMutex + mdp:/usr/include/qt6/QtCore/QObject + mdp:/usr/include/qt6/QtCore/QStringList + mdp:/usr/include/qt6/QtCore/q17memory.h + mdp:/usr/include/qt6/QtCore/q20functional.h + mdp:/usr/include/qt6/QtCore/q20memory.h + mdp:/usr/include/qt6/QtCore/q20type_traits.h + mdp:/usr/include/qt6/QtCore/q20utility.h + mdp:/usr/include/qt6/QtCore/q23type_traits.h + mdp:/usr/include/qt6/QtCore/q23utility.h + mdp:/usr/include/qt6/QtCore/qalgorithms.h + mdp:/usr/include/qt6/QtCore/qalloc.h + mdp:/usr/include/qt6/QtCore/qanystringview.h + mdp:/usr/include/qt6/QtCore/qarraydata.h + mdp:/usr/include/qt6/QtCore/qarraydataops.h + mdp:/usr/include/qt6/QtCore/qarraydatapointer.h + mdp:/usr/include/qt6/QtCore/qassert.h + mdp:/usr/include/qt6/QtCore/qatomic.h + mdp:/usr/include/qt6/QtCore/qatomic_cxx11.h + mdp:/usr/include/qt6/QtCore/qbasicatomic.h + mdp:/usr/include/qt6/QtCore/qbindingstorage.h + mdp:/usr/include/qt6/QtCore/qbytearray.h + mdp:/usr/include/qt6/QtCore/qbytearrayalgorithms.h + mdp:/usr/include/qt6/QtCore/qbytearraylist.h + mdp:/usr/include/qt6/QtCore/qbytearrayview.h + mdp:/usr/include/qt6/QtCore/qchar.h + mdp:/usr/include/qt6/QtCore/qcompare.h + mdp:/usr/include/qt6/QtCore/qcompare_impl.h + mdp:/usr/include/qt6/QtCore/qcomparehelpers.h + mdp:/usr/include/qt6/QtCore/qcompilerdetection.h + mdp:/usr/include/qt6/QtCore/qconfig-64.h + mdp:/usr/include/qt6/QtCore/qconfig.h + mdp:/usr/include/qt6/QtCore/qconstructormacros.h + mdp:/usr/include/qt6/QtCore/qcontainerfwd.h + mdp:/usr/include/qt6/QtCore/qcontainerinfo.h + mdp:/usr/include/qt6/QtCore/qcontainertools_impl.h + mdp:/usr/include/qt6/QtCore/qcontiguouscache.h + mdp:/usr/include/qt6/QtCore/qdarwinhelpers.h + mdp:/usr/include/qt6/QtCore/qdatastream.h + mdp:/usr/include/qt6/QtCore/qdeadlinetimer.h + mdp:/usr/include/qt6/QtCore/qdebug.h + mdp:/usr/include/qt6/QtCore/qexception.h + mdp:/usr/include/qt6/QtCore/qexceptionhandling.h + mdp:/usr/include/qt6/QtCore/qflags.h + mdp:/usr/include/qt6/QtCore/qfloat16.h + mdp:/usr/include/qt6/QtCore/qforeach.h + mdp:/usr/include/qt6/QtCore/qfunctionaltools_impl.h + mdp:/usr/include/qt6/QtCore/qfunctionpointer.h + mdp:/usr/include/qt6/QtCore/qfuture.h + mdp:/usr/include/qt6/QtCore/qfuture_impl.h + mdp:/usr/include/qt6/QtCore/qfutureinterface.h + mdp:/usr/include/qt6/QtCore/qfuturewatcher.h + mdp:/usr/include/qt6/QtCore/qgenericatomic.h + mdp:/usr/include/qt6/QtCore/qglobal.h + mdp:/usr/include/qt6/QtCore/qglobalstatic.h + mdp:/usr/include/qt6/QtCore/qhash.h + mdp:/usr/include/qt6/QtCore/qhashfunctions.h + mdp:/usr/include/qt6/QtCore/qiodevicebase.h + mdp:/usr/include/qt6/QtCore/qiterable.h + mdp:/usr/include/qt6/QtCore/qiterator.h + mdp:/usr/include/qt6/QtCore/qlatin1stringview.h + mdp:/usr/include/qt6/QtCore/qlist.h + mdp:/usr/include/qt6/QtCore/qlogging.h + mdp:/usr/include/qt6/QtCore/qmalloc.h + mdp:/usr/include/qt6/QtCore/qmap.h + mdp:/usr/include/qt6/QtCore/qmath.h + mdp:/usr/include/qt6/QtCore/qmetacontainer.h + mdp:/usr/include/qt6/QtCore/qmetatype.h + mdp:/usr/include/qt6/QtCore/qminmax.h + mdp:/usr/include/qt6/QtCore/qmutex.h + mdp:/usr/include/qt6/QtCore/qnamespace.h + mdp:/usr/include/qt6/QtCore/qnumeric.h + mdp:/usr/include/qt6/QtCore/qobject.h + mdp:/usr/include/qt6/QtCore/qobject_impl.h + mdp:/usr/include/qt6/QtCore/qobjectdefs.h + mdp:/usr/include/qt6/QtCore/qobjectdefs_impl.h + mdp:/usr/include/qt6/QtCore/qoverload.h + mdp:/usr/include/qt6/QtCore/qpair.h + mdp:/usr/include/qt6/QtCore/qprocessordetection.h + mdp:/usr/include/qt6/QtCore/qpromise.h + mdp:/usr/include/qt6/QtCore/qrefcount.h + mdp:/usr/include/qt6/QtCore/qresultstore.h + mdp:/usr/include/qt6/QtCore/qrunnable.h + mdp:/usr/include/qt6/QtCore/qscopedpointer.h + mdp:/usr/include/qt6/QtCore/qscopeguard.h + mdp:/usr/include/qt6/QtCore/qset.h + mdp:/usr/include/qt6/QtCore/qshareddata.h + mdp:/usr/include/qt6/QtCore/qshareddata_impl.h + mdp:/usr/include/qt6/QtCore/qsharedpointer.h + mdp:/usr/include/qt6/QtCore/qsharedpointer_impl.h + mdp:/usr/include/qt6/QtCore/qstdlibdetection.h + mdp:/usr/include/qt6/QtCore/qstring.h + mdp:/usr/include/qt6/QtCore/qstringalgorithms.h + mdp:/usr/include/qt6/QtCore/qstringbuilder.h + mdp:/usr/include/qt6/QtCore/qstringconverter.h + mdp:/usr/include/qt6/QtCore/qstringconverter_base.h + mdp:/usr/include/qt6/QtCore/qstringfwd.h + mdp:/usr/include/qt6/QtCore/qstringlist.h + mdp:/usr/include/qt6/QtCore/qstringmatcher.h + mdp:/usr/include/qt6/QtCore/qstringtokenizer.h + mdp:/usr/include/qt6/QtCore/qstringview.h + mdp:/usr/include/qt6/QtCore/qswap.h + mdp:/usr/include/qt6/QtCore/qsysinfo.h + mdp:/usr/include/qt6/QtCore/qsystemdetection.h + mdp:/usr/include/qt6/QtCore/qtaggedpointer.h + mdp:/usr/include/qt6/QtCore/qtclasshelpermacros.h + mdp:/usr/include/qt6/QtCore/qtconfiginclude.h + mdp:/usr/include/qt6/QtCore/qtconfigmacros.h + mdp:/usr/include/qt6/QtCore/qtcore-config.h + mdp:/usr/include/qt6/QtCore/qtcoreexports.h + mdp:/usr/include/qt6/QtCore/qtcoreglobal.h + mdp:/usr/include/qt6/QtCore/qtdeprecationdefinitions.h + mdp:/usr/include/qt6/QtCore/qtdeprecationmarkers.h + mdp:/usr/include/qt6/QtCore/qtenvironmentvariables.h + mdp:/usr/include/qt6/QtCore/qtextstream.h + mdp:/usr/include/qt6/QtCore/qtformat_impl.h + mdp:/usr/include/qt6/QtCore/qthread.h + mdp:/usr/include/qt6/QtCore/qthreadpool.h + mdp:/usr/include/qt6/QtCore/qtmetamacros.h + mdp:/usr/include/qt6/QtCore/qtnoop.h + mdp:/usr/include/qt6/QtCore/qtpreprocessorsupport.h + mdp:/usr/include/qt6/QtCore/qtresource.h + mdp:/usr/include/qt6/QtCore/qtsan_impl.h + mdp:/usr/include/qt6/QtCore/qttranslation.h + mdp:/usr/include/qt6/QtCore/qttypetraits.h + mdp:/usr/include/qt6/QtCore/qtversion.h + mdp:/usr/include/qt6/QtCore/qtversionchecks.h + mdp:/usr/include/qt6/QtCore/qtypeinfo.h + mdp:/usr/include/qt6/QtCore/qtypes.h + mdp:/usr/include/qt6/QtCore/qutf8stringview.h + mdp:/usr/include/qt6/QtCore/qvariant.h + mdp:/usr/include/qt6/QtCore/qvarlengtharray.h + mdp:/usr/include/qt6/QtCore/qversiontagging.h + mdp:/usr/include/qt6/QtCore/qxptype_traits.h + mdp:/usr/include/qt6/QtCore/qyieldcpu.h + mdp:/usr/include/sched.h + mdp:/usr/include/semaphore.h + mdp:/usr/include/stdc-predef.h + mdp:/usr/include/stdint.h + mdp:/usr/include/stdio.h + mdp:/usr/include/stdlib.h + mdp:/usr/include/string.h + mdp:/usr/include/strings.h + mdp:/usr/include/sys/cdefs.h + mdp:/usr/include/sys/select.h + mdp:/usr/include/sys/single_threaded.h + mdp:/usr/include/sys/syscall.h + mdp:/usr/include/sys/time.h + mdp:/usr/include/sys/types.h + mdp:/usr/include/syscall.h + mdp:/usr/include/time.h + mdp:/usr/include/unistd.h + mdp:/usr/include/wchar.h + mdp:/usr/include/wctype.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stdarg.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stdbool.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stddef.h +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/media/tlrender_player.h + mmc:Q_OBJECT + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/kassetmanagerqt_autogen/moc_predefs.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/media/tlrender_player.h + mdp:/usr/include/alloca.h + mdp:/usr/include/asm-generic/bitsperlong.h + mdp:/usr/include/asm-generic/errno-base.h + mdp:/usr/include/asm-generic/errno.h + mdp:/usr/include/asm-generic/int-ll64.h + mdp:/usr/include/asm-generic/posix_types.h + mdp:/usr/include/asm-generic/types.h + mdp:/usr/include/asm/bitsperlong.h + mdp:/usr/include/asm/errno.h + mdp:/usr/include/asm/posix_types.h + mdp:/usr/include/asm/posix_types_64.h + mdp:/usr/include/asm/types.h + mdp:/usr/include/asm/unistd.h + mdp:/usr/include/asm/unistd_64.h + mdp:/usr/include/assert.h + mdp:/usr/include/bits/atomic_wide_counter.h + mdp:/usr/include/bits/byteswap.h + mdp:/usr/include/bits/confname.h + mdp:/usr/include/bits/cpu-set.h + mdp:/usr/include/bits/endian.h + mdp:/usr/include/bits/endianness.h + mdp:/usr/include/bits/environments.h + mdp:/usr/include/bits/errno.h + mdp:/usr/include/bits/floatn-common.h + mdp:/usr/include/bits/floatn.h + mdp:/usr/include/bits/getopt_core.h + mdp:/usr/include/bits/getopt_posix.h + mdp:/usr/include/bits/libc-header-start.h + mdp:/usr/include/bits/local_lim.h + mdp:/usr/include/bits/locale.h + mdp:/usr/include/bits/long-double.h + mdp:/usr/include/bits/posix1_lim.h + mdp:/usr/include/bits/posix2_lim.h + mdp:/usr/include/bits/posix_opt.h + mdp:/usr/include/bits/pthread_stack_min-dynamic.h + mdp:/usr/include/bits/pthreadtypes-arch.h + mdp:/usr/include/bits/pthreadtypes.h + mdp:/usr/include/bits/sched.h + mdp:/usr/include/bits/select.h + mdp:/usr/include/bits/setjmp.h + mdp:/usr/include/bits/stdint-intn.h + mdp:/usr/include/bits/stdint-least.h + mdp:/usr/include/bits/stdint-uintn.h + mdp:/usr/include/bits/stdio_lim.h + mdp:/usr/include/bits/stdlib-float.h + mdp:/usr/include/bits/struct_mutex.h + mdp:/usr/include/bits/struct_rwlock.h + mdp:/usr/include/bits/syscall.h + mdp:/usr/include/bits/thread-shared-types.h + mdp:/usr/include/bits/time.h + mdp:/usr/include/bits/time64.h + mdp:/usr/include/bits/timesize.h + mdp:/usr/include/bits/timex.h + mdp:/usr/include/bits/types.h + mdp:/usr/include/bits/types/FILE.h + mdp:/usr/include/bits/types/__FILE.h + mdp:/usr/include/bits/types/__fpos64_t.h + mdp:/usr/include/bits/types/__fpos_t.h + mdp:/usr/include/bits/types/__locale_t.h + mdp:/usr/include/bits/types/__mbstate_t.h + mdp:/usr/include/bits/types/__sigset_t.h + mdp:/usr/include/bits/types/clock_t.h + mdp:/usr/include/bits/types/clockid_t.h + mdp:/usr/include/bits/types/cookie_io_functions_t.h + mdp:/usr/include/bits/types/error_t.h + mdp:/usr/include/bits/types/locale_t.h + mdp:/usr/include/bits/types/mbstate_t.h + mdp:/usr/include/bits/types/sigset_t.h + mdp:/usr/include/bits/types/struct_FILE.h + mdp:/usr/include/bits/types/struct___jmp_buf_tag.h + mdp:/usr/include/bits/types/struct_itimerspec.h + mdp:/usr/include/bits/types/struct_sched_param.h + mdp:/usr/include/bits/types/struct_timespec.h + mdp:/usr/include/bits/types/struct_timeval.h + mdp:/usr/include/bits/types/struct_tm.h + mdp:/usr/include/bits/types/time_t.h + mdp:/usr/include/bits/types/timer_t.h + mdp:/usr/include/bits/types/wint_t.h + mdp:/usr/include/bits/typesizes.h + mdp:/usr/include/bits/uintn-identity.h + mdp:/usr/include/bits/uio_lim.h + mdp:/usr/include/bits/unistd_ext.h + mdp:/usr/include/bits/waitflags.h + mdp:/usr/include/bits/waitstatus.h + mdp:/usr/include/bits/wchar.h + mdp:/usr/include/bits/wctype-wchar.h + mdp:/usr/include/bits/wordsize.h + mdp:/usr/include/bits/xopen_lim.h + mdp:/usr/include/c++/15/algorithm + mdp:/usr/include/c++/15/array + mdp:/usr/include/c++/15/atomic + mdp:/usr/include/c++/15/backward/auto_ptr.h + mdp:/usr/include/c++/15/backward/binders.h + mdp:/usr/include/c++/15/bit + mdp:/usr/include/c++/15/bits/algorithmfwd.h + mdp:/usr/include/c++/15/bits/align.h + mdp:/usr/include/c++/15/bits/alloc_traits.h + mdp:/usr/include/c++/15/bits/allocated_ptr.h + mdp:/usr/include/c++/15/bits/allocator.h + mdp:/usr/include/c++/15/bits/atomic_base.h + mdp:/usr/include/c++/15/bits/atomic_lockfree_defines.h + mdp:/usr/include/c++/15/bits/atomic_wait.h + mdp:/usr/include/c++/15/bits/basic_ios.h + mdp:/usr/include/c++/15/bits/basic_ios.tcc + mdp:/usr/include/c++/15/bits/basic_string.h + mdp:/usr/include/c++/15/bits/basic_string.tcc + mdp:/usr/include/c++/15/bits/char_traits.h + mdp:/usr/include/c++/15/bits/charconv.h + mdp:/usr/include/c++/15/bits/chrono.h + mdp:/usr/include/c++/15/bits/chrono_io.h + mdp:/usr/include/c++/15/bits/codecvt.h + mdp:/usr/include/c++/15/bits/concept_check.h + mdp:/usr/include/c++/15/bits/cpp_type_traits.h + mdp:/usr/include/c++/15/bits/cxxabi_forced.h + mdp:/usr/include/c++/15/bits/cxxabi_init_exception.h + mdp:/usr/include/c++/15/bits/enable_special_members.h + mdp:/usr/include/c++/15/bits/erase_if.h + mdp:/usr/include/c++/15/bits/exception.h + mdp:/usr/include/c++/15/bits/exception_defines.h + mdp:/usr/include/c++/15/bits/exception_ptr.h + mdp:/usr/include/c++/15/bits/functexcept.h + mdp:/usr/include/c++/15/bits/functional_hash.h + mdp:/usr/include/c++/15/bits/hash_bytes.h + mdp:/usr/include/c++/15/bits/hashtable.h + mdp:/usr/include/c++/15/bits/hashtable_policy.h + mdp:/usr/include/c++/15/bits/invoke.h + mdp:/usr/include/c++/15/bits/ios_base.h + mdp:/usr/include/c++/15/bits/istream.tcc + mdp:/usr/include/c++/15/bits/iterator_concepts.h + mdp:/usr/include/c++/15/bits/list.tcc + mdp:/usr/include/c++/15/bits/locale_classes.h + mdp:/usr/include/c++/15/bits/locale_classes.tcc + mdp:/usr/include/c++/15/bits/locale_conv.h + mdp:/usr/include/c++/15/bits/locale_facets.h + mdp:/usr/include/c++/15/bits/locale_facets.tcc + mdp:/usr/include/c++/15/bits/locale_facets_nonio.h + mdp:/usr/include/c++/15/bits/locale_facets_nonio.tcc + mdp:/usr/include/c++/15/bits/localefwd.h + mdp:/usr/include/c++/15/bits/max_size_type.h + mdp:/usr/include/c++/15/bits/memory_resource.h + mdp:/usr/include/c++/15/bits/memoryfwd.h + mdp:/usr/include/c++/15/bits/move.h + mdp:/usr/include/c++/15/bits/nested_exception.h + mdp:/usr/include/c++/15/bits/new_allocator.h + mdp:/usr/include/c++/15/bits/node_handle.h + mdp:/usr/include/c++/15/bits/ostream.h + mdp:/usr/include/c++/15/bits/ostream.tcc + mdp:/usr/include/c++/15/bits/ostream_insert.h + mdp:/usr/include/c++/15/bits/parse_numbers.h + mdp:/usr/include/c++/15/bits/postypes.h + mdp:/usr/include/c++/15/bits/predefined_ops.h + mdp:/usr/include/c++/15/bits/ptr_traits.h + mdp:/usr/include/c++/15/bits/quoted_string.h + mdp:/usr/include/c++/15/bits/range_access.h + mdp:/usr/include/c++/15/bits/ranges_algo.h + mdp:/usr/include/c++/15/bits/ranges_algobase.h + mdp:/usr/include/c++/15/bits/ranges_base.h + mdp:/usr/include/c++/15/bits/ranges_cmp.h + mdp:/usr/include/c++/15/bits/ranges_uninitialized.h + mdp:/usr/include/c++/15/bits/ranges_util.h + mdp:/usr/include/c++/15/bits/refwrap.h + mdp:/usr/include/c++/15/bits/requires_hosted.h + mdp:/usr/include/c++/15/bits/shared_ptr.h + mdp:/usr/include/c++/15/bits/shared_ptr_atomic.h + mdp:/usr/include/c++/15/bits/shared_ptr_base.h + mdp:/usr/include/c++/15/bits/specfun.h + mdp:/usr/include/c++/15/bits/sstream.tcc + mdp:/usr/include/c++/15/bits/std_abs.h + mdp:/usr/include/c++/15/bits/std_function.h + mdp:/usr/include/c++/15/bits/std_mutex.h + mdp:/usr/include/c++/15/bits/stl_algo.h + mdp:/usr/include/c++/15/bits/stl_algobase.h + mdp:/usr/include/c++/15/bits/stl_bvector.h + mdp:/usr/include/c++/15/bits/stl_construct.h + mdp:/usr/include/c++/15/bits/stl_function.h + mdp:/usr/include/c++/15/bits/stl_heap.h + mdp:/usr/include/c++/15/bits/stl_iterator.h + mdp:/usr/include/c++/15/bits/stl_iterator_base_funcs.h + mdp:/usr/include/c++/15/bits/stl_iterator_base_types.h + mdp:/usr/include/c++/15/bits/stl_list.h + mdp:/usr/include/c++/15/bits/stl_map.h + mdp:/usr/include/c++/15/bits/stl_multimap.h + mdp:/usr/include/c++/15/bits/stl_numeric.h + mdp:/usr/include/c++/15/bits/stl_pair.h + mdp:/usr/include/c++/15/bits/stl_raw_storage_iter.h + mdp:/usr/include/c++/15/bits/stl_relops.h + mdp:/usr/include/c++/15/bits/stl_tempbuf.h + mdp:/usr/include/c++/15/bits/stl_tree.h + mdp:/usr/include/c++/15/bits/stl_uninitialized.h + mdp:/usr/include/c++/15/bits/stl_vector.h + mdp:/usr/include/c++/15/bits/stream_iterator.h + mdp:/usr/include/c++/15/bits/streambuf.tcc + mdp:/usr/include/c++/15/bits/streambuf_iterator.h + mdp:/usr/include/c++/15/bits/string_view.tcc + mdp:/usr/include/c++/15/bits/stringfwd.h + mdp:/usr/include/c++/15/bits/uniform_int_dist.h + mdp:/usr/include/c++/15/bits/unique_ptr.h + mdp:/usr/include/c++/15/bits/unordered_map.h + mdp:/usr/include/c++/15/bits/uses_allocator.h + mdp:/usr/include/c++/15/bits/uses_allocator_args.h + mdp:/usr/include/c++/15/bits/utility.h + mdp:/usr/include/c++/15/bits/vector.tcc + mdp:/usr/include/c++/15/bits/version.h + mdp:/usr/include/c++/15/cassert + mdp:/usr/include/c++/15/cctype + mdp:/usr/include/c++/15/cerrno + mdp:/usr/include/c++/15/charconv + mdp:/usr/include/c++/15/chrono + mdp:/usr/include/c++/15/climits + mdp:/usr/include/c++/15/clocale + mdp:/usr/include/c++/15/cmath + mdp:/usr/include/c++/15/compare + mdp:/usr/include/c++/15/concepts + mdp:/usr/include/c++/15/cstddef + mdp:/usr/include/c++/15/cstdint + mdp:/usr/include/c++/15/cstdio + mdp:/usr/include/c++/15/cstdlib + mdp:/usr/include/c++/15/cstring + mdp:/usr/include/c++/15/ctime + mdp:/usr/include/c++/15/cwchar + mdp:/usr/include/c++/15/cwctype + mdp:/usr/include/c++/15/debug/assertions.h + mdp:/usr/include/c++/15/debug/debug.h + mdp:/usr/include/c++/15/exception + mdp:/usr/include/c++/15/ext/aligned_buffer.h + mdp:/usr/include/c++/15/ext/alloc_traits.h + mdp:/usr/include/c++/15/ext/atomicity.h + mdp:/usr/include/c++/15/ext/concurrence.h + mdp:/usr/include/c++/15/ext/numeric_traits.h + mdp:/usr/include/c++/15/ext/string_conversions.h + mdp:/usr/include/c++/15/ext/type_traits.h + mdp:/usr/include/c++/15/format + mdp:/usr/include/c++/15/functional + mdp:/usr/include/c++/15/initializer_list + mdp:/usr/include/c++/15/iomanip + mdp:/usr/include/c++/15/ios + mdp:/usr/include/c++/15/iosfwd + mdp:/usr/include/c++/15/istream + mdp:/usr/include/c++/15/iterator + mdp:/usr/include/c++/15/limits + mdp:/usr/include/c++/15/list + mdp:/usr/include/c++/15/locale + mdp:/usr/include/c++/15/map + mdp:/usr/include/c++/15/memory + mdp:/usr/include/c++/15/new + mdp:/usr/include/c++/15/numeric + mdp:/usr/include/c++/15/optional + mdp:/usr/include/c++/15/ostream + mdp:/usr/include/c++/15/pstl/execution_defs.h + mdp:/usr/include/c++/15/pstl/glue_numeric_defs.h + mdp:/usr/include/c++/15/pstl/pstl_config.h + mdp:/usr/include/c++/15/ratio + mdp:/usr/include/c++/15/sstream + mdp:/usr/include/c++/15/stdexcept + mdp:/usr/include/c++/15/streambuf + mdp:/usr/include/c++/15/string + mdp:/usr/include/c++/15/string_view + mdp:/usr/include/c++/15/system_error + mdp:/usr/include/c++/15/tr1/bessel_function.tcc + mdp:/usr/include/c++/15/tr1/beta_function.tcc + mdp:/usr/include/c++/15/tr1/ell_integral.tcc + mdp:/usr/include/c++/15/tr1/exp_integral.tcc + mdp:/usr/include/c++/15/tr1/gamma.tcc + mdp:/usr/include/c++/15/tr1/hypergeometric.tcc + mdp:/usr/include/c++/15/tr1/legendre_function.tcc + mdp:/usr/include/c++/15/tr1/modified_bessel_func.tcc + mdp:/usr/include/c++/15/tr1/poly_hermite.tcc + mdp:/usr/include/c++/15/tr1/poly_laguerre.tcc + mdp:/usr/include/c++/15/tr1/riemann_zeta.tcc + mdp:/usr/include/c++/15/tr1/special_function_util.h + mdp:/usr/include/c++/15/tuple + mdp:/usr/include/c++/15/type_traits + mdp:/usr/include/c++/15/typeinfo + mdp:/usr/include/c++/15/unordered_map + mdp:/usr/include/c++/15/utility + mdp:/usr/include/c++/15/variant + mdp:/usr/include/c++/15/vector + mdp:/usr/include/c++/15/version + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/atomic_word.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++allocator.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++config.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++locale.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/cpu_defines.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/ctype_base.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/ctype_inline.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/error_constants.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/gthr-default.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/gthr.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/messages_members.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/os_defines.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/time_members.h + mdp:/usr/include/ctype.h + mdp:/usr/include/endian.h + mdp:/usr/include/errno.h + mdp:/usr/include/features-time64.h + mdp:/usr/include/features.h + mdp:/usr/include/gnu/stubs-64.h + mdp:/usr/include/gnu/stubs.h + mdp:/usr/include/libintl.h + mdp:/usr/include/limits.h + mdp:/usr/include/linux/close_range.h + mdp:/usr/include/linux/errno.h + mdp:/usr/include/linux/limits.h + mdp:/usr/include/linux/posix_types.h + mdp:/usr/include/linux/sched/types.h + mdp:/usr/include/linux/stddef.h + mdp:/usr/include/linux/types.h + mdp:/usr/include/locale.h + mdp:/usr/include/pthread.h + mdp:/usr/include/qt6/QtCore/QMap + mdp:/usr/include/qt6/QtCore/QMutex + mdp:/usr/include/qt6/QtCore/QObject + mdp:/usr/include/qt6/QtCore/QPointer + mdp:/usr/include/qt6/QtCore/QSharedPointer + mdp:/usr/include/qt6/QtCore/QSize + mdp:/usr/include/qt6/QtCore/QString + mdp:/usr/include/qt6/QtCore/QStringList + mdp:/usr/include/qt6/QtCore/QTimer + mdp:/usr/include/qt6/QtCore/q17memory.h + mdp:/usr/include/qt6/QtCore/q20functional.h + mdp:/usr/include/qt6/QtCore/q20iterator.h + mdp:/usr/include/qt6/QtCore/q20memory.h + mdp:/usr/include/qt6/QtCore/q20type_traits.h + mdp:/usr/include/qt6/QtCore/q20utility.h + mdp:/usr/include/qt6/QtCore/q23type_traits.h + mdp:/usr/include/qt6/QtCore/q23utility.h + mdp:/usr/include/qt6/QtCore/qabstracteventdispatcher.h + mdp:/usr/include/qt6/QtCore/qalgorithms.h + mdp:/usr/include/qt6/QtCore/qanystringview.h + mdp:/usr/include/qt6/QtCore/qarraydata.h + mdp:/usr/include/qt6/QtCore/qarraydataops.h + mdp:/usr/include/qt6/QtCore/qarraydatapointer.h + mdp:/usr/include/qt6/QtCore/qassert.h + mdp:/usr/include/qt6/QtCore/qatomic.h + mdp:/usr/include/qt6/QtCore/qatomic_cxx11.h + mdp:/usr/include/qt6/QtCore/qbasicatomic.h + mdp:/usr/include/qt6/QtCore/qbasictimer.h + mdp:/usr/include/qt6/QtCore/qbindingstorage.h + mdp:/usr/include/qt6/QtCore/qbytearray.h + mdp:/usr/include/qt6/QtCore/qbytearrayalgorithms.h + mdp:/usr/include/qt6/QtCore/qbytearraylist.h + mdp:/usr/include/qt6/QtCore/qbytearrayview.h + mdp:/usr/include/qt6/QtCore/qchar.h + mdp:/usr/include/qt6/QtCore/qcheckedint_impl.h + mdp:/usr/include/qt6/QtCore/qcompare.h + mdp:/usr/include/qt6/QtCore/qcompare_impl.h + mdp:/usr/include/qt6/QtCore/qcomparehelpers.h + mdp:/usr/include/qt6/QtCore/qcompilerdetection.h + mdp:/usr/include/qt6/QtCore/qconfig-64.h + mdp:/usr/include/qt6/QtCore/qconfig.h + mdp:/usr/include/qt6/QtCore/qconstructormacros.h + mdp:/usr/include/qt6/QtCore/qcontainerfwd.h + mdp:/usr/include/qt6/QtCore/qcontainerinfo.h + mdp:/usr/include/qt6/QtCore/qcontainertools_impl.h + mdp:/usr/include/qt6/QtCore/qdarwinhelpers.h + mdp:/usr/include/qt6/QtCore/qdatastream.h + mdp:/usr/include/qt6/QtCore/qdeadlinetimer.h + mdp:/usr/include/qt6/QtCore/qeventloop.h + mdp:/usr/include/qt6/QtCore/qexceptionhandling.h + mdp:/usr/include/qt6/QtCore/qflags.h + mdp:/usr/include/qt6/QtCore/qfloat16.h + mdp:/usr/include/qt6/QtCore/qforeach.h + mdp:/usr/include/qt6/QtCore/qfunctionaltools_impl.h + mdp:/usr/include/qt6/QtCore/qfunctionpointer.h + mdp:/usr/include/qt6/QtCore/qgenericatomic.h + mdp:/usr/include/qt6/QtCore/qglobal.h + mdp:/usr/include/qt6/QtCore/qglobalstatic.h + mdp:/usr/include/qt6/QtCore/qhashfunctions.h + mdp:/usr/include/qt6/QtCore/qiodevicebase.h + mdp:/usr/include/qt6/QtCore/qiterable.h + mdp:/usr/include/qt6/QtCore/qiterator.h + mdp:/usr/include/qt6/QtCore/qlatin1stringview.h + mdp:/usr/include/qt6/QtCore/qline.h + mdp:/usr/include/qt6/QtCore/qlist.h + mdp:/usr/include/qt6/QtCore/qlogging.h + mdp:/usr/include/qt6/QtCore/qmalloc.h + mdp:/usr/include/qt6/QtCore/qmap.h + mdp:/usr/include/qt6/QtCore/qmargins.h + mdp:/usr/include/qt6/QtCore/qmath.h + mdp:/usr/include/qt6/QtCore/qmetacontainer.h + mdp:/usr/include/qt6/QtCore/qmetatype.h + mdp:/usr/include/qt6/QtCore/qminmax.h + mdp:/usr/include/qt6/QtCore/qmutex.h + mdp:/usr/include/qt6/QtCore/qnamespace.h + mdp:/usr/include/qt6/QtCore/qnumeric.h + mdp:/usr/include/qt6/QtCore/qobject.h + mdp:/usr/include/qt6/QtCore/qobject_impl.h + mdp:/usr/include/qt6/QtCore/qobjectdefs.h + mdp:/usr/include/qt6/QtCore/qobjectdefs_impl.h + mdp:/usr/include/qt6/QtCore/qoverload.h + mdp:/usr/include/qt6/QtCore/qpair.h + mdp:/usr/include/qt6/QtCore/qpoint.h + mdp:/usr/include/qt6/QtCore/qpointer.h + mdp:/usr/include/qt6/QtCore/qprocessordetection.h + mdp:/usr/include/qt6/QtCore/qrect.h + mdp:/usr/include/qt6/QtCore/qrefcount.h + mdp:/usr/include/qt6/QtCore/qscopedpointer.h + mdp:/usr/include/qt6/QtCore/qscopeguard.h + mdp:/usr/include/qt6/QtCore/qshareddata.h + mdp:/usr/include/qt6/QtCore/qshareddata_impl.h + mdp:/usr/include/qt6/QtCore/qsharedpointer.h + mdp:/usr/include/qt6/QtCore/qsharedpointer_impl.h + mdp:/usr/include/qt6/QtCore/qsize.h + mdp:/usr/include/qt6/QtCore/qspan.h + mdp:/usr/include/qt6/QtCore/qstdlibdetection.h + mdp:/usr/include/qt6/QtCore/qstring.h + mdp:/usr/include/qt6/QtCore/qstringalgorithms.h + mdp:/usr/include/qt6/QtCore/qstringbuilder.h + mdp:/usr/include/qt6/QtCore/qstringconverter.h + mdp:/usr/include/qt6/QtCore/qstringconverter_base.h + mdp:/usr/include/qt6/QtCore/qstringfwd.h + mdp:/usr/include/qt6/QtCore/qstringlist.h + mdp:/usr/include/qt6/QtCore/qstringmatcher.h + mdp:/usr/include/qt6/QtCore/qstringtokenizer.h + mdp:/usr/include/qt6/QtCore/qstringview.h + mdp:/usr/include/qt6/QtCore/qswap.h + mdp:/usr/include/qt6/QtCore/qsysinfo.h + mdp:/usr/include/qt6/QtCore/qsystemdetection.h + mdp:/usr/include/qt6/QtCore/qtaggedpointer.h + mdp:/usr/include/qt6/QtCore/qtclasshelpermacros.h + mdp:/usr/include/qt6/QtCore/qtconfiginclude.h + mdp:/usr/include/qt6/QtCore/qtconfigmacros.h + mdp:/usr/include/qt6/QtCore/qtcore-config.h + mdp:/usr/include/qt6/QtCore/qtcoreexports.h + mdp:/usr/include/qt6/QtCore/qtcoreglobal.h + mdp:/usr/include/qt6/QtCore/qtdeprecationdefinitions.h + mdp:/usr/include/qt6/QtCore/qtdeprecationmarkers.h + mdp:/usr/include/qt6/QtCore/qtenvironmentvariables.h + mdp:/usr/include/qt6/QtCore/qtformat_impl.h + mdp:/usr/include/qt6/QtCore/qtimer.h + mdp:/usr/include/qt6/QtCore/qtmetamacros.h + mdp:/usr/include/qt6/QtCore/qtnoop.h + mdp:/usr/include/qt6/QtCore/qtpreprocessorsupport.h + mdp:/usr/include/qt6/QtCore/qtresource.h + mdp:/usr/include/qt6/QtCore/qtsan_impl.h + mdp:/usr/include/qt6/QtCore/qttranslation.h + mdp:/usr/include/qt6/QtCore/qttypetraits.h + mdp:/usr/include/qt6/QtCore/qtversion.h + mdp:/usr/include/qt6/QtCore/qtversionchecks.h + mdp:/usr/include/qt6/QtCore/qtypeinfo.h + mdp:/usr/include/qt6/QtCore/qtypes.h + mdp:/usr/include/qt6/QtCore/qutf8stringview.h + mdp:/usr/include/qt6/QtCore/qversiontagging.h + mdp:/usr/include/qt6/QtCore/qxptype_traits.h + mdp:/usr/include/qt6/QtCore/qyieldcpu.h + mdp:/usr/include/qt6/QtGui/QImage + mdp:/usr/include/qt6/QtGui/qcolor.h + mdp:/usr/include/qt6/QtGui/qimage.h + mdp:/usr/include/qt6/QtGui/qpaintdevice.h + mdp:/usr/include/qt6/QtGui/qpixelformat.h + mdp:/usr/include/qt6/QtGui/qpolygon.h + mdp:/usr/include/qt6/QtGui/qregion.h + mdp:/usr/include/qt6/QtGui/qrgb.h + mdp:/usr/include/qt6/QtGui/qrgba64.h + mdp:/usr/include/qt6/QtGui/qtgui-config.h + mdp:/usr/include/qt6/QtGui/qtguiexports.h + mdp:/usr/include/qt6/QtGui/qtguiglobal.h + mdp:/usr/include/qt6/QtGui/qtransform.h + mdp:/usr/include/qt6/QtGui/qwindowdefs.h + mdp:/usr/include/sched.h + mdp:/usr/include/stdc-predef.h + mdp:/usr/include/stdint.h + mdp:/usr/include/stdio.h + mdp:/usr/include/stdlib.h + mdp:/usr/include/string.h + mdp:/usr/include/strings.h + mdp:/usr/include/sys/cdefs.h + mdp:/usr/include/sys/select.h + mdp:/usr/include/sys/single_threaded.h + mdp:/usr/include/sys/syscall.h + mdp:/usr/include/sys/types.h + mdp:/usr/include/syscall.h + mdp:/usr/include/time.h + mdp:/usr/include/unistd.h + mdp:/usr/include/wchar.h + mdp:/usr/include/wctype.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stdarg.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stdbool.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stddef.h +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/assets_model.cpp +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/project_assets_model.h + mmc:Q_OBJECT + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/kassetmanagerqt_autogen/moc_predefs.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/project_assets_model.h + mdp:/usr/include/alloca.h + mdp:/usr/include/asm-generic/bitsperlong.h + mdp:/usr/include/asm-generic/errno-base.h + mdp:/usr/include/asm-generic/errno.h + mdp:/usr/include/asm-generic/int-ll64.h + mdp:/usr/include/asm-generic/posix_types.h + mdp:/usr/include/asm-generic/types.h + mdp:/usr/include/asm/bitsperlong.h + mdp:/usr/include/asm/errno.h + mdp:/usr/include/asm/posix_types.h + mdp:/usr/include/asm/posix_types_64.h + mdp:/usr/include/asm/types.h + mdp:/usr/include/asm/unistd.h + mdp:/usr/include/asm/unistd_64.h + mdp:/usr/include/assert.h + mdp:/usr/include/bits/atomic_wide_counter.h + mdp:/usr/include/bits/byteswap.h + mdp:/usr/include/bits/confname.h + mdp:/usr/include/bits/cpu-set.h + mdp:/usr/include/bits/endian.h + mdp:/usr/include/bits/endianness.h + mdp:/usr/include/bits/environments.h + mdp:/usr/include/bits/errno.h + mdp:/usr/include/bits/floatn-common.h + mdp:/usr/include/bits/floatn.h + mdp:/usr/include/bits/getopt_core.h + mdp:/usr/include/bits/getopt_posix.h + mdp:/usr/include/bits/libc-header-start.h + mdp:/usr/include/bits/local_lim.h + mdp:/usr/include/bits/locale.h + mdp:/usr/include/bits/long-double.h + mdp:/usr/include/bits/posix1_lim.h + mdp:/usr/include/bits/posix2_lim.h + mdp:/usr/include/bits/posix_opt.h + mdp:/usr/include/bits/pthread_stack_min-dynamic.h + mdp:/usr/include/bits/pthreadtypes-arch.h + mdp:/usr/include/bits/pthreadtypes.h + mdp:/usr/include/bits/sched.h + mdp:/usr/include/bits/select.h + mdp:/usr/include/bits/setjmp.h + mdp:/usr/include/bits/stdint-intn.h + mdp:/usr/include/bits/stdint-least.h + mdp:/usr/include/bits/stdint-uintn.h + mdp:/usr/include/bits/stdio_lim.h + mdp:/usr/include/bits/stdlib-float.h + mdp:/usr/include/bits/struct_mutex.h + mdp:/usr/include/bits/struct_rwlock.h + mdp:/usr/include/bits/syscall.h + mdp:/usr/include/bits/thread-shared-types.h + mdp:/usr/include/bits/time.h + mdp:/usr/include/bits/time64.h + mdp:/usr/include/bits/timesize.h + mdp:/usr/include/bits/timex.h + mdp:/usr/include/bits/types.h + mdp:/usr/include/bits/types/FILE.h + mdp:/usr/include/bits/types/__FILE.h + mdp:/usr/include/bits/types/__fpos64_t.h + mdp:/usr/include/bits/types/__fpos_t.h + mdp:/usr/include/bits/types/__locale_t.h + mdp:/usr/include/bits/types/__mbstate_t.h + mdp:/usr/include/bits/types/__sigset_t.h + mdp:/usr/include/bits/types/clock_t.h + mdp:/usr/include/bits/types/clockid_t.h + mdp:/usr/include/bits/types/cookie_io_functions_t.h + mdp:/usr/include/bits/types/error_t.h + mdp:/usr/include/bits/types/locale_t.h + mdp:/usr/include/bits/types/mbstate_t.h + mdp:/usr/include/bits/types/sigset_t.h + mdp:/usr/include/bits/types/struct_FILE.h + mdp:/usr/include/bits/types/struct___jmp_buf_tag.h + mdp:/usr/include/bits/types/struct_itimerspec.h + mdp:/usr/include/bits/types/struct_sched_param.h + mdp:/usr/include/bits/types/struct_timespec.h + mdp:/usr/include/bits/types/struct_timeval.h + mdp:/usr/include/bits/types/struct_tm.h + mdp:/usr/include/bits/types/time_t.h + mdp:/usr/include/bits/types/timer_t.h + mdp:/usr/include/bits/types/wint_t.h + mdp:/usr/include/bits/typesizes.h + mdp:/usr/include/bits/uintn-identity.h + mdp:/usr/include/bits/uio_lim.h + mdp:/usr/include/bits/unistd_ext.h + mdp:/usr/include/bits/waitflags.h + mdp:/usr/include/bits/waitstatus.h + mdp:/usr/include/bits/wchar.h + mdp:/usr/include/bits/wctype-wchar.h + mdp:/usr/include/bits/wordsize.h + mdp:/usr/include/bits/xopen_lim.h + mdp:/usr/include/c++/15/algorithm + mdp:/usr/include/c++/15/array + mdp:/usr/include/c++/15/atomic + mdp:/usr/include/c++/15/backward/auto_ptr.h + mdp:/usr/include/c++/15/backward/binders.h + mdp:/usr/include/c++/15/bit + mdp:/usr/include/c++/15/bits/algorithmfwd.h + mdp:/usr/include/c++/15/bits/align.h + mdp:/usr/include/c++/15/bits/alloc_traits.h + mdp:/usr/include/c++/15/bits/allocated_ptr.h + mdp:/usr/include/c++/15/bits/allocator.h + mdp:/usr/include/c++/15/bits/atomic_base.h + mdp:/usr/include/c++/15/bits/atomic_lockfree_defines.h + mdp:/usr/include/c++/15/bits/atomic_wait.h + mdp:/usr/include/c++/15/bits/basic_ios.h + mdp:/usr/include/c++/15/bits/basic_ios.tcc + mdp:/usr/include/c++/15/bits/basic_string.h + mdp:/usr/include/c++/15/bits/basic_string.tcc + mdp:/usr/include/c++/15/bits/char_traits.h + mdp:/usr/include/c++/15/bits/charconv.h + mdp:/usr/include/c++/15/bits/chrono.h + mdp:/usr/include/c++/15/bits/chrono_io.h + mdp:/usr/include/c++/15/bits/codecvt.h + mdp:/usr/include/c++/15/bits/concept_check.h + mdp:/usr/include/c++/15/bits/cpp_type_traits.h + mdp:/usr/include/c++/15/bits/cxxabi_forced.h + mdp:/usr/include/c++/15/bits/cxxabi_init_exception.h + mdp:/usr/include/c++/15/bits/enable_special_members.h + mdp:/usr/include/c++/15/bits/erase_if.h + mdp:/usr/include/c++/15/bits/exception.h + mdp:/usr/include/c++/15/bits/exception_defines.h + mdp:/usr/include/c++/15/bits/exception_ptr.h + mdp:/usr/include/c++/15/bits/functexcept.h + mdp:/usr/include/c++/15/bits/functional_hash.h + mdp:/usr/include/c++/15/bits/hash_bytes.h + mdp:/usr/include/c++/15/bits/hashtable.h + mdp:/usr/include/c++/15/bits/hashtable_policy.h + mdp:/usr/include/c++/15/bits/invoke.h + mdp:/usr/include/c++/15/bits/ios_base.h + mdp:/usr/include/c++/15/bits/istream.tcc + mdp:/usr/include/c++/15/bits/iterator_concepts.h + mdp:/usr/include/c++/15/bits/list.tcc + mdp:/usr/include/c++/15/bits/locale_classes.h + mdp:/usr/include/c++/15/bits/locale_classes.tcc + mdp:/usr/include/c++/15/bits/locale_conv.h + mdp:/usr/include/c++/15/bits/locale_facets.h + mdp:/usr/include/c++/15/bits/locale_facets.tcc + mdp:/usr/include/c++/15/bits/locale_facets_nonio.h + mdp:/usr/include/c++/15/bits/locale_facets_nonio.tcc + mdp:/usr/include/c++/15/bits/localefwd.h + mdp:/usr/include/c++/15/bits/max_size_type.h + mdp:/usr/include/c++/15/bits/memory_resource.h + mdp:/usr/include/c++/15/bits/memoryfwd.h + mdp:/usr/include/c++/15/bits/move.h + mdp:/usr/include/c++/15/bits/nested_exception.h + mdp:/usr/include/c++/15/bits/new_allocator.h + mdp:/usr/include/c++/15/bits/node_handle.h + mdp:/usr/include/c++/15/bits/ostream.h + mdp:/usr/include/c++/15/bits/ostream.tcc + mdp:/usr/include/c++/15/bits/ostream_insert.h + mdp:/usr/include/c++/15/bits/parse_numbers.h + mdp:/usr/include/c++/15/bits/postypes.h + mdp:/usr/include/c++/15/bits/predefined_ops.h + mdp:/usr/include/c++/15/bits/ptr_traits.h + mdp:/usr/include/c++/15/bits/quoted_string.h + mdp:/usr/include/c++/15/bits/range_access.h + mdp:/usr/include/c++/15/bits/ranges_algo.h + mdp:/usr/include/c++/15/bits/ranges_algobase.h + mdp:/usr/include/c++/15/bits/ranges_base.h + mdp:/usr/include/c++/15/bits/ranges_cmp.h + mdp:/usr/include/c++/15/bits/ranges_uninitialized.h + mdp:/usr/include/c++/15/bits/ranges_util.h + mdp:/usr/include/c++/15/bits/refwrap.h + mdp:/usr/include/c++/15/bits/requires_hosted.h + mdp:/usr/include/c++/15/bits/shared_ptr.h + mdp:/usr/include/c++/15/bits/shared_ptr_atomic.h + mdp:/usr/include/c++/15/bits/shared_ptr_base.h + mdp:/usr/include/c++/15/bits/specfun.h + mdp:/usr/include/c++/15/bits/sstream.tcc + mdp:/usr/include/c++/15/bits/std_abs.h + mdp:/usr/include/c++/15/bits/std_function.h + mdp:/usr/include/c++/15/bits/std_mutex.h + mdp:/usr/include/c++/15/bits/stl_algo.h + mdp:/usr/include/c++/15/bits/stl_algobase.h + mdp:/usr/include/c++/15/bits/stl_bvector.h + mdp:/usr/include/c++/15/bits/stl_construct.h + mdp:/usr/include/c++/15/bits/stl_function.h + mdp:/usr/include/c++/15/bits/stl_heap.h + mdp:/usr/include/c++/15/bits/stl_iterator.h + mdp:/usr/include/c++/15/bits/stl_iterator_base_funcs.h + mdp:/usr/include/c++/15/bits/stl_iterator_base_types.h + mdp:/usr/include/c++/15/bits/stl_list.h + mdp:/usr/include/c++/15/bits/stl_map.h + mdp:/usr/include/c++/15/bits/stl_multimap.h + mdp:/usr/include/c++/15/bits/stl_multiset.h + mdp:/usr/include/c++/15/bits/stl_numeric.h + mdp:/usr/include/c++/15/bits/stl_pair.h + mdp:/usr/include/c++/15/bits/stl_raw_storage_iter.h + mdp:/usr/include/c++/15/bits/stl_relops.h + mdp:/usr/include/c++/15/bits/stl_set.h + mdp:/usr/include/c++/15/bits/stl_tempbuf.h + mdp:/usr/include/c++/15/bits/stl_tree.h + mdp:/usr/include/c++/15/bits/stl_uninitialized.h + mdp:/usr/include/c++/15/bits/stl_vector.h + mdp:/usr/include/c++/15/bits/stream_iterator.h + mdp:/usr/include/c++/15/bits/streambuf.tcc + mdp:/usr/include/c++/15/bits/streambuf_iterator.h + mdp:/usr/include/c++/15/bits/string_view.tcc + mdp:/usr/include/c++/15/bits/stringfwd.h + mdp:/usr/include/c++/15/bits/uniform_int_dist.h + mdp:/usr/include/c++/15/bits/unique_ptr.h + mdp:/usr/include/c++/15/bits/unordered_map.h + mdp:/usr/include/c++/15/bits/unordered_set.h + mdp:/usr/include/c++/15/bits/uses_allocator.h + mdp:/usr/include/c++/15/bits/uses_allocator_args.h + mdp:/usr/include/c++/15/bits/utility.h + mdp:/usr/include/c++/15/bits/vector.tcc + mdp:/usr/include/c++/15/bits/version.h + mdp:/usr/include/c++/15/cctype + mdp:/usr/include/c++/15/cerrno + mdp:/usr/include/c++/15/charconv + mdp:/usr/include/c++/15/chrono + mdp:/usr/include/c++/15/climits + mdp:/usr/include/c++/15/clocale + mdp:/usr/include/c++/15/cmath + mdp:/usr/include/c++/15/compare + mdp:/usr/include/c++/15/concepts + mdp:/usr/include/c++/15/cstddef + mdp:/usr/include/c++/15/cstdint + mdp:/usr/include/c++/15/cstdio + mdp:/usr/include/c++/15/cstdlib + mdp:/usr/include/c++/15/cstring + mdp:/usr/include/c++/15/ctime + mdp:/usr/include/c++/15/cwchar + mdp:/usr/include/c++/15/cwctype + mdp:/usr/include/c++/15/debug/assertions.h + mdp:/usr/include/c++/15/debug/debug.h + mdp:/usr/include/c++/15/exception + mdp:/usr/include/c++/15/ext/aligned_buffer.h + mdp:/usr/include/c++/15/ext/alloc_traits.h + mdp:/usr/include/c++/15/ext/atomicity.h + mdp:/usr/include/c++/15/ext/concurrence.h + mdp:/usr/include/c++/15/ext/numeric_traits.h + mdp:/usr/include/c++/15/ext/string_conversions.h + mdp:/usr/include/c++/15/ext/type_traits.h + mdp:/usr/include/c++/15/format + mdp:/usr/include/c++/15/functional + mdp:/usr/include/c++/15/initializer_list + mdp:/usr/include/c++/15/iomanip + mdp:/usr/include/c++/15/ios + mdp:/usr/include/c++/15/iosfwd + mdp:/usr/include/c++/15/istream + mdp:/usr/include/c++/15/iterator + mdp:/usr/include/c++/15/limits + mdp:/usr/include/c++/15/list + mdp:/usr/include/c++/15/locale + mdp:/usr/include/c++/15/map + mdp:/usr/include/c++/15/memory + mdp:/usr/include/c++/15/new + mdp:/usr/include/c++/15/numeric + mdp:/usr/include/c++/15/optional + mdp:/usr/include/c++/15/ostream + mdp:/usr/include/c++/15/pstl/execution_defs.h + mdp:/usr/include/c++/15/pstl/glue_numeric_defs.h + mdp:/usr/include/c++/15/pstl/pstl_config.h + mdp:/usr/include/c++/15/ratio + mdp:/usr/include/c++/15/set + mdp:/usr/include/c++/15/sstream + mdp:/usr/include/c++/15/stdexcept + mdp:/usr/include/c++/15/streambuf + mdp:/usr/include/c++/15/string + mdp:/usr/include/c++/15/string_view + mdp:/usr/include/c++/15/system_error + mdp:/usr/include/c++/15/tr1/bessel_function.tcc + mdp:/usr/include/c++/15/tr1/beta_function.tcc + mdp:/usr/include/c++/15/tr1/ell_integral.tcc + mdp:/usr/include/c++/15/tr1/exp_integral.tcc + mdp:/usr/include/c++/15/tr1/gamma.tcc + mdp:/usr/include/c++/15/tr1/hypergeometric.tcc + mdp:/usr/include/c++/15/tr1/legendre_function.tcc + mdp:/usr/include/c++/15/tr1/modified_bessel_func.tcc + mdp:/usr/include/c++/15/tr1/poly_hermite.tcc + mdp:/usr/include/c++/15/tr1/poly_laguerre.tcc + mdp:/usr/include/c++/15/tr1/riemann_zeta.tcc + mdp:/usr/include/c++/15/tr1/special_function_util.h + mdp:/usr/include/c++/15/tuple + mdp:/usr/include/c++/15/type_traits + mdp:/usr/include/c++/15/typeinfo + mdp:/usr/include/c++/15/unordered_map + mdp:/usr/include/c++/15/unordered_set + mdp:/usr/include/c++/15/utility + mdp:/usr/include/c++/15/variant + mdp:/usr/include/c++/15/vector + mdp:/usr/include/c++/15/version + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/atomic_word.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++allocator.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++config.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++locale.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/cpu_defines.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/ctype_base.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/ctype_inline.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/error_constants.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/gthr-default.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/gthr.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/messages_members.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/os_defines.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/time_members.h + mdp:/usr/include/ctype.h + mdp:/usr/include/endian.h + mdp:/usr/include/errno.h + mdp:/usr/include/features-time64.h + mdp:/usr/include/features.h + mdp:/usr/include/gnu/stubs-64.h + mdp:/usr/include/gnu/stubs.h + mdp:/usr/include/libintl.h + mdp:/usr/include/limits.h + mdp:/usr/include/linux/close_range.h + mdp:/usr/include/linux/errno.h + mdp:/usr/include/linux/limits.h + mdp:/usr/include/linux/posix_types.h + mdp:/usr/include/linux/sched/types.h + mdp:/usr/include/linux/stddef.h + mdp:/usr/include/linux/types.h + mdp:/usr/include/locale.h + mdp:/usr/include/pthread.h + mdp:/usr/include/qt6/QtCore/QAbstractListModel + mdp:/usr/include/qt6/QtCore/QDateTime + mdp:/usr/include/qt6/QtCore/QHash + mdp:/usr/include/qt6/QtCore/QMap + mdp:/usr/include/qt6/QtCore/QString + mdp:/usr/include/qt6/QtCore/QStringList + mdp:/usr/include/qt6/QtCore/QTimer + mdp:/usr/include/qt6/QtCore/QVariant + mdp:/usr/include/qt6/QtCore/QVariantMap + mdp:/usr/include/qt6/QtCore/QVector + mdp:/usr/include/qt6/QtCore/q17memory.h + mdp:/usr/include/qt6/QtCore/q20functional.h + mdp:/usr/include/qt6/QtCore/q20memory.h + mdp:/usr/include/qt6/QtCore/q20type_traits.h + mdp:/usr/include/qt6/QtCore/q20utility.h + mdp:/usr/include/qt6/QtCore/q23type_traits.h + mdp:/usr/include/qt6/QtCore/q23utility.h + mdp:/usr/include/qt6/QtCore/qabstracteventdispatcher.h + mdp:/usr/include/qt6/QtCore/qabstractitemmodel.h + mdp:/usr/include/qt6/QtCore/qalgorithms.h + mdp:/usr/include/qt6/QtCore/qalloc.h + mdp:/usr/include/qt6/QtCore/qanystringview.h + mdp:/usr/include/qt6/QtCore/qarraydata.h + mdp:/usr/include/qt6/QtCore/qarraydataops.h + mdp:/usr/include/qt6/QtCore/qarraydatapointer.h + mdp:/usr/include/qt6/QtCore/qassert.h + mdp:/usr/include/qt6/QtCore/qatomic.h + mdp:/usr/include/qt6/QtCore/qatomic_cxx11.h + mdp:/usr/include/qt6/QtCore/qbasicatomic.h + mdp:/usr/include/qt6/QtCore/qbasictimer.h + mdp:/usr/include/qt6/QtCore/qbindingstorage.h + mdp:/usr/include/qt6/QtCore/qbytearray.h + mdp:/usr/include/qt6/QtCore/qbytearrayalgorithms.h + mdp:/usr/include/qt6/QtCore/qbytearraylist.h + mdp:/usr/include/qt6/QtCore/qbytearrayview.h + mdp:/usr/include/qt6/QtCore/qcalendar.h + mdp:/usr/include/qt6/QtCore/qchar.h + mdp:/usr/include/qt6/QtCore/qcompare.h + mdp:/usr/include/qt6/QtCore/qcompare_impl.h + mdp:/usr/include/qt6/QtCore/qcomparehelpers.h + mdp:/usr/include/qt6/QtCore/qcompilerdetection.h + mdp:/usr/include/qt6/QtCore/qconfig-64.h + mdp:/usr/include/qt6/QtCore/qconfig.h + mdp:/usr/include/qt6/QtCore/qconstructormacros.h + mdp:/usr/include/qt6/QtCore/qcontainerfwd.h + mdp:/usr/include/qt6/QtCore/qcontainerinfo.h + mdp:/usr/include/qt6/QtCore/qcontainertools_impl.h + mdp:/usr/include/qt6/QtCore/qcontiguouscache.h + mdp:/usr/include/qt6/QtCore/qdarwinhelpers.h + mdp:/usr/include/qt6/QtCore/qdatastream.h + mdp:/usr/include/qt6/QtCore/qdatetime.h + mdp:/usr/include/qt6/QtCore/qdeadlinetimer.h + mdp:/usr/include/qt6/QtCore/qdebug.h + mdp:/usr/include/qt6/QtCore/qeventloop.h + mdp:/usr/include/qt6/QtCore/qexceptionhandling.h + mdp:/usr/include/qt6/QtCore/qflags.h + mdp:/usr/include/qt6/QtCore/qfloat16.h + mdp:/usr/include/qt6/QtCore/qforeach.h + mdp:/usr/include/qt6/QtCore/qfunctionaltools_impl.h + mdp:/usr/include/qt6/QtCore/qfunctionpointer.h + mdp:/usr/include/qt6/QtCore/qgenericatomic.h + mdp:/usr/include/qt6/QtCore/qglobal.h + mdp:/usr/include/qt6/QtCore/qglobalstatic.h + mdp:/usr/include/qt6/QtCore/qhash.h + mdp:/usr/include/qt6/QtCore/qhashfunctions.h + mdp:/usr/include/qt6/QtCore/qiodevicebase.h + mdp:/usr/include/qt6/QtCore/qiterable.h + mdp:/usr/include/qt6/QtCore/qiterator.h + mdp:/usr/include/qt6/QtCore/qlatin1stringview.h + mdp:/usr/include/qt6/QtCore/qlist.h + mdp:/usr/include/qt6/QtCore/qlocale.h + mdp:/usr/include/qt6/QtCore/qlogging.h + mdp:/usr/include/qt6/QtCore/qmalloc.h + mdp:/usr/include/qt6/QtCore/qmap.h + mdp:/usr/include/qt6/QtCore/qmath.h + mdp:/usr/include/qt6/QtCore/qmetacontainer.h + mdp:/usr/include/qt6/QtCore/qmetatype.h + mdp:/usr/include/qt6/QtCore/qminmax.h + mdp:/usr/include/qt6/QtCore/qnamespace.h + mdp:/usr/include/qt6/QtCore/qnumeric.h + mdp:/usr/include/qt6/QtCore/qobject.h + mdp:/usr/include/qt6/QtCore/qobject_impl.h + mdp:/usr/include/qt6/QtCore/qobjectdefs.h + mdp:/usr/include/qt6/QtCore/qobjectdefs_impl.h + mdp:/usr/include/qt6/QtCore/qoverload.h + mdp:/usr/include/qt6/QtCore/qpair.h + mdp:/usr/include/qt6/QtCore/qprocessordetection.h + mdp:/usr/include/qt6/QtCore/qrefcount.h + mdp:/usr/include/qt6/QtCore/qscopedpointer.h + mdp:/usr/include/qt6/QtCore/qscopeguard.h + mdp:/usr/include/qt6/QtCore/qset.h + mdp:/usr/include/qt6/QtCore/qshareddata.h + mdp:/usr/include/qt6/QtCore/qshareddata_impl.h + mdp:/usr/include/qt6/QtCore/qsharedpointer.h + mdp:/usr/include/qt6/QtCore/qsharedpointer_impl.h + mdp:/usr/include/qt6/QtCore/qstdlibdetection.h + mdp:/usr/include/qt6/QtCore/qstring.h + mdp:/usr/include/qt6/QtCore/qstringalgorithms.h + mdp:/usr/include/qt6/QtCore/qstringbuilder.h + mdp:/usr/include/qt6/QtCore/qstringconverter.h + mdp:/usr/include/qt6/QtCore/qstringconverter_base.h + mdp:/usr/include/qt6/QtCore/qstringfwd.h + mdp:/usr/include/qt6/QtCore/qstringlist.h + mdp:/usr/include/qt6/QtCore/qstringmatcher.h + mdp:/usr/include/qt6/QtCore/qstringtokenizer.h + mdp:/usr/include/qt6/QtCore/qstringview.h + mdp:/usr/include/qt6/QtCore/qswap.h + mdp:/usr/include/qt6/QtCore/qsysinfo.h + mdp:/usr/include/qt6/QtCore/qsystemdetection.h + mdp:/usr/include/qt6/QtCore/qtaggedpointer.h + mdp:/usr/include/qt6/QtCore/qtclasshelpermacros.h + mdp:/usr/include/qt6/QtCore/qtconfiginclude.h + mdp:/usr/include/qt6/QtCore/qtconfigmacros.h + mdp:/usr/include/qt6/QtCore/qtcore-config.h + mdp:/usr/include/qt6/QtCore/qtcoreexports.h + mdp:/usr/include/qt6/QtCore/qtcoreglobal.h + mdp:/usr/include/qt6/QtCore/qtdeprecationdefinitions.h + mdp:/usr/include/qt6/QtCore/qtdeprecationmarkers.h + mdp:/usr/include/qt6/QtCore/qtenvironmentvariables.h + mdp:/usr/include/qt6/QtCore/qtextstream.h + mdp:/usr/include/qt6/QtCore/qtformat_impl.h + mdp:/usr/include/qt6/QtCore/qtimer.h + mdp:/usr/include/qt6/QtCore/qtmetamacros.h + mdp:/usr/include/qt6/QtCore/qtnoop.h + mdp:/usr/include/qt6/QtCore/qtpreprocessorsupport.h + mdp:/usr/include/qt6/QtCore/qtresource.h + mdp:/usr/include/qt6/QtCore/qttranslation.h + mdp:/usr/include/qt6/QtCore/qttypetraits.h + mdp:/usr/include/qt6/QtCore/qtversion.h + mdp:/usr/include/qt6/QtCore/qtversionchecks.h + mdp:/usr/include/qt6/QtCore/qtypeinfo.h + mdp:/usr/include/qt6/QtCore/qtypes.h + mdp:/usr/include/qt6/QtCore/qutf8stringview.h + mdp:/usr/include/qt6/QtCore/qvariant.h + mdp:/usr/include/qt6/QtCore/qvariantmap.h + mdp:/usr/include/qt6/QtCore/qvarlengtharray.h + mdp:/usr/include/qt6/QtCore/qvector.h + mdp:/usr/include/qt6/QtCore/qversiontagging.h + mdp:/usr/include/qt6/QtCore/qxptype_traits.h + mdp:/usr/include/qt6/QtCore/qyieldcpu.h + mdp:/usr/include/sched.h + mdp:/usr/include/stdc-predef.h + mdp:/usr/include/stdint.h + mdp:/usr/include/stdio.h + mdp:/usr/include/stdlib.h + mdp:/usr/include/string.h + mdp:/usr/include/strings.h + mdp:/usr/include/sys/cdefs.h + mdp:/usr/include/sys/select.h + mdp:/usr/include/sys/single_threaded.h + mdp:/usr/include/sys/syscall.h + mdp:/usr/include/sys/types.h + mdp:/usr/include/syscall.h + mdp:/usr/include/time.h + mdp:/usr/include/unistd.h + mdp:/usr/include/wchar.h + mdp:/usr/include/wctype.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stdarg.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stdbool.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stddef.h +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/file_utils.cpp +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/virtual_drag.h +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/tags_model.h + mmc:Q_OBJECT + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/kassetmanagerqt_autogen/moc_predefs.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/db.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/i_asset_database.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/tags_model.h + mdp:/usr/include/alloca.h + mdp:/usr/include/asm-generic/bitsperlong.h + mdp:/usr/include/asm-generic/errno-base.h + mdp:/usr/include/asm-generic/errno.h + mdp:/usr/include/asm-generic/int-ll64.h + mdp:/usr/include/asm-generic/posix_types.h + mdp:/usr/include/asm-generic/types.h + mdp:/usr/include/asm/bitsperlong.h + mdp:/usr/include/asm/errno.h + mdp:/usr/include/asm/posix_types.h + mdp:/usr/include/asm/posix_types_64.h + mdp:/usr/include/asm/types.h + mdp:/usr/include/asm/unistd.h + mdp:/usr/include/asm/unistd_64.h + mdp:/usr/include/assert.h + mdp:/usr/include/bits/atomic_wide_counter.h + mdp:/usr/include/bits/byteswap.h + mdp:/usr/include/bits/confname.h + mdp:/usr/include/bits/cpu-set.h + mdp:/usr/include/bits/endian.h + mdp:/usr/include/bits/endianness.h + mdp:/usr/include/bits/environments.h + mdp:/usr/include/bits/errno.h + mdp:/usr/include/bits/floatn-common.h + mdp:/usr/include/bits/floatn.h + mdp:/usr/include/bits/getopt_core.h + mdp:/usr/include/bits/getopt_posix.h + mdp:/usr/include/bits/libc-header-start.h + mdp:/usr/include/bits/local_lim.h + mdp:/usr/include/bits/locale.h + mdp:/usr/include/bits/long-double.h + mdp:/usr/include/bits/posix1_lim.h + mdp:/usr/include/bits/posix2_lim.h + mdp:/usr/include/bits/posix_opt.h + mdp:/usr/include/bits/pthread_stack_min-dynamic.h + mdp:/usr/include/bits/pthreadtypes-arch.h + mdp:/usr/include/bits/pthreadtypes.h + mdp:/usr/include/bits/sched.h + mdp:/usr/include/bits/select.h + mdp:/usr/include/bits/setjmp.h + mdp:/usr/include/bits/stdint-intn.h + mdp:/usr/include/bits/stdint-least.h + mdp:/usr/include/bits/stdint-uintn.h + mdp:/usr/include/bits/stdio_lim.h + mdp:/usr/include/bits/stdlib-float.h + mdp:/usr/include/bits/struct_mutex.h + mdp:/usr/include/bits/struct_rwlock.h + mdp:/usr/include/bits/syscall.h + mdp:/usr/include/bits/thread-shared-types.h + mdp:/usr/include/bits/time.h + mdp:/usr/include/bits/time64.h + mdp:/usr/include/bits/timesize.h + mdp:/usr/include/bits/timex.h + mdp:/usr/include/bits/types.h + mdp:/usr/include/bits/types/FILE.h + mdp:/usr/include/bits/types/__FILE.h + mdp:/usr/include/bits/types/__fpos64_t.h + mdp:/usr/include/bits/types/__fpos_t.h + mdp:/usr/include/bits/types/__locale_t.h + mdp:/usr/include/bits/types/__mbstate_t.h + mdp:/usr/include/bits/types/__sigset_t.h + mdp:/usr/include/bits/types/clock_t.h + mdp:/usr/include/bits/types/clockid_t.h + mdp:/usr/include/bits/types/cookie_io_functions_t.h + mdp:/usr/include/bits/types/error_t.h + mdp:/usr/include/bits/types/locale_t.h + mdp:/usr/include/bits/types/mbstate_t.h + mdp:/usr/include/bits/types/sigset_t.h + mdp:/usr/include/bits/types/struct_FILE.h + mdp:/usr/include/bits/types/struct___jmp_buf_tag.h + mdp:/usr/include/bits/types/struct_itimerspec.h + mdp:/usr/include/bits/types/struct_sched_param.h + mdp:/usr/include/bits/types/struct_timespec.h + mdp:/usr/include/bits/types/struct_timeval.h + mdp:/usr/include/bits/types/struct_tm.h + mdp:/usr/include/bits/types/time_t.h + mdp:/usr/include/bits/types/timer_t.h + mdp:/usr/include/bits/types/wint_t.h + mdp:/usr/include/bits/typesizes.h + mdp:/usr/include/bits/uintn-identity.h + mdp:/usr/include/bits/uio_lim.h + mdp:/usr/include/bits/unistd_ext.h + mdp:/usr/include/bits/waitflags.h + mdp:/usr/include/bits/waitstatus.h + mdp:/usr/include/bits/wchar.h + mdp:/usr/include/bits/wctype-wchar.h + mdp:/usr/include/bits/wordsize.h + mdp:/usr/include/bits/xopen_lim.h + mdp:/usr/include/c++/15/algorithm + mdp:/usr/include/c++/15/array + mdp:/usr/include/c++/15/atomic + mdp:/usr/include/c++/15/backward/auto_ptr.h + mdp:/usr/include/c++/15/backward/binders.h + mdp:/usr/include/c++/15/bit + mdp:/usr/include/c++/15/bits/algorithmfwd.h + mdp:/usr/include/c++/15/bits/align.h + mdp:/usr/include/c++/15/bits/alloc_traits.h + mdp:/usr/include/c++/15/bits/allocated_ptr.h + mdp:/usr/include/c++/15/bits/allocator.h + mdp:/usr/include/c++/15/bits/atomic_base.h + mdp:/usr/include/c++/15/bits/atomic_lockfree_defines.h + mdp:/usr/include/c++/15/bits/atomic_wait.h + mdp:/usr/include/c++/15/bits/basic_ios.h + mdp:/usr/include/c++/15/bits/basic_ios.tcc + mdp:/usr/include/c++/15/bits/basic_string.h + mdp:/usr/include/c++/15/bits/basic_string.tcc + mdp:/usr/include/c++/15/bits/char_traits.h + mdp:/usr/include/c++/15/bits/charconv.h + mdp:/usr/include/c++/15/bits/chrono.h + mdp:/usr/include/c++/15/bits/chrono_io.h + mdp:/usr/include/c++/15/bits/codecvt.h + mdp:/usr/include/c++/15/bits/concept_check.h + mdp:/usr/include/c++/15/bits/cpp_type_traits.h + mdp:/usr/include/c++/15/bits/cxxabi_forced.h + mdp:/usr/include/c++/15/bits/cxxabi_init_exception.h + mdp:/usr/include/c++/15/bits/enable_special_members.h + mdp:/usr/include/c++/15/bits/erase_if.h + mdp:/usr/include/c++/15/bits/exception.h + mdp:/usr/include/c++/15/bits/exception_defines.h + mdp:/usr/include/c++/15/bits/exception_ptr.h + mdp:/usr/include/c++/15/bits/functexcept.h + mdp:/usr/include/c++/15/bits/functional_hash.h + mdp:/usr/include/c++/15/bits/hash_bytes.h + mdp:/usr/include/c++/15/bits/hashtable.h + mdp:/usr/include/c++/15/bits/hashtable_policy.h + mdp:/usr/include/c++/15/bits/invoke.h + mdp:/usr/include/c++/15/bits/ios_base.h + mdp:/usr/include/c++/15/bits/istream.tcc + mdp:/usr/include/c++/15/bits/iterator_concepts.h + mdp:/usr/include/c++/15/bits/list.tcc + mdp:/usr/include/c++/15/bits/locale_classes.h + mdp:/usr/include/c++/15/bits/locale_classes.tcc + mdp:/usr/include/c++/15/bits/locale_conv.h + mdp:/usr/include/c++/15/bits/locale_facets.h + mdp:/usr/include/c++/15/bits/locale_facets.tcc + mdp:/usr/include/c++/15/bits/locale_facets_nonio.h + mdp:/usr/include/c++/15/bits/locale_facets_nonio.tcc + mdp:/usr/include/c++/15/bits/localefwd.h + mdp:/usr/include/c++/15/bits/max_size_type.h + mdp:/usr/include/c++/15/bits/memory_resource.h + mdp:/usr/include/c++/15/bits/memoryfwd.h + mdp:/usr/include/c++/15/bits/move.h + mdp:/usr/include/c++/15/bits/nested_exception.h + mdp:/usr/include/c++/15/bits/new_allocator.h + mdp:/usr/include/c++/15/bits/node_handle.h + mdp:/usr/include/c++/15/bits/ostream.h + mdp:/usr/include/c++/15/bits/ostream.tcc + mdp:/usr/include/c++/15/bits/ostream_insert.h + mdp:/usr/include/c++/15/bits/parse_numbers.h + mdp:/usr/include/c++/15/bits/postypes.h + mdp:/usr/include/c++/15/bits/predefined_ops.h + mdp:/usr/include/c++/15/bits/ptr_traits.h + mdp:/usr/include/c++/15/bits/quoted_string.h + mdp:/usr/include/c++/15/bits/range_access.h + mdp:/usr/include/c++/15/bits/ranges_algo.h + mdp:/usr/include/c++/15/bits/ranges_algobase.h + mdp:/usr/include/c++/15/bits/ranges_base.h + mdp:/usr/include/c++/15/bits/ranges_cmp.h + mdp:/usr/include/c++/15/bits/ranges_uninitialized.h + mdp:/usr/include/c++/15/bits/ranges_util.h + mdp:/usr/include/c++/15/bits/refwrap.h + mdp:/usr/include/c++/15/bits/requires_hosted.h + mdp:/usr/include/c++/15/bits/shared_ptr.h + mdp:/usr/include/c++/15/bits/shared_ptr_atomic.h + mdp:/usr/include/c++/15/bits/shared_ptr_base.h + mdp:/usr/include/c++/15/bits/specfun.h + mdp:/usr/include/c++/15/bits/sstream.tcc + mdp:/usr/include/c++/15/bits/std_abs.h + mdp:/usr/include/c++/15/bits/std_function.h + mdp:/usr/include/c++/15/bits/std_mutex.h + mdp:/usr/include/c++/15/bits/stl_algo.h + mdp:/usr/include/c++/15/bits/stl_algobase.h + mdp:/usr/include/c++/15/bits/stl_bvector.h + mdp:/usr/include/c++/15/bits/stl_construct.h + mdp:/usr/include/c++/15/bits/stl_function.h + mdp:/usr/include/c++/15/bits/stl_heap.h + mdp:/usr/include/c++/15/bits/stl_iterator.h + mdp:/usr/include/c++/15/bits/stl_iterator_base_funcs.h + mdp:/usr/include/c++/15/bits/stl_iterator_base_types.h + mdp:/usr/include/c++/15/bits/stl_list.h + mdp:/usr/include/c++/15/bits/stl_map.h + mdp:/usr/include/c++/15/bits/stl_multimap.h + mdp:/usr/include/c++/15/bits/stl_multiset.h + mdp:/usr/include/c++/15/bits/stl_numeric.h + mdp:/usr/include/c++/15/bits/stl_pair.h + mdp:/usr/include/c++/15/bits/stl_raw_storage_iter.h + mdp:/usr/include/c++/15/bits/stl_relops.h + mdp:/usr/include/c++/15/bits/stl_set.h + mdp:/usr/include/c++/15/bits/stl_tempbuf.h + mdp:/usr/include/c++/15/bits/stl_tree.h + mdp:/usr/include/c++/15/bits/stl_uninitialized.h + mdp:/usr/include/c++/15/bits/stl_vector.h + mdp:/usr/include/c++/15/bits/stream_iterator.h + mdp:/usr/include/c++/15/bits/streambuf.tcc + mdp:/usr/include/c++/15/bits/streambuf_iterator.h + mdp:/usr/include/c++/15/bits/string_view.tcc + mdp:/usr/include/c++/15/bits/stringfwd.h + mdp:/usr/include/c++/15/bits/uniform_int_dist.h + mdp:/usr/include/c++/15/bits/unique_ptr.h + mdp:/usr/include/c++/15/bits/unordered_map.h + mdp:/usr/include/c++/15/bits/unordered_set.h + mdp:/usr/include/c++/15/bits/uses_allocator.h + mdp:/usr/include/c++/15/bits/uses_allocator_args.h + mdp:/usr/include/c++/15/bits/utility.h + mdp:/usr/include/c++/15/bits/vector.tcc + mdp:/usr/include/c++/15/bits/version.h + mdp:/usr/include/c++/15/cassert + mdp:/usr/include/c++/15/cctype + mdp:/usr/include/c++/15/cerrno + mdp:/usr/include/c++/15/charconv + mdp:/usr/include/c++/15/chrono + mdp:/usr/include/c++/15/climits + mdp:/usr/include/c++/15/clocale + mdp:/usr/include/c++/15/cmath + mdp:/usr/include/c++/15/compare + mdp:/usr/include/c++/15/concepts + mdp:/usr/include/c++/15/cstddef + mdp:/usr/include/c++/15/cstdint + mdp:/usr/include/c++/15/cstdio + mdp:/usr/include/c++/15/cstdlib + mdp:/usr/include/c++/15/cstring + mdp:/usr/include/c++/15/ctime + mdp:/usr/include/c++/15/cwchar + mdp:/usr/include/c++/15/cwctype + mdp:/usr/include/c++/15/debug/assertions.h + mdp:/usr/include/c++/15/debug/debug.h + mdp:/usr/include/c++/15/exception + mdp:/usr/include/c++/15/ext/aligned_buffer.h + mdp:/usr/include/c++/15/ext/alloc_traits.h + mdp:/usr/include/c++/15/ext/atomicity.h + mdp:/usr/include/c++/15/ext/concurrence.h + mdp:/usr/include/c++/15/ext/numeric_traits.h + mdp:/usr/include/c++/15/ext/string_conversions.h + mdp:/usr/include/c++/15/ext/type_traits.h + mdp:/usr/include/c++/15/filesystem + mdp:/usr/include/c++/15/format + mdp:/usr/include/c++/15/functional + mdp:/usr/include/c++/15/initializer_list + mdp:/usr/include/c++/15/iomanip + mdp:/usr/include/c++/15/ios + mdp:/usr/include/c++/15/iosfwd + mdp:/usr/include/c++/15/istream + mdp:/usr/include/c++/15/iterator + mdp:/usr/include/c++/15/limits + mdp:/usr/include/c++/15/list + mdp:/usr/include/c++/15/locale + mdp:/usr/include/c++/15/map + mdp:/usr/include/c++/15/memory + mdp:/usr/include/c++/15/new + mdp:/usr/include/c++/15/numeric + mdp:/usr/include/c++/15/optional + mdp:/usr/include/c++/15/ostream + mdp:/usr/include/c++/15/pstl/execution_defs.h + mdp:/usr/include/c++/15/pstl/glue_numeric_defs.h + mdp:/usr/include/c++/15/pstl/pstl_config.h + mdp:/usr/include/c++/15/ratio + mdp:/usr/include/c++/15/set + mdp:/usr/include/c++/15/sstream + mdp:/usr/include/c++/15/stdexcept + mdp:/usr/include/c++/15/streambuf + mdp:/usr/include/c++/15/string + mdp:/usr/include/c++/15/string_view + mdp:/usr/include/c++/15/system_error + mdp:/usr/include/c++/15/tr1/bessel_function.tcc + mdp:/usr/include/c++/15/tr1/beta_function.tcc + mdp:/usr/include/c++/15/tr1/ell_integral.tcc + mdp:/usr/include/c++/15/tr1/exp_integral.tcc + mdp:/usr/include/c++/15/tr1/gamma.tcc + mdp:/usr/include/c++/15/tr1/hypergeometric.tcc + mdp:/usr/include/c++/15/tr1/legendre_function.tcc + mdp:/usr/include/c++/15/tr1/modified_bessel_func.tcc + mdp:/usr/include/c++/15/tr1/poly_hermite.tcc + mdp:/usr/include/c++/15/tr1/poly_laguerre.tcc + mdp:/usr/include/c++/15/tr1/riemann_zeta.tcc + mdp:/usr/include/c++/15/tr1/special_function_util.h + mdp:/usr/include/c++/15/tuple + mdp:/usr/include/c++/15/type_traits + mdp:/usr/include/c++/15/typeinfo + mdp:/usr/include/c++/15/unordered_map + mdp:/usr/include/c++/15/unordered_set + mdp:/usr/include/c++/15/utility + mdp:/usr/include/c++/15/variant + mdp:/usr/include/c++/15/vector + mdp:/usr/include/c++/15/version + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/atomic_word.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++allocator.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++config.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++locale.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/cpu_defines.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/ctype_base.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/ctype_inline.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/error_constants.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/gthr-default.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/gthr.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/messages_members.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/os_defines.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/time_members.h + mdp:/usr/include/ctype.h + mdp:/usr/include/endian.h + mdp:/usr/include/errno.h + mdp:/usr/include/features-time64.h + mdp:/usr/include/features.h + mdp:/usr/include/gnu/stubs-64.h + mdp:/usr/include/gnu/stubs.h + mdp:/usr/include/libintl.h + mdp:/usr/include/limits.h + mdp:/usr/include/linux/close_range.h + mdp:/usr/include/linux/errno.h + mdp:/usr/include/linux/limits.h + mdp:/usr/include/linux/posix_types.h + mdp:/usr/include/linux/sched/types.h + mdp:/usr/include/linux/stddef.h + mdp:/usr/include/linux/types.h + mdp:/usr/include/locale.h + mdp:/usr/include/pthread.h + mdp:/usr/include/qt6/QtCore/QAbstractListModel + mdp:/usr/include/qt6/QtCore/QFileInfo + mdp:/usr/include/qt6/QtCore/QHash + mdp:/usr/include/qt6/QtCore/QObject + mdp:/usr/include/qt6/QtCore/QPair + mdp:/usr/include/qt6/QtCore/QString + mdp:/usr/include/qt6/QtCore/QStringList + mdp:/usr/include/qt6/QtCore/QVariant + mdp:/usr/include/qt6/QtCore/QVector + mdp:/usr/include/qt6/QtCore/q17memory.h + mdp:/usr/include/qt6/QtCore/q20functional.h + mdp:/usr/include/qt6/QtCore/q20iterator.h + mdp:/usr/include/qt6/QtCore/q20memory.h + mdp:/usr/include/qt6/QtCore/q20type_traits.h + mdp:/usr/include/qt6/QtCore/q20utility.h + mdp:/usr/include/qt6/QtCore/q23type_traits.h + mdp:/usr/include/qt6/QtCore/q23utility.h + mdp:/usr/include/qt6/QtCore/qabstractitemmodel.h + mdp:/usr/include/qt6/QtCore/qalgorithms.h + mdp:/usr/include/qt6/QtCore/qalloc.h + mdp:/usr/include/qt6/QtCore/qanystringview.h + mdp:/usr/include/qt6/QtCore/qarraydata.h + mdp:/usr/include/qt6/QtCore/qarraydataops.h + mdp:/usr/include/qt6/QtCore/qarraydatapointer.h + mdp:/usr/include/qt6/QtCore/qassert.h + mdp:/usr/include/qt6/QtCore/qatomic.h + mdp:/usr/include/qt6/QtCore/qatomic_cxx11.h + mdp:/usr/include/qt6/QtCore/qbasicatomic.h + mdp:/usr/include/qt6/QtCore/qbindingstorage.h + mdp:/usr/include/qt6/QtCore/qbytearray.h + mdp:/usr/include/qt6/QtCore/qbytearrayalgorithms.h + mdp:/usr/include/qt6/QtCore/qbytearraylist.h + mdp:/usr/include/qt6/QtCore/qbytearrayview.h + mdp:/usr/include/qt6/QtCore/qcalendar.h + mdp:/usr/include/qt6/QtCore/qchar.h + mdp:/usr/include/qt6/QtCore/qcompare.h + mdp:/usr/include/qt6/QtCore/qcompare_impl.h + mdp:/usr/include/qt6/QtCore/qcomparehelpers.h + mdp:/usr/include/qt6/QtCore/qcompilerdetection.h + mdp:/usr/include/qt6/QtCore/qconfig-64.h + mdp:/usr/include/qt6/QtCore/qconfig.h + mdp:/usr/include/qt6/QtCore/qconstructormacros.h + mdp:/usr/include/qt6/QtCore/qcontainerfwd.h + mdp:/usr/include/qt6/QtCore/qcontainerinfo.h + mdp:/usr/include/qt6/QtCore/qcontainertools_impl.h + mdp:/usr/include/qt6/QtCore/qcontiguouscache.h + mdp:/usr/include/qt6/QtCore/qdarwinhelpers.h + mdp:/usr/include/qt6/QtCore/qdatastream.h + mdp:/usr/include/qt6/QtCore/qdatetime.h + mdp:/usr/include/qt6/QtCore/qdebug.h + mdp:/usr/include/qt6/QtCore/qexceptionhandling.h + mdp:/usr/include/qt6/QtCore/qfile.h + mdp:/usr/include/qt6/QtCore/qfiledevice.h + mdp:/usr/include/qt6/QtCore/qfileinfo.h + mdp:/usr/include/qt6/QtCore/qflags.h + mdp:/usr/include/qt6/QtCore/qfloat16.h + mdp:/usr/include/qt6/QtCore/qforeach.h + mdp:/usr/include/qt6/QtCore/qfunctionaltools_impl.h + mdp:/usr/include/qt6/QtCore/qfunctionpointer.h + mdp:/usr/include/qt6/QtCore/qgenericatomic.h + mdp:/usr/include/qt6/QtCore/qglobal.h + mdp:/usr/include/qt6/QtCore/qglobalstatic.h + mdp:/usr/include/qt6/QtCore/qhash.h + mdp:/usr/include/qt6/QtCore/qhashfunctions.h + mdp:/usr/include/qt6/QtCore/qiodevice.h + mdp:/usr/include/qt6/QtCore/qiodevicebase.h + mdp:/usr/include/qt6/QtCore/qiterable.h + mdp:/usr/include/qt6/QtCore/qiterator.h + mdp:/usr/include/qt6/QtCore/qlatin1stringview.h + mdp:/usr/include/qt6/QtCore/qlist.h + mdp:/usr/include/qt6/QtCore/qlocale.h + mdp:/usr/include/qt6/QtCore/qlogging.h + mdp:/usr/include/qt6/QtCore/qmalloc.h + mdp:/usr/include/qt6/QtCore/qmap.h + mdp:/usr/include/qt6/QtCore/qmath.h + mdp:/usr/include/qt6/QtCore/qmetacontainer.h + mdp:/usr/include/qt6/QtCore/qmetaobject.h + mdp:/usr/include/qt6/QtCore/qmetatype.h + mdp:/usr/include/qt6/QtCore/qminmax.h + mdp:/usr/include/qt6/QtCore/qnamespace.h + mdp:/usr/include/qt6/QtCore/qnumeric.h + mdp:/usr/include/qt6/QtCore/qobject.h + mdp:/usr/include/qt6/QtCore/qobject_impl.h + mdp:/usr/include/qt6/QtCore/qobjectdefs.h + mdp:/usr/include/qt6/QtCore/qobjectdefs_impl.h + mdp:/usr/include/qt6/QtCore/qoverload.h + mdp:/usr/include/qt6/QtCore/qpair.h + mdp:/usr/include/qt6/QtCore/qprocessordetection.h + mdp:/usr/include/qt6/QtCore/qrefcount.h + mdp:/usr/include/qt6/QtCore/qscopedpointer.h + mdp:/usr/include/qt6/QtCore/qscopeguard.h + mdp:/usr/include/qt6/QtCore/qset.h + mdp:/usr/include/qt6/QtCore/qshareddata.h + mdp:/usr/include/qt6/QtCore/qshareddata_impl.h + mdp:/usr/include/qt6/QtCore/qsharedpointer.h + mdp:/usr/include/qt6/QtCore/qsharedpointer_impl.h + mdp:/usr/include/qt6/QtCore/qspan.h + mdp:/usr/include/qt6/QtCore/qstdlibdetection.h + mdp:/usr/include/qt6/QtCore/qstring.h + mdp:/usr/include/qt6/QtCore/qstringalgorithms.h + mdp:/usr/include/qt6/QtCore/qstringbuilder.h + mdp:/usr/include/qt6/QtCore/qstringconverter.h + mdp:/usr/include/qt6/QtCore/qstringconverter_base.h + mdp:/usr/include/qt6/QtCore/qstringfwd.h + mdp:/usr/include/qt6/QtCore/qstringlist.h + mdp:/usr/include/qt6/QtCore/qstringmatcher.h + mdp:/usr/include/qt6/QtCore/qstringtokenizer.h + mdp:/usr/include/qt6/QtCore/qstringview.h + mdp:/usr/include/qt6/QtCore/qswap.h + mdp:/usr/include/qt6/QtCore/qsysinfo.h + mdp:/usr/include/qt6/QtCore/qsystemdetection.h + mdp:/usr/include/qt6/QtCore/qtaggedpointer.h + mdp:/usr/include/qt6/QtCore/qtclasshelpermacros.h + mdp:/usr/include/qt6/QtCore/qtconfiginclude.h + mdp:/usr/include/qt6/QtCore/qtconfigmacros.h + mdp:/usr/include/qt6/QtCore/qtcore-config.h + mdp:/usr/include/qt6/QtCore/qtcoreexports.h + mdp:/usr/include/qt6/QtCore/qtcoreglobal.h + mdp:/usr/include/qt6/QtCore/qtdeprecationdefinitions.h + mdp:/usr/include/qt6/QtCore/qtdeprecationmarkers.h + mdp:/usr/include/qt6/QtCore/qtenvironmentvariables.h + mdp:/usr/include/qt6/QtCore/qtextstream.h + mdp:/usr/include/qt6/QtCore/qtformat_impl.h + mdp:/usr/include/qt6/QtCore/qtimezone.h + mdp:/usr/include/qt6/QtCore/qtmetamacros.h + mdp:/usr/include/qt6/QtCore/qtnoop.h + mdp:/usr/include/qt6/QtCore/qtpreprocessorsupport.h + mdp:/usr/include/qt6/QtCore/qtresource.h + mdp:/usr/include/qt6/QtCore/qttranslation.h + mdp:/usr/include/qt6/QtCore/qttypetraits.h + mdp:/usr/include/qt6/QtCore/qtversion.h + mdp:/usr/include/qt6/QtCore/qtversionchecks.h + mdp:/usr/include/qt6/QtCore/qtypeinfo.h + mdp:/usr/include/qt6/QtCore/qtypes.h + mdp:/usr/include/qt6/QtCore/qutf8stringview.h + mdp:/usr/include/qt6/QtCore/qvariant.h + mdp:/usr/include/qt6/QtCore/qvarlengtharray.h + mdp:/usr/include/qt6/QtCore/qvector.h + mdp:/usr/include/qt6/QtCore/qversiontagging.h + mdp:/usr/include/qt6/QtCore/qxptype_traits.h + mdp:/usr/include/qt6/QtCore/qyieldcpu.h + mdp:/usr/include/qt6/QtSql/QSqlDatabase + mdp:/usr/include/qt6/QtSql/QSqlError + mdp:/usr/include/qt6/QtSql/QSqlQuery + mdp:/usr/include/qt6/QtSql/qsqldatabase.h + mdp:/usr/include/qt6/QtSql/qsqlerror.h + mdp:/usr/include/qt6/QtSql/qsqlquery.h + mdp:/usr/include/qt6/QtSql/qtsql-config.h + mdp:/usr/include/qt6/QtSql/qtsqlexports.h + mdp:/usr/include/qt6/QtSql/qtsqlglobal.h + mdp:/usr/include/sched.h + mdp:/usr/include/stdc-predef.h + mdp:/usr/include/stdint.h + mdp:/usr/include/stdio.h + mdp:/usr/include/stdlib.h + mdp:/usr/include/string.h + mdp:/usr/include/strings.h + mdp:/usr/include/sys/cdefs.h + mdp:/usr/include/sys/select.h + mdp:/usr/include/sys/single_threaded.h + mdp:/usr/include/sys/syscall.h + mdp:/usr/include/sys/types.h + mdp:/usr/include/syscall.h + mdp:/usr/include/time.h + mdp:/usr/include/unistd.h + mdp:/usr/include/wchar.h + mdp:/usr/include/wctype.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stdarg.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stdbool.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stddef.h +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/annotation_layer.cpp +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/database_health_dialog.cpp +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/fm_views_ex.cpp +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/sequence_detector.cpp +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/asset_grid_view.cpp +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/everything_search_dialog.cpp +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/file_utils.h +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/project_import_worker.cpp +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/db.h + mmc:Q_OBJECT + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/kassetmanagerqt_autogen/moc_predefs.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/db.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/i_asset_database.h + mdp:/usr/include/alloca.h + mdp:/usr/include/asm-generic/bitsperlong.h + mdp:/usr/include/asm-generic/errno-base.h + mdp:/usr/include/asm-generic/errno.h + mdp:/usr/include/asm-generic/int-ll64.h + mdp:/usr/include/asm-generic/posix_types.h + mdp:/usr/include/asm-generic/types.h + mdp:/usr/include/asm/bitsperlong.h + mdp:/usr/include/asm/errno.h + mdp:/usr/include/asm/posix_types.h + mdp:/usr/include/asm/posix_types_64.h + mdp:/usr/include/asm/types.h + mdp:/usr/include/asm/unistd.h + mdp:/usr/include/asm/unistd_64.h + mdp:/usr/include/assert.h + mdp:/usr/include/bits/atomic_wide_counter.h + mdp:/usr/include/bits/byteswap.h + mdp:/usr/include/bits/confname.h + mdp:/usr/include/bits/cpu-set.h + mdp:/usr/include/bits/endian.h + mdp:/usr/include/bits/endianness.h + mdp:/usr/include/bits/environments.h + mdp:/usr/include/bits/errno.h + mdp:/usr/include/bits/floatn-common.h + mdp:/usr/include/bits/floatn.h + mdp:/usr/include/bits/getopt_core.h + mdp:/usr/include/bits/getopt_posix.h + mdp:/usr/include/bits/libc-header-start.h + mdp:/usr/include/bits/local_lim.h + mdp:/usr/include/bits/locale.h + mdp:/usr/include/bits/long-double.h + mdp:/usr/include/bits/posix1_lim.h + mdp:/usr/include/bits/posix2_lim.h + mdp:/usr/include/bits/posix_opt.h + mdp:/usr/include/bits/pthread_stack_min-dynamic.h + mdp:/usr/include/bits/pthreadtypes-arch.h + mdp:/usr/include/bits/pthreadtypes.h + mdp:/usr/include/bits/sched.h + mdp:/usr/include/bits/select.h + mdp:/usr/include/bits/setjmp.h + mdp:/usr/include/bits/stdint-intn.h + mdp:/usr/include/bits/stdint-least.h + mdp:/usr/include/bits/stdint-uintn.h + mdp:/usr/include/bits/stdio_lim.h + mdp:/usr/include/bits/stdlib-float.h + mdp:/usr/include/bits/struct_mutex.h + mdp:/usr/include/bits/struct_rwlock.h + mdp:/usr/include/bits/syscall.h + mdp:/usr/include/bits/thread-shared-types.h + mdp:/usr/include/bits/time.h + mdp:/usr/include/bits/time64.h + mdp:/usr/include/bits/timesize.h + mdp:/usr/include/bits/timex.h + mdp:/usr/include/bits/types.h + mdp:/usr/include/bits/types/FILE.h + mdp:/usr/include/bits/types/__FILE.h + mdp:/usr/include/bits/types/__fpos64_t.h + mdp:/usr/include/bits/types/__fpos_t.h + mdp:/usr/include/bits/types/__locale_t.h + mdp:/usr/include/bits/types/__mbstate_t.h + mdp:/usr/include/bits/types/__sigset_t.h + mdp:/usr/include/bits/types/clock_t.h + mdp:/usr/include/bits/types/clockid_t.h + mdp:/usr/include/bits/types/cookie_io_functions_t.h + mdp:/usr/include/bits/types/error_t.h + mdp:/usr/include/bits/types/locale_t.h + mdp:/usr/include/bits/types/mbstate_t.h + mdp:/usr/include/bits/types/sigset_t.h + mdp:/usr/include/bits/types/struct_FILE.h + mdp:/usr/include/bits/types/struct___jmp_buf_tag.h + mdp:/usr/include/bits/types/struct_itimerspec.h + mdp:/usr/include/bits/types/struct_sched_param.h + mdp:/usr/include/bits/types/struct_timespec.h + mdp:/usr/include/bits/types/struct_timeval.h + mdp:/usr/include/bits/types/struct_tm.h + mdp:/usr/include/bits/types/time_t.h + mdp:/usr/include/bits/types/timer_t.h + mdp:/usr/include/bits/types/wint_t.h + mdp:/usr/include/bits/typesizes.h + mdp:/usr/include/bits/uintn-identity.h + mdp:/usr/include/bits/uio_lim.h + mdp:/usr/include/bits/unistd_ext.h + mdp:/usr/include/bits/waitflags.h + mdp:/usr/include/bits/waitstatus.h + mdp:/usr/include/bits/wchar.h + mdp:/usr/include/bits/wctype-wchar.h + mdp:/usr/include/bits/wordsize.h + mdp:/usr/include/bits/xopen_lim.h + mdp:/usr/include/c++/15/algorithm + mdp:/usr/include/c++/15/array + mdp:/usr/include/c++/15/atomic + mdp:/usr/include/c++/15/backward/auto_ptr.h + mdp:/usr/include/c++/15/backward/binders.h + mdp:/usr/include/c++/15/bit + mdp:/usr/include/c++/15/bits/algorithmfwd.h + mdp:/usr/include/c++/15/bits/align.h + mdp:/usr/include/c++/15/bits/alloc_traits.h + mdp:/usr/include/c++/15/bits/allocated_ptr.h + mdp:/usr/include/c++/15/bits/allocator.h + mdp:/usr/include/c++/15/bits/atomic_base.h + mdp:/usr/include/c++/15/bits/atomic_lockfree_defines.h + mdp:/usr/include/c++/15/bits/atomic_wait.h + mdp:/usr/include/c++/15/bits/basic_ios.h + mdp:/usr/include/c++/15/bits/basic_ios.tcc + mdp:/usr/include/c++/15/bits/basic_string.h + mdp:/usr/include/c++/15/bits/basic_string.tcc + mdp:/usr/include/c++/15/bits/char_traits.h + mdp:/usr/include/c++/15/bits/charconv.h + mdp:/usr/include/c++/15/bits/chrono.h + mdp:/usr/include/c++/15/bits/chrono_io.h + mdp:/usr/include/c++/15/bits/codecvt.h + mdp:/usr/include/c++/15/bits/concept_check.h + mdp:/usr/include/c++/15/bits/cpp_type_traits.h + mdp:/usr/include/c++/15/bits/cxxabi_forced.h + mdp:/usr/include/c++/15/bits/cxxabi_init_exception.h + mdp:/usr/include/c++/15/bits/enable_special_members.h + mdp:/usr/include/c++/15/bits/erase_if.h + mdp:/usr/include/c++/15/bits/exception.h + mdp:/usr/include/c++/15/bits/exception_defines.h + mdp:/usr/include/c++/15/bits/exception_ptr.h + mdp:/usr/include/c++/15/bits/functexcept.h + mdp:/usr/include/c++/15/bits/functional_hash.h + mdp:/usr/include/c++/15/bits/hash_bytes.h + mdp:/usr/include/c++/15/bits/hashtable.h + mdp:/usr/include/c++/15/bits/hashtable_policy.h + mdp:/usr/include/c++/15/bits/invoke.h + mdp:/usr/include/c++/15/bits/ios_base.h + mdp:/usr/include/c++/15/bits/istream.tcc + mdp:/usr/include/c++/15/bits/iterator_concepts.h + mdp:/usr/include/c++/15/bits/list.tcc + mdp:/usr/include/c++/15/bits/locale_classes.h + mdp:/usr/include/c++/15/bits/locale_classes.tcc + mdp:/usr/include/c++/15/bits/locale_conv.h + mdp:/usr/include/c++/15/bits/locale_facets.h + mdp:/usr/include/c++/15/bits/locale_facets.tcc + mdp:/usr/include/c++/15/bits/locale_facets_nonio.h + mdp:/usr/include/c++/15/bits/locale_facets_nonio.tcc + mdp:/usr/include/c++/15/bits/localefwd.h + mdp:/usr/include/c++/15/bits/max_size_type.h + mdp:/usr/include/c++/15/bits/memory_resource.h + mdp:/usr/include/c++/15/bits/memoryfwd.h + mdp:/usr/include/c++/15/bits/move.h + mdp:/usr/include/c++/15/bits/nested_exception.h + mdp:/usr/include/c++/15/bits/new_allocator.h + mdp:/usr/include/c++/15/bits/node_handle.h + mdp:/usr/include/c++/15/bits/ostream.h + mdp:/usr/include/c++/15/bits/ostream.tcc + mdp:/usr/include/c++/15/bits/ostream_insert.h + mdp:/usr/include/c++/15/bits/parse_numbers.h + mdp:/usr/include/c++/15/bits/postypes.h + mdp:/usr/include/c++/15/bits/predefined_ops.h + mdp:/usr/include/c++/15/bits/ptr_traits.h + mdp:/usr/include/c++/15/bits/quoted_string.h + mdp:/usr/include/c++/15/bits/range_access.h + mdp:/usr/include/c++/15/bits/ranges_algo.h + mdp:/usr/include/c++/15/bits/ranges_algobase.h + mdp:/usr/include/c++/15/bits/ranges_base.h + mdp:/usr/include/c++/15/bits/ranges_cmp.h + mdp:/usr/include/c++/15/bits/ranges_uninitialized.h + mdp:/usr/include/c++/15/bits/ranges_util.h + mdp:/usr/include/c++/15/bits/refwrap.h + mdp:/usr/include/c++/15/bits/requires_hosted.h + mdp:/usr/include/c++/15/bits/shared_ptr.h + mdp:/usr/include/c++/15/bits/shared_ptr_atomic.h + mdp:/usr/include/c++/15/bits/shared_ptr_base.h + mdp:/usr/include/c++/15/bits/specfun.h + mdp:/usr/include/c++/15/bits/sstream.tcc + mdp:/usr/include/c++/15/bits/std_abs.h + mdp:/usr/include/c++/15/bits/std_function.h + mdp:/usr/include/c++/15/bits/std_mutex.h + mdp:/usr/include/c++/15/bits/stl_algo.h + mdp:/usr/include/c++/15/bits/stl_algobase.h + mdp:/usr/include/c++/15/bits/stl_bvector.h + mdp:/usr/include/c++/15/bits/stl_construct.h + mdp:/usr/include/c++/15/bits/stl_function.h + mdp:/usr/include/c++/15/bits/stl_heap.h + mdp:/usr/include/c++/15/bits/stl_iterator.h + mdp:/usr/include/c++/15/bits/stl_iterator_base_funcs.h + mdp:/usr/include/c++/15/bits/stl_iterator_base_types.h + mdp:/usr/include/c++/15/bits/stl_list.h + mdp:/usr/include/c++/15/bits/stl_map.h + mdp:/usr/include/c++/15/bits/stl_multimap.h + mdp:/usr/include/c++/15/bits/stl_multiset.h + mdp:/usr/include/c++/15/bits/stl_numeric.h + mdp:/usr/include/c++/15/bits/stl_pair.h + mdp:/usr/include/c++/15/bits/stl_raw_storage_iter.h + mdp:/usr/include/c++/15/bits/stl_relops.h + mdp:/usr/include/c++/15/bits/stl_set.h + mdp:/usr/include/c++/15/bits/stl_tempbuf.h + mdp:/usr/include/c++/15/bits/stl_tree.h + mdp:/usr/include/c++/15/bits/stl_uninitialized.h + mdp:/usr/include/c++/15/bits/stl_vector.h + mdp:/usr/include/c++/15/bits/stream_iterator.h + mdp:/usr/include/c++/15/bits/streambuf.tcc + mdp:/usr/include/c++/15/bits/streambuf_iterator.h + mdp:/usr/include/c++/15/bits/string_view.tcc + mdp:/usr/include/c++/15/bits/stringfwd.h + mdp:/usr/include/c++/15/bits/uniform_int_dist.h + mdp:/usr/include/c++/15/bits/unique_ptr.h + mdp:/usr/include/c++/15/bits/unordered_map.h + mdp:/usr/include/c++/15/bits/unordered_set.h + mdp:/usr/include/c++/15/bits/uses_allocator.h + mdp:/usr/include/c++/15/bits/uses_allocator_args.h + mdp:/usr/include/c++/15/bits/utility.h + mdp:/usr/include/c++/15/bits/vector.tcc + mdp:/usr/include/c++/15/bits/version.h + mdp:/usr/include/c++/15/cassert + mdp:/usr/include/c++/15/cctype + mdp:/usr/include/c++/15/cerrno + mdp:/usr/include/c++/15/charconv + mdp:/usr/include/c++/15/chrono + mdp:/usr/include/c++/15/climits + mdp:/usr/include/c++/15/clocale + mdp:/usr/include/c++/15/cmath + mdp:/usr/include/c++/15/compare + mdp:/usr/include/c++/15/concepts + mdp:/usr/include/c++/15/cstddef + mdp:/usr/include/c++/15/cstdint + mdp:/usr/include/c++/15/cstdio + mdp:/usr/include/c++/15/cstdlib + mdp:/usr/include/c++/15/cstring + mdp:/usr/include/c++/15/ctime + mdp:/usr/include/c++/15/cwchar + mdp:/usr/include/c++/15/cwctype + mdp:/usr/include/c++/15/debug/assertions.h + mdp:/usr/include/c++/15/debug/debug.h + mdp:/usr/include/c++/15/exception + mdp:/usr/include/c++/15/ext/aligned_buffer.h + mdp:/usr/include/c++/15/ext/alloc_traits.h + mdp:/usr/include/c++/15/ext/atomicity.h + mdp:/usr/include/c++/15/ext/concurrence.h + mdp:/usr/include/c++/15/ext/numeric_traits.h + mdp:/usr/include/c++/15/ext/string_conversions.h + mdp:/usr/include/c++/15/ext/type_traits.h + mdp:/usr/include/c++/15/filesystem + mdp:/usr/include/c++/15/format + mdp:/usr/include/c++/15/functional + mdp:/usr/include/c++/15/initializer_list + mdp:/usr/include/c++/15/iomanip + mdp:/usr/include/c++/15/ios + mdp:/usr/include/c++/15/iosfwd + mdp:/usr/include/c++/15/istream + mdp:/usr/include/c++/15/iterator + mdp:/usr/include/c++/15/limits + mdp:/usr/include/c++/15/list + mdp:/usr/include/c++/15/locale + mdp:/usr/include/c++/15/map + mdp:/usr/include/c++/15/memory + mdp:/usr/include/c++/15/new + mdp:/usr/include/c++/15/numeric + mdp:/usr/include/c++/15/optional + mdp:/usr/include/c++/15/ostream + mdp:/usr/include/c++/15/pstl/execution_defs.h + mdp:/usr/include/c++/15/pstl/glue_numeric_defs.h + mdp:/usr/include/c++/15/pstl/pstl_config.h + mdp:/usr/include/c++/15/ratio + mdp:/usr/include/c++/15/set + mdp:/usr/include/c++/15/sstream + mdp:/usr/include/c++/15/stdexcept + mdp:/usr/include/c++/15/streambuf + mdp:/usr/include/c++/15/string + mdp:/usr/include/c++/15/string_view + mdp:/usr/include/c++/15/system_error + mdp:/usr/include/c++/15/tr1/bessel_function.tcc + mdp:/usr/include/c++/15/tr1/beta_function.tcc + mdp:/usr/include/c++/15/tr1/ell_integral.tcc + mdp:/usr/include/c++/15/tr1/exp_integral.tcc + mdp:/usr/include/c++/15/tr1/gamma.tcc + mdp:/usr/include/c++/15/tr1/hypergeometric.tcc + mdp:/usr/include/c++/15/tr1/legendre_function.tcc + mdp:/usr/include/c++/15/tr1/modified_bessel_func.tcc + mdp:/usr/include/c++/15/tr1/poly_hermite.tcc + mdp:/usr/include/c++/15/tr1/poly_laguerre.tcc + mdp:/usr/include/c++/15/tr1/riemann_zeta.tcc + mdp:/usr/include/c++/15/tr1/special_function_util.h + mdp:/usr/include/c++/15/tuple + mdp:/usr/include/c++/15/type_traits + mdp:/usr/include/c++/15/typeinfo + mdp:/usr/include/c++/15/unordered_map + mdp:/usr/include/c++/15/unordered_set + mdp:/usr/include/c++/15/utility + mdp:/usr/include/c++/15/variant + mdp:/usr/include/c++/15/vector + mdp:/usr/include/c++/15/version + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/atomic_word.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++allocator.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++config.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++locale.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/cpu_defines.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/ctype_base.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/ctype_inline.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/error_constants.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/gthr-default.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/gthr.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/messages_members.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/os_defines.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/time_members.h + mdp:/usr/include/ctype.h + mdp:/usr/include/endian.h + mdp:/usr/include/errno.h + mdp:/usr/include/features-time64.h + mdp:/usr/include/features.h + mdp:/usr/include/gnu/stubs-64.h + mdp:/usr/include/gnu/stubs.h + mdp:/usr/include/libintl.h + mdp:/usr/include/limits.h + mdp:/usr/include/linux/close_range.h + mdp:/usr/include/linux/errno.h + mdp:/usr/include/linux/limits.h + mdp:/usr/include/linux/posix_types.h + mdp:/usr/include/linux/sched/types.h + mdp:/usr/include/linux/stddef.h + mdp:/usr/include/linux/types.h + mdp:/usr/include/locale.h + mdp:/usr/include/pthread.h + mdp:/usr/include/qt6/QtCore/QFileInfo + mdp:/usr/include/qt6/QtCore/QHash + mdp:/usr/include/qt6/QtCore/QObject + mdp:/usr/include/qt6/QtCore/QPair + mdp:/usr/include/qt6/QtCore/QString + mdp:/usr/include/qt6/QtCore/QStringList + mdp:/usr/include/qt6/QtCore/QVariant + mdp:/usr/include/qt6/QtCore/QVector + mdp:/usr/include/qt6/QtCore/q17memory.h + mdp:/usr/include/qt6/QtCore/q20functional.h + mdp:/usr/include/qt6/QtCore/q20iterator.h + mdp:/usr/include/qt6/QtCore/q20memory.h + mdp:/usr/include/qt6/QtCore/q20type_traits.h + mdp:/usr/include/qt6/QtCore/q20utility.h + mdp:/usr/include/qt6/QtCore/q23type_traits.h + mdp:/usr/include/qt6/QtCore/q23utility.h + mdp:/usr/include/qt6/QtCore/qalgorithms.h + mdp:/usr/include/qt6/QtCore/qalloc.h + mdp:/usr/include/qt6/QtCore/qanystringview.h + mdp:/usr/include/qt6/QtCore/qarraydata.h + mdp:/usr/include/qt6/QtCore/qarraydataops.h + mdp:/usr/include/qt6/QtCore/qarraydatapointer.h + mdp:/usr/include/qt6/QtCore/qassert.h + mdp:/usr/include/qt6/QtCore/qatomic.h + mdp:/usr/include/qt6/QtCore/qatomic_cxx11.h + mdp:/usr/include/qt6/QtCore/qbasicatomic.h + mdp:/usr/include/qt6/QtCore/qbindingstorage.h + mdp:/usr/include/qt6/QtCore/qbytearray.h + mdp:/usr/include/qt6/QtCore/qbytearrayalgorithms.h + mdp:/usr/include/qt6/QtCore/qbytearraylist.h + mdp:/usr/include/qt6/QtCore/qbytearrayview.h + mdp:/usr/include/qt6/QtCore/qcalendar.h + mdp:/usr/include/qt6/QtCore/qchar.h + mdp:/usr/include/qt6/QtCore/qcompare.h + mdp:/usr/include/qt6/QtCore/qcompare_impl.h + mdp:/usr/include/qt6/QtCore/qcomparehelpers.h + mdp:/usr/include/qt6/QtCore/qcompilerdetection.h + mdp:/usr/include/qt6/QtCore/qconfig-64.h + mdp:/usr/include/qt6/QtCore/qconfig.h + mdp:/usr/include/qt6/QtCore/qconstructormacros.h + mdp:/usr/include/qt6/QtCore/qcontainerfwd.h + mdp:/usr/include/qt6/QtCore/qcontainerinfo.h + mdp:/usr/include/qt6/QtCore/qcontainertools_impl.h + mdp:/usr/include/qt6/QtCore/qcontiguouscache.h + mdp:/usr/include/qt6/QtCore/qdarwinhelpers.h + mdp:/usr/include/qt6/QtCore/qdatastream.h + mdp:/usr/include/qt6/QtCore/qdatetime.h + mdp:/usr/include/qt6/QtCore/qdebug.h + mdp:/usr/include/qt6/QtCore/qexceptionhandling.h + mdp:/usr/include/qt6/QtCore/qfile.h + mdp:/usr/include/qt6/QtCore/qfiledevice.h + mdp:/usr/include/qt6/QtCore/qfileinfo.h + mdp:/usr/include/qt6/QtCore/qflags.h + mdp:/usr/include/qt6/QtCore/qfloat16.h + mdp:/usr/include/qt6/QtCore/qforeach.h + mdp:/usr/include/qt6/QtCore/qfunctionaltools_impl.h + mdp:/usr/include/qt6/QtCore/qfunctionpointer.h + mdp:/usr/include/qt6/QtCore/qgenericatomic.h + mdp:/usr/include/qt6/QtCore/qglobal.h + mdp:/usr/include/qt6/QtCore/qglobalstatic.h + mdp:/usr/include/qt6/QtCore/qhash.h + mdp:/usr/include/qt6/QtCore/qhashfunctions.h + mdp:/usr/include/qt6/QtCore/qiodevice.h + mdp:/usr/include/qt6/QtCore/qiodevicebase.h + mdp:/usr/include/qt6/QtCore/qiterable.h + mdp:/usr/include/qt6/QtCore/qiterator.h + mdp:/usr/include/qt6/QtCore/qlatin1stringview.h + mdp:/usr/include/qt6/QtCore/qlist.h + mdp:/usr/include/qt6/QtCore/qlocale.h + mdp:/usr/include/qt6/QtCore/qlogging.h + mdp:/usr/include/qt6/QtCore/qmalloc.h + mdp:/usr/include/qt6/QtCore/qmap.h + mdp:/usr/include/qt6/QtCore/qmath.h + mdp:/usr/include/qt6/QtCore/qmetacontainer.h + mdp:/usr/include/qt6/QtCore/qmetaobject.h + mdp:/usr/include/qt6/QtCore/qmetatype.h + mdp:/usr/include/qt6/QtCore/qminmax.h + mdp:/usr/include/qt6/QtCore/qnamespace.h + mdp:/usr/include/qt6/QtCore/qnumeric.h + mdp:/usr/include/qt6/QtCore/qobject.h + mdp:/usr/include/qt6/QtCore/qobject_impl.h + mdp:/usr/include/qt6/QtCore/qobjectdefs.h + mdp:/usr/include/qt6/QtCore/qobjectdefs_impl.h + mdp:/usr/include/qt6/QtCore/qoverload.h + mdp:/usr/include/qt6/QtCore/qpair.h + mdp:/usr/include/qt6/QtCore/qprocessordetection.h + mdp:/usr/include/qt6/QtCore/qrefcount.h + mdp:/usr/include/qt6/QtCore/qscopedpointer.h + mdp:/usr/include/qt6/QtCore/qscopeguard.h + mdp:/usr/include/qt6/QtCore/qset.h + mdp:/usr/include/qt6/QtCore/qshareddata.h + mdp:/usr/include/qt6/QtCore/qshareddata_impl.h + mdp:/usr/include/qt6/QtCore/qsharedpointer.h + mdp:/usr/include/qt6/QtCore/qsharedpointer_impl.h + mdp:/usr/include/qt6/QtCore/qspan.h + mdp:/usr/include/qt6/QtCore/qstdlibdetection.h + mdp:/usr/include/qt6/QtCore/qstring.h + mdp:/usr/include/qt6/QtCore/qstringalgorithms.h + mdp:/usr/include/qt6/QtCore/qstringbuilder.h + mdp:/usr/include/qt6/QtCore/qstringconverter.h + mdp:/usr/include/qt6/QtCore/qstringconverter_base.h + mdp:/usr/include/qt6/QtCore/qstringfwd.h + mdp:/usr/include/qt6/QtCore/qstringlist.h + mdp:/usr/include/qt6/QtCore/qstringmatcher.h + mdp:/usr/include/qt6/QtCore/qstringtokenizer.h + mdp:/usr/include/qt6/QtCore/qstringview.h + mdp:/usr/include/qt6/QtCore/qswap.h + mdp:/usr/include/qt6/QtCore/qsysinfo.h + mdp:/usr/include/qt6/QtCore/qsystemdetection.h + mdp:/usr/include/qt6/QtCore/qtaggedpointer.h + mdp:/usr/include/qt6/QtCore/qtclasshelpermacros.h + mdp:/usr/include/qt6/QtCore/qtconfiginclude.h + mdp:/usr/include/qt6/QtCore/qtconfigmacros.h + mdp:/usr/include/qt6/QtCore/qtcore-config.h + mdp:/usr/include/qt6/QtCore/qtcoreexports.h + mdp:/usr/include/qt6/QtCore/qtcoreglobal.h + mdp:/usr/include/qt6/QtCore/qtdeprecationdefinitions.h + mdp:/usr/include/qt6/QtCore/qtdeprecationmarkers.h + mdp:/usr/include/qt6/QtCore/qtenvironmentvariables.h + mdp:/usr/include/qt6/QtCore/qtextstream.h + mdp:/usr/include/qt6/QtCore/qtformat_impl.h + mdp:/usr/include/qt6/QtCore/qtimezone.h + mdp:/usr/include/qt6/QtCore/qtmetamacros.h + mdp:/usr/include/qt6/QtCore/qtnoop.h + mdp:/usr/include/qt6/QtCore/qtpreprocessorsupport.h + mdp:/usr/include/qt6/QtCore/qtresource.h + mdp:/usr/include/qt6/QtCore/qttranslation.h + mdp:/usr/include/qt6/QtCore/qttypetraits.h + mdp:/usr/include/qt6/QtCore/qtversion.h + mdp:/usr/include/qt6/QtCore/qtversionchecks.h + mdp:/usr/include/qt6/QtCore/qtypeinfo.h + mdp:/usr/include/qt6/QtCore/qtypes.h + mdp:/usr/include/qt6/QtCore/qutf8stringview.h + mdp:/usr/include/qt6/QtCore/qvariant.h + mdp:/usr/include/qt6/QtCore/qvarlengtharray.h + mdp:/usr/include/qt6/QtCore/qvector.h + mdp:/usr/include/qt6/QtCore/qversiontagging.h + mdp:/usr/include/qt6/QtCore/qxptype_traits.h + mdp:/usr/include/qt6/QtCore/qyieldcpu.h + mdp:/usr/include/qt6/QtSql/QSqlDatabase + mdp:/usr/include/qt6/QtSql/QSqlError + mdp:/usr/include/qt6/QtSql/QSqlQuery + mdp:/usr/include/qt6/QtSql/qsqldatabase.h + mdp:/usr/include/qt6/QtSql/qsqlerror.h + mdp:/usr/include/qt6/QtSql/qsqlquery.h + mdp:/usr/include/qt6/QtSql/qtsql-config.h + mdp:/usr/include/qt6/QtSql/qtsqlexports.h + mdp:/usr/include/qt6/QtSql/qtsqlglobal.h + mdp:/usr/include/sched.h + mdp:/usr/include/stdc-predef.h + mdp:/usr/include/stdint.h + mdp:/usr/include/stdio.h + mdp:/usr/include/stdlib.h + mdp:/usr/include/string.h + mdp:/usr/include/strings.h + mdp:/usr/include/sys/cdefs.h + mdp:/usr/include/sys/select.h + mdp:/usr/include/sys/single_threaded.h + mdp:/usr/include/sys/syscall.h + mdp:/usr/include/sys/types.h + mdp:/usr/include/syscall.h + mdp:/usr/include/time.h + mdp:/usr/include/unistd.h + mdp:/usr/include/wchar.h + mdp:/usr/include/wctype.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stdarg.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stdbool.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stddef.h +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/fm_item_delegate.h + mmc:Q_OBJECT + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/kassetmanagerqt_autogen/moc_predefs.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/fm_item_delegate.h + mdp:/usr/include/alloca.h + mdp:/usr/include/asm-generic/bitsperlong.h + mdp:/usr/include/asm-generic/errno-base.h + mdp:/usr/include/asm-generic/errno.h + mdp:/usr/include/asm-generic/int-ll64.h + mdp:/usr/include/asm-generic/posix_types.h + mdp:/usr/include/asm-generic/types.h + mdp:/usr/include/asm/bitsperlong.h + mdp:/usr/include/asm/errno.h + mdp:/usr/include/asm/posix_types.h + mdp:/usr/include/asm/posix_types_64.h + mdp:/usr/include/asm/types.h + mdp:/usr/include/asm/unistd.h + mdp:/usr/include/asm/unistd_64.h + mdp:/usr/include/assert.h + mdp:/usr/include/bits/atomic_wide_counter.h + mdp:/usr/include/bits/byteswap.h + mdp:/usr/include/bits/confname.h + mdp:/usr/include/bits/cpu-set.h + mdp:/usr/include/bits/endian.h + mdp:/usr/include/bits/endianness.h + mdp:/usr/include/bits/environments.h + mdp:/usr/include/bits/errno.h + mdp:/usr/include/bits/floatn-common.h + mdp:/usr/include/bits/floatn.h + mdp:/usr/include/bits/getopt_core.h + mdp:/usr/include/bits/getopt_posix.h + mdp:/usr/include/bits/libc-header-start.h + mdp:/usr/include/bits/local_lim.h + mdp:/usr/include/bits/locale.h + mdp:/usr/include/bits/long-double.h + mdp:/usr/include/bits/posix1_lim.h + mdp:/usr/include/bits/posix2_lim.h + mdp:/usr/include/bits/posix_opt.h + mdp:/usr/include/bits/pthread_stack_min-dynamic.h + mdp:/usr/include/bits/pthreadtypes-arch.h + mdp:/usr/include/bits/pthreadtypes.h + mdp:/usr/include/bits/sched.h + mdp:/usr/include/bits/select.h + mdp:/usr/include/bits/setjmp.h + mdp:/usr/include/bits/stdint-intn.h + mdp:/usr/include/bits/stdint-least.h + mdp:/usr/include/bits/stdint-uintn.h + mdp:/usr/include/bits/stdio_lim.h + mdp:/usr/include/bits/stdlib-float.h + mdp:/usr/include/bits/struct_mutex.h + mdp:/usr/include/bits/struct_rwlock.h + mdp:/usr/include/bits/syscall.h + mdp:/usr/include/bits/thread-shared-types.h + mdp:/usr/include/bits/time.h + mdp:/usr/include/bits/time64.h + mdp:/usr/include/bits/timesize.h + mdp:/usr/include/bits/timex.h + mdp:/usr/include/bits/types.h + mdp:/usr/include/bits/types/FILE.h + mdp:/usr/include/bits/types/__FILE.h + mdp:/usr/include/bits/types/__fpos64_t.h + mdp:/usr/include/bits/types/__fpos_t.h + mdp:/usr/include/bits/types/__locale_t.h + mdp:/usr/include/bits/types/__mbstate_t.h + mdp:/usr/include/bits/types/__sigset_t.h + mdp:/usr/include/bits/types/clock_t.h + mdp:/usr/include/bits/types/clockid_t.h + mdp:/usr/include/bits/types/cookie_io_functions_t.h + mdp:/usr/include/bits/types/error_t.h + mdp:/usr/include/bits/types/locale_t.h + mdp:/usr/include/bits/types/mbstate_t.h + mdp:/usr/include/bits/types/sigset_t.h + mdp:/usr/include/bits/types/struct_FILE.h + mdp:/usr/include/bits/types/struct___jmp_buf_tag.h + mdp:/usr/include/bits/types/struct_itimerspec.h + mdp:/usr/include/bits/types/struct_sched_param.h + mdp:/usr/include/bits/types/struct_timespec.h + mdp:/usr/include/bits/types/struct_timeval.h + mdp:/usr/include/bits/types/struct_tm.h + mdp:/usr/include/bits/types/time_t.h + mdp:/usr/include/bits/types/timer_t.h + mdp:/usr/include/bits/types/wint_t.h + mdp:/usr/include/bits/typesizes.h + mdp:/usr/include/bits/uintn-identity.h + mdp:/usr/include/bits/uio_lim.h + mdp:/usr/include/bits/unistd_ext.h + mdp:/usr/include/bits/waitflags.h + mdp:/usr/include/bits/waitstatus.h + mdp:/usr/include/bits/wchar.h + mdp:/usr/include/bits/wctype-wchar.h + mdp:/usr/include/bits/wordsize.h + mdp:/usr/include/bits/xopen_lim.h + mdp:/usr/include/c++/15/algorithm + mdp:/usr/include/c++/15/array + mdp:/usr/include/c++/15/atomic + mdp:/usr/include/c++/15/backward/auto_ptr.h + mdp:/usr/include/c++/15/backward/binders.h + mdp:/usr/include/c++/15/bit + mdp:/usr/include/c++/15/bits/algorithmfwd.h + mdp:/usr/include/c++/15/bits/align.h + mdp:/usr/include/c++/15/bits/alloc_traits.h + mdp:/usr/include/c++/15/bits/allocated_ptr.h + mdp:/usr/include/c++/15/bits/allocator.h + mdp:/usr/include/c++/15/bits/atomic_base.h + mdp:/usr/include/c++/15/bits/atomic_lockfree_defines.h + mdp:/usr/include/c++/15/bits/atomic_wait.h + mdp:/usr/include/c++/15/bits/basic_ios.h + mdp:/usr/include/c++/15/bits/basic_ios.tcc + mdp:/usr/include/c++/15/bits/basic_string.h + mdp:/usr/include/c++/15/bits/basic_string.tcc + mdp:/usr/include/c++/15/bits/char_traits.h + mdp:/usr/include/c++/15/bits/charconv.h + mdp:/usr/include/c++/15/bits/chrono.h + mdp:/usr/include/c++/15/bits/chrono_io.h + mdp:/usr/include/c++/15/bits/codecvt.h + mdp:/usr/include/c++/15/bits/concept_check.h + mdp:/usr/include/c++/15/bits/cpp_type_traits.h + mdp:/usr/include/c++/15/bits/cxxabi_forced.h + mdp:/usr/include/c++/15/bits/cxxabi_init_exception.h + mdp:/usr/include/c++/15/bits/enable_special_members.h + mdp:/usr/include/c++/15/bits/erase_if.h + mdp:/usr/include/c++/15/bits/exception.h + mdp:/usr/include/c++/15/bits/exception_defines.h + mdp:/usr/include/c++/15/bits/exception_ptr.h + mdp:/usr/include/c++/15/bits/functexcept.h + mdp:/usr/include/c++/15/bits/functional_hash.h + mdp:/usr/include/c++/15/bits/hash_bytes.h + mdp:/usr/include/c++/15/bits/hashtable.h + mdp:/usr/include/c++/15/bits/hashtable_policy.h + mdp:/usr/include/c++/15/bits/invoke.h + mdp:/usr/include/c++/15/bits/ios_base.h + mdp:/usr/include/c++/15/bits/istream.tcc + mdp:/usr/include/c++/15/bits/iterator_concepts.h + mdp:/usr/include/c++/15/bits/list.tcc + mdp:/usr/include/c++/15/bits/locale_classes.h + mdp:/usr/include/c++/15/bits/locale_classes.tcc + mdp:/usr/include/c++/15/bits/locale_conv.h + mdp:/usr/include/c++/15/bits/locale_facets.h + mdp:/usr/include/c++/15/bits/locale_facets.tcc + mdp:/usr/include/c++/15/bits/locale_facets_nonio.h + mdp:/usr/include/c++/15/bits/locale_facets_nonio.tcc + mdp:/usr/include/c++/15/bits/localefwd.h + mdp:/usr/include/c++/15/bits/max_size_type.h + mdp:/usr/include/c++/15/bits/memory_resource.h + mdp:/usr/include/c++/15/bits/memoryfwd.h + mdp:/usr/include/c++/15/bits/move.h + mdp:/usr/include/c++/15/bits/nested_exception.h + mdp:/usr/include/c++/15/bits/new_allocator.h + mdp:/usr/include/c++/15/bits/node_handle.h + mdp:/usr/include/c++/15/bits/ostream.h + mdp:/usr/include/c++/15/bits/ostream.tcc + mdp:/usr/include/c++/15/bits/ostream_insert.h + mdp:/usr/include/c++/15/bits/parse_numbers.h + mdp:/usr/include/c++/15/bits/postypes.h + mdp:/usr/include/c++/15/bits/predefined_ops.h + mdp:/usr/include/c++/15/bits/ptr_traits.h + mdp:/usr/include/c++/15/bits/quoted_string.h + mdp:/usr/include/c++/15/bits/range_access.h + mdp:/usr/include/c++/15/bits/ranges_algo.h + mdp:/usr/include/c++/15/bits/ranges_algobase.h + mdp:/usr/include/c++/15/bits/ranges_base.h + mdp:/usr/include/c++/15/bits/ranges_cmp.h + mdp:/usr/include/c++/15/bits/ranges_uninitialized.h + mdp:/usr/include/c++/15/bits/ranges_util.h + mdp:/usr/include/c++/15/bits/refwrap.h + mdp:/usr/include/c++/15/bits/requires_hosted.h + mdp:/usr/include/c++/15/bits/shared_ptr.h + mdp:/usr/include/c++/15/bits/shared_ptr_atomic.h + mdp:/usr/include/c++/15/bits/shared_ptr_base.h + mdp:/usr/include/c++/15/bits/specfun.h + mdp:/usr/include/c++/15/bits/sstream.tcc + mdp:/usr/include/c++/15/bits/std_abs.h + mdp:/usr/include/c++/15/bits/std_function.h + mdp:/usr/include/c++/15/bits/std_mutex.h + mdp:/usr/include/c++/15/bits/stl_algo.h + mdp:/usr/include/c++/15/bits/stl_algobase.h + mdp:/usr/include/c++/15/bits/stl_bvector.h + mdp:/usr/include/c++/15/bits/stl_construct.h + mdp:/usr/include/c++/15/bits/stl_function.h + mdp:/usr/include/c++/15/bits/stl_heap.h + mdp:/usr/include/c++/15/bits/stl_iterator.h + mdp:/usr/include/c++/15/bits/stl_iterator_base_funcs.h + mdp:/usr/include/c++/15/bits/stl_iterator_base_types.h + mdp:/usr/include/c++/15/bits/stl_list.h + mdp:/usr/include/c++/15/bits/stl_map.h + mdp:/usr/include/c++/15/bits/stl_multimap.h + mdp:/usr/include/c++/15/bits/stl_multiset.h + mdp:/usr/include/c++/15/bits/stl_numeric.h + mdp:/usr/include/c++/15/bits/stl_pair.h + mdp:/usr/include/c++/15/bits/stl_raw_storage_iter.h + mdp:/usr/include/c++/15/bits/stl_relops.h + mdp:/usr/include/c++/15/bits/stl_set.h + mdp:/usr/include/c++/15/bits/stl_tempbuf.h + mdp:/usr/include/c++/15/bits/stl_tree.h + mdp:/usr/include/c++/15/bits/stl_uninitialized.h + mdp:/usr/include/c++/15/bits/stl_vector.h + mdp:/usr/include/c++/15/bits/stream_iterator.h + mdp:/usr/include/c++/15/bits/streambuf.tcc + mdp:/usr/include/c++/15/bits/streambuf_iterator.h + mdp:/usr/include/c++/15/bits/string_view.tcc + mdp:/usr/include/c++/15/bits/stringfwd.h + mdp:/usr/include/c++/15/bits/uniform_int_dist.h + mdp:/usr/include/c++/15/bits/unique_ptr.h + mdp:/usr/include/c++/15/bits/unordered_map.h + mdp:/usr/include/c++/15/bits/unordered_set.h + mdp:/usr/include/c++/15/bits/uses_allocator.h + mdp:/usr/include/c++/15/bits/uses_allocator_args.h + mdp:/usr/include/c++/15/bits/utility.h + mdp:/usr/include/c++/15/bits/vector.tcc + mdp:/usr/include/c++/15/bits/version.h + mdp:/usr/include/c++/15/cassert + mdp:/usr/include/c++/15/cctype + mdp:/usr/include/c++/15/cerrno + mdp:/usr/include/c++/15/charconv + mdp:/usr/include/c++/15/chrono + mdp:/usr/include/c++/15/climits + mdp:/usr/include/c++/15/clocale + mdp:/usr/include/c++/15/cmath + mdp:/usr/include/c++/15/compare + mdp:/usr/include/c++/15/concepts + mdp:/usr/include/c++/15/cstddef + mdp:/usr/include/c++/15/cstdint + mdp:/usr/include/c++/15/cstdio + mdp:/usr/include/c++/15/cstdlib + mdp:/usr/include/c++/15/cstring + mdp:/usr/include/c++/15/ctime + mdp:/usr/include/c++/15/cwchar + mdp:/usr/include/c++/15/cwctype + mdp:/usr/include/c++/15/debug/assertions.h + mdp:/usr/include/c++/15/debug/debug.h + mdp:/usr/include/c++/15/exception + mdp:/usr/include/c++/15/ext/aligned_buffer.h + mdp:/usr/include/c++/15/ext/alloc_traits.h + mdp:/usr/include/c++/15/ext/atomicity.h + mdp:/usr/include/c++/15/ext/concurrence.h + mdp:/usr/include/c++/15/ext/numeric_traits.h + mdp:/usr/include/c++/15/ext/string_conversions.h + mdp:/usr/include/c++/15/ext/type_traits.h + mdp:/usr/include/c++/15/format + mdp:/usr/include/c++/15/functional + mdp:/usr/include/c++/15/initializer_list + mdp:/usr/include/c++/15/iomanip + mdp:/usr/include/c++/15/ios + mdp:/usr/include/c++/15/iosfwd + mdp:/usr/include/c++/15/istream + mdp:/usr/include/c++/15/iterator + mdp:/usr/include/c++/15/limits + mdp:/usr/include/c++/15/list + mdp:/usr/include/c++/15/locale + mdp:/usr/include/c++/15/map + mdp:/usr/include/c++/15/memory + mdp:/usr/include/c++/15/new + mdp:/usr/include/c++/15/numeric + mdp:/usr/include/c++/15/optional + mdp:/usr/include/c++/15/ostream + mdp:/usr/include/c++/15/pstl/execution_defs.h + mdp:/usr/include/c++/15/pstl/glue_numeric_defs.h + mdp:/usr/include/c++/15/pstl/pstl_config.h + mdp:/usr/include/c++/15/ratio + mdp:/usr/include/c++/15/set + mdp:/usr/include/c++/15/sstream + mdp:/usr/include/c++/15/stdexcept + mdp:/usr/include/c++/15/streambuf + mdp:/usr/include/c++/15/string + mdp:/usr/include/c++/15/string_view + mdp:/usr/include/c++/15/system_error + mdp:/usr/include/c++/15/tr1/bessel_function.tcc + mdp:/usr/include/c++/15/tr1/beta_function.tcc + mdp:/usr/include/c++/15/tr1/ell_integral.tcc + mdp:/usr/include/c++/15/tr1/exp_integral.tcc + mdp:/usr/include/c++/15/tr1/gamma.tcc + mdp:/usr/include/c++/15/tr1/hypergeometric.tcc + mdp:/usr/include/c++/15/tr1/legendre_function.tcc + mdp:/usr/include/c++/15/tr1/modified_bessel_func.tcc + mdp:/usr/include/c++/15/tr1/poly_hermite.tcc + mdp:/usr/include/c++/15/tr1/poly_laguerre.tcc + mdp:/usr/include/c++/15/tr1/riemann_zeta.tcc + mdp:/usr/include/c++/15/tr1/special_function_util.h + mdp:/usr/include/c++/15/tuple + mdp:/usr/include/c++/15/type_traits + mdp:/usr/include/c++/15/typeinfo + mdp:/usr/include/c++/15/unordered_map + mdp:/usr/include/c++/15/unordered_set + mdp:/usr/include/c++/15/utility + mdp:/usr/include/c++/15/variant + mdp:/usr/include/c++/15/vector + mdp:/usr/include/c++/15/version + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/atomic_word.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++allocator.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++config.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++locale.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/cpu_defines.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/ctype_base.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/ctype_inline.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/error_constants.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/gthr-default.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/gthr.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/messages_members.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/os_defines.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/time_members.h + mdp:/usr/include/ctype.h + mdp:/usr/include/endian.h + mdp:/usr/include/errno.h + mdp:/usr/include/features-time64.h + mdp:/usr/include/features.h + mdp:/usr/include/gnu/stubs-64.h + mdp:/usr/include/gnu/stubs.h + mdp:/usr/include/libintl.h + mdp:/usr/include/limits.h + mdp:/usr/include/linux/close_range.h + mdp:/usr/include/linux/errno.h + mdp:/usr/include/linux/limits.h + mdp:/usr/include/linux/posix_types.h + mdp:/usr/include/linux/sched/types.h + mdp:/usr/include/linux/stddef.h + mdp:/usr/include/linux/types.h + mdp:/usr/include/locale.h + mdp:/usr/include/pthread.h + mdp:/usr/include/qt6/QtCore/QModelIndex + mdp:/usr/include/qt6/QtCore/q17memory.h + mdp:/usr/include/qt6/QtCore/q20functional.h + mdp:/usr/include/qt6/QtCore/q20iterator.h + mdp:/usr/include/qt6/QtCore/q20memory.h + mdp:/usr/include/qt6/QtCore/q20type_traits.h + mdp:/usr/include/qt6/QtCore/q20utility.h + mdp:/usr/include/qt6/QtCore/q23type_traits.h + mdp:/usr/include/qt6/QtCore/q23utility.h + mdp:/usr/include/qt6/QtCore/qabstractitemmodel.h + mdp:/usr/include/qt6/QtCore/qalgorithms.h + mdp:/usr/include/qt6/QtCore/qalloc.h + mdp:/usr/include/qt6/QtCore/qanystringview.h + mdp:/usr/include/qt6/QtCore/qarraydata.h + mdp:/usr/include/qt6/QtCore/qarraydataops.h + mdp:/usr/include/qt6/QtCore/qarraydatapointer.h + mdp:/usr/include/qt6/QtCore/qassert.h + mdp:/usr/include/qt6/QtCore/qatomic.h + mdp:/usr/include/qt6/QtCore/qatomic_cxx11.h + mdp:/usr/include/qt6/QtCore/qbasicatomic.h + mdp:/usr/include/qt6/QtCore/qbindingstorage.h + mdp:/usr/include/qt6/QtCore/qbytearray.h + mdp:/usr/include/qt6/QtCore/qbytearrayalgorithms.h + mdp:/usr/include/qt6/QtCore/qbytearraylist.h + mdp:/usr/include/qt6/QtCore/qbytearrayview.h + mdp:/usr/include/qt6/QtCore/qchar.h + mdp:/usr/include/qt6/QtCore/qcheckedint_impl.h + mdp:/usr/include/qt6/QtCore/qcompare.h + mdp:/usr/include/qt6/QtCore/qcompare_impl.h + mdp:/usr/include/qt6/QtCore/qcomparehelpers.h + mdp:/usr/include/qt6/QtCore/qcompilerdetection.h + mdp:/usr/include/qt6/QtCore/qconfig-64.h + mdp:/usr/include/qt6/QtCore/qconfig.h + mdp:/usr/include/qt6/QtCore/qconstructormacros.h + mdp:/usr/include/qt6/QtCore/qcontainerfwd.h + mdp:/usr/include/qt6/QtCore/qcontainerinfo.h + mdp:/usr/include/qt6/QtCore/qcontainertools_impl.h + mdp:/usr/include/qt6/QtCore/qcontiguouscache.h + mdp:/usr/include/qt6/QtCore/qdarwinhelpers.h + mdp:/usr/include/qt6/QtCore/qdatastream.h + mdp:/usr/include/qt6/QtCore/qdebug.h + mdp:/usr/include/qt6/QtCore/qendian.h + mdp:/usr/include/qt6/QtCore/qexceptionhandling.h + mdp:/usr/include/qt6/QtCore/qflags.h + mdp:/usr/include/qt6/QtCore/qfloat16.h + mdp:/usr/include/qt6/QtCore/qforeach.h + mdp:/usr/include/qt6/QtCore/qfunctionaltools_impl.h + mdp:/usr/include/qt6/QtCore/qfunctionpointer.h + mdp:/usr/include/qt6/QtCore/qgenericatomic.h + mdp:/usr/include/qt6/QtCore/qglobal.h + mdp:/usr/include/qt6/QtCore/qglobalstatic.h + mdp:/usr/include/qt6/QtCore/qhash.h + mdp:/usr/include/qt6/QtCore/qhashfunctions.h + mdp:/usr/include/qt6/QtCore/qiodevicebase.h + mdp:/usr/include/qt6/QtCore/qiterable.h + mdp:/usr/include/qt6/QtCore/qiterator.h + mdp:/usr/include/qt6/QtCore/qlatin1stringview.h + mdp:/usr/include/qt6/QtCore/qline.h + mdp:/usr/include/qt6/QtCore/qlist.h + mdp:/usr/include/qt6/QtCore/qlocale.h + mdp:/usr/include/qt6/QtCore/qlogging.h + mdp:/usr/include/qt6/QtCore/qmalloc.h + mdp:/usr/include/qt6/QtCore/qmap.h + mdp:/usr/include/qt6/QtCore/qmargins.h + mdp:/usr/include/qt6/QtCore/qmath.h + mdp:/usr/include/qt6/QtCore/qmetacontainer.h + mdp:/usr/include/qt6/QtCore/qmetatype.h + mdp:/usr/include/qt6/QtCore/qminmax.h + mdp:/usr/include/qt6/QtCore/qnamespace.h + mdp:/usr/include/qt6/QtCore/qnumeric.h + mdp:/usr/include/qt6/QtCore/qobject.h + mdp:/usr/include/qt6/QtCore/qobject_impl.h + mdp:/usr/include/qt6/QtCore/qobjectdefs.h + mdp:/usr/include/qt6/QtCore/qobjectdefs_impl.h + mdp:/usr/include/qt6/QtCore/qoverload.h + mdp:/usr/include/qt6/QtCore/qpair.h + mdp:/usr/include/qt6/QtCore/qpoint.h + mdp:/usr/include/qt6/QtCore/qprocessordetection.h + mdp:/usr/include/qt6/QtCore/qrect.h + mdp:/usr/include/qt6/QtCore/qrefcount.h + mdp:/usr/include/qt6/QtCore/qregularexpression.h + mdp:/usr/include/qt6/QtCore/qscopedpointer.h + mdp:/usr/include/qt6/QtCore/qscopeguard.h + mdp:/usr/include/qt6/QtCore/qset.h + mdp:/usr/include/qt6/QtCore/qshareddata.h + mdp:/usr/include/qt6/QtCore/qshareddata_impl.h + mdp:/usr/include/qt6/QtCore/qsharedpointer.h + mdp:/usr/include/qt6/QtCore/qsharedpointer_impl.h + mdp:/usr/include/qt6/QtCore/qsize.h + mdp:/usr/include/qt6/QtCore/qspan.h + mdp:/usr/include/qt6/QtCore/qstdlibdetection.h + mdp:/usr/include/qt6/QtCore/qstring.h + mdp:/usr/include/qt6/QtCore/qstringalgorithms.h + mdp:/usr/include/qt6/QtCore/qstringbuilder.h + mdp:/usr/include/qt6/QtCore/qstringconverter.h + mdp:/usr/include/qt6/QtCore/qstringconverter_base.h + mdp:/usr/include/qt6/QtCore/qstringfwd.h + mdp:/usr/include/qt6/QtCore/qstringlist.h + mdp:/usr/include/qt6/QtCore/qstringmatcher.h + mdp:/usr/include/qt6/QtCore/qstringtokenizer.h + mdp:/usr/include/qt6/QtCore/qstringview.h + mdp:/usr/include/qt6/QtCore/qswap.h + mdp:/usr/include/qt6/QtCore/qsysinfo.h + mdp:/usr/include/qt6/QtCore/qsystemdetection.h + mdp:/usr/include/qt6/QtCore/qtaggedpointer.h + mdp:/usr/include/qt6/QtCore/qtclasshelpermacros.h + mdp:/usr/include/qt6/QtCore/qtconfiginclude.h + mdp:/usr/include/qt6/QtCore/qtconfigmacros.h + mdp:/usr/include/qt6/QtCore/qtcore-config.h + mdp:/usr/include/qt6/QtCore/qtcoreexports.h + mdp:/usr/include/qt6/QtCore/qtcoreglobal.h + mdp:/usr/include/qt6/QtCore/qtdeprecationdefinitions.h + mdp:/usr/include/qt6/QtCore/qtdeprecationmarkers.h + mdp:/usr/include/qt6/QtCore/qtenvironmentvariables.h + mdp:/usr/include/qt6/QtCore/qtextstream.h + mdp:/usr/include/qt6/QtCore/qtformat_impl.h + mdp:/usr/include/qt6/QtCore/qtmetamacros.h + mdp:/usr/include/qt6/QtCore/qtnoop.h + mdp:/usr/include/qt6/QtCore/qtpreprocessorsupport.h + mdp:/usr/include/qt6/QtCore/qtresource.h + mdp:/usr/include/qt6/QtCore/qttranslation.h + mdp:/usr/include/qt6/QtCore/qttypetraits.h + mdp:/usr/include/qt6/QtCore/qtversion.h + mdp:/usr/include/qt6/QtCore/qtversionchecks.h + mdp:/usr/include/qt6/QtCore/qtypeinfo.h + mdp:/usr/include/qt6/QtCore/qtypes.h + mdp:/usr/include/qt6/QtCore/qutf8stringview.h + mdp:/usr/include/qt6/QtCore/qvariant.h + mdp:/usr/include/qt6/QtCore/qvarlengtharray.h + mdp:/usr/include/qt6/QtCore/qversiontagging.h + mdp:/usr/include/qt6/QtCore/qxptype_traits.h + mdp:/usr/include/qt6/QtCore/qyieldcpu.h + mdp:/usr/include/qt6/QtGui/QPainter + mdp:/usr/include/qt6/QtGui/qaction.h + mdp:/usr/include/qt6/QtGui/qbitmap.h + mdp:/usr/include/qt6/QtGui/qbrush.h + mdp:/usr/include/qt6/QtGui/qcolor.h + mdp:/usr/include/qt6/QtGui/qcursor.h + mdp:/usr/include/qt6/QtGui/qfont.h + mdp:/usr/include/qt6/QtGui/qfontinfo.h + mdp:/usr/include/qt6/QtGui/qfontmetrics.h + mdp:/usr/include/qt6/QtGui/qfontvariableaxis.h + mdp:/usr/include/qt6/QtGui/qicon.h + mdp:/usr/include/qt6/QtGui/qimage.h + mdp:/usr/include/qt6/QtGui/qkeysequence.h + mdp:/usr/include/qt6/QtGui/qpaintdevice.h + mdp:/usr/include/qt6/QtGui/qpainter.h + mdp:/usr/include/qt6/QtGui/qpalette.h + mdp:/usr/include/qt6/QtGui/qpen.h + mdp:/usr/include/qt6/QtGui/qpixelformat.h + mdp:/usr/include/qt6/QtGui/qpixmap.h + mdp:/usr/include/qt6/QtGui/qpolygon.h + mdp:/usr/include/qt6/QtGui/qregion.h + mdp:/usr/include/qt6/QtGui/qrgb.h + mdp:/usr/include/qt6/QtGui/qrgba64.h + mdp:/usr/include/qt6/QtGui/qtextoption.h + mdp:/usr/include/qt6/QtGui/qtgui-config.h + mdp:/usr/include/qt6/QtGui/qtguiexports.h + mdp:/usr/include/qt6/QtGui/qtguiglobal.h + mdp:/usr/include/qt6/QtGui/qtransform.h + mdp:/usr/include/qt6/QtGui/qvalidator.h + mdp:/usr/include/qt6/QtGui/qwindowdefs.h + mdp:/usr/include/qt6/QtWidgets/QStyleOptionViewItem + mdp:/usr/include/qt6/QtWidgets/QStyledItemDelegate + mdp:/usr/include/qt6/QtWidgets/qabstractitemdelegate.h + mdp:/usr/include/qt6/QtWidgets/qabstractslider.h + mdp:/usr/include/qt6/QtWidgets/qabstractspinbox.h + mdp:/usr/include/qt6/QtWidgets/qframe.h + mdp:/usr/include/qt6/QtWidgets/qrubberband.h + mdp:/usr/include/qt6/QtWidgets/qsizepolicy.h + mdp:/usr/include/qt6/QtWidgets/qslider.h + mdp:/usr/include/qt6/QtWidgets/qstyle.h + mdp:/usr/include/qt6/QtWidgets/qstyleditemdelegate.h + mdp:/usr/include/qt6/QtWidgets/qstyleoption.h + mdp:/usr/include/qt6/QtWidgets/qtabbar.h + mdp:/usr/include/qt6/QtWidgets/qtabwidget.h + mdp:/usr/include/qt6/QtWidgets/qtwidgets-config.h + mdp:/usr/include/qt6/QtWidgets/qtwidgetsexports.h + mdp:/usr/include/qt6/QtWidgets/qtwidgetsglobal.h + mdp:/usr/include/qt6/QtWidgets/qwidget.h + mdp:/usr/include/sched.h + mdp:/usr/include/stdc-predef.h + mdp:/usr/include/stdint.h + mdp:/usr/include/stdio.h + mdp:/usr/include/stdlib.h + mdp:/usr/include/string.h + mdp:/usr/include/strings.h + mdp:/usr/include/sys/cdefs.h + mdp:/usr/include/sys/select.h + mdp:/usr/include/sys/single_threaded.h + mdp:/usr/include/sys/syscall.h + mdp:/usr/include/sys/types.h + mdp:/usr/include/syscall.h + mdp:/usr/include/time.h + mdp:/usr/include/unistd.h + mdp:/usr/include/wchar.h + mdp:/usr/include/wctype.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stdarg.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stdbool.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stddef.h +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/sequence_detector.h +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/project_item_delegate.cpp +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/oiio_image_loader.h +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/mainwindow.cpp +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/star_rating_widget.h + mmc:Q_OBJECT + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/kassetmanagerqt_autogen/moc_predefs.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/star_rating_widget.h + mdp:/usr/include/alloca.h + mdp:/usr/include/asm-generic/bitsperlong.h + mdp:/usr/include/asm-generic/errno-base.h + mdp:/usr/include/asm-generic/errno.h + mdp:/usr/include/asm-generic/int-ll64.h + mdp:/usr/include/asm-generic/posix_types.h + mdp:/usr/include/asm-generic/types.h + mdp:/usr/include/asm/bitsperlong.h + mdp:/usr/include/asm/errno.h + mdp:/usr/include/asm/posix_types.h + mdp:/usr/include/asm/posix_types_64.h + mdp:/usr/include/asm/types.h + mdp:/usr/include/asm/unistd.h + mdp:/usr/include/asm/unistd_64.h + mdp:/usr/include/assert.h + mdp:/usr/include/bits/atomic_wide_counter.h + mdp:/usr/include/bits/byteswap.h + mdp:/usr/include/bits/confname.h + mdp:/usr/include/bits/cpu-set.h + mdp:/usr/include/bits/endian.h + mdp:/usr/include/bits/endianness.h + mdp:/usr/include/bits/environments.h + mdp:/usr/include/bits/errno.h + mdp:/usr/include/bits/floatn-common.h + mdp:/usr/include/bits/floatn.h + mdp:/usr/include/bits/getopt_core.h + mdp:/usr/include/bits/getopt_posix.h + mdp:/usr/include/bits/libc-header-start.h + mdp:/usr/include/bits/local_lim.h + mdp:/usr/include/bits/locale.h + mdp:/usr/include/bits/long-double.h + mdp:/usr/include/bits/posix1_lim.h + mdp:/usr/include/bits/posix2_lim.h + mdp:/usr/include/bits/posix_opt.h + mdp:/usr/include/bits/pthread_stack_min-dynamic.h + mdp:/usr/include/bits/pthreadtypes-arch.h + mdp:/usr/include/bits/pthreadtypes.h + mdp:/usr/include/bits/sched.h + mdp:/usr/include/bits/select.h + mdp:/usr/include/bits/setjmp.h + mdp:/usr/include/bits/stdint-intn.h + mdp:/usr/include/bits/stdint-least.h + mdp:/usr/include/bits/stdint-uintn.h + mdp:/usr/include/bits/stdio_lim.h + mdp:/usr/include/bits/stdlib-float.h + mdp:/usr/include/bits/struct_mutex.h + mdp:/usr/include/bits/struct_rwlock.h + mdp:/usr/include/bits/syscall.h + mdp:/usr/include/bits/thread-shared-types.h + mdp:/usr/include/bits/time.h + mdp:/usr/include/bits/time64.h + mdp:/usr/include/bits/timesize.h + mdp:/usr/include/bits/timex.h + mdp:/usr/include/bits/types.h + mdp:/usr/include/bits/types/FILE.h + mdp:/usr/include/bits/types/__FILE.h + mdp:/usr/include/bits/types/__fpos64_t.h + mdp:/usr/include/bits/types/__fpos_t.h + mdp:/usr/include/bits/types/__locale_t.h + mdp:/usr/include/bits/types/__mbstate_t.h + mdp:/usr/include/bits/types/__sigset_t.h + mdp:/usr/include/bits/types/clock_t.h + mdp:/usr/include/bits/types/clockid_t.h + mdp:/usr/include/bits/types/cookie_io_functions_t.h + mdp:/usr/include/bits/types/error_t.h + mdp:/usr/include/bits/types/locale_t.h + mdp:/usr/include/bits/types/mbstate_t.h + mdp:/usr/include/bits/types/sigset_t.h + mdp:/usr/include/bits/types/struct_FILE.h + mdp:/usr/include/bits/types/struct___jmp_buf_tag.h + mdp:/usr/include/bits/types/struct_itimerspec.h + mdp:/usr/include/bits/types/struct_sched_param.h + mdp:/usr/include/bits/types/struct_timespec.h + mdp:/usr/include/bits/types/struct_timeval.h + mdp:/usr/include/bits/types/struct_tm.h + mdp:/usr/include/bits/types/time_t.h + mdp:/usr/include/bits/types/timer_t.h + mdp:/usr/include/bits/types/wint_t.h + mdp:/usr/include/bits/typesizes.h + mdp:/usr/include/bits/uintn-identity.h + mdp:/usr/include/bits/uio_lim.h + mdp:/usr/include/bits/unistd_ext.h + mdp:/usr/include/bits/waitflags.h + mdp:/usr/include/bits/waitstatus.h + mdp:/usr/include/bits/wchar.h + mdp:/usr/include/bits/wctype-wchar.h + mdp:/usr/include/bits/wordsize.h + mdp:/usr/include/bits/xopen_lim.h + mdp:/usr/include/c++/15/algorithm + mdp:/usr/include/c++/15/array + mdp:/usr/include/c++/15/atomic + mdp:/usr/include/c++/15/backward/auto_ptr.h + mdp:/usr/include/c++/15/backward/binders.h + mdp:/usr/include/c++/15/bit + mdp:/usr/include/c++/15/bits/algorithmfwd.h + mdp:/usr/include/c++/15/bits/align.h + mdp:/usr/include/c++/15/bits/alloc_traits.h + mdp:/usr/include/c++/15/bits/allocated_ptr.h + mdp:/usr/include/c++/15/bits/allocator.h + mdp:/usr/include/c++/15/bits/atomic_base.h + mdp:/usr/include/c++/15/bits/atomic_lockfree_defines.h + mdp:/usr/include/c++/15/bits/atomic_wait.h + mdp:/usr/include/c++/15/bits/basic_ios.h + mdp:/usr/include/c++/15/bits/basic_ios.tcc + mdp:/usr/include/c++/15/bits/basic_string.h + mdp:/usr/include/c++/15/bits/basic_string.tcc + mdp:/usr/include/c++/15/bits/char_traits.h + mdp:/usr/include/c++/15/bits/charconv.h + mdp:/usr/include/c++/15/bits/chrono.h + mdp:/usr/include/c++/15/bits/chrono_io.h + mdp:/usr/include/c++/15/bits/codecvt.h + mdp:/usr/include/c++/15/bits/concept_check.h + mdp:/usr/include/c++/15/bits/cpp_type_traits.h + mdp:/usr/include/c++/15/bits/cxxabi_forced.h + mdp:/usr/include/c++/15/bits/cxxabi_init_exception.h + mdp:/usr/include/c++/15/bits/enable_special_members.h + mdp:/usr/include/c++/15/bits/erase_if.h + mdp:/usr/include/c++/15/bits/exception.h + mdp:/usr/include/c++/15/bits/exception_defines.h + mdp:/usr/include/c++/15/bits/exception_ptr.h + mdp:/usr/include/c++/15/bits/functexcept.h + mdp:/usr/include/c++/15/bits/functional_hash.h + mdp:/usr/include/c++/15/bits/hash_bytes.h + mdp:/usr/include/c++/15/bits/hashtable.h + mdp:/usr/include/c++/15/bits/hashtable_policy.h + mdp:/usr/include/c++/15/bits/invoke.h + mdp:/usr/include/c++/15/bits/ios_base.h + mdp:/usr/include/c++/15/bits/istream.tcc + mdp:/usr/include/c++/15/bits/iterator_concepts.h + mdp:/usr/include/c++/15/bits/list.tcc + mdp:/usr/include/c++/15/bits/locale_classes.h + mdp:/usr/include/c++/15/bits/locale_classes.tcc + mdp:/usr/include/c++/15/bits/locale_conv.h + mdp:/usr/include/c++/15/bits/locale_facets.h + mdp:/usr/include/c++/15/bits/locale_facets.tcc + mdp:/usr/include/c++/15/bits/locale_facets_nonio.h + mdp:/usr/include/c++/15/bits/locale_facets_nonio.tcc + mdp:/usr/include/c++/15/bits/localefwd.h + mdp:/usr/include/c++/15/bits/max_size_type.h + mdp:/usr/include/c++/15/bits/memory_resource.h + mdp:/usr/include/c++/15/bits/memoryfwd.h + mdp:/usr/include/c++/15/bits/move.h + mdp:/usr/include/c++/15/bits/nested_exception.h + mdp:/usr/include/c++/15/bits/new_allocator.h + mdp:/usr/include/c++/15/bits/node_handle.h + mdp:/usr/include/c++/15/bits/ostream.h + mdp:/usr/include/c++/15/bits/ostream.tcc + mdp:/usr/include/c++/15/bits/ostream_insert.h + mdp:/usr/include/c++/15/bits/parse_numbers.h + mdp:/usr/include/c++/15/bits/postypes.h + mdp:/usr/include/c++/15/bits/predefined_ops.h + mdp:/usr/include/c++/15/bits/ptr_traits.h + mdp:/usr/include/c++/15/bits/quoted_string.h + mdp:/usr/include/c++/15/bits/range_access.h + mdp:/usr/include/c++/15/bits/ranges_algo.h + mdp:/usr/include/c++/15/bits/ranges_algobase.h + mdp:/usr/include/c++/15/bits/ranges_base.h + mdp:/usr/include/c++/15/bits/ranges_cmp.h + mdp:/usr/include/c++/15/bits/ranges_uninitialized.h + mdp:/usr/include/c++/15/bits/ranges_util.h + mdp:/usr/include/c++/15/bits/refwrap.h + mdp:/usr/include/c++/15/bits/requires_hosted.h + mdp:/usr/include/c++/15/bits/shared_ptr.h + mdp:/usr/include/c++/15/bits/shared_ptr_atomic.h + mdp:/usr/include/c++/15/bits/shared_ptr_base.h + mdp:/usr/include/c++/15/bits/specfun.h + mdp:/usr/include/c++/15/bits/sstream.tcc + mdp:/usr/include/c++/15/bits/std_abs.h + mdp:/usr/include/c++/15/bits/std_function.h + mdp:/usr/include/c++/15/bits/std_mutex.h + mdp:/usr/include/c++/15/bits/stl_algo.h + mdp:/usr/include/c++/15/bits/stl_algobase.h + mdp:/usr/include/c++/15/bits/stl_bvector.h + mdp:/usr/include/c++/15/bits/stl_construct.h + mdp:/usr/include/c++/15/bits/stl_function.h + mdp:/usr/include/c++/15/bits/stl_heap.h + mdp:/usr/include/c++/15/bits/stl_iterator.h + mdp:/usr/include/c++/15/bits/stl_iterator_base_funcs.h + mdp:/usr/include/c++/15/bits/stl_iterator_base_types.h + mdp:/usr/include/c++/15/bits/stl_list.h + mdp:/usr/include/c++/15/bits/stl_map.h + mdp:/usr/include/c++/15/bits/stl_multimap.h + mdp:/usr/include/c++/15/bits/stl_multiset.h + mdp:/usr/include/c++/15/bits/stl_numeric.h + mdp:/usr/include/c++/15/bits/stl_pair.h + mdp:/usr/include/c++/15/bits/stl_raw_storage_iter.h + mdp:/usr/include/c++/15/bits/stl_relops.h + mdp:/usr/include/c++/15/bits/stl_set.h + mdp:/usr/include/c++/15/bits/stl_tempbuf.h + mdp:/usr/include/c++/15/bits/stl_tree.h + mdp:/usr/include/c++/15/bits/stl_uninitialized.h + mdp:/usr/include/c++/15/bits/stl_vector.h + mdp:/usr/include/c++/15/bits/stream_iterator.h + mdp:/usr/include/c++/15/bits/streambuf.tcc + mdp:/usr/include/c++/15/bits/streambuf_iterator.h + mdp:/usr/include/c++/15/bits/string_view.tcc + mdp:/usr/include/c++/15/bits/stringfwd.h + mdp:/usr/include/c++/15/bits/uniform_int_dist.h + mdp:/usr/include/c++/15/bits/unique_ptr.h + mdp:/usr/include/c++/15/bits/unordered_map.h + mdp:/usr/include/c++/15/bits/unordered_set.h + mdp:/usr/include/c++/15/bits/uses_allocator.h + mdp:/usr/include/c++/15/bits/uses_allocator_args.h + mdp:/usr/include/c++/15/bits/utility.h + mdp:/usr/include/c++/15/bits/vector.tcc + mdp:/usr/include/c++/15/bits/version.h + mdp:/usr/include/c++/15/cassert + mdp:/usr/include/c++/15/cctype + mdp:/usr/include/c++/15/cerrno + mdp:/usr/include/c++/15/charconv + mdp:/usr/include/c++/15/chrono + mdp:/usr/include/c++/15/climits + mdp:/usr/include/c++/15/clocale + mdp:/usr/include/c++/15/cmath + mdp:/usr/include/c++/15/compare + mdp:/usr/include/c++/15/concepts + mdp:/usr/include/c++/15/cstddef + mdp:/usr/include/c++/15/cstdint + mdp:/usr/include/c++/15/cstdio + mdp:/usr/include/c++/15/cstdlib + mdp:/usr/include/c++/15/cstring + mdp:/usr/include/c++/15/ctime + mdp:/usr/include/c++/15/cwchar + mdp:/usr/include/c++/15/cwctype + mdp:/usr/include/c++/15/debug/assertions.h + mdp:/usr/include/c++/15/debug/debug.h + mdp:/usr/include/c++/15/exception + mdp:/usr/include/c++/15/ext/aligned_buffer.h + mdp:/usr/include/c++/15/ext/alloc_traits.h + mdp:/usr/include/c++/15/ext/atomicity.h + mdp:/usr/include/c++/15/ext/concurrence.h + mdp:/usr/include/c++/15/ext/numeric_traits.h + mdp:/usr/include/c++/15/ext/string_conversions.h + mdp:/usr/include/c++/15/ext/type_traits.h + mdp:/usr/include/c++/15/format + mdp:/usr/include/c++/15/functional + mdp:/usr/include/c++/15/initializer_list + mdp:/usr/include/c++/15/iomanip + mdp:/usr/include/c++/15/ios + mdp:/usr/include/c++/15/iosfwd + mdp:/usr/include/c++/15/istream + mdp:/usr/include/c++/15/iterator + mdp:/usr/include/c++/15/limits + mdp:/usr/include/c++/15/list + mdp:/usr/include/c++/15/locale + mdp:/usr/include/c++/15/map + mdp:/usr/include/c++/15/memory + mdp:/usr/include/c++/15/new + mdp:/usr/include/c++/15/numeric + mdp:/usr/include/c++/15/optional + mdp:/usr/include/c++/15/ostream + mdp:/usr/include/c++/15/pstl/execution_defs.h + mdp:/usr/include/c++/15/pstl/glue_numeric_defs.h + mdp:/usr/include/c++/15/pstl/pstl_config.h + mdp:/usr/include/c++/15/ratio + mdp:/usr/include/c++/15/set + mdp:/usr/include/c++/15/sstream + mdp:/usr/include/c++/15/stdexcept + mdp:/usr/include/c++/15/streambuf + mdp:/usr/include/c++/15/string + mdp:/usr/include/c++/15/string_view + mdp:/usr/include/c++/15/system_error + mdp:/usr/include/c++/15/tr1/bessel_function.tcc + mdp:/usr/include/c++/15/tr1/beta_function.tcc + mdp:/usr/include/c++/15/tr1/ell_integral.tcc + mdp:/usr/include/c++/15/tr1/exp_integral.tcc + mdp:/usr/include/c++/15/tr1/gamma.tcc + mdp:/usr/include/c++/15/tr1/hypergeometric.tcc + mdp:/usr/include/c++/15/tr1/legendre_function.tcc + mdp:/usr/include/c++/15/tr1/modified_bessel_func.tcc + mdp:/usr/include/c++/15/tr1/poly_hermite.tcc + mdp:/usr/include/c++/15/tr1/poly_laguerre.tcc + mdp:/usr/include/c++/15/tr1/riemann_zeta.tcc + mdp:/usr/include/c++/15/tr1/special_function_util.h + mdp:/usr/include/c++/15/tuple + mdp:/usr/include/c++/15/type_traits + mdp:/usr/include/c++/15/typeinfo + mdp:/usr/include/c++/15/unordered_map + mdp:/usr/include/c++/15/unordered_set + mdp:/usr/include/c++/15/utility + mdp:/usr/include/c++/15/variant + mdp:/usr/include/c++/15/vector + mdp:/usr/include/c++/15/version + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/atomic_word.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++allocator.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++config.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++locale.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/cpu_defines.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/ctype_base.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/ctype_inline.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/error_constants.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/gthr-default.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/gthr.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/messages_members.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/os_defines.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/time_members.h + mdp:/usr/include/ctype.h + mdp:/usr/include/endian.h + mdp:/usr/include/errno.h + mdp:/usr/include/features-time64.h + mdp:/usr/include/features.h + mdp:/usr/include/gnu/stubs-64.h + mdp:/usr/include/gnu/stubs.h + mdp:/usr/include/libintl.h + mdp:/usr/include/limits.h + mdp:/usr/include/linux/close_range.h + mdp:/usr/include/linux/errno.h + mdp:/usr/include/linux/limits.h + mdp:/usr/include/linux/posix_types.h + mdp:/usr/include/linux/sched/types.h + mdp:/usr/include/linux/stddef.h + mdp:/usr/include/linux/types.h + mdp:/usr/include/locale.h + mdp:/usr/include/pthread.h + mdp:/usr/include/qt6/QtCore/q17memory.h + mdp:/usr/include/qt6/QtCore/q20functional.h + mdp:/usr/include/qt6/QtCore/q20iterator.h + mdp:/usr/include/qt6/QtCore/q20memory.h + mdp:/usr/include/qt6/QtCore/q20type_traits.h + mdp:/usr/include/qt6/QtCore/q20utility.h + mdp:/usr/include/qt6/QtCore/q23type_traits.h + mdp:/usr/include/qt6/QtCore/q23utility.h + mdp:/usr/include/qt6/QtCore/qalgorithms.h + mdp:/usr/include/qt6/QtCore/qalloc.h + mdp:/usr/include/qt6/QtCore/qanystringview.h + mdp:/usr/include/qt6/QtCore/qarraydata.h + mdp:/usr/include/qt6/QtCore/qarraydataops.h + mdp:/usr/include/qt6/QtCore/qarraydatapointer.h + mdp:/usr/include/qt6/QtCore/qassert.h + mdp:/usr/include/qt6/QtCore/qatomic.h + mdp:/usr/include/qt6/QtCore/qatomic_cxx11.h + mdp:/usr/include/qt6/QtCore/qbasicatomic.h + mdp:/usr/include/qt6/QtCore/qbindingstorage.h + mdp:/usr/include/qt6/QtCore/qbytearray.h + mdp:/usr/include/qt6/QtCore/qbytearrayalgorithms.h + mdp:/usr/include/qt6/QtCore/qbytearraylist.h + mdp:/usr/include/qt6/QtCore/qbytearrayview.h + mdp:/usr/include/qt6/QtCore/qchar.h + mdp:/usr/include/qt6/QtCore/qcheckedint_impl.h + mdp:/usr/include/qt6/QtCore/qcompare.h + mdp:/usr/include/qt6/QtCore/qcompare_impl.h + mdp:/usr/include/qt6/QtCore/qcomparehelpers.h + mdp:/usr/include/qt6/QtCore/qcompilerdetection.h + mdp:/usr/include/qt6/QtCore/qconfig-64.h + mdp:/usr/include/qt6/QtCore/qconfig.h + mdp:/usr/include/qt6/QtCore/qconstructormacros.h + mdp:/usr/include/qt6/QtCore/qcontainerfwd.h + mdp:/usr/include/qt6/QtCore/qcontainerinfo.h + mdp:/usr/include/qt6/QtCore/qcontainertools_impl.h + mdp:/usr/include/qt6/QtCore/qcontiguouscache.h + mdp:/usr/include/qt6/QtCore/qdarwinhelpers.h + mdp:/usr/include/qt6/QtCore/qdatastream.h + mdp:/usr/include/qt6/QtCore/qdebug.h + mdp:/usr/include/qt6/QtCore/qendian.h + mdp:/usr/include/qt6/QtCore/qexceptionhandling.h + mdp:/usr/include/qt6/QtCore/qflags.h + mdp:/usr/include/qt6/QtCore/qfloat16.h + mdp:/usr/include/qt6/QtCore/qforeach.h + mdp:/usr/include/qt6/QtCore/qfunctionaltools_impl.h + mdp:/usr/include/qt6/QtCore/qfunctionpointer.h + mdp:/usr/include/qt6/QtCore/qgenericatomic.h + mdp:/usr/include/qt6/QtCore/qglobal.h + mdp:/usr/include/qt6/QtCore/qglobalstatic.h + mdp:/usr/include/qt6/QtCore/qhash.h + mdp:/usr/include/qt6/QtCore/qhashfunctions.h + mdp:/usr/include/qt6/QtCore/qiodevicebase.h + mdp:/usr/include/qt6/QtCore/qiterable.h + mdp:/usr/include/qt6/QtCore/qiterator.h + mdp:/usr/include/qt6/QtCore/qlatin1stringview.h + mdp:/usr/include/qt6/QtCore/qline.h + mdp:/usr/include/qt6/QtCore/qlist.h + mdp:/usr/include/qt6/QtCore/qlogging.h + mdp:/usr/include/qt6/QtCore/qmalloc.h + mdp:/usr/include/qt6/QtCore/qmap.h + mdp:/usr/include/qt6/QtCore/qmargins.h + mdp:/usr/include/qt6/QtCore/qmath.h + mdp:/usr/include/qt6/QtCore/qmetacontainer.h + mdp:/usr/include/qt6/QtCore/qmetatype.h + mdp:/usr/include/qt6/QtCore/qminmax.h + mdp:/usr/include/qt6/QtCore/qnamespace.h + mdp:/usr/include/qt6/QtCore/qnumeric.h + mdp:/usr/include/qt6/QtCore/qobject.h + mdp:/usr/include/qt6/QtCore/qobject_impl.h + mdp:/usr/include/qt6/QtCore/qobjectdefs.h + mdp:/usr/include/qt6/QtCore/qobjectdefs_impl.h + mdp:/usr/include/qt6/QtCore/qoverload.h + mdp:/usr/include/qt6/QtCore/qpair.h + mdp:/usr/include/qt6/QtCore/qpoint.h + mdp:/usr/include/qt6/QtCore/qprocessordetection.h + mdp:/usr/include/qt6/QtCore/qrect.h + mdp:/usr/include/qt6/QtCore/qrefcount.h + mdp:/usr/include/qt6/QtCore/qscopedpointer.h + mdp:/usr/include/qt6/QtCore/qscopeguard.h + mdp:/usr/include/qt6/QtCore/qset.h + mdp:/usr/include/qt6/QtCore/qshareddata.h + mdp:/usr/include/qt6/QtCore/qshareddata_impl.h + mdp:/usr/include/qt6/QtCore/qsharedpointer.h + mdp:/usr/include/qt6/QtCore/qsharedpointer_impl.h + mdp:/usr/include/qt6/QtCore/qsize.h + mdp:/usr/include/qt6/QtCore/qspan.h + mdp:/usr/include/qt6/QtCore/qstdlibdetection.h + mdp:/usr/include/qt6/QtCore/qstring.h + mdp:/usr/include/qt6/QtCore/qstringalgorithms.h + mdp:/usr/include/qt6/QtCore/qstringbuilder.h + mdp:/usr/include/qt6/QtCore/qstringconverter.h + mdp:/usr/include/qt6/QtCore/qstringconverter_base.h + mdp:/usr/include/qt6/QtCore/qstringfwd.h + mdp:/usr/include/qt6/QtCore/qstringlist.h + mdp:/usr/include/qt6/QtCore/qstringmatcher.h + mdp:/usr/include/qt6/QtCore/qstringtokenizer.h + mdp:/usr/include/qt6/QtCore/qstringview.h + mdp:/usr/include/qt6/QtCore/qswap.h + mdp:/usr/include/qt6/QtCore/qsysinfo.h + mdp:/usr/include/qt6/QtCore/qsystemdetection.h + mdp:/usr/include/qt6/QtCore/qtaggedpointer.h + mdp:/usr/include/qt6/QtCore/qtclasshelpermacros.h + mdp:/usr/include/qt6/QtCore/qtconfiginclude.h + mdp:/usr/include/qt6/QtCore/qtconfigmacros.h + mdp:/usr/include/qt6/QtCore/qtcore-config.h + mdp:/usr/include/qt6/QtCore/qtcoreexports.h + mdp:/usr/include/qt6/QtCore/qtcoreglobal.h + mdp:/usr/include/qt6/QtCore/qtdeprecationdefinitions.h + mdp:/usr/include/qt6/QtCore/qtdeprecationmarkers.h + mdp:/usr/include/qt6/QtCore/qtenvironmentvariables.h + mdp:/usr/include/qt6/QtCore/qtextstream.h + mdp:/usr/include/qt6/QtCore/qtformat_impl.h + mdp:/usr/include/qt6/QtCore/qtmetamacros.h + mdp:/usr/include/qt6/QtCore/qtnoop.h + mdp:/usr/include/qt6/QtCore/qtpreprocessorsupport.h + mdp:/usr/include/qt6/QtCore/qtresource.h + mdp:/usr/include/qt6/QtCore/qttranslation.h + mdp:/usr/include/qt6/QtCore/qttypetraits.h + mdp:/usr/include/qt6/QtCore/qtversion.h + mdp:/usr/include/qt6/QtCore/qtversionchecks.h + mdp:/usr/include/qt6/QtCore/qtypeinfo.h + mdp:/usr/include/qt6/QtCore/qtypes.h + mdp:/usr/include/qt6/QtCore/qutf8stringview.h + mdp:/usr/include/qt6/QtCore/qvariant.h + mdp:/usr/include/qt6/QtCore/qvarlengtharray.h + mdp:/usr/include/qt6/QtCore/qversiontagging.h + mdp:/usr/include/qt6/QtCore/qxptype_traits.h + mdp:/usr/include/qt6/QtCore/qyieldcpu.h + mdp:/usr/include/qt6/QtGui/qaction.h + mdp:/usr/include/qt6/QtGui/qbitmap.h + mdp:/usr/include/qt6/QtGui/qbrush.h + mdp:/usr/include/qt6/QtGui/qcolor.h + mdp:/usr/include/qt6/QtGui/qcursor.h + mdp:/usr/include/qt6/QtGui/qfont.h + mdp:/usr/include/qt6/QtGui/qfontinfo.h + mdp:/usr/include/qt6/QtGui/qfontmetrics.h + mdp:/usr/include/qt6/QtGui/qfontvariableaxis.h + mdp:/usr/include/qt6/QtGui/qicon.h + mdp:/usr/include/qt6/QtGui/qimage.h + mdp:/usr/include/qt6/QtGui/qkeysequence.h + mdp:/usr/include/qt6/QtGui/qpaintdevice.h + mdp:/usr/include/qt6/QtGui/qpalette.h + mdp:/usr/include/qt6/QtGui/qpixelformat.h + mdp:/usr/include/qt6/QtGui/qpixmap.h + mdp:/usr/include/qt6/QtGui/qpolygon.h + mdp:/usr/include/qt6/QtGui/qregion.h + mdp:/usr/include/qt6/QtGui/qrgb.h + mdp:/usr/include/qt6/QtGui/qrgba64.h + mdp:/usr/include/qt6/QtGui/qtgui-config.h + mdp:/usr/include/qt6/QtGui/qtguiexports.h + mdp:/usr/include/qt6/QtGui/qtguiglobal.h + mdp:/usr/include/qt6/QtGui/qtransform.h + mdp:/usr/include/qt6/QtGui/qwindowdefs.h + mdp:/usr/include/qt6/QtWidgets/QHBoxLayout + mdp:/usr/include/qt6/QtWidgets/QPushButton + mdp:/usr/include/qt6/QtWidgets/QWidget + mdp:/usr/include/qt6/QtWidgets/qabstractbutton.h + mdp:/usr/include/qt6/QtWidgets/qboxlayout.h + mdp:/usr/include/qt6/QtWidgets/qgridlayout.h + mdp:/usr/include/qt6/QtWidgets/qlayout.h + mdp:/usr/include/qt6/QtWidgets/qlayoutitem.h + mdp:/usr/include/qt6/QtWidgets/qpushbutton.h + mdp:/usr/include/qt6/QtWidgets/qsizepolicy.h + mdp:/usr/include/qt6/QtWidgets/qtwidgets-config.h + mdp:/usr/include/qt6/QtWidgets/qtwidgetsexports.h + mdp:/usr/include/qt6/QtWidgets/qtwidgetsglobal.h + mdp:/usr/include/qt6/QtWidgets/qwidget.h + mdp:/usr/include/sched.h + mdp:/usr/include/stdc-predef.h + mdp:/usr/include/stdint.h + mdp:/usr/include/stdio.h + mdp:/usr/include/stdlib.h + mdp:/usr/include/string.h + mdp:/usr/include/strings.h + mdp:/usr/include/sys/cdefs.h + mdp:/usr/include/sys/select.h + mdp:/usr/include/sys/single_threaded.h + mdp:/usr/include/sys/syscall.h + mdp:/usr/include/sys/types.h + mdp:/usr/include/syscall.h + mdp:/usr/include/time.h + mdp:/usr/include/unistd.h + mdp:/usr/include/wchar.h + mdp:/usr/include/wctype.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stdarg.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stdbool.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stddef.h +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/star_rating_widget.cpp +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/database_health_agent.h + mmc:Q_OBJECT + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/kassetmanagerqt_autogen/moc_predefs.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/database_health_agent.h + mdp:/usr/include/alloca.h + mdp:/usr/include/asm-generic/bitsperlong.h + mdp:/usr/include/asm-generic/errno-base.h + mdp:/usr/include/asm-generic/errno.h + mdp:/usr/include/asm-generic/int-ll64.h + mdp:/usr/include/asm-generic/posix_types.h + mdp:/usr/include/asm-generic/types.h + mdp:/usr/include/asm/bitsperlong.h + mdp:/usr/include/asm/errno.h + mdp:/usr/include/asm/posix_types.h + mdp:/usr/include/asm/posix_types_64.h + mdp:/usr/include/asm/types.h + mdp:/usr/include/asm/unistd.h + mdp:/usr/include/asm/unistd_64.h + mdp:/usr/include/assert.h + mdp:/usr/include/bits/atomic_wide_counter.h + mdp:/usr/include/bits/byteswap.h + mdp:/usr/include/bits/confname.h + mdp:/usr/include/bits/cpu-set.h + mdp:/usr/include/bits/endian.h + mdp:/usr/include/bits/endianness.h + mdp:/usr/include/bits/environments.h + mdp:/usr/include/bits/errno.h + mdp:/usr/include/bits/floatn-common.h + mdp:/usr/include/bits/floatn.h + mdp:/usr/include/bits/getopt_core.h + mdp:/usr/include/bits/getopt_posix.h + mdp:/usr/include/bits/libc-header-start.h + mdp:/usr/include/bits/local_lim.h + mdp:/usr/include/bits/locale.h + mdp:/usr/include/bits/long-double.h + mdp:/usr/include/bits/posix1_lim.h + mdp:/usr/include/bits/posix2_lim.h + mdp:/usr/include/bits/posix_opt.h + mdp:/usr/include/bits/pthread_stack_min-dynamic.h + mdp:/usr/include/bits/pthreadtypes-arch.h + mdp:/usr/include/bits/pthreadtypes.h + mdp:/usr/include/bits/sched.h + mdp:/usr/include/bits/select.h + mdp:/usr/include/bits/setjmp.h + mdp:/usr/include/bits/stdint-intn.h + mdp:/usr/include/bits/stdint-least.h + mdp:/usr/include/bits/stdint-uintn.h + mdp:/usr/include/bits/stdio_lim.h + mdp:/usr/include/bits/stdlib-float.h + mdp:/usr/include/bits/struct_mutex.h + mdp:/usr/include/bits/struct_rwlock.h + mdp:/usr/include/bits/syscall.h + mdp:/usr/include/bits/thread-shared-types.h + mdp:/usr/include/bits/time.h + mdp:/usr/include/bits/time64.h + mdp:/usr/include/bits/timesize.h + mdp:/usr/include/bits/timex.h + mdp:/usr/include/bits/types.h + mdp:/usr/include/bits/types/FILE.h + mdp:/usr/include/bits/types/__FILE.h + mdp:/usr/include/bits/types/__fpos64_t.h + mdp:/usr/include/bits/types/__fpos_t.h + mdp:/usr/include/bits/types/__locale_t.h + mdp:/usr/include/bits/types/__mbstate_t.h + mdp:/usr/include/bits/types/__sigset_t.h + mdp:/usr/include/bits/types/clock_t.h + mdp:/usr/include/bits/types/clockid_t.h + mdp:/usr/include/bits/types/cookie_io_functions_t.h + mdp:/usr/include/bits/types/error_t.h + mdp:/usr/include/bits/types/locale_t.h + mdp:/usr/include/bits/types/mbstate_t.h + mdp:/usr/include/bits/types/sigset_t.h + mdp:/usr/include/bits/types/struct_FILE.h + mdp:/usr/include/bits/types/struct___jmp_buf_tag.h + mdp:/usr/include/bits/types/struct_itimerspec.h + mdp:/usr/include/bits/types/struct_sched_param.h + mdp:/usr/include/bits/types/struct_timespec.h + mdp:/usr/include/bits/types/struct_timeval.h + mdp:/usr/include/bits/types/struct_tm.h + mdp:/usr/include/bits/types/time_t.h + mdp:/usr/include/bits/types/timer_t.h + mdp:/usr/include/bits/types/wint_t.h + mdp:/usr/include/bits/typesizes.h + mdp:/usr/include/bits/uintn-identity.h + mdp:/usr/include/bits/uio_lim.h + mdp:/usr/include/bits/unistd_ext.h + mdp:/usr/include/bits/waitflags.h + mdp:/usr/include/bits/waitstatus.h + mdp:/usr/include/bits/wchar.h + mdp:/usr/include/bits/wctype-wchar.h + mdp:/usr/include/bits/wordsize.h + mdp:/usr/include/bits/xopen_lim.h + mdp:/usr/include/c++/15/algorithm + mdp:/usr/include/c++/15/array + mdp:/usr/include/c++/15/atomic + mdp:/usr/include/c++/15/backward/auto_ptr.h + mdp:/usr/include/c++/15/backward/binders.h + mdp:/usr/include/c++/15/bit + mdp:/usr/include/c++/15/bits/algorithmfwd.h + mdp:/usr/include/c++/15/bits/align.h + mdp:/usr/include/c++/15/bits/alloc_traits.h + mdp:/usr/include/c++/15/bits/allocated_ptr.h + mdp:/usr/include/c++/15/bits/allocator.h + mdp:/usr/include/c++/15/bits/atomic_base.h + mdp:/usr/include/c++/15/bits/atomic_lockfree_defines.h + mdp:/usr/include/c++/15/bits/atomic_wait.h + mdp:/usr/include/c++/15/bits/basic_ios.h + mdp:/usr/include/c++/15/bits/basic_ios.tcc + mdp:/usr/include/c++/15/bits/basic_string.h + mdp:/usr/include/c++/15/bits/basic_string.tcc + mdp:/usr/include/c++/15/bits/char_traits.h + mdp:/usr/include/c++/15/bits/charconv.h + mdp:/usr/include/c++/15/bits/chrono.h + mdp:/usr/include/c++/15/bits/chrono_io.h + mdp:/usr/include/c++/15/bits/codecvt.h + mdp:/usr/include/c++/15/bits/concept_check.h + mdp:/usr/include/c++/15/bits/cpp_type_traits.h + mdp:/usr/include/c++/15/bits/cxxabi_forced.h + mdp:/usr/include/c++/15/bits/cxxabi_init_exception.h + mdp:/usr/include/c++/15/bits/enable_special_members.h + mdp:/usr/include/c++/15/bits/erase_if.h + mdp:/usr/include/c++/15/bits/exception.h + mdp:/usr/include/c++/15/bits/exception_defines.h + mdp:/usr/include/c++/15/bits/exception_ptr.h + mdp:/usr/include/c++/15/bits/functexcept.h + mdp:/usr/include/c++/15/bits/functional_hash.h + mdp:/usr/include/c++/15/bits/hash_bytes.h + mdp:/usr/include/c++/15/bits/hashtable.h + mdp:/usr/include/c++/15/bits/hashtable_policy.h + mdp:/usr/include/c++/15/bits/invoke.h + mdp:/usr/include/c++/15/bits/ios_base.h + mdp:/usr/include/c++/15/bits/istream.tcc + mdp:/usr/include/c++/15/bits/iterator_concepts.h + mdp:/usr/include/c++/15/bits/list.tcc + mdp:/usr/include/c++/15/bits/locale_classes.h + mdp:/usr/include/c++/15/bits/locale_classes.tcc + mdp:/usr/include/c++/15/bits/locale_conv.h + mdp:/usr/include/c++/15/bits/locale_facets.h + mdp:/usr/include/c++/15/bits/locale_facets.tcc + mdp:/usr/include/c++/15/bits/locale_facets_nonio.h + mdp:/usr/include/c++/15/bits/locale_facets_nonio.tcc + mdp:/usr/include/c++/15/bits/localefwd.h + mdp:/usr/include/c++/15/bits/max_size_type.h + mdp:/usr/include/c++/15/bits/memory_resource.h + mdp:/usr/include/c++/15/bits/memoryfwd.h + mdp:/usr/include/c++/15/bits/move.h + mdp:/usr/include/c++/15/bits/nested_exception.h + mdp:/usr/include/c++/15/bits/new_allocator.h + mdp:/usr/include/c++/15/bits/node_handle.h + mdp:/usr/include/c++/15/bits/ostream.h + mdp:/usr/include/c++/15/bits/ostream.tcc + mdp:/usr/include/c++/15/bits/ostream_insert.h + mdp:/usr/include/c++/15/bits/parse_numbers.h + mdp:/usr/include/c++/15/bits/postypes.h + mdp:/usr/include/c++/15/bits/predefined_ops.h + mdp:/usr/include/c++/15/bits/ptr_traits.h + mdp:/usr/include/c++/15/bits/quoted_string.h + mdp:/usr/include/c++/15/bits/range_access.h + mdp:/usr/include/c++/15/bits/ranges_algo.h + mdp:/usr/include/c++/15/bits/ranges_algobase.h + mdp:/usr/include/c++/15/bits/ranges_base.h + mdp:/usr/include/c++/15/bits/ranges_cmp.h + mdp:/usr/include/c++/15/bits/ranges_uninitialized.h + mdp:/usr/include/c++/15/bits/ranges_util.h + mdp:/usr/include/c++/15/bits/refwrap.h + mdp:/usr/include/c++/15/bits/requires_hosted.h + mdp:/usr/include/c++/15/bits/shared_ptr.h + mdp:/usr/include/c++/15/bits/shared_ptr_atomic.h + mdp:/usr/include/c++/15/bits/shared_ptr_base.h + mdp:/usr/include/c++/15/bits/specfun.h + mdp:/usr/include/c++/15/bits/sstream.tcc + mdp:/usr/include/c++/15/bits/std_abs.h + mdp:/usr/include/c++/15/bits/std_function.h + mdp:/usr/include/c++/15/bits/std_mutex.h + mdp:/usr/include/c++/15/bits/stl_algo.h + mdp:/usr/include/c++/15/bits/stl_algobase.h + mdp:/usr/include/c++/15/bits/stl_bvector.h + mdp:/usr/include/c++/15/bits/stl_construct.h + mdp:/usr/include/c++/15/bits/stl_function.h + mdp:/usr/include/c++/15/bits/stl_heap.h + mdp:/usr/include/c++/15/bits/stl_iterator.h + mdp:/usr/include/c++/15/bits/stl_iterator_base_funcs.h + mdp:/usr/include/c++/15/bits/stl_iterator_base_types.h + mdp:/usr/include/c++/15/bits/stl_list.h + mdp:/usr/include/c++/15/bits/stl_map.h + mdp:/usr/include/c++/15/bits/stl_multimap.h + mdp:/usr/include/c++/15/bits/stl_multiset.h + mdp:/usr/include/c++/15/bits/stl_numeric.h + mdp:/usr/include/c++/15/bits/stl_pair.h + mdp:/usr/include/c++/15/bits/stl_raw_storage_iter.h + mdp:/usr/include/c++/15/bits/stl_relops.h + mdp:/usr/include/c++/15/bits/stl_set.h + mdp:/usr/include/c++/15/bits/stl_tempbuf.h + mdp:/usr/include/c++/15/bits/stl_tree.h + mdp:/usr/include/c++/15/bits/stl_uninitialized.h + mdp:/usr/include/c++/15/bits/stl_vector.h + mdp:/usr/include/c++/15/bits/stream_iterator.h + mdp:/usr/include/c++/15/bits/streambuf.tcc + mdp:/usr/include/c++/15/bits/streambuf_iterator.h + mdp:/usr/include/c++/15/bits/string_view.tcc + mdp:/usr/include/c++/15/bits/stringfwd.h + mdp:/usr/include/c++/15/bits/uniform_int_dist.h + mdp:/usr/include/c++/15/bits/unique_ptr.h + mdp:/usr/include/c++/15/bits/unordered_map.h + mdp:/usr/include/c++/15/bits/unordered_set.h + mdp:/usr/include/c++/15/bits/uses_allocator.h + mdp:/usr/include/c++/15/bits/uses_allocator_args.h + mdp:/usr/include/c++/15/bits/utility.h + mdp:/usr/include/c++/15/bits/vector.tcc + mdp:/usr/include/c++/15/bits/version.h + mdp:/usr/include/c++/15/cctype + mdp:/usr/include/c++/15/cerrno + mdp:/usr/include/c++/15/charconv + mdp:/usr/include/c++/15/chrono + mdp:/usr/include/c++/15/climits + mdp:/usr/include/c++/15/clocale + mdp:/usr/include/c++/15/cmath + mdp:/usr/include/c++/15/compare + mdp:/usr/include/c++/15/concepts + mdp:/usr/include/c++/15/cstddef + mdp:/usr/include/c++/15/cstdint + mdp:/usr/include/c++/15/cstdio + mdp:/usr/include/c++/15/cstdlib + mdp:/usr/include/c++/15/cstring + mdp:/usr/include/c++/15/ctime + mdp:/usr/include/c++/15/cwchar + mdp:/usr/include/c++/15/cwctype + mdp:/usr/include/c++/15/debug/assertions.h + mdp:/usr/include/c++/15/debug/debug.h + mdp:/usr/include/c++/15/exception + mdp:/usr/include/c++/15/ext/aligned_buffer.h + mdp:/usr/include/c++/15/ext/alloc_traits.h + mdp:/usr/include/c++/15/ext/atomicity.h + mdp:/usr/include/c++/15/ext/concurrence.h + mdp:/usr/include/c++/15/ext/numeric_traits.h + mdp:/usr/include/c++/15/ext/string_conversions.h + mdp:/usr/include/c++/15/ext/type_traits.h + mdp:/usr/include/c++/15/format + mdp:/usr/include/c++/15/functional + mdp:/usr/include/c++/15/initializer_list + mdp:/usr/include/c++/15/iomanip + mdp:/usr/include/c++/15/ios + mdp:/usr/include/c++/15/iosfwd + mdp:/usr/include/c++/15/istream + mdp:/usr/include/c++/15/iterator + mdp:/usr/include/c++/15/limits + mdp:/usr/include/c++/15/list + mdp:/usr/include/c++/15/locale + mdp:/usr/include/c++/15/map + mdp:/usr/include/c++/15/memory + mdp:/usr/include/c++/15/new + mdp:/usr/include/c++/15/numeric + mdp:/usr/include/c++/15/optional + mdp:/usr/include/c++/15/ostream + mdp:/usr/include/c++/15/pstl/execution_defs.h + mdp:/usr/include/c++/15/pstl/glue_numeric_defs.h + mdp:/usr/include/c++/15/pstl/pstl_config.h + mdp:/usr/include/c++/15/ratio + mdp:/usr/include/c++/15/set + mdp:/usr/include/c++/15/sstream + mdp:/usr/include/c++/15/stdexcept + mdp:/usr/include/c++/15/streambuf + mdp:/usr/include/c++/15/string + mdp:/usr/include/c++/15/string_view + mdp:/usr/include/c++/15/system_error + mdp:/usr/include/c++/15/tr1/bessel_function.tcc + mdp:/usr/include/c++/15/tr1/beta_function.tcc + mdp:/usr/include/c++/15/tr1/ell_integral.tcc + mdp:/usr/include/c++/15/tr1/exp_integral.tcc + mdp:/usr/include/c++/15/tr1/gamma.tcc + mdp:/usr/include/c++/15/tr1/hypergeometric.tcc + mdp:/usr/include/c++/15/tr1/legendre_function.tcc + mdp:/usr/include/c++/15/tr1/modified_bessel_func.tcc + mdp:/usr/include/c++/15/tr1/poly_hermite.tcc + mdp:/usr/include/c++/15/tr1/poly_laguerre.tcc + mdp:/usr/include/c++/15/tr1/riemann_zeta.tcc + mdp:/usr/include/c++/15/tr1/special_function_util.h + mdp:/usr/include/c++/15/tuple + mdp:/usr/include/c++/15/type_traits + mdp:/usr/include/c++/15/typeinfo + mdp:/usr/include/c++/15/unordered_map + mdp:/usr/include/c++/15/unordered_set + mdp:/usr/include/c++/15/utility + mdp:/usr/include/c++/15/variant + mdp:/usr/include/c++/15/vector + mdp:/usr/include/c++/15/version + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/atomic_word.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++allocator.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++config.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++locale.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/cpu_defines.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/ctype_base.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/ctype_inline.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/error_constants.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/gthr-default.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/gthr.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/messages_members.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/os_defines.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/time_members.h + mdp:/usr/include/ctype.h + mdp:/usr/include/endian.h + mdp:/usr/include/errno.h + mdp:/usr/include/features-time64.h + mdp:/usr/include/features.h + mdp:/usr/include/gnu/stubs-64.h + mdp:/usr/include/gnu/stubs.h + mdp:/usr/include/libintl.h + mdp:/usr/include/limits.h + mdp:/usr/include/linux/close_range.h + mdp:/usr/include/linux/errno.h + mdp:/usr/include/linux/limits.h + mdp:/usr/include/linux/posix_types.h + mdp:/usr/include/linux/sched/types.h + mdp:/usr/include/linux/stddef.h + mdp:/usr/include/linux/types.h + mdp:/usr/include/locale.h + mdp:/usr/include/pthread.h + mdp:/usr/include/qt6/QtCore/QDateTime + mdp:/usr/include/qt6/QtCore/QObject + mdp:/usr/include/qt6/QtCore/QString + mdp:/usr/include/qt6/QtCore/QVector + mdp:/usr/include/qt6/QtCore/q17memory.h + mdp:/usr/include/qt6/QtCore/q20functional.h + mdp:/usr/include/qt6/QtCore/q20memory.h + mdp:/usr/include/qt6/QtCore/q20type_traits.h + mdp:/usr/include/qt6/QtCore/q20utility.h + mdp:/usr/include/qt6/QtCore/q23type_traits.h + mdp:/usr/include/qt6/QtCore/q23utility.h + mdp:/usr/include/qt6/QtCore/qalgorithms.h + mdp:/usr/include/qt6/QtCore/qalloc.h + mdp:/usr/include/qt6/QtCore/qanystringview.h + mdp:/usr/include/qt6/QtCore/qarraydata.h + mdp:/usr/include/qt6/QtCore/qarraydataops.h + mdp:/usr/include/qt6/QtCore/qarraydatapointer.h + mdp:/usr/include/qt6/QtCore/qassert.h + mdp:/usr/include/qt6/QtCore/qatomic.h + mdp:/usr/include/qt6/QtCore/qatomic_cxx11.h + mdp:/usr/include/qt6/QtCore/qbasicatomic.h + mdp:/usr/include/qt6/QtCore/qbindingstorage.h + mdp:/usr/include/qt6/QtCore/qbytearray.h + mdp:/usr/include/qt6/QtCore/qbytearrayalgorithms.h + mdp:/usr/include/qt6/QtCore/qbytearraylist.h + mdp:/usr/include/qt6/QtCore/qbytearrayview.h + mdp:/usr/include/qt6/QtCore/qcalendar.h + mdp:/usr/include/qt6/QtCore/qchar.h + mdp:/usr/include/qt6/QtCore/qcompare.h + mdp:/usr/include/qt6/QtCore/qcompare_impl.h + mdp:/usr/include/qt6/QtCore/qcomparehelpers.h + mdp:/usr/include/qt6/QtCore/qcompilerdetection.h + mdp:/usr/include/qt6/QtCore/qconfig-64.h + mdp:/usr/include/qt6/QtCore/qconfig.h + mdp:/usr/include/qt6/QtCore/qconstructormacros.h + mdp:/usr/include/qt6/QtCore/qcontainerfwd.h + mdp:/usr/include/qt6/QtCore/qcontainerinfo.h + mdp:/usr/include/qt6/QtCore/qcontainertools_impl.h + mdp:/usr/include/qt6/QtCore/qcontiguouscache.h + mdp:/usr/include/qt6/QtCore/qdarwinhelpers.h + mdp:/usr/include/qt6/QtCore/qdatastream.h + mdp:/usr/include/qt6/QtCore/qdatetime.h + mdp:/usr/include/qt6/QtCore/qdebug.h + mdp:/usr/include/qt6/QtCore/qexceptionhandling.h + mdp:/usr/include/qt6/QtCore/qflags.h + mdp:/usr/include/qt6/QtCore/qfloat16.h + mdp:/usr/include/qt6/QtCore/qforeach.h + mdp:/usr/include/qt6/QtCore/qfunctionaltools_impl.h + mdp:/usr/include/qt6/QtCore/qfunctionpointer.h + mdp:/usr/include/qt6/QtCore/qgenericatomic.h + mdp:/usr/include/qt6/QtCore/qglobal.h + mdp:/usr/include/qt6/QtCore/qglobalstatic.h + mdp:/usr/include/qt6/QtCore/qhash.h + mdp:/usr/include/qt6/QtCore/qhashfunctions.h + mdp:/usr/include/qt6/QtCore/qiodevicebase.h + mdp:/usr/include/qt6/QtCore/qiterable.h + mdp:/usr/include/qt6/QtCore/qiterator.h + mdp:/usr/include/qt6/QtCore/qlatin1stringview.h + mdp:/usr/include/qt6/QtCore/qlist.h + mdp:/usr/include/qt6/QtCore/qlocale.h + mdp:/usr/include/qt6/QtCore/qlogging.h + mdp:/usr/include/qt6/QtCore/qmalloc.h + mdp:/usr/include/qt6/QtCore/qmap.h + mdp:/usr/include/qt6/QtCore/qmath.h + mdp:/usr/include/qt6/QtCore/qmetacontainer.h + mdp:/usr/include/qt6/QtCore/qmetatype.h + mdp:/usr/include/qt6/QtCore/qminmax.h + mdp:/usr/include/qt6/QtCore/qnamespace.h + mdp:/usr/include/qt6/QtCore/qnumeric.h + mdp:/usr/include/qt6/QtCore/qobject.h + mdp:/usr/include/qt6/QtCore/qobject_impl.h + mdp:/usr/include/qt6/QtCore/qobjectdefs.h + mdp:/usr/include/qt6/QtCore/qobjectdefs_impl.h + mdp:/usr/include/qt6/QtCore/qoverload.h + mdp:/usr/include/qt6/QtCore/qpair.h + mdp:/usr/include/qt6/QtCore/qprocessordetection.h + mdp:/usr/include/qt6/QtCore/qrefcount.h + mdp:/usr/include/qt6/QtCore/qscopedpointer.h + mdp:/usr/include/qt6/QtCore/qscopeguard.h + mdp:/usr/include/qt6/QtCore/qset.h + mdp:/usr/include/qt6/QtCore/qshareddata.h + mdp:/usr/include/qt6/QtCore/qshareddata_impl.h + mdp:/usr/include/qt6/QtCore/qsharedpointer.h + mdp:/usr/include/qt6/QtCore/qsharedpointer_impl.h + mdp:/usr/include/qt6/QtCore/qstdlibdetection.h + mdp:/usr/include/qt6/QtCore/qstring.h + mdp:/usr/include/qt6/QtCore/qstringalgorithms.h + mdp:/usr/include/qt6/QtCore/qstringbuilder.h + mdp:/usr/include/qt6/QtCore/qstringconverter.h + mdp:/usr/include/qt6/QtCore/qstringconverter_base.h + mdp:/usr/include/qt6/QtCore/qstringfwd.h + mdp:/usr/include/qt6/QtCore/qstringlist.h + mdp:/usr/include/qt6/QtCore/qstringmatcher.h + mdp:/usr/include/qt6/QtCore/qstringtokenizer.h + mdp:/usr/include/qt6/QtCore/qstringview.h + mdp:/usr/include/qt6/QtCore/qswap.h + mdp:/usr/include/qt6/QtCore/qsysinfo.h + mdp:/usr/include/qt6/QtCore/qsystemdetection.h + mdp:/usr/include/qt6/QtCore/qtaggedpointer.h + mdp:/usr/include/qt6/QtCore/qtclasshelpermacros.h + mdp:/usr/include/qt6/QtCore/qtconfiginclude.h + mdp:/usr/include/qt6/QtCore/qtconfigmacros.h + mdp:/usr/include/qt6/QtCore/qtcore-config.h + mdp:/usr/include/qt6/QtCore/qtcoreexports.h + mdp:/usr/include/qt6/QtCore/qtcoreglobal.h + mdp:/usr/include/qt6/QtCore/qtdeprecationdefinitions.h + mdp:/usr/include/qt6/QtCore/qtdeprecationmarkers.h + mdp:/usr/include/qt6/QtCore/qtenvironmentvariables.h + mdp:/usr/include/qt6/QtCore/qtextstream.h + mdp:/usr/include/qt6/QtCore/qtformat_impl.h + mdp:/usr/include/qt6/QtCore/qtmetamacros.h + mdp:/usr/include/qt6/QtCore/qtnoop.h + mdp:/usr/include/qt6/QtCore/qtpreprocessorsupport.h + mdp:/usr/include/qt6/QtCore/qtresource.h + mdp:/usr/include/qt6/QtCore/qttranslation.h + mdp:/usr/include/qt6/QtCore/qttypetraits.h + mdp:/usr/include/qt6/QtCore/qtversion.h + mdp:/usr/include/qt6/QtCore/qtversionchecks.h + mdp:/usr/include/qt6/QtCore/qtypeinfo.h + mdp:/usr/include/qt6/QtCore/qtypes.h + mdp:/usr/include/qt6/QtCore/qutf8stringview.h + mdp:/usr/include/qt6/QtCore/qvariant.h + mdp:/usr/include/qt6/QtCore/qvarlengtharray.h + mdp:/usr/include/qt6/QtCore/qvector.h + mdp:/usr/include/qt6/QtCore/qversiontagging.h + mdp:/usr/include/qt6/QtCore/qxptype_traits.h + mdp:/usr/include/qt6/QtCore/qyieldcpu.h + mdp:/usr/include/sched.h + mdp:/usr/include/stdc-predef.h + mdp:/usr/include/stdint.h + mdp:/usr/include/stdio.h + mdp:/usr/include/stdlib.h + mdp:/usr/include/string.h + mdp:/usr/include/strings.h + mdp:/usr/include/sys/cdefs.h + mdp:/usr/include/sys/select.h + mdp:/usr/include/sys/single_threaded.h + mdp:/usr/include/sys/syscall.h + mdp:/usr/include/sys/types.h + mdp:/usr/include/syscall.h + mdp:/usr/include/time.h + mdp:/usr/include/unistd.h + mdp:/usr/include/wchar.h + mdp:/usr/include/wctype.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stdarg.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stdbool.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stddef.h +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/main.cpp +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/asset_item_delegate.cpp +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/media_converter_worker.h + mmc:Q_OBJECT + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/kassetmanagerqt_autogen/moc_predefs.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/media_converter_worker.h + mdp:/usr/include/alloca.h + mdp:/usr/include/asm-generic/bitsperlong.h + mdp:/usr/include/asm-generic/errno-base.h + mdp:/usr/include/asm-generic/errno.h + mdp:/usr/include/asm-generic/int-ll64.h + mdp:/usr/include/asm-generic/posix_types.h + mdp:/usr/include/asm-generic/types.h + mdp:/usr/include/asm/bitsperlong.h + mdp:/usr/include/asm/errno.h + mdp:/usr/include/asm/posix_types.h + mdp:/usr/include/asm/posix_types_64.h + mdp:/usr/include/asm/types.h + mdp:/usr/include/asm/unistd.h + mdp:/usr/include/asm/unistd_64.h + mdp:/usr/include/assert.h + mdp:/usr/include/bits/atomic_wide_counter.h + mdp:/usr/include/bits/byteswap.h + mdp:/usr/include/bits/confname.h + mdp:/usr/include/bits/cpu-set.h + mdp:/usr/include/bits/endian.h + mdp:/usr/include/bits/endianness.h + mdp:/usr/include/bits/environments.h + mdp:/usr/include/bits/errno.h + mdp:/usr/include/bits/floatn-common.h + mdp:/usr/include/bits/floatn.h + mdp:/usr/include/bits/getopt_core.h + mdp:/usr/include/bits/getopt_posix.h + mdp:/usr/include/bits/libc-header-start.h + mdp:/usr/include/bits/local_lim.h + mdp:/usr/include/bits/locale.h + mdp:/usr/include/bits/long-double.h + mdp:/usr/include/bits/posix1_lim.h + mdp:/usr/include/bits/posix2_lim.h + mdp:/usr/include/bits/posix_opt.h + mdp:/usr/include/bits/pthread_stack_min-dynamic.h + mdp:/usr/include/bits/pthreadtypes-arch.h + mdp:/usr/include/bits/pthreadtypes.h + mdp:/usr/include/bits/sched.h + mdp:/usr/include/bits/select.h + mdp:/usr/include/bits/setjmp.h + mdp:/usr/include/bits/stdint-intn.h + mdp:/usr/include/bits/stdint-least.h + mdp:/usr/include/bits/stdint-uintn.h + mdp:/usr/include/bits/stdio_lim.h + mdp:/usr/include/bits/stdlib-float.h + mdp:/usr/include/bits/struct_mutex.h + mdp:/usr/include/bits/struct_rwlock.h + mdp:/usr/include/bits/syscall.h + mdp:/usr/include/bits/thread-shared-types.h + mdp:/usr/include/bits/time.h + mdp:/usr/include/bits/time64.h + mdp:/usr/include/bits/timesize.h + mdp:/usr/include/bits/timex.h + mdp:/usr/include/bits/types.h + mdp:/usr/include/bits/types/FILE.h + mdp:/usr/include/bits/types/__FILE.h + mdp:/usr/include/bits/types/__fpos64_t.h + mdp:/usr/include/bits/types/__fpos_t.h + mdp:/usr/include/bits/types/__locale_t.h + mdp:/usr/include/bits/types/__mbstate_t.h + mdp:/usr/include/bits/types/__sigset_t.h + mdp:/usr/include/bits/types/clock_t.h + mdp:/usr/include/bits/types/clockid_t.h + mdp:/usr/include/bits/types/cookie_io_functions_t.h + mdp:/usr/include/bits/types/error_t.h + mdp:/usr/include/bits/types/locale_t.h + mdp:/usr/include/bits/types/mbstate_t.h + mdp:/usr/include/bits/types/sigset_t.h + mdp:/usr/include/bits/types/struct_FILE.h + mdp:/usr/include/bits/types/struct___jmp_buf_tag.h + mdp:/usr/include/bits/types/struct_itimerspec.h + mdp:/usr/include/bits/types/struct_sched_param.h + mdp:/usr/include/bits/types/struct_timespec.h + mdp:/usr/include/bits/types/struct_timeval.h + mdp:/usr/include/bits/types/struct_tm.h + mdp:/usr/include/bits/types/time_t.h + mdp:/usr/include/bits/types/timer_t.h + mdp:/usr/include/bits/types/wint_t.h + mdp:/usr/include/bits/typesizes.h + mdp:/usr/include/bits/uintn-identity.h + mdp:/usr/include/bits/uio_lim.h + mdp:/usr/include/bits/unistd_ext.h + mdp:/usr/include/bits/waitflags.h + mdp:/usr/include/bits/waitstatus.h + mdp:/usr/include/bits/wchar.h + mdp:/usr/include/bits/wctype-wchar.h + mdp:/usr/include/bits/wordsize.h + mdp:/usr/include/bits/xopen_lim.h + mdp:/usr/include/c++/15/algorithm + mdp:/usr/include/c++/15/array + mdp:/usr/include/c++/15/atomic + mdp:/usr/include/c++/15/backward/auto_ptr.h + mdp:/usr/include/c++/15/backward/binders.h + mdp:/usr/include/c++/15/bit + mdp:/usr/include/c++/15/bits/algorithmfwd.h + mdp:/usr/include/c++/15/bits/align.h + mdp:/usr/include/c++/15/bits/alloc_traits.h + mdp:/usr/include/c++/15/bits/allocated_ptr.h + mdp:/usr/include/c++/15/bits/allocator.h + mdp:/usr/include/c++/15/bits/atomic_base.h + mdp:/usr/include/c++/15/bits/atomic_lockfree_defines.h + mdp:/usr/include/c++/15/bits/atomic_wait.h + mdp:/usr/include/c++/15/bits/basic_ios.h + mdp:/usr/include/c++/15/bits/basic_ios.tcc + mdp:/usr/include/c++/15/bits/basic_string.h + mdp:/usr/include/c++/15/bits/basic_string.tcc + mdp:/usr/include/c++/15/bits/char_traits.h + mdp:/usr/include/c++/15/bits/charconv.h + mdp:/usr/include/c++/15/bits/chrono.h + mdp:/usr/include/c++/15/bits/chrono_io.h + mdp:/usr/include/c++/15/bits/codecvt.h + mdp:/usr/include/c++/15/bits/concept_check.h + mdp:/usr/include/c++/15/bits/cpp_type_traits.h + mdp:/usr/include/c++/15/bits/cxxabi_forced.h + mdp:/usr/include/c++/15/bits/cxxabi_init_exception.h + mdp:/usr/include/c++/15/bits/enable_special_members.h + mdp:/usr/include/c++/15/bits/erase_if.h + mdp:/usr/include/c++/15/bits/exception.h + mdp:/usr/include/c++/15/bits/exception_defines.h + mdp:/usr/include/c++/15/bits/exception_ptr.h + mdp:/usr/include/c++/15/bits/functexcept.h + mdp:/usr/include/c++/15/bits/functional_hash.h + mdp:/usr/include/c++/15/bits/hash_bytes.h + mdp:/usr/include/c++/15/bits/hashtable.h + mdp:/usr/include/c++/15/bits/hashtable_policy.h + mdp:/usr/include/c++/15/bits/invoke.h + mdp:/usr/include/c++/15/bits/ios_base.h + mdp:/usr/include/c++/15/bits/istream.tcc + mdp:/usr/include/c++/15/bits/iterator_concepts.h + mdp:/usr/include/c++/15/bits/list.tcc + mdp:/usr/include/c++/15/bits/locale_classes.h + mdp:/usr/include/c++/15/bits/locale_classes.tcc + mdp:/usr/include/c++/15/bits/locale_conv.h + mdp:/usr/include/c++/15/bits/locale_facets.h + mdp:/usr/include/c++/15/bits/locale_facets.tcc + mdp:/usr/include/c++/15/bits/locale_facets_nonio.h + mdp:/usr/include/c++/15/bits/locale_facets_nonio.tcc + mdp:/usr/include/c++/15/bits/localefwd.h + mdp:/usr/include/c++/15/bits/max_size_type.h + mdp:/usr/include/c++/15/bits/memory_resource.h + mdp:/usr/include/c++/15/bits/memoryfwd.h + mdp:/usr/include/c++/15/bits/move.h + mdp:/usr/include/c++/15/bits/nested_exception.h + mdp:/usr/include/c++/15/bits/new_allocator.h + mdp:/usr/include/c++/15/bits/node_handle.h + mdp:/usr/include/c++/15/bits/ostream.h + mdp:/usr/include/c++/15/bits/ostream.tcc + mdp:/usr/include/c++/15/bits/ostream_insert.h + mdp:/usr/include/c++/15/bits/parse_numbers.h + mdp:/usr/include/c++/15/bits/postypes.h + mdp:/usr/include/c++/15/bits/predefined_ops.h + mdp:/usr/include/c++/15/bits/ptr_traits.h + mdp:/usr/include/c++/15/bits/quoted_string.h + mdp:/usr/include/c++/15/bits/range_access.h + mdp:/usr/include/c++/15/bits/ranges_algo.h + mdp:/usr/include/c++/15/bits/ranges_algobase.h + mdp:/usr/include/c++/15/bits/ranges_base.h + mdp:/usr/include/c++/15/bits/ranges_cmp.h + mdp:/usr/include/c++/15/bits/ranges_uninitialized.h + mdp:/usr/include/c++/15/bits/ranges_util.h + mdp:/usr/include/c++/15/bits/refwrap.h + mdp:/usr/include/c++/15/bits/requires_hosted.h + mdp:/usr/include/c++/15/bits/shared_ptr.h + mdp:/usr/include/c++/15/bits/shared_ptr_atomic.h + mdp:/usr/include/c++/15/bits/shared_ptr_base.h + mdp:/usr/include/c++/15/bits/specfun.h + mdp:/usr/include/c++/15/bits/sstream.tcc + mdp:/usr/include/c++/15/bits/std_abs.h + mdp:/usr/include/c++/15/bits/std_function.h + mdp:/usr/include/c++/15/bits/std_mutex.h + mdp:/usr/include/c++/15/bits/stl_algo.h + mdp:/usr/include/c++/15/bits/stl_algobase.h + mdp:/usr/include/c++/15/bits/stl_bvector.h + mdp:/usr/include/c++/15/bits/stl_construct.h + mdp:/usr/include/c++/15/bits/stl_function.h + mdp:/usr/include/c++/15/bits/stl_heap.h + mdp:/usr/include/c++/15/bits/stl_iterator.h + mdp:/usr/include/c++/15/bits/stl_iterator_base_funcs.h + mdp:/usr/include/c++/15/bits/stl_iterator_base_types.h + mdp:/usr/include/c++/15/bits/stl_list.h + mdp:/usr/include/c++/15/bits/stl_map.h + mdp:/usr/include/c++/15/bits/stl_multimap.h + mdp:/usr/include/c++/15/bits/stl_numeric.h + mdp:/usr/include/c++/15/bits/stl_pair.h + mdp:/usr/include/c++/15/bits/stl_raw_storage_iter.h + mdp:/usr/include/c++/15/bits/stl_relops.h + mdp:/usr/include/c++/15/bits/stl_tempbuf.h + mdp:/usr/include/c++/15/bits/stl_tree.h + mdp:/usr/include/c++/15/bits/stl_uninitialized.h + mdp:/usr/include/c++/15/bits/stl_vector.h + mdp:/usr/include/c++/15/bits/stream_iterator.h + mdp:/usr/include/c++/15/bits/streambuf.tcc + mdp:/usr/include/c++/15/bits/streambuf_iterator.h + mdp:/usr/include/c++/15/bits/string_view.tcc + mdp:/usr/include/c++/15/bits/stringfwd.h + mdp:/usr/include/c++/15/bits/uniform_int_dist.h + mdp:/usr/include/c++/15/bits/unique_ptr.h + mdp:/usr/include/c++/15/bits/unordered_map.h + mdp:/usr/include/c++/15/bits/uses_allocator.h + mdp:/usr/include/c++/15/bits/uses_allocator_args.h + mdp:/usr/include/c++/15/bits/utility.h + mdp:/usr/include/c++/15/bits/vector.tcc + mdp:/usr/include/c++/15/bits/version.h + mdp:/usr/include/c++/15/cassert + mdp:/usr/include/c++/15/cctype + mdp:/usr/include/c++/15/cerrno + mdp:/usr/include/c++/15/charconv + mdp:/usr/include/c++/15/chrono + mdp:/usr/include/c++/15/climits + mdp:/usr/include/c++/15/clocale + mdp:/usr/include/c++/15/cmath + mdp:/usr/include/c++/15/compare + mdp:/usr/include/c++/15/concepts + mdp:/usr/include/c++/15/cstddef + mdp:/usr/include/c++/15/cstdint + mdp:/usr/include/c++/15/cstdio + mdp:/usr/include/c++/15/cstdlib + mdp:/usr/include/c++/15/cstring + mdp:/usr/include/c++/15/ctime + mdp:/usr/include/c++/15/cwchar + mdp:/usr/include/c++/15/cwctype + mdp:/usr/include/c++/15/debug/assertions.h + mdp:/usr/include/c++/15/debug/debug.h + mdp:/usr/include/c++/15/exception + mdp:/usr/include/c++/15/ext/aligned_buffer.h + mdp:/usr/include/c++/15/ext/alloc_traits.h + mdp:/usr/include/c++/15/ext/atomicity.h + mdp:/usr/include/c++/15/ext/concurrence.h + mdp:/usr/include/c++/15/ext/numeric_traits.h + mdp:/usr/include/c++/15/ext/string_conversions.h + mdp:/usr/include/c++/15/ext/type_traits.h + mdp:/usr/include/c++/15/format + mdp:/usr/include/c++/15/functional + mdp:/usr/include/c++/15/initializer_list + mdp:/usr/include/c++/15/iomanip + mdp:/usr/include/c++/15/ios + mdp:/usr/include/c++/15/iosfwd + mdp:/usr/include/c++/15/istream + mdp:/usr/include/c++/15/iterator + mdp:/usr/include/c++/15/limits + mdp:/usr/include/c++/15/list + mdp:/usr/include/c++/15/locale + mdp:/usr/include/c++/15/map + mdp:/usr/include/c++/15/memory + mdp:/usr/include/c++/15/new + mdp:/usr/include/c++/15/numeric + mdp:/usr/include/c++/15/optional + mdp:/usr/include/c++/15/ostream + mdp:/usr/include/c++/15/pstl/execution_defs.h + mdp:/usr/include/c++/15/pstl/glue_numeric_defs.h + mdp:/usr/include/c++/15/pstl/pstl_config.h + mdp:/usr/include/c++/15/ratio + mdp:/usr/include/c++/15/sstream + mdp:/usr/include/c++/15/stdexcept + mdp:/usr/include/c++/15/streambuf + mdp:/usr/include/c++/15/string + mdp:/usr/include/c++/15/string_view + mdp:/usr/include/c++/15/system_error + mdp:/usr/include/c++/15/tr1/bessel_function.tcc + mdp:/usr/include/c++/15/tr1/beta_function.tcc + mdp:/usr/include/c++/15/tr1/ell_integral.tcc + mdp:/usr/include/c++/15/tr1/exp_integral.tcc + mdp:/usr/include/c++/15/tr1/gamma.tcc + mdp:/usr/include/c++/15/tr1/hypergeometric.tcc + mdp:/usr/include/c++/15/tr1/legendre_function.tcc + mdp:/usr/include/c++/15/tr1/modified_bessel_func.tcc + mdp:/usr/include/c++/15/tr1/poly_hermite.tcc + mdp:/usr/include/c++/15/tr1/poly_laguerre.tcc + mdp:/usr/include/c++/15/tr1/riemann_zeta.tcc + mdp:/usr/include/c++/15/tr1/special_function_util.h + mdp:/usr/include/c++/15/tuple + mdp:/usr/include/c++/15/type_traits + mdp:/usr/include/c++/15/typeinfo + mdp:/usr/include/c++/15/unordered_map + mdp:/usr/include/c++/15/utility + mdp:/usr/include/c++/15/variant + mdp:/usr/include/c++/15/vector + mdp:/usr/include/c++/15/version + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/atomic_word.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++allocator.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++config.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++locale.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/cpu_defines.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/ctype_base.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/ctype_inline.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/error_constants.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/gthr-default.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/gthr.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/messages_members.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/os_defines.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/time_members.h + mdp:/usr/include/ctype.h + mdp:/usr/include/endian.h + mdp:/usr/include/errno.h + mdp:/usr/include/features-time64.h + mdp:/usr/include/features.h + mdp:/usr/include/gnu/stubs-64.h + mdp:/usr/include/gnu/stubs.h + mdp:/usr/include/libintl.h + mdp:/usr/include/limits.h + mdp:/usr/include/linux/close_range.h + mdp:/usr/include/linux/errno.h + mdp:/usr/include/linux/limits.h + mdp:/usr/include/linux/posix_types.h + mdp:/usr/include/linux/sched/types.h + mdp:/usr/include/linux/stddef.h + mdp:/usr/include/linux/types.h + mdp:/usr/include/locale.h + mdp:/usr/include/pthread.h + mdp:/usr/include/qt6/QtCore/QElapsedTimer + mdp:/usr/include/qt6/QtCore/QObject + mdp:/usr/include/qt6/QtCore/QProcess + mdp:/usr/include/qt6/QtCore/QStringList + mdp:/usr/include/qt6/QtCore/QVector + mdp:/usr/include/qt6/QtCore/q17memory.h + mdp:/usr/include/qt6/QtCore/q20functional.h + mdp:/usr/include/qt6/QtCore/q20iterator.h + mdp:/usr/include/qt6/QtCore/q20memory.h + mdp:/usr/include/qt6/QtCore/q20type_traits.h + mdp:/usr/include/qt6/QtCore/q23type_traits.h + mdp:/usr/include/qt6/QtCore/qalgorithms.h + mdp:/usr/include/qt6/QtCore/qanystringview.h + mdp:/usr/include/qt6/QtCore/qarraydata.h + mdp:/usr/include/qt6/QtCore/qarraydataops.h + mdp:/usr/include/qt6/QtCore/qarraydatapointer.h + mdp:/usr/include/qt6/QtCore/qassert.h + mdp:/usr/include/qt6/QtCore/qatomic.h + mdp:/usr/include/qt6/QtCore/qatomic_cxx11.h + mdp:/usr/include/qt6/QtCore/qbasicatomic.h + mdp:/usr/include/qt6/QtCore/qbindingstorage.h + mdp:/usr/include/qt6/QtCore/qbytearray.h + mdp:/usr/include/qt6/QtCore/qbytearrayalgorithms.h + mdp:/usr/include/qt6/QtCore/qbytearraylist.h + mdp:/usr/include/qt6/QtCore/qbytearrayview.h + mdp:/usr/include/qt6/QtCore/qchar.h + mdp:/usr/include/qt6/QtCore/qcompare.h + mdp:/usr/include/qt6/QtCore/qcompare_impl.h + mdp:/usr/include/qt6/QtCore/qcomparehelpers.h + mdp:/usr/include/qt6/QtCore/qcompilerdetection.h + mdp:/usr/include/qt6/QtCore/qconfig-64.h + mdp:/usr/include/qt6/QtCore/qconfig.h + mdp:/usr/include/qt6/QtCore/qconstructormacros.h + mdp:/usr/include/qt6/QtCore/qcontainerfwd.h + mdp:/usr/include/qt6/QtCore/qcontainerinfo.h + mdp:/usr/include/qt6/QtCore/qcontainertools_impl.h + mdp:/usr/include/qt6/QtCore/qdarwinhelpers.h + mdp:/usr/include/qt6/QtCore/qdatastream.h + mdp:/usr/include/qt6/QtCore/qelapsedtimer.h + mdp:/usr/include/qt6/QtCore/qexceptionhandling.h + mdp:/usr/include/qt6/QtCore/qflags.h + mdp:/usr/include/qt6/QtCore/qfloat16.h + mdp:/usr/include/qt6/QtCore/qforeach.h + mdp:/usr/include/qt6/QtCore/qfunctionaltools_impl.h + mdp:/usr/include/qt6/QtCore/qfunctionpointer.h + mdp:/usr/include/qt6/QtCore/qgenericatomic.h + mdp:/usr/include/qt6/QtCore/qglobal.h + mdp:/usr/include/qt6/QtCore/qglobalstatic.h + mdp:/usr/include/qt6/QtCore/qhashfunctions.h + mdp:/usr/include/qt6/QtCore/qiodevice.h + mdp:/usr/include/qt6/QtCore/qiodevicebase.h + mdp:/usr/include/qt6/QtCore/qiterable.h + mdp:/usr/include/qt6/QtCore/qiterator.h + mdp:/usr/include/qt6/QtCore/qlatin1stringview.h + mdp:/usr/include/qt6/QtCore/qlist.h + mdp:/usr/include/qt6/QtCore/qlogging.h + mdp:/usr/include/qt6/QtCore/qmalloc.h + mdp:/usr/include/qt6/QtCore/qmath.h + mdp:/usr/include/qt6/QtCore/qmetacontainer.h + mdp:/usr/include/qt6/QtCore/qmetatype.h + mdp:/usr/include/qt6/QtCore/qminmax.h + mdp:/usr/include/qt6/QtCore/qnamespace.h + mdp:/usr/include/qt6/QtCore/qnumeric.h + mdp:/usr/include/qt6/QtCore/qobject.h + mdp:/usr/include/qt6/QtCore/qobject_impl.h + mdp:/usr/include/qt6/QtCore/qobjectdefs.h + mdp:/usr/include/qt6/QtCore/qobjectdefs_impl.h + mdp:/usr/include/qt6/QtCore/qoverload.h + mdp:/usr/include/qt6/QtCore/qpair.h + mdp:/usr/include/qt6/QtCore/qprocess.h + mdp:/usr/include/qt6/QtCore/qprocessordetection.h + mdp:/usr/include/qt6/QtCore/qrefcount.h + mdp:/usr/include/qt6/QtCore/qscopedpointer.h + mdp:/usr/include/qt6/QtCore/qscopeguard.h + mdp:/usr/include/qt6/QtCore/qshareddata.h + mdp:/usr/include/qt6/QtCore/qspan.h + mdp:/usr/include/qt6/QtCore/qstdlibdetection.h + mdp:/usr/include/qt6/QtCore/qstring.h + mdp:/usr/include/qt6/QtCore/qstringalgorithms.h + mdp:/usr/include/qt6/QtCore/qstringbuilder.h + mdp:/usr/include/qt6/QtCore/qstringconverter.h + mdp:/usr/include/qt6/QtCore/qstringconverter_base.h + mdp:/usr/include/qt6/QtCore/qstringfwd.h + mdp:/usr/include/qt6/QtCore/qstringlist.h + mdp:/usr/include/qt6/QtCore/qstringmatcher.h + mdp:/usr/include/qt6/QtCore/qstringtokenizer.h + mdp:/usr/include/qt6/QtCore/qstringview.h + mdp:/usr/include/qt6/QtCore/qswap.h + mdp:/usr/include/qt6/QtCore/qsysinfo.h + mdp:/usr/include/qt6/QtCore/qsystemdetection.h + mdp:/usr/include/qt6/QtCore/qtaggedpointer.h + mdp:/usr/include/qt6/QtCore/qtclasshelpermacros.h + mdp:/usr/include/qt6/QtCore/qtconfiginclude.h + mdp:/usr/include/qt6/QtCore/qtconfigmacros.h + mdp:/usr/include/qt6/QtCore/qtcore-config.h + mdp:/usr/include/qt6/QtCore/qtcoreexports.h + mdp:/usr/include/qt6/QtCore/qtcoreglobal.h + mdp:/usr/include/qt6/QtCore/qtdeprecationdefinitions.h + mdp:/usr/include/qt6/QtCore/qtdeprecationmarkers.h + mdp:/usr/include/qt6/QtCore/qtenvironmentvariables.h + mdp:/usr/include/qt6/QtCore/qtformat_impl.h + mdp:/usr/include/qt6/QtCore/qtmetamacros.h + mdp:/usr/include/qt6/QtCore/qtnoop.h + mdp:/usr/include/qt6/QtCore/qtpreprocessorsupport.h + mdp:/usr/include/qt6/QtCore/qtresource.h + mdp:/usr/include/qt6/QtCore/qttranslation.h + mdp:/usr/include/qt6/QtCore/qttypetraits.h + mdp:/usr/include/qt6/QtCore/qtversion.h + mdp:/usr/include/qt6/QtCore/qtversionchecks.h + mdp:/usr/include/qt6/QtCore/qtypeinfo.h + mdp:/usr/include/qt6/QtCore/qtypes.h + mdp:/usr/include/qt6/QtCore/qutf8stringview.h + mdp:/usr/include/qt6/QtCore/qvector.h + mdp:/usr/include/qt6/QtCore/qversiontagging.h + mdp:/usr/include/qt6/QtCore/qxptype_traits.h + mdp:/usr/include/qt6/QtCore/qyieldcpu.h + mdp:/usr/include/sched.h + mdp:/usr/include/stdc-predef.h + mdp:/usr/include/stdint.h + mdp:/usr/include/stdio.h + mdp:/usr/include/stdlib.h + mdp:/usr/include/string.h + mdp:/usr/include/strings.h + mdp:/usr/include/sys/cdefs.h + mdp:/usr/include/sys/select.h + mdp:/usr/include/sys/single_threaded.h + mdp:/usr/include/sys/syscall.h + mdp:/usr/include/sys/types.h + mdp:/usr/include/syscall.h + mdp:/usr/include/time.h + mdp:/usr/include/unistd.h + mdp:/usr/include/wchar.h + mdp:/usr/include/wctype.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stdarg.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stdbool.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stddef.h +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/settings_dialog.h + mmc:Q_OBJECT + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/kassetmanagerqt_autogen/moc_predefs.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/settings_dialog.h + mdp:/usr/include/alloca.h + mdp:/usr/include/asm-generic/bitsperlong.h + mdp:/usr/include/asm-generic/errno-base.h + mdp:/usr/include/asm-generic/errno.h + mdp:/usr/include/asm-generic/int-ll64.h + mdp:/usr/include/asm-generic/posix_types.h + mdp:/usr/include/asm-generic/types.h + mdp:/usr/include/asm/bitsperlong.h + mdp:/usr/include/asm/errno.h + mdp:/usr/include/asm/posix_types.h + mdp:/usr/include/asm/posix_types_64.h + mdp:/usr/include/asm/types.h + mdp:/usr/include/asm/unistd.h + mdp:/usr/include/asm/unistd_64.h + mdp:/usr/include/assert.h + mdp:/usr/include/bits/atomic_wide_counter.h + mdp:/usr/include/bits/byteswap.h + mdp:/usr/include/bits/confname.h + mdp:/usr/include/bits/cpu-set.h + mdp:/usr/include/bits/endian.h + mdp:/usr/include/bits/endianness.h + mdp:/usr/include/bits/environments.h + mdp:/usr/include/bits/errno.h + mdp:/usr/include/bits/floatn-common.h + mdp:/usr/include/bits/floatn.h + mdp:/usr/include/bits/getopt_core.h + mdp:/usr/include/bits/getopt_posix.h + mdp:/usr/include/bits/libc-header-start.h + mdp:/usr/include/bits/local_lim.h + mdp:/usr/include/bits/locale.h + mdp:/usr/include/bits/long-double.h + mdp:/usr/include/bits/posix1_lim.h + mdp:/usr/include/bits/posix2_lim.h + mdp:/usr/include/bits/posix_opt.h + mdp:/usr/include/bits/pthread_stack_min-dynamic.h + mdp:/usr/include/bits/pthreadtypes-arch.h + mdp:/usr/include/bits/pthreadtypes.h + mdp:/usr/include/bits/sched.h + mdp:/usr/include/bits/select.h + mdp:/usr/include/bits/setjmp.h + mdp:/usr/include/bits/stdint-intn.h + mdp:/usr/include/bits/stdint-least.h + mdp:/usr/include/bits/stdint-uintn.h + mdp:/usr/include/bits/stdio_lim.h + mdp:/usr/include/bits/stdlib-float.h + mdp:/usr/include/bits/struct_mutex.h + mdp:/usr/include/bits/struct_rwlock.h + mdp:/usr/include/bits/syscall.h + mdp:/usr/include/bits/thread-shared-types.h + mdp:/usr/include/bits/time.h + mdp:/usr/include/bits/time64.h + mdp:/usr/include/bits/timesize.h + mdp:/usr/include/bits/timex.h + mdp:/usr/include/bits/types.h + mdp:/usr/include/bits/types/FILE.h + mdp:/usr/include/bits/types/__FILE.h + mdp:/usr/include/bits/types/__fpos64_t.h + mdp:/usr/include/bits/types/__fpos_t.h + mdp:/usr/include/bits/types/__locale_t.h + mdp:/usr/include/bits/types/__mbstate_t.h + mdp:/usr/include/bits/types/__sigset_t.h + mdp:/usr/include/bits/types/clock_t.h + mdp:/usr/include/bits/types/clockid_t.h + mdp:/usr/include/bits/types/cookie_io_functions_t.h + mdp:/usr/include/bits/types/error_t.h + mdp:/usr/include/bits/types/locale_t.h + mdp:/usr/include/bits/types/mbstate_t.h + mdp:/usr/include/bits/types/sigset_t.h + mdp:/usr/include/bits/types/struct_FILE.h + mdp:/usr/include/bits/types/struct___jmp_buf_tag.h + mdp:/usr/include/bits/types/struct_itimerspec.h + mdp:/usr/include/bits/types/struct_sched_param.h + mdp:/usr/include/bits/types/struct_timespec.h + mdp:/usr/include/bits/types/struct_timeval.h + mdp:/usr/include/bits/types/struct_tm.h + mdp:/usr/include/bits/types/time_t.h + mdp:/usr/include/bits/types/timer_t.h + mdp:/usr/include/bits/types/wint_t.h + mdp:/usr/include/bits/typesizes.h + mdp:/usr/include/bits/uintn-identity.h + mdp:/usr/include/bits/uio_lim.h + mdp:/usr/include/bits/unistd_ext.h + mdp:/usr/include/bits/waitflags.h + mdp:/usr/include/bits/waitstatus.h + mdp:/usr/include/bits/wchar.h + mdp:/usr/include/bits/wctype-wchar.h + mdp:/usr/include/bits/wordsize.h + mdp:/usr/include/bits/xopen_lim.h + mdp:/usr/include/c++/15/algorithm + mdp:/usr/include/c++/15/array + mdp:/usr/include/c++/15/atomic + mdp:/usr/include/c++/15/backward/auto_ptr.h + mdp:/usr/include/c++/15/backward/binders.h + mdp:/usr/include/c++/15/bit + mdp:/usr/include/c++/15/bits/algorithmfwd.h + mdp:/usr/include/c++/15/bits/align.h + mdp:/usr/include/c++/15/bits/alloc_traits.h + mdp:/usr/include/c++/15/bits/allocated_ptr.h + mdp:/usr/include/c++/15/bits/allocator.h + mdp:/usr/include/c++/15/bits/atomic_base.h + mdp:/usr/include/c++/15/bits/atomic_lockfree_defines.h + mdp:/usr/include/c++/15/bits/atomic_wait.h + mdp:/usr/include/c++/15/bits/basic_ios.h + mdp:/usr/include/c++/15/bits/basic_ios.tcc + mdp:/usr/include/c++/15/bits/basic_string.h + mdp:/usr/include/c++/15/bits/basic_string.tcc + mdp:/usr/include/c++/15/bits/char_traits.h + mdp:/usr/include/c++/15/bits/charconv.h + mdp:/usr/include/c++/15/bits/chrono.h + mdp:/usr/include/c++/15/bits/chrono_io.h + mdp:/usr/include/c++/15/bits/codecvt.h + mdp:/usr/include/c++/15/bits/concept_check.h + mdp:/usr/include/c++/15/bits/cpp_type_traits.h + mdp:/usr/include/c++/15/bits/cxxabi_forced.h + mdp:/usr/include/c++/15/bits/cxxabi_init_exception.h + mdp:/usr/include/c++/15/bits/enable_special_members.h + mdp:/usr/include/c++/15/bits/erase_if.h + mdp:/usr/include/c++/15/bits/exception.h + mdp:/usr/include/c++/15/bits/exception_defines.h + mdp:/usr/include/c++/15/bits/exception_ptr.h + mdp:/usr/include/c++/15/bits/functexcept.h + mdp:/usr/include/c++/15/bits/functional_hash.h + mdp:/usr/include/c++/15/bits/hash_bytes.h + mdp:/usr/include/c++/15/bits/hashtable.h + mdp:/usr/include/c++/15/bits/hashtable_policy.h + mdp:/usr/include/c++/15/bits/invoke.h + mdp:/usr/include/c++/15/bits/ios_base.h + mdp:/usr/include/c++/15/bits/istream.tcc + mdp:/usr/include/c++/15/bits/iterator_concepts.h + mdp:/usr/include/c++/15/bits/list.tcc + mdp:/usr/include/c++/15/bits/locale_classes.h + mdp:/usr/include/c++/15/bits/locale_classes.tcc + mdp:/usr/include/c++/15/bits/locale_conv.h + mdp:/usr/include/c++/15/bits/locale_facets.h + mdp:/usr/include/c++/15/bits/locale_facets.tcc + mdp:/usr/include/c++/15/bits/locale_facets_nonio.h + mdp:/usr/include/c++/15/bits/locale_facets_nonio.tcc + mdp:/usr/include/c++/15/bits/localefwd.h + mdp:/usr/include/c++/15/bits/max_size_type.h + mdp:/usr/include/c++/15/bits/memory_resource.h + mdp:/usr/include/c++/15/bits/memoryfwd.h + mdp:/usr/include/c++/15/bits/move.h + mdp:/usr/include/c++/15/bits/nested_exception.h + mdp:/usr/include/c++/15/bits/new_allocator.h + mdp:/usr/include/c++/15/bits/node_handle.h + mdp:/usr/include/c++/15/bits/ostream.h + mdp:/usr/include/c++/15/bits/ostream.tcc + mdp:/usr/include/c++/15/bits/ostream_insert.h + mdp:/usr/include/c++/15/bits/parse_numbers.h + mdp:/usr/include/c++/15/bits/postypes.h + mdp:/usr/include/c++/15/bits/predefined_ops.h + mdp:/usr/include/c++/15/bits/ptr_traits.h + mdp:/usr/include/c++/15/bits/quoted_string.h + mdp:/usr/include/c++/15/bits/range_access.h + mdp:/usr/include/c++/15/bits/ranges_algo.h + mdp:/usr/include/c++/15/bits/ranges_algobase.h + mdp:/usr/include/c++/15/bits/ranges_base.h + mdp:/usr/include/c++/15/bits/ranges_cmp.h + mdp:/usr/include/c++/15/bits/ranges_uninitialized.h + mdp:/usr/include/c++/15/bits/ranges_util.h + mdp:/usr/include/c++/15/bits/refwrap.h + mdp:/usr/include/c++/15/bits/requires_hosted.h + mdp:/usr/include/c++/15/bits/shared_ptr.h + mdp:/usr/include/c++/15/bits/shared_ptr_atomic.h + mdp:/usr/include/c++/15/bits/shared_ptr_base.h + mdp:/usr/include/c++/15/bits/specfun.h + mdp:/usr/include/c++/15/bits/sstream.tcc + mdp:/usr/include/c++/15/bits/std_abs.h + mdp:/usr/include/c++/15/bits/std_function.h + mdp:/usr/include/c++/15/bits/std_mutex.h + mdp:/usr/include/c++/15/bits/stl_algo.h + mdp:/usr/include/c++/15/bits/stl_algobase.h + mdp:/usr/include/c++/15/bits/stl_bvector.h + mdp:/usr/include/c++/15/bits/stl_construct.h + mdp:/usr/include/c++/15/bits/stl_function.h + mdp:/usr/include/c++/15/bits/stl_heap.h + mdp:/usr/include/c++/15/bits/stl_iterator.h + mdp:/usr/include/c++/15/bits/stl_iterator_base_funcs.h + mdp:/usr/include/c++/15/bits/stl_iterator_base_types.h + mdp:/usr/include/c++/15/bits/stl_list.h + mdp:/usr/include/c++/15/bits/stl_map.h + mdp:/usr/include/c++/15/bits/stl_multimap.h + mdp:/usr/include/c++/15/bits/stl_multiset.h + mdp:/usr/include/c++/15/bits/stl_numeric.h + mdp:/usr/include/c++/15/bits/stl_pair.h + mdp:/usr/include/c++/15/bits/stl_raw_storage_iter.h + mdp:/usr/include/c++/15/bits/stl_relops.h + mdp:/usr/include/c++/15/bits/stl_set.h + mdp:/usr/include/c++/15/bits/stl_tempbuf.h + mdp:/usr/include/c++/15/bits/stl_tree.h + mdp:/usr/include/c++/15/bits/stl_uninitialized.h + mdp:/usr/include/c++/15/bits/stl_vector.h + mdp:/usr/include/c++/15/bits/stream_iterator.h + mdp:/usr/include/c++/15/bits/streambuf.tcc + mdp:/usr/include/c++/15/bits/streambuf_iterator.h + mdp:/usr/include/c++/15/bits/string_view.tcc + mdp:/usr/include/c++/15/bits/stringfwd.h + mdp:/usr/include/c++/15/bits/uniform_int_dist.h + mdp:/usr/include/c++/15/bits/unique_ptr.h + mdp:/usr/include/c++/15/bits/unordered_map.h + mdp:/usr/include/c++/15/bits/unordered_set.h + mdp:/usr/include/c++/15/bits/uses_allocator.h + mdp:/usr/include/c++/15/bits/uses_allocator_args.h + mdp:/usr/include/c++/15/bits/utility.h + mdp:/usr/include/c++/15/bits/vector.tcc + mdp:/usr/include/c++/15/bits/version.h + mdp:/usr/include/c++/15/cassert + mdp:/usr/include/c++/15/cctype + mdp:/usr/include/c++/15/cerrno + mdp:/usr/include/c++/15/charconv + mdp:/usr/include/c++/15/chrono + mdp:/usr/include/c++/15/climits + mdp:/usr/include/c++/15/clocale + mdp:/usr/include/c++/15/cmath + mdp:/usr/include/c++/15/compare + mdp:/usr/include/c++/15/concepts + mdp:/usr/include/c++/15/cstddef + mdp:/usr/include/c++/15/cstdint + mdp:/usr/include/c++/15/cstdio + mdp:/usr/include/c++/15/cstdlib + mdp:/usr/include/c++/15/cstring + mdp:/usr/include/c++/15/ctime + mdp:/usr/include/c++/15/cwchar + mdp:/usr/include/c++/15/cwctype + mdp:/usr/include/c++/15/debug/assertions.h + mdp:/usr/include/c++/15/debug/debug.h + mdp:/usr/include/c++/15/exception + mdp:/usr/include/c++/15/ext/aligned_buffer.h + mdp:/usr/include/c++/15/ext/alloc_traits.h + mdp:/usr/include/c++/15/ext/atomicity.h + mdp:/usr/include/c++/15/ext/concurrence.h + mdp:/usr/include/c++/15/ext/numeric_traits.h + mdp:/usr/include/c++/15/ext/string_conversions.h + mdp:/usr/include/c++/15/ext/type_traits.h + mdp:/usr/include/c++/15/format + mdp:/usr/include/c++/15/functional + mdp:/usr/include/c++/15/initializer_list + mdp:/usr/include/c++/15/iomanip + mdp:/usr/include/c++/15/ios + mdp:/usr/include/c++/15/iosfwd + mdp:/usr/include/c++/15/istream + mdp:/usr/include/c++/15/iterator + mdp:/usr/include/c++/15/limits + mdp:/usr/include/c++/15/list + mdp:/usr/include/c++/15/locale + mdp:/usr/include/c++/15/map + mdp:/usr/include/c++/15/memory + mdp:/usr/include/c++/15/new + mdp:/usr/include/c++/15/numeric + mdp:/usr/include/c++/15/optional + mdp:/usr/include/c++/15/ostream + mdp:/usr/include/c++/15/pstl/execution_defs.h + mdp:/usr/include/c++/15/pstl/glue_numeric_defs.h + mdp:/usr/include/c++/15/pstl/pstl_config.h + mdp:/usr/include/c++/15/ratio + mdp:/usr/include/c++/15/set + mdp:/usr/include/c++/15/sstream + mdp:/usr/include/c++/15/stdexcept + mdp:/usr/include/c++/15/streambuf + mdp:/usr/include/c++/15/string + mdp:/usr/include/c++/15/string_view + mdp:/usr/include/c++/15/system_error + mdp:/usr/include/c++/15/tr1/bessel_function.tcc + mdp:/usr/include/c++/15/tr1/beta_function.tcc + mdp:/usr/include/c++/15/tr1/ell_integral.tcc + mdp:/usr/include/c++/15/tr1/exp_integral.tcc + mdp:/usr/include/c++/15/tr1/gamma.tcc + mdp:/usr/include/c++/15/tr1/hypergeometric.tcc + mdp:/usr/include/c++/15/tr1/legendre_function.tcc + mdp:/usr/include/c++/15/tr1/modified_bessel_func.tcc + mdp:/usr/include/c++/15/tr1/poly_hermite.tcc + mdp:/usr/include/c++/15/tr1/poly_laguerre.tcc + mdp:/usr/include/c++/15/tr1/riemann_zeta.tcc + mdp:/usr/include/c++/15/tr1/special_function_util.h + mdp:/usr/include/c++/15/tuple + mdp:/usr/include/c++/15/type_traits + mdp:/usr/include/c++/15/typeinfo + mdp:/usr/include/c++/15/unordered_map + mdp:/usr/include/c++/15/unordered_set + mdp:/usr/include/c++/15/utility + mdp:/usr/include/c++/15/variant + mdp:/usr/include/c++/15/vector + mdp:/usr/include/c++/15/version + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/atomic_word.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++allocator.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++config.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++locale.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/cpu_defines.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/ctype_base.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/ctype_inline.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/error_constants.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/gthr-default.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/gthr.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/messages_members.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/os_defines.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/time_members.h + mdp:/usr/include/ctype.h + mdp:/usr/include/endian.h + mdp:/usr/include/errno.h + mdp:/usr/include/features-time64.h + mdp:/usr/include/features.h + mdp:/usr/include/gnu/stubs-64.h + mdp:/usr/include/gnu/stubs.h + mdp:/usr/include/libintl.h + mdp:/usr/include/limits.h + mdp:/usr/include/linux/close_range.h + mdp:/usr/include/linux/errno.h + mdp:/usr/include/linux/limits.h + mdp:/usr/include/linux/posix_types.h + mdp:/usr/include/linux/sched/types.h + mdp:/usr/include/linux/stddef.h + mdp:/usr/include/linux/types.h + mdp:/usr/include/locale.h + mdp:/usr/include/pthread.h + mdp:/usr/include/qt6/QtCore/QStringList + mdp:/usr/include/qt6/QtCore/q17memory.h + mdp:/usr/include/qt6/QtCore/q20functional.h + mdp:/usr/include/qt6/QtCore/q20iterator.h + mdp:/usr/include/qt6/QtCore/q20memory.h + mdp:/usr/include/qt6/QtCore/q20type_traits.h + mdp:/usr/include/qt6/QtCore/q20utility.h + mdp:/usr/include/qt6/QtCore/q23type_traits.h + mdp:/usr/include/qt6/QtCore/q23utility.h + mdp:/usr/include/qt6/QtCore/qabstractitemmodel.h + mdp:/usr/include/qt6/QtCore/qalgorithms.h + mdp:/usr/include/qt6/QtCore/qalloc.h + mdp:/usr/include/qt6/QtCore/qanystringview.h + mdp:/usr/include/qt6/QtCore/qarraydata.h + mdp:/usr/include/qt6/QtCore/qarraydataops.h + mdp:/usr/include/qt6/QtCore/qarraydatapointer.h + mdp:/usr/include/qt6/QtCore/qassert.h + mdp:/usr/include/qt6/QtCore/qatomic.h + mdp:/usr/include/qt6/QtCore/qatomic_cxx11.h + mdp:/usr/include/qt6/QtCore/qbasicatomic.h + mdp:/usr/include/qt6/QtCore/qbindingstorage.h + mdp:/usr/include/qt6/QtCore/qbytearray.h + mdp:/usr/include/qt6/QtCore/qbytearrayalgorithms.h + mdp:/usr/include/qt6/QtCore/qbytearraylist.h + mdp:/usr/include/qt6/QtCore/qbytearrayview.h + mdp:/usr/include/qt6/QtCore/qchar.h + mdp:/usr/include/qt6/QtCore/qcheckedint_impl.h + mdp:/usr/include/qt6/QtCore/qcompare.h + mdp:/usr/include/qt6/QtCore/qcompare_impl.h + mdp:/usr/include/qt6/QtCore/qcomparehelpers.h + mdp:/usr/include/qt6/QtCore/qcompilerdetection.h + mdp:/usr/include/qt6/QtCore/qconfig-64.h + mdp:/usr/include/qt6/QtCore/qconfig.h + mdp:/usr/include/qt6/QtCore/qconstructormacros.h + mdp:/usr/include/qt6/QtCore/qcontainerfwd.h + mdp:/usr/include/qt6/QtCore/qcontainerinfo.h + mdp:/usr/include/qt6/QtCore/qcontainertools_impl.h + mdp:/usr/include/qt6/QtCore/qcontiguouscache.h + mdp:/usr/include/qt6/QtCore/qdarwinhelpers.h + mdp:/usr/include/qt6/QtCore/qdatastream.h + mdp:/usr/include/qt6/QtCore/qdebug.h + mdp:/usr/include/qt6/QtCore/qendian.h + mdp:/usr/include/qt6/QtCore/qexceptionhandling.h + mdp:/usr/include/qt6/QtCore/qflags.h + mdp:/usr/include/qt6/QtCore/qfloat16.h + mdp:/usr/include/qt6/QtCore/qforeach.h + mdp:/usr/include/qt6/QtCore/qfunctionaltools_impl.h + mdp:/usr/include/qt6/QtCore/qfunctionpointer.h + mdp:/usr/include/qt6/QtCore/qgenericatomic.h + mdp:/usr/include/qt6/QtCore/qglobal.h + mdp:/usr/include/qt6/QtCore/qglobalstatic.h + mdp:/usr/include/qt6/QtCore/qhash.h + mdp:/usr/include/qt6/QtCore/qhashfunctions.h + mdp:/usr/include/qt6/QtCore/qiodevice.h + mdp:/usr/include/qt6/QtCore/qiodevicebase.h + mdp:/usr/include/qt6/QtCore/qitemselectionmodel.h + mdp:/usr/include/qt6/QtCore/qiterable.h + mdp:/usr/include/qt6/QtCore/qiterator.h + mdp:/usr/include/qt6/QtCore/qlatin1stringview.h + mdp:/usr/include/qt6/QtCore/qline.h + mdp:/usr/include/qt6/QtCore/qlist.h + mdp:/usr/include/qt6/QtCore/qlocale.h + mdp:/usr/include/qt6/QtCore/qlogging.h + mdp:/usr/include/qt6/QtCore/qmalloc.h + mdp:/usr/include/qt6/QtCore/qmap.h + mdp:/usr/include/qt6/QtCore/qmargins.h + mdp:/usr/include/qt6/QtCore/qmath.h + mdp:/usr/include/qt6/QtCore/qmetacontainer.h + mdp:/usr/include/qt6/QtCore/qmetatype.h + mdp:/usr/include/qt6/QtCore/qminmax.h + mdp:/usr/include/qt6/QtCore/qnamespace.h + mdp:/usr/include/qt6/QtCore/qnumeric.h + mdp:/usr/include/qt6/QtCore/qobject.h + mdp:/usr/include/qt6/QtCore/qobject_impl.h + mdp:/usr/include/qt6/QtCore/qobjectdefs.h + mdp:/usr/include/qt6/QtCore/qobjectdefs_impl.h + mdp:/usr/include/qt6/QtCore/qoverload.h + mdp:/usr/include/qt6/QtCore/qpair.h + mdp:/usr/include/qt6/QtCore/qpoint.h + mdp:/usr/include/qt6/QtCore/qprocessordetection.h + mdp:/usr/include/qt6/QtCore/qrect.h + mdp:/usr/include/qt6/QtCore/qrefcount.h + mdp:/usr/include/qt6/QtCore/qregularexpression.h + mdp:/usr/include/qt6/QtCore/qscopedpointer.h + mdp:/usr/include/qt6/QtCore/qscopeguard.h + mdp:/usr/include/qt6/QtCore/qset.h + mdp:/usr/include/qt6/QtCore/qshareddata.h + mdp:/usr/include/qt6/QtCore/qshareddata_impl.h + mdp:/usr/include/qt6/QtCore/qsharedpointer.h + mdp:/usr/include/qt6/QtCore/qsharedpointer_impl.h + mdp:/usr/include/qt6/QtCore/qsize.h + mdp:/usr/include/qt6/QtCore/qspan.h + mdp:/usr/include/qt6/QtCore/qstdlibdetection.h + mdp:/usr/include/qt6/QtCore/qstring.h + mdp:/usr/include/qt6/QtCore/qstringalgorithms.h + mdp:/usr/include/qt6/QtCore/qstringbuilder.h + mdp:/usr/include/qt6/QtCore/qstringconverter.h + mdp:/usr/include/qt6/QtCore/qstringconverter_base.h + mdp:/usr/include/qt6/QtCore/qstringfwd.h + mdp:/usr/include/qt6/QtCore/qstringlist.h + mdp:/usr/include/qt6/QtCore/qstringmatcher.h + mdp:/usr/include/qt6/QtCore/qstringtokenizer.h + mdp:/usr/include/qt6/QtCore/qstringview.h + mdp:/usr/include/qt6/QtCore/qswap.h + mdp:/usr/include/qt6/QtCore/qsysinfo.h + mdp:/usr/include/qt6/QtCore/qsystemdetection.h + mdp:/usr/include/qt6/QtCore/qtaggedpointer.h + mdp:/usr/include/qt6/QtCore/qtclasshelpermacros.h + mdp:/usr/include/qt6/QtCore/qtconfiginclude.h + mdp:/usr/include/qt6/QtCore/qtconfigmacros.h + mdp:/usr/include/qt6/QtCore/qtcore-config.h + mdp:/usr/include/qt6/QtCore/qtcoreexports.h + mdp:/usr/include/qt6/QtCore/qtcoreglobal.h + mdp:/usr/include/qt6/QtCore/qtdeprecationdefinitions.h + mdp:/usr/include/qt6/QtCore/qtdeprecationmarkers.h + mdp:/usr/include/qt6/QtCore/qtenvironmentvariables.h + mdp:/usr/include/qt6/QtCore/qtextstream.h + mdp:/usr/include/qt6/QtCore/qtformat_impl.h + mdp:/usr/include/qt6/QtCore/qtmetamacros.h + mdp:/usr/include/qt6/QtCore/qtnoop.h + mdp:/usr/include/qt6/QtCore/qtpreprocessorsupport.h + mdp:/usr/include/qt6/QtCore/qtresource.h + mdp:/usr/include/qt6/QtCore/qttranslation.h + mdp:/usr/include/qt6/QtCore/qttypetraits.h + mdp:/usr/include/qt6/QtCore/qtversion.h + mdp:/usr/include/qt6/QtCore/qtversionchecks.h + mdp:/usr/include/qt6/QtCore/qtypeinfo.h + mdp:/usr/include/qt6/QtCore/qtypes.h + mdp:/usr/include/qt6/QtCore/qurl.h + mdp:/usr/include/qt6/QtCore/qutf8stringview.h + mdp:/usr/include/qt6/QtCore/qvariant.h + mdp:/usr/include/qt6/QtCore/qvarlengtharray.h + mdp:/usr/include/qt6/QtCore/qversiontagging.h + mdp:/usr/include/qt6/QtCore/qxptype_traits.h + mdp:/usr/include/qt6/QtCore/qyieldcpu.h + mdp:/usr/include/qt6/QtGui/qaction.h + mdp:/usr/include/qt6/QtGui/qbitmap.h + mdp:/usr/include/qt6/QtGui/qbrush.h + mdp:/usr/include/qt6/QtGui/qcolor.h + mdp:/usr/include/qt6/QtGui/qcursor.h + mdp:/usr/include/qt6/QtGui/qfont.h + mdp:/usr/include/qt6/QtGui/qfontinfo.h + mdp:/usr/include/qt6/QtGui/qfontmetrics.h + mdp:/usr/include/qt6/QtGui/qfontvariableaxis.h + mdp:/usr/include/qt6/QtGui/qicon.h + mdp:/usr/include/qt6/QtGui/qimage.h + mdp:/usr/include/qt6/QtGui/qkeysequence.h + mdp:/usr/include/qt6/QtGui/qpaintdevice.h + mdp:/usr/include/qt6/QtGui/qpalette.h + mdp:/usr/include/qt6/QtGui/qpen.h + mdp:/usr/include/qt6/QtGui/qpicture.h + mdp:/usr/include/qt6/QtGui/qpixelformat.h + mdp:/usr/include/qt6/QtGui/qpixmap.h + mdp:/usr/include/qt6/QtGui/qpolygon.h + mdp:/usr/include/qt6/QtGui/qregion.h + mdp:/usr/include/qt6/QtGui/qrgb.h + mdp:/usr/include/qt6/QtGui/qrgba64.h + mdp:/usr/include/qt6/QtGui/qtextcursor.h + mdp:/usr/include/qt6/QtGui/qtextdocument.h + mdp:/usr/include/qt6/QtGui/qtextformat.h + mdp:/usr/include/qt6/QtGui/qtextoption.h + mdp:/usr/include/qt6/QtGui/qtgui-config.h + mdp:/usr/include/qt6/QtGui/qtguiexports.h + mdp:/usr/include/qt6/QtGui/qtguiglobal.h + mdp:/usr/include/qt6/QtGui/qtransform.h + mdp:/usr/include/qt6/QtGui/qvalidator.h + mdp:/usr/include/qt6/QtGui/qwindowdefs.h + mdp:/usr/include/qt6/QtWidgets/QCheckBox + mdp:/usr/include/qt6/QtWidgets/QComboBox + mdp:/usr/include/qt6/QtWidgets/QDialog + mdp:/usr/include/qt6/QtWidgets/QGridLayout + mdp:/usr/include/qt6/QtWidgets/QGroupBox + mdp:/usr/include/qt6/QtWidgets/QHBoxLayout + mdp:/usr/include/qt6/QtWidgets/QKeySequenceEdit + mdp:/usr/include/qt6/QtWidgets/QLabel + mdp:/usr/include/qt6/QtWidgets/QLineEdit + mdp:/usr/include/qt6/QtWidgets/QPushButton + mdp:/usr/include/qt6/QtWidgets/QSpinBox + mdp:/usr/include/qt6/QtWidgets/QTabWidget + mdp:/usr/include/qt6/QtWidgets/QTableWidget + mdp:/usr/include/qt6/QtWidgets/QTextEdit + mdp:/usr/include/qt6/QtWidgets/QVBoxLayout + mdp:/usr/include/qt6/QtWidgets/qabstractbutton.h + mdp:/usr/include/qt6/QtWidgets/qabstractitemdelegate.h + mdp:/usr/include/qt6/QtWidgets/qabstractitemview.h + mdp:/usr/include/qt6/QtWidgets/qabstractscrollarea.h + mdp:/usr/include/qt6/QtWidgets/qabstractslider.h + mdp:/usr/include/qt6/QtWidgets/qabstractspinbox.h + mdp:/usr/include/qt6/QtWidgets/qboxlayout.h + mdp:/usr/include/qt6/QtWidgets/qcheckbox.h + mdp:/usr/include/qt6/QtWidgets/qcombobox.h + mdp:/usr/include/qt6/QtWidgets/qdialog.h + mdp:/usr/include/qt6/QtWidgets/qframe.h + mdp:/usr/include/qt6/QtWidgets/qgridlayout.h + mdp:/usr/include/qt6/QtWidgets/qgroupbox.h + mdp:/usr/include/qt6/QtWidgets/qkeysequenceedit.h + mdp:/usr/include/qt6/QtWidgets/qlabel.h + mdp:/usr/include/qt6/QtWidgets/qlayout.h + mdp:/usr/include/qt6/QtWidgets/qlayoutitem.h + mdp:/usr/include/qt6/QtWidgets/qlineedit.h + mdp:/usr/include/qt6/QtWidgets/qpushbutton.h + mdp:/usr/include/qt6/QtWidgets/qrubberband.h + mdp:/usr/include/qt6/QtWidgets/qsizepolicy.h + mdp:/usr/include/qt6/QtWidgets/qslider.h + mdp:/usr/include/qt6/QtWidgets/qspinbox.h + mdp:/usr/include/qt6/QtWidgets/qstyle.h + mdp:/usr/include/qt6/QtWidgets/qstyleoption.h + mdp:/usr/include/qt6/QtWidgets/qtabbar.h + mdp:/usr/include/qt6/QtWidgets/qtableview.h + mdp:/usr/include/qt6/QtWidgets/qtablewidget.h + mdp:/usr/include/qt6/QtWidgets/qtabwidget.h + mdp:/usr/include/qt6/QtWidgets/qtextedit.h + mdp:/usr/include/qt6/QtWidgets/qtwidgets-config.h + mdp:/usr/include/qt6/QtWidgets/qtwidgetsexports.h + mdp:/usr/include/qt6/QtWidgets/qtwidgetsglobal.h + mdp:/usr/include/qt6/QtWidgets/qwidget.h + mdp:/usr/include/sched.h + mdp:/usr/include/stdc-predef.h + mdp:/usr/include/stdint.h + mdp:/usr/include/stdio.h + mdp:/usr/include/stdlib.h + mdp:/usr/include/string.h + mdp:/usr/include/strings.h + mdp:/usr/include/sys/cdefs.h + mdp:/usr/include/sys/select.h + mdp:/usr/include/sys/single_threaded.h + mdp:/usr/include/sys/syscall.h + mdp:/usr/include/sys/types.h + mdp:/usr/include/syscall.h + mdp:/usr/include/time.h + mdp:/usr/include/unistd.h + mdp:/usr/include/wchar.h + mdp:/usr/include/wctype.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stdarg.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stdbool.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stddef.h +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/fm_item_delegate.cpp +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/media_convert_dialog.h + mmc:Q_OBJECT + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/kassetmanagerqt_autogen/moc_predefs.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/media_convert_dialog.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/media_converter_worker.h + mdp:/usr/include/alloca.h + mdp:/usr/include/asm-generic/bitsperlong.h + mdp:/usr/include/asm-generic/errno-base.h + mdp:/usr/include/asm-generic/errno.h + mdp:/usr/include/asm-generic/int-ll64.h + mdp:/usr/include/asm-generic/posix_types.h + mdp:/usr/include/asm-generic/types.h + mdp:/usr/include/asm/bitsperlong.h + mdp:/usr/include/asm/errno.h + mdp:/usr/include/asm/posix_types.h + mdp:/usr/include/asm/posix_types_64.h + mdp:/usr/include/asm/types.h + mdp:/usr/include/asm/unistd.h + mdp:/usr/include/asm/unistd_64.h + mdp:/usr/include/assert.h + mdp:/usr/include/bits/atomic_wide_counter.h + mdp:/usr/include/bits/byteswap.h + mdp:/usr/include/bits/confname.h + mdp:/usr/include/bits/cpu-set.h + mdp:/usr/include/bits/endian.h + mdp:/usr/include/bits/endianness.h + mdp:/usr/include/bits/environments.h + mdp:/usr/include/bits/errno.h + mdp:/usr/include/bits/floatn-common.h + mdp:/usr/include/bits/floatn.h + mdp:/usr/include/bits/getopt_core.h + mdp:/usr/include/bits/getopt_posix.h + mdp:/usr/include/bits/libc-header-start.h + mdp:/usr/include/bits/local_lim.h + mdp:/usr/include/bits/locale.h + mdp:/usr/include/bits/long-double.h + mdp:/usr/include/bits/posix1_lim.h + mdp:/usr/include/bits/posix2_lim.h + mdp:/usr/include/bits/posix_opt.h + mdp:/usr/include/bits/pthread_stack_min-dynamic.h + mdp:/usr/include/bits/pthreadtypes-arch.h + mdp:/usr/include/bits/pthreadtypes.h + mdp:/usr/include/bits/sched.h + mdp:/usr/include/bits/select.h + mdp:/usr/include/bits/semaphore.h + mdp:/usr/include/bits/setjmp.h + mdp:/usr/include/bits/stdint-intn.h + mdp:/usr/include/bits/stdint-least.h + mdp:/usr/include/bits/stdint-uintn.h + mdp:/usr/include/bits/stdio_lim.h + mdp:/usr/include/bits/stdlib-float.h + mdp:/usr/include/bits/struct_mutex.h + mdp:/usr/include/bits/struct_rwlock.h + mdp:/usr/include/bits/syscall.h + mdp:/usr/include/bits/thread-shared-types.h + mdp:/usr/include/bits/time.h + mdp:/usr/include/bits/time64.h + mdp:/usr/include/bits/timesize.h + mdp:/usr/include/bits/timex.h + mdp:/usr/include/bits/types.h + mdp:/usr/include/bits/types/FILE.h + mdp:/usr/include/bits/types/__FILE.h + mdp:/usr/include/bits/types/__fpos64_t.h + mdp:/usr/include/bits/types/__fpos_t.h + mdp:/usr/include/bits/types/__locale_t.h + mdp:/usr/include/bits/types/__mbstate_t.h + mdp:/usr/include/bits/types/__sigset_t.h + mdp:/usr/include/bits/types/clock_t.h + mdp:/usr/include/bits/types/clockid_t.h + mdp:/usr/include/bits/types/cookie_io_functions_t.h + mdp:/usr/include/bits/types/error_t.h + mdp:/usr/include/bits/types/locale_t.h + mdp:/usr/include/bits/types/mbstate_t.h + mdp:/usr/include/bits/types/sigset_t.h + mdp:/usr/include/bits/types/struct_FILE.h + mdp:/usr/include/bits/types/struct___jmp_buf_tag.h + mdp:/usr/include/bits/types/struct_itimerspec.h + mdp:/usr/include/bits/types/struct_sched_param.h + mdp:/usr/include/bits/types/struct_timespec.h + mdp:/usr/include/bits/types/struct_timeval.h + mdp:/usr/include/bits/types/struct_tm.h + mdp:/usr/include/bits/types/time_t.h + mdp:/usr/include/bits/types/timer_t.h + mdp:/usr/include/bits/types/wint_t.h + mdp:/usr/include/bits/typesizes.h + mdp:/usr/include/bits/uintn-identity.h + mdp:/usr/include/bits/uio_lim.h + mdp:/usr/include/bits/unistd_ext.h + mdp:/usr/include/bits/waitflags.h + mdp:/usr/include/bits/waitstatus.h + mdp:/usr/include/bits/wchar.h + mdp:/usr/include/bits/wctype-wchar.h + mdp:/usr/include/bits/wordsize.h + mdp:/usr/include/bits/xopen_lim.h + mdp:/usr/include/c++/15/algorithm + mdp:/usr/include/c++/15/array + mdp:/usr/include/c++/15/atomic + mdp:/usr/include/c++/15/backward/auto_ptr.h + mdp:/usr/include/c++/15/backward/binders.h + mdp:/usr/include/c++/15/bit + mdp:/usr/include/c++/15/bits/algorithmfwd.h + mdp:/usr/include/c++/15/bits/align.h + mdp:/usr/include/c++/15/bits/alloc_traits.h + mdp:/usr/include/c++/15/bits/allocated_ptr.h + mdp:/usr/include/c++/15/bits/allocator.h + mdp:/usr/include/c++/15/bits/atomic_base.h + mdp:/usr/include/c++/15/bits/atomic_futex.h + mdp:/usr/include/c++/15/bits/atomic_lockfree_defines.h + mdp:/usr/include/c++/15/bits/atomic_timed_wait.h + mdp:/usr/include/c++/15/bits/atomic_wait.h + mdp:/usr/include/c++/15/bits/basic_ios.h + mdp:/usr/include/c++/15/bits/basic_ios.tcc + mdp:/usr/include/c++/15/bits/basic_string.h + mdp:/usr/include/c++/15/bits/basic_string.tcc + mdp:/usr/include/c++/15/bits/char_traits.h + mdp:/usr/include/c++/15/bits/charconv.h + mdp:/usr/include/c++/15/bits/chrono.h + mdp:/usr/include/c++/15/bits/chrono_io.h + mdp:/usr/include/c++/15/bits/codecvt.h + mdp:/usr/include/c++/15/bits/concept_check.h + mdp:/usr/include/c++/15/bits/cpp_type_traits.h + mdp:/usr/include/c++/15/bits/cxxabi_forced.h + mdp:/usr/include/c++/15/bits/cxxabi_init_exception.h + mdp:/usr/include/c++/15/bits/enable_special_members.h + mdp:/usr/include/c++/15/bits/erase_if.h + mdp:/usr/include/c++/15/bits/exception.h + mdp:/usr/include/c++/15/bits/exception_defines.h + mdp:/usr/include/c++/15/bits/exception_ptr.h + mdp:/usr/include/c++/15/bits/functexcept.h + mdp:/usr/include/c++/15/bits/functional_hash.h + mdp:/usr/include/c++/15/bits/hash_bytes.h + mdp:/usr/include/c++/15/bits/hashtable.h + mdp:/usr/include/c++/15/bits/hashtable_policy.h + mdp:/usr/include/c++/15/bits/invoke.h + mdp:/usr/include/c++/15/bits/ios_base.h + mdp:/usr/include/c++/15/bits/istream.tcc + mdp:/usr/include/c++/15/bits/iterator_concepts.h + mdp:/usr/include/c++/15/bits/list.tcc + mdp:/usr/include/c++/15/bits/locale_classes.h + mdp:/usr/include/c++/15/bits/locale_classes.tcc + mdp:/usr/include/c++/15/bits/locale_conv.h + mdp:/usr/include/c++/15/bits/locale_facets.h + mdp:/usr/include/c++/15/bits/locale_facets.tcc + mdp:/usr/include/c++/15/bits/locale_facets_nonio.h + mdp:/usr/include/c++/15/bits/locale_facets_nonio.tcc + mdp:/usr/include/c++/15/bits/localefwd.h + mdp:/usr/include/c++/15/bits/max_size_type.h + mdp:/usr/include/c++/15/bits/memory_resource.h + mdp:/usr/include/c++/15/bits/memoryfwd.h + mdp:/usr/include/c++/15/bits/move.h + mdp:/usr/include/c++/15/bits/nested_exception.h + mdp:/usr/include/c++/15/bits/new_allocator.h + mdp:/usr/include/c++/15/bits/node_handle.h + mdp:/usr/include/c++/15/bits/ostream.h + mdp:/usr/include/c++/15/bits/ostream.tcc + mdp:/usr/include/c++/15/bits/ostream_insert.h + mdp:/usr/include/c++/15/bits/parse_numbers.h + mdp:/usr/include/c++/15/bits/postypes.h + mdp:/usr/include/c++/15/bits/predefined_ops.h + mdp:/usr/include/c++/15/bits/ptr_traits.h + mdp:/usr/include/c++/15/bits/quoted_string.h + mdp:/usr/include/c++/15/bits/range_access.h + mdp:/usr/include/c++/15/bits/ranges_algo.h + mdp:/usr/include/c++/15/bits/ranges_algobase.h + mdp:/usr/include/c++/15/bits/ranges_base.h + mdp:/usr/include/c++/15/bits/ranges_cmp.h + mdp:/usr/include/c++/15/bits/ranges_uninitialized.h + mdp:/usr/include/c++/15/bits/ranges_util.h + mdp:/usr/include/c++/15/bits/refwrap.h + mdp:/usr/include/c++/15/bits/requires_hosted.h + mdp:/usr/include/c++/15/bits/semaphore_base.h + mdp:/usr/include/c++/15/bits/shared_ptr.h + mdp:/usr/include/c++/15/bits/shared_ptr_atomic.h + mdp:/usr/include/c++/15/bits/shared_ptr_base.h + mdp:/usr/include/c++/15/bits/specfun.h + mdp:/usr/include/c++/15/bits/sstream.tcc + mdp:/usr/include/c++/15/bits/std_abs.h + mdp:/usr/include/c++/15/bits/std_function.h + mdp:/usr/include/c++/15/bits/std_mutex.h + mdp:/usr/include/c++/15/bits/std_thread.h + mdp:/usr/include/c++/15/bits/stl_algo.h + mdp:/usr/include/c++/15/bits/stl_algobase.h + mdp:/usr/include/c++/15/bits/stl_bvector.h + mdp:/usr/include/c++/15/bits/stl_construct.h + mdp:/usr/include/c++/15/bits/stl_function.h + mdp:/usr/include/c++/15/bits/stl_heap.h + mdp:/usr/include/c++/15/bits/stl_iterator.h + mdp:/usr/include/c++/15/bits/stl_iterator_base_funcs.h + mdp:/usr/include/c++/15/bits/stl_iterator_base_types.h + mdp:/usr/include/c++/15/bits/stl_list.h + mdp:/usr/include/c++/15/bits/stl_map.h + mdp:/usr/include/c++/15/bits/stl_multimap.h + mdp:/usr/include/c++/15/bits/stl_multiset.h + mdp:/usr/include/c++/15/bits/stl_numeric.h + mdp:/usr/include/c++/15/bits/stl_pair.h + mdp:/usr/include/c++/15/bits/stl_raw_storage_iter.h + mdp:/usr/include/c++/15/bits/stl_relops.h + mdp:/usr/include/c++/15/bits/stl_set.h + mdp:/usr/include/c++/15/bits/stl_tempbuf.h + mdp:/usr/include/c++/15/bits/stl_tree.h + mdp:/usr/include/c++/15/bits/stl_uninitialized.h + mdp:/usr/include/c++/15/bits/stl_vector.h + mdp:/usr/include/c++/15/bits/stream_iterator.h + mdp:/usr/include/c++/15/bits/streambuf.tcc + mdp:/usr/include/c++/15/bits/streambuf_iterator.h + mdp:/usr/include/c++/15/bits/string_view.tcc + mdp:/usr/include/c++/15/bits/stringfwd.h + mdp:/usr/include/c++/15/bits/this_thread_sleep.h + mdp:/usr/include/c++/15/bits/uniform_int_dist.h + mdp:/usr/include/c++/15/bits/unique_lock.h + mdp:/usr/include/c++/15/bits/unique_ptr.h + mdp:/usr/include/c++/15/bits/unordered_map.h + mdp:/usr/include/c++/15/bits/unordered_set.h + mdp:/usr/include/c++/15/bits/uses_allocator.h + mdp:/usr/include/c++/15/bits/uses_allocator_args.h + mdp:/usr/include/c++/15/bits/utility.h + mdp:/usr/include/c++/15/bits/vector.tcc + mdp:/usr/include/c++/15/bits/version.h + mdp:/usr/include/c++/15/cassert + mdp:/usr/include/c++/15/cctype + mdp:/usr/include/c++/15/cerrno + mdp:/usr/include/c++/15/charconv + mdp:/usr/include/c++/15/chrono + mdp:/usr/include/c++/15/climits + mdp:/usr/include/c++/15/clocale + mdp:/usr/include/c++/15/cmath + mdp:/usr/include/c++/15/compare + mdp:/usr/include/c++/15/concepts + mdp:/usr/include/c++/15/condition_variable + mdp:/usr/include/c++/15/cstddef + mdp:/usr/include/c++/15/cstdint + mdp:/usr/include/c++/15/cstdio + mdp:/usr/include/c++/15/cstdlib + mdp:/usr/include/c++/15/cstring + mdp:/usr/include/c++/15/ctime + mdp:/usr/include/c++/15/cwchar + mdp:/usr/include/c++/15/cwctype + mdp:/usr/include/c++/15/debug/assertions.h + mdp:/usr/include/c++/15/debug/debug.h + mdp:/usr/include/c++/15/exception + mdp:/usr/include/c++/15/ext/aligned_buffer.h + mdp:/usr/include/c++/15/ext/alloc_traits.h + mdp:/usr/include/c++/15/ext/atomicity.h + mdp:/usr/include/c++/15/ext/concurrence.h + mdp:/usr/include/c++/15/ext/numeric_traits.h + mdp:/usr/include/c++/15/ext/string_conversions.h + mdp:/usr/include/c++/15/ext/type_traits.h + mdp:/usr/include/c++/15/format + mdp:/usr/include/c++/15/functional + mdp:/usr/include/c++/15/future + mdp:/usr/include/c++/15/initializer_list + mdp:/usr/include/c++/15/iomanip + mdp:/usr/include/c++/15/ios + mdp:/usr/include/c++/15/iosfwd + mdp:/usr/include/c++/15/istream + mdp:/usr/include/c++/15/iterator + mdp:/usr/include/c++/15/limits + mdp:/usr/include/c++/15/list + mdp:/usr/include/c++/15/locale + mdp:/usr/include/c++/15/map + mdp:/usr/include/c++/15/memory + mdp:/usr/include/c++/15/mutex + mdp:/usr/include/c++/15/new + mdp:/usr/include/c++/15/numeric + mdp:/usr/include/c++/15/optional + mdp:/usr/include/c++/15/ostream + mdp:/usr/include/c++/15/pstl/execution_defs.h + mdp:/usr/include/c++/15/pstl/glue_numeric_defs.h + mdp:/usr/include/c++/15/pstl/pstl_config.h + mdp:/usr/include/c++/15/ratio + mdp:/usr/include/c++/15/semaphore + mdp:/usr/include/c++/15/set + mdp:/usr/include/c++/15/sstream + mdp:/usr/include/c++/15/stdexcept + mdp:/usr/include/c++/15/stop_token + mdp:/usr/include/c++/15/streambuf + mdp:/usr/include/c++/15/string + mdp:/usr/include/c++/15/string_view + mdp:/usr/include/c++/15/system_error + mdp:/usr/include/c++/15/tr1/bessel_function.tcc + mdp:/usr/include/c++/15/tr1/beta_function.tcc + mdp:/usr/include/c++/15/tr1/ell_integral.tcc + mdp:/usr/include/c++/15/tr1/exp_integral.tcc + mdp:/usr/include/c++/15/tr1/gamma.tcc + mdp:/usr/include/c++/15/tr1/hypergeometric.tcc + mdp:/usr/include/c++/15/tr1/legendre_function.tcc + mdp:/usr/include/c++/15/tr1/modified_bessel_func.tcc + mdp:/usr/include/c++/15/tr1/poly_hermite.tcc + mdp:/usr/include/c++/15/tr1/poly_laguerre.tcc + mdp:/usr/include/c++/15/tr1/riemann_zeta.tcc + mdp:/usr/include/c++/15/tr1/special_function_util.h + mdp:/usr/include/c++/15/tuple + mdp:/usr/include/c++/15/type_traits + mdp:/usr/include/c++/15/typeinfo + mdp:/usr/include/c++/15/unordered_map + mdp:/usr/include/c++/15/unordered_set + mdp:/usr/include/c++/15/utility + mdp:/usr/include/c++/15/variant + mdp:/usr/include/c++/15/vector + mdp:/usr/include/c++/15/version + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/atomic_word.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++allocator.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++config.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++locale.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/cpu_defines.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/ctype_base.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/ctype_inline.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/error_constants.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/gthr-default.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/gthr.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/messages_members.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/os_defines.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/time_members.h + mdp:/usr/include/ctype.h + mdp:/usr/include/endian.h + mdp:/usr/include/errno.h + mdp:/usr/include/features-time64.h + mdp:/usr/include/features.h + mdp:/usr/include/gnu/stubs-64.h + mdp:/usr/include/gnu/stubs.h + mdp:/usr/include/libintl.h + mdp:/usr/include/limits.h + mdp:/usr/include/linux/close_range.h + mdp:/usr/include/linux/errno.h + mdp:/usr/include/linux/limits.h + mdp:/usr/include/linux/posix_types.h + mdp:/usr/include/linux/sched/types.h + mdp:/usr/include/linux/stddef.h + mdp:/usr/include/linux/types.h + mdp:/usr/include/locale.h + mdp:/usr/include/pthread.h + mdp:/usr/include/qt6/QtCore/QElapsedTimer + mdp:/usr/include/qt6/QtCore/QList + mdp:/usr/include/qt6/QtCore/QObject + mdp:/usr/include/qt6/QtCore/QProcess + mdp:/usr/include/qt6/QtCore/QRect + mdp:/usr/include/qt6/QtCore/QSettings + mdp:/usr/include/qt6/QtCore/QSize + mdp:/usr/include/qt6/QtCore/QSizeF + mdp:/usr/include/qt6/QtCore/QStringList + mdp:/usr/include/qt6/QtCore/QThread + mdp:/usr/include/qt6/QtCore/QVector + mdp:/usr/include/qt6/QtCore/q17memory.h + mdp:/usr/include/qt6/QtCore/q20functional.h + mdp:/usr/include/qt6/QtCore/q20iterator.h + mdp:/usr/include/qt6/QtCore/q20memory.h + mdp:/usr/include/qt6/QtCore/q20type_traits.h + mdp:/usr/include/qt6/QtCore/q20utility.h + mdp:/usr/include/qt6/QtCore/q23type_traits.h + mdp:/usr/include/qt6/QtCore/q23utility.h + mdp:/usr/include/qt6/QtCore/qabstracteventdispatcher.h + mdp:/usr/include/qt6/QtCore/qabstractitemmodel.h + mdp:/usr/include/qt6/QtCore/qalgorithms.h + mdp:/usr/include/qt6/QtCore/qalloc.h + mdp:/usr/include/qt6/QtCore/qanystringview.h + mdp:/usr/include/qt6/QtCore/qarraydata.h + mdp:/usr/include/qt6/QtCore/qarraydataops.h + mdp:/usr/include/qt6/QtCore/qarraydatapointer.h + mdp:/usr/include/qt6/QtCore/qassert.h + mdp:/usr/include/qt6/QtCore/qatomic.h + mdp:/usr/include/qt6/QtCore/qatomic_cxx11.h + mdp:/usr/include/qt6/QtCore/qbasicatomic.h + mdp:/usr/include/qt6/QtCore/qbasictimer.h + mdp:/usr/include/qt6/QtCore/qbindingstorage.h + mdp:/usr/include/qt6/QtCore/qbytearray.h + mdp:/usr/include/qt6/QtCore/qbytearrayalgorithms.h + mdp:/usr/include/qt6/QtCore/qbytearraylist.h + mdp:/usr/include/qt6/QtCore/qbytearrayview.h + mdp:/usr/include/qt6/QtCore/qchar.h + mdp:/usr/include/qt6/QtCore/qcheckedint_impl.h + mdp:/usr/include/qt6/QtCore/qcompare.h + mdp:/usr/include/qt6/QtCore/qcompare_impl.h + mdp:/usr/include/qt6/QtCore/qcomparehelpers.h + mdp:/usr/include/qt6/QtCore/qcompilerdetection.h + mdp:/usr/include/qt6/QtCore/qconfig-64.h + mdp:/usr/include/qt6/QtCore/qconfig.h + mdp:/usr/include/qt6/QtCore/qconstructormacros.h + mdp:/usr/include/qt6/QtCore/qcontainerfwd.h + mdp:/usr/include/qt6/QtCore/qcontainerinfo.h + mdp:/usr/include/qt6/QtCore/qcontainertools_impl.h + mdp:/usr/include/qt6/QtCore/qcontiguouscache.h + mdp:/usr/include/qt6/QtCore/qcoreapplication.h + mdp:/usr/include/qt6/QtCore/qcoreapplication_platform.h + mdp:/usr/include/qt6/QtCore/qcoreevent.h + mdp:/usr/include/qt6/QtCore/qdarwinhelpers.h + mdp:/usr/include/qt6/QtCore/qdatastream.h + mdp:/usr/include/qt6/QtCore/qdeadlinetimer.h + mdp:/usr/include/qt6/QtCore/qdebug.h + mdp:/usr/include/qt6/QtCore/qelapsedtimer.h + mdp:/usr/include/qt6/QtCore/qendian.h + mdp:/usr/include/qt6/QtCore/qeventloop.h + mdp:/usr/include/qt6/QtCore/qexceptionhandling.h + mdp:/usr/include/qt6/QtCore/qflags.h + mdp:/usr/include/qt6/QtCore/qfloat16.h + mdp:/usr/include/qt6/QtCore/qforeach.h + mdp:/usr/include/qt6/QtCore/qfunctionaltools_impl.h + mdp:/usr/include/qt6/QtCore/qfunctionpointer.h + mdp:/usr/include/qt6/QtCore/qgenericatomic.h + mdp:/usr/include/qt6/QtCore/qglobal.h + mdp:/usr/include/qt6/QtCore/qglobalstatic.h + mdp:/usr/include/qt6/QtCore/qhash.h + mdp:/usr/include/qt6/QtCore/qhashfunctions.h + mdp:/usr/include/qt6/QtCore/qiodevice.h + mdp:/usr/include/qt6/QtCore/qiodevicebase.h + mdp:/usr/include/qt6/QtCore/qitemselectionmodel.h + mdp:/usr/include/qt6/QtCore/qiterable.h + mdp:/usr/include/qt6/QtCore/qiterator.h + mdp:/usr/include/qt6/QtCore/qlatin1stringview.h + mdp:/usr/include/qt6/QtCore/qline.h + mdp:/usr/include/qt6/QtCore/qlist.h + mdp:/usr/include/qt6/QtCore/qlocale.h + mdp:/usr/include/qt6/QtCore/qlogging.h + mdp:/usr/include/qt6/QtCore/qmalloc.h + mdp:/usr/include/qt6/QtCore/qmap.h + mdp:/usr/include/qt6/QtCore/qmargins.h + mdp:/usr/include/qt6/QtCore/qmath.h + mdp:/usr/include/qt6/QtCore/qmetacontainer.h + mdp:/usr/include/qt6/QtCore/qmetatype.h + mdp:/usr/include/qt6/QtCore/qminmax.h + mdp:/usr/include/qt6/QtCore/qnamespace.h + mdp:/usr/include/qt6/QtCore/qnativeinterface.h + mdp:/usr/include/qt6/QtCore/qnumeric.h + mdp:/usr/include/qt6/QtCore/qobject.h + mdp:/usr/include/qt6/QtCore/qobject_impl.h + mdp:/usr/include/qt6/QtCore/qobjectdefs.h + mdp:/usr/include/qt6/QtCore/qobjectdefs_impl.h + mdp:/usr/include/qt6/QtCore/qoverload.h + mdp:/usr/include/qt6/QtCore/qpair.h + mdp:/usr/include/qt6/QtCore/qpoint.h + mdp:/usr/include/qt6/QtCore/qprocess.h + mdp:/usr/include/qt6/QtCore/qprocessordetection.h + mdp:/usr/include/qt6/QtCore/qrect.h + mdp:/usr/include/qt6/QtCore/qrefcount.h + mdp:/usr/include/qt6/QtCore/qregularexpression.h + mdp:/usr/include/qt6/QtCore/qscopedpointer.h + mdp:/usr/include/qt6/QtCore/qscopeguard.h + mdp:/usr/include/qt6/QtCore/qset.h + mdp:/usr/include/qt6/QtCore/qsettings.h + mdp:/usr/include/qt6/QtCore/qshareddata.h + mdp:/usr/include/qt6/QtCore/qshareddata_impl.h + mdp:/usr/include/qt6/QtCore/qsharedpointer.h + mdp:/usr/include/qt6/QtCore/qsharedpointer_impl.h + mdp:/usr/include/qt6/QtCore/qsize.h + mdp:/usr/include/qt6/QtCore/qspan.h + mdp:/usr/include/qt6/QtCore/qstdlibdetection.h + mdp:/usr/include/qt6/QtCore/qstring.h + mdp:/usr/include/qt6/QtCore/qstringalgorithms.h + mdp:/usr/include/qt6/QtCore/qstringbuilder.h + mdp:/usr/include/qt6/QtCore/qstringconverter.h + mdp:/usr/include/qt6/QtCore/qstringconverter_base.h + mdp:/usr/include/qt6/QtCore/qstringfwd.h + mdp:/usr/include/qt6/QtCore/qstringlist.h + mdp:/usr/include/qt6/QtCore/qstringmatcher.h + mdp:/usr/include/qt6/QtCore/qstringtokenizer.h + mdp:/usr/include/qt6/QtCore/qstringview.h + mdp:/usr/include/qt6/QtCore/qswap.h + mdp:/usr/include/qt6/QtCore/qsysinfo.h + mdp:/usr/include/qt6/QtCore/qsystemdetection.h + mdp:/usr/include/qt6/QtCore/qtaggedpointer.h + mdp:/usr/include/qt6/QtCore/qtclasshelpermacros.h + mdp:/usr/include/qt6/QtCore/qtconfiginclude.h + mdp:/usr/include/qt6/QtCore/qtconfigmacros.h + mdp:/usr/include/qt6/QtCore/qtcore-config.h + mdp:/usr/include/qt6/QtCore/qtcoreexports.h + mdp:/usr/include/qt6/QtCore/qtcoreglobal.h + mdp:/usr/include/qt6/QtCore/qtdeprecationdefinitions.h + mdp:/usr/include/qt6/QtCore/qtdeprecationmarkers.h + mdp:/usr/include/qt6/QtCore/qtenvironmentvariables.h + mdp:/usr/include/qt6/QtCore/qtextstream.h + mdp:/usr/include/qt6/QtCore/qtformat_impl.h + mdp:/usr/include/qt6/QtCore/qthread.h + mdp:/usr/include/qt6/QtCore/qtmetamacros.h + mdp:/usr/include/qt6/QtCore/qtnoop.h + mdp:/usr/include/qt6/QtCore/qtpreprocessorsupport.h + mdp:/usr/include/qt6/QtCore/qtresource.h + mdp:/usr/include/qt6/QtCore/qttranslation.h + mdp:/usr/include/qt6/QtCore/qttypetraits.h + mdp:/usr/include/qt6/QtCore/qtversion.h + mdp:/usr/include/qt6/QtCore/qtversionchecks.h + mdp:/usr/include/qt6/QtCore/qtypeinfo.h + mdp:/usr/include/qt6/QtCore/qtypes.h + mdp:/usr/include/qt6/QtCore/qurl.h + mdp:/usr/include/qt6/QtCore/qutf8stringview.h + mdp:/usr/include/qt6/QtCore/qvariant.h + mdp:/usr/include/qt6/QtCore/qvarlengtharray.h + mdp:/usr/include/qt6/QtCore/qvector.h + mdp:/usr/include/qt6/QtCore/qversiontagging.h + mdp:/usr/include/qt6/QtCore/qxptype_traits.h + mdp:/usr/include/qt6/QtCore/qyieldcpu.h + mdp:/usr/include/qt6/QtGui/QTransform + mdp:/usr/include/qt6/QtGui/qabstracttextdocumentlayout.h + mdp:/usr/include/qt6/QtGui/qaction.h + mdp:/usr/include/qt6/QtGui/qbitmap.h + mdp:/usr/include/qt6/QtGui/qbrush.h + mdp:/usr/include/qt6/QtGui/qcolor.h + mdp:/usr/include/qt6/QtGui/qcursor.h + mdp:/usr/include/qt6/QtGui/qevent.h + mdp:/usr/include/qt6/QtGui/qeventpoint.h + mdp:/usr/include/qt6/QtGui/qfont.h + mdp:/usr/include/qt6/QtGui/qfontdatabase.h + mdp:/usr/include/qt6/QtGui/qfontinfo.h + mdp:/usr/include/qt6/QtGui/qfontmetrics.h + mdp:/usr/include/qt6/QtGui/qfontvariableaxis.h + mdp:/usr/include/qt6/QtGui/qglyphrun.h + mdp:/usr/include/qt6/QtGui/qguiapplication.h + mdp:/usr/include/qt6/QtGui/qguiapplication_platform.h + mdp:/usr/include/qt6/QtGui/qicon.h + mdp:/usr/include/qt6/QtGui/qimage.h + mdp:/usr/include/qt6/QtGui/qinputdevice.h + mdp:/usr/include/qt6/QtGui/qinputmethod.h + mdp:/usr/include/qt6/QtGui/qkeysequence.h + mdp:/usr/include/qt6/QtGui/qpaintdevice.h + mdp:/usr/include/qt6/QtGui/qpalette.h + mdp:/usr/include/qt6/QtGui/qpen.h + mdp:/usr/include/qt6/QtGui/qpicture.h + mdp:/usr/include/qt6/QtGui/qpixelformat.h + mdp:/usr/include/qt6/QtGui/qpixmap.h + mdp:/usr/include/qt6/QtGui/qpointingdevice.h + mdp:/usr/include/qt6/QtGui/qpolygon.h + mdp:/usr/include/qt6/QtGui/qrawfont.h + mdp:/usr/include/qt6/QtGui/qregion.h + mdp:/usr/include/qt6/QtGui/qrgb.h + mdp:/usr/include/qt6/QtGui/qrgba64.h + mdp:/usr/include/qt6/QtGui/qscreen.h + mdp:/usr/include/qt6/QtGui/qscreen_platform.h + mdp:/usr/include/qt6/QtGui/qtextcursor.h + mdp:/usr/include/qt6/QtGui/qtextdocument.h + mdp:/usr/include/qt6/QtGui/qtextformat.h + mdp:/usr/include/qt6/QtGui/qtextlayout.h + mdp:/usr/include/qt6/QtGui/qtextoption.h + mdp:/usr/include/qt6/QtGui/qtgui-config.h + mdp:/usr/include/qt6/QtGui/qtguiexports.h + mdp:/usr/include/qt6/QtGui/qtguiglobal.h + mdp:/usr/include/qt6/QtGui/qtransform.h + mdp:/usr/include/qt6/QtGui/qvalidator.h + mdp:/usr/include/qt6/QtGui/qvector2d.h + mdp:/usr/include/qt6/QtGui/qvectornd.h + mdp:/usr/include/qt6/QtGui/qwindowdefs.h + mdp:/usr/include/qt6/QtWidgets/QCheckBox + mdp:/usr/include/qt6/QtWidgets/QComboBox + mdp:/usr/include/qt6/QtWidgets/QDialog + mdp:/usr/include/qt6/QtWidgets/QLabel + mdp:/usr/include/qt6/QtWidgets/QLineEdit + mdp:/usr/include/qt6/QtWidgets/QListWidget + mdp:/usr/include/qt6/QtWidgets/QPlainTextEdit + mdp:/usr/include/qt6/QtWidgets/QProgressBar + mdp:/usr/include/qt6/QtWidgets/QPushButton + mdp:/usr/include/qt6/QtWidgets/QSpinBox + mdp:/usr/include/qt6/QtWidgets/QStackedWidget + mdp:/usr/include/qt6/QtWidgets/QToolButton + mdp:/usr/include/qt6/QtWidgets/qabstractbutton.h + mdp:/usr/include/qt6/QtWidgets/qabstractitemdelegate.h + mdp:/usr/include/qt6/QtWidgets/qabstractitemview.h + mdp:/usr/include/qt6/QtWidgets/qabstractscrollarea.h + mdp:/usr/include/qt6/QtWidgets/qabstractslider.h + mdp:/usr/include/qt6/QtWidgets/qabstractspinbox.h + mdp:/usr/include/qt6/QtWidgets/qcheckbox.h + mdp:/usr/include/qt6/QtWidgets/qcombobox.h + mdp:/usr/include/qt6/QtWidgets/qdialog.h + mdp:/usr/include/qt6/QtWidgets/qframe.h + mdp:/usr/include/qt6/QtWidgets/qlabel.h + mdp:/usr/include/qt6/QtWidgets/qlineedit.h + mdp:/usr/include/qt6/QtWidgets/qlistview.h + mdp:/usr/include/qt6/QtWidgets/qlistwidget.h + mdp:/usr/include/qt6/QtWidgets/qplaintextedit.h + mdp:/usr/include/qt6/QtWidgets/qprogressbar.h + mdp:/usr/include/qt6/QtWidgets/qpushbutton.h + mdp:/usr/include/qt6/QtWidgets/qrubberband.h + mdp:/usr/include/qt6/QtWidgets/qsizepolicy.h + mdp:/usr/include/qt6/QtWidgets/qslider.h + mdp:/usr/include/qt6/QtWidgets/qspinbox.h + mdp:/usr/include/qt6/QtWidgets/qstackedwidget.h + mdp:/usr/include/qt6/QtWidgets/qstyle.h + mdp:/usr/include/qt6/QtWidgets/qstyleoption.h + mdp:/usr/include/qt6/QtWidgets/qtabbar.h + mdp:/usr/include/qt6/QtWidgets/qtabwidget.h + mdp:/usr/include/qt6/QtWidgets/qtextedit.h + mdp:/usr/include/qt6/QtWidgets/qtoolbutton.h + mdp:/usr/include/qt6/QtWidgets/qtwidgets-config.h + mdp:/usr/include/qt6/QtWidgets/qtwidgetsexports.h + mdp:/usr/include/qt6/QtWidgets/qtwidgetsglobal.h + mdp:/usr/include/qt6/QtWidgets/qwidget.h + mdp:/usr/include/sched.h + mdp:/usr/include/semaphore.h + mdp:/usr/include/stdc-predef.h + mdp:/usr/include/stdint.h + mdp:/usr/include/stdio.h + mdp:/usr/include/stdlib.h + mdp:/usr/include/string.h + mdp:/usr/include/strings.h + mdp:/usr/include/sys/cdefs.h + mdp:/usr/include/sys/select.h + mdp:/usr/include/sys/single_threaded.h + mdp:/usr/include/sys/syscall.h + mdp:/usr/include/sys/time.h + mdp:/usr/include/sys/types.h + mdp:/usr/include/syscall.h + mdp:/usr/include/time.h + mdp:/usr/include/unistd.h + mdp:/usr/include/wchar.h + mdp:/usr/include/wctype.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stdarg.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stdbool.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stddef.h +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/project_folder_watcher.cpp +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/log_manager.cpp +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/scrub_frame_registry.cpp +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/sequence_grouping_proxy_model.cpp +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/project_db.h + mmc:Q_OBJECT + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/kassetmanagerqt_autogen/moc_predefs.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/i_asset_database.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/project_db.h + mdp:/usr/include/alloca.h + mdp:/usr/include/asm-generic/bitsperlong.h + mdp:/usr/include/asm-generic/errno-base.h + mdp:/usr/include/asm-generic/errno.h + mdp:/usr/include/asm-generic/int-ll64.h + mdp:/usr/include/asm-generic/posix_types.h + mdp:/usr/include/asm-generic/types.h + mdp:/usr/include/asm/bitsperlong.h + mdp:/usr/include/asm/errno.h + mdp:/usr/include/asm/posix_types.h + mdp:/usr/include/asm/posix_types_64.h + mdp:/usr/include/asm/types.h + mdp:/usr/include/asm/unistd.h + mdp:/usr/include/asm/unistd_64.h + mdp:/usr/include/assert.h + mdp:/usr/include/bits/atomic_wide_counter.h + mdp:/usr/include/bits/byteswap.h + mdp:/usr/include/bits/confname.h + mdp:/usr/include/bits/cpu-set.h + mdp:/usr/include/bits/endian.h + mdp:/usr/include/bits/endianness.h + mdp:/usr/include/bits/environments.h + mdp:/usr/include/bits/errno.h + mdp:/usr/include/bits/floatn-common.h + mdp:/usr/include/bits/floatn.h + mdp:/usr/include/bits/getopt_core.h + mdp:/usr/include/bits/getopt_posix.h + mdp:/usr/include/bits/libc-header-start.h + mdp:/usr/include/bits/local_lim.h + mdp:/usr/include/bits/locale.h + mdp:/usr/include/bits/long-double.h + mdp:/usr/include/bits/posix1_lim.h + mdp:/usr/include/bits/posix2_lim.h + mdp:/usr/include/bits/posix_opt.h + mdp:/usr/include/bits/pthread_stack_min-dynamic.h + mdp:/usr/include/bits/pthreadtypes-arch.h + mdp:/usr/include/bits/pthreadtypes.h + mdp:/usr/include/bits/sched.h + mdp:/usr/include/bits/select.h + mdp:/usr/include/bits/setjmp.h + mdp:/usr/include/bits/stdint-intn.h + mdp:/usr/include/bits/stdint-least.h + mdp:/usr/include/bits/stdint-uintn.h + mdp:/usr/include/bits/stdio_lim.h + mdp:/usr/include/bits/stdlib-float.h + mdp:/usr/include/bits/struct_mutex.h + mdp:/usr/include/bits/struct_rwlock.h + mdp:/usr/include/bits/syscall.h + mdp:/usr/include/bits/thread-shared-types.h + mdp:/usr/include/bits/time.h + mdp:/usr/include/bits/time64.h + mdp:/usr/include/bits/timesize.h + mdp:/usr/include/bits/timex.h + mdp:/usr/include/bits/types.h + mdp:/usr/include/bits/types/FILE.h + mdp:/usr/include/bits/types/__FILE.h + mdp:/usr/include/bits/types/__fpos64_t.h + mdp:/usr/include/bits/types/__fpos_t.h + mdp:/usr/include/bits/types/__locale_t.h + mdp:/usr/include/bits/types/__mbstate_t.h + mdp:/usr/include/bits/types/__sigset_t.h + mdp:/usr/include/bits/types/clock_t.h + mdp:/usr/include/bits/types/clockid_t.h + mdp:/usr/include/bits/types/cookie_io_functions_t.h + mdp:/usr/include/bits/types/error_t.h + mdp:/usr/include/bits/types/locale_t.h + mdp:/usr/include/bits/types/mbstate_t.h + mdp:/usr/include/bits/types/sigset_t.h + mdp:/usr/include/bits/types/struct_FILE.h + mdp:/usr/include/bits/types/struct___jmp_buf_tag.h + mdp:/usr/include/bits/types/struct_itimerspec.h + mdp:/usr/include/bits/types/struct_sched_param.h + mdp:/usr/include/bits/types/struct_timespec.h + mdp:/usr/include/bits/types/struct_timeval.h + mdp:/usr/include/bits/types/struct_tm.h + mdp:/usr/include/bits/types/time_t.h + mdp:/usr/include/bits/types/timer_t.h + mdp:/usr/include/bits/types/wint_t.h + mdp:/usr/include/bits/typesizes.h + mdp:/usr/include/bits/uintn-identity.h + mdp:/usr/include/bits/uio_lim.h + mdp:/usr/include/bits/unistd_ext.h + mdp:/usr/include/bits/waitflags.h + mdp:/usr/include/bits/waitstatus.h + mdp:/usr/include/bits/wchar.h + mdp:/usr/include/bits/wctype-wchar.h + mdp:/usr/include/bits/wordsize.h + mdp:/usr/include/bits/xopen_lim.h + mdp:/usr/include/c++/15/algorithm + mdp:/usr/include/c++/15/array + mdp:/usr/include/c++/15/atomic + mdp:/usr/include/c++/15/backward/auto_ptr.h + mdp:/usr/include/c++/15/backward/binders.h + mdp:/usr/include/c++/15/bit + mdp:/usr/include/c++/15/bits/algorithmfwd.h + mdp:/usr/include/c++/15/bits/align.h + mdp:/usr/include/c++/15/bits/alloc_traits.h + mdp:/usr/include/c++/15/bits/allocated_ptr.h + mdp:/usr/include/c++/15/bits/allocator.h + mdp:/usr/include/c++/15/bits/atomic_base.h + mdp:/usr/include/c++/15/bits/atomic_lockfree_defines.h + mdp:/usr/include/c++/15/bits/atomic_wait.h + mdp:/usr/include/c++/15/bits/basic_ios.h + mdp:/usr/include/c++/15/bits/basic_ios.tcc + mdp:/usr/include/c++/15/bits/basic_string.h + mdp:/usr/include/c++/15/bits/basic_string.tcc + mdp:/usr/include/c++/15/bits/char_traits.h + mdp:/usr/include/c++/15/bits/charconv.h + mdp:/usr/include/c++/15/bits/chrono.h + mdp:/usr/include/c++/15/bits/chrono_io.h + mdp:/usr/include/c++/15/bits/codecvt.h + mdp:/usr/include/c++/15/bits/concept_check.h + mdp:/usr/include/c++/15/bits/cpp_type_traits.h + mdp:/usr/include/c++/15/bits/cxxabi_forced.h + mdp:/usr/include/c++/15/bits/cxxabi_init_exception.h + mdp:/usr/include/c++/15/bits/enable_special_members.h + mdp:/usr/include/c++/15/bits/erase_if.h + mdp:/usr/include/c++/15/bits/exception.h + mdp:/usr/include/c++/15/bits/exception_defines.h + mdp:/usr/include/c++/15/bits/exception_ptr.h + mdp:/usr/include/c++/15/bits/functexcept.h + mdp:/usr/include/c++/15/bits/functional_hash.h + mdp:/usr/include/c++/15/bits/hash_bytes.h + mdp:/usr/include/c++/15/bits/hashtable.h + mdp:/usr/include/c++/15/bits/hashtable_policy.h + mdp:/usr/include/c++/15/bits/invoke.h + mdp:/usr/include/c++/15/bits/ios_base.h + mdp:/usr/include/c++/15/bits/istream.tcc + mdp:/usr/include/c++/15/bits/iterator_concepts.h + mdp:/usr/include/c++/15/bits/list.tcc + mdp:/usr/include/c++/15/bits/locale_classes.h + mdp:/usr/include/c++/15/bits/locale_classes.tcc + mdp:/usr/include/c++/15/bits/locale_conv.h + mdp:/usr/include/c++/15/bits/locale_facets.h + mdp:/usr/include/c++/15/bits/locale_facets.tcc + mdp:/usr/include/c++/15/bits/locale_facets_nonio.h + mdp:/usr/include/c++/15/bits/locale_facets_nonio.tcc + mdp:/usr/include/c++/15/bits/localefwd.h + mdp:/usr/include/c++/15/bits/max_size_type.h + mdp:/usr/include/c++/15/bits/memory_resource.h + mdp:/usr/include/c++/15/bits/memoryfwd.h + mdp:/usr/include/c++/15/bits/move.h + mdp:/usr/include/c++/15/bits/nested_exception.h + mdp:/usr/include/c++/15/bits/new_allocator.h + mdp:/usr/include/c++/15/bits/node_handle.h + mdp:/usr/include/c++/15/bits/ostream.h + mdp:/usr/include/c++/15/bits/ostream.tcc + mdp:/usr/include/c++/15/bits/ostream_insert.h + mdp:/usr/include/c++/15/bits/parse_numbers.h + mdp:/usr/include/c++/15/bits/postypes.h + mdp:/usr/include/c++/15/bits/predefined_ops.h + mdp:/usr/include/c++/15/bits/ptr_traits.h + mdp:/usr/include/c++/15/bits/quoted_string.h + mdp:/usr/include/c++/15/bits/range_access.h + mdp:/usr/include/c++/15/bits/ranges_algo.h + mdp:/usr/include/c++/15/bits/ranges_algobase.h + mdp:/usr/include/c++/15/bits/ranges_base.h + mdp:/usr/include/c++/15/bits/ranges_cmp.h + mdp:/usr/include/c++/15/bits/ranges_uninitialized.h + mdp:/usr/include/c++/15/bits/ranges_util.h + mdp:/usr/include/c++/15/bits/refwrap.h + mdp:/usr/include/c++/15/bits/requires_hosted.h + mdp:/usr/include/c++/15/bits/shared_ptr.h + mdp:/usr/include/c++/15/bits/shared_ptr_atomic.h + mdp:/usr/include/c++/15/bits/shared_ptr_base.h + mdp:/usr/include/c++/15/bits/specfun.h + mdp:/usr/include/c++/15/bits/sstream.tcc + mdp:/usr/include/c++/15/bits/std_abs.h + mdp:/usr/include/c++/15/bits/std_function.h + mdp:/usr/include/c++/15/bits/std_mutex.h + mdp:/usr/include/c++/15/bits/stl_algo.h + mdp:/usr/include/c++/15/bits/stl_algobase.h + mdp:/usr/include/c++/15/bits/stl_bvector.h + mdp:/usr/include/c++/15/bits/stl_construct.h + mdp:/usr/include/c++/15/bits/stl_function.h + mdp:/usr/include/c++/15/bits/stl_heap.h + mdp:/usr/include/c++/15/bits/stl_iterator.h + mdp:/usr/include/c++/15/bits/stl_iterator_base_funcs.h + mdp:/usr/include/c++/15/bits/stl_iterator_base_types.h + mdp:/usr/include/c++/15/bits/stl_list.h + mdp:/usr/include/c++/15/bits/stl_map.h + mdp:/usr/include/c++/15/bits/stl_multimap.h + mdp:/usr/include/c++/15/bits/stl_multiset.h + mdp:/usr/include/c++/15/bits/stl_numeric.h + mdp:/usr/include/c++/15/bits/stl_pair.h + mdp:/usr/include/c++/15/bits/stl_raw_storage_iter.h + mdp:/usr/include/c++/15/bits/stl_relops.h + mdp:/usr/include/c++/15/bits/stl_set.h + mdp:/usr/include/c++/15/bits/stl_tempbuf.h + mdp:/usr/include/c++/15/bits/stl_tree.h + mdp:/usr/include/c++/15/bits/stl_uninitialized.h + mdp:/usr/include/c++/15/bits/stl_vector.h + mdp:/usr/include/c++/15/bits/stream_iterator.h + mdp:/usr/include/c++/15/bits/streambuf.tcc + mdp:/usr/include/c++/15/bits/streambuf_iterator.h + mdp:/usr/include/c++/15/bits/string_view.tcc + mdp:/usr/include/c++/15/bits/stringfwd.h + mdp:/usr/include/c++/15/bits/uniform_int_dist.h + mdp:/usr/include/c++/15/bits/unique_ptr.h + mdp:/usr/include/c++/15/bits/unordered_map.h + mdp:/usr/include/c++/15/bits/unordered_set.h + mdp:/usr/include/c++/15/bits/uses_allocator.h + mdp:/usr/include/c++/15/bits/uses_allocator_args.h + mdp:/usr/include/c++/15/bits/utility.h + mdp:/usr/include/c++/15/bits/vector.tcc + mdp:/usr/include/c++/15/bits/version.h + mdp:/usr/include/c++/15/cassert + mdp:/usr/include/c++/15/cctype + mdp:/usr/include/c++/15/cerrno + mdp:/usr/include/c++/15/charconv + mdp:/usr/include/c++/15/chrono + mdp:/usr/include/c++/15/climits + mdp:/usr/include/c++/15/clocale + mdp:/usr/include/c++/15/cmath + mdp:/usr/include/c++/15/compare + mdp:/usr/include/c++/15/concepts + mdp:/usr/include/c++/15/cstddef + mdp:/usr/include/c++/15/cstdint + mdp:/usr/include/c++/15/cstdio + mdp:/usr/include/c++/15/cstdlib + mdp:/usr/include/c++/15/cstring + mdp:/usr/include/c++/15/ctime + mdp:/usr/include/c++/15/cwchar + mdp:/usr/include/c++/15/cwctype + mdp:/usr/include/c++/15/debug/assertions.h + mdp:/usr/include/c++/15/debug/debug.h + mdp:/usr/include/c++/15/exception + mdp:/usr/include/c++/15/ext/aligned_buffer.h + mdp:/usr/include/c++/15/ext/alloc_traits.h + mdp:/usr/include/c++/15/ext/atomicity.h + mdp:/usr/include/c++/15/ext/concurrence.h + mdp:/usr/include/c++/15/ext/numeric_traits.h + mdp:/usr/include/c++/15/ext/string_conversions.h + mdp:/usr/include/c++/15/ext/type_traits.h + mdp:/usr/include/c++/15/filesystem + mdp:/usr/include/c++/15/format + mdp:/usr/include/c++/15/functional + mdp:/usr/include/c++/15/initializer_list + mdp:/usr/include/c++/15/iomanip + mdp:/usr/include/c++/15/ios + mdp:/usr/include/c++/15/iosfwd + mdp:/usr/include/c++/15/istream + mdp:/usr/include/c++/15/iterator + mdp:/usr/include/c++/15/limits + mdp:/usr/include/c++/15/list + mdp:/usr/include/c++/15/locale + mdp:/usr/include/c++/15/map + mdp:/usr/include/c++/15/memory + mdp:/usr/include/c++/15/new + mdp:/usr/include/c++/15/numeric + mdp:/usr/include/c++/15/optional + mdp:/usr/include/c++/15/ostream + mdp:/usr/include/c++/15/pstl/execution_defs.h + mdp:/usr/include/c++/15/pstl/glue_numeric_defs.h + mdp:/usr/include/c++/15/pstl/pstl_config.h + mdp:/usr/include/c++/15/ratio + mdp:/usr/include/c++/15/set + mdp:/usr/include/c++/15/sstream + mdp:/usr/include/c++/15/stdexcept + mdp:/usr/include/c++/15/streambuf + mdp:/usr/include/c++/15/string + mdp:/usr/include/c++/15/string_view + mdp:/usr/include/c++/15/system_error + mdp:/usr/include/c++/15/tr1/bessel_function.tcc + mdp:/usr/include/c++/15/tr1/beta_function.tcc + mdp:/usr/include/c++/15/tr1/ell_integral.tcc + mdp:/usr/include/c++/15/tr1/exp_integral.tcc + mdp:/usr/include/c++/15/tr1/gamma.tcc + mdp:/usr/include/c++/15/tr1/hypergeometric.tcc + mdp:/usr/include/c++/15/tr1/legendre_function.tcc + mdp:/usr/include/c++/15/tr1/modified_bessel_func.tcc + mdp:/usr/include/c++/15/tr1/poly_hermite.tcc + mdp:/usr/include/c++/15/tr1/poly_laguerre.tcc + mdp:/usr/include/c++/15/tr1/riemann_zeta.tcc + mdp:/usr/include/c++/15/tr1/special_function_util.h + mdp:/usr/include/c++/15/tuple + mdp:/usr/include/c++/15/type_traits + mdp:/usr/include/c++/15/typeinfo + mdp:/usr/include/c++/15/unordered_map + mdp:/usr/include/c++/15/unordered_set + mdp:/usr/include/c++/15/utility + mdp:/usr/include/c++/15/variant + mdp:/usr/include/c++/15/vector + mdp:/usr/include/c++/15/version + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/atomic_word.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++allocator.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++config.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++locale.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/cpu_defines.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/ctype_base.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/ctype_inline.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/error_constants.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/gthr-default.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/gthr.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/messages_members.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/os_defines.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/time_members.h + mdp:/usr/include/ctype.h + mdp:/usr/include/endian.h + mdp:/usr/include/errno.h + mdp:/usr/include/features-time64.h + mdp:/usr/include/features.h + mdp:/usr/include/gnu/stubs-64.h + mdp:/usr/include/gnu/stubs.h + mdp:/usr/include/libintl.h + mdp:/usr/include/limits.h + mdp:/usr/include/linux/close_range.h + mdp:/usr/include/linux/errno.h + mdp:/usr/include/linux/limits.h + mdp:/usr/include/linux/posix_types.h + mdp:/usr/include/linux/sched/types.h + mdp:/usr/include/linux/stddef.h + mdp:/usr/include/linux/types.h + mdp:/usr/include/locale.h + mdp:/usr/include/pthread.h + mdp:/usr/include/qt6/QtCore/QDateTime + mdp:/usr/include/qt6/QtCore/QFileInfo + mdp:/usr/include/qt6/QtCore/QHash + mdp:/usr/include/qt6/QtCore/QObject + mdp:/usr/include/qt6/QtCore/QString + mdp:/usr/include/qt6/QtCore/QStringList + mdp:/usr/include/qt6/QtCore/QVariant + mdp:/usr/include/qt6/QtCore/QVector + mdp:/usr/include/qt6/QtCore/q17memory.h + mdp:/usr/include/qt6/QtCore/q20functional.h + mdp:/usr/include/qt6/QtCore/q20iterator.h + mdp:/usr/include/qt6/QtCore/q20memory.h + mdp:/usr/include/qt6/QtCore/q20type_traits.h + mdp:/usr/include/qt6/QtCore/q20utility.h + mdp:/usr/include/qt6/QtCore/q23type_traits.h + mdp:/usr/include/qt6/QtCore/q23utility.h + mdp:/usr/include/qt6/QtCore/qalgorithms.h + mdp:/usr/include/qt6/QtCore/qalloc.h + mdp:/usr/include/qt6/QtCore/qanystringview.h + mdp:/usr/include/qt6/QtCore/qarraydata.h + mdp:/usr/include/qt6/QtCore/qarraydataops.h + mdp:/usr/include/qt6/QtCore/qarraydatapointer.h + mdp:/usr/include/qt6/QtCore/qassert.h + mdp:/usr/include/qt6/QtCore/qatomic.h + mdp:/usr/include/qt6/QtCore/qatomic_cxx11.h + mdp:/usr/include/qt6/QtCore/qbasicatomic.h + mdp:/usr/include/qt6/QtCore/qbindingstorage.h + mdp:/usr/include/qt6/QtCore/qbytearray.h + mdp:/usr/include/qt6/QtCore/qbytearrayalgorithms.h + mdp:/usr/include/qt6/QtCore/qbytearraylist.h + mdp:/usr/include/qt6/QtCore/qbytearrayview.h + mdp:/usr/include/qt6/QtCore/qcalendar.h + mdp:/usr/include/qt6/QtCore/qchar.h + mdp:/usr/include/qt6/QtCore/qcompare.h + mdp:/usr/include/qt6/QtCore/qcompare_impl.h + mdp:/usr/include/qt6/QtCore/qcomparehelpers.h + mdp:/usr/include/qt6/QtCore/qcompilerdetection.h + mdp:/usr/include/qt6/QtCore/qconfig-64.h + mdp:/usr/include/qt6/QtCore/qconfig.h + mdp:/usr/include/qt6/QtCore/qconstructormacros.h + mdp:/usr/include/qt6/QtCore/qcontainerfwd.h + mdp:/usr/include/qt6/QtCore/qcontainerinfo.h + mdp:/usr/include/qt6/QtCore/qcontainertools_impl.h + mdp:/usr/include/qt6/QtCore/qcontiguouscache.h + mdp:/usr/include/qt6/QtCore/qdarwinhelpers.h + mdp:/usr/include/qt6/QtCore/qdatastream.h + mdp:/usr/include/qt6/QtCore/qdatetime.h + mdp:/usr/include/qt6/QtCore/qdebug.h + mdp:/usr/include/qt6/QtCore/qexceptionhandling.h + mdp:/usr/include/qt6/QtCore/qfile.h + mdp:/usr/include/qt6/QtCore/qfiledevice.h + mdp:/usr/include/qt6/QtCore/qfileinfo.h + mdp:/usr/include/qt6/QtCore/qflags.h + mdp:/usr/include/qt6/QtCore/qfloat16.h + mdp:/usr/include/qt6/QtCore/qforeach.h + mdp:/usr/include/qt6/QtCore/qfunctionaltools_impl.h + mdp:/usr/include/qt6/QtCore/qfunctionpointer.h + mdp:/usr/include/qt6/QtCore/qgenericatomic.h + mdp:/usr/include/qt6/QtCore/qglobal.h + mdp:/usr/include/qt6/QtCore/qglobalstatic.h + mdp:/usr/include/qt6/QtCore/qhash.h + mdp:/usr/include/qt6/QtCore/qhashfunctions.h + mdp:/usr/include/qt6/QtCore/qiodevice.h + mdp:/usr/include/qt6/QtCore/qiodevicebase.h + mdp:/usr/include/qt6/QtCore/qiterable.h + mdp:/usr/include/qt6/QtCore/qiterator.h + mdp:/usr/include/qt6/QtCore/qlatin1stringview.h + mdp:/usr/include/qt6/QtCore/qlist.h + mdp:/usr/include/qt6/QtCore/qlocale.h + mdp:/usr/include/qt6/QtCore/qlogging.h + mdp:/usr/include/qt6/QtCore/qmalloc.h + mdp:/usr/include/qt6/QtCore/qmap.h + mdp:/usr/include/qt6/QtCore/qmath.h + mdp:/usr/include/qt6/QtCore/qmetacontainer.h + mdp:/usr/include/qt6/QtCore/qmetaobject.h + mdp:/usr/include/qt6/QtCore/qmetatype.h + mdp:/usr/include/qt6/QtCore/qminmax.h + mdp:/usr/include/qt6/QtCore/qnamespace.h + mdp:/usr/include/qt6/QtCore/qnumeric.h + mdp:/usr/include/qt6/QtCore/qobject.h + mdp:/usr/include/qt6/QtCore/qobject_impl.h + mdp:/usr/include/qt6/QtCore/qobjectdefs.h + mdp:/usr/include/qt6/QtCore/qobjectdefs_impl.h + mdp:/usr/include/qt6/QtCore/qoverload.h + mdp:/usr/include/qt6/QtCore/qpair.h + mdp:/usr/include/qt6/QtCore/qprocessordetection.h + mdp:/usr/include/qt6/QtCore/qrefcount.h + mdp:/usr/include/qt6/QtCore/qscopedpointer.h + mdp:/usr/include/qt6/QtCore/qscopeguard.h + mdp:/usr/include/qt6/QtCore/qset.h + mdp:/usr/include/qt6/QtCore/qshareddata.h + mdp:/usr/include/qt6/QtCore/qshareddata_impl.h + mdp:/usr/include/qt6/QtCore/qsharedpointer.h + mdp:/usr/include/qt6/QtCore/qsharedpointer_impl.h + mdp:/usr/include/qt6/QtCore/qspan.h + mdp:/usr/include/qt6/QtCore/qstdlibdetection.h + mdp:/usr/include/qt6/QtCore/qstring.h + mdp:/usr/include/qt6/QtCore/qstringalgorithms.h + mdp:/usr/include/qt6/QtCore/qstringbuilder.h + mdp:/usr/include/qt6/QtCore/qstringconverter.h + mdp:/usr/include/qt6/QtCore/qstringconverter_base.h + mdp:/usr/include/qt6/QtCore/qstringfwd.h + mdp:/usr/include/qt6/QtCore/qstringlist.h + mdp:/usr/include/qt6/QtCore/qstringmatcher.h + mdp:/usr/include/qt6/QtCore/qstringtokenizer.h + mdp:/usr/include/qt6/QtCore/qstringview.h + mdp:/usr/include/qt6/QtCore/qswap.h + mdp:/usr/include/qt6/QtCore/qsysinfo.h + mdp:/usr/include/qt6/QtCore/qsystemdetection.h + mdp:/usr/include/qt6/QtCore/qtaggedpointer.h + mdp:/usr/include/qt6/QtCore/qtclasshelpermacros.h + mdp:/usr/include/qt6/QtCore/qtconfiginclude.h + mdp:/usr/include/qt6/QtCore/qtconfigmacros.h + mdp:/usr/include/qt6/QtCore/qtcore-config.h + mdp:/usr/include/qt6/QtCore/qtcoreexports.h + mdp:/usr/include/qt6/QtCore/qtcoreglobal.h + mdp:/usr/include/qt6/QtCore/qtdeprecationdefinitions.h + mdp:/usr/include/qt6/QtCore/qtdeprecationmarkers.h + mdp:/usr/include/qt6/QtCore/qtenvironmentvariables.h + mdp:/usr/include/qt6/QtCore/qtextstream.h + mdp:/usr/include/qt6/QtCore/qtformat_impl.h + mdp:/usr/include/qt6/QtCore/qtimezone.h + mdp:/usr/include/qt6/QtCore/qtmetamacros.h + mdp:/usr/include/qt6/QtCore/qtnoop.h + mdp:/usr/include/qt6/QtCore/qtpreprocessorsupport.h + mdp:/usr/include/qt6/QtCore/qtresource.h + mdp:/usr/include/qt6/QtCore/qttranslation.h + mdp:/usr/include/qt6/QtCore/qttypetraits.h + mdp:/usr/include/qt6/QtCore/qtversion.h + mdp:/usr/include/qt6/QtCore/qtversionchecks.h + mdp:/usr/include/qt6/QtCore/qtypeinfo.h + mdp:/usr/include/qt6/QtCore/qtypes.h + mdp:/usr/include/qt6/QtCore/qutf8stringview.h + mdp:/usr/include/qt6/QtCore/qvariant.h + mdp:/usr/include/qt6/QtCore/qvarlengtharray.h + mdp:/usr/include/qt6/QtCore/qvector.h + mdp:/usr/include/qt6/QtCore/qversiontagging.h + mdp:/usr/include/qt6/QtCore/qxptype_traits.h + mdp:/usr/include/qt6/QtCore/qyieldcpu.h + mdp:/usr/include/qt6/QtSql/QSqlDatabase + mdp:/usr/include/qt6/QtSql/QSqlError + mdp:/usr/include/qt6/QtSql/QSqlQuery + mdp:/usr/include/qt6/QtSql/qsqldatabase.h + mdp:/usr/include/qt6/QtSql/qsqlerror.h + mdp:/usr/include/qt6/QtSql/qsqlquery.h + mdp:/usr/include/qt6/QtSql/qtsql-config.h + mdp:/usr/include/qt6/QtSql/qtsqlexports.h + mdp:/usr/include/qt6/QtSql/qtsqlglobal.h + mdp:/usr/include/sched.h + mdp:/usr/include/stdc-predef.h + mdp:/usr/include/stdint.h + mdp:/usr/include/stdio.h + mdp:/usr/include/stdlib.h + mdp:/usr/include/string.h + mdp:/usr/include/strings.h + mdp:/usr/include/sys/cdefs.h + mdp:/usr/include/sys/select.h + mdp:/usr/include/sys/single_threaded.h + mdp:/usr/include/sys/syscall.h + mdp:/usr/include/sys/types.h + mdp:/usr/include/syscall.h + mdp:/usr/include/time.h + mdp:/usr/include/unistd.h + mdp:/usr/include/wchar.h + mdp:/usr/include/wctype.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stdarg.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stdbool.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stddef.h +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/bulk_rename_dialog.cpp +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/progress_manager.cpp +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/user_guide_dialog.cpp +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/media/tlrender_viewport.cpp +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/everything_folder_model.h + mmc:Q_OBJECT + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/kassetmanagerqt_autogen/moc_predefs.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/everything_folder_model.h + mdp:/usr/include/alloca.h + mdp:/usr/include/asm-generic/bitsperlong.h + mdp:/usr/include/asm-generic/errno-base.h + mdp:/usr/include/asm-generic/errno.h + mdp:/usr/include/asm-generic/int-ll64.h + mdp:/usr/include/asm-generic/posix_types.h + mdp:/usr/include/asm-generic/types.h + mdp:/usr/include/asm/bitsperlong.h + mdp:/usr/include/asm/errno.h + mdp:/usr/include/asm/posix_types.h + mdp:/usr/include/asm/posix_types_64.h + mdp:/usr/include/asm/types.h + mdp:/usr/include/asm/unistd.h + mdp:/usr/include/asm/unistd_64.h + mdp:/usr/include/assert.h + mdp:/usr/include/bits/atomic_wide_counter.h + mdp:/usr/include/bits/byteswap.h + mdp:/usr/include/bits/confname.h + mdp:/usr/include/bits/cpu-set.h + mdp:/usr/include/bits/endian.h + mdp:/usr/include/bits/endianness.h + mdp:/usr/include/bits/environments.h + mdp:/usr/include/bits/errno.h + mdp:/usr/include/bits/floatn-common.h + mdp:/usr/include/bits/floatn.h + mdp:/usr/include/bits/getopt_core.h + mdp:/usr/include/bits/getopt_posix.h + mdp:/usr/include/bits/libc-header-start.h + mdp:/usr/include/bits/local_lim.h + mdp:/usr/include/bits/locale.h + mdp:/usr/include/bits/long-double.h + mdp:/usr/include/bits/posix1_lim.h + mdp:/usr/include/bits/posix2_lim.h + mdp:/usr/include/bits/posix_opt.h + mdp:/usr/include/bits/pthread_stack_min-dynamic.h + mdp:/usr/include/bits/pthreadtypes-arch.h + mdp:/usr/include/bits/pthreadtypes.h + mdp:/usr/include/bits/sched.h + mdp:/usr/include/bits/select.h + mdp:/usr/include/bits/semaphore.h + mdp:/usr/include/bits/setjmp.h + mdp:/usr/include/bits/stdint-intn.h + mdp:/usr/include/bits/stdint-least.h + mdp:/usr/include/bits/stdint-uintn.h + mdp:/usr/include/bits/stdio_lim.h + mdp:/usr/include/bits/stdlib-float.h + mdp:/usr/include/bits/struct_mutex.h + mdp:/usr/include/bits/struct_rwlock.h + mdp:/usr/include/bits/syscall.h + mdp:/usr/include/bits/thread-shared-types.h + mdp:/usr/include/bits/time.h + mdp:/usr/include/bits/time64.h + mdp:/usr/include/bits/timesize.h + mdp:/usr/include/bits/timex.h + mdp:/usr/include/bits/types.h + mdp:/usr/include/bits/types/FILE.h + mdp:/usr/include/bits/types/__FILE.h + mdp:/usr/include/bits/types/__fpos64_t.h + mdp:/usr/include/bits/types/__fpos_t.h + mdp:/usr/include/bits/types/__locale_t.h + mdp:/usr/include/bits/types/__mbstate_t.h + mdp:/usr/include/bits/types/__sigset_t.h + mdp:/usr/include/bits/types/clock_t.h + mdp:/usr/include/bits/types/clockid_t.h + mdp:/usr/include/bits/types/cookie_io_functions_t.h + mdp:/usr/include/bits/types/error_t.h + mdp:/usr/include/bits/types/locale_t.h + mdp:/usr/include/bits/types/mbstate_t.h + mdp:/usr/include/bits/types/sigset_t.h + mdp:/usr/include/bits/types/struct_FILE.h + mdp:/usr/include/bits/types/struct___jmp_buf_tag.h + mdp:/usr/include/bits/types/struct_itimerspec.h + mdp:/usr/include/bits/types/struct_sched_param.h + mdp:/usr/include/bits/types/struct_timespec.h + mdp:/usr/include/bits/types/struct_timeval.h + mdp:/usr/include/bits/types/struct_tm.h + mdp:/usr/include/bits/types/time_t.h + mdp:/usr/include/bits/types/timer_t.h + mdp:/usr/include/bits/types/wint_t.h + mdp:/usr/include/bits/typesizes.h + mdp:/usr/include/bits/uintn-identity.h + mdp:/usr/include/bits/uio_lim.h + mdp:/usr/include/bits/unistd_ext.h + mdp:/usr/include/bits/waitflags.h + mdp:/usr/include/bits/waitstatus.h + mdp:/usr/include/bits/wchar.h + mdp:/usr/include/bits/wctype-wchar.h + mdp:/usr/include/bits/wordsize.h + mdp:/usr/include/bits/xopen_lim.h + mdp:/usr/include/c++/15/algorithm + mdp:/usr/include/c++/15/array + mdp:/usr/include/c++/15/atomic + mdp:/usr/include/c++/15/backward/auto_ptr.h + mdp:/usr/include/c++/15/backward/binders.h + mdp:/usr/include/c++/15/bit + mdp:/usr/include/c++/15/bits/algorithmfwd.h + mdp:/usr/include/c++/15/bits/align.h + mdp:/usr/include/c++/15/bits/alloc_traits.h + mdp:/usr/include/c++/15/bits/allocated_ptr.h + mdp:/usr/include/c++/15/bits/allocator.h + mdp:/usr/include/c++/15/bits/atomic_base.h + mdp:/usr/include/c++/15/bits/atomic_futex.h + mdp:/usr/include/c++/15/bits/atomic_lockfree_defines.h + mdp:/usr/include/c++/15/bits/atomic_timed_wait.h + mdp:/usr/include/c++/15/bits/atomic_wait.h + mdp:/usr/include/c++/15/bits/basic_ios.h + mdp:/usr/include/c++/15/bits/basic_ios.tcc + mdp:/usr/include/c++/15/bits/basic_string.h + mdp:/usr/include/c++/15/bits/basic_string.tcc + mdp:/usr/include/c++/15/bits/char_traits.h + mdp:/usr/include/c++/15/bits/charconv.h + mdp:/usr/include/c++/15/bits/chrono.h + mdp:/usr/include/c++/15/bits/chrono_io.h + mdp:/usr/include/c++/15/bits/codecvt.h + mdp:/usr/include/c++/15/bits/concept_check.h + mdp:/usr/include/c++/15/bits/cpp_type_traits.h + mdp:/usr/include/c++/15/bits/cxxabi_forced.h + mdp:/usr/include/c++/15/bits/cxxabi_init_exception.h + mdp:/usr/include/c++/15/bits/enable_special_members.h + mdp:/usr/include/c++/15/bits/erase_if.h + mdp:/usr/include/c++/15/bits/exception.h + mdp:/usr/include/c++/15/bits/exception_defines.h + mdp:/usr/include/c++/15/bits/exception_ptr.h + mdp:/usr/include/c++/15/bits/functexcept.h + mdp:/usr/include/c++/15/bits/functional_hash.h + mdp:/usr/include/c++/15/bits/hash_bytes.h + mdp:/usr/include/c++/15/bits/hashtable.h + mdp:/usr/include/c++/15/bits/hashtable_policy.h + mdp:/usr/include/c++/15/bits/invoke.h + mdp:/usr/include/c++/15/bits/ios_base.h + mdp:/usr/include/c++/15/bits/istream.tcc + mdp:/usr/include/c++/15/bits/iterator_concepts.h + mdp:/usr/include/c++/15/bits/list.tcc + mdp:/usr/include/c++/15/bits/locale_classes.h + mdp:/usr/include/c++/15/bits/locale_classes.tcc + mdp:/usr/include/c++/15/bits/locale_conv.h + mdp:/usr/include/c++/15/bits/locale_facets.h + mdp:/usr/include/c++/15/bits/locale_facets.tcc + mdp:/usr/include/c++/15/bits/locale_facets_nonio.h + mdp:/usr/include/c++/15/bits/locale_facets_nonio.tcc + mdp:/usr/include/c++/15/bits/localefwd.h + mdp:/usr/include/c++/15/bits/max_size_type.h + mdp:/usr/include/c++/15/bits/memory_resource.h + mdp:/usr/include/c++/15/bits/memoryfwd.h + mdp:/usr/include/c++/15/bits/move.h + mdp:/usr/include/c++/15/bits/nested_exception.h + mdp:/usr/include/c++/15/bits/new_allocator.h + mdp:/usr/include/c++/15/bits/node_handle.h + mdp:/usr/include/c++/15/bits/ostream.h + mdp:/usr/include/c++/15/bits/ostream.tcc + mdp:/usr/include/c++/15/bits/ostream_insert.h + mdp:/usr/include/c++/15/bits/parse_numbers.h + mdp:/usr/include/c++/15/bits/postypes.h + mdp:/usr/include/c++/15/bits/predefined_ops.h + mdp:/usr/include/c++/15/bits/ptr_traits.h + mdp:/usr/include/c++/15/bits/quoted_string.h + mdp:/usr/include/c++/15/bits/range_access.h + mdp:/usr/include/c++/15/bits/ranges_algo.h + mdp:/usr/include/c++/15/bits/ranges_algobase.h + mdp:/usr/include/c++/15/bits/ranges_base.h + mdp:/usr/include/c++/15/bits/ranges_cmp.h + mdp:/usr/include/c++/15/bits/ranges_uninitialized.h + mdp:/usr/include/c++/15/bits/ranges_util.h + mdp:/usr/include/c++/15/bits/refwrap.h + mdp:/usr/include/c++/15/bits/requires_hosted.h + mdp:/usr/include/c++/15/bits/semaphore_base.h + mdp:/usr/include/c++/15/bits/shared_ptr.h + mdp:/usr/include/c++/15/bits/shared_ptr_atomic.h + mdp:/usr/include/c++/15/bits/shared_ptr_base.h + mdp:/usr/include/c++/15/bits/specfun.h + mdp:/usr/include/c++/15/bits/sstream.tcc + mdp:/usr/include/c++/15/bits/std_abs.h + mdp:/usr/include/c++/15/bits/std_function.h + mdp:/usr/include/c++/15/bits/std_mutex.h + mdp:/usr/include/c++/15/bits/std_thread.h + mdp:/usr/include/c++/15/bits/stl_algo.h + mdp:/usr/include/c++/15/bits/stl_algobase.h + mdp:/usr/include/c++/15/bits/stl_bvector.h + mdp:/usr/include/c++/15/bits/stl_construct.h + mdp:/usr/include/c++/15/bits/stl_function.h + mdp:/usr/include/c++/15/bits/stl_heap.h + mdp:/usr/include/c++/15/bits/stl_iterator.h + mdp:/usr/include/c++/15/bits/stl_iterator_base_funcs.h + mdp:/usr/include/c++/15/bits/stl_iterator_base_types.h + mdp:/usr/include/c++/15/bits/stl_list.h + mdp:/usr/include/c++/15/bits/stl_map.h + mdp:/usr/include/c++/15/bits/stl_multimap.h + mdp:/usr/include/c++/15/bits/stl_multiset.h + mdp:/usr/include/c++/15/bits/stl_numeric.h + mdp:/usr/include/c++/15/bits/stl_pair.h + mdp:/usr/include/c++/15/bits/stl_raw_storage_iter.h + mdp:/usr/include/c++/15/bits/stl_relops.h + mdp:/usr/include/c++/15/bits/stl_set.h + mdp:/usr/include/c++/15/bits/stl_tempbuf.h + mdp:/usr/include/c++/15/bits/stl_tree.h + mdp:/usr/include/c++/15/bits/stl_uninitialized.h + mdp:/usr/include/c++/15/bits/stl_vector.h + mdp:/usr/include/c++/15/bits/stream_iterator.h + mdp:/usr/include/c++/15/bits/streambuf.tcc + mdp:/usr/include/c++/15/bits/streambuf_iterator.h + mdp:/usr/include/c++/15/bits/string_view.tcc + mdp:/usr/include/c++/15/bits/stringfwd.h + mdp:/usr/include/c++/15/bits/this_thread_sleep.h + mdp:/usr/include/c++/15/bits/uniform_int_dist.h + mdp:/usr/include/c++/15/bits/unique_lock.h + mdp:/usr/include/c++/15/bits/unique_ptr.h + mdp:/usr/include/c++/15/bits/unordered_map.h + mdp:/usr/include/c++/15/bits/unordered_set.h + mdp:/usr/include/c++/15/bits/uses_allocator.h + mdp:/usr/include/c++/15/bits/uses_allocator_args.h + mdp:/usr/include/c++/15/bits/utility.h + mdp:/usr/include/c++/15/bits/vector.tcc + mdp:/usr/include/c++/15/bits/version.h + mdp:/usr/include/c++/15/cctype + mdp:/usr/include/c++/15/cerrno + mdp:/usr/include/c++/15/charconv + mdp:/usr/include/c++/15/chrono + mdp:/usr/include/c++/15/climits + mdp:/usr/include/c++/15/clocale + mdp:/usr/include/c++/15/cmath + mdp:/usr/include/c++/15/compare + mdp:/usr/include/c++/15/concepts + mdp:/usr/include/c++/15/condition_variable + mdp:/usr/include/c++/15/cstddef + mdp:/usr/include/c++/15/cstdint + mdp:/usr/include/c++/15/cstdio + mdp:/usr/include/c++/15/cstdlib + mdp:/usr/include/c++/15/cstring + mdp:/usr/include/c++/15/ctime + mdp:/usr/include/c++/15/cwchar + mdp:/usr/include/c++/15/cwctype + mdp:/usr/include/c++/15/debug/assertions.h + mdp:/usr/include/c++/15/debug/debug.h + mdp:/usr/include/c++/15/exception + mdp:/usr/include/c++/15/ext/aligned_buffer.h + mdp:/usr/include/c++/15/ext/alloc_traits.h + mdp:/usr/include/c++/15/ext/atomicity.h + mdp:/usr/include/c++/15/ext/concurrence.h + mdp:/usr/include/c++/15/ext/numeric_traits.h + mdp:/usr/include/c++/15/ext/string_conversions.h + mdp:/usr/include/c++/15/ext/type_traits.h + mdp:/usr/include/c++/15/format + mdp:/usr/include/c++/15/functional + mdp:/usr/include/c++/15/future + mdp:/usr/include/c++/15/initializer_list + mdp:/usr/include/c++/15/iomanip + mdp:/usr/include/c++/15/ios + mdp:/usr/include/c++/15/iosfwd + mdp:/usr/include/c++/15/istream + mdp:/usr/include/c++/15/iterator + mdp:/usr/include/c++/15/limits + mdp:/usr/include/c++/15/list + mdp:/usr/include/c++/15/locale + mdp:/usr/include/c++/15/map + mdp:/usr/include/c++/15/memory + mdp:/usr/include/c++/15/mutex + mdp:/usr/include/c++/15/new + mdp:/usr/include/c++/15/numeric + mdp:/usr/include/c++/15/optional + mdp:/usr/include/c++/15/ostream + mdp:/usr/include/c++/15/pstl/execution_defs.h + mdp:/usr/include/c++/15/pstl/glue_numeric_defs.h + mdp:/usr/include/c++/15/pstl/pstl_config.h + mdp:/usr/include/c++/15/ratio + mdp:/usr/include/c++/15/semaphore + mdp:/usr/include/c++/15/set + mdp:/usr/include/c++/15/sstream + mdp:/usr/include/c++/15/stdexcept + mdp:/usr/include/c++/15/stop_token + mdp:/usr/include/c++/15/streambuf + mdp:/usr/include/c++/15/string + mdp:/usr/include/c++/15/string_view + mdp:/usr/include/c++/15/system_error + mdp:/usr/include/c++/15/tr1/bessel_function.tcc + mdp:/usr/include/c++/15/tr1/beta_function.tcc + mdp:/usr/include/c++/15/tr1/ell_integral.tcc + mdp:/usr/include/c++/15/tr1/exp_integral.tcc + mdp:/usr/include/c++/15/tr1/gamma.tcc + mdp:/usr/include/c++/15/tr1/hypergeometric.tcc + mdp:/usr/include/c++/15/tr1/legendre_function.tcc + mdp:/usr/include/c++/15/tr1/modified_bessel_func.tcc + mdp:/usr/include/c++/15/tr1/poly_hermite.tcc + mdp:/usr/include/c++/15/tr1/poly_laguerre.tcc + mdp:/usr/include/c++/15/tr1/riemann_zeta.tcc + mdp:/usr/include/c++/15/tr1/special_function_util.h + mdp:/usr/include/c++/15/tuple + mdp:/usr/include/c++/15/type_traits + mdp:/usr/include/c++/15/typeinfo + mdp:/usr/include/c++/15/unordered_map + mdp:/usr/include/c++/15/unordered_set + mdp:/usr/include/c++/15/utility + mdp:/usr/include/c++/15/variant + mdp:/usr/include/c++/15/vector + mdp:/usr/include/c++/15/version + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/atomic_word.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++allocator.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++config.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++locale.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/cpu_defines.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/ctype_base.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/ctype_inline.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/error_constants.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/gthr-default.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/gthr.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/messages_members.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/os_defines.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/time_members.h + mdp:/usr/include/ctype.h + mdp:/usr/include/endian.h + mdp:/usr/include/errno.h + mdp:/usr/include/features-time64.h + mdp:/usr/include/features.h + mdp:/usr/include/gnu/stubs-64.h + mdp:/usr/include/gnu/stubs.h + mdp:/usr/include/libintl.h + mdp:/usr/include/limits.h + mdp:/usr/include/linux/close_range.h + mdp:/usr/include/linux/errno.h + mdp:/usr/include/linux/limits.h + mdp:/usr/include/linux/posix_types.h + mdp:/usr/include/linux/sched/types.h + mdp:/usr/include/linux/stddef.h + mdp:/usr/include/linux/types.h + mdp:/usr/include/locale.h + mdp:/usr/include/pthread.h + mdp:/usr/include/qt6/QtCore/QAbstractItemModel + mdp:/usr/include/qt6/QtCore/QFutureWatcher + mdp:/usr/include/qt6/QtCore/QHash + mdp:/usr/include/qt6/QtCore/QMimeData + mdp:/usr/include/qt6/QtCore/QMutex + mdp:/usr/include/qt6/QtCore/QSet + mdp:/usr/include/qt6/QtCore/QStringList + mdp:/usr/include/qt6/QtCore/QVector + mdp:/usr/include/qt6/QtCore/q17memory.h + mdp:/usr/include/qt6/QtCore/q20functional.h + mdp:/usr/include/qt6/QtCore/q20memory.h + mdp:/usr/include/qt6/QtCore/q20type_traits.h + mdp:/usr/include/qt6/QtCore/q20utility.h + mdp:/usr/include/qt6/QtCore/q23type_traits.h + mdp:/usr/include/qt6/QtCore/q23utility.h + mdp:/usr/include/qt6/QtCore/qabstractitemmodel.h + mdp:/usr/include/qt6/QtCore/qalgorithms.h + mdp:/usr/include/qt6/QtCore/qalloc.h + mdp:/usr/include/qt6/QtCore/qanystringview.h + mdp:/usr/include/qt6/QtCore/qarraydata.h + mdp:/usr/include/qt6/QtCore/qarraydataops.h + mdp:/usr/include/qt6/QtCore/qarraydatapointer.h + mdp:/usr/include/qt6/QtCore/qassert.h + mdp:/usr/include/qt6/QtCore/qatomic.h + mdp:/usr/include/qt6/QtCore/qatomic_cxx11.h + mdp:/usr/include/qt6/QtCore/qbasicatomic.h + mdp:/usr/include/qt6/QtCore/qbindingstorage.h + mdp:/usr/include/qt6/QtCore/qbytearray.h + mdp:/usr/include/qt6/QtCore/qbytearrayalgorithms.h + mdp:/usr/include/qt6/QtCore/qbytearraylist.h + mdp:/usr/include/qt6/QtCore/qbytearrayview.h + mdp:/usr/include/qt6/QtCore/qchar.h + mdp:/usr/include/qt6/QtCore/qcompare.h + mdp:/usr/include/qt6/QtCore/qcompare_impl.h + mdp:/usr/include/qt6/QtCore/qcomparehelpers.h + mdp:/usr/include/qt6/QtCore/qcompilerdetection.h + mdp:/usr/include/qt6/QtCore/qconfig-64.h + mdp:/usr/include/qt6/QtCore/qconfig.h + mdp:/usr/include/qt6/QtCore/qconstructormacros.h + mdp:/usr/include/qt6/QtCore/qcontainerfwd.h + mdp:/usr/include/qt6/QtCore/qcontainerinfo.h + mdp:/usr/include/qt6/QtCore/qcontainertools_impl.h + mdp:/usr/include/qt6/QtCore/qcontiguouscache.h + mdp:/usr/include/qt6/QtCore/qdarwinhelpers.h + mdp:/usr/include/qt6/QtCore/qdatastream.h + mdp:/usr/include/qt6/QtCore/qdeadlinetimer.h + mdp:/usr/include/qt6/QtCore/qdebug.h + mdp:/usr/include/qt6/QtCore/qexception.h + mdp:/usr/include/qt6/QtCore/qexceptionhandling.h + mdp:/usr/include/qt6/QtCore/qflags.h + mdp:/usr/include/qt6/QtCore/qfloat16.h + mdp:/usr/include/qt6/QtCore/qforeach.h + mdp:/usr/include/qt6/QtCore/qfunctionaltools_impl.h + mdp:/usr/include/qt6/QtCore/qfunctionpointer.h + mdp:/usr/include/qt6/QtCore/qfuture.h + mdp:/usr/include/qt6/QtCore/qfuture_impl.h + mdp:/usr/include/qt6/QtCore/qfutureinterface.h + mdp:/usr/include/qt6/QtCore/qfuturewatcher.h + mdp:/usr/include/qt6/QtCore/qgenericatomic.h + mdp:/usr/include/qt6/QtCore/qglobal.h + mdp:/usr/include/qt6/QtCore/qglobalstatic.h + mdp:/usr/include/qt6/QtCore/qhash.h + mdp:/usr/include/qt6/QtCore/qhashfunctions.h + mdp:/usr/include/qt6/QtCore/qiodevicebase.h + mdp:/usr/include/qt6/QtCore/qiterable.h + mdp:/usr/include/qt6/QtCore/qiterator.h + mdp:/usr/include/qt6/QtCore/qlatin1stringview.h + mdp:/usr/include/qt6/QtCore/qlist.h + mdp:/usr/include/qt6/QtCore/qlogging.h + mdp:/usr/include/qt6/QtCore/qmalloc.h + mdp:/usr/include/qt6/QtCore/qmap.h + mdp:/usr/include/qt6/QtCore/qmath.h + mdp:/usr/include/qt6/QtCore/qmetacontainer.h + mdp:/usr/include/qt6/QtCore/qmetatype.h + mdp:/usr/include/qt6/QtCore/qmimedata.h + mdp:/usr/include/qt6/QtCore/qminmax.h + mdp:/usr/include/qt6/QtCore/qmutex.h + mdp:/usr/include/qt6/QtCore/qnamespace.h + mdp:/usr/include/qt6/QtCore/qnumeric.h + mdp:/usr/include/qt6/QtCore/qobject.h + mdp:/usr/include/qt6/QtCore/qobject_impl.h + mdp:/usr/include/qt6/QtCore/qobjectdefs.h + mdp:/usr/include/qt6/QtCore/qobjectdefs_impl.h + mdp:/usr/include/qt6/QtCore/qoverload.h + mdp:/usr/include/qt6/QtCore/qpair.h + mdp:/usr/include/qt6/QtCore/qprocessordetection.h + mdp:/usr/include/qt6/QtCore/qpromise.h + mdp:/usr/include/qt6/QtCore/qrefcount.h + mdp:/usr/include/qt6/QtCore/qresultstore.h + mdp:/usr/include/qt6/QtCore/qrunnable.h + mdp:/usr/include/qt6/QtCore/qscopedpointer.h + mdp:/usr/include/qt6/QtCore/qscopeguard.h + mdp:/usr/include/qt6/QtCore/qset.h + mdp:/usr/include/qt6/QtCore/qshareddata.h + mdp:/usr/include/qt6/QtCore/qshareddata_impl.h + mdp:/usr/include/qt6/QtCore/qsharedpointer.h + mdp:/usr/include/qt6/QtCore/qsharedpointer_impl.h + mdp:/usr/include/qt6/QtCore/qstdlibdetection.h + mdp:/usr/include/qt6/QtCore/qstring.h + mdp:/usr/include/qt6/QtCore/qstringalgorithms.h + mdp:/usr/include/qt6/QtCore/qstringbuilder.h + mdp:/usr/include/qt6/QtCore/qstringconverter.h + mdp:/usr/include/qt6/QtCore/qstringconverter_base.h + mdp:/usr/include/qt6/QtCore/qstringfwd.h + mdp:/usr/include/qt6/QtCore/qstringlist.h + mdp:/usr/include/qt6/QtCore/qstringmatcher.h + mdp:/usr/include/qt6/QtCore/qstringtokenizer.h + mdp:/usr/include/qt6/QtCore/qstringview.h + mdp:/usr/include/qt6/QtCore/qswap.h + mdp:/usr/include/qt6/QtCore/qsysinfo.h + mdp:/usr/include/qt6/QtCore/qsystemdetection.h + mdp:/usr/include/qt6/QtCore/qtaggedpointer.h + mdp:/usr/include/qt6/QtCore/qtclasshelpermacros.h + mdp:/usr/include/qt6/QtCore/qtconfiginclude.h + mdp:/usr/include/qt6/QtCore/qtconfigmacros.h + mdp:/usr/include/qt6/QtCore/qtcore-config.h + mdp:/usr/include/qt6/QtCore/qtcoreexports.h + mdp:/usr/include/qt6/QtCore/qtcoreglobal.h + mdp:/usr/include/qt6/QtCore/qtdeprecationdefinitions.h + mdp:/usr/include/qt6/QtCore/qtdeprecationmarkers.h + mdp:/usr/include/qt6/QtCore/qtenvironmentvariables.h + mdp:/usr/include/qt6/QtCore/qtextstream.h + mdp:/usr/include/qt6/QtCore/qtformat_impl.h + mdp:/usr/include/qt6/QtCore/qthread.h + mdp:/usr/include/qt6/QtCore/qthreadpool.h + mdp:/usr/include/qt6/QtCore/qtmetamacros.h + mdp:/usr/include/qt6/QtCore/qtnoop.h + mdp:/usr/include/qt6/QtCore/qtpreprocessorsupport.h + mdp:/usr/include/qt6/QtCore/qtresource.h + mdp:/usr/include/qt6/QtCore/qtsan_impl.h + mdp:/usr/include/qt6/QtCore/qttranslation.h + mdp:/usr/include/qt6/QtCore/qttypetraits.h + mdp:/usr/include/qt6/QtCore/qtversion.h + mdp:/usr/include/qt6/QtCore/qtversionchecks.h + mdp:/usr/include/qt6/QtCore/qtypeinfo.h + mdp:/usr/include/qt6/QtCore/qtypes.h + mdp:/usr/include/qt6/QtCore/qutf8stringview.h + mdp:/usr/include/qt6/QtCore/qvariant.h + mdp:/usr/include/qt6/QtCore/qvarlengtharray.h + mdp:/usr/include/qt6/QtCore/qvector.h + mdp:/usr/include/qt6/QtCore/qversiontagging.h + mdp:/usr/include/qt6/QtCore/qxptype_traits.h + mdp:/usr/include/qt6/QtCore/qyieldcpu.h + mdp:/usr/include/sched.h + mdp:/usr/include/semaphore.h + mdp:/usr/include/stdc-predef.h + mdp:/usr/include/stdint.h + mdp:/usr/include/stdio.h + mdp:/usr/include/stdlib.h + mdp:/usr/include/string.h + mdp:/usr/include/strings.h + mdp:/usr/include/sys/cdefs.h + mdp:/usr/include/sys/select.h + mdp:/usr/include/sys/single_threaded.h + mdp:/usr/include/sys/syscall.h + mdp:/usr/include/sys/time.h + mdp:/usr/include/sys/types.h + mdp:/usr/include/syscall.h + mdp:/usr/include/time.h + mdp:/usr/include/unistd.h + mdp:/usr/include/wchar.h + mdp:/usr/include/wctype.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stdarg.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stdbool.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stddef.h +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/annotation_items.cpp +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/theme_manager.h + mmc:Q_OBJECT + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/kassetmanagerqt_autogen/moc_predefs.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/theme_manager.h + mdp:/usr/include/alloca.h + mdp:/usr/include/asm-generic/bitsperlong.h + mdp:/usr/include/asm-generic/errno-base.h + mdp:/usr/include/asm-generic/errno.h + mdp:/usr/include/asm-generic/int-ll64.h + mdp:/usr/include/asm-generic/posix_types.h + mdp:/usr/include/asm-generic/types.h + mdp:/usr/include/asm/bitsperlong.h + mdp:/usr/include/asm/errno.h + mdp:/usr/include/asm/posix_types.h + mdp:/usr/include/asm/posix_types_64.h + mdp:/usr/include/asm/types.h + mdp:/usr/include/asm/unistd.h + mdp:/usr/include/asm/unistd_64.h + mdp:/usr/include/assert.h + mdp:/usr/include/bits/atomic_wide_counter.h + mdp:/usr/include/bits/byteswap.h + mdp:/usr/include/bits/confname.h + mdp:/usr/include/bits/cpu-set.h + mdp:/usr/include/bits/endian.h + mdp:/usr/include/bits/endianness.h + mdp:/usr/include/bits/environments.h + mdp:/usr/include/bits/errno.h + mdp:/usr/include/bits/floatn-common.h + mdp:/usr/include/bits/floatn.h + mdp:/usr/include/bits/getopt_core.h + mdp:/usr/include/bits/getopt_posix.h + mdp:/usr/include/bits/libc-header-start.h + mdp:/usr/include/bits/local_lim.h + mdp:/usr/include/bits/locale.h + mdp:/usr/include/bits/long-double.h + mdp:/usr/include/bits/posix1_lim.h + mdp:/usr/include/bits/posix2_lim.h + mdp:/usr/include/bits/posix_opt.h + mdp:/usr/include/bits/pthread_stack_min-dynamic.h + mdp:/usr/include/bits/pthreadtypes-arch.h + mdp:/usr/include/bits/pthreadtypes.h + mdp:/usr/include/bits/sched.h + mdp:/usr/include/bits/select.h + mdp:/usr/include/bits/setjmp.h + mdp:/usr/include/bits/stdint-intn.h + mdp:/usr/include/bits/stdint-least.h + mdp:/usr/include/bits/stdint-uintn.h + mdp:/usr/include/bits/stdio_lim.h + mdp:/usr/include/bits/stdlib-float.h + mdp:/usr/include/bits/struct_mutex.h + mdp:/usr/include/bits/struct_rwlock.h + mdp:/usr/include/bits/syscall.h + mdp:/usr/include/bits/thread-shared-types.h + mdp:/usr/include/bits/time.h + mdp:/usr/include/bits/time64.h + mdp:/usr/include/bits/timesize.h + mdp:/usr/include/bits/timex.h + mdp:/usr/include/bits/types.h + mdp:/usr/include/bits/types/FILE.h + mdp:/usr/include/bits/types/__FILE.h + mdp:/usr/include/bits/types/__fpos64_t.h + mdp:/usr/include/bits/types/__fpos_t.h + mdp:/usr/include/bits/types/__locale_t.h + mdp:/usr/include/bits/types/__mbstate_t.h + mdp:/usr/include/bits/types/__sigset_t.h + mdp:/usr/include/bits/types/clock_t.h + mdp:/usr/include/bits/types/clockid_t.h + mdp:/usr/include/bits/types/cookie_io_functions_t.h + mdp:/usr/include/bits/types/error_t.h + mdp:/usr/include/bits/types/locale_t.h + mdp:/usr/include/bits/types/mbstate_t.h + mdp:/usr/include/bits/types/sigset_t.h + mdp:/usr/include/bits/types/struct_FILE.h + mdp:/usr/include/bits/types/struct___jmp_buf_tag.h + mdp:/usr/include/bits/types/struct_itimerspec.h + mdp:/usr/include/bits/types/struct_sched_param.h + mdp:/usr/include/bits/types/struct_timespec.h + mdp:/usr/include/bits/types/struct_timeval.h + mdp:/usr/include/bits/types/struct_tm.h + mdp:/usr/include/bits/types/time_t.h + mdp:/usr/include/bits/types/timer_t.h + mdp:/usr/include/bits/types/wint_t.h + mdp:/usr/include/bits/typesizes.h + mdp:/usr/include/bits/uintn-identity.h + mdp:/usr/include/bits/uio_lim.h + mdp:/usr/include/bits/unistd_ext.h + mdp:/usr/include/bits/waitflags.h + mdp:/usr/include/bits/waitstatus.h + mdp:/usr/include/bits/wchar.h + mdp:/usr/include/bits/wctype-wchar.h + mdp:/usr/include/bits/wordsize.h + mdp:/usr/include/bits/xopen_lim.h + mdp:/usr/include/c++/15/algorithm + mdp:/usr/include/c++/15/array + mdp:/usr/include/c++/15/atomic + mdp:/usr/include/c++/15/backward/auto_ptr.h + mdp:/usr/include/c++/15/backward/binders.h + mdp:/usr/include/c++/15/bit + mdp:/usr/include/c++/15/bits/algorithmfwd.h + mdp:/usr/include/c++/15/bits/align.h + mdp:/usr/include/c++/15/bits/alloc_traits.h + mdp:/usr/include/c++/15/bits/allocated_ptr.h + mdp:/usr/include/c++/15/bits/allocator.h + mdp:/usr/include/c++/15/bits/atomic_base.h + mdp:/usr/include/c++/15/bits/atomic_lockfree_defines.h + mdp:/usr/include/c++/15/bits/atomic_wait.h + mdp:/usr/include/c++/15/bits/basic_ios.h + mdp:/usr/include/c++/15/bits/basic_ios.tcc + mdp:/usr/include/c++/15/bits/basic_string.h + mdp:/usr/include/c++/15/bits/basic_string.tcc + mdp:/usr/include/c++/15/bits/char_traits.h + mdp:/usr/include/c++/15/bits/charconv.h + mdp:/usr/include/c++/15/bits/chrono.h + mdp:/usr/include/c++/15/bits/chrono_io.h + mdp:/usr/include/c++/15/bits/codecvt.h + mdp:/usr/include/c++/15/bits/concept_check.h + mdp:/usr/include/c++/15/bits/cpp_type_traits.h + mdp:/usr/include/c++/15/bits/cxxabi_forced.h + mdp:/usr/include/c++/15/bits/cxxabi_init_exception.h + mdp:/usr/include/c++/15/bits/enable_special_members.h + mdp:/usr/include/c++/15/bits/erase_if.h + mdp:/usr/include/c++/15/bits/exception.h + mdp:/usr/include/c++/15/bits/exception_defines.h + mdp:/usr/include/c++/15/bits/exception_ptr.h + mdp:/usr/include/c++/15/bits/functexcept.h + mdp:/usr/include/c++/15/bits/functional_hash.h + mdp:/usr/include/c++/15/bits/hash_bytes.h + mdp:/usr/include/c++/15/bits/hashtable.h + mdp:/usr/include/c++/15/bits/hashtable_policy.h + mdp:/usr/include/c++/15/bits/invoke.h + mdp:/usr/include/c++/15/bits/ios_base.h + mdp:/usr/include/c++/15/bits/istream.tcc + mdp:/usr/include/c++/15/bits/iterator_concepts.h + mdp:/usr/include/c++/15/bits/list.tcc + mdp:/usr/include/c++/15/bits/locale_classes.h + mdp:/usr/include/c++/15/bits/locale_classes.tcc + mdp:/usr/include/c++/15/bits/locale_conv.h + mdp:/usr/include/c++/15/bits/locale_facets.h + mdp:/usr/include/c++/15/bits/locale_facets.tcc + mdp:/usr/include/c++/15/bits/locale_facets_nonio.h + mdp:/usr/include/c++/15/bits/locale_facets_nonio.tcc + mdp:/usr/include/c++/15/bits/localefwd.h + mdp:/usr/include/c++/15/bits/max_size_type.h + mdp:/usr/include/c++/15/bits/memory_resource.h + mdp:/usr/include/c++/15/bits/memoryfwd.h + mdp:/usr/include/c++/15/bits/move.h + mdp:/usr/include/c++/15/bits/nested_exception.h + mdp:/usr/include/c++/15/bits/new_allocator.h + mdp:/usr/include/c++/15/bits/node_handle.h + mdp:/usr/include/c++/15/bits/ostream.h + mdp:/usr/include/c++/15/bits/ostream.tcc + mdp:/usr/include/c++/15/bits/ostream_insert.h + mdp:/usr/include/c++/15/bits/parse_numbers.h + mdp:/usr/include/c++/15/bits/postypes.h + mdp:/usr/include/c++/15/bits/predefined_ops.h + mdp:/usr/include/c++/15/bits/ptr_traits.h + mdp:/usr/include/c++/15/bits/quoted_string.h + mdp:/usr/include/c++/15/bits/range_access.h + mdp:/usr/include/c++/15/bits/ranges_algo.h + mdp:/usr/include/c++/15/bits/ranges_algobase.h + mdp:/usr/include/c++/15/bits/ranges_base.h + mdp:/usr/include/c++/15/bits/ranges_cmp.h + mdp:/usr/include/c++/15/bits/ranges_uninitialized.h + mdp:/usr/include/c++/15/bits/ranges_util.h + mdp:/usr/include/c++/15/bits/refwrap.h + mdp:/usr/include/c++/15/bits/requires_hosted.h + mdp:/usr/include/c++/15/bits/shared_ptr.h + mdp:/usr/include/c++/15/bits/shared_ptr_atomic.h + mdp:/usr/include/c++/15/bits/shared_ptr_base.h + mdp:/usr/include/c++/15/bits/specfun.h + mdp:/usr/include/c++/15/bits/sstream.tcc + mdp:/usr/include/c++/15/bits/std_abs.h + mdp:/usr/include/c++/15/bits/std_function.h + mdp:/usr/include/c++/15/bits/std_mutex.h + mdp:/usr/include/c++/15/bits/stl_algo.h + mdp:/usr/include/c++/15/bits/stl_algobase.h + mdp:/usr/include/c++/15/bits/stl_bvector.h + mdp:/usr/include/c++/15/bits/stl_construct.h + mdp:/usr/include/c++/15/bits/stl_function.h + mdp:/usr/include/c++/15/bits/stl_heap.h + mdp:/usr/include/c++/15/bits/stl_iterator.h + mdp:/usr/include/c++/15/bits/stl_iterator_base_funcs.h + mdp:/usr/include/c++/15/bits/stl_iterator_base_types.h + mdp:/usr/include/c++/15/bits/stl_list.h + mdp:/usr/include/c++/15/bits/stl_map.h + mdp:/usr/include/c++/15/bits/stl_multimap.h + mdp:/usr/include/c++/15/bits/stl_numeric.h + mdp:/usr/include/c++/15/bits/stl_pair.h + mdp:/usr/include/c++/15/bits/stl_raw_storage_iter.h + mdp:/usr/include/c++/15/bits/stl_relops.h + mdp:/usr/include/c++/15/bits/stl_tempbuf.h + mdp:/usr/include/c++/15/bits/stl_tree.h + mdp:/usr/include/c++/15/bits/stl_uninitialized.h + mdp:/usr/include/c++/15/bits/stl_vector.h + mdp:/usr/include/c++/15/bits/stream_iterator.h + mdp:/usr/include/c++/15/bits/streambuf.tcc + mdp:/usr/include/c++/15/bits/streambuf_iterator.h + mdp:/usr/include/c++/15/bits/string_view.tcc + mdp:/usr/include/c++/15/bits/stringfwd.h + mdp:/usr/include/c++/15/bits/uniform_int_dist.h + mdp:/usr/include/c++/15/bits/unique_ptr.h + mdp:/usr/include/c++/15/bits/unordered_map.h + mdp:/usr/include/c++/15/bits/uses_allocator.h + mdp:/usr/include/c++/15/bits/uses_allocator_args.h + mdp:/usr/include/c++/15/bits/utility.h + mdp:/usr/include/c++/15/bits/vector.tcc + mdp:/usr/include/c++/15/bits/version.h + mdp:/usr/include/c++/15/cctype + mdp:/usr/include/c++/15/cerrno + mdp:/usr/include/c++/15/charconv + mdp:/usr/include/c++/15/chrono + mdp:/usr/include/c++/15/climits + mdp:/usr/include/c++/15/clocale + mdp:/usr/include/c++/15/cmath + mdp:/usr/include/c++/15/compare + mdp:/usr/include/c++/15/concepts + mdp:/usr/include/c++/15/cstddef + mdp:/usr/include/c++/15/cstdint + mdp:/usr/include/c++/15/cstdio + mdp:/usr/include/c++/15/cstdlib + mdp:/usr/include/c++/15/cstring + mdp:/usr/include/c++/15/ctime + mdp:/usr/include/c++/15/cwchar + mdp:/usr/include/c++/15/cwctype + mdp:/usr/include/c++/15/debug/assertions.h + mdp:/usr/include/c++/15/debug/debug.h + mdp:/usr/include/c++/15/exception + mdp:/usr/include/c++/15/ext/aligned_buffer.h + mdp:/usr/include/c++/15/ext/alloc_traits.h + mdp:/usr/include/c++/15/ext/atomicity.h + mdp:/usr/include/c++/15/ext/concurrence.h + mdp:/usr/include/c++/15/ext/numeric_traits.h + mdp:/usr/include/c++/15/ext/string_conversions.h + mdp:/usr/include/c++/15/ext/type_traits.h + mdp:/usr/include/c++/15/format + mdp:/usr/include/c++/15/functional + mdp:/usr/include/c++/15/initializer_list + mdp:/usr/include/c++/15/iomanip + mdp:/usr/include/c++/15/ios + mdp:/usr/include/c++/15/iosfwd + mdp:/usr/include/c++/15/istream + mdp:/usr/include/c++/15/iterator + mdp:/usr/include/c++/15/limits + mdp:/usr/include/c++/15/list + mdp:/usr/include/c++/15/locale + mdp:/usr/include/c++/15/map + mdp:/usr/include/c++/15/memory + mdp:/usr/include/c++/15/new + mdp:/usr/include/c++/15/numeric + mdp:/usr/include/c++/15/optional + mdp:/usr/include/c++/15/ostream + mdp:/usr/include/c++/15/pstl/execution_defs.h + mdp:/usr/include/c++/15/pstl/glue_numeric_defs.h + mdp:/usr/include/c++/15/pstl/pstl_config.h + mdp:/usr/include/c++/15/ratio + mdp:/usr/include/c++/15/sstream + mdp:/usr/include/c++/15/stdexcept + mdp:/usr/include/c++/15/streambuf + mdp:/usr/include/c++/15/string + mdp:/usr/include/c++/15/string_view + mdp:/usr/include/c++/15/system_error + mdp:/usr/include/c++/15/tr1/bessel_function.tcc + mdp:/usr/include/c++/15/tr1/beta_function.tcc + mdp:/usr/include/c++/15/tr1/ell_integral.tcc + mdp:/usr/include/c++/15/tr1/exp_integral.tcc + mdp:/usr/include/c++/15/tr1/gamma.tcc + mdp:/usr/include/c++/15/tr1/hypergeometric.tcc + mdp:/usr/include/c++/15/tr1/legendre_function.tcc + mdp:/usr/include/c++/15/tr1/modified_bessel_func.tcc + mdp:/usr/include/c++/15/tr1/poly_hermite.tcc + mdp:/usr/include/c++/15/tr1/poly_laguerre.tcc + mdp:/usr/include/c++/15/tr1/riemann_zeta.tcc + mdp:/usr/include/c++/15/tr1/special_function_util.h + mdp:/usr/include/c++/15/tuple + mdp:/usr/include/c++/15/type_traits + mdp:/usr/include/c++/15/typeinfo + mdp:/usr/include/c++/15/unordered_map + mdp:/usr/include/c++/15/utility + mdp:/usr/include/c++/15/variant + mdp:/usr/include/c++/15/vector + mdp:/usr/include/c++/15/version + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/atomic_word.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++allocator.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++config.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++locale.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/cpu_defines.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/ctype_base.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/ctype_inline.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/error_constants.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/gthr-default.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/gthr.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/messages_members.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/os_defines.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/time_members.h + mdp:/usr/include/ctype.h + mdp:/usr/include/endian.h + mdp:/usr/include/errno.h + mdp:/usr/include/features-time64.h + mdp:/usr/include/features.h + mdp:/usr/include/gnu/stubs-64.h + mdp:/usr/include/gnu/stubs.h + mdp:/usr/include/libintl.h + mdp:/usr/include/limits.h + mdp:/usr/include/linux/close_range.h + mdp:/usr/include/linux/errno.h + mdp:/usr/include/linux/limits.h + mdp:/usr/include/linux/posix_types.h + mdp:/usr/include/linux/sched/types.h + mdp:/usr/include/linux/stddef.h + mdp:/usr/include/linux/types.h + mdp:/usr/include/locale.h + mdp:/usr/include/pthread.h + mdp:/usr/include/qt6/QtCore/QObject + mdp:/usr/include/qt6/QtCore/QString + mdp:/usr/include/qt6/QtCore/q17memory.h + mdp:/usr/include/qt6/QtCore/q20functional.h + mdp:/usr/include/qt6/QtCore/q20memory.h + mdp:/usr/include/qt6/QtCore/q20type_traits.h + mdp:/usr/include/qt6/QtCore/q23type_traits.h + mdp:/usr/include/qt6/QtCore/qalgorithms.h + mdp:/usr/include/qt6/QtCore/qanystringview.h + mdp:/usr/include/qt6/QtCore/qarraydata.h + mdp:/usr/include/qt6/QtCore/qarraydataops.h + mdp:/usr/include/qt6/QtCore/qarraydatapointer.h + mdp:/usr/include/qt6/QtCore/qassert.h + mdp:/usr/include/qt6/QtCore/qatomic.h + mdp:/usr/include/qt6/QtCore/qatomic_cxx11.h + mdp:/usr/include/qt6/QtCore/qbasicatomic.h + mdp:/usr/include/qt6/QtCore/qbindingstorage.h + mdp:/usr/include/qt6/QtCore/qbytearray.h + mdp:/usr/include/qt6/QtCore/qbytearrayalgorithms.h + mdp:/usr/include/qt6/QtCore/qbytearraylist.h + mdp:/usr/include/qt6/QtCore/qbytearrayview.h + mdp:/usr/include/qt6/QtCore/qchar.h + mdp:/usr/include/qt6/QtCore/qcompare.h + mdp:/usr/include/qt6/QtCore/qcompare_impl.h + mdp:/usr/include/qt6/QtCore/qcomparehelpers.h + mdp:/usr/include/qt6/QtCore/qcompilerdetection.h + mdp:/usr/include/qt6/QtCore/qconfig-64.h + mdp:/usr/include/qt6/QtCore/qconfig.h + mdp:/usr/include/qt6/QtCore/qconstructormacros.h + mdp:/usr/include/qt6/QtCore/qcontainerfwd.h + mdp:/usr/include/qt6/QtCore/qcontainerinfo.h + mdp:/usr/include/qt6/QtCore/qcontainertools_impl.h + mdp:/usr/include/qt6/QtCore/qdarwinhelpers.h + mdp:/usr/include/qt6/QtCore/qdatastream.h + mdp:/usr/include/qt6/QtCore/qexceptionhandling.h + mdp:/usr/include/qt6/QtCore/qflags.h + mdp:/usr/include/qt6/QtCore/qfloat16.h + mdp:/usr/include/qt6/QtCore/qforeach.h + mdp:/usr/include/qt6/QtCore/qfunctionaltools_impl.h + mdp:/usr/include/qt6/QtCore/qfunctionpointer.h + mdp:/usr/include/qt6/QtCore/qgenericatomic.h + mdp:/usr/include/qt6/QtCore/qglobal.h + mdp:/usr/include/qt6/QtCore/qglobalstatic.h + mdp:/usr/include/qt6/QtCore/qhashfunctions.h + mdp:/usr/include/qt6/QtCore/qiodevicebase.h + mdp:/usr/include/qt6/QtCore/qiterable.h + mdp:/usr/include/qt6/QtCore/qiterator.h + mdp:/usr/include/qt6/QtCore/qlatin1stringview.h + mdp:/usr/include/qt6/QtCore/qlist.h + mdp:/usr/include/qt6/QtCore/qlogging.h + mdp:/usr/include/qt6/QtCore/qmalloc.h + mdp:/usr/include/qt6/QtCore/qmath.h + mdp:/usr/include/qt6/QtCore/qmetacontainer.h + mdp:/usr/include/qt6/QtCore/qmetatype.h + mdp:/usr/include/qt6/QtCore/qminmax.h + mdp:/usr/include/qt6/QtCore/qnamespace.h + mdp:/usr/include/qt6/QtCore/qnumeric.h + mdp:/usr/include/qt6/QtCore/qobject.h + mdp:/usr/include/qt6/QtCore/qobject_impl.h + mdp:/usr/include/qt6/QtCore/qobjectdefs.h + mdp:/usr/include/qt6/QtCore/qobjectdefs_impl.h + mdp:/usr/include/qt6/QtCore/qoverload.h + mdp:/usr/include/qt6/QtCore/qpair.h + mdp:/usr/include/qt6/QtCore/qprocessordetection.h + mdp:/usr/include/qt6/QtCore/qrefcount.h + mdp:/usr/include/qt6/QtCore/qscopedpointer.h + mdp:/usr/include/qt6/QtCore/qscopeguard.h + mdp:/usr/include/qt6/QtCore/qstdlibdetection.h + mdp:/usr/include/qt6/QtCore/qstring.h + mdp:/usr/include/qt6/QtCore/qstringalgorithms.h + mdp:/usr/include/qt6/QtCore/qstringbuilder.h + mdp:/usr/include/qt6/QtCore/qstringconverter.h + mdp:/usr/include/qt6/QtCore/qstringconverter_base.h + mdp:/usr/include/qt6/QtCore/qstringfwd.h + mdp:/usr/include/qt6/QtCore/qstringlist.h + mdp:/usr/include/qt6/QtCore/qstringmatcher.h + mdp:/usr/include/qt6/QtCore/qstringtokenizer.h + mdp:/usr/include/qt6/QtCore/qstringview.h + mdp:/usr/include/qt6/QtCore/qswap.h + mdp:/usr/include/qt6/QtCore/qsysinfo.h + mdp:/usr/include/qt6/QtCore/qsystemdetection.h + mdp:/usr/include/qt6/QtCore/qtaggedpointer.h + mdp:/usr/include/qt6/QtCore/qtclasshelpermacros.h + mdp:/usr/include/qt6/QtCore/qtconfiginclude.h + mdp:/usr/include/qt6/QtCore/qtconfigmacros.h + mdp:/usr/include/qt6/QtCore/qtcore-config.h + mdp:/usr/include/qt6/QtCore/qtcoreexports.h + mdp:/usr/include/qt6/QtCore/qtcoreglobal.h + mdp:/usr/include/qt6/QtCore/qtdeprecationdefinitions.h + mdp:/usr/include/qt6/QtCore/qtdeprecationmarkers.h + mdp:/usr/include/qt6/QtCore/qtenvironmentvariables.h + mdp:/usr/include/qt6/QtCore/qtformat_impl.h + mdp:/usr/include/qt6/QtCore/qtmetamacros.h + mdp:/usr/include/qt6/QtCore/qtnoop.h + mdp:/usr/include/qt6/QtCore/qtpreprocessorsupport.h + mdp:/usr/include/qt6/QtCore/qtresource.h + mdp:/usr/include/qt6/QtCore/qttranslation.h + mdp:/usr/include/qt6/QtCore/qttypetraits.h + mdp:/usr/include/qt6/QtCore/qtversion.h + mdp:/usr/include/qt6/QtCore/qtversionchecks.h + mdp:/usr/include/qt6/QtCore/qtypeinfo.h + mdp:/usr/include/qt6/QtCore/qtypes.h + mdp:/usr/include/qt6/QtCore/qutf8stringview.h + mdp:/usr/include/qt6/QtCore/qversiontagging.h + mdp:/usr/include/qt6/QtCore/qxptype_traits.h + mdp:/usr/include/qt6/QtCore/qyieldcpu.h + mdp:/usr/include/qt6/QtGui/QColor + mdp:/usr/include/qt6/QtGui/qcolor.h + mdp:/usr/include/qt6/QtGui/qrgb.h + mdp:/usr/include/qt6/QtGui/qrgba64.h + mdp:/usr/include/qt6/QtGui/qtgui-config.h + mdp:/usr/include/qt6/QtGui/qtguiexports.h + mdp:/usr/include/qt6/QtGui/qtguiglobal.h + mdp:/usr/include/sched.h + mdp:/usr/include/stdc-predef.h + mdp:/usr/include/stdint.h + mdp:/usr/include/stdio.h + mdp:/usr/include/stdlib.h + mdp:/usr/include/string.h + mdp:/usr/include/strings.h + mdp:/usr/include/sys/cdefs.h + mdp:/usr/include/sys/select.h + mdp:/usr/include/sys/single_threaded.h + mdp:/usr/include/sys/syscall.h + mdp:/usr/include/sys/types.h + mdp:/usr/include/syscall.h + mdp:/usr/include/time.h + mdp:/usr/include/unistd.h + mdp:/usr/include/wchar.h + mdp:/usr/include/wctype.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stdarg.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stdbool.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stddef.h +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/media/tlrender_viewport.h + mmc:Q_OBJECT + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/kassetmanagerqt_autogen/moc_predefs.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/media/tlrender_player.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/media/tlrender_viewport.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/Imath/ImathBox.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/Imath/ImathConfig.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/Imath/ImathExport.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/Imath/ImathMath.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/Imath/ImathNamespace.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/Imath/ImathPlatform.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/Imath/ImathTypeTraits.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/Imath/ImathVec.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/Imath/half.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/ftk/Core/Box.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/ftk/Core/BoxInline.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/ftk/Core/Color.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/ftk/Core/ColorInline.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/ftk/Core/Context.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/ftk/Core/ContextInline.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/ftk/Core/Export.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/ftk/Core/FontSystem.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/ftk/Core/FontSystemInline.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/ftk/Core/IBaseSystem.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/ftk/Core/IBaseSystemInline.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/ftk/Core/IRender.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/ftk/Core/ISystem.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/ftk/Core/Image.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/ftk/Core/ImageInline.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/ftk/Core/LogSystem.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/ftk/Core/Math.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/ftk/Core/MathInline.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/ftk/Core/Matrix.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/ftk/Core/MatrixInline.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/ftk/Core/Memory.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/ftk/Core/MemoryInline.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/ftk/Core/Mesh.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/ftk/Core/MeshInline.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/ftk/Core/Observable.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/ftk/Core/ObservableInline.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/ftk/Core/ObservableList.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/ftk/Core/ObservableListInline.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/ftk/Core/ObservableMap.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/ftk/Core/ObservableMapInline.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/ftk/Core/Path.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/ftk/Core/PathInline.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/ftk/Core/Range.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/ftk/Core/RangeInline.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/ftk/Core/RenderOptions.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/ftk/Core/RenderOptionsInline.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/ftk/Core/Size.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/ftk/Core/SizeInline.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/ftk/Core/Util.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/ftk/Core/Vector.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/ftk/Core/VectorInline.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/ftk/GL/Texture.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/ftk/UI/Event.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/ftk/UI/IWidget.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/ftk/UI/IWidgetInline.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/ftk/UI/IconSystem.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/ftk/UI/Style.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/ftk/UI/WidgetOptions.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/nlohmann/adl_serializer.hpp + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/nlohmann/byte_container_with_subtype.hpp + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/nlohmann/detail/abi_macros.hpp + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/nlohmann/detail/conversions/from_json.hpp + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/nlohmann/detail/conversions/to_chars.hpp + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/nlohmann/detail/conversions/to_json.hpp + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/nlohmann/detail/exceptions.hpp + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/nlohmann/detail/hash.hpp + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/nlohmann/detail/input/binary_reader.hpp + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/nlohmann/detail/input/input_adapters.hpp + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/nlohmann/detail/input/json_sax.hpp + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/nlohmann/detail/input/lexer.hpp + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/nlohmann/detail/input/parser.hpp + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/nlohmann/detail/input/position_t.hpp + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/nlohmann/detail/iterators/internal_iterator.hpp + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/nlohmann/detail/iterators/iter_impl.hpp + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/nlohmann/detail/iterators/iteration_proxy.hpp + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/nlohmann/detail/iterators/iterator_traits.hpp + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/nlohmann/detail/iterators/json_reverse_iterator.hpp + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/nlohmann/detail/iterators/primitive_iterator.hpp + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/nlohmann/detail/json_custom_base_class.hpp + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/nlohmann/detail/json_pointer.hpp + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/nlohmann/detail/json_ref.hpp + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/nlohmann/detail/macro_scope.hpp + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/nlohmann/detail/macro_unscope.hpp + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/nlohmann/detail/meta/call_std/begin.hpp + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/nlohmann/detail/meta/call_std/end.hpp + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/nlohmann/detail/meta/cpp_future.hpp + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/nlohmann/detail/meta/detected.hpp + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/nlohmann/detail/meta/identity_tag.hpp + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/nlohmann/detail/meta/is_sax.hpp + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/nlohmann/detail/meta/std_fs.hpp + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/nlohmann/detail/meta/type_traits.hpp + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/nlohmann/detail/meta/void_t.hpp + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/nlohmann/detail/output/binary_writer.hpp + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/nlohmann/detail/output/output_adapters.hpp + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/nlohmann/detail/output/serializer.hpp + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/nlohmann/detail/string_concat.hpp + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/nlohmann/detail/string_escape.hpp + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/nlohmann/detail/string_utils.hpp + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/nlohmann/detail/value_t.hpp + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/nlohmann/json.hpp + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/nlohmann/json_fwd.hpp + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/nlohmann/ordered_map.hpp + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/nlohmann/thirdparty/hedley/hedley.hpp + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/nlohmann/thirdparty/hedley/hedley_undef.hpp + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/opentime/errorStatus.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/opentime/export.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/opentime/rationalTime.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/opentime/timeRange.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/opentime/timeTransform.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/opentime/version.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/opentimelineio/anyDictionary.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/opentimelineio/anyVector.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/opentimelineio/color.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/opentimelineio/composable.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/opentimelineio/composition.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/opentimelineio/errorStatus.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/opentimelineio/export.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/opentimelineio/item.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/opentimelineio/serializableObject.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/opentimelineio/serializableObjectWithMetadata.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/opentimelineio/serialization.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/opentimelineio/stack.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/opentimelineio/timeline.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/opentimelineio/track.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/opentimelineio/typeRegistry.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/opentimelineio/version.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender/Core/Audio.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender/Core/AudioInline.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender/Core/AudioSystem.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender/Core/Export.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender/Core/Time.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender/Core/TimeInline.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender/Core/Util.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender/IO/IO.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender/IO/IOInline.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender/Qt/PlayerObject.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender/QtWidget/ContainerWidget.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender/QtWidget/Viewport.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender/Timeline/Audio.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender/Timeline/BackgroundOptions.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender/Timeline/ColorOptions.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender/Timeline/CompareOptions.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender/Timeline/DisplayOptions.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender/Timeline/ForegroundOptions.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender/Timeline/Player.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender/Timeline/PlayerOptions.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender/Timeline/Timeline.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender/Timeline/TimelineOptions.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender/Timeline/Transition.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender/Timeline/Video.h + mdp:/usr/include/GL/gl.h + mdp:/usr/include/alloca.h + mdp:/usr/include/asm-generic/bitsperlong.h + mdp:/usr/include/asm-generic/errno-base.h + mdp:/usr/include/asm-generic/errno.h + mdp:/usr/include/asm-generic/int-ll64.h + mdp:/usr/include/asm-generic/posix_types.h + mdp:/usr/include/asm-generic/types.h + mdp:/usr/include/asm/bitsperlong.h + mdp:/usr/include/asm/errno.h + mdp:/usr/include/asm/posix_types.h + mdp:/usr/include/asm/posix_types_64.h + mdp:/usr/include/asm/types.h + mdp:/usr/include/asm/unistd.h + mdp:/usr/include/asm/unistd_64.h + mdp:/usr/include/assert.h + mdp:/usr/include/bits/atomic_wide_counter.h + mdp:/usr/include/bits/byteswap.h + mdp:/usr/include/bits/confname.h + mdp:/usr/include/bits/cpu-set.h + mdp:/usr/include/bits/endian.h + mdp:/usr/include/bits/endianness.h + mdp:/usr/include/bits/environments.h + mdp:/usr/include/bits/errno.h + mdp:/usr/include/bits/floatn-common.h + mdp:/usr/include/bits/floatn.h + mdp:/usr/include/bits/flt-eval-method.h + mdp:/usr/include/bits/fp-fast.h + mdp:/usr/include/bits/fp-logb.h + mdp:/usr/include/bits/getopt_core.h + mdp:/usr/include/bits/getopt_posix.h + mdp:/usr/include/bits/iscanonical.h + mdp:/usr/include/bits/libc-header-start.h + mdp:/usr/include/bits/libm-simd-decl-stubs.h + mdp:/usr/include/bits/local_lim.h + mdp:/usr/include/bits/locale.h + mdp:/usr/include/bits/long-double.h + mdp:/usr/include/bits/math-vector.h + mdp:/usr/include/bits/mathcalls-helper-functions.h + mdp:/usr/include/bits/mathcalls-macros.h + mdp:/usr/include/bits/mathcalls-narrow.h + mdp:/usr/include/bits/mathcalls.h + mdp:/usr/include/bits/posix1_lim.h + mdp:/usr/include/bits/posix2_lim.h + mdp:/usr/include/bits/posix_opt.h + mdp:/usr/include/bits/pthread_stack_min-dynamic.h + mdp:/usr/include/bits/pthreadtypes-arch.h + mdp:/usr/include/bits/pthreadtypes.h + mdp:/usr/include/bits/sched.h + mdp:/usr/include/bits/select.h + mdp:/usr/include/bits/semaphore.h + mdp:/usr/include/bits/setjmp.h + mdp:/usr/include/bits/stdint-intn.h + mdp:/usr/include/bits/stdint-least.h + mdp:/usr/include/bits/stdint-uintn.h + mdp:/usr/include/bits/stdio_lim.h + mdp:/usr/include/bits/stdlib-float.h + mdp:/usr/include/bits/struct_mutex.h + mdp:/usr/include/bits/struct_rwlock.h + mdp:/usr/include/bits/syscall.h + mdp:/usr/include/bits/thread-shared-types.h + mdp:/usr/include/bits/time.h + mdp:/usr/include/bits/time64.h + mdp:/usr/include/bits/timesize.h + mdp:/usr/include/bits/timex.h + mdp:/usr/include/bits/types.h + mdp:/usr/include/bits/types/FILE.h + mdp:/usr/include/bits/types/__FILE.h + mdp:/usr/include/bits/types/__fpos64_t.h + mdp:/usr/include/bits/types/__fpos_t.h + mdp:/usr/include/bits/types/__locale_t.h + mdp:/usr/include/bits/types/__mbstate_t.h + mdp:/usr/include/bits/types/__sigset_t.h + mdp:/usr/include/bits/types/clock_t.h + mdp:/usr/include/bits/types/clockid_t.h + mdp:/usr/include/bits/types/cookie_io_functions_t.h + mdp:/usr/include/bits/types/error_t.h + mdp:/usr/include/bits/types/locale_t.h + mdp:/usr/include/bits/types/mbstate_t.h + mdp:/usr/include/bits/types/sigset_t.h + mdp:/usr/include/bits/types/struct_FILE.h + mdp:/usr/include/bits/types/struct___jmp_buf_tag.h + mdp:/usr/include/bits/types/struct_itimerspec.h + mdp:/usr/include/bits/types/struct_sched_param.h + mdp:/usr/include/bits/types/struct_timespec.h + mdp:/usr/include/bits/types/struct_timeval.h + mdp:/usr/include/bits/types/struct_tm.h + mdp:/usr/include/bits/types/time_t.h + mdp:/usr/include/bits/types/timer_t.h + mdp:/usr/include/bits/types/wint_t.h + mdp:/usr/include/bits/typesizes.h + mdp:/usr/include/bits/uintn-identity.h + mdp:/usr/include/bits/uio_lim.h + mdp:/usr/include/bits/unistd_ext.h + mdp:/usr/include/bits/waitflags.h + mdp:/usr/include/bits/waitstatus.h + mdp:/usr/include/bits/wchar.h + mdp:/usr/include/bits/wctype-wchar.h + mdp:/usr/include/bits/wordsize.h + mdp:/usr/include/bits/xopen_lim.h + mdp:/usr/include/c++/15/algorithm + mdp:/usr/include/c++/15/any + mdp:/usr/include/c++/15/array + mdp:/usr/include/c++/15/atomic + mdp:/usr/include/c++/15/backward/auto_ptr.h + mdp:/usr/include/c++/15/backward/binders.h + mdp:/usr/include/c++/15/bit + mdp:/usr/include/c++/15/bits/algorithmfwd.h + mdp:/usr/include/c++/15/bits/align.h + mdp:/usr/include/c++/15/bits/alloc_traits.h + mdp:/usr/include/c++/15/bits/allocated_ptr.h + mdp:/usr/include/c++/15/bits/allocator.h + mdp:/usr/include/c++/15/bits/atomic_base.h + mdp:/usr/include/c++/15/bits/atomic_futex.h + mdp:/usr/include/c++/15/bits/atomic_lockfree_defines.h + mdp:/usr/include/c++/15/bits/atomic_timed_wait.h + mdp:/usr/include/c++/15/bits/atomic_wait.h + mdp:/usr/include/c++/15/bits/basic_ios.h + mdp:/usr/include/c++/15/bits/basic_ios.tcc + mdp:/usr/include/c++/15/bits/basic_string.h + mdp:/usr/include/c++/15/bits/basic_string.tcc + mdp:/usr/include/c++/15/bits/char_traits.h + mdp:/usr/include/c++/15/bits/charconv.h + mdp:/usr/include/c++/15/bits/chrono.h + mdp:/usr/include/c++/15/bits/chrono_io.h + mdp:/usr/include/c++/15/bits/codecvt.h + mdp:/usr/include/c++/15/bits/concept_check.h + mdp:/usr/include/c++/15/bits/cpp_type_traits.h + mdp:/usr/include/c++/15/bits/cxxabi_forced.h + mdp:/usr/include/c++/15/bits/cxxabi_init_exception.h + mdp:/usr/include/c++/15/bits/enable_special_members.h + mdp:/usr/include/c++/15/bits/erase_if.h + mdp:/usr/include/c++/15/bits/exception.h + mdp:/usr/include/c++/15/bits/exception_defines.h + mdp:/usr/include/c++/15/bits/exception_ptr.h + mdp:/usr/include/c++/15/bits/forward_list.h + mdp:/usr/include/c++/15/bits/forward_list.tcc + mdp:/usr/include/c++/15/bits/functexcept.h + mdp:/usr/include/c++/15/bits/functional_hash.h + mdp:/usr/include/c++/15/bits/gslice.h + mdp:/usr/include/c++/15/bits/gslice_array.h + mdp:/usr/include/c++/15/bits/hash_bytes.h + mdp:/usr/include/c++/15/bits/hashtable.h + mdp:/usr/include/c++/15/bits/hashtable_policy.h + mdp:/usr/include/c++/15/bits/indirect_array.h + mdp:/usr/include/c++/15/bits/invoke.h + mdp:/usr/include/c++/15/bits/ios_base.h + mdp:/usr/include/c++/15/bits/istream.tcc + mdp:/usr/include/c++/15/bits/iterator_concepts.h + mdp:/usr/include/c++/15/bits/list.tcc + mdp:/usr/include/c++/15/bits/locale_classes.h + mdp:/usr/include/c++/15/bits/locale_classes.tcc + mdp:/usr/include/c++/15/bits/locale_conv.h + mdp:/usr/include/c++/15/bits/locale_facets.h + mdp:/usr/include/c++/15/bits/locale_facets.tcc + mdp:/usr/include/c++/15/bits/locale_facets_nonio.h + mdp:/usr/include/c++/15/bits/locale_facets_nonio.tcc + mdp:/usr/include/c++/15/bits/localefwd.h + mdp:/usr/include/c++/15/bits/mask_array.h + mdp:/usr/include/c++/15/bits/max_size_type.h + mdp:/usr/include/c++/15/bits/memory_resource.h + mdp:/usr/include/c++/15/bits/memoryfwd.h + mdp:/usr/include/c++/15/bits/move.h + mdp:/usr/include/c++/15/bits/nested_exception.h + mdp:/usr/include/c++/15/bits/new_allocator.h + mdp:/usr/include/c++/15/bits/node_handle.h + mdp:/usr/include/c++/15/bits/ostream.h + mdp:/usr/include/c++/15/bits/ostream.tcc + mdp:/usr/include/c++/15/bits/ostream_insert.h + mdp:/usr/include/c++/15/bits/parse_numbers.h + mdp:/usr/include/c++/15/bits/postypes.h + mdp:/usr/include/c++/15/bits/predefined_ops.h + mdp:/usr/include/c++/15/bits/ptr_traits.h + mdp:/usr/include/c++/15/bits/quoted_string.h + mdp:/usr/include/c++/15/bits/range_access.h + mdp:/usr/include/c++/15/bits/ranges_algo.h + mdp:/usr/include/c++/15/bits/ranges_algobase.h + mdp:/usr/include/c++/15/bits/ranges_base.h + mdp:/usr/include/c++/15/bits/ranges_cmp.h + mdp:/usr/include/c++/15/bits/ranges_uninitialized.h + mdp:/usr/include/c++/15/bits/ranges_util.h + mdp:/usr/include/c++/15/bits/refwrap.h + mdp:/usr/include/c++/15/bits/requires_hosted.h + mdp:/usr/include/c++/15/bits/semaphore_base.h + mdp:/usr/include/c++/15/bits/shared_ptr.h + mdp:/usr/include/c++/15/bits/shared_ptr_atomic.h + mdp:/usr/include/c++/15/bits/shared_ptr_base.h + mdp:/usr/include/c++/15/bits/slice_array.h + mdp:/usr/include/c++/15/bits/specfun.h + mdp:/usr/include/c++/15/bits/sstream.tcc + mdp:/usr/include/c++/15/bits/std_abs.h + mdp:/usr/include/c++/15/bits/std_function.h + mdp:/usr/include/c++/15/bits/std_mutex.h + mdp:/usr/include/c++/15/bits/std_thread.h + mdp:/usr/include/c++/15/bits/stl_algo.h + mdp:/usr/include/c++/15/bits/stl_algobase.h + mdp:/usr/include/c++/15/bits/stl_bvector.h + mdp:/usr/include/c++/15/bits/stl_construct.h + mdp:/usr/include/c++/15/bits/stl_function.h + mdp:/usr/include/c++/15/bits/stl_heap.h + mdp:/usr/include/c++/15/bits/stl_iterator.h + mdp:/usr/include/c++/15/bits/stl_iterator_base_funcs.h + mdp:/usr/include/c++/15/bits/stl_iterator_base_types.h + mdp:/usr/include/c++/15/bits/stl_list.h + mdp:/usr/include/c++/15/bits/stl_map.h + mdp:/usr/include/c++/15/bits/stl_multimap.h + mdp:/usr/include/c++/15/bits/stl_multiset.h + mdp:/usr/include/c++/15/bits/stl_numeric.h + mdp:/usr/include/c++/15/bits/stl_pair.h + mdp:/usr/include/c++/15/bits/stl_raw_storage_iter.h + mdp:/usr/include/c++/15/bits/stl_relops.h + mdp:/usr/include/c++/15/bits/stl_set.h + mdp:/usr/include/c++/15/bits/stl_tempbuf.h + mdp:/usr/include/c++/15/bits/stl_tree.h + mdp:/usr/include/c++/15/bits/stl_uninitialized.h + mdp:/usr/include/c++/15/bits/stl_vector.h + mdp:/usr/include/c++/15/bits/stream_iterator.h + mdp:/usr/include/c++/15/bits/streambuf.tcc + mdp:/usr/include/c++/15/bits/streambuf_iterator.h + mdp:/usr/include/c++/15/bits/string_view.tcc + mdp:/usr/include/c++/15/bits/stringfwd.h + mdp:/usr/include/c++/15/bits/this_thread_sleep.h + mdp:/usr/include/c++/15/bits/uniform_int_dist.h + mdp:/usr/include/c++/15/bits/unique_lock.h + mdp:/usr/include/c++/15/bits/unique_ptr.h + mdp:/usr/include/c++/15/bits/unordered_map.h + mdp:/usr/include/c++/15/bits/unordered_set.h + mdp:/usr/include/c++/15/bits/uses_allocator.h + mdp:/usr/include/c++/15/bits/uses_allocator_args.h + mdp:/usr/include/c++/15/bits/utility.h + mdp:/usr/include/c++/15/bits/valarray_after.h + mdp:/usr/include/c++/15/bits/valarray_array.h + mdp:/usr/include/c++/15/bits/valarray_array.tcc + mdp:/usr/include/c++/15/bits/valarray_before.h + mdp:/usr/include/c++/15/bits/vector.tcc + mdp:/usr/include/c++/15/bits/version.h + mdp:/usr/include/c++/15/cassert + mdp:/usr/include/c++/15/cctype + mdp:/usr/include/c++/15/cerrno + mdp:/usr/include/c++/15/charconv + mdp:/usr/include/c++/15/chrono + mdp:/usr/include/c++/15/climits + mdp:/usr/include/c++/15/clocale + mdp:/usr/include/c++/15/cmath + mdp:/usr/include/c++/15/compare + mdp:/usr/include/c++/15/concepts + mdp:/usr/include/c++/15/condition_variable + mdp:/usr/include/c++/15/cstddef + mdp:/usr/include/c++/15/cstdint + mdp:/usr/include/c++/15/cstdio + mdp:/usr/include/c++/15/cstdlib + mdp:/usr/include/c++/15/cstring + mdp:/usr/include/c++/15/ctime + mdp:/usr/include/c++/15/cwchar + mdp:/usr/include/c++/15/cwctype + mdp:/usr/include/c++/15/debug/assertions.h + mdp:/usr/include/c++/15/debug/debug.h + mdp:/usr/include/c++/15/exception + mdp:/usr/include/c++/15/ext/aligned_buffer.h + mdp:/usr/include/c++/15/ext/alloc_traits.h + mdp:/usr/include/c++/15/ext/atomicity.h + mdp:/usr/include/c++/15/ext/concurrence.h + mdp:/usr/include/c++/15/ext/numeric_traits.h + mdp:/usr/include/c++/15/ext/string_conversions.h + mdp:/usr/include/c++/15/ext/type_traits.h + mdp:/usr/include/c++/15/filesystem + mdp:/usr/include/c++/15/format + mdp:/usr/include/c++/15/forward_list + mdp:/usr/include/c++/15/functional + mdp:/usr/include/c++/15/future + mdp:/usr/include/c++/15/initializer_list + mdp:/usr/include/c++/15/iomanip + mdp:/usr/include/c++/15/ios + mdp:/usr/include/c++/15/iosfwd + mdp:/usr/include/c++/15/iostream + mdp:/usr/include/c++/15/istream + mdp:/usr/include/c++/15/iterator + mdp:/usr/include/c++/15/limits + mdp:/usr/include/c++/15/list + mdp:/usr/include/c++/15/locale + mdp:/usr/include/c++/15/map + mdp:/usr/include/c++/15/memory + mdp:/usr/include/c++/15/mutex + mdp:/usr/include/c++/15/new + mdp:/usr/include/c++/15/numeric + mdp:/usr/include/c++/15/optional + mdp:/usr/include/c++/15/ostream + mdp:/usr/include/c++/15/pstl/execution_defs.h + mdp:/usr/include/c++/15/pstl/glue_numeric_defs.h + mdp:/usr/include/c++/15/pstl/pstl_config.h + mdp:/usr/include/c++/15/ratio + mdp:/usr/include/c++/15/semaphore + mdp:/usr/include/c++/15/set + mdp:/usr/include/c++/15/sstream + mdp:/usr/include/c++/15/stdexcept + mdp:/usr/include/c++/15/stop_token + mdp:/usr/include/c++/15/streambuf + mdp:/usr/include/c++/15/string + mdp:/usr/include/c++/15/string_view + mdp:/usr/include/c++/15/system_error + mdp:/usr/include/c++/15/tr1/bessel_function.tcc + mdp:/usr/include/c++/15/tr1/beta_function.tcc + mdp:/usr/include/c++/15/tr1/ell_integral.tcc + mdp:/usr/include/c++/15/tr1/exp_integral.tcc + mdp:/usr/include/c++/15/tr1/gamma.tcc + mdp:/usr/include/c++/15/tr1/hypergeometric.tcc + mdp:/usr/include/c++/15/tr1/legendre_function.tcc + mdp:/usr/include/c++/15/tr1/modified_bessel_func.tcc + mdp:/usr/include/c++/15/tr1/poly_hermite.tcc + mdp:/usr/include/c++/15/tr1/poly_laguerre.tcc + mdp:/usr/include/c++/15/tr1/riemann_zeta.tcc + mdp:/usr/include/c++/15/tr1/special_function_util.h + mdp:/usr/include/c++/15/tuple + mdp:/usr/include/c++/15/type_traits + mdp:/usr/include/c++/15/typeinfo + mdp:/usr/include/c++/15/unordered_map + mdp:/usr/include/c++/15/unordered_set + mdp:/usr/include/c++/15/utility + mdp:/usr/include/c++/15/valarray + mdp:/usr/include/c++/15/variant + mdp:/usr/include/c++/15/vector + mdp:/usr/include/c++/15/version + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/atomic_word.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++allocator.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++config.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++locale.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/cpu_defines.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/ctype_base.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/ctype_inline.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/error_constants.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/gthr-default.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/gthr.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/messages_members.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/os_defines.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/time_members.h + mdp:/usr/include/ctype.h + mdp:/usr/include/endian.h + mdp:/usr/include/errno.h + mdp:/usr/include/features-time64.h + mdp:/usr/include/features.h + mdp:/usr/include/gnu/stubs-64.h + mdp:/usr/include/gnu/stubs.h + mdp:/usr/include/inttypes.h + mdp:/usr/include/libintl.h + mdp:/usr/include/limits.h + mdp:/usr/include/linux/close_range.h + mdp:/usr/include/linux/errno.h + mdp:/usr/include/linux/limits.h + mdp:/usr/include/linux/posix_types.h + mdp:/usr/include/linux/sched/types.h + mdp:/usr/include/linux/stddef.h + mdp:/usr/include/linux/types.h + mdp:/usr/include/locale.h + mdp:/usr/include/math.h + mdp:/usr/include/pthread.h + mdp:/usr/include/qt6/QtCore/QMap + mdp:/usr/include/qt6/QtCore/QMutex + mdp:/usr/include/qt6/QtCore/QObject + mdp:/usr/include/qt6/QtCore/QPoint + mdp:/usr/include/qt6/QtCore/QPointer + mdp:/usr/include/qt6/QtCore/QSharedPointer + mdp:/usr/include/qt6/QtCore/QSize + mdp:/usr/include/qt6/QtCore/QString + mdp:/usr/include/qt6/QtCore/QStringList + mdp:/usr/include/qt6/QtCore/QTimer + mdp:/usr/include/qt6/QtCore/QVector + mdp:/usr/include/qt6/QtCore/q17memory.h + mdp:/usr/include/qt6/QtCore/q20functional.h + mdp:/usr/include/qt6/QtCore/q20iterator.h + mdp:/usr/include/qt6/QtCore/q20memory.h + mdp:/usr/include/qt6/QtCore/q20type_traits.h + mdp:/usr/include/qt6/QtCore/q20utility.h + mdp:/usr/include/qt6/QtCore/q23type_traits.h + mdp:/usr/include/qt6/QtCore/q23utility.h + mdp:/usr/include/qt6/QtCore/qabstracteventdispatcher.h + mdp:/usr/include/qt6/QtCore/qalgorithms.h + mdp:/usr/include/qt6/QtCore/qalloc.h + mdp:/usr/include/qt6/QtCore/qanystringview.h + mdp:/usr/include/qt6/QtCore/qarraydata.h + mdp:/usr/include/qt6/QtCore/qarraydataops.h + mdp:/usr/include/qt6/QtCore/qarraydatapointer.h + mdp:/usr/include/qt6/QtCore/qassert.h + mdp:/usr/include/qt6/QtCore/qatomic.h + mdp:/usr/include/qt6/QtCore/qatomic_cxx11.h + mdp:/usr/include/qt6/QtCore/qbasicatomic.h + mdp:/usr/include/qt6/QtCore/qbasictimer.h + mdp:/usr/include/qt6/QtCore/qbindingstorage.h + mdp:/usr/include/qt6/QtCore/qbytearray.h + mdp:/usr/include/qt6/QtCore/qbytearrayalgorithms.h + mdp:/usr/include/qt6/QtCore/qbytearraylist.h + mdp:/usr/include/qt6/QtCore/qbytearrayview.h + mdp:/usr/include/qt6/QtCore/qchar.h + mdp:/usr/include/qt6/QtCore/qcheckedint_impl.h + mdp:/usr/include/qt6/QtCore/qcompare.h + mdp:/usr/include/qt6/QtCore/qcompare_impl.h + mdp:/usr/include/qt6/QtCore/qcomparehelpers.h + mdp:/usr/include/qt6/QtCore/qcompilerdetection.h + mdp:/usr/include/qt6/QtCore/qconfig-64.h + mdp:/usr/include/qt6/QtCore/qconfig.h + mdp:/usr/include/qt6/QtCore/qconstructormacros.h + mdp:/usr/include/qt6/QtCore/qcontainerfwd.h + mdp:/usr/include/qt6/QtCore/qcontainerinfo.h + mdp:/usr/include/qt6/QtCore/qcontainertools_impl.h + mdp:/usr/include/qt6/QtCore/qcontiguouscache.h + mdp:/usr/include/qt6/QtCore/qdarwinhelpers.h + mdp:/usr/include/qt6/QtCore/qdatastream.h + mdp:/usr/include/qt6/QtCore/qdeadlinetimer.h + mdp:/usr/include/qt6/QtCore/qdebug.h + mdp:/usr/include/qt6/QtCore/qendian.h + mdp:/usr/include/qt6/QtCore/qeventloop.h + mdp:/usr/include/qt6/QtCore/qexceptionhandling.h + mdp:/usr/include/qt6/QtCore/qflags.h + mdp:/usr/include/qt6/QtCore/qfloat16.h + mdp:/usr/include/qt6/QtCore/qforeach.h + mdp:/usr/include/qt6/QtCore/qfunctionaltools_impl.h + mdp:/usr/include/qt6/QtCore/qfunctionpointer.h + mdp:/usr/include/qt6/QtCore/qgenericatomic.h + mdp:/usr/include/qt6/QtCore/qglobal.h + mdp:/usr/include/qt6/QtCore/qglobalstatic.h + mdp:/usr/include/qt6/QtCore/qhash.h + mdp:/usr/include/qt6/QtCore/qhashfunctions.h + mdp:/usr/include/qt6/QtCore/qiodevice.h + mdp:/usr/include/qt6/QtCore/qiodevicebase.h + mdp:/usr/include/qt6/QtCore/qiterable.h + mdp:/usr/include/qt6/QtCore/qiterator.h + mdp:/usr/include/qt6/QtCore/qlatin1stringview.h + mdp:/usr/include/qt6/QtCore/qline.h + mdp:/usr/include/qt6/QtCore/qlist.h + mdp:/usr/include/qt6/QtCore/qlogging.h + mdp:/usr/include/qt6/QtCore/qmalloc.h + mdp:/usr/include/qt6/QtCore/qmap.h + mdp:/usr/include/qt6/QtCore/qmargins.h + mdp:/usr/include/qt6/QtCore/qmath.h + mdp:/usr/include/qt6/QtCore/qmetacontainer.h + mdp:/usr/include/qt6/QtCore/qmetatype.h + mdp:/usr/include/qt6/QtCore/qminmax.h + mdp:/usr/include/qt6/QtCore/qmutex.h + mdp:/usr/include/qt6/QtCore/qnamespace.h + mdp:/usr/include/qt6/QtCore/qnativeinterface.h + mdp:/usr/include/qt6/QtCore/qnumeric.h + mdp:/usr/include/qt6/QtCore/qobject.h + mdp:/usr/include/qt6/QtCore/qobject_impl.h + mdp:/usr/include/qt6/QtCore/qobjectdefs.h + mdp:/usr/include/qt6/QtCore/qobjectdefs_impl.h + mdp:/usr/include/qt6/QtCore/qoverload.h + mdp:/usr/include/qt6/QtCore/qpair.h + mdp:/usr/include/qt6/QtCore/qpoint.h + mdp:/usr/include/qt6/QtCore/qpointer.h + mdp:/usr/include/qt6/QtCore/qprocessordetection.h + mdp:/usr/include/qt6/QtCore/qrect.h + mdp:/usr/include/qt6/QtCore/qrefcount.h + mdp:/usr/include/qt6/QtCore/qscopedpointer.h + mdp:/usr/include/qt6/QtCore/qscopeguard.h + mdp:/usr/include/qt6/QtCore/qset.h + mdp:/usr/include/qt6/QtCore/qshareddata.h + mdp:/usr/include/qt6/QtCore/qshareddata_impl.h + mdp:/usr/include/qt6/QtCore/qsharedpointer.h + mdp:/usr/include/qt6/QtCore/qsharedpointer_impl.h + mdp:/usr/include/qt6/QtCore/qsize.h + mdp:/usr/include/qt6/QtCore/qspan.h + mdp:/usr/include/qt6/QtCore/qstdlibdetection.h + mdp:/usr/include/qt6/QtCore/qstring.h + mdp:/usr/include/qt6/QtCore/qstringalgorithms.h + mdp:/usr/include/qt6/QtCore/qstringbuilder.h + mdp:/usr/include/qt6/QtCore/qstringconverter.h + mdp:/usr/include/qt6/QtCore/qstringconverter_base.h + mdp:/usr/include/qt6/QtCore/qstringfwd.h + mdp:/usr/include/qt6/QtCore/qstringlist.h + mdp:/usr/include/qt6/QtCore/qstringmatcher.h + mdp:/usr/include/qt6/QtCore/qstringtokenizer.h + mdp:/usr/include/qt6/QtCore/qstringview.h + mdp:/usr/include/qt6/QtCore/qswap.h + mdp:/usr/include/qt6/QtCore/qsysinfo.h + mdp:/usr/include/qt6/QtCore/qsystemdetection.h + mdp:/usr/include/qt6/QtCore/qtaggedpointer.h + mdp:/usr/include/qt6/QtCore/qtclasshelpermacros.h + mdp:/usr/include/qt6/QtCore/qtconfiginclude.h + mdp:/usr/include/qt6/QtCore/qtconfigmacros.h + mdp:/usr/include/qt6/QtCore/qtcore-config.h + mdp:/usr/include/qt6/QtCore/qtcoreexports.h + mdp:/usr/include/qt6/QtCore/qtcoreglobal.h + mdp:/usr/include/qt6/QtCore/qtdeprecationdefinitions.h + mdp:/usr/include/qt6/QtCore/qtdeprecationmarkers.h + mdp:/usr/include/qt6/QtCore/qtenvironmentvariables.h + mdp:/usr/include/qt6/QtCore/qtextstream.h + mdp:/usr/include/qt6/QtCore/qtformat_impl.h + mdp:/usr/include/qt6/QtCore/qtimer.h + mdp:/usr/include/qt6/QtCore/qtmetamacros.h + mdp:/usr/include/qt6/QtCore/qtnoop.h + mdp:/usr/include/qt6/QtCore/qtpreprocessorsupport.h + mdp:/usr/include/qt6/QtCore/qtresource.h + mdp:/usr/include/qt6/QtCore/qtsan_impl.h + mdp:/usr/include/qt6/QtCore/qttranslation.h + mdp:/usr/include/qt6/QtCore/qttypetraits.h + mdp:/usr/include/qt6/QtCore/qtversion.h + mdp:/usr/include/qt6/QtCore/qtversionchecks.h + mdp:/usr/include/qt6/QtCore/qtypeinfo.h + mdp:/usr/include/qt6/QtCore/qtypes.h + mdp:/usr/include/qt6/QtCore/qurl.h + mdp:/usr/include/qt6/QtCore/qutf8stringview.h + mdp:/usr/include/qt6/QtCore/qvariant.h + mdp:/usr/include/qt6/QtCore/qvarlengtharray.h + mdp:/usr/include/qt6/QtCore/qvector.h + mdp:/usr/include/qt6/QtCore/qversiontagging.h + mdp:/usr/include/qt6/QtCore/qxptype_traits.h + mdp:/usr/include/qt6/QtCore/qyieldcpu.h + mdp:/usr/include/qt6/QtGui/QImage + mdp:/usr/include/qt6/QtGui/QSurfaceFormat + mdp:/usr/include/qt6/QtGui/qaction.h + mdp:/usr/include/qt6/QtGui/qbitmap.h + mdp:/usr/include/qt6/QtGui/qbrush.h + mdp:/usr/include/qt6/QtGui/qcolor.h + mdp:/usr/include/qt6/QtGui/qcursor.h + mdp:/usr/include/qt6/QtGui/qfont.h + mdp:/usr/include/qt6/QtGui/qfontinfo.h + mdp:/usr/include/qt6/QtGui/qfontmetrics.h + mdp:/usr/include/qt6/QtGui/qfontvariableaxis.h + mdp:/usr/include/qt6/QtGui/qicon.h + mdp:/usr/include/qt6/QtGui/qimage.h + mdp:/usr/include/qt6/QtGui/qkeysequence.h + mdp:/usr/include/qt6/QtGui/qopengl.h + mdp:/usr/include/qt6/QtGui/qopenglcontext.h + mdp:/usr/include/qt6/QtGui/qopenglcontext_platform.h + mdp:/usr/include/qt6/QtGui/qopenglext.h + mdp:/usr/include/qt6/QtGui/qpaintdevice.h + mdp:/usr/include/qt6/QtGui/qpalette.h + mdp:/usr/include/qt6/QtGui/qpicture.h + mdp:/usr/include/qt6/QtGui/qpixelformat.h + mdp:/usr/include/qt6/QtGui/qpixmap.h + mdp:/usr/include/qt6/QtGui/qpolygon.h + mdp:/usr/include/qt6/QtGui/qregion.h + mdp:/usr/include/qt6/QtGui/qrgb.h + mdp:/usr/include/qt6/QtGui/qrgba64.h + mdp:/usr/include/qt6/QtGui/qsurfaceformat.h + mdp:/usr/include/qt6/QtGui/qtextdocument.h + mdp:/usr/include/qt6/QtGui/qtgui-config.h + mdp:/usr/include/qt6/QtGui/qtguiexports.h + mdp:/usr/include/qt6/QtGui/qtguiglobal.h + mdp:/usr/include/qt6/QtGui/qtransform.h + mdp:/usr/include/qt6/QtGui/qwindowdefs.h + mdp:/usr/include/qt6/QtOpenGL/QOpenGLFunctions_4_1_Core + mdp:/usr/include/qt6/QtOpenGL/QOpenGLVersionFunctions + mdp:/usr/include/qt6/QtOpenGL/QOpenGLVersionProfile + mdp:/usr/include/qt6/QtOpenGL/qopenglfunctions_4_1_core.h + mdp:/usr/include/qt6/QtOpenGL/qopenglversionfunctions.h + mdp:/usr/include/qt6/QtOpenGL/qopenglversionprofile.h + mdp:/usr/include/qt6/QtOpenGL/qtopenglexports.h + mdp:/usr/include/qt6/QtOpenGL/qtopenglglobal.h + mdp:/usr/include/qt6/QtOpenGLWidgets/QOpenGLWidget + mdp:/usr/include/qt6/QtOpenGLWidgets/qopenglwidget.h + mdp:/usr/include/qt6/QtOpenGLWidgets/qtopenglwidgetsexports.h + mdp:/usr/include/qt6/QtOpenGLWidgets/qtopenglwidgetsglobal.h + mdp:/usr/include/qt6/QtWidgets/QLabel + mdp:/usr/include/qt6/QtWidgets/QVBoxLayout + mdp:/usr/include/qt6/QtWidgets/QWidget + mdp:/usr/include/qt6/QtWidgets/qboxlayout.h + mdp:/usr/include/qt6/QtWidgets/qframe.h + mdp:/usr/include/qt6/QtWidgets/qgridlayout.h + mdp:/usr/include/qt6/QtWidgets/qlabel.h + mdp:/usr/include/qt6/QtWidgets/qlayout.h + mdp:/usr/include/qt6/QtWidgets/qlayoutitem.h + mdp:/usr/include/qt6/QtWidgets/qsizepolicy.h + mdp:/usr/include/qt6/QtWidgets/qtwidgets-config.h + mdp:/usr/include/qt6/QtWidgets/qtwidgetsexports.h + mdp:/usr/include/qt6/QtWidgets/qtwidgetsglobal.h + mdp:/usr/include/qt6/QtWidgets/qwidget.h + mdp:/usr/include/sched.h + mdp:/usr/include/semaphore.h + mdp:/usr/include/stdc-predef.h + mdp:/usr/include/stdint.h + mdp:/usr/include/stdio.h + mdp:/usr/include/stdlib.h + mdp:/usr/include/string.h + mdp:/usr/include/strings.h + mdp:/usr/include/sys/cdefs.h + mdp:/usr/include/sys/select.h + mdp:/usr/include/sys/single_threaded.h + mdp:/usr/include/sys/syscall.h + mdp:/usr/include/sys/time.h + mdp:/usr/include/sys/types.h + mdp:/usr/include/syscall.h + mdp:/usr/include/time.h + mdp:/usr/include/unistd.h + mdp:/usr/include/wchar.h + mdp:/usr/include/wctype.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/adxintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/ammintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxavx512intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxbf16intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxcomplexintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxfp16intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxfp8intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxint8intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxmovrsintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxtf32intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxtileintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxtransposeintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2-512bf16intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2-512convertintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2-512mediaintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2-512minmaxintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2-512satcvtintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2bf16intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2convertintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2copyintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2mediaintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2minmaxintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2satcvtintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx2intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512bf16intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512bf16vlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512bitalgintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512bitalgvlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512bwintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512cdintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512dqintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512fintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512fp16intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512fp16vlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512ifmaintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512ifmavlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vbmi2intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vbmi2vlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vbmiintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vbmivlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vlbwintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vldqintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vnniintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vnnivlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vp2intersectintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vp2intersectvlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vpopcntdqintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vpopcntdqvlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avxifmaintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avxintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avxneconvertintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avxvnniint16intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avxvnniint8intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avxvnniintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/bmi2intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/bmiintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/cetintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/cldemoteintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/clflushoptintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/clwbintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/clzerointrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/cmpccxaddintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/emmintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/enqcmdintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/f16cintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/fma4intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/fmaintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/fxsrintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/gfniintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/hresetintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/ia32intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/immintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/keylockerintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/lwpintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/lzcntintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/mm3dnow.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/mm_malloc.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/mmintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/movdirintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/movrsintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/mwaitintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/mwaitxintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/pconfigintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/pkuintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/pmmintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/popcntintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/prfchiintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/prfchwintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/raointintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/rdseedintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/rtmintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/serializeintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/sgxintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/sha512intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/shaintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/sm3intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/sm4intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/smmintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stdarg.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stdbool.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stddef.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/tbmintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/tmmintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/tsxldtrkintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/uintrintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/usermsrintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/vaesintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/vpclmulqdqintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/waitpkgintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/wbnoinvdintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/wmmintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/x86gprintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/x86intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/xmmintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/xopintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/xsavecintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/xsaveintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/xsaveoptintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/xsavesintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/xtestintrin.h +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/everything_search.cpp +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/thumbnail_cache_manager.cpp +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/file_ops_dialog.cpp +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/live_preview_manager.h + mmc:Q_OBJECT + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/kassetmanagerqt_autogen/moc_predefs.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/live_preview_manager.h + mdp:/usr/include/alloca.h + mdp:/usr/include/asm-generic/bitsperlong.h + mdp:/usr/include/asm-generic/errno-base.h + mdp:/usr/include/asm-generic/errno.h + mdp:/usr/include/asm-generic/int-ll64.h + mdp:/usr/include/asm-generic/posix_types.h + mdp:/usr/include/asm-generic/types.h + mdp:/usr/include/asm/bitsperlong.h + mdp:/usr/include/asm/errno.h + mdp:/usr/include/asm/posix_types.h + mdp:/usr/include/asm/posix_types_64.h + mdp:/usr/include/asm/types.h + mdp:/usr/include/asm/unistd.h + mdp:/usr/include/asm/unistd_64.h + mdp:/usr/include/assert.h + mdp:/usr/include/bits/atomic_wide_counter.h + mdp:/usr/include/bits/byteswap.h + mdp:/usr/include/bits/confname.h + mdp:/usr/include/bits/cpu-set.h + mdp:/usr/include/bits/endian.h + mdp:/usr/include/bits/endianness.h + mdp:/usr/include/bits/environments.h + mdp:/usr/include/bits/errno.h + mdp:/usr/include/bits/floatn-common.h + mdp:/usr/include/bits/floatn.h + mdp:/usr/include/bits/getopt_core.h + mdp:/usr/include/bits/getopt_posix.h + mdp:/usr/include/bits/libc-header-start.h + mdp:/usr/include/bits/local_lim.h + mdp:/usr/include/bits/locale.h + mdp:/usr/include/bits/long-double.h + mdp:/usr/include/bits/posix1_lim.h + mdp:/usr/include/bits/posix2_lim.h + mdp:/usr/include/bits/posix_opt.h + mdp:/usr/include/bits/pthread_stack_min-dynamic.h + mdp:/usr/include/bits/pthreadtypes-arch.h + mdp:/usr/include/bits/pthreadtypes.h + mdp:/usr/include/bits/sched.h + mdp:/usr/include/bits/select.h + mdp:/usr/include/bits/semaphore.h + mdp:/usr/include/bits/setjmp.h + mdp:/usr/include/bits/stdint-intn.h + mdp:/usr/include/bits/stdint-least.h + mdp:/usr/include/bits/stdint-uintn.h + mdp:/usr/include/bits/stdio_lim.h + mdp:/usr/include/bits/stdlib-float.h + mdp:/usr/include/bits/struct_mutex.h + mdp:/usr/include/bits/struct_rwlock.h + mdp:/usr/include/bits/syscall.h + mdp:/usr/include/bits/thread-shared-types.h + mdp:/usr/include/bits/time.h + mdp:/usr/include/bits/time64.h + mdp:/usr/include/bits/timesize.h + mdp:/usr/include/bits/timex.h + mdp:/usr/include/bits/types.h + mdp:/usr/include/bits/types/FILE.h + mdp:/usr/include/bits/types/__FILE.h + mdp:/usr/include/bits/types/__fpos64_t.h + mdp:/usr/include/bits/types/__fpos_t.h + mdp:/usr/include/bits/types/__locale_t.h + mdp:/usr/include/bits/types/__mbstate_t.h + mdp:/usr/include/bits/types/__sigset_t.h + mdp:/usr/include/bits/types/clock_t.h + mdp:/usr/include/bits/types/clockid_t.h + mdp:/usr/include/bits/types/cookie_io_functions_t.h + mdp:/usr/include/bits/types/error_t.h + mdp:/usr/include/bits/types/locale_t.h + mdp:/usr/include/bits/types/mbstate_t.h + mdp:/usr/include/bits/types/sigset_t.h + mdp:/usr/include/bits/types/struct_FILE.h + mdp:/usr/include/bits/types/struct___jmp_buf_tag.h + mdp:/usr/include/bits/types/struct_itimerspec.h + mdp:/usr/include/bits/types/struct_sched_param.h + mdp:/usr/include/bits/types/struct_timespec.h + mdp:/usr/include/bits/types/struct_timeval.h + mdp:/usr/include/bits/types/struct_tm.h + mdp:/usr/include/bits/types/time_t.h + mdp:/usr/include/bits/types/timer_t.h + mdp:/usr/include/bits/types/wint_t.h + mdp:/usr/include/bits/typesizes.h + mdp:/usr/include/bits/uintn-identity.h + mdp:/usr/include/bits/uio_lim.h + mdp:/usr/include/bits/unistd_ext.h + mdp:/usr/include/bits/waitflags.h + mdp:/usr/include/bits/waitstatus.h + mdp:/usr/include/bits/wchar.h + mdp:/usr/include/bits/wctype-wchar.h + mdp:/usr/include/bits/wordsize.h + mdp:/usr/include/bits/xopen_lim.h + mdp:/usr/include/c++/15/algorithm + mdp:/usr/include/c++/15/array + mdp:/usr/include/c++/15/atomic + mdp:/usr/include/c++/15/backward/auto_ptr.h + mdp:/usr/include/c++/15/backward/binders.h + mdp:/usr/include/c++/15/bit + mdp:/usr/include/c++/15/bits/algorithmfwd.h + mdp:/usr/include/c++/15/bits/align.h + mdp:/usr/include/c++/15/bits/alloc_traits.h + mdp:/usr/include/c++/15/bits/allocated_ptr.h + mdp:/usr/include/c++/15/bits/allocator.h + mdp:/usr/include/c++/15/bits/atomic_base.h + mdp:/usr/include/c++/15/bits/atomic_futex.h + mdp:/usr/include/c++/15/bits/atomic_lockfree_defines.h + mdp:/usr/include/c++/15/bits/atomic_timed_wait.h + mdp:/usr/include/c++/15/bits/atomic_wait.h + mdp:/usr/include/c++/15/bits/basic_ios.h + mdp:/usr/include/c++/15/bits/basic_ios.tcc + mdp:/usr/include/c++/15/bits/basic_string.h + mdp:/usr/include/c++/15/bits/basic_string.tcc + mdp:/usr/include/c++/15/bits/char_traits.h + mdp:/usr/include/c++/15/bits/charconv.h + mdp:/usr/include/c++/15/bits/chrono.h + mdp:/usr/include/c++/15/bits/chrono_io.h + mdp:/usr/include/c++/15/bits/codecvt.h + mdp:/usr/include/c++/15/bits/concept_check.h + mdp:/usr/include/c++/15/bits/cpp_type_traits.h + mdp:/usr/include/c++/15/bits/cxxabi_forced.h + mdp:/usr/include/c++/15/bits/cxxabi_init_exception.h + mdp:/usr/include/c++/15/bits/enable_special_members.h + mdp:/usr/include/c++/15/bits/erase_if.h + mdp:/usr/include/c++/15/bits/exception.h + mdp:/usr/include/c++/15/bits/exception_defines.h + mdp:/usr/include/c++/15/bits/exception_ptr.h + mdp:/usr/include/c++/15/bits/functexcept.h + mdp:/usr/include/c++/15/bits/functional_hash.h + mdp:/usr/include/c++/15/bits/hash_bytes.h + mdp:/usr/include/c++/15/bits/hashtable.h + mdp:/usr/include/c++/15/bits/hashtable_policy.h + mdp:/usr/include/c++/15/bits/invoke.h + mdp:/usr/include/c++/15/bits/ios_base.h + mdp:/usr/include/c++/15/bits/istream.tcc + mdp:/usr/include/c++/15/bits/iterator_concepts.h + mdp:/usr/include/c++/15/bits/list.tcc + mdp:/usr/include/c++/15/bits/locale_classes.h + mdp:/usr/include/c++/15/bits/locale_classes.tcc + mdp:/usr/include/c++/15/bits/locale_conv.h + mdp:/usr/include/c++/15/bits/locale_facets.h + mdp:/usr/include/c++/15/bits/locale_facets.tcc + mdp:/usr/include/c++/15/bits/locale_facets_nonio.h + mdp:/usr/include/c++/15/bits/locale_facets_nonio.tcc + mdp:/usr/include/c++/15/bits/localefwd.h + mdp:/usr/include/c++/15/bits/max_size_type.h + mdp:/usr/include/c++/15/bits/memory_resource.h + mdp:/usr/include/c++/15/bits/memoryfwd.h + mdp:/usr/include/c++/15/bits/move.h + mdp:/usr/include/c++/15/bits/nested_exception.h + mdp:/usr/include/c++/15/bits/new_allocator.h + mdp:/usr/include/c++/15/bits/node_handle.h + mdp:/usr/include/c++/15/bits/ostream.h + mdp:/usr/include/c++/15/bits/ostream.tcc + mdp:/usr/include/c++/15/bits/ostream_insert.h + mdp:/usr/include/c++/15/bits/parse_numbers.h + mdp:/usr/include/c++/15/bits/postypes.h + mdp:/usr/include/c++/15/bits/predefined_ops.h + mdp:/usr/include/c++/15/bits/ptr_traits.h + mdp:/usr/include/c++/15/bits/quoted_string.h + mdp:/usr/include/c++/15/bits/range_access.h + mdp:/usr/include/c++/15/bits/ranges_algo.h + mdp:/usr/include/c++/15/bits/ranges_algobase.h + mdp:/usr/include/c++/15/bits/ranges_base.h + mdp:/usr/include/c++/15/bits/ranges_cmp.h + mdp:/usr/include/c++/15/bits/ranges_uninitialized.h + mdp:/usr/include/c++/15/bits/ranges_util.h + mdp:/usr/include/c++/15/bits/refwrap.h + mdp:/usr/include/c++/15/bits/requires_hosted.h + mdp:/usr/include/c++/15/bits/semaphore_base.h + mdp:/usr/include/c++/15/bits/shared_ptr.h + mdp:/usr/include/c++/15/bits/shared_ptr_atomic.h + mdp:/usr/include/c++/15/bits/shared_ptr_base.h + mdp:/usr/include/c++/15/bits/specfun.h + mdp:/usr/include/c++/15/bits/sstream.tcc + mdp:/usr/include/c++/15/bits/std_abs.h + mdp:/usr/include/c++/15/bits/std_function.h + mdp:/usr/include/c++/15/bits/std_mutex.h + mdp:/usr/include/c++/15/bits/std_thread.h + mdp:/usr/include/c++/15/bits/stl_algo.h + mdp:/usr/include/c++/15/bits/stl_algobase.h + mdp:/usr/include/c++/15/bits/stl_bvector.h + mdp:/usr/include/c++/15/bits/stl_construct.h + mdp:/usr/include/c++/15/bits/stl_function.h + mdp:/usr/include/c++/15/bits/stl_heap.h + mdp:/usr/include/c++/15/bits/stl_iterator.h + mdp:/usr/include/c++/15/bits/stl_iterator_base_funcs.h + mdp:/usr/include/c++/15/bits/stl_iterator_base_types.h + mdp:/usr/include/c++/15/bits/stl_list.h + mdp:/usr/include/c++/15/bits/stl_map.h + mdp:/usr/include/c++/15/bits/stl_multimap.h + mdp:/usr/include/c++/15/bits/stl_numeric.h + mdp:/usr/include/c++/15/bits/stl_pair.h + mdp:/usr/include/c++/15/bits/stl_raw_storage_iter.h + mdp:/usr/include/c++/15/bits/stl_relops.h + mdp:/usr/include/c++/15/bits/stl_tempbuf.h + mdp:/usr/include/c++/15/bits/stl_tree.h + mdp:/usr/include/c++/15/bits/stl_uninitialized.h + mdp:/usr/include/c++/15/bits/stl_vector.h + mdp:/usr/include/c++/15/bits/stream_iterator.h + mdp:/usr/include/c++/15/bits/streambuf.tcc + mdp:/usr/include/c++/15/bits/streambuf_iterator.h + mdp:/usr/include/c++/15/bits/string_view.tcc + mdp:/usr/include/c++/15/bits/stringfwd.h + mdp:/usr/include/c++/15/bits/this_thread_sleep.h + mdp:/usr/include/c++/15/bits/uniform_int_dist.h + mdp:/usr/include/c++/15/bits/unique_lock.h + mdp:/usr/include/c++/15/bits/unique_ptr.h + mdp:/usr/include/c++/15/bits/unordered_map.h + mdp:/usr/include/c++/15/bits/uses_allocator.h + mdp:/usr/include/c++/15/bits/uses_allocator_args.h + mdp:/usr/include/c++/15/bits/utility.h + mdp:/usr/include/c++/15/bits/vector.tcc + mdp:/usr/include/c++/15/bits/version.h + mdp:/usr/include/c++/15/cassert + mdp:/usr/include/c++/15/cctype + mdp:/usr/include/c++/15/cerrno + mdp:/usr/include/c++/15/charconv + mdp:/usr/include/c++/15/chrono + mdp:/usr/include/c++/15/climits + mdp:/usr/include/c++/15/clocale + mdp:/usr/include/c++/15/cmath + mdp:/usr/include/c++/15/compare + mdp:/usr/include/c++/15/concepts + mdp:/usr/include/c++/15/condition_variable + mdp:/usr/include/c++/15/cstddef + mdp:/usr/include/c++/15/cstdint + mdp:/usr/include/c++/15/cstdio + mdp:/usr/include/c++/15/cstdlib + mdp:/usr/include/c++/15/cstring + mdp:/usr/include/c++/15/ctime + mdp:/usr/include/c++/15/cwchar + mdp:/usr/include/c++/15/cwctype + mdp:/usr/include/c++/15/debug/assertions.h + mdp:/usr/include/c++/15/debug/debug.h + mdp:/usr/include/c++/15/exception + mdp:/usr/include/c++/15/ext/aligned_buffer.h + mdp:/usr/include/c++/15/ext/alloc_traits.h + mdp:/usr/include/c++/15/ext/atomicity.h + mdp:/usr/include/c++/15/ext/concurrence.h + mdp:/usr/include/c++/15/ext/numeric_traits.h + mdp:/usr/include/c++/15/ext/string_conversions.h + mdp:/usr/include/c++/15/ext/type_traits.h + mdp:/usr/include/c++/15/format + mdp:/usr/include/c++/15/functional + mdp:/usr/include/c++/15/future + mdp:/usr/include/c++/15/initializer_list + mdp:/usr/include/c++/15/iomanip + mdp:/usr/include/c++/15/ios + mdp:/usr/include/c++/15/iosfwd + mdp:/usr/include/c++/15/istream + mdp:/usr/include/c++/15/iterator + mdp:/usr/include/c++/15/limits + mdp:/usr/include/c++/15/list + mdp:/usr/include/c++/15/locale + mdp:/usr/include/c++/15/map + mdp:/usr/include/c++/15/memory + mdp:/usr/include/c++/15/mutex + mdp:/usr/include/c++/15/new + mdp:/usr/include/c++/15/numeric + mdp:/usr/include/c++/15/optional + mdp:/usr/include/c++/15/ostream + mdp:/usr/include/c++/15/pstl/execution_defs.h + mdp:/usr/include/c++/15/pstl/glue_numeric_defs.h + mdp:/usr/include/c++/15/pstl/pstl_config.h + mdp:/usr/include/c++/15/ratio + mdp:/usr/include/c++/15/semaphore + mdp:/usr/include/c++/15/sstream + mdp:/usr/include/c++/15/stdexcept + mdp:/usr/include/c++/15/stop_token + mdp:/usr/include/c++/15/streambuf + mdp:/usr/include/c++/15/string + mdp:/usr/include/c++/15/string_view + mdp:/usr/include/c++/15/system_error + mdp:/usr/include/c++/15/tr1/bessel_function.tcc + mdp:/usr/include/c++/15/tr1/beta_function.tcc + mdp:/usr/include/c++/15/tr1/ell_integral.tcc + mdp:/usr/include/c++/15/tr1/exp_integral.tcc + mdp:/usr/include/c++/15/tr1/gamma.tcc + mdp:/usr/include/c++/15/tr1/hypergeometric.tcc + mdp:/usr/include/c++/15/tr1/legendre_function.tcc + mdp:/usr/include/c++/15/tr1/modified_bessel_func.tcc + mdp:/usr/include/c++/15/tr1/poly_hermite.tcc + mdp:/usr/include/c++/15/tr1/poly_laguerre.tcc + mdp:/usr/include/c++/15/tr1/riemann_zeta.tcc + mdp:/usr/include/c++/15/tr1/special_function_util.h + mdp:/usr/include/c++/15/tuple + mdp:/usr/include/c++/15/type_traits + mdp:/usr/include/c++/15/typeinfo + mdp:/usr/include/c++/15/unordered_map + mdp:/usr/include/c++/15/utility + mdp:/usr/include/c++/15/variant + mdp:/usr/include/c++/15/vector + mdp:/usr/include/c++/15/version + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/atomic_word.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++allocator.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++config.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++locale.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/cpu_defines.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/ctype_base.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/ctype_inline.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/error_constants.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/gthr-default.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/gthr.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/messages_members.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/os_defines.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/time_members.h + mdp:/usr/include/ctype.h + mdp:/usr/include/endian.h + mdp:/usr/include/errno.h + mdp:/usr/include/features-time64.h + mdp:/usr/include/features.h + mdp:/usr/include/gnu/stubs-64.h + mdp:/usr/include/gnu/stubs.h + mdp:/usr/include/libintl.h + mdp:/usr/include/limits.h + mdp:/usr/include/linux/close_range.h + mdp:/usr/include/linux/errno.h + mdp:/usr/include/linux/limits.h + mdp:/usr/include/linux/posix_types.h + mdp:/usr/include/linux/sched/types.h + mdp:/usr/include/linux/stddef.h + mdp:/usr/include/linux/types.h + mdp:/usr/include/locale.h + mdp:/usr/include/pthread.h + mdp:/usr/include/qt6/QtCore/QCache + mdp:/usr/include/qt6/QtCore/QElapsedTimer + mdp:/usr/include/qt6/QtCore/QHash + mdp:/usr/include/qt6/QtCore/QList + mdp:/usr/include/qt6/QtCore/QMutex + mdp:/usr/include/qt6/QtCore/QObject + mdp:/usr/include/qt6/QtCore/QReadWriteLock + mdp:/usr/include/qt6/QtCore/QSet + mdp:/usr/include/qt6/QtCore/QSize + mdp:/usr/include/qt6/QtCore/QStringList + mdp:/usr/include/qt6/QtCore/QThread + mdp:/usr/include/qt6/QtCore/QThreadPool + mdp:/usr/include/qt6/QtCore/q17memory.h + mdp:/usr/include/qt6/QtCore/q20functional.h + mdp:/usr/include/qt6/QtCore/q20iterator.h + mdp:/usr/include/qt6/QtCore/q20memory.h + mdp:/usr/include/qt6/QtCore/q20type_traits.h + mdp:/usr/include/qt6/QtCore/q20utility.h + mdp:/usr/include/qt6/QtCore/q23type_traits.h + mdp:/usr/include/qt6/QtCore/q23utility.h + mdp:/usr/include/qt6/QtCore/qalgorithms.h + mdp:/usr/include/qt6/QtCore/qanystringview.h + mdp:/usr/include/qt6/QtCore/qarraydata.h + mdp:/usr/include/qt6/QtCore/qarraydataops.h + mdp:/usr/include/qt6/QtCore/qarraydatapointer.h + mdp:/usr/include/qt6/QtCore/qassert.h + mdp:/usr/include/qt6/QtCore/qatomic.h + mdp:/usr/include/qt6/QtCore/qatomic_cxx11.h + mdp:/usr/include/qt6/QtCore/qbasicatomic.h + mdp:/usr/include/qt6/QtCore/qbindingstorage.h + mdp:/usr/include/qt6/QtCore/qbytearray.h + mdp:/usr/include/qt6/QtCore/qbytearrayalgorithms.h + mdp:/usr/include/qt6/QtCore/qbytearraylist.h + mdp:/usr/include/qt6/QtCore/qbytearrayview.h + mdp:/usr/include/qt6/QtCore/qcache.h + mdp:/usr/include/qt6/QtCore/qchar.h + mdp:/usr/include/qt6/QtCore/qcheckedint_impl.h + mdp:/usr/include/qt6/QtCore/qcompare.h + mdp:/usr/include/qt6/QtCore/qcompare_impl.h + mdp:/usr/include/qt6/QtCore/qcomparehelpers.h + mdp:/usr/include/qt6/QtCore/qcompilerdetection.h + mdp:/usr/include/qt6/QtCore/qconfig-64.h + mdp:/usr/include/qt6/QtCore/qconfig.h + mdp:/usr/include/qt6/QtCore/qconstructormacros.h + mdp:/usr/include/qt6/QtCore/qcontainerfwd.h + mdp:/usr/include/qt6/QtCore/qcontainerinfo.h + mdp:/usr/include/qt6/QtCore/qcontainertools_impl.h + mdp:/usr/include/qt6/QtCore/qdarwinhelpers.h + mdp:/usr/include/qt6/QtCore/qdatastream.h + mdp:/usr/include/qt6/QtCore/qdeadlinetimer.h + mdp:/usr/include/qt6/QtCore/qelapsedtimer.h + mdp:/usr/include/qt6/QtCore/qexceptionhandling.h + mdp:/usr/include/qt6/QtCore/qflags.h + mdp:/usr/include/qt6/QtCore/qfloat16.h + mdp:/usr/include/qt6/QtCore/qforeach.h + mdp:/usr/include/qt6/QtCore/qfunctionaltools_impl.h + mdp:/usr/include/qt6/QtCore/qfunctionpointer.h + mdp:/usr/include/qt6/QtCore/qgenericatomic.h + mdp:/usr/include/qt6/QtCore/qglobal.h + mdp:/usr/include/qt6/QtCore/qglobalstatic.h + mdp:/usr/include/qt6/QtCore/qhash.h + mdp:/usr/include/qt6/QtCore/qhashfunctions.h + mdp:/usr/include/qt6/QtCore/qiodevicebase.h + mdp:/usr/include/qt6/QtCore/qiterable.h + mdp:/usr/include/qt6/QtCore/qiterator.h + mdp:/usr/include/qt6/QtCore/qlatin1stringview.h + mdp:/usr/include/qt6/QtCore/qline.h + mdp:/usr/include/qt6/QtCore/qlist.h + mdp:/usr/include/qt6/QtCore/qlogging.h + mdp:/usr/include/qt6/QtCore/qmalloc.h + mdp:/usr/include/qt6/QtCore/qmargins.h + mdp:/usr/include/qt6/QtCore/qmath.h + mdp:/usr/include/qt6/QtCore/qmetacontainer.h + mdp:/usr/include/qt6/QtCore/qmetatype.h + mdp:/usr/include/qt6/QtCore/qminmax.h + mdp:/usr/include/qt6/QtCore/qmutex.h + mdp:/usr/include/qt6/QtCore/qnamespace.h + mdp:/usr/include/qt6/QtCore/qnumeric.h + mdp:/usr/include/qt6/QtCore/qobject.h + mdp:/usr/include/qt6/QtCore/qobject_impl.h + mdp:/usr/include/qt6/QtCore/qobjectdefs.h + mdp:/usr/include/qt6/QtCore/qobjectdefs_impl.h + mdp:/usr/include/qt6/QtCore/qoverload.h + mdp:/usr/include/qt6/QtCore/qpair.h + mdp:/usr/include/qt6/QtCore/qpoint.h + mdp:/usr/include/qt6/QtCore/qprocessordetection.h + mdp:/usr/include/qt6/QtCore/qreadwritelock.h + mdp:/usr/include/qt6/QtCore/qrect.h + mdp:/usr/include/qt6/QtCore/qrefcount.h + mdp:/usr/include/qt6/QtCore/qrunnable.h + mdp:/usr/include/qt6/QtCore/qscopedpointer.h + mdp:/usr/include/qt6/QtCore/qscopeguard.h + mdp:/usr/include/qt6/QtCore/qset.h + mdp:/usr/include/qt6/QtCore/qshareddata.h + mdp:/usr/include/qt6/QtCore/qsize.h + mdp:/usr/include/qt6/QtCore/qspan.h + mdp:/usr/include/qt6/QtCore/qstdlibdetection.h + mdp:/usr/include/qt6/QtCore/qstring.h + mdp:/usr/include/qt6/QtCore/qstringalgorithms.h + mdp:/usr/include/qt6/QtCore/qstringbuilder.h + mdp:/usr/include/qt6/QtCore/qstringconverter.h + mdp:/usr/include/qt6/QtCore/qstringconverter_base.h + mdp:/usr/include/qt6/QtCore/qstringfwd.h + mdp:/usr/include/qt6/QtCore/qstringlist.h + mdp:/usr/include/qt6/QtCore/qstringmatcher.h + mdp:/usr/include/qt6/QtCore/qstringtokenizer.h + mdp:/usr/include/qt6/QtCore/qstringview.h + mdp:/usr/include/qt6/QtCore/qswap.h + mdp:/usr/include/qt6/QtCore/qsysinfo.h + mdp:/usr/include/qt6/QtCore/qsystemdetection.h + mdp:/usr/include/qt6/QtCore/qtaggedpointer.h + mdp:/usr/include/qt6/QtCore/qtclasshelpermacros.h + mdp:/usr/include/qt6/QtCore/qtconfiginclude.h + mdp:/usr/include/qt6/QtCore/qtconfigmacros.h + mdp:/usr/include/qt6/QtCore/qtcore-config.h + mdp:/usr/include/qt6/QtCore/qtcoreexports.h + mdp:/usr/include/qt6/QtCore/qtcoreglobal.h + mdp:/usr/include/qt6/QtCore/qtdeprecationdefinitions.h + mdp:/usr/include/qt6/QtCore/qtdeprecationmarkers.h + mdp:/usr/include/qt6/QtCore/qtenvironmentvariables.h + mdp:/usr/include/qt6/QtCore/qtformat_impl.h + mdp:/usr/include/qt6/QtCore/qthread.h + mdp:/usr/include/qt6/QtCore/qthreadpool.h + mdp:/usr/include/qt6/QtCore/qtmetamacros.h + mdp:/usr/include/qt6/QtCore/qtnoop.h + mdp:/usr/include/qt6/QtCore/qtpreprocessorsupport.h + mdp:/usr/include/qt6/QtCore/qtresource.h + mdp:/usr/include/qt6/QtCore/qtsan_impl.h + mdp:/usr/include/qt6/QtCore/qttranslation.h + mdp:/usr/include/qt6/QtCore/qttypetraits.h + mdp:/usr/include/qt6/QtCore/qtversion.h + mdp:/usr/include/qt6/QtCore/qtversionchecks.h + mdp:/usr/include/qt6/QtCore/qtypeinfo.h + mdp:/usr/include/qt6/QtCore/qtypes.h + mdp:/usr/include/qt6/QtCore/qutf8stringview.h + mdp:/usr/include/qt6/QtCore/qversiontagging.h + mdp:/usr/include/qt6/QtCore/qxptype_traits.h + mdp:/usr/include/qt6/QtCore/qyieldcpu.h + mdp:/usr/include/qt6/QtGui/QImage + mdp:/usr/include/qt6/QtGui/QPixmap + mdp:/usr/include/qt6/QtGui/qcolor.h + mdp:/usr/include/qt6/QtGui/qimage.h + mdp:/usr/include/qt6/QtGui/qpaintdevice.h + mdp:/usr/include/qt6/QtGui/qpixelformat.h + mdp:/usr/include/qt6/QtGui/qpixmap.h + mdp:/usr/include/qt6/QtGui/qpolygon.h + mdp:/usr/include/qt6/QtGui/qregion.h + mdp:/usr/include/qt6/QtGui/qrgb.h + mdp:/usr/include/qt6/QtGui/qrgba64.h + mdp:/usr/include/qt6/QtGui/qtgui-config.h + mdp:/usr/include/qt6/QtGui/qtguiexports.h + mdp:/usr/include/qt6/QtGui/qtguiglobal.h + mdp:/usr/include/qt6/QtGui/qtransform.h + mdp:/usr/include/qt6/QtGui/qwindowdefs.h + mdp:/usr/include/sched.h + mdp:/usr/include/semaphore.h + mdp:/usr/include/stdc-predef.h + mdp:/usr/include/stdint.h + mdp:/usr/include/stdio.h + mdp:/usr/include/stdlib.h + mdp:/usr/include/string.h + mdp:/usr/include/strings.h + mdp:/usr/include/sys/cdefs.h + mdp:/usr/include/sys/select.h + mdp:/usr/include/sys/single_threaded.h + mdp:/usr/include/sys/syscall.h + mdp:/usr/include/sys/time.h + mdp:/usr/include/sys/types.h + mdp:/usr/include/syscall.h + mdp:/usr/include/time.h + mdp:/usr/include/unistd.h + mdp:/usr/include/wchar.h + mdp:/usr/include/wctype.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stdarg.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stdbool.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stddef.h +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/everything_search_dialog.h + mmc:Q_OBJECT + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/kassetmanagerqt_autogen/moc_predefs.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/everything_search.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/everything_search_dialog.h + mdp:/usr/include/alloca.h + mdp:/usr/include/asm-generic/bitsperlong.h + mdp:/usr/include/asm-generic/errno-base.h + mdp:/usr/include/asm-generic/errno.h + mdp:/usr/include/asm-generic/int-ll64.h + mdp:/usr/include/asm-generic/posix_types.h + mdp:/usr/include/asm-generic/types.h + mdp:/usr/include/asm/bitsperlong.h + mdp:/usr/include/asm/errno.h + mdp:/usr/include/asm/posix_types.h + mdp:/usr/include/asm/posix_types_64.h + mdp:/usr/include/asm/types.h + mdp:/usr/include/asm/unistd.h + mdp:/usr/include/asm/unistd_64.h + mdp:/usr/include/assert.h + mdp:/usr/include/bits/atomic_wide_counter.h + mdp:/usr/include/bits/byteswap.h + mdp:/usr/include/bits/confname.h + mdp:/usr/include/bits/cpu-set.h + mdp:/usr/include/bits/endian.h + mdp:/usr/include/bits/endianness.h + mdp:/usr/include/bits/environments.h + mdp:/usr/include/bits/errno.h + mdp:/usr/include/bits/floatn-common.h + mdp:/usr/include/bits/floatn.h + mdp:/usr/include/bits/getopt_core.h + mdp:/usr/include/bits/getopt_posix.h + mdp:/usr/include/bits/libc-header-start.h + mdp:/usr/include/bits/local_lim.h + mdp:/usr/include/bits/locale.h + mdp:/usr/include/bits/long-double.h + mdp:/usr/include/bits/posix1_lim.h + mdp:/usr/include/bits/posix2_lim.h + mdp:/usr/include/bits/posix_opt.h + mdp:/usr/include/bits/pthread_stack_min-dynamic.h + mdp:/usr/include/bits/pthreadtypes-arch.h + mdp:/usr/include/bits/pthreadtypes.h + mdp:/usr/include/bits/sched.h + mdp:/usr/include/bits/select.h + mdp:/usr/include/bits/setjmp.h + mdp:/usr/include/bits/stdint-intn.h + mdp:/usr/include/bits/stdint-least.h + mdp:/usr/include/bits/stdint-uintn.h + mdp:/usr/include/bits/stdio_lim.h + mdp:/usr/include/bits/stdlib-float.h + mdp:/usr/include/bits/struct_mutex.h + mdp:/usr/include/bits/struct_rwlock.h + mdp:/usr/include/bits/syscall.h + mdp:/usr/include/bits/thread-shared-types.h + mdp:/usr/include/bits/time.h + mdp:/usr/include/bits/time64.h + mdp:/usr/include/bits/timesize.h + mdp:/usr/include/bits/timex.h + mdp:/usr/include/bits/types.h + mdp:/usr/include/bits/types/FILE.h + mdp:/usr/include/bits/types/__FILE.h + mdp:/usr/include/bits/types/__fpos64_t.h + mdp:/usr/include/bits/types/__fpos_t.h + mdp:/usr/include/bits/types/__locale_t.h + mdp:/usr/include/bits/types/__mbstate_t.h + mdp:/usr/include/bits/types/__sigset_t.h + mdp:/usr/include/bits/types/clock_t.h + mdp:/usr/include/bits/types/clockid_t.h + mdp:/usr/include/bits/types/cookie_io_functions_t.h + mdp:/usr/include/bits/types/error_t.h + mdp:/usr/include/bits/types/locale_t.h + mdp:/usr/include/bits/types/mbstate_t.h + mdp:/usr/include/bits/types/sigset_t.h + mdp:/usr/include/bits/types/struct_FILE.h + mdp:/usr/include/bits/types/struct___jmp_buf_tag.h + mdp:/usr/include/bits/types/struct_itimerspec.h + mdp:/usr/include/bits/types/struct_sched_param.h + mdp:/usr/include/bits/types/struct_timespec.h + mdp:/usr/include/bits/types/struct_timeval.h + mdp:/usr/include/bits/types/struct_tm.h + mdp:/usr/include/bits/types/time_t.h + mdp:/usr/include/bits/types/timer_t.h + mdp:/usr/include/bits/types/wint_t.h + mdp:/usr/include/bits/typesizes.h + mdp:/usr/include/bits/uintn-identity.h + mdp:/usr/include/bits/uio_lim.h + mdp:/usr/include/bits/unistd_ext.h + mdp:/usr/include/bits/waitflags.h + mdp:/usr/include/bits/waitstatus.h + mdp:/usr/include/bits/wchar.h + mdp:/usr/include/bits/wctype-wchar.h + mdp:/usr/include/bits/wordsize.h + mdp:/usr/include/bits/xopen_lim.h + mdp:/usr/include/c++/15/algorithm + mdp:/usr/include/c++/15/array + mdp:/usr/include/c++/15/atomic + mdp:/usr/include/c++/15/backward/auto_ptr.h + mdp:/usr/include/c++/15/backward/binders.h + mdp:/usr/include/c++/15/bit + mdp:/usr/include/c++/15/bits/algorithmfwd.h + mdp:/usr/include/c++/15/bits/align.h + mdp:/usr/include/c++/15/bits/alloc_traits.h + mdp:/usr/include/c++/15/bits/allocated_ptr.h + mdp:/usr/include/c++/15/bits/allocator.h + mdp:/usr/include/c++/15/bits/atomic_base.h + mdp:/usr/include/c++/15/bits/atomic_lockfree_defines.h + mdp:/usr/include/c++/15/bits/atomic_wait.h + mdp:/usr/include/c++/15/bits/basic_ios.h + mdp:/usr/include/c++/15/bits/basic_ios.tcc + mdp:/usr/include/c++/15/bits/basic_string.h + mdp:/usr/include/c++/15/bits/basic_string.tcc + mdp:/usr/include/c++/15/bits/char_traits.h + mdp:/usr/include/c++/15/bits/charconv.h + mdp:/usr/include/c++/15/bits/chrono.h + mdp:/usr/include/c++/15/bits/chrono_io.h + mdp:/usr/include/c++/15/bits/codecvt.h + mdp:/usr/include/c++/15/bits/concept_check.h + mdp:/usr/include/c++/15/bits/cpp_type_traits.h + mdp:/usr/include/c++/15/bits/cxxabi_forced.h + mdp:/usr/include/c++/15/bits/cxxabi_init_exception.h + mdp:/usr/include/c++/15/bits/enable_special_members.h + mdp:/usr/include/c++/15/bits/erase_if.h + mdp:/usr/include/c++/15/bits/exception.h + mdp:/usr/include/c++/15/bits/exception_defines.h + mdp:/usr/include/c++/15/bits/exception_ptr.h + mdp:/usr/include/c++/15/bits/functexcept.h + mdp:/usr/include/c++/15/bits/functional_hash.h + mdp:/usr/include/c++/15/bits/hash_bytes.h + mdp:/usr/include/c++/15/bits/hashtable.h + mdp:/usr/include/c++/15/bits/hashtable_policy.h + mdp:/usr/include/c++/15/bits/invoke.h + mdp:/usr/include/c++/15/bits/ios_base.h + mdp:/usr/include/c++/15/bits/istream.tcc + mdp:/usr/include/c++/15/bits/iterator_concepts.h + mdp:/usr/include/c++/15/bits/list.tcc + mdp:/usr/include/c++/15/bits/locale_classes.h + mdp:/usr/include/c++/15/bits/locale_classes.tcc + mdp:/usr/include/c++/15/bits/locale_conv.h + mdp:/usr/include/c++/15/bits/locale_facets.h + mdp:/usr/include/c++/15/bits/locale_facets.tcc + mdp:/usr/include/c++/15/bits/locale_facets_nonio.h + mdp:/usr/include/c++/15/bits/locale_facets_nonio.tcc + mdp:/usr/include/c++/15/bits/localefwd.h + mdp:/usr/include/c++/15/bits/max_size_type.h + mdp:/usr/include/c++/15/bits/memory_resource.h + mdp:/usr/include/c++/15/bits/memoryfwd.h + mdp:/usr/include/c++/15/bits/move.h + mdp:/usr/include/c++/15/bits/nested_exception.h + mdp:/usr/include/c++/15/bits/new_allocator.h + mdp:/usr/include/c++/15/bits/node_handle.h + mdp:/usr/include/c++/15/bits/ostream.h + mdp:/usr/include/c++/15/bits/ostream.tcc + mdp:/usr/include/c++/15/bits/ostream_insert.h + mdp:/usr/include/c++/15/bits/parse_numbers.h + mdp:/usr/include/c++/15/bits/postypes.h + mdp:/usr/include/c++/15/bits/predefined_ops.h + mdp:/usr/include/c++/15/bits/ptr_traits.h + mdp:/usr/include/c++/15/bits/quoted_string.h + mdp:/usr/include/c++/15/bits/range_access.h + mdp:/usr/include/c++/15/bits/ranges_algo.h + mdp:/usr/include/c++/15/bits/ranges_algobase.h + mdp:/usr/include/c++/15/bits/ranges_base.h + mdp:/usr/include/c++/15/bits/ranges_cmp.h + mdp:/usr/include/c++/15/bits/ranges_uninitialized.h + mdp:/usr/include/c++/15/bits/ranges_util.h + mdp:/usr/include/c++/15/bits/refwrap.h + mdp:/usr/include/c++/15/bits/requires_hosted.h + mdp:/usr/include/c++/15/bits/shared_ptr.h + mdp:/usr/include/c++/15/bits/shared_ptr_atomic.h + mdp:/usr/include/c++/15/bits/shared_ptr_base.h + mdp:/usr/include/c++/15/bits/specfun.h + mdp:/usr/include/c++/15/bits/sstream.tcc + mdp:/usr/include/c++/15/bits/std_abs.h + mdp:/usr/include/c++/15/bits/std_function.h + mdp:/usr/include/c++/15/bits/std_mutex.h + mdp:/usr/include/c++/15/bits/stl_algo.h + mdp:/usr/include/c++/15/bits/stl_algobase.h + mdp:/usr/include/c++/15/bits/stl_bvector.h + mdp:/usr/include/c++/15/bits/stl_construct.h + mdp:/usr/include/c++/15/bits/stl_function.h + mdp:/usr/include/c++/15/bits/stl_heap.h + mdp:/usr/include/c++/15/bits/stl_iterator.h + mdp:/usr/include/c++/15/bits/stl_iterator_base_funcs.h + mdp:/usr/include/c++/15/bits/stl_iterator_base_types.h + mdp:/usr/include/c++/15/bits/stl_list.h + mdp:/usr/include/c++/15/bits/stl_map.h + mdp:/usr/include/c++/15/bits/stl_multimap.h + mdp:/usr/include/c++/15/bits/stl_multiset.h + mdp:/usr/include/c++/15/bits/stl_numeric.h + mdp:/usr/include/c++/15/bits/stl_pair.h + mdp:/usr/include/c++/15/bits/stl_raw_storage_iter.h + mdp:/usr/include/c++/15/bits/stl_relops.h + mdp:/usr/include/c++/15/bits/stl_set.h + mdp:/usr/include/c++/15/bits/stl_tempbuf.h + mdp:/usr/include/c++/15/bits/stl_tree.h + mdp:/usr/include/c++/15/bits/stl_uninitialized.h + mdp:/usr/include/c++/15/bits/stl_vector.h + mdp:/usr/include/c++/15/bits/stream_iterator.h + mdp:/usr/include/c++/15/bits/streambuf.tcc + mdp:/usr/include/c++/15/bits/streambuf_iterator.h + mdp:/usr/include/c++/15/bits/string_view.tcc + mdp:/usr/include/c++/15/bits/stringfwd.h + mdp:/usr/include/c++/15/bits/uniform_int_dist.h + mdp:/usr/include/c++/15/bits/unique_ptr.h + mdp:/usr/include/c++/15/bits/unordered_map.h + mdp:/usr/include/c++/15/bits/unordered_set.h + mdp:/usr/include/c++/15/bits/uses_allocator.h + mdp:/usr/include/c++/15/bits/uses_allocator_args.h + mdp:/usr/include/c++/15/bits/utility.h + mdp:/usr/include/c++/15/bits/vector.tcc + mdp:/usr/include/c++/15/bits/version.h + mdp:/usr/include/c++/15/cassert + mdp:/usr/include/c++/15/cctype + mdp:/usr/include/c++/15/cerrno + mdp:/usr/include/c++/15/charconv + mdp:/usr/include/c++/15/chrono + mdp:/usr/include/c++/15/climits + mdp:/usr/include/c++/15/clocale + mdp:/usr/include/c++/15/cmath + mdp:/usr/include/c++/15/compare + mdp:/usr/include/c++/15/concepts + mdp:/usr/include/c++/15/cstddef + mdp:/usr/include/c++/15/cstdint + mdp:/usr/include/c++/15/cstdio + mdp:/usr/include/c++/15/cstdlib + mdp:/usr/include/c++/15/cstring + mdp:/usr/include/c++/15/ctime + mdp:/usr/include/c++/15/cwchar + mdp:/usr/include/c++/15/cwctype + mdp:/usr/include/c++/15/debug/assertions.h + mdp:/usr/include/c++/15/debug/debug.h + mdp:/usr/include/c++/15/exception + mdp:/usr/include/c++/15/ext/aligned_buffer.h + mdp:/usr/include/c++/15/ext/alloc_traits.h + mdp:/usr/include/c++/15/ext/atomicity.h + mdp:/usr/include/c++/15/ext/concurrence.h + mdp:/usr/include/c++/15/ext/numeric_traits.h + mdp:/usr/include/c++/15/ext/string_conversions.h + mdp:/usr/include/c++/15/ext/type_traits.h + mdp:/usr/include/c++/15/format + mdp:/usr/include/c++/15/functional + mdp:/usr/include/c++/15/initializer_list + mdp:/usr/include/c++/15/iomanip + mdp:/usr/include/c++/15/ios + mdp:/usr/include/c++/15/iosfwd + mdp:/usr/include/c++/15/istream + mdp:/usr/include/c++/15/iterator + mdp:/usr/include/c++/15/limits + mdp:/usr/include/c++/15/list + mdp:/usr/include/c++/15/locale + mdp:/usr/include/c++/15/map + mdp:/usr/include/c++/15/memory + mdp:/usr/include/c++/15/new + mdp:/usr/include/c++/15/numeric + mdp:/usr/include/c++/15/optional + mdp:/usr/include/c++/15/ostream + mdp:/usr/include/c++/15/pstl/execution_defs.h + mdp:/usr/include/c++/15/pstl/glue_numeric_defs.h + mdp:/usr/include/c++/15/pstl/pstl_config.h + mdp:/usr/include/c++/15/ratio + mdp:/usr/include/c++/15/set + mdp:/usr/include/c++/15/sstream + mdp:/usr/include/c++/15/stdexcept + mdp:/usr/include/c++/15/streambuf + mdp:/usr/include/c++/15/string + mdp:/usr/include/c++/15/string_view + mdp:/usr/include/c++/15/system_error + mdp:/usr/include/c++/15/tr1/bessel_function.tcc + mdp:/usr/include/c++/15/tr1/beta_function.tcc + mdp:/usr/include/c++/15/tr1/ell_integral.tcc + mdp:/usr/include/c++/15/tr1/exp_integral.tcc + mdp:/usr/include/c++/15/tr1/gamma.tcc + mdp:/usr/include/c++/15/tr1/hypergeometric.tcc + mdp:/usr/include/c++/15/tr1/legendre_function.tcc + mdp:/usr/include/c++/15/tr1/modified_bessel_func.tcc + mdp:/usr/include/c++/15/tr1/poly_hermite.tcc + mdp:/usr/include/c++/15/tr1/poly_laguerre.tcc + mdp:/usr/include/c++/15/tr1/riemann_zeta.tcc + mdp:/usr/include/c++/15/tr1/special_function_util.h + mdp:/usr/include/c++/15/tuple + mdp:/usr/include/c++/15/type_traits + mdp:/usr/include/c++/15/typeinfo + mdp:/usr/include/c++/15/unordered_map + mdp:/usr/include/c++/15/unordered_set + mdp:/usr/include/c++/15/utility + mdp:/usr/include/c++/15/variant + mdp:/usr/include/c++/15/vector + mdp:/usr/include/c++/15/version + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/atomic_word.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++allocator.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++config.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++locale.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/cpu_defines.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/ctype_base.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/ctype_inline.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/error_constants.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/gthr-default.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/gthr.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/messages_members.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/os_defines.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/time_members.h + mdp:/usr/include/ctype.h + mdp:/usr/include/endian.h + mdp:/usr/include/errno.h + mdp:/usr/include/features-time64.h + mdp:/usr/include/features.h + mdp:/usr/include/gnu/stubs-64.h + mdp:/usr/include/gnu/stubs.h + mdp:/usr/include/libintl.h + mdp:/usr/include/limits.h + mdp:/usr/include/linux/close_range.h + mdp:/usr/include/linux/errno.h + mdp:/usr/include/linux/limits.h + mdp:/usr/include/linux/posix_types.h + mdp:/usr/include/linux/sched/types.h + mdp:/usr/include/linux/stddef.h + mdp:/usr/include/linux/types.h + mdp:/usr/include/locale.h + mdp:/usr/include/pthread.h + mdp:/usr/include/qt6/QtCore/QDateTime + mdp:/usr/include/qt6/QtCore/QLibrary + mdp:/usr/include/qt6/QtCore/QString + mdp:/usr/include/qt6/QtCore/QVector + mdp:/usr/include/qt6/QtCore/q17memory.h + mdp:/usr/include/qt6/QtCore/q20functional.h + mdp:/usr/include/qt6/QtCore/q20iterator.h + mdp:/usr/include/qt6/QtCore/q20memory.h + mdp:/usr/include/qt6/QtCore/q20type_traits.h + mdp:/usr/include/qt6/QtCore/q20utility.h + mdp:/usr/include/qt6/QtCore/q23type_traits.h + mdp:/usr/include/qt6/QtCore/q23utility.h + mdp:/usr/include/qt6/QtCore/qabstractitemmodel.h + mdp:/usr/include/qt6/QtCore/qalgorithms.h + mdp:/usr/include/qt6/QtCore/qalloc.h + mdp:/usr/include/qt6/QtCore/qanystringview.h + mdp:/usr/include/qt6/QtCore/qarraydata.h + mdp:/usr/include/qt6/QtCore/qarraydataops.h + mdp:/usr/include/qt6/QtCore/qarraydatapointer.h + mdp:/usr/include/qt6/QtCore/qassert.h + mdp:/usr/include/qt6/QtCore/qatomic.h + mdp:/usr/include/qt6/QtCore/qatomic_cxx11.h + mdp:/usr/include/qt6/QtCore/qbasicatomic.h + mdp:/usr/include/qt6/QtCore/qbindingstorage.h + mdp:/usr/include/qt6/QtCore/qbytearray.h + mdp:/usr/include/qt6/QtCore/qbytearrayalgorithms.h + mdp:/usr/include/qt6/QtCore/qbytearraylist.h + mdp:/usr/include/qt6/QtCore/qbytearrayview.h + mdp:/usr/include/qt6/QtCore/qcalendar.h + mdp:/usr/include/qt6/QtCore/qchar.h + mdp:/usr/include/qt6/QtCore/qcheckedint_impl.h + mdp:/usr/include/qt6/QtCore/qcompare.h + mdp:/usr/include/qt6/QtCore/qcompare_impl.h + mdp:/usr/include/qt6/QtCore/qcomparehelpers.h + mdp:/usr/include/qt6/QtCore/qcompilerdetection.h + mdp:/usr/include/qt6/QtCore/qconfig-64.h + mdp:/usr/include/qt6/QtCore/qconfig.h + mdp:/usr/include/qt6/QtCore/qconstructormacros.h + mdp:/usr/include/qt6/QtCore/qcontainerfwd.h + mdp:/usr/include/qt6/QtCore/qcontainerinfo.h + mdp:/usr/include/qt6/QtCore/qcontainertools_impl.h + mdp:/usr/include/qt6/QtCore/qcontiguouscache.h + mdp:/usr/include/qt6/QtCore/qdarwinhelpers.h + mdp:/usr/include/qt6/QtCore/qdatastream.h + mdp:/usr/include/qt6/QtCore/qdatetime.h + mdp:/usr/include/qt6/QtCore/qdebug.h + mdp:/usr/include/qt6/QtCore/qendian.h + mdp:/usr/include/qt6/QtCore/qexceptionhandling.h + mdp:/usr/include/qt6/QtCore/qflags.h + mdp:/usr/include/qt6/QtCore/qfloat16.h + mdp:/usr/include/qt6/QtCore/qforeach.h + mdp:/usr/include/qt6/QtCore/qfunctionaltools_impl.h + mdp:/usr/include/qt6/QtCore/qfunctionpointer.h + mdp:/usr/include/qt6/QtCore/qgenericatomic.h + mdp:/usr/include/qt6/QtCore/qglobal.h + mdp:/usr/include/qt6/QtCore/qglobalstatic.h + mdp:/usr/include/qt6/QtCore/qhash.h + mdp:/usr/include/qt6/QtCore/qhashfunctions.h + mdp:/usr/include/qt6/QtCore/qiodevice.h + mdp:/usr/include/qt6/QtCore/qiodevicebase.h + mdp:/usr/include/qt6/QtCore/qitemselectionmodel.h + mdp:/usr/include/qt6/QtCore/qiterable.h + mdp:/usr/include/qt6/QtCore/qiterator.h + mdp:/usr/include/qt6/QtCore/qlatin1stringview.h + mdp:/usr/include/qt6/QtCore/qlibrary.h + mdp:/usr/include/qt6/QtCore/qline.h + mdp:/usr/include/qt6/QtCore/qlist.h + mdp:/usr/include/qt6/QtCore/qlocale.h + mdp:/usr/include/qt6/QtCore/qlogging.h + mdp:/usr/include/qt6/QtCore/qmalloc.h + mdp:/usr/include/qt6/QtCore/qmap.h + mdp:/usr/include/qt6/QtCore/qmargins.h + mdp:/usr/include/qt6/QtCore/qmath.h + mdp:/usr/include/qt6/QtCore/qmetacontainer.h + mdp:/usr/include/qt6/QtCore/qmetatype.h + mdp:/usr/include/qt6/QtCore/qminmax.h + mdp:/usr/include/qt6/QtCore/qnamespace.h + mdp:/usr/include/qt6/QtCore/qnumeric.h + mdp:/usr/include/qt6/QtCore/qobject.h + mdp:/usr/include/qt6/QtCore/qobject_impl.h + mdp:/usr/include/qt6/QtCore/qobjectdefs.h + mdp:/usr/include/qt6/QtCore/qobjectdefs_impl.h + mdp:/usr/include/qt6/QtCore/qoverload.h + mdp:/usr/include/qt6/QtCore/qpair.h + mdp:/usr/include/qt6/QtCore/qpoint.h + mdp:/usr/include/qt6/QtCore/qprocessordetection.h + mdp:/usr/include/qt6/QtCore/qrect.h + mdp:/usr/include/qt6/QtCore/qrefcount.h + mdp:/usr/include/qt6/QtCore/qregularexpression.h + mdp:/usr/include/qt6/QtCore/qscopedpointer.h + mdp:/usr/include/qt6/QtCore/qscopeguard.h + mdp:/usr/include/qt6/QtCore/qset.h + mdp:/usr/include/qt6/QtCore/qshareddata.h + mdp:/usr/include/qt6/QtCore/qshareddata_impl.h + mdp:/usr/include/qt6/QtCore/qsharedpointer.h + mdp:/usr/include/qt6/QtCore/qsharedpointer_impl.h + mdp:/usr/include/qt6/QtCore/qsize.h + mdp:/usr/include/qt6/QtCore/qspan.h + mdp:/usr/include/qt6/QtCore/qstdlibdetection.h + mdp:/usr/include/qt6/QtCore/qstring.h + mdp:/usr/include/qt6/QtCore/qstringalgorithms.h + mdp:/usr/include/qt6/QtCore/qstringbuilder.h + mdp:/usr/include/qt6/QtCore/qstringconverter.h + mdp:/usr/include/qt6/QtCore/qstringconverter_base.h + mdp:/usr/include/qt6/QtCore/qstringfwd.h + mdp:/usr/include/qt6/QtCore/qstringlist.h + mdp:/usr/include/qt6/QtCore/qstringmatcher.h + mdp:/usr/include/qt6/QtCore/qstringtokenizer.h + mdp:/usr/include/qt6/QtCore/qstringview.h + mdp:/usr/include/qt6/QtCore/qswap.h + mdp:/usr/include/qt6/QtCore/qsysinfo.h + mdp:/usr/include/qt6/QtCore/qsystemdetection.h + mdp:/usr/include/qt6/QtCore/qtaggedpointer.h + mdp:/usr/include/qt6/QtCore/qtclasshelpermacros.h + mdp:/usr/include/qt6/QtCore/qtconfiginclude.h + mdp:/usr/include/qt6/QtCore/qtconfigmacros.h + mdp:/usr/include/qt6/QtCore/qtcore-config.h + mdp:/usr/include/qt6/QtCore/qtcoreexports.h + mdp:/usr/include/qt6/QtCore/qtcoreglobal.h + mdp:/usr/include/qt6/QtCore/qtdeprecationdefinitions.h + mdp:/usr/include/qt6/QtCore/qtdeprecationmarkers.h + mdp:/usr/include/qt6/QtCore/qtenvironmentvariables.h + mdp:/usr/include/qt6/QtCore/qtextstream.h + mdp:/usr/include/qt6/QtCore/qtformat_impl.h + mdp:/usr/include/qt6/QtCore/qtmetamacros.h + mdp:/usr/include/qt6/QtCore/qtnoop.h + mdp:/usr/include/qt6/QtCore/qtpreprocessorsupport.h + mdp:/usr/include/qt6/QtCore/qtresource.h + mdp:/usr/include/qt6/QtCore/qttranslation.h + mdp:/usr/include/qt6/QtCore/qttypetraits.h + mdp:/usr/include/qt6/QtCore/qtversion.h + mdp:/usr/include/qt6/QtCore/qtversionchecks.h + mdp:/usr/include/qt6/QtCore/qtypeinfo.h + mdp:/usr/include/qt6/QtCore/qtypes.h + mdp:/usr/include/qt6/QtCore/qurl.h + mdp:/usr/include/qt6/QtCore/qutf8stringview.h + mdp:/usr/include/qt6/QtCore/qvariant.h + mdp:/usr/include/qt6/QtCore/qvarlengtharray.h + mdp:/usr/include/qt6/QtCore/qvector.h + mdp:/usr/include/qt6/QtCore/qversiontagging.h + mdp:/usr/include/qt6/QtCore/qxptype_traits.h + mdp:/usr/include/qt6/QtCore/qyieldcpu.h + mdp:/usr/include/qt6/QtGui/qaction.h + mdp:/usr/include/qt6/QtGui/qbitmap.h + mdp:/usr/include/qt6/QtGui/qbrush.h + mdp:/usr/include/qt6/QtGui/qcolor.h + mdp:/usr/include/qt6/QtGui/qcursor.h + mdp:/usr/include/qt6/QtGui/qfont.h + mdp:/usr/include/qt6/QtGui/qfontinfo.h + mdp:/usr/include/qt6/QtGui/qfontmetrics.h + mdp:/usr/include/qt6/QtGui/qfontvariableaxis.h + mdp:/usr/include/qt6/QtGui/qicon.h + mdp:/usr/include/qt6/QtGui/qimage.h + mdp:/usr/include/qt6/QtGui/qkeysequence.h + mdp:/usr/include/qt6/QtGui/qpaintdevice.h + mdp:/usr/include/qt6/QtGui/qpalette.h + mdp:/usr/include/qt6/QtGui/qpen.h + mdp:/usr/include/qt6/QtGui/qpicture.h + mdp:/usr/include/qt6/QtGui/qpixelformat.h + mdp:/usr/include/qt6/QtGui/qpixmap.h + mdp:/usr/include/qt6/QtGui/qpolygon.h + mdp:/usr/include/qt6/QtGui/qregion.h + mdp:/usr/include/qt6/QtGui/qrgb.h + mdp:/usr/include/qt6/QtGui/qrgba64.h + mdp:/usr/include/qt6/QtGui/qtextcursor.h + mdp:/usr/include/qt6/QtGui/qtextdocument.h + mdp:/usr/include/qt6/QtGui/qtextformat.h + mdp:/usr/include/qt6/QtGui/qtextoption.h + mdp:/usr/include/qt6/QtGui/qtgui-config.h + mdp:/usr/include/qt6/QtGui/qtguiexports.h + mdp:/usr/include/qt6/QtGui/qtguiglobal.h + mdp:/usr/include/qt6/QtGui/qtransform.h + mdp:/usr/include/qt6/QtGui/qvalidator.h + mdp:/usr/include/qt6/QtGui/qwindowdefs.h + mdp:/usr/include/qt6/QtWidgets/QCheckBox + mdp:/usr/include/qt6/QtWidgets/QComboBox + mdp:/usr/include/qt6/QtWidgets/QDialog + mdp:/usr/include/qt6/QtWidgets/QHBoxLayout + mdp:/usr/include/qt6/QtWidgets/QLabel + mdp:/usr/include/qt6/QtWidgets/QLineEdit + mdp:/usr/include/qt6/QtWidgets/QPushButton + mdp:/usr/include/qt6/QtWidgets/QTableWidget + mdp:/usr/include/qt6/QtWidgets/QVBoxLayout + mdp:/usr/include/qt6/QtWidgets/qabstractbutton.h + mdp:/usr/include/qt6/QtWidgets/qabstractitemdelegate.h + mdp:/usr/include/qt6/QtWidgets/qabstractitemview.h + mdp:/usr/include/qt6/QtWidgets/qabstractscrollarea.h + mdp:/usr/include/qt6/QtWidgets/qabstractslider.h + mdp:/usr/include/qt6/QtWidgets/qabstractspinbox.h + mdp:/usr/include/qt6/QtWidgets/qboxlayout.h + mdp:/usr/include/qt6/QtWidgets/qcheckbox.h + mdp:/usr/include/qt6/QtWidgets/qcombobox.h + mdp:/usr/include/qt6/QtWidgets/qdialog.h + mdp:/usr/include/qt6/QtWidgets/qframe.h + mdp:/usr/include/qt6/QtWidgets/qgridlayout.h + mdp:/usr/include/qt6/QtWidgets/qlabel.h + mdp:/usr/include/qt6/QtWidgets/qlayout.h + mdp:/usr/include/qt6/QtWidgets/qlayoutitem.h + mdp:/usr/include/qt6/QtWidgets/qlineedit.h + mdp:/usr/include/qt6/QtWidgets/qpushbutton.h + mdp:/usr/include/qt6/QtWidgets/qrubberband.h + mdp:/usr/include/qt6/QtWidgets/qsizepolicy.h + mdp:/usr/include/qt6/QtWidgets/qslider.h + mdp:/usr/include/qt6/QtWidgets/qstyle.h + mdp:/usr/include/qt6/QtWidgets/qstyleoption.h + mdp:/usr/include/qt6/QtWidgets/qtabbar.h + mdp:/usr/include/qt6/QtWidgets/qtableview.h + mdp:/usr/include/qt6/QtWidgets/qtablewidget.h + mdp:/usr/include/qt6/QtWidgets/qtabwidget.h + mdp:/usr/include/qt6/QtWidgets/qtwidgets-config.h + mdp:/usr/include/qt6/QtWidgets/qtwidgetsexports.h + mdp:/usr/include/qt6/QtWidgets/qtwidgetsglobal.h + mdp:/usr/include/qt6/QtWidgets/qwidget.h + mdp:/usr/include/sched.h + mdp:/usr/include/stdc-predef.h + mdp:/usr/include/stdint.h + mdp:/usr/include/stdio.h + mdp:/usr/include/stdlib.h + mdp:/usr/include/string.h + mdp:/usr/include/strings.h + mdp:/usr/include/sys/cdefs.h + mdp:/usr/include/sys/select.h + mdp:/usr/include/sys/single_threaded.h + mdp:/usr/include/sys/syscall.h + mdp:/usr/include/sys/types.h + mdp:/usr/include/syscall.h + mdp:/usr/include/time.h + mdp:/usr/include/unistd.h + mdp:/usr/include/wchar.h + mdp:/usr/include/wctype.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stdarg.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stdbool.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stddef.h +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/i_asset_database.h +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/virtual_folders.cpp diff --git a/build-linux/CMakeFiles/rules.ninja b/build-linux/CMakeFiles/rules.ninja new file mode 100644 index 00000000..1142d1b2 --- /dev/null +++ b/build-linux/CMakeFiles/rules.ninja @@ -0,0 +1,869 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Ninja" Generator, CMake Version 3.31 + +# This file contains all the rules used to get the outputs files +# built from the input files. +# It is included in the main 'build.ninja'. + +# ============================================================================= +# Project: KAssetManagerQt +# Configurations: Release +# ============================================================================= +# ============================================================================= + +############################################# +# Rule for generating CXX dependencies. + +rule CXX_SCAN__kassetmanagerqt_Release + depfile = $DEP_FILE + command = /usr/bin/c++ $DEFINES $INCLUDES $FLAGS -E -x c++ $in -MT $DYNDEP_INTERMEDIATE_FILE -MD -MF $DEP_FILE -fmodules-ts -fdeps-file=$DYNDEP_INTERMEDIATE_FILE -fdeps-target=$OBJ_FILE -fdeps-format=p1689r5 -o $PREPROCESSED_OUTPUT_FILE + description = Scanning $in for CXX dependencies + + +############################################# +# Rule to generate ninja dyndep files for CXX. + +rule CXX_DYNDEP__kassetmanagerqt_Release + command = /usr/bin/cmake -E cmake_ninja_dyndep --tdi=CMakeFiles/kassetmanagerqt.dir/CXXDependInfo.json --lang=CXX --modmapfmt=gcc --dd=$out @$out.rsp + description = Generating CXX dyndep file $out + rspfile = $out.rsp + rspfile_content = $in + restat = 1 + + +############################################# +# Rule for compiling CXX files. + +rule CXX_COMPILER__kassetmanagerqt_scanned_Release + depfile = $DEP_FILE + deps = gcc + command = ${LAUNCHER}${CODE_CHECK}/usr/bin/c++ $DEFINES $INCLUDES $FLAGS -MD -MT $out -MF $DEP_FILE -fmodules-ts -fmodule-mapper=$DYNDEP_MODULE_MAP_FILE -MD -fdeps-format=p1689r5 -x c++ -o $out -c $in + description = Building CXX object $out + + +############################################# +# Rule for compiling CXX files. + +rule CXX_COMPILER__kassetmanagerqt_unscanned_Release + depfile = $DEP_FILE + deps = gcc + command = ${LAUNCHER}${CODE_CHECK}/usr/bin/c++ $DEFINES $INCLUDES $FLAGS -MD -MT $out -MF $DEP_FILE -o $out -c $in + description = Building CXX object $out + + +############################################# +# Rule for linking CXX executable. + +rule CXX_EXECUTABLE_LINKER__kassetmanagerqt_Release + depfile = $DEP_FILE + deps = gcc + command = $PRE_LINK && /usr/bin/c++ $FLAGS $LINK_FLAGS $in -o $TARGET_FILE $LINK_PATH $LINK_LIBRARIES && $POST_BUILD + description = Linking CXX executable $TARGET_FILE + restat = $RESTAT + + +############################################# +# Rule for running custom commands. + +rule CUSTOM_COMMAND + command = $COMMAND + description = $DESC + + +############################################# +# Rule for generating CXX dependencies. + +rule CXX_SCAN__test_simple_Release + depfile = $DEP_FILE + command = /usr/bin/c++ $DEFINES $INCLUDES $FLAGS -E -x c++ $in -MT $DYNDEP_INTERMEDIATE_FILE -MD -MF $DEP_FILE -fmodules-ts -fdeps-file=$DYNDEP_INTERMEDIATE_FILE -fdeps-target=$OBJ_FILE -fdeps-format=p1689r5 -o $PREPROCESSED_OUTPUT_FILE + description = Scanning $in for CXX dependencies + + +############################################# +# Rule to generate ninja dyndep files for CXX. + +rule CXX_DYNDEP__test_simple_Release + command = /usr/bin/cmake -E cmake_ninja_dyndep --tdi=tests/CMakeFiles/test_simple.dir/CXXDependInfo.json --lang=CXX --modmapfmt=gcc --dd=$out @$out.rsp + description = Generating CXX dyndep file $out + rspfile = $out.rsp + rspfile_content = $in + restat = 1 + + +############################################# +# Rule for compiling CXX files. + +rule CXX_COMPILER__test_simple_scanned_Release + depfile = $DEP_FILE + deps = gcc + command = ${LAUNCHER}${CODE_CHECK}/usr/bin/c++ $DEFINES $INCLUDES $FLAGS -MD -MT $out -MF $DEP_FILE -fmodules-ts -fmodule-mapper=$DYNDEP_MODULE_MAP_FILE -MD -fdeps-format=p1689r5 -x c++ -o $out -c $in + description = Building CXX object $out + + +############################################# +# Rule for compiling CXX files. + +rule CXX_COMPILER__test_simple_unscanned_Release + depfile = $DEP_FILE + deps = gcc + command = ${LAUNCHER}${CODE_CHECK}/usr/bin/c++ $DEFINES $INCLUDES $FLAGS -MD -MT $out -MF $DEP_FILE -o $out -c $in + description = Building CXX object $out + + +############################################# +# Rule for linking CXX executable. + +rule CXX_EXECUTABLE_LINKER__test_simple_Release + depfile = $DEP_FILE + deps = gcc + command = $PRE_LINK && /usr/bin/c++ $FLAGS $LINK_FLAGS $in -o $TARGET_FILE $LINK_PATH $LINK_LIBRARIES && $POST_BUILD + description = Linking CXX executable $TARGET_FILE + restat = $RESTAT + + +############################################# +# Rule for generating CXX dependencies. + +rule CXX_SCAN__test_db_Release + depfile = $DEP_FILE + command = /usr/bin/c++ $DEFINES $INCLUDES $FLAGS -E -x c++ $in -MT $DYNDEP_INTERMEDIATE_FILE -MD -MF $DEP_FILE -fmodules-ts -fdeps-file=$DYNDEP_INTERMEDIATE_FILE -fdeps-target=$OBJ_FILE -fdeps-format=p1689r5 -o $PREPROCESSED_OUTPUT_FILE + description = Scanning $in for CXX dependencies + + +############################################# +# Rule to generate ninja dyndep files for CXX. + +rule CXX_DYNDEP__test_db_Release + command = /usr/bin/cmake -E cmake_ninja_dyndep --tdi=tests/CMakeFiles/test_db.dir/CXXDependInfo.json --lang=CXX --modmapfmt=gcc --dd=$out @$out.rsp + description = Generating CXX dyndep file $out + rspfile = $out.rsp + rspfile_content = $in + restat = 1 + + +############################################# +# Rule for compiling CXX files. + +rule CXX_COMPILER__test_db_scanned_Release + depfile = $DEP_FILE + deps = gcc + command = ${LAUNCHER}${CODE_CHECK}/usr/bin/c++ $DEFINES $INCLUDES $FLAGS -MD -MT $out -MF $DEP_FILE -fmodules-ts -fmodule-mapper=$DYNDEP_MODULE_MAP_FILE -MD -fdeps-format=p1689r5 -x c++ -o $out -c $in + description = Building CXX object $out + + +############################################# +# Rule for compiling CXX files. + +rule CXX_COMPILER__test_db_unscanned_Release + depfile = $DEP_FILE + deps = gcc + command = ${LAUNCHER}${CODE_CHECK}/usr/bin/c++ $DEFINES $INCLUDES $FLAGS -MD -MT $out -MF $DEP_FILE -o $out -c $in + description = Building CXX object $out + + +############################################# +# Rule for linking CXX executable. + +rule CXX_EXECUTABLE_LINKER__test_db_Release + depfile = $DEP_FILE + deps = gcc + command = $PRE_LINK && /usr/bin/c++ $FLAGS $LINK_FLAGS $in -o $TARGET_FILE $LINK_PATH $LINK_LIBRARIES && $POST_BUILD + description = Linking CXX executable $TARGET_FILE + restat = $RESTAT + + +############################################# +# Rule for generating CXX dependencies. + +rule CXX_SCAN__test_models_Release + depfile = $DEP_FILE + command = /usr/bin/c++ $DEFINES $INCLUDES $FLAGS -E -x c++ $in -MT $DYNDEP_INTERMEDIATE_FILE -MD -MF $DEP_FILE -fmodules-ts -fdeps-file=$DYNDEP_INTERMEDIATE_FILE -fdeps-target=$OBJ_FILE -fdeps-format=p1689r5 -o $PREPROCESSED_OUTPUT_FILE + description = Scanning $in for CXX dependencies + + +############################################# +# Rule to generate ninja dyndep files for CXX. + +rule CXX_DYNDEP__test_models_Release + command = /usr/bin/cmake -E cmake_ninja_dyndep --tdi=tests/CMakeFiles/test_models.dir/CXXDependInfo.json --lang=CXX --modmapfmt=gcc --dd=$out @$out.rsp + description = Generating CXX dyndep file $out + rspfile = $out.rsp + rspfile_content = $in + restat = 1 + + +############################################# +# Rule for compiling CXX files. + +rule CXX_COMPILER__test_models_scanned_Release + depfile = $DEP_FILE + deps = gcc + command = ${LAUNCHER}${CODE_CHECK}/usr/bin/c++ $DEFINES $INCLUDES $FLAGS -MD -MT $out -MF $DEP_FILE -fmodules-ts -fmodule-mapper=$DYNDEP_MODULE_MAP_FILE -MD -fdeps-format=p1689r5 -x c++ -o $out -c $in + description = Building CXX object $out + + +############################################# +# Rule for compiling CXX files. + +rule CXX_COMPILER__test_models_unscanned_Release + depfile = $DEP_FILE + deps = gcc + command = ${LAUNCHER}${CODE_CHECK}/usr/bin/c++ $DEFINES $INCLUDES $FLAGS -MD -MT $out -MF $DEP_FILE -o $out -c $in + description = Building CXX object $out + + +############################################# +# Rule for linking CXX executable. + +rule CXX_EXECUTABLE_LINKER__test_models_Release + depfile = $DEP_FILE + deps = gcc + command = $PRE_LINK && /usr/bin/c++ $FLAGS $LINK_FLAGS $in -o $TARGET_FILE $LINK_PATH $LINK_LIBRARIES && $POST_BUILD + description = Linking CXX executable $TARGET_FILE + restat = $RESTAT + + +############################################# +# Rule for generating CXX dependencies. + +rule CXX_SCAN__test_sequence_detector_Release + depfile = $DEP_FILE + command = /usr/bin/c++ $DEFINES $INCLUDES $FLAGS -E -x c++ $in -MT $DYNDEP_INTERMEDIATE_FILE -MD -MF $DEP_FILE -fmodules-ts -fdeps-file=$DYNDEP_INTERMEDIATE_FILE -fdeps-target=$OBJ_FILE -fdeps-format=p1689r5 -o $PREPROCESSED_OUTPUT_FILE + description = Scanning $in for CXX dependencies + + +############################################# +# Rule to generate ninja dyndep files for CXX. + +rule CXX_DYNDEP__test_sequence_detector_Release + command = /usr/bin/cmake -E cmake_ninja_dyndep --tdi=tests/CMakeFiles/test_sequence_detector.dir/CXXDependInfo.json --lang=CXX --modmapfmt=gcc --dd=$out @$out.rsp + description = Generating CXX dyndep file $out + rspfile = $out.rsp + rspfile_content = $in + restat = 1 + + +############################################# +# Rule for compiling CXX files. + +rule CXX_COMPILER__test_sequence_detector_scanned_Release + depfile = $DEP_FILE + deps = gcc + command = ${LAUNCHER}${CODE_CHECK}/usr/bin/c++ $DEFINES $INCLUDES $FLAGS -MD -MT $out -MF $DEP_FILE -fmodules-ts -fmodule-mapper=$DYNDEP_MODULE_MAP_FILE -MD -fdeps-format=p1689r5 -x c++ -o $out -c $in + description = Building CXX object $out + + +############################################# +# Rule for compiling CXX files. + +rule CXX_COMPILER__test_sequence_detector_unscanned_Release + depfile = $DEP_FILE + deps = gcc + command = ${LAUNCHER}${CODE_CHECK}/usr/bin/c++ $DEFINES $INCLUDES $FLAGS -MD -MT $out -MF $DEP_FILE -o $out -c $in + description = Building CXX object $out + + +############################################# +# Rule for linking CXX executable. + +rule CXX_EXECUTABLE_LINKER__test_sequence_detector_Release + depfile = $DEP_FILE + deps = gcc + command = $PRE_LINK && /usr/bin/c++ $FLAGS $LINK_FLAGS $in -o $TARGET_FILE $LINK_PATH $LINK_LIBRARIES && $POST_BUILD + description = Linking CXX executable $TARGET_FILE + restat = $RESTAT + + +############################################# +# Rule for generating CXX dependencies. + +rule CXX_SCAN__test_importer_Release + depfile = $DEP_FILE + command = /usr/bin/c++ $DEFINES $INCLUDES $FLAGS -E -x c++ $in -MT $DYNDEP_INTERMEDIATE_FILE -MD -MF $DEP_FILE -fmodules-ts -fdeps-file=$DYNDEP_INTERMEDIATE_FILE -fdeps-target=$OBJ_FILE -fdeps-format=p1689r5 -o $PREPROCESSED_OUTPUT_FILE + description = Scanning $in for CXX dependencies + + +############################################# +# Rule to generate ninja dyndep files for CXX. + +rule CXX_DYNDEP__test_importer_Release + command = /usr/bin/cmake -E cmake_ninja_dyndep --tdi=tests/CMakeFiles/test_importer.dir/CXXDependInfo.json --lang=CXX --modmapfmt=gcc --dd=$out @$out.rsp + description = Generating CXX dyndep file $out + rspfile = $out.rsp + rspfile_content = $in + restat = 1 + + +############################################# +# Rule for compiling CXX files. + +rule CXX_COMPILER__test_importer_scanned_Release + depfile = $DEP_FILE + deps = gcc + command = ${LAUNCHER}${CODE_CHECK}/usr/bin/c++ $DEFINES $INCLUDES $FLAGS -MD -MT $out -MF $DEP_FILE -fmodules-ts -fmodule-mapper=$DYNDEP_MODULE_MAP_FILE -MD -fdeps-format=p1689r5 -x c++ -o $out -c $in + description = Building CXX object $out + + +############################################# +# Rule for compiling CXX files. + +rule CXX_COMPILER__test_importer_unscanned_Release + depfile = $DEP_FILE + deps = gcc + command = ${LAUNCHER}${CODE_CHECK}/usr/bin/c++ $DEFINES $INCLUDES $FLAGS -MD -MT $out -MF $DEP_FILE -o $out -c $in + description = Building CXX object $out + + +############################################# +# Rule for linking CXX executable. + +rule CXX_EXECUTABLE_LINKER__test_importer_Release + depfile = $DEP_FILE + deps = gcc + command = $PRE_LINK && /usr/bin/c++ $FLAGS $LINK_FLAGS $in -o $TARGET_FILE $LINK_PATH $LINK_LIBRARIES && $POST_BUILD + description = Linking CXX executable $TARGET_FILE + restat = $RESTAT + + +############################################# +# Rule for generating CXX dependencies. + +rule CXX_SCAN__test_utils_Release + depfile = $DEP_FILE + command = /usr/bin/c++ $DEFINES $INCLUDES $FLAGS -E -x c++ $in -MT $DYNDEP_INTERMEDIATE_FILE -MD -MF $DEP_FILE -fmodules-ts -fdeps-file=$DYNDEP_INTERMEDIATE_FILE -fdeps-target=$OBJ_FILE -fdeps-format=p1689r5 -o $PREPROCESSED_OUTPUT_FILE + description = Scanning $in for CXX dependencies + + +############################################# +# Rule to generate ninja dyndep files for CXX. + +rule CXX_DYNDEP__test_utils_Release + command = /usr/bin/cmake -E cmake_ninja_dyndep --tdi=tests/CMakeFiles/test_utils.dir/CXXDependInfo.json --lang=CXX --modmapfmt=gcc --dd=$out @$out.rsp + description = Generating CXX dyndep file $out + rspfile = $out.rsp + rspfile_content = $in + restat = 1 + + +############################################# +# Rule for compiling CXX files. + +rule CXX_COMPILER__test_utils_scanned_Release + depfile = $DEP_FILE + deps = gcc + command = ${LAUNCHER}${CODE_CHECK}/usr/bin/c++ $DEFINES $INCLUDES $FLAGS -MD -MT $out -MF $DEP_FILE -fmodules-ts -fmodule-mapper=$DYNDEP_MODULE_MAP_FILE -MD -fdeps-format=p1689r5 -x c++ -o $out -c $in + description = Building CXX object $out + + +############################################# +# Rule for compiling CXX files. + +rule CXX_COMPILER__test_utils_unscanned_Release + depfile = $DEP_FILE + deps = gcc + command = ${LAUNCHER}${CODE_CHECK}/usr/bin/c++ $DEFINES $INCLUDES $FLAGS -MD -MT $out -MF $DEP_FILE -o $out -c $in + description = Building CXX object $out + + +############################################# +# Rule for linking CXX executable. + +rule CXX_EXECUTABLE_LINKER__test_utils_Release + depfile = $DEP_FILE + deps = gcc + command = $PRE_LINK && /usr/bin/c++ $FLAGS $LINK_FLAGS $in -o $TARGET_FILE $LINK_PATH $LINK_LIBRARIES && $POST_BUILD + description = Linking CXX executable $TARGET_FILE + restat = $RESTAT + + +############################################# +# Rule for generating CXX dependencies. + +rule CXX_SCAN__test_live_preview_manager_Release + depfile = $DEP_FILE + command = /usr/bin/c++ $DEFINES $INCLUDES $FLAGS -E -x c++ $in -MT $DYNDEP_INTERMEDIATE_FILE -MD -MF $DEP_FILE -fmodules-ts -fdeps-file=$DYNDEP_INTERMEDIATE_FILE -fdeps-target=$OBJ_FILE -fdeps-format=p1689r5 -o $PREPROCESSED_OUTPUT_FILE + description = Scanning $in for CXX dependencies + + +############################################# +# Rule to generate ninja dyndep files for CXX. + +rule CXX_DYNDEP__test_live_preview_manager_Release + command = /usr/bin/cmake -E cmake_ninja_dyndep --tdi=tests/CMakeFiles/test_live_preview_manager.dir/CXXDependInfo.json --lang=CXX --modmapfmt=gcc --dd=$out @$out.rsp + description = Generating CXX dyndep file $out + rspfile = $out.rsp + rspfile_content = $in + restat = 1 + + +############################################# +# Rule for compiling CXX files. + +rule CXX_COMPILER__test_live_preview_manager_scanned_Release + depfile = $DEP_FILE + deps = gcc + command = ${LAUNCHER}${CODE_CHECK}/usr/bin/c++ $DEFINES $INCLUDES $FLAGS -MD -MT $out -MF $DEP_FILE -fmodules-ts -fmodule-mapper=$DYNDEP_MODULE_MAP_FILE -MD -fdeps-format=p1689r5 -x c++ -o $out -c $in + description = Building CXX object $out + + +############################################# +# Rule for compiling CXX files. + +rule CXX_COMPILER__test_live_preview_manager_unscanned_Release + depfile = $DEP_FILE + deps = gcc + command = ${LAUNCHER}${CODE_CHECK}/usr/bin/c++ $DEFINES $INCLUDES $FLAGS -MD -MT $out -MF $DEP_FILE -o $out -c $in + description = Building CXX object $out + + +############################################# +# Rule for linking CXX executable. + +rule CXX_EXECUTABLE_LINKER__test_live_preview_manager_Release + depfile = $DEP_FILE + deps = gcc + command = $PRE_LINK && /usr/bin/c++ $FLAGS $LINK_FLAGS $in -o $TARGET_FILE $LINK_PATH $LINK_LIBRARIES && $POST_BUILD + description = Linking CXX executable $TARGET_FILE + restat = $RESTAT + + +############################################# +# Rule for generating CXX dependencies. + +rule CXX_SCAN__test_media_converter_worker_Release + depfile = $DEP_FILE + command = /usr/bin/c++ $DEFINES $INCLUDES $FLAGS -E -x c++ $in -MT $DYNDEP_INTERMEDIATE_FILE -MD -MF $DEP_FILE -fmodules-ts -fdeps-file=$DYNDEP_INTERMEDIATE_FILE -fdeps-target=$OBJ_FILE -fdeps-format=p1689r5 -o $PREPROCESSED_OUTPUT_FILE + description = Scanning $in for CXX dependencies + + +############################################# +# Rule to generate ninja dyndep files for CXX. + +rule CXX_DYNDEP__test_media_converter_worker_Release + command = /usr/bin/cmake -E cmake_ninja_dyndep --tdi=tests/CMakeFiles/test_media_converter_worker.dir/CXXDependInfo.json --lang=CXX --modmapfmt=gcc --dd=$out @$out.rsp + description = Generating CXX dyndep file $out + rspfile = $out.rsp + rspfile_content = $in + restat = 1 + + +############################################# +# Rule for compiling CXX files. + +rule CXX_COMPILER__test_media_converter_worker_scanned_Release + depfile = $DEP_FILE + deps = gcc + command = ${LAUNCHER}${CODE_CHECK}/usr/bin/c++ $DEFINES $INCLUDES $FLAGS -MD -MT $out -MF $DEP_FILE -fmodules-ts -fmodule-mapper=$DYNDEP_MODULE_MAP_FILE -MD -fdeps-format=p1689r5 -x c++ -o $out -c $in + description = Building CXX object $out + + +############################################# +# Rule for compiling CXX files. + +rule CXX_COMPILER__test_media_converter_worker_unscanned_Release + depfile = $DEP_FILE + deps = gcc + command = ${LAUNCHER}${CODE_CHECK}/usr/bin/c++ $DEFINES $INCLUDES $FLAGS -MD -MT $out -MF $DEP_FILE -o $out -c $in + description = Building CXX object $out + + +############################################# +# Rule for linking CXX executable. + +rule CXX_EXECUTABLE_LINKER__test_media_converter_worker_Release + depfile = $DEP_FILE + deps = gcc + command = $PRE_LINK && /usr/bin/c++ $FLAGS $LINK_FLAGS $in -o $TARGET_FILE $LINK_PATH $LINK_LIBRARIES && $POST_BUILD + description = Linking CXX executable $TARGET_FILE + restat = $RESTAT + + +############################################# +# Rule for generating CXX dependencies. + +rule CXX_SCAN__test_virtual_drag_Release + depfile = $DEP_FILE + command = /usr/bin/c++ $DEFINES $INCLUDES $FLAGS -E -x c++ $in -MT $DYNDEP_INTERMEDIATE_FILE -MD -MF $DEP_FILE -fmodules-ts -fdeps-file=$DYNDEP_INTERMEDIATE_FILE -fdeps-target=$OBJ_FILE -fdeps-format=p1689r5 -o $PREPROCESSED_OUTPUT_FILE + description = Scanning $in for CXX dependencies + + +############################################# +# Rule to generate ninja dyndep files for CXX. + +rule CXX_DYNDEP__test_virtual_drag_Release + command = /usr/bin/cmake -E cmake_ninja_dyndep --tdi=tests/CMakeFiles/test_virtual_drag.dir/CXXDependInfo.json --lang=CXX --modmapfmt=gcc --dd=$out @$out.rsp + description = Generating CXX dyndep file $out + rspfile = $out.rsp + rspfile_content = $in + restat = 1 + + +############################################# +# Rule for compiling CXX files. + +rule CXX_COMPILER__test_virtual_drag_scanned_Release + depfile = $DEP_FILE + deps = gcc + command = ${LAUNCHER}${CODE_CHECK}/usr/bin/c++ $DEFINES $INCLUDES $FLAGS -MD -MT $out -MF $DEP_FILE -fmodules-ts -fmodule-mapper=$DYNDEP_MODULE_MAP_FILE -MD -fdeps-format=p1689r5 -x c++ -o $out -c $in + description = Building CXX object $out + + +############################################# +# Rule for compiling CXX files. + +rule CXX_COMPILER__test_virtual_drag_unscanned_Release + depfile = $DEP_FILE + deps = gcc + command = ${LAUNCHER}${CODE_CHECK}/usr/bin/c++ $DEFINES $INCLUDES $FLAGS -MD -MT $out -MF $DEP_FILE -o $out -c $in + description = Building CXX object $out + + +############################################# +# Rule for linking CXX executable. + +rule CXX_EXECUTABLE_LINKER__test_virtual_drag_Release + depfile = $DEP_FILE + deps = gcc + command = $PRE_LINK && /usr/bin/c++ $FLAGS $LINK_FLAGS $in -o $TARGET_FILE $LINK_PATH $LINK_LIBRARIES && $POST_BUILD + description = Linking CXX executable $TARGET_FILE + restat = $RESTAT + + +############################################# +# Rule for generating CXX dependencies. + +rule CXX_SCAN__test_drag_utils_Release + depfile = $DEP_FILE + command = /usr/bin/c++ $DEFINES $INCLUDES $FLAGS -E -x c++ $in -MT $DYNDEP_INTERMEDIATE_FILE -MD -MF $DEP_FILE -fmodules-ts -fdeps-file=$DYNDEP_INTERMEDIATE_FILE -fdeps-target=$OBJ_FILE -fdeps-format=p1689r5 -o $PREPROCESSED_OUTPUT_FILE + description = Scanning $in for CXX dependencies + + +############################################# +# Rule to generate ninja dyndep files for CXX. + +rule CXX_DYNDEP__test_drag_utils_Release + command = /usr/bin/cmake -E cmake_ninja_dyndep --tdi=tests/CMakeFiles/test_drag_utils.dir/CXXDependInfo.json --lang=CXX --modmapfmt=gcc --dd=$out @$out.rsp + description = Generating CXX dyndep file $out + rspfile = $out.rsp + rspfile_content = $in + restat = 1 + + +############################################# +# Rule for compiling CXX files. + +rule CXX_COMPILER__test_drag_utils_scanned_Release + depfile = $DEP_FILE + deps = gcc + command = ${LAUNCHER}${CODE_CHECK}/usr/bin/c++ $DEFINES $INCLUDES $FLAGS -MD -MT $out -MF $DEP_FILE -fmodules-ts -fmodule-mapper=$DYNDEP_MODULE_MAP_FILE -MD -fdeps-format=p1689r5 -x c++ -o $out -c $in + description = Building CXX object $out + + +############################################# +# Rule for compiling CXX files. + +rule CXX_COMPILER__test_drag_utils_unscanned_Release + depfile = $DEP_FILE + deps = gcc + command = ${LAUNCHER}${CODE_CHECK}/usr/bin/c++ $DEFINES $INCLUDES $FLAGS -MD -MT $out -MF $DEP_FILE -o $out -c $in + description = Building CXX object $out + + +############################################# +# Rule for linking CXX executable. + +rule CXX_EXECUTABLE_LINKER__test_drag_utils_Release + depfile = $DEP_FILE + deps = gcc + command = $PRE_LINK && /usr/bin/c++ $FLAGS $LINK_FLAGS $in -o $TARGET_FILE $LINK_PATH $LINK_LIBRARIES && $POST_BUILD + description = Linking CXX executable $TARGET_FILE + restat = $RESTAT + + +############################################# +# Rule for generating CXX dependencies. + +rule CXX_SCAN__test_everything_search_Release + depfile = $DEP_FILE + command = /usr/bin/c++ $DEFINES $INCLUDES $FLAGS -E -x c++ $in -MT $DYNDEP_INTERMEDIATE_FILE -MD -MF $DEP_FILE -fmodules-ts -fdeps-file=$DYNDEP_INTERMEDIATE_FILE -fdeps-target=$OBJ_FILE -fdeps-format=p1689r5 -o $PREPROCESSED_OUTPUT_FILE + description = Scanning $in for CXX dependencies + + +############################################# +# Rule to generate ninja dyndep files for CXX. + +rule CXX_DYNDEP__test_everything_search_Release + command = /usr/bin/cmake -E cmake_ninja_dyndep --tdi=tests/CMakeFiles/test_everything_search.dir/CXXDependInfo.json --lang=CXX --modmapfmt=gcc --dd=$out @$out.rsp + description = Generating CXX dyndep file $out + rspfile = $out.rsp + rspfile_content = $in + restat = 1 + + +############################################# +# Rule for compiling CXX files. + +rule CXX_COMPILER__test_everything_search_scanned_Release + depfile = $DEP_FILE + deps = gcc + command = ${LAUNCHER}${CODE_CHECK}/usr/bin/c++ $DEFINES $INCLUDES $FLAGS -MD -MT $out -MF $DEP_FILE -fmodules-ts -fmodule-mapper=$DYNDEP_MODULE_MAP_FILE -MD -fdeps-format=p1689r5 -x c++ -o $out -c $in + description = Building CXX object $out + + +############################################# +# Rule for compiling CXX files. + +rule CXX_COMPILER__test_everything_search_unscanned_Release + depfile = $DEP_FILE + deps = gcc + command = ${LAUNCHER}${CODE_CHECK}/usr/bin/c++ $DEFINES $INCLUDES $FLAGS -MD -MT $out -MF $DEP_FILE -o $out -c $in + description = Building CXX object $out + + +############################################# +# Rule for linking CXX executable. + +rule CXX_EXECUTABLE_LINKER__test_everything_search_Release + depfile = $DEP_FILE + deps = gcc + command = $PRE_LINK && /usr/bin/c++ $FLAGS $LINK_FLAGS $in -o $TARGET_FILE $LINK_PATH $LINK_LIBRARIES && $POST_BUILD + description = Linking CXX executable $TARGET_FILE + restat = $RESTAT + + +############################################# +# Rule for generating CXX dependencies. + +rule CXX_SCAN__test_icon_utils_Release + depfile = $DEP_FILE + command = /usr/bin/c++ $DEFINES $INCLUDES $FLAGS -E -x c++ $in -MT $DYNDEP_INTERMEDIATE_FILE -MD -MF $DEP_FILE -fmodules-ts -fdeps-file=$DYNDEP_INTERMEDIATE_FILE -fdeps-target=$OBJ_FILE -fdeps-format=p1689r5 -o $PREPROCESSED_OUTPUT_FILE + description = Scanning $in for CXX dependencies + + +############################################# +# Rule to generate ninja dyndep files for CXX. + +rule CXX_DYNDEP__test_icon_utils_Release + command = /usr/bin/cmake -E cmake_ninja_dyndep --tdi=tests/CMakeFiles/test_icon_utils.dir/CXXDependInfo.json --lang=CXX --modmapfmt=gcc --dd=$out @$out.rsp + description = Generating CXX dyndep file $out + rspfile = $out.rsp + rspfile_content = $in + restat = 1 + + +############################################# +# Rule for compiling CXX files. + +rule CXX_COMPILER__test_icon_utils_scanned_Release + depfile = $DEP_FILE + deps = gcc + command = ${LAUNCHER}${CODE_CHECK}/usr/bin/c++ $DEFINES $INCLUDES $FLAGS -MD -MT $out -MF $DEP_FILE -fmodules-ts -fmodule-mapper=$DYNDEP_MODULE_MAP_FILE -MD -fdeps-format=p1689r5 -x c++ -o $out -c $in + description = Building CXX object $out + + +############################################# +# Rule for compiling CXX files. + +rule CXX_COMPILER__test_icon_utils_unscanned_Release + depfile = $DEP_FILE + deps = gcc + command = ${LAUNCHER}${CODE_CHECK}/usr/bin/c++ $DEFINES $INCLUDES $FLAGS -MD -MT $out -MF $DEP_FILE -o $out -c $in + description = Building CXX object $out + + +############################################# +# Rule for linking CXX executable. + +rule CXX_EXECUTABLE_LINKER__test_icon_utils_Release + depfile = $DEP_FILE + deps = gcc + command = $PRE_LINK && /usr/bin/c++ $FLAGS $LINK_FLAGS $in -o $TARGET_FILE $LINK_PATH $LINK_LIBRARIES && $POST_BUILD + description = Linking CXX executable $TARGET_FILE + restat = $RESTAT + + +############################################# +# Rule for generating CXX dependencies. + +rule CXX_SCAN__test_grid_scrub_Release + depfile = $DEP_FILE + command = /usr/bin/c++ $DEFINES $INCLUDES $FLAGS -E -x c++ $in -MT $DYNDEP_INTERMEDIATE_FILE -MD -MF $DEP_FILE -fmodules-ts -fdeps-file=$DYNDEP_INTERMEDIATE_FILE -fdeps-target=$OBJ_FILE -fdeps-format=p1689r5 -o $PREPROCESSED_OUTPUT_FILE + description = Scanning $in for CXX dependencies + + +############################################# +# Rule to generate ninja dyndep files for CXX. + +rule CXX_DYNDEP__test_grid_scrub_Release + command = /usr/bin/cmake -E cmake_ninja_dyndep --tdi=tests/CMakeFiles/test_grid_scrub.dir/CXXDependInfo.json --lang=CXX --modmapfmt=gcc --dd=$out @$out.rsp + description = Generating CXX dyndep file $out + rspfile = $out.rsp + rspfile_content = $in + restat = 1 + + +############################################# +# Rule for compiling CXX files. + +rule CXX_COMPILER__test_grid_scrub_scanned_Release + depfile = $DEP_FILE + deps = gcc + command = ${LAUNCHER}${CODE_CHECK}/usr/bin/c++ $DEFINES $INCLUDES $FLAGS -MD -MT $out -MF $DEP_FILE -fmodules-ts -fmodule-mapper=$DYNDEP_MODULE_MAP_FILE -MD -fdeps-format=p1689r5 -x c++ -o $out -c $in + description = Building CXX object $out + + +############################################# +# Rule for compiling CXX files. + +rule CXX_COMPILER__test_grid_scrub_unscanned_Release + depfile = $DEP_FILE + deps = gcc + command = ${LAUNCHER}${CODE_CHECK}/usr/bin/c++ $DEFINES $INCLUDES $FLAGS -MD -MT $out -MF $DEP_FILE -o $out -c $in + description = Building CXX object $out + + +############################################# +# Rule for linking CXX executable. + +rule CXX_EXECUTABLE_LINKER__test_grid_scrub_Release + depfile = $DEP_FILE + deps = gcc + command = $PRE_LINK && /usr/bin/c++ $FLAGS $LINK_FLAGS $in -o $TARGET_FILE $LINK_PATH $LINK_LIBRARIES && $POST_BUILD + description = Linking CXX executable $TARGET_FILE + restat = $RESTAT + + +############################################# +# Rule for generating CXX dependencies. + +rule CXX_SCAN__test_platform_session_Release + depfile = $DEP_FILE + command = /usr/bin/c++ $DEFINES $INCLUDES $FLAGS -E -x c++ $in -MT $DYNDEP_INTERMEDIATE_FILE -MD -MF $DEP_FILE -fmodules-ts -fdeps-file=$DYNDEP_INTERMEDIATE_FILE -fdeps-target=$OBJ_FILE -fdeps-format=p1689r5 -o $PREPROCESSED_OUTPUT_FILE + description = Scanning $in for CXX dependencies + + +############################################# +# Rule to generate ninja dyndep files for CXX. + +rule CXX_DYNDEP__test_platform_session_Release + command = /usr/bin/cmake -E cmake_ninja_dyndep --tdi=tests/CMakeFiles/test_platform_session.dir/CXXDependInfo.json --lang=CXX --modmapfmt=gcc --dd=$out @$out.rsp + description = Generating CXX dyndep file $out + rspfile = $out.rsp + rspfile_content = $in + restat = 1 + + +############################################# +# Rule for compiling CXX files. + +rule CXX_COMPILER__test_platform_session_scanned_Release + depfile = $DEP_FILE + deps = gcc + command = ${LAUNCHER}${CODE_CHECK}/usr/bin/c++ $DEFINES $INCLUDES $FLAGS -MD -MT $out -MF $DEP_FILE -fmodules-ts -fmodule-mapper=$DYNDEP_MODULE_MAP_FILE -MD -fdeps-format=p1689r5 -x c++ -o $out -c $in + description = Building CXX object $out + + +############################################# +# Rule for compiling CXX files. + +rule CXX_COMPILER__test_platform_session_unscanned_Release + depfile = $DEP_FILE + deps = gcc + command = ${LAUNCHER}${CODE_CHECK}/usr/bin/c++ $DEFINES $INCLUDES $FLAGS -MD -MT $out -MF $DEP_FILE -o $out -c $in + description = Building CXX object $out + + +############################################# +# Rule for linking CXX executable. + +rule CXX_EXECUTABLE_LINKER__test_platform_session_Release + depfile = $DEP_FILE + deps = gcc + command = $PRE_LINK && /usr/bin/c++ $FLAGS $LINK_FLAGS $in -o $TARGET_FILE $LINK_PATH $LINK_LIBRARIES && $POST_BUILD + description = Linking CXX executable $TARGET_FILE + restat = $RESTAT + + +############################################# +# Rule for generating CXX dependencies. + +rule CXX_SCAN__test_annotation_items_Release + depfile = $DEP_FILE + command = /usr/bin/c++ $DEFINES $INCLUDES $FLAGS -E -x c++ $in -MT $DYNDEP_INTERMEDIATE_FILE -MD -MF $DEP_FILE -fmodules-ts -fdeps-file=$DYNDEP_INTERMEDIATE_FILE -fdeps-target=$OBJ_FILE -fdeps-format=p1689r5 -o $PREPROCESSED_OUTPUT_FILE + description = Scanning $in for CXX dependencies + + +############################################# +# Rule to generate ninja dyndep files for CXX. + +rule CXX_DYNDEP__test_annotation_items_Release + command = /usr/bin/cmake -E cmake_ninja_dyndep --tdi=tests/CMakeFiles/test_annotation_items.dir/CXXDependInfo.json --lang=CXX --modmapfmt=gcc --dd=$out @$out.rsp + description = Generating CXX dyndep file $out + rspfile = $out.rsp + rspfile_content = $in + restat = 1 + + +############################################# +# Rule for compiling CXX files. + +rule CXX_COMPILER__test_annotation_items_scanned_Release + depfile = $DEP_FILE + deps = gcc + command = ${LAUNCHER}${CODE_CHECK}/usr/bin/c++ $DEFINES $INCLUDES $FLAGS -MD -MT $out -MF $DEP_FILE -fmodules-ts -fmodule-mapper=$DYNDEP_MODULE_MAP_FILE -MD -fdeps-format=p1689r5 -x c++ -o $out -c $in + description = Building CXX object $out + + +############################################# +# Rule for compiling CXX files. + +rule CXX_COMPILER__test_annotation_items_unscanned_Release + depfile = $DEP_FILE + deps = gcc + command = ${LAUNCHER}${CODE_CHECK}/usr/bin/c++ $DEFINES $INCLUDES $FLAGS -MD -MT $out -MF $DEP_FILE -o $out -c $in + description = Building CXX object $out + + +############################################# +# Rule for linking CXX executable. + +rule CXX_EXECUTABLE_LINKER__test_annotation_items_Release + depfile = $DEP_FILE + deps = gcc + command = $PRE_LINK && /usr/bin/c++ $FLAGS $LINK_FLAGS $in -o $TARGET_FILE $LINK_PATH $LINK_LIBRARIES && $POST_BUILD + description = Linking CXX executable $TARGET_FILE + restat = $RESTAT + + +############################################# +# Rule for re-running cmake. + +rule RERUN_CMAKE + command = /usr/bin/cmake --regenerate-during-build -S/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6 -B/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux + description = Re-running CMake... + generator = 1 + + +############################################# +# Rule for cleaning additional files. + +rule CLEAN_ADDITIONAL + command = /usr/bin/cmake -DCONFIG=$CONFIG -P CMakeFiles/clean_additional.cmake + description = Cleaning additional files... + + +############################################# +# Rule for cleaning all built files. + +rule CLEAN + command = /usr/bin/ninja-build $FILE_ARG -t clean $TARGETS + description = Cleaning all built files... + + +############################################# +# Rule for printing all primary targets available. + +rule HELP + command = /usr/bin/ninja-build -t targets + description = All primary targets available: + diff --git a/build-linux/CPackConfig.cmake b/build-linux/CPackConfig.cmake new file mode 100644 index 00000000..c61acfad --- /dev/null +++ b/build-linux/CPackConfig.cmake @@ -0,0 +1,70 @@ +# This file will be configured to contain variables for CPack. These variables +# should be set in the CMake list file of the project before CPack module is +# included. The list of available CPACK_xxx variables and their associated +# documentation may be obtained using +# cpack --help-variable-list +# +# Some variables are common to all generators (e.g. CPACK_PACKAGE_NAME) +# and some are specific to a generator +# (e.g. CPACK_NSIS_EXTRA_INSTALL_COMMANDS). The generator specific variables +# usually begin with CPACK__xxxx. + + +set(CPACK_BUILD_SOURCE_DIRS "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6;/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux") +set(CPACK_CMAKE_GENERATOR "Ninja") +set(CPACK_COMPONENT_UNSPECIFIED_HIDDEN "TRUE") +set(CPACK_COMPONENT_UNSPECIFIED_REQUIRED "TRUE") +set(CPACK_DEFAULT_PACKAGE_DESCRIPTION_FILE "/usr/share/cmake/Templates/CPack.GenericDescription.txt") +set(CPACK_DEFAULT_PACKAGE_DESCRIPTION_SUMMARY "KAssetManagerQt built using CMake") +set(CPACK_GENERATOR "TGZ") +set(CPACK_INNOSETUP_ARCHITECTURE "x64") +set(CPACK_INSTALL_CMAKE_PROJECTS "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux;KAssetManagerQt;ALL;/") +set(CPACK_INSTALL_PREFIX "/usr/local") +set(CPACK_MODULE_PATH "/usr/lib64/cmake/Qt6;/usr/lib64/cmake/Qt6/3rdparty/extra-cmake-modules/find-modules;/usr/lib64/cmake/Qt6/3rdparty/kwin;/usr/lib64/cmake/Qt6;/usr/lib64/cmake/Qt6/3rdparty/extra-cmake-modules/find-modules;/usr/lib64/cmake/Qt6/3rdparty/kwin;/usr/lib64/cmake/Qt6;/usr/lib64/cmake/Qt6/3rdparty/extra-cmake-modules/find-modules;/usr/lib64/cmake/Qt6/3rdparty/kwin;/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/tlRender;/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/share/OpenColorIO/cmake/modules;/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/share/OpenColorIO/cmake/modules;/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/ftk;/usr/lib64/cmake/Qt6;/usr/lib64/cmake/Qt6/3rdparty/extra-cmake-modules/find-modules;/usr/lib64/cmake/Qt6/3rdparty/kwin") +set(CPACK_NSIS_DISPLAY_NAME "KAssetManagerQt") +set(CPACK_NSIS_INSTALLER_ICON_CODE "") +set(CPACK_NSIS_INSTALLER_MUI_ICON_CODE "") +set(CPACK_NSIS_INSTALL_ROOT "$PROGRAMFILES") +set(CPACK_NSIS_PACKAGE_NAME "KAssetManagerQt") +set(CPACK_NSIS_UNINSTALL_NAME "Uninstall") +set(CPACK_OBJCOPY_EXECUTABLE "/usr/bin/objcopy") +set(CPACK_OBJDUMP_EXECUTABLE "/usr/bin/objdump") +set(CPACK_OUTPUT_CONFIG_FILE "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/CPackConfig.cmake") +set(CPACK_PACKAGE_DEFAULT_LOCATION "/") +set(CPACK_PACKAGE_DESCRIPTION_FILE "/usr/share/cmake/Templates/CPack.GenericDescription.txt") +set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "KAssetManagerQt built using CMake") +set(CPACK_PACKAGE_FILE_NAME "KAsset Manager Qt-1.8.5-Linux") +set(CPACK_PACKAGE_INSTALL_DIRECTORY "KAssetManagerQt") +set(CPACK_PACKAGE_INSTALL_REGISTRY_KEY "KAssetManagerQt") +set(CPACK_PACKAGE_NAME "KAsset Manager Qt") +set(CPACK_PACKAGE_RELOCATABLE "true") +set(CPACK_PACKAGE_VENDOR "KAM") +set(CPACK_PACKAGE_VERSION "1.8.5") +set(CPACK_PACKAGE_VERSION_MAJOR "1") +set(CPACK_PACKAGE_VERSION_MINOR "8") +set(CPACK_PACKAGE_VERSION_PATCH "5") +set(CPACK_READELF_EXECUTABLE "/usr/bin/readelf") +set(CPACK_RESOURCE_FILE_LICENSE "/usr/share/cmake/Templates/CPack.GenericLicense.txt") +set(CPACK_RESOURCE_FILE_README "/usr/share/cmake/Templates/CPack.GenericDescription.txt") +set(CPACK_RESOURCE_FILE_WELCOME "/usr/share/cmake/Templates/CPack.GenericWelcome.txt") +set(CPACK_SET_DESTDIR "OFF") +set(CPACK_SOURCE_GENERATOR "TBZ2;TGZ;TXZ;TZ") +set(CPACK_SOURCE_OUTPUT_CONFIG_FILE "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/CPackSourceConfig.cmake") +set(CPACK_SOURCE_RPM "OFF") +set(CPACK_SOURCE_TBZ2 "ON") +set(CPACK_SOURCE_TGZ "ON") +set(CPACK_SOURCE_TXZ "ON") +set(CPACK_SOURCE_TZ "ON") +set(CPACK_SOURCE_ZIP "OFF") +set(CPACK_SYSTEM_NAME "Linux") +set(CPACK_THREADS "1") +set(CPACK_TOPLEVEL_TAG "Linux") +set(CPACK_WIX_SIZEOF_VOID_P "8") + +if(NOT CPACK_PROPERTIES_FILE) + set(CPACK_PROPERTIES_FILE "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/CPackProperties.cmake") +endif() + +if(EXISTS ${CPACK_PROPERTIES_FILE}) + include(${CPACK_PROPERTIES_FILE}) +endif() diff --git a/build-linux/CPackSourceConfig.cmake b/build-linux/CPackSourceConfig.cmake new file mode 100644 index 00000000..fce17bb8 --- /dev/null +++ b/build-linux/CPackSourceConfig.cmake @@ -0,0 +1,78 @@ +# This file will be configured to contain variables for CPack. These variables +# should be set in the CMake list file of the project before CPack module is +# included. The list of available CPACK_xxx variables and their associated +# documentation may be obtained using +# cpack --help-variable-list +# +# Some variables are common to all generators (e.g. CPACK_PACKAGE_NAME) +# and some are specific to a generator +# (e.g. CPACK_NSIS_EXTRA_INSTALL_COMMANDS). The generator specific variables +# usually begin with CPACK__xxxx. + + +set(CPACK_BUILD_SOURCE_DIRS "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6;/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux") +set(CPACK_CMAKE_GENERATOR "Ninja") +set(CPACK_COMPONENT_UNSPECIFIED_HIDDEN "TRUE") +set(CPACK_COMPONENT_UNSPECIFIED_REQUIRED "TRUE") +set(CPACK_DEFAULT_PACKAGE_DESCRIPTION_FILE "/usr/share/cmake/Templates/CPack.GenericDescription.txt") +set(CPACK_DEFAULT_PACKAGE_DESCRIPTION_SUMMARY "KAssetManagerQt built using CMake") +set(CPACK_GENERATOR "TBZ2;TGZ;TXZ;TZ") +set(CPACK_IGNORE_FILES "/CVS/;/\\.svn/;/\\.bzr/;/\\.hg/;/\\.git/;\\.swp\$;\\.#;/#") +set(CPACK_INNOSETUP_ARCHITECTURE "x64") +set(CPACK_INSTALLED_DIRECTORIES "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6;/") +set(CPACK_INSTALL_CMAKE_PROJECTS "") +set(CPACK_INSTALL_PREFIX "/usr/local") +set(CPACK_MODULE_PATH "/usr/lib64/cmake/Qt6;/usr/lib64/cmake/Qt6/3rdparty/extra-cmake-modules/find-modules;/usr/lib64/cmake/Qt6/3rdparty/kwin;/usr/lib64/cmake/Qt6;/usr/lib64/cmake/Qt6/3rdparty/extra-cmake-modules/find-modules;/usr/lib64/cmake/Qt6/3rdparty/kwin;/usr/lib64/cmake/Qt6;/usr/lib64/cmake/Qt6/3rdparty/extra-cmake-modules/find-modules;/usr/lib64/cmake/Qt6/3rdparty/kwin;/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/tlRender;/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/share/OpenColorIO/cmake/modules;/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/share/OpenColorIO/cmake/modules;/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/ftk;/usr/lib64/cmake/Qt6;/usr/lib64/cmake/Qt6/3rdparty/extra-cmake-modules/find-modules;/usr/lib64/cmake/Qt6/3rdparty/kwin") +set(CPACK_NSIS_DISPLAY_NAME "KAssetManagerQt") +set(CPACK_NSIS_INSTALLER_ICON_CODE "") +set(CPACK_NSIS_INSTALLER_MUI_ICON_CODE "") +set(CPACK_NSIS_INSTALL_ROOT "$PROGRAMFILES") +set(CPACK_NSIS_PACKAGE_NAME "KAssetManagerQt") +set(CPACK_NSIS_UNINSTALL_NAME "Uninstall") +set(CPACK_OBJCOPY_EXECUTABLE "/usr/bin/objcopy") +set(CPACK_OBJDUMP_EXECUTABLE "/usr/bin/objdump") +set(CPACK_OUTPUT_CONFIG_FILE "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/CPackConfig.cmake") +set(CPACK_PACKAGE_DEFAULT_LOCATION "/") +set(CPACK_PACKAGE_DESCRIPTION_FILE "/usr/share/cmake/Templates/CPack.GenericDescription.txt") +set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "KAssetManagerQt built using CMake") +set(CPACK_PACKAGE_FILE_NAME "KAsset Manager Qt-1.8.5-Source") +set(CPACK_PACKAGE_INSTALL_DIRECTORY "KAssetManagerQt") +set(CPACK_PACKAGE_INSTALL_REGISTRY_KEY "KAssetManagerQt") +set(CPACK_PACKAGE_NAME "KAsset Manager Qt") +set(CPACK_PACKAGE_RELOCATABLE "true") +set(CPACK_PACKAGE_VENDOR "KAM") +set(CPACK_PACKAGE_VERSION "1.8.5") +set(CPACK_PACKAGE_VERSION_MAJOR "1") +set(CPACK_PACKAGE_VERSION_MINOR "8") +set(CPACK_PACKAGE_VERSION_PATCH "5") +set(CPACK_READELF_EXECUTABLE "/usr/bin/readelf") +set(CPACK_RESOURCE_FILE_LICENSE "/usr/share/cmake/Templates/CPack.GenericLicense.txt") +set(CPACK_RESOURCE_FILE_README "/usr/share/cmake/Templates/CPack.GenericDescription.txt") +set(CPACK_RESOURCE_FILE_WELCOME "/usr/share/cmake/Templates/CPack.GenericWelcome.txt") +set(CPACK_RPM_PACKAGE_SOURCES "ON") +set(CPACK_SET_DESTDIR "OFF") +set(CPACK_SOURCE_GENERATOR "TBZ2;TGZ;TXZ;TZ") +set(CPACK_SOURCE_IGNORE_FILES "/CVS/;/\\.svn/;/\\.bzr/;/\\.hg/;/\\.git/;\\.swp\$;\\.#;/#") +set(CPACK_SOURCE_INSTALLED_DIRECTORIES "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6;/") +set(CPACK_SOURCE_OUTPUT_CONFIG_FILE "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/CPackSourceConfig.cmake") +set(CPACK_SOURCE_PACKAGE_FILE_NAME "KAsset Manager Qt-1.8.5-Source") +set(CPACK_SOURCE_RPM "OFF") +set(CPACK_SOURCE_TBZ2 "ON") +set(CPACK_SOURCE_TGZ "ON") +set(CPACK_SOURCE_TOPLEVEL_TAG "Linux-Source") +set(CPACK_SOURCE_TXZ "ON") +set(CPACK_SOURCE_TZ "ON") +set(CPACK_SOURCE_ZIP "OFF") +set(CPACK_STRIP_FILES "") +set(CPACK_SYSTEM_NAME "Linux") +set(CPACK_THREADS "1") +set(CPACK_TOPLEVEL_TAG "Linux-Source") +set(CPACK_WIX_SIZEOF_VOID_P "8") + +if(NOT CPACK_PROPERTIES_FILE) + set(CPACK_PROPERTIES_FILE "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/CPackProperties.cmake") +endif() + +if(EXISTS ${CPACK_PROPERTIES_FILE}) + include(${CPACK_PROPERTIES_FILE}) +endif() diff --git a/build-linux/CTestTestfile.cmake b/build-linux/CTestTestfile.cmake new file mode 100644 index 00000000..9832e408 --- /dev/null +++ b/build-linux/CTestTestfile.cmake @@ -0,0 +1,7 @@ +# CMake generated Testfile for +# Source directory: /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6 +# Build directory: /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux +# +# This file includes the relevant testing commands required for +# testing this directory and lists subdirectories to be tested as well. +subdirs("tests") diff --git a/build-linux/app.log b/build-linux/app.log new file mode 100644 index 00000000..6c17498c --- /dev/null +++ b/build-linux/app.log @@ -0,0 +1 @@ +[14:41:17.672] [ERROR] [FileManager] Everything SDK not available - falling back to QFileSystemModel diff --git a/build-linux/build.ninja b/build-linux/build.ninja new file mode 100644 index 00000000..c8613fe0 --- /dev/null +++ b/build-linux/build.ninja @@ -0,0 +1,2233 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Ninja" Generator, CMake Version 3.31 + +# This file contains all the build statements describing the +# compilation DAG. + +# ============================================================================= +# Write statements declared in CMakeLists.txt: +# +# Which is the root file. +# ============================================================================= + +# ============================================================================= +# Project: KAssetManagerQt +# Configurations: Release +# ============================================================================= + +############################################# +# Minimal version of Ninja required by this file + +ninja_required_version = 1.5 + + +############################################# +# Set configuration variable for custom commands. + +CONFIGURATION = Release +# ============================================================================= +# Include auxiliary files. + + +############################################# +# Include rules file. + +include CMakeFiles/rules.ninja + +# ============================================================================= + +############################################# +# Logical path to working directory; prefix for absolute paths. + +cmake_ninja_workdir = /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/ +# ============================================================================= +# Object build statements for EXECUTABLE target kassetmanagerqt + + +############################################# +# Order-only phony target for kassetmanagerqt + +build cmake_object_order_depends_target_kassetmanagerqt: phony || kassetmanagerqt_autogen kassetmanagerqt_autogen/mocs_compilation.cpp kassetmanagerqt_autogen/timestamp kassetmanagerqt_autogen_timestamp_deps + +build CMakeFiles/kassetmanagerqt.dir/kassetmanagerqt_autogen/mocs_compilation.cpp.o: CXX_COMPILER__kassetmanagerqt_unscanned_Release /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/kassetmanagerqt_autogen/mocs_compilation.cpp || cmake_object_order_depends_target_kassetmanagerqt + DEFINES = -DFTK_API_GL_4_1 -DFTK_STATIC -DHAVE_FFMPEG -DHAVE_MINIZIP_NG -DHAVE_OCIO=1 -DHAVE_OPENIMAGEIO=1 -DHAVE_QT_PDF -DHAVE_QT_PDF_WIDGETS -DHAVE_TLRENDER=1 -DKAM_APP_VERSION=\"1.8.5\" -DOPENTIME_STATIC -DOTIO_STATIC -DOpenColorIO_SKIP_IMPORTS -DQT_CONCURRENT_LIB -DQT_CORE_LIB -DQT_GUI_LIB -DQT_MULTIMEDIAWIDGETS_LIB -DQT_MULTIMEDIA_LIB -DQT_NETWORK_LIB -DQT_NO_DEBUG -DQT_NO_DEBUG_OUTPUT -DQT_NO_INFO_OUTPUT -DQT_OPENGLWIDGETS_LIB -DQT_OPENGL_LIB -DQT_PDFWIDGETS_LIB -DQT_PDF_LIB -DQT_SQL_LIB -DQT_SVGWIDGETS_LIB -DQT_SVG_LIB -DQT_WIDGETS_LIB -DTLRENDER_EXR -DTLRENDER_FFMPEG -DTLRENDER_FFMPEG_PLUGIN -DTLRENDER_JPEG -DTLRENDER_OCIO -DTLRENDER_OIIO -DTLRENDER_PNG -DTLRENDER_SDL2 -DTLRENDER_TIFF -DTL_STATIC + DEP_FILE = CMakeFiles/kassetmanagerqt.dir/kassetmanagerqt_autogen/mocs_compilation.cpp.o.d + FLAGS = -O3 -DNDEBUG -std=gnu++20 + INCLUDES = -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/kassetmanagerqt_autogen/include -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include -isystem /usr/include/qt6/QtCore -isystem /usr/include/qt6 -isystem /usr/lib64/qt6/mkspecs/linux-g++ -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/Imath -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/SDL2 -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/minizip-ng -isystem /usr/include/qt6/QtGui -isystem /usr/include/qt6/QtOpenGL -isystem /usr/include/qt6/QtWidgets -isystem /usr/include/qt6/QtOpenGLWidgets -isystem /usr/include/qt6/QtSvg -isystem /usr/include/qt6/QtMultimedia -isystem /usr/include/qt6/QtNetwork -isystem /usr/include/qt6/QtMultimediaWidgets -isystem /usr/include/qt6/QtSql -isystem /usr/include/qt6/QtConcurrent -isystem /usr/include/qt6/QtSvgWidgets -isystem /usr/include/qt6/QtPdf -isystem /usr/include/qt6/QtPdfWidgets + OBJECT_DIR = CMakeFiles/kassetmanagerqt.dir + OBJECT_FILE_DIR = CMakeFiles/kassetmanagerqt.dir/kassetmanagerqt_autogen + +build CMakeFiles/kassetmanagerqt.dir/src/main.cpp.o: CXX_COMPILER__kassetmanagerqt_unscanned_Release /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/main.cpp || cmake_object_order_depends_target_kassetmanagerqt + DEFINES = -DFTK_API_GL_4_1 -DFTK_STATIC -DHAVE_FFMPEG -DHAVE_MINIZIP_NG -DHAVE_OCIO=1 -DHAVE_OPENIMAGEIO=1 -DHAVE_QT_PDF -DHAVE_QT_PDF_WIDGETS -DHAVE_TLRENDER=1 -DKAM_APP_VERSION=\"1.8.5\" -DOPENTIME_STATIC -DOTIO_STATIC -DOpenColorIO_SKIP_IMPORTS -DQT_CONCURRENT_LIB -DQT_CORE_LIB -DQT_GUI_LIB -DQT_MULTIMEDIAWIDGETS_LIB -DQT_MULTIMEDIA_LIB -DQT_NETWORK_LIB -DQT_NO_DEBUG -DQT_NO_DEBUG_OUTPUT -DQT_NO_INFO_OUTPUT -DQT_OPENGLWIDGETS_LIB -DQT_OPENGL_LIB -DQT_PDFWIDGETS_LIB -DQT_PDF_LIB -DQT_SQL_LIB -DQT_SVGWIDGETS_LIB -DQT_SVG_LIB -DQT_WIDGETS_LIB -DTLRENDER_EXR -DTLRENDER_FFMPEG -DTLRENDER_FFMPEG_PLUGIN -DTLRENDER_JPEG -DTLRENDER_OCIO -DTLRENDER_OIIO -DTLRENDER_PNG -DTLRENDER_SDL2 -DTLRENDER_TIFF -DTL_STATIC + DEP_FILE = CMakeFiles/kassetmanagerqt.dir/src/main.cpp.o.d + FLAGS = -O3 -DNDEBUG -std=gnu++20 + INCLUDES = -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/kassetmanagerqt_autogen/include -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include -isystem /usr/include/qt6/QtCore -isystem /usr/include/qt6 -isystem /usr/lib64/qt6/mkspecs/linux-g++ -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/Imath -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/SDL2 -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/minizip-ng -isystem /usr/include/qt6/QtGui -isystem /usr/include/qt6/QtOpenGL -isystem /usr/include/qt6/QtWidgets -isystem /usr/include/qt6/QtOpenGLWidgets -isystem /usr/include/qt6/QtSvg -isystem /usr/include/qt6/QtMultimedia -isystem /usr/include/qt6/QtNetwork -isystem /usr/include/qt6/QtMultimediaWidgets -isystem /usr/include/qt6/QtSql -isystem /usr/include/qt6/QtConcurrent -isystem /usr/include/qt6/QtSvgWidgets -isystem /usr/include/qt6/QtPdf -isystem /usr/include/qt6/QtPdfWidgets + OBJECT_DIR = CMakeFiles/kassetmanagerqt.dir + OBJECT_FILE_DIR = CMakeFiles/kassetmanagerqt.dir/src + +build CMakeFiles/kassetmanagerqt.dir/src/mainwindow.cpp.o: CXX_COMPILER__kassetmanagerqt_unscanned_Release /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/mainwindow.cpp || cmake_object_order_depends_target_kassetmanagerqt + DEFINES = -DFTK_API_GL_4_1 -DFTK_STATIC -DHAVE_FFMPEG -DHAVE_MINIZIP_NG -DHAVE_OCIO=1 -DHAVE_OPENIMAGEIO=1 -DHAVE_QT_PDF -DHAVE_QT_PDF_WIDGETS -DHAVE_TLRENDER=1 -DKAM_APP_VERSION=\"1.8.5\" -DOPENTIME_STATIC -DOTIO_STATIC -DOpenColorIO_SKIP_IMPORTS -DQT_CONCURRENT_LIB -DQT_CORE_LIB -DQT_GUI_LIB -DQT_MULTIMEDIAWIDGETS_LIB -DQT_MULTIMEDIA_LIB -DQT_NETWORK_LIB -DQT_NO_DEBUG -DQT_NO_DEBUG_OUTPUT -DQT_NO_INFO_OUTPUT -DQT_OPENGLWIDGETS_LIB -DQT_OPENGL_LIB -DQT_PDFWIDGETS_LIB -DQT_PDF_LIB -DQT_SQL_LIB -DQT_SVGWIDGETS_LIB -DQT_SVG_LIB -DQT_WIDGETS_LIB -DTLRENDER_EXR -DTLRENDER_FFMPEG -DTLRENDER_FFMPEG_PLUGIN -DTLRENDER_JPEG -DTLRENDER_OCIO -DTLRENDER_OIIO -DTLRENDER_PNG -DTLRENDER_SDL2 -DTLRENDER_TIFF -DTL_STATIC + DEP_FILE = CMakeFiles/kassetmanagerqt.dir/src/mainwindow.cpp.o.d + FLAGS = -O3 -DNDEBUG -std=gnu++20 + INCLUDES = -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/kassetmanagerqt_autogen/include -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include -isystem /usr/include/qt6/QtCore -isystem /usr/include/qt6 -isystem /usr/lib64/qt6/mkspecs/linux-g++ -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/Imath -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/SDL2 -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/minizip-ng -isystem /usr/include/qt6/QtGui -isystem /usr/include/qt6/QtOpenGL -isystem /usr/include/qt6/QtWidgets -isystem /usr/include/qt6/QtOpenGLWidgets -isystem /usr/include/qt6/QtSvg -isystem /usr/include/qt6/QtMultimedia -isystem /usr/include/qt6/QtNetwork -isystem /usr/include/qt6/QtMultimediaWidgets -isystem /usr/include/qt6/QtSql -isystem /usr/include/qt6/QtConcurrent -isystem /usr/include/qt6/QtSvgWidgets -isystem /usr/include/qt6/QtPdf -isystem /usr/include/qt6/QtPdfWidgets + OBJECT_DIR = CMakeFiles/kassetmanagerqt.dir + OBJECT_FILE_DIR = CMakeFiles/kassetmanagerqt.dir/src + +build CMakeFiles/kassetmanagerqt.dir/src/virtual_drag.cpp.o: CXX_COMPILER__kassetmanagerqt_unscanned_Release /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/virtual_drag.cpp || cmake_object_order_depends_target_kassetmanagerqt + DEFINES = -DFTK_API_GL_4_1 -DFTK_STATIC -DHAVE_FFMPEG -DHAVE_MINIZIP_NG -DHAVE_OCIO=1 -DHAVE_OPENIMAGEIO=1 -DHAVE_QT_PDF -DHAVE_QT_PDF_WIDGETS -DHAVE_TLRENDER=1 -DKAM_APP_VERSION=\"1.8.5\" -DOPENTIME_STATIC -DOTIO_STATIC -DOpenColorIO_SKIP_IMPORTS -DQT_CONCURRENT_LIB -DQT_CORE_LIB -DQT_GUI_LIB -DQT_MULTIMEDIAWIDGETS_LIB -DQT_MULTIMEDIA_LIB -DQT_NETWORK_LIB -DQT_NO_DEBUG -DQT_NO_DEBUG_OUTPUT -DQT_NO_INFO_OUTPUT -DQT_OPENGLWIDGETS_LIB -DQT_OPENGL_LIB -DQT_PDFWIDGETS_LIB -DQT_PDF_LIB -DQT_SQL_LIB -DQT_SVGWIDGETS_LIB -DQT_SVG_LIB -DQT_WIDGETS_LIB -DTLRENDER_EXR -DTLRENDER_FFMPEG -DTLRENDER_FFMPEG_PLUGIN -DTLRENDER_JPEG -DTLRENDER_OCIO -DTLRENDER_OIIO -DTLRENDER_PNG -DTLRENDER_SDL2 -DTLRENDER_TIFF -DTL_STATIC + DEP_FILE = CMakeFiles/kassetmanagerqt.dir/src/virtual_drag.cpp.o.d + FLAGS = -O3 -DNDEBUG -std=gnu++20 + INCLUDES = -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/kassetmanagerqt_autogen/include -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include -isystem /usr/include/qt6/QtCore -isystem /usr/include/qt6 -isystem /usr/lib64/qt6/mkspecs/linux-g++ -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/Imath -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/SDL2 -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/minizip-ng -isystem /usr/include/qt6/QtGui -isystem /usr/include/qt6/QtOpenGL -isystem /usr/include/qt6/QtWidgets -isystem /usr/include/qt6/QtOpenGLWidgets -isystem /usr/include/qt6/QtSvg -isystem /usr/include/qt6/QtMultimedia -isystem /usr/include/qt6/QtNetwork -isystem /usr/include/qt6/QtMultimediaWidgets -isystem /usr/include/qt6/QtSql -isystem /usr/include/qt6/QtConcurrent -isystem /usr/include/qt6/QtSvgWidgets -isystem /usr/include/qt6/QtPdf -isystem /usr/include/qt6/QtPdfWidgets + OBJECT_DIR = CMakeFiles/kassetmanagerqt.dir + OBJECT_FILE_DIR = CMakeFiles/kassetmanagerqt.dir/src + +build CMakeFiles/kassetmanagerqt.dir/src/db.cpp.o: CXX_COMPILER__kassetmanagerqt_unscanned_Release /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/db.cpp || cmake_object_order_depends_target_kassetmanagerqt + DEFINES = -DFTK_API_GL_4_1 -DFTK_STATIC -DHAVE_FFMPEG -DHAVE_MINIZIP_NG -DHAVE_OCIO=1 -DHAVE_OPENIMAGEIO=1 -DHAVE_QT_PDF -DHAVE_QT_PDF_WIDGETS -DHAVE_TLRENDER=1 -DKAM_APP_VERSION=\"1.8.5\" -DOPENTIME_STATIC -DOTIO_STATIC -DOpenColorIO_SKIP_IMPORTS -DQT_CONCURRENT_LIB -DQT_CORE_LIB -DQT_GUI_LIB -DQT_MULTIMEDIAWIDGETS_LIB -DQT_MULTIMEDIA_LIB -DQT_NETWORK_LIB -DQT_NO_DEBUG -DQT_NO_DEBUG_OUTPUT -DQT_NO_INFO_OUTPUT -DQT_OPENGLWIDGETS_LIB -DQT_OPENGL_LIB -DQT_PDFWIDGETS_LIB -DQT_PDF_LIB -DQT_SQL_LIB -DQT_SVGWIDGETS_LIB -DQT_SVG_LIB -DQT_WIDGETS_LIB -DTLRENDER_EXR -DTLRENDER_FFMPEG -DTLRENDER_FFMPEG_PLUGIN -DTLRENDER_JPEG -DTLRENDER_OCIO -DTLRENDER_OIIO -DTLRENDER_PNG -DTLRENDER_SDL2 -DTLRENDER_TIFF -DTL_STATIC + DEP_FILE = CMakeFiles/kassetmanagerqt.dir/src/db.cpp.o.d + FLAGS = -O3 -DNDEBUG -std=gnu++20 + INCLUDES = -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/kassetmanagerqt_autogen/include -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include -isystem /usr/include/qt6/QtCore -isystem /usr/include/qt6 -isystem /usr/lib64/qt6/mkspecs/linux-g++ -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/Imath -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/SDL2 -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/minizip-ng -isystem /usr/include/qt6/QtGui -isystem /usr/include/qt6/QtOpenGL -isystem /usr/include/qt6/QtWidgets -isystem /usr/include/qt6/QtOpenGLWidgets -isystem /usr/include/qt6/QtSvg -isystem /usr/include/qt6/QtMultimedia -isystem /usr/include/qt6/QtNetwork -isystem /usr/include/qt6/QtMultimediaWidgets -isystem /usr/include/qt6/QtSql -isystem /usr/include/qt6/QtConcurrent -isystem /usr/include/qt6/QtSvgWidgets -isystem /usr/include/qt6/QtPdf -isystem /usr/include/qt6/QtPdfWidgets + OBJECT_DIR = CMakeFiles/kassetmanagerqt.dir + OBJECT_FILE_DIR = CMakeFiles/kassetmanagerqt.dir/src + +build CMakeFiles/kassetmanagerqt.dir/src/project_db.cpp.o: CXX_COMPILER__kassetmanagerqt_unscanned_Release /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/project_db.cpp || cmake_object_order_depends_target_kassetmanagerqt + DEFINES = -DFTK_API_GL_4_1 -DFTK_STATIC -DHAVE_FFMPEG -DHAVE_MINIZIP_NG -DHAVE_OCIO=1 -DHAVE_OPENIMAGEIO=1 -DHAVE_QT_PDF -DHAVE_QT_PDF_WIDGETS -DHAVE_TLRENDER=1 -DKAM_APP_VERSION=\"1.8.5\" -DOPENTIME_STATIC -DOTIO_STATIC -DOpenColorIO_SKIP_IMPORTS -DQT_CONCURRENT_LIB -DQT_CORE_LIB -DQT_GUI_LIB -DQT_MULTIMEDIAWIDGETS_LIB -DQT_MULTIMEDIA_LIB -DQT_NETWORK_LIB -DQT_NO_DEBUG -DQT_NO_DEBUG_OUTPUT -DQT_NO_INFO_OUTPUT -DQT_OPENGLWIDGETS_LIB -DQT_OPENGL_LIB -DQT_PDFWIDGETS_LIB -DQT_PDF_LIB -DQT_SQL_LIB -DQT_SVGWIDGETS_LIB -DQT_SVG_LIB -DQT_WIDGETS_LIB -DTLRENDER_EXR -DTLRENDER_FFMPEG -DTLRENDER_FFMPEG_PLUGIN -DTLRENDER_JPEG -DTLRENDER_OCIO -DTLRENDER_OIIO -DTLRENDER_PNG -DTLRENDER_SDL2 -DTLRENDER_TIFF -DTL_STATIC + DEP_FILE = CMakeFiles/kassetmanagerqt.dir/src/project_db.cpp.o.d + FLAGS = -O3 -DNDEBUG -std=gnu++20 + INCLUDES = -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/kassetmanagerqt_autogen/include -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include -isystem /usr/include/qt6/QtCore -isystem /usr/include/qt6 -isystem /usr/lib64/qt6/mkspecs/linux-g++ -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/Imath -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/SDL2 -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/minizip-ng -isystem /usr/include/qt6/QtGui -isystem /usr/include/qt6/QtOpenGL -isystem /usr/include/qt6/QtWidgets -isystem /usr/include/qt6/QtOpenGLWidgets -isystem /usr/include/qt6/QtSvg -isystem /usr/include/qt6/QtMultimedia -isystem /usr/include/qt6/QtNetwork -isystem /usr/include/qt6/QtMultimediaWidgets -isystem /usr/include/qt6/QtSql -isystem /usr/include/qt6/QtConcurrent -isystem /usr/include/qt6/QtSvgWidgets -isystem /usr/include/qt6/QtPdf -isystem /usr/include/qt6/QtPdfWidgets + OBJECT_DIR = CMakeFiles/kassetmanagerqt.dir + OBJECT_FILE_DIR = CMakeFiles/kassetmanagerqt.dir/src + +build CMakeFiles/kassetmanagerqt.dir/src/project_import_worker.cpp.o: CXX_COMPILER__kassetmanagerqt_unscanned_Release /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/project_import_worker.cpp || cmake_object_order_depends_target_kassetmanagerqt + DEFINES = -DFTK_API_GL_4_1 -DFTK_STATIC -DHAVE_FFMPEG -DHAVE_MINIZIP_NG -DHAVE_OCIO=1 -DHAVE_OPENIMAGEIO=1 -DHAVE_QT_PDF -DHAVE_QT_PDF_WIDGETS -DHAVE_TLRENDER=1 -DKAM_APP_VERSION=\"1.8.5\" -DOPENTIME_STATIC -DOTIO_STATIC -DOpenColorIO_SKIP_IMPORTS -DQT_CONCURRENT_LIB -DQT_CORE_LIB -DQT_GUI_LIB -DQT_MULTIMEDIAWIDGETS_LIB -DQT_MULTIMEDIA_LIB -DQT_NETWORK_LIB -DQT_NO_DEBUG -DQT_NO_DEBUG_OUTPUT -DQT_NO_INFO_OUTPUT -DQT_OPENGLWIDGETS_LIB -DQT_OPENGL_LIB -DQT_PDFWIDGETS_LIB -DQT_PDF_LIB -DQT_SQL_LIB -DQT_SVGWIDGETS_LIB -DQT_SVG_LIB -DQT_WIDGETS_LIB -DTLRENDER_EXR -DTLRENDER_FFMPEG -DTLRENDER_FFMPEG_PLUGIN -DTLRENDER_JPEG -DTLRENDER_OCIO -DTLRENDER_OIIO -DTLRENDER_PNG -DTLRENDER_SDL2 -DTLRENDER_TIFF -DTL_STATIC + DEP_FILE = CMakeFiles/kassetmanagerqt.dir/src/project_import_worker.cpp.o.d + FLAGS = -O3 -DNDEBUG -std=gnu++20 + INCLUDES = -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/kassetmanagerqt_autogen/include -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include -isystem /usr/include/qt6/QtCore -isystem /usr/include/qt6 -isystem /usr/lib64/qt6/mkspecs/linux-g++ -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/Imath -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/SDL2 -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/minizip-ng -isystem /usr/include/qt6/QtGui -isystem /usr/include/qt6/QtOpenGL -isystem /usr/include/qt6/QtWidgets -isystem /usr/include/qt6/QtOpenGLWidgets -isystem /usr/include/qt6/QtSvg -isystem /usr/include/qt6/QtMultimedia -isystem /usr/include/qt6/QtNetwork -isystem /usr/include/qt6/QtMultimediaWidgets -isystem /usr/include/qt6/QtSql -isystem /usr/include/qt6/QtConcurrent -isystem /usr/include/qt6/QtSvgWidgets -isystem /usr/include/qt6/QtPdf -isystem /usr/include/qt6/QtPdfWidgets + OBJECT_DIR = CMakeFiles/kassetmanagerqt.dir + OBJECT_FILE_DIR = CMakeFiles/kassetmanagerqt.dir/src + +build CMakeFiles/kassetmanagerqt.dir/src/project_version_detector.cpp.o: CXX_COMPILER__kassetmanagerqt_unscanned_Release /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/project_version_detector.cpp || cmake_object_order_depends_target_kassetmanagerqt + DEFINES = -DFTK_API_GL_4_1 -DFTK_STATIC -DHAVE_FFMPEG -DHAVE_MINIZIP_NG -DHAVE_OCIO=1 -DHAVE_OPENIMAGEIO=1 -DHAVE_QT_PDF -DHAVE_QT_PDF_WIDGETS -DHAVE_TLRENDER=1 -DKAM_APP_VERSION=\"1.8.5\" -DOPENTIME_STATIC -DOTIO_STATIC -DOpenColorIO_SKIP_IMPORTS -DQT_CONCURRENT_LIB -DQT_CORE_LIB -DQT_GUI_LIB -DQT_MULTIMEDIAWIDGETS_LIB -DQT_MULTIMEDIA_LIB -DQT_NETWORK_LIB -DQT_NO_DEBUG -DQT_NO_DEBUG_OUTPUT -DQT_NO_INFO_OUTPUT -DQT_OPENGLWIDGETS_LIB -DQT_OPENGL_LIB -DQT_PDFWIDGETS_LIB -DQT_PDF_LIB -DQT_SQL_LIB -DQT_SVGWIDGETS_LIB -DQT_SVG_LIB -DQT_WIDGETS_LIB -DTLRENDER_EXR -DTLRENDER_FFMPEG -DTLRENDER_FFMPEG_PLUGIN -DTLRENDER_JPEG -DTLRENDER_OCIO -DTLRENDER_OIIO -DTLRENDER_PNG -DTLRENDER_SDL2 -DTLRENDER_TIFF -DTL_STATIC + DEP_FILE = CMakeFiles/kassetmanagerqt.dir/src/project_version_detector.cpp.o.d + FLAGS = -O3 -DNDEBUG -std=gnu++20 + INCLUDES = -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/kassetmanagerqt_autogen/include -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include -isystem /usr/include/qt6/QtCore -isystem /usr/include/qt6 -isystem /usr/lib64/qt6/mkspecs/linux-g++ -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/Imath -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/SDL2 -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/minizip-ng -isystem /usr/include/qt6/QtGui -isystem /usr/include/qt6/QtOpenGL -isystem /usr/include/qt6/QtWidgets -isystem /usr/include/qt6/QtOpenGLWidgets -isystem /usr/include/qt6/QtSvg -isystem /usr/include/qt6/QtMultimedia -isystem /usr/include/qt6/QtNetwork -isystem /usr/include/qt6/QtMultimediaWidgets -isystem /usr/include/qt6/QtSql -isystem /usr/include/qt6/QtConcurrent -isystem /usr/include/qt6/QtSvgWidgets -isystem /usr/include/qt6/QtPdf -isystem /usr/include/qt6/QtPdfWidgets + OBJECT_DIR = CMakeFiles/kassetmanagerqt.dir + OBJECT_FILE_DIR = CMakeFiles/kassetmanagerqt.dir/src + +build CMakeFiles/kassetmanagerqt.dir/src/projects_model.cpp.o: CXX_COMPILER__kassetmanagerqt_unscanned_Release /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/projects_model.cpp || cmake_object_order_depends_target_kassetmanagerqt + DEFINES = -DFTK_API_GL_4_1 -DFTK_STATIC -DHAVE_FFMPEG -DHAVE_MINIZIP_NG -DHAVE_OCIO=1 -DHAVE_OPENIMAGEIO=1 -DHAVE_QT_PDF -DHAVE_QT_PDF_WIDGETS -DHAVE_TLRENDER=1 -DKAM_APP_VERSION=\"1.8.5\" -DOPENTIME_STATIC -DOTIO_STATIC -DOpenColorIO_SKIP_IMPORTS -DQT_CONCURRENT_LIB -DQT_CORE_LIB -DQT_GUI_LIB -DQT_MULTIMEDIAWIDGETS_LIB -DQT_MULTIMEDIA_LIB -DQT_NETWORK_LIB -DQT_NO_DEBUG -DQT_NO_DEBUG_OUTPUT -DQT_NO_INFO_OUTPUT -DQT_OPENGLWIDGETS_LIB -DQT_OPENGL_LIB -DQT_PDFWIDGETS_LIB -DQT_PDF_LIB -DQT_SQL_LIB -DQT_SVGWIDGETS_LIB -DQT_SVG_LIB -DQT_WIDGETS_LIB -DTLRENDER_EXR -DTLRENDER_FFMPEG -DTLRENDER_FFMPEG_PLUGIN -DTLRENDER_JPEG -DTLRENDER_OCIO -DTLRENDER_OIIO -DTLRENDER_PNG -DTLRENDER_SDL2 -DTLRENDER_TIFF -DTL_STATIC + DEP_FILE = CMakeFiles/kassetmanagerqt.dir/src/projects_model.cpp.o.d + FLAGS = -O3 -DNDEBUG -std=gnu++20 + INCLUDES = -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/kassetmanagerqt_autogen/include -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include -isystem /usr/include/qt6/QtCore -isystem /usr/include/qt6 -isystem /usr/lib64/qt6/mkspecs/linux-g++ -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/Imath -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/SDL2 -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/minizip-ng -isystem /usr/include/qt6/QtGui -isystem /usr/include/qt6/QtOpenGL -isystem /usr/include/qt6/QtWidgets -isystem /usr/include/qt6/QtOpenGLWidgets -isystem /usr/include/qt6/QtSvg -isystem /usr/include/qt6/QtMultimedia -isystem /usr/include/qt6/QtNetwork -isystem /usr/include/qt6/QtMultimediaWidgets -isystem /usr/include/qt6/QtSql -isystem /usr/include/qt6/QtConcurrent -isystem /usr/include/qt6/QtSvgWidgets -isystem /usr/include/qt6/QtPdf -isystem /usr/include/qt6/QtPdfWidgets + OBJECT_DIR = CMakeFiles/kassetmanagerqt.dir + OBJECT_FILE_DIR = CMakeFiles/kassetmanagerqt.dir/src + +build CMakeFiles/kassetmanagerqt.dir/src/project_assets_model.cpp.o: CXX_COMPILER__kassetmanagerqt_unscanned_Release /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/project_assets_model.cpp || cmake_object_order_depends_target_kassetmanagerqt + DEFINES = -DFTK_API_GL_4_1 -DFTK_STATIC -DHAVE_FFMPEG -DHAVE_MINIZIP_NG -DHAVE_OCIO=1 -DHAVE_OPENIMAGEIO=1 -DHAVE_QT_PDF -DHAVE_QT_PDF_WIDGETS -DHAVE_TLRENDER=1 -DKAM_APP_VERSION=\"1.8.5\" -DOPENTIME_STATIC -DOTIO_STATIC -DOpenColorIO_SKIP_IMPORTS -DQT_CONCURRENT_LIB -DQT_CORE_LIB -DQT_GUI_LIB -DQT_MULTIMEDIAWIDGETS_LIB -DQT_MULTIMEDIA_LIB -DQT_NETWORK_LIB -DQT_NO_DEBUG -DQT_NO_DEBUG_OUTPUT -DQT_NO_INFO_OUTPUT -DQT_OPENGLWIDGETS_LIB -DQT_OPENGL_LIB -DQT_PDFWIDGETS_LIB -DQT_PDF_LIB -DQT_SQL_LIB -DQT_SVGWIDGETS_LIB -DQT_SVG_LIB -DQT_WIDGETS_LIB -DTLRENDER_EXR -DTLRENDER_FFMPEG -DTLRENDER_FFMPEG_PLUGIN -DTLRENDER_JPEG -DTLRENDER_OCIO -DTLRENDER_OIIO -DTLRENDER_PNG -DTLRENDER_SDL2 -DTLRENDER_TIFF -DTL_STATIC + DEP_FILE = CMakeFiles/kassetmanagerqt.dir/src/project_assets_model.cpp.o.d + FLAGS = -O3 -DNDEBUG -std=gnu++20 + INCLUDES = -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/kassetmanagerqt_autogen/include -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include -isystem /usr/include/qt6/QtCore -isystem /usr/include/qt6 -isystem /usr/lib64/qt6/mkspecs/linux-g++ -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/Imath -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/SDL2 -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/minizip-ng -isystem /usr/include/qt6/QtGui -isystem /usr/include/qt6/QtOpenGL -isystem /usr/include/qt6/QtWidgets -isystem /usr/include/qt6/QtOpenGLWidgets -isystem /usr/include/qt6/QtSvg -isystem /usr/include/qt6/QtMultimedia -isystem /usr/include/qt6/QtNetwork -isystem /usr/include/qt6/QtMultimediaWidgets -isystem /usr/include/qt6/QtSql -isystem /usr/include/qt6/QtConcurrent -isystem /usr/include/qt6/QtSvgWidgets -isystem /usr/include/qt6/QtPdf -isystem /usr/include/qt6/QtPdfWidgets + OBJECT_DIR = CMakeFiles/kassetmanagerqt.dir + OBJECT_FILE_DIR = CMakeFiles/kassetmanagerqt.dir/src + +build CMakeFiles/kassetmanagerqt.dir/src/project_folders_model.cpp.o: CXX_COMPILER__kassetmanagerqt_unscanned_Release /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/project_folders_model.cpp || cmake_object_order_depends_target_kassetmanagerqt + DEFINES = -DFTK_API_GL_4_1 -DFTK_STATIC -DHAVE_FFMPEG -DHAVE_MINIZIP_NG -DHAVE_OCIO=1 -DHAVE_OPENIMAGEIO=1 -DHAVE_QT_PDF -DHAVE_QT_PDF_WIDGETS -DHAVE_TLRENDER=1 -DKAM_APP_VERSION=\"1.8.5\" -DOPENTIME_STATIC -DOTIO_STATIC -DOpenColorIO_SKIP_IMPORTS -DQT_CONCURRENT_LIB -DQT_CORE_LIB -DQT_GUI_LIB -DQT_MULTIMEDIAWIDGETS_LIB -DQT_MULTIMEDIA_LIB -DQT_NETWORK_LIB -DQT_NO_DEBUG -DQT_NO_DEBUG_OUTPUT -DQT_NO_INFO_OUTPUT -DQT_OPENGLWIDGETS_LIB -DQT_OPENGL_LIB -DQT_PDFWIDGETS_LIB -DQT_PDF_LIB -DQT_SQL_LIB -DQT_SVGWIDGETS_LIB -DQT_SVG_LIB -DQT_WIDGETS_LIB -DTLRENDER_EXR -DTLRENDER_FFMPEG -DTLRENDER_FFMPEG_PLUGIN -DTLRENDER_JPEG -DTLRENDER_OCIO -DTLRENDER_OIIO -DTLRENDER_PNG -DTLRENDER_SDL2 -DTLRENDER_TIFF -DTL_STATIC + DEP_FILE = CMakeFiles/kassetmanagerqt.dir/src/project_folders_model.cpp.o.d + FLAGS = -O3 -DNDEBUG -std=gnu++20 + INCLUDES = -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/kassetmanagerqt_autogen/include -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include -isystem /usr/include/qt6/QtCore -isystem /usr/include/qt6 -isystem /usr/lib64/qt6/mkspecs/linux-g++ -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/Imath -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/SDL2 -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/minizip-ng -isystem /usr/include/qt6/QtGui -isystem /usr/include/qt6/QtOpenGL -isystem /usr/include/qt6/QtWidgets -isystem /usr/include/qt6/QtOpenGLWidgets -isystem /usr/include/qt6/QtSvg -isystem /usr/include/qt6/QtMultimedia -isystem /usr/include/qt6/QtNetwork -isystem /usr/include/qt6/QtMultimediaWidgets -isystem /usr/include/qt6/QtSql -isystem /usr/include/qt6/QtConcurrent -isystem /usr/include/qt6/QtSvgWidgets -isystem /usr/include/qt6/QtPdf -isystem /usr/include/qt6/QtPdfWidgets + OBJECT_DIR = CMakeFiles/kassetmanagerqt.dir + OBJECT_FILE_DIR = CMakeFiles/kassetmanagerqt.dir/src + +build CMakeFiles/kassetmanagerqt.dir/src/project_sequence_grouping_proxy_model.cpp.o: CXX_COMPILER__kassetmanagerqt_unscanned_Release /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/project_sequence_grouping_proxy_model.cpp || cmake_object_order_depends_target_kassetmanagerqt + DEFINES = -DFTK_API_GL_4_1 -DFTK_STATIC -DHAVE_FFMPEG -DHAVE_MINIZIP_NG -DHAVE_OCIO=1 -DHAVE_OPENIMAGEIO=1 -DHAVE_QT_PDF -DHAVE_QT_PDF_WIDGETS -DHAVE_TLRENDER=1 -DKAM_APP_VERSION=\"1.8.5\" -DOPENTIME_STATIC -DOTIO_STATIC -DOpenColorIO_SKIP_IMPORTS -DQT_CONCURRENT_LIB -DQT_CORE_LIB -DQT_GUI_LIB -DQT_MULTIMEDIAWIDGETS_LIB -DQT_MULTIMEDIA_LIB -DQT_NETWORK_LIB -DQT_NO_DEBUG -DQT_NO_DEBUG_OUTPUT -DQT_NO_INFO_OUTPUT -DQT_OPENGLWIDGETS_LIB -DQT_OPENGL_LIB -DQT_PDFWIDGETS_LIB -DQT_PDF_LIB -DQT_SQL_LIB -DQT_SVGWIDGETS_LIB -DQT_SVG_LIB -DQT_WIDGETS_LIB -DTLRENDER_EXR -DTLRENDER_FFMPEG -DTLRENDER_FFMPEG_PLUGIN -DTLRENDER_JPEG -DTLRENDER_OCIO -DTLRENDER_OIIO -DTLRENDER_PNG -DTLRENDER_SDL2 -DTLRENDER_TIFF -DTL_STATIC + DEP_FILE = CMakeFiles/kassetmanagerqt.dir/src/project_sequence_grouping_proxy_model.cpp.o.d + FLAGS = -O3 -DNDEBUG -std=gnu++20 + INCLUDES = -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/kassetmanagerqt_autogen/include -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include -isystem /usr/include/qt6/QtCore -isystem /usr/include/qt6 -isystem /usr/lib64/qt6/mkspecs/linux-g++ -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/Imath -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/SDL2 -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/minizip-ng -isystem /usr/include/qt6/QtGui -isystem /usr/include/qt6/QtOpenGL -isystem /usr/include/qt6/QtWidgets -isystem /usr/include/qt6/QtOpenGLWidgets -isystem /usr/include/qt6/QtSvg -isystem /usr/include/qt6/QtMultimedia -isystem /usr/include/qt6/QtNetwork -isystem /usr/include/qt6/QtMultimediaWidgets -isystem /usr/include/qt6/QtSql -isystem /usr/include/qt6/QtConcurrent -isystem /usr/include/qt6/QtSvgWidgets -isystem /usr/include/qt6/QtPdf -isystem /usr/include/qt6/QtPdfWidgets + OBJECT_DIR = CMakeFiles/kassetmanagerqt.dir + OBJECT_FILE_DIR = CMakeFiles/kassetmanagerqt.dir/src + +build CMakeFiles/kassetmanagerqt.dir/src/project_item_delegate.cpp.o: CXX_COMPILER__kassetmanagerqt_unscanned_Release /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/project_item_delegate.cpp || cmake_object_order_depends_target_kassetmanagerqt + DEFINES = -DFTK_API_GL_4_1 -DFTK_STATIC -DHAVE_FFMPEG -DHAVE_MINIZIP_NG -DHAVE_OCIO=1 -DHAVE_OPENIMAGEIO=1 -DHAVE_QT_PDF -DHAVE_QT_PDF_WIDGETS -DHAVE_TLRENDER=1 -DKAM_APP_VERSION=\"1.8.5\" -DOPENTIME_STATIC -DOTIO_STATIC -DOpenColorIO_SKIP_IMPORTS -DQT_CONCURRENT_LIB -DQT_CORE_LIB -DQT_GUI_LIB -DQT_MULTIMEDIAWIDGETS_LIB -DQT_MULTIMEDIA_LIB -DQT_NETWORK_LIB -DQT_NO_DEBUG -DQT_NO_DEBUG_OUTPUT -DQT_NO_INFO_OUTPUT -DQT_OPENGLWIDGETS_LIB -DQT_OPENGL_LIB -DQT_PDFWIDGETS_LIB -DQT_PDF_LIB -DQT_SQL_LIB -DQT_SVGWIDGETS_LIB -DQT_SVG_LIB -DQT_WIDGETS_LIB -DTLRENDER_EXR -DTLRENDER_FFMPEG -DTLRENDER_FFMPEG_PLUGIN -DTLRENDER_JPEG -DTLRENDER_OCIO -DTLRENDER_OIIO -DTLRENDER_PNG -DTLRENDER_SDL2 -DTLRENDER_TIFF -DTL_STATIC + DEP_FILE = CMakeFiles/kassetmanagerqt.dir/src/project_item_delegate.cpp.o.d + FLAGS = -O3 -DNDEBUG -std=gnu++20 + INCLUDES = -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/kassetmanagerqt_autogen/include -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include -isystem /usr/include/qt6/QtCore -isystem /usr/include/qt6 -isystem /usr/lib64/qt6/mkspecs/linux-g++ -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/Imath -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/SDL2 -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/minizip-ng -isystem /usr/include/qt6/QtGui -isystem /usr/include/qt6/QtOpenGL -isystem /usr/include/qt6/QtWidgets -isystem /usr/include/qt6/QtOpenGLWidgets -isystem /usr/include/qt6/QtSvg -isystem /usr/include/qt6/QtMultimedia -isystem /usr/include/qt6/QtNetwork -isystem /usr/include/qt6/QtMultimediaWidgets -isystem /usr/include/qt6/QtSql -isystem /usr/include/qt6/QtConcurrent -isystem /usr/include/qt6/QtSvgWidgets -isystem /usr/include/qt6/QtPdf -isystem /usr/include/qt6/QtPdfWidgets + OBJECT_DIR = CMakeFiles/kassetmanagerqt.dir + OBJECT_FILE_DIR = CMakeFiles/kassetmanagerqt.dir/src + +build CMakeFiles/kassetmanagerqt.dir/src/project_manager_watcher.cpp.o: CXX_COMPILER__kassetmanagerqt_unscanned_Release /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/project_manager_watcher.cpp || cmake_object_order_depends_target_kassetmanagerqt + DEFINES = -DFTK_API_GL_4_1 -DFTK_STATIC -DHAVE_FFMPEG -DHAVE_MINIZIP_NG -DHAVE_OCIO=1 -DHAVE_OPENIMAGEIO=1 -DHAVE_QT_PDF -DHAVE_QT_PDF_WIDGETS -DHAVE_TLRENDER=1 -DKAM_APP_VERSION=\"1.8.5\" -DOPENTIME_STATIC -DOTIO_STATIC -DOpenColorIO_SKIP_IMPORTS -DQT_CONCURRENT_LIB -DQT_CORE_LIB -DQT_GUI_LIB -DQT_MULTIMEDIAWIDGETS_LIB -DQT_MULTIMEDIA_LIB -DQT_NETWORK_LIB -DQT_NO_DEBUG -DQT_NO_DEBUG_OUTPUT -DQT_NO_INFO_OUTPUT -DQT_OPENGLWIDGETS_LIB -DQT_OPENGL_LIB -DQT_PDFWIDGETS_LIB -DQT_PDF_LIB -DQT_SQL_LIB -DQT_SVGWIDGETS_LIB -DQT_SVG_LIB -DQT_WIDGETS_LIB -DTLRENDER_EXR -DTLRENDER_FFMPEG -DTLRENDER_FFMPEG_PLUGIN -DTLRENDER_JPEG -DTLRENDER_OCIO -DTLRENDER_OIIO -DTLRENDER_PNG -DTLRENDER_SDL2 -DTLRENDER_TIFF -DTL_STATIC + DEP_FILE = CMakeFiles/kassetmanagerqt.dir/src/project_manager_watcher.cpp.o.d + FLAGS = -O3 -DNDEBUG -std=gnu++20 + INCLUDES = -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/kassetmanagerqt_autogen/include -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include -isystem /usr/include/qt6/QtCore -isystem /usr/include/qt6 -isystem /usr/lib64/qt6/mkspecs/linux-g++ -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/Imath -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/SDL2 -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/minizip-ng -isystem /usr/include/qt6/QtGui -isystem /usr/include/qt6/QtOpenGL -isystem /usr/include/qt6/QtWidgets -isystem /usr/include/qt6/QtOpenGLWidgets -isystem /usr/include/qt6/QtSvg -isystem /usr/include/qt6/QtMultimedia -isystem /usr/include/qt6/QtNetwork -isystem /usr/include/qt6/QtMultimediaWidgets -isystem /usr/include/qt6/QtSql -isystem /usr/include/qt6/QtConcurrent -isystem /usr/include/qt6/QtSvgWidgets -isystem /usr/include/qt6/QtPdf -isystem /usr/include/qt6/QtPdfWidgets + OBJECT_DIR = CMakeFiles/kassetmanagerqt.dir + OBJECT_FILE_DIR = CMakeFiles/kassetmanagerqt.dir/src + +build CMakeFiles/kassetmanagerqt.dir/src/drag_utils.cpp.o: CXX_COMPILER__kassetmanagerqt_unscanned_Release /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/drag_utils.cpp || cmake_object_order_depends_target_kassetmanagerqt + DEFINES = -DFTK_API_GL_4_1 -DFTK_STATIC -DHAVE_FFMPEG -DHAVE_MINIZIP_NG -DHAVE_OCIO=1 -DHAVE_OPENIMAGEIO=1 -DHAVE_QT_PDF -DHAVE_QT_PDF_WIDGETS -DHAVE_TLRENDER=1 -DKAM_APP_VERSION=\"1.8.5\" -DOPENTIME_STATIC -DOTIO_STATIC -DOpenColorIO_SKIP_IMPORTS -DQT_CONCURRENT_LIB -DQT_CORE_LIB -DQT_GUI_LIB -DQT_MULTIMEDIAWIDGETS_LIB -DQT_MULTIMEDIA_LIB -DQT_NETWORK_LIB -DQT_NO_DEBUG -DQT_NO_DEBUG_OUTPUT -DQT_NO_INFO_OUTPUT -DQT_OPENGLWIDGETS_LIB -DQT_OPENGL_LIB -DQT_PDFWIDGETS_LIB -DQT_PDF_LIB -DQT_SQL_LIB -DQT_SVGWIDGETS_LIB -DQT_SVG_LIB -DQT_WIDGETS_LIB -DTLRENDER_EXR -DTLRENDER_FFMPEG -DTLRENDER_FFMPEG_PLUGIN -DTLRENDER_JPEG -DTLRENDER_OCIO -DTLRENDER_OIIO -DTLRENDER_PNG -DTLRENDER_SDL2 -DTLRENDER_TIFF -DTL_STATIC + DEP_FILE = CMakeFiles/kassetmanagerqt.dir/src/drag_utils.cpp.o.d + FLAGS = -O3 -DNDEBUG -std=gnu++20 + INCLUDES = -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/kassetmanagerqt_autogen/include -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include -isystem /usr/include/qt6/QtCore -isystem /usr/include/qt6 -isystem /usr/lib64/qt6/mkspecs/linux-g++ -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/Imath -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/SDL2 -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/minizip-ng -isystem /usr/include/qt6/QtGui -isystem /usr/include/qt6/QtOpenGL -isystem /usr/include/qt6/QtWidgets -isystem /usr/include/qt6/QtOpenGLWidgets -isystem /usr/include/qt6/QtSvg -isystem /usr/include/qt6/QtMultimedia -isystem /usr/include/qt6/QtNetwork -isystem /usr/include/qt6/QtMultimediaWidgets -isystem /usr/include/qt6/QtSql -isystem /usr/include/qt6/QtConcurrent -isystem /usr/include/qt6/QtSvgWidgets -isystem /usr/include/qt6/QtPdf -isystem /usr/include/qt6/QtPdfWidgets + OBJECT_DIR = CMakeFiles/kassetmanagerqt.dir + OBJECT_FILE_DIR = CMakeFiles/kassetmanagerqt.dir/src + +build CMakeFiles/kassetmanagerqt.dir/src/virtual_folders.cpp.o: CXX_COMPILER__kassetmanagerqt_unscanned_Release /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/virtual_folders.cpp || cmake_object_order_depends_target_kassetmanagerqt + DEFINES = -DFTK_API_GL_4_1 -DFTK_STATIC -DHAVE_FFMPEG -DHAVE_MINIZIP_NG -DHAVE_OCIO=1 -DHAVE_OPENIMAGEIO=1 -DHAVE_QT_PDF -DHAVE_QT_PDF_WIDGETS -DHAVE_TLRENDER=1 -DKAM_APP_VERSION=\"1.8.5\" -DOPENTIME_STATIC -DOTIO_STATIC -DOpenColorIO_SKIP_IMPORTS -DQT_CONCURRENT_LIB -DQT_CORE_LIB -DQT_GUI_LIB -DQT_MULTIMEDIAWIDGETS_LIB -DQT_MULTIMEDIA_LIB -DQT_NETWORK_LIB -DQT_NO_DEBUG -DQT_NO_DEBUG_OUTPUT -DQT_NO_INFO_OUTPUT -DQT_OPENGLWIDGETS_LIB -DQT_OPENGL_LIB -DQT_PDFWIDGETS_LIB -DQT_PDF_LIB -DQT_SQL_LIB -DQT_SVGWIDGETS_LIB -DQT_SVG_LIB -DQT_WIDGETS_LIB -DTLRENDER_EXR -DTLRENDER_FFMPEG -DTLRENDER_FFMPEG_PLUGIN -DTLRENDER_JPEG -DTLRENDER_OCIO -DTLRENDER_OIIO -DTLRENDER_PNG -DTLRENDER_SDL2 -DTLRENDER_TIFF -DTL_STATIC + DEP_FILE = CMakeFiles/kassetmanagerqt.dir/src/virtual_folders.cpp.o.d + FLAGS = -O3 -DNDEBUG -std=gnu++20 + INCLUDES = -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/kassetmanagerqt_autogen/include -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include -isystem /usr/include/qt6/QtCore -isystem /usr/include/qt6 -isystem /usr/lib64/qt6/mkspecs/linux-g++ -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/Imath -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/SDL2 -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/minizip-ng -isystem /usr/include/qt6/QtGui -isystem /usr/include/qt6/QtOpenGL -isystem /usr/include/qt6/QtWidgets -isystem /usr/include/qt6/QtOpenGLWidgets -isystem /usr/include/qt6/QtSvg -isystem /usr/include/qt6/QtMultimedia -isystem /usr/include/qt6/QtNetwork -isystem /usr/include/qt6/QtMultimediaWidgets -isystem /usr/include/qt6/QtSql -isystem /usr/include/qt6/QtConcurrent -isystem /usr/include/qt6/QtSvgWidgets -isystem /usr/include/qt6/QtPdf -isystem /usr/include/qt6/QtPdfWidgets + OBJECT_DIR = CMakeFiles/kassetmanagerqt.dir + OBJECT_FILE_DIR = CMakeFiles/kassetmanagerqt.dir/src + +build CMakeFiles/kassetmanagerqt.dir/src/assets_model.cpp.o: CXX_COMPILER__kassetmanagerqt_unscanned_Release /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/assets_model.cpp || cmake_object_order_depends_target_kassetmanagerqt + DEFINES = -DFTK_API_GL_4_1 -DFTK_STATIC -DHAVE_FFMPEG -DHAVE_MINIZIP_NG -DHAVE_OCIO=1 -DHAVE_OPENIMAGEIO=1 -DHAVE_QT_PDF -DHAVE_QT_PDF_WIDGETS -DHAVE_TLRENDER=1 -DKAM_APP_VERSION=\"1.8.5\" -DOPENTIME_STATIC -DOTIO_STATIC -DOpenColorIO_SKIP_IMPORTS -DQT_CONCURRENT_LIB -DQT_CORE_LIB -DQT_GUI_LIB -DQT_MULTIMEDIAWIDGETS_LIB -DQT_MULTIMEDIA_LIB -DQT_NETWORK_LIB -DQT_NO_DEBUG -DQT_NO_DEBUG_OUTPUT -DQT_NO_INFO_OUTPUT -DQT_OPENGLWIDGETS_LIB -DQT_OPENGL_LIB -DQT_PDFWIDGETS_LIB -DQT_PDF_LIB -DQT_SQL_LIB -DQT_SVGWIDGETS_LIB -DQT_SVG_LIB -DQT_WIDGETS_LIB -DTLRENDER_EXR -DTLRENDER_FFMPEG -DTLRENDER_FFMPEG_PLUGIN -DTLRENDER_JPEG -DTLRENDER_OCIO -DTLRENDER_OIIO -DTLRENDER_PNG -DTLRENDER_SDL2 -DTLRENDER_TIFF -DTL_STATIC + DEP_FILE = CMakeFiles/kassetmanagerqt.dir/src/assets_model.cpp.o.d + FLAGS = -O3 -DNDEBUG -std=gnu++20 + INCLUDES = -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/kassetmanagerqt_autogen/include -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include -isystem /usr/include/qt6/QtCore -isystem /usr/include/qt6 -isystem /usr/lib64/qt6/mkspecs/linux-g++ -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/Imath -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/SDL2 -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/minizip-ng -isystem /usr/include/qt6/QtGui -isystem /usr/include/qt6/QtOpenGL -isystem /usr/include/qt6/QtWidgets -isystem /usr/include/qt6/QtOpenGLWidgets -isystem /usr/include/qt6/QtSvg -isystem /usr/include/qt6/QtMultimedia -isystem /usr/include/qt6/QtNetwork -isystem /usr/include/qt6/QtMultimediaWidgets -isystem /usr/include/qt6/QtSql -isystem /usr/include/qt6/QtConcurrent -isystem /usr/include/qt6/QtSvgWidgets -isystem /usr/include/qt6/QtPdf -isystem /usr/include/qt6/QtPdfWidgets + OBJECT_DIR = CMakeFiles/kassetmanagerqt.dir + OBJECT_FILE_DIR = CMakeFiles/kassetmanagerqt.dir/src + +build CMakeFiles/kassetmanagerqt.dir/src/importer.cpp.o: CXX_COMPILER__kassetmanagerqt_unscanned_Release /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/importer.cpp || cmake_object_order_depends_target_kassetmanagerqt + DEFINES = -DFTK_API_GL_4_1 -DFTK_STATIC -DHAVE_FFMPEG -DHAVE_MINIZIP_NG -DHAVE_OCIO=1 -DHAVE_OPENIMAGEIO=1 -DHAVE_QT_PDF -DHAVE_QT_PDF_WIDGETS -DHAVE_TLRENDER=1 -DKAM_APP_VERSION=\"1.8.5\" -DOPENTIME_STATIC -DOTIO_STATIC -DOpenColorIO_SKIP_IMPORTS -DQT_CONCURRENT_LIB -DQT_CORE_LIB -DQT_GUI_LIB -DQT_MULTIMEDIAWIDGETS_LIB -DQT_MULTIMEDIA_LIB -DQT_NETWORK_LIB -DQT_NO_DEBUG -DQT_NO_DEBUG_OUTPUT -DQT_NO_INFO_OUTPUT -DQT_OPENGLWIDGETS_LIB -DQT_OPENGL_LIB -DQT_PDFWIDGETS_LIB -DQT_PDF_LIB -DQT_SQL_LIB -DQT_SVGWIDGETS_LIB -DQT_SVG_LIB -DQT_WIDGETS_LIB -DTLRENDER_EXR -DTLRENDER_FFMPEG -DTLRENDER_FFMPEG_PLUGIN -DTLRENDER_JPEG -DTLRENDER_OCIO -DTLRENDER_OIIO -DTLRENDER_PNG -DTLRENDER_SDL2 -DTLRENDER_TIFF -DTL_STATIC + DEP_FILE = CMakeFiles/kassetmanagerqt.dir/src/importer.cpp.o.d + FLAGS = -O3 -DNDEBUG -std=gnu++20 + INCLUDES = -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/kassetmanagerqt_autogen/include -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include -isystem /usr/include/qt6/QtCore -isystem /usr/include/qt6 -isystem /usr/lib64/qt6/mkspecs/linux-g++ -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/Imath -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/SDL2 -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/minizip-ng -isystem /usr/include/qt6/QtGui -isystem /usr/include/qt6/QtOpenGL -isystem /usr/include/qt6/QtWidgets -isystem /usr/include/qt6/QtOpenGLWidgets -isystem /usr/include/qt6/QtSvg -isystem /usr/include/qt6/QtMultimedia -isystem /usr/include/qt6/QtNetwork -isystem /usr/include/qt6/QtMultimediaWidgets -isystem /usr/include/qt6/QtSql -isystem /usr/include/qt6/QtConcurrent -isystem /usr/include/qt6/QtSvgWidgets -isystem /usr/include/qt6/QtPdf -isystem /usr/include/qt6/QtPdfWidgets + OBJECT_DIR = CMakeFiles/kassetmanagerqt.dir + OBJECT_FILE_DIR = CMakeFiles/kassetmanagerqt.dir/src + +build CMakeFiles/kassetmanagerqt.dir/src/live_preview_manager.cpp.o: CXX_COMPILER__kassetmanagerqt_unscanned_Release /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/live_preview_manager.cpp || cmake_object_order_depends_target_kassetmanagerqt + DEFINES = -DFTK_API_GL_4_1 -DFTK_STATIC -DHAVE_FFMPEG -DHAVE_MINIZIP_NG -DHAVE_OCIO=1 -DHAVE_OPENIMAGEIO=1 -DHAVE_QT_PDF -DHAVE_QT_PDF_WIDGETS -DHAVE_TLRENDER=1 -DKAM_APP_VERSION=\"1.8.5\" -DOPENTIME_STATIC -DOTIO_STATIC -DOpenColorIO_SKIP_IMPORTS -DQT_CONCURRENT_LIB -DQT_CORE_LIB -DQT_GUI_LIB -DQT_MULTIMEDIAWIDGETS_LIB -DQT_MULTIMEDIA_LIB -DQT_NETWORK_LIB -DQT_NO_DEBUG -DQT_NO_DEBUG_OUTPUT -DQT_NO_INFO_OUTPUT -DQT_OPENGLWIDGETS_LIB -DQT_OPENGL_LIB -DQT_PDFWIDGETS_LIB -DQT_PDF_LIB -DQT_SQL_LIB -DQT_SVGWIDGETS_LIB -DQT_SVG_LIB -DQT_WIDGETS_LIB -DTLRENDER_EXR -DTLRENDER_FFMPEG -DTLRENDER_FFMPEG_PLUGIN -DTLRENDER_JPEG -DTLRENDER_OCIO -DTLRENDER_OIIO -DTLRENDER_PNG -DTLRENDER_SDL2 -DTLRENDER_TIFF -DTL_STATIC + DEP_FILE = CMakeFiles/kassetmanagerqt.dir/src/live_preview_manager.cpp.o.d + FLAGS = -O3 -DNDEBUG -std=gnu++20 + INCLUDES = -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/kassetmanagerqt_autogen/include -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include -isystem /usr/include/qt6/QtCore -isystem /usr/include/qt6 -isystem /usr/lib64/qt6/mkspecs/linux-g++ -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/Imath -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/SDL2 -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/minizip-ng -isystem /usr/include/qt6/QtGui -isystem /usr/include/qt6/QtOpenGL -isystem /usr/include/qt6/QtWidgets -isystem /usr/include/qt6/QtOpenGLWidgets -isystem /usr/include/qt6/QtSvg -isystem /usr/include/qt6/QtMultimedia -isystem /usr/include/qt6/QtNetwork -isystem /usr/include/qt6/QtMultimediaWidgets -isystem /usr/include/qt6/QtSql -isystem /usr/include/qt6/QtConcurrent -isystem /usr/include/qt6/QtSvgWidgets -isystem /usr/include/qt6/QtPdf -isystem /usr/include/qt6/QtPdfWidgets + OBJECT_DIR = CMakeFiles/kassetmanagerqt.dir + OBJECT_FILE_DIR = CMakeFiles/kassetmanagerqt.dir/src + +build CMakeFiles/kassetmanagerqt.dir/src/log_manager.cpp.o: CXX_COMPILER__kassetmanagerqt_unscanned_Release /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/log_manager.cpp || cmake_object_order_depends_target_kassetmanagerqt + DEFINES = -DFTK_API_GL_4_1 -DFTK_STATIC -DHAVE_FFMPEG -DHAVE_MINIZIP_NG -DHAVE_OCIO=1 -DHAVE_OPENIMAGEIO=1 -DHAVE_QT_PDF -DHAVE_QT_PDF_WIDGETS -DHAVE_TLRENDER=1 -DKAM_APP_VERSION=\"1.8.5\" -DOPENTIME_STATIC -DOTIO_STATIC -DOpenColorIO_SKIP_IMPORTS -DQT_CONCURRENT_LIB -DQT_CORE_LIB -DQT_GUI_LIB -DQT_MULTIMEDIAWIDGETS_LIB -DQT_MULTIMEDIA_LIB -DQT_NETWORK_LIB -DQT_NO_DEBUG -DQT_NO_DEBUG_OUTPUT -DQT_NO_INFO_OUTPUT -DQT_OPENGLWIDGETS_LIB -DQT_OPENGL_LIB -DQT_PDFWIDGETS_LIB -DQT_PDF_LIB -DQT_SQL_LIB -DQT_SVGWIDGETS_LIB -DQT_SVG_LIB -DQT_WIDGETS_LIB -DTLRENDER_EXR -DTLRENDER_FFMPEG -DTLRENDER_FFMPEG_PLUGIN -DTLRENDER_JPEG -DTLRENDER_OCIO -DTLRENDER_OIIO -DTLRENDER_PNG -DTLRENDER_SDL2 -DTLRENDER_TIFF -DTL_STATIC + DEP_FILE = CMakeFiles/kassetmanagerqt.dir/src/log_manager.cpp.o.d + FLAGS = -O3 -DNDEBUG -std=gnu++20 + INCLUDES = -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/kassetmanagerqt_autogen/include -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include -isystem /usr/include/qt6/QtCore -isystem /usr/include/qt6 -isystem /usr/lib64/qt6/mkspecs/linux-g++ -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/Imath -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/SDL2 -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/minizip-ng -isystem /usr/include/qt6/QtGui -isystem /usr/include/qt6/QtOpenGL -isystem /usr/include/qt6/QtWidgets -isystem /usr/include/qt6/QtOpenGLWidgets -isystem /usr/include/qt6/QtSvg -isystem /usr/include/qt6/QtMultimedia -isystem /usr/include/qt6/QtNetwork -isystem /usr/include/qt6/QtMultimediaWidgets -isystem /usr/include/qt6/QtSql -isystem /usr/include/qt6/QtConcurrent -isystem /usr/include/qt6/QtSvgWidgets -isystem /usr/include/qt6/QtPdf -isystem /usr/include/qt6/QtPdfWidgets + OBJECT_DIR = CMakeFiles/kassetmanagerqt.dir + OBJECT_FILE_DIR = CMakeFiles/kassetmanagerqt.dir/src + +build CMakeFiles/kassetmanagerqt.dir/src/progress_manager.cpp.o: CXX_COMPILER__kassetmanagerqt_unscanned_Release /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/progress_manager.cpp || cmake_object_order_depends_target_kassetmanagerqt + DEFINES = -DFTK_API_GL_4_1 -DFTK_STATIC -DHAVE_FFMPEG -DHAVE_MINIZIP_NG -DHAVE_OCIO=1 -DHAVE_OPENIMAGEIO=1 -DHAVE_QT_PDF -DHAVE_QT_PDF_WIDGETS -DHAVE_TLRENDER=1 -DKAM_APP_VERSION=\"1.8.5\" -DOPENTIME_STATIC -DOTIO_STATIC -DOpenColorIO_SKIP_IMPORTS -DQT_CONCURRENT_LIB -DQT_CORE_LIB -DQT_GUI_LIB -DQT_MULTIMEDIAWIDGETS_LIB -DQT_MULTIMEDIA_LIB -DQT_NETWORK_LIB -DQT_NO_DEBUG -DQT_NO_DEBUG_OUTPUT -DQT_NO_INFO_OUTPUT -DQT_OPENGLWIDGETS_LIB -DQT_OPENGL_LIB -DQT_PDFWIDGETS_LIB -DQT_PDF_LIB -DQT_SQL_LIB -DQT_SVGWIDGETS_LIB -DQT_SVG_LIB -DQT_WIDGETS_LIB -DTLRENDER_EXR -DTLRENDER_FFMPEG -DTLRENDER_FFMPEG_PLUGIN -DTLRENDER_JPEG -DTLRENDER_OCIO -DTLRENDER_OIIO -DTLRENDER_PNG -DTLRENDER_SDL2 -DTLRENDER_TIFF -DTL_STATIC + DEP_FILE = CMakeFiles/kassetmanagerqt.dir/src/progress_manager.cpp.o.d + FLAGS = -O3 -DNDEBUG -std=gnu++20 + INCLUDES = -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/kassetmanagerqt_autogen/include -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include -isystem /usr/include/qt6/QtCore -isystem /usr/include/qt6 -isystem /usr/lib64/qt6/mkspecs/linux-g++ -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/Imath -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/SDL2 -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/minizip-ng -isystem /usr/include/qt6/QtGui -isystem /usr/include/qt6/QtOpenGL -isystem /usr/include/qt6/QtWidgets -isystem /usr/include/qt6/QtOpenGLWidgets -isystem /usr/include/qt6/QtSvg -isystem /usr/include/qt6/QtMultimedia -isystem /usr/include/qt6/QtNetwork -isystem /usr/include/qt6/QtMultimediaWidgets -isystem /usr/include/qt6/QtSql -isystem /usr/include/qt6/QtConcurrent -isystem /usr/include/qt6/QtSvgWidgets -isystem /usr/include/qt6/QtPdf -isystem /usr/include/qt6/QtPdfWidgets + OBJECT_DIR = CMakeFiles/kassetmanagerqt.dir + OBJECT_FILE_DIR = CMakeFiles/kassetmanagerqt.dir/src + +build CMakeFiles/kassetmanagerqt.dir/src/preview_overlay.cpp.o: CXX_COMPILER__kassetmanagerqt_unscanned_Release /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/preview_overlay.cpp || cmake_object_order_depends_target_kassetmanagerqt + DEFINES = -DFTK_API_GL_4_1 -DFTK_STATIC -DHAVE_FFMPEG -DHAVE_MINIZIP_NG -DHAVE_OCIO=1 -DHAVE_OPENIMAGEIO=1 -DHAVE_QT_PDF -DHAVE_QT_PDF_WIDGETS -DHAVE_TLRENDER=1 -DKAM_APP_VERSION=\"1.8.5\" -DOPENTIME_STATIC -DOTIO_STATIC -DOpenColorIO_SKIP_IMPORTS -DQT_CONCURRENT_LIB -DQT_CORE_LIB -DQT_GUI_LIB -DQT_MULTIMEDIAWIDGETS_LIB -DQT_MULTIMEDIA_LIB -DQT_NETWORK_LIB -DQT_NO_DEBUG -DQT_NO_DEBUG_OUTPUT -DQT_NO_INFO_OUTPUT -DQT_OPENGLWIDGETS_LIB -DQT_OPENGL_LIB -DQT_PDFWIDGETS_LIB -DQT_PDF_LIB -DQT_SQL_LIB -DQT_SVGWIDGETS_LIB -DQT_SVG_LIB -DQT_WIDGETS_LIB -DTLRENDER_EXR -DTLRENDER_FFMPEG -DTLRENDER_FFMPEG_PLUGIN -DTLRENDER_JPEG -DTLRENDER_OCIO -DTLRENDER_OIIO -DTLRENDER_PNG -DTLRENDER_SDL2 -DTLRENDER_TIFF -DTL_STATIC + DEP_FILE = CMakeFiles/kassetmanagerqt.dir/src/preview_overlay.cpp.o.d + FLAGS = -O3 -DNDEBUG -std=gnu++20 + INCLUDES = -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/kassetmanagerqt_autogen/include -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include -isystem /usr/include/qt6/QtCore -isystem /usr/include/qt6 -isystem /usr/lib64/qt6/mkspecs/linux-g++ -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/Imath -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/SDL2 -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/minizip-ng -isystem /usr/include/qt6/QtGui -isystem /usr/include/qt6/QtOpenGL -isystem /usr/include/qt6/QtWidgets -isystem /usr/include/qt6/QtOpenGLWidgets -isystem /usr/include/qt6/QtSvg -isystem /usr/include/qt6/QtMultimedia -isystem /usr/include/qt6/QtNetwork -isystem /usr/include/qt6/QtMultimediaWidgets -isystem /usr/include/qt6/QtSql -isystem /usr/include/qt6/QtConcurrent -isystem /usr/include/qt6/QtSvgWidgets -isystem /usr/include/qt6/QtPdf -isystem /usr/include/qt6/QtPdfWidgets + OBJECT_DIR = CMakeFiles/kassetmanagerqt.dir + OBJECT_FILE_DIR = CMakeFiles/kassetmanagerqt.dir/src + +build CMakeFiles/kassetmanagerqt.dir/src/image_preview_overlay.cpp.o: CXX_COMPILER__kassetmanagerqt_unscanned_Release /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/image_preview_overlay.cpp || cmake_object_order_depends_target_kassetmanagerqt + DEFINES = -DFTK_API_GL_4_1 -DFTK_STATIC -DHAVE_FFMPEG -DHAVE_MINIZIP_NG -DHAVE_OCIO=1 -DHAVE_OPENIMAGEIO=1 -DHAVE_QT_PDF -DHAVE_QT_PDF_WIDGETS -DHAVE_TLRENDER=1 -DKAM_APP_VERSION=\"1.8.5\" -DOPENTIME_STATIC -DOTIO_STATIC -DOpenColorIO_SKIP_IMPORTS -DQT_CONCURRENT_LIB -DQT_CORE_LIB -DQT_GUI_LIB -DQT_MULTIMEDIAWIDGETS_LIB -DQT_MULTIMEDIA_LIB -DQT_NETWORK_LIB -DQT_NO_DEBUG -DQT_NO_DEBUG_OUTPUT -DQT_NO_INFO_OUTPUT -DQT_OPENGLWIDGETS_LIB -DQT_OPENGL_LIB -DQT_PDFWIDGETS_LIB -DQT_PDF_LIB -DQT_SQL_LIB -DQT_SVGWIDGETS_LIB -DQT_SVG_LIB -DQT_WIDGETS_LIB -DTLRENDER_EXR -DTLRENDER_FFMPEG -DTLRENDER_FFMPEG_PLUGIN -DTLRENDER_JPEG -DTLRENDER_OCIO -DTLRENDER_OIIO -DTLRENDER_PNG -DTLRENDER_SDL2 -DTLRENDER_TIFF -DTL_STATIC + DEP_FILE = CMakeFiles/kassetmanagerqt.dir/src/image_preview_overlay.cpp.o.d + FLAGS = -O3 -DNDEBUG -std=gnu++20 + INCLUDES = -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/kassetmanagerqt_autogen/include -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include -isystem /usr/include/qt6/QtCore -isystem /usr/include/qt6 -isystem /usr/lib64/qt6/mkspecs/linux-g++ -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/Imath -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/SDL2 -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/minizip-ng -isystem /usr/include/qt6/QtGui -isystem /usr/include/qt6/QtOpenGL -isystem /usr/include/qt6/QtWidgets -isystem /usr/include/qt6/QtOpenGLWidgets -isystem /usr/include/qt6/QtSvg -isystem /usr/include/qt6/QtMultimedia -isystem /usr/include/qt6/QtNetwork -isystem /usr/include/qt6/QtMultimediaWidgets -isystem /usr/include/qt6/QtSql -isystem /usr/include/qt6/QtConcurrent -isystem /usr/include/qt6/QtSvgWidgets -isystem /usr/include/qt6/QtPdf -isystem /usr/include/qt6/QtPdfWidgets + OBJECT_DIR = CMakeFiles/kassetmanagerqt.dir + OBJECT_FILE_DIR = CMakeFiles/kassetmanagerqt.dir/src + +build CMakeFiles/kassetmanagerqt.dir/src/import_progress_dialog.cpp.o: CXX_COMPILER__kassetmanagerqt_unscanned_Release /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/import_progress_dialog.cpp || cmake_object_order_depends_target_kassetmanagerqt + DEFINES = -DFTK_API_GL_4_1 -DFTK_STATIC -DHAVE_FFMPEG -DHAVE_MINIZIP_NG -DHAVE_OCIO=1 -DHAVE_OPENIMAGEIO=1 -DHAVE_QT_PDF -DHAVE_QT_PDF_WIDGETS -DHAVE_TLRENDER=1 -DKAM_APP_VERSION=\"1.8.5\" -DOPENTIME_STATIC -DOTIO_STATIC -DOpenColorIO_SKIP_IMPORTS -DQT_CONCURRENT_LIB -DQT_CORE_LIB -DQT_GUI_LIB -DQT_MULTIMEDIAWIDGETS_LIB -DQT_MULTIMEDIA_LIB -DQT_NETWORK_LIB -DQT_NO_DEBUG -DQT_NO_DEBUG_OUTPUT -DQT_NO_INFO_OUTPUT -DQT_OPENGLWIDGETS_LIB -DQT_OPENGL_LIB -DQT_PDFWIDGETS_LIB -DQT_PDF_LIB -DQT_SQL_LIB -DQT_SVGWIDGETS_LIB -DQT_SVG_LIB -DQT_WIDGETS_LIB -DTLRENDER_EXR -DTLRENDER_FFMPEG -DTLRENDER_FFMPEG_PLUGIN -DTLRENDER_JPEG -DTLRENDER_OCIO -DTLRENDER_OIIO -DTLRENDER_PNG -DTLRENDER_SDL2 -DTLRENDER_TIFF -DTL_STATIC + DEP_FILE = CMakeFiles/kassetmanagerqt.dir/src/import_progress_dialog.cpp.o.d + FLAGS = -O3 -DNDEBUG -std=gnu++20 + INCLUDES = -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/kassetmanagerqt_autogen/include -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include -isystem /usr/include/qt6/QtCore -isystem /usr/include/qt6 -isystem /usr/lib64/qt6/mkspecs/linux-g++ -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/Imath -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/SDL2 -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/minizip-ng -isystem /usr/include/qt6/QtGui -isystem /usr/include/qt6/QtOpenGL -isystem /usr/include/qt6/QtWidgets -isystem /usr/include/qt6/QtOpenGLWidgets -isystem /usr/include/qt6/QtSvg -isystem /usr/include/qt6/QtMultimedia -isystem /usr/include/qt6/QtNetwork -isystem /usr/include/qt6/QtMultimediaWidgets -isystem /usr/include/qt6/QtSql -isystem /usr/include/qt6/QtConcurrent -isystem /usr/include/qt6/QtSvgWidgets -isystem /usr/include/qt6/QtPdf -isystem /usr/include/qt6/QtPdfWidgets + OBJECT_DIR = CMakeFiles/kassetmanagerqt.dir + OBJECT_FILE_DIR = CMakeFiles/kassetmanagerqt.dir/src + +build CMakeFiles/kassetmanagerqt.dir/src/settings_dialog.cpp.o: CXX_COMPILER__kassetmanagerqt_unscanned_Release /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/settings_dialog.cpp || cmake_object_order_depends_target_kassetmanagerqt + DEFINES = -DFTK_API_GL_4_1 -DFTK_STATIC -DHAVE_FFMPEG -DHAVE_MINIZIP_NG -DHAVE_OCIO=1 -DHAVE_OPENIMAGEIO=1 -DHAVE_QT_PDF -DHAVE_QT_PDF_WIDGETS -DHAVE_TLRENDER=1 -DKAM_APP_VERSION=\"1.8.5\" -DOPENTIME_STATIC -DOTIO_STATIC -DOpenColorIO_SKIP_IMPORTS -DQT_CONCURRENT_LIB -DQT_CORE_LIB -DQT_GUI_LIB -DQT_MULTIMEDIAWIDGETS_LIB -DQT_MULTIMEDIA_LIB -DQT_NETWORK_LIB -DQT_NO_DEBUG -DQT_NO_DEBUG_OUTPUT -DQT_NO_INFO_OUTPUT -DQT_OPENGLWIDGETS_LIB -DQT_OPENGL_LIB -DQT_PDFWIDGETS_LIB -DQT_PDF_LIB -DQT_SQL_LIB -DQT_SVGWIDGETS_LIB -DQT_SVG_LIB -DQT_WIDGETS_LIB -DTLRENDER_EXR -DTLRENDER_FFMPEG -DTLRENDER_FFMPEG_PLUGIN -DTLRENDER_JPEG -DTLRENDER_OCIO -DTLRENDER_OIIO -DTLRENDER_PNG -DTLRENDER_SDL2 -DTLRENDER_TIFF -DTL_STATIC + DEP_FILE = CMakeFiles/kassetmanagerqt.dir/src/settings_dialog.cpp.o.d + FLAGS = -O3 -DNDEBUG -std=gnu++20 + INCLUDES = -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/kassetmanagerqt_autogen/include -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include -isystem /usr/include/qt6/QtCore -isystem /usr/include/qt6 -isystem /usr/lib64/qt6/mkspecs/linux-g++ -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/Imath -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/SDL2 -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/minizip-ng -isystem /usr/include/qt6/QtGui -isystem /usr/include/qt6/QtOpenGL -isystem /usr/include/qt6/QtWidgets -isystem /usr/include/qt6/QtOpenGLWidgets -isystem /usr/include/qt6/QtSvg -isystem /usr/include/qt6/QtMultimedia -isystem /usr/include/qt6/QtNetwork -isystem /usr/include/qt6/QtMultimediaWidgets -isystem /usr/include/qt6/QtSql -isystem /usr/include/qt6/QtConcurrent -isystem /usr/include/qt6/QtSvgWidgets -isystem /usr/include/qt6/QtPdf -isystem /usr/include/qt6/QtPdfWidgets + OBJECT_DIR = CMakeFiles/kassetmanagerqt.dir + OBJECT_FILE_DIR = CMakeFiles/kassetmanagerqt.dir/src + +build CMakeFiles/kassetmanagerqt.dir/src/user_guide_dialog.cpp.o: CXX_COMPILER__kassetmanagerqt_unscanned_Release /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/user_guide_dialog.cpp || cmake_object_order_depends_target_kassetmanagerqt + DEFINES = -DFTK_API_GL_4_1 -DFTK_STATIC -DHAVE_FFMPEG -DHAVE_MINIZIP_NG -DHAVE_OCIO=1 -DHAVE_OPENIMAGEIO=1 -DHAVE_QT_PDF -DHAVE_QT_PDF_WIDGETS -DHAVE_TLRENDER=1 -DKAM_APP_VERSION=\"1.8.5\" -DOPENTIME_STATIC -DOTIO_STATIC -DOpenColorIO_SKIP_IMPORTS -DQT_CONCURRENT_LIB -DQT_CORE_LIB -DQT_GUI_LIB -DQT_MULTIMEDIAWIDGETS_LIB -DQT_MULTIMEDIA_LIB -DQT_NETWORK_LIB -DQT_NO_DEBUG -DQT_NO_DEBUG_OUTPUT -DQT_NO_INFO_OUTPUT -DQT_OPENGLWIDGETS_LIB -DQT_OPENGL_LIB -DQT_PDFWIDGETS_LIB -DQT_PDF_LIB -DQT_SQL_LIB -DQT_SVGWIDGETS_LIB -DQT_SVG_LIB -DQT_WIDGETS_LIB -DTLRENDER_EXR -DTLRENDER_FFMPEG -DTLRENDER_FFMPEG_PLUGIN -DTLRENDER_JPEG -DTLRENDER_OCIO -DTLRENDER_OIIO -DTLRENDER_PNG -DTLRENDER_SDL2 -DTLRENDER_TIFF -DTL_STATIC + DEP_FILE = CMakeFiles/kassetmanagerqt.dir/src/user_guide_dialog.cpp.o.d + FLAGS = -O3 -DNDEBUG -std=gnu++20 + INCLUDES = -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/kassetmanagerqt_autogen/include -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include -isystem /usr/include/qt6/QtCore -isystem /usr/include/qt6 -isystem /usr/lib64/qt6/mkspecs/linux-g++ -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/Imath -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/SDL2 -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/minizip-ng -isystem /usr/include/qt6/QtGui -isystem /usr/include/qt6/QtOpenGL -isystem /usr/include/qt6/QtWidgets -isystem /usr/include/qt6/QtOpenGLWidgets -isystem /usr/include/qt6/QtSvg -isystem /usr/include/qt6/QtMultimedia -isystem /usr/include/qt6/QtNetwork -isystem /usr/include/qt6/QtMultimediaWidgets -isystem /usr/include/qt6/QtSql -isystem /usr/include/qt6/QtConcurrent -isystem /usr/include/qt6/QtSvgWidgets -isystem /usr/include/qt6/QtPdf -isystem /usr/include/qt6/QtPdfWidgets + OBJECT_DIR = CMakeFiles/kassetmanagerqt.dir + OBJECT_FILE_DIR = CMakeFiles/kassetmanagerqt.dir/src + +build CMakeFiles/kassetmanagerqt.dir/src/star_rating_widget.cpp.o: CXX_COMPILER__kassetmanagerqt_unscanned_Release /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/star_rating_widget.cpp || cmake_object_order_depends_target_kassetmanagerqt + DEFINES = -DFTK_API_GL_4_1 -DFTK_STATIC -DHAVE_FFMPEG -DHAVE_MINIZIP_NG -DHAVE_OCIO=1 -DHAVE_OPENIMAGEIO=1 -DHAVE_QT_PDF -DHAVE_QT_PDF_WIDGETS -DHAVE_TLRENDER=1 -DKAM_APP_VERSION=\"1.8.5\" -DOPENTIME_STATIC -DOTIO_STATIC -DOpenColorIO_SKIP_IMPORTS -DQT_CONCURRENT_LIB -DQT_CORE_LIB -DQT_GUI_LIB -DQT_MULTIMEDIAWIDGETS_LIB -DQT_MULTIMEDIA_LIB -DQT_NETWORK_LIB -DQT_NO_DEBUG -DQT_NO_DEBUG_OUTPUT -DQT_NO_INFO_OUTPUT -DQT_OPENGLWIDGETS_LIB -DQT_OPENGL_LIB -DQT_PDFWIDGETS_LIB -DQT_PDF_LIB -DQT_SQL_LIB -DQT_SVGWIDGETS_LIB -DQT_SVG_LIB -DQT_WIDGETS_LIB -DTLRENDER_EXR -DTLRENDER_FFMPEG -DTLRENDER_FFMPEG_PLUGIN -DTLRENDER_JPEG -DTLRENDER_OCIO -DTLRENDER_OIIO -DTLRENDER_PNG -DTLRENDER_SDL2 -DTLRENDER_TIFF -DTL_STATIC + DEP_FILE = CMakeFiles/kassetmanagerqt.dir/src/star_rating_widget.cpp.o.d + FLAGS = -O3 -DNDEBUG -std=gnu++20 + INCLUDES = -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/kassetmanagerqt_autogen/include -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include -isystem /usr/include/qt6/QtCore -isystem /usr/include/qt6 -isystem /usr/lib64/qt6/mkspecs/linux-g++ -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/Imath -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/SDL2 -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/minizip-ng -isystem /usr/include/qt6/QtGui -isystem /usr/include/qt6/QtOpenGL -isystem /usr/include/qt6/QtWidgets -isystem /usr/include/qt6/QtOpenGLWidgets -isystem /usr/include/qt6/QtSvg -isystem /usr/include/qt6/QtMultimedia -isystem /usr/include/qt6/QtNetwork -isystem /usr/include/qt6/QtMultimediaWidgets -isystem /usr/include/qt6/QtSql -isystem /usr/include/qt6/QtConcurrent -isystem /usr/include/qt6/QtSvgWidgets -isystem /usr/include/qt6/QtPdf -isystem /usr/include/qt6/QtPdfWidgets + OBJECT_DIR = CMakeFiles/kassetmanagerqt.dir + OBJECT_FILE_DIR = CMakeFiles/kassetmanagerqt.dir/src + +build CMakeFiles/kassetmanagerqt.dir/src/sequence_detector.cpp.o: CXX_COMPILER__kassetmanagerqt_unscanned_Release /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/sequence_detector.cpp || cmake_object_order_depends_target_kassetmanagerqt + DEFINES = -DFTK_API_GL_4_1 -DFTK_STATIC -DHAVE_FFMPEG -DHAVE_MINIZIP_NG -DHAVE_OCIO=1 -DHAVE_OPENIMAGEIO=1 -DHAVE_QT_PDF -DHAVE_QT_PDF_WIDGETS -DHAVE_TLRENDER=1 -DKAM_APP_VERSION=\"1.8.5\" -DOPENTIME_STATIC -DOTIO_STATIC -DOpenColorIO_SKIP_IMPORTS -DQT_CONCURRENT_LIB -DQT_CORE_LIB -DQT_GUI_LIB -DQT_MULTIMEDIAWIDGETS_LIB -DQT_MULTIMEDIA_LIB -DQT_NETWORK_LIB -DQT_NO_DEBUG -DQT_NO_DEBUG_OUTPUT -DQT_NO_INFO_OUTPUT -DQT_OPENGLWIDGETS_LIB -DQT_OPENGL_LIB -DQT_PDFWIDGETS_LIB -DQT_PDF_LIB -DQT_SQL_LIB -DQT_SVGWIDGETS_LIB -DQT_SVG_LIB -DQT_WIDGETS_LIB -DTLRENDER_EXR -DTLRENDER_FFMPEG -DTLRENDER_FFMPEG_PLUGIN -DTLRENDER_JPEG -DTLRENDER_OCIO -DTLRENDER_OIIO -DTLRENDER_PNG -DTLRENDER_SDL2 -DTLRENDER_TIFF -DTL_STATIC + DEP_FILE = CMakeFiles/kassetmanagerqt.dir/src/sequence_detector.cpp.o.d + FLAGS = -O3 -DNDEBUG -std=gnu++20 + INCLUDES = -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/kassetmanagerqt_autogen/include -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include -isystem /usr/include/qt6/QtCore -isystem /usr/include/qt6 -isystem /usr/lib64/qt6/mkspecs/linux-g++ -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/Imath -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/SDL2 -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/minizip-ng -isystem /usr/include/qt6/QtGui -isystem /usr/include/qt6/QtOpenGL -isystem /usr/include/qt6/QtWidgets -isystem /usr/include/qt6/QtOpenGLWidgets -isystem /usr/include/qt6/QtSvg -isystem /usr/include/qt6/QtMultimedia -isystem /usr/include/qt6/QtNetwork -isystem /usr/include/qt6/QtMultimediaWidgets -isystem /usr/include/qt6/QtSql -isystem /usr/include/qt6/QtConcurrent -isystem /usr/include/qt6/QtSvgWidgets -isystem /usr/include/qt6/QtPdf -isystem /usr/include/qt6/QtPdfWidgets + OBJECT_DIR = CMakeFiles/kassetmanagerqt.dir + OBJECT_FILE_DIR = CMakeFiles/kassetmanagerqt.dir/src + +build CMakeFiles/kassetmanagerqt.dir/src/sequence_grouping_proxy_model.cpp.o: CXX_COMPILER__kassetmanagerqt_unscanned_Release /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/sequence_grouping_proxy_model.cpp || cmake_object_order_depends_target_kassetmanagerqt + DEFINES = -DFTK_API_GL_4_1 -DFTK_STATIC -DHAVE_FFMPEG -DHAVE_MINIZIP_NG -DHAVE_OCIO=1 -DHAVE_OPENIMAGEIO=1 -DHAVE_QT_PDF -DHAVE_QT_PDF_WIDGETS -DHAVE_TLRENDER=1 -DKAM_APP_VERSION=\"1.8.5\" -DOPENTIME_STATIC -DOTIO_STATIC -DOpenColorIO_SKIP_IMPORTS -DQT_CONCURRENT_LIB -DQT_CORE_LIB -DQT_GUI_LIB -DQT_MULTIMEDIAWIDGETS_LIB -DQT_MULTIMEDIA_LIB -DQT_NETWORK_LIB -DQT_NO_DEBUG -DQT_NO_DEBUG_OUTPUT -DQT_NO_INFO_OUTPUT -DQT_OPENGLWIDGETS_LIB -DQT_OPENGL_LIB -DQT_PDFWIDGETS_LIB -DQT_PDF_LIB -DQT_SQL_LIB -DQT_SVGWIDGETS_LIB -DQT_SVG_LIB -DQT_WIDGETS_LIB -DTLRENDER_EXR -DTLRENDER_FFMPEG -DTLRENDER_FFMPEG_PLUGIN -DTLRENDER_JPEG -DTLRENDER_OCIO -DTLRENDER_OIIO -DTLRENDER_PNG -DTLRENDER_SDL2 -DTLRENDER_TIFF -DTL_STATIC + DEP_FILE = CMakeFiles/kassetmanagerqt.dir/src/sequence_grouping_proxy_model.cpp.o.d + FLAGS = -O3 -DNDEBUG -std=gnu++20 + INCLUDES = -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/kassetmanagerqt_autogen/include -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include -isystem /usr/include/qt6/QtCore -isystem /usr/include/qt6 -isystem /usr/lib64/qt6/mkspecs/linux-g++ -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/Imath -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/SDL2 -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/minizip-ng -isystem /usr/include/qt6/QtGui -isystem /usr/include/qt6/QtOpenGL -isystem /usr/include/qt6/QtWidgets -isystem /usr/include/qt6/QtOpenGLWidgets -isystem /usr/include/qt6/QtSvg -isystem /usr/include/qt6/QtMultimedia -isystem /usr/include/qt6/QtNetwork -isystem /usr/include/qt6/QtMultimediaWidgets -isystem /usr/include/qt6/QtSql -isystem /usr/include/qt6/QtConcurrent -isystem /usr/include/qt6/QtSvgWidgets -isystem /usr/include/qt6/QtPdf -isystem /usr/include/qt6/QtPdfWidgets + OBJECT_DIR = CMakeFiles/kassetmanagerqt.dir + OBJECT_FILE_DIR = CMakeFiles/kassetmanagerqt.dir/src + +build CMakeFiles/kassetmanagerqt.dir/src/asset_sequence_grouping_proxy_model.cpp.o: CXX_COMPILER__kassetmanagerqt_unscanned_Release /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/asset_sequence_grouping_proxy_model.cpp || cmake_object_order_depends_target_kassetmanagerqt + DEFINES = -DFTK_API_GL_4_1 -DFTK_STATIC -DHAVE_FFMPEG -DHAVE_MINIZIP_NG -DHAVE_OCIO=1 -DHAVE_OPENIMAGEIO=1 -DHAVE_QT_PDF -DHAVE_QT_PDF_WIDGETS -DHAVE_TLRENDER=1 -DKAM_APP_VERSION=\"1.8.5\" -DOPENTIME_STATIC -DOTIO_STATIC -DOpenColorIO_SKIP_IMPORTS -DQT_CONCURRENT_LIB -DQT_CORE_LIB -DQT_GUI_LIB -DQT_MULTIMEDIAWIDGETS_LIB -DQT_MULTIMEDIA_LIB -DQT_NETWORK_LIB -DQT_NO_DEBUG -DQT_NO_DEBUG_OUTPUT -DQT_NO_INFO_OUTPUT -DQT_OPENGLWIDGETS_LIB -DQT_OPENGL_LIB -DQT_PDFWIDGETS_LIB -DQT_PDF_LIB -DQT_SQL_LIB -DQT_SVGWIDGETS_LIB -DQT_SVG_LIB -DQT_WIDGETS_LIB -DTLRENDER_EXR -DTLRENDER_FFMPEG -DTLRENDER_FFMPEG_PLUGIN -DTLRENDER_JPEG -DTLRENDER_OCIO -DTLRENDER_OIIO -DTLRENDER_PNG -DTLRENDER_SDL2 -DTLRENDER_TIFF -DTL_STATIC + DEP_FILE = CMakeFiles/kassetmanagerqt.dir/src/asset_sequence_grouping_proxy_model.cpp.o.d + FLAGS = -O3 -DNDEBUG -std=gnu++20 + INCLUDES = -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/kassetmanagerqt_autogen/include -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include -isystem /usr/include/qt6/QtCore -isystem /usr/include/qt6 -isystem /usr/lib64/qt6/mkspecs/linux-g++ -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/Imath -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/SDL2 -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/minizip-ng -isystem /usr/include/qt6/QtGui -isystem /usr/include/qt6/QtOpenGL -isystem /usr/include/qt6/QtWidgets -isystem /usr/include/qt6/QtOpenGLWidgets -isystem /usr/include/qt6/QtSvg -isystem /usr/include/qt6/QtMultimedia -isystem /usr/include/qt6/QtNetwork -isystem /usr/include/qt6/QtMultimediaWidgets -isystem /usr/include/qt6/QtSql -isystem /usr/include/qt6/QtConcurrent -isystem /usr/include/qt6/QtSvgWidgets -isystem /usr/include/qt6/QtPdf -isystem /usr/include/qt6/QtPdfWidgets + OBJECT_DIR = CMakeFiles/kassetmanagerqt.dir + OBJECT_FILE_DIR = CMakeFiles/kassetmanagerqt.dir/src + +build CMakeFiles/kassetmanagerqt.dir/src/asset_grid_view.cpp.o: CXX_COMPILER__kassetmanagerqt_unscanned_Release /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/asset_grid_view.cpp || cmake_object_order_depends_target_kassetmanagerqt + DEFINES = -DFTK_API_GL_4_1 -DFTK_STATIC -DHAVE_FFMPEG -DHAVE_MINIZIP_NG -DHAVE_OCIO=1 -DHAVE_OPENIMAGEIO=1 -DHAVE_QT_PDF -DHAVE_QT_PDF_WIDGETS -DHAVE_TLRENDER=1 -DKAM_APP_VERSION=\"1.8.5\" -DOPENTIME_STATIC -DOTIO_STATIC -DOpenColorIO_SKIP_IMPORTS -DQT_CONCURRENT_LIB -DQT_CORE_LIB -DQT_GUI_LIB -DQT_MULTIMEDIAWIDGETS_LIB -DQT_MULTIMEDIA_LIB -DQT_NETWORK_LIB -DQT_NO_DEBUG -DQT_NO_DEBUG_OUTPUT -DQT_NO_INFO_OUTPUT -DQT_OPENGLWIDGETS_LIB -DQT_OPENGL_LIB -DQT_PDFWIDGETS_LIB -DQT_PDF_LIB -DQT_SQL_LIB -DQT_SVGWIDGETS_LIB -DQT_SVG_LIB -DQT_WIDGETS_LIB -DTLRENDER_EXR -DTLRENDER_FFMPEG -DTLRENDER_FFMPEG_PLUGIN -DTLRENDER_JPEG -DTLRENDER_OCIO -DTLRENDER_OIIO -DTLRENDER_PNG -DTLRENDER_SDL2 -DTLRENDER_TIFF -DTL_STATIC + DEP_FILE = CMakeFiles/kassetmanagerqt.dir/src/asset_grid_view.cpp.o.d + FLAGS = -O3 -DNDEBUG -std=gnu++20 + INCLUDES = -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/kassetmanagerqt_autogen/include -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include -isystem /usr/include/qt6/QtCore -isystem /usr/include/qt6 -isystem /usr/lib64/qt6/mkspecs/linux-g++ -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/Imath -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/SDL2 -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/minizip-ng -isystem /usr/include/qt6/QtGui -isystem /usr/include/qt6/QtOpenGL -isystem /usr/include/qt6/QtWidgets -isystem /usr/include/qt6/QtOpenGLWidgets -isystem /usr/include/qt6/QtSvg -isystem /usr/include/qt6/QtMultimedia -isystem /usr/include/qt6/QtNetwork -isystem /usr/include/qt6/QtMultimediaWidgets -isystem /usr/include/qt6/QtSql -isystem /usr/include/qt6/QtConcurrent -isystem /usr/include/qt6/QtSvgWidgets -isystem /usr/include/qt6/QtPdf -isystem /usr/include/qt6/QtPdfWidgets + OBJECT_DIR = CMakeFiles/kassetmanagerqt.dir + OBJECT_FILE_DIR = CMakeFiles/kassetmanagerqt.dir/src + +build CMakeFiles/kassetmanagerqt.dir/src/icon_utils.cpp.o: CXX_COMPILER__kassetmanagerqt_unscanned_Release /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/icon_utils.cpp || cmake_object_order_depends_target_kassetmanagerqt + DEFINES = -DFTK_API_GL_4_1 -DFTK_STATIC -DHAVE_FFMPEG -DHAVE_MINIZIP_NG -DHAVE_OCIO=1 -DHAVE_OPENIMAGEIO=1 -DHAVE_QT_PDF -DHAVE_QT_PDF_WIDGETS -DHAVE_TLRENDER=1 -DKAM_APP_VERSION=\"1.8.5\" -DOPENTIME_STATIC -DOTIO_STATIC -DOpenColorIO_SKIP_IMPORTS -DQT_CONCURRENT_LIB -DQT_CORE_LIB -DQT_GUI_LIB -DQT_MULTIMEDIAWIDGETS_LIB -DQT_MULTIMEDIA_LIB -DQT_NETWORK_LIB -DQT_NO_DEBUG -DQT_NO_DEBUG_OUTPUT -DQT_NO_INFO_OUTPUT -DQT_OPENGLWIDGETS_LIB -DQT_OPENGL_LIB -DQT_PDFWIDGETS_LIB -DQT_PDF_LIB -DQT_SQL_LIB -DQT_SVGWIDGETS_LIB -DQT_SVG_LIB -DQT_WIDGETS_LIB -DTLRENDER_EXR -DTLRENDER_FFMPEG -DTLRENDER_FFMPEG_PLUGIN -DTLRENDER_JPEG -DTLRENDER_OCIO -DTLRENDER_OIIO -DTLRENDER_PNG -DTLRENDER_SDL2 -DTLRENDER_TIFF -DTL_STATIC + DEP_FILE = CMakeFiles/kassetmanagerqt.dir/src/icon_utils.cpp.o.d + FLAGS = -O3 -DNDEBUG -std=gnu++20 + INCLUDES = -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/kassetmanagerqt_autogen/include -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include -isystem /usr/include/qt6/QtCore -isystem /usr/include/qt6 -isystem /usr/lib64/qt6/mkspecs/linux-g++ -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/Imath -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/SDL2 -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/minizip-ng -isystem /usr/include/qt6/QtGui -isystem /usr/include/qt6/QtOpenGL -isystem /usr/include/qt6/QtWidgets -isystem /usr/include/qt6/QtOpenGLWidgets -isystem /usr/include/qt6/QtSvg -isystem /usr/include/qt6/QtMultimedia -isystem /usr/include/qt6/QtNetwork -isystem /usr/include/qt6/QtMultimediaWidgets -isystem /usr/include/qt6/QtSql -isystem /usr/include/qt6/QtConcurrent -isystem /usr/include/qt6/QtSvgWidgets -isystem /usr/include/qt6/QtPdf -isystem /usr/include/qt6/QtPdfWidgets + OBJECT_DIR = CMakeFiles/kassetmanagerqt.dir + OBJECT_FILE_DIR = CMakeFiles/kassetmanagerqt.dir/src + +build CMakeFiles/kassetmanagerqt.dir/src/file_utils.cpp.o: CXX_COMPILER__kassetmanagerqt_unscanned_Release /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/file_utils.cpp || cmake_object_order_depends_target_kassetmanagerqt + DEFINES = -DFTK_API_GL_4_1 -DFTK_STATIC -DHAVE_FFMPEG -DHAVE_MINIZIP_NG -DHAVE_OCIO=1 -DHAVE_OPENIMAGEIO=1 -DHAVE_QT_PDF -DHAVE_QT_PDF_WIDGETS -DHAVE_TLRENDER=1 -DKAM_APP_VERSION=\"1.8.5\" -DOPENTIME_STATIC -DOTIO_STATIC -DOpenColorIO_SKIP_IMPORTS -DQT_CONCURRENT_LIB -DQT_CORE_LIB -DQT_GUI_LIB -DQT_MULTIMEDIAWIDGETS_LIB -DQT_MULTIMEDIA_LIB -DQT_NETWORK_LIB -DQT_NO_DEBUG -DQT_NO_DEBUG_OUTPUT -DQT_NO_INFO_OUTPUT -DQT_OPENGLWIDGETS_LIB -DQT_OPENGL_LIB -DQT_PDFWIDGETS_LIB -DQT_PDF_LIB -DQT_SQL_LIB -DQT_SVGWIDGETS_LIB -DQT_SVG_LIB -DQT_WIDGETS_LIB -DTLRENDER_EXR -DTLRENDER_FFMPEG -DTLRENDER_FFMPEG_PLUGIN -DTLRENDER_JPEG -DTLRENDER_OCIO -DTLRENDER_OIIO -DTLRENDER_PNG -DTLRENDER_SDL2 -DTLRENDER_TIFF -DTL_STATIC + DEP_FILE = CMakeFiles/kassetmanagerqt.dir/src/file_utils.cpp.o.d + FLAGS = -O3 -DNDEBUG -std=gnu++20 + INCLUDES = -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/kassetmanagerqt_autogen/include -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include -isystem /usr/include/qt6/QtCore -isystem /usr/include/qt6 -isystem /usr/lib64/qt6/mkspecs/linux-g++ -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/Imath -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/SDL2 -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/minizip-ng -isystem /usr/include/qt6/QtGui -isystem /usr/include/qt6/QtOpenGL -isystem /usr/include/qt6/QtWidgets -isystem /usr/include/qt6/QtOpenGLWidgets -isystem /usr/include/qt6/QtSvg -isystem /usr/include/qt6/QtMultimedia -isystem /usr/include/qt6/QtNetwork -isystem /usr/include/qt6/QtMultimediaWidgets -isystem /usr/include/qt6/QtSql -isystem /usr/include/qt6/QtConcurrent -isystem /usr/include/qt6/QtSvgWidgets -isystem /usr/include/qt6/QtPdf -isystem /usr/include/qt6/QtPdfWidgets + OBJECT_DIR = CMakeFiles/kassetmanagerqt.dir + OBJECT_FILE_DIR = CMakeFiles/kassetmanagerqt.dir/src + +build CMakeFiles/kassetmanagerqt.dir/src/asset_item_delegate.cpp.o: CXX_COMPILER__kassetmanagerqt_unscanned_Release /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/asset_item_delegate.cpp || cmake_object_order_depends_target_kassetmanagerqt + DEFINES = -DFTK_API_GL_4_1 -DFTK_STATIC -DHAVE_FFMPEG -DHAVE_MINIZIP_NG -DHAVE_OCIO=1 -DHAVE_OPENIMAGEIO=1 -DHAVE_QT_PDF -DHAVE_QT_PDF_WIDGETS -DHAVE_TLRENDER=1 -DKAM_APP_VERSION=\"1.8.5\" -DOPENTIME_STATIC -DOTIO_STATIC -DOpenColorIO_SKIP_IMPORTS -DQT_CONCURRENT_LIB -DQT_CORE_LIB -DQT_GUI_LIB -DQT_MULTIMEDIAWIDGETS_LIB -DQT_MULTIMEDIA_LIB -DQT_NETWORK_LIB -DQT_NO_DEBUG -DQT_NO_DEBUG_OUTPUT -DQT_NO_INFO_OUTPUT -DQT_OPENGLWIDGETS_LIB -DQT_OPENGL_LIB -DQT_PDFWIDGETS_LIB -DQT_PDF_LIB -DQT_SQL_LIB -DQT_SVGWIDGETS_LIB -DQT_SVG_LIB -DQT_WIDGETS_LIB -DTLRENDER_EXR -DTLRENDER_FFMPEG -DTLRENDER_FFMPEG_PLUGIN -DTLRENDER_JPEG -DTLRENDER_OCIO -DTLRENDER_OIIO -DTLRENDER_PNG -DTLRENDER_SDL2 -DTLRENDER_TIFF -DTL_STATIC + DEP_FILE = CMakeFiles/kassetmanagerqt.dir/src/asset_item_delegate.cpp.o.d + FLAGS = -O3 -DNDEBUG -std=gnu++20 + INCLUDES = -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/kassetmanagerqt_autogen/include -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include -isystem /usr/include/qt6/QtCore -isystem /usr/include/qt6 -isystem /usr/lib64/qt6/mkspecs/linux-g++ -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/Imath -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/SDL2 -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/minizip-ng -isystem /usr/include/qt6/QtGui -isystem /usr/include/qt6/QtOpenGL -isystem /usr/include/qt6/QtWidgets -isystem /usr/include/qt6/QtOpenGLWidgets -isystem /usr/include/qt6/QtSvg -isystem /usr/include/qt6/QtMultimedia -isystem /usr/include/qt6/QtNetwork -isystem /usr/include/qt6/QtMultimediaWidgets -isystem /usr/include/qt6/QtSql -isystem /usr/include/qt6/QtConcurrent -isystem /usr/include/qt6/QtSvgWidgets -isystem /usr/include/qt6/QtPdf -isystem /usr/include/qt6/QtPdfWidgets + OBJECT_DIR = CMakeFiles/kassetmanagerqt.dir + OBJECT_FILE_DIR = CMakeFiles/kassetmanagerqt.dir/src + +build CMakeFiles/kassetmanagerqt.dir/src/fm_item_delegate.cpp.o: CXX_COMPILER__kassetmanagerqt_unscanned_Release /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/fm_item_delegate.cpp || cmake_object_order_depends_target_kassetmanagerqt + DEFINES = -DFTK_API_GL_4_1 -DFTK_STATIC -DHAVE_FFMPEG -DHAVE_MINIZIP_NG -DHAVE_OCIO=1 -DHAVE_OPENIMAGEIO=1 -DHAVE_QT_PDF -DHAVE_QT_PDF_WIDGETS -DHAVE_TLRENDER=1 -DKAM_APP_VERSION=\"1.8.5\" -DOPENTIME_STATIC -DOTIO_STATIC -DOpenColorIO_SKIP_IMPORTS -DQT_CONCURRENT_LIB -DQT_CORE_LIB -DQT_GUI_LIB -DQT_MULTIMEDIAWIDGETS_LIB -DQT_MULTIMEDIA_LIB -DQT_NETWORK_LIB -DQT_NO_DEBUG -DQT_NO_DEBUG_OUTPUT -DQT_NO_INFO_OUTPUT -DQT_OPENGLWIDGETS_LIB -DQT_OPENGL_LIB -DQT_PDFWIDGETS_LIB -DQT_PDF_LIB -DQT_SQL_LIB -DQT_SVGWIDGETS_LIB -DQT_SVG_LIB -DQT_WIDGETS_LIB -DTLRENDER_EXR -DTLRENDER_FFMPEG -DTLRENDER_FFMPEG_PLUGIN -DTLRENDER_JPEG -DTLRENDER_OCIO -DTLRENDER_OIIO -DTLRENDER_PNG -DTLRENDER_SDL2 -DTLRENDER_TIFF -DTL_STATIC + DEP_FILE = CMakeFiles/kassetmanagerqt.dir/src/fm_item_delegate.cpp.o.d + FLAGS = -O3 -DNDEBUG -std=gnu++20 + INCLUDES = -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/kassetmanagerqt_autogen/include -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include -isystem /usr/include/qt6/QtCore -isystem /usr/include/qt6 -isystem /usr/lib64/qt6/mkspecs/linux-g++ -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/Imath -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/SDL2 -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/minizip-ng -isystem /usr/include/qt6/QtGui -isystem /usr/include/qt6/QtOpenGL -isystem /usr/include/qt6/QtWidgets -isystem /usr/include/qt6/QtOpenGLWidgets -isystem /usr/include/qt6/QtSvg -isystem /usr/include/qt6/QtMultimedia -isystem /usr/include/qt6/QtNetwork -isystem /usr/include/qt6/QtMultimediaWidgets -isystem /usr/include/qt6/QtSql -isystem /usr/include/qt6/QtConcurrent -isystem /usr/include/qt6/QtSvgWidgets -isystem /usr/include/qt6/QtPdf -isystem /usr/include/qt6/QtPdfWidgets + OBJECT_DIR = CMakeFiles/kassetmanagerqt.dir + OBJECT_FILE_DIR = CMakeFiles/kassetmanagerqt.dir/src + +build CMakeFiles/kassetmanagerqt.dir/src/grid_scrub.cpp.o: CXX_COMPILER__kassetmanagerqt_unscanned_Release /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/grid_scrub.cpp || cmake_object_order_depends_target_kassetmanagerqt + DEFINES = -DFTK_API_GL_4_1 -DFTK_STATIC -DHAVE_FFMPEG -DHAVE_MINIZIP_NG -DHAVE_OCIO=1 -DHAVE_OPENIMAGEIO=1 -DHAVE_QT_PDF -DHAVE_QT_PDF_WIDGETS -DHAVE_TLRENDER=1 -DKAM_APP_VERSION=\"1.8.5\" -DOPENTIME_STATIC -DOTIO_STATIC -DOpenColorIO_SKIP_IMPORTS -DQT_CONCURRENT_LIB -DQT_CORE_LIB -DQT_GUI_LIB -DQT_MULTIMEDIAWIDGETS_LIB -DQT_MULTIMEDIA_LIB -DQT_NETWORK_LIB -DQT_NO_DEBUG -DQT_NO_DEBUG_OUTPUT -DQT_NO_INFO_OUTPUT -DQT_OPENGLWIDGETS_LIB -DQT_OPENGL_LIB -DQT_PDFWIDGETS_LIB -DQT_PDF_LIB -DQT_SQL_LIB -DQT_SVGWIDGETS_LIB -DQT_SVG_LIB -DQT_WIDGETS_LIB -DTLRENDER_EXR -DTLRENDER_FFMPEG -DTLRENDER_FFMPEG_PLUGIN -DTLRENDER_JPEG -DTLRENDER_OCIO -DTLRENDER_OIIO -DTLRENDER_PNG -DTLRENDER_SDL2 -DTLRENDER_TIFF -DTL_STATIC + DEP_FILE = CMakeFiles/kassetmanagerqt.dir/src/grid_scrub.cpp.o.d + FLAGS = -O3 -DNDEBUG -std=gnu++20 + INCLUDES = -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/kassetmanagerqt_autogen/include -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include -isystem /usr/include/qt6/QtCore -isystem /usr/include/qt6 -isystem /usr/lib64/qt6/mkspecs/linux-g++ -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/Imath -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/SDL2 -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/minizip-ng -isystem /usr/include/qt6/QtGui -isystem /usr/include/qt6/QtOpenGL -isystem /usr/include/qt6/QtWidgets -isystem /usr/include/qt6/QtOpenGLWidgets -isystem /usr/include/qt6/QtSvg -isystem /usr/include/qt6/QtMultimedia -isystem /usr/include/qt6/QtNetwork -isystem /usr/include/qt6/QtMultimediaWidgets -isystem /usr/include/qt6/QtSql -isystem /usr/include/qt6/QtConcurrent -isystem /usr/include/qt6/QtSvgWidgets -isystem /usr/include/qt6/QtPdf -isystem /usr/include/qt6/QtPdfWidgets + OBJECT_DIR = CMakeFiles/kassetmanagerqt.dir + OBJECT_FILE_DIR = CMakeFiles/kassetmanagerqt.dir/src + +build CMakeFiles/kassetmanagerqt.dir/src/scrub_frame_registry.cpp.o: CXX_COMPILER__kassetmanagerqt_unscanned_Release /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/scrub_frame_registry.cpp || cmake_object_order_depends_target_kassetmanagerqt + DEFINES = -DFTK_API_GL_4_1 -DFTK_STATIC -DHAVE_FFMPEG -DHAVE_MINIZIP_NG -DHAVE_OCIO=1 -DHAVE_OPENIMAGEIO=1 -DHAVE_QT_PDF -DHAVE_QT_PDF_WIDGETS -DHAVE_TLRENDER=1 -DKAM_APP_VERSION=\"1.8.5\" -DOPENTIME_STATIC -DOTIO_STATIC -DOpenColorIO_SKIP_IMPORTS -DQT_CONCURRENT_LIB -DQT_CORE_LIB -DQT_GUI_LIB -DQT_MULTIMEDIAWIDGETS_LIB -DQT_MULTIMEDIA_LIB -DQT_NETWORK_LIB -DQT_NO_DEBUG -DQT_NO_DEBUG_OUTPUT -DQT_NO_INFO_OUTPUT -DQT_OPENGLWIDGETS_LIB -DQT_OPENGL_LIB -DQT_PDFWIDGETS_LIB -DQT_PDF_LIB -DQT_SQL_LIB -DQT_SVGWIDGETS_LIB -DQT_SVG_LIB -DQT_WIDGETS_LIB -DTLRENDER_EXR -DTLRENDER_FFMPEG -DTLRENDER_FFMPEG_PLUGIN -DTLRENDER_JPEG -DTLRENDER_OCIO -DTLRENDER_OIIO -DTLRENDER_PNG -DTLRENDER_SDL2 -DTLRENDER_TIFF -DTL_STATIC + DEP_FILE = CMakeFiles/kassetmanagerqt.dir/src/scrub_frame_registry.cpp.o.d + FLAGS = -O3 -DNDEBUG -std=gnu++20 + INCLUDES = -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/kassetmanagerqt_autogen/include -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include -isystem /usr/include/qt6/QtCore -isystem /usr/include/qt6 -isystem /usr/lib64/qt6/mkspecs/linux-g++ -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/Imath -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/SDL2 -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/minizip-ng -isystem /usr/include/qt6/QtGui -isystem /usr/include/qt6/QtOpenGL -isystem /usr/include/qt6/QtWidgets -isystem /usr/include/qt6/QtOpenGLWidgets -isystem /usr/include/qt6/QtSvg -isystem /usr/include/qt6/QtMultimedia -isystem /usr/include/qt6/QtNetwork -isystem /usr/include/qt6/QtMultimediaWidgets -isystem /usr/include/qt6/QtSql -isystem /usr/include/qt6/QtConcurrent -isystem /usr/include/qt6/QtSvgWidgets -isystem /usr/include/qt6/QtPdf -isystem /usr/include/qt6/QtPdfWidgets + OBJECT_DIR = CMakeFiles/kassetmanagerqt.dir + OBJECT_FILE_DIR = CMakeFiles/kassetmanagerqt.dir/src + +build CMakeFiles/kassetmanagerqt.dir/src/fm_views_ex.cpp.o: CXX_COMPILER__kassetmanagerqt_unscanned_Release /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/fm_views_ex.cpp || cmake_object_order_depends_target_kassetmanagerqt + DEFINES = -DFTK_API_GL_4_1 -DFTK_STATIC -DHAVE_FFMPEG -DHAVE_MINIZIP_NG -DHAVE_OCIO=1 -DHAVE_OPENIMAGEIO=1 -DHAVE_QT_PDF -DHAVE_QT_PDF_WIDGETS -DHAVE_TLRENDER=1 -DKAM_APP_VERSION=\"1.8.5\" -DOPENTIME_STATIC -DOTIO_STATIC -DOpenColorIO_SKIP_IMPORTS -DQT_CONCURRENT_LIB -DQT_CORE_LIB -DQT_GUI_LIB -DQT_MULTIMEDIAWIDGETS_LIB -DQT_MULTIMEDIA_LIB -DQT_NETWORK_LIB -DQT_NO_DEBUG -DQT_NO_DEBUG_OUTPUT -DQT_NO_INFO_OUTPUT -DQT_OPENGLWIDGETS_LIB -DQT_OPENGL_LIB -DQT_PDFWIDGETS_LIB -DQT_PDF_LIB -DQT_SQL_LIB -DQT_SVGWIDGETS_LIB -DQT_SVG_LIB -DQT_WIDGETS_LIB -DTLRENDER_EXR -DTLRENDER_FFMPEG -DTLRENDER_FFMPEG_PLUGIN -DTLRENDER_JPEG -DTLRENDER_OCIO -DTLRENDER_OIIO -DTLRENDER_PNG -DTLRENDER_SDL2 -DTLRENDER_TIFF -DTL_STATIC + DEP_FILE = CMakeFiles/kassetmanagerqt.dir/src/fm_views_ex.cpp.o.d + FLAGS = -O3 -DNDEBUG -std=gnu++20 + INCLUDES = -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/kassetmanagerqt_autogen/include -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include -isystem /usr/include/qt6/QtCore -isystem /usr/include/qt6 -isystem /usr/lib64/qt6/mkspecs/linux-g++ -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/Imath -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/SDL2 -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/minizip-ng -isystem /usr/include/qt6/QtGui -isystem /usr/include/qt6/QtOpenGL -isystem /usr/include/qt6/QtWidgets -isystem /usr/include/qt6/QtOpenGLWidgets -isystem /usr/include/qt6/QtSvg -isystem /usr/include/qt6/QtMultimedia -isystem /usr/include/qt6/QtNetwork -isystem /usr/include/qt6/QtMultimediaWidgets -isystem /usr/include/qt6/QtSql -isystem /usr/include/qt6/QtConcurrent -isystem /usr/include/qt6/QtSvgWidgets -isystem /usr/include/qt6/QtPdf -isystem /usr/include/qt6/QtPdfWidgets + OBJECT_DIR = CMakeFiles/kassetmanagerqt.dir + OBJECT_FILE_DIR = CMakeFiles/kassetmanagerqt.dir/src + +build CMakeFiles/kassetmanagerqt.dir/src/file_manager_pane.cpp.o: CXX_COMPILER__kassetmanagerqt_unscanned_Release /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/file_manager_pane.cpp || cmake_object_order_depends_target_kassetmanagerqt + DEFINES = -DFTK_API_GL_4_1 -DFTK_STATIC -DHAVE_FFMPEG -DHAVE_MINIZIP_NG -DHAVE_OCIO=1 -DHAVE_OPENIMAGEIO=1 -DHAVE_QT_PDF -DHAVE_QT_PDF_WIDGETS -DHAVE_TLRENDER=1 -DKAM_APP_VERSION=\"1.8.5\" -DOPENTIME_STATIC -DOTIO_STATIC -DOpenColorIO_SKIP_IMPORTS -DQT_CONCURRENT_LIB -DQT_CORE_LIB -DQT_GUI_LIB -DQT_MULTIMEDIAWIDGETS_LIB -DQT_MULTIMEDIA_LIB -DQT_NETWORK_LIB -DQT_NO_DEBUG -DQT_NO_DEBUG_OUTPUT -DQT_NO_INFO_OUTPUT -DQT_OPENGLWIDGETS_LIB -DQT_OPENGL_LIB -DQT_PDFWIDGETS_LIB -DQT_PDF_LIB -DQT_SQL_LIB -DQT_SVGWIDGETS_LIB -DQT_SVG_LIB -DQT_WIDGETS_LIB -DTLRENDER_EXR -DTLRENDER_FFMPEG -DTLRENDER_FFMPEG_PLUGIN -DTLRENDER_JPEG -DTLRENDER_OCIO -DTLRENDER_OIIO -DTLRENDER_PNG -DTLRENDER_SDL2 -DTLRENDER_TIFF -DTL_STATIC + DEP_FILE = CMakeFiles/kassetmanagerqt.dir/src/file_manager_pane.cpp.o.d + FLAGS = -O3 -DNDEBUG -std=gnu++20 + INCLUDES = -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/kassetmanagerqt_autogen/include -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include -isystem /usr/include/qt6/QtCore -isystem /usr/include/qt6 -isystem /usr/lib64/qt6/mkspecs/linux-g++ -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/Imath -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/SDL2 -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/minizip-ng -isystem /usr/include/qt6/QtGui -isystem /usr/include/qt6/QtOpenGL -isystem /usr/include/qt6/QtWidgets -isystem /usr/include/qt6/QtOpenGLWidgets -isystem /usr/include/qt6/QtSvg -isystem /usr/include/qt6/QtMultimedia -isystem /usr/include/qt6/QtNetwork -isystem /usr/include/qt6/QtMultimediaWidgets -isystem /usr/include/qt6/QtSql -isystem /usr/include/qt6/QtConcurrent -isystem /usr/include/qt6/QtSvgWidgets -isystem /usr/include/qt6/QtPdf -isystem /usr/include/qt6/QtPdfWidgets + OBJECT_DIR = CMakeFiles/kassetmanagerqt.dir + OBJECT_FILE_DIR = CMakeFiles/kassetmanagerqt.dir/src + +build CMakeFiles/kassetmanagerqt.dir/src/oiio_image_loader.cpp.o: CXX_COMPILER__kassetmanagerqt_unscanned_Release /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/oiio_image_loader.cpp || cmake_object_order_depends_target_kassetmanagerqt + DEFINES = -DFTK_API_GL_4_1 -DFTK_STATIC -DHAVE_FFMPEG -DHAVE_MINIZIP_NG -DHAVE_OCIO=1 -DHAVE_OPENIMAGEIO=1 -DHAVE_QT_PDF -DHAVE_QT_PDF_WIDGETS -DHAVE_TLRENDER=1 -DKAM_APP_VERSION=\"1.8.5\" -DOPENTIME_STATIC -DOTIO_STATIC -DOpenColorIO_SKIP_IMPORTS -DQT_CONCURRENT_LIB -DQT_CORE_LIB -DQT_GUI_LIB -DQT_MULTIMEDIAWIDGETS_LIB -DQT_MULTIMEDIA_LIB -DQT_NETWORK_LIB -DQT_NO_DEBUG -DQT_NO_DEBUG_OUTPUT -DQT_NO_INFO_OUTPUT -DQT_OPENGLWIDGETS_LIB -DQT_OPENGL_LIB -DQT_PDFWIDGETS_LIB -DQT_PDF_LIB -DQT_SQL_LIB -DQT_SVGWIDGETS_LIB -DQT_SVG_LIB -DQT_WIDGETS_LIB -DTLRENDER_EXR -DTLRENDER_FFMPEG -DTLRENDER_FFMPEG_PLUGIN -DTLRENDER_JPEG -DTLRENDER_OCIO -DTLRENDER_OIIO -DTLRENDER_PNG -DTLRENDER_SDL2 -DTLRENDER_TIFF -DTL_STATIC + DEP_FILE = CMakeFiles/kassetmanagerqt.dir/src/oiio_image_loader.cpp.o.d + FLAGS = -O3 -DNDEBUG -std=gnu++20 + INCLUDES = -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/kassetmanagerqt_autogen/include -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include -isystem /usr/include/qt6/QtCore -isystem /usr/include/qt6 -isystem /usr/lib64/qt6/mkspecs/linux-g++ -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/Imath -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/SDL2 -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/minizip-ng -isystem /usr/include/qt6/QtGui -isystem /usr/include/qt6/QtOpenGL -isystem /usr/include/qt6/QtWidgets -isystem /usr/include/qt6/QtOpenGLWidgets -isystem /usr/include/qt6/QtSvg -isystem /usr/include/qt6/QtMultimedia -isystem /usr/include/qt6/QtNetwork -isystem /usr/include/qt6/QtMultimediaWidgets -isystem /usr/include/qt6/QtSql -isystem /usr/include/qt6/QtConcurrent -isystem /usr/include/qt6/QtSvgWidgets -isystem /usr/include/qt6/QtPdf -isystem /usr/include/qt6/QtPdfWidgets + OBJECT_DIR = CMakeFiles/kassetmanagerqt.dir + OBJECT_FILE_DIR = CMakeFiles/kassetmanagerqt.dir/src + +build CMakeFiles/kassetmanagerqt.dir/src/project_folder_watcher.cpp.o: CXX_COMPILER__kassetmanagerqt_unscanned_Release /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/project_folder_watcher.cpp || cmake_object_order_depends_target_kassetmanagerqt + DEFINES = -DFTK_API_GL_4_1 -DFTK_STATIC -DHAVE_FFMPEG -DHAVE_MINIZIP_NG -DHAVE_OCIO=1 -DHAVE_OPENIMAGEIO=1 -DHAVE_QT_PDF -DHAVE_QT_PDF_WIDGETS -DHAVE_TLRENDER=1 -DKAM_APP_VERSION=\"1.8.5\" -DOPENTIME_STATIC -DOTIO_STATIC -DOpenColorIO_SKIP_IMPORTS -DQT_CONCURRENT_LIB -DQT_CORE_LIB -DQT_GUI_LIB -DQT_MULTIMEDIAWIDGETS_LIB -DQT_MULTIMEDIA_LIB -DQT_NETWORK_LIB -DQT_NO_DEBUG -DQT_NO_DEBUG_OUTPUT -DQT_NO_INFO_OUTPUT -DQT_OPENGLWIDGETS_LIB -DQT_OPENGL_LIB -DQT_PDFWIDGETS_LIB -DQT_PDF_LIB -DQT_SQL_LIB -DQT_SVGWIDGETS_LIB -DQT_SVG_LIB -DQT_WIDGETS_LIB -DTLRENDER_EXR -DTLRENDER_FFMPEG -DTLRENDER_FFMPEG_PLUGIN -DTLRENDER_JPEG -DTLRENDER_OCIO -DTLRENDER_OIIO -DTLRENDER_PNG -DTLRENDER_SDL2 -DTLRENDER_TIFF -DTL_STATIC + DEP_FILE = CMakeFiles/kassetmanagerqt.dir/src/project_folder_watcher.cpp.o.d + FLAGS = -O3 -DNDEBUG -std=gnu++20 + INCLUDES = -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/kassetmanagerqt_autogen/include -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include -isystem /usr/include/qt6/QtCore -isystem /usr/include/qt6 -isystem /usr/lib64/qt6/mkspecs/linux-g++ -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/Imath -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/SDL2 -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/minizip-ng -isystem /usr/include/qt6/QtGui -isystem /usr/include/qt6/QtOpenGL -isystem /usr/include/qt6/QtWidgets -isystem /usr/include/qt6/QtOpenGLWidgets -isystem /usr/include/qt6/QtSvg -isystem /usr/include/qt6/QtMultimedia -isystem /usr/include/qt6/QtNetwork -isystem /usr/include/qt6/QtMultimediaWidgets -isystem /usr/include/qt6/QtSql -isystem /usr/include/qt6/QtConcurrent -isystem /usr/include/qt6/QtSvgWidgets -isystem /usr/include/qt6/QtPdf -isystem /usr/include/qt6/QtPdfWidgets + OBJECT_DIR = CMakeFiles/kassetmanagerqt.dir + OBJECT_FILE_DIR = CMakeFiles/kassetmanagerqt.dir/src + +build CMakeFiles/kassetmanagerqt.dir/src/log_viewer_widget.cpp.o: CXX_COMPILER__kassetmanagerqt_unscanned_Release /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/log_viewer_widget.cpp || cmake_object_order_depends_target_kassetmanagerqt + DEFINES = -DFTK_API_GL_4_1 -DFTK_STATIC -DHAVE_FFMPEG -DHAVE_MINIZIP_NG -DHAVE_OCIO=1 -DHAVE_OPENIMAGEIO=1 -DHAVE_QT_PDF -DHAVE_QT_PDF_WIDGETS -DHAVE_TLRENDER=1 -DKAM_APP_VERSION=\"1.8.5\" -DOPENTIME_STATIC -DOTIO_STATIC -DOpenColorIO_SKIP_IMPORTS -DQT_CONCURRENT_LIB -DQT_CORE_LIB -DQT_GUI_LIB -DQT_MULTIMEDIAWIDGETS_LIB -DQT_MULTIMEDIA_LIB -DQT_NETWORK_LIB -DQT_NO_DEBUG -DQT_NO_DEBUG_OUTPUT -DQT_NO_INFO_OUTPUT -DQT_OPENGLWIDGETS_LIB -DQT_OPENGL_LIB -DQT_PDFWIDGETS_LIB -DQT_PDF_LIB -DQT_SQL_LIB -DQT_SVGWIDGETS_LIB -DQT_SVG_LIB -DQT_WIDGETS_LIB -DTLRENDER_EXR -DTLRENDER_FFMPEG -DTLRENDER_FFMPEG_PLUGIN -DTLRENDER_JPEG -DTLRENDER_OCIO -DTLRENDER_OIIO -DTLRENDER_PNG -DTLRENDER_SDL2 -DTLRENDER_TIFF -DTL_STATIC + DEP_FILE = CMakeFiles/kassetmanagerqt.dir/src/log_viewer_widget.cpp.o.d + FLAGS = -O3 -DNDEBUG -std=gnu++20 + INCLUDES = -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/kassetmanagerqt_autogen/include -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include -isystem /usr/include/qt6/QtCore -isystem /usr/include/qt6 -isystem /usr/lib64/qt6/mkspecs/linux-g++ -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/Imath -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/SDL2 -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/minizip-ng -isystem /usr/include/qt6/QtGui -isystem /usr/include/qt6/QtOpenGL -isystem /usr/include/qt6/QtWidgets -isystem /usr/include/qt6/QtOpenGLWidgets -isystem /usr/include/qt6/QtSvg -isystem /usr/include/qt6/QtMultimedia -isystem /usr/include/qt6/QtNetwork -isystem /usr/include/qt6/QtMultimediaWidgets -isystem /usr/include/qt6/QtSql -isystem /usr/include/qt6/QtConcurrent -isystem /usr/include/qt6/QtSvgWidgets -isystem /usr/include/qt6/QtPdf -isystem /usr/include/qt6/QtPdfWidgets + OBJECT_DIR = CMakeFiles/kassetmanagerqt.dir + OBJECT_FILE_DIR = CMakeFiles/kassetmanagerqt.dir/src + +build CMakeFiles/kassetmanagerqt.dir/src/video_metadata.cpp.o: CXX_COMPILER__kassetmanagerqt_unscanned_Release /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/video_metadata.cpp || cmake_object_order_depends_target_kassetmanagerqt + DEFINES = -DFTK_API_GL_4_1 -DFTK_STATIC -DHAVE_FFMPEG -DHAVE_MINIZIP_NG -DHAVE_OCIO=1 -DHAVE_OPENIMAGEIO=1 -DHAVE_QT_PDF -DHAVE_QT_PDF_WIDGETS -DHAVE_TLRENDER=1 -DKAM_APP_VERSION=\"1.8.5\" -DOPENTIME_STATIC -DOTIO_STATIC -DOpenColorIO_SKIP_IMPORTS -DQT_CONCURRENT_LIB -DQT_CORE_LIB -DQT_GUI_LIB -DQT_MULTIMEDIAWIDGETS_LIB -DQT_MULTIMEDIA_LIB -DQT_NETWORK_LIB -DQT_NO_DEBUG -DQT_NO_DEBUG_OUTPUT -DQT_NO_INFO_OUTPUT -DQT_OPENGLWIDGETS_LIB -DQT_OPENGL_LIB -DQT_PDFWIDGETS_LIB -DQT_PDF_LIB -DQT_SQL_LIB -DQT_SVGWIDGETS_LIB -DQT_SVG_LIB -DQT_WIDGETS_LIB -DTLRENDER_EXR -DTLRENDER_FFMPEG -DTLRENDER_FFMPEG_PLUGIN -DTLRENDER_JPEG -DTLRENDER_OCIO -DTLRENDER_OIIO -DTLRENDER_PNG -DTLRENDER_SDL2 -DTLRENDER_TIFF -DTL_STATIC + DEP_FILE = CMakeFiles/kassetmanagerqt.dir/src/video_metadata.cpp.o.d + FLAGS = -O3 -DNDEBUG -std=gnu++20 + INCLUDES = -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/kassetmanagerqt_autogen/include -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include -isystem /usr/include/qt6/QtCore -isystem /usr/include/qt6 -isystem /usr/lib64/qt6/mkspecs/linux-g++ -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/Imath -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/SDL2 -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/minizip-ng -isystem /usr/include/qt6/QtGui -isystem /usr/include/qt6/QtOpenGL -isystem /usr/include/qt6/QtWidgets -isystem /usr/include/qt6/QtOpenGLWidgets -isystem /usr/include/qt6/QtSvg -isystem /usr/include/qt6/QtMultimedia -isystem /usr/include/qt6/QtNetwork -isystem /usr/include/qt6/QtMultimediaWidgets -isystem /usr/include/qt6/QtSql -isystem /usr/include/qt6/QtConcurrent -isystem /usr/include/qt6/QtSvgWidgets -isystem /usr/include/qt6/QtPdf -isystem /usr/include/qt6/QtPdfWidgets + OBJECT_DIR = CMakeFiles/kassetmanagerqt.dir + OBJECT_FILE_DIR = CMakeFiles/kassetmanagerqt.dir/src + +build CMakeFiles/kassetmanagerqt.dir/src/file_ops.cpp.o: CXX_COMPILER__kassetmanagerqt_unscanned_Release /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/file_ops.cpp || cmake_object_order_depends_target_kassetmanagerqt + DEFINES = -DFTK_API_GL_4_1 -DFTK_STATIC -DHAVE_FFMPEG -DHAVE_MINIZIP_NG -DHAVE_OCIO=1 -DHAVE_OPENIMAGEIO=1 -DHAVE_QT_PDF -DHAVE_QT_PDF_WIDGETS -DHAVE_TLRENDER=1 -DKAM_APP_VERSION=\"1.8.5\" -DOPENTIME_STATIC -DOTIO_STATIC -DOpenColorIO_SKIP_IMPORTS -DQT_CONCURRENT_LIB -DQT_CORE_LIB -DQT_GUI_LIB -DQT_MULTIMEDIAWIDGETS_LIB -DQT_MULTIMEDIA_LIB -DQT_NETWORK_LIB -DQT_NO_DEBUG -DQT_NO_DEBUG_OUTPUT -DQT_NO_INFO_OUTPUT -DQT_OPENGLWIDGETS_LIB -DQT_OPENGL_LIB -DQT_PDFWIDGETS_LIB -DQT_PDF_LIB -DQT_SQL_LIB -DQT_SVGWIDGETS_LIB -DQT_SVG_LIB -DQT_WIDGETS_LIB -DTLRENDER_EXR -DTLRENDER_FFMPEG -DTLRENDER_FFMPEG_PLUGIN -DTLRENDER_JPEG -DTLRENDER_OCIO -DTLRENDER_OIIO -DTLRENDER_PNG -DTLRENDER_SDL2 -DTLRENDER_TIFF -DTL_STATIC + DEP_FILE = CMakeFiles/kassetmanagerqt.dir/src/file_ops.cpp.o.d + FLAGS = -O3 -DNDEBUG -std=gnu++20 + INCLUDES = -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/kassetmanagerqt_autogen/include -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include -isystem /usr/include/qt6/QtCore -isystem /usr/include/qt6 -isystem /usr/lib64/qt6/mkspecs/linux-g++ -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/Imath -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/SDL2 -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/minizip-ng -isystem /usr/include/qt6/QtGui -isystem /usr/include/qt6/QtOpenGL -isystem /usr/include/qt6/QtWidgets -isystem /usr/include/qt6/QtOpenGLWidgets -isystem /usr/include/qt6/QtSvg -isystem /usr/include/qt6/QtMultimedia -isystem /usr/include/qt6/QtNetwork -isystem /usr/include/qt6/QtMultimediaWidgets -isystem /usr/include/qt6/QtSql -isystem /usr/include/qt6/QtConcurrent -isystem /usr/include/qt6/QtSvgWidgets -isystem /usr/include/qt6/QtPdf -isystem /usr/include/qt6/QtPdfWidgets + OBJECT_DIR = CMakeFiles/kassetmanagerqt.dir + OBJECT_FILE_DIR = CMakeFiles/kassetmanagerqt.dir/src + +build CMakeFiles/kassetmanagerqt.dir/src/file_ops_dialog.cpp.o: CXX_COMPILER__kassetmanagerqt_unscanned_Release /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/file_ops_dialog.cpp || cmake_object_order_depends_target_kassetmanagerqt + DEFINES = -DFTK_API_GL_4_1 -DFTK_STATIC -DHAVE_FFMPEG -DHAVE_MINIZIP_NG -DHAVE_OCIO=1 -DHAVE_OPENIMAGEIO=1 -DHAVE_QT_PDF -DHAVE_QT_PDF_WIDGETS -DHAVE_TLRENDER=1 -DKAM_APP_VERSION=\"1.8.5\" -DOPENTIME_STATIC -DOTIO_STATIC -DOpenColorIO_SKIP_IMPORTS -DQT_CONCURRENT_LIB -DQT_CORE_LIB -DQT_GUI_LIB -DQT_MULTIMEDIAWIDGETS_LIB -DQT_MULTIMEDIA_LIB -DQT_NETWORK_LIB -DQT_NO_DEBUG -DQT_NO_DEBUG_OUTPUT -DQT_NO_INFO_OUTPUT -DQT_OPENGLWIDGETS_LIB -DQT_OPENGL_LIB -DQT_PDFWIDGETS_LIB -DQT_PDF_LIB -DQT_SQL_LIB -DQT_SVGWIDGETS_LIB -DQT_SVG_LIB -DQT_WIDGETS_LIB -DTLRENDER_EXR -DTLRENDER_FFMPEG -DTLRENDER_FFMPEG_PLUGIN -DTLRENDER_JPEG -DTLRENDER_OCIO -DTLRENDER_OIIO -DTLRENDER_PNG -DTLRENDER_SDL2 -DTLRENDER_TIFF -DTL_STATIC + DEP_FILE = CMakeFiles/kassetmanagerqt.dir/src/file_ops_dialog.cpp.o.d + FLAGS = -O3 -DNDEBUG -std=gnu++20 + INCLUDES = -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/kassetmanagerqt_autogen/include -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include -isystem /usr/include/qt6/QtCore -isystem /usr/include/qt6 -isystem /usr/lib64/qt6/mkspecs/linux-g++ -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/Imath -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/SDL2 -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/minizip-ng -isystem /usr/include/qt6/QtGui -isystem /usr/include/qt6/QtOpenGL -isystem /usr/include/qt6/QtWidgets -isystem /usr/include/qt6/QtOpenGLWidgets -isystem /usr/include/qt6/QtSvg -isystem /usr/include/qt6/QtMultimedia -isystem /usr/include/qt6/QtNetwork -isystem /usr/include/qt6/QtMultimediaWidgets -isystem /usr/include/qt6/QtSql -isystem /usr/include/qt6/QtConcurrent -isystem /usr/include/qt6/QtSvgWidgets -isystem /usr/include/qt6/QtPdf -isystem /usr/include/qt6/QtPdfWidgets + OBJECT_DIR = CMakeFiles/kassetmanagerqt.dir + OBJECT_FILE_DIR = CMakeFiles/kassetmanagerqt.dir/src + +build CMakeFiles/kassetmanagerqt.dir/src/office_preview.cpp.o: CXX_COMPILER__kassetmanagerqt_unscanned_Release /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/office_preview.cpp || cmake_object_order_depends_target_kassetmanagerqt + DEFINES = -DFTK_API_GL_4_1 -DFTK_STATIC -DHAVE_FFMPEG -DHAVE_MINIZIP_NG -DHAVE_OCIO=1 -DHAVE_OPENIMAGEIO=1 -DHAVE_QT_PDF -DHAVE_QT_PDF_WIDGETS -DHAVE_TLRENDER=1 -DKAM_APP_VERSION=\"1.8.5\" -DOPENTIME_STATIC -DOTIO_STATIC -DOpenColorIO_SKIP_IMPORTS -DQT_CONCURRENT_LIB -DQT_CORE_LIB -DQT_GUI_LIB -DQT_MULTIMEDIAWIDGETS_LIB -DQT_MULTIMEDIA_LIB -DQT_NETWORK_LIB -DQT_NO_DEBUG -DQT_NO_DEBUG_OUTPUT -DQT_NO_INFO_OUTPUT -DQT_OPENGLWIDGETS_LIB -DQT_OPENGL_LIB -DQT_PDFWIDGETS_LIB -DQT_PDF_LIB -DQT_SQL_LIB -DQT_SVGWIDGETS_LIB -DQT_SVG_LIB -DQT_WIDGETS_LIB -DTLRENDER_EXR -DTLRENDER_FFMPEG -DTLRENDER_FFMPEG_PLUGIN -DTLRENDER_JPEG -DTLRENDER_OCIO -DTLRENDER_OIIO -DTLRENDER_PNG -DTLRENDER_SDL2 -DTLRENDER_TIFF -DTL_STATIC + DEP_FILE = CMakeFiles/kassetmanagerqt.dir/src/office_preview.cpp.o.d + FLAGS = -O3 -DNDEBUG -std=gnu++20 + INCLUDES = -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/kassetmanagerqt_autogen/include -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include -isystem /usr/include/qt6/QtCore -isystem /usr/include/qt6 -isystem /usr/lib64/qt6/mkspecs/linux-g++ -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/Imath -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/SDL2 -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/minizip-ng -isystem /usr/include/qt6/QtGui -isystem /usr/include/qt6/QtOpenGL -isystem /usr/include/qt6/QtWidgets -isystem /usr/include/qt6/QtOpenGLWidgets -isystem /usr/include/qt6/QtSvg -isystem /usr/include/qt6/QtMultimedia -isystem /usr/include/qt6/QtNetwork -isystem /usr/include/qt6/QtMultimediaWidgets -isystem /usr/include/qt6/QtSql -isystem /usr/include/qt6/QtConcurrent -isystem /usr/include/qt6/QtSvgWidgets -isystem /usr/include/qt6/QtPdf -isystem /usr/include/qt6/QtPdfWidgets + OBJECT_DIR = CMakeFiles/kassetmanagerqt.dir + OBJECT_FILE_DIR = CMakeFiles/kassetmanagerqt.dir/src + +build CMakeFiles/kassetmanagerqt.dir/src/context_preserver.cpp.o: CXX_COMPILER__kassetmanagerqt_unscanned_Release /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/context_preserver.cpp || cmake_object_order_depends_target_kassetmanagerqt + DEFINES = -DFTK_API_GL_4_1 -DFTK_STATIC -DHAVE_FFMPEG -DHAVE_MINIZIP_NG -DHAVE_OCIO=1 -DHAVE_OPENIMAGEIO=1 -DHAVE_QT_PDF -DHAVE_QT_PDF_WIDGETS -DHAVE_TLRENDER=1 -DKAM_APP_VERSION=\"1.8.5\" -DOPENTIME_STATIC -DOTIO_STATIC -DOpenColorIO_SKIP_IMPORTS -DQT_CONCURRENT_LIB -DQT_CORE_LIB -DQT_GUI_LIB -DQT_MULTIMEDIAWIDGETS_LIB -DQT_MULTIMEDIA_LIB -DQT_NETWORK_LIB -DQT_NO_DEBUG -DQT_NO_DEBUG_OUTPUT -DQT_NO_INFO_OUTPUT -DQT_OPENGLWIDGETS_LIB -DQT_OPENGL_LIB -DQT_PDFWIDGETS_LIB -DQT_PDF_LIB -DQT_SQL_LIB -DQT_SVGWIDGETS_LIB -DQT_SVG_LIB -DQT_WIDGETS_LIB -DTLRENDER_EXR -DTLRENDER_FFMPEG -DTLRENDER_FFMPEG_PLUGIN -DTLRENDER_JPEG -DTLRENDER_OCIO -DTLRENDER_OIIO -DTLRENDER_PNG -DTLRENDER_SDL2 -DTLRENDER_TIFF -DTL_STATIC + DEP_FILE = CMakeFiles/kassetmanagerqt.dir/src/context_preserver.cpp.o.d + FLAGS = -O3 -DNDEBUG -std=gnu++20 + INCLUDES = -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/kassetmanagerqt_autogen/include -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include -isystem /usr/include/qt6/QtCore -isystem /usr/include/qt6 -isystem /usr/lib64/qt6/mkspecs/linux-g++ -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/Imath -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/SDL2 -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/minizip-ng -isystem /usr/include/qt6/QtGui -isystem /usr/include/qt6/QtOpenGL -isystem /usr/include/qt6/QtWidgets -isystem /usr/include/qt6/QtOpenGLWidgets -isystem /usr/include/qt6/QtSvg -isystem /usr/include/qt6/QtMultimedia -isystem /usr/include/qt6/QtNetwork -isystem /usr/include/qt6/QtMultimediaWidgets -isystem /usr/include/qt6/QtSql -isystem /usr/include/qt6/QtConcurrent -isystem /usr/include/qt6/QtSvgWidgets -isystem /usr/include/qt6/QtPdf -isystem /usr/include/qt6/QtPdfWidgets + OBJECT_DIR = CMakeFiles/kassetmanagerqt.dir + OBJECT_FILE_DIR = CMakeFiles/kassetmanagerqt.dir/src + +build CMakeFiles/kassetmanagerqt.dir/src/database_health_agent.cpp.o: CXX_COMPILER__kassetmanagerqt_unscanned_Release /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/database_health_agent.cpp || cmake_object_order_depends_target_kassetmanagerqt + DEFINES = -DFTK_API_GL_4_1 -DFTK_STATIC -DHAVE_FFMPEG -DHAVE_MINIZIP_NG -DHAVE_OCIO=1 -DHAVE_OPENIMAGEIO=1 -DHAVE_QT_PDF -DHAVE_QT_PDF_WIDGETS -DHAVE_TLRENDER=1 -DKAM_APP_VERSION=\"1.8.5\" -DOPENTIME_STATIC -DOTIO_STATIC -DOpenColorIO_SKIP_IMPORTS -DQT_CONCURRENT_LIB -DQT_CORE_LIB -DQT_GUI_LIB -DQT_MULTIMEDIAWIDGETS_LIB -DQT_MULTIMEDIA_LIB -DQT_NETWORK_LIB -DQT_NO_DEBUG -DQT_NO_DEBUG_OUTPUT -DQT_NO_INFO_OUTPUT -DQT_OPENGLWIDGETS_LIB -DQT_OPENGL_LIB -DQT_PDFWIDGETS_LIB -DQT_PDF_LIB -DQT_SQL_LIB -DQT_SVGWIDGETS_LIB -DQT_SVG_LIB -DQT_WIDGETS_LIB -DTLRENDER_EXR -DTLRENDER_FFMPEG -DTLRENDER_FFMPEG_PLUGIN -DTLRENDER_JPEG -DTLRENDER_OCIO -DTLRENDER_OIIO -DTLRENDER_PNG -DTLRENDER_SDL2 -DTLRENDER_TIFF -DTL_STATIC + DEP_FILE = CMakeFiles/kassetmanagerqt.dir/src/database_health_agent.cpp.o.d + FLAGS = -O3 -DNDEBUG -std=gnu++20 + INCLUDES = -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/kassetmanagerqt_autogen/include -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include -isystem /usr/include/qt6/QtCore -isystem /usr/include/qt6 -isystem /usr/lib64/qt6/mkspecs/linux-g++ -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/Imath -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/SDL2 -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/minizip-ng -isystem /usr/include/qt6/QtGui -isystem /usr/include/qt6/QtOpenGL -isystem /usr/include/qt6/QtWidgets -isystem /usr/include/qt6/QtOpenGLWidgets -isystem /usr/include/qt6/QtSvg -isystem /usr/include/qt6/QtMultimedia -isystem /usr/include/qt6/QtNetwork -isystem /usr/include/qt6/QtMultimediaWidgets -isystem /usr/include/qt6/QtSql -isystem /usr/include/qt6/QtConcurrent -isystem /usr/include/qt6/QtSvgWidgets -isystem /usr/include/qt6/QtPdf -isystem /usr/include/qt6/QtPdfWidgets + OBJECT_DIR = CMakeFiles/kassetmanagerqt.dir + OBJECT_FILE_DIR = CMakeFiles/kassetmanagerqt.dir/src + +build CMakeFiles/kassetmanagerqt.dir/src/database_health_dialog.cpp.o: CXX_COMPILER__kassetmanagerqt_unscanned_Release /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/database_health_dialog.cpp || cmake_object_order_depends_target_kassetmanagerqt + DEFINES = -DFTK_API_GL_4_1 -DFTK_STATIC -DHAVE_FFMPEG -DHAVE_MINIZIP_NG -DHAVE_OCIO=1 -DHAVE_OPENIMAGEIO=1 -DHAVE_QT_PDF -DHAVE_QT_PDF_WIDGETS -DHAVE_TLRENDER=1 -DKAM_APP_VERSION=\"1.8.5\" -DOPENTIME_STATIC -DOTIO_STATIC -DOpenColorIO_SKIP_IMPORTS -DQT_CONCURRENT_LIB -DQT_CORE_LIB -DQT_GUI_LIB -DQT_MULTIMEDIAWIDGETS_LIB -DQT_MULTIMEDIA_LIB -DQT_NETWORK_LIB -DQT_NO_DEBUG -DQT_NO_DEBUG_OUTPUT -DQT_NO_INFO_OUTPUT -DQT_OPENGLWIDGETS_LIB -DQT_OPENGL_LIB -DQT_PDFWIDGETS_LIB -DQT_PDF_LIB -DQT_SQL_LIB -DQT_SVGWIDGETS_LIB -DQT_SVG_LIB -DQT_WIDGETS_LIB -DTLRENDER_EXR -DTLRENDER_FFMPEG -DTLRENDER_FFMPEG_PLUGIN -DTLRENDER_JPEG -DTLRENDER_OCIO -DTLRENDER_OIIO -DTLRENDER_PNG -DTLRENDER_SDL2 -DTLRENDER_TIFF -DTL_STATIC + DEP_FILE = CMakeFiles/kassetmanagerqt.dir/src/database_health_dialog.cpp.o.d + FLAGS = -O3 -DNDEBUG -std=gnu++20 + INCLUDES = -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/kassetmanagerqt_autogen/include -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include -isystem /usr/include/qt6/QtCore -isystem /usr/include/qt6 -isystem /usr/lib64/qt6/mkspecs/linux-g++ -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/Imath -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/SDL2 -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/minizip-ng -isystem /usr/include/qt6/QtGui -isystem /usr/include/qt6/QtOpenGL -isystem /usr/include/qt6/QtWidgets -isystem /usr/include/qt6/QtOpenGLWidgets -isystem /usr/include/qt6/QtSvg -isystem /usr/include/qt6/QtMultimedia -isystem /usr/include/qt6/QtNetwork -isystem /usr/include/qt6/QtMultimediaWidgets -isystem /usr/include/qt6/QtSql -isystem /usr/include/qt6/QtConcurrent -isystem /usr/include/qt6/QtSvgWidgets -isystem /usr/include/qt6/QtPdf -isystem /usr/include/qt6/QtPdfWidgets + OBJECT_DIR = CMakeFiles/kassetmanagerqt.dir + OBJECT_FILE_DIR = CMakeFiles/kassetmanagerqt.dir/src + +build CMakeFiles/kassetmanagerqt.dir/src/bulk_rename_dialog.cpp.o: CXX_COMPILER__kassetmanagerqt_unscanned_Release /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/bulk_rename_dialog.cpp || cmake_object_order_depends_target_kassetmanagerqt + DEFINES = -DFTK_API_GL_4_1 -DFTK_STATIC -DHAVE_FFMPEG -DHAVE_MINIZIP_NG -DHAVE_OCIO=1 -DHAVE_OPENIMAGEIO=1 -DHAVE_QT_PDF -DHAVE_QT_PDF_WIDGETS -DHAVE_TLRENDER=1 -DKAM_APP_VERSION=\"1.8.5\" -DOPENTIME_STATIC -DOTIO_STATIC -DOpenColorIO_SKIP_IMPORTS -DQT_CONCURRENT_LIB -DQT_CORE_LIB -DQT_GUI_LIB -DQT_MULTIMEDIAWIDGETS_LIB -DQT_MULTIMEDIA_LIB -DQT_NETWORK_LIB -DQT_NO_DEBUG -DQT_NO_DEBUG_OUTPUT -DQT_NO_INFO_OUTPUT -DQT_OPENGLWIDGETS_LIB -DQT_OPENGL_LIB -DQT_PDFWIDGETS_LIB -DQT_PDF_LIB -DQT_SQL_LIB -DQT_SVGWIDGETS_LIB -DQT_SVG_LIB -DQT_WIDGETS_LIB -DTLRENDER_EXR -DTLRENDER_FFMPEG -DTLRENDER_FFMPEG_PLUGIN -DTLRENDER_JPEG -DTLRENDER_OCIO -DTLRENDER_OIIO -DTLRENDER_PNG -DTLRENDER_SDL2 -DTLRENDER_TIFF -DTL_STATIC + DEP_FILE = CMakeFiles/kassetmanagerqt.dir/src/bulk_rename_dialog.cpp.o.d + FLAGS = -O3 -DNDEBUG -std=gnu++20 + INCLUDES = -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/kassetmanagerqt_autogen/include -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include -isystem /usr/include/qt6/QtCore -isystem /usr/include/qt6 -isystem /usr/lib64/qt6/mkspecs/linux-g++ -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/Imath -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/SDL2 -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/minizip-ng -isystem /usr/include/qt6/QtGui -isystem /usr/include/qt6/QtOpenGL -isystem /usr/include/qt6/QtWidgets -isystem /usr/include/qt6/QtOpenGLWidgets -isystem /usr/include/qt6/QtSvg -isystem /usr/include/qt6/QtMultimedia -isystem /usr/include/qt6/QtNetwork -isystem /usr/include/qt6/QtMultimediaWidgets -isystem /usr/include/qt6/QtSql -isystem /usr/include/qt6/QtConcurrent -isystem /usr/include/qt6/QtSvgWidgets -isystem /usr/include/qt6/QtPdf -isystem /usr/include/qt6/QtPdfWidgets + OBJECT_DIR = CMakeFiles/kassetmanagerqt.dir + OBJECT_FILE_DIR = CMakeFiles/kassetmanagerqt.dir/src + +build CMakeFiles/kassetmanagerqt.dir/src/everything_search.cpp.o: CXX_COMPILER__kassetmanagerqt_unscanned_Release /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/everything_search.cpp || cmake_object_order_depends_target_kassetmanagerqt + DEFINES = -DFTK_API_GL_4_1 -DFTK_STATIC -DHAVE_FFMPEG -DHAVE_MINIZIP_NG -DHAVE_OCIO=1 -DHAVE_OPENIMAGEIO=1 -DHAVE_QT_PDF -DHAVE_QT_PDF_WIDGETS -DHAVE_TLRENDER=1 -DKAM_APP_VERSION=\"1.8.5\" -DOPENTIME_STATIC -DOTIO_STATIC -DOpenColorIO_SKIP_IMPORTS -DQT_CONCURRENT_LIB -DQT_CORE_LIB -DQT_GUI_LIB -DQT_MULTIMEDIAWIDGETS_LIB -DQT_MULTIMEDIA_LIB -DQT_NETWORK_LIB -DQT_NO_DEBUG -DQT_NO_DEBUG_OUTPUT -DQT_NO_INFO_OUTPUT -DQT_OPENGLWIDGETS_LIB -DQT_OPENGL_LIB -DQT_PDFWIDGETS_LIB -DQT_PDF_LIB -DQT_SQL_LIB -DQT_SVGWIDGETS_LIB -DQT_SVG_LIB -DQT_WIDGETS_LIB -DTLRENDER_EXR -DTLRENDER_FFMPEG -DTLRENDER_FFMPEG_PLUGIN -DTLRENDER_JPEG -DTLRENDER_OCIO -DTLRENDER_OIIO -DTLRENDER_PNG -DTLRENDER_SDL2 -DTLRENDER_TIFF -DTL_STATIC + DEP_FILE = CMakeFiles/kassetmanagerqt.dir/src/everything_search.cpp.o.d + FLAGS = -O3 -DNDEBUG -std=gnu++20 + INCLUDES = -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/kassetmanagerqt_autogen/include -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include -isystem /usr/include/qt6/QtCore -isystem /usr/include/qt6 -isystem /usr/lib64/qt6/mkspecs/linux-g++ -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/Imath -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/SDL2 -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/minizip-ng -isystem /usr/include/qt6/QtGui -isystem /usr/include/qt6/QtOpenGL -isystem /usr/include/qt6/QtWidgets -isystem /usr/include/qt6/QtOpenGLWidgets -isystem /usr/include/qt6/QtSvg -isystem /usr/include/qt6/QtMultimedia -isystem /usr/include/qt6/QtNetwork -isystem /usr/include/qt6/QtMultimediaWidgets -isystem /usr/include/qt6/QtSql -isystem /usr/include/qt6/QtConcurrent -isystem /usr/include/qt6/QtSvgWidgets -isystem /usr/include/qt6/QtPdf -isystem /usr/include/qt6/QtPdfWidgets + OBJECT_DIR = CMakeFiles/kassetmanagerqt.dir + OBJECT_FILE_DIR = CMakeFiles/kassetmanagerqt.dir/src + +build CMakeFiles/kassetmanagerqt.dir/src/everything_folder_model.cpp.o: CXX_COMPILER__kassetmanagerqt_unscanned_Release /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/everything_folder_model.cpp || cmake_object_order_depends_target_kassetmanagerqt + DEFINES = -DFTK_API_GL_4_1 -DFTK_STATIC -DHAVE_FFMPEG -DHAVE_MINIZIP_NG -DHAVE_OCIO=1 -DHAVE_OPENIMAGEIO=1 -DHAVE_QT_PDF -DHAVE_QT_PDF_WIDGETS -DHAVE_TLRENDER=1 -DKAM_APP_VERSION=\"1.8.5\" -DOPENTIME_STATIC -DOTIO_STATIC -DOpenColorIO_SKIP_IMPORTS -DQT_CONCURRENT_LIB -DQT_CORE_LIB -DQT_GUI_LIB -DQT_MULTIMEDIAWIDGETS_LIB -DQT_MULTIMEDIA_LIB -DQT_NETWORK_LIB -DQT_NO_DEBUG -DQT_NO_DEBUG_OUTPUT -DQT_NO_INFO_OUTPUT -DQT_OPENGLWIDGETS_LIB -DQT_OPENGL_LIB -DQT_PDFWIDGETS_LIB -DQT_PDF_LIB -DQT_SQL_LIB -DQT_SVGWIDGETS_LIB -DQT_SVG_LIB -DQT_WIDGETS_LIB -DTLRENDER_EXR -DTLRENDER_FFMPEG -DTLRENDER_FFMPEG_PLUGIN -DTLRENDER_JPEG -DTLRENDER_OCIO -DTLRENDER_OIIO -DTLRENDER_PNG -DTLRENDER_SDL2 -DTLRENDER_TIFF -DTL_STATIC + DEP_FILE = CMakeFiles/kassetmanagerqt.dir/src/everything_folder_model.cpp.o.d + FLAGS = -O3 -DNDEBUG -std=gnu++20 + INCLUDES = -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/kassetmanagerqt_autogen/include -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include -isystem /usr/include/qt6/QtCore -isystem /usr/include/qt6 -isystem /usr/lib64/qt6/mkspecs/linux-g++ -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/Imath -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/SDL2 -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/minizip-ng -isystem /usr/include/qt6/QtGui -isystem /usr/include/qt6/QtOpenGL -isystem /usr/include/qt6/QtWidgets -isystem /usr/include/qt6/QtOpenGLWidgets -isystem /usr/include/qt6/QtSvg -isystem /usr/include/qt6/QtMultimedia -isystem /usr/include/qt6/QtNetwork -isystem /usr/include/qt6/QtMultimediaWidgets -isystem /usr/include/qt6/QtSql -isystem /usr/include/qt6/QtConcurrent -isystem /usr/include/qt6/QtSvgWidgets -isystem /usr/include/qt6/QtPdf -isystem /usr/include/qt6/QtPdfWidgets + OBJECT_DIR = CMakeFiles/kassetmanagerqt.dir + OBJECT_FILE_DIR = CMakeFiles/kassetmanagerqt.dir/src + +build CMakeFiles/kassetmanagerqt.dir/src/utils.cpp.o: CXX_COMPILER__kassetmanagerqt_unscanned_Release /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/utils.cpp || cmake_object_order_depends_target_kassetmanagerqt + DEFINES = -DFTK_API_GL_4_1 -DFTK_STATIC -DHAVE_FFMPEG -DHAVE_MINIZIP_NG -DHAVE_OCIO=1 -DHAVE_OPENIMAGEIO=1 -DHAVE_QT_PDF -DHAVE_QT_PDF_WIDGETS -DHAVE_TLRENDER=1 -DKAM_APP_VERSION=\"1.8.5\" -DOPENTIME_STATIC -DOTIO_STATIC -DOpenColorIO_SKIP_IMPORTS -DQT_CONCURRENT_LIB -DQT_CORE_LIB -DQT_GUI_LIB -DQT_MULTIMEDIAWIDGETS_LIB -DQT_MULTIMEDIA_LIB -DQT_NETWORK_LIB -DQT_NO_DEBUG -DQT_NO_DEBUG_OUTPUT -DQT_NO_INFO_OUTPUT -DQT_OPENGLWIDGETS_LIB -DQT_OPENGL_LIB -DQT_PDFWIDGETS_LIB -DQT_PDF_LIB -DQT_SQL_LIB -DQT_SVGWIDGETS_LIB -DQT_SVG_LIB -DQT_WIDGETS_LIB -DTLRENDER_EXR -DTLRENDER_FFMPEG -DTLRENDER_FFMPEG_PLUGIN -DTLRENDER_JPEG -DTLRENDER_OCIO -DTLRENDER_OIIO -DTLRENDER_PNG -DTLRENDER_SDL2 -DTLRENDER_TIFF -DTL_STATIC + DEP_FILE = CMakeFiles/kassetmanagerqt.dir/src/utils.cpp.o.d + FLAGS = -O3 -DNDEBUG -std=gnu++20 + INCLUDES = -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/kassetmanagerqt_autogen/include -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include -isystem /usr/include/qt6/QtCore -isystem /usr/include/qt6 -isystem /usr/lib64/qt6/mkspecs/linux-g++ -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/Imath -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/SDL2 -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/minizip-ng -isystem /usr/include/qt6/QtGui -isystem /usr/include/qt6/QtOpenGL -isystem /usr/include/qt6/QtWidgets -isystem /usr/include/qt6/QtOpenGLWidgets -isystem /usr/include/qt6/QtSvg -isystem /usr/include/qt6/QtMultimedia -isystem /usr/include/qt6/QtNetwork -isystem /usr/include/qt6/QtMultimediaWidgets -isystem /usr/include/qt6/QtSql -isystem /usr/include/qt6/QtConcurrent -isystem /usr/include/qt6/QtSvgWidgets -isystem /usr/include/qt6/QtPdf -isystem /usr/include/qt6/QtPdfWidgets + OBJECT_DIR = CMakeFiles/kassetmanagerqt.dir + OBJECT_FILE_DIR = CMakeFiles/kassetmanagerqt.dir/src + +build CMakeFiles/kassetmanagerqt.dir/src/everything_search_dialog.cpp.o: CXX_COMPILER__kassetmanagerqt_unscanned_Release /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/everything_search_dialog.cpp || cmake_object_order_depends_target_kassetmanagerqt + DEFINES = -DFTK_API_GL_4_1 -DFTK_STATIC -DHAVE_FFMPEG -DHAVE_MINIZIP_NG -DHAVE_OCIO=1 -DHAVE_OPENIMAGEIO=1 -DHAVE_QT_PDF -DHAVE_QT_PDF_WIDGETS -DHAVE_TLRENDER=1 -DKAM_APP_VERSION=\"1.8.5\" -DOPENTIME_STATIC -DOTIO_STATIC -DOpenColorIO_SKIP_IMPORTS -DQT_CONCURRENT_LIB -DQT_CORE_LIB -DQT_GUI_LIB -DQT_MULTIMEDIAWIDGETS_LIB -DQT_MULTIMEDIA_LIB -DQT_NETWORK_LIB -DQT_NO_DEBUG -DQT_NO_DEBUG_OUTPUT -DQT_NO_INFO_OUTPUT -DQT_OPENGLWIDGETS_LIB -DQT_OPENGL_LIB -DQT_PDFWIDGETS_LIB -DQT_PDF_LIB -DQT_SQL_LIB -DQT_SVGWIDGETS_LIB -DQT_SVG_LIB -DQT_WIDGETS_LIB -DTLRENDER_EXR -DTLRENDER_FFMPEG -DTLRENDER_FFMPEG_PLUGIN -DTLRENDER_JPEG -DTLRENDER_OCIO -DTLRENDER_OIIO -DTLRENDER_PNG -DTLRENDER_SDL2 -DTLRENDER_TIFF -DTL_STATIC + DEP_FILE = CMakeFiles/kassetmanagerqt.dir/src/everything_search_dialog.cpp.o.d + FLAGS = -O3 -DNDEBUG -std=gnu++20 + INCLUDES = -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/kassetmanagerqt_autogen/include -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include -isystem /usr/include/qt6/QtCore -isystem /usr/include/qt6 -isystem /usr/lib64/qt6/mkspecs/linux-g++ -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/Imath -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/SDL2 -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/minizip-ng -isystem /usr/include/qt6/QtGui -isystem /usr/include/qt6/QtOpenGL -isystem /usr/include/qt6/QtWidgets -isystem /usr/include/qt6/QtOpenGLWidgets -isystem /usr/include/qt6/QtSvg -isystem /usr/include/qt6/QtMultimedia -isystem /usr/include/qt6/QtNetwork -isystem /usr/include/qt6/QtMultimediaWidgets -isystem /usr/include/qt6/QtSql -isystem /usr/include/qt6/QtConcurrent -isystem /usr/include/qt6/QtSvgWidgets -isystem /usr/include/qt6/QtPdf -isystem /usr/include/qt6/QtPdfWidgets + OBJECT_DIR = CMakeFiles/kassetmanagerqt.dir + OBJECT_FILE_DIR = CMakeFiles/kassetmanagerqt.dir/src + +build CMakeFiles/kassetmanagerqt.dir/src/media_convert_dialog.cpp.o: CXX_COMPILER__kassetmanagerqt_unscanned_Release /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/media_convert_dialog.cpp || cmake_object_order_depends_target_kassetmanagerqt + DEFINES = -DFTK_API_GL_4_1 -DFTK_STATIC -DHAVE_FFMPEG -DHAVE_MINIZIP_NG -DHAVE_OCIO=1 -DHAVE_OPENIMAGEIO=1 -DHAVE_QT_PDF -DHAVE_QT_PDF_WIDGETS -DHAVE_TLRENDER=1 -DKAM_APP_VERSION=\"1.8.5\" -DOPENTIME_STATIC -DOTIO_STATIC -DOpenColorIO_SKIP_IMPORTS -DQT_CONCURRENT_LIB -DQT_CORE_LIB -DQT_GUI_LIB -DQT_MULTIMEDIAWIDGETS_LIB -DQT_MULTIMEDIA_LIB -DQT_NETWORK_LIB -DQT_NO_DEBUG -DQT_NO_DEBUG_OUTPUT -DQT_NO_INFO_OUTPUT -DQT_OPENGLWIDGETS_LIB -DQT_OPENGL_LIB -DQT_PDFWIDGETS_LIB -DQT_PDF_LIB -DQT_SQL_LIB -DQT_SVGWIDGETS_LIB -DQT_SVG_LIB -DQT_WIDGETS_LIB -DTLRENDER_EXR -DTLRENDER_FFMPEG -DTLRENDER_FFMPEG_PLUGIN -DTLRENDER_JPEG -DTLRENDER_OCIO -DTLRENDER_OIIO -DTLRENDER_PNG -DTLRENDER_SDL2 -DTLRENDER_TIFF -DTL_STATIC + DEP_FILE = CMakeFiles/kassetmanagerqt.dir/src/media_convert_dialog.cpp.o.d + FLAGS = -O3 -DNDEBUG -std=gnu++20 + INCLUDES = -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/kassetmanagerqt_autogen/include -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include -isystem /usr/include/qt6/QtCore -isystem /usr/include/qt6 -isystem /usr/lib64/qt6/mkspecs/linux-g++ -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/Imath -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/SDL2 -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/minizip-ng -isystem /usr/include/qt6/QtGui -isystem /usr/include/qt6/QtOpenGL -isystem /usr/include/qt6/QtWidgets -isystem /usr/include/qt6/QtOpenGLWidgets -isystem /usr/include/qt6/QtSvg -isystem /usr/include/qt6/QtMultimedia -isystem /usr/include/qt6/QtNetwork -isystem /usr/include/qt6/QtMultimediaWidgets -isystem /usr/include/qt6/QtSql -isystem /usr/include/qt6/QtConcurrent -isystem /usr/include/qt6/QtSvgWidgets -isystem /usr/include/qt6/QtPdf -isystem /usr/include/qt6/QtPdfWidgets + OBJECT_DIR = CMakeFiles/kassetmanagerqt.dir + OBJECT_FILE_DIR = CMakeFiles/kassetmanagerqt.dir/src + +build CMakeFiles/kassetmanagerqt.dir/src/media_converter_worker.cpp.o: CXX_COMPILER__kassetmanagerqt_unscanned_Release /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/media_converter_worker.cpp || cmake_object_order_depends_target_kassetmanagerqt + DEFINES = -DFTK_API_GL_4_1 -DFTK_STATIC -DHAVE_FFMPEG -DHAVE_MINIZIP_NG -DHAVE_OCIO=1 -DHAVE_OPENIMAGEIO=1 -DHAVE_QT_PDF -DHAVE_QT_PDF_WIDGETS -DHAVE_TLRENDER=1 -DKAM_APP_VERSION=\"1.8.5\" -DOPENTIME_STATIC -DOTIO_STATIC -DOpenColorIO_SKIP_IMPORTS -DQT_CONCURRENT_LIB -DQT_CORE_LIB -DQT_GUI_LIB -DQT_MULTIMEDIAWIDGETS_LIB -DQT_MULTIMEDIA_LIB -DQT_NETWORK_LIB -DQT_NO_DEBUG -DQT_NO_DEBUG_OUTPUT -DQT_NO_INFO_OUTPUT -DQT_OPENGLWIDGETS_LIB -DQT_OPENGL_LIB -DQT_PDFWIDGETS_LIB -DQT_PDF_LIB -DQT_SQL_LIB -DQT_SVGWIDGETS_LIB -DQT_SVG_LIB -DQT_WIDGETS_LIB -DTLRENDER_EXR -DTLRENDER_FFMPEG -DTLRENDER_FFMPEG_PLUGIN -DTLRENDER_JPEG -DTLRENDER_OCIO -DTLRENDER_OIIO -DTLRENDER_PNG -DTLRENDER_SDL2 -DTLRENDER_TIFF -DTL_STATIC + DEP_FILE = CMakeFiles/kassetmanagerqt.dir/src/media_converter_worker.cpp.o.d + FLAGS = -O3 -DNDEBUG -std=gnu++20 + INCLUDES = -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/kassetmanagerqt_autogen/include -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include -isystem /usr/include/qt6/QtCore -isystem /usr/include/qt6 -isystem /usr/lib64/qt6/mkspecs/linux-g++ -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/Imath -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/SDL2 -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/minizip-ng -isystem /usr/include/qt6/QtGui -isystem /usr/include/qt6/QtOpenGL -isystem /usr/include/qt6/QtWidgets -isystem /usr/include/qt6/QtOpenGLWidgets -isystem /usr/include/qt6/QtSvg -isystem /usr/include/qt6/QtMultimedia -isystem /usr/include/qt6/QtNetwork -isystem /usr/include/qt6/QtMultimediaWidgets -isystem /usr/include/qt6/QtSql -isystem /usr/include/qt6/QtConcurrent -isystem /usr/include/qt6/QtSvgWidgets -isystem /usr/include/qt6/QtPdf -isystem /usr/include/qt6/QtPdfWidgets + OBJECT_DIR = CMakeFiles/kassetmanagerqt.dir + OBJECT_FILE_DIR = CMakeFiles/kassetmanagerqt.dir/src + +build CMakeFiles/kassetmanagerqt.dir/src/thumbnail_cache_manager.cpp.o: CXX_COMPILER__kassetmanagerqt_unscanned_Release /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/thumbnail_cache_manager.cpp || cmake_object_order_depends_target_kassetmanagerqt + DEFINES = -DFTK_API_GL_4_1 -DFTK_STATIC -DHAVE_FFMPEG -DHAVE_MINIZIP_NG -DHAVE_OCIO=1 -DHAVE_OPENIMAGEIO=1 -DHAVE_QT_PDF -DHAVE_QT_PDF_WIDGETS -DHAVE_TLRENDER=1 -DKAM_APP_VERSION=\"1.8.5\" -DOPENTIME_STATIC -DOTIO_STATIC -DOpenColorIO_SKIP_IMPORTS -DQT_CONCURRENT_LIB -DQT_CORE_LIB -DQT_GUI_LIB -DQT_MULTIMEDIAWIDGETS_LIB -DQT_MULTIMEDIA_LIB -DQT_NETWORK_LIB -DQT_NO_DEBUG -DQT_NO_DEBUG_OUTPUT -DQT_NO_INFO_OUTPUT -DQT_OPENGLWIDGETS_LIB -DQT_OPENGL_LIB -DQT_PDFWIDGETS_LIB -DQT_PDF_LIB -DQT_SQL_LIB -DQT_SVGWIDGETS_LIB -DQT_SVG_LIB -DQT_WIDGETS_LIB -DTLRENDER_EXR -DTLRENDER_FFMPEG -DTLRENDER_FFMPEG_PLUGIN -DTLRENDER_JPEG -DTLRENDER_OCIO -DTLRENDER_OIIO -DTLRENDER_PNG -DTLRENDER_SDL2 -DTLRENDER_TIFF -DTL_STATIC + DEP_FILE = CMakeFiles/kassetmanagerqt.dir/src/thumbnail_cache_manager.cpp.o.d + FLAGS = -O3 -DNDEBUG -std=gnu++20 + INCLUDES = -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/kassetmanagerqt_autogen/include -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include -isystem /usr/include/qt6/QtCore -isystem /usr/include/qt6 -isystem /usr/lib64/qt6/mkspecs/linux-g++ -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/Imath -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/SDL2 -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/minizip-ng -isystem /usr/include/qt6/QtGui -isystem /usr/include/qt6/QtOpenGL -isystem /usr/include/qt6/QtWidgets -isystem /usr/include/qt6/QtOpenGLWidgets -isystem /usr/include/qt6/QtSvg -isystem /usr/include/qt6/QtMultimedia -isystem /usr/include/qt6/QtNetwork -isystem /usr/include/qt6/QtMultimediaWidgets -isystem /usr/include/qt6/QtSql -isystem /usr/include/qt6/QtConcurrent -isystem /usr/include/qt6/QtSvgWidgets -isystem /usr/include/qt6/QtPdf -isystem /usr/include/qt6/QtPdfWidgets + OBJECT_DIR = CMakeFiles/kassetmanagerqt.dir + OBJECT_FILE_DIR = CMakeFiles/kassetmanagerqt.dir/src + +build CMakeFiles/kassetmanagerqt.dir/src/thumbnail_generator_dialog.cpp.o: CXX_COMPILER__kassetmanagerqt_unscanned_Release /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/thumbnail_generator_dialog.cpp || cmake_object_order_depends_target_kassetmanagerqt + DEFINES = -DFTK_API_GL_4_1 -DFTK_STATIC -DHAVE_FFMPEG -DHAVE_MINIZIP_NG -DHAVE_OCIO=1 -DHAVE_OPENIMAGEIO=1 -DHAVE_QT_PDF -DHAVE_QT_PDF_WIDGETS -DHAVE_TLRENDER=1 -DKAM_APP_VERSION=\"1.8.5\" -DOPENTIME_STATIC -DOTIO_STATIC -DOpenColorIO_SKIP_IMPORTS -DQT_CONCURRENT_LIB -DQT_CORE_LIB -DQT_GUI_LIB -DQT_MULTIMEDIAWIDGETS_LIB -DQT_MULTIMEDIA_LIB -DQT_NETWORK_LIB -DQT_NO_DEBUG -DQT_NO_DEBUG_OUTPUT -DQT_NO_INFO_OUTPUT -DQT_OPENGLWIDGETS_LIB -DQT_OPENGL_LIB -DQT_PDFWIDGETS_LIB -DQT_PDF_LIB -DQT_SQL_LIB -DQT_SVGWIDGETS_LIB -DQT_SVG_LIB -DQT_WIDGETS_LIB -DTLRENDER_EXR -DTLRENDER_FFMPEG -DTLRENDER_FFMPEG_PLUGIN -DTLRENDER_JPEG -DTLRENDER_OCIO -DTLRENDER_OIIO -DTLRENDER_PNG -DTLRENDER_SDL2 -DTLRENDER_TIFF -DTL_STATIC + DEP_FILE = CMakeFiles/kassetmanagerqt.dir/src/thumbnail_generator_dialog.cpp.o.d + FLAGS = -O3 -DNDEBUG -std=gnu++20 + INCLUDES = -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/kassetmanagerqt_autogen/include -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include -isystem /usr/include/qt6/QtCore -isystem /usr/include/qt6 -isystem /usr/lib64/qt6/mkspecs/linux-g++ -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/Imath -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/SDL2 -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/minizip-ng -isystem /usr/include/qt6/QtGui -isystem /usr/include/qt6/QtOpenGL -isystem /usr/include/qt6/QtWidgets -isystem /usr/include/qt6/QtOpenGLWidgets -isystem /usr/include/qt6/QtSvg -isystem /usr/include/qt6/QtMultimedia -isystem /usr/include/qt6/QtNetwork -isystem /usr/include/qt6/QtMultimediaWidgets -isystem /usr/include/qt6/QtSql -isystem /usr/include/qt6/QtConcurrent -isystem /usr/include/qt6/QtSvgWidgets -isystem /usr/include/qt6/QtPdf -isystem /usr/include/qt6/QtPdfWidgets + OBJECT_DIR = CMakeFiles/kassetmanagerqt.dir + OBJECT_FILE_DIR = CMakeFiles/kassetmanagerqt.dir/src + +build CMakeFiles/kassetmanagerqt.dir/src/thumbnail_generator_worker.cpp.o: CXX_COMPILER__kassetmanagerqt_unscanned_Release /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/thumbnail_generator_worker.cpp || cmake_object_order_depends_target_kassetmanagerqt + DEFINES = -DFTK_API_GL_4_1 -DFTK_STATIC -DHAVE_FFMPEG -DHAVE_MINIZIP_NG -DHAVE_OCIO=1 -DHAVE_OPENIMAGEIO=1 -DHAVE_QT_PDF -DHAVE_QT_PDF_WIDGETS -DHAVE_TLRENDER=1 -DKAM_APP_VERSION=\"1.8.5\" -DOPENTIME_STATIC -DOTIO_STATIC -DOpenColorIO_SKIP_IMPORTS -DQT_CONCURRENT_LIB -DQT_CORE_LIB -DQT_GUI_LIB -DQT_MULTIMEDIAWIDGETS_LIB -DQT_MULTIMEDIA_LIB -DQT_NETWORK_LIB -DQT_NO_DEBUG -DQT_NO_DEBUG_OUTPUT -DQT_NO_INFO_OUTPUT -DQT_OPENGLWIDGETS_LIB -DQT_OPENGL_LIB -DQT_PDFWIDGETS_LIB -DQT_PDF_LIB -DQT_SQL_LIB -DQT_SVGWIDGETS_LIB -DQT_SVG_LIB -DQT_WIDGETS_LIB -DTLRENDER_EXR -DTLRENDER_FFMPEG -DTLRENDER_FFMPEG_PLUGIN -DTLRENDER_JPEG -DTLRENDER_OCIO -DTLRENDER_OIIO -DTLRENDER_PNG -DTLRENDER_SDL2 -DTLRENDER_TIFF -DTL_STATIC + DEP_FILE = CMakeFiles/kassetmanagerqt.dir/src/thumbnail_generator_worker.cpp.o.d + FLAGS = -O3 -DNDEBUG -std=gnu++20 + INCLUDES = -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/kassetmanagerqt_autogen/include -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include -isystem /usr/include/qt6/QtCore -isystem /usr/include/qt6 -isystem /usr/lib64/qt6/mkspecs/linux-g++ -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/Imath -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/SDL2 -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/minizip-ng -isystem /usr/include/qt6/QtGui -isystem /usr/include/qt6/QtOpenGL -isystem /usr/include/qt6/QtWidgets -isystem /usr/include/qt6/QtOpenGLWidgets -isystem /usr/include/qt6/QtSvg -isystem /usr/include/qt6/QtMultimedia -isystem /usr/include/qt6/QtNetwork -isystem /usr/include/qt6/QtMultimediaWidgets -isystem /usr/include/qt6/QtSql -isystem /usr/include/qt6/QtConcurrent -isystem /usr/include/qt6/QtSvgWidgets -isystem /usr/include/qt6/QtPdf -isystem /usr/include/qt6/QtPdfWidgets + OBJECT_DIR = CMakeFiles/kassetmanagerqt.dir + OBJECT_FILE_DIR = CMakeFiles/kassetmanagerqt.dir/src + +build CMakeFiles/kassetmanagerqt.dir/src/media/tlrender_player.cpp.o: CXX_COMPILER__kassetmanagerqt_unscanned_Release /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/media/tlrender_player.cpp || cmake_object_order_depends_target_kassetmanagerqt + DEFINES = -DFTK_API_GL_4_1 -DFTK_STATIC -DHAVE_FFMPEG -DHAVE_MINIZIP_NG -DHAVE_OCIO=1 -DHAVE_OPENIMAGEIO=1 -DHAVE_QT_PDF -DHAVE_QT_PDF_WIDGETS -DHAVE_TLRENDER=1 -DKAM_APP_VERSION=\"1.8.5\" -DOPENTIME_STATIC -DOTIO_STATIC -DOpenColorIO_SKIP_IMPORTS -DQT_CONCURRENT_LIB -DQT_CORE_LIB -DQT_GUI_LIB -DQT_MULTIMEDIAWIDGETS_LIB -DQT_MULTIMEDIA_LIB -DQT_NETWORK_LIB -DQT_NO_DEBUG -DQT_NO_DEBUG_OUTPUT -DQT_NO_INFO_OUTPUT -DQT_OPENGLWIDGETS_LIB -DQT_OPENGL_LIB -DQT_PDFWIDGETS_LIB -DQT_PDF_LIB -DQT_SQL_LIB -DQT_SVGWIDGETS_LIB -DQT_SVG_LIB -DQT_WIDGETS_LIB -DTLRENDER_EXR -DTLRENDER_FFMPEG -DTLRENDER_FFMPEG_PLUGIN -DTLRENDER_JPEG -DTLRENDER_OCIO -DTLRENDER_OIIO -DTLRENDER_PNG -DTLRENDER_SDL2 -DTLRENDER_TIFF -DTL_STATIC + DEP_FILE = CMakeFiles/kassetmanagerqt.dir/src/media/tlrender_player.cpp.o.d + FLAGS = -O3 -DNDEBUG -std=gnu++20 + INCLUDES = -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/kassetmanagerqt_autogen/include -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include -isystem /usr/include/qt6/QtCore -isystem /usr/include/qt6 -isystem /usr/lib64/qt6/mkspecs/linux-g++ -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/Imath -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/SDL2 -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/minizip-ng -isystem /usr/include/qt6/QtGui -isystem /usr/include/qt6/QtOpenGL -isystem /usr/include/qt6/QtWidgets -isystem /usr/include/qt6/QtOpenGLWidgets -isystem /usr/include/qt6/QtSvg -isystem /usr/include/qt6/QtMultimedia -isystem /usr/include/qt6/QtNetwork -isystem /usr/include/qt6/QtMultimediaWidgets -isystem /usr/include/qt6/QtSql -isystem /usr/include/qt6/QtConcurrent -isystem /usr/include/qt6/QtSvgWidgets -isystem /usr/include/qt6/QtPdf -isystem /usr/include/qt6/QtPdfWidgets + OBJECT_DIR = CMakeFiles/kassetmanagerqt.dir + OBJECT_FILE_DIR = CMakeFiles/kassetmanagerqt.dir/src/media + +build CMakeFiles/kassetmanagerqt.dir/src/media/tlrender_widget.cpp.o: CXX_COMPILER__kassetmanagerqt_unscanned_Release /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/media/tlrender_widget.cpp || cmake_object_order_depends_target_kassetmanagerqt + DEFINES = -DFTK_API_GL_4_1 -DFTK_STATIC -DHAVE_FFMPEG -DHAVE_MINIZIP_NG -DHAVE_OCIO=1 -DHAVE_OPENIMAGEIO=1 -DHAVE_QT_PDF -DHAVE_QT_PDF_WIDGETS -DHAVE_TLRENDER=1 -DKAM_APP_VERSION=\"1.8.5\" -DOPENTIME_STATIC -DOTIO_STATIC -DOpenColorIO_SKIP_IMPORTS -DQT_CONCURRENT_LIB -DQT_CORE_LIB -DQT_GUI_LIB -DQT_MULTIMEDIAWIDGETS_LIB -DQT_MULTIMEDIA_LIB -DQT_NETWORK_LIB -DQT_NO_DEBUG -DQT_NO_DEBUG_OUTPUT -DQT_NO_INFO_OUTPUT -DQT_OPENGLWIDGETS_LIB -DQT_OPENGL_LIB -DQT_PDFWIDGETS_LIB -DQT_PDF_LIB -DQT_SQL_LIB -DQT_SVGWIDGETS_LIB -DQT_SVG_LIB -DQT_WIDGETS_LIB -DTLRENDER_EXR -DTLRENDER_FFMPEG -DTLRENDER_FFMPEG_PLUGIN -DTLRENDER_JPEG -DTLRENDER_OCIO -DTLRENDER_OIIO -DTLRENDER_PNG -DTLRENDER_SDL2 -DTLRENDER_TIFF -DTL_STATIC + DEP_FILE = CMakeFiles/kassetmanagerqt.dir/src/media/tlrender_widget.cpp.o.d + FLAGS = -O3 -DNDEBUG -std=gnu++20 + INCLUDES = -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/kassetmanagerqt_autogen/include -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include -isystem /usr/include/qt6/QtCore -isystem /usr/include/qt6 -isystem /usr/lib64/qt6/mkspecs/linux-g++ -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/Imath -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/SDL2 -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/minizip-ng -isystem /usr/include/qt6/QtGui -isystem /usr/include/qt6/QtOpenGL -isystem /usr/include/qt6/QtWidgets -isystem /usr/include/qt6/QtOpenGLWidgets -isystem /usr/include/qt6/QtSvg -isystem /usr/include/qt6/QtMultimedia -isystem /usr/include/qt6/QtNetwork -isystem /usr/include/qt6/QtMultimediaWidgets -isystem /usr/include/qt6/QtSql -isystem /usr/include/qt6/QtConcurrent -isystem /usr/include/qt6/QtSvgWidgets -isystem /usr/include/qt6/QtPdf -isystem /usr/include/qt6/QtPdfWidgets + OBJECT_DIR = CMakeFiles/kassetmanagerqt.dir + OBJECT_FILE_DIR = CMakeFiles/kassetmanagerqt.dir/src/media + +build CMakeFiles/kassetmanagerqt.dir/src/media/tlrender_viewport.cpp.o: CXX_COMPILER__kassetmanagerqt_unscanned_Release /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/media/tlrender_viewport.cpp || cmake_object_order_depends_target_kassetmanagerqt + DEFINES = -DFTK_API_GL_4_1 -DFTK_STATIC -DHAVE_FFMPEG -DHAVE_MINIZIP_NG -DHAVE_OCIO=1 -DHAVE_OPENIMAGEIO=1 -DHAVE_QT_PDF -DHAVE_QT_PDF_WIDGETS -DHAVE_TLRENDER=1 -DKAM_APP_VERSION=\"1.8.5\" -DOPENTIME_STATIC -DOTIO_STATIC -DOpenColorIO_SKIP_IMPORTS -DQT_CONCURRENT_LIB -DQT_CORE_LIB -DQT_GUI_LIB -DQT_MULTIMEDIAWIDGETS_LIB -DQT_MULTIMEDIA_LIB -DQT_NETWORK_LIB -DQT_NO_DEBUG -DQT_NO_DEBUG_OUTPUT -DQT_NO_INFO_OUTPUT -DQT_OPENGLWIDGETS_LIB -DQT_OPENGL_LIB -DQT_PDFWIDGETS_LIB -DQT_PDF_LIB -DQT_SQL_LIB -DQT_SVGWIDGETS_LIB -DQT_SVG_LIB -DQT_WIDGETS_LIB -DTLRENDER_EXR -DTLRENDER_FFMPEG -DTLRENDER_FFMPEG_PLUGIN -DTLRENDER_JPEG -DTLRENDER_OCIO -DTLRENDER_OIIO -DTLRENDER_PNG -DTLRENDER_SDL2 -DTLRENDER_TIFF -DTL_STATIC + DEP_FILE = CMakeFiles/kassetmanagerqt.dir/src/media/tlrender_viewport.cpp.o.d + FLAGS = -O3 -DNDEBUG -std=gnu++20 + INCLUDES = -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/kassetmanagerqt_autogen/include -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include -isystem /usr/include/qt6/QtCore -isystem /usr/include/qt6 -isystem /usr/lib64/qt6/mkspecs/linux-g++ -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/Imath -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/SDL2 -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/minizip-ng -isystem /usr/include/qt6/QtGui -isystem /usr/include/qt6/QtOpenGL -isystem /usr/include/qt6/QtWidgets -isystem /usr/include/qt6/QtOpenGLWidgets -isystem /usr/include/qt6/QtSvg -isystem /usr/include/qt6/QtMultimedia -isystem /usr/include/qt6/QtNetwork -isystem /usr/include/qt6/QtMultimediaWidgets -isystem /usr/include/qt6/QtSql -isystem /usr/include/qt6/QtConcurrent -isystem /usr/include/qt6/QtSvgWidgets -isystem /usr/include/qt6/QtPdf -isystem /usr/include/qt6/QtPdfWidgets + OBJECT_DIR = CMakeFiles/kassetmanagerqt.dir + OBJECT_FILE_DIR = CMakeFiles/kassetmanagerqt.dir/src/media + +build CMakeFiles/kassetmanagerqt.dir/src/theme_manager.cpp.o: CXX_COMPILER__kassetmanagerqt_unscanned_Release /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/theme_manager.cpp || cmake_object_order_depends_target_kassetmanagerqt + DEFINES = -DFTK_API_GL_4_1 -DFTK_STATIC -DHAVE_FFMPEG -DHAVE_MINIZIP_NG -DHAVE_OCIO=1 -DHAVE_OPENIMAGEIO=1 -DHAVE_QT_PDF -DHAVE_QT_PDF_WIDGETS -DHAVE_TLRENDER=1 -DKAM_APP_VERSION=\"1.8.5\" -DOPENTIME_STATIC -DOTIO_STATIC -DOpenColorIO_SKIP_IMPORTS -DQT_CONCURRENT_LIB -DQT_CORE_LIB -DQT_GUI_LIB -DQT_MULTIMEDIAWIDGETS_LIB -DQT_MULTIMEDIA_LIB -DQT_NETWORK_LIB -DQT_NO_DEBUG -DQT_NO_DEBUG_OUTPUT -DQT_NO_INFO_OUTPUT -DQT_OPENGLWIDGETS_LIB -DQT_OPENGL_LIB -DQT_PDFWIDGETS_LIB -DQT_PDF_LIB -DQT_SQL_LIB -DQT_SVGWIDGETS_LIB -DQT_SVG_LIB -DQT_WIDGETS_LIB -DTLRENDER_EXR -DTLRENDER_FFMPEG -DTLRENDER_FFMPEG_PLUGIN -DTLRENDER_JPEG -DTLRENDER_OCIO -DTLRENDER_OIIO -DTLRENDER_PNG -DTLRENDER_SDL2 -DTLRENDER_TIFF -DTL_STATIC + DEP_FILE = CMakeFiles/kassetmanagerqt.dir/src/theme_manager.cpp.o.d + FLAGS = -O3 -DNDEBUG -std=gnu++20 + INCLUDES = -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/kassetmanagerqt_autogen/include -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include -isystem /usr/include/qt6/QtCore -isystem /usr/include/qt6 -isystem /usr/lib64/qt6/mkspecs/linux-g++ -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/Imath -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/SDL2 -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/minizip-ng -isystem /usr/include/qt6/QtGui -isystem /usr/include/qt6/QtOpenGL -isystem /usr/include/qt6/QtWidgets -isystem /usr/include/qt6/QtOpenGLWidgets -isystem /usr/include/qt6/QtSvg -isystem /usr/include/qt6/QtMultimedia -isystem /usr/include/qt6/QtNetwork -isystem /usr/include/qt6/QtMultimediaWidgets -isystem /usr/include/qt6/QtSql -isystem /usr/include/qt6/QtConcurrent -isystem /usr/include/qt6/QtSvgWidgets -isystem /usr/include/qt6/QtPdf -isystem /usr/include/qt6/QtPdfWidgets + OBJECT_DIR = CMakeFiles/kassetmanagerqt.dir + OBJECT_FILE_DIR = CMakeFiles/kassetmanagerqt.dir/src + +build CMakeFiles/kassetmanagerqt.dir/src/annotation_items.cpp.o: CXX_COMPILER__kassetmanagerqt_unscanned_Release /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/annotation_items.cpp || cmake_object_order_depends_target_kassetmanagerqt + DEFINES = -DFTK_API_GL_4_1 -DFTK_STATIC -DHAVE_FFMPEG -DHAVE_MINIZIP_NG -DHAVE_OCIO=1 -DHAVE_OPENIMAGEIO=1 -DHAVE_QT_PDF -DHAVE_QT_PDF_WIDGETS -DHAVE_TLRENDER=1 -DKAM_APP_VERSION=\"1.8.5\" -DOPENTIME_STATIC -DOTIO_STATIC -DOpenColorIO_SKIP_IMPORTS -DQT_CONCURRENT_LIB -DQT_CORE_LIB -DQT_GUI_LIB -DQT_MULTIMEDIAWIDGETS_LIB -DQT_MULTIMEDIA_LIB -DQT_NETWORK_LIB -DQT_NO_DEBUG -DQT_NO_DEBUG_OUTPUT -DQT_NO_INFO_OUTPUT -DQT_OPENGLWIDGETS_LIB -DQT_OPENGL_LIB -DQT_PDFWIDGETS_LIB -DQT_PDF_LIB -DQT_SQL_LIB -DQT_SVGWIDGETS_LIB -DQT_SVG_LIB -DQT_WIDGETS_LIB -DTLRENDER_EXR -DTLRENDER_FFMPEG -DTLRENDER_FFMPEG_PLUGIN -DTLRENDER_JPEG -DTLRENDER_OCIO -DTLRENDER_OIIO -DTLRENDER_PNG -DTLRENDER_SDL2 -DTLRENDER_TIFF -DTL_STATIC + DEP_FILE = CMakeFiles/kassetmanagerqt.dir/src/annotation_items.cpp.o.d + FLAGS = -O3 -DNDEBUG -std=gnu++20 + INCLUDES = -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/kassetmanagerqt_autogen/include -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include -isystem /usr/include/qt6/QtCore -isystem /usr/include/qt6 -isystem /usr/lib64/qt6/mkspecs/linux-g++ -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/Imath -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/SDL2 -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/minizip-ng -isystem /usr/include/qt6/QtGui -isystem /usr/include/qt6/QtOpenGL -isystem /usr/include/qt6/QtWidgets -isystem /usr/include/qt6/QtOpenGLWidgets -isystem /usr/include/qt6/QtSvg -isystem /usr/include/qt6/QtMultimedia -isystem /usr/include/qt6/QtNetwork -isystem /usr/include/qt6/QtMultimediaWidgets -isystem /usr/include/qt6/QtSql -isystem /usr/include/qt6/QtConcurrent -isystem /usr/include/qt6/QtSvgWidgets -isystem /usr/include/qt6/QtPdf -isystem /usr/include/qt6/QtPdfWidgets + OBJECT_DIR = CMakeFiles/kassetmanagerqt.dir + OBJECT_FILE_DIR = CMakeFiles/kassetmanagerqt.dir/src + +build CMakeFiles/kassetmanagerqt.dir/src/annotation_layer.cpp.o: CXX_COMPILER__kassetmanagerqt_unscanned_Release /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/annotation_layer.cpp || cmake_object_order_depends_target_kassetmanagerqt + DEFINES = -DFTK_API_GL_4_1 -DFTK_STATIC -DHAVE_FFMPEG -DHAVE_MINIZIP_NG -DHAVE_OCIO=1 -DHAVE_OPENIMAGEIO=1 -DHAVE_QT_PDF -DHAVE_QT_PDF_WIDGETS -DHAVE_TLRENDER=1 -DKAM_APP_VERSION=\"1.8.5\" -DOPENTIME_STATIC -DOTIO_STATIC -DOpenColorIO_SKIP_IMPORTS -DQT_CONCURRENT_LIB -DQT_CORE_LIB -DQT_GUI_LIB -DQT_MULTIMEDIAWIDGETS_LIB -DQT_MULTIMEDIA_LIB -DQT_NETWORK_LIB -DQT_NO_DEBUG -DQT_NO_DEBUG_OUTPUT -DQT_NO_INFO_OUTPUT -DQT_OPENGLWIDGETS_LIB -DQT_OPENGL_LIB -DQT_PDFWIDGETS_LIB -DQT_PDF_LIB -DQT_SQL_LIB -DQT_SVGWIDGETS_LIB -DQT_SVG_LIB -DQT_WIDGETS_LIB -DTLRENDER_EXR -DTLRENDER_FFMPEG -DTLRENDER_FFMPEG_PLUGIN -DTLRENDER_JPEG -DTLRENDER_OCIO -DTLRENDER_OIIO -DTLRENDER_PNG -DTLRENDER_SDL2 -DTLRENDER_TIFF -DTL_STATIC + DEP_FILE = CMakeFiles/kassetmanagerqt.dir/src/annotation_layer.cpp.o.d + FLAGS = -O3 -DNDEBUG -std=gnu++20 + INCLUDES = -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/kassetmanagerqt_autogen/include -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include -isystem /usr/include/qt6/QtCore -isystem /usr/include/qt6 -isystem /usr/lib64/qt6/mkspecs/linux-g++ -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/Imath -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/SDL2 -isystem /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/minizip-ng -isystem /usr/include/qt6/QtGui -isystem /usr/include/qt6/QtOpenGL -isystem /usr/include/qt6/QtWidgets -isystem /usr/include/qt6/QtOpenGLWidgets -isystem /usr/include/qt6/QtSvg -isystem /usr/include/qt6/QtMultimedia -isystem /usr/include/qt6/QtNetwork -isystem /usr/include/qt6/QtMultimediaWidgets -isystem /usr/include/qt6/QtSql -isystem /usr/include/qt6/QtConcurrent -isystem /usr/include/qt6/QtSvgWidgets -isystem /usr/include/qt6/QtPdf -isystem /usr/include/qt6/QtPdfWidgets + OBJECT_DIR = CMakeFiles/kassetmanagerqt.dir + OBJECT_FILE_DIR = CMakeFiles/kassetmanagerqt.dir/src + + +# ============================================================================= +# Link build statements for EXECUTABLE target kassetmanagerqt + + +############################################# +# Link the executable kassetmanagerqt + +build kassetmanagerqt: CXX_EXECUTABLE_LINKER__kassetmanagerqt_Release CMakeFiles/kassetmanagerqt.dir/kassetmanagerqt_autogen/mocs_compilation.cpp.o CMakeFiles/kassetmanagerqt.dir/src/main.cpp.o CMakeFiles/kassetmanagerqt.dir/src/mainwindow.cpp.o CMakeFiles/kassetmanagerqt.dir/src/virtual_drag.cpp.o CMakeFiles/kassetmanagerqt.dir/src/db.cpp.o CMakeFiles/kassetmanagerqt.dir/src/project_db.cpp.o CMakeFiles/kassetmanagerqt.dir/src/project_import_worker.cpp.o CMakeFiles/kassetmanagerqt.dir/src/project_version_detector.cpp.o CMakeFiles/kassetmanagerqt.dir/src/projects_model.cpp.o CMakeFiles/kassetmanagerqt.dir/src/project_assets_model.cpp.o CMakeFiles/kassetmanagerqt.dir/src/project_folders_model.cpp.o CMakeFiles/kassetmanagerqt.dir/src/project_sequence_grouping_proxy_model.cpp.o CMakeFiles/kassetmanagerqt.dir/src/project_item_delegate.cpp.o CMakeFiles/kassetmanagerqt.dir/src/project_manager_watcher.cpp.o CMakeFiles/kassetmanagerqt.dir/src/drag_utils.cpp.o CMakeFiles/kassetmanagerqt.dir/src/virtual_folders.cpp.o CMakeFiles/kassetmanagerqt.dir/src/assets_model.cpp.o CMakeFiles/kassetmanagerqt.dir/src/importer.cpp.o CMakeFiles/kassetmanagerqt.dir/src/live_preview_manager.cpp.o CMakeFiles/kassetmanagerqt.dir/src/log_manager.cpp.o CMakeFiles/kassetmanagerqt.dir/src/progress_manager.cpp.o CMakeFiles/kassetmanagerqt.dir/src/preview_overlay.cpp.o CMakeFiles/kassetmanagerqt.dir/src/image_preview_overlay.cpp.o CMakeFiles/kassetmanagerqt.dir/src/import_progress_dialog.cpp.o CMakeFiles/kassetmanagerqt.dir/src/settings_dialog.cpp.o CMakeFiles/kassetmanagerqt.dir/src/user_guide_dialog.cpp.o CMakeFiles/kassetmanagerqt.dir/src/star_rating_widget.cpp.o CMakeFiles/kassetmanagerqt.dir/src/sequence_detector.cpp.o CMakeFiles/kassetmanagerqt.dir/src/sequence_grouping_proxy_model.cpp.o CMakeFiles/kassetmanagerqt.dir/src/asset_sequence_grouping_proxy_model.cpp.o CMakeFiles/kassetmanagerqt.dir/src/asset_grid_view.cpp.o CMakeFiles/kassetmanagerqt.dir/src/icon_utils.cpp.o CMakeFiles/kassetmanagerqt.dir/src/file_utils.cpp.o CMakeFiles/kassetmanagerqt.dir/src/asset_item_delegate.cpp.o CMakeFiles/kassetmanagerqt.dir/src/fm_item_delegate.cpp.o CMakeFiles/kassetmanagerqt.dir/src/grid_scrub.cpp.o CMakeFiles/kassetmanagerqt.dir/src/scrub_frame_registry.cpp.o CMakeFiles/kassetmanagerqt.dir/src/fm_views_ex.cpp.o CMakeFiles/kassetmanagerqt.dir/src/file_manager_pane.cpp.o CMakeFiles/kassetmanagerqt.dir/src/oiio_image_loader.cpp.o CMakeFiles/kassetmanagerqt.dir/src/project_folder_watcher.cpp.o CMakeFiles/kassetmanagerqt.dir/src/log_viewer_widget.cpp.o CMakeFiles/kassetmanagerqt.dir/src/video_metadata.cpp.o CMakeFiles/kassetmanagerqt.dir/src/file_ops.cpp.o CMakeFiles/kassetmanagerqt.dir/src/file_ops_dialog.cpp.o CMakeFiles/kassetmanagerqt.dir/src/office_preview.cpp.o CMakeFiles/kassetmanagerqt.dir/src/context_preserver.cpp.o CMakeFiles/kassetmanagerqt.dir/src/database_health_agent.cpp.o CMakeFiles/kassetmanagerqt.dir/src/database_health_dialog.cpp.o CMakeFiles/kassetmanagerqt.dir/src/bulk_rename_dialog.cpp.o CMakeFiles/kassetmanagerqt.dir/src/everything_search.cpp.o CMakeFiles/kassetmanagerqt.dir/src/everything_folder_model.cpp.o CMakeFiles/kassetmanagerqt.dir/src/utils.cpp.o CMakeFiles/kassetmanagerqt.dir/src/everything_search_dialog.cpp.o CMakeFiles/kassetmanagerqt.dir/src/media_convert_dialog.cpp.o CMakeFiles/kassetmanagerqt.dir/src/media_converter_worker.cpp.o CMakeFiles/kassetmanagerqt.dir/src/thumbnail_cache_manager.cpp.o CMakeFiles/kassetmanagerqt.dir/src/thumbnail_generator_dialog.cpp.o CMakeFiles/kassetmanagerqt.dir/src/thumbnail_generator_worker.cpp.o CMakeFiles/kassetmanagerqt.dir/src/media/tlrender_player.cpp.o CMakeFiles/kassetmanagerqt.dir/src/media/tlrender_widget.cpp.o CMakeFiles/kassetmanagerqt.dir/src/media/tlrender_viewport.cpp.o CMakeFiles/kassetmanagerqt.dir/src/theme_manager.cpp.o CMakeFiles/kassetmanagerqt.dir/src/annotation_items.cpp.o CMakeFiles/kassetmanagerqt.dir/src/annotation_layer.cpp.o | /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/libtlTimeline.a /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/libtlGL.a /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/libtlIO.a /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/libtlCore.a /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/libtlUI.a /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/libtlDevice.a /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/libtlQt.a /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/libtlQtWidget.a /usr/lib64/libQt6MultimediaWidgets.so.6.10.3 /usr/lib64/libQt6Sql.so.6.10.3 /usr/lib64/libQt6SvgWidgets.so.6.10.3 /usr/lib64/libQt6OpenGLWidgets.so.6.10.3 /usr/lib64/libQt6PdfWidgets.so.6.10.3 /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/libminizip-ng.a /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/libtlUI.a /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/libftkUI.a /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/liblunasvg.a /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/libplutovg.a /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/libtlQt.a /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/libtlGL.a /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/libtlTimeline.a /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/libtlIO.a /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/libtlCore.a /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/libtlResource.a /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/libopentimelineio.a /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/libopentime.a /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/libftkGL.a /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/libftkCore.a /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/libftkResource.a /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/libSDL2.a /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/libftkglad.a /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/libavdevice.so /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/libavformat.so /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/libavcodec.so /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/libswresample.so /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/libswscale.so /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/libavutil.so /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/libOpenImageIO.a /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/libOpenEXR-3_3.a /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/libIlmThread-3_3.a /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/libIex-3_3.a /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/libOpenColorIO.a /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/libexpat.a /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/libpystring.a /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/libyaml-cpp.a /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/libfreetype.a /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/libOpenEXRCore-3_3.a /usr/lib64/libm.so /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/libOpenImageIO_Util.a /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/libImath-3_2.a /usr/lib64/libpng.so /usr/lib64/libz.so /usr/lib64/libpng.so /usr/lib64/libz.so /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/libpng.a /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/libz.a /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/libjpeg.a /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/libtiff.a /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/libminizip-ng.a /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/libz.a /usr/lib64/libQt6OpenGL.so.6.10.3 /usr/lib64/libQt6Multimedia.so.6.10.3 /usr/lib64/libQt6Concurrent.so.6.10.3 /usr/lib64/libQt6Svg.so.6.10.3 /usr/lib64/libQt6Widgets.so.6.10.3 /usr/lib64/libQt6Pdf.so.6.10.3 /usr/lib64/libQt6Network.so.6.10.3 /usr/lib64/libQt6Gui.so.6.10.3 /usr/lib64/libGLX.so /usr/lib64/libOpenGL.so /usr/lib64/libQt6Core.so.6.10.3 || kassetmanagerqt_autogen kassetmanagerqt_autogen_timestamp_deps + DEP_FILE = CMakeFiles/kassetmanagerqt.dir/link.d + FLAGS = -O3 -DNDEBUG + LINK_FLAGS = -Wl,--dependency-file=CMakeFiles/kassetmanagerqt.dir/link.d + LINK_LIBRARIES = -Wl,-rpath,/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib: /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/libtlTimeline.a /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/libtlGL.a /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/libtlIO.a /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/libtlCore.a /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/libtlUI.a /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/libtlDevice.a /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/libtlQt.a /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/libtlQtWidget.a /usr/lib64/libQt6MultimediaWidgets.so.6.10.3 /usr/lib64/libQt6Sql.so.6.10.3 /usr/lib64/libQt6SvgWidgets.so.6.10.3 /usr/lib64/libQt6OpenGLWidgets.so.6.10.3 /usr/lib64/libQt6PdfWidgets.so.6.10.3 /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/libminizip-ng.a /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/libtlUI.a /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/libftkUI.a /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/liblunasvg.a /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/libplutovg.a /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/libtlQt.a /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/libtlGL.a /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/libtlTimeline.a /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/libtlIO.a /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/libtlCore.a /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/libtlResource.a /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/libopentimelineio.a /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/libopentime.a /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/libftkGL.a /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/libftkCore.a /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/libftkResource.a /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/libSDL2.a -pthread /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/libftkglad.a /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/libavdevice.so /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/libavformat.so /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/libavcodec.so /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/libswresample.so /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/libswscale.so /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/libavutil.so /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/libOpenImageIO.a /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/libOpenEXR-3_3.a /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/libIlmThread-3_3.a /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/libIex-3_3.a /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/libOpenColorIO.a /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/libexpat.a /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/libpystring.a /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/libyaml-cpp.a /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/libfreetype.a /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/libOpenEXRCore-3_3.a -lm /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/libOpenImageIO_Util.a /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/libImath-3_2.a /usr/lib64/libpng.so /usr/lib64/libz.so /usr/lib64/libpng.so /usr/lib64/libz.so /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/libpng.a /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/libz.a -lm /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/libjpeg.a /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/libtiff.a -ldl /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/libminizip-ng.a /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/libz.a /usr/lib64/libQt6OpenGL.so.6.10.3 /usr/lib64/libQt6Multimedia.so.6.10.3 /usr/lib64/libQt6Concurrent.so.6.10.3 /usr/lib64/libQt6Svg.so.6.10.3 /usr/lib64/libQt6Widgets.so.6.10.3 /usr/lib64/libQt6Pdf.so.6.10.3 /usr/lib64/libQt6Network.so.6.10.3 /usr/lib64/libQt6Gui.so.6.10.3 /usr/lib64/libGLX.so /usr/lib64/libOpenGL.so /usr/lib64/libQt6Core.so.6.10.3 + OBJECT_DIR = CMakeFiles/kassetmanagerqt.dir + POST_BUILD = : + PRE_LINK = : + TARGET_FILE = kassetmanagerqt + TARGET_PDB = kassetmanagerqt.dbg + + +############################################# +# Utility command for package + +build CMakeFiles/package.util: CUSTOM_COMMAND all + COMMAND = cd /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux && /usr/bin/cpack --config ./CPackConfig.cmake + DESC = Run CPack packaging tool... + pool = console + restat = 1 + +build package: phony CMakeFiles/package.util + + +############################################# +# Utility command for package_source + +build CMakeFiles/package_source.util: CUSTOM_COMMAND + COMMAND = cd /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux && /usr/bin/cpack --config ./CPackSourceConfig.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/CPackSourceConfig.cmake + DESC = Run CPack packaging tool for source... + pool = console + restat = 1 + +build package_source: phony CMakeFiles/package_source.util + + +############################################# +# Utility command for test + +build CMakeFiles/test.util: CUSTOM_COMMAND + COMMAND = cd /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux && /usr/bin/ctest --force-new-ctest-process + DESC = Running tests... + pool = console + restat = 1 + +build test: phony CMakeFiles/test.util + + +############################################# +# Utility command for edit_cache + +build CMakeFiles/edit_cache.util: CUSTOM_COMMAND + COMMAND = cd /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux && /usr/bin/ccmake -S/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6 -B/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux + DESC = Running CMake cache editor... + pool = console + restat = 1 + +build edit_cache: phony CMakeFiles/edit_cache.util + + +############################################# +# Utility command for rebuild_cache + +build CMakeFiles/rebuild_cache.util: CUSTOM_COMMAND + COMMAND = cd /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux && /usr/bin/cmake --regenerate-during-build -S/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6 -B/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux + DESC = Running CMake to regenerate build system... + pool = console + restat = 1 + +build rebuild_cache: phony CMakeFiles/rebuild_cache.util + + +############################################# +# Utility command for list_install_components + +build list_install_components: phony + + +############################################# +# Utility command for install + +build CMakeFiles/install.util: CUSTOM_COMMAND all + COMMAND = cd /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux && /usr/bin/cmake -P cmake_install.cmake + DESC = Install the project... + pool = console + restat = 1 + +build install: phony CMakeFiles/install.util + + +############################################# +# Utility command for install/local + +build CMakeFiles/install/local.util: CUSTOM_COMMAND all + COMMAND = cd /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux && /usr/bin/cmake -DCMAKE_INSTALL_LOCAL_ONLY=1 -P cmake_install.cmake + DESC = Installing only the local directory... + pool = console + restat = 1 + +build install/local: phony CMakeFiles/install/local.util + + +############################################# +# Utility command for install/strip + +build CMakeFiles/install/strip.util: CUSTOM_COMMAND all + COMMAND = cd /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux && /usr/bin/cmake -DCMAKE_INSTALL_DO_STRIP=1 -P cmake_install.cmake + DESC = Installing the project stripped... + pool = console + restat = 1 + +build install/strip: phony CMakeFiles/install/strip.util + + +############################################# +# Utility command for kassetmanagerqt_autogen_timestamp_deps + +build kassetmanagerqt_autogen_timestamp_deps: phony + + +############################################# +# Utility command for kassetmanagerqt_autogen + +build kassetmanagerqt_autogen: phony CMakeFiles/kassetmanagerqt_autogen kassetmanagerqt_autogen/timestamp kassetmanagerqt_autogen/mocs_compilation.cpp kassetmanagerqt_autogen_timestamp_deps + + +############################################# +# Custom command for kassetmanagerqt_autogen/timestamp + +build kassetmanagerqt_autogen/timestamp kassetmanagerqt_autogen/mocs_compilation.cpp | ${cmake_ninja_workdir}kassetmanagerqt_autogen/timestamp ${cmake_ninja_workdir}kassetmanagerqt_autogen/mocs_compilation.cpp: CUSTOM_COMMAND /usr/lib64/qt6/libexec/moc /usr/lib64/qt6/libexec/uic || kassetmanagerqt_autogen_timestamp_deps + COMMAND = cd /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux && /usr/bin/cmake -E cmake_autogen /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/CMakeFiles/kassetmanagerqt_autogen.dir/AutogenInfo.json Release && /usr/bin/cmake -E touch /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/kassetmanagerqt_autogen/timestamp && /usr/bin/cmake -E cmake_transform_depfile Ninja gccdepfile /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6 /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6 /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/kassetmanagerqt_autogen/deps /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/CMakeFiles/d/9ce9d1407c615c24a08873007222d51bb166ac5d1ab86e06e696d29b9172c29a.d + DESC = Automatic MOC and UIC for target kassetmanagerqt + depfile = CMakeFiles/d/9ce9d1407c615c24a08873007222d51bb166ac5d1ab86e06e696d29b9172c29a.d + deps = gcc + restat = 1 + + +############################################# +# Phony custom command for CMakeFiles/kassetmanagerqt_autogen + +build CMakeFiles/kassetmanagerqt_autogen | ${cmake_ninja_workdir}CMakeFiles/kassetmanagerqt_autogen: phony kassetmanagerqt_autogen/timestamp || kassetmanagerqt_autogen_timestamp_deps + +# ============================================================================= +# Write statements declared in CMakeLists.txt: +# /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/CMakeLists.txt +# ============================================================================= + +# ============================================================================= +# Object build statements for EXECUTABLE target test_simple + + +############################################# +# Order-only phony target for test_simple + +build cmake_object_order_depends_target_test_simple: phony || tests/test_simple_autogen tests/test_simple_autogen/mocs_compilation.cpp tests/test_simple_autogen/timestamp tests/test_simple_autogen_timestamp_deps + +build tests/CMakeFiles/test_simple.dir/test_simple_autogen/mocs_compilation.cpp.o: CXX_COMPILER__test_simple_unscanned_Release /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_simple_autogen/mocs_compilation.cpp || cmake_object_order_depends_target_test_simple + DEFINES = -DFTK_API_GL_4_1 -DQT_CORE_LIB -DQT_NO_DEBUG -DQT_TESTCASE_BUILDDIR=\"/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests\" -DQT_TESTCASE_SOURCEDIR=\"/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests\" -DQT_TESTLIB_LIB -DTLRENDER_EXR -DTLRENDER_FFMPEG -DTLRENDER_FFMPEG_PLUGIN -DTLRENDER_JPEG -DTLRENDER_OCIO -DTLRENDER_OIIO -DTLRENDER_PNG -DTLRENDER_SDL2 -DTLRENDER_TIFF + DEP_FILE = tests/CMakeFiles/test_simple.dir/test_simple_autogen/mocs_compilation.cpp.o.d + FLAGS = -O3 -DNDEBUG -std=gnu++20 + INCLUDES = -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_simple_autogen/include -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/../src -isystem /usr/include/qt6/QtTest -isystem /usr/include/qt6 -isystem /usr/include/qt6/QtCore -isystem /usr/lib64/qt6/mkspecs/linux-g++ + OBJECT_DIR = tests/CMakeFiles/test_simple.dir + OBJECT_FILE_DIR = tests/CMakeFiles/test_simple.dir/test_simple_autogen + +build tests/CMakeFiles/test_simple.dir/test_simple.cpp.o: CXX_COMPILER__test_simple_unscanned_Release /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/test_simple.cpp || cmake_object_order_depends_target_test_simple + DEFINES = -DFTK_API_GL_4_1 -DQT_CORE_LIB -DQT_NO_DEBUG -DQT_TESTCASE_BUILDDIR=\"/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests\" -DQT_TESTCASE_SOURCEDIR=\"/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests\" -DQT_TESTLIB_LIB -DTLRENDER_EXR -DTLRENDER_FFMPEG -DTLRENDER_FFMPEG_PLUGIN -DTLRENDER_JPEG -DTLRENDER_OCIO -DTLRENDER_OIIO -DTLRENDER_PNG -DTLRENDER_SDL2 -DTLRENDER_TIFF + DEP_FILE = tests/CMakeFiles/test_simple.dir/test_simple.cpp.o.d + FLAGS = -O3 -DNDEBUG -std=gnu++20 + INCLUDES = -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_simple_autogen/include -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/../src -isystem /usr/include/qt6/QtTest -isystem /usr/include/qt6 -isystem /usr/include/qt6/QtCore -isystem /usr/lib64/qt6/mkspecs/linux-g++ + OBJECT_DIR = tests/CMakeFiles/test_simple.dir + OBJECT_FILE_DIR = tests/CMakeFiles/test_simple.dir + + +# ============================================================================= +# Link build statements for EXECUTABLE target test_simple + + +############################################# +# Link the executable tests/test_simple + +build tests/test_simple: CXX_EXECUTABLE_LINKER__test_simple_Release tests/CMakeFiles/test_simple.dir/test_simple_autogen/mocs_compilation.cpp.o tests/CMakeFiles/test_simple.dir/test_simple.cpp.o | /usr/lib64/libQt6Test.so.6.10.3 /usr/lib64/libQt6Core.so.6.10.3 || tests/test_simple_autogen tests/test_simple_autogen_timestamp_deps + DEP_FILE = tests/CMakeFiles/test_simple.dir/link.d + FLAGS = -O3 -DNDEBUG + LINK_FLAGS = -Wl,--dependency-file=tests/CMakeFiles/test_simple.dir/link.d + LINK_LIBRARIES = -Wl,-rpath,:::::::::::::::::::::::: /usr/lib64/libQt6Test.so.6.10.3 /usr/lib64/libQt6Core.so.6.10.3 + OBJECT_DIR = tests/CMakeFiles/test_simple.dir + POST_BUILD = : + PRE_LINK = : + TARGET_FILE = tests/test_simple + TARGET_PDB = test_simple.dbg + +# ============================================================================= +# Object build statements for EXECUTABLE target test_db + + +############################################# +# Order-only phony target for test_db + +build cmake_object_order_depends_target_test_db: phony || tests/test_db_autogen tests/test_db_autogen/mocs_compilation.cpp tests/test_db_autogen/timestamp tests/test_db_autogen_timestamp_deps + +build tests/CMakeFiles/test_db.dir/test_db_autogen/mocs_compilation.cpp.o: CXX_COMPILER__test_db_unscanned_Release /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_db_autogen/mocs_compilation.cpp || cmake_object_order_depends_target_test_db + DEFINES = -DFTK_API_GL_4_1 -DQT_CORE_LIB -DQT_NO_DEBUG -DQT_SQL_LIB -DQT_TESTCASE_BUILDDIR=\"/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests\" -DQT_TESTCASE_SOURCEDIR=\"/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests\" -DQT_TESTLIB_LIB -DTLRENDER_EXR -DTLRENDER_FFMPEG -DTLRENDER_FFMPEG_PLUGIN -DTLRENDER_JPEG -DTLRENDER_OCIO -DTLRENDER_OIIO -DTLRENDER_PNG -DTLRENDER_SDL2 -DTLRENDER_TIFF + DEP_FILE = tests/CMakeFiles/test_db.dir/test_db_autogen/mocs_compilation.cpp.o.d + FLAGS = -O3 -DNDEBUG -std=gnu++20 + INCLUDES = -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_db_autogen/include -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/../src -isystem /usr/include/qt6/QtTest -isystem /usr/include/qt6 -isystem /usr/include/qt6/QtCore -isystem /usr/lib64/qt6/mkspecs/linux-g++ -isystem /usr/include/qt6/QtSql + OBJECT_DIR = tests/CMakeFiles/test_db.dir + OBJECT_FILE_DIR = tests/CMakeFiles/test_db.dir/test_db_autogen + +build tests/CMakeFiles/test_db.dir/test_db.cpp.o: CXX_COMPILER__test_db_unscanned_Release /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/test_db.cpp || cmake_object_order_depends_target_test_db + DEFINES = -DFTK_API_GL_4_1 -DQT_CORE_LIB -DQT_NO_DEBUG -DQT_SQL_LIB -DQT_TESTCASE_BUILDDIR=\"/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests\" -DQT_TESTCASE_SOURCEDIR=\"/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests\" -DQT_TESTLIB_LIB -DTLRENDER_EXR -DTLRENDER_FFMPEG -DTLRENDER_FFMPEG_PLUGIN -DTLRENDER_JPEG -DTLRENDER_OCIO -DTLRENDER_OIIO -DTLRENDER_PNG -DTLRENDER_SDL2 -DTLRENDER_TIFF + DEP_FILE = tests/CMakeFiles/test_db.dir/test_db.cpp.o.d + FLAGS = -O3 -DNDEBUG -std=gnu++20 + INCLUDES = -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_db_autogen/include -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/../src -isystem /usr/include/qt6/QtTest -isystem /usr/include/qt6 -isystem /usr/include/qt6/QtCore -isystem /usr/lib64/qt6/mkspecs/linux-g++ -isystem /usr/include/qt6/QtSql + OBJECT_DIR = tests/CMakeFiles/test_db.dir + OBJECT_FILE_DIR = tests/CMakeFiles/test_db.dir + +build tests/CMakeFiles/test_db.dir/__/src/db.cpp.o: CXX_COMPILER__test_db_unscanned_Release /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/db.cpp || cmake_object_order_depends_target_test_db + DEFINES = -DFTK_API_GL_4_1 -DQT_CORE_LIB -DQT_NO_DEBUG -DQT_SQL_LIB -DQT_TESTCASE_BUILDDIR=\"/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests\" -DQT_TESTCASE_SOURCEDIR=\"/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests\" -DQT_TESTLIB_LIB -DTLRENDER_EXR -DTLRENDER_FFMPEG -DTLRENDER_FFMPEG_PLUGIN -DTLRENDER_JPEG -DTLRENDER_OCIO -DTLRENDER_OIIO -DTLRENDER_PNG -DTLRENDER_SDL2 -DTLRENDER_TIFF + DEP_FILE = tests/CMakeFiles/test_db.dir/__/src/db.cpp.o.d + FLAGS = -O3 -DNDEBUG -std=gnu++20 + INCLUDES = -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_db_autogen/include -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/../src -isystem /usr/include/qt6/QtTest -isystem /usr/include/qt6 -isystem /usr/include/qt6/QtCore -isystem /usr/lib64/qt6/mkspecs/linux-g++ -isystem /usr/include/qt6/QtSql + OBJECT_DIR = tests/CMakeFiles/test_db.dir + OBJECT_FILE_DIR = tests/CMakeFiles/test_db.dir/__/src + +build tests/CMakeFiles/test_db.dir/__/src/log_manager.cpp.o: CXX_COMPILER__test_db_unscanned_Release /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/log_manager.cpp || cmake_object_order_depends_target_test_db + DEFINES = -DFTK_API_GL_4_1 -DQT_CORE_LIB -DQT_NO_DEBUG -DQT_SQL_LIB -DQT_TESTCASE_BUILDDIR=\"/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests\" -DQT_TESTCASE_SOURCEDIR=\"/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests\" -DQT_TESTLIB_LIB -DTLRENDER_EXR -DTLRENDER_FFMPEG -DTLRENDER_FFMPEG_PLUGIN -DTLRENDER_JPEG -DTLRENDER_OCIO -DTLRENDER_OIIO -DTLRENDER_PNG -DTLRENDER_SDL2 -DTLRENDER_TIFF + DEP_FILE = tests/CMakeFiles/test_db.dir/__/src/log_manager.cpp.o.d + FLAGS = -O3 -DNDEBUG -std=gnu++20 + INCLUDES = -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_db_autogen/include -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/../src -isystem /usr/include/qt6/QtTest -isystem /usr/include/qt6 -isystem /usr/include/qt6/QtCore -isystem /usr/lib64/qt6/mkspecs/linux-g++ -isystem /usr/include/qt6/QtSql + OBJECT_DIR = tests/CMakeFiles/test_db.dir + OBJECT_FILE_DIR = tests/CMakeFiles/test_db.dir/__/src + + +# ============================================================================= +# Link build statements for EXECUTABLE target test_db + + +############################################# +# Link the executable tests/test_db + +build tests/test_db: CXX_EXECUTABLE_LINKER__test_db_Release tests/CMakeFiles/test_db.dir/test_db_autogen/mocs_compilation.cpp.o tests/CMakeFiles/test_db.dir/test_db.cpp.o tests/CMakeFiles/test_db.dir/__/src/db.cpp.o tests/CMakeFiles/test_db.dir/__/src/log_manager.cpp.o | /usr/lib64/libQt6Test.so.6.10.3 /usr/lib64/libQt6Sql.so.6.10.3 /usr/lib64/libQt6Core.so.6.10.3 || tests/test_db_autogen tests/test_db_autogen_timestamp_deps + DEP_FILE = tests/CMakeFiles/test_db.dir/link.d + FLAGS = -O3 -DNDEBUG + LINK_FLAGS = -Wl,--dependency-file=tests/CMakeFiles/test_db.dir/link.d + LINK_LIBRARIES = -Wl,-rpath,:::::::::::::::::::::::: /usr/lib64/libQt6Test.so.6.10.3 /usr/lib64/libQt6Sql.so.6.10.3 /usr/lib64/libQt6Core.so.6.10.3 + OBJECT_DIR = tests/CMakeFiles/test_db.dir + POST_BUILD = : + PRE_LINK = : + TARGET_FILE = tests/test_db + TARGET_PDB = test_db.dbg + +# ============================================================================= +# Object build statements for EXECUTABLE target test_models + + +############################################# +# Order-only phony target for test_models + +build cmake_object_order_depends_target_test_models: phony || tests/test_models_autogen tests/test_models_autogen/mocs_compilation.cpp tests/test_models_autogen/timestamp tests/test_models_autogen_timestamp_deps + +build tests/CMakeFiles/test_models.dir/test_models_autogen/mocs_compilation.cpp.o: CXX_COMPILER__test_models_unscanned_Release /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_models_autogen/mocs_compilation.cpp || cmake_object_order_depends_target_test_models + DEFINES = -DFTK_API_GL_4_1 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_NO_DEBUG -DQT_SQL_LIB -DQT_TESTCASE_BUILDDIR=\"/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests\" -DQT_TESTCASE_SOURCEDIR=\"/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests\" -DQT_TESTLIB_LIB -DQT_WIDGETS_LIB -DTLRENDER_EXR -DTLRENDER_FFMPEG -DTLRENDER_FFMPEG_PLUGIN -DTLRENDER_JPEG -DTLRENDER_OCIO -DTLRENDER_OIIO -DTLRENDER_PNG -DTLRENDER_SDL2 -DTLRENDER_TIFF + DEP_FILE = tests/CMakeFiles/test_models.dir/test_models_autogen/mocs_compilation.cpp.o.d + FLAGS = -O3 -DNDEBUG -std=gnu++20 + INCLUDES = -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_models_autogen/include -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/../src -isystem /usr/include/qt6/QtTest -isystem /usr/include/qt6 -isystem /usr/include/qt6/QtCore -isystem /usr/lib64/qt6/mkspecs/linux-g++ -isystem /usr/include/qt6/QtSql -isystem /usr/include/qt6/QtWidgets -isystem /usr/include/qt6/QtGui + OBJECT_DIR = tests/CMakeFiles/test_models.dir + OBJECT_FILE_DIR = tests/CMakeFiles/test_models.dir/test_models_autogen + +build tests/CMakeFiles/test_models.dir/test_models.cpp.o: CXX_COMPILER__test_models_unscanned_Release /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/test_models.cpp || cmake_object_order_depends_target_test_models + DEFINES = -DFTK_API_GL_4_1 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_NO_DEBUG -DQT_SQL_LIB -DQT_TESTCASE_BUILDDIR=\"/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests\" -DQT_TESTCASE_SOURCEDIR=\"/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests\" -DQT_TESTLIB_LIB -DQT_WIDGETS_LIB -DTLRENDER_EXR -DTLRENDER_FFMPEG -DTLRENDER_FFMPEG_PLUGIN -DTLRENDER_JPEG -DTLRENDER_OCIO -DTLRENDER_OIIO -DTLRENDER_PNG -DTLRENDER_SDL2 -DTLRENDER_TIFF + DEP_FILE = tests/CMakeFiles/test_models.dir/test_models.cpp.o.d + FLAGS = -O3 -DNDEBUG -std=gnu++20 + INCLUDES = -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_models_autogen/include -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/../src -isystem /usr/include/qt6/QtTest -isystem /usr/include/qt6 -isystem /usr/include/qt6/QtCore -isystem /usr/lib64/qt6/mkspecs/linux-g++ -isystem /usr/include/qt6/QtSql -isystem /usr/include/qt6/QtWidgets -isystem /usr/include/qt6/QtGui + OBJECT_DIR = tests/CMakeFiles/test_models.dir + OBJECT_FILE_DIR = tests/CMakeFiles/test_models.dir + +build tests/CMakeFiles/test_models.dir/__/src/assets_model.cpp.o: CXX_COMPILER__test_models_unscanned_Release /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/assets_model.cpp || cmake_object_order_depends_target_test_models + DEFINES = -DFTK_API_GL_4_1 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_NO_DEBUG -DQT_SQL_LIB -DQT_TESTCASE_BUILDDIR=\"/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests\" -DQT_TESTCASE_SOURCEDIR=\"/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests\" -DQT_TESTLIB_LIB -DQT_WIDGETS_LIB -DTLRENDER_EXR -DTLRENDER_FFMPEG -DTLRENDER_FFMPEG_PLUGIN -DTLRENDER_JPEG -DTLRENDER_OCIO -DTLRENDER_OIIO -DTLRENDER_PNG -DTLRENDER_SDL2 -DTLRENDER_TIFF + DEP_FILE = tests/CMakeFiles/test_models.dir/__/src/assets_model.cpp.o.d + FLAGS = -O3 -DNDEBUG -std=gnu++20 + INCLUDES = -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_models_autogen/include -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/../src -isystem /usr/include/qt6/QtTest -isystem /usr/include/qt6 -isystem /usr/include/qt6/QtCore -isystem /usr/lib64/qt6/mkspecs/linux-g++ -isystem /usr/include/qt6/QtSql -isystem /usr/include/qt6/QtWidgets -isystem /usr/include/qt6/QtGui + OBJECT_DIR = tests/CMakeFiles/test_models.dir + OBJECT_FILE_DIR = tests/CMakeFiles/test_models.dir/__/src + +build tests/CMakeFiles/test_models.dir/__/src/db.cpp.o: CXX_COMPILER__test_models_unscanned_Release /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/db.cpp || cmake_object_order_depends_target_test_models + DEFINES = -DFTK_API_GL_4_1 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_NO_DEBUG -DQT_SQL_LIB -DQT_TESTCASE_BUILDDIR=\"/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests\" -DQT_TESTCASE_SOURCEDIR=\"/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests\" -DQT_TESTLIB_LIB -DQT_WIDGETS_LIB -DTLRENDER_EXR -DTLRENDER_FFMPEG -DTLRENDER_FFMPEG_PLUGIN -DTLRENDER_JPEG -DTLRENDER_OCIO -DTLRENDER_OIIO -DTLRENDER_PNG -DTLRENDER_SDL2 -DTLRENDER_TIFF + DEP_FILE = tests/CMakeFiles/test_models.dir/__/src/db.cpp.o.d + FLAGS = -O3 -DNDEBUG -std=gnu++20 + INCLUDES = -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_models_autogen/include -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/../src -isystem /usr/include/qt6/QtTest -isystem /usr/include/qt6 -isystem /usr/include/qt6/QtCore -isystem /usr/lib64/qt6/mkspecs/linux-g++ -isystem /usr/include/qt6/QtSql -isystem /usr/include/qt6/QtWidgets -isystem /usr/include/qt6/QtGui + OBJECT_DIR = tests/CMakeFiles/test_models.dir + OBJECT_FILE_DIR = tests/CMakeFiles/test_models.dir/__/src + +build tests/CMakeFiles/test_models.dir/__/src/log_manager.cpp.o: CXX_COMPILER__test_models_unscanned_Release /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/log_manager.cpp || cmake_object_order_depends_target_test_models + DEFINES = -DFTK_API_GL_4_1 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_NO_DEBUG -DQT_SQL_LIB -DQT_TESTCASE_BUILDDIR=\"/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests\" -DQT_TESTCASE_SOURCEDIR=\"/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests\" -DQT_TESTLIB_LIB -DQT_WIDGETS_LIB -DTLRENDER_EXR -DTLRENDER_FFMPEG -DTLRENDER_FFMPEG_PLUGIN -DTLRENDER_JPEG -DTLRENDER_OCIO -DTLRENDER_OIIO -DTLRENDER_PNG -DTLRENDER_SDL2 -DTLRENDER_TIFF + DEP_FILE = tests/CMakeFiles/test_models.dir/__/src/log_manager.cpp.o.d + FLAGS = -O3 -DNDEBUG -std=gnu++20 + INCLUDES = -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_models_autogen/include -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/../src -isystem /usr/include/qt6/QtTest -isystem /usr/include/qt6 -isystem /usr/include/qt6/QtCore -isystem /usr/lib64/qt6/mkspecs/linux-g++ -isystem /usr/include/qt6/QtSql -isystem /usr/include/qt6/QtWidgets -isystem /usr/include/qt6/QtGui + OBJECT_DIR = tests/CMakeFiles/test_models.dir + OBJECT_FILE_DIR = tests/CMakeFiles/test_models.dir/__/src + + +# ============================================================================= +# Link build statements for EXECUTABLE target test_models + + +############################################# +# Link the executable tests/test_models + +build tests/test_models: CXX_EXECUTABLE_LINKER__test_models_Release tests/CMakeFiles/test_models.dir/test_models_autogen/mocs_compilation.cpp.o tests/CMakeFiles/test_models.dir/test_models.cpp.o tests/CMakeFiles/test_models.dir/__/src/assets_model.cpp.o tests/CMakeFiles/test_models.dir/__/src/db.cpp.o tests/CMakeFiles/test_models.dir/__/src/log_manager.cpp.o | /usr/lib64/libQt6Test.so.6.10.3 /usr/lib64/libQt6Sql.so.6.10.3 /usr/lib64/libQt6Widgets.so.6.10.3 /usr/lib64/libQt6Gui.so.6.10.3 /usr/lib64/libGLX.so /usr/lib64/libOpenGL.so /usr/lib64/libQt6Core.so.6.10.3 || tests/test_models_autogen tests/test_models_autogen_timestamp_deps + DEP_FILE = tests/CMakeFiles/test_models.dir/link.d + FLAGS = -O3 -DNDEBUG + LINK_FLAGS = -Wl,--dependency-file=tests/CMakeFiles/test_models.dir/link.d + LINK_LIBRARIES = -Wl,-rpath,:::::::::::::::::::::::: /usr/lib64/libQt6Test.so.6.10.3 /usr/lib64/libQt6Sql.so.6.10.3 /usr/lib64/libQt6Widgets.so.6.10.3 /usr/lib64/libQt6Gui.so.6.10.3 /usr/lib64/libGLX.so /usr/lib64/libOpenGL.so /usr/lib64/libQt6Core.so.6.10.3 + OBJECT_DIR = tests/CMakeFiles/test_models.dir + POST_BUILD = : + PRE_LINK = : + TARGET_FILE = tests/test_models + TARGET_PDB = test_models.dbg + +# ============================================================================= +# Object build statements for EXECUTABLE target test_sequence_detector + + +############################################# +# Order-only phony target for test_sequence_detector + +build cmake_object_order_depends_target_test_sequence_detector: phony || tests/test_sequence_detector_autogen tests/test_sequence_detector_autogen/mocs_compilation.cpp tests/test_sequence_detector_autogen/timestamp tests/test_sequence_detector_autogen_timestamp_deps + +build tests/CMakeFiles/test_sequence_detector.dir/test_sequence_detector_autogen/mocs_compilation.cpp.o: CXX_COMPILER__test_sequence_detector_unscanned_Release /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_sequence_detector_autogen/mocs_compilation.cpp || cmake_object_order_depends_target_test_sequence_detector + DEFINES = -DFTK_API_GL_4_1 -DQT_CORE_LIB -DQT_NO_DEBUG -DQT_TESTCASE_BUILDDIR=\"/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests\" -DQT_TESTCASE_SOURCEDIR=\"/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests\" -DQT_TESTLIB_LIB -DTLRENDER_EXR -DTLRENDER_FFMPEG -DTLRENDER_FFMPEG_PLUGIN -DTLRENDER_JPEG -DTLRENDER_OCIO -DTLRENDER_OIIO -DTLRENDER_PNG -DTLRENDER_SDL2 -DTLRENDER_TIFF + DEP_FILE = tests/CMakeFiles/test_sequence_detector.dir/test_sequence_detector_autogen/mocs_compilation.cpp.o.d + FLAGS = -O3 -DNDEBUG -std=gnu++20 + INCLUDES = -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_sequence_detector_autogen/include -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/../src -isystem /usr/include/qt6/QtTest -isystem /usr/include/qt6 -isystem /usr/include/qt6/QtCore -isystem /usr/lib64/qt6/mkspecs/linux-g++ + OBJECT_DIR = tests/CMakeFiles/test_sequence_detector.dir + OBJECT_FILE_DIR = tests/CMakeFiles/test_sequence_detector.dir/test_sequence_detector_autogen + +build tests/CMakeFiles/test_sequence_detector.dir/test_sequence_detector.cpp.o: CXX_COMPILER__test_sequence_detector_unscanned_Release /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/test_sequence_detector.cpp || cmake_object_order_depends_target_test_sequence_detector + DEFINES = -DFTK_API_GL_4_1 -DQT_CORE_LIB -DQT_NO_DEBUG -DQT_TESTCASE_BUILDDIR=\"/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests\" -DQT_TESTCASE_SOURCEDIR=\"/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests\" -DQT_TESTLIB_LIB -DTLRENDER_EXR -DTLRENDER_FFMPEG -DTLRENDER_FFMPEG_PLUGIN -DTLRENDER_JPEG -DTLRENDER_OCIO -DTLRENDER_OIIO -DTLRENDER_PNG -DTLRENDER_SDL2 -DTLRENDER_TIFF + DEP_FILE = tests/CMakeFiles/test_sequence_detector.dir/test_sequence_detector.cpp.o.d + FLAGS = -O3 -DNDEBUG -std=gnu++20 + INCLUDES = -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_sequence_detector_autogen/include -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/../src -isystem /usr/include/qt6/QtTest -isystem /usr/include/qt6 -isystem /usr/include/qt6/QtCore -isystem /usr/lib64/qt6/mkspecs/linux-g++ + OBJECT_DIR = tests/CMakeFiles/test_sequence_detector.dir + OBJECT_FILE_DIR = tests/CMakeFiles/test_sequence_detector.dir + +build tests/CMakeFiles/test_sequence_detector.dir/__/src/sequence_detector.cpp.o: CXX_COMPILER__test_sequence_detector_unscanned_Release /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/sequence_detector.cpp || cmake_object_order_depends_target_test_sequence_detector + DEFINES = -DFTK_API_GL_4_1 -DQT_CORE_LIB -DQT_NO_DEBUG -DQT_TESTCASE_BUILDDIR=\"/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests\" -DQT_TESTCASE_SOURCEDIR=\"/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests\" -DQT_TESTLIB_LIB -DTLRENDER_EXR -DTLRENDER_FFMPEG -DTLRENDER_FFMPEG_PLUGIN -DTLRENDER_JPEG -DTLRENDER_OCIO -DTLRENDER_OIIO -DTLRENDER_PNG -DTLRENDER_SDL2 -DTLRENDER_TIFF + DEP_FILE = tests/CMakeFiles/test_sequence_detector.dir/__/src/sequence_detector.cpp.o.d + FLAGS = -O3 -DNDEBUG -std=gnu++20 + INCLUDES = -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_sequence_detector_autogen/include -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/../src -isystem /usr/include/qt6/QtTest -isystem /usr/include/qt6 -isystem /usr/include/qt6/QtCore -isystem /usr/lib64/qt6/mkspecs/linux-g++ + OBJECT_DIR = tests/CMakeFiles/test_sequence_detector.dir + OBJECT_FILE_DIR = tests/CMakeFiles/test_sequence_detector.dir/__/src + + +# ============================================================================= +# Link build statements for EXECUTABLE target test_sequence_detector + + +############################################# +# Link the executable tests/test_sequence_detector + +build tests/test_sequence_detector: CXX_EXECUTABLE_LINKER__test_sequence_detector_Release tests/CMakeFiles/test_sequence_detector.dir/test_sequence_detector_autogen/mocs_compilation.cpp.o tests/CMakeFiles/test_sequence_detector.dir/test_sequence_detector.cpp.o tests/CMakeFiles/test_sequence_detector.dir/__/src/sequence_detector.cpp.o | /usr/lib64/libQt6Test.so.6.10.3 /usr/lib64/libQt6Core.so.6.10.3 || tests/test_sequence_detector_autogen tests/test_sequence_detector_autogen_timestamp_deps + DEP_FILE = tests/CMakeFiles/test_sequence_detector.dir/link.d + FLAGS = -O3 -DNDEBUG + LINK_FLAGS = -Wl,--dependency-file=tests/CMakeFiles/test_sequence_detector.dir/link.d + LINK_LIBRARIES = -Wl,-rpath,:::::::::::::::::::::::: /usr/lib64/libQt6Test.so.6.10.3 /usr/lib64/libQt6Core.so.6.10.3 + OBJECT_DIR = tests/CMakeFiles/test_sequence_detector.dir + POST_BUILD = : + PRE_LINK = : + TARGET_FILE = tests/test_sequence_detector + TARGET_PDB = test_sequence_detector.dbg + +# ============================================================================= +# Object build statements for EXECUTABLE target test_importer + + +############################################# +# Order-only phony target for test_importer + +build cmake_object_order_depends_target_test_importer: phony || tests/test_importer_autogen tests/test_importer_autogen/mocs_compilation.cpp tests/test_importer_autogen/timestamp tests/test_importer_autogen_timestamp_deps + +build tests/CMakeFiles/test_importer.dir/test_importer_autogen/mocs_compilation.cpp.o: CXX_COMPILER__test_importer_unscanned_Release /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_importer_autogen/mocs_compilation.cpp || cmake_object_order_depends_target_test_importer + DEFINES = -DFTK_API_GL_4_1 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_NO_DEBUG -DQT_SQL_LIB -DQT_TESTCASE_BUILDDIR=\"/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests\" -DQT_TESTCASE_SOURCEDIR=\"/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests\" -DQT_TESTLIB_LIB -DQT_WIDGETS_LIB -DTLRENDER_EXR -DTLRENDER_FFMPEG -DTLRENDER_FFMPEG_PLUGIN -DTLRENDER_JPEG -DTLRENDER_OCIO -DTLRENDER_OIIO -DTLRENDER_PNG -DTLRENDER_SDL2 -DTLRENDER_TIFF + DEP_FILE = tests/CMakeFiles/test_importer.dir/test_importer_autogen/mocs_compilation.cpp.o.d + FLAGS = -O3 -DNDEBUG -std=gnu++20 + INCLUDES = -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_importer_autogen/include -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/../src -isystem /usr/include/qt6/QtTest -isystem /usr/include/qt6 -isystem /usr/include/qt6/QtCore -isystem /usr/lib64/qt6/mkspecs/linux-g++ -isystem /usr/include/qt6/QtSql -isystem /usr/include/qt6/QtWidgets -isystem /usr/include/qt6/QtGui + OBJECT_DIR = tests/CMakeFiles/test_importer.dir + OBJECT_FILE_DIR = tests/CMakeFiles/test_importer.dir/test_importer_autogen + +build tests/CMakeFiles/test_importer.dir/test_importer.cpp.o: CXX_COMPILER__test_importer_unscanned_Release /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/test_importer.cpp || cmake_object_order_depends_target_test_importer + DEFINES = -DFTK_API_GL_4_1 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_NO_DEBUG -DQT_SQL_LIB -DQT_TESTCASE_BUILDDIR=\"/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests\" -DQT_TESTCASE_SOURCEDIR=\"/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests\" -DQT_TESTLIB_LIB -DQT_WIDGETS_LIB -DTLRENDER_EXR -DTLRENDER_FFMPEG -DTLRENDER_FFMPEG_PLUGIN -DTLRENDER_JPEG -DTLRENDER_OCIO -DTLRENDER_OIIO -DTLRENDER_PNG -DTLRENDER_SDL2 -DTLRENDER_TIFF + DEP_FILE = tests/CMakeFiles/test_importer.dir/test_importer.cpp.o.d + FLAGS = -O3 -DNDEBUG -std=gnu++20 + INCLUDES = -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_importer_autogen/include -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/../src -isystem /usr/include/qt6/QtTest -isystem /usr/include/qt6 -isystem /usr/include/qt6/QtCore -isystem /usr/lib64/qt6/mkspecs/linux-g++ -isystem /usr/include/qt6/QtSql -isystem /usr/include/qt6/QtWidgets -isystem /usr/include/qt6/QtGui + OBJECT_DIR = tests/CMakeFiles/test_importer.dir + OBJECT_FILE_DIR = tests/CMakeFiles/test_importer.dir + +build tests/CMakeFiles/test_importer.dir/__/src/importer.cpp.o: CXX_COMPILER__test_importer_unscanned_Release /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/importer.cpp || cmake_object_order_depends_target_test_importer + DEFINES = -DFTK_API_GL_4_1 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_NO_DEBUG -DQT_SQL_LIB -DQT_TESTCASE_BUILDDIR=\"/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests\" -DQT_TESTCASE_SOURCEDIR=\"/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests\" -DQT_TESTLIB_LIB -DQT_WIDGETS_LIB -DTLRENDER_EXR -DTLRENDER_FFMPEG -DTLRENDER_FFMPEG_PLUGIN -DTLRENDER_JPEG -DTLRENDER_OCIO -DTLRENDER_OIIO -DTLRENDER_PNG -DTLRENDER_SDL2 -DTLRENDER_TIFF + DEP_FILE = tests/CMakeFiles/test_importer.dir/__/src/importer.cpp.o.d + FLAGS = -O3 -DNDEBUG -std=gnu++20 + INCLUDES = -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_importer_autogen/include -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/../src -isystem /usr/include/qt6/QtTest -isystem /usr/include/qt6 -isystem /usr/include/qt6/QtCore -isystem /usr/lib64/qt6/mkspecs/linux-g++ -isystem /usr/include/qt6/QtSql -isystem /usr/include/qt6/QtWidgets -isystem /usr/include/qt6/QtGui + OBJECT_DIR = tests/CMakeFiles/test_importer.dir + OBJECT_FILE_DIR = tests/CMakeFiles/test_importer.dir/__/src + +build tests/CMakeFiles/test_importer.dir/__/src/db.cpp.o: CXX_COMPILER__test_importer_unscanned_Release /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/db.cpp || cmake_object_order_depends_target_test_importer + DEFINES = -DFTK_API_GL_4_1 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_NO_DEBUG -DQT_SQL_LIB -DQT_TESTCASE_BUILDDIR=\"/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests\" -DQT_TESTCASE_SOURCEDIR=\"/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests\" -DQT_TESTLIB_LIB -DQT_WIDGETS_LIB -DTLRENDER_EXR -DTLRENDER_FFMPEG -DTLRENDER_FFMPEG_PLUGIN -DTLRENDER_JPEG -DTLRENDER_OCIO -DTLRENDER_OIIO -DTLRENDER_PNG -DTLRENDER_SDL2 -DTLRENDER_TIFF + DEP_FILE = tests/CMakeFiles/test_importer.dir/__/src/db.cpp.o.d + FLAGS = -O3 -DNDEBUG -std=gnu++20 + INCLUDES = -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_importer_autogen/include -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/../src -isystem /usr/include/qt6/QtTest -isystem /usr/include/qt6 -isystem /usr/include/qt6/QtCore -isystem /usr/lib64/qt6/mkspecs/linux-g++ -isystem /usr/include/qt6/QtSql -isystem /usr/include/qt6/QtWidgets -isystem /usr/include/qt6/QtGui + OBJECT_DIR = tests/CMakeFiles/test_importer.dir + OBJECT_FILE_DIR = tests/CMakeFiles/test_importer.dir/__/src + +build tests/CMakeFiles/test_importer.dir/__/src/log_manager.cpp.o: CXX_COMPILER__test_importer_unscanned_Release /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/log_manager.cpp || cmake_object_order_depends_target_test_importer + DEFINES = -DFTK_API_GL_4_1 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_NO_DEBUG -DQT_SQL_LIB -DQT_TESTCASE_BUILDDIR=\"/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests\" -DQT_TESTCASE_SOURCEDIR=\"/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests\" -DQT_TESTLIB_LIB -DQT_WIDGETS_LIB -DTLRENDER_EXR -DTLRENDER_FFMPEG -DTLRENDER_FFMPEG_PLUGIN -DTLRENDER_JPEG -DTLRENDER_OCIO -DTLRENDER_OIIO -DTLRENDER_PNG -DTLRENDER_SDL2 -DTLRENDER_TIFF + DEP_FILE = tests/CMakeFiles/test_importer.dir/__/src/log_manager.cpp.o.d + FLAGS = -O3 -DNDEBUG -std=gnu++20 + INCLUDES = -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_importer_autogen/include -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/../src -isystem /usr/include/qt6/QtTest -isystem /usr/include/qt6 -isystem /usr/include/qt6/QtCore -isystem /usr/lib64/qt6/mkspecs/linux-g++ -isystem /usr/include/qt6/QtSql -isystem /usr/include/qt6/QtWidgets -isystem /usr/include/qt6/QtGui + OBJECT_DIR = tests/CMakeFiles/test_importer.dir + OBJECT_FILE_DIR = tests/CMakeFiles/test_importer.dir/__/src + +build tests/CMakeFiles/test_importer.dir/__/src/sequence_detector.cpp.o: CXX_COMPILER__test_importer_unscanned_Release /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/sequence_detector.cpp || cmake_object_order_depends_target_test_importer + DEFINES = -DFTK_API_GL_4_1 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_NO_DEBUG -DQT_SQL_LIB -DQT_TESTCASE_BUILDDIR=\"/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests\" -DQT_TESTCASE_SOURCEDIR=\"/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests\" -DQT_TESTLIB_LIB -DQT_WIDGETS_LIB -DTLRENDER_EXR -DTLRENDER_FFMPEG -DTLRENDER_FFMPEG_PLUGIN -DTLRENDER_JPEG -DTLRENDER_OCIO -DTLRENDER_OIIO -DTLRENDER_PNG -DTLRENDER_SDL2 -DTLRENDER_TIFF + DEP_FILE = tests/CMakeFiles/test_importer.dir/__/src/sequence_detector.cpp.o.d + FLAGS = -O3 -DNDEBUG -std=gnu++20 + INCLUDES = -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_importer_autogen/include -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/../src -isystem /usr/include/qt6/QtTest -isystem /usr/include/qt6 -isystem /usr/include/qt6/QtCore -isystem /usr/lib64/qt6/mkspecs/linux-g++ -isystem /usr/include/qt6/QtSql -isystem /usr/include/qt6/QtWidgets -isystem /usr/include/qt6/QtGui + OBJECT_DIR = tests/CMakeFiles/test_importer.dir + OBJECT_FILE_DIR = tests/CMakeFiles/test_importer.dir/__/src + + +# ============================================================================= +# Link build statements for EXECUTABLE target test_importer + + +############################################# +# Link the executable tests/test_importer + +build tests/test_importer: CXX_EXECUTABLE_LINKER__test_importer_Release tests/CMakeFiles/test_importer.dir/test_importer_autogen/mocs_compilation.cpp.o tests/CMakeFiles/test_importer.dir/test_importer.cpp.o tests/CMakeFiles/test_importer.dir/__/src/importer.cpp.o tests/CMakeFiles/test_importer.dir/__/src/db.cpp.o tests/CMakeFiles/test_importer.dir/__/src/log_manager.cpp.o tests/CMakeFiles/test_importer.dir/__/src/sequence_detector.cpp.o | /usr/lib64/libQt6Test.so.6.10.3 /usr/lib64/libQt6Sql.so.6.10.3 /usr/lib64/libQt6Widgets.so.6.10.3 /usr/lib64/libQt6Gui.so.6.10.3 /usr/lib64/libGLX.so /usr/lib64/libOpenGL.so /usr/lib64/libQt6Core.so.6.10.3 || tests/test_importer_autogen tests/test_importer_autogen_timestamp_deps + DEP_FILE = tests/CMakeFiles/test_importer.dir/link.d + FLAGS = -O3 -DNDEBUG + LINK_FLAGS = -Wl,--dependency-file=tests/CMakeFiles/test_importer.dir/link.d + LINK_LIBRARIES = -Wl,-rpath,:::::::::::::::::::::::: /usr/lib64/libQt6Test.so.6.10.3 /usr/lib64/libQt6Sql.so.6.10.3 /usr/lib64/libQt6Widgets.so.6.10.3 /usr/lib64/libQt6Gui.so.6.10.3 /usr/lib64/libGLX.so /usr/lib64/libOpenGL.so /usr/lib64/libQt6Core.so.6.10.3 + OBJECT_DIR = tests/CMakeFiles/test_importer.dir + POST_BUILD = : + PRE_LINK = : + TARGET_FILE = tests/test_importer + TARGET_PDB = test_importer.dbg + +# ============================================================================= +# Object build statements for EXECUTABLE target test_utils + + +############################################# +# Order-only phony target for test_utils + +build cmake_object_order_depends_target_test_utils: phony || tests/test_utils_autogen tests/test_utils_autogen/mocs_compilation.cpp tests/test_utils_autogen/timestamp tests/test_utils_autogen_timestamp_deps + +build tests/CMakeFiles/test_utils.dir/test_utils_autogen/mocs_compilation.cpp.o: CXX_COMPILER__test_utils_unscanned_Release /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_utils_autogen/mocs_compilation.cpp || cmake_object_order_depends_target_test_utils + DEFINES = -DFTK_API_GL_4_1 -DQT_CORE_LIB -DQT_NO_DEBUG -DQT_TESTCASE_BUILDDIR=\"/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests\" -DQT_TESTCASE_SOURCEDIR=\"/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests\" -DQT_TESTLIB_LIB -DTLRENDER_EXR -DTLRENDER_FFMPEG -DTLRENDER_FFMPEG_PLUGIN -DTLRENDER_JPEG -DTLRENDER_OCIO -DTLRENDER_OIIO -DTLRENDER_PNG -DTLRENDER_SDL2 -DTLRENDER_TIFF + DEP_FILE = tests/CMakeFiles/test_utils.dir/test_utils_autogen/mocs_compilation.cpp.o.d + FLAGS = -O3 -DNDEBUG -std=gnu++20 + INCLUDES = -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_utils_autogen/include -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/../src -isystem /usr/include/qt6/QtTest -isystem /usr/include/qt6 -isystem /usr/include/qt6/QtCore -isystem /usr/lib64/qt6/mkspecs/linux-g++ + OBJECT_DIR = tests/CMakeFiles/test_utils.dir + OBJECT_FILE_DIR = tests/CMakeFiles/test_utils.dir/test_utils_autogen + +build tests/CMakeFiles/test_utils.dir/test_utils.cpp.o: CXX_COMPILER__test_utils_unscanned_Release /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/test_utils.cpp || cmake_object_order_depends_target_test_utils + DEFINES = -DFTK_API_GL_4_1 -DQT_CORE_LIB -DQT_NO_DEBUG -DQT_TESTCASE_BUILDDIR=\"/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests\" -DQT_TESTCASE_SOURCEDIR=\"/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests\" -DQT_TESTLIB_LIB -DTLRENDER_EXR -DTLRENDER_FFMPEG -DTLRENDER_FFMPEG_PLUGIN -DTLRENDER_JPEG -DTLRENDER_OCIO -DTLRENDER_OIIO -DTLRENDER_PNG -DTLRENDER_SDL2 -DTLRENDER_TIFF + DEP_FILE = tests/CMakeFiles/test_utils.dir/test_utils.cpp.o.d + FLAGS = -O3 -DNDEBUG -std=gnu++20 + INCLUDES = -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_utils_autogen/include -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/../src -isystem /usr/include/qt6/QtTest -isystem /usr/include/qt6 -isystem /usr/include/qt6/QtCore -isystem /usr/lib64/qt6/mkspecs/linux-g++ + OBJECT_DIR = tests/CMakeFiles/test_utils.dir + OBJECT_FILE_DIR = tests/CMakeFiles/test_utils.dir + + +# ============================================================================= +# Link build statements for EXECUTABLE target test_utils + + +############################################# +# Link the executable tests/test_utils + +build tests/test_utils: CXX_EXECUTABLE_LINKER__test_utils_Release tests/CMakeFiles/test_utils.dir/test_utils_autogen/mocs_compilation.cpp.o tests/CMakeFiles/test_utils.dir/test_utils.cpp.o | /usr/lib64/libQt6Test.so.6.10.3 /usr/lib64/libQt6Core.so.6.10.3 || tests/test_utils_autogen tests/test_utils_autogen_timestamp_deps + DEP_FILE = tests/CMakeFiles/test_utils.dir/link.d + FLAGS = -O3 -DNDEBUG + LINK_FLAGS = -Wl,--dependency-file=tests/CMakeFiles/test_utils.dir/link.d + LINK_LIBRARIES = -Wl,-rpath,:::::::::::::::::::::::: /usr/lib64/libQt6Test.so.6.10.3 /usr/lib64/libQt6Core.so.6.10.3 + OBJECT_DIR = tests/CMakeFiles/test_utils.dir + POST_BUILD = : + PRE_LINK = : + TARGET_FILE = tests/test_utils + TARGET_PDB = test_utils.dbg + +# ============================================================================= +# Object build statements for EXECUTABLE target test_live_preview_manager + + +############################################# +# Order-only phony target for test_live_preview_manager + +build cmake_object_order_depends_target_test_live_preview_manager: phony || tests/test_live_preview_manager_autogen tests/test_live_preview_manager_autogen/mocs_compilation.cpp tests/test_live_preview_manager_autogen/timestamp tests/test_live_preview_manager_autogen_timestamp_deps + +build tests/CMakeFiles/test_live_preview_manager.dir/test_live_preview_manager_autogen/mocs_compilation.cpp.o: CXX_COMPILER__test_live_preview_manager_unscanned_Release /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_live_preview_manager_autogen/mocs_compilation.cpp || cmake_object_order_depends_target_test_live_preview_manager + DEFINES = -DFTK_API_GL_4_1 -DHAVE_FFMPEG=0 -DHAVE_OPENIMAGEIO=0 -DHAVE_TLRENDER=0 -DQT_CONCURRENT_LIB -DQT_CORE_LIB -DQT_GUI_LIB -DQT_NO_DEBUG -DQT_TESTCASE_BUILDDIR=\"/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests\" -DQT_TESTCASE_SOURCEDIR=\"/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests\" -DQT_TESTLIB_LIB -DQT_WIDGETS_LIB -DTLRENDER_EXR -DTLRENDER_FFMPEG -DTLRENDER_FFMPEG_PLUGIN -DTLRENDER_JPEG -DTLRENDER_OCIO -DTLRENDER_OIIO -DTLRENDER_PNG -DTLRENDER_SDL2 -DTLRENDER_TIFF + DEP_FILE = tests/CMakeFiles/test_live_preview_manager.dir/test_live_preview_manager_autogen/mocs_compilation.cpp.o.d + FLAGS = -O3 -DNDEBUG -std=gnu++20 + INCLUDES = -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_live_preview_manager_autogen/include -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/../src -isystem /usr/include/qt6/QtTest -isystem /usr/include/qt6 -isystem /usr/include/qt6/QtCore -isystem /usr/lib64/qt6/mkspecs/linux-g++ -isystem /usr/include/qt6/QtWidgets -isystem /usr/include/qt6/QtGui -isystem /usr/include/qt6/QtConcurrent + OBJECT_DIR = tests/CMakeFiles/test_live_preview_manager.dir + OBJECT_FILE_DIR = tests/CMakeFiles/test_live_preview_manager.dir/test_live_preview_manager_autogen + +build tests/CMakeFiles/test_live_preview_manager.dir/test_live_preview_manager.cpp.o: CXX_COMPILER__test_live_preview_manager_unscanned_Release /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/test_live_preview_manager.cpp || cmake_object_order_depends_target_test_live_preview_manager + DEFINES = -DFTK_API_GL_4_1 -DHAVE_FFMPEG=0 -DHAVE_OPENIMAGEIO=0 -DHAVE_TLRENDER=0 -DQT_CONCURRENT_LIB -DQT_CORE_LIB -DQT_GUI_LIB -DQT_NO_DEBUG -DQT_TESTCASE_BUILDDIR=\"/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests\" -DQT_TESTCASE_SOURCEDIR=\"/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests\" -DQT_TESTLIB_LIB -DQT_WIDGETS_LIB -DTLRENDER_EXR -DTLRENDER_FFMPEG -DTLRENDER_FFMPEG_PLUGIN -DTLRENDER_JPEG -DTLRENDER_OCIO -DTLRENDER_OIIO -DTLRENDER_PNG -DTLRENDER_SDL2 -DTLRENDER_TIFF + DEP_FILE = tests/CMakeFiles/test_live_preview_manager.dir/test_live_preview_manager.cpp.o.d + FLAGS = -O3 -DNDEBUG -std=gnu++20 + INCLUDES = -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_live_preview_manager_autogen/include -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/../src -isystem /usr/include/qt6/QtTest -isystem /usr/include/qt6 -isystem /usr/include/qt6/QtCore -isystem /usr/lib64/qt6/mkspecs/linux-g++ -isystem /usr/include/qt6/QtWidgets -isystem /usr/include/qt6/QtGui -isystem /usr/include/qt6/QtConcurrent + OBJECT_DIR = tests/CMakeFiles/test_live_preview_manager.dir + OBJECT_FILE_DIR = tests/CMakeFiles/test_live_preview_manager.dir + +build tests/CMakeFiles/test_live_preview_manager.dir/__/src/live_preview_manager.cpp.o: CXX_COMPILER__test_live_preview_manager_unscanned_Release /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/live_preview_manager.cpp || cmake_object_order_depends_target_test_live_preview_manager + DEFINES = -DFTK_API_GL_4_1 -DHAVE_FFMPEG=0 -DHAVE_OPENIMAGEIO=0 -DHAVE_TLRENDER=0 -DQT_CONCURRENT_LIB -DQT_CORE_LIB -DQT_GUI_LIB -DQT_NO_DEBUG -DQT_TESTCASE_BUILDDIR=\"/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests\" -DQT_TESTCASE_SOURCEDIR=\"/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests\" -DQT_TESTLIB_LIB -DQT_WIDGETS_LIB -DTLRENDER_EXR -DTLRENDER_FFMPEG -DTLRENDER_FFMPEG_PLUGIN -DTLRENDER_JPEG -DTLRENDER_OCIO -DTLRENDER_OIIO -DTLRENDER_PNG -DTLRENDER_SDL2 -DTLRENDER_TIFF + DEP_FILE = tests/CMakeFiles/test_live_preview_manager.dir/__/src/live_preview_manager.cpp.o.d + FLAGS = -O3 -DNDEBUG -std=gnu++20 + INCLUDES = -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_live_preview_manager_autogen/include -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/../src -isystem /usr/include/qt6/QtTest -isystem /usr/include/qt6 -isystem /usr/include/qt6/QtCore -isystem /usr/lib64/qt6/mkspecs/linux-g++ -isystem /usr/include/qt6/QtWidgets -isystem /usr/include/qt6/QtGui -isystem /usr/include/qt6/QtConcurrent + OBJECT_DIR = tests/CMakeFiles/test_live_preview_manager.dir + OBJECT_FILE_DIR = tests/CMakeFiles/test_live_preview_manager.dir/__/src + +build tests/CMakeFiles/test_live_preview_manager.dir/__/src/thumbnail_cache_manager.cpp.o: CXX_COMPILER__test_live_preview_manager_unscanned_Release /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/thumbnail_cache_manager.cpp || cmake_object_order_depends_target_test_live_preview_manager + DEFINES = -DFTK_API_GL_4_1 -DHAVE_FFMPEG=0 -DHAVE_OPENIMAGEIO=0 -DHAVE_TLRENDER=0 -DQT_CONCURRENT_LIB -DQT_CORE_LIB -DQT_GUI_LIB -DQT_NO_DEBUG -DQT_TESTCASE_BUILDDIR=\"/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests\" -DQT_TESTCASE_SOURCEDIR=\"/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests\" -DQT_TESTLIB_LIB -DQT_WIDGETS_LIB -DTLRENDER_EXR -DTLRENDER_FFMPEG -DTLRENDER_FFMPEG_PLUGIN -DTLRENDER_JPEG -DTLRENDER_OCIO -DTLRENDER_OIIO -DTLRENDER_PNG -DTLRENDER_SDL2 -DTLRENDER_TIFF + DEP_FILE = tests/CMakeFiles/test_live_preview_manager.dir/__/src/thumbnail_cache_manager.cpp.o.d + FLAGS = -O3 -DNDEBUG -std=gnu++20 + INCLUDES = -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_live_preview_manager_autogen/include -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/../src -isystem /usr/include/qt6/QtTest -isystem /usr/include/qt6 -isystem /usr/include/qt6/QtCore -isystem /usr/lib64/qt6/mkspecs/linux-g++ -isystem /usr/include/qt6/QtWidgets -isystem /usr/include/qt6/QtGui -isystem /usr/include/qt6/QtConcurrent + OBJECT_DIR = tests/CMakeFiles/test_live_preview_manager.dir + OBJECT_FILE_DIR = tests/CMakeFiles/test_live_preview_manager.dir/__/src + +build tests/CMakeFiles/test_live_preview_manager.dir/__/src/oiio_image_loader.cpp.o: CXX_COMPILER__test_live_preview_manager_unscanned_Release /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/oiio_image_loader.cpp || cmake_object_order_depends_target_test_live_preview_manager + DEFINES = -DFTK_API_GL_4_1 -DHAVE_FFMPEG=0 -DHAVE_OPENIMAGEIO=0 -DHAVE_TLRENDER=0 -DQT_CONCURRENT_LIB -DQT_CORE_LIB -DQT_GUI_LIB -DQT_NO_DEBUG -DQT_TESTCASE_BUILDDIR=\"/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests\" -DQT_TESTCASE_SOURCEDIR=\"/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests\" -DQT_TESTLIB_LIB -DQT_WIDGETS_LIB -DTLRENDER_EXR -DTLRENDER_FFMPEG -DTLRENDER_FFMPEG_PLUGIN -DTLRENDER_JPEG -DTLRENDER_OCIO -DTLRENDER_OIIO -DTLRENDER_PNG -DTLRENDER_SDL2 -DTLRENDER_TIFF + DEP_FILE = tests/CMakeFiles/test_live_preview_manager.dir/__/src/oiio_image_loader.cpp.o.d + FLAGS = -O3 -DNDEBUG -std=gnu++20 + INCLUDES = -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_live_preview_manager_autogen/include -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/../src -isystem /usr/include/qt6/QtTest -isystem /usr/include/qt6 -isystem /usr/include/qt6/QtCore -isystem /usr/lib64/qt6/mkspecs/linux-g++ -isystem /usr/include/qt6/QtWidgets -isystem /usr/include/qt6/QtGui -isystem /usr/include/qt6/QtConcurrent + OBJECT_DIR = tests/CMakeFiles/test_live_preview_manager.dir + OBJECT_FILE_DIR = tests/CMakeFiles/test_live_preview_manager.dir/__/src + +build tests/CMakeFiles/test_live_preview_manager.dir/__/src/utils.cpp.o: CXX_COMPILER__test_live_preview_manager_unscanned_Release /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/utils.cpp || cmake_object_order_depends_target_test_live_preview_manager + DEFINES = -DFTK_API_GL_4_1 -DHAVE_FFMPEG=0 -DHAVE_OPENIMAGEIO=0 -DHAVE_TLRENDER=0 -DQT_CONCURRENT_LIB -DQT_CORE_LIB -DQT_GUI_LIB -DQT_NO_DEBUG -DQT_TESTCASE_BUILDDIR=\"/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests\" -DQT_TESTCASE_SOURCEDIR=\"/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests\" -DQT_TESTLIB_LIB -DQT_WIDGETS_LIB -DTLRENDER_EXR -DTLRENDER_FFMPEG -DTLRENDER_FFMPEG_PLUGIN -DTLRENDER_JPEG -DTLRENDER_OCIO -DTLRENDER_OIIO -DTLRENDER_PNG -DTLRENDER_SDL2 -DTLRENDER_TIFF + DEP_FILE = tests/CMakeFiles/test_live_preview_manager.dir/__/src/utils.cpp.o.d + FLAGS = -O3 -DNDEBUG -std=gnu++20 + INCLUDES = -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_live_preview_manager_autogen/include -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/../src -isystem /usr/include/qt6/QtTest -isystem /usr/include/qt6 -isystem /usr/include/qt6/QtCore -isystem /usr/lib64/qt6/mkspecs/linux-g++ -isystem /usr/include/qt6/QtWidgets -isystem /usr/include/qt6/QtGui -isystem /usr/include/qt6/QtConcurrent + OBJECT_DIR = tests/CMakeFiles/test_live_preview_manager.dir + OBJECT_FILE_DIR = tests/CMakeFiles/test_live_preview_manager.dir/__/src + + +# ============================================================================= +# Link build statements for EXECUTABLE target test_live_preview_manager + + +############################################# +# Link the executable tests/test_live_preview_manager + +build tests/test_live_preview_manager: CXX_EXECUTABLE_LINKER__test_live_preview_manager_Release tests/CMakeFiles/test_live_preview_manager.dir/test_live_preview_manager_autogen/mocs_compilation.cpp.o tests/CMakeFiles/test_live_preview_manager.dir/test_live_preview_manager.cpp.o tests/CMakeFiles/test_live_preview_manager.dir/__/src/live_preview_manager.cpp.o tests/CMakeFiles/test_live_preview_manager.dir/__/src/thumbnail_cache_manager.cpp.o tests/CMakeFiles/test_live_preview_manager.dir/__/src/oiio_image_loader.cpp.o tests/CMakeFiles/test_live_preview_manager.dir/__/src/utils.cpp.o | /usr/lib64/libQt6Test.so.6.10.3 /usr/lib64/libQt6Widgets.so.6.10.3 /usr/lib64/libQt6Concurrent.so.6.10.3 /usr/lib64/libQt6Gui.so.6.10.3 /usr/lib64/libGLX.so /usr/lib64/libOpenGL.so /usr/lib64/libQt6Core.so.6.10.3 || tests/test_live_preview_manager_autogen tests/test_live_preview_manager_autogen_timestamp_deps + DEP_FILE = tests/CMakeFiles/test_live_preview_manager.dir/link.d + FLAGS = -O3 -DNDEBUG + LINK_FLAGS = -Wl,--dependency-file=tests/CMakeFiles/test_live_preview_manager.dir/link.d + LINK_LIBRARIES = -Wl,-rpath,:::::::::::::::::::::::: /usr/lib64/libQt6Test.so.6.10.3 /usr/lib64/libQt6Widgets.so.6.10.3 /usr/lib64/libQt6Concurrent.so.6.10.3 /usr/lib64/libQt6Gui.so.6.10.3 /usr/lib64/libGLX.so /usr/lib64/libOpenGL.so /usr/lib64/libQt6Core.so.6.10.3 + OBJECT_DIR = tests/CMakeFiles/test_live_preview_manager.dir + POST_BUILD = : + PRE_LINK = : + TARGET_FILE = tests/test_live_preview_manager + TARGET_PDB = test_live_preview_manager.dbg + +# ============================================================================= +# Object build statements for EXECUTABLE target test_media_converter_worker + + +############################################# +# Order-only phony target for test_media_converter_worker + +build cmake_object_order_depends_target_test_media_converter_worker: phony || tests/test_media_converter_worker_autogen tests/test_media_converter_worker_autogen/mocs_compilation.cpp tests/test_media_converter_worker_autogen/timestamp tests/test_media_converter_worker_autogen_timestamp_deps + +build tests/CMakeFiles/test_media_converter_worker.dir/test_media_converter_worker_autogen/mocs_compilation.cpp.o: CXX_COMPILER__test_media_converter_worker_unscanned_Release /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_media_converter_worker_autogen/mocs_compilation.cpp || cmake_object_order_depends_target_test_media_converter_worker + DEFINES = -DFTK_API_GL_4_1 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_NO_DEBUG -DQT_TESTCASE_BUILDDIR=\"/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests\" -DQT_TESTCASE_SOURCEDIR=\"/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests\" -DQT_TESTLIB_LIB -DQT_WIDGETS_LIB -DTLRENDER_EXR -DTLRENDER_FFMPEG -DTLRENDER_FFMPEG_PLUGIN -DTLRENDER_JPEG -DTLRENDER_OCIO -DTLRENDER_OIIO -DTLRENDER_PNG -DTLRENDER_SDL2 -DTLRENDER_TIFF + DEP_FILE = tests/CMakeFiles/test_media_converter_worker.dir/test_media_converter_worker_autogen/mocs_compilation.cpp.o.d + FLAGS = -O3 -DNDEBUG -std=gnu++20 + INCLUDES = -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_media_converter_worker_autogen/include -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/../src -isystem /usr/include/qt6/QtTest -isystem /usr/include/qt6 -isystem /usr/include/qt6/QtCore -isystem /usr/lib64/qt6/mkspecs/linux-g++ -isystem /usr/include/qt6/QtWidgets -isystem /usr/include/qt6/QtGui + OBJECT_DIR = tests/CMakeFiles/test_media_converter_worker.dir + OBJECT_FILE_DIR = tests/CMakeFiles/test_media_converter_worker.dir/test_media_converter_worker_autogen + +build tests/CMakeFiles/test_media_converter_worker.dir/test_media_converter_worker.cpp.o: CXX_COMPILER__test_media_converter_worker_unscanned_Release /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/test_media_converter_worker.cpp || cmake_object_order_depends_target_test_media_converter_worker + DEFINES = -DFTK_API_GL_4_1 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_NO_DEBUG -DQT_TESTCASE_BUILDDIR=\"/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests\" -DQT_TESTCASE_SOURCEDIR=\"/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests\" -DQT_TESTLIB_LIB -DQT_WIDGETS_LIB -DTLRENDER_EXR -DTLRENDER_FFMPEG -DTLRENDER_FFMPEG_PLUGIN -DTLRENDER_JPEG -DTLRENDER_OCIO -DTLRENDER_OIIO -DTLRENDER_PNG -DTLRENDER_SDL2 -DTLRENDER_TIFF + DEP_FILE = tests/CMakeFiles/test_media_converter_worker.dir/test_media_converter_worker.cpp.o.d + FLAGS = -O3 -DNDEBUG -std=gnu++20 + INCLUDES = -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_media_converter_worker_autogen/include -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/../src -isystem /usr/include/qt6/QtTest -isystem /usr/include/qt6 -isystem /usr/include/qt6/QtCore -isystem /usr/lib64/qt6/mkspecs/linux-g++ -isystem /usr/include/qt6/QtWidgets -isystem /usr/include/qt6/QtGui + OBJECT_DIR = tests/CMakeFiles/test_media_converter_worker.dir + OBJECT_FILE_DIR = tests/CMakeFiles/test_media_converter_worker.dir + +build tests/CMakeFiles/test_media_converter_worker.dir/__/src/media_converter_worker.cpp.o: CXX_COMPILER__test_media_converter_worker_unscanned_Release /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/media_converter_worker.cpp || cmake_object_order_depends_target_test_media_converter_worker + DEFINES = -DFTK_API_GL_4_1 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_NO_DEBUG -DQT_TESTCASE_BUILDDIR=\"/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests\" -DQT_TESTCASE_SOURCEDIR=\"/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests\" -DQT_TESTLIB_LIB -DQT_WIDGETS_LIB -DTLRENDER_EXR -DTLRENDER_FFMPEG -DTLRENDER_FFMPEG_PLUGIN -DTLRENDER_JPEG -DTLRENDER_OCIO -DTLRENDER_OIIO -DTLRENDER_PNG -DTLRENDER_SDL2 -DTLRENDER_TIFF + DEP_FILE = tests/CMakeFiles/test_media_converter_worker.dir/__/src/media_converter_worker.cpp.o.d + FLAGS = -O3 -DNDEBUG -std=gnu++20 + INCLUDES = -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_media_converter_worker_autogen/include -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/../src -isystem /usr/include/qt6/QtTest -isystem /usr/include/qt6 -isystem /usr/include/qt6/QtCore -isystem /usr/lib64/qt6/mkspecs/linux-g++ -isystem /usr/include/qt6/QtWidgets -isystem /usr/include/qt6/QtGui + OBJECT_DIR = tests/CMakeFiles/test_media_converter_worker.dir + OBJECT_FILE_DIR = tests/CMakeFiles/test_media_converter_worker.dir/__/src + + +# ============================================================================= +# Link build statements for EXECUTABLE target test_media_converter_worker + + +############################################# +# Link the executable tests/test_media_converter_worker + +build tests/test_media_converter_worker: CXX_EXECUTABLE_LINKER__test_media_converter_worker_Release tests/CMakeFiles/test_media_converter_worker.dir/test_media_converter_worker_autogen/mocs_compilation.cpp.o tests/CMakeFiles/test_media_converter_worker.dir/test_media_converter_worker.cpp.o tests/CMakeFiles/test_media_converter_worker.dir/__/src/media_converter_worker.cpp.o | /usr/lib64/libQt6Test.so.6.10.3 /usr/lib64/libQt6Widgets.so.6.10.3 /usr/lib64/libQt6Gui.so.6.10.3 /usr/lib64/libGLX.so /usr/lib64/libOpenGL.so /usr/lib64/libQt6Core.so.6.10.3 || tests/test_media_converter_worker_autogen tests/test_media_converter_worker_autogen_timestamp_deps + DEP_FILE = tests/CMakeFiles/test_media_converter_worker.dir/link.d + FLAGS = -O3 -DNDEBUG + LINK_FLAGS = -Wl,--dependency-file=tests/CMakeFiles/test_media_converter_worker.dir/link.d + LINK_LIBRARIES = -Wl,-rpath,:::::::::::::::::::::::: /usr/lib64/libQt6Test.so.6.10.3 /usr/lib64/libQt6Widgets.so.6.10.3 /usr/lib64/libQt6Gui.so.6.10.3 /usr/lib64/libGLX.so /usr/lib64/libOpenGL.so /usr/lib64/libQt6Core.so.6.10.3 + OBJECT_DIR = tests/CMakeFiles/test_media_converter_worker.dir + POST_BUILD = : + PRE_LINK = : + TARGET_FILE = tests/test_media_converter_worker + TARGET_PDB = test_media_converter_worker.dbg + +# ============================================================================= +# Object build statements for EXECUTABLE target test_virtual_drag + + +############################################# +# Order-only phony target for test_virtual_drag + +build cmake_object_order_depends_target_test_virtual_drag: phony || tests/test_virtual_drag_autogen tests/test_virtual_drag_autogen/mocs_compilation.cpp tests/test_virtual_drag_autogen/timestamp tests/test_virtual_drag_autogen_timestamp_deps + +build tests/CMakeFiles/test_virtual_drag.dir/test_virtual_drag_autogen/mocs_compilation.cpp.o: CXX_COMPILER__test_virtual_drag_unscanned_Release /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_virtual_drag_autogen/mocs_compilation.cpp || cmake_object_order_depends_target_test_virtual_drag + DEFINES = -DFTK_API_GL_4_1 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_NO_DEBUG -DQT_TESTCASE_BUILDDIR=\"/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests\" -DQT_TESTCASE_SOURCEDIR=\"/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests\" -DQT_TESTLIB_LIB -DTLRENDER_EXR -DTLRENDER_FFMPEG -DTLRENDER_FFMPEG_PLUGIN -DTLRENDER_JPEG -DTLRENDER_OCIO -DTLRENDER_OIIO -DTLRENDER_PNG -DTLRENDER_SDL2 -DTLRENDER_TIFF + DEP_FILE = tests/CMakeFiles/test_virtual_drag.dir/test_virtual_drag_autogen/mocs_compilation.cpp.o.d + FLAGS = -O3 -DNDEBUG -std=gnu++20 + INCLUDES = -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_virtual_drag_autogen/include -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/../src -isystem /usr/include/qt6/QtTest -isystem /usr/include/qt6 -isystem /usr/include/qt6/QtCore -isystem /usr/lib64/qt6/mkspecs/linux-g++ -isystem /usr/include/qt6/QtGui + OBJECT_DIR = tests/CMakeFiles/test_virtual_drag.dir + OBJECT_FILE_DIR = tests/CMakeFiles/test_virtual_drag.dir/test_virtual_drag_autogen + +build tests/CMakeFiles/test_virtual_drag.dir/test_virtual_drag.cpp.o: CXX_COMPILER__test_virtual_drag_unscanned_Release /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/test_virtual_drag.cpp || cmake_object_order_depends_target_test_virtual_drag + DEFINES = -DFTK_API_GL_4_1 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_NO_DEBUG -DQT_TESTCASE_BUILDDIR=\"/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests\" -DQT_TESTCASE_SOURCEDIR=\"/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests\" -DQT_TESTLIB_LIB -DTLRENDER_EXR -DTLRENDER_FFMPEG -DTLRENDER_FFMPEG_PLUGIN -DTLRENDER_JPEG -DTLRENDER_OCIO -DTLRENDER_OIIO -DTLRENDER_PNG -DTLRENDER_SDL2 -DTLRENDER_TIFF + DEP_FILE = tests/CMakeFiles/test_virtual_drag.dir/test_virtual_drag.cpp.o.d + FLAGS = -O3 -DNDEBUG -std=gnu++20 + INCLUDES = -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_virtual_drag_autogen/include -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/../src -isystem /usr/include/qt6/QtTest -isystem /usr/include/qt6 -isystem /usr/include/qt6/QtCore -isystem /usr/lib64/qt6/mkspecs/linux-g++ -isystem /usr/include/qt6/QtGui + OBJECT_DIR = tests/CMakeFiles/test_virtual_drag.dir + OBJECT_FILE_DIR = tests/CMakeFiles/test_virtual_drag.dir + +build tests/CMakeFiles/test_virtual_drag.dir/__/src/virtual_drag.cpp.o: CXX_COMPILER__test_virtual_drag_unscanned_Release /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/virtual_drag.cpp || cmake_object_order_depends_target_test_virtual_drag + DEFINES = -DFTK_API_GL_4_1 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_NO_DEBUG -DQT_TESTCASE_BUILDDIR=\"/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests\" -DQT_TESTCASE_SOURCEDIR=\"/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests\" -DQT_TESTLIB_LIB -DTLRENDER_EXR -DTLRENDER_FFMPEG -DTLRENDER_FFMPEG_PLUGIN -DTLRENDER_JPEG -DTLRENDER_OCIO -DTLRENDER_OIIO -DTLRENDER_PNG -DTLRENDER_SDL2 -DTLRENDER_TIFF + DEP_FILE = tests/CMakeFiles/test_virtual_drag.dir/__/src/virtual_drag.cpp.o.d + FLAGS = -O3 -DNDEBUG -std=gnu++20 + INCLUDES = -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_virtual_drag_autogen/include -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/../src -isystem /usr/include/qt6/QtTest -isystem /usr/include/qt6 -isystem /usr/include/qt6/QtCore -isystem /usr/lib64/qt6/mkspecs/linux-g++ -isystem /usr/include/qt6/QtGui + OBJECT_DIR = tests/CMakeFiles/test_virtual_drag.dir + OBJECT_FILE_DIR = tests/CMakeFiles/test_virtual_drag.dir/__/src + + +# ============================================================================= +# Link build statements for EXECUTABLE target test_virtual_drag + + +############################################# +# Link the executable tests/test_virtual_drag + +build tests/test_virtual_drag: CXX_EXECUTABLE_LINKER__test_virtual_drag_Release tests/CMakeFiles/test_virtual_drag.dir/test_virtual_drag_autogen/mocs_compilation.cpp.o tests/CMakeFiles/test_virtual_drag.dir/test_virtual_drag.cpp.o tests/CMakeFiles/test_virtual_drag.dir/__/src/virtual_drag.cpp.o | /usr/lib64/libQt6Test.so.6.10.3 /usr/lib64/libQt6Gui.so.6.10.3 /usr/lib64/libGLX.so /usr/lib64/libOpenGL.so /usr/lib64/libQt6Core.so.6.10.3 || tests/test_virtual_drag_autogen tests/test_virtual_drag_autogen_timestamp_deps + DEP_FILE = tests/CMakeFiles/test_virtual_drag.dir/link.d + FLAGS = -O3 -DNDEBUG + LINK_FLAGS = -Wl,--dependency-file=tests/CMakeFiles/test_virtual_drag.dir/link.d + LINK_LIBRARIES = -Wl,-rpath,:::::::::::::::::::::::: /usr/lib64/libQt6Test.so.6.10.3 /usr/lib64/libQt6Gui.so.6.10.3 /usr/lib64/libGLX.so /usr/lib64/libOpenGL.so /usr/lib64/libQt6Core.so.6.10.3 + OBJECT_DIR = tests/CMakeFiles/test_virtual_drag.dir + POST_BUILD = : + PRE_LINK = : + TARGET_FILE = tests/test_virtual_drag + TARGET_PDB = test_virtual_drag.dbg + +# ============================================================================= +# Object build statements for EXECUTABLE target test_drag_utils + + +############################################# +# Order-only phony target for test_drag_utils + +build cmake_object_order_depends_target_test_drag_utils: phony || tests/test_drag_utils_autogen tests/test_drag_utils_autogen/mocs_compilation.cpp tests/test_drag_utils_autogen/timestamp tests/test_drag_utils_autogen_timestamp_deps + +build tests/CMakeFiles/test_drag_utils.dir/test_drag_utils_autogen/mocs_compilation.cpp.o: CXX_COMPILER__test_drag_utils_unscanned_Release /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_drag_utils_autogen/mocs_compilation.cpp || cmake_object_order_depends_target_test_drag_utils + DEFINES = -DFTK_API_GL_4_1 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_NO_DEBUG -DQT_TESTCASE_BUILDDIR=\"/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests\" -DQT_TESTCASE_SOURCEDIR=\"/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests\" -DQT_TESTLIB_LIB -DQT_WIDGETS_LIB -DTLRENDER_EXR -DTLRENDER_FFMPEG -DTLRENDER_FFMPEG_PLUGIN -DTLRENDER_JPEG -DTLRENDER_OCIO -DTLRENDER_OIIO -DTLRENDER_PNG -DTLRENDER_SDL2 -DTLRENDER_TIFF + DEP_FILE = tests/CMakeFiles/test_drag_utils.dir/test_drag_utils_autogen/mocs_compilation.cpp.o.d + FLAGS = -O3 -DNDEBUG -std=gnu++20 + INCLUDES = -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_drag_utils_autogen/include -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/../src -isystem /usr/include/qt6/QtTest -isystem /usr/include/qt6 -isystem /usr/include/qt6/QtCore -isystem /usr/lib64/qt6/mkspecs/linux-g++ -isystem /usr/include/qt6/QtGui -isystem /usr/include/qt6/QtWidgets + OBJECT_DIR = tests/CMakeFiles/test_drag_utils.dir + OBJECT_FILE_DIR = tests/CMakeFiles/test_drag_utils.dir/test_drag_utils_autogen + +build tests/CMakeFiles/test_drag_utils.dir/test_drag_utils.cpp.o: CXX_COMPILER__test_drag_utils_unscanned_Release /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/test_drag_utils.cpp || cmake_object_order_depends_target_test_drag_utils + DEFINES = -DFTK_API_GL_4_1 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_NO_DEBUG -DQT_TESTCASE_BUILDDIR=\"/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests\" -DQT_TESTCASE_SOURCEDIR=\"/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests\" -DQT_TESTLIB_LIB -DQT_WIDGETS_LIB -DTLRENDER_EXR -DTLRENDER_FFMPEG -DTLRENDER_FFMPEG_PLUGIN -DTLRENDER_JPEG -DTLRENDER_OCIO -DTLRENDER_OIIO -DTLRENDER_PNG -DTLRENDER_SDL2 -DTLRENDER_TIFF + DEP_FILE = tests/CMakeFiles/test_drag_utils.dir/test_drag_utils.cpp.o.d + FLAGS = -O3 -DNDEBUG -std=gnu++20 + INCLUDES = -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_drag_utils_autogen/include -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/../src -isystem /usr/include/qt6/QtTest -isystem /usr/include/qt6 -isystem /usr/include/qt6/QtCore -isystem /usr/lib64/qt6/mkspecs/linux-g++ -isystem /usr/include/qt6/QtGui -isystem /usr/include/qt6/QtWidgets + OBJECT_DIR = tests/CMakeFiles/test_drag_utils.dir + OBJECT_FILE_DIR = tests/CMakeFiles/test_drag_utils.dir + +build tests/CMakeFiles/test_drag_utils.dir/__/src/drag_utils.cpp.o: CXX_COMPILER__test_drag_utils_unscanned_Release /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/drag_utils.cpp || cmake_object_order_depends_target_test_drag_utils + DEFINES = -DFTK_API_GL_4_1 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_NO_DEBUG -DQT_TESTCASE_BUILDDIR=\"/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests\" -DQT_TESTCASE_SOURCEDIR=\"/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests\" -DQT_TESTLIB_LIB -DQT_WIDGETS_LIB -DTLRENDER_EXR -DTLRENDER_FFMPEG -DTLRENDER_FFMPEG_PLUGIN -DTLRENDER_JPEG -DTLRENDER_OCIO -DTLRENDER_OIIO -DTLRENDER_PNG -DTLRENDER_SDL2 -DTLRENDER_TIFF + DEP_FILE = tests/CMakeFiles/test_drag_utils.dir/__/src/drag_utils.cpp.o.d + FLAGS = -O3 -DNDEBUG -std=gnu++20 + INCLUDES = -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_drag_utils_autogen/include -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/../src -isystem /usr/include/qt6/QtTest -isystem /usr/include/qt6 -isystem /usr/include/qt6/QtCore -isystem /usr/lib64/qt6/mkspecs/linux-g++ -isystem /usr/include/qt6/QtGui -isystem /usr/include/qt6/QtWidgets + OBJECT_DIR = tests/CMakeFiles/test_drag_utils.dir + OBJECT_FILE_DIR = tests/CMakeFiles/test_drag_utils.dir/__/src + + +# ============================================================================= +# Link build statements for EXECUTABLE target test_drag_utils + + +############################################# +# Link the executable tests/test_drag_utils + +build tests/test_drag_utils: CXX_EXECUTABLE_LINKER__test_drag_utils_Release tests/CMakeFiles/test_drag_utils.dir/test_drag_utils_autogen/mocs_compilation.cpp.o tests/CMakeFiles/test_drag_utils.dir/test_drag_utils.cpp.o tests/CMakeFiles/test_drag_utils.dir/__/src/drag_utils.cpp.o | /usr/lib64/libQt6Test.so.6.10.3 /usr/lib64/libQt6Widgets.so.6.10.3 /usr/lib64/libQt6Gui.so.6.10.3 /usr/lib64/libGLX.so /usr/lib64/libOpenGL.so /usr/lib64/libQt6Core.so.6.10.3 || tests/test_drag_utils_autogen tests/test_drag_utils_autogen_timestamp_deps + DEP_FILE = tests/CMakeFiles/test_drag_utils.dir/link.d + FLAGS = -O3 -DNDEBUG + LINK_FLAGS = -Wl,--dependency-file=tests/CMakeFiles/test_drag_utils.dir/link.d + LINK_LIBRARIES = -Wl,-rpath,:::::::::::::::::::::::: /usr/lib64/libQt6Test.so.6.10.3 /usr/lib64/libQt6Widgets.so.6.10.3 /usr/lib64/libQt6Gui.so.6.10.3 /usr/lib64/libGLX.so /usr/lib64/libOpenGL.so /usr/lib64/libQt6Core.so.6.10.3 + OBJECT_DIR = tests/CMakeFiles/test_drag_utils.dir + POST_BUILD = : + PRE_LINK = : + TARGET_FILE = tests/test_drag_utils + TARGET_PDB = test_drag_utils.dbg + +# ============================================================================= +# Object build statements for EXECUTABLE target test_everything_search + + +############################################# +# Order-only phony target for test_everything_search + +build cmake_object_order_depends_target_test_everything_search: phony || tests/test_everything_search_autogen tests/test_everything_search_autogen/mocs_compilation.cpp tests/test_everything_search_autogen/timestamp tests/test_everything_search_autogen_timestamp_deps + +build tests/CMakeFiles/test_everything_search.dir/test_everything_search_autogen/mocs_compilation.cpp.o: CXX_COMPILER__test_everything_search_unscanned_Release /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_everything_search_autogen/mocs_compilation.cpp || cmake_object_order_depends_target_test_everything_search + DEFINES = -DFTK_API_GL_4_1 -DQT_CORE_LIB -DQT_NO_DEBUG -DQT_TESTCASE_BUILDDIR=\"/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests\" -DQT_TESTCASE_SOURCEDIR=\"/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests\" -DQT_TESTLIB_LIB -DTLRENDER_EXR -DTLRENDER_FFMPEG -DTLRENDER_FFMPEG_PLUGIN -DTLRENDER_JPEG -DTLRENDER_OCIO -DTLRENDER_OIIO -DTLRENDER_PNG -DTLRENDER_SDL2 -DTLRENDER_TIFF + DEP_FILE = tests/CMakeFiles/test_everything_search.dir/test_everything_search_autogen/mocs_compilation.cpp.o.d + FLAGS = -O3 -DNDEBUG -std=gnu++20 + INCLUDES = -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_everything_search_autogen/include -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/../src -isystem /usr/include/qt6/QtTest -isystem /usr/include/qt6 -isystem /usr/include/qt6/QtCore -isystem /usr/lib64/qt6/mkspecs/linux-g++ + OBJECT_DIR = tests/CMakeFiles/test_everything_search.dir + OBJECT_FILE_DIR = tests/CMakeFiles/test_everything_search.dir/test_everything_search_autogen + +build tests/CMakeFiles/test_everything_search.dir/test_everything_search.cpp.o: CXX_COMPILER__test_everything_search_unscanned_Release /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/test_everything_search.cpp || cmake_object_order_depends_target_test_everything_search + DEFINES = -DFTK_API_GL_4_1 -DQT_CORE_LIB -DQT_NO_DEBUG -DQT_TESTCASE_BUILDDIR=\"/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests\" -DQT_TESTCASE_SOURCEDIR=\"/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests\" -DQT_TESTLIB_LIB -DTLRENDER_EXR -DTLRENDER_FFMPEG -DTLRENDER_FFMPEG_PLUGIN -DTLRENDER_JPEG -DTLRENDER_OCIO -DTLRENDER_OIIO -DTLRENDER_PNG -DTLRENDER_SDL2 -DTLRENDER_TIFF + DEP_FILE = tests/CMakeFiles/test_everything_search.dir/test_everything_search.cpp.o.d + FLAGS = -O3 -DNDEBUG -std=gnu++20 + INCLUDES = -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_everything_search_autogen/include -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/../src -isystem /usr/include/qt6/QtTest -isystem /usr/include/qt6 -isystem /usr/include/qt6/QtCore -isystem /usr/lib64/qt6/mkspecs/linux-g++ + OBJECT_DIR = tests/CMakeFiles/test_everything_search.dir + OBJECT_FILE_DIR = tests/CMakeFiles/test_everything_search.dir + +build tests/CMakeFiles/test_everything_search.dir/__/src/everything_search.cpp.o: CXX_COMPILER__test_everything_search_unscanned_Release /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/everything_search.cpp || cmake_object_order_depends_target_test_everything_search + DEFINES = -DFTK_API_GL_4_1 -DQT_CORE_LIB -DQT_NO_DEBUG -DQT_TESTCASE_BUILDDIR=\"/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests\" -DQT_TESTCASE_SOURCEDIR=\"/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests\" -DQT_TESTLIB_LIB -DTLRENDER_EXR -DTLRENDER_FFMPEG -DTLRENDER_FFMPEG_PLUGIN -DTLRENDER_JPEG -DTLRENDER_OCIO -DTLRENDER_OIIO -DTLRENDER_PNG -DTLRENDER_SDL2 -DTLRENDER_TIFF + DEP_FILE = tests/CMakeFiles/test_everything_search.dir/__/src/everything_search.cpp.o.d + FLAGS = -O3 -DNDEBUG -std=gnu++20 + INCLUDES = -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_everything_search_autogen/include -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/../src -isystem /usr/include/qt6/QtTest -isystem /usr/include/qt6 -isystem /usr/include/qt6/QtCore -isystem /usr/lib64/qt6/mkspecs/linux-g++ + OBJECT_DIR = tests/CMakeFiles/test_everything_search.dir + OBJECT_FILE_DIR = tests/CMakeFiles/test_everything_search.dir/__/src + + +# ============================================================================= +# Link build statements for EXECUTABLE target test_everything_search + + +############################################# +# Link the executable tests/test_everything_search + +build tests/test_everything_search: CXX_EXECUTABLE_LINKER__test_everything_search_Release tests/CMakeFiles/test_everything_search.dir/test_everything_search_autogen/mocs_compilation.cpp.o tests/CMakeFiles/test_everything_search.dir/test_everything_search.cpp.o tests/CMakeFiles/test_everything_search.dir/__/src/everything_search.cpp.o | /usr/lib64/libQt6Test.so.6.10.3 /usr/lib64/libQt6Core.so.6.10.3 || tests/test_everything_search_autogen tests/test_everything_search_autogen_timestamp_deps + DEP_FILE = tests/CMakeFiles/test_everything_search.dir/link.d + FLAGS = -O3 -DNDEBUG + LINK_FLAGS = -Wl,--dependency-file=tests/CMakeFiles/test_everything_search.dir/link.d + LINK_LIBRARIES = -Wl,-rpath,:::::::::::::::::::::::: /usr/lib64/libQt6Test.so.6.10.3 /usr/lib64/libQt6Core.so.6.10.3 + OBJECT_DIR = tests/CMakeFiles/test_everything_search.dir + POST_BUILD = : + PRE_LINK = : + TARGET_FILE = tests/test_everything_search + TARGET_PDB = test_everything_search.dbg + +# ============================================================================= +# Object build statements for EXECUTABLE target test_icon_utils + + +############################################# +# Order-only phony target for test_icon_utils + +build cmake_object_order_depends_target_test_icon_utils: phony || tests/test_icon_utils_autogen tests/test_icon_utils_autogen/mocs_compilation.cpp tests/test_icon_utils_autogen/timestamp tests/test_icon_utils_autogen_timestamp_deps + +build tests/CMakeFiles/test_icon_utils.dir/test_icon_utils_autogen/mocs_compilation.cpp.o: CXX_COMPILER__test_icon_utils_unscanned_Release /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_icon_utils_autogen/mocs_compilation.cpp || cmake_object_order_depends_target_test_icon_utils + DEFINES = -DFTK_API_GL_4_1 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_NO_DEBUG -DQT_TESTCASE_BUILDDIR=\"/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests\" -DQT_TESTCASE_SOURCEDIR=\"/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests\" -DQT_TESTLIB_LIB -DQT_WIDGETS_LIB -DTLRENDER_EXR -DTLRENDER_FFMPEG -DTLRENDER_FFMPEG_PLUGIN -DTLRENDER_JPEG -DTLRENDER_OCIO -DTLRENDER_OIIO -DTLRENDER_PNG -DTLRENDER_SDL2 -DTLRENDER_TIFF + DEP_FILE = tests/CMakeFiles/test_icon_utils.dir/test_icon_utils_autogen/mocs_compilation.cpp.o.d + FLAGS = -O3 -DNDEBUG -std=gnu++20 + INCLUDES = -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_icon_utils_autogen/include -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/../src -isystem /usr/include/qt6/QtTest -isystem /usr/include/qt6 -isystem /usr/include/qt6/QtCore -isystem /usr/lib64/qt6/mkspecs/linux-g++ -isystem /usr/include/qt6/QtGui -isystem /usr/include/qt6/QtWidgets + OBJECT_DIR = tests/CMakeFiles/test_icon_utils.dir + OBJECT_FILE_DIR = tests/CMakeFiles/test_icon_utils.dir/test_icon_utils_autogen + +build tests/CMakeFiles/test_icon_utils.dir/test_icon_utils.cpp.o: CXX_COMPILER__test_icon_utils_unscanned_Release /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/test_icon_utils.cpp || cmake_object_order_depends_target_test_icon_utils + DEFINES = -DFTK_API_GL_4_1 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_NO_DEBUG -DQT_TESTCASE_BUILDDIR=\"/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests\" -DQT_TESTCASE_SOURCEDIR=\"/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests\" -DQT_TESTLIB_LIB -DQT_WIDGETS_LIB -DTLRENDER_EXR -DTLRENDER_FFMPEG -DTLRENDER_FFMPEG_PLUGIN -DTLRENDER_JPEG -DTLRENDER_OCIO -DTLRENDER_OIIO -DTLRENDER_PNG -DTLRENDER_SDL2 -DTLRENDER_TIFF + DEP_FILE = tests/CMakeFiles/test_icon_utils.dir/test_icon_utils.cpp.o.d + FLAGS = -O3 -DNDEBUG -std=gnu++20 + INCLUDES = -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_icon_utils_autogen/include -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/../src -isystem /usr/include/qt6/QtTest -isystem /usr/include/qt6 -isystem /usr/include/qt6/QtCore -isystem /usr/lib64/qt6/mkspecs/linux-g++ -isystem /usr/include/qt6/QtGui -isystem /usr/include/qt6/QtWidgets + OBJECT_DIR = tests/CMakeFiles/test_icon_utils.dir + OBJECT_FILE_DIR = tests/CMakeFiles/test_icon_utils.dir + +build tests/CMakeFiles/test_icon_utils.dir/__/src/icon_utils.cpp.o: CXX_COMPILER__test_icon_utils_unscanned_Release /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/icon_utils.cpp || cmake_object_order_depends_target_test_icon_utils + DEFINES = -DFTK_API_GL_4_1 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_NO_DEBUG -DQT_TESTCASE_BUILDDIR=\"/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests\" -DQT_TESTCASE_SOURCEDIR=\"/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests\" -DQT_TESTLIB_LIB -DQT_WIDGETS_LIB -DTLRENDER_EXR -DTLRENDER_FFMPEG -DTLRENDER_FFMPEG_PLUGIN -DTLRENDER_JPEG -DTLRENDER_OCIO -DTLRENDER_OIIO -DTLRENDER_PNG -DTLRENDER_SDL2 -DTLRENDER_TIFF + DEP_FILE = tests/CMakeFiles/test_icon_utils.dir/__/src/icon_utils.cpp.o.d + FLAGS = -O3 -DNDEBUG -std=gnu++20 + INCLUDES = -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_icon_utils_autogen/include -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/../src -isystem /usr/include/qt6/QtTest -isystem /usr/include/qt6 -isystem /usr/include/qt6/QtCore -isystem /usr/lib64/qt6/mkspecs/linux-g++ -isystem /usr/include/qt6/QtGui -isystem /usr/include/qt6/QtWidgets + OBJECT_DIR = tests/CMakeFiles/test_icon_utils.dir + OBJECT_FILE_DIR = tests/CMakeFiles/test_icon_utils.dir/__/src + + +# ============================================================================= +# Link build statements for EXECUTABLE target test_icon_utils + + +############################################# +# Link the executable tests/test_icon_utils + +build tests/test_icon_utils: CXX_EXECUTABLE_LINKER__test_icon_utils_Release tests/CMakeFiles/test_icon_utils.dir/test_icon_utils_autogen/mocs_compilation.cpp.o tests/CMakeFiles/test_icon_utils.dir/test_icon_utils.cpp.o tests/CMakeFiles/test_icon_utils.dir/__/src/icon_utils.cpp.o | /usr/lib64/libQt6Test.so.6.10.3 /usr/lib64/libQt6Widgets.so.6.10.3 /usr/lib64/libQt6Gui.so.6.10.3 /usr/lib64/libGLX.so /usr/lib64/libOpenGL.so /usr/lib64/libQt6Core.so.6.10.3 || tests/test_icon_utils_autogen tests/test_icon_utils_autogen_timestamp_deps + DEP_FILE = tests/CMakeFiles/test_icon_utils.dir/link.d + FLAGS = -O3 -DNDEBUG + LINK_FLAGS = -Wl,--dependency-file=tests/CMakeFiles/test_icon_utils.dir/link.d + LINK_LIBRARIES = -Wl,-rpath,:::::::::::::::::::::::: /usr/lib64/libQt6Test.so.6.10.3 /usr/lib64/libQt6Widgets.so.6.10.3 /usr/lib64/libQt6Gui.so.6.10.3 /usr/lib64/libGLX.so /usr/lib64/libOpenGL.so /usr/lib64/libQt6Core.so.6.10.3 + OBJECT_DIR = tests/CMakeFiles/test_icon_utils.dir + POST_BUILD = : + PRE_LINK = : + TARGET_FILE = tests/test_icon_utils + TARGET_PDB = test_icon_utils.dbg + +# ============================================================================= +# Object build statements for EXECUTABLE target test_grid_scrub + + +############################################# +# Order-only phony target for test_grid_scrub + +build cmake_object_order_depends_target_test_grid_scrub: phony || tests/test_grid_scrub_autogen tests/test_grid_scrub_autogen/mocs_compilation.cpp tests/test_grid_scrub_autogen/timestamp tests/test_grid_scrub_autogen_timestamp_deps + +build tests/CMakeFiles/test_grid_scrub.dir/test_grid_scrub_autogen/mocs_compilation.cpp.o: CXX_COMPILER__test_grid_scrub_unscanned_Release /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_grid_scrub_autogen/mocs_compilation.cpp || cmake_object_order_depends_target_test_grid_scrub + DEFINES = -DFTK_API_GL_4_1 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_NO_DEBUG -DQT_TESTCASE_BUILDDIR=\"/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests\" -DQT_TESTCASE_SOURCEDIR=\"/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests\" -DQT_TESTLIB_LIB -DQT_WIDGETS_LIB -DTLRENDER_EXR -DTLRENDER_FFMPEG -DTLRENDER_FFMPEG_PLUGIN -DTLRENDER_JPEG -DTLRENDER_OCIO -DTLRENDER_OIIO -DTLRENDER_PNG -DTLRENDER_SDL2 -DTLRENDER_TIFF + DEP_FILE = tests/CMakeFiles/test_grid_scrub.dir/test_grid_scrub_autogen/mocs_compilation.cpp.o.d + FLAGS = -O3 -DNDEBUG -std=gnu++20 + INCLUDES = -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_grid_scrub_autogen/include -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/../src -isystem /usr/include/qt6/QtTest -isystem /usr/include/qt6 -isystem /usr/include/qt6/QtCore -isystem /usr/lib64/qt6/mkspecs/linux-g++ -isystem /usr/include/qt6/QtWidgets -isystem /usr/include/qt6/QtGui + OBJECT_DIR = tests/CMakeFiles/test_grid_scrub.dir + OBJECT_FILE_DIR = tests/CMakeFiles/test_grid_scrub.dir/test_grid_scrub_autogen + +build tests/CMakeFiles/test_grid_scrub.dir/test_grid_scrub.cpp.o: CXX_COMPILER__test_grid_scrub_unscanned_Release /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/test_grid_scrub.cpp || cmake_object_order_depends_target_test_grid_scrub + DEFINES = -DFTK_API_GL_4_1 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_NO_DEBUG -DQT_TESTCASE_BUILDDIR=\"/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests\" -DQT_TESTCASE_SOURCEDIR=\"/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests\" -DQT_TESTLIB_LIB -DQT_WIDGETS_LIB -DTLRENDER_EXR -DTLRENDER_FFMPEG -DTLRENDER_FFMPEG_PLUGIN -DTLRENDER_JPEG -DTLRENDER_OCIO -DTLRENDER_OIIO -DTLRENDER_PNG -DTLRENDER_SDL2 -DTLRENDER_TIFF + DEP_FILE = tests/CMakeFiles/test_grid_scrub.dir/test_grid_scrub.cpp.o.d + FLAGS = -O3 -DNDEBUG -std=gnu++20 + INCLUDES = -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_grid_scrub_autogen/include -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/../src -isystem /usr/include/qt6/QtTest -isystem /usr/include/qt6 -isystem /usr/include/qt6/QtCore -isystem /usr/lib64/qt6/mkspecs/linux-g++ -isystem /usr/include/qt6/QtWidgets -isystem /usr/include/qt6/QtGui + OBJECT_DIR = tests/CMakeFiles/test_grid_scrub.dir + OBJECT_FILE_DIR = tests/CMakeFiles/test_grid_scrub.dir + + +# ============================================================================= +# Link build statements for EXECUTABLE target test_grid_scrub + + +############################################# +# Link the executable tests/test_grid_scrub + +build tests/test_grid_scrub: CXX_EXECUTABLE_LINKER__test_grid_scrub_Release tests/CMakeFiles/test_grid_scrub.dir/test_grid_scrub_autogen/mocs_compilation.cpp.o tests/CMakeFiles/test_grid_scrub.dir/test_grid_scrub.cpp.o | /usr/lib64/libQt6Test.so.6.10.3 /usr/lib64/libQt6Widgets.so.6.10.3 /usr/lib64/libQt6Gui.so.6.10.3 /usr/lib64/libGLX.so /usr/lib64/libOpenGL.so /usr/lib64/libQt6Core.so.6.10.3 || tests/test_grid_scrub_autogen tests/test_grid_scrub_autogen_timestamp_deps + DEP_FILE = tests/CMakeFiles/test_grid_scrub.dir/link.d + FLAGS = -O3 -DNDEBUG + LINK_FLAGS = -Wl,--dependency-file=tests/CMakeFiles/test_grid_scrub.dir/link.d + LINK_LIBRARIES = -Wl,-rpath,:::::::::::::::::::::::: /usr/lib64/libQt6Test.so.6.10.3 /usr/lib64/libQt6Widgets.so.6.10.3 /usr/lib64/libQt6Gui.so.6.10.3 /usr/lib64/libGLX.so /usr/lib64/libOpenGL.so /usr/lib64/libQt6Core.so.6.10.3 + OBJECT_DIR = tests/CMakeFiles/test_grid_scrub.dir + POST_BUILD = : + PRE_LINK = : + TARGET_FILE = tests/test_grid_scrub + TARGET_PDB = test_grid_scrub.dbg + +# ============================================================================= +# Object build statements for EXECUTABLE target test_platform_session + + +############################################# +# Order-only phony target for test_platform_session + +build cmake_object_order_depends_target_test_platform_session: phony || tests/test_platform_session_autogen tests/test_platform_session_autogen/mocs_compilation.cpp tests/test_platform_session_autogen/timestamp tests/test_platform_session_autogen_timestamp_deps + +build tests/CMakeFiles/test_platform_session.dir/test_platform_session_autogen/mocs_compilation.cpp.o: CXX_COMPILER__test_platform_session_unscanned_Release /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_platform_session_autogen/mocs_compilation.cpp || cmake_object_order_depends_target_test_platform_session + DEFINES = -DFTK_API_GL_4_1 -DQT_CORE_LIB -DQT_NO_DEBUG -DQT_TESTCASE_BUILDDIR=\"/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests\" -DQT_TESTCASE_SOURCEDIR=\"/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests\" -DQT_TESTLIB_LIB -DTLRENDER_EXR -DTLRENDER_FFMPEG -DTLRENDER_FFMPEG_PLUGIN -DTLRENDER_JPEG -DTLRENDER_OCIO -DTLRENDER_OIIO -DTLRENDER_PNG -DTLRENDER_SDL2 -DTLRENDER_TIFF + DEP_FILE = tests/CMakeFiles/test_platform_session.dir/test_platform_session_autogen/mocs_compilation.cpp.o.d + FLAGS = -O3 -DNDEBUG -std=gnu++20 + INCLUDES = -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_platform_session_autogen/include -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/../src -isystem /usr/include/qt6/QtTest -isystem /usr/include/qt6 -isystem /usr/include/qt6/QtCore -isystem /usr/lib64/qt6/mkspecs/linux-g++ + OBJECT_DIR = tests/CMakeFiles/test_platform_session.dir + OBJECT_FILE_DIR = tests/CMakeFiles/test_platform_session.dir/test_platform_session_autogen + +build tests/CMakeFiles/test_platform_session.dir/test_platform_session.cpp.o: CXX_COMPILER__test_platform_session_unscanned_Release /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/test_platform_session.cpp || cmake_object_order_depends_target_test_platform_session + DEFINES = -DFTK_API_GL_4_1 -DQT_CORE_LIB -DQT_NO_DEBUG -DQT_TESTCASE_BUILDDIR=\"/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests\" -DQT_TESTCASE_SOURCEDIR=\"/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests\" -DQT_TESTLIB_LIB -DTLRENDER_EXR -DTLRENDER_FFMPEG -DTLRENDER_FFMPEG_PLUGIN -DTLRENDER_JPEG -DTLRENDER_OCIO -DTLRENDER_OIIO -DTLRENDER_PNG -DTLRENDER_SDL2 -DTLRENDER_TIFF + DEP_FILE = tests/CMakeFiles/test_platform_session.dir/test_platform_session.cpp.o.d + FLAGS = -O3 -DNDEBUG -std=gnu++20 + INCLUDES = -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_platform_session_autogen/include -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/../src -isystem /usr/include/qt6/QtTest -isystem /usr/include/qt6 -isystem /usr/include/qt6/QtCore -isystem /usr/lib64/qt6/mkspecs/linux-g++ + OBJECT_DIR = tests/CMakeFiles/test_platform_session.dir + OBJECT_FILE_DIR = tests/CMakeFiles/test_platform_session.dir + + +# ============================================================================= +# Link build statements for EXECUTABLE target test_platform_session + + +############################################# +# Link the executable tests/test_platform_session + +build tests/test_platform_session: CXX_EXECUTABLE_LINKER__test_platform_session_Release tests/CMakeFiles/test_platform_session.dir/test_platform_session_autogen/mocs_compilation.cpp.o tests/CMakeFiles/test_platform_session.dir/test_platform_session.cpp.o | /usr/lib64/libQt6Test.so.6.10.3 /usr/lib64/libQt6Core.so.6.10.3 || tests/test_platform_session_autogen tests/test_platform_session_autogen_timestamp_deps + DEP_FILE = tests/CMakeFiles/test_platform_session.dir/link.d + FLAGS = -O3 -DNDEBUG + LINK_FLAGS = -Wl,--dependency-file=tests/CMakeFiles/test_platform_session.dir/link.d + LINK_LIBRARIES = -Wl,-rpath,:::::::::::::::::::::::: /usr/lib64/libQt6Test.so.6.10.3 /usr/lib64/libQt6Core.so.6.10.3 + OBJECT_DIR = tests/CMakeFiles/test_platform_session.dir + POST_BUILD = : + PRE_LINK = : + TARGET_FILE = tests/test_platform_session + TARGET_PDB = test_platform_session.dbg + +# ============================================================================= +# Object build statements for EXECUTABLE target test_annotation_items + + +############################################# +# Order-only phony target for test_annotation_items + +build cmake_object_order_depends_target_test_annotation_items: phony || tests/test_annotation_items_autogen tests/test_annotation_items_autogen/mocs_compilation.cpp tests/test_annotation_items_autogen/timestamp tests/test_annotation_items_autogen_timestamp_deps + +build tests/CMakeFiles/test_annotation_items.dir/test_annotation_items_autogen/mocs_compilation.cpp.o: CXX_COMPILER__test_annotation_items_unscanned_Release /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_annotation_items_autogen/mocs_compilation.cpp || cmake_object_order_depends_target_test_annotation_items + DEFINES = -DFTK_API_GL_4_1 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_NO_DEBUG -DQT_TESTCASE_BUILDDIR=\"/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests\" -DQT_TESTCASE_SOURCEDIR=\"/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests\" -DQT_TESTLIB_LIB -DQT_WIDGETS_LIB -DTLRENDER_EXR -DTLRENDER_FFMPEG -DTLRENDER_FFMPEG_PLUGIN -DTLRENDER_JPEG -DTLRENDER_OCIO -DTLRENDER_OIIO -DTLRENDER_PNG -DTLRENDER_SDL2 -DTLRENDER_TIFF + DEP_FILE = tests/CMakeFiles/test_annotation_items.dir/test_annotation_items_autogen/mocs_compilation.cpp.o.d + FLAGS = -O3 -DNDEBUG -std=gnu++20 + INCLUDES = -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_annotation_items_autogen/include -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/../src -isystem /usr/include/qt6/QtTest -isystem /usr/include/qt6 -isystem /usr/include/qt6/QtCore -isystem /usr/lib64/qt6/mkspecs/linux-g++ -isystem /usr/include/qt6/QtGui -isystem /usr/include/qt6/QtWidgets + OBJECT_DIR = tests/CMakeFiles/test_annotation_items.dir + OBJECT_FILE_DIR = tests/CMakeFiles/test_annotation_items.dir/test_annotation_items_autogen + +build tests/CMakeFiles/test_annotation_items.dir/test_annotation_items.cpp.o: CXX_COMPILER__test_annotation_items_unscanned_Release /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/test_annotation_items.cpp || cmake_object_order_depends_target_test_annotation_items + DEFINES = -DFTK_API_GL_4_1 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_NO_DEBUG -DQT_TESTCASE_BUILDDIR=\"/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests\" -DQT_TESTCASE_SOURCEDIR=\"/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests\" -DQT_TESTLIB_LIB -DQT_WIDGETS_LIB -DTLRENDER_EXR -DTLRENDER_FFMPEG -DTLRENDER_FFMPEG_PLUGIN -DTLRENDER_JPEG -DTLRENDER_OCIO -DTLRENDER_OIIO -DTLRENDER_PNG -DTLRENDER_SDL2 -DTLRENDER_TIFF + DEP_FILE = tests/CMakeFiles/test_annotation_items.dir/test_annotation_items.cpp.o.d + FLAGS = -O3 -DNDEBUG -std=gnu++20 + INCLUDES = -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_annotation_items_autogen/include -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/../src -isystem /usr/include/qt6/QtTest -isystem /usr/include/qt6 -isystem /usr/include/qt6/QtCore -isystem /usr/lib64/qt6/mkspecs/linux-g++ -isystem /usr/include/qt6/QtGui -isystem /usr/include/qt6/QtWidgets + OBJECT_DIR = tests/CMakeFiles/test_annotation_items.dir + OBJECT_FILE_DIR = tests/CMakeFiles/test_annotation_items.dir + +build tests/CMakeFiles/test_annotation_items.dir/__/src/annotation_items.cpp.o: CXX_COMPILER__test_annotation_items_unscanned_Release /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/annotation_items.cpp || cmake_object_order_depends_target_test_annotation_items + DEFINES = -DFTK_API_GL_4_1 -DQT_CORE_LIB -DQT_GUI_LIB -DQT_NO_DEBUG -DQT_TESTCASE_BUILDDIR=\"/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests\" -DQT_TESTCASE_SOURCEDIR=\"/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests\" -DQT_TESTLIB_LIB -DQT_WIDGETS_LIB -DTLRENDER_EXR -DTLRENDER_FFMPEG -DTLRENDER_FFMPEG_PLUGIN -DTLRENDER_JPEG -DTLRENDER_OCIO -DTLRENDER_OIIO -DTLRENDER_PNG -DTLRENDER_SDL2 -DTLRENDER_TIFF + DEP_FILE = tests/CMakeFiles/test_annotation_items.dir/__/src/annotation_items.cpp.o.d + FLAGS = -O3 -DNDEBUG -std=gnu++20 + INCLUDES = -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_annotation_items_autogen/include -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender -I/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/../src -isystem /usr/include/qt6/QtTest -isystem /usr/include/qt6 -isystem /usr/include/qt6/QtCore -isystem /usr/lib64/qt6/mkspecs/linux-g++ -isystem /usr/include/qt6/QtGui -isystem /usr/include/qt6/QtWidgets + OBJECT_DIR = tests/CMakeFiles/test_annotation_items.dir + OBJECT_FILE_DIR = tests/CMakeFiles/test_annotation_items.dir/__/src + + +# ============================================================================= +# Link build statements for EXECUTABLE target test_annotation_items + + +############################################# +# Link the executable tests/test_annotation_items + +build tests/test_annotation_items: CXX_EXECUTABLE_LINKER__test_annotation_items_Release tests/CMakeFiles/test_annotation_items.dir/test_annotation_items_autogen/mocs_compilation.cpp.o tests/CMakeFiles/test_annotation_items.dir/test_annotation_items.cpp.o tests/CMakeFiles/test_annotation_items.dir/__/src/annotation_items.cpp.o | /usr/lib64/libQt6Test.so.6.10.3 /usr/lib64/libQt6Widgets.so.6.10.3 /usr/lib64/libQt6Gui.so.6.10.3 /usr/lib64/libGLX.so /usr/lib64/libOpenGL.so /usr/lib64/libQt6Core.so.6.10.3 || tests/test_annotation_items_autogen tests/test_annotation_items_autogen_timestamp_deps + DEP_FILE = tests/CMakeFiles/test_annotation_items.dir/link.d + FLAGS = -O3 -DNDEBUG + LINK_FLAGS = -Wl,--dependency-file=tests/CMakeFiles/test_annotation_items.dir/link.d + LINK_LIBRARIES = -Wl,-rpath,:::::::::::::::::::::::: /usr/lib64/libQt6Test.so.6.10.3 /usr/lib64/libQt6Widgets.so.6.10.3 /usr/lib64/libQt6Gui.so.6.10.3 /usr/lib64/libGLX.so /usr/lib64/libOpenGL.so /usr/lib64/libQt6Core.so.6.10.3 + OBJECT_DIR = tests/CMakeFiles/test_annotation_items.dir + POST_BUILD = : + PRE_LINK = : + TARGET_FILE = tests/test_annotation_items + TARGET_PDB = test_annotation_items.dbg + + +############################################# +# Utility command for package + +build tests/CMakeFiles/package.util: CUSTOM_COMMAND tests/all + COMMAND = cd /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux && /usr/bin/cpack --config ./CPackConfig.cmake + DESC = Run CPack packaging tool... + pool = console + restat = 1 + +build tests/package: phony tests/CMakeFiles/package.util + + +############################################# +# Utility command for package_source + +build tests/CMakeFiles/package_source.util: CUSTOM_COMMAND + COMMAND = cd /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux && /usr/bin/cpack --config ./CPackSourceConfig.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/CPackSourceConfig.cmake + DESC = Run CPack packaging tool for source... + pool = console + restat = 1 + +build tests/package_source: phony tests/CMakeFiles/package_source.util + + +############################################# +# Utility command for test + +build tests/CMakeFiles/test.util: CUSTOM_COMMAND + COMMAND = cd /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests && /usr/bin/ctest --force-new-ctest-process + DESC = Running tests... + pool = console + restat = 1 + +build tests/test: phony tests/CMakeFiles/test.util + + +############################################# +# Utility command for edit_cache + +build tests/CMakeFiles/edit_cache.util: CUSTOM_COMMAND + COMMAND = cd /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests && /usr/bin/ccmake -S/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6 -B/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux + DESC = Running CMake cache editor... + pool = console + restat = 1 + +build tests/edit_cache: phony tests/CMakeFiles/edit_cache.util + + +############################################# +# Utility command for rebuild_cache + +build tests/CMakeFiles/rebuild_cache.util: CUSTOM_COMMAND + COMMAND = cd /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests && /usr/bin/cmake --regenerate-during-build -S/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6 -B/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux + DESC = Running CMake to regenerate build system... + pool = console + restat = 1 + +build tests/rebuild_cache: phony tests/CMakeFiles/rebuild_cache.util + + +############################################# +# Utility command for list_install_components + +build tests/list_install_components: phony + + +############################################# +# Utility command for install + +build tests/CMakeFiles/install.util: CUSTOM_COMMAND tests/all + COMMAND = cd /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests && /usr/bin/cmake -P cmake_install.cmake + DESC = Install the project... + pool = console + restat = 1 + +build tests/install: phony tests/CMakeFiles/install.util + + +############################################# +# Utility command for install/local + +build tests/CMakeFiles/install/local.util: CUSTOM_COMMAND tests/all + COMMAND = cd /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests && /usr/bin/cmake -DCMAKE_INSTALL_LOCAL_ONLY=1 -P cmake_install.cmake + DESC = Installing only the local directory... + pool = console + restat = 1 + +build tests/install/local: phony tests/CMakeFiles/install/local.util + + +############################################# +# Utility command for install/strip + +build tests/CMakeFiles/install/strip.util: CUSTOM_COMMAND tests/all + COMMAND = cd /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests && /usr/bin/cmake -DCMAKE_INSTALL_DO_STRIP=1 -P cmake_install.cmake + DESC = Installing the project stripped... + pool = console + restat = 1 + +build tests/install/strip: phony tests/CMakeFiles/install/strip.util + + +############################################# +# Utility command for test_simple_autogen_timestamp_deps + +build tests/test_simple_autogen_timestamp_deps: phony + + +############################################# +# Utility command for test_simple_autogen + +build tests/test_simple_autogen: phony tests/CMakeFiles/test_simple_autogen tests/test_simple_autogen/timestamp tests/test_simple_autogen/mocs_compilation.cpp tests/test_simple_autogen_timestamp_deps + + +############################################# +# Utility command for test_db_autogen_timestamp_deps + +build tests/test_db_autogen_timestamp_deps: phony + + +############################################# +# Utility command for test_db_autogen + +build tests/test_db_autogen: phony tests/CMakeFiles/test_db_autogen tests/test_db_autogen/timestamp tests/test_db_autogen/mocs_compilation.cpp tests/test_db_autogen_timestamp_deps + + +############################################# +# Utility command for test_models_autogen_timestamp_deps + +build tests/test_models_autogen_timestamp_deps: phony + + +############################################# +# Utility command for test_models_autogen + +build tests/test_models_autogen: phony tests/CMakeFiles/test_models_autogen tests/test_models_autogen/timestamp tests/test_models_autogen/mocs_compilation.cpp tests/test_models_autogen_timestamp_deps + + +############################################# +# Utility command for test_sequence_detector_autogen_timestamp_deps + +build tests/test_sequence_detector_autogen_timestamp_deps: phony + + +############################################# +# Utility command for test_sequence_detector_autogen + +build tests/test_sequence_detector_autogen: phony tests/CMakeFiles/test_sequence_detector_autogen tests/test_sequence_detector_autogen/timestamp tests/test_sequence_detector_autogen/mocs_compilation.cpp tests/test_sequence_detector_autogen_timestamp_deps + + +############################################# +# Utility command for test_importer_autogen_timestamp_deps + +build tests/test_importer_autogen_timestamp_deps: phony + + +############################################# +# Utility command for test_importer_autogen + +build tests/test_importer_autogen: phony tests/CMakeFiles/test_importer_autogen tests/test_importer_autogen/timestamp tests/test_importer_autogen/mocs_compilation.cpp tests/test_importer_autogen_timestamp_deps + + +############################################# +# Utility command for test_utils_autogen_timestamp_deps + +build tests/test_utils_autogen_timestamp_deps: phony + + +############################################# +# Utility command for test_utils_autogen + +build tests/test_utils_autogen: phony tests/CMakeFiles/test_utils_autogen tests/test_utils_autogen/timestamp tests/test_utils_autogen/mocs_compilation.cpp tests/test_utils_autogen_timestamp_deps + + +############################################# +# Utility command for test_live_preview_manager_autogen_timestamp_deps + +build tests/test_live_preview_manager_autogen_timestamp_deps: phony + + +############################################# +# Utility command for test_live_preview_manager_autogen + +build tests/test_live_preview_manager_autogen: phony tests/CMakeFiles/test_live_preview_manager_autogen tests/test_live_preview_manager_autogen/timestamp tests/test_live_preview_manager_autogen/mocs_compilation.cpp tests/test_live_preview_manager_autogen_timestamp_deps + + +############################################# +# Utility command for test_media_converter_worker_autogen_timestamp_deps + +build tests/test_media_converter_worker_autogen_timestamp_deps: phony + + +############################################# +# Utility command for test_media_converter_worker_autogen + +build tests/test_media_converter_worker_autogen: phony tests/CMakeFiles/test_media_converter_worker_autogen tests/test_media_converter_worker_autogen/timestamp tests/test_media_converter_worker_autogen/mocs_compilation.cpp tests/test_media_converter_worker_autogen_timestamp_deps + + +############################################# +# Utility command for test_virtual_drag_autogen_timestamp_deps + +build tests/test_virtual_drag_autogen_timestamp_deps: phony + + +############################################# +# Utility command for test_virtual_drag_autogen + +build tests/test_virtual_drag_autogen: phony tests/CMakeFiles/test_virtual_drag_autogen tests/test_virtual_drag_autogen/timestamp tests/test_virtual_drag_autogen/mocs_compilation.cpp tests/test_virtual_drag_autogen_timestamp_deps + + +############################################# +# Utility command for test_drag_utils_autogen_timestamp_deps + +build tests/test_drag_utils_autogen_timestamp_deps: phony + + +############################################# +# Utility command for test_drag_utils_autogen + +build tests/test_drag_utils_autogen: phony tests/CMakeFiles/test_drag_utils_autogen tests/test_drag_utils_autogen/timestamp tests/test_drag_utils_autogen/mocs_compilation.cpp tests/test_drag_utils_autogen_timestamp_deps + + +############################################# +# Utility command for test_everything_search_autogen_timestamp_deps + +build tests/test_everything_search_autogen_timestamp_deps: phony + + +############################################# +# Utility command for test_everything_search_autogen + +build tests/test_everything_search_autogen: phony tests/CMakeFiles/test_everything_search_autogen tests/test_everything_search_autogen/timestamp tests/test_everything_search_autogen/mocs_compilation.cpp tests/test_everything_search_autogen_timestamp_deps + + +############################################# +# Utility command for test_icon_utils_autogen_timestamp_deps + +build tests/test_icon_utils_autogen_timestamp_deps: phony + + +############################################# +# Utility command for test_icon_utils_autogen + +build tests/test_icon_utils_autogen: phony tests/CMakeFiles/test_icon_utils_autogen tests/test_icon_utils_autogen/timestamp tests/test_icon_utils_autogen/mocs_compilation.cpp tests/test_icon_utils_autogen_timestamp_deps + + +############################################# +# Utility command for test_grid_scrub_autogen_timestamp_deps + +build tests/test_grid_scrub_autogen_timestamp_deps: phony + + +############################################# +# Utility command for test_grid_scrub_autogen + +build tests/test_grid_scrub_autogen: phony tests/CMakeFiles/test_grid_scrub_autogen tests/test_grid_scrub_autogen/timestamp tests/test_grid_scrub_autogen/mocs_compilation.cpp tests/test_grid_scrub_autogen_timestamp_deps + + +############################################# +# Utility command for test_platform_session_autogen_timestamp_deps + +build tests/test_platform_session_autogen_timestamp_deps: phony + + +############################################# +# Utility command for test_platform_session_autogen + +build tests/test_platform_session_autogen: phony tests/CMakeFiles/test_platform_session_autogen tests/test_platform_session_autogen/timestamp tests/test_platform_session_autogen/mocs_compilation.cpp tests/test_platform_session_autogen_timestamp_deps + + +############################################# +# Utility command for test_annotation_items_autogen_timestamp_deps + +build tests/test_annotation_items_autogen_timestamp_deps: phony + + +############################################# +# Utility command for test_annotation_items_autogen + +build tests/test_annotation_items_autogen: phony tests/CMakeFiles/test_annotation_items_autogen tests/test_annotation_items_autogen/timestamp tests/test_annotation_items_autogen/mocs_compilation.cpp tests/test_annotation_items_autogen_timestamp_deps + + +############################################# +# Custom command for tests/test_simple_autogen/timestamp + +build tests/test_simple_autogen/timestamp tests/test_simple_autogen/mocs_compilation.cpp | ${cmake_ninja_workdir}tests/test_simple_autogen/timestamp ${cmake_ninja_workdir}tests/test_simple_autogen/mocs_compilation.cpp: CUSTOM_COMMAND /usr/lib64/qt6/libexec/moc /usr/lib64/qt6/libexec/uic || tests/test_simple_autogen_timestamp_deps + COMMAND = cd /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests && /usr/bin/cmake -E cmake_autogen /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/CMakeFiles/test_simple_autogen.dir/AutogenInfo.json Release && /usr/bin/cmake -E touch /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_simple_autogen/timestamp && /usr/bin/cmake -E cmake_transform_depfile Ninja gccdepfile /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6 /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_simple_autogen/deps /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/CMakeFiles/d/25d224bf3c1cd74434a90d5ff39043d95d5bd97b6724aa086637c4778f31e71c.d + DESC = Automatic MOC and UIC for target test_simple + depfile = CMakeFiles/d/25d224bf3c1cd74434a90d5ff39043d95d5bd97b6724aa086637c4778f31e71c.d + deps = gcc + restat = 1 + + +############################################# +# Custom command for tests/test_db_autogen/timestamp + +build tests/test_db_autogen/timestamp tests/test_db_autogen/mocs_compilation.cpp | ${cmake_ninja_workdir}tests/test_db_autogen/timestamp ${cmake_ninja_workdir}tests/test_db_autogen/mocs_compilation.cpp: CUSTOM_COMMAND /usr/lib64/qt6/libexec/moc /usr/lib64/qt6/libexec/uic || tests/test_db_autogen_timestamp_deps + COMMAND = cd /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests && /usr/bin/cmake -E cmake_autogen /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/CMakeFiles/test_db_autogen.dir/AutogenInfo.json Release && /usr/bin/cmake -E touch /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_db_autogen/timestamp && /usr/bin/cmake -E cmake_transform_depfile Ninja gccdepfile /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6 /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_db_autogen/deps /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/CMakeFiles/d/0b1db81b93dbe244c74e47e0523c34cb9f2551a7d0c34c3ca4bd7856a661ac95.d + DESC = Automatic MOC and UIC for target test_db + depfile = CMakeFiles/d/0b1db81b93dbe244c74e47e0523c34cb9f2551a7d0c34c3ca4bd7856a661ac95.d + deps = gcc + restat = 1 + + +############################################# +# Custom command for tests/test_models_autogen/timestamp + +build tests/test_models_autogen/timestamp tests/test_models_autogen/mocs_compilation.cpp | ${cmake_ninja_workdir}tests/test_models_autogen/timestamp ${cmake_ninja_workdir}tests/test_models_autogen/mocs_compilation.cpp: CUSTOM_COMMAND /usr/lib64/qt6/libexec/moc /usr/lib64/qt6/libexec/uic || tests/test_models_autogen_timestamp_deps + COMMAND = cd /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests && /usr/bin/cmake -E cmake_autogen /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/CMakeFiles/test_models_autogen.dir/AutogenInfo.json Release && /usr/bin/cmake -E touch /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_models_autogen/timestamp && /usr/bin/cmake -E cmake_transform_depfile Ninja gccdepfile /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6 /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_models_autogen/deps /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/CMakeFiles/d/6dad53ff0411f72324ff412c70a8f89b79f91e17483f5ae18bd3849ebf4eb309.d + DESC = Automatic MOC and UIC for target test_models + depfile = CMakeFiles/d/6dad53ff0411f72324ff412c70a8f89b79f91e17483f5ae18bd3849ebf4eb309.d + deps = gcc + restat = 1 + + +############################################# +# Custom command for tests/test_sequence_detector_autogen/timestamp + +build tests/test_sequence_detector_autogen/timestamp tests/test_sequence_detector_autogen/mocs_compilation.cpp | ${cmake_ninja_workdir}tests/test_sequence_detector_autogen/timestamp ${cmake_ninja_workdir}tests/test_sequence_detector_autogen/mocs_compilation.cpp: CUSTOM_COMMAND /usr/lib64/qt6/libexec/moc /usr/lib64/qt6/libexec/uic || tests/test_sequence_detector_autogen_timestamp_deps + COMMAND = cd /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests && /usr/bin/cmake -E cmake_autogen /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/CMakeFiles/test_sequence_detector_autogen.dir/AutogenInfo.json Release && /usr/bin/cmake -E touch /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_sequence_detector_autogen/timestamp && /usr/bin/cmake -E cmake_transform_depfile Ninja gccdepfile /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6 /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_sequence_detector_autogen/deps /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/CMakeFiles/d/027f2c82d21bc45652b0b8a0a47e7968ffd20ef59cbcd9c2c837a914de2a0815.d + DESC = Automatic MOC and UIC for target test_sequence_detector + depfile = CMakeFiles/d/027f2c82d21bc45652b0b8a0a47e7968ffd20ef59cbcd9c2c837a914de2a0815.d + deps = gcc + restat = 1 + + +############################################# +# Custom command for tests/test_importer_autogen/timestamp + +build tests/test_importer_autogen/timestamp tests/test_importer_autogen/mocs_compilation.cpp | ${cmake_ninja_workdir}tests/test_importer_autogen/timestamp ${cmake_ninja_workdir}tests/test_importer_autogen/mocs_compilation.cpp: CUSTOM_COMMAND /usr/lib64/qt6/libexec/moc /usr/lib64/qt6/libexec/uic || tests/test_importer_autogen_timestamp_deps + COMMAND = cd /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests && /usr/bin/cmake -E cmake_autogen /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/CMakeFiles/test_importer_autogen.dir/AutogenInfo.json Release && /usr/bin/cmake -E touch /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_importer_autogen/timestamp && /usr/bin/cmake -E cmake_transform_depfile Ninja gccdepfile /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6 /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_importer_autogen/deps /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/CMakeFiles/d/7961c65db1cbae8b31040a3af6eb05977ebd643d6324abe29faa075e81d23516.d + DESC = Automatic MOC and UIC for target test_importer + depfile = CMakeFiles/d/7961c65db1cbae8b31040a3af6eb05977ebd643d6324abe29faa075e81d23516.d + deps = gcc + restat = 1 + + +############################################# +# Custom command for tests/test_utils_autogen/timestamp + +build tests/test_utils_autogen/timestamp tests/test_utils_autogen/mocs_compilation.cpp | ${cmake_ninja_workdir}tests/test_utils_autogen/timestamp ${cmake_ninja_workdir}tests/test_utils_autogen/mocs_compilation.cpp: CUSTOM_COMMAND /usr/lib64/qt6/libexec/moc /usr/lib64/qt6/libexec/uic || tests/test_utils_autogen_timestamp_deps + COMMAND = cd /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests && /usr/bin/cmake -E cmake_autogen /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/CMakeFiles/test_utils_autogen.dir/AutogenInfo.json Release && /usr/bin/cmake -E touch /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_utils_autogen/timestamp && /usr/bin/cmake -E cmake_transform_depfile Ninja gccdepfile /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6 /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_utils_autogen/deps /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/CMakeFiles/d/b320900294aa03db8b902153ff8f776bd2c685dcf8a207b2c5a115c0d2773a7e.d + DESC = Automatic MOC and UIC for target test_utils + depfile = CMakeFiles/d/b320900294aa03db8b902153ff8f776bd2c685dcf8a207b2c5a115c0d2773a7e.d + deps = gcc + restat = 1 + + +############################################# +# Custom command for tests/test_live_preview_manager_autogen/timestamp + +build tests/test_live_preview_manager_autogen/timestamp tests/test_live_preview_manager_autogen/mocs_compilation.cpp | ${cmake_ninja_workdir}tests/test_live_preview_manager_autogen/timestamp ${cmake_ninja_workdir}tests/test_live_preview_manager_autogen/mocs_compilation.cpp: CUSTOM_COMMAND /usr/lib64/qt6/libexec/moc /usr/lib64/qt6/libexec/uic || tests/test_live_preview_manager_autogen_timestamp_deps + COMMAND = cd /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests && /usr/bin/cmake -E cmake_autogen /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/CMakeFiles/test_live_preview_manager_autogen.dir/AutogenInfo.json Release && /usr/bin/cmake -E touch /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_live_preview_manager_autogen/timestamp && /usr/bin/cmake -E cmake_transform_depfile Ninja gccdepfile /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6 /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_live_preview_manager_autogen/deps /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/CMakeFiles/d/765698aa90d742558b5298cda3774b4d9bbce3bf5d619c52f8cad055a5232aa3.d + DESC = Automatic MOC and UIC for target test_live_preview_manager + depfile = CMakeFiles/d/765698aa90d742558b5298cda3774b4d9bbce3bf5d619c52f8cad055a5232aa3.d + deps = gcc + restat = 1 + + +############################################# +# Custom command for tests/test_media_converter_worker_autogen/timestamp + +build tests/test_media_converter_worker_autogen/timestamp tests/test_media_converter_worker_autogen/mocs_compilation.cpp | ${cmake_ninja_workdir}tests/test_media_converter_worker_autogen/timestamp ${cmake_ninja_workdir}tests/test_media_converter_worker_autogen/mocs_compilation.cpp: CUSTOM_COMMAND /usr/lib64/qt6/libexec/moc /usr/lib64/qt6/libexec/uic || tests/test_media_converter_worker_autogen_timestamp_deps + COMMAND = cd /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests && /usr/bin/cmake -E cmake_autogen /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/CMakeFiles/test_media_converter_worker_autogen.dir/AutogenInfo.json Release && /usr/bin/cmake -E touch /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_media_converter_worker_autogen/timestamp && /usr/bin/cmake -E cmake_transform_depfile Ninja gccdepfile /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6 /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_media_converter_worker_autogen/deps /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/CMakeFiles/d/bf157e21d61a451d53b696cadae821bee87fa26ba2f8f0954954c6cd18adcf75.d + DESC = Automatic MOC and UIC for target test_media_converter_worker + depfile = CMakeFiles/d/bf157e21d61a451d53b696cadae821bee87fa26ba2f8f0954954c6cd18adcf75.d + deps = gcc + restat = 1 + + +############################################# +# Custom command for tests/test_virtual_drag_autogen/timestamp + +build tests/test_virtual_drag_autogen/timestamp tests/test_virtual_drag_autogen/mocs_compilation.cpp | ${cmake_ninja_workdir}tests/test_virtual_drag_autogen/timestamp ${cmake_ninja_workdir}tests/test_virtual_drag_autogen/mocs_compilation.cpp: CUSTOM_COMMAND /usr/lib64/qt6/libexec/moc /usr/lib64/qt6/libexec/uic || tests/test_virtual_drag_autogen_timestamp_deps + COMMAND = cd /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests && /usr/bin/cmake -E cmake_autogen /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/CMakeFiles/test_virtual_drag_autogen.dir/AutogenInfo.json Release && /usr/bin/cmake -E touch /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_virtual_drag_autogen/timestamp && /usr/bin/cmake -E cmake_transform_depfile Ninja gccdepfile /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6 /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_virtual_drag_autogen/deps /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/CMakeFiles/d/5153819c3a6b4301d4a026af639d177abb5140a9f4ad88d5f978f45b42bf19d5.d + DESC = Automatic MOC and UIC for target test_virtual_drag + depfile = CMakeFiles/d/5153819c3a6b4301d4a026af639d177abb5140a9f4ad88d5f978f45b42bf19d5.d + deps = gcc + restat = 1 + + +############################################# +# Custom command for tests/test_drag_utils_autogen/timestamp + +build tests/test_drag_utils_autogen/timestamp tests/test_drag_utils_autogen/mocs_compilation.cpp | ${cmake_ninja_workdir}tests/test_drag_utils_autogen/timestamp ${cmake_ninja_workdir}tests/test_drag_utils_autogen/mocs_compilation.cpp: CUSTOM_COMMAND /usr/lib64/qt6/libexec/moc /usr/lib64/qt6/libexec/uic || tests/test_drag_utils_autogen_timestamp_deps + COMMAND = cd /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests && /usr/bin/cmake -E cmake_autogen /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/CMakeFiles/test_drag_utils_autogen.dir/AutogenInfo.json Release && /usr/bin/cmake -E touch /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_drag_utils_autogen/timestamp && /usr/bin/cmake -E cmake_transform_depfile Ninja gccdepfile /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6 /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_drag_utils_autogen/deps /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/CMakeFiles/d/7579e1658ae7590f6cde5ffbaa45ec41fb92b53008dea515e09004438920387b.d + DESC = Automatic MOC and UIC for target test_drag_utils + depfile = CMakeFiles/d/7579e1658ae7590f6cde5ffbaa45ec41fb92b53008dea515e09004438920387b.d + deps = gcc + restat = 1 + + +############################################# +# Custom command for tests/test_everything_search_autogen/timestamp + +build tests/test_everything_search_autogen/timestamp tests/test_everything_search_autogen/mocs_compilation.cpp | ${cmake_ninja_workdir}tests/test_everything_search_autogen/timestamp ${cmake_ninja_workdir}tests/test_everything_search_autogen/mocs_compilation.cpp: CUSTOM_COMMAND /usr/lib64/qt6/libexec/moc /usr/lib64/qt6/libexec/uic || tests/test_everything_search_autogen_timestamp_deps + COMMAND = cd /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests && /usr/bin/cmake -E cmake_autogen /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/CMakeFiles/test_everything_search_autogen.dir/AutogenInfo.json Release && /usr/bin/cmake -E touch /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_everything_search_autogen/timestamp && /usr/bin/cmake -E cmake_transform_depfile Ninja gccdepfile /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6 /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_everything_search_autogen/deps /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/CMakeFiles/d/6c53632d6da1ce612bf1dde4e690c99d0099e4788f1ac244e4a0bfe8c286c176.d + DESC = Automatic MOC and UIC for target test_everything_search + depfile = CMakeFiles/d/6c53632d6da1ce612bf1dde4e690c99d0099e4788f1ac244e4a0bfe8c286c176.d + deps = gcc + restat = 1 + + +############################################# +# Custom command for tests/test_icon_utils_autogen/timestamp + +build tests/test_icon_utils_autogen/timestamp tests/test_icon_utils_autogen/mocs_compilation.cpp | ${cmake_ninja_workdir}tests/test_icon_utils_autogen/timestamp ${cmake_ninja_workdir}tests/test_icon_utils_autogen/mocs_compilation.cpp: CUSTOM_COMMAND /usr/lib64/qt6/libexec/moc /usr/lib64/qt6/libexec/uic || tests/test_icon_utils_autogen_timestamp_deps + COMMAND = cd /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests && /usr/bin/cmake -E cmake_autogen /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/CMakeFiles/test_icon_utils_autogen.dir/AutogenInfo.json Release && /usr/bin/cmake -E touch /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_icon_utils_autogen/timestamp && /usr/bin/cmake -E cmake_transform_depfile Ninja gccdepfile /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6 /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_icon_utils_autogen/deps /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/CMakeFiles/d/07b20c956eb4c53495ce2562e0cca22ba451dbe8b41fb4f3ee2d8df08be2a9c9.d + DESC = Automatic MOC and UIC for target test_icon_utils + depfile = CMakeFiles/d/07b20c956eb4c53495ce2562e0cca22ba451dbe8b41fb4f3ee2d8df08be2a9c9.d + deps = gcc + restat = 1 + + +############################################# +# Custom command for tests/test_grid_scrub_autogen/timestamp + +build tests/test_grid_scrub_autogen/timestamp tests/test_grid_scrub_autogen/mocs_compilation.cpp | ${cmake_ninja_workdir}tests/test_grid_scrub_autogen/timestamp ${cmake_ninja_workdir}tests/test_grid_scrub_autogen/mocs_compilation.cpp: CUSTOM_COMMAND /usr/lib64/qt6/libexec/moc /usr/lib64/qt6/libexec/uic || tests/test_grid_scrub_autogen_timestamp_deps + COMMAND = cd /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests && /usr/bin/cmake -E cmake_autogen /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/CMakeFiles/test_grid_scrub_autogen.dir/AutogenInfo.json Release && /usr/bin/cmake -E touch /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_grid_scrub_autogen/timestamp && /usr/bin/cmake -E cmake_transform_depfile Ninja gccdepfile /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6 /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_grid_scrub_autogen/deps /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/CMakeFiles/d/d364ecb8eb45bd48fc9f2e400ba237292d38b33769be3c641ae12ea2ca862e2c.d + DESC = Automatic MOC and UIC for target test_grid_scrub + depfile = CMakeFiles/d/d364ecb8eb45bd48fc9f2e400ba237292d38b33769be3c641ae12ea2ca862e2c.d + deps = gcc + restat = 1 + + +############################################# +# Custom command for tests/test_platform_session_autogen/timestamp + +build tests/test_platform_session_autogen/timestamp tests/test_platform_session_autogen/mocs_compilation.cpp | ${cmake_ninja_workdir}tests/test_platform_session_autogen/timestamp ${cmake_ninja_workdir}tests/test_platform_session_autogen/mocs_compilation.cpp: CUSTOM_COMMAND /usr/lib64/qt6/libexec/moc /usr/lib64/qt6/libexec/uic || tests/test_platform_session_autogen_timestamp_deps + COMMAND = cd /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests && /usr/bin/cmake -E cmake_autogen /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/CMakeFiles/test_platform_session_autogen.dir/AutogenInfo.json Release && /usr/bin/cmake -E touch /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_platform_session_autogen/timestamp && /usr/bin/cmake -E cmake_transform_depfile Ninja gccdepfile /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6 /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_platform_session_autogen/deps /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/CMakeFiles/d/0dc18c5c375417e8af298ab7280af1227b93efeeaeba17fe282d13cb48c0e0ff.d + DESC = Automatic MOC and UIC for target test_platform_session + depfile = CMakeFiles/d/0dc18c5c375417e8af298ab7280af1227b93efeeaeba17fe282d13cb48c0e0ff.d + deps = gcc + restat = 1 + + +############################################# +# Custom command for tests/test_annotation_items_autogen/timestamp + +build tests/test_annotation_items_autogen/timestamp tests/test_annotation_items_autogen/mocs_compilation.cpp | ${cmake_ninja_workdir}tests/test_annotation_items_autogen/timestamp ${cmake_ninja_workdir}tests/test_annotation_items_autogen/mocs_compilation.cpp: CUSTOM_COMMAND /usr/lib64/qt6/libexec/moc /usr/lib64/qt6/libexec/uic || tests/test_annotation_items_autogen_timestamp_deps + COMMAND = cd /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests && /usr/bin/cmake -E cmake_autogen /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/CMakeFiles/test_annotation_items_autogen.dir/AutogenInfo.json Release && /usr/bin/cmake -E touch /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_annotation_items_autogen/timestamp && /usr/bin/cmake -E cmake_transform_depfile Ninja gccdepfile /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6 /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_annotation_items_autogen/deps /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/CMakeFiles/d/77985f0959e1bae97f8fbc0ab8791fa64849db4a6977fbdfd611b345d7b93083.d + DESC = Automatic MOC and UIC for target test_annotation_items + depfile = CMakeFiles/d/77985f0959e1bae97f8fbc0ab8791fa64849db4a6977fbdfd611b345d7b93083.d + deps = gcc + restat = 1 + + +############################################# +# Phony custom command for tests/CMakeFiles/test_simple_autogen + +build tests/CMakeFiles/test_simple_autogen | ${cmake_ninja_workdir}tests/CMakeFiles/test_simple_autogen: phony tests/test_simple_autogen/timestamp || tests/test_simple_autogen_timestamp_deps + + +############################################# +# Phony custom command for tests/CMakeFiles/test_db_autogen + +build tests/CMakeFiles/test_db_autogen | ${cmake_ninja_workdir}tests/CMakeFiles/test_db_autogen: phony tests/test_db_autogen/timestamp || tests/test_db_autogen_timestamp_deps + + +############################################# +# Phony custom command for tests/CMakeFiles/test_models_autogen + +build tests/CMakeFiles/test_models_autogen | ${cmake_ninja_workdir}tests/CMakeFiles/test_models_autogen: phony tests/test_models_autogen/timestamp || tests/test_models_autogen_timestamp_deps + + +############################################# +# Phony custom command for tests/CMakeFiles/test_sequence_detector_autogen + +build tests/CMakeFiles/test_sequence_detector_autogen | ${cmake_ninja_workdir}tests/CMakeFiles/test_sequence_detector_autogen: phony tests/test_sequence_detector_autogen/timestamp || tests/test_sequence_detector_autogen_timestamp_deps + + +############################################# +# Phony custom command for tests/CMakeFiles/test_importer_autogen + +build tests/CMakeFiles/test_importer_autogen | ${cmake_ninja_workdir}tests/CMakeFiles/test_importer_autogen: phony tests/test_importer_autogen/timestamp || tests/test_importer_autogen_timestamp_deps + + +############################################# +# Phony custom command for tests/CMakeFiles/test_utils_autogen + +build tests/CMakeFiles/test_utils_autogen | ${cmake_ninja_workdir}tests/CMakeFiles/test_utils_autogen: phony tests/test_utils_autogen/timestamp || tests/test_utils_autogen_timestamp_deps + + +############################################# +# Phony custom command for tests/CMakeFiles/test_live_preview_manager_autogen + +build tests/CMakeFiles/test_live_preview_manager_autogen | ${cmake_ninja_workdir}tests/CMakeFiles/test_live_preview_manager_autogen: phony tests/test_live_preview_manager_autogen/timestamp || tests/test_live_preview_manager_autogen_timestamp_deps + + +############################################# +# Phony custom command for tests/CMakeFiles/test_media_converter_worker_autogen + +build tests/CMakeFiles/test_media_converter_worker_autogen | ${cmake_ninja_workdir}tests/CMakeFiles/test_media_converter_worker_autogen: phony tests/test_media_converter_worker_autogen/timestamp || tests/test_media_converter_worker_autogen_timestamp_deps + + +############################################# +# Phony custom command for tests/CMakeFiles/test_virtual_drag_autogen + +build tests/CMakeFiles/test_virtual_drag_autogen | ${cmake_ninja_workdir}tests/CMakeFiles/test_virtual_drag_autogen: phony tests/test_virtual_drag_autogen/timestamp || tests/test_virtual_drag_autogen_timestamp_deps + + +############################################# +# Phony custom command for tests/CMakeFiles/test_drag_utils_autogen + +build tests/CMakeFiles/test_drag_utils_autogen | ${cmake_ninja_workdir}tests/CMakeFiles/test_drag_utils_autogen: phony tests/test_drag_utils_autogen/timestamp || tests/test_drag_utils_autogen_timestamp_deps + + +############################################# +# Phony custom command for tests/CMakeFiles/test_everything_search_autogen + +build tests/CMakeFiles/test_everything_search_autogen | ${cmake_ninja_workdir}tests/CMakeFiles/test_everything_search_autogen: phony tests/test_everything_search_autogen/timestamp || tests/test_everything_search_autogen_timestamp_deps + + +############################################# +# Phony custom command for tests/CMakeFiles/test_icon_utils_autogen + +build tests/CMakeFiles/test_icon_utils_autogen | ${cmake_ninja_workdir}tests/CMakeFiles/test_icon_utils_autogen: phony tests/test_icon_utils_autogen/timestamp || tests/test_icon_utils_autogen_timestamp_deps + + +############################################# +# Phony custom command for tests/CMakeFiles/test_grid_scrub_autogen + +build tests/CMakeFiles/test_grid_scrub_autogen | ${cmake_ninja_workdir}tests/CMakeFiles/test_grid_scrub_autogen: phony tests/test_grid_scrub_autogen/timestamp || tests/test_grid_scrub_autogen_timestamp_deps + + +############################################# +# Phony custom command for tests/CMakeFiles/test_platform_session_autogen + +build tests/CMakeFiles/test_platform_session_autogen | ${cmake_ninja_workdir}tests/CMakeFiles/test_platform_session_autogen: phony tests/test_platform_session_autogen/timestamp || tests/test_platform_session_autogen_timestamp_deps + + +############################################# +# Phony custom command for tests/CMakeFiles/test_annotation_items_autogen + +build tests/CMakeFiles/test_annotation_items_autogen | ${cmake_ninja_workdir}tests/CMakeFiles/test_annotation_items_autogen: phony tests/test_annotation_items_autogen/timestamp || tests/test_annotation_items_autogen_timestamp_deps + +# ============================================================================= +# Target aliases. + +build test_annotation_items: phony tests/test_annotation_items + +build test_annotation_items_autogen: phony tests/test_annotation_items_autogen + +build test_annotation_items_autogen_timestamp_deps: phony tests/test_annotation_items_autogen_timestamp_deps + +build test_db: phony tests/test_db + +build test_db_autogen: phony tests/test_db_autogen + +build test_db_autogen_timestamp_deps: phony tests/test_db_autogen_timestamp_deps + +build test_drag_utils: phony tests/test_drag_utils + +build test_drag_utils_autogen: phony tests/test_drag_utils_autogen + +build test_drag_utils_autogen_timestamp_deps: phony tests/test_drag_utils_autogen_timestamp_deps + +build test_everything_search: phony tests/test_everything_search + +build test_everything_search_autogen: phony tests/test_everything_search_autogen + +build test_everything_search_autogen_timestamp_deps: phony tests/test_everything_search_autogen_timestamp_deps + +build test_grid_scrub: phony tests/test_grid_scrub + +build test_grid_scrub_autogen: phony tests/test_grid_scrub_autogen + +build test_grid_scrub_autogen_timestamp_deps: phony tests/test_grid_scrub_autogen_timestamp_deps + +build test_icon_utils: phony tests/test_icon_utils + +build test_icon_utils_autogen: phony tests/test_icon_utils_autogen + +build test_icon_utils_autogen_timestamp_deps: phony tests/test_icon_utils_autogen_timestamp_deps + +build test_importer: phony tests/test_importer + +build test_importer_autogen: phony tests/test_importer_autogen + +build test_importer_autogen_timestamp_deps: phony tests/test_importer_autogen_timestamp_deps + +build test_live_preview_manager: phony tests/test_live_preview_manager + +build test_live_preview_manager_autogen: phony tests/test_live_preview_manager_autogen + +build test_live_preview_manager_autogen_timestamp_deps: phony tests/test_live_preview_manager_autogen_timestamp_deps + +build test_media_converter_worker: phony tests/test_media_converter_worker + +build test_media_converter_worker_autogen: phony tests/test_media_converter_worker_autogen + +build test_media_converter_worker_autogen_timestamp_deps: phony tests/test_media_converter_worker_autogen_timestamp_deps + +build test_models: phony tests/test_models + +build test_models_autogen: phony tests/test_models_autogen + +build test_models_autogen_timestamp_deps: phony tests/test_models_autogen_timestamp_deps + +build test_platform_session: phony tests/test_platform_session + +build test_platform_session_autogen: phony tests/test_platform_session_autogen + +build test_platform_session_autogen_timestamp_deps: phony tests/test_platform_session_autogen_timestamp_deps + +build test_sequence_detector: phony tests/test_sequence_detector + +build test_sequence_detector_autogen: phony tests/test_sequence_detector_autogen + +build test_sequence_detector_autogen_timestamp_deps: phony tests/test_sequence_detector_autogen_timestamp_deps + +build test_simple: phony tests/test_simple + +build test_simple_autogen: phony tests/test_simple_autogen + +build test_simple_autogen_timestamp_deps: phony tests/test_simple_autogen_timestamp_deps + +build test_utils: phony tests/test_utils + +build test_utils_autogen: phony tests/test_utils_autogen + +build test_utils_autogen_timestamp_deps: phony tests/test_utils_autogen_timestamp_deps + +build test_virtual_drag: phony tests/test_virtual_drag + +build test_virtual_drag_autogen: phony tests/test_virtual_drag_autogen + +build test_virtual_drag_autogen_timestamp_deps: phony tests/test_virtual_drag_autogen_timestamp_deps + +# ============================================================================= +# Folder targets. + +# ============================================================================= + +############################################# +# Folder: /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux + +build all: phony kassetmanagerqt tests/all + +# ============================================================================= + +############################################# +# Folder: /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests + +build tests/all: phony tests/test_simple tests/test_db tests/test_models tests/test_sequence_detector tests/test_importer tests/test_utils tests/test_live_preview_manager tests/test_media_converter_worker tests/test_virtual_drag tests/test_drag_utils tests/test_everything_search tests/test_icon_utils tests/test_grid_scrub tests/test_platform_session tests/test_annotation_items + +# ============================================================================= +# Built-in targets + + +############################################# +# Re-run CMake if any of its inputs changed. + +build build.ninja: RERUN_CMAKE | /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/CMakeLists.txt /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/CMakeLists.txt /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/OpenColorIO/OpenColorIOConfig.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/OpenColorIO/OpenColorIOConfigVersion.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/OpenColorIO/OpenColorIOTargets-release.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/OpenColorIO/OpenColorIOTargets.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/ftk/ftk-resourceTargets-release.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/ftk/ftk-resourceTargets.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/ftk/ftkConfig.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/ftk/ftkCoreTargets-release.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/ftk/ftkCoreTargets.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/ftk/ftkGLTargets-release.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/ftk/ftkGLTargets.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/ftk/ftkResourceTargets-release.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/ftk/ftkResourceTargets.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/ftk/ftkUITargets-release.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/ftk/ftkUITargets.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/ftk/ftkgladTargets-release.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/ftk/ftkgladTargets.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/libjpeg-turbo/libjpeg-turboConfig.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/libjpeg-turbo/libjpeg-turboConfigVersion.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/libjpeg-turbo/libjpeg-turboTargets-release.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/libjpeg-turbo/libjpeg-turboTargets.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/tlRender/tlCoreTargets-release.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/tlRender/tlCoreTargets.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/tlRender/tlDeviceTargets-release.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/tlRender/tlDeviceTargets.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/tlRender/tlGLTargets-release.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/tlRender/tlGLTargets.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/tlRender/tlIOTargets-release.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/tlRender/tlIOTargets.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/tlRender/tlQtQuickTargets-release.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/tlRender/tlQtQuickTargets.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/tlRender/tlQtTargets-release.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/tlRender/tlQtTargets.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/tlRender/tlQtWidgetTargets-release.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/tlRender/tlQtWidgetTargets.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/tlRender/tlRenderConfig.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/tlRender/tlResourceTargets-release.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/tlRender/tlResourceTargets.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/tlRender/tlTimelineTargets-release.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/tlRender/tlTimelineTargets.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/tlRender/tlUITargets-release.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/tlRender/tlUITargets.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/Imath/ImathConfig.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/Imath/ImathConfigVersion.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/Imath/ImathTargets-release.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/Imath/ImathTargets.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/OpenEXR/OpenEXRConfig.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/OpenEXR/OpenEXRConfigVersion.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/OpenEXR/OpenEXRTargets-release.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/OpenEXR/OpenEXRTargets.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/OpenImageIO/OpenImageIOConfig.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/OpenImageIO/OpenImageIOConfigVersion.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/OpenImageIO/OpenImageIOTargets-release.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/OpenImageIO/OpenImageIOTargets.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/SDL2/SDL2Config.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/SDL2/SDL2ConfigVersion.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/SDL2/SDL2mainTargets-release.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/SDL2/SDL2mainTargets.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/SDL2/SDL2staticTargets-release.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/SDL2/SDL2staticTargets.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/SDL2/SDL2testTargets-release.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/SDL2/SDL2testTargets.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/SDL2/sdlfind.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/expat-2.7.2/expat-config-version.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/expat-2.7.2/expat-config.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/expat-2.7.2/expat-release.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/expat-2.7.2/expat.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/lunasvg/lunasvgConfig.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/lunasvg/lunasvgConfigVersion.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/lunasvg/lunasvgTargets-release.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/lunasvg/lunasvgTargets.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/minizip-ng/minizip-ng-config-version.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/minizip-ng/minizip-ng-config.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/minizip-ng/minizip-ng-release.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/minizip-ng/minizip-ng.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/plutovg/plutovgConfig.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/plutovg/plutovgConfigVersion.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/plutovg/plutovgTargets-release.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/plutovg/plutovgTargets.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/yaml-cpp/yaml-cpp-config-version.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/yaml-cpp/yaml-cpp-config.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/yaml-cpp/yaml-cpp-targets-release.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/yaml-cpp/yaml-cpp-targets.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/share/OpenColorIO/cmake/modules/FindImath.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/share/OpenColorIO/cmake/modules/Findexpat.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/share/OpenColorIO/cmake/modules/Findpystring.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/share/OpenColorIO/cmake/modules/Findyaml-cpp.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/share/cmake/nlohmann_json/nlohmann_jsonConfig.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/share/cmake/nlohmann_json/nlohmann_jsonConfigVersion.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/share/cmake/nlohmann_json/nlohmann_jsonTargets.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/share/opentime/OpenTimeConfig.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/share/opentime/OpenTimeTargets-release.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/share/opentime/OpenTimeTargets.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/share/opentimelineio/OpenTimelineIOConfig.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/share/opentimelineio/OpenTimelineIOTargets-release.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/share/opentimelineio/OpenTimelineIOTargets.cmake /usr/lib64/cmake/Qt6/FindWrapAtomic.cmake /usr/lib64/cmake/Qt6/FindWrapOpenGL.cmake /usr/lib64/cmake/Qt6/FindWrapVulkanHeaders.cmake /usr/lib64/cmake/Qt6/Qt6Config.cmake /usr/lib64/cmake/Qt6/Qt6ConfigExtras.cmake /usr/lib64/cmake/Qt6/Qt6ConfigVersion.cmake /usr/lib64/cmake/Qt6/Qt6ConfigVersionImpl.cmake /usr/lib64/cmake/Qt6/Qt6Dependencies.cmake /usr/lib64/cmake/Qt6/Qt6Targets.cmake /usr/lib64/cmake/Qt6/Qt6VersionlessAliasTargets.cmake /usr/lib64/cmake/Qt6/QtFeature.cmake /usr/lib64/cmake/Qt6/QtFeatureCommon.cmake /usr/lib64/cmake/Qt6/QtInstallPaths.cmake /usr/lib64/cmake/Qt6/QtPublicAndroidHelpers.cmake /usr/lib64/cmake/Qt6/QtPublicAppleHelpers.cmake /usr/lib64/cmake/Qt6/QtPublicCMakeEarlyPolicyHelpers.cmake /usr/lib64/cmake/Qt6/QtPublicCMakeHelpers.cmake /usr/lib64/cmake/Qt6/QtPublicCMakeVersionHelpers.cmake /usr/lib64/cmake/Qt6/QtPublicDependencyHelpers.cmake /usr/lib64/cmake/Qt6/QtPublicExternalProjectHelpers.cmake /usr/lib64/cmake/Qt6/QtPublicFinalizerHelpers.cmake /usr/lib64/cmake/Qt6/QtPublicFindPackageHelpers.cmake /usr/lib64/cmake/Qt6/QtPublicGitHelpers.cmake /usr/lib64/cmake/Qt6/QtPublicPluginHelpers.cmake /usr/lib64/cmake/Qt6/QtPublicPluginHelpers_v2.cmake /usr/lib64/cmake/Qt6/QtPublicSbomAttributionHelpers.cmake /usr/lib64/cmake/Qt6/QtPublicSbomBuildToolHelpers.cmake /usr/lib64/cmake/Qt6/QtPublicSbomCommonGenerationHelpers.cmake /usr/lib64/cmake/Qt6/QtPublicSbomCpeHelpers.cmake /usr/lib64/cmake/Qt6/QtPublicSbomCycloneDXHelpers.cmake /usr/lib64/cmake/Qt6/QtPublicSbomDepHelpers.cmake /usr/lib64/cmake/Qt6/QtPublicSbomDocumentNamespaceHelpers.cmake /usr/lib64/cmake/Qt6/QtPublicSbomExternalReferenceHelpers.cmake /usr/lib64/cmake/Qt6/QtPublicSbomFileHelpers.cmake /usr/lib64/cmake/Qt6/QtPublicSbomGenerationCycloneDXHelpers.cmake /usr/lib64/cmake/Qt6/QtPublicSbomGenerationHelpers.cmake /usr/lib64/cmake/Qt6/QtPublicSbomHelpers.cmake /usr/lib64/cmake/Qt6/QtPublicSbomLicenseHelpers.cmake /usr/lib64/cmake/Qt6/QtPublicSbomOpsHelpers.cmake /usr/lib64/cmake/Qt6/QtPublicSbomPurlHelpers.cmake /usr/lib64/cmake/Qt6/QtPublicSbomPythonHelpers.cmake /usr/lib64/cmake/Qt6/QtPublicSbomQtEntityHelpers.cmake /usr/lib64/cmake/Qt6/QtPublicSbomRelationshipHelpers.cmake /usr/lib64/cmake/Qt6/QtPublicSbomSystemDepHelpers.cmake /usr/lib64/cmake/Qt6/QtPublicTargetHelpers.cmake /usr/lib64/cmake/Qt6/QtPublicTestHelpers.cmake /usr/lib64/cmake/Qt6/QtPublicToolHelpers.cmake /usr/lib64/cmake/Qt6/QtPublicWalkLibsHelpers.cmake /usr/lib64/cmake/Qt6/QtPublicWindowsHelpers.cmake /usr/lib64/cmake/Qt6Concurrent/Qt6ConcurrentAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Concurrent/Qt6ConcurrentConfig.cmake /usr/lib64/cmake/Qt6Concurrent/Qt6ConcurrentConfigVersion.cmake /usr/lib64/cmake/Qt6Concurrent/Qt6ConcurrentConfigVersionImpl.cmake /usr/lib64/cmake/Qt6Concurrent/Qt6ConcurrentDependencies.cmake /usr/lib64/cmake/Qt6Concurrent/Qt6ConcurrentTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Concurrent/Qt6ConcurrentTargets.cmake /usr/lib64/cmake/Qt6Concurrent/Qt6ConcurrentVersionlessAliasTargets.cmake /usr/lib64/cmake/Qt6Core/Qt6CoreAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Core/Qt6CoreConfig.cmake /usr/lib64/cmake/Qt6Core/Qt6CoreConfigExtras.cmake /usr/lib64/cmake/Qt6Core/Qt6CoreConfigVersion.cmake /usr/lib64/cmake/Qt6Core/Qt6CoreConfigVersionImpl.cmake /usr/lib64/cmake/Qt6Core/Qt6CoreDependencies.cmake /usr/lib64/cmake/Qt6Core/Qt6CoreMacros.cmake /usr/lib64/cmake/Qt6Core/Qt6CoreTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Core/Qt6CoreTargets.cmake /usr/lib64/cmake/Qt6Core/Qt6CoreVersionlessAliasTargets.cmake /usr/lib64/cmake/Qt6CoreTools/Qt6CoreToolsAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6CoreTools/Qt6CoreToolsConfig.cmake /usr/lib64/cmake/Qt6CoreTools/Qt6CoreToolsConfigVersion.cmake /usr/lib64/cmake/Qt6CoreTools/Qt6CoreToolsConfigVersionImpl.cmake /usr/lib64/cmake/Qt6CoreTools/Qt6CoreToolsDependencies.cmake /usr/lib64/cmake/Qt6CoreTools/Qt6CoreToolsTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6CoreTools/Qt6CoreToolsTargets.cmake /usr/lib64/cmake/Qt6CoreTools/Qt6CoreToolsVersionlessTargets.cmake /usr/lib64/cmake/Qt6DBus/Qt6DBusAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6DBus/Qt6DBusConfig.cmake /usr/lib64/cmake/Qt6DBus/Qt6DBusConfigVersion.cmake /usr/lib64/cmake/Qt6DBus/Qt6DBusConfigVersionImpl.cmake /usr/lib64/cmake/Qt6DBus/Qt6DBusDependencies.cmake /usr/lib64/cmake/Qt6DBus/Qt6DBusMacros.cmake /usr/lib64/cmake/Qt6DBus/Qt6DBusTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6DBus/Qt6DBusTargets.cmake /usr/lib64/cmake/Qt6DBus/Qt6DBusVersionlessAliasTargets.cmake /usr/lib64/cmake/Qt6DBusTools/Qt6DBusToolsAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6DBusTools/Qt6DBusToolsConfig.cmake /usr/lib64/cmake/Qt6DBusTools/Qt6DBusToolsConfigVersion.cmake /usr/lib64/cmake/Qt6DBusTools/Qt6DBusToolsConfigVersionImpl.cmake /usr/lib64/cmake/Qt6DBusTools/Qt6DBusToolsDependencies.cmake /usr/lib64/cmake/Qt6DBusTools/Qt6DBusToolsTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6DBusTools/Qt6DBusToolsTargets.cmake /usr/lib64/cmake/Qt6DBusTools/Qt6DBusToolsVersionlessTargets.cmake /usr/lib64/cmake/Qt6Gui/Qt6DmaBufServerBufferPluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6DmaBufServerBufferPluginConfig.cmake /usr/lib64/cmake/Qt6Gui/Qt6DmaBufServerBufferPluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6DmaBufServerBufferPluginTargets.cmake /usr/lib64/cmake/Qt6Gui/Qt6DrmEglServerBufferPluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6DrmEglServerBufferPluginConfig.cmake /usr/lib64/cmake/Qt6Gui/Qt6DrmEglServerBufferPluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6DrmEglServerBufferPluginTargets.cmake /usr/lib64/cmake/Qt6Gui/Qt6GuiAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6GuiConfig.cmake /usr/lib64/cmake/Qt6Gui/Qt6GuiConfigVersion.cmake /usr/lib64/cmake/Qt6Gui/Qt6GuiConfigVersionImpl.cmake /usr/lib64/cmake/Qt6Gui/Qt6GuiDependencies.cmake /usr/lib64/cmake/Qt6Gui/Qt6GuiPlugins.cmake /usr/lib64/cmake/Qt6Gui/Qt6GuiTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6GuiTargets.cmake /usr/lib64/cmake/Qt6Gui/Qt6GuiVersionlessAliasTargets.cmake /usr/lib64/cmake/Qt6Gui/Qt6QComposePlatformInputContextPluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QComposePlatformInputContextPluginConfig.cmake /usr/lib64/cmake/Qt6Gui/Qt6QComposePlatformInputContextPluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QComposePlatformInputContextPluginTargets.cmake /usr/lib64/cmake/Qt6Gui/Qt6QEglFSEmulatorIntegrationPluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QEglFSEmulatorIntegrationPluginConfig.cmake /usr/lib64/cmake/Qt6Gui/Qt6QEglFSEmulatorIntegrationPluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QEglFSEmulatorIntegrationPluginTargets.cmake /usr/lib64/cmake/Qt6Gui/Qt6QEglFSIntegrationPluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QEglFSIntegrationPluginConfig.cmake /usr/lib64/cmake/Qt6Gui/Qt6QEglFSIntegrationPluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QEglFSIntegrationPluginTargets.cmake /usr/lib64/cmake/Qt6Gui/Qt6QEglFSKmsEglDeviceIntegrationPluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QEglFSKmsEglDeviceIntegrationPluginConfig.cmake /usr/lib64/cmake/Qt6Gui/Qt6QEglFSKmsEglDeviceIntegrationPluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QEglFSKmsEglDeviceIntegrationPluginTargets.cmake /usr/lib64/cmake/Qt6Gui/Qt6QEglFSKmsGbmIntegrationPluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QEglFSKmsGbmIntegrationPluginConfig.cmake /usr/lib64/cmake/Qt6Gui/Qt6QEglFSKmsGbmIntegrationPluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QEglFSKmsGbmIntegrationPluginTargets.cmake /usr/lib64/cmake/Qt6Gui/Qt6QEglFSX11IntegrationPluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QEglFSX11IntegrationPluginConfig.cmake /usr/lib64/cmake/Qt6Gui/Qt6QEglFSX11IntegrationPluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QEglFSX11IntegrationPluginTargets.cmake /usr/lib64/cmake/Qt6Gui/Qt6QEvdevKeyboardPluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QEvdevKeyboardPluginConfig.cmake /usr/lib64/cmake/Qt6Gui/Qt6QEvdevKeyboardPluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QEvdevKeyboardPluginTargets.cmake /usr/lib64/cmake/Qt6Gui/Qt6QEvdevMousePluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QEvdevMousePluginConfig.cmake /usr/lib64/cmake/Qt6Gui/Qt6QEvdevMousePluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QEvdevMousePluginTargets.cmake /usr/lib64/cmake/Qt6Gui/Qt6QEvdevTabletPluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QEvdevTabletPluginConfig.cmake /usr/lib64/cmake/Qt6Gui/Qt6QEvdevTabletPluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QEvdevTabletPluginTargets.cmake /usr/lib64/cmake/Qt6Gui/Qt6QEvdevTouchScreenPluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QEvdevTouchScreenPluginConfig.cmake /usr/lib64/cmake/Qt6Gui/Qt6QEvdevTouchScreenPluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QEvdevTouchScreenPluginTargets.cmake /usr/lib64/cmake/Qt6Gui/Qt6QGifPluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QGifPluginConfig.cmake /usr/lib64/cmake/Qt6Gui/Qt6QGifPluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QGifPluginTargets.cmake /usr/lib64/cmake/Qt6Gui/Qt6QGtk3ThemePluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QGtk3ThemePluginConfig.cmake /usr/lib64/cmake/Qt6Gui/Qt6QGtk3ThemePluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QGtk3ThemePluginTargets.cmake /usr/lib64/cmake/Qt6Gui/Qt6QICNSPluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QICNSPluginConfig.cmake /usr/lib64/cmake/Qt6Gui/Qt6QICNSPluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QICNSPluginTargets.cmake /usr/lib64/cmake/Qt6Gui/Qt6QICOPluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QICOPluginConfig.cmake /usr/lib64/cmake/Qt6Gui/Qt6QICOPluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QICOPluginTargets.cmake /usr/lib64/cmake/Qt6Gui/Qt6QIbusPlatformInputContextPluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QIbusPlatformInputContextPluginConfig.cmake /usr/lib64/cmake/Qt6Gui/Qt6QIbusPlatformInputContextPluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QIbusPlatformInputContextPluginTargets.cmake /usr/lib64/cmake/Qt6Gui/Qt6QJp2PluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QJp2PluginConfig.cmake /usr/lib64/cmake/Qt6Gui/Qt6QJp2PluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QJp2PluginTargets.cmake /usr/lib64/cmake/Qt6Gui/Qt6QJpegPluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QJpegPluginConfig.cmake /usr/lib64/cmake/Qt6Gui/Qt6QJpegPluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QJpegPluginTargets.cmake /usr/lib64/cmake/Qt6Gui/Qt6QLibInputPluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QLibInputPluginConfig.cmake /usr/lib64/cmake/Qt6Gui/Qt6QLibInputPluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QLibInputPluginTargets.cmake /usr/lib64/cmake/Qt6Gui/Qt6QLinuxFbIntegrationPluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QLinuxFbIntegrationPluginConfig.cmake /usr/lib64/cmake/Qt6Gui/Qt6QLinuxFbIntegrationPluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QLinuxFbIntegrationPluginTargets.cmake /usr/lib64/cmake/Qt6Gui/Qt6QMinimalEglIntegrationPluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QMinimalEglIntegrationPluginConfig.cmake /usr/lib64/cmake/Qt6Gui/Qt6QMinimalEglIntegrationPluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QMinimalEglIntegrationPluginTargets.cmake /usr/lib64/cmake/Qt6Gui/Qt6QMinimalIntegrationPluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QMinimalIntegrationPluginConfig.cmake /usr/lib64/cmake/Qt6Gui/Qt6QMinimalIntegrationPluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QMinimalIntegrationPluginTargets.cmake /usr/lib64/cmake/Qt6Gui/Qt6QMngPluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QMngPluginConfig.cmake /usr/lib64/cmake/Qt6Gui/Qt6QMngPluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QMngPluginTargets.cmake /usr/lib64/cmake/Qt6Gui/Qt6QOffscreenIntegrationPluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QOffscreenIntegrationPluginConfig.cmake /usr/lib64/cmake/Qt6Gui/Qt6QOffscreenIntegrationPluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QOffscreenIntegrationPluginTargets.cmake /usr/lib64/cmake/Qt6Gui/Qt6QPdfPluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QPdfPluginConfig.cmake /usr/lib64/cmake/Qt6Gui/Qt6QPdfPluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QPdfPluginTargets.cmake /usr/lib64/cmake/Qt6Gui/Qt6QSvgIconPluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QSvgIconPluginConfig.cmake /usr/lib64/cmake/Qt6Gui/Qt6QSvgIconPluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QSvgIconPluginTargets.cmake /usr/lib64/cmake/Qt6Gui/Qt6QSvgPluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QSvgPluginConfig.cmake /usr/lib64/cmake/Qt6Gui/Qt6QSvgPluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QSvgPluginTargets.cmake /usr/lib64/cmake/Qt6Gui/Qt6QTgaPluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QTgaPluginConfig.cmake /usr/lib64/cmake/Qt6Gui/Qt6QTgaPluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QTgaPluginTargets.cmake /usr/lib64/cmake/Qt6Gui/Qt6QTiffPluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QTiffPluginConfig.cmake /usr/lib64/cmake/Qt6Gui/Qt6QTiffPluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QTiffPluginTargets.cmake /usr/lib64/cmake/Qt6Gui/Qt6QTsLibPluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QTsLibPluginConfig.cmake /usr/lib64/cmake/Qt6Gui/Qt6QTsLibPluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QTsLibPluginTargets.cmake /usr/lib64/cmake/Qt6Gui/Qt6QTuioTouchPluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QTuioTouchPluginConfig.cmake /usr/lib64/cmake/Qt6Gui/Qt6QTuioTouchPluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QTuioTouchPluginTargets.cmake /usr/lib64/cmake/Qt6Gui/Qt6QVkKhrDisplayIntegrationPluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QVkKhrDisplayIntegrationPluginConfig.cmake /usr/lib64/cmake/Qt6Gui/Qt6QVkKhrDisplayIntegrationPluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QVkKhrDisplayIntegrationPluginTargets.cmake /usr/lib64/cmake/Qt6Gui/Qt6QVncIntegrationPluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QVncIntegrationPluginConfig.cmake /usr/lib64/cmake/Qt6Gui/Qt6QVncIntegrationPluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QVncIntegrationPluginTargets.cmake /usr/lib64/cmake/Qt6Gui/Qt6QWaylandBradientDecorationPluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QWaylandBradientDecorationPluginConfig.cmake /usr/lib64/cmake/Qt6Gui/Qt6QWaylandBradientDecorationPluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QWaylandBradientDecorationPluginTargets.cmake /usr/lib64/cmake/Qt6Gui/Qt6QWaylandEglClientBufferPluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QWaylandEglClientBufferPluginConfig.cmake /usr/lib64/cmake/Qt6Gui/Qt6QWaylandEglClientBufferPluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QWaylandEglClientBufferPluginTargets.cmake /usr/lib64/cmake/Qt6Gui/Qt6QWaylandFullScreenShellV1IntegrationPluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QWaylandFullScreenShellV1IntegrationPluginConfig.cmake /usr/lib64/cmake/Qt6Gui/Qt6QWaylandFullScreenShellV1IntegrationPluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QWaylandFullScreenShellV1IntegrationPluginTargets.cmake /usr/lib64/cmake/Qt6Gui/Qt6QWaylandIntegrationPluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QWaylandIntegrationPluginConfig.cmake /usr/lib64/cmake/Qt6Gui/Qt6QWaylandIntegrationPluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QWaylandIntegrationPluginTargets.cmake /usr/lib64/cmake/Qt6Gui/Qt6QWaylandIviShellIntegrationPluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QWaylandIviShellIntegrationPluginConfig.cmake /usr/lib64/cmake/Qt6Gui/Qt6QWaylandIviShellIntegrationPluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QWaylandIviShellIntegrationPluginTargets.cmake /usr/lib64/cmake/Qt6Gui/Qt6QWaylandQtShellIntegrationPluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QWaylandQtShellIntegrationPluginConfig.cmake /usr/lib64/cmake/Qt6Gui/Qt6QWaylandQtShellIntegrationPluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QWaylandQtShellIntegrationPluginTargets.cmake /usr/lib64/cmake/Qt6Gui/Qt6QWaylandWlShellIntegrationPluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QWaylandWlShellIntegrationPluginConfig.cmake /usr/lib64/cmake/Qt6Gui/Qt6QWaylandWlShellIntegrationPluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QWaylandWlShellIntegrationPluginTargets.cmake /usr/lib64/cmake/Qt6Gui/Qt6QWaylandXdgShellIntegrationPluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QWaylandXdgShellIntegrationPluginConfig.cmake /usr/lib64/cmake/Qt6Gui/Qt6QWaylandXdgShellIntegrationPluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QWaylandXdgShellIntegrationPluginTargets.cmake /usr/lib64/cmake/Qt6Gui/Qt6QWbmpPluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QWbmpPluginConfig.cmake /usr/lib64/cmake/Qt6Gui/Qt6QWbmpPluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QWbmpPluginTargets.cmake /usr/lib64/cmake/Qt6Gui/Qt6QWebpPluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QWebpPluginConfig.cmake /usr/lib64/cmake/Qt6Gui/Qt6QWebpPluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QWebpPluginTargets.cmake /usr/lib64/cmake/Qt6Gui/Qt6QXcbEglIntegrationPluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QXcbEglIntegrationPluginConfig.cmake /usr/lib64/cmake/Qt6Gui/Qt6QXcbEglIntegrationPluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QXcbEglIntegrationPluginTargets.cmake /usr/lib64/cmake/Qt6Gui/Qt6QXcbGlxIntegrationPluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QXcbGlxIntegrationPluginConfig.cmake /usr/lib64/cmake/Qt6Gui/Qt6QXcbGlxIntegrationPluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QXcbGlxIntegrationPluginTargets.cmake /usr/lib64/cmake/Qt6Gui/Qt6QXcbIntegrationPluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QXcbIntegrationPluginConfig.cmake /usr/lib64/cmake/Qt6Gui/Qt6QXcbIntegrationPluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QXcbIntegrationPluginTargets.cmake /usr/lib64/cmake/Qt6Gui/Qt6QXdgDesktopPortalThemePluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QXdgDesktopPortalThemePluginConfig.cmake /usr/lib64/cmake/Qt6Gui/Qt6QXdgDesktopPortalThemePluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QXdgDesktopPortalThemePluginTargets.cmake /usr/lib64/cmake/Qt6Gui/Qt6ShmServerBufferPluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6ShmServerBufferPluginConfig.cmake /usr/lib64/cmake/Qt6Gui/Qt6ShmServerBufferPluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6ShmServerBufferPluginTargets.cmake /usr/lib64/cmake/Qt6Gui/Qt6VulkanServerBufferPluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6VulkanServerBufferPluginConfig.cmake /usr/lib64/cmake/Qt6Gui/Qt6VulkanServerBufferPluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6VulkanServerBufferPluginTargets.cmake /usr/lib64/cmake/Qt6GuiTools/Qt6GuiToolsAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6GuiTools/Qt6GuiToolsConfig.cmake /usr/lib64/cmake/Qt6GuiTools/Qt6GuiToolsConfigVersion.cmake /usr/lib64/cmake/Qt6GuiTools/Qt6GuiToolsConfigVersionImpl.cmake /usr/lib64/cmake/Qt6GuiTools/Qt6GuiToolsDependencies.cmake /usr/lib64/cmake/Qt6GuiTools/Qt6GuiToolsTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6GuiTools/Qt6GuiToolsTargets.cmake /usr/lib64/cmake/Qt6GuiTools/Qt6GuiToolsVersionlessTargets.cmake /usr/lib64/cmake/Qt6Multimedia/Qt6MultimediaAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Multimedia/Qt6MultimediaConfig.cmake /usr/lib64/cmake/Qt6Multimedia/Qt6MultimediaConfigVersion.cmake /usr/lib64/cmake/Qt6Multimedia/Qt6MultimediaConfigVersionImpl.cmake /usr/lib64/cmake/Qt6Multimedia/Qt6MultimediaDependencies.cmake /usr/lib64/cmake/Qt6Multimedia/Qt6MultimediaMacros.cmake /usr/lib64/cmake/Qt6Multimedia/Qt6MultimediaPlugins.cmake /usr/lib64/cmake/Qt6Multimedia/Qt6MultimediaTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Multimedia/Qt6MultimediaTargets.cmake /usr/lib64/cmake/Qt6Multimedia/Qt6MultimediaVersionlessAliasTargets.cmake /usr/lib64/cmake/Qt6Multimedia/Qt6QFFmpegMediaPluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Multimedia/Qt6QFFmpegMediaPluginConfig.cmake /usr/lib64/cmake/Qt6Multimedia/Qt6QFFmpegMediaPluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Multimedia/Qt6QFFmpegMediaPluginTargets.cmake /usr/lib64/cmake/Qt6Multimedia/Qt6QGstreamerMediaPluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Multimedia/Qt6QGstreamerMediaPluginConfig.cmake /usr/lib64/cmake/Qt6Multimedia/Qt6QGstreamerMediaPluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Multimedia/Qt6QGstreamerMediaPluginTargets.cmake /usr/lib64/cmake/Qt6MultimediaWidgets/Qt6MultimediaWidgetsAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6MultimediaWidgets/Qt6MultimediaWidgetsConfig.cmake /usr/lib64/cmake/Qt6MultimediaWidgets/Qt6MultimediaWidgetsConfigVersion.cmake /usr/lib64/cmake/Qt6MultimediaWidgets/Qt6MultimediaWidgetsConfigVersionImpl.cmake /usr/lib64/cmake/Qt6MultimediaWidgets/Qt6MultimediaWidgetsDependencies.cmake /usr/lib64/cmake/Qt6MultimediaWidgets/Qt6MultimediaWidgetsTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6MultimediaWidgets/Qt6MultimediaWidgetsTargets.cmake /usr/lib64/cmake/Qt6MultimediaWidgets/Qt6MultimediaWidgetsVersionlessAliasTargets.cmake /usr/lib64/cmake/Qt6Network/Qt6NetworkAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Network/Qt6NetworkConfig.cmake /usr/lib64/cmake/Qt6Network/Qt6NetworkConfigVersion.cmake /usr/lib64/cmake/Qt6Network/Qt6NetworkConfigVersionImpl.cmake /usr/lib64/cmake/Qt6Network/Qt6NetworkDependencies.cmake /usr/lib64/cmake/Qt6Network/Qt6NetworkPlugins.cmake /usr/lib64/cmake/Qt6Network/Qt6NetworkTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Network/Qt6NetworkTargets.cmake /usr/lib64/cmake/Qt6Network/Qt6NetworkVersionlessAliasTargets.cmake /usr/lib64/cmake/Qt6Network/Qt6QGlibNetworkInformationPluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Network/Qt6QGlibNetworkInformationPluginConfig.cmake /usr/lib64/cmake/Qt6Network/Qt6QGlibNetworkInformationPluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Network/Qt6QGlibNetworkInformationPluginTargets.cmake /usr/lib64/cmake/Qt6Network/Qt6QNetworkManagerNetworkInformationPluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Network/Qt6QNetworkManagerNetworkInformationPluginConfig.cmake /usr/lib64/cmake/Qt6Network/Qt6QNetworkManagerNetworkInformationPluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Network/Qt6QNetworkManagerNetworkInformationPluginTargets.cmake /usr/lib64/cmake/Qt6Network/Qt6QTlsBackendCertOnlyPluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Network/Qt6QTlsBackendCertOnlyPluginConfig.cmake /usr/lib64/cmake/Qt6Network/Qt6QTlsBackendCertOnlyPluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Network/Qt6QTlsBackendCertOnlyPluginTargets.cmake /usr/lib64/cmake/Qt6Network/Qt6QTlsBackendOpenSSLPluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Network/Qt6QTlsBackendOpenSSLPluginConfig.cmake /usr/lib64/cmake/Qt6Network/Qt6QTlsBackendOpenSSLPluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Network/Qt6QTlsBackendOpenSSLPluginTargets.cmake /usr/lib64/cmake/Qt6OpenGL/Qt6OpenGLAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6OpenGL/Qt6OpenGLConfig.cmake /usr/lib64/cmake/Qt6OpenGL/Qt6OpenGLConfigVersion.cmake /usr/lib64/cmake/Qt6OpenGL/Qt6OpenGLConfigVersionImpl.cmake /usr/lib64/cmake/Qt6OpenGL/Qt6OpenGLDependencies.cmake /usr/lib64/cmake/Qt6OpenGL/Qt6OpenGLTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6OpenGL/Qt6OpenGLTargets.cmake /usr/lib64/cmake/Qt6OpenGL/Qt6OpenGLVersionlessAliasTargets.cmake /usr/lib64/cmake/Qt6OpenGLWidgets/Qt6OpenGLWidgetsAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6OpenGLWidgets/Qt6OpenGLWidgetsConfig.cmake /usr/lib64/cmake/Qt6OpenGLWidgets/Qt6OpenGLWidgetsConfigVersion.cmake /usr/lib64/cmake/Qt6OpenGLWidgets/Qt6OpenGLWidgetsConfigVersionImpl.cmake /usr/lib64/cmake/Qt6OpenGLWidgets/Qt6OpenGLWidgetsDependencies.cmake /usr/lib64/cmake/Qt6OpenGLWidgets/Qt6OpenGLWidgetsTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6OpenGLWidgets/Qt6OpenGLWidgetsTargets.cmake /usr/lib64/cmake/Qt6OpenGLWidgets/Qt6OpenGLWidgetsVersionlessAliasTargets.cmake /usr/lib64/cmake/Qt6Pdf/Qt6PdfAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Pdf/Qt6PdfConfig.cmake /usr/lib64/cmake/Qt6Pdf/Qt6PdfConfigVersion.cmake /usr/lib64/cmake/Qt6Pdf/Qt6PdfConfigVersionImpl.cmake /usr/lib64/cmake/Qt6Pdf/Qt6PdfDependencies.cmake /usr/lib64/cmake/Qt6Pdf/Qt6PdfTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Pdf/Qt6PdfTargets.cmake /usr/lib64/cmake/Qt6Pdf/Qt6PdfVersionlessAliasTargets.cmake /usr/lib64/cmake/Qt6PdfWidgets/Qt6PdfWidgetsAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6PdfWidgets/Qt6PdfWidgetsConfig.cmake /usr/lib64/cmake/Qt6PdfWidgets/Qt6PdfWidgetsConfigVersion.cmake /usr/lib64/cmake/Qt6PdfWidgets/Qt6PdfWidgetsConfigVersionImpl.cmake /usr/lib64/cmake/Qt6PdfWidgets/Qt6PdfWidgetsDependencies.cmake /usr/lib64/cmake/Qt6PdfWidgets/Qt6PdfWidgetsTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6PdfWidgets/Qt6PdfWidgetsTargets.cmake /usr/lib64/cmake/Qt6PdfWidgets/Qt6PdfWidgetsVersionlessAliasTargets.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6LabsPlatformpluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6LabsPlatformpluginConfig.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6LabsPlatformpluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6LabsPlatformpluginTargets.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6LabsSynchronizerpluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6LabsSynchronizerpluginConfig.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6LabsSynchronizerpluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6LabsSynchronizerpluginTargets.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6PdfQuickpluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6PdfQuickpluginConfig.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6PdfQuickpluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6PdfQuickpluginTargets.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6QmlNetworkpluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6QmlNetworkpluginConfig.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6QmlNetworkpluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6QmlNetworkpluginTargets.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6QuickControlsTestUtilsPrivatepluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6QuickControlsTestUtilsPrivatepluginConfig.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6QuickControlsTestUtilsPrivatepluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6QuickControlsTestUtilsPrivatepluginTargets.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6QuickTestpluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6QuickTestpluginConfig.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6QuickTestpluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6QuickTestpluginTargets.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6WaylandCompositorIviapplicationpluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6WaylandCompositorIviapplicationpluginConfig.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6WaylandCompositorIviapplicationpluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6WaylandCompositorIviapplicationpluginTargets.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6WaylandCompositorPresentationTimepluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6WaylandCompositorPresentationTimepluginConfig.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6WaylandCompositorPresentationTimepluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6WaylandCompositorPresentationTimepluginTargets.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6WaylandCompositorQtShellAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6WaylandCompositorQtShellConfig.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6WaylandCompositorQtShellTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6WaylandCompositorQtShellTargets.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6WaylandCompositorWLShellpluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6WaylandCompositorWLShellpluginConfig.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6WaylandCompositorWLShellpluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6WaylandCompositorWLShellpluginTargets.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6WaylandCompositorXdgShellpluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6WaylandCompositorXdgShellpluginConfig.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6WaylandCompositorXdgShellpluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6WaylandCompositorXdgShellpluginTargets.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6WaylandTextureSharingAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6WaylandTextureSharingConfig.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6WaylandTextureSharingExtensionAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6WaylandTextureSharingExtensionConfig.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6WaylandTextureSharingExtensionTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6WaylandTextureSharingExtensionTargets.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6WaylandTextureSharingTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6WaylandTextureSharingTargets.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6effectspluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6effectspluginConfig.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6effectspluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6effectspluginTargets.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6labsanimationpluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6labsanimationpluginConfig.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6labsanimationpluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6labsanimationpluginTargets.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6labsmodelspluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6labsmodelspluginConfig.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6labsmodelspluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6labsmodelspluginTargets.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6modelspluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6modelspluginConfig.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6modelspluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6modelspluginTargets.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6particlespluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6particlespluginConfig.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6particlespluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6particlespluginTargets.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qmlfolderlistmodelpluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qmlfolderlistmodelpluginConfig.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qmlfolderlistmodelpluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qmlfolderlistmodelpluginTargets.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qmllocalstoragepluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qmllocalstoragepluginConfig.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qmllocalstoragepluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qmllocalstoragepluginTargets.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qmlpluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qmlpluginConfig.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qmlpluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qmlpluginTargets.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qmlsettingspluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qmlsettingspluginConfig.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qmlsettingspluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qmlsettingspluginTargets.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qmlshapespluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qmlshapespluginConfig.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qmlshapespluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qmlshapespluginTargets.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qmlwavefrontmeshpluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qmlwavefrontmeshpluginConfig.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qmlwavefrontmeshpluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qmlwavefrontmeshpluginTargets.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qmlxmllistmodelpluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qmlxmllistmodelpluginConfig.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qmlxmllistmodelpluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qmlxmllistmodelpluginTargets.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qquicklayoutspluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qquicklayoutspluginConfig.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qquicklayoutspluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qquicklayoutspluginTargets.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qquickvectorimagehelperspluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qquickvectorimagehelperspluginConfig.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qquickvectorimagehelperspluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qquickvectorimagehelperspluginTargets.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qquickvectorimagepluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qquickvectorimagepluginConfig.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qquickvectorimagepluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qquickvectorimagepluginTargets.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtqmlcorepluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtqmlcorepluginConfig.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtqmlcorepluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtqmlcorepluginTargets.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquick2pluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquick2pluginConfig.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquick2pluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquick2pluginTargets.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2basicstyleimplpluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2basicstyleimplpluginConfig.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2basicstyleimplpluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2basicstyleimplpluginTargets.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2basicstylepluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2basicstylepluginConfig.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2basicstylepluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2basicstylepluginTargets.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2fluentwinui3styleimplpluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2fluentwinui3styleimplpluginConfig.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2fluentwinui3styleimplpluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2fluentwinui3styleimplpluginTargets.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2fluentwinui3stylepluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2fluentwinui3stylepluginConfig.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2fluentwinui3stylepluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2fluentwinui3stylepluginTargets.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2fusionstyleimplpluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2fusionstyleimplpluginConfig.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2fusionstyleimplpluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2fusionstyleimplpluginTargets.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2fusionstylepluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2fusionstylepluginConfig.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2fusionstylepluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2fusionstylepluginTargets.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2imaginestyleimplpluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2imaginestyleimplpluginConfig.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2imaginestyleimplpluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2imaginestyleimplpluginTargets.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2imaginestylepluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2imaginestylepluginConfig.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2imaginestylepluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2imaginestylepluginTargets.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2implpluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2implpluginConfig.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2implpluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2implpluginTargets.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2materialstyleimplpluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2materialstyleimplpluginConfig.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2materialstyleimplpluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2materialstyleimplpluginTargets.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2materialstylepluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2materialstylepluginConfig.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2materialstylepluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2materialstylepluginTargets.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2pluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2pluginConfig.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2pluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2pluginTargets.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2universalstyleimplpluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2universalstyleimplpluginConfig.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2universalstyleimplpluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2universalstyleimplpluginTargets.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2universalstylepluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2universalstylepluginConfig.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2universalstylepluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2universalstylepluginTargets.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickdialogs2quickimplpluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickdialogs2quickimplpluginConfig.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickdialogs2quickimplpluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickdialogs2quickimplpluginTargets.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickdialogspluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickdialogspluginConfig.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickdialogspluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickdialogspluginTargets.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickshapesdesignhelperspluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickshapesdesignhelperspluginConfig.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickshapesdesignhelperspluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickshapesdesignhelperspluginTargets.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquicktemplates2pluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquicktemplates2pluginConfig.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquicktemplates2pluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquicktemplates2pluginTargets.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6quick3dspatialaudioAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6quick3dspatialaudioConfig.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6quick3dspatialaudioTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6quick3dspatialaudioTargets.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6quickmultimediaAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6quickmultimediaConfig.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6quickmultimediaTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6quickmultimediaTargets.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6quicktoolingAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6quicktoolingConfig.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6quicktoolingTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6quicktoolingTargets.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6quickwindowAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6quickwindowConfig.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6quickwindowTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6quickwindowTargets.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qwaylandcompositorpluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qwaylandcompositorpluginConfig.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qwaylandcompositorpluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qwaylandcompositorpluginTargets.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6sharedimagepluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6sharedimagepluginConfig.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6sharedimagepluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6sharedimagepluginTargets.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6workerscriptpluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6workerscriptpluginConfig.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6workerscriptpluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6workerscriptpluginTargets.cmake /usr/lib64/cmake/Qt6Qml/Qt6QDebugMessageServiceFactoryPluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Qml/Qt6QDebugMessageServiceFactoryPluginConfig.cmake /usr/lib64/cmake/Qt6Qml/Qt6QDebugMessageServiceFactoryPluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Qml/Qt6QDebugMessageServiceFactoryPluginTargets.cmake /usr/lib64/cmake/Qt6Qml/Qt6QLocalClientConnectionFactoryPluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Qml/Qt6QLocalClientConnectionFactoryPluginConfig.cmake /usr/lib64/cmake/Qt6Qml/Qt6QLocalClientConnectionFactoryPluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Qml/Qt6QLocalClientConnectionFactoryPluginTargets.cmake /usr/lib64/cmake/Qt6Qml/Qt6QQmlDebugServerFactoryPluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Qml/Qt6QQmlDebugServerFactoryPluginConfig.cmake /usr/lib64/cmake/Qt6Qml/Qt6QQmlDebugServerFactoryPluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Qml/Qt6QQmlDebugServerFactoryPluginTargets.cmake /usr/lib64/cmake/Qt6Qml/Qt6QQmlDebuggerServiceFactoryPluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Qml/Qt6QQmlDebuggerServiceFactoryPluginConfig.cmake /usr/lib64/cmake/Qt6Qml/Qt6QQmlDebuggerServiceFactoryPluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Qml/Qt6QQmlDebuggerServiceFactoryPluginTargets.cmake /usr/lib64/cmake/Qt6Qml/Qt6QQmlInspectorServiceFactoryPluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Qml/Qt6QQmlInspectorServiceFactoryPluginConfig.cmake /usr/lib64/cmake/Qt6Qml/Qt6QQmlInspectorServiceFactoryPluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Qml/Qt6QQmlInspectorServiceFactoryPluginTargets.cmake /usr/lib64/cmake/Qt6Qml/Qt6QQmlNativeDebugConnectorFactoryPluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Qml/Qt6QQmlNativeDebugConnectorFactoryPluginConfig.cmake /usr/lib64/cmake/Qt6Qml/Qt6QQmlNativeDebugConnectorFactoryPluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Qml/Qt6QQmlNativeDebugConnectorFactoryPluginTargets.cmake /usr/lib64/cmake/Qt6Qml/Qt6QQmlNativeDebugServiceFactoryPluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Qml/Qt6QQmlNativeDebugServiceFactoryPluginConfig.cmake /usr/lib64/cmake/Qt6Qml/Qt6QQmlNativeDebugServiceFactoryPluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Qml/Qt6QQmlNativeDebugServiceFactoryPluginTargets.cmake /usr/lib64/cmake/Qt6Qml/Qt6QQmlPreviewServiceFactoryPluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Qml/Qt6QQmlPreviewServiceFactoryPluginConfig.cmake /usr/lib64/cmake/Qt6Qml/Qt6QQmlPreviewServiceFactoryPluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Qml/Qt6QQmlPreviewServiceFactoryPluginTargets.cmake /usr/lib64/cmake/Qt6Qml/Qt6QQmlProfilerServiceFactoryPluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Qml/Qt6QQmlProfilerServiceFactoryPluginConfig.cmake /usr/lib64/cmake/Qt6Qml/Qt6QQmlProfilerServiceFactoryPluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Qml/Qt6QQmlProfilerServiceFactoryPluginTargets.cmake /usr/lib64/cmake/Qt6Qml/Qt6QQuickProfilerAdapterFactoryPluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Qml/Qt6QQuickProfilerAdapterFactoryPluginConfig.cmake /usr/lib64/cmake/Qt6Qml/Qt6QQuickProfilerAdapterFactoryPluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Qml/Qt6QQuickProfilerAdapterFactoryPluginTargets.cmake /usr/lib64/cmake/Qt6Qml/Qt6QTcpServerConnectionFactoryPluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Qml/Qt6QTcpServerConnectionFactoryPluginConfig.cmake /usr/lib64/cmake/Qt6Qml/Qt6QTcpServerConnectionFactoryPluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Qml/Qt6QTcpServerConnectionFactoryPluginTargets.cmake /usr/lib64/cmake/Qt6Qml/Qt6QmlAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Qml/Qt6QmlConfig.cmake /usr/lib64/cmake/Qt6Qml/Qt6QmlConfigExtras.cmake /usr/lib64/cmake/Qt6Qml/Qt6QmlConfigVersion.cmake /usr/lib64/cmake/Qt6Qml/Qt6QmlConfigVersionImpl.cmake /usr/lib64/cmake/Qt6Qml/Qt6QmlDependencies.cmake /usr/lib64/cmake/Qt6Qml/Qt6QmlFindQmlscInternal.cmake /usr/lib64/cmake/Qt6Qml/Qt6QmlMacros.cmake /usr/lib64/cmake/Qt6Qml/Qt6QmlPlugins.cmake /usr/lib64/cmake/Qt6Qml/Qt6QmlProperties.cmake /usr/lib64/cmake/Qt6Qml/Qt6QmlPublicCMakeHelpers.cmake /usr/lib64/cmake/Qt6Qml/Qt6QmlTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Qml/Qt6QmlTargets.cmake /usr/lib64/cmake/Qt6Qml/Qt6QmlVersionlessAliasTargets.cmake /usr/lib64/cmake/Qt6QmlIntegration/Qt6QmlIntegrationAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6QmlIntegration/Qt6QmlIntegrationConfig.cmake /usr/lib64/cmake/Qt6QmlIntegration/Qt6QmlIntegrationConfigVersion.cmake /usr/lib64/cmake/Qt6QmlIntegration/Qt6QmlIntegrationConfigVersionImpl.cmake /usr/lib64/cmake/Qt6QmlIntegration/Qt6QmlIntegrationTargets.cmake /usr/lib64/cmake/Qt6QmlIntegration/Qt6QmlIntegrationVersionlessAliasTargets.cmake /usr/lib64/cmake/Qt6QmlMeta/Qt6QmlMetaAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6QmlMeta/Qt6QmlMetaConfig.cmake /usr/lib64/cmake/Qt6QmlMeta/Qt6QmlMetaConfigVersion.cmake /usr/lib64/cmake/Qt6QmlMeta/Qt6QmlMetaConfigVersionImpl.cmake /usr/lib64/cmake/Qt6QmlMeta/Qt6QmlMetaDependencies.cmake /usr/lib64/cmake/Qt6QmlMeta/Qt6QmlMetaTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6QmlMeta/Qt6QmlMetaTargets.cmake /usr/lib64/cmake/Qt6QmlMeta/Qt6QmlMetaVersionlessAliasTargets.cmake /usr/lib64/cmake/Qt6QmlModels/Qt6QmlModelsAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6QmlModels/Qt6QmlModelsConfig.cmake /usr/lib64/cmake/Qt6QmlModels/Qt6QmlModelsConfigVersion.cmake /usr/lib64/cmake/Qt6QmlModels/Qt6QmlModelsConfigVersionImpl.cmake /usr/lib64/cmake/Qt6QmlModels/Qt6QmlModelsDependencies.cmake /usr/lib64/cmake/Qt6QmlModels/Qt6QmlModelsTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6QmlModels/Qt6QmlModelsTargets.cmake /usr/lib64/cmake/Qt6QmlModels/Qt6QmlModelsVersionlessAliasTargets.cmake /usr/lib64/cmake/Qt6QmlTools/Qt6QmlToolsAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6QmlTools/Qt6QmlToolsConfig.cmake /usr/lib64/cmake/Qt6QmlTools/Qt6QmlToolsConfigVersion.cmake /usr/lib64/cmake/Qt6QmlTools/Qt6QmlToolsConfigVersionImpl.cmake /usr/lib64/cmake/Qt6QmlTools/Qt6QmlToolsDependencies.cmake /usr/lib64/cmake/Qt6QmlTools/Qt6QmlToolsTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6QmlTools/Qt6QmlToolsTargets.cmake /usr/lib64/cmake/Qt6QmlTools/Qt6QmlToolsVersionlessTargets.cmake /usr/lib64/cmake/Qt6QmlWorkerScript/Qt6QmlWorkerScriptAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6QmlWorkerScript/Qt6QmlWorkerScriptConfig.cmake /usr/lib64/cmake/Qt6QmlWorkerScript/Qt6QmlWorkerScriptConfigVersion.cmake /usr/lib64/cmake/Qt6QmlWorkerScript/Qt6QmlWorkerScriptConfigVersionImpl.cmake /usr/lib64/cmake/Qt6QmlWorkerScript/Qt6QmlWorkerScriptDependencies.cmake /usr/lib64/cmake/Qt6QmlWorkerScript/Qt6QmlWorkerScriptTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6QmlWorkerScript/Qt6QmlWorkerScriptTargets.cmake /usr/lib64/cmake/Qt6QmlWorkerScript/Qt6QmlWorkerScriptVersionlessAliasTargets.cmake /usr/lib64/cmake/Qt6Quick/Qt6QuickAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Quick/Qt6QuickConfig.cmake /usr/lib64/cmake/Qt6Quick/Qt6QuickConfigVersion.cmake /usr/lib64/cmake/Qt6Quick/Qt6QuickConfigVersionImpl.cmake /usr/lib64/cmake/Qt6Quick/Qt6QuickDependencies.cmake /usr/lib64/cmake/Qt6Quick/Qt6QuickPlugins.cmake /usr/lib64/cmake/Qt6Quick/Qt6QuickTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Quick/Qt6QuickTargets.cmake /usr/lib64/cmake/Qt6Quick/Qt6QuickVersionlessAliasTargets.cmake /usr/lib64/cmake/Qt6QuickTools/Qt6QuickToolsAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6QuickTools/Qt6QuickToolsConfig.cmake /usr/lib64/cmake/Qt6QuickTools/Qt6QuickToolsConfigVersion.cmake /usr/lib64/cmake/Qt6QuickTools/Qt6QuickToolsConfigVersionImpl.cmake /usr/lib64/cmake/Qt6QuickTools/Qt6QuickToolsDependencies.cmake /usr/lib64/cmake/Qt6QuickTools/Qt6QuickToolsTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6QuickTools/Qt6QuickToolsTargets.cmake /usr/lib64/cmake/Qt6QuickTools/Qt6QuickToolsVersionlessTargets.cmake /usr/lib64/cmake/Qt6Sql/Qt6QIBaseDriverPluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Sql/Qt6QIBaseDriverPluginConfig.cmake /usr/lib64/cmake/Qt6Sql/Qt6QIBaseDriverPluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Sql/Qt6QIBaseDriverPluginTargets.cmake /usr/lib64/cmake/Qt6Sql/Qt6QMYSQLDriverPluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Sql/Qt6QMYSQLDriverPluginConfig.cmake /usr/lib64/cmake/Qt6Sql/Qt6QMYSQLDriverPluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Sql/Qt6QMYSQLDriverPluginTargets.cmake /usr/lib64/cmake/Qt6Sql/Qt6QODBCDriverPluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Sql/Qt6QODBCDriverPluginConfig.cmake /usr/lib64/cmake/Qt6Sql/Qt6QODBCDriverPluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Sql/Qt6QODBCDriverPluginTargets.cmake /usr/lib64/cmake/Qt6Sql/Qt6QPSQLDriverPluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Sql/Qt6QPSQLDriverPluginConfig.cmake /usr/lib64/cmake/Qt6Sql/Qt6QPSQLDriverPluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Sql/Qt6QPSQLDriverPluginTargets.cmake /usr/lib64/cmake/Qt6Sql/Qt6QSQLiteDriverPluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Sql/Qt6QSQLiteDriverPluginConfig.cmake /usr/lib64/cmake/Qt6Sql/Qt6QSQLiteDriverPluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Sql/Qt6QSQLiteDriverPluginTargets.cmake /usr/lib64/cmake/Qt6Sql/Qt6SqlAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Sql/Qt6SqlConfig.cmake /usr/lib64/cmake/Qt6Sql/Qt6SqlConfigVersion.cmake /usr/lib64/cmake/Qt6Sql/Qt6SqlConfigVersionImpl.cmake /usr/lib64/cmake/Qt6Sql/Qt6SqlDependencies.cmake /usr/lib64/cmake/Qt6Sql/Qt6SqlPlugins.cmake /usr/lib64/cmake/Qt6Sql/Qt6SqlTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Sql/Qt6SqlTargets.cmake /usr/lib64/cmake/Qt6Sql/Qt6SqlVersionlessAliasTargets.cmake /usr/lib64/cmake/Qt6Svg/Qt6SvgAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Svg/Qt6SvgConfig.cmake /usr/lib64/cmake/Qt6Svg/Qt6SvgConfigVersion.cmake /usr/lib64/cmake/Qt6Svg/Qt6SvgConfigVersionImpl.cmake /usr/lib64/cmake/Qt6Svg/Qt6SvgDependencies.cmake /usr/lib64/cmake/Qt6Svg/Qt6SvgTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Svg/Qt6SvgTargets.cmake /usr/lib64/cmake/Qt6Svg/Qt6SvgVersionlessAliasTargets.cmake /usr/lib64/cmake/Qt6SvgWidgets/Qt6SvgWidgetsAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6SvgWidgets/Qt6SvgWidgetsConfig.cmake /usr/lib64/cmake/Qt6SvgWidgets/Qt6SvgWidgetsConfigVersion.cmake /usr/lib64/cmake/Qt6SvgWidgets/Qt6SvgWidgetsConfigVersionImpl.cmake /usr/lib64/cmake/Qt6SvgWidgets/Qt6SvgWidgetsDependencies.cmake /usr/lib64/cmake/Qt6SvgWidgets/Qt6SvgWidgetsTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6SvgWidgets/Qt6SvgWidgetsTargets.cmake /usr/lib64/cmake/Qt6SvgWidgets/Qt6SvgWidgetsVersionlessAliasTargets.cmake /usr/lib64/cmake/Qt6Test/Qt6TestAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Test/Qt6TestConfig.cmake /usr/lib64/cmake/Qt6Test/Qt6TestConfigVersion.cmake /usr/lib64/cmake/Qt6Test/Qt6TestConfigVersionImpl.cmake /usr/lib64/cmake/Qt6Test/Qt6TestDependencies.cmake /usr/lib64/cmake/Qt6Test/Qt6TestTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Test/Qt6TestTargets.cmake /usr/lib64/cmake/Qt6Test/Qt6TestVersionlessAliasTargets.cmake /usr/lib64/cmake/Qt6Test/QtTestProperties.cmake /usr/lib64/cmake/Qt6Widgets/Qt6WidgetsAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Widgets/Qt6WidgetsConfig.cmake /usr/lib64/cmake/Qt6Widgets/Qt6WidgetsConfigVersion.cmake /usr/lib64/cmake/Qt6Widgets/Qt6WidgetsConfigVersionImpl.cmake /usr/lib64/cmake/Qt6Widgets/Qt6WidgetsDependencies.cmake /usr/lib64/cmake/Qt6Widgets/Qt6WidgetsMacros.cmake /usr/lib64/cmake/Qt6Widgets/Qt6WidgetsPlugins.cmake /usr/lib64/cmake/Qt6Widgets/Qt6WidgetsTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Widgets/Qt6WidgetsTargets.cmake /usr/lib64/cmake/Qt6Widgets/Qt6WidgetsVersionlessAliasTargets.cmake /usr/lib64/cmake/Qt6WidgetsTools/Qt6WidgetsToolsAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6WidgetsTools/Qt6WidgetsToolsConfig.cmake /usr/lib64/cmake/Qt6WidgetsTools/Qt6WidgetsToolsConfigVersion.cmake /usr/lib64/cmake/Qt6WidgetsTools/Qt6WidgetsToolsConfigVersionImpl.cmake /usr/lib64/cmake/Qt6WidgetsTools/Qt6WidgetsToolsDependencies.cmake /usr/lib64/cmake/Qt6WidgetsTools/Qt6WidgetsToolsTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6WidgetsTools/Qt6WidgetsToolsTargets.cmake /usr/lib64/cmake/Qt6WidgetsTools/Qt6WidgetsToolsVersionlessTargets.cmake /usr/share/cmake/Modules/CMakeCXXInformation.cmake /usr/share/cmake/Modules/CMakeCheckCompilerFlagCommonPatterns.cmake /usr/share/cmake/Modules/CMakeCommonLanguageInclude.cmake /usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake /usr/share/cmake/Modules/CMakeGenericSystem.cmake /usr/share/cmake/Modules/CMakeInitializeConfigs.cmake /usr/share/cmake/Modules/CMakeLanguageInformation.cmake /usr/share/cmake/Modules/CMakeSystemSpecificInformation.cmake /usr/share/cmake/Modules/CMakeSystemSpecificInitialize.cmake /usr/share/cmake/Modules/CPack.cmake /usr/share/cmake/Modules/CPackComponent.cmake /usr/share/cmake/Modules/CheckCXXCompilerFlag.cmake /usr/share/cmake/Modules/CheckCXXSourceCompiles.cmake /usr/share/cmake/Modules/CheckIncludeFileCXX.cmake /usr/share/cmake/Modules/CheckLibraryExists.cmake /usr/share/cmake/Modules/Compiler/CMakeCommonCompilerMacros.cmake /usr/share/cmake/Modules/Compiler/GNU-CXX.cmake /usr/share/cmake/Modules/Compiler/GNU.cmake /usr/share/cmake/Modules/FeatureSummary.cmake /usr/share/cmake/Modules/FindFreetype.cmake /usr/share/cmake/Modules/FindJPEG.cmake /usr/share/cmake/Modules/FindOpenGL.cmake /usr/share/cmake/Modules/FindPNG.cmake /usr/share/cmake/Modules/FindPackageHandleStandardArgs.cmake /usr/share/cmake/Modules/FindPackageMessage.cmake /usr/share/cmake/Modules/FindPkgConfig.cmake /usr/share/cmake/Modules/FindTIFF.cmake /usr/share/cmake/Modules/FindThreads.cmake /usr/share/cmake/Modules/FindVulkan.cmake /usr/share/cmake/Modules/FindZLIB.cmake /usr/share/cmake/Modules/GNUInstallDirs.cmake /usr/share/cmake/Modules/Internal/CMakeCXXLinkerInformation.cmake /usr/share/cmake/Modules/Internal/CMakeCommonLinkerInformation.cmake /usr/share/cmake/Modules/Internal/CheckCompilerFlag.cmake /usr/share/cmake/Modules/Internal/CheckFlagCommonConfig.cmake /usr/share/cmake/Modules/Internal/CheckSourceCompiles.cmake /usr/share/cmake/Modules/Linker/GNU-CXX.cmake /usr/share/cmake/Modules/Linker/GNU.cmake /usr/share/cmake/Modules/MacroAddFileDependencies.cmake /usr/share/cmake/Modules/Platform/Linker/GNU.cmake /usr/share/cmake/Modules/Platform/Linker/Linux-GNU-CXX.cmake /usr/share/cmake/Modules/Platform/Linker/Linux-GNU.cmake /usr/share/cmake/Modules/Platform/Linux-GNU-CXX.cmake /usr/share/cmake/Modules/Platform/Linux-GNU.cmake /usr/share/cmake/Modules/Platform/Linux-Initialize.cmake /usr/share/cmake/Modules/Platform/Linux.cmake /usr/share/cmake/Modules/Platform/UnixPaths.cmake /usr/share/cmake/Modules/SelectLibraryConfigurations.cmake /usr/share/cmake/Templates/CPackConfig.cmake.in CMakeCache.txt CMakeFiles/3.31.11/CMakeCXXCompiler.cmake CMakeFiles/3.31.11/CMakeSystem.cmake + pool = console + + +############################################# +# A missing CMake input file is not an error. + +build /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/CMakeLists.txt /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/CMakeLists.txt /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/OpenColorIO/OpenColorIOConfig.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/OpenColorIO/OpenColorIOConfigVersion.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/OpenColorIO/OpenColorIOTargets-release.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/OpenColorIO/OpenColorIOTargets.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/ftk/ftk-resourceTargets-release.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/ftk/ftk-resourceTargets.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/ftk/ftkConfig.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/ftk/ftkCoreTargets-release.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/ftk/ftkCoreTargets.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/ftk/ftkGLTargets-release.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/ftk/ftkGLTargets.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/ftk/ftkResourceTargets-release.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/ftk/ftkResourceTargets.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/ftk/ftkUITargets-release.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/ftk/ftkUITargets.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/ftk/ftkgladTargets-release.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/ftk/ftkgladTargets.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/libjpeg-turbo/libjpeg-turboConfig.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/libjpeg-turbo/libjpeg-turboConfigVersion.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/libjpeg-turbo/libjpeg-turboTargets-release.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/libjpeg-turbo/libjpeg-turboTargets.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/tlRender/tlCoreTargets-release.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/tlRender/tlCoreTargets.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/tlRender/tlDeviceTargets-release.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/tlRender/tlDeviceTargets.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/tlRender/tlGLTargets-release.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/tlRender/tlGLTargets.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/tlRender/tlIOTargets-release.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/tlRender/tlIOTargets.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/tlRender/tlQtQuickTargets-release.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/tlRender/tlQtQuickTargets.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/tlRender/tlQtTargets-release.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/tlRender/tlQtTargets.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/tlRender/tlQtWidgetTargets-release.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/tlRender/tlQtWidgetTargets.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/tlRender/tlRenderConfig.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/tlRender/tlResourceTargets-release.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/tlRender/tlResourceTargets.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/tlRender/tlTimelineTargets-release.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/tlRender/tlTimelineTargets.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/tlRender/tlUITargets-release.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/tlRender/tlUITargets.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/Imath/ImathConfig.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/Imath/ImathConfigVersion.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/Imath/ImathTargets-release.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/Imath/ImathTargets.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/OpenEXR/OpenEXRConfig.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/OpenEXR/OpenEXRConfigVersion.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/OpenEXR/OpenEXRTargets-release.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/OpenEXR/OpenEXRTargets.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/OpenImageIO/OpenImageIOConfig.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/OpenImageIO/OpenImageIOConfigVersion.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/OpenImageIO/OpenImageIOTargets-release.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/OpenImageIO/OpenImageIOTargets.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/SDL2/SDL2Config.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/SDL2/SDL2ConfigVersion.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/SDL2/SDL2mainTargets-release.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/SDL2/SDL2mainTargets.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/SDL2/SDL2staticTargets-release.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/SDL2/SDL2staticTargets.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/SDL2/SDL2testTargets-release.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/SDL2/SDL2testTargets.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/SDL2/sdlfind.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/expat-2.7.2/expat-config-version.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/expat-2.7.2/expat-config.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/expat-2.7.2/expat-release.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/expat-2.7.2/expat.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/lunasvg/lunasvgConfig.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/lunasvg/lunasvgConfigVersion.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/lunasvg/lunasvgTargets-release.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/lunasvg/lunasvgTargets.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/minizip-ng/minizip-ng-config-version.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/minizip-ng/minizip-ng-config.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/minizip-ng/minizip-ng-release.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/minizip-ng/minizip-ng.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/plutovg/plutovgConfig.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/plutovg/plutovgConfigVersion.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/plutovg/plutovgTargets-release.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/plutovg/plutovgTargets.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/yaml-cpp/yaml-cpp-config-version.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/yaml-cpp/yaml-cpp-config.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/yaml-cpp/yaml-cpp-targets-release.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/yaml-cpp/yaml-cpp-targets.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/share/OpenColorIO/cmake/modules/FindImath.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/share/OpenColorIO/cmake/modules/Findexpat.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/share/OpenColorIO/cmake/modules/Findpystring.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/share/OpenColorIO/cmake/modules/Findyaml-cpp.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/share/cmake/nlohmann_json/nlohmann_jsonConfig.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/share/cmake/nlohmann_json/nlohmann_jsonConfigVersion.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/share/cmake/nlohmann_json/nlohmann_jsonTargets.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/share/opentime/OpenTimeConfig.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/share/opentime/OpenTimeTargets-release.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/share/opentime/OpenTimeTargets.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/share/opentimelineio/OpenTimelineIOConfig.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/share/opentimelineio/OpenTimelineIOTargets-release.cmake /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/share/opentimelineio/OpenTimelineIOTargets.cmake /usr/lib64/cmake/Qt6/FindWrapAtomic.cmake /usr/lib64/cmake/Qt6/FindWrapOpenGL.cmake /usr/lib64/cmake/Qt6/FindWrapVulkanHeaders.cmake /usr/lib64/cmake/Qt6/Qt6Config.cmake /usr/lib64/cmake/Qt6/Qt6ConfigExtras.cmake /usr/lib64/cmake/Qt6/Qt6ConfigVersion.cmake /usr/lib64/cmake/Qt6/Qt6ConfigVersionImpl.cmake /usr/lib64/cmake/Qt6/Qt6Dependencies.cmake /usr/lib64/cmake/Qt6/Qt6Targets.cmake /usr/lib64/cmake/Qt6/Qt6VersionlessAliasTargets.cmake /usr/lib64/cmake/Qt6/QtFeature.cmake /usr/lib64/cmake/Qt6/QtFeatureCommon.cmake /usr/lib64/cmake/Qt6/QtInstallPaths.cmake /usr/lib64/cmake/Qt6/QtPublicAndroidHelpers.cmake /usr/lib64/cmake/Qt6/QtPublicAppleHelpers.cmake /usr/lib64/cmake/Qt6/QtPublicCMakeEarlyPolicyHelpers.cmake /usr/lib64/cmake/Qt6/QtPublicCMakeHelpers.cmake /usr/lib64/cmake/Qt6/QtPublicCMakeVersionHelpers.cmake /usr/lib64/cmake/Qt6/QtPublicDependencyHelpers.cmake /usr/lib64/cmake/Qt6/QtPublicExternalProjectHelpers.cmake /usr/lib64/cmake/Qt6/QtPublicFinalizerHelpers.cmake /usr/lib64/cmake/Qt6/QtPublicFindPackageHelpers.cmake /usr/lib64/cmake/Qt6/QtPublicGitHelpers.cmake /usr/lib64/cmake/Qt6/QtPublicPluginHelpers.cmake /usr/lib64/cmake/Qt6/QtPublicPluginHelpers_v2.cmake /usr/lib64/cmake/Qt6/QtPublicSbomAttributionHelpers.cmake /usr/lib64/cmake/Qt6/QtPublicSbomBuildToolHelpers.cmake /usr/lib64/cmake/Qt6/QtPublicSbomCommonGenerationHelpers.cmake /usr/lib64/cmake/Qt6/QtPublicSbomCpeHelpers.cmake /usr/lib64/cmake/Qt6/QtPublicSbomCycloneDXHelpers.cmake /usr/lib64/cmake/Qt6/QtPublicSbomDepHelpers.cmake /usr/lib64/cmake/Qt6/QtPublicSbomDocumentNamespaceHelpers.cmake /usr/lib64/cmake/Qt6/QtPublicSbomExternalReferenceHelpers.cmake /usr/lib64/cmake/Qt6/QtPublicSbomFileHelpers.cmake /usr/lib64/cmake/Qt6/QtPublicSbomGenerationCycloneDXHelpers.cmake /usr/lib64/cmake/Qt6/QtPublicSbomGenerationHelpers.cmake /usr/lib64/cmake/Qt6/QtPublicSbomHelpers.cmake /usr/lib64/cmake/Qt6/QtPublicSbomLicenseHelpers.cmake /usr/lib64/cmake/Qt6/QtPublicSbomOpsHelpers.cmake /usr/lib64/cmake/Qt6/QtPublicSbomPurlHelpers.cmake /usr/lib64/cmake/Qt6/QtPublicSbomPythonHelpers.cmake /usr/lib64/cmake/Qt6/QtPublicSbomQtEntityHelpers.cmake /usr/lib64/cmake/Qt6/QtPublicSbomRelationshipHelpers.cmake /usr/lib64/cmake/Qt6/QtPublicSbomSystemDepHelpers.cmake /usr/lib64/cmake/Qt6/QtPublicTargetHelpers.cmake /usr/lib64/cmake/Qt6/QtPublicTestHelpers.cmake /usr/lib64/cmake/Qt6/QtPublicToolHelpers.cmake /usr/lib64/cmake/Qt6/QtPublicWalkLibsHelpers.cmake /usr/lib64/cmake/Qt6/QtPublicWindowsHelpers.cmake /usr/lib64/cmake/Qt6Concurrent/Qt6ConcurrentAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Concurrent/Qt6ConcurrentConfig.cmake /usr/lib64/cmake/Qt6Concurrent/Qt6ConcurrentConfigVersion.cmake /usr/lib64/cmake/Qt6Concurrent/Qt6ConcurrentConfigVersionImpl.cmake /usr/lib64/cmake/Qt6Concurrent/Qt6ConcurrentDependencies.cmake /usr/lib64/cmake/Qt6Concurrent/Qt6ConcurrentTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Concurrent/Qt6ConcurrentTargets.cmake /usr/lib64/cmake/Qt6Concurrent/Qt6ConcurrentVersionlessAliasTargets.cmake /usr/lib64/cmake/Qt6Core/Qt6CoreAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Core/Qt6CoreConfig.cmake /usr/lib64/cmake/Qt6Core/Qt6CoreConfigExtras.cmake /usr/lib64/cmake/Qt6Core/Qt6CoreConfigVersion.cmake /usr/lib64/cmake/Qt6Core/Qt6CoreConfigVersionImpl.cmake /usr/lib64/cmake/Qt6Core/Qt6CoreDependencies.cmake /usr/lib64/cmake/Qt6Core/Qt6CoreMacros.cmake /usr/lib64/cmake/Qt6Core/Qt6CoreTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Core/Qt6CoreTargets.cmake /usr/lib64/cmake/Qt6Core/Qt6CoreVersionlessAliasTargets.cmake /usr/lib64/cmake/Qt6CoreTools/Qt6CoreToolsAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6CoreTools/Qt6CoreToolsConfig.cmake /usr/lib64/cmake/Qt6CoreTools/Qt6CoreToolsConfigVersion.cmake /usr/lib64/cmake/Qt6CoreTools/Qt6CoreToolsConfigVersionImpl.cmake /usr/lib64/cmake/Qt6CoreTools/Qt6CoreToolsDependencies.cmake /usr/lib64/cmake/Qt6CoreTools/Qt6CoreToolsTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6CoreTools/Qt6CoreToolsTargets.cmake /usr/lib64/cmake/Qt6CoreTools/Qt6CoreToolsVersionlessTargets.cmake /usr/lib64/cmake/Qt6DBus/Qt6DBusAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6DBus/Qt6DBusConfig.cmake /usr/lib64/cmake/Qt6DBus/Qt6DBusConfigVersion.cmake /usr/lib64/cmake/Qt6DBus/Qt6DBusConfigVersionImpl.cmake /usr/lib64/cmake/Qt6DBus/Qt6DBusDependencies.cmake /usr/lib64/cmake/Qt6DBus/Qt6DBusMacros.cmake /usr/lib64/cmake/Qt6DBus/Qt6DBusTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6DBus/Qt6DBusTargets.cmake /usr/lib64/cmake/Qt6DBus/Qt6DBusVersionlessAliasTargets.cmake /usr/lib64/cmake/Qt6DBusTools/Qt6DBusToolsAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6DBusTools/Qt6DBusToolsConfig.cmake /usr/lib64/cmake/Qt6DBusTools/Qt6DBusToolsConfigVersion.cmake /usr/lib64/cmake/Qt6DBusTools/Qt6DBusToolsConfigVersionImpl.cmake /usr/lib64/cmake/Qt6DBusTools/Qt6DBusToolsDependencies.cmake /usr/lib64/cmake/Qt6DBusTools/Qt6DBusToolsTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6DBusTools/Qt6DBusToolsTargets.cmake /usr/lib64/cmake/Qt6DBusTools/Qt6DBusToolsVersionlessTargets.cmake /usr/lib64/cmake/Qt6Gui/Qt6DmaBufServerBufferPluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6DmaBufServerBufferPluginConfig.cmake /usr/lib64/cmake/Qt6Gui/Qt6DmaBufServerBufferPluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6DmaBufServerBufferPluginTargets.cmake /usr/lib64/cmake/Qt6Gui/Qt6DrmEglServerBufferPluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6DrmEglServerBufferPluginConfig.cmake /usr/lib64/cmake/Qt6Gui/Qt6DrmEglServerBufferPluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6DrmEglServerBufferPluginTargets.cmake /usr/lib64/cmake/Qt6Gui/Qt6GuiAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6GuiConfig.cmake /usr/lib64/cmake/Qt6Gui/Qt6GuiConfigVersion.cmake /usr/lib64/cmake/Qt6Gui/Qt6GuiConfigVersionImpl.cmake /usr/lib64/cmake/Qt6Gui/Qt6GuiDependencies.cmake /usr/lib64/cmake/Qt6Gui/Qt6GuiPlugins.cmake /usr/lib64/cmake/Qt6Gui/Qt6GuiTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6GuiTargets.cmake /usr/lib64/cmake/Qt6Gui/Qt6GuiVersionlessAliasTargets.cmake /usr/lib64/cmake/Qt6Gui/Qt6QComposePlatformInputContextPluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QComposePlatformInputContextPluginConfig.cmake /usr/lib64/cmake/Qt6Gui/Qt6QComposePlatformInputContextPluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QComposePlatformInputContextPluginTargets.cmake /usr/lib64/cmake/Qt6Gui/Qt6QEglFSEmulatorIntegrationPluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QEglFSEmulatorIntegrationPluginConfig.cmake /usr/lib64/cmake/Qt6Gui/Qt6QEglFSEmulatorIntegrationPluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QEglFSEmulatorIntegrationPluginTargets.cmake /usr/lib64/cmake/Qt6Gui/Qt6QEglFSIntegrationPluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QEglFSIntegrationPluginConfig.cmake /usr/lib64/cmake/Qt6Gui/Qt6QEglFSIntegrationPluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QEglFSIntegrationPluginTargets.cmake /usr/lib64/cmake/Qt6Gui/Qt6QEglFSKmsEglDeviceIntegrationPluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QEglFSKmsEglDeviceIntegrationPluginConfig.cmake /usr/lib64/cmake/Qt6Gui/Qt6QEglFSKmsEglDeviceIntegrationPluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QEglFSKmsEglDeviceIntegrationPluginTargets.cmake /usr/lib64/cmake/Qt6Gui/Qt6QEglFSKmsGbmIntegrationPluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QEglFSKmsGbmIntegrationPluginConfig.cmake /usr/lib64/cmake/Qt6Gui/Qt6QEglFSKmsGbmIntegrationPluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QEglFSKmsGbmIntegrationPluginTargets.cmake /usr/lib64/cmake/Qt6Gui/Qt6QEglFSX11IntegrationPluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QEglFSX11IntegrationPluginConfig.cmake /usr/lib64/cmake/Qt6Gui/Qt6QEglFSX11IntegrationPluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QEglFSX11IntegrationPluginTargets.cmake /usr/lib64/cmake/Qt6Gui/Qt6QEvdevKeyboardPluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QEvdevKeyboardPluginConfig.cmake /usr/lib64/cmake/Qt6Gui/Qt6QEvdevKeyboardPluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QEvdevKeyboardPluginTargets.cmake /usr/lib64/cmake/Qt6Gui/Qt6QEvdevMousePluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QEvdevMousePluginConfig.cmake /usr/lib64/cmake/Qt6Gui/Qt6QEvdevMousePluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QEvdevMousePluginTargets.cmake /usr/lib64/cmake/Qt6Gui/Qt6QEvdevTabletPluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QEvdevTabletPluginConfig.cmake /usr/lib64/cmake/Qt6Gui/Qt6QEvdevTabletPluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QEvdevTabletPluginTargets.cmake /usr/lib64/cmake/Qt6Gui/Qt6QEvdevTouchScreenPluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QEvdevTouchScreenPluginConfig.cmake /usr/lib64/cmake/Qt6Gui/Qt6QEvdevTouchScreenPluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QEvdevTouchScreenPluginTargets.cmake /usr/lib64/cmake/Qt6Gui/Qt6QGifPluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QGifPluginConfig.cmake /usr/lib64/cmake/Qt6Gui/Qt6QGifPluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QGifPluginTargets.cmake /usr/lib64/cmake/Qt6Gui/Qt6QGtk3ThemePluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QGtk3ThemePluginConfig.cmake /usr/lib64/cmake/Qt6Gui/Qt6QGtk3ThemePluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QGtk3ThemePluginTargets.cmake /usr/lib64/cmake/Qt6Gui/Qt6QICNSPluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QICNSPluginConfig.cmake /usr/lib64/cmake/Qt6Gui/Qt6QICNSPluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QICNSPluginTargets.cmake /usr/lib64/cmake/Qt6Gui/Qt6QICOPluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QICOPluginConfig.cmake /usr/lib64/cmake/Qt6Gui/Qt6QICOPluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QICOPluginTargets.cmake /usr/lib64/cmake/Qt6Gui/Qt6QIbusPlatformInputContextPluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QIbusPlatformInputContextPluginConfig.cmake /usr/lib64/cmake/Qt6Gui/Qt6QIbusPlatformInputContextPluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QIbusPlatformInputContextPluginTargets.cmake /usr/lib64/cmake/Qt6Gui/Qt6QJp2PluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QJp2PluginConfig.cmake /usr/lib64/cmake/Qt6Gui/Qt6QJp2PluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QJp2PluginTargets.cmake /usr/lib64/cmake/Qt6Gui/Qt6QJpegPluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QJpegPluginConfig.cmake /usr/lib64/cmake/Qt6Gui/Qt6QJpegPluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QJpegPluginTargets.cmake /usr/lib64/cmake/Qt6Gui/Qt6QLibInputPluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QLibInputPluginConfig.cmake /usr/lib64/cmake/Qt6Gui/Qt6QLibInputPluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QLibInputPluginTargets.cmake /usr/lib64/cmake/Qt6Gui/Qt6QLinuxFbIntegrationPluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QLinuxFbIntegrationPluginConfig.cmake /usr/lib64/cmake/Qt6Gui/Qt6QLinuxFbIntegrationPluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QLinuxFbIntegrationPluginTargets.cmake /usr/lib64/cmake/Qt6Gui/Qt6QMinimalEglIntegrationPluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QMinimalEglIntegrationPluginConfig.cmake /usr/lib64/cmake/Qt6Gui/Qt6QMinimalEglIntegrationPluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QMinimalEglIntegrationPluginTargets.cmake /usr/lib64/cmake/Qt6Gui/Qt6QMinimalIntegrationPluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QMinimalIntegrationPluginConfig.cmake /usr/lib64/cmake/Qt6Gui/Qt6QMinimalIntegrationPluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QMinimalIntegrationPluginTargets.cmake /usr/lib64/cmake/Qt6Gui/Qt6QMngPluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QMngPluginConfig.cmake /usr/lib64/cmake/Qt6Gui/Qt6QMngPluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QMngPluginTargets.cmake /usr/lib64/cmake/Qt6Gui/Qt6QOffscreenIntegrationPluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QOffscreenIntegrationPluginConfig.cmake /usr/lib64/cmake/Qt6Gui/Qt6QOffscreenIntegrationPluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QOffscreenIntegrationPluginTargets.cmake /usr/lib64/cmake/Qt6Gui/Qt6QPdfPluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QPdfPluginConfig.cmake /usr/lib64/cmake/Qt6Gui/Qt6QPdfPluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QPdfPluginTargets.cmake /usr/lib64/cmake/Qt6Gui/Qt6QSvgIconPluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QSvgIconPluginConfig.cmake /usr/lib64/cmake/Qt6Gui/Qt6QSvgIconPluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QSvgIconPluginTargets.cmake /usr/lib64/cmake/Qt6Gui/Qt6QSvgPluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QSvgPluginConfig.cmake /usr/lib64/cmake/Qt6Gui/Qt6QSvgPluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QSvgPluginTargets.cmake /usr/lib64/cmake/Qt6Gui/Qt6QTgaPluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QTgaPluginConfig.cmake /usr/lib64/cmake/Qt6Gui/Qt6QTgaPluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QTgaPluginTargets.cmake /usr/lib64/cmake/Qt6Gui/Qt6QTiffPluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QTiffPluginConfig.cmake /usr/lib64/cmake/Qt6Gui/Qt6QTiffPluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QTiffPluginTargets.cmake /usr/lib64/cmake/Qt6Gui/Qt6QTsLibPluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QTsLibPluginConfig.cmake /usr/lib64/cmake/Qt6Gui/Qt6QTsLibPluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QTsLibPluginTargets.cmake /usr/lib64/cmake/Qt6Gui/Qt6QTuioTouchPluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QTuioTouchPluginConfig.cmake /usr/lib64/cmake/Qt6Gui/Qt6QTuioTouchPluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QTuioTouchPluginTargets.cmake /usr/lib64/cmake/Qt6Gui/Qt6QVkKhrDisplayIntegrationPluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QVkKhrDisplayIntegrationPluginConfig.cmake /usr/lib64/cmake/Qt6Gui/Qt6QVkKhrDisplayIntegrationPluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QVkKhrDisplayIntegrationPluginTargets.cmake /usr/lib64/cmake/Qt6Gui/Qt6QVncIntegrationPluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QVncIntegrationPluginConfig.cmake /usr/lib64/cmake/Qt6Gui/Qt6QVncIntegrationPluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QVncIntegrationPluginTargets.cmake /usr/lib64/cmake/Qt6Gui/Qt6QWaylandBradientDecorationPluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QWaylandBradientDecorationPluginConfig.cmake /usr/lib64/cmake/Qt6Gui/Qt6QWaylandBradientDecorationPluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QWaylandBradientDecorationPluginTargets.cmake /usr/lib64/cmake/Qt6Gui/Qt6QWaylandEglClientBufferPluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QWaylandEglClientBufferPluginConfig.cmake /usr/lib64/cmake/Qt6Gui/Qt6QWaylandEglClientBufferPluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QWaylandEglClientBufferPluginTargets.cmake /usr/lib64/cmake/Qt6Gui/Qt6QWaylandFullScreenShellV1IntegrationPluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QWaylandFullScreenShellV1IntegrationPluginConfig.cmake /usr/lib64/cmake/Qt6Gui/Qt6QWaylandFullScreenShellV1IntegrationPluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QWaylandFullScreenShellV1IntegrationPluginTargets.cmake /usr/lib64/cmake/Qt6Gui/Qt6QWaylandIntegrationPluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QWaylandIntegrationPluginConfig.cmake /usr/lib64/cmake/Qt6Gui/Qt6QWaylandIntegrationPluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QWaylandIntegrationPluginTargets.cmake /usr/lib64/cmake/Qt6Gui/Qt6QWaylandIviShellIntegrationPluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QWaylandIviShellIntegrationPluginConfig.cmake /usr/lib64/cmake/Qt6Gui/Qt6QWaylandIviShellIntegrationPluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QWaylandIviShellIntegrationPluginTargets.cmake /usr/lib64/cmake/Qt6Gui/Qt6QWaylandQtShellIntegrationPluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QWaylandQtShellIntegrationPluginConfig.cmake /usr/lib64/cmake/Qt6Gui/Qt6QWaylandQtShellIntegrationPluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QWaylandQtShellIntegrationPluginTargets.cmake /usr/lib64/cmake/Qt6Gui/Qt6QWaylandWlShellIntegrationPluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QWaylandWlShellIntegrationPluginConfig.cmake /usr/lib64/cmake/Qt6Gui/Qt6QWaylandWlShellIntegrationPluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QWaylandWlShellIntegrationPluginTargets.cmake /usr/lib64/cmake/Qt6Gui/Qt6QWaylandXdgShellIntegrationPluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QWaylandXdgShellIntegrationPluginConfig.cmake /usr/lib64/cmake/Qt6Gui/Qt6QWaylandXdgShellIntegrationPluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QWaylandXdgShellIntegrationPluginTargets.cmake /usr/lib64/cmake/Qt6Gui/Qt6QWbmpPluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QWbmpPluginConfig.cmake /usr/lib64/cmake/Qt6Gui/Qt6QWbmpPluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QWbmpPluginTargets.cmake /usr/lib64/cmake/Qt6Gui/Qt6QWebpPluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QWebpPluginConfig.cmake /usr/lib64/cmake/Qt6Gui/Qt6QWebpPluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QWebpPluginTargets.cmake /usr/lib64/cmake/Qt6Gui/Qt6QXcbEglIntegrationPluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QXcbEglIntegrationPluginConfig.cmake /usr/lib64/cmake/Qt6Gui/Qt6QXcbEglIntegrationPluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QXcbEglIntegrationPluginTargets.cmake /usr/lib64/cmake/Qt6Gui/Qt6QXcbGlxIntegrationPluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QXcbGlxIntegrationPluginConfig.cmake /usr/lib64/cmake/Qt6Gui/Qt6QXcbGlxIntegrationPluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QXcbGlxIntegrationPluginTargets.cmake /usr/lib64/cmake/Qt6Gui/Qt6QXcbIntegrationPluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QXcbIntegrationPluginConfig.cmake /usr/lib64/cmake/Qt6Gui/Qt6QXcbIntegrationPluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QXcbIntegrationPluginTargets.cmake /usr/lib64/cmake/Qt6Gui/Qt6QXdgDesktopPortalThemePluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QXdgDesktopPortalThemePluginConfig.cmake /usr/lib64/cmake/Qt6Gui/Qt6QXdgDesktopPortalThemePluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6QXdgDesktopPortalThemePluginTargets.cmake /usr/lib64/cmake/Qt6Gui/Qt6ShmServerBufferPluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6ShmServerBufferPluginConfig.cmake /usr/lib64/cmake/Qt6Gui/Qt6ShmServerBufferPluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6ShmServerBufferPluginTargets.cmake /usr/lib64/cmake/Qt6Gui/Qt6VulkanServerBufferPluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6VulkanServerBufferPluginConfig.cmake /usr/lib64/cmake/Qt6Gui/Qt6VulkanServerBufferPluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Gui/Qt6VulkanServerBufferPluginTargets.cmake /usr/lib64/cmake/Qt6GuiTools/Qt6GuiToolsAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6GuiTools/Qt6GuiToolsConfig.cmake /usr/lib64/cmake/Qt6GuiTools/Qt6GuiToolsConfigVersion.cmake /usr/lib64/cmake/Qt6GuiTools/Qt6GuiToolsConfigVersionImpl.cmake /usr/lib64/cmake/Qt6GuiTools/Qt6GuiToolsDependencies.cmake /usr/lib64/cmake/Qt6GuiTools/Qt6GuiToolsTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6GuiTools/Qt6GuiToolsTargets.cmake /usr/lib64/cmake/Qt6GuiTools/Qt6GuiToolsVersionlessTargets.cmake /usr/lib64/cmake/Qt6Multimedia/Qt6MultimediaAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Multimedia/Qt6MultimediaConfig.cmake /usr/lib64/cmake/Qt6Multimedia/Qt6MultimediaConfigVersion.cmake /usr/lib64/cmake/Qt6Multimedia/Qt6MultimediaConfigVersionImpl.cmake /usr/lib64/cmake/Qt6Multimedia/Qt6MultimediaDependencies.cmake /usr/lib64/cmake/Qt6Multimedia/Qt6MultimediaMacros.cmake /usr/lib64/cmake/Qt6Multimedia/Qt6MultimediaPlugins.cmake /usr/lib64/cmake/Qt6Multimedia/Qt6MultimediaTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Multimedia/Qt6MultimediaTargets.cmake /usr/lib64/cmake/Qt6Multimedia/Qt6MultimediaVersionlessAliasTargets.cmake /usr/lib64/cmake/Qt6Multimedia/Qt6QFFmpegMediaPluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Multimedia/Qt6QFFmpegMediaPluginConfig.cmake /usr/lib64/cmake/Qt6Multimedia/Qt6QFFmpegMediaPluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Multimedia/Qt6QFFmpegMediaPluginTargets.cmake /usr/lib64/cmake/Qt6Multimedia/Qt6QGstreamerMediaPluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Multimedia/Qt6QGstreamerMediaPluginConfig.cmake /usr/lib64/cmake/Qt6Multimedia/Qt6QGstreamerMediaPluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Multimedia/Qt6QGstreamerMediaPluginTargets.cmake /usr/lib64/cmake/Qt6MultimediaWidgets/Qt6MultimediaWidgetsAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6MultimediaWidgets/Qt6MultimediaWidgetsConfig.cmake /usr/lib64/cmake/Qt6MultimediaWidgets/Qt6MultimediaWidgetsConfigVersion.cmake /usr/lib64/cmake/Qt6MultimediaWidgets/Qt6MultimediaWidgetsConfigVersionImpl.cmake /usr/lib64/cmake/Qt6MultimediaWidgets/Qt6MultimediaWidgetsDependencies.cmake /usr/lib64/cmake/Qt6MultimediaWidgets/Qt6MultimediaWidgetsTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6MultimediaWidgets/Qt6MultimediaWidgetsTargets.cmake /usr/lib64/cmake/Qt6MultimediaWidgets/Qt6MultimediaWidgetsVersionlessAliasTargets.cmake /usr/lib64/cmake/Qt6Network/Qt6NetworkAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Network/Qt6NetworkConfig.cmake /usr/lib64/cmake/Qt6Network/Qt6NetworkConfigVersion.cmake /usr/lib64/cmake/Qt6Network/Qt6NetworkConfigVersionImpl.cmake /usr/lib64/cmake/Qt6Network/Qt6NetworkDependencies.cmake /usr/lib64/cmake/Qt6Network/Qt6NetworkPlugins.cmake /usr/lib64/cmake/Qt6Network/Qt6NetworkTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Network/Qt6NetworkTargets.cmake /usr/lib64/cmake/Qt6Network/Qt6NetworkVersionlessAliasTargets.cmake /usr/lib64/cmake/Qt6Network/Qt6QGlibNetworkInformationPluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Network/Qt6QGlibNetworkInformationPluginConfig.cmake /usr/lib64/cmake/Qt6Network/Qt6QGlibNetworkInformationPluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Network/Qt6QGlibNetworkInformationPluginTargets.cmake /usr/lib64/cmake/Qt6Network/Qt6QNetworkManagerNetworkInformationPluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Network/Qt6QNetworkManagerNetworkInformationPluginConfig.cmake /usr/lib64/cmake/Qt6Network/Qt6QNetworkManagerNetworkInformationPluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Network/Qt6QNetworkManagerNetworkInformationPluginTargets.cmake /usr/lib64/cmake/Qt6Network/Qt6QTlsBackendCertOnlyPluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Network/Qt6QTlsBackendCertOnlyPluginConfig.cmake /usr/lib64/cmake/Qt6Network/Qt6QTlsBackendCertOnlyPluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Network/Qt6QTlsBackendCertOnlyPluginTargets.cmake /usr/lib64/cmake/Qt6Network/Qt6QTlsBackendOpenSSLPluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Network/Qt6QTlsBackendOpenSSLPluginConfig.cmake /usr/lib64/cmake/Qt6Network/Qt6QTlsBackendOpenSSLPluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Network/Qt6QTlsBackendOpenSSLPluginTargets.cmake /usr/lib64/cmake/Qt6OpenGL/Qt6OpenGLAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6OpenGL/Qt6OpenGLConfig.cmake /usr/lib64/cmake/Qt6OpenGL/Qt6OpenGLConfigVersion.cmake /usr/lib64/cmake/Qt6OpenGL/Qt6OpenGLConfigVersionImpl.cmake /usr/lib64/cmake/Qt6OpenGL/Qt6OpenGLDependencies.cmake /usr/lib64/cmake/Qt6OpenGL/Qt6OpenGLTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6OpenGL/Qt6OpenGLTargets.cmake /usr/lib64/cmake/Qt6OpenGL/Qt6OpenGLVersionlessAliasTargets.cmake /usr/lib64/cmake/Qt6OpenGLWidgets/Qt6OpenGLWidgetsAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6OpenGLWidgets/Qt6OpenGLWidgetsConfig.cmake /usr/lib64/cmake/Qt6OpenGLWidgets/Qt6OpenGLWidgetsConfigVersion.cmake /usr/lib64/cmake/Qt6OpenGLWidgets/Qt6OpenGLWidgetsConfigVersionImpl.cmake /usr/lib64/cmake/Qt6OpenGLWidgets/Qt6OpenGLWidgetsDependencies.cmake /usr/lib64/cmake/Qt6OpenGLWidgets/Qt6OpenGLWidgetsTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6OpenGLWidgets/Qt6OpenGLWidgetsTargets.cmake /usr/lib64/cmake/Qt6OpenGLWidgets/Qt6OpenGLWidgetsVersionlessAliasTargets.cmake /usr/lib64/cmake/Qt6Pdf/Qt6PdfAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Pdf/Qt6PdfConfig.cmake /usr/lib64/cmake/Qt6Pdf/Qt6PdfConfigVersion.cmake /usr/lib64/cmake/Qt6Pdf/Qt6PdfConfigVersionImpl.cmake /usr/lib64/cmake/Qt6Pdf/Qt6PdfDependencies.cmake /usr/lib64/cmake/Qt6Pdf/Qt6PdfTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Pdf/Qt6PdfTargets.cmake /usr/lib64/cmake/Qt6Pdf/Qt6PdfVersionlessAliasTargets.cmake /usr/lib64/cmake/Qt6PdfWidgets/Qt6PdfWidgetsAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6PdfWidgets/Qt6PdfWidgetsConfig.cmake /usr/lib64/cmake/Qt6PdfWidgets/Qt6PdfWidgetsConfigVersion.cmake /usr/lib64/cmake/Qt6PdfWidgets/Qt6PdfWidgetsConfigVersionImpl.cmake /usr/lib64/cmake/Qt6PdfWidgets/Qt6PdfWidgetsDependencies.cmake /usr/lib64/cmake/Qt6PdfWidgets/Qt6PdfWidgetsTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6PdfWidgets/Qt6PdfWidgetsTargets.cmake /usr/lib64/cmake/Qt6PdfWidgets/Qt6PdfWidgetsVersionlessAliasTargets.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6LabsPlatformpluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6LabsPlatformpluginConfig.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6LabsPlatformpluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6LabsPlatformpluginTargets.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6LabsSynchronizerpluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6LabsSynchronizerpluginConfig.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6LabsSynchronizerpluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6LabsSynchronizerpluginTargets.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6PdfQuickpluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6PdfQuickpluginConfig.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6PdfQuickpluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6PdfQuickpluginTargets.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6QmlNetworkpluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6QmlNetworkpluginConfig.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6QmlNetworkpluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6QmlNetworkpluginTargets.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6QuickControlsTestUtilsPrivatepluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6QuickControlsTestUtilsPrivatepluginConfig.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6QuickControlsTestUtilsPrivatepluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6QuickControlsTestUtilsPrivatepluginTargets.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6QuickTestpluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6QuickTestpluginConfig.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6QuickTestpluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6QuickTestpluginTargets.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6WaylandCompositorIviapplicationpluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6WaylandCompositorIviapplicationpluginConfig.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6WaylandCompositorIviapplicationpluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6WaylandCompositorIviapplicationpluginTargets.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6WaylandCompositorPresentationTimepluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6WaylandCompositorPresentationTimepluginConfig.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6WaylandCompositorPresentationTimepluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6WaylandCompositorPresentationTimepluginTargets.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6WaylandCompositorQtShellAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6WaylandCompositorQtShellConfig.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6WaylandCompositorQtShellTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6WaylandCompositorQtShellTargets.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6WaylandCompositorWLShellpluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6WaylandCompositorWLShellpluginConfig.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6WaylandCompositorWLShellpluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6WaylandCompositorWLShellpluginTargets.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6WaylandCompositorXdgShellpluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6WaylandCompositorXdgShellpluginConfig.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6WaylandCompositorXdgShellpluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6WaylandCompositorXdgShellpluginTargets.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6WaylandTextureSharingAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6WaylandTextureSharingConfig.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6WaylandTextureSharingExtensionAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6WaylandTextureSharingExtensionConfig.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6WaylandTextureSharingExtensionTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6WaylandTextureSharingExtensionTargets.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6WaylandTextureSharingTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6WaylandTextureSharingTargets.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6effectspluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6effectspluginConfig.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6effectspluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6effectspluginTargets.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6labsanimationpluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6labsanimationpluginConfig.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6labsanimationpluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6labsanimationpluginTargets.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6labsmodelspluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6labsmodelspluginConfig.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6labsmodelspluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6labsmodelspluginTargets.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6modelspluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6modelspluginConfig.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6modelspluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6modelspluginTargets.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6particlespluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6particlespluginConfig.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6particlespluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6particlespluginTargets.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qmlfolderlistmodelpluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qmlfolderlistmodelpluginConfig.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qmlfolderlistmodelpluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qmlfolderlistmodelpluginTargets.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qmllocalstoragepluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qmllocalstoragepluginConfig.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qmllocalstoragepluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qmllocalstoragepluginTargets.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qmlpluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qmlpluginConfig.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qmlpluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qmlpluginTargets.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qmlsettingspluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qmlsettingspluginConfig.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qmlsettingspluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qmlsettingspluginTargets.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qmlshapespluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qmlshapespluginConfig.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qmlshapespluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qmlshapespluginTargets.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qmlwavefrontmeshpluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qmlwavefrontmeshpluginConfig.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qmlwavefrontmeshpluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qmlwavefrontmeshpluginTargets.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qmlxmllistmodelpluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qmlxmllistmodelpluginConfig.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qmlxmllistmodelpluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qmlxmllistmodelpluginTargets.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qquicklayoutspluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qquicklayoutspluginConfig.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qquicklayoutspluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qquicklayoutspluginTargets.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qquickvectorimagehelperspluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qquickvectorimagehelperspluginConfig.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qquickvectorimagehelperspluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qquickvectorimagehelperspluginTargets.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qquickvectorimagepluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qquickvectorimagepluginConfig.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qquickvectorimagepluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qquickvectorimagepluginTargets.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtqmlcorepluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtqmlcorepluginConfig.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtqmlcorepluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtqmlcorepluginTargets.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquick2pluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquick2pluginConfig.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquick2pluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquick2pluginTargets.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2basicstyleimplpluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2basicstyleimplpluginConfig.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2basicstyleimplpluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2basicstyleimplpluginTargets.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2basicstylepluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2basicstylepluginConfig.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2basicstylepluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2basicstylepluginTargets.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2fluentwinui3styleimplpluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2fluentwinui3styleimplpluginConfig.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2fluentwinui3styleimplpluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2fluentwinui3styleimplpluginTargets.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2fluentwinui3stylepluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2fluentwinui3stylepluginConfig.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2fluentwinui3stylepluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2fluentwinui3stylepluginTargets.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2fusionstyleimplpluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2fusionstyleimplpluginConfig.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2fusionstyleimplpluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2fusionstyleimplpluginTargets.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2fusionstylepluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2fusionstylepluginConfig.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2fusionstylepluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2fusionstylepluginTargets.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2imaginestyleimplpluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2imaginestyleimplpluginConfig.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2imaginestyleimplpluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2imaginestyleimplpluginTargets.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2imaginestylepluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2imaginestylepluginConfig.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2imaginestylepluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2imaginestylepluginTargets.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2implpluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2implpluginConfig.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2implpluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2implpluginTargets.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2materialstyleimplpluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2materialstyleimplpluginConfig.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2materialstyleimplpluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2materialstyleimplpluginTargets.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2materialstylepluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2materialstylepluginConfig.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2materialstylepluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2materialstylepluginTargets.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2pluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2pluginConfig.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2pluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2pluginTargets.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2universalstyleimplpluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2universalstyleimplpluginConfig.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2universalstyleimplpluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2universalstyleimplpluginTargets.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2universalstylepluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2universalstylepluginConfig.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2universalstylepluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2universalstylepluginTargets.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickdialogs2quickimplpluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickdialogs2quickimplpluginConfig.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickdialogs2quickimplpluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickdialogs2quickimplpluginTargets.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickdialogspluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickdialogspluginConfig.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickdialogspluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickdialogspluginTargets.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickshapesdesignhelperspluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickshapesdesignhelperspluginConfig.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickshapesdesignhelperspluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickshapesdesignhelperspluginTargets.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquicktemplates2pluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquicktemplates2pluginConfig.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquicktemplates2pluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquicktemplates2pluginTargets.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6quick3dspatialaudioAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6quick3dspatialaudioConfig.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6quick3dspatialaudioTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6quick3dspatialaudioTargets.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6quickmultimediaAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6quickmultimediaConfig.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6quickmultimediaTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6quickmultimediaTargets.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6quicktoolingAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6quicktoolingConfig.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6quicktoolingTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6quicktoolingTargets.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6quickwindowAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6quickwindowConfig.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6quickwindowTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6quickwindowTargets.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qwaylandcompositorpluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qwaylandcompositorpluginConfig.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qwaylandcompositorpluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qwaylandcompositorpluginTargets.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6sharedimagepluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6sharedimagepluginConfig.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6sharedimagepluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6sharedimagepluginTargets.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6workerscriptpluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6workerscriptpluginConfig.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6workerscriptpluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6workerscriptpluginTargets.cmake /usr/lib64/cmake/Qt6Qml/Qt6QDebugMessageServiceFactoryPluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Qml/Qt6QDebugMessageServiceFactoryPluginConfig.cmake /usr/lib64/cmake/Qt6Qml/Qt6QDebugMessageServiceFactoryPluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Qml/Qt6QDebugMessageServiceFactoryPluginTargets.cmake /usr/lib64/cmake/Qt6Qml/Qt6QLocalClientConnectionFactoryPluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Qml/Qt6QLocalClientConnectionFactoryPluginConfig.cmake /usr/lib64/cmake/Qt6Qml/Qt6QLocalClientConnectionFactoryPluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Qml/Qt6QLocalClientConnectionFactoryPluginTargets.cmake /usr/lib64/cmake/Qt6Qml/Qt6QQmlDebugServerFactoryPluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Qml/Qt6QQmlDebugServerFactoryPluginConfig.cmake /usr/lib64/cmake/Qt6Qml/Qt6QQmlDebugServerFactoryPluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Qml/Qt6QQmlDebugServerFactoryPluginTargets.cmake /usr/lib64/cmake/Qt6Qml/Qt6QQmlDebuggerServiceFactoryPluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Qml/Qt6QQmlDebuggerServiceFactoryPluginConfig.cmake /usr/lib64/cmake/Qt6Qml/Qt6QQmlDebuggerServiceFactoryPluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Qml/Qt6QQmlDebuggerServiceFactoryPluginTargets.cmake /usr/lib64/cmake/Qt6Qml/Qt6QQmlInspectorServiceFactoryPluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Qml/Qt6QQmlInspectorServiceFactoryPluginConfig.cmake /usr/lib64/cmake/Qt6Qml/Qt6QQmlInspectorServiceFactoryPluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Qml/Qt6QQmlInspectorServiceFactoryPluginTargets.cmake /usr/lib64/cmake/Qt6Qml/Qt6QQmlNativeDebugConnectorFactoryPluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Qml/Qt6QQmlNativeDebugConnectorFactoryPluginConfig.cmake /usr/lib64/cmake/Qt6Qml/Qt6QQmlNativeDebugConnectorFactoryPluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Qml/Qt6QQmlNativeDebugConnectorFactoryPluginTargets.cmake /usr/lib64/cmake/Qt6Qml/Qt6QQmlNativeDebugServiceFactoryPluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Qml/Qt6QQmlNativeDebugServiceFactoryPluginConfig.cmake /usr/lib64/cmake/Qt6Qml/Qt6QQmlNativeDebugServiceFactoryPluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Qml/Qt6QQmlNativeDebugServiceFactoryPluginTargets.cmake /usr/lib64/cmake/Qt6Qml/Qt6QQmlPreviewServiceFactoryPluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Qml/Qt6QQmlPreviewServiceFactoryPluginConfig.cmake /usr/lib64/cmake/Qt6Qml/Qt6QQmlPreviewServiceFactoryPluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Qml/Qt6QQmlPreviewServiceFactoryPluginTargets.cmake /usr/lib64/cmake/Qt6Qml/Qt6QQmlProfilerServiceFactoryPluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Qml/Qt6QQmlProfilerServiceFactoryPluginConfig.cmake /usr/lib64/cmake/Qt6Qml/Qt6QQmlProfilerServiceFactoryPluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Qml/Qt6QQmlProfilerServiceFactoryPluginTargets.cmake /usr/lib64/cmake/Qt6Qml/Qt6QQuickProfilerAdapterFactoryPluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Qml/Qt6QQuickProfilerAdapterFactoryPluginConfig.cmake /usr/lib64/cmake/Qt6Qml/Qt6QQuickProfilerAdapterFactoryPluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Qml/Qt6QQuickProfilerAdapterFactoryPluginTargets.cmake /usr/lib64/cmake/Qt6Qml/Qt6QTcpServerConnectionFactoryPluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Qml/Qt6QTcpServerConnectionFactoryPluginConfig.cmake /usr/lib64/cmake/Qt6Qml/Qt6QTcpServerConnectionFactoryPluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Qml/Qt6QTcpServerConnectionFactoryPluginTargets.cmake /usr/lib64/cmake/Qt6Qml/Qt6QmlAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Qml/Qt6QmlConfig.cmake /usr/lib64/cmake/Qt6Qml/Qt6QmlConfigExtras.cmake /usr/lib64/cmake/Qt6Qml/Qt6QmlConfigVersion.cmake /usr/lib64/cmake/Qt6Qml/Qt6QmlConfigVersionImpl.cmake /usr/lib64/cmake/Qt6Qml/Qt6QmlDependencies.cmake /usr/lib64/cmake/Qt6Qml/Qt6QmlFindQmlscInternal.cmake /usr/lib64/cmake/Qt6Qml/Qt6QmlMacros.cmake /usr/lib64/cmake/Qt6Qml/Qt6QmlPlugins.cmake /usr/lib64/cmake/Qt6Qml/Qt6QmlProperties.cmake /usr/lib64/cmake/Qt6Qml/Qt6QmlPublicCMakeHelpers.cmake /usr/lib64/cmake/Qt6Qml/Qt6QmlTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Qml/Qt6QmlTargets.cmake /usr/lib64/cmake/Qt6Qml/Qt6QmlVersionlessAliasTargets.cmake /usr/lib64/cmake/Qt6QmlIntegration/Qt6QmlIntegrationAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6QmlIntegration/Qt6QmlIntegrationConfig.cmake /usr/lib64/cmake/Qt6QmlIntegration/Qt6QmlIntegrationConfigVersion.cmake /usr/lib64/cmake/Qt6QmlIntegration/Qt6QmlIntegrationConfigVersionImpl.cmake /usr/lib64/cmake/Qt6QmlIntegration/Qt6QmlIntegrationTargets.cmake /usr/lib64/cmake/Qt6QmlIntegration/Qt6QmlIntegrationVersionlessAliasTargets.cmake /usr/lib64/cmake/Qt6QmlMeta/Qt6QmlMetaAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6QmlMeta/Qt6QmlMetaConfig.cmake /usr/lib64/cmake/Qt6QmlMeta/Qt6QmlMetaConfigVersion.cmake /usr/lib64/cmake/Qt6QmlMeta/Qt6QmlMetaConfigVersionImpl.cmake /usr/lib64/cmake/Qt6QmlMeta/Qt6QmlMetaDependencies.cmake /usr/lib64/cmake/Qt6QmlMeta/Qt6QmlMetaTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6QmlMeta/Qt6QmlMetaTargets.cmake /usr/lib64/cmake/Qt6QmlMeta/Qt6QmlMetaVersionlessAliasTargets.cmake /usr/lib64/cmake/Qt6QmlModels/Qt6QmlModelsAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6QmlModels/Qt6QmlModelsConfig.cmake /usr/lib64/cmake/Qt6QmlModels/Qt6QmlModelsConfigVersion.cmake /usr/lib64/cmake/Qt6QmlModels/Qt6QmlModelsConfigVersionImpl.cmake /usr/lib64/cmake/Qt6QmlModels/Qt6QmlModelsDependencies.cmake /usr/lib64/cmake/Qt6QmlModels/Qt6QmlModelsTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6QmlModels/Qt6QmlModelsTargets.cmake /usr/lib64/cmake/Qt6QmlModels/Qt6QmlModelsVersionlessAliasTargets.cmake /usr/lib64/cmake/Qt6QmlTools/Qt6QmlToolsAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6QmlTools/Qt6QmlToolsConfig.cmake /usr/lib64/cmake/Qt6QmlTools/Qt6QmlToolsConfigVersion.cmake /usr/lib64/cmake/Qt6QmlTools/Qt6QmlToolsConfigVersionImpl.cmake /usr/lib64/cmake/Qt6QmlTools/Qt6QmlToolsDependencies.cmake /usr/lib64/cmake/Qt6QmlTools/Qt6QmlToolsTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6QmlTools/Qt6QmlToolsTargets.cmake /usr/lib64/cmake/Qt6QmlTools/Qt6QmlToolsVersionlessTargets.cmake /usr/lib64/cmake/Qt6QmlWorkerScript/Qt6QmlWorkerScriptAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6QmlWorkerScript/Qt6QmlWorkerScriptConfig.cmake /usr/lib64/cmake/Qt6QmlWorkerScript/Qt6QmlWorkerScriptConfigVersion.cmake /usr/lib64/cmake/Qt6QmlWorkerScript/Qt6QmlWorkerScriptConfigVersionImpl.cmake /usr/lib64/cmake/Qt6QmlWorkerScript/Qt6QmlWorkerScriptDependencies.cmake /usr/lib64/cmake/Qt6QmlWorkerScript/Qt6QmlWorkerScriptTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6QmlWorkerScript/Qt6QmlWorkerScriptTargets.cmake /usr/lib64/cmake/Qt6QmlWorkerScript/Qt6QmlWorkerScriptVersionlessAliasTargets.cmake /usr/lib64/cmake/Qt6Quick/Qt6QuickAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Quick/Qt6QuickConfig.cmake /usr/lib64/cmake/Qt6Quick/Qt6QuickConfigVersion.cmake /usr/lib64/cmake/Qt6Quick/Qt6QuickConfigVersionImpl.cmake /usr/lib64/cmake/Qt6Quick/Qt6QuickDependencies.cmake /usr/lib64/cmake/Qt6Quick/Qt6QuickPlugins.cmake /usr/lib64/cmake/Qt6Quick/Qt6QuickTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Quick/Qt6QuickTargets.cmake /usr/lib64/cmake/Qt6Quick/Qt6QuickVersionlessAliasTargets.cmake /usr/lib64/cmake/Qt6QuickTools/Qt6QuickToolsAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6QuickTools/Qt6QuickToolsConfig.cmake /usr/lib64/cmake/Qt6QuickTools/Qt6QuickToolsConfigVersion.cmake /usr/lib64/cmake/Qt6QuickTools/Qt6QuickToolsConfigVersionImpl.cmake /usr/lib64/cmake/Qt6QuickTools/Qt6QuickToolsDependencies.cmake /usr/lib64/cmake/Qt6QuickTools/Qt6QuickToolsTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6QuickTools/Qt6QuickToolsTargets.cmake /usr/lib64/cmake/Qt6QuickTools/Qt6QuickToolsVersionlessTargets.cmake /usr/lib64/cmake/Qt6Sql/Qt6QIBaseDriverPluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Sql/Qt6QIBaseDriverPluginConfig.cmake /usr/lib64/cmake/Qt6Sql/Qt6QIBaseDriverPluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Sql/Qt6QIBaseDriverPluginTargets.cmake /usr/lib64/cmake/Qt6Sql/Qt6QMYSQLDriverPluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Sql/Qt6QMYSQLDriverPluginConfig.cmake /usr/lib64/cmake/Qt6Sql/Qt6QMYSQLDriverPluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Sql/Qt6QMYSQLDriverPluginTargets.cmake /usr/lib64/cmake/Qt6Sql/Qt6QODBCDriverPluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Sql/Qt6QODBCDriverPluginConfig.cmake /usr/lib64/cmake/Qt6Sql/Qt6QODBCDriverPluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Sql/Qt6QODBCDriverPluginTargets.cmake /usr/lib64/cmake/Qt6Sql/Qt6QPSQLDriverPluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Sql/Qt6QPSQLDriverPluginConfig.cmake /usr/lib64/cmake/Qt6Sql/Qt6QPSQLDriverPluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Sql/Qt6QPSQLDriverPluginTargets.cmake /usr/lib64/cmake/Qt6Sql/Qt6QSQLiteDriverPluginAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Sql/Qt6QSQLiteDriverPluginConfig.cmake /usr/lib64/cmake/Qt6Sql/Qt6QSQLiteDriverPluginTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Sql/Qt6QSQLiteDriverPluginTargets.cmake /usr/lib64/cmake/Qt6Sql/Qt6SqlAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Sql/Qt6SqlConfig.cmake /usr/lib64/cmake/Qt6Sql/Qt6SqlConfigVersion.cmake /usr/lib64/cmake/Qt6Sql/Qt6SqlConfigVersionImpl.cmake /usr/lib64/cmake/Qt6Sql/Qt6SqlDependencies.cmake /usr/lib64/cmake/Qt6Sql/Qt6SqlPlugins.cmake /usr/lib64/cmake/Qt6Sql/Qt6SqlTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Sql/Qt6SqlTargets.cmake /usr/lib64/cmake/Qt6Sql/Qt6SqlVersionlessAliasTargets.cmake /usr/lib64/cmake/Qt6Svg/Qt6SvgAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Svg/Qt6SvgConfig.cmake /usr/lib64/cmake/Qt6Svg/Qt6SvgConfigVersion.cmake /usr/lib64/cmake/Qt6Svg/Qt6SvgConfigVersionImpl.cmake /usr/lib64/cmake/Qt6Svg/Qt6SvgDependencies.cmake /usr/lib64/cmake/Qt6Svg/Qt6SvgTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Svg/Qt6SvgTargets.cmake /usr/lib64/cmake/Qt6Svg/Qt6SvgVersionlessAliasTargets.cmake /usr/lib64/cmake/Qt6SvgWidgets/Qt6SvgWidgetsAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6SvgWidgets/Qt6SvgWidgetsConfig.cmake /usr/lib64/cmake/Qt6SvgWidgets/Qt6SvgWidgetsConfigVersion.cmake /usr/lib64/cmake/Qt6SvgWidgets/Qt6SvgWidgetsConfigVersionImpl.cmake /usr/lib64/cmake/Qt6SvgWidgets/Qt6SvgWidgetsDependencies.cmake /usr/lib64/cmake/Qt6SvgWidgets/Qt6SvgWidgetsTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6SvgWidgets/Qt6SvgWidgetsTargets.cmake /usr/lib64/cmake/Qt6SvgWidgets/Qt6SvgWidgetsVersionlessAliasTargets.cmake /usr/lib64/cmake/Qt6Test/Qt6TestAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Test/Qt6TestConfig.cmake /usr/lib64/cmake/Qt6Test/Qt6TestConfigVersion.cmake /usr/lib64/cmake/Qt6Test/Qt6TestConfigVersionImpl.cmake /usr/lib64/cmake/Qt6Test/Qt6TestDependencies.cmake /usr/lib64/cmake/Qt6Test/Qt6TestTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Test/Qt6TestTargets.cmake /usr/lib64/cmake/Qt6Test/Qt6TestVersionlessAliasTargets.cmake /usr/lib64/cmake/Qt6Test/QtTestProperties.cmake /usr/lib64/cmake/Qt6Widgets/Qt6WidgetsAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6Widgets/Qt6WidgetsConfig.cmake /usr/lib64/cmake/Qt6Widgets/Qt6WidgetsConfigVersion.cmake /usr/lib64/cmake/Qt6Widgets/Qt6WidgetsConfigVersionImpl.cmake /usr/lib64/cmake/Qt6Widgets/Qt6WidgetsDependencies.cmake /usr/lib64/cmake/Qt6Widgets/Qt6WidgetsMacros.cmake /usr/lib64/cmake/Qt6Widgets/Qt6WidgetsPlugins.cmake /usr/lib64/cmake/Qt6Widgets/Qt6WidgetsTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6Widgets/Qt6WidgetsTargets.cmake /usr/lib64/cmake/Qt6Widgets/Qt6WidgetsVersionlessAliasTargets.cmake /usr/lib64/cmake/Qt6WidgetsTools/Qt6WidgetsToolsAdditionalTargetInfo.cmake /usr/lib64/cmake/Qt6WidgetsTools/Qt6WidgetsToolsConfig.cmake /usr/lib64/cmake/Qt6WidgetsTools/Qt6WidgetsToolsConfigVersion.cmake /usr/lib64/cmake/Qt6WidgetsTools/Qt6WidgetsToolsConfigVersionImpl.cmake /usr/lib64/cmake/Qt6WidgetsTools/Qt6WidgetsToolsDependencies.cmake /usr/lib64/cmake/Qt6WidgetsTools/Qt6WidgetsToolsTargets-relwithdebinfo.cmake /usr/lib64/cmake/Qt6WidgetsTools/Qt6WidgetsToolsTargets.cmake /usr/lib64/cmake/Qt6WidgetsTools/Qt6WidgetsToolsVersionlessTargets.cmake /usr/share/cmake/Modules/CMakeCXXInformation.cmake /usr/share/cmake/Modules/CMakeCheckCompilerFlagCommonPatterns.cmake /usr/share/cmake/Modules/CMakeCommonLanguageInclude.cmake /usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake /usr/share/cmake/Modules/CMakeGenericSystem.cmake /usr/share/cmake/Modules/CMakeInitializeConfigs.cmake /usr/share/cmake/Modules/CMakeLanguageInformation.cmake /usr/share/cmake/Modules/CMakeSystemSpecificInformation.cmake /usr/share/cmake/Modules/CMakeSystemSpecificInitialize.cmake /usr/share/cmake/Modules/CPack.cmake /usr/share/cmake/Modules/CPackComponent.cmake /usr/share/cmake/Modules/CheckCXXCompilerFlag.cmake /usr/share/cmake/Modules/CheckCXXSourceCompiles.cmake /usr/share/cmake/Modules/CheckIncludeFileCXX.cmake /usr/share/cmake/Modules/CheckLibraryExists.cmake /usr/share/cmake/Modules/Compiler/CMakeCommonCompilerMacros.cmake /usr/share/cmake/Modules/Compiler/GNU-CXX.cmake /usr/share/cmake/Modules/Compiler/GNU.cmake /usr/share/cmake/Modules/FeatureSummary.cmake /usr/share/cmake/Modules/FindFreetype.cmake /usr/share/cmake/Modules/FindJPEG.cmake /usr/share/cmake/Modules/FindOpenGL.cmake /usr/share/cmake/Modules/FindPNG.cmake /usr/share/cmake/Modules/FindPackageHandleStandardArgs.cmake /usr/share/cmake/Modules/FindPackageMessage.cmake /usr/share/cmake/Modules/FindPkgConfig.cmake /usr/share/cmake/Modules/FindTIFF.cmake /usr/share/cmake/Modules/FindThreads.cmake /usr/share/cmake/Modules/FindVulkan.cmake /usr/share/cmake/Modules/FindZLIB.cmake /usr/share/cmake/Modules/GNUInstallDirs.cmake /usr/share/cmake/Modules/Internal/CMakeCXXLinkerInformation.cmake /usr/share/cmake/Modules/Internal/CMakeCommonLinkerInformation.cmake /usr/share/cmake/Modules/Internal/CheckCompilerFlag.cmake /usr/share/cmake/Modules/Internal/CheckFlagCommonConfig.cmake /usr/share/cmake/Modules/Internal/CheckSourceCompiles.cmake /usr/share/cmake/Modules/Linker/GNU-CXX.cmake /usr/share/cmake/Modules/Linker/GNU.cmake /usr/share/cmake/Modules/MacroAddFileDependencies.cmake /usr/share/cmake/Modules/Platform/Linker/GNU.cmake /usr/share/cmake/Modules/Platform/Linker/Linux-GNU-CXX.cmake /usr/share/cmake/Modules/Platform/Linker/Linux-GNU.cmake /usr/share/cmake/Modules/Platform/Linux-GNU-CXX.cmake /usr/share/cmake/Modules/Platform/Linux-GNU.cmake /usr/share/cmake/Modules/Platform/Linux-Initialize.cmake /usr/share/cmake/Modules/Platform/Linux.cmake /usr/share/cmake/Modules/Platform/UnixPaths.cmake /usr/share/cmake/Modules/SelectLibraryConfigurations.cmake /usr/share/cmake/Templates/CPackConfig.cmake.in CMakeCache.txt CMakeFiles/3.31.11/CMakeCXXCompiler.cmake CMakeFiles/3.31.11/CMakeSystem.cmake: phony + + +############################################# +# Clean additional files. + +build CMakeFiles/clean.additional: CLEAN_ADDITIONAL + CONFIG = Release + + +############################################# +# Clean all the built files. + +build clean: CLEAN CMakeFiles/clean.additional + + +############################################# +# Print all primary targets available. + +build help: HELP + + +############################################# +# Make the all target the default. + +default all diff --git a/build-linux/cmake_install.cmake b/build-linux/cmake_install.cmake new file mode 100644 index 00000000..fe7a6118 --- /dev/null +++ b/build-linux/cmake_install.cmake @@ -0,0 +1,95 @@ +# Install script for directory: /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6 + +# Set the install prefix +if(NOT DEFINED CMAKE_INSTALL_PREFIX) + set(CMAKE_INSTALL_PREFIX "/usr/local") +endif() +string(REGEX REPLACE "/$" "" CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}") + +# Set the install configuration name. +if(NOT DEFINED CMAKE_INSTALL_CONFIG_NAME) + if(BUILD_TYPE) + string(REGEX REPLACE "^[^A-Za-z0-9_]+" "" + CMAKE_INSTALL_CONFIG_NAME "${BUILD_TYPE}") + else() + set(CMAKE_INSTALL_CONFIG_NAME "Release") + endif() + message(STATUS "Install configuration: \"${CMAKE_INSTALL_CONFIG_NAME}\"") +endif() + +# Set the component getting installed. +if(NOT CMAKE_INSTALL_COMPONENT) + if(COMPONENT) + message(STATUS "Install component: \"${COMPONENT}\"") + set(CMAKE_INSTALL_COMPONENT "${COMPONENT}") + else() + set(CMAKE_INSTALL_COMPONENT) + endif() +endif() + +# Install shared libraries without execute permission? +if(NOT DEFINED CMAKE_INSTALL_SO_NO_EXE) + set(CMAKE_INSTALL_SO_NO_EXE "0") +endif() + +# Is this installation the result of a crosscompile? +if(NOT DEFINED CMAKE_CROSSCOMPILING) + set(CMAKE_CROSSCOMPILING "FALSE") +endif() + +# Set path to fallback-tool for dependency-resolution. +if(NOT DEFINED CMAKE_OBJDUMP) + set(CMAKE_OBJDUMP "/usr/bin/objdump") +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + if(EXISTS "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/kassetmanagerqt" AND + NOT IS_SYMLINK "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/kassetmanagerqt") + file(RPATH_CHECK + FILE "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/kassetmanagerqt" + RPATH "\$ORIGIN:\$ORIGIN/../lib64") + endif() + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/bin" TYPE EXECUTABLE FILES "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/kassetmanagerqt") + if(EXISTS "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/kassetmanagerqt" AND + NOT IS_SYMLINK "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/kassetmanagerqt") + file(RPATH_CHANGE + FILE "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/kassetmanagerqt" + OLD_RPATH "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib:" + NEW_RPATH "\$ORIGIN:\$ORIGIN/../lib64") + if(CMAKE_INSTALL_DO_STRIP) + execute_process(COMMAND "/usr/bin/strip" "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/kassetmanagerqt") + endif() + endif() +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/bin" TYPE DIRECTORY FILES "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/../../Icons") +endif() + +if(NOT CMAKE_INSTALL_LOCAL_ONLY) + # Include the install script for the subdirectory. + include("/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/cmake_install.cmake") +endif() + +string(REPLACE ";" "\n" CMAKE_INSTALL_MANIFEST_CONTENT + "${CMAKE_INSTALL_MANIFEST_FILES}") +if(CMAKE_INSTALL_LOCAL_ONLY) + file(WRITE "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/install_local_manifest.txt" + "${CMAKE_INSTALL_MANIFEST_CONTENT}") +endif() +if(CMAKE_INSTALL_COMPONENT) + if(CMAKE_INSTALL_COMPONENT MATCHES "^[a-zA-Z0-9_.+-]+$") + set(CMAKE_INSTALL_MANIFEST "install_manifest_${CMAKE_INSTALL_COMPONENT}.txt") + else() + string(MD5 CMAKE_INST_COMP_HASH "${CMAKE_INSTALL_COMPONENT}") + set(CMAKE_INSTALL_MANIFEST "install_manifest_${CMAKE_INST_COMP_HASH}.txt") + unset(CMAKE_INST_COMP_HASH) + endif() +else() + set(CMAKE_INSTALL_MANIFEST "install_manifest.txt") +endif() + +if(NOT CMAKE_INSTALL_LOCAL_ONLY) + file(WRITE "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/${CMAKE_INSTALL_MANIFEST}" + "${CMAKE_INSTALL_MANIFEST_CONTENT}") +endif() diff --git a/build-linux/install_run/bin/kassetmanagerqt b/build-linux/install_run/bin/kassetmanagerqt new file mode 100755 index 00000000..4ddf56e6 Binary files /dev/null and b/build-linux/install_run/bin/kassetmanagerqt differ diff --git a/build-linux/kassetmanagerqt b/build-linux/kassetmanagerqt new file mode 100755 index 00000000..07eb8e03 Binary files /dev/null and b/build-linux/kassetmanagerqt differ diff --git a/build-linux/kassetmanagerqt_autogen/SVT5AJZPWX/moc_tlrender_player.cpp b/build-linux/kassetmanagerqt_autogen/SVT5AJZPWX/moc_tlrender_player.cpp new file mode 100644 index 00000000..99a9d09e --- /dev/null +++ b/build-linux/kassetmanagerqt_autogen/SVT5AJZPWX/moc_tlrender_player.cpp @@ -0,0 +1,318 @@ +/**************************************************************************** +** Meta object code from reading C++ file 'tlrender_player.h' +** +** Created by: The Qt Meta Object Compiler version 69 (Qt 6.10.3) +** +** WARNING! All changes made in this file will be lost! +*****************************************************************************/ + +#include "../../../native/qt6/src/media/tlrender_player.h" +#include + +#include + +#include + + +#include +#if !defined(Q_MOC_OUTPUT_REVISION) +#error "The header file 'tlrender_player.h' doesn't include ." +#elif Q_MOC_OUTPUT_REVISION != 69 +#error "This file was generated using the moc from 6.10.3. It" +#error "cannot be used with the include files from this version of Qt." +#error "(The moc has changed too much.)" +#endif + +#ifndef Q_CONSTINIT +#define Q_CONSTINIT +#endif + +QT_WARNING_PUSH +QT_WARNING_DISABLE_DEPRECATED +QT_WARNING_DISABLE_GCC("-Wuseless-cast") +namespace { +struct qt_meta_tag_ZN14TLRenderPlayerE_t {}; +} // unnamed namespace + +template <> constexpr inline auto TLRenderPlayer::qt_create_metaobjectdata() +{ + namespace QMC = QtMocConstants; + QtMocHelpers::StringRefStorage qt_stringData { + "TLRenderPlayer", + "videoFramesChanged", + "", + "playbackStateChanged", + "TLRenderPlayer::PlaybackState", + "state", + "positionChanged", + "positionMs", + "durationChanged", + "durationMs", + "currentFrameChanged", + "frameNumber", + "mediaInfoReady", + "TLRenderPlayer::MediaInfo", + "info", + "error", + "errorString", + "endOfStream", + "ocioConfigChanged", + "configPath", + "ocioOptionsChanged", + "colorspacesChanged", + "colorspaces", + "displaysChanged", + "displays", + "viewsChanged", + "views", + "onUpdateTimer", + "PlaybackState", + "Stopped", + "Playing", + "Paused", + "LoopMode", + "Once", + "Loop", + "PingPong" + }; + + QtMocHelpers::UintData qt_methods { + // Signal 'videoFramesChanged' + QtMocHelpers::SignalData(1, 2, QMC::AccessPublic, QMetaType::Void), + // Signal 'playbackStateChanged' + QtMocHelpers::SignalData(3, 2, QMC::AccessPublic, QMetaType::Void, {{ + { 0x80000000 | 4, 5 }, + }}), + // Signal 'positionChanged' + QtMocHelpers::SignalData(6, 2, QMC::AccessPublic, QMetaType::Void, {{ + { QMetaType::LongLong, 7 }, + }}), + // Signal 'durationChanged' + QtMocHelpers::SignalData(8, 2, QMC::AccessPublic, QMetaType::Void, {{ + { QMetaType::LongLong, 9 }, + }}), + // Signal 'currentFrameChanged' + QtMocHelpers::SignalData(10, 2, QMC::AccessPublic, QMetaType::Void, {{ + { QMetaType::LongLong, 11 }, + }}), + // Signal 'mediaInfoReady' + QtMocHelpers::SignalData(12, 2, QMC::AccessPublic, QMetaType::Void, {{ + { 0x80000000 | 13, 14 }, + }}), + // Signal 'error' + QtMocHelpers::SignalData(15, 2, QMC::AccessPublic, QMetaType::Void, {{ + { QMetaType::QString, 16 }, + }}), + // Signal 'endOfStream' + QtMocHelpers::SignalData(17, 2, QMC::AccessPublic, QMetaType::Void), + // Signal 'ocioConfigChanged' + QtMocHelpers::SignalData(18, 2, QMC::AccessPublic, QMetaType::Void, {{ + { QMetaType::QString, 19 }, + }}), + // Signal 'ocioOptionsChanged' + QtMocHelpers::SignalData(20, 2, QMC::AccessPublic, QMetaType::Void), + // Signal 'colorspacesChanged' + QtMocHelpers::SignalData(21, 2, QMC::AccessPublic, QMetaType::Void, {{ + { QMetaType::QStringList, 22 }, + }}), + // Signal 'displaysChanged' + QtMocHelpers::SignalData(23, 2, QMC::AccessPublic, QMetaType::Void, {{ + { QMetaType::QStringList, 24 }, + }}), + // Signal 'viewsChanged' + QtMocHelpers::SignalData(25, 2, QMC::AccessPublic, QMetaType::Void, {{ + { QMetaType::QStringList, 26 }, + }}), + // Slot 'onUpdateTimer' + QtMocHelpers::SlotData(27, 2, QMC::AccessPrivate, QMetaType::Void), + }; + QtMocHelpers::UintData qt_properties { + }; + QtMocHelpers::UintData qt_enums { + // enum 'PlaybackState' + QtMocHelpers::EnumData(28, 28, QMC::EnumIsScoped).add({ + { 29, PlaybackState::Stopped }, + { 30, PlaybackState::Playing }, + { 31, PlaybackState::Paused }, + }), + // enum 'LoopMode' + QtMocHelpers::EnumData(32, 32, QMC::EnumIsScoped).add({ + { 33, LoopMode::Once }, + { 34, LoopMode::Loop }, + { 35, LoopMode::PingPong }, + }), + }; + return QtMocHelpers::metaObjectData(QMC::MetaObjectFlag{}, qt_stringData, + qt_methods, qt_properties, qt_enums); +} +Q_CONSTINIT const QMetaObject TLRenderPlayer::staticMetaObject = { { + QMetaObject::SuperData::link(), + qt_staticMetaObjectStaticContent.stringdata, + qt_staticMetaObjectStaticContent.data, + qt_static_metacall, + nullptr, + qt_staticMetaObjectRelocatingContent.metaTypes, + nullptr +} }; + +void TLRenderPlayer::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) +{ + auto *_t = static_cast(_o); + if (_c == QMetaObject::InvokeMetaMethod) { + switch (_id) { + case 0: _t->videoFramesChanged(); break; + case 1: _t->playbackStateChanged((*reinterpret_cast>(_a[1]))); break; + case 2: _t->positionChanged((*reinterpret_cast>(_a[1]))); break; + case 3: _t->durationChanged((*reinterpret_cast>(_a[1]))); break; + case 4: _t->currentFrameChanged((*reinterpret_cast>(_a[1]))); break; + case 5: _t->mediaInfoReady((*reinterpret_cast>(_a[1]))); break; + case 6: _t->error((*reinterpret_cast>(_a[1]))); break; + case 7: _t->endOfStream(); break; + case 8: _t->ocioConfigChanged((*reinterpret_cast>(_a[1]))); break; + case 9: _t->ocioOptionsChanged(); break; + case 10: _t->colorspacesChanged((*reinterpret_cast>(_a[1]))); break; + case 11: _t->displaysChanged((*reinterpret_cast>(_a[1]))); break; + case 12: _t->viewsChanged((*reinterpret_cast>(_a[1]))); break; + case 13: _t->onUpdateTimer(); break; + default: ; + } + } + if (_c == QMetaObject::IndexOfMethod) { + if (QtMocHelpers::indexOfMethod(_a, &TLRenderPlayer::videoFramesChanged, 0)) + return; + if (QtMocHelpers::indexOfMethod(_a, &TLRenderPlayer::playbackStateChanged, 1)) + return; + if (QtMocHelpers::indexOfMethod(_a, &TLRenderPlayer::positionChanged, 2)) + return; + if (QtMocHelpers::indexOfMethod(_a, &TLRenderPlayer::durationChanged, 3)) + return; + if (QtMocHelpers::indexOfMethod(_a, &TLRenderPlayer::currentFrameChanged, 4)) + return; + if (QtMocHelpers::indexOfMethod(_a, &TLRenderPlayer::mediaInfoReady, 5)) + return; + if (QtMocHelpers::indexOfMethod(_a, &TLRenderPlayer::error, 6)) + return; + if (QtMocHelpers::indexOfMethod(_a, &TLRenderPlayer::endOfStream, 7)) + return; + if (QtMocHelpers::indexOfMethod(_a, &TLRenderPlayer::ocioConfigChanged, 8)) + return; + if (QtMocHelpers::indexOfMethod(_a, &TLRenderPlayer::ocioOptionsChanged, 9)) + return; + if (QtMocHelpers::indexOfMethod(_a, &TLRenderPlayer::colorspacesChanged, 10)) + return; + if (QtMocHelpers::indexOfMethod(_a, &TLRenderPlayer::displaysChanged, 11)) + return; + if (QtMocHelpers::indexOfMethod(_a, &TLRenderPlayer::viewsChanged, 12)) + return; + } +} + +const QMetaObject *TLRenderPlayer::metaObject() const +{ + return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject; +} + +void *TLRenderPlayer::qt_metacast(const char *_clname) +{ + if (!_clname) return nullptr; + if (!strcmp(_clname, qt_staticMetaObjectStaticContent.strings)) + return static_cast(this); + return QObject::qt_metacast(_clname); +} + +int TLRenderPlayer::qt_metacall(QMetaObject::Call _c, int _id, void **_a) +{ + _id = QObject::qt_metacall(_c, _id, _a); + if (_id < 0) + return _id; + if (_c == QMetaObject::InvokeMetaMethod) { + if (_id < 14) + qt_static_metacall(this, _c, _id, _a); + _id -= 14; + } + if (_c == QMetaObject::RegisterMethodArgumentMetaType) { + if (_id < 14) + *reinterpret_cast(_a[0]) = QMetaType(); + _id -= 14; + } + return _id; +} + +// SIGNAL 0 +void TLRenderPlayer::videoFramesChanged() +{ + QMetaObject::activate(this, &staticMetaObject, 0, nullptr); +} + +// SIGNAL 1 +void TLRenderPlayer::playbackStateChanged(TLRenderPlayer::PlaybackState _t1) +{ + QMetaObject::activate(this, &staticMetaObject, 1, nullptr, _t1); +} + +// SIGNAL 2 +void TLRenderPlayer::positionChanged(qint64 _t1) +{ + QMetaObject::activate(this, &staticMetaObject, 2, nullptr, _t1); +} + +// SIGNAL 3 +void TLRenderPlayer::durationChanged(qint64 _t1) +{ + QMetaObject::activate(this, &staticMetaObject, 3, nullptr, _t1); +} + +// SIGNAL 4 +void TLRenderPlayer::currentFrameChanged(qint64 _t1) +{ + QMetaObject::activate(this, &staticMetaObject, 4, nullptr, _t1); +} + +// SIGNAL 5 +void TLRenderPlayer::mediaInfoReady(const TLRenderPlayer::MediaInfo & _t1) +{ + QMetaObject::activate(this, &staticMetaObject, 5, nullptr, _t1); +} + +// SIGNAL 6 +void TLRenderPlayer::error(const QString & _t1) +{ + QMetaObject::activate(this, &staticMetaObject, 6, nullptr, _t1); +} + +// SIGNAL 7 +void TLRenderPlayer::endOfStream() +{ + QMetaObject::activate(this, &staticMetaObject, 7, nullptr); +} + +// SIGNAL 8 +void TLRenderPlayer::ocioConfigChanged(const QString & _t1) +{ + QMetaObject::activate(this, &staticMetaObject, 8, nullptr, _t1); +} + +// SIGNAL 9 +void TLRenderPlayer::ocioOptionsChanged() +{ + QMetaObject::activate(this, &staticMetaObject, 9, nullptr); +} + +// SIGNAL 10 +void TLRenderPlayer::colorspacesChanged(const QStringList & _t1) +{ + QMetaObject::activate(this, &staticMetaObject, 10, nullptr, _t1); +} + +// SIGNAL 11 +void TLRenderPlayer::displaysChanged(const QStringList & _t1) +{ + QMetaObject::activate(this, &staticMetaObject, 11, nullptr, _t1); +} + +// SIGNAL 12 +void TLRenderPlayer::viewsChanged(const QStringList & _t1) +{ + QMetaObject::activate(this, &staticMetaObject, 12, nullptr, _t1); +} +QT_WARNING_POP diff --git a/build-linux/kassetmanagerqt_autogen/SVT5AJZPWX/moc_tlrender_viewport.cpp b/build-linux/kassetmanagerqt_autogen/SVT5AJZPWX/moc_tlrender_viewport.cpp new file mode 100644 index 00000000..7c59f4e1 --- /dev/null +++ b/build-linux/kassetmanagerqt_autogen/SVT5AJZPWX/moc_tlrender_viewport.cpp @@ -0,0 +1,146 @@ +/**************************************************************************** +** Meta object code from reading C++ file 'tlrender_viewport.h' +** +** Created by: The Qt Meta Object Compiler version 69 (Qt 6.10.3) +** +** WARNING! All changes made in this file will be lost! +*****************************************************************************/ + +#include "../../../native/qt6/src/media/tlrender_viewport.h" +#include +#include + +#include + +#include + + +#include +#if !defined(Q_MOC_OUTPUT_REVISION) +#error "The header file 'tlrender_viewport.h' doesn't include ." +#elif Q_MOC_OUTPUT_REVISION != 69 +#error "This file was generated using the moc from 6.10.3. It" +#error "cannot be used with the include files from this version of Qt." +#error "(The moc has changed too much.)" +#endif + +#ifndef Q_CONSTINIT +#define Q_CONSTINIT +#endif + +QT_WARNING_PUSH +QT_WARNING_DISABLE_DEPRECATED +QT_WARNING_DISABLE_GCC("-Wuseless-cast") +namespace { +struct qt_meta_tag_ZN16TLRenderViewportE_t {}; +} // unnamed namespace + +template <> constexpr inline auto TLRenderViewport::qt_create_metaobjectdata() +{ + namespace QMC = QtMocConstants; + QtMocHelpers::StringRefStorage qt_stringData { + "TLRenderViewport", + "fpsChanged", + "", + "fps", + "frameRendered", + "onMediaLoaded", + "TLRenderPlayer::MediaInfo", + "info", + "updateRasterFrame" + }; + + QtMocHelpers::UintData qt_methods { + // Signal 'fpsChanged' + QtMocHelpers::SignalData(1, 2, QMC::AccessPublic, QMetaType::Void, {{ + { QMetaType::Double, 3 }, + }}), + // Signal 'frameRendered' + QtMocHelpers::SignalData(4, 2, QMC::AccessPublic, QMetaType::Void), + // Slot 'onMediaLoaded' + QtMocHelpers::SlotData(5, 2, QMC::AccessPrivate, QMetaType::Void, {{ + { 0x80000000 | 6, 7 }, + }}), + // Slot 'updateRasterFrame' + QtMocHelpers::SlotData(8, 2, QMC::AccessPrivate, QMetaType::Void), + }; + QtMocHelpers::UintData qt_properties { + }; + QtMocHelpers::UintData qt_enums { + }; + return QtMocHelpers::metaObjectData(QMC::MetaObjectFlag{}, qt_stringData, + qt_methods, qt_properties, qt_enums); +} +Q_CONSTINIT const QMetaObject TLRenderViewport::staticMetaObject = { { + QMetaObject::SuperData::link(), + qt_staticMetaObjectStaticContent.stringdata, + qt_staticMetaObjectStaticContent.data, + qt_static_metacall, + nullptr, + qt_staticMetaObjectRelocatingContent.metaTypes, + nullptr +} }; + +void TLRenderViewport::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) +{ + auto *_t = static_cast(_o); + if (_c == QMetaObject::InvokeMetaMethod) { + switch (_id) { + case 0: _t->fpsChanged((*reinterpret_cast>(_a[1]))); break; + case 1: _t->frameRendered(); break; + case 2: _t->onMediaLoaded((*reinterpret_cast>(_a[1]))); break; + case 3: _t->updateRasterFrame(); break; + default: ; + } + } + if (_c == QMetaObject::IndexOfMethod) { + if (QtMocHelpers::indexOfMethod(_a, &TLRenderViewport::fpsChanged, 0)) + return; + if (QtMocHelpers::indexOfMethod(_a, &TLRenderViewport::frameRendered, 1)) + return; + } +} + +const QMetaObject *TLRenderViewport::metaObject() const +{ + return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject; +} + +void *TLRenderViewport::qt_metacast(const char *_clname) +{ + if (!_clname) return nullptr; + if (!strcmp(_clname, qt_staticMetaObjectStaticContent.strings)) + return static_cast(this); + return QWidget::qt_metacast(_clname); +} + +int TLRenderViewport::qt_metacall(QMetaObject::Call _c, int _id, void **_a) +{ + _id = QWidget::qt_metacall(_c, _id, _a); + if (_id < 0) + return _id; + if (_c == QMetaObject::InvokeMetaMethod) { + if (_id < 4) + qt_static_metacall(this, _c, _id, _a); + _id -= 4; + } + if (_c == QMetaObject::RegisterMethodArgumentMetaType) { + if (_id < 4) + *reinterpret_cast(_a[0]) = QMetaType(); + _id -= 4; + } + return _id; +} + +// SIGNAL 0 +void TLRenderViewport::fpsChanged(double _t1) +{ + QMetaObject::activate(this, &staticMetaObject, 0, nullptr, _t1); +} + +// SIGNAL 1 +void TLRenderViewport::frameRendered() +{ + QMetaObject::activate(this, &staticMetaObject, 1, nullptr); +} +QT_WARNING_POP diff --git a/build-linux/kassetmanagerqt_autogen/SVT5AJZPWX/moc_tlrender_widget.cpp b/build-linux/kassetmanagerqt_autogen/SVT5AJZPWX/moc_tlrender_widget.cpp new file mode 100644 index 00000000..27e080e2 --- /dev/null +++ b/build-linux/kassetmanagerqt_autogen/SVT5AJZPWX/moc_tlrender_widget.cpp @@ -0,0 +1,172 @@ +/**************************************************************************** +** Meta object code from reading C++ file 'tlrender_widget.h' +** +** Created by: The Qt Meta Object Compiler version 69 (Qt 6.10.3) +** +** WARNING! All changes made in this file will be lost! +*****************************************************************************/ + +#include "../../../native/qt6/src/media/tlrender_widget.h" +#include + +#include + +#include + + +#include +#if !defined(Q_MOC_OUTPUT_REVISION) +#error "The header file 'tlrender_widget.h' doesn't include ." +#elif Q_MOC_OUTPUT_REVISION != 69 +#error "This file was generated using the moc from 6.10.3. It" +#error "cannot be used with the include files from this version of Qt." +#error "(The moc has changed too much.)" +#endif + +#ifndef Q_CONSTINIT +#define Q_CONSTINIT +#endif + +QT_WARNING_PUSH +QT_WARNING_DISABLE_DEPRECATED +QT_WARNING_DISABLE_GCC("-Wuseless-cast") +namespace { +struct qt_meta_tag_ZN14TLRenderWidgetE_t {}; +} // unnamed namespace + +template <> constexpr inline auto TLRenderWidget::qt_create_metaobjectdata() +{ + namespace QMC = QtMocConstants; + QtMocHelpers::StringRefStorage qt_stringData { + "TLRenderWidget", + "videoSizeChanged", + "", + "QSize", + "size", + "frameRendered", + "renderError", + "error", + "onRenderTimer", + "onPlayerPositionChanged", + "position", + "FitMode", + "Fit", + "Fill", + "OneToOne" + }; + + QtMocHelpers::UintData qt_methods { + // Signal 'videoSizeChanged' + QtMocHelpers::SignalData(1, 2, QMC::AccessPublic, QMetaType::Void, {{ + { 0x80000000 | 3, 4 }, + }}), + // Signal 'frameRendered' + QtMocHelpers::SignalData(5, 2, QMC::AccessPublic, QMetaType::Void), + // Signal 'renderError' + QtMocHelpers::SignalData(6, 2, QMC::AccessPublic, QMetaType::Void, {{ + { QMetaType::QString, 7 }, + }}), + // Slot 'onRenderTimer' + QtMocHelpers::SlotData(8, 2, QMC::AccessPrivate, QMetaType::Void), + // Slot 'onPlayerPositionChanged' + QtMocHelpers::SlotData(9, 2, QMC::AccessPrivate, QMetaType::Void, {{ + { QMetaType::LongLong, 10 }, + }}), + }; + QtMocHelpers::UintData qt_properties { + }; + QtMocHelpers::UintData qt_enums { + // enum 'FitMode' + QtMocHelpers::EnumData(11, 11, QMC::EnumIsScoped).add({ + { 12, FitMode::Fit }, + { 13, FitMode::Fill }, + { 14, FitMode::OneToOne }, + }), + }; + return QtMocHelpers::metaObjectData(QMC::MetaObjectFlag{}, qt_stringData, + qt_methods, qt_properties, qt_enums); +} +Q_CONSTINIT const QMetaObject TLRenderWidget::staticMetaObject = { { + QMetaObject::SuperData::link(), + qt_staticMetaObjectStaticContent.stringdata, + qt_staticMetaObjectStaticContent.data, + qt_static_metacall, + nullptr, + qt_staticMetaObjectRelocatingContent.metaTypes, + nullptr +} }; + +void TLRenderWidget::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) +{ + auto *_t = static_cast(_o); + if (_c == QMetaObject::InvokeMetaMethod) { + switch (_id) { + case 0: _t->videoSizeChanged((*reinterpret_cast>(_a[1]))); break; + case 1: _t->frameRendered(); break; + case 2: _t->renderError((*reinterpret_cast>(_a[1]))); break; + case 3: _t->onRenderTimer(); break; + case 4: _t->onPlayerPositionChanged((*reinterpret_cast>(_a[1]))); break; + default: ; + } + } + if (_c == QMetaObject::IndexOfMethod) { + if (QtMocHelpers::indexOfMethod(_a, &TLRenderWidget::videoSizeChanged, 0)) + return; + if (QtMocHelpers::indexOfMethod(_a, &TLRenderWidget::frameRendered, 1)) + return; + if (QtMocHelpers::indexOfMethod(_a, &TLRenderWidget::renderError, 2)) + return; + } +} + +const QMetaObject *TLRenderWidget::metaObject() const +{ + return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject; +} + +void *TLRenderWidget::qt_metacast(const char *_clname) +{ + if (!_clname) return nullptr; + if (!strcmp(_clname, qt_staticMetaObjectStaticContent.strings)) + return static_cast(this); + if (!strcmp(_clname, "QOpenGLFunctions_4_1_Core")) + return static_cast< QOpenGLFunctions_4_1_Core*>(this); + return QOpenGLWidget::qt_metacast(_clname); +} + +int TLRenderWidget::qt_metacall(QMetaObject::Call _c, int _id, void **_a) +{ + _id = QOpenGLWidget::qt_metacall(_c, _id, _a); + if (_id < 0) + return _id; + if (_c == QMetaObject::InvokeMetaMethod) { + if (_id < 5) + qt_static_metacall(this, _c, _id, _a); + _id -= 5; + } + if (_c == QMetaObject::RegisterMethodArgumentMetaType) { + if (_id < 5) + *reinterpret_cast(_a[0]) = QMetaType(); + _id -= 5; + } + return _id; +} + +// SIGNAL 0 +void TLRenderWidget::videoSizeChanged(const QSize & _t1) +{ + QMetaObject::activate(this, &staticMetaObject, 0, nullptr, _t1); +} + +// SIGNAL 1 +void TLRenderWidget::frameRendered() +{ + QMetaObject::activate(this, &staticMetaObject, 1, nullptr); +} + +// SIGNAL 2 +void TLRenderWidget::renderError(const QString & _t1) +{ + QMetaObject::activate(this, &staticMetaObject, 2, nullptr, _t1); +} +QT_WARNING_POP diff --git a/build-linux/kassetmanagerqt_autogen/UVLADIE3JM/moc_annotation_layer.cpp b/build-linux/kassetmanagerqt_autogen/UVLADIE3JM/moc_annotation_layer.cpp new file mode 100644 index 00000000..a2e38f94 --- /dev/null +++ b/build-linux/kassetmanagerqt_autogen/UVLADIE3JM/moc_annotation_layer.cpp @@ -0,0 +1,162 @@ +/**************************************************************************** +** Meta object code from reading C++ file 'annotation_layer.h' +** +** Created by: The Qt Meta Object Compiler version 69 (Qt 6.10.3) +** +** WARNING! All changes made in this file will be lost! +*****************************************************************************/ + +#include "../../../native/qt6/src/annotation_layer.h" +#include + +#include + +#include + + +#include +#if !defined(Q_MOC_OUTPUT_REVISION) +#error "The header file 'annotation_layer.h' doesn't include ." +#elif Q_MOC_OUTPUT_REVISION != 69 +#error "This file was generated using the moc from 6.10.3. It" +#error "cannot be used with the include files from this version of Qt." +#error "(The moc has changed too much.)" +#endif + +#ifndef Q_CONSTINIT +#define Q_CONSTINIT +#endif + +QT_WARNING_PUSH +QT_WARNING_DISABLE_DEPRECATED +QT_WARNING_DISABLE_GCC("-Wuseless-cast") +namespace { +struct qt_meta_tag_ZN15AnnotationLayerE_t {}; +} // unnamed namespace + +template <> constexpr inline auto AnnotationLayer::qt_create_metaobjectdata() +{ + namespace QMC = QtMocConstants; + QtMocHelpers::StringRefStorage qt_stringData { + "AnnotationLayer", + "annotationAdded", + "", + "AnnotationItem*", + "item", + "annotationRemoved", + "annotationsCleared", + "selectionChanged" + }; + + QtMocHelpers::UintData qt_methods { + // Signal 'annotationAdded' + QtMocHelpers::SignalData(1, 2, QMC::AccessPublic, QMetaType::Void, {{ + { 0x80000000 | 3, 4 }, + }}), + // Signal 'annotationRemoved' + QtMocHelpers::SignalData(5, 2, QMC::AccessPublic, QMetaType::Void, {{ + { 0x80000000 | 3, 4 }, + }}), + // Signal 'annotationsCleared' + QtMocHelpers::SignalData(6, 2, QMC::AccessPublic, QMetaType::Void), + // Signal 'selectionChanged' + QtMocHelpers::SignalData(7, 2, QMC::AccessPublic, QMetaType::Void, {{ + { 0x80000000 | 3, 4 }, + }}), + }; + QtMocHelpers::UintData qt_properties { + }; + QtMocHelpers::UintData qt_enums { + }; + return QtMocHelpers::metaObjectData(QMC::MetaObjectFlag{}, qt_stringData, + qt_methods, qt_properties, qt_enums); +} +Q_CONSTINIT const QMetaObject AnnotationLayer::staticMetaObject = { { + QMetaObject::SuperData::link(), + qt_staticMetaObjectStaticContent.stringdata, + qt_staticMetaObjectStaticContent.data, + qt_static_metacall, + nullptr, + qt_staticMetaObjectRelocatingContent.metaTypes, + nullptr +} }; + +void AnnotationLayer::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) +{ + auto *_t = static_cast(_o); + if (_c == QMetaObject::InvokeMetaMethod) { + switch (_id) { + case 0: _t->annotationAdded((*reinterpret_cast>(_a[1]))); break; + case 1: _t->annotationRemoved((*reinterpret_cast>(_a[1]))); break; + case 2: _t->annotationsCleared(); break; + case 3: _t->selectionChanged((*reinterpret_cast>(_a[1]))); break; + default: ; + } + } + if (_c == QMetaObject::IndexOfMethod) { + if (QtMocHelpers::indexOfMethod(_a, &AnnotationLayer::annotationAdded, 0)) + return; + if (QtMocHelpers::indexOfMethod(_a, &AnnotationLayer::annotationRemoved, 1)) + return; + if (QtMocHelpers::indexOfMethod(_a, &AnnotationLayer::annotationsCleared, 2)) + return; + if (QtMocHelpers::indexOfMethod(_a, &AnnotationLayer::selectionChanged, 3)) + return; + } +} + +const QMetaObject *AnnotationLayer::metaObject() const +{ + return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject; +} + +void *AnnotationLayer::qt_metacast(const char *_clname) +{ + if (!_clname) return nullptr; + if (!strcmp(_clname, qt_staticMetaObjectStaticContent.strings)) + return static_cast(this); + return QObject::qt_metacast(_clname); +} + +int AnnotationLayer::qt_metacall(QMetaObject::Call _c, int _id, void **_a) +{ + _id = QObject::qt_metacall(_c, _id, _a); + if (_id < 0) + return _id; + if (_c == QMetaObject::InvokeMetaMethod) { + if (_id < 4) + qt_static_metacall(this, _c, _id, _a); + _id -= 4; + } + if (_c == QMetaObject::RegisterMethodArgumentMetaType) { + if (_id < 4) + *reinterpret_cast(_a[0]) = QMetaType(); + _id -= 4; + } + return _id; +} + +// SIGNAL 0 +void AnnotationLayer::annotationAdded(AnnotationItem * _t1) +{ + QMetaObject::activate(this, &staticMetaObject, 0, nullptr, _t1); +} + +// SIGNAL 1 +void AnnotationLayer::annotationRemoved(AnnotationItem * _t1) +{ + QMetaObject::activate(this, &staticMetaObject, 1, nullptr, _t1); +} + +// SIGNAL 2 +void AnnotationLayer::annotationsCleared() +{ + QMetaObject::activate(this, &staticMetaObject, 2, nullptr); +} + +// SIGNAL 3 +void AnnotationLayer::selectionChanged(AnnotationItem * _t1) +{ + QMetaObject::activate(this, &staticMetaObject, 3, nullptr, _t1); +} +QT_WARNING_POP diff --git a/build-linux/kassetmanagerqt_autogen/UVLADIE3JM/moc_asset_grid_view.cpp b/build-linux/kassetmanagerqt_autogen/UVLADIE3JM/moc_asset_grid_view.cpp new file mode 100644 index 00000000..a62a2f7b --- /dev/null +++ b/build-linux/kassetmanagerqt_autogen/UVLADIE3JM/moc_asset_grid_view.cpp @@ -0,0 +1,90 @@ +/**************************************************************************** +** Meta object code from reading C++ file 'asset_grid_view.h' +** +** Created by: The Qt Meta Object Compiler version 69 (Qt 6.10.3) +** +** WARNING! All changes made in this file will be lost! +*****************************************************************************/ + +#include "../../../native/qt6/src/asset_grid_view.h" +#include + +#include + +#include + + +#include +#if !defined(Q_MOC_OUTPUT_REVISION) +#error "The header file 'asset_grid_view.h' doesn't include ." +#elif Q_MOC_OUTPUT_REVISION != 69 +#error "This file was generated using the moc from 6.10.3. It" +#error "cannot be used with the include files from this version of Qt." +#error "(The moc has changed too much.)" +#endif + +#ifndef Q_CONSTINIT +#define Q_CONSTINIT +#endif + +QT_WARNING_PUSH +QT_WARNING_DISABLE_DEPRECATED +QT_WARNING_DISABLE_GCC("-Wuseless-cast") +namespace { +struct qt_meta_tag_ZN13AssetGridViewE_t {}; +} // unnamed namespace + +template <> constexpr inline auto AssetGridView::qt_create_metaobjectdata() +{ + namespace QMC = QtMocConstants; + QtMocHelpers::StringRefStorage qt_stringData { + "AssetGridView" + }; + + QtMocHelpers::UintData qt_methods { + }; + QtMocHelpers::UintData qt_properties { + }; + QtMocHelpers::UintData qt_enums { + }; + return QtMocHelpers::metaObjectData(QMC::MetaObjectFlag{}, qt_stringData, + qt_methods, qt_properties, qt_enums); +} +Q_CONSTINIT const QMetaObject AssetGridView::staticMetaObject = { { + QMetaObject::SuperData::link(), + qt_staticMetaObjectStaticContent.stringdata, + qt_staticMetaObjectStaticContent.data, + qt_static_metacall, + nullptr, + qt_staticMetaObjectRelocatingContent.metaTypes, + nullptr +} }; + +void AssetGridView::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) +{ + auto *_t = static_cast(_o); + (void)_t; + (void)_c; + (void)_id; + (void)_a; +} + +const QMetaObject *AssetGridView::metaObject() const +{ + return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject; +} + +void *AssetGridView::qt_metacast(const char *_clname) +{ + if (!_clname) return nullptr; + if (!strcmp(_clname, qt_staticMetaObjectStaticContent.strings)) + return static_cast(this); + return QListView::qt_metacast(_clname); +} + +int AssetGridView::qt_metacall(QMetaObject::Call _c, int _id, void **_a) +{ + _id = QListView::qt_metacall(_c, _id, _a); + return _id; +} +QT_WARNING_POP diff --git a/build-linux/kassetmanagerqt_autogen/UVLADIE3JM/moc_asset_item_delegate.cpp b/build-linux/kassetmanagerqt_autogen/UVLADIE3JM/moc_asset_item_delegate.cpp new file mode 100644 index 00000000..fd1a41a1 --- /dev/null +++ b/build-linux/kassetmanagerqt_autogen/UVLADIE3JM/moc_asset_item_delegate.cpp @@ -0,0 +1,90 @@ +/**************************************************************************** +** Meta object code from reading C++ file 'asset_item_delegate.h' +** +** Created by: The Qt Meta Object Compiler version 69 (Qt 6.10.3) +** +** WARNING! All changes made in this file will be lost! +*****************************************************************************/ + +#include "../../../native/qt6/src/asset_item_delegate.h" +#include + +#include + +#include + + +#include +#if !defined(Q_MOC_OUTPUT_REVISION) +#error "The header file 'asset_item_delegate.h' doesn't include ." +#elif Q_MOC_OUTPUT_REVISION != 69 +#error "This file was generated using the moc from 6.10.3. It" +#error "cannot be used with the include files from this version of Qt." +#error "(The moc has changed too much.)" +#endif + +#ifndef Q_CONSTINIT +#define Q_CONSTINIT +#endif + +QT_WARNING_PUSH +QT_WARNING_DISABLE_DEPRECATED +QT_WARNING_DISABLE_GCC("-Wuseless-cast") +namespace { +struct qt_meta_tag_ZN17AssetItemDelegateE_t {}; +} // unnamed namespace + +template <> constexpr inline auto AssetItemDelegate::qt_create_metaobjectdata() +{ + namespace QMC = QtMocConstants; + QtMocHelpers::StringRefStorage qt_stringData { + "AssetItemDelegate" + }; + + QtMocHelpers::UintData qt_methods { + }; + QtMocHelpers::UintData qt_properties { + }; + QtMocHelpers::UintData qt_enums { + }; + return QtMocHelpers::metaObjectData(QMC::MetaObjectFlag{}, qt_stringData, + qt_methods, qt_properties, qt_enums); +} +Q_CONSTINIT const QMetaObject AssetItemDelegate::staticMetaObject = { { + QMetaObject::SuperData::link(), + qt_staticMetaObjectStaticContent.stringdata, + qt_staticMetaObjectStaticContent.data, + qt_static_metacall, + nullptr, + qt_staticMetaObjectRelocatingContent.metaTypes, + nullptr +} }; + +void AssetItemDelegate::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) +{ + auto *_t = static_cast(_o); + (void)_t; + (void)_c; + (void)_id; + (void)_a; +} + +const QMetaObject *AssetItemDelegate::metaObject() const +{ + return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject; +} + +void *AssetItemDelegate::qt_metacast(const char *_clname) +{ + if (!_clname) return nullptr; + if (!strcmp(_clname, qt_staticMetaObjectStaticContent.strings)) + return static_cast(this); + return QStyledItemDelegate::qt_metacast(_clname); +} + +int AssetItemDelegate::qt_metacall(QMetaObject::Call _c, int _id, void **_a) +{ + _id = QStyledItemDelegate::qt_metacall(_c, _id, _a); + return _id; +} +QT_WARNING_POP diff --git a/build-linux/kassetmanagerqt_autogen/UVLADIE3JM/moc_asset_sequence_grouping_proxy_model.cpp b/build-linux/kassetmanagerqt_autogen/UVLADIE3JM/moc_asset_sequence_grouping_proxy_model.cpp new file mode 100644 index 00000000..6997e886 --- /dev/null +++ b/build-linux/kassetmanagerqt_autogen/UVLADIE3JM/moc_asset_sequence_grouping_proxy_model.cpp @@ -0,0 +1,90 @@ +/**************************************************************************** +** Meta object code from reading C++ file 'asset_sequence_grouping_proxy_model.h' +** +** Created by: The Qt Meta Object Compiler version 69 (Qt 6.10.3) +** +** WARNING! All changes made in this file will be lost! +*****************************************************************************/ + +#include "../../../native/qt6/src/asset_sequence_grouping_proxy_model.h" +#include + +#include + +#include + + +#include +#if !defined(Q_MOC_OUTPUT_REVISION) +#error "The header file 'asset_sequence_grouping_proxy_model.h' doesn't include ." +#elif Q_MOC_OUTPUT_REVISION != 69 +#error "This file was generated using the moc from 6.10.3. It" +#error "cannot be used with the include files from this version of Qt." +#error "(The moc has changed too much.)" +#endif + +#ifndef Q_CONSTINIT +#define Q_CONSTINIT +#endif + +QT_WARNING_PUSH +QT_WARNING_DISABLE_DEPRECATED +QT_WARNING_DISABLE_GCC("-Wuseless-cast") +namespace { +struct qt_meta_tag_ZN31AssetSequenceGroupingProxyModelE_t {}; +} // unnamed namespace + +template <> constexpr inline auto AssetSequenceGroupingProxyModel::qt_create_metaobjectdata() +{ + namespace QMC = QtMocConstants; + QtMocHelpers::StringRefStorage qt_stringData { + "AssetSequenceGroupingProxyModel" + }; + + QtMocHelpers::UintData qt_methods { + }; + QtMocHelpers::UintData qt_properties { + }; + QtMocHelpers::UintData qt_enums { + }; + return QtMocHelpers::metaObjectData(QMC::MetaObjectFlag{}, qt_stringData, + qt_methods, qt_properties, qt_enums); +} +Q_CONSTINIT const QMetaObject AssetSequenceGroupingProxyModel::staticMetaObject = { { + QMetaObject::SuperData::link(), + qt_staticMetaObjectStaticContent.stringdata, + qt_staticMetaObjectStaticContent.data, + qt_static_metacall, + nullptr, + qt_staticMetaObjectRelocatingContent.metaTypes, + nullptr +} }; + +void AssetSequenceGroupingProxyModel::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) +{ + auto *_t = static_cast(_o); + (void)_t; + (void)_c; + (void)_id; + (void)_a; +} + +const QMetaObject *AssetSequenceGroupingProxyModel::metaObject() const +{ + return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject; +} + +void *AssetSequenceGroupingProxyModel::qt_metacast(const char *_clname) +{ + if (!_clname) return nullptr; + if (!strcmp(_clname, qt_staticMetaObjectStaticContent.strings)) + return static_cast(this); + return QAbstractProxyModel::qt_metacast(_clname); +} + +int AssetSequenceGroupingProxyModel::qt_metacall(QMetaObject::Call _c, int _id, void **_a) +{ + _id = QAbstractProxyModel::qt_metacall(_c, _id, _a); + return _id; +} +QT_WARNING_POP diff --git a/build-linux/kassetmanagerqt_autogen/UVLADIE3JM/moc_assets_model.cpp b/build-linux/kassetmanagerqt_autogen/UVLADIE3JM/moc_assets_model.cpp new file mode 100644 index 00000000..69ba1cf7 --- /dev/null +++ b/build-linux/kassetmanagerqt_autogen/UVLADIE3JM/moc_assets_model.cpp @@ -0,0 +1,342 @@ +/**************************************************************************** +** Meta object code from reading C++ file 'assets_model.h' +** +** Created by: The Qt Meta Object Compiler version 69 (Qt 6.10.3) +** +** WARNING! All changes made in this file will be lost! +*****************************************************************************/ + +#include "../../../native/qt6/src/assets_model.h" +#include + +#include + +#include + + +#include +#if !defined(Q_MOC_OUTPUT_REVISION) +#error "The header file 'assets_model.h' doesn't include ." +#elif Q_MOC_OUTPUT_REVISION != 69 +#error "This file was generated using the moc from 6.10.3. It" +#error "cannot be used with the include files from this version of Qt." +#error "(The moc has changed too much.)" +#endif + +#ifndef Q_CONSTINIT +#define Q_CONSTINIT +#endif + +QT_WARNING_PUSH +QT_WARNING_DISABLE_DEPRECATED +QT_WARNING_DISABLE_GCC("-Wuseless-cast") +namespace { +struct qt_meta_tag_ZN11AssetsModelE_t {}; +} // unnamed namespace + +template <> constexpr inline auto AssetsModel::qt_create_metaobjectdata() +{ + namespace QMC = QtMocConstants; + QtMocHelpers::StringRefStorage qt_stringData { + "AssetsModel", + "QML.Element", + "auto", + "folderIdChanged", + "", + "searchQueryChanged", + "typeFilterChanged", + "selectedTagNamesChanged", + "tagFilterModeChanged", + "recursiveModeChanged", + "searchEntireDatabaseChanged", + "tagsChangedForAsset", + "assetId", + "reload", + "onAssetsChangedForFolder", + "folderId", + "triggerDebouncedReload", + "setFilters", + "typeFilter", + "ratingFilter", + "tagNames", + "tagMode", + "moveAssetToFolder", + "moveAssetsToFolder", + "QVariantList", + "assetIds", + "removeAssets", + "setAssetsRating", + "rating", + "assignTags", + "tagIds", + "get", + "QVariantMap", + "row", + "tagsForAsset", + "searchQuery", + "selectedTagNames", + "tagFilterMode", + "recursiveMode", + "searchEntireDatabase" + }; + + QtMocHelpers::UintData qt_methods { + // Signal 'folderIdChanged' + QtMocHelpers::SignalData(3, 4, QMC::AccessPublic, QMetaType::Void), + // Signal 'searchQueryChanged' + QtMocHelpers::SignalData(5, 4, QMC::AccessPublic, QMetaType::Void), + // Signal 'typeFilterChanged' + QtMocHelpers::SignalData(6, 4, QMC::AccessPublic, QMetaType::Void), + // Signal 'selectedTagNamesChanged' + QtMocHelpers::SignalData(7, 4, QMC::AccessPublic, QMetaType::Void), + // Signal 'tagFilterModeChanged' + QtMocHelpers::SignalData(8, 4, QMC::AccessPublic, QMetaType::Void), + // Signal 'recursiveModeChanged' + QtMocHelpers::SignalData(9, 4, QMC::AccessPublic, QMetaType::Void), + // Signal 'searchEntireDatabaseChanged' + QtMocHelpers::SignalData(10, 4, QMC::AccessPublic, QMetaType::Void), + // Signal 'tagsChangedForAsset' + QtMocHelpers::SignalData(11, 4, QMC::AccessPublic, QMetaType::Void, {{ + { QMetaType::Int, 12 }, + }}), + // Slot 'reload' + QtMocHelpers::SlotData(13, 4, QMC::AccessPublic, QMetaType::Void), + // Slot 'onAssetsChangedForFolder' + QtMocHelpers::SlotData(14, 4, QMC::AccessPrivate, QMetaType::Void, {{ + { QMetaType::Int, 15 }, + }}), + // Slot 'triggerDebouncedReload' + QtMocHelpers::SlotData(16, 4, QMC::AccessPrivate, QMetaType::Void), + // Method 'setFilters' + QtMocHelpers::MethodData(17, 4, QMC::AccessPublic, QMetaType::Void, {{ + { QMetaType::Int, 18 }, { QMetaType::Int, 19 }, { QMetaType::QStringList, 20 }, { QMetaType::Int, 21 }, + }}), + // Method 'moveAssetToFolder' + QtMocHelpers::MethodData(22, 4, QMC::AccessPublic, QMetaType::Bool, {{ + { QMetaType::Int, 12 }, { QMetaType::Int, 15 }, + }}), + // Method 'moveAssetsToFolder' + QtMocHelpers::MethodData(23, 4, QMC::AccessPublic, QMetaType::Bool, {{ + { 0x80000000 | 24, 25 }, { QMetaType::Int, 15 }, + }}), + // Method 'removeAssets' + QtMocHelpers::MethodData(26, 4, QMC::AccessPublic, QMetaType::Bool, {{ + { 0x80000000 | 24, 25 }, + }}), + // Method 'setAssetsRating' + QtMocHelpers::MethodData(27, 4, QMC::AccessPublic, QMetaType::Bool, {{ + { 0x80000000 | 24, 25 }, { QMetaType::Int, 28 }, + }}), + // Method 'assignTags' + QtMocHelpers::MethodData(29, 4, QMC::AccessPublic, QMetaType::Bool, {{ + { 0x80000000 | 24, 25 }, { 0x80000000 | 24, 30 }, + }}), + // Method 'get' + QtMocHelpers::MethodData(31, 4, QMC::AccessPublic, 0x80000000 | 32, {{ + { QMetaType::Int, 33 }, + }}), + // Method 'tagsForAsset' + QtMocHelpers::MethodData(34, 4, QMC::AccessPublic, QMetaType::QStringList, {{ + { QMetaType::Int, 12 }, + }}), + }; + QtMocHelpers::UintData qt_properties { + // property 'folderId' + QtMocHelpers::PropertyData(15, QMetaType::Int, QMC::DefaultPropertyFlags | QMC::Writable | QMC::StdCppSet, 0), + // property 'searchQuery' + QtMocHelpers::PropertyData(35, QMetaType::QString, QMC::DefaultPropertyFlags | QMC::Writable | QMC::StdCppSet, 1), + // property 'typeFilter' + QtMocHelpers::PropertyData(18, QMetaType::Int, QMC::DefaultPropertyFlags | QMC::Writable | QMC::StdCppSet, 2), + // property 'selectedTagNames' + QtMocHelpers::PropertyData(36, QMetaType::QStringList, QMC::DefaultPropertyFlags | QMC::Writable | QMC::StdCppSet, 3), + // property 'tagFilterMode' + QtMocHelpers::PropertyData(37, QMetaType::Int, QMC::DefaultPropertyFlags | QMC::Writable | QMC::StdCppSet, 4), + // property 'recursiveMode' + QtMocHelpers::PropertyData(38, QMetaType::Bool, QMC::DefaultPropertyFlags | QMC::Writable | QMC::StdCppSet, 5), + // property 'searchEntireDatabase' + QtMocHelpers::PropertyData(39, QMetaType::Bool, QMC::DefaultPropertyFlags | QMC::Writable | QMC::StdCppSet, 6), + }; + QtMocHelpers::UintData qt_enums { + }; + QtMocHelpers::UintData qt_constructors {}; + QtMocHelpers::ClassInfos qt_classinfo({ + { 1, 2 }, + }); + return QtMocHelpers::metaObjectData(QMC::MetaObjectFlag{}, qt_stringData, + qt_methods, qt_properties, qt_enums, qt_constructors, qt_classinfo); +} +Q_CONSTINIT const QMetaObject AssetsModel::staticMetaObject = { { + QMetaObject::SuperData::link(), + qt_staticMetaObjectStaticContent.stringdata, + qt_staticMetaObjectStaticContent.data, + qt_static_metacall, + nullptr, + qt_staticMetaObjectRelocatingContent.metaTypes, + nullptr +} }; + +void AssetsModel::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) +{ + auto *_t = static_cast(_o); + if (_c == QMetaObject::InvokeMetaMethod) { + switch (_id) { + case 0: _t->folderIdChanged(); break; + case 1: _t->searchQueryChanged(); break; + case 2: _t->typeFilterChanged(); break; + case 3: _t->selectedTagNamesChanged(); break; + case 4: _t->tagFilterModeChanged(); break; + case 5: _t->recursiveModeChanged(); break; + case 6: _t->searchEntireDatabaseChanged(); break; + case 7: _t->tagsChangedForAsset((*reinterpret_cast>(_a[1]))); break; + case 8: _t->reload(); break; + case 9: _t->onAssetsChangedForFolder((*reinterpret_cast>(_a[1]))); break; + case 10: _t->triggerDebouncedReload(); break; + case 11: _t->setFilters((*reinterpret_cast>(_a[1])),(*reinterpret_cast>(_a[2])),(*reinterpret_cast>(_a[3])),(*reinterpret_cast>(_a[4]))); break; + case 12: { bool _r = _t->moveAssetToFolder((*reinterpret_cast>(_a[1])),(*reinterpret_cast>(_a[2]))); + if (_a[0]) *reinterpret_cast(_a[0]) = std::move(_r); } break; + case 13: { bool _r = _t->moveAssetsToFolder((*reinterpret_cast>(_a[1])),(*reinterpret_cast>(_a[2]))); + if (_a[0]) *reinterpret_cast(_a[0]) = std::move(_r); } break; + case 14: { bool _r = _t->removeAssets((*reinterpret_cast>(_a[1]))); + if (_a[0]) *reinterpret_cast(_a[0]) = std::move(_r); } break; + case 15: { bool _r = _t->setAssetsRating((*reinterpret_cast>(_a[1])),(*reinterpret_cast>(_a[2]))); + if (_a[0]) *reinterpret_cast(_a[0]) = std::move(_r); } break; + case 16: { bool _r = _t->assignTags((*reinterpret_cast>(_a[1])),(*reinterpret_cast>(_a[2]))); + if (_a[0]) *reinterpret_cast(_a[0]) = std::move(_r); } break; + case 17: { QVariantMap _r = _t->get((*reinterpret_cast>(_a[1]))); + if (_a[0]) *reinterpret_cast(_a[0]) = std::move(_r); } break; + case 18: { QStringList _r = _t->tagsForAsset((*reinterpret_cast>(_a[1]))); + if (_a[0]) *reinterpret_cast(_a[0]) = std::move(_r); } break; + default: ; + } + } + if (_c == QMetaObject::IndexOfMethod) { + if (QtMocHelpers::indexOfMethod(_a, &AssetsModel::folderIdChanged, 0)) + return; + if (QtMocHelpers::indexOfMethod(_a, &AssetsModel::searchQueryChanged, 1)) + return; + if (QtMocHelpers::indexOfMethod(_a, &AssetsModel::typeFilterChanged, 2)) + return; + if (QtMocHelpers::indexOfMethod(_a, &AssetsModel::selectedTagNamesChanged, 3)) + return; + if (QtMocHelpers::indexOfMethod(_a, &AssetsModel::tagFilterModeChanged, 4)) + return; + if (QtMocHelpers::indexOfMethod(_a, &AssetsModel::recursiveModeChanged, 5)) + return; + if (QtMocHelpers::indexOfMethod(_a, &AssetsModel::searchEntireDatabaseChanged, 6)) + return; + if (QtMocHelpers::indexOfMethod(_a, &AssetsModel::tagsChangedForAsset, 7)) + return; + } + if (_c == QMetaObject::ReadProperty) { + void *_v = _a[0]; + switch (_id) { + case 0: *reinterpret_cast(_v) = _t->folderId(); break; + case 1: *reinterpret_cast(_v) = _t->searchQuery(); break; + case 2: *reinterpret_cast(_v) = _t->typeFilter(); break; + case 3: *reinterpret_cast(_v) = _t->selectedTagNames(); break; + case 4: *reinterpret_cast(_v) = _t->tagFilterMode(); break; + case 5: *reinterpret_cast(_v) = _t->recursiveMode(); break; + case 6: *reinterpret_cast(_v) = _t->searchEntireDatabase(); break; + default: break; + } + } + if (_c == QMetaObject::WriteProperty) { + void *_v = _a[0]; + switch (_id) { + case 0: _t->setFolderId(*reinterpret_cast(_v)); break; + case 1: _t->setSearchQuery(*reinterpret_cast(_v)); break; + case 2: _t->setTypeFilter(*reinterpret_cast(_v)); break; + case 3: _t->setSelectedTagNames(*reinterpret_cast(_v)); break; + case 4: _t->setTagFilterMode(*reinterpret_cast(_v)); break; + case 5: _t->setRecursiveMode(*reinterpret_cast(_v)); break; + case 6: _t->setSearchEntireDatabase(*reinterpret_cast(_v)); break; + default: break; + } + } +} + +const QMetaObject *AssetsModel::metaObject() const +{ + return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject; +} + +void *AssetsModel::qt_metacast(const char *_clname) +{ + if (!_clname) return nullptr; + if (!strcmp(_clname, qt_staticMetaObjectStaticContent.strings)) + return static_cast(this); + return QAbstractListModel::qt_metacast(_clname); +} + +int AssetsModel::qt_metacall(QMetaObject::Call _c, int _id, void **_a) +{ + _id = QAbstractListModel::qt_metacall(_c, _id, _a); + if (_id < 0) + return _id; + if (_c == QMetaObject::InvokeMetaMethod) { + if (_id < 19) + qt_static_metacall(this, _c, _id, _a); + _id -= 19; + } + if (_c == QMetaObject::RegisterMethodArgumentMetaType) { + if (_id < 19) + *reinterpret_cast(_a[0]) = QMetaType(); + _id -= 19; + } + if (_c == QMetaObject::ReadProperty || _c == QMetaObject::WriteProperty + || _c == QMetaObject::ResetProperty || _c == QMetaObject::BindableProperty + || _c == QMetaObject::RegisterPropertyMetaType) { + qt_static_metacall(this, _c, _id, _a); + _id -= 7; + } + return _id; +} + +// SIGNAL 0 +void AssetsModel::folderIdChanged() +{ + QMetaObject::activate(this, &staticMetaObject, 0, nullptr); +} + +// SIGNAL 1 +void AssetsModel::searchQueryChanged() +{ + QMetaObject::activate(this, &staticMetaObject, 1, nullptr); +} + +// SIGNAL 2 +void AssetsModel::typeFilterChanged() +{ + QMetaObject::activate(this, &staticMetaObject, 2, nullptr); +} + +// SIGNAL 3 +void AssetsModel::selectedTagNamesChanged() +{ + QMetaObject::activate(this, &staticMetaObject, 3, nullptr); +} + +// SIGNAL 4 +void AssetsModel::tagFilterModeChanged() +{ + QMetaObject::activate(this, &staticMetaObject, 4, nullptr); +} + +// SIGNAL 5 +void AssetsModel::recursiveModeChanged() +{ + QMetaObject::activate(this, &staticMetaObject, 5, nullptr); +} + +// SIGNAL 6 +void AssetsModel::searchEntireDatabaseChanged() +{ + QMetaObject::activate(this, &staticMetaObject, 6, nullptr); +} + +// SIGNAL 7 +void AssetsModel::tagsChangedForAsset(int _t1) +{ + QMetaObject::activate(this, &staticMetaObject, 7, nullptr, _t1); +} +QT_WARNING_POP diff --git a/build-linux/kassetmanagerqt_autogen/UVLADIE3JM/moc_assets_table_model.cpp b/build-linux/kassetmanagerqt_autogen/UVLADIE3JM/moc_assets_table_model.cpp new file mode 100644 index 00000000..065c374d --- /dev/null +++ b/build-linux/kassetmanagerqt_autogen/UVLADIE3JM/moc_assets_table_model.cpp @@ -0,0 +1,90 @@ +/**************************************************************************** +** Meta object code from reading C++ file 'assets_table_model.h' +** +** Created by: The Qt Meta Object Compiler version 69 (Qt 6.10.3) +** +** WARNING! All changes made in this file will be lost! +*****************************************************************************/ + +#include "../../../native/qt6/src/assets_table_model.h" +#include + +#include + +#include + + +#include +#if !defined(Q_MOC_OUTPUT_REVISION) +#error "The header file 'assets_table_model.h' doesn't include ." +#elif Q_MOC_OUTPUT_REVISION != 69 +#error "This file was generated using the moc from 6.10.3. It" +#error "cannot be used with the include files from this version of Qt." +#error "(The moc has changed too much.)" +#endif + +#ifndef Q_CONSTINIT +#define Q_CONSTINIT +#endif + +QT_WARNING_PUSH +QT_WARNING_DISABLE_DEPRECATED +QT_WARNING_DISABLE_GCC("-Wuseless-cast") +namespace { +struct qt_meta_tag_ZN16AssetsTableModelE_t {}; +} // unnamed namespace + +template <> constexpr inline auto AssetsTableModel::qt_create_metaobjectdata() +{ + namespace QMC = QtMocConstants; + QtMocHelpers::StringRefStorage qt_stringData { + "AssetsTableModel" + }; + + QtMocHelpers::UintData qt_methods { + }; + QtMocHelpers::UintData qt_properties { + }; + QtMocHelpers::UintData qt_enums { + }; + return QtMocHelpers::metaObjectData(QMC::MetaObjectFlag{}, qt_stringData, + qt_methods, qt_properties, qt_enums); +} +Q_CONSTINIT const QMetaObject AssetsTableModel::staticMetaObject = { { + QMetaObject::SuperData::link(), + qt_staticMetaObjectStaticContent.stringdata, + qt_staticMetaObjectStaticContent.data, + qt_static_metacall, + nullptr, + qt_staticMetaObjectRelocatingContent.metaTypes, + nullptr +} }; + +void AssetsTableModel::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) +{ + auto *_t = static_cast(_o); + (void)_t; + (void)_c; + (void)_id; + (void)_a; +} + +const QMetaObject *AssetsTableModel::metaObject() const +{ + return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject; +} + +void *AssetsTableModel::qt_metacast(const char *_clname) +{ + if (!_clname) return nullptr; + if (!strcmp(_clname, qt_staticMetaObjectStaticContent.strings)) + return static_cast(this); + return QAbstractTableModel::qt_metacast(_clname); +} + +int AssetsTableModel::qt_metacall(QMetaObject::Call _c, int _id, void **_a) +{ + _id = QAbstractTableModel::qt_metacall(_c, _id, _a); + return _id; +} +QT_WARNING_POP diff --git a/build-linux/kassetmanagerqt_autogen/UVLADIE3JM/moc_bulk_rename_dialog.cpp b/build-linux/kassetmanagerqt_autogen/UVLADIE3JM/moc_bulk_rename_dialog.cpp new file mode 100644 index 00000000..55cd418f --- /dev/null +++ b/build-linux/kassetmanagerqt_autogen/UVLADIE3JM/moc_bulk_rename_dialog.cpp @@ -0,0 +1,124 @@ +/**************************************************************************** +** Meta object code from reading C++ file 'bulk_rename_dialog.h' +** +** Created by: The Qt Meta Object Compiler version 69 (Qt 6.10.3) +** +** WARNING! All changes made in this file will be lost! +*****************************************************************************/ + +#include "../../../native/qt6/src/bulk_rename_dialog.h" +#include +#include + +#include + +#include + + +#include +#if !defined(Q_MOC_OUTPUT_REVISION) +#error "The header file 'bulk_rename_dialog.h' doesn't include ." +#elif Q_MOC_OUTPUT_REVISION != 69 +#error "This file was generated using the moc from 6.10.3. It" +#error "cannot be used with the include files from this version of Qt." +#error "(The moc has changed too much.)" +#endif + +#ifndef Q_CONSTINIT +#define Q_CONSTINIT +#endif + +QT_WARNING_PUSH +QT_WARNING_DISABLE_DEPRECATED +QT_WARNING_DISABLE_GCC("-Wuseless-cast") +namespace { +struct qt_meta_tag_ZN16BulkRenameDialogE_t {}; +} // unnamed namespace + +template <> constexpr inline auto BulkRenameDialog::qt_create_metaobjectdata() +{ + namespace QMC = QtMocConstants; + QtMocHelpers::StringRefStorage qt_stringData { + "BulkRenameDialog", + "onPatternChanged", + "", + "onPreviewUpdated", + "onApplyRename", + "onInsertToken", + "token" + }; + + QtMocHelpers::UintData qt_methods { + // Slot 'onPatternChanged' + QtMocHelpers::SlotData(1, 2, QMC::AccessPrivate, QMetaType::Void), + // Slot 'onPreviewUpdated' + QtMocHelpers::SlotData(3, 2, QMC::AccessPrivate, QMetaType::Void), + // Slot 'onApplyRename' + QtMocHelpers::SlotData(4, 2, QMC::AccessPrivate, QMetaType::Void), + // Slot 'onInsertToken' + QtMocHelpers::SlotData(5, 2, QMC::AccessPrivate, QMetaType::Void, {{ + { QMetaType::QString, 6 }, + }}), + }; + QtMocHelpers::UintData qt_properties { + }; + QtMocHelpers::UintData qt_enums { + }; + return QtMocHelpers::metaObjectData(QMC::MetaObjectFlag{}, qt_stringData, + qt_methods, qt_properties, qt_enums); +} +Q_CONSTINIT const QMetaObject BulkRenameDialog::staticMetaObject = { { + QMetaObject::SuperData::link(), + qt_staticMetaObjectStaticContent.stringdata, + qt_staticMetaObjectStaticContent.data, + qt_static_metacall, + nullptr, + qt_staticMetaObjectRelocatingContent.metaTypes, + nullptr +} }; + +void BulkRenameDialog::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) +{ + auto *_t = static_cast(_o); + if (_c == QMetaObject::InvokeMetaMethod) { + switch (_id) { + case 0: _t->onPatternChanged(); break; + case 1: _t->onPreviewUpdated(); break; + case 2: _t->onApplyRename(); break; + case 3: _t->onInsertToken((*reinterpret_cast>(_a[1]))); break; + default: ; + } + } +} + +const QMetaObject *BulkRenameDialog::metaObject() const +{ + return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject; +} + +void *BulkRenameDialog::qt_metacast(const char *_clname) +{ + if (!_clname) return nullptr; + if (!strcmp(_clname, qt_staticMetaObjectStaticContent.strings)) + return static_cast(this); + return QDialog::qt_metacast(_clname); +} + +int BulkRenameDialog::qt_metacall(QMetaObject::Call _c, int _id, void **_a) +{ + _id = QDialog::qt_metacall(_c, _id, _a); + if (_id < 0) + return _id; + if (_c == QMetaObject::InvokeMetaMethod) { + if (_id < 4) + qt_static_metacall(this, _c, _id, _a); + _id -= 4; + } + if (_c == QMetaObject::RegisterMethodArgumentMetaType) { + if (_id < 4) + *reinterpret_cast(_a[0]) = QMetaType(); + _id -= 4; + } + return _id; +} +QT_WARNING_POP diff --git a/build-linux/kassetmanagerqt_autogen/UVLADIE3JM/moc_context_preserver.cpp b/build-linux/kassetmanagerqt_autogen/UVLADIE3JM/moc_context_preserver.cpp new file mode 100644 index 00000000..8699c939 --- /dev/null +++ b/build-linux/kassetmanagerqt_autogen/UVLADIE3JM/moc_context_preserver.cpp @@ -0,0 +1,121 @@ +/**************************************************************************** +** Meta object code from reading C++ file 'context_preserver.h' +** +** Created by: The Qt Meta Object Compiler version 69 (Qt 6.10.3) +** +** WARNING! All changes made in this file will be lost! +*****************************************************************************/ + +#include "../../../native/qt6/src/context_preserver.h" +#include + +#include + +#include + + +#include +#if !defined(Q_MOC_OUTPUT_REVISION) +#error "The header file 'context_preserver.h' doesn't include ." +#elif Q_MOC_OUTPUT_REVISION != 69 +#error "This file was generated using the moc from 6.10.3. It" +#error "cannot be used with the include files from this version of Qt." +#error "(The moc has changed too much.)" +#endif + +#ifndef Q_CONSTINIT +#define Q_CONSTINIT +#endif + +QT_WARNING_PUSH +QT_WARNING_DISABLE_DEPRECATED +QT_WARNING_DISABLE_GCC("-Wuseless-cast") +namespace { +struct qt_meta_tag_ZN16ContextPreserverE_t {}; +} // unnamed namespace + +template <> constexpr inline auto ContextPreserver::qt_create_metaobjectdata() +{ + namespace QMC = QtMocConstants; + QtMocHelpers::StringRefStorage qt_stringData { + "ContextPreserver", + "contextRestored", + "", + "folderId" + }; + + QtMocHelpers::UintData qt_methods { + // Signal 'contextRestored' + QtMocHelpers::SignalData(1, 2, QMC::AccessPublic, QMetaType::Void, {{ + { QMetaType::Int, 3 }, + }}), + }; + QtMocHelpers::UintData qt_properties { + }; + QtMocHelpers::UintData qt_enums { + }; + return QtMocHelpers::metaObjectData(QMC::MetaObjectFlag{}, qt_stringData, + qt_methods, qt_properties, qt_enums); +} +Q_CONSTINIT const QMetaObject ContextPreserver::staticMetaObject = { { + QMetaObject::SuperData::link(), + qt_staticMetaObjectStaticContent.stringdata, + qt_staticMetaObjectStaticContent.data, + qt_static_metacall, + nullptr, + qt_staticMetaObjectRelocatingContent.metaTypes, + nullptr +} }; + +void ContextPreserver::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) +{ + auto *_t = static_cast(_o); + if (_c == QMetaObject::InvokeMetaMethod) { + switch (_id) { + case 0: _t->contextRestored((*reinterpret_cast>(_a[1]))); break; + default: ; + } + } + if (_c == QMetaObject::IndexOfMethod) { + if (QtMocHelpers::indexOfMethod(_a, &ContextPreserver::contextRestored, 0)) + return; + } +} + +const QMetaObject *ContextPreserver::metaObject() const +{ + return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject; +} + +void *ContextPreserver::qt_metacast(const char *_clname) +{ + if (!_clname) return nullptr; + if (!strcmp(_clname, qt_staticMetaObjectStaticContent.strings)) + return static_cast(this); + return QObject::qt_metacast(_clname); +} + +int ContextPreserver::qt_metacall(QMetaObject::Call _c, int _id, void **_a) +{ + _id = QObject::qt_metacall(_c, _id, _a); + if (_id < 0) + return _id; + if (_c == QMetaObject::InvokeMetaMethod) { + if (_id < 1) + qt_static_metacall(this, _c, _id, _a); + _id -= 1; + } + if (_c == QMetaObject::RegisterMethodArgumentMetaType) { + if (_id < 1) + *reinterpret_cast(_a[0]) = QMetaType(); + _id -= 1; + } + return _id; +} + +// SIGNAL 0 +void ContextPreserver::contextRestored(int _t1) +{ + QMetaObject::activate(this, &staticMetaObject, 0, nullptr, _t1); +} +QT_WARNING_POP diff --git a/build-linux/kassetmanagerqt_autogen/UVLADIE3JM/moc_database_health_agent.cpp b/build-linux/kassetmanagerqt_autogen/UVLADIE3JM/moc_database_health_agent.cpp new file mode 100644 index 00000000..31b4b3fd --- /dev/null +++ b/build-linux/kassetmanagerqt_autogen/UVLADIE3JM/moc_database_health_agent.cpp @@ -0,0 +1,197 @@ +/**************************************************************************** +** Meta object code from reading C++ file 'database_health_agent.h' +** +** Created by: The Qt Meta Object Compiler version 69 (Qt 6.10.3) +** +** WARNING! All changes made in this file will be lost! +*****************************************************************************/ + +#include "../../../native/qt6/src/database_health_agent.h" +#include +#include + +#include + +#include + + +#include +#if !defined(Q_MOC_OUTPUT_REVISION) +#error "The header file 'database_health_agent.h' doesn't include ." +#elif Q_MOC_OUTPUT_REVISION != 69 +#error "This file was generated using the moc from 6.10.3. It" +#error "cannot be used with the include files from this version of Qt." +#error "(The moc has changed too much.)" +#endif + +#ifndef Q_CONSTINIT +#define Q_CONSTINIT +#endif + +QT_WARNING_PUSH +QT_WARNING_DISABLE_DEPRECATED +QT_WARNING_DISABLE_GCC("-Wuseless-cast") +namespace { +struct qt_meta_tag_ZN19DatabaseHealthAgentE_t {}; +} // unnamed namespace + +template <> constexpr inline auto DatabaseHealthAgent::qt_create_metaobjectdata() +{ + namespace QMC = QtMocConstants; + QtMocHelpers::StringRefStorage qt_stringData { + "DatabaseHealthAgent", + "healthCheckStarted", + "", + "healthCheckProgress", + "current", + "total", + "message", + "healthCheckCompleted", + "QList", + "results", + "maintenanceStarted", + "operation", + "maintenanceProgress", + "percent", + "maintenanceCompleted", + "success" + }; + + QtMocHelpers::UintData qt_methods { + // Signal 'healthCheckStarted' + QtMocHelpers::SignalData(1, 2, QMC::AccessPublic, QMetaType::Void), + // Signal 'healthCheckProgress' + QtMocHelpers::SignalData(3, 2, QMC::AccessPublic, QMetaType::Void, {{ + { QMetaType::Int, 4 }, { QMetaType::Int, 5 }, { QMetaType::QString, 6 }, + }}), + // Signal 'healthCheckCompleted' + QtMocHelpers::SignalData &)>(7, 2, QMC::AccessPublic, QMetaType::Void, {{ + { 0x80000000 | 8, 9 }, + }}), + // Signal 'maintenanceStarted' + QtMocHelpers::SignalData(10, 2, QMC::AccessPublic, QMetaType::Void, {{ + { QMetaType::QString, 11 }, + }}), + // Signal 'maintenanceProgress' + QtMocHelpers::SignalData(12, 2, QMC::AccessPublic, QMetaType::Void, {{ + { QMetaType::Int, 13 }, + }}), + // Signal 'maintenanceCompleted' + QtMocHelpers::SignalData(14, 2, QMC::AccessPublic, QMetaType::Void, {{ + { QMetaType::Bool, 15 }, { QMetaType::QString, 6 }, + }}), + }; + QtMocHelpers::UintData qt_properties { + }; + QtMocHelpers::UintData qt_enums { + }; + return QtMocHelpers::metaObjectData(QMC::MetaObjectFlag{}, qt_stringData, + qt_methods, qt_properties, qt_enums); +} +Q_CONSTINIT const QMetaObject DatabaseHealthAgent::staticMetaObject = { { + QMetaObject::SuperData::link(), + qt_staticMetaObjectStaticContent.stringdata, + qt_staticMetaObjectStaticContent.data, + qt_static_metacall, + nullptr, + qt_staticMetaObjectRelocatingContent.metaTypes, + nullptr +} }; + +void DatabaseHealthAgent::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) +{ + auto *_t = static_cast(_o); + if (_c == QMetaObject::InvokeMetaMethod) { + switch (_id) { + case 0: _t->healthCheckStarted(); break; + case 1: _t->healthCheckProgress((*reinterpret_cast>(_a[1])),(*reinterpret_cast>(_a[2])),(*reinterpret_cast>(_a[3]))); break; + case 2: _t->healthCheckCompleted((*reinterpret_cast>>(_a[1]))); break; + case 3: _t->maintenanceStarted((*reinterpret_cast>(_a[1]))); break; + case 4: _t->maintenanceProgress((*reinterpret_cast>(_a[1]))); break; + case 5: _t->maintenanceCompleted((*reinterpret_cast>(_a[1])),(*reinterpret_cast>(_a[2]))); break; + default: ; + } + } + if (_c == QMetaObject::IndexOfMethod) { + if (QtMocHelpers::indexOfMethod(_a, &DatabaseHealthAgent::healthCheckStarted, 0)) + return; + if (QtMocHelpers::indexOfMethod(_a, &DatabaseHealthAgent::healthCheckProgress, 1)) + return; + if (QtMocHelpers::indexOfMethod & )>(_a, &DatabaseHealthAgent::healthCheckCompleted, 2)) + return; + if (QtMocHelpers::indexOfMethod(_a, &DatabaseHealthAgent::maintenanceStarted, 3)) + return; + if (QtMocHelpers::indexOfMethod(_a, &DatabaseHealthAgent::maintenanceProgress, 4)) + return; + if (QtMocHelpers::indexOfMethod(_a, &DatabaseHealthAgent::maintenanceCompleted, 5)) + return; + } +} + +const QMetaObject *DatabaseHealthAgent::metaObject() const +{ + return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject; +} + +void *DatabaseHealthAgent::qt_metacast(const char *_clname) +{ + if (!_clname) return nullptr; + if (!strcmp(_clname, qt_staticMetaObjectStaticContent.strings)) + return static_cast(this); + return QObject::qt_metacast(_clname); +} + +int DatabaseHealthAgent::qt_metacall(QMetaObject::Call _c, int _id, void **_a) +{ + _id = QObject::qt_metacall(_c, _id, _a); + if (_id < 0) + return _id; + if (_c == QMetaObject::InvokeMetaMethod) { + if (_id < 6) + qt_static_metacall(this, _c, _id, _a); + _id -= 6; + } + if (_c == QMetaObject::RegisterMethodArgumentMetaType) { + if (_id < 6) + *reinterpret_cast(_a[0]) = QMetaType(); + _id -= 6; + } + return _id; +} + +// SIGNAL 0 +void DatabaseHealthAgent::healthCheckStarted() +{ + QMetaObject::activate(this, &staticMetaObject, 0, nullptr); +} + +// SIGNAL 1 +void DatabaseHealthAgent::healthCheckProgress(int _t1, int _t2, const QString & _t3) +{ + QMetaObject::activate(this, &staticMetaObject, 1, nullptr, _t1, _t2, _t3); +} + +// SIGNAL 2 +void DatabaseHealthAgent::healthCheckCompleted(const QVector & _t1) +{ + QMetaObject::activate(this, &staticMetaObject, 2, nullptr, _t1); +} + +// SIGNAL 3 +void DatabaseHealthAgent::maintenanceStarted(const QString & _t1) +{ + QMetaObject::activate(this, &staticMetaObject, 3, nullptr, _t1); +} + +// SIGNAL 4 +void DatabaseHealthAgent::maintenanceProgress(int _t1) +{ + QMetaObject::activate(this, &staticMetaObject, 4, nullptr, _t1); +} + +// SIGNAL 5 +void DatabaseHealthAgent::maintenanceCompleted(bool _t1, const QString & _t2) +{ + QMetaObject::activate(this, &staticMetaObject, 5, nullptr, _t1, _t2); +} +QT_WARNING_POP diff --git a/build-linux/kassetmanagerqt_autogen/UVLADIE3JM/moc_database_health_dialog.cpp b/build-linux/kassetmanagerqt_autogen/UVLADIE3JM/moc_database_health_dialog.cpp new file mode 100644 index 00000000..1baaffb8 --- /dev/null +++ b/build-linux/kassetmanagerqt_autogen/UVLADIE3JM/moc_database_health_dialog.cpp @@ -0,0 +1,168 @@ +/**************************************************************************** +** Meta object code from reading C++ file 'database_health_dialog.h' +** +** Created by: The Qt Meta Object Compiler version 69 (Qt 6.10.3) +** +** WARNING! All changes made in this file will be lost! +*****************************************************************************/ + +#include "../../../native/qt6/src/database_health_dialog.h" +#include +#include +#include + +#include + +#include + + +#include +#if !defined(Q_MOC_OUTPUT_REVISION) +#error "The header file 'database_health_dialog.h' doesn't include ." +#elif Q_MOC_OUTPUT_REVISION != 69 +#error "This file was generated using the moc from 6.10.3. It" +#error "cannot be used with the include files from this version of Qt." +#error "(The moc has changed too much.)" +#endif + +#ifndef Q_CONSTINIT +#define Q_CONSTINIT +#endif + +QT_WARNING_PUSH +QT_WARNING_DISABLE_DEPRECATED +QT_WARNING_DISABLE_GCC("-Wuseless-cast") +namespace { +struct qt_meta_tag_ZN20DatabaseHealthDialogE_t {}; +} // unnamed namespace + +template <> constexpr inline auto DatabaseHealthDialog::qt_create_metaobjectdata() +{ + namespace QMC = QtMocConstants; + QtMocHelpers::StringRefStorage qt_stringData { + "DatabaseHealthDialog", + "runHealthCheck", + "", + "performVacuum", + "performReindex", + "fixOrphanedRecords", + "updateMissingFiles", + "onHealthCheckStarted", + "onHealthCheckProgress", + "current", + "total", + "message", + "onHealthCheckCompleted", + "QList", + "results", + "onMaintenanceStarted", + "operation", + "onMaintenanceProgress", + "percent", + "onMaintenanceCompleted", + "success" + }; + + QtMocHelpers::UintData qt_methods { + // Slot 'runHealthCheck' + QtMocHelpers::SlotData(1, 2, QMC::AccessPrivate, QMetaType::Void), + // Slot 'performVacuum' + QtMocHelpers::SlotData(3, 2, QMC::AccessPrivate, QMetaType::Void), + // Slot 'performReindex' + QtMocHelpers::SlotData(4, 2, QMC::AccessPrivate, QMetaType::Void), + // Slot 'fixOrphanedRecords' + QtMocHelpers::SlotData(5, 2, QMC::AccessPrivate, QMetaType::Void), + // Slot 'updateMissingFiles' + QtMocHelpers::SlotData(6, 2, QMC::AccessPrivate, QMetaType::Void), + // Slot 'onHealthCheckStarted' + QtMocHelpers::SlotData(7, 2, QMC::AccessPrivate, QMetaType::Void), + // Slot 'onHealthCheckProgress' + QtMocHelpers::SlotData(8, 2, QMC::AccessPrivate, QMetaType::Void, {{ + { QMetaType::Int, 9 }, { QMetaType::Int, 10 }, { QMetaType::QString, 11 }, + }}), + // Slot 'onHealthCheckCompleted' + QtMocHelpers::SlotData &)>(12, 2, QMC::AccessPrivate, QMetaType::Void, {{ + { 0x80000000 | 13, 14 }, + }}), + // Slot 'onMaintenanceStarted' + QtMocHelpers::SlotData(15, 2, QMC::AccessPrivate, QMetaType::Void, {{ + { QMetaType::QString, 16 }, + }}), + // Slot 'onMaintenanceProgress' + QtMocHelpers::SlotData(17, 2, QMC::AccessPrivate, QMetaType::Void, {{ + { QMetaType::Int, 18 }, + }}), + // Slot 'onMaintenanceCompleted' + QtMocHelpers::SlotData(19, 2, QMC::AccessPrivate, QMetaType::Void, {{ + { QMetaType::Bool, 20 }, { QMetaType::QString, 11 }, + }}), + }; + QtMocHelpers::UintData qt_properties { + }; + QtMocHelpers::UintData qt_enums { + }; + return QtMocHelpers::metaObjectData(QMC::MetaObjectFlag{}, qt_stringData, + qt_methods, qt_properties, qt_enums); +} +Q_CONSTINIT const QMetaObject DatabaseHealthDialog::staticMetaObject = { { + QMetaObject::SuperData::link(), + qt_staticMetaObjectStaticContent.stringdata, + qt_staticMetaObjectStaticContent.data, + qt_static_metacall, + nullptr, + qt_staticMetaObjectRelocatingContent.metaTypes, + nullptr +} }; + +void DatabaseHealthDialog::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) +{ + auto *_t = static_cast(_o); + if (_c == QMetaObject::InvokeMetaMethod) { + switch (_id) { + case 0: _t->runHealthCheck(); break; + case 1: _t->performVacuum(); break; + case 2: _t->performReindex(); break; + case 3: _t->fixOrphanedRecords(); break; + case 4: _t->updateMissingFiles(); break; + case 5: _t->onHealthCheckStarted(); break; + case 6: _t->onHealthCheckProgress((*reinterpret_cast>(_a[1])),(*reinterpret_cast>(_a[2])),(*reinterpret_cast>(_a[3]))); break; + case 7: _t->onHealthCheckCompleted((*reinterpret_cast>>(_a[1]))); break; + case 8: _t->onMaintenanceStarted((*reinterpret_cast>(_a[1]))); break; + case 9: _t->onMaintenanceProgress((*reinterpret_cast>(_a[1]))); break; + case 10: _t->onMaintenanceCompleted((*reinterpret_cast>(_a[1])),(*reinterpret_cast>(_a[2]))); break; + default: ; + } + } +} + +const QMetaObject *DatabaseHealthDialog::metaObject() const +{ + return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject; +} + +void *DatabaseHealthDialog::qt_metacast(const char *_clname) +{ + if (!_clname) return nullptr; + if (!strcmp(_clname, qt_staticMetaObjectStaticContent.strings)) + return static_cast(this); + return QDialog::qt_metacast(_clname); +} + +int DatabaseHealthDialog::qt_metacall(QMetaObject::Call _c, int _id, void **_a) +{ + _id = QDialog::qt_metacall(_c, _id, _a); + if (_id < 0) + return _id; + if (_c == QMetaObject::InvokeMetaMethod) { + if (_id < 11) + qt_static_metacall(this, _c, _id, _a); + _id -= 11; + } + if (_c == QMetaObject::RegisterMethodArgumentMetaType) { + if (_id < 11) + *reinterpret_cast(_a[0]) = QMetaType(); + _id -= 11; + } + return _id; +} +QT_WARNING_POP diff --git a/build-linux/kassetmanagerqt_autogen/UVLADIE3JM/moc_db.cpp b/build-linux/kassetmanagerqt_autogen/UVLADIE3JM/moc_db.cpp new file mode 100644 index 00000000..b66b8ba6 --- /dev/null +++ b/build-linux/kassetmanagerqt_autogen/UVLADIE3JM/moc_db.cpp @@ -0,0 +1,187 @@ +/**************************************************************************** +** Meta object code from reading C++ file 'db.h' +** +** Created by: The Qt Meta Object Compiler version 69 (Qt 6.10.3) +** +** WARNING! All changes made in this file will be lost! +*****************************************************************************/ + +#include "../../../native/qt6/src/db.h" +#include + +#include + +#include + + +#include +#if !defined(Q_MOC_OUTPUT_REVISION) +#error "The header file 'db.h' doesn't include ." +#elif Q_MOC_OUTPUT_REVISION != 69 +#error "This file was generated using the moc from 6.10.3. It" +#error "cannot be used with the include files from this version of Qt." +#error "(The moc has changed too much.)" +#endif + +#ifndef Q_CONSTINIT +#define Q_CONSTINIT +#endif + +QT_WARNING_PUSH +QT_WARNING_DISABLE_DEPRECATED +QT_WARNING_DISABLE_GCC("-Wuseless-cast") +namespace { +struct qt_meta_tag_ZN2DBE_t {}; +} // unnamed namespace + +template <> constexpr inline auto DB::qt_create_metaobjectdata() +{ + namespace QMC = QtMocConstants; + QtMocHelpers::StringRefStorage qt_stringData { + "DB", + "foldersChanged", + "", + "assetsChanged", + "folderId", + "tagsChanged", + "projectFoldersChanged", + "assetVersionsChanged", + "assetId", + "applyChecksumUpdate", + "filePath", + "newSize", + "newChecksum", + "oldChecksum", + "isNewAsset", + "versionNotes" + }; + + QtMocHelpers::UintData qt_methods { + // Signal 'foldersChanged' + QtMocHelpers::SignalData(1, 2, QMC::AccessPublic, QMetaType::Void), + // Signal 'assetsChanged' + QtMocHelpers::SignalData(3, 2, QMC::AccessPublic, QMetaType::Void, {{ + { QMetaType::Int, 4 }, + }}), + // Signal 'tagsChanged' + QtMocHelpers::SignalData(5, 2, QMC::AccessPublic, QMetaType::Void), + // Signal 'projectFoldersChanged' + QtMocHelpers::SignalData(6, 2, QMC::AccessPublic, QMetaType::Void), + // Signal 'assetVersionsChanged' + QtMocHelpers::SignalData(7, 2, QMC::AccessPublic, QMetaType::Void, {{ + { QMetaType::Int, 8 }, + }}), + // Slot 'applyChecksumUpdate' + QtMocHelpers::SlotData(9, 2, QMC::AccessPrivate, QMetaType::Void, {{ + { QMetaType::Int, 8 }, { QMetaType::QString, 10 }, { QMetaType::LongLong, 11 }, { QMetaType::QString, 12 }, + { QMetaType::QString, 13 }, { QMetaType::Bool, 14 }, { QMetaType::QString, 15 }, + }}), + }; + QtMocHelpers::UintData qt_properties { + }; + QtMocHelpers::UintData qt_enums { + }; + return QtMocHelpers::metaObjectData(QMC::MetaObjectFlag{}, qt_stringData, + qt_methods, qt_properties, qt_enums); +} +Q_CONSTINIT const QMetaObject DB::staticMetaObject = { { + QMetaObject::SuperData::link(), + qt_staticMetaObjectStaticContent.stringdata, + qt_staticMetaObjectStaticContent.data, + qt_static_metacall, + nullptr, + qt_staticMetaObjectRelocatingContent.metaTypes, + nullptr +} }; + +void DB::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) +{ + auto *_t = static_cast(_o); + if (_c == QMetaObject::InvokeMetaMethod) { + switch (_id) { + case 0: _t->foldersChanged(); break; + case 1: _t->assetsChanged((*reinterpret_cast>(_a[1]))); break; + case 2: _t->tagsChanged(); break; + case 3: _t->projectFoldersChanged(); break; + case 4: _t->assetVersionsChanged((*reinterpret_cast>(_a[1]))); break; + case 5: _t->applyChecksumUpdate((*reinterpret_cast>(_a[1])),(*reinterpret_cast>(_a[2])),(*reinterpret_cast>(_a[3])),(*reinterpret_cast>(_a[4])),(*reinterpret_cast>(_a[5])),(*reinterpret_cast>(_a[6])),(*reinterpret_cast>(_a[7]))); break; + default: ; + } + } + if (_c == QMetaObject::IndexOfMethod) { + if (QtMocHelpers::indexOfMethod(_a, &DB::foldersChanged, 0)) + return; + if (QtMocHelpers::indexOfMethod(_a, &DB::assetsChanged, 1)) + return; + if (QtMocHelpers::indexOfMethod(_a, &DB::tagsChanged, 2)) + return; + if (QtMocHelpers::indexOfMethod(_a, &DB::projectFoldersChanged, 3)) + return; + if (QtMocHelpers::indexOfMethod(_a, &DB::assetVersionsChanged, 4)) + return; + } +} + +const QMetaObject *DB::metaObject() const +{ + return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject; +} + +void *DB::qt_metacast(const char *_clname) +{ + if (!_clname) return nullptr; + if (!strcmp(_clname, qt_staticMetaObjectStaticContent.strings)) + return static_cast(this); + if (!strcmp(_clname, "IAssetDatabase")) + return static_cast< IAssetDatabase*>(this); + return QObject::qt_metacast(_clname); +} + +int DB::qt_metacall(QMetaObject::Call _c, int _id, void **_a) +{ + _id = QObject::qt_metacall(_c, _id, _a); + if (_id < 0) + return _id; + if (_c == QMetaObject::InvokeMetaMethod) { + if (_id < 6) + qt_static_metacall(this, _c, _id, _a); + _id -= 6; + } + if (_c == QMetaObject::RegisterMethodArgumentMetaType) { + if (_id < 6) + *reinterpret_cast(_a[0]) = QMetaType(); + _id -= 6; + } + return _id; +} + +// SIGNAL 0 +void DB::foldersChanged() +{ + QMetaObject::activate(this, &staticMetaObject, 0, nullptr); +} + +// SIGNAL 1 +void DB::assetsChanged(int _t1) +{ + QMetaObject::activate(this, &staticMetaObject, 1, nullptr, _t1); +} + +// SIGNAL 2 +void DB::tagsChanged() +{ + QMetaObject::activate(this, &staticMetaObject, 2, nullptr); +} + +// SIGNAL 3 +void DB::projectFoldersChanged() +{ + QMetaObject::activate(this, &staticMetaObject, 3, nullptr); +} + +// SIGNAL 4 +void DB::assetVersionsChanged(int _t1) +{ + QMetaObject::activate(this, &staticMetaObject, 4, nullptr, _t1); +} +QT_WARNING_POP diff --git a/build-linux/kassetmanagerqt_autogen/UVLADIE3JM/moc_drag_utils.cpp b/build-linux/kassetmanagerqt_autogen/UVLADIE3JM/moc_drag_utils.cpp new file mode 100644 index 00000000..13abf46f --- /dev/null +++ b/build-linux/kassetmanagerqt_autogen/UVLADIE3JM/moc_drag_utils.cpp @@ -0,0 +1,90 @@ +/**************************************************************************** +** Meta object code from reading C++ file 'drag_utils.h' +** +** Created by: The Qt Meta Object Compiler version 69 (Qt 6.10.3) +** +** WARNING! All changes made in this file will be lost! +*****************************************************************************/ + +#include "../../../native/qt6/src/drag_utils.h" +#include + +#include + +#include + + +#include +#if !defined(Q_MOC_OUTPUT_REVISION) +#error "The header file 'drag_utils.h' doesn't include ." +#elif Q_MOC_OUTPUT_REVISION != 69 +#error "This file was generated using the moc from 6.10.3. It" +#error "cannot be used with the include files from this version of Qt." +#error "(The moc has changed too much.)" +#endif + +#ifndef Q_CONSTINIT +#define Q_CONSTINIT +#endif + +QT_WARNING_PUSH +QT_WARNING_DISABLE_DEPRECATED +QT_WARNING_DISABLE_GCC("-Wuseless-cast") +namespace { +struct qt_meta_tag_ZN9DragUtilsE_t {}; +} // unnamed namespace + +template <> constexpr inline auto DragUtils::qt_create_metaobjectdata() +{ + namespace QMC = QtMocConstants; + QtMocHelpers::StringRefStorage qt_stringData { + "DragUtils" + }; + + QtMocHelpers::UintData qt_methods { + }; + QtMocHelpers::UintData qt_properties { + }; + QtMocHelpers::UintData qt_enums { + }; + return QtMocHelpers::metaObjectData(QMC::MetaObjectFlag{}, qt_stringData, + qt_methods, qt_properties, qt_enums); +} +Q_CONSTINIT const QMetaObject DragUtils::staticMetaObject = { { + QMetaObject::SuperData::link(), + qt_staticMetaObjectStaticContent.stringdata, + qt_staticMetaObjectStaticContent.data, + qt_static_metacall, + nullptr, + qt_staticMetaObjectRelocatingContent.metaTypes, + nullptr +} }; + +void DragUtils::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) +{ + auto *_t = static_cast(_o); + (void)_t; + (void)_c; + (void)_id; + (void)_a; +} + +const QMetaObject *DragUtils::metaObject() const +{ + return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject; +} + +void *DragUtils::qt_metacast(const char *_clname) +{ + if (!_clname) return nullptr; + if (!strcmp(_clname, qt_staticMetaObjectStaticContent.strings)) + return static_cast(this); + return QObject::qt_metacast(_clname); +} + +int DragUtils::qt_metacall(QMetaObject::Call _c, int _id, void **_a) +{ + _id = QObject::qt_metacall(_c, _id, _a); + return _id; +} +QT_WARNING_POP diff --git a/build-linux/kassetmanagerqt_autogen/UVLADIE3JM/moc_everything_folder_model.cpp b/build-linux/kassetmanagerqt_autogen/UVLADIE3JM/moc_everything_folder_model.cpp new file mode 100644 index 00000000..957b2511 --- /dev/null +++ b/build-linux/kassetmanagerqt_autogen/UVLADIE3JM/moc_everything_folder_model.cpp @@ -0,0 +1,138 @@ +/**************************************************************************** +** Meta object code from reading C++ file 'everything_folder_model.h' +** +** Created by: The Qt Meta Object Compiler version 69 (Qt 6.10.3) +** +** WARNING! All changes made in this file will be lost! +*****************************************************************************/ + +#include "../../../native/qt6/src/everything_folder_model.h" +#include + +#include + +#include + + +#include +#if !defined(Q_MOC_OUTPUT_REVISION) +#error "The header file 'everything_folder_model.h' doesn't include ." +#elif Q_MOC_OUTPUT_REVISION != 69 +#error "This file was generated using the moc from 6.10.3. It" +#error "cannot be used with the include files from this version of Qt." +#error "(The moc has changed too much.)" +#endif + +#ifndef Q_CONSTINIT +#define Q_CONSTINIT +#endif + +QT_WARNING_PUSH +QT_WARNING_DISABLE_DEPRECATED +QT_WARNING_DISABLE_GCC("-Wuseless-cast") +namespace { +struct qt_meta_tag_ZN21EverythingFolderModelE_t {}; +} // unnamed namespace + +template <> constexpr inline auto EverythingFolderModel::qt_create_metaobjectdata() +{ + namespace QMC = QtMocConstants; + QtMocHelpers::StringRefStorage qt_stringData { + "EverythingFolderModel", + "pathResolved", + "", + "path", + "QModelIndex", + "index", + "childrenFetched", + "parent" + }; + + QtMocHelpers::UintData qt_methods { + // Signal 'pathResolved' + QtMocHelpers::SignalData(1, 2, QMC::AccessPublic, QMetaType::Void, {{ + { QMetaType::QString, 3 }, { 0x80000000 | 4, 5 }, + }}), + // Signal 'childrenFetched' + QtMocHelpers::SignalData(6, 2, QMC::AccessPublic, QMetaType::Void, {{ + { 0x80000000 | 4, 7 }, + }}), + }; + QtMocHelpers::UintData qt_properties { + }; + QtMocHelpers::UintData qt_enums { + }; + return QtMocHelpers::metaObjectData(QMC::MetaObjectFlag{}, qt_stringData, + qt_methods, qt_properties, qt_enums); +} +Q_CONSTINIT const QMetaObject EverythingFolderModel::staticMetaObject = { { + QMetaObject::SuperData::link(), + qt_staticMetaObjectStaticContent.stringdata, + qt_staticMetaObjectStaticContent.data, + qt_static_metacall, + nullptr, + qt_staticMetaObjectRelocatingContent.metaTypes, + nullptr +} }; + +void EverythingFolderModel::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) +{ + auto *_t = static_cast(_o); + if (_c == QMetaObject::InvokeMetaMethod) { + switch (_id) { + case 0: _t->pathResolved((*reinterpret_cast>(_a[1])),(*reinterpret_cast>(_a[2]))); break; + case 1: _t->childrenFetched((*reinterpret_cast>(_a[1]))); break; + default: ; + } + } + if (_c == QMetaObject::IndexOfMethod) { + if (QtMocHelpers::indexOfMethod(_a, &EverythingFolderModel::pathResolved, 0)) + return; + if (QtMocHelpers::indexOfMethod(_a, &EverythingFolderModel::childrenFetched, 1)) + return; + } +} + +const QMetaObject *EverythingFolderModel::metaObject() const +{ + return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject; +} + +void *EverythingFolderModel::qt_metacast(const char *_clname) +{ + if (!_clname) return nullptr; + if (!strcmp(_clname, qt_staticMetaObjectStaticContent.strings)) + return static_cast(this); + return QAbstractItemModel::qt_metacast(_clname); +} + +int EverythingFolderModel::qt_metacall(QMetaObject::Call _c, int _id, void **_a) +{ + _id = QAbstractItemModel::qt_metacall(_c, _id, _a); + if (_id < 0) + return _id; + if (_c == QMetaObject::InvokeMetaMethod) { + if (_id < 2) + qt_static_metacall(this, _c, _id, _a); + _id -= 2; + } + if (_c == QMetaObject::RegisterMethodArgumentMetaType) { + if (_id < 2) + *reinterpret_cast(_a[0]) = QMetaType(); + _id -= 2; + } + return _id; +} + +// SIGNAL 0 +void EverythingFolderModel::pathResolved(const QString & _t1, const QModelIndex & _t2) +{ + QMetaObject::activate(this, &staticMetaObject, 0, nullptr, _t1, _t2); +} + +// SIGNAL 1 +void EverythingFolderModel::childrenFetched(const QModelIndex & _t1) +{ + QMetaObject::activate(this, &staticMetaObject, 1, nullptr, _t1); +} +QT_WARNING_POP diff --git a/build-linux/kassetmanagerqt_autogen/UVLADIE3JM/moc_everything_search_dialog.cpp b/build-linux/kassetmanagerqt_autogen/UVLADIE3JM/moc_everything_search_dialog.cpp new file mode 100644 index 00000000..632a10f5 --- /dev/null +++ b/build-linux/kassetmanagerqt_autogen/UVLADIE3JM/moc_everything_search_dialog.cpp @@ -0,0 +1,156 @@ +/**************************************************************************** +** Meta object code from reading C++ file 'everything_search_dialog.h' +** +** Created by: The Qt Meta Object Compiler version 69 (Qt 6.10.3) +** +** WARNING! All changes made in this file will be lost! +*****************************************************************************/ + +#include "../../../native/qt6/src/everything_search_dialog.h" +#include +#include + +#include + +#include + + +#include +#if !defined(Q_MOC_OUTPUT_REVISION) +#error "The header file 'everything_search_dialog.h' doesn't include ." +#elif Q_MOC_OUTPUT_REVISION != 69 +#error "This file was generated using the moc from 6.10.3. It" +#error "cannot be used with the include files from this version of Qt." +#error "(The moc has changed too much.)" +#endif + +#ifndef Q_CONSTINIT +#define Q_CONSTINIT +#endif + +QT_WARNING_PUSH +QT_WARNING_DISABLE_DEPRECATED +QT_WARNING_DISABLE_GCC("-Wuseless-cast") +namespace { +struct qt_meta_tag_ZN22EverythingSearchDialogE_t {}; +} // unnamed namespace + +template <> constexpr inline auto EverythingSearchDialog::qt_create_metaobjectdata() +{ + namespace QMC = QtMocConstants; + QtMocHelpers::StringRefStorage qt_stringData { + "EverythingSearchDialog", + "importRequested", + "", + "paths", + "onSearchClicked", + "onSearchTextChanged", + "text", + "onFilterChanged", + "index", + "onImportSelected", + "onOpenLocation", + "onResultDoubleClicked", + "row", + "column" + }; + + QtMocHelpers::UintData qt_methods { + // Signal 'importRequested' + QtMocHelpers::SignalData(1, 2, QMC::AccessPublic, QMetaType::Void, {{ + { QMetaType::QStringList, 3 }, + }}), + // Slot 'onSearchClicked' + QtMocHelpers::SlotData(4, 2, QMC::AccessPrivate, QMetaType::Void), + // Slot 'onSearchTextChanged' + QtMocHelpers::SlotData(5, 2, QMC::AccessPrivate, QMetaType::Void, {{ + { QMetaType::QString, 6 }, + }}), + // Slot 'onFilterChanged' + QtMocHelpers::SlotData(7, 2, QMC::AccessPrivate, QMetaType::Void, {{ + { QMetaType::Int, 8 }, + }}), + // Slot 'onImportSelected' + QtMocHelpers::SlotData(9, 2, QMC::AccessPrivate, QMetaType::Void), + // Slot 'onOpenLocation' + QtMocHelpers::SlotData(10, 2, QMC::AccessPrivate, QMetaType::Void), + // Slot 'onResultDoubleClicked' + QtMocHelpers::SlotData(11, 2, QMC::AccessPrivate, QMetaType::Void, {{ + { QMetaType::Int, 12 }, { QMetaType::Int, 13 }, + }}), + }; + QtMocHelpers::UintData qt_properties { + }; + QtMocHelpers::UintData qt_enums { + }; + return QtMocHelpers::metaObjectData(QMC::MetaObjectFlag{}, qt_stringData, + qt_methods, qt_properties, qt_enums); +} +Q_CONSTINIT const QMetaObject EverythingSearchDialog::staticMetaObject = { { + QMetaObject::SuperData::link(), + qt_staticMetaObjectStaticContent.stringdata, + qt_staticMetaObjectStaticContent.data, + qt_static_metacall, + nullptr, + qt_staticMetaObjectRelocatingContent.metaTypes, + nullptr +} }; + +void EverythingSearchDialog::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) +{ + auto *_t = static_cast(_o); + if (_c == QMetaObject::InvokeMetaMethod) { + switch (_id) { + case 0: _t->importRequested((*reinterpret_cast>(_a[1]))); break; + case 1: _t->onSearchClicked(); break; + case 2: _t->onSearchTextChanged((*reinterpret_cast>(_a[1]))); break; + case 3: _t->onFilterChanged((*reinterpret_cast>(_a[1]))); break; + case 4: _t->onImportSelected(); break; + case 5: _t->onOpenLocation(); break; + case 6: _t->onResultDoubleClicked((*reinterpret_cast>(_a[1])),(*reinterpret_cast>(_a[2]))); break; + default: ; + } + } + if (_c == QMetaObject::IndexOfMethod) { + if (QtMocHelpers::indexOfMethod(_a, &EverythingSearchDialog::importRequested, 0)) + return; + } +} + +const QMetaObject *EverythingSearchDialog::metaObject() const +{ + return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject; +} + +void *EverythingSearchDialog::qt_metacast(const char *_clname) +{ + if (!_clname) return nullptr; + if (!strcmp(_clname, qt_staticMetaObjectStaticContent.strings)) + return static_cast(this); + return QDialog::qt_metacast(_clname); +} + +int EverythingSearchDialog::qt_metacall(QMetaObject::Call _c, int _id, void **_a) +{ + _id = QDialog::qt_metacall(_c, _id, _a); + if (_id < 0) + return _id; + if (_c == QMetaObject::InvokeMetaMethod) { + if (_id < 7) + qt_static_metacall(this, _c, _id, _a); + _id -= 7; + } + if (_c == QMetaObject::RegisterMethodArgumentMetaType) { + if (_id < 7) + *reinterpret_cast(_a[0]) = QMetaType(); + _id -= 7; + } + return _id; +} + +// SIGNAL 0 +void EverythingSearchDialog::importRequested(const QStringList & _t1) +{ + QMetaObject::activate(this, &staticMetaObject, 0, nullptr, _t1); +} +QT_WARNING_POP diff --git a/build-linux/kassetmanagerqt_autogen/UVLADIE3JM/moc_file_manager_pane.cpp b/build-linux/kassetmanagerqt_autogen/UVLADIE3JM/moc_file_manager_pane.cpp new file mode 100644 index 00000000..72ba9ac2 --- /dev/null +++ b/build-linux/kassetmanagerqt_autogen/UVLADIE3JM/moc_file_manager_pane.cpp @@ -0,0 +1,234 @@ +/**************************************************************************** +** Meta object code from reading C++ file 'file_manager_pane.h' +** +** Created by: The Qt Meta Object Compiler version 69 (Qt 6.10.3) +** +** WARNING! All changes made in this file will be lost! +*****************************************************************************/ + +#include "../../../native/qt6/src/file_manager_pane.h" +#include +#include + +#include + +#include + + +#include +#if !defined(Q_MOC_OUTPUT_REVISION) +#error "The header file 'file_manager_pane.h' doesn't include ." +#elif Q_MOC_OUTPUT_REVISION != 69 +#error "This file was generated using the moc from 6.10.3. It" +#error "cannot be used with the include files from this version of Qt." +#error "(The moc has changed too much.)" +#endif + +#ifndef Q_CONSTINIT +#define Q_CONSTINIT +#endif + +QT_WARNING_PUSH +QT_WARNING_DISABLE_DEPRECATED +QT_WARNING_DISABLE_GCC("-Wuseless-cast") +namespace { +struct qt_meta_tag_ZN15FileManagerPaneE_t {}; +} // unnamed namespace + +template <> constexpr inline auto FileManagerPane::qt_create_metaobjectdata() +{ + namespace QMC = QtMocConstants; + QtMocHelpers::StringRefStorage qt_stringData { + "FileManagerPane", + "pathChanged", + "", + "path", + "selectionChanged", + "activated", + "fileDoubleClicked", + "contextMenuRequested", + "QPoint", + "globalPos", + "filesDropped", + "paths", + "targetDir", + "onItemDoubleClicked", + "QModelIndex", + "index", + "onSelectionChanged", + "onViewModeToggled", + "onThumbnailSizeChanged", + "size", + "onGroupSequencesToggled", + "checked", + "onHideFoldersToggled", + "onPreviewToggled" + }; + + QtMocHelpers::UintData qt_methods { + // Signal 'pathChanged' + QtMocHelpers::SignalData(1, 2, QMC::AccessPublic, QMetaType::Void, {{ + { QMetaType::QString, 3 }, + }}), + // Signal 'selectionChanged' + QtMocHelpers::SignalData(4, 2, QMC::AccessPublic, QMetaType::Void), + // Signal 'activated' + QtMocHelpers::SignalData(5, 2, QMC::AccessPublic, QMetaType::Void), + // Signal 'fileDoubleClicked' + QtMocHelpers::SignalData(6, 2, QMC::AccessPublic, QMetaType::Void, {{ + { QMetaType::QString, 3 }, + }}), + // Signal 'contextMenuRequested' + QtMocHelpers::SignalData(7, 2, QMC::AccessPublic, QMetaType::Void, {{ + { 0x80000000 | 8, 9 }, + }}), + // Signal 'filesDropped' + QtMocHelpers::SignalData(10, 2, QMC::AccessPublic, QMetaType::Void, {{ + { QMetaType::QStringList, 11 }, { QMetaType::QString, 12 }, + }}), + // Slot 'onItemDoubleClicked' + QtMocHelpers::SlotData(13, 2, QMC::AccessPrivate, QMetaType::Void, {{ + { 0x80000000 | 14, 15 }, + }}), + // Slot 'onSelectionChanged' + QtMocHelpers::SlotData(16, 2, QMC::AccessPrivate, QMetaType::Void), + // Slot 'onViewModeToggled' + QtMocHelpers::SlotData(17, 2, QMC::AccessPrivate, QMetaType::Void), + // Slot 'onThumbnailSizeChanged' + QtMocHelpers::SlotData(18, 2, QMC::AccessPrivate, QMetaType::Void, {{ + { QMetaType::Int, 19 }, + }}), + // Slot 'onGroupSequencesToggled' + QtMocHelpers::SlotData(20, 2, QMC::AccessPrivate, QMetaType::Void, {{ + { QMetaType::Bool, 21 }, + }}), + // Slot 'onHideFoldersToggled' + QtMocHelpers::SlotData(22, 2, QMC::AccessPrivate, QMetaType::Void, {{ + { QMetaType::Bool, 21 }, + }}), + // Slot 'onPreviewToggled' + QtMocHelpers::SlotData(23, 2, QMC::AccessPrivate, QMetaType::Void, {{ + { QMetaType::Bool, 21 }, + }}), + }; + QtMocHelpers::UintData qt_properties { + }; + QtMocHelpers::UintData qt_enums { + }; + return QtMocHelpers::metaObjectData(QMC::MetaObjectFlag{}, qt_stringData, + qt_methods, qt_properties, qt_enums); +} +Q_CONSTINIT const QMetaObject FileManagerPane::staticMetaObject = { { + QMetaObject::SuperData::link(), + qt_staticMetaObjectStaticContent.stringdata, + qt_staticMetaObjectStaticContent.data, + qt_static_metacall, + nullptr, + qt_staticMetaObjectRelocatingContent.metaTypes, + nullptr +} }; + +void FileManagerPane::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) +{ + auto *_t = static_cast(_o); + if (_c == QMetaObject::InvokeMetaMethod) { + switch (_id) { + case 0: _t->pathChanged((*reinterpret_cast>(_a[1]))); break; + case 1: _t->selectionChanged(); break; + case 2: _t->activated(); break; + case 3: _t->fileDoubleClicked((*reinterpret_cast>(_a[1]))); break; + case 4: _t->contextMenuRequested((*reinterpret_cast>(_a[1]))); break; + case 5: _t->filesDropped((*reinterpret_cast>(_a[1])),(*reinterpret_cast>(_a[2]))); break; + case 6: _t->onItemDoubleClicked((*reinterpret_cast>(_a[1]))); break; + case 7: _t->onSelectionChanged(); break; + case 8: _t->onViewModeToggled(); break; + case 9: _t->onThumbnailSizeChanged((*reinterpret_cast>(_a[1]))); break; + case 10: _t->onGroupSequencesToggled((*reinterpret_cast>(_a[1]))); break; + case 11: _t->onHideFoldersToggled((*reinterpret_cast>(_a[1]))); break; + case 12: _t->onPreviewToggled((*reinterpret_cast>(_a[1]))); break; + default: ; + } + } + if (_c == QMetaObject::IndexOfMethod) { + if (QtMocHelpers::indexOfMethod(_a, &FileManagerPane::pathChanged, 0)) + return; + if (QtMocHelpers::indexOfMethod(_a, &FileManagerPane::selectionChanged, 1)) + return; + if (QtMocHelpers::indexOfMethod(_a, &FileManagerPane::activated, 2)) + return; + if (QtMocHelpers::indexOfMethod(_a, &FileManagerPane::fileDoubleClicked, 3)) + return; + if (QtMocHelpers::indexOfMethod(_a, &FileManagerPane::contextMenuRequested, 4)) + return; + if (QtMocHelpers::indexOfMethod(_a, &FileManagerPane::filesDropped, 5)) + return; + } +} + +const QMetaObject *FileManagerPane::metaObject() const +{ + return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject; +} + +void *FileManagerPane::qt_metacast(const char *_clname) +{ + if (!_clname) return nullptr; + if (!strcmp(_clname, qt_staticMetaObjectStaticContent.strings)) + return static_cast(this); + return QWidget::qt_metacast(_clname); +} + +int FileManagerPane::qt_metacall(QMetaObject::Call _c, int _id, void **_a) +{ + _id = QWidget::qt_metacall(_c, _id, _a); + if (_id < 0) + return _id; + if (_c == QMetaObject::InvokeMetaMethod) { + if (_id < 13) + qt_static_metacall(this, _c, _id, _a); + _id -= 13; + } + if (_c == QMetaObject::RegisterMethodArgumentMetaType) { + if (_id < 13) + *reinterpret_cast(_a[0]) = QMetaType(); + _id -= 13; + } + return _id; +} + +// SIGNAL 0 +void FileManagerPane::pathChanged(const QString & _t1) +{ + QMetaObject::activate(this, &staticMetaObject, 0, nullptr, _t1); +} + +// SIGNAL 1 +void FileManagerPane::selectionChanged() +{ + QMetaObject::activate(this, &staticMetaObject, 1, nullptr); +} + +// SIGNAL 2 +void FileManagerPane::activated() +{ + QMetaObject::activate(this, &staticMetaObject, 2, nullptr); +} + +// SIGNAL 3 +void FileManagerPane::fileDoubleClicked(const QString & _t1) +{ + QMetaObject::activate(this, &staticMetaObject, 3, nullptr, _t1); +} + +// SIGNAL 4 +void FileManagerPane::contextMenuRequested(const QPoint & _t1) +{ + QMetaObject::activate(this, &staticMetaObject, 4, nullptr, _t1); +} + +// SIGNAL 5 +void FileManagerPane::filesDropped(const QStringList & _t1, const QString & _t2) +{ + QMetaObject::activate(this, &staticMetaObject, 5, nullptr, _t1, _t2); +} +QT_WARNING_POP diff --git a/build-linux/kassetmanagerqt_autogen/UVLADIE3JM/moc_file_ops.cpp b/build-linux/kassetmanagerqt_autogen/UVLADIE3JM/moc_file_ops.cpp new file mode 100644 index 00000000..a5baf05d --- /dev/null +++ b/build-linux/kassetmanagerqt_autogen/UVLADIE3JM/moc_file_ops.cpp @@ -0,0 +1,176 @@ +/**************************************************************************** +** Meta object code from reading C++ file 'file_ops.h' +** +** Created by: The Qt Meta Object Compiler version 69 (Qt 6.10.3) +** +** WARNING! All changes made in this file will be lost! +*****************************************************************************/ + +#include "../../../native/qt6/src/file_ops.h" +#include + +#include + +#include + + +#include +#if !defined(Q_MOC_OUTPUT_REVISION) +#error "The header file 'file_ops.h' doesn't include ." +#elif Q_MOC_OUTPUT_REVISION != 69 +#error "This file was generated using the moc from 6.10.3. It" +#error "cannot be used with the include files from this version of Qt." +#error "(The moc has changed too much.)" +#endif + +#ifndef Q_CONSTINIT +#define Q_CONSTINIT +#endif + +QT_WARNING_PUSH +QT_WARNING_DISABLE_DEPRECATED +QT_WARNING_DISABLE_GCC("-Wuseless-cast") +namespace { +struct qt_meta_tag_ZN12FileOpsQueueE_t {}; +} // unnamed namespace + +template <> constexpr inline auto FileOpsQueue::qt_create_metaobjectdata() +{ + namespace QMC = QtMocConstants; + QtMocHelpers::StringRefStorage qt_stringData { + "FileOpsQueue", + "queueChanged", + "", + "progressChanged", + "current", + "total", + "currentFile", + "currentItemChanged", + "FileOpsQueue::Item", + "item", + "itemFinished", + "id", + "success", + "error", + "cancelCurrent", + "cancelAll" + }; + + QtMocHelpers::UintData qt_methods { + // Signal 'queueChanged' + QtMocHelpers::SignalData(1, 2, QMC::AccessPublic, QMetaType::Void), + // Signal 'progressChanged' + QtMocHelpers::SignalData(3, 2, QMC::AccessPublic, QMetaType::Void, {{ + { QMetaType::Int, 4 }, { QMetaType::Int, 5 }, { QMetaType::QString, 6 }, + }}), + // Signal 'currentItemChanged' + QtMocHelpers::SignalData(7, 2, QMC::AccessPublic, QMetaType::Void, {{ + { 0x80000000 | 8, 9 }, + }}), + // Signal 'itemFinished' + QtMocHelpers::SignalData(10, 2, QMC::AccessPublic, QMetaType::Void, {{ + { QMetaType::Int, 11 }, { QMetaType::Bool, 12 }, { QMetaType::QString, 13 }, + }}), + // Slot 'cancelCurrent' + QtMocHelpers::SlotData(14, 2, QMC::AccessPublic, QMetaType::Void), + // Slot 'cancelAll' + QtMocHelpers::SlotData(15, 2, QMC::AccessPublic, QMetaType::Void), + }; + QtMocHelpers::UintData qt_properties { + }; + QtMocHelpers::UintData qt_enums { + }; + return QtMocHelpers::metaObjectData(QMC::MetaObjectFlag{}, qt_stringData, + qt_methods, qt_properties, qt_enums); +} +Q_CONSTINIT const QMetaObject FileOpsQueue::staticMetaObject = { { + QMetaObject::SuperData::link(), + qt_staticMetaObjectStaticContent.stringdata, + qt_staticMetaObjectStaticContent.data, + qt_static_metacall, + nullptr, + qt_staticMetaObjectRelocatingContent.metaTypes, + nullptr +} }; + +void FileOpsQueue::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) +{ + auto *_t = static_cast(_o); + if (_c == QMetaObject::InvokeMetaMethod) { + switch (_id) { + case 0: _t->queueChanged(); break; + case 1: _t->progressChanged((*reinterpret_cast>(_a[1])),(*reinterpret_cast>(_a[2])),(*reinterpret_cast>(_a[3]))); break; + case 2: _t->currentItemChanged((*reinterpret_cast>(_a[1]))); break; + case 3: _t->itemFinished((*reinterpret_cast>(_a[1])),(*reinterpret_cast>(_a[2])),(*reinterpret_cast>(_a[3]))); break; + case 4: _t->cancelCurrent(); break; + case 5: _t->cancelAll(); break; + default: ; + } + } + if (_c == QMetaObject::IndexOfMethod) { + if (QtMocHelpers::indexOfMethod(_a, &FileOpsQueue::queueChanged, 0)) + return; + if (QtMocHelpers::indexOfMethod(_a, &FileOpsQueue::progressChanged, 1)) + return; + if (QtMocHelpers::indexOfMethod(_a, &FileOpsQueue::currentItemChanged, 2)) + return; + if (QtMocHelpers::indexOfMethod(_a, &FileOpsQueue::itemFinished, 3)) + return; + } +} + +const QMetaObject *FileOpsQueue::metaObject() const +{ + return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject; +} + +void *FileOpsQueue::qt_metacast(const char *_clname) +{ + if (!_clname) return nullptr; + if (!strcmp(_clname, qt_staticMetaObjectStaticContent.strings)) + return static_cast(this); + return QObject::qt_metacast(_clname); +} + +int FileOpsQueue::qt_metacall(QMetaObject::Call _c, int _id, void **_a) +{ + _id = QObject::qt_metacall(_c, _id, _a); + if (_id < 0) + return _id; + if (_c == QMetaObject::InvokeMetaMethod) { + if (_id < 6) + qt_static_metacall(this, _c, _id, _a); + _id -= 6; + } + if (_c == QMetaObject::RegisterMethodArgumentMetaType) { + if (_id < 6) + *reinterpret_cast(_a[0]) = QMetaType(); + _id -= 6; + } + return _id; +} + +// SIGNAL 0 +void FileOpsQueue::queueChanged() +{ + QMetaObject::activate(this, &staticMetaObject, 0, nullptr); +} + +// SIGNAL 1 +void FileOpsQueue::progressChanged(int _t1, int _t2, const QString & _t3) +{ + QMetaObject::activate(this, &staticMetaObject, 1, nullptr, _t1, _t2, _t3); +} + +// SIGNAL 2 +void FileOpsQueue::currentItemChanged(const FileOpsQueue::Item & _t1) +{ + QMetaObject::activate(this, &staticMetaObject, 2, nullptr, _t1); +} + +// SIGNAL 3 +void FileOpsQueue::itemFinished(int _t1, bool _t2, const QString & _t3) +{ + QMetaObject::activate(this, &staticMetaObject, 3, nullptr, _t1, _t2, _t3); +} +QT_WARNING_POP diff --git a/build-linux/kassetmanagerqt_autogen/UVLADIE3JM/moc_file_ops_dialog.cpp b/build-linux/kassetmanagerqt_autogen/UVLADIE3JM/moc_file_ops_dialog.cpp new file mode 100644 index 00000000..f0b84499 --- /dev/null +++ b/build-linux/kassetmanagerqt_autogen/UVLADIE3JM/moc_file_ops_dialog.cpp @@ -0,0 +1,135 @@ +/**************************************************************************** +** Meta object code from reading C++ file 'file_ops_dialog.h' +** +** Created by: The Qt Meta Object Compiler version 69 (Qt 6.10.3) +** +** WARNING! All changes made in this file will be lost! +*****************************************************************************/ + +#include "../../../native/qt6/src/file_ops_dialog.h" +#include +#include + +#include + +#include + + +#include +#if !defined(Q_MOC_OUTPUT_REVISION) +#error "The header file 'file_ops_dialog.h' doesn't include ." +#elif Q_MOC_OUTPUT_REVISION != 69 +#error "This file was generated using the moc from 6.10.3. It" +#error "cannot be used with the include files from this version of Qt." +#error "(The moc has changed too much.)" +#endif + +#ifndef Q_CONSTINIT +#define Q_CONSTINIT +#endif + +QT_WARNING_PUSH +QT_WARNING_DISABLE_DEPRECATED +QT_WARNING_DISABLE_GCC("-Wuseless-cast") +namespace { +struct qt_meta_tag_ZN21FileOpsProgressDialogE_t {}; +} // unnamed namespace + +template <> constexpr inline auto FileOpsProgressDialog::qt_create_metaobjectdata() +{ + namespace QMC = QtMocConstants; + QtMocHelpers::StringRefStorage qt_stringData { + "FileOpsProgressDialog", + "refreshList", + "", + "onProgress", + "current", + "total", + "currentFile", + "onCurrentChanged", + "FileOpsQueue::Item", + "item", + "onItemFinished", + "id", + "success", + "error" + }; + + QtMocHelpers::UintData qt_methods { + // Slot 'refreshList' + QtMocHelpers::SlotData(1, 2, QMC::AccessPrivate, QMetaType::Void), + // Slot 'onProgress' + QtMocHelpers::SlotData(3, 2, QMC::AccessPrivate, QMetaType::Void, {{ + { QMetaType::Int, 4 }, { QMetaType::Int, 5 }, { QMetaType::QString, 6 }, + }}), + // Slot 'onCurrentChanged' + QtMocHelpers::SlotData(7, 2, QMC::AccessPrivate, QMetaType::Void, {{ + { 0x80000000 | 8, 9 }, + }}), + // Slot 'onItemFinished' + QtMocHelpers::SlotData(10, 2, QMC::AccessPrivate, QMetaType::Void, {{ + { QMetaType::Int, 11 }, { QMetaType::Bool, 12 }, { QMetaType::QString, 13 }, + }}), + }; + QtMocHelpers::UintData qt_properties { + }; + QtMocHelpers::UintData qt_enums { + }; + return QtMocHelpers::metaObjectData(QMC::MetaObjectFlag{}, qt_stringData, + qt_methods, qt_properties, qt_enums); +} +Q_CONSTINIT const QMetaObject FileOpsProgressDialog::staticMetaObject = { { + QMetaObject::SuperData::link(), + qt_staticMetaObjectStaticContent.stringdata, + qt_staticMetaObjectStaticContent.data, + qt_static_metacall, + nullptr, + qt_staticMetaObjectRelocatingContent.metaTypes, + nullptr +} }; + +void FileOpsProgressDialog::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) +{ + auto *_t = static_cast(_o); + if (_c == QMetaObject::InvokeMetaMethod) { + switch (_id) { + case 0: _t->refreshList(); break; + case 1: _t->onProgress((*reinterpret_cast>(_a[1])),(*reinterpret_cast>(_a[2])),(*reinterpret_cast>(_a[3]))); break; + case 2: _t->onCurrentChanged((*reinterpret_cast>(_a[1]))); break; + case 3: _t->onItemFinished((*reinterpret_cast>(_a[1])),(*reinterpret_cast>(_a[2])),(*reinterpret_cast>(_a[3]))); break; + default: ; + } + } +} + +const QMetaObject *FileOpsProgressDialog::metaObject() const +{ + return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject; +} + +void *FileOpsProgressDialog::qt_metacast(const char *_clname) +{ + if (!_clname) return nullptr; + if (!strcmp(_clname, qt_staticMetaObjectStaticContent.strings)) + return static_cast(this); + return QDialog::qt_metacast(_clname); +} + +int FileOpsProgressDialog::qt_metacall(QMetaObject::Call _c, int _id, void **_a) +{ + _id = QDialog::qt_metacall(_c, _id, _a); + if (_id < 0) + return _id; + if (_c == QMetaObject::InvokeMetaMethod) { + if (_id < 4) + qt_static_metacall(this, _c, _id, _a); + _id -= 4; + } + if (_c == QMetaObject::RegisterMethodArgumentMetaType) { + if (_id < 4) + *reinterpret_cast(_a[0]) = QMetaType(); + _id -= 4; + } + return _id; +} +QT_WARNING_POP diff --git a/build-linux/kassetmanagerqt_autogen/UVLADIE3JM/moc_fm_item_delegate.cpp b/build-linux/kassetmanagerqt_autogen/UVLADIE3JM/moc_fm_item_delegate.cpp new file mode 100644 index 00000000..9cfc5623 --- /dev/null +++ b/build-linux/kassetmanagerqt_autogen/UVLADIE3JM/moc_fm_item_delegate.cpp @@ -0,0 +1,90 @@ +/**************************************************************************** +** Meta object code from reading C++ file 'fm_item_delegate.h' +** +** Created by: The Qt Meta Object Compiler version 69 (Qt 6.10.3) +** +** WARNING! All changes made in this file will be lost! +*****************************************************************************/ + +#include "../../../native/qt6/src/fm_item_delegate.h" +#include + +#include + +#include + + +#include +#if !defined(Q_MOC_OUTPUT_REVISION) +#error "The header file 'fm_item_delegate.h' doesn't include ." +#elif Q_MOC_OUTPUT_REVISION != 69 +#error "This file was generated using the moc from 6.10.3. It" +#error "cannot be used with the include files from this version of Qt." +#error "(The moc has changed too much.)" +#endif + +#ifndef Q_CONSTINIT +#define Q_CONSTINIT +#endif + +QT_WARNING_PUSH +QT_WARNING_DISABLE_DEPRECATED +QT_WARNING_DISABLE_GCC("-Wuseless-cast") +namespace { +struct qt_meta_tag_ZN14FmItemDelegateE_t {}; +} // unnamed namespace + +template <> constexpr inline auto FmItemDelegate::qt_create_metaobjectdata() +{ + namespace QMC = QtMocConstants; + QtMocHelpers::StringRefStorage qt_stringData { + "FmItemDelegate" + }; + + QtMocHelpers::UintData qt_methods { + }; + QtMocHelpers::UintData qt_properties { + }; + QtMocHelpers::UintData qt_enums { + }; + return QtMocHelpers::metaObjectData(QMC::MetaObjectFlag{}, qt_stringData, + qt_methods, qt_properties, qt_enums); +} +Q_CONSTINIT const QMetaObject FmItemDelegate::staticMetaObject = { { + QMetaObject::SuperData::link(), + qt_staticMetaObjectStaticContent.stringdata, + qt_staticMetaObjectStaticContent.data, + qt_static_metacall, + nullptr, + qt_staticMetaObjectRelocatingContent.metaTypes, + nullptr +} }; + +void FmItemDelegate::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) +{ + auto *_t = static_cast(_o); + (void)_t; + (void)_c; + (void)_id; + (void)_a; +} + +const QMetaObject *FmItemDelegate::metaObject() const +{ + return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject; +} + +void *FmItemDelegate::qt_metacast(const char *_clname) +{ + if (!_clname) return nullptr; + if (!strcmp(_clname, qt_staticMetaObjectStaticContent.strings)) + return static_cast(this); + return QStyledItemDelegate::qt_metacast(_clname); +} + +int FmItemDelegate::qt_metacall(QMetaObject::Call _c, int _id, void **_a) +{ + _id = QStyledItemDelegate::qt_metacall(_c, _id, _a); + return _id; +} +QT_WARNING_POP diff --git a/build-linux/kassetmanagerqt_autogen/UVLADIE3JM/moc_fm_views_ex.cpp b/build-linux/kassetmanagerqt_autogen/UVLADIE3JM/moc_fm_views_ex.cpp new file mode 100644 index 00000000..86da3dc6 --- /dev/null +++ b/build-linux/kassetmanagerqt_autogen/UVLADIE3JM/moc_fm_views_ex.cpp @@ -0,0 +1,147 @@ +/**************************************************************************** +** Meta object code from reading C++ file 'fm_views_ex.h' +** +** Created by: The Qt Meta Object Compiler version 69 (Qt 6.10.3) +** +** WARNING! All changes made in this file will be lost! +*****************************************************************************/ + +#include "../../../native/qt6/src/fm_views_ex.h" +#include + +#include + +#include + + +#include +#if !defined(Q_MOC_OUTPUT_REVISION) +#error "The header file 'fm_views_ex.h' doesn't include ." +#elif Q_MOC_OUTPUT_REVISION != 69 +#error "This file was generated using the moc from 6.10.3. It" +#error "cannot be used with the include files from this version of Qt." +#error "(The moc has changed too much.)" +#endif + +#ifndef Q_CONSTINIT +#define Q_CONSTINIT +#endif + +QT_WARNING_PUSH +QT_WARNING_DISABLE_DEPRECATED +QT_WARNING_DISABLE_GCC("-Wuseless-cast") +namespace { +struct qt_meta_tag_ZN12FmGridViewExE_t {}; +} // unnamed namespace + +template <> constexpr inline auto FmGridViewEx::qt_create_metaobjectdata() +{ + namespace QMC = QtMocConstants; + QtMocHelpers::StringRefStorage qt_stringData { + "FmGridViewEx" + }; + + QtMocHelpers::UintData qt_methods { + }; + QtMocHelpers::UintData qt_properties { + }; + QtMocHelpers::UintData qt_enums { + }; + return QtMocHelpers::metaObjectData(QMC::MetaObjectFlag{}, qt_stringData, + qt_methods, qt_properties, qt_enums); +} +Q_CONSTINIT const QMetaObject FmGridViewEx::staticMetaObject = { { + QMetaObject::SuperData::link(), + qt_staticMetaObjectStaticContent.stringdata, + qt_staticMetaObjectStaticContent.data, + qt_static_metacall, + nullptr, + qt_staticMetaObjectRelocatingContent.metaTypes, + nullptr +} }; + +void FmGridViewEx::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) +{ + auto *_t = static_cast(_o); + (void)_t; + (void)_c; + (void)_id; + (void)_a; +} + +const QMetaObject *FmGridViewEx::metaObject() const +{ + return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject; +} + +void *FmGridViewEx::qt_metacast(const char *_clname) +{ + if (!_clname) return nullptr; + if (!strcmp(_clname, qt_staticMetaObjectStaticContent.strings)) + return static_cast(this); + return QListView::qt_metacast(_clname); +} + +int FmGridViewEx::qt_metacall(QMetaObject::Call _c, int _id, void **_a) +{ + _id = QListView::qt_metacall(_c, _id, _a); + return _id; +} +namespace { +struct qt_meta_tag_ZN12FmListViewExE_t {}; +} // unnamed namespace + +template <> constexpr inline auto FmListViewEx::qt_create_metaobjectdata() +{ + namespace QMC = QtMocConstants; + QtMocHelpers::StringRefStorage qt_stringData { + "FmListViewEx" + }; + + QtMocHelpers::UintData qt_methods { + }; + QtMocHelpers::UintData qt_properties { + }; + QtMocHelpers::UintData qt_enums { + }; + return QtMocHelpers::metaObjectData(QMC::MetaObjectFlag{}, qt_stringData, + qt_methods, qt_properties, qt_enums); +} +Q_CONSTINIT const QMetaObject FmListViewEx::staticMetaObject = { { + QMetaObject::SuperData::link(), + qt_staticMetaObjectStaticContent.stringdata, + qt_staticMetaObjectStaticContent.data, + qt_static_metacall, + nullptr, + qt_staticMetaObjectRelocatingContent.metaTypes, + nullptr +} }; + +void FmListViewEx::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) +{ + auto *_t = static_cast(_o); + (void)_t; + (void)_c; + (void)_id; + (void)_a; +} + +const QMetaObject *FmListViewEx::metaObject() const +{ + return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject; +} + +void *FmListViewEx::qt_metacast(const char *_clname) +{ + if (!_clname) return nullptr; + if (!strcmp(_clname, qt_staticMetaObjectStaticContent.strings)) + return static_cast(this); + return QTableView::qt_metacast(_clname); +} + +int FmListViewEx::qt_metacall(QMetaObject::Call _c, int _id, void **_a) +{ + _id = QTableView::qt_metacall(_c, _id, _a); + return _id; +} +QT_WARNING_POP diff --git a/build-linux/kassetmanagerqt_autogen/UVLADIE3JM/moc_grid_scrub.cpp b/build-linux/kassetmanagerqt_autogen/UVLADIE3JM/moc_grid_scrub.cpp new file mode 100644 index 00000000..d192d779 --- /dev/null +++ b/build-linux/kassetmanagerqt_autogen/UVLADIE3JM/moc_grid_scrub.cpp @@ -0,0 +1,147 @@ +/**************************************************************************** +** Meta object code from reading C++ file 'grid_scrub.h' +** +** Created by: The Qt Meta Object Compiler version 69 (Qt 6.10.3) +** +** WARNING! All changes made in this file will be lost! +*****************************************************************************/ + +#include "../../../native/qt6/src/grid_scrub.h" +#include + +#include + +#include + + +#include +#if !defined(Q_MOC_OUTPUT_REVISION) +#error "The header file 'grid_scrub.h' doesn't include ." +#elif Q_MOC_OUTPUT_REVISION != 69 +#error "This file was generated using the moc from 6.10.3. It" +#error "cannot be used with the include files from this version of Qt." +#error "(The moc has changed too much.)" +#endif + +#ifndef Q_CONSTINIT +#define Q_CONSTINIT +#endif + +QT_WARNING_PUSH +QT_WARNING_DISABLE_DEPRECATED +QT_WARNING_DISABLE_GCC("-Wuseless-cast") +namespace { +struct qt_meta_tag_ZN16GridScrubOverlayE_t {}; +} // unnamed namespace + +template <> constexpr inline auto GridScrubOverlay::qt_create_metaobjectdata() +{ + namespace QMC = QtMocConstants; + QtMocHelpers::StringRefStorage qt_stringData { + "GridScrubOverlay" + }; + + QtMocHelpers::UintData qt_methods { + }; + QtMocHelpers::UintData qt_properties { + }; + QtMocHelpers::UintData qt_enums { + }; + return QtMocHelpers::metaObjectData(QMC::MetaObjectFlag{}, qt_stringData, + qt_methods, qt_properties, qt_enums); +} +Q_CONSTINIT const QMetaObject GridScrubOverlay::staticMetaObject = { { + QMetaObject::SuperData::link(), + qt_staticMetaObjectStaticContent.stringdata, + qt_staticMetaObjectStaticContent.data, + qt_static_metacall, + nullptr, + qt_staticMetaObjectRelocatingContent.metaTypes, + nullptr +} }; + +void GridScrubOverlay::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) +{ + auto *_t = static_cast(_o); + (void)_t; + (void)_c; + (void)_id; + (void)_a; +} + +const QMetaObject *GridScrubOverlay::metaObject() const +{ + return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject; +} + +void *GridScrubOverlay::qt_metacast(const char *_clname) +{ + if (!_clname) return nullptr; + if (!strcmp(_clname, qt_staticMetaObjectStaticContent.strings)) + return static_cast(this); + return QWidget::qt_metacast(_clname); +} + +int GridScrubOverlay::qt_metacall(QMetaObject::Call _c, int _id, void **_a) +{ + _id = QWidget::qt_metacall(_c, _id, _a); + return _id; +} +namespace { +struct qt_meta_tag_ZN19GridScrubControllerE_t {}; +} // unnamed namespace + +template <> constexpr inline auto GridScrubController::qt_create_metaobjectdata() +{ + namespace QMC = QtMocConstants; + QtMocHelpers::StringRefStorage qt_stringData { + "GridScrubController" + }; + + QtMocHelpers::UintData qt_methods { + }; + QtMocHelpers::UintData qt_properties { + }; + QtMocHelpers::UintData qt_enums { + }; + return QtMocHelpers::metaObjectData(QMC::MetaObjectFlag{}, qt_stringData, + qt_methods, qt_properties, qt_enums); +} +Q_CONSTINIT const QMetaObject GridScrubController::staticMetaObject = { { + QMetaObject::SuperData::link(), + qt_staticMetaObjectStaticContent.stringdata, + qt_staticMetaObjectStaticContent.data, + qt_static_metacall, + nullptr, + qt_staticMetaObjectRelocatingContent.metaTypes, + nullptr +} }; + +void GridScrubController::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) +{ + auto *_t = static_cast(_o); + (void)_t; + (void)_c; + (void)_id; + (void)_a; +} + +const QMetaObject *GridScrubController::metaObject() const +{ + return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject; +} + +void *GridScrubController::qt_metacast(const char *_clname) +{ + if (!_clname) return nullptr; + if (!strcmp(_clname, qt_staticMetaObjectStaticContent.strings)) + return static_cast(this); + return QObject::qt_metacast(_clname); +} + +int GridScrubController::qt_metacall(QMetaObject::Call _c, int _id, void **_a) +{ + _id = QObject::qt_metacall(_c, _id, _a); + return _id; +} +QT_WARNING_POP diff --git a/build-linux/kassetmanagerqt_autogen/UVLADIE3JM/moc_image_preview_overlay.cpp b/build-linux/kassetmanagerqt_autogen/UVLADIE3JM/moc_image_preview_overlay.cpp new file mode 100644 index 00000000..1a8fb89b --- /dev/null +++ b/build-linux/kassetmanagerqt_autogen/UVLADIE3JM/moc_image_preview_overlay.cpp @@ -0,0 +1,161 @@ +/**************************************************************************** +** Meta object code from reading C++ file 'image_preview_overlay.h' +** +** Created by: The Qt Meta Object Compiler version 69 (Qt 6.10.3) +** +** WARNING! All changes made in this file will be lost! +*****************************************************************************/ + +#include "../../../native/qt6/src/image_preview_overlay.h" +#include +#include + +#include + +#include + + +#include +#if !defined(Q_MOC_OUTPUT_REVISION) +#error "The header file 'image_preview_overlay.h' doesn't include ." +#elif Q_MOC_OUTPUT_REVISION != 69 +#error "This file was generated using the moc from 6.10.3. It" +#error "cannot be used with the include files from this version of Qt." +#error "(The moc has changed too much.)" +#endif + +#ifndef Q_CONSTINIT +#define Q_CONSTINIT +#endif + +QT_WARNING_PUSH +QT_WARNING_DISABLE_DEPRECATED +QT_WARNING_DISABLE_GCC("-Wuseless-cast") +namespace { +struct qt_meta_tag_ZN19ImagePreviewOverlayE_t {}; +} // unnamed namespace + +template <> constexpr inline auto ImagePreviewOverlay::qt_create_metaobjectdata() +{ + namespace QMC = QtMocConstants; + QtMocHelpers::StringRefStorage qt_stringData { + "ImagePreviewOverlay", + "closed", + "", + "navigateRequested", + "delta", + "onToggleAnnotation", + "onAnnotationToolSelected", + "onColorPicker", + "onPenWidthChanged", + "width", + "onClearAnnotations", + "onSaveAnnotatedFrame" + }; + + QtMocHelpers::UintData qt_methods { + // Signal 'closed' + QtMocHelpers::SignalData(1, 2, QMC::AccessPublic, QMetaType::Void), + // Signal 'navigateRequested' + QtMocHelpers::SignalData(3, 2, QMC::AccessPublic, QMetaType::Void, {{ + { QMetaType::Int, 4 }, + }}), + // Slot 'onToggleAnnotation' + QtMocHelpers::SlotData(5, 2, QMC::AccessPrivate, QMetaType::Void), + // Slot 'onAnnotationToolSelected' + QtMocHelpers::SlotData(6, 2, QMC::AccessPrivate, QMetaType::Void), + // Slot 'onColorPicker' + QtMocHelpers::SlotData(7, 2, QMC::AccessPrivate, QMetaType::Void), + // Slot 'onPenWidthChanged' + QtMocHelpers::SlotData(8, 2, QMC::AccessPrivate, QMetaType::Void, {{ + { QMetaType::Int, 9 }, + }}), + // Slot 'onClearAnnotations' + QtMocHelpers::SlotData(10, 2, QMC::AccessPrivate, QMetaType::Void), + // Slot 'onSaveAnnotatedFrame' + QtMocHelpers::SlotData(11, 2, QMC::AccessPrivate, QMetaType::Void), + }; + QtMocHelpers::UintData qt_properties { + }; + QtMocHelpers::UintData qt_enums { + }; + return QtMocHelpers::metaObjectData(QMC::MetaObjectFlag{}, qt_stringData, + qt_methods, qt_properties, qt_enums); +} +Q_CONSTINIT const QMetaObject ImagePreviewOverlay::staticMetaObject = { { + QMetaObject::SuperData::link(), + qt_staticMetaObjectStaticContent.stringdata, + qt_staticMetaObjectStaticContent.data, + qt_static_metacall, + nullptr, + qt_staticMetaObjectRelocatingContent.metaTypes, + nullptr +} }; + +void ImagePreviewOverlay::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) +{ + auto *_t = static_cast(_o); + if (_c == QMetaObject::InvokeMetaMethod) { + switch (_id) { + case 0: _t->closed(); break; + case 1: _t->navigateRequested((*reinterpret_cast>(_a[1]))); break; + case 2: _t->onToggleAnnotation(); break; + case 3: _t->onAnnotationToolSelected(); break; + case 4: _t->onColorPicker(); break; + case 5: _t->onPenWidthChanged((*reinterpret_cast>(_a[1]))); break; + case 6: _t->onClearAnnotations(); break; + case 7: _t->onSaveAnnotatedFrame(); break; + default: ; + } + } + if (_c == QMetaObject::IndexOfMethod) { + if (QtMocHelpers::indexOfMethod(_a, &ImagePreviewOverlay::closed, 0)) + return; + if (QtMocHelpers::indexOfMethod(_a, &ImagePreviewOverlay::navigateRequested, 1)) + return; + } +} + +const QMetaObject *ImagePreviewOverlay::metaObject() const +{ + return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject; +} + +void *ImagePreviewOverlay::qt_metacast(const char *_clname) +{ + if (!_clname) return nullptr; + if (!strcmp(_clname, qt_staticMetaObjectStaticContent.strings)) + return static_cast(this); + return QWidget::qt_metacast(_clname); +} + +int ImagePreviewOverlay::qt_metacall(QMetaObject::Call _c, int _id, void **_a) +{ + _id = QWidget::qt_metacall(_c, _id, _a); + if (_id < 0) + return _id; + if (_c == QMetaObject::InvokeMetaMethod) { + if (_id < 8) + qt_static_metacall(this, _c, _id, _a); + _id -= 8; + } + if (_c == QMetaObject::RegisterMethodArgumentMetaType) { + if (_id < 8) + *reinterpret_cast(_a[0]) = QMetaType(); + _id -= 8; + } + return _id; +} + +// SIGNAL 0 +void ImagePreviewOverlay::closed() +{ + QMetaObject::activate(this, &staticMetaObject, 0, nullptr); +} + +// SIGNAL 1 +void ImagePreviewOverlay::navigateRequested(int _t1) +{ + QMetaObject::activate(this, &staticMetaObject, 1, nullptr, _t1); +} +QT_WARNING_POP diff --git a/build-linux/kassetmanagerqt_autogen/UVLADIE3JM/moc_import_progress_dialog.cpp b/build-linux/kassetmanagerqt_autogen/UVLADIE3JM/moc_import_progress_dialog.cpp new file mode 100644 index 00000000..b707ad8c --- /dev/null +++ b/build-linux/kassetmanagerqt_autogen/UVLADIE3JM/moc_import_progress_dialog.cpp @@ -0,0 +1,91 @@ +/**************************************************************************** +** Meta object code from reading C++ file 'import_progress_dialog.h' +** +** Created by: The Qt Meta Object Compiler version 69 (Qt 6.10.3) +** +** WARNING! All changes made in this file will be lost! +*****************************************************************************/ + +#include "../../../native/qt6/src/import_progress_dialog.h" +#include +#include + +#include + +#include + + +#include +#if !defined(Q_MOC_OUTPUT_REVISION) +#error "The header file 'import_progress_dialog.h' doesn't include ." +#elif Q_MOC_OUTPUT_REVISION != 69 +#error "This file was generated using the moc from 6.10.3. It" +#error "cannot be used with the include files from this version of Qt." +#error "(The moc has changed too much.)" +#endif + +#ifndef Q_CONSTINIT +#define Q_CONSTINIT +#endif + +QT_WARNING_PUSH +QT_WARNING_DISABLE_DEPRECATED +QT_WARNING_DISABLE_GCC("-Wuseless-cast") +namespace { +struct qt_meta_tag_ZN20ImportProgressDialogE_t {}; +} // unnamed namespace + +template <> constexpr inline auto ImportProgressDialog::qt_create_metaobjectdata() +{ + namespace QMC = QtMocConstants; + QtMocHelpers::StringRefStorage qt_stringData { + "ImportProgressDialog" + }; + + QtMocHelpers::UintData qt_methods { + }; + QtMocHelpers::UintData qt_properties { + }; + QtMocHelpers::UintData qt_enums { + }; + return QtMocHelpers::metaObjectData(QMC::MetaObjectFlag{}, qt_stringData, + qt_methods, qt_properties, qt_enums); +} +Q_CONSTINIT const QMetaObject ImportProgressDialog::staticMetaObject = { { + QMetaObject::SuperData::link(), + qt_staticMetaObjectStaticContent.stringdata, + qt_staticMetaObjectStaticContent.data, + qt_static_metacall, + nullptr, + qt_staticMetaObjectRelocatingContent.metaTypes, + nullptr +} }; + +void ImportProgressDialog::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) +{ + auto *_t = static_cast(_o); + (void)_t; + (void)_c; + (void)_id; + (void)_a; +} + +const QMetaObject *ImportProgressDialog::metaObject() const +{ + return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject; +} + +void *ImportProgressDialog::qt_metacast(const char *_clname) +{ + if (!_clname) return nullptr; + if (!strcmp(_clname, qt_staticMetaObjectStaticContent.strings)) + return static_cast(this); + return QDialog::qt_metacast(_clname); +} + +int ImportProgressDialog::qt_metacall(QMetaObject::Call _c, int _id, void **_a) +{ + _id = QDialog::qt_metacall(_c, _id, _a); + return _id; +} +QT_WARNING_POP diff --git a/build-linux/kassetmanagerqt_autogen/UVLADIE3JM/moc_importer.cpp b/build-linux/kassetmanagerqt_autogen/UVLADIE3JM/moc_importer.cpp new file mode 100644 index 00000000..0cbbda36 --- /dev/null +++ b/build-linux/kassetmanagerqt_autogen/UVLADIE3JM/moc_importer.cpp @@ -0,0 +1,179 @@ +/**************************************************************************** +** Meta object code from reading C++ file 'importer.h' +** +** Created by: The Qt Meta Object Compiler version 69 (Qt 6.10.3) +** +** WARNING! All changes made in this file will be lost! +*****************************************************************************/ + +#include "../../../native/qt6/src/importer.h" +#include + +#include + +#include + + +#include +#if !defined(Q_MOC_OUTPUT_REVISION) +#error "The header file 'importer.h' doesn't include ." +#elif Q_MOC_OUTPUT_REVISION != 69 +#error "This file was generated using the moc from 6.10.3. It" +#error "cannot be used with the include files from this version of Qt." +#error "(The moc has changed too much.)" +#endif + +#ifndef Q_CONSTINIT +#define Q_CONSTINIT +#endif + +QT_WARNING_PUSH +QT_WARNING_DISABLE_DEPRECATED +QT_WARNING_DISABLE_GCC("-Wuseless-cast") +namespace { +struct qt_meta_tag_ZN8ImporterE_t {}; +} // unnamed namespace + +template <> constexpr inline auto Importer::qt_create_metaobjectdata() +{ + namespace QMC = QtMocConstants; + QtMocHelpers::StringRefStorage qt_stringData { + "Importer", + "importCompleted", + "", + "filesImported", + "progressChanged", + "current", + "total", + "currentFileChanged", + "fileName", + "currentFolderChanged", + "folderName", + "importFinished" + }; + + QtMocHelpers::UintData qt_methods { + // Signal 'importCompleted' + QtMocHelpers::SignalData(1, 2, QMC::AccessPublic, QMetaType::Void, {{ + { QMetaType::Int, 3 }, + }}), + // Signal 'progressChanged' + QtMocHelpers::SignalData(4, 2, QMC::AccessPublic, QMetaType::Void, {{ + { QMetaType::Int, 5 }, { QMetaType::Int, 6 }, + }}), + // Signal 'currentFileChanged' + QtMocHelpers::SignalData(7, 2, QMC::AccessPublic, QMetaType::Void, {{ + { QMetaType::QString, 8 }, + }}), + // Signal 'currentFolderChanged' + QtMocHelpers::SignalData(9, 2, QMC::AccessPublic, QMetaType::Void, {{ + { QMetaType::QString, 10 }, + }}), + // Signal 'importFinished' + QtMocHelpers::SignalData(11, 2, QMC::AccessPublic, QMetaType::Void), + }; + QtMocHelpers::UintData qt_properties { + }; + QtMocHelpers::UintData qt_enums { + }; + return QtMocHelpers::metaObjectData(QMC::MetaObjectFlag{}, qt_stringData, + qt_methods, qt_properties, qt_enums); +} +Q_CONSTINIT const QMetaObject Importer::staticMetaObject = { { + QMetaObject::SuperData::link(), + qt_staticMetaObjectStaticContent.stringdata, + qt_staticMetaObjectStaticContent.data, + qt_static_metacall, + nullptr, + qt_staticMetaObjectRelocatingContent.metaTypes, + nullptr +} }; + +void Importer::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) +{ + auto *_t = static_cast(_o); + if (_c == QMetaObject::InvokeMetaMethod) { + switch (_id) { + case 0: _t->importCompleted((*reinterpret_cast>(_a[1]))); break; + case 1: _t->progressChanged((*reinterpret_cast>(_a[1])),(*reinterpret_cast>(_a[2]))); break; + case 2: _t->currentFileChanged((*reinterpret_cast>(_a[1]))); break; + case 3: _t->currentFolderChanged((*reinterpret_cast>(_a[1]))); break; + case 4: _t->importFinished(); break; + default: ; + } + } + if (_c == QMetaObject::IndexOfMethod) { + if (QtMocHelpers::indexOfMethod(_a, &Importer::importCompleted, 0)) + return; + if (QtMocHelpers::indexOfMethod(_a, &Importer::progressChanged, 1)) + return; + if (QtMocHelpers::indexOfMethod(_a, &Importer::currentFileChanged, 2)) + return; + if (QtMocHelpers::indexOfMethod(_a, &Importer::currentFolderChanged, 3)) + return; + if (QtMocHelpers::indexOfMethod(_a, &Importer::importFinished, 4)) + return; + } +} + +const QMetaObject *Importer::metaObject() const +{ + return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject; +} + +void *Importer::qt_metacast(const char *_clname) +{ + if (!_clname) return nullptr; + if (!strcmp(_clname, qt_staticMetaObjectStaticContent.strings)) + return static_cast(this); + return QObject::qt_metacast(_clname); +} + +int Importer::qt_metacall(QMetaObject::Call _c, int _id, void **_a) +{ + _id = QObject::qt_metacall(_c, _id, _a); + if (_id < 0) + return _id; + if (_c == QMetaObject::InvokeMetaMethod) { + if (_id < 5) + qt_static_metacall(this, _c, _id, _a); + _id -= 5; + } + if (_c == QMetaObject::RegisterMethodArgumentMetaType) { + if (_id < 5) + *reinterpret_cast(_a[0]) = QMetaType(); + _id -= 5; + } + return _id; +} + +// SIGNAL 0 +void Importer::importCompleted(int _t1) +{ + QMetaObject::activate(this, &staticMetaObject, 0, nullptr, _t1); +} + +// SIGNAL 1 +void Importer::progressChanged(int _t1, int _t2) +{ + QMetaObject::activate(this, &staticMetaObject, 1, nullptr, _t1, _t2); +} + +// SIGNAL 2 +void Importer::currentFileChanged(const QString & _t1) +{ + QMetaObject::activate(this, &staticMetaObject, 2, nullptr, _t1); +} + +// SIGNAL 3 +void Importer::currentFolderChanged(const QString & _t1) +{ + QMetaObject::activate(this, &staticMetaObject, 3, nullptr, _t1); +} + +// SIGNAL 4 +void Importer::importFinished() +{ + QMetaObject::activate(this, &staticMetaObject, 4, nullptr); +} +QT_WARNING_POP diff --git a/build-linux/kassetmanagerqt_autogen/UVLADIE3JM/moc_live_preview_manager.cpp b/build-linux/kassetmanagerqt_autogen/UVLADIE3JM/moc_live_preview_manager.cpp new file mode 100644 index 00000000..6c0a7368 --- /dev/null +++ b/build-linux/kassetmanagerqt_autogen/UVLADIE3JM/moc_live_preview_manager.cpp @@ -0,0 +1,156 @@ +/**************************************************************************** +** Meta object code from reading C++ file 'live_preview_manager.h' +** +** Created by: The Qt Meta Object Compiler version 69 (Qt 6.10.3) +** +** WARNING! All changes made in this file will be lost! +*****************************************************************************/ + +#include "../../../native/qt6/src/live_preview_manager.h" +#include + +#include + +#include + + +#include +#if !defined(Q_MOC_OUTPUT_REVISION) +#error "The header file 'live_preview_manager.h' doesn't include ." +#elif Q_MOC_OUTPUT_REVISION != 69 +#error "This file was generated using the moc from 6.10.3. It" +#error "cannot be used with the include files from this version of Qt." +#error "(The moc has changed too much.)" +#endif + +#ifndef Q_CONSTINIT +#define Q_CONSTINIT +#endif + +QT_WARNING_PUSH +QT_WARNING_DISABLE_DEPRECATED +QT_WARNING_DISABLE_GCC("-Wuseless-cast") +namespace { +struct qt_meta_tag_ZN18LivePreviewManagerE_t {}; +} // unnamed namespace + +template <> constexpr inline auto LivePreviewManager::qt_create_metaobjectdata() +{ + namespace QMC = QtMocConstants; + QtMocHelpers::StringRefStorage qt_stringData { + "LivePreviewManager", + "frameReady", + "", + "filePath", + "position", + "QSize", + "targetSize", + "QPixmap", + "pixmap", + "frameFailed", + "errorString", + "cacheStatus", + "status" + }; + + QtMocHelpers::UintData qt_methods { + // Signal 'frameReady' + QtMocHelpers::SignalData(1, 2, QMC::AccessPublic, QMetaType::Void, {{ + { QMetaType::QString, 3 }, { QMetaType::QReal, 4 }, { 0x80000000 | 5, 6 }, { 0x80000000 | 7, 8 }, + }}), + // Signal 'frameFailed' + QtMocHelpers::SignalData(9, 2, QMC::AccessPublic, QMetaType::Void, {{ + { QMetaType::QString, 3 }, { QMetaType::QString, 10 }, + }}), + // Signal 'cacheStatus' + QtMocHelpers::SignalData(11, 2, QMC::AccessPublic, QMetaType::Void, {{ + { QMetaType::QString, 12 }, + }}), + }; + QtMocHelpers::UintData qt_properties { + }; + QtMocHelpers::UintData qt_enums { + }; + return QtMocHelpers::metaObjectData(QMC::MetaObjectFlag{}, qt_stringData, + qt_methods, qt_properties, qt_enums); +} +Q_CONSTINIT const QMetaObject LivePreviewManager::staticMetaObject = { { + QMetaObject::SuperData::link(), + qt_staticMetaObjectStaticContent.stringdata, + qt_staticMetaObjectStaticContent.data, + qt_static_metacall, + nullptr, + qt_staticMetaObjectRelocatingContent.metaTypes, + nullptr +} }; + +void LivePreviewManager::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) +{ + auto *_t = static_cast(_o); + if (_c == QMetaObject::InvokeMetaMethod) { + switch (_id) { + case 0: _t->frameReady((*reinterpret_cast>(_a[1])),(*reinterpret_cast>(_a[2])),(*reinterpret_cast>(_a[3])),(*reinterpret_cast>(_a[4]))); break; + case 1: _t->frameFailed((*reinterpret_cast>(_a[1])),(*reinterpret_cast>(_a[2]))); break; + case 2: _t->cacheStatus((*reinterpret_cast>(_a[1]))); break; + default: ; + } + } + if (_c == QMetaObject::IndexOfMethod) { + if (QtMocHelpers::indexOfMethod(_a, &LivePreviewManager::frameReady, 0)) + return; + if (QtMocHelpers::indexOfMethod(_a, &LivePreviewManager::frameFailed, 1)) + return; + if (QtMocHelpers::indexOfMethod(_a, &LivePreviewManager::cacheStatus, 2)) + return; + } +} + +const QMetaObject *LivePreviewManager::metaObject() const +{ + return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject; +} + +void *LivePreviewManager::qt_metacast(const char *_clname) +{ + if (!_clname) return nullptr; + if (!strcmp(_clname, qt_staticMetaObjectStaticContent.strings)) + return static_cast(this); + return QObject::qt_metacast(_clname); +} + +int LivePreviewManager::qt_metacall(QMetaObject::Call _c, int _id, void **_a) +{ + _id = QObject::qt_metacall(_c, _id, _a); + if (_id < 0) + return _id; + if (_c == QMetaObject::InvokeMetaMethod) { + if (_id < 3) + qt_static_metacall(this, _c, _id, _a); + _id -= 3; + } + if (_c == QMetaObject::RegisterMethodArgumentMetaType) { + if (_id < 3) + *reinterpret_cast(_a[0]) = QMetaType(); + _id -= 3; + } + return _id; +} + +// SIGNAL 0 +void LivePreviewManager::frameReady(const QString & _t1, qreal _t2, QSize _t3, const QPixmap & _t4) +{ + QMetaObject::activate(this, &staticMetaObject, 0, nullptr, _t1, _t2, _t3, _t4); +} + +// SIGNAL 1 +void LivePreviewManager::frameFailed(const QString & _t1, QString _t2) +{ + QMetaObject::activate(this, &staticMetaObject, 1, nullptr, _t1, _t2); +} + +// SIGNAL 2 +void LivePreviewManager::cacheStatus(const QString & _t1) +{ + QMetaObject::activate(this, &staticMetaObject, 2, nullptr, _t1); +} +QT_WARNING_POP diff --git a/build-linux/kassetmanagerqt_autogen/UVLADIE3JM/moc_log_manager.cpp b/build-linux/kassetmanagerqt_autogen/UVLADIE3JM/moc_log_manager.cpp new file mode 100644 index 00000000..c4d5a255 --- /dev/null +++ b/build-linux/kassetmanagerqt_autogen/UVLADIE3JM/moc_log_manager.cpp @@ -0,0 +1,165 @@ +/**************************************************************************** +** Meta object code from reading C++ file 'log_manager.h' +** +** Created by: The Qt Meta Object Compiler version 69 (Qt 6.10.3) +** +** WARNING! All changes made in this file will be lost! +*****************************************************************************/ + +#include "../../../native/qt6/src/log_manager.h" +#include + +#include + +#include + + +#include +#if !defined(Q_MOC_OUTPUT_REVISION) +#error "The header file 'log_manager.h' doesn't include ." +#elif Q_MOC_OUTPUT_REVISION != 69 +#error "This file was generated using the moc from 6.10.3. It" +#error "cannot be used with the include files from this version of Qt." +#error "(The moc has changed too much.)" +#endif + +#ifndef Q_CONSTINIT +#define Q_CONSTINIT +#endif + +QT_WARNING_PUSH +QT_WARNING_DISABLE_DEPRECATED +QT_WARNING_DISABLE_GCC("-Wuseless-cast") +namespace { +struct qt_meta_tag_ZN10LogManagerE_t {}; +} // unnamed namespace + +template <> constexpr inline auto LogManager::qt_create_metaobjectdata() +{ + namespace QMC = QtMocConstants; + QtMocHelpers::StringRefStorage qt_stringData { + "LogManager", + "logsChanged", + "", + "logAdded", + "message", + "addLog", + "level", + "clear", + "logs" + }; + + QtMocHelpers::UintData qt_methods { + // Signal 'logsChanged' + QtMocHelpers::SignalData(1, 2, QMC::AccessPublic, QMetaType::Void), + // Signal 'logAdded' + QtMocHelpers::SignalData(3, 2, QMC::AccessPublic, QMetaType::Void, {{ + { QMetaType::QString, 4 }, + }}), + // Method 'addLog' + QtMocHelpers::MethodData(5, 2, QMC::AccessPublic, QMetaType::Void, {{ + { QMetaType::QString, 4 }, { QMetaType::QString, 6 }, + }}), + // Method 'addLog' + QtMocHelpers::MethodData(5, 2, QMC::AccessPublic | QMC::MethodCloned, QMetaType::Void, {{ + { QMetaType::QString, 4 }, + }}), + // Method 'clear' + QtMocHelpers::MethodData(7, 2, QMC::AccessPublic, QMetaType::Void), + }; + QtMocHelpers::UintData qt_properties { + // property 'logs' + QtMocHelpers::PropertyData(8, QMetaType::QStringList, QMC::DefaultPropertyFlags, 0), + }; + QtMocHelpers::UintData qt_enums { + }; + return QtMocHelpers::metaObjectData(QMC::MetaObjectFlag{}, qt_stringData, + qt_methods, qt_properties, qt_enums); +} +Q_CONSTINIT const QMetaObject LogManager::staticMetaObject = { { + QMetaObject::SuperData::link(), + qt_staticMetaObjectStaticContent.stringdata, + qt_staticMetaObjectStaticContent.data, + qt_static_metacall, + nullptr, + qt_staticMetaObjectRelocatingContent.metaTypes, + nullptr +} }; + +void LogManager::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) +{ + auto *_t = static_cast(_o); + if (_c == QMetaObject::InvokeMetaMethod) { + switch (_id) { + case 0: _t->logsChanged(); break; + case 1: _t->logAdded((*reinterpret_cast>(_a[1]))); break; + case 2: _t->addLog((*reinterpret_cast>(_a[1])),(*reinterpret_cast>(_a[2]))); break; + case 3: _t->addLog((*reinterpret_cast>(_a[1]))); break; + case 4: _t->clear(); break; + default: ; + } + } + if (_c == QMetaObject::IndexOfMethod) { + if (QtMocHelpers::indexOfMethod(_a, &LogManager::logsChanged, 0)) + return; + if (QtMocHelpers::indexOfMethod(_a, &LogManager::logAdded, 1)) + return; + } + if (_c == QMetaObject::ReadProperty) { + void *_v = _a[0]; + switch (_id) { + case 0: *reinterpret_cast(_v) = _t->logs(); break; + default: break; + } + } +} + +const QMetaObject *LogManager::metaObject() const +{ + return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject; +} + +void *LogManager::qt_metacast(const char *_clname) +{ + if (!_clname) return nullptr; + if (!strcmp(_clname, qt_staticMetaObjectStaticContent.strings)) + return static_cast(this); + return QObject::qt_metacast(_clname); +} + +int LogManager::qt_metacall(QMetaObject::Call _c, int _id, void **_a) +{ + _id = QObject::qt_metacall(_c, _id, _a); + if (_id < 0) + return _id; + if (_c == QMetaObject::InvokeMetaMethod) { + if (_id < 5) + qt_static_metacall(this, _c, _id, _a); + _id -= 5; + } + if (_c == QMetaObject::RegisterMethodArgumentMetaType) { + if (_id < 5) + *reinterpret_cast(_a[0]) = QMetaType(); + _id -= 5; + } + if (_c == QMetaObject::ReadProperty || _c == QMetaObject::WriteProperty + || _c == QMetaObject::ResetProperty || _c == QMetaObject::BindableProperty + || _c == QMetaObject::RegisterPropertyMetaType) { + qt_static_metacall(this, _c, _id, _a); + _id -= 1; + } + return _id; +} + +// SIGNAL 0 +void LogManager::logsChanged() +{ + QMetaObject::activate(this, &staticMetaObject, 0, nullptr); +} + +// SIGNAL 1 +void LogManager::logAdded(const QString & _t1) +{ + QMetaObject::activate(this, &staticMetaObject, 1, nullptr, _t1); +} +QT_WARNING_POP diff --git a/build-linux/kassetmanagerqt_autogen/UVLADIE3JM/moc_log_viewer_widget.cpp b/build-linux/kassetmanagerqt_autogen/UVLADIE3JM/moc_log_viewer_widget.cpp new file mode 100644 index 00000000..5e578470 --- /dev/null +++ b/build-linux/kassetmanagerqt_autogen/UVLADIE3JM/moc_log_viewer_widget.cpp @@ -0,0 +1,123 @@ +/**************************************************************************** +** Meta object code from reading C++ file 'log_viewer_widget.h' +** +** Created by: The Qt Meta Object Compiler version 69 (Qt 6.10.3) +** +** WARNING! All changes made in this file will be lost! +*****************************************************************************/ + +#include "../../../native/qt6/src/log_viewer_widget.h" +#include +#include + +#include + +#include + + +#include +#if !defined(Q_MOC_OUTPUT_REVISION) +#error "The header file 'log_viewer_widget.h' doesn't include ." +#elif Q_MOC_OUTPUT_REVISION != 69 +#error "This file was generated using the moc from 6.10.3. It" +#error "cannot be used with the include files from this version of Qt." +#error "(The moc has changed too much.)" +#endif + +#ifndef Q_CONSTINIT +#define Q_CONSTINIT +#endif + +QT_WARNING_PUSH +QT_WARNING_DISABLE_DEPRECATED +QT_WARNING_DISABLE_GCC("-Wuseless-cast") +namespace { +struct qt_meta_tag_ZN15LogViewerWidgetE_t {}; +} // unnamed namespace + +template <> constexpr inline auto LogViewerWidget::qt_create_metaobjectdata() +{ + namespace QMC = QtMocConstants; + QtMocHelpers::StringRefStorage qt_stringData { + "LogViewerWidget", + "onLogAdded", + "", + "message", + "onFilterChanged", + "index", + "onClearLogs" + }; + + QtMocHelpers::UintData qt_methods { + // Slot 'onLogAdded' + QtMocHelpers::SlotData(1, 2, QMC::AccessPrivate, QMetaType::Void, {{ + { QMetaType::QString, 3 }, + }}), + // Slot 'onFilterChanged' + QtMocHelpers::SlotData(4, 2, QMC::AccessPrivate, QMetaType::Void, {{ + { QMetaType::Int, 5 }, + }}), + // Slot 'onClearLogs' + QtMocHelpers::SlotData(6, 2, QMC::AccessPrivate, QMetaType::Void), + }; + QtMocHelpers::UintData qt_properties { + }; + QtMocHelpers::UintData qt_enums { + }; + return QtMocHelpers::metaObjectData(QMC::MetaObjectFlag{}, qt_stringData, + qt_methods, qt_properties, qt_enums); +} +Q_CONSTINIT const QMetaObject LogViewerWidget::staticMetaObject = { { + QMetaObject::SuperData::link(), + qt_staticMetaObjectStaticContent.stringdata, + qt_staticMetaObjectStaticContent.data, + qt_static_metacall, + nullptr, + qt_staticMetaObjectRelocatingContent.metaTypes, + nullptr +} }; + +void LogViewerWidget::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) +{ + auto *_t = static_cast(_o); + if (_c == QMetaObject::InvokeMetaMethod) { + switch (_id) { + case 0: _t->onLogAdded((*reinterpret_cast>(_a[1]))); break; + case 1: _t->onFilterChanged((*reinterpret_cast>(_a[1]))); break; + case 2: _t->onClearLogs(); break; + default: ; + } + } +} + +const QMetaObject *LogViewerWidget::metaObject() const +{ + return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject; +} + +void *LogViewerWidget::qt_metacast(const char *_clname) +{ + if (!_clname) return nullptr; + if (!strcmp(_clname, qt_staticMetaObjectStaticContent.strings)) + return static_cast(this); + return QWidget::qt_metacast(_clname); +} + +int LogViewerWidget::qt_metacall(QMetaObject::Call _c, int _id, void **_a) +{ + _id = QWidget::qt_metacall(_c, _id, _a); + if (_id < 0) + return _id; + if (_c == QMetaObject::InvokeMetaMethod) { + if (_id < 3) + qt_static_metacall(this, _c, _id, _a); + _id -= 3; + } + if (_c == QMetaObject::RegisterMethodArgumentMetaType) { + if (_id < 3) + *reinterpret_cast(_a[0]) = QMetaType(); + _id -= 3; + } + return _id; +} +QT_WARNING_POP diff --git a/build-linux/kassetmanagerqt_autogen/UVLADIE3JM/moc_mainwindow.cpp b/build-linux/kassetmanagerqt_autogen/UVLADIE3JM/moc_mainwindow.cpp new file mode 100644 index 00000000..898ab94a --- /dev/null +++ b/build-linux/kassetmanagerqt_autogen/UVLADIE3JM/moc_mainwindow.cpp @@ -0,0 +1,729 @@ +/**************************************************************************** +** Meta object code from reading C++ file 'mainwindow.h' +** +** Created by: The Qt Meta Object Compiler version 69 (Qt 6.10.3) +** +** WARNING! All changes made in this file will be lost! +*****************************************************************************/ + +#include "../../../native/qt6/src/mainwindow.h" +#include +#include + +#include + +#include + + +#include +#if !defined(Q_MOC_OUTPUT_REVISION) +#error "The header file 'mainwindow.h' doesn't include ." +#elif Q_MOC_OUTPUT_REVISION != 69 +#error "This file was generated using the moc from 6.10.3. It" +#error "cannot be used with the include files from this version of Qt." +#error "(The moc has changed too much.)" +#endif + +#ifndef Q_CONSTINIT +#define Q_CONSTINIT +#endif + +QT_WARNING_PUSH +QT_WARNING_DISABLE_DEPRECATED +QT_WARNING_DISABLE_GCC("-Wuseless-cast") +namespace { +struct qt_meta_tag_ZN10MainWindowE_t {}; +} // unnamed namespace + +template <> constexpr inline auto MainWindow::qt_create_metaobjectdata() +{ + namespace QMC = QtMocConstants; + QtMocHelpers::StringRefStorage qt_stringData { + "MainWindow", + "onFolderSelected", + "", + "QModelIndex", + "index", + "onAssetSelectionChanged", + "onAssetDoubleClicked", + "onAssetContextMenu", + "QPoint", + "pos", + "onFolderContextMenu", + "onEmptySpaceContextMenu", + "showPreview", + "closePreview", + "changePreview", + "delta", + "applyFilters", + "clearFilters", + "onSearchTextChanged", + "text", + "onCreateTag", + "onApplyTags", + "onFilterByTags", + "onTagContextMenu", + "updateTagButtonStates", + "onOpenSettings", + "onThumbnailSizeChanged", + "size", + "onViewModeChanged", + "importFiles", + "filePaths", + "onImportProgress", + "current", + "total", + "onImportFileChanged", + "fileName", + "onImportFolderChanged", + "folderName", + "onImportComplete", + "onRatingChanged", + "rating", + "onPrefetchLivePreviewsForFolder", + "onRefreshLivePreviewsForFolder", + "onPrefetchLivePreviewsRecursive", + "onRefreshLivePreviewsRecursive", + "onAddProjectFolder", + "onRefreshAssets", + "onLockToggled", + "checked", + "onProjectFolderChanged", + "projectFolderId", + "path", + "onRevertSelectedVersion", + "onAssetVersionsChanged", + "assetId", + "onToggleLogViewer", + "showDatabaseHealthDialog", + "performStartupHealthCheck", + "onTabChanged", + "onPmProjectSelected", + "onPmFolderSelected", + "onPmAssetSelectionChanged", + "onPmAssetDoubleClicked", + "onPmAssetContextMenu", + "onPmProjectContextMenu", + "onPmFolderContextMenu", + "onPmCreateProject", + "pmImportToProject", + "name", + "watchPath", + "onPmRenameProject", + "onPmDeleteProject", + "onPmAddWatchFolder", + "onPmViewModeToggled", + "onPmThumbnailSizeChanged", + "onPmToggleShowAllVersions", + "onPmVersionSelected", + "versionPath", + "onPmVersionDropdownRequested", + "globalPos", + "onPmRefresh", + "generateProjectThumbnails", + "projectId", + "forceRefresh", + "onPmMarkNotificationsRead", + "onPmShowNotifications", + "onPmNewFilesDetected", + "newFiles", + "onPmFilesRemoved", + "removedFiles", + "onPmOpenOverlay", + "changePmPreview", + "onPmNavigateBack", + "onPmNavigateUp", + "onPmCopy", + "onPmCut", + "onPmPaste", + "onPmDelete", + "onPmRename", + "onPmNewFolder", + "onPmOpenExternal", + "onPmTogglePreview", + "onPmGroupSequencesToggled", + "onShowUserGuide", + "onAboutKAssetManager", + "onAssetNavigateBack", + "onAssetNavigateUp", + "onAssetNewFolder", + "onAssetGroupSequencesToggled", + "onAssetFoldersModelAboutToReset", + "onAssetFoldersModelReset", + "onFmTreeCurrentChanged", + "previous", + "onFmTreeActivated", + "onFmTreeContextMenu", + "onFmItemDoubleClicked", + "onFmViewModeToggled", + "onFmThumbnailSizeChanged", + "onAddSelectionToAssetLibrary", + "onAddTreeSelectionToAssetLibrary", + "onFmAddToFavorites", + "onFmRemoveFavorite", + "onFmFavoriteActivated", + "QListWidgetItem*", + "item", + "onFmNavigateBack", + "onFmNavigateUp", + "onFmCopy", + "onFmCut", + "onFmPaste", + "onFmDelete", + "onFmDeletePermanent", + "onFmRename", + "onFmBulkRename", + "onFmNewFolder", + "onFmCreateFolderWithSelected", + "onFmShowContextMenu", + "onFmBackToParent", + "onFmRefresh", + "onFmLightRefresh", + "onFmGroupSequencesToggled", + "onFmHideFoldersToggled", + "onFmToggleSecondPane", + "onFmSyncNavToggled", + "onEverythingSearchAssetManager", + "onEverythingSearchFileManager", + "onEverythingImportRequested", + "paths", + "onFmSelectionChanged", + "onFmTogglePreview", + "onFmOpenOverlay", + "changeFmPreview", + "applyTheme", + "onFmTreeChildrenFetched", + "parent" + }; + + QtMocHelpers::UintData qt_methods { + // Slot 'onFolderSelected' + QtMocHelpers::SlotData(1, 2, QMC::AccessPrivate, QMetaType::Void, {{ + { 0x80000000 | 3, 4 }, + }}), + // Slot 'onAssetSelectionChanged' + QtMocHelpers::SlotData(5, 2, QMC::AccessPrivate, QMetaType::Void), + // Slot 'onAssetDoubleClicked' + QtMocHelpers::SlotData(6, 2, QMC::AccessPrivate, QMetaType::Void, {{ + { 0x80000000 | 3, 4 }, + }}), + // Slot 'onAssetContextMenu' + QtMocHelpers::SlotData(7, 2, QMC::AccessPrivate, QMetaType::Void, {{ + { 0x80000000 | 8, 9 }, + }}), + // Slot 'onFolderContextMenu' + QtMocHelpers::SlotData(10, 2, QMC::AccessPrivate, QMetaType::Void, {{ + { 0x80000000 | 8, 9 }, + }}), + // Slot 'onEmptySpaceContextMenu' + QtMocHelpers::SlotData(11, 2, QMC::AccessPrivate, QMetaType::Void, {{ + { 0x80000000 | 8, 9 }, + }}), + // Slot 'showPreview' + QtMocHelpers::SlotData(12, 2, QMC::AccessPrivate, QMetaType::Void, {{ + { QMetaType::Int, 4 }, + }}), + // Slot 'closePreview' + QtMocHelpers::SlotData(13, 2, QMC::AccessPrivate, QMetaType::Void), + // Slot 'changePreview' + QtMocHelpers::SlotData(14, 2, QMC::AccessPrivate, QMetaType::Void, {{ + { QMetaType::Int, 15 }, + }}), + // Slot 'applyFilters' + QtMocHelpers::SlotData(16, 2, QMC::AccessPrivate, QMetaType::Void), + // Slot 'clearFilters' + QtMocHelpers::SlotData(17, 2, QMC::AccessPrivate, QMetaType::Void), + // Slot 'onSearchTextChanged' + QtMocHelpers::SlotData(18, 2, QMC::AccessPrivate, QMetaType::Void, {{ + { QMetaType::QString, 19 }, + }}), + // Slot 'onCreateTag' + QtMocHelpers::SlotData(20, 2, QMC::AccessPrivate, QMetaType::Void), + // Slot 'onApplyTags' + QtMocHelpers::SlotData(21, 2, QMC::AccessPrivate, QMetaType::Void), + // Slot 'onFilterByTags' + QtMocHelpers::SlotData(22, 2, QMC::AccessPrivate, QMetaType::Void), + // Slot 'onTagContextMenu' + QtMocHelpers::SlotData(23, 2, QMC::AccessPrivate, QMetaType::Void, {{ + { 0x80000000 | 8, 9 }, + }}), + // Slot 'updateTagButtonStates' + QtMocHelpers::SlotData(24, 2, QMC::AccessPrivate, QMetaType::Void), + // Slot 'onOpenSettings' + QtMocHelpers::SlotData(25, 2, QMC::AccessPrivate, QMetaType::Void), + // Slot 'onThumbnailSizeChanged' + QtMocHelpers::SlotData(26, 2, QMC::AccessPrivate, QMetaType::Void, {{ + { QMetaType::Int, 27 }, + }}), + // Slot 'onViewModeChanged' + QtMocHelpers::SlotData(28, 2, QMC::AccessPrivate, QMetaType::Void), + // Slot 'importFiles' + QtMocHelpers::SlotData(29, 2, QMC::AccessPrivate, QMetaType::Void, {{ + { QMetaType::QStringList, 30 }, + }}), + // Slot 'onImportProgress' + QtMocHelpers::SlotData(31, 2, QMC::AccessPrivate, QMetaType::Void, {{ + { QMetaType::Int, 32 }, { QMetaType::Int, 33 }, + }}), + // Slot 'onImportFileChanged' + QtMocHelpers::SlotData(34, 2, QMC::AccessPrivate, QMetaType::Void, {{ + { QMetaType::QString, 35 }, + }}), + // Slot 'onImportFolderChanged' + QtMocHelpers::SlotData(36, 2, QMC::AccessPrivate, QMetaType::Void, {{ + { QMetaType::QString, 37 }, + }}), + // Slot 'onImportComplete' + QtMocHelpers::SlotData(38, 2, QMC::AccessPrivate, QMetaType::Void), + // Slot 'onRatingChanged' + QtMocHelpers::SlotData(39, 2, QMC::AccessPrivate, QMetaType::Void, {{ + { QMetaType::Int, 40 }, + }}), + // Slot 'onPrefetchLivePreviewsForFolder' + QtMocHelpers::SlotData(41, 2, QMC::AccessPrivate, QMetaType::Void), + // Slot 'onRefreshLivePreviewsForFolder' + QtMocHelpers::SlotData(42, 2, QMC::AccessPrivate, QMetaType::Void), + // Slot 'onPrefetchLivePreviewsRecursive' + QtMocHelpers::SlotData(43, 2, QMC::AccessPrivate, QMetaType::Void), + // Slot 'onRefreshLivePreviewsRecursive' + QtMocHelpers::SlotData(44, 2, QMC::AccessPrivate, QMetaType::Void), + // Slot 'onAddProjectFolder' + QtMocHelpers::SlotData(45, 2, QMC::AccessPrivate, QMetaType::Void), + // Slot 'onRefreshAssets' + QtMocHelpers::SlotData(46, 2, QMC::AccessPrivate, QMetaType::Void), + // Slot 'onLockToggled' + QtMocHelpers::SlotData(47, 2, QMC::AccessPrivate, QMetaType::Void, {{ + { QMetaType::Bool, 48 }, + }}), + // Slot 'onProjectFolderChanged' + QtMocHelpers::SlotData(49, 2, QMC::AccessPrivate, QMetaType::Void, {{ + { QMetaType::Int, 50 }, { QMetaType::QString, 51 }, + }}), + // Slot 'onRevertSelectedVersion' + QtMocHelpers::SlotData(52, 2, QMC::AccessPrivate, QMetaType::Void), + // Slot 'onAssetVersionsChanged' + QtMocHelpers::SlotData(53, 2, QMC::AccessPrivate, QMetaType::Void, {{ + { QMetaType::Int, 54 }, + }}), + // Slot 'onToggleLogViewer' + QtMocHelpers::SlotData(55, 2, QMC::AccessPrivate, QMetaType::Void), + // Slot 'showDatabaseHealthDialog' + QtMocHelpers::SlotData(56, 2, QMC::AccessPrivate, QMetaType::Void), + // Slot 'performStartupHealthCheck' + QtMocHelpers::SlotData(57, 2, QMC::AccessPrivate, QMetaType::Void), + // Slot 'onTabChanged' + QtMocHelpers::SlotData(58, 2, QMC::AccessPrivate, QMetaType::Void, {{ + { QMetaType::Int, 4 }, + }}), + // Slot 'onPmProjectSelected' + QtMocHelpers::SlotData(59, 2, QMC::AccessPrivate, QMetaType::Void, {{ + { 0x80000000 | 3, 4 }, + }}), + // Slot 'onPmFolderSelected' + QtMocHelpers::SlotData(60, 2, QMC::AccessPrivate, QMetaType::Void, {{ + { 0x80000000 | 3, 4 }, + }}), + // Slot 'onPmAssetSelectionChanged' + QtMocHelpers::SlotData(61, 2, QMC::AccessPrivate, QMetaType::Void), + // Slot 'onPmAssetDoubleClicked' + QtMocHelpers::SlotData(62, 2, QMC::AccessPrivate, QMetaType::Void, {{ + { 0x80000000 | 3, 4 }, + }}), + // Slot 'onPmAssetContextMenu' + QtMocHelpers::SlotData(63, 2, QMC::AccessPrivate, QMetaType::Void, {{ + { 0x80000000 | 8, 9 }, + }}), + // Slot 'onPmProjectContextMenu' + QtMocHelpers::SlotData(64, 2, QMC::AccessPrivate, QMetaType::Void, {{ + { 0x80000000 | 8, 9 }, + }}), + // Slot 'onPmFolderContextMenu' + QtMocHelpers::SlotData(65, 2, QMC::AccessPrivate, QMetaType::Void, {{ + { 0x80000000 | 8, 9 }, + }}), + // Slot 'onPmCreateProject' + QtMocHelpers::SlotData(66, 2, QMC::AccessPrivate, QMetaType::Void), + // Slot 'pmImportToProject' + QtMocHelpers::SlotData(67, 2, QMC::AccessPrivate, QMetaType::Void, {{ + { QMetaType::QString, 68 }, { QMetaType::QString, 69 }, + }}), + // Slot 'onPmRenameProject' + QtMocHelpers::SlotData(70, 2, QMC::AccessPrivate, QMetaType::Void), + // Slot 'onPmDeleteProject' + QtMocHelpers::SlotData(71, 2, QMC::AccessPrivate, QMetaType::Void), + // Slot 'onPmAddWatchFolder' + QtMocHelpers::SlotData(72, 2, QMC::AccessPrivate, QMetaType::Void), + // Slot 'onPmViewModeToggled' + QtMocHelpers::SlotData(73, 2, QMC::AccessPrivate, QMetaType::Void), + // Slot 'onPmThumbnailSizeChanged' + QtMocHelpers::SlotData(74, 2, QMC::AccessPrivate, QMetaType::Void, {{ + { QMetaType::Int, 27 }, + }}), + // Slot 'onPmToggleShowAllVersions' + QtMocHelpers::SlotData(75, 2, QMC::AccessPrivate, QMetaType::Void, {{ + { QMetaType::Bool, 48 }, + }}), + // Slot 'onPmVersionSelected' + QtMocHelpers::SlotData(76, 2, QMC::AccessPrivate, QMetaType::Void, {{ + { QMetaType::LongLong, 54 }, { QMetaType::QString, 77 }, + }}), + // Slot 'onPmVersionDropdownRequested' + QtMocHelpers::SlotData(78, 2, QMC::AccessPrivate, QMetaType::Void, {{ + { 0x80000000 | 3, 4 }, { 0x80000000 | 8, 79 }, + }}), + // Slot 'onPmRefresh' + QtMocHelpers::SlotData(80, 2, QMC::AccessPrivate, QMetaType::Void), + // Slot 'generateProjectThumbnails' + QtMocHelpers::SlotData(81, 2, QMC::AccessPrivate, QMetaType::Void, {{ + { QMetaType::Int, 82 }, { QMetaType::Bool, 83 }, + }}), + // Slot 'onPmMarkNotificationsRead' + QtMocHelpers::SlotData(84, 2, QMC::AccessPrivate, QMetaType::Void), + // Slot 'onPmShowNotifications' + QtMocHelpers::SlotData(85, 2, QMC::AccessPrivate, QMetaType::Void), + // Slot 'onPmNewFilesDetected' + QtMocHelpers::SlotData(86, 2, QMC::AccessPrivate, QMetaType::Void, {{ + { QMetaType::Int, 82 }, { QMetaType::QStringList, 87 }, + }}), + // Slot 'onPmFilesRemoved' + QtMocHelpers::SlotData(88, 2, QMC::AccessPrivate, QMetaType::Void, {{ + { QMetaType::Int, 82 }, { QMetaType::QStringList, 89 }, + }}), + // Slot 'onPmOpenOverlay' + QtMocHelpers::SlotData(90, 2, QMC::AccessPrivate, QMetaType::Void), + // Slot 'changePmPreview' + QtMocHelpers::SlotData(91, 2, QMC::AccessPrivate, QMetaType::Void, {{ + { QMetaType::Int, 15 }, + }}), + // Slot 'onPmNavigateBack' + QtMocHelpers::SlotData(92, 2, QMC::AccessPrivate, QMetaType::Void), + // Slot 'onPmNavigateUp' + QtMocHelpers::SlotData(93, 2, QMC::AccessPrivate, QMetaType::Void), + // Slot 'onPmCopy' + QtMocHelpers::SlotData(94, 2, QMC::AccessPrivate, QMetaType::Void), + // Slot 'onPmCut' + QtMocHelpers::SlotData(95, 2, QMC::AccessPrivate, QMetaType::Void), + // Slot 'onPmPaste' + QtMocHelpers::SlotData(96, 2, QMC::AccessPrivate, QMetaType::Void), + // Slot 'onPmDelete' + QtMocHelpers::SlotData(97, 2, QMC::AccessPrivate, QMetaType::Void), + // Slot 'onPmRename' + QtMocHelpers::SlotData(98, 2, QMC::AccessPrivate, QMetaType::Void), + // Slot 'onPmNewFolder' + QtMocHelpers::SlotData(99, 2, QMC::AccessPrivate, QMetaType::Void), + // Slot 'onPmOpenExternal' + QtMocHelpers::SlotData(100, 2, QMC::AccessPrivate, QMetaType::Void), + // Slot 'onPmTogglePreview' + QtMocHelpers::SlotData(101, 2, QMC::AccessPrivate, QMetaType::Void, {{ + { QMetaType::Bool, 48 }, + }}), + // Slot 'onPmGroupSequencesToggled' + QtMocHelpers::SlotData(102, 2, QMC::AccessPrivate, QMetaType::Void, {{ + { QMetaType::Bool, 48 }, + }}), + // Slot 'onShowUserGuide' + QtMocHelpers::SlotData(103, 2, QMC::AccessPrivate, QMetaType::Void), + // Slot 'onAboutKAssetManager' + QtMocHelpers::SlotData(104, 2, QMC::AccessPrivate, QMetaType::Void), + // Slot 'onAssetNavigateBack' + QtMocHelpers::SlotData(105, 2, QMC::AccessPrivate, QMetaType::Void), + // Slot 'onAssetNavigateUp' + QtMocHelpers::SlotData(106, 2, QMC::AccessPrivate, QMetaType::Void), + // Slot 'onAssetNewFolder' + QtMocHelpers::SlotData(107, 2, QMC::AccessPrivate, QMetaType::Void), + // Slot 'onAssetGroupSequencesToggled' + QtMocHelpers::SlotData(108, 2, QMC::AccessPrivate, QMetaType::Void, {{ + { QMetaType::Bool, 48 }, + }}), + // Slot 'onAssetFoldersModelAboutToReset' + QtMocHelpers::SlotData(109, 2, QMC::AccessPrivate, QMetaType::Void), + // Slot 'onAssetFoldersModelReset' + QtMocHelpers::SlotData(110, 2, QMC::AccessPrivate, QMetaType::Void), + // Slot 'onFmTreeCurrentChanged' + QtMocHelpers::SlotData(111, 2, QMC::AccessPrivate, QMetaType::Void, {{ + { 0x80000000 | 3, 32 }, { 0x80000000 | 3, 112 }, + }}), + // Slot 'onFmTreeActivated' + QtMocHelpers::SlotData(113, 2, QMC::AccessPrivate, QMetaType::Void, {{ + { 0x80000000 | 3, 4 }, + }}), + // Slot 'onFmTreeContextMenu' + QtMocHelpers::SlotData(114, 2, QMC::AccessPrivate, QMetaType::Void, {{ + { 0x80000000 | 8, 9 }, + }}), + // Slot 'onFmItemDoubleClicked' + QtMocHelpers::SlotData(115, 2, QMC::AccessPrivate, QMetaType::Void, {{ + { 0x80000000 | 3, 4 }, + }}), + // Slot 'onFmViewModeToggled' + QtMocHelpers::SlotData(116, 2, QMC::AccessPrivate, QMetaType::Void), + // Slot 'onFmThumbnailSizeChanged' + QtMocHelpers::SlotData(117, 2, QMC::AccessPrivate, QMetaType::Void, {{ + { QMetaType::Int, 27 }, + }}), + // Slot 'onAddSelectionToAssetLibrary' + QtMocHelpers::SlotData(118, 2, QMC::AccessPrivate, QMetaType::Void), + // Slot 'onAddTreeSelectionToAssetLibrary' + QtMocHelpers::SlotData(119, 2, QMC::AccessPrivate, QMetaType::Void), + // Slot 'onFmAddToFavorites' + QtMocHelpers::SlotData(120, 2, QMC::AccessPrivate, QMetaType::Void), + // Slot 'onFmRemoveFavorite' + QtMocHelpers::SlotData(121, 2, QMC::AccessPrivate, QMetaType::Void), + // Slot 'onFmFavoriteActivated' + QtMocHelpers::SlotData(122, 2, QMC::AccessPrivate, QMetaType::Void, {{ + { 0x80000000 | 123, 124 }, + }}), + // Slot 'onFmNavigateBack' + QtMocHelpers::SlotData(125, 2, QMC::AccessPrivate, QMetaType::Void), + // Slot 'onFmNavigateUp' + QtMocHelpers::SlotData(126, 2, QMC::AccessPrivate, QMetaType::Void), + // Slot 'onFmCopy' + QtMocHelpers::SlotData(127, 2, QMC::AccessPrivate, QMetaType::Void), + // Slot 'onFmCut' + QtMocHelpers::SlotData(128, 2, QMC::AccessPrivate, QMetaType::Void), + // Slot 'onFmPaste' + QtMocHelpers::SlotData(129, 2, QMC::AccessPrivate, QMetaType::Void), + // Slot 'onFmDelete' + QtMocHelpers::SlotData(130, 2, QMC::AccessPrivate, QMetaType::Void), + // Slot 'onFmDeletePermanent' + QtMocHelpers::SlotData(131, 2, QMC::AccessPrivate, QMetaType::Void), + // Slot 'onFmRename' + QtMocHelpers::SlotData(132, 2, QMC::AccessPrivate, QMetaType::Void), + // Slot 'onFmBulkRename' + QtMocHelpers::SlotData(133, 2, QMC::AccessPrivate, QMetaType::Void), + // Slot 'onFmNewFolder' + QtMocHelpers::SlotData(134, 2, QMC::AccessPrivate, QMetaType::Void), + // Slot 'onFmCreateFolderWithSelected' + QtMocHelpers::SlotData(135, 2, QMC::AccessPrivate, QMetaType::Void), + // Slot 'onFmShowContextMenu' + QtMocHelpers::SlotData(136, 2, QMC::AccessPrivate, QMetaType::Void, {{ + { 0x80000000 | 8, 9 }, + }}), + // Slot 'onFmBackToParent' + QtMocHelpers::SlotData(137, 2, QMC::AccessPrivate, QMetaType::Void), + // Slot 'onFmRefresh' + QtMocHelpers::SlotData(138, 2, QMC::AccessPrivate, QMetaType::Void), + // Slot 'onFmLightRefresh' + QtMocHelpers::SlotData(139, 2, QMC::AccessPrivate, QMetaType::Void), + // Slot 'onFmGroupSequencesToggled' + QtMocHelpers::SlotData(140, 2, QMC::AccessPrivate, QMetaType::Void, {{ + { QMetaType::Bool, 48 }, + }}), + // Slot 'onFmHideFoldersToggled' + QtMocHelpers::SlotData(141, 2, QMC::AccessPrivate, QMetaType::Void, {{ + { QMetaType::Bool, 48 }, + }}), + // Slot 'onFmToggleSecondPane' + QtMocHelpers::SlotData(142, 2, QMC::AccessPrivate, QMetaType::Void, {{ + { QMetaType::Bool, 48 }, + }}), + // Slot 'onFmSyncNavToggled' + QtMocHelpers::SlotData(143, 2, QMC::AccessPrivate, QMetaType::Void, {{ + { QMetaType::Bool, 48 }, + }}), + // Slot 'onEverythingSearchAssetManager' + QtMocHelpers::SlotData(144, 2, QMC::AccessPrivate, QMetaType::Void), + // Slot 'onEverythingSearchFileManager' + QtMocHelpers::SlotData(145, 2, QMC::AccessPrivate, QMetaType::Void), + // Slot 'onEverythingImportRequested' + QtMocHelpers::SlotData(146, 2, QMC::AccessPrivate, QMetaType::Void, {{ + { QMetaType::QStringList, 147 }, + }}), + // Slot 'onFmSelectionChanged' + QtMocHelpers::SlotData(148, 2, QMC::AccessPrivate, QMetaType::Void), + // Slot 'onFmTogglePreview' + QtMocHelpers::SlotData(149, 2, QMC::AccessPrivate, QMetaType::Void), + // Slot 'onFmOpenOverlay' + QtMocHelpers::SlotData(150, 2, QMC::AccessPrivate, QMetaType::Void), + // Slot 'changeFmPreview' + QtMocHelpers::SlotData(151, 2, QMC::AccessPrivate, QMetaType::Void, {{ + { QMetaType::Int, 15 }, + }}), + // Slot 'applyTheme' + QtMocHelpers::SlotData(152, 2, QMC::AccessPrivate, QMetaType::Void), + // Slot 'onFmTreeChildrenFetched' + QtMocHelpers::SlotData(153, 2, QMC::AccessPrivate, QMetaType::Void, {{ + { 0x80000000 | 3, 154 }, + }}), + }; + QtMocHelpers::UintData qt_properties { + }; + QtMocHelpers::UintData qt_enums { + }; + return QtMocHelpers::metaObjectData(QMC::MetaObjectFlag{}, qt_stringData, + qt_methods, qt_properties, qt_enums); +} +Q_CONSTINIT const QMetaObject MainWindow::staticMetaObject = { { + QMetaObject::SuperData::link(), + qt_staticMetaObjectStaticContent.stringdata, + qt_staticMetaObjectStaticContent.data, + qt_static_metacall, + nullptr, + qt_staticMetaObjectRelocatingContent.metaTypes, + nullptr +} }; + +void MainWindow::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) +{ + auto *_t = static_cast(_o); + if (_c == QMetaObject::InvokeMetaMethod) { + switch (_id) { + case 0: _t->onFolderSelected((*reinterpret_cast>(_a[1]))); break; + case 1: _t->onAssetSelectionChanged(); break; + case 2: _t->onAssetDoubleClicked((*reinterpret_cast>(_a[1]))); break; + case 3: _t->onAssetContextMenu((*reinterpret_cast>(_a[1]))); break; + case 4: _t->onFolderContextMenu((*reinterpret_cast>(_a[1]))); break; + case 5: _t->onEmptySpaceContextMenu((*reinterpret_cast>(_a[1]))); break; + case 6: _t->showPreview((*reinterpret_cast>(_a[1]))); break; + case 7: _t->closePreview(); break; + case 8: _t->changePreview((*reinterpret_cast>(_a[1]))); break; + case 9: _t->applyFilters(); break; + case 10: _t->clearFilters(); break; + case 11: _t->onSearchTextChanged((*reinterpret_cast>(_a[1]))); break; + case 12: _t->onCreateTag(); break; + case 13: _t->onApplyTags(); break; + case 14: _t->onFilterByTags(); break; + case 15: _t->onTagContextMenu((*reinterpret_cast>(_a[1]))); break; + case 16: _t->updateTagButtonStates(); break; + case 17: _t->onOpenSettings(); break; + case 18: _t->onThumbnailSizeChanged((*reinterpret_cast>(_a[1]))); break; + case 19: _t->onViewModeChanged(); break; + case 20: _t->importFiles((*reinterpret_cast>(_a[1]))); break; + case 21: _t->onImportProgress((*reinterpret_cast>(_a[1])),(*reinterpret_cast>(_a[2]))); break; + case 22: _t->onImportFileChanged((*reinterpret_cast>(_a[1]))); break; + case 23: _t->onImportFolderChanged((*reinterpret_cast>(_a[1]))); break; + case 24: _t->onImportComplete(); break; + case 25: _t->onRatingChanged((*reinterpret_cast>(_a[1]))); break; + case 26: _t->onPrefetchLivePreviewsForFolder(); break; + case 27: _t->onRefreshLivePreviewsForFolder(); break; + case 28: _t->onPrefetchLivePreviewsRecursive(); break; + case 29: _t->onRefreshLivePreviewsRecursive(); break; + case 30: _t->onAddProjectFolder(); break; + case 31: _t->onRefreshAssets(); break; + case 32: _t->onLockToggled((*reinterpret_cast>(_a[1]))); break; + case 33: _t->onProjectFolderChanged((*reinterpret_cast>(_a[1])),(*reinterpret_cast>(_a[2]))); break; + case 34: _t->onRevertSelectedVersion(); break; + case 35: _t->onAssetVersionsChanged((*reinterpret_cast>(_a[1]))); break; + case 36: _t->onToggleLogViewer(); break; + case 37: _t->showDatabaseHealthDialog(); break; + case 38: _t->performStartupHealthCheck(); break; + case 39: _t->onTabChanged((*reinterpret_cast>(_a[1]))); break; + case 40: _t->onPmProjectSelected((*reinterpret_cast>(_a[1]))); break; + case 41: _t->onPmFolderSelected((*reinterpret_cast>(_a[1]))); break; + case 42: _t->onPmAssetSelectionChanged(); break; + case 43: _t->onPmAssetDoubleClicked((*reinterpret_cast>(_a[1]))); break; + case 44: _t->onPmAssetContextMenu((*reinterpret_cast>(_a[1]))); break; + case 45: _t->onPmProjectContextMenu((*reinterpret_cast>(_a[1]))); break; + case 46: _t->onPmFolderContextMenu((*reinterpret_cast>(_a[1]))); break; + case 47: _t->onPmCreateProject(); break; + case 48: _t->pmImportToProject((*reinterpret_cast>(_a[1])),(*reinterpret_cast>(_a[2]))); break; + case 49: _t->onPmRenameProject(); break; + case 50: _t->onPmDeleteProject(); break; + case 51: _t->onPmAddWatchFolder(); break; + case 52: _t->onPmViewModeToggled(); break; + case 53: _t->onPmThumbnailSizeChanged((*reinterpret_cast>(_a[1]))); break; + case 54: _t->onPmToggleShowAllVersions((*reinterpret_cast>(_a[1]))); break; + case 55: _t->onPmVersionSelected((*reinterpret_cast>(_a[1])),(*reinterpret_cast>(_a[2]))); break; + case 56: _t->onPmVersionDropdownRequested((*reinterpret_cast>(_a[1])),(*reinterpret_cast>(_a[2]))); break; + case 57: _t->onPmRefresh(); break; + case 58: _t->generateProjectThumbnails((*reinterpret_cast>(_a[1])),(*reinterpret_cast>(_a[2]))); break; + case 59: _t->onPmMarkNotificationsRead(); break; + case 60: _t->onPmShowNotifications(); break; + case 61: _t->onPmNewFilesDetected((*reinterpret_cast>(_a[1])),(*reinterpret_cast>(_a[2]))); break; + case 62: _t->onPmFilesRemoved((*reinterpret_cast>(_a[1])),(*reinterpret_cast>(_a[2]))); break; + case 63: _t->onPmOpenOverlay(); break; + case 64: _t->changePmPreview((*reinterpret_cast>(_a[1]))); break; + case 65: _t->onPmNavigateBack(); break; + case 66: _t->onPmNavigateUp(); break; + case 67: _t->onPmCopy(); break; + case 68: _t->onPmCut(); break; + case 69: _t->onPmPaste(); break; + case 70: _t->onPmDelete(); break; + case 71: _t->onPmRename(); break; + case 72: _t->onPmNewFolder(); break; + case 73: _t->onPmOpenExternal(); break; + case 74: _t->onPmTogglePreview((*reinterpret_cast>(_a[1]))); break; + case 75: _t->onPmGroupSequencesToggled((*reinterpret_cast>(_a[1]))); break; + case 76: _t->onShowUserGuide(); break; + case 77: _t->onAboutKAssetManager(); break; + case 78: _t->onAssetNavigateBack(); break; + case 79: _t->onAssetNavigateUp(); break; + case 80: _t->onAssetNewFolder(); break; + case 81: _t->onAssetGroupSequencesToggled((*reinterpret_cast>(_a[1]))); break; + case 82: _t->onAssetFoldersModelAboutToReset(); break; + case 83: _t->onAssetFoldersModelReset(); break; + case 84: _t->onFmTreeCurrentChanged((*reinterpret_cast>(_a[1])),(*reinterpret_cast>(_a[2]))); break; + case 85: _t->onFmTreeActivated((*reinterpret_cast>(_a[1]))); break; + case 86: _t->onFmTreeContextMenu((*reinterpret_cast>(_a[1]))); break; + case 87: _t->onFmItemDoubleClicked((*reinterpret_cast>(_a[1]))); break; + case 88: _t->onFmViewModeToggled(); break; + case 89: _t->onFmThumbnailSizeChanged((*reinterpret_cast>(_a[1]))); break; + case 90: _t->onAddSelectionToAssetLibrary(); break; + case 91: _t->onAddTreeSelectionToAssetLibrary(); break; + case 92: _t->onFmAddToFavorites(); break; + case 93: _t->onFmRemoveFavorite(); break; + case 94: _t->onFmFavoriteActivated((*reinterpret_cast>(_a[1]))); break; + case 95: _t->onFmNavigateBack(); break; + case 96: _t->onFmNavigateUp(); break; + case 97: _t->onFmCopy(); break; + case 98: _t->onFmCut(); break; + case 99: _t->onFmPaste(); break; + case 100: _t->onFmDelete(); break; + case 101: _t->onFmDeletePermanent(); break; + case 102: _t->onFmRename(); break; + case 103: _t->onFmBulkRename(); break; + case 104: _t->onFmNewFolder(); break; + case 105: _t->onFmCreateFolderWithSelected(); break; + case 106: _t->onFmShowContextMenu((*reinterpret_cast>(_a[1]))); break; + case 107: _t->onFmBackToParent(); break; + case 108: _t->onFmRefresh(); break; + case 109: _t->onFmLightRefresh(); break; + case 110: _t->onFmGroupSequencesToggled((*reinterpret_cast>(_a[1]))); break; + case 111: _t->onFmHideFoldersToggled((*reinterpret_cast>(_a[1]))); break; + case 112: _t->onFmToggleSecondPane((*reinterpret_cast>(_a[1]))); break; + case 113: _t->onFmSyncNavToggled((*reinterpret_cast>(_a[1]))); break; + case 114: _t->onEverythingSearchAssetManager(); break; + case 115: _t->onEverythingSearchFileManager(); break; + case 116: _t->onEverythingImportRequested((*reinterpret_cast>(_a[1]))); break; + case 117: _t->onFmSelectionChanged(); break; + case 118: _t->onFmTogglePreview(); break; + case 119: _t->onFmOpenOverlay(); break; + case 120: _t->changeFmPreview((*reinterpret_cast>(_a[1]))); break; + case 121: _t->applyTheme(); break; + case 122: _t->onFmTreeChildrenFetched((*reinterpret_cast>(_a[1]))); break; + default: ; + } + } +} + +const QMetaObject *MainWindow::metaObject() const +{ + return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject; +} + +void *MainWindow::qt_metacast(const char *_clname) +{ + if (!_clname) return nullptr; + if (!strcmp(_clname, qt_staticMetaObjectStaticContent.strings)) + return static_cast(this); + return QMainWindow::qt_metacast(_clname); +} + +int MainWindow::qt_metacall(QMetaObject::Call _c, int _id, void **_a) +{ + _id = QMainWindow::qt_metacall(_c, _id, _a); + if (_id < 0) + return _id; + if (_c == QMetaObject::InvokeMetaMethod) { + if (_id < 123) + qt_static_metacall(this, _c, _id, _a); + _id -= 123; + } + if (_c == QMetaObject::RegisterMethodArgumentMetaType) { + if (_id < 123) + *reinterpret_cast(_a[0]) = QMetaType(); + _id -= 123; + } + return _id; +} +QT_WARNING_POP diff --git a/build-linux/kassetmanagerqt_autogen/UVLADIE3JM/moc_media_convert_dialog.cpp b/build-linux/kassetmanagerqt_autogen/UVLADIE3JM/moc_media_convert_dialog.cpp new file mode 100644 index 00000000..88e7ea4c --- /dev/null +++ b/build-linux/kassetmanagerqt_autogen/UVLADIE3JM/moc_media_convert_dialog.cpp @@ -0,0 +1,182 @@ +/**************************************************************************** +** Meta object code from reading C++ file 'media_convert_dialog.h' +** +** Created by: The Qt Meta Object Compiler version 69 (Qt 6.10.3) +** +** WARNING! All changes made in this file will be lost! +*****************************************************************************/ + +#include "../../../native/qt6/src/media_convert_dialog.h" +#include +#include + +#include + +#include + + +#include +#if !defined(Q_MOC_OUTPUT_REVISION) +#error "The header file 'media_convert_dialog.h' doesn't include ." +#elif Q_MOC_OUTPUT_REVISION != 69 +#error "This file was generated using the moc from 6.10.3. It" +#error "cannot be used with the include files from this version of Qt." +#error "(The moc has changed too much.)" +#endif + +#ifndef Q_CONSTINIT +#define Q_CONSTINIT +#endif + +QT_WARNING_PUSH +QT_WARNING_DISABLE_DEPRECATED +QT_WARNING_DISABLE_GCC("-Wuseless-cast") +namespace { +struct qt_meta_tag_ZN18MediaConvertDialogE_t {}; +} // unnamed namespace + +template <> constexpr inline auto MediaConvertDialog::qt_create_metaobjectdata() +{ + namespace QMC = QtMocConstants; + QtMocHelpers::StringRefStorage qt_stringData { + "MediaConvertDialog", + "onBrowseOutputDir", + "", + "onTargetChanged", + "idx", + "onStart", + "onCancel", + "onVerifySequence", + "onQueueStarted", + "total", + "onFileStarted", + "index", + "src", + "out", + "durationMs", + "onLogLine", + "line", + "onCurProgress", + "percent", + "outMs", + "totalMs", + "onOverall", + "onFileFinished", + "success", + "errorMsg", + "onQueueFinished", + "allSuccess" + }; + + QtMocHelpers::UintData qt_methods { + // Slot 'onBrowseOutputDir' + QtMocHelpers::SlotData(1, 2, QMC::AccessPrivate, QMetaType::Void), + // Slot 'onTargetChanged' + QtMocHelpers::SlotData(3, 2, QMC::AccessPrivate, QMetaType::Void, {{ + { QMetaType::Int, 4 }, + }}), + // Slot 'onStart' + QtMocHelpers::SlotData(5, 2, QMC::AccessPrivate, QMetaType::Void), + // Slot 'onCancel' + QtMocHelpers::SlotData(6, 2, QMC::AccessPrivate, QMetaType::Void), + // Slot 'onVerifySequence' + QtMocHelpers::SlotData(7, 2, QMC::AccessPrivate, QMetaType::Void), + // Slot 'onQueueStarted' + QtMocHelpers::SlotData(8, 2, QMC::AccessPrivate, QMetaType::Void, {{ + { QMetaType::Int, 9 }, + }}), + // Slot 'onFileStarted' + QtMocHelpers::SlotData(10, 2, QMC::AccessPrivate, QMetaType::Void, {{ + { QMetaType::Int, 11 }, { QMetaType::QString, 12 }, { QMetaType::QString, 13 }, { QMetaType::LongLong, 14 }, + }}), + // Slot 'onLogLine' + QtMocHelpers::SlotData(15, 2, QMC::AccessPrivate, QMetaType::Void, {{ + { QMetaType::QString, 16 }, + }}), + // Slot 'onCurProgress' + QtMocHelpers::SlotData(17, 2, QMC::AccessPrivate, QMetaType::Void, {{ + { QMetaType::Int, 11 }, { QMetaType::Int, 18 }, { QMetaType::LongLong, 19 }, { QMetaType::LongLong, 20 }, + }}), + // Slot 'onOverall' + QtMocHelpers::SlotData(21, 2, QMC::AccessPrivate, QMetaType::Void, {{ + { QMetaType::Int, 18 }, + }}), + // Slot 'onFileFinished' + QtMocHelpers::SlotData(22, 2, QMC::AccessPrivate, QMetaType::Void, {{ + { QMetaType::Int, 11 }, { QMetaType::Bool, 23 }, { QMetaType::QString, 24 }, + }}), + // Slot 'onQueueFinished' + QtMocHelpers::SlotData(25, 2, QMC::AccessPrivate, QMetaType::Void, {{ + { QMetaType::Bool, 26 }, + }}), + }; + QtMocHelpers::UintData qt_properties { + }; + QtMocHelpers::UintData qt_enums { + }; + return QtMocHelpers::metaObjectData(QMC::MetaObjectFlag{}, qt_stringData, + qt_methods, qt_properties, qt_enums); +} +Q_CONSTINIT const QMetaObject MediaConvertDialog::staticMetaObject = { { + QMetaObject::SuperData::link(), + qt_staticMetaObjectStaticContent.stringdata, + qt_staticMetaObjectStaticContent.data, + qt_static_metacall, + nullptr, + qt_staticMetaObjectRelocatingContent.metaTypes, + nullptr +} }; + +void MediaConvertDialog::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) +{ + auto *_t = static_cast(_o); + if (_c == QMetaObject::InvokeMetaMethod) { + switch (_id) { + case 0: _t->onBrowseOutputDir(); break; + case 1: _t->onTargetChanged((*reinterpret_cast>(_a[1]))); break; + case 2: _t->onStart(); break; + case 3: _t->onCancel(); break; + case 4: _t->onVerifySequence(); break; + case 5: _t->onQueueStarted((*reinterpret_cast>(_a[1]))); break; + case 6: _t->onFileStarted((*reinterpret_cast>(_a[1])),(*reinterpret_cast>(_a[2])),(*reinterpret_cast>(_a[3])),(*reinterpret_cast>(_a[4]))); break; + case 7: _t->onLogLine((*reinterpret_cast>(_a[1]))); break; + case 8: _t->onCurProgress((*reinterpret_cast>(_a[1])),(*reinterpret_cast>(_a[2])),(*reinterpret_cast>(_a[3])),(*reinterpret_cast>(_a[4]))); break; + case 9: _t->onOverall((*reinterpret_cast>(_a[1]))); break; + case 10: _t->onFileFinished((*reinterpret_cast>(_a[1])),(*reinterpret_cast>(_a[2])),(*reinterpret_cast>(_a[3]))); break; + case 11: _t->onQueueFinished((*reinterpret_cast>(_a[1]))); break; + default: ; + } + } +} + +const QMetaObject *MediaConvertDialog::metaObject() const +{ + return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject; +} + +void *MediaConvertDialog::qt_metacast(const char *_clname) +{ + if (!_clname) return nullptr; + if (!strcmp(_clname, qt_staticMetaObjectStaticContent.strings)) + return static_cast(this); + return QDialog::qt_metacast(_clname); +} + +int MediaConvertDialog::qt_metacall(QMetaObject::Call _c, int _id, void **_a) +{ + _id = QDialog::qt_metacall(_c, _id, _a); + if (_id < 0) + return _id; + if (_c == QMetaObject::InvokeMetaMethod) { + if (_id < 12) + qt_static_metacall(this, _c, _id, _a); + _id -= 12; + } + if (_c == QMetaObject::RegisterMethodArgumentMetaType) { + if (_id < 12) + *reinterpret_cast(_a[0]) = QMetaType(); + _id -= 12; + } + return _id; +} +QT_WARNING_POP diff --git a/build-linux/kassetmanagerqt_autogen/UVLADIE3JM/moc_media_converter_worker.cpp b/build-linux/kassetmanagerqt_autogen/UVLADIE3JM/moc_media_converter_worker.cpp new file mode 100644 index 00000000..8460316a --- /dev/null +++ b/build-linux/kassetmanagerqt_autogen/UVLADIE3JM/moc_media_converter_worker.cpp @@ -0,0 +1,254 @@ +/**************************************************************************** +** Meta object code from reading C++ file 'media_converter_worker.h' +** +** Created by: The Qt Meta Object Compiler version 69 (Qt 6.10.3) +** +** WARNING! All changes made in this file will be lost! +*****************************************************************************/ + +#include "../../../native/qt6/src/media_converter_worker.h" +#include +#include + +#include + +#include + + +#include +#if !defined(Q_MOC_OUTPUT_REVISION) +#error "The header file 'media_converter_worker.h' doesn't include ." +#elif Q_MOC_OUTPUT_REVISION != 69 +#error "This file was generated using the moc from 6.10.3. It" +#error "cannot be used with the include files from this version of Qt." +#error "(The moc has changed too much.)" +#endif + +#ifndef Q_CONSTINIT +#define Q_CONSTINIT +#endif + +QT_WARNING_PUSH +QT_WARNING_DISABLE_DEPRECATED +QT_WARNING_DISABLE_GCC("-Wuseless-cast") +namespace { +struct qt_meta_tag_ZN20MediaConverterWorkerE_t {}; +} // unnamed namespace + +template <> constexpr inline auto MediaConverterWorker::qt_create_metaobjectdata() +{ + namespace QMC = QtMocConstants; + QtMocHelpers::StringRefStorage qt_stringData { + "MediaConverterWorker", + "queueStarted", + "", + "total", + "fileStarted", + "index", + "srcPath", + "outPath", + "durationMs", + "logLine", + "line", + "currentFileProgress", + "percent", + "outTimeMs", + "totalMs", + "overallProgress", + "fileFinished", + "success", + "errorMsg", + "queueFinished", + "allSuccess", + "start", + "QList", + "tasks", + "cancelAll", + "retryCurrent", + "continueAfterFailure", + "onReadyStdOut", + "onReadyStdErr", + "onFinished", + "exitCode", + "QProcess::ExitStatus", + "status" + }; + + QtMocHelpers::UintData qt_methods { + // Signal 'queueStarted' + QtMocHelpers::SignalData(1, 2, QMC::AccessPublic, QMetaType::Void, {{ + { QMetaType::Int, 3 }, + }}), + // Signal 'fileStarted' + QtMocHelpers::SignalData(4, 2, QMC::AccessPublic, QMetaType::Void, {{ + { QMetaType::Int, 5 }, { QMetaType::QString, 6 }, { QMetaType::QString, 7 }, { QMetaType::LongLong, 8 }, + }}), + // Signal 'logLine' + QtMocHelpers::SignalData(9, 2, QMC::AccessPublic, QMetaType::Void, {{ + { QMetaType::QString, 10 }, + }}), + // Signal 'currentFileProgress' + QtMocHelpers::SignalData(11, 2, QMC::AccessPublic, QMetaType::Void, {{ + { QMetaType::Int, 5 }, { QMetaType::Int, 12 }, { QMetaType::LongLong, 13 }, { QMetaType::LongLong, 14 }, + }}), + // Signal 'overallProgress' + QtMocHelpers::SignalData(15, 2, QMC::AccessPublic, QMetaType::Void, {{ + { QMetaType::Int, 12 }, + }}), + // Signal 'fileFinished' + QtMocHelpers::SignalData(16, 2, QMC::AccessPublic, QMetaType::Void, {{ + { QMetaType::Int, 5 }, { QMetaType::Bool, 17 }, { QMetaType::QString, 18 }, + }}), + // Signal 'queueFinished' + QtMocHelpers::SignalData(19, 2, QMC::AccessPublic, QMetaType::Void, {{ + { QMetaType::Bool, 20 }, + }}), + // Slot 'start' + QtMocHelpers::SlotData &)>(21, 2, QMC::AccessPublic, QMetaType::Void, {{ + { 0x80000000 | 22, 23 }, + }}), + // Slot 'cancelAll' + QtMocHelpers::SlotData(24, 2, QMC::AccessPublic, QMetaType::Void), + // Slot 'retryCurrent' + QtMocHelpers::SlotData(25, 2, QMC::AccessPublic, QMetaType::Void), + // Slot 'continueAfterFailure' + QtMocHelpers::SlotData(26, 2, QMC::AccessPublic, QMetaType::Void), + // Slot 'onReadyStdOut' + QtMocHelpers::SlotData(27, 2, QMC::AccessPrivate, QMetaType::Void), + // Slot 'onReadyStdErr' + QtMocHelpers::SlotData(28, 2, QMC::AccessPrivate, QMetaType::Void), + // Slot 'onFinished' + QtMocHelpers::SlotData(29, 2, QMC::AccessPrivate, QMetaType::Void, {{ + { QMetaType::Int, 30 }, { 0x80000000 | 31, 32 }, + }}), + }; + QtMocHelpers::UintData qt_properties { + }; + QtMocHelpers::UintData qt_enums { + }; + return QtMocHelpers::metaObjectData(QMC::MetaObjectFlag{}, qt_stringData, + qt_methods, qt_properties, qt_enums); +} +Q_CONSTINIT const QMetaObject MediaConverterWorker::staticMetaObject = { { + QMetaObject::SuperData::link(), + qt_staticMetaObjectStaticContent.stringdata, + qt_staticMetaObjectStaticContent.data, + qt_static_metacall, + nullptr, + qt_staticMetaObjectRelocatingContent.metaTypes, + nullptr +} }; + +void MediaConverterWorker::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) +{ + auto *_t = static_cast(_o); + if (_c == QMetaObject::InvokeMetaMethod) { + switch (_id) { + case 0: _t->queueStarted((*reinterpret_cast>(_a[1]))); break; + case 1: _t->fileStarted((*reinterpret_cast>(_a[1])),(*reinterpret_cast>(_a[2])),(*reinterpret_cast>(_a[3])),(*reinterpret_cast>(_a[4]))); break; + case 2: _t->logLine((*reinterpret_cast>(_a[1]))); break; + case 3: _t->currentFileProgress((*reinterpret_cast>(_a[1])),(*reinterpret_cast>(_a[2])),(*reinterpret_cast>(_a[3])),(*reinterpret_cast>(_a[4]))); break; + case 4: _t->overallProgress((*reinterpret_cast>(_a[1]))); break; + case 5: _t->fileFinished((*reinterpret_cast>(_a[1])),(*reinterpret_cast>(_a[2])),(*reinterpret_cast>(_a[3]))); break; + case 6: _t->queueFinished((*reinterpret_cast>(_a[1]))); break; + case 7: _t->start((*reinterpret_cast>>(_a[1]))); break; + case 8: _t->cancelAll(); break; + case 9: _t->retryCurrent(); break; + case 10: _t->continueAfterFailure(); break; + case 11: _t->onReadyStdOut(); break; + case 12: _t->onReadyStdErr(); break; + case 13: _t->onFinished((*reinterpret_cast>(_a[1])),(*reinterpret_cast>(_a[2]))); break; + default: ; + } + } + if (_c == QMetaObject::IndexOfMethod) { + if (QtMocHelpers::indexOfMethod(_a, &MediaConverterWorker::queueStarted, 0)) + return; + if (QtMocHelpers::indexOfMethod(_a, &MediaConverterWorker::fileStarted, 1)) + return; + if (QtMocHelpers::indexOfMethod(_a, &MediaConverterWorker::logLine, 2)) + return; + if (QtMocHelpers::indexOfMethod(_a, &MediaConverterWorker::currentFileProgress, 3)) + return; + if (QtMocHelpers::indexOfMethod(_a, &MediaConverterWorker::overallProgress, 4)) + return; + if (QtMocHelpers::indexOfMethod(_a, &MediaConverterWorker::fileFinished, 5)) + return; + if (QtMocHelpers::indexOfMethod(_a, &MediaConverterWorker::queueFinished, 6)) + return; + } +} + +const QMetaObject *MediaConverterWorker::metaObject() const +{ + return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject; +} + +void *MediaConverterWorker::qt_metacast(const char *_clname) +{ + if (!_clname) return nullptr; + if (!strcmp(_clname, qt_staticMetaObjectStaticContent.strings)) + return static_cast(this); + return QObject::qt_metacast(_clname); +} + +int MediaConverterWorker::qt_metacall(QMetaObject::Call _c, int _id, void **_a) +{ + _id = QObject::qt_metacall(_c, _id, _a); + if (_id < 0) + return _id; + if (_c == QMetaObject::InvokeMetaMethod) { + if (_id < 14) + qt_static_metacall(this, _c, _id, _a); + _id -= 14; + } + if (_c == QMetaObject::RegisterMethodArgumentMetaType) { + if (_id < 14) + *reinterpret_cast(_a[0]) = QMetaType(); + _id -= 14; + } + return _id; +} + +// SIGNAL 0 +void MediaConverterWorker::queueStarted(int _t1) +{ + QMetaObject::activate(this, &staticMetaObject, 0, nullptr, _t1); +} + +// SIGNAL 1 +void MediaConverterWorker::fileStarted(int _t1, const QString & _t2, const QString & _t3, qint64 _t4) +{ + QMetaObject::activate(this, &staticMetaObject, 1, nullptr, _t1, _t2, _t3, _t4); +} + +// SIGNAL 2 +void MediaConverterWorker::logLine(const QString & _t1) +{ + QMetaObject::activate(this, &staticMetaObject, 2, nullptr, _t1); +} + +// SIGNAL 3 +void MediaConverterWorker::currentFileProgress(int _t1, int _t2, qint64 _t3, qint64 _t4) +{ + QMetaObject::activate(this, &staticMetaObject, 3, nullptr, _t1, _t2, _t3, _t4); +} + +// SIGNAL 4 +void MediaConverterWorker::overallProgress(int _t1) +{ + QMetaObject::activate(this, &staticMetaObject, 4, nullptr, _t1); +} + +// SIGNAL 5 +void MediaConverterWorker::fileFinished(int _t1, bool _t2, const QString & _t3) +{ + QMetaObject::activate(this, &staticMetaObject, 5, nullptr, _t1, _t2, _t3); +} + +// SIGNAL 6 +void MediaConverterWorker::queueFinished(bool _t1) +{ + QMetaObject::activate(this, &staticMetaObject, 6, nullptr, _t1); +} +QT_WARNING_POP diff --git a/build-linux/kassetmanagerqt_autogen/UVLADIE3JM/moc_preview_overlay.cpp b/build-linux/kassetmanagerqt_autogen/UVLADIE3JM/moc_preview_overlay.cpp new file mode 100644 index 00000000..1bf9e2c4 --- /dev/null +++ b/build-linux/kassetmanagerqt_autogen/UVLADIE3JM/moc_preview_overlay.cpp @@ -0,0 +1,595 @@ +/**************************************************************************** +** Meta object code from reading C++ file 'preview_overlay.h' +** +** Created by: The Qt Meta Object Compiler version 69 (Qt 6.10.3) +** +** WARNING! All changes made in this file will be lost! +*****************************************************************************/ + +#include "../../../native/qt6/src/preview_overlay.h" +#include +#include +#include + +#include + +#include + + +#include +#if !defined(Q_MOC_OUTPUT_REVISION) +#error "The header file 'preview_overlay.h' doesn't include ." +#elif Q_MOC_OUTPUT_REVISION != 69 +#error "This file was generated using the moc from 6.10.3. It" +#error "cannot be used with the include files from this version of Qt." +#error "(The moc has changed too much.)" +#endif + +#ifndef Q_CONSTINIT +#define Q_CONSTINIT +#endif + +QT_WARNING_PUSH +QT_WARNING_DISABLE_DEPRECATED +QT_WARNING_DISABLE_GCC("-Wuseless-cast") +namespace { +struct qt_meta_tag_ZN17CachedFrameSliderE_t {}; +} // unnamed namespace + +template <> constexpr inline auto CachedFrameSlider::qt_create_metaobjectdata() +{ + namespace QMC = QtMocConstants; + QtMocHelpers::StringRefStorage qt_stringData { + "CachedFrameSlider" + }; + + QtMocHelpers::UintData qt_methods { + }; + QtMocHelpers::UintData qt_properties { + }; + QtMocHelpers::UintData qt_enums { + }; + return QtMocHelpers::metaObjectData(QMC::MetaObjectFlag{}, qt_stringData, + qt_methods, qt_properties, qt_enums); +} +Q_CONSTINIT const QMetaObject CachedFrameSlider::staticMetaObject = { { + QMetaObject::SuperData::link(), + qt_staticMetaObjectStaticContent.stringdata, + qt_staticMetaObjectStaticContent.data, + qt_static_metacall, + nullptr, + qt_staticMetaObjectRelocatingContent.metaTypes, + nullptr +} }; + +void CachedFrameSlider::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) +{ + auto *_t = static_cast(_o); + (void)_t; + (void)_c; + (void)_id; + (void)_a; +} + +const QMetaObject *CachedFrameSlider::metaObject() const +{ + return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject; +} + +void *CachedFrameSlider::qt_metacast(const char *_clname) +{ + if (!_clname) return nullptr; + if (!strcmp(_clname, qt_staticMetaObjectStaticContent.strings)) + return static_cast(this); + return QSlider::qt_metacast(_clname); +} + +int CachedFrameSlider::qt_metacall(QMetaObject::Call _c, int _id, void **_a) +{ + _id = QSlider::qt_metacall(_c, _id, _a); + return _id; +} +namespace { +struct qt_meta_tag_ZN14CacheBarWidgetE_t {}; +} // unnamed namespace + +template <> constexpr inline auto CacheBarWidget::qt_create_metaobjectdata() +{ + namespace QMC = QtMocConstants; + QtMocHelpers::StringRefStorage qt_stringData { + "CacheBarWidget" + }; + + QtMocHelpers::UintData qt_methods { + }; + QtMocHelpers::UintData qt_properties { + }; + QtMocHelpers::UintData qt_enums { + }; + return QtMocHelpers::metaObjectData(QMC::MetaObjectFlag{}, qt_stringData, + qt_methods, qt_properties, qt_enums); +} +Q_CONSTINIT const QMetaObject CacheBarWidget::staticMetaObject = { { + QMetaObject::SuperData::link(), + qt_staticMetaObjectStaticContent.stringdata, + qt_staticMetaObjectStaticContent.data, + qt_static_metacall, + nullptr, + qt_staticMetaObjectRelocatingContent.metaTypes, + nullptr +} }; + +void CacheBarWidget::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) +{ + auto *_t = static_cast(_o); + (void)_t; + (void)_c; + (void)_id; + (void)_a; +} + +const QMetaObject *CacheBarWidget::metaObject() const +{ + return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject; +} + +void *CacheBarWidget::qt_metacast(const char *_clname) +{ + if (!_clname) return nullptr; + if (!strcmp(_clname, qt_staticMetaObjectStaticContent.strings)) + return static_cast(this); + return QWidget::qt_metacast(_clname); +} + +int CacheBarWidget::qt_metacall(QMetaObject::Call _c, int _id, void **_a) +{ + _id = QWidget::qt_metacall(_c, _id, _a); + return _id; +} +namespace { +struct qt_meta_tag_ZN14PreviewOverlayE_t {}; +} // unnamed namespace + +template <> constexpr inline auto PreviewOverlay::qt_create_metaobjectdata() +{ + namespace QMC = QtMocConstants; + QtMocHelpers::StringRefStorage qt_stringData { + "PreviewOverlay", + "closed", + "", + "navigateRequested", + "delta", + "onPlayPauseClicked", + "onPositionChanged", + "position", + "onDurationChanged", + "duration", + "onSliderMoved", + "onSliderPressed", + "onSliderReleased", + "onStepPrevFrame", + "onStepNextFrame", + "onVolumeChanged", + "value", + "onToggleMute", + "hideControls", + "onSequenceTimerTick", + "onColorSpaceChanged", + "index", + "onPlayerPositionChanged", + "positionMs", + "onPlayerDurationChanged", + "durationMs", + "onPlayerMediaInfo", + "TLRenderPlayer::MediaInfo", + "info", + "onPlayerPlaybackStateChanged", + "TLRenderPlayer::PlaybackState", + "state", + "onPlayerError", + "errorString", + "onPlayerEndOfStream", + "onToggleAnnotation", + "onAnnotationToolSelected", + "onColorPicker", + "onPenWidthChanged", + "width", + "onClearAnnotations", + "onSaveAnnotatedFrame", + "onSaveAllAnnotatedFrames" + }; + + QtMocHelpers::UintData qt_methods { + // Signal 'closed' + QtMocHelpers::SignalData(1, 2, QMC::AccessPublic, QMetaType::Void), + // Signal 'navigateRequested' + QtMocHelpers::SignalData(3, 2, QMC::AccessPublic, QMetaType::Void, {{ + { QMetaType::Int, 4 }, + }}), + // Slot 'onPlayPauseClicked' + QtMocHelpers::SlotData(5, 2, QMC::AccessPrivate, QMetaType::Void), + // Slot 'onPositionChanged' + QtMocHelpers::SlotData(6, 2, QMC::AccessPrivate, QMetaType::Void, {{ + { QMetaType::LongLong, 7 }, + }}), + // Slot 'onDurationChanged' + QtMocHelpers::SlotData(8, 2, QMC::AccessPrivate, QMetaType::Void, {{ + { QMetaType::LongLong, 9 }, + }}), + // Slot 'onSliderMoved' + QtMocHelpers::SlotData(10, 2, QMC::AccessPrivate, QMetaType::Void, {{ + { QMetaType::Int, 7 }, + }}), + // Slot 'onSliderPressed' + QtMocHelpers::SlotData(11, 2, QMC::AccessPrivate, QMetaType::Void), + // Slot 'onSliderReleased' + QtMocHelpers::SlotData(12, 2, QMC::AccessPrivate, QMetaType::Void), + // Slot 'onStepPrevFrame' + QtMocHelpers::SlotData(13, 2, QMC::AccessPrivate, QMetaType::Void), + // Slot 'onStepNextFrame' + QtMocHelpers::SlotData(14, 2, QMC::AccessPrivate, QMetaType::Void), + // Slot 'onVolumeChanged' + QtMocHelpers::SlotData(15, 2, QMC::AccessPrivate, QMetaType::Void, {{ + { QMetaType::Int, 16 }, + }}), + // Slot 'onToggleMute' + QtMocHelpers::SlotData(17, 2, QMC::AccessPrivate, QMetaType::Void), + // Slot 'hideControls' + QtMocHelpers::SlotData(18, 2, QMC::AccessPrivate, QMetaType::Void), + // Slot 'onSequenceTimerTick' + QtMocHelpers::SlotData(19, 2, QMC::AccessPrivate, QMetaType::Void), + // Slot 'onColorSpaceChanged' + QtMocHelpers::SlotData(20, 2, QMC::AccessPrivate, QMetaType::Void, {{ + { QMetaType::Int, 21 }, + }}), + // Slot 'onPlayerPositionChanged' + QtMocHelpers::SlotData(22, 2, QMC::AccessPrivate, QMetaType::Void, {{ + { QMetaType::LongLong, 23 }, + }}), + // Slot 'onPlayerDurationChanged' + QtMocHelpers::SlotData(24, 2, QMC::AccessPrivate, QMetaType::Void, {{ + { QMetaType::LongLong, 25 }, + }}), + // Slot 'onPlayerMediaInfo' + QtMocHelpers::SlotData(26, 2, QMC::AccessPrivate, QMetaType::Void, {{ + { 0x80000000 | 27, 28 }, + }}), + // Slot 'onPlayerPlaybackStateChanged' + QtMocHelpers::SlotData(29, 2, QMC::AccessPrivate, QMetaType::Void, {{ + { 0x80000000 | 30, 31 }, + }}), + // Slot 'onPlayerError' + QtMocHelpers::SlotData(32, 2, QMC::AccessPrivate, QMetaType::Void, {{ + { QMetaType::QString, 33 }, + }}), + // Slot 'onPlayerEndOfStream' + QtMocHelpers::SlotData(34, 2, QMC::AccessPrivate, QMetaType::Void), + // Slot 'onToggleAnnotation' + QtMocHelpers::SlotData(35, 2, QMC::AccessPrivate, QMetaType::Void), + // Slot 'onAnnotationToolSelected' + QtMocHelpers::SlotData(36, 2, QMC::AccessPrivate, QMetaType::Void), + // Slot 'onColorPicker' + QtMocHelpers::SlotData(37, 2, QMC::AccessPrivate, QMetaType::Void), + // Slot 'onPenWidthChanged' + QtMocHelpers::SlotData(38, 2, QMC::AccessPrivate, QMetaType::Void, {{ + { QMetaType::Int, 39 }, + }}), + // Slot 'onClearAnnotations' + QtMocHelpers::SlotData(40, 2, QMC::AccessPrivate, QMetaType::Void), + // Slot 'onSaveAnnotatedFrame' + QtMocHelpers::SlotData(41, 2, QMC::AccessPrivate, QMetaType::Void), + // Slot 'onSaveAllAnnotatedFrames' + QtMocHelpers::SlotData(42, 2, QMC::AccessPrivate, QMetaType::Void), + }; + QtMocHelpers::UintData qt_properties { + }; + QtMocHelpers::UintData qt_enums { + }; + return QtMocHelpers::metaObjectData(QMC::MetaObjectFlag{}, qt_stringData, + qt_methods, qt_properties, qt_enums); +} +Q_CONSTINIT const QMetaObject PreviewOverlay::staticMetaObject = { { + QMetaObject::SuperData::link(), + qt_staticMetaObjectStaticContent.stringdata, + qt_staticMetaObjectStaticContent.data, + qt_static_metacall, + nullptr, + qt_staticMetaObjectRelocatingContent.metaTypes, + nullptr +} }; + +void PreviewOverlay::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) +{ + auto *_t = static_cast(_o); + if (_c == QMetaObject::InvokeMetaMethod) { + switch (_id) { + case 0: _t->closed(); break; + case 1: _t->navigateRequested((*reinterpret_cast>(_a[1]))); break; + case 2: _t->onPlayPauseClicked(); break; + case 3: _t->onPositionChanged((*reinterpret_cast>(_a[1]))); break; + case 4: _t->onDurationChanged((*reinterpret_cast>(_a[1]))); break; + case 5: _t->onSliderMoved((*reinterpret_cast>(_a[1]))); break; + case 6: _t->onSliderPressed(); break; + case 7: _t->onSliderReleased(); break; + case 8: _t->onStepPrevFrame(); break; + case 9: _t->onStepNextFrame(); break; + case 10: _t->onVolumeChanged((*reinterpret_cast>(_a[1]))); break; + case 11: _t->onToggleMute(); break; + case 12: _t->hideControls(); break; + case 13: _t->onSequenceTimerTick(); break; + case 14: _t->onColorSpaceChanged((*reinterpret_cast>(_a[1]))); break; + case 15: _t->onPlayerPositionChanged((*reinterpret_cast>(_a[1]))); break; + case 16: _t->onPlayerDurationChanged((*reinterpret_cast>(_a[1]))); break; + case 17: _t->onPlayerMediaInfo((*reinterpret_cast>(_a[1]))); break; + case 18: _t->onPlayerPlaybackStateChanged((*reinterpret_cast>(_a[1]))); break; + case 19: _t->onPlayerError((*reinterpret_cast>(_a[1]))); break; + case 20: _t->onPlayerEndOfStream(); break; + case 21: _t->onToggleAnnotation(); break; + case 22: _t->onAnnotationToolSelected(); break; + case 23: _t->onColorPicker(); break; + case 24: _t->onPenWidthChanged((*reinterpret_cast>(_a[1]))); break; + case 25: _t->onClearAnnotations(); break; + case 26: _t->onSaveAnnotatedFrame(); break; + case 27: _t->onSaveAllAnnotatedFrames(); break; + default: ; + } + } + if (_c == QMetaObject::IndexOfMethod) { + if (QtMocHelpers::indexOfMethod(_a, &PreviewOverlay::closed, 0)) + return; + if (QtMocHelpers::indexOfMethod(_a, &PreviewOverlay::navigateRequested, 1)) + return; + } +} + +const QMetaObject *PreviewOverlay::metaObject() const +{ + return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject; +} + +void *PreviewOverlay::qt_metacast(const char *_clname) +{ + if (!_clname) return nullptr; + if (!strcmp(_clname, qt_staticMetaObjectStaticContent.strings)) + return static_cast(this); + return QWidget::qt_metacast(_clname); +} + +int PreviewOverlay::qt_metacall(QMetaObject::Call _c, int _id, void **_a) +{ + _id = QWidget::qt_metacall(_c, _id, _a); + if (_id < 0) + return _id; + if (_c == QMetaObject::InvokeMetaMethod) { + if (_id < 28) + qt_static_metacall(this, _c, _id, _a); + _id -= 28; + } + if (_c == QMetaObject::RegisterMethodArgumentMetaType) { + if (_id < 28) + *reinterpret_cast(_a[0]) = QMetaType(); + _id -= 28; + } + return _id; +} + +// SIGNAL 0 +void PreviewOverlay::closed() +{ + QMetaObject::activate(this, &staticMetaObject, 0, nullptr); +} + +// SIGNAL 1 +void PreviewOverlay::navigateRequested(int _t1) +{ + QMetaObject::activate(this, &staticMetaObject, 1, nullptr, _t1); +} +namespace { +struct qt_meta_tag_ZN18SequenceFrameCacheE_t {}; +} // unnamed namespace + +template <> constexpr inline auto SequenceFrameCache::qt_create_metaobjectdata() +{ + namespace QMC = QtMocConstants; + QtMocHelpers::StringRefStorage qt_stringData { + "SequenceFrameCache", + "frameCached", + "", + "frameIndex", + "cacheSnapshot", + "QSet", + "frames" + }; + + QtMocHelpers::UintData qt_methods { + // Signal 'frameCached' + QtMocHelpers::SignalData(1, 2, QMC::AccessPublic, QMetaType::Void, {{ + { QMetaType::Int, 3 }, + }}), + // Signal 'cacheSnapshot' + QtMocHelpers::SignalData &)>(4, 2, QMC::AccessPublic, QMetaType::Void, {{ + { 0x80000000 | 5, 6 }, + }}), + }; + QtMocHelpers::UintData qt_properties { + }; + QtMocHelpers::UintData qt_enums { + }; + return QtMocHelpers::metaObjectData(QMC::MetaObjectFlag{}, qt_stringData, + qt_methods, qt_properties, qt_enums); +} +Q_CONSTINIT const QMetaObject SequenceFrameCache::staticMetaObject = { { + QMetaObject::SuperData::link(), + qt_staticMetaObjectStaticContent.stringdata, + qt_staticMetaObjectStaticContent.data, + qt_static_metacall, + nullptr, + qt_staticMetaObjectRelocatingContent.metaTypes, + nullptr +} }; + +void SequenceFrameCache::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) +{ + auto *_t = static_cast(_o); + if (_c == QMetaObject::InvokeMetaMethod) { + switch (_id) { + case 0: _t->frameCached((*reinterpret_cast>(_a[1]))); break; + case 1: _t->cacheSnapshot((*reinterpret_cast>>(_a[1]))); break; + default: ; + } + } + if (_c == QMetaObject::RegisterMethodArgumentMetaType) { + switch (_id) { + default: *reinterpret_cast(_a[0]) = QMetaType(); break; + case 1: + switch (*reinterpret_cast(_a[1])) { + default: *reinterpret_cast(_a[0]) = QMetaType(); break; + case 0: + *reinterpret_cast(_a[0]) = QMetaType::fromType< QSet >(); break; + } + break; + } + } + if (_c == QMetaObject::IndexOfMethod) { + if (QtMocHelpers::indexOfMethod(_a, &SequenceFrameCache::frameCached, 0)) + return; + if (QtMocHelpers::indexOfMethod & )>(_a, &SequenceFrameCache::cacheSnapshot, 1)) + return; + } +} + +const QMetaObject *SequenceFrameCache::metaObject() const +{ + return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject; +} + +void *SequenceFrameCache::qt_metacast(const char *_clname) +{ + if (!_clname) return nullptr; + if (!strcmp(_clname, qt_staticMetaObjectStaticContent.strings)) + return static_cast(this); + return QObject::qt_metacast(_clname); +} + +int SequenceFrameCache::qt_metacall(QMetaObject::Call _c, int _id, void **_a) +{ + _id = QObject::qt_metacall(_c, _id, _a); + if (_id < 0) + return _id; + if (_c == QMetaObject::InvokeMetaMethod) { + if (_id < 2) + qt_static_metacall(this, _c, _id, _a); + _id -= 2; + } + if (_c == QMetaObject::RegisterMethodArgumentMetaType) { + if (_id < 2) + qt_static_metacall(this, _c, _id, _a); + _id -= 2; + } + return _id; +} + +// SIGNAL 0 +void SequenceFrameCache::frameCached(int _t1) +{ + QMetaObject::activate(this, &staticMetaObject, 0, nullptr, _t1); +} + +// SIGNAL 1 +void SequenceFrameCache::cacheSnapshot(const QSet & _t1) +{ + QMetaObject::activate(this, &staticMetaObject, 1, nullptr, _t1); +} +namespace { +struct qt_meta_tag_ZN17FrameLoaderWorkerE_t {}; +} // unnamed namespace + +template <> constexpr inline auto FrameLoaderWorker::qt_create_metaobjectdata() +{ + namespace QMC = QtMocConstants; + QtMocHelpers::StringRefStorage qt_stringData { + "FrameLoaderWorker", + "frameLoaded", + "", + "frameIndex", + "QImage", + "image" + }; + + QtMocHelpers::UintData qt_methods { + // Signal 'frameLoaded' + QtMocHelpers::SignalData(1, 2, QMC::AccessPublic, QMetaType::Void, {{ + { QMetaType::Int, 3 }, { 0x80000000 | 4, 5 }, + }}), + }; + QtMocHelpers::UintData qt_properties { + }; + QtMocHelpers::UintData qt_enums { + }; + return QtMocHelpers::metaObjectData(QMC::MetaObjectFlag{}, qt_stringData, + qt_methods, qt_properties, qt_enums); +} +Q_CONSTINIT const QMetaObject FrameLoaderWorker::staticMetaObject = { { + QMetaObject::SuperData::link(), + qt_staticMetaObjectStaticContent.stringdata, + qt_staticMetaObjectStaticContent.data, + qt_static_metacall, + nullptr, + qt_staticMetaObjectRelocatingContent.metaTypes, + nullptr +} }; + +void FrameLoaderWorker::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) +{ + auto *_t = static_cast(_o); + if (_c == QMetaObject::InvokeMetaMethod) { + switch (_id) { + case 0: _t->frameLoaded((*reinterpret_cast>(_a[1])),(*reinterpret_cast>(_a[2]))); break; + default: ; + } + } + if (_c == QMetaObject::IndexOfMethod) { + if (QtMocHelpers::indexOfMethod(_a, &FrameLoaderWorker::frameLoaded, 0)) + return; + } +} + +const QMetaObject *FrameLoaderWorker::metaObject() const +{ + return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject; +} + +void *FrameLoaderWorker::qt_metacast(const char *_clname) +{ + if (!_clname) return nullptr; + if (!strcmp(_clname, qt_staticMetaObjectStaticContent.strings)) + return static_cast(this); + if (!strcmp(_clname, "QRunnable")) + return static_cast< QRunnable*>(this); + return QObject::qt_metacast(_clname); +} + +int FrameLoaderWorker::qt_metacall(QMetaObject::Call _c, int _id, void **_a) +{ + _id = QObject::qt_metacall(_c, _id, _a); + if (_id < 0) + return _id; + if (_c == QMetaObject::InvokeMetaMethod) { + if (_id < 1) + qt_static_metacall(this, _c, _id, _a); + _id -= 1; + } + if (_c == QMetaObject::RegisterMethodArgumentMetaType) { + if (_id < 1) + *reinterpret_cast(_a[0]) = QMetaType(); + _id -= 1; + } + return _id; +} + +// SIGNAL 0 +void FrameLoaderWorker::frameLoaded(int _t1, QImage _t2) +{ + QMetaObject::activate(this, &staticMetaObject, 0, nullptr, _t1, _t2); +} +QT_WARNING_POP diff --git a/build-linux/kassetmanagerqt_autogen/UVLADIE3JM/moc_progress_manager.cpp b/build-linux/kassetmanagerqt_autogen/UVLADIE3JM/moc_progress_manager.cpp new file mode 100644 index 00000000..8c34d905 --- /dev/null +++ b/build-linux/kassetmanagerqt_autogen/UVLADIE3JM/moc_progress_manager.cpp @@ -0,0 +1,224 @@ +/**************************************************************************** +** Meta object code from reading C++ file 'progress_manager.h' +** +** Created by: The Qt Meta Object Compiler version 69 (Qt 6.10.3) +** +** WARNING! All changes made in this file will be lost! +*****************************************************************************/ + +#include "../../../native/qt6/src/progress_manager.h" +#include + +#include + +#include + + +#include +#if !defined(Q_MOC_OUTPUT_REVISION) +#error "The header file 'progress_manager.h' doesn't include ." +#elif Q_MOC_OUTPUT_REVISION != 69 +#error "This file was generated using the moc from 6.10.3. It" +#error "cannot be used with the include files from this version of Qt." +#error "(The moc has changed too much.)" +#endif + +#ifndef Q_CONSTINIT +#define Q_CONSTINIT +#endif + +QT_WARNING_PUSH +QT_WARNING_DISABLE_DEPRECATED +QT_WARNING_DISABLE_GCC("-Wuseless-cast") +namespace { +struct qt_meta_tag_ZN15ProgressManagerE_t {}; +} // unnamed namespace + +template <> constexpr inline auto ProgressManager::qt_create_metaobjectdata() +{ + namespace QMC = QtMocConstants; + QtMocHelpers::StringRefStorage qt_stringData { + "ProgressManager", + "isActiveChanged", + "", + "messageChanged", + "currentChanged", + "totalChanged", + "percentageChanged", + "start", + "message", + "total", + "update", + "current", + "finish", + "isActive", + "percentage" + }; + + QtMocHelpers::UintData qt_methods { + // Signal 'isActiveChanged' + QtMocHelpers::SignalData(1, 2, QMC::AccessPublic, QMetaType::Void), + // Signal 'messageChanged' + QtMocHelpers::SignalData(3, 2, QMC::AccessPublic, QMetaType::Void), + // Signal 'currentChanged' + QtMocHelpers::SignalData(4, 2, QMC::AccessPublic, QMetaType::Void), + // Signal 'totalChanged' + QtMocHelpers::SignalData(5, 2, QMC::AccessPublic, QMetaType::Void), + // Signal 'percentageChanged' + QtMocHelpers::SignalData(6, 2, QMC::AccessPublic, QMetaType::Void), + // Method 'start' + QtMocHelpers::MethodData(7, 2, QMC::AccessPublic, QMetaType::Void, {{ + { QMetaType::QString, 8 }, { QMetaType::Int, 9 }, + }}), + // Method 'start' + QtMocHelpers::MethodData(7, 2, QMC::AccessPublic | QMC::MethodCloned, QMetaType::Void, {{ + { QMetaType::QString, 8 }, + }}), + // Method 'update' + QtMocHelpers::MethodData(10, 2, QMC::AccessPublic, QMetaType::Void, {{ + { QMetaType::Int, 11 }, { QMetaType::QString, 8 }, + }}), + // Method 'update' + QtMocHelpers::MethodData(10, 2, QMC::AccessPublic | QMC::MethodCloned, QMetaType::Void, {{ + { QMetaType::Int, 11 }, + }}), + // Method 'finish' + QtMocHelpers::MethodData(12, 2, QMC::AccessPublic, QMetaType::Void), + }; + QtMocHelpers::UintData qt_properties { + // property 'isActive' + QtMocHelpers::PropertyData(13, QMetaType::Bool, QMC::DefaultPropertyFlags, 0), + // property 'message' + QtMocHelpers::PropertyData(8, QMetaType::QString, QMC::DefaultPropertyFlags, 1), + // property 'current' + QtMocHelpers::PropertyData(11, QMetaType::Int, QMC::DefaultPropertyFlags, 2), + // property 'total' + QtMocHelpers::PropertyData(9, QMetaType::Int, QMC::DefaultPropertyFlags, 3), + // property 'percentage' + QtMocHelpers::PropertyData(14, QMetaType::Int, QMC::DefaultPropertyFlags, 4), + }; + QtMocHelpers::UintData qt_enums { + }; + return QtMocHelpers::metaObjectData(QMC::MetaObjectFlag{}, qt_stringData, + qt_methods, qt_properties, qt_enums); +} +Q_CONSTINIT const QMetaObject ProgressManager::staticMetaObject = { { + QMetaObject::SuperData::link(), + qt_staticMetaObjectStaticContent.stringdata, + qt_staticMetaObjectStaticContent.data, + qt_static_metacall, + nullptr, + qt_staticMetaObjectRelocatingContent.metaTypes, + nullptr +} }; + +void ProgressManager::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) +{ + auto *_t = static_cast(_o); + if (_c == QMetaObject::InvokeMetaMethod) { + switch (_id) { + case 0: _t->isActiveChanged(); break; + case 1: _t->messageChanged(); break; + case 2: _t->currentChanged(); break; + case 3: _t->totalChanged(); break; + case 4: _t->percentageChanged(); break; + case 5: _t->start((*reinterpret_cast>(_a[1])),(*reinterpret_cast>(_a[2]))); break; + case 6: _t->start((*reinterpret_cast>(_a[1]))); break; + case 7: _t->update((*reinterpret_cast>(_a[1])),(*reinterpret_cast>(_a[2]))); break; + case 8: _t->update((*reinterpret_cast>(_a[1]))); break; + case 9: _t->finish(); break; + default: ; + } + } + if (_c == QMetaObject::IndexOfMethod) { + if (QtMocHelpers::indexOfMethod(_a, &ProgressManager::isActiveChanged, 0)) + return; + if (QtMocHelpers::indexOfMethod(_a, &ProgressManager::messageChanged, 1)) + return; + if (QtMocHelpers::indexOfMethod(_a, &ProgressManager::currentChanged, 2)) + return; + if (QtMocHelpers::indexOfMethod(_a, &ProgressManager::totalChanged, 3)) + return; + if (QtMocHelpers::indexOfMethod(_a, &ProgressManager::percentageChanged, 4)) + return; + } + if (_c == QMetaObject::ReadProperty) { + void *_v = _a[0]; + switch (_id) { + case 0: *reinterpret_cast(_v) = _t->isActive(); break; + case 1: *reinterpret_cast(_v) = _t->message(); break; + case 2: *reinterpret_cast(_v) = _t->current(); break; + case 3: *reinterpret_cast(_v) = _t->total(); break; + case 4: *reinterpret_cast(_v) = _t->percentage(); break; + default: break; + } + } +} + +const QMetaObject *ProgressManager::metaObject() const +{ + return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject; +} + +void *ProgressManager::qt_metacast(const char *_clname) +{ + if (!_clname) return nullptr; + if (!strcmp(_clname, qt_staticMetaObjectStaticContent.strings)) + return static_cast(this); + return QObject::qt_metacast(_clname); +} + +int ProgressManager::qt_metacall(QMetaObject::Call _c, int _id, void **_a) +{ + _id = QObject::qt_metacall(_c, _id, _a); + if (_id < 0) + return _id; + if (_c == QMetaObject::InvokeMetaMethod) { + if (_id < 10) + qt_static_metacall(this, _c, _id, _a); + _id -= 10; + } + if (_c == QMetaObject::RegisterMethodArgumentMetaType) { + if (_id < 10) + *reinterpret_cast(_a[0]) = QMetaType(); + _id -= 10; + } + if (_c == QMetaObject::ReadProperty || _c == QMetaObject::WriteProperty + || _c == QMetaObject::ResetProperty || _c == QMetaObject::BindableProperty + || _c == QMetaObject::RegisterPropertyMetaType) { + qt_static_metacall(this, _c, _id, _a); + _id -= 5; + } + return _id; +} + +// SIGNAL 0 +void ProgressManager::isActiveChanged() +{ + QMetaObject::activate(this, &staticMetaObject, 0, nullptr); +} + +// SIGNAL 1 +void ProgressManager::messageChanged() +{ + QMetaObject::activate(this, &staticMetaObject, 1, nullptr); +} + +// SIGNAL 2 +void ProgressManager::currentChanged() +{ + QMetaObject::activate(this, &staticMetaObject, 2, nullptr); +} + +// SIGNAL 3 +void ProgressManager::totalChanged() +{ + QMetaObject::activate(this, &staticMetaObject, 3, nullptr); +} + +// SIGNAL 4 +void ProgressManager::percentageChanged() +{ + QMetaObject::activate(this, &staticMetaObject, 4, nullptr); +} +QT_WARNING_POP diff --git a/build-linux/kassetmanagerqt_autogen/UVLADIE3JM/moc_project_assets_model.cpp b/build-linux/kassetmanagerqt_autogen/UVLADIE3JM/moc_project_assets_model.cpp new file mode 100644 index 00000000..96f80c6b --- /dev/null +++ b/build-linux/kassetmanagerqt_autogen/UVLADIE3JM/moc_project_assets_model.cpp @@ -0,0 +1,244 @@ +/**************************************************************************** +** Meta object code from reading C++ file 'project_assets_model.h' +** +** Created by: The Qt Meta Object Compiler version 69 (Qt 6.10.3) +** +** WARNING! All changes made in this file will be lost! +*****************************************************************************/ + +#include "../../../native/qt6/src/project_assets_model.h" +#include + +#include + +#include + + +#include +#if !defined(Q_MOC_OUTPUT_REVISION) +#error "The header file 'project_assets_model.h' doesn't include ." +#elif Q_MOC_OUTPUT_REVISION != 69 +#error "This file was generated using the moc from 6.10.3. It" +#error "cannot be used with the include files from this version of Qt." +#error "(The moc has changed too much.)" +#endif + +#ifndef Q_CONSTINIT +#define Q_CONSTINIT +#endif + +QT_WARNING_PUSH +QT_WARNING_DISABLE_DEPRECATED +QT_WARNING_DISABLE_GCC("-Wuseless-cast") +namespace { +struct qt_meta_tag_ZN18ProjectAssetsModelE_t {}; +} // unnamed namespace + +template <> constexpr inline auto ProjectAssetsModel::qt_create_metaobjectdata() +{ + namespace QMC = QtMocConstants; + QtMocHelpers::StringRefStorage qt_stringData { + "ProjectAssetsModel", + "projectIdChanged", + "", + "folderIdChanged", + "searchQueryChanged", + "typeFilterChanged", + "showAllVersionsChanged", + "reload", + "scheduleReload", + "get", + "QVariantMap", + "row", + "getAssetIdForVersion", + "primaryAssetId", + "versionString", + "removeAssets", + "QVariantList", + "assetIds", + "projectId", + "folderId", + "searchQuery", + "typeFilter", + "showAllVersions" + }; + + QtMocHelpers::UintData qt_methods { + // Signal 'projectIdChanged' + QtMocHelpers::SignalData(1, 2, QMC::AccessPublic, QMetaType::Void), + // Signal 'folderIdChanged' + QtMocHelpers::SignalData(3, 2, QMC::AccessPublic, QMetaType::Void), + // Signal 'searchQueryChanged' + QtMocHelpers::SignalData(4, 2, QMC::AccessPublic, QMetaType::Void), + // Signal 'typeFilterChanged' + QtMocHelpers::SignalData(5, 2, QMC::AccessPublic, QMetaType::Void), + // Signal 'showAllVersionsChanged' + QtMocHelpers::SignalData(6, 2, QMC::AccessPublic, QMetaType::Void), + // Slot 'reload' + QtMocHelpers::SlotData(7, 2, QMC::AccessPublic, QMetaType::Void), + // Slot 'scheduleReload' + QtMocHelpers::SlotData(8, 2, QMC::AccessPrivate, QMetaType::Void), + // Method 'get' + QtMocHelpers::MethodData(9, 2, QMC::AccessPublic, 0x80000000 | 10, {{ + { QMetaType::Int, 11 }, + }}), + // Method 'getAssetIdForVersion' + QtMocHelpers::MethodData(12, 2, QMC::AccessPublic, QMetaType::Int, {{ + { QMetaType::Int, 13 }, { QMetaType::QString, 14 }, + }}), + // Method 'removeAssets' + QtMocHelpers::MethodData(15, 2, QMC::AccessPublic, QMetaType::Bool, {{ + { 0x80000000 | 16, 17 }, + }}), + }; + QtMocHelpers::UintData qt_properties { + // property 'projectId' + QtMocHelpers::PropertyData(18, QMetaType::Int, QMC::DefaultPropertyFlags | QMC::Writable | QMC::StdCppSet, 0), + // property 'folderId' + QtMocHelpers::PropertyData(19, QMetaType::Int, QMC::DefaultPropertyFlags | QMC::Writable | QMC::StdCppSet, 1), + // property 'searchQuery' + QtMocHelpers::PropertyData(20, QMetaType::QString, QMC::DefaultPropertyFlags | QMC::Writable | QMC::StdCppSet, 2), + // property 'typeFilter' + QtMocHelpers::PropertyData(21, QMetaType::Int, QMC::DefaultPropertyFlags | QMC::Writable | QMC::StdCppSet, 3), + // property 'showAllVersions' + QtMocHelpers::PropertyData(22, QMetaType::Bool, QMC::DefaultPropertyFlags | QMC::Writable | QMC::StdCppSet, 4), + }; + QtMocHelpers::UintData qt_enums { + }; + return QtMocHelpers::metaObjectData(QMC::MetaObjectFlag{}, qt_stringData, + qt_methods, qt_properties, qt_enums); +} +Q_CONSTINIT const QMetaObject ProjectAssetsModel::staticMetaObject = { { + QMetaObject::SuperData::link(), + qt_staticMetaObjectStaticContent.stringdata, + qt_staticMetaObjectStaticContent.data, + qt_static_metacall, + nullptr, + qt_staticMetaObjectRelocatingContent.metaTypes, + nullptr +} }; + +void ProjectAssetsModel::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) +{ + auto *_t = static_cast(_o); + if (_c == QMetaObject::InvokeMetaMethod) { + switch (_id) { + case 0: _t->projectIdChanged(); break; + case 1: _t->folderIdChanged(); break; + case 2: _t->searchQueryChanged(); break; + case 3: _t->typeFilterChanged(); break; + case 4: _t->showAllVersionsChanged(); break; + case 5: _t->reload(); break; + case 6: _t->scheduleReload(); break; + case 7: { QVariantMap _r = _t->get((*reinterpret_cast>(_a[1]))); + if (_a[0]) *reinterpret_cast(_a[0]) = std::move(_r); } break; + case 8: { int _r = _t->getAssetIdForVersion((*reinterpret_cast>(_a[1])),(*reinterpret_cast>(_a[2]))); + if (_a[0]) *reinterpret_cast(_a[0]) = std::move(_r); } break; + case 9: { bool _r = _t->removeAssets((*reinterpret_cast>(_a[1]))); + if (_a[0]) *reinterpret_cast(_a[0]) = std::move(_r); } break; + default: ; + } + } + if (_c == QMetaObject::IndexOfMethod) { + if (QtMocHelpers::indexOfMethod(_a, &ProjectAssetsModel::projectIdChanged, 0)) + return; + if (QtMocHelpers::indexOfMethod(_a, &ProjectAssetsModel::folderIdChanged, 1)) + return; + if (QtMocHelpers::indexOfMethod(_a, &ProjectAssetsModel::searchQueryChanged, 2)) + return; + if (QtMocHelpers::indexOfMethod(_a, &ProjectAssetsModel::typeFilterChanged, 3)) + return; + if (QtMocHelpers::indexOfMethod(_a, &ProjectAssetsModel::showAllVersionsChanged, 4)) + return; + } + if (_c == QMetaObject::ReadProperty) { + void *_v = _a[0]; + switch (_id) { + case 0: *reinterpret_cast(_v) = _t->projectId(); break; + case 1: *reinterpret_cast(_v) = _t->folderId(); break; + case 2: *reinterpret_cast(_v) = _t->searchQuery(); break; + case 3: *reinterpret_cast(_v) = _t->typeFilter(); break; + case 4: *reinterpret_cast(_v) = _t->showAllVersions(); break; + default: break; + } + } + if (_c == QMetaObject::WriteProperty) { + void *_v = _a[0]; + switch (_id) { + case 0: _t->setProjectId(*reinterpret_cast(_v)); break; + case 1: _t->setFolderId(*reinterpret_cast(_v)); break; + case 2: _t->setSearchQuery(*reinterpret_cast(_v)); break; + case 3: _t->setTypeFilter(*reinterpret_cast(_v)); break; + case 4: _t->setShowAllVersions(*reinterpret_cast(_v)); break; + default: break; + } + } +} + +const QMetaObject *ProjectAssetsModel::metaObject() const +{ + return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject; +} + +void *ProjectAssetsModel::qt_metacast(const char *_clname) +{ + if (!_clname) return nullptr; + if (!strcmp(_clname, qt_staticMetaObjectStaticContent.strings)) + return static_cast(this); + return QAbstractListModel::qt_metacast(_clname); +} + +int ProjectAssetsModel::qt_metacall(QMetaObject::Call _c, int _id, void **_a) +{ + _id = QAbstractListModel::qt_metacall(_c, _id, _a); + if (_id < 0) + return _id; + if (_c == QMetaObject::InvokeMetaMethod) { + if (_id < 10) + qt_static_metacall(this, _c, _id, _a); + _id -= 10; + } + if (_c == QMetaObject::RegisterMethodArgumentMetaType) { + if (_id < 10) + *reinterpret_cast(_a[0]) = QMetaType(); + _id -= 10; + } + if (_c == QMetaObject::ReadProperty || _c == QMetaObject::WriteProperty + || _c == QMetaObject::ResetProperty || _c == QMetaObject::BindableProperty + || _c == QMetaObject::RegisterPropertyMetaType) { + qt_static_metacall(this, _c, _id, _a); + _id -= 5; + } + return _id; +} + +// SIGNAL 0 +void ProjectAssetsModel::projectIdChanged() +{ + QMetaObject::activate(this, &staticMetaObject, 0, nullptr); +} + +// SIGNAL 1 +void ProjectAssetsModel::folderIdChanged() +{ + QMetaObject::activate(this, &staticMetaObject, 1, nullptr); +} + +// SIGNAL 2 +void ProjectAssetsModel::searchQueryChanged() +{ + QMetaObject::activate(this, &staticMetaObject, 2, nullptr); +} + +// SIGNAL 3 +void ProjectAssetsModel::typeFilterChanged() +{ + QMetaObject::activate(this, &staticMetaObject, 3, nullptr); +} + +// SIGNAL 4 +void ProjectAssetsModel::showAllVersionsChanged() +{ + QMetaObject::activate(this, &staticMetaObject, 4, nullptr); +} +QT_WARNING_POP diff --git a/build-linux/kassetmanagerqt_autogen/UVLADIE3JM/moc_project_db.cpp b/build-linux/kassetmanagerqt_autogen/UVLADIE3JM/moc_project_db.cpp new file mode 100644 index 00000000..c9adb689 --- /dev/null +++ b/build-linux/kassetmanagerqt_autogen/UVLADIE3JM/moc_project_db.cpp @@ -0,0 +1,161 @@ +/**************************************************************************** +** Meta object code from reading C++ file 'project_db.h' +** +** Created by: The Qt Meta Object Compiler version 69 (Qt 6.10.3) +** +** WARNING! All changes made in this file will be lost! +*****************************************************************************/ + +#include "../../../native/qt6/src/project_db.h" +#include + +#include + +#include + + +#include +#if !defined(Q_MOC_OUTPUT_REVISION) +#error "The header file 'project_db.h' doesn't include ." +#elif Q_MOC_OUTPUT_REVISION != 69 +#error "This file was generated using the moc from 6.10.3. It" +#error "cannot be used with the include files from this version of Qt." +#error "(The moc has changed too much.)" +#endif + +#ifndef Q_CONSTINIT +#define Q_CONSTINIT +#endif + +QT_WARNING_PUSH +QT_WARNING_DISABLE_DEPRECATED +QT_WARNING_DISABLE_GCC("-Wuseless-cast") +namespace { +struct qt_meta_tag_ZN9ProjectDBE_t {}; +} // unnamed namespace + +template <> constexpr inline auto ProjectDB::qt_create_metaobjectdata() +{ + namespace QMC = QtMocConstants; + QtMocHelpers::StringRefStorage qt_stringData { + "ProjectDB", + "projectsChanged", + "", + "projectAssetsChanged", + "projectId", + "notificationsChanged", + "projectFoldersChanged" + }; + + QtMocHelpers::UintData qt_methods { + // Signal 'projectsChanged' + QtMocHelpers::SignalData(1, 2, QMC::AccessPublic, QMetaType::Void), + // Signal 'projectAssetsChanged' + QtMocHelpers::SignalData(3, 2, QMC::AccessPublic, QMetaType::Void, {{ + { QMetaType::Int, 4 }, + }}), + // Signal 'notificationsChanged' + QtMocHelpers::SignalData(5, 2, QMC::AccessPublic, QMetaType::Void), + // Signal 'projectFoldersChanged' + QtMocHelpers::SignalData(6, 2, QMC::AccessPublic, QMetaType::Void, {{ + { QMetaType::Int, 4 }, + }}), + }; + QtMocHelpers::UintData qt_properties { + }; + QtMocHelpers::UintData qt_enums { + }; + return QtMocHelpers::metaObjectData(QMC::MetaObjectFlag{}, qt_stringData, + qt_methods, qt_properties, qt_enums); +} +Q_CONSTINIT const QMetaObject ProjectDB::staticMetaObject = { { + QMetaObject::SuperData::link(), + qt_staticMetaObjectStaticContent.stringdata, + qt_staticMetaObjectStaticContent.data, + qt_static_metacall, + nullptr, + qt_staticMetaObjectRelocatingContent.metaTypes, + nullptr +} }; + +void ProjectDB::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) +{ + auto *_t = static_cast(_o); + if (_c == QMetaObject::InvokeMetaMethod) { + switch (_id) { + case 0: _t->projectsChanged(); break; + case 1: _t->projectAssetsChanged((*reinterpret_cast>(_a[1]))); break; + case 2: _t->notificationsChanged(); break; + case 3: _t->projectFoldersChanged((*reinterpret_cast>(_a[1]))); break; + default: ; + } + } + if (_c == QMetaObject::IndexOfMethod) { + if (QtMocHelpers::indexOfMethod(_a, &ProjectDB::projectsChanged, 0)) + return; + if (QtMocHelpers::indexOfMethod(_a, &ProjectDB::projectAssetsChanged, 1)) + return; + if (QtMocHelpers::indexOfMethod(_a, &ProjectDB::notificationsChanged, 2)) + return; + if (QtMocHelpers::indexOfMethod(_a, &ProjectDB::projectFoldersChanged, 3)) + return; + } +} + +const QMetaObject *ProjectDB::metaObject() const +{ + return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject; +} + +void *ProjectDB::qt_metacast(const char *_clname) +{ + if (!_clname) return nullptr; + if (!strcmp(_clname, qt_staticMetaObjectStaticContent.strings)) + return static_cast(this); + if (!strcmp(_clname, "IAssetDatabase")) + return static_cast< IAssetDatabase*>(this); + return QObject::qt_metacast(_clname); +} + +int ProjectDB::qt_metacall(QMetaObject::Call _c, int _id, void **_a) +{ + _id = QObject::qt_metacall(_c, _id, _a); + if (_id < 0) + return _id; + if (_c == QMetaObject::InvokeMetaMethod) { + if (_id < 4) + qt_static_metacall(this, _c, _id, _a); + _id -= 4; + } + if (_c == QMetaObject::RegisterMethodArgumentMetaType) { + if (_id < 4) + *reinterpret_cast(_a[0]) = QMetaType(); + _id -= 4; + } + return _id; +} + +// SIGNAL 0 +void ProjectDB::projectsChanged() +{ + QMetaObject::activate(this, &staticMetaObject, 0, nullptr); +} + +// SIGNAL 1 +void ProjectDB::projectAssetsChanged(int _t1) +{ + QMetaObject::activate(this, &staticMetaObject, 1, nullptr, _t1); +} + +// SIGNAL 2 +void ProjectDB::notificationsChanged() +{ + QMetaObject::activate(this, &staticMetaObject, 2, nullptr); +} + +// SIGNAL 3 +void ProjectDB::projectFoldersChanged(int _t1) +{ + QMetaObject::activate(this, &staticMetaObject, 3, nullptr, _t1); +} +QT_WARNING_POP diff --git a/build-linux/kassetmanagerqt_autogen/UVLADIE3JM/moc_project_folder_watcher.cpp b/build-linux/kassetmanagerqt_autogen/UVLADIE3JM/moc_project_folder_watcher.cpp new file mode 100644 index 00000000..f0937234 --- /dev/null +++ b/build-linux/kassetmanagerqt_autogen/UVLADIE3JM/moc_project_folder_watcher.cpp @@ -0,0 +1,138 @@ +/**************************************************************************** +** Meta object code from reading C++ file 'project_folder_watcher.h' +** +** Created by: The Qt Meta Object Compiler version 69 (Qt 6.10.3) +** +** WARNING! All changes made in this file will be lost! +*****************************************************************************/ + +#include "../../../native/qt6/src/project_folder_watcher.h" +#include + +#include + +#include + + +#include +#if !defined(Q_MOC_OUTPUT_REVISION) +#error "The header file 'project_folder_watcher.h' doesn't include ." +#elif Q_MOC_OUTPUT_REVISION != 69 +#error "This file was generated using the moc from 6.10.3. It" +#error "cannot be used with the include files from this version of Qt." +#error "(The moc has changed too much.)" +#endif + +#ifndef Q_CONSTINIT +#define Q_CONSTINIT +#endif + +QT_WARNING_PUSH +QT_WARNING_DISABLE_DEPRECATED +QT_WARNING_DISABLE_GCC("-Wuseless-cast") +namespace { +struct qt_meta_tag_ZN20ProjectFolderWatcherE_t {}; +} // unnamed namespace + +template <> constexpr inline auto ProjectFolderWatcher::qt_create_metaobjectdata() +{ + namespace QMC = QtMocConstants; + QtMocHelpers::StringRefStorage qt_stringData { + "ProjectFolderWatcher", + "projectFolderChanged", + "", + "projectFolderId", + "path", + "onDirectoryChanged", + "onFileChanged", + "onRefreshTimeout" + }; + + QtMocHelpers::UintData qt_methods { + // Signal 'projectFolderChanged' + QtMocHelpers::SignalData(1, 2, QMC::AccessPublic, QMetaType::Void, {{ + { QMetaType::Int, 3 }, { QMetaType::QString, 4 }, + }}), + // Slot 'onDirectoryChanged' + QtMocHelpers::SlotData(5, 2, QMC::AccessPrivate, QMetaType::Void, {{ + { QMetaType::QString, 4 }, + }}), + // Slot 'onFileChanged' + QtMocHelpers::SlotData(6, 2, QMC::AccessPrivate, QMetaType::Void, {{ + { QMetaType::QString, 4 }, + }}), + // Slot 'onRefreshTimeout' + QtMocHelpers::SlotData(7, 2, QMC::AccessPrivate, QMetaType::Void), + }; + QtMocHelpers::UintData qt_properties { + }; + QtMocHelpers::UintData qt_enums { + }; + return QtMocHelpers::metaObjectData(QMC::MetaObjectFlag{}, qt_stringData, + qt_methods, qt_properties, qt_enums); +} +Q_CONSTINIT const QMetaObject ProjectFolderWatcher::staticMetaObject = { { + QMetaObject::SuperData::link(), + qt_staticMetaObjectStaticContent.stringdata, + qt_staticMetaObjectStaticContent.data, + qt_static_metacall, + nullptr, + qt_staticMetaObjectRelocatingContent.metaTypes, + nullptr +} }; + +void ProjectFolderWatcher::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) +{ + auto *_t = static_cast(_o); + if (_c == QMetaObject::InvokeMetaMethod) { + switch (_id) { + case 0: _t->projectFolderChanged((*reinterpret_cast>(_a[1])),(*reinterpret_cast>(_a[2]))); break; + case 1: _t->onDirectoryChanged((*reinterpret_cast>(_a[1]))); break; + case 2: _t->onFileChanged((*reinterpret_cast>(_a[1]))); break; + case 3: _t->onRefreshTimeout(); break; + default: ; + } + } + if (_c == QMetaObject::IndexOfMethod) { + if (QtMocHelpers::indexOfMethod(_a, &ProjectFolderWatcher::projectFolderChanged, 0)) + return; + } +} + +const QMetaObject *ProjectFolderWatcher::metaObject() const +{ + return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject; +} + +void *ProjectFolderWatcher::qt_metacast(const char *_clname) +{ + if (!_clname) return nullptr; + if (!strcmp(_clname, qt_staticMetaObjectStaticContent.strings)) + return static_cast(this); + return QObject::qt_metacast(_clname); +} + +int ProjectFolderWatcher::qt_metacall(QMetaObject::Call _c, int _id, void **_a) +{ + _id = QObject::qt_metacall(_c, _id, _a); + if (_id < 0) + return _id; + if (_c == QMetaObject::InvokeMetaMethod) { + if (_id < 4) + qt_static_metacall(this, _c, _id, _a); + _id -= 4; + } + if (_c == QMetaObject::RegisterMethodArgumentMetaType) { + if (_id < 4) + *reinterpret_cast(_a[0]) = QMetaType(); + _id -= 4; + } + return _id; +} + +// SIGNAL 0 +void ProjectFolderWatcher::projectFolderChanged(int _t1, const QString & _t2) +{ + QMetaObject::activate(this, &staticMetaObject, 0, nullptr, _t1, _t2); +} +QT_WARNING_POP diff --git a/build-linux/kassetmanagerqt_autogen/UVLADIE3JM/moc_project_folders_model.cpp b/build-linux/kassetmanagerqt_autogen/UVLADIE3JM/moc_project_folders_model.cpp new file mode 100644 index 00000000..e2bcc08a --- /dev/null +++ b/build-linux/kassetmanagerqt_autogen/UVLADIE3JM/moc_project_folders_model.cpp @@ -0,0 +1,90 @@ +/**************************************************************************** +** Meta object code from reading C++ file 'project_folders_model.h' +** +** Created by: The Qt Meta Object Compiler version 69 (Qt 6.10.3) +** +** WARNING! All changes made in this file will be lost! +*****************************************************************************/ + +#include "../../../native/qt6/src/project_folders_model.h" +#include + +#include + +#include + + +#include +#if !defined(Q_MOC_OUTPUT_REVISION) +#error "The header file 'project_folders_model.h' doesn't include ." +#elif Q_MOC_OUTPUT_REVISION != 69 +#error "This file was generated using the moc from 6.10.3. It" +#error "cannot be used with the include files from this version of Qt." +#error "(The moc has changed too much.)" +#endif + +#ifndef Q_CONSTINIT +#define Q_CONSTINIT +#endif + +QT_WARNING_PUSH +QT_WARNING_DISABLE_DEPRECATED +QT_WARNING_DISABLE_GCC("-Wuseless-cast") +namespace { +struct qt_meta_tag_ZN19ProjectFoldersModelE_t {}; +} // unnamed namespace + +template <> constexpr inline auto ProjectFoldersModel::qt_create_metaobjectdata() +{ + namespace QMC = QtMocConstants; + QtMocHelpers::StringRefStorage qt_stringData { + "ProjectFoldersModel" + }; + + QtMocHelpers::UintData qt_methods { + }; + QtMocHelpers::UintData qt_properties { + }; + QtMocHelpers::UintData qt_enums { + }; + return QtMocHelpers::metaObjectData(QMC::MetaObjectFlag{}, qt_stringData, + qt_methods, qt_properties, qt_enums); +} +Q_CONSTINIT const QMetaObject ProjectFoldersModel::staticMetaObject = { { + QMetaObject::SuperData::link(), + qt_staticMetaObjectStaticContent.stringdata, + qt_staticMetaObjectStaticContent.data, + qt_static_metacall, + nullptr, + qt_staticMetaObjectRelocatingContent.metaTypes, + nullptr +} }; + +void ProjectFoldersModel::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) +{ + auto *_t = static_cast(_o); + (void)_t; + (void)_c; + (void)_id; + (void)_a; +} + +const QMetaObject *ProjectFoldersModel::metaObject() const +{ + return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject; +} + +void *ProjectFoldersModel::qt_metacast(const char *_clname) +{ + if (!_clname) return nullptr; + if (!strcmp(_clname, qt_staticMetaObjectStaticContent.strings)) + return static_cast(this); + return QAbstractItemModel::qt_metacast(_clname); +} + +int ProjectFoldersModel::qt_metacall(QMetaObject::Call _c, int _id, void **_a) +{ + _id = QAbstractItemModel::qt_metacall(_c, _id, _a); + return _id; +} +QT_WARNING_POP diff --git a/build-linux/kassetmanagerqt_autogen/UVLADIE3JM/moc_project_import_worker.cpp b/build-linux/kassetmanagerqt_autogen/UVLADIE3JM/moc_project_import_worker.cpp new file mode 100644 index 00000000..9c785d15 --- /dev/null +++ b/build-linux/kassetmanagerqt_autogen/UVLADIE3JM/moc_project_import_worker.cpp @@ -0,0 +1,311 @@ +/**************************************************************************** +** Meta object code from reading C++ file 'project_import_worker.h' +** +** Created by: The Qt Meta Object Compiler version 69 (Qt 6.10.3) +** +** WARNING! All changes made in this file will be lost! +*****************************************************************************/ + +#include "../../../native/qt6/src/project_import_worker.h" +#include + +#include + +#include + + +#include +#if !defined(Q_MOC_OUTPUT_REVISION) +#error "The header file 'project_import_worker.h' doesn't include ." +#elif Q_MOC_OUTPUT_REVISION != 69 +#error "This file was generated using the moc from 6.10.3. It" +#error "cannot be used with the include files from this version of Qt." +#error "(The moc has changed too much.)" +#endif + +#ifndef Q_CONSTINIT +#define Q_CONSTINIT +#endif + +QT_WARNING_PUSH +QT_WARNING_DISABLE_DEPRECATED +QT_WARNING_DISABLE_GCC("-Wuseless-cast") +namespace { +struct qt_meta_tag_ZN19ProjectImportWorkerE_t {}; +} // unnamed namespace + +template <> constexpr inline auto ProjectImportWorker::qt_create_metaobjectdata() +{ + namespace QMC = QtMocConstants; + QtMocHelpers::StringRefStorage qt_stringData { + "ProjectImportWorker", + "progressChanged", + "", + "current", + "total", + "currentFileChanged", + "fileName", + "currentFolderChanged", + "folderName", + "importFinished", + "success", + "errorMessage", + "doImport", + "requestCancel" + }; + + QtMocHelpers::UintData qt_methods { + // Signal 'progressChanged' + QtMocHelpers::SignalData(1, 2, QMC::AccessPublic, QMetaType::Void, {{ + { QMetaType::Int, 3 }, { QMetaType::Int, 4 }, + }}), + // Signal 'currentFileChanged' + QtMocHelpers::SignalData(5, 2, QMC::AccessPublic, QMetaType::Void, {{ + { QMetaType::QString, 6 }, + }}), + // Signal 'currentFolderChanged' + QtMocHelpers::SignalData(7, 2, QMC::AccessPublic, QMetaType::Void, {{ + { QMetaType::QString, 8 }, + }}), + // Signal 'importFinished' + QtMocHelpers::SignalData(9, 2, QMC::AccessPublic, QMetaType::Void, {{ + { QMetaType::Bool, 10 }, { QMetaType::QString, 11 }, + }}), + // Slot 'doImport' + QtMocHelpers::SlotData(12, 2, QMC::AccessPublic, QMetaType::Void), + // Slot 'requestCancel' + QtMocHelpers::SlotData(13, 2, QMC::AccessPublic, QMetaType::Void), + }; + QtMocHelpers::UintData qt_properties { + }; + QtMocHelpers::UintData qt_enums { + }; + return QtMocHelpers::metaObjectData(QMC::MetaObjectFlag{}, qt_stringData, + qt_methods, qt_properties, qt_enums); +} +Q_CONSTINIT const QMetaObject ProjectImportWorker::staticMetaObject = { { + QMetaObject::SuperData::link(), + qt_staticMetaObjectStaticContent.stringdata, + qt_staticMetaObjectStaticContent.data, + qt_static_metacall, + nullptr, + qt_staticMetaObjectRelocatingContent.metaTypes, + nullptr +} }; + +void ProjectImportWorker::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) +{ + auto *_t = static_cast(_o); + if (_c == QMetaObject::InvokeMetaMethod) { + switch (_id) { + case 0: _t->progressChanged((*reinterpret_cast>(_a[1])),(*reinterpret_cast>(_a[2]))); break; + case 1: _t->currentFileChanged((*reinterpret_cast>(_a[1]))); break; + case 2: _t->currentFolderChanged((*reinterpret_cast>(_a[1]))); break; + case 3: _t->importFinished((*reinterpret_cast>(_a[1])),(*reinterpret_cast>(_a[2]))); break; + case 4: _t->doImport(); break; + case 5: _t->requestCancel(); break; + default: ; + } + } + if (_c == QMetaObject::IndexOfMethod) { + if (QtMocHelpers::indexOfMethod(_a, &ProjectImportWorker::progressChanged, 0)) + return; + if (QtMocHelpers::indexOfMethod(_a, &ProjectImportWorker::currentFileChanged, 1)) + return; + if (QtMocHelpers::indexOfMethod(_a, &ProjectImportWorker::currentFolderChanged, 2)) + return; + if (QtMocHelpers::indexOfMethod(_a, &ProjectImportWorker::importFinished, 3)) + return; + } +} + +const QMetaObject *ProjectImportWorker::metaObject() const +{ + return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject; +} + +void *ProjectImportWorker::qt_metacast(const char *_clname) +{ + if (!_clname) return nullptr; + if (!strcmp(_clname, qt_staticMetaObjectStaticContent.strings)) + return static_cast(this); + return QObject::qt_metacast(_clname); +} + +int ProjectImportWorker::qt_metacall(QMetaObject::Call _c, int _id, void **_a) +{ + _id = QObject::qt_metacall(_c, _id, _a); + if (_id < 0) + return _id; + if (_c == QMetaObject::InvokeMetaMethod) { + if (_id < 6) + qt_static_metacall(this, _c, _id, _a); + _id -= 6; + } + if (_c == QMetaObject::RegisterMethodArgumentMetaType) { + if (_id < 6) + *reinterpret_cast(_a[0]) = QMetaType(); + _id -= 6; + } + return _id; +} + +// SIGNAL 0 +void ProjectImportWorker::progressChanged(int _t1, int _t2) +{ + QMetaObject::activate(this, &staticMetaObject, 0, nullptr, _t1, _t2); +} + +// SIGNAL 1 +void ProjectImportWorker::currentFileChanged(const QString & _t1) +{ + QMetaObject::activate(this, &staticMetaObject, 1, nullptr, _t1); +} + +// SIGNAL 2 +void ProjectImportWorker::currentFolderChanged(const QString & _t1) +{ + QMetaObject::activate(this, &staticMetaObject, 2, nullptr, _t1); +} + +// SIGNAL 3 +void ProjectImportWorker::importFinished(bool _t1, const QString & _t2) +{ + QMetaObject::activate(this, &staticMetaObject, 3, nullptr, _t1, _t2); +} +namespace { +struct qt_meta_tag_ZN23ProjectImportControllerE_t {}; +} // unnamed namespace + +template <> constexpr inline auto ProjectImportController::qt_create_metaobjectdata() +{ + namespace QMC = QtMocConstants; + QtMocHelpers::StringRefStorage qt_stringData { + "ProjectImportController", + "progressChanged", + "", + "current", + "total", + "currentFileChanged", + "fileName", + "currentFolderChanged", + "folderName", + "importFinished", + "success", + "errorMessage" + }; + + QtMocHelpers::UintData qt_methods { + // Signal 'progressChanged' + QtMocHelpers::SignalData(1, 2, QMC::AccessPublic, QMetaType::Void, {{ + { QMetaType::Int, 3 }, { QMetaType::Int, 4 }, + }}), + // Signal 'currentFileChanged' + QtMocHelpers::SignalData(5, 2, QMC::AccessPublic, QMetaType::Void, {{ + { QMetaType::QString, 6 }, + }}), + // Signal 'currentFolderChanged' + QtMocHelpers::SignalData(7, 2, QMC::AccessPublic, QMetaType::Void, {{ + { QMetaType::QString, 8 }, + }}), + // Signal 'importFinished' + QtMocHelpers::SignalData(9, 2, QMC::AccessPublic, QMetaType::Void, {{ + { QMetaType::Bool, 10 }, { QMetaType::QString, 11 }, + }}), + }; + QtMocHelpers::UintData qt_properties { + }; + QtMocHelpers::UintData qt_enums { + }; + return QtMocHelpers::metaObjectData(QMC::MetaObjectFlag{}, qt_stringData, + qt_methods, qt_properties, qt_enums); +} +Q_CONSTINIT const QMetaObject ProjectImportController::staticMetaObject = { { + QMetaObject::SuperData::link(), + qt_staticMetaObjectStaticContent.stringdata, + qt_staticMetaObjectStaticContent.data, + qt_static_metacall, + nullptr, + qt_staticMetaObjectRelocatingContent.metaTypes, + nullptr +} }; + +void ProjectImportController::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) +{ + auto *_t = static_cast(_o); + if (_c == QMetaObject::InvokeMetaMethod) { + switch (_id) { + case 0: _t->progressChanged((*reinterpret_cast>(_a[1])),(*reinterpret_cast>(_a[2]))); break; + case 1: _t->currentFileChanged((*reinterpret_cast>(_a[1]))); break; + case 2: _t->currentFolderChanged((*reinterpret_cast>(_a[1]))); break; + case 3: _t->importFinished((*reinterpret_cast>(_a[1])),(*reinterpret_cast>(_a[2]))); break; + default: ; + } + } + if (_c == QMetaObject::IndexOfMethod) { + if (QtMocHelpers::indexOfMethod(_a, &ProjectImportController::progressChanged, 0)) + return; + if (QtMocHelpers::indexOfMethod(_a, &ProjectImportController::currentFileChanged, 1)) + return; + if (QtMocHelpers::indexOfMethod(_a, &ProjectImportController::currentFolderChanged, 2)) + return; + if (QtMocHelpers::indexOfMethod(_a, &ProjectImportController::importFinished, 3)) + return; + } +} + +const QMetaObject *ProjectImportController::metaObject() const +{ + return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject; +} + +void *ProjectImportController::qt_metacast(const char *_clname) +{ + if (!_clname) return nullptr; + if (!strcmp(_clname, qt_staticMetaObjectStaticContent.strings)) + return static_cast(this); + return QObject::qt_metacast(_clname); +} + +int ProjectImportController::qt_metacall(QMetaObject::Call _c, int _id, void **_a) +{ + _id = QObject::qt_metacall(_c, _id, _a); + if (_id < 0) + return _id; + if (_c == QMetaObject::InvokeMetaMethod) { + if (_id < 4) + qt_static_metacall(this, _c, _id, _a); + _id -= 4; + } + if (_c == QMetaObject::RegisterMethodArgumentMetaType) { + if (_id < 4) + *reinterpret_cast(_a[0]) = QMetaType(); + _id -= 4; + } + return _id; +} + +// SIGNAL 0 +void ProjectImportController::progressChanged(int _t1, int _t2) +{ + QMetaObject::activate(this, &staticMetaObject, 0, nullptr, _t1, _t2); +} + +// SIGNAL 1 +void ProjectImportController::currentFileChanged(const QString & _t1) +{ + QMetaObject::activate(this, &staticMetaObject, 1, nullptr, _t1); +} + +// SIGNAL 2 +void ProjectImportController::currentFolderChanged(const QString & _t1) +{ + QMetaObject::activate(this, &staticMetaObject, 2, nullptr, _t1); +} + +// SIGNAL 3 +void ProjectImportController::importFinished(bool _t1, const QString & _t2) +{ + QMetaObject::activate(this, &staticMetaObject, 3, nullptr, _t1, _t2); +} +QT_WARNING_POP diff --git a/build-linux/kassetmanagerqt_autogen/UVLADIE3JM/moc_project_item_delegate.cpp b/build-linux/kassetmanagerqt_autogen/UVLADIE3JM/moc_project_item_delegate.cpp new file mode 100644 index 00000000..15eb75c8 --- /dev/null +++ b/build-linux/kassetmanagerqt_autogen/UVLADIE3JM/moc_project_item_delegate.cpp @@ -0,0 +1,140 @@ +/**************************************************************************** +** Meta object code from reading C++ file 'project_item_delegate.h' +** +** Created by: The Qt Meta Object Compiler version 69 (Qt 6.10.3) +** +** WARNING! All changes made in this file will be lost! +*****************************************************************************/ + +#include "../../../native/qt6/src/project_item_delegate.h" +#include + +#include + +#include + + +#include +#if !defined(Q_MOC_OUTPUT_REVISION) +#error "The header file 'project_item_delegate.h' doesn't include ." +#elif Q_MOC_OUTPUT_REVISION != 69 +#error "This file was generated using the moc from 6.10.3. It" +#error "cannot be used with the include files from this version of Qt." +#error "(The moc has changed too much.)" +#endif + +#ifndef Q_CONSTINIT +#define Q_CONSTINIT +#endif + +QT_WARNING_PUSH +QT_WARNING_DISABLE_DEPRECATED +QT_WARNING_DISABLE_GCC("-Wuseless-cast") +namespace { +struct qt_meta_tag_ZN19ProjectItemDelegateE_t {}; +} // unnamed namespace + +template <> constexpr inline auto ProjectItemDelegate::qt_create_metaobjectdata() +{ + namespace QMC = QtMocConstants; + QtMocHelpers::StringRefStorage qt_stringData { + "ProjectItemDelegate", + "versionSelected", + "", + "assetId", + "versionPath", + "versionDropdownRequested", + "QModelIndex", + "index", + "QPoint", + "globalPos" + }; + + QtMocHelpers::UintData qt_methods { + // Signal 'versionSelected' + QtMocHelpers::SignalData(1, 2, QMC::AccessPublic, QMetaType::Void, {{ + { QMetaType::LongLong, 3 }, { QMetaType::QString, 4 }, + }}), + // Signal 'versionDropdownRequested' + QtMocHelpers::SignalData(5, 2, QMC::AccessPublic, QMetaType::Void, {{ + { 0x80000000 | 6, 7 }, { 0x80000000 | 8, 9 }, + }}), + }; + QtMocHelpers::UintData qt_properties { + }; + QtMocHelpers::UintData qt_enums { + }; + return QtMocHelpers::metaObjectData(QMC::MetaObjectFlag{}, qt_stringData, + qt_methods, qt_properties, qt_enums); +} +Q_CONSTINIT const QMetaObject ProjectItemDelegate::staticMetaObject = { { + QMetaObject::SuperData::link(), + qt_staticMetaObjectStaticContent.stringdata, + qt_staticMetaObjectStaticContent.data, + qt_static_metacall, + nullptr, + qt_staticMetaObjectRelocatingContent.metaTypes, + nullptr +} }; + +void ProjectItemDelegate::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) +{ + auto *_t = static_cast(_o); + if (_c == QMetaObject::InvokeMetaMethod) { + switch (_id) { + case 0: _t->versionSelected((*reinterpret_cast>(_a[1])),(*reinterpret_cast>(_a[2]))); break; + case 1: _t->versionDropdownRequested((*reinterpret_cast>(_a[1])),(*reinterpret_cast>(_a[2]))); break; + default: ; + } + } + if (_c == QMetaObject::IndexOfMethod) { + if (QtMocHelpers::indexOfMethod(_a, &ProjectItemDelegate::versionSelected, 0)) + return; + if (QtMocHelpers::indexOfMethod(_a, &ProjectItemDelegate::versionDropdownRequested, 1)) + return; + } +} + +const QMetaObject *ProjectItemDelegate::metaObject() const +{ + return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject; +} + +void *ProjectItemDelegate::qt_metacast(const char *_clname) +{ + if (!_clname) return nullptr; + if (!strcmp(_clname, qt_staticMetaObjectStaticContent.strings)) + return static_cast(this); + return QStyledItemDelegate::qt_metacast(_clname); +} + +int ProjectItemDelegate::qt_metacall(QMetaObject::Call _c, int _id, void **_a) +{ + _id = QStyledItemDelegate::qt_metacall(_c, _id, _a); + if (_id < 0) + return _id; + if (_c == QMetaObject::InvokeMetaMethod) { + if (_id < 2) + qt_static_metacall(this, _c, _id, _a); + _id -= 2; + } + if (_c == QMetaObject::RegisterMethodArgumentMetaType) { + if (_id < 2) + *reinterpret_cast(_a[0]) = QMetaType(); + _id -= 2; + } + return _id; +} + +// SIGNAL 0 +void ProjectItemDelegate::versionSelected(qint64 _t1, const QString & _t2) +{ + QMetaObject::activate(this, &staticMetaObject, 0, nullptr, _t1, _t2); +} + +// SIGNAL 1 +void ProjectItemDelegate::versionDropdownRequested(const QModelIndex & _t1, const QPoint & _t2) +{ + QMetaObject::activate(this, &staticMetaObject, 1, nullptr, _t1, _t2); +} +QT_WARNING_POP diff --git a/build-linux/kassetmanagerqt_autogen/UVLADIE3JM/moc_project_manager_watcher.cpp b/build-linux/kassetmanagerqt_autogen/UVLADIE3JM/moc_project_manager_watcher.cpp new file mode 100644 index 00000000..13dd1542 --- /dev/null +++ b/build-linux/kassetmanagerqt_autogen/UVLADIE3JM/moc_project_manager_watcher.cpp @@ -0,0 +1,148 @@ +/**************************************************************************** +** Meta object code from reading C++ file 'project_manager_watcher.h' +** +** Created by: The Qt Meta Object Compiler version 69 (Qt 6.10.3) +** +** WARNING! All changes made in this file will be lost! +*****************************************************************************/ + +#include "../../../native/qt6/src/project_manager_watcher.h" +#include + +#include + +#include + + +#include +#if !defined(Q_MOC_OUTPUT_REVISION) +#error "The header file 'project_manager_watcher.h' doesn't include ." +#elif Q_MOC_OUTPUT_REVISION != 69 +#error "This file was generated using the moc from 6.10.3. It" +#error "cannot be used with the include files from this version of Qt." +#error "(The moc has changed too much.)" +#endif + +#ifndef Q_CONSTINIT +#define Q_CONSTINIT +#endif + +QT_WARNING_PUSH +QT_WARNING_DISABLE_DEPRECATED +QT_WARNING_DISABLE_GCC("-Wuseless-cast") +namespace { +struct qt_meta_tag_ZN21ProjectManagerWatcherE_t {}; +} // unnamed namespace + +template <> constexpr inline auto ProjectManagerWatcher::qt_create_metaobjectdata() +{ + namespace QMC = QtMocConstants; + QtMocHelpers::StringRefStorage qt_stringData { + "ProjectManagerWatcher", + "newFilesDetected", + "", + "projectId", + "newFiles", + "filesRemoved", + "removedFiles", + "onDirectoryChanged", + "path", + "onProcessChanges" + }; + + QtMocHelpers::UintData qt_methods { + // Signal 'newFilesDetected' + QtMocHelpers::SignalData(1, 2, QMC::AccessPublic, QMetaType::Void, {{ + { QMetaType::Int, 3 }, { QMetaType::QStringList, 4 }, + }}), + // Signal 'filesRemoved' + QtMocHelpers::SignalData(5, 2, QMC::AccessPublic, QMetaType::Void, {{ + { QMetaType::Int, 3 }, { QMetaType::QStringList, 6 }, + }}), + // Slot 'onDirectoryChanged' + QtMocHelpers::SlotData(7, 2, QMC::AccessPrivate, QMetaType::Void, {{ + { QMetaType::QString, 8 }, + }}), + // Slot 'onProcessChanges' + QtMocHelpers::SlotData(9, 2, QMC::AccessPrivate, QMetaType::Void), + }; + QtMocHelpers::UintData qt_properties { + }; + QtMocHelpers::UintData qt_enums { + }; + return QtMocHelpers::metaObjectData(QMC::MetaObjectFlag{}, qt_stringData, + qt_methods, qt_properties, qt_enums); +} +Q_CONSTINIT const QMetaObject ProjectManagerWatcher::staticMetaObject = { { + QMetaObject::SuperData::link(), + qt_staticMetaObjectStaticContent.stringdata, + qt_staticMetaObjectStaticContent.data, + qt_static_metacall, + nullptr, + qt_staticMetaObjectRelocatingContent.metaTypes, + nullptr +} }; + +void ProjectManagerWatcher::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) +{ + auto *_t = static_cast(_o); + if (_c == QMetaObject::InvokeMetaMethod) { + switch (_id) { + case 0: _t->newFilesDetected((*reinterpret_cast>(_a[1])),(*reinterpret_cast>(_a[2]))); break; + case 1: _t->filesRemoved((*reinterpret_cast>(_a[1])),(*reinterpret_cast>(_a[2]))); break; + case 2: _t->onDirectoryChanged((*reinterpret_cast>(_a[1]))); break; + case 3: _t->onProcessChanges(); break; + default: ; + } + } + if (_c == QMetaObject::IndexOfMethod) { + if (QtMocHelpers::indexOfMethod(_a, &ProjectManagerWatcher::newFilesDetected, 0)) + return; + if (QtMocHelpers::indexOfMethod(_a, &ProjectManagerWatcher::filesRemoved, 1)) + return; + } +} + +const QMetaObject *ProjectManagerWatcher::metaObject() const +{ + return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject; +} + +void *ProjectManagerWatcher::qt_metacast(const char *_clname) +{ + if (!_clname) return nullptr; + if (!strcmp(_clname, qt_staticMetaObjectStaticContent.strings)) + return static_cast(this); + return QObject::qt_metacast(_clname); +} + +int ProjectManagerWatcher::qt_metacall(QMetaObject::Call _c, int _id, void **_a) +{ + _id = QObject::qt_metacall(_c, _id, _a); + if (_id < 0) + return _id; + if (_c == QMetaObject::InvokeMetaMethod) { + if (_id < 4) + qt_static_metacall(this, _c, _id, _a); + _id -= 4; + } + if (_c == QMetaObject::RegisterMethodArgumentMetaType) { + if (_id < 4) + *reinterpret_cast(_a[0]) = QMetaType(); + _id -= 4; + } + return _id; +} + +// SIGNAL 0 +void ProjectManagerWatcher::newFilesDetected(int _t1, const QStringList & _t2) +{ + QMetaObject::activate(this, &staticMetaObject, 0, nullptr, _t1, _t2); +} + +// SIGNAL 1 +void ProjectManagerWatcher::filesRemoved(int _t1, const QStringList & _t2) +{ + QMetaObject::activate(this, &staticMetaObject, 1, nullptr, _t1, _t2); +} +QT_WARNING_POP diff --git a/build-linux/kassetmanagerqt_autogen/UVLADIE3JM/moc_project_sequence_grouping_proxy_model.cpp b/build-linux/kassetmanagerqt_autogen/UVLADIE3JM/moc_project_sequence_grouping_proxy_model.cpp new file mode 100644 index 00000000..3965133a --- /dev/null +++ b/build-linux/kassetmanagerqt_autogen/UVLADIE3JM/moc_project_sequence_grouping_proxy_model.cpp @@ -0,0 +1,90 @@ +/**************************************************************************** +** Meta object code from reading C++ file 'project_sequence_grouping_proxy_model.h' +** +** Created by: The Qt Meta Object Compiler version 69 (Qt 6.10.3) +** +** WARNING! All changes made in this file will be lost! +*****************************************************************************/ + +#include "../../../native/qt6/src/project_sequence_grouping_proxy_model.h" +#include + +#include + +#include + + +#include +#if !defined(Q_MOC_OUTPUT_REVISION) +#error "The header file 'project_sequence_grouping_proxy_model.h' doesn't include ." +#elif Q_MOC_OUTPUT_REVISION != 69 +#error "This file was generated using the moc from 6.10.3. It" +#error "cannot be used with the include files from this version of Qt." +#error "(The moc has changed too much.)" +#endif + +#ifndef Q_CONSTINIT +#define Q_CONSTINIT +#endif + +QT_WARNING_PUSH +QT_WARNING_DISABLE_DEPRECATED +QT_WARNING_DISABLE_GCC("-Wuseless-cast") +namespace { +struct qt_meta_tag_ZN33ProjectSequenceGroupingProxyModelE_t {}; +} // unnamed namespace + +template <> constexpr inline auto ProjectSequenceGroupingProxyModel::qt_create_metaobjectdata() +{ + namespace QMC = QtMocConstants; + QtMocHelpers::StringRefStorage qt_stringData { + "ProjectSequenceGroupingProxyModel" + }; + + QtMocHelpers::UintData qt_methods { + }; + QtMocHelpers::UintData qt_properties { + }; + QtMocHelpers::UintData qt_enums { + }; + return QtMocHelpers::metaObjectData(QMC::MetaObjectFlag{}, qt_stringData, + qt_methods, qt_properties, qt_enums); +} +Q_CONSTINIT const QMetaObject ProjectSequenceGroupingProxyModel::staticMetaObject = { { + QMetaObject::SuperData::link(), + qt_staticMetaObjectStaticContent.stringdata, + qt_staticMetaObjectStaticContent.data, + qt_static_metacall, + nullptr, + qt_staticMetaObjectRelocatingContent.metaTypes, + nullptr +} }; + +void ProjectSequenceGroupingProxyModel::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) +{ + auto *_t = static_cast(_o); + (void)_t; + (void)_c; + (void)_id; + (void)_a; +} + +const QMetaObject *ProjectSequenceGroupingProxyModel::metaObject() const +{ + return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject; +} + +void *ProjectSequenceGroupingProxyModel::qt_metacast(const char *_clname) +{ + if (!_clname) return nullptr; + if (!strcmp(_clname, qt_staticMetaObjectStaticContent.strings)) + return static_cast(this); + return QAbstractProxyModel::qt_metacast(_clname); +} + +int ProjectSequenceGroupingProxyModel::qt_metacall(QMetaObject::Call _c, int _id, void **_a) +{ + _id = QAbstractProxyModel::qt_metacall(_c, _id, _a); + return _id; +} +QT_WARNING_POP diff --git a/build-linux/kassetmanagerqt_autogen/UVLADIE3JM/moc_projects_model.cpp b/build-linux/kassetmanagerqt_autogen/UVLADIE3JM/moc_projects_model.cpp new file mode 100644 index 00000000..2031738c --- /dev/null +++ b/build-linux/kassetmanagerqt_autogen/UVLADIE3JM/moc_projects_model.cpp @@ -0,0 +1,149 @@ +/**************************************************************************** +** Meta object code from reading C++ file 'projects_model.h' +** +** Created by: The Qt Meta Object Compiler version 69 (Qt 6.10.3) +** +** WARNING! All changes made in this file will be lost! +*****************************************************************************/ + +#include "../../../native/qt6/src/projects_model.h" +#include + +#include + +#include + + +#include +#if !defined(Q_MOC_OUTPUT_REVISION) +#error "The header file 'projects_model.h' doesn't include ." +#elif Q_MOC_OUTPUT_REVISION != 69 +#error "This file was generated using the moc from 6.10.3. It" +#error "cannot be used with the include files from this version of Qt." +#error "(The moc has changed too much.)" +#endif + +#ifndef Q_CONSTINIT +#define Q_CONSTINIT +#endif + +QT_WARNING_PUSH +QT_WARNING_DISABLE_DEPRECATED +QT_WARNING_DISABLE_GCC("-Wuseless-cast") +namespace { +struct qt_meta_tag_ZN13ProjectsModelE_t {}; +} // unnamed namespace + +template <> constexpr inline auto ProjectsModel::qt_create_metaobjectdata() +{ + namespace QMC = QtMocConstants; + QtMocHelpers::StringRefStorage qt_stringData { + "ProjectsModel", + "reload", + "", + "refresh", + "scheduleReload", + "createProject", + "name", + "watchPath", + "renameProject", + "id", + "deleteProject", + "get", + "QVariantMap", + "row" + }; + + QtMocHelpers::UintData qt_methods { + // Slot 'reload' + QtMocHelpers::SlotData(1, 2, QMC::AccessPublic, QMetaType::Void), + // Slot 'refresh' + QtMocHelpers::SlotData(3, 2, QMC::AccessPublic, QMetaType::Void), + // Slot 'scheduleReload' + QtMocHelpers::SlotData(4, 2, QMC::AccessPrivate, QMetaType::Void), + // Method 'createProject' + QtMocHelpers::MethodData(5, 2, QMC::AccessPublic, QMetaType::Int, {{ + { QMetaType::QString, 6 }, { QMetaType::QString, 7 }, + }}), + // Method 'renameProject' + QtMocHelpers::MethodData(8, 2, QMC::AccessPublic, QMetaType::Bool, {{ + { QMetaType::Int, 9 }, { QMetaType::QString, 6 }, + }}), + // Method 'deleteProject' + QtMocHelpers::MethodData(10, 2, QMC::AccessPublic, QMetaType::Bool, {{ + { QMetaType::Int, 9 }, + }}), + // Method 'get' + QtMocHelpers::MethodData(11, 2, QMC::AccessPublic, 0x80000000 | 12, {{ + { QMetaType::Int, 13 }, + }}), + }; + QtMocHelpers::UintData qt_properties { + }; + QtMocHelpers::UintData qt_enums { + }; + return QtMocHelpers::metaObjectData(QMC::MetaObjectFlag{}, qt_stringData, + qt_methods, qt_properties, qt_enums); +} +Q_CONSTINIT const QMetaObject ProjectsModel::staticMetaObject = { { + QMetaObject::SuperData::link(), + qt_staticMetaObjectStaticContent.stringdata, + qt_staticMetaObjectStaticContent.data, + qt_static_metacall, + nullptr, + qt_staticMetaObjectRelocatingContent.metaTypes, + nullptr +} }; + +void ProjectsModel::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) +{ + auto *_t = static_cast(_o); + if (_c == QMetaObject::InvokeMetaMethod) { + switch (_id) { + case 0: _t->reload(); break; + case 1: _t->refresh(); break; + case 2: _t->scheduleReload(); break; + case 3: { int _r = _t->createProject((*reinterpret_cast>(_a[1])),(*reinterpret_cast>(_a[2]))); + if (_a[0]) *reinterpret_cast(_a[0]) = std::move(_r); } break; + case 4: { bool _r = _t->renameProject((*reinterpret_cast>(_a[1])),(*reinterpret_cast>(_a[2]))); + if (_a[0]) *reinterpret_cast(_a[0]) = std::move(_r); } break; + case 5: { bool _r = _t->deleteProject((*reinterpret_cast>(_a[1]))); + if (_a[0]) *reinterpret_cast(_a[0]) = std::move(_r); } break; + case 6: { QVariantMap _r = _t->get((*reinterpret_cast>(_a[1]))); + if (_a[0]) *reinterpret_cast(_a[0]) = std::move(_r); } break; + default: ; + } + } +} + +const QMetaObject *ProjectsModel::metaObject() const +{ + return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject; +} + +void *ProjectsModel::qt_metacast(const char *_clname) +{ + if (!_clname) return nullptr; + if (!strcmp(_clname, qt_staticMetaObjectStaticContent.strings)) + return static_cast(this); + return QAbstractListModel::qt_metacast(_clname); +} + +int ProjectsModel::qt_metacall(QMetaObject::Call _c, int _id, void **_a) +{ + _id = QAbstractListModel::qt_metacall(_c, _id, _a); + if (_id < 0) + return _id; + if (_c == QMetaObject::InvokeMetaMethod) { + if (_id < 7) + qt_static_metacall(this, _c, _id, _a); + _id -= 7; + } + if (_c == QMetaObject::RegisterMethodArgumentMetaType) { + if (_id < 7) + *reinterpret_cast(_a[0]) = QMetaType(); + _id -= 7; + } + return _id; +} +QT_WARNING_POP diff --git a/build-linux/kassetmanagerqt_autogen/UVLADIE3JM/moc_scrub_frame_registry.cpp b/build-linux/kassetmanagerqt_autogen/UVLADIE3JM/moc_scrub_frame_registry.cpp new file mode 100644 index 00000000..67daed4f --- /dev/null +++ b/build-linux/kassetmanagerqt_autogen/UVLADIE3JM/moc_scrub_frame_registry.cpp @@ -0,0 +1,157 @@ +/**************************************************************************** +** Meta object code from reading C++ file 'scrub_frame_registry.h' +** +** Created by: The Qt Meta Object Compiler version 69 (Qt 6.10.3) +** +** WARNING! All changes made in this file will be lost! +*****************************************************************************/ + +#include "../../../native/qt6/src/scrub_frame_registry.h" +#include + +#include + +#include + + +#include +#if !defined(Q_MOC_OUTPUT_REVISION) +#error "The header file 'scrub_frame_registry.h' doesn't include ." +#elif Q_MOC_OUTPUT_REVISION != 69 +#error "This file was generated using the moc from 6.10.3. It" +#error "cannot be used with the include files from this version of Qt." +#error "(The moc has changed too much.)" +#endif + +#ifndef Q_CONSTINIT +#define Q_CONSTINIT +#endif + +QT_WARNING_PUSH +QT_WARNING_DISABLE_DEPRECATED +QT_WARNING_DISABLE_GCC("-Wuseless-cast") +namespace { +struct qt_meta_tag_ZN18ScrubFrameRegistryE_t {}; +} // unnamed namespace + +template <> constexpr inline auto ScrubFrameRegistry::qt_create_metaobjectdata() +{ + namespace QMC = QtMocConstants; + QtMocHelpers::StringRefStorage qt_stringData { + "ScrubFrameRegistry", + "scrubFrameChanged", + "", + "QAbstractItemView*", + "view", + "QModelIndex", + "index", + "scrubEnded" + }; + + QtMocHelpers::UintData qt_methods { + // Signal 'scrubFrameChanged' + QtMocHelpers::SignalData(1, 2, QMC::AccessPublic, QMetaType::Void, {{ + { 0x80000000 | 3, 4 }, { 0x80000000 | 5, 6 }, + }}), + // Signal 'scrubEnded' + QtMocHelpers::SignalData(7, 2, QMC::AccessPublic, QMetaType::Void, {{ + { 0x80000000 | 3, 4 }, { 0x80000000 | 5, 6 }, + }}), + }; + QtMocHelpers::UintData qt_properties { + }; + QtMocHelpers::UintData qt_enums { + }; + return QtMocHelpers::metaObjectData(QMC::MetaObjectFlag{}, qt_stringData, + qt_methods, qt_properties, qt_enums); +} +Q_CONSTINIT const QMetaObject ScrubFrameRegistry::staticMetaObject = { { + QMetaObject::SuperData::link(), + qt_staticMetaObjectStaticContent.stringdata, + qt_staticMetaObjectStaticContent.data, + qt_static_metacall, + nullptr, + qt_staticMetaObjectRelocatingContent.metaTypes, + nullptr +} }; + +void ScrubFrameRegistry::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) +{ + auto *_t = static_cast(_o); + if (_c == QMetaObject::InvokeMetaMethod) { + switch (_id) { + case 0: _t->scrubFrameChanged((*reinterpret_cast>(_a[1])),(*reinterpret_cast>(_a[2]))); break; + case 1: _t->scrubEnded((*reinterpret_cast>(_a[1])),(*reinterpret_cast>(_a[2]))); break; + default: ; + } + } + if (_c == QMetaObject::RegisterMethodArgumentMetaType) { + switch (_id) { + default: *reinterpret_cast(_a[0]) = QMetaType(); break; + case 0: + switch (*reinterpret_cast(_a[1])) { + default: *reinterpret_cast(_a[0]) = QMetaType(); break; + case 0: + *reinterpret_cast(_a[0]) = QMetaType::fromType< QAbstractItemView* >(); break; + } + break; + case 1: + switch (*reinterpret_cast(_a[1])) { + default: *reinterpret_cast(_a[0]) = QMetaType(); break; + case 0: + *reinterpret_cast(_a[0]) = QMetaType::fromType< QAbstractItemView* >(); break; + } + break; + } + } + if (_c == QMetaObject::IndexOfMethod) { + if (QtMocHelpers::indexOfMethod(_a, &ScrubFrameRegistry::scrubFrameChanged, 0)) + return; + if (QtMocHelpers::indexOfMethod(_a, &ScrubFrameRegistry::scrubEnded, 1)) + return; + } +} + +const QMetaObject *ScrubFrameRegistry::metaObject() const +{ + return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject; +} + +void *ScrubFrameRegistry::qt_metacast(const char *_clname) +{ + if (!_clname) return nullptr; + if (!strcmp(_clname, qt_staticMetaObjectStaticContent.strings)) + return static_cast(this); + return QObject::qt_metacast(_clname); +} + +int ScrubFrameRegistry::qt_metacall(QMetaObject::Call _c, int _id, void **_a) +{ + _id = QObject::qt_metacall(_c, _id, _a); + if (_id < 0) + return _id; + if (_c == QMetaObject::InvokeMetaMethod) { + if (_id < 2) + qt_static_metacall(this, _c, _id, _a); + _id -= 2; + } + if (_c == QMetaObject::RegisterMethodArgumentMetaType) { + if (_id < 2) + qt_static_metacall(this, _c, _id, _a); + _id -= 2; + } + return _id; +} + +// SIGNAL 0 +void ScrubFrameRegistry::scrubFrameChanged(QAbstractItemView * _t1, const QModelIndex & _t2) +{ + QMetaObject::activate(this, &staticMetaObject, 0, nullptr, _t1, _t2); +} + +// SIGNAL 1 +void ScrubFrameRegistry::scrubEnded(QAbstractItemView * _t1, const QModelIndex & _t2) +{ + QMetaObject::activate(this, &staticMetaObject, 1, nullptr, _t1, _t2); +} +QT_WARNING_POP diff --git a/build-linux/kassetmanagerqt_autogen/UVLADIE3JM/moc_sequence_grouping_proxy_model.cpp b/build-linux/kassetmanagerqt_autogen/UVLADIE3JM/moc_sequence_grouping_proxy_model.cpp new file mode 100644 index 00000000..87ae3840 --- /dev/null +++ b/build-linux/kassetmanagerqt_autogen/UVLADIE3JM/moc_sequence_grouping_proxy_model.cpp @@ -0,0 +1,90 @@ +/**************************************************************************** +** Meta object code from reading C++ file 'sequence_grouping_proxy_model.h' +** +** Created by: The Qt Meta Object Compiler version 69 (Qt 6.10.3) +** +** WARNING! All changes made in this file will be lost! +*****************************************************************************/ + +#include "../../../native/qt6/src/sequence_grouping_proxy_model.h" +#include + +#include + +#include + + +#include +#if !defined(Q_MOC_OUTPUT_REVISION) +#error "The header file 'sequence_grouping_proxy_model.h' doesn't include ." +#elif Q_MOC_OUTPUT_REVISION != 69 +#error "This file was generated using the moc from 6.10.3. It" +#error "cannot be used with the include files from this version of Qt." +#error "(The moc has changed too much.)" +#endif + +#ifndef Q_CONSTINIT +#define Q_CONSTINIT +#endif + +QT_WARNING_PUSH +QT_WARNING_DISABLE_DEPRECATED +QT_WARNING_DISABLE_GCC("-Wuseless-cast") +namespace { +struct qt_meta_tag_ZN26SequenceGroupingProxyModelE_t {}; +} // unnamed namespace + +template <> constexpr inline auto SequenceGroupingProxyModel::qt_create_metaobjectdata() +{ + namespace QMC = QtMocConstants; + QtMocHelpers::StringRefStorage qt_stringData { + "SequenceGroupingProxyModel" + }; + + QtMocHelpers::UintData qt_methods { + }; + QtMocHelpers::UintData qt_properties { + }; + QtMocHelpers::UintData qt_enums { + }; + return QtMocHelpers::metaObjectData(QMC::MetaObjectFlag{}, qt_stringData, + qt_methods, qt_properties, qt_enums); +} +Q_CONSTINIT const QMetaObject SequenceGroupingProxyModel::staticMetaObject = { { + QMetaObject::SuperData::link(), + qt_staticMetaObjectStaticContent.stringdata, + qt_staticMetaObjectStaticContent.data, + qt_static_metacall, + nullptr, + qt_staticMetaObjectRelocatingContent.metaTypes, + nullptr +} }; + +void SequenceGroupingProxyModel::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) +{ + auto *_t = static_cast(_o); + (void)_t; + (void)_c; + (void)_id; + (void)_a; +} + +const QMetaObject *SequenceGroupingProxyModel::metaObject() const +{ + return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject; +} + +void *SequenceGroupingProxyModel::qt_metacast(const char *_clname) +{ + if (!_clname) return nullptr; + if (!strcmp(_clname, qt_staticMetaObjectStaticContent.strings)) + return static_cast(this); + return QSortFilterProxyModel::qt_metacast(_clname); +} + +int SequenceGroupingProxyModel::qt_metacall(QMetaObject::Call _c, int _id, void **_a) +{ + _id = QSortFilterProxyModel::qt_metacall(_c, _id, _a); + return _id; +} +QT_WARNING_POP diff --git a/build-linux/kassetmanagerqt_autogen/UVLADIE3JM/moc_settings_dialog.cpp b/build-linux/kassetmanagerqt_autogen/UVLADIE3JM/moc_settings_dialog.cpp new file mode 100644 index 00000000..926dec3d --- /dev/null +++ b/build-linux/kassetmanagerqt_autogen/UVLADIE3JM/moc_settings_dialog.cpp @@ -0,0 +1,130 @@ +/**************************************************************************** +** Meta object code from reading C++ file 'settings_dialog.h' +** +** Created by: The Qt Meta Object Compiler version 69 (Qt 6.10.3) +** +** WARNING! All changes made in this file will be lost! +*****************************************************************************/ + +#include "../../../native/qt6/src/settings_dialog.h" +#include +#include + +#include + +#include + + +#include +#if !defined(Q_MOC_OUTPUT_REVISION) +#error "The header file 'settings_dialog.h' doesn't include ." +#elif Q_MOC_OUTPUT_REVISION != 69 +#error "This file was generated using the moc from 6.10.3. It" +#error "cannot be used with the include files from this version of Qt." +#error "(The moc has changed too much.)" +#endif + +#ifndef Q_CONSTINIT +#define Q_CONSTINIT +#endif + +QT_WARNING_PUSH +QT_WARNING_DISABLE_DEPRECATED +QT_WARNING_DISABLE_GCC("-Wuseless-cast") +namespace { +struct qt_meta_tag_ZN14SettingsDialogE_t {}; +} // unnamed namespace + +template <> constexpr inline auto SettingsDialog::qt_create_metaobjectdata() +{ + namespace QMC = QtMocConstants; + QtMocHelpers::StringRefStorage qt_stringData { + "SettingsDialog", + "onClearCache", + "", + "onClearDatabase", + "onExportDatabase", + "onImportDatabase", + "saveSettings", + "updateSequenceCacheMemoryLabel" + }; + + QtMocHelpers::UintData qt_methods { + // Slot 'onClearCache' + QtMocHelpers::SlotData(1, 2, QMC::AccessPrivate, QMetaType::Void), + // Slot 'onClearDatabase' + QtMocHelpers::SlotData(3, 2, QMC::AccessPrivate, QMetaType::Void), + // Slot 'onExportDatabase' + QtMocHelpers::SlotData(4, 2, QMC::AccessPrivate, QMetaType::Void), + // Slot 'onImportDatabase' + QtMocHelpers::SlotData(5, 2, QMC::AccessPrivate, QMetaType::Void), + // Slot 'saveSettings' + QtMocHelpers::SlotData(6, 2, QMC::AccessPrivate, QMetaType::Void), + // Slot 'updateSequenceCacheMemoryLabel' + QtMocHelpers::SlotData(7, 2, QMC::AccessPrivate, QMetaType::Void), + }; + QtMocHelpers::UintData qt_properties { + }; + QtMocHelpers::UintData qt_enums { + }; + return QtMocHelpers::metaObjectData(QMC::MetaObjectFlag{}, qt_stringData, + qt_methods, qt_properties, qt_enums); +} +Q_CONSTINIT const QMetaObject SettingsDialog::staticMetaObject = { { + QMetaObject::SuperData::link(), + qt_staticMetaObjectStaticContent.stringdata, + qt_staticMetaObjectStaticContent.data, + qt_static_metacall, + nullptr, + qt_staticMetaObjectRelocatingContent.metaTypes, + nullptr +} }; + +void SettingsDialog::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) +{ + auto *_t = static_cast(_o); + if (_c == QMetaObject::InvokeMetaMethod) { + switch (_id) { + case 0: _t->onClearCache(); break; + case 1: _t->onClearDatabase(); break; + case 2: _t->onExportDatabase(); break; + case 3: _t->onImportDatabase(); break; + case 4: _t->saveSettings(); break; + case 5: _t->updateSequenceCacheMemoryLabel(); break; + default: ; + } + } + (void)_a; +} + +const QMetaObject *SettingsDialog::metaObject() const +{ + return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject; +} + +void *SettingsDialog::qt_metacast(const char *_clname) +{ + if (!_clname) return nullptr; + if (!strcmp(_clname, qt_staticMetaObjectStaticContent.strings)) + return static_cast(this); + return QDialog::qt_metacast(_clname); +} + +int SettingsDialog::qt_metacall(QMetaObject::Call _c, int _id, void **_a) +{ + _id = QDialog::qt_metacall(_c, _id, _a); + if (_id < 0) + return _id; + if (_c == QMetaObject::InvokeMetaMethod) { + if (_id < 6) + qt_static_metacall(this, _c, _id, _a); + _id -= 6; + } + if (_c == QMetaObject::RegisterMethodArgumentMetaType) { + if (_id < 6) + *reinterpret_cast(_a[0]) = QMetaType(); + _id -= 6; + } + return _id; +} +QT_WARNING_POP diff --git a/build-linux/kassetmanagerqt_autogen/UVLADIE3JM/moc_star_rating_widget.cpp b/build-linux/kassetmanagerqt_autogen/UVLADIE3JM/moc_star_rating_widget.cpp new file mode 100644 index 00000000..40d3e40e --- /dev/null +++ b/build-linux/kassetmanagerqt_autogen/UVLADIE3JM/moc_star_rating_widget.cpp @@ -0,0 +1,138 @@ +/**************************************************************************** +** Meta object code from reading C++ file 'star_rating_widget.h' +** +** Created by: The Qt Meta Object Compiler version 69 (Qt 6.10.3) +** +** WARNING! All changes made in this file will be lost! +*****************************************************************************/ + +#include "../../../native/qt6/src/star_rating_widget.h" +#include + +#include + +#include + + +#include +#if !defined(Q_MOC_OUTPUT_REVISION) +#error "The header file 'star_rating_widget.h' doesn't include ." +#elif Q_MOC_OUTPUT_REVISION != 69 +#error "This file was generated using the moc from 6.10.3. It" +#error "cannot be used with the include files from this version of Qt." +#error "(The moc has changed too much.)" +#endif + +#ifndef Q_CONSTINIT +#define Q_CONSTINIT +#endif + +QT_WARNING_PUSH +QT_WARNING_DISABLE_DEPRECATED +QT_WARNING_DISABLE_GCC("-Wuseless-cast") +namespace { +struct qt_meta_tag_ZN16StarRatingWidgetE_t {}; +} // unnamed namespace + +template <> constexpr inline auto StarRatingWidget::qt_create_metaobjectdata() +{ + namespace QMC = QtMocConstants; + QtMocHelpers::StringRefStorage qt_stringData { + "StarRatingWidget", + "ratingChanged", + "", + "rating", + "onStarClicked", + "star", + "onStarHovered", + "onMouseLeft" + }; + + QtMocHelpers::UintData qt_methods { + // Signal 'ratingChanged' + QtMocHelpers::SignalData(1, 2, QMC::AccessPublic, QMetaType::Void, {{ + { QMetaType::Int, 3 }, + }}), + // Slot 'onStarClicked' + QtMocHelpers::SlotData(4, 2, QMC::AccessPrivate, QMetaType::Void, {{ + { QMetaType::Int, 5 }, + }}), + // Slot 'onStarHovered' + QtMocHelpers::SlotData(6, 2, QMC::AccessPrivate, QMetaType::Void, {{ + { QMetaType::Int, 5 }, + }}), + // Slot 'onMouseLeft' + QtMocHelpers::SlotData(7, 2, QMC::AccessPrivate, QMetaType::Void), + }; + QtMocHelpers::UintData qt_properties { + }; + QtMocHelpers::UintData qt_enums { + }; + return QtMocHelpers::metaObjectData(QMC::MetaObjectFlag{}, qt_stringData, + qt_methods, qt_properties, qt_enums); +} +Q_CONSTINIT const QMetaObject StarRatingWidget::staticMetaObject = { { + QMetaObject::SuperData::link(), + qt_staticMetaObjectStaticContent.stringdata, + qt_staticMetaObjectStaticContent.data, + qt_static_metacall, + nullptr, + qt_staticMetaObjectRelocatingContent.metaTypes, + nullptr +} }; + +void StarRatingWidget::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) +{ + auto *_t = static_cast(_o); + if (_c == QMetaObject::InvokeMetaMethod) { + switch (_id) { + case 0: _t->ratingChanged((*reinterpret_cast>(_a[1]))); break; + case 1: _t->onStarClicked((*reinterpret_cast>(_a[1]))); break; + case 2: _t->onStarHovered((*reinterpret_cast>(_a[1]))); break; + case 3: _t->onMouseLeft(); break; + default: ; + } + } + if (_c == QMetaObject::IndexOfMethod) { + if (QtMocHelpers::indexOfMethod(_a, &StarRatingWidget::ratingChanged, 0)) + return; + } +} + +const QMetaObject *StarRatingWidget::metaObject() const +{ + return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject; +} + +void *StarRatingWidget::qt_metacast(const char *_clname) +{ + if (!_clname) return nullptr; + if (!strcmp(_clname, qt_staticMetaObjectStaticContent.strings)) + return static_cast(this); + return QWidget::qt_metacast(_clname); +} + +int StarRatingWidget::qt_metacall(QMetaObject::Call _c, int _id, void **_a) +{ + _id = QWidget::qt_metacall(_c, _id, _a); + if (_id < 0) + return _id; + if (_c == QMetaObject::InvokeMetaMethod) { + if (_id < 4) + qt_static_metacall(this, _c, _id, _a); + _id -= 4; + } + if (_c == QMetaObject::RegisterMethodArgumentMetaType) { + if (_id < 4) + *reinterpret_cast(_a[0]) = QMetaType(); + _id -= 4; + } + return _id; +} + +// SIGNAL 0 +void StarRatingWidget::ratingChanged(int _t1) +{ + QMetaObject::activate(this, &staticMetaObject, 0, nullptr, _t1); +} +QT_WARNING_POP diff --git a/build-linux/kassetmanagerqt_autogen/UVLADIE3JM/moc_tags_model.cpp b/build-linux/kassetmanagerqt_autogen/UVLADIE3JM/moc_tags_model.cpp new file mode 100644 index 00000000..9ecdd491 --- /dev/null +++ b/build-linux/kassetmanagerqt_autogen/UVLADIE3JM/moc_tags_model.cpp @@ -0,0 +1,131 @@ +/**************************************************************************** +** Meta object code from reading C++ file 'tags_model.h' +** +** Created by: The Qt Meta Object Compiler version 69 (Qt 6.10.3) +** +** WARNING! All changes made in this file will be lost! +*****************************************************************************/ + +#include "../../../native/qt6/src/tags_model.h" +#include + +#include + +#include + + +#include +#if !defined(Q_MOC_OUTPUT_REVISION) +#error "The header file 'tags_model.h' doesn't include ." +#elif Q_MOC_OUTPUT_REVISION != 69 +#error "This file was generated using the moc from 6.10.3. It" +#error "cannot be used with the include files from this version of Qt." +#error "(The moc has changed too much.)" +#endif + +#ifndef Q_CONSTINIT +#define Q_CONSTINIT +#endif + +QT_WARNING_PUSH +QT_WARNING_DISABLE_DEPRECATED +QT_WARNING_DISABLE_GCC("-Wuseless-cast") +namespace { +struct qt_meta_tag_ZN9TagsModelE_t {}; +} // unnamed namespace + +template <> constexpr inline auto TagsModel::qt_create_metaobjectdata() +{ + namespace QMC = QtMocConstants; + QtMocHelpers::StringRefStorage qt_stringData { + "TagsModel", + "reload", + "", + "createTag", + "name", + "renameTag", + "id", + "deleteTag" + }; + + QtMocHelpers::UintData qt_methods { + // Slot 'reload' + QtMocHelpers::SlotData(1, 2, QMC::AccessPublic, QMetaType::Void), + // Method 'createTag' + QtMocHelpers::MethodData(3, 2, QMC::AccessPublic, QMetaType::Int, {{ + { QMetaType::QString, 4 }, + }}), + // Method 'renameTag' + QtMocHelpers::MethodData(5, 2, QMC::AccessPublic, QMetaType::Bool, {{ + { QMetaType::Int, 6 }, { QMetaType::QString, 4 }, + }}), + // Method 'deleteTag' + QtMocHelpers::MethodData(7, 2, QMC::AccessPublic, QMetaType::Bool, {{ + { QMetaType::Int, 6 }, + }}), + }; + QtMocHelpers::UintData qt_properties { + }; + QtMocHelpers::UintData qt_enums { + }; + return QtMocHelpers::metaObjectData(QMC::MetaObjectFlag{}, qt_stringData, + qt_methods, qt_properties, qt_enums); +} +Q_CONSTINIT const QMetaObject TagsModel::staticMetaObject = { { + QMetaObject::SuperData::link(), + qt_staticMetaObjectStaticContent.stringdata, + qt_staticMetaObjectStaticContent.data, + qt_static_metacall, + nullptr, + qt_staticMetaObjectRelocatingContent.metaTypes, + nullptr +} }; + +void TagsModel::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) +{ + auto *_t = static_cast(_o); + if (_c == QMetaObject::InvokeMetaMethod) { + switch (_id) { + case 0: _t->reload(); break; + case 1: { int _r = _t->createTag((*reinterpret_cast>(_a[1]))); + if (_a[0]) *reinterpret_cast(_a[0]) = std::move(_r); } break; + case 2: { bool _r = _t->renameTag((*reinterpret_cast>(_a[1])),(*reinterpret_cast>(_a[2]))); + if (_a[0]) *reinterpret_cast(_a[0]) = std::move(_r); } break; + case 3: { bool _r = _t->deleteTag((*reinterpret_cast>(_a[1]))); + if (_a[0]) *reinterpret_cast(_a[0]) = std::move(_r); } break; + default: ; + } + } +} + +const QMetaObject *TagsModel::metaObject() const +{ + return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject; +} + +void *TagsModel::qt_metacast(const char *_clname) +{ + if (!_clname) return nullptr; + if (!strcmp(_clname, qt_staticMetaObjectStaticContent.strings)) + return static_cast(this); + return QAbstractListModel::qt_metacast(_clname); +} + +int TagsModel::qt_metacall(QMetaObject::Call _c, int _id, void **_a) +{ + _id = QAbstractListModel::qt_metacall(_c, _id, _a); + if (_id < 0) + return _id; + if (_c == QMetaObject::InvokeMetaMethod) { + if (_id < 4) + qt_static_metacall(this, _c, _id, _a); + _id -= 4; + } + if (_c == QMetaObject::RegisterMethodArgumentMetaType) { + if (_id < 4) + *reinterpret_cast(_a[0]) = QMetaType(); + _id -= 4; + } + return _id; +} +QT_WARNING_POP diff --git a/build-linux/kassetmanagerqt_autogen/UVLADIE3JM/moc_theme_manager.cpp b/build-linux/kassetmanagerqt_autogen/UVLADIE3JM/moc_theme_manager.cpp new file mode 100644 index 00000000..924e6870 --- /dev/null +++ b/build-linux/kassetmanagerqt_autogen/UVLADIE3JM/moc_theme_manager.cpp @@ -0,0 +1,118 @@ +/**************************************************************************** +** Meta object code from reading C++ file 'theme_manager.h' +** +** Created by: The Qt Meta Object Compiler version 69 (Qt 6.10.3) +** +** WARNING! All changes made in this file will be lost! +*****************************************************************************/ + +#include "../../../native/qt6/src/theme_manager.h" +#include + +#include + +#include + + +#include +#if !defined(Q_MOC_OUTPUT_REVISION) +#error "The header file 'theme_manager.h' doesn't include ." +#elif Q_MOC_OUTPUT_REVISION != 69 +#error "This file was generated using the moc from 6.10.3. It" +#error "cannot be used with the include files from this version of Qt." +#error "(The moc has changed too much.)" +#endif + +#ifndef Q_CONSTINIT +#define Q_CONSTINIT +#endif + +QT_WARNING_PUSH +QT_WARNING_DISABLE_DEPRECATED +QT_WARNING_DISABLE_GCC("-Wuseless-cast") +namespace { +struct qt_meta_tag_ZN12ThemeManagerE_t {}; +} // unnamed namespace + +template <> constexpr inline auto ThemeManager::qt_create_metaobjectdata() +{ + namespace QMC = QtMocConstants; + QtMocHelpers::StringRefStorage qt_stringData { + "ThemeManager", + "themeChanged", + "" + }; + + QtMocHelpers::UintData qt_methods { + // Signal 'themeChanged' + QtMocHelpers::SignalData(1, 2, QMC::AccessPublic, QMetaType::Void), + }; + QtMocHelpers::UintData qt_properties { + }; + QtMocHelpers::UintData qt_enums { + }; + return QtMocHelpers::metaObjectData(QMC::MetaObjectFlag{}, qt_stringData, + qt_methods, qt_properties, qt_enums); +} +Q_CONSTINIT const QMetaObject ThemeManager::staticMetaObject = { { + QMetaObject::SuperData::link(), + qt_staticMetaObjectStaticContent.stringdata, + qt_staticMetaObjectStaticContent.data, + qt_static_metacall, + nullptr, + qt_staticMetaObjectRelocatingContent.metaTypes, + nullptr +} }; + +void ThemeManager::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) +{ + auto *_t = static_cast(_o); + if (_c == QMetaObject::InvokeMetaMethod) { + switch (_id) { + case 0: _t->themeChanged(); break; + default: ; + } + } + if (_c == QMetaObject::IndexOfMethod) { + if (QtMocHelpers::indexOfMethod(_a, &ThemeManager::themeChanged, 0)) + return; + } +} + +const QMetaObject *ThemeManager::metaObject() const +{ + return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject; +} + +void *ThemeManager::qt_metacast(const char *_clname) +{ + if (!_clname) return nullptr; + if (!strcmp(_clname, qt_staticMetaObjectStaticContent.strings)) + return static_cast(this); + return QObject::qt_metacast(_clname); +} + +int ThemeManager::qt_metacall(QMetaObject::Call _c, int _id, void **_a) +{ + _id = QObject::qt_metacall(_c, _id, _a); + if (_id < 0) + return _id; + if (_c == QMetaObject::InvokeMetaMethod) { + if (_id < 1) + qt_static_metacall(this, _c, _id, _a); + _id -= 1; + } + if (_c == QMetaObject::RegisterMethodArgumentMetaType) { + if (_id < 1) + *reinterpret_cast(_a[0]) = QMetaType(); + _id -= 1; + } + return _id; +} + +// SIGNAL 0 +void ThemeManager::themeChanged() +{ + QMetaObject::activate(this, &staticMetaObject, 0, nullptr); +} +QT_WARNING_POP diff --git a/build-linux/kassetmanagerqt_autogen/UVLADIE3JM/moc_thumbnail_cache_manager.cpp b/build-linux/kassetmanagerqt_autogen/UVLADIE3JM/moc_thumbnail_cache_manager.cpp new file mode 100644 index 00000000..aad1df7c --- /dev/null +++ b/build-linux/kassetmanagerqt_autogen/UVLADIE3JM/moc_thumbnail_cache_manager.cpp @@ -0,0 +1,136 @@ +/**************************************************************************** +** Meta object code from reading C++ file 'thumbnail_cache_manager.h' +** +** Created by: The Qt Meta Object Compiler version 69 (Qt 6.10.3) +** +** WARNING! All changes made in this file will be lost! +*****************************************************************************/ + +#include "../../../native/qt6/src/thumbnail_cache_manager.h" +#include + +#include + +#include + + +#include +#if !defined(Q_MOC_OUTPUT_REVISION) +#error "The header file 'thumbnail_cache_manager.h' doesn't include ." +#elif Q_MOC_OUTPUT_REVISION != 69 +#error "This file was generated using the moc from 6.10.3. It" +#error "cannot be used with the include files from this version of Qt." +#error "(The moc has changed too much.)" +#endif + +#ifndef Q_CONSTINIT +#define Q_CONSTINIT +#endif + +QT_WARNING_PUSH +QT_WARNING_DISABLE_DEPRECATED +QT_WARNING_DISABLE_GCC("-Wuseless-cast") +namespace { +struct qt_meta_tag_ZN21ThumbnailCacheManagerE_t {}; +} // unnamed namespace + +template <> constexpr inline auto ThumbnailCacheManager::qt_create_metaobjectdata() +{ + namespace QMC = QtMocConstants; + QtMocHelpers::StringRefStorage qt_stringData { + "ThumbnailCacheManager", + "cacheCleared", + "", + "thumbnailStored", + "filePath", + "QSize", + "size", + "position" + }; + + QtMocHelpers::UintData qt_methods { + // Signal 'cacheCleared' + QtMocHelpers::SignalData(1, 2, QMC::AccessPublic, QMetaType::Void), + // Signal 'thumbnailStored' + QtMocHelpers::SignalData(3, 2, QMC::AccessPublic, QMetaType::Void, {{ + { QMetaType::QString, 4 }, { 0x80000000 | 5, 6 }, { QMetaType::QReal, 7 }, + }}), + }; + QtMocHelpers::UintData qt_properties { + }; + QtMocHelpers::UintData qt_enums { + }; + return QtMocHelpers::metaObjectData(QMC::MetaObjectFlag{}, qt_stringData, + qt_methods, qt_properties, qt_enums); +} +Q_CONSTINIT const QMetaObject ThumbnailCacheManager::staticMetaObject = { { + QMetaObject::SuperData::link(), + qt_staticMetaObjectStaticContent.stringdata, + qt_staticMetaObjectStaticContent.data, + qt_static_metacall, + nullptr, + qt_staticMetaObjectRelocatingContent.metaTypes, + nullptr +} }; + +void ThumbnailCacheManager::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) +{ + auto *_t = static_cast(_o); + if (_c == QMetaObject::InvokeMetaMethod) { + switch (_id) { + case 0: _t->cacheCleared(); break; + case 1: _t->thumbnailStored((*reinterpret_cast>(_a[1])),(*reinterpret_cast>(_a[2])),(*reinterpret_cast>(_a[3]))); break; + default: ; + } + } + if (_c == QMetaObject::IndexOfMethod) { + if (QtMocHelpers::indexOfMethod(_a, &ThumbnailCacheManager::cacheCleared, 0)) + return; + if (QtMocHelpers::indexOfMethod(_a, &ThumbnailCacheManager::thumbnailStored, 1)) + return; + } +} + +const QMetaObject *ThumbnailCacheManager::metaObject() const +{ + return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject; +} + +void *ThumbnailCacheManager::qt_metacast(const char *_clname) +{ + if (!_clname) return nullptr; + if (!strcmp(_clname, qt_staticMetaObjectStaticContent.strings)) + return static_cast(this); + return QObject::qt_metacast(_clname); +} + +int ThumbnailCacheManager::qt_metacall(QMetaObject::Call _c, int _id, void **_a) +{ + _id = QObject::qt_metacall(_c, _id, _a); + if (_id < 0) + return _id; + if (_c == QMetaObject::InvokeMetaMethod) { + if (_id < 2) + qt_static_metacall(this, _c, _id, _a); + _id -= 2; + } + if (_c == QMetaObject::RegisterMethodArgumentMetaType) { + if (_id < 2) + *reinterpret_cast(_a[0]) = QMetaType(); + _id -= 2; + } + return _id; +} + +// SIGNAL 0 +void ThumbnailCacheManager::cacheCleared() +{ + QMetaObject::activate(this, &staticMetaObject, 0, nullptr); +} + +// SIGNAL 1 +void ThumbnailCacheManager::thumbnailStored(const QString & _t1, const QSize & _t2, qreal _t3) +{ + QMetaObject::activate(this, &staticMetaObject, 1, nullptr, _t1, _t2, _t3); +} +QT_WARNING_POP diff --git a/build-linux/kassetmanagerqt_autogen/UVLADIE3JM/moc_thumbnail_generator_dialog.cpp b/build-linux/kassetmanagerqt_autogen/UVLADIE3JM/moc_thumbnail_generator_dialog.cpp new file mode 100644 index 00000000..e453baef --- /dev/null +++ b/build-linux/kassetmanagerqt_autogen/UVLADIE3JM/moc_thumbnail_generator_dialog.cpp @@ -0,0 +1,157 @@ +/**************************************************************************** +** Meta object code from reading C++ file 'thumbnail_generator_dialog.h' +** +** Created by: The Qt Meta Object Compiler version 69 (Qt 6.10.3) +** +** WARNING! All changes made in this file will be lost! +*****************************************************************************/ + +#include "../../../native/qt6/src/thumbnail_generator_dialog.h" +#include +#include + +#include + +#include + + +#include +#if !defined(Q_MOC_OUTPUT_REVISION) +#error "The header file 'thumbnail_generator_dialog.h' doesn't include ." +#elif Q_MOC_OUTPUT_REVISION != 69 +#error "This file was generated using the moc from 6.10.3. It" +#error "cannot be used with the include files from this version of Qt." +#error "(The moc has changed too much.)" +#endif + +#ifndef Q_CONSTINIT +#define Q_CONSTINIT +#endif + +QT_WARNING_PUSH +QT_WARNING_DISABLE_DEPRECATED +QT_WARNING_DISABLE_GCC("-Wuseless-cast") +namespace { +struct qt_meta_tag_ZN24ThumbnailGeneratorDialogE_t {}; +} // unnamed namespace + +template <> constexpr inline auto ThumbnailGeneratorDialog::qt_create_metaobjectdata() +{ + namespace QMC = QtMocConstants; + QtMocHelpers::StringRefStorage qt_stringData { + "ThumbnailGeneratorDialog", + "onStart", + "", + "onCancel", + "onQueueStarted", + "total", + "onFileStarted", + "index", + "filePath", + "onFileProgress", + "percent", + "onFileFinished", + "success", + "errorMsg", + "onQueueFinished", + "allSuccess", + "onLogLine", + "line" + }; + + QtMocHelpers::UintData qt_methods { + // Slot 'onStart' + QtMocHelpers::SlotData(1, 2, QMC::AccessPrivate, QMetaType::Void), + // Slot 'onCancel' + QtMocHelpers::SlotData(3, 2, QMC::AccessPrivate, QMetaType::Void), + // Slot 'onQueueStarted' + QtMocHelpers::SlotData(4, 2, QMC::AccessPrivate, QMetaType::Void, {{ + { QMetaType::Int, 5 }, + }}), + // Slot 'onFileStarted' + QtMocHelpers::SlotData(6, 2, QMC::AccessPrivate, QMetaType::Void, {{ + { QMetaType::Int, 7 }, { QMetaType::QString, 8 }, + }}), + // Slot 'onFileProgress' + QtMocHelpers::SlotData(9, 2, QMC::AccessPrivate, QMetaType::Void, {{ + { QMetaType::Int, 7 }, { QMetaType::Int, 10 }, + }}), + // Slot 'onFileFinished' + QtMocHelpers::SlotData(11, 2, QMC::AccessPrivate, QMetaType::Void, {{ + { QMetaType::Int, 7 }, { QMetaType::Bool, 12 }, { QMetaType::QString, 13 }, + }}), + // Slot 'onQueueFinished' + QtMocHelpers::SlotData(14, 2, QMC::AccessPrivate, QMetaType::Void, {{ + { QMetaType::Bool, 15 }, + }}), + // Slot 'onLogLine' + QtMocHelpers::SlotData(16, 2, QMC::AccessPrivate, QMetaType::Void, {{ + { QMetaType::QString, 17 }, + }}), + }; + QtMocHelpers::UintData qt_properties { + }; + QtMocHelpers::UintData qt_enums { + }; + return QtMocHelpers::metaObjectData(QMC::MetaObjectFlag{}, qt_stringData, + qt_methods, qt_properties, qt_enums); +} +Q_CONSTINIT const QMetaObject ThumbnailGeneratorDialog::staticMetaObject = { { + QMetaObject::SuperData::link(), + qt_staticMetaObjectStaticContent.stringdata, + qt_staticMetaObjectStaticContent.data, + qt_static_metacall, + nullptr, + qt_staticMetaObjectRelocatingContent.metaTypes, + nullptr +} }; + +void ThumbnailGeneratorDialog::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) +{ + auto *_t = static_cast(_o); + if (_c == QMetaObject::InvokeMetaMethod) { + switch (_id) { + case 0: _t->onStart(); break; + case 1: _t->onCancel(); break; + case 2: _t->onQueueStarted((*reinterpret_cast>(_a[1]))); break; + case 3: _t->onFileStarted((*reinterpret_cast>(_a[1])),(*reinterpret_cast>(_a[2]))); break; + case 4: _t->onFileProgress((*reinterpret_cast>(_a[1])),(*reinterpret_cast>(_a[2]))); break; + case 5: _t->onFileFinished((*reinterpret_cast>(_a[1])),(*reinterpret_cast>(_a[2])),(*reinterpret_cast>(_a[3]))); break; + case 6: _t->onQueueFinished((*reinterpret_cast>(_a[1]))); break; + case 7: _t->onLogLine((*reinterpret_cast>(_a[1]))); break; + default: ; + } + } +} + +const QMetaObject *ThumbnailGeneratorDialog::metaObject() const +{ + return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject; +} + +void *ThumbnailGeneratorDialog::qt_metacast(const char *_clname) +{ + if (!_clname) return nullptr; + if (!strcmp(_clname, qt_staticMetaObjectStaticContent.strings)) + return static_cast(this); + return QDialog::qt_metacast(_clname); +} + +int ThumbnailGeneratorDialog::qt_metacall(QMetaObject::Call _c, int _id, void **_a) +{ + _id = QDialog::qt_metacall(_c, _id, _a); + if (_id < 0) + return _id; + if (_c == QMetaObject::InvokeMetaMethod) { + if (_id < 8) + qt_static_metacall(this, _c, _id, _a); + _id -= 8; + } + if (_c == QMetaObject::RegisterMethodArgumentMetaType) { + if (_id < 8) + *reinterpret_cast(_a[0]) = QMetaType(); + _id -= 8; + } + return _id; +} +QT_WARNING_POP diff --git a/build-linux/kassetmanagerqt_autogen/UVLADIE3JM/moc_thumbnail_generator_worker.cpp b/build-linux/kassetmanagerqt_autogen/UVLADIE3JM/moc_thumbnail_generator_worker.cpp new file mode 100644 index 00000000..0e626e78 --- /dev/null +++ b/build-linux/kassetmanagerqt_autogen/UVLADIE3JM/moc_thumbnail_generator_worker.cpp @@ -0,0 +1,213 @@ +/**************************************************************************** +** Meta object code from reading C++ file 'thumbnail_generator_worker.h' +** +** Created by: The Qt Meta Object Compiler version 69 (Qt 6.10.3) +** +** WARNING! All changes made in this file will be lost! +*****************************************************************************/ + +#include "../../../native/qt6/src/thumbnail_generator_worker.h" +#include +#include + +#include + +#include + + +#include +#if !defined(Q_MOC_OUTPUT_REVISION) +#error "The header file 'thumbnail_generator_worker.h' doesn't include ." +#elif Q_MOC_OUTPUT_REVISION != 69 +#error "This file was generated using the moc from 6.10.3. It" +#error "cannot be used with the include files from this version of Qt." +#error "(The moc has changed too much.)" +#endif + +#ifndef Q_CONSTINIT +#define Q_CONSTINIT +#endif + +QT_WARNING_PUSH +QT_WARNING_DISABLE_DEPRECATED +QT_WARNING_DISABLE_GCC("-Wuseless-cast") +namespace { +struct qt_meta_tag_ZN24ThumbnailGeneratorWorkerE_t {}; +} // unnamed namespace + +template <> constexpr inline auto ThumbnailGeneratorWorker::qt_create_metaobjectdata() +{ + namespace QMC = QtMocConstants; + QtMocHelpers::StringRefStorage qt_stringData { + "ThumbnailGeneratorWorker", + "queueStarted", + "", + "totalFiles", + "fileStarted", + "index", + "filePath", + "fileProgress", + "percent", + "fileFinished", + "success", + "errorMsg", + "queueFinished", + "allSuccess", + "logLine", + "line", + "start", + "QList", + "tasks", + "QSize", + "thumbnailSize", + "cancelAll" + }; + + QtMocHelpers::UintData qt_methods { + // Signal 'queueStarted' + QtMocHelpers::SignalData(1, 2, QMC::AccessPublic, QMetaType::Void, {{ + { QMetaType::Int, 3 }, + }}), + // Signal 'fileStarted' + QtMocHelpers::SignalData(4, 2, QMC::AccessPublic, QMetaType::Void, {{ + { QMetaType::Int, 5 }, { QMetaType::QString, 6 }, + }}), + // Signal 'fileProgress' + QtMocHelpers::SignalData(7, 2, QMC::AccessPublic, QMetaType::Void, {{ + { QMetaType::Int, 5 }, { QMetaType::Int, 8 }, + }}), + // Signal 'fileFinished' + QtMocHelpers::SignalData(9, 2, QMC::AccessPublic, QMetaType::Void, {{ + { QMetaType::Int, 5 }, { QMetaType::Bool, 10 }, { QMetaType::QString, 11 }, + }}), + // Signal 'queueFinished' + QtMocHelpers::SignalData(12, 2, QMC::AccessPublic, QMetaType::Void, {{ + { QMetaType::Bool, 13 }, + }}), + // Signal 'logLine' + QtMocHelpers::SignalData(14, 2, QMC::AccessPublic, QMetaType::Void, {{ + { QMetaType::QString, 15 }, + }}), + // Slot 'start' + QtMocHelpers::SlotData &, const QSize &)>(16, 2, QMC::AccessPublic, QMetaType::Void, {{ + { 0x80000000 | 17, 18 }, { 0x80000000 | 19, 20 }, + }}), + // Slot 'cancelAll' + QtMocHelpers::SlotData(21, 2, QMC::AccessPublic, QMetaType::Void), + }; + QtMocHelpers::UintData qt_properties { + }; + QtMocHelpers::UintData qt_enums { + }; + return QtMocHelpers::metaObjectData(QMC::MetaObjectFlag{}, qt_stringData, + qt_methods, qt_properties, qt_enums); +} +Q_CONSTINIT const QMetaObject ThumbnailGeneratorWorker::staticMetaObject = { { + QMetaObject::SuperData::link(), + qt_staticMetaObjectStaticContent.stringdata, + qt_staticMetaObjectStaticContent.data, + qt_static_metacall, + nullptr, + qt_staticMetaObjectRelocatingContent.metaTypes, + nullptr +} }; + +void ThumbnailGeneratorWorker::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) +{ + auto *_t = static_cast(_o); + if (_c == QMetaObject::InvokeMetaMethod) { + switch (_id) { + case 0: _t->queueStarted((*reinterpret_cast>(_a[1]))); break; + case 1: _t->fileStarted((*reinterpret_cast>(_a[1])),(*reinterpret_cast>(_a[2]))); break; + case 2: _t->fileProgress((*reinterpret_cast>(_a[1])),(*reinterpret_cast>(_a[2]))); break; + case 3: _t->fileFinished((*reinterpret_cast>(_a[1])),(*reinterpret_cast>(_a[2])),(*reinterpret_cast>(_a[3]))); break; + case 4: _t->queueFinished((*reinterpret_cast>(_a[1]))); break; + case 5: _t->logLine((*reinterpret_cast>(_a[1]))); break; + case 6: _t->start((*reinterpret_cast>>(_a[1])),(*reinterpret_cast>(_a[2]))); break; + case 7: _t->cancelAll(); break; + default: ; + } + } + if (_c == QMetaObject::IndexOfMethod) { + if (QtMocHelpers::indexOfMethod(_a, &ThumbnailGeneratorWorker::queueStarted, 0)) + return; + if (QtMocHelpers::indexOfMethod(_a, &ThumbnailGeneratorWorker::fileStarted, 1)) + return; + if (QtMocHelpers::indexOfMethod(_a, &ThumbnailGeneratorWorker::fileProgress, 2)) + return; + if (QtMocHelpers::indexOfMethod(_a, &ThumbnailGeneratorWorker::fileFinished, 3)) + return; + if (QtMocHelpers::indexOfMethod(_a, &ThumbnailGeneratorWorker::queueFinished, 4)) + return; + if (QtMocHelpers::indexOfMethod(_a, &ThumbnailGeneratorWorker::logLine, 5)) + return; + } +} + +const QMetaObject *ThumbnailGeneratorWorker::metaObject() const +{ + return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject; +} + +void *ThumbnailGeneratorWorker::qt_metacast(const char *_clname) +{ + if (!_clname) return nullptr; + if (!strcmp(_clname, qt_staticMetaObjectStaticContent.strings)) + return static_cast(this); + return QObject::qt_metacast(_clname); +} + +int ThumbnailGeneratorWorker::qt_metacall(QMetaObject::Call _c, int _id, void **_a) +{ + _id = QObject::qt_metacall(_c, _id, _a); + if (_id < 0) + return _id; + if (_c == QMetaObject::InvokeMetaMethod) { + if (_id < 8) + qt_static_metacall(this, _c, _id, _a); + _id -= 8; + } + if (_c == QMetaObject::RegisterMethodArgumentMetaType) { + if (_id < 8) + *reinterpret_cast(_a[0]) = QMetaType(); + _id -= 8; + } + return _id; +} + +// SIGNAL 0 +void ThumbnailGeneratorWorker::queueStarted(int _t1) +{ + QMetaObject::activate(this, &staticMetaObject, 0, nullptr, _t1); +} + +// SIGNAL 1 +void ThumbnailGeneratorWorker::fileStarted(int _t1, const QString & _t2) +{ + QMetaObject::activate(this, &staticMetaObject, 1, nullptr, _t1, _t2); +} + +// SIGNAL 2 +void ThumbnailGeneratorWorker::fileProgress(int _t1, int _t2) +{ + QMetaObject::activate(this, &staticMetaObject, 2, nullptr, _t1, _t2); +} + +// SIGNAL 3 +void ThumbnailGeneratorWorker::fileFinished(int _t1, bool _t2, const QString & _t3) +{ + QMetaObject::activate(this, &staticMetaObject, 3, nullptr, _t1, _t2, _t3); +} + +// SIGNAL 4 +void ThumbnailGeneratorWorker::queueFinished(bool _t1) +{ + QMetaObject::activate(this, &staticMetaObject, 4, nullptr, _t1); +} + +// SIGNAL 5 +void ThumbnailGeneratorWorker::logLine(const QString & _t1) +{ + QMetaObject::activate(this, &staticMetaObject, 5, nullptr, _t1); +} +QT_WARNING_POP diff --git a/build-linux/kassetmanagerqt_autogen/UVLADIE3JM/moc_user_guide_dialog.cpp b/build-linux/kassetmanagerqt_autogen/UVLADIE3JM/moc_user_guide_dialog.cpp new file mode 100644 index 00000000..cf26d3e3 --- /dev/null +++ b/build-linux/kassetmanagerqt_autogen/UVLADIE3JM/moc_user_guide_dialog.cpp @@ -0,0 +1,90 @@ +/**************************************************************************** +** Meta object code from reading C++ file 'user_guide_dialog.h' +** +** Created by: The Qt Meta Object Compiler version 69 (Qt 6.10.3) +** +** WARNING! All changes made in this file will be lost! +*****************************************************************************/ + +#include "../../../native/qt6/src/user_guide_dialog.h" +#include + +#include + +#include + + +#include +#if !defined(Q_MOC_OUTPUT_REVISION) +#error "The header file 'user_guide_dialog.h' doesn't include ." +#elif Q_MOC_OUTPUT_REVISION != 69 +#error "This file was generated using the moc from 6.10.3. It" +#error "cannot be used with the include files from this version of Qt." +#error "(The moc has changed too much.)" +#endif + +#ifndef Q_CONSTINIT +#define Q_CONSTINIT +#endif + +QT_WARNING_PUSH +QT_WARNING_DISABLE_DEPRECATED +QT_WARNING_DISABLE_GCC("-Wuseless-cast") +namespace { +struct qt_meta_tag_ZN15UserGuideDialogE_t {}; +} // unnamed namespace + +template <> constexpr inline auto UserGuideDialog::qt_create_metaobjectdata() +{ + namespace QMC = QtMocConstants; + QtMocHelpers::StringRefStorage qt_stringData { + "UserGuideDialog" + }; + + QtMocHelpers::UintData qt_methods { + }; + QtMocHelpers::UintData qt_properties { + }; + QtMocHelpers::UintData qt_enums { + }; + return QtMocHelpers::metaObjectData(QMC::MetaObjectFlag{}, qt_stringData, + qt_methods, qt_properties, qt_enums); +} +Q_CONSTINIT const QMetaObject UserGuideDialog::staticMetaObject = { { + QMetaObject::SuperData::link(), + qt_staticMetaObjectStaticContent.stringdata, + qt_staticMetaObjectStaticContent.data, + qt_static_metacall, + nullptr, + qt_staticMetaObjectRelocatingContent.metaTypes, + nullptr +} }; + +void UserGuideDialog::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) +{ + auto *_t = static_cast(_o); + (void)_t; + (void)_c; + (void)_id; + (void)_a; +} + +const QMetaObject *UserGuideDialog::metaObject() const +{ + return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject; +} + +void *UserGuideDialog::qt_metacast(const char *_clname) +{ + if (!_clname) return nullptr; + if (!strcmp(_clname, qt_staticMetaObjectStaticContent.strings)) + return static_cast(this); + return QDialog::qt_metacast(_clname); +} + +int UserGuideDialog::qt_metacall(QMetaObject::Call _c, int _id, void **_a) +{ + _id = QDialog::qt_metacall(_c, _id, _a); + return _id; +} +QT_WARNING_POP diff --git a/build-linux/kassetmanagerqt_autogen/UVLADIE3JM/moc_virtual_folders.cpp b/build-linux/kassetmanagerqt_autogen/UVLADIE3JM/moc_virtual_folders.cpp new file mode 100644 index 00000000..b84bad67 --- /dev/null +++ b/build-linux/kassetmanagerqt_autogen/UVLADIE3JM/moc_virtual_folders.cpp @@ -0,0 +1,181 @@ +/**************************************************************************** +** Meta object code from reading C++ file 'virtual_folders.h' +** +** Created by: The Qt Meta Object Compiler version 69 (Qt 6.10.3) +** +** WARNING! All changes made in this file will be lost! +*****************************************************************************/ + +#include "../../../native/qt6/src/virtual_folders.h" +#include + +#include + +#include + + +#include +#if !defined(Q_MOC_OUTPUT_REVISION) +#error "The header file 'virtual_folders.h' doesn't include ." +#elif Q_MOC_OUTPUT_REVISION != 69 +#error "This file was generated using the moc from 6.10.3. It" +#error "cannot be used with the include files from this version of Qt." +#error "(The moc has changed too much.)" +#endif + +#ifndef Q_CONSTINIT +#define Q_CONSTINIT +#endif + +QT_WARNING_PUSH +QT_WARNING_DISABLE_DEPRECATED +QT_WARNING_DISABLE_GCC("-Wuseless-cast") +namespace { +struct qt_meta_tag_ZN22VirtualFolderTreeModelE_t {}; +} // unnamed namespace + +template <> constexpr inline auto VirtualFolderTreeModel::qt_create_metaobjectdata() +{ + namespace QMC = QtMocConstants; + QtMocHelpers::StringRefStorage qt_stringData { + "VirtualFolderTreeModel", + "QML.Element", + "auto", + "reload", + "", + "rootId", + "createFolder", + "parentId", + "name", + "renameFolder", + "id", + "deleteFolder", + "moveFolder", + "newParentId", + "nodeIdAt", + "row", + "nodeName", + "isProjectFolder", + "getProjectFolderId", + "virtualFolderId" + }; + + QtMocHelpers::UintData qt_methods { + // Slot 'reload' + QtMocHelpers::SlotData(3, 4, QMC::AccessPublic, QMetaType::Void), + // Method 'rootId' + QtMocHelpers::MethodData(5, 4, QMC::AccessPublic, QMetaType::Int), + // Method 'createFolder' + QtMocHelpers::MethodData(6, 4, QMC::AccessPublic, QMetaType::Int, {{ + { QMetaType::Int, 7 }, { QMetaType::QString, 8 }, + }}), + // Method 'renameFolder' + QtMocHelpers::MethodData(9, 4, QMC::AccessPublic, QMetaType::Bool, {{ + { QMetaType::Int, 10 }, { QMetaType::QString, 8 }, + }}), + // Method 'deleteFolder' + QtMocHelpers::MethodData(11, 4, QMC::AccessPublic, QMetaType::Bool, {{ + { QMetaType::Int, 10 }, + }}), + // Method 'moveFolder' + QtMocHelpers::MethodData(12, 4, QMC::AccessPublic, QMetaType::Bool, {{ + { QMetaType::Int, 10 }, { QMetaType::Int, 13 }, + }}), + // Method 'nodeIdAt' + QtMocHelpers::MethodData(14, 4, QMC::AccessPublic, QMetaType::Int, {{ + { QMetaType::Int, 15 }, { QMetaType::Int, 7 }, + }}), + // Method 'nodeName' + QtMocHelpers::MethodData(16, 4, QMC::AccessPublic, QMetaType::QString, {{ + { QMetaType::Int, 10 }, + }}), + // Method 'isProjectFolder' + QtMocHelpers::MethodData(17, 4, QMC::AccessPublic, QMetaType::Bool, {{ + { QMetaType::Int, 10 }, + }}), + // Method 'getProjectFolderId' + QtMocHelpers::MethodData(18, 4, QMC::AccessPublic, QMetaType::Int, {{ + { QMetaType::Int, 19 }, + }}), + }; + QtMocHelpers::UintData qt_properties { + }; + QtMocHelpers::UintData qt_enums { + }; + QtMocHelpers::UintData qt_constructors {}; + QtMocHelpers::ClassInfos qt_classinfo({ + { 1, 2 }, + }); + return QtMocHelpers::metaObjectData(QMC::MetaObjectFlag{}, qt_stringData, + qt_methods, qt_properties, qt_enums, qt_constructors, qt_classinfo); +} +Q_CONSTINIT const QMetaObject VirtualFolderTreeModel::staticMetaObject = { { + QMetaObject::SuperData::link(), + qt_staticMetaObjectStaticContent.stringdata, + qt_staticMetaObjectStaticContent.data, + qt_static_metacall, + nullptr, + qt_staticMetaObjectRelocatingContent.metaTypes, + nullptr +} }; + +void VirtualFolderTreeModel::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) +{ + auto *_t = static_cast(_o); + if (_c == QMetaObject::InvokeMetaMethod) { + switch (_id) { + case 0: _t->reload(); break; + case 1: { int _r = _t->rootId(); + if (_a[0]) *reinterpret_cast(_a[0]) = std::move(_r); } break; + case 2: { int _r = _t->createFolder((*reinterpret_cast>(_a[1])),(*reinterpret_cast>(_a[2]))); + if (_a[0]) *reinterpret_cast(_a[0]) = std::move(_r); } break; + case 3: { bool _r = _t->renameFolder((*reinterpret_cast>(_a[1])),(*reinterpret_cast>(_a[2]))); + if (_a[0]) *reinterpret_cast(_a[0]) = std::move(_r); } break; + case 4: { bool _r = _t->deleteFolder((*reinterpret_cast>(_a[1]))); + if (_a[0]) *reinterpret_cast(_a[0]) = std::move(_r); } break; + case 5: { bool _r = _t->moveFolder((*reinterpret_cast>(_a[1])),(*reinterpret_cast>(_a[2]))); + if (_a[0]) *reinterpret_cast(_a[0]) = std::move(_r); } break; + case 6: { int _r = _t->nodeIdAt((*reinterpret_cast>(_a[1])),(*reinterpret_cast>(_a[2]))); + if (_a[0]) *reinterpret_cast(_a[0]) = std::move(_r); } break; + case 7: { QString _r = _t->nodeName((*reinterpret_cast>(_a[1]))); + if (_a[0]) *reinterpret_cast(_a[0]) = std::move(_r); } break; + case 8: { bool _r = _t->isProjectFolder((*reinterpret_cast>(_a[1]))); + if (_a[0]) *reinterpret_cast(_a[0]) = std::move(_r); } break; + case 9: { int _r = _t->getProjectFolderId((*reinterpret_cast>(_a[1]))); + if (_a[0]) *reinterpret_cast(_a[0]) = std::move(_r); } break; + default: ; + } + } +} + +const QMetaObject *VirtualFolderTreeModel::metaObject() const +{ + return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject; +} + +void *VirtualFolderTreeModel::qt_metacast(const char *_clname) +{ + if (!_clname) return nullptr; + if (!strcmp(_clname, qt_staticMetaObjectStaticContent.strings)) + return static_cast(this); + return QAbstractItemModel::qt_metacast(_clname); +} + +int VirtualFolderTreeModel::qt_metacall(QMetaObject::Call _c, int _id, void **_a) +{ + _id = QAbstractItemModel::qt_metacall(_c, _id, _a); + if (_id < 0) + return _id; + if (_c == QMetaObject::InvokeMetaMethod) { + if (_id < 10) + qt_static_metacall(this, _c, _id, _a); + _id -= 10; + } + if (_c == QMetaObject::RegisterMethodArgumentMetaType) { + if (_id < 10) + *reinterpret_cast(_a[0]) = QMetaType(); + _id -= 10; + } + return _id; +} +QT_WARNING_POP diff --git a/build-linux/kassetmanagerqt_autogen/deps b/build-linux/kassetmanagerqt_autogen/deps new file mode 100644 index 00000000..97fbd444 --- /dev/null +++ b/build-linux/kassetmanagerqt_autogen/deps @@ -0,0 +1,2289 @@ +kassetmanagerqt_autogen/timestamp: \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/CMakeFiles/3.31.11/CMakeCXXCompiler.cmake \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/CMakeFiles/3.31.11/CMakeSystem.cmake \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/kassetmanagerqt_autogen/moc_predefs.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/CMakeLists.txt \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/annotation_items.cpp \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/annotation_items.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/annotation_layer.cpp \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/annotation_layer.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/asset_grid_view.cpp \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/asset_grid_view.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/asset_item_delegate.cpp \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/asset_item_delegate.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/asset_sequence_grouping_proxy_model.cpp \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/asset_sequence_grouping_proxy_model.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/assets_model.cpp \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/assets_model.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/assets_table_model.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/bulk_rename_dialog.cpp \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/bulk_rename_dialog.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/context_preserver.cpp \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/context_preserver.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/database_health_agent.cpp \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/database_health_agent.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/database_health_dialog.cpp \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/database_health_dialog.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/db.cpp \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/db.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/drag_utils.cpp \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/drag_utils.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/everything_folder_model.cpp \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/everything_folder_model.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/everything_search.cpp \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/everything_search.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/everything_search_dialog.cpp \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/everything_search_dialog.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/file_manager_pane.cpp \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/file_manager_pane.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/file_ops.cpp \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/file_ops.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/file_ops_dialog.cpp \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/file_ops_dialog.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/file_utils.cpp \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/file_utils.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/fm_item_delegate.cpp \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/fm_item_delegate.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/fm_views_ex.cpp \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/fm_views_ex.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/grid_scrub.cpp \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/grid_scrub.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/i_asset_database.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/icon_utils.cpp \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/icon_utils.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/image_preview_overlay.cpp \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/image_preview_overlay.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/import_progress_dialog.cpp \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/import_progress_dialog.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/importer.cpp \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/importer.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/live_preview_manager.cpp \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/live_preview_manager.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/log_manager.cpp \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/log_manager.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/log_viewer_widget.cpp \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/log_viewer_widget.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/main.cpp \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/mainwindow.cpp \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/mainwindow.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/media/tlrender_player.cpp \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/media/tlrender_player.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/media/tlrender_viewport.cpp \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/media/tlrender_viewport.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/media/tlrender_widget.cpp \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/media/tlrender_widget.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/media_convert_dialog.cpp \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/media_convert_dialog.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/media_converter_worker.cpp \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/media_converter_worker.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/office_preview.cpp \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/office_preview.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/oiio_image_loader.cpp \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/oiio_image_loader.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/platform_session.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/preview_overlay.cpp \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/preview_overlay.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/progress_manager.cpp \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/progress_manager.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/project_assets_model.cpp \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/project_assets_model.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/project_db.cpp \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/project_db.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/project_folder_watcher.cpp \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/project_folder_watcher.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/project_folders_model.cpp \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/project_folders_model.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/project_import_worker.cpp \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/project_import_worker.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/project_item_delegate.cpp \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/project_item_delegate.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/project_manager_watcher.cpp \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/project_manager_watcher.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/project_sequence_grouping_proxy_model.cpp \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/project_sequence_grouping_proxy_model.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/project_version_detector.cpp \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/project_version_detector.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/projects_model.cpp \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/projects_model.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/scrub_frame_registry.cpp \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/scrub_frame_registry.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/sequence_detector.cpp \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/sequence_detector.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/sequence_grouping_proxy_model.cpp \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/sequence_grouping_proxy_model.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/settings_dialog.cpp \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/settings_dialog.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/star_rating_widget.cpp \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/star_rating_widget.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/tags_model.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/theme_manager.cpp \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/theme_manager.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/thumbnail_cache_manager.cpp \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/thumbnail_cache_manager.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/thumbnail_generator_dialog.cpp \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/thumbnail_generator_dialog.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/thumbnail_generator_worker.cpp \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/thumbnail_generator_worker.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/user_guide_dialog.cpp \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/user_guide_dialog.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/utils.cpp \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/utils.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/video_metadata.cpp \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/video_metadata.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/virtual_drag.cpp \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/virtual_drag.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/virtual_folders.cpp \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/virtual_folders.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/Imath/ImathBox.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/Imath/ImathConfig.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/Imath/ImathExport.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/Imath/ImathMath.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/Imath/ImathNamespace.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/Imath/ImathPlatform.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/Imath/ImathTypeTraits.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/Imath/ImathVec.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/Imath/half.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/ftk/Core/Box.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/ftk/Core/BoxInline.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/ftk/Core/Color.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/ftk/Core/ColorInline.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/ftk/Core/Context.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/ftk/Core/ContextInline.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/ftk/Core/Export.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/ftk/Core/FontSystem.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/ftk/Core/FontSystemInline.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/ftk/Core/IBaseSystem.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/ftk/Core/IBaseSystemInline.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/ftk/Core/IRender.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/ftk/Core/ISystem.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/ftk/Core/Image.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/ftk/Core/ImageInline.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/ftk/Core/LogSystem.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/ftk/Core/Math.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/ftk/Core/MathInline.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/ftk/Core/Matrix.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/ftk/Core/MatrixInline.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/ftk/Core/Memory.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/ftk/Core/MemoryInline.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/ftk/Core/Mesh.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/ftk/Core/MeshInline.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/ftk/Core/Observable.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/ftk/Core/ObservableInline.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/ftk/Core/ObservableList.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/ftk/Core/ObservableListInline.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/ftk/Core/ObservableMap.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/ftk/Core/ObservableMapInline.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/ftk/Core/Path.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/ftk/Core/PathInline.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/ftk/Core/Range.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/ftk/Core/RangeInline.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/ftk/Core/RenderOptions.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/ftk/Core/RenderOptionsInline.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/ftk/Core/Size.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/ftk/Core/SizeInline.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/ftk/Core/Util.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/ftk/Core/Vector.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/ftk/Core/VectorInline.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/ftk/GL/Texture.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/ftk/UI/Event.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/ftk/UI/IWidget.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/ftk/UI/IWidgetInline.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/ftk/UI/IconSystem.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/ftk/UI/Style.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/ftk/UI/WidgetOptions.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/nlohmann/adl_serializer.hpp \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/nlohmann/byte_container_with_subtype.hpp \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/nlohmann/detail/abi_macros.hpp \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/nlohmann/detail/conversions/from_json.hpp \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/nlohmann/detail/conversions/to_chars.hpp \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/nlohmann/detail/conversions/to_json.hpp \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/nlohmann/detail/exceptions.hpp \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/nlohmann/detail/hash.hpp \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/nlohmann/detail/input/binary_reader.hpp \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/nlohmann/detail/input/input_adapters.hpp \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/nlohmann/detail/input/json_sax.hpp \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/nlohmann/detail/input/lexer.hpp \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/nlohmann/detail/input/parser.hpp \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/nlohmann/detail/input/position_t.hpp \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/nlohmann/detail/iterators/internal_iterator.hpp \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/nlohmann/detail/iterators/iter_impl.hpp \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/nlohmann/detail/iterators/iteration_proxy.hpp \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/nlohmann/detail/iterators/iterator_traits.hpp \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/nlohmann/detail/iterators/json_reverse_iterator.hpp \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/nlohmann/detail/iterators/primitive_iterator.hpp \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/nlohmann/detail/json_custom_base_class.hpp \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/nlohmann/detail/json_pointer.hpp \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/nlohmann/detail/json_ref.hpp \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/nlohmann/detail/macro_scope.hpp \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/nlohmann/detail/macro_unscope.hpp \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/nlohmann/detail/meta/call_std/begin.hpp \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/nlohmann/detail/meta/call_std/end.hpp \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/nlohmann/detail/meta/cpp_future.hpp \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/nlohmann/detail/meta/detected.hpp \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/nlohmann/detail/meta/identity_tag.hpp \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/nlohmann/detail/meta/is_sax.hpp \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/nlohmann/detail/meta/std_fs.hpp \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/nlohmann/detail/meta/type_traits.hpp \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/nlohmann/detail/meta/void_t.hpp \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/nlohmann/detail/output/binary_writer.hpp \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/nlohmann/detail/output/output_adapters.hpp \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/nlohmann/detail/output/serializer.hpp \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/nlohmann/detail/string_concat.hpp \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/nlohmann/detail/string_escape.hpp \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/nlohmann/detail/string_utils.hpp \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/nlohmann/detail/value_t.hpp \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/nlohmann/json.hpp \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/nlohmann/json_fwd.hpp \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/nlohmann/ordered_map.hpp \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/nlohmann/thirdparty/hedley/hedley.hpp \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/nlohmann/thirdparty/hedley/hedley_undef.hpp \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/opentime/errorStatus.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/opentime/export.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/opentime/rationalTime.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/opentime/timeRange.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/opentime/timeTransform.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/opentime/version.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/opentimelineio/anyDictionary.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/opentimelineio/anyVector.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/opentimelineio/color.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/opentimelineio/composable.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/opentimelineio/composition.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/opentimelineio/errorStatus.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/opentimelineio/export.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/opentimelineio/item.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/opentimelineio/serializableObject.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/opentimelineio/serializableObjectWithMetadata.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/opentimelineio/serialization.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/opentimelineio/stack.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/opentimelineio/timeline.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/opentimelineio/track.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/opentimelineio/typeRegistry.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/opentimelineio/version.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender/Core/Audio.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender/Core/AudioInline.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender/Core/AudioSystem.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender/Core/Export.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender/Core/Time.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender/Core/TimeInline.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender/Core/Util.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender/IO/IO.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender/IO/IOInline.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender/Qt/PlayerObject.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender/QtWidget/ContainerWidget.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender/QtWidget/Viewport.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender/Timeline/Audio.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender/Timeline/BackgroundOptions.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender/Timeline/ColorOptions.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender/Timeline/CompareOptions.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender/Timeline/DisplayOptions.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender/Timeline/ForegroundOptions.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender/Timeline/Player.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender/Timeline/PlayerOptions.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender/Timeline/Timeline.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender/Timeline/TimelineOptions.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender/Timeline/Transition.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender/Timeline/Video.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/OpenColorIO/OpenColorIOConfig.cmake \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/OpenColorIO/OpenColorIOConfigVersion.cmake \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/OpenColorIO/OpenColorIOTargets-release.cmake \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/OpenColorIO/OpenColorIOTargets.cmake \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/ftk/ftk-resourceTargets-release.cmake \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/ftk/ftk-resourceTargets.cmake \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/ftk/ftkConfig.cmake \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/ftk/ftkCoreTargets-release.cmake \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/ftk/ftkCoreTargets.cmake \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/ftk/ftkGLTargets-release.cmake \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/ftk/ftkGLTargets.cmake \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/ftk/ftkResourceTargets-release.cmake \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/ftk/ftkResourceTargets.cmake \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/ftk/ftkUITargets-release.cmake \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/ftk/ftkUITargets.cmake \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/ftk/ftkgladTargets-release.cmake \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/ftk/ftkgladTargets.cmake \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/libjpeg-turbo/libjpeg-turboConfig.cmake \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/libjpeg-turbo/libjpeg-turboConfigVersion.cmake \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/libjpeg-turbo/libjpeg-turboTargets-release.cmake \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/libjpeg-turbo/libjpeg-turboTargets.cmake \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/tlRender/tlCoreTargets-release.cmake \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/tlRender/tlCoreTargets.cmake \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/tlRender/tlDeviceTargets-release.cmake \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/tlRender/tlDeviceTargets.cmake \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/tlRender/tlGLTargets-release.cmake \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/tlRender/tlGLTargets.cmake \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/tlRender/tlIOTargets-release.cmake \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/tlRender/tlIOTargets.cmake \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/tlRender/tlQtQuickTargets-release.cmake \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/tlRender/tlQtQuickTargets.cmake \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/tlRender/tlQtTargets-release.cmake \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/tlRender/tlQtTargets.cmake \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/tlRender/tlQtWidgetTargets-release.cmake \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/tlRender/tlQtWidgetTargets.cmake \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/tlRender/tlRenderConfig.cmake \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/tlRender/tlResourceTargets-release.cmake \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/tlRender/tlResourceTargets.cmake \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/tlRender/tlTimelineTargets-release.cmake \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/tlRender/tlTimelineTargets.cmake \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/tlRender/tlUITargets-release.cmake \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib/cmake/tlRender/tlUITargets.cmake \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/Imath/ImathConfig.cmake \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/Imath/ImathConfigVersion.cmake \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/Imath/ImathTargets-release.cmake \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/Imath/ImathTargets.cmake \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/OpenEXR/OpenEXRConfig.cmake \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/OpenEXR/OpenEXRConfigVersion.cmake \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/OpenEXR/OpenEXRTargets-release.cmake \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/OpenEXR/OpenEXRTargets.cmake \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/OpenImageIO/OpenImageIOConfig.cmake \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/OpenImageIO/OpenImageIOConfigVersion.cmake \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/OpenImageIO/OpenImageIOTargets-release.cmake \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/OpenImageIO/OpenImageIOTargets.cmake \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/SDL2/SDL2Config.cmake \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/SDL2/SDL2ConfigVersion.cmake \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/SDL2/SDL2mainTargets-release.cmake \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/SDL2/SDL2mainTargets.cmake \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/SDL2/SDL2staticTargets-release.cmake \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/SDL2/SDL2staticTargets.cmake \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/SDL2/SDL2testTargets-release.cmake \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/SDL2/SDL2testTargets.cmake \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/SDL2/sdlfind.cmake \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/expat-2.7.2/expat-config-version.cmake \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/expat-2.7.2/expat-config.cmake \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/expat-2.7.2/expat-release.cmake \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/expat-2.7.2/expat.cmake \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/lunasvg/lunasvgConfig.cmake \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/lunasvg/lunasvgConfigVersion.cmake \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/lunasvg/lunasvgTargets-release.cmake \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/lunasvg/lunasvgTargets.cmake \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/minizip-ng/minizip-ng-config-version.cmake \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/minizip-ng/minizip-ng-config.cmake \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/minizip-ng/minizip-ng-release.cmake \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/minizip-ng/minizip-ng.cmake \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/plutovg/plutovgConfig.cmake \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/plutovg/plutovgConfigVersion.cmake \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/plutovg/plutovgTargets-release.cmake \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/plutovg/plutovgTargets.cmake \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/yaml-cpp/yaml-cpp-config-version.cmake \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/yaml-cpp/yaml-cpp-config.cmake \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/yaml-cpp/yaml-cpp-targets-release.cmake \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/lib64/cmake/yaml-cpp/yaml-cpp-targets.cmake \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/share/OpenColorIO/cmake/modules/FindImath.cmake \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/share/OpenColorIO/cmake/modules/Findexpat.cmake \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/share/OpenColorIO/cmake/modules/Findpystring.cmake \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/share/OpenColorIO/cmake/modules/Findyaml-cpp.cmake \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/share/cmake/nlohmann_json/nlohmann_jsonConfig.cmake \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/share/cmake/nlohmann_json/nlohmann_jsonConfigVersion.cmake \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/share/cmake/nlohmann_json/nlohmann_jsonTargets.cmake \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/share/opentime/OpenTimeConfig.cmake \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/share/opentime/OpenTimeTargets-release.cmake \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/share/opentime/OpenTimeTargets.cmake \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/share/opentimelineio/OpenTimelineIOConfig.cmake \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/share/opentimelineio/OpenTimelineIOTargets-release.cmake \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/share/opentimelineio/OpenTimelineIOTargets.cmake \ + /usr/include/GL/gl.h \ + /usr/include/alloca.h \ + /usr/include/asm-generic/bitsperlong.h \ + /usr/include/asm-generic/errno-base.h \ + /usr/include/asm-generic/errno.h \ + /usr/include/asm-generic/int-ll64.h \ + /usr/include/asm-generic/posix_types.h \ + /usr/include/asm-generic/types.h \ + /usr/include/asm/bitsperlong.h \ + /usr/include/asm/errno.h \ + /usr/include/asm/posix_types.h \ + /usr/include/asm/posix_types_64.h \ + /usr/include/asm/types.h \ + /usr/include/asm/unistd.h \ + /usr/include/asm/unistd_64.h \ + /usr/include/assert.h \ + /usr/include/bits/atomic_wide_counter.h \ + /usr/include/bits/byteswap.h \ + /usr/include/bits/confname.h \ + /usr/include/bits/cpu-set.h \ + /usr/include/bits/endian.h \ + /usr/include/bits/endianness.h \ + /usr/include/bits/environments.h \ + /usr/include/bits/errno.h \ + /usr/include/bits/floatn-common.h \ + /usr/include/bits/floatn.h \ + /usr/include/bits/flt-eval-method.h \ + /usr/include/bits/fp-fast.h \ + /usr/include/bits/fp-logb.h \ + /usr/include/bits/getopt_core.h \ + /usr/include/bits/getopt_posix.h \ + /usr/include/bits/iscanonical.h \ + /usr/include/bits/libc-header-start.h \ + /usr/include/bits/libm-simd-decl-stubs.h \ + /usr/include/bits/local_lim.h \ + /usr/include/bits/locale.h \ + /usr/include/bits/long-double.h \ + /usr/include/bits/math-vector.h \ + /usr/include/bits/mathcalls-helper-functions.h \ + /usr/include/bits/mathcalls-macros.h \ + /usr/include/bits/mathcalls-narrow.h \ + /usr/include/bits/mathcalls.h \ + /usr/include/bits/posix1_lim.h \ + /usr/include/bits/posix2_lim.h \ + /usr/include/bits/posix_opt.h \ + /usr/include/bits/pthread_stack_min-dynamic.h \ + /usr/include/bits/pthreadtypes-arch.h \ + /usr/include/bits/pthreadtypes.h \ + /usr/include/bits/sched.h \ + /usr/include/bits/select.h \ + /usr/include/bits/semaphore.h \ + /usr/include/bits/setjmp.h \ + /usr/include/bits/stdint-intn.h \ + /usr/include/bits/stdint-least.h \ + /usr/include/bits/stdint-uintn.h \ + /usr/include/bits/stdio_lim.h \ + /usr/include/bits/stdlib-float.h \ + /usr/include/bits/struct_mutex.h \ + /usr/include/bits/struct_rwlock.h \ + /usr/include/bits/syscall.h \ + /usr/include/bits/thread-shared-types.h \ + /usr/include/bits/time.h \ + /usr/include/bits/time64.h \ + /usr/include/bits/timesize.h \ + /usr/include/bits/timex.h \ + /usr/include/bits/types.h \ + /usr/include/bits/types/FILE.h \ + /usr/include/bits/types/__FILE.h \ + /usr/include/bits/types/__fpos64_t.h \ + /usr/include/bits/types/__fpos_t.h \ + /usr/include/bits/types/__locale_t.h \ + /usr/include/bits/types/__mbstate_t.h \ + /usr/include/bits/types/__sigset_t.h \ + /usr/include/bits/types/clock_t.h \ + /usr/include/bits/types/clockid_t.h \ + /usr/include/bits/types/cookie_io_functions_t.h \ + /usr/include/bits/types/error_t.h \ + /usr/include/bits/types/locale_t.h \ + /usr/include/bits/types/mbstate_t.h \ + /usr/include/bits/types/sigset_t.h \ + /usr/include/bits/types/struct_FILE.h \ + /usr/include/bits/types/struct___jmp_buf_tag.h \ + /usr/include/bits/types/struct_itimerspec.h \ + /usr/include/bits/types/struct_sched_param.h \ + /usr/include/bits/types/struct_timespec.h \ + /usr/include/bits/types/struct_timeval.h \ + /usr/include/bits/types/struct_tm.h \ + /usr/include/bits/types/time_t.h \ + /usr/include/bits/types/timer_t.h \ + /usr/include/bits/types/wint_t.h \ + /usr/include/bits/typesizes.h \ + /usr/include/bits/uintn-identity.h \ + /usr/include/bits/uio_lim.h \ + /usr/include/bits/unistd_ext.h \ + /usr/include/bits/waitflags.h \ + /usr/include/bits/waitstatus.h \ + /usr/include/bits/wchar.h \ + /usr/include/bits/wctype-wchar.h \ + /usr/include/bits/wordsize.h \ + /usr/include/bits/xopen_lim.h \ + /usr/include/c++/15/algorithm \ + /usr/include/c++/15/any \ + /usr/include/c++/15/array \ + /usr/include/c++/15/atomic \ + /usr/include/c++/15/backward/auto_ptr.h \ + /usr/include/c++/15/backward/binders.h \ + /usr/include/c++/15/bit \ + /usr/include/c++/15/bits/algorithmfwd.h \ + /usr/include/c++/15/bits/align.h \ + /usr/include/c++/15/bits/alloc_traits.h \ + /usr/include/c++/15/bits/allocated_ptr.h \ + /usr/include/c++/15/bits/allocator.h \ + /usr/include/c++/15/bits/atomic_base.h \ + /usr/include/c++/15/bits/atomic_futex.h \ + /usr/include/c++/15/bits/atomic_lockfree_defines.h \ + /usr/include/c++/15/bits/atomic_timed_wait.h \ + /usr/include/c++/15/bits/atomic_wait.h \ + /usr/include/c++/15/bits/basic_ios.h \ + /usr/include/c++/15/bits/basic_ios.tcc \ + /usr/include/c++/15/bits/basic_string.h \ + /usr/include/c++/15/bits/basic_string.tcc \ + /usr/include/c++/15/bits/char_traits.h \ + /usr/include/c++/15/bits/charconv.h \ + /usr/include/c++/15/bits/chrono.h \ + /usr/include/c++/15/bits/chrono_io.h \ + /usr/include/c++/15/bits/codecvt.h \ + /usr/include/c++/15/bits/concept_check.h \ + /usr/include/c++/15/bits/cpp_type_traits.h \ + /usr/include/c++/15/bits/cxxabi_forced.h \ + /usr/include/c++/15/bits/cxxabi_init_exception.h \ + /usr/include/c++/15/bits/enable_special_members.h \ + /usr/include/c++/15/bits/erase_if.h \ + /usr/include/c++/15/bits/exception.h \ + /usr/include/c++/15/bits/exception_defines.h \ + /usr/include/c++/15/bits/exception_ptr.h \ + /usr/include/c++/15/bits/forward_list.h \ + /usr/include/c++/15/bits/forward_list.tcc \ + /usr/include/c++/15/bits/functexcept.h \ + /usr/include/c++/15/bits/functional_hash.h \ + /usr/include/c++/15/bits/gslice.h \ + /usr/include/c++/15/bits/gslice_array.h \ + /usr/include/c++/15/bits/hash_bytes.h \ + /usr/include/c++/15/bits/hashtable.h \ + /usr/include/c++/15/bits/hashtable_policy.h \ + /usr/include/c++/15/bits/indirect_array.h \ + /usr/include/c++/15/bits/invoke.h \ + /usr/include/c++/15/bits/ios_base.h \ + /usr/include/c++/15/bits/istream.tcc \ + /usr/include/c++/15/bits/iterator_concepts.h \ + /usr/include/c++/15/bits/list.tcc \ + /usr/include/c++/15/bits/locale_classes.h \ + /usr/include/c++/15/bits/locale_classes.tcc \ + /usr/include/c++/15/bits/locale_conv.h \ + /usr/include/c++/15/bits/locale_facets.h \ + /usr/include/c++/15/bits/locale_facets.tcc \ + /usr/include/c++/15/bits/locale_facets_nonio.h \ + /usr/include/c++/15/bits/locale_facets_nonio.tcc \ + /usr/include/c++/15/bits/localefwd.h \ + /usr/include/c++/15/bits/mask_array.h \ + /usr/include/c++/15/bits/max_size_type.h \ + /usr/include/c++/15/bits/memory_resource.h \ + /usr/include/c++/15/bits/memoryfwd.h \ + /usr/include/c++/15/bits/move.h \ + /usr/include/c++/15/bits/nested_exception.h \ + /usr/include/c++/15/bits/new_allocator.h \ + /usr/include/c++/15/bits/node_handle.h \ + /usr/include/c++/15/bits/ostream.h \ + /usr/include/c++/15/bits/ostream.tcc \ + /usr/include/c++/15/bits/ostream_insert.h \ + /usr/include/c++/15/bits/parse_numbers.h \ + /usr/include/c++/15/bits/postypes.h \ + /usr/include/c++/15/bits/predefined_ops.h \ + /usr/include/c++/15/bits/ptr_traits.h \ + /usr/include/c++/15/bits/quoted_string.h \ + /usr/include/c++/15/bits/random.h \ + /usr/include/c++/15/bits/random.tcc \ + /usr/include/c++/15/bits/range_access.h \ + /usr/include/c++/15/bits/ranges_algo.h \ + /usr/include/c++/15/bits/ranges_algobase.h \ + /usr/include/c++/15/bits/ranges_base.h \ + /usr/include/c++/15/bits/ranges_cmp.h \ + /usr/include/c++/15/bits/ranges_uninitialized.h \ + /usr/include/c++/15/bits/ranges_util.h \ + /usr/include/c++/15/bits/refwrap.h \ + /usr/include/c++/15/bits/requires_hosted.h \ + /usr/include/c++/15/bits/semaphore_base.h \ + /usr/include/c++/15/bits/shared_ptr.h \ + /usr/include/c++/15/bits/shared_ptr_atomic.h \ + /usr/include/c++/15/bits/shared_ptr_base.h \ + /usr/include/c++/15/bits/slice_array.h \ + /usr/include/c++/15/bits/specfun.h \ + /usr/include/c++/15/bits/sstream.tcc \ + /usr/include/c++/15/bits/std_abs.h \ + /usr/include/c++/15/bits/std_function.h \ + /usr/include/c++/15/bits/std_mutex.h \ + /usr/include/c++/15/bits/std_thread.h \ + /usr/include/c++/15/bits/stl_algo.h \ + /usr/include/c++/15/bits/stl_algobase.h \ + /usr/include/c++/15/bits/stl_bvector.h \ + /usr/include/c++/15/bits/stl_construct.h \ + /usr/include/c++/15/bits/stl_function.h \ + /usr/include/c++/15/bits/stl_heap.h \ + /usr/include/c++/15/bits/stl_iterator.h \ + /usr/include/c++/15/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/15/bits/stl_iterator_base_types.h \ + /usr/include/c++/15/bits/stl_list.h \ + /usr/include/c++/15/bits/stl_map.h \ + /usr/include/c++/15/bits/stl_multimap.h \ + /usr/include/c++/15/bits/stl_multiset.h \ + /usr/include/c++/15/bits/stl_numeric.h \ + /usr/include/c++/15/bits/stl_pair.h \ + /usr/include/c++/15/bits/stl_raw_storage_iter.h \ + /usr/include/c++/15/bits/stl_relops.h \ + /usr/include/c++/15/bits/stl_set.h \ + /usr/include/c++/15/bits/stl_tempbuf.h \ + /usr/include/c++/15/bits/stl_tree.h \ + /usr/include/c++/15/bits/stl_uninitialized.h \ + /usr/include/c++/15/bits/stl_vector.h \ + /usr/include/c++/15/bits/stream_iterator.h \ + /usr/include/c++/15/bits/streambuf.tcc \ + /usr/include/c++/15/bits/streambuf_iterator.h \ + /usr/include/c++/15/bits/string_view.tcc \ + /usr/include/c++/15/bits/stringfwd.h \ + /usr/include/c++/15/bits/this_thread_sleep.h \ + /usr/include/c++/15/bits/uniform_int_dist.h \ + /usr/include/c++/15/bits/unique_lock.h \ + /usr/include/c++/15/bits/unique_ptr.h \ + /usr/include/c++/15/bits/unordered_map.h \ + /usr/include/c++/15/bits/unordered_set.h \ + /usr/include/c++/15/bits/uses_allocator.h \ + /usr/include/c++/15/bits/uses_allocator_args.h \ + /usr/include/c++/15/bits/utility.h \ + /usr/include/c++/15/bits/valarray_after.h \ + /usr/include/c++/15/bits/valarray_array.h \ + /usr/include/c++/15/bits/valarray_array.tcc \ + /usr/include/c++/15/bits/valarray_before.h \ + /usr/include/c++/15/bits/vector.tcc \ + /usr/include/c++/15/bits/version.h \ + /usr/include/c++/15/cassert \ + /usr/include/c++/15/cctype \ + /usr/include/c++/15/cerrno \ + /usr/include/c++/15/charconv \ + /usr/include/c++/15/chrono \ + /usr/include/c++/15/climits \ + /usr/include/c++/15/clocale \ + /usr/include/c++/15/cmath \ + /usr/include/c++/15/compare \ + /usr/include/c++/15/concepts \ + /usr/include/c++/15/condition_variable \ + /usr/include/c++/15/cstddef \ + /usr/include/c++/15/cstdint \ + /usr/include/c++/15/cstdio \ + /usr/include/c++/15/cstdlib \ + /usr/include/c++/15/cstring \ + /usr/include/c++/15/ctime \ + /usr/include/c++/15/cwchar \ + /usr/include/c++/15/cwctype \ + /usr/include/c++/15/debug/assertions.h \ + /usr/include/c++/15/debug/debug.h \ + /usr/include/c++/15/exception \ + /usr/include/c++/15/experimental/source_location \ + /usr/include/c++/15/ext/aligned_buffer.h \ + /usr/include/c++/15/ext/alloc_traits.h \ + /usr/include/c++/15/ext/atomicity.h \ + /usr/include/c++/15/ext/concurrence.h \ + /usr/include/c++/15/ext/numeric_traits.h \ + /usr/include/c++/15/ext/string_conversions.h \ + /usr/include/c++/15/ext/type_traits.h \ + /usr/include/c++/15/filesystem \ + /usr/include/c++/15/format \ + /usr/include/c++/15/forward_list \ + /usr/include/c++/15/functional \ + /usr/include/c++/15/future \ + /usr/include/c++/15/initializer_list \ + /usr/include/c++/15/iomanip \ + /usr/include/c++/15/ios \ + /usr/include/c++/15/iosfwd \ + /usr/include/c++/15/iostream \ + /usr/include/c++/15/istream \ + /usr/include/c++/15/iterator \ + /usr/include/c++/15/limits \ + /usr/include/c++/15/list \ + /usr/include/c++/15/locale \ + /usr/include/c++/15/map \ + /usr/include/c++/15/memory \ + /usr/include/c++/15/memory_resource \ + /usr/include/c++/15/mutex \ + /usr/include/c++/15/new \ + /usr/include/c++/15/numeric \ + /usr/include/c++/15/optional \ + /usr/include/c++/15/ostream \ + /usr/include/c++/15/pstl/execution_defs.h \ + /usr/include/c++/15/pstl/glue_numeric_defs.h \ + /usr/include/c++/15/pstl/pstl_config.h \ + /usr/include/c++/15/random \ + /usr/include/c++/15/ratio \ + /usr/include/c++/15/semaphore \ + /usr/include/c++/15/set \ + /usr/include/c++/15/shared_mutex \ + /usr/include/c++/15/source_location \ + /usr/include/c++/15/sstream \ + /usr/include/c++/15/stdexcept \ + /usr/include/c++/15/stop_token \ + /usr/include/c++/15/streambuf \ + /usr/include/c++/15/string \ + /usr/include/c++/15/string_view \ + /usr/include/c++/15/system_error \ + /usr/include/c++/15/tr1/bessel_function.tcc \ + /usr/include/c++/15/tr1/beta_function.tcc \ + /usr/include/c++/15/tr1/ell_integral.tcc \ + /usr/include/c++/15/tr1/exp_integral.tcc \ + /usr/include/c++/15/tr1/gamma.tcc \ + /usr/include/c++/15/tr1/hypergeometric.tcc \ + /usr/include/c++/15/tr1/legendre_function.tcc \ + /usr/include/c++/15/tr1/modified_bessel_func.tcc \ + /usr/include/c++/15/tr1/poly_hermite.tcc \ + /usr/include/c++/15/tr1/poly_laguerre.tcc \ + /usr/include/c++/15/tr1/riemann_zeta.tcc \ + /usr/include/c++/15/tr1/special_function_util.h \ + /usr/include/c++/15/tuple \ + /usr/include/c++/15/type_traits \ + /usr/include/c++/15/typeinfo \ + /usr/include/c++/15/unordered_map \ + /usr/include/c++/15/unordered_set \ + /usr/include/c++/15/utility \ + /usr/include/c++/15/valarray \ + /usr/include/c++/15/variant \ + /usr/include/c++/15/vector \ + /usr/include/c++/15/version \ + /usr/include/c++/15/x86_64-redhat-linux/bits/atomic_word.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/c++allocator.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/c++config.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/c++locale.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/cpu_defines.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/ctype_base.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/ctype_inline.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/error_constants.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/gthr-default.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/gthr.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/messages_members.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/opt_random.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/os_defines.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/time_members.h \ + /usr/include/ctype.h \ + /usr/include/endian.h \ + /usr/include/errno.h \ + /usr/include/features-time64.h \ + /usr/include/features.h \ + /usr/include/gnu/stubs-64.h \ + /usr/include/gnu/stubs.h \ + /usr/include/inttypes.h \ + /usr/include/libintl.h \ + /usr/include/limits.h \ + /usr/include/linux/close_range.h \ + /usr/include/linux/errno.h \ + /usr/include/linux/limits.h \ + /usr/include/linux/posix_types.h \ + /usr/include/linux/sched/types.h \ + /usr/include/linux/stddef.h \ + /usr/include/linux/types.h \ + /usr/include/locale.h \ + /usr/include/math.h \ + /usr/include/pthread.h \ + /usr/include/qt6/QtConcurrent/QtConcurrent \ + /usr/include/qt6/QtConcurrent/QtConcurrentDepends \ + /usr/include/qt6/QtConcurrent/qtaskbuilder.h \ + /usr/include/qt6/QtConcurrent/qtconcurrent_global.h \ + /usr/include/qt6/QtConcurrent/qtconcurrentcompilertest.h \ + /usr/include/qt6/QtConcurrent/qtconcurrentexports.h \ + /usr/include/qt6/QtConcurrent/qtconcurrentfilter.h \ + /usr/include/qt6/QtConcurrent/qtconcurrentfilterkernel.h \ + /usr/include/qt6/QtConcurrent/qtconcurrentfunctionwrappers.h \ + /usr/include/qt6/QtConcurrent/qtconcurrentiteratekernel.h \ + /usr/include/qt6/QtConcurrent/qtconcurrentmap.h \ + /usr/include/qt6/QtConcurrent/qtconcurrentmapkernel.h \ + /usr/include/qt6/QtConcurrent/qtconcurrentmedian.h \ + /usr/include/qt6/QtConcurrent/qtconcurrentreducekernel.h \ + /usr/include/qt6/QtConcurrent/qtconcurrentrun.h \ + /usr/include/qt6/QtConcurrent/qtconcurrentrunbase.h \ + /usr/include/qt6/QtConcurrent/qtconcurrentstoredfunctioncall.h \ + /usr/include/qt6/QtConcurrent/qtconcurrenttask.h \ + /usr/include/qt6/QtConcurrent/qtconcurrentthreadengine.h \ + /usr/include/qt6/QtConcurrent/qtconcurrentversion.h \ + /usr/include/qt6/QtCore/QAbstractItemModel \ + /usr/include/qt6/QtCore/QAbstractListModel \ + /usr/include/qt6/QtCore/QAbstractProxyModel \ + /usr/include/qt6/QtCore/QAbstractTableModel \ + /usr/include/qt6/QtCore/QAtomicInt \ + /usr/include/qt6/QtCore/QCache \ + /usr/include/qt6/QtCore/QDateTime \ + /usr/include/qt6/QtCore/QDeadlineTimer \ + /usr/include/qt6/QtCore/QDebug \ + /usr/include/qt6/QtCore/QDir \ + /usr/include/qt6/QtCore/QDirIterator \ + /usr/include/qt6/QtCore/QElapsedTimer \ + /usr/include/qt6/QtCore/QFile \ + /usr/include/qt6/QtCore/QFileInfo \ + /usr/include/qt6/QtCore/QFileSystemWatcher \ + /usr/include/qt6/QtCore/QFutureWatcher \ + /usr/include/qt6/QtCore/QHash \ + /usr/include/qt6/QtCore/QHashFunctions \ + /usr/include/qt6/QtCore/QJsonArray \ + /usr/include/qt6/QtCore/QJsonObject \ + /usr/include/qt6/QtCore/QLibrary \ + /usr/include/qt6/QtCore/QLineF \ + /usr/include/qt6/QtCore/QList \ + /usr/include/qt6/QtCore/QMap \ + /usr/include/qt6/QtCore/QMimeData \ + /usr/include/qt6/QtCore/QModelIndex \ + /usr/include/qt6/QtCore/QMutex \ + /usr/include/qt6/QtCore/QObject \ + /usr/include/qt6/QtCore/QPair \ + /usr/include/qt6/QtCore/QPoint \ + /usr/include/qt6/QtCore/QPointF \ + /usr/include/qt6/QtCore/QPointer \ + /usr/include/qt6/QtCore/QProcess \ + /usr/include/qt6/QtCore/QReadWriteLock \ + /usr/include/qt6/QtCore/QRect \ + /usr/include/qt6/QtCore/QRectF \ + /usr/include/qt6/QtCore/QRegularExpression \ + /usr/include/qt6/QtCore/QRunnable \ + /usr/include/qt6/QtCore/QSet \ + /usr/include/qt6/QtCore/QSettings \ + /usr/include/qt6/QtCore/QSharedPointer \ + /usr/include/qt6/QtCore/QSize \ + /usr/include/qt6/QtCore/QSizeF \ + /usr/include/qt6/QtCore/QSortFilterProxyModel \ + /usr/include/qt6/QtCore/QString \ + /usr/include/qt6/QtCore/QStringList \ + /usr/include/qt6/QtCore/QTextStream \ + /usr/include/qt6/QtCore/QThread \ + /usr/include/qt6/QtCore/QThreadPool \ + /usr/include/qt6/QtCore/QTimer \ + /usr/include/qt6/QtCore/QVariant \ + /usr/include/qt6/QtCore/QVariantMap \ + /usr/include/qt6/QtCore/QVector \ + /usr/include/qt6/QtCore/QtCore \ + /usr/include/qt6/QtCore/QtCoreDepends \ + /usr/include/qt6/QtCore/q17memory.h \ + /usr/include/qt6/QtCore/q20algorithm.h \ + /usr/include/qt6/QtCore/q20chrono.h \ + /usr/include/qt6/QtCore/q20functional.h \ + /usr/include/qt6/QtCore/q20iterator.h \ + /usr/include/qt6/QtCore/q20map.h \ + /usr/include/qt6/QtCore/q20memory.h \ + /usr/include/qt6/QtCore/q20type_traits.h \ + /usr/include/qt6/QtCore/q20utility.h \ + /usr/include/qt6/QtCore/q20vector.h \ + /usr/include/qt6/QtCore/q23functional.h \ + /usr/include/qt6/QtCore/q23type_traits.h \ + /usr/include/qt6/QtCore/q23utility.h \ + /usr/include/qt6/QtCore/q26numeric.h \ + /usr/include/qt6/QtCore/qabstractanimation.h \ + /usr/include/qt6/QtCore/qabstracteventdispatcher.h \ + /usr/include/qt6/QtCore/qabstractitemmodel.h \ + /usr/include/qt6/QtCore/qabstractnativeeventfilter.h \ + /usr/include/qt6/QtCore/qabstractproxymodel.h \ + /usr/include/qt6/QtCore/qalgorithms.h \ + /usr/include/qt6/QtCore/qalloc.h \ + /usr/include/qt6/QtCore/qanimationgroup.h \ + /usr/include/qt6/QtCore/qanystringview.h \ + /usr/include/qt6/QtCore/qapplicationstatic.h \ + /usr/include/qt6/QtCore/qarraydata.h \ + /usr/include/qt6/QtCore/qarraydataops.h \ + /usr/include/qt6/QtCore/qarraydatapointer.h \ + /usr/include/qt6/QtCore/qassert.h \ + /usr/include/qt6/QtCore/qassociativeiterable.h \ + /usr/include/qt6/QtCore/qatomic.h \ + /usr/include/qt6/QtCore/qatomic_cxx11.h \ + /usr/include/qt6/QtCore/qatomicscopedvaluerollback.h \ + /usr/include/qt6/QtCore/qbasicatomic.h \ + /usr/include/qt6/QtCore/qbasictimer.h \ + /usr/include/qt6/QtCore/qbindingstorage.h \ + /usr/include/qt6/QtCore/qbitarray.h \ + /usr/include/qt6/QtCore/qbuffer.h \ + /usr/include/qt6/QtCore/qbytearray.h \ + /usr/include/qt6/QtCore/qbytearrayalgorithms.h \ + /usr/include/qt6/QtCore/qbytearraylist.h \ + /usr/include/qt6/QtCore/qbytearraymatcher.h \ + /usr/include/qt6/QtCore/qbytearrayview.h \ + /usr/include/qt6/QtCore/qcache.h \ + /usr/include/qt6/QtCore/qcalendar.h \ + /usr/include/qt6/QtCore/qcborarray.h \ + /usr/include/qt6/QtCore/qcborcommon.h \ + /usr/include/qt6/QtCore/qcbormap.h \ + /usr/include/qt6/QtCore/qcborstream.h \ + /usr/include/qt6/QtCore/qcborstreamreader.h \ + /usr/include/qt6/QtCore/qcborstreamwriter.h \ + /usr/include/qt6/QtCore/qcborvalue.h \ + /usr/include/qt6/QtCore/qchar.h \ + /usr/include/qt6/QtCore/qcheckedint_impl.h \ + /usr/include/qt6/QtCore/qchronotimer.h \ + /usr/include/qt6/QtCore/qcollator.h \ + /usr/include/qt6/QtCore/qcommandlineoption.h \ + /usr/include/qt6/QtCore/qcommandlineparser.h \ + /usr/include/qt6/QtCore/qcompare.h \ + /usr/include/qt6/QtCore/qcompare_impl.h \ + /usr/include/qt6/QtCore/qcomparehelpers.h \ + /usr/include/qt6/QtCore/qcompilerdetection.h \ + /usr/include/qt6/QtCore/qconcatenatetablesproxymodel.h \ + /usr/include/qt6/QtCore/qconfig-64.h \ + /usr/include/qt6/QtCore/qconfig.h \ + /usr/include/qt6/QtCore/qconstructormacros.h \ + /usr/include/qt6/QtCore/qcontainerfwd.h \ + /usr/include/qt6/QtCore/qcontainerinfo.h \ + /usr/include/qt6/QtCore/qcontainertools_impl.h \ + /usr/include/qt6/QtCore/qcontiguouscache.h \ + /usr/include/qt6/QtCore/qcoreapplication.h \ + /usr/include/qt6/QtCore/qcoreapplication_platform.h \ + /usr/include/qt6/QtCore/qcoreevent.h \ + /usr/include/qt6/QtCore/qcryptographichash.h \ + /usr/include/qt6/QtCore/qdarwinhelpers.h \ + /usr/include/qt6/QtCore/qdatastream.h \ + /usr/include/qt6/QtCore/qdatetime.h \ + /usr/include/qt6/QtCore/qdeadlinetimer.h \ + /usr/include/qt6/QtCore/qdebug.h \ + /usr/include/qt6/QtCore/qdir.h \ + /usr/include/qt6/QtCore/qdiriterator.h \ + /usr/include/qt6/QtCore/qdirlisting.h \ + /usr/include/qt6/QtCore/qeasingcurve.h \ + /usr/include/qt6/QtCore/qelapsedtimer.h \ + /usr/include/qt6/QtCore/qendian.h \ + /usr/include/qt6/QtCore/qeventloop.h \ + /usr/include/qt6/QtCore/qexception.h \ + /usr/include/qt6/QtCore/qexceptionhandling.h \ + /usr/include/qt6/QtCore/qfactoryinterface.h \ + /usr/include/qt6/QtCore/qfile.h \ + /usr/include/qt6/QtCore/qfiledevice.h \ + /usr/include/qt6/QtCore/qfileinfo.h \ + /usr/include/qt6/QtCore/qfileselector.h \ + /usr/include/qt6/QtCore/qfilesystemwatcher.h \ + /usr/include/qt6/QtCore/qflags.h \ + /usr/include/qt6/QtCore/qfloat16.h \ + /usr/include/qt6/QtCore/qforeach.h \ + /usr/include/qt6/QtCore/qfunctionaltools_impl.h \ + /usr/include/qt6/QtCore/qfunctionpointer.h \ + /usr/include/qt6/QtCore/qfuture.h \ + /usr/include/qt6/QtCore/qfuture_impl.h \ + /usr/include/qt6/QtCore/qfutureinterface.h \ + /usr/include/qt6/QtCore/qfuturesynchronizer.h \ + /usr/include/qt6/QtCore/qfuturewatcher.h \ + /usr/include/qt6/QtCore/qgenericatomic.h \ + /usr/include/qt6/QtCore/qglobal.h \ + /usr/include/qt6/QtCore/qglobalstatic.h \ + /usr/include/qt6/QtCore/qhash.h \ + /usr/include/qt6/QtCore/qhashfunctions.h \ + /usr/include/qt6/QtCore/qidentityproxymodel.h \ + /usr/include/qt6/QtCore/qiodevice.h \ + /usr/include/qt6/QtCore/qiodevicebase.h \ + /usr/include/qt6/QtCore/qitemselectionmodel.h \ + /usr/include/qt6/QtCore/qiterable.h \ + /usr/include/qt6/QtCore/qiterator.h \ + /usr/include/qt6/QtCore/qjsonarray.h \ + /usr/include/qt6/QtCore/qjsondocument.h \ + /usr/include/qt6/QtCore/qjsonobject.h \ + /usr/include/qt6/QtCore/qjsonparseerror.h \ + /usr/include/qt6/QtCore/qjsonvalue.h \ + /usr/include/qt6/QtCore/qlatin1stringmatcher.h \ + /usr/include/qt6/QtCore/qlatin1stringview.h \ + /usr/include/qt6/QtCore/qlibrary.h \ + /usr/include/qt6/QtCore/qlibraryinfo.h \ + /usr/include/qt6/QtCore/qline.h \ + /usr/include/qt6/QtCore/qlist.h \ + /usr/include/qt6/QtCore/qlocale.h \ + /usr/include/qt6/QtCore/qlockfile.h \ + /usr/include/qt6/QtCore/qlogging.h \ + /usr/include/qt6/QtCore/qloggingcategory.h \ + /usr/include/qt6/QtCore/qmalloc.h \ + /usr/include/qt6/QtCore/qmap.h \ + /usr/include/qt6/QtCore/qmargins.h \ + /usr/include/qt6/QtCore/qmath.h \ + /usr/include/qt6/QtCore/qmessageauthenticationcode.h \ + /usr/include/qt6/QtCore/qmetacontainer.h \ + /usr/include/qt6/QtCore/qmetaobject.h \ + /usr/include/qt6/QtCore/qmetatype.h \ + /usr/include/qt6/QtCore/qmimedata.h \ + /usr/include/qt6/QtCore/qmimedatabase.h \ + /usr/include/qt6/QtCore/qmimetype.h \ + /usr/include/qt6/QtCore/qminmax.h \ + /usr/include/qt6/QtCore/qmutex.h \ + /usr/include/qt6/QtCore/qnamespace.h \ + /usr/include/qt6/QtCore/qnativeinterface.h \ + /usr/include/qt6/QtCore/qnumeric.h \ + /usr/include/qt6/QtCore/qobject.h \ + /usr/include/qt6/QtCore/qobject_impl.h \ + /usr/include/qt6/QtCore/qobjectcleanuphandler.h \ + /usr/include/qt6/QtCore/qobjectdefs.h \ + /usr/include/qt6/QtCore/qobjectdefs_impl.h \ + /usr/include/qt6/QtCore/qoperatingsystemversion.h \ + /usr/include/qt6/QtCore/qoverload.h \ + /usr/include/qt6/QtCore/qpair.h \ + /usr/include/qt6/QtCore/qparallelanimationgroup.h \ + /usr/include/qt6/QtCore/qpauseanimation.h \ + /usr/include/qt6/QtCore/qpermissions.h \ + /usr/include/qt6/QtCore/qplugin.h \ + /usr/include/qt6/QtCore/qpluginloader.h \ + /usr/include/qt6/QtCore/qpoint.h \ + /usr/include/qt6/QtCore/qpointer.h \ + /usr/include/qt6/QtCore/qprocess.h \ + /usr/include/qt6/QtCore/qprocessordetection.h \ + /usr/include/qt6/QtCore/qpromise.h \ + /usr/include/qt6/QtCore/qproperty.h \ + /usr/include/qt6/QtCore/qpropertyanimation.h \ + /usr/include/qt6/QtCore/qpropertyprivate.h \ + /usr/include/qt6/QtCore/qqueue.h \ + /usr/include/qt6/QtCore/qrandom.h \ + /usr/include/qt6/QtCore/qrangemodel.h \ + /usr/include/qt6/QtCore/qrangemodel_impl.h \ + /usr/include/qt6/QtCore/qreadwritelock.h \ + /usr/include/qt6/QtCore/qrect.h \ + /usr/include/qt6/QtCore/qrefcount.h \ + /usr/include/qt6/QtCore/qregularexpression.h \ + /usr/include/qt6/QtCore/qresource.h \ + /usr/include/qt6/QtCore/qresultstore.h \ + /usr/include/qt6/QtCore/qrunnable.h \ + /usr/include/qt6/QtCore/qsavefile.h \ + /usr/include/qt6/QtCore/qscopedpointer.h \ + /usr/include/qt6/QtCore/qscopedvaluerollback.h \ + /usr/include/qt6/QtCore/qscopeguard.h \ + /usr/include/qt6/QtCore/qsemaphore.h \ + /usr/include/qt6/QtCore/qsequentialanimationgroup.h \ + /usr/include/qt6/QtCore/qsequentialiterable.h \ + /usr/include/qt6/QtCore/qset.h \ + /usr/include/qt6/QtCore/qsettings.h \ + /usr/include/qt6/QtCore/qshareddata.h \ + /usr/include/qt6/QtCore/qshareddata_impl.h \ + /usr/include/qt6/QtCore/qsharedmemory.h \ + /usr/include/qt6/QtCore/qsharedpointer.h \ + /usr/include/qt6/QtCore/qsharedpointer_impl.h \ + /usr/include/qt6/QtCore/qsignalmapper.h \ + /usr/include/qt6/QtCore/qsimd.h \ + /usr/include/qt6/QtCore/qsize.h \ + /usr/include/qt6/QtCore/qsocketnotifier.h \ + /usr/include/qt6/QtCore/qsortfilterproxymodel.h \ + /usr/include/qt6/QtCore/qspan.h \ + /usr/include/qt6/QtCore/qstack.h \ + /usr/include/qt6/QtCore/qstandardpaths.h \ + /usr/include/qt6/QtCore/qstaticlatin1stringmatcher.h \ + /usr/include/qt6/QtCore/qstdlibdetection.h \ + /usr/include/qt6/QtCore/qstorageinfo.h \ + /usr/include/qt6/QtCore/qstring.h \ + /usr/include/qt6/QtCore/qstringalgorithms.h \ + /usr/include/qt6/QtCore/qstringbuilder.h \ + /usr/include/qt6/QtCore/qstringconverter.h \ + /usr/include/qt6/QtCore/qstringconverter_base.h \ + /usr/include/qt6/QtCore/qstringfwd.h \ + /usr/include/qt6/QtCore/qstringlist.h \ + /usr/include/qt6/QtCore/qstringlistmodel.h \ + /usr/include/qt6/QtCore/qstringliteral.h \ + /usr/include/qt6/QtCore/qstringmatcher.h \ + /usr/include/qt6/QtCore/qstringtokenizer.h \ + /usr/include/qt6/QtCore/qstringview.h \ + /usr/include/qt6/QtCore/qswap.h \ + /usr/include/qt6/QtCore/qsysinfo.h \ + /usr/include/qt6/QtCore/qsystemdetection.h \ + /usr/include/qt6/QtCore/qsystemsemaphore.h \ + /usr/include/qt6/QtCore/qtaggedpointer.h \ + /usr/include/qt6/QtCore/qtclasshelpermacros.h \ + /usr/include/qt6/QtCore/qtconfiginclude.h \ + /usr/include/qt6/QtCore/qtconfigmacros.h \ + /usr/include/qt6/QtCore/qtcore-config.h \ + /usr/include/qt6/QtCore/qtcoreexports.h \ + /usr/include/qt6/QtCore/qtcoreglobal.h \ + /usr/include/qt6/QtCore/qtcoreversion.h \ + /usr/include/qt6/QtCore/qtdeprecationdefinitions.h \ + /usr/include/qt6/QtCore/qtdeprecationmarkers.h \ + /usr/include/qt6/QtCore/qtemporarydir.h \ + /usr/include/qt6/QtCore/qtemporaryfile.h \ + /usr/include/qt6/QtCore/qtenvironmentvariables.h \ + /usr/include/qt6/QtCore/qtextboundaryfinder.h \ + /usr/include/qt6/QtCore/qtextstream.h \ + /usr/include/qt6/QtCore/qtformat_impl.h \ + /usr/include/qt6/QtCore/qthread.h \ + /usr/include/qt6/QtCore/qthreadpool.h \ + /usr/include/qt6/QtCore/qthreadstorage.h \ + /usr/include/qt6/QtCore/qtimeline.h \ + /usr/include/qt6/QtCore/qtimer.h \ + /usr/include/qt6/QtCore/qtimezone.h \ + /usr/include/qt6/QtCore/qtipccommon.h \ + /usr/include/qt6/QtCore/qtmetamacros.h \ + /usr/include/qt6/QtCore/qtmocconstants.h \ + /usr/include/qt6/QtCore/qtnoop.h \ + /usr/include/qt6/QtCore/qtpreprocessorsupport.h \ + /usr/include/qt6/QtCore/qtranslator.h \ + /usr/include/qt6/QtCore/qtransposeproxymodel.h \ + /usr/include/qt6/QtCore/qtresource.h \ + /usr/include/qt6/QtCore/qtsan_impl.h \ + /usr/include/qt6/QtCore/qtsymbolmacros.h \ + /usr/include/qt6/QtCore/qttranslation.h \ + /usr/include/qt6/QtCore/qttypetraits.h \ + /usr/include/qt6/QtCore/qtversion.h \ + /usr/include/qt6/QtCore/qtversionchecks.h \ + /usr/include/qt6/QtCore/qtypeinfo.h \ + /usr/include/qt6/QtCore/qtyperevision.h \ + /usr/include/qt6/QtCore/qtypes.h \ + /usr/include/qt6/QtCore/qurl.h \ + /usr/include/qt6/QtCore/qurlquery.h \ + /usr/include/qt6/QtCore/qutf8stringview.h \ + /usr/include/qt6/QtCore/quuid.h \ + /usr/include/qt6/QtCore/qvariant.h \ + /usr/include/qt6/QtCore/qvariantanimation.h \ + /usr/include/qt6/QtCore/qvarianthash.h \ + /usr/include/qt6/QtCore/qvariantlist.h \ + /usr/include/qt6/QtCore/qvariantmap.h \ + /usr/include/qt6/QtCore/qvarlengtharray.h \ + /usr/include/qt6/QtCore/qvector.h \ + /usr/include/qt6/QtCore/qversionnumber.h \ + /usr/include/qt6/QtCore/qversiontagging.h \ + /usr/include/qt6/QtCore/qwaitcondition.h \ + /usr/include/qt6/QtCore/qwineventnotifier.h \ + /usr/include/qt6/QtCore/qxmlstream.h \ + /usr/include/qt6/QtCore/qxpfunctional.h \ + /usr/include/qt6/QtCore/qxptype_traits.h \ + /usr/include/qt6/QtCore/qyieldcpu.h \ + /usr/include/qt6/QtGui/QAction \ + /usr/include/qt6/QtGui/QColor \ + /usr/include/qt6/QtGui/QFileSystemModel \ + /usr/include/qt6/QtGui/QFont \ + /usr/include/qt6/QtGui/QIcon \ + /usr/include/qt6/QtGui/QImage \ + /usr/include/qt6/QtGui/QKeyEvent \ + /usr/include/qt6/QtGui/QPainter \ + /usr/include/qt6/QtGui/QPainterPath \ + /usr/include/qt6/QtGui/QPixmap \ + /usr/include/qt6/QtGui/QStandardItemModel \ + /usr/include/qt6/QtGui/QSurfaceFormat \ + /usr/include/qt6/QtGui/QTransform \ + /usr/include/qt6/QtGui/QUndoStack \ + /usr/include/qt6/QtGui/qabstracttextdocumentlayout.h \ + /usr/include/qt6/QtGui/qaction.h \ + /usr/include/qt6/QtGui/qbitmap.h \ + /usr/include/qt6/QtGui/qbrush.h \ + /usr/include/qt6/QtGui/qclipboard.h \ + /usr/include/qt6/QtGui/qcolor.h \ + /usr/include/qt6/QtGui/qcursor.h \ + /usr/include/qt6/QtGui/qevent.h \ + /usr/include/qt6/QtGui/qeventpoint.h \ + /usr/include/qt6/QtGui/qfilesystemmodel.h \ + /usr/include/qt6/QtGui/qfont.h \ + /usr/include/qt6/QtGui/qfontdatabase.h \ + /usr/include/qt6/QtGui/qfontinfo.h \ + /usr/include/qt6/QtGui/qfontmetrics.h \ + /usr/include/qt6/QtGui/qfontvariableaxis.h \ + /usr/include/qt6/QtGui/qglyphrun.h \ + /usr/include/qt6/QtGui/qguiapplication.h \ + /usr/include/qt6/QtGui/qguiapplication_platform.h \ + /usr/include/qt6/QtGui/qicon.h \ + /usr/include/qt6/QtGui/qimage.h \ + /usr/include/qt6/QtGui/qinputdevice.h \ + /usr/include/qt6/QtGui/qinputmethod.h \ + /usr/include/qt6/QtGui/qkeysequence.h \ + /usr/include/qt6/QtGui/qopengl.h \ + /usr/include/qt6/QtGui/qopenglcontext.h \ + /usr/include/qt6/QtGui/qopenglcontext_platform.h \ + /usr/include/qt6/QtGui/qopenglext.h \ + /usr/include/qt6/QtGui/qpaintdevice.h \ + /usr/include/qt6/QtGui/qpainter.h \ + /usr/include/qt6/QtGui/qpainterpath.h \ + /usr/include/qt6/QtGui/qpalette.h \ + /usr/include/qt6/QtGui/qpen.h \ + /usr/include/qt6/QtGui/qpicture.h \ + /usr/include/qt6/QtGui/qpixelformat.h \ + /usr/include/qt6/QtGui/qpixmap.h \ + /usr/include/qt6/QtGui/qpointingdevice.h \ + /usr/include/qt6/QtGui/qpolygon.h \ + /usr/include/qt6/QtGui/qrawfont.h \ + /usr/include/qt6/QtGui/qregion.h \ + /usr/include/qt6/QtGui/qrgb.h \ + /usr/include/qt6/QtGui/qrgba64.h \ + /usr/include/qt6/QtGui/qscreen.h \ + /usr/include/qt6/QtGui/qscreen_platform.h \ + /usr/include/qt6/QtGui/qstandarditemmodel.h \ + /usr/include/qt6/QtGui/qsurfaceformat.h \ + /usr/include/qt6/QtGui/qtextcursor.h \ + /usr/include/qt6/QtGui/qtextdocument.h \ + /usr/include/qt6/QtGui/qtextformat.h \ + /usr/include/qt6/QtGui/qtextlayout.h \ + /usr/include/qt6/QtGui/qtextoption.h \ + /usr/include/qt6/QtGui/qtgui-config.h \ + /usr/include/qt6/QtGui/qtguiexports.h \ + /usr/include/qt6/QtGui/qtguiglobal.h \ + /usr/include/qt6/QtGui/qtransform.h \ + /usr/include/qt6/QtGui/qundostack.h \ + /usr/include/qt6/QtGui/qvalidator.h \ + /usr/include/qt6/QtGui/qvector2d.h \ + /usr/include/qt6/QtGui/qvectornd.h \ + /usr/include/qt6/QtGui/qwindowdefs.h \ + /usr/include/qt6/QtNetwork/qtnetwork-config.h \ + /usr/include/qt6/QtNetwork/qtnetworkexports.h \ + /usr/include/qt6/QtNetwork/qtnetworkglobal.h \ + /usr/include/qt6/QtOpenGL/QOpenGLFunctions_4_1_Core \ + /usr/include/qt6/QtOpenGL/QOpenGLVersionFunctions \ + /usr/include/qt6/QtOpenGL/QOpenGLVersionProfile \ + /usr/include/qt6/QtOpenGL/qopenglfunctions_4_1_core.h \ + /usr/include/qt6/QtOpenGL/qopenglversionfunctions.h \ + /usr/include/qt6/QtOpenGL/qopenglversionprofile.h \ + /usr/include/qt6/QtOpenGL/qtopenglexports.h \ + /usr/include/qt6/QtOpenGL/qtopenglglobal.h \ + /usr/include/qt6/QtOpenGLWidgets/QOpenGLWidget \ + /usr/include/qt6/QtOpenGLWidgets/qopenglwidget.h \ + /usr/include/qt6/QtOpenGLWidgets/qtopenglwidgetsexports.h \ + /usr/include/qt6/QtOpenGLWidgets/qtopenglwidgetsglobal.h \ + /usr/include/qt6/QtPdf/QPdfDocument \ + /usr/include/qt6/QtPdf/qpdfdocument.h \ + /usr/include/qt6/QtPdf/qpdfdocumentrenderoptions.h \ + /usr/include/qt6/QtPdf/qpdfselection.h \ + /usr/include/qt6/QtPdf/qtpdfexports.h \ + /usr/include/qt6/QtPdf/qtpdfglobal.h \ + /usr/include/qt6/QtPdfWidgets/QPdfView \ + /usr/include/qt6/QtPdfWidgets/qpdfview.h \ + /usr/include/qt6/QtPdfWidgets/qtpdfwidgetsglobal.h \ + /usr/include/qt6/QtQml/qjsnumbercoercion.h \ + /usr/include/qt6/QtQml/qjsprimitivevalue.h \ + /usr/include/qt6/QtQml/qjsvalue.h \ + /usr/include/qt6/QtQml/qqml.h \ + /usr/include/qt6/QtQml/qqmllist.h \ + /usr/include/qt6/QtQml/qqmlparserstatus.h \ + /usr/include/qt6/QtQml/qqmlprivate.h \ + /usr/include/qt6/QtQml/qqmlpropertyvaluesource.h \ + /usr/include/qt6/QtQml/qqmlregistration.h \ + /usr/include/qt6/QtQml/qtqml-config.h \ + /usr/include/qt6/QtQml/qtqmlexports.h \ + /usr/include/qt6/QtQml/qtqmlglobal.h \ + /usr/include/qt6/QtQmlIntegration/qqmlintegration.h \ + /usr/include/qt6/QtSql/QSqlDatabase \ + /usr/include/qt6/QtSql/QSqlError \ + /usr/include/qt6/QtSql/QSqlQuery \ + /usr/include/qt6/QtSql/qsqldatabase.h \ + /usr/include/qt6/QtSql/qsqlerror.h \ + /usr/include/qt6/QtSql/qsqlquery.h \ + /usr/include/qt6/QtSql/qtsql-config.h \ + /usr/include/qt6/QtSql/qtsqlexports.h \ + /usr/include/qt6/QtSql/qtsqlglobal.h \ + /usr/include/qt6/QtSvg/qtsvgexports.h \ + /usr/include/qt6/QtSvg/qtsvgglobal.h \ + /usr/include/qt6/QtSvgWidgets/QGraphicsSvgItem \ + /usr/include/qt6/QtSvgWidgets/qgraphicssvgitem.h \ + /usr/include/qt6/QtSvgWidgets/qtsvgwidgetsexports.h \ + /usr/include/qt6/QtSvgWidgets/qtsvgwidgetsglobal.h \ + /usr/include/qt6/QtWidgets/QAbstractItemView \ + /usr/include/qt6/QtWidgets/QCheckBox \ + /usr/include/qt6/QtWidgets/QComboBox \ + /usr/include/qt6/QtWidgets/QDialog \ + /usr/include/qt6/QtWidgets/QGraphicsItem \ + /usr/include/qt6/QtWidgets/QGraphicsPixmapItem \ + /usr/include/qt6/QtWidgets/QGraphicsScene \ + /usr/include/qt6/QtWidgets/QGraphicsSceneMouseEvent \ + /usr/include/qt6/QtWidgets/QGraphicsView \ + /usr/include/qt6/QtWidgets/QGridLayout \ + /usr/include/qt6/QtWidgets/QGroupBox \ + /usr/include/qt6/QtWidgets/QHBoxLayout \ + /usr/include/qt6/QtWidgets/QKeySequenceEdit \ + /usr/include/qt6/QtWidgets/QLabel \ + /usr/include/qt6/QtWidgets/QLineEdit \ + /usr/include/qt6/QtWidgets/QListView \ + /usr/include/qt6/QtWidgets/QListWidget \ + /usr/include/qt6/QtWidgets/QMainWindow \ + /usr/include/qt6/QtWidgets/QMenu \ + /usr/include/qt6/QtWidgets/QPlainTextEdit \ + /usr/include/qt6/QtWidgets/QProgressBar \ + /usr/include/qt6/QtWidgets/QPushButton \ + /usr/include/qt6/QtWidgets/QScrollArea \ + /usr/include/qt6/QtWidgets/QSlider \ + /usr/include/qt6/QtWidgets/QSpinBox \ + /usr/include/qt6/QtWidgets/QSplitter \ + /usr/include/qt6/QtWidgets/QStackedWidget \ + /usr/include/qt6/QtWidgets/QStyleOptionSlider \ + /usr/include/qt6/QtWidgets/QStyleOptionViewItem \ + /usr/include/qt6/QtWidgets/QStyledItemDelegate \ + /usr/include/qt6/QtWidgets/QTabWidget \ + /usr/include/qt6/QtWidgets/QTableView \ + /usr/include/qt6/QtWidgets/QTableWidget \ + /usr/include/qt6/QtWidgets/QTextEdit \ + /usr/include/qt6/QtWidgets/QToolButton \ + /usr/include/qt6/QtWidgets/QTreeView \ + /usr/include/qt6/QtWidgets/QTreeWidget \ + /usr/include/qt6/QtWidgets/QVBoxLayout \ + /usr/include/qt6/QtWidgets/QWidget \ + /usr/include/qt6/QtWidgets/qabstractbutton.h \ + /usr/include/qt6/QtWidgets/qabstractitemdelegate.h \ + /usr/include/qt6/QtWidgets/qabstractitemview.h \ + /usr/include/qt6/QtWidgets/qabstractscrollarea.h \ + /usr/include/qt6/QtWidgets/qabstractslider.h \ + /usr/include/qt6/QtWidgets/qabstractspinbox.h \ + /usr/include/qt6/QtWidgets/qboxlayout.h \ + /usr/include/qt6/QtWidgets/qcheckbox.h \ + /usr/include/qt6/QtWidgets/qcombobox.h \ + /usr/include/qt6/QtWidgets/qdialog.h \ + /usr/include/qt6/QtWidgets/qframe.h \ + /usr/include/qt6/QtWidgets/qgraphicsitem.h \ + /usr/include/qt6/QtWidgets/qgraphicsscene.h \ + /usr/include/qt6/QtWidgets/qgraphicssceneevent.h \ + /usr/include/qt6/QtWidgets/qgraphicsview.h \ + /usr/include/qt6/QtWidgets/qgridlayout.h \ + /usr/include/qt6/QtWidgets/qgroupbox.h \ + /usr/include/qt6/QtWidgets/qkeysequenceedit.h \ + /usr/include/qt6/QtWidgets/qlabel.h \ + /usr/include/qt6/QtWidgets/qlayout.h \ + /usr/include/qt6/QtWidgets/qlayoutitem.h \ + /usr/include/qt6/QtWidgets/qlineedit.h \ + /usr/include/qt6/QtWidgets/qlistview.h \ + /usr/include/qt6/QtWidgets/qlistwidget.h \ + /usr/include/qt6/QtWidgets/qmainwindow.h \ + /usr/include/qt6/QtWidgets/qmenu.h \ + /usr/include/qt6/QtWidgets/qplaintextedit.h \ + /usr/include/qt6/QtWidgets/qprogressbar.h \ + /usr/include/qt6/QtWidgets/qpushbutton.h \ + /usr/include/qt6/QtWidgets/qrubberband.h \ + /usr/include/qt6/QtWidgets/qscrollarea.h \ + /usr/include/qt6/QtWidgets/qsizepolicy.h \ + /usr/include/qt6/QtWidgets/qslider.h \ + /usr/include/qt6/QtWidgets/qspinbox.h \ + /usr/include/qt6/QtWidgets/qsplitter.h \ + /usr/include/qt6/QtWidgets/qstackedwidget.h \ + /usr/include/qt6/QtWidgets/qstyle.h \ + /usr/include/qt6/QtWidgets/qstyleditemdelegate.h \ + /usr/include/qt6/QtWidgets/qstyleoption.h \ + /usr/include/qt6/QtWidgets/qtabbar.h \ + /usr/include/qt6/QtWidgets/qtableview.h \ + /usr/include/qt6/QtWidgets/qtablewidget.h \ + /usr/include/qt6/QtWidgets/qtabwidget.h \ + /usr/include/qt6/QtWidgets/qtextedit.h \ + /usr/include/qt6/QtWidgets/qtoolbutton.h \ + /usr/include/qt6/QtWidgets/qtreeview.h \ + /usr/include/qt6/QtWidgets/qtreewidget.h \ + /usr/include/qt6/QtWidgets/qtreewidgetitemiterator.h \ + /usr/include/qt6/QtWidgets/qtwidgets-config.h \ + /usr/include/qt6/QtWidgets/qtwidgetsexports.h \ + /usr/include/qt6/QtWidgets/qtwidgetsglobal.h \ + /usr/include/qt6/QtWidgets/qwidget.h \ + /usr/include/sched.h \ + /usr/include/semaphore.h \ + /usr/include/stdc-predef.h \ + /usr/include/stdint.h \ + /usr/include/stdio.h \ + /usr/include/stdlib.h \ + /usr/include/string.h \ + /usr/include/strings.h \ + /usr/include/sys/cdefs.h \ + /usr/include/sys/select.h \ + /usr/include/sys/single_threaded.h \ + /usr/include/sys/syscall.h \ + /usr/include/sys/time.h \ + /usr/include/sys/types.h \ + /usr/include/syscall.h \ + /usr/include/time.h \ + /usr/include/unistd.h \ + /usr/include/wchar.h \ + /usr/include/wctype.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/adxintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/ammintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/amxavx512intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/amxbf16intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/amxcomplexintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/amxfp16intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/amxfp8intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/amxint8intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/amxmovrsintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/amxtf32intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/amxtileintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/amxtransposeintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2-512bf16intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2-512convertintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2-512mediaintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2-512minmaxintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2-512satcvtintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2bf16intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2convertintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2copyintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2mediaintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2minmaxintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2satcvtintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx2intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512bf16intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512bf16vlintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512bitalgintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512bitalgvlintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512bwintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512cdintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512dqintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512fintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512fp16intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512fp16vlintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512ifmaintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512ifmavlintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vbmi2intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vbmi2vlintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vbmiintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vbmivlintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vlbwintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vldqintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vlintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vnniintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vnnivlintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vp2intersectintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vp2intersectvlintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vpopcntdqintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vpopcntdqvlintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avxifmaintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avxintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avxneconvertintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avxvnniint16intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avxvnniint8intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avxvnniintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/bmi2intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/bmiintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/cetintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/cldemoteintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/clflushoptintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/clwbintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/clzerointrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/cmpccxaddintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/emmintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/enqcmdintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/f16cintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/fma4intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/fmaintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/fxsrintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/gfniintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/hresetintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/ia32intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/immintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/keylockerintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/lwpintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/lzcntintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/mm3dnow.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/mm_malloc.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/mmintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/movdirintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/movrsintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/mwaitintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/mwaitxintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/pconfigintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/pkuintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/pmmintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/popcntintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/prfchiintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/prfchwintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/raointintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/rdseedintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/rtmintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/serializeintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/sgxintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/sha512intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/shaintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/sm3intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/sm4intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/smmintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/stdarg.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/stdbool.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/stddef.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/tbmintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/tmmintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/tsxldtrkintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/uintrintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/usermsrintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/vaesintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/vpclmulqdqintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/waitpkgintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/wbnoinvdintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/wmmintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/x86gprintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/x86intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/xmmintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/xopintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/xsavecintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/xsaveintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/xsaveoptintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/xsavesintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/xtestintrin.h \ + /usr/lib64/cmake/Qt6/FindWrapAtomic.cmake \ + /usr/lib64/cmake/Qt6/FindWrapOpenGL.cmake \ + /usr/lib64/cmake/Qt6/FindWrapVulkanHeaders.cmake \ + /usr/lib64/cmake/Qt6/Qt6Config.cmake \ + /usr/lib64/cmake/Qt6/Qt6ConfigExtras.cmake \ + /usr/lib64/cmake/Qt6/Qt6ConfigVersion.cmake \ + /usr/lib64/cmake/Qt6/Qt6ConfigVersionImpl.cmake \ + /usr/lib64/cmake/Qt6/Qt6Dependencies.cmake \ + /usr/lib64/cmake/Qt6/Qt6Targets.cmake \ + /usr/lib64/cmake/Qt6/Qt6VersionlessAliasTargets.cmake \ + /usr/lib64/cmake/Qt6/QtFeature.cmake \ + /usr/lib64/cmake/Qt6/QtFeatureCommon.cmake \ + /usr/lib64/cmake/Qt6/QtInstallPaths.cmake \ + /usr/lib64/cmake/Qt6/QtPublicAndroidHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicAppleHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicCMakeEarlyPolicyHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicCMakeHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicCMakeVersionHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicDependencyHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicExternalProjectHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicFinalizerHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicFindPackageHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicGitHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicPluginHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicPluginHelpers_v2.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomAttributionHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomBuildToolHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomCommonGenerationHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomCpeHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomCycloneDXHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomDepHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomDocumentNamespaceHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomExternalReferenceHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomFileHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomGenerationCycloneDXHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomGenerationHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomLicenseHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomOpsHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomPurlHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomPythonHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomQtEntityHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomRelationshipHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomSystemDepHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicTargetHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicTestHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicToolHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicWalkLibsHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicWindowsHelpers.cmake \ + /usr/lib64/cmake/Qt6Concurrent/Qt6ConcurrentAdditionalTargetInfo.cmake \ + /usr/lib64/cmake/Qt6Concurrent/Qt6ConcurrentConfig.cmake \ + /usr/lib64/cmake/Qt6Concurrent/Qt6ConcurrentConfigVersion.cmake \ + /usr/lib64/cmake/Qt6Concurrent/Qt6ConcurrentConfigVersionImpl.cmake \ + /usr/lib64/cmake/Qt6Concurrent/Qt6ConcurrentDependencies.cmake \ + /usr/lib64/cmake/Qt6Concurrent/Qt6ConcurrentTargets-relwithdebinfo.cmake \ + /usr/lib64/cmake/Qt6Concurrent/Qt6ConcurrentTargets.cmake \ + /usr/lib64/cmake/Qt6Concurrent/Qt6ConcurrentVersionlessAliasTargets.cmake \ + /usr/lib64/cmake/Qt6Core/Qt6CoreAdditionalTargetInfo.cmake \ + /usr/lib64/cmake/Qt6Core/Qt6CoreConfig.cmake \ + /usr/lib64/cmake/Qt6Core/Qt6CoreConfigExtras.cmake \ + /usr/lib64/cmake/Qt6Core/Qt6CoreConfigVersion.cmake \ + /usr/lib64/cmake/Qt6Core/Qt6CoreConfigVersionImpl.cmake \ + /usr/lib64/cmake/Qt6Core/Qt6CoreDependencies.cmake \ + /usr/lib64/cmake/Qt6Core/Qt6CoreMacros.cmake \ + /usr/lib64/cmake/Qt6Core/Qt6CoreTargets-relwithdebinfo.cmake \ + /usr/lib64/cmake/Qt6Core/Qt6CoreTargets.cmake \ + /usr/lib64/cmake/Qt6Core/Qt6CoreVersionlessAliasTargets.cmake \ + /usr/lib64/cmake/Qt6CoreTools/Qt6CoreToolsAdditionalTargetInfo.cmake \ + /usr/lib64/cmake/Qt6CoreTools/Qt6CoreToolsConfig.cmake \ + /usr/lib64/cmake/Qt6CoreTools/Qt6CoreToolsConfigVersion.cmake \ + /usr/lib64/cmake/Qt6CoreTools/Qt6CoreToolsConfigVersionImpl.cmake \ + /usr/lib64/cmake/Qt6CoreTools/Qt6CoreToolsDependencies.cmake \ + /usr/lib64/cmake/Qt6CoreTools/Qt6CoreToolsTargets-relwithdebinfo.cmake \ + /usr/lib64/cmake/Qt6CoreTools/Qt6CoreToolsTargets.cmake \ + /usr/lib64/cmake/Qt6CoreTools/Qt6CoreToolsVersionlessTargets.cmake \ + /usr/lib64/cmake/Qt6DBus/Qt6DBusAdditionalTargetInfo.cmake \ + /usr/lib64/cmake/Qt6DBus/Qt6DBusConfig.cmake \ + /usr/lib64/cmake/Qt6DBus/Qt6DBusConfigVersion.cmake \ + /usr/lib64/cmake/Qt6DBus/Qt6DBusConfigVersionImpl.cmake \ + /usr/lib64/cmake/Qt6DBus/Qt6DBusDependencies.cmake \ + /usr/lib64/cmake/Qt6DBus/Qt6DBusMacros.cmake \ + /usr/lib64/cmake/Qt6DBus/Qt6DBusTargets-relwithdebinfo.cmake \ + /usr/lib64/cmake/Qt6DBus/Qt6DBusTargets.cmake \ + /usr/lib64/cmake/Qt6DBus/Qt6DBusVersionlessAliasTargets.cmake \ + /usr/lib64/cmake/Qt6DBusTools/Qt6DBusToolsAdditionalTargetInfo.cmake \ + /usr/lib64/cmake/Qt6DBusTools/Qt6DBusToolsConfig.cmake \ + /usr/lib64/cmake/Qt6DBusTools/Qt6DBusToolsConfigVersion.cmake \ + /usr/lib64/cmake/Qt6DBusTools/Qt6DBusToolsConfigVersionImpl.cmake \ + /usr/lib64/cmake/Qt6DBusTools/Qt6DBusToolsDependencies.cmake \ + /usr/lib64/cmake/Qt6DBusTools/Qt6DBusToolsTargets-relwithdebinfo.cmake \ + /usr/lib64/cmake/Qt6DBusTools/Qt6DBusToolsTargets.cmake \ + /usr/lib64/cmake/Qt6DBusTools/Qt6DBusToolsVersionlessTargets.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6DmaBufServerBufferPluginAdditionalTargetInfo.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6DmaBufServerBufferPluginConfig.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6DmaBufServerBufferPluginTargets-relwithdebinfo.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6DmaBufServerBufferPluginTargets.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6DrmEglServerBufferPluginAdditionalTargetInfo.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6DrmEglServerBufferPluginConfig.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6DrmEglServerBufferPluginTargets-relwithdebinfo.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6DrmEglServerBufferPluginTargets.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6GuiAdditionalTargetInfo.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6GuiConfig.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6GuiConfigVersion.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6GuiConfigVersionImpl.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6GuiDependencies.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6GuiPlugins.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6GuiTargets-relwithdebinfo.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6GuiTargets.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6GuiVersionlessAliasTargets.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QComposePlatformInputContextPluginAdditionalTargetInfo.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QComposePlatformInputContextPluginConfig.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QComposePlatformInputContextPluginTargets-relwithdebinfo.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QComposePlatformInputContextPluginTargets.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QEglFSEmulatorIntegrationPluginAdditionalTargetInfo.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QEglFSEmulatorIntegrationPluginConfig.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QEglFSEmulatorIntegrationPluginTargets-relwithdebinfo.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QEglFSEmulatorIntegrationPluginTargets.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QEglFSIntegrationPluginAdditionalTargetInfo.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QEglFSIntegrationPluginConfig.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QEglFSIntegrationPluginTargets-relwithdebinfo.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QEglFSIntegrationPluginTargets.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QEglFSKmsEglDeviceIntegrationPluginAdditionalTargetInfo.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QEglFSKmsEglDeviceIntegrationPluginConfig.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QEglFSKmsEglDeviceIntegrationPluginTargets-relwithdebinfo.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QEglFSKmsEglDeviceIntegrationPluginTargets.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QEglFSKmsGbmIntegrationPluginAdditionalTargetInfo.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QEglFSKmsGbmIntegrationPluginConfig.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QEglFSKmsGbmIntegrationPluginTargets-relwithdebinfo.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QEglFSKmsGbmIntegrationPluginTargets.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QEglFSX11IntegrationPluginAdditionalTargetInfo.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QEglFSX11IntegrationPluginConfig.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QEglFSX11IntegrationPluginTargets-relwithdebinfo.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QEglFSX11IntegrationPluginTargets.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QEvdevKeyboardPluginAdditionalTargetInfo.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QEvdevKeyboardPluginConfig.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QEvdevKeyboardPluginTargets-relwithdebinfo.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QEvdevKeyboardPluginTargets.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QEvdevMousePluginAdditionalTargetInfo.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QEvdevMousePluginConfig.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QEvdevMousePluginTargets-relwithdebinfo.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QEvdevMousePluginTargets.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QEvdevTabletPluginAdditionalTargetInfo.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QEvdevTabletPluginConfig.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QEvdevTabletPluginTargets-relwithdebinfo.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QEvdevTabletPluginTargets.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QEvdevTouchScreenPluginAdditionalTargetInfo.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QEvdevTouchScreenPluginConfig.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QEvdevTouchScreenPluginTargets-relwithdebinfo.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QEvdevTouchScreenPluginTargets.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QGifPluginAdditionalTargetInfo.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QGifPluginConfig.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QGifPluginTargets-relwithdebinfo.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QGifPluginTargets.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QGtk3ThemePluginAdditionalTargetInfo.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QGtk3ThemePluginConfig.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QGtk3ThemePluginTargets-relwithdebinfo.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QGtk3ThemePluginTargets.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QICNSPluginAdditionalTargetInfo.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QICNSPluginConfig.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QICNSPluginTargets-relwithdebinfo.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QICNSPluginTargets.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QICOPluginAdditionalTargetInfo.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QICOPluginConfig.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QICOPluginTargets-relwithdebinfo.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QICOPluginTargets.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QIbusPlatformInputContextPluginAdditionalTargetInfo.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QIbusPlatformInputContextPluginConfig.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QIbusPlatformInputContextPluginTargets-relwithdebinfo.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QIbusPlatformInputContextPluginTargets.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QJp2PluginAdditionalTargetInfo.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QJp2PluginConfig.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QJp2PluginTargets-relwithdebinfo.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QJp2PluginTargets.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QJpegPluginAdditionalTargetInfo.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QJpegPluginConfig.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QJpegPluginTargets-relwithdebinfo.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QJpegPluginTargets.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QLibInputPluginAdditionalTargetInfo.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QLibInputPluginConfig.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QLibInputPluginTargets-relwithdebinfo.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QLibInputPluginTargets.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QLinuxFbIntegrationPluginAdditionalTargetInfo.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QLinuxFbIntegrationPluginConfig.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QLinuxFbIntegrationPluginTargets-relwithdebinfo.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QLinuxFbIntegrationPluginTargets.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QMinimalEglIntegrationPluginAdditionalTargetInfo.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QMinimalEglIntegrationPluginConfig.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QMinimalEglIntegrationPluginTargets-relwithdebinfo.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QMinimalEglIntegrationPluginTargets.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QMinimalIntegrationPluginAdditionalTargetInfo.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QMinimalIntegrationPluginConfig.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QMinimalIntegrationPluginTargets-relwithdebinfo.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QMinimalIntegrationPluginTargets.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QMngPluginAdditionalTargetInfo.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QMngPluginConfig.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QMngPluginTargets-relwithdebinfo.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QMngPluginTargets.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QOffscreenIntegrationPluginAdditionalTargetInfo.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QOffscreenIntegrationPluginConfig.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QOffscreenIntegrationPluginTargets-relwithdebinfo.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QOffscreenIntegrationPluginTargets.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QPdfPluginAdditionalTargetInfo.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QPdfPluginConfig.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QPdfPluginTargets-relwithdebinfo.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QPdfPluginTargets.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QSvgIconPluginAdditionalTargetInfo.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QSvgIconPluginConfig.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QSvgIconPluginTargets-relwithdebinfo.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QSvgIconPluginTargets.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QSvgPluginAdditionalTargetInfo.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QSvgPluginConfig.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QSvgPluginTargets-relwithdebinfo.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QSvgPluginTargets.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QTgaPluginAdditionalTargetInfo.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QTgaPluginConfig.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QTgaPluginTargets-relwithdebinfo.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QTgaPluginTargets.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QTiffPluginAdditionalTargetInfo.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QTiffPluginConfig.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QTiffPluginTargets-relwithdebinfo.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QTiffPluginTargets.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QTsLibPluginAdditionalTargetInfo.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QTsLibPluginConfig.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QTsLibPluginTargets-relwithdebinfo.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QTsLibPluginTargets.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QTuioTouchPluginAdditionalTargetInfo.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QTuioTouchPluginConfig.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QTuioTouchPluginTargets-relwithdebinfo.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QTuioTouchPluginTargets.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QVkKhrDisplayIntegrationPluginAdditionalTargetInfo.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QVkKhrDisplayIntegrationPluginConfig.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QVkKhrDisplayIntegrationPluginTargets-relwithdebinfo.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QVkKhrDisplayIntegrationPluginTargets.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QVncIntegrationPluginAdditionalTargetInfo.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QVncIntegrationPluginConfig.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QVncIntegrationPluginTargets-relwithdebinfo.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QVncIntegrationPluginTargets.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QWaylandBradientDecorationPluginAdditionalTargetInfo.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QWaylandBradientDecorationPluginConfig.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QWaylandBradientDecorationPluginTargets-relwithdebinfo.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QWaylandBradientDecorationPluginTargets.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QWaylandEglClientBufferPluginAdditionalTargetInfo.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QWaylandEglClientBufferPluginConfig.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QWaylandEglClientBufferPluginTargets-relwithdebinfo.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QWaylandEglClientBufferPluginTargets.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QWaylandFullScreenShellV1IntegrationPluginAdditionalTargetInfo.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QWaylandFullScreenShellV1IntegrationPluginConfig.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QWaylandFullScreenShellV1IntegrationPluginTargets-relwithdebinfo.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QWaylandFullScreenShellV1IntegrationPluginTargets.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QWaylandIntegrationPluginAdditionalTargetInfo.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QWaylandIntegrationPluginConfig.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QWaylandIntegrationPluginTargets-relwithdebinfo.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QWaylandIntegrationPluginTargets.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QWaylandIviShellIntegrationPluginAdditionalTargetInfo.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QWaylandIviShellIntegrationPluginConfig.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QWaylandIviShellIntegrationPluginTargets-relwithdebinfo.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QWaylandIviShellIntegrationPluginTargets.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QWaylandQtShellIntegrationPluginAdditionalTargetInfo.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QWaylandQtShellIntegrationPluginConfig.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QWaylandQtShellIntegrationPluginTargets-relwithdebinfo.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QWaylandQtShellIntegrationPluginTargets.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QWaylandWlShellIntegrationPluginAdditionalTargetInfo.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QWaylandWlShellIntegrationPluginConfig.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QWaylandWlShellIntegrationPluginTargets-relwithdebinfo.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QWaylandWlShellIntegrationPluginTargets.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QWaylandXdgShellIntegrationPluginAdditionalTargetInfo.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QWaylandXdgShellIntegrationPluginConfig.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QWaylandXdgShellIntegrationPluginTargets-relwithdebinfo.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QWaylandXdgShellIntegrationPluginTargets.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QWbmpPluginAdditionalTargetInfo.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QWbmpPluginConfig.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QWbmpPluginTargets-relwithdebinfo.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QWbmpPluginTargets.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QWebpPluginAdditionalTargetInfo.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QWebpPluginConfig.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QWebpPluginTargets-relwithdebinfo.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QWebpPluginTargets.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QXcbEglIntegrationPluginAdditionalTargetInfo.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QXcbEglIntegrationPluginConfig.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QXcbEglIntegrationPluginTargets-relwithdebinfo.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QXcbEglIntegrationPluginTargets.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QXcbGlxIntegrationPluginAdditionalTargetInfo.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QXcbGlxIntegrationPluginConfig.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QXcbGlxIntegrationPluginTargets-relwithdebinfo.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QXcbGlxIntegrationPluginTargets.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QXcbIntegrationPluginAdditionalTargetInfo.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QXcbIntegrationPluginConfig.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QXcbIntegrationPluginTargets-relwithdebinfo.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QXcbIntegrationPluginTargets.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QXdgDesktopPortalThemePluginAdditionalTargetInfo.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QXdgDesktopPortalThemePluginConfig.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QXdgDesktopPortalThemePluginTargets-relwithdebinfo.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6QXdgDesktopPortalThemePluginTargets.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6ShmServerBufferPluginAdditionalTargetInfo.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6ShmServerBufferPluginConfig.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6ShmServerBufferPluginTargets-relwithdebinfo.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6ShmServerBufferPluginTargets.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6VulkanServerBufferPluginAdditionalTargetInfo.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6VulkanServerBufferPluginConfig.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6VulkanServerBufferPluginTargets-relwithdebinfo.cmake \ + /usr/lib64/cmake/Qt6Gui/Qt6VulkanServerBufferPluginTargets.cmake \ + /usr/lib64/cmake/Qt6GuiTools/Qt6GuiToolsAdditionalTargetInfo.cmake \ + /usr/lib64/cmake/Qt6GuiTools/Qt6GuiToolsConfig.cmake \ + /usr/lib64/cmake/Qt6GuiTools/Qt6GuiToolsConfigVersion.cmake \ + /usr/lib64/cmake/Qt6GuiTools/Qt6GuiToolsConfigVersionImpl.cmake \ + /usr/lib64/cmake/Qt6GuiTools/Qt6GuiToolsDependencies.cmake \ + /usr/lib64/cmake/Qt6GuiTools/Qt6GuiToolsTargets-relwithdebinfo.cmake \ + /usr/lib64/cmake/Qt6GuiTools/Qt6GuiToolsTargets.cmake \ + /usr/lib64/cmake/Qt6GuiTools/Qt6GuiToolsVersionlessTargets.cmake \ + /usr/lib64/cmake/Qt6Multimedia/Qt6MultimediaAdditionalTargetInfo.cmake \ + /usr/lib64/cmake/Qt6Multimedia/Qt6MultimediaConfig.cmake \ + /usr/lib64/cmake/Qt6Multimedia/Qt6MultimediaConfigVersion.cmake \ + /usr/lib64/cmake/Qt6Multimedia/Qt6MultimediaConfigVersionImpl.cmake \ + /usr/lib64/cmake/Qt6Multimedia/Qt6MultimediaDependencies.cmake \ + /usr/lib64/cmake/Qt6Multimedia/Qt6MultimediaMacros.cmake \ + /usr/lib64/cmake/Qt6Multimedia/Qt6MultimediaPlugins.cmake \ + /usr/lib64/cmake/Qt6Multimedia/Qt6MultimediaTargets-relwithdebinfo.cmake \ + /usr/lib64/cmake/Qt6Multimedia/Qt6MultimediaTargets.cmake \ + /usr/lib64/cmake/Qt6Multimedia/Qt6MultimediaVersionlessAliasTargets.cmake \ + /usr/lib64/cmake/Qt6Multimedia/Qt6QFFmpegMediaPluginAdditionalTargetInfo.cmake \ + /usr/lib64/cmake/Qt6Multimedia/Qt6QFFmpegMediaPluginConfig.cmake \ + /usr/lib64/cmake/Qt6Multimedia/Qt6QFFmpegMediaPluginTargets-relwithdebinfo.cmake \ + /usr/lib64/cmake/Qt6Multimedia/Qt6QFFmpegMediaPluginTargets.cmake \ + /usr/lib64/cmake/Qt6Multimedia/Qt6QGstreamerMediaPluginAdditionalTargetInfo.cmake \ + /usr/lib64/cmake/Qt6Multimedia/Qt6QGstreamerMediaPluginConfig.cmake \ + /usr/lib64/cmake/Qt6Multimedia/Qt6QGstreamerMediaPluginTargets-relwithdebinfo.cmake \ + /usr/lib64/cmake/Qt6Multimedia/Qt6QGstreamerMediaPluginTargets.cmake \ + /usr/lib64/cmake/Qt6MultimediaWidgets/Qt6MultimediaWidgetsAdditionalTargetInfo.cmake \ + /usr/lib64/cmake/Qt6MultimediaWidgets/Qt6MultimediaWidgetsConfig.cmake \ + /usr/lib64/cmake/Qt6MultimediaWidgets/Qt6MultimediaWidgetsConfigVersion.cmake \ + /usr/lib64/cmake/Qt6MultimediaWidgets/Qt6MultimediaWidgetsConfigVersionImpl.cmake \ + /usr/lib64/cmake/Qt6MultimediaWidgets/Qt6MultimediaWidgetsDependencies.cmake \ + /usr/lib64/cmake/Qt6MultimediaWidgets/Qt6MultimediaWidgetsTargets-relwithdebinfo.cmake \ + /usr/lib64/cmake/Qt6MultimediaWidgets/Qt6MultimediaWidgetsTargets.cmake \ + /usr/lib64/cmake/Qt6MultimediaWidgets/Qt6MultimediaWidgetsVersionlessAliasTargets.cmake \ + /usr/lib64/cmake/Qt6Network/Qt6NetworkAdditionalTargetInfo.cmake \ + /usr/lib64/cmake/Qt6Network/Qt6NetworkConfig.cmake \ + /usr/lib64/cmake/Qt6Network/Qt6NetworkConfigVersion.cmake \ + /usr/lib64/cmake/Qt6Network/Qt6NetworkConfigVersionImpl.cmake \ + /usr/lib64/cmake/Qt6Network/Qt6NetworkDependencies.cmake \ + /usr/lib64/cmake/Qt6Network/Qt6NetworkPlugins.cmake \ + /usr/lib64/cmake/Qt6Network/Qt6NetworkTargets-relwithdebinfo.cmake \ + /usr/lib64/cmake/Qt6Network/Qt6NetworkTargets.cmake \ + /usr/lib64/cmake/Qt6Network/Qt6NetworkVersionlessAliasTargets.cmake \ + /usr/lib64/cmake/Qt6Network/Qt6QGlibNetworkInformationPluginAdditionalTargetInfo.cmake \ + /usr/lib64/cmake/Qt6Network/Qt6QGlibNetworkInformationPluginConfig.cmake \ + /usr/lib64/cmake/Qt6Network/Qt6QGlibNetworkInformationPluginTargets-relwithdebinfo.cmake \ + /usr/lib64/cmake/Qt6Network/Qt6QGlibNetworkInformationPluginTargets.cmake \ + /usr/lib64/cmake/Qt6Network/Qt6QNetworkManagerNetworkInformationPluginAdditionalTargetInfo.cmake \ + /usr/lib64/cmake/Qt6Network/Qt6QNetworkManagerNetworkInformationPluginConfig.cmake \ + /usr/lib64/cmake/Qt6Network/Qt6QNetworkManagerNetworkInformationPluginTargets-relwithdebinfo.cmake \ + /usr/lib64/cmake/Qt6Network/Qt6QNetworkManagerNetworkInformationPluginTargets.cmake \ + /usr/lib64/cmake/Qt6Network/Qt6QTlsBackendCertOnlyPluginAdditionalTargetInfo.cmake \ + /usr/lib64/cmake/Qt6Network/Qt6QTlsBackendCertOnlyPluginConfig.cmake \ + /usr/lib64/cmake/Qt6Network/Qt6QTlsBackendCertOnlyPluginTargets-relwithdebinfo.cmake \ + /usr/lib64/cmake/Qt6Network/Qt6QTlsBackendCertOnlyPluginTargets.cmake \ + /usr/lib64/cmake/Qt6Network/Qt6QTlsBackendOpenSSLPluginAdditionalTargetInfo.cmake \ + /usr/lib64/cmake/Qt6Network/Qt6QTlsBackendOpenSSLPluginConfig.cmake \ + /usr/lib64/cmake/Qt6Network/Qt6QTlsBackendOpenSSLPluginTargets-relwithdebinfo.cmake \ + /usr/lib64/cmake/Qt6Network/Qt6QTlsBackendOpenSSLPluginTargets.cmake \ + /usr/lib64/cmake/Qt6OpenGL/Qt6OpenGLAdditionalTargetInfo.cmake \ + /usr/lib64/cmake/Qt6OpenGL/Qt6OpenGLConfig.cmake \ + /usr/lib64/cmake/Qt6OpenGL/Qt6OpenGLConfigVersion.cmake \ + /usr/lib64/cmake/Qt6OpenGL/Qt6OpenGLConfigVersionImpl.cmake \ + /usr/lib64/cmake/Qt6OpenGL/Qt6OpenGLDependencies.cmake \ + /usr/lib64/cmake/Qt6OpenGL/Qt6OpenGLTargets-relwithdebinfo.cmake \ + /usr/lib64/cmake/Qt6OpenGL/Qt6OpenGLTargets.cmake \ + /usr/lib64/cmake/Qt6OpenGL/Qt6OpenGLVersionlessAliasTargets.cmake \ + /usr/lib64/cmake/Qt6OpenGLWidgets/Qt6OpenGLWidgetsAdditionalTargetInfo.cmake \ + /usr/lib64/cmake/Qt6OpenGLWidgets/Qt6OpenGLWidgetsConfig.cmake \ + /usr/lib64/cmake/Qt6OpenGLWidgets/Qt6OpenGLWidgetsConfigVersion.cmake \ + /usr/lib64/cmake/Qt6OpenGLWidgets/Qt6OpenGLWidgetsConfigVersionImpl.cmake \ + /usr/lib64/cmake/Qt6OpenGLWidgets/Qt6OpenGLWidgetsDependencies.cmake \ + /usr/lib64/cmake/Qt6OpenGLWidgets/Qt6OpenGLWidgetsTargets-relwithdebinfo.cmake \ + /usr/lib64/cmake/Qt6OpenGLWidgets/Qt6OpenGLWidgetsTargets.cmake \ + /usr/lib64/cmake/Qt6OpenGLWidgets/Qt6OpenGLWidgetsVersionlessAliasTargets.cmake \ + /usr/lib64/cmake/Qt6Pdf/Qt6PdfAdditionalTargetInfo.cmake \ + /usr/lib64/cmake/Qt6Pdf/Qt6PdfConfig.cmake \ + /usr/lib64/cmake/Qt6Pdf/Qt6PdfConfigVersion.cmake \ + /usr/lib64/cmake/Qt6Pdf/Qt6PdfConfigVersionImpl.cmake \ + /usr/lib64/cmake/Qt6Pdf/Qt6PdfDependencies.cmake \ + /usr/lib64/cmake/Qt6Pdf/Qt6PdfTargets-relwithdebinfo.cmake \ + /usr/lib64/cmake/Qt6Pdf/Qt6PdfTargets.cmake \ + /usr/lib64/cmake/Qt6Pdf/Qt6PdfVersionlessAliasTargets.cmake \ + /usr/lib64/cmake/Qt6PdfWidgets/Qt6PdfWidgetsAdditionalTargetInfo.cmake \ + /usr/lib64/cmake/Qt6PdfWidgets/Qt6PdfWidgetsConfig.cmake \ + /usr/lib64/cmake/Qt6PdfWidgets/Qt6PdfWidgetsConfigVersion.cmake \ + /usr/lib64/cmake/Qt6PdfWidgets/Qt6PdfWidgetsConfigVersionImpl.cmake \ + /usr/lib64/cmake/Qt6PdfWidgets/Qt6PdfWidgetsDependencies.cmake \ + /usr/lib64/cmake/Qt6PdfWidgets/Qt6PdfWidgetsTargets-relwithdebinfo.cmake \ + /usr/lib64/cmake/Qt6PdfWidgets/Qt6PdfWidgetsTargets.cmake \ + /usr/lib64/cmake/Qt6PdfWidgets/Qt6PdfWidgetsVersionlessAliasTargets.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6LabsPlatformpluginAdditionalTargetInfo.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6LabsPlatformpluginConfig.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6LabsPlatformpluginTargets-relwithdebinfo.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6LabsPlatformpluginTargets.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6LabsSynchronizerpluginAdditionalTargetInfo.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6LabsSynchronizerpluginConfig.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6LabsSynchronizerpluginTargets-relwithdebinfo.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6LabsSynchronizerpluginTargets.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6PdfQuickpluginAdditionalTargetInfo.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6PdfQuickpluginConfig.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6PdfQuickpluginTargets-relwithdebinfo.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6PdfQuickpluginTargets.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6QmlNetworkpluginAdditionalTargetInfo.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6QmlNetworkpluginConfig.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6QmlNetworkpluginTargets-relwithdebinfo.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6QmlNetworkpluginTargets.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6QuickControlsTestUtilsPrivatepluginAdditionalTargetInfo.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6QuickControlsTestUtilsPrivatepluginConfig.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6QuickControlsTestUtilsPrivatepluginTargets-relwithdebinfo.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6QuickControlsTestUtilsPrivatepluginTargets.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6QuickTestpluginAdditionalTargetInfo.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6QuickTestpluginConfig.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6QuickTestpluginTargets-relwithdebinfo.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6QuickTestpluginTargets.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6WaylandCompositorIviapplicationpluginAdditionalTargetInfo.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6WaylandCompositorIviapplicationpluginConfig.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6WaylandCompositorIviapplicationpluginTargets-relwithdebinfo.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6WaylandCompositorIviapplicationpluginTargets.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6WaylandCompositorPresentationTimepluginAdditionalTargetInfo.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6WaylandCompositorPresentationTimepluginConfig.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6WaylandCompositorPresentationTimepluginTargets-relwithdebinfo.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6WaylandCompositorPresentationTimepluginTargets.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6WaylandCompositorQtShellAdditionalTargetInfo.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6WaylandCompositorQtShellConfig.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6WaylandCompositorQtShellTargets-relwithdebinfo.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6WaylandCompositorQtShellTargets.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6WaylandCompositorWLShellpluginAdditionalTargetInfo.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6WaylandCompositorWLShellpluginConfig.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6WaylandCompositorWLShellpluginTargets-relwithdebinfo.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6WaylandCompositorWLShellpluginTargets.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6WaylandCompositorXdgShellpluginAdditionalTargetInfo.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6WaylandCompositorXdgShellpluginConfig.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6WaylandCompositorXdgShellpluginTargets-relwithdebinfo.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6WaylandCompositorXdgShellpluginTargets.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6WaylandTextureSharingAdditionalTargetInfo.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6WaylandTextureSharingConfig.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6WaylandTextureSharingExtensionAdditionalTargetInfo.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6WaylandTextureSharingExtensionConfig.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6WaylandTextureSharingExtensionTargets-relwithdebinfo.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6WaylandTextureSharingExtensionTargets.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6WaylandTextureSharingTargets-relwithdebinfo.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6WaylandTextureSharingTargets.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6effectspluginAdditionalTargetInfo.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6effectspluginConfig.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6effectspluginTargets-relwithdebinfo.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6effectspluginTargets.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6labsanimationpluginAdditionalTargetInfo.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6labsanimationpluginConfig.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6labsanimationpluginTargets-relwithdebinfo.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6labsanimationpluginTargets.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6labsmodelspluginAdditionalTargetInfo.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6labsmodelspluginConfig.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6labsmodelspluginTargets-relwithdebinfo.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6labsmodelspluginTargets.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6modelspluginAdditionalTargetInfo.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6modelspluginConfig.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6modelspluginTargets-relwithdebinfo.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6modelspluginTargets.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6particlespluginAdditionalTargetInfo.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6particlespluginConfig.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6particlespluginTargets-relwithdebinfo.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6particlespluginTargets.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qmlfolderlistmodelpluginAdditionalTargetInfo.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qmlfolderlistmodelpluginConfig.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qmlfolderlistmodelpluginTargets-relwithdebinfo.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qmlfolderlistmodelpluginTargets.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qmllocalstoragepluginAdditionalTargetInfo.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qmllocalstoragepluginConfig.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qmllocalstoragepluginTargets-relwithdebinfo.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qmllocalstoragepluginTargets.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qmlpluginAdditionalTargetInfo.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qmlpluginConfig.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qmlpluginTargets-relwithdebinfo.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qmlpluginTargets.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qmlsettingspluginAdditionalTargetInfo.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qmlsettingspluginConfig.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qmlsettingspluginTargets-relwithdebinfo.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qmlsettingspluginTargets.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qmlshapespluginAdditionalTargetInfo.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qmlshapespluginConfig.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qmlshapespluginTargets-relwithdebinfo.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qmlshapespluginTargets.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qmlwavefrontmeshpluginAdditionalTargetInfo.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qmlwavefrontmeshpluginConfig.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qmlwavefrontmeshpluginTargets-relwithdebinfo.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qmlwavefrontmeshpluginTargets.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qmlxmllistmodelpluginAdditionalTargetInfo.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qmlxmllistmodelpluginConfig.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qmlxmllistmodelpluginTargets-relwithdebinfo.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qmlxmllistmodelpluginTargets.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qquicklayoutspluginAdditionalTargetInfo.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qquicklayoutspluginConfig.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qquicklayoutspluginTargets-relwithdebinfo.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qquicklayoutspluginTargets.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qquickvectorimagehelperspluginAdditionalTargetInfo.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qquickvectorimagehelperspluginConfig.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qquickvectorimagehelperspluginTargets-relwithdebinfo.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qquickvectorimagehelperspluginTargets.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qquickvectorimagepluginAdditionalTargetInfo.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qquickvectorimagepluginConfig.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qquickvectorimagepluginTargets-relwithdebinfo.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qquickvectorimagepluginTargets.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtqmlcorepluginAdditionalTargetInfo.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtqmlcorepluginConfig.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtqmlcorepluginTargets-relwithdebinfo.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtqmlcorepluginTargets.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquick2pluginAdditionalTargetInfo.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquick2pluginConfig.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquick2pluginTargets-relwithdebinfo.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquick2pluginTargets.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2basicstyleimplpluginAdditionalTargetInfo.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2basicstyleimplpluginConfig.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2basicstyleimplpluginTargets-relwithdebinfo.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2basicstyleimplpluginTargets.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2basicstylepluginAdditionalTargetInfo.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2basicstylepluginConfig.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2basicstylepluginTargets-relwithdebinfo.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2basicstylepluginTargets.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2fluentwinui3styleimplpluginAdditionalTargetInfo.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2fluentwinui3styleimplpluginConfig.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2fluentwinui3styleimplpluginTargets-relwithdebinfo.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2fluentwinui3styleimplpluginTargets.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2fluentwinui3stylepluginAdditionalTargetInfo.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2fluentwinui3stylepluginConfig.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2fluentwinui3stylepluginTargets-relwithdebinfo.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2fluentwinui3stylepluginTargets.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2fusionstyleimplpluginAdditionalTargetInfo.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2fusionstyleimplpluginConfig.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2fusionstyleimplpluginTargets-relwithdebinfo.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2fusionstyleimplpluginTargets.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2fusionstylepluginAdditionalTargetInfo.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2fusionstylepluginConfig.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2fusionstylepluginTargets-relwithdebinfo.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2fusionstylepluginTargets.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2imaginestyleimplpluginAdditionalTargetInfo.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2imaginestyleimplpluginConfig.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2imaginestyleimplpluginTargets-relwithdebinfo.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2imaginestyleimplpluginTargets.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2imaginestylepluginAdditionalTargetInfo.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2imaginestylepluginConfig.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2imaginestylepluginTargets-relwithdebinfo.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2imaginestylepluginTargets.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2implpluginAdditionalTargetInfo.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2implpluginConfig.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2implpluginTargets-relwithdebinfo.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2implpluginTargets.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2materialstyleimplpluginAdditionalTargetInfo.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2materialstyleimplpluginConfig.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2materialstyleimplpluginTargets-relwithdebinfo.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2materialstyleimplpluginTargets.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2materialstylepluginAdditionalTargetInfo.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2materialstylepluginConfig.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2materialstylepluginTargets-relwithdebinfo.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2materialstylepluginTargets.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2pluginAdditionalTargetInfo.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2pluginConfig.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2pluginTargets-relwithdebinfo.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2pluginTargets.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2universalstyleimplpluginAdditionalTargetInfo.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2universalstyleimplpluginConfig.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2universalstyleimplpluginTargets-relwithdebinfo.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2universalstyleimplpluginTargets.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2universalstylepluginAdditionalTargetInfo.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2universalstylepluginConfig.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2universalstylepluginTargets-relwithdebinfo.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickcontrols2universalstylepluginTargets.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickdialogs2quickimplpluginAdditionalTargetInfo.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickdialogs2quickimplpluginConfig.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickdialogs2quickimplpluginTargets-relwithdebinfo.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickdialogs2quickimplpluginTargets.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickdialogspluginAdditionalTargetInfo.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickdialogspluginConfig.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickdialogspluginTargets-relwithdebinfo.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickdialogspluginTargets.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickshapesdesignhelperspluginAdditionalTargetInfo.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickshapesdesignhelperspluginConfig.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickshapesdesignhelperspluginTargets-relwithdebinfo.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquickshapesdesignhelperspluginTargets.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquicktemplates2pluginAdditionalTargetInfo.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquicktemplates2pluginConfig.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquicktemplates2pluginTargets-relwithdebinfo.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qtquicktemplates2pluginTargets.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6quick3dspatialaudioAdditionalTargetInfo.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6quick3dspatialaudioConfig.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6quick3dspatialaudioTargets-relwithdebinfo.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6quick3dspatialaudioTargets.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6quickmultimediaAdditionalTargetInfo.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6quickmultimediaConfig.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6quickmultimediaTargets-relwithdebinfo.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6quickmultimediaTargets.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6quicktoolingAdditionalTargetInfo.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6quicktoolingConfig.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6quicktoolingTargets-relwithdebinfo.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6quicktoolingTargets.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6quickwindowAdditionalTargetInfo.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6quickwindowConfig.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6quickwindowTargets-relwithdebinfo.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6quickwindowTargets.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qwaylandcompositorpluginAdditionalTargetInfo.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qwaylandcompositorpluginConfig.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qwaylandcompositorpluginTargets-relwithdebinfo.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6qwaylandcompositorpluginTargets.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6sharedimagepluginAdditionalTargetInfo.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6sharedimagepluginConfig.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6sharedimagepluginTargets-relwithdebinfo.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6sharedimagepluginTargets.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6workerscriptpluginAdditionalTargetInfo.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6workerscriptpluginConfig.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6workerscriptpluginTargets-relwithdebinfo.cmake \ + /usr/lib64/cmake/Qt6Qml/QmlPlugins/Qt6workerscriptpluginTargets.cmake \ + /usr/lib64/cmake/Qt6Qml/Qt6QDebugMessageServiceFactoryPluginAdditionalTargetInfo.cmake \ + /usr/lib64/cmake/Qt6Qml/Qt6QDebugMessageServiceFactoryPluginConfig.cmake \ + /usr/lib64/cmake/Qt6Qml/Qt6QDebugMessageServiceFactoryPluginTargets-relwithdebinfo.cmake \ + /usr/lib64/cmake/Qt6Qml/Qt6QDebugMessageServiceFactoryPluginTargets.cmake \ + /usr/lib64/cmake/Qt6Qml/Qt6QLocalClientConnectionFactoryPluginAdditionalTargetInfo.cmake \ + /usr/lib64/cmake/Qt6Qml/Qt6QLocalClientConnectionFactoryPluginConfig.cmake \ + /usr/lib64/cmake/Qt6Qml/Qt6QLocalClientConnectionFactoryPluginTargets-relwithdebinfo.cmake \ + /usr/lib64/cmake/Qt6Qml/Qt6QLocalClientConnectionFactoryPluginTargets.cmake \ + /usr/lib64/cmake/Qt6Qml/Qt6QQmlDebugServerFactoryPluginAdditionalTargetInfo.cmake \ + /usr/lib64/cmake/Qt6Qml/Qt6QQmlDebugServerFactoryPluginConfig.cmake \ + /usr/lib64/cmake/Qt6Qml/Qt6QQmlDebugServerFactoryPluginTargets-relwithdebinfo.cmake \ + /usr/lib64/cmake/Qt6Qml/Qt6QQmlDebugServerFactoryPluginTargets.cmake \ + /usr/lib64/cmake/Qt6Qml/Qt6QQmlDebuggerServiceFactoryPluginAdditionalTargetInfo.cmake \ + /usr/lib64/cmake/Qt6Qml/Qt6QQmlDebuggerServiceFactoryPluginConfig.cmake \ + /usr/lib64/cmake/Qt6Qml/Qt6QQmlDebuggerServiceFactoryPluginTargets-relwithdebinfo.cmake \ + /usr/lib64/cmake/Qt6Qml/Qt6QQmlDebuggerServiceFactoryPluginTargets.cmake \ + /usr/lib64/cmake/Qt6Qml/Qt6QQmlInspectorServiceFactoryPluginAdditionalTargetInfo.cmake \ + /usr/lib64/cmake/Qt6Qml/Qt6QQmlInspectorServiceFactoryPluginConfig.cmake \ + /usr/lib64/cmake/Qt6Qml/Qt6QQmlInspectorServiceFactoryPluginTargets-relwithdebinfo.cmake \ + /usr/lib64/cmake/Qt6Qml/Qt6QQmlInspectorServiceFactoryPluginTargets.cmake \ + /usr/lib64/cmake/Qt6Qml/Qt6QQmlNativeDebugConnectorFactoryPluginAdditionalTargetInfo.cmake \ + /usr/lib64/cmake/Qt6Qml/Qt6QQmlNativeDebugConnectorFactoryPluginConfig.cmake \ + /usr/lib64/cmake/Qt6Qml/Qt6QQmlNativeDebugConnectorFactoryPluginTargets-relwithdebinfo.cmake \ + /usr/lib64/cmake/Qt6Qml/Qt6QQmlNativeDebugConnectorFactoryPluginTargets.cmake \ + /usr/lib64/cmake/Qt6Qml/Qt6QQmlNativeDebugServiceFactoryPluginAdditionalTargetInfo.cmake \ + /usr/lib64/cmake/Qt6Qml/Qt6QQmlNativeDebugServiceFactoryPluginConfig.cmake \ + /usr/lib64/cmake/Qt6Qml/Qt6QQmlNativeDebugServiceFactoryPluginTargets-relwithdebinfo.cmake \ + /usr/lib64/cmake/Qt6Qml/Qt6QQmlNativeDebugServiceFactoryPluginTargets.cmake \ + /usr/lib64/cmake/Qt6Qml/Qt6QQmlPreviewServiceFactoryPluginAdditionalTargetInfo.cmake \ + /usr/lib64/cmake/Qt6Qml/Qt6QQmlPreviewServiceFactoryPluginConfig.cmake \ + /usr/lib64/cmake/Qt6Qml/Qt6QQmlPreviewServiceFactoryPluginTargets-relwithdebinfo.cmake \ + /usr/lib64/cmake/Qt6Qml/Qt6QQmlPreviewServiceFactoryPluginTargets.cmake \ + /usr/lib64/cmake/Qt6Qml/Qt6QQmlProfilerServiceFactoryPluginAdditionalTargetInfo.cmake \ + /usr/lib64/cmake/Qt6Qml/Qt6QQmlProfilerServiceFactoryPluginConfig.cmake \ + /usr/lib64/cmake/Qt6Qml/Qt6QQmlProfilerServiceFactoryPluginTargets-relwithdebinfo.cmake \ + /usr/lib64/cmake/Qt6Qml/Qt6QQmlProfilerServiceFactoryPluginTargets.cmake \ + /usr/lib64/cmake/Qt6Qml/Qt6QQuickProfilerAdapterFactoryPluginAdditionalTargetInfo.cmake \ + /usr/lib64/cmake/Qt6Qml/Qt6QQuickProfilerAdapterFactoryPluginConfig.cmake \ + /usr/lib64/cmake/Qt6Qml/Qt6QQuickProfilerAdapterFactoryPluginTargets-relwithdebinfo.cmake \ + /usr/lib64/cmake/Qt6Qml/Qt6QQuickProfilerAdapterFactoryPluginTargets.cmake \ + /usr/lib64/cmake/Qt6Qml/Qt6QTcpServerConnectionFactoryPluginAdditionalTargetInfo.cmake \ + /usr/lib64/cmake/Qt6Qml/Qt6QTcpServerConnectionFactoryPluginConfig.cmake \ + /usr/lib64/cmake/Qt6Qml/Qt6QTcpServerConnectionFactoryPluginTargets-relwithdebinfo.cmake \ + /usr/lib64/cmake/Qt6Qml/Qt6QTcpServerConnectionFactoryPluginTargets.cmake \ + /usr/lib64/cmake/Qt6Qml/Qt6QmlAdditionalTargetInfo.cmake \ + /usr/lib64/cmake/Qt6Qml/Qt6QmlConfig.cmake \ + /usr/lib64/cmake/Qt6Qml/Qt6QmlConfigExtras.cmake \ + /usr/lib64/cmake/Qt6Qml/Qt6QmlConfigVersion.cmake \ + /usr/lib64/cmake/Qt6Qml/Qt6QmlConfigVersionImpl.cmake \ + /usr/lib64/cmake/Qt6Qml/Qt6QmlDependencies.cmake \ + /usr/lib64/cmake/Qt6Qml/Qt6QmlFindQmlscInternal.cmake \ + /usr/lib64/cmake/Qt6Qml/Qt6QmlMacros.cmake \ + /usr/lib64/cmake/Qt6Qml/Qt6QmlPlugins.cmake \ + /usr/lib64/cmake/Qt6Qml/Qt6QmlProperties.cmake \ + /usr/lib64/cmake/Qt6Qml/Qt6QmlPublicCMakeHelpers.cmake \ + /usr/lib64/cmake/Qt6Qml/Qt6QmlTargets-relwithdebinfo.cmake \ + /usr/lib64/cmake/Qt6Qml/Qt6QmlTargets.cmake \ + /usr/lib64/cmake/Qt6Qml/Qt6QmlVersionlessAliasTargets.cmake \ + /usr/lib64/cmake/Qt6QmlIntegration/Qt6QmlIntegrationAdditionalTargetInfo.cmake \ + /usr/lib64/cmake/Qt6QmlIntegration/Qt6QmlIntegrationConfig.cmake \ + /usr/lib64/cmake/Qt6QmlIntegration/Qt6QmlIntegrationConfigVersion.cmake \ + /usr/lib64/cmake/Qt6QmlIntegration/Qt6QmlIntegrationConfigVersionImpl.cmake \ + /usr/lib64/cmake/Qt6QmlIntegration/Qt6QmlIntegrationTargets.cmake \ + /usr/lib64/cmake/Qt6QmlIntegration/Qt6QmlIntegrationVersionlessAliasTargets.cmake \ + /usr/lib64/cmake/Qt6QmlMeta/Qt6QmlMetaAdditionalTargetInfo.cmake \ + /usr/lib64/cmake/Qt6QmlMeta/Qt6QmlMetaConfig.cmake \ + /usr/lib64/cmake/Qt6QmlMeta/Qt6QmlMetaConfigVersion.cmake \ + /usr/lib64/cmake/Qt6QmlMeta/Qt6QmlMetaConfigVersionImpl.cmake \ + /usr/lib64/cmake/Qt6QmlMeta/Qt6QmlMetaDependencies.cmake \ + /usr/lib64/cmake/Qt6QmlMeta/Qt6QmlMetaTargets-relwithdebinfo.cmake \ + /usr/lib64/cmake/Qt6QmlMeta/Qt6QmlMetaTargets.cmake \ + /usr/lib64/cmake/Qt6QmlMeta/Qt6QmlMetaVersionlessAliasTargets.cmake \ + /usr/lib64/cmake/Qt6QmlModels/Qt6QmlModelsAdditionalTargetInfo.cmake \ + /usr/lib64/cmake/Qt6QmlModels/Qt6QmlModelsConfig.cmake \ + /usr/lib64/cmake/Qt6QmlModels/Qt6QmlModelsConfigVersion.cmake \ + /usr/lib64/cmake/Qt6QmlModels/Qt6QmlModelsConfigVersionImpl.cmake \ + /usr/lib64/cmake/Qt6QmlModels/Qt6QmlModelsDependencies.cmake \ + /usr/lib64/cmake/Qt6QmlModels/Qt6QmlModelsTargets-relwithdebinfo.cmake \ + /usr/lib64/cmake/Qt6QmlModels/Qt6QmlModelsTargets.cmake \ + /usr/lib64/cmake/Qt6QmlModels/Qt6QmlModelsVersionlessAliasTargets.cmake \ + /usr/lib64/cmake/Qt6QmlTools/Qt6QmlToolsAdditionalTargetInfo.cmake \ + /usr/lib64/cmake/Qt6QmlTools/Qt6QmlToolsConfig.cmake \ + /usr/lib64/cmake/Qt6QmlTools/Qt6QmlToolsConfigVersion.cmake \ + /usr/lib64/cmake/Qt6QmlTools/Qt6QmlToolsConfigVersionImpl.cmake \ + /usr/lib64/cmake/Qt6QmlTools/Qt6QmlToolsDependencies.cmake \ + /usr/lib64/cmake/Qt6QmlTools/Qt6QmlToolsTargets-relwithdebinfo.cmake \ + /usr/lib64/cmake/Qt6QmlTools/Qt6QmlToolsTargets.cmake \ + /usr/lib64/cmake/Qt6QmlTools/Qt6QmlToolsVersionlessTargets.cmake \ + /usr/lib64/cmake/Qt6QmlWorkerScript/Qt6QmlWorkerScriptAdditionalTargetInfo.cmake \ + /usr/lib64/cmake/Qt6QmlWorkerScript/Qt6QmlWorkerScriptConfig.cmake \ + /usr/lib64/cmake/Qt6QmlWorkerScript/Qt6QmlWorkerScriptConfigVersion.cmake \ + /usr/lib64/cmake/Qt6QmlWorkerScript/Qt6QmlWorkerScriptConfigVersionImpl.cmake \ + /usr/lib64/cmake/Qt6QmlWorkerScript/Qt6QmlWorkerScriptDependencies.cmake \ + /usr/lib64/cmake/Qt6QmlWorkerScript/Qt6QmlWorkerScriptTargets-relwithdebinfo.cmake \ + /usr/lib64/cmake/Qt6QmlWorkerScript/Qt6QmlWorkerScriptTargets.cmake \ + /usr/lib64/cmake/Qt6QmlWorkerScript/Qt6QmlWorkerScriptVersionlessAliasTargets.cmake \ + /usr/lib64/cmake/Qt6Quick/Qt6QuickAdditionalTargetInfo.cmake \ + /usr/lib64/cmake/Qt6Quick/Qt6QuickConfig.cmake \ + /usr/lib64/cmake/Qt6Quick/Qt6QuickConfigVersion.cmake \ + /usr/lib64/cmake/Qt6Quick/Qt6QuickConfigVersionImpl.cmake \ + /usr/lib64/cmake/Qt6Quick/Qt6QuickDependencies.cmake \ + /usr/lib64/cmake/Qt6Quick/Qt6QuickPlugins.cmake \ + /usr/lib64/cmake/Qt6Quick/Qt6QuickTargets-relwithdebinfo.cmake \ + /usr/lib64/cmake/Qt6Quick/Qt6QuickTargets.cmake \ + /usr/lib64/cmake/Qt6Quick/Qt6QuickVersionlessAliasTargets.cmake \ + /usr/lib64/cmake/Qt6QuickTools/Qt6QuickToolsAdditionalTargetInfo.cmake \ + /usr/lib64/cmake/Qt6QuickTools/Qt6QuickToolsConfig.cmake \ + /usr/lib64/cmake/Qt6QuickTools/Qt6QuickToolsConfigVersion.cmake \ + /usr/lib64/cmake/Qt6QuickTools/Qt6QuickToolsConfigVersionImpl.cmake \ + /usr/lib64/cmake/Qt6QuickTools/Qt6QuickToolsDependencies.cmake \ + /usr/lib64/cmake/Qt6QuickTools/Qt6QuickToolsTargets-relwithdebinfo.cmake \ + /usr/lib64/cmake/Qt6QuickTools/Qt6QuickToolsTargets.cmake \ + /usr/lib64/cmake/Qt6QuickTools/Qt6QuickToolsVersionlessTargets.cmake \ + /usr/lib64/cmake/Qt6Sql/Qt6QIBaseDriverPluginAdditionalTargetInfo.cmake \ + /usr/lib64/cmake/Qt6Sql/Qt6QIBaseDriverPluginConfig.cmake \ + /usr/lib64/cmake/Qt6Sql/Qt6QIBaseDriverPluginTargets-relwithdebinfo.cmake \ + /usr/lib64/cmake/Qt6Sql/Qt6QIBaseDriverPluginTargets.cmake \ + /usr/lib64/cmake/Qt6Sql/Qt6QMYSQLDriverPluginAdditionalTargetInfo.cmake \ + /usr/lib64/cmake/Qt6Sql/Qt6QMYSQLDriverPluginConfig.cmake \ + /usr/lib64/cmake/Qt6Sql/Qt6QMYSQLDriverPluginTargets-relwithdebinfo.cmake \ + /usr/lib64/cmake/Qt6Sql/Qt6QMYSQLDriverPluginTargets.cmake \ + /usr/lib64/cmake/Qt6Sql/Qt6QODBCDriverPluginAdditionalTargetInfo.cmake \ + /usr/lib64/cmake/Qt6Sql/Qt6QODBCDriverPluginConfig.cmake \ + /usr/lib64/cmake/Qt6Sql/Qt6QODBCDriverPluginTargets-relwithdebinfo.cmake \ + /usr/lib64/cmake/Qt6Sql/Qt6QODBCDriverPluginTargets.cmake \ + /usr/lib64/cmake/Qt6Sql/Qt6QPSQLDriverPluginAdditionalTargetInfo.cmake \ + /usr/lib64/cmake/Qt6Sql/Qt6QPSQLDriverPluginConfig.cmake \ + /usr/lib64/cmake/Qt6Sql/Qt6QPSQLDriverPluginTargets-relwithdebinfo.cmake \ + /usr/lib64/cmake/Qt6Sql/Qt6QPSQLDriverPluginTargets.cmake \ + /usr/lib64/cmake/Qt6Sql/Qt6QSQLiteDriverPluginAdditionalTargetInfo.cmake \ + /usr/lib64/cmake/Qt6Sql/Qt6QSQLiteDriverPluginConfig.cmake \ + /usr/lib64/cmake/Qt6Sql/Qt6QSQLiteDriverPluginTargets-relwithdebinfo.cmake \ + /usr/lib64/cmake/Qt6Sql/Qt6QSQLiteDriverPluginTargets.cmake \ + /usr/lib64/cmake/Qt6Sql/Qt6SqlAdditionalTargetInfo.cmake \ + /usr/lib64/cmake/Qt6Sql/Qt6SqlConfig.cmake \ + /usr/lib64/cmake/Qt6Sql/Qt6SqlConfigVersion.cmake \ + /usr/lib64/cmake/Qt6Sql/Qt6SqlConfigVersionImpl.cmake \ + /usr/lib64/cmake/Qt6Sql/Qt6SqlDependencies.cmake \ + /usr/lib64/cmake/Qt6Sql/Qt6SqlPlugins.cmake \ + /usr/lib64/cmake/Qt6Sql/Qt6SqlTargets-relwithdebinfo.cmake \ + /usr/lib64/cmake/Qt6Sql/Qt6SqlTargets.cmake \ + /usr/lib64/cmake/Qt6Sql/Qt6SqlVersionlessAliasTargets.cmake \ + /usr/lib64/cmake/Qt6Svg/Qt6SvgAdditionalTargetInfo.cmake \ + /usr/lib64/cmake/Qt6Svg/Qt6SvgConfig.cmake \ + /usr/lib64/cmake/Qt6Svg/Qt6SvgConfigVersion.cmake \ + /usr/lib64/cmake/Qt6Svg/Qt6SvgConfigVersionImpl.cmake \ + /usr/lib64/cmake/Qt6Svg/Qt6SvgDependencies.cmake \ + /usr/lib64/cmake/Qt6Svg/Qt6SvgTargets-relwithdebinfo.cmake \ + /usr/lib64/cmake/Qt6Svg/Qt6SvgTargets.cmake \ + /usr/lib64/cmake/Qt6Svg/Qt6SvgVersionlessAliasTargets.cmake \ + /usr/lib64/cmake/Qt6SvgWidgets/Qt6SvgWidgetsAdditionalTargetInfo.cmake \ + /usr/lib64/cmake/Qt6SvgWidgets/Qt6SvgWidgetsConfig.cmake \ + /usr/lib64/cmake/Qt6SvgWidgets/Qt6SvgWidgetsConfigVersion.cmake \ + /usr/lib64/cmake/Qt6SvgWidgets/Qt6SvgWidgetsConfigVersionImpl.cmake \ + /usr/lib64/cmake/Qt6SvgWidgets/Qt6SvgWidgetsDependencies.cmake \ + /usr/lib64/cmake/Qt6SvgWidgets/Qt6SvgWidgetsTargets-relwithdebinfo.cmake \ + /usr/lib64/cmake/Qt6SvgWidgets/Qt6SvgWidgetsTargets.cmake \ + /usr/lib64/cmake/Qt6SvgWidgets/Qt6SvgWidgetsVersionlessAliasTargets.cmake \ + /usr/lib64/cmake/Qt6Widgets/Qt6WidgetsAdditionalTargetInfo.cmake \ + /usr/lib64/cmake/Qt6Widgets/Qt6WidgetsConfig.cmake \ + /usr/lib64/cmake/Qt6Widgets/Qt6WidgetsConfigVersion.cmake \ + /usr/lib64/cmake/Qt6Widgets/Qt6WidgetsConfigVersionImpl.cmake \ + /usr/lib64/cmake/Qt6Widgets/Qt6WidgetsDependencies.cmake \ + /usr/lib64/cmake/Qt6Widgets/Qt6WidgetsMacros.cmake \ + /usr/lib64/cmake/Qt6Widgets/Qt6WidgetsPlugins.cmake \ + /usr/lib64/cmake/Qt6Widgets/Qt6WidgetsTargets-relwithdebinfo.cmake \ + /usr/lib64/cmake/Qt6Widgets/Qt6WidgetsTargets.cmake \ + /usr/lib64/cmake/Qt6Widgets/Qt6WidgetsVersionlessAliasTargets.cmake \ + /usr/lib64/cmake/Qt6WidgetsTools/Qt6WidgetsToolsAdditionalTargetInfo.cmake \ + /usr/lib64/cmake/Qt6WidgetsTools/Qt6WidgetsToolsConfig.cmake \ + /usr/lib64/cmake/Qt6WidgetsTools/Qt6WidgetsToolsConfigVersion.cmake \ + /usr/lib64/cmake/Qt6WidgetsTools/Qt6WidgetsToolsConfigVersionImpl.cmake \ + /usr/lib64/cmake/Qt6WidgetsTools/Qt6WidgetsToolsDependencies.cmake \ + /usr/lib64/cmake/Qt6WidgetsTools/Qt6WidgetsToolsTargets-relwithdebinfo.cmake \ + /usr/lib64/cmake/Qt6WidgetsTools/Qt6WidgetsToolsTargets.cmake \ + /usr/lib64/cmake/Qt6WidgetsTools/Qt6WidgetsToolsVersionlessTargets.cmake \ + /usr/share/cmake/Modules/CMakeCXXInformation.cmake \ + /usr/share/cmake/Modules/CMakeCheckCompilerFlagCommonPatterns.cmake \ + /usr/share/cmake/Modules/CMakeCommonLanguageInclude.cmake \ + /usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake \ + /usr/share/cmake/Modules/CMakeGenericSystem.cmake \ + /usr/share/cmake/Modules/CMakeInitializeConfigs.cmake \ + /usr/share/cmake/Modules/CMakeLanguageInformation.cmake \ + /usr/share/cmake/Modules/CMakeSystemSpecificInformation.cmake \ + /usr/share/cmake/Modules/CMakeSystemSpecificInitialize.cmake \ + /usr/share/cmake/Modules/CPack.cmake \ + /usr/share/cmake/Modules/CPackComponent.cmake \ + /usr/share/cmake/Modules/CheckCXXCompilerFlag.cmake \ + /usr/share/cmake/Modules/CheckCXXSourceCompiles.cmake \ + /usr/share/cmake/Modules/CheckIncludeFileCXX.cmake \ + /usr/share/cmake/Modules/CheckLibraryExists.cmake \ + /usr/share/cmake/Modules/Compiler/CMakeCommonCompilerMacros.cmake \ + /usr/share/cmake/Modules/Compiler/GNU-CXX.cmake \ + /usr/share/cmake/Modules/Compiler/GNU.cmake \ + /usr/share/cmake/Modules/FeatureSummary.cmake \ + /usr/share/cmake/Modules/FindFreetype.cmake \ + /usr/share/cmake/Modules/FindJPEG.cmake \ + /usr/share/cmake/Modules/FindOpenGL.cmake \ + /usr/share/cmake/Modules/FindPNG.cmake \ + /usr/share/cmake/Modules/FindPackageHandleStandardArgs.cmake \ + /usr/share/cmake/Modules/FindPackageMessage.cmake \ + /usr/share/cmake/Modules/FindPkgConfig.cmake \ + /usr/share/cmake/Modules/FindTIFF.cmake \ + /usr/share/cmake/Modules/FindThreads.cmake \ + /usr/share/cmake/Modules/FindVulkan.cmake \ + /usr/share/cmake/Modules/FindZLIB.cmake \ + /usr/share/cmake/Modules/GNUInstallDirs.cmake \ + /usr/share/cmake/Modules/Internal/CMakeCXXLinkerInformation.cmake \ + /usr/share/cmake/Modules/Internal/CMakeCommonLinkerInformation.cmake \ + /usr/share/cmake/Modules/Internal/CheckCompilerFlag.cmake \ + /usr/share/cmake/Modules/Internal/CheckFlagCommonConfig.cmake \ + /usr/share/cmake/Modules/Internal/CheckSourceCompiles.cmake \ + /usr/share/cmake/Modules/Linker/GNU-CXX.cmake \ + /usr/share/cmake/Modules/Linker/GNU.cmake \ + /usr/share/cmake/Modules/MacroAddFileDependencies.cmake \ + /usr/share/cmake/Modules/Platform/Linker/GNU.cmake \ + /usr/share/cmake/Modules/Platform/Linker/Linux-GNU-CXX.cmake \ + /usr/share/cmake/Modules/Platform/Linker/Linux-GNU.cmake \ + /usr/share/cmake/Modules/Platform/Linux-GNU-CXX.cmake \ + /usr/share/cmake/Modules/Platform/Linux-GNU.cmake \ + /usr/share/cmake/Modules/Platform/Linux-Initialize.cmake \ + /usr/share/cmake/Modules/Platform/Linux.cmake \ + /usr/share/cmake/Modules/Platform/UnixPaths.cmake \ + /usr/share/cmake/Modules/SelectLibraryConfigurations.cmake \ + /usr/share/cmake/Templates/CPackConfig.cmake.in \ + /usr/bin/cmake diff --git a/build-linux/kassetmanagerqt_autogen/moc_predefs.h b/build-linux/kassetmanagerqt_autogen/moc_predefs.h new file mode 100644 index 00000000..05a86e70 --- /dev/null +++ b/build-linux/kassetmanagerqt_autogen/moc_predefs.h @@ -0,0 +1,527 @@ +#define __DBL_MIN_EXP__ (-1021) +#define __LDBL_MANT_DIG__ 64 +#define __cpp_nontype_template_parameter_auto 201606L +#define __UINT_LEAST16_MAX__ 0xffff +#define __FLT16_HAS_QUIET_NAN__ 1 +#define __ATOMIC_ACQUIRE 2 +#define __FLT128_MAX_10_EXP__ 4932 +#define __FLT_MIN__ 1.17549435082228750796873653722224568e-38F +#define __GCC_IEC_559_COMPLEX 2 +#define __cpp_aggregate_nsdmi 201304L +#define __UINT_LEAST8_TYPE__ unsigned char +#define __SIZEOF_FLOAT80__ 16 +#define __BFLT16_DENORM_MIN__ 9.18354961579912115600575419704879436e-41BF16 +#define __cpp_impl_three_way_comparison 201907L +#define __INTMAX_C(c) c ## L +#define __CHAR_BIT__ 8 +#define QT_PDF_LIB 1 +#define __cpp_designated_initializers 201707L +#define __UINT8_MAX__ 0xff +#define __SCHAR_WIDTH__ 8 +#define __WINT_MAX__ 0xffffffffU +#define __FLT32_MIN_EXP__ (-125) +#define __cpp_static_assert 201411L +#define __BFLT16_MIN_10_EXP__ (-37) +#define __cpp_inheriting_constructors 201511L +#define QT_GUI_LIB 1 +#define __ORDER_LITTLE_ENDIAN__ 1234 +#define __WCHAR_MAX__ 0x7fffffff +#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_2 1 +#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_4 1 +#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_8 1 +#define __GCC_ATOMIC_CHAR_LOCK_FREE 2 +#define __GCC_IEC_559 2 +#define __FLT32X_DECIMAL_DIG__ 17 +#define TLRENDER_OIIO 1 +#define __FLT_EVAL_METHOD__ 0 +#define __cpp_binary_literals 201304L +#define __FLT64_DECIMAL_DIG__ 17 +#define __cpp_noexcept_function_type 201510L +#define __GCC_ATOMIC_CHAR32_T_LOCK_FREE 2 +#define __cpp_variadic_templates 200704L +#define __UINT_FAST64_MAX__ 0xffffffffffffffffUL +#define __SIG_ATOMIC_TYPE__ int +#define __DBL_MIN_10_EXP__ (-307) +#define OTIO_STATIC 1 +#define __FINITE_MATH_ONLY__ 0 +#define __cpp_variable_templates 201304L +#define __FLT32X_MAX_EXP__ 1024 +#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_1 1 +#define QT_OPENGL_LIB 1 +#define __FLT32_HAS_DENORM__ 1 +#define __UINT_FAST8_MAX__ 0xff +#define __cpp_rvalue_reference 200610L +#define __cpp_nested_namespace_definitions 201411L +#define __DEC64_MAX_EXP__ 385 +#define __INT8_C(c) c +#define OpenColorIO_SKIP_IMPORTS 1 +#define __LDBL_HAS_INFINITY__ 1 +#define __INT_LEAST8_WIDTH__ 8 +#define __cpp_variadic_using 201611L +#define __UINT_LEAST64_MAX__ 0xffffffffffffffffUL +#define HAVE_FFMPEG 1 +#define __INT_LEAST8_MAX__ 0x7f +#define __cpp_attributes 200809L +#define __cpp_capture_star_this 201603L +#define __SHRT_MAX__ 0x7fff +#define __LDBL_MAX__ 1.18973149535723176502126385303097021e+4932L +#define __cpp_impl_coroutine 201902L +#define __FLT64X_MAX_10_EXP__ 4932 +#define __cpp_if_constexpr 201606L +#define __BFLT16_MAX_10_EXP__ 38 +#define __BFLT16_MAX_EXP__ 128 +#define __LDBL_IS_IEC_60559__ 1 +#define QT_NO_DEBUG 1 +#define __FLT64X_HAS_QUIET_NAN__ 1 +#define TLRENDER_SDL2 1 +#define __UINT_LEAST8_MAX__ 0xff +#define __GCC_ATOMIC_BOOL_LOCK_FREE 2 +#define __FLT128_DENORM_MIN__ 6.47517511943802511092443895822764655e-4966F128 +#define __UINTMAX_TYPE__ long unsigned int +#define __cpp_nsdmi 200809L +#define __BFLT16_DECIMAL_DIG__ 4 +#define __linux 1 +#define __DEC32_EPSILON__ 1E-6DF +#define __FLT_EVAL_METHOD_TS_18661_3__ 0 +#define __UINT32_MAX__ 0xffffffffU +#define __GXX_EXPERIMENTAL_CXX0X__ 1 +#define __DBL_DENORM_MIN__ double(4.94065645841246544176568792868221372e-324L) +#define __FLT128_MIN_EXP__ (-16381) +#define __DEC64X_MAX_EXP__ 6145 +#define __WINT_MIN__ 0U +#define __FLT128_MIN_10_EXP__ (-4931) +#define __FLT32X_IS_IEC_60559__ 1 +#define __INT_LEAST16_WIDTH__ 16 +#define __SCHAR_MAX__ 0x7f +#define __FLT128_MANT_DIG__ 113 +#define __WCHAR_MIN__ (-__WCHAR_MAX__ - 1) +#define QT_SVG_LIB 1 +#define __INT64_C(c) c ## L +#define __cpp_impl_destroying_delete 201806L +#define __GCC_ATOMIC_POINTER_LOCK_FREE 2 +#define TLRENDER_JPEG 1 +#define __ATOMIC_SEQ_CST 5 +#define HAVE_OCIO 1 +#define __unix 1 +#define __INT_LEAST64_MAX__ 0x7fffffffffffffffL +#define __FLT32X_MANT_DIG__ 53 +#define __GCC_ATOMIC_CHAR16_T_LOCK_FREE 2 +#define __cpp_aligned_new 201606L +#define __FLT32_MAX_10_EXP__ 38 +#define __FLT64X_EPSILON__ 1.08420217248550443400745280086994171e-19F64x +#define __STDC_HOSTED__ 1 +#define QT_PDFWIDGETS_LIB 1 +#define __DEC64_MIN_EXP__ (-382) +#define TLRENDER_PNG 1 +#define __cpp_decltype_auto 201304L +#define __DBL_DIG__ 15 +#define __STDC_EMBED_EMPTY__ 2 +#define __FLT_EPSILON__ 1.19209289550781250000000000000000000e-7F +#define __cpp_char8_t 202207L +#define __GXX_WEAK__ 1 +#define __SHRT_WIDTH__ 16 +#define QT_MULTIMEDIAWIDGETS_LIB 1 +#define __FLT32_IS_IEC_60559__ 1 +#define __LDBL_MIN__ 3.36210314311209350626267781732175260e-4932L +#define __DBL_IS_IEC_60559__ 1 +#define __DEC32_MAX__ 9.999999E96DF +#define __CHAR8_TYPE__ unsigned char +#define __cpp_threadsafe_static_init 200806L +#define __cpp_enumerator_attributes 201411L +#define TLRENDER_EXR 1 +#define __FLT64X_DENORM_MIN__ 3.64519953188247460252840593361941982e-4951F64x +#define __FLT32X_HAS_INFINITY__ 1 +#define __unix__ 1 +#define __INT_WIDTH__ 32 +#define __STDC_IEC_559__ 1 +#define __STDC_ISO_10646__ 201706L +#define __GCC_ATOMIC_CHAR8_T_LOCK_FREE 2 +#define __DECIMAL_DIG__ 21 +#define __STDC_IEC_559_COMPLEX__ 1 +#define __FLT64_EPSILON__ 2.22044604925031308084726333618164062e-16F64 +#define __gnu_linux__ 1 +#define __INT16_MAX__ 0x7fff +#define __FLT64_MIN_EXP__ (-1021) +#define __cpp_using_enum 201907L +#define __DEC64X_EPSILON__ 1E-33D64x +#define __FLT64X_MIN_10_EXP__ (-4931) +#define __LDBL_HAS_QUIET_NAN__ 1 +#define __FLT16_MIN_EXP__ (-13) +#define __FLT64_MANT_DIG__ 53 +#define __cpp_consteval 202211L +#define __FLT64X_MANT_DIG__ 64 +#define FTK_API_GL_4_1 1 +#define __BFLT16_DIG__ 2 +#define __GNUC__ 15 +#define __GXX_RTTI 1 +#define TLRENDER_FFMPEG_PLUGIN 1 +#define __MMX__ 1 +#define __FLT_HAS_DENORM__ 1 +#define __SIZEOF_LONG_DOUBLE__ 16 +#define __BIGGEST_ALIGNMENT__ 16 +#define __STDC_UTF_16__ 1 +#define __FLT64_MAX_10_EXP__ 308 +#define __BFLT16_IS_IEC_60559__ 0 +#define __FLT16_MAX_10_EXP__ 4 +#define __cpp_delegating_constructors 200604L +#define __DBL_MAX__ double(1.79769313486231570814527423731704357e+308L) +#define QT_SVGWIDGETS_LIB 1 +#define __cpp_raw_strings 200710L +#define __INT_FAST32_MAX__ 0x7fffffffffffffffL +#define __DBL_HAS_INFINITY__ 1 +#define __INT64_MAX__ 0x7fffffffffffffffL +#define __SIZEOF_FLOAT__ 4 +#define __HAVE_SPECULATION_SAFE_VALUE 1 +#define __cpp_fold_expressions 201603L +#define TL_STATIC 1 +#define __DEC32_MIN_EXP__ (-94) +#define __INTPTR_WIDTH__ 64 +#define __UINT_LEAST32_MAX__ 0xffffffffU +#define __FLT32X_HAS_DENORM__ 1 +#define __INT_FAST16_TYPE__ long int +#define __MMX_WITH_SSE__ 1 +#define __LDBL_HAS_DENORM__ 1 +#define QT_WIDGETS_LIB 1 +#define __SEG_GS 1 +#define __BFLT16_EPSILON__ 7.81250000000000000000000000000000000e-3BF16 +#define __cplusplus 202002L +#define __cpp_ref_qualifiers 200710L +#define __DEC32_MIN__ 1E-95DF +#define __DEPRECATED 1 +#define __cpp_rvalue_references 200610L +#define __DBL_MAX_EXP__ 1024 +#define __WCHAR_WIDTH__ 32 +#define __FLT32_MAX__ 3.40282346638528859811704183484516925e+38F32 +#define __DEC128_EPSILON__ 1E-33DL +#define __FLT16_DECIMAL_DIG__ 5 +#define __SSE2_MATH__ 1 +#define __ATOMIC_HLE_RELEASE 131072 +#define __PTRDIFF_MAX__ 0x7fffffffffffffffL +#define __amd64 1 +#define __DEC64X_MAX__ 9.999999999999999999999999999999999E6144D64x +#define __ATOMIC_HLE_ACQUIRE 65536 +#define __GNUG__ 15 +#define __LONG_LONG_MAX__ 0x7fffffffffffffffLL +#define __SIZEOF_SIZE_T__ 8 +#define __BFLT16_HAS_INFINITY__ 1 +#define __FLT64X_MIN_EXP__ (-16381) +#define __SIZEOF_WINT_T__ 4 +#define __FLT32X_DIG__ 15 +#define __LONG_LONG_WIDTH__ 64 +#define __cpp_initializer_lists 200806L +#define __FLT32_MAX_EXP__ 128 +#define ABI_ID "ELF" +#define __cpp_hex_float 201603L +#define __GXX_ABI_VERSION 1020 +#define HAVE_MINIZIP_NG 1 +#define __FLT_MIN_EXP__ (-125) +#define __GCC_HAVE_DWARF2_CFI_ASM 1 +#define TLRENDER_OCIO 1 +#define __x86_64 1 +#define __cpp_lambdas 200907L +#define __INT_FAST64_TYPE__ long int +#define __BFLT16_MAX__ 3.38953138925153547590470800371487867e+38BF16 +#define __FLT64_DENORM_MIN__ 4.94065645841246544176568792868221372e-324F64 +#define __cpp_template_auto 201606L +#define __FLT16_DENORM_MIN__ 5.96046447753906250000000000000000000e-8F16 +#define __FLT128_EPSILON__ 1.92592994438723585305597794258492732e-34F128 +#define __FLT64X_NORM_MAX__ 1.18973149535723176502126385303097021e+4932F64x +#define __SIZEOF_POINTER__ 8 +#define __SIZE_TYPE__ long unsigned int +#define __LP64__ 1 +#define __DBL_HAS_QUIET_NAN__ 1 +#define __FLT32X_EPSILON__ 2.22044604925031308084726333618164062e-16F32x +#define __LDBL_MAX_EXP__ 16384 +#define __DECIMAL_BID_FORMAT__ 1 +#define __FLT64_MIN_10_EXP__ (-307) +#define FTK_STATIC 1 +#define __FLT16_MIN_10_EXP__ (-4) +#define __FLT64X_DECIMAL_DIG__ 21 +#define __DEC128_MIN__ 1E-6143DL +#define __REGISTER_PREFIX__ +#define __UINT16_MAX__ 0xffff +#define __FLT128_HAS_INFINITY__ 1 +#define __FLT32_MIN__ 1.17549435082228750796873653722224568e-38F32 +#define __UINT8_TYPE__ unsigned char +#define __FLT_DIG__ 6 +#define __NO_INLINE__ 1 +#define __DEC_EVAL_METHOD__ 2 +#define __FLT_MANT_DIG__ 24 +#define __LDBL_DECIMAL_DIG__ 21 +#define QT_NO_INFO_OUTPUT 1 +#define __VERSION__ "15.2.1 20260123 (Red Hat 15.2.1-7)" +#define __UINT64_C(c) c ## UL +#define __cpp_unicode_characters 201411L +#define __DEC64X_MIN__ 1E-6143D64x +#define _STDC_PREDEF_H 1 +#define __INT_LEAST32_MAX__ 0x7fffffff +#define __GCC_ATOMIC_INT_LOCK_FREE 2 +#define __FLT128_MAX_EXP__ 16384 +#define __cpp_conditional_explicit 201806L +#define __FLT32_MANT_DIG__ 24 +#define __cpp_decltype 200707L +#define __FLOAT_WORD_ORDER__ __ORDER_LITTLE_ENDIAN__ +#define SIZEOF_DPTR (sizeof(void*)) +#define __FLT32X_MIN_EXP__ (-1021) +#define __cpp_aggregate_paren_init 201902L +#define __STDC_IEC_60559_COMPLEX__ 201404L +#define __cpp_aggregate_bases 201603L +#define __BFLT16_MIN__ 1.17549435082228750796873653722224568e-38BF16 +#define __FLT128_HAS_DENORM__ 1 +#define __FLT32_DECIMAL_DIG__ 9 +#define __FLT128_DIG__ 33 +#define __INT32_C(c) c +#define __DEC64_EPSILON__ 1E-15DD +#define __ORDER_PDP_ENDIAN__ 3412 +#define __DEC128_MIN_EXP__ (-6142) +#define __DEC128_MAX__ 9.999999999999999999999999999999999E6144DL +#define QT_OPENGLWIDGETS_LIB 1 +#define __cpp_constinit 201907L +#define __INT_FAST32_TYPE__ long int +#define QT_CONCURRENT_LIB 1 +#define __UINT_LEAST16_TYPE__ short unsigned int +#define __DEC64X_MANT_DIG__ 34 +#define __DEC128_MAX_EXP__ 6145 +#define unix 1 +#define __DBL_HAS_DENORM__ 1 +#define __cpp_rtti 199711L +#define __UINT64_MAX__ 0xffffffffffffffffUL +#define HAVE_QT_PDF 1 +#define __FLT_IS_IEC_60559__ 1 +#define __GNUC_WIDE_EXECUTION_CHARSET_NAME "UTF-32LE" +#define __FLT64X_DIG__ 18 +#define __INT8_TYPE__ signed char +#define __cpp_digit_separators 201309L +#define __ELF__ 1 +#define __GCC_ASM_FLAG_OUTPUTS__ 1 +#define __UINT32_TYPE__ unsigned int +#define __BFLT16_HAS_QUIET_NAN__ 1 +#define __FLT_RADIX__ 2 +#define HAVE_QT_PDF_WIDGETS 1 +#define __INT_LEAST16_TYPE__ short int +#define __LDBL_EPSILON__ 1.08420217248550443400745280086994171e-19L +#define __UINTMAX_C(c) c ## UL +#define __GNUC_RH_RELEASE__ 7 +#define __FLT16_DIG__ 3 +#define __k8 1 +#define QT_MULTIMEDIA_LIB 1 +#define __FLT32X_MIN__ 2.22507385850720138309023271733240406e-308F32x +#define __SIG_ATOMIC_MAX__ 0x7fffffff +#define __cpp_constexpr 202002L +#define __GCC_ATOMIC_WCHAR_T_LOCK_FREE 2 +#define __USER_LABEL_PREFIX__ +#define __STDC_IEC_60559_BFP__ 201404L +#define __SIZEOF_PTRDIFF_T__ 8 +#define __FLT64X_HAS_INFINITY__ 1 +#define __SIZEOF_LONG__ 8 +#define __LDBL_DIG__ 18 +#define __FLT64_IS_IEC_60559__ 1 +#define __x86_64__ 1 +#define __FLT16_IS_IEC_60559__ 1 +#define __FLT16_MAX_EXP__ 16 +#define __DEC32_SUBNORMAL_MIN__ 0.000001E-95DF +#define __STDC_EMBED_FOUND__ 1 +#define __INT_FAST16_MAX__ 0x7fffffffffffffffL +#define __GCC_CONSTRUCTIVE_SIZE 64 +#define __FLT64_DIG__ 15 +#define __UINT_FAST32_MAX__ 0xffffffffffffffffUL +#define __UINT_LEAST64_TYPE__ long unsigned int +#define __FLT16_EPSILON__ 9.76562500000000000000000000000000000e-4F16 +#define __FLT_HAS_QUIET_NAN__ 1 +#define __FLT_MAX_10_EXP__ 38 +#define __FLT64X_HAS_DENORM__ 1 +#define __DEC128_SUBNORMAL_MIN__ 0.000000000000000000000000000000001E-6143DL +#define __FLT_HAS_INFINITY__ 1 +#define __GNUC_EXECUTION_CHARSET_NAME "UTF-8" +#define __cpp_unicode_literals 200710L +#define __UINT_FAST16_TYPE__ long unsigned int +#define __DEC64_MAX__ 9.999999999999999E384DD +#define __STDC_EMBED_NOT_FOUND__ 0 +#define __INT_FAST32_WIDTH__ 64 +#define __CHAR16_TYPE__ short unsigned int +#define __PRAGMA_REDEFINE_EXTNAME 1 +#define __DEC64X_SUBNORMAL_MIN__ 0.000000000000000000000000000000001E-6143D64x +#define __SIZE_WIDTH__ 64 +#define __SEG_FS 1 +#define HAVE_OPENIMAGEIO 1 +#define __INT_LEAST16_MAX__ 0x7fff +#define __FLT16_NORM_MAX__ 6.55040000000000000000000000000000000e+4F16 +#define __DEC64_MANT_DIG__ 16 +#define QT_NETWORK_LIB 1 +#define __FLT32_DENORM_MIN__ 1.40129846432481707092372958328991613e-45F32 +#define __SIG_ATOMIC_WIDTH__ 32 +#define __GCC_DESTRUCTIVE_SIZE 64 +#define __INT_LEAST64_TYPE__ long int +#define __INT16_TYPE__ short int +#define __INT_LEAST8_TYPE__ signed char +#define __FLT16_MAX__ 6.55040000000000000000000000000000000e+4F16 +#define __FLT128_MIN__ 3.36210314311209350626267781732175260e-4932F128 +#define __cpp_structured_bindings 201606L +#define __SIZEOF_INT__ 4 +#define __DEC32_MAX_EXP__ 97 +#define __INT_FAST8_MAX__ 0x7f +#define __FLT128_MAX__ 1.18973149535723176508575932662800702e+4932F128 +#define __INTPTR_MAX__ 0x7fffffffffffffffL +#define __cpp_sized_deallocation 201309L +#define __cpp_guaranteed_copy_elision 201606L +#define linux 1 +#define __FLT64_HAS_QUIET_NAN__ 1 +#define __FLT32_MIN_10_EXP__ (-37) +#define __EXCEPTIONS 1 +#define __UINT16_C(c) c +#define __PTRDIFF_WIDTH__ 64 +#define __cpp_range_based_for 201603L +#define __INT_FAST16_WIDTH__ 64 +#define __FLT64_HAS_INFINITY__ 1 +#define __FLT64X_MAX__ 1.18973149535723176502126385303097021e+4932F64x +#define __FLT16_HAS_INFINITY__ 1 +#define __STDCPP_DEFAULT_NEW_ALIGNMENT__ 16 +#define __SIG_ATOMIC_MIN__ (-__SIG_ATOMIC_MAX__ - 1) +#define __code_model_small__ 1 +#define __GCC_ATOMIC_LONG_LOCK_FREE 2 +#define __cpp_nontype_template_args 201911L +#define __DEC32_MANT_DIG__ 7 +#define __k8__ 1 +#define __INTPTR_TYPE__ long int +#define __UINT16_TYPE__ short unsigned int +#define __WCHAR_TYPE__ int +#define __UINTPTR_MAX__ 0xffffffffffffffffUL +#define __INT_FAST64_WIDTH__ 64 +#define __cpp_nontype_template_parameter_class 201806L +#define __cpp_concepts 202002L +#define __INT_FAST64_MAX__ 0x7fffffffffffffffL +#define __GCC_ATOMIC_TEST_AND_SET_TRUEVAL 1 +#define __FLT_NORM_MAX__ 3.40282346638528859811704183484516925e+38F +#define __FLT32_HAS_INFINITY__ 1 +#define __FLT64X_MAX_EXP__ 16384 +#define __UINT_FAST64_TYPE__ long unsigned int +#define __cpp_constexpr_in_decltype 201711L +#define __cpp_inline_variables 201606L +#define __BFLT16_MIN_EXP__ (-125) +#define __INT_MAX__ 0x7fffffff +#define __linux__ 1 +#define QT_NO_DEBUG_OUTPUT 1 +#define __INT64_TYPE__ long int +#define __FLT_MAX_EXP__ 128 +#define __ORDER_BIG_ENDIAN__ 4321 +#define OPENTIME_STATIC 1 +#define __DBL_MANT_DIG__ 53 +#define QT_CORE_LIB 1 +#define __SIZEOF_FLOAT128__ 16 +#define __BFLT16_MANT_DIG__ 8 +#define __DEC64_MIN__ 1E-383DD +#define __WINT_TYPE__ unsigned int +#define __UINT_LEAST32_TYPE__ unsigned int +#define __SIZEOF_SHORT__ 2 +#define __FLT32_NORM_MAX__ 3.40282346638528859811704183484516925e+38F32 +#define __SSE__ 1 +#define __LDBL_MIN_EXP__ (-16381) +#define __FLT64_MAX__ 1.79769313486231570814527423731704357e+308F64 +#define __DEC64X_MIN_EXP__ (-6142) +#define __amd64__ 1 +#define __WINT_WIDTH__ 32 +#define __INT_LEAST64_WIDTH__ 64 +#define __FLT32X_MAX_10_EXP__ 308 +#define __cpp_namespace_attributes 201411L +#define __SIZEOF_INT128__ 16 +#define __FLT16_MIN__ 6.10351562500000000000000000000000000e-5F16 +#define __FLT64X_IS_IEC_60559__ 1 +#define __GXX_CONSTEXPR_ASM__ 1 +#define __LDBL_MAX_10_EXP__ 4932 +#define __ATOMIC_RELAXED 0 +#define __DBL_EPSILON__ double(2.22044604925031308084726333618164062e-16L) +#define __INT_LEAST32_TYPE__ int +#define _LP64 1 +#define __UINT8_C(c) c +#define __FLT64_MAX_EXP__ 1024 +#define __cpp_return_type_deduction 201304L +#define __SIZEOF_WCHAR_T__ 4 +#define __GNUC_PATCHLEVEL__ 1 +#define __FLT128_NORM_MAX__ 1.18973149535723176508575932662800702e+4932F128 +#define __FLT64_NORM_MAX__ 1.79769313486231570814527423731704357e+308F64 +#define __FLT128_HAS_QUIET_NAN__ 1 +#define __INTMAX_MAX__ 0x7fffffffffffffffL +#define TLRENDER_TIFF 1 +#define __INT_FAST8_TYPE__ signed char +#define __FLT64X_MIN__ 3.36210314311209350626267781732175260e-4932F64x +#define QT_SQL_LIB 1 +#define __STDCPP_THREADS__ 1 +#define __BFLT16_HAS_DENORM__ 1 +#define __GNUC_STDC_INLINE__ 1 +#define __FLT64_HAS_DENORM__ 1 +#define __FLT32_EPSILON__ 1.19209289550781250000000000000000000e-7F32 +#define __FLT16_HAS_DENORM__ 1 +#define __DBL_DECIMAL_DIG__ 17 +#define __STDC_UTF_32__ 1 +#define __INT_FAST8_WIDTH__ 8 +#define __FXSR__ 1 +#define __FLT32X_MAX__ 1.79769313486231570814527423731704357e+308F32x +#define __DBL_NORM_MAX__ double(1.79769313486231570814527423731704357e+308L) +#define __BYTE_ORDER__ __ORDER_LITTLE_ENDIAN__ +#define TLRENDER_FFMPEG 1 +#define __INTMAX_WIDTH__ 64 +#define __cpp_runtime_arrays 198712L +#define __FLT32_DIG__ 6 +#define __UINT64_TYPE__ long unsigned int +#define __UINT32_C(c) c ## U +#define __cpp_alias_templates 200704L +#define __cpp_constexpr_dynamic_alloc 201907L +#define __FLT_DENORM_MIN__ 1.40129846432481707092372958328991613e-45F +#define __FLT128_IS_IEC_60559__ 1 +#define __INT8_MAX__ 0x7f +#define __LONG_WIDTH__ 64 +#define __DBL_MIN__ double(2.22507385850720138309023271733240406e-308L) +#define __INT32_MAX__ 0x7fffffff +#define __UINT_FAST32_TYPE__ long unsigned int +#define __FLT16_MANT_DIG__ 11 +#define __FLT32X_NORM_MAX__ 1.79769313486231570814527423731704357e+308F32x +#define __CHAR32_TYPE__ unsigned int +#define __FLT_MAX__ 3.40282346638528859811704183484516925e+38F +#define __SSE2__ 1 +#define __cpp_deduction_guides 201907L +#define __BFLT16_NORM_MAX__ 3.38953138925153547590470800371487867e+38BF16 +#define __INT32_TYPE__ int +#define __SIZEOF_DOUBLE__ 8 +#define __cpp_exceptions 199711L +#define __FLT_MIN_10_EXP__ (-37) +#define __FLT64_MIN__ 2.22507385850720138309023271733240406e-308F64 +#define __INT_LEAST32_WIDTH__ 32 +#define __INTMAX_TYPE__ long int +#define __GLIBCXX_BITSIZE_INT_N_0 128 +#define __FLT32X_HAS_QUIET_NAN__ 1 +#define __ATOMIC_CONSUME 1 +#define __GNUC_MINOR__ 2 +#define __GLIBCXX_TYPE_INT_N_0 __int128 +#define __UINTMAX_MAX__ 0xffffffffffffffffUL +#define __FLT32X_DENORM_MIN__ 4.94065645841246544176568792868221372e-324F32x +#define __cpp_template_template_args 201611L +#define __DBL_MAX_10_EXP__ 308 +#define __LDBL_DENORM_MIN__ 3.64519953188247460252840593361941982e-4951L +#define __INT16_C(c) c +#define KAM_APP_VERSION "1.8.5" +#define __STDC__ 1 +#define __PTRDIFF_TYPE__ long int +#define HAVE_TLRENDER 1 +#define __LONG_MAX__ 0x7fffffffffffffffL +#define __FLT32X_MIN_10_EXP__ (-307) +#define __UINTPTR_TYPE__ long unsigned int +#define __DEC64_SUBNORMAL_MIN__ 0.000000000000001E-383DD +#define __DEC128_MANT_DIG__ 34 +#define __LDBL_MIN_10_EXP__ (-4931) +#define __cpp_generic_lambdas 201707L +#define __SSE_MATH__ 1 +#define __SIZEOF_LONG_LONG__ 8 +#define __cpp_user_defined_literals 200809L +#define __FLT128_DECIMAL_DIG__ 36 +#define __GCC_ATOMIC_LLONG_LOCK_FREE 2 +#define __FLT32_HAS_QUIET_NAN__ 1 +#define __FLT_DECIMAL_DIG__ 9 +#define __UINT_FAST16_MAX__ 0xffffffffffffffffUL +#define __LDBL_NORM_MAX__ 1.18973149535723176502126385303097021e+4932L +#define __GCC_ATOMIC_SHORT_LOCK_FREE 2 +#define __SIZE_MAX__ 0xffffffffffffffffUL +#define __UINT_FAST8_TYPE__ unsigned char +#define _GNU_SOURCE 1 +#define __cpp_init_captures 201803L +#define __ATOMIC_ACQ_REL 4 +#define __ATOMIC_RELEASE 3 diff --git a/build-linux/kassetmanagerqt_autogen/mocs_compilation.cpp b/build-linux/kassetmanagerqt_autogen/mocs_compilation.cpp new file mode 100644 index 00000000..9621ce4f --- /dev/null +++ b/build-linux/kassetmanagerqt_autogen/mocs_compilation.cpp @@ -0,0 +1,55 @@ +// This file is autogenerated. Changes will be overwritten. +#include "UVLADIE3JM/moc_annotation_layer.cpp" +#include "UVLADIE3JM/moc_asset_grid_view.cpp" +#include "UVLADIE3JM/moc_asset_item_delegate.cpp" +#include "UVLADIE3JM/moc_asset_sequence_grouping_proxy_model.cpp" +#include "UVLADIE3JM/moc_assets_model.cpp" +#include "UVLADIE3JM/moc_assets_table_model.cpp" +#include "UVLADIE3JM/moc_bulk_rename_dialog.cpp" +#include "UVLADIE3JM/moc_context_preserver.cpp" +#include "UVLADIE3JM/moc_database_health_agent.cpp" +#include "UVLADIE3JM/moc_database_health_dialog.cpp" +#include "UVLADIE3JM/moc_db.cpp" +#include "UVLADIE3JM/moc_drag_utils.cpp" +#include "UVLADIE3JM/moc_everything_folder_model.cpp" +#include "UVLADIE3JM/moc_everything_search_dialog.cpp" +#include "UVLADIE3JM/moc_file_manager_pane.cpp" +#include "UVLADIE3JM/moc_file_ops.cpp" +#include "UVLADIE3JM/moc_file_ops_dialog.cpp" +#include "UVLADIE3JM/moc_fm_item_delegate.cpp" +#include "UVLADIE3JM/moc_fm_views_ex.cpp" +#include "UVLADIE3JM/moc_grid_scrub.cpp" +#include "UVLADIE3JM/moc_image_preview_overlay.cpp" +#include "UVLADIE3JM/moc_import_progress_dialog.cpp" +#include "UVLADIE3JM/moc_importer.cpp" +#include "UVLADIE3JM/moc_live_preview_manager.cpp" +#include "UVLADIE3JM/moc_log_manager.cpp" +#include "UVLADIE3JM/moc_log_viewer_widget.cpp" +#include "UVLADIE3JM/moc_mainwindow.cpp" +#include "SVT5AJZPWX/moc_tlrender_player.cpp" +#include "SVT5AJZPWX/moc_tlrender_viewport.cpp" +#include "SVT5AJZPWX/moc_tlrender_widget.cpp" +#include "UVLADIE3JM/moc_media_convert_dialog.cpp" +#include "UVLADIE3JM/moc_media_converter_worker.cpp" +#include "UVLADIE3JM/moc_preview_overlay.cpp" +#include "UVLADIE3JM/moc_progress_manager.cpp" +#include "UVLADIE3JM/moc_project_assets_model.cpp" +#include "UVLADIE3JM/moc_project_db.cpp" +#include "UVLADIE3JM/moc_project_folder_watcher.cpp" +#include "UVLADIE3JM/moc_project_folders_model.cpp" +#include "UVLADIE3JM/moc_project_import_worker.cpp" +#include "UVLADIE3JM/moc_project_item_delegate.cpp" +#include "UVLADIE3JM/moc_project_manager_watcher.cpp" +#include "UVLADIE3JM/moc_project_sequence_grouping_proxy_model.cpp" +#include "UVLADIE3JM/moc_projects_model.cpp" +#include "UVLADIE3JM/moc_scrub_frame_registry.cpp" +#include "UVLADIE3JM/moc_sequence_grouping_proxy_model.cpp" +#include "UVLADIE3JM/moc_settings_dialog.cpp" +#include "UVLADIE3JM/moc_star_rating_widget.cpp" +#include "UVLADIE3JM/moc_tags_model.cpp" +#include "UVLADIE3JM/moc_theme_manager.cpp" +#include "UVLADIE3JM/moc_thumbnail_cache_manager.cpp" +#include "UVLADIE3JM/moc_thumbnail_generator_dialog.cpp" +#include "UVLADIE3JM/moc_thumbnail_generator_worker.cpp" +#include "UVLADIE3JM/moc_user_guide_dialog.cpp" +#include "UVLADIE3JM/moc_virtual_folders.cpp" diff --git a/build-linux/kassetmanagerqt_autogen/timestamp b/build-linux/kassetmanagerqt_autogen/timestamp new file mode 100644 index 00000000..e69de29b diff --git a/build-linux/tests/CMakeFiles/test_annotation_items.dir/__/src/annotation_items.cpp.o b/build-linux/tests/CMakeFiles/test_annotation_items.dir/__/src/annotation_items.cpp.o new file mode 100644 index 00000000..76cfb5ea Binary files /dev/null and b/build-linux/tests/CMakeFiles/test_annotation_items.dir/__/src/annotation_items.cpp.o differ diff --git a/build-linux/tests/CMakeFiles/test_annotation_items.dir/test_annotation_items.cpp.o b/build-linux/tests/CMakeFiles/test_annotation_items.dir/test_annotation_items.cpp.o new file mode 100644 index 00000000..8f0e82de Binary files /dev/null and b/build-linux/tests/CMakeFiles/test_annotation_items.dir/test_annotation_items.cpp.o differ diff --git a/build-linux/tests/CMakeFiles/test_annotation_items.dir/test_annotation_items_autogen/mocs_compilation.cpp.o b/build-linux/tests/CMakeFiles/test_annotation_items.dir/test_annotation_items_autogen/mocs_compilation.cpp.o new file mode 100644 index 00000000..bc1e4e33 Binary files /dev/null and b/build-linux/tests/CMakeFiles/test_annotation_items.dir/test_annotation_items_autogen/mocs_compilation.cpp.o differ diff --git a/build-linux/tests/CMakeFiles/test_annotation_items_autogen.dir/AutogenInfo.json b/build-linux/tests/CMakeFiles/test_annotation_items_autogen.dir/AutogenInfo.json new file mode 100644 index 00000000..528fa132 --- /dev/null +++ b/build-linux/tests/CMakeFiles/test_annotation_items_autogen.dir/AutogenInfo.json @@ -0,0 +1,214 @@ +{ + "BUILD_DIR" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_annotation_items_autogen", + "CMAKE_BINARY_DIR" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux", + "CMAKE_CURRENT_BINARY_DIR" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests", + "CMAKE_CURRENT_SOURCE_DIR" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests", + "CMAKE_EXECUTABLE" : "/usr/bin/cmake", + "CMAKE_LIST_FILES" : + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/CMakeLists.txt", + "/usr/lib64/cmake/Qt6/Qt6ConfigVersion.cmake", + "/usr/lib64/cmake/Qt6/Qt6ConfigVersionImpl.cmake", + "/usr/lib64/cmake/Qt6/Qt6Config.cmake", + "/usr/lib64/cmake/Qt6/QtPublicCMakeEarlyPolicyHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicCMakeHelpers.cmake", + "/usr/lib64/cmake/Qt6/Qt6ConfigExtras.cmake", + "/usr/lib64/cmake/Qt6/QtPublicCMakeVersionHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtInstallPaths.cmake", + "/usr/lib64/cmake/Qt6/Qt6Targets.cmake", + "/usr/lib64/cmake/Qt6/Qt6VersionlessAliasTargets.cmake", + "/usr/lib64/cmake/Qt6/QtFeature.cmake", + "/usr/share/cmake/Modules/CheckCXXCompilerFlag.cmake", + "/usr/lib64/cmake/Qt6/QtFeatureCommon.cmake", + "/usr/lib64/cmake/Qt6/QtPublicAndroidHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicAppleHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicCMakeHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicCMakeVersionHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicDependencyHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicExternalProjectHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicFinalizerHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicFindPackageHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicGitHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicPluginHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicPluginHelpers_v2.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomAttributionHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomBuildToolHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomCommonGenerationHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomCpeHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomCycloneDXHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomDocumentNamespaceHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomDepHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomExternalReferenceHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomFileHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomGenerationHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomGenerationCycloneDXHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomLicenseHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomOpsHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomPurlHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomPythonHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomQtEntityHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomRelationshipHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomSystemDepHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicTargetHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicTestHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicToolHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicWalkLibsHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicWindowsHelpers.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6/Qt6Dependencies.cmake", + "/usr/lib64/cmake/Qt6Test/Qt6TestConfigVersion.cmake", + "/usr/lib64/cmake/Qt6Test/Qt6TestConfigVersionImpl.cmake", + "/usr/lib64/cmake/Qt6Test/Qt6TestConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6Test/Qt6TestDependencies.cmake", + "/usr/lib64/cmake/Qt6Test/Qt6TestTargets.cmake", + "/usr/lib64/cmake/Qt6Test/Qt6TestTargets-relwithdebinfo.cmake", + "/usr/lib64/cmake/Qt6Test/Qt6TestAdditionalTargetInfo.cmake", + "/usr/lib64/cmake/Qt6Test/QtTestProperties.cmake", + "/usr/lib64/cmake/Qt6Test/Qt6TestVersionlessAliasTargets.cmake" + ], + "CMAKE_SOURCE_DIR" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6", + "CROSS_CONFIG" : false, + "DEP_FILE" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_annotation_items_autogen/deps", + "DEP_FILE_RULE_NAME" : "test_annotation_items_autogen/timestamp", + "HEADERS" : + [ + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/annotation_items.h", + "MU", + "VNU7RW3YIC/moc_annotation_items.cpp", + null + ] + ], + "HEADER_EXTENSIONS" : [ "h", "hh", "h++", "hm", "hpp", "hxx", "in", "txx" ], + "INCLUDE_DIR" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_annotation_items_autogen/include", + "MOC_COMPILATION_FILE" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_annotation_items_autogen/mocs_compilation.cpp", + "MOC_DEFINITIONS" : + [ + "FTK_API_GL_4_1", + "QT_CORE_LIB", + "QT_GUI_LIB", + "QT_NO_DEBUG", + "QT_TESTCASE_BUILDDIR=\"/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests\"", + "QT_TESTCASE_SOURCEDIR=\"/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests\"", + "QT_TESTLIB_LIB", + "QT_WIDGETS_LIB", + "TLRENDER_EXR", + "TLRENDER_FFMPEG", + "TLRENDER_FFMPEG_PLUGIN", + "TLRENDER_JPEG", + "TLRENDER_OCIO", + "TLRENDER_OIIO", + "TLRENDER_PNG", + "TLRENDER_SDL2", + "TLRENDER_TIFF" + ], + "MOC_DEPEND_FILTERS" : + [ + [ + "Q_PLUGIN_METADATA", + "[\n][ \t]*Q_PLUGIN_METADATA[ \t]*\\([^\\)]*FILE[ \t]*\"([^\"]+)\"" + ] + ], + "MOC_INCLUDES" : + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src", + "/usr/include/qt6/QtTest", + "/usr/include/qt6", + "/usr/include/qt6/QtCore", + "/usr/lib64/qt6/mkspecs/linux-g++", + "/usr/include/qt6/QtGui", + "/usr/include/qt6/QtWidgets", + "/usr/include", + "/usr/include/c++/15", + "/usr/include/c++/15/x86_64-redhat-linux", + "/usr/include/c++/15/backward", + "/usr/lib/gcc/x86_64-redhat-linux/15/include", + "/usr/local/include" + ], + "MOC_MACRO_NAMES" : + [ + "Q_OBJECT", + "Q_GADGET", + "Q_NAMESPACE", + "Q_NAMESPACE_EXPORT", + "Q_GADGET_EXPORT", + "Q_ENUM_NS" + ], + "MOC_OPTIONS" : [], + "MOC_PATH_PREFIX" : false, + "MOC_PREDEFS_CMD" : + [ + "/usr/bin/c++", + "-std=gnu++20", + "-w", + "-dM", + "-E", + "/usr/share/cmake/Modules/CMakeCXXCompilerABI.cpp" + ], + "MOC_PREDEFS_FILE" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_annotation_items_autogen/moc_predefs.h", + "MOC_RELAXED_MODE" : false, + "MOC_SKIP" : + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_db_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_drag_utils_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_everything_search_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_grid_scrub_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_icon_utils_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_importer_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_live_preview_manager_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_media_converter_worker_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_models_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_platform_session_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_sequence_detector_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_simple_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_utils_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_virtual_drag_autogen/mocs_compilation.cpp" + ], + "MULTI_CONFIG" : false, + "PARALLEL" : 16, + "PARSE_CACHE_FILE" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/CMakeFiles/test_annotation_items_autogen.dir/ParseCache.txt", + "QT_MOC_EXECUTABLE" : "/usr/lib64/qt6/libexec/moc", + "QT_UIC_EXECUTABLE" : "/usr/lib64/qt6/libexec/uic", + "QT_VERSION_MAJOR" : 6, + "QT_VERSION_MINOR" : 10, + "SETTINGS_FILE" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/CMakeFiles/test_annotation_items_autogen.dir/AutogenUsed.txt", + "SOURCES" : + [ + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/annotation_items.cpp", + "MU", + null + ], + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/test_annotation_items.cpp", + "MU", + null + ] + ], + "UIC_OPTIONS" : [], + "UIC_SEARCH_PATHS" : [], + "UIC_SKIP" : + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_db_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_drag_utils_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_everything_search_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_grid_scrub_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_icon_utils_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_importer_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_live_preview_manager_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_media_converter_worker_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_models_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_platform_session_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_sequence_detector_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_simple_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_utils_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_virtual_drag_autogen/mocs_compilation.cpp" + ], + "UIC_UI_FILES" : [], + "USE_BETTER_GRAPH" : true, + "VERBOSITY" : 0 +} diff --git a/build-linux/tests/CMakeFiles/test_annotation_items_autogen.dir/AutogenUsed.txt b/build-linux/tests/CMakeFiles/test_annotation_items_autogen.dir/AutogenUsed.txt new file mode 100644 index 00000000..daf02f00 --- /dev/null +++ b/build-linux/tests/CMakeFiles/test_annotation_items_autogen.dir/AutogenUsed.txt @@ -0,0 +1,2 @@ +moc:22e3e0cd6ce023c87f1cd60f4cbd11053c4a0ee65074ff8cdee66fe423af5dc0 +uic:0df7b06f04b60705a14ff966fc10725af0fb193398324deeaf17e44a5f9db1e0 diff --git a/build-linux/tests/CMakeFiles/test_annotation_items_autogen.dir/ParseCache.txt b/build-linux/tests/CMakeFiles/test_annotation_items_autogen.dir/ParseCache.txt new file mode 100644 index 00000000..f0e9f756 --- /dev/null +++ b/build-linux/tests/CMakeFiles/test_annotation_items_autogen.dir/ParseCache.txt @@ -0,0 +1,870 @@ +# Generated by CMake. Changes will be overwritten. +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/test_annotation_items.cpp + mmc:Q_OBJECT + mid:test_annotation_items.moc + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_annotation_items_autogen/moc_predefs.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/annotation_items.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/test_annotation_items.cpp + mdp:/usr/include/alloca.h + mdp:/usr/include/asm-generic/bitsperlong.h + mdp:/usr/include/asm-generic/errno-base.h + mdp:/usr/include/asm-generic/errno.h + mdp:/usr/include/asm-generic/int-ll64.h + mdp:/usr/include/asm-generic/posix_types.h + mdp:/usr/include/asm-generic/types.h + mdp:/usr/include/asm/bitsperlong.h + mdp:/usr/include/asm/errno.h + mdp:/usr/include/asm/posix_types.h + mdp:/usr/include/asm/posix_types_64.h + mdp:/usr/include/asm/types.h + mdp:/usr/include/asm/unistd.h + mdp:/usr/include/asm/unistd_64.h + mdp:/usr/include/assert.h + mdp:/usr/include/bits/atomic_wide_counter.h + mdp:/usr/include/bits/byteswap.h + mdp:/usr/include/bits/confname.h + mdp:/usr/include/bits/cpu-set.h + mdp:/usr/include/bits/endian.h + mdp:/usr/include/bits/endianness.h + mdp:/usr/include/bits/environments.h + mdp:/usr/include/bits/errno.h + mdp:/usr/include/bits/floatn-common.h + mdp:/usr/include/bits/floatn.h + mdp:/usr/include/bits/getopt_core.h + mdp:/usr/include/bits/getopt_posix.h + mdp:/usr/include/bits/libc-header-start.h + mdp:/usr/include/bits/local_lim.h + mdp:/usr/include/bits/locale.h + mdp:/usr/include/bits/long-double.h + mdp:/usr/include/bits/posix1_lim.h + mdp:/usr/include/bits/posix2_lim.h + mdp:/usr/include/bits/posix_opt.h + mdp:/usr/include/bits/pthread_stack_min-dynamic.h + mdp:/usr/include/bits/pthreadtypes-arch.h + mdp:/usr/include/bits/pthreadtypes.h + mdp:/usr/include/bits/sched.h + mdp:/usr/include/bits/select.h + mdp:/usr/include/bits/semaphore.h + mdp:/usr/include/bits/setjmp.h + mdp:/usr/include/bits/stdint-intn.h + mdp:/usr/include/bits/stdint-least.h + mdp:/usr/include/bits/stdint-uintn.h + mdp:/usr/include/bits/stdio_lim.h + mdp:/usr/include/bits/stdlib-float.h + mdp:/usr/include/bits/struct_mutex.h + mdp:/usr/include/bits/struct_rwlock.h + mdp:/usr/include/bits/syscall.h + mdp:/usr/include/bits/thread-shared-types.h + mdp:/usr/include/bits/time.h + mdp:/usr/include/bits/time64.h + mdp:/usr/include/bits/timesize.h + mdp:/usr/include/bits/timex.h + mdp:/usr/include/bits/types.h + mdp:/usr/include/bits/types/FILE.h + mdp:/usr/include/bits/types/__FILE.h + mdp:/usr/include/bits/types/__fpos64_t.h + mdp:/usr/include/bits/types/__fpos_t.h + mdp:/usr/include/bits/types/__locale_t.h + mdp:/usr/include/bits/types/__mbstate_t.h + mdp:/usr/include/bits/types/__sigset_t.h + mdp:/usr/include/bits/types/clock_t.h + mdp:/usr/include/bits/types/clockid_t.h + mdp:/usr/include/bits/types/cookie_io_functions_t.h + mdp:/usr/include/bits/types/error_t.h + mdp:/usr/include/bits/types/locale_t.h + mdp:/usr/include/bits/types/mbstate_t.h + mdp:/usr/include/bits/types/sigset_t.h + mdp:/usr/include/bits/types/struct_FILE.h + mdp:/usr/include/bits/types/struct___jmp_buf_tag.h + mdp:/usr/include/bits/types/struct_itimerspec.h + mdp:/usr/include/bits/types/struct_sched_param.h + mdp:/usr/include/bits/types/struct_timespec.h + mdp:/usr/include/bits/types/struct_timeval.h + mdp:/usr/include/bits/types/struct_tm.h + mdp:/usr/include/bits/types/time_t.h + mdp:/usr/include/bits/types/timer_t.h + mdp:/usr/include/bits/types/wint_t.h + mdp:/usr/include/bits/typesizes.h + mdp:/usr/include/bits/uintn-identity.h + mdp:/usr/include/bits/uio_lim.h + mdp:/usr/include/bits/unistd_ext.h + mdp:/usr/include/bits/waitflags.h + mdp:/usr/include/bits/waitstatus.h + mdp:/usr/include/bits/wchar.h + mdp:/usr/include/bits/wctype-wchar.h + mdp:/usr/include/bits/wordsize.h + mdp:/usr/include/bits/xopen_lim.h + mdp:/usr/include/c++/15/algorithm + mdp:/usr/include/c++/15/array + mdp:/usr/include/c++/15/atomic + mdp:/usr/include/c++/15/backward/auto_ptr.h + mdp:/usr/include/c++/15/backward/binders.h + mdp:/usr/include/c++/15/bit + mdp:/usr/include/c++/15/bits/algorithmfwd.h + mdp:/usr/include/c++/15/bits/align.h + mdp:/usr/include/c++/15/bits/alloc_traits.h + mdp:/usr/include/c++/15/bits/allocated_ptr.h + mdp:/usr/include/c++/15/bits/allocator.h + mdp:/usr/include/c++/15/bits/atomic_base.h + mdp:/usr/include/c++/15/bits/atomic_futex.h + mdp:/usr/include/c++/15/bits/atomic_lockfree_defines.h + mdp:/usr/include/c++/15/bits/atomic_timed_wait.h + mdp:/usr/include/c++/15/bits/atomic_wait.h + mdp:/usr/include/c++/15/bits/basic_ios.h + mdp:/usr/include/c++/15/bits/basic_ios.tcc + mdp:/usr/include/c++/15/bits/basic_string.h + mdp:/usr/include/c++/15/bits/basic_string.tcc + mdp:/usr/include/c++/15/bits/char_traits.h + mdp:/usr/include/c++/15/bits/charconv.h + mdp:/usr/include/c++/15/bits/chrono.h + mdp:/usr/include/c++/15/bits/chrono_io.h + mdp:/usr/include/c++/15/bits/codecvt.h + mdp:/usr/include/c++/15/bits/concept_check.h + mdp:/usr/include/c++/15/bits/cpp_type_traits.h + mdp:/usr/include/c++/15/bits/cxxabi_forced.h + mdp:/usr/include/c++/15/bits/cxxabi_init_exception.h + mdp:/usr/include/c++/15/bits/enable_special_members.h + mdp:/usr/include/c++/15/bits/erase_if.h + mdp:/usr/include/c++/15/bits/exception.h + mdp:/usr/include/c++/15/bits/exception_defines.h + mdp:/usr/include/c++/15/bits/exception_ptr.h + mdp:/usr/include/c++/15/bits/functexcept.h + mdp:/usr/include/c++/15/bits/functional_hash.h + mdp:/usr/include/c++/15/bits/hash_bytes.h + mdp:/usr/include/c++/15/bits/hashtable.h + mdp:/usr/include/c++/15/bits/hashtable_policy.h + mdp:/usr/include/c++/15/bits/invoke.h + mdp:/usr/include/c++/15/bits/ios_base.h + mdp:/usr/include/c++/15/bits/istream.tcc + mdp:/usr/include/c++/15/bits/iterator_concepts.h + mdp:/usr/include/c++/15/bits/list.tcc + mdp:/usr/include/c++/15/bits/locale_classes.h + mdp:/usr/include/c++/15/bits/locale_classes.tcc + mdp:/usr/include/c++/15/bits/locale_conv.h + mdp:/usr/include/c++/15/bits/locale_facets.h + mdp:/usr/include/c++/15/bits/locale_facets.tcc + mdp:/usr/include/c++/15/bits/locale_facets_nonio.h + mdp:/usr/include/c++/15/bits/locale_facets_nonio.tcc + mdp:/usr/include/c++/15/bits/localefwd.h + mdp:/usr/include/c++/15/bits/max_size_type.h + mdp:/usr/include/c++/15/bits/memory_resource.h + mdp:/usr/include/c++/15/bits/memoryfwd.h + mdp:/usr/include/c++/15/bits/move.h + mdp:/usr/include/c++/15/bits/nested_exception.h + mdp:/usr/include/c++/15/bits/new_allocator.h + mdp:/usr/include/c++/15/bits/node_handle.h + mdp:/usr/include/c++/15/bits/ostream.h + mdp:/usr/include/c++/15/bits/ostream.tcc + mdp:/usr/include/c++/15/bits/ostream_insert.h + mdp:/usr/include/c++/15/bits/parse_numbers.h + mdp:/usr/include/c++/15/bits/postypes.h + mdp:/usr/include/c++/15/bits/predefined_ops.h + mdp:/usr/include/c++/15/bits/ptr_traits.h + mdp:/usr/include/c++/15/bits/quoted_string.h + mdp:/usr/include/c++/15/bits/random.h + mdp:/usr/include/c++/15/bits/random.tcc + mdp:/usr/include/c++/15/bits/range_access.h + mdp:/usr/include/c++/15/bits/ranges_algo.h + mdp:/usr/include/c++/15/bits/ranges_algobase.h + mdp:/usr/include/c++/15/bits/ranges_base.h + mdp:/usr/include/c++/15/bits/ranges_cmp.h + mdp:/usr/include/c++/15/bits/ranges_uninitialized.h + mdp:/usr/include/c++/15/bits/ranges_util.h + mdp:/usr/include/c++/15/bits/refwrap.h + mdp:/usr/include/c++/15/bits/requires_hosted.h + mdp:/usr/include/c++/15/bits/semaphore_base.h + mdp:/usr/include/c++/15/bits/shared_ptr.h + mdp:/usr/include/c++/15/bits/shared_ptr_atomic.h + mdp:/usr/include/c++/15/bits/shared_ptr_base.h + mdp:/usr/include/c++/15/bits/specfun.h + mdp:/usr/include/c++/15/bits/sstream.tcc + mdp:/usr/include/c++/15/bits/std_abs.h + mdp:/usr/include/c++/15/bits/std_function.h + mdp:/usr/include/c++/15/bits/std_mutex.h + mdp:/usr/include/c++/15/bits/std_thread.h + mdp:/usr/include/c++/15/bits/stl_algo.h + mdp:/usr/include/c++/15/bits/stl_algobase.h + mdp:/usr/include/c++/15/bits/stl_bvector.h + mdp:/usr/include/c++/15/bits/stl_construct.h + mdp:/usr/include/c++/15/bits/stl_function.h + mdp:/usr/include/c++/15/bits/stl_heap.h + mdp:/usr/include/c++/15/bits/stl_iterator.h + mdp:/usr/include/c++/15/bits/stl_iterator_base_funcs.h + mdp:/usr/include/c++/15/bits/stl_iterator_base_types.h + mdp:/usr/include/c++/15/bits/stl_list.h + mdp:/usr/include/c++/15/bits/stl_map.h + mdp:/usr/include/c++/15/bits/stl_multimap.h + mdp:/usr/include/c++/15/bits/stl_multiset.h + mdp:/usr/include/c++/15/bits/stl_numeric.h + mdp:/usr/include/c++/15/bits/stl_pair.h + mdp:/usr/include/c++/15/bits/stl_raw_storage_iter.h + mdp:/usr/include/c++/15/bits/stl_relops.h + mdp:/usr/include/c++/15/bits/stl_set.h + mdp:/usr/include/c++/15/bits/stl_tempbuf.h + mdp:/usr/include/c++/15/bits/stl_tree.h + mdp:/usr/include/c++/15/bits/stl_uninitialized.h + mdp:/usr/include/c++/15/bits/stl_vector.h + mdp:/usr/include/c++/15/bits/stream_iterator.h + mdp:/usr/include/c++/15/bits/streambuf.tcc + mdp:/usr/include/c++/15/bits/streambuf_iterator.h + mdp:/usr/include/c++/15/bits/string_view.tcc + mdp:/usr/include/c++/15/bits/stringfwd.h + mdp:/usr/include/c++/15/bits/this_thread_sleep.h + mdp:/usr/include/c++/15/bits/uniform_int_dist.h + mdp:/usr/include/c++/15/bits/unique_lock.h + mdp:/usr/include/c++/15/bits/unique_ptr.h + mdp:/usr/include/c++/15/bits/unordered_map.h + mdp:/usr/include/c++/15/bits/unordered_set.h + mdp:/usr/include/c++/15/bits/uses_allocator.h + mdp:/usr/include/c++/15/bits/uses_allocator_args.h + mdp:/usr/include/c++/15/bits/utility.h + mdp:/usr/include/c++/15/bits/vector.tcc + mdp:/usr/include/c++/15/bits/version.h + mdp:/usr/include/c++/15/cassert + mdp:/usr/include/c++/15/cctype + mdp:/usr/include/c++/15/cerrno + mdp:/usr/include/c++/15/charconv + mdp:/usr/include/c++/15/chrono + mdp:/usr/include/c++/15/climits + mdp:/usr/include/c++/15/clocale + mdp:/usr/include/c++/15/cmath + mdp:/usr/include/c++/15/compare + mdp:/usr/include/c++/15/concepts + mdp:/usr/include/c++/15/condition_variable + mdp:/usr/include/c++/15/cstddef + mdp:/usr/include/c++/15/cstdint + mdp:/usr/include/c++/15/cstdio + mdp:/usr/include/c++/15/cstdlib + mdp:/usr/include/c++/15/cstring + mdp:/usr/include/c++/15/ctime + mdp:/usr/include/c++/15/cwchar + mdp:/usr/include/c++/15/cwctype + mdp:/usr/include/c++/15/debug/assertions.h + mdp:/usr/include/c++/15/debug/debug.h + mdp:/usr/include/c++/15/exception + mdp:/usr/include/c++/15/experimental/source_location + mdp:/usr/include/c++/15/ext/aligned_buffer.h + mdp:/usr/include/c++/15/ext/alloc_traits.h + mdp:/usr/include/c++/15/ext/atomicity.h + mdp:/usr/include/c++/15/ext/concurrence.h + mdp:/usr/include/c++/15/ext/numeric_traits.h + mdp:/usr/include/c++/15/ext/string_conversions.h + mdp:/usr/include/c++/15/ext/type_traits.h + mdp:/usr/include/c++/15/filesystem + mdp:/usr/include/c++/15/format + mdp:/usr/include/c++/15/functional + mdp:/usr/include/c++/15/future + mdp:/usr/include/c++/15/initializer_list + mdp:/usr/include/c++/15/iomanip + mdp:/usr/include/c++/15/ios + mdp:/usr/include/c++/15/iosfwd + mdp:/usr/include/c++/15/istream + mdp:/usr/include/c++/15/iterator + mdp:/usr/include/c++/15/limits + mdp:/usr/include/c++/15/list + mdp:/usr/include/c++/15/locale + mdp:/usr/include/c++/15/map + mdp:/usr/include/c++/15/memory + mdp:/usr/include/c++/15/memory_resource + mdp:/usr/include/c++/15/mutex + mdp:/usr/include/c++/15/new + mdp:/usr/include/c++/15/numeric + mdp:/usr/include/c++/15/optional + mdp:/usr/include/c++/15/ostream + mdp:/usr/include/c++/15/pstl/execution_defs.h + mdp:/usr/include/c++/15/pstl/glue_numeric_defs.h + mdp:/usr/include/c++/15/pstl/pstl_config.h + mdp:/usr/include/c++/15/random + mdp:/usr/include/c++/15/ratio + mdp:/usr/include/c++/15/semaphore + mdp:/usr/include/c++/15/set + mdp:/usr/include/c++/15/shared_mutex + mdp:/usr/include/c++/15/source_location + mdp:/usr/include/c++/15/sstream + mdp:/usr/include/c++/15/stdexcept + mdp:/usr/include/c++/15/stop_token + mdp:/usr/include/c++/15/streambuf + mdp:/usr/include/c++/15/string + mdp:/usr/include/c++/15/string_view + mdp:/usr/include/c++/15/system_error + mdp:/usr/include/c++/15/tr1/bessel_function.tcc + mdp:/usr/include/c++/15/tr1/beta_function.tcc + mdp:/usr/include/c++/15/tr1/ell_integral.tcc + mdp:/usr/include/c++/15/tr1/exp_integral.tcc + mdp:/usr/include/c++/15/tr1/gamma.tcc + mdp:/usr/include/c++/15/tr1/hypergeometric.tcc + mdp:/usr/include/c++/15/tr1/legendre_function.tcc + mdp:/usr/include/c++/15/tr1/modified_bessel_func.tcc + mdp:/usr/include/c++/15/tr1/poly_hermite.tcc + mdp:/usr/include/c++/15/tr1/poly_laguerre.tcc + mdp:/usr/include/c++/15/tr1/riemann_zeta.tcc + mdp:/usr/include/c++/15/tr1/special_function_util.h + mdp:/usr/include/c++/15/tuple + mdp:/usr/include/c++/15/type_traits + mdp:/usr/include/c++/15/typeinfo + mdp:/usr/include/c++/15/unordered_map + mdp:/usr/include/c++/15/unordered_set + mdp:/usr/include/c++/15/utility + mdp:/usr/include/c++/15/variant + mdp:/usr/include/c++/15/vector + mdp:/usr/include/c++/15/version + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/atomic_word.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++allocator.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++config.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++locale.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/cpu_defines.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/ctype_base.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/ctype_inline.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/error_constants.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/gthr-default.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/gthr.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/messages_members.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/opt_random.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/os_defines.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/time_members.h + mdp:/usr/include/ctype.h + mdp:/usr/include/endian.h + mdp:/usr/include/errno.h + mdp:/usr/include/features-time64.h + mdp:/usr/include/features.h + mdp:/usr/include/gnu/stubs-64.h + mdp:/usr/include/gnu/stubs.h + mdp:/usr/include/libintl.h + mdp:/usr/include/limits.h + mdp:/usr/include/linux/close_range.h + mdp:/usr/include/linux/errno.h + mdp:/usr/include/linux/limits.h + mdp:/usr/include/linux/posix_types.h + mdp:/usr/include/linux/sched/types.h + mdp:/usr/include/linux/stddef.h + mdp:/usr/include/linux/types.h + mdp:/usr/include/locale.h + mdp:/usr/include/pthread.h + mdp:/usr/include/qt6/QtCore/QAbstractItemModel + mdp:/usr/include/qt6/QtCore/QDeadlineTimer + mdp:/usr/include/qt6/QtCore/QEvent + mdp:/usr/include/qt6/QtCore/QHash + mdp:/usr/include/qt6/QtCore/QJsonObject + mdp:/usr/include/qt6/QtCore/QLineF + mdp:/usr/include/qt6/QtCore/QList + mdp:/usr/include/qt6/QtCore/QMap + mdp:/usr/include/qt6/QtCore/QMargins + mdp:/usr/include/qt6/QtCore/QMetaEnum + mdp:/usr/include/qt6/QtCore/QMutex + mdp:/usr/include/qt6/QtCore/QObject + mdp:/usr/include/qt6/QtCore/QPointF + mdp:/usr/include/qt6/QtCore/QRect + mdp:/usr/include/qt6/QtCore/QRectF + mdp:/usr/include/qt6/QtCore/QSize + mdp:/usr/include/qt6/QtCore/QSizeF + mdp:/usr/include/qt6/QtCore/QString + mdp:/usr/include/qt6/QtCore/QStringList + mdp:/usr/include/qt6/QtCore/QVariant + mdp:/usr/include/qt6/QtCore/QtCore + mdp:/usr/include/qt6/QtCore/QtCoreDepends + mdp:/usr/include/qt6/QtCore/q17memory.h + mdp:/usr/include/qt6/QtCore/q20algorithm.h + mdp:/usr/include/qt6/QtCore/q20chrono.h + mdp:/usr/include/qt6/QtCore/q20functional.h + mdp:/usr/include/qt6/QtCore/q20iterator.h + mdp:/usr/include/qt6/QtCore/q20map.h + mdp:/usr/include/qt6/QtCore/q20memory.h + mdp:/usr/include/qt6/QtCore/q20type_traits.h + mdp:/usr/include/qt6/QtCore/q20utility.h + mdp:/usr/include/qt6/QtCore/q20vector.h + mdp:/usr/include/qt6/QtCore/q23functional.h + mdp:/usr/include/qt6/QtCore/q23type_traits.h + mdp:/usr/include/qt6/QtCore/q23utility.h + mdp:/usr/include/qt6/QtCore/q26numeric.h + mdp:/usr/include/qt6/QtCore/qabstractanimation.h + mdp:/usr/include/qt6/QtCore/qabstracteventdispatcher.h + mdp:/usr/include/qt6/QtCore/qabstractitemmodel.h + mdp:/usr/include/qt6/QtCore/qabstractnativeeventfilter.h + mdp:/usr/include/qt6/QtCore/qabstractproxymodel.h + mdp:/usr/include/qt6/QtCore/qalgorithms.h + mdp:/usr/include/qt6/QtCore/qalloc.h + mdp:/usr/include/qt6/QtCore/qanimationgroup.h + mdp:/usr/include/qt6/QtCore/qanystringview.h + mdp:/usr/include/qt6/QtCore/qapplicationstatic.h + mdp:/usr/include/qt6/QtCore/qarraydata.h + mdp:/usr/include/qt6/QtCore/qarraydataops.h + mdp:/usr/include/qt6/QtCore/qarraydatapointer.h + mdp:/usr/include/qt6/QtCore/qassert.h + mdp:/usr/include/qt6/QtCore/qassociativeiterable.h + mdp:/usr/include/qt6/QtCore/qatomic.h + mdp:/usr/include/qt6/QtCore/qatomic_cxx11.h + mdp:/usr/include/qt6/QtCore/qatomicscopedvaluerollback.h + mdp:/usr/include/qt6/QtCore/qbasicatomic.h + mdp:/usr/include/qt6/QtCore/qbasictimer.h + mdp:/usr/include/qt6/QtCore/qbindingstorage.h + mdp:/usr/include/qt6/QtCore/qbitarray.h + mdp:/usr/include/qt6/QtCore/qbuffer.h + mdp:/usr/include/qt6/QtCore/qbytearray.h + mdp:/usr/include/qt6/QtCore/qbytearrayalgorithms.h + mdp:/usr/include/qt6/QtCore/qbytearraylist.h + mdp:/usr/include/qt6/QtCore/qbytearraymatcher.h + mdp:/usr/include/qt6/QtCore/qbytearrayview.h + mdp:/usr/include/qt6/QtCore/qcache.h + mdp:/usr/include/qt6/QtCore/qcalendar.h + mdp:/usr/include/qt6/QtCore/qcborarray.h + mdp:/usr/include/qt6/QtCore/qcborcommon.h + mdp:/usr/include/qt6/QtCore/qcbormap.h + mdp:/usr/include/qt6/QtCore/qcborstream.h + mdp:/usr/include/qt6/QtCore/qcborstreamreader.h + mdp:/usr/include/qt6/QtCore/qcborstreamwriter.h + mdp:/usr/include/qt6/QtCore/qcborvalue.h + mdp:/usr/include/qt6/QtCore/qchar.h + mdp:/usr/include/qt6/QtCore/qcheckedint_impl.h + mdp:/usr/include/qt6/QtCore/qchronotimer.h + mdp:/usr/include/qt6/QtCore/qcollator.h + mdp:/usr/include/qt6/QtCore/qcommandlineoption.h + mdp:/usr/include/qt6/QtCore/qcommandlineparser.h + mdp:/usr/include/qt6/QtCore/qcompare.h + mdp:/usr/include/qt6/QtCore/qcompare_impl.h + mdp:/usr/include/qt6/QtCore/qcomparehelpers.h + mdp:/usr/include/qt6/QtCore/qcompilerdetection.h + mdp:/usr/include/qt6/QtCore/qconcatenatetablesproxymodel.h + mdp:/usr/include/qt6/QtCore/qconfig-64.h + mdp:/usr/include/qt6/QtCore/qconfig.h + mdp:/usr/include/qt6/QtCore/qconstructormacros.h + mdp:/usr/include/qt6/QtCore/qcontainerfwd.h + mdp:/usr/include/qt6/QtCore/qcontainerinfo.h + mdp:/usr/include/qt6/QtCore/qcontainertools_impl.h + mdp:/usr/include/qt6/QtCore/qcontiguouscache.h + mdp:/usr/include/qt6/QtCore/qcoreapplication.h + mdp:/usr/include/qt6/QtCore/qcoreapplication_platform.h + mdp:/usr/include/qt6/QtCore/qcoreevent.h + mdp:/usr/include/qt6/QtCore/qcryptographichash.h + mdp:/usr/include/qt6/QtCore/qdarwinhelpers.h + mdp:/usr/include/qt6/QtCore/qdatastream.h + mdp:/usr/include/qt6/QtCore/qdatetime.h + mdp:/usr/include/qt6/QtCore/qdeadlinetimer.h + mdp:/usr/include/qt6/QtCore/qdebug.h + mdp:/usr/include/qt6/QtCore/qdir.h + mdp:/usr/include/qt6/QtCore/qdiriterator.h + mdp:/usr/include/qt6/QtCore/qdirlisting.h + mdp:/usr/include/qt6/QtCore/qeasingcurve.h + mdp:/usr/include/qt6/QtCore/qelapsedtimer.h + mdp:/usr/include/qt6/QtCore/qendian.h + mdp:/usr/include/qt6/QtCore/qeventloop.h + mdp:/usr/include/qt6/QtCore/qexception.h + mdp:/usr/include/qt6/QtCore/qexceptionhandling.h + mdp:/usr/include/qt6/QtCore/qfactoryinterface.h + mdp:/usr/include/qt6/QtCore/qfile.h + mdp:/usr/include/qt6/QtCore/qfiledevice.h + mdp:/usr/include/qt6/QtCore/qfileinfo.h + mdp:/usr/include/qt6/QtCore/qfileselector.h + mdp:/usr/include/qt6/QtCore/qfilesystemwatcher.h + mdp:/usr/include/qt6/QtCore/qflags.h + mdp:/usr/include/qt6/QtCore/qfloat16.h + mdp:/usr/include/qt6/QtCore/qforeach.h + mdp:/usr/include/qt6/QtCore/qfunctionaltools_impl.h + mdp:/usr/include/qt6/QtCore/qfunctionpointer.h + mdp:/usr/include/qt6/QtCore/qfuture.h + mdp:/usr/include/qt6/QtCore/qfuture_impl.h + mdp:/usr/include/qt6/QtCore/qfutureinterface.h + mdp:/usr/include/qt6/QtCore/qfuturesynchronizer.h + mdp:/usr/include/qt6/QtCore/qfuturewatcher.h + mdp:/usr/include/qt6/QtCore/qgenericatomic.h + mdp:/usr/include/qt6/QtCore/qglobal.h + mdp:/usr/include/qt6/QtCore/qglobalstatic.h + mdp:/usr/include/qt6/QtCore/qhash.h + mdp:/usr/include/qt6/QtCore/qhashfunctions.h + mdp:/usr/include/qt6/QtCore/qidentityproxymodel.h + mdp:/usr/include/qt6/QtCore/qiodevice.h + mdp:/usr/include/qt6/QtCore/qiodevicebase.h + mdp:/usr/include/qt6/QtCore/qitemselectionmodel.h + mdp:/usr/include/qt6/QtCore/qiterable.h + mdp:/usr/include/qt6/QtCore/qiterator.h + mdp:/usr/include/qt6/QtCore/qjsonarray.h + mdp:/usr/include/qt6/QtCore/qjsondocument.h + mdp:/usr/include/qt6/QtCore/qjsonobject.h + mdp:/usr/include/qt6/QtCore/qjsonparseerror.h + mdp:/usr/include/qt6/QtCore/qjsonvalue.h + mdp:/usr/include/qt6/QtCore/qlatin1stringmatcher.h + mdp:/usr/include/qt6/QtCore/qlatin1stringview.h + mdp:/usr/include/qt6/QtCore/qlibrary.h + mdp:/usr/include/qt6/QtCore/qlibraryinfo.h + mdp:/usr/include/qt6/QtCore/qline.h + mdp:/usr/include/qt6/QtCore/qlist.h + mdp:/usr/include/qt6/QtCore/qlocale.h + mdp:/usr/include/qt6/QtCore/qlockfile.h + mdp:/usr/include/qt6/QtCore/qlogging.h + mdp:/usr/include/qt6/QtCore/qloggingcategory.h + mdp:/usr/include/qt6/QtCore/qmalloc.h + mdp:/usr/include/qt6/QtCore/qmap.h + mdp:/usr/include/qt6/QtCore/qmargins.h + mdp:/usr/include/qt6/QtCore/qmath.h + mdp:/usr/include/qt6/QtCore/qmessageauthenticationcode.h + mdp:/usr/include/qt6/QtCore/qmetacontainer.h + mdp:/usr/include/qt6/QtCore/qmetaobject.h + mdp:/usr/include/qt6/QtCore/qmetatype.h + mdp:/usr/include/qt6/QtCore/qmimedata.h + mdp:/usr/include/qt6/QtCore/qmimedatabase.h + mdp:/usr/include/qt6/QtCore/qmimetype.h + mdp:/usr/include/qt6/QtCore/qminmax.h + mdp:/usr/include/qt6/QtCore/qmutex.h + mdp:/usr/include/qt6/QtCore/qnamespace.h + mdp:/usr/include/qt6/QtCore/qnativeinterface.h + mdp:/usr/include/qt6/QtCore/qnumeric.h + mdp:/usr/include/qt6/QtCore/qobject.h + mdp:/usr/include/qt6/QtCore/qobject_impl.h + mdp:/usr/include/qt6/QtCore/qobjectcleanuphandler.h + mdp:/usr/include/qt6/QtCore/qobjectdefs.h + mdp:/usr/include/qt6/QtCore/qobjectdefs_impl.h + mdp:/usr/include/qt6/QtCore/qoperatingsystemversion.h + mdp:/usr/include/qt6/QtCore/qoverload.h + mdp:/usr/include/qt6/QtCore/qpair.h + mdp:/usr/include/qt6/QtCore/qparallelanimationgroup.h + mdp:/usr/include/qt6/QtCore/qpauseanimation.h + mdp:/usr/include/qt6/QtCore/qpermissions.h + mdp:/usr/include/qt6/QtCore/qplugin.h + mdp:/usr/include/qt6/QtCore/qpluginloader.h + mdp:/usr/include/qt6/QtCore/qpoint.h + mdp:/usr/include/qt6/QtCore/qpointer.h + mdp:/usr/include/qt6/QtCore/qprocess.h + mdp:/usr/include/qt6/QtCore/qprocessordetection.h + mdp:/usr/include/qt6/QtCore/qpromise.h + mdp:/usr/include/qt6/QtCore/qproperty.h + mdp:/usr/include/qt6/QtCore/qpropertyanimation.h + mdp:/usr/include/qt6/QtCore/qpropertyprivate.h + mdp:/usr/include/qt6/QtCore/qqueue.h + mdp:/usr/include/qt6/QtCore/qrandom.h + mdp:/usr/include/qt6/QtCore/qrangemodel.h + mdp:/usr/include/qt6/QtCore/qrangemodel_impl.h + mdp:/usr/include/qt6/QtCore/qreadwritelock.h + mdp:/usr/include/qt6/QtCore/qrect.h + mdp:/usr/include/qt6/QtCore/qrefcount.h + mdp:/usr/include/qt6/QtCore/qregularexpression.h + mdp:/usr/include/qt6/QtCore/qresource.h + mdp:/usr/include/qt6/QtCore/qresultstore.h + mdp:/usr/include/qt6/QtCore/qrunnable.h + mdp:/usr/include/qt6/QtCore/qsavefile.h + mdp:/usr/include/qt6/QtCore/qscopedpointer.h + mdp:/usr/include/qt6/QtCore/qscopedvaluerollback.h + mdp:/usr/include/qt6/QtCore/qscopeguard.h + mdp:/usr/include/qt6/QtCore/qsemaphore.h + mdp:/usr/include/qt6/QtCore/qsequentialanimationgroup.h + mdp:/usr/include/qt6/QtCore/qsequentialiterable.h + mdp:/usr/include/qt6/QtCore/qset.h + mdp:/usr/include/qt6/QtCore/qsettings.h + mdp:/usr/include/qt6/QtCore/qshareddata.h + mdp:/usr/include/qt6/QtCore/qshareddata_impl.h + mdp:/usr/include/qt6/QtCore/qsharedmemory.h + mdp:/usr/include/qt6/QtCore/qsharedpointer.h + mdp:/usr/include/qt6/QtCore/qsharedpointer_impl.h + mdp:/usr/include/qt6/QtCore/qsignalmapper.h + mdp:/usr/include/qt6/QtCore/qsimd.h + mdp:/usr/include/qt6/QtCore/qsize.h + mdp:/usr/include/qt6/QtCore/qsocketnotifier.h + mdp:/usr/include/qt6/QtCore/qsortfilterproxymodel.h + mdp:/usr/include/qt6/QtCore/qspan.h + mdp:/usr/include/qt6/QtCore/qstack.h + mdp:/usr/include/qt6/QtCore/qstandardpaths.h + mdp:/usr/include/qt6/QtCore/qstaticlatin1stringmatcher.h + mdp:/usr/include/qt6/QtCore/qstdlibdetection.h + mdp:/usr/include/qt6/QtCore/qstorageinfo.h + mdp:/usr/include/qt6/QtCore/qstring.h + mdp:/usr/include/qt6/QtCore/qstringalgorithms.h + mdp:/usr/include/qt6/QtCore/qstringbuilder.h + mdp:/usr/include/qt6/QtCore/qstringconverter.h + mdp:/usr/include/qt6/QtCore/qstringconverter_base.h + mdp:/usr/include/qt6/QtCore/qstringfwd.h + mdp:/usr/include/qt6/QtCore/qstringlist.h + mdp:/usr/include/qt6/QtCore/qstringlistmodel.h + mdp:/usr/include/qt6/QtCore/qstringliteral.h + mdp:/usr/include/qt6/QtCore/qstringmatcher.h + mdp:/usr/include/qt6/QtCore/qstringtokenizer.h + mdp:/usr/include/qt6/QtCore/qstringview.h + mdp:/usr/include/qt6/QtCore/qswap.h + mdp:/usr/include/qt6/QtCore/qsysinfo.h + mdp:/usr/include/qt6/QtCore/qsystemdetection.h + mdp:/usr/include/qt6/QtCore/qsystemsemaphore.h + mdp:/usr/include/qt6/QtCore/qtaggedpointer.h + mdp:/usr/include/qt6/QtCore/qtclasshelpermacros.h + mdp:/usr/include/qt6/QtCore/qtconfiginclude.h + mdp:/usr/include/qt6/QtCore/qtconfigmacros.h + mdp:/usr/include/qt6/QtCore/qtcore-config.h + mdp:/usr/include/qt6/QtCore/qtcoreexports.h + mdp:/usr/include/qt6/QtCore/qtcoreglobal.h + mdp:/usr/include/qt6/QtCore/qtcoreversion.h + mdp:/usr/include/qt6/QtCore/qtdeprecationdefinitions.h + mdp:/usr/include/qt6/QtCore/qtdeprecationmarkers.h + mdp:/usr/include/qt6/QtCore/qtemporarydir.h + mdp:/usr/include/qt6/QtCore/qtemporaryfile.h + mdp:/usr/include/qt6/QtCore/qtenvironmentvariables.h + mdp:/usr/include/qt6/QtCore/qtestsupport_core.h + mdp:/usr/include/qt6/QtCore/qtextboundaryfinder.h + mdp:/usr/include/qt6/QtCore/qtextstream.h + mdp:/usr/include/qt6/QtCore/qtformat_impl.h + mdp:/usr/include/qt6/QtCore/qthread.h + mdp:/usr/include/qt6/QtCore/qthreadpool.h + mdp:/usr/include/qt6/QtCore/qthreadstorage.h + mdp:/usr/include/qt6/QtCore/qtimeline.h + mdp:/usr/include/qt6/QtCore/qtimer.h + mdp:/usr/include/qt6/QtCore/qtimezone.h + mdp:/usr/include/qt6/QtCore/qtipccommon.h + mdp:/usr/include/qt6/QtCore/qtmetamacros.h + mdp:/usr/include/qt6/QtCore/qtmocconstants.h + mdp:/usr/include/qt6/QtCore/qtnoop.h + mdp:/usr/include/qt6/QtCore/qtpreprocessorsupport.h + mdp:/usr/include/qt6/QtCore/qtranslator.h + mdp:/usr/include/qt6/QtCore/qtransposeproxymodel.h + mdp:/usr/include/qt6/QtCore/qtresource.h + mdp:/usr/include/qt6/QtCore/qtsan_impl.h + mdp:/usr/include/qt6/QtCore/qtsymbolmacros.h + mdp:/usr/include/qt6/QtCore/qttranslation.h + mdp:/usr/include/qt6/QtCore/qttypetraits.h + mdp:/usr/include/qt6/QtCore/qtversion.h + mdp:/usr/include/qt6/QtCore/qtversionchecks.h + mdp:/usr/include/qt6/QtCore/qtypeinfo.h + mdp:/usr/include/qt6/QtCore/qtyperevision.h + mdp:/usr/include/qt6/QtCore/qtypes.h + mdp:/usr/include/qt6/QtCore/qurl.h + mdp:/usr/include/qt6/QtCore/qurlquery.h + mdp:/usr/include/qt6/QtCore/qutf8stringview.h + mdp:/usr/include/qt6/QtCore/quuid.h + mdp:/usr/include/qt6/QtCore/qvariant.h + mdp:/usr/include/qt6/QtCore/qvariantanimation.h + mdp:/usr/include/qt6/QtCore/qvarianthash.h + mdp:/usr/include/qt6/QtCore/qvariantlist.h + mdp:/usr/include/qt6/QtCore/qvariantmap.h + mdp:/usr/include/qt6/QtCore/qvarlengtharray.h + mdp:/usr/include/qt6/QtCore/qvector.h + mdp:/usr/include/qt6/QtCore/qversionnumber.h + mdp:/usr/include/qt6/QtCore/qversiontagging.h + mdp:/usr/include/qt6/QtCore/qwaitcondition.h + mdp:/usr/include/qt6/QtCore/qwineventnotifier.h + mdp:/usr/include/qt6/QtCore/qxmlstream.h + mdp:/usr/include/qt6/QtCore/qxpfunctional.h + mdp:/usr/include/qt6/QtCore/qxptype_traits.h + mdp:/usr/include/qt6/QtCore/qyieldcpu.h + mdp:/usr/include/qt6/QtGui/QBrush + mdp:/usr/include/qt6/QtGui/QColor + mdp:/usr/include/qt6/QtGui/QFont + mdp:/usr/include/qt6/QtGui/QIcon + mdp:/usr/include/qt6/QtGui/QImage + mdp:/usr/include/qt6/QtGui/QPainter + mdp:/usr/include/qt6/QtGui/QPainterPath + mdp:/usr/include/qt6/QtGui/QPixmap + mdp:/usr/include/qt6/QtGui/QTransform + mdp:/usr/include/qt6/QtGui/qaction.h + mdp:/usr/include/qt6/QtGui/qbitmap.h + mdp:/usr/include/qt6/QtGui/qbrush.h + mdp:/usr/include/qt6/QtGui/qcolor.h + mdp:/usr/include/qt6/QtGui/qcursor.h + mdp:/usr/include/qt6/QtGui/qevent.h + mdp:/usr/include/qt6/QtGui/qeventpoint.h + mdp:/usr/include/qt6/QtGui/qfont.h + mdp:/usr/include/qt6/QtGui/qfontinfo.h + mdp:/usr/include/qt6/QtGui/qfontmetrics.h + mdp:/usr/include/qt6/QtGui/qfontvariableaxis.h + mdp:/usr/include/qt6/QtGui/qguiapplication.h + mdp:/usr/include/qt6/QtGui/qguiapplication_platform.h + mdp:/usr/include/qt6/QtGui/qicon.h + mdp:/usr/include/qt6/QtGui/qimage.h + mdp:/usr/include/qt6/QtGui/qinputdevice.h + mdp:/usr/include/qt6/QtGui/qinputmethod.h + mdp:/usr/include/qt6/QtGui/qkeysequence.h + mdp:/usr/include/qt6/QtGui/qpaintdevice.h + mdp:/usr/include/qt6/QtGui/qpainter.h + mdp:/usr/include/qt6/QtGui/qpainterpath.h + mdp:/usr/include/qt6/QtGui/qpalette.h + mdp:/usr/include/qt6/QtGui/qpen.h + mdp:/usr/include/qt6/QtGui/qpixelformat.h + mdp:/usr/include/qt6/QtGui/qpixmap.h + mdp:/usr/include/qt6/QtGui/qpointingdevice.h + mdp:/usr/include/qt6/QtGui/qpolygon.h + mdp:/usr/include/qt6/QtGui/qregion.h + mdp:/usr/include/qt6/QtGui/qrgb.h + mdp:/usr/include/qt6/QtGui/qrgba64.h + mdp:/usr/include/qt6/QtGui/qscreen.h + mdp:/usr/include/qt6/QtGui/qscreen_platform.h + mdp:/usr/include/qt6/QtGui/qsurface.h + mdp:/usr/include/qt6/QtGui/qsurfaceformat.h + mdp:/usr/include/qt6/QtGui/qtestsupport_gui.h + mdp:/usr/include/qt6/QtGui/qtextoption.h + mdp:/usr/include/qt6/QtGui/qtgui-config.h + mdp:/usr/include/qt6/QtGui/qtguiexports.h + mdp:/usr/include/qt6/QtGui/qtguiglobal.h + mdp:/usr/include/qt6/QtGui/qtransform.h + mdp:/usr/include/qt6/QtGui/qvector2d.h + mdp:/usr/include/qt6/QtGui/qvector3d.h + mdp:/usr/include/qt6/QtGui/qvector4d.h + mdp:/usr/include/qt6/QtGui/qvectornd.h + mdp:/usr/include/qt6/QtGui/qwindow.h + mdp:/usr/include/qt6/QtGui/qwindowdefs.h + mdp:/usr/include/qt6/QtTest/QtTest + mdp:/usr/include/qt6/QtTest/QtTestDepends + mdp:/usr/include/qt6/QtTest/qabstractitemmodeltester.h + mdp:/usr/include/qt6/QtTest/qbenchmark.h + mdp:/usr/include/qt6/QtTest/qbenchmarkmetric.h + mdp:/usr/include/qt6/QtTest/qsignalspy.h + mdp:/usr/include/qt6/QtTest/qtest.h + mdp:/usr/include/qt6/QtTest/qtest_gui.h + mdp:/usr/include/qt6/QtTest/qtest_widgets.h + mdp:/usr/include/qt6/QtTest/qtestassert.h + mdp:/usr/include/qt6/QtTest/qtestcase.h + mdp:/usr/include/qt6/QtTest/qtestdata.h + mdp:/usr/include/qt6/QtTest/qtestevent.h + mdp:/usr/include/qt6/QtTest/qtesteventloop.h + mdp:/usr/include/qt6/QtTest/qtestkeyboard.h + mdp:/usr/include/qt6/QtTest/qtestmouse.h + mdp:/usr/include/qt6/QtTest/qtestspontaneevent.h + mdp:/usr/include/qt6/QtTest/qtestsystem.h + mdp:/usr/include/qt6/QtTest/qtesttostring.h + mdp:/usr/include/qt6/QtTest/qtesttouch.h + mdp:/usr/include/qt6/QtTest/qtestwheel.h + mdp:/usr/include/qt6/QtTest/qttestexports.h + mdp:/usr/include/qt6/QtTest/qttestglobal.h + mdp:/usr/include/qt6/QtTest/qttestlib-config.h + mdp:/usr/include/qt6/QtTest/qttestversion.h + mdp:/usr/include/qt6/QtWidgets/QGraphicsItem + mdp:/usr/include/qt6/QtWidgets/QGraphicsSceneMouseEvent + mdp:/usr/include/qt6/QtWidgets/QSizePolicy + mdp:/usr/include/qt6/QtWidgets/qapplication.h + mdp:/usr/include/qt6/QtWidgets/qgraphicsitem.h + mdp:/usr/include/qt6/QtWidgets/qgraphicssceneevent.h + mdp:/usr/include/qt6/QtWidgets/qsizepolicy.h + mdp:/usr/include/qt6/QtWidgets/qtestsupport_widgets.h + mdp:/usr/include/qt6/QtWidgets/qtwidgets-config.h + mdp:/usr/include/qt6/QtWidgets/qtwidgetsexports.h + mdp:/usr/include/qt6/QtWidgets/qtwidgetsglobal.h + mdp:/usr/include/qt6/QtWidgets/qwidget.h + mdp:/usr/include/sched.h + mdp:/usr/include/semaphore.h + mdp:/usr/include/stdc-predef.h + mdp:/usr/include/stdint.h + mdp:/usr/include/stdio.h + mdp:/usr/include/stdlib.h + mdp:/usr/include/string.h + mdp:/usr/include/strings.h + mdp:/usr/include/sys/cdefs.h + mdp:/usr/include/sys/select.h + mdp:/usr/include/sys/single_threaded.h + mdp:/usr/include/sys/syscall.h + mdp:/usr/include/sys/time.h + mdp:/usr/include/sys/types.h + mdp:/usr/include/syscall.h + mdp:/usr/include/time.h + mdp:/usr/include/unistd.h + mdp:/usr/include/wchar.h + mdp:/usr/include/wctype.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/adxintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxavx512intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxbf16intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxcomplexintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxfp16intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxfp8intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxint8intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxmovrsintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxtf32intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxtileintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxtransposeintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2-512bf16intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2-512convertintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2-512mediaintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2-512minmaxintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2-512satcvtintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2bf16intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2convertintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2copyintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2mediaintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2minmaxintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2satcvtintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx2intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512bf16intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512bf16vlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512bitalgintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512bitalgvlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512bwintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512cdintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512dqintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512fintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512fp16intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512fp16vlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512ifmaintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512ifmavlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vbmi2intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vbmi2vlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vbmiintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vbmivlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vlbwintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vldqintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vnniintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vnnivlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vp2intersectintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vp2intersectvlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vpopcntdqintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vpopcntdqvlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avxifmaintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avxintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avxneconvertintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avxvnniint16intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avxvnniint8intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avxvnniintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/bmi2intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/bmiintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/cetintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/cldemoteintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/clflushoptintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/clwbintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/clzerointrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/cmpccxaddintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/emmintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/enqcmdintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/f16cintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/fmaintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/fxsrintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/gfniintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/hresetintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/ia32intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/immintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/keylockerintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/lwpintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/lzcntintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/mm_malloc.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/mmintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/movdirintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/movrsintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/mwaitintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/mwaitxintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/pconfigintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/pkuintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/pmmintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/popcntintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/prfchiintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/prfchwintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/raointintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/rdseedintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/rtmintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/serializeintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/sgxintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/sha512intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/shaintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/sm3intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/sm4intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/smmintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stdarg.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stdbool.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stddef.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/tbmintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/tmmintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/tsxldtrkintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/uintrintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/usermsrintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/vaesintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/vpclmulqdqintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/waitpkgintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/wbnoinvdintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/wmmintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/x86gprintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/xmmintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/xsavecintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/xsaveintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/xsaveoptintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/xsavesintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/xtestintrin.h +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/annotation_items.cpp +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/annotation_items.h diff --git a/build-linux/tests/CMakeFiles/test_db.dir/__/src/db.cpp.o b/build-linux/tests/CMakeFiles/test_db.dir/__/src/db.cpp.o new file mode 100644 index 00000000..db945ab6 Binary files /dev/null and b/build-linux/tests/CMakeFiles/test_db.dir/__/src/db.cpp.o differ diff --git a/build-linux/tests/CMakeFiles/test_db.dir/__/src/log_manager.cpp.o b/build-linux/tests/CMakeFiles/test_db.dir/__/src/log_manager.cpp.o new file mode 100644 index 00000000..c74d4040 Binary files /dev/null and b/build-linux/tests/CMakeFiles/test_db.dir/__/src/log_manager.cpp.o differ diff --git a/build-linux/tests/CMakeFiles/test_db.dir/test_db.cpp.o b/build-linux/tests/CMakeFiles/test_db.dir/test_db.cpp.o new file mode 100644 index 00000000..de9816e6 Binary files /dev/null and b/build-linux/tests/CMakeFiles/test_db.dir/test_db.cpp.o differ diff --git a/build-linux/tests/CMakeFiles/test_db.dir/test_db_autogen/mocs_compilation.cpp.o b/build-linux/tests/CMakeFiles/test_db.dir/test_db_autogen/mocs_compilation.cpp.o new file mode 100644 index 00000000..1596fce6 Binary files /dev/null and b/build-linux/tests/CMakeFiles/test_db.dir/test_db_autogen/mocs_compilation.cpp.o differ diff --git a/build-linux/tests/CMakeFiles/test_db_autogen.dir/AutogenInfo.json b/build-linux/tests/CMakeFiles/test_db_autogen.dir/AutogenInfo.json new file mode 100644 index 00000000..8493b7f3 --- /dev/null +++ b/build-linux/tests/CMakeFiles/test_db_autogen.dir/AutogenInfo.json @@ -0,0 +1,197 @@ +{ + "BUILD_DIR" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_db_autogen", + "CMAKE_BINARY_DIR" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux", + "CMAKE_CURRENT_BINARY_DIR" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests", + "CMAKE_CURRENT_SOURCE_DIR" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests", + "CMAKE_EXECUTABLE" : "/usr/bin/cmake", + "CMAKE_LIST_FILES" : + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/CMakeLists.txt", + "/usr/lib64/cmake/Qt6/Qt6ConfigVersion.cmake", + "/usr/lib64/cmake/Qt6/Qt6ConfigVersionImpl.cmake", + "/usr/lib64/cmake/Qt6/Qt6Config.cmake", + "/usr/lib64/cmake/Qt6/QtPublicCMakeEarlyPolicyHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicCMakeHelpers.cmake", + "/usr/lib64/cmake/Qt6/Qt6ConfigExtras.cmake", + "/usr/lib64/cmake/Qt6/QtPublicCMakeVersionHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtInstallPaths.cmake", + "/usr/lib64/cmake/Qt6/Qt6Targets.cmake", + "/usr/lib64/cmake/Qt6/Qt6VersionlessAliasTargets.cmake", + "/usr/lib64/cmake/Qt6/QtFeature.cmake", + "/usr/share/cmake/Modules/CheckCXXCompilerFlag.cmake", + "/usr/lib64/cmake/Qt6/QtFeatureCommon.cmake", + "/usr/lib64/cmake/Qt6/QtPublicAndroidHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicAppleHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicCMakeHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicCMakeVersionHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicDependencyHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicExternalProjectHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicFinalizerHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicFindPackageHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicGitHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicPluginHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicPluginHelpers_v2.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomAttributionHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomBuildToolHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomCommonGenerationHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomCpeHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomCycloneDXHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomDocumentNamespaceHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomDepHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomExternalReferenceHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomFileHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomGenerationHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomGenerationCycloneDXHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomLicenseHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomOpsHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomPurlHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomPythonHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomQtEntityHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomRelationshipHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomSystemDepHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicTargetHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicTestHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicToolHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicWalkLibsHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicWindowsHelpers.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6/Qt6Dependencies.cmake", + "/usr/lib64/cmake/Qt6Test/Qt6TestConfigVersion.cmake", + "/usr/lib64/cmake/Qt6Test/Qt6TestConfigVersionImpl.cmake", + "/usr/lib64/cmake/Qt6Test/Qt6TestConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6Test/Qt6TestDependencies.cmake", + "/usr/lib64/cmake/Qt6Test/Qt6TestTargets.cmake", + "/usr/lib64/cmake/Qt6Test/Qt6TestTargets-relwithdebinfo.cmake", + "/usr/lib64/cmake/Qt6Test/Qt6TestAdditionalTargetInfo.cmake", + "/usr/lib64/cmake/Qt6Test/QtTestProperties.cmake", + "/usr/lib64/cmake/Qt6Test/Qt6TestVersionlessAliasTargets.cmake" + ], + "CMAKE_SOURCE_DIR" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6", + "CROSS_CONFIG" : false, + "DEP_FILE" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_db_autogen/deps", + "DEP_FILE_RULE_NAME" : "test_db_autogen/timestamp", + "HEADERS" : + [ + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/db.h", + "MU", + "VNU7RW3YIC/moc_db.cpp", + null + ], + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/log_manager.h", + "MU", + "VNU7RW3YIC/moc_log_manager.cpp", + null + ] + ], + "HEADER_EXTENSIONS" : [ "h", "hh", "h++", "hm", "hpp", "hxx", "in", "txx" ], + "INCLUDE_DIR" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_db_autogen/include", + "MOC_COMPILATION_FILE" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_db_autogen/mocs_compilation.cpp", + "MOC_DEFINITIONS" : + [ + "FTK_API_GL_4_1", + "QT_CORE_LIB", + "QT_NO_DEBUG", + "QT_SQL_LIB", + "QT_TESTCASE_BUILDDIR=\"/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests\"", + "QT_TESTCASE_SOURCEDIR=\"/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests\"", + "QT_TESTLIB_LIB", + "TLRENDER_EXR", + "TLRENDER_FFMPEG", + "TLRENDER_FFMPEG_PLUGIN", + "TLRENDER_JPEG", + "TLRENDER_OCIO", + "TLRENDER_OIIO", + "TLRENDER_PNG", + "TLRENDER_SDL2", + "TLRENDER_TIFF" + ], + "MOC_DEPEND_FILTERS" : + [ + [ + "Q_PLUGIN_METADATA", + "[\n][ \t]*Q_PLUGIN_METADATA[ \t]*\\([^\\)]*FILE[ \t]*\"([^\"]+)\"" + ] + ], + "MOC_INCLUDES" : + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src", + "/usr/include/qt6/QtTest", + "/usr/include/qt6", + "/usr/include/qt6/QtCore", + "/usr/lib64/qt6/mkspecs/linux-g++", + "/usr/include/qt6/QtSql", + "/usr/include/c++/15", + "/usr/include/c++/15/x86_64-redhat-linux", + "/usr/include/c++/15/backward", + "/usr/lib/gcc/x86_64-redhat-linux/15/include", + "/usr/local/include", + "/usr/include" + ], + "MOC_MACRO_NAMES" : + [ + "Q_OBJECT", + "Q_GADGET", + "Q_NAMESPACE", + "Q_NAMESPACE_EXPORT", + "Q_GADGET_EXPORT", + "Q_ENUM_NS" + ], + "MOC_OPTIONS" : [], + "MOC_PATH_PREFIX" : false, + "MOC_PREDEFS_CMD" : + [ + "/usr/bin/c++", + "-std=gnu++20", + "-w", + "-dM", + "-E", + "/usr/share/cmake/Modules/CMakeCXXCompilerABI.cpp" + ], + "MOC_PREDEFS_FILE" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_db_autogen/moc_predefs.h", + "MOC_RELAXED_MODE" : false, + "MOC_SKIP" : + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_simple_autogen/mocs_compilation.cpp" + ], + "MULTI_CONFIG" : false, + "PARALLEL" : 16, + "PARSE_CACHE_FILE" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/CMakeFiles/test_db_autogen.dir/ParseCache.txt", + "QT_MOC_EXECUTABLE" : "/usr/lib64/qt6/libexec/moc", + "QT_UIC_EXECUTABLE" : "/usr/lib64/qt6/libexec/uic", + "QT_VERSION_MAJOR" : 6, + "QT_VERSION_MINOR" : 10, + "SETTINGS_FILE" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/CMakeFiles/test_db_autogen.dir/AutogenUsed.txt", + "SOURCES" : + [ + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/db.cpp", + "MU", + null + ], + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/log_manager.cpp", + "MU", + null + ], + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/test_db.cpp", + "MU", + null + ] + ], + "UIC_OPTIONS" : [], + "UIC_SEARCH_PATHS" : [], + "UIC_SKIP" : + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_simple_autogen/mocs_compilation.cpp" + ], + "UIC_UI_FILES" : [], + "USE_BETTER_GRAPH" : true, + "VERBOSITY" : 0 +} diff --git a/build-linux/tests/CMakeFiles/test_db_autogen.dir/AutogenUsed.txt b/build-linux/tests/CMakeFiles/test_db_autogen.dir/AutogenUsed.txt new file mode 100644 index 00000000..1aadbffb --- /dev/null +++ b/build-linux/tests/CMakeFiles/test_db_autogen.dir/AutogenUsed.txt @@ -0,0 +1,2 @@ +moc:cc81155ca21950b1752b9bc76e01201e5f7ce7d5f291ff70ab4763c3a13b77a4 +uic:0df7b06f04b60705a14ff966fc10725af0fb193398324deeaf17e44a5f9db1e0 diff --git a/build-linux/tests/CMakeFiles/test_db_autogen.dir/ParseCache.txt b/build-linux/tests/CMakeFiles/test_db_autogen.dir/ParseCache.txt new file mode 100644 index 00000000..a43667b1 --- /dev/null +++ b/build-linux/tests/CMakeFiles/test_db_autogen.dir/ParseCache.txt @@ -0,0 +1,1715 @@ +# Generated by CMake. Changes will be overwritten. +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/test_db.cpp + mmc:Q_OBJECT + mid:test_db.moc + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_db_autogen/moc_predefs.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/db.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/i_asset_database.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/test_db.cpp + mdp:/usr/include/asm-generic/bitsperlong.h + mdp:/usr/include/asm-generic/errno-base.h + mdp:/usr/include/asm-generic/errno.h + mdp:/usr/include/asm-generic/int-ll64.h + mdp:/usr/include/asm-generic/posix_types.h + mdp:/usr/include/asm-generic/types.h + mdp:/usr/include/asm/bitsperlong.h + mdp:/usr/include/asm/errno.h + mdp:/usr/include/asm/posix_types.h + mdp:/usr/include/asm/posix_types_64.h + mdp:/usr/include/asm/types.h + mdp:/usr/include/asm/unistd.h + mdp:/usr/include/asm/unistd_64.h + mdp:/usr/include/assert.h + mdp:/usr/include/bits/atomic_wide_counter.h + mdp:/usr/include/bits/byteswap.h + mdp:/usr/include/bits/confname.h + mdp:/usr/include/bits/cpu-set.h + mdp:/usr/include/bits/endian.h + mdp:/usr/include/bits/endianness.h + mdp:/usr/include/bits/environments.h + mdp:/usr/include/bits/errno.h + mdp:/usr/include/bits/floatn-common.h + mdp:/usr/include/bits/floatn.h + mdp:/usr/include/bits/getopt_core.h + mdp:/usr/include/bits/getopt_posix.h + mdp:/usr/include/bits/libc-header-start.h + mdp:/usr/include/bits/locale.h + mdp:/usr/include/bits/long-double.h + mdp:/usr/include/bits/posix_opt.h + mdp:/usr/include/bits/pthread_stack_min-dynamic.h + mdp:/usr/include/bits/pthreadtypes-arch.h + mdp:/usr/include/bits/pthreadtypes.h + mdp:/usr/include/bits/sched.h + mdp:/usr/include/bits/select.h + mdp:/usr/include/bits/semaphore.h + mdp:/usr/include/bits/setjmp.h + mdp:/usr/include/bits/stdint-intn.h + mdp:/usr/include/bits/stdio_lim.h + mdp:/usr/include/bits/struct_mutex.h + mdp:/usr/include/bits/struct_rwlock.h + mdp:/usr/include/bits/syscall.h + mdp:/usr/include/bits/thread-shared-types.h + mdp:/usr/include/bits/time.h + mdp:/usr/include/bits/time64.h + mdp:/usr/include/bits/timesize.h + mdp:/usr/include/bits/timex.h + mdp:/usr/include/bits/types.h + mdp:/usr/include/bits/types/FILE.h + mdp:/usr/include/bits/types/__FILE.h + mdp:/usr/include/bits/types/__fpos64_t.h + mdp:/usr/include/bits/types/__fpos_t.h + mdp:/usr/include/bits/types/__locale_t.h + mdp:/usr/include/bits/types/__mbstate_t.h + mdp:/usr/include/bits/types/__sigset_t.h + mdp:/usr/include/bits/types/clock_t.h + mdp:/usr/include/bits/types/clockid_t.h + mdp:/usr/include/bits/types/cookie_io_functions_t.h + mdp:/usr/include/bits/types/error_t.h + mdp:/usr/include/bits/types/locale_t.h + mdp:/usr/include/bits/types/mbstate_t.h + mdp:/usr/include/bits/types/sigset_t.h + mdp:/usr/include/bits/types/struct_FILE.h + mdp:/usr/include/bits/types/struct___jmp_buf_tag.h + mdp:/usr/include/bits/types/struct_itimerspec.h + mdp:/usr/include/bits/types/struct_sched_param.h + mdp:/usr/include/bits/types/struct_timespec.h + mdp:/usr/include/bits/types/struct_timeval.h + mdp:/usr/include/bits/types/struct_tm.h + mdp:/usr/include/bits/types/time_t.h + mdp:/usr/include/bits/types/timer_t.h + mdp:/usr/include/bits/types/wint_t.h + mdp:/usr/include/bits/typesizes.h + mdp:/usr/include/bits/uintn-identity.h + mdp:/usr/include/bits/unistd_ext.h + mdp:/usr/include/bits/wchar.h + mdp:/usr/include/bits/wctype-wchar.h + mdp:/usr/include/bits/wordsize.h + mdp:/usr/include/c++/15/algorithm + mdp:/usr/include/c++/15/array + mdp:/usr/include/c++/15/atomic + mdp:/usr/include/c++/15/backward/auto_ptr.h + mdp:/usr/include/c++/15/backward/binders.h + mdp:/usr/include/c++/15/bit + mdp:/usr/include/c++/15/bits/algorithmfwd.h + mdp:/usr/include/c++/15/bits/align.h + mdp:/usr/include/c++/15/bits/alloc_traits.h + mdp:/usr/include/c++/15/bits/allocated_ptr.h + mdp:/usr/include/c++/15/bits/allocator.h + mdp:/usr/include/c++/15/bits/atomic_base.h + mdp:/usr/include/c++/15/bits/atomic_futex.h + mdp:/usr/include/c++/15/bits/atomic_lockfree_defines.h + mdp:/usr/include/c++/15/bits/atomic_timed_wait.h + mdp:/usr/include/c++/15/bits/atomic_wait.h + mdp:/usr/include/c++/15/bits/basic_ios.h + mdp:/usr/include/c++/15/bits/basic_ios.tcc + mdp:/usr/include/c++/15/bits/basic_string.h + mdp:/usr/include/c++/15/bits/basic_string.tcc + mdp:/usr/include/c++/15/bits/char_traits.h + mdp:/usr/include/c++/15/bits/charconv.h + mdp:/usr/include/c++/15/bits/chrono.h + mdp:/usr/include/c++/15/bits/chrono_io.h + mdp:/usr/include/c++/15/bits/codecvt.h + mdp:/usr/include/c++/15/bits/concept_check.h + mdp:/usr/include/c++/15/bits/cpp_type_traits.h + mdp:/usr/include/c++/15/bits/cxxabi_forced.h + mdp:/usr/include/c++/15/bits/cxxabi_init_exception.h + mdp:/usr/include/c++/15/bits/enable_special_members.h + mdp:/usr/include/c++/15/bits/erase_if.h + mdp:/usr/include/c++/15/bits/exception.h + mdp:/usr/include/c++/15/bits/exception_defines.h + mdp:/usr/include/c++/15/bits/exception_ptr.h + mdp:/usr/include/c++/15/bits/functexcept.h + mdp:/usr/include/c++/15/bits/functional_hash.h + mdp:/usr/include/c++/15/bits/hash_bytes.h + mdp:/usr/include/c++/15/bits/hashtable.h + mdp:/usr/include/c++/15/bits/hashtable_policy.h + mdp:/usr/include/c++/15/bits/invoke.h + mdp:/usr/include/c++/15/bits/ios_base.h + mdp:/usr/include/c++/15/bits/istream.tcc + mdp:/usr/include/c++/15/bits/iterator_concepts.h + mdp:/usr/include/c++/15/bits/list.tcc + mdp:/usr/include/c++/15/bits/locale_classes.h + mdp:/usr/include/c++/15/bits/locale_classes.tcc + mdp:/usr/include/c++/15/bits/locale_conv.h + mdp:/usr/include/c++/15/bits/locale_facets.h + mdp:/usr/include/c++/15/bits/locale_facets.tcc + mdp:/usr/include/c++/15/bits/locale_facets_nonio.h + mdp:/usr/include/c++/15/bits/locale_facets_nonio.tcc + mdp:/usr/include/c++/15/bits/localefwd.h + mdp:/usr/include/c++/15/bits/max_size_type.h + mdp:/usr/include/c++/15/bits/memory_resource.h + mdp:/usr/include/c++/15/bits/memoryfwd.h + mdp:/usr/include/c++/15/bits/move.h + mdp:/usr/include/c++/15/bits/nested_exception.h + mdp:/usr/include/c++/15/bits/new_allocator.h + mdp:/usr/include/c++/15/bits/node_handle.h + mdp:/usr/include/c++/15/bits/ostream.h + mdp:/usr/include/c++/15/bits/ostream.tcc + mdp:/usr/include/c++/15/bits/ostream_insert.h + mdp:/usr/include/c++/15/bits/parse_numbers.h + mdp:/usr/include/c++/15/bits/postypes.h + mdp:/usr/include/c++/15/bits/predefined_ops.h + mdp:/usr/include/c++/15/bits/ptr_traits.h + mdp:/usr/include/c++/15/bits/quoted_string.h + mdp:/usr/include/c++/15/bits/random.h + mdp:/usr/include/c++/15/bits/random.tcc + mdp:/usr/include/c++/15/bits/range_access.h + mdp:/usr/include/c++/15/bits/ranges_algo.h + mdp:/usr/include/c++/15/bits/ranges_algobase.h + mdp:/usr/include/c++/15/bits/ranges_base.h + mdp:/usr/include/c++/15/bits/ranges_cmp.h + mdp:/usr/include/c++/15/bits/ranges_uninitialized.h + mdp:/usr/include/c++/15/bits/ranges_util.h + mdp:/usr/include/c++/15/bits/refwrap.h + mdp:/usr/include/c++/15/bits/requires_hosted.h + mdp:/usr/include/c++/15/bits/semaphore_base.h + mdp:/usr/include/c++/15/bits/shared_ptr.h + mdp:/usr/include/c++/15/bits/shared_ptr_atomic.h + mdp:/usr/include/c++/15/bits/shared_ptr_base.h + mdp:/usr/include/c++/15/bits/specfun.h + mdp:/usr/include/c++/15/bits/sstream.tcc + mdp:/usr/include/c++/15/bits/std_abs.h + mdp:/usr/include/c++/15/bits/std_function.h + mdp:/usr/include/c++/15/bits/std_mutex.h + mdp:/usr/include/c++/15/bits/std_thread.h + mdp:/usr/include/c++/15/bits/stl_algo.h + mdp:/usr/include/c++/15/bits/stl_algobase.h + mdp:/usr/include/c++/15/bits/stl_bvector.h + mdp:/usr/include/c++/15/bits/stl_construct.h + mdp:/usr/include/c++/15/bits/stl_function.h + mdp:/usr/include/c++/15/bits/stl_heap.h + mdp:/usr/include/c++/15/bits/stl_iterator.h + mdp:/usr/include/c++/15/bits/stl_iterator_base_funcs.h + mdp:/usr/include/c++/15/bits/stl_iterator_base_types.h + mdp:/usr/include/c++/15/bits/stl_list.h + mdp:/usr/include/c++/15/bits/stl_map.h + mdp:/usr/include/c++/15/bits/stl_multimap.h + mdp:/usr/include/c++/15/bits/stl_multiset.h + mdp:/usr/include/c++/15/bits/stl_numeric.h + mdp:/usr/include/c++/15/bits/stl_pair.h + mdp:/usr/include/c++/15/bits/stl_raw_storage_iter.h + mdp:/usr/include/c++/15/bits/stl_relops.h + mdp:/usr/include/c++/15/bits/stl_set.h + mdp:/usr/include/c++/15/bits/stl_tempbuf.h + mdp:/usr/include/c++/15/bits/stl_tree.h + mdp:/usr/include/c++/15/bits/stl_uninitialized.h + mdp:/usr/include/c++/15/bits/stl_vector.h + mdp:/usr/include/c++/15/bits/stream_iterator.h + mdp:/usr/include/c++/15/bits/streambuf.tcc + mdp:/usr/include/c++/15/bits/streambuf_iterator.h + mdp:/usr/include/c++/15/bits/string_view.tcc + mdp:/usr/include/c++/15/bits/stringfwd.h + mdp:/usr/include/c++/15/bits/this_thread_sleep.h + mdp:/usr/include/c++/15/bits/uniform_int_dist.h + mdp:/usr/include/c++/15/bits/unique_lock.h + mdp:/usr/include/c++/15/bits/unique_ptr.h + mdp:/usr/include/c++/15/bits/unordered_map.h + mdp:/usr/include/c++/15/bits/unordered_set.h + mdp:/usr/include/c++/15/bits/uses_allocator.h + mdp:/usr/include/c++/15/bits/uses_allocator_args.h + mdp:/usr/include/c++/15/bits/utility.h + mdp:/usr/include/c++/15/bits/vector.tcc + mdp:/usr/include/c++/15/bits/version.h + mdp:/usr/include/c++/15/cassert + mdp:/usr/include/c++/15/cctype + mdp:/usr/include/c++/15/cerrno + mdp:/usr/include/c++/15/charconv + mdp:/usr/include/c++/15/chrono + mdp:/usr/include/c++/15/climits + mdp:/usr/include/c++/15/clocale + mdp:/usr/include/c++/15/cmath + mdp:/usr/include/c++/15/compare + mdp:/usr/include/c++/15/concepts + mdp:/usr/include/c++/15/condition_variable + mdp:/usr/include/c++/15/cstddef + mdp:/usr/include/c++/15/cstdint + mdp:/usr/include/c++/15/cstdio + mdp:/usr/include/c++/15/cstdlib + mdp:/usr/include/c++/15/cstring + mdp:/usr/include/c++/15/ctime + mdp:/usr/include/c++/15/cwchar + mdp:/usr/include/c++/15/cwctype + mdp:/usr/include/c++/15/debug/assertions.h + mdp:/usr/include/c++/15/debug/debug.h + mdp:/usr/include/c++/15/exception + mdp:/usr/include/c++/15/experimental/source_location + mdp:/usr/include/c++/15/ext/aligned_buffer.h + mdp:/usr/include/c++/15/ext/alloc_traits.h + mdp:/usr/include/c++/15/ext/atomicity.h + mdp:/usr/include/c++/15/ext/concurrence.h + mdp:/usr/include/c++/15/ext/numeric_traits.h + mdp:/usr/include/c++/15/ext/string_conversions.h + mdp:/usr/include/c++/15/ext/type_traits.h + mdp:/usr/include/c++/15/filesystem + mdp:/usr/include/c++/15/format + mdp:/usr/include/c++/15/functional + mdp:/usr/include/c++/15/future + mdp:/usr/include/c++/15/initializer_list + mdp:/usr/include/c++/15/iomanip + mdp:/usr/include/c++/15/ios + mdp:/usr/include/c++/15/iosfwd + mdp:/usr/include/c++/15/istream + mdp:/usr/include/c++/15/iterator + mdp:/usr/include/c++/15/limits + mdp:/usr/include/c++/15/list + mdp:/usr/include/c++/15/locale + mdp:/usr/include/c++/15/map + mdp:/usr/include/c++/15/memory + mdp:/usr/include/c++/15/memory_resource + mdp:/usr/include/c++/15/mutex + mdp:/usr/include/c++/15/new + mdp:/usr/include/c++/15/numeric + mdp:/usr/include/c++/15/optional + mdp:/usr/include/c++/15/ostream + mdp:/usr/include/c++/15/pstl/execution_defs.h + mdp:/usr/include/c++/15/pstl/glue_numeric_defs.h + mdp:/usr/include/c++/15/pstl/pstl_config.h + mdp:/usr/include/c++/15/random + mdp:/usr/include/c++/15/ratio + mdp:/usr/include/c++/15/semaphore + mdp:/usr/include/c++/15/set + mdp:/usr/include/c++/15/shared_mutex + mdp:/usr/include/c++/15/source_location + mdp:/usr/include/c++/15/sstream + mdp:/usr/include/c++/15/stdexcept + mdp:/usr/include/c++/15/stdlib.h + mdp:/usr/include/c++/15/stop_token + mdp:/usr/include/c++/15/streambuf + mdp:/usr/include/c++/15/string + mdp:/usr/include/c++/15/string_view + mdp:/usr/include/c++/15/system_error + mdp:/usr/include/c++/15/tr1/bessel_function.tcc + mdp:/usr/include/c++/15/tr1/beta_function.tcc + mdp:/usr/include/c++/15/tr1/ell_integral.tcc + mdp:/usr/include/c++/15/tr1/exp_integral.tcc + mdp:/usr/include/c++/15/tr1/gamma.tcc + mdp:/usr/include/c++/15/tr1/hypergeometric.tcc + mdp:/usr/include/c++/15/tr1/legendre_function.tcc + mdp:/usr/include/c++/15/tr1/modified_bessel_func.tcc + mdp:/usr/include/c++/15/tr1/poly_hermite.tcc + mdp:/usr/include/c++/15/tr1/poly_laguerre.tcc + mdp:/usr/include/c++/15/tr1/riemann_zeta.tcc + mdp:/usr/include/c++/15/tr1/special_function_util.h + mdp:/usr/include/c++/15/tuple + mdp:/usr/include/c++/15/type_traits + mdp:/usr/include/c++/15/typeinfo + mdp:/usr/include/c++/15/unordered_map + mdp:/usr/include/c++/15/unordered_set + mdp:/usr/include/c++/15/utility + mdp:/usr/include/c++/15/variant + mdp:/usr/include/c++/15/vector + mdp:/usr/include/c++/15/version + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/atomic_word.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++allocator.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++config.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++locale.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/cpu_defines.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/ctype_base.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/ctype_inline.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/error_constants.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/gthr-default.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/gthr.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/messages_members.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/opt_random.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/os_defines.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/time_members.h + mdp:/usr/include/ctype.h + mdp:/usr/include/endian.h + mdp:/usr/include/errno.h + mdp:/usr/include/features-time64.h + mdp:/usr/include/features.h + mdp:/usr/include/gnu/stubs-64.h + mdp:/usr/include/gnu/stubs.h + mdp:/usr/include/libintl.h + mdp:/usr/include/linux/close_range.h + mdp:/usr/include/linux/errno.h + mdp:/usr/include/linux/posix_types.h + mdp:/usr/include/linux/sched/types.h + mdp:/usr/include/linux/stddef.h + mdp:/usr/include/linux/types.h + mdp:/usr/include/locale.h + mdp:/usr/include/pthread.h + mdp:/usr/include/qt6/QtCore/QAbstractItemModel + mdp:/usr/include/qt6/QtCore/QCoreApplication + mdp:/usr/include/qt6/QtCore/QDeadlineTimer + mdp:/usr/include/qt6/QtCore/QFile + mdp:/usr/include/qt6/QtCore/QFileInfo + mdp:/usr/include/qt6/QtCore/QHash + mdp:/usr/include/qt6/QtCore/QList + mdp:/usr/include/qt6/QtCore/QMap + mdp:/usr/include/qt6/QtCore/QMutex + mdp:/usr/include/qt6/QtCore/QObject + mdp:/usr/include/qt6/QtCore/QPair + mdp:/usr/include/qt6/QtCore/QString + mdp:/usr/include/qt6/QtCore/QStringList + mdp:/usr/include/qt6/QtCore/QTemporaryDir + mdp:/usr/include/qt6/QtCore/QVariant + mdp:/usr/include/qt6/QtCore/QVector + mdp:/usr/include/qt6/QtCore/QtCore + mdp:/usr/include/qt6/QtCore/QtCoreDepends + mdp:/usr/include/qt6/QtCore/q17memory.h + mdp:/usr/include/qt6/QtCore/q20algorithm.h + mdp:/usr/include/qt6/QtCore/q20chrono.h + mdp:/usr/include/qt6/QtCore/q20functional.h + mdp:/usr/include/qt6/QtCore/q20iterator.h + mdp:/usr/include/qt6/QtCore/q20map.h + mdp:/usr/include/qt6/QtCore/q20memory.h + mdp:/usr/include/qt6/QtCore/q20type_traits.h + mdp:/usr/include/qt6/QtCore/q20utility.h + mdp:/usr/include/qt6/QtCore/q20vector.h + mdp:/usr/include/qt6/QtCore/q23functional.h + mdp:/usr/include/qt6/QtCore/q23type_traits.h + mdp:/usr/include/qt6/QtCore/q23utility.h + mdp:/usr/include/qt6/QtCore/q26numeric.h + mdp:/usr/include/qt6/QtCore/qabstractanimation.h + mdp:/usr/include/qt6/QtCore/qabstracteventdispatcher.h + mdp:/usr/include/qt6/QtCore/qabstractitemmodel.h + mdp:/usr/include/qt6/QtCore/qabstractnativeeventfilter.h + mdp:/usr/include/qt6/QtCore/qabstractproxymodel.h + mdp:/usr/include/qt6/QtCore/qalgorithms.h + mdp:/usr/include/qt6/QtCore/qalloc.h + mdp:/usr/include/qt6/QtCore/qanimationgroup.h + mdp:/usr/include/qt6/QtCore/qanystringview.h + mdp:/usr/include/qt6/QtCore/qapplicationstatic.h + mdp:/usr/include/qt6/QtCore/qarraydata.h + mdp:/usr/include/qt6/QtCore/qarraydataops.h + mdp:/usr/include/qt6/QtCore/qarraydatapointer.h + mdp:/usr/include/qt6/QtCore/qassert.h + mdp:/usr/include/qt6/QtCore/qassociativeiterable.h + mdp:/usr/include/qt6/QtCore/qatomic.h + mdp:/usr/include/qt6/QtCore/qatomic_cxx11.h + mdp:/usr/include/qt6/QtCore/qatomicscopedvaluerollback.h + mdp:/usr/include/qt6/QtCore/qbasicatomic.h + mdp:/usr/include/qt6/QtCore/qbasictimer.h + mdp:/usr/include/qt6/QtCore/qbindingstorage.h + mdp:/usr/include/qt6/QtCore/qbitarray.h + mdp:/usr/include/qt6/QtCore/qbuffer.h + mdp:/usr/include/qt6/QtCore/qbytearray.h + mdp:/usr/include/qt6/QtCore/qbytearrayalgorithms.h + mdp:/usr/include/qt6/QtCore/qbytearraylist.h + mdp:/usr/include/qt6/QtCore/qbytearraymatcher.h + mdp:/usr/include/qt6/QtCore/qbytearrayview.h + mdp:/usr/include/qt6/QtCore/qcache.h + mdp:/usr/include/qt6/QtCore/qcalendar.h + mdp:/usr/include/qt6/QtCore/qcborarray.h + mdp:/usr/include/qt6/QtCore/qcborcommon.h + mdp:/usr/include/qt6/QtCore/qcbormap.h + mdp:/usr/include/qt6/QtCore/qcborstream.h + mdp:/usr/include/qt6/QtCore/qcborstreamreader.h + mdp:/usr/include/qt6/QtCore/qcborstreamwriter.h + mdp:/usr/include/qt6/QtCore/qcborvalue.h + mdp:/usr/include/qt6/QtCore/qchar.h + mdp:/usr/include/qt6/QtCore/qcheckedint_impl.h + mdp:/usr/include/qt6/QtCore/qchronotimer.h + mdp:/usr/include/qt6/QtCore/qcollator.h + mdp:/usr/include/qt6/QtCore/qcommandlineoption.h + mdp:/usr/include/qt6/QtCore/qcommandlineparser.h + mdp:/usr/include/qt6/QtCore/qcompare.h + mdp:/usr/include/qt6/QtCore/qcompare_impl.h + mdp:/usr/include/qt6/QtCore/qcomparehelpers.h + mdp:/usr/include/qt6/QtCore/qcompilerdetection.h + mdp:/usr/include/qt6/QtCore/qconcatenatetablesproxymodel.h + mdp:/usr/include/qt6/QtCore/qconfig-64.h + mdp:/usr/include/qt6/QtCore/qconfig.h + mdp:/usr/include/qt6/QtCore/qconstructormacros.h + mdp:/usr/include/qt6/QtCore/qcontainerfwd.h + mdp:/usr/include/qt6/QtCore/qcontainerinfo.h + mdp:/usr/include/qt6/QtCore/qcontainertools_impl.h + mdp:/usr/include/qt6/QtCore/qcontiguouscache.h + mdp:/usr/include/qt6/QtCore/qcoreapplication.h + mdp:/usr/include/qt6/QtCore/qcoreapplication_platform.h + mdp:/usr/include/qt6/QtCore/qcoreevent.h + mdp:/usr/include/qt6/QtCore/qcryptographichash.h + mdp:/usr/include/qt6/QtCore/qdarwinhelpers.h + mdp:/usr/include/qt6/QtCore/qdatastream.h + mdp:/usr/include/qt6/QtCore/qdatetime.h + mdp:/usr/include/qt6/QtCore/qdeadlinetimer.h + mdp:/usr/include/qt6/QtCore/qdebug.h + mdp:/usr/include/qt6/QtCore/qdir.h + mdp:/usr/include/qt6/QtCore/qdiriterator.h + mdp:/usr/include/qt6/QtCore/qdirlisting.h + mdp:/usr/include/qt6/QtCore/qeasingcurve.h + mdp:/usr/include/qt6/QtCore/qelapsedtimer.h + mdp:/usr/include/qt6/QtCore/qendian.h + mdp:/usr/include/qt6/QtCore/qeventloop.h + mdp:/usr/include/qt6/QtCore/qexception.h + mdp:/usr/include/qt6/QtCore/qexceptionhandling.h + mdp:/usr/include/qt6/QtCore/qfactoryinterface.h + mdp:/usr/include/qt6/QtCore/qfile.h + mdp:/usr/include/qt6/QtCore/qfiledevice.h + mdp:/usr/include/qt6/QtCore/qfileinfo.h + mdp:/usr/include/qt6/QtCore/qfileselector.h + mdp:/usr/include/qt6/QtCore/qfilesystemwatcher.h + mdp:/usr/include/qt6/QtCore/qflags.h + mdp:/usr/include/qt6/QtCore/qfloat16.h + mdp:/usr/include/qt6/QtCore/qforeach.h + mdp:/usr/include/qt6/QtCore/qfunctionaltools_impl.h + mdp:/usr/include/qt6/QtCore/qfunctionpointer.h + mdp:/usr/include/qt6/QtCore/qfuture.h + mdp:/usr/include/qt6/QtCore/qfuture_impl.h + mdp:/usr/include/qt6/QtCore/qfutureinterface.h + mdp:/usr/include/qt6/QtCore/qfuturesynchronizer.h + mdp:/usr/include/qt6/QtCore/qfuturewatcher.h + mdp:/usr/include/qt6/QtCore/qgenericatomic.h + mdp:/usr/include/qt6/QtCore/qglobal.h + mdp:/usr/include/qt6/QtCore/qglobalstatic.h + mdp:/usr/include/qt6/QtCore/qhash.h + mdp:/usr/include/qt6/QtCore/qhashfunctions.h + mdp:/usr/include/qt6/QtCore/qidentityproxymodel.h + mdp:/usr/include/qt6/QtCore/qiodevice.h + mdp:/usr/include/qt6/QtCore/qiodevicebase.h + mdp:/usr/include/qt6/QtCore/qitemselectionmodel.h + mdp:/usr/include/qt6/QtCore/qiterable.h + mdp:/usr/include/qt6/QtCore/qiterator.h + mdp:/usr/include/qt6/QtCore/qjsonarray.h + mdp:/usr/include/qt6/QtCore/qjsondocument.h + mdp:/usr/include/qt6/QtCore/qjsonobject.h + mdp:/usr/include/qt6/QtCore/qjsonparseerror.h + mdp:/usr/include/qt6/QtCore/qjsonvalue.h + mdp:/usr/include/qt6/QtCore/qlatin1stringmatcher.h + mdp:/usr/include/qt6/QtCore/qlatin1stringview.h + mdp:/usr/include/qt6/QtCore/qlibrary.h + mdp:/usr/include/qt6/QtCore/qlibraryinfo.h + mdp:/usr/include/qt6/QtCore/qline.h + mdp:/usr/include/qt6/QtCore/qlist.h + mdp:/usr/include/qt6/QtCore/qlocale.h + mdp:/usr/include/qt6/QtCore/qlockfile.h + mdp:/usr/include/qt6/QtCore/qlogging.h + mdp:/usr/include/qt6/QtCore/qloggingcategory.h + mdp:/usr/include/qt6/QtCore/qmalloc.h + mdp:/usr/include/qt6/QtCore/qmap.h + mdp:/usr/include/qt6/QtCore/qmargins.h + mdp:/usr/include/qt6/QtCore/qmath.h + mdp:/usr/include/qt6/QtCore/qmessageauthenticationcode.h + mdp:/usr/include/qt6/QtCore/qmetacontainer.h + mdp:/usr/include/qt6/QtCore/qmetaobject.h + mdp:/usr/include/qt6/QtCore/qmetatype.h + mdp:/usr/include/qt6/QtCore/qmimedata.h + mdp:/usr/include/qt6/QtCore/qmimedatabase.h + mdp:/usr/include/qt6/QtCore/qmimetype.h + mdp:/usr/include/qt6/QtCore/qminmax.h + mdp:/usr/include/qt6/QtCore/qmutex.h + mdp:/usr/include/qt6/QtCore/qnamespace.h + mdp:/usr/include/qt6/QtCore/qnativeinterface.h + mdp:/usr/include/qt6/QtCore/qnumeric.h + mdp:/usr/include/qt6/QtCore/qobject.h + mdp:/usr/include/qt6/QtCore/qobject_impl.h + mdp:/usr/include/qt6/QtCore/qobjectcleanuphandler.h + mdp:/usr/include/qt6/QtCore/qobjectdefs.h + mdp:/usr/include/qt6/QtCore/qobjectdefs_impl.h + mdp:/usr/include/qt6/QtCore/qoperatingsystemversion.h + mdp:/usr/include/qt6/QtCore/qoverload.h + mdp:/usr/include/qt6/QtCore/qpair.h + mdp:/usr/include/qt6/QtCore/qparallelanimationgroup.h + mdp:/usr/include/qt6/QtCore/qpauseanimation.h + mdp:/usr/include/qt6/QtCore/qpermissions.h + mdp:/usr/include/qt6/QtCore/qplugin.h + mdp:/usr/include/qt6/QtCore/qpluginloader.h + mdp:/usr/include/qt6/QtCore/qpoint.h + mdp:/usr/include/qt6/QtCore/qpointer.h + mdp:/usr/include/qt6/QtCore/qprocess.h + mdp:/usr/include/qt6/QtCore/qprocessordetection.h + mdp:/usr/include/qt6/QtCore/qpromise.h + mdp:/usr/include/qt6/QtCore/qproperty.h + mdp:/usr/include/qt6/QtCore/qpropertyanimation.h + mdp:/usr/include/qt6/QtCore/qpropertyprivate.h + mdp:/usr/include/qt6/QtCore/qqueue.h + mdp:/usr/include/qt6/QtCore/qrandom.h + mdp:/usr/include/qt6/QtCore/qrangemodel.h + mdp:/usr/include/qt6/QtCore/qrangemodel_impl.h + mdp:/usr/include/qt6/QtCore/qreadwritelock.h + mdp:/usr/include/qt6/QtCore/qrect.h + mdp:/usr/include/qt6/QtCore/qrefcount.h + mdp:/usr/include/qt6/QtCore/qregularexpression.h + mdp:/usr/include/qt6/QtCore/qresource.h + mdp:/usr/include/qt6/QtCore/qresultstore.h + mdp:/usr/include/qt6/QtCore/qrunnable.h + mdp:/usr/include/qt6/QtCore/qsavefile.h + mdp:/usr/include/qt6/QtCore/qscopedpointer.h + mdp:/usr/include/qt6/QtCore/qscopedvaluerollback.h + mdp:/usr/include/qt6/QtCore/qscopeguard.h + mdp:/usr/include/qt6/QtCore/qsemaphore.h + mdp:/usr/include/qt6/QtCore/qsequentialanimationgroup.h + mdp:/usr/include/qt6/QtCore/qsequentialiterable.h + mdp:/usr/include/qt6/QtCore/qset.h + mdp:/usr/include/qt6/QtCore/qsettings.h + mdp:/usr/include/qt6/QtCore/qshareddata.h + mdp:/usr/include/qt6/QtCore/qshareddata_impl.h + mdp:/usr/include/qt6/QtCore/qsharedmemory.h + mdp:/usr/include/qt6/QtCore/qsharedpointer.h + mdp:/usr/include/qt6/QtCore/qsharedpointer_impl.h + mdp:/usr/include/qt6/QtCore/qsignalmapper.h + mdp:/usr/include/qt6/QtCore/qsimd.h + mdp:/usr/include/qt6/QtCore/qsize.h + mdp:/usr/include/qt6/QtCore/qsocketnotifier.h + mdp:/usr/include/qt6/QtCore/qsortfilterproxymodel.h + mdp:/usr/include/qt6/QtCore/qspan.h + mdp:/usr/include/qt6/QtCore/qstack.h + mdp:/usr/include/qt6/QtCore/qstandardpaths.h + mdp:/usr/include/qt6/QtCore/qstaticlatin1stringmatcher.h + mdp:/usr/include/qt6/QtCore/qstdlibdetection.h + mdp:/usr/include/qt6/QtCore/qstorageinfo.h + mdp:/usr/include/qt6/QtCore/qstring.h + mdp:/usr/include/qt6/QtCore/qstringalgorithms.h + mdp:/usr/include/qt6/QtCore/qstringbuilder.h + mdp:/usr/include/qt6/QtCore/qstringconverter.h + mdp:/usr/include/qt6/QtCore/qstringconverter_base.h + mdp:/usr/include/qt6/QtCore/qstringfwd.h + mdp:/usr/include/qt6/QtCore/qstringlist.h + mdp:/usr/include/qt6/QtCore/qstringlistmodel.h + mdp:/usr/include/qt6/QtCore/qstringliteral.h + mdp:/usr/include/qt6/QtCore/qstringmatcher.h + mdp:/usr/include/qt6/QtCore/qstringtokenizer.h + mdp:/usr/include/qt6/QtCore/qstringview.h + mdp:/usr/include/qt6/QtCore/qswap.h + mdp:/usr/include/qt6/QtCore/qsysinfo.h + mdp:/usr/include/qt6/QtCore/qsystemdetection.h + mdp:/usr/include/qt6/QtCore/qsystemsemaphore.h + mdp:/usr/include/qt6/QtCore/qtaggedpointer.h + mdp:/usr/include/qt6/QtCore/qtclasshelpermacros.h + mdp:/usr/include/qt6/QtCore/qtconfiginclude.h + mdp:/usr/include/qt6/QtCore/qtconfigmacros.h + mdp:/usr/include/qt6/QtCore/qtcore-config.h + mdp:/usr/include/qt6/QtCore/qtcoreexports.h + mdp:/usr/include/qt6/QtCore/qtcoreglobal.h + mdp:/usr/include/qt6/QtCore/qtcoreversion.h + mdp:/usr/include/qt6/QtCore/qtdeprecationdefinitions.h + mdp:/usr/include/qt6/QtCore/qtdeprecationmarkers.h + mdp:/usr/include/qt6/QtCore/qtemporarydir.h + mdp:/usr/include/qt6/QtCore/qtemporaryfile.h + mdp:/usr/include/qt6/QtCore/qtenvironmentvariables.h + mdp:/usr/include/qt6/QtCore/qtestsupport_core.h + mdp:/usr/include/qt6/QtCore/qtextboundaryfinder.h + mdp:/usr/include/qt6/QtCore/qtextstream.h + mdp:/usr/include/qt6/QtCore/qtformat_impl.h + mdp:/usr/include/qt6/QtCore/qthread.h + mdp:/usr/include/qt6/QtCore/qthreadpool.h + mdp:/usr/include/qt6/QtCore/qthreadstorage.h + mdp:/usr/include/qt6/QtCore/qtimeline.h + mdp:/usr/include/qt6/QtCore/qtimer.h + mdp:/usr/include/qt6/QtCore/qtimezone.h + mdp:/usr/include/qt6/QtCore/qtipccommon.h + mdp:/usr/include/qt6/QtCore/qtmetamacros.h + mdp:/usr/include/qt6/QtCore/qtmocconstants.h + mdp:/usr/include/qt6/QtCore/qtnoop.h + mdp:/usr/include/qt6/QtCore/qtpreprocessorsupport.h + mdp:/usr/include/qt6/QtCore/qtranslator.h + mdp:/usr/include/qt6/QtCore/qtransposeproxymodel.h + mdp:/usr/include/qt6/QtCore/qtresource.h + mdp:/usr/include/qt6/QtCore/qtsan_impl.h + mdp:/usr/include/qt6/QtCore/qtsymbolmacros.h + mdp:/usr/include/qt6/QtCore/qttranslation.h + mdp:/usr/include/qt6/QtCore/qttypetraits.h + mdp:/usr/include/qt6/QtCore/qtversion.h + mdp:/usr/include/qt6/QtCore/qtversionchecks.h + mdp:/usr/include/qt6/QtCore/qtypeinfo.h + mdp:/usr/include/qt6/QtCore/qtyperevision.h + mdp:/usr/include/qt6/QtCore/qtypes.h + mdp:/usr/include/qt6/QtCore/qurl.h + mdp:/usr/include/qt6/QtCore/qurlquery.h + mdp:/usr/include/qt6/QtCore/qutf8stringview.h + mdp:/usr/include/qt6/QtCore/quuid.h + mdp:/usr/include/qt6/QtCore/qvariant.h + mdp:/usr/include/qt6/QtCore/qvariantanimation.h + mdp:/usr/include/qt6/QtCore/qvarianthash.h + mdp:/usr/include/qt6/QtCore/qvariantlist.h + mdp:/usr/include/qt6/QtCore/qvariantmap.h + mdp:/usr/include/qt6/QtCore/qvarlengtharray.h + mdp:/usr/include/qt6/QtCore/qvector.h + mdp:/usr/include/qt6/QtCore/qversionnumber.h + mdp:/usr/include/qt6/QtCore/qversiontagging.h + mdp:/usr/include/qt6/QtCore/qwaitcondition.h + mdp:/usr/include/qt6/QtCore/qwineventnotifier.h + mdp:/usr/include/qt6/QtCore/qxmlstream.h + mdp:/usr/include/qt6/QtCore/qxpfunctional.h + mdp:/usr/include/qt6/QtCore/qxptype_traits.h + mdp:/usr/include/qt6/QtCore/qyieldcpu.h + mdp:/usr/include/qt6/QtSql/QSqlDatabase + mdp:/usr/include/qt6/QtSql/QSqlError + mdp:/usr/include/qt6/QtSql/QSqlQuery + mdp:/usr/include/qt6/QtSql/qsqldatabase.h + mdp:/usr/include/qt6/QtSql/qsqlerror.h + mdp:/usr/include/qt6/QtSql/qsqlquery.h + mdp:/usr/include/qt6/QtSql/qtsql-config.h + mdp:/usr/include/qt6/QtSql/qtsqlexports.h + mdp:/usr/include/qt6/QtSql/qtsqlglobal.h + mdp:/usr/include/qt6/QtTest/QtTest + mdp:/usr/include/qt6/QtTest/QtTestDepends + mdp:/usr/include/qt6/QtTest/qabstractitemmodeltester.h + mdp:/usr/include/qt6/QtTest/qbenchmark.h + mdp:/usr/include/qt6/QtTest/qbenchmarkmetric.h + mdp:/usr/include/qt6/QtTest/qsignalspy.h + mdp:/usr/include/qt6/QtTest/qtest.h + mdp:/usr/include/qt6/QtTest/qtestassert.h + mdp:/usr/include/qt6/QtTest/qtestcase.h + mdp:/usr/include/qt6/QtTest/qtestdata.h + mdp:/usr/include/qt6/QtTest/qtesteventloop.h + mdp:/usr/include/qt6/QtTest/qtestsystem.h + mdp:/usr/include/qt6/QtTest/qtesttostring.h + mdp:/usr/include/qt6/QtTest/qttestexports.h + mdp:/usr/include/qt6/QtTest/qttestglobal.h + mdp:/usr/include/qt6/QtTest/qttestlib-config.h + mdp:/usr/include/qt6/QtTest/qttestversion.h + mdp:/usr/include/sched.h + mdp:/usr/include/semaphore.h + mdp:/usr/include/stdc-predef.h + mdp:/usr/include/stdio.h + mdp:/usr/include/string.h + mdp:/usr/include/strings.h + mdp:/usr/include/sys/cdefs.h + mdp:/usr/include/sys/select.h + mdp:/usr/include/sys/single_threaded.h + mdp:/usr/include/sys/syscall.h + mdp:/usr/include/sys/time.h + mdp:/usr/include/sys/types.h + mdp:/usr/include/syscall.h + mdp:/usr/include/time.h + mdp:/usr/include/unistd.h + mdp:/usr/include/wchar.h + mdp:/usr/include/wctype.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/adxintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxavx512intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxbf16intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxcomplexintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxfp16intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxfp8intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxint8intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxmovrsintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxtf32intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxtileintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxtransposeintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2-512bf16intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2-512convertintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2-512mediaintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2-512minmaxintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2-512satcvtintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2bf16intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2convertintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2copyintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2mediaintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2minmaxintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2satcvtintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx2intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512bf16intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512bf16vlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512bitalgintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512bitalgvlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512bwintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512cdintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512dqintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512fintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512fp16intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512fp16vlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512ifmaintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512ifmavlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vbmi2intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vbmi2vlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vbmiintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vbmivlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vlbwintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vldqintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vnniintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vnnivlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vp2intersectintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vp2intersectvlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vpopcntdqintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vpopcntdqvlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avxifmaintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avxintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avxneconvertintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avxvnniint16intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avxvnniint8intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avxvnniintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/bmi2intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/bmiintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/cetintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/cldemoteintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/clflushoptintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/clwbintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/clzerointrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/cmpccxaddintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/emmintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/enqcmdintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/f16cintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/fmaintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/fxsrintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/gfniintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/hresetintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/ia32intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/immintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/keylockerintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/limits.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/lwpintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/lzcntintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/mm_malloc.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/mmintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/movdirintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/movrsintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/mwaitintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/mwaitxintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/pconfigintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/pkuintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/pmmintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/popcntintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/prfchiintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/prfchwintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/raointintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/rdseedintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/rtmintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/serializeintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/sgxintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/sha512intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/shaintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/sm3intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/sm4intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/smmintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stdarg.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stdbool.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stddef.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stdint.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/syslimits.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/tbmintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/tmmintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/tsxldtrkintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/uintrintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/usermsrintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/vaesintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/vpclmulqdqintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/waitpkgintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/wbnoinvdintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/wmmintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/x86gprintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/xmmintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/xsavecintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/xsaveintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/xsaveoptintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/xsavesintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/xtestintrin.h +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/log_manager.cpp +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/db.cpp +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/log_manager.h + mmc:Q_OBJECT + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_db_autogen/moc_predefs.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/log_manager.h + mdp:/usr/include/asm-generic/bitsperlong.h + mdp:/usr/include/asm-generic/errno-base.h + mdp:/usr/include/asm-generic/errno.h + mdp:/usr/include/asm-generic/int-ll64.h + mdp:/usr/include/asm-generic/posix_types.h + mdp:/usr/include/asm-generic/types.h + mdp:/usr/include/asm/bitsperlong.h + mdp:/usr/include/asm/errno.h + mdp:/usr/include/asm/posix_types.h + mdp:/usr/include/asm/posix_types_64.h + mdp:/usr/include/asm/types.h + mdp:/usr/include/asm/unistd.h + mdp:/usr/include/asm/unistd_64.h + mdp:/usr/include/assert.h + mdp:/usr/include/bits/atomic_wide_counter.h + mdp:/usr/include/bits/confname.h + mdp:/usr/include/bits/cpu-set.h + mdp:/usr/include/bits/endian.h + mdp:/usr/include/bits/endianness.h + mdp:/usr/include/bits/environments.h + mdp:/usr/include/bits/errno.h + mdp:/usr/include/bits/floatn-common.h + mdp:/usr/include/bits/floatn.h + mdp:/usr/include/bits/getopt_core.h + mdp:/usr/include/bits/getopt_posix.h + mdp:/usr/include/bits/libc-header-start.h + mdp:/usr/include/bits/locale.h + mdp:/usr/include/bits/long-double.h + mdp:/usr/include/bits/posix_opt.h + mdp:/usr/include/bits/pthread_stack_min-dynamic.h + mdp:/usr/include/bits/pthreadtypes-arch.h + mdp:/usr/include/bits/pthreadtypes.h + mdp:/usr/include/bits/sched.h + mdp:/usr/include/bits/setjmp.h + mdp:/usr/include/bits/stdio_lim.h + mdp:/usr/include/bits/struct_mutex.h + mdp:/usr/include/bits/struct_rwlock.h + mdp:/usr/include/bits/syscall.h + mdp:/usr/include/bits/thread-shared-types.h + mdp:/usr/include/bits/time.h + mdp:/usr/include/bits/time64.h + mdp:/usr/include/bits/timesize.h + mdp:/usr/include/bits/timex.h + mdp:/usr/include/bits/types.h + mdp:/usr/include/bits/types/FILE.h + mdp:/usr/include/bits/types/__FILE.h + mdp:/usr/include/bits/types/__fpos64_t.h + mdp:/usr/include/bits/types/__fpos_t.h + mdp:/usr/include/bits/types/__locale_t.h + mdp:/usr/include/bits/types/__mbstate_t.h + mdp:/usr/include/bits/types/__sigset_t.h + mdp:/usr/include/bits/types/clock_t.h + mdp:/usr/include/bits/types/clockid_t.h + mdp:/usr/include/bits/types/cookie_io_functions_t.h + mdp:/usr/include/bits/types/error_t.h + mdp:/usr/include/bits/types/locale_t.h + mdp:/usr/include/bits/types/mbstate_t.h + mdp:/usr/include/bits/types/struct_FILE.h + mdp:/usr/include/bits/types/struct___jmp_buf_tag.h + mdp:/usr/include/bits/types/struct_itimerspec.h + mdp:/usr/include/bits/types/struct_sched_param.h + mdp:/usr/include/bits/types/struct_timespec.h + mdp:/usr/include/bits/types/struct_timeval.h + mdp:/usr/include/bits/types/struct_tm.h + mdp:/usr/include/bits/types/time_t.h + mdp:/usr/include/bits/types/timer_t.h + mdp:/usr/include/bits/types/wint_t.h + mdp:/usr/include/bits/typesizes.h + mdp:/usr/include/bits/unistd_ext.h + mdp:/usr/include/bits/wchar.h + mdp:/usr/include/bits/wctype-wchar.h + mdp:/usr/include/bits/wordsize.h + mdp:/usr/include/c++/15/algorithm + mdp:/usr/include/c++/15/array + mdp:/usr/include/c++/15/atomic + mdp:/usr/include/c++/15/backward/auto_ptr.h + mdp:/usr/include/c++/15/backward/binders.h + mdp:/usr/include/c++/15/bit + mdp:/usr/include/c++/15/bits/algorithmfwd.h + mdp:/usr/include/c++/15/bits/align.h + mdp:/usr/include/c++/15/bits/alloc_traits.h + mdp:/usr/include/c++/15/bits/allocated_ptr.h + mdp:/usr/include/c++/15/bits/allocator.h + mdp:/usr/include/c++/15/bits/atomic_base.h + mdp:/usr/include/c++/15/bits/atomic_lockfree_defines.h + mdp:/usr/include/c++/15/bits/atomic_wait.h + mdp:/usr/include/c++/15/bits/basic_ios.h + mdp:/usr/include/c++/15/bits/basic_ios.tcc + mdp:/usr/include/c++/15/bits/basic_string.h + mdp:/usr/include/c++/15/bits/basic_string.tcc + mdp:/usr/include/c++/15/bits/char_traits.h + mdp:/usr/include/c++/15/bits/charconv.h + mdp:/usr/include/c++/15/bits/chrono.h + mdp:/usr/include/c++/15/bits/chrono_io.h + mdp:/usr/include/c++/15/bits/codecvt.h + mdp:/usr/include/c++/15/bits/concept_check.h + mdp:/usr/include/c++/15/bits/cpp_type_traits.h + mdp:/usr/include/c++/15/bits/cxxabi_forced.h + mdp:/usr/include/c++/15/bits/cxxabi_init_exception.h + mdp:/usr/include/c++/15/bits/enable_special_members.h + mdp:/usr/include/c++/15/bits/erase_if.h + mdp:/usr/include/c++/15/bits/exception.h + mdp:/usr/include/c++/15/bits/exception_defines.h + mdp:/usr/include/c++/15/bits/exception_ptr.h + mdp:/usr/include/c++/15/bits/functexcept.h + mdp:/usr/include/c++/15/bits/functional_hash.h + mdp:/usr/include/c++/15/bits/hash_bytes.h + mdp:/usr/include/c++/15/bits/hashtable.h + mdp:/usr/include/c++/15/bits/hashtable_policy.h + mdp:/usr/include/c++/15/bits/invoke.h + mdp:/usr/include/c++/15/bits/ios_base.h + mdp:/usr/include/c++/15/bits/istream.tcc + mdp:/usr/include/c++/15/bits/iterator_concepts.h + mdp:/usr/include/c++/15/bits/list.tcc + mdp:/usr/include/c++/15/bits/locale_classes.h + mdp:/usr/include/c++/15/bits/locale_classes.tcc + mdp:/usr/include/c++/15/bits/locale_conv.h + mdp:/usr/include/c++/15/bits/locale_facets.h + mdp:/usr/include/c++/15/bits/locale_facets.tcc + mdp:/usr/include/c++/15/bits/locale_facets_nonio.h + mdp:/usr/include/c++/15/bits/locale_facets_nonio.tcc + mdp:/usr/include/c++/15/bits/localefwd.h + mdp:/usr/include/c++/15/bits/max_size_type.h + mdp:/usr/include/c++/15/bits/memory_resource.h + mdp:/usr/include/c++/15/bits/memoryfwd.h + mdp:/usr/include/c++/15/bits/move.h + mdp:/usr/include/c++/15/bits/nested_exception.h + mdp:/usr/include/c++/15/bits/new_allocator.h + mdp:/usr/include/c++/15/bits/node_handle.h + mdp:/usr/include/c++/15/bits/ostream.h + mdp:/usr/include/c++/15/bits/ostream.tcc + mdp:/usr/include/c++/15/bits/ostream_insert.h + mdp:/usr/include/c++/15/bits/parse_numbers.h + mdp:/usr/include/c++/15/bits/postypes.h + mdp:/usr/include/c++/15/bits/predefined_ops.h + mdp:/usr/include/c++/15/bits/ptr_traits.h + mdp:/usr/include/c++/15/bits/quoted_string.h + mdp:/usr/include/c++/15/bits/range_access.h + mdp:/usr/include/c++/15/bits/ranges_algo.h + mdp:/usr/include/c++/15/bits/ranges_algobase.h + mdp:/usr/include/c++/15/bits/ranges_base.h + mdp:/usr/include/c++/15/bits/ranges_cmp.h + mdp:/usr/include/c++/15/bits/ranges_uninitialized.h + mdp:/usr/include/c++/15/bits/ranges_util.h + mdp:/usr/include/c++/15/bits/refwrap.h + mdp:/usr/include/c++/15/bits/requires_hosted.h + mdp:/usr/include/c++/15/bits/shared_ptr.h + mdp:/usr/include/c++/15/bits/shared_ptr_atomic.h + mdp:/usr/include/c++/15/bits/shared_ptr_base.h + mdp:/usr/include/c++/15/bits/specfun.h + mdp:/usr/include/c++/15/bits/sstream.tcc + mdp:/usr/include/c++/15/bits/std_abs.h + mdp:/usr/include/c++/15/bits/std_function.h + mdp:/usr/include/c++/15/bits/std_mutex.h + mdp:/usr/include/c++/15/bits/stl_algo.h + mdp:/usr/include/c++/15/bits/stl_algobase.h + mdp:/usr/include/c++/15/bits/stl_bvector.h + mdp:/usr/include/c++/15/bits/stl_construct.h + mdp:/usr/include/c++/15/bits/stl_function.h + mdp:/usr/include/c++/15/bits/stl_heap.h + mdp:/usr/include/c++/15/bits/stl_iterator.h + mdp:/usr/include/c++/15/bits/stl_iterator_base_funcs.h + mdp:/usr/include/c++/15/bits/stl_iterator_base_types.h + mdp:/usr/include/c++/15/bits/stl_list.h + mdp:/usr/include/c++/15/bits/stl_map.h + mdp:/usr/include/c++/15/bits/stl_multimap.h + mdp:/usr/include/c++/15/bits/stl_multiset.h + mdp:/usr/include/c++/15/bits/stl_numeric.h + mdp:/usr/include/c++/15/bits/stl_pair.h + mdp:/usr/include/c++/15/bits/stl_raw_storage_iter.h + mdp:/usr/include/c++/15/bits/stl_relops.h + mdp:/usr/include/c++/15/bits/stl_set.h + mdp:/usr/include/c++/15/bits/stl_tempbuf.h + mdp:/usr/include/c++/15/bits/stl_tree.h + mdp:/usr/include/c++/15/bits/stl_uninitialized.h + mdp:/usr/include/c++/15/bits/stl_vector.h + mdp:/usr/include/c++/15/bits/stream_iterator.h + mdp:/usr/include/c++/15/bits/streambuf.tcc + mdp:/usr/include/c++/15/bits/streambuf_iterator.h + mdp:/usr/include/c++/15/bits/string_view.tcc + mdp:/usr/include/c++/15/bits/stringfwd.h + mdp:/usr/include/c++/15/bits/uniform_int_dist.h + mdp:/usr/include/c++/15/bits/unique_ptr.h + mdp:/usr/include/c++/15/bits/unordered_map.h + mdp:/usr/include/c++/15/bits/unordered_set.h + mdp:/usr/include/c++/15/bits/uses_allocator.h + mdp:/usr/include/c++/15/bits/uses_allocator_args.h + mdp:/usr/include/c++/15/bits/utility.h + mdp:/usr/include/c++/15/bits/vector.tcc + mdp:/usr/include/c++/15/bits/version.h + mdp:/usr/include/c++/15/cassert + mdp:/usr/include/c++/15/cctype + mdp:/usr/include/c++/15/cerrno + mdp:/usr/include/c++/15/charconv + mdp:/usr/include/c++/15/chrono + mdp:/usr/include/c++/15/climits + mdp:/usr/include/c++/15/clocale + mdp:/usr/include/c++/15/cmath + mdp:/usr/include/c++/15/compare + mdp:/usr/include/c++/15/concepts + mdp:/usr/include/c++/15/cstddef + mdp:/usr/include/c++/15/cstdint + mdp:/usr/include/c++/15/cstdio + mdp:/usr/include/c++/15/cstdlib + mdp:/usr/include/c++/15/cstring + mdp:/usr/include/c++/15/ctime + mdp:/usr/include/c++/15/cwchar + mdp:/usr/include/c++/15/cwctype + mdp:/usr/include/c++/15/debug/assertions.h + mdp:/usr/include/c++/15/debug/debug.h + mdp:/usr/include/c++/15/exception + mdp:/usr/include/c++/15/ext/aligned_buffer.h + mdp:/usr/include/c++/15/ext/alloc_traits.h + mdp:/usr/include/c++/15/ext/atomicity.h + mdp:/usr/include/c++/15/ext/concurrence.h + mdp:/usr/include/c++/15/ext/numeric_traits.h + mdp:/usr/include/c++/15/ext/string_conversions.h + mdp:/usr/include/c++/15/ext/type_traits.h + mdp:/usr/include/c++/15/filesystem + mdp:/usr/include/c++/15/format + mdp:/usr/include/c++/15/functional + mdp:/usr/include/c++/15/initializer_list + mdp:/usr/include/c++/15/iomanip + mdp:/usr/include/c++/15/ios + mdp:/usr/include/c++/15/iosfwd + mdp:/usr/include/c++/15/istream + mdp:/usr/include/c++/15/iterator + mdp:/usr/include/c++/15/limits + mdp:/usr/include/c++/15/list + mdp:/usr/include/c++/15/locale + mdp:/usr/include/c++/15/map + mdp:/usr/include/c++/15/memory + mdp:/usr/include/c++/15/new + mdp:/usr/include/c++/15/numeric + mdp:/usr/include/c++/15/optional + mdp:/usr/include/c++/15/ostream + mdp:/usr/include/c++/15/pstl/execution_defs.h + mdp:/usr/include/c++/15/pstl/glue_numeric_defs.h + mdp:/usr/include/c++/15/pstl/pstl_config.h + mdp:/usr/include/c++/15/ratio + mdp:/usr/include/c++/15/set + mdp:/usr/include/c++/15/sstream + mdp:/usr/include/c++/15/stdexcept + mdp:/usr/include/c++/15/stdlib.h + mdp:/usr/include/c++/15/streambuf + mdp:/usr/include/c++/15/string + mdp:/usr/include/c++/15/string_view + mdp:/usr/include/c++/15/system_error + mdp:/usr/include/c++/15/tr1/bessel_function.tcc + mdp:/usr/include/c++/15/tr1/beta_function.tcc + mdp:/usr/include/c++/15/tr1/ell_integral.tcc + mdp:/usr/include/c++/15/tr1/exp_integral.tcc + mdp:/usr/include/c++/15/tr1/gamma.tcc + mdp:/usr/include/c++/15/tr1/hypergeometric.tcc + mdp:/usr/include/c++/15/tr1/legendre_function.tcc + mdp:/usr/include/c++/15/tr1/modified_bessel_func.tcc + mdp:/usr/include/c++/15/tr1/poly_hermite.tcc + mdp:/usr/include/c++/15/tr1/poly_laguerre.tcc + mdp:/usr/include/c++/15/tr1/riemann_zeta.tcc + mdp:/usr/include/c++/15/tr1/special_function_util.h + mdp:/usr/include/c++/15/tuple + mdp:/usr/include/c++/15/type_traits + mdp:/usr/include/c++/15/typeinfo + mdp:/usr/include/c++/15/unordered_map + mdp:/usr/include/c++/15/unordered_set + mdp:/usr/include/c++/15/utility + mdp:/usr/include/c++/15/variant + mdp:/usr/include/c++/15/vector + mdp:/usr/include/c++/15/version + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/atomic_word.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++allocator.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++config.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++locale.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/cpu_defines.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/ctype_base.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/ctype_inline.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/error_constants.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/gthr-default.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/gthr.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/messages_members.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/os_defines.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/time_members.h + mdp:/usr/include/ctype.h + mdp:/usr/include/errno.h + mdp:/usr/include/features-time64.h + mdp:/usr/include/features.h + mdp:/usr/include/gnu/stubs-64.h + mdp:/usr/include/gnu/stubs.h + mdp:/usr/include/libintl.h + mdp:/usr/include/linux/close_range.h + mdp:/usr/include/linux/errno.h + mdp:/usr/include/linux/posix_types.h + mdp:/usr/include/linux/sched/types.h + mdp:/usr/include/linux/stddef.h + mdp:/usr/include/linux/types.h + mdp:/usr/include/locale.h + mdp:/usr/include/pthread.h + mdp:/usr/include/qt6/QtCore/QDateTime + mdp:/usr/include/qt6/QtCore/QFile + mdp:/usr/include/qt6/QtCore/QMutex + mdp:/usr/include/qt6/QtCore/QObject + mdp:/usr/include/qt6/QtCore/QStringList + mdp:/usr/include/qt6/QtCore/QTextStream + mdp:/usr/include/qt6/QtCore/q17memory.h + mdp:/usr/include/qt6/QtCore/q20functional.h + mdp:/usr/include/qt6/QtCore/q20iterator.h + mdp:/usr/include/qt6/QtCore/q20memory.h + mdp:/usr/include/qt6/QtCore/q20type_traits.h + mdp:/usr/include/qt6/QtCore/q20utility.h + mdp:/usr/include/qt6/QtCore/q23type_traits.h + mdp:/usr/include/qt6/QtCore/q23utility.h + mdp:/usr/include/qt6/QtCore/qalgorithms.h + mdp:/usr/include/qt6/QtCore/qalloc.h + mdp:/usr/include/qt6/QtCore/qanystringview.h + mdp:/usr/include/qt6/QtCore/qarraydata.h + mdp:/usr/include/qt6/QtCore/qarraydataops.h + mdp:/usr/include/qt6/QtCore/qarraydatapointer.h + mdp:/usr/include/qt6/QtCore/qassert.h + mdp:/usr/include/qt6/QtCore/qatomic.h + mdp:/usr/include/qt6/QtCore/qatomic_cxx11.h + mdp:/usr/include/qt6/QtCore/qbasicatomic.h + mdp:/usr/include/qt6/QtCore/qbindingstorage.h + mdp:/usr/include/qt6/QtCore/qbytearray.h + mdp:/usr/include/qt6/QtCore/qbytearrayalgorithms.h + mdp:/usr/include/qt6/QtCore/qbytearraylist.h + mdp:/usr/include/qt6/QtCore/qbytearrayview.h + mdp:/usr/include/qt6/QtCore/qcalendar.h + mdp:/usr/include/qt6/QtCore/qchar.h + mdp:/usr/include/qt6/QtCore/qcompare.h + mdp:/usr/include/qt6/QtCore/qcompare_impl.h + mdp:/usr/include/qt6/QtCore/qcomparehelpers.h + mdp:/usr/include/qt6/QtCore/qcompilerdetection.h + mdp:/usr/include/qt6/QtCore/qconfig-64.h + mdp:/usr/include/qt6/QtCore/qconfig.h + mdp:/usr/include/qt6/QtCore/qconstructormacros.h + mdp:/usr/include/qt6/QtCore/qcontainerfwd.h + mdp:/usr/include/qt6/QtCore/qcontainerinfo.h + mdp:/usr/include/qt6/QtCore/qcontainertools_impl.h + mdp:/usr/include/qt6/QtCore/qcontiguouscache.h + mdp:/usr/include/qt6/QtCore/qdarwinhelpers.h + mdp:/usr/include/qt6/QtCore/qdatastream.h + mdp:/usr/include/qt6/QtCore/qdatetime.h + mdp:/usr/include/qt6/QtCore/qdeadlinetimer.h + mdp:/usr/include/qt6/QtCore/qdebug.h + mdp:/usr/include/qt6/QtCore/qexceptionhandling.h + mdp:/usr/include/qt6/QtCore/qfile.h + mdp:/usr/include/qt6/QtCore/qfiledevice.h + mdp:/usr/include/qt6/QtCore/qflags.h + mdp:/usr/include/qt6/QtCore/qfloat16.h + mdp:/usr/include/qt6/QtCore/qforeach.h + mdp:/usr/include/qt6/QtCore/qfunctionaltools_impl.h + mdp:/usr/include/qt6/QtCore/qfunctionpointer.h + mdp:/usr/include/qt6/QtCore/qgenericatomic.h + mdp:/usr/include/qt6/QtCore/qglobal.h + mdp:/usr/include/qt6/QtCore/qglobalstatic.h + mdp:/usr/include/qt6/QtCore/qhash.h + mdp:/usr/include/qt6/QtCore/qhashfunctions.h + mdp:/usr/include/qt6/QtCore/qiodevice.h + mdp:/usr/include/qt6/QtCore/qiodevicebase.h + mdp:/usr/include/qt6/QtCore/qiterable.h + mdp:/usr/include/qt6/QtCore/qiterator.h + mdp:/usr/include/qt6/QtCore/qlatin1stringview.h + mdp:/usr/include/qt6/QtCore/qlist.h + mdp:/usr/include/qt6/QtCore/qlocale.h + mdp:/usr/include/qt6/QtCore/qlogging.h + mdp:/usr/include/qt6/QtCore/qmalloc.h + mdp:/usr/include/qt6/QtCore/qmap.h + mdp:/usr/include/qt6/QtCore/qmath.h + mdp:/usr/include/qt6/QtCore/qmetacontainer.h + mdp:/usr/include/qt6/QtCore/qmetatype.h + mdp:/usr/include/qt6/QtCore/qminmax.h + mdp:/usr/include/qt6/QtCore/qmutex.h + mdp:/usr/include/qt6/QtCore/qnamespace.h + mdp:/usr/include/qt6/QtCore/qnumeric.h + mdp:/usr/include/qt6/QtCore/qobject.h + mdp:/usr/include/qt6/QtCore/qobject_impl.h + mdp:/usr/include/qt6/QtCore/qobjectdefs.h + mdp:/usr/include/qt6/QtCore/qobjectdefs_impl.h + mdp:/usr/include/qt6/QtCore/qoverload.h + mdp:/usr/include/qt6/QtCore/qpair.h + mdp:/usr/include/qt6/QtCore/qprocessordetection.h + mdp:/usr/include/qt6/QtCore/qrefcount.h + mdp:/usr/include/qt6/QtCore/qscopedpointer.h + mdp:/usr/include/qt6/QtCore/qscopeguard.h + mdp:/usr/include/qt6/QtCore/qset.h + mdp:/usr/include/qt6/QtCore/qshareddata.h + mdp:/usr/include/qt6/QtCore/qshareddata_impl.h + mdp:/usr/include/qt6/QtCore/qsharedpointer.h + mdp:/usr/include/qt6/QtCore/qsharedpointer_impl.h + mdp:/usr/include/qt6/QtCore/qspan.h + mdp:/usr/include/qt6/QtCore/qstdlibdetection.h + mdp:/usr/include/qt6/QtCore/qstring.h + mdp:/usr/include/qt6/QtCore/qstringalgorithms.h + mdp:/usr/include/qt6/QtCore/qstringbuilder.h + mdp:/usr/include/qt6/QtCore/qstringconverter.h + mdp:/usr/include/qt6/QtCore/qstringconverter_base.h + mdp:/usr/include/qt6/QtCore/qstringfwd.h + mdp:/usr/include/qt6/QtCore/qstringlist.h + mdp:/usr/include/qt6/QtCore/qstringmatcher.h + mdp:/usr/include/qt6/QtCore/qstringtokenizer.h + mdp:/usr/include/qt6/QtCore/qstringview.h + mdp:/usr/include/qt6/QtCore/qswap.h + mdp:/usr/include/qt6/QtCore/qsysinfo.h + mdp:/usr/include/qt6/QtCore/qsystemdetection.h + mdp:/usr/include/qt6/QtCore/qtaggedpointer.h + mdp:/usr/include/qt6/QtCore/qtclasshelpermacros.h + mdp:/usr/include/qt6/QtCore/qtconfiginclude.h + mdp:/usr/include/qt6/QtCore/qtconfigmacros.h + mdp:/usr/include/qt6/QtCore/qtcore-config.h + mdp:/usr/include/qt6/QtCore/qtcoreexports.h + mdp:/usr/include/qt6/QtCore/qtcoreglobal.h + mdp:/usr/include/qt6/QtCore/qtdeprecationdefinitions.h + mdp:/usr/include/qt6/QtCore/qtdeprecationmarkers.h + mdp:/usr/include/qt6/QtCore/qtenvironmentvariables.h + mdp:/usr/include/qt6/QtCore/qtextstream.h + mdp:/usr/include/qt6/QtCore/qtformat_impl.h + mdp:/usr/include/qt6/QtCore/qtmetamacros.h + mdp:/usr/include/qt6/QtCore/qtnoop.h + mdp:/usr/include/qt6/QtCore/qtpreprocessorsupport.h + mdp:/usr/include/qt6/QtCore/qtresource.h + mdp:/usr/include/qt6/QtCore/qtsan_impl.h + mdp:/usr/include/qt6/QtCore/qttranslation.h + mdp:/usr/include/qt6/QtCore/qttypetraits.h + mdp:/usr/include/qt6/QtCore/qtversion.h + mdp:/usr/include/qt6/QtCore/qtversionchecks.h + mdp:/usr/include/qt6/QtCore/qtypeinfo.h + mdp:/usr/include/qt6/QtCore/qtypes.h + mdp:/usr/include/qt6/QtCore/qutf8stringview.h + mdp:/usr/include/qt6/QtCore/qvariant.h + mdp:/usr/include/qt6/QtCore/qvarlengtharray.h + mdp:/usr/include/qt6/QtCore/qversiontagging.h + mdp:/usr/include/qt6/QtCore/qxptype_traits.h + mdp:/usr/include/qt6/QtCore/qyieldcpu.h + mdp:/usr/include/sched.h + mdp:/usr/include/stdc-predef.h + mdp:/usr/include/stdio.h + mdp:/usr/include/string.h + mdp:/usr/include/strings.h + mdp:/usr/include/sys/cdefs.h + mdp:/usr/include/sys/single_threaded.h + mdp:/usr/include/sys/syscall.h + mdp:/usr/include/syscall.h + mdp:/usr/include/time.h + mdp:/usr/include/unistd.h + mdp:/usr/include/wchar.h + mdp:/usr/include/wctype.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/limits.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stdarg.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stdbool.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stddef.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stdint.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/syslimits.h +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/db.h + mmc:Q_OBJECT + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_db_autogen/moc_predefs.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/db.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/i_asset_database.h + mdp:/usr/include/asm-generic/bitsperlong.h + mdp:/usr/include/asm-generic/errno-base.h + mdp:/usr/include/asm-generic/errno.h + mdp:/usr/include/asm-generic/int-ll64.h + mdp:/usr/include/asm-generic/posix_types.h + mdp:/usr/include/asm-generic/types.h + mdp:/usr/include/asm/bitsperlong.h + mdp:/usr/include/asm/errno.h + mdp:/usr/include/asm/posix_types.h + mdp:/usr/include/asm/posix_types_64.h + mdp:/usr/include/asm/types.h + mdp:/usr/include/asm/unistd.h + mdp:/usr/include/asm/unistd_64.h + mdp:/usr/include/assert.h + mdp:/usr/include/bits/atomic_wide_counter.h + mdp:/usr/include/bits/confname.h + mdp:/usr/include/bits/cpu-set.h + mdp:/usr/include/bits/endian.h + mdp:/usr/include/bits/endianness.h + mdp:/usr/include/bits/environments.h + mdp:/usr/include/bits/errno.h + mdp:/usr/include/bits/floatn-common.h + mdp:/usr/include/bits/floatn.h + mdp:/usr/include/bits/getopt_core.h + mdp:/usr/include/bits/getopt_posix.h + mdp:/usr/include/bits/libc-header-start.h + mdp:/usr/include/bits/locale.h + mdp:/usr/include/bits/long-double.h + mdp:/usr/include/bits/posix_opt.h + mdp:/usr/include/bits/pthread_stack_min-dynamic.h + mdp:/usr/include/bits/pthreadtypes-arch.h + mdp:/usr/include/bits/pthreadtypes.h + mdp:/usr/include/bits/sched.h + mdp:/usr/include/bits/setjmp.h + mdp:/usr/include/bits/stdio_lim.h + mdp:/usr/include/bits/struct_mutex.h + mdp:/usr/include/bits/struct_rwlock.h + mdp:/usr/include/bits/syscall.h + mdp:/usr/include/bits/thread-shared-types.h + mdp:/usr/include/bits/time.h + mdp:/usr/include/bits/time64.h + mdp:/usr/include/bits/timesize.h + mdp:/usr/include/bits/timex.h + mdp:/usr/include/bits/types.h + mdp:/usr/include/bits/types/FILE.h + mdp:/usr/include/bits/types/__FILE.h + mdp:/usr/include/bits/types/__fpos64_t.h + mdp:/usr/include/bits/types/__fpos_t.h + mdp:/usr/include/bits/types/__locale_t.h + mdp:/usr/include/bits/types/__mbstate_t.h + mdp:/usr/include/bits/types/__sigset_t.h + mdp:/usr/include/bits/types/clock_t.h + mdp:/usr/include/bits/types/clockid_t.h + mdp:/usr/include/bits/types/cookie_io_functions_t.h + mdp:/usr/include/bits/types/error_t.h + mdp:/usr/include/bits/types/locale_t.h + mdp:/usr/include/bits/types/mbstate_t.h + mdp:/usr/include/bits/types/struct_FILE.h + mdp:/usr/include/bits/types/struct___jmp_buf_tag.h + mdp:/usr/include/bits/types/struct_itimerspec.h + mdp:/usr/include/bits/types/struct_sched_param.h + mdp:/usr/include/bits/types/struct_timespec.h + mdp:/usr/include/bits/types/struct_timeval.h + mdp:/usr/include/bits/types/struct_tm.h + mdp:/usr/include/bits/types/time_t.h + mdp:/usr/include/bits/types/timer_t.h + mdp:/usr/include/bits/types/wint_t.h + mdp:/usr/include/bits/typesizes.h + mdp:/usr/include/bits/unistd_ext.h + mdp:/usr/include/bits/wchar.h + mdp:/usr/include/bits/wctype-wchar.h + mdp:/usr/include/bits/wordsize.h + mdp:/usr/include/c++/15/algorithm + mdp:/usr/include/c++/15/array + mdp:/usr/include/c++/15/atomic + mdp:/usr/include/c++/15/backward/auto_ptr.h + mdp:/usr/include/c++/15/backward/binders.h + mdp:/usr/include/c++/15/bit + mdp:/usr/include/c++/15/bits/algorithmfwd.h + mdp:/usr/include/c++/15/bits/align.h + mdp:/usr/include/c++/15/bits/alloc_traits.h + mdp:/usr/include/c++/15/bits/allocated_ptr.h + mdp:/usr/include/c++/15/bits/allocator.h + mdp:/usr/include/c++/15/bits/atomic_base.h + mdp:/usr/include/c++/15/bits/atomic_lockfree_defines.h + mdp:/usr/include/c++/15/bits/atomic_wait.h + mdp:/usr/include/c++/15/bits/basic_ios.h + mdp:/usr/include/c++/15/bits/basic_ios.tcc + mdp:/usr/include/c++/15/bits/basic_string.h + mdp:/usr/include/c++/15/bits/basic_string.tcc + mdp:/usr/include/c++/15/bits/char_traits.h + mdp:/usr/include/c++/15/bits/charconv.h + mdp:/usr/include/c++/15/bits/chrono.h + mdp:/usr/include/c++/15/bits/chrono_io.h + mdp:/usr/include/c++/15/bits/codecvt.h + mdp:/usr/include/c++/15/bits/concept_check.h + mdp:/usr/include/c++/15/bits/cpp_type_traits.h + mdp:/usr/include/c++/15/bits/cxxabi_forced.h + mdp:/usr/include/c++/15/bits/cxxabi_init_exception.h + mdp:/usr/include/c++/15/bits/enable_special_members.h + mdp:/usr/include/c++/15/bits/erase_if.h + mdp:/usr/include/c++/15/bits/exception.h + mdp:/usr/include/c++/15/bits/exception_defines.h + mdp:/usr/include/c++/15/bits/exception_ptr.h + mdp:/usr/include/c++/15/bits/functexcept.h + mdp:/usr/include/c++/15/bits/functional_hash.h + mdp:/usr/include/c++/15/bits/hash_bytes.h + mdp:/usr/include/c++/15/bits/hashtable.h + mdp:/usr/include/c++/15/bits/hashtable_policy.h + mdp:/usr/include/c++/15/bits/invoke.h + mdp:/usr/include/c++/15/bits/ios_base.h + mdp:/usr/include/c++/15/bits/istream.tcc + mdp:/usr/include/c++/15/bits/iterator_concepts.h + mdp:/usr/include/c++/15/bits/list.tcc + mdp:/usr/include/c++/15/bits/locale_classes.h + mdp:/usr/include/c++/15/bits/locale_classes.tcc + mdp:/usr/include/c++/15/bits/locale_conv.h + mdp:/usr/include/c++/15/bits/locale_facets.h + mdp:/usr/include/c++/15/bits/locale_facets.tcc + mdp:/usr/include/c++/15/bits/locale_facets_nonio.h + mdp:/usr/include/c++/15/bits/locale_facets_nonio.tcc + mdp:/usr/include/c++/15/bits/localefwd.h + mdp:/usr/include/c++/15/bits/max_size_type.h + mdp:/usr/include/c++/15/bits/memory_resource.h + mdp:/usr/include/c++/15/bits/memoryfwd.h + mdp:/usr/include/c++/15/bits/move.h + mdp:/usr/include/c++/15/bits/nested_exception.h + mdp:/usr/include/c++/15/bits/new_allocator.h + mdp:/usr/include/c++/15/bits/node_handle.h + mdp:/usr/include/c++/15/bits/ostream.h + mdp:/usr/include/c++/15/bits/ostream.tcc + mdp:/usr/include/c++/15/bits/ostream_insert.h + mdp:/usr/include/c++/15/bits/parse_numbers.h + mdp:/usr/include/c++/15/bits/postypes.h + mdp:/usr/include/c++/15/bits/predefined_ops.h + mdp:/usr/include/c++/15/bits/ptr_traits.h + mdp:/usr/include/c++/15/bits/quoted_string.h + mdp:/usr/include/c++/15/bits/range_access.h + mdp:/usr/include/c++/15/bits/ranges_algo.h + mdp:/usr/include/c++/15/bits/ranges_algobase.h + mdp:/usr/include/c++/15/bits/ranges_base.h + mdp:/usr/include/c++/15/bits/ranges_cmp.h + mdp:/usr/include/c++/15/bits/ranges_uninitialized.h + mdp:/usr/include/c++/15/bits/ranges_util.h + mdp:/usr/include/c++/15/bits/refwrap.h + mdp:/usr/include/c++/15/bits/requires_hosted.h + mdp:/usr/include/c++/15/bits/shared_ptr.h + mdp:/usr/include/c++/15/bits/shared_ptr_atomic.h + mdp:/usr/include/c++/15/bits/shared_ptr_base.h + mdp:/usr/include/c++/15/bits/specfun.h + mdp:/usr/include/c++/15/bits/sstream.tcc + mdp:/usr/include/c++/15/bits/std_abs.h + mdp:/usr/include/c++/15/bits/std_function.h + mdp:/usr/include/c++/15/bits/std_mutex.h + mdp:/usr/include/c++/15/bits/stl_algo.h + mdp:/usr/include/c++/15/bits/stl_algobase.h + mdp:/usr/include/c++/15/bits/stl_bvector.h + mdp:/usr/include/c++/15/bits/stl_construct.h + mdp:/usr/include/c++/15/bits/stl_function.h + mdp:/usr/include/c++/15/bits/stl_heap.h + mdp:/usr/include/c++/15/bits/stl_iterator.h + mdp:/usr/include/c++/15/bits/stl_iterator_base_funcs.h + mdp:/usr/include/c++/15/bits/stl_iterator_base_types.h + mdp:/usr/include/c++/15/bits/stl_list.h + mdp:/usr/include/c++/15/bits/stl_map.h + mdp:/usr/include/c++/15/bits/stl_multimap.h + mdp:/usr/include/c++/15/bits/stl_multiset.h + mdp:/usr/include/c++/15/bits/stl_numeric.h + mdp:/usr/include/c++/15/bits/stl_pair.h + mdp:/usr/include/c++/15/bits/stl_raw_storage_iter.h + mdp:/usr/include/c++/15/bits/stl_relops.h + mdp:/usr/include/c++/15/bits/stl_set.h + mdp:/usr/include/c++/15/bits/stl_tempbuf.h + mdp:/usr/include/c++/15/bits/stl_tree.h + mdp:/usr/include/c++/15/bits/stl_uninitialized.h + mdp:/usr/include/c++/15/bits/stl_vector.h + mdp:/usr/include/c++/15/bits/stream_iterator.h + mdp:/usr/include/c++/15/bits/streambuf.tcc + mdp:/usr/include/c++/15/bits/streambuf_iterator.h + mdp:/usr/include/c++/15/bits/string_view.tcc + mdp:/usr/include/c++/15/bits/stringfwd.h + mdp:/usr/include/c++/15/bits/uniform_int_dist.h + mdp:/usr/include/c++/15/bits/unique_ptr.h + mdp:/usr/include/c++/15/bits/unordered_map.h + mdp:/usr/include/c++/15/bits/unordered_set.h + mdp:/usr/include/c++/15/bits/uses_allocator.h + mdp:/usr/include/c++/15/bits/uses_allocator_args.h + mdp:/usr/include/c++/15/bits/utility.h + mdp:/usr/include/c++/15/bits/vector.tcc + mdp:/usr/include/c++/15/bits/version.h + mdp:/usr/include/c++/15/cassert + mdp:/usr/include/c++/15/cctype + mdp:/usr/include/c++/15/cerrno + mdp:/usr/include/c++/15/charconv + mdp:/usr/include/c++/15/chrono + mdp:/usr/include/c++/15/climits + mdp:/usr/include/c++/15/clocale + mdp:/usr/include/c++/15/cmath + mdp:/usr/include/c++/15/compare + mdp:/usr/include/c++/15/concepts + mdp:/usr/include/c++/15/cstddef + mdp:/usr/include/c++/15/cstdint + mdp:/usr/include/c++/15/cstdio + mdp:/usr/include/c++/15/cstdlib + mdp:/usr/include/c++/15/cstring + mdp:/usr/include/c++/15/ctime + mdp:/usr/include/c++/15/cwchar + mdp:/usr/include/c++/15/cwctype + mdp:/usr/include/c++/15/debug/assertions.h + mdp:/usr/include/c++/15/debug/debug.h + mdp:/usr/include/c++/15/exception + mdp:/usr/include/c++/15/ext/aligned_buffer.h + mdp:/usr/include/c++/15/ext/alloc_traits.h + mdp:/usr/include/c++/15/ext/atomicity.h + mdp:/usr/include/c++/15/ext/concurrence.h + mdp:/usr/include/c++/15/ext/numeric_traits.h + mdp:/usr/include/c++/15/ext/string_conversions.h + mdp:/usr/include/c++/15/ext/type_traits.h + mdp:/usr/include/c++/15/filesystem + mdp:/usr/include/c++/15/format + mdp:/usr/include/c++/15/functional + mdp:/usr/include/c++/15/initializer_list + mdp:/usr/include/c++/15/iomanip + mdp:/usr/include/c++/15/ios + mdp:/usr/include/c++/15/iosfwd + mdp:/usr/include/c++/15/istream + mdp:/usr/include/c++/15/iterator + mdp:/usr/include/c++/15/limits + mdp:/usr/include/c++/15/list + mdp:/usr/include/c++/15/locale + mdp:/usr/include/c++/15/map + mdp:/usr/include/c++/15/memory + mdp:/usr/include/c++/15/new + mdp:/usr/include/c++/15/numeric + mdp:/usr/include/c++/15/optional + mdp:/usr/include/c++/15/ostream + mdp:/usr/include/c++/15/pstl/execution_defs.h + mdp:/usr/include/c++/15/pstl/glue_numeric_defs.h + mdp:/usr/include/c++/15/pstl/pstl_config.h + mdp:/usr/include/c++/15/ratio + mdp:/usr/include/c++/15/set + mdp:/usr/include/c++/15/sstream + mdp:/usr/include/c++/15/stdexcept + mdp:/usr/include/c++/15/stdlib.h + mdp:/usr/include/c++/15/streambuf + mdp:/usr/include/c++/15/string + mdp:/usr/include/c++/15/string_view + mdp:/usr/include/c++/15/system_error + mdp:/usr/include/c++/15/tr1/bessel_function.tcc + mdp:/usr/include/c++/15/tr1/beta_function.tcc + mdp:/usr/include/c++/15/tr1/ell_integral.tcc + mdp:/usr/include/c++/15/tr1/exp_integral.tcc + mdp:/usr/include/c++/15/tr1/gamma.tcc + mdp:/usr/include/c++/15/tr1/hypergeometric.tcc + mdp:/usr/include/c++/15/tr1/legendre_function.tcc + mdp:/usr/include/c++/15/tr1/modified_bessel_func.tcc + mdp:/usr/include/c++/15/tr1/poly_hermite.tcc + mdp:/usr/include/c++/15/tr1/poly_laguerre.tcc + mdp:/usr/include/c++/15/tr1/riemann_zeta.tcc + mdp:/usr/include/c++/15/tr1/special_function_util.h + mdp:/usr/include/c++/15/tuple + mdp:/usr/include/c++/15/type_traits + mdp:/usr/include/c++/15/typeinfo + mdp:/usr/include/c++/15/unordered_map + mdp:/usr/include/c++/15/unordered_set + mdp:/usr/include/c++/15/utility + mdp:/usr/include/c++/15/variant + mdp:/usr/include/c++/15/vector + mdp:/usr/include/c++/15/version + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/atomic_word.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++allocator.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++config.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++locale.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/cpu_defines.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/ctype_base.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/ctype_inline.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/error_constants.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/gthr-default.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/gthr.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/messages_members.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/os_defines.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/time_members.h + mdp:/usr/include/ctype.h + mdp:/usr/include/errno.h + mdp:/usr/include/features-time64.h + mdp:/usr/include/features.h + mdp:/usr/include/gnu/stubs-64.h + mdp:/usr/include/gnu/stubs.h + mdp:/usr/include/libintl.h + mdp:/usr/include/linux/close_range.h + mdp:/usr/include/linux/errno.h + mdp:/usr/include/linux/posix_types.h + mdp:/usr/include/linux/sched/types.h + mdp:/usr/include/linux/stddef.h + mdp:/usr/include/linux/types.h + mdp:/usr/include/locale.h + mdp:/usr/include/pthread.h + mdp:/usr/include/qt6/QtCore/QFileInfo + mdp:/usr/include/qt6/QtCore/QHash + mdp:/usr/include/qt6/QtCore/QObject + mdp:/usr/include/qt6/QtCore/QPair + mdp:/usr/include/qt6/QtCore/QString + mdp:/usr/include/qt6/QtCore/QStringList + mdp:/usr/include/qt6/QtCore/QVariant + mdp:/usr/include/qt6/QtCore/QVector + mdp:/usr/include/qt6/QtCore/q17memory.h + mdp:/usr/include/qt6/QtCore/q20functional.h + mdp:/usr/include/qt6/QtCore/q20iterator.h + mdp:/usr/include/qt6/QtCore/q20memory.h + mdp:/usr/include/qt6/QtCore/q20type_traits.h + mdp:/usr/include/qt6/QtCore/q20utility.h + mdp:/usr/include/qt6/QtCore/q23type_traits.h + mdp:/usr/include/qt6/QtCore/q23utility.h + mdp:/usr/include/qt6/QtCore/qalgorithms.h + mdp:/usr/include/qt6/QtCore/qalloc.h + mdp:/usr/include/qt6/QtCore/qanystringview.h + mdp:/usr/include/qt6/QtCore/qarraydata.h + mdp:/usr/include/qt6/QtCore/qarraydataops.h + mdp:/usr/include/qt6/QtCore/qarraydatapointer.h + mdp:/usr/include/qt6/QtCore/qassert.h + mdp:/usr/include/qt6/QtCore/qatomic.h + mdp:/usr/include/qt6/QtCore/qatomic_cxx11.h + mdp:/usr/include/qt6/QtCore/qbasicatomic.h + mdp:/usr/include/qt6/QtCore/qbindingstorage.h + mdp:/usr/include/qt6/QtCore/qbytearray.h + mdp:/usr/include/qt6/QtCore/qbytearrayalgorithms.h + mdp:/usr/include/qt6/QtCore/qbytearraylist.h + mdp:/usr/include/qt6/QtCore/qbytearrayview.h + mdp:/usr/include/qt6/QtCore/qcalendar.h + mdp:/usr/include/qt6/QtCore/qchar.h + mdp:/usr/include/qt6/QtCore/qcompare.h + mdp:/usr/include/qt6/QtCore/qcompare_impl.h + mdp:/usr/include/qt6/QtCore/qcomparehelpers.h + mdp:/usr/include/qt6/QtCore/qcompilerdetection.h + mdp:/usr/include/qt6/QtCore/qconfig-64.h + mdp:/usr/include/qt6/QtCore/qconfig.h + mdp:/usr/include/qt6/QtCore/qconstructormacros.h + mdp:/usr/include/qt6/QtCore/qcontainerfwd.h + mdp:/usr/include/qt6/QtCore/qcontainerinfo.h + mdp:/usr/include/qt6/QtCore/qcontainertools_impl.h + mdp:/usr/include/qt6/QtCore/qcontiguouscache.h + mdp:/usr/include/qt6/QtCore/qdarwinhelpers.h + mdp:/usr/include/qt6/QtCore/qdatastream.h + mdp:/usr/include/qt6/QtCore/qdatetime.h + mdp:/usr/include/qt6/QtCore/qdebug.h + mdp:/usr/include/qt6/QtCore/qexceptionhandling.h + mdp:/usr/include/qt6/QtCore/qfile.h + mdp:/usr/include/qt6/QtCore/qfiledevice.h + mdp:/usr/include/qt6/QtCore/qfileinfo.h + mdp:/usr/include/qt6/QtCore/qflags.h + mdp:/usr/include/qt6/QtCore/qfloat16.h + mdp:/usr/include/qt6/QtCore/qforeach.h + mdp:/usr/include/qt6/QtCore/qfunctionaltools_impl.h + mdp:/usr/include/qt6/QtCore/qfunctionpointer.h + mdp:/usr/include/qt6/QtCore/qgenericatomic.h + mdp:/usr/include/qt6/QtCore/qglobal.h + mdp:/usr/include/qt6/QtCore/qglobalstatic.h + mdp:/usr/include/qt6/QtCore/qhash.h + mdp:/usr/include/qt6/QtCore/qhashfunctions.h + mdp:/usr/include/qt6/QtCore/qiodevice.h + mdp:/usr/include/qt6/QtCore/qiodevicebase.h + mdp:/usr/include/qt6/QtCore/qiterable.h + mdp:/usr/include/qt6/QtCore/qiterator.h + mdp:/usr/include/qt6/QtCore/qlatin1stringview.h + mdp:/usr/include/qt6/QtCore/qlist.h + mdp:/usr/include/qt6/QtCore/qlocale.h + mdp:/usr/include/qt6/QtCore/qlogging.h + mdp:/usr/include/qt6/QtCore/qmalloc.h + mdp:/usr/include/qt6/QtCore/qmap.h + mdp:/usr/include/qt6/QtCore/qmath.h + mdp:/usr/include/qt6/QtCore/qmetacontainer.h + mdp:/usr/include/qt6/QtCore/qmetaobject.h + mdp:/usr/include/qt6/QtCore/qmetatype.h + mdp:/usr/include/qt6/QtCore/qminmax.h + mdp:/usr/include/qt6/QtCore/qnamespace.h + mdp:/usr/include/qt6/QtCore/qnumeric.h + mdp:/usr/include/qt6/QtCore/qobject.h + mdp:/usr/include/qt6/QtCore/qobject_impl.h + mdp:/usr/include/qt6/QtCore/qobjectdefs.h + mdp:/usr/include/qt6/QtCore/qobjectdefs_impl.h + mdp:/usr/include/qt6/QtCore/qoverload.h + mdp:/usr/include/qt6/QtCore/qpair.h + mdp:/usr/include/qt6/QtCore/qprocessordetection.h + mdp:/usr/include/qt6/QtCore/qrefcount.h + mdp:/usr/include/qt6/QtCore/qscopedpointer.h + mdp:/usr/include/qt6/QtCore/qscopeguard.h + mdp:/usr/include/qt6/QtCore/qset.h + mdp:/usr/include/qt6/QtCore/qshareddata.h + mdp:/usr/include/qt6/QtCore/qshareddata_impl.h + mdp:/usr/include/qt6/QtCore/qsharedpointer.h + mdp:/usr/include/qt6/QtCore/qsharedpointer_impl.h + mdp:/usr/include/qt6/QtCore/qspan.h + mdp:/usr/include/qt6/QtCore/qstdlibdetection.h + mdp:/usr/include/qt6/QtCore/qstring.h + mdp:/usr/include/qt6/QtCore/qstringalgorithms.h + mdp:/usr/include/qt6/QtCore/qstringbuilder.h + mdp:/usr/include/qt6/QtCore/qstringconverter.h + mdp:/usr/include/qt6/QtCore/qstringconverter_base.h + mdp:/usr/include/qt6/QtCore/qstringfwd.h + mdp:/usr/include/qt6/QtCore/qstringlist.h + mdp:/usr/include/qt6/QtCore/qstringmatcher.h + mdp:/usr/include/qt6/QtCore/qstringtokenizer.h + mdp:/usr/include/qt6/QtCore/qstringview.h + mdp:/usr/include/qt6/QtCore/qswap.h + mdp:/usr/include/qt6/QtCore/qsysinfo.h + mdp:/usr/include/qt6/QtCore/qsystemdetection.h + mdp:/usr/include/qt6/QtCore/qtaggedpointer.h + mdp:/usr/include/qt6/QtCore/qtclasshelpermacros.h + mdp:/usr/include/qt6/QtCore/qtconfiginclude.h + mdp:/usr/include/qt6/QtCore/qtconfigmacros.h + mdp:/usr/include/qt6/QtCore/qtcore-config.h + mdp:/usr/include/qt6/QtCore/qtcoreexports.h + mdp:/usr/include/qt6/QtCore/qtcoreglobal.h + mdp:/usr/include/qt6/QtCore/qtdeprecationdefinitions.h + mdp:/usr/include/qt6/QtCore/qtdeprecationmarkers.h + mdp:/usr/include/qt6/QtCore/qtenvironmentvariables.h + mdp:/usr/include/qt6/QtCore/qtextstream.h + mdp:/usr/include/qt6/QtCore/qtformat_impl.h + mdp:/usr/include/qt6/QtCore/qtimezone.h + mdp:/usr/include/qt6/QtCore/qtmetamacros.h + mdp:/usr/include/qt6/QtCore/qtnoop.h + mdp:/usr/include/qt6/QtCore/qtpreprocessorsupport.h + mdp:/usr/include/qt6/QtCore/qtresource.h + mdp:/usr/include/qt6/QtCore/qttranslation.h + mdp:/usr/include/qt6/QtCore/qttypetraits.h + mdp:/usr/include/qt6/QtCore/qtversion.h + mdp:/usr/include/qt6/QtCore/qtversionchecks.h + mdp:/usr/include/qt6/QtCore/qtypeinfo.h + mdp:/usr/include/qt6/QtCore/qtypes.h + mdp:/usr/include/qt6/QtCore/qutf8stringview.h + mdp:/usr/include/qt6/QtCore/qvariant.h + mdp:/usr/include/qt6/QtCore/qvarlengtharray.h + mdp:/usr/include/qt6/QtCore/qvector.h + mdp:/usr/include/qt6/QtCore/qversiontagging.h + mdp:/usr/include/qt6/QtCore/qxptype_traits.h + mdp:/usr/include/qt6/QtCore/qyieldcpu.h + mdp:/usr/include/qt6/QtSql/QSqlDatabase + mdp:/usr/include/qt6/QtSql/QSqlError + mdp:/usr/include/qt6/QtSql/QSqlQuery + mdp:/usr/include/qt6/QtSql/qsqldatabase.h + mdp:/usr/include/qt6/QtSql/qsqlerror.h + mdp:/usr/include/qt6/QtSql/qsqlquery.h + mdp:/usr/include/qt6/QtSql/qtsql-config.h + mdp:/usr/include/qt6/QtSql/qtsqlexports.h + mdp:/usr/include/qt6/QtSql/qtsqlglobal.h + mdp:/usr/include/sched.h + mdp:/usr/include/stdc-predef.h + mdp:/usr/include/stdio.h + mdp:/usr/include/string.h + mdp:/usr/include/strings.h + mdp:/usr/include/sys/cdefs.h + mdp:/usr/include/sys/single_threaded.h + mdp:/usr/include/sys/syscall.h + mdp:/usr/include/syscall.h + mdp:/usr/include/time.h + mdp:/usr/include/unistd.h + mdp:/usr/include/wchar.h + mdp:/usr/include/wctype.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/limits.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stdarg.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stdbool.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stddef.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stdint.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/syslimits.h diff --git a/build-linux/tests/CMakeFiles/test_drag_utils.dir/__/src/drag_utils.cpp.o b/build-linux/tests/CMakeFiles/test_drag_utils.dir/__/src/drag_utils.cpp.o new file mode 100644 index 00000000..a3c6f79f Binary files /dev/null and b/build-linux/tests/CMakeFiles/test_drag_utils.dir/__/src/drag_utils.cpp.o differ diff --git a/build-linux/tests/CMakeFiles/test_drag_utils.dir/test_drag_utils.cpp.o b/build-linux/tests/CMakeFiles/test_drag_utils.dir/test_drag_utils.cpp.o new file mode 100644 index 00000000..448e79f7 Binary files /dev/null and b/build-linux/tests/CMakeFiles/test_drag_utils.dir/test_drag_utils.cpp.o differ diff --git a/build-linux/tests/CMakeFiles/test_drag_utils.dir/test_drag_utils_autogen/mocs_compilation.cpp.o b/build-linux/tests/CMakeFiles/test_drag_utils.dir/test_drag_utils_autogen/mocs_compilation.cpp.o new file mode 100644 index 00000000..9e9803e8 Binary files /dev/null and b/build-linux/tests/CMakeFiles/test_drag_utils.dir/test_drag_utils_autogen/mocs_compilation.cpp.o differ diff --git a/build-linux/tests/CMakeFiles/test_drag_utils_autogen.dir/AutogenInfo.json b/build-linux/tests/CMakeFiles/test_drag_utils_autogen.dir/AutogenInfo.json new file mode 100644 index 00000000..47984b99 --- /dev/null +++ b/build-linux/tests/CMakeFiles/test_drag_utils_autogen.dir/AutogenInfo.json @@ -0,0 +1,204 @@ +{ + "BUILD_DIR" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_drag_utils_autogen", + "CMAKE_BINARY_DIR" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux", + "CMAKE_CURRENT_BINARY_DIR" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests", + "CMAKE_CURRENT_SOURCE_DIR" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests", + "CMAKE_EXECUTABLE" : "/usr/bin/cmake", + "CMAKE_LIST_FILES" : + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/CMakeLists.txt", + "/usr/lib64/cmake/Qt6/Qt6ConfigVersion.cmake", + "/usr/lib64/cmake/Qt6/Qt6ConfigVersionImpl.cmake", + "/usr/lib64/cmake/Qt6/Qt6Config.cmake", + "/usr/lib64/cmake/Qt6/QtPublicCMakeEarlyPolicyHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicCMakeHelpers.cmake", + "/usr/lib64/cmake/Qt6/Qt6ConfigExtras.cmake", + "/usr/lib64/cmake/Qt6/QtPublicCMakeVersionHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtInstallPaths.cmake", + "/usr/lib64/cmake/Qt6/Qt6Targets.cmake", + "/usr/lib64/cmake/Qt6/Qt6VersionlessAliasTargets.cmake", + "/usr/lib64/cmake/Qt6/QtFeature.cmake", + "/usr/share/cmake/Modules/CheckCXXCompilerFlag.cmake", + "/usr/lib64/cmake/Qt6/QtFeatureCommon.cmake", + "/usr/lib64/cmake/Qt6/QtPublicAndroidHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicAppleHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicCMakeHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicCMakeVersionHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicDependencyHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicExternalProjectHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicFinalizerHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicFindPackageHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicGitHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicPluginHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicPluginHelpers_v2.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomAttributionHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomBuildToolHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomCommonGenerationHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomCpeHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomCycloneDXHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomDocumentNamespaceHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomDepHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomExternalReferenceHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomFileHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomGenerationHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomGenerationCycloneDXHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomLicenseHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomOpsHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomPurlHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomPythonHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomQtEntityHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomRelationshipHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomSystemDepHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicTargetHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicTestHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicToolHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicWalkLibsHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicWindowsHelpers.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6/Qt6Dependencies.cmake", + "/usr/lib64/cmake/Qt6Test/Qt6TestConfigVersion.cmake", + "/usr/lib64/cmake/Qt6Test/Qt6TestConfigVersionImpl.cmake", + "/usr/lib64/cmake/Qt6Test/Qt6TestConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6Test/Qt6TestDependencies.cmake", + "/usr/lib64/cmake/Qt6Test/Qt6TestTargets.cmake", + "/usr/lib64/cmake/Qt6Test/Qt6TestTargets-relwithdebinfo.cmake", + "/usr/lib64/cmake/Qt6Test/Qt6TestAdditionalTargetInfo.cmake", + "/usr/lib64/cmake/Qt6Test/QtTestProperties.cmake", + "/usr/lib64/cmake/Qt6Test/Qt6TestVersionlessAliasTargets.cmake" + ], + "CMAKE_SOURCE_DIR" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6", + "CROSS_CONFIG" : false, + "DEP_FILE" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_drag_utils_autogen/deps", + "DEP_FILE_RULE_NAME" : "test_drag_utils_autogen/timestamp", + "HEADERS" : + [ + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/drag_utils.h", + "MU", + "VNU7RW3YIC/moc_drag_utils.cpp", + null + ] + ], + "HEADER_EXTENSIONS" : [ "h", "hh", "h++", "hm", "hpp", "hxx", "in", "txx" ], + "INCLUDE_DIR" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_drag_utils_autogen/include", + "MOC_COMPILATION_FILE" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_drag_utils_autogen/mocs_compilation.cpp", + "MOC_DEFINITIONS" : + [ + "FTK_API_GL_4_1", + "QT_CORE_LIB", + "QT_GUI_LIB", + "QT_NO_DEBUG", + "QT_TESTCASE_BUILDDIR=\"/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests\"", + "QT_TESTCASE_SOURCEDIR=\"/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests\"", + "QT_TESTLIB_LIB", + "QT_WIDGETS_LIB", + "TLRENDER_EXR", + "TLRENDER_FFMPEG", + "TLRENDER_FFMPEG_PLUGIN", + "TLRENDER_JPEG", + "TLRENDER_OCIO", + "TLRENDER_OIIO", + "TLRENDER_PNG", + "TLRENDER_SDL2", + "TLRENDER_TIFF" + ], + "MOC_DEPEND_FILTERS" : + [ + [ + "Q_PLUGIN_METADATA", + "[\n][ \t]*Q_PLUGIN_METADATA[ \t]*\\([^\\)]*FILE[ \t]*\"([^\"]+)\"" + ] + ], + "MOC_INCLUDES" : + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src", + "/usr/include/qt6/QtTest", + "/usr/include/qt6", + "/usr/include/qt6/QtCore", + "/usr/lib64/qt6/mkspecs/linux-g++", + "/usr/include/qt6/QtGui", + "/usr/include/qt6/QtWidgets", + "/usr/include", + "/usr/include/c++/15", + "/usr/include/c++/15/x86_64-redhat-linux", + "/usr/include/c++/15/backward", + "/usr/lib/gcc/x86_64-redhat-linux/15/include", + "/usr/local/include" + ], + "MOC_MACRO_NAMES" : + [ + "Q_OBJECT", + "Q_GADGET", + "Q_NAMESPACE", + "Q_NAMESPACE_EXPORT", + "Q_GADGET_EXPORT", + "Q_ENUM_NS" + ], + "MOC_OPTIONS" : [], + "MOC_PATH_PREFIX" : false, + "MOC_PREDEFS_CMD" : + [ + "/usr/bin/c++", + "-std=gnu++20", + "-w", + "-dM", + "-E", + "/usr/share/cmake/Modules/CMakeCXXCompilerABI.cpp" + ], + "MOC_PREDEFS_FILE" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_drag_utils_autogen/moc_predefs.h", + "MOC_RELAXED_MODE" : false, + "MOC_SKIP" : + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_db_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_importer_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_live_preview_manager_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_media_converter_worker_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_models_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_sequence_detector_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_simple_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_utils_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_virtual_drag_autogen/mocs_compilation.cpp" + ], + "MULTI_CONFIG" : false, + "PARALLEL" : 16, + "PARSE_CACHE_FILE" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/CMakeFiles/test_drag_utils_autogen.dir/ParseCache.txt", + "QT_MOC_EXECUTABLE" : "/usr/lib64/qt6/libexec/moc", + "QT_UIC_EXECUTABLE" : "/usr/lib64/qt6/libexec/uic", + "QT_VERSION_MAJOR" : 6, + "QT_VERSION_MINOR" : 10, + "SETTINGS_FILE" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/CMakeFiles/test_drag_utils_autogen.dir/AutogenUsed.txt", + "SOURCES" : + [ + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/drag_utils.cpp", + "MU", + null + ], + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/test_drag_utils.cpp", + "MU", + null + ] + ], + "UIC_OPTIONS" : [], + "UIC_SEARCH_PATHS" : [], + "UIC_SKIP" : + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_db_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_importer_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_live_preview_manager_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_media_converter_worker_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_models_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_sequence_detector_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_simple_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_utils_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_virtual_drag_autogen/mocs_compilation.cpp" + ], + "UIC_UI_FILES" : [], + "USE_BETTER_GRAPH" : true, + "VERBOSITY" : 0 +} diff --git a/build-linux/tests/CMakeFiles/test_drag_utils_autogen.dir/AutogenUsed.txt b/build-linux/tests/CMakeFiles/test_drag_utils_autogen.dir/AutogenUsed.txt new file mode 100644 index 00000000..daf02f00 --- /dev/null +++ b/build-linux/tests/CMakeFiles/test_drag_utils_autogen.dir/AutogenUsed.txt @@ -0,0 +1,2 @@ +moc:22e3e0cd6ce023c87f1cd60f4cbd11053c4a0ee65074ff8cdee66fe423af5dc0 +uic:0df7b06f04b60705a14ff966fc10725af0fb193398324deeaf17e44a5f9db1e0 diff --git a/build-linux/tests/CMakeFiles/test_drag_utils_autogen.dir/ParseCache.txt b/build-linux/tests/CMakeFiles/test_drag_utils_autogen.dir/ParseCache.txt new file mode 100644 index 00000000..e5795db5 --- /dev/null +++ b/build-linux/tests/CMakeFiles/test_drag_utils_autogen.dir/ParseCache.txt @@ -0,0 +1,1293 @@ +# Generated by CMake. Changes will be overwritten. +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/test_drag_utils.cpp + mmc:Q_OBJECT + mid:test_drag_utils.moc + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_drag_utils_autogen/moc_predefs.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/drag_utils.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/test_drag_utils.cpp + mdp:/usr/include/alloca.h + mdp:/usr/include/asm-generic/bitsperlong.h + mdp:/usr/include/asm-generic/errno-base.h + mdp:/usr/include/asm-generic/errno.h + mdp:/usr/include/asm-generic/int-ll64.h + mdp:/usr/include/asm-generic/posix_types.h + mdp:/usr/include/asm-generic/types.h + mdp:/usr/include/asm/bitsperlong.h + mdp:/usr/include/asm/errno.h + mdp:/usr/include/asm/posix_types.h + mdp:/usr/include/asm/posix_types_64.h + mdp:/usr/include/asm/types.h + mdp:/usr/include/asm/unistd.h + mdp:/usr/include/asm/unistd_64.h + mdp:/usr/include/assert.h + mdp:/usr/include/bits/atomic_wide_counter.h + mdp:/usr/include/bits/byteswap.h + mdp:/usr/include/bits/confname.h + mdp:/usr/include/bits/cpu-set.h + mdp:/usr/include/bits/endian.h + mdp:/usr/include/bits/endianness.h + mdp:/usr/include/bits/environments.h + mdp:/usr/include/bits/errno.h + mdp:/usr/include/bits/floatn-common.h + mdp:/usr/include/bits/floatn.h + mdp:/usr/include/bits/getopt_core.h + mdp:/usr/include/bits/getopt_posix.h + mdp:/usr/include/bits/libc-header-start.h + mdp:/usr/include/bits/local_lim.h + mdp:/usr/include/bits/locale.h + mdp:/usr/include/bits/long-double.h + mdp:/usr/include/bits/posix1_lim.h + mdp:/usr/include/bits/posix2_lim.h + mdp:/usr/include/bits/posix_opt.h + mdp:/usr/include/bits/pthread_stack_min-dynamic.h + mdp:/usr/include/bits/pthreadtypes-arch.h + mdp:/usr/include/bits/pthreadtypes.h + mdp:/usr/include/bits/sched.h + mdp:/usr/include/bits/select.h + mdp:/usr/include/bits/semaphore.h + mdp:/usr/include/bits/setjmp.h + mdp:/usr/include/bits/stdint-intn.h + mdp:/usr/include/bits/stdint-least.h + mdp:/usr/include/bits/stdint-uintn.h + mdp:/usr/include/bits/stdio_lim.h + mdp:/usr/include/bits/stdlib-float.h + mdp:/usr/include/bits/struct_mutex.h + mdp:/usr/include/bits/struct_rwlock.h + mdp:/usr/include/bits/syscall.h + mdp:/usr/include/bits/thread-shared-types.h + mdp:/usr/include/bits/time.h + mdp:/usr/include/bits/time64.h + mdp:/usr/include/bits/timesize.h + mdp:/usr/include/bits/timex.h + mdp:/usr/include/bits/types.h + mdp:/usr/include/bits/types/FILE.h + mdp:/usr/include/bits/types/__FILE.h + mdp:/usr/include/bits/types/__fpos64_t.h + mdp:/usr/include/bits/types/__fpos_t.h + mdp:/usr/include/bits/types/__locale_t.h + mdp:/usr/include/bits/types/__mbstate_t.h + mdp:/usr/include/bits/types/__sigset_t.h + mdp:/usr/include/bits/types/clock_t.h + mdp:/usr/include/bits/types/clockid_t.h + mdp:/usr/include/bits/types/cookie_io_functions_t.h + mdp:/usr/include/bits/types/error_t.h + mdp:/usr/include/bits/types/locale_t.h + mdp:/usr/include/bits/types/mbstate_t.h + mdp:/usr/include/bits/types/sigset_t.h + mdp:/usr/include/bits/types/struct_FILE.h + mdp:/usr/include/bits/types/struct___jmp_buf_tag.h + mdp:/usr/include/bits/types/struct_itimerspec.h + mdp:/usr/include/bits/types/struct_sched_param.h + mdp:/usr/include/bits/types/struct_timespec.h + mdp:/usr/include/bits/types/struct_timeval.h + mdp:/usr/include/bits/types/struct_tm.h + mdp:/usr/include/bits/types/time_t.h + mdp:/usr/include/bits/types/timer_t.h + mdp:/usr/include/bits/types/wint_t.h + mdp:/usr/include/bits/typesizes.h + mdp:/usr/include/bits/uintn-identity.h + mdp:/usr/include/bits/uio_lim.h + mdp:/usr/include/bits/unistd_ext.h + mdp:/usr/include/bits/waitflags.h + mdp:/usr/include/bits/waitstatus.h + mdp:/usr/include/bits/wchar.h + mdp:/usr/include/bits/wctype-wchar.h + mdp:/usr/include/bits/wordsize.h + mdp:/usr/include/bits/xopen_lim.h + mdp:/usr/include/c++/15/algorithm + mdp:/usr/include/c++/15/array + mdp:/usr/include/c++/15/atomic + mdp:/usr/include/c++/15/backward/auto_ptr.h + mdp:/usr/include/c++/15/backward/binders.h + mdp:/usr/include/c++/15/bit + mdp:/usr/include/c++/15/bits/algorithmfwd.h + mdp:/usr/include/c++/15/bits/align.h + mdp:/usr/include/c++/15/bits/alloc_traits.h + mdp:/usr/include/c++/15/bits/allocated_ptr.h + mdp:/usr/include/c++/15/bits/allocator.h + mdp:/usr/include/c++/15/bits/atomic_base.h + mdp:/usr/include/c++/15/bits/atomic_futex.h + mdp:/usr/include/c++/15/bits/atomic_lockfree_defines.h + mdp:/usr/include/c++/15/bits/atomic_timed_wait.h + mdp:/usr/include/c++/15/bits/atomic_wait.h + mdp:/usr/include/c++/15/bits/basic_ios.h + mdp:/usr/include/c++/15/bits/basic_ios.tcc + mdp:/usr/include/c++/15/bits/basic_string.h + mdp:/usr/include/c++/15/bits/basic_string.tcc + mdp:/usr/include/c++/15/bits/char_traits.h + mdp:/usr/include/c++/15/bits/charconv.h + mdp:/usr/include/c++/15/bits/chrono.h + mdp:/usr/include/c++/15/bits/chrono_io.h + mdp:/usr/include/c++/15/bits/codecvt.h + mdp:/usr/include/c++/15/bits/concept_check.h + mdp:/usr/include/c++/15/bits/cpp_type_traits.h + mdp:/usr/include/c++/15/bits/cxxabi_forced.h + mdp:/usr/include/c++/15/bits/cxxabi_init_exception.h + mdp:/usr/include/c++/15/bits/enable_special_members.h + mdp:/usr/include/c++/15/bits/erase_if.h + mdp:/usr/include/c++/15/bits/exception.h + mdp:/usr/include/c++/15/bits/exception_defines.h + mdp:/usr/include/c++/15/bits/exception_ptr.h + mdp:/usr/include/c++/15/bits/functexcept.h + mdp:/usr/include/c++/15/bits/functional_hash.h + mdp:/usr/include/c++/15/bits/hash_bytes.h + mdp:/usr/include/c++/15/bits/hashtable.h + mdp:/usr/include/c++/15/bits/hashtable_policy.h + mdp:/usr/include/c++/15/bits/invoke.h + mdp:/usr/include/c++/15/bits/ios_base.h + mdp:/usr/include/c++/15/bits/istream.tcc + mdp:/usr/include/c++/15/bits/iterator_concepts.h + mdp:/usr/include/c++/15/bits/list.tcc + mdp:/usr/include/c++/15/bits/locale_classes.h + mdp:/usr/include/c++/15/bits/locale_classes.tcc + mdp:/usr/include/c++/15/bits/locale_conv.h + mdp:/usr/include/c++/15/bits/locale_facets.h + mdp:/usr/include/c++/15/bits/locale_facets.tcc + mdp:/usr/include/c++/15/bits/locale_facets_nonio.h + mdp:/usr/include/c++/15/bits/locale_facets_nonio.tcc + mdp:/usr/include/c++/15/bits/localefwd.h + mdp:/usr/include/c++/15/bits/max_size_type.h + mdp:/usr/include/c++/15/bits/memory_resource.h + mdp:/usr/include/c++/15/bits/memoryfwd.h + mdp:/usr/include/c++/15/bits/move.h + mdp:/usr/include/c++/15/bits/nested_exception.h + mdp:/usr/include/c++/15/bits/new_allocator.h + mdp:/usr/include/c++/15/bits/node_handle.h + mdp:/usr/include/c++/15/bits/ostream.h + mdp:/usr/include/c++/15/bits/ostream.tcc + mdp:/usr/include/c++/15/bits/ostream_insert.h + mdp:/usr/include/c++/15/bits/parse_numbers.h + mdp:/usr/include/c++/15/bits/postypes.h + mdp:/usr/include/c++/15/bits/predefined_ops.h + mdp:/usr/include/c++/15/bits/ptr_traits.h + mdp:/usr/include/c++/15/bits/quoted_string.h + mdp:/usr/include/c++/15/bits/random.h + mdp:/usr/include/c++/15/bits/random.tcc + mdp:/usr/include/c++/15/bits/range_access.h + mdp:/usr/include/c++/15/bits/ranges_algo.h + mdp:/usr/include/c++/15/bits/ranges_algobase.h + mdp:/usr/include/c++/15/bits/ranges_base.h + mdp:/usr/include/c++/15/bits/ranges_cmp.h + mdp:/usr/include/c++/15/bits/ranges_uninitialized.h + mdp:/usr/include/c++/15/bits/ranges_util.h + mdp:/usr/include/c++/15/bits/refwrap.h + mdp:/usr/include/c++/15/bits/requires_hosted.h + mdp:/usr/include/c++/15/bits/semaphore_base.h + mdp:/usr/include/c++/15/bits/shared_ptr.h + mdp:/usr/include/c++/15/bits/shared_ptr_atomic.h + mdp:/usr/include/c++/15/bits/shared_ptr_base.h + mdp:/usr/include/c++/15/bits/specfun.h + mdp:/usr/include/c++/15/bits/sstream.tcc + mdp:/usr/include/c++/15/bits/std_abs.h + mdp:/usr/include/c++/15/bits/std_function.h + mdp:/usr/include/c++/15/bits/std_mutex.h + mdp:/usr/include/c++/15/bits/std_thread.h + mdp:/usr/include/c++/15/bits/stl_algo.h + mdp:/usr/include/c++/15/bits/stl_algobase.h + mdp:/usr/include/c++/15/bits/stl_bvector.h + mdp:/usr/include/c++/15/bits/stl_construct.h + mdp:/usr/include/c++/15/bits/stl_function.h + mdp:/usr/include/c++/15/bits/stl_heap.h + mdp:/usr/include/c++/15/bits/stl_iterator.h + mdp:/usr/include/c++/15/bits/stl_iterator_base_funcs.h + mdp:/usr/include/c++/15/bits/stl_iterator_base_types.h + mdp:/usr/include/c++/15/bits/stl_list.h + mdp:/usr/include/c++/15/bits/stl_map.h + mdp:/usr/include/c++/15/bits/stl_multimap.h + mdp:/usr/include/c++/15/bits/stl_multiset.h + mdp:/usr/include/c++/15/bits/stl_numeric.h + mdp:/usr/include/c++/15/bits/stl_pair.h + mdp:/usr/include/c++/15/bits/stl_raw_storage_iter.h + mdp:/usr/include/c++/15/bits/stl_relops.h + mdp:/usr/include/c++/15/bits/stl_set.h + mdp:/usr/include/c++/15/bits/stl_tempbuf.h + mdp:/usr/include/c++/15/bits/stl_tree.h + mdp:/usr/include/c++/15/bits/stl_uninitialized.h + mdp:/usr/include/c++/15/bits/stl_vector.h + mdp:/usr/include/c++/15/bits/stream_iterator.h + mdp:/usr/include/c++/15/bits/streambuf.tcc + mdp:/usr/include/c++/15/bits/streambuf_iterator.h + mdp:/usr/include/c++/15/bits/string_view.tcc + mdp:/usr/include/c++/15/bits/stringfwd.h + mdp:/usr/include/c++/15/bits/this_thread_sleep.h + mdp:/usr/include/c++/15/bits/uniform_int_dist.h + mdp:/usr/include/c++/15/bits/unique_lock.h + mdp:/usr/include/c++/15/bits/unique_ptr.h + mdp:/usr/include/c++/15/bits/unordered_map.h + mdp:/usr/include/c++/15/bits/unordered_set.h + mdp:/usr/include/c++/15/bits/uses_allocator.h + mdp:/usr/include/c++/15/bits/uses_allocator_args.h + mdp:/usr/include/c++/15/bits/utility.h + mdp:/usr/include/c++/15/bits/vector.tcc + mdp:/usr/include/c++/15/bits/version.h + mdp:/usr/include/c++/15/cassert + mdp:/usr/include/c++/15/cctype + mdp:/usr/include/c++/15/cerrno + mdp:/usr/include/c++/15/charconv + mdp:/usr/include/c++/15/chrono + mdp:/usr/include/c++/15/climits + mdp:/usr/include/c++/15/clocale + mdp:/usr/include/c++/15/cmath + mdp:/usr/include/c++/15/compare + mdp:/usr/include/c++/15/concepts + mdp:/usr/include/c++/15/condition_variable + mdp:/usr/include/c++/15/cstddef + mdp:/usr/include/c++/15/cstdint + mdp:/usr/include/c++/15/cstdio + mdp:/usr/include/c++/15/cstdlib + mdp:/usr/include/c++/15/cstring + mdp:/usr/include/c++/15/ctime + mdp:/usr/include/c++/15/cwchar + mdp:/usr/include/c++/15/cwctype + mdp:/usr/include/c++/15/debug/assertions.h + mdp:/usr/include/c++/15/debug/debug.h + mdp:/usr/include/c++/15/exception + mdp:/usr/include/c++/15/experimental/source_location + mdp:/usr/include/c++/15/ext/aligned_buffer.h + mdp:/usr/include/c++/15/ext/alloc_traits.h + mdp:/usr/include/c++/15/ext/atomicity.h + mdp:/usr/include/c++/15/ext/concurrence.h + mdp:/usr/include/c++/15/ext/numeric_traits.h + mdp:/usr/include/c++/15/ext/string_conversions.h + mdp:/usr/include/c++/15/ext/type_traits.h + mdp:/usr/include/c++/15/filesystem + mdp:/usr/include/c++/15/format + mdp:/usr/include/c++/15/functional + mdp:/usr/include/c++/15/future + mdp:/usr/include/c++/15/initializer_list + mdp:/usr/include/c++/15/iomanip + mdp:/usr/include/c++/15/ios + mdp:/usr/include/c++/15/iosfwd + mdp:/usr/include/c++/15/istream + mdp:/usr/include/c++/15/iterator + mdp:/usr/include/c++/15/limits + mdp:/usr/include/c++/15/list + mdp:/usr/include/c++/15/locale + mdp:/usr/include/c++/15/map + mdp:/usr/include/c++/15/memory + mdp:/usr/include/c++/15/memory_resource + mdp:/usr/include/c++/15/mutex + mdp:/usr/include/c++/15/new + mdp:/usr/include/c++/15/numeric + mdp:/usr/include/c++/15/optional + mdp:/usr/include/c++/15/ostream + mdp:/usr/include/c++/15/pstl/execution_defs.h + mdp:/usr/include/c++/15/pstl/glue_numeric_defs.h + mdp:/usr/include/c++/15/pstl/pstl_config.h + mdp:/usr/include/c++/15/random + mdp:/usr/include/c++/15/ratio + mdp:/usr/include/c++/15/semaphore + mdp:/usr/include/c++/15/set + mdp:/usr/include/c++/15/shared_mutex + mdp:/usr/include/c++/15/source_location + mdp:/usr/include/c++/15/sstream + mdp:/usr/include/c++/15/stdexcept + mdp:/usr/include/c++/15/stop_token + mdp:/usr/include/c++/15/streambuf + mdp:/usr/include/c++/15/string + mdp:/usr/include/c++/15/string_view + mdp:/usr/include/c++/15/system_error + mdp:/usr/include/c++/15/tr1/bessel_function.tcc + mdp:/usr/include/c++/15/tr1/beta_function.tcc + mdp:/usr/include/c++/15/tr1/ell_integral.tcc + mdp:/usr/include/c++/15/tr1/exp_integral.tcc + mdp:/usr/include/c++/15/tr1/gamma.tcc + mdp:/usr/include/c++/15/tr1/hypergeometric.tcc + mdp:/usr/include/c++/15/tr1/legendre_function.tcc + mdp:/usr/include/c++/15/tr1/modified_bessel_func.tcc + mdp:/usr/include/c++/15/tr1/poly_hermite.tcc + mdp:/usr/include/c++/15/tr1/poly_laguerre.tcc + mdp:/usr/include/c++/15/tr1/riemann_zeta.tcc + mdp:/usr/include/c++/15/tr1/special_function_util.h + mdp:/usr/include/c++/15/tuple + mdp:/usr/include/c++/15/type_traits + mdp:/usr/include/c++/15/typeinfo + mdp:/usr/include/c++/15/unordered_map + mdp:/usr/include/c++/15/unordered_set + mdp:/usr/include/c++/15/utility + mdp:/usr/include/c++/15/variant + mdp:/usr/include/c++/15/vector + mdp:/usr/include/c++/15/version + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/atomic_word.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++allocator.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++config.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++locale.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/cpu_defines.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/ctype_base.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/ctype_inline.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/error_constants.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/gthr-default.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/gthr.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/messages_members.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/opt_random.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/os_defines.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/time_members.h + mdp:/usr/include/ctype.h + mdp:/usr/include/endian.h + mdp:/usr/include/errno.h + mdp:/usr/include/features-time64.h + mdp:/usr/include/features.h + mdp:/usr/include/gnu/stubs-64.h + mdp:/usr/include/gnu/stubs.h + mdp:/usr/include/libintl.h + mdp:/usr/include/limits.h + mdp:/usr/include/linux/close_range.h + mdp:/usr/include/linux/errno.h + mdp:/usr/include/linux/limits.h + mdp:/usr/include/linux/posix_types.h + mdp:/usr/include/linux/sched/types.h + mdp:/usr/include/linux/stddef.h + mdp:/usr/include/linux/types.h + mdp:/usr/include/locale.h + mdp:/usr/include/pthread.h + mdp:/usr/include/qt6/QtCore/QAbstractItemModel + mdp:/usr/include/qt6/QtCore/QDeadlineTimer + mdp:/usr/include/qt6/QtCore/QEvent + mdp:/usr/include/qt6/QtCore/QHash + mdp:/usr/include/qt6/QtCore/QList + mdp:/usr/include/qt6/QtCore/QMap + mdp:/usr/include/qt6/QtCore/QMargins + mdp:/usr/include/qt6/QtCore/QMetaEnum + mdp:/usr/include/qt6/QtCore/QMutex + mdp:/usr/include/qt6/QtCore/QObject + mdp:/usr/include/qt6/QtCore/QRect + mdp:/usr/include/qt6/QtCore/QSize + mdp:/usr/include/qt6/QtCore/QSizeF + mdp:/usr/include/qt6/QtCore/QString + mdp:/usr/include/qt6/QtCore/QStringList + mdp:/usr/include/qt6/QtCore/QVariant + mdp:/usr/include/qt6/QtCore/QtCore + mdp:/usr/include/qt6/QtCore/QtCoreDepends + mdp:/usr/include/qt6/QtCore/q17memory.h + mdp:/usr/include/qt6/QtCore/q20algorithm.h + mdp:/usr/include/qt6/QtCore/q20chrono.h + mdp:/usr/include/qt6/QtCore/q20functional.h + mdp:/usr/include/qt6/QtCore/q20iterator.h + mdp:/usr/include/qt6/QtCore/q20map.h + mdp:/usr/include/qt6/QtCore/q20memory.h + mdp:/usr/include/qt6/QtCore/q20type_traits.h + mdp:/usr/include/qt6/QtCore/q20utility.h + mdp:/usr/include/qt6/QtCore/q20vector.h + mdp:/usr/include/qt6/QtCore/q23functional.h + mdp:/usr/include/qt6/QtCore/q23type_traits.h + mdp:/usr/include/qt6/QtCore/q23utility.h + mdp:/usr/include/qt6/QtCore/q26numeric.h + mdp:/usr/include/qt6/QtCore/qabstractanimation.h + mdp:/usr/include/qt6/QtCore/qabstracteventdispatcher.h + mdp:/usr/include/qt6/QtCore/qabstractitemmodel.h + mdp:/usr/include/qt6/QtCore/qabstractnativeeventfilter.h + mdp:/usr/include/qt6/QtCore/qabstractproxymodel.h + mdp:/usr/include/qt6/QtCore/qalgorithms.h + mdp:/usr/include/qt6/QtCore/qalloc.h + mdp:/usr/include/qt6/QtCore/qanimationgroup.h + mdp:/usr/include/qt6/QtCore/qanystringview.h + mdp:/usr/include/qt6/QtCore/qapplicationstatic.h + mdp:/usr/include/qt6/QtCore/qarraydata.h + mdp:/usr/include/qt6/QtCore/qarraydataops.h + mdp:/usr/include/qt6/QtCore/qarraydatapointer.h + mdp:/usr/include/qt6/QtCore/qassert.h + mdp:/usr/include/qt6/QtCore/qassociativeiterable.h + mdp:/usr/include/qt6/QtCore/qatomic.h + mdp:/usr/include/qt6/QtCore/qatomic_cxx11.h + mdp:/usr/include/qt6/QtCore/qatomicscopedvaluerollback.h + mdp:/usr/include/qt6/QtCore/qbasicatomic.h + mdp:/usr/include/qt6/QtCore/qbasictimer.h + mdp:/usr/include/qt6/QtCore/qbindingstorage.h + mdp:/usr/include/qt6/QtCore/qbitarray.h + mdp:/usr/include/qt6/QtCore/qbuffer.h + mdp:/usr/include/qt6/QtCore/qbytearray.h + mdp:/usr/include/qt6/QtCore/qbytearrayalgorithms.h + mdp:/usr/include/qt6/QtCore/qbytearraylist.h + mdp:/usr/include/qt6/QtCore/qbytearraymatcher.h + mdp:/usr/include/qt6/QtCore/qbytearrayview.h + mdp:/usr/include/qt6/QtCore/qcache.h + mdp:/usr/include/qt6/QtCore/qcalendar.h + mdp:/usr/include/qt6/QtCore/qcborarray.h + mdp:/usr/include/qt6/QtCore/qcborcommon.h + mdp:/usr/include/qt6/QtCore/qcbormap.h + mdp:/usr/include/qt6/QtCore/qcborstream.h + mdp:/usr/include/qt6/QtCore/qcborstreamreader.h + mdp:/usr/include/qt6/QtCore/qcborstreamwriter.h + mdp:/usr/include/qt6/QtCore/qcborvalue.h + mdp:/usr/include/qt6/QtCore/qchar.h + mdp:/usr/include/qt6/QtCore/qcheckedint_impl.h + mdp:/usr/include/qt6/QtCore/qchronotimer.h + mdp:/usr/include/qt6/QtCore/qcollator.h + mdp:/usr/include/qt6/QtCore/qcommandlineoption.h + mdp:/usr/include/qt6/QtCore/qcommandlineparser.h + mdp:/usr/include/qt6/QtCore/qcompare.h + mdp:/usr/include/qt6/QtCore/qcompare_impl.h + mdp:/usr/include/qt6/QtCore/qcomparehelpers.h + mdp:/usr/include/qt6/QtCore/qcompilerdetection.h + mdp:/usr/include/qt6/QtCore/qconcatenatetablesproxymodel.h + mdp:/usr/include/qt6/QtCore/qconfig-64.h + mdp:/usr/include/qt6/QtCore/qconfig.h + mdp:/usr/include/qt6/QtCore/qconstructormacros.h + mdp:/usr/include/qt6/QtCore/qcontainerfwd.h + mdp:/usr/include/qt6/QtCore/qcontainerinfo.h + mdp:/usr/include/qt6/QtCore/qcontainertools_impl.h + mdp:/usr/include/qt6/QtCore/qcontiguouscache.h + mdp:/usr/include/qt6/QtCore/qcoreapplication.h + mdp:/usr/include/qt6/QtCore/qcoreapplication_platform.h + mdp:/usr/include/qt6/QtCore/qcoreevent.h + mdp:/usr/include/qt6/QtCore/qcryptographichash.h + mdp:/usr/include/qt6/QtCore/qdarwinhelpers.h + mdp:/usr/include/qt6/QtCore/qdatastream.h + mdp:/usr/include/qt6/QtCore/qdatetime.h + mdp:/usr/include/qt6/QtCore/qdeadlinetimer.h + mdp:/usr/include/qt6/QtCore/qdebug.h + mdp:/usr/include/qt6/QtCore/qdir.h + mdp:/usr/include/qt6/QtCore/qdiriterator.h + mdp:/usr/include/qt6/QtCore/qdirlisting.h + mdp:/usr/include/qt6/QtCore/qeasingcurve.h + mdp:/usr/include/qt6/QtCore/qelapsedtimer.h + mdp:/usr/include/qt6/QtCore/qendian.h + mdp:/usr/include/qt6/QtCore/qeventloop.h + mdp:/usr/include/qt6/QtCore/qexception.h + mdp:/usr/include/qt6/QtCore/qexceptionhandling.h + mdp:/usr/include/qt6/QtCore/qfactoryinterface.h + mdp:/usr/include/qt6/QtCore/qfile.h + mdp:/usr/include/qt6/QtCore/qfiledevice.h + mdp:/usr/include/qt6/QtCore/qfileinfo.h + mdp:/usr/include/qt6/QtCore/qfileselector.h + mdp:/usr/include/qt6/QtCore/qfilesystemwatcher.h + mdp:/usr/include/qt6/QtCore/qflags.h + mdp:/usr/include/qt6/QtCore/qfloat16.h + mdp:/usr/include/qt6/QtCore/qforeach.h + mdp:/usr/include/qt6/QtCore/qfunctionaltools_impl.h + mdp:/usr/include/qt6/QtCore/qfunctionpointer.h + mdp:/usr/include/qt6/QtCore/qfuture.h + mdp:/usr/include/qt6/QtCore/qfuture_impl.h + mdp:/usr/include/qt6/QtCore/qfutureinterface.h + mdp:/usr/include/qt6/QtCore/qfuturesynchronizer.h + mdp:/usr/include/qt6/QtCore/qfuturewatcher.h + mdp:/usr/include/qt6/QtCore/qgenericatomic.h + mdp:/usr/include/qt6/QtCore/qglobal.h + mdp:/usr/include/qt6/QtCore/qglobalstatic.h + mdp:/usr/include/qt6/QtCore/qhash.h + mdp:/usr/include/qt6/QtCore/qhashfunctions.h + mdp:/usr/include/qt6/QtCore/qidentityproxymodel.h + mdp:/usr/include/qt6/QtCore/qiodevice.h + mdp:/usr/include/qt6/QtCore/qiodevicebase.h + mdp:/usr/include/qt6/QtCore/qitemselectionmodel.h + mdp:/usr/include/qt6/QtCore/qiterable.h + mdp:/usr/include/qt6/QtCore/qiterator.h + mdp:/usr/include/qt6/QtCore/qjsonarray.h + mdp:/usr/include/qt6/QtCore/qjsondocument.h + mdp:/usr/include/qt6/QtCore/qjsonobject.h + mdp:/usr/include/qt6/QtCore/qjsonparseerror.h + mdp:/usr/include/qt6/QtCore/qjsonvalue.h + mdp:/usr/include/qt6/QtCore/qlatin1stringmatcher.h + mdp:/usr/include/qt6/QtCore/qlatin1stringview.h + mdp:/usr/include/qt6/QtCore/qlibrary.h + mdp:/usr/include/qt6/QtCore/qlibraryinfo.h + mdp:/usr/include/qt6/QtCore/qline.h + mdp:/usr/include/qt6/QtCore/qlist.h + mdp:/usr/include/qt6/QtCore/qlocale.h + mdp:/usr/include/qt6/QtCore/qlockfile.h + mdp:/usr/include/qt6/QtCore/qlogging.h + mdp:/usr/include/qt6/QtCore/qloggingcategory.h + mdp:/usr/include/qt6/QtCore/qmalloc.h + mdp:/usr/include/qt6/QtCore/qmap.h + mdp:/usr/include/qt6/QtCore/qmargins.h + mdp:/usr/include/qt6/QtCore/qmath.h + mdp:/usr/include/qt6/QtCore/qmessageauthenticationcode.h + mdp:/usr/include/qt6/QtCore/qmetacontainer.h + mdp:/usr/include/qt6/QtCore/qmetaobject.h + mdp:/usr/include/qt6/QtCore/qmetatype.h + mdp:/usr/include/qt6/QtCore/qmimedata.h + mdp:/usr/include/qt6/QtCore/qmimedatabase.h + mdp:/usr/include/qt6/QtCore/qmimetype.h + mdp:/usr/include/qt6/QtCore/qminmax.h + mdp:/usr/include/qt6/QtCore/qmutex.h + mdp:/usr/include/qt6/QtCore/qnamespace.h + mdp:/usr/include/qt6/QtCore/qnativeinterface.h + mdp:/usr/include/qt6/QtCore/qnumeric.h + mdp:/usr/include/qt6/QtCore/qobject.h + mdp:/usr/include/qt6/QtCore/qobject_impl.h + mdp:/usr/include/qt6/QtCore/qobjectcleanuphandler.h + mdp:/usr/include/qt6/QtCore/qobjectdefs.h + mdp:/usr/include/qt6/QtCore/qobjectdefs_impl.h + mdp:/usr/include/qt6/QtCore/qoperatingsystemversion.h + mdp:/usr/include/qt6/QtCore/qoverload.h + mdp:/usr/include/qt6/QtCore/qpair.h + mdp:/usr/include/qt6/QtCore/qparallelanimationgroup.h + mdp:/usr/include/qt6/QtCore/qpauseanimation.h + mdp:/usr/include/qt6/QtCore/qpermissions.h + mdp:/usr/include/qt6/QtCore/qplugin.h + mdp:/usr/include/qt6/QtCore/qpluginloader.h + mdp:/usr/include/qt6/QtCore/qpoint.h + mdp:/usr/include/qt6/QtCore/qpointer.h + mdp:/usr/include/qt6/QtCore/qprocess.h + mdp:/usr/include/qt6/QtCore/qprocessordetection.h + mdp:/usr/include/qt6/QtCore/qpromise.h + mdp:/usr/include/qt6/QtCore/qproperty.h + mdp:/usr/include/qt6/QtCore/qpropertyanimation.h + mdp:/usr/include/qt6/QtCore/qpropertyprivate.h + mdp:/usr/include/qt6/QtCore/qqueue.h + mdp:/usr/include/qt6/QtCore/qrandom.h + mdp:/usr/include/qt6/QtCore/qrangemodel.h + mdp:/usr/include/qt6/QtCore/qrangemodel_impl.h + mdp:/usr/include/qt6/QtCore/qreadwritelock.h + mdp:/usr/include/qt6/QtCore/qrect.h + mdp:/usr/include/qt6/QtCore/qrefcount.h + mdp:/usr/include/qt6/QtCore/qregularexpression.h + mdp:/usr/include/qt6/QtCore/qresource.h + mdp:/usr/include/qt6/QtCore/qresultstore.h + mdp:/usr/include/qt6/QtCore/qrunnable.h + mdp:/usr/include/qt6/QtCore/qsavefile.h + mdp:/usr/include/qt6/QtCore/qscopedpointer.h + mdp:/usr/include/qt6/QtCore/qscopedvaluerollback.h + mdp:/usr/include/qt6/QtCore/qscopeguard.h + mdp:/usr/include/qt6/QtCore/qsemaphore.h + mdp:/usr/include/qt6/QtCore/qsequentialanimationgroup.h + mdp:/usr/include/qt6/QtCore/qsequentialiterable.h + mdp:/usr/include/qt6/QtCore/qset.h + mdp:/usr/include/qt6/QtCore/qsettings.h + mdp:/usr/include/qt6/QtCore/qshareddata.h + mdp:/usr/include/qt6/QtCore/qshareddata_impl.h + mdp:/usr/include/qt6/QtCore/qsharedmemory.h + mdp:/usr/include/qt6/QtCore/qsharedpointer.h + mdp:/usr/include/qt6/QtCore/qsharedpointer_impl.h + mdp:/usr/include/qt6/QtCore/qsignalmapper.h + mdp:/usr/include/qt6/QtCore/qsimd.h + mdp:/usr/include/qt6/QtCore/qsize.h + mdp:/usr/include/qt6/QtCore/qsocketnotifier.h + mdp:/usr/include/qt6/QtCore/qsortfilterproxymodel.h + mdp:/usr/include/qt6/QtCore/qspan.h + mdp:/usr/include/qt6/QtCore/qstack.h + mdp:/usr/include/qt6/QtCore/qstandardpaths.h + mdp:/usr/include/qt6/QtCore/qstaticlatin1stringmatcher.h + mdp:/usr/include/qt6/QtCore/qstdlibdetection.h + mdp:/usr/include/qt6/QtCore/qstorageinfo.h + mdp:/usr/include/qt6/QtCore/qstring.h + mdp:/usr/include/qt6/QtCore/qstringalgorithms.h + mdp:/usr/include/qt6/QtCore/qstringbuilder.h + mdp:/usr/include/qt6/QtCore/qstringconverter.h + mdp:/usr/include/qt6/QtCore/qstringconverter_base.h + mdp:/usr/include/qt6/QtCore/qstringfwd.h + mdp:/usr/include/qt6/QtCore/qstringlist.h + mdp:/usr/include/qt6/QtCore/qstringlistmodel.h + mdp:/usr/include/qt6/QtCore/qstringliteral.h + mdp:/usr/include/qt6/QtCore/qstringmatcher.h + mdp:/usr/include/qt6/QtCore/qstringtokenizer.h + mdp:/usr/include/qt6/QtCore/qstringview.h + mdp:/usr/include/qt6/QtCore/qswap.h + mdp:/usr/include/qt6/QtCore/qsysinfo.h + mdp:/usr/include/qt6/QtCore/qsystemdetection.h + mdp:/usr/include/qt6/QtCore/qsystemsemaphore.h + mdp:/usr/include/qt6/QtCore/qtaggedpointer.h + mdp:/usr/include/qt6/QtCore/qtclasshelpermacros.h + mdp:/usr/include/qt6/QtCore/qtconfiginclude.h + mdp:/usr/include/qt6/QtCore/qtconfigmacros.h + mdp:/usr/include/qt6/QtCore/qtcore-config.h + mdp:/usr/include/qt6/QtCore/qtcoreexports.h + mdp:/usr/include/qt6/QtCore/qtcoreglobal.h + mdp:/usr/include/qt6/QtCore/qtcoreversion.h + mdp:/usr/include/qt6/QtCore/qtdeprecationdefinitions.h + mdp:/usr/include/qt6/QtCore/qtdeprecationmarkers.h + mdp:/usr/include/qt6/QtCore/qtemporarydir.h + mdp:/usr/include/qt6/QtCore/qtemporaryfile.h + mdp:/usr/include/qt6/QtCore/qtenvironmentvariables.h + mdp:/usr/include/qt6/QtCore/qtestsupport_core.h + mdp:/usr/include/qt6/QtCore/qtextboundaryfinder.h + mdp:/usr/include/qt6/QtCore/qtextstream.h + mdp:/usr/include/qt6/QtCore/qtformat_impl.h + mdp:/usr/include/qt6/QtCore/qthread.h + mdp:/usr/include/qt6/QtCore/qthreadpool.h + mdp:/usr/include/qt6/QtCore/qthreadstorage.h + mdp:/usr/include/qt6/QtCore/qtimeline.h + mdp:/usr/include/qt6/QtCore/qtimer.h + mdp:/usr/include/qt6/QtCore/qtimezone.h + mdp:/usr/include/qt6/QtCore/qtipccommon.h + mdp:/usr/include/qt6/QtCore/qtmetamacros.h + mdp:/usr/include/qt6/QtCore/qtmocconstants.h + mdp:/usr/include/qt6/QtCore/qtnoop.h + mdp:/usr/include/qt6/QtCore/qtpreprocessorsupport.h + mdp:/usr/include/qt6/QtCore/qtranslator.h + mdp:/usr/include/qt6/QtCore/qtransposeproxymodel.h + mdp:/usr/include/qt6/QtCore/qtresource.h + mdp:/usr/include/qt6/QtCore/qtsan_impl.h + mdp:/usr/include/qt6/QtCore/qtsymbolmacros.h + mdp:/usr/include/qt6/QtCore/qttranslation.h + mdp:/usr/include/qt6/QtCore/qttypetraits.h + mdp:/usr/include/qt6/QtCore/qtversion.h + mdp:/usr/include/qt6/QtCore/qtversionchecks.h + mdp:/usr/include/qt6/QtCore/qtypeinfo.h + mdp:/usr/include/qt6/QtCore/qtyperevision.h + mdp:/usr/include/qt6/QtCore/qtypes.h + mdp:/usr/include/qt6/QtCore/qurl.h + mdp:/usr/include/qt6/QtCore/qurlquery.h + mdp:/usr/include/qt6/QtCore/qutf8stringview.h + mdp:/usr/include/qt6/QtCore/quuid.h + mdp:/usr/include/qt6/QtCore/qvariant.h + mdp:/usr/include/qt6/QtCore/qvariantanimation.h + mdp:/usr/include/qt6/QtCore/qvarianthash.h + mdp:/usr/include/qt6/QtCore/qvariantlist.h + mdp:/usr/include/qt6/QtCore/qvariantmap.h + mdp:/usr/include/qt6/QtCore/qvarlengtharray.h + mdp:/usr/include/qt6/QtCore/qvector.h + mdp:/usr/include/qt6/QtCore/qversionnumber.h + mdp:/usr/include/qt6/QtCore/qversiontagging.h + mdp:/usr/include/qt6/QtCore/qwaitcondition.h + mdp:/usr/include/qt6/QtCore/qwineventnotifier.h + mdp:/usr/include/qt6/QtCore/qxmlstream.h + mdp:/usr/include/qt6/QtCore/qxpfunctional.h + mdp:/usr/include/qt6/QtCore/qxptype_traits.h + mdp:/usr/include/qt6/QtCore/qyieldcpu.h + mdp:/usr/include/qt6/QtGui/QBrush + mdp:/usr/include/qt6/QtGui/QColor + mdp:/usr/include/qt6/QtGui/QFont + mdp:/usr/include/qt6/QtGui/QIcon + mdp:/usr/include/qt6/QtGui/QImage + mdp:/usr/include/qt6/QtGui/QPixmap + mdp:/usr/include/qt6/QtGui/QTransform + mdp:/usr/include/qt6/QtGui/qaction.h + mdp:/usr/include/qt6/QtGui/qbitmap.h + mdp:/usr/include/qt6/QtGui/qbrush.h + mdp:/usr/include/qt6/QtGui/qcolor.h + mdp:/usr/include/qt6/QtGui/qcursor.h + mdp:/usr/include/qt6/QtGui/qevent.h + mdp:/usr/include/qt6/QtGui/qeventpoint.h + mdp:/usr/include/qt6/QtGui/qfont.h + mdp:/usr/include/qt6/QtGui/qfontinfo.h + mdp:/usr/include/qt6/QtGui/qfontmetrics.h + mdp:/usr/include/qt6/QtGui/qfontvariableaxis.h + mdp:/usr/include/qt6/QtGui/qguiapplication.h + mdp:/usr/include/qt6/QtGui/qguiapplication_platform.h + mdp:/usr/include/qt6/QtGui/qicon.h + mdp:/usr/include/qt6/QtGui/qimage.h + mdp:/usr/include/qt6/QtGui/qinputdevice.h + mdp:/usr/include/qt6/QtGui/qinputmethod.h + mdp:/usr/include/qt6/QtGui/qkeysequence.h + mdp:/usr/include/qt6/QtGui/qpaintdevice.h + mdp:/usr/include/qt6/QtGui/qpalette.h + mdp:/usr/include/qt6/QtGui/qpixelformat.h + mdp:/usr/include/qt6/QtGui/qpixmap.h + mdp:/usr/include/qt6/QtGui/qpointingdevice.h + mdp:/usr/include/qt6/QtGui/qpolygon.h + mdp:/usr/include/qt6/QtGui/qregion.h + mdp:/usr/include/qt6/QtGui/qrgb.h + mdp:/usr/include/qt6/QtGui/qrgba64.h + mdp:/usr/include/qt6/QtGui/qscreen.h + mdp:/usr/include/qt6/QtGui/qscreen_platform.h + mdp:/usr/include/qt6/QtGui/qsurface.h + mdp:/usr/include/qt6/QtGui/qsurfaceformat.h + mdp:/usr/include/qt6/QtGui/qtestsupport_gui.h + mdp:/usr/include/qt6/QtGui/qtgui-config.h + mdp:/usr/include/qt6/QtGui/qtguiexports.h + mdp:/usr/include/qt6/QtGui/qtguiglobal.h + mdp:/usr/include/qt6/QtGui/qtransform.h + mdp:/usr/include/qt6/QtGui/qvector2d.h + mdp:/usr/include/qt6/QtGui/qvector3d.h + mdp:/usr/include/qt6/QtGui/qvector4d.h + mdp:/usr/include/qt6/QtGui/qvectornd.h + mdp:/usr/include/qt6/QtGui/qwindow.h + mdp:/usr/include/qt6/QtGui/qwindowdefs.h + mdp:/usr/include/qt6/QtTest/QtTest + mdp:/usr/include/qt6/QtTest/QtTestDepends + mdp:/usr/include/qt6/QtTest/qabstractitemmodeltester.h + mdp:/usr/include/qt6/QtTest/qbenchmark.h + mdp:/usr/include/qt6/QtTest/qbenchmarkmetric.h + mdp:/usr/include/qt6/QtTest/qsignalspy.h + mdp:/usr/include/qt6/QtTest/qtest.h + mdp:/usr/include/qt6/QtTest/qtest_gui.h + mdp:/usr/include/qt6/QtTest/qtest_widgets.h + mdp:/usr/include/qt6/QtTest/qtestassert.h + mdp:/usr/include/qt6/QtTest/qtestcase.h + mdp:/usr/include/qt6/QtTest/qtestdata.h + mdp:/usr/include/qt6/QtTest/qtestevent.h + mdp:/usr/include/qt6/QtTest/qtesteventloop.h + mdp:/usr/include/qt6/QtTest/qtestkeyboard.h + mdp:/usr/include/qt6/QtTest/qtestmouse.h + mdp:/usr/include/qt6/QtTest/qtestspontaneevent.h + mdp:/usr/include/qt6/QtTest/qtestsystem.h + mdp:/usr/include/qt6/QtTest/qtesttostring.h + mdp:/usr/include/qt6/QtTest/qtesttouch.h + mdp:/usr/include/qt6/QtTest/qtestwheel.h + mdp:/usr/include/qt6/QtTest/qttestexports.h + mdp:/usr/include/qt6/QtTest/qttestglobal.h + mdp:/usr/include/qt6/QtTest/qttestlib-config.h + mdp:/usr/include/qt6/QtTest/qttestversion.h + mdp:/usr/include/qt6/QtWidgets/QSizePolicy + mdp:/usr/include/qt6/QtWidgets/qapplication.h + mdp:/usr/include/qt6/QtWidgets/qsizepolicy.h + mdp:/usr/include/qt6/QtWidgets/qtestsupport_widgets.h + mdp:/usr/include/qt6/QtWidgets/qtwidgets-config.h + mdp:/usr/include/qt6/QtWidgets/qtwidgetsexports.h + mdp:/usr/include/qt6/QtWidgets/qtwidgetsglobal.h + mdp:/usr/include/qt6/QtWidgets/qwidget.h + mdp:/usr/include/sched.h + mdp:/usr/include/semaphore.h + mdp:/usr/include/stdc-predef.h + mdp:/usr/include/stdint.h + mdp:/usr/include/stdio.h + mdp:/usr/include/stdlib.h + mdp:/usr/include/string.h + mdp:/usr/include/strings.h + mdp:/usr/include/sys/cdefs.h + mdp:/usr/include/sys/select.h + mdp:/usr/include/sys/single_threaded.h + mdp:/usr/include/sys/syscall.h + mdp:/usr/include/sys/time.h + mdp:/usr/include/sys/types.h + mdp:/usr/include/syscall.h + mdp:/usr/include/time.h + mdp:/usr/include/unistd.h + mdp:/usr/include/wchar.h + mdp:/usr/include/wctype.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/adxintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxavx512intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxbf16intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxcomplexintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxfp16intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxfp8intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxint8intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxmovrsintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxtf32intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxtileintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxtransposeintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2-512bf16intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2-512convertintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2-512mediaintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2-512minmaxintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2-512satcvtintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2bf16intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2convertintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2copyintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2mediaintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2minmaxintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2satcvtintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx2intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512bf16intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512bf16vlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512bitalgintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512bitalgvlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512bwintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512cdintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512dqintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512fintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512fp16intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512fp16vlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512ifmaintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512ifmavlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vbmi2intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vbmi2vlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vbmiintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vbmivlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vlbwintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vldqintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vnniintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vnnivlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vp2intersectintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vp2intersectvlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vpopcntdqintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vpopcntdqvlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avxifmaintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avxintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avxneconvertintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avxvnniint16intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avxvnniint8intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avxvnniintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/bmi2intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/bmiintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/cetintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/cldemoteintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/clflushoptintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/clwbintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/clzerointrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/cmpccxaddintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/emmintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/enqcmdintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/f16cintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/fmaintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/fxsrintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/gfniintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/hresetintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/ia32intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/immintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/keylockerintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/lwpintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/lzcntintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/mm_malloc.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/mmintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/movdirintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/movrsintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/mwaitintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/mwaitxintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/pconfigintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/pkuintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/pmmintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/popcntintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/prfchiintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/prfchwintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/raointintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/rdseedintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/rtmintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/serializeintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/sgxintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/sha512intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/shaintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/sm3intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/sm4intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/smmintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stdarg.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stdbool.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stddef.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/tbmintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/tmmintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/tsxldtrkintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/uintrintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/usermsrintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/vaesintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/vpclmulqdqintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/waitpkgintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/wbnoinvdintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/wmmintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/x86gprintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/xmmintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/xsavecintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/xsaveintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/xsaveoptintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/xsavesintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/xtestintrin.h +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/drag_utils.cpp +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/drag_utils.h + mmc:Q_OBJECT + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_drag_utils_autogen/moc_predefs.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/drag_utils.h + mdp:/usr/include/alloca.h + mdp:/usr/include/asm-generic/bitsperlong.h + mdp:/usr/include/asm-generic/errno-base.h + mdp:/usr/include/asm-generic/errno.h + mdp:/usr/include/asm-generic/int-ll64.h + mdp:/usr/include/asm-generic/posix_types.h + mdp:/usr/include/asm-generic/types.h + mdp:/usr/include/asm/bitsperlong.h + mdp:/usr/include/asm/errno.h + mdp:/usr/include/asm/posix_types.h + mdp:/usr/include/asm/posix_types_64.h + mdp:/usr/include/asm/types.h + mdp:/usr/include/asm/unistd.h + mdp:/usr/include/asm/unistd_64.h + mdp:/usr/include/assert.h + mdp:/usr/include/bits/atomic_wide_counter.h + mdp:/usr/include/bits/byteswap.h + mdp:/usr/include/bits/confname.h + mdp:/usr/include/bits/cpu-set.h + mdp:/usr/include/bits/endian.h + mdp:/usr/include/bits/endianness.h + mdp:/usr/include/bits/environments.h + mdp:/usr/include/bits/errno.h + mdp:/usr/include/bits/floatn-common.h + mdp:/usr/include/bits/floatn.h + mdp:/usr/include/bits/getopt_core.h + mdp:/usr/include/bits/getopt_posix.h + mdp:/usr/include/bits/libc-header-start.h + mdp:/usr/include/bits/local_lim.h + mdp:/usr/include/bits/locale.h + mdp:/usr/include/bits/long-double.h + mdp:/usr/include/bits/posix1_lim.h + mdp:/usr/include/bits/posix2_lim.h + mdp:/usr/include/bits/posix_opt.h + mdp:/usr/include/bits/pthread_stack_min-dynamic.h + mdp:/usr/include/bits/pthreadtypes-arch.h + mdp:/usr/include/bits/pthreadtypes.h + mdp:/usr/include/bits/sched.h + mdp:/usr/include/bits/select.h + mdp:/usr/include/bits/setjmp.h + mdp:/usr/include/bits/stdint-intn.h + mdp:/usr/include/bits/stdint-least.h + mdp:/usr/include/bits/stdint-uintn.h + mdp:/usr/include/bits/stdio_lim.h + mdp:/usr/include/bits/stdlib-float.h + mdp:/usr/include/bits/struct_mutex.h + mdp:/usr/include/bits/struct_rwlock.h + mdp:/usr/include/bits/syscall.h + mdp:/usr/include/bits/thread-shared-types.h + mdp:/usr/include/bits/time.h + mdp:/usr/include/bits/time64.h + mdp:/usr/include/bits/timesize.h + mdp:/usr/include/bits/timex.h + mdp:/usr/include/bits/types.h + mdp:/usr/include/bits/types/FILE.h + mdp:/usr/include/bits/types/__FILE.h + mdp:/usr/include/bits/types/__fpos64_t.h + mdp:/usr/include/bits/types/__fpos_t.h + mdp:/usr/include/bits/types/__locale_t.h + mdp:/usr/include/bits/types/__mbstate_t.h + mdp:/usr/include/bits/types/__sigset_t.h + mdp:/usr/include/bits/types/clock_t.h + mdp:/usr/include/bits/types/clockid_t.h + mdp:/usr/include/bits/types/cookie_io_functions_t.h + mdp:/usr/include/bits/types/error_t.h + mdp:/usr/include/bits/types/locale_t.h + mdp:/usr/include/bits/types/mbstate_t.h + mdp:/usr/include/bits/types/sigset_t.h + mdp:/usr/include/bits/types/struct_FILE.h + mdp:/usr/include/bits/types/struct___jmp_buf_tag.h + mdp:/usr/include/bits/types/struct_itimerspec.h + mdp:/usr/include/bits/types/struct_sched_param.h + mdp:/usr/include/bits/types/struct_timespec.h + mdp:/usr/include/bits/types/struct_timeval.h + mdp:/usr/include/bits/types/struct_tm.h + mdp:/usr/include/bits/types/time_t.h + mdp:/usr/include/bits/types/timer_t.h + mdp:/usr/include/bits/types/wint_t.h + mdp:/usr/include/bits/typesizes.h + mdp:/usr/include/bits/uintn-identity.h + mdp:/usr/include/bits/uio_lim.h + mdp:/usr/include/bits/unistd_ext.h + mdp:/usr/include/bits/waitflags.h + mdp:/usr/include/bits/waitstatus.h + mdp:/usr/include/bits/wchar.h + mdp:/usr/include/bits/wctype-wchar.h + mdp:/usr/include/bits/wordsize.h + mdp:/usr/include/bits/xopen_lim.h + mdp:/usr/include/c++/15/algorithm + mdp:/usr/include/c++/15/array + mdp:/usr/include/c++/15/atomic + mdp:/usr/include/c++/15/backward/auto_ptr.h + mdp:/usr/include/c++/15/backward/binders.h + mdp:/usr/include/c++/15/bit + mdp:/usr/include/c++/15/bits/algorithmfwd.h + mdp:/usr/include/c++/15/bits/align.h + mdp:/usr/include/c++/15/bits/alloc_traits.h + mdp:/usr/include/c++/15/bits/allocated_ptr.h + mdp:/usr/include/c++/15/bits/allocator.h + mdp:/usr/include/c++/15/bits/atomic_base.h + mdp:/usr/include/c++/15/bits/atomic_lockfree_defines.h + mdp:/usr/include/c++/15/bits/atomic_wait.h + mdp:/usr/include/c++/15/bits/basic_ios.h + mdp:/usr/include/c++/15/bits/basic_ios.tcc + mdp:/usr/include/c++/15/bits/basic_string.h + mdp:/usr/include/c++/15/bits/basic_string.tcc + mdp:/usr/include/c++/15/bits/char_traits.h + mdp:/usr/include/c++/15/bits/charconv.h + mdp:/usr/include/c++/15/bits/chrono.h + mdp:/usr/include/c++/15/bits/chrono_io.h + mdp:/usr/include/c++/15/bits/codecvt.h + mdp:/usr/include/c++/15/bits/concept_check.h + mdp:/usr/include/c++/15/bits/cpp_type_traits.h + mdp:/usr/include/c++/15/bits/cxxabi_forced.h + mdp:/usr/include/c++/15/bits/cxxabi_init_exception.h + mdp:/usr/include/c++/15/bits/enable_special_members.h + mdp:/usr/include/c++/15/bits/erase_if.h + mdp:/usr/include/c++/15/bits/exception.h + mdp:/usr/include/c++/15/bits/exception_defines.h + mdp:/usr/include/c++/15/bits/exception_ptr.h + mdp:/usr/include/c++/15/bits/functexcept.h + mdp:/usr/include/c++/15/bits/functional_hash.h + mdp:/usr/include/c++/15/bits/hash_bytes.h + mdp:/usr/include/c++/15/bits/hashtable.h + mdp:/usr/include/c++/15/bits/hashtable_policy.h + mdp:/usr/include/c++/15/bits/invoke.h + mdp:/usr/include/c++/15/bits/ios_base.h + mdp:/usr/include/c++/15/bits/istream.tcc + mdp:/usr/include/c++/15/bits/iterator_concepts.h + mdp:/usr/include/c++/15/bits/list.tcc + mdp:/usr/include/c++/15/bits/locale_classes.h + mdp:/usr/include/c++/15/bits/locale_classes.tcc + mdp:/usr/include/c++/15/bits/locale_conv.h + mdp:/usr/include/c++/15/bits/locale_facets.h + mdp:/usr/include/c++/15/bits/locale_facets.tcc + mdp:/usr/include/c++/15/bits/locale_facets_nonio.h + mdp:/usr/include/c++/15/bits/locale_facets_nonio.tcc + mdp:/usr/include/c++/15/bits/localefwd.h + mdp:/usr/include/c++/15/bits/max_size_type.h + mdp:/usr/include/c++/15/bits/memory_resource.h + mdp:/usr/include/c++/15/bits/memoryfwd.h + mdp:/usr/include/c++/15/bits/move.h + mdp:/usr/include/c++/15/bits/nested_exception.h + mdp:/usr/include/c++/15/bits/new_allocator.h + mdp:/usr/include/c++/15/bits/node_handle.h + mdp:/usr/include/c++/15/bits/ostream.h + mdp:/usr/include/c++/15/bits/ostream.tcc + mdp:/usr/include/c++/15/bits/ostream_insert.h + mdp:/usr/include/c++/15/bits/parse_numbers.h + mdp:/usr/include/c++/15/bits/postypes.h + mdp:/usr/include/c++/15/bits/predefined_ops.h + mdp:/usr/include/c++/15/bits/ptr_traits.h + mdp:/usr/include/c++/15/bits/quoted_string.h + mdp:/usr/include/c++/15/bits/range_access.h + mdp:/usr/include/c++/15/bits/ranges_algo.h + mdp:/usr/include/c++/15/bits/ranges_algobase.h + mdp:/usr/include/c++/15/bits/ranges_base.h + mdp:/usr/include/c++/15/bits/ranges_cmp.h + mdp:/usr/include/c++/15/bits/ranges_uninitialized.h + mdp:/usr/include/c++/15/bits/ranges_util.h + mdp:/usr/include/c++/15/bits/refwrap.h + mdp:/usr/include/c++/15/bits/requires_hosted.h + mdp:/usr/include/c++/15/bits/shared_ptr.h + mdp:/usr/include/c++/15/bits/shared_ptr_atomic.h + mdp:/usr/include/c++/15/bits/shared_ptr_base.h + mdp:/usr/include/c++/15/bits/specfun.h + mdp:/usr/include/c++/15/bits/sstream.tcc + mdp:/usr/include/c++/15/bits/std_abs.h + mdp:/usr/include/c++/15/bits/std_function.h + mdp:/usr/include/c++/15/bits/std_mutex.h + mdp:/usr/include/c++/15/bits/stl_algo.h + mdp:/usr/include/c++/15/bits/stl_algobase.h + mdp:/usr/include/c++/15/bits/stl_bvector.h + mdp:/usr/include/c++/15/bits/stl_construct.h + mdp:/usr/include/c++/15/bits/stl_function.h + mdp:/usr/include/c++/15/bits/stl_heap.h + mdp:/usr/include/c++/15/bits/stl_iterator.h + mdp:/usr/include/c++/15/bits/stl_iterator_base_funcs.h + mdp:/usr/include/c++/15/bits/stl_iterator_base_types.h + mdp:/usr/include/c++/15/bits/stl_list.h + mdp:/usr/include/c++/15/bits/stl_map.h + mdp:/usr/include/c++/15/bits/stl_multimap.h + mdp:/usr/include/c++/15/bits/stl_numeric.h + mdp:/usr/include/c++/15/bits/stl_pair.h + mdp:/usr/include/c++/15/bits/stl_raw_storage_iter.h + mdp:/usr/include/c++/15/bits/stl_relops.h + mdp:/usr/include/c++/15/bits/stl_tempbuf.h + mdp:/usr/include/c++/15/bits/stl_tree.h + mdp:/usr/include/c++/15/bits/stl_uninitialized.h + mdp:/usr/include/c++/15/bits/stl_vector.h + mdp:/usr/include/c++/15/bits/stream_iterator.h + mdp:/usr/include/c++/15/bits/streambuf.tcc + mdp:/usr/include/c++/15/bits/streambuf_iterator.h + mdp:/usr/include/c++/15/bits/string_view.tcc + mdp:/usr/include/c++/15/bits/stringfwd.h + mdp:/usr/include/c++/15/bits/uniform_int_dist.h + mdp:/usr/include/c++/15/bits/unique_ptr.h + mdp:/usr/include/c++/15/bits/unordered_map.h + mdp:/usr/include/c++/15/bits/uses_allocator.h + mdp:/usr/include/c++/15/bits/uses_allocator_args.h + mdp:/usr/include/c++/15/bits/utility.h + mdp:/usr/include/c++/15/bits/vector.tcc + mdp:/usr/include/c++/15/bits/version.h + mdp:/usr/include/c++/15/cctype + mdp:/usr/include/c++/15/cerrno + mdp:/usr/include/c++/15/charconv + mdp:/usr/include/c++/15/chrono + mdp:/usr/include/c++/15/climits + mdp:/usr/include/c++/15/clocale + mdp:/usr/include/c++/15/cmath + mdp:/usr/include/c++/15/compare + mdp:/usr/include/c++/15/concepts + mdp:/usr/include/c++/15/cstddef + mdp:/usr/include/c++/15/cstdint + mdp:/usr/include/c++/15/cstdio + mdp:/usr/include/c++/15/cstdlib + mdp:/usr/include/c++/15/cstring + mdp:/usr/include/c++/15/ctime + mdp:/usr/include/c++/15/cwchar + mdp:/usr/include/c++/15/cwctype + mdp:/usr/include/c++/15/debug/assertions.h + mdp:/usr/include/c++/15/debug/debug.h + mdp:/usr/include/c++/15/exception + mdp:/usr/include/c++/15/ext/aligned_buffer.h + mdp:/usr/include/c++/15/ext/alloc_traits.h + mdp:/usr/include/c++/15/ext/atomicity.h + mdp:/usr/include/c++/15/ext/concurrence.h + mdp:/usr/include/c++/15/ext/numeric_traits.h + mdp:/usr/include/c++/15/ext/string_conversions.h + mdp:/usr/include/c++/15/ext/type_traits.h + mdp:/usr/include/c++/15/format + mdp:/usr/include/c++/15/functional + mdp:/usr/include/c++/15/initializer_list + mdp:/usr/include/c++/15/iomanip + mdp:/usr/include/c++/15/ios + mdp:/usr/include/c++/15/iosfwd + mdp:/usr/include/c++/15/istream + mdp:/usr/include/c++/15/iterator + mdp:/usr/include/c++/15/limits + mdp:/usr/include/c++/15/list + mdp:/usr/include/c++/15/locale + mdp:/usr/include/c++/15/map + mdp:/usr/include/c++/15/memory + mdp:/usr/include/c++/15/new + mdp:/usr/include/c++/15/numeric + mdp:/usr/include/c++/15/optional + mdp:/usr/include/c++/15/ostream + mdp:/usr/include/c++/15/pstl/execution_defs.h + mdp:/usr/include/c++/15/pstl/glue_numeric_defs.h + mdp:/usr/include/c++/15/pstl/pstl_config.h + mdp:/usr/include/c++/15/ratio + mdp:/usr/include/c++/15/sstream + mdp:/usr/include/c++/15/stdexcept + mdp:/usr/include/c++/15/streambuf + mdp:/usr/include/c++/15/string + mdp:/usr/include/c++/15/string_view + mdp:/usr/include/c++/15/system_error + mdp:/usr/include/c++/15/tr1/bessel_function.tcc + mdp:/usr/include/c++/15/tr1/beta_function.tcc + mdp:/usr/include/c++/15/tr1/ell_integral.tcc + mdp:/usr/include/c++/15/tr1/exp_integral.tcc + mdp:/usr/include/c++/15/tr1/gamma.tcc + mdp:/usr/include/c++/15/tr1/hypergeometric.tcc + mdp:/usr/include/c++/15/tr1/legendre_function.tcc + mdp:/usr/include/c++/15/tr1/modified_bessel_func.tcc + mdp:/usr/include/c++/15/tr1/poly_hermite.tcc + mdp:/usr/include/c++/15/tr1/poly_laguerre.tcc + mdp:/usr/include/c++/15/tr1/riemann_zeta.tcc + mdp:/usr/include/c++/15/tr1/special_function_util.h + mdp:/usr/include/c++/15/tuple + mdp:/usr/include/c++/15/type_traits + mdp:/usr/include/c++/15/typeinfo + mdp:/usr/include/c++/15/unordered_map + mdp:/usr/include/c++/15/utility + mdp:/usr/include/c++/15/variant + mdp:/usr/include/c++/15/vector + mdp:/usr/include/c++/15/version + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/atomic_word.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++allocator.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++config.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++locale.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/cpu_defines.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/ctype_base.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/ctype_inline.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/error_constants.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/gthr-default.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/gthr.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/messages_members.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/os_defines.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/time_members.h + mdp:/usr/include/ctype.h + mdp:/usr/include/endian.h + mdp:/usr/include/errno.h + mdp:/usr/include/features-time64.h + mdp:/usr/include/features.h + mdp:/usr/include/gnu/stubs-64.h + mdp:/usr/include/gnu/stubs.h + mdp:/usr/include/libintl.h + mdp:/usr/include/limits.h + mdp:/usr/include/linux/close_range.h + mdp:/usr/include/linux/errno.h + mdp:/usr/include/linux/limits.h + mdp:/usr/include/linux/posix_types.h + mdp:/usr/include/linux/sched/types.h + mdp:/usr/include/linux/stddef.h + mdp:/usr/include/linux/types.h + mdp:/usr/include/locale.h + mdp:/usr/include/pthread.h + mdp:/usr/include/qt6/QtCore/QObject + mdp:/usr/include/qt6/QtCore/QStringList + mdp:/usr/include/qt6/QtCore/q17memory.h + mdp:/usr/include/qt6/QtCore/q20functional.h + mdp:/usr/include/qt6/QtCore/q20memory.h + mdp:/usr/include/qt6/QtCore/q20type_traits.h + mdp:/usr/include/qt6/QtCore/q23type_traits.h + mdp:/usr/include/qt6/QtCore/qalgorithms.h + mdp:/usr/include/qt6/QtCore/qanystringview.h + mdp:/usr/include/qt6/QtCore/qarraydata.h + mdp:/usr/include/qt6/QtCore/qarraydataops.h + mdp:/usr/include/qt6/QtCore/qarraydatapointer.h + mdp:/usr/include/qt6/QtCore/qassert.h + mdp:/usr/include/qt6/QtCore/qatomic.h + mdp:/usr/include/qt6/QtCore/qatomic_cxx11.h + mdp:/usr/include/qt6/QtCore/qbasicatomic.h + mdp:/usr/include/qt6/QtCore/qbindingstorage.h + mdp:/usr/include/qt6/QtCore/qbytearray.h + mdp:/usr/include/qt6/QtCore/qbytearrayalgorithms.h + mdp:/usr/include/qt6/QtCore/qbytearraylist.h + mdp:/usr/include/qt6/QtCore/qbytearrayview.h + mdp:/usr/include/qt6/QtCore/qchar.h + mdp:/usr/include/qt6/QtCore/qcompare.h + mdp:/usr/include/qt6/QtCore/qcompare_impl.h + mdp:/usr/include/qt6/QtCore/qcomparehelpers.h + mdp:/usr/include/qt6/QtCore/qcompilerdetection.h + mdp:/usr/include/qt6/QtCore/qconfig-64.h + mdp:/usr/include/qt6/QtCore/qconfig.h + mdp:/usr/include/qt6/QtCore/qconstructormacros.h + mdp:/usr/include/qt6/QtCore/qcontainerfwd.h + mdp:/usr/include/qt6/QtCore/qcontainerinfo.h + mdp:/usr/include/qt6/QtCore/qcontainertools_impl.h + mdp:/usr/include/qt6/QtCore/qdarwinhelpers.h + mdp:/usr/include/qt6/QtCore/qdatastream.h + mdp:/usr/include/qt6/QtCore/qexceptionhandling.h + mdp:/usr/include/qt6/QtCore/qflags.h + mdp:/usr/include/qt6/QtCore/qfloat16.h + mdp:/usr/include/qt6/QtCore/qforeach.h + mdp:/usr/include/qt6/QtCore/qfunctionaltools_impl.h + mdp:/usr/include/qt6/QtCore/qfunctionpointer.h + mdp:/usr/include/qt6/QtCore/qgenericatomic.h + mdp:/usr/include/qt6/QtCore/qglobal.h + mdp:/usr/include/qt6/QtCore/qglobalstatic.h + mdp:/usr/include/qt6/QtCore/qhashfunctions.h + mdp:/usr/include/qt6/QtCore/qiodevicebase.h + mdp:/usr/include/qt6/QtCore/qiterable.h + mdp:/usr/include/qt6/QtCore/qiterator.h + mdp:/usr/include/qt6/QtCore/qlatin1stringview.h + mdp:/usr/include/qt6/QtCore/qlist.h + mdp:/usr/include/qt6/QtCore/qlogging.h + mdp:/usr/include/qt6/QtCore/qmalloc.h + mdp:/usr/include/qt6/QtCore/qmath.h + mdp:/usr/include/qt6/QtCore/qmetacontainer.h + mdp:/usr/include/qt6/QtCore/qmetatype.h + mdp:/usr/include/qt6/QtCore/qminmax.h + mdp:/usr/include/qt6/QtCore/qnamespace.h + mdp:/usr/include/qt6/QtCore/qnumeric.h + mdp:/usr/include/qt6/QtCore/qobject.h + mdp:/usr/include/qt6/QtCore/qobject_impl.h + mdp:/usr/include/qt6/QtCore/qobjectdefs.h + mdp:/usr/include/qt6/QtCore/qobjectdefs_impl.h + mdp:/usr/include/qt6/QtCore/qoverload.h + mdp:/usr/include/qt6/QtCore/qpair.h + mdp:/usr/include/qt6/QtCore/qprocessordetection.h + mdp:/usr/include/qt6/QtCore/qrefcount.h + mdp:/usr/include/qt6/QtCore/qscopedpointer.h + mdp:/usr/include/qt6/QtCore/qscopeguard.h + mdp:/usr/include/qt6/QtCore/qstdlibdetection.h + mdp:/usr/include/qt6/QtCore/qstring.h + mdp:/usr/include/qt6/QtCore/qstringalgorithms.h + mdp:/usr/include/qt6/QtCore/qstringbuilder.h + mdp:/usr/include/qt6/QtCore/qstringconverter.h + mdp:/usr/include/qt6/QtCore/qstringconverter_base.h + mdp:/usr/include/qt6/QtCore/qstringfwd.h + mdp:/usr/include/qt6/QtCore/qstringlist.h + mdp:/usr/include/qt6/QtCore/qstringmatcher.h + mdp:/usr/include/qt6/QtCore/qstringtokenizer.h + mdp:/usr/include/qt6/QtCore/qstringview.h + mdp:/usr/include/qt6/QtCore/qswap.h + mdp:/usr/include/qt6/QtCore/qsysinfo.h + mdp:/usr/include/qt6/QtCore/qsystemdetection.h + mdp:/usr/include/qt6/QtCore/qtaggedpointer.h + mdp:/usr/include/qt6/QtCore/qtclasshelpermacros.h + mdp:/usr/include/qt6/QtCore/qtconfiginclude.h + mdp:/usr/include/qt6/QtCore/qtconfigmacros.h + mdp:/usr/include/qt6/QtCore/qtcore-config.h + mdp:/usr/include/qt6/QtCore/qtcoreexports.h + mdp:/usr/include/qt6/QtCore/qtcoreglobal.h + mdp:/usr/include/qt6/QtCore/qtdeprecationdefinitions.h + mdp:/usr/include/qt6/QtCore/qtdeprecationmarkers.h + mdp:/usr/include/qt6/QtCore/qtenvironmentvariables.h + mdp:/usr/include/qt6/QtCore/qtformat_impl.h + mdp:/usr/include/qt6/QtCore/qtmetamacros.h + mdp:/usr/include/qt6/QtCore/qtnoop.h + mdp:/usr/include/qt6/QtCore/qtpreprocessorsupport.h + mdp:/usr/include/qt6/QtCore/qtresource.h + mdp:/usr/include/qt6/QtCore/qttranslation.h + mdp:/usr/include/qt6/QtCore/qttypetraits.h + mdp:/usr/include/qt6/QtCore/qtversion.h + mdp:/usr/include/qt6/QtCore/qtversionchecks.h + mdp:/usr/include/qt6/QtCore/qtypeinfo.h + mdp:/usr/include/qt6/QtCore/qtypes.h + mdp:/usr/include/qt6/QtCore/qutf8stringview.h + mdp:/usr/include/qt6/QtCore/qversiontagging.h + mdp:/usr/include/qt6/QtCore/qxptype_traits.h + mdp:/usr/include/qt6/QtCore/qyieldcpu.h + mdp:/usr/include/sched.h + mdp:/usr/include/stdc-predef.h + mdp:/usr/include/stdint.h + mdp:/usr/include/stdio.h + mdp:/usr/include/stdlib.h + mdp:/usr/include/string.h + mdp:/usr/include/strings.h + mdp:/usr/include/sys/cdefs.h + mdp:/usr/include/sys/select.h + mdp:/usr/include/sys/single_threaded.h + mdp:/usr/include/sys/syscall.h + mdp:/usr/include/sys/types.h + mdp:/usr/include/syscall.h + mdp:/usr/include/time.h + mdp:/usr/include/unistd.h + mdp:/usr/include/wchar.h + mdp:/usr/include/wctype.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stdarg.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stdbool.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stddef.h diff --git a/build-linux/tests/CMakeFiles/test_everything_search.dir/__/src/everything_search.cpp.o b/build-linux/tests/CMakeFiles/test_everything_search.dir/__/src/everything_search.cpp.o new file mode 100644 index 00000000..8ecbb255 Binary files /dev/null and b/build-linux/tests/CMakeFiles/test_everything_search.dir/__/src/everything_search.cpp.o differ diff --git a/build-linux/tests/CMakeFiles/test_everything_search.dir/test_everything_search.cpp.o b/build-linux/tests/CMakeFiles/test_everything_search.dir/test_everything_search.cpp.o new file mode 100644 index 00000000..d965c7e7 Binary files /dev/null and b/build-linux/tests/CMakeFiles/test_everything_search.dir/test_everything_search.cpp.o differ diff --git a/build-linux/tests/CMakeFiles/test_everything_search.dir/test_everything_search_autogen/mocs_compilation.cpp.o b/build-linux/tests/CMakeFiles/test_everything_search.dir/test_everything_search_autogen/mocs_compilation.cpp.o new file mode 100644 index 00000000..bc1e4e33 Binary files /dev/null and b/build-linux/tests/CMakeFiles/test_everything_search.dir/test_everything_search_autogen/mocs_compilation.cpp.o differ diff --git a/build-linux/tests/CMakeFiles/test_everything_search_autogen.dir/AutogenInfo.json b/build-linux/tests/CMakeFiles/test_everything_search_autogen.dir/AutogenInfo.json new file mode 100644 index 00000000..6bb36f80 --- /dev/null +++ b/build-linux/tests/CMakeFiles/test_everything_search_autogen.dir/AutogenInfo.json @@ -0,0 +1,202 @@ +{ + "BUILD_DIR" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_everything_search_autogen", + "CMAKE_BINARY_DIR" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux", + "CMAKE_CURRENT_BINARY_DIR" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests", + "CMAKE_CURRENT_SOURCE_DIR" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests", + "CMAKE_EXECUTABLE" : "/usr/bin/cmake", + "CMAKE_LIST_FILES" : + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/CMakeLists.txt", + "/usr/lib64/cmake/Qt6/Qt6ConfigVersion.cmake", + "/usr/lib64/cmake/Qt6/Qt6ConfigVersionImpl.cmake", + "/usr/lib64/cmake/Qt6/Qt6Config.cmake", + "/usr/lib64/cmake/Qt6/QtPublicCMakeEarlyPolicyHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicCMakeHelpers.cmake", + "/usr/lib64/cmake/Qt6/Qt6ConfigExtras.cmake", + "/usr/lib64/cmake/Qt6/QtPublicCMakeVersionHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtInstallPaths.cmake", + "/usr/lib64/cmake/Qt6/Qt6Targets.cmake", + "/usr/lib64/cmake/Qt6/Qt6VersionlessAliasTargets.cmake", + "/usr/lib64/cmake/Qt6/QtFeature.cmake", + "/usr/share/cmake/Modules/CheckCXXCompilerFlag.cmake", + "/usr/lib64/cmake/Qt6/QtFeatureCommon.cmake", + "/usr/lib64/cmake/Qt6/QtPublicAndroidHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicAppleHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicCMakeHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicCMakeVersionHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicDependencyHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicExternalProjectHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicFinalizerHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicFindPackageHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicGitHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicPluginHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicPluginHelpers_v2.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomAttributionHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomBuildToolHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomCommonGenerationHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomCpeHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomCycloneDXHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomDocumentNamespaceHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomDepHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomExternalReferenceHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomFileHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomGenerationHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomGenerationCycloneDXHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomLicenseHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomOpsHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomPurlHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomPythonHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomQtEntityHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomRelationshipHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomSystemDepHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicTargetHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicTestHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicToolHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicWalkLibsHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicWindowsHelpers.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6/Qt6Dependencies.cmake", + "/usr/lib64/cmake/Qt6Test/Qt6TestConfigVersion.cmake", + "/usr/lib64/cmake/Qt6Test/Qt6TestConfigVersionImpl.cmake", + "/usr/lib64/cmake/Qt6Test/Qt6TestConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6Test/Qt6TestDependencies.cmake", + "/usr/lib64/cmake/Qt6Test/Qt6TestTargets.cmake", + "/usr/lib64/cmake/Qt6Test/Qt6TestTargets-relwithdebinfo.cmake", + "/usr/lib64/cmake/Qt6Test/Qt6TestAdditionalTargetInfo.cmake", + "/usr/lib64/cmake/Qt6Test/QtTestProperties.cmake", + "/usr/lib64/cmake/Qt6Test/Qt6TestVersionlessAliasTargets.cmake" + ], + "CMAKE_SOURCE_DIR" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6", + "CROSS_CONFIG" : false, + "DEP_FILE" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_everything_search_autogen/deps", + "DEP_FILE_RULE_NAME" : "test_everything_search_autogen/timestamp", + "HEADERS" : + [ + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/everything_search.h", + "MU", + "VNU7RW3YIC/moc_everything_search.cpp", + null + ] + ], + "HEADER_EXTENSIONS" : [ "h", "hh", "h++", "hm", "hpp", "hxx", "in", "txx" ], + "INCLUDE_DIR" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_everything_search_autogen/include", + "MOC_COMPILATION_FILE" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_everything_search_autogen/mocs_compilation.cpp", + "MOC_DEFINITIONS" : + [ + "FTK_API_GL_4_1", + "QT_CORE_LIB", + "QT_NO_DEBUG", + "QT_TESTCASE_BUILDDIR=\"/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests\"", + "QT_TESTCASE_SOURCEDIR=\"/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests\"", + "QT_TESTLIB_LIB", + "TLRENDER_EXR", + "TLRENDER_FFMPEG", + "TLRENDER_FFMPEG_PLUGIN", + "TLRENDER_JPEG", + "TLRENDER_OCIO", + "TLRENDER_OIIO", + "TLRENDER_PNG", + "TLRENDER_SDL2", + "TLRENDER_TIFF" + ], + "MOC_DEPEND_FILTERS" : + [ + [ + "Q_PLUGIN_METADATA", + "[\n][ \t]*Q_PLUGIN_METADATA[ \t]*\\([^\\)]*FILE[ \t]*\"([^\"]+)\"" + ] + ], + "MOC_INCLUDES" : + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src", + "/usr/include/qt6/QtTest", + "/usr/include/qt6", + "/usr/include/qt6/QtCore", + "/usr/lib64/qt6/mkspecs/linux-g++", + "/usr/include/c++/15", + "/usr/include/c++/15/x86_64-redhat-linux", + "/usr/include/c++/15/backward", + "/usr/lib/gcc/x86_64-redhat-linux/15/include", + "/usr/local/include", + "/usr/include" + ], + "MOC_MACRO_NAMES" : + [ + "Q_OBJECT", + "Q_GADGET", + "Q_NAMESPACE", + "Q_NAMESPACE_EXPORT", + "Q_GADGET_EXPORT", + "Q_ENUM_NS" + ], + "MOC_OPTIONS" : [], + "MOC_PATH_PREFIX" : false, + "MOC_PREDEFS_CMD" : + [ + "/usr/bin/c++", + "-std=gnu++20", + "-w", + "-dM", + "-E", + "/usr/share/cmake/Modules/CMakeCXXCompilerABI.cpp" + ], + "MOC_PREDEFS_FILE" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_everything_search_autogen/moc_predefs.h", + "MOC_RELAXED_MODE" : false, + "MOC_SKIP" : + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_db_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_drag_utils_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_importer_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_live_preview_manager_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_media_converter_worker_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_models_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_sequence_detector_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_simple_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_utils_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_virtual_drag_autogen/mocs_compilation.cpp" + ], + "MULTI_CONFIG" : false, + "PARALLEL" : 16, + "PARSE_CACHE_FILE" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/CMakeFiles/test_everything_search_autogen.dir/ParseCache.txt", + "QT_MOC_EXECUTABLE" : "/usr/lib64/qt6/libexec/moc", + "QT_UIC_EXECUTABLE" : "/usr/lib64/qt6/libexec/uic", + "QT_VERSION_MAJOR" : 6, + "QT_VERSION_MINOR" : 10, + "SETTINGS_FILE" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/CMakeFiles/test_everything_search_autogen.dir/AutogenUsed.txt", + "SOURCES" : + [ + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/everything_search.cpp", + "MU", + null + ], + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/test_everything_search.cpp", + "MU", + null + ] + ], + "UIC_OPTIONS" : [], + "UIC_SEARCH_PATHS" : [], + "UIC_SKIP" : + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_db_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_drag_utils_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_importer_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_live_preview_manager_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_media_converter_worker_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_models_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_sequence_detector_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_simple_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_utils_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_virtual_drag_autogen/mocs_compilation.cpp" + ], + "UIC_UI_FILES" : [], + "USE_BETTER_GRAPH" : true, + "VERBOSITY" : 0 +} diff --git a/build-linux/tests/CMakeFiles/test_everything_search_autogen.dir/AutogenUsed.txt b/build-linux/tests/CMakeFiles/test_everything_search_autogen.dir/AutogenUsed.txt new file mode 100644 index 00000000..20965e66 --- /dev/null +++ b/build-linux/tests/CMakeFiles/test_everything_search_autogen.dir/AutogenUsed.txt @@ -0,0 +1,2 @@ +moc:c8d2e0d6b9ec6bb88a26555d36562f211c048bd223b76c1f6f46a9a723c9bcd4 +uic:0df7b06f04b60705a14ff966fc10725af0fb193398324deeaf17e44a5f9db1e0 diff --git a/build-linux/tests/CMakeFiles/test_everything_search_autogen.dir/ParseCache.txt b/build-linux/tests/CMakeFiles/test_everything_search_autogen.dir/ParseCache.txt new file mode 100644 index 00000000..68ba543b --- /dev/null +++ b/build-linux/tests/CMakeFiles/test_everything_search_autogen.dir/ParseCache.txt @@ -0,0 +1,777 @@ +# Generated by CMake. Changes will be overwritten. +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/test_everything_search.cpp + mmc:Q_OBJECT + mid:test_everything_search.moc + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_everything_search_autogen/moc_predefs.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/everything_search.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/test_everything_search.cpp + mdp:/usr/include/asm-generic/bitsperlong.h + mdp:/usr/include/asm-generic/errno-base.h + mdp:/usr/include/asm-generic/errno.h + mdp:/usr/include/asm-generic/int-ll64.h + mdp:/usr/include/asm-generic/posix_types.h + mdp:/usr/include/asm-generic/types.h + mdp:/usr/include/asm/bitsperlong.h + mdp:/usr/include/asm/errno.h + mdp:/usr/include/asm/posix_types.h + mdp:/usr/include/asm/posix_types_64.h + mdp:/usr/include/asm/types.h + mdp:/usr/include/asm/unistd.h + mdp:/usr/include/asm/unistd_64.h + mdp:/usr/include/assert.h + mdp:/usr/include/bits/atomic_wide_counter.h + mdp:/usr/include/bits/byteswap.h + mdp:/usr/include/bits/confname.h + mdp:/usr/include/bits/cpu-set.h + mdp:/usr/include/bits/endian.h + mdp:/usr/include/bits/endianness.h + mdp:/usr/include/bits/environments.h + mdp:/usr/include/bits/errno.h + mdp:/usr/include/bits/floatn-common.h + mdp:/usr/include/bits/floatn.h + mdp:/usr/include/bits/getopt_core.h + mdp:/usr/include/bits/getopt_posix.h + mdp:/usr/include/bits/libc-header-start.h + mdp:/usr/include/bits/locale.h + mdp:/usr/include/bits/long-double.h + mdp:/usr/include/bits/posix_opt.h + mdp:/usr/include/bits/pthread_stack_min-dynamic.h + mdp:/usr/include/bits/pthreadtypes-arch.h + mdp:/usr/include/bits/pthreadtypes.h + mdp:/usr/include/bits/sched.h + mdp:/usr/include/bits/select.h + mdp:/usr/include/bits/semaphore.h + mdp:/usr/include/bits/setjmp.h + mdp:/usr/include/bits/stdint-intn.h + mdp:/usr/include/bits/stdio_lim.h + mdp:/usr/include/bits/struct_mutex.h + mdp:/usr/include/bits/struct_rwlock.h + mdp:/usr/include/bits/syscall.h + mdp:/usr/include/bits/thread-shared-types.h + mdp:/usr/include/bits/time.h + mdp:/usr/include/bits/time64.h + mdp:/usr/include/bits/timesize.h + mdp:/usr/include/bits/timex.h + mdp:/usr/include/bits/types.h + mdp:/usr/include/bits/types/FILE.h + mdp:/usr/include/bits/types/__FILE.h + mdp:/usr/include/bits/types/__fpos64_t.h + mdp:/usr/include/bits/types/__fpos_t.h + mdp:/usr/include/bits/types/__locale_t.h + mdp:/usr/include/bits/types/__mbstate_t.h + mdp:/usr/include/bits/types/__sigset_t.h + mdp:/usr/include/bits/types/clock_t.h + mdp:/usr/include/bits/types/clockid_t.h + mdp:/usr/include/bits/types/cookie_io_functions_t.h + mdp:/usr/include/bits/types/error_t.h + mdp:/usr/include/bits/types/locale_t.h + mdp:/usr/include/bits/types/mbstate_t.h + mdp:/usr/include/bits/types/sigset_t.h + mdp:/usr/include/bits/types/struct_FILE.h + mdp:/usr/include/bits/types/struct___jmp_buf_tag.h + mdp:/usr/include/bits/types/struct_itimerspec.h + mdp:/usr/include/bits/types/struct_sched_param.h + mdp:/usr/include/bits/types/struct_timespec.h + mdp:/usr/include/bits/types/struct_timeval.h + mdp:/usr/include/bits/types/struct_tm.h + mdp:/usr/include/bits/types/time_t.h + mdp:/usr/include/bits/types/timer_t.h + mdp:/usr/include/bits/types/wint_t.h + mdp:/usr/include/bits/typesizes.h + mdp:/usr/include/bits/uintn-identity.h + mdp:/usr/include/bits/unistd_ext.h + mdp:/usr/include/bits/wchar.h + mdp:/usr/include/bits/wctype-wchar.h + mdp:/usr/include/bits/wordsize.h + mdp:/usr/include/c++/15/algorithm + mdp:/usr/include/c++/15/array + mdp:/usr/include/c++/15/atomic + mdp:/usr/include/c++/15/backward/auto_ptr.h + mdp:/usr/include/c++/15/backward/binders.h + mdp:/usr/include/c++/15/bit + mdp:/usr/include/c++/15/bits/algorithmfwd.h + mdp:/usr/include/c++/15/bits/align.h + mdp:/usr/include/c++/15/bits/alloc_traits.h + mdp:/usr/include/c++/15/bits/allocated_ptr.h + mdp:/usr/include/c++/15/bits/allocator.h + mdp:/usr/include/c++/15/bits/atomic_base.h + mdp:/usr/include/c++/15/bits/atomic_futex.h + mdp:/usr/include/c++/15/bits/atomic_lockfree_defines.h + mdp:/usr/include/c++/15/bits/atomic_timed_wait.h + mdp:/usr/include/c++/15/bits/atomic_wait.h + mdp:/usr/include/c++/15/bits/basic_ios.h + mdp:/usr/include/c++/15/bits/basic_ios.tcc + mdp:/usr/include/c++/15/bits/basic_string.h + mdp:/usr/include/c++/15/bits/basic_string.tcc + mdp:/usr/include/c++/15/bits/char_traits.h + mdp:/usr/include/c++/15/bits/charconv.h + mdp:/usr/include/c++/15/bits/chrono.h + mdp:/usr/include/c++/15/bits/chrono_io.h + mdp:/usr/include/c++/15/bits/codecvt.h + mdp:/usr/include/c++/15/bits/concept_check.h + mdp:/usr/include/c++/15/bits/cpp_type_traits.h + mdp:/usr/include/c++/15/bits/cxxabi_forced.h + mdp:/usr/include/c++/15/bits/cxxabi_init_exception.h + mdp:/usr/include/c++/15/bits/enable_special_members.h + mdp:/usr/include/c++/15/bits/erase_if.h + mdp:/usr/include/c++/15/bits/exception.h + mdp:/usr/include/c++/15/bits/exception_defines.h + mdp:/usr/include/c++/15/bits/exception_ptr.h + mdp:/usr/include/c++/15/bits/functexcept.h + mdp:/usr/include/c++/15/bits/functional_hash.h + mdp:/usr/include/c++/15/bits/hash_bytes.h + mdp:/usr/include/c++/15/bits/hashtable.h + mdp:/usr/include/c++/15/bits/hashtable_policy.h + mdp:/usr/include/c++/15/bits/invoke.h + mdp:/usr/include/c++/15/bits/ios_base.h + mdp:/usr/include/c++/15/bits/istream.tcc + mdp:/usr/include/c++/15/bits/iterator_concepts.h + mdp:/usr/include/c++/15/bits/list.tcc + mdp:/usr/include/c++/15/bits/locale_classes.h + mdp:/usr/include/c++/15/bits/locale_classes.tcc + mdp:/usr/include/c++/15/bits/locale_conv.h + mdp:/usr/include/c++/15/bits/locale_facets.h + mdp:/usr/include/c++/15/bits/locale_facets.tcc + mdp:/usr/include/c++/15/bits/locale_facets_nonio.h + mdp:/usr/include/c++/15/bits/locale_facets_nonio.tcc + mdp:/usr/include/c++/15/bits/localefwd.h + mdp:/usr/include/c++/15/bits/max_size_type.h + mdp:/usr/include/c++/15/bits/memory_resource.h + mdp:/usr/include/c++/15/bits/memoryfwd.h + mdp:/usr/include/c++/15/bits/move.h + mdp:/usr/include/c++/15/bits/nested_exception.h + mdp:/usr/include/c++/15/bits/new_allocator.h + mdp:/usr/include/c++/15/bits/node_handle.h + mdp:/usr/include/c++/15/bits/ostream.h + mdp:/usr/include/c++/15/bits/ostream.tcc + mdp:/usr/include/c++/15/bits/ostream_insert.h + mdp:/usr/include/c++/15/bits/parse_numbers.h + mdp:/usr/include/c++/15/bits/postypes.h + mdp:/usr/include/c++/15/bits/predefined_ops.h + mdp:/usr/include/c++/15/bits/ptr_traits.h + mdp:/usr/include/c++/15/bits/quoted_string.h + mdp:/usr/include/c++/15/bits/random.h + mdp:/usr/include/c++/15/bits/random.tcc + mdp:/usr/include/c++/15/bits/range_access.h + mdp:/usr/include/c++/15/bits/ranges_algo.h + mdp:/usr/include/c++/15/bits/ranges_algobase.h + mdp:/usr/include/c++/15/bits/ranges_base.h + mdp:/usr/include/c++/15/bits/ranges_cmp.h + mdp:/usr/include/c++/15/bits/ranges_uninitialized.h + mdp:/usr/include/c++/15/bits/ranges_util.h + mdp:/usr/include/c++/15/bits/refwrap.h + mdp:/usr/include/c++/15/bits/requires_hosted.h + mdp:/usr/include/c++/15/bits/semaphore_base.h + mdp:/usr/include/c++/15/bits/shared_ptr.h + mdp:/usr/include/c++/15/bits/shared_ptr_atomic.h + mdp:/usr/include/c++/15/bits/shared_ptr_base.h + mdp:/usr/include/c++/15/bits/specfun.h + mdp:/usr/include/c++/15/bits/sstream.tcc + mdp:/usr/include/c++/15/bits/std_abs.h + mdp:/usr/include/c++/15/bits/std_function.h + mdp:/usr/include/c++/15/bits/std_mutex.h + mdp:/usr/include/c++/15/bits/std_thread.h + mdp:/usr/include/c++/15/bits/stl_algo.h + mdp:/usr/include/c++/15/bits/stl_algobase.h + mdp:/usr/include/c++/15/bits/stl_bvector.h + mdp:/usr/include/c++/15/bits/stl_construct.h + mdp:/usr/include/c++/15/bits/stl_function.h + mdp:/usr/include/c++/15/bits/stl_heap.h + mdp:/usr/include/c++/15/bits/stl_iterator.h + mdp:/usr/include/c++/15/bits/stl_iterator_base_funcs.h + mdp:/usr/include/c++/15/bits/stl_iterator_base_types.h + mdp:/usr/include/c++/15/bits/stl_list.h + mdp:/usr/include/c++/15/bits/stl_map.h + mdp:/usr/include/c++/15/bits/stl_multimap.h + mdp:/usr/include/c++/15/bits/stl_multiset.h + mdp:/usr/include/c++/15/bits/stl_numeric.h + mdp:/usr/include/c++/15/bits/stl_pair.h + mdp:/usr/include/c++/15/bits/stl_raw_storage_iter.h + mdp:/usr/include/c++/15/bits/stl_relops.h + mdp:/usr/include/c++/15/bits/stl_set.h + mdp:/usr/include/c++/15/bits/stl_tempbuf.h + mdp:/usr/include/c++/15/bits/stl_tree.h + mdp:/usr/include/c++/15/bits/stl_uninitialized.h + mdp:/usr/include/c++/15/bits/stl_vector.h + mdp:/usr/include/c++/15/bits/stream_iterator.h + mdp:/usr/include/c++/15/bits/streambuf.tcc + mdp:/usr/include/c++/15/bits/streambuf_iterator.h + mdp:/usr/include/c++/15/bits/string_view.tcc + mdp:/usr/include/c++/15/bits/stringfwd.h + mdp:/usr/include/c++/15/bits/this_thread_sleep.h + mdp:/usr/include/c++/15/bits/uniform_int_dist.h + mdp:/usr/include/c++/15/bits/unique_lock.h + mdp:/usr/include/c++/15/bits/unique_ptr.h + mdp:/usr/include/c++/15/bits/unordered_map.h + mdp:/usr/include/c++/15/bits/unordered_set.h + mdp:/usr/include/c++/15/bits/uses_allocator.h + mdp:/usr/include/c++/15/bits/uses_allocator_args.h + mdp:/usr/include/c++/15/bits/utility.h + mdp:/usr/include/c++/15/bits/vector.tcc + mdp:/usr/include/c++/15/bits/version.h + mdp:/usr/include/c++/15/cassert + mdp:/usr/include/c++/15/cctype + mdp:/usr/include/c++/15/cerrno + mdp:/usr/include/c++/15/charconv + mdp:/usr/include/c++/15/chrono + mdp:/usr/include/c++/15/climits + mdp:/usr/include/c++/15/clocale + mdp:/usr/include/c++/15/cmath + mdp:/usr/include/c++/15/compare + mdp:/usr/include/c++/15/concepts + mdp:/usr/include/c++/15/condition_variable + mdp:/usr/include/c++/15/cstddef + mdp:/usr/include/c++/15/cstdint + mdp:/usr/include/c++/15/cstdio + mdp:/usr/include/c++/15/cstdlib + mdp:/usr/include/c++/15/cstring + mdp:/usr/include/c++/15/ctime + mdp:/usr/include/c++/15/cwchar + mdp:/usr/include/c++/15/cwctype + mdp:/usr/include/c++/15/debug/assertions.h + mdp:/usr/include/c++/15/debug/debug.h + mdp:/usr/include/c++/15/exception + mdp:/usr/include/c++/15/experimental/source_location + mdp:/usr/include/c++/15/ext/aligned_buffer.h + mdp:/usr/include/c++/15/ext/alloc_traits.h + mdp:/usr/include/c++/15/ext/atomicity.h + mdp:/usr/include/c++/15/ext/concurrence.h + mdp:/usr/include/c++/15/ext/numeric_traits.h + mdp:/usr/include/c++/15/ext/string_conversions.h + mdp:/usr/include/c++/15/ext/type_traits.h + mdp:/usr/include/c++/15/filesystem + mdp:/usr/include/c++/15/format + mdp:/usr/include/c++/15/functional + mdp:/usr/include/c++/15/future + mdp:/usr/include/c++/15/initializer_list + mdp:/usr/include/c++/15/iomanip + mdp:/usr/include/c++/15/ios + mdp:/usr/include/c++/15/iosfwd + mdp:/usr/include/c++/15/istream + mdp:/usr/include/c++/15/iterator + mdp:/usr/include/c++/15/limits + mdp:/usr/include/c++/15/list + mdp:/usr/include/c++/15/locale + mdp:/usr/include/c++/15/map + mdp:/usr/include/c++/15/memory + mdp:/usr/include/c++/15/memory_resource + mdp:/usr/include/c++/15/mutex + mdp:/usr/include/c++/15/new + mdp:/usr/include/c++/15/numeric + mdp:/usr/include/c++/15/optional + mdp:/usr/include/c++/15/ostream + mdp:/usr/include/c++/15/pstl/execution_defs.h + mdp:/usr/include/c++/15/pstl/glue_numeric_defs.h + mdp:/usr/include/c++/15/pstl/pstl_config.h + mdp:/usr/include/c++/15/random + mdp:/usr/include/c++/15/ratio + mdp:/usr/include/c++/15/semaphore + mdp:/usr/include/c++/15/set + mdp:/usr/include/c++/15/shared_mutex + mdp:/usr/include/c++/15/source_location + mdp:/usr/include/c++/15/sstream + mdp:/usr/include/c++/15/stdexcept + mdp:/usr/include/c++/15/stdlib.h + mdp:/usr/include/c++/15/stop_token + mdp:/usr/include/c++/15/streambuf + mdp:/usr/include/c++/15/string + mdp:/usr/include/c++/15/string_view + mdp:/usr/include/c++/15/system_error + mdp:/usr/include/c++/15/tr1/bessel_function.tcc + mdp:/usr/include/c++/15/tr1/beta_function.tcc + mdp:/usr/include/c++/15/tr1/ell_integral.tcc + mdp:/usr/include/c++/15/tr1/exp_integral.tcc + mdp:/usr/include/c++/15/tr1/gamma.tcc + mdp:/usr/include/c++/15/tr1/hypergeometric.tcc + mdp:/usr/include/c++/15/tr1/legendre_function.tcc + mdp:/usr/include/c++/15/tr1/modified_bessel_func.tcc + mdp:/usr/include/c++/15/tr1/poly_hermite.tcc + mdp:/usr/include/c++/15/tr1/poly_laguerre.tcc + mdp:/usr/include/c++/15/tr1/riemann_zeta.tcc + mdp:/usr/include/c++/15/tr1/special_function_util.h + mdp:/usr/include/c++/15/tuple + mdp:/usr/include/c++/15/type_traits + mdp:/usr/include/c++/15/typeinfo + mdp:/usr/include/c++/15/unordered_map + mdp:/usr/include/c++/15/unordered_set + mdp:/usr/include/c++/15/utility + mdp:/usr/include/c++/15/variant + mdp:/usr/include/c++/15/vector + mdp:/usr/include/c++/15/version + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/atomic_word.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++allocator.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++config.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++locale.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/cpu_defines.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/ctype_base.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/ctype_inline.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/error_constants.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/gthr-default.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/gthr.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/messages_members.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/opt_random.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/os_defines.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/time_members.h + mdp:/usr/include/ctype.h + mdp:/usr/include/endian.h + mdp:/usr/include/errno.h + mdp:/usr/include/features-time64.h + mdp:/usr/include/features.h + mdp:/usr/include/gnu/stubs-64.h + mdp:/usr/include/gnu/stubs.h + mdp:/usr/include/libintl.h + mdp:/usr/include/linux/close_range.h + mdp:/usr/include/linux/errno.h + mdp:/usr/include/linux/posix_types.h + mdp:/usr/include/linux/sched/types.h + mdp:/usr/include/linux/stddef.h + mdp:/usr/include/linux/types.h + mdp:/usr/include/locale.h + mdp:/usr/include/pthread.h + mdp:/usr/include/qt6/QtCore/QAbstractItemModel + mdp:/usr/include/qt6/QtCore/QDateTime + mdp:/usr/include/qt6/QtCore/QDeadlineTimer + mdp:/usr/include/qt6/QtCore/QHash + mdp:/usr/include/qt6/QtCore/QLibrary + mdp:/usr/include/qt6/QtCore/QList + mdp:/usr/include/qt6/QtCore/QMap + mdp:/usr/include/qt6/QtCore/QMutex + mdp:/usr/include/qt6/QtCore/QObject + mdp:/usr/include/qt6/QtCore/QString + mdp:/usr/include/qt6/QtCore/QStringList + mdp:/usr/include/qt6/QtCore/QVariant + mdp:/usr/include/qt6/QtCore/QVector + mdp:/usr/include/qt6/QtCore/QtCore + mdp:/usr/include/qt6/QtCore/QtCoreDepends + mdp:/usr/include/qt6/QtCore/q17memory.h + mdp:/usr/include/qt6/QtCore/q20algorithm.h + mdp:/usr/include/qt6/QtCore/q20chrono.h + mdp:/usr/include/qt6/QtCore/q20functional.h + mdp:/usr/include/qt6/QtCore/q20iterator.h + mdp:/usr/include/qt6/QtCore/q20map.h + mdp:/usr/include/qt6/QtCore/q20memory.h + mdp:/usr/include/qt6/QtCore/q20type_traits.h + mdp:/usr/include/qt6/QtCore/q20utility.h + mdp:/usr/include/qt6/QtCore/q20vector.h + mdp:/usr/include/qt6/QtCore/q23functional.h + mdp:/usr/include/qt6/QtCore/q23type_traits.h + mdp:/usr/include/qt6/QtCore/q23utility.h + mdp:/usr/include/qt6/QtCore/q26numeric.h + mdp:/usr/include/qt6/QtCore/qabstractanimation.h + mdp:/usr/include/qt6/QtCore/qabstracteventdispatcher.h + mdp:/usr/include/qt6/QtCore/qabstractitemmodel.h + mdp:/usr/include/qt6/QtCore/qabstractnativeeventfilter.h + mdp:/usr/include/qt6/QtCore/qabstractproxymodel.h + mdp:/usr/include/qt6/QtCore/qalgorithms.h + mdp:/usr/include/qt6/QtCore/qalloc.h + mdp:/usr/include/qt6/QtCore/qanimationgroup.h + mdp:/usr/include/qt6/QtCore/qanystringview.h + mdp:/usr/include/qt6/QtCore/qapplicationstatic.h + mdp:/usr/include/qt6/QtCore/qarraydata.h + mdp:/usr/include/qt6/QtCore/qarraydataops.h + mdp:/usr/include/qt6/QtCore/qarraydatapointer.h + mdp:/usr/include/qt6/QtCore/qassert.h + mdp:/usr/include/qt6/QtCore/qassociativeiterable.h + mdp:/usr/include/qt6/QtCore/qatomic.h + mdp:/usr/include/qt6/QtCore/qatomic_cxx11.h + mdp:/usr/include/qt6/QtCore/qatomicscopedvaluerollback.h + mdp:/usr/include/qt6/QtCore/qbasicatomic.h + mdp:/usr/include/qt6/QtCore/qbasictimer.h + mdp:/usr/include/qt6/QtCore/qbindingstorage.h + mdp:/usr/include/qt6/QtCore/qbitarray.h + mdp:/usr/include/qt6/QtCore/qbuffer.h + mdp:/usr/include/qt6/QtCore/qbytearray.h + mdp:/usr/include/qt6/QtCore/qbytearrayalgorithms.h + mdp:/usr/include/qt6/QtCore/qbytearraylist.h + mdp:/usr/include/qt6/QtCore/qbytearraymatcher.h + mdp:/usr/include/qt6/QtCore/qbytearrayview.h + mdp:/usr/include/qt6/QtCore/qcache.h + mdp:/usr/include/qt6/QtCore/qcalendar.h + mdp:/usr/include/qt6/QtCore/qcborarray.h + mdp:/usr/include/qt6/QtCore/qcborcommon.h + mdp:/usr/include/qt6/QtCore/qcbormap.h + mdp:/usr/include/qt6/QtCore/qcborstream.h + mdp:/usr/include/qt6/QtCore/qcborstreamreader.h + mdp:/usr/include/qt6/QtCore/qcborstreamwriter.h + mdp:/usr/include/qt6/QtCore/qcborvalue.h + mdp:/usr/include/qt6/QtCore/qchar.h + mdp:/usr/include/qt6/QtCore/qcheckedint_impl.h + mdp:/usr/include/qt6/QtCore/qchronotimer.h + mdp:/usr/include/qt6/QtCore/qcollator.h + mdp:/usr/include/qt6/QtCore/qcommandlineoption.h + mdp:/usr/include/qt6/QtCore/qcommandlineparser.h + mdp:/usr/include/qt6/QtCore/qcompare.h + mdp:/usr/include/qt6/QtCore/qcompare_impl.h + mdp:/usr/include/qt6/QtCore/qcomparehelpers.h + mdp:/usr/include/qt6/QtCore/qcompilerdetection.h + mdp:/usr/include/qt6/QtCore/qconcatenatetablesproxymodel.h + mdp:/usr/include/qt6/QtCore/qconfig-64.h + mdp:/usr/include/qt6/QtCore/qconfig.h + mdp:/usr/include/qt6/QtCore/qconstructormacros.h + mdp:/usr/include/qt6/QtCore/qcontainerfwd.h + mdp:/usr/include/qt6/QtCore/qcontainerinfo.h + mdp:/usr/include/qt6/QtCore/qcontainertools_impl.h + mdp:/usr/include/qt6/QtCore/qcontiguouscache.h + mdp:/usr/include/qt6/QtCore/qcoreapplication.h + mdp:/usr/include/qt6/QtCore/qcoreapplication_platform.h + mdp:/usr/include/qt6/QtCore/qcoreevent.h + mdp:/usr/include/qt6/QtCore/qcryptographichash.h + mdp:/usr/include/qt6/QtCore/qdarwinhelpers.h + mdp:/usr/include/qt6/QtCore/qdatastream.h + mdp:/usr/include/qt6/QtCore/qdatetime.h + mdp:/usr/include/qt6/QtCore/qdeadlinetimer.h + mdp:/usr/include/qt6/QtCore/qdebug.h + mdp:/usr/include/qt6/QtCore/qdir.h + mdp:/usr/include/qt6/QtCore/qdiriterator.h + mdp:/usr/include/qt6/QtCore/qdirlisting.h + mdp:/usr/include/qt6/QtCore/qeasingcurve.h + mdp:/usr/include/qt6/QtCore/qelapsedtimer.h + mdp:/usr/include/qt6/QtCore/qendian.h + mdp:/usr/include/qt6/QtCore/qeventloop.h + mdp:/usr/include/qt6/QtCore/qexception.h + mdp:/usr/include/qt6/QtCore/qexceptionhandling.h + mdp:/usr/include/qt6/QtCore/qfactoryinterface.h + mdp:/usr/include/qt6/QtCore/qfile.h + mdp:/usr/include/qt6/QtCore/qfiledevice.h + mdp:/usr/include/qt6/QtCore/qfileinfo.h + mdp:/usr/include/qt6/QtCore/qfileselector.h + mdp:/usr/include/qt6/QtCore/qfilesystemwatcher.h + mdp:/usr/include/qt6/QtCore/qflags.h + mdp:/usr/include/qt6/QtCore/qfloat16.h + mdp:/usr/include/qt6/QtCore/qforeach.h + mdp:/usr/include/qt6/QtCore/qfunctionaltools_impl.h + mdp:/usr/include/qt6/QtCore/qfunctionpointer.h + mdp:/usr/include/qt6/QtCore/qfuture.h + mdp:/usr/include/qt6/QtCore/qfuture_impl.h + mdp:/usr/include/qt6/QtCore/qfutureinterface.h + mdp:/usr/include/qt6/QtCore/qfuturesynchronizer.h + mdp:/usr/include/qt6/QtCore/qfuturewatcher.h + mdp:/usr/include/qt6/QtCore/qgenericatomic.h + mdp:/usr/include/qt6/QtCore/qglobal.h + mdp:/usr/include/qt6/QtCore/qglobalstatic.h + mdp:/usr/include/qt6/QtCore/qhash.h + mdp:/usr/include/qt6/QtCore/qhashfunctions.h + mdp:/usr/include/qt6/QtCore/qidentityproxymodel.h + mdp:/usr/include/qt6/QtCore/qiodevice.h + mdp:/usr/include/qt6/QtCore/qiodevicebase.h + mdp:/usr/include/qt6/QtCore/qitemselectionmodel.h + mdp:/usr/include/qt6/QtCore/qiterable.h + mdp:/usr/include/qt6/QtCore/qiterator.h + mdp:/usr/include/qt6/QtCore/qjsonarray.h + mdp:/usr/include/qt6/QtCore/qjsondocument.h + mdp:/usr/include/qt6/QtCore/qjsonobject.h + mdp:/usr/include/qt6/QtCore/qjsonparseerror.h + mdp:/usr/include/qt6/QtCore/qjsonvalue.h + mdp:/usr/include/qt6/QtCore/qlatin1stringmatcher.h + mdp:/usr/include/qt6/QtCore/qlatin1stringview.h + mdp:/usr/include/qt6/QtCore/qlibrary.h + mdp:/usr/include/qt6/QtCore/qlibraryinfo.h + mdp:/usr/include/qt6/QtCore/qline.h + mdp:/usr/include/qt6/QtCore/qlist.h + mdp:/usr/include/qt6/QtCore/qlocale.h + mdp:/usr/include/qt6/QtCore/qlockfile.h + mdp:/usr/include/qt6/QtCore/qlogging.h + mdp:/usr/include/qt6/QtCore/qloggingcategory.h + mdp:/usr/include/qt6/QtCore/qmalloc.h + mdp:/usr/include/qt6/QtCore/qmap.h + mdp:/usr/include/qt6/QtCore/qmargins.h + mdp:/usr/include/qt6/QtCore/qmath.h + mdp:/usr/include/qt6/QtCore/qmessageauthenticationcode.h + mdp:/usr/include/qt6/QtCore/qmetacontainer.h + mdp:/usr/include/qt6/QtCore/qmetaobject.h + mdp:/usr/include/qt6/QtCore/qmetatype.h + mdp:/usr/include/qt6/QtCore/qmimedata.h + mdp:/usr/include/qt6/QtCore/qmimedatabase.h + mdp:/usr/include/qt6/QtCore/qmimetype.h + mdp:/usr/include/qt6/QtCore/qminmax.h + mdp:/usr/include/qt6/QtCore/qmutex.h + mdp:/usr/include/qt6/QtCore/qnamespace.h + mdp:/usr/include/qt6/QtCore/qnativeinterface.h + mdp:/usr/include/qt6/QtCore/qnumeric.h + mdp:/usr/include/qt6/QtCore/qobject.h + mdp:/usr/include/qt6/QtCore/qobject_impl.h + mdp:/usr/include/qt6/QtCore/qobjectcleanuphandler.h + mdp:/usr/include/qt6/QtCore/qobjectdefs.h + mdp:/usr/include/qt6/QtCore/qobjectdefs_impl.h + mdp:/usr/include/qt6/QtCore/qoperatingsystemversion.h + mdp:/usr/include/qt6/QtCore/qoverload.h + mdp:/usr/include/qt6/QtCore/qpair.h + mdp:/usr/include/qt6/QtCore/qparallelanimationgroup.h + mdp:/usr/include/qt6/QtCore/qpauseanimation.h + mdp:/usr/include/qt6/QtCore/qpermissions.h + mdp:/usr/include/qt6/QtCore/qplugin.h + mdp:/usr/include/qt6/QtCore/qpluginloader.h + mdp:/usr/include/qt6/QtCore/qpoint.h + mdp:/usr/include/qt6/QtCore/qpointer.h + mdp:/usr/include/qt6/QtCore/qprocess.h + mdp:/usr/include/qt6/QtCore/qprocessordetection.h + mdp:/usr/include/qt6/QtCore/qpromise.h + mdp:/usr/include/qt6/QtCore/qproperty.h + mdp:/usr/include/qt6/QtCore/qpropertyanimation.h + mdp:/usr/include/qt6/QtCore/qpropertyprivate.h + mdp:/usr/include/qt6/QtCore/qqueue.h + mdp:/usr/include/qt6/QtCore/qrandom.h + mdp:/usr/include/qt6/QtCore/qrangemodel.h + mdp:/usr/include/qt6/QtCore/qrangemodel_impl.h + mdp:/usr/include/qt6/QtCore/qreadwritelock.h + mdp:/usr/include/qt6/QtCore/qrect.h + mdp:/usr/include/qt6/QtCore/qrefcount.h + mdp:/usr/include/qt6/QtCore/qregularexpression.h + mdp:/usr/include/qt6/QtCore/qresource.h + mdp:/usr/include/qt6/QtCore/qresultstore.h + mdp:/usr/include/qt6/QtCore/qrunnable.h + mdp:/usr/include/qt6/QtCore/qsavefile.h + mdp:/usr/include/qt6/QtCore/qscopedpointer.h + mdp:/usr/include/qt6/QtCore/qscopedvaluerollback.h + mdp:/usr/include/qt6/QtCore/qscopeguard.h + mdp:/usr/include/qt6/QtCore/qsemaphore.h + mdp:/usr/include/qt6/QtCore/qsequentialanimationgroup.h + mdp:/usr/include/qt6/QtCore/qsequentialiterable.h + mdp:/usr/include/qt6/QtCore/qset.h + mdp:/usr/include/qt6/QtCore/qsettings.h + mdp:/usr/include/qt6/QtCore/qshareddata.h + mdp:/usr/include/qt6/QtCore/qshareddata_impl.h + mdp:/usr/include/qt6/QtCore/qsharedmemory.h + mdp:/usr/include/qt6/QtCore/qsharedpointer.h + mdp:/usr/include/qt6/QtCore/qsharedpointer_impl.h + mdp:/usr/include/qt6/QtCore/qsignalmapper.h + mdp:/usr/include/qt6/QtCore/qsimd.h + mdp:/usr/include/qt6/QtCore/qsize.h + mdp:/usr/include/qt6/QtCore/qsocketnotifier.h + mdp:/usr/include/qt6/QtCore/qsortfilterproxymodel.h + mdp:/usr/include/qt6/QtCore/qspan.h + mdp:/usr/include/qt6/QtCore/qstack.h + mdp:/usr/include/qt6/QtCore/qstandardpaths.h + mdp:/usr/include/qt6/QtCore/qstaticlatin1stringmatcher.h + mdp:/usr/include/qt6/QtCore/qstdlibdetection.h + mdp:/usr/include/qt6/QtCore/qstorageinfo.h + mdp:/usr/include/qt6/QtCore/qstring.h + mdp:/usr/include/qt6/QtCore/qstringalgorithms.h + mdp:/usr/include/qt6/QtCore/qstringbuilder.h + mdp:/usr/include/qt6/QtCore/qstringconverter.h + mdp:/usr/include/qt6/QtCore/qstringconverter_base.h + mdp:/usr/include/qt6/QtCore/qstringfwd.h + mdp:/usr/include/qt6/QtCore/qstringlist.h + mdp:/usr/include/qt6/QtCore/qstringlistmodel.h + mdp:/usr/include/qt6/QtCore/qstringliteral.h + mdp:/usr/include/qt6/QtCore/qstringmatcher.h + mdp:/usr/include/qt6/QtCore/qstringtokenizer.h + mdp:/usr/include/qt6/QtCore/qstringview.h + mdp:/usr/include/qt6/QtCore/qswap.h + mdp:/usr/include/qt6/QtCore/qsysinfo.h + mdp:/usr/include/qt6/QtCore/qsystemdetection.h + mdp:/usr/include/qt6/QtCore/qsystemsemaphore.h + mdp:/usr/include/qt6/QtCore/qtaggedpointer.h + mdp:/usr/include/qt6/QtCore/qtclasshelpermacros.h + mdp:/usr/include/qt6/QtCore/qtconfiginclude.h + mdp:/usr/include/qt6/QtCore/qtconfigmacros.h + mdp:/usr/include/qt6/QtCore/qtcore-config.h + mdp:/usr/include/qt6/QtCore/qtcoreexports.h + mdp:/usr/include/qt6/QtCore/qtcoreglobal.h + mdp:/usr/include/qt6/QtCore/qtcoreversion.h + mdp:/usr/include/qt6/QtCore/qtdeprecationdefinitions.h + mdp:/usr/include/qt6/QtCore/qtdeprecationmarkers.h + mdp:/usr/include/qt6/QtCore/qtemporarydir.h + mdp:/usr/include/qt6/QtCore/qtemporaryfile.h + mdp:/usr/include/qt6/QtCore/qtenvironmentvariables.h + mdp:/usr/include/qt6/QtCore/qtestsupport_core.h + mdp:/usr/include/qt6/QtCore/qtextboundaryfinder.h + mdp:/usr/include/qt6/QtCore/qtextstream.h + mdp:/usr/include/qt6/QtCore/qtformat_impl.h + mdp:/usr/include/qt6/QtCore/qthread.h + mdp:/usr/include/qt6/QtCore/qthreadpool.h + mdp:/usr/include/qt6/QtCore/qthreadstorage.h + mdp:/usr/include/qt6/QtCore/qtimeline.h + mdp:/usr/include/qt6/QtCore/qtimer.h + mdp:/usr/include/qt6/QtCore/qtimezone.h + mdp:/usr/include/qt6/QtCore/qtipccommon.h + mdp:/usr/include/qt6/QtCore/qtmetamacros.h + mdp:/usr/include/qt6/QtCore/qtmocconstants.h + mdp:/usr/include/qt6/QtCore/qtnoop.h + mdp:/usr/include/qt6/QtCore/qtpreprocessorsupport.h + mdp:/usr/include/qt6/QtCore/qtranslator.h + mdp:/usr/include/qt6/QtCore/qtransposeproxymodel.h + mdp:/usr/include/qt6/QtCore/qtresource.h + mdp:/usr/include/qt6/QtCore/qtsan_impl.h + mdp:/usr/include/qt6/QtCore/qtsymbolmacros.h + mdp:/usr/include/qt6/QtCore/qttranslation.h + mdp:/usr/include/qt6/QtCore/qttypetraits.h + mdp:/usr/include/qt6/QtCore/qtversion.h + mdp:/usr/include/qt6/QtCore/qtversionchecks.h + mdp:/usr/include/qt6/QtCore/qtypeinfo.h + mdp:/usr/include/qt6/QtCore/qtyperevision.h + mdp:/usr/include/qt6/QtCore/qtypes.h + mdp:/usr/include/qt6/QtCore/qurl.h + mdp:/usr/include/qt6/QtCore/qurlquery.h + mdp:/usr/include/qt6/QtCore/qutf8stringview.h + mdp:/usr/include/qt6/QtCore/quuid.h + mdp:/usr/include/qt6/QtCore/qvariant.h + mdp:/usr/include/qt6/QtCore/qvariantanimation.h + mdp:/usr/include/qt6/QtCore/qvarianthash.h + mdp:/usr/include/qt6/QtCore/qvariantlist.h + mdp:/usr/include/qt6/QtCore/qvariantmap.h + mdp:/usr/include/qt6/QtCore/qvarlengtharray.h + mdp:/usr/include/qt6/QtCore/qvector.h + mdp:/usr/include/qt6/QtCore/qversionnumber.h + mdp:/usr/include/qt6/QtCore/qversiontagging.h + mdp:/usr/include/qt6/QtCore/qwaitcondition.h + mdp:/usr/include/qt6/QtCore/qwineventnotifier.h + mdp:/usr/include/qt6/QtCore/qxmlstream.h + mdp:/usr/include/qt6/QtCore/qxpfunctional.h + mdp:/usr/include/qt6/QtCore/qxptype_traits.h + mdp:/usr/include/qt6/QtCore/qyieldcpu.h + mdp:/usr/include/qt6/QtTest/QtTest + mdp:/usr/include/qt6/QtTest/QtTestDepends + mdp:/usr/include/qt6/QtTest/qabstractitemmodeltester.h + mdp:/usr/include/qt6/QtTest/qbenchmark.h + mdp:/usr/include/qt6/QtTest/qbenchmarkmetric.h + mdp:/usr/include/qt6/QtTest/qsignalspy.h + mdp:/usr/include/qt6/QtTest/qtest.h + mdp:/usr/include/qt6/QtTest/qtestassert.h + mdp:/usr/include/qt6/QtTest/qtestcase.h + mdp:/usr/include/qt6/QtTest/qtestdata.h + mdp:/usr/include/qt6/QtTest/qtesteventloop.h + mdp:/usr/include/qt6/QtTest/qtestsystem.h + mdp:/usr/include/qt6/QtTest/qtesttostring.h + mdp:/usr/include/qt6/QtTest/qttestexports.h + mdp:/usr/include/qt6/QtTest/qttestglobal.h + mdp:/usr/include/qt6/QtTest/qttestlib-config.h + mdp:/usr/include/qt6/QtTest/qttestversion.h + mdp:/usr/include/sched.h + mdp:/usr/include/semaphore.h + mdp:/usr/include/stdc-predef.h + mdp:/usr/include/stdio.h + mdp:/usr/include/string.h + mdp:/usr/include/strings.h + mdp:/usr/include/sys/cdefs.h + mdp:/usr/include/sys/select.h + mdp:/usr/include/sys/single_threaded.h + mdp:/usr/include/sys/syscall.h + mdp:/usr/include/sys/time.h + mdp:/usr/include/sys/types.h + mdp:/usr/include/syscall.h + mdp:/usr/include/time.h + mdp:/usr/include/unistd.h + mdp:/usr/include/wchar.h + mdp:/usr/include/wctype.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/adxintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxavx512intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxbf16intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxcomplexintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxfp16intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxfp8intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxint8intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxmovrsintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxtf32intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxtileintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxtransposeintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2-512bf16intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2-512convertintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2-512mediaintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2-512minmaxintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2-512satcvtintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2bf16intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2convertintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2copyintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2mediaintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2minmaxintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2satcvtintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx2intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512bf16intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512bf16vlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512bitalgintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512bitalgvlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512bwintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512cdintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512dqintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512fintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512fp16intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512fp16vlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512ifmaintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512ifmavlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vbmi2intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vbmi2vlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vbmiintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vbmivlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vlbwintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vldqintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vnniintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vnnivlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vp2intersectintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vp2intersectvlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vpopcntdqintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vpopcntdqvlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avxifmaintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avxintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avxneconvertintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avxvnniint16intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avxvnniint8intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avxvnniintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/bmi2intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/bmiintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/cetintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/cldemoteintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/clflushoptintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/clwbintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/clzerointrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/cmpccxaddintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/emmintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/enqcmdintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/f16cintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/fmaintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/fxsrintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/gfniintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/hresetintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/ia32intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/immintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/keylockerintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/limits.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/lwpintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/lzcntintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/mm_malloc.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/mmintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/movdirintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/movrsintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/mwaitintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/mwaitxintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/pconfigintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/pkuintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/pmmintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/popcntintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/prfchiintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/prfchwintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/raointintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/rdseedintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/rtmintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/serializeintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/sgxintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/sha512intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/shaintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/sm3intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/sm4intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/smmintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stdarg.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stdbool.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stddef.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stdint.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/syslimits.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/tbmintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/tmmintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/tsxldtrkintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/uintrintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/usermsrintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/vaesintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/vpclmulqdqintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/waitpkgintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/wbnoinvdintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/wmmintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/x86gprintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/xmmintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/xsavecintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/xsaveintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/xsaveoptintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/xsavesintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/xtestintrin.h +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/everything_search.cpp +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/everything_search.h diff --git a/build-linux/tests/CMakeFiles/test_grid_scrub.dir/test_grid_scrub.cpp.o b/build-linux/tests/CMakeFiles/test_grid_scrub.dir/test_grid_scrub.cpp.o new file mode 100644 index 00000000..bbf669ef Binary files /dev/null and b/build-linux/tests/CMakeFiles/test_grid_scrub.dir/test_grid_scrub.cpp.o differ diff --git a/build-linux/tests/CMakeFiles/test_grid_scrub.dir/test_grid_scrub_autogen/mocs_compilation.cpp.o b/build-linux/tests/CMakeFiles/test_grid_scrub.dir/test_grid_scrub_autogen/mocs_compilation.cpp.o new file mode 100644 index 00000000..bc1e4e33 Binary files /dev/null and b/build-linux/tests/CMakeFiles/test_grid_scrub.dir/test_grid_scrub_autogen/mocs_compilation.cpp.o differ diff --git a/build-linux/tests/CMakeFiles/test_grid_scrub_autogen.dir/AutogenInfo.json b/build-linux/tests/CMakeFiles/test_grid_scrub_autogen.dir/AutogenInfo.json new file mode 100644 index 00000000..32b6e2f8 --- /dev/null +++ b/build-linux/tests/CMakeFiles/test_grid_scrub_autogen.dir/AutogenInfo.json @@ -0,0 +1,197 @@ +{ + "BUILD_DIR" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_grid_scrub_autogen", + "CMAKE_BINARY_DIR" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux", + "CMAKE_CURRENT_BINARY_DIR" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests", + "CMAKE_CURRENT_SOURCE_DIR" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests", + "CMAKE_EXECUTABLE" : "/usr/bin/cmake", + "CMAKE_LIST_FILES" : + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/CMakeLists.txt", + "/usr/lib64/cmake/Qt6/Qt6ConfigVersion.cmake", + "/usr/lib64/cmake/Qt6/Qt6ConfigVersionImpl.cmake", + "/usr/lib64/cmake/Qt6/Qt6Config.cmake", + "/usr/lib64/cmake/Qt6/QtPublicCMakeEarlyPolicyHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicCMakeHelpers.cmake", + "/usr/lib64/cmake/Qt6/Qt6ConfigExtras.cmake", + "/usr/lib64/cmake/Qt6/QtPublicCMakeVersionHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtInstallPaths.cmake", + "/usr/lib64/cmake/Qt6/Qt6Targets.cmake", + "/usr/lib64/cmake/Qt6/Qt6VersionlessAliasTargets.cmake", + "/usr/lib64/cmake/Qt6/QtFeature.cmake", + "/usr/share/cmake/Modules/CheckCXXCompilerFlag.cmake", + "/usr/lib64/cmake/Qt6/QtFeatureCommon.cmake", + "/usr/lib64/cmake/Qt6/QtPublicAndroidHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicAppleHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicCMakeHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicCMakeVersionHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicDependencyHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicExternalProjectHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicFinalizerHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicFindPackageHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicGitHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicPluginHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicPluginHelpers_v2.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomAttributionHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomBuildToolHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomCommonGenerationHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomCpeHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomCycloneDXHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomDocumentNamespaceHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomDepHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomExternalReferenceHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomFileHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomGenerationHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomGenerationCycloneDXHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomLicenseHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomOpsHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomPurlHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomPythonHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomQtEntityHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomRelationshipHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomSystemDepHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicTargetHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicTestHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicToolHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicWalkLibsHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicWindowsHelpers.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6/Qt6Dependencies.cmake", + "/usr/lib64/cmake/Qt6Test/Qt6TestConfigVersion.cmake", + "/usr/lib64/cmake/Qt6Test/Qt6TestConfigVersionImpl.cmake", + "/usr/lib64/cmake/Qt6Test/Qt6TestConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6Test/Qt6TestDependencies.cmake", + "/usr/lib64/cmake/Qt6Test/Qt6TestTargets.cmake", + "/usr/lib64/cmake/Qt6Test/Qt6TestTargets-relwithdebinfo.cmake", + "/usr/lib64/cmake/Qt6Test/Qt6TestAdditionalTargetInfo.cmake", + "/usr/lib64/cmake/Qt6Test/QtTestProperties.cmake", + "/usr/lib64/cmake/Qt6Test/Qt6TestVersionlessAliasTargets.cmake" + ], + "CMAKE_SOURCE_DIR" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6", + "CROSS_CONFIG" : false, + "DEP_FILE" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_grid_scrub_autogen/deps", + "DEP_FILE_RULE_NAME" : "test_grid_scrub_autogen/timestamp", + "HEADERS" : [], + "HEADER_EXTENSIONS" : [ "h", "hh", "h++", "hm", "hpp", "hxx", "in", "txx" ], + "INCLUDE_DIR" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_grid_scrub_autogen/include", + "MOC_COMPILATION_FILE" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_grid_scrub_autogen/mocs_compilation.cpp", + "MOC_DEFINITIONS" : + [ + "FTK_API_GL_4_1", + "QT_CORE_LIB", + "QT_GUI_LIB", + "QT_NO_DEBUG", + "QT_TESTCASE_BUILDDIR=\"/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests\"", + "QT_TESTCASE_SOURCEDIR=\"/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests\"", + "QT_TESTLIB_LIB", + "QT_WIDGETS_LIB", + "TLRENDER_EXR", + "TLRENDER_FFMPEG", + "TLRENDER_FFMPEG_PLUGIN", + "TLRENDER_JPEG", + "TLRENDER_OCIO", + "TLRENDER_OIIO", + "TLRENDER_PNG", + "TLRENDER_SDL2", + "TLRENDER_TIFF" + ], + "MOC_DEPEND_FILTERS" : + [ + [ + "Q_PLUGIN_METADATA", + "[\n][ \t]*Q_PLUGIN_METADATA[ \t]*\\([^\\)]*FILE[ \t]*\"([^\"]+)\"" + ] + ], + "MOC_INCLUDES" : + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src", + "/usr/include/qt6/QtTest", + "/usr/include/qt6", + "/usr/include/qt6/QtCore", + "/usr/lib64/qt6/mkspecs/linux-g++", + "/usr/include/qt6/QtWidgets", + "/usr/include/qt6/QtGui", + "/usr/include", + "/usr/include/c++/15", + "/usr/include/c++/15/x86_64-redhat-linux", + "/usr/include/c++/15/backward", + "/usr/lib/gcc/x86_64-redhat-linux/15/include", + "/usr/local/include" + ], + "MOC_MACRO_NAMES" : + [ + "Q_OBJECT", + "Q_GADGET", + "Q_NAMESPACE", + "Q_NAMESPACE_EXPORT", + "Q_GADGET_EXPORT", + "Q_ENUM_NS" + ], + "MOC_OPTIONS" : [], + "MOC_PATH_PREFIX" : false, + "MOC_PREDEFS_CMD" : + [ + "/usr/bin/c++", + "-std=gnu++20", + "-w", + "-dM", + "-E", + "/usr/share/cmake/Modules/CMakeCXXCompilerABI.cpp" + ], + "MOC_PREDEFS_FILE" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_grid_scrub_autogen/moc_predefs.h", + "MOC_RELAXED_MODE" : false, + "MOC_SKIP" : + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_db_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_drag_utils_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_everything_search_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_icon_utils_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_importer_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_live_preview_manager_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_media_converter_worker_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_models_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_sequence_detector_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_simple_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_utils_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_virtual_drag_autogen/mocs_compilation.cpp" + ], + "MULTI_CONFIG" : false, + "PARALLEL" : 16, + "PARSE_CACHE_FILE" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/CMakeFiles/test_grid_scrub_autogen.dir/ParseCache.txt", + "QT_MOC_EXECUTABLE" : "/usr/lib64/qt6/libexec/moc", + "QT_UIC_EXECUTABLE" : "/usr/lib64/qt6/libexec/uic", + "QT_VERSION_MAJOR" : 6, + "QT_VERSION_MINOR" : 10, + "SETTINGS_FILE" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/CMakeFiles/test_grid_scrub_autogen.dir/AutogenUsed.txt", + "SOURCES" : + [ + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/test_grid_scrub.cpp", + "MU", + null + ] + ], + "UIC_OPTIONS" : [], + "UIC_SEARCH_PATHS" : [], + "UIC_SKIP" : + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_db_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_drag_utils_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_everything_search_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_icon_utils_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_importer_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_live_preview_manager_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_media_converter_worker_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_models_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_sequence_detector_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_simple_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_utils_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_virtual_drag_autogen/mocs_compilation.cpp" + ], + "UIC_UI_FILES" : [], + "USE_BETTER_GRAPH" : true, + "VERBOSITY" : 0 +} diff --git a/build-linux/tests/CMakeFiles/test_grid_scrub_autogen.dir/AutogenUsed.txt b/build-linux/tests/CMakeFiles/test_grid_scrub_autogen.dir/AutogenUsed.txt new file mode 100644 index 00000000..0042a7d4 --- /dev/null +++ b/build-linux/tests/CMakeFiles/test_grid_scrub_autogen.dir/AutogenUsed.txt @@ -0,0 +1,2 @@ +moc:59a2360d48ecc4c82f80815c61cd09c3b26ac297790fa7a751a7a123d4597397 +uic:0df7b06f04b60705a14ff966fc10725af0fb193398324deeaf17e44a5f9db1e0 diff --git a/build-linux/tests/CMakeFiles/test_grid_scrub_autogen.dir/ParseCache.txt b/build-linux/tests/CMakeFiles/test_grid_scrub_autogen.dir/ParseCache.txt new file mode 100644 index 00000000..d9732dc9 --- /dev/null +++ b/build-linux/tests/CMakeFiles/test_grid_scrub_autogen.dir/ParseCache.txt @@ -0,0 +1,871 @@ +# Generated by CMake. Changes will be overwritten. +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/test_grid_scrub.cpp + mmc:Q_OBJECT + mid:test_grid_scrub.moc + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_grid_scrub_autogen/moc_predefs.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/grid_scrub.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/platform_session.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/test_grid_scrub.cpp + mdp:/usr/include/alloca.h + mdp:/usr/include/asm-generic/bitsperlong.h + mdp:/usr/include/asm-generic/errno-base.h + mdp:/usr/include/asm-generic/errno.h + mdp:/usr/include/asm-generic/int-ll64.h + mdp:/usr/include/asm-generic/posix_types.h + mdp:/usr/include/asm-generic/types.h + mdp:/usr/include/asm/bitsperlong.h + mdp:/usr/include/asm/errno.h + mdp:/usr/include/asm/posix_types.h + mdp:/usr/include/asm/posix_types_64.h + mdp:/usr/include/asm/types.h + mdp:/usr/include/asm/unistd.h + mdp:/usr/include/asm/unistd_64.h + mdp:/usr/include/assert.h + mdp:/usr/include/bits/atomic_wide_counter.h + mdp:/usr/include/bits/byteswap.h + mdp:/usr/include/bits/confname.h + mdp:/usr/include/bits/cpu-set.h + mdp:/usr/include/bits/endian.h + mdp:/usr/include/bits/endianness.h + mdp:/usr/include/bits/environments.h + mdp:/usr/include/bits/errno.h + mdp:/usr/include/bits/floatn-common.h + mdp:/usr/include/bits/floatn.h + mdp:/usr/include/bits/getopt_core.h + mdp:/usr/include/bits/getopt_posix.h + mdp:/usr/include/bits/libc-header-start.h + mdp:/usr/include/bits/local_lim.h + mdp:/usr/include/bits/locale.h + mdp:/usr/include/bits/long-double.h + mdp:/usr/include/bits/posix1_lim.h + mdp:/usr/include/bits/posix2_lim.h + mdp:/usr/include/bits/posix_opt.h + mdp:/usr/include/bits/pthread_stack_min-dynamic.h + mdp:/usr/include/bits/pthreadtypes-arch.h + mdp:/usr/include/bits/pthreadtypes.h + mdp:/usr/include/bits/sched.h + mdp:/usr/include/bits/select.h + mdp:/usr/include/bits/semaphore.h + mdp:/usr/include/bits/setjmp.h + mdp:/usr/include/bits/stdint-intn.h + mdp:/usr/include/bits/stdint-least.h + mdp:/usr/include/bits/stdint-uintn.h + mdp:/usr/include/bits/stdio_lim.h + mdp:/usr/include/bits/stdlib-float.h + mdp:/usr/include/bits/struct_mutex.h + mdp:/usr/include/bits/struct_rwlock.h + mdp:/usr/include/bits/syscall.h + mdp:/usr/include/bits/thread-shared-types.h + mdp:/usr/include/bits/time.h + mdp:/usr/include/bits/time64.h + mdp:/usr/include/bits/timesize.h + mdp:/usr/include/bits/timex.h + mdp:/usr/include/bits/types.h + mdp:/usr/include/bits/types/FILE.h + mdp:/usr/include/bits/types/__FILE.h + mdp:/usr/include/bits/types/__fpos64_t.h + mdp:/usr/include/bits/types/__fpos_t.h + mdp:/usr/include/bits/types/__locale_t.h + mdp:/usr/include/bits/types/__mbstate_t.h + mdp:/usr/include/bits/types/__sigset_t.h + mdp:/usr/include/bits/types/clock_t.h + mdp:/usr/include/bits/types/clockid_t.h + mdp:/usr/include/bits/types/cookie_io_functions_t.h + mdp:/usr/include/bits/types/error_t.h + mdp:/usr/include/bits/types/locale_t.h + mdp:/usr/include/bits/types/mbstate_t.h + mdp:/usr/include/bits/types/sigset_t.h + mdp:/usr/include/bits/types/struct_FILE.h + mdp:/usr/include/bits/types/struct___jmp_buf_tag.h + mdp:/usr/include/bits/types/struct_itimerspec.h + mdp:/usr/include/bits/types/struct_sched_param.h + mdp:/usr/include/bits/types/struct_timespec.h + mdp:/usr/include/bits/types/struct_timeval.h + mdp:/usr/include/bits/types/struct_tm.h + mdp:/usr/include/bits/types/time_t.h + mdp:/usr/include/bits/types/timer_t.h + mdp:/usr/include/bits/types/wint_t.h + mdp:/usr/include/bits/typesizes.h + mdp:/usr/include/bits/uintn-identity.h + mdp:/usr/include/bits/uio_lim.h + mdp:/usr/include/bits/unistd_ext.h + mdp:/usr/include/bits/waitflags.h + mdp:/usr/include/bits/waitstatus.h + mdp:/usr/include/bits/wchar.h + mdp:/usr/include/bits/wctype-wchar.h + mdp:/usr/include/bits/wordsize.h + mdp:/usr/include/bits/xopen_lim.h + mdp:/usr/include/c++/15/algorithm + mdp:/usr/include/c++/15/array + mdp:/usr/include/c++/15/atomic + mdp:/usr/include/c++/15/backward/auto_ptr.h + mdp:/usr/include/c++/15/backward/binders.h + mdp:/usr/include/c++/15/bit + mdp:/usr/include/c++/15/bits/algorithmfwd.h + mdp:/usr/include/c++/15/bits/align.h + mdp:/usr/include/c++/15/bits/alloc_traits.h + mdp:/usr/include/c++/15/bits/allocated_ptr.h + mdp:/usr/include/c++/15/bits/allocator.h + mdp:/usr/include/c++/15/bits/atomic_base.h + mdp:/usr/include/c++/15/bits/atomic_futex.h + mdp:/usr/include/c++/15/bits/atomic_lockfree_defines.h + mdp:/usr/include/c++/15/bits/atomic_timed_wait.h + mdp:/usr/include/c++/15/bits/atomic_wait.h + mdp:/usr/include/c++/15/bits/basic_ios.h + mdp:/usr/include/c++/15/bits/basic_ios.tcc + mdp:/usr/include/c++/15/bits/basic_string.h + mdp:/usr/include/c++/15/bits/basic_string.tcc + mdp:/usr/include/c++/15/bits/char_traits.h + mdp:/usr/include/c++/15/bits/charconv.h + mdp:/usr/include/c++/15/bits/chrono.h + mdp:/usr/include/c++/15/bits/chrono_io.h + mdp:/usr/include/c++/15/bits/codecvt.h + mdp:/usr/include/c++/15/bits/concept_check.h + mdp:/usr/include/c++/15/bits/cpp_type_traits.h + mdp:/usr/include/c++/15/bits/cxxabi_forced.h + mdp:/usr/include/c++/15/bits/cxxabi_init_exception.h + mdp:/usr/include/c++/15/bits/enable_special_members.h + mdp:/usr/include/c++/15/bits/erase_if.h + mdp:/usr/include/c++/15/bits/exception.h + mdp:/usr/include/c++/15/bits/exception_defines.h + mdp:/usr/include/c++/15/bits/exception_ptr.h + mdp:/usr/include/c++/15/bits/functexcept.h + mdp:/usr/include/c++/15/bits/functional_hash.h + mdp:/usr/include/c++/15/bits/hash_bytes.h + mdp:/usr/include/c++/15/bits/hashtable.h + mdp:/usr/include/c++/15/bits/hashtable_policy.h + mdp:/usr/include/c++/15/bits/invoke.h + mdp:/usr/include/c++/15/bits/ios_base.h + mdp:/usr/include/c++/15/bits/istream.tcc + mdp:/usr/include/c++/15/bits/iterator_concepts.h + mdp:/usr/include/c++/15/bits/list.tcc + mdp:/usr/include/c++/15/bits/locale_classes.h + mdp:/usr/include/c++/15/bits/locale_classes.tcc + mdp:/usr/include/c++/15/bits/locale_conv.h + mdp:/usr/include/c++/15/bits/locale_facets.h + mdp:/usr/include/c++/15/bits/locale_facets.tcc + mdp:/usr/include/c++/15/bits/locale_facets_nonio.h + mdp:/usr/include/c++/15/bits/locale_facets_nonio.tcc + mdp:/usr/include/c++/15/bits/localefwd.h + mdp:/usr/include/c++/15/bits/max_size_type.h + mdp:/usr/include/c++/15/bits/memory_resource.h + mdp:/usr/include/c++/15/bits/memoryfwd.h + mdp:/usr/include/c++/15/bits/move.h + mdp:/usr/include/c++/15/bits/nested_exception.h + mdp:/usr/include/c++/15/bits/new_allocator.h + mdp:/usr/include/c++/15/bits/node_handle.h + mdp:/usr/include/c++/15/bits/ostream.h + mdp:/usr/include/c++/15/bits/ostream.tcc + mdp:/usr/include/c++/15/bits/ostream_insert.h + mdp:/usr/include/c++/15/bits/parse_numbers.h + mdp:/usr/include/c++/15/bits/postypes.h + mdp:/usr/include/c++/15/bits/predefined_ops.h + mdp:/usr/include/c++/15/bits/ptr_traits.h + mdp:/usr/include/c++/15/bits/quoted_string.h + mdp:/usr/include/c++/15/bits/random.h + mdp:/usr/include/c++/15/bits/random.tcc + mdp:/usr/include/c++/15/bits/range_access.h + mdp:/usr/include/c++/15/bits/ranges_algo.h + mdp:/usr/include/c++/15/bits/ranges_algobase.h + mdp:/usr/include/c++/15/bits/ranges_base.h + mdp:/usr/include/c++/15/bits/ranges_cmp.h + mdp:/usr/include/c++/15/bits/ranges_uninitialized.h + mdp:/usr/include/c++/15/bits/ranges_util.h + mdp:/usr/include/c++/15/bits/refwrap.h + mdp:/usr/include/c++/15/bits/requires_hosted.h + mdp:/usr/include/c++/15/bits/semaphore_base.h + mdp:/usr/include/c++/15/bits/shared_ptr.h + mdp:/usr/include/c++/15/bits/shared_ptr_atomic.h + mdp:/usr/include/c++/15/bits/shared_ptr_base.h + mdp:/usr/include/c++/15/bits/specfun.h + mdp:/usr/include/c++/15/bits/sstream.tcc + mdp:/usr/include/c++/15/bits/std_abs.h + mdp:/usr/include/c++/15/bits/std_function.h + mdp:/usr/include/c++/15/bits/std_mutex.h + mdp:/usr/include/c++/15/bits/std_thread.h + mdp:/usr/include/c++/15/bits/stl_algo.h + mdp:/usr/include/c++/15/bits/stl_algobase.h + mdp:/usr/include/c++/15/bits/stl_bvector.h + mdp:/usr/include/c++/15/bits/stl_construct.h + mdp:/usr/include/c++/15/bits/stl_function.h + mdp:/usr/include/c++/15/bits/stl_heap.h + mdp:/usr/include/c++/15/bits/stl_iterator.h + mdp:/usr/include/c++/15/bits/stl_iterator_base_funcs.h + mdp:/usr/include/c++/15/bits/stl_iterator_base_types.h + mdp:/usr/include/c++/15/bits/stl_list.h + mdp:/usr/include/c++/15/bits/stl_map.h + mdp:/usr/include/c++/15/bits/stl_multimap.h + mdp:/usr/include/c++/15/bits/stl_multiset.h + mdp:/usr/include/c++/15/bits/stl_numeric.h + mdp:/usr/include/c++/15/bits/stl_pair.h + mdp:/usr/include/c++/15/bits/stl_raw_storage_iter.h + mdp:/usr/include/c++/15/bits/stl_relops.h + mdp:/usr/include/c++/15/bits/stl_set.h + mdp:/usr/include/c++/15/bits/stl_tempbuf.h + mdp:/usr/include/c++/15/bits/stl_tree.h + mdp:/usr/include/c++/15/bits/stl_uninitialized.h + mdp:/usr/include/c++/15/bits/stl_vector.h + mdp:/usr/include/c++/15/bits/stream_iterator.h + mdp:/usr/include/c++/15/bits/streambuf.tcc + mdp:/usr/include/c++/15/bits/streambuf_iterator.h + mdp:/usr/include/c++/15/bits/string_view.tcc + mdp:/usr/include/c++/15/bits/stringfwd.h + mdp:/usr/include/c++/15/bits/this_thread_sleep.h + mdp:/usr/include/c++/15/bits/uniform_int_dist.h + mdp:/usr/include/c++/15/bits/unique_lock.h + mdp:/usr/include/c++/15/bits/unique_ptr.h + mdp:/usr/include/c++/15/bits/unordered_map.h + mdp:/usr/include/c++/15/bits/unordered_set.h + mdp:/usr/include/c++/15/bits/uses_allocator.h + mdp:/usr/include/c++/15/bits/uses_allocator_args.h + mdp:/usr/include/c++/15/bits/utility.h + mdp:/usr/include/c++/15/bits/vector.tcc + mdp:/usr/include/c++/15/bits/version.h + mdp:/usr/include/c++/15/cassert + mdp:/usr/include/c++/15/cctype + mdp:/usr/include/c++/15/cerrno + mdp:/usr/include/c++/15/charconv + mdp:/usr/include/c++/15/chrono + mdp:/usr/include/c++/15/climits + mdp:/usr/include/c++/15/clocale + mdp:/usr/include/c++/15/cmath + mdp:/usr/include/c++/15/compare + mdp:/usr/include/c++/15/concepts + mdp:/usr/include/c++/15/condition_variable + mdp:/usr/include/c++/15/cstddef + mdp:/usr/include/c++/15/cstdint + mdp:/usr/include/c++/15/cstdio + mdp:/usr/include/c++/15/cstdlib + mdp:/usr/include/c++/15/cstring + mdp:/usr/include/c++/15/ctime + mdp:/usr/include/c++/15/cwchar + mdp:/usr/include/c++/15/cwctype + mdp:/usr/include/c++/15/debug/assertions.h + mdp:/usr/include/c++/15/debug/debug.h + mdp:/usr/include/c++/15/exception + mdp:/usr/include/c++/15/experimental/source_location + mdp:/usr/include/c++/15/ext/aligned_buffer.h + mdp:/usr/include/c++/15/ext/alloc_traits.h + mdp:/usr/include/c++/15/ext/atomicity.h + mdp:/usr/include/c++/15/ext/concurrence.h + mdp:/usr/include/c++/15/ext/numeric_traits.h + mdp:/usr/include/c++/15/ext/string_conversions.h + mdp:/usr/include/c++/15/ext/type_traits.h + mdp:/usr/include/c++/15/filesystem + mdp:/usr/include/c++/15/format + mdp:/usr/include/c++/15/functional + mdp:/usr/include/c++/15/future + mdp:/usr/include/c++/15/initializer_list + mdp:/usr/include/c++/15/iomanip + mdp:/usr/include/c++/15/ios + mdp:/usr/include/c++/15/iosfwd + mdp:/usr/include/c++/15/istream + mdp:/usr/include/c++/15/iterator + mdp:/usr/include/c++/15/limits + mdp:/usr/include/c++/15/list + mdp:/usr/include/c++/15/locale + mdp:/usr/include/c++/15/map + mdp:/usr/include/c++/15/memory + mdp:/usr/include/c++/15/memory_resource + mdp:/usr/include/c++/15/mutex + mdp:/usr/include/c++/15/new + mdp:/usr/include/c++/15/numeric + mdp:/usr/include/c++/15/optional + mdp:/usr/include/c++/15/ostream + mdp:/usr/include/c++/15/pstl/execution_defs.h + mdp:/usr/include/c++/15/pstl/glue_numeric_defs.h + mdp:/usr/include/c++/15/pstl/pstl_config.h + mdp:/usr/include/c++/15/random + mdp:/usr/include/c++/15/ratio + mdp:/usr/include/c++/15/semaphore + mdp:/usr/include/c++/15/set + mdp:/usr/include/c++/15/shared_mutex + mdp:/usr/include/c++/15/source_location + mdp:/usr/include/c++/15/sstream + mdp:/usr/include/c++/15/stdexcept + mdp:/usr/include/c++/15/stop_token + mdp:/usr/include/c++/15/streambuf + mdp:/usr/include/c++/15/string + mdp:/usr/include/c++/15/string_view + mdp:/usr/include/c++/15/system_error + mdp:/usr/include/c++/15/tr1/bessel_function.tcc + mdp:/usr/include/c++/15/tr1/beta_function.tcc + mdp:/usr/include/c++/15/tr1/ell_integral.tcc + mdp:/usr/include/c++/15/tr1/exp_integral.tcc + mdp:/usr/include/c++/15/tr1/gamma.tcc + mdp:/usr/include/c++/15/tr1/hypergeometric.tcc + mdp:/usr/include/c++/15/tr1/legendre_function.tcc + mdp:/usr/include/c++/15/tr1/modified_bessel_func.tcc + mdp:/usr/include/c++/15/tr1/poly_hermite.tcc + mdp:/usr/include/c++/15/tr1/poly_laguerre.tcc + mdp:/usr/include/c++/15/tr1/riemann_zeta.tcc + mdp:/usr/include/c++/15/tr1/special_function_util.h + mdp:/usr/include/c++/15/tuple + mdp:/usr/include/c++/15/type_traits + mdp:/usr/include/c++/15/typeinfo + mdp:/usr/include/c++/15/unordered_map + mdp:/usr/include/c++/15/unordered_set + mdp:/usr/include/c++/15/utility + mdp:/usr/include/c++/15/variant + mdp:/usr/include/c++/15/vector + mdp:/usr/include/c++/15/version + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/atomic_word.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++allocator.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++config.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++locale.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/cpu_defines.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/ctype_base.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/ctype_inline.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/error_constants.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/gthr-default.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/gthr.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/messages_members.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/opt_random.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/os_defines.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/time_members.h + mdp:/usr/include/ctype.h + mdp:/usr/include/endian.h + mdp:/usr/include/errno.h + mdp:/usr/include/features-time64.h + mdp:/usr/include/features.h + mdp:/usr/include/gnu/stubs-64.h + mdp:/usr/include/gnu/stubs.h + mdp:/usr/include/libintl.h + mdp:/usr/include/limits.h + mdp:/usr/include/linux/close_range.h + mdp:/usr/include/linux/errno.h + mdp:/usr/include/linux/limits.h + mdp:/usr/include/linux/posix_types.h + mdp:/usr/include/linux/sched/types.h + mdp:/usr/include/linux/stddef.h + mdp:/usr/include/linux/types.h + mdp:/usr/include/locale.h + mdp:/usr/include/pthread.h + mdp:/usr/include/qt6/QtCore/QAbstractItemModel + mdp:/usr/include/qt6/QtCore/QDeadlineTimer + mdp:/usr/include/qt6/QtCore/QEvent + mdp:/usr/include/qt6/QtCore/QHash + mdp:/usr/include/qt6/QtCore/QList + mdp:/usr/include/qt6/QtCore/QMap + mdp:/usr/include/qt6/QtCore/QMargins + mdp:/usr/include/qt6/QtCore/QMetaEnum + mdp:/usr/include/qt6/QtCore/QModelIndex + mdp:/usr/include/qt6/QtCore/QMutex + mdp:/usr/include/qt6/QtCore/QObject + mdp:/usr/include/qt6/QtCore/QRect + mdp:/usr/include/qt6/QtCore/QSize + mdp:/usr/include/qt6/QtCore/QSizeF + mdp:/usr/include/qt6/QtCore/QString + mdp:/usr/include/qt6/QtCore/QStringList + mdp:/usr/include/qt6/QtCore/QVariant + mdp:/usr/include/qt6/QtCore/QtCore + mdp:/usr/include/qt6/QtCore/QtCoreDepends + mdp:/usr/include/qt6/QtCore/q17memory.h + mdp:/usr/include/qt6/QtCore/q20algorithm.h + mdp:/usr/include/qt6/QtCore/q20chrono.h + mdp:/usr/include/qt6/QtCore/q20functional.h + mdp:/usr/include/qt6/QtCore/q20iterator.h + mdp:/usr/include/qt6/QtCore/q20map.h + mdp:/usr/include/qt6/QtCore/q20memory.h + mdp:/usr/include/qt6/QtCore/q20type_traits.h + mdp:/usr/include/qt6/QtCore/q20utility.h + mdp:/usr/include/qt6/QtCore/q20vector.h + mdp:/usr/include/qt6/QtCore/q23functional.h + mdp:/usr/include/qt6/QtCore/q23type_traits.h + mdp:/usr/include/qt6/QtCore/q23utility.h + mdp:/usr/include/qt6/QtCore/q26numeric.h + mdp:/usr/include/qt6/QtCore/qabstractanimation.h + mdp:/usr/include/qt6/QtCore/qabstracteventdispatcher.h + mdp:/usr/include/qt6/QtCore/qabstractitemmodel.h + mdp:/usr/include/qt6/QtCore/qabstractnativeeventfilter.h + mdp:/usr/include/qt6/QtCore/qabstractproxymodel.h + mdp:/usr/include/qt6/QtCore/qalgorithms.h + mdp:/usr/include/qt6/QtCore/qalloc.h + mdp:/usr/include/qt6/QtCore/qanimationgroup.h + mdp:/usr/include/qt6/QtCore/qanystringview.h + mdp:/usr/include/qt6/QtCore/qapplicationstatic.h + mdp:/usr/include/qt6/QtCore/qarraydata.h + mdp:/usr/include/qt6/QtCore/qarraydataops.h + mdp:/usr/include/qt6/QtCore/qarraydatapointer.h + mdp:/usr/include/qt6/QtCore/qassert.h + mdp:/usr/include/qt6/QtCore/qassociativeiterable.h + mdp:/usr/include/qt6/QtCore/qatomic.h + mdp:/usr/include/qt6/QtCore/qatomic_cxx11.h + mdp:/usr/include/qt6/QtCore/qatomicscopedvaluerollback.h + mdp:/usr/include/qt6/QtCore/qbasicatomic.h + mdp:/usr/include/qt6/QtCore/qbasictimer.h + mdp:/usr/include/qt6/QtCore/qbindingstorage.h + mdp:/usr/include/qt6/QtCore/qbitarray.h + mdp:/usr/include/qt6/QtCore/qbuffer.h + mdp:/usr/include/qt6/QtCore/qbytearray.h + mdp:/usr/include/qt6/QtCore/qbytearrayalgorithms.h + mdp:/usr/include/qt6/QtCore/qbytearraylist.h + mdp:/usr/include/qt6/QtCore/qbytearraymatcher.h + mdp:/usr/include/qt6/QtCore/qbytearrayview.h + mdp:/usr/include/qt6/QtCore/qcache.h + mdp:/usr/include/qt6/QtCore/qcalendar.h + mdp:/usr/include/qt6/QtCore/qcborarray.h + mdp:/usr/include/qt6/QtCore/qcborcommon.h + mdp:/usr/include/qt6/QtCore/qcbormap.h + mdp:/usr/include/qt6/QtCore/qcborstream.h + mdp:/usr/include/qt6/QtCore/qcborstreamreader.h + mdp:/usr/include/qt6/QtCore/qcborstreamwriter.h + mdp:/usr/include/qt6/QtCore/qcborvalue.h + mdp:/usr/include/qt6/QtCore/qchar.h + mdp:/usr/include/qt6/QtCore/qcheckedint_impl.h + mdp:/usr/include/qt6/QtCore/qchronotimer.h + mdp:/usr/include/qt6/QtCore/qcollator.h + mdp:/usr/include/qt6/QtCore/qcommandlineoption.h + mdp:/usr/include/qt6/QtCore/qcommandlineparser.h + mdp:/usr/include/qt6/QtCore/qcompare.h + mdp:/usr/include/qt6/QtCore/qcompare_impl.h + mdp:/usr/include/qt6/QtCore/qcomparehelpers.h + mdp:/usr/include/qt6/QtCore/qcompilerdetection.h + mdp:/usr/include/qt6/QtCore/qconcatenatetablesproxymodel.h + mdp:/usr/include/qt6/QtCore/qconfig-64.h + mdp:/usr/include/qt6/QtCore/qconfig.h + mdp:/usr/include/qt6/QtCore/qconstructormacros.h + mdp:/usr/include/qt6/QtCore/qcontainerfwd.h + mdp:/usr/include/qt6/QtCore/qcontainerinfo.h + mdp:/usr/include/qt6/QtCore/qcontainertools_impl.h + mdp:/usr/include/qt6/QtCore/qcontiguouscache.h + mdp:/usr/include/qt6/QtCore/qcoreapplication.h + mdp:/usr/include/qt6/QtCore/qcoreapplication_platform.h + mdp:/usr/include/qt6/QtCore/qcoreevent.h + mdp:/usr/include/qt6/QtCore/qcryptographichash.h + mdp:/usr/include/qt6/QtCore/qdarwinhelpers.h + mdp:/usr/include/qt6/QtCore/qdatastream.h + mdp:/usr/include/qt6/QtCore/qdatetime.h + mdp:/usr/include/qt6/QtCore/qdeadlinetimer.h + mdp:/usr/include/qt6/QtCore/qdebug.h + mdp:/usr/include/qt6/QtCore/qdir.h + mdp:/usr/include/qt6/QtCore/qdiriterator.h + mdp:/usr/include/qt6/QtCore/qdirlisting.h + mdp:/usr/include/qt6/QtCore/qeasingcurve.h + mdp:/usr/include/qt6/QtCore/qelapsedtimer.h + mdp:/usr/include/qt6/QtCore/qendian.h + mdp:/usr/include/qt6/QtCore/qeventloop.h + mdp:/usr/include/qt6/QtCore/qexception.h + mdp:/usr/include/qt6/QtCore/qexceptionhandling.h + mdp:/usr/include/qt6/QtCore/qfactoryinterface.h + mdp:/usr/include/qt6/QtCore/qfile.h + mdp:/usr/include/qt6/QtCore/qfiledevice.h + mdp:/usr/include/qt6/QtCore/qfileinfo.h + mdp:/usr/include/qt6/QtCore/qfileselector.h + mdp:/usr/include/qt6/QtCore/qfilesystemwatcher.h + mdp:/usr/include/qt6/QtCore/qflags.h + mdp:/usr/include/qt6/QtCore/qfloat16.h + mdp:/usr/include/qt6/QtCore/qforeach.h + mdp:/usr/include/qt6/QtCore/qfunctionaltools_impl.h + mdp:/usr/include/qt6/QtCore/qfunctionpointer.h + mdp:/usr/include/qt6/QtCore/qfuture.h + mdp:/usr/include/qt6/QtCore/qfuture_impl.h + mdp:/usr/include/qt6/QtCore/qfutureinterface.h + mdp:/usr/include/qt6/QtCore/qfuturesynchronizer.h + mdp:/usr/include/qt6/QtCore/qfuturewatcher.h + mdp:/usr/include/qt6/QtCore/qgenericatomic.h + mdp:/usr/include/qt6/QtCore/qglobal.h + mdp:/usr/include/qt6/QtCore/qglobalstatic.h + mdp:/usr/include/qt6/QtCore/qhash.h + mdp:/usr/include/qt6/QtCore/qhashfunctions.h + mdp:/usr/include/qt6/QtCore/qidentityproxymodel.h + mdp:/usr/include/qt6/QtCore/qiodevice.h + mdp:/usr/include/qt6/QtCore/qiodevicebase.h + mdp:/usr/include/qt6/QtCore/qitemselectionmodel.h + mdp:/usr/include/qt6/QtCore/qiterable.h + mdp:/usr/include/qt6/QtCore/qiterator.h + mdp:/usr/include/qt6/QtCore/qjsonarray.h + mdp:/usr/include/qt6/QtCore/qjsondocument.h + mdp:/usr/include/qt6/QtCore/qjsonobject.h + mdp:/usr/include/qt6/QtCore/qjsonparseerror.h + mdp:/usr/include/qt6/QtCore/qjsonvalue.h + mdp:/usr/include/qt6/QtCore/qlatin1stringmatcher.h + mdp:/usr/include/qt6/QtCore/qlatin1stringview.h + mdp:/usr/include/qt6/QtCore/qlibrary.h + mdp:/usr/include/qt6/QtCore/qlibraryinfo.h + mdp:/usr/include/qt6/QtCore/qline.h + mdp:/usr/include/qt6/QtCore/qlist.h + mdp:/usr/include/qt6/QtCore/qlocale.h + mdp:/usr/include/qt6/QtCore/qlockfile.h + mdp:/usr/include/qt6/QtCore/qlogging.h + mdp:/usr/include/qt6/QtCore/qloggingcategory.h + mdp:/usr/include/qt6/QtCore/qmalloc.h + mdp:/usr/include/qt6/QtCore/qmap.h + mdp:/usr/include/qt6/QtCore/qmargins.h + mdp:/usr/include/qt6/QtCore/qmath.h + mdp:/usr/include/qt6/QtCore/qmessageauthenticationcode.h + mdp:/usr/include/qt6/QtCore/qmetacontainer.h + mdp:/usr/include/qt6/QtCore/qmetaobject.h + mdp:/usr/include/qt6/QtCore/qmetatype.h + mdp:/usr/include/qt6/QtCore/qmimedata.h + mdp:/usr/include/qt6/QtCore/qmimedatabase.h + mdp:/usr/include/qt6/QtCore/qmimetype.h + mdp:/usr/include/qt6/QtCore/qminmax.h + mdp:/usr/include/qt6/QtCore/qmutex.h + mdp:/usr/include/qt6/QtCore/qnamespace.h + mdp:/usr/include/qt6/QtCore/qnativeinterface.h + mdp:/usr/include/qt6/QtCore/qnumeric.h + mdp:/usr/include/qt6/QtCore/qobject.h + mdp:/usr/include/qt6/QtCore/qobject_impl.h + mdp:/usr/include/qt6/QtCore/qobjectcleanuphandler.h + mdp:/usr/include/qt6/QtCore/qobjectdefs.h + mdp:/usr/include/qt6/QtCore/qobjectdefs_impl.h + mdp:/usr/include/qt6/QtCore/qoperatingsystemversion.h + mdp:/usr/include/qt6/QtCore/qoverload.h + mdp:/usr/include/qt6/QtCore/qpair.h + mdp:/usr/include/qt6/QtCore/qparallelanimationgroup.h + mdp:/usr/include/qt6/QtCore/qpauseanimation.h + mdp:/usr/include/qt6/QtCore/qpermissions.h + mdp:/usr/include/qt6/QtCore/qplugin.h + mdp:/usr/include/qt6/QtCore/qpluginloader.h + mdp:/usr/include/qt6/QtCore/qpoint.h + mdp:/usr/include/qt6/QtCore/qpointer.h + mdp:/usr/include/qt6/QtCore/qprocess.h + mdp:/usr/include/qt6/QtCore/qprocessordetection.h + mdp:/usr/include/qt6/QtCore/qpromise.h + mdp:/usr/include/qt6/QtCore/qproperty.h + mdp:/usr/include/qt6/QtCore/qpropertyanimation.h + mdp:/usr/include/qt6/QtCore/qpropertyprivate.h + mdp:/usr/include/qt6/QtCore/qqueue.h + mdp:/usr/include/qt6/QtCore/qrandom.h + mdp:/usr/include/qt6/QtCore/qrangemodel.h + mdp:/usr/include/qt6/QtCore/qrangemodel_impl.h + mdp:/usr/include/qt6/QtCore/qreadwritelock.h + mdp:/usr/include/qt6/QtCore/qrect.h + mdp:/usr/include/qt6/QtCore/qrefcount.h + mdp:/usr/include/qt6/QtCore/qregularexpression.h + mdp:/usr/include/qt6/QtCore/qresource.h + mdp:/usr/include/qt6/QtCore/qresultstore.h + mdp:/usr/include/qt6/QtCore/qrunnable.h + mdp:/usr/include/qt6/QtCore/qsavefile.h + mdp:/usr/include/qt6/QtCore/qscopedpointer.h + mdp:/usr/include/qt6/QtCore/qscopedvaluerollback.h + mdp:/usr/include/qt6/QtCore/qscopeguard.h + mdp:/usr/include/qt6/QtCore/qsemaphore.h + mdp:/usr/include/qt6/QtCore/qsequentialanimationgroup.h + mdp:/usr/include/qt6/QtCore/qsequentialiterable.h + mdp:/usr/include/qt6/QtCore/qset.h + mdp:/usr/include/qt6/QtCore/qsettings.h + mdp:/usr/include/qt6/QtCore/qshareddata.h + mdp:/usr/include/qt6/QtCore/qshareddata_impl.h + mdp:/usr/include/qt6/QtCore/qsharedmemory.h + mdp:/usr/include/qt6/QtCore/qsharedpointer.h + mdp:/usr/include/qt6/QtCore/qsharedpointer_impl.h + mdp:/usr/include/qt6/QtCore/qsignalmapper.h + mdp:/usr/include/qt6/QtCore/qsimd.h + mdp:/usr/include/qt6/QtCore/qsize.h + mdp:/usr/include/qt6/QtCore/qsocketnotifier.h + mdp:/usr/include/qt6/QtCore/qsortfilterproxymodel.h + mdp:/usr/include/qt6/QtCore/qspan.h + mdp:/usr/include/qt6/QtCore/qstack.h + mdp:/usr/include/qt6/QtCore/qstandardpaths.h + mdp:/usr/include/qt6/QtCore/qstaticlatin1stringmatcher.h + mdp:/usr/include/qt6/QtCore/qstdlibdetection.h + mdp:/usr/include/qt6/QtCore/qstorageinfo.h + mdp:/usr/include/qt6/QtCore/qstring.h + mdp:/usr/include/qt6/QtCore/qstringalgorithms.h + mdp:/usr/include/qt6/QtCore/qstringbuilder.h + mdp:/usr/include/qt6/QtCore/qstringconverter.h + mdp:/usr/include/qt6/QtCore/qstringconverter_base.h + mdp:/usr/include/qt6/QtCore/qstringfwd.h + mdp:/usr/include/qt6/QtCore/qstringlist.h + mdp:/usr/include/qt6/QtCore/qstringlistmodel.h + mdp:/usr/include/qt6/QtCore/qstringliteral.h + mdp:/usr/include/qt6/QtCore/qstringmatcher.h + mdp:/usr/include/qt6/QtCore/qstringtokenizer.h + mdp:/usr/include/qt6/QtCore/qstringview.h + mdp:/usr/include/qt6/QtCore/qswap.h + mdp:/usr/include/qt6/QtCore/qsysinfo.h + mdp:/usr/include/qt6/QtCore/qsystemdetection.h + mdp:/usr/include/qt6/QtCore/qsystemsemaphore.h + mdp:/usr/include/qt6/QtCore/qtaggedpointer.h + mdp:/usr/include/qt6/QtCore/qtclasshelpermacros.h + mdp:/usr/include/qt6/QtCore/qtconfiginclude.h + mdp:/usr/include/qt6/QtCore/qtconfigmacros.h + mdp:/usr/include/qt6/QtCore/qtcore-config.h + mdp:/usr/include/qt6/QtCore/qtcoreexports.h + mdp:/usr/include/qt6/QtCore/qtcoreglobal.h + mdp:/usr/include/qt6/QtCore/qtcoreversion.h + mdp:/usr/include/qt6/QtCore/qtdeprecationdefinitions.h + mdp:/usr/include/qt6/QtCore/qtdeprecationmarkers.h + mdp:/usr/include/qt6/QtCore/qtemporarydir.h + mdp:/usr/include/qt6/QtCore/qtemporaryfile.h + mdp:/usr/include/qt6/QtCore/qtenvironmentvariables.h + mdp:/usr/include/qt6/QtCore/qtestsupport_core.h + mdp:/usr/include/qt6/QtCore/qtextboundaryfinder.h + mdp:/usr/include/qt6/QtCore/qtextstream.h + mdp:/usr/include/qt6/QtCore/qtformat_impl.h + mdp:/usr/include/qt6/QtCore/qthread.h + mdp:/usr/include/qt6/QtCore/qthreadpool.h + mdp:/usr/include/qt6/QtCore/qthreadstorage.h + mdp:/usr/include/qt6/QtCore/qtimeline.h + mdp:/usr/include/qt6/QtCore/qtimer.h + mdp:/usr/include/qt6/QtCore/qtimezone.h + mdp:/usr/include/qt6/QtCore/qtipccommon.h + mdp:/usr/include/qt6/QtCore/qtmetamacros.h + mdp:/usr/include/qt6/QtCore/qtmocconstants.h + mdp:/usr/include/qt6/QtCore/qtnoop.h + mdp:/usr/include/qt6/QtCore/qtpreprocessorsupport.h + mdp:/usr/include/qt6/QtCore/qtranslator.h + mdp:/usr/include/qt6/QtCore/qtransposeproxymodel.h + mdp:/usr/include/qt6/QtCore/qtresource.h + mdp:/usr/include/qt6/QtCore/qtsan_impl.h + mdp:/usr/include/qt6/QtCore/qtsymbolmacros.h + mdp:/usr/include/qt6/QtCore/qttranslation.h + mdp:/usr/include/qt6/QtCore/qttypetraits.h + mdp:/usr/include/qt6/QtCore/qtversion.h + mdp:/usr/include/qt6/QtCore/qtversionchecks.h + mdp:/usr/include/qt6/QtCore/qtypeinfo.h + mdp:/usr/include/qt6/QtCore/qtyperevision.h + mdp:/usr/include/qt6/QtCore/qtypes.h + mdp:/usr/include/qt6/QtCore/qurl.h + mdp:/usr/include/qt6/QtCore/qurlquery.h + mdp:/usr/include/qt6/QtCore/qutf8stringview.h + mdp:/usr/include/qt6/QtCore/quuid.h + mdp:/usr/include/qt6/QtCore/qvariant.h + mdp:/usr/include/qt6/QtCore/qvariantanimation.h + mdp:/usr/include/qt6/QtCore/qvarianthash.h + mdp:/usr/include/qt6/QtCore/qvariantlist.h + mdp:/usr/include/qt6/QtCore/qvariantmap.h + mdp:/usr/include/qt6/QtCore/qvarlengtharray.h + mdp:/usr/include/qt6/QtCore/qvector.h + mdp:/usr/include/qt6/QtCore/qversionnumber.h + mdp:/usr/include/qt6/QtCore/qversiontagging.h + mdp:/usr/include/qt6/QtCore/qwaitcondition.h + mdp:/usr/include/qt6/QtCore/qwineventnotifier.h + mdp:/usr/include/qt6/QtCore/qxmlstream.h + mdp:/usr/include/qt6/QtCore/qxpfunctional.h + mdp:/usr/include/qt6/QtCore/qxptype_traits.h + mdp:/usr/include/qt6/QtCore/qyieldcpu.h + mdp:/usr/include/qt6/QtGui/QBrush + mdp:/usr/include/qt6/QtGui/QColor + mdp:/usr/include/qt6/QtGui/QFont + mdp:/usr/include/qt6/QtGui/QIcon + mdp:/usr/include/qt6/QtGui/QImage + mdp:/usr/include/qt6/QtGui/QPixmap + mdp:/usr/include/qt6/QtGui/QTransform + mdp:/usr/include/qt6/QtGui/qaction.h + mdp:/usr/include/qt6/QtGui/qbitmap.h + mdp:/usr/include/qt6/QtGui/qbrush.h + mdp:/usr/include/qt6/QtGui/qcolor.h + mdp:/usr/include/qt6/QtGui/qcursor.h + mdp:/usr/include/qt6/QtGui/qevent.h + mdp:/usr/include/qt6/QtGui/qeventpoint.h + mdp:/usr/include/qt6/QtGui/qfont.h + mdp:/usr/include/qt6/QtGui/qfontinfo.h + mdp:/usr/include/qt6/QtGui/qfontmetrics.h + mdp:/usr/include/qt6/QtGui/qfontvariableaxis.h + mdp:/usr/include/qt6/QtGui/qguiapplication.h + mdp:/usr/include/qt6/QtGui/qguiapplication_platform.h + mdp:/usr/include/qt6/QtGui/qicon.h + mdp:/usr/include/qt6/QtGui/qimage.h + mdp:/usr/include/qt6/QtGui/qinputdevice.h + mdp:/usr/include/qt6/QtGui/qinputmethod.h + mdp:/usr/include/qt6/QtGui/qkeysequence.h + mdp:/usr/include/qt6/QtGui/qpaintdevice.h + mdp:/usr/include/qt6/QtGui/qpalette.h + mdp:/usr/include/qt6/QtGui/qpixelformat.h + mdp:/usr/include/qt6/QtGui/qpixmap.h + mdp:/usr/include/qt6/QtGui/qpointingdevice.h + mdp:/usr/include/qt6/QtGui/qpolygon.h + mdp:/usr/include/qt6/QtGui/qregion.h + mdp:/usr/include/qt6/QtGui/qrgb.h + mdp:/usr/include/qt6/QtGui/qrgba64.h + mdp:/usr/include/qt6/QtGui/qscreen.h + mdp:/usr/include/qt6/QtGui/qscreen_platform.h + mdp:/usr/include/qt6/QtGui/qsurface.h + mdp:/usr/include/qt6/QtGui/qsurfaceformat.h + mdp:/usr/include/qt6/QtGui/qtestsupport_gui.h + mdp:/usr/include/qt6/QtGui/qtgui-config.h + mdp:/usr/include/qt6/QtGui/qtguiexports.h + mdp:/usr/include/qt6/QtGui/qtguiglobal.h + mdp:/usr/include/qt6/QtGui/qtransform.h + mdp:/usr/include/qt6/QtGui/qvalidator.h + mdp:/usr/include/qt6/QtGui/qvector2d.h + mdp:/usr/include/qt6/QtGui/qvector3d.h + mdp:/usr/include/qt6/QtGui/qvector4d.h + mdp:/usr/include/qt6/QtGui/qvectornd.h + mdp:/usr/include/qt6/QtGui/qwindow.h + mdp:/usr/include/qt6/QtGui/qwindowdefs.h + mdp:/usr/include/qt6/QtTest/QtTest + mdp:/usr/include/qt6/QtTest/QtTestDepends + mdp:/usr/include/qt6/QtTest/qabstractitemmodeltester.h + mdp:/usr/include/qt6/QtTest/qbenchmark.h + mdp:/usr/include/qt6/QtTest/qbenchmarkmetric.h + mdp:/usr/include/qt6/QtTest/qsignalspy.h + mdp:/usr/include/qt6/QtTest/qtest.h + mdp:/usr/include/qt6/QtTest/qtest_gui.h + mdp:/usr/include/qt6/QtTest/qtest_widgets.h + mdp:/usr/include/qt6/QtTest/qtestassert.h + mdp:/usr/include/qt6/QtTest/qtestcase.h + mdp:/usr/include/qt6/QtTest/qtestdata.h + mdp:/usr/include/qt6/QtTest/qtestevent.h + mdp:/usr/include/qt6/QtTest/qtesteventloop.h + mdp:/usr/include/qt6/QtTest/qtestkeyboard.h + mdp:/usr/include/qt6/QtTest/qtestmouse.h + mdp:/usr/include/qt6/QtTest/qtestspontaneevent.h + mdp:/usr/include/qt6/QtTest/qtestsystem.h + mdp:/usr/include/qt6/QtTest/qtesttostring.h + mdp:/usr/include/qt6/QtTest/qtesttouch.h + mdp:/usr/include/qt6/QtTest/qtestwheel.h + mdp:/usr/include/qt6/QtTest/qttestexports.h + mdp:/usr/include/qt6/QtTest/qttestglobal.h + mdp:/usr/include/qt6/QtTest/qttestlib-config.h + mdp:/usr/include/qt6/QtTest/qttestversion.h + mdp:/usr/include/qt6/QtWidgets/QAbstractItemView + mdp:/usr/include/qt6/QtWidgets/QSizePolicy + mdp:/usr/include/qt6/QtWidgets/QWidget + mdp:/usr/include/qt6/QtWidgets/qabstractitemdelegate.h + mdp:/usr/include/qt6/QtWidgets/qabstractitemview.h + mdp:/usr/include/qt6/QtWidgets/qabstractscrollarea.h + mdp:/usr/include/qt6/QtWidgets/qabstractslider.h + mdp:/usr/include/qt6/QtWidgets/qabstractspinbox.h + mdp:/usr/include/qt6/QtWidgets/qapplication.h + mdp:/usr/include/qt6/QtWidgets/qframe.h + mdp:/usr/include/qt6/QtWidgets/qrubberband.h + mdp:/usr/include/qt6/QtWidgets/qsizepolicy.h + mdp:/usr/include/qt6/QtWidgets/qslider.h + mdp:/usr/include/qt6/QtWidgets/qstyle.h + mdp:/usr/include/qt6/QtWidgets/qstyleoption.h + mdp:/usr/include/qt6/QtWidgets/qtabbar.h + mdp:/usr/include/qt6/QtWidgets/qtabwidget.h + mdp:/usr/include/qt6/QtWidgets/qtestsupport_widgets.h + mdp:/usr/include/qt6/QtWidgets/qtwidgets-config.h + mdp:/usr/include/qt6/QtWidgets/qtwidgetsexports.h + mdp:/usr/include/qt6/QtWidgets/qtwidgetsglobal.h + mdp:/usr/include/qt6/QtWidgets/qwidget.h + mdp:/usr/include/sched.h + mdp:/usr/include/semaphore.h + mdp:/usr/include/stdc-predef.h + mdp:/usr/include/stdint.h + mdp:/usr/include/stdio.h + mdp:/usr/include/stdlib.h + mdp:/usr/include/string.h + mdp:/usr/include/strings.h + mdp:/usr/include/sys/cdefs.h + mdp:/usr/include/sys/select.h + mdp:/usr/include/sys/single_threaded.h + mdp:/usr/include/sys/syscall.h + mdp:/usr/include/sys/time.h + mdp:/usr/include/sys/types.h + mdp:/usr/include/syscall.h + mdp:/usr/include/time.h + mdp:/usr/include/unistd.h + mdp:/usr/include/wchar.h + mdp:/usr/include/wctype.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/adxintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxavx512intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxbf16intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxcomplexintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxfp16intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxfp8intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxint8intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxmovrsintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxtf32intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxtileintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxtransposeintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2-512bf16intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2-512convertintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2-512mediaintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2-512minmaxintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2-512satcvtintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2bf16intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2convertintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2copyintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2mediaintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2minmaxintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2satcvtintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx2intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512bf16intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512bf16vlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512bitalgintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512bitalgvlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512bwintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512cdintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512dqintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512fintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512fp16intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512fp16vlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512ifmaintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512ifmavlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vbmi2intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vbmi2vlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vbmiintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vbmivlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vlbwintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vldqintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vnniintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vnnivlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vp2intersectintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vp2intersectvlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vpopcntdqintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vpopcntdqvlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avxifmaintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avxintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avxneconvertintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avxvnniint16intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avxvnniint8intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avxvnniintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/bmi2intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/bmiintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/cetintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/cldemoteintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/clflushoptintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/clwbintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/clzerointrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/cmpccxaddintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/emmintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/enqcmdintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/f16cintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/fmaintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/fxsrintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/gfniintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/hresetintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/ia32intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/immintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/keylockerintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/lwpintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/lzcntintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/mm_malloc.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/mmintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/movdirintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/movrsintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/mwaitintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/mwaitxintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/pconfigintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/pkuintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/pmmintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/popcntintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/prfchiintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/prfchwintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/raointintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/rdseedintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/rtmintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/serializeintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/sgxintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/sha512intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/shaintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/sm3intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/sm4intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/smmintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stdarg.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stdbool.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stddef.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/tbmintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/tmmintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/tsxldtrkintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/uintrintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/usermsrintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/vaesintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/vpclmulqdqintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/waitpkgintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/wbnoinvdintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/wmmintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/x86gprintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/xmmintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/xsavecintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/xsaveintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/xsaveoptintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/xsavesintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/xtestintrin.h diff --git a/build-linux/tests/CMakeFiles/test_icon_utils.dir/__/src/icon_utils.cpp.o b/build-linux/tests/CMakeFiles/test_icon_utils.dir/__/src/icon_utils.cpp.o new file mode 100644 index 00000000..283f48a9 Binary files /dev/null and b/build-linux/tests/CMakeFiles/test_icon_utils.dir/__/src/icon_utils.cpp.o differ diff --git a/build-linux/tests/CMakeFiles/test_icon_utils.dir/test_icon_utils.cpp.o b/build-linux/tests/CMakeFiles/test_icon_utils.dir/test_icon_utils.cpp.o new file mode 100644 index 00000000..cc725528 Binary files /dev/null and b/build-linux/tests/CMakeFiles/test_icon_utils.dir/test_icon_utils.cpp.o differ diff --git a/build-linux/tests/CMakeFiles/test_icon_utils.dir/test_icon_utils_autogen/mocs_compilation.cpp.o b/build-linux/tests/CMakeFiles/test_icon_utils.dir/test_icon_utils_autogen/mocs_compilation.cpp.o new file mode 100644 index 00000000..bc1e4e33 Binary files /dev/null and b/build-linux/tests/CMakeFiles/test_icon_utils.dir/test_icon_utils_autogen/mocs_compilation.cpp.o differ diff --git a/build-linux/tests/CMakeFiles/test_icon_utils_autogen.dir/AutogenInfo.json b/build-linux/tests/CMakeFiles/test_icon_utils_autogen.dir/AutogenInfo.json new file mode 100644 index 00000000..74ff25ac --- /dev/null +++ b/build-linux/tests/CMakeFiles/test_icon_utils_autogen.dir/AutogenInfo.json @@ -0,0 +1,208 @@ +{ + "BUILD_DIR" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_icon_utils_autogen", + "CMAKE_BINARY_DIR" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux", + "CMAKE_CURRENT_BINARY_DIR" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests", + "CMAKE_CURRENT_SOURCE_DIR" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests", + "CMAKE_EXECUTABLE" : "/usr/bin/cmake", + "CMAKE_LIST_FILES" : + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/CMakeLists.txt", + "/usr/lib64/cmake/Qt6/Qt6ConfigVersion.cmake", + "/usr/lib64/cmake/Qt6/Qt6ConfigVersionImpl.cmake", + "/usr/lib64/cmake/Qt6/Qt6Config.cmake", + "/usr/lib64/cmake/Qt6/QtPublicCMakeEarlyPolicyHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicCMakeHelpers.cmake", + "/usr/lib64/cmake/Qt6/Qt6ConfigExtras.cmake", + "/usr/lib64/cmake/Qt6/QtPublicCMakeVersionHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtInstallPaths.cmake", + "/usr/lib64/cmake/Qt6/Qt6Targets.cmake", + "/usr/lib64/cmake/Qt6/Qt6VersionlessAliasTargets.cmake", + "/usr/lib64/cmake/Qt6/QtFeature.cmake", + "/usr/share/cmake/Modules/CheckCXXCompilerFlag.cmake", + "/usr/lib64/cmake/Qt6/QtFeatureCommon.cmake", + "/usr/lib64/cmake/Qt6/QtPublicAndroidHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicAppleHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicCMakeHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicCMakeVersionHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicDependencyHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicExternalProjectHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicFinalizerHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicFindPackageHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicGitHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicPluginHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicPluginHelpers_v2.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomAttributionHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomBuildToolHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomCommonGenerationHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomCpeHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomCycloneDXHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomDocumentNamespaceHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomDepHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomExternalReferenceHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomFileHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomGenerationHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomGenerationCycloneDXHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomLicenseHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomOpsHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomPurlHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomPythonHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomQtEntityHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomRelationshipHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomSystemDepHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicTargetHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicTestHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicToolHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicWalkLibsHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicWindowsHelpers.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6/Qt6Dependencies.cmake", + "/usr/lib64/cmake/Qt6Test/Qt6TestConfigVersion.cmake", + "/usr/lib64/cmake/Qt6Test/Qt6TestConfigVersionImpl.cmake", + "/usr/lib64/cmake/Qt6Test/Qt6TestConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6Test/Qt6TestDependencies.cmake", + "/usr/lib64/cmake/Qt6Test/Qt6TestTargets.cmake", + "/usr/lib64/cmake/Qt6Test/Qt6TestTargets-relwithdebinfo.cmake", + "/usr/lib64/cmake/Qt6Test/Qt6TestAdditionalTargetInfo.cmake", + "/usr/lib64/cmake/Qt6Test/QtTestProperties.cmake", + "/usr/lib64/cmake/Qt6Test/Qt6TestVersionlessAliasTargets.cmake" + ], + "CMAKE_SOURCE_DIR" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6", + "CROSS_CONFIG" : false, + "DEP_FILE" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_icon_utils_autogen/deps", + "DEP_FILE_RULE_NAME" : "test_icon_utils_autogen/timestamp", + "HEADERS" : + [ + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/icon_utils.h", + "MU", + "VNU7RW3YIC/moc_icon_utils.cpp", + null + ] + ], + "HEADER_EXTENSIONS" : [ "h", "hh", "h++", "hm", "hpp", "hxx", "in", "txx" ], + "INCLUDE_DIR" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_icon_utils_autogen/include", + "MOC_COMPILATION_FILE" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_icon_utils_autogen/mocs_compilation.cpp", + "MOC_DEFINITIONS" : + [ + "FTK_API_GL_4_1", + "QT_CORE_LIB", + "QT_GUI_LIB", + "QT_NO_DEBUG", + "QT_TESTCASE_BUILDDIR=\"/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests\"", + "QT_TESTCASE_SOURCEDIR=\"/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests\"", + "QT_TESTLIB_LIB", + "QT_WIDGETS_LIB", + "TLRENDER_EXR", + "TLRENDER_FFMPEG", + "TLRENDER_FFMPEG_PLUGIN", + "TLRENDER_JPEG", + "TLRENDER_OCIO", + "TLRENDER_OIIO", + "TLRENDER_PNG", + "TLRENDER_SDL2", + "TLRENDER_TIFF" + ], + "MOC_DEPEND_FILTERS" : + [ + [ + "Q_PLUGIN_METADATA", + "[\n][ \t]*Q_PLUGIN_METADATA[ \t]*\\([^\\)]*FILE[ \t]*\"([^\"]+)\"" + ] + ], + "MOC_INCLUDES" : + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src", + "/usr/include/qt6/QtTest", + "/usr/include/qt6", + "/usr/include/qt6/QtCore", + "/usr/lib64/qt6/mkspecs/linux-g++", + "/usr/include/qt6/QtGui", + "/usr/include/qt6/QtWidgets", + "/usr/include", + "/usr/include/c++/15", + "/usr/include/c++/15/x86_64-redhat-linux", + "/usr/include/c++/15/backward", + "/usr/lib/gcc/x86_64-redhat-linux/15/include", + "/usr/local/include" + ], + "MOC_MACRO_NAMES" : + [ + "Q_OBJECT", + "Q_GADGET", + "Q_NAMESPACE", + "Q_NAMESPACE_EXPORT", + "Q_GADGET_EXPORT", + "Q_ENUM_NS" + ], + "MOC_OPTIONS" : [], + "MOC_PATH_PREFIX" : false, + "MOC_PREDEFS_CMD" : + [ + "/usr/bin/c++", + "-std=gnu++20", + "-w", + "-dM", + "-E", + "/usr/share/cmake/Modules/CMakeCXXCompilerABI.cpp" + ], + "MOC_PREDEFS_FILE" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_icon_utils_autogen/moc_predefs.h", + "MOC_RELAXED_MODE" : false, + "MOC_SKIP" : + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_db_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_drag_utils_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_everything_search_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_importer_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_live_preview_manager_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_media_converter_worker_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_models_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_sequence_detector_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_simple_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_utils_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_virtual_drag_autogen/mocs_compilation.cpp" + ], + "MULTI_CONFIG" : false, + "PARALLEL" : 16, + "PARSE_CACHE_FILE" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/CMakeFiles/test_icon_utils_autogen.dir/ParseCache.txt", + "QT_MOC_EXECUTABLE" : "/usr/lib64/qt6/libexec/moc", + "QT_UIC_EXECUTABLE" : "/usr/lib64/qt6/libexec/uic", + "QT_VERSION_MAJOR" : 6, + "QT_VERSION_MINOR" : 10, + "SETTINGS_FILE" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/CMakeFiles/test_icon_utils_autogen.dir/AutogenUsed.txt", + "SOURCES" : + [ + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/icon_utils.cpp", + "MU", + null + ], + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/test_icon_utils.cpp", + "MU", + null + ] + ], + "UIC_OPTIONS" : [], + "UIC_SEARCH_PATHS" : [], + "UIC_SKIP" : + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_db_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_drag_utils_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_everything_search_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_importer_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_live_preview_manager_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_media_converter_worker_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_models_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_sequence_detector_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_simple_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_utils_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_virtual_drag_autogen/mocs_compilation.cpp" + ], + "UIC_UI_FILES" : [], + "USE_BETTER_GRAPH" : true, + "VERBOSITY" : 0 +} diff --git a/build-linux/tests/CMakeFiles/test_icon_utils_autogen.dir/AutogenUsed.txt b/build-linux/tests/CMakeFiles/test_icon_utils_autogen.dir/AutogenUsed.txt new file mode 100644 index 00000000..daf02f00 --- /dev/null +++ b/build-linux/tests/CMakeFiles/test_icon_utils_autogen.dir/AutogenUsed.txt @@ -0,0 +1,2 @@ +moc:22e3e0cd6ce023c87f1cd60f4cbd11053c4a0ee65074ff8cdee66fe423af5dc0 +uic:0df7b06f04b60705a14ff966fc10725af0fb193398324deeaf17e44a5f9db1e0 diff --git a/build-linux/tests/CMakeFiles/test_icon_utils_autogen.dir/ParseCache.txt b/build-linux/tests/CMakeFiles/test_icon_utils_autogen.dir/ParseCache.txt new file mode 100644 index 00000000..4b396a21 --- /dev/null +++ b/build-linux/tests/CMakeFiles/test_icon_utils_autogen.dir/ParseCache.txt @@ -0,0 +1,864 @@ +# Generated by CMake. Changes will be overwritten. +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/icon_utils.cpp +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/test_icon_utils.cpp + mmc:Q_OBJECT + mid:test_icon_utils.moc + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_icon_utils_autogen/moc_predefs.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/icon_utils.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/test_icon_utils.cpp + mdp:/usr/include/alloca.h + mdp:/usr/include/asm-generic/bitsperlong.h + mdp:/usr/include/asm-generic/errno-base.h + mdp:/usr/include/asm-generic/errno.h + mdp:/usr/include/asm-generic/int-ll64.h + mdp:/usr/include/asm-generic/posix_types.h + mdp:/usr/include/asm-generic/types.h + mdp:/usr/include/asm/bitsperlong.h + mdp:/usr/include/asm/errno.h + mdp:/usr/include/asm/posix_types.h + mdp:/usr/include/asm/posix_types_64.h + mdp:/usr/include/asm/types.h + mdp:/usr/include/asm/unistd.h + mdp:/usr/include/asm/unistd_64.h + mdp:/usr/include/assert.h + mdp:/usr/include/bits/atomic_wide_counter.h + mdp:/usr/include/bits/byteswap.h + mdp:/usr/include/bits/confname.h + mdp:/usr/include/bits/cpu-set.h + mdp:/usr/include/bits/endian.h + mdp:/usr/include/bits/endianness.h + mdp:/usr/include/bits/environments.h + mdp:/usr/include/bits/errno.h + mdp:/usr/include/bits/floatn-common.h + mdp:/usr/include/bits/floatn.h + mdp:/usr/include/bits/getopt_core.h + mdp:/usr/include/bits/getopt_posix.h + mdp:/usr/include/bits/libc-header-start.h + mdp:/usr/include/bits/local_lim.h + mdp:/usr/include/bits/locale.h + mdp:/usr/include/bits/long-double.h + mdp:/usr/include/bits/posix1_lim.h + mdp:/usr/include/bits/posix2_lim.h + mdp:/usr/include/bits/posix_opt.h + mdp:/usr/include/bits/pthread_stack_min-dynamic.h + mdp:/usr/include/bits/pthreadtypes-arch.h + mdp:/usr/include/bits/pthreadtypes.h + mdp:/usr/include/bits/sched.h + mdp:/usr/include/bits/select.h + mdp:/usr/include/bits/semaphore.h + mdp:/usr/include/bits/setjmp.h + mdp:/usr/include/bits/stdint-intn.h + mdp:/usr/include/bits/stdint-least.h + mdp:/usr/include/bits/stdint-uintn.h + mdp:/usr/include/bits/stdio_lim.h + mdp:/usr/include/bits/stdlib-float.h + mdp:/usr/include/bits/struct_mutex.h + mdp:/usr/include/bits/struct_rwlock.h + mdp:/usr/include/bits/syscall.h + mdp:/usr/include/bits/thread-shared-types.h + mdp:/usr/include/bits/time.h + mdp:/usr/include/bits/time64.h + mdp:/usr/include/bits/timesize.h + mdp:/usr/include/bits/timex.h + mdp:/usr/include/bits/types.h + mdp:/usr/include/bits/types/FILE.h + mdp:/usr/include/bits/types/__FILE.h + mdp:/usr/include/bits/types/__fpos64_t.h + mdp:/usr/include/bits/types/__fpos_t.h + mdp:/usr/include/bits/types/__locale_t.h + mdp:/usr/include/bits/types/__mbstate_t.h + mdp:/usr/include/bits/types/__sigset_t.h + mdp:/usr/include/bits/types/clock_t.h + mdp:/usr/include/bits/types/clockid_t.h + mdp:/usr/include/bits/types/cookie_io_functions_t.h + mdp:/usr/include/bits/types/error_t.h + mdp:/usr/include/bits/types/locale_t.h + mdp:/usr/include/bits/types/mbstate_t.h + mdp:/usr/include/bits/types/sigset_t.h + mdp:/usr/include/bits/types/struct_FILE.h + mdp:/usr/include/bits/types/struct___jmp_buf_tag.h + mdp:/usr/include/bits/types/struct_itimerspec.h + mdp:/usr/include/bits/types/struct_sched_param.h + mdp:/usr/include/bits/types/struct_timespec.h + mdp:/usr/include/bits/types/struct_timeval.h + mdp:/usr/include/bits/types/struct_tm.h + mdp:/usr/include/bits/types/time_t.h + mdp:/usr/include/bits/types/timer_t.h + mdp:/usr/include/bits/types/wint_t.h + mdp:/usr/include/bits/typesizes.h + mdp:/usr/include/bits/uintn-identity.h + mdp:/usr/include/bits/uio_lim.h + mdp:/usr/include/bits/unistd_ext.h + mdp:/usr/include/bits/waitflags.h + mdp:/usr/include/bits/waitstatus.h + mdp:/usr/include/bits/wchar.h + mdp:/usr/include/bits/wctype-wchar.h + mdp:/usr/include/bits/wordsize.h + mdp:/usr/include/bits/xopen_lim.h + mdp:/usr/include/c++/15/algorithm + mdp:/usr/include/c++/15/array + mdp:/usr/include/c++/15/atomic + mdp:/usr/include/c++/15/backward/auto_ptr.h + mdp:/usr/include/c++/15/backward/binders.h + mdp:/usr/include/c++/15/bit + mdp:/usr/include/c++/15/bits/algorithmfwd.h + mdp:/usr/include/c++/15/bits/align.h + mdp:/usr/include/c++/15/bits/alloc_traits.h + mdp:/usr/include/c++/15/bits/allocated_ptr.h + mdp:/usr/include/c++/15/bits/allocator.h + mdp:/usr/include/c++/15/bits/atomic_base.h + mdp:/usr/include/c++/15/bits/atomic_futex.h + mdp:/usr/include/c++/15/bits/atomic_lockfree_defines.h + mdp:/usr/include/c++/15/bits/atomic_timed_wait.h + mdp:/usr/include/c++/15/bits/atomic_wait.h + mdp:/usr/include/c++/15/bits/basic_ios.h + mdp:/usr/include/c++/15/bits/basic_ios.tcc + mdp:/usr/include/c++/15/bits/basic_string.h + mdp:/usr/include/c++/15/bits/basic_string.tcc + mdp:/usr/include/c++/15/bits/char_traits.h + mdp:/usr/include/c++/15/bits/charconv.h + mdp:/usr/include/c++/15/bits/chrono.h + mdp:/usr/include/c++/15/bits/chrono_io.h + mdp:/usr/include/c++/15/bits/codecvt.h + mdp:/usr/include/c++/15/bits/concept_check.h + mdp:/usr/include/c++/15/bits/cpp_type_traits.h + mdp:/usr/include/c++/15/bits/cxxabi_forced.h + mdp:/usr/include/c++/15/bits/cxxabi_init_exception.h + mdp:/usr/include/c++/15/bits/enable_special_members.h + mdp:/usr/include/c++/15/bits/erase_if.h + mdp:/usr/include/c++/15/bits/exception.h + mdp:/usr/include/c++/15/bits/exception_defines.h + mdp:/usr/include/c++/15/bits/exception_ptr.h + mdp:/usr/include/c++/15/bits/functexcept.h + mdp:/usr/include/c++/15/bits/functional_hash.h + mdp:/usr/include/c++/15/bits/hash_bytes.h + mdp:/usr/include/c++/15/bits/hashtable.h + mdp:/usr/include/c++/15/bits/hashtable_policy.h + mdp:/usr/include/c++/15/bits/invoke.h + mdp:/usr/include/c++/15/bits/ios_base.h + mdp:/usr/include/c++/15/bits/istream.tcc + mdp:/usr/include/c++/15/bits/iterator_concepts.h + mdp:/usr/include/c++/15/bits/list.tcc + mdp:/usr/include/c++/15/bits/locale_classes.h + mdp:/usr/include/c++/15/bits/locale_classes.tcc + mdp:/usr/include/c++/15/bits/locale_conv.h + mdp:/usr/include/c++/15/bits/locale_facets.h + mdp:/usr/include/c++/15/bits/locale_facets.tcc + mdp:/usr/include/c++/15/bits/locale_facets_nonio.h + mdp:/usr/include/c++/15/bits/locale_facets_nonio.tcc + mdp:/usr/include/c++/15/bits/localefwd.h + mdp:/usr/include/c++/15/bits/max_size_type.h + mdp:/usr/include/c++/15/bits/memory_resource.h + mdp:/usr/include/c++/15/bits/memoryfwd.h + mdp:/usr/include/c++/15/bits/move.h + mdp:/usr/include/c++/15/bits/nested_exception.h + mdp:/usr/include/c++/15/bits/new_allocator.h + mdp:/usr/include/c++/15/bits/node_handle.h + mdp:/usr/include/c++/15/bits/ostream.h + mdp:/usr/include/c++/15/bits/ostream.tcc + mdp:/usr/include/c++/15/bits/ostream_insert.h + mdp:/usr/include/c++/15/bits/parse_numbers.h + mdp:/usr/include/c++/15/bits/postypes.h + mdp:/usr/include/c++/15/bits/predefined_ops.h + mdp:/usr/include/c++/15/bits/ptr_traits.h + mdp:/usr/include/c++/15/bits/quoted_string.h + mdp:/usr/include/c++/15/bits/random.h + mdp:/usr/include/c++/15/bits/random.tcc + mdp:/usr/include/c++/15/bits/range_access.h + mdp:/usr/include/c++/15/bits/ranges_algo.h + mdp:/usr/include/c++/15/bits/ranges_algobase.h + mdp:/usr/include/c++/15/bits/ranges_base.h + mdp:/usr/include/c++/15/bits/ranges_cmp.h + mdp:/usr/include/c++/15/bits/ranges_uninitialized.h + mdp:/usr/include/c++/15/bits/ranges_util.h + mdp:/usr/include/c++/15/bits/refwrap.h + mdp:/usr/include/c++/15/bits/requires_hosted.h + mdp:/usr/include/c++/15/bits/semaphore_base.h + mdp:/usr/include/c++/15/bits/shared_ptr.h + mdp:/usr/include/c++/15/bits/shared_ptr_atomic.h + mdp:/usr/include/c++/15/bits/shared_ptr_base.h + mdp:/usr/include/c++/15/bits/specfun.h + mdp:/usr/include/c++/15/bits/sstream.tcc + mdp:/usr/include/c++/15/bits/std_abs.h + mdp:/usr/include/c++/15/bits/std_function.h + mdp:/usr/include/c++/15/bits/std_mutex.h + mdp:/usr/include/c++/15/bits/std_thread.h + mdp:/usr/include/c++/15/bits/stl_algo.h + mdp:/usr/include/c++/15/bits/stl_algobase.h + mdp:/usr/include/c++/15/bits/stl_bvector.h + mdp:/usr/include/c++/15/bits/stl_construct.h + mdp:/usr/include/c++/15/bits/stl_function.h + mdp:/usr/include/c++/15/bits/stl_heap.h + mdp:/usr/include/c++/15/bits/stl_iterator.h + mdp:/usr/include/c++/15/bits/stl_iterator_base_funcs.h + mdp:/usr/include/c++/15/bits/stl_iterator_base_types.h + mdp:/usr/include/c++/15/bits/stl_list.h + mdp:/usr/include/c++/15/bits/stl_map.h + mdp:/usr/include/c++/15/bits/stl_multimap.h + mdp:/usr/include/c++/15/bits/stl_multiset.h + mdp:/usr/include/c++/15/bits/stl_numeric.h + mdp:/usr/include/c++/15/bits/stl_pair.h + mdp:/usr/include/c++/15/bits/stl_raw_storage_iter.h + mdp:/usr/include/c++/15/bits/stl_relops.h + mdp:/usr/include/c++/15/bits/stl_set.h + mdp:/usr/include/c++/15/bits/stl_tempbuf.h + mdp:/usr/include/c++/15/bits/stl_tree.h + mdp:/usr/include/c++/15/bits/stl_uninitialized.h + mdp:/usr/include/c++/15/bits/stl_vector.h + mdp:/usr/include/c++/15/bits/stream_iterator.h + mdp:/usr/include/c++/15/bits/streambuf.tcc + mdp:/usr/include/c++/15/bits/streambuf_iterator.h + mdp:/usr/include/c++/15/bits/string_view.tcc + mdp:/usr/include/c++/15/bits/stringfwd.h + mdp:/usr/include/c++/15/bits/this_thread_sleep.h + mdp:/usr/include/c++/15/bits/uniform_int_dist.h + mdp:/usr/include/c++/15/bits/unique_lock.h + mdp:/usr/include/c++/15/bits/unique_ptr.h + mdp:/usr/include/c++/15/bits/unordered_map.h + mdp:/usr/include/c++/15/bits/unordered_set.h + mdp:/usr/include/c++/15/bits/uses_allocator.h + mdp:/usr/include/c++/15/bits/uses_allocator_args.h + mdp:/usr/include/c++/15/bits/utility.h + mdp:/usr/include/c++/15/bits/vector.tcc + mdp:/usr/include/c++/15/bits/version.h + mdp:/usr/include/c++/15/cassert + mdp:/usr/include/c++/15/cctype + mdp:/usr/include/c++/15/cerrno + mdp:/usr/include/c++/15/charconv + mdp:/usr/include/c++/15/chrono + mdp:/usr/include/c++/15/climits + mdp:/usr/include/c++/15/clocale + mdp:/usr/include/c++/15/cmath + mdp:/usr/include/c++/15/compare + mdp:/usr/include/c++/15/concepts + mdp:/usr/include/c++/15/condition_variable + mdp:/usr/include/c++/15/cstddef + mdp:/usr/include/c++/15/cstdint + mdp:/usr/include/c++/15/cstdio + mdp:/usr/include/c++/15/cstdlib + mdp:/usr/include/c++/15/cstring + mdp:/usr/include/c++/15/ctime + mdp:/usr/include/c++/15/cwchar + mdp:/usr/include/c++/15/cwctype + mdp:/usr/include/c++/15/debug/assertions.h + mdp:/usr/include/c++/15/debug/debug.h + mdp:/usr/include/c++/15/exception + mdp:/usr/include/c++/15/experimental/source_location + mdp:/usr/include/c++/15/ext/aligned_buffer.h + mdp:/usr/include/c++/15/ext/alloc_traits.h + mdp:/usr/include/c++/15/ext/atomicity.h + mdp:/usr/include/c++/15/ext/concurrence.h + mdp:/usr/include/c++/15/ext/numeric_traits.h + mdp:/usr/include/c++/15/ext/string_conversions.h + mdp:/usr/include/c++/15/ext/type_traits.h + mdp:/usr/include/c++/15/filesystem + mdp:/usr/include/c++/15/format + mdp:/usr/include/c++/15/functional + mdp:/usr/include/c++/15/future + mdp:/usr/include/c++/15/initializer_list + mdp:/usr/include/c++/15/iomanip + mdp:/usr/include/c++/15/ios + mdp:/usr/include/c++/15/iosfwd + mdp:/usr/include/c++/15/istream + mdp:/usr/include/c++/15/iterator + mdp:/usr/include/c++/15/limits + mdp:/usr/include/c++/15/list + mdp:/usr/include/c++/15/locale + mdp:/usr/include/c++/15/map + mdp:/usr/include/c++/15/memory + mdp:/usr/include/c++/15/memory_resource + mdp:/usr/include/c++/15/mutex + mdp:/usr/include/c++/15/new + mdp:/usr/include/c++/15/numeric + mdp:/usr/include/c++/15/optional + mdp:/usr/include/c++/15/ostream + mdp:/usr/include/c++/15/pstl/execution_defs.h + mdp:/usr/include/c++/15/pstl/glue_numeric_defs.h + mdp:/usr/include/c++/15/pstl/pstl_config.h + mdp:/usr/include/c++/15/random + mdp:/usr/include/c++/15/ratio + mdp:/usr/include/c++/15/semaphore + mdp:/usr/include/c++/15/set + mdp:/usr/include/c++/15/shared_mutex + mdp:/usr/include/c++/15/source_location + mdp:/usr/include/c++/15/sstream + mdp:/usr/include/c++/15/stdexcept + mdp:/usr/include/c++/15/stop_token + mdp:/usr/include/c++/15/streambuf + mdp:/usr/include/c++/15/string + mdp:/usr/include/c++/15/string_view + mdp:/usr/include/c++/15/system_error + mdp:/usr/include/c++/15/tr1/bessel_function.tcc + mdp:/usr/include/c++/15/tr1/beta_function.tcc + mdp:/usr/include/c++/15/tr1/ell_integral.tcc + mdp:/usr/include/c++/15/tr1/exp_integral.tcc + mdp:/usr/include/c++/15/tr1/gamma.tcc + mdp:/usr/include/c++/15/tr1/hypergeometric.tcc + mdp:/usr/include/c++/15/tr1/legendre_function.tcc + mdp:/usr/include/c++/15/tr1/modified_bessel_func.tcc + mdp:/usr/include/c++/15/tr1/poly_hermite.tcc + mdp:/usr/include/c++/15/tr1/poly_laguerre.tcc + mdp:/usr/include/c++/15/tr1/riemann_zeta.tcc + mdp:/usr/include/c++/15/tr1/special_function_util.h + mdp:/usr/include/c++/15/tuple + mdp:/usr/include/c++/15/type_traits + mdp:/usr/include/c++/15/typeinfo + mdp:/usr/include/c++/15/unordered_map + mdp:/usr/include/c++/15/unordered_set + mdp:/usr/include/c++/15/utility + mdp:/usr/include/c++/15/variant + mdp:/usr/include/c++/15/vector + mdp:/usr/include/c++/15/version + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/atomic_word.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++allocator.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++config.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++locale.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/cpu_defines.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/ctype_base.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/ctype_inline.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/error_constants.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/gthr-default.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/gthr.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/messages_members.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/opt_random.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/os_defines.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/time_members.h + mdp:/usr/include/ctype.h + mdp:/usr/include/endian.h + mdp:/usr/include/errno.h + mdp:/usr/include/features-time64.h + mdp:/usr/include/features.h + mdp:/usr/include/gnu/stubs-64.h + mdp:/usr/include/gnu/stubs.h + mdp:/usr/include/libintl.h + mdp:/usr/include/limits.h + mdp:/usr/include/linux/close_range.h + mdp:/usr/include/linux/errno.h + mdp:/usr/include/linux/limits.h + mdp:/usr/include/linux/posix_types.h + mdp:/usr/include/linux/sched/types.h + mdp:/usr/include/linux/stddef.h + mdp:/usr/include/linux/types.h + mdp:/usr/include/locale.h + mdp:/usr/include/pthread.h + mdp:/usr/include/qt6/QtCore/QAbstractItemModel + mdp:/usr/include/qt6/QtCore/QDeadlineTimer + mdp:/usr/include/qt6/QtCore/QEvent + mdp:/usr/include/qt6/QtCore/QHash + mdp:/usr/include/qt6/QtCore/QList + mdp:/usr/include/qt6/QtCore/QMap + mdp:/usr/include/qt6/QtCore/QMargins + mdp:/usr/include/qt6/QtCore/QMetaEnum + mdp:/usr/include/qt6/QtCore/QMutex + mdp:/usr/include/qt6/QtCore/QObject + mdp:/usr/include/qt6/QtCore/QRect + mdp:/usr/include/qt6/QtCore/QSize + mdp:/usr/include/qt6/QtCore/QSizeF + mdp:/usr/include/qt6/QtCore/QString + mdp:/usr/include/qt6/QtCore/QStringList + mdp:/usr/include/qt6/QtCore/QVariant + mdp:/usr/include/qt6/QtCore/QtCore + mdp:/usr/include/qt6/QtCore/QtCoreDepends + mdp:/usr/include/qt6/QtCore/q17memory.h + mdp:/usr/include/qt6/QtCore/q20algorithm.h + mdp:/usr/include/qt6/QtCore/q20chrono.h + mdp:/usr/include/qt6/QtCore/q20functional.h + mdp:/usr/include/qt6/QtCore/q20iterator.h + mdp:/usr/include/qt6/QtCore/q20map.h + mdp:/usr/include/qt6/QtCore/q20memory.h + mdp:/usr/include/qt6/QtCore/q20type_traits.h + mdp:/usr/include/qt6/QtCore/q20utility.h + mdp:/usr/include/qt6/QtCore/q20vector.h + mdp:/usr/include/qt6/QtCore/q23functional.h + mdp:/usr/include/qt6/QtCore/q23type_traits.h + mdp:/usr/include/qt6/QtCore/q23utility.h + mdp:/usr/include/qt6/QtCore/q26numeric.h + mdp:/usr/include/qt6/QtCore/qabstractanimation.h + mdp:/usr/include/qt6/QtCore/qabstracteventdispatcher.h + mdp:/usr/include/qt6/QtCore/qabstractitemmodel.h + mdp:/usr/include/qt6/QtCore/qabstractnativeeventfilter.h + mdp:/usr/include/qt6/QtCore/qabstractproxymodel.h + mdp:/usr/include/qt6/QtCore/qalgorithms.h + mdp:/usr/include/qt6/QtCore/qalloc.h + mdp:/usr/include/qt6/QtCore/qanimationgroup.h + mdp:/usr/include/qt6/QtCore/qanystringview.h + mdp:/usr/include/qt6/QtCore/qapplicationstatic.h + mdp:/usr/include/qt6/QtCore/qarraydata.h + mdp:/usr/include/qt6/QtCore/qarraydataops.h + mdp:/usr/include/qt6/QtCore/qarraydatapointer.h + mdp:/usr/include/qt6/QtCore/qassert.h + mdp:/usr/include/qt6/QtCore/qassociativeiterable.h + mdp:/usr/include/qt6/QtCore/qatomic.h + mdp:/usr/include/qt6/QtCore/qatomic_cxx11.h + mdp:/usr/include/qt6/QtCore/qatomicscopedvaluerollback.h + mdp:/usr/include/qt6/QtCore/qbasicatomic.h + mdp:/usr/include/qt6/QtCore/qbasictimer.h + mdp:/usr/include/qt6/QtCore/qbindingstorage.h + mdp:/usr/include/qt6/QtCore/qbitarray.h + mdp:/usr/include/qt6/QtCore/qbuffer.h + mdp:/usr/include/qt6/QtCore/qbytearray.h + mdp:/usr/include/qt6/QtCore/qbytearrayalgorithms.h + mdp:/usr/include/qt6/QtCore/qbytearraylist.h + mdp:/usr/include/qt6/QtCore/qbytearraymatcher.h + mdp:/usr/include/qt6/QtCore/qbytearrayview.h + mdp:/usr/include/qt6/QtCore/qcache.h + mdp:/usr/include/qt6/QtCore/qcalendar.h + mdp:/usr/include/qt6/QtCore/qcborarray.h + mdp:/usr/include/qt6/QtCore/qcborcommon.h + mdp:/usr/include/qt6/QtCore/qcbormap.h + mdp:/usr/include/qt6/QtCore/qcborstream.h + mdp:/usr/include/qt6/QtCore/qcborstreamreader.h + mdp:/usr/include/qt6/QtCore/qcborstreamwriter.h + mdp:/usr/include/qt6/QtCore/qcborvalue.h + mdp:/usr/include/qt6/QtCore/qchar.h + mdp:/usr/include/qt6/QtCore/qcheckedint_impl.h + mdp:/usr/include/qt6/QtCore/qchronotimer.h + mdp:/usr/include/qt6/QtCore/qcollator.h + mdp:/usr/include/qt6/QtCore/qcommandlineoption.h + mdp:/usr/include/qt6/QtCore/qcommandlineparser.h + mdp:/usr/include/qt6/QtCore/qcompare.h + mdp:/usr/include/qt6/QtCore/qcompare_impl.h + mdp:/usr/include/qt6/QtCore/qcomparehelpers.h + mdp:/usr/include/qt6/QtCore/qcompilerdetection.h + mdp:/usr/include/qt6/QtCore/qconcatenatetablesproxymodel.h + mdp:/usr/include/qt6/QtCore/qconfig-64.h + mdp:/usr/include/qt6/QtCore/qconfig.h + mdp:/usr/include/qt6/QtCore/qconstructormacros.h + mdp:/usr/include/qt6/QtCore/qcontainerfwd.h + mdp:/usr/include/qt6/QtCore/qcontainerinfo.h + mdp:/usr/include/qt6/QtCore/qcontainertools_impl.h + mdp:/usr/include/qt6/QtCore/qcontiguouscache.h + mdp:/usr/include/qt6/QtCore/qcoreapplication.h + mdp:/usr/include/qt6/QtCore/qcoreapplication_platform.h + mdp:/usr/include/qt6/QtCore/qcoreevent.h + mdp:/usr/include/qt6/QtCore/qcryptographichash.h + mdp:/usr/include/qt6/QtCore/qdarwinhelpers.h + mdp:/usr/include/qt6/QtCore/qdatastream.h + mdp:/usr/include/qt6/QtCore/qdatetime.h + mdp:/usr/include/qt6/QtCore/qdeadlinetimer.h + mdp:/usr/include/qt6/QtCore/qdebug.h + mdp:/usr/include/qt6/QtCore/qdir.h + mdp:/usr/include/qt6/QtCore/qdiriterator.h + mdp:/usr/include/qt6/QtCore/qdirlisting.h + mdp:/usr/include/qt6/QtCore/qeasingcurve.h + mdp:/usr/include/qt6/QtCore/qelapsedtimer.h + mdp:/usr/include/qt6/QtCore/qendian.h + mdp:/usr/include/qt6/QtCore/qeventloop.h + mdp:/usr/include/qt6/QtCore/qexception.h + mdp:/usr/include/qt6/QtCore/qexceptionhandling.h + mdp:/usr/include/qt6/QtCore/qfactoryinterface.h + mdp:/usr/include/qt6/QtCore/qfile.h + mdp:/usr/include/qt6/QtCore/qfiledevice.h + mdp:/usr/include/qt6/QtCore/qfileinfo.h + mdp:/usr/include/qt6/QtCore/qfileselector.h + mdp:/usr/include/qt6/QtCore/qfilesystemwatcher.h + mdp:/usr/include/qt6/QtCore/qflags.h + mdp:/usr/include/qt6/QtCore/qfloat16.h + mdp:/usr/include/qt6/QtCore/qforeach.h + mdp:/usr/include/qt6/QtCore/qfunctionaltools_impl.h + mdp:/usr/include/qt6/QtCore/qfunctionpointer.h + mdp:/usr/include/qt6/QtCore/qfuture.h + mdp:/usr/include/qt6/QtCore/qfuture_impl.h + mdp:/usr/include/qt6/QtCore/qfutureinterface.h + mdp:/usr/include/qt6/QtCore/qfuturesynchronizer.h + mdp:/usr/include/qt6/QtCore/qfuturewatcher.h + mdp:/usr/include/qt6/QtCore/qgenericatomic.h + mdp:/usr/include/qt6/QtCore/qglobal.h + mdp:/usr/include/qt6/QtCore/qglobalstatic.h + mdp:/usr/include/qt6/QtCore/qhash.h + mdp:/usr/include/qt6/QtCore/qhashfunctions.h + mdp:/usr/include/qt6/QtCore/qidentityproxymodel.h + mdp:/usr/include/qt6/QtCore/qiodevice.h + mdp:/usr/include/qt6/QtCore/qiodevicebase.h + mdp:/usr/include/qt6/QtCore/qitemselectionmodel.h + mdp:/usr/include/qt6/QtCore/qiterable.h + mdp:/usr/include/qt6/QtCore/qiterator.h + mdp:/usr/include/qt6/QtCore/qjsonarray.h + mdp:/usr/include/qt6/QtCore/qjsondocument.h + mdp:/usr/include/qt6/QtCore/qjsonobject.h + mdp:/usr/include/qt6/QtCore/qjsonparseerror.h + mdp:/usr/include/qt6/QtCore/qjsonvalue.h + mdp:/usr/include/qt6/QtCore/qlatin1stringmatcher.h + mdp:/usr/include/qt6/QtCore/qlatin1stringview.h + mdp:/usr/include/qt6/QtCore/qlibrary.h + mdp:/usr/include/qt6/QtCore/qlibraryinfo.h + mdp:/usr/include/qt6/QtCore/qline.h + mdp:/usr/include/qt6/QtCore/qlist.h + mdp:/usr/include/qt6/QtCore/qlocale.h + mdp:/usr/include/qt6/QtCore/qlockfile.h + mdp:/usr/include/qt6/QtCore/qlogging.h + mdp:/usr/include/qt6/QtCore/qloggingcategory.h + mdp:/usr/include/qt6/QtCore/qmalloc.h + mdp:/usr/include/qt6/QtCore/qmap.h + mdp:/usr/include/qt6/QtCore/qmargins.h + mdp:/usr/include/qt6/QtCore/qmath.h + mdp:/usr/include/qt6/QtCore/qmessageauthenticationcode.h + mdp:/usr/include/qt6/QtCore/qmetacontainer.h + mdp:/usr/include/qt6/QtCore/qmetaobject.h + mdp:/usr/include/qt6/QtCore/qmetatype.h + mdp:/usr/include/qt6/QtCore/qmimedata.h + mdp:/usr/include/qt6/QtCore/qmimedatabase.h + mdp:/usr/include/qt6/QtCore/qmimetype.h + mdp:/usr/include/qt6/QtCore/qminmax.h + mdp:/usr/include/qt6/QtCore/qmutex.h + mdp:/usr/include/qt6/QtCore/qnamespace.h + mdp:/usr/include/qt6/QtCore/qnativeinterface.h + mdp:/usr/include/qt6/QtCore/qnumeric.h + mdp:/usr/include/qt6/QtCore/qobject.h + mdp:/usr/include/qt6/QtCore/qobject_impl.h + mdp:/usr/include/qt6/QtCore/qobjectcleanuphandler.h + mdp:/usr/include/qt6/QtCore/qobjectdefs.h + mdp:/usr/include/qt6/QtCore/qobjectdefs_impl.h + mdp:/usr/include/qt6/QtCore/qoperatingsystemversion.h + mdp:/usr/include/qt6/QtCore/qoverload.h + mdp:/usr/include/qt6/QtCore/qpair.h + mdp:/usr/include/qt6/QtCore/qparallelanimationgroup.h + mdp:/usr/include/qt6/QtCore/qpauseanimation.h + mdp:/usr/include/qt6/QtCore/qpermissions.h + mdp:/usr/include/qt6/QtCore/qplugin.h + mdp:/usr/include/qt6/QtCore/qpluginloader.h + mdp:/usr/include/qt6/QtCore/qpoint.h + mdp:/usr/include/qt6/QtCore/qpointer.h + mdp:/usr/include/qt6/QtCore/qprocess.h + mdp:/usr/include/qt6/QtCore/qprocessordetection.h + mdp:/usr/include/qt6/QtCore/qpromise.h + mdp:/usr/include/qt6/QtCore/qproperty.h + mdp:/usr/include/qt6/QtCore/qpropertyanimation.h + mdp:/usr/include/qt6/QtCore/qpropertyprivate.h + mdp:/usr/include/qt6/QtCore/qqueue.h + mdp:/usr/include/qt6/QtCore/qrandom.h + mdp:/usr/include/qt6/QtCore/qrangemodel.h + mdp:/usr/include/qt6/QtCore/qrangemodel_impl.h + mdp:/usr/include/qt6/QtCore/qreadwritelock.h + mdp:/usr/include/qt6/QtCore/qrect.h + mdp:/usr/include/qt6/QtCore/qrefcount.h + mdp:/usr/include/qt6/QtCore/qregularexpression.h + mdp:/usr/include/qt6/QtCore/qresource.h + mdp:/usr/include/qt6/QtCore/qresultstore.h + mdp:/usr/include/qt6/QtCore/qrunnable.h + mdp:/usr/include/qt6/QtCore/qsavefile.h + mdp:/usr/include/qt6/QtCore/qscopedpointer.h + mdp:/usr/include/qt6/QtCore/qscopedvaluerollback.h + mdp:/usr/include/qt6/QtCore/qscopeguard.h + mdp:/usr/include/qt6/QtCore/qsemaphore.h + mdp:/usr/include/qt6/QtCore/qsequentialanimationgroup.h + mdp:/usr/include/qt6/QtCore/qsequentialiterable.h + mdp:/usr/include/qt6/QtCore/qset.h + mdp:/usr/include/qt6/QtCore/qsettings.h + mdp:/usr/include/qt6/QtCore/qshareddata.h + mdp:/usr/include/qt6/QtCore/qshareddata_impl.h + mdp:/usr/include/qt6/QtCore/qsharedmemory.h + mdp:/usr/include/qt6/QtCore/qsharedpointer.h + mdp:/usr/include/qt6/QtCore/qsharedpointer_impl.h + mdp:/usr/include/qt6/QtCore/qsignalmapper.h + mdp:/usr/include/qt6/QtCore/qsimd.h + mdp:/usr/include/qt6/QtCore/qsize.h + mdp:/usr/include/qt6/QtCore/qsocketnotifier.h + mdp:/usr/include/qt6/QtCore/qsortfilterproxymodel.h + mdp:/usr/include/qt6/QtCore/qspan.h + mdp:/usr/include/qt6/QtCore/qstack.h + mdp:/usr/include/qt6/QtCore/qstandardpaths.h + mdp:/usr/include/qt6/QtCore/qstaticlatin1stringmatcher.h + mdp:/usr/include/qt6/QtCore/qstdlibdetection.h + mdp:/usr/include/qt6/QtCore/qstorageinfo.h + mdp:/usr/include/qt6/QtCore/qstring.h + mdp:/usr/include/qt6/QtCore/qstringalgorithms.h + mdp:/usr/include/qt6/QtCore/qstringbuilder.h + mdp:/usr/include/qt6/QtCore/qstringconverter.h + mdp:/usr/include/qt6/QtCore/qstringconverter_base.h + mdp:/usr/include/qt6/QtCore/qstringfwd.h + mdp:/usr/include/qt6/QtCore/qstringlist.h + mdp:/usr/include/qt6/QtCore/qstringlistmodel.h + mdp:/usr/include/qt6/QtCore/qstringliteral.h + mdp:/usr/include/qt6/QtCore/qstringmatcher.h + mdp:/usr/include/qt6/QtCore/qstringtokenizer.h + mdp:/usr/include/qt6/QtCore/qstringview.h + mdp:/usr/include/qt6/QtCore/qswap.h + mdp:/usr/include/qt6/QtCore/qsysinfo.h + mdp:/usr/include/qt6/QtCore/qsystemdetection.h + mdp:/usr/include/qt6/QtCore/qsystemsemaphore.h + mdp:/usr/include/qt6/QtCore/qtaggedpointer.h + mdp:/usr/include/qt6/QtCore/qtclasshelpermacros.h + mdp:/usr/include/qt6/QtCore/qtconfiginclude.h + mdp:/usr/include/qt6/QtCore/qtconfigmacros.h + mdp:/usr/include/qt6/QtCore/qtcore-config.h + mdp:/usr/include/qt6/QtCore/qtcoreexports.h + mdp:/usr/include/qt6/QtCore/qtcoreglobal.h + mdp:/usr/include/qt6/QtCore/qtcoreversion.h + mdp:/usr/include/qt6/QtCore/qtdeprecationdefinitions.h + mdp:/usr/include/qt6/QtCore/qtdeprecationmarkers.h + mdp:/usr/include/qt6/QtCore/qtemporarydir.h + mdp:/usr/include/qt6/QtCore/qtemporaryfile.h + mdp:/usr/include/qt6/QtCore/qtenvironmentvariables.h + mdp:/usr/include/qt6/QtCore/qtestsupport_core.h + mdp:/usr/include/qt6/QtCore/qtextboundaryfinder.h + mdp:/usr/include/qt6/QtCore/qtextstream.h + mdp:/usr/include/qt6/QtCore/qtformat_impl.h + mdp:/usr/include/qt6/QtCore/qthread.h + mdp:/usr/include/qt6/QtCore/qthreadpool.h + mdp:/usr/include/qt6/QtCore/qthreadstorage.h + mdp:/usr/include/qt6/QtCore/qtimeline.h + mdp:/usr/include/qt6/QtCore/qtimer.h + mdp:/usr/include/qt6/QtCore/qtimezone.h + mdp:/usr/include/qt6/QtCore/qtipccommon.h + mdp:/usr/include/qt6/QtCore/qtmetamacros.h + mdp:/usr/include/qt6/QtCore/qtmocconstants.h + mdp:/usr/include/qt6/QtCore/qtnoop.h + mdp:/usr/include/qt6/QtCore/qtpreprocessorsupport.h + mdp:/usr/include/qt6/QtCore/qtranslator.h + mdp:/usr/include/qt6/QtCore/qtransposeproxymodel.h + mdp:/usr/include/qt6/QtCore/qtresource.h + mdp:/usr/include/qt6/QtCore/qtsan_impl.h + mdp:/usr/include/qt6/QtCore/qtsymbolmacros.h + mdp:/usr/include/qt6/QtCore/qttranslation.h + mdp:/usr/include/qt6/QtCore/qttypetraits.h + mdp:/usr/include/qt6/QtCore/qtversion.h + mdp:/usr/include/qt6/QtCore/qtversionchecks.h + mdp:/usr/include/qt6/QtCore/qtypeinfo.h + mdp:/usr/include/qt6/QtCore/qtyperevision.h + mdp:/usr/include/qt6/QtCore/qtypes.h + mdp:/usr/include/qt6/QtCore/qurl.h + mdp:/usr/include/qt6/QtCore/qurlquery.h + mdp:/usr/include/qt6/QtCore/qutf8stringview.h + mdp:/usr/include/qt6/QtCore/quuid.h + mdp:/usr/include/qt6/QtCore/qvariant.h + mdp:/usr/include/qt6/QtCore/qvariantanimation.h + mdp:/usr/include/qt6/QtCore/qvarianthash.h + mdp:/usr/include/qt6/QtCore/qvariantlist.h + mdp:/usr/include/qt6/QtCore/qvariantmap.h + mdp:/usr/include/qt6/QtCore/qvarlengtharray.h + mdp:/usr/include/qt6/QtCore/qvector.h + mdp:/usr/include/qt6/QtCore/qversionnumber.h + mdp:/usr/include/qt6/QtCore/qversiontagging.h + mdp:/usr/include/qt6/QtCore/qwaitcondition.h + mdp:/usr/include/qt6/QtCore/qwineventnotifier.h + mdp:/usr/include/qt6/QtCore/qxmlstream.h + mdp:/usr/include/qt6/QtCore/qxpfunctional.h + mdp:/usr/include/qt6/QtCore/qxptype_traits.h + mdp:/usr/include/qt6/QtCore/qyieldcpu.h + mdp:/usr/include/qt6/QtGui/QBrush + mdp:/usr/include/qt6/QtGui/QColor + mdp:/usr/include/qt6/QtGui/QFont + mdp:/usr/include/qt6/QtGui/QIcon + mdp:/usr/include/qt6/QtGui/QImage + mdp:/usr/include/qt6/QtGui/QPainter + mdp:/usr/include/qt6/QtGui/QPixmap + mdp:/usr/include/qt6/QtGui/QTransform + mdp:/usr/include/qt6/QtGui/qabstractfileiconprovider.h + mdp:/usr/include/qt6/QtGui/qaction.h + mdp:/usr/include/qt6/QtGui/qbitmap.h + mdp:/usr/include/qt6/QtGui/qbrush.h + mdp:/usr/include/qt6/QtGui/qcolor.h + mdp:/usr/include/qt6/QtGui/qcursor.h + mdp:/usr/include/qt6/QtGui/qevent.h + mdp:/usr/include/qt6/QtGui/qeventpoint.h + mdp:/usr/include/qt6/QtGui/qfont.h + mdp:/usr/include/qt6/QtGui/qfontinfo.h + mdp:/usr/include/qt6/QtGui/qfontmetrics.h + mdp:/usr/include/qt6/QtGui/qfontvariableaxis.h + mdp:/usr/include/qt6/QtGui/qguiapplication.h + mdp:/usr/include/qt6/QtGui/qguiapplication_platform.h + mdp:/usr/include/qt6/QtGui/qicon.h + mdp:/usr/include/qt6/QtGui/qimage.h + mdp:/usr/include/qt6/QtGui/qinputdevice.h + mdp:/usr/include/qt6/QtGui/qinputmethod.h + mdp:/usr/include/qt6/QtGui/qkeysequence.h + mdp:/usr/include/qt6/QtGui/qpaintdevice.h + mdp:/usr/include/qt6/QtGui/qpainter.h + mdp:/usr/include/qt6/QtGui/qpalette.h + mdp:/usr/include/qt6/QtGui/qpen.h + mdp:/usr/include/qt6/QtGui/qpixelformat.h + mdp:/usr/include/qt6/QtGui/qpixmap.h + mdp:/usr/include/qt6/QtGui/qpointingdevice.h + mdp:/usr/include/qt6/QtGui/qpolygon.h + mdp:/usr/include/qt6/QtGui/qregion.h + mdp:/usr/include/qt6/QtGui/qrgb.h + mdp:/usr/include/qt6/QtGui/qrgba64.h + mdp:/usr/include/qt6/QtGui/qscreen.h + mdp:/usr/include/qt6/QtGui/qscreen_platform.h + mdp:/usr/include/qt6/QtGui/qsurface.h + mdp:/usr/include/qt6/QtGui/qsurfaceformat.h + mdp:/usr/include/qt6/QtGui/qtestsupport_gui.h + mdp:/usr/include/qt6/QtGui/qtextoption.h + mdp:/usr/include/qt6/QtGui/qtgui-config.h + mdp:/usr/include/qt6/QtGui/qtguiexports.h + mdp:/usr/include/qt6/QtGui/qtguiglobal.h + mdp:/usr/include/qt6/QtGui/qtransform.h + mdp:/usr/include/qt6/QtGui/qvector2d.h + mdp:/usr/include/qt6/QtGui/qvector3d.h + mdp:/usr/include/qt6/QtGui/qvector4d.h + mdp:/usr/include/qt6/QtGui/qvectornd.h + mdp:/usr/include/qt6/QtGui/qwindow.h + mdp:/usr/include/qt6/QtGui/qwindowdefs.h + mdp:/usr/include/qt6/QtTest/QtTest + mdp:/usr/include/qt6/QtTest/QtTestDepends + mdp:/usr/include/qt6/QtTest/qabstractitemmodeltester.h + mdp:/usr/include/qt6/QtTest/qbenchmark.h + mdp:/usr/include/qt6/QtTest/qbenchmarkmetric.h + mdp:/usr/include/qt6/QtTest/qsignalspy.h + mdp:/usr/include/qt6/QtTest/qtest.h + mdp:/usr/include/qt6/QtTest/qtest_gui.h + mdp:/usr/include/qt6/QtTest/qtest_widgets.h + mdp:/usr/include/qt6/QtTest/qtestassert.h + mdp:/usr/include/qt6/QtTest/qtestcase.h + mdp:/usr/include/qt6/QtTest/qtestdata.h + mdp:/usr/include/qt6/QtTest/qtestevent.h + mdp:/usr/include/qt6/QtTest/qtesteventloop.h + mdp:/usr/include/qt6/QtTest/qtestkeyboard.h + mdp:/usr/include/qt6/QtTest/qtestmouse.h + mdp:/usr/include/qt6/QtTest/qtestspontaneevent.h + mdp:/usr/include/qt6/QtTest/qtestsystem.h + mdp:/usr/include/qt6/QtTest/qtesttostring.h + mdp:/usr/include/qt6/QtTest/qtesttouch.h + mdp:/usr/include/qt6/QtTest/qtestwheel.h + mdp:/usr/include/qt6/QtTest/qttestexports.h + mdp:/usr/include/qt6/QtTest/qttestglobal.h + mdp:/usr/include/qt6/QtTest/qttestlib-config.h + mdp:/usr/include/qt6/QtTest/qttestversion.h + mdp:/usr/include/qt6/QtWidgets/QApplication + mdp:/usr/include/qt6/QtWidgets/QFileIconProvider + mdp:/usr/include/qt6/QtWidgets/QSizePolicy + mdp:/usr/include/qt6/QtWidgets/qapplication.h + mdp:/usr/include/qt6/QtWidgets/qfileiconprovider.h + mdp:/usr/include/qt6/QtWidgets/qsizepolicy.h + mdp:/usr/include/qt6/QtWidgets/qtestsupport_widgets.h + mdp:/usr/include/qt6/QtWidgets/qtwidgets-config.h + mdp:/usr/include/qt6/QtWidgets/qtwidgetsexports.h + mdp:/usr/include/qt6/QtWidgets/qtwidgetsglobal.h + mdp:/usr/include/qt6/QtWidgets/qwidget.h + mdp:/usr/include/sched.h + mdp:/usr/include/semaphore.h + mdp:/usr/include/stdc-predef.h + mdp:/usr/include/stdint.h + mdp:/usr/include/stdio.h + mdp:/usr/include/stdlib.h + mdp:/usr/include/string.h + mdp:/usr/include/strings.h + mdp:/usr/include/sys/cdefs.h + mdp:/usr/include/sys/select.h + mdp:/usr/include/sys/single_threaded.h + mdp:/usr/include/sys/syscall.h + mdp:/usr/include/sys/time.h + mdp:/usr/include/sys/types.h + mdp:/usr/include/syscall.h + mdp:/usr/include/time.h + mdp:/usr/include/unistd.h + mdp:/usr/include/wchar.h + mdp:/usr/include/wctype.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/adxintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxavx512intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxbf16intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxcomplexintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxfp16intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxfp8intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxint8intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxmovrsintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxtf32intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxtileintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxtransposeintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2-512bf16intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2-512convertintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2-512mediaintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2-512minmaxintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2-512satcvtintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2bf16intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2convertintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2copyintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2mediaintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2minmaxintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2satcvtintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx2intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512bf16intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512bf16vlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512bitalgintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512bitalgvlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512bwintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512cdintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512dqintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512fintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512fp16intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512fp16vlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512ifmaintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512ifmavlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vbmi2intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vbmi2vlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vbmiintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vbmivlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vlbwintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vldqintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vnniintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vnnivlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vp2intersectintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vp2intersectvlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vpopcntdqintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vpopcntdqvlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avxifmaintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avxintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avxneconvertintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avxvnniint16intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avxvnniint8intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avxvnniintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/bmi2intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/bmiintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/cetintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/cldemoteintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/clflushoptintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/clwbintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/clzerointrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/cmpccxaddintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/emmintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/enqcmdintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/f16cintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/fmaintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/fxsrintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/gfniintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/hresetintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/ia32intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/immintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/keylockerintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/lwpintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/lzcntintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/mm_malloc.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/mmintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/movdirintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/movrsintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/mwaitintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/mwaitxintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/pconfigintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/pkuintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/pmmintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/popcntintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/prfchiintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/prfchwintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/raointintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/rdseedintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/rtmintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/serializeintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/sgxintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/sha512intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/shaintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/sm3intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/sm4intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/smmintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stdarg.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stdbool.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stddef.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/tbmintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/tmmintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/tsxldtrkintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/uintrintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/usermsrintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/vaesintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/vpclmulqdqintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/waitpkgintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/wbnoinvdintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/wmmintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/x86gprintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/xmmintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/xsavecintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/xsaveintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/xsaveoptintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/xsavesintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/xtestintrin.h +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/icon_utils.h diff --git a/build-linux/tests/CMakeFiles/test_importer.dir/__/src/db.cpp.o b/build-linux/tests/CMakeFiles/test_importer.dir/__/src/db.cpp.o new file mode 100644 index 00000000..db945ab6 Binary files /dev/null and b/build-linux/tests/CMakeFiles/test_importer.dir/__/src/db.cpp.o differ diff --git a/build-linux/tests/CMakeFiles/test_importer.dir/__/src/importer.cpp.o b/build-linux/tests/CMakeFiles/test_importer.dir/__/src/importer.cpp.o new file mode 100644 index 00000000..926ca8ba Binary files /dev/null and b/build-linux/tests/CMakeFiles/test_importer.dir/__/src/importer.cpp.o differ diff --git a/build-linux/tests/CMakeFiles/test_importer.dir/__/src/log_manager.cpp.o b/build-linux/tests/CMakeFiles/test_importer.dir/__/src/log_manager.cpp.o new file mode 100644 index 00000000..c74d4040 Binary files /dev/null and b/build-linux/tests/CMakeFiles/test_importer.dir/__/src/log_manager.cpp.o differ diff --git a/build-linux/tests/CMakeFiles/test_importer.dir/__/src/sequence_detector.cpp.o b/build-linux/tests/CMakeFiles/test_importer.dir/__/src/sequence_detector.cpp.o new file mode 100644 index 00000000..91c1adf9 Binary files /dev/null and b/build-linux/tests/CMakeFiles/test_importer.dir/__/src/sequence_detector.cpp.o differ diff --git a/build-linux/tests/CMakeFiles/test_importer.dir/test_importer.cpp.o b/build-linux/tests/CMakeFiles/test_importer.dir/test_importer.cpp.o new file mode 100644 index 00000000..c5818c97 Binary files /dev/null and b/build-linux/tests/CMakeFiles/test_importer.dir/test_importer.cpp.o differ diff --git a/build-linux/tests/CMakeFiles/test_importer.dir/test_importer_autogen/mocs_compilation.cpp.o b/build-linux/tests/CMakeFiles/test_importer.dir/test_importer_autogen/mocs_compilation.cpp.o new file mode 100644 index 00000000..679b5bf3 Binary files /dev/null and b/build-linux/tests/CMakeFiles/test_importer.dir/test_importer_autogen/mocs_compilation.cpp.o differ diff --git a/build-linux/tests/CMakeFiles/test_importer_autogen.dir/AutogenInfo.json b/build-linux/tests/CMakeFiles/test_importer_autogen.dir/AutogenInfo.json new file mode 100644 index 00000000..31c383f8 --- /dev/null +++ b/build-linux/tests/CMakeFiles/test_importer_autogen.dir/AutogenInfo.json @@ -0,0 +1,235 @@ +{ + "BUILD_DIR" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_importer_autogen", + "CMAKE_BINARY_DIR" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux", + "CMAKE_CURRENT_BINARY_DIR" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests", + "CMAKE_CURRENT_SOURCE_DIR" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests", + "CMAKE_EXECUTABLE" : "/usr/bin/cmake", + "CMAKE_LIST_FILES" : + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/CMakeLists.txt", + "/usr/lib64/cmake/Qt6/Qt6ConfigVersion.cmake", + "/usr/lib64/cmake/Qt6/Qt6ConfigVersionImpl.cmake", + "/usr/lib64/cmake/Qt6/Qt6Config.cmake", + "/usr/lib64/cmake/Qt6/QtPublicCMakeEarlyPolicyHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicCMakeHelpers.cmake", + "/usr/lib64/cmake/Qt6/Qt6ConfigExtras.cmake", + "/usr/lib64/cmake/Qt6/QtPublicCMakeVersionHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtInstallPaths.cmake", + "/usr/lib64/cmake/Qt6/Qt6Targets.cmake", + "/usr/lib64/cmake/Qt6/Qt6VersionlessAliasTargets.cmake", + "/usr/lib64/cmake/Qt6/QtFeature.cmake", + "/usr/share/cmake/Modules/CheckCXXCompilerFlag.cmake", + "/usr/lib64/cmake/Qt6/QtFeatureCommon.cmake", + "/usr/lib64/cmake/Qt6/QtPublicAndroidHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicAppleHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicCMakeHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicCMakeVersionHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicDependencyHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicExternalProjectHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicFinalizerHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicFindPackageHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicGitHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicPluginHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicPluginHelpers_v2.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomAttributionHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomBuildToolHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomCommonGenerationHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomCpeHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomCycloneDXHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomDocumentNamespaceHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomDepHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomExternalReferenceHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomFileHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomGenerationHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomGenerationCycloneDXHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomLicenseHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomOpsHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomPurlHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomPythonHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomQtEntityHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomRelationshipHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomSystemDepHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicTargetHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicTestHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicToolHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicWalkLibsHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicWindowsHelpers.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6/Qt6Dependencies.cmake", + "/usr/lib64/cmake/Qt6Test/Qt6TestConfigVersion.cmake", + "/usr/lib64/cmake/Qt6Test/Qt6TestConfigVersionImpl.cmake", + "/usr/lib64/cmake/Qt6Test/Qt6TestConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6Test/Qt6TestDependencies.cmake", + "/usr/lib64/cmake/Qt6Test/Qt6TestTargets.cmake", + "/usr/lib64/cmake/Qt6Test/Qt6TestTargets-relwithdebinfo.cmake", + "/usr/lib64/cmake/Qt6Test/Qt6TestAdditionalTargetInfo.cmake", + "/usr/lib64/cmake/Qt6Test/QtTestProperties.cmake", + "/usr/lib64/cmake/Qt6Test/Qt6TestVersionlessAliasTargets.cmake" + ], + "CMAKE_SOURCE_DIR" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6", + "CROSS_CONFIG" : false, + "DEP_FILE" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_importer_autogen/deps", + "DEP_FILE_RULE_NAME" : "test_importer_autogen/timestamp", + "HEADERS" : + [ + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/db.h", + "MU", + "VNU7RW3YIC/moc_db.cpp", + null + ], + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/file_utils.h", + "MU", + "VNU7RW3YIC/moc_file_utils.cpp", + null + ], + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/importer.h", + "MU", + "VNU7RW3YIC/moc_importer.cpp", + null + ], + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/log_manager.h", + "MU", + "VNU7RW3YIC/moc_log_manager.cpp", + null + ], + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/sequence_detector.h", + "MU", + "VNU7RW3YIC/moc_sequence_detector.cpp", + null + ] + ], + "HEADER_EXTENSIONS" : [ "h", "hh", "h++", "hm", "hpp", "hxx", "in", "txx" ], + "INCLUDE_DIR" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_importer_autogen/include", + "MOC_COMPILATION_FILE" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_importer_autogen/mocs_compilation.cpp", + "MOC_DEFINITIONS" : + [ + "FTK_API_GL_4_1", + "QT_CORE_LIB", + "QT_GUI_LIB", + "QT_NO_DEBUG", + "QT_SQL_LIB", + "QT_TESTCASE_BUILDDIR=\"/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests\"", + "QT_TESTCASE_SOURCEDIR=\"/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests\"", + "QT_TESTLIB_LIB", + "QT_WIDGETS_LIB", + "TLRENDER_EXR", + "TLRENDER_FFMPEG", + "TLRENDER_FFMPEG_PLUGIN", + "TLRENDER_JPEG", + "TLRENDER_OCIO", + "TLRENDER_OIIO", + "TLRENDER_PNG", + "TLRENDER_SDL2", + "TLRENDER_TIFF" + ], + "MOC_DEPEND_FILTERS" : + [ + [ + "Q_PLUGIN_METADATA", + "[\n][ \t]*Q_PLUGIN_METADATA[ \t]*\\([^\\)]*FILE[ \t]*\"([^\"]+)\"" + ] + ], + "MOC_INCLUDES" : + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src", + "/usr/include/qt6/QtTest", + "/usr/include/qt6", + "/usr/include/qt6/QtCore", + "/usr/lib64/qt6/mkspecs/linux-g++", + "/usr/include/qt6/QtSql", + "/usr/include/qt6/QtWidgets", + "/usr/include/qt6/QtGui", + "/usr/include", + "/usr/include/c++/15", + "/usr/include/c++/15/x86_64-redhat-linux", + "/usr/include/c++/15/backward", + "/usr/lib/gcc/x86_64-redhat-linux/15/include", + "/usr/local/include" + ], + "MOC_MACRO_NAMES" : + [ + "Q_OBJECT", + "Q_GADGET", + "Q_NAMESPACE", + "Q_NAMESPACE_EXPORT", + "Q_GADGET_EXPORT", + "Q_ENUM_NS" + ], + "MOC_OPTIONS" : [], + "MOC_PATH_PREFIX" : false, + "MOC_PREDEFS_CMD" : + [ + "/usr/bin/c++", + "-std=gnu++20", + "-w", + "-dM", + "-E", + "/usr/share/cmake/Modules/CMakeCXXCompilerABI.cpp" + ], + "MOC_PREDEFS_FILE" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_importer_autogen/moc_predefs.h", + "MOC_RELAXED_MODE" : false, + "MOC_SKIP" : + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_db_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_models_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_sequence_detector_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_simple_autogen/mocs_compilation.cpp" + ], + "MULTI_CONFIG" : false, + "PARALLEL" : 16, + "PARSE_CACHE_FILE" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/CMakeFiles/test_importer_autogen.dir/ParseCache.txt", + "QT_MOC_EXECUTABLE" : "/usr/lib64/qt6/libexec/moc", + "QT_UIC_EXECUTABLE" : "/usr/lib64/qt6/libexec/uic", + "QT_VERSION_MAJOR" : 6, + "QT_VERSION_MINOR" : 10, + "SETTINGS_FILE" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/CMakeFiles/test_importer_autogen.dir/AutogenUsed.txt", + "SOURCES" : + [ + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/db.cpp", + "MU", + null + ], + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/importer.cpp", + "MU", + null + ], + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/log_manager.cpp", + "MU", + null + ], + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/sequence_detector.cpp", + "MU", + null + ], + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/test_importer.cpp", + "MU", + null + ] + ], + "UIC_OPTIONS" : [], + "UIC_SEARCH_PATHS" : [], + "UIC_SKIP" : + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_db_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_models_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_sequence_detector_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_simple_autogen/mocs_compilation.cpp" + ], + "UIC_UI_FILES" : [], + "USE_BETTER_GRAPH" : true, + "VERBOSITY" : 0 +} diff --git a/build-linux/tests/CMakeFiles/test_importer_autogen.dir/AutogenUsed.txt b/build-linux/tests/CMakeFiles/test_importer_autogen.dir/AutogenUsed.txt new file mode 100644 index 00000000..fb07ad1b --- /dev/null +++ b/build-linux/tests/CMakeFiles/test_importer_autogen.dir/AutogenUsed.txt @@ -0,0 +1,2 @@ +moc:619a6fb05a1cdd0fae4708f88ac3504163a46186c3502dbdf3690ac43fcfe648 +uic:0df7b06f04b60705a14ff966fc10725af0fb193398324deeaf17e44a5f9db1e0 diff --git a/build-linux/tests/CMakeFiles/test_importer_autogen.dir/ParseCache.txt b/build-linux/tests/CMakeFiles/test_importer_autogen.dir/ParseCache.txt new file mode 100644 index 00000000..52b63726 --- /dev/null +++ b/build-linux/tests/CMakeFiles/test_importer_autogen.dir/ParseCache.txt @@ -0,0 +1,2326 @@ +# Generated by CMake. Changes will be overwritten. +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/sequence_detector.cpp +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/db.cpp +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/sequence_detector.h +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/log_manager.h + mmc:Q_OBJECT + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_importer_autogen/moc_predefs.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/log_manager.h + mdp:/usr/include/alloca.h + mdp:/usr/include/asm-generic/bitsperlong.h + mdp:/usr/include/asm-generic/errno-base.h + mdp:/usr/include/asm-generic/errno.h + mdp:/usr/include/asm-generic/int-ll64.h + mdp:/usr/include/asm-generic/posix_types.h + mdp:/usr/include/asm-generic/types.h + mdp:/usr/include/asm/bitsperlong.h + mdp:/usr/include/asm/errno.h + mdp:/usr/include/asm/posix_types.h + mdp:/usr/include/asm/posix_types_64.h + mdp:/usr/include/asm/types.h + mdp:/usr/include/asm/unistd.h + mdp:/usr/include/asm/unistd_64.h + mdp:/usr/include/assert.h + mdp:/usr/include/bits/atomic_wide_counter.h + mdp:/usr/include/bits/byteswap.h + mdp:/usr/include/bits/confname.h + mdp:/usr/include/bits/cpu-set.h + mdp:/usr/include/bits/endian.h + mdp:/usr/include/bits/endianness.h + mdp:/usr/include/bits/environments.h + mdp:/usr/include/bits/errno.h + mdp:/usr/include/bits/floatn-common.h + mdp:/usr/include/bits/floatn.h + mdp:/usr/include/bits/getopt_core.h + mdp:/usr/include/bits/getopt_posix.h + mdp:/usr/include/bits/libc-header-start.h + mdp:/usr/include/bits/local_lim.h + mdp:/usr/include/bits/locale.h + mdp:/usr/include/bits/long-double.h + mdp:/usr/include/bits/posix1_lim.h + mdp:/usr/include/bits/posix2_lim.h + mdp:/usr/include/bits/posix_opt.h + mdp:/usr/include/bits/pthread_stack_min-dynamic.h + mdp:/usr/include/bits/pthreadtypes-arch.h + mdp:/usr/include/bits/pthreadtypes.h + mdp:/usr/include/bits/sched.h + mdp:/usr/include/bits/select.h + mdp:/usr/include/bits/setjmp.h + mdp:/usr/include/bits/stdint-intn.h + mdp:/usr/include/bits/stdint-least.h + mdp:/usr/include/bits/stdint-uintn.h + mdp:/usr/include/bits/stdio_lim.h + mdp:/usr/include/bits/stdlib-float.h + mdp:/usr/include/bits/struct_mutex.h + mdp:/usr/include/bits/struct_rwlock.h + mdp:/usr/include/bits/syscall.h + mdp:/usr/include/bits/thread-shared-types.h + mdp:/usr/include/bits/time.h + mdp:/usr/include/bits/time64.h + mdp:/usr/include/bits/timesize.h + mdp:/usr/include/bits/timex.h + mdp:/usr/include/bits/types.h + mdp:/usr/include/bits/types/FILE.h + mdp:/usr/include/bits/types/__FILE.h + mdp:/usr/include/bits/types/__fpos64_t.h + mdp:/usr/include/bits/types/__fpos_t.h + mdp:/usr/include/bits/types/__locale_t.h + mdp:/usr/include/bits/types/__mbstate_t.h + mdp:/usr/include/bits/types/__sigset_t.h + mdp:/usr/include/bits/types/clock_t.h + mdp:/usr/include/bits/types/clockid_t.h + mdp:/usr/include/bits/types/cookie_io_functions_t.h + mdp:/usr/include/bits/types/error_t.h + mdp:/usr/include/bits/types/locale_t.h + mdp:/usr/include/bits/types/mbstate_t.h + mdp:/usr/include/bits/types/sigset_t.h + mdp:/usr/include/bits/types/struct_FILE.h + mdp:/usr/include/bits/types/struct___jmp_buf_tag.h + mdp:/usr/include/bits/types/struct_itimerspec.h + mdp:/usr/include/bits/types/struct_sched_param.h + mdp:/usr/include/bits/types/struct_timespec.h + mdp:/usr/include/bits/types/struct_timeval.h + mdp:/usr/include/bits/types/struct_tm.h + mdp:/usr/include/bits/types/time_t.h + mdp:/usr/include/bits/types/timer_t.h + mdp:/usr/include/bits/types/wint_t.h + mdp:/usr/include/bits/typesizes.h + mdp:/usr/include/bits/uintn-identity.h + mdp:/usr/include/bits/uio_lim.h + mdp:/usr/include/bits/unistd_ext.h + mdp:/usr/include/bits/waitflags.h + mdp:/usr/include/bits/waitstatus.h + mdp:/usr/include/bits/wchar.h + mdp:/usr/include/bits/wctype-wchar.h + mdp:/usr/include/bits/wordsize.h + mdp:/usr/include/bits/xopen_lim.h + mdp:/usr/include/c++/15/algorithm + mdp:/usr/include/c++/15/array + mdp:/usr/include/c++/15/atomic + mdp:/usr/include/c++/15/backward/auto_ptr.h + mdp:/usr/include/c++/15/backward/binders.h + mdp:/usr/include/c++/15/bit + mdp:/usr/include/c++/15/bits/algorithmfwd.h + mdp:/usr/include/c++/15/bits/align.h + mdp:/usr/include/c++/15/bits/alloc_traits.h + mdp:/usr/include/c++/15/bits/allocated_ptr.h + mdp:/usr/include/c++/15/bits/allocator.h + mdp:/usr/include/c++/15/bits/atomic_base.h + mdp:/usr/include/c++/15/bits/atomic_lockfree_defines.h + mdp:/usr/include/c++/15/bits/atomic_wait.h + mdp:/usr/include/c++/15/bits/basic_ios.h + mdp:/usr/include/c++/15/bits/basic_ios.tcc + mdp:/usr/include/c++/15/bits/basic_string.h + mdp:/usr/include/c++/15/bits/basic_string.tcc + mdp:/usr/include/c++/15/bits/char_traits.h + mdp:/usr/include/c++/15/bits/charconv.h + mdp:/usr/include/c++/15/bits/chrono.h + mdp:/usr/include/c++/15/bits/chrono_io.h + mdp:/usr/include/c++/15/bits/codecvt.h + mdp:/usr/include/c++/15/bits/concept_check.h + mdp:/usr/include/c++/15/bits/cpp_type_traits.h + mdp:/usr/include/c++/15/bits/cxxabi_forced.h + mdp:/usr/include/c++/15/bits/cxxabi_init_exception.h + mdp:/usr/include/c++/15/bits/enable_special_members.h + mdp:/usr/include/c++/15/bits/erase_if.h + mdp:/usr/include/c++/15/bits/exception.h + mdp:/usr/include/c++/15/bits/exception_defines.h + mdp:/usr/include/c++/15/bits/exception_ptr.h + mdp:/usr/include/c++/15/bits/functexcept.h + mdp:/usr/include/c++/15/bits/functional_hash.h + mdp:/usr/include/c++/15/bits/hash_bytes.h + mdp:/usr/include/c++/15/bits/hashtable.h + mdp:/usr/include/c++/15/bits/hashtable_policy.h + mdp:/usr/include/c++/15/bits/invoke.h + mdp:/usr/include/c++/15/bits/ios_base.h + mdp:/usr/include/c++/15/bits/istream.tcc + mdp:/usr/include/c++/15/bits/iterator_concepts.h + mdp:/usr/include/c++/15/bits/list.tcc + mdp:/usr/include/c++/15/bits/locale_classes.h + mdp:/usr/include/c++/15/bits/locale_classes.tcc + mdp:/usr/include/c++/15/bits/locale_conv.h + mdp:/usr/include/c++/15/bits/locale_facets.h + mdp:/usr/include/c++/15/bits/locale_facets.tcc + mdp:/usr/include/c++/15/bits/locale_facets_nonio.h + mdp:/usr/include/c++/15/bits/locale_facets_nonio.tcc + mdp:/usr/include/c++/15/bits/localefwd.h + mdp:/usr/include/c++/15/bits/max_size_type.h + mdp:/usr/include/c++/15/bits/memory_resource.h + mdp:/usr/include/c++/15/bits/memoryfwd.h + mdp:/usr/include/c++/15/bits/move.h + mdp:/usr/include/c++/15/bits/nested_exception.h + mdp:/usr/include/c++/15/bits/new_allocator.h + mdp:/usr/include/c++/15/bits/node_handle.h + mdp:/usr/include/c++/15/bits/ostream.h + mdp:/usr/include/c++/15/bits/ostream.tcc + mdp:/usr/include/c++/15/bits/ostream_insert.h + mdp:/usr/include/c++/15/bits/parse_numbers.h + mdp:/usr/include/c++/15/bits/postypes.h + mdp:/usr/include/c++/15/bits/predefined_ops.h + mdp:/usr/include/c++/15/bits/ptr_traits.h + mdp:/usr/include/c++/15/bits/quoted_string.h + mdp:/usr/include/c++/15/bits/range_access.h + mdp:/usr/include/c++/15/bits/ranges_algo.h + mdp:/usr/include/c++/15/bits/ranges_algobase.h + mdp:/usr/include/c++/15/bits/ranges_base.h + mdp:/usr/include/c++/15/bits/ranges_cmp.h + mdp:/usr/include/c++/15/bits/ranges_uninitialized.h + mdp:/usr/include/c++/15/bits/ranges_util.h + mdp:/usr/include/c++/15/bits/refwrap.h + mdp:/usr/include/c++/15/bits/requires_hosted.h + mdp:/usr/include/c++/15/bits/shared_ptr.h + mdp:/usr/include/c++/15/bits/shared_ptr_atomic.h + mdp:/usr/include/c++/15/bits/shared_ptr_base.h + mdp:/usr/include/c++/15/bits/specfun.h + mdp:/usr/include/c++/15/bits/sstream.tcc + mdp:/usr/include/c++/15/bits/std_abs.h + mdp:/usr/include/c++/15/bits/std_function.h + mdp:/usr/include/c++/15/bits/std_mutex.h + mdp:/usr/include/c++/15/bits/stl_algo.h + mdp:/usr/include/c++/15/bits/stl_algobase.h + mdp:/usr/include/c++/15/bits/stl_bvector.h + mdp:/usr/include/c++/15/bits/stl_construct.h + mdp:/usr/include/c++/15/bits/stl_function.h + mdp:/usr/include/c++/15/bits/stl_heap.h + mdp:/usr/include/c++/15/bits/stl_iterator.h + mdp:/usr/include/c++/15/bits/stl_iterator_base_funcs.h + mdp:/usr/include/c++/15/bits/stl_iterator_base_types.h + mdp:/usr/include/c++/15/bits/stl_list.h + mdp:/usr/include/c++/15/bits/stl_map.h + mdp:/usr/include/c++/15/bits/stl_multimap.h + mdp:/usr/include/c++/15/bits/stl_multiset.h + mdp:/usr/include/c++/15/bits/stl_numeric.h + mdp:/usr/include/c++/15/bits/stl_pair.h + mdp:/usr/include/c++/15/bits/stl_raw_storage_iter.h + mdp:/usr/include/c++/15/bits/stl_relops.h + mdp:/usr/include/c++/15/bits/stl_set.h + mdp:/usr/include/c++/15/bits/stl_tempbuf.h + mdp:/usr/include/c++/15/bits/stl_tree.h + mdp:/usr/include/c++/15/bits/stl_uninitialized.h + mdp:/usr/include/c++/15/bits/stl_vector.h + mdp:/usr/include/c++/15/bits/stream_iterator.h + mdp:/usr/include/c++/15/bits/streambuf.tcc + mdp:/usr/include/c++/15/bits/streambuf_iterator.h + mdp:/usr/include/c++/15/bits/string_view.tcc + mdp:/usr/include/c++/15/bits/stringfwd.h + mdp:/usr/include/c++/15/bits/uniform_int_dist.h + mdp:/usr/include/c++/15/bits/unique_ptr.h + mdp:/usr/include/c++/15/bits/unordered_map.h + mdp:/usr/include/c++/15/bits/unordered_set.h + mdp:/usr/include/c++/15/bits/uses_allocator.h + mdp:/usr/include/c++/15/bits/uses_allocator_args.h + mdp:/usr/include/c++/15/bits/utility.h + mdp:/usr/include/c++/15/bits/vector.tcc + mdp:/usr/include/c++/15/bits/version.h + mdp:/usr/include/c++/15/cassert + mdp:/usr/include/c++/15/cctype + mdp:/usr/include/c++/15/cerrno + mdp:/usr/include/c++/15/charconv + mdp:/usr/include/c++/15/chrono + mdp:/usr/include/c++/15/climits + mdp:/usr/include/c++/15/clocale + mdp:/usr/include/c++/15/cmath + mdp:/usr/include/c++/15/compare + mdp:/usr/include/c++/15/concepts + mdp:/usr/include/c++/15/cstddef + mdp:/usr/include/c++/15/cstdint + mdp:/usr/include/c++/15/cstdio + mdp:/usr/include/c++/15/cstdlib + mdp:/usr/include/c++/15/cstring + mdp:/usr/include/c++/15/ctime + mdp:/usr/include/c++/15/cwchar + mdp:/usr/include/c++/15/cwctype + mdp:/usr/include/c++/15/debug/assertions.h + mdp:/usr/include/c++/15/debug/debug.h + mdp:/usr/include/c++/15/exception + mdp:/usr/include/c++/15/ext/aligned_buffer.h + mdp:/usr/include/c++/15/ext/alloc_traits.h + mdp:/usr/include/c++/15/ext/atomicity.h + mdp:/usr/include/c++/15/ext/concurrence.h + mdp:/usr/include/c++/15/ext/numeric_traits.h + mdp:/usr/include/c++/15/ext/string_conversions.h + mdp:/usr/include/c++/15/ext/type_traits.h + mdp:/usr/include/c++/15/filesystem + mdp:/usr/include/c++/15/format + mdp:/usr/include/c++/15/functional + mdp:/usr/include/c++/15/initializer_list + mdp:/usr/include/c++/15/iomanip + mdp:/usr/include/c++/15/ios + mdp:/usr/include/c++/15/iosfwd + mdp:/usr/include/c++/15/istream + mdp:/usr/include/c++/15/iterator + mdp:/usr/include/c++/15/limits + mdp:/usr/include/c++/15/list + mdp:/usr/include/c++/15/locale + mdp:/usr/include/c++/15/map + mdp:/usr/include/c++/15/memory + mdp:/usr/include/c++/15/new + mdp:/usr/include/c++/15/numeric + mdp:/usr/include/c++/15/optional + mdp:/usr/include/c++/15/ostream + mdp:/usr/include/c++/15/pstl/execution_defs.h + mdp:/usr/include/c++/15/pstl/glue_numeric_defs.h + mdp:/usr/include/c++/15/pstl/pstl_config.h + mdp:/usr/include/c++/15/ratio + mdp:/usr/include/c++/15/set + mdp:/usr/include/c++/15/sstream + mdp:/usr/include/c++/15/stdexcept + mdp:/usr/include/c++/15/streambuf + mdp:/usr/include/c++/15/string + mdp:/usr/include/c++/15/string_view + mdp:/usr/include/c++/15/system_error + mdp:/usr/include/c++/15/tr1/bessel_function.tcc + mdp:/usr/include/c++/15/tr1/beta_function.tcc + mdp:/usr/include/c++/15/tr1/ell_integral.tcc + mdp:/usr/include/c++/15/tr1/exp_integral.tcc + mdp:/usr/include/c++/15/tr1/gamma.tcc + mdp:/usr/include/c++/15/tr1/hypergeometric.tcc + mdp:/usr/include/c++/15/tr1/legendre_function.tcc + mdp:/usr/include/c++/15/tr1/modified_bessel_func.tcc + mdp:/usr/include/c++/15/tr1/poly_hermite.tcc + mdp:/usr/include/c++/15/tr1/poly_laguerre.tcc + mdp:/usr/include/c++/15/tr1/riemann_zeta.tcc + mdp:/usr/include/c++/15/tr1/special_function_util.h + mdp:/usr/include/c++/15/tuple + mdp:/usr/include/c++/15/type_traits + mdp:/usr/include/c++/15/typeinfo + mdp:/usr/include/c++/15/unordered_map + mdp:/usr/include/c++/15/unordered_set + mdp:/usr/include/c++/15/utility + mdp:/usr/include/c++/15/variant + mdp:/usr/include/c++/15/vector + mdp:/usr/include/c++/15/version + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/atomic_word.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++allocator.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++config.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++locale.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/cpu_defines.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/ctype_base.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/ctype_inline.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/error_constants.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/gthr-default.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/gthr.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/messages_members.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/os_defines.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/time_members.h + mdp:/usr/include/ctype.h + mdp:/usr/include/endian.h + mdp:/usr/include/errno.h + mdp:/usr/include/features-time64.h + mdp:/usr/include/features.h + mdp:/usr/include/gnu/stubs-64.h + mdp:/usr/include/gnu/stubs.h + mdp:/usr/include/libintl.h + mdp:/usr/include/limits.h + mdp:/usr/include/linux/close_range.h + mdp:/usr/include/linux/errno.h + mdp:/usr/include/linux/limits.h + mdp:/usr/include/linux/posix_types.h + mdp:/usr/include/linux/sched/types.h + mdp:/usr/include/linux/stddef.h + mdp:/usr/include/linux/types.h + mdp:/usr/include/locale.h + mdp:/usr/include/pthread.h + mdp:/usr/include/qt6/QtCore/QDateTime + mdp:/usr/include/qt6/QtCore/QFile + mdp:/usr/include/qt6/QtCore/QMutex + mdp:/usr/include/qt6/QtCore/QObject + mdp:/usr/include/qt6/QtCore/QStringList + mdp:/usr/include/qt6/QtCore/QTextStream + mdp:/usr/include/qt6/QtCore/q17memory.h + mdp:/usr/include/qt6/QtCore/q20functional.h + mdp:/usr/include/qt6/QtCore/q20iterator.h + mdp:/usr/include/qt6/QtCore/q20memory.h + mdp:/usr/include/qt6/QtCore/q20type_traits.h + mdp:/usr/include/qt6/QtCore/q20utility.h + mdp:/usr/include/qt6/QtCore/q23type_traits.h + mdp:/usr/include/qt6/QtCore/q23utility.h + mdp:/usr/include/qt6/QtCore/qalgorithms.h + mdp:/usr/include/qt6/QtCore/qalloc.h + mdp:/usr/include/qt6/QtCore/qanystringview.h + mdp:/usr/include/qt6/QtCore/qarraydata.h + mdp:/usr/include/qt6/QtCore/qarraydataops.h + mdp:/usr/include/qt6/QtCore/qarraydatapointer.h + mdp:/usr/include/qt6/QtCore/qassert.h + mdp:/usr/include/qt6/QtCore/qatomic.h + mdp:/usr/include/qt6/QtCore/qatomic_cxx11.h + mdp:/usr/include/qt6/QtCore/qbasicatomic.h + mdp:/usr/include/qt6/QtCore/qbindingstorage.h + mdp:/usr/include/qt6/QtCore/qbytearray.h + mdp:/usr/include/qt6/QtCore/qbytearrayalgorithms.h + mdp:/usr/include/qt6/QtCore/qbytearraylist.h + mdp:/usr/include/qt6/QtCore/qbytearrayview.h + mdp:/usr/include/qt6/QtCore/qcalendar.h + mdp:/usr/include/qt6/QtCore/qchar.h + mdp:/usr/include/qt6/QtCore/qcompare.h + mdp:/usr/include/qt6/QtCore/qcompare_impl.h + mdp:/usr/include/qt6/QtCore/qcomparehelpers.h + mdp:/usr/include/qt6/QtCore/qcompilerdetection.h + mdp:/usr/include/qt6/QtCore/qconfig-64.h + mdp:/usr/include/qt6/QtCore/qconfig.h + mdp:/usr/include/qt6/QtCore/qconstructormacros.h + mdp:/usr/include/qt6/QtCore/qcontainerfwd.h + mdp:/usr/include/qt6/QtCore/qcontainerinfo.h + mdp:/usr/include/qt6/QtCore/qcontainertools_impl.h + mdp:/usr/include/qt6/QtCore/qcontiguouscache.h + mdp:/usr/include/qt6/QtCore/qdarwinhelpers.h + mdp:/usr/include/qt6/QtCore/qdatastream.h + mdp:/usr/include/qt6/QtCore/qdatetime.h + mdp:/usr/include/qt6/QtCore/qdeadlinetimer.h + mdp:/usr/include/qt6/QtCore/qdebug.h + mdp:/usr/include/qt6/QtCore/qexceptionhandling.h + mdp:/usr/include/qt6/QtCore/qfile.h + mdp:/usr/include/qt6/QtCore/qfiledevice.h + mdp:/usr/include/qt6/QtCore/qflags.h + mdp:/usr/include/qt6/QtCore/qfloat16.h + mdp:/usr/include/qt6/QtCore/qforeach.h + mdp:/usr/include/qt6/QtCore/qfunctionaltools_impl.h + mdp:/usr/include/qt6/QtCore/qfunctionpointer.h + mdp:/usr/include/qt6/QtCore/qgenericatomic.h + mdp:/usr/include/qt6/QtCore/qglobal.h + mdp:/usr/include/qt6/QtCore/qglobalstatic.h + mdp:/usr/include/qt6/QtCore/qhash.h + mdp:/usr/include/qt6/QtCore/qhashfunctions.h + mdp:/usr/include/qt6/QtCore/qiodevice.h + mdp:/usr/include/qt6/QtCore/qiodevicebase.h + mdp:/usr/include/qt6/QtCore/qiterable.h + mdp:/usr/include/qt6/QtCore/qiterator.h + mdp:/usr/include/qt6/QtCore/qlatin1stringview.h + mdp:/usr/include/qt6/QtCore/qlist.h + mdp:/usr/include/qt6/QtCore/qlocale.h + mdp:/usr/include/qt6/QtCore/qlogging.h + mdp:/usr/include/qt6/QtCore/qmalloc.h + mdp:/usr/include/qt6/QtCore/qmap.h + mdp:/usr/include/qt6/QtCore/qmath.h + mdp:/usr/include/qt6/QtCore/qmetacontainer.h + mdp:/usr/include/qt6/QtCore/qmetatype.h + mdp:/usr/include/qt6/QtCore/qminmax.h + mdp:/usr/include/qt6/QtCore/qmutex.h + mdp:/usr/include/qt6/QtCore/qnamespace.h + mdp:/usr/include/qt6/QtCore/qnumeric.h + mdp:/usr/include/qt6/QtCore/qobject.h + mdp:/usr/include/qt6/QtCore/qobject_impl.h + mdp:/usr/include/qt6/QtCore/qobjectdefs.h + mdp:/usr/include/qt6/QtCore/qobjectdefs_impl.h + mdp:/usr/include/qt6/QtCore/qoverload.h + mdp:/usr/include/qt6/QtCore/qpair.h + mdp:/usr/include/qt6/QtCore/qprocessordetection.h + mdp:/usr/include/qt6/QtCore/qrefcount.h + mdp:/usr/include/qt6/QtCore/qscopedpointer.h + mdp:/usr/include/qt6/QtCore/qscopeguard.h + mdp:/usr/include/qt6/QtCore/qset.h + mdp:/usr/include/qt6/QtCore/qshareddata.h + mdp:/usr/include/qt6/QtCore/qshareddata_impl.h + mdp:/usr/include/qt6/QtCore/qsharedpointer.h + mdp:/usr/include/qt6/QtCore/qsharedpointer_impl.h + mdp:/usr/include/qt6/QtCore/qspan.h + mdp:/usr/include/qt6/QtCore/qstdlibdetection.h + mdp:/usr/include/qt6/QtCore/qstring.h + mdp:/usr/include/qt6/QtCore/qstringalgorithms.h + mdp:/usr/include/qt6/QtCore/qstringbuilder.h + mdp:/usr/include/qt6/QtCore/qstringconverter.h + mdp:/usr/include/qt6/QtCore/qstringconverter_base.h + mdp:/usr/include/qt6/QtCore/qstringfwd.h + mdp:/usr/include/qt6/QtCore/qstringlist.h + mdp:/usr/include/qt6/QtCore/qstringmatcher.h + mdp:/usr/include/qt6/QtCore/qstringtokenizer.h + mdp:/usr/include/qt6/QtCore/qstringview.h + mdp:/usr/include/qt6/QtCore/qswap.h + mdp:/usr/include/qt6/QtCore/qsysinfo.h + mdp:/usr/include/qt6/QtCore/qsystemdetection.h + mdp:/usr/include/qt6/QtCore/qtaggedpointer.h + mdp:/usr/include/qt6/QtCore/qtclasshelpermacros.h + mdp:/usr/include/qt6/QtCore/qtconfiginclude.h + mdp:/usr/include/qt6/QtCore/qtconfigmacros.h + mdp:/usr/include/qt6/QtCore/qtcore-config.h + mdp:/usr/include/qt6/QtCore/qtcoreexports.h + mdp:/usr/include/qt6/QtCore/qtcoreglobal.h + mdp:/usr/include/qt6/QtCore/qtdeprecationdefinitions.h + mdp:/usr/include/qt6/QtCore/qtdeprecationmarkers.h + mdp:/usr/include/qt6/QtCore/qtenvironmentvariables.h + mdp:/usr/include/qt6/QtCore/qtextstream.h + mdp:/usr/include/qt6/QtCore/qtformat_impl.h + mdp:/usr/include/qt6/QtCore/qtmetamacros.h + mdp:/usr/include/qt6/QtCore/qtnoop.h + mdp:/usr/include/qt6/QtCore/qtpreprocessorsupport.h + mdp:/usr/include/qt6/QtCore/qtresource.h + mdp:/usr/include/qt6/QtCore/qtsan_impl.h + mdp:/usr/include/qt6/QtCore/qttranslation.h + mdp:/usr/include/qt6/QtCore/qttypetraits.h + mdp:/usr/include/qt6/QtCore/qtversion.h + mdp:/usr/include/qt6/QtCore/qtversionchecks.h + mdp:/usr/include/qt6/QtCore/qtypeinfo.h + mdp:/usr/include/qt6/QtCore/qtypes.h + mdp:/usr/include/qt6/QtCore/qutf8stringview.h + mdp:/usr/include/qt6/QtCore/qvariant.h + mdp:/usr/include/qt6/QtCore/qvarlengtharray.h + mdp:/usr/include/qt6/QtCore/qversiontagging.h + mdp:/usr/include/qt6/QtCore/qxptype_traits.h + mdp:/usr/include/qt6/QtCore/qyieldcpu.h + mdp:/usr/include/sched.h + mdp:/usr/include/stdc-predef.h + mdp:/usr/include/stdint.h + mdp:/usr/include/stdio.h + mdp:/usr/include/stdlib.h + mdp:/usr/include/string.h + mdp:/usr/include/strings.h + mdp:/usr/include/sys/cdefs.h + mdp:/usr/include/sys/select.h + mdp:/usr/include/sys/single_threaded.h + mdp:/usr/include/sys/syscall.h + mdp:/usr/include/sys/types.h + mdp:/usr/include/syscall.h + mdp:/usr/include/time.h + mdp:/usr/include/unistd.h + mdp:/usr/include/wchar.h + mdp:/usr/include/wctype.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stdarg.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stdbool.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stddef.h +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/importer.h + mmc:Q_OBJECT + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_importer_autogen/moc_predefs.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/importer.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/sequence_detector.h + mdp:/usr/include/alloca.h + mdp:/usr/include/asm-generic/bitsperlong.h + mdp:/usr/include/asm-generic/errno-base.h + mdp:/usr/include/asm-generic/errno.h + mdp:/usr/include/asm-generic/int-ll64.h + mdp:/usr/include/asm-generic/posix_types.h + mdp:/usr/include/asm-generic/types.h + mdp:/usr/include/asm/bitsperlong.h + mdp:/usr/include/asm/errno.h + mdp:/usr/include/asm/posix_types.h + mdp:/usr/include/asm/posix_types_64.h + mdp:/usr/include/asm/types.h + mdp:/usr/include/asm/unistd.h + mdp:/usr/include/asm/unistd_64.h + mdp:/usr/include/assert.h + mdp:/usr/include/bits/atomic_wide_counter.h + mdp:/usr/include/bits/byteswap.h + mdp:/usr/include/bits/confname.h + mdp:/usr/include/bits/cpu-set.h + mdp:/usr/include/bits/endian.h + mdp:/usr/include/bits/endianness.h + mdp:/usr/include/bits/environments.h + mdp:/usr/include/bits/errno.h + mdp:/usr/include/bits/floatn-common.h + mdp:/usr/include/bits/floatn.h + mdp:/usr/include/bits/getopt_core.h + mdp:/usr/include/bits/getopt_posix.h + mdp:/usr/include/bits/libc-header-start.h + mdp:/usr/include/bits/local_lim.h + mdp:/usr/include/bits/locale.h + mdp:/usr/include/bits/long-double.h + mdp:/usr/include/bits/posix1_lim.h + mdp:/usr/include/bits/posix2_lim.h + mdp:/usr/include/bits/posix_opt.h + mdp:/usr/include/bits/pthread_stack_min-dynamic.h + mdp:/usr/include/bits/pthreadtypes-arch.h + mdp:/usr/include/bits/pthreadtypes.h + mdp:/usr/include/bits/sched.h + mdp:/usr/include/bits/select.h + mdp:/usr/include/bits/setjmp.h + mdp:/usr/include/bits/stdint-intn.h + mdp:/usr/include/bits/stdint-least.h + mdp:/usr/include/bits/stdint-uintn.h + mdp:/usr/include/bits/stdio_lim.h + mdp:/usr/include/bits/stdlib-float.h + mdp:/usr/include/bits/struct_mutex.h + mdp:/usr/include/bits/struct_rwlock.h + mdp:/usr/include/bits/syscall.h + mdp:/usr/include/bits/thread-shared-types.h + mdp:/usr/include/bits/time.h + mdp:/usr/include/bits/time64.h + mdp:/usr/include/bits/timesize.h + mdp:/usr/include/bits/timex.h + mdp:/usr/include/bits/types.h + mdp:/usr/include/bits/types/FILE.h + mdp:/usr/include/bits/types/__FILE.h + mdp:/usr/include/bits/types/__fpos64_t.h + mdp:/usr/include/bits/types/__fpos_t.h + mdp:/usr/include/bits/types/__locale_t.h + mdp:/usr/include/bits/types/__mbstate_t.h + mdp:/usr/include/bits/types/__sigset_t.h + mdp:/usr/include/bits/types/clock_t.h + mdp:/usr/include/bits/types/clockid_t.h + mdp:/usr/include/bits/types/cookie_io_functions_t.h + mdp:/usr/include/bits/types/error_t.h + mdp:/usr/include/bits/types/locale_t.h + mdp:/usr/include/bits/types/mbstate_t.h + mdp:/usr/include/bits/types/sigset_t.h + mdp:/usr/include/bits/types/struct_FILE.h + mdp:/usr/include/bits/types/struct___jmp_buf_tag.h + mdp:/usr/include/bits/types/struct_itimerspec.h + mdp:/usr/include/bits/types/struct_sched_param.h + mdp:/usr/include/bits/types/struct_timespec.h + mdp:/usr/include/bits/types/struct_timeval.h + mdp:/usr/include/bits/types/struct_tm.h + mdp:/usr/include/bits/types/time_t.h + mdp:/usr/include/bits/types/timer_t.h + mdp:/usr/include/bits/types/wint_t.h + mdp:/usr/include/bits/typesizes.h + mdp:/usr/include/bits/uintn-identity.h + mdp:/usr/include/bits/uio_lim.h + mdp:/usr/include/bits/unistd_ext.h + mdp:/usr/include/bits/waitflags.h + mdp:/usr/include/bits/waitstatus.h + mdp:/usr/include/bits/wchar.h + mdp:/usr/include/bits/wctype-wchar.h + mdp:/usr/include/bits/wordsize.h + mdp:/usr/include/bits/xopen_lim.h + mdp:/usr/include/c++/15/algorithm + mdp:/usr/include/c++/15/array + mdp:/usr/include/c++/15/atomic + mdp:/usr/include/c++/15/backward/auto_ptr.h + mdp:/usr/include/c++/15/backward/binders.h + mdp:/usr/include/c++/15/bit + mdp:/usr/include/c++/15/bits/algorithmfwd.h + mdp:/usr/include/c++/15/bits/align.h + mdp:/usr/include/c++/15/bits/alloc_traits.h + mdp:/usr/include/c++/15/bits/allocated_ptr.h + mdp:/usr/include/c++/15/bits/allocator.h + mdp:/usr/include/c++/15/bits/atomic_base.h + mdp:/usr/include/c++/15/bits/atomic_lockfree_defines.h + mdp:/usr/include/c++/15/bits/atomic_wait.h + mdp:/usr/include/c++/15/bits/basic_ios.h + mdp:/usr/include/c++/15/bits/basic_ios.tcc + mdp:/usr/include/c++/15/bits/basic_string.h + mdp:/usr/include/c++/15/bits/basic_string.tcc + mdp:/usr/include/c++/15/bits/char_traits.h + mdp:/usr/include/c++/15/bits/charconv.h + mdp:/usr/include/c++/15/bits/chrono.h + mdp:/usr/include/c++/15/bits/chrono_io.h + mdp:/usr/include/c++/15/bits/codecvt.h + mdp:/usr/include/c++/15/bits/concept_check.h + mdp:/usr/include/c++/15/bits/cpp_type_traits.h + mdp:/usr/include/c++/15/bits/cxxabi_forced.h + mdp:/usr/include/c++/15/bits/cxxabi_init_exception.h + mdp:/usr/include/c++/15/bits/enable_special_members.h + mdp:/usr/include/c++/15/bits/erase_if.h + mdp:/usr/include/c++/15/bits/exception.h + mdp:/usr/include/c++/15/bits/exception_defines.h + mdp:/usr/include/c++/15/bits/exception_ptr.h + mdp:/usr/include/c++/15/bits/functexcept.h + mdp:/usr/include/c++/15/bits/functional_hash.h + mdp:/usr/include/c++/15/bits/hash_bytes.h + mdp:/usr/include/c++/15/bits/hashtable.h + mdp:/usr/include/c++/15/bits/hashtable_policy.h + mdp:/usr/include/c++/15/bits/invoke.h + mdp:/usr/include/c++/15/bits/ios_base.h + mdp:/usr/include/c++/15/bits/istream.tcc + mdp:/usr/include/c++/15/bits/iterator_concepts.h + mdp:/usr/include/c++/15/bits/list.tcc + mdp:/usr/include/c++/15/bits/locale_classes.h + mdp:/usr/include/c++/15/bits/locale_classes.tcc + mdp:/usr/include/c++/15/bits/locale_conv.h + mdp:/usr/include/c++/15/bits/locale_facets.h + mdp:/usr/include/c++/15/bits/locale_facets.tcc + mdp:/usr/include/c++/15/bits/locale_facets_nonio.h + mdp:/usr/include/c++/15/bits/locale_facets_nonio.tcc + mdp:/usr/include/c++/15/bits/localefwd.h + mdp:/usr/include/c++/15/bits/max_size_type.h + mdp:/usr/include/c++/15/bits/memory_resource.h + mdp:/usr/include/c++/15/bits/memoryfwd.h + mdp:/usr/include/c++/15/bits/move.h + mdp:/usr/include/c++/15/bits/nested_exception.h + mdp:/usr/include/c++/15/bits/new_allocator.h + mdp:/usr/include/c++/15/bits/node_handle.h + mdp:/usr/include/c++/15/bits/ostream.h + mdp:/usr/include/c++/15/bits/ostream.tcc + mdp:/usr/include/c++/15/bits/ostream_insert.h + mdp:/usr/include/c++/15/bits/parse_numbers.h + mdp:/usr/include/c++/15/bits/postypes.h + mdp:/usr/include/c++/15/bits/predefined_ops.h + mdp:/usr/include/c++/15/bits/ptr_traits.h + mdp:/usr/include/c++/15/bits/quoted_string.h + mdp:/usr/include/c++/15/bits/range_access.h + mdp:/usr/include/c++/15/bits/ranges_algo.h + mdp:/usr/include/c++/15/bits/ranges_algobase.h + mdp:/usr/include/c++/15/bits/ranges_base.h + mdp:/usr/include/c++/15/bits/ranges_cmp.h + mdp:/usr/include/c++/15/bits/ranges_uninitialized.h + mdp:/usr/include/c++/15/bits/ranges_util.h + mdp:/usr/include/c++/15/bits/refwrap.h + mdp:/usr/include/c++/15/bits/requires_hosted.h + mdp:/usr/include/c++/15/bits/shared_ptr.h + mdp:/usr/include/c++/15/bits/shared_ptr_atomic.h + mdp:/usr/include/c++/15/bits/shared_ptr_base.h + mdp:/usr/include/c++/15/bits/specfun.h + mdp:/usr/include/c++/15/bits/sstream.tcc + mdp:/usr/include/c++/15/bits/std_abs.h + mdp:/usr/include/c++/15/bits/std_function.h + mdp:/usr/include/c++/15/bits/std_mutex.h + mdp:/usr/include/c++/15/bits/stl_algo.h + mdp:/usr/include/c++/15/bits/stl_algobase.h + mdp:/usr/include/c++/15/bits/stl_bvector.h + mdp:/usr/include/c++/15/bits/stl_construct.h + mdp:/usr/include/c++/15/bits/stl_function.h + mdp:/usr/include/c++/15/bits/stl_heap.h + mdp:/usr/include/c++/15/bits/stl_iterator.h + mdp:/usr/include/c++/15/bits/stl_iterator_base_funcs.h + mdp:/usr/include/c++/15/bits/stl_iterator_base_types.h + mdp:/usr/include/c++/15/bits/stl_list.h + mdp:/usr/include/c++/15/bits/stl_map.h + mdp:/usr/include/c++/15/bits/stl_multimap.h + mdp:/usr/include/c++/15/bits/stl_multiset.h + mdp:/usr/include/c++/15/bits/stl_numeric.h + mdp:/usr/include/c++/15/bits/stl_pair.h + mdp:/usr/include/c++/15/bits/stl_raw_storage_iter.h + mdp:/usr/include/c++/15/bits/stl_relops.h + mdp:/usr/include/c++/15/bits/stl_set.h + mdp:/usr/include/c++/15/bits/stl_tempbuf.h + mdp:/usr/include/c++/15/bits/stl_tree.h + mdp:/usr/include/c++/15/bits/stl_uninitialized.h + mdp:/usr/include/c++/15/bits/stl_vector.h + mdp:/usr/include/c++/15/bits/stream_iterator.h + mdp:/usr/include/c++/15/bits/streambuf.tcc + mdp:/usr/include/c++/15/bits/streambuf_iterator.h + mdp:/usr/include/c++/15/bits/string_view.tcc + mdp:/usr/include/c++/15/bits/stringfwd.h + mdp:/usr/include/c++/15/bits/uniform_int_dist.h + mdp:/usr/include/c++/15/bits/unique_ptr.h + mdp:/usr/include/c++/15/bits/unordered_map.h + mdp:/usr/include/c++/15/bits/unordered_set.h + mdp:/usr/include/c++/15/bits/uses_allocator.h + mdp:/usr/include/c++/15/bits/uses_allocator_args.h + mdp:/usr/include/c++/15/bits/utility.h + mdp:/usr/include/c++/15/bits/vector.tcc + mdp:/usr/include/c++/15/bits/version.h + mdp:/usr/include/c++/15/cassert + mdp:/usr/include/c++/15/cctype + mdp:/usr/include/c++/15/cerrno + mdp:/usr/include/c++/15/charconv + mdp:/usr/include/c++/15/chrono + mdp:/usr/include/c++/15/climits + mdp:/usr/include/c++/15/clocale + mdp:/usr/include/c++/15/cmath + mdp:/usr/include/c++/15/compare + mdp:/usr/include/c++/15/concepts + mdp:/usr/include/c++/15/cstddef + mdp:/usr/include/c++/15/cstdint + mdp:/usr/include/c++/15/cstdio + mdp:/usr/include/c++/15/cstdlib + mdp:/usr/include/c++/15/cstring + mdp:/usr/include/c++/15/ctime + mdp:/usr/include/c++/15/cwchar + mdp:/usr/include/c++/15/cwctype + mdp:/usr/include/c++/15/debug/assertions.h + mdp:/usr/include/c++/15/debug/debug.h + mdp:/usr/include/c++/15/exception + mdp:/usr/include/c++/15/ext/aligned_buffer.h + mdp:/usr/include/c++/15/ext/alloc_traits.h + mdp:/usr/include/c++/15/ext/atomicity.h + mdp:/usr/include/c++/15/ext/concurrence.h + mdp:/usr/include/c++/15/ext/numeric_traits.h + mdp:/usr/include/c++/15/ext/string_conversions.h + mdp:/usr/include/c++/15/ext/type_traits.h + mdp:/usr/include/c++/15/filesystem + mdp:/usr/include/c++/15/format + mdp:/usr/include/c++/15/functional + mdp:/usr/include/c++/15/initializer_list + mdp:/usr/include/c++/15/iomanip + mdp:/usr/include/c++/15/ios + mdp:/usr/include/c++/15/iosfwd + mdp:/usr/include/c++/15/istream + mdp:/usr/include/c++/15/iterator + mdp:/usr/include/c++/15/limits + mdp:/usr/include/c++/15/list + mdp:/usr/include/c++/15/locale + mdp:/usr/include/c++/15/map + mdp:/usr/include/c++/15/memory + mdp:/usr/include/c++/15/new + mdp:/usr/include/c++/15/numeric + mdp:/usr/include/c++/15/optional + mdp:/usr/include/c++/15/ostream + mdp:/usr/include/c++/15/pstl/execution_defs.h + mdp:/usr/include/c++/15/pstl/glue_numeric_defs.h + mdp:/usr/include/c++/15/pstl/pstl_config.h + mdp:/usr/include/c++/15/ratio + mdp:/usr/include/c++/15/set + mdp:/usr/include/c++/15/sstream + mdp:/usr/include/c++/15/stdexcept + mdp:/usr/include/c++/15/streambuf + mdp:/usr/include/c++/15/string + mdp:/usr/include/c++/15/string_view + mdp:/usr/include/c++/15/system_error + mdp:/usr/include/c++/15/tr1/bessel_function.tcc + mdp:/usr/include/c++/15/tr1/beta_function.tcc + mdp:/usr/include/c++/15/tr1/ell_integral.tcc + mdp:/usr/include/c++/15/tr1/exp_integral.tcc + mdp:/usr/include/c++/15/tr1/gamma.tcc + mdp:/usr/include/c++/15/tr1/hypergeometric.tcc + mdp:/usr/include/c++/15/tr1/legendre_function.tcc + mdp:/usr/include/c++/15/tr1/modified_bessel_func.tcc + mdp:/usr/include/c++/15/tr1/poly_hermite.tcc + mdp:/usr/include/c++/15/tr1/poly_laguerre.tcc + mdp:/usr/include/c++/15/tr1/riemann_zeta.tcc + mdp:/usr/include/c++/15/tr1/special_function_util.h + mdp:/usr/include/c++/15/tuple + mdp:/usr/include/c++/15/type_traits + mdp:/usr/include/c++/15/typeinfo + mdp:/usr/include/c++/15/unordered_map + mdp:/usr/include/c++/15/unordered_set + mdp:/usr/include/c++/15/utility + mdp:/usr/include/c++/15/variant + mdp:/usr/include/c++/15/vector + mdp:/usr/include/c++/15/version + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/atomic_word.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++allocator.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++config.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++locale.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/cpu_defines.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/ctype_base.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/ctype_inline.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/error_constants.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/gthr-default.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/gthr.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/messages_members.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/os_defines.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/time_members.h + mdp:/usr/include/ctype.h + mdp:/usr/include/endian.h + mdp:/usr/include/errno.h + mdp:/usr/include/features-time64.h + mdp:/usr/include/features.h + mdp:/usr/include/gnu/stubs-64.h + mdp:/usr/include/gnu/stubs.h + mdp:/usr/include/libintl.h + mdp:/usr/include/limits.h + mdp:/usr/include/linux/close_range.h + mdp:/usr/include/linux/errno.h + mdp:/usr/include/linux/limits.h + mdp:/usr/include/linux/posix_types.h + mdp:/usr/include/linux/sched/types.h + mdp:/usr/include/linux/stddef.h + mdp:/usr/include/linux/types.h + mdp:/usr/include/locale.h + mdp:/usr/include/pthread.h + mdp:/usr/include/qt6/QtCore/QDir + mdp:/usr/include/qt6/QtCore/QFileInfo + mdp:/usr/include/qt6/QtCore/QHash + mdp:/usr/include/qt6/QtCore/QHashFunctions + mdp:/usr/include/qt6/QtCore/QObject + mdp:/usr/include/qt6/QtCore/QRegularExpression + mdp:/usr/include/qt6/QtCore/QString + mdp:/usr/include/qt6/QtCore/QStringList + mdp:/usr/include/qt6/QtCore/QVector + mdp:/usr/include/qt6/QtCore/q17memory.h + mdp:/usr/include/qt6/QtCore/q20functional.h + mdp:/usr/include/qt6/QtCore/q20iterator.h + mdp:/usr/include/qt6/QtCore/q20memory.h + mdp:/usr/include/qt6/QtCore/q20type_traits.h + mdp:/usr/include/qt6/QtCore/q20utility.h + mdp:/usr/include/qt6/QtCore/q23type_traits.h + mdp:/usr/include/qt6/QtCore/q23utility.h + mdp:/usr/include/qt6/QtCore/qalgorithms.h + mdp:/usr/include/qt6/QtCore/qalloc.h + mdp:/usr/include/qt6/QtCore/qanystringview.h + mdp:/usr/include/qt6/QtCore/qarraydata.h + mdp:/usr/include/qt6/QtCore/qarraydataops.h + mdp:/usr/include/qt6/QtCore/qarraydatapointer.h + mdp:/usr/include/qt6/QtCore/qassert.h + mdp:/usr/include/qt6/QtCore/qatomic.h + mdp:/usr/include/qt6/QtCore/qatomic_cxx11.h + mdp:/usr/include/qt6/QtCore/qbasicatomic.h + mdp:/usr/include/qt6/QtCore/qbindingstorage.h + mdp:/usr/include/qt6/QtCore/qbytearray.h + mdp:/usr/include/qt6/QtCore/qbytearrayalgorithms.h + mdp:/usr/include/qt6/QtCore/qbytearraylist.h + mdp:/usr/include/qt6/QtCore/qbytearrayview.h + mdp:/usr/include/qt6/QtCore/qcalendar.h + mdp:/usr/include/qt6/QtCore/qchar.h + mdp:/usr/include/qt6/QtCore/qcompare.h + mdp:/usr/include/qt6/QtCore/qcompare_impl.h + mdp:/usr/include/qt6/QtCore/qcomparehelpers.h + mdp:/usr/include/qt6/QtCore/qcompilerdetection.h + mdp:/usr/include/qt6/QtCore/qconfig-64.h + mdp:/usr/include/qt6/QtCore/qconfig.h + mdp:/usr/include/qt6/QtCore/qconstructormacros.h + mdp:/usr/include/qt6/QtCore/qcontainerfwd.h + mdp:/usr/include/qt6/QtCore/qcontainerinfo.h + mdp:/usr/include/qt6/QtCore/qcontainertools_impl.h + mdp:/usr/include/qt6/QtCore/qcontiguouscache.h + mdp:/usr/include/qt6/QtCore/qdarwinhelpers.h + mdp:/usr/include/qt6/QtCore/qdatastream.h + mdp:/usr/include/qt6/QtCore/qdatetime.h + mdp:/usr/include/qt6/QtCore/qdebug.h + mdp:/usr/include/qt6/QtCore/qdir.h + mdp:/usr/include/qt6/QtCore/qdirlisting.h + mdp:/usr/include/qt6/QtCore/qexceptionhandling.h + mdp:/usr/include/qt6/QtCore/qfile.h + mdp:/usr/include/qt6/QtCore/qfiledevice.h + mdp:/usr/include/qt6/QtCore/qfileinfo.h + mdp:/usr/include/qt6/QtCore/qflags.h + mdp:/usr/include/qt6/QtCore/qfloat16.h + mdp:/usr/include/qt6/QtCore/qforeach.h + mdp:/usr/include/qt6/QtCore/qfunctionaltools_impl.h + mdp:/usr/include/qt6/QtCore/qfunctionpointer.h + mdp:/usr/include/qt6/QtCore/qgenericatomic.h + mdp:/usr/include/qt6/QtCore/qglobal.h + mdp:/usr/include/qt6/QtCore/qglobalstatic.h + mdp:/usr/include/qt6/QtCore/qhash.h + mdp:/usr/include/qt6/QtCore/qhashfunctions.h + mdp:/usr/include/qt6/QtCore/qiodevice.h + mdp:/usr/include/qt6/QtCore/qiodevicebase.h + mdp:/usr/include/qt6/QtCore/qiterable.h + mdp:/usr/include/qt6/QtCore/qiterator.h + mdp:/usr/include/qt6/QtCore/qlatin1stringview.h + mdp:/usr/include/qt6/QtCore/qlist.h + mdp:/usr/include/qt6/QtCore/qlocale.h + mdp:/usr/include/qt6/QtCore/qlogging.h + mdp:/usr/include/qt6/QtCore/qmalloc.h + mdp:/usr/include/qt6/QtCore/qmap.h + mdp:/usr/include/qt6/QtCore/qmath.h + mdp:/usr/include/qt6/QtCore/qmetacontainer.h + mdp:/usr/include/qt6/QtCore/qmetatype.h + mdp:/usr/include/qt6/QtCore/qminmax.h + mdp:/usr/include/qt6/QtCore/qnamespace.h + mdp:/usr/include/qt6/QtCore/qnumeric.h + mdp:/usr/include/qt6/QtCore/qobject.h + mdp:/usr/include/qt6/QtCore/qobject_impl.h + mdp:/usr/include/qt6/QtCore/qobjectdefs.h + mdp:/usr/include/qt6/QtCore/qobjectdefs_impl.h + mdp:/usr/include/qt6/QtCore/qoverload.h + mdp:/usr/include/qt6/QtCore/qpair.h + mdp:/usr/include/qt6/QtCore/qprocessordetection.h + mdp:/usr/include/qt6/QtCore/qrefcount.h + mdp:/usr/include/qt6/QtCore/qregularexpression.h + mdp:/usr/include/qt6/QtCore/qscopedpointer.h + mdp:/usr/include/qt6/QtCore/qscopeguard.h + mdp:/usr/include/qt6/QtCore/qset.h + mdp:/usr/include/qt6/QtCore/qshareddata.h + mdp:/usr/include/qt6/QtCore/qshareddata_impl.h + mdp:/usr/include/qt6/QtCore/qsharedpointer.h + mdp:/usr/include/qt6/QtCore/qsharedpointer_impl.h + mdp:/usr/include/qt6/QtCore/qspan.h + mdp:/usr/include/qt6/QtCore/qstdlibdetection.h + mdp:/usr/include/qt6/QtCore/qstring.h + mdp:/usr/include/qt6/QtCore/qstringalgorithms.h + mdp:/usr/include/qt6/QtCore/qstringbuilder.h + mdp:/usr/include/qt6/QtCore/qstringconverter.h + mdp:/usr/include/qt6/QtCore/qstringconverter_base.h + mdp:/usr/include/qt6/QtCore/qstringfwd.h + mdp:/usr/include/qt6/QtCore/qstringlist.h + mdp:/usr/include/qt6/QtCore/qstringmatcher.h + mdp:/usr/include/qt6/QtCore/qstringtokenizer.h + mdp:/usr/include/qt6/QtCore/qstringview.h + mdp:/usr/include/qt6/QtCore/qswap.h + mdp:/usr/include/qt6/QtCore/qsysinfo.h + mdp:/usr/include/qt6/QtCore/qsystemdetection.h + mdp:/usr/include/qt6/QtCore/qtaggedpointer.h + mdp:/usr/include/qt6/QtCore/qtclasshelpermacros.h + mdp:/usr/include/qt6/QtCore/qtconfiginclude.h + mdp:/usr/include/qt6/QtCore/qtconfigmacros.h + mdp:/usr/include/qt6/QtCore/qtcore-config.h + mdp:/usr/include/qt6/QtCore/qtcoreexports.h + mdp:/usr/include/qt6/QtCore/qtcoreglobal.h + mdp:/usr/include/qt6/QtCore/qtdeprecationdefinitions.h + mdp:/usr/include/qt6/QtCore/qtdeprecationmarkers.h + mdp:/usr/include/qt6/QtCore/qtenvironmentvariables.h + mdp:/usr/include/qt6/QtCore/qtextstream.h + mdp:/usr/include/qt6/QtCore/qtformat_impl.h + mdp:/usr/include/qt6/QtCore/qtimezone.h + mdp:/usr/include/qt6/QtCore/qtmetamacros.h + mdp:/usr/include/qt6/QtCore/qtnoop.h + mdp:/usr/include/qt6/QtCore/qtpreprocessorsupport.h + mdp:/usr/include/qt6/QtCore/qtresource.h + mdp:/usr/include/qt6/QtCore/qttranslation.h + mdp:/usr/include/qt6/QtCore/qttypetraits.h + mdp:/usr/include/qt6/QtCore/qtversion.h + mdp:/usr/include/qt6/QtCore/qtversionchecks.h + mdp:/usr/include/qt6/QtCore/qtypeinfo.h + mdp:/usr/include/qt6/QtCore/qtypes.h + mdp:/usr/include/qt6/QtCore/qutf8stringview.h + mdp:/usr/include/qt6/QtCore/qvariant.h + mdp:/usr/include/qt6/QtCore/qvarlengtharray.h + mdp:/usr/include/qt6/QtCore/qvector.h + mdp:/usr/include/qt6/QtCore/qversiontagging.h + mdp:/usr/include/qt6/QtCore/qxptype_traits.h + mdp:/usr/include/qt6/QtCore/qyieldcpu.h + mdp:/usr/include/sched.h + mdp:/usr/include/stdc-predef.h + mdp:/usr/include/stdint.h + mdp:/usr/include/stdio.h + mdp:/usr/include/stdlib.h + mdp:/usr/include/string.h + mdp:/usr/include/strings.h + mdp:/usr/include/sys/cdefs.h + mdp:/usr/include/sys/select.h + mdp:/usr/include/sys/single_threaded.h + mdp:/usr/include/sys/syscall.h + mdp:/usr/include/sys/types.h + mdp:/usr/include/syscall.h + mdp:/usr/include/time.h + mdp:/usr/include/unistd.h + mdp:/usr/include/wchar.h + mdp:/usr/include/wctype.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stdarg.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stdbool.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stddef.h +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/test_importer.cpp + mmc:Q_OBJECT + mid:test_importer.moc + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_importer_autogen/moc_predefs.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/db.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/i_asset_database.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/importer.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/sequence_detector.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/test_importer.cpp + mdp:/usr/include/alloca.h + mdp:/usr/include/asm-generic/bitsperlong.h + mdp:/usr/include/asm-generic/errno-base.h + mdp:/usr/include/asm-generic/errno.h + mdp:/usr/include/asm-generic/int-ll64.h + mdp:/usr/include/asm-generic/posix_types.h + mdp:/usr/include/asm-generic/types.h + mdp:/usr/include/asm/bitsperlong.h + mdp:/usr/include/asm/errno.h + mdp:/usr/include/asm/posix_types.h + mdp:/usr/include/asm/posix_types_64.h + mdp:/usr/include/asm/types.h + mdp:/usr/include/asm/unistd.h + mdp:/usr/include/asm/unistd_64.h + mdp:/usr/include/assert.h + mdp:/usr/include/bits/atomic_wide_counter.h + mdp:/usr/include/bits/byteswap.h + mdp:/usr/include/bits/confname.h + mdp:/usr/include/bits/cpu-set.h + mdp:/usr/include/bits/endian.h + mdp:/usr/include/bits/endianness.h + mdp:/usr/include/bits/environments.h + mdp:/usr/include/bits/errno.h + mdp:/usr/include/bits/floatn-common.h + mdp:/usr/include/bits/floatn.h + mdp:/usr/include/bits/getopt_core.h + mdp:/usr/include/bits/getopt_posix.h + mdp:/usr/include/bits/libc-header-start.h + mdp:/usr/include/bits/local_lim.h + mdp:/usr/include/bits/locale.h + mdp:/usr/include/bits/long-double.h + mdp:/usr/include/bits/posix1_lim.h + mdp:/usr/include/bits/posix2_lim.h + mdp:/usr/include/bits/posix_opt.h + mdp:/usr/include/bits/pthread_stack_min-dynamic.h + mdp:/usr/include/bits/pthreadtypes-arch.h + mdp:/usr/include/bits/pthreadtypes.h + mdp:/usr/include/bits/sched.h + mdp:/usr/include/bits/select.h + mdp:/usr/include/bits/semaphore.h + mdp:/usr/include/bits/setjmp.h + mdp:/usr/include/bits/stdint-intn.h + mdp:/usr/include/bits/stdint-least.h + mdp:/usr/include/bits/stdint-uintn.h + mdp:/usr/include/bits/stdio_lim.h + mdp:/usr/include/bits/stdlib-float.h + mdp:/usr/include/bits/struct_mutex.h + mdp:/usr/include/bits/struct_rwlock.h + mdp:/usr/include/bits/syscall.h + mdp:/usr/include/bits/thread-shared-types.h + mdp:/usr/include/bits/time.h + mdp:/usr/include/bits/time64.h + mdp:/usr/include/bits/timesize.h + mdp:/usr/include/bits/timex.h + mdp:/usr/include/bits/types.h + mdp:/usr/include/bits/types/FILE.h + mdp:/usr/include/bits/types/__FILE.h + mdp:/usr/include/bits/types/__fpos64_t.h + mdp:/usr/include/bits/types/__fpos_t.h + mdp:/usr/include/bits/types/__locale_t.h + mdp:/usr/include/bits/types/__mbstate_t.h + mdp:/usr/include/bits/types/__sigset_t.h + mdp:/usr/include/bits/types/clock_t.h + mdp:/usr/include/bits/types/clockid_t.h + mdp:/usr/include/bits/types/cookie_io_functions_t.h + mdp:/usr/include/bits/types/error_t.h + mdp:/usr/include/bits/types/locale_t.h + mdp:/usr/include/bits/types/mbstate_t.h + mdp:/usr/include/bits/types/sigset_t.h + mdp:/usr/include/bits/types/struct_FILE.h + mdp:/usr/include/bits/types/struct___jmp_buf_tag.h + mdp:/usr/include/bits/types/struct_itimerspec.h + mdp:/usr/include/bits/types/struct_sched_param.h + mdp:/usr/include/bits/types/struct_timespec.h + mdp:/usr/include/bits/types/struct_timeval.h + mdp:/usr/include/bits/types/struct_tm.h + mdp:/usr/include/bits/types/time_t.h + mdp:/usr/include/bits/types/timer_t.h + mdp:/usr/include/bits/types/wint_t.h + mdp:/usr/include/bits/typesizes.h + mdp:/usr/include/bits/uintn-identity.h + mdp:/usr/include/bits/uio_lim.h + mdp:/usr/include/bits/unistd_ext.h + mdp:/usr/include/bits/waitflags.h + mdp:/usr/include/bits/waitstatus.h + mdp:/usr/include/bits/wchar.h + mdp:/usr/include/bits/wctype-wchar.h + mdp:/usr/include/bits/wordsize.h + mdp:/usr/include/bits/xopen_lim.h + mdp:/usr/include/c++/15/algorithm + mdp:/usr/include/c++/15/array + mdp:/usr/include/c++/15/atomic + mdp:/usr/include/c++/15/backward/auto_ptr.h + mdp:/usr/include/c++/15/backward/binders.h + mdp:/usr/include/c++/15/bit + mdp:/usr/include/c++/15/bits/algorithmfwd.h + mdp:/usr/include/c++/15/bits/align.h + mdp:/usr/include/c++/15/bits/alloc_traits.h + mdp:/usr/include/c++/15/bits/allocated_ptr.h + mdp:/usr/include/c++/15/bits/allocator.h + mdp:/usr/include/c++/15/bits/atomic_base.h + mdp:/usr/include/c++/15/bits/atomic_futex.h + mdp:/usr/include/c++/15/bits/atomic_lockfree_defines.h + mdp:/usr/include/c++/15/bits/atomic_timed_wait.h + mdp:/usr/include/c++/15/bits/atomic_wait.h + mdp:/usr/include/c++/15/bits/basic_ios.h + mdp:/usr/include/c++/15/bits/basic_ios.tcc + mdp:/usr/include/c++/15/bits/basic_string.h + mdp:/usr/include/c++/15/bits/basic_string.tcc + mdp:/usr/include/c++/15/bits/char_traits.h + mdp:/usr/include/c++/15/bits/charconv.h + mdp:/usr/include/c++/15/bits/chrono.h + mdp:/usr/include/c++/15/bits/chrono_io.h + mdp:/usr/include/c++/15/bits/codecvt.h + mdp:/usr/include/c++/15/bits/concept_check.h + mdp:/usr/include/c++/15/bits/cpp_type_traits.h + mdp:/usr/include/c++/15/bits/cxxabi_forced.h + mdp:/usr/include/c++/15/bits/cxxabi_init_exception.h + mdp:/usr/include/c++/15/bits/enable_special_members.h + mdp:/usr/include/c++/15/bits/erase_if.h + mdp:/usr/include/c++/15/bits/exception.h + mdp:/usr/include/c++/15/bits/exception_defines.h + mdp:/usr/include/c++/15/bits/exception_ptr.h + mdp:/usr/include/c++/15/bits/functexcept.h + mdp:/usr/include/c++/15/bits/functional_hash.h + mdp:/usr/include/c++/15/bits/hash_bytes.h + mdp:/usr/include/c++/15/bits/hashtable.h + mdp:/usr/include/c++/15/bits/hashtable_policy.h + mdp:/usr/include/c++/15/bits/invoke.h + mdp:/usr/include/c++/15/bits/ios_base.h + mdp:/usr/include/c++/15/bits/istream.tcc + mdp:/usr/include/c++/15/bits/iterator_concepts.h + mdp:/usr/include/c++/15/bits/list.tcc + mdp:/usr/include/c++/15/bits/locale_classes.h + mdp:/usr/include/c++/15/bits/locale_classes.tcc + mdp:/usr/include/c++/15/bits/locale_conv.h + mdp:/usr/include/c++/15/bits/locale_facets.h + mdp:/usr/include/c++/15/bits/locale_facets.tcc + mdp:/usr/include/c++/15/bits/locale_facets_nonio.h + mdp:/usr/include/c++/15/bits/locale_facets_nonio.tcc + mdp:/usr/include/c++/15/bits/localefwd.h + mdp:/usr/include/c++/15/bits/max_size_type.h + mdp:/usr/include/c++/15/bits/memory_resource.h + mdp:/usr/include/c++/15/bits/memoryfwd.h + mdp:/usr/include/c++/15/bits/move.h + mdp:/usr/include/c++/15/bits/nested_exception.h + mdp:/usr/include/c++/15/bits/new_allocator.h + mdp:/usr/include/c++/15/bits/node_handle.h + mdp:/usr/include/c++/15/bits/ostream.h + mdp:/usr/include/c++/15/bits/ostream.tcc + mdp:/usr/include/c++/15/bits/ostream_insert.h + mdp:/usr/include/c++/15/bits/parse_numbers.h + mdp:/usr/include/c++/15/bits/postypes.h + mdp:/usr/include/c++/15/bits/predefined_ops.h + mdp:/usr/include/c++/15/bits/ptr_traits.h + mdp:/usr/include/c++/15/bits/quoted_string.h + mdp:/usr/include/c++/15/bits/random.h + mdp:/usr/include/c++/15/bits/random.tcc + mdp:/usr/include/c++/15/bits/range_access.h + mdp:/usr/include/c++/15/bits/ranges_algo.h + mdp:/usr/include/c++/15/bits/ranges_algobase.h + mdp:/usr/include/c++/15/bits/ranges_base.h + mdp:/usr/include/c++/15/bits/ranges_cmp.h + mdp:/usr/include/c++/15/bits/ranges_uninitialized.h + mdp:/usr/include/c++/15/bits/ranges_util.h + mdp:/usr/include/c++/15/bits/refwrap.h + mdp:/usr/include/c++/15/bits/requires_hosted.h + mdp:/usr/include/c++/15/bits/semaphore_base.h + mdp:/usr/include/c++/15/bits/shared_ptr.h + mdp:/usr/include/c++/15/bits/shared_ptr_atomic.h + mdp:/usr/include/c++/15/bits/shared_ptr_base.h + mdp:/usr/include/c++/15/bits/specfun.h + mdp:/usr/include/c++/15/bits/sstream.tcc + mdp:/usr/include/c++/15/bits/std_abs.h + mdp:/usr/include/c++/15/bits/std_function.h + mdp:/usr/include/c++/15/bits/std_mutex.h + mdp:/usr/include/c++/15/bits/std_thread.h + mdp:/usr/include/c++/15/bits/stl_algo.h + mdp:/usr/include/c++/15/bits/stl_algobase.h + mdp:/usr/include/c++/15/bits/stl_bvector.h + mdp:/usr/include/c++/15/bits/stl_construct.h + mdp:/usr/include/c++/15/bits/stl_function.h + mdp:/usr/include/c++/15/bits/stl_heap.h + mdp:/usr/include/c++/15/bits/stl_iterator.h + mdp:/usr/include/c++/15/bits/stl_iterator_base_funcs.h + mdp:/usr/include/c++/15/bits/stl_iterator_base_types.h + mdp:/usr/include/c++/15/bits/stl_list.h + mdp:/usr/include/c++/15/bits/stl_map.h + mdp:/usr/include/c++/15/bits/stl_multimap.h + mdp:/usr/include/c++/15/bits/stl_multiset.h + mdp:/usr/include/c++/15/bits/stl_numeric.h + mdp:/usr/include/c++/15/bits/stl_pair.h + mdp:/usr/include/c++/15/bits/stl_raw_storage_iter.h + mdp:/usr/include/c++/15/bits/stl_relops.h + mdp:/usr/include/c++/15/bits/stl_set.h + mdp:/usr/include/c++/15/bits/stl_tempbuf.h + mdp:/usr/include/c++/15/bits/stl_tree.h + mdp:/usr/include/c++/15/bits/stl_uninitialized.h + mdp:/usr/include/c++/15/bits/stl_vector.h + mdp:/usr/include/c++/15/bits/stream_iterator.h + mdp:/usr/include/c++/15/bits/streambuf.tcc + mdp:/usr/include/c++/15/bits/streambuf_iterator.h + mdp:/usr/include/c++/15/bits/string_view.tcc + mdp:/usr/include/c++/15/bits/stringfwd.h + mdp:/usr/include/c++/15/bits/this_thread_sleep.h + mdp:/usr/include/c++/15/bits/uniform_int_dist.h + mdp:/usr/include/c++/15/bits/unique_lock.h + mdp:/usr/include/c++/15/bits/unique_ptr.h + mdp:/usr/include/c++/15/bits/unordered_map.h + mdp:/usr/include/c++/15/bits/unordered_set.h + mdp:/usr/include/c++/15/bits/uses_allocator.h + mdp:/usr/include/c++/15/bits/uses_allocator_args.h + mdp:/usr/include/c++/15/bits/utility.h + mdp:/usr/include/c++/15/bits/vector.tcc + mdp:/usr/include/c++/15/bits/version.h + mdp:/usr/include/c++/15/cassert + mdp:/usr/include/c++/15/cctype + mdp:/usr/include/c++/15/cerrno + mdp:/usr/include/c++/15/charconv + mdp:/usr/include/c++/15/chrono + mdp:/usr/include/c++/15/climits + mdp:/usr/include/c++/15/clocale + mdp:/usr/include/c++/15/cmath + mdp:/usr/include/c++/15/compare + mdp:/usr/include/c++/15/concepts + mdp:/usr/include/c++/15/condition_variable + mdp:/usr/include/c++/15/cstddef + mdp:/usr/include/c++/15/cstdint + mdp:/usr/include/c++/15/cstdio + mdp:/usr/include/c++/15/cstdlib + mdp:/usr/include/c++/15/cstring + mdp:/usr/include/c++/15/ctime + mdp:/usr/include/c++/15/cwchar + mdp:/usr/include/c++/15/cwctype + mdp:/usr/include/c++/15/debug/assertions.h + mdp:/usr/include/c++/15/debug/debug.h + mdp:/usr/include/c++/15/exception + mdp:/usr/include/c++/15/experimental/source_location + mdp:/usr/include/c++/15/ext/aligned_buffer.h + mdp:/usr/include/c++/15/ext/alloc_traits.h + mdp:/usr/include/c++/15/ext/atomicity.h + mdp:/usr/include/c++/15/ext/concurrence.h + mdp:/usr/include/c++/15/ext/numeric_traits.h + mdp:/usr/include/c++/15/ext/string_conversions.h + mdp:/usr/include/c++/15/ext/type_traits.h + mdp:/usr/include/c++/15/filesystem + mdp:/usr/include/c++/15/format + mdp:/usr/include/c++/15/functional + mdp:/usr/include/c++/15/future + mdp:/usr/include/c++/15/initializer_list + mdp:/usr/include/c++/15/iomanip + mdp:/usr/include/c++/15/ios + mdp:/usr/include/c++/15/iosfwd + mdp:/usr/include/c++/15/istream + mdp:/usr/include/c++/15/iterator + mdp:/usr/include/c++/15/limits + mdp:/usr/include/c++/15/list + mdp:/usr/include/c++/15/locale + mdp:/usr/include/c++/15/map + mdp:/usr/include/c++/15/memory + mdp:/usr/include/c++/15/memory_resource + mdp:/usr/include/c++/15/mutex + mdp:/usr/include/c++/15/new + mdp:/usr/include/c++/15/numeric + mdp:/usr/include/c++/15/optional + mdp:/usr/include/c++/15/ostream + mdp:/usr/include/c++/15/pstl/execution_defs.h + mdp:/usr/include/c++/15/pstl/glue_numeric_defs.h + mdp:/usr/include/c++/15/pstl/pstl_config.h + mdp:/usr/include/c++/15/random + mdp:/usr/include/c++/15/ratio + mdp:/usr/include/c++/15/semaphore + mdp:/usr/include/c++/15/set + mdp:/usr/include/c++/15/shared_mutex + mdp:/usr/include/c++/15/source_location + mdp:/usr/include/c++/15/sstream + mdp:/usr/include/c++/15/stdexcept + mdp:/usr/include/c++/15/stop_token + mdp:/usr/include/c++/15/streambuf + mdp:/usr/include/c++/15/string + mdp:/usr/include/c++/15/string_view + mdp:/usr/include/c++/15/system_error + mdp:/usr/include/c++/15/tr1/bessel_function.tcc + mdp:/usr/include/c++/15/tr1/beta_function.tcc + mdp:/usr/include/c++/15/tr1/ell_integral.tcc + mdp:/usr/include/c++/15/tr1/exp_integral.tcc + mdp:/usr/include/c++/15/tr1/gamma.tcc + mdp:/usr/include/c++/15/tr1/hypergeometric.tcc + mdp:/usr/include/c++/15/tr1/legendre_function.tcc + mdp:/usr/include/c++/15/tr1/modified_bessel_func.tcc + mdp:/usr/include/c++/15/tr1/poly_hermite.tcc + mdp:/usr/include/c++/15/tr1/poly_laguerre.tcc + mdp:/usr/include/c++/15/tr1/riemann_zeta.tcc + mdp:/usr/include/c++/15/tr1/special_function_util.h + mdp:/usr/include/c++/15/tuple + mdp:/usr/include/c++/15/type_traits + mdp:/usr/include/c++/15/typeinfo + mdp:/usr/include/c++/15/unordered_map + mdp:/usr/include/c++/15/unordered_set + mdp:/usr/include/c++/15/utility + mdp:/usr/include/c++/15/variant + mdp:/usr/include/c++/15/vector + mdp:/usr/include/c++/15/version + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/atomic_word.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++allocator.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++config.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++locale.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/cpu_defines.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/ctype_base.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/ctype_inline.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/error_constants.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/gthr-default.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/gthr.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/messages_members.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/opt_random.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/os_defines.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/time_members.h + mdp:/usr/include/ctype.h + mdp:/usr/include/endian.h + mdp:/usr/include/errno.h + mdp:/usr/include/features-time64.h + mdp:/usr/include/features.h + mdp:/usr/include/gnu/stubs-64.h + mdp:/usr/include/gnu/stubs.h + mdp:/usr/include/libintl.h + mdp:/usr/include/limits.h + mdp:/usr/include/linux/close_range.h + mdp:/usr/include/linux/errno.h + mdp:/usr/include/linux/limits.h + mdp:/usr/include/linux/posix_types.h + mdp:/usr/include/linux/sched/types.h + mdp:/usr/include/linux/stddef.h + mdp:/usr/include/linux/types.h + mdp:/usr/include/locale.h + mdp:/usr/include/pthread.h + mdp:/usr/include/qt6/QtCore/QAbstractItemModel + mdp:/usr/include/qt6/QtCore/QDeadlineTimer + mdp:/usr/include/qt6/QtCore/QDir + mdp:/usr/include/qt6/QtCore/QEvent + mdp:/usr/include/qt6/QtCore/QFile + mdp:/usr/include/qt6/QtCore/QFileInfo + mdp:/usr/include/qt6/QtCore/QHash + mdp:/usr/include/qt6/QtCore/QHashFunctions + mdp:/usr/include/qt6/QtCore/QList + mdp:/usr/include/qt6/QtCore/QMap + mdp:/usr/include/qt6/QtCore/QMargins + mdp:/usr/include/qt6/QtCore/QMetaEnum + mdp:/usr/include/qt6/QtCore/QMutex + mdp:/usr/include/qt6/QtCore/QObject + mdp:/usr/include/qt6/QtCore/QPair + mdp:/usr/include/qt6/QtCore/QRect + mdp:/usr/include/qt6/QtCore/QRegularExpression + mdp:/usr/include/qt6/QtCore/QSize + mdp:/usr/include/qt6/QtCore/QSizeF + mdp:/usr/include/qt6/QtCore/QString + mdp:/usr/include/qt6/QtCore/QStringList + mdp:/usr/include/qt6/QtCore/QTemporaryDir + mdp:/usr/include/qt6/QtCore/QVariant + mdp:/usr/include/qt6/QtCore/QVector + mdp:/usr/include/qt6/QtCore/QtCore + mdp:/usr/include/qt6/QtCore/QtCoreDepends + mdp:/usr/include/qt6/QtCore/q17memory.h + mdp:/usr/include/qt6/QtCore/q20algorithm.h + mdp:/usr/include/qt6/QtCore/q20chrono.h + mdp:/usr/include/qt6/QtCore/q20functional.h + mdp:/usr/include/qt6/QtCore/q20iterator.h + mdp:/usr/include/qt6/QtCore/q20map.h + mdp:/usr/include/qt6/QtCore/q20memory.h + mdp:/usr/include/qt6/QtCore/q20type_traits.h + mdp:/usr/include/qt6/QtCore/q20utility.h + mdp:/usr/include/qt6/QtCore/q20vector.h + mdp:/usr/include/qt6/QtCore/q23functional.h + mdp:/usr/include/qt6/QtCore/q23type_traits.h + mdp:/usr/include/qt6/QtCore/q23utility.h + mdp:/usr/include/qt6/QtCore/q26numeric.h + mdp:/usr/include/qt6/QtCore/qabstractanimation.h + mdp:/usr/include/qt6/QtCore/qabstracteventdispatcher.h + mdp:/usr/include/qt6/QtCore/qabstractitemmodel.h + mdp:/usr/include/qt6/QtCore/qabstractnativeeventfilter.h + mdp:/usr/include/qt6/QtCore/qabstractproxymodel.h + mdp:/usr/include/qt6/QtCore/qalgorithms.h + mdp:/usr/include/qt6/QtCore/qalloc.h + mdp:/usr/include/qt6/QtCore/qanimationgroup.h + mdp:/usr/include/qt6/QtCore/qanystringview.h + mdp:/usr/include/qt6/QtCore/qapplicationstatic.h + mdp:/usr/include/qt6/QtCore/qarraydata.h + mdp:/usr/include/qt6/QtCore/qarraydataops.h + mdp:/usr/include/qt6/QtCore/qarraydatapointer.h + mdp:/usr/include/qt6/QtCore/qassert.h + mdp:/usr/include/qt6/QtCore/qassociativeiterable.h + mdp:/usr/include/qt6/QtCore/qatomic.h + mdp:/usr/include/qt6/QtCore/qatomic_cxx11.h + mdp:/usr/include/qt6/QtCore/qatomicscopedvaluerollback.h + mdp:/usr/include/qt6/QtCore/qbasicatomic.h + mdp:/usr/include/qt6/QtCore/qbasictimer.h + mdp:/usr/include/qt6/QtCore/qbindingstorage.h + mdp:/usr/include/qt6/QtCore/qbitarray.h + mdp:/usr/include/qt6/QtCore/qbuffer.h + mdp:/usr/include/qt6/QtCore/qbytearray.h + mdp:/usr/include/qt6/QtCore/qbytearrayalgorithms.h + mdp:/usr/include/qt6/QtCore/qbytearraylist.h + mdp:/usr/include/qt6/QtCore/qbytearraymatcher.h + mdp:/usr/include/qt6/QtCore/qbytearrayview.h + mdp:/usr/include/qt6/QtCore/qcache.h + mdp:/usr/include/qt6/QtCore/qcalendar.h + mdp:/usr/include/qt6/QtCore/qcborarray.h + mdp:/usr/include/qt6/QtCore/qcborcommon.h + mdp:/usr/include/qt6/QtCore/qcbormap.h + mdp:/usr/include/qt6/QtCore/qcborstream.h + mdp:/usr/include/qt6/QtCore/qcborstreamreader.h + mdp:/usr/include/qt6/QtCore/qcborstreamwriter.h + mdp:/usr/include/qt6/QtCore/qcborvalue.h + mdp:/usr/include/qt6/QtCore/qchar.h + mdp:/usr/include/qt6/QtCore/qcheckedint_impl.h + mdp:/usr/include/qt6/QtCore/qchronotimer.h + mdp:/usr/include/qt6/QtCore/qcollator.h + mdp:/usr/include/qt6/QtCore/qcommandlineoption.h + mdp:/usr/include/qt6/QtCore/qcommandlineparser.h + mdp:/usr/include/qt6/QtCore/qcompare.h + mdp:/usr/include/qt6/QtCore/qcompare_impl.h + mdp:/usr/include/qt6/QtCore/qcomparehelpers.h + mdp:/usr/include/qt6/QtCore/qcompilerdetection.h + mdp:/usr/include/qt6/QtCore/qconcatenatetablesproxymodel.h + mdp:/usr/include/qt6/QtCore/qconfig-64.h + mdp:/usr/include/qt6/QtCore/qconfig.h + mdp:/usr/include/qt6/QtCore/qconstructormacros.h + mdp:/usr/include/qt6/QtCore/qcontainerfwd.h + mdp:/usr/include/qt6/QtCore/qcontainerinfo.h + mdp:/usr/include/qt6/QtCore/qcontainertools_impl.h + mdp:/usr/include/qt6/QtCore/qcontiguouscache.h + mdp:/usr/include/qt6/QtCore/qcoreapplication.h + mdp:/usr/include/qt6/QtCore/qcoreapplication_platform.h + mdp:/usr/include/qt6/QtCore/qcoreevent.h + mdp:/usr/include/qt6/QtCore/qcryptographichash.h + mdp:/usr/include/qt6/QtCore/qdarwinhelpers.h + mdp:/usr/include/qt6/QtCore/qdatastream.h + mdp:/usr/include/qt6/QtCore/qdatetime.h + mdp:/usr/include/qt6/QtCore/qdeadlinetimer.h + mdp:/usr/include/qt6/QtCore/qdebug.h + mdp:/usr/include/qt6/QtCore/qdir.h + mdp:/usr/include/qt6/QtCore/qdiriterator.h + mdp:/usr/include/qt6/QtCore/qdirlisting.h + mdp:/usr/include/qt6/QtCore/qeasingcurve.h + mdp:/usr/include/qt6/QtCore/qelapsedtimer.h + mdp:/usr/include/qt6/QtCore/qendian.h + mdp:/usr/include/qt6/QtCore/qeventloop.h + mdp:/usr/include/qt6/QtCore/qexception.h + mdp:/usr/include/qt6/QtCore/qexceptionhandling.h + mdp:/usr/include/qt6/QtCore/qfactoryinterface.h + mdp:/usr/include/qt6/QtCore/qfile.h + mdp:/usr/include/qt6/QtCore/qfiledevice.h + mdp:/usr/include/qt6/QtCore/qfileinfo.h + mdp:/usr/include/qt6/QtCore/qfileselector.h + mdp:/usr/include/qt6/QtCore/qfilesystemwatcher.h + mdp:/usr/include/qt6/QtCore/qflags.h + mdp:/usr/include/qt6/QtCore/qfloat16.h + mdp:/usr/include/qt6/QtCore/qforeach.h + mdp:/usr/include/qt6/QtCore/qfunctionaltools_impl.h + mdp:/usr/include/qt6/QtCore/qfunctionpointer.h + mdp:/usr/include/qt6/QtCore/qfuture.h + mdp:/usr/include/qt6/QtCore/qfuture_impl.h + mdp:/usr/include/qt6/QtCore/qfutureinterface.h + mdp:/usr/include/qt6/QtCore/qfuturesynchronizer.h + mdp:/usr/include/qt6/QtCore/qfuturewatcher.h + mdp:/usr/include/qt6/QtCore/qgenericatomic.h + mdp:/usr/include/qt6/QtCore/qglobal.h + mdp:/usr/include/qt6/QtCore/qglobalstatic.h + mdp:/usr/include/qt6/QtCore/qhash.h + mdp:/usr/include/qt6/QtCore/qhashfunctions.h + mdp:/usr/include/qt6/QtCore/qidentityproxymodel.h + mdp:/usr/include/qt6/QtCore/qiodevice.h + mdp:/usr/include/qt6/QtCore/qiodevicebase.h + mdp:/usr/include/qt6/QtCore/qitemselectionmodel.h + mdp:/usr/include/qt6/QtCore/qiterable.h + mdp:/usr/include/qt6/QtCore/qiterator.h + mdp:/usr/include/qt6/QtCore/qjsonarray.h + mdp:/usr/include/qt6/QtCore/qjsondocument.h + mdp:/usr/include/qt6/QtCore/qjsonobject.h + mdp:/usr/include/qt6/QtCore/qjsonparseerror.h + mdp:/usr/include/qt6/QtCore/qjsonvalue.h + mdp:/usr/include/qt6/QtCore/qlatin1stringmatcher.h + mdp:/usr/include/qt6/QtCore/qlatin1stringview.h + mdp:/usr/include/qt6/QtCore/qlibrary.h + mdp:/usr/include/qt6/QtCore/qlibraryinfo.h + mdp:/usr/include/qt6/QtCore/qline.h + mdp:/usr/include/qt6/QtCore/qlist.h + mdp:/usr/include/qt6/QtCore/qlocale.h + mdp:/usr/include/qt6/QtCore/qlockfile.h + mdp:/usr/include/qt6/QtCore/qlogging.h + mdp:/usr/include/qt6/QtCore/qloggingcategory.h + mdp:/usr/include/qt6/QtCore/qmalloc.h + mdp:/usr/include/qt6/QtCore/qmap.h + mdp:/usr/include/qt6/QtCore/qmargins.h + mdp:/usr/include/qt6/QtCore/qmath.h + mdp:/usr/include/qt6/QtCore/qmessageauthenticationcode.h + mdp:/usr/include/qt6/QtCore/qmetacontainer.h + mdp:/usr/include/qt6/QtCore/qmetaobject.h + mdp:/usr/include/qt6/QtCore/qmetatype.h + mdp:/usr/include/qt6/QtCore/qmimedata.h + mdp:/usr/include/qt6/QtCore/qmimedatabase.h + mdp:/usr/include/qt6/QtCore/qmimetype.h + mdp:/usr/include/qt6/QtCore/qminmax.h + mdp:/usr/include/qt6/QtCore/qmutex.h + mdp:/usr/include/qt6/QtCore/qnamespace.h + mdp:/usr/include/qt6/QtCore/qnativeinterface.h + mdp:/usr/include/qt6/QtCore/qnumeric.h + mdp:/usr/include/qt6/QtCore/qobject.h + mdp:/usr/include/qt6/QtCore/qobject_impl.h + mdp:/usr/include/qt6/QtCore/qobjectcleanuphandler.h + mdp:/usr/include/qt6/QtCore/qobjectdefs.h + mdp:/usr/include/qt6/QtCore/qobjectdefs_impl.h + mdp:/usr/include/qt6/QtCore/qoperatingsystemversion.h + mdp:/usr/include/qt6/QtCore/qoverload.h + mdp:/usr/include/qt6/QtCore/qpair.h + mdp:/usr/include/qt6/QtCore/qparallelanimationgroup.h + mdp:/usr/include/qt6/QtCore/qpauseanimation.h + mdp:/usr/include/qt6/QtCore/qpermissions.h + mdp:/usr/include/qt6/QtCore/qplugin.h + mdp:/usr/include/qt6/QtCore/qpluginloader.h + mdp:/usr/include/qt6/QtCore/qpoint.h + mdp:/usr/include/qt6/QtCore/qpointer.h + mdp:/usr/include/qt6/QtCore/qprocess.h + mdp:/usr/include/qt6/QtCore/qprocessordetection.h + mdp:/usr/include/qt6/QtCore/qpromise.h + mdp:/usr/include/qt6/QtCore/qproperty.h + mdp:/usr/include/qt6/QtCore/qpropertyanimation.h + mdp:/usr/include/qt6/QtCore/qpropertyprivate.h + mdp:/usr/include/qt6/QtCore/qqueue.h + mdp:/usr/include/qt6/QtCore/qrandom.h + mdp:/usr/include/qt6/QtCore/qrangemodel.h + mdp:/usr/include/qt6/QtCore/qrangemodel_impl.h + mdp:/usr/include/qt6/QtCore/qreadwritelock.h + mdp:/usr/include/qt6/QtCore/qrect.h + mdp:/usr/include/qt6/QtCore/qrefcount.h + mdp:/usr/include/qt6/QtCore/qregularexpression.h + mdp:/usr/include/qt6/QtCore/qresource.h + mdp:/usr/include/qt6/QtCore/qresultstore.h + mdp:/usr/include/qt6/QtCore/qrunnable.h + mdp:/usr/include/qt6/QtCore/qsavefile.h + mdp:/usr/include/qt6/QtCore/qscopedpointer.h + mdp:/usr/include/qt6/QtCore/qscopedvaluerollback.h + mdp:/usr/include/qt6/QtCore/qscopeguard.h + mdp:/usr/include/qt6/QtCore/qsemaphore.h + mdp:/usr/include/qt6/QtCore/qsequentialanimationgroup.h + mdp:/usr/include/qt6/QtCore/qsequentialiterable.h + mdp:/usr/include/qt6/QtCore/qset.h + mdp:/usr/include/qt6/QtCore/qsettings.h + mdp:/usr/include/qt6/QtCore/qshareddata.h + mdp:/usr/include/qt6/QtCore/qshareddata_impl.h + mdp:/usr/include/qt6/QtCore/qsharedmemory.h + mdp:/usr/include/qt6/QtCore/qsharedpointer.h + mdp:/usr/include/qt6/QtCore/qsharedpointer_impl.h + mdp:/usr/include/qt6/QtCore/qsignalmapper.h + mdp:/usr/include/qt6/QtCore/qsimd.h + mdp:/usr/include/qt6/QtCore/qsize.h + mdp:/usr/include/qt6/QtCore/qsocketnotifier.h + mdp:/usr/include/qt6/QtCore/qsortfilterproxymodel.h + mdp:/usr/include/qt6/QtCore/qspan.h + mdp:/usr/include/qt6/QtCore/qstack.h + mdp:/usr/include/qt6/QtCore/qstandardpaths.h + mdp:/usr/include/qt6/QtCore/qstaticlatin1stringmatcher.h + mdp:/usr/include/qt6/QtCore/qstdlibdetection.h + mdp:/usr/include/qt6/QtCore/qstorageinfo.h + mdp:/usr/include/qt6/QtCore/qstring.h + mdp:/usr/include/qt6/QtCore/qstringalgorithms.h + mdp:/usr/include/qt6/QtCore/qstringbuilder.h + mdp:/usr/include/qt6/QtCore/qstringconverter.h + mdp:/usr/include/qt6/QtCore/qstringconverter_base.h + mdp:/usr/include/qt6/QtCore/qstringfwd.h + mdp:/usr/include/qt6/QtCore/qstringlist.h + mdp:/usr/include/qt6/QtCore/qstringlistmodel.h + mdp:/usr/include/qt6/QtCore/qstringliteral.h + mdp:/usr/include/qt6/QtCore/qstringmatcher.h + mdp:/usr/include/qt6/QtCore/qstringtokenizer.h + mdp:/usr/include/qt6/QtCore/qstringview.h + mdp:/usr/include/qt6/QtCore/qswap.h + mdp:/usr/include/qt6/QtCore/qsysinfo.h + mdp:/usr/include/qt6/QtCore/qsystemdetection.h + mdp:/usr/include/qt6/QtCore/qsystemsemaphore.h + mdp:/usr/include/qt6/QtCore/qtaggedpointer.h + mdp:/usr/include/qt6/QtCore/qtclasshelpermacros.h + mdp:/usr/include/qt6/QtCore/qtconfiginclude.h + mdp:/usr/include/qt6/QtCore/qtconfigmacros.h + mdp:/usr/include/qt6/QtCore/qtcore-config.h + mdp:/usr/include/qt6/QtCore/qtcoreexports.h + mdp:/usr/include/qt6/QtCore/qtcoreglobal.h + mdp:/usr/include/qt6/QtCore/qtcoreversion.h + mdp:/usr/include/qt6/QtCore/qtdeprecationdefinitions.h + mdp:/usr/include/qt6/QtCore/qtdeprecationmarkers.h + mdp:/usr/include/qt6/QtCore/qtemporarydir.h + mdp:/usr/include/qt6/QtCore/qtemporaryfile.h + mdp:/usr/include/qt6/QtCore/qtenvironmentvariables.h + mdp:/usr/include/qt6/QtCore/qtestsupport_core.h + mdp:/usr/include/qt6/QtCore/qtextboundaryfinder.h + mdp:/usr/include/qt6/QtCore/qtextstream.h + mdp:/usr/include/qt6/QtCore/qtformat_impl.h + mdp:/usr/include/qt6/QtCore/qthread.h + mdp:/usr/include/qt6/QtCore/qthreadpool.h + mdp:/usr/include/qt6/QtCore/qthreadstorage.h + mdp:/usr/include/qt6/QtCore/qtimeline.h + mdp:/usr/include/qt6/QtCore/qtimer.h + mdp:/usr/include/qt6/QtCore/qtimezone.h + mdp:/usr/include/qt6/QtCore/qtipccommon.h + mdp:/usr/include/qt6/QtCore/qtmetamacros.h + mdp:/usr/include/qt6/QtCore/qtmocconstants.h + mdp:/usr/include/qt6/QtCore/qtnoop.h + mdp:/usr/include/qt6/QtCore/qtpreprocessorsupport.h + mdp:/usr/include/qt6/QtCore/qtranslator.h + mdp:/usr/include/qt6/QtCore/qtransposeproxymodel.h + mdp:/usr/include/qt6/QtCore/qtresource.h + mdp:/usr/include/qt6/QtCore/qtsan_impl.h + mdp:/usr/include/qt6/QtCore/qtsymbolmacros.h + mdp:/usr/include/qt6/QtCore/qttranslation.h + mdp:/usr/include/qt6/QtCore/qttypetraits.h + mdp:/usr/include/qt6/QtCore/qtversion.h + mdp:/usr/include/qt6/QtCore/qtversionchecks.h + mdp:/usr/include/qt6/QtCore/qtypeinfo.h + mdp:/usr/include/qt6/QtCore/qtyperevision.h + mdp:/usr/include/qt6/QtCore/qtypes.h + mdp:/usr/include/qt6/QtCore/qurl.h + mdp:/usr/include/qt6/QtCore/qurlquery.h + mdp:/usr/include/qt6/QtCore/qutf8stringview.h + mdp:/usr/include/qt6/QtCore/quuid.h + mdp:/usr/include/qt6/QtCore/qvariant.h + mdp:/usr/include/qt6/QtCore/qvariantanimation.h + mdp:/usr/include/qt6/QtCore/qvarianthash.h + mdp:/usr/include/qt6/QtCore/qvariantlist.h + mdp:/usr/include/qt6/QtCore/qvariantmap.h + mdp:/usr/include/qt6/QtCore/qvarlengtharray.h + mdp:/usr/include/qt6/QtCore/qvector.h + mdp:/usr/include/qt6/QtCore/qversionnumber.h + mdp:/usr/include/qt6/QtCore/qversiontagging.h + mdp:/usr/include/qt6/QtCore/qwaitcondition.h + mdp:/usr/include/qt6/QtCore/qwineventnotifier.h + mdp:/usr/include/qt6/QtCore/qxmlstream.h + mdp:/usr/include/qt6/QtCore/qxpfunctional.h + mdp:/usr/include/qt6/QtCore/qxptype_traits.h + mdp:/usr/include/qt6/QtCore/qyieldcpu.h + mdp:/usr/include/qt6/QtGui/QBrush + mdp:/usr/include/qt6/QtGui/QColor + mdp:/usr/include/qt6/QtGui/QFont + mdp:/usr/include/qt6/QtGui/QIcon + mdp:/usr/include/qt6/QtGui/QImage + mdp:/usr/include/qt6/QtGui/QPixmap + mdp:/usr/include/qt6/QtGui/QTransform + mdp:/usr/include/qt6/QtGui/qaction.h + mdp:/usr/include/qt6/QtGui/qbitmap.h + mdp:/usr/include/qt6/QtGui/qbrush.h + mdp:/usr/include/qt6/QtGui/qcolor.h + mdp:/usr/include/qt6/QtGui/qcursor.h + mdp:/usr/include/qt6/QtGui/qevent.h + mdp:/usr/include/qt6/QtGui/qeventpoint.h + mdp:/usr/include/qt6/QtGui/qfont.h + mdp:/usr/include/qt6/QtGui/qfontinfo.h + mdp:/usr/include/qt6/QtGui/qfontmetrics.h + mdp:/usr/include/qt6/QtGui/qfontvariableaxis.h + mdp:/usr/include/qt6/QtGui/qguiapplication.h + mdp:/usr/include/qt6/QtGui/qguiapplication_platform.h + mdp:/usr/include/qt6/QtGui/qicon.h + mdp:/usr/include/qt6/QtGui/qimage.h + mdp:/usr/include/qt6/QtGui/qinputdevice.h + mdp:/usr/include/qt6/QtGui/qinputmethod.h + mdp:/usr/include/qt6/QtGui/qkeysequence.h + mdp:/usr/include/qt6/QtGui/qpaintdevice.h + mdp:/usr/include/qt6/QtGui/qpalette.h + mdp:/usr/include/qt6/QtGui/qpixelformat.h + mdp:/usr/include/qt6/QtGui/qpixmap.h + mdp:/usr/include/qt6/QtGui/qpointingdevice.h + mdp:/usr/include/qt6/QtGui/qpolygon.h + mdp:/usr/include/qt6/QtGui/qregion.h + mdp:/usr/include/qt6/QtGui/qrgb.h + mdp:/usr/include/qt6/QtGui/qrgba64.h + mdp:/usr/include/qt6/QtGui/qscreen.h + mdp:/usr/include/qt6/QtGui/qscreen_platform.h + mdp:/usr/include/qt6/QtGui/qsurface.h + mdp:/usr/include/qt6/QtGui/qsurfaceformat.h + mdp:/usr/include/qt6/QtGui/qtestsupport_gui.h + mdp:/usr/include/qt6/QtGui/qtgui-config.h + mdp:/usr/include/qt6/QtGui/qtguiexports.h + mdp:/usr/include/qt6/QtGui/qtguiglobal.h + mdp:/usr/include/qt6/QtGui/qtransform.h + mdp:/usr/include/qt6/QtGui/qvector2d.h + mdp:/usr/include/qt6/QtGui/qvector3d.h + mdp:/usr/include/qt6/QtGui/qvector4d.h + mdp:/usr/include/qt6/QtGui/qvectornd.h + mdp:/usr/include/qt6/QtGui/qwindow.h + mdp:/usr/include/qt6/QtGui/qwindowdefs.h + mdp:/usr/include/qt6/QtSql/QSqlDatabase + mdp:/usr/include/qt6/QtSql/QSqlError + mdp:/usr/include/qt6/QtSql/QSqlQuery + mdp:/usr/include/qt6/QtSql/qsqldatabase.h + mdp:/usr/include/qt6/QtSql/qsqlerror.h + mdp:/usr/include/qt6/QtSql/qsqlquery.h + mdp:/usr/include/qt6/QtSql/qtsql-config.h + mdp:/usr/include/qt6/QtSql/qtsqlexports.h + mdp:/usr/include/qt6/QtSql/qtsqlglobal.h + mdp:/usr/include/qt6/QtTest/QtTest + mdp:/usr/include/qt6/QtTest/QtTestDepends + mdp:/usr/include/qt6/QtTest/qabstractitemmodeltester.h + mdp:/usr/include/qt6/QtTest/qbenchmark.h + mdp:/usr/include/qt6/QtTest/qbenchmarkmetric.h + mdp:/usr/include/qt6/QtTest/qsignalspy.h + mdp:/usr/include/qt6/QtTest/qtest.h + mdp:/usr/include/qt6/QtTest/qtest_gui.h + mdp:/usr/include/qt6/QtTest/qtest_widgets.h + mdp:/usr/include/qt6/QtTest/qtestassert.h + mdp:/usr/include/qt6/QtTest/qtestcase.h + mdp:/usr/include/qt6/QtTest/qtestdata.h + mdp:/usr/include/qt6/QtTest/qtestevent.h + mdp:/usr/include/qt6/QtTest/qtesteventloop.h + mdp:/usr/include/qt6/QtTest/qtestkeyboard.h + mdp:/usr/include/qt6/QtTest/qtestmouse.h + mdp:/usr/include/qt6/QtTest/qtestspontaneevent.h + mdp:/usr/include/qt6/QtTest/qtestsystem.h + mdp:/usr/include/qt6/QtTest/qtesttostring.h + mdp:/usr/include/qt6/QtTest/qtesttouch.h + mdp:/usr/include/qt6/QtTest/qtestwheel.h + mdp:/usr/include/qt6/QtTest/qttestexports.h + mdp:/usr/include/qt6/QtTest/qttestglobal.h + mdp:/usr/include/qt6/QtTest/qttestlib-config.h + mdp:/usr/include/qt6/QtTest/qttestversion.h + mdp:/usr/include/qt6/QtWidgets/QApplication + mdp:/usr/include/qt6/QtWidgets/QSizePolicy + mdp:/usr/include/qt6/QtWidgets/qapplication.h + mdp:/usr/include/qt6/QtWidgets/qsizepolicy.h + mdp:/usr/include/qt6/QtWidgets/qtestsupport_widgets.h + mdp:/usr/include/qt6/QtWidgets/qtwidgets-config.h + mdp:/usr/include/qt6/QtWidgets/qtwidgetsexports.h + mdp:/usr/include/qt6/QtWidgets/qtwidgetsglobal.h + mdp:/usr/include/qt6/QtWidgets/qwidget.h + mdp:/usr/include/sched.h + mdp:/usr/include/semaphore.h + mdp:/usr/include/stdc-predef.h + mdp:/usr/include/stdint.h + mdp:/usr/include/stdio.h + mdp:/usr/include/stdlib.h + mdp:/usr/include/string.h + mdp:/usr/include/strings.h + mdp:/usr/include/sys/cdefs.h + mdp:/usr/include/sys/select.h + mdp:/usr/include/sys/single_threaded.h + mdp:/usr/include/sys/syscall.h + mdp:/usr/include/sys/time.h + mdp:/usr/include/sys/types.h + mdp:/usr/include/syscall.h + mdp:/usr/include/time.h + mdp:/usr/include/unistd.h + mdp:/usr/include/wchar.h + mdp:/usr/include/wctype.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/adxintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxavx512intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxbf16intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxcomplexintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxfp16intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxfp8intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxint8intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxmovrsintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxtf32intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxtileintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxtransposeintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2-512bf16intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2-512convertintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2-512mediaintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2-512minmaxintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2-512satcvtintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2bf16intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2convertintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2copyintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2mediaintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2minmaxintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2satcvtintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx2intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512bf16intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512bf16vlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512bitalgintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512bitalgvlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512bwintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512cdintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512dqintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512fintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512fp16intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512fp16vlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512ifmaintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512ifmavlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vbmi2intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vbmi2vlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vbmiintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vbmivlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vlbwintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vldqintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vnniintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vnnivlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vp2intersectintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vp2intersectvlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vpopcntdqintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vpopcntdqvlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avxifmaintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avxintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avxneconvertintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avxvnniint16intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avxvnniint8intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avxvnniintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/bmi2intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/bmiintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/cetintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/cldemoteintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/clflushoptintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/clwbintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/clzerointrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/cmpccxaddintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/emmintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/enqcmdintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/f16cintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/fmaintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/fxsrintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/gfniintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/hresetintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/ia32intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/immintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/keylockerintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/lwpintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/lzcntintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/mm_malloc.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/mmintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/movdirintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/movrsintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/mwaitintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/mwaitxintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/pconfigintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/pkuintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/pmmintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/popcntintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/prfchiintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/prfchwintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/raointintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/rdseedintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/rtmintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/serializeintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/sgxintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/sha512intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/shaintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/sm3intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/sm4intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/smmintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stdarg.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stdbool.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stddef.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/tbmintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/tmmintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/tsxldtrkintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/uintrintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/usermsrintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/vaesintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/vpclmulqdqintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/waitpkgintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/wbnoinvdintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/wmmintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/x86gprintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/xmmintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/xsavecintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/xsaveintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/xsaveoptintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/xsavesintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/xtestintrin.h +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/log_manager.cpp +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/file_utils.h +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/importer.cpp +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/db.h + mmc:Q_OBJECT + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_importer_autogen/moc_predefs.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/db.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/i_asset_database.h + mdp:/usr/include/alloca.h + mdp:/usr/include/asm-generic/bitsperlong.h + mdp:/usr/include/asm-generic/errno-base.h + mdp:/usr/include/asm-generic/errno.h + mdp:/usr/include/asm-generic/int-ll64.h + mdp:/usr/include/asm-generic/posix_types.h + mdp:/usr/include/asm-generic/types.h + mdp:/usr/include/asm/bitsperlong.h + mdp:/usr/include/asm/errno.h + mdp:/usr/include/asm/posix_types.h + mdp:/usr/include/asm/posix_types_64.h + mdp:/usr/include/asm/types.h + mdp:/usr/include/asm/unistd.h + mdp:/usr/include/asm/unistd_64.h + mdp:/usr/include/assert.h + mdp:/usr/include/bits/atomic_wide_counter.h + mdp:/usr/include/bits/byteswap.h + mdp:/usr/include/bits/confname.h + mdp:/usr/include/bits/cpu-set.h + mdp:/usr/include/bits/endian.h + mdp:/usr/include/bits/endianness.h + mdp:/usr/include/bits/environments.h + mdp:/usr/include/bits/errno.h + mdp:/usr/include/bits/floatn-common.h + mdp:/usr/include/bits/floatn.h + mdp:/usr/include/bits/getopt_core.h + mdp:/usr/include/bits/getopt_posix.h + mdp:/usr/include/bits/libc-header-start.h + mdp:/usr/include/bits/local_lim.h + mdp:/usr/include/bits/locale.h + mdp:/usr/include/bits/long-double.h + mdp:/usr/include/bits/posix1_lim.h + mdp:/usr/include/bits/posix2_lim.h + mdp:/usr/include/bits/posix_opt.h + mdp:/usr/include/bits/pthread_stack_min-dynamic.h + mdp:/usr/include/bits/pthreadtypes-arch.h + mdp:/usr/include/bits/pthreadtypes.h + mdp:/usr/include/bits/sched.h + mdp:/usr/include/bits/select.h + mdp:/usr/include/bits/setjmp.h + mdp:/usr/include/bits/stdint-intn.h + mdp:/usr/include/bits/stdint-least.h + mdp:/usr/include/bits/stdint-uintn.h + mdp:/usr/include/bits/stdio_lim.h + mdp:/usr/include/bits/stdlib-float.h + mdp:/usr/include/bits/struct_mutex.h + mdp:/usr/include/bits/struct_rwlock.h + mdp:/usr/include/bits/syscall.h + mdp:/usr/include/bits/thread-shared-types.h + mdp:/usr/include/bits/time.h + mdp:/usr/include/bits/time64.h + mdp:/usr/include/bits/timesize.h + mdp:/usr/include/bits/timex.h + mdp:/usr/include/bits/types.h + mdp:/usr/include/bits/types/FILE.h + mdp:/usr/include/bits/types/__FILE.h + mdp:/usr/include/bits/types/__fpos64_t.h + mdp:/usr/include/bits/types/__fpos_t.h + mdp:/usr/include/bits/types/__locale_t.h + mdp:/usr/include/bits/types/__mbstate_t.h + mdp:/usr/include/bits/types/__sigset_t.h + mdp:/usr/include/bits/types/clock_t.h + mdp:/usr/include/bits/types/clockid_t.h + mdp:/usr/include/bits/types/cookie_io_functions_t.h + mdp:/usr/include/bits/types/error_t.h + mdp:/usr/include/bits/types/locale_t.h + mdp:/usr/include/bits/types/mbstate_t.h + mdp:/usr/include/bits/types/sigset_t.h + mdp:/usr/include/bits/types/struct_FILE.h + mdp:/usr/include/bits/types/struct___jmp_buf_tag.h + mdp:/usr/include/bits/types/struct_itimerspec.h + mdp:/usr/include/bits/types/struct_sched_param.h + mdp:/usr/include/bits/types/struct_timespec.h + mdp:/usr/include/bits/types/struct_timeval.h + mdp:/usr/include/bits/types/struct_tm.h + mdp:/usr/include/bits/types/time_t.h + mdp:/usr/include/bits/types/timer_t.h + mdp:/usr/include/bits/types/wint_t.h + mdp:/usr/include/bits/typesizes.h + mdp:/usr/include/bits/uintn-identity.h + mdp:/usr/include/bits/uio_lim.h + mdp:/usr/include/bits/unistd_ext.h + mdp:/usr/include/bits/waitflags.h + mdp:/usr/include/bits/waitstatus.h + mdp:/usr/include/bits/wchar.h + mdp:/usr/include/bits/wctype-wchar.h + mdp:/usr/include/bits/wordsize.h + mdp:/usr/include/bits/xopen_lim.h + mdp:/usr/include/c++/15/algorithm + mdp:/usr/include/c++/15/array + mdp:/usr/include/c++/15/atomic + mdp:/usr/include/c++/15/backward/auto_ptr.h + mdp:/usr/include/c++/15/backward/binders.h + mdp:/usr/include/c++/15/bit + mdp:/usr/include/c++/15/bits/algorithmfwd.h + mdp:/usr/include/c++/15/bits/align.h + mdp:/usr/include/c++/15/bits/alloc_traits.h + mdp:/usr/include/c++/15/bits/allocated_ptr.h + mdp:/usr/include/c++/15/bits/allocator.h + mdp:/usr/include/c++/15/bits/atomic_base.h + mdp:/usr/include/c++/15/bits/atomic_lockfree_defines.h + mdp:/usr/include/c++/15/bits/atomic_wait.h + mdp:/usr/include/c++/15/bits/basic_ios.h + mdp:/usr/include/c++/15/bits/basic_ios.tcc + mdp:/usr/include/c++/15/bits/basic_string.h + mdp:/usr/include/c++/15/bits/basic_string.tcc + mdp:/usr/include/c++/15/bits/char_traits.h + mdp:/usr/include/c++/15/bits/charconv.h + mdp:/usr/include/c++/15/bits/chrono.h + mdp:/usr/include/c++/15/bits/chrono_io.h + mdp:/usr/include/c++/15/bits/codecvt.h + mdp:/usr/include/c++/15/bits/concept_check.h + mdp:/usr/include/c++/15/bits/cpp_type_traits.h + mdp:/usr/include/c++/15/bits/cxxabi_forced.h + mdp:/usr/include/c++/15/bits/cxxabi_init_exception.h + mdp:/usr/include/c++/15/bits/enable_special_members.h + mdp:/usr/include/c++/15/bits/erase_if.h + mdp:/usr/include/c++/15/bits/exception.h + mdp:/usr/include/c++/15/bits/exception_defines.h + mdp:/usr/include/c++/15/bits/exception_ptr.h + mdp:/usr/include/c++/15/bits/functexcept.h + mdp:/usr/include/c++/15/bits/functional_hash.h + mdp:/usr/include/c++/15/bits/hash_bytes.h + mdp:/usr/include/c++/15/bits/hashtable.h + mdp:/usr/include/c++/15/bits/hashtable_policy.h + mdp:/usr/include/c++/15/bits/invoke.h + mdp:/usr/include/c++/15/bits/ios_base.h + mdp:/usr/include/c++/15/bits/istream.tcc + mdp:/usr/include/c++/15/bits/iterator_concepts.h + mdp:/usr/include/c++/15/bits/list.tcc + mdp:/usr/include/c++/15/bits/locale_classes.h + mdp:/usr/include/c++/15/bits/locale_classes.tcc + mdp:/usr/include/c++/15/bits/locale_conv.h + mdp:/usr/include/c++/15/bits/locale_facets.h + mdp:/usr/include/c++/15/bits/locale_facets.tcc + mdp:/usr/include/c++/15/bits/locale_facets_nonio.h + mdp:/usr/include/c++/15/bits/locale_facets_nonio.tcc + mdp:/usr/include/c++/15/bits/localefwd.h + mdp:/usr/include/c++/15/bits/max_size_type.h + mdp:/usr/include/c++/15/bits/memory_resource.h + mdp:/usr/include/c++/15/bits/memoryfwd.h + mdp:/usr/include/c++/15/bits/move.h + mdp:/usr/include/c++/15/bits/nested_exception.h + mdp:/usr/include/c++/15/bits/new_allocator.h + mdp:/usr/include/c++/15/bits/node_handle.h + mdp:/usr/include/c++/15/bits/ostream.h + mdp:/usr/include/c++/15/bits/ostream.tcc + mdp:/usr/include/c++/15/bits/ostream_insert.h + mdp:/usr/include/c++/15/bits/parse_numbers.h + mdp:/usr/include/c++/15/bits/postypes.h + mdp:/usr/include/c++/15/bits/predefined_ops.h + mdp:/usr/include/c++/15/bits/ptr_traits.h + mdp:/usr/include/c++/15/bits/quoted_string.h + mdp:/usr/include/c++/15/bits/range_access.h + mdp:/usr/include/c++/15/bits/ranges_algo.h + mdp:/usr/include/c++/15/bits/ranges_algobase.h + mdp:/usr/include/c++/15/bits/ranges_base.h + mdp:/usr/include/c++/15/bits/ranges_cmp.h + mdp:/usr/include/c++/15/bits/ranges_uninitialized.h + mdp:/usr/include/c++/15/bits/ranges_util.h + mdp:/usr/include/c++/15/bits/refwrap.h + mdp:/usr/include/c++/15/bits/requires_hosted.h + mdp:/usr/include/c++/15/bits/shared_ptr.h + mdp:/usr/include/c++/15/bits/shared_ptr_atomic.h + mdp:/usr/include/c++/15/bits/shared_ptr_base.h + mdp:/usr/include/c++/15/bits/specfun.h + mdp:/usr/include/c++/15/bits/sstream.tcc + mdp:/usr/include/c++/15/bits/std_abs.h + mdp:/usr/include/c++/15/bits/std_function.h + mdp:/usr/include/c++/15/bits/std_mutex.h + mdp:/usr/include/c++/15/bits/stl_algo.h + mdp:/usr/include/c++/15/bits/stl_algobase.h + mdp:/usr/include/c++/15/bits/stl_bvector.h + mdp:/usr/include/c++/15/bits/stl_construct.h + mdp:/usr/include/c++/15/bits/stl_function.h + mdp:/usr/include/c++/15/bits/stl_heap.h + mdp:/usr/include/c++/15/bits/stl_iterator.h + mdp:/usr/include/c++/15/bits/stl_iterator_base_funcs.h + mdp:/usr/include/c++/15/bits/stl_iterator_base_types.h + mdp:/usr/include/c++/15/bits/stl_list.h + mdp:/usr/include/c++/15/bits/stl_map.h + mdp:/usr/include/c++/15/bits/stl_multimap.h + mdp:/usr/include/c++/15/bits/stl_multiset.h + mdp:/usr/include/c++/15/bits/stl_numeric.h + mdp:/usr/include/c++/15/bits/stl_pair.h + mdp:/usr/include/c++/15/bits/stl_raw_storage_iter.h + mdp:/usr/include/c++/15/bits/stl_relops.h + mdp:/usr/include/c++/15/bits/stl_set.h + mdp:/usr/include/c++/15/bits/stl_tempbuf.h + mdp:/usr/include/c++/15/bits/stl_tree.h + mdp:/usr/include/c++/15/bits/stl_uninitialized.h + mdp:/usr/include/c++/15/bits/stl_vector.h + mdp:/usr/include/c++/15/bits/stream_iterator.h + mdp:/usr/include/c++/15/bits/streambuf.tcc + mdp:/usr/include/c++/15/bits/streambuf_iterator.h + mdp:/usr/include/c++/15/bits/string_view.tcc + mdp:/usr/include/c++/15/bits/stringfwd.h + mdp:/usr/include/c++/15/bits/uniform_int_dist.h + mdp:/usr/include/c++/15/bits/unique_ptr.h + mdp:/usr/include/c++/15/bits/unordered_map.h + mdp:/usr/include/c++/15/bits/unordered_set.h + mdp:/usr/include/c++/15/bits/uses_allocator.h + mdp:/usr/include/c++/15/bits/uses_allocator_args.h + mdp:/usr/include/c++/15/bits/utility.h + mdp:/usr/include/c++/15/bits/vector.tcc + mdp:/usr/include/c++/15/bits/version.h + mdp:/usr/include/c++/15/cassert + mdp:/usr/include/c++/15/cctype + mdp:/usr/include/c++/15/cerrno + mdp:/usr/include/c++/15/charconv + mdp:/usr/include/c++/15/chrono + mdp:/usr/include/c++/15/climits + mdp:/usr/include/c++/15/clocale + mdp:/usr/include/c++/15/cmath + mdp:/usr/include/c++/15/compare + mdp:/usr/include/c++/15/concepts + mdp:/usr/include/c++/15/cstddef + mdp:/usr/include/c++/15/cstdint + mdp:/usr/include/c++/15/cstdio + mdp:/usr/include/c++/15/cstdlib + mdp:/usr/include/c++/15/cstring + mdp:/usr/include/c++/15/ctime + mdp:/usr/include/c++/15/cwchar + mdp:/usr/include/c++/15/cwctype + mdp:/usr/include/c++/15/debug/assertions.h + mdp:/usr/include/c++/15/debug/debug.h + mdp:/usr/include/c++/15/exception + mdp:/usr/include/c++/15/ext/aligned_buffer.h + mdp:/usr/include/c++/15/ext/alloc_traits.h + mdp:/usr/include/c++/15/ext/atomicity.h + mdp:/usr/include/c++/15/ext/concurrence.h + mdp:/usr/include/c++/15/ext/numeric_traits.h + mdp:/usr/include/c++/15/ext/string_conversions.h + mdp:/usr/include/c++/15/ext/type_traits.h + mdp:/usr/include/c++/15/filesystem + mdp:/usr/include/c++/15/format + mdp:/usr/include/c++/15/functional + mdp:/usr/include/c++/15/initializer_list + mdp:/usr/include/c++/15/iomanip + mdp:/usr/include/c++/15/ios + mdp:/usr/include/c++/15/iosfwd + mdp:/usr/include/c++/15/istream + mdp:/usr/include/c++/15/iterator + mdp:/usr/include/c++/15/limits + mdp:/usr/include/c++/15/list + mdp:/usr/include/c++/15/locale + mdp:/usr/include/c++/15/map + mdp:/usr/include/c++/15/memory + mdp:/usr/include/c++/15/new + mdp:/usr/include/c++/15/numeric + mdp:/usr/include/c++/15/optional + mdp:/usr/include/c++/15/ostream + mdp:/usr/include/c++/15/pstl/execution_defs.h + mdp:/usr/include/c++/15/pstl/glue_numeric_defs.h + mdp:/usr/include/c++/15/pstl/pstl_config.h + mdp:/usr/include/c++/15/ratio + mdp:/usr/include/c++/15/set + mdp:/usr/include/c++/15/sstream + mdp:/usr/include/c++/15/stdexcept + mdp:/usr/include/c++/15/streambuf + mdp:/usr/include/c++/15/string + mdp:/usr/include/c++/15/string_view + mdp:/usr/include/c++/15/system_error + mdp:/usr/include/c++/15/tr1/bessel_function.tcc + mdp:/usr/include/c++/15/tr1/beta_function.tcc + mdp:/usr/include/c++/15/tr1/ell_integral.tcc + mdp:/usr/include/c++/15/tr1/exp_integral.tcc + mdp:/usr/include/c++/15/tr1/gamma.tcc + mdp:/usr/include/c++/15/tr1/hypergeometric.tcc + mdp:/usr/include/c++/15/tr1/legendre_function.tcc + mdp:/usr/include/c++/15/tr1/modified_bessel_func.tcc + mdp:/usr/include/c++/15/tr1/poly_hermite.tcc + mdp:/usr/include/c++/15/tr1/poly_laguerre.tcc + mdp:/usr/include/c++/15/tr1/riemann_zeta.tcc + mdp:/usr/include/c++/15/tr1/special_function_util.h + mdp:/usr/include/c++/15/tuple + mdp:/usr/include/c++/15/type_traits + mdp:/usr/include/c++/15/typeinfo + mdp:/usr/include/c++/15/unordered_map + mdp:/usr/include/c++/15/unordered_set + mdp:/usr/include/c++/15/utility + mdp:/usr/include/c++/15/variant + mdp:/usr/include/c++/15/vector + mdp:/usr/include/c++/15/version + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/atomic_word.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++allocator.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++config.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++locale.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/cpu_defines.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/ctype_base.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/ctype_inline.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/error_constants.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/gthr-default.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/gthr.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/messages_members.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/os_defines.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/time_members.h + mdp:/usr/include/ctype.h + mdp:/usr/include/endian.h + mdp:/usr/include/errno.h + mdp:/usr/include/features-time64.h + mdp:/usr/include/features.h + mdp:/usr/include/gnu/stubs-64.h + mdp:/usr/include/gnu/stubs.h + mdp:/usr/include/libintl.h + mdp:/usr/include/limits.h + mdp:/usr/include/linux/close_range.h + mdp:/usr/include/linux/errno.h + mdp:/usr/include/linux/limits.h + mdp:/usr/include/linux/posix_types.h + mdp:/usr/include/linux/sched/types.h + mdp:/usr/include/linux/stddef.h + mdp:/usr/include/linux/types.h + mdp:/usr/include/locale.h + mdp:/usr/include/pthread.h + mdp:/usr/include/qt6/QtCore/QFileInfo + mdp:/usr/include/qt6/QtCore/QHash + mdp:/usr/include/qt6/QtCore/QObject + mdp:/usr/include/qt6/QtCore/QPair + mdp:/usr/include/qt6/QtCore/QString + mdp:/usr/include/qt6/QtCore/QStringList + mdp:/usr/include/qt6/QtCore/QVariant + mdp:/usr/include/qt6/QtCore/QVector + mdp:/usr/include/qt6/QtCore/q17memory.h + mdp:/usr/include/qt6/QtCore/q20functional.h + mdp:/usr/include/qt6/QtCore/q20iterator.h + mdp:/usr/include/qt6/QtCore/q20memory.h + mdp:/usr/include/qt6/QtCore/q20type_traits.h + mdp:/usr/include/qt6/QtCore/q20utility.h + mdp:/usr/include/qt6/QtCore/q23type_traits.h + mdp:/usr/include/qt6/QtCore/q23utility.h + mdp:/usr/include/qt6/QtCore/qalgorithms.h + mdp:/usr/include/qt6/QtCore/qalloc.h + mdp:/usr/include/qt6/QtCore/qanystringview.h + mdp:/usr/include/qt6/QtCore/qarraydata.h + mdp:/usr/include/qt6/QtCore/qarraydataops.h + mdp:/usr/include/qt6/QtCore/qarraydatapointer.h + mdp:/usr/include/qt6/QtCore/qassert.h + mdp:/usr/include/qt6/QtCore/qatomic.h + mdp:/usr/include/qt6/QtCore/qatomic_cxx11.h + mdp:/usr/include/qt6/QtCore/qbasicatomic.h + mdp:/usr/include/qt6/QtCore/qbindingstorage.h + mdp:/usr/include/qt6/QtCore/qbytearray.h + mdp:/usr/include/qt6/QtCore/qbytearrayalgorithms.h + mdp:/usr/include/qt6/QtCore/qbytearraylist.h + mdp:/usr/include/qt6/QtCore/qbytearrayview.h + mdp:/usr/include/qt6/QtCore/qcalendar.h + mdp:/usr/include/qt6/QtCore/qchar.h + mdp:/usr/include/qt6/QtCore/qcompare.h + mdp:/usr/include/qt6/QtCore/qcompare_impl.h + mdp:/usr/include/qt6/QtCore/qcomparehelpers.h + mdp:/usr/include/qt6/QtCore/qcompilerdetection.h + mdp:/usr/include/qt6/QtCore/qconfig-64.h + mdp:/usr/include/qt6/QtCore/qconfig.h + mdp:/usr/include/qt6/QtCore/qconstructormacros.h + mdp:/usr/include/qt6/QtCore/qcontainerfwd.h + mdp:/usr/include/qt6/QtCore/qcontainerinfo.h + mdp:/usr/include/qt6/QtCore/qcontainertools_impl.h + mdp:/usr/include/qt6/QtCore/qcontiguouscache.h + mdp:/usr/include/qt6/QtCore/qdarwinhelpers.h + mdp:/usr/include/qt6/QtCore/qdatastream.h + mdp:/usr/include/qt6/QtCore/qdatetime.h + mdp:/usr/include/qt6/QtCore/qdebug.h + mdp:/usr/include/qt6/QtCore/qexceptionhandling.h + mdp:/usr/include/qt6/QtCore/qfile.h + mdp:/usr/include/qt6/QtCore/qfiledevice.h + mdp:/usr/include/qt6/QtCore/qfileinfo.h + mdp:/usr/include/qt6/QtCore/qflags.h + mdp:/usr/include/qt6/QtCore/qfloat16.h + mdp:/usr/include/qt6/QtCore/qforeach.h + mdp:/usr/include/qt6/QtCore/qfunctionaltools_impl.h + mdp:/usr/include/qt6/QtCore/qfunctionpointer.h + mdp:/usr/include/qt6/QtCore/qgenericatomic.h + mdp:/usr/include/qt6/QtCore/qglobal.h + mdp:/usr/include/qt6/QtCore/qglobalstatic.h + mdp:/usr/include/qt6/QtCore/qhash.h + mdp:/usr/include/qt6/QtCore/qhashfunctions.h + mdp:/usr/include/qt6/QtCore/qiodevice.h + mdp:/usr/include/qt6/QtCore/qiodevicebase.h + mdp:/usr/include/qt6/QtCore/qiterable.h + mdp:/usr/include/qt6/QtCore/qiterator.h + mdp:/usr/include/qt6/QtCore/qlatin1stringview.h + mdp:/usr/include/qt6/QtCore/qlist.h + mdp:/usr/include/qt6/QtCore/qlocale.h + mdp:/usr/include/qt6/QtCore/qlogging.h + mdp:/usr/include/qt6/QtCore/qmalloc.h + mdp:/usr/include/qt6/QtCore/qmap.h + mdp:/usr/include/qt6/QtCore/qmath.h + mdp:/usr/include/qt6/QtCore/qmetacontainer.h + mdp:/usr/include/qt6/QtCore/qmetaobject.h + mdp:/usr/include/qt6/QtCore/qmetatype.h + mdp:/usr/include/qt6/QtCore/qminmax.h + mdp:/usr/include/qt6/QtCore/qnamespace.h + mdp:/usr/include/qt6/QtCore/qnumeric.h + mdp:/usr/include/qt6/QtCore/qobject.h + mdp:/usr/include/qt6/QtCore/qobject_impl.h + mdp:/usr/include/qt6/QtCore/qobjectdefs.h + mdp:/usr/include/qt6/QtCore/qobjectdefs_impl.h + mdp:/usr/include/qt6/QtCore/qoverload.h + mdp:/usr/include/qt6/QtCore/qpair.h + mdp:/usr/include/qt6/QtCore/qprocessordetection.h + mdp:/usr/include/qt6/QtCore/qrefcount.h + mdp:/usr/include/qt6/QtCore/qscopedpointer.h + mdp:/usr/include/qt6/QtCore/qscopeguard.h + mdp:/usr/include/qt6/QtCore/qset.h + mdp:/usr/include/qt6/QtCore/qshareddata.h + mdp:/usr/include/qt6/QtCore/qshareddata_impl.h + mdp:/usr/include/qt6/QtCore/qsharedpointer.h + mdp:/usr/include/qt6/QtCore/qsharedpointer_impl.h + mdp:/usr/include/qt6/QtCore/qspan.h + mdp:/usr/include/qt6/QtCore/qstdlibdetection.h + mdp:/usr/include/qt6/QtCore/qstring.h + mdp:/usr/include/qt6/QtCore/qstringalgorithms.h + mdp:/usr/include/qt6/QtCore/qstringbuilder.h + mdp:/usr/include/qt6/QtCore/qstringconverter.h + mdp:/usr/include/qt6/QtCore/qstringconverter_base.h + mdp:/usr/include/qt6/QtCore/qstringfwd.h + mdp:/usr/include/qt6/QtCore/qstringlist.h + mdp:/usr/include/qt6/QtCore/qstringmatcher.h + mdp:/usr/include/qt6/QtCore/qstringtokenizer.h + mdp:/usr/include/qt6/QtCore/qstringview.h + mdp:/usr/include/qt6/QtCore/qswap.h + mdp:/usr/include/qt6/QtCore/qsysinfo.h + mdp:/usr/include/qt6/QtCore/qsystemdetection.h + mdp:/usr/include/qt6/QtCore/qtaggedpointer.h + mdp:/usr/include/qt6/QtCore/qtclasshelpermacros.h + mdp:/usr/include/qt6/QtCore/qtconfiginclude.h + mdp:/usr/include/qt6/QtCore/qtconfigmacros.h + mdp:/usr/include/qt6/QtCore/qtcore-config.h + mdp:/usr/include/qt6/QtCore/qtcoreexports.h + mdp:/usr/include/qt6/QtCore/qtcoreglobal.h + mdp:/usr/include/qt6/QtCore/qtdeprecationdefinitions.h + mdp:/usr/include/qt6/QtCore/qtdeprecationmarkers.h + mdp:/usr/include/qt6/QtCore/qtenvironmentvariables.h + mdp:/usr/include/qt6/QtCore/qtextstream.h + mdp:/usr/include/qt6/QtCore/qtformat_impl.h + mdp:/usr/include/qt6/QtCore/qtimezone.h + mdp:/usr/include/qt6/QtCore/qtmetamacros.h + mdp:/usr/include/qt6/QtCore/qtnoop.h + mdp:/usr/include/qt6/QtCore/qtpreprocessorsupport.h + mdp:/usr/include/qt6/QtCore/qtresource.h + mdp:/usr/include/qt6/QtCore/qttranslation.h + mdp:/usr/include/qt6/QtCore/qttypetraits.h + mdp:/usr/include/qt6/QtCore/qtversion.h + mdp:/usr/include/qt6/QtCore/qtversionchecks.h + mdp:/usr/include/qt6/QtCore/qtypeinfo.h + mdp:/usr/include/qt6/QtCore/qtypes.h + mdp:/usr/include/qt6/QtCore/qutf8stringview.h + mdp:/usr/include/qt6/QtCore/qvariant.h + mdp:/usr/include/qt6/QtCore/qvarlengtharray.h + mdp:/usr/include/qt6/QtCore/qvector.h + mdp:/usr/include/qt6/QtCore/qversiontagging.h + mdp:/usr/include/qt6/QtCore/qxptype_traits.h + mdp:/usr/include/qt6/QtCore/qyieldcpu.h + mdp:/usr/include/qt6/QtSql/QSqlDatabase + mdp:/usr/include/qt6/QtSql/QSqlError + mdp:/usr/include/qt6/QtSql/QSqlQuery + mdp:/usr/include/qt6/QtSql/qsqldatabase.h + mdp:/usr/include/qt6/QtSql/qsqlerror.h + mdp:/usr/include/qt6/QtSql/qsqlquery.h + mdp:/usr/include/qt6/QtSql/qtsql-config.h + mdp:/usr/include/qt6/QtSql/qtsqlexports.h + mdp:/usr/include/qt6/QtSql/qtsqlglobal.h + mdp:/usr/include/sched.h + mdp:/usr/include/stdc-predef.h + mdp:/usr/include/stdint.h + mdp:/usr/include/stdio.h + mdp:/usr/include/stdlib.h + mdp:/usr/include/string.h + mdp:/usr/include/strings.h + mdp:/usr/include/sys/cdefs.h + mdp:/usr/include/sys/select.h + mdp:/usr/include/sys/single_threaded.h + mdp:/usr/include/sys/syscall.h + mdp:/usr/include/sys/types.h + mdp:/usr/include/syscall.h + mdp:/usr/include/time.h + mdp:/usr/include/unistd.h + mdp:/usr/include/wchar.h + mdp:/usr/include/wctype.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stdarg.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stdbool.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stddef.h diff --git a/build-linux/tests/CMakeFiles/test_live_preview_manager.dir/__/src/live_preview_manager.cpp.o b/build-linux/tests/CMakeFiles/test_live_preview_manager.dir/__/src/live_preview_manager.cpp.o new file mode 100644 index 00000000..c304b5dc Binary files /dev/null and b/build-linux/tests/CMakeFiles/test_live_preview_manager.dir/__/src/live_preview_manager.cpp.o differ diff --git a/build-linux/tests/CMakeFiles/test_live_preview_manager.dir/__/src/oiio_image_loader.cpp.o b/build-linux/tests/CMakeFiles/test_live_preview_manager.dir/__/src/oiio_image_loader.cpp.o new file mode 100644 index 00000000..10a9c463 Binary files /dev/null and b/build-linux/tests/CMakeFiles/test_live_preview_manager.dir/__/src/oiio_image_loader.cpp.o differ diff --git a/build-linux/tests/CMakeFiles/test_live_preview_manager.dir/__/src/thumbnail_cache_manager.cpp.o b/build-linux/tests/CMakeFiles/test_live_preview_manager.dir/__/src/thumbnail_cache_manager.cpp.o new file mode 100644 index 00000000..26d5d4d0 Binary files /dev/null and b/build-linux/tests/CMakeFiles/test_live_preview_manager.dir/__/src/thumbnail_cache_manager.cpp.o differ diff --git a/build-linux/tests/CMakeFiles/test_live_preview_manager.dir/__/src/utils.cpp.o b/build-linux/tests/CMakeFiles/test_live_preview_manager.dir/__/src/utils.cpp.o new file mode 100644 index 00000000..66b69240 Binary files /dev/null and b/build-linux/tests/CMakeFiles/test_live_preview_manager.dir/__/src/utils.cpp.o differ diff --git a/build-linux/tests/CMakeFiles/test_live_preview_manager.dir/test_live_preview_manager.cpp.o b/build-linux/tests/CMakeFiles/test_live_preview_manager.dir/test_live_preview_manager.cpp.o new file mode 100644 index 00000000..71f76ad7 Binary files /dev/null and b/build-linux/tests/CMakeFiles/test_live_preview_manager.dir/test_live_preview_manager.cpp.o differ diff --git a/build-linux/tests/CMakeFiles/test_live_preview_manager.dir/test_live_preview_manager_autogen/mocs_compilation.cpp.o b/build-linux/tests/CMakeFiles/test_live_preview_manager.dir/test_live_preview_manager_autogen/mocs_compilation.cpp.o new file mode 100644 index 00000000..0ffac6ff Binary files /dev/null and b/build-linux/tests/CMakeFiles/test_live_preview_manager.dir/test_live_preview_manager_autogen/mocs_compilation.cpp.o differ diff --git a/build-linux/tests/CMakeFiles/test_live_preview_manager_autogen.dir/AutogenInfo.json b/build-linux/tests/CMakeFiles/test_live_preview_manager_autogen.dir/AutogenInfo.json new file mode 100644 index 00000000..2b97379e --- /dev/null +++ b/build-linux/tests/CMakeFiles/test_live_preview_manager_autogen.dir/AutogenInfo.json @@ -0,0 +1,236 @@ +{ + "BUILD_DIR" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_live_preview_manager_autogen", + "CMAKE_BINARY_DIR" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux", + "CMAKE_CURRENT_BINARY_DIR" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests", + "CMAKE_CURRENT_SOURCE_DIR" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests", + "CMAKE_EXECUTABLE" : "/usr/bin/cmake", + "CMAKE_LIST_FILES" : + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/CMakeLists.txt", + "/usr/lib64/cmake/Qt6/Qt6ConfigVersion.cmake", + "/usr/lib64/cmake/Qt6/Qt6ConfigVersionImpl.cmake", + "/usr/lib64/cmake/Qt6/Qt6Config.cmake", + "/usr/lib64/cmake/Qt6/QtPublicCMakeEarlyPolicyHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicCMakeHelpers.cmake", + "/usr/lib64/cmake/Qt6/Qt6ConfigExtras.cmake", + "/usr/lib64/cmake/Qt6/QtPublicCMakeVersionHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtInstallPaths.cmake", + "/usr/lib64/cmake/Qt6/Qt6Targets.cmake", + "/usr/lib64/cmake/Qt6/Qt6VersionlessAliasTargets.cmake", + "/usr/lib64/cmake/Qt6/QtFeature.cmake", + "/usr/share/cmake/Modules/CheckCXXCompilerFlag.cmake", + "/usr/lib64/cmake/Qt6/QtFeatureCommon.cmake", + "/usr/lib64/cmake/Qt6/QtPublicAndroidHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicAppleHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicCMakeHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicCMakeVersionHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicDependencyHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicExternalProjectHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicFinalizerHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicFindPackageHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicGitHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicPluginHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicPluginHelpers_v2.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomAttributionHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomBuildToolHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomCommonGenerationHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomCpeHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomCycloneDXHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomDocumentNamespaceHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomDepHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomExternalReferenceHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomFileHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomGenerationHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomGenerationCycloneDXHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomLicenseHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomOpsHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomPurlHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomPythonHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomQtEntityHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomRelationshipHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomSystemDepHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicTargetHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicTestHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicToolHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicWalkLibsHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicWindowsHelpers.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6/Qt6Dependencies.cmake", + "/usr/lib64/cmake/Qt6Test/Qt6TestConfigVersion.cmake", + "/usr/lib64/cmake/Qt6Test/Qt6TestConfigVersionImpl.cmake", + "/usr/lib64/cmake/Qt6Test/Qt6TestConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6Test/Qt6TestDependencies.cmake", + "/usr/lib64/cmake/Qt6Test/Qt6TestTargets.cmake", + "/usr/lib64/cmake/Qt6Test/Qt6TestTargets-relwithdebinfo.cmake", + "/usr/lib64/cmake/Qt6Test/Qt6TestAdditionalTargetInfo.cmake", + "/usr/lib64/cmake/Qt6Test/QtTestProperties.cmake", + "/usr/lib64/cmake/Qt6Test/Qt6TestVersionlessAliasTargets.cmake" + ], + "CMAKE_SOURCE_DIR" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6", + "CROSS_CONFIG" : false, + "DEP_FILE" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_live_preview_manager_autogen/deps", + "DEP_FILE_RULE_NAME" : "test_live_preview_manager_autogen/timestamp", + "HEADERS" : + [ + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/live_preview_manager.h", + "MU", + "VNU7RW3YIC/moc_live_preview_manager.cpp", + null + ], + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/oiio_image_loader.h", + "MU", + "VNU7RW3YIC/moc_oiio_image_loader.cpp", + null + ], + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/thumbnail_cache_manager.h", + "MU", + "VNU7RW3YIC/moc_thumbnail_cache_manager.cpp", + null + ], + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/utils.h", + "MU", + "VNU7RW3YIC/moc_utils.cpp", + null + ] + ], + "HEADER_EXTENSIONS" : [ "h", "hh", "h++", "hm", "hpp", "hxx", "in", "txx" ], + "INCLUDE_DIR" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_live_preview_manager_autogen/include", + "MOC_COMPILATION_FILE" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_live_preview_manager_autogen/mocs_compilation.cpp", + "MOC_DEFINITIONS" : + [ + "FTK_API_GL_4_1", + "HAVE_FFMPEG=0", + "HAVE_OPENIMAGEIO=0", + "HAVE_TLRENDER=0", + "QT_CONCURRENT_LIB", + "QT_CORE_LIB", + "QT_GUI_LIB", + "QT_NO_DEBUG", + "QT_TESTCASE_BUILDDIR=\"/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests\"", + "QT_TESTCASE_SOURCEDIR=\"/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests\"", + "QT_TESTLIB_LIB", + "QT_WIDGETS_LIB", + "TLRENDER_EXR", + "TLRENDER_FFMPEG", + "TLRENDER_FFMPEG_PLUGIN", + "TLRENDER_JPEG", + "TLRENDER_OCIO", + "TLRENDER_OIIO", + "TLRENDER_PNG", + "TLRENDER_SDL2", + "TLRENDER_TIFF" + ], + "MOC_DEPEND_FILTERS" : + [ + [ + "Q_PLUGIN_METADATA", + "[\n][ \t]*Q_PLUGIN_METADATA[ \t]*\\([^\\)]*FILE[ \t]*\"([^\"]+)\"" + ] + ], + "MOC_INCLUDES" : + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src", + "/usr/include/qt6/QtTest", + "/usr/include/qt6", + "/usr/include/qt6/QtCore", + "/usr/lib64/qt6/mkspecs/linux-g++", + "/usr/include/qt6/QtWidgets", + "/usr/include/qt6/QtGui", + "/usr/include/qt6/QtConcurrent", + "/usr/include", + "/usr/include/c++/15", + "/usr/include/c++/15/x86_64-redhat-linux", + "/usr/include/c++/15/backward", + "/usr/lib/gcc/x86_64-redhat-linux/15/include", + "/usr/local/include" + ], + "MOC_MACRO_NAMES" : + [ + "Q_OBJECT", + "Q_GADGET", + "Q_NAMESPACE", + "Q_NAMESPACE_EXPORT", + "Q_GADGET_EXPORT", + "Q_ENUM_NS" + ], + "MOC_OPTIONS" : [], + "MOC_PATH_PREFIX" : false, + "MOC_PREDEFS_CMD" : + [ + "/usr/bin/c++", + "-std=gnu++20", + "-w", + "-dM", + "-E", + "/usr/share/cmake/Modules/CMakeCXXCompilerABI.cpp" + ], + "MOC_PREDEFS_FILE" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_live_preview_manager_autogen/moc_predefs.h", + "MOC_RELAXED_MODE" : false, + "MOC_SKIP" : + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_db_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_importer_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_models_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_sequence_detector_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_simple_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_utils_autogen/mocs_compilation.cpp" + ], + "MULTI_CONFIG" : false, + "PARALLEL" : 16, + "PARSE_CACHE_FILE" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/CMakeFiles/test_live_preview_manager_autogen.dir/ParseCache.txt", + "QT_MOC_EXECUTABLE" : "/usr/lib64/qt6/libexec/moc", + "QT_UIC_EXECUTABLE" : "/usr/lib64/qt6/libexec/uic", + "QT_VERSION_MAJOR" : 6, + "QT_VERSION_MINOR" : 10, + "SETTINGS_FILE" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/CMakeFiles/test_live_preview_manager_autogen.dir/AutogenUsed.txt", + "SOURCES" : + [ + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/live_preview_manager.cpp", + "MU", + null + ], + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/oiio_image_loader.cpp", + "MU", + null + ], + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/thumbnail_cache_manager.cpp", + "MU", + null + ], + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/utils.cpp", + "MU", + null + ], + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/test_live_preview_manager.cpp", + "MU", + null + ] + ], + "UIC_OPTIONS" : [], + "UIC_SEARCH_PATHS" : [], + "UIC_SKIP" : + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_db_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_importer_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_models_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_sequence_detector_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_simple_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_utils_autogen/mocs_compilation.cpp" + ], + "UIC_UI_FILES" : [], + "USE_BETTER_GRAPH" : true, + "VERBOSITY" : 0 +} diff --git a/build-linux/tests/CMakeFiles/test_live_preview_manager_autogen.dir/AutogenUsed.txt b/build-linux/tests/CMakeFiles/test_live_preview_manager_autogen.dir/AutogenUsed.txt new file mode 100644 index 00000000..29735589 --- /dev/null +++ b/build-linux/tests/CMakeFiles/test_live_preview_manager_autogen.dir/AutogenUsed.txt @@ -0,0 +1,2 @@ +moc:ffc6890be8a65dc944e35ebfc84c321013aa82ded2c656dddc7fa79880fd85d1 +uic:0df7b06f04b60705a14ff966fc10725af0fb193398324deeaf17e44a5f9db1e0 diff --git a/build-linux/tests/CMakeFiles/test_live_preview_manager_autogen.dir/ParseCache.txt b/build-linux/tests/CMakeFiles/test_live_preview_manager_autogen.dir/ParseCache.txt new file mode 100644 index 00000000..10304a5a --- /dev/null +++ b/build-linux/tests/CMakeFiles/test_live_preview_manager_autogen.dir/ParseCache.txt @@ -0,0 +1,1862 @@ +# Generated by CMake. Changes will be overwritten. +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/test_live_preview_manager.cpp + mmc:Q_OBJECT + mid:test_live_preview_manager.moc + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_live_preview_manager_autogen/moc_predefs.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/live_preview_manager.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/test_live_preview_manager.cpp + mdp:/usr/include/alloca.h + mdp:/usr/include/asm-generic/bitsperlong.h + mdp:/usr/include/asm-generic/errno-base.h + mdp:/usr/include/asm-generic/errno.h + mdp:/usr/include/asm-generic/int-ll64.h + mdp:/usr/include/asm-generic/posix_types.h + mdp:/usr/include/asm-generic/types.h + mdp:/usr/include/asm/bitsperlong.h + mdp:/usr/include/asm/errno.h + mdp:/usr/include/asm/posix_types.h + mdp:/usr/include/asm/posix_types_64.h + mdp:/usr/include/asm/types.h + mdp:/usr/include/asm/unistd.h + mdp:/usr/include/asm/unistd_64.h + mdp:/usr/include/assert.h + mdp:/usr/include/bits/atomic_wide_counter.h + mdp:/usr/include/bits/byteswap.h + mdp:/usr/include/bits/confname.h + mdp:/usr/include/bits/cpu-set.h + mdp:/usr/include/bits/endian.h + mdp:/usr/include/bits/endianness.h + mdp:/usr/include/bits/environments.h + mdp:/usr/include/bits/errno.h + mdp:/usr/include/bits/floatn-common.h + mdp:/usr/include/bits/floatn.h + mdp:/usr/include/bits/getopt_core.h + mdp:/usr/include/bits/getopt_posix.h + mdp:/usr/include/bits/libc-header-start.h + mdp:/usr/include/bits/local_lim.h + mdp:/usr/include/bits/locale.h + mdp:/usr/include/bits/long-double.h + mdp:/usr/include/bits/posix1_lim.h + mdp:/usr/include/bits/posix2_lim.h + mdp:/usr/include/bits/posix_opt.h + mdp:/usr/include/bits/pthread_stack_min-dynamic.h + mdp:/usr/include/bits/pthreadtypes-arch.h + mdp:/usr/include/bits/pthreadtypes.h + mdp:/usr/include/bits/sched.h + mdp:/usr/include/bits/select.h + mdp:/usr/include/bits/semaphore.h + mdp:/usr/include/bits/setjmp.h + mdp:/usr/include/bits/stdint-intn.h + mdp:/usr/include/bits/stdint-least.h + mdp:/usr/include/bits/stdint-uintn.h + mdp:/usr/include/bits/stdio_lim.h + mdp:/usr/include/bits/stdlib-float.h + mdp:/usr/include/bits/struct_mutex.h + mdp:/usr/include/bits/struct_rwlock.h + mdp:/usr/include/bits/syscall.h + mdp:/usr/include/bits/thread-shared-types.h + mdp:/usr/include/bits/time.h + mdp:/usr/include/bits/time64.h + mdp:/usr/include/bits/timesize.h + mdp:/usr/include/bits/timex.h + mdp:/usr/include/bits/types.h + mdp:/usr/include/bits/types/FILE.h + mdp:/usr/include/bits/types/__FILE.h + mdp:/usr/include/bits/types/__fpos64_t.h + mdp:/usr/include/bits/types/__fpos_t.h + mdp:/usr/include/bits/types/__locale_t.h + mdp:/usr/include/bits/types/__mbstate_t.h + mdp:/usr/include/bits/types/__sigset_t.h + mdp:/usr/include/bits/types/clock_t.h + mdp:/usr/include/bits/types/clockid_t.h + mdp:/usr/include/bits/types/cookie_io_functions_t.h + mdp:/usr/include/bits/types/error_t.h + mdp:/usr/include/bits/types/locale_t.h + mdp:/usr/include/bits/types/mbstate_t.h + mdp:/usr/include/bits/types/sigset_t.h + mdp:/usr/include/bits/types/struct_FILE.h + mdp:/usr/include/bits/types/struct___jmp_buf_tag.h + mdp:/usr/include/bits/types/struct_itimerspec.h + mdp:/usr/include/bits/types/struct_sched_param.h + mdp:/usr/include/bits/types/struct_timespec.h + mdp:/usr/include/bits/types/struct_timeval.h + mdp:/usr/include/bits/types/struct_tm.h + mdp:/usr/include/bits/types/time_t.h + mdp:/usr/include/bits/types/timer_t.h + mdp:/usr/include/bits/types/wint_t.h + mdp:/usr/include/bits/typesizes.h + mdp:/usr/include/bits/uintn-identity.h + mdp:/usr/include/bits/uio_lim.h + mdp:/usr/include/bits/unistd_ext.h + mdp:/usr/include/bits/waitflags.h + mdp:/usr/include/bits/waitstatus.h + mdp:/usr/include/bits/wchar.h + mdp:/usr/include/bits/wctype-wchar.h + mdp:/usr/include/bits/wordsize.h + mdp:/usr/include/bits/xopen_lim.h + mdp:/usr/include/c++/15/algorithm + mdp:/usr/include/c++/15/array + mdp:/usr/include/c++/15/atomic + mdp:/usr/include/c++/15/backward/auto_ptr.h + mdp:/usr/include/c++/15/backward/binders.h + mdp:/usr/include/c++/15/bit + mdp:/usr/include/c++/15/bits/algorithmfwd.h + mdp:/usr/include/c++/15/bits/align.h + mdp:/usr/include/c++/15/bits/alloc_traits.h + mdp:/usr/include/c++/15/bits/allocated_ptr.h + mdp:/usr/include/c++/15/bits/allocator.h + mdp:/usr/include/c++/15/bits/atomic_base.h + mdp:/usr/include/c++/15/bits/atomic_futex.h + mdp:/usr/include/c++/15/bits/atomic_lockfree_defines.h + mdp:/usr/include/c++/15/bits/atomic_timed_wait.h + mdp:/usr/include/c++/15/bits/atomic_wait.h + mdp:/usr/include/c++/15/bits/basic_ios.h + mdp:/usr/include/c++/15/bits/basic_ios.tcc + mdp:/usr/include/c++/15/bits/basic_string.h + mdp:/usr/include/c++/15/bits/basic_string.tcc + mdp:/usr/include/c++/15/bits/char_traits.h + mdp:/usr/include/c++/15/bits/charconv.h + mdp:/usr/include/c++/15/bits/chrono.h + mdp:/usr/include/c++/15/bits/chrono_io.h + mdp:/usr/include/c++/15/bits/codecvt.h + mdp:/usr/include/c++/15/bits/concept_check.h + mdp:/usr/include/c++/15/bits/cpp_type_traits.h + mdp:/usr/include/c++/15/bits/cxxabi_forced.h + mdp:/usr/include/c++/15/bits/cxxabi_init_exception.h + mdp:/usr/include/c++/15/bits/enable_special_members.h + mdp:/usr/include/c++/15/bits/erase_if.h + mdp:/usr/include/c++/15/bits/exception.h + mdp:/usr/include/c++/15/bits/exception_defines.h + mdp:/usr/include/c++/15/bits/exception_ptr.h + mdp:/usr/include/c++/15/bits/functexcept.h + mdp:/usr/include/c++/15/bits/functional_hash.h + mdp:/usr/include/c++/15/bits/hash_bytes.h + mdp:/usr/include/c++/15/bits/hashtable.h + mdp:/usr/include/c++/15/bits/hashtable_policy.h + mdp:/usr/include/c++/15/bits/invoke.h + mdp:/usr/include/c++/15/bits/ios_base.h + mdp:/usr/include/c++/15/bits/istream.tcc + mdp:/usr/include/c++/15/bits/iterator_concepts.h + mdp:/usr/include/c++/15/bits/list.tcc + mdp:/usr/include/c++/15/bits/locale_classes.h + mdp:/usr/include/c++/15/bits/locale_classes.tcc + mdp:/usr/include/c++/15/bits/locale_conv.h + mdp:/usr/include/c++/15/bits/locale_facets.h + mdp:/usr/include/c++/15/bits/locale_facets.tcc + mdp:/usr/include/c++/15/bits/locale_facets_nonio.h + mdp:/usr/include/c++/15/bits/locale_facets_nonio.tcc + mdp:/usr/include/c++/15/bits/localefwd.h + mdp:/usr/include/c++/15/bits/max_size_type.h + mdp:/usr/include/c++/15/bits/memory_resource.h + mdp:/usr/include/c++/15/bits/memoryfwd.h + mdp:/usr/include/c++/15/bits/move.h + mdp:/usr/include/c++/15/bits/nested_exception.h + mdp:/usr/include/c++/15/bits/new_allocator.h + mdp:/usr/include/c++/15/bits/node_handle.h + mdp:/usr/include/c++/15/bits/ostream.h + mdp:/usr/include/c++/15/bits/ostream.tcc + mdp:/usr/include/c++/15/bits/ostream_insert.h + mdp:/usr/include/c++/15/bits/parse_numbers.h + mdp:/usr/include/c++/15/bits/postypes.h + mdp:/usr/include/c++/15/bits/predefined_ops.h + mdp:/usr/include/c++/15/bits/ptr_traits.h + mdp:/usr/include/c++/15/bits/quoted_string.h + mdp:/usr/include/c++/15/bits/random.h + mdp:/usr/include/c++/15/bits/random.tcc + mdp:/usr/include/c++/15/bits/range_access.h + mdp:/usr/include/c++/15/bits/ranges_algo.h + mdp:/usr/include/c++/15/bits/ranges_algobase.h + mdp:/usr/include/c++/15/bits/ranges_base.h + mdp:/usr/include/c++/15/bits/ranges_cmp.h + mdp:/usr/include/c++/15/bits/ranges_uninitialized.h + mdp:/usr/include/c++/15/bits/ranges_util.h + mdp:/usr/include/c++/15/bits/refwrap.h + mdp:/usr/include/c++/15/bits/requires_hosted.h + mdp:/usr/include/c++/15/bits/semaphore_base.h + mdp:/usr/include/c++/15/bits/shared_ptr.h + mdp:/usr/include/c++/15/bits/shared_ptr_atomic.h + mdp:/usr/include/c++/15/bits/shared_ptr_base.h + mdp:/usr/include/c++/15/bits/specfun.h + mdp:/usr/include/c++/15/bits/sstream.tcc + mdp:/usr/include/c++/15/bits/std_abs.h + mdp:/usr/include/c++/15/bits/std_function.h + mdp:/usr/include/c++/15/bits/std_mutex.h + mdp:/usr/include/c++/15/bits/std_thread.h + mdp:/usr/include/c++/15/bits/stl_algo.h + mdp:/usr/include/c++/15/bits/stl_algobase.h + mdp:/usr/include/c++/15/bits/stl_bvector.h + mdp:/usr/include/c++/15/bits/stl_construct.h + mdp:/usr/include/c++/15/bits/stl_function.h + mdp:/usr/include/c++/15/bits/stl_heap.h + mdp:/usr/include/c++/15/bits/stl_iterator.h + mdp:/usr/include/c++/15/bits/stl_iterator_base_funcs.h + mdp:/usr/include/c++/15/bits/stl_iterator_base_types.h + mdp:/usr/include/c++/15/bits/stl_list.h + mdp:/usr/include/c++/15/bits/stl_map.h + mdp:/usr/include/c++/15/bits/stl_multimap.h + mdp:/usr/include/c++/15/bits/stl_multiset.h + mdp:/usr/include/c++/15/bits/stl_numeric.h + mdp:/usr/include/c++/15/bits/stl_pair.h + mdp:/usr/include/c++/15/bits/stl_raw_storage_iter.h + mdp:/usr/include/c++/15/bits/stl_relops.h + mdp:/usr/include/c++/15/bits/stl_set.h + mdp:/usr/include/c++/15/bits/stl_tempbuf.h + mdp:/usr/include/c++/15/bits/stl_tree.h + mdp:/usr/include/c++/15/bits/stl_uninitialized.h + mdp:/usr/include/c++/15/bits/stl_vector.h + mdp:/usr/include/c++/15/bits/stream_iterator.h + mdp:/usr/include/c++/15/bits/streambuf.tcc + mdp:/usr/include/c++/15/bits/streambuf_iterator.h + mdp:/usr/include/c++/15/bits/string_view.tcc + mdp:/usr/include/c++/15/bits/stringfwd.h + mdp:/usr/include/c++/15/bits/this_thread_sleep.h + mdp:/usr/include/c++/15/bits/uniform_int_dist.h + mdp:/usr/include/c++/15/bits/unique_lock.h + mdp:/usr/include/c++/15/bits/unique_ptr.h + mdp:/usr/include/c++/15/bits/unordered_map.h + mdp:/usr/include/c++/15/bits/unordered_set.h + mdp:/usr/include/c++/15/bits/uses_allocator.h + mdp:/usr/include/c++/15/bits/uses_allocator_args.h + mdp:/usr/include/c++/15/bits/utility.h + mdp:/usr/include/c++/15/bits/vector.tcc + mdp:/usr/include/c++/15/bits/version.h + mdp:/usr/include/c++/15/cassert + mdp:/usr/include/c++/15/cctype + mdp:/usr/include/c++/15/cerrno + mdp:/usr/include/c++/15/charconv + mdp:/usr/include/c++/15/chrono + mdp:/usr/include/c++/15/climits + mdp:/usr/include/c++/15/clocale + mdp:/usr/include/c++/15/cmath + mdp:/usr/include/c++/15/compare + mdp:/usr/include/c++/15/concepts + mdp:/usr/include/c++/15/condition_variable + mdp:/usr/include/c++/15/cstddef + mdp:/usr/include/c++/15/cstdint + mdp:/usr/include/c++/15/cstdio + mdp:/usr/include/c++/15/cstdlib + mdp:/usr/include/c++/15/cstring + mdp:/usr/include/c++/15/ctime + mdp:/usr/include/c++/15/cwchar + mdp:/usr/include/c++/15/cwctype + mdp:/usr/include/c++/15/debug/assertions.h + mdp:/usr/include/c++/15/debug/debug.h + mdp:/usr/include/c++/15/exception + mdp:/usr/include/c++/15/experimental/source_location + mdp:/usr/include/c++/15/ext/aligned_buffer.h + mdp:/usr/include/c++/15/ext/alloc_traits.h + mdp:/usr/include/c++/15/ext/atomicity.h + mdp:/usr/include/c++/15/ext/concurrence.h + mdp:/usr/include/c++/15/ext/numeric_traits.h + mdp:/usr/include/c++/15/ext/string_conversions.h + mdp:/usr/include/c++/15/ext/type_traits.h + mdp:/usr/include/c++/15/filesystem + mdp:/usr/include/c++/15/format + mdp:/usr/include/c++/15/functional + mdp:/usr/include/c++/15/future + mdp:/usr/include/c++/15/initializer_list + mdp:/usr/include/c++/15/iomanip + mdp:/usr/include/c++/15/ios + mdp:/usr/include/c++/15/iosfwd + mdp:/usr/include/c++/15/istream + mdp:/usr/include/c++/15/iterator + mdp:/usr/include/c++/15/limits + mdp:/usr/include/c++/15/list + mdp:/usr/include/c++/15/locale + mdp:/usr/include/c++/15/map + mdp:/usr/include/c++/15/memory + mdp:/usr/include/c++/15/memory_resource + mdp:/usr/include/c++/15/mutex + mdp:/usr/include/c++/15/new + mdp:/usr/include/c++/15/numeric + mdp:/usr/include/c++/15/optional + mdp:/usr/include/c++/15/ostream + mdp:/usr/include/c++/15/pstl/execution_defs.h + mdp:/usr/include/c++/15/pstl/glue_numeric_defs.h + mdp:/usr/include/c++/15/pstl/pstl_config.h + mdp:/usr/include/c++/15/random + mdp:/usr/include/c++/15/ratio + mdp:/usr/include/c++/15/semaphore + mdp:/usr/include/c++/15/set + mdp:/usr/include/c++/15/shared_mutex + mdp:/usr/include/c++/15/source_location + mdp:/usr/include/c++/15/sstream + mdp:/usr/include/c++/15/stdexcept + mdp:/usr/include/c++/15/stop_token + mdp:/usr/include/c++/15/streambuf + mdp:/usr/include/c++/15/string + mdp:/usr/include/c++/15/string_view + mdp:/usr/include/c++/15/system_error + mdp:/usr/include/c++/15/tr1/bessel_function.tcc + mdp:/usr/include/c++/15/tr1/beta_function.tcc + mdp:/usr/include/c++/15/tr1/ell_integral.tcc + mdp:/usr/include/c++/15/tr1/exp_integral.tcc + mdp:/usr/include/c++/15/tr1/gamma.tcc + mdp:/usr/include/c++/15/tr1/hypergeometric.tcc + mdp:/usr/include/c++/15/tr1/legendre_function.tcc + mdp:/usr/include/c++/15/tr1/modified_bessel_func.tcc + mdp:/usr/include/c++/15/tr1/poly_hermite.tcc + mdp:/usr/include/c++/15/tr1/poly_laguerre.tcc + mdp:/usr/include/c++/15/tr1/riemann_zeta.tcc + mdp:/usr/include/c++/15/tr1/special_function_util.h + mdp:/usr/include/c++/15/tuple + mdp:/usr/include/c++/15/type_traits + mdp:/usr/include/c++/15/typeinfo + mdp:/usr/include/c++/15/unordered_map + mdp:/usr/include/c++/15/unordered_set + mdp:/usr/include/c++/15/utility + mdp:/usr/include/c++/15/variant + mdp:/usr/include/c++/15/vector + mdp:/usr/include/c++/15/version + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/atomic_word.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++allocator.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++config.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++locale.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/cpu_defines.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/ctype_base.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/ctype_inline.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/error_constants.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/gthr-default.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/gthr.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/messages_members.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/opt_random.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/os_defines.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/time_members.h + mdp:/usr/include/ctype.h + mdp:/usr/include/endian.h + mdp:/usr/include/errno.h + mdp:/usr/include/features-time64.h + mdp:/usr/include/features.h + mdp:/usr/include/gnu/stubs-64.h + mdp:/usr/include/gnu/stubs.h + mdp:/usr/include/libintl.h + mdp:/usr/include/limits.h + mdp:/usr/include/linux/close_range.h + mdp:/usr/include/linux/errno.h + mdp:/usr/include/linux/limits.h + mdp:/usr/include/linux/posix_types.h + mdp:/usr/include/linux/sched/types.h + mdp:/usr/include/linux/stddef.h + mdp:/usr/include/linux/types.h + mdp:/usr/include/locale.h + mdp:/usr/include/pthread.h + mdp:/usr/include/qt6/QtCore/QAbstractItemModel + mdp:/usr/include/qt6/QtCore/QCache + mdp:/usr/include/qt6/QtCore/QDeadlineTimer + mdp:/usr/include/qt6/QtCore/QElapsedTimer + mdp:/usr/include/qt6/QtCore/QEvent + mdp:/usr/include/qt6/QtCore/QHash + mdp:/usr/include/qt6/QtCore/QList + mdp:/usr/include/qt6/QtCore/QMap + mdp:/usr/include/qt6/QtCore/QMargins + mdp:/usr/include/qt6/QtCore/QMetaEnum + mdp:/usr/include/qt6/QtCore/QMutex + mdp:/usr/include/qt6/QtCore/QObject + mdp:/usr/include/qt6/QtCore/QReadWriteLock + mdp:/usr/include/qt6/QtCore/QRect + mdp:/usr/include/qt6/QtCore/QSet + mdp:/usr/include/qt6/QtCore/QSize + mdp:/usr/include/qt6/QtCore/QSizeF + mdp:/usr/include/qt6/QtCore/QString + mdp:/usr/include/qt6/QtCore/QStringList + mdp:/usr/include/qt6/QtCore/QTemporaryDir + mdp:/usr/include/qt6/QtCore/QThread + mdp:/usr/include/qt6/QtCore/QThreadPool + mdp:/usr/include/qt6/QtCore/QVariant + mdp:/usr/include/qt6/QtCore/QtCore + mdp:/usr/include/qt6/QtCore/QtCoreDepends + mdp:/usr/include/qt6/QtCore/q17memory.h + mdp:/usr/include/qt6/QtCore/q20algorithm.h + mdp:/usr/include/qt6/QtCore/q20chrono.h + mdp:/usr/include/qt6/QtCore/q20functional.h + mdp:/usr/include/qt6/QtCore/q20iterator.h + mdp:/usr/include/qt6/QtCore/q20map.h + mdp:/usr/include/qt6/QtCore/q20memory.h + mdp:/usr/include/qt6/QtCore/q20type_traits.h + mdp:/usr/include/qt6/QtCore/q20utility.h + mdp:/usr/include/qt6/QtCore/q20vector.h + mdp:/usr/include/qt6/QtCore/q23functional.h + mdp:/usr/include/qt6/QtCore/q23type_traits.h + mdp:/usr/include/qt6/QtCore/q23utility.h + mdp:/usr/include/qt6/QtCore/q26numeric.h + mdp:/usr/include/qt6/QtCore/qabstractanimation.h + mdp:/usr/include/qt6/QtCore/qabstracteventdispatcher.h + mdp:/usr/include/qt6/QtCore/qabstractitemmodel.h + mdp:/usr/include/qt6/QtCore/qabstractnativeeventfilter.h + mdp:/usr/include/qt6/QtCore/qabstractproxymodel.h + mdp:/usr/include/qt6/QtCore/qalgorithms.h + mdp:/usr/include/qt6/QtCore/qalloc.h + mdp:/usr/include/qt6/QtCore/qanimationgroup.h + mdp:/usr/include/qt6/QtCore/qanystringview.h + mdp:/usr/include/qt6/QtCore/qapplicationstatic.h + mdp:/usr/include/qt6/QtCore/qarraydata.h + mdp:/usr/include/qt6/QtCore/qarraydataops.h + mdp:/usr/include/qt6/QtCore/qarraydatapointer.h + mdp:/usr/include/qt6/QtCore/qassert.h + mdp:/usr/include/qt6/QtCore/qassociativeiterable.h + mdp:/usr/include/qt6/QtCore/qatomic.h + mdp:/usr/include/qt6/QtCore/qatomic_cxx11.h + mdp:/usr/include/qt6/QtCore/qatomicscopedvaluerollback.h + mdp:/usr/include/qt6/QtCore/qbasicatomic.h + mdp:/usr/include/qt6/QtCore/qbasictimer.h + mdp:/usr/include/qt6/QtCore/qbindingstorage.h + mdp:/usr/include/qt6/QtCore/qbitarray.h + mdp:/usr/include/qt6/QtCore/qbuffer.h + mdp:/usr/include/qt6/QtCore/qbytearray.h + mdp:/usr/include/qt6/QtCore/qbytearrayalgorithms.h + mdp:/usr/include/qt6/QtCore/qbytearraylist.h + mdp:/usr/include/qt6/QtCore/qbytearraymatcher.h + mdp:/usr/include/qt6/QtCore/qbytearrayview.h + mdp:/usr/include/qt6/QtCore/qcache.h + mdp:/usr/include/qt6/QtCore/qcalendar.h + mdp:/usr/include/qt6/QtCore/qcborarray.h + mdp:/usr/include/qt6/QtCore/qcborcommon.h + mdp:/usr/include/qt6/QtCore/qcbormap.h + mdp:/usr/include/qt6/QtCore/qcborstream.h + mdp:/usr/include/qt6/QtCore/qcborstreamreader.h + mdp:/usr/include/qt6/QtCore/qcborstreamwriter.h + mdp:/usr/include/qt6/QtCore/qcborvalue.h + mdp:/usr/include/qt6/QtCore/qchar.h + mdp:/usr/include/qt6/QtCore/qcheckedint_impl.h + mdp:/usr/include/qt6/QtCore/qchronotimer.h + mdp:/usr/include/qt6/QtCore/qcollator.h + mdp:/usr/include/qt6/QtCore/qcommandlineoption.h + mdp:/usr/include/qt6/QtCore/qcommandlineparser.h + mdp:/usr/include/qt6/QtCore/qcompare.h + mdp:/usr/include/qt6/QtCore/qcompare_impl.h + mdp:/usr/include/qt6/QtCore/qcomparehelpers.h + mdp:/usr/include/qt6/QtCore/qcompilerdetection.h + mdp:/usr/include/qt6/QtCore/qconcatenatetablesproxymodel.h + mdp:/usr/include/qt6/QtCore/qconfig-64.h + mdp:/usr/include/qt6/QtCore/qconfig.h + mdp:/usr/include/qt6/QtCore/qconstructormacros.h + mdp:/usr/include/qt6/QtCore/qcontainerfwd.h + mdp:/usr/include/qt6/QtCore/qcontainerinfo.h + mdp:/usr/include/qt6/QtCore/qcontainertools_impl.h + mdp:/usr/include/qt6/QtCore/qcontiguouscache.h + mdp:/usr/include/qt6/QtCore/qcoreapplication.h + mdp:/usr/include/qt6/QtCore/qcoreapplication_platform.h + mdp:/usr/include/qt6/QtCore/qcoreevent.h + mdp:/usr/include/qt6/QtCore/qcryptographichash.h + mdp:/usr/include/qt6/QtCore/qdarwinhelpers.h + mdp:/usr/include/qt6/QtCore/qdatastream.h + mdp:/usr/include/qt6/QtCore/qdatetime.h + mdp:/usr/include/qt6/QtCore/qdeadlinetimer.h + mdp:/usr/include/qt6/QtCore/qdebug.h + mdp:/usr/include/qt6/QtCore/qdir.h + mdp:/usr/include/qt6/QtCore/qdiriterator.h + mdp:/usr/include/qt6/QtCore/qdirlisting.h + mdp:/usr/include/qt6/QtCore/qeasingcurve.h + mdp:/usr/include/qt6/QtCore/qelapsedtimer.h + mdp:/usr/include/qt6/QtCore/qendian.h + mdp:/usr/include/qt6/QtCore/qeventloop.h + mdp:/usr/include/qt6/QtCore/qexception.h + mdp:/usr/include/qt6/QtCore/qexceptionhandling.h + mdp:/usr/include/qt6/QtCore/qfactoryinterface.h + mdp:/usr/include/qt6/QtCore/qfile.h + mdp:/usr/include/qt6/QtCore/qfiledevice.h + mdp:/usr/include/qt6/QtCore/qfileinfo.h + mdp:/usr/include/qt6/QtCore/qfileselector.h + mdp:/usr/include/qt6/QtCore/qfilesystemwatcher.h + mdp:/usr/include/qt6/QtCore/qflags.h + mdp:/usr/include/qt6/QtCore/qfloat16.h + mdp:/usr/include/qt6/QtCore/qforeach.h + mdp:/usr/include/qt6/QtCore/qfunctionaltools_impl.h + mdp:/usr/include/qt6/QtCore/qfunctionpointer.h + mdp:/usr/include/qt6/QtCore/qfuture.h + mdp:/usr/include/qt6/QtCore/qfuture_impl.h + mdp:/usr/include/qt6/QtCore/qfutureinterface.h + mdp:/usr/include/qt6/QtCore/qfuturesynchronizer.h + mdp:/usr/include/qt6/QtCore/qfuturewatcher.h + mdp:/usr/include/qt6/QtCore/qgenericatomic.h + mdp:/usr/include/qt6/QtCore/qglobal.h + mdp:/usr/include/qt6/QtCore/qglobalstatic.h + mdp:/usr/include/qt6/QtCore/qhash.h + mdp:/usr/include/qt6/QtCore/qhashfunctions.h + mdp:/usr/include/qt6/QtCore/qidentityproxymodel.h + mdp:/usr/include/qt6/QtCore/qiodevice.h + mdp:/usr/include/qt6/QtCore/qiodevicebase.h + mdp:/usr/include/qt6/QtCore/qitemselectionmodel.h + mdp:/usr/include/qt6/QtCore/qiterable.h + mdp:/usr/include/qt6/QtCore/qiterator.h + mdp:/usr/include/qt6/QtCore/qjsonarray.h + mdp:/usr/include/qt6/QtCore/qjsondocument.h + mdp:/usr/include/qt6/QtCore/qjsonobject.h + mdp:/usr/include/qt6/QtCore/qjsonparseerror.h + mdp:/usr/include/qt6/QtCore/qjsonvalue.h + mdp:/usr/include/qt6/QtCore/qlatin1stringmatcher.h + mdp:/usr/include/qt6/QtCore/qlatin1stringview.h + mdp:/usr/include/qt6/QtCore/qlibrary.h + mdp:/usr/include/qt6/QtCore/qlibraryinfo.h + mdp:/usr/include/qt6/QtCore/qline.h + mdp:/usr/include/qt6/QtCore/qlist.h + mdp:/usr/include/qt6/QtCore/qlocale.h + mdp:/usr/include/qt6/QtCore/qlockfile.h + mdp:/usr/include/qt6/QtCore/qlogging.h + mdp:/usr/include/qt6/QtCore/qloggingcategory.h + mdp:/usr/include/qt6/QtCore/qmalloc.h + mdp:/usr/include/qt6/QtCore/qmap.h + mdp:/usr/include/qt6/QtCore/qmargins.h + mdp:/usr/include/qt6/QtCore/qmath.h + mdp:/usr/include/qt6/QtCore/qmessageauthenticationcode.h + mdp:/usr/include/qt6/QtCore/qmetacontainer.h + mdp:/usr/include/qt6/QtCore/qmetaobject.h + mdp:/usr/include/qt6/QtCore/qmetatype.h + mdp:/usr/include/qt6/QtCore/qmimedata.h + mdp:/usr/include/qt6/QtCore/qmimedatabase.h + mdp:/usr/include/qt6/QtCore/qmimetype.h + mdp:/usr/include/qt6/QtCore/qminmax.h + mdp:/usr/include/qt6/QtCore/qmutex.h + mdp:/usr/include/qt6/QtCore/qnamespace.h + mdp:/usr/include/qt6/QtCore/qnativeinterface.h + mdp:/usr/include/qt6/QtCore/qnumeric.h + mdp:/usr/include/qt6/QtCore/qobject.h + mdp:/usr/include/qt6/QtCore/qobject_impl.h + mdp:/usr/include/qt6/QtCore/qobjectcleanuphandler.h + mdp:/usr/include/qt6/QtCore/qobjectdefs.h + mdp:/usr/include/qt6/QtCore/qobjectdefs_impl.h + mdp:/usr/include/qt6/QtCore/qoperatingsystemversion.h + mdp:/usr/include/qt6/QtCore/qoverload.h + mdp:/usr/include/qt6/QtCore/qpair.h + mdp:/usr/include/qt6/QtCore/qparallelanimationgroup.h + mdp:/usr/include/qt6/QtCore/qpauseanimation.h + mdp:/usr/include/qt6/QtCore/qpermissions.h + mdp:/usr/include/qt6/QtCore/qplugin.h + mdp:/usr/include/qt6/QtCore/qpluginloader.h + mdp:/usr/include/qt6/QtCore/qpoint.h + mdp:/usr/include/qt6/QtCore/qpointer.h + mdp:/usr/include/qt6/QtCore/qprocess.h + mdp:/usr/include/qt6/QtCore/qprocessordetection.h + mdp:/usr/include/qt6/QtCore/qpromise.h + mdp:/usr/include/qt6/QtCore/qproperty.h + mdp:/usr/include/qt6/QtCore/qpropertyanimation.h + mdp:/usr/include/qt6/QtCore/qpropertyprivate.h + mdp:/usr/include/qt6/QtCore/qqueue.h + mdp:/usr/include/qt6/QtCore/qrandom.h + mdp:/usr/include/qt6/QtCore/qrangemodel.h + mdp:/usr/include/qt6/QtCore/qrangemodel_impl.h + mdp:/usr/include/qt6/QtCore/qreadwritelock.h + mdp:/usr/include/qt6/QtCore/qrect.h + mdp:/usr/include/qt6/QtCore/qrefcount.h + mdp:/usr/include/qt6/QtCore/qregularexpression.h + mdp:/usr/include/qt6/QtCore/qresource.h + mdp:/usr/include/qt6/QtCore/qresultstore.h + mdp:/usr/include/qt6/QtCore/qrunnable.h + mdp:/usr/include/qt6/QtCore/qsavefile.h + mdp:/usr/include/qt6/QtCore/qscopedpointer.h + mdp:/usr/include/qt6/QtCore/qscopedvaluerollback.h + mdp:/usr/include/qt6/QtCore/qscopeguard.h + mdp:/usr/include/qt6/QtCore/qsemaphore.h + mdp:/usr/include/qt6/QtCore/qsequentialanimationgroup.h + mdp:/usr/include/qt6/QtCore/qsequentialiterable.h + mdp:/usr/include/qt6/QtCore/qset.h + mdp:/usr/include/qt6/QtCore/qsettings.h + mdp:/usr/include/qt6/QtCore/qshareddata.h + mdp:/usr/include/qt6/QtCore/qshareddata_impl.h + mdp:/usr/include/qt6/QtCore/qsharedmemory.h + mdp:/usr/include/qt6/QtCore/qsharedpointer.h + mdp:/usr/include/qt6/QtCore/qsharedpointer_impl.h + mdp:/usr/include/qt6/QtCore/qsignalmapper.h + mdp:/usr/include/qt6/QtCore/qsimd.h + mdp:/usr/include/qt6/QtCore/qsize.h + mdp:/usr/include/qt6/QtCore/qsocketnotifier.h + mdp:/usr/include/qt6/QtCore/qsortfilterproxymodel.h + mdp:/usr/include/qt6/QtCore/qspan.h + mdp:/usr/include/qt6/QtCore/qstack.h + mdp:/usr/include/qt6/QtCore/qstandardpaths.h + mdp:/usr/include/qt6/QtCore/qstaticlatin1stringmatcher.h + mdp:/usr/include/qt6/QtCore/qstdlibdetection.h + mdp:/usr/include/qt6/QtCore/qstorageinfo.h + mdp:/usr/include/qt6/QtCore/qstring.h + mdp:/usr/include/qt6/QtCore/qstringalgorithms.h + mdp:/usr/include/qt6/QtCore/qstringbuilder.h + mdp:/usr/include/qt6/QtCore/qstringconverter.h + mdp:/usr/include/qt6/QtCore/qstringconverter_base.h + mdp:/usr/include/qt6/QtCore/qstringfwd.h + mdp:/usr/include/qt6/QtCore/qstringlist.h + mdp:/usr/include/qt6/QtCore/qstringlistmodel.h + mdp:/usr/include/qt6/QtCore/qstringliteral.h + mdp:/usr/include/qt6/QtCore/qstringmatcher.h + mdp:/usr/include/qt6/QtCore/qstringtokenizer.h + mdp:/usr/include/qt6/QtCore/qstringview.h + mdp:/usr/include/qt6/QtCore/qswap.h + mdp:/usr/include/qt6/QtCore/qsysinfo.h + mdp:/usr/include/qt6/QtCore/qsystemdetection.h + mdp:/usr/include/qt6/QtCore/qsystemsemaphore.h + mdp:/usr/include/qt6/QtCore/qtaggedpointer.h + mdp:/usr/include/qt6/QtCore/qtclasshelpermacros.h + mdp:/usr/include/qt6/QtCore/qtconfiginclude.h + mdp:/usr/include/qt6/QtCore/qtconfigmacros.h + mdp:/usr/include/qt6/QtCore/qtcore-config.h + mdp:/usr/include/qt6/QtCore/qtcoreexports.h + mdp:/usr/include/qt6/QtCore/qtcoreglobal.h + mdp:/usr/include/qt6/QtCore/qtcoreversion.h + mdp:/usr/include/qt6/QtCore/qtdeprecationdefinitions.h + mdp:/usr/include/qt6/QtCore/qtdeprecationmarkers.h + mdp:/usr/include/qt6/QtCore/qtemporarydir.h + mdp:/usr/include/qt6/QtCore/qtemporaryfile.h + mdp:/usr/include/qt6/QtCore/qtenvironmentvariables.h + mdp:/usr/include/qt6/QtCore/qtestsupport_core.h + mdp:/usr/include/qt6/QtCore/qtextboundaryfinder.h + mdp:/usr/include/qt6/QtCore/qtextstream.h + mdp:/usr/include/qt6/QtCore/qtformat_impl.h + mdp:/usr/include/qt6/QtCore/qthread.h + mdp:/usr/include/qt6/QtCore/qthreadpool.h + mdp:/usr/include/qt6/QtCore/qthreadstorage.h + mdp:/usr/include/qt6/QtCore/qtimeline.h + mdp:/usr/include/qt6/QtCore/qtimer.h + mdp:/usr/include/qt6/QtCore/qtimezone.h + mdp:/usr/include/qt6/QtCore/qtipccommon.h + mdp:/usr/include/qt6/QtCore/qtmetamacros.h + mdp:/usr/include/qt6/QtCore/qtmocconstants.h + mdp:/usr/include/qt6/QtCore/qtnoop.h + mdp:/usr/include/qt6/QtCore/qtpreprocessorsupport.h + mdp:/usr/include/qt6/QtCore/qtranslator.h + mdp:/usr/include/qt6/QtCore/qtransposeproxymodel.h + mdp:/usr/include/qt6/QtCore/qtresource.h + mdp:/usr/include/qt6/QtCore/qtsan_impl.h + mdp:/usr/include/qt6/QtCore/qtsymbolmacros.h + mdp:/usr/include/qt6/QtCore/qttranslation.h + mdp:/usr/include/qt6/QtCore/qttypetraits.h + mdp:/usr/include/qt6/QtCore/qtversion.h + mdp:/usr/include/qt6/QtCore/qtversionchecks.h + mdp:/usr/include/qt6/QtCore/qtypeinfo.h + mdp:/usr/include/qt6/QtCore/qtyperevision.h + mdp:/usr/include/qt6/QtCore/qtypes.h + mdp:/usr/include/qt6/QtCore/qurl.h + mdp:/usr/include/qt6/QtCore/qurlquery.h + mdp:/usr/include/qt6/QtCore/qutf8stringview.h + mdp:/usr/include/qt6/QtCore/quuid.h + mdp:/usr/include/qt6/QtCore/qvariant.h + mdp:/usr/include/qt6/QtCore/qvariantanimation.h + mdp:/usr/include/qt6/QtCore/qvarianthash.h + mdp:/usr/include/qt6/QtCore/qvariantlist.h + mdp:/usr/include/qt6/QtCore/qvariantmap.h + mdp:/usr/include/qt6/QtCore/qvarlengtharray.h + mdp:/usr/include/qt6/QtCore/qvector.h + mdp:/usr/include/qt6/QtCore/qversionnumber.h + mdp:/usr/include/qt6/QtCore/qversiontagging.h + mdp:/usr/include/qt6/QtCore/qwaitcondition.h + mdp:/usr/include/qt6/QtCore/qwineventnotifier.h + mdp:/usr/include/qt6/QtCore/qxmlstream.h + mdp:/usr/include/qt6/QtCore/qxpfunctional.h + mdp:/usr/include/qt6/QtCore/qxptype_traits.h + mdp:/usr/include/qt6/QtCore/qyieldcpu.h + mdp:/usr/include/qt6/QtGui/QBrush + mdp:/usr/include/qt6/QtGui/QColor + mdp:/usr/include/qt6/QtGui/QFont + mdp:/usr/include/qt6/QtGui/QIcon + mdp:/usr/include/qt6/QtGui/QImage + mdp:/usr/include/qt6/QtGui/QPixmap + mdp:/usr/include/qt6/QtGui/QTransform + mdp:/usr/include/qt6/QtGui/qaction.h + mdp:/usr/include/qt6/QtGui/qbitmap.h + mdp:/usr/include/qt6/QtGui/qbrush.h + mdp:/usr/include/qt6/QtGui/qcolor.h + mdp:/usr/include/qt6/QtGui/qcursor.h + mdp:/usr/include/qt6/QtGui/qevent.h + mdp:/usr/include/qt6/QtGui/qeventpoint.h + mdp:/usr/include/qt6/QtGui/qfont.h + mdp:/usr/include/qt6/QtGui/qfontinfo.h + mdp:/usr/include/qt6/QtGui/qfontmetrics.h + mdp:/usr/include/qt6/QtGui/qfontvariableaxis.h + mdp:/usr/include/qt6/QtGui/qguiapplication.h + mdp:/usr/include/qt6/QtGui/qguiapplication_platform.h + mdp:/usr/include/qt6/QtGui/qicon.h + mdp:/usr/include/qt6/QtGui/qimage.h + mdp:/usr/include/qt6/QtGui/qinputdevice.h + mdp:/usr/include/qt6/QtGui/qinputmethod.h + mdp:/usr/include/qt6/QtGui/qkeysequence.h + mdp:/usr/include/qt6/QtGui/qpaintdevice.h + mdp:/usr/include/qt6/QtGui/qpalette.h + mdp:/usr/include/qt6/QtGui/qpixelformat.h + mdp:/usr/include/qt6/QtGui/qpixmap.h + mdp:/usr/include/qt6/QtGui/qpointingdevice.h + mdp:/usr/include/qt6/QtGui/qpolygon.h + mdp:/usr/include/qt6/QtGui/qregion.h + mdp:/usr/include/qt6/QtGui/qrgb.h + mdp:/usr/include/qt6/QtGui/qrgba64.h + mdp:/usr/include/qt6/QtGui/qscreen.h + mdp:/usr/include/qt6/QtGui/qscreen_platform.h + mdp:/usr/include/qt6/QtGui/qsurface.h + mdp:/usr/include/qt6/QtGui/qsurfaceformat.h + mdp:/usr/include/qt6/QtGui/qtestsupport_gui.h + mdp:/usr/include/qt6/QtGui/qtgui-config.h + mdp:/usr/include/qt6/QtGui/qtguiexports.h + mdp:/usr/include/qt6/QtGui/qtguiglobal.h + mdp:/usr/include/qt6/QtGui/qtransform.h + mdp:/usr/include/qt6/QtGui/qvector2d.h + mdp:/usr/include/qt6/QtGui/qvector3d.h + mdp:/usr/include/qt6/QtGui/qvector4d.h + mdp:/usr/include/qt6/QtGui/qvectornd.h + mdp:/usr/include/qt6/QtGui/qwindow.h + mdp:/usr/include/qt6/QtGui/qwindowdefs.h + mdp:/usr/include/qt6/QtTest/QSignalSpy + mdp:/usr/include/qt6/QtTest/QtTest + mdp:/usr/include/qt6/QtTest/QtTestDepends + mdp:/usr/include/qt6/QtTest/qabstractitemmodeltester.h + mdp:/usr/include/qt6/QtTest/qbenchmark.h + mdp:/usr/include/qt6/QtTest/qbenchmarkmetric.h + mdp:/usr/include/qt6/QtTest/qsignalspy.h + mdp:/usr/include/qt6/QtTest/qtest.h + mdp:/usr/include/qt6/QtTest/qtest_gui.h + mdp:/usr/include/qt6/QtTest/qtest_widgets.h + mdp:/usr/include/qt6/QtTest/qtestassert.h + mdp:/usr/include/qt6/QtTest/qtestcase.h + mdp:/usr/include/qt6/QtTest/qtestdata.h + mdp:/usr/include/qt6/QtTest/qtestevent.h + mdp:/usr/include/qt6/QtTest/qtesteventloop.h + mdp:/usr/include/qt6/QtTest/qtestkeyboard.h + mdp:/usr/include/qt6/QtTest/qtestmouse.h + mdp:/usr/include/qt6/QtTest/qtestspontaneevent.h + mdp:/usr/include/qt6/QtTest/qtestsystem.h + mdp:/usr/include/qt6/QtTest/qtesttostring.h + mdp:/usr/include/qt6/QtTest/qtesttouch.h + mdp:/usr/include/qt6/QtTest/qtestwheel.h + mdp:/usr/include/qt6/QtTest/qttestexports.h + mdp:/usr/include/qt6/QtTest/qttestglobal.h + mdp:/usr/include/qt6/QtTest/qttestlib-config.h + mdp:/usr/include/qt6/QtTest/qttestversion.h + mdp:/usr/include/qt6/QtWidgets/QSizePolicy + mdp:/usr/include/qt6/QtWidgets/qapplication.h + mdp:/usr/include/qt6/QtWidgets/qsizepolicy.h + mdp:/usr/include/qt6/QtWidgets/qtestsupport_widgets.h + mdp:/usr/include/qt6/QtWidgets/qtwidgets-config.h + mdp:/usr/include/qt6/QtWidgets/qtwidgetsexports.h + mdp:/usr/include/qt6/QtWidgets/qtwidgetsglobal.h + mdp:/usr/include/qt6/QtWidgets/qwidget.h + mdp:/usr/include/sched.h + mdp:/usr/include/semaphore.h + mdp:/usr/include/stdc-predef.h + mdp:/usr/include/stdint.h + mdp:/usr/include/stdio.h + mdp:/usr/include/stdlib.h + mdp:/usr/include/string.h + mdp:/usr/include/strings.h + mdp:/usr/include/sys/cdefs.h + mdp:/usr/include/sys/select.h + mdp:/usr/include/sys/single_threaded.h + mdp:/usr/include/sys/syscall.h + mdp:/usr/include/sys/time.h + mdp:/usr/include/sys/types.h + mdp:/usr/include/syscall.h + mdp:/usr/include/time.h + mdp:/usr/include/unistd.h + mdp:/usr/include/wchar.h + mdp:/usr/include/wctype.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/adxintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxavx512intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxbf16intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxcomplexintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxfp16intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxfp8intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxint8intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxmovrsintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxtf32intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxtileintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxtransposeintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2-512bf16intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2-512convertintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2-512mediaintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2-512minmaxintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2-512satcvtintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2bf16intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2convertintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2copyintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2mediaintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2minmaxintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2satcvtintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx2intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512bf16intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512bf16vlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512bitalgintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512bitalgvlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512bwintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512cdintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512dqintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512fintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512fp16intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512fp16vlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512ifmaintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512ifmavlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vbmi2intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vbmi2vlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vbmiintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vbmivlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vlbwintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vldqintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vnniintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vnnivlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vp2intersectintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vp2intersectvlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vpopcntdqintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vpopcntdqvlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avxifmaintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avxintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avxneconvertintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avxvnniint16intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avxvnniint8intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avxvnniintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/bmi2intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/bmiintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/cetintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/cldemoteintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/clflushoptintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/clwbintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/clzerointrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/cmpccxaddintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/emmintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/enqcmdintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/f16cintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/fmaintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/fxsrintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/gfniintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/hresetintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/ia32intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/immintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/keylockerintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/lwpintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/lzcntintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/mm_malloc.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/mmintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/movdirintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/movrsintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/mwaitintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/mwaitxintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/pconfigintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/pkuintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/pmmintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/popcntintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/prfchiintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/prfchwintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/raointintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/rdseedintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/rtmintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/serializeintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/sgxintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/sha512intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/shaintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/sm3intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/sm4intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/smmintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stdarg.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stdbool.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stddef.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/tbmintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/tmmintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/tsxldtrkintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/uintrintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/usermsrintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/vaesintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/vpclmulqdqintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/waitpkgintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/wbnoinvdintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/wmmintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/x86gprintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/xmmintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/xsavecintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/xsaveintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/xsaveoptintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/xsavesintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/xtestintrin.h +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/utils.cpp +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/thumbnail_cache_manager.cpp +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/live_preview_manager.cpp +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/utils.h +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/thumbnail_cache_manager.h + mmc:Q_OBJECT + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_live_preview_manager_autogen/moc_predefs.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/thumbnail_cache_manager.h + mdp:/usr/include/alloca.h + mdp:/usr/include/asm-generic/bitsperlong.h + mdp:/usr/include/asm-generic/errno-base.h + mdp:/usr/include/asm-generic/errno.h + mdp:/usr/include/asm-generic/int-ll64.h + mdp:/usr/include/asm-generic/posix_types.h + mdp:/usr/include/asm-generic/types.h + mdp:/usr/include/asm/bitsperlong.h + mdp:/usr/include/asm/errno.h + mdp:/usr/include/asm/posix_types.h + mdp:/usr/include/asm/posix_types_64.h + mdp:/usr/include/asm/types.h + mdp:/usr/include/asm/unistd.h + mdp:/usr/include/asm/unistd_64.h + mdp:/usr/include/assert.h + mdp:/usr/include/bits/atomic_wide_counter.h + mdp:/usr/include/bits/byteswap.h + mdp:/usr/include/bits/confname.h + mdp:/usr/include/bits/cpu-set.h + mdp:/usr/include/bits/endian.h + mdp:/usr/include/bits/endianness.h + mdp:/usr/include/bits/environments.h + mdp:/usr/include/bits/errno.h + mdp:/usr/include/bits/floatn-common.h + mdp:/usr/include/bits/floatn.h + mdp:/usr/include/bits/getopt_core.h + mdp:/usr/include/bits/getopt_posix.h + mdp:/usr/include/bits/libc-header-start.h + mdp:/usr/include/bits/local_lim.h + mdp:/usr/include/bits/locale.h + mdp:/usr/include/bits/long-double.h + mdp:/usr/include/bits/posix1_lim.h + mdp:/usr/include/bits/posix2_lim.h + mdp:/usr/include/bits/posix_opt.h + mdp:/usr/include/bits/pthread_stack_min-dynamic.h + mdp:/usr/include/bits/pthreadtypes-arch.h + mdp:/usr/include/bits/pthreadtypes.h + mdp:/usr/include/bits/sched.h + mdp:/usr/include/bits/select.h + mdp:/usr/include/bits/setjmp.h + mdp:/usr/include/bits/stdint-intn.h + mdp:/usr/include/bits/stdint-least.h + mdp:/usr/include/bits/stdint-uintn.h + mdp:/usr/include/bits/stdio_lim.h + mdp:/usr/include/bits/stdlib-float.h + mdp:/usr/include/bits/struct_mutex.h + mdp:/usr/include/bits/struct_rwlock.h + mdp:/usr/include/bits/syscall.h + mdp:/usr/include/bits/thread-shared-types.h + mdp:/usr/include/bits/time.h + mdp:/usr/include/bits/time64.h + mdp:/usr/include/bits/timesize.h + mdp:/usr/include/bits/timex.h + mdp:/usr/include/bits/types.h + mdp:/usr/include/bits/types/FILE.h + mdp:/usr/include/bits/types/__FILE.h + mdp:/usr/include/bits/types/__fpos64_t.h + mdp:/usr/include/bits/types/__fpos_t.h + mdp:/usr/include/bits/types/__locale_t.h + mdp:/usr/include/bits/types/__mbstate_t.h + mdp:/usr/include/bits/types/__sigset_t.h + mdp:/usr/include/bits/types/clock_t.h + mdp:/usr/include/bits/types/clockid_t.h + mdp:/usr/include/bits/types/cookie_io_functions_t.h + mdp:/usr/include/bits/types/error_t.h + mdp:/usr/include/bits/types/locale_t.h + mdp:/usr/include/bits/types/mbstate_t.h + mdp:/usr/include/bits/types/sigset_t.h + mdp:/usr/include/bits/types/struct_FILE.h + mdp:/usr/include/bits/types/struct___jmp_buf_tag.h + mdp:/usr/include/bits/types/struct_itimerspec.h + mdp:/usr/include/bits/types/struct_sched_param.h + mdp:/usr/include/bits/types/struct_timespec.h + mdp:/usr/include/bits/types/struct_timeval.h + mdp:/usr/include/bits/types/struct_tm.h + mdp:/usr/include/bits/types/time_t.h + mdp:/usr/include/bits/types/timer_t.h + mdp:/usr/include/bits/types/wint_t.h + mdp:/usr/include/bits/typesizes.h + mdp:/usr/include/bits/uintn-identity.h + mdp:/usr/include/bits/uio_lim.h + mdp:/usr/include/bits/unistd_ext.h + mdp:/usr/include/bits/waitflags.h + mdp:/usr/include/bits/waitstatus.h + mdp:/usr/include/bits/wchar.h + mdp:/usr/include/bits/wctype-wchar.h + mdp:/usr/include/bits/wordsize.h + mdp:/usr/include/bits/xopen_lim.h + mdp:/usr/include/c++/15/algorithm + mdp:/usr/include/c++/15/array + mdp:/usr/include/c++/15/atomic + mdp:/usr/include/c++/15/backward/auto_ptr.h + mdp:/usr/include/c++/15/backward/binders.h + mdp:/usr/include/c++/15/bit + mdp:/usr/include/c++/15/bits/algorithmfwd.h + mdp:/usr/include/c++/15/bits/align.h + mdp:/usr/include/c++/15/bits/alloc_traits.h + mdp:/usr/include/c++/15/bits/allocated_ptr.h + mdp:/usr/include/c++/15/bits/allocator.h + mdp:/usr/include/c++/15/bits/atomic_base.h + mdp:/usr/include/c++/15/bits/atomic_lockfree_defines.h + mdp:/usr/include/c++/15/bits/atomic_wait.h + mdp:/usr/include/c++/15/bits/basic_ios.h + mdp:/usr/include/c++/15/bits/basic_ios.tcc + mdp:/usr/include/c++/15/bits/basic_string.h + mdp:/usr/include/c++/15/bits/basic_string.tcc + mdp:/usr/include/c++/15/bits/char_traits.h + mdp:/usr/include/c++/15/bits/charconv.h + mdp:/usr/include/c++/15/bits/chrono.h + mdp:/usr/include/c++/15/bits/chrono_io.h + mdp:/usr/include/c++/15/bits/codecvt.h + mdp:/usr/include/c++/15/bits/concept_check.h + mdp:/usr/include/c++/15/bits/cpp_type_traits.h + mdp:/usr/include/c++/15/bits/cxxabi_forced.h + mdp:/usr/include/c++/15/bits/cxxabi_init_exception.h + mdp:/usr/include/c++/15/bits/enable_special_members.h + mdp:/usr/include/c++/15/bits/erase_if.h + mdp:/usr/include/c++/15/bits/exception.h + mdp:/usr/include/c++/15/bits/exception_defines.h + mdp:/usr/include/c++/15/bits/exception_ptr.h + mdp:/usr/include/c++/15/bits/functexcept.h + mdp:/usr/include/c++/15/bits/functional_hash.h + mdp:/usr/include/c++/15/bits/hash_bytes.h + mdp:/usr/include/c++/15/bits/hashtable.h + mdp:/usr/include/c++/15/bits/hashtable_policy.h + mdp:/usr/include/c++/15/bits/invoke.h + mdp:/usr/include/c++/15/bits/ios_base.h + mdp:/usr/include/c++/15/bits/istream.tcc + mdp:/usr/include/c++/15/bits/iterator_concepts.h + mdp:/usr/include/c++/15/bits/list.tcc + mdp:/usr/include/c++/15/bits/locale_classes.h + mdp:/usr/include/c++/15/bits/locale_classes.tcc + mdp:/usr/include/c++/15/bits/locale_conv.h + mdp:/usr/include/c++/15/bits/locale_facets.h + mdp:/usr/include/c++/15/bits/locale_facets.tcc + mdp:/usr/include/c++/15/bits/locale_facets_nonio.h + mdp:/usr/include/c++/15/bits/locale_facets_nonio.tcc + mdp:/usr/include/c++/15/bits/localefwd.h + mdp:/usr/include/c++/15/bits/max_size_type.h + mdp:/usr/include/c++/15/bits/memory_resource.h + mdp:/usr/include/c++/15/bits/memoryfwd.h + mdp:/usr/include/c++/15/bits/move.h + mdp:/usr/include/c++/15/bits/nested_exception.h + mdp:/usr/include/c++/15/bits/new_allocator.h + mdp:/usr/include/c++/15/bits/node_handle.h + mdp:/usr/include/c++/15/bits/ostream.h + mdp:/usr/include/c++/15/bits/ostream.tcc + mdp:/usr/include/c++/15/bits/ostream_insert.h + mdp:/usr/include/c++/15/bits/parse_numbers.h + mdp:/usr/include/c++/15/bits/postypes.h + mdp:/usr/include/c++/15/bits/predefined_ops.h + mdp:/usr/include/c++/15/bits/ptr_traits.h + mdp:/usr/include/c++/15/bits/quoted_string.h + mdp:/usr/include/c++/15/bits/range_access.h + mdp:/usr/include/c++/15/bits/ranges_algo.h + mdp:/usr/include/c++/15/bits/ranges_algobase.h + mdp:/usr/include/c++/15/bits/ranges_base.h + mdp:/usr/include/c++/15/bits/ranges_cmp.h + mdp:/usr/include/c++/15/bits/ranges_uninitialized.h + mdp:/usr/include/c++/15/bits/ranges_util.h + mdp:/usr/include/c++/15/bits/refwrap.h + mdp:/usr/include/c++/15/bits/requires_hosted.h + mdp:/usr/include/c++/15/bits/shared_ptr.h + mdp:/usr/include/c++/15/bits/shared_ptr_atomic.h + mdp:/usr/include/c++/15/bits/shared_ptr_base.h + mdp:/usr/include/c++/15/bits/specfun.h + mdp:/usr/include/c++/15/bits/sstream.tcc + mdp:/usr/include/c++/15/bits/std_abs.h + mdp:/usr/include/c++/15/bits/std_function.h + mdp:/usr/include/c++/15/bits/std_mutex.h + mdp:/usr/include/c++/15/bits/stl_algo.h + mdp:/usr/include/c++/15/bits/stl_algobase.h + mdp:/usr/include/c++/15/bits/stl_bvector.h + mdp:/usr/include/c++/15/bits/stl_construct.h + mdp:/usr/include/c++/15/bits/stl_function.h + mdp:/usr/include/c++/15/bits/stl_heap.h + mdp:/usr/include/c++/15/bits/stl_iterator.h + mdp:/usr/include/c++/15/bits/stl_iterator_base_funcs.h + mdp:/usr/include/c++/15/bits/stl_iterator_base_types.h + mdp:/usr/include/c++/15/bits/stl_list.h + mdp:/usr/include/c++/15/bits/stl_map.h + mdp:/usr/include/c++/15/bits/stl_multimap.h + mdp:/usr/include/c++/15/bits/stl_multiset.h + mdp:/usr/include/c++/15/bits/stl_numeric.h + mdp:/usr/include/c++/15/bits/stl_pair.h + mdp:/usr/include/c++/15/bits/stl_raw_storage_iter.h + mdp:/usr/include/c++/15/bits/stl_relops.h + mdp:/usr/include/c++/15/bits/stl_set.h + mdp:/usr/include/c++/15/bits/stl_tempbuf.h + mdp:/usr/include/c++/15/bits/stl_tree.h + mdp:/usr/include/c++/15/bits/stl_uninitialized.h + mdp:/usr/include/c++/15/bits/stl_vector.h + mdp:/usr/include/c++/15/bits/stream_iterator.h + mdp:/usr/include/c++/15/bits/streambuf.tcc + mdp:/usr/include/c++/15/bits/streambuf_iterator.h + mdp:/usr/include/c++/15/bits/string_view.tcc + mdp:/usr/include/c++/15/bits/stringfwd.h + mdp:/usr/include/c++/15/bits/uniform_int_dist.h + mdp:/usr/include/c++/15/bits/unique_ptr.h + mdp:/usr/include/c++/15/bits/unordered_map.h + mdp:/usr/include/c++/15/bits/unordered_set.h + mdp:/usr/include/c++/15/bits/uses_allocator.h + mdp:/usr/include/c++/15/bits/uses_allocator_args.h + mdp:/usr/include/c++/15/bits/utility.h + mdp:/usr/include/c++/15/bits/vector.tcc + mdp:/usr/include/c++/15/bits/version.h + mdp:/usr/include/c++/15/cassert + mdp:/usr/include/c++/15/cctype + mdp:/usr/include/c++/15/cerrno + mdp:/usr/include/c++/15/charconv + mdp:/usr/include/c++/15/chrono + mdp:/usr/include/c++/15/climits + mdp:/usr/include/c++/15/clocale + mdp:/usr/include/c++/15/cmath + mdp:/usr/include/c++/15/compare + mdp:/usr/include/c++/15/concepts + mdp:/usr/include/c++/15/cstddef + mdp:/usr/include/c++/15/cstdint + mdp:/usr/include/c++/15/cstdio + mdp:/usr/include/c++/15/cstdlib + mdp:/usr/include/c++/15/cstring + mdp:/usr/include/c++/15/ctime + mdp:/usr/include/c++/15/cwchar + mdp:/usr/include/c++/15/cwctype + mdp:/usr/include/c++/15/debug/assertions.h + mdp:/usr/include/c++/15/debug/debug.h + mdp:/usr/include/c++/15/exception + mdp:/usr/include/c++/15/ext/aligned_buffer.h + mdp:/usr/include/c++/15/ext/alloc_traits.h + mdp:/usr/include/c++/15/ext/atomicity.h + mdp:/usr/include/c++/15/ext/concurrence.h + mdp:/usr/include/c++/15/ext/numeric_traits.h + mdp:/usr/include/c++/15/ext/string_conversions.h + mdp:/usr/include/c++/15/ext/type_traits.h + mdp:/usr/include/c++/15/format + mdp:/usr/include/c++/15/functional + mdp:/usr/include/c++/15/initializer_list + mdp:/usr/include/c++/15/iomanip + mdp:/usr/include/c++/15/ios + mdp:/usr/include/c++/15/iosfwd + mdp:/usr/include/c++/15/istream + mdp:/usr/include/c++/15/iterator + mdp:/usr/include/c++/15/limits + mdp:/usr/include/c++/15/list + mdp:/usr/include/c++/15/locale + mdp:/usr/include/c++/15/map + mdp:/usr/include/c++/15/memory + mdp:/usr/include/c++/15/new + mdp:/usr/include/c++/15/numeric + mdp:/usr/include/c++/15/optional + mdp:/usr/include/c++/15/ostream + mdp:/usr/include/c++/15/pstl/execution_defs.h + mdp:/usr/include/c++/15/pstl/glue_numeric_defs.h + mdp:/usr/include/c++/15/pstl/pstl_config.h + mdp:/usr/include/c++/15/ratio + mdp:/usr/include/c++/15/set + mdp:/usr/include/c++/15/sstream + mdp:/usr/include/c++/15/stdexcept + mdp:/usr/include/c++/15/streambuf + mdp:/usr/include/c++/15/string + mdp:/usr/include/c++/15/string_view + mdp:/usr/include/c++/15/system_error + mdp:/usr/include/c++/15/tr1/bessel_function.tcc + mdp:/usr/include/c++/15/tr1/beta_function.tcc + mdp:/usr/include/c++/15/tr1/ell_integral.tcc + mdp:/usr/include/c++/15/tr1/exp_integral.tcc + mdp:/usr/include/c++/15/tr1/gamma.tcc + mdp:/usr/include/c++/15/tr1/hypergeometric.tcc + mdp:/usr/include/c++/15/tr1/legendre_function.tcc + mdp:/usr/include/c++/15/tr1/modified_bessel_func.tcc + mdp:/usr/include/c++/15/tr1/poly_hermite.tcc + mdp:/usr/include/c++/15/tr1/poly_laguerre.tcc + mdp:/usr/include/c++/15/tr1/riemann_zeta.tcc + mdp:/usr/include/c++/15/tr1/special_function_util.h + mdp:/usr/include/c++/15/tuple + mdp:/usr/include/c++/15/type_traits + mdp:/usr/include/c++/15/typeinfo + mdp:/usr/include/c++/15/unordered_map + mdp:/usr/include/c++/15/unordered_set + mdp:/usr/include/c++/15/utility + mdp:/usr/include/c++/15/variant + mdp:/usr/include/c++/15/vector + mdp:/usr/include/c++/15/version + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/atomic_word.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++allocator.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++config.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++locale.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/cpu_defines.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/ctype_base.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/ctype_inline.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/error_constants.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/gthr-default.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/gthr.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/messages_members.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/os_defines.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/time_members.h + mdp:/usr/include/ctype.h + mdp:/usr/include/endian.h + mdp:/usr/include/errno.h + mdp:/usr/include/features-time64.h + mdp:/usr/include/features.h + mdp:/usr/include/gnu/stubs-64.h + mdp:/usr/include/gnu/stubs.h + mdp:/usr/include/libintl.h + mdp:/usr/include/limits.h + mdp:/usr/include/linux/close_range.h + mdp:/usr/include/linux/errno.h + mdp:/usr/include/linux/limits.h + mdp:/usr/include/linux/posix_types.h + mdp:/usr/include/linux/sched/types.h + mdp:/usr/include/linux/stddef.h + mdp:/usr/include/linux/types.h + mdp:/usr/include/locale.h + mdp:/usr/include/pthread.h + mdp:/usr/include/qt6/QtCore/QDateTime + mdp:/usr/include/qt6/QtCore/QHash + mdp:/usr/include/qt6/QtCore/QMutex + mdp:/usr/include/qt6/QtCore/QObject + mdp:/usr/include/qt6/QtCore/QSize + mdp:/usr/include/qt6/QtCore/QString + mdp:/usr/include/qt6/QtCore/q17memory.h + mdp:/usr/include/qt6/QtCore/q20functional.h + mdp:/usr/include/qt6/QtCore/q20iterator.h + mdp:/usr/include/qt6/QtCore/q20memory.h + mdp:/usr/include/qt6/QtCore/q20type_traits.h + mdp:/usr/include/qt6/QtCore/q20utility.h + mdp:/usr/include/qt6/QtCore/q23type_traits.h + mdp:/usr/include/qt6/QtCore/q23utility.h + mdp:/usr/include/qt6/QtCore/qalgorithms.h + mdp:/usr/include/qt6/QtCore/qalloc.h + mdp:/usr/include/qt6/QtCore/qanystringview.h + mdp:/usr/include/qt6/QtCore/qarraydata.h + mdp:/usr/include/qt6/QtCore/qarraydataops.h + mdp:/usr/include/qt6/QtCore/qarraydatapointer.h + mdp:/usr/include/qt6/QtCore/qassert.h + mdp:/usr/include/qt6/QtCore/qatomic.h + mdp:/usr/include/qt6/QtCore/qatomic_cxx11.h + mdp:/usr/include/qt6/QtCore/qbasicatomic.h + mdp:/usr/include/qt6/QtCore/qbindingstorage.h + mdp:/usr/include/qt6/QtCore/qbytearray.h + mdp:/usr/include/qt6/QtCore/qbytearrayalgorithms.h + mdp:/usr/include/qt6/QtCore/qbytearraylist.h + mdp:/usr/include/qt6/QtCore/qbytearrayview.h + mdp:/usr/include/qt6/QtCore/qcalendar.h + mdp:/usr/include/qt6/QtCore/qchar.h + mdp:/usr/include/qt6/QtCore/qcheckedint_impl.h + mdp:/usr/include/qt6/QtCore/qcompare.h + mdp:/usr/include/qt6/QtCore/qcompare_impl.h + mdp:/usr/include/qt6/QtCore/qcomparehelpers.h + mdp:/usr/include/qt6/QtCore/qcompilerdetection.h + mdp:/usr/include/qt6/QtCore/qconfig-64.h + mdp:/usr/include/qt6/QtCore/qconfig.h + mdp:/usr/include/qt6/QtCore/qconstructormacros.h + mdp:/usr/include/qt6/QtCore/qcontainerfwd.h + mdp:/usr/include/qt6/QtCore/qcontainerinfo.h + mdp:/usr/include/qt6/QtCore/qcontainertools_impl.h + mdp:/usr/include/qt6/QtCore/qcontiguouscache.h + mdp:/usr/include/qt6/QtCore/qdarwinhelpers.h + mdp:/usr/include/qt6/QtCore/qdatastream.h + mdp:/usr/include/qt6/QtCore/qdatetime.h + mdp:/usr/include/qt6/QtCore/qdeadlinetimer.h + mdp:/usr/include/qt6/QtCore/qdebug.h + mdp:/usr/include/qt6/QtCore/qexceptionhandling.h + mdp:/usr/include/qt6/QtCore/qflags.h + mdp:/usr/include/qt6/QtCore/qfloat16.h + mdp:/usr/include/qt6/QtCore/qforeach.h + mdp:/usr/include/qt6/QtCore/qfunctionaltools_impl.h + mdp:/usr/include/qt6/QtCore/qfunctionpointer.h + mdp:/usr/include/qt6/QtCore/qgenericatomic.h + mdp:/usr/include/qt6/QtCore/qglobal.h + mdp:/usr/include/qt6/QtCore/qglobalstatic.h + mdp:/usr/include/qt6/QtCore/qhash.h + mdp:/usr/include/qt6/QtCore/qhashfunctions.h + mdp:/usr/include/qt6/QtCore/qiodevicebase.h + mdp:/usr/include/qt6/QtCore/qiterable.h + mdp:/usr/include/qt6/QtCore/qiterator.h + mdp:/usr/include/qt6/QtCore/qlatin1stringview.h + mdp:/usr/include/qt6/QtCore/qline.h + mdp:/usr/include/qt6/QtCore/qlist.h + mdp:/usr/include/qt6/QtCore/qlocale.h + mdp:/usr/include/qt6/QtCore/qlogging.h + mdp:/usr/include/qt6/QtCore/qmalloc.h + mdp:/usr/include/qt6/QtCore/qmap.h + mdp:/usr/include/qt6/QtCore/qmargins.h + mdp:/usr/include/qt6/QtCore/qmath.h + mdp:/usr/include/qt6/QtCore/qmetacontainer.h + mdp:/usr/include/qt6/QtCore/qmetatype.h + mdp:/usr/include/qt6/QtCore/qminmax.h + mdp:/usr/include/qt6/QtCore/qmutex.h + mdp:/usr/include/qt6/QtCore/qnamespace.h + mdp:/usr/include/qt6/QtCore/qnumeric.h + mdp:/usr/include/qt6/QtCore/qobject.h + mdp:/usr/include/qt6/QtCore/qobject_impl.h + mdp:/usr/include/qt6/QtCore/qobjectdefs.h + mdp:/usr/include/qt6/QtCore/qobjectdefs_impl.h + mdp:/usr/include/qt6/QtCore/qoverload.h + mdp:/usr/include/qt6/QtCore/qpair.h + mdp:/usr/include/qt6/QtCore/qpoint.h + mdp:/usr/include/qt6/QtCore/qprocessordetection.h + mdp:/usr/include/qt6/QtCore/qrect.h + mdp:/usr/include/qt6/QtCore/qrefcount.h + mdp:/usr/include/qt6/QtCore/qscopedpointer.h + mdp:/usr/include/qt6/QtCore/qscopeguard.h + mdp:/usr/include/qt6/QtCore/qset.h + mdp:/usr/include/qt6/QtCore/qshareddata.h + mdp:/usr/include/qt6/QtCore/qshareddata_impl.h + mdp:/usr/include/qt6/QtCore/qsharedpointer.h + mdp:/usr/include/qt6/QtCore/qsharedpointer_impl.h + mdp:/usr/include/qt6/QtCore/qsize.h + mdp:/usr/include/qt6/QtCore/qspan.h + mdp:/usr/include/qt6/QtCore/qstdlibdetection.h + mdp:/usr/include/qt6/QtCore/qstring.h + mdp:/usr/include/qt6/QtCore/qstringalgorithms.h + mdp:/usr/include/qt6/QtCore/qstringbuilder.h + mdp:/usr/include/qt6/QtCore/qstringconverter.h + mdp:/usr/include/qt6/QtCore/qstringconverter_base.h + mdp:/usr/include/qt6/QtCore/qstringfwd.h + mdp:/usr/include/qt6/QtCore/qstringlist.h + mdp:/usr/include/qt6/QtCore/qstringmatcher.h + mdp:/usr/include/qt6/QtCore/qstringtokenizer.h + mdp:/usr/include/qt6/QtCore/qstringview.h + mdp:/usr/include/qt6/QtCore/qswap.h + mdp:/usr/include/qt6/QtCore/qsysinfo.h + mdp:/usr/include/qt6/QtCore/qsystemdetection.h + mdp:/usr/include/qt6/QtCore/qtaggedpointer.h + mdp:/usr/include/qt6/QtCore/qtclasshelpermacros.h + mdp:/usr/include/qt6/QtCore/qtconfiginclude.h + mdp:/usr/include/qt6/QtCore/qtconfigmacros.h + mdp:/usr/include/qt6/QtCore/qtcore-config.h + mdp:/usr/include/qt6/QtCore/qtcoreexports.h + mdp:/usr/include/qt6/QtCore/qtcoreglobal.h + mdp:/usr/include/qt6/QtCore/qtdeprecationdefinitions.h + mdp:/usr/include/qt6/QtCore/qtdeprecationmarkers.h + mdp:/usr/include/qt6/QtCore/qtenvironmentvariables.h + mdp:/usr/include/qt6/QtCore/qtextstream.h + mdp:/usr/include/qt6/QtCore/qtformat_impl.h + mdp:/usr/include/qt6/QtCore/qtmetamacros.h + mdp:/usr/include/qt6/QtCore/qtnoop.h + mdp:/usr/include/qt6/QtCore/qtpreprocessorsupport.h + mdp:/usr/include/qt6/QtCore/qtresource.h + mdp:/usr/include/qt6/QtCore/qtsan_impl.h + mdp:/usr/include/qt6/QtCore/qttranslation.h + mdp:/usr/include/qt6/QtCore/qttypetraits.h + mdp:/usr/include/qt6/QtCore/qtversion.h + mdp:/usr/include/qt6/QtCore/qtversionchecks.h + mdp:/usr/include/qt6/QtCore/qtypeinfo.h + mdp:/usr/include/qt6/QtCore/qtypes.h + mdp:/usr/include/qt6/QtCore/qutf8stringview.h + mdp:/usr/include/qt6/QtCore/qvariant.h + mdp:/usr/include/qt6/QtCore/qvarlengtharray.h + mdp:/usr/include/qt6/QtCore/qversiontagging.h + mdp:/usr/include/qt6/QtCore/qxptype_traits.h + mdp:/usr/include/qt6/QtCore/qyieldcpu.h + mdp:/usr/include/qt6/QtGui/QImage + mdp:/usr/include/qt6/QtGui/QPixmap + mdp:/usr/include/qt6/QtGui/qcolor.h + mdp:/usr/include/qt6/QtGui/qimage.h + mdp:/usr/include/qt6/QtGui/qpaintdevice.h + mdp:/usr/include/qt6/QtGui/qpixelformat.h + mdp:/usr/include/qt6/QtGui/qpixmap.h + mdp:/usr/include/qt6/QtGui/qpolygon.h + mdp:/usr/include/qt6/QtGui/qregion.h + mdp:/usr/include/qt6/QtGui/qrgb.h + mdp:/usr/include/qt6/QtGui/qrgba64.h + mdp:/usr/include/qt6/QtGui/qtgui-config.h + mdp:/usr/include/qt6/QtGui/qtguiexports.h + mdp:/usr/include/qt6/QtGui/qtguiglobal.h + mdp:/usr/include/qt6/QtGui/qtransform.h + mdp:/usr/include/qt6/QtGui/qwindowdefs.h + mdp:/usr/include/sched.h + mdp:/usr/include/stdc-predef.h + mdp:/usr/include/stdint.h + mdp:/usr/include/stdio.h + mdp:/usr/include/stdlib.h + mdp:/usr/include/string.h + mdp:/usr/include/strings.h + mdp:/usr/include/sys/cdefs.h + mdp:/usr/include/sys/select.h + mdp:/usr/include/sys/single_threaded.h + mdp:/usr/include/sys/syscall.h + mdp:/usr/include/sys/types.h + mdp:/usr/include/syscall.h + mdp:/usr/include/time.h + mdp:/usr/include/unistd.h + mdp:/usr/include/wchar.h + mdp:/usr/include/wctype.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stdarg.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stdbool.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stddef.h +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/oiio_image_loader.h +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/oiio_image_loader.cpp +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/live_preview_manager.h + mmc:Q_OBJECT + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_live_preview_manager_autogen/moc_predefs.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/live_preview_manager.h + mdp:/usr/include/alloca.h + mdp:/usr/include/asm-generic/bitsperlong.h + mdp:/usr/include/asm-generic/errno-base.h + mdp:/usr/include/asm-generic/errno.h + mdp:/usr/include/asm-generic/int-ll64.h + mdp:/usr/include/asm-generic/posix_types.h + mdp:/usr/include/asm-generic/types.h + mdp:/usr/include/asm/bitsperlong.h + mdp:/usr/include/asm/errno.h + mdp:/usr/include/asm/posix_types.h + mdp:/usr/include/asm/posix_types_64.h + mdp:/usr/include/asm/types.h + mdp:/usr/include/asm/unistd.h + mdp:/usr/include/asm/unistd_64.h + mdp:/usr/include/assert.h + mdp:/usr/include/bits/atomic_wide_counter.h + mdp:/usr/include/bits/byteswap.h + mdp:/usr/include/bits/confname.h + mdp:/usr/include/bits/cpu-set.h + mdp:/usr/include/bits/endian.h + mdp:/usr/include/bits/endianness.h + mdp:/usr/include/bits/environments.h + mdp:/usr/include/bits/errno.h + mdp:/usr/include/bits/floatn-common.h + mdp:/usr/include/bits/floatn.h + mdp:/usr/include/bits/getopt_core.h + mdp:/usr/include/bits/getopt_posix.h + mdp:/usr/include/bits/libc-header-start.h + mdp:/usr/include/bits/local_lim.h + mdp:/usr/include/bits/locale.h + mdp:/usr/include/bits/long-double.h + mdp:/usr/include/bits/posix1_lim.h + mdp:/usr/include/bits/posix2_lim.h + mdp:/usr/include/bits/posix_opt.h + mdp:/usr/include/bits/pthread_stack_min-dynamic.h + mdp:/usr/include/bits/pthreadtypes-arch.h + mdp:/usr/include/bits/pthreadtypes.h + mdp:/usr/include/bits/sched.h + mdp:/usr/include/bits/select.h + mdp:/usr/include/bits/semaphore.h + mdp:/usr/include/bits/setjmp.h + mdp:/usr/include/bits/stdint-intn.h + mdp:/usr/include/bits/stdint-least.h + mdp:/usr/include/bits/stdint-uintn.h + mdp:/usr/include/bits/stdio_lim.h + mdp:/usr/include/bits/stdlib-float.h + mdp:/usr/include/bits/struct_mutex.h + mdp:/usr/include/bits/struct_rwlock.h + mdp:/usr/include/bits/syscall.h + mdp:/usr/include/bits/thread-shared-types.h + mdp:/usr/include/bits/time.h + mdp:/usr/include/bits/time64.h + mdp:/usr/include/bits/timesize.h + mdp:/usr/include/bits/timex.h + mdp:/usr/include/bits/types.h + mdp:/usr/include/bits/types/FILE.h + mdp:/usr/include/bits/types/__FILE.h + mdp:/usr/include/bits/types/__fpos64_t.h + mdp:/usr/include/bits/types/__fpos_t.h + mdp:/usr/include/bits/types/__locale_t.h + mdp:/usr/include/bits/types/__mbstate_t.h + mdp:/usr/include/bits/types/__sigset_t.h + mdp:/usr/include/bits/types/clock_t.h + mdp:/usr/include/bits/types/clockid_t.h + mdp:/usr/include/bits/types/cookie_io_functions_t.h + mdp:/usr/include/bits/types/error_t.h + mdp:/usr/include/bits/types/locale_t.h + mdp:/usr/include/bits/types/mbstate_t.h + mdp:/usr/include/bits/types/sigset_t.h + mdp:/usr/include/bits/types/struct_FILE.h + mdp:/usr/include/bits/types/struct___jmp_buf_tag.h + mdp:/usr/include/bits/types/struct_itimerspec.h + mdp:/usr/include/bits/types/struct_sched_param.h + mdp:/usr/include/bits/types/struct_timespec.h + mdp:/usr/include/bits/types/struct_timeval.h + mdp:/usr/include/bits/types/struct_tm.h + mdp:/usr/include/bits/types/time_t.h + mdp:/usr/include/bits/types/timer_t.h + mdp:/usr/include/bits/types/wint_t.h + mdp:/usr/include/bits/typesizes.h + mdp:/usr/include/bits/uintn-identity.h + mdp:/usr/include/bits/uio_lim.h + mdp:/usr/include/bits/unistd_ext.h + mdp:/usr/include/bits/waitflags.h + mdp:/usr/include/bits/waitstatus.h + mdp:/usr/include/bits/wchar.h + mdp:/usr/include/bits/wctype-wchar.h + mdp:/usr/include/bits/wordsize.h + mdp:/usr/include/bits/xopen_lim.h + mdp:/usr/include/c++/15/algorithm + mdp:/usr/include/c++/15/array + mdp:/usr/include/c++/15/atomic + mdp:/usr/include/c++/15/backward/auto_ptr.h + mdp:/usr/include/c++/15/backward/binders.h + mdp:/usr/include/c++/15/bit + mdp:/usr/include/c++/15/bits/algorithmfwd.h + mdp:/usr/include/c++/15/bits/align.h + mdp:/usr/include/c++/15/bits/alloc_traits.h + mdp:/usr/include/c++/15/bits/allocated_ptr.h + mdp:/usr/include/c++/15/bits/allocator.h + mdp:/usr/include/c++/15/bits/atomic_base.h + mdp:/usr/include/c++/15/bits/atomic_futex.h + mdp:/usr/include/c++/15/bits/atomic_lockfree_defines.h + mdp:/usr/include/c++/15/bits/atomic_timed_wait.h + mdp:/usr/include/c++/15/bits/atomic_wait.h + mdp:/usr/include/c++/15/bits/basic_ios.h + mdp:/usr/include/c++/15/bits/basic_ios.tcc + mdp:/usr/include/c++/15/bits/basic_string.h + mdp:/usr/include/c++/15/bits/basic_string.tcc + mdp:/usr/include/c++/15/bits/char_traits.h + mdp:/usr/include/c++/15/bits/charconv.h + mdp:/usr/include/c++/15/bits/chrono.h + mdp:/usr/include/c++/15/bits/chrono_io.h + mdp:/usr/include/c++/15/bits/codecvt.h + mdp:/usr/include/c++/15/bits/concept_check.h + mdp:/usr/include/c++/15/bits/cpp_type_traits.h + mdp:/usr/include/c++/15/bits/cxxabi_forced.h + mdp:/usr/include/c++/15/bits/cxxabi_init_exception.h + mdp:/usr/include/c++/15/bits/enable_special_members.h + mdp:/usr/include/c++/15/bits/erase_if.h + mdp:/usr/include/c++/15/bits/exception.h + mdp:/usr/include/c++/15/bits/exception_defines.h + mdp:/usr/include/c++/15/bits/exception_ptr.h + mdp:/usr/include/c++/15/bits/functexcept.h + mdp:/usr/include/c++/15/bits/functional_hash.h + mdp:/usr/include/c++/15/bits/hash_bytes.h + mdp:/usr/include/c++/15/bits/hashtable.h + mdp:/usr/include/c++/15/bits/hashtable_policy.h + mdp:/usr/include/c++/15/bits/invoke.h + mdp:/usr/include/c++/15/bits/ios_base.h + mdp:/usr/include/c++/15/bits/istream.tcc + mdp:/usr/include/c++/15/bits/iterator_concepts.h + mdp:/usr/include/c++/15/bits/list.tcc + mdp:/usr/include/c++/15/bits/locale_classes.h + mdp:/usr/include/c++/15/bits/locale_classes.tcc + mdp:/usr/include/c++/15/bits/locale_conv.h + mdp:/usr/include/c++/15/bits/locale_facets.h + mdp:/usr/include/c++/15/bits/locale_facets.tcc + mdp:/usr/include/c++/15/bits/locale_facets_nonio.h + mdp:/usr/include/c++/15/bits/locale_facets_nonio.tcc + mdp:/usr/include/c++/15/bits/localefwd.h + mdp:/usr/include/c++/15/bits/max_size_type.h + mdp:/usr/include/c++/15/bits/memory_resource.h + mdp:/usr/include/c++/15/bits/memoryfwd.h + mdp:/usr/include/c++/15/bits/move.h + mdp:/usr/include/c++/15/bits/nested_exception.h + mdp:/usr/include/c++/15/bits/new_allocator.h + mdp:/usr/include/c++/15/bits/node_handle.h + mdp:/usr/include/c++/15/bits/ostream.h + mdp:/usr/include/c++/15/bits/ostream.tcc + mdp:/usr/include/c++/15/bits/ostream_insert.h + mdp:/usr/include/c++/15/bits/parse_numbers.h + mdp:/usr/include/c++/15/bits/postypes.h + mdp:/usr/include/c++/15/bits/predefined_ops.h + mdp:/usr/include/c++/15/bits/ptr_traits.h + mdp:/usr/include/c++/15/bits/quoted_string.h + mdp:/usr/include/c++/15/bits/range_access.h + mdp:/usr/include/c++/15/bits/ranges_algo.h + mdp:/usr/include/c++/15/bits/ranges_algobase.h + mdp:/usr/include/c++/15/bits/ranges_base.h + mdp:/usr/include/c++/15/bits/ranges_cmp.h + mdp:/usr/include/c++/15/bits/ranges_uninitialized.h + mdp:/usr/include/c++/15/bits/ranges_util.h + mdp:/usr/include/c++/15/bits/refwrap.h + mdp:/usr/include/c++/15/bits/requires_hosted.h + mdp:/usr/include/c++/15/bits/semaphore_base.h + mdp:/usr/include/c++/15/bits/shared_ptr.h + mdp:/usr/include/c++/15/bits/shared_ptr_atomic.h + mdp:/usr/include/c++/15/bits/shared_ptr_base.h + mdp:/usr/include/c++/15/bits/specfun.h + mdp:/usr/include/c++/15/bits/sstream.tcc + mdp:/usr/include/c++/15/bits/std_abs.h + mdp:/usr/include/c++/15/bits/std_function.h + mdp:/usr/include/c++/15/bits/std_mutex.h + mdp:/usr/include/c++/15/bits/std_thread.h + mdp:/usr/include/c++/15/bits/stl_algo.h + mdp:/usr/include/c++/15/bits/stl_algobase.h + mdp:/usr/include/c++/15/bits/stl_bvector.h + mdp:/usr/include/c++/15/bits/stl_construct.h + mdp:/usr/include/c++/15/bits/stl_function.h + mdp:/usr/include/c++/15/bits/stl_heap.h + mdp:/usr/include/c++/15/bits/stl_iterator.h + mdp:/usr/include/c++/15/bits/stl_iterator_base_funcs.h + mdp:/usr/include/c++/15/bits/stl_iterator_base_types.h + mdp:/usr/include/c++/15/bits/stl_list.h + mdp:/usr/include/c++/15/bits/stl_map.h + mdp:/usr/include/c++/15/bits/stl_multimap.h + mdp:/usr/include/c++/15/bits/stl_numeric.h + mdp:/usr/include/c++/15/bits/stl_pair.h + mdp:/usr/include/c++/15/bits/stl_raw_storage_iter.h + mdp:/usr/include/c++/15/bits/stl_relops.h + mdp:/usr/include/c++/15/bits/stl_tempbuf.h + mdp:/usr/include/c++/15/bits/stl_tree.h + mdp:/usr/include/c++/15/bits/stl_uninitialized.h + mdp:/usr/include/c++/15/bits/stl_vector.h + mdp:/usr/include/c++/15/bits/stream_iterator.h + mdp:/usr/include/c++/15/bits/streambuf.tcc + mdp:/usr/include/c++/15/bits/streambuf_iterator.h + mdp:/usr/include/c++/15/bits/string_view.tcc + mdp:/usr/include/c++/15/bits/stringfwd.h + mdp:/usr/include/c++/15/bits/this_thread_sleep.h + mdp:/usr/include/c++/15/bits/uniform_int_dist.h + mdp:/usr/include/c++/15/bits/unique_lock.h + mdp:/usr/include/c++/15/bits/unique_ptr.h + mdp:/usr/include/c++/15/bits/unordered_map.h + mdp:/usr/include/c++/15/bits/uses_allocator.h + mdp:/usr/include/c++/15/bits/uses_allocator_args.h + mdp:/usr/include/c++/15/bits/utility.h + mdp:/usr/include/c++/15/bits/vector.tcc + mdp:/usr/include/c++/15/bits/version.h + mdp:/usr/include/c++/15/cassert + mdp:/usr/include/c++/15/cctype + mdp:/usr/include/c++/15/cerrno + mdp:/usr/include/c++/15/charconv + mdp:/usr/include/c++/15/chrono + mdp:/usr/include/c++/15/climits + mdp:/usr/include/c++/15/clocale + mdp:/usr/include/c++/15/cmath + mdp:/usr/include/c++/15/compare + mdp:/usr/include/c++/15/concepts + mdp:/usr/include/c++/15/condition_variable + mdp:/usr/include/c++/15/cstddef + mdp:/usr/include/c++/15/cstdint + mdp:/usr/include/c++/15/cstdio + mdp:/usr/include/c++/15/cstdlib + mdp:/usr/include/c++/15/cstring + mdp:/usr/include/c++/15/ctime + mdp:/usr/include/c++/15/cwchar + mdp:/usr/include/c++/15/cwctype + mdp:/usr/include/c++/15/debug/assertions.h + mdp:/usr/include/c++/15/debug/debug.h + mdp:/usr/include/c++/15/exception + mdp:/usr/include/c++/15/ext/aligned_buffer.h + mdp:/usr/include/c++/15/ext/alloc_traits.h + mdp:/usr/include/c++/15/ext/atomicity.h + mdp:/usr/include/c++/15/ext/concurrence.h + mdp:/usr/include/c++/15/ext/numeric_traits.h + mdp:/usr/include/c++/15/ext/string_conversions.h + mdp:/usr/include/c++/15/ext/type_traits.h + mdp:/usr/include/c++/15/format + mdp:/usr/include/c++/15/functional + mdp:/usr/include/c++/15/future + mdp:/usr/include/c++/15/initializer_list + mdp:/usr/include/c++/15/iomanip + mdp:/usr/include/c++/15/ios + mdp:/usr/include/c++/15/iosfwd + mdp:/usr/include/c++/15/istream + mdp:/usr/include/c++/15/iterator + mdp:/usr/include/c++/15/limits + mdp:/usr/include/c++/15/list + mdp:/usr/include/c++/15/locale + mdp:/usr/include/c++/15/map + mdp:/usr/include/c++/15/memory + mdp:/usr/include/c++/15/mutex + mdp:/usr/include/c++/15/new + mdp:/usr/include/c++/15/numeric + mdp:/usr/include/c++/15/optional + mdp:/usr/include/c++/15/ostream + mdp:/usr/include/c++/15/pstl/execution_defs.h + mdp:/usr/include/c++/15/pstl/glue_numeric_defs.h + mdp:/usr/include/c++/15/pstl/pstl_config.h + mdp:/usr/include/c++/15/ratio + mdp:/usr/include/c++/15/semaphore + mdp:/usr/include/c++/15/sstream + mdp:/usr/include/c++/15/stdexcept + mdp:/usr/include/c++/15/stop_token + mdp:/usr/include/c++/15/streambuf + mdp:/usr/include/c++/15/string + mdp:/usr/include/c++/15/string_view + mdp:/usr/include/c++/15/system_error + mdp:/usr/include/c++/15/tr1/bessel_function.tcc + mdp:/usr/include/c++/15/tr1/beta_function.tcc + mdp:/usr/include/c++/15/tr1/ell_integral.tcc + mdp:/usr/include/c++/15/tr1/exp_integral.tcc + mdp:/usr/include/c++/15/tr1/gamma.tcc + mdp:/usr/include/c++/15/tr1/hypergeometric.tcc + mdp:/usr/include/c++/15/tr1/legendre_function.tcc + mdp:/usr/include/c++/15/tr1/modified_bessel_func.tcc + mdp:/usr/include/c++/15/tr1/poly_hermite.tcc + mdp:/usr/include/c++/15/tr1/poly_laguerre.tcc + mdp:/usr/include/c++/15/tr1/riemann_zeta.tcc + mdp:/usr/include/c++/15/tr1/special_function_util.h + mdp:/usr/include/c++/15/tuple + mdp:/usr/include/c++/15/type_traits + mdp:/usr/include/c++/15/typeinfo + mdp:/usr/include/c++/15/unordered_map + mdp:/usr/include/c++/15/utility + mdp:/usr/include/c++/15/variant + mdp:/usr/include/c++/15/vector + mdp:/usr/include/c++/15/version + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/atomic_word.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++allocator.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++config.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++locale.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/cpu_defines.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/ctype_base.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/ctype_inline.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/error_constants.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/gthr-default.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/gthr.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/messages_members.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/os_defines.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/time_members.h + mdp:/usr/include/ctype.h + mdp:/usr/include/endian.h + mdp:/usr/include/errno.h + mdp:/usr/include/features-time64.h + mdp:/usr/include/features.h + mdp:/usr/include/gnu/stubs-64.h + mdp:/usr/include/gnu/stubs.h + mdp:/usr/include/libintl.h + mdp:/usr/include/limits.h + mdp:/usr/include/linux/close_range.h + mdp:/usr/include/linux/errno.h + mdp:/usr/include/linux/limits.h + mdp:/usr/include/linux/posix_types.h + mdp:/usr/include/linux/sched/types.h + mdp:/usr/include/linux/stddef.h + mdp:/usr/include/linux/types.h + mdp:/usr/include/locale.h + mdp:/usr/include/pthread.h + mdp:/usr/include/qt6/QtCore/QCache + mdp:/usr/include/qt6/QtCore/QElapsedTimer + mdp:/usr/include/qt6/QtCore/QHash + mdp:/usr/include/qt6/QtCore/QList + mdp:/usr/include/qt6/QtCore/QMutex + mdp:/usr/include/qt6/QtCore/QObject + mdp:/usr/include/qt6/QtCore/QReadWriteLock + mdp:/usr/include/qt6/QtCore/QSet + mdp:/usr/include/qt6/QtCore/QSize + mdp:/usr/include/qt6/QtCore/QStringList + mdp:/usr/include/qt6/QtCore/QThread + mdp:/usr/include/qt6/QtCore/QThreadPool + mdp:/usr/include/qt6/QtCore/q17memory.h + mdp:/usr/include/qt6/QtCore/q20functional.h + mdp:/usr/include/qt6/QtCore/q20iterator.h + mdp:/usr/include/qt6/QtCore/q20memory.h + mdp:/usr/include/qt6/QtCore/q20type_traits.h + mdp:/usr/include/qt6/QtCore/q20utility.h + mdp:/usr/include/qt6/QtCore/q23type_traits.h + mdp:/usr/include/qt6/QtCore/q23utility.h + mdp:/usr/include/qt6/QtCore/qalgorithms.h + mdp:/usr/include/qt6/QtCore/qanystringview.h + mdp:/usr/include/qt6/QtCore/qarraydata.h + mdp:/usr/include/qt6/QtCore/qarraydataops.h + mdp:/usr/include/qt6/QtCore/qarraydatapointer.h + mdp:/usr/include/qt6/QtCore/qassert.h + mdp:/usr/include/qt6/QtCore/qatomic.h + mdp:/usr/include/qt6/QtCore/qatomic_cxx11.h + mdp:/usr/include/qt6/QtCore/qbasicatomic.h + mdp:/usr/include/qt6/QtCore/qbindingstorage.h + mdp:/usr/include/qt6/QtCore/qbytearray.h + mdp:/usr/include/qt6/QtCore/qbytearrayalgorithms.h + mdp:/usr/include/qt6/QtCore/qbytearraylist.h + mdp:/usr/include/qt6/QtCore/qbytearrayview.h + mdp:/usr/include/qt6/QtCore/qcache.h + mdp:/usr/include/qt6/QtCore/qchar.h + mdp:/usr/include/qt6/QtCore/qcheckedint_impl.h + mdp:/usr/include/qt6/QtCore/qcompare.h + mdp:/usr/include/qt6/QtCore/qcompare_impl.h + mdp:/usr/include/qt6/QtCore/qcomparehelpers.h + mdp:/usr/include/qt6/QtCore/qcompilerdetection.h + mdp:/usr/include/qt6/QtCore/qconfig-64.h + mdp:/usr/include/qt6/QtCore/qconfig.h + mdp:/usr/include/qt6/QtCore/qconstructormacros.h + mdp:/usr/include/qt6/QtCore/qcontainerfwd.h + mdp:/usr/include/qt6/QtCore/qcontainerinfo.h + mdp:/usr/include/qt6/QtCore/qcontainertools_impl.h + mdp:/usr/include/qt6/QtCore/qdarwinhelpers.h + mdp:/usr/include/qt6/QtCore/qdatastream.h + mdp:/usr/include/qt6/QtCore/qdeadlinetimer.h + mdp:/usr/include/qt6/QtCore/qelapsedtimer.h + mdp:/usr/include/qt6/QtCore/qexceptionhandling.h + mdp:/usr/include/qt6/QtCore/qflags.h + mdp:/usr/include/qt6/QtCore/qfloat16.h + mdp:/usr/include/qt6/QtCore/qforeach.h + mdp:/usr/include/qt6/QtCore/qfunctionaltools_impl.h + mdp:/usr/include/qt6/QtCore/qfunctionpointer.h + mdp:/usr/include/qt6/QtCore/qgenericatomic.h + mdp:/usr/include/qt6/QtCore/qglobal.h + mdp:/usr/include/qt6/QtCore/qglobalstatic.h + mdp:/usr/include/qt6/QtCore/qhash.h + mdp:/usr/include/qt6/QtCore/qhashfunctions.h + mdp:/usr/include/qt6/QtCore/qiodevicebase.h + mdp:/usr/include/qt6/QtCore/qiterable.h + mdp:/usr/include/qt6/QtCore/qiterator.h + mdp:/usr/include/qt6/QtCore/qlatin1stringview.h + mdp:/usr/include/qt6/QtCore/qline.h + mdp:/usr/include/qt6/QtCore/qlist.h + mdp:/usr/include/qt6/QtCore/qlogging.h + mdp:/usr/include/qt6/QtCore/qmalloc.h + mdp:/usr/include/qt6/QtCore/qmargins.h + mdp:/usr/include/qt6/QtCore/qmath.h + mdp:/usr/include/qt6/QtCore/qmetacontainer.h + mdp:/usr/include/qt6/QtCore/qmetatype.h + mdp:/usr/include/qt6/QtCore/qminmax.h + mdp:/usr/include/qt6/QtCore/qmutex.h + mdp:/usr/include/qt6/QtCore/qnamespace.h + mdp:/usr/include/qt6/QtCore/qnumeric.h + mdp:/usr/include/qt6/QtCore/qobject.h + mdp:/usr/include/qt6/QtCore/qobject_impl.h + mdp:/usr/include/qt6/QtCore/qobjectdefs.h + mdp:/usr/include/qt6/QtCore/qobjectdefs_impl.h + mdp:/usr/include/qt6/QtCore/qoverload.h + mdp:/usr/include/qt6/QtCore/qpair.h + mdp:/usr/include/qt6/QtCore/qpoint.h + mdp:/usr/include/qt6/QtCore/qprocessordetection.h + mdp:/usr/include/qt6/QtCore/qreadwritelock.h + mdp:/usr/include/qt6/QtCore/qrect.h + mdp:/usr/include/qt6/QtCore/qrefcount.h + mdp:/usr/include/qt6/QtCore/qrunnable.h + mdp:/usr/include/qt6/QtCore/qscopedpointer.h + mdp:/usr/include/qt6/QtCore/qscopeguard.h + mdp:/usr/include/qt6/QtCore/qset.h + mdp:/usr/include/qt6/QtCore/qshareddata.h + mdp:/usr/include/qt6/QtCore/qsize.h + mdp:/usr/include/qt6/QtCore/qspan.h + mdp:/usr/include/qt6/QtCore/qstdlibdetection.h + mdp:/usr/include/qt6/QtCore/qstring.h + mdp:/usr/include/qt6/QtCore/qstringalgorithms.h + mdp:/usr/include/qt6/QtCore/qstringbuilder.h + mdp:/usr/include/qt6/QtCore/qstringconverter.h + mdp:/usr/include/qt6/QtCore/qstringconverter_base.h + mdp:/usr/include/qt6/QtCore/qstringfwd.h + mdp:/usr/include/qt6/QtCore/qstringlist.h + mdp:/usr/include/qt6/QtCore/qstringmatcher.h + mdp:/usr/include/qt6/QtCore/qstringtokenizer.h + mdp:/usr/include/qt6/QtCore/qstringview.h + mdp:/usr/include/qt6/QtCore/qswap.h + mdp:/usr/include/qt6/QtCore/qsysinfo.h + mdp:/usr/include/qt6/QtCore/qsystemdetection.h + mdp:/usr/include/qt6/QtCore/qtaggedpointer.h + mdp:/usr/include/qt6/QtCore/qtclasshelpermacros.h + mdp:/usr/include/qt6/QtCore/qtconfiginclude.h + mdp:/usr/include/qt6/QtCore/qtconfigmacros.h + mdp:/usr/include/qt6/QtCore/qtcore-config.h + mdp:/usr/include/qt6/QtCore/qtcoreexports.h + mdp:/usr/include/qt6/QtCore/qtcoreglobal.h + mdp:/usr/include/qt6/QtCore/qtdeprecationdefinitions.h + mdp:/usr/include/qt6/QtCore/qtdeprecationmarkers.h + mdp:/usr/include/qt6/QtCore/qtenvironmentvariables.h + mdp:/usr/include/qt6/QtCore/qtformat_impl.h + mdp:/usr/include/qt6/QtCore/qthread.h + mdp:/usr/include/qt6/QtCore/qthreadpool.h + mdp:/usr/include/qt6/QtCore/qtmetamacros.h + mdp:/usr/include/qt6/QtCore/qtnoop.h + mdp:/usr/include/qt6/QtCore/qtpreprocessorsupport.h + mdp:/usr/include/qt6/QtCore/qtresource.h + mdp:/usr/include/qt6/QtCore/qtsan_impl.h + mdp:/usr/include/qt6/QtCore/qttranslation.h + mdp:/usr/include/qt6/QtCore/qttypetraits.h + mdp:/usr/include/qt6/QtCore/qtversion.h + mdp:/usr/include/qt6/QtCore/qtversionchecks.h + mdp:/usr/include/qt6/QtCore/qtypeinfo.h + mdp:/usr/include/qt6/QtCore/qtypes.h + mdp:/usr/include/qt6/QtCore/qutf8stringview.h + mdp:/usr/include/qt6/QtCore/qversiontagging.h + mdp:/usr/include/qt6/QtCore/qxptype_traits.h + mdp:/usr/include/qt6/QtCore/qyieldcpu.h + mdp:/usr/include/qt6/QtGui/QImage + mdp:/usr/include/qt6/QtGui/QPixmap + mdp:/usr/include/qt6/QtGui/qcolor.h + mdp:/usr/include/qt6/QtGui/qimage.h + mdp:/usr/include/qt6/QtGui/qpaintdevice.h + mdp:/usr/include/qt6/QtGui/qpixelformat.h + mdp:/usr/include/qt6/QtGui/qpixmap.h + mdp:/usr/include/qt6/QtGui/qpolygon.h + mdp:/usr/include/qt6/QtGui/qregion.h + mdp:/usr/include/qt6/QtGui/qrgb.h + mdp:/usr/include/qt6/QtGui/qrgba64.h + mdp:/usr/include/qt6/QtGui/qtgui-config.h + mdp:/usr/include/qt6/QtGui/qtguiexports.h + mdp:/usr/include/qt6/QtGui/qtguiglobal.h + mdp:/usr/include/qt6/QtGui/qtransform.h + mdp:/usr/include/qt6/QtGui/qwindowdefs.h + mdp:/usr/include/sched.h + mdp:/usr/include/semaphore.h + mdp:/usr/include/stdc-predef.h + mdp:/usr/include/stdint.h + mdp:/usr/include/stdio.h + mdp:/usr/include/stdlib.h + mdp:/usr/include/string.h + mdp:/usr/include/strings.h + mdp:/usr/include/sys/cdefs.h + mdp:/usr/include/sys/select.h + mdp:/usr/include/sys/single_threaded.h + mdp:/usr/include/sys/syscall.h + mdp:/usr/include/sys/time.h + mdp:/usr/include/sys/types.h + mdp:/usr/include/syscall.h + mdp:/usr/include/time.h + mdp:/usr/include/unistd.h + mdp:/usr/include/wchar.h + mdp:/usr/include/wctype.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stdarg.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stdbool.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stddef.h diff --git a/build-linux/tests/CMakeFiles/test_media_converter_worker.dir/__/src/media_converter_worker.cpp.o b/build-linux/tests/CMakeFiles/test_media_converter_worker.dir/__/src/media_converter_worker.cpp.o new file mode 100644 index 00000000..9d43ee90 Binary files /dev/null and b/build-linux/tests/CMakeFiles/test_media_converter_worker.dir/__/src/media_converter_worker.cpp.o differ diff --git a/build-linux/tests/CMakeFiles/test_media_converter_worker.dir/test_media_converter_worker.cpp.o b/build-linux/tests/CMakeFiles/test_media_converter_worker.dir/test_media_converter_worker.cpp.o new file mode 100644 index 00000000..8f18a3b9 Binary files /dev/null and b/build-linux/tests/CMakeFiles/test_media_converter_worker.dir/test_media_converter_worker.cpp.o differ diff --git a/build-linux/tests/CMakeFiles/test_media_converter_worker.dir/test_media_converter_worker_autogen/mocs_compilation.cpp.o b/build-linux/tests/CMakeFiles/test_media_converter_worker.dir/test_media_converter_worker_autogen/mocs_compilation.cpp.o new file mode 100644 index 00000000..f67ee760 Binary files /dev/null and b/build-linux/tests/CMakeFiles/test_media_converter_worker.dir/test_media_converter_worker_autogen/mocs_compilation.cpp.o differ diff --git a/build-linux/tests/CMakeFiles/test_media_converter_worker_autogen.dir/AutogenInfo.json b/build-linux/tests/CMakeFiles/test_media_converter_worker_autogen.dir/AutogenInfo.json new file mode 100644 index 00000000..6a85dedf --- /dev/null +++ b/build-linux/tests/CMakeFiles/test_media_converter_worker_autogen.dir/AutogenInfo.json @@ -0,0 +1,200 @@ +{ + "BUILD_DIR" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_media_converter_worker_autogen", + "CMAKE_BINARY_DIR" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux", + "CMAKE_CURRENT_BINARY_DIR" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests", + "CMAKE_CURRENT_SOURCE_DIR" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests", + "CMAKE_EXECUTABLE" : "/usr/bin/cmake", + "CMAKE_LIST_FILES" : + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/CMakeLists.txt", + "/usr/lib64/cmake/Qt6/Qt6ConfigVersion.cmake", + "/usr/lib64/cmake/Qt6/Qt6ConfigVersionImpl.cmake", + "/usr/lib64/cmake/Qt6/Qt6Config.cmake", + "/usr/lib64/cmake/Qt6/QtPublicCMakeEarlyPolicyHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicCMakeHelpers.cmake", + "/usr/lib64/cmake/Qt6/Qt6ConfigExtras.cmake", + "/usr/lib64/cmake/Qt6/QtPublicCMakeVersionHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtInstallPaths.cmake", + "/usr/lib64/cmake/Qt6/Qt6Targets.cmake", + "/usr/lib64/cmake/Qt6/Qt6VersionlessAliasTargets.cmake", + "/usr/lib64/cmake/Qt6/QtFeature.cmake", + "/usr/share/cmake/Modules/CheckCXXCompilerFlag.cmake", + "/usr/lib64/cmake/Qt6/QtFeatureCommon.cmake", + "/usr/lib64/cmake/Qt6/QtPublicAndroidHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicAppleHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicCMakeHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicCMakeVersionHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicDependencyHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicExternalProjectHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicFinalizerHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicFindPackageHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicGitHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicPluginHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicPluginHelpers_v2.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomAttributionHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomBuildToolHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomCommonGenerationHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomCpeHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomCycloneDXHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomDocumentNamespaceHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomDepHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomExternalReferenceHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomFileHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomGenerationHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomGenerationCycloneDXHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomLicenseHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomOpsHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomPurlHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomPythonHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomQtEntityHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomRelationshipHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomSystemDepHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicTargetHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicTestHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicToolHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicWalkLibsHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicWindowsHelpers.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6/Qt6Dependencies.cmake", + "/usr/lib64/cmake/Qt6Test/Qt6TestConfigVersion.cmake", + "/usr/lib64/cmake/Qt6Test/Qt6TestConfigVersionImpl.cmake", + "/usr/lib64/cmake/Qt6Test/Qt6TestConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6Test/Qt6TestDependencies.cmake", + "/usr/lib64/cmake/Qt6Test/Qt6TestTargets.cmake", + "/usr/lib64/cmake/Qt6Test/Qt6TestTargets-relwithdebinfo.cmake", + "/usr/lib64/cmake/Qt6Test/Qt6TestAdditionalTargetInfo.cmake", + "/usr/lib64/cmake/Qt6Test/QtTestProperties.cmake", + "/usr/lib64/cmake/Qt6Test/Qt6TestVersionlessAliasTargets.cmake" + ], + "CMAKE_SOURCE_DIR" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6", + "CROSS_CONFIG" : false, + "DEP_FILE" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_media_converter_worker_autogen/deps", + "DEP_FILE_RULE_NAME" : "test_media_converter_worker_autogen/timestamp", + "HEADERS" : + [ + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/media_converter_worker.h", + "MU", + "VNU7RW3YIC/moc_media_converter_worker.cpp", + null + ] + ], + "HEADER_EXTENSIONS" : [ "h", "hh", "h++", "hm", "hpp", "hxx", "in", "txx" ], + "INCLUDE_DIR" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_media_converter_worker_autogen/include", + "MOC_COMPILATION_FILE" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_media_converter_worker_autogen/mocs_compilation.cpp", + "MOC_DEFINITIONS" : + [ + "FTK_API_GL_4_1", + "QT_CORE_LIB", + "QT_GUI_LIB", + "QT_NO_DEBUG", + "QT_TESTCASE_BUILDDIR=\"/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests\"", + "QT_TESTCASE_SOURCEDIR=\"/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests\"", + "QT_TESTLIB_LIB", + "QT_WIDGETS_LIB", + "TLRENDER_EXR", + "TLRENDER_FFMPEG", + "TLRENDER_FFMPEG_PLUGIN", + "TLRENDER_JPEG", + "TLRENDER_OCIO", + "TLRENDER_OIIO", + "TLRENDER_PNG", + "TLRENDER_SDL2", + "TLRENDER_TIFF" + ], + "MOC_DEPEND_FILTERS" : + [ + [ + "Q_PLUGIN_METADATA", + "[\n][ \t]*Q_PLUGIN_METADATA[ \t]*\\([^\\)]*FILE[ \t]*\"([^\"]+)\"" + ] + ], + "MOC_INCLUDES" : + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src", + "/usr/include/qt6/QtTest", + "/usr/include/qt6", + "/usr/include/qt6/QtCore", + "/usr/lib64/qt6/mkspecs/linux-g++", + "/usr/include/qt6/QtWidgets", + "/usr/include/qt6/QtGui", + "/usr/include", + "/usr/include/c++/15", + "/usr/include/c++/15/x86_64-redhat-linux", + "/usr/include/c++/15/backward", + "/usr/lib/gcc/x86_64-redhat-linux/15/include", + "/usr/local/include" + ], + "MOC_MACRO_NAMES" : + [ + "Q_OBJECT", + "Q_GADGET", + "Q_NAMESPACE", + "Q_NAMESPACE_EXPORT", + "Q_GADGET_EXPORT", + "Q_ENUM_NS" + ], + "MOC_OPTIONS" : [], + "MOC_PATH_PREFIX" : false, + "MOC_PREDEFS_CMD" : + [ + "/usr/bin/c++", + "-std=gnu++20", + "-w", + "-dM", + "-E", + "/usr/share/cmake/Modules/CMakeCXXCompilerABI.cpp" + ], + "MOC_PREDEFS_FILE" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_media_converter_worker_autogen/moc_predefs.h", + "MOC_RELAXED_MODE" : false, + "MOC_SKIP" : + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_db_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_importer_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_live_preview_manager_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_models_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_sequence_detector_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_simple_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_utils_autogen/mocs_compilation.cpp" + ], + "MULTI_CONFIG" : false, + "PARALLEL" : 16, + "PARSE_CACHE_FILE" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/CMakeFiles/test_media_converter_worker_autogen.dir/ParseCache.txt", + "QT_MOC_EXECUTABLE" : "/usr/lib64/qt6/libexec/moc", + "QT_UIC_EXECUTABLE" : "/usr/lib64/qt6/libexec/uic", + "QT_VERSION_MAJOR" : 6, + "QT_VERSION_MINOR" : 10, + "SETTINGS_FILE" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/CMakeFiles/test_media_converter_worker_autogen.dir/AutogenUsed.txt", + "SOURCES" : + [ + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/media_converter_worker.cpp", + "MU", + null + ], + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/test_media_converter_worker.cpp", + "MU", + null + ] + ], + "UIC_OPTIONS" : [], + "UIC_SEARCH_PATHS" : [], + "UIC_SKIP" : + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_db_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_importer_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_live_preview_manager_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_models_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_sequence_detector_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_simple_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_utils_autogen/mocs_compilation.cpp" + ], + "UIC_UI_FILES" : [], + "USE_BETTER_GRAPH" : true, + "VERBOSITY" : 0 +} diff --git a/build-linux/tests/CMakeFiles/test_media_converter_worker_autogen.dir/AutogenUsed.txt b/build-linux/tests/CMakeFiles/test_media_converter_worker_autogen.dir/AutogenUsed.txt new file mode 100644 index 00000000..0042a7d4 --- /dev/null +++ b/build-linux/tests/CMakeFiles/test_media_converter_worker_autogen.dir/AutogenUsed.txt @@ -0,0 +1,2 @@ +moc:59a2360d48ecc4c82f80815c61cd09c3b26ac297790fa7a751a7a123d4597397 +uic:0df7b06f04b60705a14ff966fc10725af0fb193398324deeaf17e44a5f9db1e0 diff --git a/build-linux/tests/CMakeFiles/test_media_converter_worker_autogen.dir/ParseCache.txt b/build-linux/tests/CMakeFiles/test_media_converter_worker_autogen.dir/ParseCache.txt new file mode 100644 index 00000000..0eeb0a89 --- /dev/null +++ b/build-linux/tests/CMakeFiles/test_media_converter_worker_autogen.dir/ParseCache.txt @@ -0,0 +1,1310 @@ +# Generated by CMake. Changes will be overwritten. +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/test_media_converter_worker.cpp + mmc:Q_OBJECT + mid:test_media_converter_worker.moc + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_media_converter_worker_autogen/moc_predefs.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/media_converter_worker.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/test_media_converter_worker.cpp + mdp:/usr/include/alloca.h + mdp:/usr/include/asm-generic/bitsperlong.h + mdp:/usr/include/asm-generic/errno-base.h + mdp:/usr/include/asm-generic/errno.h + mdp:/usr/include/asm-generic/int-ll64.h + mdp:/usr/include/asm-generic/posix_types.h + mdp:/usr/include/asm-generic/types.h + mdp:/usr/include/asm/bitsperlong.h + mdp:/usr/include/asm/errno.h + mdp:/usr/include/asm/posix_types.h + mdp:/usr/include/asm/posix_types_64.h + mdp:/usr/include/asm/types.h + mdp:/usr/include/asm/unistd.h + mdp:/usr/include/asm/unistd_64.h + mdp:/usr/include/assert.h + mdp:/usr/include/bits/atomic_wide_counter.h + mdp:/usr/include/bits/byteswap.h + mdp:/usr/include/bits/confname.h + mdp:/usr/include/bits/cpu-set.h + mdp:/usr/include/bits/endian.h + mdp:/usr/include/bits/endianness.h + mdp:/usr/include/bits/environments.h + mdp:/usr/include/bits/errno.h + mdp:/usr/include/bits/floatn-common.h + mdp:/usr/include/bits/floatn.h + mdp:/usr/include/bits/getopt_core.h + mdp:/usr/include/bits/getopt_posix.h + mdp:/usr/include/bits/libc-header-start.h + mdp:/usr/include/bits/local_lim.h + mdp:/usr/include/bits/locale.h + mdp:/usr/include/bits/long-double.h + mdp:/usr/include/bits/posix1_lim.h + mdp:/usr/include/bits/posix2_lim.h + mdp:/usr/include/bits/posix_opt.h + mdp:/usr/include/bits/pthread_stack_min-dynamic.h + mdp:/usr/include/bits/pthreadtypes-arch.h + mdp:/usr/include/bits/pthreadtypes.h + mdp:/usr/include/bits/sched.h + mdp:/usr/include/bits/select.h + mdp:/usr/include/bits/semaphore.h + mdp:/usr/include/bits/setjmp.h + mdp:/usr/include/bits/stdint-intn.h + mdp:/usr/include/bits/stdint-least.h + mdp:/usr/include/bits/stdint-uintn.h + mdp:/usr/include/bits/stdio_lim.h + mdp:/usr/include/bits/stdlib-float.h + mdp:/usr/include/bits/struct_mutex.h + mdp:/usr/include/bits/struct_rwlock.h + mdp:/usr/include/bits/syscall.h + mdp:/usr/include/bits/thread-shared-types.h + mdp:/usr/include/bits/time.h + mdp:/usr/include/bits/time64.h + mdp:/usr/include/bits/timesize.h + mdp:/usr/include/bits/timex.h + mdp:/usr/include/bits/types.h + mdp:/usr/include/bits/types/FILE.h + mdp:/usr/include/bits/types/__FILE.h + mdp:/usr/include/bits/types/__fpos64_t.h + mdp:/usr/include/bits/types/__fpos_t.h + mdp:/usr/include/bits/types/__locale_t.h + mdp:/usr/include/bits/types/__mbstate_t.h + mdp:/usr/include/bits/types/__sigset_t.h + mdp:/usr/include/bits/types/clock_t.h + mdp:/usr/include/bits/types/clockid_t.h + mdp:/usr/include/bits/types/cookie_io_functions_t.h + mdp:/usr/include/bits/types/error_t.h + mdp:/usr/include/bits/types/locale_t.h + mdp:/usr/include/bits/types/mbstate_t.h + mdp:/usr/include/bits/types/sigset_t.h + mdp:/usr/include/bits/types/struct_FILE.h + mdp:/usr/include/bits/types/struct___jmp_buf_tag.h + mdp:/usr/include/bits/types/struct_itimerspec.h + mdp:/usr/include/bits/types/struct_sched_param.h + mdp:/usr/include/bits/types/struct_timespec.h + mdp:/usr/include/bits/types/struct_timeval.h + mdp:/usr/include/bits/types/struct_tm.h + mdp:/usr/include/bits/types/time_t.h + mdp:/usr/include/bits/types/timer_t.h + mdp:/usr/include/bits/types/wint_t.h + mdp:/usr/include/bits/typesizes.h + mdp:/usr/include/bits/uintn-identity.h + mdp:/usr/include/bits/uio_lim.h + mdp:/usr/include/bits/unistd_ext.h + mdp:/usr/include/bits/waitflags.h + mdp:/usr/include/bits/waitstatus.h + mdp:/usr/include/bits/wchar.h + mdp:/usr/include/bits/wctype-wchar.h + mdp:/usr/include/bits/wordsize.h + mdp:/usr/include/bits/xopen_lim.h + mdp:/usr/include/c++/15/algorithm + mdp:/usr/include/c++/15/array + mdp:/usr/include/c++/15/atomic + mdp:/usr/include/c++/15/backward/auto_ptr.h + mdp:/usr/include/c++/15/backward/binders.h + mdp:/usr/include/c++/15/bit + mdp:/usr/include/c++/15/bits/algorithmfwd.h + mdp:/usr/include/c++/15/bits/align.h + mdp:/usr/include/c++/15/bits/alloc_traits.h + mdp:/usr/include/c++/15/bits/allocated_ptr.h + mdp:/usr/include/c++/15/bits/allocator.h + mdp:/usr/include/c++/15/bits/atomic_base.h + mdp:/usr/include/c++/15/bits/atomic_futex.h + mdp:/usr/include/c++/15/bits/atomic_lockfree_defines.h + mdp:/usr/include/c++/15/bits/atomic_timed_wait.h + mdp:/usr/include/c++/15/bits/atomic_wait.h + mdp:/usr/include/c++/15/bits/basic_ios.h + mdp:/usr/include/c++/15/bits/basic_ios.tcc + mdp:/usr/include/c++/15/bits/basic_string.h + mdp:/usr/include/c++/15/bits/basic_string.tcc + mdp:/usr/include/c++/15/bits/char_traits.h + mdp:/usr/include/c++/15/bits/charconv.h + mdp:/usr/include/c++/15/bits/chrono.h + mdp:/usr/include/c++/15/bits/chrono_io.h + mdp:/usr/include/c++/15/bits/codecvt.h + mdp:/usr/include/c++/15/bits/concept_check.h + mdp:/usr/include/c++/15/bits/cpp_type_traits.h + mdp:/usr/include/c++/15/bits/cxxabi_forced.h + mdp:/usr/include/c++/15/bits/cxxabi_init_exception.h + mdp:/usr/include/c++/15/bits/enable_special_members.h + mdp:/usr/include/c++/15/bits/erase_if.h + mdp:/usr/include/c++/15/bits/exception.h + mdp:/usr/include/c++/15/bits/exception_defines.h + mdp:/usr/include/c++/15/bits/exception_ptr.h + mdp:/usr/include/c++/15/bits/functexcept.h + mdp:/usr/include/c++/15/bits/functional_hash.h + mdp:/usr/include/c++/15/bits/hash_bytes.h + mdp:/usr/include/c++/15/bits/hashtable.h + mdp:/usr/include/c++/15/bits/hashtable_policy.h + mdp:/usr/include/c++/15/bits/invoke.h + mdp:/usr/include/c++/15/bits/ios_base.h + mdp:/usr/include/c++/15/bits/istream.tcc + mdp:/usr/include/c++/15/bits/iterator_concepts.h + mdp:/usr/include/c++/15/bits/list.tcc + mdp:/usr/include/c++/15/bits/locale_classes.h + mdp:/usr/include/c++/15/bits/locale_classes.tcc + mdp:/usr/include/c++/15/bits/locale_conv.h + mdp:/usr/include/c++/15/bits/locale_facets.h + mdp:/usr/include/c++/15/bits/locale_facets.tcc + mdp:/usr/include/c++/15/bits/locale_facets_nonio.h + mdp:/usr/include/c++/15/bits/locale_facets_nonio.tcc + mdp:/usr/include/c++/15/bits/localefwd.h + mdp:/usr/include/c++/15/bits/max_size_type.h + mdp:/usr/include/c++/15/bits/memory_resource.h + mdp:/usr/include/c++/15/bits/memoryfwd.h + mdp:/usr/include/c++/15/bits/move.h + mdp:/usr/include/c++/15/bits/nested_exception.h + mdp:/usr/include/c++/15/bits/new_allocator.h + mdp:/usr/include/c++/15/bits/node_handle.h + mdp:/usr/include/c++/15/bits/ostream.h + mdp:/usr/include/c++/15/bits/ostream.tcc + mdp:/usr/include/c++/15/bits/ostream_insert.h + mdp:/usr/include/c++/15/bits/parse_numbers.h + mdp:/usr/include/c++/15/bits/postypes.h + mdp:/usr/include/c++/15/bits/predefined_ops.h + mdp:/usr/include/c++/15/bits/ptr_traits.h + mdp:/usr/include/c++/15/bits/quoted_string.h + mdp:/usr/include/c++/15/bits/random.h + mdp:/usr/include/c++/15/bits/random.tcc + mdp:/usr/include/c++/15/bits/range_access.h + mdp:/usr/include/c++/15/bits/ranges_algo.h + mdp:/usr/include/c++/15/bits/ranges_algobase.h + mdp:/usr/include/c++/15/bits/ranges_base.h + mdp:/usr/include/c++/15/bits/ranges_cmp.h + mdp:/usr/include/c++/15/bits/ranges_uninitialized.h + mdp:/usr/include/c++/15/bits/ranges_util.h + mdp:/usr/include/c++/15/bits/refwrap.h + mdp:/usr/include/c++/15/bits/requires_hosted.h + mdp:/usr/include/c++/15/bits/semaphore_base.h + mdp:/usr/include/c++/15/bits/shared_ptr.h + mdp:/usr/include/c++/15/bits/shared_ptr_atomic.h + mdp:/usr/include/c++/15/bits/shared_ptr_base.h + mdp:/usr/include/c++/15/bits/specfun.h + mdp:/usr/include/c++/15/bits/sstream.tcc + mdp:/usr/include/c++/15/bits/std_abs.h + mdp:/usr/include/c++/15/bits/std_function.h + mdp:/usr/include/c++/15/bits/std_mutex.h + mdp:/usr/include/c++/15/bits/std_thread.h + mdp:/usr/include/c++/15/bits/stl_algo.h + mdp:/usr/include/c++/15/bits/stl_algobase.h + mdp:/usr/include/c++/15/bits/stl_bvector.h + mdp:/usr/include/c++/15/bits/stl_construct.h + mdp:/usr/include/c++/15/bits/stl_function.h + mdp:/usr/include/c++/15/bits/stl_heap.h + mdp:/usr/include/c++/15/bits/stl_iterator.h + mdp:/usr/include/c++/15/bits/stl_iterator_base_funcs.h + mdp:/usr/include/c++/15/bits/stl_iterator_base_types.h + mdp:/usr/include/c++/15/bits/stl_list.h + mdp:/usr/include/c++/15/bits/stl_map.h + mdp:/usr/include/c++/15/bits/stl_multimap.h + mdp:/usr/include/c++/15/bits/stl_multiset.h + mdp:/usr/include/c++/15/bits/stl_numeric.h + mdp:/usr/include/c++/15/bits/stl_pair.h + mdp:/usr/include/c++/15/bits/stl_raw_storage_iter.h + mdp:/usr/include/c++/15/bits/stl_relops.h + mdp:/usr/include/c++/15/bits/stl_set.h + mdp:/usr/include/c++/15/bits/stl_tempbuf.h + mdp:/usr/include/c++/15/bits/stl_tree.h + mdp:/usr/include/c++/15/bits/stl_uninitialized.h + mdp:/usr/include/c++/15/bits/stl_vector.h + mdp:/usr/include/c++/15/bits/stream_iterator.h + mdp:/usr/include/c++/15/bits/streambuf.tcc + mdp:/usr/include/c++/15/bits/streambuf_iterator.h + mdp:/usr/include/c++/15/bits/string_view.tcc + mdp:/usr/include/c++/15/bits/stringfwd.h + mdp:/usr/include/c++/15/bits/this_thread_sleep.h + mdp:/usr/include/c++/15/bits/uniform_int_dist.h + mdp:/usr/include/c++/15/bits/unique_lock.h + mdp:/usr/include/c++/15/bits/unique_ptr.h + mdp:/usr/include/c++/15/bits/unordered_map.h + mdp:/usr/include/c++/15/bits/unordered_set.h + mdp:/usr/include/c++/15/bits/uses_allocator.h + mdp:/usr/include/c++/15/bits/uses_allocator_args.h + mdp:/usr/include/c++/15/bits/utility.h + mdp:/usr/include/c++/15/bits/vector.tcc + mdp:/usr/include/c++/15/bits/version.h + mdp:/usr/include/c++/15/cassert + mdp:/usr/include/c++/15/cctype + mdp:/usr/include/c++/15/cerrno + mdp:/usr/include/c++/15/charconv + mdp:/usr/include/c++/15/chrono + mdp:/usr/include/c++/15/climits + mdp:/usr/include/c++/15/clocale + mdp:/usr/include/c++/15/cmath + mdp:/usr/include/c++/15/compare + mdp:/usr/include/c++/15/concepts + mdp:/usr/include/c++/15/condition_variable + mdp:/usr/include/c++/15/cstddef + mdp:/usr/include/c++/15/cstdint + mdp:/usr/include/c++/15/cstdio + mdp:/usr/include/c++/15/cstdlib + mdp:/usr/include/c++/15/cstring + mdp:/usr/include/c++/15/ctime + mdp:/usr/include/c++/15/cwchar + mdp:/usr/include/c++/15/cwctype + mdp:/usr/include/c++/15/debug/assertions.h + mdp:/usr/include/c++/15/debug/debug.h + mdp:/usr/include/c++/15/exception + mdp:/usr/include/c++/15/experimental/source_location + mdp:/usr/include/c++/15/ext/aligned_buffer.h + mdp:/usr/include/c++/15/ext/alloc_traits.h + mdp:/usr/include/c++/15/ext/atomicity.h + mdp:/usr/include/c++/15/ext/concurrence.h + mdp:/usr/include/c++/15/ext/numeric_traits.h + mdp:/usr/include/c++/15/ext/string_conversions.h + mdp:/usr/include/c++/15/ext/type_traits.h + mdp:/usr/include/c++/15/filesystem + mdp:/usr/include/c++/15/format + mdp:/usr/include/c++/15/functional + mdp:/usr/include/c++/15/future + mdp:/usr/include/c++/15/initializer_list + mdp:/usr/include/c++/15/iomanip + mdp:/usr/include/c++/15/ios + mdp:/usr/include/c++/15/iosfwd + mdp:/usr/include/c++/15/istream + mdp:/usr/include/c++/15/iterator + mdp:/usr/include/c++/15/limits + mdp:/usr/include/c++/15/list + mdp:/usr/include/c++/15/locale + mdp:/usr/include/c++/15/map + mdp:/usr/include/c++/15/memory + mdp:/usr/include/c++/15/memory_resource + mdp:/usr/include/c++/15/mutex + mdp:/usr/include/c++/15/new + mdp:/usr/include/c++/15/numeric + mdp:/usr/include/c++/15/optional + mdp:/usr/include/c++/15/ostream + mdp:/usr/include/c++/15/pstl/execution_defs.h + mdp:/usr/include/c++/15/pstl/glue_numeric_defs.h + mdp:/usr/include/c++/15/pstl/pstl_config.h + mdp:/usr/include/c++/15/random + mdp:/usr/include/c++/15/ratio + mdp:/usr/include/c++/15/semaphore + mdp:/usr/include/c++/15/set + mdp:/usr/include/c++/15/shared_mutex + mdp:/usr/include/c++/15/source_location + mdp:/usr/include/c++/15/sstream + mdp:/usr/include/c++/15/stdexcept + mdp:/usr/include/c++/15/stop_token + mdp:/usr/include/c++/15/streambuf + mdp:/usr/include/c++/15/string + mdp:/usr/include/c++/15/string_view + mdp:/usr/include/c++/15/system_error + mdp:/usr/include/c++/15/tr1/bessel_function.tcc + mdp:/usr/include/c++/15/tr1/beta_function.tcc + mdp:/usr/include/c++/15/tr1/ell_integral.tcc + mdp:/usr/include/c++/15/tr1/exp_integral.tcc + mdp:/usr/include/c++/15/tr1/gamma.tcc + mdp:/usr/include/c++/15/tr1/hypergeometric.tcc + mdp:/usr/include/c++/15/tr1/legendre_function.tcc + mdp:/usr/include/c++/15/tr1/modified_bessel_func.tcc + mdp:/usr/include/c++/15/tr1/poly_hermite.tcc + mdp:/usr/include/c++/15/tr1/poly_laguerre.tcc + mdp:/usr/include/c++/15/tr1/riemann_zeta.tcc + mdp:/usr/include/c++/15/tr1/special_function_util.h + mdp:/usr/include/c++/15/tuple + mdp:/usr/include/c++/15/type_traits + mdp:/usr/include/c++/15/typeinfo + mdp:/usr/include/c++/15/unordered_map + mdp:/usr/include/c++/15/unordered_set + mdp:/usr/include/c++/15/utility + mdp:/usr/include/c++/15/variant + mdp:/usr/include/c++/15/vector + mdp:/usr/include/c++/15/version + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/atomic_word.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++allocator.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++config.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++locale.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/cpu_defines.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/ctype_base.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/ctype_inline.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/error_constants.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/gthr-default.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/gthr.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/messages_members.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/opt_random.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/os_defines.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/time_members.h + mdp:/usr/include/ctype.h + mdp:/usr/include/endian.h + mdp:/usr/include/errno.h + mdp:/usr/include/features-time64.h + mdp:/usr/include/features.h + mdp:/usr/include/gnu/stubs-64.h + mdp:/usr/include/gnu/stubs.h + mdp:/usr/include/libintl.h + mdp:/usr/include/limits.h + mdp:/usr/include/linux/close_range.h + mdp:/usr/include/linux/errno.h + mdp:/usr/include/linux/limits.h + mdp:/usr/include/linux/posix_types.h + mdp:/usr/include/linux/sched/types.h + mdp:/usr/include/linux/stddef.h + mdp:/usr/include/linux/types.h + mdp:/usr/include/locale.h + mdp:/usr/include/pthread.h + mdp:/usr/include/qt6/QtCore/QAbstractItemModel + mdp:/usr/include/qt6/QtCore/QDeadlineTimer + mdp:/usr/include/qt6/QtCore/QElapsedTimer + mdp:/usr/include/qt6/QtCore/QEvent + mdp:/usr/include/qt6/QtCore/QFileInfo + mdp:/usr/include/qt6/QtCore/QHash + mdp:/usr/include/qt6/QtCore/QList + mdp:/usr/include/qt6/QtCore/QMap + mdp:/usr/include/qt6/QtCore/QMargins + mdp:/usr/include/qt6/QtCore/QMetaEnum + mdp:/usr/include/qt6/QtCore/QMutex + mdp:/usr/include/qt6/QtCore/QObject + mdp:/usr/include/qt6/QtCore/QProcess + mdp:/usr/include/qt6/QtCore/QRect + mdp:/usr/include/qt6/QtCore/QSize + mdp:/usr/include/qt6/QtCore/QSizeF + mdp:/usr/include/qt6/QtCore/QString + mdp:/usr/include/qt6/QtCore/QStringList + mdp:/usr/include/qt6/QtCore/QTemporaryDir + mdp:/usr/include/qt6/QtCore/QVariant + mdp:/usr/include/qt6/QtCore/QVector + mdp:/usr/include/qt6/QtCore/QtCore + mdp:/usr/include/qt6/QtCore/QtCoreDepends + mdp:/usr/include/qt6/QtCore/q17memory.h + mdp:/usr/include/qt6/QtCore/q20algorithm.h + mdp:/usr/include/qt6/QtCore/q20chrono.h + mdp:/usr/include/qt6/QtCore/q20functional.h + mdp:/usr/include/qt6/QtCore/q20iterator.h + mdp:/usr/include/qt6/QtCore/q20map.h + mdp:/usr/include/qt6/QtCore/q20memory.h + mdp:/usr/include/qt6/QtCore/q20type_traits.h + mdp:/usr/include/qt6/QtCore/q20utility.h + mdp:/usr/include/qt6/QtCore/q20vector.h + mdp:/usr/include/qt6/QtCore/q23functional.h + mdp:/usr/include/qt6/QtCore/q23type_traits.h + mdp:/usr/include/qt6/QtCore/q23utility.h + mdp:/usr/include/qt6/QtCore/q26numeric.h + mdp:/usr/include/qt6/QtCore/qabstractanimation.h + mdp:/usr/include/qt6/QtCore/qabstracteventdispatcher.h + mdp:/usr/include/qt6/QtCore/qabstractitemmodel.h + mdp:/usr/include/qt6/QtCore/qabstractnativeeventfilter.h + mdp:/usr/include/qt6/QtCore/qabstractproxymodel.h + mdp:/usr/include/qt6/QtCore/qalgorithms.h + mdp:/usr/include/qt6/QtCore/qalloc.h + mdp:/usr/include/qt6/QtCore/qanimationgroup.h + mdp:/usr/include/qt6/QtCore/qanystringview.h + mdp:/usr/include/qt6/QtCore/qapplicationstatic.h + mdp:/usr/include/qt6/QtCore/qarraydata.h + mdp:/usr/include/qt6/QtCore/qarraydataops.h + mdp:/usr/include/qt6/QtCore/qarraydatapointer.h + mdp:/usr/include/qt6/QtCore/qassert.h + mdp:/usr/include/qt6/QtCore/qassociativeiterable.h + mdp:/usr/include/qt6/QtCore/qatomic.h + mdp:/usr/include/qt6/QtCore/qatomic_cxx11.h + mdp:/usr/include/qt6/QtCore/qatomicscopedvaluerollback.h + mdp:/usr/include/qt6/QtCore/qbasicatomic.h + mdp:/usr/include/qt6/QtCore/qbasictimer.h + mdp:/usr/include/qt6/QtCore/qbindingstorage.h + mdp:/usr/include/qt6/QtCore/qbitarray.h + mdp:/usr/include/qt6/QtCore/qbuffer.h + mdp:/usr/include/qt6/QtCore/qbytearray.h + mdp:/usr/include/qt6/QtCore/qbytearrayalgorithms.h + mdp:/usr/include/qt6/QtCore/qbytearraylist.h + mdp:/usr/include/qt6/QtCore/qbytearraymatcher.h + mdp:/usr/include/qt6/QtCore/qbytearrayview.h + mdp:/usr/include/qt6/QtCore/qcache.h + mdp:/usr/include/qt6/QtCore/qcalendar.h + mdp:/usr/include/qt6/QtCore/qcborarray.h + mdp:/usr/include/qt6/QtCore/qcborcommon.h + mdp:/usr/include/qt6/QtCore/qcbormap.h + mdp:/usr/include/qt6/QtCore/qcborstream.h + mdp:/usr/include/qt6/QtCore/qcborstreamreader.h + mdp:/usr/include/qt6/QtCore/qcborstreamwriter.h + mdp:/usr/include/qt6/QtCore/qcborvalue.h + mdp:/usr/include/qt6/QtCore/qchar.h + mdp:/usr/include/qt6/QtCore/qcheckedint_impl.h + mdp:/usr/include/qt6/QtCore/qchronotimer.h + mdp:/usr/include/qt6/QtCore/qcollator.h + mdp:/usr/include/qt6/QtCore/qcommandlineoption.h + mdp:/usr/include/qt6/QtCore/qcommandlineparser.h + mdp:/usr/include/qt6/QtCore/qcompare.h + mdp:/usr/include/qt6/QtCore/qcompare_impl.h + mdp:/usr/include/qt6/QtCore/qcomparehelpers.h + mdp:/usr/include/qt6/QtCore/qcompilerdetection.h + mdp:/usr/include/qt6/QtCore/qconcatenatetablesproxymodel.h + mdp:/usr/include/qt6/QtCore/qconfig-64.h + mdp:/usr/include/qt6/QtCore/qconfig.h + mdp:/usr/include/qt6/QtCore/qconstructormacros.h + mdp:/usr/include/qt6/QtCore/qcontainerfwd.h + mdp:/usr/include/qt6/QtCore/qcontainerinfo.h + mdp:/usr/include/qt6/QtCore/qcontainertools_impl.h + mdp:/usr/include/qt6/QtCore/qcontiguouscache.h + mdp:/usr/include/qt6/QtCore/qcoreapplication.h + mdp:/usr/include/qt6/QtCore/qcoreapplication_platform.h + mdp:/usr/include/qt6/QtCore/qcoreevent.h + mdp:/usr/include/qt6/QtCore/qcryptographichash.h + mdp:/usr/include/qt6/QtCore/qdarwinhelpers.h + mdp:/usr/include/qt6/QtCore/qdatastream.h + mdp:/usr/include/qt6/QtCore/qdatetime.h + mdp:/usr/include/qt6/QtCore/qdeadlinetimer.h + mdp:/usr/include/qt6/QtCore/qdebug.h + mdp:/usr/include/qt6/QtCore/qdir.h + mdp:/usr/include/qt6/QtCore/qdiriterator.h + mdp:/usr/include/qt6/QtCore/qdirlisting.h + mdp:/usr/include/qt6/QtCore/qeasingcurve.h + mdp:/usr/include/qt6/QtCore/qelapsedtimer.h + mdp:/usr/include/qt6/QtCore/qendian.h + mdp:/usr/include/qt6/QtCore/qeventloop.h + mdp:/usr/include/qt6/QtCore/qexception.h + mdp:/usr/include/qt6/QtCore/qexceptionhandling.h + mdp:/usr/include/qt6/QtCore/qfactoryinterface.h + mdp:/usr/include/qt6/QtCore/qfile.h + mdp:/usr/include/qt6/QtCore/qfiledevice.h + mdp:/usr/include/qt6/QtCore/qfileinfo.h + mdp:/usr/include/qt6/QtCore/qfileselector.h + mdp:/usr/include/qt6/QtCore/qfilesystemwatcher.h + mdp:/usr/include/qt6/QtCore/qflags.h + mdp:/usr/include/qt6/QtCore/qfloat16.h + mdp:/usr/include/qt6/QtCore/qforeach.h + mdp:/usr/include/qt6/QtCore/qfunctionaltools_impl.h + mdp:/usr/include/qt6/QtCore/qfunctionpointer.h + mdp:/usr/include/qt6/QtCore/qfuture.h + mdp:/usr/include/qt6/QtCore/qfuture_impl.h + mdp:/usr/include/qt6/QtCore/qfutureinterface.h + mdp:/usr/include/qt6/QtCore/qfuturesynchronizer.h + mdp:/usr/include/qt6/QtCore/qfuturewatcher.h + mdp:/usr/include/qt6/QtCore/qgenericatomic.h + mdp:/usr/include/qt6/QtCore/qglobal.h + mdp:/usr/include/qt6/QtCore/qglobalstatic.h + mdp:/usr/include/qt6/QtCore/qhash.h + mdp:/usr/include/qt6/QtCore/qhashfunctions.h + mdp:/usr/include/qt6/QtCore/qidentityproxymodel.h + mdp:/usr/include/qt6/QtCore/qiodevice.h + mdp:/usr/include/qt6/QtCore/qiodevicebase.h + mdp:/usr/include/qt6/QtCore/qitemselectionmodel.h + mdp:/usr/include/qt6/QtCore/qiterable.h + mdp:/usr/include/qt6/QtCore/qiterator.h + mdp:/usr/include/qt6/QtCore/qjsonarray.h + mdp:/usr/include/qt6/QtCore/qjsondocument.h + mdp:/usr/include/qt6/QtCore/qjsonobject.h + mdp:/usr/include/qt6/QtCore/qjsonparseerror.h + mdp:/usr/include/qt6/QtCore/qjsonvalue.h + mdp:/usr/include/qt6/QtCore/qlatin1stringmatcher.h + mdp:/usr/include/qt6/QtCore/qlatin1stringview.h + mdp:/usr/include/qt6/QtCore/qlibrary.h + mdp:/usr/include/qt6/QtCore/qlibraryinfo.h + mdp:/usr/include/qt6/QtCore/qline.h + mdp:/usr/include/qt6/QtCore/qlist.h + mdp:/usr/include/qt6/QtCore/qlocale.h + mdp:/usr/include/qt6/QtCore/qlockfile.h + mdp:/usr/include/qt6/QtCore/qlogging.h + mdp:/usr/include/qt6/QtCore/qloggingcategory.h + mdp:/usr/include/qt6/QtCore/qmalloc.h + mdp:/usr/include/qt6/QtCore/qmap.h + mdp:/usr/include/qt6/QtCore/qmargins.h + mdp:/usr/include/qt6/QtCore/qmath.h + mdp:/usr/include/qt6/QtCore/qmessageauthenticationcode.h + mdp:/usr/include/qt6/QtCore/qmetacontainer.h + mdp:/usr/include/qt6/QtCore/qmetaobject.h + mdp:/usr/include/qt6/QtCore/qmetatype.h + mdp:/usr/include/qt6/QtCore/qmimedata.h + mdp:/usr/include/qt6/QtCore/qmimedatabase.h + mdp:/usr/include/qt6/QtCore/qmimetype.h + mdp:/usr/include/qt6/QtCore/qminmax.h + mdp:/usr/include/qt6/QtCore/qmutex.h + mdp:/usr/include/qt6/QtCore/qnamespace.h + mdp:/usr/include/qt6/QtCore/qnativeinterface.h + mdp:/usr/include/qt6/QtCore/qnumeric.h + mdp:/usr/include/qt6/QtCore/qobject.h + mdp:/usr/include/qt6/QtCore/qobject_impl.h + mdp:/usr/include/qt6/QtCore/qobjectcleanuphandler.h + mdp:/usr/include/qt6/QtCore/qobjectdefs.h + mdp:/usr/include/qt6/QtCore/qobjectdefs_impl.h + mdp:/usr/include/qt6/QtCore/qoperatingsystemversion.h + mdp:/usr/include/qt6/QtCore/qoverload.h + mdp:/usr/include/qt6/QtCore/qpair.h + mdp:/usr/include/qt6/QtCore/qparallelanimationgroup.h + mdp:/usr/include/qt6/QtCore/qpauseanimation.h + mdp:/usr/include/qt6/QtCore/qpermissions.h + mdp:/usr/include/qt6/QtCore/qplugin.h + mdp:/usr/include/qt6/QtCore/qpluginloader.h + mdp:/usr/include/qt6/QtCore/qpoint.h + mdp:/usr/include/qt6/QtCore/qpointer.h + mdp:/usr/include/qt6/QtCore/qprocess.h + mdp:/usr/include/qt6/QtCore/qprocessordetection.h + mdp:/usr/include/qt6/QtCore/qpromise.h + mdp:/usr/include/qt6/QtCore/qproperty.h + mdp:/usr/include/qt6/QtCore/qpropertyanimation.h + mdp:/usr/include/qt6/QtCore/qpropertyprivate.h + mdp:/usr/include/qt6/QtCore/qqueue.h + mdp:/usr/include/qt6/QtCore/qrandom.h + mdp:/usr/include/qt6/QtCore/qrangemodel.h + mdp:/usr/include/qt6/QtCore/qrangemodel_impl.h + mdp:/usr/include/qt6/QtCore/qreadwritelock.h + mdp:/usr/include/qt6/QtCore/qrect.h + mdp:/usr/include/qt6/QtCore/qrefcount.h + mdp:/usr/include/qt6/QtCore/qregularexpression.h + mdp:/usr/include/qt6/QtCore/qresource.h + mdp:/usr/include/qt6/QtCore/qresultstore.h + mdp:/usr/include/qt6/QtCore/qrunnable.h + mdp:/usr/include/qt6/QtCore/qsavefile.h + mdp:/usr/include/qt6/QtCore/qscopedpointer.h + mdp:/usr/include/qt6/QtCore/qscopedvaluerollback.h + mdp:/usr/include/qt6/QtCore/qscopeguard.h + mdp:/usr/include/qt6/QtCore/qsemaphore.h + mdp:/usr/include/qt6/QtCore/qsequentialanimationgroup.h + mdp:/usr/include/qt6/QtCore/qsequentialiterable.h + mdp:/usr/include/qt6/QtCore/qset.h + mdp:/usr/include/qt6/QtCore/qsettings.h + mdp:/usr/include/qt6/QtCore/qshareddata.h + mdp:/usr/include/qt6/QtCore/qshareddata_impl.h + mdp:/usr/include/qt6/QtCore/qsharedmemory.h + mdp:/usr/include/qt6/QtCore/qsharedpointer.h + mdp:/usr/include/qt6/QtCore/qsharedpointer_impl.h + mdp:/usr/include/qt6/QtCore/qsignalmapper.h + mdp:/usr/include/qt6/QtCore/qsimd.h + mdp:/usr/include/qt6/QtCore/qsize.h + mdp:/usr/include/qt6/QtCore/qsocketnotifier.h + mdp:/usr/include/qt6/QtCore/qsortfilterproxymodel.h + mdp:/usr/include/qt6/QtCore/qspan.h + mdp:/usr/include/qt6/QtCore/qstack.h + mdp:/usr/include/qt6/QtCore/qstandardpaths.h + mdp:/usr/include/qt6/QtCore/qstaticlatin1stringmatcher.h + mdp:/usr/include/qt6/QtCore/qstdlibdetection.h + mdp:/usr/include/qt6/QtCore/qstorageinfo.h + mdp:/usr/include/qt6/QtCore/qstring.h + mdp:/usr/include/qt6/QtCore/qstringalgorithms.h + mdp:/usr/include/qt6/QtCore/qstringbuilder.h + mdp:/usr/include/qt6/QtCore/qstringconverter.h + mdp:/usr/include/qt6/QtCore/qstringconverter_base.h + mdp:/usr/include/qt6/QtCore/qstringfwd.h + mdp:/usr/include/qt6/QtCore/qstringlist.h + mdp:/usr/include/qt6/QtCore/qstringlistmodel.h + mdp:/usr/include/qt6/QtCore/qstringliteral.h + mdp:/usr/include/qt6/QtCore/qstringmatcher.h + mdp:/usr/include/qt6/QtCore/qstringtokenizer.h + mdp:/usr/include/qt6/QtCore/qstringview.h + mdp:/usr/include/qt6/QtCore/qswap.h + mdp:/usr/include/qt6/QtCore/qsysinfo.h + mdp:/usr/include/qt6/QtCore/qsystemdetection.h + mdp:/usr/include/qt6/QtCore/qsystemsemaphore.h + mdp:/usr/include/qt6/QtCore/qtaggedpointer.h + mdp:/usr/include/qt6/QtCore/qtclasshelpermacros.h + mdp:/usr/include/qt6/QtCore/qtconfiginclude.h + mdp:/usr/include/qt6/QtCore/qtconfigmacros.h + mdp:/usr/include/qt6/QtCore/qtcore-config.h + mdp:/usr/include/qt6/QtCore/qtcoreexports.h + mdp:/usr/include/qt6/QtCore/qtcoreglobal.h + mdp:/usr/include/qt6/QtCore/qtcoreversion.h + mdp:/usr/include/qt6/QtCore/qtdeprecationdefinitions.h + mdp:/usr/include/qt6/QtCore/qtdeprecationmarkers.h + mdp:/usr/include/qt6/QtCore/qtemporarydir.h + mdp:/usr/include/qt6/QtCore/qtemporaryfile.h + mdp:/usr/include/qt6/QtCore/qtenvironmentvariables.h + mdp:/usr/include/qt6/QtCore/qtestsupport_core.h + mdp:/usr/include/qt6/QtCore/qtextboundaryfinder.h + mdp:/usr/include/qt6/QtCore/qtextstream.h + mdp:/usr/include/qt6/QtCore/qtformat_impl.h + mdp:/usr/include/qt6/QtCore/qthread.h + mdp:/usr/include/qt6/QtCore/qthreadpool.h + mdp:/usr/include/qt6/QtCore/qthreadstorage.h + mdp:/usr/include/qt6/QtCore/qtimeline.h + mdp:/usr/include/qt6/QtCore/qtimer.h + mdp:/usr/include/qt6/QtCore/qtimezone.h + mdp:/usr/include/qt6/QtCore/qtipccommon.h + mdp:/usr/include/qt6/QtCore/qtmetamacros.h + mdp:/usr/include/qt6/QtCore/qtmocconstants.h + mdp:/usr/include/qt6/QtCore/qtnoop.h + mdp:/usr/include/qt6/QtCore/qtpreprocessorsupport.h + mdp:/usr/include/qt6/QtCore/qtranslator.h + mdp:/usr/include/qt6/QtCore/qtransposeproxymodel.h + mdp:/usr/include/qt6/QtCore/qtresource.h + mdp:/usr/include/qt6/QtCore/qtsan_impl.h + mdp:/usr/include/qt6/QtCore/qtsymbolmacros.h + mdp:/usr/include/qt6/QtCore/qttranslation.h + mdp:/usr/include/qt6/QtCore/qttypetraits.h + mdp:/usr/include/qt6/QtCore/qtversion.h + mdp:/usr/include/qt6/QtCore/qtversionchecks.h + mdp:/usr/include/qt6/QtCore/qtypeinfo.h + mdp:/usr/include/qt6/QtCore/qtyperevision.h + mdp:/usr/include/qt6/QtCore/qtypes.h + mdp:/usr/include/qt6/QtCore/qurl.h + mdp:/usr/include/qt6/QtCore/qurlquery.h + mdp:/usr/include/qt6/QtCore/qutf8stringview.h + mdp:/usr/include/qt6/QtCore/quuid.h + mdp:/usr/include/qt6/QtCore/qvariant.h + mdp:/usr/include/qt6/QtCore/qvariantanimation.h + mdp:/usr/include/qt6/QtCore/qvarianthash.h + mdp:/usr/include/qt6/QtCore/qvariantlist.h + mdp:/usr/include/qt6/QtCore/qvariantmap.h + mdp:/usr/include/qt6/QtCore/qvarlengtharray.h + mdp:/usr/include/qt6/QtCore/qvector.h + mdp:/usr/include/qt6/QtCore/qversionnumber.h + mdp:/usr/include/qt6/QtCore/qversiontagging.h + mdp:/usr/include/qt6/QtCore/qwaitcondition.h + mdp:/usr/include/qt6/QtCore/qwineventnotifier.h + mdp:/usr/include/qt6/QtCore/qxmlstream.h + mdp:/usr/include/qt6/QtCore/qxpfunctional.h + mdp:/usr/include/qt6/QtCore/qxptype_traits.h + mdp:/usr/include/qt6/QtCore/qyieldcpu.h + mdp:/usr/include/qt6/QtGui/QBrush + mdp:/usr/include/qt6/QtGui/QColor + mdp:/usr/include/qt6/QtGui/QFont + mdp:/usr/include/qt6/QtGui/QIcon + mdp:/usr/include/qt6/QtGui/QImage + mdp:/usr/include/qt6/QtGui/QPixmap + mdp:/usr/include/qt6/QtGui/QTransform + mdp:/usr/include/qt6/QtGui/qaction.h + mdp:/usr/include/qt6/QtGui/qbitmap.h + mdp:/usr/include/qt6/QtGui/qbrush.h + mdp:/usr/include/qt6/QtGui/qcolor.h + mdp:/usr/include/qt6/QtGui/qcursor.h + mdp:/usr/include/qt6/QtGui/qevent.h + mdp:/usr/include/qt6/QtGui/qeventpoint.h + mdp:/usr/include/qt6/QtGui/qfont.h + mdp:/usr/include/qt6/QtGui/qfontinfo.h + mdp:/usr/include/qt6/QtGui/qfontmetrics.h + mdp:/usr/include/qt6/QtGui/qfontvariableaxis.h + mdp:/usr/include/qt6/QtGui/qguiapplication.h + mdp:/usr/include/qt6/QtGui/qguiapplication_platform.h + mdp:/usr/include/qt6/QtGui/qicon.h + mdp:/usr/include/qt6/QtGui/qimage.h + mdp:/usr/include/qt6/QtGui/qinputdevice.h + mdp:/usr/include/qt6/QtGui/qinputmethod.h + mdp:/usr/include/qt6/QtGui/qkeysequence.h + mdp:/usr/include/qt6/QtGui/qpaintdevice.h + mdp:/usr/include/qt6/QtGui/qpalette.h + mdp:/usr/include/qt6/QtGui/qpixelformat.h + mdp:/usr/include/qt6/QtGui/qpixmap.h + mdp:/usr/include/qt6/QtGui/qpointingdevice.h + mdp:/usr/include/qt6/QtGui/qpolygon.h + mdp:/usr/include/qt6/QtGui/qregion.h + mdp:/usr/include/qt6/QtGui/qrgb.h + mdp:/usr/include/qt6/QtGui/qrgba64.h + mdp:/usr/include/qt6/QtGui/qscreen.h + mdp:/usr/include/qt6/QtGui/qscreen_platform.h + mdp:/usr/include/qt6/QtGui/qsurface.h + mdp:/usr/include/qt6/QtGui/qsurfaceformat.h + mdp:/usr/include/qt6/QtGui/qtestsupport_gui.h + mdp:/usr/include/qt6/QtGui/qtgui-config.h + mdp:/usr/include/qt6/QtGui/qtguiexports.h + mdp:/usr/include/qt6/QtGui/qtguiglobal.h + mdp:/usr/include/qt6/QtGui/qtransform.h + mdp:/usr/include/qt6/QtGui/qvector2d.h + mdp:/usr/include/qt6/QtGui/qvector3d.h + mdp:/usr/include/qt6/QtGui/qvector4d.h + mdp:/usr/include/qt6/QtGui/qvectornd.h + mdp:/usr/include/qt6/QtGui/qwindow.h + mdp:/usr/include/qt6/QtGui/qwindowdefs.h + mdp:/usr/include/qt6/QtTest/QSignalSpy + mdp:/usr/include/qt6/QtTest/QtTest + mdp:/usr/include/qt6/QtTest/QtTestDepends + mdp:/usr/include/qt6/QtTest/qabstractitemmodeltester.h + mdp:/usr/include/qt6/QtTest/qbenchmark.h + mdp:/usr/include/qt6/QtTest/qbenchmarkmetric.h + mdp:/usr/include/qt6/QtTest/qsignalspy.h + mdp:/usr/include/qt6/QtTest/qtest.h + mdp:/usr/include/qt6/QtTest/qtest_gui.h + mdp:/usr/include/qt6/QtTest/qtest_widgets.h + mdp:/usr/include/qt6/QtTest/qtestassert.h + mdp:/usr/include/qt6/QtTest/qtestcase.h + mdp:/usr/include/qt6/QtTest/qtestdata.h + mdp:/usr/include/qt6/QtTest/qtestevent.h + mdp:/usr/include/qt6/QtTest/qtesteventloop.h + mdp:/usr/include/qt6/QtTest/qtestkeyboard.h + mdp:/usr/include/qt6/QtTest/qtestmouse.h + mdp:/usr/include/qt6/QtTest/qtestspontaneevent.h + mdp:/usr/include/qt6/QtTest/qtestsystem.h + mdp:/usr/include/qt6/QtTest/qtesttostring.h + mdp:/usr/include/qt6/QtTest/qtesttouch.h + mdp:/usr/include/qt6/QtTest/qtestwheel.h + mdp:/usr/include/qt6/QtTest/qttestexports.h + mdp:/usr/include/qt6/QtTest/qttestglobal.h + mdp:/usr/include/qt6/QtTest/qttestlib-config.h + mdp:/usr/include/qt6/QtTest/qttestversion.h + mdp:/usr/include/qt6/QtWidgets/QSizePolicy + mdp:/usr/include/qt6/QtWidgets/qapplication.h + mdp:/usr/include/qt6/QtWidgets/qsizepolicy.h + mdp:/usr/include/qt6/QtWidgets/qtestsupport_widgets.h + mdp:/usr/include/qt6/QtWidgets/qtwidgets-config.h + mdp:/usr/include/qt6/QtWidgets/qtwidgetsexports.h + mdp:/usr/include/qt6/QtWidgets/qtwidgetsglobal.h + mdp:/usr/include/qt6/QtWidgets/qwidget.h + mdp:/usr/include/sched.h + mdp:/usr/include/semaphore.h + mdp:/usr/include/stdc-predef.h + mdp:/usr/include/stdint.h + mdp:/usr/include/stdio.h + mdp:/usr/include/stdlib.h + mdp:/usr/include/string.h + mdp:/usr/include/strings.h + mdp:/usr/include/sys/cdefs.h + mdp:/usr/include/sys/select.h + mdp:/usr/include/sys/single_threaded.h + mdp:/usr/include/sys/syscall.h + mdp:/usr/include/sys/time.h + mdp:/usr/include/sys/types.h + mdp:/usr/include/syscall.h + mdp:/usr/include/time.h + mdp:/usr/include/unistd.h + mdp:/usr/include/wchar.h + mdp:/usr/include/wctype.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/adxintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxavx512intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxbf16intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxcomplexintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxfp16intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxfp8intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxint8intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxmovrsintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxtf32intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxtileintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxtransposeintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2-512bf16intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2-512convertintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2-512mediaintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2-512minmaxintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2-512satcvtintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2bf16intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2convertintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2copyintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2mediaintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2minmaxintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2satcvtintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx2intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512bf16intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512bf16vlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512bitalgintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512bitalgvlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512bwintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512cdintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512dqintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512fintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512fp16intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512fp16vlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512ifmaintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512ifmavlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vbmi2intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vbmi2vlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vbmiintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vbmivlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vlbwintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vldqintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vnniintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vnnivlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vp2intersectintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vp2intersectvlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vpopcntdqintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vpopcntdqvlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avxifmaintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avxintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avxneconvertintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avxvnniint16intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avxvnniint8intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avxvnniintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/bmi2intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/bmiintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/cetintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/cldemoteintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/clflushoptintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/clwbintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/clzerointrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/cmpccxaddintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/emmintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/enqcmdintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/f16cintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/fmaintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/fxsrintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/gfniintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/hresetintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/ia32intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/immintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/keylockerintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/lwpintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/lzcntintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/mm_malloc.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/mmintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/movdirintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/movrsintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/mwaitintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/mwaitxintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/pconfigintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/pkuintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/pmmintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/popcntintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/prfchiintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/prfchwintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/raointintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/rdseedintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/rtmintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/serializeintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/sgxintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/sha512intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/shaintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/sm3intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/sm4intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/smmintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stdarg.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stdbool.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stddef.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/tbmintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/tmmintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/tsxldtrkintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/uintrintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/usermsrintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/vaesintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/vpclmulqdqintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/waitpkgintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/wbnoinvdintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/wmmintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/x86gprintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/xmmintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/xsavecintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/xsaveintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/xsaveoptintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/xsavesintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/xtestintrin.h +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/media_converter_worker.cpp +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/media_converter_worker.h + mmc:Q_OBJECT + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_media_converter_worker_autogen/moc_predefs.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/media_converter_worker.h + mdp:/usr/include/alloca.h + mdp:/usr/include/asm-generic/bitsperlong.h + mdp:/usr/include/asm-generic/errno-base.h + mdp:/usr/include/asm-generic/errno.h + mdp:/usr/include/asm-generic/int-ll64.h + mdp:/usr/include/asm-generic/posix_types.h + mdp:/usr/include/asm-generic/types.h + mdp:/usr/include/asm/bitsperlong.h + mdp:/usr/include/asm/errno.h + mdp:/usr/include/asm/posix_types.h + mdp:/usr/include/asm/posix_types_64.h + mdp:/usr/include/asm/types.h + mdp:/usr/include/asm/unistd.h + mdp:/usr/include/asm/unistd_64.h + mdp:/usr/include/assert.h + mdp:/usr/include/bits/atomic_wide_counter.h + mdp:/usr/include/bits/byteswap.h + mdp:/usr/include/bits/confname.h + mdp:/usr/include/bits/cpu-set.h + mdp:/usr/include/bits/endian.h + mdp:/usr/include/bits/endianness.h + mdp:/usr/include/bits/environments.h + mdp:/usr/include/bits/errno.h + mdp:/usr/include/bits/floatn-common.h + mdp:/usr/include/bits/floatn.h + mdp:/usr/include/bits/getopt_core.h + mdp:/usr/include/bits/getopt_posix.h + mdp:/usr/include/bits/libc-header-start.h + mdp:/usr/include/bits/local_lim.h + mdp:/usr/include/bits/locale.h + mdp:/usr/include/bits/long-double.h + mdp:/usr/include/bits/posix1_lim.h + mdp:/usr/include/bits/posix2_lim.h + mdp:/usr/include/bits/posix_opt.h + mdp:/usr/include/bits/pthread_stack_min-dynamic.h + mdp:/usr/include/bits/pthreadtypes-arch.h + mdp:/usr/include/bits/pthreadtypes.h + mdp:/usr/include/bits/sched.h + mdp:/usr/include/bits/select.h + mdp:/usr/include/bits/setjmp.h + mdp:/usr/include/bits/stdint-intn.h + mdp:/usr/include/bits/stdint-least.h + mdp:/usr/include/bits/stdint-uintn.h + mdp:/usr/include/bits/stdio_lim.h + mdp:/usr/include/bits/stdlib-float.h + mdp:/usr/include/bits/struct_mutex.h + mdp:/usr/include/bits/struct_rwlock.h + mdp:/usr/include/bits/syscall.h + mdp:/usr/include/bits/thread-shared-types.h + mdp:/usr/include/bits/time.h + mdp:/usr/include/bits/time64.h + mdp:/usr/include/bits/timesize.h + mdp:/usr/include/bits/timex.h + mdp:/usr/include/bits/types.h + mdp:/usr/include/bits/types/FILE.h + mdp:/usr/include/bits/types/__FILE.h + mdp:/usr/include/bits/types/__fpos64_t.h + mdp:/usr/include/bits/types/__fpos_t.h + mdp:/usr/include/bits/types/__locale_t.h + mdp:/usr/include/bits/types/__mbstate_t.h + mdp:/usr/include/bits/types/__sigset_t.h + mdp:/usr/include/bits/types/clock_t.h + mdp:/usr/include/bits/types/clockid_t.h + mdp:/usr/include/bits/types/cookie_io_functions_t.h + mdp:/usr/include/bits/types/error_t.h + mdp:/usr/include/bits/types/locale_t.h + mdp:/usr/include/bits/types/mbstate_t.h + mdp:/usr/include/bits/types/sigset_t.h + mdp:/usr/include/bits/types/struct_FILE.h + mdp:/usr/include/bits/types/struct___jmp_buf_tag.h + mdp:/usr/include/bits/types/struct_itimerspec.h + mdp:/usr/include/bits/types/struct_sched_param.h + mdp:/usr/include/bits/types/struct_timespec.h + mdp:/usr/include/bits/types/struct_timeval.h + mdp:/usr/include/bits/types/struct_tm.h + mdp:/usr/include/bits/types/time_t.h + mdp:/usr/include/bits/types/timer_t.h + mdp:/usr/include/bits/types/wint_t.h + mdp:/usr/include/bits/typesizes.h + mdp:/usr/include/bits/uintn-identity.h + mdp:/usr/include/bits/uio_lim.h + mdp:/usr/include/bits/unistd_ext.h + mdp:/usr/include/bits/waitflags.h + mdp:/usr/include/bits/waitstatus.h + mdp:/usr/include/bits/wchar.h + mdp:/usr/include/bits/wctype-wchar.h + mdp:/usr/include/bits/wordsize.h + mdp:/usr/include/bits/xopen_lim.h + mdp:/usr/include/c++/15/algorithm + mdp:/usr/include/c++/15/array + mdp:/usr/include/c++/15/atomic + mdp:/usr/include/c++/15/backward/auto_ptr.h + mdp:/usr/include/c++/15/backward/binders.h + mdp:/usr/include/c++/15/bit + mdp:/usr/include/c++/15/bits/algorithmfwd.h + mdp:/usr/include/c++/15/bits/align.h + mdp:/usr/include/c++/15/bits/alloc_traits.h + mdp:/usr/include/c++/15/bits/allocated_ptr.h + mdp:/usr/include/c++/15/bits/allocator.h + mdp:/usr/include/c++/15/bits/atomic_base.h + mdp:/usr/include/c++/15/bits/atomic_lockfree_defines.h + mdp:/usr/include/c++/15/bits/atomic_wait.h + mdp:/usr/include/c++/15/bits/basic_ios.h + mdp:/usr/include/c++/15/bits/basic_ios.tcc + mdp:/usr/include/c++/15/bits/basic_string.h + mdp:/usr/include/c++/15/bits/basic_string.tcc + mdp:/usr/include/c++/15/bits/char_traits.h + mdp:/usr/include/c++/15/bits/charconv.h + mdp:/usr/include/c++/15/bits/chrono.h + mdp:/usr/include/c++/15/bits/chrono_io.h + mdp:/usr/include/c++/15/bits/codecvt.h + mdp:/usr/include/c++/15/bits/concept_check.h + mdp:/usr/include/c++/15/bits/cpp_type_traits.h + mdp:/usr/include/c++/15/bits/cxxabi_forced.h + mdp:/usr/include/c++/15/bits/cxxabi_init_exception.h + mdp:/usr/include/c++/15/bits/enable_special_members.h + mdp:/usr/include/c++/15/bits/erase_if.h + mdp:/usr/include/c++/15/bits/exception.h + mdp:/usr/include/c++/15/bits/exception_defines.h + mdp:/usr/include/c++/15/bits/exception_ptr.h + mdp:/usr/include/c++/15/bits/functexcept.h + mdp:/usr/include/c++/15/bits/functional_hash.h + mdp:/usr/include/c++/15/bits/hash_bytes.h + mdp:/usr/include/c++/15/bits/hashtable.h + mdp:/usr/include/c++/15/bits/hashtable_policy.h + mdp:/usr/include/c++/15/bits/invoke.h + mdp:/usr/include/c++/15/bits/ios_base.h + mdp:/usr/include/c++/15/bits/istream.tcc + mdp:/usr/include/c++/15/bits/iterator_concepts.h + mdp:/usr/include/c++/15/bits/list.tcc + mdp:/usr/include/c++/15/bits/locale_classes.h + mdp:/usr/include/c++/15/bits/locale_classes.tcc + mdp:/usr/include/c++/15/bits/locale_conv.h + mdp:/usr/include/c++/15/bits/locale_facets.h + mdp:/usr/include/c++/15/bits/locale_facets.tcc + mdp:/usr/include/c++/15/bits/locale_facets_nonio.h + mdp:/usr/include/c++/15/bits/locale_facets_nonio.tcc + mdp:/usr/include/c++/15/bits/localefwd.h + mdp:/usr/include/c++/15/bits/max_size_type.h + mdp:/usr/include/c++/15/bits/memory_resource.h + mdp:/usr/include/c++/15/bits/memoryfwd.h + mdp:/usr/include/c++/15/bits/move.h + mdp:/usr/include/c++/15/bits/nested_exception.h + mdp:/usr/include/c++/15/bits/new_allocator.h + mdp:/usr/include/c++/15/bits/node_handle.h + mdp:/usr/include/c++/15/bits/ostream.h + mdp:/usr/include/c++/15/bits/ostream.tcc + mdp:/usr/include/c++/15/bits/ostream_insert.h + mdp:/usr/include/c++/15/bits/parse_numbers.h + mdp:/usr/include/c++/15/bits/postypes.h + mdp:/usr/include/c++/15/bits/predefined_ops.h + mdp:/usr/include/c++/15/bits/ptr_traits.h + mdp:/usr/include/c++/15/bits/quoted_string.h + mdp:/usr/include/c++/15/bits/range_access.h + mdp:/usr/include/c++/15/bits/ranges_algo.h + mdp:/usr/include/c++/15/bits/ranges_algobase.h + mdp:/usr/include/c++/15/bits/ranges_base.h + mdp:/usr/include/c++/15/bits/ranges_cmp.h + mdp:/usr/include/c++/15/bits/ranges_uninitialized.h + mdp:/usr/include/c++/15/bits/ranges_util.h + mdp:/usr/include/c++/15/bits/refwrap.h + mdp:/usr/include/c++/15/bits/requires_hosted.h + mdp:/usr/include/c++/15/bits/shared_ptr.h + mdp:/usr/include/c++/15/bits/shared_ptr_atomic.h + mdp:/usr/include/c++/15/bits/shared_ptr_base.h + mdp:/usr/include/c++/15/bits/specfun.h + mdp:/usr/include/c++/15/bits/sstream.tcc + mdp:/usr/include/c++/15/bits/std_abs.h + mdp:/usr/include/c++/15/bits/std_function.h + mdp:/usr/include/c++/15/bits/std_mutex.h + mdp:/usr/include/c++/15/bits/stl_algo.h + mdp:/usr/include/c++/15/bits/stl_algobase.h + mdp:/usr/include/c++/15/bits/stl_bvector.h + mdp:/usr/include/c++/15/bits/stl_construct.h + mdp:/usr/include/c++/15/bits/stl_function.h + mdp:/usr/include/c++/15/bits/stl_heap.h + mdp:/usr/include/c++/15/bits/stl_iterator.h + mdp:/usr/include/c++/15/bits/stl_iterator_base_funcs.h + mdp:/usr/include/c++/15/bits/stl_iterator_base_types.h + mdp:/usr/include/c++/15/bits/stl_list.h + mdp:/usr/include/c++/15/bits/stl_map.h + mdp:/usr/include/c++/15/bits/stl_multimap.h + mdp:/usr/include/c++/15/bits/stl_numeric.h + mdp:/usr/include/c++/15/bits/stl_pair.h + mdp:/usr/include/c++/15/bits/stl_raw_storage_iter.h + mdp:/usr/include/c++/15/bits/stl_relops.h + mdp:/usr/include/c++/15/bits/stl_tempbuf.h + mdp:/usr/include/c++/15/bits/stl_tree.h + mdp:/usr/include/c++/15/bits/stl_uninitialized.h + mdp:/usr/include/c++/15/bits/stl_vector.h + mdp:/usr/include/c++/15/bits/stream_iterator.h + mdp:/usr/include/c++/15/bits/streambuf.tcc + mdp:/usr/include/c++/15/bits/streambuf_iterator.h + mdp:/usr/include/c++/15/bits/string_view.tcc + mdp:/usr/include/c++/15/bits/stringfwd.h + mdp:/usr/include/c++/15/bits/uniform_int_dist.h + mdp:/usr/include/c++/15/bits/unique_ptr.h + mdp:/usr/include/c++/15/bits/unordered_map.h + mdp:/usr/include/c++/15/bits/uses_allocator.h + mdp:/usr/include/c++/15/bits/uses_allocator_args.h + mdp:/usr/include/c++/15/bits/utility.h + mdp:/usr/include/c++/15/bits/vector.tcc + mdp:/usr/include/c++/15/bits/version.h + mdp:/usr/include/c++/15/cassert + mdp:/usr/include/c++/15/cctype + mdp:/usr/include/c++/15/cerrno + mdp:/usr/include/c++/15/charconv + mdp:/usr/include/c++/15/chrono + mdp:/usr/include/c++/15/climits + mdp:/usr/include/c++/15/clocale + mdp:/usr/include/c++/15/cmath + mdp:/usr/include/c++/15/compare + mdp:/usr/include/c++/15/concepts + mdp:/usr/include/c++/15/cstddef + mdp:/usr/include/c++/15/cstdint + mdp:/usr/include/c++/15/cstdio + mdp:/usr/include/c++/15/cstdlib + mdp:/usr/include/c++/15/cstring + mdp:/usr/include/c++/15/ctime + mdp:/usr/include/c++/15/cwchar + mdp:/usr/include/c++/15/cwctype + mdp:/usr/include/c++/15/debug/assertions.h + mdp:/usr/include/c++/15/debug/debug.h + mdp:/usr/include/c++/15/exception + mdp:/usr/include/c++/15/ext/aligned_buffer.h + mdp:/usr/include/c++/15/ext/alloc_traits.h + mdp:/usr/include/c++/15/ext/atomicity.h + mdp:/usr/include/c++/15/ext/concurrence.h + mdp:/usr/include/c++/15/ext/numeric_traits.h + mdp:/usr/include/c++/15/ext/string_conversions.h + mdp:/usr/include/c++/15/ext/type_traits.h + mdp:/usr/include/c++/15/format + mdp:/usr/include/c++/15/functional + mdp:/usr/include/c++/15/initializer_list + mdp:/usr/include/c++/15/iomanip + mdp:/usr/include/c++/15/ios + mdp:/usr/include/c++/15/iosfwd + mdp:/usr/include/c++/15/istream + mdp:/usr/include/c++/15/iterator + mdp:/usr/include/c++/15/limits + mdp:/usr/include/c++/15/list + mdp:/usr/include/c++/15/locale + mdp:/usr/include/c++/15/map + mdp:/usr/include/c++/15/memory + mdp:/usr/include/c++/15/new + mdp:/usr/include/c++/15/numeric + mdp:/usr/include/c++/15/optional + mdp:/usr/include/c++/15/ostream + mdp:/usr/include/c++/15/pstl/execution_defs.h + mdp:/usr/include/c++/15/pstl/glue_numeric_defs.h + mdp:/usr/include/c++/15/pstl/pstl_config.h + mdp:/usr/include/c++/15/ratio + mdp:/usr/include/c++/15/sstream + mdp:/usr/include/c++/15/stdexcept + mdp:/usr/include/c++/15/streambuf + mdp:/usr/include/c++/15/string + mdp:/usr/include/c++/15/string_view + mdp:/usr/include/c++/15/system_error + mdp:/usr/include/c++/15/tr1/bessel_function.tcc + mdp:/usr/include/c++/15/tr1/beta_function.tcc + mdp:/usr/include/c++/15/tr1/ell_integral.tcc + mdp:/usr/include/c++/15/tr1/exp_integral.tcc + mdp:/usr/include/c++/15/tr1/gamma.tcc + mdp:/usr/include/c++/15/tr1/hypergeometric.tcc + mdp:/usr/include/c++/15/tr1/legendre_function.tcc + mdp:/usr/include/c++/15/tr1/modified_bessel_func.tcc + mdp:/usr/include/c++/15/tr1/poly_hermite.tcc + mdp:/usr/include/c++/15/tr1/poly_laguerre.tcc + mdp:/usr/include/c++/15/tr1/riemann_zeta.tcc + mdp:/usr/include/c++/15/tr1/special_function_util.h + mdp:/usr/include/c++/15/tuple + mdp:/usr/include/c++/15/type_traits + mdp:/usr/include/c++/15/typeinfo + mdp:/usr/include/c++/15/unordered_map + mdp:/usr/include/c++/15/utility + mdp:/usr/include/c++/15/variant + mdp:/usr/include/c++/15/vector + mdp:/usr/include/c++/15/version + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/atomic_word.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++allocator.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++config.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++locale.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/cpu_defines.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/ctype_base.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/ctype_inline.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/error_constants.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/gthr-default.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/gthr.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/messages_members.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/os_defines.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/time_members.h + mdp:/usr/include/ctype.h + mdp:/usr/include/endian.h + mdp:/usr/include/errno.h + mdp:/usr/include/features-time64.h + mdp:/usr/include/features.h + mdp:/usr/include/gnu/stubs-64.h + mdp:/usr/include/gnu/stubs.h + mdp:/usr/include/libintl.h + mdp:/usr/include/limits.h + mdp:/usr/include/linux/close_range.h + mdp:/usr/include/linux/errno.h + mdp:/usr/include/linux/limits.h + mdp:/usr/include/linux/posix_types.h + mdp:/usr/include/linux/sched/types.h + mdp:/usr/include/linux/stddef.h + mdp:/usr/include/linux/types.h + mdp:/usr/include/locale.h + mdp:/usr/include/pthread.h + mdp:/usr/include/qt6/QtCore/QElapsedTimer + mdp:/usr/include/qt6/QtCore/QObject + mdp:/usr/include/qt6/QtCore/QProcess + mdp:/usr/include/qt6/QtCore/QStringList + mdp:/usr/include/qt6/QtCore/QVector + mdp:/usr/include/qt6/QtCore/q17memory.h + mdp:/usr/include/qt6/QtCore/q20functional.h + mdp:/usr/include/qt6/QtCore/q20iterator.h + mdp:/usr/include/qt6/QtCore/q20memory.h + mdp:/usr/include/qt6/QtCore/q20type_traits.h + mdp:/usr/include/qt6/QtCore/q23type_traits.h + mdp:/usr/include/qt6/QtCore/qalgorithms.h + mdp:/usr/include/qt6/QtCore/qanystringview.h + mdp:/usr/include/qt6/QtCore/qarraydata.h + mdp:/usr/include/qt6/QtCore/qarraydataops.h + mdp:/usr/include/qt6/QtCore/qarraydatapointer.h + mdp:/usr/include/qt6/QtCore/qassert.h + mdp:/usr/include/qt6/QtCore/qatomic.h + mdp:/usr/include/qt6/QtCore/qatomic_cxx11.h + mdp:/usr/include/qt6/QtCore/qbasicatomic.h + mdp:/usr/include/qt6/QtCore/qbindingstorage.h + mdp:/usr/include/qt6/QtCore/qbytearray.h + mdp:/usr/include/qt6/QtCore/qbytearrayalgorithms.h + mdp:/usr/include/qt6/QtCore/qbytearraylist.h + mdp:/usr/include/qt6/QtCore/qbytearrayview.h + mdp:/usr/include/qt6/QtCore/qchar.h + mdp:/usr/include/qt6/QtCore/qcompare.h + mdp:/usr/include/qt6/QtCore/qcompare_impl.h + mdp:/usr/include/qt6/QtCore/qcomparehelpers.h + mdp:/usr/include/qt6/QtCore/qcompilerdetection.h + mdp:/usr/include/qt6/QtCore/qconfig-64.h + mdp:/usr/include/qt6/QtCore/qconfig.h + mdp:/usr/include/qt6/QtCore/qconstructormacros.h + mdp:/usr/include/qt6/QtCore/qcontainerfwd.h + mdp:/usr/include/qt6/QtCore/qcontainerinfo.h + mdp:/usr/include/qt6/QtCore/qcontainertools_impl.h + mdp:/usr/include/qt6/QtCore/qdarwinhelpers.h + mdp:/usr/include/qt6/QtCore/qdatastream.h + mdp:/usr/include/qt6/QtCore/qelapsedtimer.h + mdp:/usr/include/qt6/QtCore/qexceptionhandling.h + mdp:/usr/include/qt6/QtCore/qflags.h + mdp:/usr/include/qt6/QtCore/qfloat16.h + mdp:/usr/include/qt6/QtCore/qforeach.h + mdp:/usr/include/qt6/QtCore/qfunctionaltools_impl.h + mdp:/usr/include/qt6/QtCore/qfunctionpointer.h + mdp:/usr/include/qt6/QtCore/qgenericatomic.h + mdp:/usr/include/qt6/QtCore/qglobal.h + mdp:/usr/include/qt6/QtCore/qglobalstatic.h + mdp:/usr/include/qt6/QtCore/qhashfunctions.h + mdp:/usr/include/qt6/QtCore/qiodevice.h + mdp:/usr/include/qt6/QtCore/qiodevicebase.h + mdp:/usr/include/qt6/QtCore/qiterable.h + mdp:/usr/include/qt6/QtCore/qiterator.h + mdp:/usr/include/qt6/QtCore/qlatin1stringview.h + mdp:/usr/include/qt6/QtCore/qlist.h + mdp:/usr/include/qt6/QtCore/qlogging.h + mdp:/usr/include/qt6/QtCore/qmalloc.h + mdp:/usr/include/qt6/QtCore/qmath.h + mdp:/usr/include/qt6/QtCore/qmetacontainer.h + mdp:/usr/include/qt6/QtCore/qmetatype.h + mdp:/usr/include/qt6/QtCore/qminmax.h + mdp:/usr/include/qt6/QtCore/qnamespace.h + mdp:/usr/include/qt6/QtCore/qnumeric.h + mdp:/usr/include/qt6/QtCore/qobject.h + mdp:/usr/include/qt6/QtCore/qobject_impl.h + mdp:/usr/include/qt6/QtCore/qobjectdefs.h + mdp:/usr/include/qt6/QtCore/qobjectdefs_impl.h + mdp:/usr/include/qt6/QtCore/qoverload.h + mdp:/usr/include/qt6/QtCore/qpair.h + mdp:/usr/include/qt6/QtCore/qprocess.h + mdp:/usr/include/qt6/QtCore/qprocessordetection.h + mdp:/usr/include/qt6/QtCore/qrefcount.h + mdp:/usr/include/qt6/QtCore/qscopedpointer.h + mdp:/usr/include/qt6/QtCore/qscopeguard.h + mdp:/usr/include/qt6/QtCore/qshareddata.h + mdp:/usr/include/qt6/QtCore/qspan.h + mdp:/usr/include/qt6/QtCore/qstdlibdetection.h + mdp:/usr/include/qt6/QtCore/qstring.h + mdp:/usr/include/qt6/QtCore/qstringalgorithms.h + mdp:/usr/include/qt6/QtCore/qstringbuilder.h + mdp:/usr/include/qt6/QtCore/qstringconverter.h + mdp:/usr/include/qt6/QtCore/qstringconverter_base.h + mdp:/usr/include/qt6/QtCore/qstringfwd.h + mdp:/usr/include/qt6/QtCore/qstringlist.h + mdp:/usr/include/qt6/QtCore/qstringmatcher.h + mdp:/usr/include/qt6/QtCore/qstringtokenizer.h + mdp:/usr/include/qt6/QtCore/qstringview.h + mdp:/usr/include/qt6/QtCore/qswap.h + mdp:/usr/include/qt6/QtCore/qsysinfo.h + mdp:/usr/include/qt6/QtCore/qsystemdetection.h + mdp:/usr/include/qt6/QtCore/qtaggedpointer.h + mdp:/usr/include/qt6/QtCore/qtclasshelpermacros.h + mdp:/usr/include/qt6/QtCore/qtconfiginclude.h + mdp:/usr/include/qt6/QtCore/qtconfigmacros.h + mdp:/usr/include/qt6/QtCore/qtcore-config.h + mdp:/usr/include/qt6/QtCore/qtcoreexports.h + mdp:/usr/include/qt6/QtCore/qtcoreglobal.h + mdp:/usr/include/qt6/QtCore/qtdeprecationdefinitions.h + mdp:/usr/include/qt6/QtCore/qtdeprecationmarkers.h + mdp:/usr/include/qt6/QtCore/qtenvironmentvariables.h + mdp:/usr/include/qt6/QtCore/qtformat_impl.h + mdp:/usr/include/qt6/QtCore/qtmetamacros.h + mdp:/usr/include/qt6/QtCore/qtnoop.h + mdp:/usr/include/qt6/QtCore/qtpreprocessorsupport.h + mdp:/usr/include/qt6/QtCore/qtresource.h + mdp:/usr/include/qt6/QtCore/qttranslation.h + mdp:/usr/include/qt6/QtCore/qttypetraits.h + mdp:/usr/include/qt6/QtCore/qtversion.h + mdp:/usr/include/qt6/QtCore/qtversionchecks.h + mdp:/usr/include/qt6/QtCore/qtypeinfo.h + mdp:/usr/include/qt6/QtCore/qtypes.h + mdp:/usr/include/qt6/QtCore/qutf8stringview.h + mdp:/usr/include/qt6/QtCore/qvector.h + mdp:/usr/include/qt6/QtCore/qversiontagging.h + mdp:/usr/include/qt6/QtCore/qxptype_traits.h + mdp:/usr/include/qt6/QtCore/qyieldcpu.h + mdp:/usr/include/sched.h + mdp:/usr/include/stdc-predef.h + mdp:/usr/include/stdint.h + mdp:/usr/include/stdio.h + mdp:/usr/include/stdlib.h + mdp:/usr/include/string.h + mdp:/usr/include/strings.h + mdp:/usr/include/sys/cdefs.h + mdp:/usr/include/sys/select.h + mdp:/usr/include/sys/single_threaded.h + mdp:/usr/include/sys/syscall.h + mdp:/usr/include/sys/types.h + mdp:/usr/include/syscall.h + mdp:/usr/include/time.h + mdp:/usr/include/unistd.h + mdp:/usr/include/wchar.h + mdp:/usr/include/wctype.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stdarg.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stdbool.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stddef.h diff --git a/build-linux/tests/CMakeFiles/test_models.dir/__/src/assets_model.cpp.o b/build-linux/tests/CMakeFiles/test_models.dir/__/src/assets_model.cpp.o new file mode 100644 index 00000000..9585b565 Binary files /dev/null and b/build-linux/tests/CMakeFiles/test_models.dir/__/src/assets_model.cpp.o differ diff --git a/build-linux/tests/CMakeFiles/test_models.dir/__/src/db.cpp.o b/build-linux/tests/CMakeFiles/test_models.dir/__/src/db.cpp.o new file mode 100644 index 00000000..db945ab6 Binary files /dev/null and b/build-linux/tests/CMakeFiles/test_models.dir/__/src/db.cpp.o differ diff --git a/build-linux/tests/CMakeFiles/test_models.dir/__/src/log_manager.cpp.o b/build-linux/tests/CMakeFiles/test_models.dir/__/src/log_manager.cpp.o new file mode 100644 index 00000000..c74d4040 Binary files /dev/null and b/build-linux/tests/CMakeFiles/test_models.dir/__/src/log_manager.cpp.o differ diff --git a/build-linux/tests/CMakeFiles/test_models.dir/test_models.cpp.o b/build-linux/tests/CMakeFiles/test_models.dir/test_models.cpp.o new file mode 100644 index 00000000..f8eb7b79 Binary files /dev/null and b/build-linux/tests/CMakeFiles/test_models.dir/test_models.cpp.o differ diff --git a/build-linux/tests/CMakeFiles/test_models.dir/test_models_autogen/mocs_compilation.cpp.o b/build-linux/tests/CMakeFiles/test_models.dir/test_models_autogen/mocs_compilation.cpp.o new file mode 100644 index 00000000..14fb5805 Binary files /dev/null and b/build-linux/tests/CMakeFiles/test_models.dir/test_models_autogen/mocs_compilation.cpp.o differ diff --git a/build-linux/tests/CMakeFiles/test_models_autogen.dir/AutogenInfo.json b/build-linux/tests/CMakeFiles/test_models_autogen.dir/AutogenInfo.json new file mode 100644 index 00000000..03bbd548 --- /dev/null +++ b/build-linux/tests/CMakeFiles/test_models_autogen.dir/AutogenInfo.json @@ -0,0 +1,214 @@ +{ + "BUILD_DIR" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_models_autogen", + "CMAKE_BINARY_DIR" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux", + "CMAKE_CURRENT_BINARY_DIR" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests", + "CMAKE_CURRENT_SOURCE_DIR" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests", + "CMAKE_EXECUTABLE" : "/usr/bin/cmake", + "CMAKE_LIST_FILES" : + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/CMakeLists.txt", + "/usr/lib64/cmake/Qt6/Qt6ConfigVersion.cmake", + "/usr/lib64/cmake/Qt6/Qt6ConfigVersionImpl.cmake", + "/usr/lib64/cmake/Qt6/Qt6Config.cmake", + "/usr/lib64/cmake/Qt6/QtPublicCMakeEarlyPolicyHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicCMakeHelpers.cmake", + "/usr/lib64/cmake/Qt6/Qt6ConfigExtras.cmake", + "/usr/lib64/cmake/Qt6/QtPublicCMakeVersionHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtInstallPaths.cmake", + "/usr/lib64/cmake/Qt6/Qt6Targets.cmake", + "/usr/lib64/cmake/Qt6/Qt6VersionlessAliasTargets.cmake", + "/usr/lib64/cmake/Qt6/QtFeature.cmake", + "/usr/share/cmake/Modules/CheckCXXCompilerFlag.cmake", + "/usr/lib64/cmake/Qt6/QtFeatureCommon.cmake", + "/usr/lib64/cmake/Qt6/QtPublicAndroidHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicAppleHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicCMakeHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicCMakeVersionHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicDependencyHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicExternalProjectHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicFinalizerHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicFindPackageHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicGitHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicPluginHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicPluginHelpers_v2.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomAttributionHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomBuildToolHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomCommonGenerationHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomCpeHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomCycloneDXHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomDocumentNamespaceHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomDepHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomExternalReferenceHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomFileHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomGenerationHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomGenerationCycloneDXHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomLicenseHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomOpsHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomPurlHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomPythonHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomQtEntityHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomRelationshipHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomSystemDepHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicTargetHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicTestHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicToolHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicWalkLibsHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicWindowsHelpers.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6/Qt6Dependencies.cmake", + "/usr/lib64/cmake/Qt6Test/Qt6TestConfigVersion.cmake", + "/usr/lib64/cmake/Qt6Test/Qt6TestConfigVersionImpl.cmake", + "/usr/lib64/cmake/Qt6Test/Qt6TestConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6Test/Qt6TestDependencies.cmake", + "/usr/lib64/cmake/Qt6Test/Qt6TestTargets.cmake", + "/usr/lib64/cmake/Qt6Test/Qt6TestTargets-relwithdebinfo.cmake", + "/usr/lib64/cmake/Qt6Test/Qt6TestAdditionalTargetInfo.cmake", + "/usr/lib64/cmake/Qt6Test/QtTestProperties.cmake", + "/usr/lib64/cmake/Qt6Test/Qt6TestVersionlessAliasTargets.cmake" + ], + "CMAKE_SOURCE_DIR" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6", + "CROSS_CONFIG" : false, + "DEP_FILE" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_models_autogen/deps", + "DEP_FILE_RULE_NAME" : "test_models_autogen/timestamp", + "HEADERS" : + [ + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/assets_model.h", + "MU", + "VNU7RW3YIC/moc_assets_model.cpp", + null + ], + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/db.h", + "MU", + "VNU7RW3YIC/moc_db.cpp", + null + ], + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/log_manager.h", + "MU", + "VNU7RW3YIC/moc_log_manager.cpp", + null + ] + ], + "HEADER_EXTENSIONS" : [ "h", "hh", "h++", "hm", "hpp", "hxx", "in", "txx" ], + "INCLUDE_DIR" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_models_autogen/include", + "MOC_COMPILATION_FILE" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_models_autogen/mocs_compilation.cpp", + "MOC_DEFINITIONS" : + [ + "FTK_API_GL_4_1", + "QT_CORE_LIB", + "QT_GUI_LIB", + "QT_NO_DEBUG", + "QT_SQL_LIB", + "QT_TESTCASE_BUILDDIR=\"/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests\"", + "QT_TESTCASE_SOURCEDIR=\"/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests\"", + "QT_TESTLIB_LIB", + "QT_WIDGETS_LIB", + "TLRENDER_EXR", + "TLRENDER_FFMPEG", + "TLRENDER_FFMPEG_PLUGIN", + "TLRENDER_JPEG", + "TLRENDER_OCIO", + "TLRENDER_OIIO", + "TLRENDER_PNG", + "TLRENDER_SDL2", + "TLRENDER_TIFF" + ], + "MOC_DEPEND_FILTERS" : + [ + [ + "Q_PLUGIN_METADATA", + "[\n][ \t]*Q_PLUGIN_METADATA[ \t]*\\([^\\)]*FILE[ \t]*\"([^\"]+)\"" + ] + ], + "MOC_INCLUDES" : + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src", + "/usr/include/qt6/QtTest", + "/usr/include/qt6", + "/usr/include/qt6/QtCore", + "/usr/lib64/qt6/mkspecs/linux-g++", + "/usr/include/qt6/QtSql", + "/usr/include/qt6/QtWidgets", + "/usr/include/qt6/QtGui", + "/usr/include", + "/usr/include/c++/15", + "/usr/include/c++/15/x86_64-redhat-linux", + "/usr/include/c++/15/backward", + "/usr/lib/gcc/x86_64-redhat-linux/15/include", + "/usr/local/include" + ], + "MOC_MACRO_NAMES" : + [ + "Q_OBJECT", + "Q_GADGET", + "Q_NAMESPACE", + "Q_NAMESPACE_EXPORT", + "Q_GADGET_EXPORT", + "Q_ENUM_NS" + ], + "MOC_OPTIONS" : [], + "MOC_PATH_PREFIX" : false, + "MOC_PREDEFS_CMD" : + [ + "/usr/bin/c++", + "-std=gnu++20", + "-w", + "-dM", + "-E", + "/usr/share/cmake/Modules/CMakeCXXCompilerABI.cpp" + ], + "MOC_PREDEFS_FILE" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_models_autogen/moc_predefs.h", + "MOC_RELAXED_MODE" : false, + "MOC_SKIP" : + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_db_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_simple_autogen/mocs_compilation.cpp" + ], + "MULTI_CONFIG" : false, + "PARALLEL" : 16, + "PARSE_CACHE_FILE" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/CMakeFiles/test_models_autogen.dir/ParseCache.txt", + "QT_MOC_EXECUTABLE" : "/usr/lib64/qt6/libexec/moc", + "QT_UIC_EXECUTABLE" : "/usr/lib64/qt6/libexec/uic", + "QT_VERSION_MAJOR" : 6, + "QT_VERSION_MINOR" : 10, + "SETTINGS_FILE" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/CMakeFiles/test_models_autogen.dir/AutogenUsed.txt", + "SOURCES" : + [ + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/assets_model.cpp", + "MU", + null + ], + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/db.cpp", + "MU", + null + ], + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/log_manager.cpp", + "MU", + null + ], + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/test_models.cpp", + "MU", + null + ] + ], + "UIC_OPTIONS" : [], + "UIC_SEARCH_PATHS" : [], + "UIC_SKIP" : + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_db_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_simple_autogen/mocs_compilation.cpp" + ], + "UIC_UI_FILES" : [], + "USE_BETTER_GRAPH" : true, + "VERBOSITY" : 0 +} diff --git a/build-linux/tests/CMakeFiles/test_models_autogen.dir/AutogenUsed.txt b/build-linux/tests/CMakeFiles/test_models_autogen.dir/AutogenUsed.txt new file mode 100644 index 00000000..fb07ad1b --- /dev/null +++ b/build-linux/tests/CMakeFiles/test_models_autogen.dir/AutogenUsed.txt @@ -0,0 +1,2 @@ +moc:619a6fb05a1cdd0fae4708f88ac3504163a46186c3502dbdf3690ac43fcfe648 +uic:0df7b06f04b60705a14ff966fc10725af0fb193398324deeaf17e44a5f9db1e0 diff --git a/build-linux/tests/CMakeFiles/test_models_autogen.dir/ParseCache.txt b/build-linux/tests/CMakeFiles/test_models_autogen.dir/ParseCache.txt new file mode 100644 index 00000000..b9bad774 --- /dev/null +++ b/build-linux/tests/CMakeFiles/test_models_autogen.dir/ParseCache.txt @@ -0,0 +1,2358 @@ +# Generated by CMake. Changes will be overwritten. +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/test_models.cpp + mmc:Q_OBJECT + mid:test_models.moc + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_models_autogen/moc_predefs.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/assets_model.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/db.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/i_asset_database.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/test_models.cpp + mdp:/usr/include/alloca.h + mdp:/usr/include/asm-generic/bitsperlong.h + mdp:/usr/include/asm-generic/errno-base.h + mdp:/usr/include/asm-generic/errno.h + mdp:/usr/include/asm-generic/int-ll64.h + mdp:/usr/include/asm-generic/posix_types.h + mdp:/usr/include/asm-generic/types.h + mdp:/usr/include/asm/bitsperlong.h + mdp:/usr/include/asm/errno.h + mdp:/usr/include/asm/posix_types.h + mdp:/usr/include/asm/posix_types_64.h + mdp:/usr/include/asm/types.h + mdp:/usr/include/asm/unistd.h + mdp:/usr/include/asm/unistd_64.h + mdp:/usr/include/assert.h + mdp:/usr/include/bits/atomic_wide_counter.h + mdp:/usr/include/bits/byteswap.h + mdp:/usr/include/bits/confname.h + mdp:/usr/include/bits/cpu-set.h + mdp:/usr/include/bits/endian.h + mdp:/usr/include/bits/endianness.h + mdp:/usr/include/bits/environments.h + mdp:/usr/include/bits/errno.h + mdp:/usr/include/bits/floatn-common.h + mdp:/usr/include/bits/floatn.h + mdp:/usr/include/bits/getopt_core.h + mdp:/usr/include/bits/getopt_posix.h + mdp:/usr/include/bits/libc-header-start.h + mdp:/usr/include/bits/local_lim.h + mdp:/usr/include/bits/locale.h + mdp:/usr/include/bits/long-double.h + mdp:/usr/include/bits/posix1_lim.h + mdp:/usr/include/bits/posix2_lim.h + mdp:/usr/include/bits/posix_opt.h + mdp:/usr/include/bits/pthread_stack_min-dynamic.h + mdp:/usr/include/bits/pthreadtypes-arch.h + mdp:/usr/include/bits/pthreadtypes.h + mdp:/usr/include/bits/sched.h + mdp:/usr/include/bits/select.h + mdp:/usr/include/bits/semaphore.h + mdp:/usr/include/bits/setjmp.h + mdp:/usr/include/bits/stdint-intn.h + mdp:/usr/include/bits/stdint-least.h + mdp:/usr/include/bits/stdint-uintn.h + mdp:/usr/include/bits/stdio_lim.h + mdp:/usr/include/bits/stdlib-float.h + mdp:/usr/include/bits/struct_mutex.h + mdp:/usr/include/bits/struct_rwlock.h + mdp:/usr/include/bits/syscall.h + mdp:/usr/include/bits/thread-shared-types.h + mdp:/usr/include/bits/time.h + mdp:/usr/include/bits/time64.h + mdp:/usr/include/bits/timesize.h + mdp:/usr/include/bits/timex.h + mdp:/usr/include/bits/types.h + mdp:/usr/include/bits/types/FILE.h + mdp:/usr/include/bits/types/__FILE.h + mdp:/usr/include/bits/types/__fpos64_t.h + mdp:/usr/include/bits/types/__fpos_t.h + mdp:/usr/include/bits/types/__locale_t.h + mdp:/usr/include/bits/types/__mbstate_t.h + mdp:/usr/include/bits/types/__sigset_t.h + mdp:/usr/include/bits/types/clock_t.h + mdp:/usr/include/bits/types/clockid_t.h + mdp:/usr/include/bits/types/cookie_io_functions_t.h + mdp:/usr/include/bits/types/error_t.h + mdp:/usr/include/bits/types/locale_t.h + mdp:/usr/include/bits/types/mbstate_t.h + mdp:/usr/include/bits/types/sigset_t.h + mdp:/usr/include/bits/types/struct_FILE.h + mdp:/usr/include/bits/types/struct___jmp_buf_tag.h + mdp:/usr/include/bits/types/struct_itimerspec.h + mdp:/usr/include/bits/types/struct_sched_param.h + mdp:/usr/include/bits/types/struct_timespec.h + mdp:/usr/include/bits/types/struct_timeval.h + mdp:/usr/include/bits/types/struct_tm.h + mdp:/usr/include/bits/types/time_t.h + mdp:/usr/include/bits/types/timer_t.h + mdp:/usr/include/bits/types/wint_t.h + mdp:/usr/include/bits/typesizes.h + mdp:/usr/include/bits/uintn-identity.h + mdp:/usr/include/bits/uio_lim.h + mdp:/usr/include/bits/unistd_ext.h + mdp:/usr/include/bits/waitflags.h + mdp:/usr/include/bits/waitstatus.h + mdp:/usr/include/bits/wchar.h + mdp:/usr/include/bits/wctype-wchar.h + mdp:/usr/include/bits/wordsize.h + mdp:/usr/include/bits/xopen_lim.h + mdp:/usr/include/c++/15/algorithm + mdp:/usr/include/c++/15/array + mdp:/usr/include/c++/15/atomic + mdp:/usr/include/c++/15/backward/auto_ptr.h + mdp:/usr/include/c++/15/backward/binders.h + mdp:/usr/include/c++/15/bit + mdp:/usr/include/c++/15/bits/algorithmfwd.h + mdp:/usr/include/c++/15/bits/align.h + mdp:/usr/include/c++/15/bits/alloc_traits.h + mdp:/usr/include/c++/15/bits/allocated_ptr.h + mdp:/usr/include/c++/15/bits/allocator.h + mdp:/usr/include/c++/15/bits/atomic_base.h + mdp:/usr/include/c++/15/bits/atomic_futex.h + mdp:/usr/include/c++/15/bits/atomic_lockfree_defines.h + mdp:/usr/include/c++/15/bits/atomic_timed_wait.h + mdp:/usr/include/c++/15/bits/atomic_wait.h + mdp:/usr/include/c++/15/bits/basic_ios.h + mdp:/usr/include/c++/15/bits/basic_ios.tcc + mdp:/usr/include/c++/15/bits/basic_string.h + mdp:/usr/include/c++/15/bits/basic_string.tcc + mdp:/usr/include/c++/15/bits/char_traits.h + mdp:/usr/include/c++/15/bits/charconv.h + mdp:/usr/include/c++/15/bits/chrono.h + mdp:/usr/include/c++/15/bits/chrono_io.h + mdp:/usr/include/c++/15/bits/codecvt.h + mdp:/usr/include/c++/15/bits/concept_check.h + mdp:/usr/include/c++/15/bits/cpp_type_traits.h + mdp:/usr/include/c++/15/bits/cxxabi_forced.h + mdp:/usr/include/c++/15/bits/cxxabi_init_exception.h + mdp:/usr/include/c++/15/bits/enable_special_members.h + mdp:/usr/include/c++/15/bits/erase_if.h + mdp:/usr/include/c++/15/bits/exception.h + mdp:/usr/include/c++/15/bits/exception_defines.h + mdp:/usr/include/c++/15/bits/exception_ptr.h + mdp:/usr/include/c++/15/bits/functexcept.h + mdp:/usr/include/c++/15/bits/functional_hash.h + mdp:/usr/include/c++/15/bits/hash_bytes.h + mdp:/usr/include/c++/15/bits/hashtable.h + mdp:/usr/include/c++/15/bits/hashtable_policy.h + mdp:/usr/include/c++/15/bits/invoke.h + mdp:/usr/include/c++/15/bits/ios_base.h + mdp:/usr/include/c++/15/bits/istream.tcc + mdp:/usr/include/c++/15/bits/iterator_concepts.h + mdp:/usr/include/c++/15/bits/list.tcc + mdp:/usr/include/c++/15/bits/locale_classes.h + mdp:/usr/include/c++/15/bits/locale_classes.tcc + mdp:/usr/include/c++/15/bits/locale_conv.h + mdp:/usr/include/c++/15/bits/locale_facets.h + mdp:/usr/include/c++/15/bits/locale_facets.tcc + mdp:/usr/include/c++/15/bits/locale_facets_nonio.h + mdp:/usr/include/c++/15/bits/locale_facets_nonio.tcc + mdp:/usr/include/c++/15/bits/localefwd.h + mdp:/usr/include/c++/15/bits/max_size_type.h + mdp:/usr/include/c++/15/bits/memory_resource.h + mdp:/usr/include/c++/15/bits/memoryfwd.h + mdp:/usr/include/c++/15/bits/move.h + mdp:/usr/include/c++/15/bits/nested_exception.h + mdp:/usr/include/c++/15/bits/new_allocator.h + mdp:/usr/include/c++/15/bits/node_handle.h + mdp:/usr/include/c++/15/bits/ostream.h + mdp:/usr/include/c++/15/bits/ostream.tcc + mdp:/usr/include/c++/15/bits/ostream_insert.h + mdp:/usr/include/c++/15/bits/parse_numbers.h + mdp:/usr/include/c++/15/bits/postypes.h + mdp:/usr/include/c++/15/bits/predefined_ops.h + mdp:/usr/include/c++/15/bits/ptr_traits.h + mdp:/usr/include/c++/15/bits/quoted_string.h + mdp:/usr/include/c++/15/bits/random.h + mdp:/usr/include/c++/15/bits/random.tcc + mdp:/usr/include/c++/15/bits/range_access.h + mdp:/usr/include/c++/15/bits/ranges_algo.h + mdp:/usr/include/c++/15/bits/ranges_algobase.h + mdp:/usr/include/c++/15/bits/ranges_base.h + mdp:/usr/include/c++/15/bits/ranges_cmp.h + mdp:/usr/include/c++/15/bits/ranges_uninitialized.h + mdp:/usr/include/c++/15/bits/ranges_util.h + mdp:/usr/include/c++/15/bits/refwrap.h + mdp:/usr/include/c++/15/bits/requires_hosted.h + mdp:/usr/include/c++/15/bits/semaphore_base.h + mdp:/usr/include/c++/15/bits/shared_ptr.h + mdp:/usr/include/c++/15/bits/shared_ptr_atomic.h + mdp:/usr/include/c++/15/bits/shared_ptr_base.h + mdp:/usr/include/c++/15/bits/specfun.h + mdp:/usr/include/c++/15/bits/sstream.tcc + mdp:/usr/include/c++/15/bits/std_abs.h + mdp:/usr/include/c++/15/bits/std_function.h + mdp:/usr/include/c++/15/bits/std_mutex.h + mdp:/usr/include/c++/15/bits/std_thread.h + mdp:/usr/include/c++/15/bits/stl_algo.h + mdp:/usr/include/c++/15/bits/stl_algobase.h + mdp:/usr/include/c++/15/bits/stl_bvector.h + mdp:/usr/include/c++/15/bits/stl_construct.h + mdp:/usr/include/c++/15/bits/stl_function.h + mdp:/usr/include/c++/15/bits/stl_heap.h + mdp:/usr/include/c++/15/bits/stl_iterator.h + mdp:/usr/include/c++/15/bits/stl_iterator_base_funcs.h + mdp:/usr/include/c++/15/bits/stl_iterator_base_types.h + mdp:/usr/include/c++/15/bits/stl_list.h + mdp:/usr/include/c++/15/bits/stl_map.h + mdp:/usr/include/c++/15/bits/stl_multimap.h + mdp:/usr/include/c++/15/bits/stl_multiset.h + mdp:/usr/include/c++/15/bits/stl_numeric.h + mdp:/usr/include/c++/15/bits/stl_pair.h + mdp:/usr/include/c++/15/bits/stl_raw_storage_iter.h + mdp:/usr/include/c++/15/bits/stl_relops.h + mdp:/usr/include/c++/15/bits/stl_set.h + mdp:/usr/include/c++/15/bits/stl_tempbuf.h + mdp:/usr/include/c++/15/bits/stl_tree.h + mdp:/usr/include/c++/15/bits/stl_uninitialized.h + mdp:/usr/include/c++/15/bits/stl_vector.h + mdp:/usr/include/c++/15/bits/stream_iterator.h + mdp:/usr/include/c++/15/bits/streambuf.tcc + mdp:/usr/include/c++/15/bits/streambuf_iterator.h + mdp:/usr/include/c++/15/bits/string_view.tcc + mdp:/usr/include/c++/15/bits/stringfwd.h + mdp:/usr/include/c++/15/bits/this_thread_sleep.h + mdp:/usr/include/c++/15/bits/uniform_int_dist.h + mdp:/usr/include/c++/15/bits/unique_lock.h + mdp:/usr/include/c++/15/bits/unique_ptr.h + mdp:/usr/include/c++/15/bits/unordered_map.h + mdp:/usr/include/c++/15/bits/unordered_set.h + mdp:/usr/include/c++/15/bits/uses_allocator.h + mdp:/usr/include/c++/15/bits/uses_allocator_args.h + mdp:/usr/include/c++/15/bits/utility.h + mdp:/usr/include/c++/15/bits/vector.tcc + mdp:/usr/include/c++/15/bits/version.h + mdp:/usr/include/c++/15/cassert + mdp:/usr/include/c++/15/cctype + mdp:/usr/include/c++/15/cerrno + mdp:/usr/include/c++/15/charconv + mdp:/usr/include/c++/15/chrono + mdp:/usr/include/c++/15/climits + mdp:/usr/include/c++/15/clocale + mdp:/usr/include/c++/15/cmath + mdp:/usr/include/c++/15/compare + mdp:/usr/include/c++/15/concepts + mdp:/usr/include/c++/15/condition_variable + mdp:/usr/include/c++/15/cstddef + mdp:/usr/include/c++/15/cstdint + mdp:/usr/include/c++/15/cstdio + mdp:/usr/include/c++/15/cstdlib + mdp:/usr/include/c++/15/cstring + mdp:/usr/include/c++/15/ctime + mdp:/usr/include/c++/15/cwchar + mdp:/usr/include/c++/15/cwctype + mdp:/usr/include/c++/15/debug/assertions.h + mdp:/usr/include/c++/15/debug/debug.h + mdp:/usr/include/c++/15/exception + mdp:/usr/include/c++/15/experimental/source_location + mdp:/usr/include/c++/15/ext/aligned_buffer.h + mdp:/usr/include/c++/15/ext/alloc_traits.h + mdp:/usr/include/c++/15/ext/atomicity.h + mdp:/usr/include/c++/15/ext/concurrence.h + mdp:/usr/include/c++/15/ext/numeric_traits.h + mdp:/usr/include/c++/15/ext/string_conversions.h + mdp:/usr/include/c++/15/ext/type_traits.h + mdp:/usr/include/c++/15/filesystem + mdp:/usr/include/c++/15/format + mdp:/usr/include/c++/15/functional + mdp:/usr/include/c++/15/future + mdp:/usr/include/c++/15/initializer_list + mdp:/usr/include/c++/15/iomanip + mdp:/usr/include/c++/15/ios + mdp:/usr/include/c++/15/iosfwd + mdp:/usr/include/c++/15/istream + mdp:/usr/include/c++/15/iterator + mdp:/usr/include/c++/15/limits + mdp:/usr/include/c++/15/list + mdp:/usr/include/c++/15/locale + mdp:/usr/include/c++/15/map + mdp:/usr/include/c++/15/memory + mdp:/usr/include/c++/15/memory_resource + mdp:/usr/include/c++/15/mutex + mdp:/usr/include/c++/15/new + mdp:/usr/include/c++/15/numeric + mdp:/usr/include/c++/15/optional + mdp:/usr/include/c++/15/ostream + mdp:/usr/include/c++/15/pstl/execution_defs.h + mdp:/usr/include/c++/15/pstl/glue_numeric_defs.h + mdp:/usr/include/c++/15/pstl/pstl_config.h + mdp:/usr/include/c++/15/random + mdp:/usr/include/c++/15/ratio + mdp:/usr/include/c++/15/semaphore + mdp:/usr/include/c++/15/set + mdp:/usr/include/c++/15/shared_mutex + mdp:/usr/include/c++/15/source_location + mdp:/usr/include/c++/15/sstream + mdp:/usr/include/c++/15/stdexcept + mdp:/usr/include/c++/15/stop_token + mdp:/usr/include/c++/15/streambuf + mdp:/usr/include/c++/15/string + mdp:/usr/include/c++/15/string_view + mdp:/usr/include/c++/15/system_error + mdp:/usr/include/c++/15/tr1/bessel_function.tcc + mdp:/usr/include/c++/15/tr1/beta_function.tcc + mdp:/usr/include/c++/15/tr1/ell_integral.tcc + mdp:/usr/include/c++/15/tr1/exp_integral.tcc + mdp:/usr/include/c++/15/tr1/gamma.tcc + mdp:/usr/include/c++/15/tr1/hypergeometric.tcc + mdp:/usr/include/c++/15/tr1/legendre_function.tcc + mdp:/usr/include/c++/15/tr1/modified_bessel_func.tcc + mdp:/usr/include/c++/15/tr1/poly_hermite.tcc + mdp:/usr/include/c++/15/tr1/poly_laguerre.tcc + mdp:/usr/include/c++/15/tr1/riemann_zeta.tcc + mdp:/usr/include/c++/15/tr1/special_function_util.h + mdp:/usr/include/c++/15/tuple + mdp:/usr/include/c++/15/type_traits + mdp:/usr/include/c++/15/typeinfo + mdp:/usr/include/c++/15/unordered_map + mdp:/usr/include/c++/15/unordered_set + mdp:/usr/include/c++/15/utility + mdp:/usr/include/c++/15/variant + mdp:/usr/include/c++/15/vector + mdp:/usr/include/c++/15/version + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/atomic_word.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++allocator.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++config.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++locale.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/cpu_defines.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/ctype_base.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/ctype_inline.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/error_constants.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/gthr-default.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/gthr.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/messages_members.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/opt_random.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/os_defines.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/time_members.h + mdp:/usr/include/ctype.h + mdp:/usr/include/endian.h + mdp:/usr/include/errno.h + mdp:/usr/include/features-time64.h + mdp:/usr/include/features.h + mdp:/usr/include/gnu/stubs-64.h + mdp:/usr/include/gnu/stubs.h + mdp:/usr/include/libintl.h + mdp:/usr/include/limits.h + mdp:/usr/include/linux/close_range.h + mdp:/usr/include/linux/errno.h + mdp:/usr/include/linux/limits.h + mdp:/usr/include/linux/posix_types.h + mdp:/usr/include/linux/sched/types.h + mdp:/usr/include/linux/stddef.h + mdp:/usr/include/linux/types.h + mdp:/usr/include/locale.h + mdp:/usr/include/pthread.h + mdp:/usr/include/qt6/QtCore/QAbstractItemModel + mdp:/usr/include/qt6/QtCore/QAbstractListModel + mdp:/usr/include/qt6/QtCore/QDateTime + mdp:/usr/include/qt6/QtCore/QDeadlineTimer + mdp:/usr/include/qt6/QtCore/QEvent + mdp:/usr/include/qt6/QtCore/QFile + mdp:/usr/include/qt6/QtCore/QFileInfo + mdp:/usr/include/qt6/QtCore/QHash + mdp:/usr/include/qt6/QtCore/QList + mdp:/usr/include/qt6/QtCore/QMap + mdp:/usr/include/qt6/QtCore/QMargins + mdp:/usr/include/qt6/QtCore/QMetaEnum + mdp:/usr/include/qt6/QtCore/QMutex + mdp:/usr/include/qt6/QtCore/QObject + mdp:/usr/include/qt6/QtCore/QPair + mdp:/usr/include/qt6/QtCore/QRect + mdp:/usr/include/qt6/QtCore/QSize + mdp:/usr/include/qt6/QtCore/QSizeF + mdp:/usr/include/qt6/QtCore/QString + mdp:/usr/include/qt6/QtCore/QStringList + mdp:/usr/include/qt6/QtCore/QTemporaryDir + mdp:/usr/include/qt6/QtCore/QTimer + mdp:/usr/include/qt6/QtCore/QVariant + mdp:/usr/include/qt6/QtCore/QVariantMap + mdp:/usr/include/qt6/QtCore/QVector + mdp:/usr/include/qt6/QtCore/QtCore + mdp:/usr/include/qt6/QtCore/QtCoreDepends + mdp:/usr/include/qt6/QtCore/q17memory.h + mdp:/usr/include/qt6/QtCore/q20algorithm.h + mdp:/usr/include/qt6/QtCore/q20chrono.h + mdp:/usr/include/qt6/QtCore/q20functional.h + mdp:/usr/include/qt6/QtCore/q20iterator.h + mdp:/usr/include/qt6/QtCore/q20map.h + mdp:/usr/include/qt6/QtCore/q20memory.h + mdp:/usr/include/qt6/QtCore/q20type_traits.h + mdp:/usr/include/qt6/QtCore/q20utility.h + mdp:/usr/include/qt6/QtCore/q20vector.h + mdp:/usr/include/qt6/QtCore/q23functional.h + mdp:/usr/include/qt6/QtCore/q23type_traits.h + mdp:/usr/include/qt6/QtCore/q23utility.h + mdp:/usr/include/qt6/QtCore/q26numeric.h + mdp:/usr/include/qt6/QtCore/qabstractanimation.h + mdp:/usr/include/qt6/QtCore/qabstracteventdispatcher.h + mdp:/usr/include/qt6/QtCore/qabstractitemmodel.h + mdp:/usr/include/qt6/QtCore/qabstractnativeeventfilter.h + mdp:/usr/include/qt6/QtCore/qabstractproxymodel.h + mdp:/usr/include/qt6/QtCore/qalgorithms.h + mdp:/usr/include/qt6/QtCore/qalloc.h + mdp:/usr/include/qt6/QtCore/qanimationgroup.h + mdp:/usr/include/qt6/QtCore/qanystringview.h + mdp:/usr/include/qt6/QtCore/qapplicationstatic.h + mdp:/usr/include/qt6/QtCore/qarraydata.h + mdp:/usr/include/qt6/QtCore/qarraydataops.h + mdp:/usr/include/qt6/QtCore/qarraydatapointer.h + mdp:/usr/include/qt6/QtCore/qassert.h + mdp:/usr/include/qt6/QtCore/qassociativeiterable.h + mdp:/usr/include/qt6/QtCore/qatomic.h + mdp:/usr/include/qt6/QtCore/qatomic_cxx11.h + mdp:/usr/include/qt6/QtCore/qatomicscopedvaluerollback.h + mdp:/usr/include/qt6/QtCore/qbasicatomic.h + mdp:/usr/include/qt6/QtCore/qbasictimer.h + mdp:/usr/include/qt6/QtCore/qbindingstorage.h + mdp:/usr/include/qt6/QtCore/qbitarray.h + mdp:/usr/include/qt6/QtCore/qbuffer.h + mdp:/usr/include/qt6/QtCore/qbytearray.h + mdp:/usr/include/qt6/QtCore/qbytearrayalgorithms.h + mdp:/usr/include/qt6/QtCore/qbytearraylist.h + mdp:/usr/include/qt6/QtCore/qbytearraymatcher.h + mdp:/usr/include/qt6/QtCore/qbytearrayview.h + mdp:/usr/include/qt6/QtCore/qcache.h + mdp:/usr/include/qt6/QtCore/qcalendar.h + mdp:/usr/include/qt6/QtCore/qcborarray.h + mdp:/usr/include/qt6/QtCore/qcborcommon.h + mdp:/usr/include/qt6/QtCore/qcbormap.h + mdp:/usr/include/qt6/QtCore/qcborstream.h + mdp:/usr/include/qt6/QtCore/qcborstreamreader.h + mdp:/usr/include/qt6/QtCore/qcborstreamwriter.h + mdp:/usr/include/qt6/QtCore/qcborvalue.h + mdp:/usr/include/qt6/QtCore/qchar.h + mdp:/usr/include/qt6/QtCore/qcheckedint_impl.h + mdp:/usr/include/qt6/QtCore/qchronotimer.h + mdp:/usr/include/qt6/QtCore/qcollator.h + mdp:/usr/include/qt6/QtCore/qcommandlineoption.h + mdp:/usr/include/qt6/QtCore/qcommandlineparser.h + mdp:/usr/include/qt6/QtCore/qcompare.h + mdp:/usr/include/qt6/QtCore/qcompare_impl.h + mdp:/usr/include/qt6/QtCore/qcomparehelpers.h + mdp:/usr/include/qt6/QtCore/qcompilerdetection.h + mdp:/usr/include/qt6/QtCore/qconcatenatetablesproxymodel.h + mdp:/usr/include/qt6/QtCore/qconfig-64.h + mdp:/usr/include/qt6/QtCore/qconfig.h + mdp:/usr/include/qt6/QtCore/qconstructormacros.h + mdp:/usr/include/qt6/QtCore/qcontainerfwd.h + mdp:/usr/include/qt6/QtCore/qcontainerinfo.h + mdp:/usr/include/qt6/QtCore/qcontainertools_impl.h + mdp:/usr/include/qt6/QtCore/qcontiguouscache.h + mdp:/usr/include/qt6/QtCore/qcoreapplication.h + mdp:/usr/include/qt6/QtCore/qcoreapplication_platform.h + mdp:/usr/include/qt6/QtCore/qcoreevent.h + mdp:/usr/include/qt6/QtCore/qcryptographichash.h + mdp:/usr/include/qt6/QtCore/qdarwinhelpers.h + mdp:/usr/include/qt6/QtCore/qdatastream.h + mdp:/usr/include/qt6/QtCore/qdatetime.h + mdp:/usr/include/qt6/QtCore/qdeadlinetimer.h + mdp:/usr/include/qt6/QtCore/qdebug.h + mdp:/usr/include/qt6/QtCore/qdir.h + mdp:/usr/include/qt6/QtCore/qdiriterator.h + mdp:/usr/include/qt6/QtCore/qdirlisting.h + mdp:/usr/include/qt6/QtCore/qeasingcurve.h + mdp:/usr/include/qt6/QtCore/qelapsedtimer.h + mdp:/usr/include/qt6/QtCore/qendian.h + mdp:/usr/include/qt6/QtCore/qeventloop.h + mdp:/usr/include/qt6/QtCore/qexception.h + mdp:/usr/include/qt6/QtCore/qexceptionhandling.h + mdp:/usr/include/qt6/QtCore/qfactoryinterface.h + mdp:/usr/include/qt6/QtCore/qfile.h + mdp:/usr/include/qt6/QtCore/qfiledevice.h + mdp:/usr/include/qt6/QtCore/qfileinfo.h + mdp:/usr/include/qt6/QtCore/qfileselector.h + mdp:/usr/include/qt6/QtCore/qfilesystemwatcher.h + mdp:/usr/include/qt6/QtCore/qflags.h + mdp:/usr/include/qt6/QtCore/qfloat16.h + mdp:/usr/include/qt6/QtCore/qforeach.h + mdp:/usr/include/qt6/QtCore/qfunctionaltools_impl.h + mdp:/usr/include/qt6/QtCore/qfunctionpointer.h + mdp:/usr/include/qt6/QtCore/qfuture.h + mdp:/usr/include/qt6/QtCore/qfuture_impl.h + mdp:/usr/include/qt6/QtCore/qfutureinterface.h + mdp:/usr/include/qt6/QtCore/qfuturesynchronizer.h + mdp:/usr/include/qt6/QtCore/qfuturewatcher.h + mdp:/usr/include/qt6/QtCore/qgenericatomic.h + mdp:/usr/include/qt6/QtCore/qglobal.h + mdp:/usr/include/qt6/QtCore/qglobalstatic.h + mdp:/usr/include/qt6/QtCore/qhash.h + mdp:/usr/include/qt6/QtCore/qhashfunctions.h + mdp:/usr/include/qt6/QtCore/qidentityproxymodel.h + mdp:/usr/include/qt6/QtCore/qiodevice.h + mdp:/usr/include/qt6/QtCore/qiodevicebase.h + mdp:/usr/include/qt6/QtCore/qitemselectionmodel.h + mdp:/usr/include/qt6/QtCore/qiterable.h + mdp:/usr/include/qt6/QtCore/qiterator.h + mdp:/usr/include/qt6/QtCore/qjsonarray.h + mdp:/usr/include/qt6/QtCore/qjsondocument.h + mdp:/usr/include/qt6/QtCore/qjsonobject.h + mdp:/usr/include/qt6/QtCore/qjsonparseerror.h + mdp:/usr/include/qt6/QtCore/qjsonvalue.h + mdp:/usr/include/qt6/QtCore/qlatin1stringmatcher.h + mdp:/usr/include/qt6/QtCore/qlatin1stringview.h + mdp:/usr/include/qt6/QtCore/qlibrary.h + mdp:/usr/include/qt6/QtCore/qlibraryinfo.h + mdp:/usr/include/qt6/QtCore/qline.h + mdp:/usr/include/qt6/QtCore/qlist.h + mdp:/usr/include/qt6/QtCore/qlocale.h + mdp:/usr/include/qt6/QtCore/qlockfile.h + mdp:/usr/include/qt6/QtCore/qlogging.h + mdp:/usr/include/qt6/QtCore/qloggingcategory.h + mdp:/usr/include/qt6/QtCore/qmalloc.h + mdp:/usr/include/qt6/QtCore/qmap.h + mdp:/usr/include/qt6/QtCore/qmargins.h + mdp:/usr/include/qt6/QtCore/qmath.h + mdp:/usr/include/qt6/QtCore/qmessageauthenticationcode.h + mdp:/usr/include/qt6/QtCore/qmetacontainer.h + mdp:/usr/include/qt6/QtCore/qmetaobject.h + mdp:/usr/include/qt6/QtCore/qmetatype.h + mdp:/usr/include/qt6/QtCore/qmimedata.h + mdp:/usr/include/qt6/QtCore/qmimedatabase.h + mdp:/usr/include/qt6/QtCore/qmimetype.h + mdp:/usr/include/qt6/QtCore/qminmax.h + mdp:/usr/include/qt6/QtCore/qmutex.h + mdp:/usr/include/qt6/QtCore/qnamespace.h + mdp:/usr/include/qt6/QtCore/qnativeinterface.h + mdp:/usr/include/qt6/QtCore/qnumeric.h + mdp:/usr/include/qt6/QtCore/qobject.h + mdp:/usr/include/qt6/QtCore/qobject_impl.h + mdp:/usr/include/qt6/QtCore/qobjectcleanuphandler.h + mdp:/usr/include/qt6/QtCore/qobjectdefs.h + mdp:/usr/include/qt6/QtCore/qobjectdefs_impl.h + mdp:/usr/include/qt6/QtCore/qoperatingsystemversion.h + mdp:/usr/include/qt6/QtCore/qoverload.h + mdp:/usr/include/qt6/QtCore/qpair.h + mdp:/usr/include/qt6/QtCore/qparallelanimationgroup.h + mdp:/usr/include/qt6/QtCore/qpauseanimation.h + mdp:/usr/include/qt6/QtCore/qpermissions.h + mdp:/usr/include/qt6/QtCore/qplugin.h + mdp:/usr/include/qt6/QtCore/qpluginloader.h + mdp:/usr/include/qt6/QtCore/qpoint.h + mdp:/usr/include/qt6/QtCore/qpointer.h + mdp:/usr/include/qt6/QtCore/qprocess.h + mdp:/usr/include/qt6/QtCore/qprocessordetection.h + mdp:/usr/include/qt6/QtCore/qpromise.h + mdp:/usr/include/qt6/QtCore/qproperty.h + mdp:/usr/include/qt6/QtCore/qpropertyanimation.h + mdp:/usr/include/qt6/QtCore/qpropertyprivate.h + mdp:/usr/include/qt6/QtCore/qqueue.h + mdp:/usr/include/qt6/QtCore/qrandom.h + mdp:/usr/include/qt6/QtCore/qrangemodel.h + mdp:/usr/include/qt6/QtCore/qrangemodel_impl.h + mdp:/usr/include/qt6/QtCore/qreadwritelock.h + mdp:/usr/include/qt6/QtCore/qrect.h + mdp:/usr/include/qt6/QtCore/qrefcount.h + mdp:/usr/include/qt6/QtCore/qregularexpression.h + mdp:/usr/include/qt6/QtCore/qresource.h + mdp:/usr/include/qt6/QtCore/qresultstore.h + mdp:/usr/include/qt6/QtCore/qrunnable.h + mdp:/usr/include/qt6/QtCore/qsavefile.h + mdp:/usr/include/qt6/QtCore/qscopedpointer.h + mdp:/usr/include/qt6/QtCore/qscopedvaluerollback.h + mdp:/usr/include/qt6/QtCore/qscopeguard.h + mdp:/usr/include/qt6/QtCore/qsemaphore.h + mdp:/usr/include/qt6/QtCore/qsequentialanimationgroup.h + mdp:/usr/include/qt6/QtCore/qsequentialiterable.h + mdp:/usr/include/qt6/QtCore/qset.h + mdp:/usr/include/qt6/QtCore/qsettings.h + mdp:/usr/include/qt6/QtCore/qshareddata.h + mdp:/usr/include/qt6/QtCore/qshareddata_impl.h + mdp:/usr/include/qt6/QtCore/qsharedmemory.h + mdp:/usr/include/qt6/QtCore/qsharedpointer.h + mdp:/usr/include/qt6/QtCore/qsharedpointer_impl.h + mdp:/usr/include/qt6/QtCore/qsignalmapper.h + mdp:/usr/include/qt6/QtCore/qsimd.h + mdp:/usr/include/qt6/QtCore/qsize.h + mdp:/usr/include/qt6/QtCore/qsocketnotifier.h + mdp:/usr/include/qt6/QtCore/qsortfilterproxymodel.h + mdp:/usr/include/qt6/QtCore/qspan.h + mdp:/usr/include/qt6/QtCore/qstack.h + mdp:/usr/include/qt6/QtCore/qstandardpaths.h + mdp:/usr/include/qt6/QtCore/qstaticlatin1stringmatcher.h + mdp:/usr/include/qt6/QtCore/qstdlibdetection.h + mdp:/usr/include/qt6/QtCore/qstorageinfo.h + mdp:/usr/include/qt6/QtCore/qstring.h + mdp:/usr/include/qt6/QtCore/qstringalgorithms.h + mdp:/usr/include/qt6/QtCore/qstringbuilder.h + mdp:/usr/include/qt6/QtCore/qstringconverter.h + mdp:/usr/include/qt6/QtCore/qstringconverter_base.h + mdp:/usr/include/qt6/QtCore/qstringfwd.h + mdp:/usr/include/qt6/QtCore/qstringlist.h + mdp:/usr/include/qt6/QtCore/qstringlistmodel.h + mdp:/usr/include/qt6/QtCore/qstringliteral.h + mdp:/usr/include/qt6/QtCore/qstringmatcher.h + mdp:/usr/include/qt6/QtCore/qstringtokenizer.h + mdp:/usr/include/qt6/QtCore/qstringview.h + mdp:/usr/include/qt6/QtCore/qswap.h + mdp:/usr/include/qt6/QtCore/qsysinfo.h + mdp:/usr/include/qt6/QtCore/qsystemdetection.h + mdp:/usr/include/qt6/QtCore/qsystemsemaphore.h + mdp:/usr/include/qt6/QtCore/qtaggedpointer.h + mdp:/usr/include/qt6/QtCore/qtclasshelpermacros.h + mdp:/usr/include/qt6/QtCore/qtconfiginclude.h + mdp:/usr/include/qt6/QtCore/qtconfigmacros.h + mdp:/usr/include/qt6/QtCore/qtcore-config.h + mdp:/usr/include/qt6/QtCore/qtcoreexports.h + mdp:/usr/include/qt6/QtCore/qtcoreglobal.h + mdp:/usr/include/qt6/QtCore/qtcoreversion.h + mdp:/usr/include/qt6/QtCore/qtdeprecationdefinitions.h + mdp:/usr/include/qt6/QtCore/qtdeprecationmarkers.h + mdp:/usr/include/qt6/QtCore/qtemporarydir.h + mdp:/usr/include/qt6/QtCore/qtemporaryfile.h + mdp:/usr/include/qt6/QtCore/qtenvironmentvariables.h + mdp:/usr/include/qt6/QtCore/qtestsupport_core.h + mdp:/usr/include/qt6/QtCore/qtextboundaryfinder.h + mdp:/usr/include/qt6/QtCore/qtextstream.h + mdp:/usr/include/qt6/QtCore/qtformat_impl.h + mdp:/usr/include/qt6/QtCore/qthread.h + mdp:/usr/include/qt6/QtCore/qthreadpool.h + mdp:/usr/include/qt6/QtCore/qthreadstorage.h + mdp:/usr/include/qt6/QtCore/qtimeline.h + mdp:/usr/include/qt6/QtCore/qtimer.h + mdp:/usr/include/qt6/QtCore/qtimezone.h + mdp:/usr/include/qt6/QtCore/qtipccommon.h + mdp:/usr/include/qt6/QtCore/qtmetamacros.h + mdp:/usr/include/qt6/QtCore/qtmocconstants.h + mdp:/usr/include/qt6/QtCore/qtnoop.h + mdp:/usr/include/qt6/QtCore/qtpreprocessorsupport.h + mdp:/usr/include/qt6/QtCore/qtranslator.h + mdp:/usr/include/qt6/QtCore/qtransposeproxymodel.h + mdp:/usr/include/qt6/QtCore/qtresource.h + mdp:/usr/include/qt6/QtCore/qtsan_impl.h + mdp:/usr/include/qt6/QtCore/qtsymbolmacros.h + mdp:/usr/include/qt6/QtCore/qttranslation.h + mdp:/usr/include/qt6/QtCore/qttypetraits.h + mdp:/usr/include/qt6/QtCore/qtversion.h + mdp:/usr/include/qt6/QtCore/qtversionchecks.h + mdp:/usr/include/qt6/QtCore/qtypeinfo.h + mdp:/usr/include/qt6/QtCore/qtyperevision.h + mdp:/usr/include/qt6/QtCore/qtypes.h + mdp:/usr/include/qt6/QtCore/qurl.h + mdp:/usr/include/qt6/QtCore/qurlquery.h + mdp:/usr/include/qt6/QtCore/qutf8stringview.h + mdp:/usr/include/qt6/QtCore/quuid.h + mdp:/usr/include/qt6/QtCore/qvariant.h + mdp:/usr/include/qt6/QtCore/qvariantanimation.h + mdp:/usr/include/qt6/QtCore/qvarianthash.h + mdp:/usr/include/qt6/QtCore/qvariantlist.h + mdp:/usr/include/qt6/QtCore/qvariantmap.h + mdp:/usr/include/qt6/QtCore/qvarlengtharray.h + mdp:/usr/include/qt6/QtCore/qvector.h + mdp:/usr/include/qt6/QtCore/qversionnumber.h + mdp:/usr/include/qt6/QtCore/qversiontagging.h + mdp:/usr/include/qt6/QtCore/qwaitcondition.h + mdp:/usr/include/qt6/QtCore/qwineventnotifier.h + mdp:/usr/include/qt6/QtCore/qxmlstream.h + mdp:/usr/include/qt6/QtCore/qxpfunctional.h + mdp:/usr/include/qt6/QtCore/qxptype_traits.h + mdp:/usr/include/qt6/QtCore/qyieldcpu.h + mdp:/usr/include/qt6/QtGui/QBrush + mdp:/usr/include/qt6/QtGui/QColor + mdp:/usr/include/qt6/QtGui/QFont + mdp:/usr/include/qt6/QtGui/QIcon + mdp:/usr/include/qt6/QtGui/QImage + mdp:/usr/include/qt6/QtGui/QPixmap + mdp:/usr/include/qt6/QtGui/QTransform + mdp:/usr/include/qt6/QtGui/qaction.h + mdp:/usr/include/qt6/QtGui/qbitmap.h + mdp:/usr/include/qt6/QtGui/qbrush.h + mdp:/usr/include/qt6/QtGui/qcolor.h + mdp:/usr/include/qt6/QtGui/qcursor.h + mdp:/usr/include/qt6/QtGui/qevent.h + mdp:/usr/include/qt6/QtGui/qeventpoint.h + mdp:/usr/include/qt6/QtGui/qfont.h + mdp:/usr/include/qt6/QtGui/qfontinfo.h + mdp:/usr/include/qt6/QtGui/qfontmetrics.h + mdp:/usr/include/qt6/QtGui/qfontvariableaxis.h + mdp:/usr/include/qt6/QtGui/qguiapplication.h + mdp:/usr/include/qt6/QtGui/qguiapplication_platform.h + mdp:/usr/include/qt6/QtGui/qicon.h + mdp:/usr/include/qt6/QtGui/qimage.h + mdp:/usr/include/qt6/QtGui/qinputdevice.h + mdp:/usr/include/qt6/QtGui/qinputmethod.h + mdp:/usr/include/qt6/QtGui/qkeysequence.h + mdp:/usr/include/qt6/QtGui/qpaintdevice.h + mdp:/usr/include/qt6/QtGui/qpalette.h + mdp:/usr/include/qt6/QtGui/qpixelformat.h + mdp:/usr/include/qt6/QtGui/qpixmap.h + mdp:/usr/include/qt6/QtGui/qpointingdevice.h + mdp:/usr/include/qt6/QtGui/qpolygon.h + mdp:/usr/include/qt6/QtGui/qregion.h + mdp:/usr/include/qt6/QtGui/qrgb.h + mdp:/usr/include/qt6/QtGui/qrgba64.h + mdp:/usr/include/qt6/QtGui/qscreen.h + mdp:/usr/include/qt6/QtGui/qscreen_platform.h + mdp:/usr/include/qt6/QtGui/qsurface.h + mdp:/usr/include/qt6/QtGui/qsurfaceformat.h + mdp:/usr/include/qt6/QtGui/qtestsupport_gui.h + mdp:/usr/include/qt6/QtGui/qtgui-config.h + mdp:/usr/include/qt6/QtGui/qtguiexports.h + mdp:/usr/include/qt6/QtGui/qtguiglobal.h + mdp:/usr/include/qt6/QtGui/qtransform.h + mdp:/usr/include/qt6/QtGui/qvector2d.h + mdp:/usr/include/qt6/QtGui/qvector3d.h + mdp:/usr/include/qt6/QtGui/qvector4d.h + mdp:/usr/include/qt6/QtGui/qvectornd.h + mdp:/usr/include/qt6/QtGui/qwindow.h + mdp:/usr/include/qt6/QtGui/qwindowdefs.h + mdp:/usr/include/qt6/QtNetwork/qtnetwork-config.h + mdp:/usr/include/qt6/QtNetwork/qtnetworkexports.h + mdp:/usr/include/qt6/QtNetwork/qtnetworkglobal.h + mdp:/usr/include/qt6/QtQml/qjsnumbercoercion.h + mdp:/usr/include/qt6/QtQml/qjsprimitivevalue.h + mdp:/usr/include/qt6/QtQml/qjsvalue.h + mdp:/usr/include/qt6/QtQml/qqml.h + mdp:/usr/include/qt6/QtQml/qqmllist.h + mdp:/usr/include/qt6/QtQml/qqmlparserstatus.h + mdp:/usr/include/qt6/QtQml/qqmlprivate.h + mdp:/usr/include/qt6/QtQml/qqmlpropertyvaluesource.h + mdp:/usr/include/qt6/QtQml/qqmlregistration.h + mdp:/usr/include/qt6/QtQml/qtqml-config.h + mdp:/usr/include/qt6/QtQml/qtqmlexports.h + mdp:/usr/include/qt6/QtQml/qtqmlglobal.h + mdp:/usr/include/qt6/QtQmlIntegration/qqmlintegration.h + mdp:/usr/include/qt6/QtSql/QSqlDatabase + mdp:/usr/include/qt6/QtSql/QSqlError + mdp:/usr/include/qt6/QtSql/QSqlQuery + mdp:/usr/include/qt6/QtSql/qsqldatabase.h + mdp:/usr/include/qt6/QtSql/qsqlerror.h + mdp:/usr/include/qt6/QtSql/qsqlquery.h + mdp:/usr/include/qt6/QtSql/qtsql-config.h + mdp:/usr/include/qt6/QtSql/qtsqlexports.h + mdp:/usr/include/qt6/QtSql/qtsqlglobal.h + mdp:/usr/include/qt6/QtTest/QtTest + mdp:/usr/include/qt6/QtTest/QtTestDepends + mdp:/usr/include/qt6/QtTest/qabstractitemmodeltester.h + mdp:/usr/include/qt6/QtTest/qbenchmark.h + mdp:/usr/include/qt6/QtTest/qbenchmarkmetric.h + mdp:/usr/include/qt6/QtTest/qsignalspy.h + mdp:/usr/include/qt6/QtTest/qtest.h + mdp:/usr/include/qt6/QtTest/qtest_gui.h + mdp:/usr/include/qt6/QtTest/qtest_widgets.h + mdp:/usr/include/qt6/QtTest/qtestassert.h + mdp:/usr/include/qt6/QtTest/qtestcase.h + mdp:/usr/include/qt6/QtTest/qtestdata.h + mdp:/usr/include/qt6/QtTest/qtestevent.h + mdp:/usr/include/qt6/QtTest/qtesteventloop.h + mdp:/usr/include/qt6/QtTest/qtestkeyboard.h + mdp:/usr/include/qt6/QtTest/qtestmouse.h + mdp:/usr/include/qt6/QtTest/qtestspontaneevent.h + mdp:/usr/include/qt6/QtTest/qtestsystem.h + mdp:/usr/include/qt6/QtTest/qtesttostring.h + mdp:/usr/include/qt6/QtTest/qtesttouch.h + mdp:/usr/include/qt6/QtTest/qtestwheel.h + mdp:/usr/include/qt6/QtTest/qttestexports.h + mdp:/usr/include/qt6/QtTest/qttestglobal.h + mdp:/usr/include/qt6/QtTest/qttestlib-config.h + mdp:/usr/include/qt6/QtTest/qttestversion.h + mdp:/usr/include/qt6/QtWidgets/QApplication + mdp:/usr/include/qt6/QtWidgets/QSizePolicy + mdp:/usr/include/qt6/QtWidgets/qapplication.h + mdp:/usr/include/qt6/QtWidgets/qsizepolicy.h + mdp:/usr/include/qt6/QtWidgets/qtestsupport_widgets.h + mdp:/usr/include/qt6/QtWidgets/qtwidgets-config.h + mdp:/usr/include/qt6/QtWidgets/qtwidgetsexports.h + mdp:/usr/include/qt6/QtWidgets/qtwidgetsglobal.h + mdp:/usr/include/qt6/QtWidgets/qwidget.h + mdp:/usr/include/sched.h + mdp:/usr/include/semaphore.h + mdp:/usr/include/stdc-predef.h + mdp:/usr/include/stdint.h + mdp:/usr/include/stdio.h + mdp:/usr/include/stdlib.h + mdp:/usr/include/string.h + mdp:/usr/include/strings.h + mdp:/usr/include/sys/cdefs.h + mdp:/usr/include/sys/select.h + mdp:/usr/include/sys/single_threaded.h + mdp:/usr/include/sys/syscall.h + mdp:/usr/include/sys/time.h + mdp:/usr/include/sys/types.h + mdp:/usr/include/syscall.h + mdp:/usr/include/time.h + mdp:/usr/include/unistd.h + mdp:/usr/include/wchar.h + mdp:/usr/include/wctype.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/adxintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxavx512intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxbf16intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxcomplexintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxfp16intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxfp8intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxint8intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxmovrsintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxtf32intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxtileintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxtransposeintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2-512bf16intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2-512convertintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2-512mediaintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2-512minmaxintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2-512satcvtintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2bf16intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2convertintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2copyintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2mediaintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2minmaxintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2satcvtintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx2intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512bf16intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512bf16vlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512bitalgintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512bitalgvlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512bwintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512cdintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512dqintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512fintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512fp16intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512fp16vlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512ifmaintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512ifmavlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vbmi2intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vbmi2vlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vbmiintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vbmivlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vlbwintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vldqintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vnniintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vnnivlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vp2intersectintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vp2intersectvlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vpopcntdqintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vpopcntdqvlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avxifmaintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avxintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avxneconvertintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avxvnniint16intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avxvnniint8intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avxvnniintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/bmi2intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/bmiintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/cetintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/cldemoteintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/clflushoptintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/clwbintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/clzerointrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/cmpccxaddintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/emmintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/enqcmdintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/f16cintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/fmaintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/fxsrintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/gfniintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/hresetintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/ia32intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/immintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/keylockerintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/lwpintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/lzcntintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/mm_malloc.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/mmintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/movdirintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/movrsintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/mwaitintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/mwaitxintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/pconfigintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/pkuintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/pmmintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/popcntintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/prfchiintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/prfchwintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/raointintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/rdseedintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/rtmintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/serializeintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/sgxintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/sha512intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/shaintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/sm3intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/sm4intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/smmintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stdarg.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stdbool.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stddef.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/tbmintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/tmmintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/tsxldtrkintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/uintrintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/usermsrintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/vaesintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/vpclmulqdqintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/waitpkgintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/wbnoinvdintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/wmmintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/x86gprintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/xmmintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/xsavecintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/xsaveintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/xsaveoptintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/xsavesintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/xtestintrin.h +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/log_manager.cpp +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/log_manager.h + mmc:Q_OBJECT + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_models_autogen/moc_predefs.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/log_manager.h + mdp:/usr/include/alloca.h + mdp:/usr/include/asm-generic/bitsperlong.h + mdp:/usr/include/asm-generic/errno-base.h + mdp:/usr/include/asm-generic/errno.h + mdp:/usr/include/asm-generic/int-ll64.h + mdp:/usr/include/asm-generic/posix_types.h + mdp:/usr/include/asm-generic/types.h + mdp:/usr/include/asm/bitsperlong.h + mdp:/usr/include/asm/errno.h + mdp:/usr/include/asm/posix_types.h + mdp:/usr/include/asm/posix_types_64.h + mdp:/usr/include/asm/types.h + mdp:/usr/include/asm/unistd.h + mdp:/usr/include/asm/unistd_64.h + mdp:/usr/include/assert.h + mdp:/usr/include/bits/atomic_wide_counter.h + mdp:/usr/include/bits/byteswap.h + mdp:/usr/include/bits/confname.h + mdp:/usr/include/bits/cpu-set.h + mdp:/usr/include/bits/endian.h + mdp:/usr/include/bits/endianness.h + mdp:/usr/include/bits/environments.h + mdp:/usr/include/bits/errno.h + mdp:/usr/include/bits/floatn-common.h + mdp:/usr/include/bits/floatn.h + mdp:/usr/include/bits/getopt_core.h + mdp:/usr/include/bits/getopt_posix.h + mdp:/usr/include/bits/libc-header-start.h + mdp:/usr/include/bits/local_lim.h + mdp:/usr/include/bits/locale.h + mdp:/usr/include/bits/long-double.h + mdp:/usr/include/bits/posix1_lim.h + mdp:/usr/include/bits/posix2_lim.h + mdp:/usr/include/bits/posix_opt.h + mdp:/usr/include/bits/pthread_stack_min-dynamic.h + mdp:/usr/include/bits/pthreadtypes-arch.h + mdp:/usr/include/bits/pthreadtypes.h + mdp:/usr/include/bits/sched.h + mdp:/usr/include/bits/select.h + mdp:/usr/include/bits/setjmp.h + mdp:/usr/include/bits/stdint-intn.h + mdp:/usr/include/bits/stdint-least.h + mdp:/usr/include/bits/stdint-uintn.h + mdp:/usr/include/bits/stdio_lim.h + mdp:/usr/include/bits/stdlib-float.h + mdp:/usr/include/bits/struct_mutex.h + mdp:/usr/include/bits/struct_rwlock.h + mdp:/usr/include/bits/syscall.h + mdp:/usr/include/bits/thread-shared-types.h + mdp:/usr/include/bits/time.h + mdp:/usr/include/bits/time64.h + mdp:/usr/include/bits/timesize.h + mdp:/usr/include/bits/timex.h + mdp:/usr/include/bits/types.h + mdp:/usr/include/bits/types/FILE.h + mdp:/usr/include/bits/types/__FILE.h + mdp:/usr/include/bits/types/__fpos64_t.h + mdp:/usr/include/bits/types/__fpos_t.h + mdp:/usr/include/bits/types/__locale_t.h + mdp:/usr/include/bits/types/__mbstate_t.h + mdp:/usr/include/bits/types/__sigset_t.h + mdp:/usr/include/bits/types/clock_t.h + mdp:/usr/include/bits/types/clockid_t.h + mdp:/usr/include/bits/types/cookie_io_functions_t.h + mdp:/usr/include/bits/types/error_t.h + mdp:/usr/include/bits/types/locale_t.h + mdp:/usr/include/bits/types/mbstate_t.h + mdp:/usr/include/bits/types/sigset_t.h + mdp:/usr/include/bits/types/struct_FILE.h + mdp:/usr/include/bits/types/struct___jmp_buf_tag.h + mdp:/usr/include/bits/types/struct_itimerspec.h + mdp:/usr/include/bits/types/struct_sched_param.h + mdp:/usr/include/bits/types/struct_timespec.h + mdp:/usr/include/bits/types/struct_timeval.h + mdp:/usr/include/bits/types/struct_tm.h + mdp:/usr/include/bits/types/time_t.h + mdp:/usr/include/bits/types/timer_t.h + mdp:/usr/include/bits/types/wint_t.h + mdp:/usr/include/bits/typesizes.h + mdp:/usr/include/bits/uintn-identity.h + mdp:/usr/include/bits/uio_lim.h + mdp:/usr/include/bits/unistd_ext.h + mdp:/usr/include/bits/waitflags.h + mdp:/usr/include/bits/waitstatus.h + mdp:/usr/include/bits/wchar.h + mdp:/usr/include/bits/wctype-wchar.h + mdp:/usr/include/bits/wordsize.h + mdp:/usr/include/bits/xopen_lim.h + mdp:/usr/include/c++/15/algorithm + mdp:/usr/include/c++/15/array + mdp:/usr/include/c++/15/atomic + mdp:/usr/include/c++/15/backward/auto_ptr.h + mdp:/usr/include/c++/15/backward/binders.h + mdp:/usr/include/c++/15/bit + mdp:/usr/include/c++/15/bits/algorithmfwd.h + mdp:/usr/include/c++/15/bits/align.h + mdp:/usr/include/c++/15/bits/alloc_traits.h + mdp:/usr/include/c++/15/bits/allocated_ptr.h + mdp:/usr/include/c++/15/bits/allocator.h + mdp:/usr/include/c++/15/bits/atomic_base.h + mdp:/usr/include/c++/15/bits/atomic_lockfree_defines.h + mdp:/usr/include/c++/15/bits/atomic_wait.h + mdp:/usr/include/c++/15/bits/basic_ios.h + mdp:/usr/include/c++/15/bits/basic_ios.tcc + mdp:/usr/include/c++/15/bits/basic_string.h + mdp:/usr/include/c++/15/bits/basic_string.tcc + mdp:/usr/include/c++/15/bits/char_traits.h + mdp:/usr/include/c++/15/bits/charconv.h + mdp:/usr/include/c++/15/bits/chrono.h + mdp:/usr/include/c++/15/bits/chrono_io.h + mdp:/usr/include/c++/15/bits/codecvt.h + mdp:/usr/include/c++/15/bits/concept_check.h + mdp:/usr/include/c++/15/bits/cpp_type_traits.h + mdp:/usr/include/c++/15/bits/cxxabi_forced.h + mdp:/usr/include/c++/15/bits/cxxabi_init_exception.h + mdp:/usr/include/c++/15/bits/enable_special_members.h + mdp:/usr/include/c++/15/bits/erase_if.h + mdp:/usr/include/c++/15/bits/exception.h + mdp:/usr/include/c++/15/bits/exception_defines.h + mdp:/usr/include/c++/15/bits/exception_ptr.h + mdp:/usr/include/c++/15/bits/functexcept.h + mdp:/usr/include/c++/15/bits/functional_hash.h + mdp:/usr/include/c++/15/bits/hash_bytes.h + mdp:/usr/include/c++/15/bits/hashtable.h + mdp:/usr/include/c++/15/bits/hashtable_policy.h + mdp:/usr/include/c++/15/bits/invoke.h + mdp:/usr/include/c++/15/bits/ios_base.h + mdp:/usr/include/c++/15/bits/istream.tcc + mdp:/usr/include/c++/15/bits/iterator_concepts.h + mdp:/usr/include/c++/15/bits/list.tcc + mdp:/usr/include/c++/15/bits/locale_classes.h + mdp:/usr/include/c++/15/bits/locale_classes.tcc + mdp:/usr/include/c++/15/bits/locale_conv.h + mdp:/usr/include/c++/15/bits/locale_facets.h + mdp:/usr/include/c++/15/bits/locale_facets.tcc + mdp:/usr/include/c++/15/bits/locale_facets_nonio.h + mdp:/usr/include/c++/15/bits/locale_facets_nonio.tcc + mdp:/usr/include/c++/15/bits/localefwd.h + mdp:/usr/include/c++/15/bits/max_size_type.h + mdp:/usr/include/c++/15/bits/memory_resource.h + mdp:/usr/include/c++/15/bits/memoryfwd.h + mdp:/usr/include/c++/15/bits/move.h + mdp:/usr/include/c++/15/bits/nested_exception.h + mdp:/usr/include/c++/15/bits/new_allocator.h + mdp:/usr/include/c++/15/bits/node_handle.h + mdp:/usr/include/c++/15/bits/ostream.h + mdp:/usr/include/c++/15/bits/ostream.tcc + mdp:/usr/include/c++/15/bits/ostream_insert.h + mdp:/usr/include/c++/15/bits/parse_numbers.h + mdp:/usr/include/c++/15/bits/postypes.h + mdp:/usr/include/c++/15/bits/predefined_ops.h + mdp:/usr/include/c++/15/bits/ptr_traits.h + mdp:/usr/include/c++/15/bits/quoted_string.h + mdp:/usr/include/c++/15/bits/range_access.h + mdp:/usr/include/c++/15/bits/ranges_algo.h + mdp:/usr/include/c++/15/bits/ranges_algobase.h + mdp:/usr/include/c++/15/bits/ranges_base.h + mdp:/usr/include/c++/15/bits/ranges_cmp.h + mdp:/usr/include/c++/15/bits/ranges_uninitialized.h + mdp:/usr/include/c++/15/bits/ranges_util.h + mdp:/usr/include/c++/15/bits/refwrap.h + mdp:/usr/include/c++/15/bits/requires_hosted.h + mdp:/usr/include/c++/15/bits/shared_ptr.h + mdp:/usr/include/c++/15/bits/shared_ptr_atomic.h + mdp:/usr/include/c++/15/bits/shared_ptr_base.h + mdp:/usr/include/c++/15/bits/specfun.h + mdp:/usr/include/c++/15/bits/sstream.tcc + mdp:/usr/include/c++/15/bits/std_abs.h + mdp:/usr/include/c++/15/bits/std_function.h + mdp:/usr/include/c++/15/bits/std_mutex.h + mdp:/usr/include/c++/15/bits/stl_algo.h + mdp:/usr/include/c++/15/bits/stl_algobase.h + mdp:/usr/include/c++/15/bits/stl_bvector.h + mdp:/usr/include/c++/15/bits/stl_construct.h + mdp:/usr/include/c++/15/bits/stl_function.h + mdp:/usr/include/c++/15/bits/stl_heap.h + mdp:/usr/include/c++/15/bits/stl_iterator.h + mdp:/usr/include/c++/15/bits/stl_iterator_base_funcs.h + mdp:/usr/include/c++/15/bits/stl_iterator_base_types.h + mdp:/usr/include/c++/15/bits/stl_list.h + mdp:/usr/include/c++/15/bits/stl_map.h + mdp:/usr/include/c++/15/bits/stl_multimap.h + mdp:/usr/include/c++/15/bits/stl_multiset.h + mdp:/usr/include/c++/15/bits/stl_numeric.h + mdp:/usr/include/c++/15/bits/stl_pair.h + mdp:/usr/include/c++/15/bits/stl_raw_storage_iter.h + mdp:/usr/include/c++/15/bits/stl_relops.h + mdp:/usr/include/c++/15/bits/stl_set.h + mdp:/usr/include/c++/15/bits/stl_tempbuf.h + mdp:/usr/include/c++/15/bits/stl_tree.h + mdp:/usr/include/c++/15/bits/stl_uninitialized.h + mdp:/usr/include/c++/15/bits/stl_vector.h + mdp:/usr/include/c++/15/bits/stream_iterator.h + mdp:/usr/include/c++/15/bits/streambuf.tcc + mdp:/usr/include/c++/15/bits/streambuf_iterator.h + mdp:/usr/include/c++/15/bits/string_view.tcc + mdp:/usr/include/c++/15/bits/stringfwd.h + mdp:/usr/include/c++/15/bits/uniform_int_dist.h + mdp:/usr/include/c++/15/bits/unique_ptr.h + mdp:/usr/include/c++/15/bits/unordered_map.h + mdp:/usr/include/c++/15/bits/unordered_set.h + mdp:/usr/include/c++/15/bits/uses_allocator.h + mdp:/usr/include/c++/15/bits/uses_allocator_args.h + mdp:/usr/include/c++/15/bits/utility.h + mdp:/usr/include/c++/15/bits/vector.tcc + mdp:/usr/include/c++/15/bits/version.h + mdp:/usr/include/c++/15/cassert + mdp:/usr/include/c++/15/cctype + mdp:/usr/include/c++/15/cerrno + mdp:/usr/include/c++/15/charconv + mdp:/usr/include/c++/15/chrono + mdp:/usr/include/c++/15/climits + mdp:/usr/include/c++/15/clocale + mdp:/usr/include/c++/15/cmath + mdp:/usr/include/c++/15/compare + mdp:/usr/include/c++/15/concepts + mdp:/usr/include/c++/15/cstddef + mdp:/usr/include/c++/15/cstdint + mdp:/usr/include/c++/15/cstdio + mdp:/usr/include/c++/15/cstdlib + mdp:/usr/include/c++/15/cstring + mdp:/usr/include/c++/15/ctime + mdp:/usr/include/c++/15/cwchar + mdp:/usr/include/c++/15/cwctype + mdp:/usr/include/c++/15/debug/assertions.h + mdp:/usr/include/c++/15/debug/debug.h + mdp:/usr/include/c++/15/exception + mdp:/usr/include/c++/15/ext/aligned_buffer.h + mdp:/usr/include/c++/15/ext/alloc_traits.h + mdp:/usr/include/c++/15/ext/atomicity.h + mdp:/usr/include/c++/15/ext/concurrence.h + mdp:/usr/include/c++/15/ext/numeric_traits.h + mdp:/usr/include/c++/15/ext/string_conversions.h + mdp:/usr/include/c++/15/ext/type_traits.h + mdp:/usr/include/c++/15/filesystem + mdp:/usr/include/c++/15/format + mdp:/usr/include/c++/15/functional + mdp:/usr/include/c++/15/initializer_list + mdp:/usr/include/c++/15/iomanip + mdp:/usr/include/c++/15/ios + mdp:/usr/include/c++/15/iosfwd + mdp:/usr/include/c++/15/istream + mdp:/usr/include/c++/15/iterator + mdp:/usr/include/c++/15/limits + mdp:/usr/include/c++/15/list + mdp:/usr/include/c++/15/locale + mdp:/usr/include/c++/15/map + mdp:/usr/include/c++/15/memory + mdp:/usr/include/c++/15/new + mdp:/usr/include/c++/15/numeric + mdp:/usr/include/c++/15/optional + mdp:/usr/include/c++/15/ostream + mdp:/usr/include/c++/15/pstl/execution_defs.h + mdp:/usr/include/c++/15/pstl/glue_numeric_defs.h + mdp:/usr/include/c++/15/pstl/pstl_config.h + mdp:/usr/include/c++/15/ratio + mdp:/usr/include/c++/15/set + mdp:/usr/include/c++/15/sstream + mdp:/usr/include/c++/15/stdexcept + mdp:/usr/include/c++/15/streambuf + mdp:/usr/include/c++/15/string + mdp:/usr/include/c++/15/string_view + mdp:/usr/include/c++/15/system_error + mdp:/usr/include/c++/15/tr1/bessel_function.tcc + mdp:/usr/include/c++/15/tr1/beta_function.tcc + mdp:/usr/include/c++/15/tr1/ell_integral.tcc + mdp:/usr/include/c++/15/tr1/exp_integral.tcc + mdp:/usr/include/c++/15/tr1/gamma.tcc + mdp:/usr/include/c++/15/tr1/hypergeometric.tcc + mdp:/usr/include/c++/15/tr1/legendre_function.tcc + mdp:/usr/include/c++/15/tr1/modified_bessel_func.tcc + mdp:/usr/include/c++/15/tr1/poly_hermite.tcc + mdp:/usr/include/c++/15/tr1/poly_laguerre.tcc + mdp:/usr/include/c++/15/tr1/riemann_zeta.tcc + mdp:/usr/include/c++/15/tr1/special_function_util.h + mdp:/usr/include/c++/15/tuple + mdp:/usr/include/c++/15/type_traits + mdp:/usr/include/c++/15/typeinfo + mdp:/usr/include/c++/15/unordered_map + mdp:/usr/include/c++/15/unordered_set + mdp:/usr/include/c++/15/utility + mdp:/usr/include/c++/15/variant + mdp:/usr/include/c++/15/vector + mdp:/usr/include/c++/15/version + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/atomic_word.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++allocator.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++config.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++locale.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/cpu_defines.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/ctype_base.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/ctype_inline.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/error_constants.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/gthr-default.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/gthr.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/messages_members.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/os_defines.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/time_members.h + mdp:/usr/include/ctype.h + mdp:/usr/include/endian.h + mdp:/usr/include/errno.h + mdp:/usr/include/features-time64.h + mdp:/usr/include/features.h + mdp:/usr/include/gnu/stubs-64.h + mdp:/usr/include/gnu/stubs.h + mdp:/usr/include/libintl.h + mdp:/usr/include/limits.h + mdp:/usr/include/linux/close_range.h + mdp:/usr/include/linux/errno.h + mdp:/usr/include/linux/limits.h + mdp:/usr/include/linux/posix_types.h + mdp:/usr/include/linux/sched/types.h + mdp:/usr/include/linux/stddef.h + mdp:/usr/include/linux/types.h + mdp:/usr/include/locale.h + mdp:/usr/include/pthread.h + mdp:/usr/include/qt6/QtCore/QDateTime + mdp:/usr/include/qt6/QtCore/QFile + mdp:/usr/include/qt6/QtCore/QMutex + mdp:/usr/include/qt6/QtCore/QObject + mdp:/usr/include/qt6/QtCore/QStringList + mdp:/usr/include/qt6/QtCore/QTextStream + mdp:/usr/include/qt6/QtCore/q17memory.h + mdp:/usr/include/qt6/QtCore/q20functional.h + mdp:/usr/include/qt6/QtCore/q20iterator.h + mdp:/usr/include/qt6/QtCore/q20memory.h + mdp:/usr/include/qt6/QtCore/q20type_traits.h + mdp:/usr/include/qt6/QtCore/q20utility.h + mdp:/usr/include/qt6/QtCore/q23type_traits.h + mdp:/usr/include/qt6/QtCore/q23utility.h + mdp:/usr/include/qt6/QtCore/qalgorithms.h + mdp:/usr/include/qt6/QtCore/qalloc.h + mdp:/usr/include/qt6/QtCore/qanystringview.h + mdp:/usr/include/qt6/QtCore/qarraydata.h + mdp:/usr/include/qt6/QtCore/qarraydataops.h + mdp:/usr/include/qt6/QtCore/qarraydatapointer.h + mdp:/usr/include/qt6/QtCore/qassert.h + mdp:/usr/include/qt6/QtCore/qatomic.h + mdp:/usr/include/qt6/QtCore/qatomic_cxx11.h + mdp:/usr/include/qt6/QtCore/qbasicatomic.h + mdp:/usr/include/qt6/QtCore/qbindingstorage.h + mdp:/usr/include/qt6/QtCore/qbytearray.h + mdp:/usr/include/qt6/QtCore/qbytearrayalgorithms.h + mdp:/usr/include/qt6/QtCore/qbytearraylist.h + mdp:/usr/include/qt6/QtCore/qbytearrayview.h + mdp:/usr/include/qt6/QtCore/qcalendar.h + mdp:/usr/include/qt6/QtCore/qchar.h + mdp:/usr/include/qt6/QtCore/qcompare.h + mdp:/usr/include/qt6/QtCore/qcompare_impl.h + mdp:/usr/include/qt6/QtCore/qcomparehelpers.h + mdp:/usr/include/qt6/QtCore/qcompilerdetection.h + mdp:/usr/include/qt6/QtCore/qconfig-64.h + mdp:/usr/include/qt6/QtCore/qconfig.h + mdp:/usr/include/qt6/QtCore/qconstructormacros.h + mdp:/usr/include/qt6/QtCore/qcontainerfwd.h + mdp:/usr/include/qt6/QtCore/qcontainerinfo.h + mdp:/usr/include/qt6/QtCore/qcontainertools_impl.h + mdp:/usr/include/qt6/QtCore/qcontiguouscache.h + mdp:/usr/include/qt6/QtCore/qdarwinhelpers.h + mdp:/usr/include/qt6/QtCore/qdatastream.h + mdp:/usr/include/qt6/QtCore/qdatetime.h + mdp:/usr/include/qt6/QtCore/qdeadlinetimer.h + mdp:/usr/include/qt6/QtCore/qdebug.h + mdp:/usr/include/qt6/QtCore/qexceptionhandling.h + mdp:/usr/include/qt6/QtCore/qfile.h + mdp:/usr/include/qt6/QtCore/qfiledevice.h + mdp:/usr/include/qt6/QtCore/qflags.h + mdp:/usr/include/qt6/QtCore/qfloat16.h + mdp:/usr/include/qt6/QtCore/qforeach.h + mdp:/usr/include/qt6/QtCore/qfunctionaltools_impl.h + mdp:/usr/include/qt6/QtCore/qfunctionpointer.h + mdp:/usr/include/qt6/QtCore/qgenericatomic.h + mdp:/usr/include/qt6/QtCore/qglobal.h + mdp:/usr/include/qt6/QtCore/qglobalstatic.h + mdp:/usr/include/qt6/QtCore/qhash.h + mdp:/usr/include/qt6/QtCore/qhashfunctions.h + mdp:/usr/include/qt6/QtCore/qiodevice.h + mdp:/usr/include/qt6/QtCore/qiodevicebase.h + mdp:/usr/include/qt6/QtCore/qiterable.h + mdp:/usr/include/qt6/QtCore/qiterator.h + mdp:/usr/include/qt6/QtCore/qlatin1stringview.h + mdp:/usr/include/qt6/QtCore/qlist.h + mdp:/usr/include/qt6/QtCore/qlocale.h + mdp:/usr/include/qt6/QtCore/qlogging.h + mdp:/usr/include/qt6/QtCore/qmalloc.h + mdp:/usr/include/qt6/QtCore/qmap.h + mdp:/usr/include/qt6/QtCore/qmath.h + mdp:/usr/include/qt6/QtCore/qmetacontainer.h + mdp:/usr/include/qt6/QtCore/qmetatype.h + mdp:/usr/include/qt6/QtCore/qminmax.h + mdp:/usr/include/qt6/QtCore/qmutex.h + mdp:/usr/include/qt6/QtCore/qnamespace.h + mdp:/usr/include/qt6/QtCore/qnumeric.h + mdp:/usr/include/qt6/QtCore/qobject.h + mdp:/usr/include/qt6/QtCore/qobject_impl.h + mdp:/usr/include/qt6/QtCore/qobjectdefs.h + mdp:/usr/include/qt6/QtCore/qobjectdefs_impl.h + mdp:/usr/include/qt6/QtCore/qoverload.h + mdp:/usr/include/qt6/QtCore/qpair.h + mdp:/usr/include/qt6/QtCore/qprocessordetection.h + mdp:/usr/include/qt6/QtCore/qrefcount.h + mdp:/usr/include/qt6/QtCore/qscopedpointer.h + mdp:/usr/include/qt6/QtCore/qscopeguard.h + mdp:/usr/include/qt6/QtCore/qset.h + mdp:/usr/include/qt6/QtCore/qshareddata.h + mdp:/usr/include/qt6/QtCore/qshareddata_impl.h + mdp:/usr/include/qt6/QtCore/qsharedpointer.h + mdp:/usr/include/qt6/QtCore/qsharedpointer_impl.h + mdp:/usr/include/qt6/QtCore/qspan.h + mdp:/usr/include/qt6/QtCore/qstdlibdetection.h + mdp:/usr/include/qt6/QtCore/qstring.h + mdp:/usr/include/qt6/QtCore/qstringalgorithms.h + mdp:/usr/include/qt6/QtCore/qstringbuilder.h + mdp:/usr/include/qt6/QtCore/qstringconverter.h + mdp:/usr/include/qt6/QtCore/qstringconverter_base.h + mdp:/usr/include/qt6/QtCore/qstringfwd.h + mdp:/usr/include/qt6/QtCore/qstringlist.h + mdp:/usr/include/qt6/QtCore/qstringmatcher.h + mdp:/usr/include/qt6/QtCore/qstringtokenizer.h + mdp:/usr/include/qt6/QtCore/qstringview.h + mdp:/usr/include/qt6/QtCore/qswap.h + mdp:/usr/include/qt6/QtCore/qsysinfo.h + mdp:/usr/include/qt6/QtCore/qsystemdetection.h + mdp:/usr/include/qt6/QtCore/qtaggedpointer.h + mdp:/usr/include/qt6/QtCore/qtclasshelpermacros.h + mdp:/usr/include/qt6/QtCore/qtconfiginclude.h + mdp:/usr/include/qt6/QtCore/qtconfigmacros.h + mdp:/usr/include/qt6/QtCore/qtcore-config.h + mdp:/usr/include/qt6/QtCore/qtcoreexports.h + mdp:/usr/include/qt6/QtCore/qtcoreglobal.h + mdp:/usr/include/qt6/QtCore/qtdeprecationdefinitions.h + mdp:/usr/include/qt6/QtCore/qtdeprecationmarkers.h + mdp:/usr/include/qt6/QtCore/qtenvironmentvariables.h + mdp:/usr/include/qt6/QtCore/qtextstream.h + mdp:/usr/include/qt6/QtCore/qtformat_impl.h + mdp:/usr/include/qt6/QtCore/qtmetamacros.h + mdp:/usr/include/qt6/QtCore/qtnoop.h + mdp:/usr/include/qt6/QtCore/qtpreprocessorsupport.h + mdp:/usr/include/qt6/QtCore/qtresource.h + mdp:/usr/include/qt6/QtCore/qtsan_impl.h + mdp:/usr/include/qt6/QtCore/qttranslation.h + mdp:/usr/include/qt6/QtCore/qttypetraits.h + mdp:/usr/include/qt6/QtCore/qtversion.h + mdp:/usr/include/qt6/QtCore/qtversionchecks.h + mdp:/usr/include/qt6/QtCore/qtypeinfo.h + mdp:/usr/include/qt6/QtCore/qtypes.h + mdp:/usr/include/qt6/QtCore/qutf8stringview.h + mdp:/usr/include/qt6/QtCore/qvariant.h + mdp:/usr/include/qt6/QtCore/qvarlengtharray.h + mdp:/usr/include/qt6/QtCore/qversiontagging.h + mdp:/usr/include/qt6/QtCore/qxptype_traits.h + mdp:/usr/include/qt6/QtCore/qyieldcpu.h + mdp:/usr/include/sched.h + mdp:/usr/include/stdc-predef.h + mdp:/usr/include/stdint.h + mdp:/usr/include/stdio.h + mdp:/usr/include/stdlib.h + mdp:/usr/include/string.h + mdp:/usr/include/strings.h + mdp:/usr/include/sys/cdefs.h + mdp:/usr/include/sys/select.h + mdp:/usr/include/sys/single_threaded.h + mdp:/usr/include/sys/syscall.h + mdp:/usr/include/sys/types.h + mdp:/usr/include/syscall.h + mdp:/usr/include/time.h + mdp:/usr/include/unistd.h + mdp:/usr/include/wchar.h + mdp:/usr/include/wctype.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stdarg.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stdbool.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stddef.h +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/assets_model.cpp +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/db.h + mmc:Q_OBJECT + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_models_autogen/moc_predefs.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/db.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/i_asset_database.h + mdp:/usr/include/alloca.h + mdp:/usr/include/asm-generic/bitsperlong.h + mdp:/usr/include/asm-generic/errno-base.h + mdp:/usr/include/asm-generic/errno.h + mdp:/usr/include/asm-generic/int-ll64.h + mdp:/usr/include/asm-generic/posix_types.h + mdp:/usr/include/asm-generic/types.h + mdp:/usr/include/asm/bitsperlong.h + mdp:/usr/include/asm/errno.h + mdp:/usr/include/asm/posix_types.h + mdp:/usr/include/asm/posix_types_64.h + mdp:/usr/include/asm/types.h + mdp:/usr/include/asm/unistd.h + mdp:/usr/include/asm/unistd_64.h + mdp:/usr/include/assert.h + mdp:/usr/include/bits/atomic_wide_counter.h + mdp:/usr/include/bits/byteswap.h + mdp:/usr/include/bits/confname.h + mdp:/usr/include/bits/cpu-set.h + mdp:/usr/include/bits/endian.h + mdp:/usr/include/bits/endianness.h + mdp:/usr/include/bits/environments.h + mdp:/usr/include/bits/errno.h + mdp:/usr/include/bits/floatn-common.h + mdp:/usr/include/bits/floatn.h + mdp:/usr/include/bits/getopt_core.h + mdp:/usr/include/bits/getopt_posix.h + mdp:/usr/include/bits/libc-header-start.h + mdp:/usr/include/bits/local_lim.h + mdp:/usr/include/bits/locale.h + mdp:/usr/include/bits/long-double.h + mdp:/usr/include/bits/posix1_lim.h + mdp:/usr/include/bits/posix2_lim.h + mdp:/usr/include/bits/posix_opt.h + mdp:/usr/include/bits/pthread_stack_min-dynamic.h + mdp:/usr/include/bits/pthreadtypes-arch.h + mdp:/usr/include/bits/pthreadtypes.h + mdp:/usr/include/bits/sched.h + mdp:/usr/include/bits/select.h + mdp:/usr/include/bits/setjmp.h + mdp:/usr/include/bits/stdint-intn.h + mdp:/usr/include/bits/stdint-least.h + mdp:/usr/include/bits/stdint-uintn.h + mdp:/usr/include/bits/stdio_lim.h + mdp:/usr/include/bits/stdlib-float.h + mdp:/usr/include/bits/struct_mutex.h + mdp:/usr/include/bits/struct_rwlock.h + mdp:/usr/include/bits/syscall.h + mdp:/usr/include/bits/thread-shared-types.h + mdp:/usr/include/bits/time.h + mdp:/usr/include/bits/time64.h + mdp:/usr/include/bits/timesize.h + mdp:/usr/include/bits/timex.h + mdp:/usr/include/bits/types.h + mdp:/usr/include/bits/types/FILE.h + mdp:/usr/include/bits/types/__FILE.h + mdp:/usr/include/bits/types/__fpos64_t.h + mdp:/usr/include/bits/types/__fpos_t.h + mdp:/usr/include/bits/types/__locale_t.h + mdp:/usr/include/bits/types/__mbstate_t.h + mdp:/usr/include/bits/types/__sigset_t.h + mdp:/usr/include/bits/types/clock_t.h + mdp:/usr/include/bits/types/clockid_t.h + mdp:/usr/include/bits/types/cookie_io_functions_t.h + mdp:/usr/include/bits/types/error_t.h + mdp:/usr/include/bits/types/locale_t.h + mdp:/usr/include/bits/types/mbstate_t.h + mdp:/usr/include/bits/types/sigset_t.h + mdp:/usr/include/bits/types/struct_FILE.h + mdp:/usr/include/bits/types/struct___jmp_buf_tag.h + mdp:/usr/include/bits/types/struct_itimerspec.h + mdp:/usr/include/bits/types/struct_sched_param.h + mdp:/usr/include/bits/types/struct_timespec.h + mdp:/usr/include/bits/types/struct_timeval.h + mdp:/usr/include/bits/types/struct_tm.h + mdp:/usr/include/bits/types/time_t.h + mdp:/usr/include/bits/types/timer_t.h + mdp:/usr/include/bits/types/wint_t.h + mdp:/usr/include/bits/typesizes.h + mdp:/usr/include/bits/uintn-identity.h + mdp:/usr/include/bits/uio_lim.h + mdp:/usr/include/bits/unistd_ext.h + mdp:/usr/include/bits/waitflags.h + mdp:/usr/include/bits/waitstatus.h + mdp:/usr/include/bits/wchar.h + mdp:/usr/include/bits/wctype-wchar.h + mdp:/usr/include/bits/wordsize.h + mdp:/usr/include/bits/xopen_lim.h + mdp:/usr/include/c++/15/algorithm + mdp:/usr/include/c++/15/array + mdp:/usr/include/c++/15/atomic + mdp:/usr/include/c++/15/backward/auto_ptr.h + mdp:/usr/include/c++/15/backward/binders.h + mdp:/usr/include/c++/15/bit + mdp:/usr/include/c++/15/bits/algorithmfwd.h + mdp:/usr/include/c++/15/bits/align.h + mdp:/usr/include/c++/15/bits/alloc_traits.h + mdp:/usr/include/c++/15/bits/allocated_ptr.h + mdp:/usr/include/c++/15/bits/allocator.h + mdp:/usr/include/c++/15/bits/atomic_base.h + mdp:/usr/include/c++/15/bits/atomic_lockfree_defines.h + mdp:/usr/include/c++/15/bits/atomic_wait.h + mdp:/usr/include/c++/15/bits/basic_ios.h + mdp:/usr/include/c++/15/bits/basic_ios.tcc + mdp:/usr/include/c++/15/bits/basic_string.h + mdp:/usr/include/c++/15/bits/basic_string.tcc + mdp:/usr/include/c++/15/bits/char_traits.h + mdp:/usr/include/c++/15/bits/charconv.h + mdp:/usr/include/c++/15/bits/chrono.h + mdp:/usr/include/c++/15/bits/chrono_io.h + mdp:/usr/include/c++/15/bits/codecvt.h + mdp:/usr/include/c++/15/bits/concept_check.h + mdp:/usr/include/c++/15/bits/cpp_type_traits.h + mdp:/usr/include/c++/15/bits/cxxabi_forced.h + mdp:/usr/include/c++/15/bits/cxxabi_init_exception.h + mdp:/usr/include/c++/15/bits/enable_special_members.h + mdp:/usr/include/c++/15/bits/erase_if.h + mdp:/usr/include/c++/15/bits/exception.h + mdp:/usr/include/c++/15/bits/exception_defines.h + mdp:/usr/include/c++/15/bits/exception_ptr.h + mdp:/usr/include/c++/15/bits/functexcept.h + mdp:/usr/include/c++/15/bits/functional_hash.h + mdp:/usr/include/c++/15/bits/hash_bytes.h + mdp:/usr/include/c++/15/bits/hashtable.h + mdp:/usr/include/c++/15/bits/hashtable_policy.h + mdp:/usr/include/c++/15/bits/invoke.h + mdp:/usr/include/c++/15/bits/ios_base.h + mdp:/usr/include/c++/15/bits/istream.tcc + mdp:/usr/include/c++/15/bits/iterator_concepts.h + mdp:/usr/include/c++/15/bits/list.tcc + mdp:/usr/include/c++/15/bits/locale_classes.h + mdp:/usr/include/c++/15/bits/locale_classes.tcc + mdp:/usr/include/c++/15/bits/locale_conv.h + mdp:/usr/include/c++/15/bits/locale_facets.h + mdp:/usr/include/c++/15/bits/locale_facets.tcc + mdp:/usr/include/c++/15/bits/locale_facets_nonio.h + mdp:/usr/include/c++/15/bits/locale_facets_nonio.tcc + mdp:/usr/include/c++/15/bits/localefwd.h + mdp:/usr/include/c++/15/bits/max_size_type.h + mdp:/usr/include/c++/15/bits/memory_resource.h + mdp:/usr/include/c++/15/bits/memoryfwd.h + mdp:/usr/include/c++/15/bits/move.h + mdp:/usr/include/c++/15/bits/nested_exception.h + mdp:/usr/include/c++/15/bits/new_allocator.h + mdp:/usr/include/c++/15/bits/node_handle.h + mdp:/usr/include/c++/15/bits/ostream.h + mdp:/usr/include/c++/15/bits/ostream.tcc + mdp:/usr/include/c++/15/bits/ostream_insert.h + mdp:/usr/include/c++/15/bits/parse_numbers.h + mdp:/usr/include/c++/15/bits/postypes.h + mdp:/usr/include/c++/15/bits/predefined_ops.h + mdp:/usr/include/c++/15/bits/ptr_traits.h + mdp:/usr/include/c++/15/bits/quoted_string.h + mdp:/usr/include/c++/15/bits/range_access.h + mdp:/usr/include/c++/15/bits/ranges_algo.h + mdp:/usr/include/c++/15/bits/ranges_algobase.h + mdp:/usr/include/c++/15/bits/ranges_base.h + mdp:/usr/include/c++/15/bits/ranges_cmp.h + mdp:/usr/include/c++/15/bits/ranges_uninitialized.h + mdp:/usr/include/c++/15/bits/ranges_util.h + mdp:/usr/include/c++/15/bits/refwrap.h + mdp:/usr/include/c++/15/bits/requires_hosted.h + mdp:/usr/include/c++/15/bits/shared_ptr.h + mdp:/usr/include/c++/15/bits/shared_ptr_atomic.h + mdp:/usr/include/c++/15/bits/shared_ptr_base.h + mdp:/usr/include/c++/15/bits/specfun.h + mdp:/usr/include/c++/15/bits/sstream.tcc + mdp:/usr/include/c++/15/bits/std_abs.h + mdp:/usr/include/c++/15/bits/std_function.h + mdp:/usr/include/c++/15/bits/std_mutex.h + mdp:/usr/include/c++/15/bits/stl_algo.h + mdp:/usr/include/c++/15/bits/stl_algobase.h + mdp:/usr/include/c++/15/bits/stl_bvector.h + mdp:/usr/include/c++/15/bits/stl_construct.h + mdp:/usr/include/c++/15/bits/stl_function.h + mdp:/usr/include/c++/15/bits/stl_heap.h + mdp:/usr/include/c++/15/bits/stl_iterator.h + mdp:/usr/include/c++/15/bits/stl_iterator_base_funcs.h + mdp:/usr/include/c++/15/bits/stl_iterator_base_types.h + mdp:/usr/include/c++/15/bits/stl_list.h + mdp:/usr/include/c++/15/bits/stl_map.h + mdp:/usr/include/c++/15/bits/stl_multimap.h + mdp:/usr/include/c++/15/bits/stl_multiset.h + mdp:/usr/include/c++/15/bits/stl_numeric.h + mdp:/usr/include/c++/15/bits/stl_pair.h + mdp:/usr/include/c++/15/bits/stl_raw_storage_iter.h + mdp:/usr/include/c++/15/bits/stl_relops.h + mdp:/usr/include/c++/15/bits/stl_set.h + mdp:/usr/include/c++/15/bits/stl_tempbuf.h + mdp:/usr/include/c++/15/bits/stl_tree.h + mdp:/usr/include/c++/15/bits/stl_uninitialized.h + mdp:/usr/include/c++/15/bits/stl_vector.h + mdp:/usr/include/c++/15/bits/stream_iterator.h + mdp:/usr/include/c++/15/bits/streambuf.tcc + mdp:/usr/include/c++/15/bits/streambuf_iterator.h + mdp:/usr/include/c++/15/bits/string_view.tcc + mdp:/usr/include/c++/15/bits/stringfwd.h + mdp:/usr/include/c++/15/bits/uniform_int_dist.h + mdp:/usr/include/c++/15/bits/unique_ptr.h + mdp:/usr/include/c++/15/bits/unordered_map.h + mdp:/usr/include/c++/15/bits/unordered_set.h + mdp:/usr/include/c++/15/bits/uses_allocator.h + mdp:/usr/include/c++/15/bits/uses_allocator_args.h + mdp:/usr/include/c++/15/bits/utility.h + mdp:/usr/include/c++/15/bits/vector.tcc + mdp:/usr/include/c++/15/bits/version.h + mdp:/usr/include/c++/15/cassert + mdp:/usr/include/c++/15/cctype + mdp:/usr/include/c++/15/cerrno + mdp:/usr/include/c++/15/charconv + mdp:/usr/include/c++/15/chrono + mdp:/usr/include/c++/15/climits + mdp:/usr/include/c++/15/clocale + mdp:/usr/include/c++/15/cmath + mdp:/usr/include/c++/15/compare + mdp:/usr/include/c++/15/concepts + mdp:/usr/include/c++/15/cstddef + mdp:/usr/include/c++/15/cstdint + mdp:/usr/include/c++/15/cstdio + mdp:/usr/include/c++/15/cstdlib + mdp:/usr/include/c++/15/cstring + mdp:/usr/include/c++/15/ctime + mdp:/usr/include/c++/15/cwchar + mdp:/usr/include/c++/15/cwctype + mdp:/usr/include/c++/15/debug/assertions.h + mdp:/usr/include/c++/15/debug/debug.h + mdp:/usr/include/c++/15/exception + mdp:/usr/include/c++/15/ext/aligned_buffer.h + mdp:/usr/include/c++/15/ext/alloc_traits.h + mdp:/usr/include/c++/15/ext/atomicity.h + mdp:/usr/include/c++/15/ext/concurrence.h + mdp:/usr/include/c++/15/ext/numeric_traits.h + mdp:/usr/include/c++/15/ext/string_conversions.h + mdp:/usr/include/c++/15/ext/type_traits.h + mdp:/usr/include/c++/15/filesystem + mdp:/usr/include/c++/15/format + mdp:/usr/include/c++/15/functional + mdp:/usr/include/c++/15/initializer_list + mdp:/usr/include/c++/15/iomanip + mdp:/usr/include/c++/15/ios + mdp:/usr/include/c++/15/iosfwd + mdp:/usr/include/c++/15/istream + mdp:/usr/include/c++/15/iterator + mdp:/usr/include/c++/15/limits + mdp:/usr/include/c++/15/list + mdp:/usr/include/c++/15/locale + mdp:/usr/include/c++/15/map + mdp:/usr/include/c++/15/memory + mdp:/usr/include/c++/15/new + mdp:/usr/include/c++/15/numeric + mdp:/usr/include/c++/15/optional + mdp:/usr/include/c++/15/ostream + mdp:/usr/include/c++/15/pstl/execution_defs.h + mdp:/usr/include/c++/15/pstl/glue_numeric_defs.h + mdp:/usr/include/c++/15/pstl/pstl_config.h + mdp:/usr/include/c++/15/ratio + mdp:/usr/include/c++/15/set + mdp:/usr/include/c++/15/sstream + mdp:/usr/include/c++/15/stdexcept + mdp:/usr/include/c++/15/streambuf + mdp:/usr/include/c++/15/string + mdp:/usr/include/c++/15/string_view + mdp:/usr/include/c++/15/system_error + mdp:/usr/include/c++/15/tr1/bessel_function.tcc + mdp:/usr/include/c++/15/tr1/beta_function.tcc + mdp:/usr/include/c++/15/tr1/ell_integral.tcc + mdp:/usr/include/c++/15/tr1/exp_integral.tcc + mdp:/usr/include/c++/15/tr1/gamma.tcc + mdp:/usr/include/c++/15/tr1/hypergeometric.tcc + mdp:/usr/include/c++/15/tr1/legendre_function.tcc + mdp:/usr/include/c++/15/tr1/modified_bessel_func.tcc + mdp:/usr/include/c++/15/tr1/poly_hermite.tcc + mdp:/usr/include/c++/15/tr1/poly_laguerre.tcc + mdp:/usr/include/c++/15/tr1/riemann_zeta.tcc + mdp:/usr/include/c++/15/tr1/special_function_util.h + mdp:/usr/include/c++/15/tuple + mdp:/usr/include/c++/15/type_traits + mdp:/usr/include/c++/15/typeinfo + mdp:/usr/include/c++/15/unordered_map + mdp:/usr/include/c++/15/unordered_set + mdp:/usr/include/c++/15/utility + mdp:/usr/include/c++/15/variant + mdp:/usr/include/c++/15/vector + mdp:/usr/include/c++/15/version + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/atomic_word.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++allocator.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++config.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++locale.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/cpu_defines.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/ctype_base.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/ctype_inline.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/error_constants.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/gthr-default.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/gthr.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/messages_members.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/os_defines.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/time_members.h + mdp:/usr/include/ctype.h + mdp:/usr/include/endian.h + mdp:/usr/include/errno.h + mdp:/usr/include/features-time64.h + mdp:/usr/include/features.h + mdp:/usr/include/gnu/stubs-64.h + mdp:/usr/include/gnu/stubs.h + mdp:/usr/include/libintl.h + mdp:/usr/include/limits.h + mdp:/usr/include/linux/close_range.h + mdp:/usr/include/linux/errno.h + mdp:/usr/include/linux/limits.h + mdp:/usr/include/linux/posix_types.h + mdp:/usr/include/linux/sched/types.h + mdp:/usr/include/linux/stddef.h + mdp:/usr/include/linux/types.h + mdp:/usr/include/locale.h + mdp:/usr/include/pthread.h + mdp:/usr/include/qt6/QtCore/QFileInfo + mdp:/usr/include/qt6/QtCore/QHash + mdp:/usr/include/qt6/QtCore/QObject + mdp:/usr/include/qt6/QtCore/QPair + mdp:/usr/include/qt6/QtCore/QString + mdp:/usr/include/qt6/QtCore/QStringList + mdp:/usr/include/qt6/QtCore/QVariant + mdp:/usr/include/qt6/QtCore/QVector + mdp:/usr/include/qt6/QtCore/q17memory.h + mdp:/usr/include/qt6/QtCore/q20functional.h + mdp:/usr/include/qt6/QtCore/q20iterator.h + mdp:/usr/include/qt6/QtCore/q20memory.h + mdp:/usr/include/qt6/QtCore/q20type_traits.h + mdp:/usr/include/qt6/QtCore/q20utility.h + mdp:/usr/include/qt6/QtCore/q23type_traits.h + mdp:/usr/include/qt6/QtCore/q23utility.h + mdp:/usr/include/qt6/QtCore/qalgorithms.h + mdp:/usr/include/qt6/QtCore/qalloc.h + mdp:/usr/include/qt6/QtCore/qanystringview.h + mdp:/usr/include/qt6/QtCore/qarraydata.h + mdp:/usr/include/qt6/QtCore/qarraydataops.h + mdp:/usr/include/qt6/QtCore/qarraydatapointer.h + mdp:/usr/include/qt6/QtCore/qassert.h + mdp:/usr/include/qt6/QtCore/qatomic.h + mdp:/usr/include/qt6/QtCore/qatomic_cxx11.h + mdp:/usr/include/qt6/QtCore/qbasicatomic.h + mdp:/usr/include/qt6/QtCore/qbindingstorage.h + mdp:/usr/include/qt6/QtCore/qbytearray.h + mdp:/usr/include/qt6/QtCore/qbytearrayalgorithms.h + mdp:/usr/include/qt6/QtCore/qbytearraylist.h + mdp:/usr/include/qt6/QtCore/qbytearrayview.h + mdp:/usr/include/qt6/QtCore/qcalendar.h + mdp:/usr/include/qt6/QtCore/qchar.h + mdp:/usr/include/qt6/QtCore/qcompare.h + mdp:/usr/include/qt6/QtCore/qcompare_impl.h + mdp:/usr/include/qt6/QtCore/qcomparehelpers.h + mdp:/usr/include/qt6/QtCore/qcompilerdetection.h + mdp:/usr/include/qt6/QtCore/qconfig-64.h + mdp:/usr/include/qt6/QtCore/qconfig.h + mdp:/usr/include/qt6/QtCore/qconstructormacros.h + mdp:/usr/include/qt6/QtCore/qcontainerfwd.h + mdp:/usr/include/qt6/QtCore/qcontainerinfo.h + mdp:/usr/include/qt6/QtCore/qcontainertools_impl.h + mdp:/usr/include/qt6/QtCore/qcontiguouscache.h + mdp:/usr/include/qt6/QtCore/qdarwinhelpers.h + mdp:/usr/include/qt6/QtCore/qdatastream.h + mdp:/usr/include/qt6/QtCore/qdatetime.h + mdp:/usr/include/qt6/QtCore/qdebug.h + mdp:/usr/include/qt6/QtCore/qexceptionhandling.h + mdp:/usr/include/qt6/QtCore/qfile.h + mdp:/usr/include/qt6/QtCore/qfiledevice.h + mdp:/usr/include/qt6/QtCore/qfileinfo.h + mdp:/usr/include/qt6/QtCore/qflags.h + mdp:/usr/include/qt6/QtCore/qfloat16.h + mdp:/usr/include/qt6/QtCore/qforeach.h + mdp:/usr/include/qt6/QtCore/qfunctionaltools_impl.h + mdp:/usr/include/qt6/QtCore/qfunctionpointer.h + mdp:/usr/include/qt6/QtCore/qgenericatomic.h + mdp:/usr/include/qt6/QtCore/qglobal.h + mdp:/usr/include/qt6/QtCore/qglobalstatic.h + mdp:/usr/include/qt6/QtCore/qhash.h + mdp:/usr/include/qt6/QtCore/qhashfunctions.h + mdp:/usr/include/qt6/QtCore/qiodevice.h + mdp:/usr/include/qt6/QtCore/qiodevicebase.h + mdp:/usr/include/qt6/QtCore/qiterable.h + mdp:/usr/include/qt6/QtCore/qiterator.h + mdp:/usr/include/qt6/QtCore/qlatin1stringview.h + mdp:/usr/include/qt6/QtCore/qlist.h + mdp:/usr/include/qt6/QtCore/qlocale.h + mdp:/usr/include/qt6/QtCore/qlogging.h + mdp:/usr/include/qt6/QtCore/qmalloc.h + mdp:/usr/include/qt6/QtCore/qmap.h + mdp:/usr/include/qt6/QtCore/qmath.h + mdp:/usr/include/qt6/QtCore/qmetacontainer.h + mdp:/usr/include/qt6/QtCore/qmetaobject.h + mdp:/usr/include/qt6/QtCore/qmetatype.h + mdp:/usr/include/qt6/QtCore/qminmax.h + mdp:/usr/include/qt6/QtCore/qnamespace.h + mdp:/usr/include/qt6/QtCore/qnumeric.h + mdp:/usr/include/qt6/QtCore/qobject.h + mdp:/usr/include/qt6/QtCore/qobject_impl.h + mdp:/usr/include/qt6/QtCore/qobjectdefs.h + mdp:/usr/include/qt6/QtCore/qobjectdefs_impl.h + mdp:/usr/include/qt6/QtCore/qoverload.h + mdp:/usr/include/qt6/QtCore/qpair.h + mdp:/usr/include/qt6/QtCore/qprocessordetection.h + mdp:/usr/include/qt6/QtCore/qrefcount.h + mdp:/usr/include/qt6/QtCore/qscopedpointer.h + mdp:/usr/include/qt6/QtCore/qscopeguard.h + mdp:/usr/include/qt6/QtCore/qset.h + mdp:/usr/include/qt6/QtCore/qshareddata.h + mdp:/usr/include/qt6/QtCore/qshareddata_impl.h + mdp:/usr/include/qt6/QtCore/qsharedpointer.h + mdp:/usr/include/qt6/QtCore/qsharedpointer_impl.h + mdp:/usr/include/qt6/QtCore/qspan.h + mdp:/usr/include/qt6/QtCore/qstdlibdetection.h + mdp:/usr/include/qt6/QtCore/qstring.h + mdp:/usr/include/qt6/QtCore/qstringalgorithms.h + mdp:/usr/include/qt6/QtCore/qstringbuilder.h + mdp:/usr/include/qt6/QtCore/qstringconverter.h + mdp:/usr/include/qt6/QtCore/qstringconverter_base.h + mdp:/usr/include/qt6/QtCore/qstringfwd.h + mdp:/usr/include/qt6/QtCore/qstringlist.h + mdp:/usr/include/qt6/QtCore/qstringmatcher.h + mdp:/usr/include/qt6/QtCore/qstringtokenizer.h + mdp:/usr/include/qt6/QtCore/qstringview.h + mdp:/usr/include/qt6/QtCore/qswap.h + mdp:/usr/include/qt6/QtCore/qsysinfo.h + mdp:/usr/include/qt6/QtCore/qsystemdetection.h + mdp:/usr/include/qt6/QtCore/qtaggedpointer.h + mdp:/usr/include/qt6/QtCore/qtclasshelpermacros.h + mdp:/usr/include/qt6/QtCore/qtconfiginclude.h + mdp:/usr/include/qt6/QtCore/qtconfigmacros.h + mdp:/usr/include/qt6/QtCore/qtcore-config.h + mdp:/usr/include/qt6/QtCore/qtcoreexports.h + mdp:/usr/include/qt6/QtCore/qtcoreglobal.h + mdp:/usr/include/qt6/QtCore/qtdeprecationdefinitions.h + mdp:/usr/include/qt6/QtCore/qtdeprecationmarkers.h + mdp:/usr/include/qt6/QtCore/qtenvironmentvariables.h + mdp:/usr/include/qt6/QtCore/qtextstream.h + mdp:/usr/include/qt6/QtCore/qtformat_impl.h + mdp:/usr/include/qt6/QtCore/qtimezone.h + mdp:/usr/include/qt6/QtCore/qtmetamacros.h + mdp:/usr/include/qt6/QtCore/qtnoop.h + mdp:/usr/include/qt6/QtCore/qtpreprocessorsupport.h + mdp:/usr/include/qt6/QtCore/qtresource.h + mdp:/usr/include/qt6/QtCore/qttranslation.h + mdp:/usr/include/qt6/QtCore/qttypetraits.h + mdp:/usr/include/qt6/QtCore/qtversion.h + mdp:/usr/include/qt6/QtCore/qtversionchecks.h + mdp:/usr/include/qt6/QtCore/qtypeinfo.h + mdp:/usr/include/qt6/QtCore/qtypes.h + mdp:/usr/include/qt6/QtCore/qutf8stringview.h + mdp:/usr/include/qt6/QtCore/qvariant.h + mdp:/usr/include/qt6/QtCore/qvarlengtharray.h + mdp:/usr/include/qt6/QtCore/qvector.h + mdp:/usr/include/qt6/QtCore/qversiontagging.h + mdp:/usr/include/qt6/QtCore/qxptype_traits.h + mdp:/usr/include/qt6/QtCore/qyieldcpu.h + mdp:/usr/include/qt6/QtSql/QSqlDatabase + mdp:/usr/include/qt6/QtSql/QSqlError + mdp:/usr/include/qt6/QtSql/QSqlQuery + mdp:/usr/include/qt6/QtSql/qsqldatabase.h + mdp:/usr/include/qt6/QtSql/qsqlerror.h + mdp:/usr/include/qt6/QtSql/qsqlquery.h + mdp:/usr/include/qt6/QtSql/qtsql-config.h + mdp:/usr/include/qt6/QtSql/qtsqlexports.h + mdp:/usr/include/qt6/QtSql/qtsqlglobal.h + mdp:/usr/include/sched.h + mdp:/usr/include/stdc-predef.h + mdp:/usr/include/stdint.h + mdp:/usr/include/stdio.h + mdp:/usr/include/stdlib.h + mdp:/usr/include/string.h + mdp:/usr/include/strings.h + mdp:/usr/include/sys/cdefs.h + mdp:/usr/include/sys/select.h + mdp:/usr/include/sys/single_threaded.h + mdp:/usr/include/sys/syscall.h + mdp:/usr/include/sys/types.h + mdp:/usr/include/syscall.h + mdp:/usr/include/time.h + mdp:/usr/include/unistd.h + mdp:/usr/include/wchar.h + mdp:/usr/include/wctype.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stdarg.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stdbool.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stddef.h +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/db.cpp +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/assets_model.h + mmc:Q_OBJECT + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_models_autogen/moc_predefs.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/assets_model.h + mdp:/usr/include/alloca.h + mdp:/usr/include/asm-generic/bitsperlong.h + mdp:/usr/include/asm-generic/errno-base.h + mdp:/usr/include/asm-generic/errno.h + mdp:/usr/include/asm-generic/int-ll64.h + mdp:/usr/include/asm-generic/posix_types.h + mdp:/usr/include/asm-generic/types.h + mdp:/usr/include/asm/bitsperlong.h + mdp:/usr/include/asm/errno.h + mdp:/usr/include/asm/posix_types.h + mdp:/usr/include/asm/posix_types_64.h + mdp:/usr/include/asm/types.h + mdp:/usr/include/asm/unistd.h + mdp:/usr/include/asm/unistd_64.h + mdp:/usr/include/assert.h + mdp:/usr/include/bits/atomic_wide_counter.h + mdp:/usr/include/bits/byteswap.h + mdp:/usr/include/bits/confname.h + mdp:/usr/include/bits/cpu-set.h + mdp:/usr/include/bits/endian.h + mdp:/usr/include/bits/endianness.h + mdp:/usr/include/bits/environments.h + mdp:/usr/include/bits/errno.h + mdp:/usr/include/bits/floatn-common.h + mdp:/usr/include/bits/floatn.h + mdp:/usr/include/bits/getopt_core.h + mdp:/usr/include/bits/getopt_posix.h + mdp:/usr/include/bits/libc-header-start.h + mdp:/usr/include/bits/local_lim.h + mdp:/usr/include/bits/locale.h + mdp:/usr/include/bits/long-double.h + mdp:/usr/include/bits/posix1_lim.h + mdp:/usr/include/bits/posix2_lim.h + mdp:/usr/include/bits/posix_opt.h + mdp:/usr/include/bits/pthread_stack_min-dynamic.h + mdp:/usr/include/bits/pthreadtypes-arch.h + mdp:/usr/include/bits/pthreadtypes.h + mdp:/usr/include/bits/sched.h + mdp:/usr/include/bits/select.h + mdp:/usr/include/bits/setjmp.h + mdp:/usr/include/bits/stdint-intn.h + mdp:/usr/include/bits/stdint-least.h + mdp:/usr/include/bits/stdint-uintn.h + mdp:/usr/include/bits/stdio_lim.h + mdp:/usr/include/bits/stdlib-float.h + mdp:/usr/include/bits/struct_mutex.h + mdp:/usr/include/bits/struct_rwlock.h + mdp:/usr/include/bits/syscall.h + mdp:/usr/include/bits/thread-shared-types.h + mdp:/usr/include/bits/time.h + mdp:/usr/include/bits/time64.h + mdp:/usr/include/bits/timesize.h + mdp:/usr/include/bits/timex.h + mdp:/usr/include/bits/types.h + mdp:/usr/include/bits/types/FILE.h + mdp:/usr/include/bits/types/__FILE.h + mdp:/usr/include/bits/types/__fpos64_t.h + mdp:/usr/include/bits/types/__fpos_t.h + mdp:/usr/include/bits/types/__locale_t.h + mdp:/usr/include/bits/types/__mbstate_t.h + mdp:/usr/include/bits/types/__sigset_t.h + mdp:/usr/include/bits/types/clock_t.h + mdp:/usr/include/bits/types/clockid_t.h + mdp:/usr/include/bits/types/cookie_io_functions_t.h + mdp:/usr/include/bits/types/error_t.h + mdp:/usr/include/bits/types/locale_t.h + mdp:/usr/include/bits/types/mbstate_t.h + mdp:/usr/include/bits/types/sigset_t.h + mdp:/usr/include/bits/types/struct_FILE.h + mdp:/usr/include/bits/types/struct___jmp_buf_tag.h + mdp:/usr/include/bits/types/struct_itimerspec.h + mdp:/usr/include/bits/types/struct_sched_param.h + mdp:/usr/include/bits/types/struct_timespec.h + mdp:/usr/include/bits/types/struct_timeval.h + mdp:/usr/include/bits/types/struct_tm.h + mdp:/usr/include/bits/types/time_t.h + mdp:/usr/include/bits/types/timer_t.h + mdp:/usr/include/bits/types/wint_t.h + mdp:/usr/include/bits/typesizes.h + mdp:/usr/include/bits/uintn-identity.h + mdp:/usr/include/bits/uio_lim.h + mdp:/usr/include/bits/unistd_ext.h + mdp:/usr/include/bits/waitflags.h + mdp:/usr/include/bits/waitstatus.h + mdp:/usr/include/bits/wchar.h + mdp:/usr/include/bits/wctype-wchar.h + mdp:/usr/include/bits/wordsize.h + mdp:/usr/include/bits/xopen_lim.h + mdp:/usr/include/c++/15/algorithm + mdp:/usr/include/c++/15/array + mdp:/usr/include/c++/15/atomic + mdp:/usr/include/c++/15/backward/auto_ptr.h + mdp:/usr/include/c++/15/backward/binders.h + mdp:/usr/include/c++/15/bit + mdp:/usr/include/c++/15/bits/algorithmfwd.h + mdp:/usr/include/c++/15/bits/align.h + mdp:/usr/include/c++/15/bits/alloc_traits.h + mdp:/usr/include/c++/15/bits/allocated_ptr.h + mdp:/usr/include/c++/15/bits/allocator.h + mdp:/usr/include/c++/15/bits/atomic_base.h + mdp:/usr/include/c++/15/bits/atomic_lockfree_defines.h + mdp:/usr/include/c++/15/bits/atomic_wait.h + mdp:/usr/include/c++/15/bits/basic_ios.h + mdp:/usr/include/c++/15/bits/basic_ios.tcc + mdp:/usr/include/c++/15/bits/basic_string.h + mdp:/usr/include/c++/15/bits/basic_string.tcc + mdp:/usr/include/c++/15/bits/char_traits.h + mdp:/usr/include/c++/15/bits/charconv.h + mdp:/usr/include/c++/15/bits/chrono.h + mdp:/usr/include/c++/15/bits/chrono_io.h + mdp:/usr/include/c++/15/bits/codecvt.h + mdp:/usr/include/c++/15/bits/concept_check.h + mdp:/usr/include/c++/15/bits/cpp_type_traits.h + mdp:/usr/include/c++/15/bits/cxxabi_forced.h + mdp:/usr/include/c++/15/bits/cxxabi_init_exception.h + mdp:/usr/include/c++/15/bits/enable_special_members.h + mdp:/usr/include/c++/15/bits/erase_if.h + mdp:/usr/include/c++/15/bits/exception.h + mdp:/usr/include/c++/15/bits/exception_defines.h + mdp:/usr/include/c++/15/bits/exception_ptr.h + mdp:/usr/include/c++/15/bits/functexcept.h + mdp:/usr/include/c++/15/bits/functional_hash.h + mdp:/usr/include/c++/15/bits/hash_bytes.h + mdp:/usr/include/c++/15/bits/hashtable.h + mdp:/usr/include/c++/15/bits/hashtable_policy.h + mdp:/usr/include/c++/15/bits/invoke.h + mdp:/usr/include/c++/15/bits/ios_base.h + mdp:/usr/include/c++/15/bits/istream.tcc + mdp:/usr/include/c++/15/bits/iterator_concepts.h + mdp:/usr/include/c++/15/bits/list.tcc + mdp:/usr/include/c++/15/bits/locale_classes.h + mdp:/usr/include/c++/15/bits/locale_classes.tcc + mdp:/usr/include/c++/15/bits/locale_conv.h + mdp:/usr/include/c++/15/bits/locale_facets.h + mdp:/usr/include/c++/15/bits/locale_facets.tcc + mdp:/usr/include/c++/15/bits/locale_facets_nonio.h + mdp:/usr/include/c++/15/bits/locale_facets_nonio.tcc + mdp:/usr/include/c++/15/bits/localefwd.h + mdp:/usr/include/c++/15/bits/max_size_type.h + mdp:/usr/include/c++/15/bits/memory_resource.h + mdp:/usr/include/c++/15/bits/memoryfwd.h + mdp:/usr/include/c++/15/bits/move.h + mdp:/usr/include/c++/15/bits/nested_exception.h + mdp:/usr/include/c++/15/bits/new_allocator.h + mdp:/usr/include/c++/15/bits/node_handle.h + mdp:/usr/include/c++/15/bits/ostream.h + mdp:/usr/include/c++/15/bits/ostream.tcc + mdp:/usr/include/c++/15/bits/ostream_insert.h + mdp:/usr/include/c++/15/bits/parse_numbers.h + mdp:/usr/include/c++/15/bits/postypes.h + mdp:/usr/include/c++/15/bits/predefined_ops.h + mdp:/usr/include/c++/15/bits/ptr_traits.h + mdp:/usr/include/c++/15/bits/quoted_string.h + mdp:/usr/include/c++/15/bits/range_access.h + mdp:/usr/include/c++/15/bits/ranges_algo.h + mdp:/usr/include/c++/15/bits/ranges_algobase.h + mdp:/usr/include/c++/15/bits/ranges_base.h + mdp:/usr/include/c++/15/bits/ranges_cmp.h + mdp:/usr/include/c++/15/bits/ranges_uninitialized.h + mdp:/usr/include/c++/15/bits/ranges_util.h + mdp:/usr/include/c++/15/bits/refwrap.h + mdp:/usr/include/c++/15/bits/requires_hosted.h + mdp:/usr/include/c++/15/bits/shared_ptr.h + mdp:/usr/include/c++/15/bits/shared_ptr_atomic.h + mdp:/usr/include/c++/15/bits/shared_ptr_base.h + mdp:/usr/include/c++/15/bits/specfun.h + mdp:/usr/include/c++/15/bits/sstream.tcc + mdp:/usr/include/c++/15/bits/std_abs.h + mdp:/usr/include/c++/15/bits/std_function.h + mdp:/usr/include/c++/15/bits/std_mutex.h + mdp:/usr/include/c++/15/bits/stl_algo.h + mdp:/usr/include/c++/15/bits/stl_algobase.h + mdp:/usr/include/c++/15/bits/stl_bvector.h + mdp:/usr/include/c++/15/bits/stl_construct.h + mdp:/usr/include/c++/15/bits/stl_function.h + mdp:/usr/include/c++/15/bits/stl_heap.h + mdp:/usr/include/c++/15/bits/stl_iterator.h + mdp:/usr/include/c++/15/bits/stl_iterator_base_funcs.h + mdp:/usr/include/c++/15/bits/stl_iterator_base_types.h + mdp:/usr/include/c++/15/bits/stl_list.h + mdp:/usr/include/c++/15/bits/stl_map.h + mdp:/usr/include/c++/15/bits/stl_multimap.h + mdp:/usr/include/c++/15/bits/stl_multiset.h + mdp:/usr/include/c++/15/bits/stl_numeric.h + mdp:/usr/include/c++/15/bits/stl_pair.h + mdp:/usr/include/c++/15/bits/stl_raw_storage_iter.h + mdp:/usr/include/c++/15/bits/stl_relops.h + mdp:/usr/include/c++/15/bits/stl_set.h + mdp:/usr/include/c++/15/bits/stl_tempbuf.h + mdp:/usr/include/c++/15/bits/stl_tree.h + mdp:/usr/include/c++/15/bits/stl_uninitialized.h + mdp:/usr/include/c++/15/bits/stl_vector.h + mdp:/usr/include/c++/15/bits/stream_iterator.h + mdp:/usr/include/c++/15/bits/streambuf.tcc + mdp:/usr/include/c++/15/bits/streambuf_iterator.h + mdp:/usr/include/c++/15/bits/string_view.tcc + mdp:/usr/include/c++/15/bits/stringfwd.h + mdp:/usr/include/c++/15/bits/uniform_int_dist.h + mdp:/usr/include/c++/15/bits/unique_ptr.h + mdp:/usr/include/c++/15/bits/unordered_map.h + mdp:/usr/include/c++/15/bits/unordered_set.h + mdp:/usr/include/c++/15/bits/uses_allocator.h + mdp:/usr/include/c++/15/bits/uses_allocator_args.h + mdp:/usr/include/c++/15/bits/utility.h + mdp:/usr/include/c++/15/bits/vector.tcc + mdp:/usr/include/c++/15/bits/version.h + mdp:/usr/include/c++/15/cassert + mdp:/usr/include/c++/15/cctype + mdp:/usr/include/c++/15/cerrno + mdp:/usr/include/c++/15/charconv + mdp:/usr/include/c++/15/chrono + mdp:/usr/include/c++/15/climits + mdp:/usr/include/c++/15/clocale + mdp:/usr/include/c++/15/cmath + mdp:/usr/include/c++/15/compare + mdp:/usr/include/c++/15/concepts + mdp:/usr/include/c++/15/cstddef + mdp:/usr/include/c++/15/cstdint + mdp:/usr/include/c++/15/cstdio + mdp:/usr/include/c++/15/cstdlib + mdp:/usr/include/c++/15/cstring + mdp:/usr/include/c++/15/ctime + mdp:/usr/include/c++/15/cwchar + mdp:/usr/include/c++/15/cwctype + mdp:/usr/include/c++/15/debug/assertions.h + mdp:/usr/include/c++/15/debug/debug.h + mdp:/usr/include/c++/15/exception + mdp:/usr/include/c++/15/ext/aligned_buffer.h + mdp:/usr/include/c++/15/ext/alloc_traits.h + mdp:/usr/include/c++/15/ext/atomicity.h + mdp:/usr/include/c++/15/ext/concurrence.h + mdp:/usr/include/c++/15/ext/numeric_traits.h + mdp:/usr/include/c++/15/ext/string_conversions.h + mdp:/usr/include/c++/15/ext/type_traits.h + mdp:/usr/include/c++/15/format + mdp:/usr/include/c++/15/functional + mdp:/usr/include/c++/15/initializer_list + mdp:/usr/include/c++/15/iomanip + mdp:/usr/include/c++/15/ios + mdp:/usr/include/c++/15/iosfwd + mdp:/usr/include/c++/15/istream + mdp:/usr/include/c++/15/iterator + mdp:/usr/include/c++/15/limits + mdp:/usr/include/c++/15/list + mdp:/usr/include/c++/15/locale + mdp:/usr/include/c++/15/map + mdp:/usr/include/c++/15/memory + mdp:/usr/include/c++/15/new + mdp:/usr/include/c++/15/numeric + mdp:/usr/include/c++/15/optional + mdp:/usr/include/c++/15/ostream + mdp:/usr/include/c++/15/pstl/execution_defs.h + mdp:/usr/include/c++/15/pstl/glue_numeric_defs.h + mdp:/usr/include/c++/15/pstl/pstl_config.h + mdp:/usr/include/c++/15/ratio + mdp:/usr/include/c++/15/set + mdp:/usr/include/c++/15/sstream + mdp:/usr/include/c++/15/stdexcept + mdp:/usr/include/c++/15/streambuf + mdp:/usr/include/c++/15/string + mdp:/usr/include/c++/15/string_view + mdp:/usr/include/c++/15/system_error + mdp:/usr/include/c++/15/tr1/bessel_function.tcc + mdp:/usr/include/c++/15/tr1/beta_function.tcc + mdp:/usr/include/c++/15/tr1/ell_integral.tcc + mdp:/usr/include/c++/15/tr1/exp_integral.tcc + mdp:/usr/include/c++/15/tr1/gamma.tcc + mdp:/usr/include/c++/15/tr1/hypergeometric.tcc + mdp:/usr/include/c++/15/tr1/legendre_function.tcc + mdp:/usr/include/c++/15/tr1/modified_bessel_func.tcc + mdp:/usr/include/c++/15/tr1/poly_hermite.tcc + mdp:/usr/include/c++/15/tr1/poly_laguerre.tcc + mdp:/usr/include/c++/15/tr1/riemann_zeta.tcc + mdp:/usr/include/c++/15/tr1/special_function_util.h + mdp:/usr/include/c++/15/tuple + mdp:/usr/include/c++/15/type_traits + mdp:/usr/include/c++/15/typeinfo + mdp:/usr/include/c++/15/unordered_map + mdp:/usr/include/c++/15/unordered_set + mdp:/usr/include/c++/15/utility + mdp:/usr/include/c++/15/variant + mdp:/usr/include/c++/15/vector + mdp:/usr/include/c++/15/version + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/atomic_word.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++allocator.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++config.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++locale.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/cpu_defines.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/ctype_base.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/ctype_inline.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/error_constants.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/gthr-default.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/gthr.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/messages_members.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/os_defines.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/time_members.h + mdp:/usr/include/ctype.h + mdp:/usr/include/endian.h + mdp:/usr/include/errno.h + mdp:/usr/include/features-time64.h + mdp:/usr/include/features.h + mdp:/usr/include/gnu/stubs-64.h + mdp:/usr/include/gnu/stubs.h + mdp:/usr/include/libintl.h + mdp:/usr/include/limits.h + mdp:/usr/include/linux/close_range.h + mdp:/usr/include/linux/errno.h + mdp:/usr/include/linux/limits.h + mdp:/usr/include/linux/posix_types.h + mdp:/usr/include/linux/sched/types.h + mdp:/usr/include/linux/stddef.h + mdp:/usr/include/linux/types.h + mdp:/usr/include/locale.h + mdp:/usr/include/pthread.h + mdp:/usr/include/qt6/QtCore/QAbstractListModel + mdp:/usr/include/qt6/QtCore/QDateTime + mdp:/usr/include/qt6/QtCore/QHash + mdp:/usr/include/qt6/QtCore/QMap + mdp:/usr/include/qt6/QtCore/QString + mdp:/usr/include/qt6/QtCore/QStringList + mdp:/usr/include/qt6/QtCore/QTimer + mdp:/usr/include/qt6/QtCore/QVariant + mdp:/usr/include/qt6/QtCore/QVariantMap + mdp:/usr/include/qt6/QtCore/QVector + mdp:/usr/include/qt6/QtCore/q17memory.h + mdp:/usr/include/qt6/QtCore/q20functional.h + mdp:/usr/include/qt6/QtCore/q20iterator.h + mdp:/usr/include/qt6/QtCore/q20memory.h + mdp:/usr/include/qt6/QtCore/q20type_traits.h + mdp:/usr/include/qt6/QtCore/q20utility.h + mdp:/usr/include/qt6/QtCore/q23type_traits.h + mdp:/usr/include/qt6/QtCore/q23utility.h + mdp:/usr/include/qt6/QtCore/qabstracteventdispatcher.h + mdp:/usr/include/qt6/QtCore/qabstractitemmodel.h + mdp:/usr/include/qt6/QtCore/qalgorithms.h + mdp:/usr/include/qt6/QtCore/qalloc.h + mdp:/usr/include/qt6/QtCore/qanystringview.h + mdp:/usr/include/qt6/QtCore/qarraydata.h + mdp:/usr/include/qt6/QtCore/qarraydataops.h + mdp:/usr/include/qt6/QtCore/qarraydatapointer.h + mdp:/usr/include/qt6/QtCore/qassert.h + mdp:/usr/include/qt6/QtCore/qatomic.h + mdp:/usr/include/qt6/QtCore/qatomic_cxx11.h + mdp:/usr/include/qt6/QtCore/qbasicatomic.h + mdp:/usr/include/qt6/QtCore/qbasictimer.h + mdp:/usr/include/qt6/QtCore/qbindingstorage.h + mdp:/usr/include/qt6/QtCore/qbytearray.h + mdp:/usr/include/qt6/QtCore/qbytearrayalgorithms.h + mdp:/usr/include/qt6/QtCore/qbytearraylist.h + mdp:/usr/include/qt6/QtCore/qbytearrayview.h + mdp:/usr/include/qt6/QtCore/qcalendar.h + mdp:/usr/include/qt6/QtCore/qchar.h + mdp:/usr/include/qt6/QtCore/qcompare.h + mdp:/usr/include/qt6/QtCore/qcompare_impl.h + mdp:/usr/include/qt6/QtCore/qcomparehelpers.h + mdp:/usr/include/qt6/QtCore/qcompilerdetection.h + mdp:/usr/include/qt6/QtCore/qconfig-64.h + mdp:/usr/include/qt6/QtCore/qconfig.h + mdp:/usr/include/qt6/QtCore/qconstructormacros.h + mdp:/usr/include/qt6/QtCore/qcontainerfwd.h + mdp:/usr/include/qt6/QtCore/qcontainerinfo.h + mdp:/usr/include/qt6/QtCore/qcontainertools_impl.h + mdp:/usr/include/qt6/QtCore/qcontiguouscache.h + mdp:/usr/include/qt6/QtCore/qdarwinhelpers.h + mdp:/usr/include/qt6/QtCore/qdatastream.h + mdp:/usr/include/qt6/QtCore/qdatetime.h + mdp:/usr/include/qt6/QtCore/qdeadlinetimer.h + mdp:/usr/include/qt6/QtCore/qdebug.h + mdp:/usr/include/qt6/QtCore/qeventloop.h + mdp:/usr/include/qt6/QtCore/qexceptionhandling.h + mdp:/usr/include/qt6/QtCore/qflags.h + mdp:/usr/include/qt6/QtCore/qfloat16.h + mdp:/usr/include/qt6/QtCore/qforeach.h + mdp:/usr/include/qt6/QtCore/qfunctionaltools_impl.h + mdp:/usr/include/qt6/QtCore/qfunctionpointer.h + mdp:/usr/include/qt6/QtCore/qgenericatomic.h + mdp:/usr/include/qt6/QtCore/qglobal.h + mdp:/usr/include/qt6/QtCore/qglobalstatic.h + mdp:/usr/include/qt6/QtCore/qhash.h + mdp:/usr/include/qt6/QtCore/qhashfunctions.h + mdp:/usr/include/qt6/QtCore/qiodevicebase.h + mdp:/usr/include/qt6/QtCore/qiterable.h + mdp:/usr/include/qt6/QtCore/qiterator.h + mdp:/usr/include/qt6/QtCore/qlatin1stringview.h + mdp:/usr/include/qt6/QtCore/qlist.h + mdp:/usr/include/qt6/QtCore/qlocale.h + mdp:/usr/include/qt6/QtCore/qlogging.h + mdp:/usr/include/qt6/QtCore/qmalloc.h + mdp:/usr/include/qt6/QtCore/qmap.h + mdp:/usr/include/qt6/QtCore/qmath.h + mdp:/usr/include/qt6/QtCore/qmetacontainer.h + mdp:/usr/include/qt6/QtCore/qmetaobject.h + mdp:/usr/include/qt6/QtCore/qmetatype.h + mdp:/usr/include/qt6/QtCore/qminmax.h + mdp:/usr/include/qt6/QtCore/qnamespace.h + mdp:/usr/include/qt6/QtCore/qnumeric.h + mdp:/usr/include/qt6/QtCore/qobject.h + mdp:/usr/include/qt6/QtCore/qobject_impl.h + mdp:/usr/include/qt6/QtCore/qobjectdefs.h + mdp:/usr/include/qt6/QtCore/qobjectdefs_impl.h + mdp:/usr/include/qt6/QtCore/qoverload.h + mdp:/usr/include/qt6/QtCore/qpair.h + mdp:/usr/include/qt6/QtCore/qpointer.h + mdp:/usr/include/qt6/QtCore/qprocessordetection.h + mdp:/usr/include/qt6/QtCore/qrefcount.h + mdp:/usr/include/qt6/QtCore/qscopedpointer.h + mdp:/usr/include/qt6/QtCore/qscopeguard.h + mdp:/usr/include/qt6/QtCore/qset.h + mdp:/usr/include/qt6/QtCore/qshareddata.h + mdp:/usr/include/qt6/QtCore/qshareddata_impl.h + mdp:/usr/include/qt6/QtCore/qsharedpointer.h + mdp:/usr/include/qt6/QtCore/qsharedpointer_impl.h + mdp:/usr/include/qt6/QtCore/qspan.h + mdp:/usr/include/qt6/QtCore/qstdlibdetection.h + mdp:/usr/include/qt6/QtCore/qstring.h + mdp:/usr/include/qt6/QtCore/qstringalgorithms.h + mdp:/usr/include/qt6/QtCore/qstringbuilder.h + mdp:/usr/include/qt6/QtCore/qstringconverter.h + mdp:/usr/include/qt6/QtCore/qstringconverter_base.h + mdp:/usr/include/qt6/QtCore/qstringfwd.h + mdp:/usr/include/qt6/QtCore/qstringlist.h + mdp:/usr/include/qt6/QtCore/qstringmatcher.h + mdp:/usr/include/qt6/QtCore/qstringtokenizer.h + mdp:/usr/include/qt6/QtCore/qstringview.h + mdp:/usr/include/qt6/QtCore/qswap.h + mdp:/usr/include/qt6/QtCore/qsysinfo.h + mdp:/usr/include/qt6/QtCore/qsystemdetection.h + mdp:/usr/include/qt6/QtCore/qtaggedpointer.h + mdp:/usr/include/qt6/QtCore/qtclasshelpermacros.h + mdp:/usr/include/qt6/QtCore/qtconfiginclude.h + mdp:/usr/include/qt6/QtCore/qtconfigmacros.h + mdp:/usr/include/qt6/QtCore/qtcore-config.h + mdp:/usr/include/qt6/QtCore/qtcoreexports.h + mdp:/usr/include/qt6/QtCore/qtcoreglobal.h + mdp:/usr/include/qt6/QtCore/qtdeprecationdefinitions.h + mdp:/usr/include/qt6/QtCore/qtdeprecationmarkers.h + mdp:/usr/include/qt6/QtCore/qtenvironmentvariables.h + mdp:/usr/include/qt6/QtCore/qtextstream.h + mdp:/usr/include/qt6/QtCore/qtformat_impl.h + mdp:/usr/include/qt6/QtCore/qtimer.h + mdp:/usr/include/qt6/QtCore/qtmetamacros.h + mdp:/usr/include/qt6/QtCore/qtnoop.h + mdp:/usr/include/qt6/QtCore/qtpreprocessorsupport.h + mdp:/usr/include/qt6/QtCore/qtresource.h + mdp:/usr/include/qt6/QtCore/qttranslation.h + mdp:/usr/include/qt6/QtCore/qttypetraits.h + mdp:/usr/include/qt6/QtCore/qtversion.h + mdp:/usr/include/qt6/QtCore/qtversionchecks.h + mdp:/usr/include/qt6/QtCore/qtypeinfo.h + mdp:/usr/include/qt6/QtCore/qtyperevision.h + mdp:/usr/include/qt6/QtCore/qtypes.h + mdp:/usr/include/qt6/QtCore/qurl.h + mdp:/usr/include/qt6/QtCore/qutf8stringview.h + mdp:/usr/include/qt6/QtCore/qvariant.h + mdp:/usr/include/qt6/QtCore/qvariantmap.h + mdp:/usr/include/qt6/QtCore/qvarlengtharray.h + mdp:/usr/include/qt6/QtCore/qvector.h + mdp:/usr/include/qt6/QtCore/qversionnumber.h + mdp:/usr/include/qt6/QtCore/qversiontagging.h + mdp:/usr/include/qt6/QtCore/qxptype_traits.h + mdp:/usr/include/qt6/QtCore/qyieldcpu.h + mdp:/usr/include/qt6/QtNetwork/qtnetwork-config.h + mdp:/usr/include/qt6/QtNetwork/qtnetworkexports.h + mdp:/usr/include/qt6/QtNetwork/qtnetworkglobal.h + mdp:/usr/include/qt6/QtQml/qjsnumbercoercion.h + mdp:/usr/include/qt6/QtQml/qjsprimitivevalue.h + mdp:/usr/include/qt6/QtQml/qjsvalue.h + mdp:/usr/include/qt6/QtQml/qqml.h + mdp:/usr/include/qt6/QtQml/qqmllist.h + mdp:/usr/include/qt6/QtQml/qqmlparserstatus.h + mdp:/usr/include/qt6/QtQml/qqmlprivate.h + mdp:/usr/include/qt6/QtQml/qqmlpropertyvaluesource.h + mdp:/usr/include/qt6/QtQml/qqmlregistration.h + mdp:/usr/include/qt6/QtQml/qtqml-config.h + mdp:/usr/include/qt6/QtQml/qtqmlexports.h + mdp:/usr/include/qt6/QtQml/qtqmlglobal.h + mdp:/usr/include/qt6/QtQmlIntegration/qqmlintegration.h + mdp:/usr/include/sched.h + mdp:/usr/include/stdc-predef.h + mdp:/usr/include/stdint.h + mdp:/usr/include/stdio.h + mdp:/usr/include/stdlib.h + mdp:/usr/include/string.h + mdp:/usr/include/strings.h + mdp:/usr/include/sys/cdefs.h + mdp:/usr/include/sys/select.h + mdp:/usr/include/sys/single_threaded.h + mdp:/usr/include/sys/syscall.h + mdp:/usr/include/sys/types.h + mdp:/usr/include/syscall.h + mdp:/usr/include/time.h + mdp:/usr/include/unistd.h + mdp:/usr/include/wchar.h + mdp:/usr/include/wctype.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stdarg.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stdbool.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stddef.h diff --git a/build-linux/tests/CMakeFiles/test_platform_session.dir/test_platform_session.cpp.o b/build-linux/tests/CMakeFiles/test_platform_session.dir/test_platform_session.cpp.o new file mode 100644 index 00000000..dc602668 Binary files /dev/null and b/build-linux/tests/CMakeFiles/test_platform_session.dir/test_platform_session.cpp.o differ diff --git a/build-linux/tests/CMakeFiles/test_platform_session.dir/test_platform_session_autogen/mocs_compilation.cpp.o b/build-linux/tests/CMakeFiles/test_platform_session.dir/test_platform_session_autogen/mocs_compilation.cpp.o new file mode 100644 index 00000000..bc1e4e33 Binary files /dev/null and b/build-linux/tests/CMakeFiles/test_platform_session.dir/test_platform_session_autogen/mocs_compilation.cpp.o differ diff --git a/build-linux/tests/CMakeFiles/test_platform_session_autogen.dir/AutogenInfo.json b/build-linux/tests/CMakeFiles/test_platform_session_autogen.dir/AutogenInfo.json new file mode 100644 index 00000000..fa68078a --- /dev/null +++ b/build-linux/tests/CMakeFiles/test_platform_session_autogen.dir/AutogenInfo.json @@ -0,0 +1,195 @@ +{ + "BUILD_DIR" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_platform_session_autogen", + "CMAKE_BINARY_DIR" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux", + "CMAKE_CURRENT_BINARY_DIR" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests", + "CMAKE_CURRENT_SOURCE_DIR" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests", + "CMAKE_EXECUTABLE" : "/usr/bin/cmake", + "CMAKE_LIST_FILES" : + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/CMakeLists.txt", + "/usr/lib64/cmake/Qt6/Qt6ConfigVersion.cmake", + "/usr/lib64/cmake/Qt6/Qt6ConfigVersionImpl.cmake", + "/usr/lib64/cmake/Qt6/Qt6Config.cmake", + "/usr/lib64/cmake/Qt6/QtPublicCMakeEarlyPolicyHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicCMakeHelpers.cmake", + "/usr/lib64/cmake/Qt6/Qt6ConfigExtras.cmake", + "/usr/lib64/cmake/Qt6/QtPublicCMakeVersionHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtInstallPaths.cmake", + "/usr/lib64/cmake/Qt6/Qt6Targets.cmake", + "/usr/lib64/cmake/Qt6/Qt6VersionlessAliasTargets.cmake", + "/usr/lib64/cmake/Qt6/QtFeature.cmake", + "/usr/share/cmake/Modules/CheckCXXCompilerFlag.cmake", + "/usr/lib64/cmake/Qt6/QtFeatureCommon.cmake", + "/usr/lib64/cmake/Qt6/QtPublicAndroidHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicAppleHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicCMakeHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicCMakeVersionHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicDependencyHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicExternalProjectHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicFinalizerHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicFindPackageHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicGitHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicPluginHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicPluginHelpers_v2.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomAttributionHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomBuildToolHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomCommonGenerationHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomCpeHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomCycloneDXHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomDocumentNamespaceHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomDepHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomExternalReferenceHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomFileHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomGenerationHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomGenerationCycloneDXHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomLicenseHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomOpsHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomPurlHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomPythonHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomQtEntityHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomRelationshipHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomSystemDepHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicTargetHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicTestHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicToolHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicWalkLibsHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicWindowsHelpers.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6/Qt6Dependencies.cmake", + "/usr/lib64/cmake/Qt6Test/Qt6TestConfigVersion.cmake", + "/usr/lib64/cmake/Qt6Test/Qt6TestConfigVersionImpl.cmake", + "/usr/lib64/cmake/Qt6Test/Qt6TestConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6Test/Qt6TestDependencies.cmake", + "/usr/lib64/cmake/Qt6Test/Qt6TestTargets.cmake", + "/usr/lib64/cmake/Qt6Test/Qt6TestTargets-relwithdebinfo.cmake", + "/usr/lib64/cmake/Qt6Test/Qt6TestAdditionalTargetInfo.cmake", + "/usr/lib64/cmake/Qt6Test/QtTestProperties.cmake", + "/usr/lib64/cmake/Qt6Test/Qt6TestVersionlessAliasTargets.cmake" + ], + "CMAKE_SOURCE_DIR" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6", + "CROSS_CONFIG" : false, + "DEP_FILE" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_platform_session_autogen/deps", + "DEP_FILE_RULE_NAME" : "test_platform_session_autogen/timestamp", + "HEADERS" : [], + "HEADER_EXTENSIONS" : [ "h", "hh", "h++", "hm", "hpp", "hxx", "in", "txx" ], + "INCLUDE_DIR" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_platform_session_autogen/include", + "MOC_COMPILATION_FILE" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_platform_session_autogen/mocs_compilation.cpp", + "MOC_DEFINITIONS" : + [ + "FTK_API_GL_4_1", + "QT_CORE_LIB", + "QT_NO_DEBUG", + "QT_TESTCASE_BUILDDIR=\"/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests\"", + "QT_TESTCASE_SOURCEDIR=\"/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests\"", + "QT_TESTLIB_LIB", + "TLRENDER_EXR", + "TLRENDER_FFMPEG", + "TLRENDER_FFMPEG_PLUGIN", + "TLRENDER_JPEG", + "TLRENDER_OCIO", + "TLRENDER_OIIO", + "TLRENDER_PNG", + "TLRENDER_SDL2", + "TLRENDER_TIFF" + ], + "MOC_DEPEND_FILTERS" : + [ + [ + "Q_PLUGIN_METADATA", + "[\n][ \t]*Q_PLUGIN_METADATA[ \t]*\\([^\\)]*FILE[ \t]*\"([^\"]+)\"" + ] + ], + "MOC_INCLUDES" : + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src", + "/usr/include/qt6/QtTest", + "/usr/include/qt6", + "/usr/include/qt6/QtCore", + "/usr/lib64/qt6/mkspecs/linux-g++", + "/usr/include/c++/15", + "/usr/include/c++/15/x86_64-redhat-linux", + "/usr/include/c++/15/backward", + "/usr/lib/gcc/x86_64-redhat-linux/15/include", + "/usr/local/include", + "/usr/include" + ], + "MOC_MACRO_NAMES" : + [ + "Q_OBJECT", + "Q_GADGET", + "Q_NAMESPACE", + "Q_NAMESPACE_EXPORT", + "Q_GADGET_EXPORT", + "Q_ENUM_NS" + ], + "MOC_OPTIONS" : [], + "MOC_PATH_PREFIX" : false, + "MOC_PREDEFS_CMD" : + [ + "/usr/bin/c++", + "-std=gnu++20", + "-w", + "-dM", + "-E", + "/usr/share/cmake/Modules/CMakeCXXCompilerABI.cpp" + ], + "MOC_PREDEFS_FILE" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_platform_session_autogen/moc_predefs.h", + "MOC_RELAXED_MODE" : false, + "MOC_SKIP" : + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_db_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_drag_utils_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_everything_search_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_grid_scrub_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_icon_utils_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_importer_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_live_preview_manager_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_media_converter_worker_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_models_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_sequence_detector_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_simple_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_utils_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_virtual_drag_autogen/mocs_compilation.cpp" + ], + "MULTI_CONFIG" : false, + "PARALLEL" : 16, + "PARSE_CACHE_FILE" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/CMakeFiles/test_platform_session_autogen.dir/ParseCache.txt", + "QT_MOC_EXECUTABLE" : "/usr/lib64/qt6/libexec/moc", + "QT_UIC_EXECUTABLE" : "/usr/lib64/qt6/libexec/uic", + "QT_VERSION_MAJOR" : 6, + "QT_VERSION_MINOR" : 10, + "SETTINGS_FILE" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/CMakeFiles/test_platform_session_autogen.dir/AutogenUsed.txt", + "SOURCES" : + [ + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/test_platform_session.cpp", + "MU", + null + ] + ], + "UIC_OPTIONS" : [], + "UIC_SEARCH_PATHS" : [], + "UIC_SKIP" : + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_db_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_drag_utils_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_everything_search_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_grid_scrub_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_icon_utils_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_importer_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_live_preview_manager_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_media_converter_worker_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_models_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_sequence_detector_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_simple_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_utils_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_virtual_drag_autogen/mocs_compilation.cpp" + ], + "UIC_UI_FILES" : [], + "USE_BETTER_GRAPH" : true, + "VERBOSITY" : 0 +} diff --git a/build-linux/tests/CMakeFiles/test_platform_session_autogen.dir/AutogenUsed.txt b/build-linux/tests/CMakeFiles/test_platform_session_autogen.dir/AutogenUsed.txt new file mode 100644 index 00000000..20965e66 --- /dev/null +++ b/build-linux/tests/CMakeFiles/test_platform_session_autogen.dir/AutogenUsed.txt @@ -0,0 +1,2 @@ +moc:c8d2e0d6b9ec6bb88a26555d36562f211c048bd223b76c1f6f46a9a723c9bcd4 +uic:0df7b06f04b60705a14ff966fc10725af0fb193398324deeaf17e44a5f9db1e0 diff --git a/build-linux/tests/CMakeFiles/test_platform_session_autogen.dir/ParseCache.txt b/build-linux/tests/CMakeFiles/test_platform_session_autogen.dir/ParseCache.txt new file mode 100644 index 00000000..a25f652a --- /dev/null +++ b/build-linux/tests/CMakeFiles/test_platform_session_autogen.dir/ParseCache.txt @@ -0,0 +1,772 @@ +# Generated by CMake. Changes will be overwritten. +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/test_platform_session.cpp + mmc:Q_OBJECT + mid:test_platform_session.moc + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_platform_session_autogen/moc_predefs.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/platform_session.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/test_platform_session.cpp + mdp:/usr/include/asm-generic/bitsperlong.h + mdp:/usr/include/asm-generic/errno-base.h + mdp:/usr/include/asm-generic/errno.h + mdp:/usr/include/asm-generic/int-ll64.h + mdp:/usr/include/asm-generic/posix_types.h + mdp:/usr/include/asm-generic/types.h + mdp:/usr/include/asm/bitsperlong.h + mdp:/usr/include/asm/errno.h + mdp:/usr/include/asm/posix_types.h + mdp:/usr/include/asm/posix_types_64.h + mdp:/usr/include/asm/types.h + mdp:/usr/include/asm/unistd.h + mdp:/usr/include/asm/unistd_64.h + mdp:/usr/include/assert.h + mdp:/usr/include/bits/atomic_wide_counter.h + mdp:/usr/include/bits/byteswap.h + mdp:/usr/include/bits/confname.h + mdp:/usr/include/bits/cpu-set.h + mdp:/usr/include/bits/endian.h + mdp:/usr/include/bits/endianness.h + mdp:/usr/include/bits/environments.h + mdp:/usr/include/bits/errno.h + mdp:/usr/include/bits/floatn-common.h + mdp:/usr/include/bits/floatn.h + mdp:/usr/include/bits/getopt_core.h + mdp:/usr/include/bits/getopt_posix.h + mdp:/usr/include/bits/libc-header-start.h + mdp:/usr/include/bits/locale.h + mdp:/usr/include/bits/long-double.h + mdp:/usr/include/bits/posix_opt.h + mdp:/usr/include/bits/pthread_stack_min-dynamic.h + mdp:/usr/include/bits/pthreadtypes-arch.h + mdp:/usr/include/bits/pthreadtypes.h + mdp:/usr/include/bits/sched.h + mdp:/usr/include/bits/select.h + mdp:/usr/include/bits/semaphore.h + mdp:/usr/include/bits/setjmp.h + mdp:/usr/include/bits/stdint-intn.h + mdp:/usr/include/bits/stdio_lim.h + mdp:/usr/include/bits/struct_mutex.h + mdp:/usr/include/bits/struct_rwlock.h + mdp:/usr/include/bits/syscall.h + mdp:/usr/include/bits/thread-shared-types.h + mdp:/usr/include/bits/time.h + mdp:/usr/include/bits/time64.h + mdp:/usr/include/bits/timesize.h + mdp:/usr/include/bits/timex.h + mdp:/usr/include/bits/types.h + mdp:/usr/include/bits/types/FILE.h + mdp:/usr/include/bits/types/__FILE.h + mdp:/usr/include/bits/types/__fpos64_t.h + mdp:/usr/include/bits/types/__fpos_t.h + mdp:/usr/include/bits/types/__locale_t.h + mdp:/usr/include/bits/types/__mbstate_t.h + mdp:/usr/include/bits/types/__sigset_t.h + mdp:/usr/include/bits/types/clock_t.h + mdp:/usr/include/bits/types/clockid_t.h + mdp:/usr/include/bits/types/cookie_io_functions_t.h + mdp:/usr/include/bits/types/error_t.h + mdp:/usr/include/bits/types/locale_t.h + mdp:/usr/include/bits/types/mbstate_t.h + mdp:/usr/include/bits/types/sigset_t.h + mdp:/usr/include/bits/types/struct_FILE.h + mdp:/usr/include/bits/types/struct___jmp_buf_tag.h + mdp:/usr/include/bits/types/struct_itimerspec.h + mdp:/usr/include/bits/types/struct_sched_param.h + mdp:/usr/include/bits/types/struct_timespec.h + mdp:/usr/include/bits/types/struct_timeval.h + mdp:/usr/include/bits/types/struct_tm.h + mdp:/usr/include/bits/types/time_t.h + mdp:/usr/include/bits/types/timer_t.h + mdp:/usr/include/bits/types/wint_t.h + mdp:/usr/include/bits/typesizes.h + mdp:/usr/include/bits/uintn-identity.h + mdp:/usr/include/bits/unistd_ext.h + mdp:/usr/include/bits/wchar.h + mdp:/usr/include/bits/wctype-wchar.h + mdp:/usr/include/bits/wordsize.h + mdp:/usr/include/c++/15/algorithm + mdp:/usr/include/c++/15/array + mdp:/usr/include/c++/15/atomic + mdp:/usr/include/c++/15/backward/auto_ptr.h + mdp:/usr/include/c++/15/backward/binders.h + mdp:/usr/include/c++/15/bit + mdp:/usr/include/c++/15/bits/algorithmfwd.h + mdp:/usr/include/c++/15/bits/align.h + mdp:/usr/include/c++/15/bits/alloc_traits.h + mdp:/usr/include/c++/15/bits/allocated_ptr.h + mdp:/usr/include/c++/15/bits/allocator.h + mdp:/usr/include/c++/15/bits/atomic_base.h + mdp:/usr/include/c++/15/bits/atomic_futex.h + mdp:/usr/include/c++/15/bits/atomic_lockfree_defines.h + mdp:/usr/include/c++/15/bits/atomic_timed_wait.h + mdp:/usr/include/c++/15/bits/atomic_wait.h + mdp:/usr/include/c++/15/bits/basic_ios.h + mdp:/usr/include/c++/15/bits/basic_ios.tcc + mdp:/usr/include/c++/15/bits/basic_string.h + mdp:/usr/include/c++/15/bits/basic_string.tcc + mdp:/usr/include/c++/15/bits/char_traits.h + mdp:/usr/include/c++/15/bits/charconv.h + mdp:/usr/include/c++/15/bits/chrono.h + mdp:/usr/include/c++/15/bits/chrono_io.h + mdp:/usr/include/c++/15/bits/codecvt.h + mdp:/usr/include/c++/15/bits/concept_check.h + mdp:/usr/include/c++/15/bits/cpp_type_traits.h + mdp:/usr/include/c++/15/bits/cxxabi_forced.h + mdp:/usr/include/c++/15/bits/cxxabi_init_exception.h + mdp:/usr/include/c++/15/bits/enable_special_members.h + mdp:/usr/include/c++/15/bits/erase_if.h + mdp:/usr/include/c++/15/bits/exception.h + mdp:/usr/include/c++/15/bits/exception_defines.h + mdp:/usr/include/c++/15/bits/exception_ptr.h + mdp:/usr/include/c++/15/bits/functexcept.h + mdp:/usr/include/c++/15/bits/functional_hash.h + mdp:/usr/include/c++/15/bits/hash_bytes.h + mdp:/usr/include/c++/15/bits/hashtable.h + mdp:/usr/include/c++/15/bits/hashtable_policy.h + mdp:/usr/include/c++/15/bits/invoke.h + mdp:/usr/include/c++/15/bits/ios_base.h + mdp:/usr/include/c++/15/bits/istream.tcc + mdp:/usr/include/c++/15/bits/iterator_concepts.h + mdp:/usr/include/c++/15/bits/list.tcc + mdp:/usr/include/c++/15/bits/locale_classes.h + mdp:/usr/include/c++/15/bits/locale_classes.tcc + mdp:/usr/include/c++/15/bits/locale_conv.h + mdp:/usr/include/c++/15/bits/locale_facets.h + mdp:/usr/include/c++/15/bits/locale_facets.tcc + mdp:/usr/include/c++/15/bits/locale_facets_nonio.h + mdp:/usr/include/c++/15/bits/locale_facets_nonio.tcc + mdp:/usr/include/c++/15/bits/localefwd.h + mdp:/usr/include/c++/15/bits/max_size_type.h + mdp:/usr/include/c++/15/bits/memory_resource.h + mdp:/usr/include/c++/15/bits/memoryfwd.h + mdp:/usr/include/c++/15/bits/move.h + mdp:/usr/include/c++/15/bits/nested_exception.h + mdp:/usr/include/c++/15/bits/new_allocator.h + mdp:/usr/include/c++/15/bits/node_handle.h + mdp:/usr/include/c++/15/bits/ostream.h + mdp:/usr/include/c++/15/bits/ostream.tcc + mdp:/usr/include/c++/15/bits/ostream_insert.h + mdp:/usr/include/c++/15/bits/parse_numbers.h + mdp:/usr/include/c++/15/bits/postypes.h + mdp:/usr/include/c++/15/bits/predefined_ops.h + mdp:/usr/include/c++/15/bits/ptr_traits.h + mdp:/usr/include/c++/15/bits/quoted_string.h + mdp:/usr/include/c++/15/bits/random.h + mdp:/usr/include/c++/15/bits/random.tcc + mdp:/usr/include/c++/15/bits/range_access.h + mdp:/usr/include/c++/15/bits/ranges_algo.h + mdp:/usr/include/c++/15/bits/ranges_algobase.h + mdp:/usr/include/c++/15/bits/ranges_base.h + mdp:/usr/include/c++/15/bits/ranges_cmp.h + mdp:/usr/include/c++/15/bits/ranges_uninitialized.h + mdp:/usr/include/c++/15/bits/ranges_util.h + mdp:/usr/include/c++/15/bits/refwrap.h + mdp:/usr/include/c++/15/bits/requires_hosted.h + mdp:/usr/include/c++/15/bits/semaphore_base.h + mdp:/usr/include/c++/15/bits/shared_ptr.h + mdp:/usr/include/c++/15/bits/shared_ptr_atomic.h + mdp:/usr/include/c++/15/bits/shared_ptr_base.h + mdp:/usr/include/c++/15/bits/specfun.h + mdp:/usr/include/c++/15/bits/sstream.tcc + mdp:/usr/include/c++/15/bits/std_abs.h + mdp:/usr/include/c++/15/bits/std_function.h + mdp:/usr/include/c++/15/bits/std_mutex.h + mdp:/usr/include/c++/15/bits/std_thread.h + mdp:/usr/include/c++/15/bits/stl_algo.h + mdp:/usr/include/c++/15/bits/stl_algobase.h + mdp:/usr/include/c++/15/bits/stl_bvector.h + mdp:/usr/include/c++/15/bits/stl_construct.h + mdp:/usr/include/c++/15/bits/stl_function.h + mdp:/usr/include/c++/15/bits/stl_heap.h + mdp:/usr/include/c++/15/bits/stl_iterator.h + mdp:/usr/include/c++/15/bits/stl_iterator_base_funcs.h + mdp:/usr/include/c++/15/bits/stl_iterator_base_types.h + mdp:/usr/include/c++/15/bits/stl_list.h + mdp:/usr/include/c++/15/bits/stl_map.h + mdp:/usr/include/c++/15/bits/stl_multimap.h + mdp:/usr/include/c++/15/bits/stl_multiset.h + mdp:/usr/include/c++/15/bits/stl_numeric.h + mdp:/usr/include/c++/15/bits/stl_pair.h + mdp:/usr/include/c++/15/bits/stl_raw_storage_iter.h + mdp:/usr/include/c++/15/bits/stl_relops.h + mdp:/usr/include/c++/15/bits/stl_set.h + mdp:/usr/include/c++/15/bits/stl_tempbuf.h + mdp:/usr/include/c++/15/bits/stl_tree.h + mdp:/usr/include/c++/15/bits/stl_uninitialized.h + mdp:/usr/include/c++/15/bits/stl_vector.h + mdp:/usr/include/c++/15/bits/stream_iterator.h + mdp:/usr/include/c++/15/bits/streambuf.tcc + mdp:/usr/include/c++/15/bits/streambuf_iterator.h + mdp:/usr/include/c++/15/bits/string_view.tcc + mdp:/usr/include/c++/15/bits/stringfwd.h + mdp:/usr/include/c++/15/bits/this_thread_sleep.h + mdp:/usr/include/c++/15/bits/uniform_int_dist.h + mdp:/usr/include/c++/15/bits/unique_lock.h + mdp:/usr/include/c++/15/bits/unique_ptr.h + mdp:/usr/include/c++/15/bits/unordered_map.h + mdp:/usr/include/c++/15/bits/unordered_set.h + mdp:/usr/include/c++/15/bits/uses_allocator.h + mdp:/usr/include/c++/15/bits/uses_allocator_args.h + mdp:/usr/include/c++/15/bits/utility.h + mdp:/usr/include/c++/15/bits/vector.tcc + mdp:/usr/include/c++/15/bits/version.h + mdp:/usr/include/c++/15/cassert + mdp:/usr/include/c++/15/cctype + mdp:/usr/include/c++/15/cerrno + mdp:/usr/include/c++/15/charconv + mdp:/usr/include/c++/15/chrono + mdp:/usr/include/c++/15/climits + mdp:/usr/include/c++/15/clocale + mdp:/usr/include/c++/15/cmath + mdp:/usr/include/c++/15/compare + mdp:/usr/include/c++/15/concepts + mdp:/usr/include/c++/15/condition_variable + mdp:/usr/include/c++/15/cstddef + mdp:/usr/include/c++/15/cstdint + mdp:/usr/include/c++/15/cstdio + mdp:/usr/include/c++/15/cstdlib + mdp:/usr/include/c++/15/cstring + mdp:/usr/include/c++/15/ctime + mdp:/usr/include/c++/15/cwchar + mdp:/usr/include/c++/15/cwctype + mdp:/usr/include/c++/15/debug/assertions.h + mdp:/usr/include/c++/15/debug/debug.h + mdp:/usr/include/c++/15/exception + mdp:/usr/include/c++/15/experimental/source_location + mdp:/usr/include/c++/15/ext/aligned_buffer.h + mdp:/usr/include/c++/15/ext/alloc_traits.h + mdp:/usr/include/c++/15/ext/atomicity.h + mdp:/usr/include/c++/15/ext/concurrence.h + mdp:/usr/include/c++/15/ext/numeric_traits.h + mdp:/usr/include/c++/15/ext/string_conversions.h + mdp:/usr/include/c++/15/ext/type_traits.h + mdp:/usr/include/c++/15/filesystem + mdp:/usr/include/c++/15/format + mdp:/usr/include/c++/15/functional + mdp:/usr/include/c++/15/future + mdp:/usr/include/c++/15/initializer_list + mdp:/usr/include/c++/15/iomanip + mdp:/usr/include/c++/15/ios + mdp:/usr/include/c++/15/iosfwd + mdp:/usr/include/c++/15/istream + mdp:/usr/include/c++/15/iterator + mdp:/usr/include/c++/15/limits + mdp:/usr/include/c++/15/list + mdp:/usr/include/c++/15/locale + mdp:/usr/include/c++/15/map + mdp:/usr/include/c++/15/memory + mdp:/usr/include/c++/15/memory_resource + mdp:/usr/include/c++/15/mutex + mdp:/usr/include/c++/15/new + mdp:/usr/include/c++/15/numeric + mdp:/usr/include/c++/15/optional + mdp:/usr/include/c++/15/ostream + mdp:/usr/include/c++/15/pstl/execution_defs.h + mdp:/usr/include/c++/15/pstl/glue_numeric_defs.h + mdp:/usr/include/c++/15/pstl/pstl_config.h + mdp:/usr/include/c++/15/random + mdp:/usr/include/c++/15/ratio + mdp:/usr/include/c++/15/semaphore + mdp:/usr/include/c++/15/set + mdp:/usr/include/c++/15/shared_mutex + mdp:/usr/include/c++/15/source_location + mdp:/usr/include/c++/15/sstream + mdp:/usr/include/c++/15/stdexcept + mdp:/usr/include/c++/15/stdlib.h + mdp:/usr/include/c++/15/stop_token + mdp:/usr/include/c++/15/streambuf + mdp:/usr/include/c++/15/string + mdp:/usr/include/c++/15/string_view + mdp:/usr/include/c++/15/system_error + mdp:/usr/include/c++/15/tr1/bessel_function.tcc + mdp:/usr/include/c++/15/tr1/beta_function.tcc + mdp:/usr/include/c++/15/tr1/ell_integral.tcc + mdp:/usr/include/c++/15/tr1/exp_integral.tcc + mdp:/usr/include/c++/15/tr1/gamma.tcc + mdp:/usr/include/c++/15/tr1/hypergeometric.tcc + mdp:/usr/include/c++/15/tr1/legendre_function.tcc + mdp:/usr/include/c++/15/tr1/modified_bessel_func.tcc + mdp:/usr/include/c++/15/tr1/poly_hermite.tcc + mdp:/usr/include/c++/15/tr1/poly_laguerre.tcc + mdp:/usr/include/c++/15/tr1/riemann_zeta.tcc + mdp:/usr/include/c++/15/tr1/special_function_util.h + mdp:/usr/include/c++/15/tuple + mdp:/usr/include/c++/15/type_traits + mdp:/usr/include/c++/15/typeinfo + mdp:/usr/include/c++/15/unordered_map + mdp:/usr/include/c++/15/unordered_set + mdp:/usr/include/c++/15/utility + mdp:/usr/include/c++/15/variant + mdp:/usr/include/c++/15/vector + mdp:/usr/include/c++/15/version + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/atomic_word.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++allocator.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++config.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++locale.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/cpu_defines.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/ctype_base.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/ctype_inline.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/error_constants.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/gthr-default.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/gthr.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/messages_members.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/opt_random.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/os_defines.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/time_members.h + mdp:/usr/include/ctype.h + mdp:/usr/include/endian.h + mdp:/usr/include/errno.h + mdp:/usr/include/features-time64.h + mdp:/usr/include/features.h + mdp:/usr/include/gnu/stubs-64.h + mdp:/usr/include/gnu/stubs.h + mdp:/usr/include/libintl.h + mdp:/usr/include/linux/close_range.h + mdp:/usr/include/linux/errno.h + mdp:/usr/include/linux/posix_types.h + mdp:/usr/include/linux/sched/types.h + mdp:/usr/include/linux/stddef.h + mdp:/usr/include/linux/types.h + mdp:/usr/include/locale.h + mdp:/usr/include/pthread.h + mdp:/usr/include/qt6/QtCore/QAbstractItemModel + mdp:/usr/include/qt6/QtCore/QDeadlineTimer + mdp:/usr/include/qt6/QtCore/QHash + mdp:/usr/include/qt6/QtCore/QList + mdp:/usr/include/qt6/QtCore/QMap + mdp:/usr/include/qt6/QtCore/QMutex + mdp:/usr/include/qt6/QtCore/QObject + mdp:/usr/include/qt6/QtCore/QString + mdp:/usr/include/qt6/QtCore/QStringList + mdp:/usr/include/qt6/QtCore/QVariant + mdp:/usr/include/qt6/QtCore/QtCore + mdp:/usr/include/qt6/QtCore/QtCoreDepends + mdp:/usr/include/qt6/QtCore/q17memory.h + mdp:/usr/include/qt6/QtCore/q20algorithm.h + mdp:/usr/include/qt6/QtCore/q20chrono.h + mdp:/usr/include/qt6/QtCore/q20functional.h + mdp:/usr/include/qt6/QtCore/q20iterator.h + mdp:/usr/include/qt6/QtCore/q20map.h + mdp:/usr/include/qt6/QtCore/q20memory.h + mdp:/usr/include/qt6/QtCore/q20type_traits.h + mdp:/usr/include/qt6/QtCore/q20utility.h + mdp:/usr/include/qt6/QtCore/q20vector.h + mdp:/usr/include/qt6/QtCore/q23functional.h + mdp:/usr/include/qt6/QtCore/q23type_traits.h + mdp:/usr/include/qt6/QtCore/q23utility.h + mdp:/usr/include/qt6/QtCore/q26numeric.h + mdp:/usr/include/qt6/QtCore/qabstractanimation.h + mdp:/usr/include/qt6/QtCore/qabstracteventdispatcher.h + mdp:/usr/include/qt6/QtCore/qabstractitemmodel.h + mdp:/usr/include/qt6/QtCore/qabstractnativeeventfilter.h + mdp:/usr/include/qt6/QtCore/qabstractproxymodel.h + mdp:/usr/include/qt6/QtCore/qalgorithms.h + mdp:/usr/include/qt6/QtCore/qalloc.h + mdp:/usr/include/qt6/QtCore/qanimationgroup.h + mdp:/usr/include/qt6/QtCore/qanystringview.h + mdp:/usr/include/qt6/QtCore/qapplicationstatic.h + mdp:/usr/include/qt6/QtCore/qarraydata.h + mdp:/usr/include/qt6/QtCore/qarraydataops.h + mdp:/usr/include/qt6/QtCore/qarraydatapointer.h + mdp:/usr/include/qt6/QtCore/qassert.h + mdp:/usr/include/qt6/QtCore/qassociativeiterable.h + mdp:/usr/include/qt6/QtCore/qatomic.h + mdp:/usr/include/qt6/QtCore/qatomic_cxx11.h + mdp:/usr/include/qt6/QtCore/qatomicscopedvaluerollback.h + mdp:/usr/include/qt6/QtCore/qbasicatomic.h + mdp:/usr/include/qt6/QtCore/qbasictimer.h + mdp:/usr/include/qt6/QtCore/qbindingstorage.h + mdp:/usr/include/qt6/QtCore/qbitarray.h + mdp:/usr/include/qt6/QtCore/qbuffer.h + mdp:/usr/include/qt6/QtCore/qbytearray.h + mdp:/usr/include/qt6/QtCore/qbytearrayalgorithms.h + mdp:/usr/include/qt6/QtCore/qbytearraylist.h + mdp:/usr/include/qt6/QtCore/qbytearraymatcher.h + mdp:/usr/include/qt6/QtCore/qbytearrayview.h + mdp:/usr/include/qt6/QtCore/qcache.h + mdp:/usr/include/qt6/QtCore/qcalendar.h + mdp:/usr/include/qt6/QtCore/qcborarray.h + mdp:/usr/include/qt6/QtCore/qcborcommon.h + mdp:/usr/include/qt6/QtCore/qcbormap.h + mdp:/usr/include/qt6/QtCore/qcborstream.h + mdp:/usr/include/qt6/QtCore/qcborstreamreader.h + mdp:/usr/include/qt6/QtCore/qcborstreamwriter.h + mdp:/usr/include/qt6/QtCore/qcborvalue.h + mdp:/usr/include/qt6/QtCore/qchar.h + mdp:/usr/include/qt6/QtCore/qcheckedint_impl.h + mdp:/usr/include/qt6/QtCore/qchronotimer.h + mdp:/usr/include/qt6/QtCore/qcollator.h + mdp:/usr/include/qt6/QtCore/qcommandlineoption.h + mdp:/usr/include/qt6/QtCore/qcommandlineparser.h + mdp:/usr/include/qt6/QtCore/qcompare.h + mdp:/usr/include/qt6/QtCore/qcompare_impl.h + mdp:/usr/include/qt6/QtCore/qcomparehelpers.h + mdp:/usr/include/qt6/QtCore/qcompilerdetection.h + mdp:/usr/include/qt6/QtCore/qconcatenatetablesproxymodel.h + mdp:/usr/include/qt6/QtCore/qconfig-64.h + mdp:/usr/include/qt6/QtCore/qconfig.h + mdp:/usr/include/qt6/QtCore/qconstructormacros.h + mdp:/usr/include/qt6/QtCore/qcontainerfwd.h + mdp:/usr/include/qt6/QtCore/qcontainerinfo.h + mdp:/usr/include/qt6/QtCore/qcontainertools_impl.h + mdp:/usr/include/qt6/QtCore/qcontiguouscache.h + mdp:/usr/include/qt6/QtCore/qcoreapplication.h + mdp:/usr/include/qt6/QtCore/qcoreapplication_platform.h + mdp:/usr/include/qt6/QtCore/qcoreevent.h + mdp:/usr/include/qt6/QtCore/qcryptographichash.h + mdp:/usr/include/qt6/QtCore/qdarwinhelpers.h + mdp:/usr/include/qt6/QtCore/qdatastream.h + mdp:/usr/include/qt6/QtCore/qdatetime.h + mdp:/usr/include/qt6/QtCore/qdeadlinetimer.h + mdp:/usr/include/qt6/QtCore/qdebug.h + mdp:/usr/include/qt6/QtCore/qdir.h + mdp:/usr/include/qt6/QtCore/qdiriterator.h + mdp:/usr/include/qt6/QtCore/qdirlisting.h + mdp:/usr/include/qt6/QtCore/qeasingcurve.h + mdp:/usr/include/qt6/QtCore/qelapsedtimer.h + mdp:/usr/include/qt6/QtCore/qendian.h + mdp:/usr/include/qt6/QtCore/qeventloop.h + mdp:/usr/include/qt6/QtCore/qexception.h + mdp:/usr/include/qt6/QtCore/qexceptionhandling.h + mdp:/usr/include/qt6/QtCore/qfactoryinterface.h + mdp:/usr/include/qt6/QtCore/qfile.h + mdp:/usr/include/qt6/QtCore/qfiledevice.h + mdp:/usr/include/qt6/QtCore/qfileinfo.h + mdp:/usr/include/qt6/QtCore/qfileselector.h + mdp:/usr/include/qt6/QtCore/qfilesystemwatcher.h + mdp:/usr/include/qt6/QtCore/qflags.h + mdp:/usr/include/qt6/QtCore/qfloat16.h + mdp:/usr/include/qt6/QtCore/qforeach.h + mdp:/usr/include/qt6/QtCore/qfunctionaltools_impl.h + mdp:/usr/include/qt6/QtCore/qfunctionpointer.h + mdp:/usr/include/qt6/QtCore/qfuture.h + mdp:/usr/include/qt6/QtCore/qfuture_impl.h + mdp:/usr/include/qt6/QtCore/qfutureinterface.h + mdp:/usr/include/qt6/QtCore/qfuturesynchronizer.h + mdp:/usr/include/qt6/QtCore/qfuturewatcher.h + mdp:/usr/include/qt6/QtCore/qgenericatomic.h + mdp:/usr/include/qt6/QtCore/qglobal.h + mdp:/usr/include/qt6/QtCore/qglobalstatic.h + mdp:/usr/include/qt6/QtCore/qhash.h + mdp:/usr/include/qt6/QtCore/qhashfunctions.h + mdp:/usr/include/qt6/QtCore/qidentityproxymodel.h + mdp:/usr/include/qt6/QtCore/qiodevice.h + mdp:/usr/include/qt6/QtCore/qiodevicebase.h + mdp:/usr/include/qt6/QtCore/qitemselectionmodel.h + mdp:/usr/include/qt6/QtCore/qiterable.h + mdp:/usr/include/qt6/QtCore/qiterator.h + mdp:/usr/include/qt6/QtCore/qjsonarray.h + mdp:/usr/include/qt6/QtCore/qjsondocument.h + mdp:/usr/include/qt6/QtCore/qjsonobject.h + mdp:/usr/include/qt6/QtCore/qjsonparseerror.h + mdp:/usr/include/qt6/QtCore/qjsonvalue.h + mdp:/usr/include/qt6/QtCore/qlatin1stringmatcher.h + mdp:/usr/include/qt6/QtCore/qlatin1stringview.h + mdp:/usr/include/qt6/QtCore/qlibrary.h + mdp:/usr/include/qt6/QtCore/qlibraryinfo.h + mdp:/usr/include/qt6/QtCore/qline.h + mdp:/usr/include/qt6/QtCore/qlist.h + mdp:/usr/include/qt6/QtCore/qlocale.h + mdp:/usr/include/qt6/QtCore/qlockfile.h + mdp:/usr/include/qt6/QtCore/qlogging.h + mdp:/usr/include/qt6/QtCore/qloggingcategory.h + mdp:/usr/include/qt6/QtCore/qmalloc.h + mdp:/usr/include/qt6/QtCore/qmap.h + mdp:/usr/include/qt6/QtCore/qmargins.h + mdp:/usr/include/qt6/QtCore/qmath.h + mdp:/usr/include/qt6/QtCore/qmessageauthenticationcode.h + mdp:/usr/include/qt6/QtCore/qmetacontainer.h + mdp:/usr/include/qt6/QtCore/qmetaobject.h + mdp:/usr/include/qt6/QtCore/qmetatype.h + mdp:/usr/include/qt6/QtCore/qmimedata.h + mdp:/usr/include/qt6/QtCore/qmimedatabase.h + mdp:/usr/include/qt6/QtCore/qmimetype.h + mdp:/usr/include/qt6/QtCore/qminmax.h + mdp:/usr/include/qt6/QtCore/qmutex.h + mdp:/usr/include/qt6/QtCore/qnamespace.h + mdp:/usr/include/qt6/QtCore/qnativeinterface.h + mdp:/usr/include/qt6/QtCore/qnumeric.h + mdp:/usr/include/qt6/QtCore/qobject.h + mdp:/usr/include/qt6/QtCore/qobject_impl.h + mdp:/usr/include/qt6/QtCore/qobjectcleanuphandler.h + mdp:/usr/include/qt6/QtCore/qobjectdefs.h + mdp:/usr/include/qt6/QtCore/qobjectdefs_impl.h + mdp:/usr/include/qt6/QtCore/qoperatingsystemversion.h + mdp:/usr/include/qt6/QtCore/qoverload.h + mdp:/usr/include/qt6/QtCore/qpair.h + mdp:/usr/include/qt6/QtCore/qparallelanimationgroup.h + mdp:/usr/include/qt6/QtCore/qpauseanimation.h + mdp:/usr/include/qt6/QtCore/qpermissions.h + mdp:/usr/include/qt6/QtCore/qplugin.h + mdp:/usr/include/qt6/QtCore/qpluginloader.h + mdp:/usr/include/qt6/QtCore/qpoint.h + mdp:/usr/include/qt6/QtCore/qpointer.h + mdp:/usr/include/qt6/QtCore/qprocess.h + mdp:/usr/include/qt6/QtCore/qprocessordetection.h + mdp:/usr/include/qt6/QtCore/qpromise.h + mdp:/usr/include/qt6/QtCore/qproperty.h + mdp:/usr/include/qt6/QtCore/qpropertyanimation.h + mdp:/usr/include/qt6/QtCore/qpropertyprivate.h + mdp:/usr/include/qt6/QtCore/qqueue.h + mdp:/usr/include/qt6/QtCore/qrandom.h + mdp:/usr/include/qt6/QtCore/qrangemodel.h + mdp:/usr/include/qt6/QtCore/qrangemodel_impl.h + mdp:/usr/include/qt6/QtCore/qreadwritelock.h + mdp:/usr/include/qt6/QtCore/qrect.h + mdp:/usr/include/qt6/QtCore/qrefcount.h + mdp:/usr/include/qt6/QtCore/qregularexpression.h + mdp:/usr/include/qt6/QtCore/qresource.h + mdp:/usr/include/qt6/QtCore/qresultstore.h + mdp:/usr/include/qt6/QtCore/qrunnable.h + mdp:/usr/include/qt6/QtCore/qsavefile.h + mdp:/usr/include/qt6/QtCore/qscopedpointer.h + mdp:/usr/include/qt6/QtCore/qscopedvaluerollback.h + mdp:/usr/include/qt6/QtCore/qscopeguard.h + mdp:/usr/include/qt6/QtCore/qsemaphore.h + mdp:/usr/include/qt6/QtCore/qsequentialanimationgroup.h + mdp:/usr/include/qt6/QtCore/qsequentialiterable.h + mdp:/usr/include/qt6/QtCore/qset.h + mdp:/usr/include/qt6/QtCore/qsettings.h + mdp:/usr/include/qt6/QtCore/qshareddata.h + mdp:/usr/include/qt6/QtCore/qshareddata_impl.h + mdp:/usr/include/qt6/QtCore/qsharedmemory.h + mdp:/usr/include/qt6/QtCore/qsharedpointer.h + mdp:/usr/include/qt6/QtCore/qsharedpointer_impl.h + mdp:/usr/include/qt6/QtCore/qsignalmapper.h + mdp:/usr/include/qt6/QtCore/qsimd.h + mdp:/usr/include/qt6/QtCore/qsize.h + mdp:/usr/include/qt6/QtCore/qsocketnotifier.h + mdp:/usr/include/qt6/QtCore/qsortfilterproxymodel.h + mdp:/usr/include/qt6/QtCore/qspan.h + mdp:/usr/include/qt6/QtCore/qstack.h + mdp:/usr/include/qt6/QtCore/qstandardpaths.h + mdp:/usr/include/qt6/QtCore/qstaticlatin1stringmatcher.h + mdp:/usr/include/qt6/QtCore/qstdlibdetection.h + mdp:/usr/include/qt6/QtCore/qstorageinfo.h + mdp:/usr/include/qt6/QtCore/qstring.h + mdp:/usr/include/qt6/QtCore/qstringalgorithms.h + mdp:/usr/include/qt6/QtCore/qstringbuilder.h + mdp:/usr/include/qt6/QtCore/qstringconverter.h + mdp:/usr/include/qt6/QtCore/qstringconverter_base.h + mdp:/usr/include/qt6/QtCore/qstringfwd.h + mdp:/usr/include/qt6/QtCore/qstringlist.h + mdp:/usr/include/qt6/QtCore/qstringlistmodel.h + mdp:/usr/include/qt6/QtCore/qstringliteral.h + mdp:/usr/include/qt6/QtCore/qstringmatcher.h + mdp:/usr/include/qt6/QtCore/qstringtokenizer.h + mdp:/usr/include/qt6/QtCore/qstringview.h + mdp:/usr/include/qt6/QtCore/qswap.h + mdp:/usr/include/qt6/QtCore/qsysinfo.h + mdp:/usr/include/qt6/QtCore/qsystemdetection.h + mdp:/usr/include/qt6/QtCore/qsystemsemaphore.h + mdp:/usr/include/qt6/QtCore/qtaggedpointer.h + mdp:/usr/include/qt6/QtCore/qtclasshelpermacros.h + mdp:/usr/include/qt6/QtCore/qtconfiginclude.h + mdp:/usr/include/qt6/QtCore/qtconfigmacros.h + mdp:/usr/include/qt6/QtCore/qtcore-config.h + mdp:/usr/include/qt6/QtCore/qtcoreexports.h + mdp:/usr/include/qt6/QtCore/qtcoreglobal.h + mdp:/usr/include/qt6/QtCore/qtcoreversion.h + mdp:/usr/include/qt6/QtCore/qtdeprecationdefinitions.h + mdp:/usr/include/qt6/QtCore/qtdeprecationmarkers.h + mdp:/usr/include/qt6/QtCore/qtemporarydir.h + mdp:/usr/include/qt6/QtCore/qtemporaryfile.h + mdp:/usr/include/qt6/QtCore/qtenvironmentvariables.h + mdp:/usr/include/qt6/QtCore/qtestsupport_core.h + mdp:/usr/include/qt6/QtCore/qtextboundaryfinder.h + mdp:/usr/include/qt6/QtCore/qtextstream.h + mdp:/usr/include/qt6/QtCore/qtformat_impl.h + mdp:/usr/include/qt6/QtCore/qthread.h + mdp:/usr/include/qt6/QtCore/qthreadpool.h + mdp:/usr/include/qt6/QtCore/qthreadstorage.h + mdp:/usr/include/qt6/QtCore/qtimeline.h + mdp:/usr/include/qt6/QtCore/qtimer.h + mdp:/usr/include/qt6/QtCore/qtimezone.h + mdp:/usr/include/qt6/QtCore/qtipccommon.h + mdp:/usr/include/qt6/QtCore/qtmetamacros.h + mdp:/usr/include/qt6/QtCore/qtmocconstants.h + mdp:/usr/include/qt6/QtCore/qtnoop.h + mdp:/usr/include/qt6/QtCore/qtpreprocessorsupport.h + mdp:/usr/include/qt6/QtCore/qtranslator.h + mdp:/usr/include/qt6/QtCore/qtransposeproxymodel.h + mdp:/usr/include/qt6/QtCore/qtresource.h + mdp:/usr/include/qt6/QtCore/qtsan_impl.h + mdp:/usr/include/qt6/QtCore/qtsymbolmacros.h + mdp:/usr/include/qt6/QtCore/qttranslation.h + mdp:/usr/include/qt6/QtCore/qttypetraits.h + mdp:/usr/include/qt6/QtCore/qtversion.h + mdp:/usr/include/qt6/QtCore/qtversionchecks.h + mdp:/usr/include/qt6/QtCore/qtypeinfo.h + mdp:/usr/include/qt6/QtCore/qtyperevision.h + mdp:/usr/include/qt6/QtCore/qtypes.h + mdp:/usr/include/qt6/QtCore/qurl.h + mdp:/usr/include/qt6/QtCore/qurlquery.h + mdp:/usr/include/qt6/QtCore/qutf8stringview.h + mdp:/usr/include/qt6/QtCore/quuid.h + mdp:/usr/include/qt6/QtCore/qvariant.h + mdp:/usr/include/qt6/QtCore/qvariantanimation.h + mdp:/usr/include/qt6/QtCore/qvarianthash.h + mdp:/usr/include/qt6/QtCore/qvariantlist.h + mdp:/usr/include/qt6/QtCore/qvariantmap.h + mdp:/usr/include/qt6/QtCore/qvarlengtharray.h + mdp:/usr/include/qt6/QtCore/qvector.h + mdp:/usr/include/qt6/QtCore/qversionnumber.h + mdp:/usr/include/qt6/QtCore/qversiontagging.h + mdp:/usr/include/qt6/QtCore/qwaitcondition.h + mdp:/usr/include/qt6/QtCore/qwineventnotifier.h + mdp:/usr/include/qt6/QtCore/qxmlstream.h + mdp:/usr/include/qt6/QtCore/qxpfunctional.h + mdp:/usr/include/qt6/QtCore/qxptype_traits.h + mdp:/usr/include/qt6/QtCore/qyieldcpu.h + mdp:/usr/include/qt6/QtTest/QtTest + mdp:/usr/include/qt6/QtTest/QtTestDepends + mdp:/usr/include/qt6/QtTest/qabstractitemmodeltester.h + mdp:/usr/include/qt6/QtTest/qbenchmark.h + mdp:/usr/include/qt6/QtTest/qbenchmarkmetric.h + mdp:/usr/include/qt6/QtTest/qsignalspy.h + mdp:/usr/include/qt6/QtTest/qtest.h + mdp:/usr/include/qt6/QtTest/qtestassert.h + mdp:/usr/include/qt6/QtTest/qtestcase.h + mdp:/usr/include/qt6/QtTest/qtestdata.h + mdp:/usr/include/qt6/QtTest/qtesteventloop.h + mdp:/usr/include/qt6/QtTest/qtestsystem.h + mdp:/usr/include/qt6/QtTest/qtesttostring.h + mdp:/usr/include/qt6/QtTest/qttestexports.h + mdp:/usr/include/qt6/QtTest/qttestglobal.h + mdp:/usr/include/qt6/QtTest/qttestlib-config.h + mdp:/usr/include/qt6/QtTest/qttestversion.h + mdp:/usr/include/sched.h + mdp:/usr/include/semaphore.h + mdp:/usr/include/stdc-predef.h + mdp:/usr/include/stdio.h + mdp:/usr/include/string.h + mdp:/usr/include/strings.h + mdp:/usr/include/sys/cdefs.h + mdp:/usr/include/sys/select.h + mdp:/usr/include/sys/single_threaded.h + mdp:/usr/include/sys/syscall.h + mdp:/usr/include/sys/time.h + mdp:/usr/include/sys/types.h + mdp:/usr/include/syscall.h + mdp:/usr/include/time.h + mdp:/usr/include/unistd.h + mdp:/usr/include/wchar.h + mdp:/usr/include/wctype.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/adxintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxavx512intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxbf16intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxcomplexintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxfp16intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxfp8intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxint8intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxmovrsintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxtf32intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxtileintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxtransposeintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2-512bf16intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2-512convertintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2-512mediaintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2-512minmaxintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2-512satcvtintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2bf16intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2convertintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2copyintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2mediaintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2minmaxintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2satcvtintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx2intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512bf16intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512bf16vlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512bitalgintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512bitalgvlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512bwintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512cdintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512dqintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512fintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512fp16intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512fp16vlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512ifmaintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512ifmavlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vbmi2intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vbmi2vlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vbmiintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vbmivlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vlbwintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vldqintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vnniintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vnnivlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vp2intersectintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vp2intersectvlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vpopcntdqintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vpopcntdqvlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avxifmaintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avxintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avxneconvertintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avxvnniint16intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avxvnniint8intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avxvnniintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/bmi2intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/bmiintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/cetintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/cldemoteintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/clflushoptintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/clwbintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/clzerointrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/cmpccxaddintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/emmintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/enqcmdintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/f16cintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/fmaintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/fxsrintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/gfniintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/hresetintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/ia32intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/immintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/keylockerintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/limits.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/lwpintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/lzcntintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/mm_malloc.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/mmintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/movdirintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/movrsintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/mwaitintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/mwaitxintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/pconfigintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/pkuintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/pmmintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/popcntintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/prfchiintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/prfchwintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/raointintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/rdseedintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/rtmintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/serializeintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/sgxintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/sha512intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/shaintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/sm3intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/sm4intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/smmintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stdarg.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stdbool.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stddef.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stdint.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/syslimits.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/tbmintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/tmmintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/tsxldtrkintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/uintrintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/usermsrintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/vaesintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/vpclmulqdqintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/waitpkgintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/wbnoinvdintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/wmmintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/x86gprintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/xmmintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/xsavecintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/xsaveintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/xsaveoptintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/xsavesintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/xtestintrin.h diff --git a/build-linux/tests/CMakeFiles/test_sequence_detector.dir/__/src/sequence_detector.cpp.o b/build-linux/tests/CMakeFiles/test_sequence_detector.dir/__/src/sequence_detector.cpp.o new file mode 100644 index 00000000..91c1adf9 Binary files /dev/null and b/build-linux/tests/CMakeFiles/test_sequence_detector.dir/__/src/sequence_detector.cpp.o differ diff --git a/build-linux/tests/CMakeFiles/test_sequence_detector.dir/test_sequence_detector.cpp.o b/build-linux/tests/CMakeFiles/test_sequence_detector.dir/test_sequence_detector.cpp.o new file mode 100644 index 00000000..e1b0c0d0 Binary files /dev/null and b/build-linux/tests/CMakeFiles/test_sequence_detector.dir/test_sequence_detector.cpp.o differ diff --git a/build-linux/tests/CMakeFiles/test_sequence_detector.dir/test_sequence_detector_autogen/mocs_compilation.cpp.o b/build-linux/tests/CMakeFiles/test_sequence_detector.dir/test_sequence_detector_autogen/mocs_compilation.cpp.o new file mode 100644 index 00000000..bc1e4e33 Binary files /dev/null and b/build-linux/tests/CMakeFiles/test_sequence_detector.dir/test_sequence_detector_autogen/mocs_compilation.cpp.o differ diff --git a/build-linux/tests/CMakeFiles/test_sequence_detector_autogen.dir/AutogenInfo.json b/build-linux/tests/CMakeFiles/test_sequence_detector_autogen.dir/AutogenInfo.json new file mode 100644 index 00000000..4bc801da --- /dev/null +++ b/build-linux/tests/CMakeFiles/test_sequence_detector_autogen.dir/AutogenInfo.json @@ -0,0 +1,188 @@ +{ + "BUILD_DIR" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_sequence_detector_autogen", + "CMAKE_BINARY_DIR" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux", + "CMAKE_CURRENT_BINARY_DIR" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests", + "CMAKE_CURRENT_SOURCE_DIR" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests", + "CMAKE_EXECUTABLE" : "/usr/bin/cmake", + "CMAKE_LIST_FILES" : + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/CMakeLists.txt", + "/usr/lib64/cmake/Qt6/Qt6ConfigVersion.cmake", + "/usr/lib64/cmake/Qt6/Qt6ConfigVersionImpl.cmake", + "/usr/lib64/cmake/Qt6/Qt6Config.cmake", + "/usr/lib64/cmake/Qt6/QtPublicCMakeEarlyPolicyHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicCMakeHelpers.cmake", + "/usr/lib64/cmake/Qt6/Qt6ConfigExtras.cmake", + "/usr/lib64/cmake/Qt6/QtPublicCMakeVersionHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtInstallPaths.cmake", + "/usr/lib64/cmake/Qt6/Qt6Targets.cmake", + "/usr/lib64/cmake/Qt6/Qt6VersionlessAliasTargets.cmake", + "/usr/lib64/cmake/Qt6/QtFeature.cmake", + "/usr/share/cmake/Modules/CheckCXXCompilerFlag.cmake", + "/usr/lib64/cmake/Qt6/QtFeatureCommon.cmake", + "/usr/lib64/cmake/Qt6/QtPublicAndroidHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicAppleHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicCMakeHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicCMakeVersionHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicDependencyHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicExternalProjectHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicFinalizerHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicFindPackageHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicGitHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicPluginHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicPluginHelpers_v2.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomAttributionHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomBuildToolHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomCommonGenerationHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomCpeHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomCycloneDXHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomDocumentNamespaceHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomDepHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomExternalReferenceHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomFileHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomGenerationHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomGenerationCycloneDXHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomLicenseHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomOpsHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomPurlHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomPythonHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomQtEntityHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomRelationshipHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomSystemDepHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicTargetHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicTestHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicToolHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicWalkLibsHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicWindowsHelpers.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6/Qt6Dependencies.cmake", + "/usr/lib64/cmake/Qt6Test/Qt6TestConfigVersion.cmake", + "/usr/lib64/cmake/Qt6Test/Qt6TestConfigVersionImpl.cmake", + "/usr/lib64/cmake/Qt6Test/Qt6TestConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6Test/Qt6TestDependencies.cmake", + "/usr/lib64/cmake/Qt6Test/Qt6TestTargets.cmake", + "/usr/lib64/cmake/Qt6Test/Qt6TestTargets-relwithdebinfo.cmake", + "/usr/lib64/cmake/Qt6Test/Qt6TestAdditionalTargetInfo.cmake", + "/usr/lib64/cmake/Qt6Test/QtTestProperties.cmake", + "/usr/lib64/cmake/Qt6Test/Qt6TestVersionlessAliasTargets.cmake" + ], + "CMAKE_SOURCE_DIR" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6", + "CROSS_CONFIG" : false, + "DEP_FILE" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_sequence_detector_autogen/deps", + "DEP_FILE_RULE_NAME" : "test_sequence_detector_autogen/timestamp", + "HEADERS" : + [ + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/sequence_detector.h", + "MU", + "VNU7RW3YIC/moc_sequence_detector.cpp", + null + ] + ], + "HEADER_EXTENSIONS" : [ "h", "hh", "h++", "hm", "hpp", "hxx", "in", "txx" ], + "INCLUDE_DIR" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_sequence_detector_autogen/include", + "MOC_COMPILATION_FILE" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_sequence_detector_autogen/mocs_compilation.cpp", + "MOC_DEFINITIONS" : + [ + "FTK_API_GL_4_1", + "QT_CORE_LIB", + "QT_NO_DEBUG", + "QT_TESTCASE_BUILDDIR=\"/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests\"", + "QT_TESTCASE_SOURCEDIR=\"/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests\"", + "QT_TESTLIB_LIB", + "TLRENDER_EXR", + "TLRENDER_FFMPEG", + "TLRENDER_FFMPEG_PLUGIN", + "TLRENDER_JPEG", + "TLRENDER_OCIO", + "TLRENDER_OIIO", + "TLRENDER_PNG", + "TLRENDER_SDL2", + "TLRENDER_TIFF" + ], + "MOC_DEPEND_FILTERS" : + [ + [ + "Q_PLUGIN_METADATA", + "[\n][ \t]*Q_PLUGIN_METADATA[ \t]*\\([^\\)]*FILE[ \t]*\"([^\"]+)\"" + ] + ], + "MOC_INCLUDES" : + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src", + "/usr/include/qt6/QtTest", + "/usr/include/qt6", + "/usr/include/qt6/QtCore", + "/usr/lib64/qt6/mkspecs/linux-g++", + "/usr/include/c++/15", + "/usr/include/c++/15/x86_64-redhat-linux", + "/usr/include/c++/15/backward", + "/usr/lib/gcc/x86_64-redhat-linux/15/include", + "/usr/local/include", + "/usr/include" + ], + "MOC_MACRO_NAMES" : + [ + "Q_OBJECT", + "Q_GADGET", + "Q_NAMESPACE", + "Q_NAMESPACE_EXPORT", + "Q_GADGET_EXPORT", + "Q_ENUM_NS" + ], + "MOC_OPTIONS" : [], + "MOC_PATH_PREFIX" : false, + "MOC_PREDEFS_CMD" : + [ + "/usr/bin/c++", + "-std=gnu++20", + "-w", + "-dM", + "-E", + "/usr/share/cmake/Modules/CMakeCXXCompilerABI.cpp" + ], + "MOC_PREDEFS_FILE" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_sequence_detector_autogen/moc_predefs.h", + "MOC_RELAXED_MODE" : false, + "MOC_SKIP" : + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_db_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_models_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_simple_autogen/mocs_compilation.cpp" + ], + "MULTI_CONFIG" : false, + "PARALLEL" : 16, + "PARSE_CACHE_FILE" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/CMakeFiles/test_sequence_detector_autogen.dir/ParseCache.txt", + "QT_MOC_EXECUTABLE" : "/usr/lib64/qt6/libexec/moc", + "QT_UIC_EXECUTABLE" : "/usr/lib64/qt6/libexec/uic", + "QT_VERSION_MAJOR" : 6, + "QT_VERSION_MINOR" : 10, + "SETTINGS_FILE" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/CMakeFiles/test_sequence_detector_autogen.dir/AutogenUsed.txt", + "SOURCES" : + [ + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/sequence_detector.cpp", + "MU", + null + ], + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/test_sequence_detector.cpp", + "MU", + null + ] + ], + "UIC_OPTIONS" : [], + "UIC_SEARCH_PATHS" : [], + "UIC_SKIP" : + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_db_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_models_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_simple_autogen/mocs_compilation.cpp" + ], + "UIC_UI_FILES" : [], + "USE_BETTER_GRAPH" : true, + "VERBOSITY" : 0 +} diff --git a/build-linux/tests/CMakeFiles/test_sequence_detector_autogen.dir/AutogenUsed.txt b/build-linux/tests/CMakeFiles/test_sequence_detector_autogen.dir/AutogenUsed.txt new file mode 100644 index 00000000..20965e66 --- /dev/null +++ b/build-linux/tests/CMakeFiles/test_sequence_detector_autogen.dir/AutogenUsed.txt @@ -0,0 +1,2 @@ +moc:c8d2e0d6b9ec6bb88a26555d36562f211c048bd223b76c1f6f46a9a723c9bcd4 +uic:0df7b06f04b60705a14ff966fc10725af0fb193398324deeaf17e44a5f9db1e0 diff --git a/build-linux/tests/CMakeFiles/test_sequence_detector_autogen.dir/ParseCache.txt b/build-linux/tests/CMakeFiles/test_sequence_detector_autogen.dir/ParseCache.txt new file mode 100644 index 00000000..80779711 --- /dev/null +++ b/build-linux/tests/CMakeFiles/test_sequence_detector_autogen.dir/ParseCache.txt @@ -0,0 +1,782 @@ +# Generated by CMake. Changes will be overwritten. +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/test_sequence_detector.cpp + mmc:Q_OBJECT + mid:test_sequence_detector.moc + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_sequence_detector_autogen/moc_predefs.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/sequence_detector.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/test_sequence_detector.cpp + mdp:/usr/include/asm-generic/bitsperlong.h + mdp:/usr/include/asm-generic/errno-base.h + mdp:/usr/include/asm-generic/errno.h + mdp:/usr/include/asm-generic/int-ll64.h + mdp:/usr/include/asm-generic/posix_types.h + mdp:/usr/include/asm-generic/types.h + mdp:/usr/include/asm/bitsperlong.h + mdp:/usr/include/asm/errno.h + mdp:/usr/include/asm/posix_types.h + mdp:/usr/include/asm/posix_types_64.h + mdp:/usr/include/asm/types.h + mdp:/usr/include/asm/unistd.h + mdp:/usr/include/asm/unistd_64.h + mdp:/usr/include/assert.h + mdp:/usr/include/bits/atomic_wide_counter.h + mdp:/usr/include/bits/byteswap.h + mdp:/usr/include/bits/confname.h + mdp:/usr/include/bits/cpu-set.h + mdp:/usr/include/bits/endian.h + mdp:/usr/include/bits/endianness.h + mdp:/usr/include/bits/environments.h + mdp:/usr/include/bits/errno.h + mdp:/usr/include/bits/floatn-common.h + mdp:/usr/include/bits/floatn.h + mdp:/usr/include/bits/getopt_core.h + mdp:/usr/include/bits/getopt_posix.h + mdp:/usr/include/bits/libc-header-start.h + mdp:/usr/include/bits/locale.h + mdp:/usr/include/bits/long-double.h + mdp:/usr/include/bits/posix_opt.h + mdp:/usr/include/bits/pthread_stack_min-dynamic.h + mdp:/usr/include/bits/pthreadtypes-arch.h + mdp:/usr/include/bits/pthreadtypes.h + mdp:/usr/include/bits/sched.h + mdp:/usr/include/bits/select.h + mdp:/usr/include/bits/semaphore.h + mdp:/usr/include/bits/setjmp.h + mdp:/usr/include/bits/stdint-intn.h + mdp:/usr/include/bits/stdio_lim.h + mdp:/usr/include/bits/struct_mutex.h + mdp:/usr/include/bits/struct_rwlock.h + mdp:/usr/include/bits/syscall.h + mdp:/usr/include/bits/thread-shared-types.h + mdp:/usr/include/bits/time.h + mdp:/usr/include/bits/time64.h + mdp:/usr/include/bits/timesize.h + mdp:/usr/include/bits/timex.h + mdp:/usr/include/bits/types.h + mdp:/usr/include/bits/types/FILE.h + mdp:/usr/include/bits/types/__FILE.h + mdp:/usr/include/bits/types/__fpos64_t.h + mdp:/usr/include/bits/types/__fpos_t.h + mdp:/usr/include/bits/types/__locale_t.h + mdp:/usr/include/bits/types/__mbstate_t.h + mdp:/usr/include/bits/types/__sigset_t.h + mdp:/usr/include/bits/types/clock_t.h + mdp:/usr/include/bits/types/clockid_t.h + mdp:/usr/include/bits/types/cookie_io_functions_t.h + mdp:/usr/include/bits/types/error_t.h + mdp:/usr/include/bits/types/locale_t.h + mdp:/usr/include/bits/types/mbstate_t.h + mdp:/usr/include/bits/types/sigset_t.h + mdp:/usr/include/bits/types/struct_FILE.h + mdp:/usr/include/bits/types/struct___jmp_buf_tag.h + mdp:/usr/include/bits/types/struct_itimerspec.h + mdp:/usr/include/bits/types/struct_sched_param.h + mdp:/usr/include/bits/types/struct_timespec.h + mdp:/usr/include/bits/types/struct_timeval.h + mdp:/usr/include/bits/types/struct_tm.h + mdp:/usr/include/bits/types/time_t.h + mdp:/usr/include/bits/types/timer_t.h + mdp:/usr/include/bits/types/wint_t.h + mdp:/usr/include/bits/typesizes.h + mdp:/usr/include/bits/uintn-identity.h + mdp:/usr/include/bits/unistd_ext.h + mdp:/usr/include/bits/wchar.h + mdp:/usr/include/bits/wctype-wchar.h + mdp:/usr/include/bits/wordsize.h + mdp:/usr/include/c++/15/algorithm + mdp:/usr/include/c++/15/array + mdp:/usr/include/c++/15/atomic + mdp:/usr/include/c++/15/backward/auto_ptr.h + mdp:/usr/include/c++/15/backward/binders.h + mdp:/usr/include/c++/15/bit + mdp:/usr/include/c++/15/bits/algorithmfwd.h + mdp:/usr/include/c++/15/bits/align.h + mdp:/usr/include/c++/15/bits/alloc_traits.h + mdp:/usr/include/c++/15/bits/allocated_ptr.h + mdp:/usr/include/c++/15/bits/allocator.h + mdp:/usr/include/c++/15/bits/atomic_base.h + mdp:/usr/include/c++/15/bits/atomic_futex.h + mdp:/usr/include/c++/15/bits/atomic_lockfree_defines.h + mdp:/usr/include/c++/15/bits/atomic_timed_wait.h + mdp:/usr/include/c++/15/bits/atomic_wait.h + mdp:/usr/include/c++/15/bits/basic_ios.h + mdp:/usr/include/c++/15/bits/basic_ios.tcc + mdp:/usr/include/c++/15/bits/basic_string.h + mdp:/usr/include/c++/15/bits/basic_string.tcc + mdp:/usr/include/c++/15/bits/char_traits.h + mdp:/usr/include/c++/15/bits/charconv.h + mdp:/usr/include/c++/15/bits/chrono.h + mdp:/usr/include/c++/15/bits/chrono_io.h + mdp:/usr/include/c++/15/bits/codecvt.h + mdp:/usr/include/c++/15/bits/concept_check.h + mdp:/usr/include/c++/15/bits/cpp_type_traits.h + mdp:/usr/include/c++/15/bits/cxxabi_forced.h + mdp:/usr/include/c++/15/bits/cxxabi_init_exception.h + mdp:/usr/include/c++/15/bits/enable_special_members.h + mdp:/usr/include/c++/15/bits/erase_if.h + mdp:/usr/include/c++/15/bits/exception.h + mdp:/usr/include/c++/15/bits/exception_defines.h + mdp:/usr/include/c++/15/bits/exception_ptr.h + mdp:/usr/include/c++/15/bits/functexcept.h + mdp:/usr/include/c++/15/bits/functional_hash.h + mdp:/usr/include/c++/15/bits/hash_bytes.h + mdp:/usr/include/c++/15/bits/hashtable.h + mdp:/usr/include/c++/15/bits/hashtable_policy.h + mdp:/usr/include/c++/15/bits/invoke.h + mdp:/usr/include/c++/15/bits/ios_base.h + mdp:/usr/include/c++/15/bits/istream.tcc + mdp:/usr/include/c++/15/bits/iterator_concepts.h + mdp:/usr/include/c++/15/bits/list.tcc + mdp:/usr/include/c++/15/bits/locale_classes.h + mdp:/usr/include/c++/15/bits/locale_classes.tcc + mdp:/usr/include/c++/15/bits/locale_conv.h + mdp:/usr/include/c++/15/bits/locale_facets.h + mdp:/usr/include/c++/15/bits/locale_facets.tcc + mdp:/usr/include/c++/15/bits/locale_facets_nonio.h + mdp:/usr/include/c++/15/bits/locale_facets_nonio.tcc + mdp:/usr/include/c++/15/bits/localefwd.h + mdp:/usr/include/c++/15/bits/max_size_type.h + mdp:/usr/include/c++/15/bits/memory_resource.h + mdp:/usr/include/c++/15/bits/memoryfwd.h + mdp:/usr/include/c++/15/bits/move.h + mdp:/usr/include/c++/15/bits/nested_exception.h + mdp:/usr/include/c++/15/bits/new_allocator.h + mdp:/usr/include/c++/15/bits/node_handle.h + mdp:/usr/include/c++/15/bits/ostream.h + mdp:/usr/include/c++/15/bits/ostream.tcc + mdp:/usr/include/c++/15/bits/ostream_insert.h + mdp:/usr/include/c++/15/bits/parse_numbers.h + mdp:/usr/include/c++/15/bits/postypes.h + mdp:/usr/include/c++/15/bits/predefined_ops.h + mdp:/usr/include/c++/15/bits/ptr_traits.h + mdp:/usr/include/c++/15/bits/quoted_string.h + mdp:/usr/include/c++/15/bits/random.h + mdp:/usr/include/c++/15/bits/random.tcc + mdp:/usr/include/c++/15/bits/range_access.h + mdp:/usr/include/c++/15/bits/ranges_algo.h + mdp:/usr/include/c++/15/bits/ranges_algobase.h + mdp:/usr/include/c++/15/bits/ranges_base.h + mdp:/usr/include/c++/15/bits/ranges_cmp.h + mdp:/usr/include/c++/15/bits/ranges_uninitialized.h + mdp:/usr/include/c++/15/bits/ranges_util.h + mdp:/usr/include/c++/15/bits/refwrap.h + mdp:/usr/include/c++/15/bits/requires_hosted.h + mdp:/usr/include/c++/15/bits/semaphore_base.h + mdp:/usr/include/c++/15/bits/shared_ptr.h + mdp:/usr/include/c++/15/bits/shared_ptr_atomic.h + mdp:/usr/include/c++/15/bits/shared_ptr_base.h + mdp:/usr/include/c++/15/bits/specfun.h + mdp:/usr/include/c++/15/bits/sstream.tcc + mdp:/usr/include/c++/15/bits/std_abs.h + mdp:/usr/include/c++/15/bits/std_function.h + mdp:/usr/include/c++/15/bits/std_mutex.h + mdp:/usr/include/c++/15/bits/std_thread.h + mdp:/usr/include/c++/15/bits/stl_algo.h + mdp:/usr/include/c++/15/bits/stl_algobase.h + mdp:/usr/include/c++/15/bits/stl_bvector.h + mdp:/usr/include/c++/15/bits/stl_construct.h + mdp:/usr/include/c++/15/bits/stl_function.h + mdp:/usr/include/c++/15/bits/stl_heap.h + mdp:/usr/include/c++/15/bits/stl_iterator.h + mdp:/usr/include/c++/15/bits/stl_iterator_base_funcs.h + mdp:/usr/include/c++/15/bits/stl_iterator_base_types.h + mdp:/usr/include/c++/15/bits/stl_list.h + mdp:/usr/include/c++/15/bits/stl_map.h + mdp:/usr/include/c++/15/bits/stl_multimap.h + mdp:/usr/include/c++/15/bits/stl_multiset.h + mdp:/usr/include/c++/15/bits/stl_numeric.h + mdp:/usr/include/c++/15/bits/stl_pair.h + mdp:/usr/include/c++/15/bits/stl_raw_storage_iter.h + mdp:/usr/include/c++/15/bits/stl_relops.h + mdp:/usr/include/c++/15/bits/stl_set.h + mdp:/usr/include/c++/15/bits/stl_tempbuf.h + mdp:/usr/include/c++/15/bits/stl_tree.h + mdp:/usr/include/c++/15/bits/stl_uninitialized.h + mdp:/usr/include/c++/15/bits/stl_vector.h + mdp:/usr/include/c++/15/bits/stream_iterator.h + mdp:/usr/include/c++/15/bits/streambuf.tcc + mdp:/usr/include/c++/15/bits/streambuf_iterator.h + mdp:/usr/include/c++/15/bits/string_view.tcc + mdp:/usr/include/c++/15/bits/stringfwd.h + mdp:/usr/include/c++/15/bits/this_thread_sleep.h + mdp:/usr/include/c++/15/bits/uniform_int_dist.h + mdp:/usr/include/c++/15/bits/unique_lock.h + mdp:/usr/include/c++/15/bits/unique_ptr.h + mdp:/usr/include/c++/15/bits/unordered_map.h + mdp:/usr/include/c++/15/bits/unordered_set.h + mdp:/usr/include/c++/15/bits/uses_allocator.h + mdp:/usr/include/c++/15/bits/uses_allocator_args.h + mdp:/usr/include/c++/15/bits/utility.h + mdp:/usr/include/c++/15/bits/vector.tcc + mdp:/usr/include/c++/15/bits/version.h + mdp:/usr/include/c++/15/cassert + mdp:/usr/include/c++/15/cctype + mdp:/usr/include/c++/15/cerrno + mdp:/usr/include/c++/15/charconv + mdp:/usr/include/c++/15/chrono + mdp:/usr/include/c++/15/climits + mdp:/usr/include/c++/15/clocale + mdp:/usr/include/c++/15/cmath + mdp:/usr/include/c++/15/compare + mdp:/usr/include/c++/15/concepts + mdp:/usr/include/c++/15/condition_variable + mdp:/usr/include/c++/15/cstddef + mdp:/usr/include/c++/15/cstdint + mdp:/usr/include/c++/15/cstdio + mdp:/usr/include/c++/15/cstdlib + mdp:/usr/include/c++/15/cstring + mdp:/usr/include/c++/15/ctime + mdp:/usr/include/c++/15/cwchar + mdp:/usr/include/c++/15/cwctype + mdp:/usr/include/c++/15/debug/assertions.h + mdp:/usr/include/c++/15/debug/debug.h + mdp:/usr/include/c++/15/exception + mdp:/usr/include/c++/15/experimental/source_location + mdp:/usr/include/c++/15/ext/aligned_buffer.h + mdp:/usr/include/c++/15/ext/alloc_traits.h + mdp:/usr/include/c++/15/ext/atomicity.h + mdp:/usr/include/c++/15/ext/concurrence.h + mdp:/usr/include/c++/15/ext/numeric_traits.h + mdp:/usr/include/c++/15/ext/string_conversions.h + mdp:/usr/include/c++/15/ext/type_traits.h + mdp:/usr/include/c++/15/filesystem + mdp:/usr/include/c++/15/format + mdp:/usr/include/c++/15/functional + mdp:/usr/include/c++/15/future + mdp:/usr/include/c++/15/initializer_list + mdp:/usr/include/c++/15/iomanip + mdp:/usr/include/c++/15/ios + mdp:/usr/include/c++/15/iosfwd + mdp:/usr/include/c++/15/istream + mdp:/usr/include/c++/15/iterator + mdp:/usr/include/c++/15/limits + mdp:/usr/include/c++/15/list + mdp:/usr/include/c++/15/locale + mdp:/usr/include/c++/15/map + mdp:/usr/include/c++/15/memory + mdp:/usr/include/c++/15/memory_resource + mdp:/usr/include/c++/15/mutex + mdp:/usr/include/c++/15/new + mdp:/usr/include/c++/15/numeric + mdp:/usr/include/c++/15/optional + mdp:/usr/include/c++/15/ostream + mdp:/usr/include/c++/15/pstl/execution_defs.h + mdp:/usr/include/c++/15/pstl/glue_numeric_defs.h + mdp:/usr/include/c++/15/pstl/pstl_config.h + mdp:/usr/include/c++/15/random + mdp:/usr/include/c++/15/ratio + mdp:/usr/include/c++/15/semaphore + mdp:/usr/include/c++/15/set + mdp:/usr/include/c++/15/shared_mutex + mdp:/usr/include/c++/15/source_location + mdp:/usr/include/c++/15/sstream + mdp:/usr/include/c++/15/stdexcept + mdp:/usr/include/c++/15/stdlib.h + mdp:/usr/include/c++/15/stop_token + mdp:/usr/include/c++/15/streambuf + mdp:/usr/include/c++/15/string + mdp:/usr/include/c++/15/string_view + mdp:/usr/include/c++/15/system_error + mdp:/usr/include/c++/15/tr1/bessel_function.tcc + mdp:/usr/include/c++/15/tr1/beta_function.tcc + mdp:/usr/include/c++/15/tr1/ell_integral.tcc + mdp:/usr/include/c++/15/tr1/exp_integral.tcc + mdp:/usr/include/c++/15/tr1/gamma.tcc + mdp:/usr/include/c++/15/tr1/hypergeometric.tcc + mdp:/usr/include/c++/15/tr1/legendre_function.tcc + mdp:/usr/include/c++/15/tr1/modified_bessel_func.tcc + mdp:/usr/include/c++/15/tr1/poly_hermite.tcc + mdp:/usr/include/c++/15/tr1/poly_laguerre.tcc + mdp:/usr/include/c++/15/tr1/riemann_zeta.tcc + mdp:/usr/include/c++/15/tr1/special_function_util.h + mdp:/usr/include/c++/15/tuple + mdp:/usr/include/c++/15/type_traits + mdp:/usr/include/c++/15/typeinfo + mdp:/usr/include/c++/15/unordered_map + mdp:/usr/include/c++/15/unordered_set + mdp:/usr/include/c++/15/utility + mdp:/usr/include/c++/15/variant + mdp:/usr/include/c++/15/vector + mdp:/usr/include/c++/15/version + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/atomic_word.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++allocator.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++config.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++locale.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/cpu_defines.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/ctype_base.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/ctype_inline.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/error_constants.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/gthr-default.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/gthr.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/messages_members.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/opt_random.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/os_defines.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/time_members.h + mdp:/usr/include/ctype.h + mdp:/usr/include/endian.h + mdp:/usr/include/errno.h + mdp:/usr/include/features-time64.h + mdp:/usr/include/features.h + mdp:/usr/include/gnu/stubs-64.h + mdp:/usr/include/gnu/stubs.h + mdp:/usr/include/libintl.h + mdp:/usr/include/linux/close_range.h + mdp:/usr/include/linux/errno.h + mdp:/usr/include/linux/posix_types.h + mdp:/usr/include/linux/sched/types.h + mdp:/usr/include/linux/stddef.h + mdp:/usr/include/linux/types.h + mdp:/usr/include/locale.h + mdp:/usr/include/pthread.h + mdp:/usr/include/qt6/QtCore/QAbstractItemModel + mdp:/usr/include/qt6/QtCore/QDeadlineTimer + mdp:/usr/include/qt6/QtCore/QDir + mdp:/usr/include/qt6/QtCore/QFile + mdp:/usr/include/qt6/QtCore/QFileInfo + mdp:/usr/include/qt6/QtCore/QHash + mdp:/usr/include/qt6/QtCore/QHashFunctions + mdp:/usr/include/qt6/QtCore/QList + mdp:/usr/include/qt6/QtCore/QMap + mdp:/usr/include/qt6/QtCore/QMutex + mdp:/usr/include/qt6/QtCore/QObject + mdp:/usr/include/qt6/QtCore/QRegularExpression + mdp:/usr/include/qt6/QtCore/QString + mdp:/usr/include/qt6/QtCore/QStringList + mdp:/usr/include/qt6/QtCore/QTemporaryDir + mdp:/usr/include/qt6/QtCore/QTextStream + mdp:/usr/include/qt6/QtCore/QVariant + mdp:/usr/include/qt6/QtCore/QVector + mdp:/usr/include/qt6/QtCore/QtCore + mdp:/usr/include/qt6/QtCore/QtCoreDepends + mdp:/usr/include/qt6/QtCore/q17memory.h + mdp:/usr/include/qt6/QtCore/q20algorithm.h + mdp:/usr/include/qt6/QtCore/q20chrono.h + mdp:/usr/include/qt6/QtCore/q20functional.h + mdp:/usr/include/qt6/QtCore/q20iterator.h + mdp:/usr/include/qt6/QtCore/q20map.h + mdp:/usr/include/qt6/QtCore/q20memory.h + mdp:/usr/include/qt6/QtCore/q20type_traits.h + mdp:/usr/include/qt6/QtCore/q20utility.h + mdp:/usr/include/qt6/QtCore/q20vector.h + mdp:/usr/include/qt6/QtCore/q23functional.h + mdp:/usr/include/qt6/QtCore/q23type_traits.h + mdp:/usr/include/qt6/QtCore/q23utility.h + mdp:/usr/include/qt6/QtCore/q26numeric.h + mdp:/usr/include/qt6/QtCore/qabstractanimation.h + mdp:/usr/include/qt6/QtCore/qabstracteventdispatcher.h + mdp:/usr/include/qt6/QtCore/qabstractitemmodel.h + mdp:/usr/include/qt6/QtCore/qabstractnativeeventfilter.h + mdp:/usr/include/qt6/QtCore/qabstractproxymodel.h + mdp:/usr/include/qt6/QtCore/qalgorithms.h + mdp:/usr/include/qt6/QtCore/qalloc.h + mdp:/usr/include/qt6/QtCore/qanimationgroup.h + mdp:/usr/include/qt6/QtCore/qanystringview.h + mdp:/usr/include/qt6/QtCore/qapplicationstatic.h + mdp:/usr/include/qt6/QtCore/qarraydata.h + mdp:/usr/include/qt6/QtCore/qarraydataops.h + mdp:/usr/include/qt6/QtCore/qarraydatapointer.h + mdp:/usr/include/qt6/QtCore/qassert.h + mdp:/usr/include/qt6/QtCore/qassociativeiterable.h + mdp:/usr/include/qt6/QtCore/qatomic.h + mdp:/usr/include/qt6/QtCore/qatomic_cxx11.h + mdp:/usr/include/qt6/QtCore/qatomicscopedvaluerollback.h + mdp:/usr/include/qt6/QtCore/qbasicatomic.h + mdp:/usr/include/qt6/QtCore/qbasictimer.h + mdp:/usr/include/qt6/QtCore/qbindingstorage.h + mdp:/usr/include/qt6/QtCore/qbitarray.h + mdp:/usr/include/qt6/QtCore/qbuffer.h + mdp:/usr/include/qt6/QtCore/qbytearray.h + mdp:/usr/include/qt6/QtCore/qbytearrayalgorithms.h + mdp:/usr/include/qt6/QtCore/qbytearraylist.h + mdp:/usr/include/qt6/QtCore/qbytearraymatcher.h + mdp:/usr/include/qt6/QtCore/qbytearrayview.h + mdp:/usr/include/qt6/QtCore/qcache.h + mdp:/usr/include/qt6/QtCore/qcalendar.h + mdp:/usr/include/qt6/QtCore/qcborarray.h + mdp:/usr/include/qt6/QtCore/qcborcommon.h + mdp:/usr/include/qt6/QtCore/qcbormap.h + mdp:/usr/include/qt6/QtCore/qcborstream.h + mdp:/usr/include/qt6/QtCore/qcborstreamreader.h + mdp:/usr/include/qt6/QtCore/qcborstreamwriter.h + mdp:/usr/include/qt6/QtCore/qcborvalue.h + mdp:/usr/include/qt6/QtCore/qchar.h + mdp:/usr/include/qt6/QtCore/qcheckedint_impl.h + mdp:/usr/include/qt6/QtCore/qchronotimer.h + mdp:/usr/include/qt6/QtCore/qcollator.h + mdp:/usr/include/qt6/QtCore/qcommandlineoption.h + mdp:/usr/include/qt6/QtCore/qcommandlineparser.h + mdp:/usr/include/qt6/QtCore/qcompare.h + mdp:/usr/include/qt6/QtCore/qcompare_impl.h + mdp:/usr/include/qt6/QtCore/qcomparehelpers.h + mdp:/usr/include/qt6/QtCore/qcompilerdetection.h + mdp:/usr/include/qt6/QtCore/qconcatenatetablesproxymodel.h + mdp:/usr/include/qt6/QtCore/qconfig-64.h + mdp:/usr/include/qt6/QtCore/qconfig.h + mdp:/usr/include/qt6/QtCore/qconstructormacros.h + mdp:/usr/include/qt6/QtCore/qcontainerfwd.h + mdp:/usr/include/qt6/QtCore/qcontainerinfo.h + mdp:/usr/include/qt6/QtCore/qcontainertools_impl.h + mdp:/usr/include/qt6/QtCore/qcontiguouscache.h + mdp:/usr/include/qt6/QtCore/qcoreapplication.h + mdp:/usr/include/qt6/QtCore/qcoreapplication_platform.h + mdp:/usr/include/qt6/QtCore/qcoreevent.h + mdp:/usr/include/qt6/QtCore/qcryptographichash.h + mdp:/usr/include/qt6/QtCore/qdarwinhelpers.h + mdp:/usr/include/qt6/QtCore/qdatastream.h + mdp:/usr/include/qt6/QtCore/qdatetime.h + mdp:/usr/include/qt6/QtCore/qdeadlinetimer.h + mdp:/usr/include/qt6/QtCore/qdebug.h + mdp:/usr/include/qt6/QtCore/qdir.h + mdp:/usr/include/qt6/QtCore/qdiriterator.h + mdp:/usr/include/qt6/QtCore/qdirlisting.h + mdp:/usr/include/qt6/QtCore/qeasingcurve.h + mdp:/usr/include/qt6/QtCore/qelapsedtimer.h + mdp:/usr/include/qt6/QtCore/qendian.h + mdp:/usr/include/qt6/QtCore/qeventloop.h + mdp:/usr/include/qt6/QtCore/qexception.h + mdp:/usr/include/qt6/QtCore/qexceptionhandling.h + mdp:/usr/include/qt6/QtCore/qfactoryinterface.h + mdp:/usr/include/qt6/QtCore/qfile.h + mdp:/usr/include/qt6/QtCore/qfiledevice.h + mdp:/usr/include/qt6/QtCore/qfileinfo.h + mdp:/usr/include/qt6/QtCore/qfileselector.h + mdp:/usr/include/qt6/QtCore/qfilesystemwatcher.h + mdp:/usr/include/qt6/QtCore/qflags.h + mdp:/usr/include/qt6/QtCore/qfloat16.h + mdp:/usr/include/qt6/QtCore/qforeach.h + mdp:/usr/include/qt6/QtCore/qfunctionaltools_impl.h + mdp:/usr/include/qt6/QtCore/qfunctionpointer.h + mdp:/usr/include/qt6/QtCore/qfuture.h + mdp:/usr/include/qt6/QtCore/qfuture_impl.h + mdp:/usr/include/qt6/QtCore/qfutureinterface.h + mdp:/usr/include/qt6/QtCore/qfuturesynchronizer.h + mdp:/usr/include/qt6/QtCore/qfuturewatcher.h + mdp:/usr/include/qt6/QtCore/qgenericatomic.h + mdp:/usr/include/qt6/QtCore/qglobal.h + mdp:/usr/include/qt6/QtCore/qglobalstatic.h + mdp:/usr/include/qt6/QtCore/qhash.h + mdp:/usr/include/qt6/QtCore/qhashfunctions.h + mdp:/usr/include/qt6/QtCore/qidentityproxymodel.h + mdp:/usr/include/qt6/QtCore/qiodevice.h + mdp:/usr/include/qt6/QtCore/qiodevicebase.h + mdp:/usr/include/qt6/QtCore/qitemselectionmodel.h + mdp:/usr/include/qt6/QtCore/qiterable.h + mdp:/usr/include/qt6/QtCore/qiterator.h + mdp:/usr/include/qt6/QtCore/qjsonarray.h + mdp:/usr/include/qt6/QtCore/qjsondocument.h + mdp:/usr/include/qt6/QtCore/qjsonobject.h + mdp:/usr/include/qt6/QtCore/qjsonparseerror.h + mdp:/usr/include/qt6/QtCore/qjsonvalue.h + mdp:/usr/include/qt6/QtCore/qlatin1stringmatcher.h + mdp:/usr/include/qt6/QtCore/qlatin1stringview.h + mdp:/usr/include/qt6/QtCore/qlibrary.h + mdp:/usr/include/qt6/QtCore/qlibraryinfo.h + mdp:/usr/include/qt6/QtCore/qline.h + mdp:/usr/include/qt6/QtCore/qlist.h + mdp:/usr/include/qt6/QtCore/qlocale.h + mdp:/usr/include/qt6/QtCore/qlockfile.h + mdp:/usr/include/qt6/QtCore/qlogging.h + mdp:/usr/include/qt6/QtCore/qloggingcategory.h + mdp:/usr/include/qt6/QtCore/qmalloc.h + mdp:/usr/include/qt6/QtCore/qmap.h + mdp:/usr/include/qt6/QtCore/qmargins.h + mdp:/usr/include/qt6/QtCore/qmath.h + mdp:/usr/include/qt6/QtCore/qmessageauthenticationcode.h + mdp:/usr/include/qt6/QtCore/qmetacontainer.h + mdp:/usr/include/qt6/QtCore/qmetaobject.h + mdp:/usr/include/qt6/QtCore/qmetatype.h + mdp:/usr/include/qt6/QtCore/qmimedata.h + mdp:/usr/include/qt6/QtCore/qmimedatabase.h + mdp:/usr/include/qt6/QtCore/qmimetype.h + mdp:/usr/include/qt6/QtCore/qminmax.h + mdp:/usr/include/qt6/QtCore/qmutex.h + mdp:/usr/include/qt6/QtCore/qnamespace.h + mdp:/usr/include/qt6/QtCore/qnativeinterface.h + mdp:/usr/include/qt6/QtCore/qnumeric.h + mdp:/usr/include/qt6/QtCore/qobject.h + mdp:/usr/include/qt6/QtCore/qobject_impl.h + mdp:/usr/include/qt6/QtCore/qobjectcleanuphandler.h + mdp:/usr/include/qt6/QtCore/qobjectdefs.h + mdp:/usr/include/qt6/QtCore/qobjectdefs_impl.h + mdp:/usr/include/qt6/QtCore/qoperatingsystemversion.h + mdp:/usr/include/qt6/QtCore/qoverload.h + mdp:/usr/include/qt6/QtCore/qpair.h + mdp:/usr/include/qt6/QtCore/qparallelanimationgroup.h + mdp:/usr/include/qt6/QtCore/qpauseanimation.h + mdp:/usr/include/qt6/QtCore/qpermissions.h + mdp:/usr/include/qt6/QtCore/qplugin.h + mdp:/usr/include/qt6/QtCore/qpluginloader.h + mdp:/usr/include/qt6/QtCore/qpoint.h + mdp:/usr/include/qt6/QtCore/qpointer.h + mdp:/usr/include/qt6/QtCore/qprocess.h + mdp:/usr/include/qt6/QtCore/qprocessordetection.h + mdp:/usr/include/qt6/QtCore/qpromise.h + mdp:/usr/include/qt6/QtCore/qproperty.h + mdp:/usr/include/qt6/QtCore/qpropertyanimation.h + mdp:/usr/include/qt6/QtCore/qpropertyprivate.h + mdp:/usr/include/qt6/QtCore/qqueue.h + mdp:/usr/include/qt6/QtCore/qrandom.h + mdp:/usr/include/qt6/QtCore/qrangemodel.h + mdp:/usr/include/qt6/QtCore/qrangemodel_impl.h + mdp:/usr/include/qt6/QtCore/qreadwritelock.h + mdp:/usr/include/qt6/QtCore/qrect.h + mdp:/usr/include/qt6/QtCore/qrefcount.h + mdp:/usr/include/qt6/QtCore/qregularexpression.h + mdp:/usr/include/qt6/QtCore/qresource.h + mdp:/usr/include/qt6/QtCore/qresultstore.h + mdp:/usr/include/qt6/QtCore/qrunnable.h + mdp:/usr/include/qt6/QtCore/qsavefile.h + mdp:/usr/include/qt6/QtCore/qscopedpointer.h + mdp:/usr/include/qt6/QtCore/qscopedvaluerollback.h + mdp:/usr/include/qt6/QtCore/qscopeguard.h + mdp:/usr/include/qt6/QtCore/qsemaphore.h + mdp:/usr/include/qt6/QtCore/qsequentialanimationgroup.h + mdp:/usr/include/qt6/QtCore/qsequentialiterable.h + mdp:/usr/include/qt6/QtCore/qset.h + mdp:/usr/include/qt6/QtCore/qsettings.h + mdp:/usr/include/qt6/QtCore/qshareddata.h + mdp:/usr/include/qt6/QtCore/qshareddata_impl.h + mdp:/usr/include/qt6/QtCore/qsharedmemory.h + mdp:/usr/include/qt6/QtCore/qsharedpointer.h + mdp:/usr/include/qt6/QtCore/qsharedpointer_impl.h + mdp:/usr/include/qt6/QtCore/qsignalmapper.h + mdp:/usr/include/qt6/QtCore/qsimd.h + mdp:/usr/include/qt6/QtCore/qsize.h + mdp:/usr/include/qt6/QtCore/qsocketnotifier.h + mdp:/usr/include/qt6/QtCore/qsortfilterproxymodel.h + mdp:/usr/include/qt6/QtCore/qspan.h + mdp:/usr/include/qt6/QtCore/qstack.h + mdp:/usr/include/qt6/QtCore/qstandardpaths.h + mdp:/usr/include/qt6/QtCore/qstaticlatin1stringmatcher.h + mdp:/usr/include/qt6/QtCore/qstdlibdetection.h + mdp:/usr/include/qt6/QtCore/qstorageinfo.h + mdp:/usr/include/qt6/QtCore/qstring.h + mdp:/usr/include/qt6/QtCore/qstringalgorithms.h + mdp:/usr/include/qt6/QtCore/qstringbuilder.h + mdp:/usr/include/qt6/QtCore/qstringconverter.h + mdp:/usr/include/qt6/QtCore/qstringconverter_base.h + mdp:/usr/include/qt6/QtCore/qstringfwd.h + mdp:/usr/include/qt6/QtCore/qstringlist.h + mdp:/usr/include/qt6/QtCore/qstringlistmodel.h + mdp:/usr/include/qt6/QtCore/qstringliteral.h + mdp:/usr/include/qt6/QtCore/qstringmatcher.h + mdp:/usr/include/qt6/QtCore/qstringtokenizer.h + mdp:/usr/include/qt6/QtCore/qstringview.h + mdp:/usr/include/qt6/QtCore/qswap.h + mdp:/usr/include/qt6/QtCore/qsysinfo.h + mdp:/usr/include/qt6/QtCore/qsystemdetection.h + mdp:/usr/include/qt6/QtCore/qsystemsemaphore.h + mdp:/usr/include/qt6/QtCore/qtaggedpointer.h + mdp:/usr/include/qt6/QtCore/qtclasshelpermacros.h + mdp:/usr/include/qt6/QtCore/qtconfiginclude.h + mdp:/usr/include/qt6/QtCore/qtconfigmacros.h + mdp:/usr/include/qt6/QtCore/qtcore-config.h + mdp:/usr/include/qt6/QtCore/qtcoreexports.h + mdp:/usr/include/qt6/QtCore/qtcoreglobal.h + mdp:/usr/include/qt6/QtCore/qtcoreversion.h + mdp:/usr/include/qt6/QtCore/qtdeprecationdefinitions.h + mdp:/usr/include/qt6/QtCore/qtdeprecationmarkers.h + mdp:/usr/include/qt6/QtCore/qtemporarydir.h + mdp:/usr/include/qt6/QtCore/qtemporaryfile.h + mdp:/usr/include/qt6/QtCore/qtenvironmentvariables.h + mdp:/usr/include/qt6/QtCore/qtestsupport_core.h + mdp:/usr/include/qt6/QtCore/qtextboundaryfinder.h + mdp:/usr/include/qt6/QtCore/qtextstream.h + mdp:/usr/include/qt6/QtCore/qtformat_impl.h + mdp:/usr/include/qt6/QtCore/qthread.h + mdp:/usr/include/qt6/QtCore/qthreadpool.h + mdp:/usr/include/qt6/QtCore/qthreadstorage.h + mdp:/usr/include/qt6/QtCore/qtimeline.h + mdp:/usr/include/qt6/QtCore/qtimer.h + mdp:/usr/include/qt6/QtCore/qtimezone.h + mdp:/usr/include/qt6/QtCore/qtipccommon.h + mdp:/usr/include/qt6/QtCore/qtmetamacros.h + mdp:/usr/include/qt6/QtCore/qtmocconstants.h + mdp:/usr/include/qt6/QtCore/qtnoop.h + mdp:/usr/include/qt6/QtCore/qtpreprocessorsupport.h + mdp:/usr/include/qt6/QtCore/qtranslator.h + mdp:/usr/include/qt6/QtCore/qtransposeproxymodel.h + mdp:/usr/include/qt6/QtCore/qtresource.h + mdp:/usr/include/qt6/QtCore/qtsan_impl.h + mdp:/usr/include/qt6/QtCore/qtsymbolmacros.h + mdp:/usr/include/qt6/QtCore/qttranslation.h + mdp:/usr/include/qt6/QtCore/qttypetraits.h + mdp:/usr/include/qt6/QtCore/qtversion.h + mdp:/usr/include/qt6/QtCore/qtversionchecks.h + mdp:/usr/include/qt6/QtCore/qtypeinfo.h + mdp:/usr/include/qt6/QtCore/qtyperevision.h + mdp:/usr/include/qt6/QtCore/qtypes.h + mdp:/usr/include/qt6/QtCore/qurl.h + mdp:/usr/include/qt6/QtCore/qurlquery.h + mdp:/usr/include/qt6/QtCore/qutf8stringview.h + mdp:/usr/include/qt6/QtCore/quuid.h + mdp:/usr/include/qt6/QtCore/qvariant.h + mdp:/usr/include/qt6/QtCore/qvariantanimation.h + mdp:/usr/include/qt6/QtCore/qvarianthash.h + mdp:/usr/include/qt6/QtCore/qvariantlist.h + mdp:/usr/include/qt6/QtCore/qvariantmap.h + mdp:/usr/include/qt6/QtCore/qvarlengtharray.h + mdp:/usr/include/qt6/QtCore/qvector.h + mdp:/usr/include/qt6/QtCore/qversionnumber.h + mdp:/usr/include/qt6/QtCore/qversiontagging.h + mdp:/usr/include/qt6/QtCore/qwaitcondition.h + mdp:/usr/include/qt6/QtCore/qwineventnotifier.h + mdp:/usr/include/qt6/QtCore/qxmlstream.h + mdp:/usr/include/qt6/QtCore/qxpfunctional.h + mdp:/usr/include/qt6/QtCore/qxptype_traits.h + mdp:/usr/include/qt6/QtCore/qyieldcpu.h + mdp:/usr/include/qt6/QtTest/QtTest + mdp:/usr/include/qt6/QtTest/QtTestDepends + mdp:/usr/include/qt6/QtTest/qabstractitemmodeltester.h + mdp:/usr/include/qt6/QtTest/qbenchmark.h + mdp:/usr/include/qt6/QtTest/qbenchmarkmetric.h + mdp:/usr/include/qt6/QtTest/qsignalspy.h + mdp:/usr/include/qt6/QtTest/qtest.h + mdp:/usr/include/qt6/QtTest/qtestassert.h + mdp:/usr/include/qt6/QtTest/qtestcase.h + mdp:/usr/include/qt6/QtTest/qtestdata.h + mdp:/usr/include/qt6/QtTest/qtesteventloop.h + mdp:/usr/include/qt6/QtTest/qtestsystem.h + mdp:/usr/include/qt6/QtTest/qtesttostring.h + mdp:/usr/include/qt6/QtTest/qttestexports.h + mdp:/usr/include/qt6/QtTest/qttestglobal.h + mdp:/usr/include/qt6/QtTest/qttestlib-config.h + mdp:/usr/include/qt6/QtTest/qttestversion.h + mdp:/usr/include/sched.h + mdp:/usr/include/semaphore.h + mdp:/usr/include/stdc-predef.h + mdp:/usr/include/stdio.h + mdp:/usr/include/string.h + mdp:/usr/include/strings.h + mdp:/usr/include/sys/cdefs.h + mdp:/usr/include/sys/select.h + mdp:/usr/include/sys/single_threaded.h + mdp:/usr/include/sys/syscall.h + mdp:/usr/include/sys/time.h + mdp:/usr/include/sys/types.h + mdp:/usr/include/syscall.h + mdp:/usr/include/time.h + mdp:/usr/include/unistd.h + mdp:/usr/include/wchar.h + mdp:/usr/include/wctype.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/adxintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxavx512intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxbf16intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxcomplexintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxfp16intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxfp8intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxint8intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxmovrsintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxtf32intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxtileintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxtransposeintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2-512bf16intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2-512convertintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2-512mediaintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2-512minmaxintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2-512satcvtintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2bf16intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2convertintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2copyintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2mediaintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2minmaxintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2satcvtintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx2intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512bf16intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512bf16vlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512bitalgintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512bitalgvlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512bwintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512cdintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512dqintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512fintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512fp16intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512fp16vlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512ifmaintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512ifmavlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vbmi2intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vbmi2vlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vbmiintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vbmivlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vlbwintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vldqintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vnniintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vnnivlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vp2intersectintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vp2intersectvlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vpopcntdqintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vpopcntdqvlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avxifmaintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avxintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avxneconvertintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avxvnniint16intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avxvnniint8intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avxvnniintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/bmi2intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/bmiintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/cetintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/cldemoteintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/clflushoptintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/clwbintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/clzerointrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/cmpccxaddintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/emmintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/enqcmdintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/f16cintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/fmaintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/fxsrintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/gfniintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/hresetintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/ia32intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/immintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/keylockerintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/limits.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/lwpintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/lzcntintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/mm_malloc.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/mmintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/movdirintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/movrsintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/mwaitintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/mwaitxintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/pconfigintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/pkuintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/pmmintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/popcntintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/prfchiintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/prfchwintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/raointintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/rdseedintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/rtmintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/serializeintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/sgxintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/sha512intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/shaintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/sm3intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/sm4intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/smmintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stdarg.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stdbool.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stddef.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stdint.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/syslimits.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/tbmintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/tmmintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/tsxldtrkintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/uintrintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/usermsrintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/vaesintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/vpclmulqdqintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/waitpkgintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/wbnoinvdintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/wmmintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/x86gprintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/xmmintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/xsavecintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/xsaveintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/xsaveoptintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/xsavesintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/xtestintrin.h +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/sequence_detector.cpp +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/sequence_detector.h diff --git a/build-linux/tests/CMakeFiles/test_simple.dir/test_simple.cpp.o b/build-linux/tests/CMakeFiles/test_simple.dir/test_simple.cpp.o new file mode 100644 index 00000000..a67db6b3 Binary files /dev/null and b/build-linux/tests/CMakeFiles/test_simple.dir/test_simple.cpp.o differ diff --git a/build-linux/tests/CMakeFiles/test_simple.dir/test_simple_autogen/mocs_compilation.cpp.o b/build-linux/tests/CMakeFiles/test_simple.dir/test_simple_autogen/mocs_compilation.cpp.o new file mode 100644 index 00000000..bc1e4e33 Binary files /dev/null and b/build-linux/tests/CMakeFiles/test_simple.dir/test_simple_autogen/mocs_compilation.cpp.o differ diff --git a/build-linux/tests/CMakeFiles/test_simple_autogen.dir/AutogenInfo.json b/build-linux/tests/CMakeFiles/test_simple_autogen.dir/AutogenInfo.json new file mode 100644 index 00000000..7685390f --- /dev/null +++ b/build-linux/tests/CMakeFiles/test_simple_autogen.dir/AutogenInfo.json @@ -0,0 +1,165 @@ +{ + "BUILD_DIR" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_simple_autogen", + "CMAKE_BINARY_DIR" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux", + "CMAKE_CURRENT_BINARY_DIR" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests", + "CMAKE_CURRENT_SOURCE_DIR" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests", + "CMAKE_EXECUTABLE" : "/usr/bin/cmake", + "CMAKE_LIST_FILES" : + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/CMakeLists.txt", + "/usr/lib64/cmake/Qt6/Qt6ConfigVersion.cmake", + "/usr/lib64/cmake/Qt6/Qt6ConfigVersionImpl.cmake", + "/usr/lib64/cmake/Qt6/Qt6Config.cmake", + "/usr/lib64/cmake/Qt6/QtPublicCMakeEarlyPolicyHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicCMakeHelpers.cmake", + "/usr/lib64/cmake/Qt6/Qt6ConfigExtras.cmake", + "/usr/lib64/cmake/Qt6/QtPublicCMakeVersionHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtInstallPaths.cmake", + "/usr/lib64/cmake/Qt6/Qt6Targets.cmake", + "/usr/lib64/cmake/Qt6/Qt6VersionlessAliasTargets.cmake", + "/usr/lib64/cmake/Qt6/QtFeature.cmake", + "/usr/share/cmake/Modules/CheckCXXCompilerFlag.cmake", + "/usr/lib64/cmake/Qt6/QtFeatureCommon.cmake", + "/usr/lib64/cmake/Qt6/QtPublicAndroidHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicAppleHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicCMakeHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicCMakeVersionHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicDependencyHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicExternalProjectHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicFinalizerHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicFindPackageHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicGitHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicPluginHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicPluginHelpers_v2.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomAttributionHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomBuildToolHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomCommonGenerationHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomCpeHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomCycloneDXHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomDocumentNamespaceHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomDepHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomExternalReferenceHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomFileHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomGenerationHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomGenerationCycloneDXHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomLicenseHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomOpsHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomPurlHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomPythonHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomQtEntityHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomRelationshipHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomSystemDepHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicTargetHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicTestHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicToolHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicWalkLibsHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicWindowsHelpers.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6/Qt6Dependencies.cmake", + "/usr/lib64/cmake/Qt6Test/Qt6TestConfigVersion.cmake", + "/usr/lib64/cmake/Qt6Test/Qt6TestConfigVersionImpl.cmake", + "/usr/lib64/cmake/Qt6Test/Qt6TestConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6Test/Qt6TestDependencies.cmake", + "/usr/lib64/cmake/Qt6Test/Qt6TestTargets.cmake", + "/usr/lib64/cmake/Qt6Test/Qt6TestTargets-relwithdebinfo.cmake", + "/usr/lib64/cmake/Qt6Test/Qt6TestAdditionalTargetInfo.cmake", + "/usr/lib64/cmake/Qt6Test/QtTestProperties.cmake", + "/usr/lib64/cmake/Qt6Test/Qt6TestVersionlessAliasTargets.cmake" + ], + "CMAKE_SOURCE_DIR" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6", + "CROSS_CONFIG" : false, + "DEP_FILE" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_simple_autogen/deps", + "DEP_FILE_RULE_NAME" : "test_simple_autogen/timestamp", + "HEADERS" : [], + "HEADER_EXTENSIONS" : [ "h", "hh", "h++", "hm", "hpp", "hxx", "in", "txx" ], + "INCLUDE_DIR" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_simple_autogen/include", + "MOC_COMPILATION_FILE" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_simple_autogen/mocs_compilation.cpp", + "MOC_DEFINITIONS" : + [ + "FTK_API_GL_4_1", + "QT_CORE_LIB", + "QT_NO_DEBUG", + "QT_TESTCASE_BUILDDIR=\"/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests\"", + "QT_TESTCASE_SOURCEDIR=\"/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests\"", + "QT_TESTLIB_LIB", + "TLRENDER_EXR", + "TLRENDER_FFMPEG", + "TLRENDER_FFMPEG_PLUGIN", + "TLRENDER_JPEG", + "TLRENDER_OCIO", + "TLRENDER_OIIO", + "TLRENDER_PNG", + "TLRENDER_SDL2", + "TLRENDER_TIFF" + ], + "MOC_DEPEND_FILTERS" : + [ + [ + "Q_PLUGIN_METADATA", + "[\n][ \t]*Q_PLUGIN_METADATA[ \t]*\\([^\\)]*FILE[ \t]*\"([^\"]+)\"" + ] + ], + "MOC_INCLUDES" : + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src", + "/usr/include/qt6/QtTest", + "/usr/include/qt6", + "/usr/include/qt6/QtCore", + "/usr/lib64/qt6/mkspecs/linux-g++", + "/usr/include/c++/15", + "/usr/include/c++/15/x86_64-redhat-linux", + "/usr/include/c++/15/backward", + "/usr/lib/gcc/x86_64-redhat-linux/15/include", + "/usr/local/include", + "/usr/include" + ], + "MOC_MACRO_NAMES" : + [ + "Q_OBJECT", + "Q_GADGET", + "Q_NAMESPACE", + "Q_NAMESPACE_EXPORT", + "Q_GADGET_EXPORT", + "Q_ENUM_NS" + ], + "MOC_OPTIONS" : [], + "MOC_PATH_PREFIX" : false, + "MOC_PREDEFS_CMD" : + [ + "/usr/bin/c++", + "-std=gnu++20", + "-w", + "-dM", + "-E", + "/usr/share/cmake/Modules/CMakeCXXCompilerABI.cpp" + ], + "MOC_PREDEFS_FILE" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_simple_autogen/moc_predefs.h", + "MOC_RELAXED_MODE" : false, + "MOC_SKIP" : [], + "MULTI_CONFIG" : false, + "PARALLEL" : 16, + "PARSE_CACHE_FILE" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/CMakeFiles/test_simple_autogen.dir/ParseCache.txt", + "QT_MOC_EXECUTABLE" : "/usr/lib64/qt6/libexec/moc", + "QT_UIC_EXECUTABLE" : "/usr/lib64/qt6/libexec/uic", + "QT_VERSION_MAJOR" : 6, + "QT_VERSION_MINOR" : 10, + "SETTINGS_FILE" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/CMakeFiles/test_simple_autogen.dir/AutogenUsed.txt", + "SOURCES" : + [ + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/test_simple.cpp", + "MU", + null + ] + ], + "UIC_OPTIONS" : [], + "UIC_SEARCH_PATHS" : [], + "UIC_SKIP" : [], + "UIC_UI_FILES" : [], + "USE_BETTER_GRAPH" : true, + "VERBOSITY" : 0 +} diff --git a/build-linux/tests/CMakeFiles/test_simple_autogen.dir/AutogenUsed.txt b/build-linux/tests/CMakeFiles/test_simple_autogen.dir/AutogenUsed.txt new file mode 100644 index 00000000..20965e66 --- /dev/null +++ b/build-linux/tests/CMakeFiles/test_simple_autogen.dir/AutogenUsed.txt @@ -0,0 +1,2 @@ +moc:c8d2e0d6b9ec6bb88a26555d36562f211c048bd223b76c1f6f46a9a723c9bcd4 +uic:0df7b06f04b60705a14ff966fc10725af0fb193398324deeaf17e44a5f9db1e0 diff --git a/build-linux/tests/CMakeFiles/test_simple_autogen.dir/ParseCache.txt b/build-linux/tests/CMakeFiles/test_simple_autogen.dir/ParseCache.txt new file mode 100644 index 00000000..dca0587d --- /dev/null +++ b/build-linux/tests/CMakeFiles/test_simple_autogen.dir/ParseCache.txt @@ -0,0 +1,771 @@ +# Generated by CMake. Changes will be overwritten. +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/test_simple.cpp + mmc:Q_OBJECT + mid:test_simple.moc + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_simple_autogen/moc_predefs.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/test_simple.cpp + mdp:/usr/include/asm-generic/bitsperlong.h + mdp:/usr/include/asm-generic/errno-base.h + mdp:/usr/include/asm-generic/errno.h + mdp:/usr/include/asm-generic/int-ll64.h + mdp:/usr/include/asm-generic/posix_types.h + mdp:/usr/include/asm-generic/types.h + mdp:/usr/include/asm/bitsperlong.h + mdp:/usr/include/asm/errno.h + mdp:/usr/include/asm/posix_types.h + mdp:/usr/include/asm/posix_types_64.h + mdp:/usr/include/asm/types.h + mdp:/usr/include/asm/unistd.h + mdp:/usr/include/asm/unistd_64.h + mdp:/usr/include/assert.h + mdp:/usr/include/bits/atomic_wide_counter.h + mdp:/usr/include/bits/byteswap.h + mdp:/usr/include/bits/confname.h + mdp:/usr/include/bits/cpu-set.h + mdp:/usr/include/bits/endian.h + mdp:/usr/include/bits/endianness.h + mdp:/usr/include/bits/environments.h + mdp:/usr/include/bits/errno.h + mdp:/usr/include/bits/floatn-common.h + mdp:/usr/include/bits/floatn.h + mdp:/usr/include/bits/getopt_core.h + mdp:/usr/include/bits/getopt_posix.h + mdp:/usr/include/bits/libc-header-start.h + mdp:/usr/include/bits/locale.h + mdp:/usr/include/bits/long-double.h + mdp:/usr/include/bits/posix_opt.h + mdp:/usr/include/bits/pthread_stack_min-dynamic.h + mdp:/usr/include/bits/pthreadtypes-arch.h + mdp:/usr/include/bits/pthreadtypes.h + mdp:/usr/include/bits/sched.h + mdp:/usr/include/bits/select.h + mdp:/usr/include/bits/semaphore.h + mdp:/usr/include/bits/setjmp.h + mdp:/usr/include/bits/stdint-intn.h + mdp:/usr/include/bits/stdio_lim.h + mdp:/usr/include/bits/struct_mutex.h + mdp:/usr/include/bits/struct_rwlock.h + mdp:/usr/include/bits/syscall.h + mdp:/usr/include/bits/thread-shared-types.h + mdp:/usr/include/bits/time.h + mdp:/usr/include/bits/time64.h + mdp:/usr/include/bits/timesize.h + mdp:/usr/include/bits/timex.h + mdp:/usr/include/bits/types.h + mdp:/usr/include/bits/types/FILE.h + mdp:/usr/include/bits/types/__FILE.h + mdp:/usr/include/bits/types/__fpos64_t.h + mdp:/usr/include/bits/types/__fpos_t.h + mdp:/usr/include/bits/types/__locale_t.h + mdp:/usr/include/bits/types/__mbstate_t.h + mdp:/usr/include/bits/types/__sigset_t.h + mdp:/usr/include/bits/types/clock_t.h + mdp:/usr/include/bits/types/clockid_t.h + mdp:/usr/include/bits/types/cookie_io_functions_t.h + mdp:/usr/include/bits/types/error_t.h + mdp:/usr/include/bits/types/locale_t.h + mdp:/usr/include/bits/types/mbstate_t.h + mdp:/usr/include/bits/types/sigset_t.h + mdp:/usr/include/bits/types/struct_FILE.h + mdp:/usr/include/bits/types/struct___jmp_buf_tag.h + mdp:/usr/include/bits/types/struct_itimerspec.h + mdp:/usr/include/bits/types/struct_sched_param.h + mdp:/usr/include/bits/types/struct_timespec.h + mdp:/usr/include/bits/types/struct_timeval.h + mdp:/usr/include/bits/types/struct_tm.h + mdp:/usr/include/bits/types/time_t.h + mdp:/usr/include/bits/types/timer_t.h + mdp:/usr/include/bits/types/wint_t.h + mdp:/usr/include/bits/typesizes.h + mdp:/usr/include/bits/uintn-identity.h + mdp:/usr/include/bits/unistd_ext.h + mdp:/usr/include/bits/wchar.h + mdp:/usr/include/bits/wctype-wchar.h + mdp:/usr/include/bits/wordsize.h + mdp:/usr/include/c++/15/algorithm + mdp:/usr/include/c++/15/array + mdp:/usr/include/c++/15/atomic + mdp:/usr/include/c++/15/backward/auto_ptr.h + mdp:/usr/include/c++/15/backward/binders.h + mdp:/usr/include/c++/15/bit + mdp:/usr/include/c++/15/bits/algorithmfwd.h + mdp:/usr/include/c++/15/bits/align.h + mdp:/usr/include/c++/15/bits/alloc_traits.h + mdp:/usr/include/c++/15/bits/allocated_ptr.h + mdp:/usr/include/c++/15/bits/allocator.h + mdp:/usr/include/c++/15/bits/atomic_base.h + mdp:/usr/include/c++/15/bits/atomic_futex.h + mdp:/usr/include/c++/15/bits/atomic_lockfree_defines.h + mdp:/usr/include/c++/15/bits/atomic_timed_wait.h + mdp:/usr/include/c++/15/bits/atomic_wait.h + mdp:/usr/include/c++/15/bits/basic_ios.h + mdp:/usr/include/c++/15/bits/basic_ios.tcc + mdp:/usr/include/c++/15/bits/basic_string.h + mdp:/usr/include/c++/15/bits/basic_string.tcc + mdp:/usr/include/c++/15/bits/char_traits.h + mdp:/usr/include/c++/15/bits/charconv.h + mdp:/usr/include/c++/15/bits/chrono.h + mdp:/usr/include/c++/15/bits/chrono_io.h + mdp:/usr/include/c++/15/bits/codecvt.h + mdp:/usr/include/c++/15/bits/concept_check.h + mdp:/usr/include/c++/15/bits/cpp_type_traits.h + mdp:/usr/include/c++/15/bits/cxxabi_forced.h + mdp:/usr/include/c++/15/bits/cxxabi_init_exception.h + mdp:/usr/include/c++/15/bits/enable_special_members.h + mdp:/usr/include/c++/15/bits/erase_if.h + mdp:/usr/include/c++/15/bits/exception.h + mdp:/usr/include/c++/15/bits/exception_defines.h + mdp:/usr/include/c++/15/bits/exception_ptr.h + mdp:/usr/include/c++/15/bits/functexcept.h + mdp:/usr/include/c++/15/bits/functional_hash.h + mdp:/usr/include/c++/15/bits/hash_bytes.h + mdp:/usr/include/c++/15/bits/hashtable.h + mdp:/usr/include/c++/15/bits/hashtable_policy.h + mdp:/usr/include/c++/15/bits/invoke.h + mdp:/usr/include/c++/15/bits/ios_base.h + mdp:/usr/include/c++/15/bits/istream.tcc + mdp:/usr/include/c++/15/bits/iterator_concepts.h + mdp:/usr/include/c++/15/bits/list.tcc + mdp:/usr/include/c++/15/bits/locale_classes.h + mdp:/usr/include/c++/15/bits/locale_classes.tcc + mdp:/usr/include/c++/15/bits/locale_conv.h + mdp:/usr/include/c++/15/bits/locale_facets.h + mdp:/usr/include/c++/15/bits/locale_facets.tcc + mdp:/usr/include/c++/15/bits/locale_facets_nonio.h + mdp:/usr/include/c++/15/bits/locale_facets_nonio.tcc + mdp:/usr/include/c++/15/bits/localefwd.h + mdp:/usr/include/c++/15/bits/max_size_type.h + mdp:/usr/include/c++/15/bits/memory_resource.h + mdp:/usr/include/c++/15/bits/memoryfwd.h + mdp:/usr/include/c++/15/bits/move.h + mdp:/usr/include/c++/15/bits/nested_exception.h + mdp:/usr/include/c++/15/bits/new_allocator.h + mdp:/usr/include/c++/15/bits/node_handle.h + mdp:/usr/include/c++/15/bits/ostream.h + mdp:/usr/include/c++/15/bits/ostream.tcc + mdp:/usr/include/c++/15/bits/ostream_insert.h + mdp:/usr/include/c++/15/bits/parse_numbers.h + mdp:/usr/include/c++/15/bits/postypes.h + mdp:/usr/include/c++/15/bits/predefined_ops.h + mdp:/usr/include/c++/15/bits/ptr_traits.h + mdp:/usr/include/c++/15/bits/quoted_string.h + mdp:/usr/include/c++/15/bits/random.h + mdp:/usr/include/c++/15/bits/random.tcc + mdp:/usr/include/c++/15/bits/range_access.h + mdp:/usr/include/c++/15/bits/ranges_algo.h + mdp:/usr/include/c++/15/bits/ranges_algobase.h + mdp:/usr/include/c++/15/bits/ranges_base.h + mdp:/usr/include/c++/15/bits/ranges_cmp.h + mdp:/usr/include/c++/15/bits/ranges_uninitialized.h + mdp:/usr/include/c++/15/bits/ranges_util.h + mdp:/usr/include/c++/15/bits/refwrap.h + mdp:/usr/include/c++/15/bits/requires_hosted.h + mdp:/usr/include/c++/15/bits/semaphore_base.h + mdp:/usr/include/c++/15/bits/shared_ptr.h + mdp:/usr/include/c++/15/bits/shared_ptr_atomic.h + mdp:/usr/include/c++/15/bits/shared_ptr_base.h + mdp:/usr/include/c++/15/bits/specfun.h + mdp:/usr/include/c++/15/bits/sstream.tcc + mdp:/usr/include/c++/15/bits/std_abs.h + mdp:/usr/include/c++/15/bits/std_function.h + mdp:/usr/include/c++/15/bits/std_mutex.h + mdp:/usr/include/c++/15/bits/std_thread.h + mdp:/usr/include/c++/15/bits/stl_algo.h + mdp:/usr/include/c++/15/bits/stl_algobase.h + mdp:/usr/include/c++/15/bits/stl_bvector.h + mdp:/usr/include/c++/15/bits/stl_construct.h + mdp:/usr/include/c++/15/bits/stl_function.h + mdp:/usr/include/c++/15/bits/stl_heap.h + mdp:/usr/include/c++/15/bits/stl_iterator.h + mdp:/usr/include/c++/15/bits/stl_iterator_base_funcs.h + mdp:/usr/include/c++/15/bits/stl_iterator_base_types.h + mdp:/usr/include/c++/15/bits/stl_list.h + mdp:/usr/include/c++/15/bits/stl_map.h + mdp:/usr/include/c++/15/bits/stl_multimap.h + mdp:/usr/include/c++/15/bits/stl_multiset.h + mdp:/usr/include/c++/15/bits/stl_numeric.h + mdp:/usr/include/c++/15/bits/stl_pair.h + mdp:/usr/include/c++/15/bits/stl_raw_storage_iter.h + mdp:/usr/include/c++/15/bits/stl_relops.h + mdp:/usr/include/c++/15/bits/stl_set.h + mdp:/usr/include/c++/15/bits/stl_tempbuf.h + mdp:/usr/include/c++/15/bits/stl_tree.h + mdp:/usr/include/c++/15/bits/stl_uninitialized.h + mdp:/usr/include/c++/15/bits/stl_vector.h + mdp:/usr/include/c++/15/bits/stream_iterator.h + mdp:/usr/include/c++/15/bits/streambuf.tcc + mdp:/usr/include/c++/15/bits/streambuf_iterator.h + mdp:/usr/include/c++/15/bits/string_view.tcc + mdp:/usr/include/c++/15/bits/stringfwd.h + mdp:/usr/include/c++/15/bits/this_thread_sleep.h + mdp:/usr/include/c++/15/bits/uniform_int_dist.h + mdp:/usr/include/c++/15/bits/unique_lock.h + mdp:/usr/include/c++/15/bits/unique_ptr.h + mdp:/usr/include/c++/15/bits/unordered_map.h + mdp:/usr/include/c++/15/bits/unordered_set.h + mdp:/usr/include/c++/15/bits/uses_allocator.h + mdp:/usr/include/c++/15/bits/uses_allocator_args.h + mdp:/usr/include/c++/15/bits/utility.h + mdp:/usr/include/c++/15/bits/vector.tcc + mdp:/usr/include/c++/15/bits/version.h + mdp:/usr/include/c++/15/cassert + mdp:/usr/include/c++/15/cctype + mdp:/usr/include/c++/15/cerrno + mdp:/usr/include/c++/15/charconv + mdp:/usr/include/c++/15/chrono + mdp:/usr/include/c++/15/climits + mdp:/usr/include/c++/15/clocale + mdp:/usr/include/c++/15/cmath + mdp:/usr/include/c++/15/compare + mdp:/usr/include/c++/15/concepts + mdp:/usr/include/c++/15/condition_variable + mdp:/usr/include/c++/15/cstddef + mdp:/usr/include/c++/15/cstdint + mdp:/usr/include/c++/15/cstdio + mdp:/usr/include/c++/15/cstdlib + mdp:/usr/include/c++/15/cstring + mdp:/usr/include/c++/15/ctime + mdp:/usr/include/c++/15/cwchar + mdp:/usr/include/c++/15/cwctype + mdp:/usr/include/c++/15/debug/assertions.h + mdp:/usr/include/c++/15/debug/debug.h + mdp:/usr/include/c++/15/exception + mdp:/usr/include/c++/15/experimental/source_location + mdp:/usr/include/c++/15/ext/aligned_buffer.h + mdp:/usr/include/c++/15/ext/alloc_traits.h + mdp:/usr/include/c++/15/ext/atomicity.h + mdp:/usr/include/c++/15/ext/concurrence.h + mdp:/usr/include/c++/15/ext/numeric_traits.h + mdp:/usr/include/c++/15/ext/string_conversions.h + mdp:/usr/include/c++/15/ext/type_traits.h + mdp:/usr/include/c++/15/filesystem + mdp:/usr/include/c++/15/format + mdp:/usr/include/c++/15/functional + mdp:/usr/include/c++/15/future + mdp:/usr/include/c++/15/initializer_list + mdp:/usr/include/c++/15/iomanip + mdp:/usr/include/c++/15/ios + mdp:/usr/include/c++/15/iosfwd + mdp:/usr/include/c++/15/istream + mdp:/usr/include/c++/15/iterator + mdp:/usr/include/c++/15/limits + mdp:/usr/include/c++/15/list + mdp:/usr/include/c++/15/locale + mdp:/usr/include/c++/15/map + mdp:/usr/include/c++/15/memory + mdp:/usr/include/c++/15/memory_resource + mdp:/usr/include/c++/15/mutex + mdp:/usr/include/c++/15/new + mdp:/usr/include/c++/15/numeric + mdp:/usr/include/c++/15/optional + mdp:/usr/include/c++/15/ostream + mdp:/usr/include/c++/15/pstl/execution_defs.h + mdp:/usr/include/c++/15/pstl/glue_numeric_defs.h + mdp:/usr/include/c++/15/pstl/pstl_config.h + mdp:/usr/include/c++/15/random + mdp:/usr/include/c++/15/ratio + mdp:/usr/include/c++/15/semaphore + mdp:/usr/include/c++/15/set + mdp:/usr/include/c++/15/shared_mutex + mdp:/usr/include/c++/15/source_location + mdp:/usr/include/c++/15/sstream + mdp:/usr/include/c++/15/stdexcept + mdp:/usr/include/c++/15/stdlib.h + mdp:/usr/include/c++/15/stop_token + mdp:/usr/include/c++/15/streambuf + mdp:/usr/include/c++/15/string + mdp:/usr/include/c++/15/string_view + mdp:/usr/include/c++/15/system_error + mdp:/usr/include/c++/15/tr1/bessel_function.tcc + mdp:/usr/include/c++/15/tr1/beta_function.tcc + mdp:/usr/include/c++/15/tr1/ell_integral.tcc + mdp:/usr/include/c++/15/tr1/exp_integral.tcc + mdp:/usr/include/c++/15/tr1/gamma.tcc + mdp:/usr/include/c++/15/tr1/hypergeometric.tcc + mdp:/usr/include/c++/15/tr1/legendre_function.tcc + mdp:/usr/include/c++/15/tr1/modified_bessel_func.tcc + mdp:/usr/include/c++/15/tr1/poly_hermite.tcc + mdp:/usr/include/c++/15/tr1/poly_laguerre.tcc + mdp:/usr/include/c++/15/tr1/riemann_zeta.tcc + mdp:/usr/include/c++/15/tr1/special_function_util.h + mdp:/usr/include/c++/15/tuple + mdp:/usr/include/c++/15/type_traits + mdp:/usr/include/c++/15/typeinfo + mdp:/usr/include/c++/15/unordered_map + mdp:/usr/include/c++/15/unordered_set + mdp:/usr/include/c++/15/utility + mdp:/usr/include/c++/15/variant + mdp:/usr/include/c++/15/vector + mdp:/usr/include/c++/15/version + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/atomic_word.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++allocator.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++config.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++locale.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/cpu_defines.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/ctype_base.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/ctype_inline.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/error_constants.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/gthr-default.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/gthr.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/messages_members.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/opt_random.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/os_defines.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/time_members.h + mdp:/usr/include/ctype.h + mdp:/usr/include/endian.h + mdp:/usr/include/errno.h + mdp:/usr/include/features-time64.h + mdp:/usr/include/features.h + mdp:/usr/include/gnu/stubs-64.h + mdp:/usr/include/gnu/stubs.h + mdp:/usr/include/libintl.h + mdp:/usr/include/linux/close_range.h + mdp:/usr/include/linux/errno.h + mdp:/usr/include/linux/posix_types.h + mdp:/usr/include/linux/sched/types.h + mdp:/usr/include/linux/stddef.h + mdp:/usr/include/linux/types.h + mdp:/usr/include/locale.h + mdp:/usr/include/pthread.h + mdp:/usr/include/qt6/QtCore/QAbstractItemModel + mdp:/usr/include/qt6/QtCore/QDeadlineTimer + mdp:/usr/include/qt6/QtCore/QHash + mdp:/usr/include/qt6/QtCore/QList + mdp:/usr/include/qt6/QtCore/QMap + mdp:/usr/include/qt6/QtCore/QMutex + mdp:/usr/include/qt6/QtCore/QObject + mdp:/usr/include/qt6/QtCore/QString + mdp:/usr/include/qt6/QtCore/QStringList + mdp:/usr/include/qt6/QtCore/QVariant + mdp:/usr/include/qt6/QtCore/QtCore + mdp:/usr/include/qt6/QtCore/QtCoreDepends + mdp:/usr/include/qt6/QtCore/q17memory.h + mdp:/usr/include/qt6/QtCore/q20algorithm.h + mdp:/usr/include/qt6/QtCore/q20chrono.h + mdp:/usr/include/qt6/QtCore/q20functional.h + mdp:/usr/include/qt6/QtCore/q20iterator.h + mdp:/usr/include/qt6/QtCore/q20map.h + mdp:/usr/include/qt6/QtCore/q20memory.h + mdp:/usr/include/qt6/QtCore/q20type_traits.h + mdp:/usr/include/qt6/QtCore/q20utility.h + mdp:/usr/include/qt6/QtCore/q20vector.h + mdp:/usr/include/qt6/QtCore/q23functional.h + mdp:/usr/include/qt6/QtCore/q23type_traits.h + mdp:/usr/include/qt6/QtCore/q23utility.h + mdp:/usr/include/qt6/QtCore/q26numeric.h + mdp:/usr/include/qt6/QtCore/qabstractanimation.h + mdp:/usr/include/qt6/QtCore/qabstracteventdispatcher.h + mdp:/usr/include/qt6/QtCore/qabstractitemmodel.h + mdp:/usr/include/qt6/QtCore/qabstractnativeeventfilter.h + mdp:/usr/include/qt6/QtCore/qabstractproxymodel.h + mdp:/usr/include/qt6/QtCore/qalgorithms.h + mdp:/usr/include/qt6/QtCore/qalloc.h + mdp:/usr/include/qt6/QtCore/qanimationgroup.h + mdp:/usr/include/qt6/QtCore/qanystringview.h + mdp:/usr/include/qt6/QtCore/qapplicationstatic.h + mdp:/usr/include/qt6/QtCore/qarraydata.h + mdp:/usr/include/qt6/QtCore/qarraydataops.h + mdp:/usr/include/qt6/QtCore/qarraydatapointer.h + mdp:/usr/include/qt6/QtCore/qassert.h + mdp:/usr/include/qt6/QtCore/qassociativeiterable.h + mdp:/usr/include/qt6/QtCore/qatomic.h + mdp:/usr/include/qt6/QtCore/qatomic_cxx11.h + mdp:/usr/include/qt6/QtCore/qatomicscopedvaluerollback.h + mdp:/usr/include/qt6/QtCore/qbasicatomic.h + mdp:/usr/include/qt6/QtCore/qbasictimer.h + mdp:/usr/include/qt6/QtCore/qbindingstorage.h + mdp:/usr/include/qt6/QtCore/qbitarray.h + mdp:/usr/include/qt6/QtCore/qbuffer.h + mdp:/usr/include/qt6/QtCore/qbytearray.h + mdp:/usr/include/qt6/QtCore/qbytearrayalgorithms.h + mdp:/usr/include/qt6/QtCore/qbytearraylist.h + mdp:/usr/include/qt6/QtCore/qbytearraymatcher.h + mdp:/usr/include/qt6/QtCore/qbytearrayview.h + mdp:/usr/include/qt6/QtCore/qcache.h + mdp:/usr/include/qt6/QtCore/qcalendar.h + mdp:/usr/include/qt6/QtCore/qcborarray.h + mdp:/usr/include/qt6/QtCore/qcborcommon.h + mdp:/usr/include/qt6/QtCore/qcbormap.h + mdp:/usr/include/qt6/QtCore/qcborstream.h + mdp:/usr/include/qt6/QtCore/qcborstreamreader.h + mdp:/usr/include/qt6/QtCore/qcborstreamwriter.h + mdp:/usr/include/qt6/QtCore/qcborvalue.h + mdp:/usr/include/qt6/QtCore/qchar.h + mdp:/usr/include/qt6/QtCore/qcheckedint_impl.h + mdp:/usr/include/qt6/QtCore/qchronotimer.h + mdp:/usr/include/qt6/QtCore/qcollator.h + mdp:/usr/include/qt6/QtCore/qcommandlineoption.h + mdp:/usr/include/qt6/QtCore/qcommandlineparser.h + mdp:/usr/include/qt6/QtCore/qcompare.h + mdp:/usr/include/qt6/QtCore/qcompare_impl.h + mdp:/usr/include/qt6/QtCore/qcomparehelpers.h + mdp:/usr/include/qt6/QtCore/qcompilerdetection.h + mdp:/usr/include/qt6/QtCore/qconcatenatetablesproxymodel.h + mdp:/usr/include/qt6/QtCore/qconfig-64.h + mdp:/usr/include/qt6/QtCore/qconfig.h + mdp:/usr/include/qt6/QtCore/qconstructormacros.h + mdp:/usr/include/qt6/QtCore/qcontainerfwd.h + mdp:/usr/include/qt6/QtCore/qcontainerinfo.h + mdp:/usr/include/qt6/QtCore/qcontainertools_impl.h + mdp:/usr/include/qt6/QtCore/qcontiguouscache.h + mdp:/usr/include/qt6/QtCore/qcoreapplication.h + mdp:/usr/include/qt6/QtCore/qcoreapplication_platform.h + mdp:/usr/include/qt6/QtCore/qcoreevent.h + mdp:/usr/include/qt6/QtCore/qcryptographichash.h + mdp:/usr/include/qt6/QtCore/qdarwinhelpers.h + mdp:/usr/include/qt6/QtCore/qdatastream.h + mdp:/usr/include/qt6/QtCore/qdatetime.h + mdp:/usr/include/qt6/QtCore/qdeadlinetimer.h + mdp:/usr/include/qt6/QtCore/qdebug.h + mdp:/usr/include/qt6/QtCore/qdir.h + mdp:/usr/include/qt6/QtCore/qdiriterator.h + mdp:/usr/include/qt6/QtCore/qdirlisting.h + mdp:/usr/include/qt6/QtCore/qeasingcurve.h + mdp:/usr/include/qt6/QtCore/qelapsedtimer.h + mdp:/usr/include/qt6/QtCore/qendian.h + mdp:/usr/include/qt6/QtCore/qeventloop.h + mdp:/usr/include/qt6/QtCore/qexception.h + mdp:/usr/include/qt6/QtCore/qexceptionhandling.h + mdp:/usr/include/qt6/QtCore/qfactoryinterface.h + mdp:/usr/include/qt6/QtCore/qfile.h + mdp:/usr/include/qt6/QtCore/qfiledevice.h + mdp:/usr/include/qt6/QtCore/qfileinfo.h + mdp:/usr/include/qt6/QtCore/qfileselector.h + mdp:/usr/include/qt6/QtCore/qfilesystemwatcher.h + mdp:/usr/include/qt6/QtCore/qflags.h + mdp:/usr/include/qt6/QtCore/qfloat16.h + mdp:/usr/include/qt6/QtCore/qforeach.h + mdp:/usr/include/qt6/QtCore/qfunctionaltools_impl.h + mdp:/usr/include/qt6/QtCore/qfunctionpointer.h + mdp:/usr/include/qt6/QtCore/qfuture.h + mdp:/usr/include/qt6/QtCore/qfuture_impl.h + mdp:/usr/include/qt6/QtCore/qfutureinterface.h + mdp:/usr/include/qt6/QtCore/qfuturesynchronizer.h + mdp:/usr/include/qt6/QtCore/qfuturewatcher.h + mdp:/usr/include/qt6/QtCore/qgenericatomic.h + mdp:/usr/include/qt6/QtCore/qglobal.h + mdp:/usr/include/qt6/QtCore/qglobalstatic.h + mdp:/usr/include/qt6/QtCore/qhash.h + mdp:/usr/include/qt6/QtCore/qhashfunctions.h + mdp:/usr/include/qt6/QtCore/qidentityproxymodel.h + mdp:/usr/include/qt6/QtCore/qiodevice.h + mdp:/usr/include/qt6/QtCore/qiodevicebase.h + mdp:/usr/include/qt6/QtCore/qitemselectionmodel.h + mdp:/usr/include/qt6/QtCore/qiterable.h + mdp:/usr/include/qt6/QtCore/qiterator.h + mdp:/usr/include/qt6/QtCore/qjsonarray.h + mdp:/usr/include/qt6/QtCore/qjsondocument.h + mdp:/usr/include/qt6/QtCore/qjsonobject.h + mdp:/usr/include/qt6/QtCore/qjsonparseerror.h + mdp:/usr/include/qt6/QtCore/qjsonvalue.h + mdp:/usr/include/qt6/QtCore/qlatin1stringmatcher.h + mdp:/usr/include/qt6/QtCore/qlatin1stringview.h + mdp:/usr/include/qt6/QtCore/qlibrary.h + mdp:/usr/include/qt6/QtCore/qlibraryinfo.h + mdp:/usr/include/qt6/QtCore/qline.h + mdp:/usr/include/qt6/QtCore/qlist.h + mdp:/usr/include/qt6/QtCore/qlocale.h + mdp:/usr/include/qt6/QtCore/qlockfile.h + mdp:/usr/include/qt6/QtCore/qlogging.h + mdp:/usr/include/qt6/QtCore/qloggingcategory.h + mdp:/usr/include/qt6/QtCore/qmalloc.h + mdp:/usr/include/qt6/QtCore/qmap.h + mdp:/usr/include/qt6/QtCore/qmargins.h + mdp:/usr/include/qt6/QtCore/qmath.h + mdp:/usr/include/qt6/QtCore/qmessageauthenticationcode.h + mdp:/usr/include/qt6/QtCore/qmetacontainer.h + mdp:/usr/include/qt6/QtCore/qmetaobject.h + mdp:/usr/include/qt6/QtCore/qmetatype.h + mdp:/usr/include/qt6/QtCore/qmimedata.h + mdp:/usr/include/qt6/QtCore/qmimedatabase.h + mdp:/usr/include/qt6/QtCore/qmimetype.h + mdp:/usr/include/qt6/QtCore/qminmax.h + mdp:/usr/include/qt6/QtCore/qmutex.h + mdp:/usr/include/qt6/QtCore/qnamespace.h + mdp:/usr/include/qt6/QtCore/qnativeinterface.h + mdp:/usr/include/qt6/QtCore/qnumeric.h + mdp:/usr/include/qt6/QtCore/qobject.h + mdp:/usr/include/qt6/QtCore/qobject_impl.h + mdp:/usr/include/qt6/QtCore/qobjectcleanuphandler.h + mdp:/usr/include/qt6/QtCore/qobjectdefs.h + mdp:/usr/include/qt6/QtCore/qobjectdefs_impl.h + mdp:/usr/include/qt6/QtCore/qoperatingsystemversion.h + mdp:/usr/include/qt6/QtCore/qoverload.h + mdp:/usr/include/qt6/QtCore/qpair.h + mdp:/usr/include/qt6/QtCore/qparallelanimationgroup.h + mdp:/usr/include/qt6/QtCore/qpauseanimation.h + mdp:/usr/include/qt6/QtCore/qpermissions.h + mdp:/usr/include/qt6/QtCore/qplugin.h + mdp:/usr/include/qt6/QtCore/qpluginloader.h + mdp:/usr/include/qt6/QtCore/qpoint.h + mdp:/usr/include/qt6/QtCore/qpointer.h + mdp:/usr/include/qt6/QtCore/qprocess.h + mdp:/usr/include/qt6/QtCore/qprocessordetection.h + mdp:/usr/include/qt6/QtCore/qpromise.h + mdp:/usr/include/qt6/QtCore/qproperty.h + mdp:/usr/include/qt6/QtCore/qpropertyanimation.h + mdp:/usr/include/qt6/QtCore/qpropertyprivate.h + mdp:/usr/include/qt6/QtCore/qqueue.h + mdp:/usr/include/qt6/QtCore/qrandom.h + mdp:/usr/include/qt6/QtCore/qrangemodel.h + mdp:/usr/include/qt6/QtCore/qrangemodel_impl.h + mdp:/usr/include/qt6/QtCore/qreadwritelock.h + mdp:/usr/include/qt6/QtCore/qrect.h + mdp:/usr/include/qt6/QtCore/qrefcount.h + mdp:/usr/include/qt6/QtCore/qregularexpression.h + mdp:/usr/include/qt6/QtCore/qresource.h + mdp:/usr/include/qt6/QtCore/qresultstore.h + mdp:/usr/include/qt6/QtCore/qrunnable.h + mdp:/usr/include/qt6/QtCore/qsavefile.h + mdp:/usr/include/qt6/QtCore/qscopedpointer.h + mdp:/usr/include/qt6/QtCore/qscopedvaluerollback.h + mdp:/usr/include/qt6/QtCore/qscopeguard.h + mdp:/usr/include/qt6/QtCore/qsemaphore.h + mdp:/usr/include/qt6/QtCore/qsequentialanimationgroup.h + mdp:/usr/include/qt6/QtCore/qsequentialiterable.h + mdp:/usr/include/qt6/QtCore/qset.h + mdp:/usr/include/qt6/QtCore/qsettings.h + mdp:/usr/include/qt6/QtCore/qshareddata.h + mdp:/usr/include/qt6/QtCore/qshareddata_impl.h + mdp:/usr/include/qt6/QtCore/qsharedmemory.h + mdp:/usr/include/qt6/QtCore/qsharedpointer.h + mdp:/usr/include/qt6/QtCore/qsharedpointer_impl.h + mdp:/usr/include/qt6/QtCore/qsignalmapper.h + mdp:/usr/include/qt6/QtCore/qsimd.h + mdp:/usr/include/qt6/QtCore/qsize.h + mdp:/usr/include/qt6/QtCore/qsocketnotifier.h + mdp:/usr/include/qt6/QtCore/qsortfilterproxymodel.h + mdp:/usr/include/qt6/QtCore/qspan.h + mdp:/usr/include/qt6/QtCore/qstack.h + mdp:/usr/include/qt6/QtCore/qstandardpaths.h + mdp:/usr/include/qt6/QtCore/qstaticlatin1stringmatcher.h + mdp:/usr/include/qt6/QtCore/qstdlibdetection.h + mdp:/usr/include/qt6/QtCore/qstorageinfo.h + mdp:/usr/include/qt6/QtCore/qstring.h + mdp:/usr/include/qt6/QtCore/qstringalgorithms.h + mdp:/usr/include/qt6/QtCore/qstringbuilder.h + mdp:/usr/include/qt6/QtCore/qstringconverter.h + mdp:/usr/include/qt6/QtCore/qstringconverter_base.h + mdp:/usr/include/qt6/QtCore/qstringfwd.h + mdp:/usr/include/qt6/QtCore/qstringlist.h + mdp:/usr/include/qt6/QtCore/qstringlistmodel.h + mdp:/usr/include/qt6/QtCore/qstringliteral.h + mdp:/usr/include/qt6/QtCore/qstringmatcher.h + mdp:/usr/include/qt6/QtCore/qstringtokenizer.h + mdp:/usr/include/qt6/QtCore/qstringview.h + mdp:/usr/include/qt6/QtCore/qswap.h + mdp:/usr/include/qt6/QtCore/qsysinfo.h + mdp:/usr/include/qt6/QtCore/qsystemdetection.h + mdp:/usr/include/qt6/QtCore/qsystemsemaphore.h + mdp:/usr/include/qt6/QtCore/qtaggedpointer.h + mdp:/usr/include/qt6/QtCore/qtclasshelpermacros.h + mdp:/usr/include/qt6/QtCore/qtconfiginclude.h + mdp:/usr/include/qt6/QtCore/qtconfigmacros.h + mdp:/usr/include/qt6/QtCore/qtcore-config.h + mdp:/usr/include/qt6/QtCore/qtcoreexports.h + mdp:/usr/include/qt6/QtCore/qtcoreglobal.h + mdp:/usr/include/qt6/QtCore/qtcoreversion.h + mdp:/usr/include/qt6/QtCore/qtdeprecationdefinitions.h + mdp:/usr/include/qt6/QtCore/qtdeprecationmarkers.h + mdp:/usr/include/qt6/QtCore/qtemporarydir.h + mdp:/usr/include/qt6/QtCore/qtemporaryfile.h + mdp:/usr/include/qt6/QtCore/qtenvironmentvariables.h + mdp:/usr/include/qt6/QtCore/qtestsupport_core.h + mdp:/usr/include/qt6/QtCore/qtextboundaryfinder.h + mdp:/usr/include/qt6/QtCore/qtextstream.h + mdp:/usr/include/qt6/QtCore/qtformat_impl.h + mdp:/usr/include/qt6/QtCore/qthread.h + mdp:/usr/include/qt6/QtCore/qthreadpool.h + mdp:/usr/include/qt6/QtCore/qthreadstorage.h + mdp:/usr/include/qt6/QtCore/qtimeline.h + mdp:/usr/include/qt6/QtCore/qtimer.h + mdp:/usr/include/qt6/QtCore/qtimezone.h + mdp:/usr/include/qt6/QtCore/qtipccommon.h + mdp:/usr/include/qt6/QtCore/qtmetamacros.h + mdp:/usr/include/qt6/QtCore/qtmocconstants.h + mdp:/usr/include/qt6/QtCore/qtnoop.h + mdp:/usr/include/qt6/QtCore/qtpreprocessorsupport.h + mdp:/usr/include/qt6/QtCore/qtranslator.h + mdp:/usr/include/qt6/QtCore/qtransposeproxymodel.h + mdp:/usr/include/qt6/QtCore/qtresource.h + mdp:/usr/include/qt6/QtCore/qtsan_impl.h + mdp:/usr/include/qt6/QtCore/qtsymbolmacros.h + mdp:/usr/include/qt6/QtCore/qttranslation.h + mdp:/usr/include/qt6/QtCore/qttypetraits.h + mdp:/usr/include/qt6/QtCore/qtversion.h + mdp:/usr/include/qt6/QtCore/qtversionchecks.h + mdp:/usr/include/qt6/QtCore/qtypeinfo.h + mdp:/usr/include/qt6/QtCore/qtyperevision.h + mdp:/usr/include/qt6/QtCore/qtypes.h + mdp:/usr/include/qt6/QtCore/qurl.h + mdp:/usr/include/qt6/QtCore/qurlquery.h + mdp:/usr/include/qt6/QtCore/qutf8stringview.h + mdp:/usr/include/qt6/QtCore/quuid.h + mdp:/usr/include/qt6/QtCore/qvariant.h + mdp:/usr/include/qt6/QtCore/qvariantanimation.h + mdp:/usr/include/qt6/QtCore/qvarianthash.h + mdp:/usr/include/qt6/QtCore/qvariantlist.h + mdp:/usr/include/qt6/QtCore/qvariantmap.h + mdp:/usr/include/qt6/QtCore/qvarlengtharray.h + mdp:/usr/include/qt6/QtCore/qvector.h + mdp:/usr/include/qt6/QtCore/qversionnumber.h + mdp:/usr/include/qt6/QtCore/qversiontagging.h + mdp:/usr/include/qt6/QtCore/qwaitcondition.h + mdp:/usr/include/qt6/QtCore/qwineventnotifier.h + mdp:/usr/include/qt6/QtCore/qxmlstream.h + mdp:/usr/include/qt6/QtCore/qxpfunctional.h + mdp:/usr/include/qt6/QtCore/qxptype_traits.h + mdp:/usr/include/qt6/QtCore/qyieldcpu.h + mdp:/usr/include/qt6/QtTest/QtTest + mdp:/usr/include/qt6/QtTest/QtTestDepends + mdp:/usr/include/qt6/QtTest/qabstractitemmodeltester.h + mdp:/usr/include/qt6/QtTest/qbenchmark.h + mdp:/usr/include/qt6/QtTest/qbenchmarkmetric.h + mdp:/usr/include/qt6/QtTest/qsignalspy.h + mdp:/usr/include/qt6/QtTest/qtest.h + mdp:/usr/include/qt6/QtTest/qtestassert.h + mdp:/usr/include/qt6/QtTest/qtestcase.h + mdp:/usr/include/qt6/QtTest/qtestdata.h + mdp:/usr/include/qt6/QtTest/qtesteventloop.h + mdp:/usr/include/qt6/QtTest/qtestsystem.h + mdp:/usr/include/qt6/QtTest/qtesttostring.h + mdp:/usr/include/qt6/QtTest/qttestexports.h + mdp:/usr/include/qt6/QtTest/qttestglobal.h + mdp:/usr/include/qt6/QtTest/qttestlib-config.h + mdp:/usr/include/qt6/QtTest/qttestversion.h + mdp:/usr/include/sched.h + mdp:/usr/include/semaphore.h + mdp:/usr/include/stdc-predef.h + mdp:/usr/include/stdio.h + mdp:/usr/include/string.h + mdp:/usr/include/strings.h + mdp:/usr/include/sys/cdefs.h + mdp:/usr/include/sys/select.h + mdp:/usr/include/sys/single_threaded.h + mdp:/usr/include/sys/syscall.h + mdp:/usr/include/sys/time.h + mdp:/usr/include/sys/types.h + mdp:/usr/include/syscall.h + mdp:/usr/include/time.h + mdp:/usr/include/unistd.h + mdp:/usr/include/wchar.h + mdp:/usr/include/wctype.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/adxintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxavx512intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxbf16intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxcomplexintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxfp16intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxfp8intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxint8intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxmovrsintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxtf32intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxtileintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxtransposeintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2-512bf16intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2-512convertintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2-512mediaintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2-512minmaxintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2-512satcvtintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2bf16intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2convertintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2copyintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2mediaintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2minmaxintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2satcvtintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx2intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512bf16intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512bf16vlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512bitalgintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512bitalgvlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512bwintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512cdintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512dqintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512fintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512fp16intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512fp16vlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512ifmaintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512ifmavlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vbmi2intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vbmi2vlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vbmiintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vbmivlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vlbwintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vldqintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vnniintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vnnivlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vp2intersectintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vp2intersectvlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vpopcntdqintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vpopcntdqvlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avxifmaintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avxintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avxneconvertintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avxvnniint16intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avxvnniint8intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avxvnniintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/bmi2intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/bmiintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/cetintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/cldemoteintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/clflushoptintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/clwbintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/clzerointrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/cmpccxaddintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/emmintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/enqcmdintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/f16cintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/fmaintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/fxsrintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/gfniintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/hresetintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/ia32intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/immintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/keylockerintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/limits.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/lwpintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/lzcntintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/mm_malloc.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/mmintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/movdirintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/movrsintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/mwaitintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/mwaitxintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/pconfigintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/pkuintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/pmmintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/popcntintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/prfchiintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/prfchwintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/raointintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/rdseedintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/rtmintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/serializeintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/sgxintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/sha512intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/shaintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/sm3intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/sm4intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/smmintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stdarg.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stdbool.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stddef.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stdint.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/syslimits.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/tbmintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/tmmintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/tsxldtrkintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/uintrintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/usermsrintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/vaesintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/vpclmulqdqintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/waitpkgintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/wbnoinvdintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/wmmintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/x86gprintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/xmmintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/xsavecintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/xsaveintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/xsaveoptintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/xsavesintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/xtestintrin.h diff --git a/build-linux/tests/CMakeFiles/test_utils.dir/test_utils.cpp.o b/build-linux/tests/CMakeFiles/test_utils.dir/test_utils.cpp.o new file mode 100644 index 00000000..8e961041 Binary files /dev/null and b/build-linux/tests/CMakeFiles/test_utils.dir/test_utils.cpp.o differ diff --git a/build-linux/tests/CMakeFiles/test_utils.dir/test_utils_autogen/mocs_compilation.cpp.o b/build-linux/tests/CMakeFiles/test_utils.dir/test_utils_autogen/mocs_compilation.cpp.o new file mode 100644 index 00000000..bc1e4e33 Binary files /dev/null and b/build-linux/tests/CMakeFiles/test_utils.dir/test_utils_autogen/mocs_compilation.cpp.o differ diff --git a/build-linux/tests/CMakeFiles/test_utils_autogen.dir/AutogenInfo.json b/build-linux/tests/CMakeFiles/test_utils_autogen.dir/AutogenInfo.json new file mode 100644 index 00000000..6cccf1ab --- /dev/null +++ b/build-linux/tests/CMakeFiles/test_utils_autogen.dir/AutogenInfo.json @@ -0,0 +1,187 @@ +{ + "BUILD_DIR" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_utils_autogen", + "CMAKE_BINARY_DIR" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux", + "CMAKE_CURRENT_BINARY_DIR" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests", + "CMAKE_CURRENT_SOURCE_DIR" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests", + "CMAKE_EXECUTABLE" : "/usr/bin/cmake", + "CMAKE_LIST_FILES" : + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/CMakeLists.txt", + "/usr/lib64/cmake/Qt6/Qt6ConfigVersion.cmake", + "/usr/lib64/cmake/Qt6/Qt6ConfigVersionImpl.cmake", + "/usr/lib64/cmake/Qt6/Qt6Config.cmake", + "/usr/lib64/cmake/Qt6/QtPublicCMakeEarlyPolicyHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicCMakeHelpers.cmake", + "/usr/lib64/cmake/Qt6/Qt6ConfigExtras.cmake", + "/usr/lib64/cmake/Qt6/QtPublicCMakeVersionHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtInstallPaths.cmake", + "/usr/lib64/cmake/Qt6/Qt6Targets.cmake", + "/usr/lib64/cmake/Qt6/Qt6VersionlessAliasTargets.cmake", + "/usr/lib64/cmake/Qt6/QtFeature.cmake", + "/usr/share/cmake/Modules/CheckCXXCompilerFlag.cmake", + "/usr/lib64/cmake/Qt6/QtFeatureCommon.cmake", + "/usr/lib64/cmake/Qt6/QtPublicAndroidHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicAppleHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicCMakeHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicCMakeVersionHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicDependencyHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicExternalProjectHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicFinalizerHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicFindPackageHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicGitHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicPluginHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicPluginHelpers_v2.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomAttributionHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomBuildToolHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomCommonGenerationHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomCpeHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomCycloneDXHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomDocumentNamespaceHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomDepHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomExternalReferenceHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomFileHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomGenerationHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomGenerationCycloneDXHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomLicenseHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomOpsHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomPurlHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomPythonHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomQtEntityHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomRelationshipHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomSystemDepHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicTargetHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicTestHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicToolHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicWalkLibsHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicWindowsHelpers.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6/Qt6Dependencies.cmake", + "/usr/lib64/cmake/Qt6Test/Qt6TestConfigVersion.cmake", + "/usr/lib64/cmake/Qt6Test/Qt6TestConfigVersionImpl.cmake", + "/usr/lib64/cmake/Qt6Test/Qt6TestConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6Test/Qt6TestDependencies.cmake", + "/usr/lib64/cmake/Qt6Test/Qt6TestTargets.cmake", + "/usr/lib64/cmake/Qt6Test/Qt6TestTargets-relwithdebinfo.cmake", + "/usr/lib64/cmake/Qt6Test/Qt6TestAdditionalTargetInfo.cmake", + "/usr/lib64/cmake/Qt6Test/QtTestProperties.cmake", + "/usr/lib64/cmake/Qt6Test/Qt6TestVersionlessAliasTargets.cmake" + ], + "CMAKE_SOURCE_DIR" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6", + "CROSS_CONFIG" : false, + "DEP_FILE" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_utils_autogen/deps", + "DEP_FILE_RULE_NAME" : "test_utils_autogen/timestamp", + "HEADERS" : + [ + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/utils.h", + "MU", + "VNU7RW3YIC/moc_utils.cpp", + null + ] + ], + "HEADER_EXTENSIONS" : [ "h", "hh", "h++", "hm", "hpp", "hxx", "in", "txx" ], + "INCLUDE_DIR" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_utils_autogen/include", + "MOC_COMPILATION_FILE" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_utils_autogen/mocs_compilation.cpp", + "MOC_DEFINITIONS" : + [ + "FTK_API_GL_4_1", + "QT_CORE_LIB", + "QT_NO_DEBUG", + "QT_TESTCASE_BUILDDIR=\"/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests\"", + "QT_TESTCASE_SOURCEDIR=\"/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests\"", + "QT_TESTLIB_LIB", + "TLRENDER_EXR", + "TLRENDER_FFMPEG", + "TLRENDER_FFMPEG_PLUGIN", + "TLRENDER_JPEG", + "TLRENDER_OCIO", + "TLRENDER_OIIO", + "TLRENDER_PNG", + "TLRENDER_SDL2", + "TLRENDER_TIFF" + ], + "MOC_DEPEND_FILTERS" : + [ + [ + "Q_PLUGIN_METADATA", + "[\n][ \t]*Q_PLUGIN_METADATA[ \t]*\\([^\\)]*FILE[ \t]*\"([^\"]+)\"" + ] + ], + "MOC_INCLUDES" : + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src", + "/usr/include/qt6/QtTest", + "/usr/include/qt6", + "/usr/include/qt6/QtCore", + "/usr/lib64/qt6/mkspecs/linux-g++", + "/usr/include/c++/15", + "/usr/include/c++/15/x86_64-redhat-linux", + "/usr/include/c++/15/backward", + "/usr/lib/gcc/x86_64-redhat-linux/15/include", + "/usr/local/include", + "/usr/include" + ], + "MOC_MACRO_NAMES" : + [ + "Q_OBJECT", + "Q_GADGET", + "Q_NAMESPACE", + "Q_NAMESPACE_EXPORT", + "Q_GADGET_EXPORT", + "Q_ENUM_NS" + ], + "MOC_OPTIONS" : [], + "MOC_PATH_PREFIX" : false, + "MOC_PREDEFS_CMD" : + [ + "/usr/bin/c++", + "-std=gnu++20", + "-w", + "-dM", + "-E", + "/usr/share/cmake/Modules/CMakeCXXCompilerABI.cpp" + ], + "MOC_PREDEFS_FILE" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_utils_autogen/moc_predefs.h", + "MOC_RELAXED_MODE" : false, + "MOC_SKIP" : + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_db_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_importer_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_models_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_sequence_detector_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_simple_autogen/mocs_compilation.cpp" + ], + "MULTI_CONFIG" : false, + "PARALLEL" : 16, + "PARSE_CACHE_FILE" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/CMakeFiles/test_utils_autogen.dir/ParseCache.txt", + "QT_MOC_EXECUTABLE" : "/usr/lib64/qt6/libexec/moc", + "QT_UIC_EXECUTABLE" : "/usr/lib64/qt6/libexec/uic", + "QT_VERSION_MAJOR" : 6, + "QT_VERSION_MINOR" : 10, + "SETTINGS_FILE" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/CMakeFiles/test_utils_autogen.dir/AutogenUsed.txt", + "SOURCES" : + [ + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/test_utils.cpp", + "MU", + null + ] + ], + "UIC_OPTIONS" : [], + "UIC_SEARCH_PATHS" : [], + "UIC_SKIP" : + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_db_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_importer_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_models_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_sequence_detector_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_simple_autogen/mocs_compilation.cpp" + ], + "UIC_UI_FILES" : [], + "USE_BETTER_GRAPH" : true, + "VERBOSITY" : 0 +} diff --git a/build-linux/tests/CMakeFiles/test_utils_autogen.dir/AutogenUsed.txt b/build-linux/tests/CMakeFiles/test_utils_autogen.dir/AutogenUsed.txt new file mode 100644 index 00000000..20965e66 --- /dev/null +++ b/build-linux/tests/CMakeFiles/test_utils_autogen.dir/AutogenUsed.txt @@ -0,0 +1,2 @@ +moc:c8d2e0d6b9ec6bb88a26555d36562f211c048bd223b76c1f6f46a9a723c9bcd4 +uic:0df7b06f04b60705a14ff966fc10725af0fb193398324deeaf17e44a5f9db1e0 diff --git a/build-linux/tests/CMakeFiles/test_utils_autogen.dir/ParseCache.txt b/build-linux/tests/CMakeFiles/test_utils_autogen.dir/ParseCache.txt new file mode 100644 index 00000000..c3b4a831 --- /dev/null +++ b/build-linux/tests/CMakeFiles/test_utils_autogen.dir/ParseCache.txt @@ -0,0 +1,774 @@ +# Generated by CMake. Changes will be overwritten. +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/test_utils.cpp + mmc:Q_OBJECT + mid:test_utils.moc + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_utils_autogen/moc_predefs.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/utils.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/test_utils.cpp + mdp:/usr/include/asm-generic/bitsperlong.h + mdp:/usr/include/asm-generic/errno-base.h + mdp:/usr/include/asm-generic/errno.h + mdp:/usr/include/asm-generic/int-ll64.h + mdp:/usr/include/asm-generic/posix_types.h + mdp:/usr/include/asm-generic/types.h + mdp:/usr/include/asm/bitsperlong.h + mdp:/usr/include/asm/errno.h + mdp:/usr/include/asm/posix_types.h + mdp:/usr/include/asm/posix_types_64.h + mdp:/usr/include/asm/types.h + mdp:/usr/include/asm/unistd.h + mdp:/usr/include/asm/unistd_64.h + mdp:/usr/include/assert.h + mdp:/usr/include/bits/atomic_wide_counter.h + mdp:/usr/include/bits/byteswap.h + mdp:/usr/include/bits/confname.h + mdp:/usr/include/bits/cpu-set.h + mdp:/usr/include/bits/endian.h + mdp:/usr/include/bits/endianness.h + mdp:/usr/include/bits/environments.h + mdp:/usr/include/bits/errno.h + mdp:/usr/include/bits/floatn-common.h + mdp:/usr/include/bits/floatn.h + mdp:/usr/include/bits/getopt_core.h + mdp:/usr/include/bits/getopt_posix.h + mdp:/usr/include/bits/libc-header-start.h + mdp:/usr/include/bits/locale.h + mdp:/usr/include/bits/long-double.h + mdp:/usr/include/bits/posix_opt.h + mdp:/usr/include/bits/pthread_stack_min-dynamic.h + mdp:/usr/include/bits/pthreadtypes-arch.h + mdp:/usr/include/bits/pthreadtypes.h + mdp:/usr/include/bits/sched.h + mdp:/usr/include/bits/select.h + mdp:/usr/include/bits/semaphore.h + mdp:/usr/include/bits/setjmp.h + mdp:/usr/include/bits/stdint-intn.h + mdp:/usr/include/bits/stdio_lim.h + mdp:/usr/include/bits/struct_mutex.h + mdp:/usr/include/bits/struct_rwlock.h + mdp:/usr/include/bits/syscall.h + mdp:/usr/include/bits/thread-shared-types.h + mdp:/usr/include/bits/time.h + mdp:/usr/include/bits/time64.h + mdp:/usr/include/bits/timesize.h + mdp:/usr/include/bits/timex.h + mdp:/usr/include/bits/types.h + mdp:/usr/include/bits/types/FILE.h + mdp:/usr/include/bits/types/__FILE.h + mdp:/usr/include/bits/types/__fpos64_t.h + mdp:/usr/include/bits/types/__fpos_t.h + mdp:/usr/include/bits/types/__locale_t.h + mdp:/usr/include/bits/types/__mbstate_t.h + mdp:/usr/include/bits/types/__sigset_t.h + mdp:/usr/include/bits/types/clock_t.h + mdp:/usr/include/bits/types/clockid_t.h + mdp:/usr/include/bits/types/cookie_io_functions_t.h + mdp:/usr/include/bits/types/error_t.h + mdp:/usr/include/bits/types/locale_t.h + mdp:/usr/include/bits/types/mbstate_t.h + mdp:/usr/include/bits/types/sigset_t.h + mdp:/usr/include/bits/types/struct_FILE.h + mdp:/usr/include/bits/types/struct___jmp_buf_tag.h + mdp:/usr/include/bits/types/struct_itimerspec.h + mdp:/usr/include/bits/types/struct_sched_param.h + mdp:/usr/include/bits/types/struct_timespec.h + mdp:/usr/include/bits/types/struct_timeval.h + mdp:/usr/include/bits/types/struct_tm.h + mdp:/usr/include/bits/types/time_t.h + mdp:/usr/include/bits/types/timer_t.h + mdp:/usr/include/bits/types/wint_t.h + mdp:/usr/include/bits/typesizes.h + mdp:/usr/include/bits/uintn-identity.h + mdp:/usr/include/bits/unistd_ext.h + mdp:/usr/include/bits/wchar.h + mdp:/usr/include/bits/wctype-wchar.h + mdp:/usr/include/bits/wordsize.h + mdp:/usr/include/c++/15/algorithm + mdp:/usr/include/c++/15/array + mdp:/usr/include/c++/15/atomic + mdp:/usr/include/c++/15/backward/auto_ptr.h + mdp:/usr/include/c++/15/backward/binders.h + mdp:/usr/include/c++/15/bit + mdp:/usr/include/c++/15/bits/algorithmfwd.h + mdp:/usr/include/c++/15/bits/align.h + mdp:/usr/include/c++/15/bits/alloc_traits.h + mdp:/usr/include/c++/15/bits/allocated_ptr.h + mdp:/usr/include/c++/15/bits/allocator.h + mdp:/usr/include/c++/15/bits/atomic_base.h + mdp:/usr/include/c++/15/bits/atomic_futex.h + mdp:/usr/include/c++/15/bits/atomic_lockfree_defines.h + mdp:/usr/include/c++/15/bits/atomic_timed_wait.h + mdp:/usr/include/c++/15/bits/atomic_wait.h + mdp:/usr/include/c++/15/bits/basic_ios.h + mdp:/usr/include/c++/15/bits/basic_ios.tcc + mdp:/usr/include/c++/15/bits/basic_string.h + mdp:/usr/include/c++/15/bits/basic_string.tcc + mdp:/usr/include/c++/15/bits/char_traits.h + mdp:/usr/include/c++/15/bits/charconv.h + mdp:/usr/include/c++/15/bits/chrono.h + mdp:/usr/include/c++/15/bits/chrono_io.h + mdp:/usr/include/c++/15/bits/codecvt.h + mdp:/usr/include/c++/15/bits/concept_check.h + mdp:/usr/include/c++/15/bits/cpp_type_traits.h + mdp:/usr/include/c++/15/bits/cxxabi_forced.h + mdp:/usr/include/c++/15/bits/cxxabi_init_exception.h + mdp:/usr/include/c++/15/bits/enable_special_members.h + mdp:/usr/include/c++/15/bits/erase_if.h + mdp:/usr/include/c++/15/bits/exception.h + mdp:/usr/include/c++/15/bits/exception_defines.h + mdp:/usr/include/c++/15/bits/exception_ptr.h + mdp:/usr/include/c++/15/bits/functexcept.h + mdp:/usr/include/c++/15/bits/functional_hash.h + mdp:/usr/include/c++/15/bits/hash_bytes.h + mdp:/usr/include/c++/15/bits/hashtable.h + mdp:/usr/include/c++/15/bits/hashtable_policy.h + mdp:/usr/include/c++/15/bits/invoke.h + mdp:/usr/include/c++/15/bits/ios_base.h + mdp:/usr/include/c++/15/bits/istream.tcc + mdp:/usr/include/c++/15/bits/iterator_concepts.h + mdp:/usr/include/c++/15/bits/list.tcc + mdp:/usr/include/c++/15/bits/locale_classes.h + mdp:/usr/include/c++/15/bits/locale_classes.tcc + mdp:/usr/include/c++/15/bits/locale_conv.h + mdp:/usr/include/c++/15/bits/locale_facets.h + mdp:/usr/include/c++/15/bits/locale_facets.tcc + mdp:/usr/include/c++/15/bits/locale_facets_nonio.h + mdp:/usr/include/c++/15/bits/locale_facets_nonio.tcc + mdp:/usr/include/c++/15/bits/localefwd.h + mdp:/usr/include/c++/15/bits/max_size_type.h + mdp:/usr/include/c++/15/bits/memory_resource.h + mdp:/usr/include/c++/15/bits/memoryfwd.h + mdp:/usr/include/c++/15/bits/move.h + mdp:/usr/include/c++/15/bits/nested_exception.h + mdp:/usr/include/c++/15/bits/new_allocator.h + mdp:/usr/include/c++/15/bits/node_handle.h + mdp:/usr/include/c++/15/bits/ostream.h + mdp:/usr/include/c++/15/bits/ostream.tcc + mdp:/usr/include/c++/15/bits/ostream_insert.h + mdp:/usr/include/c++/15/bits/parse_numbers.h + mdp:/usr/include/c++/15/bits/postypes.h + mdp:/usr/include/c++/15/bits/predefined_ops.h + mdp:/usr/include/c++/15/bits/ptr_traits.h + mdp:/usr/include/c++/15/bits/quoted_string.h + mdp:/usr/include/c++/15/bits/random.h + mdp:/usr/include/c++/15/bits/random.tcc + mdp:/usr/include/c++/15/bits/range_access.h + mdp:/usr/include/c++/15/bits/ranges_algo.h + mdp:/usr/include/c++/15/bits/ranges_algobase.h + mdp:/usr/include/c++/15/bits/ranges_base.h + mdp:/usr/include/c++/15/bits/ranges_cmp.h + mdp:/usr/include/c++/15/bits/ranges_uninitialized.h + mdp:/usr/include/c++/15/bits/ranges_util.h + mdp:/usr/include/c++/15/bits/refwrap.h + mdp:/usr/include/c++/15/bits/requires_hosted.h + mdp:/usr/include/c++/15/bits/semaphore_base.h + mdp:/usr/include/c++/15/bits/shared_ptr.h + mdp:/usr/include/c++/15/bits/shared_ptr_atomic.h + mdp:/usr/include/c++/15/bits/shared_ptr_base.h + mdp:/usr/include/c++/15/bits/specfun.h + mdp:/usr/include/c++/15/bits/sstream.tcc + mdp:/usr/include/c++/15/bits/std_abs.h + mdp:/usr/include/c++/15/bits/std_function.h + mdp:/usr/include/c++/15/bits/std_mutex.h + mdp:/usr/include/c++/15/bits/std_thread.h + mdp:/usr/include/c++/15/bits/stl_algo.h + mdp:/usr/include/c++/15/bits/stl_algobase.h + mdp:/usr/include/c++/15/bits/stl_bvector.h + mdp:/usr/include/c++/15/bits/stl_construct.h + mdp:/usr/include/c++/15/bits/stl_function.h + mdp:/usr/include/c++/15/bits/stl_heap.h + mdp:/usr/include/c++/15/bits/stl_iterator.h + mdp:/usr/include/c++/15/bits/stl_iterator_base_funcs.h + mdp:/usr/include/c++/15/bits/stl_iterator_base_types.h + mdp:/usr/include/c++/15/bits/stl_list.h + mdp:/usr/include/c++/15/bits/stl_map.h + mdp:/usr/include/c++/15/bits/stl_multimap.h + mdp:/usr/include/c++/15/bits/stl_multiset.h + mdp:/usr/include/c++/15/bits/stl_numeric.h + mdp:/usr/include/c++/15/bits/stl_pair.h + mdp:/usr/include/c++/15/bits/stl_raw_storage_iter.h + mdp:/usr/include/c++/15/bits/stl_relops.h + mdp:/usr/include/c++/15/bits/stl_set.h + mdp:/usr/include/c++/15/bits/stl_tempbuf.h + mdp:/usr/include/c++/15/bits/stl_tree.h + mdp:/usr/include/c++/15/bits/stl_uninitialized.h + mdp:/usr/include/c++/15/bits/stl_vector.h + mdp:/usr/include/c++/15/bits/stream_iterator.h + mdp:/usr/include/c++/15/bits/streambuf.tcc + mdp:/usr/include/c++/15/bits/streambuf_iterator.h + mdp:/usr/include/c++/15/bits/string_view.tcc + mdp:/usr/include/c++/15/bits/stringfwd.h + mdp:/usr/include/c++/15/bits/this_thread_sleep.h + mdp:/usr/include/c++/15/bits/uniform_int_dist.h + mdp:/usr/include/c++/15/bits/unique_lock.h + mdp:/usr/include/c++/15/bits/unique_ptr.h + mdp:/usr/include/c++/15/bits/unordered_map.h + mdp:/usr/include/c++/15/bits/unordered_set.h + mdp:/usr/include/c++/15/bits/uses_allocator.h + mdp:/usr/include/c++/15/bits/uses_allocator_args.h + mdp:/usr/include/c++/15/bits/utility.h + mdp:/usr/include/c++/15/bits/vector.tcc + mdp:/usr/include/c++/15/bits/version.h + mdp:/usr/include/c++/15/cassert + mdp:/usr/include/c++/15/cctype + mdp:/usr/include/c++/15/cerrno + mdp:/usr/include/c++/15/charconv + mdp:/usr/include/c++/15/chrono + mdp:/usr/include/c++/15/climits + mdp:/usr/include/c++/15/clocale + mdp:/usr/include/c++/15/cmath + mdp:/usr/include/c++/15/compare + mdp:/usr/include/c++/15/concepts + mdp:/usr/include/c++/15/condition_variable + mdp:/usr/include/c++/15/cstddef + mdp:/usr/include/c++/15/cstdint + mdp:/usr/include/c++/15/cstdio + mdp:/usr/include/c++/15/cstdlib + mdp:/usr/include/c++/15/cstring + mdp:/usr/include/c++/15/ctime + mdp:/usr/include/c++/15/cwchar + mdp:/usr/include/c++/15/cwctype + mdp:/usr/include/c++/15/debug/assertions.h + mdp:/usr/include/c++/15/debug/debug.h + mdp:/usr/include/c++/15/exception + mdp:/usr/include/c++/15/experimental/source_location + mdp:/usr/include/c++/15/ext/aligned_buffer.h + mdp:/usr/include/c++/15/ext/alloc_traits.h + mdp:/usr/include/c++/15/ext/atomicity.h + mdp:/usr/include/c++/15/ext/concurrence.h + mdp:/usr/include/c++/15/ext/numeric_traits.h + mdp:/usr/include/c++/15/ext/string_conversions.h + mdp:/usr/include/c++/15/ext/type_traits.h + mdp:/usr/include/c++/15/filesystem + mdp:/usr/include/c++/15/format + mdp:/usr/include/c++/15/functional + mdp:/usr/include/c++/15/future + mdp:/usr/include/c++/15/initializer_list + mdp:/usr/include/c++/15/iomanip + mdp:/usr/include/c++/15/ios + mdp:/usr/include/c++/15/iosfwd + mdp:/usr/include/c++/15/istream + mdp:/usr/include/c++/15/iterator + mdp:/usr/include/c++/15/limits + mdp:/usr/include/c++/15/list + mdp:/usr/include/c++/15/locale + mdp:/usr/include/c++/15/map + mdp:/usr/include/c++/15/memory + mdp:/usr/include/c++/15/memory_resource + mdp:/usr/include/c++/15/mutex + mdp:/usr/include/c++/15/new + mdp:/usr/include/c++/15/numeric + mdp:/usr/include/c++/15/optional + mdp:/usr/include/c++/15/ostream + mdp:/usr/include/c++/15/pstl/execution_defs.h + mdp:/usr/include/c++/15/pstl/glue_numeric_defs.h + mdp:/usr/include/c++/15/pstl/pstl_config.h + mdp:/usr/include/c++/15/random + mdp:/usr/include/c++/15/ratio + mdp:/usr/include/c++/15/semaphore + mdp:/usr/include/c++/15/set + mdp:/usr/include/c++/15/shared_mutex + mdp:/usr/include/c++/15/source_location + mdp:/usr/include/c++/15/sstream + mdp:/usr/include/c++/15/stdexcept + mdp:/usr/include/c++/15/stdlib.h + mdp:/usr/include/c++/15/stop_token + mdp:/usr/include/c++/15/streambuf + mdp:/usr/include/c++/15/string + mdp:/usr/include/c++/15/string_view + mdp:/usr/include/c++/15/system_error + mdp:/usr/include/c++/15/tr1/bessel_function.tcc + mdp:/usr/include/c++/15/tr1/beta_function.tcc + mdp:/usr/include/c++/15/tr1/ell_integral.tcc + mdp:/usr/include/c++/15/tr1/exp_integral.tcc + mdp:/usr/include/c++/15/tr1/gamma.tcc + mdp:/usr/include/c++/15/tr1/hypergeometric.tcc + mdp:/usr/include/c++/15/tr1/legendre_function.tcc + mdp:/usr/include/c++/15/tr1/modified_bessel_func.tcc + mdp:/usr/include/c++/15/tr1/poly_hermite.tcc + mdp:/usr/include/c++/15/tr1/poly_laguerre.tcc + mdp:/usr/include/c++/15/tr1/riemann_zeta.tcc + mdp:/usr/include/c++/15/tr1/special_function_util.h + mdp:/usr/include/c++/15/tuple + mdp:/usr/include/c++/15/type_traits + mdp:/usr/include/c++/15/typeinfo + mdp:/usr/include/c++/15/unordered_map + mdp:/usr/include/c++/15/unordered_set + mdp:/usr/include/c++/15/utility + mdp:/usr/include/c++/15/variant + mdp:/usr/include/c++/15/vector + mdp:/usr/include/c++/15/version + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/atomic_word.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++allocator.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++config.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++locale.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/cpu_defines.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/ctype_base.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/ctype_inline.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/error_constants.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/gthr-default.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/gthr.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/messages_members.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/opt_random.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/os_defines.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/time_members.h + mdp:/usr/include/ctype.h + mdp:/usr/include/endian.h + mdp:/usr/include/errno.h + mdp:/usr/include/features-time64.h + mdp:/usr/include/features.h + mdp:/usr/include/gnu/stubs-64.h + mdp:/usr/include/gnu/stubs.h + mdp:/usr/include/libintl.h + mdp:/usr/include/linux/close_range.h + mdp:/usr/include/linux/errno.h + mdp:/usr/include/linux/posix_types.h + mdp:/usr/include/linux/sched/types.h + mdp:/usr/include/linux/stddef.h + mdp:/usr/include/linux/types.h + mdp:/usr/include/locale.h + mdp:/usr/include/pthread.h + mdp:/usr/include/qt6/QtCore/QAbstractItemModel + mdp:/usr/include/qt6/QtCore/QDeadlineTimer + mdp:/usr/include/qt6/QtCore/QHash + mdp:/usr/include/qt6/QtCore/QList + mdp:/usr/include/qt6/QtCore/QMap + mdp:/usr/include/qt6/QtCore/QMutex + mdp:/usr/include/qt6/QtCore/QObject + mdp:/usr/include/qt6/QtCore/QString + mdp:/usr/include/qt6/QtCore/QStringList + mdp:/usr/include/qt6/QtCore/QVariant + mdp:/usr/include/qt6/QtCore/QtCore + mdp:/usr/include/qt6/QtCore/QtCoreDepends + mdp:/usr/include/qt6/QtCore/QtGlobal + mdp:/usr/include/qt6/QtCore/q17memory.h + mdp:/usr/include/qt6/QtCore/q20algorithm.h + mdp:/usr/include/qt6/QtCore/q20chrono.h + mdp:/usr/include/qt6/QtCore/q20functional.h + mdp:/usr/include/qt6/QtCore/q20iterator.h + mdp:/usr/include/qt6/QtCore/q20map.h + mdp:/usr/include/qt6/QtCore/q20memory.h + mdp:/usr/include/qt6/QtCore/q20type_traits.h + mdp:/usr/include/qt6/QtCore/q20utility.h + mdp:/usr/include/qt6/QtCore/q20vector.h + mdp:/usr/include/qt6/QtCore/q23functional.h + mdp:/usr/include/qt6/QtCore/q23type_traits.h + mdp:/usr/include/qt6/QtCore/q23utility.h + mdp:/usr/include/qt6/QtCore/q26numeric.h + mdp:/usr/include/qt6/QtCore/qabstractanimation.h + mdp:/usr/include/qt6/QtCore/qabstracteventdispatcher.h + mdp:/usr/include/qt6/QtCore/qabstractitemmodel.h + mdp:/usr/include/qt6/QtCore/qabstractnativeeventfilter.h + mdp:/usr/include/qt6/QtCore/qabstractproxymodel.h + mdp:/usr/include/qt6/QtCore/qalgorithms.h + mdp:/usr/include/qt6/QtCore/qalloc.h + mdp:/usr/include/qt6/QtCore/qanimationgroup.h + mdp:/usr/include/qt6/QtCore/qanystringview.h + mdp:/usr/include/qt6/QtCore/qapplicationstatic.h + mdp:/usr/include/qt6/QtCore/qarraydata.h + mdp:/usr/include/qt6/QtCore/qarraydataops.h + mdp:/usr/include/qt6/QtCore/qarraydatapointer.h + mdp:/usr/include/qt6/QtCore/qassert.h + mdp:/usr/include/qt6/QtCore/qassociativeiterable.h + mdp:/usr/include/qt6/QtCore/qatomic.h + mdp:/usr/include/qt6/QtCore/qatomic_cxx11.h + mdp:/usr/include/qt6/QtCore/qatomicscopedvaluerollback.h + mdp:/usr/include/qt6/QtCore/qbasicatomic.h + mdp:/usr/include/qt6/QtCore/qbasictimer.h + mdp:/usr/include/qt6/QtCore/qbindingstorage.h + mdp:/usr/include/qt6/QtCore/qbitarray.h + mdp:/usr/include/qt6/QtCore/qbuffer.h + mdp:/usr/include/qt6/QtCore/qbytearray.h + mdp:/usr/include/qt6/QtCore/qbytearrayalgorithms.h + mdp:/usr/include/qt6/QtCore/qbytearraylist.h + mdp:/usr/include/qt6/QtCore/qbytearraymatcher.h + mdp:/usr/include/qt6/QtCore/qbytearrayview.h + mdp:/usr/include/qt6/QtCore/qcache.h + mdp:/usr/include/qt6/QtCore/qcalendar.h + mdp:/usr/include/qt6/QtCore/qcborarray.h + mdp:/usr/include/qt6/QtCore/qcborcommon.h + mdp:/usr/include/qt6/QtCore/qcbormap.h + mdp:/usr/include/qt6/QtCore/qcborstream.h + mdp:/usr/include/qt6/QtCore/qcborstreamreader.h + mdp:/usr/include/qt6/QtCore/qcborstreamwriter.h + mdp:/usr/include/qt6/QtCore/qcborvalue.h + mdp:/usr/include/qt6/QtCore/qchar.h + mdp:/usr/include/qt6/QtCore/qcheckedint_impl.h + mdp:/usr/include/qt6/QtCore/qchronotimer.h + mdp:/usr/include/qt6/QtCore/qcollator.h + mdp:/usr/include/qt6/QtCore/qcommandlineoption.h + mdp:/usr/include/qt6/QtCore/qcommandlineparser.h + mdp:/usr/include/qt6/QtCore/qcompare.h + mdp:/usr/include/qt6/QtCore/qcompare_impl.h + mdp:/usr/include/qt6/QtCore/qcomparehelpers.h + mdp:/usr/include/qt6/QtCore/qcompilerdetection.h + mdp:/usr/include/qt6/QtCore/qconcatenatetablesproxymodel.h + mdp:/usr/include/qt6/QtCore/qconfig-64.h + mdp:/usr/include/qt6/QtCore/qconfig.h + mdp:/usr/include/qt6/QtCore/qconstructormacros.h + mdp:/usr/include/qt6/QtCore/qcontainerfwd.h + mdp:/usr/include/qt6/QtCore/qcontainerinfo.h + mdp:/usr/include/qt6/QtCore/qcontainertools_impl.h + mdp:/usr/include/qt6/QtCore/qcontiguouscache.h + mdp:/usr/include/qt6/QtCore/qcoreapplication.h + mdp:/usr/include/qt6/QtCore/qcoreapplication_platform.h + mdp:/usr/include/qt6/QtCore/qcoreevent.h + mdp:/usr/include/qt6/QtCore/qcryptographichash.h + mdp:/usr/include/qt6/QtCore/qdarwinhelpers.h + mdp:/usr/include/qt6/QtCore/qdatastream.h + mdp:/usr/include/qt6/QtCore/qdatetime.h + mdp:/usr/include/qt6/QtCore/qdeadlinetimer.h + mdp:/usr/include/qt6/QtCore/qdebug.h + mdp:/usr/include/qt6/QtCore/qdir.h + mdp:/usr/include/qt6/QtCore/qdiriterator.h + mdp:/usr/include/qt6/QtCore/qdirlisting.h + mdp:/usr/include/qt6/QtCore/qeasingcurve.h + mdp:/usr/include/qt6/QtCore/qelapsedtimer.h + mdp:/usr/include/qt6/QtCore/qendian.h + mdp:/usr/include/qt6/QtCore/qeventloop.h + mdp:/usr/include/qt6/QtCore/qexception.h + mdp:/usr/include/qt6/QtCore/qexceptionhandling.h + mdp:/usr/include/qt6/QtCore/qfactoryinterface.h + mdp:/usr/include/qt6/QtCore/qfile.h + mdp:/usr/include/qt6/QtCore/qfiledevice.h + mdp:/usr/include/qt6/QtCore/qfileinfo.h + mdp:/usr/include/qt6/QtCore/qfileselector.h + mdp:/usr/include/qt6/QtCore/qfilesystemwatcher.h + mdp:/usr/include/qt6/QtCore/qflags.h + mdp:/usr/include/qt6/QtCore/qfloat16.h + mdp:/usr/include/qt6/QtCore/qforeach.h + mdp:/usr/include/qt6/QtCore/qfunctionaltools_impl.h + mdp:/usr/include/qt6/QtCore/qfunctionpointer.h + mdp:/usr/include/qt6/QtCore/qfuture.h + mdp:/usr/include/qt6/QtCore/qfuture_impl.h + mdp:/usr/include/qt6/QtCore/qfutureinterface.h + mdp:/usr/include/qt6/QtCore/qfuturesynchronizer.h + mdp:/usr/include/qt6/QtCore/qfuturewatcher.h + mdp:/usr/include/qt6/QtCore/qgenericatomic.h + mdp:/usr/include/qt6/QtCore/qglobal.h + mdp:/usr/include/qt6/QtCore/qglobalstatic.h + mdp:/usr/include/qt6/QtCore/qhash.h + mdp:/usr/include/qt6/QtCore/qhashfunctions.h + mdp:/usr/include/qt6/QtCore/qidentityproxymodel.h + mdp:/usr/include/qt6/QtCore/qiodevice.h + mdp:/usr/include/qt6/QtCore/qiodevicebase.h + mdp:/usr/include/qt6/QtCore/qitemselectionmodel.h + mdp:/usr/include/qt6/QtCore/qiterable.h + mdp:/usr/include/qt6/QtCore/qiterator.h + mdp:/usr/include/qt6/QtCore/qjsonarray.h + mdp:/usr/include/qt6/QtCore/qjsondocument.h + mdp:/usr/include/qt6/QtCore/qjsonobject.h + mdp:/usr/include/qt6/QtCore/qjsonparseerror.h + mdp:/usr/include/qt6/QtCore/qjsonvalue.h + mdp:/usr/include/qt6/QtCore/qlatin1stringmatcher.h + mdp:/usr/include/qt6/QtCore/qlatin1stringview.h + mdp:/usr/include/qt6/QtCore/qlibrary.h + mdp:/usr/include/qt6/QtCore/qlibraryinfo.h + mdp:/usr/include/qt6/QtCore/qline.h + mdp:/usr/include/qt6/QtCore/qlist.h + mdp:/usr/include/qt6/QtCore/qlocale.h + mdp:/usr/include/qt6/QtCore/qlockfile.h + mdp:/usr/include/qt6/QtCore/qlogging.h + mdp:/usr/include/qt6/QtCore/qloggingcategory.h + mdp:/usr/include/qt6/QtCore/qmalloc.h + mdp:/usr/include/qt6/QtCore/qmap.h + mdp:/usr/include/qt6/QtCore/qmargins.h + mdp:/usr/include/qt6/QtCore/qmath.h + mdp:/usr/include/qt6/QtCore/qmessageauthenticationcode.h + mdp:/usr/include/qt6/QtCore/qmetacontainer.h + mdp:/usr/include/qt6/QtCore/qmetaobject.h + mdp:/usr/include/qt6/QtCore/qmetatype.h + mdp:/usr/include/qt6/QtCore/qmimedata.h + mdp:/usr/include/qt6/QtCore/qmimedatabase.h + mdp:/usr/include/qt6/QtCore/qmimetype.h + mdp:/usr/include/qt6/QtCore/qminmax.h + mdp:/usr/include/qt6/QtCore/qmutex.h + mdp:/usr/include/qt6/QtCore/qnamespace.h + mdp:/usr/include/qt6/QtCore/qnativeinterface.h + mdp:/usr/include/qt6/QtCore/qnumeric.h + mdp:/usr/include/qt6/QtCore/qobject.h + mdp:/usr/include/qt6/QtCore/qobject_impl.h + mdp:/usr/include/qt6/QtCore/qobjectcleanuphandler.h + mdp:/usr/include/qt6/QtCore/qobjectdefs.h + mdp:/usr/include/qt6/QtCore/qobjectdefs_impl.h + mdp:/usr/include/qt6/QtCore/qoperatingsystemversion.h + mdp:/usr/include/qt6/QtCore/qoverload.h + mdp:/usr/include/qt6/QtCore/qpair.h + mdp:/usr/include/qt6/QtCore/qparallelanimationgroup.h + mdp:/usr/include/qt6/QtCore/qpauseanimation.h + mdp:/usr/include/qt6/QtCore/qpermissions.h + mdp:/usr/include/qt6/QtCore/qplugin.h + mdp:/usr/include/qt6/QtCore/qpluginloader.h + mdp:/usr/include/qt6/QtCore/qpoint.h + mdp:/usr/include/qt6/QtCore/qpointer.h + mdp:/usr/include/qt6/QtCore/qprocess.h + mdp:/usr/include/qt6/QtCore/qprocessordetection.h + mdp:/usr/include/qt6/QtCore/qpromise.h + mdp:/usr/include/qt6/QtCore/qproperty.h + mdp:/usr/include/qt6/QtCore/qpropertyanimation.h + mdp:/usr/include/qt6/QtCore/qpropertyprivate.h + mdp:/usr/include/qt6/QtCore/qqueue.h + mdp:/usr/include/qt6/QtCore/qrandom.h + mdp:/usr/include/qt6/QtCore/qrangemodel.h + mdp:/usr/include/qt6/QtCore/qrangemodel_impl.h + mdp:/usr/include/qt6/QtCore/qreadwritelock.h + mdp:/usr/include/qt6/QtCore/qrect.h + mdp:/usr/include/qt6/QtCore/qrefcount.h + mdp:/usr/include/qt6/QtCore/qregularexpression.h + mdp:/usr/include/qt6/QtCore/qresource.h + mdp:/usr/include/qt6/QtCore/qresultstore.h + mdp:/usr/include/qt6/QtCore/qrunnable.h + mdp:/usr/include/qt6/QtCore/qsavefile.h + mdp:/usr/include/qt6/QtCore/qscopedpointer.h + mdp:/usr/include/qt6/QtCore/qscopedvaluerollback.h + mdp:/usr/include/qt6/QtCore/qscopeguard.h + mdp:/usr/include/qt6/QtCore/qsemaphore.h + mdp:/usr/include/qt6/QtCore/qsequentialanimationgroup.h + mdp:/usr/include/qt6/QtCore/qsequentialiterable.h + mdp:/usr/include/qt6/QtCore/qset.h + mdp:/usr/include/qt6/QtCore/qsettings.h + mdp:/usr/include/qt6/QtCore/qshareddata.h + mdp:/usr/include/qt6/QtCore/qshareddata_impl.h + mdp:/usr/include/qt6/QtCore/qsharedmemory.h + mdp:/usr/include/qt6/QtCore/qsharedpointer.h + mdp:/usr/include/qt6/QtCore/qsharedpointer_impl.h + mdp:/usr/include/qt6/QtCore/qsignalmapper.h + mdp:/usr/include/qt6/QtCore/qsimd.h + mdp:/usr/include/qt6/QtCore/qsize.h + mdp:/usr/include/qt6/QtCore/qsocketnotifier.h + mdp:/usr/include/qt6/QtCore/qsortfilterproxymodel.h + mdp:/usr/include/qt6/QtCore/qspan.h + mdp:/usr/include/qt6/QtCore/qstack.h + mdp:/usr/include/qt6/QtCore/qstandardpaths.h + mdp:/usr/include/qt6/QtCore/qstaticlatin1stringmatcher.h + mdp:/usr/include/qt6/QtCore/qstdlibdetection.h + mdp:/usr/include/qt6/QtCore/qstorageinfo.h + mdp:/usr/include/qt6/QtCore/qstring.h + mdp:/usr/include/qt6/QtCore/qstringalgorithms.h + mdp:/usr/include/qt6/QtCore/qstringbuilder.h + mdp:/usr/include/qt6/QtCore/qstringconverter.h + mdp:/usr/include/qt6/QtCore/qstringconverter_base.h + mdp:/usr/include/qt6/QtCore/qstringfwd.h + mdp:/usr/include/qt6/QtCore/qstringlist.h + mdp:/usr/include/qt6/QtCore/qstringlistmodel.h + mdp:/usr/include/qt6/QtCore/qstringliteral.h + mdp:/usr/include/qt6/QtCore/qstringmatcher.h + mdp:/usr/include/qt6/QtCore/qstringtokenizer.h + mdp:/usr/include/qt6/QtCore/qstringview.h + mdp:/usr/include/qt6/QtCore/qswap.h + mdp:/usr/include/qt6/QtCore/qsysinfo.h + mdp:/usr/include/qt6/QtCore/qsystemdetection.h + mdp:/usr/include/qt6/QtCore/qsystemsemaphore.h + mdp:/usr/include/qt6/QtCore/qtaggedpointer.h + mdp:/usr/include/qt6/QtCore/qtclasshelpermacros.h + mdp:/usr/include/qt6/QtCore/qtconfiginclude.h + mdp:/usr/include/qt6/QtCore/qtconfigmacros.h + mdp:/usr/include/qt6/QtCore/qtcore-config.h + mdp:/usr/include/qt6/QtCore/qtcoreexports.h + mdp:/usr/include/qt6/QtCore/qtcoreglobal.h + mdp:/usr/include/qt6/QtCore/qtcoreversion.h + mdp:/usr/include/qt6/QtCore/qtdeprecationdefinitions.h + mdp:/usr/include/qt6/QtCore/qtdeprecationmarkers.h + mdp:/usr/include/qt6/QtCore/qtemporarydir.h + mdp:/usr/include/qt6/QtCore/qtemporaryfile.h + mdp:/usr/include/qt6/QtCore/qtenvironmentvariables.h + mdp:/usr/include/qt6/QtCore/qtestsupport_core.h + mdp:/usr/include/qt6/QtCore/qtextboundaryfinder.h + mdp:/usr/include/qt6/QtCore/qtextstream.h + mdp:/usr/include/qt6/QtCore/qtformat_impl.h + mdp:/usr/include/qt6/QtCore/qthread.h + mdp:/usr/include/qt6/QtCore/qthreadpool.h + mdp:/usr/include/qt6/QtCore/qthreadstorage.h + mdp:/usr/include/qt6/QtCore/qtimeline.h + mdp:/usr/include/qt6/QtCore/qtimer.h + mdp:/usr/include/qt6/QtCore/qtimezone.h + mdp:/usr/include/qt6/QtCore/qtipccommon.h + mdp:/usr/include/qt6/QtCore/qtmetamacros.h + mdp:/usr/include/qt6/QtCore/qtmocconstants.h + mdp:/usr/include/qt6/QtCore/qtnoop.h + mdp:/usr/include/qt6/QtCore/qtpreprocessorsupport.h + mdp:/usr/include/qt6/QtCore/qtranslator.h + mdp:/usr/include/qt6/QtCore/qtransposeproxymodel.h + mdp:/usr/include/qt6/QtCore/qtresource.h + mdp:/usr/include/qt6/QtCore/qtsan_impl.h + mdp:/usr/include/qt6/QtCore/qtsymbolmacros.h + mdp:/usr/include/qt6/QtCore/qttranslation.h + mdp:/usr/include/qt6/QtCore/qttypetraits.h + mdp:/usr/include/qt6/QtCore/qtversion.h + mdp:/usr/include/qt6/QtCore/qtversionchecks.h + mdp:/usr/include/qt6/QtCore/qtypeinfo.h + mdp:/usr/include/qt6/QtCore/qtyperevision.h + mdp:/usr/include/qt6/QtCore/qtypes.h + mdp:/usr/include/qt6/QtCore/qurl.h + mdp:/usr/include/qt6/QtCore/qurlquery.h + mdp:/usr/include/qt6/QtCore/qutf8stringview.h + mdp:/usr/include/qt6/QtCore/quuid.h + mdp:/usr/include/qt6/QtCore/qvariant.h + mdp:/usr/include/qt6/QtCore/qvariantanimation.h + mdp:/usr/include/qt6/QtCore/qvarianthash.h + mdp:/usr/include/qt6/QtCore/qvariantlist.h + mdp:/usr/include/qt6/QtCore/qvariantmap.h + mdp:/usr/include/qt6/QtCore/qvarlengtharray.h + mdp:/usr/include/qt6/QtCore/qvector.h + mdp:/usr/include/qt6/QtCore/qversionnumber.h + mdp:/usr/include/qt6/QtCore/qversiontagging.h + mdp:/usr/include/qt6/QtCore/qwaitcondition.h + mdp:/usr/include/qt6/QtCore/qwineventnotifier.h + mdp:/usr/include/qt6/QtCore/qxmlstream.h + mdp:/usr/include/qt6/QtCore/qxpfunctional.h + mdp:/usr/include/qt6/QtCore/qxptype_traits.h + mdp:/usr/include/qt6/QtCore/qyieldcpu.h + mdp:/usr/include/qt6/QtTest/QtTest + mdp:/usr/include/qt6/QtTest/QtTestDepends + mdp:/usr/include/qt6/QtTest/qabstractitemmodeltester.h + mdp:/usr/include/qt6/QtTest/qbenchmark.h + mdp:/usr/include/qt6/QtTest/qbenchmarkmetric.h + mdp:/usr/include/qt6/QtTest/qsignalspy.h + mdp:/usr/include/qt6/QtTest/qtest.h + mdp:/usr/include/qt6/QtTest/qtestassert.h + mdp:/usr/include/qt6/QtTest/qtestcase.h + mdp:/usr/include/qt6/QtTest/qtestdata.h + mdp:/usr/include/qt6/QtTest/qtesteventloop.h + mdp:/usr/include/qt6/QtTest/qtestsystem.h + mdp:/usr/include/qt6/QtTest/qtesttostring.h + mdp:/usr/include/qt6/QtTest/qttestexports.h + mdp:/usr/include/qt6/QtTest/qttestglobal.h + mdp:/usr/include/qt6/QtTest/qttestlib-config.h + mdp:/usr/include/qt6/QtTest/qttestversion.h + mdp:/usr/include/sched.h + mdp:/usr/include/semaphore.h + mdp:/usr/include/stdc-predef.h + mdp:/usr/include/stdio.h + mdp:/usr/include/string.h + mdp:/usr/include/strings.h + mdp:/usr/include/sys/cdefs.h + mdp:/usr/include/sys/select.h + mdp:/usr/include/sys/single_threaded.h + mdp:/usr/include/sys/syscall.h + mdp:/usr/include/sys/time.h + mdp:/usr/include/sys/types.h + mdp:/usr/include/syscall.h + mdp:/usr/include/time.h + mdp:/usr/include/unistd.h + mdp:/usr/include/wchar.h + mdp:/usr/include/wctype.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/adxintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxavx512intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxbf16intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxcomplexintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxfp16intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxfp8intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxint8intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxmovrsintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxtf32intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxtileintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxtransposeintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2-512bf16intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2-512convertintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2-512mediaintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2-512minmaxintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2-512satcvtintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2bf16intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2convertintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2copyintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2mediaintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2minmaxintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2satcvtintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx2intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512bf16intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512bf16vlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512bitalgintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512bitalgvlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512bwintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512cdintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512dqintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512fintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512fp16intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512fp16vlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512ifmaintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512ifmavlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vbmi2intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vbmi2vlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vbmiintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vbmivlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vlbwintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vldqintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vnniintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vnnivlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vp2intersectintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vp2intersectvlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vpopcntdqintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vpopcntdqvlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avxifmaintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avxintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avxneconvertintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avxvnniint16intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avxvnniint8intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avxvnniintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/bmi2intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/bmiintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/cetintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/cldemoteintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/clflushoptintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/clwbintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/clzerointrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/cmpccxaddintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/emmintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/enqcmdintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/f16cintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/fmaintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/fxsrintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/gfniintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/hresetintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/ia32intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/immintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/keylockerintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/limits.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/lwpintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/lzcntintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/mm_malloc.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/mmintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/movdirintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/movrsintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/mwaitintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/mwaitxintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/pconfigintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/pkuintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/pmmintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/popcntintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/prfchiintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/prfchwintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/raointintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/rdseedintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/rtmintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/serializeintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/sgxintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/sha512intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/shaintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/sm3intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/sm4intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/smmintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stdarg.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stdbool.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stddef.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stdint.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/syslimits.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/tbmintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/tmmintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/tsxldtrkintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/uintrintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/usermsrintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/vaesintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/vpclmulqdqintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/waitpkgintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/wbnoinvdintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/wmmintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/x86gprintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/xmmintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/xsavecintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/xsaveintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/xsaveoptintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/xsavesintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/xtestintrin.h +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/utils.h diff --git a/build-linux/tests/CMakeFiles/test_virtual_drag.dir/__/src/virtual_drag.cpp.o b/build-linux/tests/CMakeFiles/test_virtual_drag.dir/__/src/virtual_drag.cpp.o new file mode 100644 index 00000000..9911e248 Binary files /dev/null and b/build-linux/tests/CMakeFiles/test_virtual_drag.dir/__/src/virtual_drag.cpp.o differ diff --git a/build-linux/tests/CMakeFiles/test_virtual_drag.dir/test_virtual_drag.cpp.o b/build-linux/tests/CMakeFiles/test_virtual_drag.dir/test_virtual_drag.cpp.o new file mode 100644 index 00000000..03877068 Binary files /dev/null and b/build-linux/tests/CMakeFiles/test_virtual_drag.dir/test_virtual_drag.cpp.o differ diff --git a/build-linux/tests/CMakeFiles/test_virtual_drag.dir/test_virtual_drag_autogen/mocs_compilation.cpp.o b/build-linux/tests/CMakeFiles/test_virtual_drag.dir/test_virtual_drag_autogen/mocs_compilation.cpp.o new file mode 100644 index 00000000..bc1e4e33 Binary files /dev/null and b/build-linux/tests/CMakeFiles/test_virtual_drag.dir/test_virtual_drag_autogen/mocs_compilation.cpp.o differ diff --git a/build-linux/tests/CMakeFiles/test_virtual_drag_autogen.dir/AutogenInfo.json b/build-linux/tests/CMakeFiles/test_virtual_drag_autogen.dir/AutogenInfo.json new file mode 100644 index 00000000..c157ab6b --- /dev/null +++ b/build-linux/tests/CMakeFiles/test_virtual_drag_autogen.dir/AutogenInfo.json @@ -0,0 +1,200 @@ +{ + "BUILD_DIR" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_virtual_drag_autogen", + "CMAKE_BINARY_DIR" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux", + "CMAKE_CURRENT_BINARY_DIR" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests", + "CMAKE_CURRENT_SOURCE_DIR" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests", + "CMAKE_EXECUTABLE" : "/usr/bin/cmake", + "CMAKE_LIST_FILES" : + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/CMakeLists.txt", + "/usr/lib64/cmake/Qt6/Qt6ConfigVersion.cmake", + "/usr/lib64/cmake/Qt6/Qt6ConfigVersionImpl.cmake", + "/usr/lib64/cmake/Qt6/Qt6Config.cmake", + "/usr/lib64/cmake/Qt6/QtPublicCMakeEarlyPolicyHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicCMakeHelpers.cmake", + "/usr/lib64/cmake/Qt6/Qt6ConfigExtras.cmake", + "/usr/lib64/cmake/Qt6/QtPublicCMakeVersionHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtInstallPaths.cmake", + "/usr/lib64/cmake/Qt6/Qt6Targets.cmake", + "/usr/lib64/cmake/Qt6/Qt6VersionlessAliasTargets.cmake", + "/usr/lib64/cmake/Qt6/QtFeature.cmake", + "/usr/share/cmake/Modules/CheckCXXCompilerFlag.cmake", + "/usr/lib64/cmake/Qt6/QtFeatureCommon.cmake", + "/usr/lib64/cmake/Qt6/QtPublicAndroidHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicAppleHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicCMakeHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicCMakeVersionHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicDependencyHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicExternalProjectHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicFinalizerHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicFindPackageHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicGitHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicPluginHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicPluginHelpers_v2.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomAttributionHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomBuildToolHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomCommonGenerationHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomCpeHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomCycloneDXHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomDocumentNamespaceHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomDepHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomExternalReferenceHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomFileHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomGenerationHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomGenerationCycloneDXHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomLicenseHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomOpsHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomPurlHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomPythonHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomQtEntityHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomRelationshipHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicSbomSystemDepHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicTargetHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicTestHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicToolHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicWalkLibsHelpers.cmake", + "/usr/lib64/cmake/Qt6/QtPublicWindowsHelpers.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6/Qt6Dependencies.cmake", + "/usr/lib64/cmake/Qt6Test/Qt6TestConfigVersion.cmake", + "/usr/lib64/cmake/Qt6Test/Qt6TestConfigVersionImpl.cmake", + "/usr/lib64/cmake/Qt6Test/Qt6TestConfig.cmake", + "/usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake", + "/usr/lib64/cmake/Qt6Test/Qt6TestDependencies.cmake", + "/usr/lib64/cmake/Qt6Test/Qt6TestTargets.cmake", + "/usr/lib64/cmake/Qt6Test/Qt6TestTargets-relwithdebinfo.cmake", + "/usr/lib64/cmake/Qt6Test/Qt6TestAdditionalTargetInfo.cmake", + "/usr/lib64/cmake/Qt6Test/QtTestProperties.cmake", + "/usr/lib64/cmake/Qt6Test/Qt6TestVersionlessAliasTargets.cmake" + ], + "CMAKE_SOURCE_DIR" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6", + "CROSS_CONFIG" : false, + "DEP_FILE" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_virtual_drag_autogen/deps", + "DEP_FILE_RULE_NAME" : "test_virtual_drag_autogen/timestamp", + "HEADERS" : + [ + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/virtual_drag.h", + "MU", + "VNU7RW3YIC/moc_virtual_drag.cpp", + null + ] + ], + "HEADER_EXTENSIONS" : [ "h", "hh", "h++", "hm", "hpp", "hxx", "in", "txx" ], + "INCLUDE_DIR" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_virtual_drag_autogen/include", + "MOC_COMPILATION_FILE" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_virtual_drag_autogen/mocs_compilation.cpp", + "MOC_DEFINITIONS" : + [ + "FTK_API_GL_4_1", + "QT_CORE_LIB", + "QT_GUI_LIB", + "QT_NO_DEBUG", + "QT_TESTCASE_BUILDDIR=\"/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests\"", + "QT_TESTCASE_SOURCEDIR=\"/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests\"", + "QT_TESTLIB_LIB", + "TLRENDER_EXR", + "TLRENDER_FFMPEG", + "TLRENDER_FFMPEG_PLUGIN", + "TLRENDER_JPEG", + "TLRENDER_OCIO", + "TLRENDER_OIIO", + "TLRENDER_PNG", + "TLRENDER_SDL2", + "TLRENDER_TIFF" + ], + "MOC_DEPEND_FILTERS" : + [ + [ + "Q_PLUGIN_METADATA", + "[\n][ \t]*Q_PLUGIN_METADATA[ \t]*\\([^\\)]*FILE[ \t]*\"([^\"]+)\"" + ] + ], + "MOC_INCLUDES" : + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/third_party/tlRender-install-Release/include/tlRender", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src", + "/usr/include/qt6/QtTest", + "/usr/include/qt6", + "/usr/include/qt6/QtCore", + "/usr/lib64/qt6/mkspecs/linux-g++", + "/usr/include/qt6/QtGui", + "/usr/include", + "/usr/include/c++/15", + "/usr/include/c++/15/x86_64-redhat-linux", + "/usr/include/c++/15/backward", + "/usr/lib/gcc/x86_64-redhat-linux/15/include", + "/usr/local/include" + ], + "MOC_MACRO_NAMES" : + [ + "Q_OBJECT", + "Q_GADGET", + "Q_NAMESPACE", + "Q_NAMESPACE_EXPORT", + "Q_GADGET_EXPORT", + "Q_ENUM_NS" + ], + "MOC_OPTIONS" : [], + "MOC_PATH_PREFIX" : false, + "MOC_PREDEFS_CMD" : + [ + "/usr/bin/c++", + "-std=gnu++20", + "-w", + "-dM", + "-E", + "/usr/share/cmake/Modules/CMakeCXXCompilerABI.cpp" + ], + "MOC_PREDEFS_FILE" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_virtual_drag_autogen/moc_predefs.h", + "MOC_RELAXED_MODE" : false, + "MOC_SKIP" : + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_db_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_importer_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_live_preview_manager_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_media_converter_worker_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_models_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_sequence_detector_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_simple_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_utils_autogen/mocs_compilation.cpp" + ], + "MULTI_CONFIG" : false, + "PARALLEL" : 16, + "PARSE_CACHE_FILE" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/CMakeFiles/test_virtual_drag_autogen.dir/ParseCache.txt", + "QT_MOC_EXECUTABLE" : "/usr/lib64/qt6/libexec/moc", + "QT_UIC_EXECUTABLE" : "/usr/lib64/qt6/libexec/uic", + "QT_VERSION_MAJOR" : 6, + "QT_VERSION_MINOR" : 10, + "SETTINGS_FILE" : "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/CMakeFiles/test_virtual_drag_autogen.dir/AutogenUsed.txt", + "SOURCES" : + [ + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/virtual_drag.cpp", + "MU", + null + ], + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/test_virtual_drag.cpp", + "MU", + null + ] + ], + "UIC_OPTIONS" : [], + "UIC_SEARCH_PATHS" : [], + "UIC_SKIP" : + [ + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_db_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_importer_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_live_preview_manager_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_media_converter_worker_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_models_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_sequence_detector_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_simple_autogen/mocs_compilation.cpp", + "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_utils_autogen/mocs_compilation.cpp" + ], + "UIC_UI_FILES" : [], + "USE_BETTER_GRAPH" : true, + "VERBOSITY" : 0 +} diff --git a/build-linux/tests/CMakeFiles/test_virtual_drag_autogen.dir/AutogenUsed.txt b/build-linux/tests/CMakeFiles/test_virtual_drag_autogen.dir/AutogenUsed.txt new file mode 100644 index 00000000..d7d4115c --- /dev/null +++ b/build-linux/tests/CMakeFiles/test_virtual_drag_autogen.dir/AutogenUsed.txt @@ -0,0 +1,2 @@ +moc:f3a2e1f818b5faee92aa6d466194ffd6301062f65b00216b34f1ce850f1628dc +uic:0df7b06f04b60705a14ff966fc10725af0fb193398324deeaf17e44a5f9db1e0 diff --git a/build-linux/tests/CMakeFiles/test_virtual_drag_autogen.dir/ParseCache.txt b/build-linux/tests/CMakeFiles/test_virtual_drag_autogen.dir/ParseCache.txt new file mode 100644 index 00000000..ccc85012 --- /dev/null +++ b/build-linux/tests/CMakeFiles/test_virtual_drag_autogen.dir/ParseCache.txt @@ -0,0 +1,843 @@ +# Generated by CMake. Changes will be overwritten. +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/test_virtual_drag.cpp + mmc:Q_OBJECT + mid:test_virtual_drag.moc + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_virtual_drag_autogen/moc_predefs.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/virtual_drag.h + mdp:/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/test_virtual_drag.cpp + mdp:/usr/include/alloca.h + mdp:/usr/include/asm-generic/bitsperlong.h + mdp:/usr/include/asm-generic/errno-base.h + mdp:/usr/include/asm-generic/errno.h + mdp:/usr/include/asm-generic/int-ll64.h + mdp:/usr/include/asm-generic/posix_types.h + mdp:/usr/include/asm-generic/types.h + mdp:/usr/include/asm/bitsperlong.h + mdp:/usr/include/asm/errno.h + mdp:/usr/include/asm/posix_types.h + mdp:/usr/include/asm/posix_types_64.h + mdp:/usr/include/asm/types.h + mdp:/usr/include/asm/unistd.h + mdp:/usr/include/asm/unistd_64.h + mdp:/usr/include/assert.h + mdp:/usr/include/bits/atomic_wide_counter.h + mdp:/usr/include/bits/byteswap.h + mdp:/usr/include/bits/confname.h + mdp:/usr/include/bits/cpu-set.h + mdp:/usr/include/bits/endian.h + mdp:/usr/include/bits/endianness.h + mdp:/usr/include/bits/environments.h + mdp:/usr/include/bits/errno.h + mdp:/usr/include/bits/floatn-common.h + mdp:/usr/include/bits/floatn.h + mdp:/usr/include/bits/getopt_core.h + mdp:/usr/include/bits/getopt_posix.h + mdp:/usr/include/bits/libc-header-start.h + mdp:/usr/include/bits/local_lim.h + mdp:/usr/include/bits/locale.h + mdp:/usr/include/bits/long-double.h + mdp:/usr/include/bits/posix1_lim.h + mdp:/usr/include/bits/posix2_lim.h + mdp:/usr/include/bits/posix_opt.h + mdp:/usr/include/bits/pthread_stack_min-dynamic.h + mdp:/usr/include/bits/pthreadtypes-arch.h + mdp:/usr/include/bits/pthreadtypes.h + mdp:/usr/include/bits/sched.h + mdp:/usr/include/bits/select.h + mdp:/usr/include/bits/semaphore.h + mdp:/usr/include/bits/setjmp.h + mdp:/usr/include/bits/stdint-intn.h + mdp:/usr/include/bits/stdint-least.h + mdp:/usr/include/bits/stdint-uintn.h + mdp:/usr/include/bits/stdio_lim.h + mdp:/usr/include/bits/stdlib-float.h + mdp:/usr/include/bits/struct_mutex.h + mdp:/usr/include/bits/struct_rwlock.h + mdp:/usr/include/bits/syscall.h + mdp:/usr/include/bits/thread-shared-types.h + mdp:/usr/include/bits/time.h + mdp:/usr/include/bits/time64.h + mdp:/usr/include/bits/timesize.h + mdp:/usr/include/bits/timex.h + mdp:/usr/include/bits/types.h + mdp:/usr/include/bits/types/FILE.h + mdp:/usr/include/bits/types/__FILE.h + mdp:/usr/include/bits/types/__fpos64_t.h + mdp:/usr/include/bits/types/__fpos_t.h + mdp:/usr/include/bits/types/__locale_t.h + mdp:/usr/include/bits/types/__mbstate_t.h + mdp:/usr/include/bits/types/__sigset_t.h + mdp:/usr/include/bits/types/clock_t.h + mdp:/usr/include/bits/types/clockid_t.h + mdp:/usr/include/bits/types/cookie_io_functions_t.h + mdp:/usr/include/bits/types/error_t.h + mdp:/usr/include/bits/types/locale_t.h + mdp:/usr/include/bits/types/mbstate_t.h + mdp:/usr/include/bits/types/sigset_t.h + mdp:/usr/include/bits/types/struct_FILE.h + mdp:/usr/include/bits/types/struct___jmp_buf_tag.h + mdp:/usr/include/bits/types/struct_itimerspec.h + mdp:/usr/include/bits/types/struct_sched_param.h + mdp:/usr/include/bits/types/struct_timespec.h + mdp:/usr/include/bits/types/struct_timeval.h + mdp:/usr/include/bits/types/struct_tm.h + mdp:/usr/include/bits/types/time_t.h + mdp:/usr/include/bits/types/timer_t.h + mdp:/usr/include/bits/types/wint_t.h + mdp:/usr/include/bits/typesizes.h + mdp:/usr/include/bits/uintn-identity.h + mdp:/usr/include/bits/uio_lim.h + mdp:/usr/include/bits/unistd_ext.h + mdp:/usr/include/bits/waitflags.h + mdp:/usr/include/bits/waitstatus.h + mdp:/usr/include/bits/wchar.h + mdp:/usr/include/bits/wctype-wchar.h + mdp:/usr/include/bits/wordsize.h + mdp:/usr/include/bits/xopen_lim.h + mdp:/usr/include/c++/15/algorithm + mdp:/usr/include/c++/15/array + mdp:/usr/include/c++/15/atomic + mdp:/usr/include/c++/15/backward/auto_ptr.h + mdp:/usr/include/c++/15/backward/binders.h + mdp:/usr/include/c++/15/bit + mdp:/usr/include/c++/15/bits/algorithmfwd.h + mdp:/usr/include/c++/15/bits/align.h + mdp:/usr/include/c++/15/bits/alloc_traits.h + mdp:/usr/include/c++/15/bits/allocated_ptr.h + mdp:/usr/include/c++/15/bits/allocator.h + mdp:/usr/include/c++/15/bits/atomic_base.h + mdp:/usr/include/c++/15/bits/atomic_futex.h + mdp:/usr/include/c++/15/bits/atomic_lockfree_defines.h + mdp:/usr/include/c++/15/bits/atomic_timed_wait.h + mdp:/usr/include/c++/15/bits/atomic_wait.h + mdp:/usr/include/c++/15/bits/basic_ios.h + mdp:/usr/include/c++/15/bits/basic_ios.tcc + mdp:/usr/include/c++/15/bits/basic_string.h + mdp:/usr/include/c++/15/bits/basic_string.tcc + mdp:/usr/include/c++/15/bits/char_traits.h + mdp:/usr/include/c++/15/bits/charconv.h + mdp:/usr/include/c++/15/bits/chrono.h + mdp:/usr/include/c++/15/bits/chrono_io.h + mdp:/usr/include/c++/15/bits/codecvt.h + mdp:/usr/include/c++/15/bits/concept_check.h + mdp:/usr/include/c++/15/bits/cpp_type_traits.h + mdp:/usr/include/c++/15/bits/cxxabi_forced.h + mdp:/usr/include/c++/15/bits/cxxabi_init_exception.h + mdp:/usr/include/c++/15/bits/enable_special_members.h + mdp:/usr/include/c++/15/bits/erase_if.h + mdp:/usr/include/c++/15/bits/exception.h + mdp:/usr/include/c++/15/bits/exception_defines.h + mdp:/usr/include/c++/15/bits/exception_ptr.h + mdp:/usr/include/c++/15/bits/functexcept.h + mdp:/usr/include/c++/15/bits/functional_hash.h + mdp:/usr/include/c++/15/bits/hash_bytes.h + mdp:/usr/include/c++/15/bits/hashtable.h + mdp:/usr/include/c++/15/bits/hashtable_policy.h + mdp:/usr/include/c++/15/bits/invoke.h + mdp:/usr/include/c++/15/bits/ios_base.h + mdp:/usr/include/c++/15/bits/istream.tcc + mdp:/usr/include/c++/15/bits/iterator_concepts.h + mdp:/usr/include/c++/15/bits/list.tcc + mdp:/usr/include/c++/15/bits/locale_classes.h + mdp:/usr/include/c++/15/bits/locale_classes.tcc + mdp:/usr/include/c++/15/bits/locale_conv.h + mdp:/usr/include/c++/15/bits/locale_facets.h + mdp:/usr/include/c++/15/bits/locale_facets.tcc + mdp:/usr/include/c++/15/bits/locale_facets_nonio.h + mdp:/usr/include/c++/15/bits/locale_facets_nonio.tcc + mdp:/usr/include/c++/15/bits/localefwd.h + mdp:/usr/include/c++/15/bits/max_size_type.h + mdp:/usr/include/c++/15/bits/memory_resource.h + mdp:/usr/include/c++/15/bits/memoryfwd.h + mdp:/usr/include/c++/15/bits/move.h + mdp:/usr/include/c++/15/bits/nested_exception.h + mdp:/usr/include/c++/15/bits/new_allocator.h + mdp:/usr/include/c++/15/bits/node_handle.h + mdp:/usr/include/c++/15/bits/ostream.h + mdp:/usr/include/c++/15/bits/ostream.tcc + mdp:/usr/include/c++/15/bits/ostream_insert.h + mdp:/usr/include/c++/15/bits/parse_numbers.h + mdp:/usr/include/c++/15/bits/postypes.h + mdp:/usr/include/c++/15/bits/predefined_ops.h + mdp:/usr/include/c++/15/bits/ptr_traits.h + mdp:/usr/include/c++/15/bits/quoted_string.h + mdp:/usr/include/c++/15/bits/random.h + mdp:/usr/include/c++/15/bits/random.tcc + mdp:/usr/include/c++/15/bits/range_access.h + mdp:/usr/include/c++/15/bits/ranges_algo.h + mdp:/usr/include/c++/15/bits/ranges_algobase.h + mdp:/usr/include/c++/15/bits/ranges_base.h + mdp:/usr/include/c++/15/bits/ranges_cmp.h + mdp:/usr/include/c++/15/bits/ranges_uninitialized.h + mdp:/usr/include/c++/15/bits/ranges_util.h + mdp:/usr/include/c++/15/bits/refwrap.h + mdp:/usr/include/c++/15/bits/requires_hosted.h + mdp:/usr/include/c++/15/bits/semaphore_base.h + mdp:/usr/include/c++/15/bits/shared_ptr.h + mdp:/usr/include/c++/15/bits/shared_ptr_atomic.h + mdp:/usr/include/c++/15/bits/shared_ptr_base.h + mdp:/usr/include/c++/15/bits/specfun.h + mdp:/usr/include/c++/15/bits/sstream.tcc + mdp:/usr/include/c++/15/bits/std_abs.h + mdp:/usr/include/c++/15/bits/std_function.h + mdp:/usr/include/c++/15/bits/std_mutex.h + mdp:/usr/include/c++/15/bits/std_thread.h + mdp:/usr/include/c++/15/bits/stl_algo.h + mdp:/usr/include/c++/15/bits/stl_algobase.h + mdp:/usr/include/c++/15/bits/stl_bvector.h + mdp:/usr/include/c++/15/bits/stl_construct.h + mdp:/usr/include/c++/15/bits/stl_function.h + mdp:/usr/include/c++/15/bits/stl_heap.h + mdp:/usr/include/c++/15/bits/stl_iterator.h + mdp:/usr/include/c++/15/bits/stl_iterator_base_funcs.h + mdp:/usr/include/c++/15/bits/stl_iterator_base_types.h + mdp:/usr/include/c++/15/bits/stl_list.h + mdp:/usr/include/c++/15/bits/stl_map.h + mdp:/usr/include/c++/15/bits/stl_multimap.h + mdp:/usr/include/c++/15/bits/stl_multiset.h + mdp:/usr/include/c++/15/bits/stl_numeric.h + mdp:/usr/include/c++/15/bits/stl_pair.h + mdp:/usr/include/c++/15/bits/stl_raw_storage_iter.h + mdp:/usr/include/c++/15/bits/stl_relops.h + mdp:/usr/include/c++/15/bits/stl_set.h + mdp:/usr/include/c++/15/bits/stl_tempbuf.h + mdp:/usr/include/c++/15/bits/stl_tree.h + mdp:/usr/include/c++/15/bits/stl_uninitialized.h + mdp:/usr/include/c++/15/bits/stl_vector.h + mdp:/usr/include/c++/15/bits/stream_iterator.h + mdp:/usr/include/c++/15/bits/streambuf.tcc + mdp:/usr/include/c++/15/bits/streambuf_iterator.h + mdp:/usr/include/c++/15/bits/string_view.tcc + mdp:/usr/include/c++/15/bits/stringfwd.h + mdp:/usr/include/c++/15/bits/this_thread_sleep.h + mdp:/usr/include/c++/15/bits/uniform_int_dist.h + mdp:/usr/include/c++/15/bits/unique_lock.h + mdp:/usr/include/c++/15/bits/unique_ptr.h + mdp:/usr/include/c++/15/bits/unordered_map.h + mdp:/usr/include/c++/15/bits/unordered_set.h + mdp:/usr/include/c++/15/bits/uses_allocator.h + mdp:/usr/include/c++/15/bits/uses_allocator_args.h + mdp:/usr/include/c++/15/bits/utility.h + mdp:/usr/include/c++/15/bits/vector.tcc + mdp:/usr/include/c++/15/bits/version.h + mdp:/usr/include/c++/15/cassert + mdp:/usr/include/c++/15/cctype + mdp:/usr/include/c++/15/cerrno + mdp:/usr/include/c++/15/charconv + mdp:/usr/include/c++/15/chrono + mdp:/usr/include/c++/15/climits + mdp:/usr/include/c++/15/clocale + mdp:/usr/include/c++/15/cmath + mdp:/usr/include/c++/15/compare + mdp:/usr/include/c++/15/concepts + mdp:/usr/include/c++/15/condition_variable + mdp:/usr/include/c++/15/cstddef + mdp:/usr/include/c++/15/cstdint + mdp:/usr/include/c++/15/cstdio + mdp:/usr/include/c++/15/cstdlib + mdp:/usr/include/c++/15/cstring + mdp:/usr/include/c++/15/ctime + mdp:/usr/include/c++/15/cwchar + mdp:/usr/include/c++/15/cwctype + mdp:/usr/include/c++/15/debug/assertions.h + mdp:/usr/include/c++/15/debug/debug.h + mdp:/usr/include/c++/15/exception + mdp:/usr/include/c++/15/experimental/source_location + mdp:/usr/include/c++/15/ext/aligned_buffer.h + mdp:/usr/include/c++/15/ext/alloc_traits.h + mdp:/usr/include/c++/15/ext/atomicity.h + mdp:/usr/include/c++/15/ext/concurrence.h + mdp:/usr/include/c++/15/ext/numeric_traits.h + mdp:/usr/include/c++/15/ext/string_conversions.h + mdp:/usr/include/c++/15/ext/type_traits.h + mdp:/usr/include/c++/15/filesystem + mdp:/usr/include/c++/15/format + mdp:/usr/include/c++/15/functional + mdp:/usr/include/c++/15/future + mdp:/usr/include/c++/15/initializer_list + mdp:/usr/include/c++/15/iomanip + mdp:/usr/include/c++/15/ios + mdp:/usr/include/c++/15/iosfwd + mdp:/usr/include/c++/15/istream + mdp:/usr/include/c++/15/iterator + mdp:/usr/include/c++/15/limits + mdp:/usr/include/c++/15/list + mdp:/usr/include/c++/15/locale + mdp:/usr/include/c++/15/map + mdp:/usr/include/c++/15/memory + mdp:/usr/include/c++/15/memory_resource + mdp:/usr/include/c++/15/mutex + mdp:/usr/include/c++/15/new + mdp:/usr/include/c++/15/numeric + mdp:/usr/include/c++/15/optional + mdp:/usr/include/c++/15/ostream + mdp:/usr/include/c++/15/pstl/execution_defs.h + mdp:/usr/include/c++/15/pstl/glue_numeric_defs.h + mdp:/usr/include/c++/15/pstl/pstl_config.h + mdp:/usr/include/c++/15/random + mdp:/usr/include/c++/15/ratio + mdp:/usr/include/c++/15/semaphore + mdp:/usr/include/c++/15/set + mdp:/usr/include/c++/15/shared_mutex + mdp:/usr/include/c++/15/source_location + mdp:/usr/include/c++/15/sstream + mdp:/usr/include/c++/15/stdexcept + mdp:/usr/include/c++/15/stop_token + mdp:/usr/include/c++/15/streambuf + mdp:/usr/include/c++/15/string + mdp:/usr/include/c++/15/string_view + mdp:/usr/include/c++/15/system_error + mdp:/usr/include/c++/15/tr1/bessel_function.tcc + mdp:/usr/include/c++/15/tr1/beta_function.tcc + mdp:/usr/include/c++/15/tr1/ell_integral.tcc + mdp:/usr/include/c++/15/tr1/exp_integral.tcc + mdp:/usr/include/c++/15/tr1/gamma.tcc + mdp:/usr/include/c++/15/tr1/hypergeometric.tcc + mdp:/usr/include/c++/15/tr1/legendre_function.tcc + mdp:/usr/include/c++/15/tr1/modified_bessel_func.tcc + mdp:/usr/include/c++/15/tr1/poly_hermite.tcc + mdp:/usr/include/c++/15/tr1/poly_laguerre.tcc + mdp:/usr/include/c++/15/tr1/riemann_zeta.tcc + mdp:/usr/include/c++/15/tr1/special_function_util.h + mdp:/usr/include/c++/15/tuple + mdp:/usr/include/c++/15/type_traits + mdp:/usr/include/c++/15/typeinfo + mdp:/usr/include/c++/15/unordered_map + mdp:/usr/include/c++/15/unordered_set + mdp:/usr/include/c++/15/utility + mdp:/usr/include/c++/15/variant + mdp:/usr/include/c++/15/vector + mdp:/usr/include/c++/15/version + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/atomic_word.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++allocator.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++config.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/c++locale.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/cpu_defines.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/ctype_base.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/ctype_inline.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/error_constants.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/gthr-default.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/gthr.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/messages_members.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/opt_random.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/os_defines.h + mdp:/usr/include/c++/15/x86_64-redhat-linux/bits/time_members.h + mdp:/usr/include/ctype.h + mdp:/usr/include/endian.h + mdp:/usr/include/errno.h + mdp:/usr/include/features-time64.h + mdp:/usr/include/features.h + mdp:/usr/include/gnu/stubs-64.h + mdp:/usr/include/gnu/stubs.h + mdp:/usr/include/libintl.h + mdp:/usr/include/limits.h + mdp:/usr/include/linux/close_range.h + mdp:/usr/include/linux/errno.h + mdp:/usr/include/linux/limits.h + mdp:/usr/include/linux/posix_types.h + mdp:/usr/include/linux/sched/types.h + mdp:/usr/include/linux/stddef.h + mdp:/usr/include/linux/types.h + mdp:/usr/include/locale.h + mdp:/usr/include/pthread.h + mdp:/usr/include/qt6/QtCore/QAbstractItemModel + mdp:/usr/include/qt6/QtCore/QByteArray + mdp:/usr/include/qt6/QtCore/QDeadlineTimer + mdp:/usr/include/qt6/QtCore/QEvent + mdp:/usr/include/qt6/QtCore/QHash + mdp:/usr/include/qt6/QtCore/QList + mdp:/usr/include/qt6/QtCore/QMap + mdp:/usr/include/qt6/QtCore/QMargins + mdp:/usr/include/qt6/QtCore/QMutex + mdp:/usr/include/qt6/QtCore/QObject + mdp:/usr/include/qt6/QtCore/QRect + mdp:/usr/include/qt6/QtCore/QSize + mdp:/usr/include/qt6/QtCore/QSizeF + mdp:/usr/include/qt6/QtCore/QString + mdp:/usr/include/qt6/QtCore/QStringList + mdp:/usr/include/qt6/QtCore/QVariant + mdp:/usr/include/qt6/QtCore/QVector + mdp:/usr/include/qt6/QtCore/QtCore + mdp:/usr/include/qt6/QtCore/QtCoreDepends + mdp:/usr/include/qt6/QtCore/q17memory.h + mdp:/usr/include/qt6/QtCore/q20algorithm.h + mdp:/usr/include/qt6/QtCore/q20chrono.h + mdp:/usr/include/qt6/QtCore/q20functional.h + mdp:/usr/include/qt6/QtCore/q20iterator.h + mdp:/usr/include/qt6/QtCore/q20map.h + mdp:/usr/include/qt6/QtCore/q20memory.h + mdp:/usr/include/qt6/QtCore/q20type_traits.h + mdp:/usr/include/qt6/QtCore/q20utility.h + mdp:/usr/include/qt6/QtCore/q20vector.h + mdp:/usr/include/qt6/QtCore/q23functional.h + mdp:/usr/include/qt6/QtCore/q23type_traits.h + mdp:/usr/include/qt6/QtCore/q23utility.h + mdp:/usr/include/qt6/QtCore/q26numeric.h + mdp:/usr/include/qt6/QtCore/qabstractanimation.h + mdp:/usr/include/qt6/QtCore/qabstracteventdispatcher.h + mdp:/usr/include/qt6/QtCore/qabstractitemmodel.h + mdp:/usr/include/qt6/QtCore/qabstractnativeeventfilter.h + mdp:/usr/include/qt6/QtCore/qabstractproxymodel.h + mdp:/usr/include/qt6/QtCore/qalgorithms.h + mdp:/usr/include/qt6/QtCore/qalloc.h + mdp:/usr/include/qt6/QtCore/qanimationgroup.h + mdp:/usr/include/qt6/QtCore/qanystringview.h + mdp:/usr/include/qt6/QtCore/qapplicationstatic.h + mdp:/usr/include/qt6/QtCore/qarraydata.h + mdp:/usr/include/qt6/QtCore/qarraydataops.h + mdp:/usr/include/qt6/QtCore/qarraydatapointer.h + mdp:/usr/include/qt6/QtCore/qassert.h + mdp:/usr/include/qt6/QtCore/qassociativeiterable.h + mdp:/usr/include/qt6/QtCore/qatomic.h + mdp:/usr/include/qt6/QtCore/qatomic_cxx11.h + mdp:/usr/include/qt6/QtCore/qatomicscopedvaluerollback.h + mdp:/usr/include/qt6/QtCore/qbasicatomic.h + mdp:/usr/include/qt6/QtCore/qbasictimer.h + mdp:/usr/include/qt6/QtCore/qbindingstorage.h + mdp:/usr/include/qt6/QtCore/qbitarray.h + mdp:/usr/include/qt6/QtCore/qbuffer.h + mdp:/usr/include/qt6/QtCore/qbytearray.h + mdp:/usr/include/qt6/QtCore/qbytearrayalgorithms.h + mdp:/usr/include/qt6/QtCore/qbytearraylist.h + mdp:/usr/include/qt6/QtCore/qbytearraymatcher.h + mdp:/usr/include/qt6/QtCore/qbytearrayview.h + mdp:/usr/include/qt6/QtCore/qcache.h + mdp:/usr/include/qt6/QtCore/qcalendar.h + mdp:/usr/include/qt6/QtCore/qcborarray.h + mdp:/usr/include/qt6/QtCore/qcborcommon.h + mdp:/usr/include/qt6/QtCore/qcbormap.h + mdp:/usr/include/qt6/QtCore/qcborstream.h + mdp:/usr/include/qt6/QtCore/qcborstreamreader.h + mdp:/usr/include/qt6/QtCore/qcborstreamwriter.h + mdp:/usr/include/qt6/QtCore/qcborvalue.h + mdp:/usr/include/qt6/QtCore/qchar.h + mdp:/usr/include/qt6/QtCore/qcheckedint_impl.h + mdp:/usr/include/qt6/QtCore/qchronotimer.h + mdp:/usr/include/qt6/QtCore/qcollator.h + mdp:/usr/include/qt6/QtCore/qcommandlineoption.h + mdp:/usr/include/qt6/QtCore/qcommandlineparser.h + mdp:/usr/include/qt6/QtCore/qcompare.h + mdp:/usr/include/qt6/QtCore/qcompare_impl.h + mdp:/usr/include/qt6/QtCore/qcomparehelpers.h + mdp:/usr/include/qt6/QtCore/qcompilerdetection.h + mdp:/usr/include/qt6/QtCore/qconcatenatetablesproxymodel.h + mdp:/usr/include/qt6/QtCore/qconfig-64.h + mdp:/usr/include/qt6/QtCore/qconfig.h + mdp:/usr/include/qt6/QtCore/qconstructormacros.h + mdp:/usr/include/qt6/QtCore/qcontainerfwd.h + mdp:/usr/include/qt6/QtCore/qcontainerinfo.h + mdp:/usr/include/qt6/QtCore/qcontainertools_impl.h + mdp:/usr/include/qt6/QtCore/qcontiguouscache.h + mdp:/usr/include/qt6/QtCore/qcoreapplication.h + mdp:/usr/include/qt6/QtCore/qcoreapplication_platform.h + mdp:/usr/include/qt6/QtCore/qcoreevent.h + mdp:/usr/include/qt6/QtCore/qcryptographichash.h + mdp:/usr/include/qt6/QtCore/qdarwinhelpers.h + mdp:/usr/include/qt6/QtCore/qdatastream.h + mdp:/usr/include/qt6/QtCore/qdatetime.h + mdp:/usr/include/qt6/QtCore/qdeadlinetimer.h + mdp:/usr/include/qt6/QtCore/qdebug.h + mdp:/usr/include/qt6/QtCore/qdir.h + mdp:/usr/include/qt6/QtCore/qdiriterator.h + mdp:/usr/include/qt6/QtCore/qdirlisting.h + mdp:/usr/include/qt6/QtCore/qeasingcurve.h + mdp:/usr/include/qt6/QtCore/qelapsedtimer.h + mdp:/usr/include/qt6/QtCore/qendian.h + mdp:/usr/include/qt6/QtCore/qeventloop.h + mdp:/usr/include/qt6/QtCore/qexception.h + mdp:/usr/include/qt6/QtCore/qexceptionhandling.h + mdp:/usr/include/qt6/QtCore/qfactoryinterface.h + mdp:/usr/include/qt6/QtCore/qfile.h + mdp:/usr/include/qt6/QtCore/qfiledevice.h + mdp:/usr/include/qt6/QtCore/qfileinfo.h + mdp:/usr/include/qt6/QtCore/qfileselector.h + mdp:/usr/include/qt6/QtCore/qfilesystemwatcher.h + mdp:/usr/include/qt6/QtCore/qflags.h + mdp:/usr/include/qt6/QtCore/qfloat16.h + mdp:/usr/include/qt6/QtCore/qforeach.h + mdp:/usr/include/qt6/QtCore/qfunctionaltools_impl.h + mdp:/usr/include/qt6/QtCore/qfunctionpointer.h + mdp:/usr/include/qt6/QtCore/qfuture.h + mdp:/usr/include/qt6/QtCore/qfuture_impl.h + mdp:/usr/include/qt6/QtCore/qfutureinterface.h + mdp:/usr/include/qt6/QtCore/qfuturesynchronizer.h + mdp:/usr/include/qt6/QtCore/qfuturewatcher.h + mdp:/usr/include/qt6/QtCore/qgenericatomic.h + mdp:/usr/include/qt6/QtCore/qglobal.h + mdp:/usr/include/qt6/QtCore/qglobalstatic.h + mdp:/usr/include/qt6/QtCore/qhash.h + mdp:/usr/include/qt6/QtCore/qhashfunctions.h + mdp:/usr/include/qt6/QtCore/qidentityproxymodel.h + mdp:/usr/include/qt6/QtCore/qiodevice.h + mdp:/usr/include/qt6/QtCore/qiodevicebase.h + mdp:/usr/include/qt6/QtCore/qitemselectionmodel.h + mdp:/usr/include/qt6/QtCore/qiterable.h + mdp:/usr/include/qt6/QtCore/qiterator.h + mdp:/usr/include/qt6/QtCore/qjsonarray.h + mdp:/usr/include/qt6/QtCore/qjsondocument.h + mdp:/usr/include/qt6/QtCore/qjsonobject.h + mdp:/usr/include/qt6/QtCore/qjsonparseerror.h + mdp:/usr/include/qt6/QtCore/qjsonvalue.h + mdp:/usr/include/qt6/QtCore/qlatin1stringmatcher.h + mdp:/usr/include/qt6/QtCore/qlatin1stringview.h + mdp:/usr/include/qt6/QtCore/qlibrary.h + mdp:/usr/include/qt6/QtCore/qlibraryinfo.h + mdp:/usr/include/qt6/QtCore/qline.h + mdp:/usr/include/qt6/QtCore/qlist.h + mdp:/usr/include/qt6/QtCore/qlocale.h + mdp:/usr/include/qt6/QtCore/qlockfile.h + mdp:/usr/include/qt6/QtCore/qlogging.h + mdp:/usr/include/qt6/QtCore/qloggingcategory.h + mdp:/usr/include/qt6/QtCore/qmalloc.h + mdp:/usr/include/qt6/QtCore/qmap.h + mdp:/usr/include/qt6/QtCore/qmargins.h + mdp:/usr/include/qt6/QtCore/qmath.h + mdp:/usr/include/qt6/QtCore/qmessageauthenticationcode.h + mdp:/usr/include/qt6/QtCore/qmetacontainer.h + mdp:/usr/include/qt6/QtCore/qmetaobject.h + mdp:/usr/include/qt6/QtCore/qmetatype.h + mdp:/usr/include/qt6/QtCore/qmimedata.h + mdp:/usr/include/qt6/QtCore/qmimedatabase.h + mdp:/usr/include/qt6/QtCore/qmimetype.h + mdp:/usr/include/qt6/QtCore/qminmax.h + mdp:/usr/include/qt6/QtCore/qmutex.h + mdp:/usr/include/qt6/QtCore/qnamespace.h + mdp:/usr/include/qt6/QtCore/qnativeinterface.h + mdp:/usr/include/qt6/QtCore/qnumeric.h + mdp:/usr/include/qt6/QtCore/qobject.h + mdp:/usr/include/qt6/QtCore/qobject_impl.h + mdp:/usr/include/qt6/QtCore/qobjectcleanuphandler.h + mdp:/usr/include/qt6/QtCore/qobjectdefs.h + mdp:/usr/include/qt6/QtCore/qobjectdefs_impl.h + mdp:/usr/include/qt6/QtCore/qoperatingsystemversion.h + mdp:/usr/include/qt6/QtCore/qoverload.h + mdp:/usr/include/qt6/QtCore/qpair.h + mdp:/usr/include/qt6/QtCore/qparallelanimationgroup.h + mdp:/usr/include/qt6/QtCore/qpauseanimation.h + mdp:/usr/include/qt6/QtCore/qpermissions.h + mdp:/usr/include/qt6/QtCore/qplugin.h + mdp:/usr/include/qt6/QtCore/qpluginloader.h + mdp:/usr/include/qt6/QtCore/qpoint.h + mdp:/usr/include/qt6/QtCore/qpointer.h + mdp:/usr/include/qt6/QtCore/qprocess.h + mdp:/usr/include/qt6/QtCore/qprocessordetection.h + mdp:/usr/include/qt6/QtCore/qpromise.h + mdp:/usr/include/qt6/QtCore/qproperty.h + mdp:/usr/include/qt6/QtCore/qpropertyanimation.h + mdp:/usr/include/qt6/QtCore/qpropertyprivate.h + mdp:/usr/include/qt6/QtCore/qqueue.h + mdp:/usr/include/qt6/QtCore/qrandom.h + mdp:/usr/include/qt6/QtCore/qrangemodel.h + mdp:/usr/include/qt6/QtCore/qrangemodel_impl.h + mdp:/usr/include/qt6/QtCore/qreadwritelock.h + mdp:/usr/include/qt6/QtCore/qrect.h + mdp:/usr/include/qt6/QtCore/qrefcount.h + mdp:/usr/include/qt6/QtCore/qregularexpression.h + mdp:/usr/include/qt6/QtCore/qresource.h + mdp:/usr/include/qt6/QtCore/qresultstore.h + mdp:/usr/include/qt6/QtCore/qrunnable.h + mdp:/usr/include/qt6/QtCore/qsavefile.h + mdp:/usr/include/qt6/QtCore/qscopedpointer.h + mdp:/usr/include/qt6/QtCore/qscopedvaluerollback.h + mdp:/usr/include/qt6/QtCore/qscopeguard.h + mdp:/usr/include/qt6/QtCore/qsemaphore.h + mdp:/usr/include/qt6/QtCore/qsequentialanimationgroup.h + mdp:/usr/include/qt6/QtCore/qsequentialiterable.h + mdp:/usr/include/qt6/QtCore/qset.h + mdp:/usr/include/qt6/QtCore/qsettings.h + mdp:/usr/include/qt6/QtCore/qshareddata.h + mdp:/usr/include/qt6/QtCore/qshareddata_impl.h + mdp:/usr/include/qt6/QtCore/qsharedmemory.h + mdp:/usr/include/qt6/QtCore/qsharedpointer.h + mdp:/usr/include/qt6/QtCore/qsharedpointer_impl.h + mdp:/usr/include/qt6/QtCore/qsignalmapper.h + mdp:/usr/include/qt6/QtCore/qsimd.h + mdp:/usr/include/qt6/QtCore/qsize.h + mdp:/usr/include/qt6/QtCore/qsocketnotifier.h + mdp:/usr/include/qt6/QtCore/qsortfilterproxymodel.h + mdp:/usr/include/qt6/QtCore/qspan.h + mdp:/usr/include/qt6/QtCore/qstack.h + mdp:/usr/include/qt6/QtCore/qstandardpaths.h + mdp:/usr/include/qt6/QtCore/qstaticlatin1stringmatcher.h + mdp:/usr/include/qt6/QtCore/qstdlibdetection.h + mdp:/usr/include/qt6/QtCore/qstorageinfo.h + mdp:/usr/include/qt6/QtCore/qstring.h + mdp:/usr/include/qt6/QtCore/qstringalgorithms.h + mdp:/usr/include/qt6/QtCore/qstringbuilder.h + mdp:/usr/include/qt6/QtCore/qstringconverter.h + mdp:/usr/include/qt6/QtCore/qstringconverter_base.h + mdp:/usr/include/qt6/QtCore/qstringfwd.h + mdp:/usr/include/qt6/QtCore/qstringlist.h + mdp:/usr/include/qt6/QtCore/qstringlistmodel.h + mdp:/usr/include/qt6/QtCore/qstringliteral.h + mdp:/usr/include/qt6/QtCore/qstringmatcher.h + mdp:/usr/include/qt6/QtCore/qstringtokenizer.h + mdp:/usr/include/qt6/QtCore/qstringview.h + mdp:/usr/include/qt6/QtCore/qswap.h + mdp:/usr/include/qt6/QtCore/qsysinfo.h + mdp:/usr/include/qt6/QtCore/qsystemdetection.h + mdp:/usr/include/qt6/QtCore/qsystemsemaphore.h + mdp:/usr/include/qt6/QtCore/qtaggedpointer.h + mdp:/usr/include/qt6/QtCore/qtclasshelpermacros.h + mdp:/usr/include/qt6/QtCore/qtconfiginclude.h + mdp:/usr/include/qt6/QtCore/qtconfigmacros.h + mdp:/usr/include/qt6/QtCore/qtcore-config.h + mdp:/usr/include/qt6/QtCore/qtcoreexports.h + mdp:/usr/include/qt6/QtCore/qtcoreglobal.h + mdp:/usr/include/qt6/QtCore/qtcoreversion.h + mdp:/usr/include/qt6/QtCore/qtdeprecationdefinitions.h + mdp:/usr/include/qt6/QtCore/qtdeprecationmarkers.h + mdp:/usr/include/qt6/QtCore/qtemporarydir.h + mdp:/usr/include/qt6/QtCore/qtemporaryfile.h + mdp:/usr/include/qt6/QtCore/qtenvironmentvariables.h + mdp:/usr/include/qt6/QtCore/qtestsupport_core.h + mdp:/usr/include/qt6/QtCore/qtextboundaryfinder.h + mdp:/usr/include/qt6/QtCore/qtextstream.h + mdp:/usr/include/qt6/QtCore/qtformat_impl.h + mdp:/usr/include/qt6/QtCore/qthread.h + mdp:/usr/include/qt6/QtCore/qthreadpool.h + mdp:/usr/include/qt6/QtCore/qthreadstorage.h + mdp:/usr/include/qt6/QtCore/qtimeline.h + mdp:/usr/include/qt6/QtCore/qtimer.h + mdp:/usr/include/qt6/QtCore/qtimezone.h + mdp:/usr/include/qt6/QtCore/qtipccommon.h + mdp:/usr/include/qt6/QtCore/qtmetamacros.h + mdp:/usr/include/qt6/QtCore/qtmocconstants.h + mdp:/usr/include/qt6/QtCore/qtnoop.h + mdp:/usr/include/qt6/QtCore/qtpreprocessorsupport.h + mdp:/usr/include/qt6/QtCore/qtranslator.h + mdp:/usr/include/qt6/QtCore/qtransposeproxymodel.h + mdp:/usr/include/qt6/QtCore/qtresource.h + mdp:/usr/include/qt6/QtCore/qtsan_impl.h + mdp:/usr/include/qt6/QtCore/qtsymbolmacros.h + mdp:/usr/include/qt6/QtCore/qttranslation.h + mdp:/usr/include/qt6/QtCore/qttypetraits.h + mdp:/usr/include/qt6/QtCore/qtversion.h + mdp:/usr/include/qt6/QtCore/qtversionchecks.h + mdp:/usr/include/qt6/QtCore/qtypeinfo.h + mdp:/usr/include/qt6/QtCore/qtyperevision.h + mdp:/usr/include/qt6/QtCore/qtypes.h + mdp:/usr/include/qt6/QtCore/qurl.h + mdp:/usr/include/qt6/QtCore/qurlquery.h + mdp:/usr/include/qt6/QtCore/qutf8stringview.h + mdp:/usr/include/qt6/QtCore/quuid.h + mdp:/usr/include/qt6/QtCore/qvariant.h + mdp:/usr/include/qt6/QtCore/qvariantanimation.h + mdp:/usr/include/qt6/QtCore/qvarianthash.h + mdp:/usr/include/qt6/QtCore/qvariantlist.h + mdp:/usr/include/qt6/QtCore/qvariantmap.h + mdp:/usr/include/qt6/QtCore/qvarlengtharray.h + mdp:/usr/include/qt6/QtCore/qvector.h + mdp:/usr/include/qt6/QtCore/qversionnumber.h + mdp:/usr/include/qt6/QtCore/qversiontagging.h + mdp:/usr/include/qt6/QtCore/qwaitcondition.h + mdp:/usr/include/qt6/QtCore/qwineventnotifier.h + mdp:/usr/include/qt6/QtCore/qxmlstream.h + mdp:/usr/include/qt6/QtCore/qxpfunctional.h + mdp:/usr/include/qt6/QtCore/qxptype_traits.h + mdp:/usr/include/qt6/QtCore/qyieldcpu.h + mdp:/usr/include/qt6/QtGui/QBrush + mdp:/usr/include/qt6/QtGui/QColor + mdp:/usr/include/qt6/QtGui/QFont + mdp:/usr/include/qt6/QtGui/QIcon + mdp:/usr/include/qt6/QtGui/QImage + mdp:/usr/include/qt6/QtGui/QPixmap + mdp:/usr/include/qt6/QtGui/QTransform + mdp:/usr/include/qt6/QtGui/qbitmap.h + mdp:/usr/include/qt6/QtGui/qbrush.h + mdp:/usr/include/qt6/QtGui/qcolor.h + mdp:/usr/include/qt6/QtGui/qcursor.h + mdp:/usr/include/qt6/QtGui/qevent.h + mdp:/usr/include/qt6/QtGui/qeventpoint.h + mdp:/usr/include/qt6/QtGui/qfont.h + mdp:/usr/include/qt6/QtGui/qguiapplication.h + mdp:/usr/include/qt6/QtGui/qguiapplication_platform.h + mdp:/usr/include/qt6/QtGui/qicon.h + mdp:/usr/include/qt6/QtGui/qimage.h + mdp:/usr/include/qt6/QtGui/qinputdevice.h + mdp:/usr/include/qt6/QtGui/qinputmethod.h + mdp:/usr/include/qt6/QtGui/qkeysequence.h + mdp:/usr/include/qt6/QtGui/qpaintdevice.h + mdp:/usr/include/qt6/QtGui/qpixelformat.h + mdp:/usr/include/qt6/QtGui/qpixmap.h + mdp:/usr/include/qt6/QtGui/qpointingdevice.h + mdp:/usr/include/qt6/QtGui/qpolygon.h + mdp:/usr/include/qt6/QtGui/qregion.h + mdp:/usr/include/qt6/QtGui/qrgb.h + mdp:/usr/include/qt6/QtGui/qrgba64.h + mdp:/usr/include/qt6/QtGui/qscreen.h + mdp:/usr/include/qt6/QtGui/qscreen_platform.h + mdp:/usr/include/qt6/QtGui/qsurface.h + mdp:/usr/include/qt6/QtGui/qsurfaceformat.h + mdp:/usr/include/qt6/QtGui/qtestsupport_gui.h + mdp:/usr/include/qt6/QtGui/qtgui-config.h + mdp:/usr/include/qt6/QtGui/qtguiexports.h + mdp:/usr/include/qt6/QtGui/qtguiglobal.h + mdp:/usr/include/qt6/QtGui/qtransform.h + mdp:/usr/include/qt6/QtGui/qvector2d.h + mdp:/usr/include/qt6/QtGui/qvector3d.h + mdp:/usr/include/qt6/QtGui/qvector4d.h + mdp:/usr/include/qt6/QtGui/qvectornd.h + mdp:/usr/include/qt6/QtGui/qwindow.h + mdp:/usr/include/qt6/QtGui/qwindowdefs.h + mdp:/usr/include/qt6/QtTest/QtTest + mdp:/usr/include/qt6/QtTest/QtTestDepends + mdp:/usr/include/qt6/QtTest/qabstractitemmodeltester.h + mdp:/usr/include/qt6/QtTest/qbenchmark.h + mdp:/usr/include/qt6/QtTest/qbenchmarkmetric.h + mdp:/usr/include/qt6/QtTest/qsignalspy.h + mdp:/usr/include/qt6/QtTest/qtest.h + mdp:/usr/include/qt6/QtTest/qtest_gui.h + mdp:/usr/include/qt6/QtTest/qtestassert.h + mdp:/usr/include/qt6/QtTest/qtestcase.h + mdp:/usr/include/qt6/QtTest/qtestdata.h + mdp:/usr/include/qt6/QtTest/qtestevent.h + mdp:/usr/include/qt6/QtTest/qtesteventloop.h + mdp:/usr/include/qt6/QtTest/qtestkeyboard.h + mdp:/usr/include/qt6/QtTest/qtestmouse.h + mdp:/usr/include/qt6/QtTest/qtestspontaneevent.h + mdp:/usr/include/qt6/QtTest/qtestsystem.h + mdp:/usr/include/qt6/QtTest/qtesttostring.h + mdp:/usr/include/qt6/QtTest/qtesttouch.h + mdp:/usr/include/qt6/QtTest/qtestwheel.h + mdp:/usr/include/qt6/QtTest/qttestexports.h + mdp:/usr/include/qt6/QtTest/qttestglobal.h + mdp:/usr/include/qt6/QtTest/qttestlib-config.h + mdp:/usr/include/qt6/QtTest/qttestversion.h + mdp:/usr/include/sched.h + mdp:/usr/include/semaphore.h + mdp:/usr/include/stdc-predef.h + mdp:/usr/include/stdint.h + mdp:/usr/include/stdio.h + mdp:/usr/include/stdlib.h + mdp:/usr/include/string.h + mdp:/usr/include/strings.h + mdp:/usr/include/sys/cdefs.h + mdp:/usr/include/sys/select.h + mdp:/usr/include/sys/single_threaded.h + mdp:/usr/include/sys/syscall.h + mdp:/usr/include/sys/time.h + mdp:/usr/include/sys/types.h + mdp:/usr/include/syscall.h + mdp:/usr/include/time.h + mdp:/usr/include/unistd.h + mdp:/usr/include/wchar.h + mdp:/usr/include/wctype.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/adxintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxavx512intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxbf16intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxcomplexintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxfp16intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxfp8intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxint8intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxmovrsintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxtf32intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxtileintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/amxtransposeintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2-512bf16intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2-512convertintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2-512mediaintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2-512minmaxintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2-512satcvtintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2bf16intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2convertintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2copyintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2mediaintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2minmaxintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2satcvtintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx2intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512bf16intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512bf16vlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512bitalgintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512bitalgvlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512bwintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512cdintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512dqintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512fintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512fp16intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512fp16vlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512ifmaintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512ifmavlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vbmi2intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vbmi2vlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vbmiintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vbmivlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vlbwintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vldqintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vnniintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vnnivlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vp2intersectintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vp2intersectvlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vpopcntdqintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vpopcntdqvlintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avxifmaintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avxintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avxneconvertintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avxvnniint16intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avxvnniint8intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/avxvnniintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/bmi2intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/bmiintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/cetintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/cldemoteintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/clflushoptintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/clwbintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/clzerointrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/cmpccxaddintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/emmintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/enqcmdintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/f16cintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/fmaintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/fxsrintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/gfniintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/hresetintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/ia32intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/immintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/keylockerintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/lwpintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/lzcntintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/mm_malloc.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/mmintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/movdirintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/movrsintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/mwaitintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/mwaitxintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/pconfigintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/pkuintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/pmmintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/popcntintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/prfchiintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/prfchwintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/raointintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/rdseedintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/rtmintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/serializeintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/sgxintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/sha512intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/shaintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/sm3intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/sm4intrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/smmintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stdarg.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stdbool.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/stddef.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/tbmintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/tmmintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/tsxldtrkintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/uintrintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/usermsrintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/vaesintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/vpclmulqdqintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/waitpkgintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/wbnoinvdintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/wmmintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/x86gprintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/xmmintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/xsavecintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/xsaveintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/xsaveoptintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/xsavesintrin.h + mdp:/usr/lib/gcc/x86_64-redhat-linux/15/include/xtestintrin.h +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/virtual_drag.cpp +/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/virtual_drag.h diff --git a/build-linux/tests/CTestTestfile.cmake b/build-linux/tests/CTestTestfile.cmake new file mode 100644 index 00000000..40fed22a --- /dev/null +++ b/build-linux/tests/CTestTestfile.cmake @@ -0,0 +1,36 @@ +# CMake generated Testfile for +# Source directory: /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests +# Build directory: /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests +# +# This file includes the relevant testing commands required for +# testing this directory and lists subdirectories to be tested as well. +add_test([=[test_simple]=] "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_simple") +set_tests_properties([=[test_simple]=] PROPERTIES WORKING_DIRECTORY "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/install_run/bin" _BACKTRACE_TRIPLES "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/CMakeLists.txt;11;add_test;/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/CMakeLists.txt;0;") +add_test([=[test_db]=] "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_db") +set_tests_properties([=[test_db]=] PROPERTIES _BACKTRACE_TRIPLES "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/CMakeLists.txt;26;add_test;/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/CMakeLists.txt;0;") +add_test([=[test_models]=] "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_models") +set_tests_properties([=[test_models]=] PROPERTIES WORKING_DIRECTORY "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/install_run/bin" _BACKTRACE_TRIPLES "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/CMakeLists.txt;42;add_test;/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/CMakeLists.txt;0;") +add_test([=[test_sequence_detector]=] "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_sequence_detector") +set_tests_properties([=[test_sequence_detector]=] PROPERTIES WORKING_DIRECTORY "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/install_run/bin" _BACKTRACE_TRIPLES "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/CMakeLists.txt;56;add_test;/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/CMakeLists.txt;0;") +add_test([=[test_importer]=] "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_importer") +set_tests_properties([=[test_importer]=] PROPERTIES WORKING_DIRECTORY "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/install_run/bin" _BACKTRACE_TRIPLES "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/CMakeLists.txt;81;add_test;/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/CMakeLists.txt;0;") +add_test([=[test_utils]=] "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_utils") +set_tests_properties([=[test_utils]=] PROPERTIES WORKING_DIRECTORY "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/install_run/bin" _BACKTRACE_TRIPLES "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/CMakeLists.txt;98;add_test;/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/CMakeLists.txt;0;") +add_test([=[test_live_preview_manager]=] "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_live_preview_manager") +set_tests_properties([=[test_live_preview_manager]=] PROPERTIES WORKING_DIRECTORY "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/install_run/bin" _BACKTRACE_TRIPLES "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/CMakeLists.txt;128;add_test;/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/CMakeLists.txt;0;") +add_test([=[test_media_converter_worker]=] "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_media_converter_worker") +set_tests_properties([=[test_media_converter_worker]=] PROPERTIES WORKING_DIRECTORY "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/install_run/bin" _BACKTRACE_TRIPLES "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/CMakeLists.txt;154;add_test;/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/CMakeLists.txt;0;") +add_test([=[test_virtual_drag]=] "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_virtual_drag") +set_tests_properties([=[test_virtual_drag]=] PROPERTIES WORKING_DIRECTORY "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/install_run/bin" _BACKTRACE_TRIPLES "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/CMakeLists.txt;170;add_test;/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/CMakeLists.txt;0;") +add_test([=[test_drag_utils]=] "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_drag_utils") +set_tests_properties([=[test_drag_utils]=] PROPERTIES WORKING_DIRECTORY "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/install_run/bin" _BACKTRACE_TRIPLES "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/CMakeLists.txt;186;add_test;/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/CMakeLists.txt;0;") +add_test([=[test_everything_search]=] "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_everything_search") +set_tests_properties([=[test_everything_search]=] PROPERTIES WORKING_DIRECTORY "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/install_run/bin" _BACKTRACE_TRIPLES "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/CMakeLists.txt;202;add_test;/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/CMakeLists.txt;0;") +add_test([=[test_icon_utils]=] "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_icon_utils") +set_tests_properties([=[test_icon_utils]=] PROPERTIES WORKING_DIRECTORY "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/install_run/bin" _BACKTRACE_TRIPLES "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/CMakeLists.txt;220;add_test;/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/CMakeLists.txt;0;") +add_test([=[test_grid_scrub]=] "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_grid_scrub") +set_tests_properties([=[test_grid_scrub]=] PROPERTIES WORKING_DIRECTORY "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/install_run/bin" _BACKTRACE_TRIPLES "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/CMakeLists.txt;234;add_test;/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/CMakeLists.txt;0;") +add_test([=[test_platform_session]=] "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_platform_session") +set_tests_properties([=[test_platform_session]=] PROPERTIES WORKING_DIRECTORY "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/install_run/bin" _BACKTRACE_TRIPLES "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/CMakeLists.txt;248;add_test;/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/CMakeLists.txt;0;") +add_test([=[test_annotation_items]=] "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_annotation_items") +set_tests_properties([=[test_annotation_items]=] PROPERTIES WORKING_DIRECTORY "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/install_run/bin" _BACKTRACE_TRIPLES "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/CMakeLists.txt;266;add_test;/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/CMakeLists.txt;0;") diff --git a/build-linux/tests/cmake_install.cmake b/build-linux/tests/cmake_install.cmake new file mode 100644 index 00000000..9ee8edbd --- /dev/null +++ b/build-linux/tests/cmake_install.cmake @@ -0,0 +1,410 @@ +# Install script for directory: /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests + +# Set the install prefix +if(NOT DEFINED CMAKE_INSTALL_PREFIX) + set(CMAKE_INSTALL_PREFIX "/usr/local") +endif() +string(REGEX REPLACE "/$" "" CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}") + +# Set the install configuration name. +if(NOT DEFINED CMAKE_INSTALL_CONFIG_NAME) + if(BUILD_TYPE) + string(REGEX REPLACE "^[^A-Za-z0-9_]+" "" + CMAKE_INSTALL_CONFIG_NAME "${BUILD_TYPE}") + else() + set(CMAKE_INSTALL_CONFIG_NAME "Release") + endif() + message(STATUS "Install configuration: \"${CMAKE_INSTALL_CONFIG_NAME}\"") +endif() + +# Set the component getting installed. +if(NOT CMAKE_INSTALL_COMPONENT) + if(COMPONENT) + message(STATUS "Install component: \"${COMPONENT}\"") + set(CMAKE_INSTALL_COMPONENT "${COMPONENT}") + else() + set(CMAKE_INSTALL_COMPONENT) + endif() +endif() + +# Install shared libraries without execute permission? +if(NOT DEFINED CMAKE_INSTALL_SO_NO_EXE) + set(CMAKE_INSTALL_SO_NO_EXE "0") +endif() + +# Is this installation the result of a crosscompile? +if(NOT DEFINED CMAKE_CROSSCOMPILING) + set(CMAKE_CROSSCOMPILING "FALSE") +endif() + +# Set path to fallback-tool for dependency-resolution. +if(NOT DEFINED CMAKE_OBJDUMP) + set(CMAKE_OBJDUMP "/usr/bin/objdump") +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + if(EXISTS "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/test_simple" AND + NOT IS_SYMLINK "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/test_simple") + file(RPATH_CHECK + FILE "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/test_simple" + RPATH "\$ORIGIN:\$ORIGIN/../lib64") + endif() + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/bin" TYPE EXECUTABLE FILES "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_simple") + if(EXISTS "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/test_simple" AND + NOT IS_SYMLINK "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/test_simple") + file(RPATH_CHANGE + FILE "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/test_simple" + OLD_RPATH "::::::::::::::::::::::::" + NEW_RPATH "\$ORIGIN:\$ORIGIN/../lib64") + if(CMAKE_INSTALL_DO_STRIP) + execute_process(COMMAND "/usr/bin/strip" "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/test_simple") + endif() + endif() +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + include("/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/CMakeFiles/test_simple.dir/install-cxx-module-bmi-Release.cmake" OPTIONAL) +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + if(EXISTS "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/test_db" AND + NOT IS_SYMLINK "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/test_db") + file(RPATH_CHECK + FILE "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/test_db" + RPATH "\$ORIGIN:\$ORIGIN/../lib64") + endif() + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/bin" TYPE EXECUTABLE FILES "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_db") + if(EXISTS "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/test_db" AND + NOT IS_SYMLINK "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/test_db") + file(RPATH_CHANGE + FILE "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/test_db" + OLD_RPATH "::::::::::::::::::::::::" + NEW_RPATH "\$ORIGIN:\$ORIGIN/../lib64") + if(CMAKE_INSTALL_DO_STRIP) + execute_process(COMMAND "/usr/bin/strip" "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/test_db") + endif() + endif() +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + include("/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/CMakeFiles/test_db.dir/install-cxx-module-bmi-Release.cmake" OPTIONAL) +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + if(EXISTS "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/test_models" AND + NOT IS_SYMLINK "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/test_models") + file(RPATH_CHECK + FILE "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/test_models" + RPATH "\$ORIGIN:\$ORIGIN/../lib64") + endif() + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/bin" TYPE EXECUTABLE FILES "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_models") + if(EXISTS "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/test_models" AND + NOT IS_SYMLINK "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/test_models") + file(RPATH_CHANGE + FILE "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/test_models" + OLD_RPATH "::::::::::::::::::::::::" + NEW_RPATH "\$ORIGIN:\$ORIGIN/../lib64") + if(CMAKE_INSTALL_DO_STRIP) + execute_process(COMMAND "/usr/bin/strip" "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/test_models") + endif() + endif() +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + include("/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/CMakeFiles/test_models.dir/install-cxx-module-bmi-Release.cmake" OPTIONAL) +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + if(EXISTS "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/test_sequence_detector" AND + NOT IS_SYMLINK "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/test_sequence_detector") + file(RPATH_CHECK + FILE "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/test_sequence_detector" + RPATH "\$ORIGIN:\$ORIGIN/../lib64") + endif() + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/bin" TYPE EXECUTABLE FILES "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_sequence_detector") + if(EXISTS "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/test_sequence_detector" AND + NOT IS_SYMLINK "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/test_sequence_detector") + file(RPATH_CHANGE + FILE "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/test_sequence_detector" + OLD_RPATH "::::::::::::::::::::::::" + NEW_RPATH "\$ORIGIN:\$ORIGIN/../lib64") + if(CMAKE_INSTALL_DO_STRIP) + execute_process(COMMAND "/usr/bin/strip" "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/test_sequence_detector") + endif() + endif() +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + include("/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/CMakeFiles/test_sequence_detector.dir/install-cxx-module-bmi-Release.cmake" OPTIONAL) +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + if(EXISTS "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/test_importer" AND + NOT IS_SYMLINK "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/test_importer") + file(RPATH_CHECK + FILE "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/test_importer" + RPATH "\$ORIGIN:\$ORIGIN/../lib64") + endif() + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/bin" TYPE EXECUTABLE FILES "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_importer") + if(EXISTS "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/test_importer" AND + NOT IS_SYMLINK "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/test_importer") + file(RPATH_CHANGE + FILE "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/test_importer" + OLD_RPATH "::::::::::::::::::::::::" + NEW_RPATH "\$ORIGIN:\$ORIGIN/../lib64") + if(CMAKE_INSTALL_DO_STRIP) + execute_process(COMMAND "/usr/bin/strip" "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/test_importer") + endif() + endif() +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + include("/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/CMakeFiles/test_importer.dir/install-cxx-module-bmi-Release.cmake" OPTIONAL) +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + if(EXISTS "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/test_utils" AND + NOT IS_SYMLINK "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/test_utils") + file(RPATH_CHECK + FILE "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/test_utils" + RPATH "\$ORIGIN:\$ORIGIN/../lib64") + endif() + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/bin" TYPE EXECUTABLE FILES "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_utils") + if(EXISTS "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/test_utils" AND + NOT IS_SYMLINK "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/test_utils") + file(RPATH_CHANGE + FILE "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/test_utils" + OLD_RPATH "::::::::::::::::::::::::" + NEW_RPATH "\$ORIGIN:\$ORIGIN/../lib64") + if(CMAKE_INSTALL_DO_STRIP) + execute_process(COMMAND "/usr/bin/strip" "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/test_utils") + endif() + endif() +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + include("/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/CMakeFiles/test_utils.dir/install-cxx-module-bmi-Release.cmake" OPTIONAL) +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + if(EXISTS "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/test_live_preview_manager" AND + NOT IS_SYMLINK "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/test_live_preview_manager") + file(RPATH_CHECK + FILE "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/test_live_preview_manager" + RPATH "\$ORIGIN:\$ORIGIN/../lib64") + endif() + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/bin" TYPE EXECUTABLE FILES "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_live_preview_manager") + if(EXISTS "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/test_live_preview_manager" AND + NOT IS_SYMLINK "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/test_live_preview_manager") + file(RPATH_CHANGE + FILE "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/test_live_preview_manager" + OLD_RPATH "::::::::::::::::::::::::" + NEW_RPATH "\$ORIGIN:\$ORIGIN/../lib64") + if(CMAKE_INSTALL_DO_STRIP) + execute_process(COMMAND "/usr/bin/strip" "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/test_live_preview_manager") + endif() + endif() +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + include("/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/CMakeFiles/test_live_preview_manager.dir/install-cxx-module-bmi-Release.cmake" OPTIONAL) +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + if(EXISTS "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/test_media_converter_worker" AND + NOT IS_SYMLINK "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/test_media_converter_worker") + file(RPATH_CHECK + FILE "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/test_media_converter_worker" + RPATH "\$ORIGIN:\$ORIGIN/../lib64") + endif() + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/bin" TYPE EXECUTABLE FILES "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_media_converter_worker") + if(EXISTS "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/test_media_converter_worker" AND + NOT IS_SYMLINK "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/test_media_converter_worker") + file(RPATH_CHANGE + FILE "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/test_media_converter_worker" + OLD_RPATH "::::::::::::::::::::::::" + NEW_RPATH "\$ORIGIN:\$ORIGIN/../lib64") + if(CMAKE_INSTALL_DO_STRIP) + execute_process(COMMAND "/usr/bin/strip" "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/test_media_converter_worker") + endif() + endif() +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + include("/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/CMakeFiles/test_media_converter_worker.dir/install-cxx-module-bmi-Release.cmake" OPTIONAL) +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + if(EXISTS "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/test_virtual_drag" AND + NOT IS_SYMLINK "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/test_virtual_drag") + file(RPATH_CHECK + FILE "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/test_virtual_drag" + RPATH "\$ORIGIN:\$ORIGIN/../lib64") + endif() + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/bin" TYPE EXECUTABLE FILES "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_virtual_drag") + if(EXISTS "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/test_virtual_drag" AND + NOT IS_SYMLINK "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/test_virtual_drag") + file(RPATH_CHANGE + FILE "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/test_virtual_drag" + OLD_RPATH "::::::::::::::::::::::::" + NEW_RPATH "\$ORIGIN:\$ORIGIN/../lib64") + if(CMAKE_INSTALL_DO_STRIP) + execute_process(COMMAND "/usr/bin/strip" "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/test_virtual_drag") + endif() + endif() +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + include("/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/CMakeFiles/test_virtual_drag.dir/install-cxx-module-bmi-Release.cmake" OPTIONAL) +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + if(EXISTS "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/test_drag_utils" AND + NOT IS_SYMLINK "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/test_drag_utils") + file(RPATH_CHECK + FILE "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/test_drag_utils" + RPATH "\$ORIGIN:\$ORIGIN/../lib64") + endif() + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/bin" TYPE EXECUTABLE FILES "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_drag_utils") + if(EXISTS "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/test_drag_utils" AND + NOT IS_SYMLINK "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/test_drag_utils") + file(RPATH_CHANGE + FILE "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/test_drag_utils" + OLD_RPATH "::::::::::::::::::::::::" + NEW_RPATH "\$ORIGIN:\$ORIGIN/../lib64") + if(CMAKE_INSTALL_DO_STRIP) + execute_process(COMMAND "/usr/bin/strip" "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/test_drag_utils") + endif() + endif() +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + include("/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/CMakeFiles/test_drag_utils.dir/install-cxx-module-bmi-Release.cmake" OPTIONAL) +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + if(EXISTS "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/test_everything_search" AND + NOT IS_SYMLINK "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/test_everything_search") + file(RPATH_CHECK + FILE "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/test_everything_search" + RPATH "\$ORIGIN:\$ORIGIN/../lib64") + endif() + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/bin" TYPE EXECUTABLE FILES "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_everything_search") + if(EXISTS "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/test_everything_search" AND + NOT IS_SYMLINK "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/test_everything_search") + file(RPATH_CHANGE + FILE "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/test_everything_search" + OLD_RPATH "::::::::::::::::::::::::" + NEW_RPATH "\$ORIGIN:\$ORIGIN/../lib64") + if(CMAKE_INSTALL_DO_STRIP) + execute_process(COMMAND "/usr/bin/strip" "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/test_everything_search") + endif() + endif() +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + include("/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/CMakeFiles/test_everything_search.dir/install-cxx-module-bmi-Release.cmake" OPTIONAL) +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + if(EXISTS "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/test_icon_utils" AND + NOT IS_SYMLINK "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/test_icon_utils") + file(RPATH_CHECK + FILE "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/test_icon_utils" + RPATH "\$ORIGIN:\$ORIGIN/../lib64") + endif() + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/bin" TYPE EXECUTABLE FILES "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_icon_utils") + if(EXISTS "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/test_icon_utils" AND + NOT IS_SYMLINK "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/test_icon_utils") + file(RPATH_CHANGE + FILE "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/test_icon_utils" + OLD_RPATH "::::::::::::::::::::::::" + NEW_RPATH "\$ORIGIN:\$ORIGIN/../lib64") + if(CMAKE_INSTALL_DO_STRIP) + execute_process(COMMAND "/usr/bin/strip" "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/test_icon_utils") + endif() + endif() +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + include("/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/CMakeFiles/test_icon_utils.dir/install-cxx-module-bmi-Release.cmake" OPTIONAL) +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + if(EXISTS "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/test_grid_scrub" AND + NOT IS_SYMLINK "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/test_grid_scrub") + file(RPATH_CHECK + FILE "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/test_grid_scrub" + RPATH "\$ORIGIN:\$ORIGIN/../lib64") + endif() + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/bin" TYPE EXECUTABLE FILES "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_grid_scrub") + if(EXISTS "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/test_grid_scrub" AND + NOT IS_SYMLINK "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/test_grid_scrub") + file(RPATH_CHANGE + FILE "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/test_grid_scrub" + OLD_RPATH "::::::::::::::::::::::::" + NEW_RPATH "\$ORIGIN:\$ORIGIN/../lib64") + if(CMAKE_INSTALL_DO_STRIP) + execute_process(COMMAND "/usr/bin/strip" "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/test_grid_scrub") + endif() + endif() +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + include("/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/CMakeFiles/test_grid_scrub.dir/install-cxx-module-bmi-Release.cmake" OPTIONAL) +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + if(EXISTS "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/test_platform_session" AND + NOT IS_SYMLINK "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/test_platform_session") + file(RPATH_CHECK + FILE "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/test_platform_session" + RPATH "\$ORIGIN:\$ORIGIN/../lib64") + endif() + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/bin" TYPE EXECUTABLE FILES "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_platform_session") + if(EXISTS "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/test_platform_session" AND + NOT IS_SYMLINK "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/test_platform_session") + file(RPATH_CHANGE + FILE "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/test_platform_session" + OLD_RPATH "::::::::::::::::::::::::" + NEW_RPATH "\$ORIGIN:\$ORIGIN/../lib64") + if(CMAKE_INSTALL_DO_STRIP) + execute_process(COMMAND "/usr/bin/strip" "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/test_platform_session") + endif() + endif() +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + include("/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/CMakeFiles/test_platform_session.dir/install-cxx-module-bmi-Release.cmake" OPTIONAL) +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + if(EXISTS "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/test_annotation_items" AND + NOT IS_SYMLINK "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/test_annotation_items") + file(RPATH_CHECK + FILE "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/test_annotation_items" + RPATH "\$ORIGIN:\$ORIGIN/../lib64") + endif() + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/bin" TYPE EXECUTABLE FILES "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_annotation_items") + if(EXISTS "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/test_annotation_items" AND + NOT IS_SYMLINK "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/test_annotation_items") + file(RPATH_CHANGE + FILE "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/test_annotation_items" + OLD_RPATH "::::::::::::::::::::::::" + NEW_RPATH "\$ORIGIN:\$ORIGIN/../lib64") + if(CMAKE_INSTALL_DO_STRIP) + execute_process(COMMAND "/usr/bin/strip" "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/bin/test_annotation_items") + endif() + endif() +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + include("/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/CMakeFiles/test_annotation_items.dir/install-cxx-module-bmi-Release.cmake" OPTIONAL) +endif() + +string(REPLACE ";" "\n" CMAKE_INSTALL_MANIFEST_CONTENT + "${CMAKE_INSTALL_MANIFEST_FILES}") +if(CMAKE_INSTALL_LOCAL_ONLY) + file(WRITE "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/install_local_manifest.txt" + "${CMAKE_INSTALL_MANIFEST_CONTENT}") +endif() diff --git a/build-linux/tests/test_annotation_items b/build-linux/tests/test_annotation_items new file mode 100755 index 00000000..5a485b30 Binary files /dev/null and b/build-linux/tests/test_annotation_items differ diff --git a/build-linux/tests/test_annotation_items_autogen/deps b/build-linux/tests/test_annotation_items_autogen/deps new file mode 100644 index 00000000..25b09562 --- /dev/null +++ b/build-linux/tests/test_annotation_items_autogen/deps @@ -0,0 +1,925 @@ +test_annotation_items_autogen/timestamp: \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_annotation_items_autogen/moc_predefs.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/annotation_items.cpp \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/annotation_items.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/CMakeLists.txt \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/test_annotation_items.cpp \ + /usr/include/alloca.h \ + /usr/include/asm-generic/bitsperlong.h \ + /usr/include/asm-generic/errno-base.h \ + /usr/include/asm-generic/errno.h \ + /usr/include/asm-generic/int-ll64.h \ + /usr/include/asm-generic/posix_types.h \ + /usr/include/asm-generic/types.h \ + /usr/include/asm/bitsperlong.h \ + /usr/include/asm/errno.h \ + /usr/include/asm/posix_types.h \ + /usr/include/asm/posix_types_64.h \ + /usr/include/asm/types.h \ + /usr/include/asm/unistd.h \ + /usr/include/asm/unistd_64.h \ + /usr/include/assert.h \ + /usr/include/bits/atomic_wide_counter.h \ + /usr/include/bits/byteswap.h \ + /usr/include/bits/confname.h \ + /usr/include/bits/cpu-set.h \ + /usr/include/bits/endian.h \ + /usr/include/bits/endianness.h \ + /usr/include/bits/environments.h \ + /usr/include/bits/errno.h \ + /usr/include/bits/floatn-common.h \ + /usr/include/bits/floatn.h \ + /usr/include/bits/getopt_core.h \ + /usr/include/bits/getopt_posix.h \ + /usr/include/bits/libc-header-start.h \ + /usr/include/bits/local_lim.h \ + /usr/include/bits/locale.h \ + /usr/include/bits/long-double.h \ + /usr/include/bits/posix1_lim.h \ + /usr/include/bits/posix2_lim.h \ + /usr/include/bits/posix_opt.h \ + /usr/include/bits/pthread_stack_min-dynamic.h \ + /usr/include/bits/pthreadtypes-arch.h \ + /usr/include/bits/pthreadtypes.h \ + /usr/include/bits/sched.h \ + /usr/include/bits/select.h \ + /usr/include/bits/semaphore.h \ + /usr/include/bits/setjmp.h \ + /usr/include/bits/stdint-intn.h \ + /usr/include/bits/stdint-least.h \ + /usr/include/bits/stdint-uintn.h \ + /usr/include/bits/stdio_lim.h \ + /usr/include/bits/stdlib-float.h \ + /usr/include/bits/struct_mutex.h \ + /usr/include/bits/struct_rwlock.h \ + /usr/include/bits/syscall.h \ + /usr/include/bits/thread-shared-types.h \ + /usr/include/bits/time.h \ + /usr/include/bits/time64.h \ + /usr/include/bits/timesize.h \ + /usr/include/bits/timex.h \ + /usr/include/bits/types.h \ + /usr/include/bits/types/FILE.h \ + /usr/include/bits/types/__FILE.h \ + /usr/include/bits/types/__fpos64_t.h \ + /usr/include/bits/types/__fpos_t.h \ + /usr/include/bits/types/__locale_t.h \ + /usr/include/bits/types/__mbstate_t.h \ + /usr/include/bits/types/__sigset_t.h \ + /usr/include/bits/types/clock_t.h \ + /usr/include/bits/types/clockid_t.h \ + /usr/include/bits/types/cookie_io_functions_t.h \ + /usr/include/bits/types/error_t.h \ + /usr/include/bits/types/locale_t.h \ + /usr/include/bits/types/mbstate_t.h \ + /usr/include/bits/types/sigset_t.h \ + /usr/include/bits/types/struct_FILE.h \ + /usr/include/bits/types/struct___jmp_buf_tag.h \ + /usr/include/bits/types/struct_itimerspec.h \ + /usr/include/bits/types/struct_sched_param.h \ + /usr/include/bits/types/struct_timespec.h \ + /usr/include/bits/types/struct_timeval.h \ + /usr/include/bits/types/struct_tm.h \ + /usr/include/bits/types/time_t.h \ + /usr/include/bits/types/timer_t.h \ + /usr/include/bits/types/wint_t.h \ + /usr/include/bits/typesizes.h \ + /usr/include/bits/uintn-identity.h \ + /usr/include/bits/uio_lim.h \ + /usr/include/bits/unistd_ext.h \ + /usr/include/bits/waitflags.h \ + /usr/include/bits/waitstatus.h \ + /usr/include/bits/wchar.h \ + /usr/include/bits/wctype-wchar.h \ + /usr/include/bits/wordsize.h \ + /usr/include/bits/xopen_lim.h \ + /usr/include/c++/15/algorithm \ + /usr/include/c++/15/array \ + /usr/include/c++/15/atomic \ + /usr/include/c++/15/backward/auto_ptr.h \ + /usr/include/c++/15/backward/binders.h \ + /usr/include/c++/15/bit \ + /usr/include/c++/15/bits/algorithmfwd.h \ + /usr/include/c++/15/bits/align.h \ + /usr/include/c++/15/bits/alloc_traits.h \ + /usr/include/c++/15/bits/allocated_ptr.h \ + /usr/include/c++/15/bits/allocator.h \ + /usr/include/c++/15/bits/atomic_base.h \ + /usr/include/c++/15/bits/atomic_futex.h \ + /usr/include/c++/15/bits/atomic_lockfree_defines.h \ + /usr/include/c++/15/bits/atomic_timed_wait.h \ + /usr/include/c++/15/bits/atomic_wait.h \ + /usr/include/c++/15/bits/basic_ios.h \ + /usr/include/c++/15/bits/basic_ios.tcc \ + /usr/include/c++/15/bits/basic_string.h \ + /usr/include/c++/15/bits/basic_string.tcc \ + /usr/include/c++/15/bits/char_traits.h \ + /usr/include/c++/15/bits/charconv.h \ + /usr/include/c++/15/bits/chrono.h \ + /usr/include/c++/15/bits/chrono_io.h \ + /usr/include/c++/15/bits/codecvt.h \ + /usr/include/c++/15/bits/concept_check.h \ + /usr/include/c++/15/bits/cpp_type_traits.h \ + /usr/include/c++/15/bits/cxxabi_forced.h \ + /usr/include/c++/15/bits/cxxabi_init_exception.h \ + /usr/include/c++/15/bits/enable_special_members.h \ + /usr/include/c++/15/bits/erase_if.h \ + /usr/include/c++/15/bits/exception.h \ + /usr/include/c++/15/bits/exception_defines.h \ + /usr/include/c++/15/bits/exception_ptr.h \ + /usr/include/c++/15/bits/functexcept.h \ + /usr/include/c++/15/bits/functional_hash.h \ + /usr/include/c++/15/bits/hash_bytes.h \ + /usr/include/c++/15/bits/hashtable.h \ + /usr/include/c++/15/bits/hashtable_policy.h \ + /usr/include/c++/15/bits/invoke.h \ + /usr/include/c++/15/bits/ios_base.h \ + /usr/include/c++/15/bits/istream.tcc \ + /usr/include/c++/15/bits/iterator_concepts.h \ + /usr/include/c++/15/bits/list.tcc \ + /usr/include/c++/15/bits/locale_classes.h \ + /usr/include/c++/15/bits/locale_classes.tcc \ + /usr/include/c++/15/bits/locale_conv.h \ + /usr/include/c++/15/bits/locale_facets.h \ + /usr/include/c++/15/bits/locale_facets.tcc \ + /usr/include/c++/15/bits/locale_facets_nonio.h \ + /usr/include/c++/15/bits/locale_facets_nonio.tcc \ + /usr/include/c++/15/bits/localefwd.h \ + /usr/include/c++/15/bits/max_size_type.h \ + /usr/include/c++/15/bits/memory_resource.h \ + /usr/include/c++/15/bits/memoryfwd.h \ + /usr/include/c++/15/bits/move.h \ + /usr/include/c++/15/bits/nested_exception.h \ + /usr/include/c++/15/bits/new_allocator.h \ + /usr/include/c++/15/bits/node_handle.h \ + /usr/include/c++/15/bits/ostream.h \ + /usr/include/c++/15/bits/ostream.tcc \ + /usr/include/c++/15/bits/ostream_insert.h \ + /usr/include/c++/15/bits/parse_numbers.h \ + /usr/include/c++/15/bits/postypes.h \ + /usr/include/c++/15/bits/predefined_ops.h \ + /usr/include/c++/15/bits/ptr_traits.h \ + /usr/include/c++/15/bits/quoted_string.h \ + /usr/include/c++/15/bits/random.h \ + /usr/include/c++/15/bits/random.tcc \ + /usr/include/c++/15/bits/range_access.h \ + /usr/include/c++/15/bits/ranges_algo.h \ + /usr/include/c++/15/bits/ranges_algobase.h \ + /usr/include/c++/15/bits/ranges_base.h \ + /usr/include/c++/15/bits/ranges_cmp.h \ + /usr/include/c++/15/bits/ranges_uninitialized.h \ + /usr/include/c++/15/bits/ranges_util.h \ + /usr/include/c++/15/bits/refwrap.h \ + /usr/include/c++/15/bits/requires_hosted.h \ + /usr/include/c++/15/bits/semaphore_base.h \ + /usr/include/c++/15/bits/shared_ptr.h \ + /usr/include/c++/15/bits/shared_ptr_atomic.h \ + /usr/include/c++/15/bits/shared_ptr_base.h \ + /usr/include/c++/15/bits/specfun.h \ + /usr/include/c++/15/bits/sstream.tcc \ + /usr/include/c++/15/bits/std_abs.h \ + /usr/include/c++/15/bits/std_function.h \ + /usr/include/c++/15/bits/std_mutex.h \ + /usr/include/c++/15/bits/std_thread.h \ + /usr/include/c++/15/bits/stl_algo.h \ + /usr/include/c++/15/bits/stl_algobase.h \ + /usr/include/c++/15/bits/stl_bvector.h \ + /usr/include/c++/15/bits/stl_construct.h \ + /usr/include/c++/15/bits/stl_function.h \ + /usr/include/c++/15/bits/stl_heap.h \ + /usr/include/c++/15/bits/stl_iterator.h \ + /usr/include/c++/15/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/15/bits/stl_iterator_base_types.h \ + /usr/include/c++/15/bits/stl_list.h \ + /usr/include/c++/15/bits/stl_map.h \ + /usr/include/c++/15/bits/stl_multimap.h \ + /usr/include/c++/15/bits/stl_multiset.h \ + /usr/include/c++/15/bits/stl_numeric.h \ + /usr/include/c++/15/bits/stl_pair.h \ + /usr/include/c++/15/bits/stl_raw_storage_iter.h \ + /usr/include/c++/15/bits/stl_relops.h \ + /usr/include/c++/15/bits/stl_set.h \ + /usr/include/c++/15/bits/stl_tempbuf.h \ + /usr/include/c++/15/bits/stl_tree.h \ + /usr/include/c++/15/bits/stl_uninitialized.h \ + /usr/include/c++/15/bits/stl_vector.h \ + /usr/include/c++/15/bits/stream_iterator.h \ + /usr/include/c++/15/bits/streambuf.tcc \ + /usr/include/c++/15/bits/streambuf_iterator.h \ + /usr/include/c++/15/bits/string_view.tcc \ + /usr/include/c++/15/bits/stringfwd.h \ + /usr/include/c++/15/bits/this_thread_sleep.h \ + /usr/include/c++/15/bits/uniform_int_dist.h \ + /usr/include/c++/15/bits/unique_lock.h \ + /usr/include/c++/15/bits/unique_ptr.h \ + /usr/include/c++/15/bits/unordered_map.h \ + /usr/include/c++/15/bits/unordered_set.h \ + /usr/include/c++/15/bits/uses_allocator.h \ + /usr/include/c++/15/bits/uses_allocator_args.h \ + /usr/include/c++/15/bits/utility.h \ + /usr/include/c++/15/bits/vector.tcc \ + /usr/include/c++/15/bits/version.h \ + /usr/include/c++/15/cassert \ + /usr/include/c++/15/cctype \ + /usr/include/c++/15/cerrno \ + /usr/include/c++/15/charconv \ + /usr/include/c++/15/chrono \ + /usr/include/c++/15/climits \ + /usr/include/c++/15/clocale \ + /usr/include/c++/15/cmath \ + /usr/include/c++/15/compare \ + /usr/include/c++/15/concepts \ + /usr/include/c++/15/condition_variable \ + /usr/include/c++/15/cstddef \ + /usr/include/c++/15/cstdint \ + /usr/include/c++/15/cstdio \ + /usr/include/c++/15/cstdlib \ + /usr/include/c++/15/cstring \ + /usr/include/c++/15/ctime \ + /usr/include/c++/15/cwchar \ + /usr/include/c++/15/cwctype \ + /usr/include/c++/15/debug/assertions.h \ + /usr/include/c++/15/debug/debug.h \ + /usr/include/c++/15/exception \ + /usr/include/c++/15/experimental/source_location \ + /usr/include/c++/15/ext/aligned_buffer.h \ + /usr/include/c++/15/ext/alloc_traits.h \ + /usr/include/c++/15/ext/atomicity.h \ + /usr/include/c++/15/ext/concurrence.h \ + /usr/include/c++/15/ext/numeric_traits.h \ + /usr/include/c++/15/ext/string_conversions.h \ + /usr/include/c++/15/ext/type_traits.h \ + /usr/include/c++/15/filesystem \ + /usr/include/c++/15/format \ + /usr/include/c++/15/functional \ + /usr/include/c++/15/future \ + /usr/include/c++/15/initializer_list \ + /usr/include/c++/15/iomanip \ + /usr/include/c++/15/ios \ + /usr/include/c++/15/iosfwd \ + /usr/include/c++/15/istream \ + /usr/include/c++/15/iterator \ + /usr/include/c++/15/limits \ + /usr/include/c++/15/list \ + /usr/include/c++/15/locale \ + /usr/include/c++/15/map \ + /usr/include/c++/15/memory \ + /usr/include/c++/15/memory_resource \ + /usr/include/c++/15/mutex \ + /usr/include/c++/15/new \ + /usr/include/c++/15/numeric \ + /usr/include/c++/15/optional \ + /usr/include/c++/15/ostream \ + /usr/include/c++/15/pstl/execution_defs.h \ + /usr/include/c++/15/pstl/glue_numeric_defs.h \ + /usr/include/c++/15/pstl/pstl_config.h \ + /usr/include/c++/15/random \ + /usr/include/c++/15/ratio \ + /usr/include/c++/15/semaphore \ + /usr/include/c++/15/set \ + /usr/include/c++/15/shared_mutex \ + /usr/include/c++/15/source_location \ + /usr/include/c++/15/sstream \ + /usr/include/c++/15/stdexcept \ + /usr/include/c++/15/stop_token \ + /usr/include/c++/15/streambuf \ + /usr/include/c++/15/string \ + /usr/include/c++/15/string_view \ + /usr/include/c++/15/system_error \ + /usr/include/c++/15/tr1/bessel_function.tcc \ + /usr/include/c++/15/tr1/beta_function.tcc \ + /usr/include/c++/15/tr1/ell_integral.tcc \ + /usr/include/c++/15/tr1/exp_integral.tcc \ + /usr/include/c++/15/tr1/gamma.tcc \ + /usr/include/c++/15/tr1/hypergeometric.tcc \ + /usr/include/c++/15/tr1/legendre_function.tcc \ + /usr/include/c++/15/tr1/modified_bessel_func.tcc \ + /usr/include/c++/15/tr1/poly_hermite.tcc \ + /usr/include/c++/15/tr1/poly_laguerre.tcc \ + /usr/include/c++/15/tr1/riemann_zeta.tcc \ + /usr/include/c++/15/tr1/special_function_util.h \ + /usr/include/c++/15/tuple \ + /usr/include/c++/15/type_traits \ + /usr/include/c++/15/typeinfo \ + /usr/include/c++/15/unordered_map \ + /usr/include/c++/15/unordered_set \ + /usr/include/c++/15/utility \ + /usr/include/c++/15/variant \ + /usr/include/c++/15/vector \ + /usr/include/c++/15/version \ + /usr/include/c++/15/x86_64-redhat-linux/bits/atomic_word.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/c++allocator.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/c++config.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/c++locale.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/cpu_defines.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/ctype_base.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/ctype_inline.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/error_constants.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/gthr-default.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/gthr.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/messages_members.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/opt_random.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/os_defines.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/time_members.h \ + /usr/include/ctype.h \ + /usr/include/endian.h \ + /usr/include/errno.h \ + /usr/include/features-time64.h \ + /usr/include/features.h \ + /usr/include/gnu/stubs-64.h \ + /usr/include/gnu/stubs.h \ + /usr/include/libintl.h \ + /usr/include/limits.h \ + /usr/include/linux/close_range.h \ + /usr/include/linux/errno.h \ + /usr/include/linux/limits.h \ + /usr/include/linux/posix_types.h \ + /usr/include/linux/sched/types.h \ + /usr/include/linux/stddef.h \ + /usr/include/linux/types.h \ + /usr/include/locale.h \ + /usr/include/pthread.h \ + /usr/include/qt6/QtCore/QAbstractItemModel \ + /usr/include/qt6/QtCore/QDeadlineTimer \ + /usr/include/qt6/QtCore/QEvent \ + /usr/include/qt6/QtCore/QHash \ + /usr/include/qt6/QtCore/QJsonObject \ + /usr/include/qt6/QtCore/QLineF \ + /usr/include/qt6/QtCore/QList \ + /usr/include/qt6/QtCore/QMap \ + /usr/include/qt6/QtCore/QMargins \ + /usr/include/qt6/QtCore/QMetaEnum \ + /usr/include/qt6/QtCore/QMutex \ + /usr/include/qt6/QtCore/QObject \ + /usr/include/qt6/QtCore/QPointF \ + /usr/include/qt6/QtCore/QRect \ + /usr/include/qt6/QtCore/QRectF \ + /usr/include/qt6/QtCore/QSize \ + /usr/include/qt6/QtCore/QSizeF \ + /usr/include/qt6/QtCore/QString \ + /usr/include/qt6/QtCore/QStringList \ + /usr/include/qt6/QtCore/QVariant \ + /usr/include/qt6/QtCore/QtCore \ + /usr/include/qt6/QtCore/QtCoreDepends \ + /usr/include/qt6/QtCore/q17memory.h \ + /usr/include/qt6/QtCore/q20algorithm.h \ + /usr/include/qt6/QtCore/q20chrono.h \ + /usr/include/qt6/QtCore/q20functional.h \ + /usr/include/qt6/QtCore/q20iterator.h \ + /usr/include/qt6/QtCore/q20map.h \ + /usr/include/qt6/QtCore/q20memory.h \ + /usr/include/qt6/QtCore/q20type_traits.h \ + /usr/include/qt6/QtCore/q20utility.h \ + /usr/include/qt6/QtCore/q20vector.h \ + /usr/include/qt6/QtCore/q23functional.h \ + /usr/include/qt6/QtCore/q23type_traits.h \ + /usr/include/qt6/QtCore/q23utility.h \ + /usr/include/qt6/QtCore/q26numeric.h \ + /usr/include/qt6/QtCore/qabstractanimation.h \ + /usr/include/qt6/QtCore/qabstracteventdispatcher.h \ + /usr/include/qt6/QtCore/qabstractitemmodel.h \ + /usr/include/qt6/QtCore/qabstractnativeeventfilter.h \ + /usr/include/qt6/QtCore/qabstractproxymodel.h \ + /usr/include/qt6/QtCore/qalgorithms.h \ + /usr/include/qt6/QtCore/qalloc.h \ + /usr/include/qt6/QtCore/qanimationgroup.h \ + /usr/include/qt6/QtCore/qanystringview.h \ + /usr/include/qt6/QtCore/qapplicationstatic.h \ + /usr/include/qt6/QtCore/qarraydata.h \ + /usr/include/qt6/QtCore/qarraydataops.h \ + /usr/include/qt6/QtCore/qarraydatapointer.h \ + /usr/include/qt6/QtCore/qassert.h \ + /usr/include/qt6/QtCore/qassociativeiterable.h \ + /usr/include/qt6/QtCore/qatomic.h \ + /usr/include/qt6/QtCore/qatomic_cxx11.h \ + /usr/include/qt6/QtCore/qatomicscopedvaluerollback.h \ + /usr/include/qt6/QtCore/qbasicatomic.h \ + /usr/include/qt6/QtCore/qbasictimer.h \ + /usr/include/qt6/QtCore/qbindingstorage.h \ + /usr/include/qt6/QtCore/qbitarray.h \ + /usr/include/qt6/QtCore/qbuffer.h \ + /usr/include/qt6/QtCore/qbytearray.h \ + /usr/include/qt6/QtCore/qbytearrayalgorithms.h \ + /usr/include/qt6/QtCore/qbytearraylist.h \ + /usr/include/qt6/QtCore/qbytearraymatcher.h \ + /usr/include/qt6/QtCore/qbytearrayview.h \ + /usr/include/qt6/QtCore/qcache.h \ + /usr/include/qt6/QtCore/qcalendar.h \ + /usr/include/qt6/QtCore/qcborarray.h \ + /usr/include/qt6/QtCore/qcborcommon.h \ + /usr/include/qt6/QtCore/qcbormap.h \ + /usr/include/qt6/QtCore/qcborstream.h \ + /usr/include/qt6/QtCore/qcborstreamreader.h \ + /usr/include/qt6/QtCore/qcborstreamwriter.h \ + /usr/include/qt6/QtCore/qcborvalue.h \ + /usr/include/qt6/QtCore/qchar.h \ + /usr/include/qt6/QtCore/qcheckedint_impl.h \ + /usr/include/qt6/QtCore/qchronotimer.h \ + /usr/include/qt6/QtCore/qcollator.h \ + /usr/include/qt6/QtCore/qcommandlineoption.h \ + /usr/include/qt6/QtCore/qcommandlineparser.h \ + /usr/include/qt6/QtCore/qcompare.h \ + /usr/include/qt6/QtCore/qcompare_impl.h \ + /usr/include/qt6/QtCore/qcomparehelpers.h \ + /usr/include/qt6/QtCore/qcompilerdetection.h \ + /usr/include/qt6/QtCore/qconcatenatetablesproxymodel.h \ + /usr/include/qt6/QtCore/qconfig-64.h \ + /usr/include/qt6/QtCore/qconfig.h \ + /usr/include/qt6/QtCore/qconstructormacros.h \ + /usr/include/qt6/QtCore/qcontainerfwd.h \ + /usr/include/qt6/QtCore/qcontainerinfo.h \ + /usr/include/qt6/QtCore/qcontainertools_impl.h \ + /usr/include/qt6/QtCore/qcontiguouscache.h \ + /usr/include/qt6/QtCore/qcoreapplication.h \ + /usr/include/qt6/QtCore/qcoreapplication_platform.h \ + /usr/include/qt6/QtCore/qcoreevent.h \ + /usr/include/qt6/QtCore/qcryptographichash.h \ + /usr/include/qt6/QtCore/qdarwinhelpers.h \ + /usr/include/qt6/QtCore/qdatastream.h \ + /usr/include/qt6/QtCore/qdatetime.h \ + /usr/include/qt6/QtCore/qdeadlinetimer.h \ + /usr/include/qt6/QtCore/qdebug.h \ + /usr/include/qt6/QtCore/qdir.h \ + /usr/include/qt6/QtCore/qdiriterator.h \ + /usr/include/qt6/QtCore/qdirlisting.h \ + /usr/include/qt6/QtCore/qeasingcurve.h \ + /usr/include/qt6/QtCore/qelapsedtimer.h \ + /usr/include/qt6/QtCore/qendian.h \ + /usr/include/qt6/QtCore/qeventloop.h \ + /usr/include/qt6/QtCore/qexception.h \ + /usr/include/qt6/QtCore/qexceptionhandling.h \ + /usr/include/qt6/QtCore/qfactoryinterface.h \ + /usr/include/qt6/QtCore/qfile.h \ + /usr/include/qt6/QtCore/qfiledevice.h \ + /usr/include/qt6/QtCore/qfileinfo.h \ + /usr/include/qt6/QtCore/qfileselector.h \ + /usr/include/qt6/QtCore/qfilesystemwatcher.h \ + /usr/include/qt6/QtCore/qflags.h \ + /usr/include/qt6/QtCore/qfloat16.h \ + /usr/include/qt6/QtCore/qforeach.h \ + /usr/include/qt6/QtCore/qfunctionaltools_impl.h \ + /usr/include/qt6/QtCore/qfunctionpointer.h \ + /usr/include/qt6/QtCore/qfuture.h \ + /usr/include/qt6/QtCore/qfuture_impl.h \ + /usr/include/qt6/QtCore/qfutureinterface.h \ + /usr/include/qt6/QtCore/qfuturesynchronizer.h \ + /usr/include/qt6/QtCore/qfuturewatcher.h \ + /usr/include/qt6/QtCore/qgenericatomic.h \ + /usr/include/qt6/QtCore/qglobal.h \ + /usr/include/qt6/QtCore/qglobalstatic.h \ + /usr/include/qt6/QtCore/qhash.h \ + /usr/include/qt6/QtCore/qhashfunctions.h \ + /usr/include/qt6/QtCore/qidentityproxymodel.h \ + /usr/include/qt6/QtCore/qiodevice.h \ + /usr/include/qt6/QtCore/qiodevicebase.h \ + /usr/include/qt6/QtCore/qitemselectionmodel.h \ + /usr/include/qt6/QtCore/qiterable.h \ + /usr/include/qt6/QtCore/qiterator.h \ + /usr/include/qt6/QtCore/qjsonarray.h \ + /usr/include/qt6/QtCore/qjsondocument.h \ + /usr/include/qt6/QtCore/qjsonobject.h \ + /usr/include/qt6/QtCore/qjsonparseerror.h \ + /usr/include/qt6/QtCore/qjsonvalue.h \ + /usr/include/qt6/QtCore/qlatin1stringmatcher.h \ + /usr/include/qt6/QtCore/qlatin1stringview.h \ + /usr/include/qt6/QtCore/qlibrary.h \ + /usr/include/qt6/QtCore/qlibraryinfo.h \ + /usr/include/qt6/QtCore/qline.h \ + /usr/include/qt6/QtCore/qlist.h \ + /usr/include/qt6/QtCore/qlocale.h \ + /usr/include/qt6/QtCore/qlockfile.h \ + /usr/include/qt6/QtCore/qlogging.h \ + /usr/include/qt6/QtCore/qloggingcategory.h \ + /usr/include/qt6/QtCore/qmalloc.h \ + /usr/include/qt6/QtCore/qmap.h \ + /usr/include/qt6/QtCore/qmargins.h \ + /usr/include/qt6/QtCore/qmath.h \ + /usr/include/qt6/QtCore/qmessageauthenticationcode.h \ + /usr/include/qt6/QtCore/qmetacontainer.h \ + /usr/include/qt6/QtCore/qmetaobject.h \ + /usr/include/qt6/QtCore/qmetatype.h \ + /usr/include/qt6/QtCore/qmimedata.h \ + /usr/include/qt6/QtCore/qmimedatabase.h \ + /usr/include/qt6/QtCore/qmimetype.h \ + /usr/include/qt6/QtCore/qminmax.h \ + /usr/include/qt6/QtCore/qmutex.h \ + /usr/include/qt6/QtCore/qnamespace.h \ + /usr/include/qt6/QtCore/qnativeinterface.h \ + /usr/include/qt6/QtCore/qnumeric.h \ + /usr/include/qt6/QtCore/qobject.h \ + /usr/include/qt6/QtCore/qobject_impl.h \ + /usr/include/qt6/QtCore/qobjectcleanuphandler.h \ + /usr/include/qt6/QtCore/qobjectdefs.h \ + /usr/include/qt6/QtCore/qobjectdefs_impl.h \ + /usr/include/qt6/QtCore/qoperatingsystemversion.h \ + /usr/include/qt6/QtCore/qoverload.h \ + /usr/include/qt6/QtCore/qpair.h \ + /usr/include/qt6/QtCore/qparallelanimationgroup.h \ + /usr/include/qt6/QtCore/qpauseanimation.h \ + /usr/include/qt6/QtCore/qpermissions.h \ + /usr/include/qt6/QtCore/qplugin.h \ + /usr/include/qt6/QtCore/qpluginloader.h \ + /usr/include/qt6/QtCore/qpoint.h \ + /usr/include/qt6/QtCore/qpointer.h \ + /usr/include/qt6/QtCore/qprocess.h \ + /usr/include/qt6/QtCore/qprocessordetection.h \ + /usr/include/qt6/QtCore/qpromise.h \ + /usr/include/qt6/QtCore/qproperty.h \ + /usr/include/qt6/QtCore/qpropertyanimation.h \ + /usr/include/qt6/QtCore/qpropertyprivate.h \ + /usr/include/qt6/QtCore/qqueue.h \ + /usr/include/qt6/QtCore/qrandom.h \ + /usr/include/qt6/QtCore/qrangemodel.h \ + /usr/include/qt6/QtCore/qrangemodel_impl.h \ + /usr/include/qt6/QtCore/qreadwritelock.h \ + /usr/include/qt6/QtCore/qrect.h \ + /usr/include/qt6/QtCore/qrefcount.h \ + /usr/include/qt6/QtCore/qregularexpression.h \ + /usr/include/qt6/QtCore/qresource.h \ + /usr/include/qt6/QtCore/qresultstore.h \ + /usr/include/qt6/QtCore/qrunnable.h \ + /usr/include/qt6/QtCore/qsavefile.h \ + /usr/include/qt6/QtCore/qscopedpointer.h \ + /usr/include/qt6/QtCore/qscopedvaluerollback.h \ + /usr/include/qt6/QtCore/qscopeguard.h \ + /usr/include/qt6/QtCore/qsemaphore.h \ + /usr/include/qt6/QtCore/qsequentialanimationgroup.h \ + /usr/include/qt6/QtCore/qsequentialiterable.h \ + /usr/include/qt6/QtCore/qset.h \ + /usr/include/qt6/QtCore/qsettings.h \ + /usr/include/qt6/QtCore/qshareddata.h \ + /usr/include/qt6/QtCore/qshareddata_impl.h \ + /usr/include/qt6/QtCore/qsharedmemory.h \ + /usr/include/qt6/QtCore/qsharedpointer.h \ + /usr/include/qt6/QtCore/qsharedpointer_impl.h \ + /usr/include/qt6/QtCore/qsignalmapper.h \ + /usr/include/qt6/QtCore/qsimd.h \ + /usr/include/qt6/QtCore/qsize.h \ + /usr/include/qt6/QtCore/qsocketnotifier.h \ + /usr/include/qt6/QtCore/qsortfilterproxymodel.h \ + /usr/include/qt6/QtCore/qspan.h \ + /usr/include/qt6/QtCore/qstack.h \ + /usr/include/qt6/QtCore/qstandardpaths.h \ + /usr/include/qt6/QtCore/qstaticlatin1stringmatcher.h \ + /usr/include/qt6/QtCore/qstdlibdetection.h \ + /usr/include/qt6/QtCore/qstorageinfo.h \ + /usr/include/qt6/QtCore/qstring.h \ + /usr/include/qt6/QtCore/qstringalgorithms.h \ + /usr/include/qt6/QtCore/qstringbuilder.h \ + /usr/include/qt6/QtCore/qstringconverter.h \ + /usr/include/qt6/QtCore/qstringconverter_base.h \ + /usr/include/qt6/QtCore/qstringfwd.h \ + /usr/include/qt6/QtCore/qstringlist.h \ + /usr/include/qt6/QtCore/qstringlistmodel.h \ + /usr/include/qt6/QtCore/qstringliteral.h \ + /usr/include/qt6/QtCore/qstringmatcher.h \ + /usr/include/qt6/QtCore/qstringtokenizer.h \ + /usr/include/qt6/QtCore/qstringview.h \ + /usr/include/qt6/QtCore/qswap.h \ + /usr/include/qt6/QtCore/qsysinfo.h \ + /usr/include/qt6/QtCore/qsystemdetection.h \ + /usr/include/qt6/QtCore/qsystemsemaphore.h \ + /usr/include/qt6/QtCore/qtaggedpointer.h \ + /usr/include/qt6/QtCore/qtclasshelpermacros.h \ + /usr/include/qt6/QtCore/qtconfiginclude.h \ + /usr/include/qt6/QtCore/qtconfigmacros.h \ + /usr/include/qt6/QtCore/qtcore-config.h \ + /usr/include/qt6/QtCore/qtcoreexports.h \ + /usr/include/qt6/QtCore/qtcoreglobal.h \ + /usr/include/qt6/QtCore/qtcoreversion.h \ + /usr/include/qt6/QtCore/qtdeprecationdefinitions.h \ + /usr/include/qt6/QtCore/qtdeprecationmarkers.h \ + /usr/include/qt6/QtCore/qtemporarydir.h \ + /usr/include/qt6/QtCore/qtemporaryfile.h \ + /usr/include/qt6/QtCore/qtenvironmentvariables.h \ + /usr/include/qt6/QtCore/qtestsupport_core.h \ + /usr/include/qt6/QtCore/qtextboundaryfinder.h \ + /usr/include/qt6/QtCore/qtextstream.h \ + /usr/include/qt6/QtCore/qtformat_impl.h \ + /usr/include/qt6/QtCore/qthread.h \ + /usr/include/qt6/QtCore/qthreadpool.h \ + /usr/include/qt6/QtCore/qthreadstorage.h \ + /usr/include/qt6/QtCore/qtimeline.h \ + /usr/include/qt6/QtCore/qtimer.h \ + /usr/include/qt6/QtCore/qtimezone.h \ + /usr/include/qt6/QtCore/qtipccommon.h \ + /usr/include/qt6/QtCore/qtmetamacros.h \ + /usr/include/qt6/QtCore/qtmocconstants.h \ + /usr/include/qt6/QtCore/qtnoop.h \ + /usr/include/qt6/QtCore/qtpreprocessorsupport.h \ + /usr/include/qt6/QtCore/qtranslator.h \ + /usr/include/qt6/QtCore/qtransposeproxymodel.h \ + /usr/include/qt6/QtCore/qtresource.h \ + /usr/include/qt6/QtCore/qtsan_impl.h \ + /usr/include/qt6/QtCore/qtsymbolmacros.h \ + /usr/include/qt6/QtCore/qttranslation.h \ + /usr/include/qt6/QtCore/qttypetraits.h \ + /usr/include/qt6/QtCore/qtversion.h \ + /usr/include/qt6/QtCore/qtversionchecks.h \ + /usr/include/qt6/QtCore/qtypeinfo.h \ + /usr/include/qt6/QtCore/qtyperevision.h \ + /usr/include/qt6/QtCore/qtypes.h \ + /usr/include/qt6/QtCore/qurl.h \ + /usr/include/qt6/QtCore/qurlquery.h \ + /usr/include/qt6/QtCore/qutf8stringview.h \ + /usr/include/qt6/QtCore/quuid.h \ + /usr/include/qt6/QtCore/qvariant.h \ + /usr/include/qt6/QtCore/qvariantanimation.h \ + /usr/include/qt6/QtCore/qvarianthash.h \ + /usr/include/qt6/QtCore/qvariantlist.h \ + /usr/include/qt6/QtCore/qvariantmap.h \ + /usr/include/qt6/QtCore/qvarlengtharray.h \ + /usr/include/qt6/QtCore/qvector.h \ + /usr/include/qt6/QtCore/qversionnumber.h \ + /usr/include/qt6/QtCore/qversiontagging.h \ + /usr/include/qt6/QtCore/qwaitcondition.h \ + /usr/include/qt6/QtCore/qwineventnotifier.h \ + /usr/include/qt6/QtCore/qxmlstream.h \ + /usr/include/qt6/QtCore/qxpfunctional.h \ + /usr/include/qt6/QtCore/qxptype_traits.h \ + /usr/include/qt6/QtCore/qyieldcpu.h \ + /usr/include/qt6/QtGui/QBrush \ + /usr/include/qt6/QtGui/QColor \ + /usr/include/qt6/QtGui/QFont \ + /usr/include/qt6/QtGui/QIcon \ + /usr/include/qt6/QtGui/QImage \ + /usr/include/qt6/QtGui/QPainter \ + /usr/include/qt6/QtGui/QPainterPath \ + /usr/include/qt6/QtGui/QPixmap \ + /usr/include/qt6/QtGui/QTransform \ + /usr/include/qt6/QtGui/qaction.h \ + /usr/include/qt6/QtGui/qbitmap.h \ + /usr/include/qt6/QtGui/qbrush.h \ + /usr/include/qt6/QtGui/qcolor.h \ + /usr/include/qt6/QtGui/qcursor.h \ + /usr/include/qt6/QtGui/qevent.h \ + /usr/include/qt6/QtGui/qeventpoint.h \ + /usr/include/qt6/QtGui/qfont.h \ + /usr/include/qt6/QtGui/qfontinfo.h \ + /usr/include/qt6/QtGui/qfontmetrics.h \ + /usr/include/qt6/QtGui/qfontvariableaxis.h \ + /usr/include/qt6/QtGui/qguiapplication.h \ + /usr/include/qt6/QtGui/qguiapplication_platform.h \ + /usr/include/qt6/QtGui/qicon.h \ + /usr/include/qt6/QtGui/qimage.h \ + /usr/include/qt6/QtGui/qinputdevice.h \ + /usr/include/qt6/QtGui/qinputmethod.h \ + /usr/include/qt6/QtGui/qkeysequence.h \ + /usr/include/qt6/QtGui/qpaintdevice.h \ + /usr/include/qt6/QtGui/qpainter.h \ + /usr/include/qt6/QtGui/qpainterpath.h \ + /usr/include/qt6/QtGui/qpalette.h \ + /usr/include/qt6/QtGui/qpen.h \ + /usr/include/qt6/QtGui/qpixelformat.h \ + /usr/include/qt6/QtGui/qpixmap.h \ + /usr/include/qt6/QtGui/qpointingdevice.h \ + /usr/include/qt6/QtGui/qpolygon.h \ + /usr/include/qt6/QtGui/qregion.h \ + /usr/include/qt6/QtGui/qrgb.h \ + /usr/include/qt6/QtGui/qrgba64.h \ + /usr/include/qt6/QtGui/qscreen.h \ + /usr/include/qt6/QtGui/qscreen_platform.h \ + /usr/include/qt6/QtGui/qsurface.h \ + /usr/include/qt6/QtGui/qsurfaceformat.h \ + /usr/include/qt6/QtGui/qtestsupport_gui.h \ + /usr/include/qt6/QtGui/qtextoption.h \ + /usr/include/qt6/QtGui/qtgui-config.h \ + /usr/include/qt6/QtGui/qtguiexports.h \ + /usr/include/qt6/QtGui/qtguiglobal.h \ + /usr/include/qt6/QtGui/qtransform.h \ + /usr/include/qt6/QtGui/qvector2d.h \ + /usr/include/qt6/QtGui/qvector3d.h \ + /usr/include/qt6/QtGui/qvector4d.h \ + /usr/include/qt6/QtGui/qvectornd.h \ + /usr/include/qt6/QtGui/qwindow.h \ + /usr/include/qt6/QtGui/qwindowdefs.h \ + /usr/include/qt6/QtTest/QtTest \ + /usr/include/qt6/QtTest/QtTestDepends \ + /usr/include/qt6/QtTest/qabstractitemmodeltester.h \ + /usr/include/qt6/QtTest/qbenchmark.h \ + /usr/include/qt6/QtTest/qbenchmarkmetric.h \ + /usr/include/qt6/QtTest/qsignalspy.h \ + /usr/include/qt6/QtTest/qtest.h \ + /usr/include/qt6/QtTest/qtest_gui.h \ + /usr/include/qt6/QtTest/qtest_widgets.h \ + /usr/include/qt6/QtTest/qtestassert.h \ + /usr/include/qt6/QtTest/qtestcase.h \ + /usr/include/qt6/QtTest/qtestdata.h \ + /usr/include/qt6/QtTest/qtestevent.h \ + /usr/include/qt6/QtTest/qtesteventloop.h \ + /usr/include/qt6/QtTest/qtestkeyboard.h \ + /usr/include/qt6/QtTest/qtestmouse.h \ + /usr/include/qt6/QtTest/qtestspontaneevent.h \ + /usr/include/qt6/QtTest/qtestsystem.h \ + /usr/include/qt6/QtTest/qtesttostring.h \ + /usr/include/qt6/QtTest/qtesttouch.h \ + /usr/include/qt6/QtTest/qtestwheel.h \ + /usr/include/qt6/QtTest/qttestexports.h \ + /usr/include/qt6/QtTest/qttestglobal.h \ + /usr/include/qt6/QtTest/qttestlib-config.h \ + /usr/include/qt6/QtTest/qttestversion.h \ + /usr/include/qt6/QtWidgets/QGraphicsItem \ + /usr/include/qt6/QtWidgets/QGraphicsSceneMouseEvent \ + /usr/include/qt6/QtWidgets/QSizePolicy \ + /usr/include/qt6/QtWidgets/qapplication.h \ + /usr/include/qt6/QtWidgets/qgraphicsitem.h \ + /usr/include/qt6/QtWidgets/qgraphicssceneevent.h \ + /usr/include/qt6/QtWidgets/qsizepolicy.h \ + /usr/include/qt6/QtWidgets/qtestsupport_widgets.h \ + /usr/include/qt6/QtWidgets/qtwidgets-config.h \ + /usr/include/qt6/QtWidgets/qtwidgetsexports.h \ + /usr/include/qt6/QtWidgets/qtwidgetsglobal.h \ + /usr/include/qt6/QtWidgets/qwidget.h \ + /usr/include/sched.h \ + /usr/include/semaphore.h \ + /usr/include/stdc-predef.h \ + /usr/include/stdint.h \ + /usr/include/stdio.h \ + /usr/include/stdlib.h \ + /usr/include/string.h \ + /usr/include/strings.h \ + /usr/include/sys/cdefs.h \ + /usr/include/sys/select.h \ + /usr/include/sys/single_threaded.h \ + /usr/include/sys/syscall.h \ + /usr/include/sys/time.h \ + /usr/include/sys/types.h \ + /usr/include/syscall.h \ + /usr/include/time.h \ + /usr/include/unistd.h \ + /usr/include/wchar.h \ + /usr/include/wctype.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/adxintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/amxavx512intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/amxbf16intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/amxcomplexintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/amxfp16intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/amxfp8intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/amxint8intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/amxmovrsintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/amxtf32intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/amxtileintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/amxtransposeintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2-512bf16intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2-512convertintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2-512mediaintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2-512minmaxintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2-512satcvtintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2bf16intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2convertintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2copyintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2mediaintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2minmaxintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2satcvtintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx2intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512bf16intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512bf16vlintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512bitalgintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512bitalgvlintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512bwintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512cdintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512dqintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512fintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512fp16intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512fp16vlintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512ifmaintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512ifmavlintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vbmi2intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vbmi2vlintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vbmiintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vbmivlintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vlbwintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vldqintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vlintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vnniintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vnnivlintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vp2intersectintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vp2intersectvlintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vpopcntdqintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vpopcntdqvlintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avxifmaintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avxintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avxneconvertintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avxvnniint16intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avxvnniint8intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avxvnniintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/bmi2intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/bmiintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/cetintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/cldemoteintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/clflushoptintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/clwbintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/clzerointrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/cmpccxaddintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/emmintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/enqcmdintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/f16cintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/fmaintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/fxsrintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/gfniintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/hresetintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/ia32intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/immintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/keylockerintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/lwpintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/lzcntintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/mm_malloc.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/mmintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/movdirintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/movrsintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/mwaitintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/mwaitxintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/pconfigintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/pkuintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/pmmintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/popcntintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/prfchiintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/prfchwintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/raointintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/rdseedintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/rtmintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/serializeintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/sgxintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/sha512intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/shaintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/sm3intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/sm4intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/smmintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/stdarg.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/stdbool.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/stddef.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/tbmintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/tmmintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/tsxldtrkintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/uintrintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/usermsrintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/vaesintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/vpclmulqdqintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/waitpkgintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/wbnoinvdintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/wmmintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/x86gprintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/xmmintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/xsavecintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/xsaveintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/xsaveoptintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/xsavesintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/xtestintrin.h \ + /usr/lib64/cmake/Qt6/Qt6Config.cmake \ + /usr/lib64/cmake/Qt6/Qt6ConfigExtras.cmake \ + /usr/lib64/cmake/Qt6/Qt6ConfigVersion.cmake \ + /usr/lib64/cmake/Qt6/Qt6ConfigVersionImpl.cmake \ + /usr/lib64/cmake/Qt6/Qt6Dependencies.cmake \ + /usr/lib64/cmake/Qt6/Qt6Targets.cmake \ + /usr/lib64/cmake/Qt6/Qt6VersionlessAliasTargets.cmake \ + /usr/lib64/cmake/Qt6/QtFeature.cmake \ + /usr/lib64/cmake/Qt6/QtFeatureCommon.cmake \ + /usr/lib64/cmake/Qt6/QtInstallPaths.cmake \ + /usr/lib64/cmake/Qt6/QtPublicAndroidHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicAppleHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicCMakeEarlyPolicyHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicCMakeHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicCMakeVersionHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicDependencyHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicExternalProjectHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicFinalizerHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicFindPackageHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicGitHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicPluginHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicPluginHelpers_v2.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomAttributionHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomBuildToolHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomCommonGenerationHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomCpeHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomCycloneDXHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomDepHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomDocumentNamespaceHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomExternalReferenceHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomFileHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomGenerationCycloneDXHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomGenerationHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomLicenseHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomOpsHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomPurlHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomPythonHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomQtEntityHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomRelationshipHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomSystemDepHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicTargetHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicTestHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicToolHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicWalkLibsHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicWindowsHelpers.cmake \ + /usr/lib64/cmake/Qt6Test/Qt6TestAdditionalTargetInfo.cmake \ + /usr/lib64/cmake/Qt6Test/Qt6TestConfig.cmake \ + /usr/lib64/cmake/Qt6Test/Qt6TestConfigVersion.cmake \ + /usr/lib64/cmake/Qt6Test/Qt6TestConfigVersionImpl.cmake \ + /usr/lib64/cmake/Qt6Test/Qt6TestDependencies.cmake \ + /usr/lib64/cmake/Qt6Test/Qt6TestTargets-relwithdebinfo.cmake \ + /usr/lib64/cmake/Qt6Test/Qt6TestTargets.cmake \ + /usr/lib64/cmake/Qt6Test/Qt6TestVersionlessAliasTargets.cmake \ + /usr/lib64/cmake/Qt6Test/QtTestProperties.cmake \ + /usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake \ + /usr/share/cmake/Modules/CheckCXXCompilerFlag.cmake \ + /usr/bin/cmake diff --git a/build-linux/tests/test_annotation_items_autogen/include/test_annotation_items.moc b/build-linux/tests/test_annotation_items_autogen/include/test_annotation_items.moc new file mode 100644 index 00000000..846ace25 --- /dev/null +++ b/build-linux/tests/test_annotation_items_autogen/include/test_annotation_items.moc @@ -0,0 +1,120 @@ +/**************************************************************************** +** Meta object code from reading C++ file 'test_annotation_items.cpp' +** +** Created by: The Qt Meta Object Compiler version 69 (Qt 6.10.3) +** +** WARNING! All changes made in this file will be lost! +*****************************************************************************/ + +#include + +#include + +#include + + +#include +#if !defined(Q_MOC_OUTPUT_REVISION) +#error "The header file 'test_annotation_items.cpp' doesn't include ." +#elif Q_MOC_OUTPUT_REVISION != 69 +#error "This file was generated using the moc from 6.10.3. It" +#error "cannot be used with the include files from this version of Qt." +#error "(The moc has changed too much.)" +#endif + +#ifndef Q_CONSTINIT +#define Q_CONSTINIT +#endif + +QT_WARNING_PUSH +QT_WARNING_DISABLE_DEPRECATED +QT_WARNING_DISABLE_GCC("-Wuseless-cast") +namespace { +struct qt_meta_tag_ZN19TestAnnotationItemsE_t {}; +} // unnamed namespace + +template <> constexpr inline auto TestAnnotationItems::qt_create_metaobjectdata() +{ + namespace QMC = QtMocConstants; + QtMocHelpers::StringRefStorage qt_stringData { + "TestAnnotationItems", + "serializesMovedTextAtScenePosition", + "", + "serializesMovedRectangleAtScenePosition", + "serializesMovedArrowAtScenePosition", + "roundTripsMovedFreehandPoints" + }; + + QtMocHelpers::UintData qt_methods { + // Slot 'serializesMovedTextAtScenePosition' + QtMocHelpers::SlotData(1, 2, QMC::AccessPrivate, QMetaType::Void), + // Slot 'serializesMovedRectangleAtScenePosition' + QtMocHelpers::SlotData(3, 2, QMC::AccessPrivate, QMetaType::Void), + // Slot 'serializesMovedArrowAtScenePosition' + QtMocHelpers::SlotData(4, 2, QMC::AccessPrivate, QMetaType::Void), + // Slot 'roundTripsMovedFreehandPoints' + QtMocHelpers::SlotData(5, 2, QMC::AccessPrivate, QMetaType::Void), + }; + QtMocHelpers::UintData qt_properties { + }; + QtMocHelpers::UintData qt_enums { + }; + return QtMocHelpers::metaObjectData(QMC::MetaObjectFlag{}, qt_stringData, + qt_methods, qt_properties, qt_enums); +} +Q_CONSTINIT const QMetaObject TestAnnotationItems::staticMetaObject = { { + QMetaObject::SuperData::link(), + qt_staticMetaObjectStaticContent.stringdata, + qt_staticMetaObjectStaticContent.data, + qt_static_metacall, + nullptr, + qt_staticMetaObjectRelocatingContent.metaTypes, + nullptr +} }; + +void TestAnnotationItems::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) +{ + auto *_t = static_cast(_o); + if (_c == QMetaObject::InvokeMetaMethod) { + switch (_id) { + case 0: _t->serializesMovedTextAtScenePosition(); break; + case 1: _t->serializesMovedRectangleAtScenePosition(); break; + case 2: _t->serializesMovedArrowAtScenePosition(); break; + case 3: _t->roundTripsMovedFreehandPoints(); break; + default: ; + } + } + (void)_a; +} + +const QMetaObject *TestAnnotationItems::metaObject() const +{ + return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject; +} + +void *TestAnnotationItems::qt_metacast(const char *_clname) +{ + if (!_clname) return nullptr; + if (!strcmp(_clname, qt_staticMetaObjectStaticContent.strings)) + return static_cast(this); + return QObject::qt_metacast(_clname); +} + +int TestAnnotationItems::qt_metacall(QMetaObject::Call _c, int _id, void **_a) +{ + _id = QObject::qt_metacall(_c, _id, _a); + if (_id < 0) + return _id; + if (_c == QMetaObject::InvokeMetaMethod) { + if (_id < 4) + qt_static_metacall(this, _c, _id, _a); + _id -= 4; + } + if (_c == QMetaObject::RegisterMethodArgumentMetaType) { + if (_id < 4) + *reinterpret_cast(_a[0]) = QMetaType(); + _id -= 4; + } + return _id; +} +QT_WARNING_POP diff --git a/build-linux/tests/test_annotation_items_autogen/moc_predefs.h b/build-linux/tests/test_annotation_items_autogen/moc_predefs.h new file mode 100644 index 00000000..0aeb7593 --- /dev/null +++ b/build-linux/tests/test_annotation_items_autogen/moc_predefs.h @@ -0,0 +1,504 @@ +#define __DBL_MIN_EXP__ (-1021) +#define __LDBL_MANT_DIG__ 64 +#define __cpp_nontype_template_parameter_auto 201606L +#define __UINT_LEAST16_MAX__ 0xffff +#define __FLT16_HAS_QUIET_NAN__ 1 +#define __ATOMIC_ACQUIRE 2 +#define QT_TESTCASE_BUILDDIR "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests" +#define __FLT128_MAX_10_EXP__ 4932 +#define __FLT_MIN__ 1.17549435082228750796873653722224568e-38F +#define __GCC_IEC_559_COMPLEX 2 +#define __cpp_aggregate_nsdmi 201304L +#define __UINT_LEAST8_TYPE__ unsigned char +#define __SIZEOF_FLOAT80__ 16 +#define __BFLT16_DENORM_MIN__ 9.18354961579912115600575419704879436e-41BF16 +#define __cpp_impl_three_way_comparison 201907L +#define __INTMAX_C(c) c ## L +#define __CHAR_BIT__ 8 +#define __cpp_designated_initializers 201707L +#define __UINT8_MAX__ 0xff +#define __SCHAR_WIDTH__ 8 +#define __WINT_MAX__ 0xffffffffU +#define __FLT32_MIN_EXP__ (-125) +#define __cpp_static_assert 201411L +#define __BFLT16_MIN_10_EXP__ (-37) +#define __cpp_inheriting_constructors 201511L +#define QT_GUI_LIB 1 +#define __ORDER_LITTLE_ENDIAN__ 1234 +#define __WCHAR_MAX__ 0x7fffffff +#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_2 1 +#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_4 1 +#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_8 1 +#define __GCC_ATOMIC_CHAR_LOCK_FREE 2 +#define __GCC_IEC_559 2 +#define __FLT32X_DECIMAL_DIG__ 17 +#define TLRENDER_OIIO 1 +#define __FLT_EVAL_METHOD__ 0 +#define __cpp_binary_literals 201304L +#define __FLT64_DECIMAL_DIG__ 17 +#define __cpp_noexcept_function_type 201510L +#define __GCC_ATOMIC_CHAR32_T_LOCK_FREE 2 +#define __cpp_variadic_templates 200704L +#define __UINT_FAST64_MAX__ 0xffffffffffffffffUL +#define __SIG_ATOMIC_TYPE__ int +#define __DBL_MIN_10_EXP__ (-307) +#define __FINITE_MATH_ONLY__ 0 +#define __cpp_variable_templates 201304L +#define __FLT32X_MAX_EXP__ 1024 +#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_1 1 +#define __FLT32_HAS_DENORM__ 1 +#define __UINT_FAST8_MAX__ 0xff +#define __cpp_rvalue_reference 200610L +#define __cpp_nested_namespace_definitions 201411L +#define __DEC64_MAX_EXP__ 385 +#define __INT8_C(c) c +#define __LDBL_HAS_INFINITY__ 1 +#define __INT_LEAST8_WIDTH__ 8 +#define __cpp_variadic_using 201611L +#define __UINT_LEAST64_MAX__ 0xffffffffffffffffUL +#define __INT_LEAST8_MAX__ 0x7f +#define __cpp_attributes 200809L +#define __cpp_capture_star_this 201603L +#define __SHRT_MAX__ 0x7fff +#define __LDBL_MAX__ 1.18973149535723176502126385303097021e+4932L +#define __cpp_impl_coroutine 201902L +#define __FLT64X_MAX_10_EXP__ 4932 +#define __cpp_if_constexpr 201606L +#define __BFLT16_MAX_10_EXP__ 38 +#define __BFLT16_MAX_EXP__ 128 +#define __LDBL_IS_IEC_60559__ 1 +#define QT_NO_DEBUG 1 +#define __FLT64X_HAS_QUIET_NAN__ 1 +#define QT_TESTLIB_LIB 1 +#define TLRENDER_SDL2 1 +#define __UINT_LEAST8_MAX__ 0xff +#define __GCC_ATOMIC_BOOL_LOCK_FREE 2 +#define __FLT128_DENORM_MIN__ 6.47517511943802511092443895822764655e-4966F128 +#define __UINTMAX_TYPE__ long unsigned int +#define __cpp_nsdmi 200809L +#define __BFLT16_DECIMAL_DIG__ 4 +#define __linux 1 +#define __DEC32_EPSILON__ 1E-6DF +#define __FLT_EVAL_METHOD_TS_18661_3__ 0 +#define __UINT32_MAX__ 0xffffffffU +#define __GXX_EXPERIMENTAL_CXX0X__ 1 +#define __DBL_DENORM_MIN__ double(4.94065645841246544176568792868221372e-324L) +#define __FLT128_MIN_EXP__ (-16381) +#define __DEC64X_MAX_EXP__ 6145 +#define __WINT_MIN__ 0U +#define __FLT128_MIN_10_EXP__ (-4931) +#define __FLT32X_IS_IEC_60559__ 1 +#define __INT_LEAST16_WIDTH__ 16 +#define __SCHAR_MAX__ 0x7f +#define __FLT128_MANT_DIG__ 113 +#define __WCHAR_MIN__ (-__WCHAR_MAX__ - 1) +#define __INT64_C(c) c ## L +#define __cpp_impl_destroying_delete 201806L +#define __GCC_ATOMIC_POINTER_LOCK_FREE 2 +#define TLRENDER_JPEG 1 +#define __ATOMIC_SEQ_CST 5 +#define __unix 1 +#define __INT_LEAST64_MAX__ 0x7fffffffffffffffL +#define __FLT32X_MANT_DIG__ 53 +#define __GCC_ATOMIC_CHAR16_T_LOCK_FREE 2 +#define __cpp_aligned_new 201606L +#define __FLT32_MAX_10_EXP__ 38 +#define __FLT64X_EPSILON__ 1.08420217248550443400745280086994171e-19F64x +#define __STDC_HOSTED__ 1 +#define __DEC64_MIN_EXP__ (-382) +#define TLRENDER_PNG 1 +#define __cpp_decltype_auto 201304L +#define __DBL_DIG__ 15 +#define __STDC_EMBED_EMPTY__ 2 +#define __FLT_EPSILON__ 1.19209289550781250000000000000000000e-7F +#define __cpp_char8_t 202207L +#define __GXX_WEAK__ 1 +#define __SHRT_WIDTH__ 16 +#define __FLT32_IS_IEC_60559__ 1 +#define __LDBL_MIN__ 3.36210314311209350626267781732175260e-4932L +#define __DBL_IS_IEC_60559__ 1 +#define __DEC32_MAX__ 9.999999E96DF +#define __CHAR8_TYPE__ unsigned char +#define __cpp_threadsafe_static_init 200806L +#define __cpp_enumerator_attributes 201411L +#define TLRENDER_EXR 1 +#define __FLT64X_DENORM_MIN__ 3.64519953188247460252840593361941982e-4951F64x +#define __FLT32X_HAS_INFINITY__ 1 +#define __unix__ 1 +#define __INT_WIDTH__ 32 +#define __STDC_IEC_559__ 1 +#define __STDC_ISO_10646__ 201706L +#define __GCC_ATOMIC_CHAR8_T_LOCK_FREE 2 +#define __DECIMAL_DIG__ 21 +#define __STDC_IEC_559_COMPLEX__ 1 +#define __FLT64_EPSILON__ 2.22044604925031308084726333618164062e-16F64 +#define __gnu_linux__ 1 +#define __INT16_MAX__ 0x7fff +#define __FLT64_MIN_EXP__ (-1021) +#define __cpp_using_enum 201907L +#define __DEC64X_EPSILON__ 1E-33D64x +#define __FLT64X_MIN_10_EXP__ (-4931) +#define __LDBL_HAS_QUIET_NAN__ 1 +#define __FLT16_MIN_EXP__ (-13) +#define __FLT64_MANT_DIG__ 53 +#define __cpp_consteval 202211L +#define __FLT64X_MANT_DIG__ 64 +#define FTK_API_GL_4_1 1 +#define __BFLT16_DIG__ 2 +#define __GNUC__ 15 +#define __GXX_RTTI 1 +#define TLRENDER_FFMPEG_PLUGIN 1 +#define __MMX__ 1 +#define __FLT_HAS_DENORM__ 1 +#define __SIZEOF_LONG_DOUBLE__ 16 +#define __BIGGEST_ALIGNMENT__ 16 +#define __STDC_UTF_16__ 1 +#define __FLT64_MAX_10_EXP__ 308 +#define __BFLT16_IS_IEC_60559__ 0 +#define __FLT16_MAX_10_EXP__ 4 +#define __cpp_delegating_constructors 200604L +#define __DBL_MAX__ double(1.79769313486231570814527423731704357e+308L) +#define __cpp_raw_strings 200710L +#define __INT_FAST32_MAX__ 0x7fffffffffffffffL +#define __DBL_HAS_INFINITY__ 1 +#define __INT64_MAX__ 0x7fffffffffffffffL +#define __SIZEOF_FLOAT__ 4 +#define __HAVE_SPECULATION_SAFE_VALUE 1 +#define __cpp_fold_expressions 201603L +#define __DEC32_MIN_EXP__ (-94) +#define __INTPTR_WIDTH__ 64 +#define __UINT_LEAST32_MAX__ 0xffffffffU +#define __FLT32X_HAS_DENORM__ 1 +#define __INT_FAST16_TYPE__ long int +#define __MMX_WITH_SSE__ 1 +#define __LDBL_HAS_DENORM__ 1 +#define QT_WIDGETS_LIB 1 +#define __SEG_GS 1 +#define __BFLT16_EPSILON__ 7.81250000000000000000000000000000000e-3BF16 +#define __cplusplus 202002L +#define __cpp_ref_qualifiers 200710L +#define __DEC32_MIN__ 1E-95DF +#define __DEPRECATED 1 +#define __cpp_rvalue_references 200610L +#define __DBL_MAX_EXP__ 1024 +#define __WCHAR_WIDTH__ 32 +#define __FLT32_MAX__ 3.40282346638528859811704183484516925e+38F32 +#define __DEC128_EPSILON__ 1E-33DL +#define __FLT16_DECIMAL_DIG__ 5 +#define __SSE2_MATH__ 1 +#define __ATOMIC_HLE_RELEASE 131072 +#define __PTRDIFF_MAX__ 0x7fffffffffffffffL +#define __amd64 1 +#define __DEC64X_MAX__ 9.999999999999999999999999999999999E6144D64x +#define __ATOMIC_HLE_ACQUIRE 65536 +#define __GNUG__ 15 +#define __LONG_LONG_MAX__ 0x7fffffffffffffffLL +#define __SIZEOF_SIZE_T__ 8 +#define __BFLT16_HAS_INFINITY__ 1 +#define __FLT64X_MIN_EXP__ (-16381) +#define __SIZEOF_WINT_T__ 4 +#define __FLT32X_DIG__ 15 +#define __LONG_LONG_WIDTH__ 64 +#define QT_TESTCASE_SOURCEDIR "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests" +#define __cpp_initializer_lists 200806L +#define __FLT32_MAX_EXP__ 128 +#define ABI_ID "ELF" +#define __cpp_hex_float 201603L +#define __GXX_ABI_VERSION 1020 +#define __FLT_MIN_EXP__ (-125) +#define __GCC_HAVE_DWARF2_CFI_ASM 1 +#define TLRENDER_OCIO 1 +#define __x86_64 1 +#define __cpp_lambdas 200907L +#define __INT_FAST64_TYPE__ long int +#define __BFLT16_MAX__ 3.38953138925153547590470800371487867e+38BF16 +#define __FLT64_DENORM_MIN__ 4.94065645841246544176568792868221372e-324F64 +#define __cpp_template_auto 201606L +#define __FLT16_DENORM_MIN__ 5.96046447753906250000000000000000000e-8F16 +#define __FLT128_EPSILON__ 1.92592994438723585305597794258492732e-34F128 +#define __FLT64X_NORM_MAX__ 1.18973149535723176502126385303097021e+4932F64x +#define __SIZEOF_POINTER__ 8 +#define __SIZE_TYPE__ long unsigned int +#define __LP64__ 1 +#define __DBL_HAS_QUIET_NAN__ 1 +#define __FLT32X_EPSILON__ 2.22044604925031308084726333618164062e-16F32x +#define __LDBL_MAX_EXP__ 16384 +#define __DECIMAL_BID_FORMAT__ 1 +#define __FLT64_MIN_10_EXP__ (-307) +#define __FLT16_MIN_10_EXP__ (-4) +#define __FLT64X_DECIMAL_DIG__ 21 +#define __DEC128_MIN__ 1E-6143DL +#define __REGISTER_PREFIX__ +#define __UINT16_MAX__ 0xffff +#define __FLT128_HAS_INFINITY__ 1 +#define __FLT32_MIN__ 1.17549435082228750796873653722224568e-38F32 +#define __UINT8_TYPE__ unsigned char +#define __FLT_DIG__ 6 +#define __NO_INLINE__ 1 +#define __DEC_EVAL_METHOD__ 2 +#define __FLT_MANT_DIG__ 24 +#define __LDBL_DECIMAL_DIG__ 21 +#define __VERSION__ "15.2.1 20260123 (Red Hat 15.2.1-7)" +#define __UINT64_C(c) c ## UL +#define __cpp_unicode_characters 201411L +#define __DEC64X_MIN__ 1E-6143D64x +#define _STDC_PREDEF_H 1 +#define __INT_LEAST32_MAX__ 0x7fffffff +#define __GCC_ATOMIC_INT_LOCK_FREE 2 +#define __FLT128_MAX_EXP__ 16384 +#define __cpp_conditional_explicit 201806L +#define __FLT32_MANT_DIG__ 24 +#define __cpp_decltype 200707L +#define __FLOAT_WORD_ORDER__ __ORDER_LITTLE_ENDIAN__ +#define SIZEOF_DPTR (sizeof(void*)) +#define __FLT32X_MIN_EXP__ (-1021) +#define __cpp_aggregate_paren_init 201902L +#define __STDC_IEC_60559_COMPLEX__ 201404L +#define __cpp_aggregate_bases 201603L +#define __BFLT16_MIN__ 1.17549435082228750796873653722224568e-38BF16 +#define __FLT128_HAS_DENORM__ 1 +#define __FLT32_DECIMAL_DIG__ 9 +#define __FLT128_DIG__ 33 +#define __INT32_C(c) c +#define __DEC64_EPSILON__ 1E-15DD +#define __ORDER_PDP_ENDIAN__ 3412 +#define __DEC128_MIN_EXP__ (-6142) +#define __DEC128_MAX__ 9.999999999999999999999999999999999E6144DL +#define __cpp_constinit 201907L +#define __INT_FAST32_TYPE__ long int +#define __UINT_LEAST16_TYPE__ short unsigned int +#define __DEC64X_MANT_DIG__ 34 +#define __DEC128_MAX_EXP__ 6145 +#define unix 1 +#define __DBL_HAS_DENORM__ 1 +#define __cpp_rtti 199711L +#define __UINT64_MAX__ 0xffffffffffffffffUL +#define __FLT_IS_IEC_60559__ 1 +#define __GNUC_WIDE_EXECUTION_CHARSET_NAME "UTF-32LE" +#define __FLT64X_DIG__ 18 +#define __INT8_TYPE__ signed char +#define __cpp_digit_separators 201309L +#define __ELF__ 1 +#define __GCC_ASM_FLAG_OUTPUTS__ 1 +#define __UINT32_TYPE__ unsigned int +#define __BFLT16_HAS_QUIET_NAN__ 1 +#define __FLT_RADIX__ 2 +#define __INT_LEAST16_TYPE__ short int +#define __LDBL_EPSILON__ 1.08420217248550443400745280086994171e-19L +#define __UINTMAX_C(c) c ## UL +#define __GNUC_RH_RELEASE__ 7 +#define __FLT16_DIG__ 3 +#define __k8 1 +#define __FLT32X_MIN__ 2.22507385850720138309023271733240406e-308F32x +#define __SIG_ATOMIC_MAX__ 0x7fffffff +#define __cpp_constexpr 202002L +#define __GCC_ATOMIC_WCHAR_T_LOCK_FREE 2 +#define __USER_LABEL_PREFIX__ +#define __STDC_IEC_60559_BFP__ 201404L +#define __SIZEOF_PTRDIFF_T__ 8 +#define __FLT64X_HAS_INFINITY__ 1 +#define __SIZEOF_LONG__ 8 +#define __LDBL_DIG__ 18 +#define __FLT64_IS_IEC_60559__ 1 +#define __x86_64__ 1 +#define __FLT16_IS_IEC_60559__ 1 +#define __FLT16_MAX_EXP__ 16 +#define __DEC32_SUBNORMAL_MIN__ 0.000001E-95DF +#define __STDC_EMBED_FOUND__ 1 +#define __INT_FAST16_MAX__ 0x7fffffffffffffffL +#define __GCC_CONSTRUCTIVE_SIZE 64 +#define __FLT64_DIG__ 15 +#define __UINT_FAST32_MAX__ 0xffffffffffffffffUL +#define __UINT_LEAST64_TYPE__ long unsigned int +#define __FLT16_EPSILON__ 9.76562500000000000000000000000000000e-4F16 +#define __FLT_HAS_QUIET_NAN__ 1 +#define __FLT_MAX_10_EXP__ 38 +#define __FLT64X_HAS_DENORM__ 1 +#define __DEC128_SUBNORMAL_MIN__ 0.000000000000000000000000000000001E-6143DL +#define __FLT_HAS_INFINITY__ 1 +#define __GNUC_EXECUTION_CHARSET_NAME "UTF-8" +#define __cpp_unicode_literals 200710L +#define __UINT_FAST16_TYPE__ long unsigned int +#define __DEC64_MAX__ 9.999999999999999E384DD +#define __STDC_EMBED_NOT_FOUND__ 0 +#define __INT_FAST32_WIDTH__ 64 +#define __CHAR16_TYPE__ short unsigned int +#define __PRAGMA_REDEFINE_EXTNAME 1 +#define __DEC64X_SUBNORMAL_MIN__ 0.000000000000000000000000000000001E-6143D64x +#define __SIZE_WIDTH__ 64 +#define __SEG_FS 1 +#define __INT_LEAST16_MAX__ 0x7fff +#define __FLT16_NORM_MAX__ 6.55040000000000000000000000000000000e+4F16 +#define __DEC64_MANT_DIG__ 16 +#define __FLT32_DENORM_MIN__ 1.40129846432481707092372958328991613e-45F32 +#define __SIG_ATOMIC_WIDTH__ 32 +#define __GCC_DESTRUCTIVE_SIZE 64 +#define __INT_LEAST64_TYPE__ long int +#define __INT16_TYPE__ short int +#define __INT_LEAST8_TYPE__ signed char +#define __FLT16_MAX__ 6.55040000000000000000000000000000000e+4F16 +#define __FLT128_MIN__ 3.36210314311209350626267781732175260e-4932F128 +#define __cpp_structured_bindings 201606L +#define __SIZEOF_INT__ 4 +#define __DEC32_MAX_EXP__ 97 +#define __INT_FAST8_MAX__ 0x7f +#define __FLT128_MAX__ 1.18973149535723176508575932662800702e+4932F128 +#define __INTPTR_MAX__ 0x7fffffffffffffffL +#define __cpp_sized_deallocation 201309L +#define __cpp_guaranteed_copy_elision 201606L +#define linux 1 +#define __FLT64_HAS_QUIET_NAN__ 1 +#define __FLT32_MIN_10_EXP__ (-37) +#define __EXCEPTIONS 1 +#define __UINT16_C(c) c +#define __PTRDIFF_WIDTH__ 64 +#define __cpp_range_based_for 201603L +#define __INT_FAST16_WIDTH__ 64 +#define __FLT64_HAS_INFINITY__ 1 +#define __FLT64X_MAX__ 1.18973149535723176502126385303097021e+4932F64x +#define __FLT16_HAS_INFINITY__ 1 +#define __STDCPP_DEFAULT_NEW_ALIGNMENT__ 16 +#define __SIG_ATOMIC_MIN__ (-__SIG_ATOMIC_MAX__ - 1) +#define __code_model_small__ 1 +#define __GCC_ATOMIC_LONG_LOCK_FREE 2 +#define __cpp_nontype_template_args 201911L +#define __DEC32_MANT_DIG__ 7 +#define __k8__ 1 +#define __INTPTR_TYPE__ long int +#define __UINT16_TYPE__ short unsigned int +#define __WCHAR_TYPE__ int +#define __UINTPTR_MAX__ 0xffffffffffffffffUL +#define __INT_FAST64_WIDTH__ 64 +#define __cpp_nontype_template_parameter_class 201806L +#define __cpp_concepts 202002L +#define __INT_FAST64_MAX__ 0x7fffffffffffffffL +#define __GCC_ATOMIC_TEST_AND_SET_TRUEVAL 1 +#define __FLT_NORM_MAX__ 3.40282346638528859811704183484516925e+38F +#define __FLT32_HAS_INFINITY__ 1 +#define __FLT64X_MAX_EXP__ 16384 +#define __UINT_FAST64_TYPE__ long unsigned int +#define __cpp_constexpr_in_decltype 201711L +#define __cpp_inline_variables 201606L +#define __BFLT16_MIN_EXP__ (-125) +#define __INT_MAX__ 0x7fffffff +#define __linux__ 1 +#define __INT64_TYPE__ long int +#define __FLT_MAX_EXP__ 128 +#define __ORDER_BIG_ENDIAN__ 4321 +#define __DBL_MANT_DIG__ 53 +#define QT_CORE_LIB 1 +#define __SIZEOF_FLOAT128__ 16 +#define __BFLT16_MANT_DIG__ 8 +#define __DEC64_MIN__ 1E-383DD +#define __WINT_TYPE__ unsigned int +#define __UINT_LEAST32_TYPE__ unsigned int +#define __SIZEOF_SHORT__ 2 +#define __FLT32_NORM_MAX__ 3.40282346638528859811704183484516925e+38F32 +#define __SSE__ 1 +#define __LDBL_MIN_EXP__ (-16381) +#define __FLT64_MAX__ 1.79769313486231570814527423731704357e+308F64 +#define __DEC64X_MIN_EXP__ (-6142) +#define __amd64__ 1 +#define __WINT_WIDTH__ 32 +#define __INT_LEAST64_WIDTH__ 64 +#define __FLT32X_MAX_10_EXP__ 308 +#define __cpp_namespace_attributes 201411L +#define __SIZEOF_INT128__ 16 +#define __FLT16_MIN__ 6.10351562500000000000000000000000000e-5F16 +#define __FLT64X_IS_IEC_60559__ 1 +#define __GXX_CONSTEXPR_ASM__ 1 +#define __LDBL_MAX_10_EXP__ 4932 +#define __ATOMIC_RELAXED 0 +#define __DBL_EPSILON__ double(2.22044604925031308084726333618164062e-16L) +#define __INT_LEAST32_TYPE__ int +#define _LP64 1 +#define __UINT8_C(c) c +#define __FLT64_MAX_EXP__ 1024 +#define __cpp_return_type_deduction 201304L +#define __SIZEOF_WCHAR_T__ 4 +#define __GNUC_PATCHLEVEL__ 1 +#define __FLT128_NORM_MAX__ 1.18973149535723176508575932662800702e+4932F128 +#define __FLT64_NORM_MAX__ 1.79769313486231570814527423731704357e+308F64 +#define __FLT128_HAS_QUIET_NAN__ 1 +#define __INTMAX_MAX__ 0x7fffffffffffffffL +#define TLRENDER_TIFF 1 +#define __INT_FAST8_TYPE__ signed char +#define __FLT64X_MIN__ 3.36210314311209350626267781732175260e-4932F64x +#define __STDCPP_THREADS__ 1 +#define __BFLT16_HAS_DENORM__ 1 +#define __GNUC_STDC_INLINE__ 1 +#define __FLT64_HAS_DENORM__ 1 +#define __FLT32_EPSILON__ 1.19209289550781250000000000000000000e-7F32 +#define __FLT16_HAS_DENORM__ 1 +#define __DBL_DECIMAL_DIG__ 17 +#define __STDC_UTF_32__ 1 +#define __INT_FAST8_WIDTH__ 8 +#define __FXSR__ 1 +#define __FLT32X_MAX__ 1.79769313486231570814527423731704357e+308F32x +#define __DBL_NORM_MAX__ double(1.79769313486231570814527423731704357e+308L) +#define __BYTE_ORDER__ __ORDER_LITTLE_ENDIAN__ +#define TLRENDER_FFMPEG 1 +#define __INTMAX_WIDTH__ 64 +#define __cpp_runtime_arrays 198712L +#define __FLT32_DIG__ 6 +#define __UINT64_TYPE__ long unsigned int +#define __UINT32_C(c) c ## U +#define __cpp_alias_templates 200704L +#define __cpp_constexpr_dynamic_alloc 201907L +#define __FLT_DENORM_MIN__ 1.40129846432481707092372958328991613e-45F +#define __FLT128_IS_IEC_60559__ 1 +#define __INT8_MAX__ 0x7f +#define __LONG_WIDTH__ 64 +#define __DBL_MIN__ double(2.22507385850720138309023271733240406e-308L) +#define __INT32_MAX__ 0x7fffffff +#define __UINT_FAST32_TYPE__ long unsigned int +#define __FLT16_MANT_DIG__ 11 +#define __FLT32X_NORM_MAX__ 1.79769313486231570814527423731704357e+308F32x +#define __CHAR32_TYPE__ unsigned int +#define __FLT_MAX__ 3.40282346638528859811704183484516925e+38F +#define __SSE2__ 1 +#define __cpp_deduction_guides 201907L +#define __BFLT16_NORM_MAX__ 3.38953138925153547590470800371487867e+38BF16 +#define __INT32_TYPE__ int +#define __SIZEOF_DOUBLE__ 8 +#define __cpp_exceptions 199711L +#define __FLT_MIN_10_EXP__ (-37) +#define __FLT64_MIN__ 2.22507385850720138309023271733240406e-308F64 +#define __INT_LEAST32_WIDTH__ 32 +#define __INTMAX_TYPE__ long int +#define __GLIBCXX_BITSIZE_INT_N_0 128 +#define __FLT32X_HAS_QUIET_NAN__ 1 +#define __ATOMIC_CONSUME 1 +#define __GNUC_MINOR__ 2 +#define __GLIBCXX_TYPE_INT_N_0 __int128 +#define __UINTMAX_MAX__ 0xffffffffffffffffUL +#define __FLT32X_DENORM_MIN__ 4.94065645841246544176568792868221372e-324F32x +#define __cpp_template_template_args 201611L +#define __DBL_MAX_10_EXP__ 308 +#define __LDBL_DENORM_MIN__ 3.64519953188247460252840593361941982e-4951L +#define __INT16_C(c) c +#define __STDC__ 1 +#define __PTRDIFF_TYPE__ long int +#define __LONG_MAX__ 0x7fffffffffffffffL +#define __FLT32X_MIN_10_EXP__ (-307) +#define __UINTPTR_TYPE__ long unsigned int +#define __DEC64_SUBNORMAL_MIN__ 0.000000000000001E-383DD +#define __DEC128_MANT_DIG__ 34 +#define __LDBL_MIN_10_EXP__ (-4931) +#define __cpp_generic_lambdas 201707L +#define __SSE_MATH__ 1 +#define __SIZEOF_LONG_LONG__ 8 +#define __cpp_user_defined_literals 200809L +#define __FLT128_DECIMAL_DIG__ 36 +#define __GCC_ATOMIC_LLONG_LOCK_FREE 2 +#define __FLT32_HAS_QUIET_NAN__ 1 +#define __FLT_DECIMAL_DIG__ 9 +#define __UINT_FAST16_MAX__ 0xffffffffffffffffUL +#define __LDBL_NORM_MAX__ 1.18973149535723176502126385303097021e+4932L +#define __GCC_ATOMIC_SHORT_LOCK_FREE 2 +#define __SIZE_MAX__ 0xffffffffffffffffUL +#define __UINT_FAST8_TYPE__ unsigned char +#define _GNU_SOURCE 1 +#define __cpp_init_captures 201803L +#define __ATOMIC_ACQ_REL 4 +#define __ATOMIC_RELEASE 3 diff --git a/build-linux/tests/test_annotation_items_autogen/mocs_compilation.cpp b/build-linux/tests/test_annotation_items_autogen/mocs_compilation.cpp new file mode 100644 index 00000000..bda67f76 --- /dev/null +++ b/build-linux/tests/test_annotation_items_autogen/mocs_compilation.cpp @@ -0,0 +1,3 @@ +// This file is autogenerated. Changes will be overwritten. +// No files found that require moc or the moc files are included +enum some_compilers { need_more_than_nothing }; diff --git a/build-linux/tests/test_annotation_items_autogen/timestamp b/build-linux/tests/test_annotation_items_autogen/timestamp new file mode 100644 index 00000000..e69de29b diff --git a/build-linux/tests/test_db b/build-linux/tests/test_db new file mode 100755 index 00000000..b7409db5 Binary files /dev/null and b/build-linux/tests/test_db differ diff --git a/build-linux/tests/test_db_autogen/VNU7RW3YIC/moc_db.cpp b/build-linux/tests/test_db_autogen/VNU7RW3YIC/moc_db.cpp new file mode 100644 index 00000000..0098a341 --- /dev/null +++ b/build-linux/tests/test_db_autogen/VNU7RW3YIC/moc_db.cpp @@ -0,0 +1,187 @@ +/**************************************************************************** +** Meta object code from reading C++ file 'db.h' +** +** Created by: The Qt Meta Object Compiler version 69 (Qt 6.10.3) +** +** WARNING! All changes made in this file will be lost! +*****************************************************************************/ + +#include "../../../../native/qt6/src/db.h" +#include + +#include + +#include + + +#include +#if !defined(Q_MOC_OUTPUT_REVISION) +#error "The header file 'db.h' doesn't include ." +#elif Q_MOC_OUTPUT_REVISION != 69 +#error "This file was generated using the moc from 6.10.3. It" +#error "cannot be used with the include files from this version of Qt." +#error "(The moc has changed too much.)" +#endif + +#ifndef Q_CONSTINIT +#define Q_CONSTINIT +#endif + +QT_WARNING_PUSH +QT_WARNING_DISABLE_DEPRECATED +QT_WARNING_DISABLE_GCC("-Wuseless-cast") +namespace { +struct qt_meta_tag_ZN2DBE_t {}; +} // unnamed namespace + +template <> constexpr inline auto DB::qt_create_metaobjectdata() +{ + namespace QMC = QtMocConstants; + QtMocHelpers::StringRefStorage qt_stringData { + "DB", + "foldersChanged", + "", + "assetsChanged", + "folderId", + "tagsChanged", + "projectFoldersChanged", + "assetVersionsChanged", + "assetId", + "applyChecksumUpdate", + "filePath", + "newSize", + "newChecksum", + "oldChecksum", + "isNewAsset", + "versionNotes" + }; + + QtMocHelpers::UintData qt_methods { + // Signal 'foldersChanged' + QtMocHelpers::SignalData(1, 2, QMC::AccessPublic, QMetaType::Void), + // Signal 'assetsChanged' + QtMocHelpers::SignalData(3, 2, QMC::AccessPublic, QMetaType::Void, {{ + { QMetaType::Int, 4 }, + }}), + // Signal 'tagsChanged' + QtMocHelpers::SignalData(5, 2, QMC::AccessPublic, QMetaType::Void), + // Signal 'projectFoldersChanged' + QtMocHelpers::SignalData(6, 2, QMC::AccessPublic, QMetaType::Void), + // Signal 'assetVersionsChanged' + QtMocHelpers::SignalData(7, 2, QMC::AccessPublic, QMetaType::Void, {{ + { QMetaType::Int, 8 }, + }}), + // Slot 'applyChecksumUpdate' + QtMocHelpers::SlotData(9, 2, QMC::AccessPrivate, QMetaType::Void, {{ + { QMetaType::Int, 8 }, { QMetaType::QString, 10 }, { QMetaType::LongLong, 11 }, { QMetaType::QString, 12 }, + { QMetaType::QString, 13 }, { QMetaType::Bool, 14 }, { QMetaType::QString, 15 }, + }}), + }; + QtMocHelpers::UintData qt_properties { + }; + QtMocHelpers::UintData qt_enums { + }; + return QtMocHelpers::metaObjectData(QMC::MetaObjectFlag{}, qt_stringData, + qt_methods, qt_properties, qt_enums); +} +Q_CONSTINIT const QMetaObject DB::staticMetaObject = { { + QMetaObject::SuperData::link(), + qt_staticMetaObjectStaticContent.stringdata, + qt_staticMetaObjectStaticContent.data, + qt_static_metacall, + nullptr, + qt_staticMetaObjectRelocatingContent.metaTypes, + nullptr +} }; + +void DB::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) +{ + auto *_t = static_cast(_o); + if (_c == QMetaObject::InvokeMetaMethod) { + switch (_id) { + case 0: _t->foldersChanged(); break; + case 1: _t->assetsChanged((*reinterpret_cast>(_a[1]))); break; + case 2: _t->tagsChanged(); break; + case 3: _t->projectFoldersChanged(); break; + case 4: _t->assetVersionsChanged((*reinterpret_cast>(_a[1]))); break; + case 5: _t->applyChecksumUpdate((*reinterpret_cast>(_a[1])),(*reinterpret_cast>(_a[2])),(*reinterpret_cast>(_a[3])),(*reinterpret_cast>(_a[4])),(*reinterpret_cast>(_a[5])),(*reinterpret_cast>(_a[6])),(*reinterpret_cast>(_a[7]))); break; + default: ; + } + } + if (_c == QMetaObject::IndexOfMethod) { + if (QtMocHelpers::indexOfMethod(_a, &DB::foldersChanged, 0)) + return; + if (QtMocHelpers::indexOfMethod(_a, &DB::assetsChanged, 1)) + return; + if (QtMocHelpers::indexOfMethod(_a, &DB::tagsChanged, 2)) + return; + if (QtMocHelpers::indexOfMethod(_a, &DB::projectFoldersChanged, 3)) + return; + if (QtMocHelpers::indexOfMethod(_a, &DB::assetVersionsChanged, 4)) + return; + } +} + +const QMetaObject *DB::metaObject() const +{ + return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject; +} + +void *DB::qt_metacast(const char *_clname) +{ + if (!_clname) return nullptr; + if (!strcmp(_clname, qt_staticMetaObjectStaticContent.strings)) + return static_cast(this); + if (!strcmp(_clname, "IAssetDatabase")) + return static_cast< IAssetDatabase*>(this); + return QObject::qt_metacast(_clname); +} + +int DB::qt_metacall(QMetaObject::Call _c, int _id, void **_a) +{ + _id = QObject::qt_metacall(_c, _id, _a); + if (_id < 0) + return _id; + if (_c == QMetaObject::InvokeMetaMethod) { + if (_id < 6) + qt_static_metacall(this, _c, _id, _a); + _id -= 6; + } + if (_c == QMetaObject::RegisterMethodArgumentMetaType) { + if (_id < 6) + *reinterpret_cast(_a[0]) = QMetaType(); + _id -= 6; + } + return _id; +} + +// SIGNAL 0 +void DB::foldersChanged() +{ + QMetaObject::activate(this, &staticMetaObject, 0, nullptr); +} + +// SIGNAL 1 +void DB::assetsChanged(int _t1) +{ + QMetaObject::activate(this, &staticMetaObject, 1, nullptr, _t1); +} + +// SIGNAL 2 +void DB::tagsChanged() +{ + QMetaObject::activate(this, &staticMetaObject, 2, nullptr); +} + +// SIGNAL 3 +void DB::projectFoldersChanged() +{ + QMetaObject::activate(this, &staticMetaObject, 3, nullptr); +} + +// SIGNAL 4 +void DB::assetVersionsChanged(int _t1) +{ + QMetaObject::activate(this, &staticMetaObject, 4, nullptr, _t1); +} +QT_WARNING_POP diff --git a/build-linux/tests/test_db_autogen/VNU7RW3YIC/moc_log_manager.cpp b/build-linux/tests/test_db_autogen/VNU7RW3YIC/moc_log_manager.cpp new file mode 100644 index 00000000..59fa4292 --- /dev/null +++ b/build-linux/tests/test_db_autogen/VNU7RW3YIC/moc_log_manager.cpp @@ -0,0 +1,165 @@ +/**************************************************************************** +** Meta object code from reading C++ file 'log_manager.h' +** +** Created by: The Qt Meta Object Compiler version 69 (Qt 6.10.3) +** +** WARNING! All changes made in this file will be lost! +*****************************************************************************/ + +#include "../../../../native/qt6/src/log_manager.h" +#include + +#include + +#include + + +#include +#if !defined(Q_MOC_OUTPUT_REVISION) +#error "The header file 'log_manager.h' doesn't include ." +#elif Q_MOC_OUTPUT_REVISION != 69 +#error "This file was generated using the moc from 6.10.3. It" +#error "cannot be used with the include files from this version of Qt." +#error "(The moc has changed too much.)" +#endif + +#ifndef Q_CONSTINIT +#define Q_CONSTINIT +#endif + +QT_WARNING_PUSH +QT_WARNING_DISABLE_DEPRECATED +QT_WARNING_DISABLE_GCC("-Wuseless-cast") +namespace { +struct qt_meta_tag_ZN10LogManagerE_t {}; +} // unnamed namespace + +template <> constexpr inline auto LogManager::qt_create_metaobjectdata() +{ + namespace QMC = QtMocConstants; + QtMocHelpers::StringRefStorage qt_stringData { + "LogManager", + "logsChanged", + "", + "logAdded", + "message", + "addLog", + "level", + "clear", + "logs" + }; + + QtMocHelpers::UintData qt_methods { + // Signal 'logsChanged' + QtMocHelpers::SignalData(1, 2, QMC::AccessPublic, QMetaType::Void), + // Signal 'logAdded' + QtMocHelpers::SignalData(3, 2, QMC::AccessPublic, QMetaType::Void, {{ + { QMetaType::QString, 4 }, + }}), + // Method 'addLog' + QtMocHelpers::MethodData(5, 2, QMC::AccessPublic, QMetaType::Void, {{ + { QMetaType::QString, 4 }, { QMetaType::QString, 6 }, + }}), + // Method 'addLog' + QtMocHelpers::MethodData(5, 2, QMC::AccessPublic | QMC::MethodCloned, QMetaType::Void, {{ + { QMetaType::QString, 4 }, + }}), + // Method 'clear' + QtMocHelpers::MethodData(7, 2, QMC::AccessPublic, QMetaType::Void), + }; + QtMocHelpers::UintData qt_properties { + // property 'logs' + QtMocHelpers::PropertyData(8, QMetaType::QStringList, QMC::DefaultPropertyFlags, 0), + }; + QtMocHelpers::UintData qt_enums { + }; + return QtMocHelpers::metaObjectData(QMC::MetaObjectFlag{}, qt_stringData, + qt_methods, qt_properties, qt_enums); +} +Q_CONSTINIT const QMetaObject LogManager::staticMetaObject = { { + QMetaObject::SuperData::link(), + qt_staticMetaObjectStaticContent.stringdata, + qt_staticMetaObjectStaticContent.data, + qt_static_metacall, + nullptr, + qt_staticMetaObjectRelocatingContent.metaTypes, + nullptr +} }; + +void LogManager::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) +{ + auto *_t = static_cast(_o); + if (_c == QMetaObject::InvokeMetaMethod) { + switch (_id) { + case 0: _t->logsChanged(); break; + case 1: _t->logAdded((*reinterpret_cast>(_a[1]))); break; + case 2: _t->addLog((*reinterpret_cast>(_a[1])),(*reinterpret_cast>(_a[2]))); break; + case 3: _t->addLog((*reinterpret_cast>(_a[1]))); break; + case 4: _t->clear(); break; + default: ; + } + } + if (_c == QMetaObject::IndexOfMethod) { + if (QtMocHelpers::indexOfMethod(_a, &LogManager::logsChanged, 0)) + return; + if (QtMocHelpers::indexOfMethod(_a, &LogManager::logAdded, 1)) + return; + } + if (_c == QMetaObject::ReadProperty) { + void *_v = _a[0]; + switch (_id) { + case 0: *reinterpret_cast(_v) = _t->logs(); break; + default: break; + } + } +} + +const QMetaObject *LogManager::metaObject() const +{ + return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject; +} + +void *LogManager::qt_metacast(const char *_clname) +{ + if (!_clname) return nullptr; + if (!strcmp(_clname, qt_staticMetaObjectStaticContent.strings)) + return static_cast(this); + return QObject::qt_metacast(_clname); +} + +int LogManager::qt_metacall(QMetaObject::Call _c, int _id, void **_a) +{ + _id = QObject::qt_metacall(_c, _id, _a); + if (_id < 0) + return _id; + if (_c == QMetaObject::InvokeMetaMethod) { + if (_id < 5) + qt_static_metacall(this, _c, _id, _a); + _id -= 5; + } + if (_c == QMetaObject::RegisterMethodArgumentMetaType) { + if (_id < 5) + *reinterpret_cast(_a[0]) = QMetaType(); + _id -= 5; + } + if (_c == QMetaObject::ReadProperty || _c == QMetaObject::WriteProperty + || _c == QMetaObject::ResetProperty || _c == QMetaObject::BindableProperty + || _c == QMetaObject::RegisterPropertyMetaType) { + qt_static_metacall(this, _c, _id, _a); + _id -= 1; + } + return _id; +} + +// SIGNAL 0 +void LogManager::logsChanged() +{ + QMetaObject::activate(this, &staticMetaObject, 0, nullptr); +} + +// SIGNAL 1 +void LogManager::logAdded(const QString & _t1) +{ + QMetaObject::activate(this, &staticMetaObject, 1, nullptr, _t1); +} +QT_WARNING_POP diff --git a/build-linux/tests/test_db_autogen/deps b/build-linux/tests/test_db_autogen/deps new file mode 100644 index 00000000..7c1a32b4 --- /dev/null +++ b/build-linux/tests/test_db_autogen/deps @@ -0,0 +1,849 @@ +test_db_autogen/timestamp: \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_db_autogen/moc_predefs.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/db.cpp \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/db.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/i_asset_database.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/log_manager.cpp \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/log_manager.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/CMakeLists.txt \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/test_db.cpp \ + /usr/include/asm-generic/bitsperlong.h \ + /usr/include/asm-generic/errno-base.h \ + /usr/include/asm-generic/errno.h \ + /usr/include/asm-generic/int-ll64.h \ + /usr/include/asm-generic/posix_types.h \ + /usr/include/asm-generic/types.h \ + /usr/include/asm/bitsperlong.h \ + /usr/include/asm/errno.h \ + /usr/include/asm/posix_types.h \ + /usr/include/asm/posix_types_64.h \ + /usr/include/asm/types.h \ + /usr/include/asm/unistd.h \ + /usr/include/asm/unistd_64.h \ + /usr/include/assert.h \ + /usr/include/bits/atomic_wide_counter.h \ + /usr/include/bits/byteswap.h \ + /usr/include/bits/confname.h \ + /usr/include/bits/cpu-set.h \ + /usr/include/bits/endian.h \ + /usr/include/bits/endianness.h \ + /usr/include/bits/environments.h \ + /usr/include/bits/errno.h \ + /usr/include/bits/floatn-common.h \ + /usr/include/bits/floatn.h \ + /usr/include/bits/getopt_core.h \ + /usr/include/bits/getopt_posix.h \ + /usr/include/bits/libc-header-start.h \ + /usr/include/bits/locale.h \ + /usr/include/bits/long-double.h \ + /usr/include/bits/posix_opt.h \ + /usr/include/bits/pthread_stack_min-dynamic.h \ + /usr/include/bits/pthreadtypes-arch.h \ + /usr/include/bits/pthreadtypes.h \ + /usr/include/bits/sched.h \ + /usr/include/bits/select.h \ + /usr/include/bits/semaphore.h \ + /usr/include/bits/setjmp.h \ + /usr/include/bits/stdint-intn.h \ + /usr/include/bits/stdio_lim.h \ + /usr/include/bits/struct_mutex.h \ + /usr/include/bits/struct_rwlock.h \ + /usr/include/bits/syscall.h \ + /usr/include/bits/thread-shared-types.h \ + /usr/include/bits/time.h \ + /usr/include/bits/time64.h \ + /usr/include/bits/timesize.h \ + /usr/include/bits/timex.h \ + /usr/include/bits/types.h \ + /usr/include/bits/types/FILE.h \ + /usr/include/bits/types/__FILE.h \ + /usr/include/bits/types/__fpos64_t.h \ + /usr/include/bits/types/__fpos_t.h \ + /usr/include/bits/types/__locale_t.h \ + /usr/include/bits/types/__mbstate_t.h \ + /usr/include/bits/types/__sigset_t.h \ + /usr/include/bits/types/clock_t.h \ + /usr/include/bits/types/clockid_t.h \ + /usr/include/bits/types/cookie_io_functions_t.h \ + /usr/include/bits/types/error_t.h \ + /usr/include/bits/types/locale_t.h \ + /usr/include/bits/types/mbstate_t.h \ + /usr/include/bits/types/sigset_t.h \ + /usr/include/bits/types/struct_FILE.h \ + /usr/include/bits/types/struct___jmp_buf_tag.h \ + /usr/include/bits/types/struct_itimerspec.h \ + /usr/include/bits/types/struct_sched_param.h \ + /usr/include/bits/types/struct_timespec.h \ + /usr/include/bits/types/struct_timeval.h \ + /usr/include/bits/types/struct_tm.h \ + /usr/include/bits/types/time_t.h \ + /usr/include/bits/types/timer_t.h \ + /usr/include/bits/types/wint_t.h \ + /usr/include/bits/typesizes.h \ + /usr/include/bits/uintn-identity.h \ + /usr/include/bits/unistd_ext.h \ + /usr/include/bits/wchar.h \ + /usr/include/bits/wctype-wchar.h \ + /usr/include/bits/wordsize.h \ + /usr/include/c++/15/algorithm \ + /usr/include/c++/15/array \ + /usr/include/c++/15/atomic \ + /usr/include/c++/15/backward/auto_ptr.h \ + /usr/include/c++/15/backward/binders.h \ + /usr/include/c++/15/bit \ + /usr/include/c++/15/bits/algorithmfwd.h \ + /usr/include/c++/15/bits/align.h \ + /usr/include/c++/15/bits/alloc_traits.h \ + /usr/include/c++/15/bits/allocated_ptr.h \ + /usr/include/c++/15/bits/allocator.h \ + /usr/include/c++/15/bits/atomic_base.h \ + /usr/include/c++/15/bits/atomic_futex.h \ + /usr/include/c++/15/bits/atomic_lockfree_defines.h \ + /usr/include/c++/15/bits/atomic_timed_wait.h \ + /usr/include/c++/15/bits/atomic_wait.h \ + /usr/include/c++/15/bits/basic_ios.h \ + /usr/include/c++/15/bits/basic_ios.tcc \ + /usr/include/c++/15/bits/basic_string.h \ + /usr/include/c++/15/bits/basic_string.tcc \ + /usr/include/c++/15/bits/char_traits.h \ + /usr/include/c++/15/bits/charconv.h \ + /usr/include/c++/15/bits/chrono.h \ + /usr/include/c++/15/bits/chrono_io.h \ + /usr/include/c++/15/bits/codecvt.h \ + /usr/include/c++/15/bits/concept_check.h \ + /usr/include/c++/15/bits/cpp_type_traits.h \ + /usr/include/c++/15/bits/cxxabi_forced.h \ + /usr/include/c++/15/bits/cxxabi_init_exception.h \ + /usr/include/c++/15/bits/enable_special_members.h \ + /usr/include/c++/15/bits/erase_if.h \ + /usr/include/c++/15/bits/exception.h \ + /usr/include/c++/15/bits/exception_defines.h \ + /usr/include/c++/15/bits/exception_ptr.h \ + /usr/include/c++/15/bits/functexcept.h \ + /usr/include/c++/15/bits/functional_hash.h \ + /usr/include/c++/15/bits/hash_bytes.h \ + /usr/include/c++/15/bits/hashtable.h \ + /usr/include/c++/15/bits/hashtable_policy.h \ + /usr/include/c++/15/bits/invoke.h \ + /usr/include/c++/15/bits/ios_base.h \ + /usr/include/c++/15/bits/istream.tcc \ + /usr/include/c++/15/bits/iterator_concepts.h \ + /usr/include/c++/15/bits/list.tcc \ + /usr/include/c++/15/bits/locale_classes.h \ + /usr/include/c++/15/bits/locale_classes.tcc \ + /usr/include/c++/15/bits/locale_conv.h \ + /usr/include/c++/15/bits/locale_facets.h \ + /usr/include/c++/15/bits/locale_facets.tcc \ + /usr/include/c++/15/bits/locale_facets_nonio.h \ + /usr/include/c++/15/bits/locale_facets_nonio.tcc \ + /usr/include/c++/15/bits/localefwd.h \ + /usr/include/c++/15/bits/max_size_type.h \ + /usr/include/c++/15/bits/memory_resource.h \ + /usr/include/c++/15/bits/memoryfwd.h \ + /usr/include/c++/15/bits/move.h \ + /usr/include/c++/15/bits/nested_exception.h \ + /usr/include/c++/15/bits/new_allocator.h \ + /usr/include/c++/15/bits/node_handle.h \ + /usr/include/c++/15/bits/ostream.h \ + /usr/include/c++/15/bits/ostream.tcc \ + /usr/include/c++/15/bits/ostream_insert.h \ + /usr/include/c++/15/bits/parse_numbers.h \ + /usr/include/c++/15/bits/postypes.h \ + /usr/include/c++/15/bits/predefined_ops.h \ + /usr/include/c++/15/bits/ptr_traits.h \ + /usr/include/c++/15/bits/quoted_string.h \ + /usr/include/c++/15/bits/random.h \ + /usr/include/c++/15/bits/random.tcc \ + /usr/include/c++/15/bits/range_access.h \ + /usr/include/c++/15/bits/ranges_algo.h \ + /usr/include/c++/15/bits/ranges_algobase.h \ + /usr/include/c++/15/bits/ranges_base.h \ + /usr/include/c++/15/bits/ranges_cmp.h \ + /usr/include/c++/15/bits/ranges_uninitialized.h \ + /usr/include/c++/15/bits/ranges_util.h \ + /usr/include/c++/15/bits/refwrap.h \ + /usr/include/c++/15/bits/requires_hosted.h \ + /usr/include/c++/15/bits/semaphore_base.h \ + /usr/include/c++/15/bits/shared_ptr.h \ + /usr/include/c++/15/bits/shared_ptr_atomic.h \ + /usr/include/c++/15/bits/shared_ptr_base.h \ + /usr/include/c++/15/bits/specfun.h \ + /usr/include/c++/15/bits/sstream.tcc \ + /usr/include/c++/15/bits/std_abs.h \ + /usr/include/c++/15/bits/std_function.h \ + /usr/include/c++/15/bits/std_mutex.h \ + /usr/include/c++/15/bits/std_thread.h \ + /usr/include/c++/15/bits/stl_algo.h \ + /usr/include/c++/15/bits/stl_algobase.h \ + /usr/include/c++/15/bits/stl_bvector.h \ + /usr/include/c++/15/bits/stl_construct.h \ + /usr/include/c++/15/bits/stl_function.h \ + /usr/include/c++/15/bits/stl_heap.h \ + /usr/include/c++/15/bits/stl_iterator.h \ + /usr/include/c++/15/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/15/bits/stl_iterator_base_types.h \ + /usr/include/c++/15/bits/stl_list.h \ + /usr/include/c++/15/bits/stl_map.h \ + /usr/include/c++/15/bits/stl_multimap.h \ + /usr/include/c++/15/bits/stl_multiset.h \ + /usr/include/c++/15/bits/stl_numeric.h \ + /usr/include/c++/15/bits/stl_pair.h \ + /usr/include/c++/15/bits/stl_raw_storage_iter.h \ + /usr/include/c++/15/bits/stl_relops.h \ + /usr/include/c++/15/bits/stl_set.h \ + /usr/include/c++/15/bits/stl_tempbuf.h \ + /usr/include/c++/15/bits/stl_tree.h \ + /usr/include/c++/15/bits/stl_uninitialized.h \ + /usr/include/c++/15/bits/stl_vector.h \ + /usr/include/c++/15/bits/stream_iterator.h \ + /usr/include/c++/15/bits/streambuf.tcc \ + /usr/include/c++/15/bits/streambuf_iterator.h \ + /usr/include/c++/15/bits/string_view.tcc \ + /usr/include/c++/15/bits/stringfwd.h \ + /usr/include/c++/15/bits/this_thread_sleep.h \ + /usr/include/c++/15/bits/uniform_int_dist.h \ + /usr/include/c++/15/bits/unique_lock.h \ + /usr/include/c++/15/bits/unique_ptr.h \ + /usr/include/c++/15/bits/unordered_map.h \ + /usr/include/c++/15/bits/unordered_set.h \ + /usr/include/c++/15/bits/uses_allocator.h \ + /usr/include/c++/15/bits/uses_allocator_args.h \ + /usr/include/c++/15/bits/utility.h \ + /usr/include/c++/15/bits/vector.tcc \ + /usr/include/c++/15/bits/version.h \ + /usr/include/c++/15/cassert \ + /usr/include/c++/15/cctype \ + /usr/include/c++/15/cerrno \ + /usr/include/c++/15/charconv \ + /usr/include/c++/15/chrono \ + /usr/include/c++/15/climits \ + /usr/include/c++/15/clocale \ + /usr/include/c++/15/cmath \ + /usr/include/c++/15/compare \ + /usr/include/c++/15/concepts \ + /usr/include/c++/15/condition_variable \ + /usr/include/c++/15/cstddef \ + /usr/include/c++/15/cstdint \ + /usr/include/c++/15/cstdio \ + /usr/include/c++/15/cstdlib \ + /usr/include/c++/15/cstring \ + /usr/include/c++/15/ctime \ + /usr/include/c++/15/cwchar \ + /usr/include/c++/15/cwctype \ + /usr/include/c++/15/debug/assertions.h \ + /usr/include/c++/15/debug/debug.h \ + /usr/include/c++/15/exception \ + /usr/include/c++/15/experimental/source_location \ + /usr/include/c++/15/ext/aligned_buffer.h \ + /usr/include/c++/15/ext/alloc_traits.h \ + /usr/include/c++/15/ext/atomicity.h \ + /usr/include/c++/15/ext/concurrence.h \ + /usr/include/c++/15/ext/numeric_traits.h \ + /usr/include/c++/15/ext/string_conversions.h \ + /usr/include/c++/15/ext/type_traits.h \ + /usr/include/c++/15/filesystem \ + /usr/include/c++/15/format \ + /usr/include/c++/15/functional \ + /usr/include/c++/15/future \ + /usr/include/c++/15/initializer_list \ + /usr/include/c++/15/iomanip \ + /usr/include/c++/15/ios \ + /usr/include/c++/15/iosfwd \ + /usr/include/c++/15/istream \ + /usr/include/c++/15/iterator \ + /usr/include/c++/15/limits \ + /usr/include/c++/15/list \ + /usr/include/c++/15/locale \ + /usr/include/c++/15/map \ + /usr/include/c++/15/memory \ + /usr/include/c++/15/memory_resource \ + /usr/include/c++/15/mutex \ + /usr/include/c++/15/new \ + /usr/include/c++/15/numeric \ + /usr/include/c++/15/optional \ + /usr/include/c++/15/ostream \ + /usr/include/c++/15/pstl/execution_defs.h \ + /usr/include/c++/15/pstl/glue_numeric_defs.h \ + /usr/include/c++/15/pstl/pstl_config.h \ + /usr/include/c++/15/random \ + /usr/include/c++/15/ratio \ + /usr/include/c++/15/semaphore \ + /usr/include/c++/15/set \ + /usr/include/c++/15/shared_mutex \ + /usr/include/c++/15/source_location \ + /usr/include/c++/15/sstream \ + /usr/include/c++/15/stdexcept \ + /usr/include/c++/15/stdlib.h \ + /usr/include/c++/15/stop_token \ + /usr/include/c++/15/streambuf \ + /usr/include/c++/15/string \ + /usr/include/c++/15/string_view \ + /usr/include/c++/15/system_error \ + /usr/include/c++/15/tr1/bessel_function.tcc \ + /usr/include/c++/15/tr1/beta_function.tcc \ + /usr/include/c++/15/tr1/ell_integral.tcc \ + /usr/include/c++/15/tr1/exp_integral.tcc \ + /usr/include/c++/15/tr1/gamma.tcc \ + /usr/include/c++/15/tr1/hypergeometric.tcc \ + /usr/include/c++/15/tr1/legendre_function.tcc \ + /usr/include/c++/15/tr1/modified_bessel_func.tcc \ + /usr/include/c++/15/tr1/poly_hermite.tcc \ + /usr/include/c++/15/tr1/poly_laguerre.tcc \ + /usr/include/c++/15/tr1/riemann_zeta.tcc \ + /usr/include/c++/15/tr1/special_function_util.h \ + /usr/include/c++/15/tuple \ + /usr/include/c++/15/type_traits \ + /usr/include/c++/15/typeinfo \ + /usr/include/c++/15/unordered_map \ + /usr/include/c++/15/unordered_set \ + /usr/include/c++/15/utility \ + /usr/include/c++/15/variant \ + /usr/include/c++/15/vector \ + /usr/include/c++/15/version \ + /usr/include/c++/15/x86_64-redhat-linux/bits/atomic_word.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/c++allocator.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/c++config.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/c++locale.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/cpu_defines.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/ctype_base.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/ctype_inline.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/error_constants.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/gthr-default.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/gthr.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/messages_members.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/opt_random.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/os_defines.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/time_members.h \ + /usr/include/ctype.h \ + /usr/include/endian.h \ + /usr/include/errno.h \ + /usr/include/features-time64.h \ + /usr/include/features.h \ + /usr/include/gnu/stubs-64.h \ + /usr/include/gnu/stubs.h \ + /usr/include/libintl.h \ + /usr/include/linux/close_range.h \ + /usr/include/linux/errno.h \ + /usr/include/linux/posix_types.h \ + /usr/include/linux/sched/types.h \ + /usr/include/linux/stddef.h \ + /usr/include/linux/types.h \ + /usr/include/locale.h \ + /usr/include/pthread.h \ + /usr/include/qt6/QtCore/QAbstractItemModel \ + /usr/include/qt6/QtCore/QCoreApplication \ + /usr/include/qt6/QtCore/QDateTime \ + /usr/include/qt6/QtCore/QDeadlineTimer \ + /usr/include/qt6/QtCore/QFile \ + /usr/include/qt6/QtCore/QFileInfo \ + /usr/include/qt6/QtCore/QHash \ + /usr/include/qt6/QtCore/QList \ + /usr/include/qt6/QtCore/QMap \ + /usr/include/qt6/QtCore/QMutex \ + /usr/include/qt6/QtCore/QObject \ + /usr/include/qt6/QtCore/QPair \ + /usr/include/qt6/QtCore/QString \ + /usr/include/qt6/QtCore/QStringList \ + /usr/include/qt6/QtCore/QTemporaryDir \ + /usr/include/qt6/QtCore/QTextStream \ + /usr/include/qt6/QtCore/QVariant \ + /usr/include/qt6/QtCore/QVector \ + /usr/include/qt6/QtCore/QtCore \ + /usr/include/qt6/QtCore/QtCoreDepends \ + /usr/include/qt6/QtCore/q17memory.h \ + /usr/include/qt6/QtCore/q20algorithm.h \ + /usr/include/qt6/QtCore/q20chrono.h \ + /usr/include/qt6/QtCore/q20functional.h \ + /usr/include/qt6/QtCore/q20iterator.h \ + /usr/include/qt6/QtCore/q20map.h \ + /usr/include/qt6/QtCore/q20memory.h \ + /usr/include/qt6/QtCore/q20type_traits.h \ + /usr/include/qt6/QtCore/q20utility.h \ + /usr/include/qt6/QtCore/q20vector.h \ + /usr/include/qt6/QtCore/q23functional.h \ + /usr/include/qt6/QtCore/q23type_traits.h \ + /usr/include/qt6/QtCore/q23utility.h \ + /usr/include/qt6/QtCore/q26numeric.h \ + /usr/include/qt6/QtCore/qabstractanimation.h \ + /usr/include/qt6/QtCore/qabstracteventdispatcher.h \ + /usr/include/qt6/QtCore/qabstractitemmodel.h \ + /usr/include/qt6/QtCore/qabstractnativeeventfilter.h \ + /usr/include/qt6/QtCore/qabstractproxymodel.h \ + /usr/include/qt6/QtCore/qalgorithms.h \ + /usr/include/qt6/QtCore/qalloc.h \ + /usr/include/qt6/QtCore/qanimationgroup.h \ + /usr/include/qt6/QtCore/qanystringview.h \ + /usr/include/qt6/QtCore/qapplicationstatic.h \ + /usr/include/qt6/QtCore/qarraydata.h \ + /usr/include/qt6/QtCore/qarraydataops.h \ + /usr/include/qt6/QtCore/qarraydatapointer.h \ + /usr/include/qt6/QtCore/qassert.h \ + /usr/include/qt6/QtCore/qassociativeiterable.h \ + /usr/include/qt6/QtCore/qatomic.h \ + /usr/include/qt6/QtCore/qatomic_cxx11.h \ + /usr/include/qt6/QtCore/qatomicscopedvaluerollback.h \ + /usr/include/qt6/QtCore/qbasicatomic.h \ + /usr/include/qt6/QtCore/qbasictimer.h \ + /usr/include/qt6/QtCore/qbindingstorage.h \ + /usr/include/qt6/QtCore/qbitarray.h \ + /usr/include/qt6/QtCore/qbuffer.h \ + /usr/include/qt6/QtCore/qbytearray.h \ + /usr/include/qt6/QtCore/qbytearrayalgorithms.h \ + /usr/include/qt6/QtCore/qbytearraylist.h \ + /usr/include/qt6/QtCore/qbytearraymatcher.h \ + /usr/include/qt6/QtCore/qbytearrayview.h \ + /usr/include/qt6/QtCore/qcache.h \ + /usr/include/qt6/QtCore/qcalendar.h \ + /usr/include/qt6/QtCore/qcborarray.h \ + /usr/include/qt6/QtCore/qcborcommon.h \ + /usr/include/qt6/QtCore/qcbormap.h \ + /usr/include/qt6/QtCore/qcborstream.h \ + /usr/include/qt6/QtCore/qcborstreamreader.h \ + /usr/include/qt6/QtCore/qcborstreamwriter.h \ + /usr/include/qt6/QtCore/qcborvalue.h \ + /usr/include/qt6/QtCore/qchar.h \ + /usr/include/qt6/QtCore/qcheckedint_impl.h \ + /usr/include/qt6/QtCore/qchronotimer.h \ + /usr/include/qt6/QtCore/qcollator.h \ + /usr/include/qt6/QtCore/qcommandlineoption.h \ + /usr/include/qt6/QtCore/qcommandlineparser.h \ + /usr/include/qt6/QtCore/qcompare.h \ + /usr/include/qt6/QtCore/qcompare_impl.h \ + /usr/include/qt6/QtCore/qcomparehelpers.h \ + /usr/include/qt6/QtCore/qcompilerdetection.h \ + /usr/include/qt6/QtCore/qconcatenatetablesproxymodel.h \ + /usr/include/qt6/QtCore/qconfig-64.h \ + /usr/include/qt6/QtCore/qconfig.h \ + /usr/include/qt6/QtCore/qconstructormacros.h \ + /usr/include/qt6/QtCore/qcontainerfwd.h \ + /usr/include/qt6/QtCore/qcontainerinfo.h \ + /usr/include/qt6/QtCore/qcontainertools_impl.h \ + /usr/include/qt6/QtCore/qcontiguouscache.h \ + /usr/include/qt6/QtCore/qcoreapplication.h \ + /usr/include/qt6/QtCore/qcoreapplication_platform.h \ + /usr/include/qt6/QtCore/qcoreevent.h \ + /usr/include/qt6/QtCore/qcryptographichash.h \ + /usr/include/qt6/QtCore/qdarwinhelpers.h \ + /usr/include/qt6/QtCore/qdatastream.h \ + /usr/include/qt6/QtCore/qdatetime.h \ + /usr/include/qt6/QtCore/qdeadlinetimer.h \ + /usr/include/qt6/QtCore/qdebug.h \ + /usr/include/qt6/QtCore/qdir.h \ + /usr/include/qt6/QtCore/qdiriterator.h \ + /usr/include/qt6/QtCore/qdirlisting.h \ + /usr/include/qt6/QtCore/qeasingcurve.h \ + /usr/include/qt6/QtCore/qelapsedtimer.h \ + /usr/include/qt6/QtCore/qendian.h \ + /usr/include/qt6/QtCore/qeventloop.h \ + /usr/include/qt6/QtCore/qexception.h \ + /usr/include/qt6/QtCore/qexceptionhandling.h \ + /usr/include/qt6/QtCore/qfactoryinterface.h \ + /usr/include/qt6/QtCore/qfile.h \ + /usr/include/qt6/QtCore/qfiledevice.h \ + /usr/include/qt6/QtCore/qfileinfo.h \ + /usr/include/qt6/QtCore/qfileselector.h \ + /usr/include/qt6/QtCore/qfilesystemwatcher.h \ + /usr/include/qt6/QtCore/qflags.h \ + /usr/include/qt6/QtCore/qfloat16.h \ + /usr/include/qt6/QtCore/qforeach.h \ + /usr/include/qt6/QtCore/qfunctionaltools_impl.h \ + /usr/include/qt6/QtCore/qfunctionpointer.h \ + /usr/include/qt6/QtCore/qfuture.h \ + /usr/include/qt6/QtCore/qfuture_impl.h \ + /usr/include/qt6/QtCore/qfutureinterface.h \ + /usr/include/qt6/QtCore/qfuturesynchronizer.h \ + /usr/include/qt6/QtCore/qfuturewatcher.h \ + /usr/include/qt6/QtCore/qgenericatomic.h \ + /usr/include/qt6/QtCore/qglobal.h \ + /usr/include/qt6/QtCore/qglobalstatic.h \ + /usr/include/qt6/QtCore/qhash.h \ + /usr/include/qt6/QtCore/qhashfunctions.h \ + /usr/include/qt6/QtCore/qidentityproxymodel.h \ + /usr/include/qt6/QtCore/qiodevice.h \ + /usr/include/qt6/QtCore/qiodevicebase.h \ + /usr/include/qt6/QtCore/qitemselectionmodel.h \ + /usr/include/qt6/QtCore/qiterable.h \ + /usr/include/qt6/QtCore/qiterator.h \ + /usr/include/qt6/QtCore/qjsonarray.h \ + /usr/include/qt6/QtCore/qjsondocument.h \ + /usr/include/qt6/QtCore/qjsonobject.h \ + /usr/include/qt6/QtCore/qjsonparseerror.h \ + /usr/include/qt6/QtCore/qjsonvalue.h \ + /usr/include/qt6/QtCore/qlatin1stringmatcher.h \ + /usr/include/qt6/QtCore/qlatin1stringview.h \ + /usr/include/qt6/QtCore/qlibrary.h \ + /usr/include/qt6/QtCore/qlibraryinfo.h \ + /usr/include/qt6/QtCore/qline.h \ + /usr/include/qt6/QtCore/qlist.h \ + /usr/include/qt6/QtCore/qlocale.h \ + /usr/include/qt6/QtCore/qlockfile.h \ + /usr/include/qt6/QtCore/qlogging.h \ + /usr/include/qt6/QtCore/qloggingcategory.h \ + /usr/include/qt6/QtCore/qmalloc.h \ + /usr/include/qt6/QtCore/qmap.h \ + /usr/include/qt6/QtCore/qmargins.h \ + /usr/include/qt6/QtCore/qmath.h \ + /usr/include/qt6/QtCore/qmessageauthenticationcode.h \ + /usr/include/qt6/QtCore/qmetacontainer.h \ + /usr/include/qt6/QtCore/qmetaobject.h \ + /usr/include/qt6/QtCore/qmetatype.h \ + /usr/include/qt6/QtCore/qmimedata.h \ + /usr/include/qt6/QtCore/qmimedatabase.h \ + /usr/include/qt6/QtCore/qmimetype.h \ + /usr/include/qt6/QtCore/qminmax.h \ + /usr/include/qt6/QtCore/qmutex.h \ + /usr/include/qt6/QtCore/qnamespace.h \ + /usr/include/qt6/QtCore/qnativeinterface.h \ + /usr/include/qt6/QtCore/qnumeric.h \ + /usr/include/qt6/QtCore/qobject.h \ + /usr/include/qt6/QtCore/qobject_impl.h \ + /usr/include/qt6/QtCore/qobjectcleanuphandler.h \ + /usr/include/qt6/QtCore/qobjectdefs.h \ + /usr/include/qt6/QtCore/qobjectdefs_impl.h \ + /usr/include/qt6/QtCore/qoperatingsystemversion.h \ + /usr/include/qt6/QtCore/qoverload.h \ + /usr/include/qt6/QtCore/qpair.h \ + /usr/include/qt6/QtCore/qparallelanimationgroup.h \ + /usr/include/qt6/QtCore/qpauseanimation.h \ + /usr/include/qt6/QtCore/qpermissions.h \ + /usr/include/qt6/QtCore/qplugin.h \ + /usr/include/qt6/QtCore/qpluginloader.h \ + /usr/include/qt6/QtCore/qpoint.h \ + /usr/include/qt6/QtCore/qpointer.h \ + /usr/include/qt6/QtCore/qprocess.h \ + /usr/include/qt6/QtCore/qprocessordetection.h \ + /usr/include/qt6/QtCore/qpromise.h \ + /usr/include/qt6/QtCore/qproperty.h \ + /usr/include/qt6/QtCore/qpropertyanimation.h \ + /usr/include/qt6/QtCore/qpropertyprivate.h \ + /usr/include/qt6/QtCore/qqueue.h \ + /usr/include/qt6/QtCore/qrandom.h \ + /usr/include/qt6/QtCore/qrangemodel.h \ + /usr/include/qt6/QtCore/qrangemodel_impl.h \ + /usr/include/qt6/QtCore/qreadwritelock.h \ + /usr/include/qt6/QtCore/qrect.h \ + /usr/include/qt6/QtCore/qrefcount.h \ + /usr/include/qt6/QtCore/qregularexpression.h \ + /usr/include/qt6/QtCore/qresource.h \ + /usr/include/qt6/QtCore/qresultstore.h \ + /usr/include/qt6/QtCore/qrunnable.h \ + /usr/include/qt6/QtCore/qsavefile.h \ + /usr/include/qt6/QtCore/qscopedpointer.h \ + /usr/include/qt6/QtCore/qscopedvaluerollback.h \ + /usr/include/qt6/QtCore/qscopeguard.h \ + /usr/include/qt6/QtCore/qsemaphore.h \ + /usr/include/qt6/QtCore/qsequentialanimationgroup.h \ + /usr/include/qt6/QtCore/qsequentialiterable.h \ + /usr/include/qt6/QtCore/qset.h \ + /usr/include/qt6/QtCore/qsettings.h \ + /usr/include/qt6/QtCore/qshareddata.h \ + /usr/include/qt6/QtCore/qshareddata_impl.h \ + /usr/include/qt6/QtCore/qsharedmemory.h \ + /usr/include/qt6/QtCore/qsharedpointer.h \ + /usr/include/qt6/QtCore/qsharedpointer_impl.h \ + /usr/include/qt6/QtCore/qsignalmapper.h \ + /usr/include/qt6/QtCore/qsimd.h \ + /usr/include/qt6/QtCore/qsize.h \ + /usr/include/qt6/QtCore/qsocketnotifier.h \ + /usr/include/qt6/QtCore/qsortfilterproxymodel.h \ + /usr/include/qt6/QtCore/qspan.h \ + /usr/include/qt6/QtCore/qstack.h \ + /usr/include/qt6/QtCore/qstandardpaths.h \ + /usr/include/qt6/QtCore/qstaticlatin1stringmatcher.h \ + /usr/include/qt6/QtCore/qstdlibdetection.h \ + /usr/include/qt6/QtCore/qstorageinfo.h \ + /usr/include/qt6/QtCore/qstring.h \ + /usr/include/qt6/QtCore/qstringalgorithms.h \ + /usr/include/qt6/QtCore/qstringbuilder.h \ + /usr/include/qt6/QtCore/qstringconverter.h \ + /usr/include/qt6/QtCore/qstringconverter_base.h \ + /usr/include/qt6/QtCore/qstringfwd.h \ + /usr/include/qt6/QtCore/qstringlist.h \ + /usr/include/qt6/QtCore/qstringlistmodel.h \ + /usr/include/qt6/QtCore/qstringliteral.h \ + /usr/include/qt6/QtCore/qstringmatcher.h \ + /usr/include/qt6/QtCore/qstringtokenizer.h \ + /usr/include/qt6/QtCore/qstringview.h \ + /usr/include/qt6/QtCore/qswap.h \ + /usr/include/qt6/QtCore/qsysinfo.h \ + /usr/include/qt6/QtCore/qsystemdetection.h \ + /usr/include/qt6/QtCore/qsystemsemaphore.h \ + /usr/include/qt6/QtCore/qtaggedpointer.h \ + /usr/include/qt6/QtCore/qtclasshelpermacros.h \ + /usr/include/qt6/QtCore/qtconfiginclude.h \ + /usr/include/qt6/QtCore/qtconfigmacros.h \ + /usr/include/qt6/QtCore/qtcore-config.h \ + /usr/include/qt6/QtCore/qtcoreexports.h \ + /usr/include/qt6/QtCore/qtcoreglobal.h \ + /usr/include/qt6/QtCore/qtcoreversion.h \ + /usr/include/qt6/QtCore/qtdeprecationdefinitions.h \ + /usr/include/qt6/QtCore/qtdeprecationmarkers.h \ + /usr/include/qt6/QtCore/qtemporarydir.h \ + /usr/include/qt6/QtCore/qtemporaryfile.h \ + /usr/include/qt6/QtCore/qtenvironmentvariables.h \ + /usr/include/qt6/QtCore/qtestsupport_core.h \ + /usr/include/qt6/QtCore/qtextboundaryfinder.h \ + /usr/include/qt6/QtCore/qtextstream.h \ + /usr/include/qt6/QtCore/qtformat_impl.h \ + /usr/include/qt6/QtCore/qthread.h \ + /usr/include/qt6/QtCore/qthreadpool.h \ + /usr/include/qt6/QtCore/qthreadstorage.h \ + /usr/include/qt6/QtCore/qtimeline.h \ + /usr/include/qt6/QtCore/qtimer.h \ + /usr/include/qt6/QtCore/qtimezone.h \ + /usr/include/qt6/QtCore/qtipccommon.h \ + /usr/include/qt6/QtCore/qtmetamacros.h \ + /usr/include/qt6/QtCore/qtmocconstants.h \ + /usr/include/qt6/QtCore/qtnoop.h \ + /usr/include/qt6/QtCore/qtpreprocessorsupport.h \ + /usr/include/qt6/QtCore/qtranslator.h \ + /usr/include/qt6/QtCore/qtransposeproxymodel.h \ + /usr/include/qt6/QtCore/qtresource.h \ + /usr/include/qt6/QtCore/qtsan_impl.h \ + /usr/include/qt6/QtCore/qtsymbolmacros.h \ + /usr/include/qt6/QtCore/qttranslation.h \ + /usr/include/qt6/QtCore/qttypetraits.h \ + /usr/include/qt6/QtCore/qtversion.h \ + /usr/include/qt6/QtCore/qtversionchecks.h \ + /usr/include/qt6/QtCore/qtypeinfo.h \ + /usr/include/qt6/QtCore/qtyperevision.h \ + /usr/include/qt6/QtCore/qtypes.h \ + /usr/include/qt6/QtCore/qurl.h \ + /usr/include/qt6/QtCore/qurlquery.h \ + /usr/include/qt6/QtCore/qutf8stringview.h \ + /usr/include/qt6/QtCore/quuid.h \ + /usr/include/qt6/QtCore/qvariant.h \ + /usr/include/qt6/QtCore/qvariantanimation.h \ + /usr/include/qt6/QtCore/qvarianthash.h \ + /usr/include/qt6/QtCore/qvariantlist.h \ + /usr/include/qt6/QtCore/qvariantmap.h \ + /usr/include/qt6/QtCore/qvarlengtharray.h \ + /usr/include/qt6/QtCore/qvector.h \ + /usr/include/qt6/QtCore/qversionnumber.h \ + /usr/include/qt6/QtCore/qversiontagging.h \ + /usr/include/qt6/QtCore/qwaitcondition.h \ + /usr/include/qt6/QtCore/qwineventnotifier.h \ + /usr/include/qt6/QtCore/qxmlstream.h \ + /usr/include/qt6/QtCore/qxpfunctional.h \ + /usr/include/qt6/QtCore/qxptype_traits.h \ + /usr/include/qt6/QtCore/qyieldcpu.h \ + /usr/include/qt6/QtSql/QSqlDatabase \ + /usr/include/qt6/QtSql/QSqlError \ + /usr/include/qt6/QtSql/QSqlQuery \ + /usr/include/qt6/QtSql/qsqldatabase.h \ + /usr/include/qt6/QtSql/qsqlerror.h \ + /usr/include/qt6/QtSql/qsqlquery.h \ + /usr/include/qt6/QtSql/qtsql-config.h \ + /usr/include/qt6/QtSql/qtsqlexports.h \ + /usr/include/qt6/QtSql/qtsqlglobal.h \ + /usr/include/qt6/QtTest/QtTest \ + /usr/include/qt6/QtTest/QtTestDepends \ + /usr/include/qt6/QtTest/qabstractitemmodeltester.h \ + /usr/include/qt6/QtTest/qbenchmark.h \ + /usr/include/qt6/QtTest/qbenchmarkmetric.h \ + /usr/include/qt6/QtTest/qsignalspy.h \ + /usr/include/qt6/QtTest/qtest.h \ + /usr/include/qt6/QtTest/qtestassert.h \ + /usr/include/qt6/QtTest/qtestcase.h \ + /usr/include/qt6/QtTest/qtestdata.h \ + /usr/include/qt6/QtTest/qtesteventloop.h \ + /usr/include/qt6/QtTest/qtestsystem.h \ + /usr/include/qt6/QtTest/qtesttostring.h \ + /usr/include/qt6/QtTest/qttestexports.h \ + /usr/include/qt6/QtTest/qttestglobal.h \ + /usr/include/qt6/QtTest/qttestlib-config.h \ + /usr/include/qt6/QtTest/qttestversion.h \ + /usr/include/sched.h \ + /usr/include/semaphore.h \ + /usr/include/stdc-predef.h \ + /usr/include/stdio.h \ + /usr/include/string.h \ + /usr/include/strings.h \ + /usr/include/sys/cdefs.h \ + /usr/include/sys/select.h \ + /usr/include/sys/single_threaded.h \ + /usr/include/sys/syscall.h \ + /usr/include/sys/time.h \ + /usr/include/sys/types.h \ + /usr/include/syscall.h \ + /usr/include/time.h \ + /usr/include/unistd.h \ + /usr/include/wchar.h \ + /usr/include/wctype.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/adxintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/amxavx512intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/amxbf16intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/amxcomplexintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/amxfp16intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/amxfp8intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/amxint8intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/amxmovrsintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/amxtf32intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/amxtileintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/amxtransposeintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2-512bf16intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2-512convertintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2-512mediaintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2-512minmaxintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2-512satcvtintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2bf16intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2convertintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2copyintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2mediaintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2minmaxintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2satcvtintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx2intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512bf16intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512bf16vlintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512bitalgintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512bitalgvlintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512bwintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512cdintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512dqintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512fintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512fp16intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512fp16vlintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512ifmaintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512ifmavlintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vbmi2intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vbmi2vlintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vbmiintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vbmivlintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vlbwintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vldqintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vlintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vnniintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vnnivlintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vp2intersectintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vp2intersectvlintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vpopcntdqintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vpopcntdqvlintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avxifmaintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avxintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avxneconvertintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avxvnniint16intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avxvnniint8intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avxvnniintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/bmi2intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/bmiintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/cetintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/cldemoteintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/clflushoptintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/clwbintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/clzerointrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/cmpccxaddintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/emmintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/enqcmdintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/f16cintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/fmaintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/fxsrintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/gfniintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/hresetintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/ia32intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/immintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/keylockerintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/limits.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/lwpintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/lzcntintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/mm_malloc.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/mmintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/movdirintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/movrsintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/mwaitintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/mwaitxintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/pconfigintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/pkuintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/pmmintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/popcntintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/prfchiintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/prfchwintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/raointintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/rdseedintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/rtmintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/serializeintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/sgxintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/sha512intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/shaintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/sm3intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/sm4intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/smmintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/stdarg.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/stdbool.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/stddef.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/stdint.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/syslimits.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/tbmintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/tmmintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/tsxldtrkintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/uintrintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/usermsrintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/vaesintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/vpclmulqdqintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/waitpkgintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/wbnoinvdintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/wmmintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/x86gprintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/xmmintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/xsavecintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/xsaveintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/xsaveoptintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/xsavesintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/xtestintrin.h \ + /usr/lib64/cmake/Qt6/Qt6Config.cmake \ + /usr/lib64/cmake/Qt6/Qt6ConfigExtras.cmake \ + /usr/lib64/cmake/Qt6/Qt6ConfigVersion.cmake \ + /usr/lib64/cmake/Qt6/Qt6ConfigVersionImpl.cmake \ + /usr/lib64/cmake/Qt6/Qt6Dependencies.cmake \ + /usr/lib64/cmake/Qt6/Qt6Targets.cmake \ + /usr/lib64/cmake/Qt6/Qt6VersionlessAliasTargets.cmake \ + /usr/lib64/cmake/Qt6/QtFeature.cmake \ + /usr/lib64/cmake/Qt6/QtFeatureCommon.cmake \ + /usr/lib64/cmake/Qt6/QtInstallPaths.cmake \ + /usr/lib64/cmake/Qt6/QtPublicAndroidHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicAppleHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicCMakeEarlyPolicyHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicCMakeHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicCMakeVersionHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicDependencyHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicExternalProjectHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicFinalizerHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicFindPackageHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicGitHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicPluginHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicPluginHelpers_v2.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomAttributionHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomBuildToolHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomCommonGenerationHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomCpeHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomCycloneDXHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomDepHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomDocumentNamespaceHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomExternalReferenceHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomFileHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomGenerationCycloneDXHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomGenerationHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomLicenseHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomOpsHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomPurlHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomPythonHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomQtEntityHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomRelationshipHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomSystemDepHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicTargetHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicTestHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicToolHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicWalkLibsHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicWindowsHelpers.cmake \ + /usr/lib64/cmake/Qt6Test/Qt6TestAdditionalTargetInfo.cmake \ + /usr/lib64/cmake/Qt6Test/Qt6TestConfig.cmake \ + /usr/lib64/cmake/Qt6Test/Qt6TestConfigVersion.cmake \ + /usr/lib64/cmake/Qt6Test/Qt6TestConfigVersionImpl.cmake \ + /usr/lib64/cmake/Qt6Test/Qt6TestDependencies.cmake \ + /usr/lib64/cmake/Qt6Test/Qt6TestTargets-relwithdebinfo.cmake \ + /usr/lib64/cmake/Qt6Test/Qt6TestTargets.cmake \ + /usr/lib64/cmake/Qt6Test/Qt6TestVersionlessAliasTargets.cmake \ + /usr/lib64/cmake/Qt6Test/QtTestProperties.cmake \ + /usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake \ + /usr/share/cmake/Modules/CheckCXXCompilerFlag.cmake \ + /usr/bin/cmake diff --git a/build-linux/tests/test_db_autogen/include/test_db.moc b/build-linux/tests/test_db_autogen/include/test_db.moc new file mode 100644 index 00000000..5e999c76 --- /dev/null +++ b/build-linux/tests/test_db_autogen/include/test_db.moc @@ -0,0 +1,136 @@ +/**************************************************************************** +** Meta object code from reading C++ file 'test_db.cpp' +** +** Created by: The Qt Meta Object Compiler version 69 (Qt 6.10.3) +** +** WARNING! All changes made in this file will be lost! +*****************************************************************************/ + +#include + +#include + +#include + + +#include +#if !defined(Q_MOC_OUTPUT_REVISION) +#error "The header file 'test_db.cpp' doesn't include ." +#elif Q_MOC_OUTPUT_REVISION != 69 +#error "This file was generated using the moc from 6.10.3. It" +#error "cannot be used with the include files from this version of Qt." +#error "(The moc has changed too much.)" +#endif + +#ifndef Q_CONSTINIT +#define Q_CONSTINIT +#endif + +QT_WARNING_PUSH +QT_WARNING_DISABLE_DEPRECATED +QT_WARNING_DISABLE_GCC("-Wuseless-cast") +namespace { +struct qt_meta_tag_ZN6TestDBE_t {}; +} // unnamed namespace + +template <> constexpr inline auto TestDB::qt_create_metaobjectdata() +{ + namespace QMC = QtMocConstants; + QtMocHelpers::StringRefStorage qt_stringData { + "TestDB", + "initTestCase", + "", + "testCreateFolder", + "testUpsertAsset", + "testTransactions", + "testForeignKeyConstraints", + "testModelDataAccess", + "testSearchFiltering", + "cleanupTestCase" + }; + + QtMocHelpers::UintData qt_methods { + // Slot 'initTestCase' + QtMocHelpers::SlotData(1, 2, QMC::AccessPrivate, QMetaType::Void), + // Slot 'testCreateFolder' + QtMocHelpers::SlotData(3, 2, QMC::AccessPrivate, QMetaType::Void), + // Slot 'testUpsertAsset' + QtMocHelpers::SlotData(4, 2, QMC::AccessPrivate, QMetaType::Void), + // Slot 'testTransactions' + QtMocHelpers::SlotData(5, 2, QMC::AccessPrivate, QMetaType::Void), + // Slot 'testForeignKeyConstraints' + QtMocHelpers::SlotData(6, 2, QMC::AccessPrivate, QMetaType::Void), + // Slot 'testModelDataAccess' + QtMocHelpers::SlotData(7, 2, QMC::AccessPrivate, QMetaType::Void), + // Slot 'testSearchFiltering' + QtMocHelpers::SlotData(8, 2, QMC::AccessPrivate, QMetaType::Void), + // Slot 'cleanupTestCase' + QtMocHelpers::SlotData(9, 2, QMC::AccessPrivate, QMetaType::Void), + }; + QtMocHelpers::UintData qt_properties { + }; + QtMocHelpers::UintData qt_enums { + }; + return QtMocHelpers::metaObjectData(QMC::MetaObjectFlag{}, qt_stringData, + qt_methods, qt_properties, qt_enums); +} +Q_CONSTINIT const QMetaObject TestDB::staticMetaObject = { { + QMetaObject::SuperData::link(), + qt_staticMetaObjectStaticContent.stringdata, + qt_staticMetaObjectStaticContent.data, + qt_static_metacall, + nullptr, + qt_staticMetaObjectRelocatingContent.metaTypes, + nullptr +} }; + +void TestDB::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) +{ + auto *_t = static_cast(_o); + if (_c == QMetaObject::InvokeMetaMethod) { + switch (_id) { + case 0: _t->initTestCase(); break; + case 1: _t->testCreateFolder(); break; + case 2: _t->testUpsertAsset(); break; + case 3: _t->testTransactions(); break; + case 4: _t->testForeignKeyConstraints(); break; + case 5: _t->testModelDataAccess(); break; + case 6: _t->testSearchFiltering(); break; + case 7: _t->cleanupTestCase(); break; + default: ; + } + } + (void)_a; +} + +const QMetaObject *TestDB::metaObject() const +{ + return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject; +} + +void *TestDB::qt_metacast(const char *_clname) +{ + if (!_clname) return nullptr; + if (!strcmp(_clname, qt_staticMetaObjectStaticContent.strings)) + return static_cast(this); + return QObject::qt_metacast(_clname); +} + +int TestDB::qt_metacall(QMetaObject::Call _c, int _id, void **_a) +{ + _id = QObject::qt_metacall(_c, _id, _a); + if (_id < 0) + return _id; + if (_c == QMetaObject::InvokeMetaMethod) { + if (_id < 8) + qt_static_metacall(this, _c, _id, _a); + _id -= 8; + } + if (_c == QMetaObject::RegisterMethodArgumentMetaType) { + if (_id < 8) + *reinterpret_cast(_a[0]) = QMetaType(); + _id -= 8; + } + return _id; +} +QT_WARNING_POP diff --git a/build-linux/tests/test_db_autogen/moc_predefs.h b/build-linux/tests/test_db_autogen/moc_predefs.h new file mode 100644 index 00000000..4e7702df --- /dev/null +++ b/build-linux/tests/test_db_autogen/moc_predefs.h @@ -0,0 +1,503 @@ +#define __DBL_MIN_EXP__ (-1021) +#define __LDBL_MANT_DIG__ 64 +#define __cpp_nontype_template_parameter_auto 201606L +#define __UINT_LEAST16_MAX__ 0xffff +#define __FLT16_HAS_QUIET_NAN__ 1 +#define __ATOMIC_ACQUIRE 2 +#define QT_TESTCASE_BUILDDIR "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests" +#define __FLT128_MAX_10_EXP__ 4932 +#define __FLT_MIN__ 1.17549435082228750796873653722224568e-38F +#define __GCC_IEC_559_COMPLEX 2 +#define __cpp_aggregate_nsdmi 201304L +#define __UINT_LEAST8_TYPE__ unsigned char +#define __SIZEOF_FLOAT80__ 16 +#define __BFLT16_DENORM_MIN__ 9.18354961579912115600575419704879436e-41BF16 +#define __cpp_impl_three_way_comparison 201907L +#define __INTMAX_C(c) c ## L +#define __CHAR_BIT__ 8 +#define __cpp_designated_initializers 201707L +#define __UINT8_MAX__ 0xff +#define __SCHAR_WIDTH__ 8 +#define __WINT_MAX__ 0xffffffffU +#define __FLT32_MIN_EXP__ (-125) +#define __cpp_static_assert 201411L +#define __BFLT16_MIN_10_EXP__ (-37) +#define __cpp_inheriting_constructors 201511L +#define __ORDER_LITTLE_ENDIAN__ 1234 +#define __WCHAR_MAX__ 0x7fffffff +#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_2 1 +#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_4 1 +#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_8 1 +#define __GCC_ATOMIC_CHAR_LOCK_FREE 2 +#define __GCC_IEC_559 2 +#define __FLT32X_DECIMAL_DIG__ 17 +#define TLRENDER_OIIO 1 +#define __FLT_EVAL_METHOD__ 0 +#define __cpp_binary_literals 201304L +#define __FLT64_DECIMAL_DIG__ 17 +#define __cpp_noexcept_function_type 201510L +#define __GCC_ATOMIC_CHAR32_T_LOCK_FREE 2 +#define __cpp_variadic_templates 200704L +#define __UINT_FAST64_MAX__ 0xffffffffffffffffUL +#define __SIG_ATOMIC_TYPE__ int +#define __DBL_MIN_10_EXP__ (-307) +#define __FINITE_MATH_ONLY__ 0 +#define __cpp_variable_templates 201304L +#define __FLT32X_MAX_EXP__ 1024 +#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_1 1 +#define __FLT32_HAS_DENORM__ 1 +#define __UINT_FAST8_MAX__ 0xff +#define __cpp_rvalue_reference 200610L +#define __cpp_nested_namespace_definitions 201411L +#define __DEC64_MAX_EXP__ 385 +#define __INT8_C(c) c +#define __LDBL_HAS_INFINITY__ 1 +#define __INT_LEAST8_WIDTH__ 8 +#define __cpp_variadic_using 201611L +#define __UINT_LEAST64_MAX__ 0xffffffffffffffffUL +#define __INT_LEAST8_MAX__ 0x7f +#define __cpp_attributes 200809L +#define __cpp_capture_star_this 201603L +#define __SHRT_MAX__ 0x7fff +#define __LDBL_MAX__ 1.18973149535723176502126385303097021e+4932L +#define __cpp_impl_coroutine 201902L +#define __FLT64X_MAX_10_EXP__ 4932 +#define __cpp_if_constexpr 201606L +#define __BFLT16_MAX_10_EXP__ 38 +#define __BFLT16_MAX_EXP__ 128 +#define __LDBL_IS_IEC_60559__ 1 +#define QT_NO_DEBUG 1 +#define __FLT64X_HAS_QUIET_NAN__ 1 +#define QT_TESTLIB_LIB 1 +#define TLRENDER_SDL2 1 +#define __UINT_LEAST8_MAX__ 0xff +#define __GCC_ATOMIC_BOOL_LOCK_FREE 2 +#define __FLT128_DENORM_MIN__ 6.47517511943802511092443895822764655e-4966F128 +#define __UINTMAX_TYPE__ long unsigned int +#define __cpp_nsdmi 200809L +#define __BFLT16_DECIMAL_DIG__ 4 +#define __linux 1 +#define __DEC32_EPSILON__ 1E-6DF +#define __FLT_EVAL_METHOD_TS_18661_3__ 0 +#define __UINT32_MAX__ 0xffffffffU +#define __GXX_EXPERIMENTAL_CXX0X__ 1 +#define __DBL_DENORM_MIN__ double(4.94065645841246544176568792868221372e-324L) +#define __FLT128_MIN_EXP__ (-16381) +#define __DEC64X_MAX_EXP__ 6145 +#define __WINT_MIN__ 0U +#define __FLT128_MIN_10_EXP__ (-4931) +#define __FLT32X_IS_IEC_60559__ 1 +#define __INT_LEAST16_WIDTH__ 16 +#define __SCHAR_MAX__ 0x7f +#define __FLT128_MANT_DIG__ 113 +#define __WCHAR_MIN__ (-__WCHAR_MAX__ - 1) +#define __INT64_C(c) c ## L +#define __cpp_impl_destroying_delete 201806L +#define __GCC_ATOMIC_POINTER_LOCK_FREE 2 +#define TLRENDER_JPEG 1 +#define __ATOMIC_SEQ_CST 5 +#define __unix 1 +#define __INT_LEAST64_MAX__ 0x7fffffffffffffffL +#define __FLT32X_MANT_DIG__ 53 +#define __GCC_ATOMIC_CHAR16_T_LOCK_FREE 2 +#define __cpp_aligned_new 201606L +#define __FLT32_MAX_10_EXP__ 38 +#define __FLT64X_EPSILON__ 1.08420217248550443400745280086994171e-19F64x +#define __STDC_HOSTED__ 1 +#define __DEC64_MIN_EXP__ (-382) +#define TLRENDER_PNG 1 +#define __cpp_decltype_auto 201304L +#define __DBL_DIG__ 15 +#define __STDC_EMBED_EMPTY__ 2 +#define __FLT_EPSILON__ 1.19209289550781250000000000000000000e-7F +#define __cpp_char8_t 202207L +#define __GXX_WEAK__ 1 +#define __SHRT_WIDTH__ 16 +#define __FLT32_IS_IEC_60559__ 1 +#define __LDBL_MIN__ 3.36210314311209350626267781732175260e-4932L +#define __DBL_IS_IEC_60559__ 1 +#define __DEC32_MAX__ 9.999999E96DF +#define __CHAR8_TYPE__ unsigned char +#define __cpp_threadsafe_static_init 200806L +#define __cpp_enumerator_attributes 201411L +#define TLRENDER_EXR 1 +#define __FLT64X_DENORM_MIN__ 3.64519953188247460252840593361941982e-4951F64x +#define __FLT32X_HAS_INFINITY__ 1 +#define __unix__ 1 +#define __INT_WIDTH__ 32 +#define __STDC_IEC_559__ 1 +#define __STDC_ISO_10646__ 201706L +#define __GCC_ATOMIC_CHAR8_T_LOCK_FREE 2 +#define __DECIMAL_DIG__ 21 +#define __STDC_IEC_559_COMPLEX__ 1 +#define __FLT64_EPSILON__ 2.22044604925031308084726333618164062e-16F64 +#define __gnu_linux__ 1 +#define __INT16_MAX__ 0x7fff +#define __FLT64_MIN_EXP__ (-1021) +#define __cpp_using_enum 201907L +#define __DEC64X_EPSILON__ 1E-33D64x +#define __FLT64X_MIN_10_EXP__ (-4931) +#define __LDBL_HAS_QUIET_NAN__ 1 +#define __FLT16_MIN_EXP__ (-13) +#define __FLT64_MANT_DIG__ 53 +#define __cpp_consteval 202211L +#define __FLT64X_MANT_DIG__ 64 +#define FTK_API_GL_4_1 1 +#define __BFLT16_DIG__ 2 +#define __GNUC__ 15 +#define __GXX_RTTI 1 +#define TLRENDER_FFMPEG_PLUGIN 1 +#define __MMX__ 1 +#define __FLT_HAS_DENORM__ 1 +#define __SIZEOF_LONG_DOUBLE__ 16 +#define __BIGGEST_ALIGNMENT__ 16 +#define __STDC_UTF_16__ 1 +#define __FLT64_MAX_10_EXP__ 308 +#define __BFLT16_IS_IEC_60559__ 0 +#define __FLT16_MAX_10_EXP__ 4 +#define __cpp_delegating_constructors 200604L +#define __DBL_MAX__ double(1.79769313486231570814527423731704357e+308L) +#define __cpp_raw_strings 200710L +#define __INT_FAST32_MAX__ 0x7fffffffffffffffL +#define __DBL_HAS_INFINITY__ 1 +#define __INT64_MAX__ 0x7fffffffffffffffL +#define __SIZEOF_FLOAT__ 4 +#define __HAVE_SPECULATION_SAFE_VALUE 1 +#define __cpp_fold_expressions 201603L +#define __DEC32_MIN_EXP__ (-94) +#define __INTPTR_WIDTH__ 64 +#define __UINT_LEAST32_MAX__ 0xffffffffU +#define __FLT32X_HAS_DENORM__ 1 +#define __INT_FAST16_TYPE__ long int +#define __MMX_WITH_SSE__ 1 +#define __LDBL_HAS_DENORM__ 1 +#define __SEG_GS 1 +#define __BFLT16_EPSILON__ 7.81250000000000000000000000000000000e-3BF16 +#define __cplusplus 202002L +#define __cpp_ref_qualifiers 200710L +#define __DEC32_MIN__ 1E-95DF +#define __DEPRECATED 1 +#define __cpp_rvalue_references 200610L +#define __DBL_MAX_EXP__ 1024 +#define __WCHAR_WIDTH__ 32 +#define __FLT32_MAX__ 3.40282346638528859811704183484516925e+38F32 +#define __DEC128_EPSILON__ 1E-33DL +#define __FLT16_DECIMAL_DIG__ 5 +#define __SSE2_MATH__ 1 +#define __ATOMIC_HLE_RELEASE 131072 +#define __PTRDIFF_MAX__ 0x7fffffffffffffffL +#define __amd64 1 +#define __DEC64X_MAX__ 9.999999999999999999999999999999999E6144D64x +#define __ATOMIC_HLE_ACQUIRE 65536 +#define __GNUG__ 15 +#define __LONG_LONG_MAX__ 0x7fffffffffffffffLL +#define __SIZEOF_SIZE_T__ 8 +#define __BFLT16_HAS_INFINITY__ 1 +#define __FLT64X_MIN_EXP__ (-16381) +#define __SIZEOF_WINT_T__ 4 +#define __FLT32X_DIG__ 15 +#define __LONG_LONG_WIDTH__ 64 +#define QT_TESTCASE_SOURCEDIR "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests" +#define __cpp_initializer_lists 200806L +#define __FLT32_MAX_EXP__ 128 +#define ABI_ID "ELF" +#define __cpp_hex_float 201603L +#define __GXX_ABI_VERSION 1020 +#define __FLT_MIN_EXP__ (-125) +#define __GCC_HAVE_DWARF2_CFI_ASM 1 +#define TLRENDER_OCIO 1 +#define __x86_64 1 +#define __cpp_lambdas 200907L +#define __INT_FAST64_TYPE__ long int +#define __BFLT16_MAX__ 3.38953138925153547590470800371487867e+38BF16 +#define __FLT64_DENORM_MIN__ 4.94065645841246544176568792868221372e-324F64 +#define __cpp_template_auto 201606L +#define __FLT16_DENORM_MIN__ 5.96046447753906250000000000000000000e-8F16 +#define __FLT128_EPSILON__ 1.92592994438723585305597794258492732e-34F128 +#define __FLT64X_NORM_MAX__ 1.18973149535723176502126385303097021e+4932F64x +#define __SIZEOF_POINTER__ 8 +#define __SIZE_TYPE__ long unsigned int +#define __LP64__ 1 +#define __DBL_HAS_QUIET_NAN__ 1 +#define __FLT32X_EPSILON__ 2.22044604925031308084726333618164062e-16F32x +#define __LDBL_MAX_EXP__ 16384 +#define __DECIMAL_BID_FORMAT__ 1 +#define __FLT64_MIN_10_EXP__ (-307) +#define __FLT16_MIN_10_EXP__ (-4) +#define __FLT64X_DECIMAL_DIG__ 21 +#define __DEC128_MIN__ 1E-6143DL +#define __REGISTER_PREFIX__ +#define __UINT16_MAX__ 0xffff +#define __FLT128_HAS_INFINITY__ 1 +#define __FLT32_MIN__ 1.17549435082228750796873653722224568e-38F32 +#define __UINT8_TYPE__ unsigned char +#define __FLT_DIG__ 6 +#define __NO_INLINE__ 1 +#define __DEC_EVAL_METHOD__ 2 +#define __FLT_MANT_DIG__ 24 +#define __LDBL_DECIMAL_DIG__ 21 +#define __VERSION__ "15.2.1 20260123 (Red Hat 15.2.1-7)" +#define __UINT64_C(c) c ## UL +#define __cpp_unicode_characters 201411L +#define __DEC64X_MIN__ 1E-6143D64x +#define _STDC_PREDEF_H 1 +#define __INT_LEAST32_MAX__ 0x7fffffff +#define __GCC_ATOMIC_INT_LOCK_FREE 2 +#define __FLT128_MAX_EXP__ 16384 +#define __cpp_conditional_explicit 201806L +#define __FLT32_MANT_DIG__ 24 +#define __cpp_decltype 200707L +#define __FLOAT_WORD_ORDER__ __ORDER_LITTLE_ENDIAN__ +#define SIZEOF_DPTR (sizeof(void*)) +#define __FLT32X_MIN_EXP__ (-1021) +#define __cpp_aggregate_paren_init 201902L +#define __STDC_IEC_60559_COMPLEX__ 201404L +#define __cpp_aggregate_bases 201603L +#define __BFLT16_MIN__ 1.17549435082228750796873653722224568e-38BF16 +#define __FLT128_HAS_DENORM__ 1 +#define __FLT32_DECIMAL_DIG__ 9 +#define __FLT128_DIG__ 33 +#define __INT32_C(c) c +#define __DEC64_EPSILON__ 1E-15DD +#define __ORDER_PDP_ENDIAN__ 3412 +#define __DEC128_MIN_EXP__ (-6142) +#define __DEC128_MAX__ 9.999999999999999999999999999999999E6144DL +#define __cpp_constinit 201907L +#define __INT_FAST32_TYPE__ long int +#define __UINT_LEAST16_TYPE__ short unsigned int +#define __DEC64X_MANT_DIG__ 34 +#define __DEC128_MAX_EXP__ 6145 +#define unix 1 +#define __DBL_HAS_DENORM__ 1 +#define __cpp_rtti 199711L +#define __UINT64_MAX__ 0xffffffffffffffffUL +#define __FLT_IS_IEC_60559__ 1 +#define __GNUC_WIDE_EXECUTION_CHARSET_NAME "UTF-32LE" +#define __FLT64X_DIG__ 18 +#define __INT8_TYPE__ signed char +#define __cpp_digit_separators 201309L +#define __ELF__ 1 +#define __GCC_ASM_FLAG_OUTPUTS__ 1 +#define __UINT32_TYPE__ unsigned int +#define __BFLT16_HAS_QUIET_NAN__ 1 +#define __FLT_RADIX__ 2 +#define __INT_LEAST16_TYPE__ short int +#define __LDBL_EPSILON__ 1.08420217248550443400745280086994171e-19L +#define __UINTMAX_C(c) c ## UL +#define __GNUC_RH_RELEASE__ 7 +#define __FLT16_DIG__ 3 +#define __k8 1 +#define __FLT32X_MIN__ 2.22507385850720138309023271733240406e-308F32x +#define __SIG_ATOMIC_MAX__ 0x7fffffff +#define __cpp_constexpr 202002L +#define __GCC_ATOMIC_WCHAR_T_LOCK_FREE 2 +#define __USER_LABEL_PREFIX__ +#define __STDC_IEC_60559_BFP__ 201404L +#define __SIZEOF_PTRDIFF_T__ 8 +#define __FLT64X_HAS_INFINITY__ 1 +#define __SIZEOF_LONG__ 8 +#define __LDBL_DIG__ 18 +#define __FLT64_IS_IEC_60559__ 1 +#define __x86_64__ 1 +#define __FLT16_IS_IEC_60559__ 1 +#define __FLT16_MAX_EXP__ 16 +#define __DEC32_SUBNORMAL_MIN__ 0.000001E-95DF +#define __STDC_EMBED_FOUND__ 1 +#define __INT_FAST16_MAX__ 0x7fffffffffffffffL +#define __GCC_CONSTRUCTIVE_SIZE 64 +#define __FLT64_DIG__ 15 +#define __UINT_FAST32_MAX__ 0xffffffffffffffffUL +#define __UINT_LEAST64_TYPE__ long unsigned int +#define __FLT16_EPSILON__ 9.76562500000000000000000000000000000e-4F16 +#define __FLT_HAS_QUIET_NAN__ 1 +#define __FLT_MAX_10_EXP__ 38 +#define __FLT64X_HAS_DENORM__ 1 +#define __DEC128_SUBNORMAL_MIN__ 0.000000000000000000000000000000001E-6143DL +#define __FLT_HAS_INFINITY__ 1 +#define __GNUC_EXECUTION_CHARSET_NAME "UTF-8" +#define __cpp_unicode_literals 200710L +#define __UINT_FAST16_TYPE__ long unsigned int +#define __DEC64_MAX__ 9.999999999999999E384DD +#define __STDC_EMBED_NOT_FOUND__ 0 +#define __INT_FAST32_WIDTH__ 64 +#define __CHAR16_TYPE__ short unsigned int +#define __PRAGMA_REDEFINE_EXTNAME 1 +#define __DEC64X_SUBNORMAL_MIN__ 0.000000000000000000000000000000001E-6143D64x +#define __SIZE_WIDTH__ 64 +#define __SEG_FS 1 +#define __INT_LEAST16_MAX__ 0x7fff +#define __FLT16_NORM_MAX__ 6.55040000000000000000000000000000000e+4F16 +#define __DEC64_MANT_DIG__ 16 +#define __FLT32_DENORM_MIN__ 1.40129846432481707092372958328991613e-45F32 +#define __SIG_ATOMIC_WIDTH__ 32 +#define __GCC_DESTRUCTIVE_SIZE 64 +#define __INT_LEAST64_TYPE__ long int +#define __INT16_TYPE__ short int +#define __INT_LEAST8_TYPE__ signed char +#define __FLT16_MAX__ 6.55040000000000000000000000000000000e+4F16 +#define __FLT128_MIN__ 3.36210314311209350626267781732175260e-4932F128 +#define __cpp_structured_bindings 201606L +#define __SIZEOF_INT__ 4 +#define __DEC32_MAX_EXP__ 97 +#define __INT_FAST8_MAX__ 0x7f +#define __FLT128_MAX__ 1.18973149535723176508575932662800702e+4932F128 +#define __INTPTR_MAX__ 0x7fffffffffffffffL +#define __cpp_sized_deallocation 201309L +#define __cpp_guaranteed_copy_elision 201606L +#define linux 1 +#define __FLT64_HAS_QUIET_NAN__ 1 +#define __FLT32_MIN_10_EXP__ (-37) +#define __EXCEPTIONS 1 +#define __UINT16_C(c) c +#define __PTRDIFF_WIDTH__ 64 +#define __cpp_range_based_for 201603L +#define __INT_FAST16_WIDTH__ 64 +#define __FLT64_HAS_INFINITY__ 1 +#define __FLT64X_MAX__ 1.18973149535723176502126385303097021e+4932F64x +#define __FLT16_HAS_INFINITY__ 1 +#define __STDCPP_DEFAULT_NEW_ALIGNMENT__ 16 +#define __SIG_ATOMIC_MIN__ (-__SIG_ATOMIC_MAX__ - 1) +#define __code_model_small__ 1 +#define __GCC_ATOMIC_LONG_LOCK_FREE 2 +#define __cpp_nontype_template_args 201911L +#define __DEC32_MANT_DIG__ 7 +#define __k8__ 1 +#define __INTPTR_TYPE__ long int +#define __UINT16_TYPE__ short unsigned int +#define __WCHAR_TYPE__ int +#define __UINTPTR_MAX__ 0xffffffffffffffffUL +#define __INT_FAST64_WIDTH__ 64 +#define __cpp_nontype_template_parameter_class 201806L +#define __cpp_concepts 202002L +#define __INT_FAST64_MAX__ 0x7fffffffffffffffL +#define __GCC_ATOMIC_TEST_AND_SET_TRUEVAL 1 +#define __FLT_NORM_MAX__ 3.40282346638528859811704183484516925e+38F +#define __FLT32_HAS_INFINITY__ 1 +#define __FLT64X_MAX_EXP__ 16384 +#define __UINT_FAST64_TYPE__ long unsigned int +#define __cpp_constexpr_in_decltype 201711L +#define __cpp_inline_variables 201606L +#define __BFLT16_MIN_EXP__ (-125) +#define __INT_MAX__ 0x7fffffff +#define __linux__ 1 +#define __INT64_TYPE__ long int +#define __FLT_MAX_EXP__ 128 +#define __ORDER_BIG_ENDIAN__ 4321 +#define __DBL_MANT_DIG__ 53 +#define QT_CORE_LIB 1 +#define __SIZEOF_FLOAT128__ 16 +#define __BFLT16_MANT_DIG__ 8 +#define __DEC64_MIN__ 1E-383DD +#define __WINT_TYPE__ unsigned int +#define __UINT_LEAST32_TYPE__ unsigned int +#define __SIZEOF_SHORT__ 2 +#define __FLT32_NORM_MAX__ 3.40282346638528859811704183484516925e+38F32 +#define __SSE__ 1 +#define __LDBL_MIN_EXP__ (-16381) +#define __FLT64_MAX__ 1.79769313486231570814527423731704357e+308F64 +#define __DEC64X_MIN_EXP__ (-6142) +#define __amd64__ 1 +#define __WINT_WIDTH__ 32 +#define __INT_LEAST64_WIDTH__ 64 +#define __FLT32X_MAX_10_EXP__ 308 +#define __cpp_namespace_attributes 201411L +#define __SIZEOF_INT128__ 16 +#define __FLT16_MIN__ 6.10351562500000000000000000000000000e-5F16 +#define __FLT64X_IS_IEC_60559__ 1 +#define __GXX_CONSTEXPR_ASM__ 1 +#define __LDBL_MAX_10_EXP__ 4932 +#define __ATOMIC_RELAXED 0 +#define __DBL_EPSILON__ double(2.22044604925031308084726333618164062e-16L) +#define __INT_LEAST32_TYPE__ int +#define _LP64 1 +#define __UINT8_C(c) c +#define __FLT64_MAX_EXP__ 1024 +#define __cpp_return_type_deduction 201304L +#define __SIZEOF_WCHAR_T__ 4 +#define __GNUC_PATCHLEVEL__ 1 +#define __FLT128_NORM_MAX__ 1.18973149535723176508575932662800702e+4932F128 +#define __FLT64_NORM_MAX__ 1.79769313486231570814527423731704357e+308F64 +#define __FLT128_HAS_QUIET_NAN__ 1 +#define __INTMAX_MAX__ 0x7fffffffffffffffL +#define TLRENDER_TIFF 1 +#define __INT_FAST8_TYPE__ signed char +#define __FLT64X_MIN__ 3.36210314311209350626267781732175260e-4932F64x +#define QT_SQL_LIB 1 +#define __STDCPP_THREADS__ 1 +#define __BFLT16_HAS_DENORM__ 1 +#define __GNUC_STDC_INLINE__ 1 +#define __FLT64_HAS_DENORM__ 1 +#define __FLT32_EPSILON__ 1.19209289550781250000000000000000000e-7F32 +#define __FLT16_HAS_DENORM__ 1 +#define __DBL_DECIMAL_DIG__ 17 +#define __STDC_UTF_32__ 1 +#define __INT_FAST8_WIDTH__ 8 +#define __FXSR__ 1 +#define __FLT32X_MAX__ 1.79769313486231570814527423731704357e+308F32x +#define __DBL_NORM_MAX__ double(1.79769313486231570814527423731704357e+308L) +#define __BYTE_ORDER__ __ORDER_LITTLE_ENDIAN__ +#define TLRENDER_FFMPEG 1 +#define __INTMAX_WIDTH__ 64 +#define __cpp_runtime_arrays 198712L +#define __FLT32_DIG__ 6 +#define __UINT64_TYPE__ long unsigned int +#define __UINT32_C(c) c ## U +#define __cpp_alias_templates 200704L +#define __cpp_constexpr_dynamic_alloc 201907L +#define __FLT_DENORM_MIN__ 1.40129846432481707092372958328991613e-45F +#define __FLT128_IS_IEC_60559__ 1 +#define __INT8_MAX__ 0x7f +#define __LONG_WIDTH__ 64 +#define __DBL_MIN__ double(2.22507385850720138309023271733240406e-308L) +#define __INT32_MAX__ 0x7fffffff +#define __UINT_FAST32_TYPE__ long unsigned int +#define __FLT16_MANT_DIG__ 11 +#define __FLT32X_NORM_MAX__ 1.79769313486231570814527423731704357e+308F32x +#define __CHAR32_TYPE__ unsigned int +#define __FLT_MAX__ 3.40282346638528859811704183484516925e+38F +#define __SSE2__ 1 +#define __cpp_deduction_guides 201907L +#define __BFLT16_NORM_MAX__ 3.38953138925153547590470800371487867e+38BF16 +#define __INT32_TYPE__ int +#define __SIZEOF_DOUBLE__ 8 +#define __cpp_exceptions 199711L +#define __FLT_MIN_10_EXP__ (-37) +#define __FLT64_MIN__ 2.22507385850720138309023271733240406e-308F64 +#define __INT_LEAST32_WIDTH__ 32 +#define __INTMAX_TYPE__ long int +#define __GLIBCXX_BITSIZE_INT_N_0 128 +#define __FLT32X_HAS_QUIET_NAN__ 1 +#define __ATOMIC_CONSUME 1 +#define __GNUC_MINOR__ 2 +#define __GLIBCXX_TYPE_INT_N_0 __int128 +#define __UINTMAX_MAX__ 0xffffffffffffffffUL +#define __FLT32X_DENORM_MIN__ 4.94065645841246544176568792868221372e-324F32x +#define __cpp_template_template_args 201611L +#define __DBL_MAX_10_EXP__ 308 +#define __LDBL_DENORM_MIN__ 3.64519953188247460252840593361941982e-4951L +#define __INT16_C(c) c +#define __STDC__ 1 +#define __PTRDIFF_TYPE__ long int +#define __LONG_MAX__ 0x7fffffffffffffffL +#define __FLT32X_MIN_10_EXP__ (-307) +#define __UINTPTR_TYPE__ long unsigned int +#define __DEC64_SUBNORMAL_MIN__ 0.000000000000001E-383DD +#define __DEC128_MANT_DIG__ 34 +#define __LDBL_MIN_10_EXP__ (-4931) +#define __cpp_generic_lambdas 201707L +#define __SSE_MATH__ 1 +#define __SIZEOF_LONG_LONG__ 8 +#define __cpp_user_defined_literals 200809L +#define __FLT128_DECIMAL_DIG__ 36 +#define __GCC_ATOMIC_LLONG_LOCK_FREE 2 +#define __FLT32_HAS_QUIET_NAN__ 1 +#define __FLT_DECIMAL_DIG__ 9 +#define __UINT_FAST16_MAX__ 0xffffffffffffffffUL +#define __LDBL_NORM_MAX__ 1.18973149535723176502126385303097021e+4932L +#define __GCC_ATOMIC_SHORT_LOCK_FREE 2 +#define __SIZE_MAX__ 0xffffffffffffffffUL +#define __UINT_FAST8_TYPE__ unsigned char +#define _GNU_SOURCE 1 +#define __cpp_init_captures 201803L +#define __ATOMIC_ACQ_REL 4 +#define __ATOMIC_RELEASE 3 diff --git a/build-linux/tests/test_db_autogen/mocs_compilation.cpp b/build-linux/tests/test_db_autogen/mocs_compilation.cpp new file mode 100644 index 00000000..845ed934 --- /dev/null +++ b/build-linux/tests/test_db_autogen/mocs_compilation.cpp @@ -0,0 +1,3 @@ +// This file is autogenerated. Changes will be overwritten. +#include "VNU7RW3YIC/moc_db.cpp" +#include "VNU7RW3YIC/moc_log_manager.cpp" diff --git a/build-linux/tests/test_db_autogen/timestamp b/build-linux/tests/test_db_autogen/timestamp new file mode 100644 index 00000000..e69de29b diff --git a/build-linux/tests/test_drag_utils b/build-linux/tests/test_drag_utils new file mode 100755 index 00000000..cdd99d0e Binary files /dev/null and b/build-linux/tests/test_drag_utils differ diff --git a/build-linux/tests/test_drag_utils_autogen/VNU7RW3YIC/moc_drag_utils.cpp b/build-linux/tests/test_drag_utils_autogen/VNU7RW3YIC/moc_drag_utils.cpp new file mode 100644 index 00000000..12029e76 --- /dev/null +++ b/build-linux/tests/test_drag_utils_autogen/VNU7RW3YIC/moc_drag_utils.cpp @@ -0,0 +1,90 @@ +/**************************************************************************** +** Meta object code from reading C++ file 'drag_utils.h' +** +** Created by: The Qt Meta Object Compiler version 69 (Qt 6.10.3) +** +** WARNING! All changes made in this file will be lost! +*****************************************************************************/ + +#include "../../../../native/qt6/src/drag_utils.h" +#include + +#include + +#include + + +#include +#if !defined(Q_MOC_OUTPUT_REVISION) +#error "The header file 'drag_utils.h' doesn't include ." +#elif Q_MOC_OUTPUT_REVISION != 69 +#error "This file was generated using the moc from 6.10.3. It" +#error "cannot be used with the include files from this version of Qt." +#error "(The moc has changed too much.)" +#endif + +#ifndef Q_CONSTINIT +#define Q_CONSTINIT +#endif + +QT_WARNING_PUSH +QT_WARNING_DISABLE_DEPRECATED +QT_WARNING_DISABLE_GCC("-Wuseless-cast") +namespace { +struct qt_meta_tag_ZN9DragUtilsE_t {}; +} // unnamed namespace + +template <> constexpr inline auto DragUtils::qt_create_metaobjectdata() +{ + namespace QMC = QtMocConstants; + QtMocHelpers::StringRefStorage qt_stringData { + "DragUtils" + }; + + QtMocHelpers::UintData qt_methods { + }; + QtMocHelpers::UintData qt_properties { + }; + QtMocHelpers::UintData qt_enums { + }; + return QtMocHelpers::metaObjectData(QMC::MetaObjectFlag{}, qt_stringData, + qt_methods, qt_properties, qt_enums); +} +Q_CONSTINIT const QMetaObject DragUtils::staticMetaObject = { { + QMetaObject::SuperData::link(), + qt_staticMetaObjectStaticContent.stringdata, + qt_staticMetaObjectStaticContent.data, + qt_static_metacall, + nullptr, + qt_staticMetaObjectRelocatingContent.metaTypes, + nullptr +} }; + +void DragUtils::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) +{ + auto *_t = static_cast(_o); + (void)_t; + (void)_c; + (void)_id; + (void)_a; +} + +const QMetaObject *DragUtils::metaObject() const +{ + return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject; +} + +void *DragUtils::qt_metacast(const char *_clname) +{ + if (!_clname) return nullptr; + if (!strcmp(_clname, qt_staticMetaObjectStaticContent.strings)) + return static_cast(this); + return QObject::qt_metacast(_clname); +} + +int DragUtils::qt_metacall(QMetaObject::Call _c, int _id, void **_a) +{ + _id = QObject::qt_metacall(_c, _id, _a); + return _id; +} +QT_WARNING_POP diff --git a/build-linux/tests/test_drag_utils_autogen/deps b/build-linux/tests/test_drag_utils_autogen/deps new file mode 100644 index 00000000..139495d6 --- /dev/null +++ b/build-linux/tests/test_drag_utils_autogen/deps @@ -0,0 +1,911 @@ +test_drag_utils_autogen/timestamp: \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_drag_utils_autogen/moc_predefs.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/drag_utils.cpp \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/drag_utils.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/CMakeLists.txt \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/test_drag_utils.cpp \ + /usr/include/alloca.h \ + /usr/include/asm-generic/bitsperlong.h \ + /usr/include/asm-generic/errno-base.h \ + /usr/include/asm-generic/errno.h \ + /usr/include/asm-generic/int-ll64.h \ + /usr/include/asm-generic/posix_types.h \ + /usr/include/asm-generic/types.h \ + /usr/include/asm/bitsperlong.h \ + /usr/include/asm/errno.h \ + /usr/include/asm/posix_types.h \ + /usr/include/asm/posix_types_64.h \ + /usr/include/asm/types.h \ + /usr/include/asm/unistd.h \ + /usr/include/asm/unistd_64.h \ + /usr/include/assert.h \ + /usr/include/bits/atomic_wide_counter.h \ + /usr/include/bits/byteswap.h \ + /usr/include/bits/confname.h \ + /usr/include/bits/cpu-set.h \ + /usr/include/bits/endian.h \ + /usr/include/bits/endianness.h \ + /usr/include/bits/environments.h \ + /usr/include/bits/errno.h \ + /usr/include/bits/floatn-common.h \ + /usr/include/bits/floatn.h \ + /usr/include/bits/getopt_core.h \ + /usr/include/bits/getopt_posix.h \ + /usr/include/bits/libc-header-start.h \ + /usr/include/bits/local_lim.h \ + /usr/include/bits/locale.h \ + /usr/include/bits/long-double.h \ + /usr/include/bits/posix1_lim.h \ + /usr/include/bits/posix2_lim.h \ + /usr/include/bits/posix_opt.h \ + /usr/include/bits/pthread_stack_min-dynamic.h \ + /usr/include/bits/pthreadtypes-arch.h \ + /usr/include/bits/pthreadtypes.h \ + /usr/include/bits/sched.h \ + /usr/include/bits/select.h \ + /usr/include/bits/semaphore.h \ + /usr/include/bits/setjmp.h \ + /usr/include/bits/stdint-intn.h \ + /usr/include/bits/stdint-least.h \ + /usr/include/bits/stdint-uintn.h \ + /usr/include/bits/stdio_lim.h \ + /usr/include/bits/stdlib-float.h \ + /usr/include/bits/struct_mutex.h \ + /usr/include/bits/struct_rwlock.h \ + /usr/include/bits/syscall.h \ + /usr/include/bits/thread-shared-types.h \ + /usr/include/bits/time.h \ + /usr/include/bits/time64.h \ + /usr/include/bits/timesize.h \ + /usr/include/bits/timex.h \ + /usr/include/bits/types.h \ + /usr/include/bits/types/FILE.h \ + /usr/include/bits/types/__FILE.h \ + /usr/include/bits/types/__fpos64_t.h \ + /usr/include/bits/types/__fpos_t.h \ + /usr/include/bits/types/__locale_t.h \ + /usr/include/bits/types/__mbstate_t.h \ + /usr/include/bits/types/__sigset_t.h \ + /usr/include/bits/types/clock_t.h \ + /usr/include/bits/types/clockid_t.h \ + /usr/include/bits/types/cookie_io_functions_t.h \ + /usr/include/bits/types/error_t.h \ + /usr/include/bits/types/locale_t.h \ + /usr/include/bits/types/mbstate_t.h \ + /usr/include/bits/types/sigset_t.h \ + /usr/include/bits/types/struct_FILE.h \ + /usr/include/bits/types/struct___jmp_buf_tag.h \ + /usr/include/bits/types/struct_itimerspec.h \ + /usr/include/bits/types/struct_sched_param.h \ + /usr/include/bits/types/struct_timespec.h \ + /usr/include/bits/types/struct_timeval.h \ + /usr/include/bits/types/struct_tm.h \ + /usr/include/bits/types/time_t.h \ + /usr/include/bits/types/timer_t.h \ + /usr/include/bits/types/wint_t.h \ + /usr/include/bits/typesizes.h \ + /usr/include/bits/uintn-identity.h \ + /usr/include/bits/uio_lim.h \ + /usr/include/bits/unistd_ext.h \ + /usr/include/bits/waitflags.h \ + /usr/include/bits/waitstatus.h \ + /usr/include/bits/wchar.h \ + /usr/include/bits/wctype-wchar.h \ + /usr/include/bits/wordsize.h \ + /usr/include/bits/xopen_lim.h \ + /usr/include/c++/15/algorithm \ + /usr/include/c++/15/array \ + /usr/include/c++/15/atomic \ + /usr/include/c++/15/backward/auto_ptr.h \ + /usr/include/c++/15/backward/binders.h \ + /usr/include/c++/15/bit \ + /usr/include/c++/15/bits/algorithmfwd.h \ + /usr/include/c++/15/bits/align.h \ + /usr/include/c++/15/bits/alloc_traits.h \ + /usr/include/c++/15/bits/allocated_ptr.h \ + /usr/include/c++/15/bits/allocator.h \ + /usr/include/c++/15/bits/atomic_base.h \ + /usr/include/c++/15/bits/atomic_futex.h \ + /usr/include/c++/15/bits/atomic_lockfree_defines.h \ + /usr/include/c++/15/bits/atomic_timed_wait.h \ + /usr/include/c++/15/bits/atomic_wait.h \ + /usr/include/c++/15/bits/basic_ios.h \ + /usr/include/c++/15/bits/basic_ios.tcc \ + /usr/include/c++/15/bits/basic_string.h \ + /usr/include/c++/15/bits/basic_string.tcc \ + /usr/include/c++/15/bits/char_traits.h \ + /usr/include/c++/15/bits/charconv.h \ + /usr/include/c++/15/bits/chrono.h \ + /usr/include/c++/15/bits/chrono_io.h \ + /usr/include/c++/15/bits/codecvt.h \ + /usr/include/c++/15/bits/concept_check.h \ + /usr/include/c++/15/bits/cpp_type_traits.h \ + /usr/include/c++/15/bits/cxxabi_forced.h \ + /usr/include/c++/15/bits/cxxabi_init_exception.h \ + /usr/include/c++/15/bits/enable_special_members.h \ + /usr/include/c++/15/bits/erase_if.h \ + /usr/include/c++/15/bits/exception.h \ + /usr/include/c++/15/bits/exception_defines.h \ + /usr/include/c++/15/bits/exception_ptr.h \ + /usr/include/c++/15/bits/functexcept.h \ + /usr/include/c++/15/bits/functional_hash.h \ + /usr/include/c++/15/bits/hash_bytes.h \ + /usr/include/c++/15/bits/hashtable.h \ + /usr/include/c++/15/bits/hashtable_policy.h \ + /usr/include/c++/15/bits/invoke.h \ + /usr/include/c++/15/bits/ios_base.h \ + /usr/include/c++/15/bits/istream.tcc \ + /usr/include/c++/15/bits/iterator_concepts.h \ + /usr/include/c++/15/bits/list.tcc \ + /usr/include/c++/15/bits/locale_classes.h \ + /usr/include/c++/15/bits/locale_classes.tcc \ + /usr/include/c++/15/bits/locale_conv.h \ + /usr/include/c++/15/bits/locale_facets.h \ + /usr/include/c++/15/bits/locale_facets.tcc \ + /usr/include/c++/15/bits/locale_facets_nonio.h \ + /usr/include/c++/15/bits/locale_facets_nonio.tcc \ + /usr/include/c++/15/bits/localefwd.h \ + /usr/include/c++/15/bits/max_size_type.h \ + /usr/include/c++/15/bits/memory_resource.h \ + /usr/include/c++/15/bits/memoryfwd.h \ + /usr/include/c++/15/bits/move.h \ + /usr/include/c++/15/bits/nested_exception.h \ + /usr/include/c++/15/bits/new_allocator.h \ + /usr/include/c++/15/bits/node_handle.h \ + /usr/include/c++/15/bits/ostream.h \ + /usr/include/c++/15/bits/ostream.tcc \ + /usr/include/c++/15/bits/ostream_insert.h \ + /usr/include/c++/15/bits/parse_numbers.h \ + /usr/include/c++/15/bits/postypes.h \ + /usr/include/c++/15/bits/predefined_ops.h \ + /usr/include/c++/15/bits/ptr_traits.h \ + /usr/include/c++/15/bits/quoted_string.h \ + /usr/include/c++/15/bits/random.h \ + /usr/include/c++/15/bits/random.tcc \ + /usr/include/c++/15/bits/range_access.h \ + /usr/include/c++/15/bits/ranges_algo.h \ + /usr/include/c++/15/bits/ranges_algobase.h \ + /usr/include/c++/15/bits/ranges_base.h \ + /usr/include/c++/15/bits/ranges_cmp.h \ + /usr/include/c++/15/bits/ranges_uninitialized.h \ + /usr/include/c++/15/bits/ranges_util.h \ + /usr/include/c++/15/bits/refwrap.h \ + /usr/include/c++/15/bits/requires_hosted.h \ + /usr/include/c++/15/bits/semaphore_base.h \ + /usr/include/c++/15/bits/shared_ptr.h \ + /usr/include/c++/15/bits/shared_ptr_atomic.h \ + /usr/include/c++/15/bits/shared_ptr_base.h \ + /usr/include/c++/15/bits/specfun.h \ + /usr/include/c++/15/bits/sstream.tcc \ + /usr/include/c++/15/bits/std_abs.h \ + /usr/include/c++/15/bits/std_function.h \ + /usr/include/c++/15/bits/std_mutex.h \ + /usr/include/c++/15/bits/std_thread.h \ + /usr/include/c++/15/bits/stl_algo.h \ + /usr/include/c++/15/bits/stl_algobase.h \ + /usr/include/c++/15/bits/stl_bvector.h \ + /usr/include/c++/15/bits/stl_construct.h \ + /usr/include/c++/15/bits/stl_function.h \ + /usr/include/c++/15/bits/stl_heap.h \ + /usr/include/c++/15/bits/stl_iterator.h \ + /usr/include/c++/15/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/15/bits/stl_iterator_base_types.h \ + /usr/include/c++/15/bits/stl_list.h \ + /usr/include/c++/15/bits/stl_map.h \ + /usr/include/c++/15/bits/stl_multimap.h \ + /usr/include/c++/15/bits/stl_multiset.h \ + /usr/include/c++/15/bits/stl_numeric.h \ + /usr/include/c++/15/bits/stl_pair.h \ + /usr/include/c++/15/bits/stl_raw_storage_iter.h \ + /usr/include/c++/15/bits/stl_relops.h \ + /usr/include/c++/15/bits/stl_set.h \ + /usr/include/c++/15/bits/stl_tempbuf.h \ + /usr/include/c++/15/bits/stl_tree.h \ + /usr/include/c++/15/bits/stl_uninitialized.h \ + /usr/include/c++/15/bits/stl_vector.h \ + /usr/include/c++/15/bits/stream_iterator.h \ + /usr/include/c++/15/bits/streambuf.tcc \ + /usr/include/c++/15/bits/streambuf_iterator.h \ + /usr/include/c++/15/bits/string_view.tcc \ + /usr/include/c++/15/bits/stringfwd.h \ + /usr/include/c++/15/bits/this_thread_sleep.h \ + /usr/include/c++/15/bits/uniform_int_dist.h \ + /usr/include/c++/15/bits/unique_lock.h \ + /usr/include/c++/15/bits/unique_ptr.h \ + /usr/include/c++/15/bits/unordered_map.h \ + /usr/include/c++/15/bits/unordered_set.h \ + /usr/include/c++/15/bits/uses_allocator.h \ + /usr/include/c++/15/bits/uses_allocator_args.h \ + /usr/include/c++/15/bits/utility.h \ + /usr/include/c++/15/bits/vector.tcc \ + /usr/include/c++/15/bits/version.h \ + /usr/include/c++/15/cassert \ + /usr/include/c++/15/cctype \ + /usr/include/c++/15/cerrno \ + /usr/include/c++/15/charconv \ + /usr/include/c++/15/chrono \ + /usr/include/c++/15/climits \ + /usr/include/c++/15/clocale \ + /usr/include/c++/15/cmath \ + /usr/include/c++/15/compare \ + /usr/include/c++/15/concepts \ + /usr/include/c++/15/condition_variable \ + /usr/include/c++/15/cstddef \ + /usr/include/c++/15/cstdint \ + /usr/include/c++/15/cstdio \ + /usr/include/c++/15/cstdlib \ + /usr/include/c++/15/cstring \ + /usr/include/c++/15/ctime \ + /usr/include/c++/15/cwchar \ + /usr/include/c++/15/cwctype \ + /usr/include/c++/15/debug/assertions.h \ + /usr/include/c++/15/debug/debug.h \ + /usr/include/c++/15/exception \ + /usr/include/c++/15/experimental/source_location \ + /usr/include/c++/15/ext/aligned_buffer.h \ + /usr/include/c++/15/ext/alloc_traits.h \ + /usr/include/c++/15/ext/atomicity.h \ + /usr/include/c++/15/ext/concurrence.h \ + /usr/include/c++/15/ext/numeric_traits.h \ + /usr/include/c++/15/ext/string_conversions.h \ + /usr/include/c++/15/ext/type_traits.h \ + /usr/include/c++/15/filesystem \ + /usr/include/c++/15/format \ + /usr/include/c++/15/functional \ + /usr/include/c++/15/future \ + /usr/include/c++/15/initializer_list \ + /usr/include/c++/15/iomanip \ + /usr/include/c++/15/ios \ + /usr/include/c++/15/iosfwd \ + /usr/include/c++/15/istream \ + /usr/include/c++/15/iterator \ + /usr/include/c++/15/limits \ + /usr/include/c++/15/list \ + /usr/include/c++/15/locale \ + /usr/include/c++/15/map \ + /usr/include/c++/15/memory \ + /usr/include/c++/15/memory_resource \ + /usr/include/c++/15/mutex \ + /usr/include/c++/15/new \ + /usr/include/c++/15/numeric \ + /usr/include/c++/15/optional \ + /usr/include/c++/15/ostream \ + /usr/include/c++/15/pstl/execution_defs.h \ + /usr/include/c++/15/pstl/glue_numeric_defs.h \ + /usr/include/c++/15/pstl/pstl_config.h \ + /usr/include/c++/15/random \ + /usr/include/c++/15/ratio \ + /usr/include/c++/15/semaphore \ + /usr/include/c++/15/set \ + /usr/include/c++/15/shared_mutex \ + /usr/include/c++/15/source_location \ + /usr/include/c++/15/sstream \ + /usr/include/c++/15/stdexcept \ + /usr/include/c++/15/stop_token \ + /usr/include/c++/15/streambuf \ + /usr/include/c++/15/string \ + /usr/include/c++/15/string_view \ + /usr/include/c++/15/system_error \ + /usr/include/c++/15/tr1/bessel_function.tcc \ + /usr/include/c++/15/tr1/beta_function.tcc \ + /usr/include/c++/15/tr1/ell_integral.tcc \ + /usr/include/c++/15/tr1/exp_integral.tcc \ + /usr/include/c++/15/tr1/gamma.tcc \ + /usr/include/c++/15/tr1/hypergeometric.tcc \ + /usr/include/c++/15/tr1/legendre_function.tcc \ + /usr/include/c++/15/tr1/modified_bessel_func.tcc \ + /usr/include/c++/15/tr1/poly_hermite.tcc \ + /usr/include/c++/15/tr1/poly_laguerre.tcc \ + /usr/include/c++/15/tr1/riemann_zeta.tcc \ + /usr/include/c++/15/tr1/special_function_util.h \ + /usr/include/c++/15/tuple \ + /usr/include/c++/15/type_traits \ + /usr/include/c++/15/typeinfo \ + /usr/include/c++/15/unordered_map \ + /usr/include/c++/15/unordered_set \ + /usr/include/c++/15/utility \ + /usr/include/c++/15/variant \ + /usr/include/c++/15/vector \ + /usr/include/c++/15/version \ + /usr/include/c++/15/x86_64-redhat-linux/bits/atomic_word.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/c++allocator.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/c++config.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/c++locale.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/cpu_defines.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/ctype_base.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/ctype_inline.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/error_constants.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/gthr-default.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/gthr.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/messages_members.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/opt_random.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/os_defines.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/time_members.h \ + /usr/include/ctype.h \ + /usr/include/endian.h \ + /usr/include/errno.h \ + /usr/include/features-time64.h \ + /usr/include/features.h \ + /usr/include/gnu/stubs-64.h \ + /usr/include/gnu/stubs.h \ + /usr/include/libintl.h \ + /usr/include/limits.h \ + /usr/include/linux/close_range.h \ + /usr/include/linux/errno.h \ + /usr/include/linux/limits.h \ + /usr/include/linux/posix_types.h \ + /usr/include/linux/sched/types.h \ + /usr/include/linux/stddef.h \ + /usr/include/linux/types.h \ + /usr/include/locale.h \ + /usr/include/pthread.h \ + /usr/include/qt6/QtCore/QAbstractItemModel \ + /usr/include/qt6/QtCore/QDeadlineTimer \ + /usr/include/qt6/QtCore/QEvent \ + /usr/include/qt6/QtCore/QHash \ + /usr/include/qt6/QtCore/QList \ + /usr/include/qt6/QtCore/QMap \ + /usr/include/qt6/QtCore/QMargins \ + /usr/include/qt6/QtCore/QMetaEnum \ + /usr/include/qt6/QtCore/QMutex \ + /usr/include/qt6/QtCore/QObject \ + /usr/include/qt6/QtCore/QRect \ + /usr/include/qt6/QtCore/QSize \ + /usr/include/qt6/QtCore/QSizeF \ + /usr/include/qt6/QtCore/QString \ + /usr/include/qt6/QtCore/QStringList \ + /usr/include/qt6/QtCore/QVariant \ + /usr/include/qt6/QtCore/QtCore \ + /usr/include/qt6/QtCore/QtCoreDepends \ + /usr/include/qt6/QtCore/q17memory.h \ + /usr/include/qt6/QtCore/q20algorithm.h \ + /usr/include/qt6/QtCore/q20chrono.h \ + /usr/include/qt6/QtCore/q20functional.h \ + /usr/include/qt6/QtCore/q20iterator.h \ + /usr/include/qt6/QtCore/q20map.h \ + /usr/include/qt6/QtCore/q20memory.h \ + /usr/include/qt6/QtCore/q20type_traits.h \ + /usr/include/qt6/QtCore/q20utility.h \ + /usr/include/qt6/QtCore/q20vector.h \ + /usr/include/qt6/QtCore/q23functional.h \ + /usr/include/qt6/QtCore/q23type_traits.h \ + /usr/include/qt6/QtCore/q23utility.h \ + /usr/include/qt6/QtCore/q26numeric.h \ + /usr/include/qt6/QtCore/qabstractanimation.h \ + /usr/include/qt6/QtCore/qabstracteventdispatcher.h \ + /usr/include/qt6/QtCore/qabstractitemmodel.h \ + /usr/include/qt6/QtCore/qabstractnativeeventfilter.h \ + /usr/include/qt6/QtCore/qabstractproxymodel.h \ + /usr/include/qt6/QtCore/qalgorithms.h \ + /usr/include/qt6/QtCore/qalloc.h \ + /usr/include/qt6/QtCore/qanimationgroup.h \ + /usr/include/qt6/QtCore/qanystringview.h \ + /usr/include/qt6/QtCore/qapplicationstatic.h \ + /usr/include/qt6/QtCore/qarraydata.h \ + /usr/include/qt6/QtCore/qarraydataops.h \ + /usr/include/qt6/QtCore/qarraydatapointer.h \ + /usr/include/qt6/QtCore/qassert.h \ + /usr/include/qt6/QtCore/qassociativeiterable.h \ + /usr/include/qt6/QtCore/qatomic.h \ + /usr/include/qt6/QtCore/qatomic_cxx11.h \ + /usr/include/qt6/QtCore/qatomicscopedvaluerollback.h \ + /usr/include/qt6/QtCore/qbasicatomic.h \ + /usr/include/qt6/QtCore/qbasictimer.h \ + /usr/include/qt6/QtCore/qbindingstorage.h \ + /usr/include/qt6/QtCore/qbitarray.h \ + /usr/include/qt6/QtCore/qbuffer.h \ + /usr/include/qt6/QtCore/qbytearray.h \ + /usr/include/qt6/QtCore/qbytearrayalgorithms.h \ + /usr/include/qt6/QtCore/qbytearraylist.h \ + /usr/include/qt6/QtCore/qbytearraymatcher.h \ + /usr/include/qt6/QtCore/qbytearrayview.h \ + /usr/include/qt6/QtCore/qcache.h \ + /usr/include/qt6/QtCore/qcalendar.h \ + /usr/include/qt6/QtCore/qcborarray.h \ + /usr/include/qt6/QtCore/qcborcommon.h \ + /usr/include/qt6/QtCore/qcbormap.h \ + /usr/include/qt6/QtCore/qcborstream.h \ + /usr/include/qt6/QtCore/qcborstreamreader.h \ + /usr/include/qt6/QtCore/qcborstreamwriter.h \ + /usr/include/qt6/QtCore/qcborvalue.h \ + /usr/include/qt6/QtCore/qchar.h \ + /usr/include/qt6/QtCore/qcheckedint_impl.h \ + /usr/include/qt6/QtCore/qchronotimer.h \ + /usr/include/qt6/QtCore/qcollator.h \ + /usr/include/qt6/QtCore/qcommandlineoption.h \ + /usr/include/qt6/QtCore/qcommandlineparser.h \ + /usr/include/qt6/QtCore/qcompare.h \ + /usr/include/qt6/QtCore/qcompare_impl.h \ + /usr/include/qt6/QtCore/qcomparehelpers.h \ + /usr/include/qt6/QtCore/qcompilerdetection.h \ + /usr/include/qt6/QtCore/qconcatenatetablesproxymodel.h \ + /usr/include/qt6/QtCore/qconfig-64.h \ + /usr/include/qt6/QtCore/qconfig.h \ + /usr/include/qt6/QtCore/qconstructormacros.h \ + /usr/include/qt6/QtCore/qcontainerfwd.h \ + /usr/include/qt6/QtCore/qcontainerinfo.h \ + /usr/include/qt6/QtCore/qcontainertools_impl.h \ + /usr/include/qt6/QtCore/qcontiguouscache.h \ + /usr/include/qt6/QtCore/qcoreapplication.h \ + /usr/include/qt6/QtCore/qcoreapplication_platform.h \ + /usr/include/qt6/QtCore/qcoreevent.h \ + /usr/include/qt6/QtCore/qcryptographichash.h \ + /usr/include/qt6/QtCore/qdarwinhelpers.h \ + /usr/include/qt6/QtCore/qdatastream.h \ + /usr/include/qt6/QtCore/qdatetime.h \ + /usr/include/qt6/QtCore/qdeadlinetimer.h \ + /usr/include/qt6/QtCore/qdebug.h \ + /usr/include/qt6/QtCore/qdir.h \ + /usr/include/qt6/QtCore/qdiriterator.h \ + /usr/include/qt6/QtCore/qdirlisting.h \ + /usr/include/qt6/QtCore/qeasingcurve.h \ + /usr/include/qt6/QtCore/qelapsedtimer.h \ + /usr/include/qt6/QtCore/qendian.h \ + /usr/include/qt6/QtCore/qeventloop.h \ + /usr/include/qt6/QtCore/qexception.h \ + /usr/include/qt6/QtCore/qexceptionhandling.h \ + /usr/include/qt6/QtCore/qfactoryinterface.h \ + /usr/include/qt6/QtCore/qfile.h \ + /usr/include/qt6/QtCore/qfiledevice.h \ + /usr/include/qt6/QtCore/qfileinfo.h \ + /usr/include/qt6/QtCore/qfileselector.h \ + /usr/include/qt6/QtCore/qfilesystemwatcher.h \ + /usr/include/qt6/QtCore/qflags.h \ + /usr/include/qt6/QtCore/qfloat16.h \ + /usr/include/qt6/QtCore/qforeach.h \ + /usr/include/qt6/QtCore/qfunctionaltools_impl.h \ + /usr/include/qt6/QtCore/qfunctionpointer.h \ + /usr/include/qt6/QtCore/qfuture.h \ + /usr/include/qt6/QtCore/qfuture_impl.h \ + /usr/include/qt6/QtCore/qfutureinterface.h \ + /usr/include/qt6/QtCore/qfuturesynchronizer.h \ + /usr/include/qt6/QtCore/qfuturewatcher.h \ + /usr/include/qt6/QtCore/qgenericatomic.h \ + /usr/include/qt6/QtCore/qglobal.h \ + /usr/include/qt6/QtCore/qglobalstatic.h \ + /usr/include/qt6/QtCore/qhash.h \ + /usr/include/qt6/QtCore/qhashfunctions.h \ + /usr/include/qt6/QtCore/qidentityproxymodel.h \ + /usr/include/qt6/QtCore/qiodevice.h \ + /usr/include/qt6/QtCore/qiodevicebase.h \ + /usr/include/qt6/QtCore/qitemselectionmodel.h \ + /usr/include/qt6/QtCore/qiterable.h \ + /usr/include/qt6/QtCore/qiterator.h \ + /usr/include/qt6/QtCore/qjsonarray.h \ + /usr/include/qt6/QtCore/qjsondocument.h \ + /usr/include/qt6/QtCore/qjsonobject.h \ + /usr/include/qt6/QtCore/qjsonparseerror.h \ + /usr/include/qt6/QtCore/qjsonvalue.h \ + /usr/include/qt6/QtCore/qlatin1stringmatcher.h \ + /usr/include/qt6/QtCore/qlatin1stringview.h \ + /usr/include/qt6/QtCore/qlibrary.h \ + /usr/include/qt6/QtCore/qlibraryinfo.h \ + /usr/include/qt6/QtCore/qline.h \ + /usr/include/qt6/QtCore/qlist.h \ + /usr/include/qt6/QtCore/qlocale.h \ + /usr/include/qt6/QtCore/qlockfile.h \ + /usr/include/qt6/QtCore/qlogging.h \ + /usr/include/qt6/QtCore/qloggingcategory.h \ + /usr/include/qt6/QtCore/qmalloc.h \ + /usr/include/qt6/QtCore/qmap.h \ + /usr/include/qt6/QtCore/qmargins.h \ + /usr/include/qt6/QtCore/qmath.h \ + /usr/include/qt6/QtCore/qmessageauthenticationcode.h \ + /usr/include/qt6/QtCore/qmetacontainer.h \ + /usr/include/qt6/QtCore/qmetaobject.h \ + /usr/include/qt6/QtCore/qmetatype.h \ + /usr/include/qt6/QtCore/qmimedata.h \ + /usr/include/qt6/QtCore/qmimedatabase.h \ + /usr/include/qt6/QtCore/qmimetype.h \ + /usr/include/qt6/QtCore/qminmax.h \ + /usr/include/qt6/QtCore/qmutex.h \ + /usr/include/qt6/QtCore/qnamespace.h \ + /usr/include/qt6/QtCore/qnativeinterface.h \ + /usr/include/qt6/QtCore/qnumeric.h \ + /usr/include/qt6/QtCore/qobject.h \ + /usr/include/qt6/QtCore/qobject_impl.h \ + /usr/include/qt6/QtCore/qobjectcleanuphandler.h \ + /usr/include/qt6/QtCore/qobjectdefs.h \ + /usr/include/qt6/QtCore/qobjectdefs_impl.h \ + /usr/include/qt6/QtCore/qoperatingsystemversion.h \ + /usr/include/qt6/QtCore/qoverload.h \ + /usr/include/qt6/QtCore/qpair.h \ + /usr/include/qt6/QtCore/qparallelanimationgroup.h \ + /usr/include/qt6/QtCore/qpauseanimation.h \ + /usr/include/qt6/QtCore/qpermissions.h \ + /usr/include/qt6/QtCore/qplugin.h \ + /usr/include/qt6/QtCore/qpluginloader.h \ + /usr/include/qt6/QtCore/qpoint.h \ + /usr/include/qt6/QtCore/qpointer.h \ + /usr/include/qt6/QtCore/qprocess.h \ + /usr/include/qt6/QtCore/qprocessordetection.h \ + /usr/include/qt6/QtCore/qpromise.h \ + /usr/include/qt6/QtCore/qproperty.h \ + /usr/include/qt6/QtCore/qpropertyanimation.h \ + /usr/include/qt6/QtCore/qpropertyprivate.h \ + /usr/include/qt6/QtCore/qqueue.h \ + /usr/include/qt6/QtCore/qrandom.h \ + /usr/include/qt6/QtCore/qrangemodel.h \ + /usr/include/qt6/QtCore/qrangemodel_impl.h \ + /usr/include/qt6/QtCore/qreadwritelock.h \ + /usr/include/qt6/QtCore/qrect.h \ + /usr/include/qt6/QtCore/qrefcount.h \ + /usr/include/qt6/QtCore/qregularexpression.h \ + /usr/include/qt6/QtCore/qresource.h \ + /usr/include/qt6/QtCore/qresultstore.h \ + /usr/include/qt6/QtCore/qrunnable.h \ + /usr/include/qt6/QtCore/qsavefile.h \ + /usr/include/qt6/QtCore/qscopedpointer.h \ + /usr/include/qt6/QtCore/qscopedvaluerollback.h \ + /usr/include/qt6/QtCore/qscopeguard.h \ + /usr/include/qt6/QtCore/qsemaphore.h \ + /usr/include/qt6/QtCore/qsequentialanimationgroup.h \ + /usr/include/qt6/QtCore/qsequentialiterable.h \ + /usr/include/qt6/QtCore/qset.h \ + /usr/include/qt6/QtCore/qsettings.h \ + /usr/include/qt6/QtCore/qshareddata.h \ + /usr/include/qt6/QtCore/qshareddata_impl.h \ + /usr/include/qt6/QtCore/qsharedmemory.h \ + /usr/include/qt6/QtCore/qsharedpointer.h \ + /usr/include/qt6/QtCore/qsharedpointer_impl.h \ + /usr/include/qt6/QtCore/qsignalmapper.h \ + /usr/include/qt6/QtCore/qsimd.h \ + /usr/include/qt6/QtCore/qsize.h \ + /usr/include/qt6/QtCore/qsocketnotifier.h \ + /usr/include/qt6/QtCore/qsortfilterproxymodel.h \ + /usr/include/qt6/QtCore/qspan.h \ + /usr/include/qt6/QtCore/qstack.h \ + /usr/include/qt6/QtCore/qstandardpaths.h \ + /usr/include/qt6/QtCore/qstaticlatin1stringmatcher.h \ + /usr/include/qt6/QtCore/qstdlibdetection.h \ + /usr/include/qt6/QtCore/qstorageinfo.h \ + /usr/include/qt6/QtCore/qstring.h \ + /usr/include/qt6/QtCore/qstringalgorithms.h \ + /usr/include/qt6/QtCore/qstringbuilder.h \ + /usr/include/qt6/QtCore/qstringconverter.h \ + /usr/include/qt6/QtCore/qstringconverter_base.h \ + /usr/include/qt6/QtCore/qstringfwd.h \ + /usr/include/qt6/QtCore/qstringlist.h \ + /usr/include/qt6/QtCore/qstringlistmodel.h \ + /usr/include/qt6/QtCore/qstringliteral.h \ + /usr/include/qt6/QtCore/qstringmatcher.h \ + /usr/include/qt6/QtCore/qstringtokenizer.h \ + /usr/include/qt6/QtCore/qstringview.h \ + /usr/include/qt6/QtCore/qswap.h \ + /usr/include/qt6/QtCore/qsysinfo.h \ + /usr/include/qt6/QtCore/qsystemdetection.h \ + /usr/include/qt6/QtCore/qsystemsemaphore.h \ + /usr/include/qt6/QtCore/qtaggedpointer.h \ + /usr/include/qt6/QtCore/qtclasshelpermacros.h \ + /usr/include/qt6/QtCore/qtconfiginclude.h \ + /usr/include/qt6/QtCore/qtconfigmacros.h \ + /usr/include/qt6/QtCore/qtcore-config.h \ + /usr/include/qt6/QtCore/qtcoreexports.h \ + /usr/include/qt6/QtCore/qtcoreglobal.h \ + /usr/include/qt6/QtCore/qtcoreversion.h \ + /usr/include/qt6/QtCore/qtdeprecationdefinitions.h \ + /usr/include/qt6/QtCore/qtdeprecationmarkers.h \ + /usr/include/qt6/QtCore/qtemporarydir.h \ + /usr/include/qt6/QtCore/qtemporaryfile.h \ + /usr/include/qt6/QtCore/qtenvironmentvariables.h \ + /usr/include/qt6/QtCore/qtestsupport_core.h \ + /usr/include/qt6/QtCore/qtextboundaryfinder.h \ + /usr/include/qt6/QtCore/qtextstream.h \ + /usr/include/qt6/QtCore/qtformat_impl.h \ + /usr/include/qt6/QtCore/qthread.h \ + /usr/include/qt6/QtCore/qthreadpool.h \ + /usr/include/qt6/QtCore/qthreadstorage.h \ + /usr/include/qt6/QtCore/qtimeline.h \ + /usr/include/qt6/QtCore/qtimer.h \ + /usr/include/qt6/QtCore/qtimezone.h \ + /usr/include/qt6/QtCore/qtipccommon.h \ + /usr/include/qt6/QtCore/qtmetamacros.h \ + /usr/include/qt6/QtCore/qtmocconstants.h \ + /usr/include/qt6/QtCore/qtnoop.h \ + /usr/include/qt6/QtCore/qtpreprocessorsupport.h \ + /usr/include/qt6/QtCore/qtranslator.h \ + /usr/include/qt6/QtCore/qtransposeproxymodel.h \ + /usr/include/qt6/QtCore/qtresource.h \ + /usr/include/qt6/QtCore/qtsan_impl.h \ + /usr/include/qt6/QtCore/qtsymbolmacros.h \ + /usr/include/qt6/QtCore/qttranslation.h \ + /usr/include/qt6/QtCore/qttypetraits.h \ + /usr/include/qt6/QtCore/qtversion.h \ + /usr/include/qt6/QtCore/qtversionchecks.h \ + /usr/include/qt6/QtCore/qtypeinfo.h \ + /usr/include/qt6/QtCore/qtyperevision.h \ + /usr/include/qt6/QtCore/qtypes.h \ + /usr/include/qt6/QtCore/qurl.h \ + /usr/include/qt6/QtCore/qurlquery.h \ + /usr/include/qt6/QtCore/qutf8stringview.h \ + /usr/include/qt6/QtCore/quuid.h \ + /usr/include/qt6/QtCore/qvariant.h \ + /usr/include/qt6/QtCore/qvariantanimation.h \ + /usr/include/qt6/QtCore/qvarianthash.h \ + /usr/include/qt6/QtCore/qvariantlist.h \ + /usr/include/qt6/QtCore/qvariantmap.h \ + /usr/include/qt6/QtCore/qvarlengtharray.h \ + /usr/include/qt6/QtCore/qvector.h \ + /usr/include/qt6/QtCore/qversionnumber.h \ + /usr/include/qt6/QtCore/qversiontagging.h \ + /usr/include/qt6/QtCore/qwaitcondition.h \ + /usr/include/qt6/QtCore/qwineventnotifier.h \ + /usr/include/qt6/QtCore/qxmlstream.h \ + /usr/include/qt6/QtCore/qxpfunctional.h \ + /usr/include/qt6/QtCore/qxptype_traits.h \ + /usr/include/qt6/QtCore/qyieldcpu.h \ + /usr/include/qt6/QtGui/QBrush \ + /usr/include/qt6/QtGui/QColor \ + /usr/include/qt6/QtGui/QFont \ + /usr/include/qt6/QtGui/QIcon \ + /usr/include/qt6/QtGui/QImage \ + /usr/include/qt6/QtGui/QPixmap \ + /usr/include/qt6/QtGui/QTransform \ + /usr/include/qt6/QtGui/qaction.h \ + /usr/include/qt6/QtGui/qbitmap.h \ + /usr/include/qt6/QtGui/qbrush.h \ + /usr/include/qt6/QtGui/qcolor.h \ + /usr/include/qt6/QtGui/qcursor.h \ + /usr/include/qt6/QtGui/qevent.h \ + /usr/include/qt6/QtGui/qeventpoint.h \ + /usr/include/qt6/QtGui/qfont.h \ + /usr/include/qt6/QtGui/qfontinfo.h \ + /usr/include/qt6/QtGui/qfontmetrics.h \ + /usr/include/qt6/QtGui/qfontvariableaxis.h \ + /usr/include/qt6/QtGui/qguiapplication.h \ + /usr/include/qt6/QtGui/qguiapplication_platform.h \ + /usr/include/qt6/QtGui/qicon.h \ + /usr/include/qt6/QtGui/qimage.h \ + /usr/include/qt6/QtGui/qinputdevice.h \ + /usr/include/qt6/QtGui/qinputmethod.h \ + /usr/include/qt6/QtGui/qkeysequence.h \ + /usr/include/qt6/QtGui/qpaintdevice.h \ + /usr/include/qt6/QtGui/qpalette.h \ + /usr/include/qt6/QtGui/qpixelformat.h \ + /usr/include/qt6/QtGui/qpixmap.h \ + /usr/include/qt6/QtGui/qpointingdevice.h \ + /usr/include/qt6/QtGui/qpolygon.h \ + /usr/include/qt6/QtGui/qregion.h \ + /usr/include/qt6/QtGui/qrgb.h \ + /usr/include/qt6/QtGui/qrgba64.h \ + /usr/include/qt6/QtGui/qscreen.h \ + /usr/include/qt6/QtGui/qscreen_platform.h \ + /usr/include/qt6/QtGui/qsurface.h \ + /usr/include/qt6/QtGui/qsurfaceformat.h \ + /usr/include/qt6/QtGui/qtestsupport_gui.h \ + /usr/include/qt6/QtGui/qtgui-config.h \ + /usr/include/qt6/QtGui/qtguiexports.h \ + /usr/include/qt6/QtGui/qtguiglobal.h \ + /usr/include/qt6/QtGui/qtransform.h \ + /usr/include/qt6/QtGui/qvector2d.h \ + /usr/include/qt6/QtGui/qvector3d.h \ + /usr/include/qt6/QtGui/qvector4d.h \ + /usr/include/qt6/QtGui/qvectornd.h \ + /usr/include/qt6/QtGui/qwindow.h \ + /usr/include/qt6/QtGui/qwindowdefs.h \ + /usr/include/qt6/QtTest/QtTest \ + /usr/include/qt6/QtTest/QtTestDepends \ + /usr/include/qt6/QtTest/qabstractitemmodeltester.h \ + /usr/include/qt6/QtTest/qbenchmark.h \ + /usr/include/qt6/QtTest/qbenchmarkmetric.h \ + /usr/include/qt6/QtTest/qsignalspy.h \ + /usr/include/qt6/QtTest/qtest.h \ + /usr/include/qt6/QtTest/qtest_gui.h \ + /usr/include/qt6/QtTest/qtest_widgets.h \ + /usr/include/qt6/QtTest/qtestassert.h \ + /usr/include/qt6/QtTest/qtestcase.h \ + /usr/include/qt6/QtTest/qtestdata.h \ + /usr/include/qt6/QtTest/qtestevent.h \ + /usr/include/qt6/QtTest/qtesteventloop.h \ + /usr/include/qt6/QtTest/qtestkeyboard.h \ + /usr/include/qt6/QtTest/qtestmouse.h \ + /usr/include/qt6/QtTest/qtestspontaneevent.h \ + /usr/include/qt6/QtTest/qtestsystem.h \ + /usr/include/qt6/QtTest/qtesttostring.h \ + /usr/include/qt6/QtTest/qtesttouch.h \ + /usr/include/qt6/QtTest/qtestwheel.h \ + /usr/include/qt6/QtTest/qttestexports.h \ + /usr/include/qt6/QtTest/qttestglobal.h \ + /usr/include/qt6/QtTest/qttestlib-config.h \ + /usr/include/qt6/QtTest/qttestversion.h \ + /usr/include/qt6/QtWidgets/QSizePolicy \ + /usr/include/qt6/QtWidgets/qapplication.h \ + /usr/include/qt6/QtWidgets/qsizepolicy.h \ + /usr/include/qt6/QtWidgets/qtestsupport_widgets.h \ + /usr/include/qt6/QtWidgets/qtwidgets-config.h \ + /usr/include/qt6/QtWidgets/qtwidgetsexports.h \ + /usr/include/qt6/QtWidgets/qtwidgetsglobal.h \ + /usr/include/qt6/QtWidgets/qwidget.h \ + /usr/include/sched.h \ + /usr/include/semaphore.h \ + /usr/include/stdc-predef.h \ + /usr/include/stdint.h \ + /usr/include/stdio.h \ + /usr/include/stdlib.h \ + /usr/include/string.h \ + /usr/include/strings.h \ + /usr/include/sys/cdefs.h \ + /usr/include/sys/select.h \ + /usr/include/sys/single_threaded.h \ + /usr/include/sys/syscall.h \ + /usr/include/sys/time.h \ + /usr/include/sys/types.h \ + /usr/include/syscall.h \ + /usr/include/time.h \ + /usr/include/unistd.h \ + /usr/include/wchar.h \ + /usr/include/wctype.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/adxintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/amxavx512intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/amxbf16intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/amxcomplexintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/amxfp16intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/amxfp8intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/amxint8intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/amxmovrsintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/amxtf32intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/amxtileintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/amxtransposeintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2-512bf16intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2-512convertintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2-512mediaintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2-512minmaxintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2-512satcvtintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2bf16intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2convertintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2copyintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2mediaintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2minmaxintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2satcvtintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx2intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512bf16intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512bf16vlintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512bitalgintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512bitalgvlintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512bwintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512cdintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512dqintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512fintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512fp16intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512fp16vlintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512ifmaintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512ifmavlintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vbmi2intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vbmi2vlintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vbmiintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vbmivlintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vlbwintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vldqintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vlintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vnniintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vnnivlintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vp2intersectintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vp2intersectvlintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vpopcntdqintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vpopcntdqvlintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avxifmaintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avxintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avxneconvertintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avxvnniint16intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avxvnniint8intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avxvnniintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/bmi2intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/bmiintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/cetintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/cldemoteintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/clflushoptintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/clwbintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/clzerointrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/cmpccxaddintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/emmintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/enqcmdintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/f16cintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/fmaintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/fxsrintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/gfniintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/hresetintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/ia32intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/immintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/keylockerintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/lwpintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/lzcntintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/mm_malloc.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/mmintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/movdirintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/movrsintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/mwaitintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/mwaitxintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/pconfigintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/pkuintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/pmmintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/popcntintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/prfchiintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/prfchwintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/raointintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/rdseedintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/rtmintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/serializeintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/sgxintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/sha512intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/shaintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/sm3intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/sm4intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/smmintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/stdarg.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/stdbool.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/stddef.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/tbmintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/tmmintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/tsxldtrkintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/uintrintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/usermsrintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/vaesintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/vpclmulqdqintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/waitpkgintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/wbnoinvdintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/wmmintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/x86gprintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/xmmintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/xsavecintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/xsaveintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/xsaveoptintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/xsavesintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/xtestintrin.h \ + /usr/lib64/cmake/Qt6/Qt6Config.cmake \ + /usr/lib64/cmake/Qt6/Qt6ConfigExtras.cmake \ + /usr/lib64/cmake/Qt6/Qt6ConfigVersion.cmake \ + /usr/lib64/cmake/Qt6/Qt6ConfigVersionImpl.cmake \ + /usr/lib64/cmake/Qt6/Qt6Dependencies.cmake \ + /usr/lib64/cmake/Qt6/Qt6Targets.cmake \ + /usr/lib64/cmake/Qt6/Qt6VersionlessAliasTargets.cmake \ + /usr/lib64/cmake/Qt6/QtFeature.cmake \ + /usr/lib64/cmake/Qt6/QtFeatureCommon.cmake \ + /usr/lib64/cmake/Qt6/QtInstallPaths.cmake \ + /usr/lib64/cmake/Qt6/QtPublicAndroidHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicAppleHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicCMakeEarlyPolicyHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicCMakeHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicCMakeVersionHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicDependencyHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicExternalProjectHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicFinalizerHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicFindPackageHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicGitHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicPluginHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicPluginHelpers_v2.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomAttributionHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomBuildToolHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomCommonGenerationHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomCpeHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomCycloneDXHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomDepHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomDocumentNamespaceHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomExternalReferenceHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomFileHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomGenerationCycloneDXHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomGenerationHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomLicenseHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomOpsHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomPurlHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomPythonHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomQtEntityHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomRelationshipHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomSystemDepHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicTargetHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicTestHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicToolHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicWalkLibsHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicWindowsHelpers.cmake \ + /usr/lib64/cmake/Qt6Test/Qt6TestAdditionalTargetInfo.cmake \ + /usr/lib64/cmake/Qt6Test/Qt6TestConfig.cmake \ + /usr/lib64/cmake/Qt6Test/Qt6TestConfigVersion.cmake \ + /usr/lib64/cmake/Qt6Test/Qt6TestConfigVersionImpl.cmake \ + /usr/lib64/cmake/Qt6Test/Qt6TestDependencies.cmake \ + /usr/lib64/cmake/Qt6Test/Qt6TestTargets-relwithdebinfo.cmake \ + /usr/lib64/cmake/Qt6Test/Qt6TestTargets.cmake \ + /usr/lib64/cmake/Qt6Test/Qt6TestVersionlessAliasTargets.cmake \ + /usr/lib64/cmake/Qt6Test/QtTestProperties.cmake \ + /usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake \ + /usr/share/cmake/Modules/CheckCXXCompilerFlag.cmake \ + /usr/bin/cmake diff --git a/build-linux/tests/test_drag_utils_autogen/include/test_drag_utils.moc b/build-linux/tests/test_drag_utils_autogen/include/test_drag_utils.moc new file mode 100644 index 00000000..b47912df --- /dev/null +++ b/build-linux/tests/test_drag_utils_autogen/include/test_drag_utils.moc @@ -0,0 +1,108 @@ +/**************************************************************************** +** Meta object code from reading C++ file 'test_drag_utils.cpp' +** +** Created by: The Qt Meta Object Compiler version 69 (Qt 6.10.3) +** +** WARNING! All changes made in this file will be lost! +*****************************************************************************/ + +#include + +#include + +#include + + +#include +#if !defined(Q_MOC_OUTPUT_REVISION) +#error "The header file 'test_drag_utils.cpp' doesn't include ." +#elif Q_MOC_OUTPUT_REVISION != 69 +#error "This file was generated using the moc from 6.10.3. It" +#error "cannot be used with the include files from this version of Qt." +#error "(The moc has changed too much.)" +#endif + +#ifndef Q_CONSTINIT +#define Q_CONSTINIT +#endif + +QT_WARNING_PUSH +QT_WARNING_DISABLE_DEPRECATED +QT_WARNING_DISABLE_GCC("-Wuseless-cast") +namespace { +struct qt_meta_tag_ZN13TestDragUtilsE_t {}; +} // unnamed namespace + +template <> constexpr inline auto TestDragUtils::qt_create_metaobjectdata() +{ + namespace QMC = QtMocConstants; + QtMocHelpers::StringRefStorage qt_stringData { + "TestDragUtils", + "emptyFileDragReturnsFalse", + "" + }; + + QtMocHelpers::UintData qt_methods { + // Slot 'emptyFileDragReturnsFalse' + QtMocHelpers::SlotData(1, 2, QMC::AccessPrivate, QMetaType::Void), + }; + QtMocHelpers::UintData qt_properties { + }; + QtMocHelpers::UintData qt_enums { + }; + return QtMocHelpers::metaObjectData(QMC::MetaObjectFlag{}, qt_stringData, + qt_methods, qt_properties, qt_enums); +} +Q_CONSTINIT const QMetaObject TestDragUtils::staticMetaObject = { { + QMetaObject::SuperData::link(), + qt_staticMetaObjectStaticContent.stringdata, + qt_staticMetaObjectStaticContent.data, + qt_static_metacall, + nullptr, + qt_staticMetaObjectRelocatingContent.metaTypes, + nullptr +} }; + +void TestDragUtils::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) +{ + auto *_t = static_cast(_o); + if (_c == QMetaObject::InvokeMetaMethod) { + switch (_id) { + case 0: _t->emptyFileDragReturnsFalse(); break; + default: ; + } + } + (void)_a; +} + +const QMetaObject *TestDragUtils::metaObject() const +{ + return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject; +} + +void *TestDragUtils::qt_metacast(const char *_clname) +{ + if (!_clname) return nullptr; + if (!strcmp(_clname, qt_staticMetaObjectStaticContent.strings)) + return static_cast(this); + return QObject::qt_metacast(_clname); +} + +int TestDragUtils::qt_metacall(QMetaObject::Call _c, int _id, void **_a) +{ + _id = QObject::qt_metacall(_c, _id, _a); + if (_id < 0) + return _id; + if (_c == QMetaObject::InvokeMetaMethod) { + if (_id < 1) + qt_static_metacall(this, _c, _id, _a); + _id -= 1; + } + if (_c == QMetaObject::RegisterMethodArgumentMetaType) { + if (_id < 1) + *reinterpret_cast(_a[0]) = QMetaType(); + _id -= 1; + } + return _id; +} +QT_WARNING_POP diff --git a/build-linux/tests/test_drag_utils_autogen/moc_predefs.h b/build-linux/tests/test_drag_utils_autogen/moc_predefs.h new file mode 100644 index 00000000..0aeb7593 --- /dev/null +++ b/build-linux/tests/test_drag_utils_autogen/moc_predefs.h @@ -0,0 +1,504 @@ +#define __DBL_MIN_EXP__ (-1021) +#define __LDBL_MANT_DIG__ 64 +#define __cpp_nontype_template_parameter_auto 201606L +#define __UINT_LEAST16_MAX__ 0xffff +#define __FLT16_HAS_QUIET_NAN__ 1 +#define __ATOMIC_ACQUIRE 2 +#define QT_TESTCASE_BUILDDIR "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests" +#define __FLT128_MAX_10_EXP__ 4932 +#define __FLT_MIN__ 1.17549435082228750796873653722224568e-38F +#define __GCC_IEC_559_COMPLEX 2 +#define __cpp_aggregate_nsdmi 201304L +#define __UINT_LEAST8_TYPE__ unsigned char +#define __SIZEOF_FLOAT80__ 16 +#define __BFLT16_DENORM_MIN__ 9.18354961579912115600575419704879436e-41BF16 +#define __cpp_impl_three_way_comparison 201907L +#define __INTMAX_C(c) c ## L +#define __CHAR_BIT__ 8 +#define __cpp_designated_initializers 201707L +#define __UINT8_MAX__ 0xff +#define __SCHAR_WIDTH__ 8 +#define __WINT_MAX__ 0xffffffffU +#define __FLT32_MIN_EXP__ (-125) +#define __cpp_static_assert 201411L +#define __BFLT16_MIN_10_EXP__ (-37) +#define __cpp_inheriting_constructors 201511L +#define QT_GUI_LIB 1 +#define __ORDER_LITTLE_ENDIAN__ 1234 +#define __WCHAR_MAX__ 0x7fffffff +#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_2 1 +#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_4 1 +#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_8 1 +#define __GCC_ATOMIC_CHAR_LOCK_FREE 2 +#define __GCC_IEC_559 2 +#define __FLT32X_DECIMAL_DIG__ 17 +#define TLRENDER_OIIO 1 +#define __FLT_EVAL_METHOD__ 0 +#define __cpp_binary_literals 201304L +#define __FLT64_DECIMAL_DIG__ 17 +#define __cpp_noexcept_function_type 201510L +#define __GCC_ATOMIC_CHAR32_T_LOCK_FREE 2 +#define __cpp_variadic_templates 200704L +#define __UINT_FAST64_MAX__ 0xffffffffffffffffUL +#define __SIG_ATOMIC_TYPE__ int +#define __DBL_MIN_10_EXP__ (-307) +#define __FINITE_MATH_ONLY__ 0 +#define __cpp_variable_templates 201304L +#define __FLT32X_MAX_EXP__ 1024 +#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_1 1 +#define __FLT32_HAS_DENORM__ 1 +#define __UINT_FAST8_MAX__ 0xff +#define __cpp_rvalue_reference 200610L +#define __cpp_nested_namespace_definitions 201411L +#define __DEC64_MAX_EXP__ 385 +#define __INT8_C(c) c +#define __LDBL_HAS_INFINITY__ 1 +#define __INT_LEAST8_WIDTH__ 8 +#define __cpp_variadic_using 201611L +#define __UINT_LEAST64_MAX__ 0xffffffffffffffffUL +#define __INT_LEAST8_MAX__ 0x7f +#define __cpp_attributes 200809L +#define __cpp_capture_star_this 201603L +#define __SHRT_MAX__ 0x7fff +#define __LDBL_MAX__ 1.18973149535723176502126385303097021e+4932L +#define __cpp_impl_coroutine 201902L +#define __FLT64X_MAX_10_EXP__ 4932 +#define __cpp_if_constexpr 201606L +#define __BFLT16_MAX_10_EXP__ 38 +#define __BFLT16_MAX_EXP__ 128 +#define __LDBL_IS_IEC_60559__ 1 +#define QT_NO_DEBUG 1 +#define __FLT64X_HAS_QUIET_NAN__ 1 +#define QT_TESTLIB_LIB 1 +#define TLRENDER_SDL2 1 +#define __UINT_LEAST8_MAX__ 0xff +#define __GCC_ATOMIC_BOOL_LOCK_FREE 2 +#define __FLT128_DENORM_MIN__ 6.47517511943802511092443895822764655e-4966F128 +#define __UINTMAX_TYPE__ long unsigned int +#define __cpp_nsdmi 200809L +#define __BFLT16_DECIMAL_DIG__ 4 +#define __linux 1 +#define __DEC32_EPSILON__ 1E-6DF +#define __FLT_EVAL_METHOD_TS_18661_3__ 0 +#define __UINT32_MAX__ 0xffffffffU +#define __GXX_EXPERIMENTAL_CXX0X__ 1 +#define __DBL_DENORM_MIN__ double(4.94065645841246544176568792868221372e-324L) +#define __FLT128_MIN_EXP__ (-16381) +#define __DEC64X_MAX_EXP__ 6145 +#define __WINT_MIN__ 0U +#define __FLT128_MIN_10_EXP__ (-4931) +#define __FLT32X_IS_IEC_60559__ 1 +#define __INT_LEAST16_WIDTH__ 16 +#define __SCHAR_MAX__ 0x7f +#define __FLT128_MANT_DIG__ 113 +#define __WCHAR_MIN__ (-__WCHAR_MAX__ - 1) +#define __INT64_C(c) c ## L +#define __cpp_impl_destroying_delete 201806L +#define __GCC_ATOMIC_POINTER_LOCK_FREE 2 +#define TLRENDER_JPEG 1 +#define __ATOMIC_SEQ_CST 5 +#define __unix 1 +#define __INT_LEAST64_MAX__ 0x7fffffffffffffffL +#define __FLT32X_MANT_DIG__ 53 +#define __GCC_ATOMIC_CHAR16_T_LOCK_FREE 2 +#define __cpp_aligned_new 201606L +#define __FLT32_MAX_10_EXP__ 38 +#define __FLT64X_EPSILON__ 1.08420217248550443400745280086994171e-19F64x +#define __STDC_HOSTED__ 1 +#define __DEC64_MIN_EXP__ (-382) +#define TLRENDER_PNG 1 +#define __cpp_decltype_auto 201304L +#define __DBL_DIG__ 15 +#define __STDC_EMBED_EMPTY__ 2 +#define __FLT_EPSILON__ 1.19209289550781250000000000000000000e-7F +#define __cpp_char8_t 202207L +#define __GXX_WEAK__ 1 +#define __SHRT_WIDTH__ 16 +#define __FLT32_IS_IEC_60559__ 1 +#define __LDBL_MIN__ 3.36210314311209350626267781732175260e-4932L +#define __DBL_IS_IEC_60559__ 1 +#define __DEC32_MAX__ 9.999999E96DF +#define __CHAR8_TYPE__ unsigned char +#define __cpp_threadsafe_static_init 200806L +#define __cpp_enumerator_attributes 201411L +#define TLRENDER_EXR 1 +#define __FLT64X_DENORM_MIN__ 3.64519953188247460252840593361941982e-4951F64x +#define __FLT32X_HAS_INFINITY__ 1 +#define __unix__ 1 +#define __INT_WIDTH__ 32 +#define __STDC_IEC_559__ 1 +#define __STDC_ISO_10646__ 201706L +#define __GCC_ATOMIC_CHAR8_T_LOCK_FREE 2 +#define __DECIMAL_DIG__ 21 +#define __STDC_IEC_559_COMPLEX__ 1 +#define __FLT64_EPSILON__ 2.22044604925031308084726333618164062e-16F64 +#define __gnu_linux__ 1 +#define __INT16_MAX__ 0x7fff +#define __FLT64_MIN_EXP__ (-1021) +#define __cpp_using_enum 201907L +#define __DEC64X_EPSILON__ 1E-33D64x +#define __FLT64X_MIN_10_EXP__ (-4931) +#define __LDBL_HAS_QUIET_NAN__ 1 +#define __FLT16_MIN_EXP__ (-13) +#define __FLT64_MANT_DIG__ 53 +#define __cpp_consteval 202211L +#define __FLT64X_MANT_DIG__ 64 +#define FTK_API_GL_4_1 1 +#define __BFLT16_DIG__ 2 +#define __GNUC__ 15 +#define __GXX_RTTI 1 +#define TLRENDER_FFMPEG_PLUGIN 1 +#define __MMX__ 1 +#define __FLT_HAS_DENORM__ 1 +#define __SIZEOF_LONG_DOUBLE__ 16 +#define __BIGGEST_ALIGNMENT__ 16 +#define __STDC_UTF_16__ 1 +#define __FLT64_MAX_10_EXP__ 308 +#define __BFLT16_IS_IEC_60559__ 0 +#define __FLT16_MAX_10_EXP__ 4 +#define __cpp_delegating_constructors 200604L +#define __DBL_MAX__ double(1.79769313486231570814527423731704357e+308L) +#define __cpp_raw_strings 200710L +#define __INT_FAST32_MAX__ 0x7fffffffffffffffL +#define __DBL_HAS_INFINITY__ 1 +#define __INT64_MAX__ 0x7fffffffffffffffL +#define __SIZEOF_FLOAT__ 4 +#define __HAVE_SPECULATION_SAFE_VALUE 1 +#define __cpp_fold_expressions 201603L +#define __DEC32_MIN_EXP__ (-94) +#define __INTPTR_WIDTH__ 64 +#define __UINT_LEAST32_MAX__ 0xffffffffU +#define __FLT32X_HAS_DENORM__ 1 +#define __INT_FAST16_TYPE__ long int +#define __MMX_WITH_SSE__ 1 +#define __LDBL_HAS_DENORM__ 1 +#define QT_WIDGETS_LIB 1 +#define __SEG_GS 1 +#define __BFLT16_EPSILON__ 7.81250000000000000000000000000000000e-3BF16 +#define __cplusplus 202002L +#define __cpp_ref_qualifiers 200710L +#define __DEC32_MIN__ 1E-95DF +#define __DEPRECATED 1 +#define __cpp_rvalue_references 200610L +#define __DBL_MAX_EXP__ 1024 +#define __WCHAR_WIDTH__ 32 +#define __FLT32_MAX__ 3.40282346638528859811704183484516925e+38F32 +#define __DEC128_EPSILON__ 1E-33DL +#define __FLT16_DECIMAL_DIG__ 5 +#define __SSE2_MATH__ 1 +#define __ATOMIC_HLE_RELEASE 131072 +#define __PTRDIFF_MAX__ 0x7fffffffffffffffL +#define __amd64 1 +#define __DEC64X_MAX__ 9.999999999999999999999999999999999E6144D64x +#define __ATOMIC_HLE_ACQUIRE 65536 +#define __GNUG__ 15 +#define __LONG_LONG_MAX__ 0x7fffffffffffffffLL +#define __SIZEOF_SIZE_T__ 8 +#define __BFLT16_HAS_INFINITY__ 1 +#define __FLT64X_MIN_EXP__ (-16381) +#define __SIZEOF_WINT_T__ 4 +#define __FLT32X_DIG__ 15 +#define __LONG_LONG_WIDTH__ 64 +#define QT_TESTCASE_SOURCEDIR "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests" +#define __cpp_initializer_lists 200806L +#define __FLT32_MAX_EXP__ 128 +#define ABI_ID "ELF" +#define __cpp_hex_float 201603L +#define __GXX_ABI_VERSION 1020 +#define __FLT_MIN_EXP__ (-125) +#define __GCC_HAVE_DWARF2_CFI_ASM 1 +#define TLRENDER_OCIO 1 +#define __x86_64 1 +#define __cpp_lambdas 200907L +#define __INT_FAST64_TYPE__ long int +#define __BFLT16_MAX__ 3.38953138925153547590470800371487867e+38BF16 +#define __FLT64_DENORM_MIN__ 4.94065645841246544176568792868221372e-324F64 +#define __cpp_template_auto 201606L +#define __FLT16_DENORM_MIN__ 5.96046447753906250000000000000000000e-8F16 +#define __FLT128_EPSILON__ 1.92592994438723585305597794258492732e-34F128 +#define __FLT64X_NORM_MAX__ 1.18973149535723176502126385303097021e+4932F64x +#define __SIZEOF_POINTER__ 8 +#define __SIZE_TYPE__ long unsigned int +#define __LP64__ 1 +#define __DBL_HAS_QUIET_NAN__ 1 +#define __FLT32X_EPSILON__ 2.22044604925031308084726333618164062e-16F32x +#define __LDBL_MAX_EXP__ 16384 +#define __DECIMAL_BID_FORMAT__ 1 +#define __FLT64_MIN_10_EXP__ (-307) +#define __FLT16_MIN_10_EXP__ (-4) +#define __FLT64X_DECIMAL_DIG__ 21 +#define __DEC128_MIN__ 1E-6143DL +#define __REGISTER_PREFIX__ +#define __UINT16_MAX__ 0xffff +#define __FLT128_HAS_INFINITY__ 1 +#define __FLT32_MIN__ 1.17549435082228750796873653722224568e-38F32 +#define __UINT8_TYPE__ unsigned char +#define __FLT_DIG__ 6 +#define __NO_INLINE__ 1 +#define __DEC_EVAL_METHOD__ 2 +#define __FLT_MANT_DIG__ 24 +#define __LDBL_DECIMAL_DIG__ 21 +#define __VERSION__ "15.2.1 20260123 (Red Hat 15.2.1-7)" +#define __UINT64_C(c) c ## UL +#define __cpp_unicode_characters 201411L +#define __DEC64X_MIN__ 1E-6143D64x +#define _STDC_PREDEF_H 1 +#define __INT_LEAST32_MAX__ 0x7fffffff +#define __GCC_ATOMIC_INT_LOCK_FREE 2 +#define __FLT128_MAX_EXP__ 16384 +#define __cpp_conditional_explicit 201806L +#define __FLT32_MANT_DIG__ 24 +#define __cpp_decltype 200707L +#define __FLOAT_WORD_ORDER__ __ORDER_LITTLE_ENDIAN__ +#define SIZEOF_DPTR (sizeof(void*)) +#define __FLT32X_MIN_EXP__ (-1021) +#define __cpp_aggregate_paren_init 201902L +#define __STDC_IEC_60559_COMPLEX__ 201404L +#define __cpp_aggregate_bases 201603L +#define __BFLT16_MIN__ 1.17549435082228750796873653722224568e-38BF16 +#define __FLT128_HAS_DENORM__ 1 +#define __FLT32_DECIMAL_DIG__ 9 +#define __FLT128_DIG__ 33 +#define __INT32_C(c) c +#define __DEC64_EPSILON__ 1E-15DD +#define __ORDER_PDP_ENDIAN__ 3412 +#define __DEC128_MIN_EXP__ (-6142) +#define __DEC128_MAX__ 9.999999999999999999999999999999999E6144DL +#define __cpp_constinit 201907L +#define __INT_FAST32_TYPE__ long int +#define __UINT_LEAST16_TYPE__ short unsigned int +#define __DEC64X_MANT_DIG__ 34 +#define __DEC128_MAX_EXP__ 6145 +#define unix 1 +#define __DBL_HAS_DENORM__ 1 +#define __cpp_rtti 199711L +#define __UINT64_MAX__ 0xffffffffffffffffUL +#define __FLT_IS_IEC_60559__ 1 +#define __GNUC_WIDE_EXECUTION_CHARSET_NAME "UTF-32LE" +#define __FLT64X_DIG__ 18 +#define __INT8_TYPE__ signed char +#define __cpp_digit_separators 201309L +#define __ELF__ 1 +#define __GCC_ASM_FLAG_OUTPUTS__ 1 +#define __UINT32_TYPE__ unsigned int +#define __BFLT16_HAS_QUIET_NAN__ 1 +#define __FLT_RADIX__ 2 +#define __INT_LEAST16_TYPE__ short int +#define __LDBL_EPSILON__ 1.08420217248550443400745280086994171e-19L +#define __UINTMAX_C(c) c ## UL +#define __GNUC_RH_RELEASE__ 7 +#define __FLT16_DIG__ 3 +#define __k8 1 +#define __FLT32X_MIN__ 2.22507385850720138309023271733240406e-308F32x +#define __SIG_ATOMIC_MAX__ 0x7fffffff +#define __cpp_constexpr 202002L +#define __GCC_ATOMIC_WCHAR_T_LOCK_FREE 2 +#define __USER_LABEL_PREFIX__ +#define __STDC_IEC_60559_BFP__ 201404L +#define __SIZEOF_PTRDIFF_T__ 8 +#define __FLT64X_HAS_INFINITY__ 1 +#define __SIZEOF_LONG__ 8 +#define __LDBL_DIG__ 18 +#define __FLT64_IS_IEC_60559__ 1 +#define __x86_64__ 1 +#define __FLT16_IS_IEC_60559__ 1 +#define __FLT16_MAX_EXP__ 16 +#define __DEC32_SUBNORMAL_MIN__ 0.000001E-95DF +#define __STDC_EMBED_FOUND__ 1 +#define __INT_FAST16_MAX__ 0x7fffffffffffffffL +#define __GCC_CONSTRUCTIVE_SIZE 64 +#define __FLT64_DIG__ 15 +#define __UINT_FAST32_MAX__ 0xffffffffffffffffUL +#define __UINT_LEAST64_TYPE__ long unsigned int +#define __FLT16_EPSILON__ 9.76562500000000000000000000000000000e-4F16 +#define __FLT_HAS_QUIET_NAN__ 1 +#define __FLT_MAX_10_EXP__ 38 +#define __FLT64X_HAS_DENORM__ 1 +#define __DEC128_SUBNORMAL_MIN__ 0.000000000000000000000000000000001E-6143DL +#define __FLT_HAS_INFINITY__ 1 +#define __GNUC_EXECUTION_CHARSET_NAME "UTF-8" +#define __cpp_unicode_literals 200710L +#define __UINT_FAST16_TYPE__ long unsigned int +#define __DEC64_MAX__ 9.999999999999999E384DD +#define __STDC_EMBED_NOT_FOUND__ 0 +#define __INT_FAST32_WIDTH__ 64 +#define __CHAR16_TYPE__ short unsigned int +#define __PRAGMA_REDEFINE_EXTNAME 1 +#define __DEC64X_SUBNORMAL_MIN__ 0.000000000000000000000000000000001E-6143D64x +#define __SIZE_WIDTH__ 64 +#define __SEG_FS 1 +#define __INT_LEAST16_MAX__ 0x7fff +#define __FLT16_NORM_MAX__ 6.55040000000000000000000000000000000e+4F16 +#define __DEC64_MANT_DIG__ 16 +#define __FLT32_DENORM_MIN__ 1.40129846432481707092372958328991613e-45F32 +#define __SIG_ATOMIC_WIDTH__ 32 +#define __GCC_DESTRUCTIVE_SIZE 64 +#define __INT_LEAST64_TYPE__ long int +#define __INT16_TYPE__ short int +#define __INT_LEAST8_TYPE__ signed char +#define __FLT16_MAX__ 6.55040000000000000000000000000000000e+4F16 +#define __FLT128_MIN__ 3.36210314311209350626267781732175260e-4932F128 +#define __cpp_structured_bindings 201606L +#define __SIZEOF_INT__ 4 +#define __DEC32_MAX_EXP__ 97 +#define __INT_FAST8_MAX__ 0x7f +#define __FLT128_MAX__ 1.18973149535723176508575932662800702e+4932F128 +#define __INTPTR_MAX__ 0x7fffffffffffffffL +#define __cpp_sized_deallocation 201309L +#define __cpp_guaranteed_copy_elision 201606L +#define linux 1 +#define __FLT64_HAS_QUIET_NAN__ 1 +#define __FLT32_MIN_10_EXP__ (-37) +#define __EXCEPTIONS 1 +#define __UINT16_C(c) c +#define __PTRDIFF_WIDTH__ 64 +#define __cpp_range_based_for 201603L +#define __INT_FAST16_WIDTH__ 64 +#define __FLT64_HAS_INFINITY__ 1 +#define __FLT64X_MAX__ 1.18973149535723176502126385303097021e+4932F64x +#define __FLT16_HAS_INFINITY__ 1 +#define __STDCPP_DEFAULT_NEW_ALIGNMENT__ 16 +#define __SIG_ATOMIC_MIN__ (-__SIG_ATOMIC_MAX__ - 1) +#define __code_model_small__ 1 +#define __GCC_ATOMIC_LONG_LOCK_FREE 2 +#define __cpp_nontype_template_args 201911L +#define __DEC32_MANT_DIG__ 7 +#define __k8__ 1 +#define __INTPTR_TYPE__ long int +#define __UINT16_TYPE__ short unsigned int +#define __WCHAR_TYPE__ int +#define __UINTPTR_MAX__ 0xffffffffffffffffUL +#define __INT_FAST64_WIDTH__ 64 +#define __cpp_nontype_template_parameter_class 201806L +#define __cpp_concepts 202002L +#define __INT_FAST64_MAX__ 0x7fffffffffffffffL +#define __GCC_ATOMIC_TEST_AND_SET_TRUEVAL 1 +#define __FLT_NORM_MAX__ 3.40282346638528859811704183484516925e+38F +#define __FLT32_HAS_INFINITY__ 1 +#define __FLT64X_MAX_EXP__ 16384 +#define __UINT_FAST64_TYPE__ long unsigned int +#define __cpp_constexpr_in_decltype 201711L +#define __cpp_inline_variables 201606L +#define __BFLT16_MIN_EXP__ (-125) +#define __INT_MAX__ 0x7fffffff +#define __linux__ 1 +#define __INT64_TYPE__ long int +#define __FLT_MAX_EXP__ 128 +#define __ORDER_BIG_ENDIAN__ 4321 +#define __DBL_MANT_DIG__ 53 +#define QT_CORE_LIB 1 +#define __SIZEOF_FLOAT128__ 16 +#define __BFLT16_MANT_DIG__ 8 +#define __DEC64_MIN__ 1E-383DD +#define __WINT_TYPE__ unsigned int +#define __UINT_LEAST32_TYPE__ unsigned int +#define __SIZEOF_SHORT__ 2 +#define __FLT32_NORM_MAX__ 3.40282346638528859811704183484516925e+38F32 +#define __SSE__ 1 +#define __LDBL_MIN_EXP__ (-16381) +#define __FLT64_MAX__ 1.79769313486231570814527423731704357e+308F64 +#define __DEC64X_MIN_EXP__ (-6142) +#define __amd64__ 1 +#define __WINT_WIDTH__ 32 +#define __INT_LEAST64_WIDTH__ 64 +#define __FLT32X_MAX_10_EXP__ 308 +#define __cpp_namespace_attributes 201411L +#define __SIZEOF_INT128__ 16 +#define __FLT16_MIN__ 6.10351562500000000000000000000000000e-5F16 +#define __FLT64X_IS_IEC_60559__ 1 +#define __GXX_CONSTEXPR_ASM__ 1 +#define __LDBL_MAX_10_EXP__ 4932 +#define __ATOMIC_RELAXED 0 +#define __DBL_EPSILON__ double(2.22044604925031308084726333618164062e-16L) +#define __INT_LEAST32_TYPE__ int +#define _LP64 1 +#define __UINT8_C(c) c +#define __FLT64_MAX_EXP__ 1024 +#define __cpp_return_type_deduction 201304L +#define __SIZEOF_WCHAR_T__ 4 +#define __GNUC_PATCHLEVEL__ 1 +#define __FLT128_NORM_MAX__ 1.18973149535723176508575932662800702e+4932F128 +#define __FLT64_NORM_MAX__ 1.79769313486231570814527423731704357e+308F64 +#define __FLT128_HAS_QUIET_NAN__ 1 +#define __INTMAX_MAX__ 0x7fffffffffffffffL +#define TLRENDER_TIFF 1 +#define __INT_FAST8_TYPE__ signed char +#define __FLT64X_MIN__ 3.36210314311209350626267781732175260e-4932F64x +#define __STDCPP_THREADS__ 1 +#define __BFLT16_HAS_DENORM__ 1 +#define __GNUC_STDC_INLINE__ 1 +#define __FLT64_HAS_DENORM__ 1 +#define __FLT32_EPSILON__ 1.19209289550781250000000000000000000e-7F32 +#define __FLT16_HAS_DENORM__ 1 +#define __DBL_DECIMAL_DIG__ 17 +#define __STDC_UTF_32__ 1 +#define __INT_FAST8_WIDTH__ 8 +#define __FXSR__ 1 +#define __FLT32X_MAX__ 1.79769313486231570814527423731704357e+308F32x +#define __DBL_NORM_MAX__ double(1.79769313486231570814527423731704357e+308L) +#define __BYTE_ORDER__ __ORDER_LITTLE_ENDIAN__ +#define TLRENDER_FFMPEG 1 +#define __INTMAX_WIDTH__ 64 +#define __cpp_runtime_arrays 198712L +#define __FLT32_DIG__ 6 +#define __UINT64_TYPE__ long unsigned int +#define __UINT32_C(c) c ## U +#define __cpp_alias_templates 200704L +#define __cpp_constexpr_dynamic_alloc 201907L +#define __FLT_DENORM_MIN__ 1.40129846432481707092372958328991613e-45F +#define __FLT128_IS_IEC_60559__ 1 +#define __INT8_MAX__ 0x7f +#define __LONG_WIDTH__ 64 +#define __DBL_MIN__ double(2.22507385850720138309023271733240406e-308L) +#define __INT32_MAX__ 0x7fffffff +#define __UINT_FAST32_TYPE__ long unsigned int +#define __FLT16_MANT_DIG__ 11 +#define __FLT32X_NORM_MAX__ 1.79769313486231570814527423731704357e+308F32x +#define __CHAR32_TYPE__ unsigned int +#define __FLT_MAX__ 3.40282346638528859811704183484516925e+38F +#define __SSE2__ 1 +#define __cpp_deduction_guides 201907L +#define __BFLT16_NORM_MAX__ 3.38953138925153547590470800371487867e+38BF16 +#define __INT32_TYPE__ int +#define __SIZEOF_DOUBLE__ 8 +#define __cpp_exceptions 199711L +#define __FLT_MIN_10_EXP__ (-37) +#define __FLT64_MIN__ 2.22507385850720138309023271733240406e-308F64 +#define __INT_LEAST32_WIDTH__ 32 +#define __INTMAX_TYPE__ long int +#define __GLIBCXX_BITSIZE_INT_N_0 128 +#define __FLT32X_HAS_QUIET_NAN__ 1 +#define __ATOMIC_CONSUME 1 +#define __GNUC_MINOR__ 2 +#define __GLIBCXX_TYPE_INT_N_0 __int128 +#define __UINTMAX_MAX__ 0xffffffffffffffffUL +#define __FLT32X_DENORM_MIN__ 4.94065645841246544176568792868221372e-324F32x +#define __cpp_template_template_args 201611L +#define __DBL_MAX_10_EXP__ 308 +#define __LDBL_DENORM_MIN__ 3.64519953188247460252840593361941982e-4951L +#define __INT16_C(c) c +#define __STDC__ 1 +#define __PTRDIFF_TYPE__ long int +#define __LONG_MAX__ 0x7fffffffffffffffL +#define __FLT32X_MIN_10_EXP__ (-307) +#define __UINTPTR_TYPE__ long unsigned int +#define __DEC64_SUBNORMAL_MIN__ 0.000000000000001E-383DD +#define __DEC128_MANT_DIG__ 34 +#define __LDBL_MIN_10_EXP__ (-4931) +#define __cpp_generic_lambdas 201707L +#define __SSE_MATH__ 1 +#define __SIZEOF_LONG_LONG__ 8 +#define __cpp_user_defined_literals 200809L +#define __FLT128_DECIMAL_DIG__ 36 +#define __GCC_ATOMIC_LLONG_LOCK_FREE 2 +#define __FLT32_HAS_QUIET_NAN__ 1 +#define __FLT_DECIMAL_DIG__ 9 +#define __UINT_FAST16_MAX__ 0xffffffffffffffffUL +#define __LDBL_NORM_MAX__ 1.18973149535723176502126385303097021e+4932L +#define __GCC_ATOMIC_SHORT_LOCK_FREE 2 +#define __SIZE_MAX__ 0xffffffffffffffffUL +#define __UINT_FAST8_TYPE__ unsigned char +#define _GNU_SOURCE 1 +#define __cpp_init_captures 201803L +#define __ATOMIC_ACQ_REL 4 +#define __ATOMIC_RELEASE 3 diff --git a/build-linux/tests/test_drag_utils_autogen/mocs_compilation.cpp b/build-linux/tests/test_drag_utils_autogen/mocs_compilation.cpp new file mode 100644 index 00000000..c6047896 --- /dev/null +++ b/build-linux/tests/test_drag_utils_autogen/mocs_compilation.cpp @@ -0,0 +1,2 @@ +// This file is autogenerated. Changes will be overwritten. +#include "VNU7RW3YIC/moc_drag_utils.cpp" diff --git a/build-linux/tests/test_drag_utils_autogen/timestamp b/build-linux/tests/test_drag_utils_autogen/timestamp new file mode 100644 index 00000000..e69de29b diff --git a/build-linux/tests/test_everything_search b/build-linux/tests/test_everything_search new file mode 100755 index 00000000..23aaff9b Binary files /dev/null and b/build-linux/tests/test_everything_search differ diff --git a/build-linux/tests/test_everything_search_autogen/deps b/build-linux/tests/test_everything_search_autogen/deps new file mode 100644 index 00000000..65152e10 --- /dev/null +++ b/build-linux/tests/test_everything_search_autogen/deps @@ -0,0 +1,832 @@ +test_everything_search_autogen/timestamp: \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_everything_search_autogen/moc_predefs.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/everything_search.cpp \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/everything_search.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/CMakeLists.txt \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/test_everything_search.cpp \ + /usr/include/asm-generic/bitsperlong.h \ + /usr/include/asm-generic/errno-base.h \ + /usr/include/asm-generic/errno.h \ + /usr/include/asm-generic/int-ll64.h \ + /usr/include/asm-generic/posix_types.h \ + /usr/include/asm-generic/types.h \ + /usr/include/asm/bitsperlong.h \ + /usr/include/asm/errno.h \ + /usr/include/asm/posix_types.h \ + /usr/include/asm/posix_types_64.h \ + /usr/include/asm/types.h \ + /usr/include/asm/unistd.h \ + /usr/include/asm/unistd_64.h \ + /usr/include/assert.h \ + /usr/include/bits/atomic_wide_counter.h \ + /usr/include/bits/byteswap.h \ + /usr/include/bits/confname.h \ + /usr/include/bits/cpu-set.h \ + /usr/include/bits/endian.h \ + /usr/include/bits/endianness.h \ + /usr/include/bits/environments.h \ + /usr/include/bits/errno.h \ + /usr/include/bits/floatn-common.h \ + /usr/include/bits/floatn.h \ + /usr/include/bits/getopt_core.h \ + /usr/include/bits/getopt_posix.h \ + /usr/include/bits/libc-header-start.h \ + /usr/include/bits/locale.h \ + /usr/include/bits/long-double.h \ + /usr/include/bits/posix_opt.h \ + /usr/include/bits/pthread_stack_min-dynamic.h \ + /usr/include/bits/pthreadtypes-arch.h \ + /usr/include/bits/pthreadtypes.h \ + /usr/include/bits/sched.h \ + /usr/include/bits/select.h \ + /usr/include/bits/semaphore.h \ + /usr/include/bits/setjmp.h \ + /usr/include/bits/stdint-intn.h \ + /usr/include/bits/stdio_lim.h \ + /usr/include/bits/struct_mutex.h \ + /usr/include/bits/struct_rwlock.h \ + /usr/include/bits/syscall.h \ + /usr/include/bits/thread-shared-types.h \ + /usr/include/bits/time.h \ + /usr/include/bits/time64.h \ + /usr/include/bits/timesize.h \ + /usr/include/bits/timex.h \ + /usr/include/bits/types.h \ + /usr/include/bits/types/FILE.h \ + /usr/include/bits/types/__FILE.h \ + /usr/include/bits/types/__fpos64_t.h \ + /usr/include/bits/types/__fpos_t.h \ + /usr/include/bits/types/__locale_t.h \ + /usr/include/bits/types/__mbstate_t.h \ + /usr/include/bits/types/__sigset_t.h \ + /usr/include/bits/types/clock_t.h \ + /usr/include/bits/types/clockid_t.h \ + /usr/include/bits/types/cookie_io_functions_t.h \ + /usr/include/bits/types/error_t.h \ + /usr/include/bits/types/locale_t.h \ + /usr/include/bits/types/mbstate_t.h \ + /usr/include/bits/types/sigset_t.h \ + /usr/include/bits/types/struct_FILE.h \ + /usr/include/bits/types/struct___jmp_buf_tag.h \ + /usr/include/bits/types/struct_itimerspec.h \ + /usr/include/bits/types/struct_sched_param.h \ + /usr/include/bits/types/struct_timespec.h \ + /usr/include/bits/types/struct_timeval.h \ + /usr/include/bits/types/struct_tm.h \ + /usr/include/bits/types/time_t.h \ + /usr/include/bits/types/timer_t.h \ + /usr/include/bits/types/wint_t.h \ + /usr/include/bits/typesizes.h \ + /usr/include/bits/uintn-identity.h \ + /usr/include/bits/unistd_ext.h \ + /usr/include/bits/wchar.h \ + /usr/include/bits/wctype-wchar.h \ + /usr/include/bits/wordsize.h \ + /usr/include/c++/15/algorithm \ + /usr/include/c++/15/array \ + /usr/include/c++/15/atomic \ + /usr/include/c++/15/backward/auto_ptr.h \ + /usr/include/c++/15/backward/binders.h \ + /usr/include/c++/15/bit \ + /usr/include/c++/15/bits/algorithmfwd.h \ + /usr/include/c++/15/bits/align.h \ + /usr/include/c++/15/bits/alloc_traits.h \ + /usr/include/c++/15/bits/allocated_ptr.h \ + /usr/include/c++/15/bits/allocator.h \ + /usr/include/c++/15/bits/atomic_base.h \ + /usr/include/c++/15/bits/atomic_futex.h \ + /usr/include/c++/15/bits/atomic_lockfree_defines.h \ + /usr/include/c++/15/bits/atomic_timed_wait.h \ + /usr/include/c++/15/bits/atomic_wait.h \ + /usr/include/c++/15/bits/basic_ios.h \ + /usr/include/c++/15/bits/basic_ios.tcc \ + /usr/include/c++/15/bits/basic_string.h \ + /usr/include/c++/15/bits/basic_string.tcc \ + /usr/include/c++/15/bits/char_traits.h \ + /usr/include/c++/15/bits/charconv.h \ + /usr/include/c++/15/bits/chrono.h \ + /usr/include/c++/15/bits/chrono_io.h \ + /usr/include/c++/15/bits/codecvt.h \ + /usr/include/c++/15/bits/concept_check.h \ + /usr/include/c++/15/bits/cpp_type_traits.h \ + /usr/include/c++/15/bits/cxxabi_forced.h \ + /usr/include/c++/15/bits/cxxabi_init_exception.h \ + /usr/include/c++/15/bits/enable_special_members.h \ + /usr/include/c++/15/bits/erase_if.h \ + /usr/include/c++/15/bits/exception.h \ + /usr/include/c++/15/bits/exception_defines.h \ + /usr/include/c++/15/bits/exception_ptr.h \ + /usr/include/c++/15/bits/functexcept.h \ + /usr/include/c++/15/bits/functional_hash.h \ + /usr/include/c++/15/bits/hash_bytes.h \ + /usr/include/c++/15/bits/hashtable.h \ + /usr/include/c++/15/bits/hashtable_policy.h \ + /usr/include/c++/15/bits/invoke.h \ + /usr/include/c++/15/bits/ios_base.h \ + /usr/include/c++/15/bits/istream.tcc \ + /usr/include/c++/15/bits/iterator_concepts.h \ + /usr/include/c++/15/bits/list.tcc \ + /usr/include/c++/15/bits/locale_classes.h \ + /usr/include/c++/15/bits/locale_classes.tcc \ + /usr/include/c++/15/bits/locale_conv.h \ + /usr/include/c++/15/bits/locale_facets.h \ + /usr/include/c++/15/bits/locale_facets.tcc \ + /usr/include/c++/15/bits/locale_facets_nonio.h \ + /usr/include/c++/15/bits/locale_facets_nonio.tcc \ + /usr/include/c++/15/bits/localefwd.h \ + /usr/include/c++/15/bits/max_size_type.h \ + /usr/include/c++/15/bits/memory_resource.h \ + /usr/include/c++/15/bits/memoryfwd.h \ + /usr/include/c++/15/bits/move.h \ + /usr/include/c++/15/bits/nested_exception.h \ + /usr/include/c++/15/bits/new_allocator.h \ + /usr/include/c++/15/bits/node_handle.h \ + /usr/include/c++/15/bits/ostream.h \ + /usr/include/c++/15/bits/ostream.tcc \ + /usr/include/c++/15/bits/ostream_insert.h \ + /usr/include/c++/15/bits/parse_numbers.h \ + /usr/include/c++/15/bits/postypes.h \ + /usr/include/c++/15/bits/predefined_ops.h \ + /usr/include/c++/15/bits/ptr_traits.h \ + /usr/include/c++/15/bits/quoted_string.h \ + /usr/include/c++/15/bits/random.h \ + /usr/include/c++/15/bits/random.tcc \ + /usr/include/c++/15/bits/range_access.h \ + /usr/include/c++/15/bits/ranges_algo.h \ + /usr/include/c++/15/bits/ranges_algobase.h \ + /usr/include/c++/15/bits/ranges_base.h \ + /usr/include/c++/15/bits/ranges_cmp.h \ + /usr/include/c++/15/bits/ranges_uninitialized.h \ + /usr/include/c++/15/bits/ranges_util.h \ + /usr/include/c++/15/bits/refwrap.h \ + /usr/include/c++/15/bits/requires_hosted.h \ + /usr/include/c++/15/bits/semaphore_base.h \ + /usr/include/c++/15/bits/shared_ptr.h \ + /usr/include/c++/15/bits/shared_ptr_atomic.h \ + /usr/include/c++/15/bits/shared_ptr_base.h \ + /usr/include/c++/15/bits/specfun.h \ + /usr/include/c++/15/bits/sstream.tcc \ + /usr/include/c++/15/bits/std_abs.h \ + /usr/include/c++/15/bits/std_function.h \ + /usr/include/c++/15/bits/std_mutex.h \ + /usr/include/c++/15/bits/std_thread.h \ + /usr/include/c++/15/bits/stl_algo.h \ + /usr/include/c++/15/bits/stl_algobase.h \ + /usr/include/c++/15/bits/stl_bvector.h \ + /usr/include/c++/15/bits/stl_construct.h \ + /usr/include/c++/15/bits/stl_function.h \ + /usr/include/c++/15/bits/stl_heap.h \ + /usr/include/c++/15/bits/stl_iterator.h \ + /usr/include/c++/15/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/15/bits/stl_iterator_base_types.h \ + /usr/include/c++/15/bits/stl_list.h \ + /usr/include/c++/15/bits/stl_map.h \ + /usr/include/c++/15/bits/stl_multimap.h \ + /usr/include/c++/15/bits/stl_multiset.h \ + /usr/include/c++/15/bits/stl_numeric.h \ + /usr/include/c++/15/bits/stl_pair.h \ + /usr/include/c++/15/bits/stl_raw_storage_iter.h \ + /usr/include/c++/15/bits/stl_relops.h \ + /usr/include/c++/15/bits/stl_set.h \ + /usr/include/c++/15/bits/stl_tempbuf.h \ + /usr/include/c++/15/bits/stl_tree.h \ + /usr/include/c++/15/bits/stl_uninitialized.h \ + /usr/include/c++/15/bits/stl_vector.h \ + /usr/include/c++/15/bits/stream_iterator.h \ + /usr/include/c++/15/bits/streambuf.tcc \ + /usr/include/c++/15/bits/streambuf_iterator.h \ + /usr/include/c++/15/bits/string_view.tcc \ + /usr/include/c++/15/bits/stringfwd.h \ + /usr/include/c++/15/bits/this_thread_sleep.h \ + /usr/include/c++/15/bits/uniform_int_dist.h \ + /usr/include/c++/15/bits/unique_lock.h \ + /usr/include/c++/15/bits/unique_ptr.h \ + /usr/include/c++/15/bits/unordered_map.h \ + /usr/include/c++/15/bits/unordered_set.h \ + /usr/include/c++/15/bits/uses_allocator.h \ + /usr/include/c++/15/bits/uses_allocator_args.h \ + /usr/include/c++/15/bits/utility.h \ + /usr/include/c++/15/bits/vector.tcc \ + /usr/include/c++/15/bits/version.h \ + /usr/include/c++/15/cassert \ + /usr/include/c++/15/cctype \ + /usr/include/c++/15/cerrno \ + /usr/include/c++/15/charconv \ + /usr/include/c++/15/chrono \ + /usr/include/c++/15/climits \ + /usr/include/c++/15/clocale \ + /usr/include/c++/15/cmath \ + /usr/include/c++/15/compare \ + /usr/include/c++/15/concepts \ + /usr/include/c++/15/condition_variable \ + /usr/include/c++/15/cstddef \ + /usr/include/c++/15/cstdint \ + /usr/include/c++/15/cstdio \ + /usr/include/c++/15/cstdlib \ + /usr/include/c++/15/cstring \ + /usr/include/c++/15/ctime \ + /usr/include/c++/15/cwchar \ + /usr/include/c++/15/cwctype \ + /usr/include/c++/15/debug/assertions.h \ + /usr/include/c++/15/debug/debug.h \ + /usr/include/c++/15/exception \ + /usr/include/c++/15/experimental/source_location \ + /usr/include/c++/15/ext/aligned_buffer.h \ + /usr/include/c++/15/ext/alloc_traits.h \ + /usr/include/c++/15/ext/atomicity.h \ + /usr/include/c++/15/ext/concurrence.h \ + /usr/include/c++/15/ext/numeric_traits.h \ + /usr/include/c++/15/ext/string_conversions.h \ + /usr/include/c++/15/ext/type_traits.h \ + /usr/include/c++/15/filesystem \ + /usr/include/c++/15/format \ + /usr/include/c++/15/functional \ + /usr/include/c++/15/future \ + /usr/include/c++/15/initializer_list \ + /usr/include/c++/15/iomanip \ + /usr/include/c++/15/ios \ + /usr/include/c++/15/iosfwd \ + /usr/include/c++/15/istream \ + /usr/include/c++/15/iterator \ + /usr/include/c++/15/limits \ + /usr/include/c++/15/list \ + /usr/include/c++/15/locale \ + /usr/include/c++/15/map \ + /usr/include/c++/15/memory \ + /usr/include/c++/15/memory_resource \ + /usr/include/c++/15/mutex \ + /usr/include/c++/15/new \ + /usr/include/c++/15/numeric \ + /usr/include/c++/15/optional \ + /usr/include/c++/15/ostream \ + /usr/include/c++/15/pstl/execution_defs.h \ + /usr/include/c++/15/pstl/glue_numeric_defs.h \ + /usr/include/c++/15/pstl/pstl_config.h \ + /usr/include/c++/15/random \ + /usr/include/c++/15/ratio \ + /usr/include/c++/15/semaphore \ + /usr/include/c++/15/set \ + /usr/include/c++/15/shared_mutex \ + /usr/include/c++/15/source_location \ + /usr/include/c++/15/sstream \ + /usr/include/c++/15/stdexcept \ + /usr/include/c++/15/stdlib.h \ + /usr/include/c++/15/stop_token \ + /usr/include/c++/15/streambuf \ + /usr/include/c++/15/string \ + /usr/include/c++/15/string_view \ + /usr/include/c++/15/system_error \ + /usr/include/c++/15/tr1/bessel_function.tcc \ + /usr/include/c++/15/tr1/beta_function.tcc \ + /usr/include/c++/15/tr1/ell_integral.tcc \ + /usr/include/c++/15/tr1/exp_integral.tcc \ + /usr/include/c++/15/tr1/gamma.tcc \ + /usr/include/c++/15/tr1/hypergeometric.tcc \ + /usr/include/c++/15/tr1/legendre_function.tcc \ + /usr/include/c++/15/tr1/modified_bessel_func.tcc \ + /usr/include/c++/15/tr1/poly_hermite.tcc \ + /usr/include/c++/15/tr1/poly_laguerre.tcc \ + /usr/include/c++/15/tr1/riemann_zeta.tcc \ + /usr/include/c++/15/tr1/special_function_util.h \ + /usr/include/c++/15/tuple \ + /usr/include/c++/15/type_traits \ + /usr/include/c++/15/typeinfo \ + /usr/include/c++/15/unordered_map \ + /usr/include/c++/15/unordered_set \ + /usr/include/c++/15/utility \ + /usr/include/c++/15/variant \ + /usr/include/c++/15/vector \ + /usr/include/c++/15/version \ + /usr/include/c++/15/x86_64-redhat-linux/bits/atomic_word.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/c++allocator.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/c++config.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/c++locale.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/cpu_defines.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/ctype_base.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/ctype_inline.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/error_constants.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/gthr-default.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/gthr.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/messages_members.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/opt_random.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/os_defines.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/time_members.h \ + /usr/include/ctype.h \ + /usr/include/endian.h \ + /usr/include/errno.h \ + /usr/include/features-time64.h \ + /usr/include/features.h \ + /usr/include/gnu/stubs-64.h \ + /usr/include/gnu/stubs.h \ + /usr/include/libintl.h \ + /usr/include/linux/close_range.h \ + /usr/include/linux/errno.h \ + /usr/include/linux/posix_types.h \ + /usr/include/linux/sched/types.h \ + /usr/include/linux/stddef.h \ + /usr/include/linux/types.h \ + /usr/include/locale.h \ + /usr/include/pthread.h \ + /usr/include/qt6/QtCore/QAbstractItemModel \ + /usr/include/qt6/QtCore/QDateTime \ + /usr/include/qt6/QtCore/QDeadlineTimer \ + /usr/include/qt6/QtCore/QHash \ + /usr/include/qt6/QtCore/QLibrary \ + /usr/include/qt6/QtCore/QList \ + /usr/include/qt6/QtCore/QMap \ + /usr/include/qt6/QtCore/QMutex \ + /usr/include/qt6/QtCore/QObject \ + /usr/include/qt6/QtCore/QString \ + /usr/include/qt6/QtCore/QStringList \ + /usr/include/qt6/QtCore/QVariant \ + /usr/include/qt6/QtCore/QVector \ + /usr/include/qt6/QtCore/QtCore \ + /usr/include/qt6/QtCore/QtCoreDepends \ + /usr/include/qt6/QtCore/q17memory.h \ + /usr/include/qt6/QtCore/q20algorithm.h \ + /usr/include/qt6/QtCore/q20chrono.h \ + /usr/include/qt6/QtCore/q20functional.h \ + /usr/include/qt6/QtCore/q20iterator.h \ + /usr/include/qt6/QtCore/q20map.h \ + /usr/include/qt6/QtCore/q20memory.h \ + /usr/include/qt6/QtCore/q20type_traits.h \ + /usr/include/qt6/QtCore/q20utility.h \ + /usr/include/qt6/QtCore/q20vector.h \ + /usr/include/qt6/QtCore/q23functional.h \ + /usr/include/qt6/QtCore/q23type_traits.h \ + /usr/include/qt6/QtCore/q23utility.h \ + /usr/include/qt6/QtCore/q26numeric.h \ + /usr/include/qt6/QtCore/qabstractanimation.h \ + /usr/include/qt6/QtCore/qabstracteventdispatcher.h \ + /usr/include/qt6/QtCore/qabstractitemmodel.h \ + /usr/include/qt6/QtCore/qabstractnativeeventfilter.h \ + /usr/include/qt6/QtCore/qabstractproxymodel.h \ + /usr/include/qt6/QtCore/qalgorithms.h \ + /usr/include/qt6/QtCore/qalloc.h \ + /usr/include/qt6/QtCore/qanimationgroup.h \ + /usr/include/qt6/QtCore/qanystringview.h \ + /usr/include/qt6/QtCore/qapplicationstatic.h \ + /usr/include/qt6/QtCore/qarraydata.h \ + /usr/include/qt6/QtCore/qarraydataops.h \ + /usr/include/qt6/QtCore/qarraydatapointer.h \ + /usr/include/qt6/QtCore/qassert.h \ + /usr/include/qt6/QtCore/qassociativeiterable.h \ + /usr/include/qt6/QtCore/qatomic.h \ + /usr/include/qt6/QtCore/qatomic_cxx11.h \ + /usr/include/qt6/QtCore/qatomicscopedvaluerollback.h \ + /usr/include/qt6/QtCore/qbasicatomic.h \ + /usr/include/qt6/QtCore/qbasictimer.h \ + /usr/include/qt6/QtCore/qbindingstorage.h \ + /usr/include/qt6/QtCore/qbitarray.h \ + /usr/include/qt6/QtCore/qbuffer.h \ + /usr/include/qt6/QtCore/qbytearray.h \ + /usr/include/qt6/QtCore/qbytearrayalgorithms.h \ + /usr/include/qt6/QtCore/qbytearraylist.h \ + /usr/include/qt6/QtCore/qbytearraymatcher.h \ + /usr/include/qt6/QtCore/qbytearrayview.h \ + /usr/include/qt6/QtCore/qcache.h \ + /usr/include/qt6/QtCore/qcalendar.h \ + /usr/include/qt6/QtCore/qcborarray.h \ + /usr/include/qt6/QtCore/qcborcommon.h \ + /usr/include/qt6/QtCore/qcbormap.h \ + /usr/include/qt6/QtCore/qcborstream.h \ + /usr/include/qt6/QtCore/qcborstreamreader.h \ + /usr/include/qt6/QtCore/qcborstreamwriter.h \ + /usr/include/qt6/QtCore/qcborvalue.h \ + /usr/include/qt6/QtCore/qchar.h \ + /usr/include/qt6/QtCore/qcheckedint_impl.h \ + /usr/include/qt6/QtCore/qchronotimer.h \ + /usr/include/qt6/QtCore/qcollator.h \ + /usr/include/qt6/QtCore/qcommandlineoption.h \ + /usr/include/qt6/QtCore/qcommandlineparser.h \ + /usr/include/qt6/QtCore/qcompare.h \ + /usr/include/qt6/QtCore/qcompare_impl.h \ + /usr/include/qt6/QtCore/qcomparehelpers.h \ + /usr/include/qt6/QtCore/qcompilerdetection.h \ + /usr/include/qt6/QtCore/qconcatenatetablesproxymodel.h \ + /usr/include/qt6/QtCore/qconfig-64.h \ + /usr/include/qt6/QtCore/qconfig.h \ + /usr/include/qt6/QtCore/qconstructormacros.h \ + /usr/include/qt6/QtCore/qcontainerfwd.h \ + /usr/include/qt6/QtCore/qcontainerinfo.h \ + /usr/include/qt6/QtCore/qcontainertools_impl.h \ + /usr/include/qt6/QtCore/qcontiguouscache.h \ + /usr/include/qt6/QtCore/qcoreapplication.h \ + /usr/include/qt6/QtCore/qcoreapplication_platform.h \ + /usr/include/qt6/QtCore/qcoreevent.h \ + /usr/include/qt6/QtCore/qcryptographichash.h \ + /usr/include/qt6/QtCore/qdarwinhelpers.h \ + /usr/include/qt6/QtCore/qdatastream.h \ + /usr/include/qt6/QtCore/qdatetime.h \ + /usr/include/qt6/QtCore/qdeadlinetimer.h \ + /usr/include/qt6/QtCore/qdebug.h \ + /usr/include/qt6/QtCore/qdir.h \ + /usr/include/qt6/QtCore/qdiriterator.h \ + /usr/include/qt6/QtCore/qdirlisting.h \ + /usr/include/qt6/QtCore/qeasingcurve.h \ + /usr/include/qt6/QtCore/qelapsedtimer.h \ + /usr/include/qt6/QtCore/qendian.h \ + /usr/include/qt6/QtCore/qeventloop.h \ + /usr/include/qt6/QtCore/qexception.h \ + /usr/include/qt6/QtCore/qexceptionhandling.h \ + /usr/include/qt6/QtCore/qfactoryinterface.h \ + /usr/include/qt6/QtCore/qfile.h \ + /usr/include/qt6/QtCore/qfiledevice.h \ + /usr/include/qt6/QtCore/qfileinfo.h \ + /usr/include/qt6/QtCore/qfileselector.h \ + /usr/include/qt6/QtCore/qfilesystemwatcher.h \ + /usr/include/qt6/QtCore/qflags.h \ + /usr/include/qt6/QtCore/qfloat16.h \ + /usr/include/qt6/QtCore/qforeach.h \ + /usr/include/qt6/QtCore/qfunctionaltools_impl.h \ + /usr/include/qt6/QtCore/qfunctionpointer.h \ + /usr/include/qt6/QtCore/qfuture.h \ + /usr/include/qt6/QtCore/qfuture_impl.h \ + /usr/include/qt6/QtCore/qfutureinterface.h \ + /usr/include/qt6/QtCore/qfuturesynchronizer.h \ + /usr/include/qt6/QtCore/qfuturewatcher.h \ + /usr/include/qt6/QtCore/qgenericatomic.h \ + /usr/include/qt6/QtCore/qglobal.h \ + /usr/include/qt6/QtCore/qglobalstatic.h \ + /usr/include/qt6/QtCore/qhash.h \ + /usr/include/qt6/QtCore/qhashfunctions.h \ + /usr/include/qt6/QtCore/qidentityproxymodel.h \ + /usr/include/qt6/QtCore/qiodevice.h \ + /usr/include/qt6/QtCore/qiodevicebase.h \ + /usr/include/qt6/QtCore/qitemselectionmodel.h \ + /usr/include/qt6/QtCore/qiterable.h \ + /usr/include/qt6/QtCore/qiterator.h \ + /usr/include/qt6/QtCore/qjsonarray.h \ + /usr/include/qt6/QtCore/qjsondocument.h \ + /usr/include/qt6/QtCore/qjsonobject.h \ + /usr/include/qt6/QtCore/qjsonparseerror.h \ + /usr/include/qt6/QtCore/qjsonvalue.h \ + /usr/include/qt6/QtCore/qlatin1stringmatcher.h \ + /usr/include/qt6/QtCore/qlatin1stringview.h \ + /usr/include/qt6/QtCore/qlibrary.h \ + /usr/include/qt6/QtCore/qlibraryinfo.h \ + /usr/include/qt6/QtCore/qline.h \ + /usr/include/qt6/QtCore/qlist.h \ + /usr/include/qt6/QtCore/qlocale.h \ + /usr/include/qt6/QtCore/qlockfile.h \ + /usr/include/qt6/QtCore/qlogging.h \ + /usr/include/qt6/QtCore/qloggingcategory.h \ + /usr/include/qt6/QtCore/qmalloc.h \ + /usr/include/qt6/QtCore/qmap.h \ + /usr/include/qt6/QtCore/qmargins.h \ + /usr/include/qt6/QtCore/qmath.h \ + /usr/include/qt6/QtCore/qmessageauthenticationcode.h \ + /usr/include/qt6/QtCore/qmetacontainer.h \ + /usr/include/qt6/QtCore/qmetaobject.h \ + /usr/include/qt6/QtCore/qmetatype.h \ + /usr/include/qt6/QtCore/qmimedata.h \ + /usr/include/qt6/QtCore/qmimedatabase.h \ + /usr/include/qt6/QtCore/qmimetype.h \ + /usr/include/qt6/QtCore/qminmax.h \ + /usr/include/qt6/QtCore/qmutex.h \ + /usr/include/qt6/QtCore/qnamespace.h \ + /usr/include/qt6/QtCore/qnativeinterface.h \ + /usr/include/qt6/QtCore/qnumeric.h \ + /usr/include/qt6/QtCore/qobject.h \ + /usr/include/qt6/QtCore/qobject_impl.h \ + /usr/include/qt6/QtCore/qobjectcleanuphandler.h \ + /usr/include/qt6/QtCore/qobjectdefs.h \ + /usr/include/qt6/QtCore/qobjectdefs_impl.h \ + /usr/include/qt6/QtCore/qoperatingsystemversion.h \ + /usr/include/qt6/QtCore/qoverload.h \ + /usr/include/qt6/QtCore/qpair.h \ + /usr/include/qt6/QtCore/qparallelanimationgroup.h \ + /usr/include/qt6/QtCore/qpauseanimation.h \ + /usr/include/qt6/QtCore/qpermissions.h \ + /usr/include/qt6/QtCore/qplugin.h \ + /usr/include/qt6/QtCore/qpluginloader.h \ + /usr/include/qt6/QtCore/qpoint.h \ + /usr/include/qt6/QtCore/qpointer.h \ + /usr/include/qt6/QtCore/qprocess.h \ + /usr/include/qt6/QtCore/qprocessordetection.h \ + /usr/include/qt6/QtCore/qpromise.h \ + /usr/include/qt6/QtCore/qproperty.h \ + /usr/include/qt6/QtCore/qpropertyanimation.h \ + /usr/include/qt6/QtCore/qpropertyprivate.h \ + /usr/include/qt6/QtCore/qqueue.h \ + /usr/include/qt6/QtCore/qrandom.h \ + /usr/include/qt6/QtCore/qrangemodel.h \ + /usr/include/qt6/QtCore/qrangemodel_impl.h \ + /usr/include/qt6/QtCore/qreadwritelock.h \ + /usr/include/qt6/QtCore/qrect.h \ + /usr/include/qt6/QtCore/qrefcount.h \ + /usr/include/qt6/QtCore/qregularexpression.h \ + /usr/include/qt6/QtCore/qresource.h \ + /usr/include/qt6/QtCore/qresultstore.h \ + /usr/include/qt6/QtCore/qrunnable.h \ + /usr/include/qt6/QtCore/qsavefile.h \ + /usr/include/qt6/QtCore/qscopedpointer.h \ + /usr/include/qt6/QtCore/qscopedvaluerollback.h \ + /usr/include/qt6/QtCore/qscopeguard.h \ + /usr/include/qt6/QtCore/qsemaphore.h \ + /usr/include/qt6/QtCore/qsequentialanimationgroup.h \ + /usr/include/qt6/QtCore/qsequentialiterable.h \ + /usr/include/qt6/QtCore/qset.h \ + /usr/include/qt6/QtCore/qsettings.h \ + /usr/include/qt6/QtCore/qshareddata.h \ + /usr/include/qt6/QtCore/qshareddata_impl.h \ + /usr/include/qt6/QtCore/qsharedmemory.h \ + /usr/include/qt6/QtCore/qsharedpointer.h \ + /usr/include/qt6/QtCore/qsharedpointer_impl.h \ + /usr/include/qt6/QtCore/qsignalmapper.h \ + /usr/include/qt6/QtCore/qsimd.h \ + /usr/include/qt6/QtCore/qsize.h \ + /usr/include/qt6/QtCore/qsocketnotifier.h \ + /usr/include/qt6/QtCore/qsortfilterproxymodel.h \ + /usr/include/qt6/QtCore/qspan.h \ + /usr/include/qt6/QtCore/qstack.h \ + /usr/include/qt6/QtCore/qstandardpaths.h \ + /usr/include/qt6/QtCore/qstaticlatin1stringmatcher.h \ + /usr/include/qt6/QtCore/qstdlibdetection.h \ + /usr/include/qt6/QtCore/qstorageinfo.h \ + /usr/include/qt6/QtCore/qstring.h \ + /usr/include/qt6/QtCore/qstringalgorithms.h \ + /usr/include/qt6/QtCore/qstringbuilder.h \ + /usr/include/qt6/QtCore/qstringconverter.h \ + /usr/include/qt6/QtCore/qstringconverter_base.h \ + /usr/include/qt6/QtCore/qstringfwd.h \ + /usr/include/qt6/QtCore/qstringlist.h \ + /usr/include/qt6/QtCore/qstringlistmodel.h \ + /usr/include/qt6/QtCore/qstringliteral.h \ + /usr/include/qt6/QtCore/qstringmatcher.h \ + /usr/include/qt6/QtCore/qstringtokenizer.h \ + /usr/include/qt6/QtCore/qstringview.h \ + /usr/include/qt6/QtCore/qswap.h \ + /usr/include/qt6/QtCore/qsysinfo.h \ + /usr/include/qt6/QtCore/qsystemdetection.h \ + /usr/include/qt6/QtCore/qsystemsemaphore.h \ + /usr/include/qt6/QtCore/qtaggedpointer.h \ + /usr/include/qt6/QtCore/qtclasshelpermacros.h \ + /usr/include/qt6/QtCore/qtconfiginclude.h \ + /usr/include/qt6/QtCore/qtconfigmacros.h \ + /usr/include/qt6/QtCore/qtcore-config.h \ + /usr/include/qt6/QtCore/qtcoreexports.h \ + /usr/include/qt6/QtCore/qtcoreglobal.h \ + /usr/include/qt6/QtCore/qtcoreversion.h \ + /usr/include/qt6/QtCore/qtdeprecationdefinitions.h \ + /usr/include/qt6/QtCore/qtdeprecationmarkers.h \ + /usr/include/qt6/QtCore/qtemporarydir.h \ + /usr/include/qt6/QtCore/qtemporaryfile.h \ + /usr/include/qt6/QtCore/qtenvironmentvariables.h \ + /usr/include/qt6/QtCore/qtestsupport_core.h \ + /usr/include/qt6/QtCore/qtextboundaryfinder.h \ + /usr/include/qt6/QtCore/qtextstream.h \ + /usr/include/qt6/QtCore/qtformat_impl.h \ + /usr/include/qt6/QtCore/qthread.h \ + /usr/include/qt6/QtCore/qthreadpool.h \ + /usr/include/qt6/QtCore/qthreadstorage.h \ + /usr/include/qt6/QtCore/qtimeline.h \ + /usr/include/qt6/QtCore/qtimer.h \ + /usr/include/qt6/QtCore/qtimezone.h \ + /usr/include/qt6/QtCore/qtipccommon.h \ + /usr/include/qt6/QtCore/qtmetamacros.h \ + /usr/include/qt6/QtCore/qtmocconstants.h \ + /usr/include/qt6/QtCore/qtnoop.h \ + /usr/include/qt6/QtCore/qtpreprocessorsupport.h \ + /usr/include/qt6/QtCore/qtranslator.h \ + /usr/include/qt6/QtCore/qtransposeproxymodel.h \ + /usr/include/qt6/QtCore/qtresource.h \ + /usr/include/qt6/QtCore/qtsan_impl.h \ + /usr/include/qt6/QtCore/qtsymbolmacros.h \ + /usr/include/qt6/QtCore/qttranslation.h \ + /usr/include/qt6/QtCore/qttypetraits.h \ + /usr/include/qt6/QtCore/qtversion.h \ + /usr/include/qt6/QtCore/qtversionchecks.h \ + /usr/include/qt6/QtCore/qtypeinfo.h \ + /usr/include/qt6/QtCore/qtyperevision.h \ + /usr/include/qt6/QtCore/qtypes.h \ + /usr/include/qt6/QtCore/qurl.h \ + /usr/include/qt6/QtCore/qurlquery.h \ + /usr/include/qt6/QtCore/qutf8stringview.h \ + /usr/include/qt6/QtCore/quuid.h \ + /usr/include/qt6/QtCore/qvariant.h \ + /usr/include/qt6/QtCore/qvariantanimation.h \ + /usr/include/qt6/QtCore/qvarianthash.h \ + /usr/include/qt6/QtCore/qvariantlist.h \ + /usr/include/qt6/QtCore/qvariantmap.h \ + /usr/include/qt6/QtCore/qvarlengtharray.h \ + /usr/include/qt6/QtCore/qvector.h \ + /usr/include/qt6/QtCore/qversionnumber.h \ + /usr/include/qt6/QtCore/qversiontagging.h \ + /usr/include/qt6/QtCore/qwaitcondition.h \ + /usr/include/qt6/QtCore/qwineventnotifier.h \ + /usr/include/qt6/QtCore/qxmlstream.h \ + /usr/include/qt6/QtCore/qxpfunctional.h \ + /usr/include/qt6/QtCore/qxptype_traits.h \ + /usr/include/qt6/QtCore/qyieldcpu.h \ + /usr/include/qt6/QtTest/QtTest \ + /usr/include/qt6/QtTest/QtTestDepends \ + /usr/include/qt6/QtTest/qabstractitemmodeltester.h \ + /usr/include/qt6/QtTest/qbenchmark.h \ + /usr/include/qt6/QtTest/qbenchmarkmetric.h \ + /usr/include/qt6/QtTest/qsignalspy.h \ + /usr/include/qt6/QtTest/qtest.h \ + /usr/include/qt6/QtTest/qtestassert.h \ + /usr/include/qt6/QtTest/qtestcase.h \ + /usr/include/qt6/QtTest/qtestdata.h \ + /usr/include/qt6/QtTest/qtesteventloop.h \ + /usr/include/qt6/QtTest/qtestsystem.h \ + /usr/include/qt6/QtTest/qtesttostring.h \ + /usr/include/qt6/QtTest/qttestexports.h \ + /usr/include/qt6/QtTest/qttestglobal.h \ + /usr/include/qt6/QtTest/qttestlib-config.h \ + /usr/include/qt6/QtTest/qttestversion.h \ + /usr/include/sched.h \ + /usr/include/semaphore.h \ + /usr/include/stdc-predef.h \ + /usr/include/stdio.h \ + /usr/include/string.h \ + /usr/include/strings.h \ + /usr/include/sys/cdefs.h \ + /usr/include/sys/select.h \ + /usr/include/sys/single_threaded.h \ + /usr/include/sys/syscall.h \ + /usr/include/sys/time.h \ + /usr/include/sys/types.h \ + /usr/include/syscall.h \ + /usr/include/time.h \ + /usr/include/unistd.h \ + /usr/include/wchar.h \ + /usr/include/wctype.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/adxintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/amxavx512intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/amxbf16intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/amxcomplexintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/amxfp16intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/amxfp8intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/amxint8intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/amxmovrsintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/amxtf32intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/amxtileintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/amxtransposeintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2-512bf16intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2-512convertintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2-512mediaintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2-512minmaxintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2-512satcvtintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2bf16intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2convertintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2copyintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2mediaintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2minmaxintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2satcvtintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx2intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512bf16intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512bf16vlintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512bitalgintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512bitalgvlintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512bwintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512cdintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512dqintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512fintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512fp16intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512fp16vlintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512ifmaintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512ifmavlintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vbmi2intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vbmi2vlintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vbmiintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vbmivlintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vlbwintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vldqintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vlintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vnniintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vnnivlintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vp2intersectintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vp2intersectvlintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vpopcntdqintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vpopcntdqvlintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avxifmaintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avxintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avxneconvertintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avxvnniint16intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avxvnniint8intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avxvnniintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/bmi2intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/bmiintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/cetintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/cldemoteintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/clflushoptintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/clwbintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/clzerointrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/cmpccxaddintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/emmintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/enqcmdintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/f16cintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/fmaintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/fxsrintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/gfniintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/hresetintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/ia32intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/immintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/keylockerintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/limits.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/lwpintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/lzcntintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/mm_malloc.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/mmintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/movdirintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/movrsintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/mwaitintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/mwaitxintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/pconfigintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/pkuintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/pmmintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/popcntintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/prfchiintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/prfchwintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/raointintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/rdseedintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/rtmintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/serializeintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/sgxintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/sha512intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/shaintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/sm3intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/sm4intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/smmintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/stdarg.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/stdbool.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/stddef.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/stdint.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/syslimits.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/tbmintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/tmmintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/tsxldtrkintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/uintrintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/usermsrintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/vaesintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/vpclmulqdqintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/waitpkgintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/wbnoinvdintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/wmmintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/x86gprintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/xmmintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/xsavecintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/xsaveintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/xsaveoptintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/xsavesintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/xtestintrin.h \ + /usr/lib64/cmake/Qt6/Qt6Config.cmake \ + /usr/lib64/cmake/Qt6/Qt6ConfigExtras.cmake \ + /usr/lib64/cmake/Qt6/Qt6ConfigVersion.cmake \ + /usr/lib64/cmake/Qt6/Qt6ConfigVersionImpl.cmake \ + /usr/lib64/cmake/Qt6/Qt6Dependencies.cmake \ + /usr/lib64/cmake/Qt6/Qt6Targets.cmake \ + /usr/lib64/cmake/Qt6/Qt6VersionlessAliasTargets.cmake \ + /usr/lib64/cmake/Qt6/QtFeature.cmake \ + /usr/lib64/cmake/Qt6/QtFeatureCommon.cmake \ + /usr/lib64/cmake/Qt6/QtInstallPaths.cmake \ + /usr/lib64/cmake/Qt6/QtPublicAndroidHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicAppleHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicCMakeEarlyPolicyHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicCMakeHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicCMakeVersionHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicDependencyHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicExternalProjectHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicFinalizerHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicFindPackageHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicGitHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicPluginHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicPluginHelpers_v2.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomAttributionHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomBuildToolHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomCommonGenerationHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomCpeHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomCycloneDXHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomDepHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomDocumentNamespaceHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomExternalReferenceHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomFileHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomGenerationCycloneDXHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomGenerationHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomLicenseHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomOpsHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomPurlHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomPythonHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomQtEntityHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomRelationshipHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomSystemDepHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicTargetHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicTestHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicToolHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicWalkLibsHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicWindowsHelpers.cmake \ + /usr/lib64/cmake/Qt6Test/Qt6TestAdditionalTargetInfo.cmake \ + /usr/lib64/cmake/Qt6Test/Qt6TestConfig.cmake \ + /usr/lib64/cmake/Qt6Test/Qt6TestConfigVersion.cmake \ + /usr/lib64/cmake/Qt6Test/Qt6TestConfigVersionImpl.cmake \ + /usr/lib64/cmake/Qt6Test/Qt6TestDependencies.cmake \ + /usr/lib64/cmake/Qt6Test/Qt6TestTargets-relwithdebinfo.cmake \ + /usr/lib64/cmake/Qt6Test/Qt6TestTargets.cmake \ + /usr/lib64/cmake/Qt6Test/Qt6TestVersionlessAliasTargets.cmake \ + /usr/lib64/cmake/Qt6Test/QtTestProperties.cmake \ + /usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake \ + /usr/share/cmake/Modules/CheckCXXCompilerFlag.cmake \ + /usr/bin/cmake diff --git a/build-linux/tests/test_everything_search_autogen/include/test_everything_search.moc b/build-linux/tests/test_everything_search_autogen/include/test_everything_search.moc new file mode 100644 index 00000000..680f3a12 --- /dev/null +++ b/build-linux/tests/test_everything_search_autogen/include/test_everything_search.moc @@ -0,0 +1,108 @@ +/**************************************************************************** +** Meta object code from reading C++ file 'test_everything_search.cpp' +** +** Created by: The Qt Meta Object Compiler version 69 (Qt 6.10.3) +** +** WARNING! All changes made in this file will be lost! +*****************************************************************************/ + +#include + +#include + +#include + + +#include +#if !defined(Q_MOC_OUTPUT_REVISION) +#error "The header file 'test_everything_search.cpp' doesn't include ." +#elif Q_MOC_OUTPUT_REVISION != 69 +#error "This file was generated using the moc from 6.10.3. It" +#error "cannot be used with the include files from this version of Qt." +#error "(The moc has changed too much.)" +#endif + +#ifndef Q_CONSTINIT +#define Q_CONSTINIT +#endif + +QT_WARNING_PUSH +QT_WARNING_DISABLE_DEPRECATED +QT_WARNING_DISABLE_GCC("-Wuseless-cast") +namespace { +struct qt_meta_tag_ZN20TestEverythingSearchE_t {}; +} // unnamed namespace + +template <> constexpr inline auto TestEverythingSearch::qt_create_metaobjectdata() +{ + namespace QMC = QtMocConstants; + QtMocHelpers::StringRefStorage qt_stringData { + "TestEverythingSearch", + "initializeUnavailableOnNonWindows", + "" + }; + + QtMocHelpers::UintData qt_methods { + // Slot 'initializeUnavailableOnNonWindows' + QtMocHelpers::SlotData(1, 2, QMC::AccessPrivate, QMetaType::Void), + }; + QtMocHelpers::UintData qt_properties { + }; + QtMocHelpers::UintData qt_enums { + }; + return QtMocHelpers::metaObjectData(QMC::MetaObjectFlag{}, qt_stringData, + qt_methods, qt_properties, qt_enums); +} +Q_CONSTINIT const QMetaObject TestEverythingSearch::staticMetaObject = { { + QMetaObject::SuperData::link(), + qt_staticMetaObjectStaticContent.stringdata, + qt_staticMetaObjectStaticContent.data, + qt_static_metacall, + nullptr, + qt_staticMetaObjectRelocatingContent.metaTypes, + nullptr +} }; + +void TestEverythingSearch::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) +{ + auto *_t = static_cast(_o); + if (_c == QMetaObject::InvokeMetaMethod) { + switch (_id) { + case 0: _t->initializeUnavailableOnNonWindows(); break; + default: ; + } + } + (void)_a; +} + +const QMetaObject *TestEverythingSearch::metaObject() const +{ + return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject; +} + +void *TestEverythingSearch::qt_metacast(const char *_clname) +{ + if (!_clname) return nullptr; + if (!strcmp(_clname, qt_staticMetaObjectStaticContent.strings)) + return static_cast(this); + return QObject::qt_metacast(_clname); +} + +int TestEverythingSearch::qt_metacall(QMetaObject::Call _c, int _id, void **_a) +{ + _id = QObject::qt_metacall(_c, _id, _a); + if (_id < 0) + return _id; + if (_c == QMetaObject::InvokeMetaMethod) { + if (_id < 1) + qt_static_metacall(this, _c, _id, _a); + _id -= 1; + } + if (_c == QMetaObject::RegisterMethodArgumentMetaType) { + if (_id < 1) + *reinterpret_cast(_a[0]) = QMetaType(); + _id -= 1; + } + return _id; +} +QT_WARNING_POP diff --git a/build-linux/tests/test_everything_search_autogen/moc_predefs.h b/build-linux/tests/test_everything_search_autogen/moc_predefs.h new file mode 100644 index 00000000..2c4c79c9 --- /dev/null +++ b/build-linux/tests/test_everything_search_autogen/moc_predefs.h @@ -0,0 +1,502 @@ +#define __DBL_MIN_EXP__ (-1021) +#define __LDBL_MANT_DIG__ 64 +#define __cpp_nontype_template_parameter_auto 201606L +#define __UINT_LEAST16_MAX__ 0xffff +#define __FLT16_HAS_QUIET_NAN__ 1 +#define __ATOMIC_ACQUIRE 2 +#define QT_TESTCASE_BUILDDIR "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests" +#define __FLT128_MAX_10_EXP__ 4932 +#define __FLT_MIN__ 1.17549435082228750796873653722224568e-38F +#define __GCC_IEC_559_COMPLEX 2 +#define __cpp_aggregate_nsdmi 201304L +#define __UINT_LEAST8_TYPE__ unsigned char +#define __SIZEOF_FLOAT80__ 16 +#define __BFLT16_DENORM_MIN__ 9.18354961579912115600575419704879436e-41BF16 +#define __cpp_impl_three_way_comparison 201907L +#define __INTMAX_C(c) c ## L +#define __CHAR_BIT__ 8 +#define __cpp_designated_initializers 201707L +#define __UINT8_MAX__ 0xff +#define __SCHAR_WIDTH__ 8 +#define __WINT_MAX__ 0xffffffffU +#define __FLT32_MIN_EXP__ (-125) +#define __cpp_static_assert 201411L +#define __BFLT16_MIN_10_EXP__ (-37) +#define __cpp_inheriting_constructors 201511L +#define __ORDER_LITTLE_ENDIAN__ 1234 +#define __WCHAR_MAX__ 0x7fffffff +#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_2 1 +#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_4 1 +#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_8 1 +#define __GCC_ATOMIC_CHAR_LOCK_FREE 2 +#define __GCC_IEC_559 2 +#define __FLT32X_DECIMAL_DIG__ 17 +#define TLRENDER_OIIO 1 +#define __FLT_EVAL_METHOD__ 0 +#define __cpp_binary_literals 201304L +#define __FLT64_DECIMAL_DIG__ 17 +#define __cpp_noexcept_function_type 201510L +#define __GCC_ATOMIC_CHAR32_T_LOCK_FREE 2 +#define __cpp_variadic_templates 200704L +#define __UINT_FAST64_MAX__ 0xffffffffffffffffUL +#define __SIG_ATOMIC_TYPE__ int +#define __DBL_MIN_10_EXP__ (-307) +#define __FINITE_MATH_ONLY__ 0 +#define __cpp_variable_templates 201304L +#define __FLT32X_MAX_EXP__ 1024 +#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_1 1 +#define __FLT32_HAS_DENORM__ 1 +#define __UINT_FAST8_MAX__ 0xff +#define __cpp_rvalue_reference 200610L +#define __cpp_nested_namespace_definitions 201411L +#define __DEC64_MAX_EXP__ 385 +#define __INT8_C(c) c +#define __LDBL_HAS_INFINITY__ 1 +#define __INT_LEAST8_WIDTH__ 8 +#define __cpp_variadic_using 201611L +#define __UINT_LEAST64_MAX__ 0xffffffffffffffffUL +#define __INT_LEAST8_MAX__ 0x7f +#define __cpp_attributes 200809L +#define __cpp_capture_star_this 201603L +#define __SHRT_MAX__ 0x7fff +#define __LDBL_MAX__ 1.18973149535723176502126385303097021e+4932L +#define __cpp_impl_coroutine 201902L +#define __FLT64X_MAX_10_EXP__ 4932 +#define __cpp_if_constexpr 201606L +#define __BFLT16_MAX_10_EXP__ 38 +#define __BFLT16_MAX_EXP__ 128 +#define __LDBL_IS_IEC_60559__ 1 +#define QT_NO_DEBUG 1 +#define __FLT64X_HAS_QUIET_NAN__ 1 +#define QT_TESTLIB_LIB 1 +#define TLRENDER_SDL2 1 +#define __UINT_LEAST8_MAX__ 0xff +#define __GCC_ATOMIC_BOOL_LOCK_FREE 2 +#define __FLT128_DENORM_MIN__ 6.47517511943802511092443895822764655e-4966F128 +#define __UINTMAX_TYPE__ long unsigned int +#define __cpp_nsdmi 200809L +#define __BFLT16_DECIMAL_DIG__ 4 +#define __linux 1 +#define __DEC32_EPSILON__ 1E-6DF +#define __FLT_EVAL_METHOD_TS_18661_3__ 0 +#define __UINT32_MAX__ 0xffffffffU +#define __GXX_EXPERIMENTAL_CXX0X__ 1 +#define __DBL_DENORM_MIN__ double(4.94065645841246544176568792868221372e-324L) +#define __FLT128_MIN_EXP__ (-16381) +#define __DEC64X_MAX_EXP__ 6145 +#define __WINT_MIN__ 0U +#define __FLT128_MIN_10_EXP__ (-4931) +#define __FLT32X_IS_IEC_60559__ 1 +#define __INT_LEAST16_WIDTH__ 16 +#define __SCHAR_MAX__ 0x7f +#define __FLT128_MANT_DIG__ 113 +#define __WCHAR_MIN__ (-__WCHAR_MAX__ - 1) +#define __INT64_C(c) c ## L +#define __cpp_impl_destroying_delete 201806L +#define __GCC_ATOMIC_POINTER_LOCK_FREE 2 +#define TLRENDER_JPEG 1 +#define __ATOMIC_SEQ_CST 5 +#define __unix 1 +#define __INT_LEAST64_MAX__ 0x7fffffffffffffffL +#define __FLT32X_MANT_DIG__ 53 +#define __GCC_ATOMIC_CHAR16_T_LOCK_FREE 2 +#define __cpp_aligned_new 201606L +#define __FLT32_MAX_10_EXP__ 38 +#define __FLT64X_EPSILON__ 1.08420217248550443400745280086994171e-19F64x +#define __STDC_HOSTED__ 1 +#define __DEC64_MIN_EXP__ (-382) +#define TLRENDER_PNG 1 +#define __cpp_decltype_auto 201304L +#define __DBL_DIG__ 15 +#define __STDC_EMBED_EMPTY__ 2 +#define __FLT_EPSILON__ 1.19209289550781250000000000000000000e-7F +#define __cpp_char8_t 202207L +#define __GXX_WEAK__ 1 +#define __SHRT_WIDTH__ 16 +#define __FLT32_IS_IEC_60559__ 1 +#define __LDBL_MIN__ 3.36210314311209350626267781732175260e-4932L +#define __DBL_IS_IEC_60559__ 1 +#define __DEC32_MAX__ 9.999999E96DF +#define __CHAR8_TYPE__ unsigned char +#define __cpp_threadsafe_static_init 200806L +#define __cpp_enumerator_attributes 201411L +#define TLRENDER_EXR 1 +#define __FLT64X_DENORM_MIN__ 3.64519953188247460252840593361941982e-4951F64x +#define __FLT32X_HAS_INFINITY__ 1 +#define __unix__ 1 +#define __INT_WIDTH__ 32 +#define __STDC_IEC_559__ 1 +#define __STDC_ISO_10646__ 201706L +#define __GCC_ATOMIC_CHAR8_T_LOCK_FREE 2 +#define __DECIMAL_DIG__ 21 +#define __STDC_IEC_559_COMPLEX__ 1 +#define __FLT64_EPSILON__ 2.22044604925031308084726333618164062e-16F64 +#define __gnu_linux__ 1 +#define __INT16_MAX__ 0x7fff +#define __FLT64_MIN_EXP__ (-1021) +#define __cpp_using_enum 201907L +#define __DEC64X_EPSILON__ 1E-33D64x +#define __FLT64X_MIN_10_EXP__ (-4931) +#define __LDBL_HAS_QUIET_NAN__ 1 +#define __FLT16_MIN_EXP__ (-13) +#define __FLT64_MANT_DIG__ 53 +#define __cpp_consteval 202211L +#define __FLT64X_MANT_DIG__ 64 +#define FTK_API_GL_4_1 1 +#define __BFLT16_DIG__ 2 +#define __GNUC__ 15 +#define __GXX_RTTI 1 +#define TLRENDER_FFMPEG_PLUGIN 1 +#define __MMX__ 1 +#define __FLT_HAS_DENORM__ 1 +#define __SIZEOF_LONG_DOUBLE__ 16 +#define __BIGGEST_ALIGNMENT__ 16 +#define __STDC_UTF_16__ 1 +#define __FLT64_MAX_10_EXP__ 308 +#define __BFLT16_IS_IEC_60559__ 0 +#define __FLT16_MAX_10_EXP__ 4 +#define __cpp_delegating_constructors 200604L +#define __DBL_MAX__ double(1.79769313486231570814527423731704357e+308L) +#define __cpp_raw_strings 200710L +#define __INT_FAST32_MAX__ 0x7fffffffffffffffL +#define __DBL_HAS_INFINITY__ 1 +#define __INT64_MAX__ 0x7fffffffffffffffL +#define __SIZEOF_FLOAT__ 4 +#define __HAVE_SPECULATION_SAFE_VALUE 1 +#define __cpp_fold_expressions 201603L +#define __DEC32_MIN_EXP__ (-94) +#define __INTPTR_WIDTH__ 64 +#define __UINT_LEAST32_MAX__ 0xffffffffU +#define __FLT32X_HAS_DENORM__ 1 +#define __INT_FAST16_TYPE__ long int +#define __MMX_WITH_SSE__ 1 +#define __LDBL_HAS_DENORM__ 1 +#define __SEG_GS 1 +#define __BFLT16_EPSILON__ 7.81250000000000000000000000000000000e-3BF16 +#define __cplusplus 202002L +#define __cpp_ref_qualifiers 200710L +#define __DEC32_MIN__ 1E-95DF +#define __DEPRECATED 1 +#define __cpp_rvalue_references 200610L +#define __DBL_MAX_EXP__ 1024 +#define __WCHAR_WIDTH__ 32 +#define __FLT32_MAX__ 3.40282346638528859811704183484516925e+38F32 +#define __DEC128_EPSILON__ 1E-33DL +#define __FLT16_DECIMAL_DIG__ 5 +#define __SSE2_MATH__ 1 +#define __ATOMIC_HLE_RELEASE 131072 +#define __PTRDIFF_MAX__ 0x7fffffffffffffffL +#define __amd64 1 +#define __DEC64X_MAX__ 9.999999999999999999999999999999999E6144D64x +#define __ATOMIC_HLE_ACQUIRE 65536 +#define __GNUG__ 15 +#define __LONG_LONG_MAX__ 0x7fffffffffffffffLL +#define __SIZEOF_SIZE_T__ 8 +#define __BFLT16_HAS_INFINITY__ 1 +#define __FLT64X_MIN_EXP__ (-16381) +#define __SIZEOF_WINT_T__ 4 +#define __FLT32X_DIG__ 15 +#define __LONG_LONG_WIDTH__ 64 +#define QT_TESTCASE_SOURCEDIR "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests" +#define __cpp_initializer_lists 200806L +#define __FLT32_MAX_EXP__ 128 +#define ABI_ID "ELF" +#define __cpp_hex_float 201603L +#define __GXX_ABI_VERSION 1020 +#define __FLT_MIN_EXP__ (-125) +#define __GCC_HAVE_DWARF2_CFI_ASM 1 +#define TLRENDER_OCIO 1 +#define __x86_64 1 +#define __cpp_lambdas 200907L +#define __INT_FAST64_TYPE__ long int +#define __BFLT16_MAX__ 3.38953138925153547590470800371487867e+38BF16 +#define __FLT64_DENORM_MIN__ 4.94065645841246544176568792868221372e-324F64 +#define __cpp_template_auto 201606L +#define __FLT16_DENORM_MIN__ 5.96046447753906250000000000000000000e-8F16 +#define __FLT128_EPSILON__ 1.92592994438723585305597794258492732e-34F128 +#define __FLT64X_NORM_MAX__ 1.18973149535723176502126385303097021e+4932F64x +#define __SIZEOF_POINTER__ 8 +#define __SIZE_TYPE__ long unsigned int +#define __LP64__ 1 +#define __DBL_HAS_QUIET_NAN__ 1 +#define __FLT32X_EPSILON__ 2.22044604925031308084726333618164062e-16F32x +#define __LDBL_MAX_EXP__ 16384 +#define __DECIMAL_BID_FORMAT__ 1 +#define __FLT64_MIN_10_EXP__ (-307) +#define __FLT16_MIN_10_EXP__ (-4) +#define __FLT64X_DECIMAL_DIG__ 21 +#define __DEC128_MIN__ 1E-6143DL +#define __REGISTER_PREFIX__ +#define __UINT16_MAX__ 0xffff +#define __FLT128_HAS_INFINITY__ 1 +#define __FLT32_MIN__ 1.17549435082228750796873653722224568e-38F32 +#define __UINT8_TYPE__ unsigned char +#define __FLT_DIG__ 6 +#define __NO_INLINE__ 1 +#define __DEC_EVAL_METHOD__ 2 +#define __FLT_MANT_DIG__ 24 +#define __LDBL_DECIMAL_DIG__ 21 +#define __VERSION__ "15.2.1 20260123 (Red Hat 15.2.1-7)" +#define __UINT64_C(c) c ## UL +#define __cpp_unicode_characters 201411L +#define __DEC64X_MIN__ 1E-6143D64x +#define _STDC_PREDEF_H 1 +#define __INT_LEAST32_MAX__ 0x7fffffff +#define __GCC_ATOMIC_INT_LOCK_FREE 2 +#define __FLT128_MAX_EXP__ 16384 +#define __cpp_conditional_explicit 201806L +#define __FLT32_MANT_DIG__ 24 +#define __cpp_decltype 200707L +#define __FLOAT_WORD_ORDER__ __ORDER_LITTLE_ENDIAN__ +#define SIZEOF_DPTR (sizeof(void*)) +#define __FLT32X_MIN_EXP__ (-1021) +#define __cpp_aggregate_paren_init 201902L +#define __STDC_IEC_60559_COMPLEX__ 201404L +#define __cpp_aggregate_bases 201603L +#define __BFLT16_MIN__ 1.17549435082228750796873653722224568e-38BF16 +#define __FLT128_HAS_DENORM__ 1 +#define __FLT32_DECIMAL_DIG__ 9 +#define __FLT128_DIG__ 33 +#define __INT32_C(c) c +#define __DEC64_EPSILON__ 1E-15DD +#define __ORDER_PDP_ENDIAN__ 3412 +#define __DEC128_MIN_EXP__ (-6142) +#define __DEC128_MAX__ 9.999999999999999999999999999999999E6144DL +#define __cpp_constinit 201907L +#define __INT_FAST32_TYPE__ long int +#define __UINT_LEAST16_TYPE__ short unsigned int +#define __DEC64X_MANT_DIG__ 34 +#define __DEC128_MAX_EXP__ 6145 +#define unix 1 +#define __DBL_HAS_DENORM__ 1 +#define __cpp_rtti 199711L +#define __UINT64_MAX__ 0xffffffffffffffffUL +#define __FLT_IS_IEC_60559__ 1 +#define __GNUC_WIDE_EXECUTION_CHARSET_NAME "UTF-32LE" +#define __FLT64X_DIG__ 18 +#define __INT8_TYPE__ signed char +#define __cpp_digit_separators 201309L +#define __ELF__ 1 +#define __GCC_ASM_FLAG_OUTPUTS__ 1 +#define __UINT32_TYPE__ unsigned int +#define __BFLT16_HAS_QUIET_NAN__ 1 +#define __FLT_RADIX__ 2 +#define __INT_LEAST16_TYPE__ short int +#define __LDBL_EPSILON__ 1.08420217248550443400745280086994171e-19L +#define __UINTMAX_C(c) c ## UL +#define __GNUC_RH_RELEASE__ 7 +#define __FLT16_DIG__ 3 +#define __k8 1 +#define __FLT32X_MIN__ 2.22507385850720138309023271733240406e-308F32x +#define __SIG_ATOMIC_MAX__ 0x7fffffff +#define __cpp_constexpr 202002L +#define __GCC_ATOMIC_WCHAR_T_LOCK_FREE 2 +#define __USER_LABEL_PREFIX__ +#define __STDC_IEC_60559_BFP__ 201404L +#define __SIZEOF_PTRDIFF_T__ 8 +#define __FLT64X_HAS_INFINITY__ 1 +#define __SIZEOF_LONG__ 8 +#define __LDBL_DIG__ 18 +#define __FLT64_IS_IEC_60559__ 1 +#define __x86_64__ 1 +#define __FLT16_IS_IEC_60559__ 1 +#define __FLT16_MAX_EXP__ 16 +#define __DEC32_SUBNORMAL_MIN__ 0.000001E-95DF +#define __STDC_EMBED_FOUND__ 1 +#define __INT_FAST16_MAX__ 0x7fffffffffffffffL +#define __GCC_CONSTRUCTIVE_SIZE 64 +#define __FLT64_DIG__ 15 +#define __UINT_FAST32_MAX__ 0xffffffffffffffffUL +#define __UINT_LEAST64_TYPE__ long unsigned int +#define __FLT16_EPSILON__ 9.76562500000000000000000000000000000e-4F16 +#define __FLT_HAS_QUIET_NAN__ 1 +#define __FLT_MAX_10_EXP__ 38 +#define __FLT64X_HAS_DENORM__ 1 +#define __DEC128_SUBNORMAL_MIN__ 0.000000000000000000000000000000001E-6143DL +#define __FLT_HAS_INFINITY__ 1 +#define __GNUC_EXECUTION_CHARSET_NAME "UTF-8" +#define __cpp_unicode_literals 200710L +#define __UINT_FAST16_TYPE__ long unsigned int +#define __DEC64_MAX__ 9.999999999999999E384DD +#define __STDC_EMBED_NOT_FOUND__ 0 +#define __INT_FAST32_WIDTH__ 64 +#define __CHAR16_TYPE__ short unsigned int +#define __PRAGMA_REDEFINE_EXTNAME 1 +#define __DEC64X_SUBNORMAL_MIN__ 0.000000000000000000000000000000001E-6143D64x +#define __SIZE_WIDTH__ 64 +#define __SEG_FS 1 +#define __INT_LEAST16_MAX__ 0x7fff +#define __FLT16_NORM_MAX__ 6.55040000000000000000000000000000000e+4F16 +#define __DEC64_MANT_DIG__ 16 +#define __FLT32_DENORM_MIN__ 1.40129846432481707092372958328991613e-45F32 +#define __SIG_ATOMIC_WIDTH__ 32 +#define __GCC_DESTRUCTIVE_SIZE 64 +#define __INT_LEAST64_TYPE__ long int +#define __INT16_TYPE__ short int +#define __INT_LEAST8_TYPE__ signed char +#define __FLT16_MAX__ 6.55040000000000000000000000000000000e+4F16 +#define __FLT128_MIN__ 3.36210314311209350626267781732175260e-4932F128 +#define __cpp_structured_bindings 201606L +#define __SIZEOF_INT__ 4 +#define __DEC32_MAX_EXP__ 97 +#define __INT_FAST8_MAX__ 0x7f +#define __FLT128_MAX__ 1.18973149535723176508575932662800702e+4932F128 +#define __INTPTR_MAX__ 0x7fffffffffffffffL +#define __cpp_sized_deallocation 201309L +#define __cpp_guaranteed_copy_elision 201606L +#define linux 1 +#define __FLT64_HAS_QUIET_NAN__ 1 +#define __FLT32_MIN_10_EXP__ (-37) +#define __EXCEPTIONS 1 +#define __UINT16_C(c) c +#define __PTRDIFF_WIDTH__ 64 +#define __cpp_range_based_for 201603L +#define __INT_FAST16_WIDTH__ 64 +#define __FLT64_HAS_INFINITY__ 1 +#define __FLT64X_MAX__ 1.18973149535723176502126385303097021e+4932F64x +#define __FLT16_HAS_INFINITY__ 1 +#define __STDCPP_DEFAULT_NEW_ALIGNMENT__ 16 +#define __SIG_ATOMIC_MIN__ (-__SIG_ATOMIC_MAX__ - 1) +#define __code_model_small__ 1 +#define __GCC_ATOMIC_LONG_LOCK_FREE 2 +#define __cpp_nontype_template_args 201911L +#define __DEC32_MANT_DIG__ 7 +#define __k8__ 1 +#define __INTPTR_TYPE__ long int +#define __UINT16_TYPE__ short unsigned int +#define __WCHAR_TYPE__ int +#define __UINTPTR_MAX__ 0xffffffffffffffffUL +#define __INT_FAST64_WIDTH__ 64 +#define __cpp_nontype_template_parameter_class 201806L +#define __cpp_concepts 202002L +#define __INT_FAST64_MAX__ 0x7fffffffffffffffL +#define __GCC_ATOMIC_TEST_AND_SET_TRUEVAL 1 +#define __FLT_NORM_MAX__ 3.40282346638528859811704183484516925e+38F +#define __FLT32_HAS_INFINITY__ 1 +#define __FLT64X_MAX_EXP__ 16384 +#define __UINT_FAST64_TYPE__ long unsigned int +#define __cpp_constexpr_in_decltype 201711L +#define __cpp_inline_variables 201606L +#define __BFLT16_MIN_EXP__ (-125) +#define __INT_MAX__ 0x7fffffff +#define __linux__ 1 +#define __INT64_TYPE__ long int +#define __FLT_MAX_EXP__ 128 +#define __ORDER_BIG_ENDIAN__ 4321 +#define __DBL_MANT_DIG__ 53 +#define QT_CORE_LIB 1 +#define __SIZEOF_FLOAT128__ 16 +#define __BFLT16_MANT_DIG__ 8 +#define __DEC64_MIN__ 1E-383DD +#define __WINT_TYPE__ unsigned int +#define __UINT_LEAST32_TYPE__ unsigned int +#define __SIZEOF_SHORT__ 2 +#define __FLT32_NORM_MAX__ 3.40282346638528859811704183484516925e+38F32 +#define __SSE__ 1 +#define __LDBL_MIN_EXP__ (-16381) +#define __FLT64_MAX__ 1.79769313486231570814527423731704357e+308F64 +#define __DEC64X_MIN_EXP__ (-6142) +#define __amd64__ 1 +#define __WINT_WIDTH__ 32 +#define __INT_LEAST64_WIDTH__ 64 +#define __FLT32X_MAX_10_EXP__ 308 +#define __cpp_namespace_attributes 201411L +#define __SIZEOF_INT128__ 16 +#define __FLT16_MIN__ 6.10351562500000000000000000000000000e-5F16 +#define __FLT64X_IS_IEC_60559__ 1 +#define __GXX_CONSTEXPR_ASM__ 1 +#define __LDBL_MAX_10_EXP__ 4932 +#define __ATOMIC_RELAXED 0 +#define __DBL_EPSILON__ double(2.22044604925031308084726333618164062e-16L) +#define __INT_LEAST32_TYPE__ int +#define _LP64 1 +#define __UINT8_C(c) c +#define __FLT64_MAX_EXP__ 1024 +#define __cpp_return_type_deduction 201304L +#define __SIZEOF_WCHAR_T__ 4 +#define __GNUC_PATCHLEVEL__ 1 +#define __FLT128_NORM_MAX__ 1.18973149535723176508575932662800702e+4932F128 +#define __FLT64_NORM_MAX__ 1.79769313486231570814527423731704357e+308F64 +#define __FLT128_HAS_QUIET_NAN__ 1 +#define __INTMAX_MAX__ 0x7fffffffffffffffL +#define TLRENDER_TIFF 1 +#define __INT_FAST8_TYPE__ signed char +#define __FLT64X_MIN__ 3.36210314311209350626267781732175260e-4932F64x +#define __STDCPP_THREADS__ 1 +#define __BFLT16_HAS_DENORM__ 1 +#define __GNUC_STDC_INLINE__ 1 +#define __FLT64_HAS_DENORM__ 1 +#define __FLT32_EPSILON__ 1.19209289550781250000000000000000000e-7F32 +#define __FLT16_HAS_DENORM__ 1 +#define __DBL_DECIMAL_DIG__ 17 +#define __STDC_UTF_32__ 1 +#define __INT_FAST8_WIDTH__ 8 +#define __FXSR__ 1 +#define __FLT32X_MAX__ 1.79769313486231570814527423731704357e+308F32x +#define __DBL_NORM_MAX__ double(1.79769313486231570814527423731704357e+308L) +#define __BYTE_ORDER__ __ORDER_LITTLE_ENDIAN__ +#define TLRENDER_FFMPEG 1 +#define __INTMAX_WIDTH__ 64 +#define __cpp_runtime_arrays 198712L +#define __FLT32_DIG__ 6 +#define __UINT64_TYPE__ long unsigned int +#define __UINT32_C(c) c ## U +#define __cpp_alias_templates 200704L +#define __cpp_constexpr_dynamic_alloc 201907L +#define __FLT_DENORM_MIN__ 1.40129846432481707092372958328991613e-45F +#define __FLT128_IS_IEC_60559__ 1 +#define __INT8_MAX__ 0x7f +#define __LONG_WIDTH__ 64 +#define __DBL_MIN__ double(2.22507385850720138309023271733240406e-308L) +#define __INT32_MAX__ 0x7fffffff +#define __UINT_FAST32_TYPE__ long unsigned int +#define __FLT16_MANT_DIG__ 11 +#define __FLT32X_NORM_MAX__ 1.79769313486231570814527423731704357e+308F32x +#define __CHAR32_TYPE__ unsigned int +#define __FLT_MAX__ 3.40282346638528859811704183484516925e+38F +#define __SSE2__ 1 +#define __cpp_deduction_guides 201907L +#define __BFLT16_NORM_MAX__ 3.38953138925153547590470800371487867e+38BF16 +#define __INT32_TYPE__ int +#define __SIZEOF_DOUBLE__ 8 +#define __cpp_exceptions 199711L +#define __FLT_MIN_10_EXP__ (-37) +#define __FLT64_MIN__ 2.22507385850720138309023271733240406e-308F64 +#define __INT_LEAST32_WIDTH__ 32 +#define __INTMAX_TYPE__ long int +#define __GLIBCXX_BITSIZE_INT_N_0 128 +#define __FLT32X_HAS_QUIET_NAN__ 1 +#define __ATOMIC_CONSUME 1 +#define __GNUC_MINOR__ 2 +#define __GLIBCXX_TYPE_INT_N_0 __int128 +#define __UINTMAX_MAX__ 0xffffffffffffffffUL +#define __FLT32X_DENORM_MIN__ 4.94065645841246544176568792868221372e-324F32x +#define __cpp_template_template_args 201611L +#define __DBL_MAX_10_EXP__ 308 +#define __LDBL_DENORM_MIN__ 3.64519953188247460252840593361941982e-4951L +#define __INT16_C(c) c +#define __STDC__ 1 +#define __PTRDIFF_TYPE__ long int +#define __LONG_MAX__ 0x7fffffffffffffffL +#define __FLT32X_MIN_10_EXP__ (-307) +#define __UINTPTR_TYPE__ long unsigned int +#define __DEC64_SUBNORMAL_MIN__ 0.000000000000001E-383DD +#define __DEC128_MANT_DIG__ 34 +#define __LDBL_MIN_10_EXP__ (-4931) +#define __cpp_generic_lambdas 201707L +#define __SSE_MATH__ 1 +#define __SIZEOF_LONG_LONG__ 8 +#define __cpp_user_defined_literals 200809L +#define __FLT128_DECIMAL_DIG__ 36 +#define __GCC_ATOMIC_LLONG_LOCK_FREE 2 +#define __FLT32_HAS_QUIET_NAN__ 1 +#define __FLT_DECIMAL_DIG__ 9 +#define __UINT_FAST16_MAX__ 0xffffffffffffffffUL +#define __LDBL_NORM_MAX__ 1.18973149535723176502126385303097021e+4932L +#define __GCC_ATOMIC_SHORT_LOCK_FREE 2 +#define __SIZE_MAX__ 0xffffffffffffffffUL +#define __UINT_FAST8_TYPE__ unsigned char +#define _GNU_SOURCE 1 +#define __cpp_init_captures 201803L +#define __ATOMIC_ACQ_REL 4 +#define __ATOMIC_RELEASE 3 diff --git a/build-linux/tests/test_everything_search_autogen/mocs_compilation.cpp b/build-linux/tests/test_everything_search_autogen/mocs_compilation.cpp new file mode 100644 index 00000000..bda67f76 --- /dev/null +++ b/build-linux/tests/test_everything_search_autogen/mocs_compilation.cpp @@ -0,0 +1,3 @@ +// This file is autogenerated. Changes will be overwritten. +// No files found that require moc or the moc files are included +enum some_compilers { need_more_than_nothing }; diff --git a/build-linux/tests/test_everything_search_autogen/timestamp b/build-linux/tests/test_everything_search_autogen/timestamp new file mode 100644 index 00000000..e69de29b diff --git a/build-linux/tests/test_grid_scrub b/build-linux/tests/test_grid_scrub new file mode 100755 index 00000000..5dd709fc Binary files /dev/null and b/build-linux/tests/test_grid_scrub differ diff --git a/build-linux/tests/test_grid_scrub_autogen/deps b/build-linux/tests/test_grid_scrub_autogen/deps new file mode 100644 index 00000000..0205b2d4 --- /dev/null +++ b/build-linux/tests/test_grid_scrub_autogen/deps @@ -0,0 +1,927 @@ +test_grid_scrub_autogen/timestamp: \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_grid_scrub_autogen/moc_predefs.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/grid_scrub.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/platform_session.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/CMakeLists.txt \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/test_grid_scrub.cpp \ + /usr/include/alloca.h \ + /usr/include/asm-generic/bitsperlong.h \ + /usr/include/asm-generic/errno-base.h \ + /usr/include/asm-generic/errno.h \ + /usr/include/asm-generic/int-ll64.h \ + /usr/include/asm-generic/posix_types.h \ + /usr/include/asm-generic/types.h \ + /usr/include/asm/bitsperlong.h \ + /usr/include/asm/errno.h \ + /usr/include/asm/posix_types.h \ + /usr/include/asm/posix_types_64.h \ + /usr/include/asm/types.h \ + /usr/include/asm/unistd.h \ + /usr/include/asm/unistd_64.h \ + /usr/include/assert.h \ + /usr/include/bits/atomic_wide_counter.h \ + /usr/include/bits/byteswap.h \ + /usr/include/bits/confname.h \ + /usr/include/bits/cpu-set.h \ + /usr/include/bits/endian.h \ + /usr/include/bits/endianness.h \ + /usr/include/bits/environments.h \ + /usr/include/bits/errno.h \ + /usr/include/bits/floatn-common.h \ + /usr/include/bits/floatn.h \ + /usr/include/bits/getopt_core.h \ + /usr/include/bits/getopt_posix.h \ + /usr/include/bits/libc-header-start.h \ + /usr/include/bits/local_lim.h \ + /usr/include/bits/locale.h \ + /usr/include/bits/long-double.h \ + /usr/include/bits/posix1_lim.h \ + /usr/include/bits/posix2_lim.h \ + /usr/include/bits/posix_opt.h \ + /usr/include/bits/pthread_stack_min-dynamic.h \ + /usr/include/bits/pthreadtypes-arch.h \ + /usr/include/bits/pthreadtypes.h \ + /usr/include/bits/sched.h \ + /usr/include/bits/select.h \ + /usr/include/bits/semaphore.h \ + /usr/include/bits/setjmp.h \ + /usr/include/bits/stdint-intn.h \ + /usr/include/bits/stdint-least.h \ + /usr/include/bits/stdint-uintn.h \ + /usr/include/bits/stdio_lim.h \ + /usr/include/bits/stdlib-float.h \ + /usr/include/bits/struct_mutex.h \ + /usr/include/bits/struct_rwlock.h \ + /usr/include/bits/syscall.h \ + /usr/include/bits/thread-shared-types.h \ + /usr/include/bits/time.h \ + /usr/include/bits/time64.h \ + /usr/include/bits/timesize.h \ + /usr/include/bits/timex.h \ + /usr/include/bits/types.h \ + /usr/include/bits/types/FILE.h \ + /usr/include/bits/types/__FILE.h \ + /usr/include/bits/types/__fpos64_t.h \ + /usr/include/bits/types/__fpos_t.h \ + /usr/include/bits/types/__locale_t.h \ + /usr/include/bits/types/__mbstate_t.h \ + /usr/include/bits/types/__sigset_t.h \ + /usr/include/bits/types/clock_t.h \ + /usr/include/bits/types/clockid_t.h \ + /usr/include/bits/types/cookie_io_functions_t.h \ + /usr/include/bits/types/error_t.h \ + /usr/include/bits/types/locale_t.h \ + /usr/include/bits/types/mbstate_t.h \ + /usr/include/bits/types/sigset_t.h \ + /usr/include/bits/types/struct_FILE.h \ + /usr/include/bits/types/struct___jmp_buf_tag.h \ + /usr/include/bits/types/struct_itimerspec.h \ + /usr/include/bits/types/struct_sched_param.h \ + /usr/include/bits/types/struct_timespec.h \ + /usr/include/bits/types/struct_timeval.h \ + /usr/include/bits/types/struct_tm.h \ + /usr/include/bits/types/time_t.h \ + /usr/include/bits/types/timer_t.h \ + /usr/include/bits/types/wint_t.h \ + /usr/include/bits/typesizes.h \ + /usr/include/bits/uintn-identity.h \ + /usr/include/bits/uio_lim.h \ + /usr/include/bits/unistd_ext.h \ + /usr/include/bits/waitflags.h \ + /usr/include/bits/waitstatus.h \ + /usr/include/bits/wchar.h \ + /usr/include/bits/wctype-wchar.h \ + /usr/include/bits/wordsize.h \ + /usr/include/bits/xopen_lim.h \ + /usr/include/c++/15/algorithm \ + /usr/include/c++/15/array \ + /usr/include/c++/15/atomic \ + /usr/include/c++/15/backward/auto_ptr.h \ + /usr/include/c++/15/backward/binders.h \ + /usr/include/c++/15/bit \ + /usr/include/c++/15/bits/algorithmfwd.h \ + /usr/include/c++/15/bits/align.h \ + /usr/include/c++/15/bits/alloc_traits.h \ + /usr/include/c++/15/bits/allocated_ptr.h \ + /usr/include/c++/15/bits/allocator.h \ + /usr/include/c++/15/bits/atomic_base.h \ + /usr/include/c++/15/bits/atomic_futex.h \ + /usr/include/c++/15/bits/atomic_lockfree_defines.h \ + /usr/include/c++/15/bits/atomic_timed_wait.h \ + /usr/include/c++/15/bits/atomic_wait.h \ + /usr/include/c++/15/bits/basic_ios.h \ + /usr/include/c++/15/bits/basic_ios.tcc \ + /usr/include/c++/15/bits/basic_string.h \ + /usr/include/c++/15/bits/basic_string.tcc \ + /usr/include/c++/15/bits/char_traits.h \ + /usr/include/c++/15/bits/charconv.h \ + /usr/include/c++/15/bits/chrono.h \ + /usr/include/c++/15/bits/chrono_io.h \ + /usr/include/c++/15/bits/codecvt.h \ + /usr/include/c++/15/bits/concept_check.h \ + /usr/include/c++/15/bits/cpp_type_traits.h \ + /usr/include/c++/15/bits/cxxabi_forced.h \ + /usr/include/c++/15/bits/cxxabi_init_exception.h \ + /usr/include/c++/15/bits/enable_special_members.h \ + /usr/include/c++/15/bits/erase_if.h \ + /usr/include/c++/15/bits/exception.h \ + /usr/include/c++/15/bits/exception_defines.h \ + /usr/include/c++/15/bits/exception_ptr.h \ + /usr/include/c++/15/bits/functexcept.h \ + /usr/include/c++/15/bits/functional_hash.h \ + /usr/include/c++/15/bits/hash_bytes.h \ + /usr/include/c++/15/bits/hashtable.h \ + /usr/include/c++/15/bits/hashtable_policy.h \ + /usr/include/c++/15/bits/invoke.h \ + /usr/include/c++/15/bits/ios_base.h \ + /usr/include/c++/15/bits/istream.tcc \ + /usr/include/c++/15/bits/iterator_concepts.h \ + /usr/include/c++/15/bits/list.tcc \ + /usr/include/c++/15/bits/locale_classes.h \ + /usr/include/c++/15/bits/locale_classes.tcc \ + /usr/include/c++/15/bits/locale_conv.h \ + /usr/include/c++/15/bits/locale_facets.h \ + /usr/include/c++/15/bits/locale_facets.tcc \ + /usr/include/c++/15/bits/locale_facets_nonio.h \ + /usr/include/c++/15/bits/locale_facets_nonio.tcc \ + /usr/include/c++/15/bits/localefwd.h \ + /usr/include/c++/15/bits/max_size_type.h \ + /usr/include/c++/15/bits/memory_resource.h \ + /usr/include/c++/15/bits/memoryfwd.h \ + /usr/include/c++/15/bits/move.h \ + /usr/include/c++/15/bits/nested_exception.h \ + /usr/include/c++/15/bits/new_allocator.h \ + /usr/include/c++/15/bits/node_handle.h \ + /usr/include/c++/15/bits/ostream.h \ + /usr/include/c++/15/bits/ostream.tcc \ + /usr/include/c++/15/bits/ostream_insert.h \ + /usr/include/c++/15/bits/parse_numbers.h \ + /usr/include/c++/15/bits/postypes.h \ + /usr/include/c++/15/bits/predefined_ops.h \ + /usr/include/c++/15/bits/ptr_traits.h \ + /usr/include/c++/15/bits/quoted_string.h \ + /usr/include/c++/15/bits/random.h \ + /usr/include/c++/15/bits/random.tcc \ + /usr/include/c++/15/bits/range_access.h \ + /usr/include/c++/15/bits/ranges_algo.h \ + /usr/include/c++/15/bits/ranges_algobase.h \ + /usr/include/c++/15/bits/ranges_base.h \ + /usr/include/c++/15/bits/ranges_cmp.h \ + /usr/include/c++/15/bits/ranges_uninitialized.h \ + /usr/include/c++/15/bits/ranges_util.h \ + /usr/include/c++/15/bits/refwrap.h \ + /usr/include/c++/15/bits/requires_hosted.h \ + /usr/include/c++/15/bits/semaphore_base.h \ + /usr/include/c++/15/bits/shared_ptr.h \ + /usr/include/c++/15/bits/shared_ptr_atomic.h \ + /usr/include/c++/15/bits/shared_ptr_base.h \ + /usr/include/c++/15/bits/specfun.h \ + /usr/include/c++/15/bits/sstream.tcc \ + /usr/include/c++/15/bits/std_abs.h \ + /usr/include/c++/15/bits/std_function.h \ + /usr/include/c++/15/bits/std_mutex.h \ + /usr/include/c++/15/bits/std_thread.h \ + /usr/include/c++/15/bits/stl_algo.h \ + /usr/include/c++/15/bits/stl_algobase.h \ + /usr/include/c++/15/bits/stl_bvector.h \ + /usr/include/c++/15/bits/stl_construct.h \ + /usr/include/c++/15/bits/stl_function.h \ + /usr/include/c++/15/bits/stl_heap.h \ + /usr/include/c++/15/bits/stl_iterator.h \ + /usr/include/c++/15/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/15/bits/stl_iterator_base_types.h \ + /usr/include/c++/15/bits/stl_list.h \ + /usr/include/c++/15/bits/stl_map.h \ + /usr/include/c++/15/bits/stl_multimap.h \ + /usr/include/c++/15/bits/stl_multiset.h \ + /usr/include/c++/15/bits/stl_numeric.h \ + /usr/include/c++/15/bits/stl_pair.h \ + /usr/include/c++/15/bits/stl_raw_storage_iter.h \ + /usr/include/c++/15/bits/stl_relops.h \ + /usr/include/c++/15/bits/stl_set.h \ + /usr/include/c++/15/bits/stl_tempbuf.h \ + /usr/include/c++/15/bits/stl_tree.h \ + /usr/include/c++/15/bits/stl_uninitialized.h \ + /usr/include/c++/15/bits/stl_vector.h \ + /usr/include/c++/15/bits/stream_iterator.h \ + /usr/include/c++/15/bits/streambuf.tcc \ + /usr/include/c++/15/bits/streambuf_iterator.h \ + /usr/include/c++/15/bits/string_view.tcc \ + /usr/include/c++/15/bits/stringfwd.h \ + /usr/include/c++/15/bits/this_thread_sleep.h \ + /usr/include/c++/15/bits/uniform_int_dist.h \ + /usr/include/c++/15/bits/unique_lock.h \ + /usr/include/c++/15/bits/unique_ptr.h \ + /usr/include/c++/15/bits/unordered_map.h \ + /usr/include/c++/15/bits/unordered_set.h \ + /usr/include/c++/15/bits/uses_allocator.h \ + /usr/include/c++/15/bits/uses_allocator_args.h \ + /usr/include/c++/15/bits/utility.h \ + /usr/include/c++/15/bits/vector.tcc \ + /usr/include/c++/15/bits/version.h \ + /usr/include/c++/15/cassert \ + /usr/include/c++/15/cctype \ + /usr/include/c++/15/cerrno \ + /usr/include/c++/15/charconv \ + /usr/include/c++/15/chrono \ + /usr/include/c++/15/climits \ + /usr/include/c++/15/clocale \ + /usr/include/c++/15/cmath \ + /usr/include/c++/15/compare \ + /usr/include/c++/15/concepts \ + /usr/include/c++/15/condition_variable \ + /usr/include/c++/15/cstddef \ + /usr/include/c++/15/cstdint \ + /usr/include/c++/15/cstdio \ + /usr/include/c++/15/cstdlib \ + /usr/include/c++/15/cstring \ + /usr/include/c++/15/ctime \ + /usr/include/c++/15/cwchar \ + /usr/include/c++/15/cwctype \ + /usr/include/c++/15/debug/assertions.h \ + /usr/include/c++/15/debug/debug.h \ + /usr/include/c++/15/exception \ + /usr/include/c++/15/experimental/source_location \ + /usr/include/c++/15/ext/aligned_buffer.h \ + /usr/include/c++/15/ext/alloc_traits.h \ + /usr/include/c++/15/ext/atomicity.h \ + /usr/include/c++/15/ext/concurrence.h \ + /usr/include/c++/15/ext/numeric_traits.h \ + /usr/include/c++/15/ext/string_conversions.h \ + /usr/include/c++/15/ext/type_traits.h \ + /usr/include/c++/15/filesystem \ + /usr/include/c++/15/format \ + /usr/include/c++/15/functional \ + /usr/include/c++/15/future \ + /usr/include/c++/15/initializer_list \ + /usr/include/c++/15/iomanip \ + /usr/include/c++/15/ios \ + /usr/include/c++/15/iosfwd \ + /usr/include/c++/15/istream \ + /usr/include/c++/15/iterator \ + /usr/include/c++/15/limits \ + /usr/include/c++/15/list \ + /usr/include/c++/15/locale \ + /usr/include/c++/15/map \ + /usr/include/c++/15/memory \ + /usr/include/c++/15/memory_resource \ + /usr/include/c++/15/mutex \ + /usr/include/c++/15/new \ + /usr/include/c++/15/numeric \ + /usr/include/c++/15/optional \ + /usr/include/c++/15/ostream \ + /usr/include/c++/15/pstl/execution_defs.h \ + /usr/include/c++/15/pstl/glue_numeric_defs.h \ + /usr/include/c++/15/pstl/pstl_config.h \ + /usr/include/c++/15/random \ + /usr/include/c++/15/ratio \ + /usr/include/c++/15/semaphore \ + /usr/include/c++/15/set \ + /usr/include/c++/15/shared_mutex \ + /usr/include/c++/15/source_location \ + /usr/include/c++/15/sstream \ + /usr/include/c++/15/stdexcept \ + /usr/include/c++/15/stop_token \ + /usr/include/c++/15/streambuf \ + /usr/include/c++/15/string \ + /usr/include/c++/15/string_view \ + /usr/include/c++/15/system_error \ + /usr/include/c++/15/tr1/bessel_function.tcc \ + /usr/include/c++/15/tr1/beta_function.tcc \ + /usr/include/c++/15/tr1/ell_integral.tcc \ + /usr/include/c++/15/tr1/exp_integral.tcc \ + /usr/include/c++/15/tr1/gamma.tcc \ + /usr/include/c++/15/tr1/hypergeometric.tcc \ + /usr/include/c++/15/tr1/legendre_function.tcc \ + /usr/include/c++/15/tr1/modified_bessel_func.tcc \ + /usr/include/c++/15/tr1/poly_hermite.tcc \ + /usr/include/c++/15/tr1/poly_laguerre.tcc \ + /usr/include/c++/15/tr1/riemann_zeta.tcc \ + /usr/include/c++/15/tr1/special_function_util.h \ + /usr/include/c++/15/tuple \ + /usr/include/c++/15/type_traits \ + /usr/include/c++/15/typeinfo \ + /usr/include/c++/15/unordered_map \ + /usr/include/c++/15/unordered_set \ + /usr/include/c++/15/utility \ + /usr/include/c++/15/variant \ + /usr/include/c++/15/vector \ + /usr/include/c++/15/version \ + /usr/include/c++/15/x86_64-redhat-linux/bits/atomic_word.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/c++allocator.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/c++config.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/c++locale.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/cpu_defines.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/ctype_base.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/ctype_inline.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/error_constants.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/gthr-default.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/gthr.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/messages_members.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/opt_random.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/os_defines.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/time_members.h \ + /usr/include/ctype.h \ + /usr/include/endian.h \ + /usr/include/errno.h \ + /usr/include/features-time64.h \ + /usr/include/features.h \ + /usr/include/gnu/stubs-64.h \ + /usr/include/gnu/stubs.h \ + /usr/include/libintl.h \ + /usr/include/limits.h \ + /usr/include/linux/close_range.h \ + /usr/include/linux/errno.h \ + /usr/include/linux/limits.h \ + /usr/include/linux/posix_types.h \ + /usr/include/linux/sched/types.h \ + /usr/include/linux/stddef.h \ + /usr/include/linux/types.h \ + /usr/include/locale.h \ + /usr/include/pthread.h \ + /usr/include/qt6/QtCore/QAbstractItemModel \ + /usr/include/qt6/QtCore/QDeadlineTimer \ + /usr/include/qt6/QtCore/QEvent \ + /usr/include/qt6/QtCore/QHash \ + /usr/include/qt6/QtCore/QList \ + /usr/include/qt6/QtCore/QMap \ + /usr/include/qt6/QtCore/QMargins \ + /usr/include/qt6/QtCore/QMetaEnum \ + /usr/include/qt6/QtCore/QModelIndex \ + /usr/include/qt6/QtCore/QMutex \ + /usr/include/qt6/QtCore/QObject \ + /usr/include/qt6/QtCore/QRect \ + /usr/include/qt6/QtCore/QSize \ + /usr/include/qt6/QtCore/QSizeF \ + /usr/include/qt6/QtCore/QString \ + /usr/include/qt6/QtCore/QStringList \ + /usr/include/qt6/QtCore/QVariant \ + /usr/include/qt6/QtCore/QtCore \ + /usr/include/qt6/QtCore/QtCoreDepends \ + /usr/include/qt6/QtCore/q17memory.h \ + /usr/include/qt6/QtCore/q20algorithm.h \ + /usr/include/qt6/QtCore/q20chrono.h \ + /usr/include/qt6/QtCore/q20functional.h \ + /usr/include/qt6/QtCore/q20iterator.h \ + /usr/include/qt6/QtCore/q20map.h \ + /usr/include/qt6/QtCore/q20memory.h \ + /usr/include/qt6/QtCore/q20type_traits.h \ + /usr/include/qt6/QtCore/q20utility.h \ + /usr/include/qt6/QtCore/q20vector.h \ + /usr/include/qt6/QtCore/q23functional.h \ + /usr/include/qt6/QtCore/q23type_traits.h \ + /usr/include/qt6/QtCore/q23utility.h \ + /usr/include/qt6/QtCore/q26numeric.h \ + /usr/include/qt6/QtCore/qabstractanimation.h \ + /usr/include/qt6/QtCore/qabstracteventdispatcher.h \ + /usr/include/qt6/QtCore/qabstractitemmodel.h \ + /usr/include/qt6/QtCore/qabstractnativeeventfilter.h \ + /usr/include/qt6/QtCore/qabstractproxymodel.h \ + /usr/include/qt6/QtCore/qalgorithms.h \ + /usr/include/qt6/QtCore/qalloc.h \ + /usr/include/qt6/QtCore/qanimationgroup.h \ + /usr/include/qt6/QtCore/qanystringview.h \ + /usr/include/qt6/QtCore/qapplicationstatic.h \ + /usr/include/qt6/QtCore/qarraydata.h \ + /usr/include/qt6/QtCore/qarraydataops.h \ + /usr/include/qt6/QtCore/qarraydatapointer.h \ + /usr/include/qt6/QtCore/qassert.h \ + /usr/include/qt6/QtCore/qassociativeiterable.h \ + /usr/include/qt6/QtCore/qatomic.h \ + /usr/include/qt6/QtCore/qatomic_cxx11.h \ + /usr/include/qt6/QtCore/qatomicscopedvaluerollback.h \ + /usr/include/qt6/QtCore/qbasicatomic.h \ + /usr/include/qt6/QtCore/qbasictimer.h \ + /usr/include/qt6/QtCore/qbindingstorage.h \ + /usr/include/qt6/QtCore/qbitarray.h \ + /usr/include/qt6/QtCore/qbuffer.h \ + /usr/include/qt6/QtCore/qbytearray.h \ + /usr/include/qt6/QtCore/qbytearrayalgorithms.h \ + /usr/include/qt6/QtCore/qbytearraylist.h \ + /usr/include/qt6/QtCore/qbytearraymatcher.h \ + /usr/include/qt6/QtCore/qbytearrayview.h \ + /usr/include/qt6/QtCore/qcache.h \ + /usr/include/qt6/QtCore/qcalendar.h \ + /usr/include/qt6/QtCore/qcborarray.h \ + /usr/include/qt6/QtCore/qcborcommon.h \ + /usr/include/qt6/QtCore/qcbormap.h \ + /usr/include/qt6/QtCore/qcborstream.h \ + /usr/include/qt6/QtCore/qcborstreamreader.h \ + /usr/include/qt6/QtCore/qcborstreamwriter.h \ + /usr/include/qt6/QtCore/qcborvalue.h \ + /usr/include/qt6/QtCore/qchar.h \ + /usr/include/qt6/QtCore/qcheckedint_impl.h \ + /usr/include/qt6/QtCore/qchronotimer.h \ + /usr/include/qt6/QtCore/qcollator.h \ + /usr/include/qt6/QtCore/qcommandlineoption.h \ + /usr/include/qt6/QtCore/qcommandlineparser.h \ + /usr/include/qt6/QtCore/qcompare.h \ + /usr/include/qt6/QtCore/qcompare_impl.h \ + /usr/include/qt6/QtCore/qcomparehelpers.h \ + /usr/include/qt6/QtCore/qcompilerdetection.h \ + /usr/include/qt6/QtCore/qconcatenatetablesproxymodel.h \ + /usr/include/qt6/QtCore/qconfig-64.h \ + /usr/include/qt6/QtCore/qconfig.h \ + /usr/include/qt6/QtCore/qconstructormacros.h \ + /usr/include/qt6/QtCore/qcontainerfwd.h \ + /usr/include/qt6/QtCore/qcontainerinfo.h \ + /usr/include/qt6/QtCore/qcontainertools_impl.h \ + /usr/include/qt6/QtCore/qcontiguouscache.h \ + /usr/include/qt6/QtCore/qcoreapplication.h \ + /usr/include/qt6/QtCore/qcoreapplication_platform.h \ + /usr/include/qt6/QtCore/qcoreevent.h \ + /usr/include/qt6/QtCore/qcryptographichash.h \ + /usr/include/qt6/QtCore/qdarwinhelpers.h \ + /usr/include/qt6/QtCore/qdatastream.h \ + /usr/include/qt6/QtCore/qdatetime.h \ + /usr/include/qt6/QtCore/qdeadlinetimer.h \ + /usr/include/qt6/QtCore/qdebug.h \ + /usr/include/qt6/QtCore/qdir.h \ + /usr/include/qt6/QtCore/qdiriterator.h \ + /usr/include/qt6/QtCore/qdirlisting.h \ + /usr/include/qt6/QtCore/qeasingcurve.h \ + /usr/include/qt6/QtCore/qelapsedtimer.h \ + /usr/include/qt6/QtCore/qendian.h \ + /usr/include/qt6/QtCore/qeventloop.h \ + /usr/include/qt6/QtCore/qexception.h \ + /usr/include/qt6/QtCore/qexceptionhandling.h \ + /usr/include/qt6/QtCore/qfactoryinterface.h \ + /usr/include/qt6/QtCore/qfile.h \ + /usr/include/qt6/QtCore/qfiledevice.h \ + /usr/include/qt6/QtCore/qfileinfo.h \ + /usr/include/qt6/QtCore/qfileselector.h \ + /usr/include/qt6/QtCore/qfilesystemwatcher.h \ + /usr/include/qt6/QtCore/qflags.h \ + /usr/include/qt6/QtCore/qfloat16.h \ + /usr/include/qt6/QtCore/qforeach.h \ + /usr/include/qt6/QtCore/qfunctionaltools_impl.h \ + /usr/include/qt6/QtCore/qfunctionpointer.h \ + /usr/include/qt6/QtCore/qfuture.h \ + /usr/include/qt6/QtCore/qfuture_impl.h \ + /usr/include/qt6/QtCore/qfutureinterface.h \ + /usr/include/qt6/QtCore/qfuturesynchronizer.h \ + /usr/include/qt6/QtCore/qfuturewatcher.h \ + /usr/include/qt6/QtCore/qgenericatomic.h \ + /usr/include/qt6/QtCore/qglobal.h \ + /usr/include/qt6/QtCore/qglobalstatic.h \ + /usr/include/qt6/QtCore/qhash.h \ + /usr/include/qt6/QtCore/qhashfunctions.h \ + /usr/include/qt6/QtCore/qidentityproxymodel.h \ + /usr/include/qt6/QtCore/qiodevice.h \ + /usr/include/qt6/QtCore/qiodevicebase.h \ + /usr/include/qt6/QtCore/qitemselectionmodel.h \ + /usr/include/qt6/QtCore/qiterable.h \ + /usr/include/qt6/QtCore/qiterator.h \ + /usr/include/qt6/QtCore/qjsonarray.h \ + /usr/include/qt6/QtCore/qjsondocument.h \ + /usr/include/qt6/QtCore/qjsonobject.h \ + /usr/include/qt6/QtCore/qjsonparseerror.h \ + /usr/include/qt6/QtCore/qjsonvalue.h \ + /usr/include/qt6/QtCore/qlatin1stringmatcher.h \ + /usr/include/qt6/QtCore/qlatin1stringview.h \ + /usr/include/qt6/QtCore/qlibrary.h \ + /usr/include/qt6/QtCore/qlibraryinfo.h \ + /usr/include/qt6/QtCore/qline.h \ + /usr/include/qt6/QtCore/qlist.h \ + /usr/include/qt6/QtCore/qlocale.h \ + /usr/include/qt6/QtCore/qlockfile.h \ + /usr/include/qt6/QtCore/qlogging.h \ + /usr/include/qt6/QtCore/qloggingcategory.h \ + /usr/include/qt6/QtCore/qmalloc.h \ + /usr/include/qt6/QtCore/qmap.h \ + /usr/include/qt6/QtCore/qmargins.h \ + /usr/include/qt6/QtCore/qmath.h \ + /usr/include/qt6/QtCore/qmessageauthenticationcode.h \ + /usr/include/qt6/QtCore/qmetacontainer.h \ + /usr/include/qt6/QtCore/qmetaobject.h \ + /usr/include/qt6/QtCore/qmetatype.h \ + /usr/include/qt6/QtCore/qmimedata.h \ + /usr/include/qt6/QtCore/qmimedatabase.h \ + /usr/include/qt6/QtCore/qmimetype.h \ + /usr/include/qt6/QtCore/qminmax.h \ + /usr/include/qt6/QtCore/qmutex.h \ + /usr/include/qt6/QtCore/qnamespace.h \ + /usr/include/qt6/QtCore/qnativeinterface.h \ + /usr/include/qt6/QtCore/qnumeric.h \ + /usr/include/qt6/QtCore/qobject.h \ + /usr/include/qt6/QtCore/qobject_impl.h \ + /usr/include/qt6/QtCore/qobjectcleanuphandler.h \ + /usr/include/qt6/QtCore/qobjectdefs.h \ + /usr/include/qt6/QtCore/qobjectdefs_impl.h \ + /usr/include/qt6/QtCore/qoperatingsystemversion.h \ + /usr/include/qt6/QtCore/qoverload.h \ + /usr/include/qt6/QtCore/qpair.h \ + /usr/include/qt6/QtCore/qparallelanimationgroup.h \ + /usr/include/qt6/QtCore/qpauseanimation.h \ + /usr/include/qt6/QtCore/qpermissions.h \ + /usr/include/qt6/QtCore/qplugin.h \ + /usr/include/qt6/QtCore/qpluginloader.h \ + /usr/include/qt6/QtCore/qpoint.h \ + /usr/include/qt6/QtCore/qpointer.h \ + /usr/include/qt6/QtCore/qprocess.h \ + /usr/include/qt6/QtCore/qprocessordetection.h \ + /usr/include/qt6/QtCore/qpromise.h \ + /usr/include/qt6/QtCore/qproperty.h \ + /usr/include/qt6/QtCore/qpropertyanimation.h \ + /usr/include/qt6/QtCore/qpropertyprivate.h \ + /usr/include/qt6/QtCore/qqueue.h \ + /usr/include/qt6/QtCore/qrandom.h \ + /usr/include/qt6/QtCore/qrangemodel.h \ + /usr/include/qt6/QtCore/qrangemodel_impl.h \ + /usr/include/qt6/QtCore/qreadwritelock.h \ + /usr/include/qt6/QtCore/qrect.h \ + /usr/include/qt6/QtCore/qrefcount.h \ + /usr/include/qt6/QtCore/qregularexpression.h \ + /usr/include/qt6/QtCore/qresource.h \ + /usr/include/qt6/QtCore/qresultstore.h \ + /usr/include/qt6/QtCore/qrunnable.h \ + /usr/include/qt6/QtCore/qsavefile.h \ + /usr/include/qt6/QtCore/qscopedpointer.h \ + /usr/include/qt6/QtCore/qscopedvaluerollback.h \ + /usr/include/qt6/QtCore/qscopeguard.h \ + /usr/include/qt6/QtCore/qsemaphore.h \ + /usr/include/qt6/QtCore/qsequentialanimationgroup.h \ + /usr/include/qt6/QtCore/qsequentialiterable.h \ + /usr/include/qt6/QtCore/qset.h \ + /usr/include/qt6/QtCore/qsettings.h \ + /usr/include/qt6/QtCore/qshareddata.h \ + /usr/include/qt6/QtCore/qshareddata_impl.h \ + /usr/include/qt6/QtCore/qsharedmemory.h \ + /usr/include/qt6/QtCore/qsharedpointer.h \ + /usr/include/qt6/QtCore/qsharedpointer_impl.h \ + /usr/include/qt6/QtCore/qsignalmapper.h \ + /usr/include/qt6/QtCore/qsimd.h \ + /usr/include/qt6/QtCore/qsize.h \ + /usr/include/qt6/QtCore/qsocketnotifier.h \ + /usr/include/qt6/QtCore/qsortfilterproxymodel.h \ + /usr/include/qt6/QtCore/qspan.h \ + /usr/include/qt6/QtCore/qstack.h \ + /usr/include/qt6/QtCore/qstandardpaths.h \ + /usr/include/qt6/QtCore/qstaticlatin1stringmatcher.h \ + /usr/include/qt6/QtCore/qstdlibdetection.h \ + /usr/include/qt6/QtCore/qstorageinfo.h \ + /usr/include/qt6/QtCore/qstring.h \ + /usr/include/qt6/QtCore/qstringalgorithms.h \ + /usr/include/qt6/QtCore/qstringbuilder.h \ + /usr/include/qt6/QtCore/qstringconverter.h \ + /usr/include/qt6/QtCore/qstringconverter_base.h \ + /usr/include/qt6/QtCore/qstringfwd.h \ + /usr/include/qt6/QtCore/qstringlist.h \ + /usr/include/qt6/QtCore/qstringlistmodel.h \ + /usr/include/qt6/QtCore/qstringliteral.h \ + /usr/include/qt6/QtCore/qstringmatcher.h \ + /usr/include/qt6/QtCore/qstringtokenizer.h \ + /usr/include/qt6/QtCore/qstringview.h \ + /usr/include/qt6/QtCore/qswap.h \ + /usr/include/qt6/QtCore/qsysinfo.h \ + /usr/include/qt6/QtCore/qsystemdetection.h \ + /usr/include/qt6/QtCore/qsystemsemaphore.h \ + /usr/include/qt6/QtCore/qtaggedpointer.h \ + /usr/include/qt6/QtCore/qtclasshelpermacros.h \ + /usr/include/qt6/QtCore/qtconfiginclude.h \ + /usr/include/qt6/QtCore/qtconfigmacros.h \ + /usr/include/qt6/QtCore/qtcore-config.h \ + /usr/include/qt6/QtCore/qtcoreexports.h \ + /usr/include/qt6/QtCore/qtcoreglobal.h \ + /usr/include/qt6/QtCore/qtcoreversion.h \ + /usr/include/qt6/QtCore/qtdeprecationdefinitions.h \ + /usr/include/qt6/QtCore/qtdeprecationmarkers.h \ + /usr/include/qt6/QtCore/qtemporarydir.h \ + /usr/include/qt6/QtCore/qtemporaryfile.h \ + /usr/include/qt6/QtCore/qtenvironmentvariables.h \ + /usr/include/qt6/QtCore/qtestsupport_core.h \ + /usr/include/qt6/QtCore/qtextboundaryfinder.h \ + /usr/include/qt6/QtCore/qtextstream.h \ + /usr/include/qt6/QtCore/qtformat_impl.h \ + /usr/include/qt6/QtCore/qthread.h \ + /usr/include/qt6/QtCore/qthreadpool.h \ + /usr/include/qt6/QtCore/qthreadstorage.h \ + /usr/include/qt6/QtCore/qtimeline.h \ + /usr/include/qt6/QtCore/qtimer.h \ + /usr/include/qt6/QtCore/qtimezone.h \ + /usr/include/qt6/QtCore/qtipccommon.h \ + /usr/include/qt6/QtCore/qtmetamacros.h \ + /usr/include/qt6/QtCore/qtmocconstants.h \ + /usr/include/qt6/QtCore/qtnoop.h \ + /usr/include/qt6/QtCore/qtpreprocessorsupport.h \ + /usr/include/qt6/QtCore/qtranslator.h \ + /usr/include/qt6/QtCore/qtransposeproxymodel.h \ + /usr/include/qt6/QtCore/qtresource.h \ + /usr/include/qt6/QtCore/qtsan_impl.h \ + /usr/include/qt6/QtCore/qtsymbolmacros.h \ + /usr/include/qt6/QtCore/qttranslation.h \ + /usr/include/qt6/QtCore/qttypetraits.h \ + /usr/include/qt6/QtCore/qtversion.h \ + /usr/include/qt6/QtCore/qtversionchecks.h \ + /usr/include/qt6/QtCore/qtypeinfo.h \ + /usr/include/qt6/QtCore/qtyperevision.h \ + /usr/include/qt6/QtCore/qtypes.h \ + /usr/include/qt6/QtCore/qurl.h \ + /usr/include/qt6/QtCore/qurlquery.h \ + /usr/include/qt6/QtCore/qutf8stringview.h \ + /usr/include/qt6/QtCore/quuid.h \ + /usr/include/qt6/QtCore/qvariant.h \ + /usr/include/qt6/QtCore/qvariantanimation.h \ + /usr/include/qt6/QtCore/qvarianthash.h \ + /usr/include/qt6/QtCore/qvariantlist.h \ + /usr/include/qt6/QtCore/qvariantmap.h \ + /usr/include/qt6/QtCore/qvarlengtharray.h \ + /usr/include/qt6/QtCore/qvector.h \ + /usr/include/qt6/QtCore/qversionnumber.h \ + /usr/include/qt6/QtCore/qversiontagging.h \ + /usr/include/qt6/QtCore/qwaitcondition.h \ + /usr/include/qt6/QtCore/qwineventnotifier.h \ + /usr/include/qt6/QtCore/qxmlstream.h \ + /usr/include/qt6/QtCore/qxpfunctional.h \ + /usr/include/qt6/QtCore/qxptype_traits.h \ + /usr/include/qt6/QtCore/qyieldcpu.h \ + /usr/include/qt6/QtGui/QBrush \ + /usr/include/qt6/QtGui/QColor \ + /usr/include/qt6/QtGui/QFont \ + /usr/include/qt6/QtGui/QIcon \ + /usr/include/qt6/QtGui/QImage \ + /usr/include/qt6/QtGui/QPixmap \ + /usr/include/qt6/QtGui/QTransform \ + /usr/include/qt6/QtGui/qaction.h \ + /usr/include/qt6/QtGui/qbitmap.h \ + /usr/include/qt6/QtGui/qbrush.h \ + /usr/include/qt6/QtGui/qcolor.h \ + /usr/include/qt6/QtGui/qcursor.h \ + /usr/include/qt6/QtGui/qevent.h \ + /usr/include/qt6/QtGui/qeventpoint.h \ + /usr/include/qt6/QtGui/qfont.h \ + /usr/include/qt6/QtGui/qfontinfo.h \ + /usr/include/qt6/QtGui/qfontmetrics.h \ + /usr/include/qt6/QtGui/qfontvariableaxis.h \ + /usr/include/qt6/QtGui/qguiapplication.h \ + /usr/include/qt6/QtGui/qguiapplication_platform.h \ + /usr/include/qt6/QtGui/qicon.h \ + /usr/include/qt6/QtGui/qimage.h \ + /usr/include/qt6/QtGui/qinputdevice.h \ + /usr/include/qt6/QtGui/qinputmethod.h \ + /usr/include/qt6/QtGui/qkeysequence.h \ + /usr/include/qt6/QtGui/qpaintdevice.h \ + /usr/include/qt6/QtGui/qpalette.h \ + /usr/include/qt6/QtGui/qpixelformat.h \ + /usr/include/qt6/QtGui/qpixmap.h \ + /usr/include/qt6/QtGui/qpointingdevice.h \ + /usr/include/qt6/QtGui/qpolygon.h \ + /usr/include/qt6/QtGui/qregion.h \ + /usr/include/qt6/QtGui/qrgb.h \ + /usr/include/qt6/QtGui/qrgba64.h \ + /usr/include/qt6/QtGui/qscreen.h \ + /usr/include/qt6/QtGui/qscreen_platform.h \ + /usr/include/qt6/QtGui/qsurface.h \ + /usr/include/qt6/QtGui/qsurfaceformat.h \ + /usr/include/qt6/QtGui/qtestsupport_gui.h \ + /usr/include/qt6/QtGui/qtgui-config.h \ + /usr/include/qt6/QtGui/qtguiexports.h \ + /usr/include/qt6/QtGui/qtguiglobal.h \ + /usr/include/qt6/QtGui/qtransform.h \ + /usr/include/qt6/QtGui/qvalidator.h \ + /usr/include/qt6/QtGui/qvector2d.h \ + /usr/include/qt6/QtGui/qvector3d.h \ + /usr/include/qt6/QtGui/qvector4d.h \ + /usr/include/qt6/QtGui/qvectornd.h \ + /usr/include/qt6/QtGui/qwindow.h \ + /usr/include/qt6/QtGui/qwindowdefs.h \ + /usr/include/qt6/QtTest/QtTest \ + /usr/include/qt6/QtTest/QtTestDepends \ + /usr/include/qt6/QtTest/qabstractitemmodeltester.h \ + /usr/include/qt6/QtTest/qbenchmark.h \ + /usr/include/qt6/QtTest/qbenchmarkmetric.h \ + /usr/include/qt6/QtTest/qsignalspy.h \ + /usr/include/qt6/QtTest/qtest.h \ + /usr/include/qt6/QtTest/qtest_gui.h \ + /usr/include/qt6/QtTest/qtest_widgets.h \ + /usr/include/qt6/QtTest/qtestassert.h \ + /usr/include/qt6/QtTest/qtestcase.h \ + /usr/include/qt6/QtTest/qtestdata.h \ + /usr/include/qt6/QtTest/qtestevent.h \ + /usr/include/qt6/QtTest/qtesteventloop.h \ + /usr/include/qt6/QtTest/qtestkeyboard.h \ + /usr/include/qt6/QtTest/qtestmouse.h \ + /usr/include/qt6/QtTest/qtestspontaneevent.h \ + /usr/include/qt6/QtTest/qtestsystem.h \ + /usr/include/qt6/QtTest/qtesttostring.h \ + /usr/include/qt6/QtTest/qtesttouch.h \ + /usr/include/qt6/QtTest/qtestwheel.h \ + /usr/include/qt6/QtTest/qttestexports.h \ + /usr/include/qt6/QtTest/qttestglobal.h \ + /usr/include/qt6/QtTest/qttestlib-config.h \ + /usr/include/qt6/QtTest/qttestversion.h \ + /usr/include/qt6/QtWidgets/QAbstractItemView \ + /usr/include/qt6/QtWidgets/QSizePolicy \ + /usr/include/qt6/QtWidgets/QWidget \ + /usr/include/qt6/QtWidgets/qabstractitemdelegate.h \ + /usr/include/qt6/QtWidgets/qabstractitemview.h \ + /usr/include/qt6/QtWidgets/qabstractscrollarea.h \ + /usr/include/qt6/QtWidgets/qabstractslider.h \ + /usr/include/qt6/QtWidgets/qabstractspinbox.h \ + /usr/include/qt6/QtWidgets/qapplication.h \ + /usr/include/qt6/QtWidgets/qframe.h \ + /usr/include/qt6/QtWidgets/qrubberband.h \ + /usr/include/qt6/QtWidgets/qsizepolicy.h \ + /usr/include/qt6/QtWidgets/qslider.h \ + /usr/include/qt6/QtWidgets/qstyle.h \ + /usr/include/qt6/QtWidgets/qstyleoption.h \ + /usr/include/qt6/QtWidgets/qtabbar.h \ + /usr/include/qt6/QtWidgets/qtabwidget.h \ + /usr/include/qt6/QtWidgets/qtestsupport_widgets.h \ + /usr/include/qt6/QtWidgets/qtwidgets-config.h \ + /usr/include/qt6/QtWidgets/qtwidgetsexports.h \ + /usr/include/qt6/QtWidgets/qtwidgetsglobal.h \ + /usr/include/qt6/QtWidgets/qwidget.h \ + /usr/include/sched.h \ + /usr/include/semaphore.h \ + /usr/include/stdc-predef.h \ + /usr/include/stdint.h \ + /usr/include/stdio.h \ + /usr/include/stdlib.h \ + /usr/include/string.h \ + /usr/include/strings.h \ + /usr/include/sys/cdefs.h \ + /usr/include/sys/select.h \ + /usr/include/sys/single_threaded.h \ + /usr/include/sys/syscall.h \ + /usr/include/sys/time.h \ + /usr/include/sys/types.h \ + /usr/include/syscall.h \ + /usr/include/time.h \ + /usr/include/unistd.h \ + /usr/include/wchar.h \ + /usr/include/wctype.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/adxintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/amxavx512intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/amxbf16intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/amxcomplexintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/amxfp16intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/amxfp8intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/amxint8intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/amxmovrsintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/amxtf32intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/amxtileintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/amxtransposeintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2-512bf16intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2-512convertintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2-512mediaintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2-512minmaxintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2-512satcvtintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2bf16intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2convertintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2copyintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2mediaintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2minmaxintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2satcvtintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx2intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512bf16intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512bf16vlintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512bitalgintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512bitalgvlintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512bwintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512cdintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512dqintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512fintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512fp16intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512fp16vlintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512ifmaintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512ifmavlintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vbmi2intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vbmi2vlintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vbmiintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vbmivlintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vlbwintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vldqintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vlintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vnniintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vnnivlintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vp2intersectintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vp2intersectvlintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vpopcntdqintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vpopcntdqvlintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avxifmaintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avxintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avxneconvertintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avxvnniint16intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avxvnniint8intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avxvnniintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/bmi2intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/bmiintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/cetintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/cldemoteintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/clflushoptintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/clwbintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/clzerointrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/cmpccxaddintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/emmintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/enqcmdintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/f16cintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/fmaintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/fxsrintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/gfniintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/hresetintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/ia32intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/immintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/keylockerintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/lwpintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/lzcntintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/mm_malloc.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/mmintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/movdirintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/movrsintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/mwaitintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/mwaitxintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/pconfigintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/pkuintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/pmmintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/popcntintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/prfchiintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/prfchwintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/raointintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/rdseedintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/rtmintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/serializeintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/sgxintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/sha512intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/shaintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/sm3intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/sm4intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/smmintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/stdarg.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/stdbool.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/stddef.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/tbmintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/tmmintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/tsxldtrkintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/uintrintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/usermsrintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/vaesintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/vpclmulqdqintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/waitpkgintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/wbnoinvdintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/wmmintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/x86gprintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/xmmintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/xsavecintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/xsaveintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/xsaveoptintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/xsavesintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/xtestintrin.h \ + /usr/lib64/cmake/Qt6/Qt6Config.cmake \ + /usr/lib64/cmake/Qt6/Qt6ConfigExtras.cmake \ + /usr/lib64/cmake/Qt6/Qt6ConfigVersion.cmake \ + /usr/lib64/cmake/Qt6/Qt6ConfigVersionImpl.cmake \ + /usr/lib64/cmake/Qt6/Qt6Dependencies.cmake \ + /usr/lib64/cmake/Qt6/Qt6Targets.cmake \ + /usr/lib64/cmake/Qt6/Qt6VersionlessAliasTargets.cmake \ + /usr/lib64/cmake/Qt6/QtFeature.cmake \ + /usr/lib64/cmake/Qt6/QtFeatureCommon.cmake \ + /usr/lib64/cmake/Qt6/QtInstallPaths.cmake \ + /usr/lib64/cmake/Qt6/QtPublicAndroidHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicAppleHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicCMakeEarlyPolicyHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicCMakeHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicCMakeVersionHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicDependencyHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicExternalProjectHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicFinalizerHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicFindPackageHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicGitHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicPluginHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicPluginHelpers_v2.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomAttributionHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomBuildToolHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomCommonGenerationHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomCpeHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomCycloneDXHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomDepHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomDocumentNamespaceHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomExternalReferenceHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomFileHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomGenerationCycloneDXHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomGenerationHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomLicenseHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomOpsHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomPurlHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomPythonHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomQtEntityHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomRelationshipHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomSystemDepHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicTargetHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicTestHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicToolHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicWalkLibsHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicWindowsHelpers.cmake \ + /usr/lib64/cmake/Qt6Test/Qt6TestAdditionalTargetInfo.cmake \ + /usr/lib64/cmake/Qt6Test/Qt6TestConfig.cmake \ + /usr/lib64/cmake/Qt6Test/Qt6TestConfigVersion.cmake \ + /usr/lib64/cmake/Qt6Test/Qt6TestConfigVersionImpl.cmake \ + /usr/lib64/cmake/Qt6Test/Qt6TestDependencies.cmake \ + /usr/lib64/cmake/Qt6Test/Qt6TestTargets-relwithdebinfo.cmake \ + /usr/lib64/cmake/Qt6Test/Qt6TestTargets.cmake \ + /usr/lib64/cmake/Qt6Test/Qt6TestVersionlessAliasTargets.cmake \ + /usr/lib64/cmake/Qt6Test/QtTestProperties.cmake \ + /usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake \ + /usr/share/cmake/Modules/CheckCXXCompilerFlag.cmake \ + /usr/bin/cmake diff --git a/build-linux/tests/test_grid_scrub_autogen/include/test_grid_scrub.moc b/build-linux/tests/test_grid_scrub_autogen/include/test_grid_scrub.moc new file mode 100644 index 00000000..7ba29fd8 --- /dev/null +++ b/build-linux/tests/test_grid_scrub_autogen/include/test_grid_scrub.moc @@ -0,0 +1,112 @@ +/**************************************************************************** +** Meta object code from reading C++ file 'test_grid_scrub.cpp' +** +** Created by: The Qt Meta Object Compiler version 69 (Qt 6.10.3) +** +** WARNING! All changes made in this file will be lost! +*****************************************************************************/ + +#include + +#include + +#include + + +#include +#if !defined(Q_MOC_OUTPUT_REVISION) +#error "The header file 'test_grid_scrub.cpp' doesn't include ." +#elif Q_MOC_OUTPUT_REVISION != 69 +#error "This file was generated using the moc from 6.10.3. It" +#error "cannot be used with the include files from this version of Qt." +#error "(The moc has changed too much.)" +#endif + +#ifndef Q_CONSTINIT +#define Q_CONSTINIT +#endif + +QT_WARNING_PUSH +QT_WARNING_DISABLE_DEPRECATED +QT_WARNING_DISABLE_GCC("-Wuseless-cast") +namespace { +struct qt_meta_tag_ZN13TestGridScrubE_t {}; +} // unnamed namespace + +template <> constexpr inline auto TestGridScrub::qt_create_metaobjectdata() +{ + namespace QMC = QtMocConstants; + QtMocHelpers::StringRefStorage qt_stringData { + "TestGridScrub", + "disablesMouseGrabOnWayland", + "", + "keepsMouseGrabOnOtherSessions" + }; + + QtMocHelpers::UintData qt_methods { + // Slot 'disablesMouseGrabOnWayland' + QtMocHelpers::SlotData(1, 2, QMC::AccessPrivate, QMetaType::Void), + // Slot 'keepsMouseGrabOnOtherSessions' + QtMocHelpers::SlotData(3, 2, QMC::AccessPrivate, QMetaType::Void), + }; + QtMocHelpers::UintData qt_properties { + }; + QtMocHelpers::UintData qt_enums { + }; + return QtMocHelpers::metaObjectData(QMC::MetaObjectFlag{}, qt_stringData, + qt_methods, qt_properties, qt_enums); +} +Q_CONSTINIT const QMetaObject TestGridScrub::staticMetaObject = { { + QMetaObject::SuperData::link(), + qt_staticMetaObjectStaticContent.stringdata, + qt_staticMetaObjectStaticContent.data, + qt_static_metacall, + nullptr, + qt_staticMetaObjectRelocatingContent.metaTypes, + nullptr +} }; + +void TestGridScrub::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) +{ + auto *_t = static_cast(_o); + if (_c == QMetaObject::InvokeMetaMethod) { + switch (_id) { + case 0: _t->disablesMouseGrabOnWayland(); break; + case 1: _t->keepsMouseGrabOnOtherSessions(); break; + default: ; + } + } + (void)_a; +} + +const QMetaObject *TestGridScrub::metaObject() const +{ + return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject; +} + +void *TestGridScrub::qt_metacast(const char *_clname) +{ + if (!_clname) return nullptr; + if (!strcmp(_clname, qt_staticMetaObjectStaticContent.strings)) + return static_cast(this); + return QObject::qt_metacast(_clname); +} + +int TestGridScrub::qt_metacall(QMetaObject::Call _c, int _id, void **_a) +{ + _id = QObject::qt_metacall(_c, _id, _a); + if (_id < 0) + return _id; + if (_c == QMetaObject::InvokeMetaMethod) { + if (_id < 2) + qt_static_metacall(this, _c, _id, _a); + _id -= 2; + } + if (_c == QMetaObject::RegisterMethodArgumentMetaType) { + if (_id < 2) + *reinterpret_cast(_a[0]) = QMetaType(); + _id -= 2; + } + return _id; +} +QT_WARNING_POP diff --git a/build-linux/tests/test_grid_scrub_autogen/moc_predefs.h b/build-linux/tests/test_grid_scrub_autogen/moc_predefs.h new file mode 100644 index 00000000..0aeb7593 --- /dev/null +++ b/build-linux/tests/test_grid_scrub_autogen/moc_predefs.h @@ -0,0 +1,504 @@ +#define __DBL_MIN_EXP__ (-1021) +#define __LDBL_MANT_DIG__ 64 +#define __cpp_nontype_template_parameter_auto 201606L +#define __UINT_LEAST16_MAX__ 0xffff +#define __FLT16_HAS_QUIET_NAN__ 1 +#define __ATOMIC_ACQUIRE 2 +#define QT_TESTCASE_BUILDDIR "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests" +#define __FLT128_MAX_10_EXP__ 4932 +#define __FLT_MIN__ 1.17549435082228750796873653722224568e-38F +#define __GCC_IEC_559_COMPLEX 2 +#define __cpp_aggregate_nsdmi 201304L +#define __UINT_LEAST8_TYPE__ unsigned char +#define __SIZEOF_FLOAT80__ 16 +#define __BFLT16_DENORM_MIN__ 9.18354961579912115600575419704879436e-41BF16 +#define __cpp_impl_three_way_comparison 201907L +#define __INTMAX_C(c) c ## L +#define __CHAR_BIT__ 8 +#define __cpp_designated_initializers 201707L +#define __UINT8_MAX__ 0xff +#define __SCHAR_WIDTH__ 8 +#define __WINT_MAX__ 0xffffffffU +#define __FLT32_MIN_EXP__ (-125) +#define __cpp_static_assert 201411L +#define __BFLT16_MIN_10_EXP__ (-37) +#define __cpp_inheriting_constructors 201511L +#define QT_GUI_LIB 1 +#define __ORDER_LITTLE_ENDIAN__ 1234 +#define __WCHAR_MAX__ 0x7fffffff +#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_2 1 +#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_4 1 +#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_8 1 +#define __GCC_ATOMIC_CHAR_LOCK_FREE 2 +#define __GCC_IEC_559 2 +#define __FLT32X_DECIMAL_DIG__ 17 +#define TLRENDER_OIIO 1 +#define __FLT_EVAL_METHOD__ 0 +#define __cpp_binary_literals 201304L +#define __FLT64_DECIMAL_DIG__ 17 +#define __cpp_noexcept_function_type 201510L +#define __GCC_ATOMIC_CHAR32_T_LOCK_FREE 2 +#define __cpp_variadic_templates 200704L +#define __UINT_FAST64_MAX__ 0xffffffffffffffffUL +#define __SIG_ATOMIC_TYPE__ int +#define __DBL_MIN_10_EXP__ (-307) +#define __FINITE_MATH_ONLY__ 0 +#define __cpp_variable_templates 201304L +#define __FLT32X_MAX_EXP__ 1024 +#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_1 1 +#define __FLT32_HAS_DENORM__ 1 +#define __UINT_FAST8_MAX__ 0xff +#define __cpp_rvalue_reference 200610L +#define __cpp_nested_namespace_definitions 201411L +#define __DEC64_MAX_EXP__ 385 +#define __INT8_C(c) c +#define __LDBL_HAS_INFINITY__ 1 +#define __INT_LEAST8_WIDTH__ 8 +#define __cpp_variadic_using 201611L +#define __UINT_LEAST64_MAX__ 0xffffffffffffffffUL +#define __INT_LEAST8_MAX__ 0x7f +#define __cpp_attributes 200809L +#define __cpp_capture_star_this 201603L +#define __SHRT_MAX__ 0x7fff +#define __LDBL_MAX__ 1.18973149535723176502126385303097021e+4932L +#define __cpp_impl_coroutine 201902L +#define __FLT64X_MAX_10_EXP__ 4932 +#define __cpp_if_constexpr 201606L +#define __BFLT16_MAX_10_EXP__ 38 +#define __BFLT16_MAX_EXP__ 128 +#define __LDBL_IS_IEC_60559__ 1 +#define QT_NO_DEBUG 1 +#define __FLT64X_HAS_QUIET_NAN__ 1 +#define QT_TESTLIB_LIB 1 +#define TLRENDER_SDL2 1 +#define __UINT_LEAST8_MAX__ 0xff +#define __GCC_ATOMIC_BOOL_LOCK_FREE 2 +#define __FLT128_DENORM_MIN__ 6.47517511943802511092443895822764655e-4966F128 +#define __UINTMAX_TYPE__ long unsigned int +#define __cpp_nsdmi 200809L +#define __BFLT16_DECIMAL_DIG__ 4 +#define __linux 1 +#define __DEC32_EPSILON__ 1E-6DF +#define __FLT_EVAL_METHOD_TS_18661_3__ 0 +#define __UINT32_MAX__ 0xffffffffU +#define __GXX_EXPERIMENTAL_CXX0X__ 1 +#define __DBL_DENORM_MIN__ double(4.94065645841246544176568792868221372e-324L) +#define __FLT128_MIN_EXP__ (-16381) +#define __DEC64X_MAX_EXP__ 6145 +#define __WINT_MIN__ 0U +#define __FLT128_MIN_10_EXP__ (-4931) +#define __FLT32X_IS_IEC_60559__ 1 +#define __INT_LEAST16_WIDTH__ 16 +#define __SCHAR_MAX__ 0x7f +#define __FLT128_MANT_DIG__ 113 +#define __WCHAR_MIN__ (-__WCHAR_MAX__ - 1) +#define __INT64_C(c) c ## L +#define __cpp_impl_destroying_delete 201806L +#define __GCC_ATOMIC_POINTER_LOCK_FREE 2 +#define TLRENDER_JPEG 1 +#define __ATOMIC_SEQ_CST 5 +#define __unix 1 +#define __INT_LEAST64_MAX__ 0x7fffffffffffffffL +#define __FLT32X_MANT_DIG__ 53 +#define __GCC_ATOMIC_CHAR16_T_LOCK_FREE 2 +#define __cpp_aligned_new 201606L +#define __FLT32_MAX_10_EXP__ 38 +#define __FLT64X_EPSILON__ 1.08420217248550443400745280086994171e-19F64x +#define __STDC_HOSTED__ 1 +#define __DEC64_MIN_EXP__ (-382) +#define TLRENDER_PNG 1 +#define __cpp_decltype_auto 201304L +#define __DBL_DIG__ 15 +#define __STDC_EMBED_EMPTY__ 2 +#define __FLT_EPSILON__ 1.19209289550781250000000000000000000e-7F +#define __cpp_char8_t 202207L +#define __GXX_WEAK__ 1 +#define __SHRT_WIDTH__ 16 +#define __FLT32_IS_IEC_60559__ 1 +#define __LDBL_MIN__ 3.36210314311209350626267781732175260e-4932L +#define __DBL_IS_IEC_60559__ 1 +#define __DEC32_MAX__ 9.999999E96DF +#define __CHAR8_TYPE__ unsigned char +#define __cpp_threadsafe_static_init 200806L +#define __cpp_enumerator_attributes 201411L +#define TLRENDER_EXR 1 +#define __FLT64X_DENORM_MIN__ 3.64519953188247460252840593361941982e-4951F64x +#define __FLT32X_HAS_INFINITY__ 1 +#define __unix__ 1 +#define __INT_WIDTH__ 32 +#define __STDC_IEC_559__ 1 +#define __STDC_ISO_10646__ 201706L +#define __GCC_ATOMIC_CHAR8_T_LOCK_FREE 2 +#define __DECIMAL_DIG__ 21 +#define __STDC_IEC_559_COMPLEX__ 1 +#define __FLT64_EPSILON__ 2.22044604925031308084726333618164062e-16F64 +#define __gnu_linux__ 1 +#define __INT16_MAX__ 0x7fff +#define __FLT64_MIN_EXP__ (-1021) +#define __cpp_using_enum 201907L +#define __DEC64X_EPSILON__ 1E-33D64x +#define __FLT64X_MIN_10_EXP__ (-4931) +#define __LDBL_HAS_QUIET_NAN__ 1 +#define __FLT16_MIN_EXP__ (-13) +#define __FLT64_MANT_DIG__ 53 +#define __cpp_consteval 202211L +#define __FLT64X_MANT_DIG__ 64 +#define FTK_API_GL_4_1 1 +#define __BFLT16_DIG__ 2 +#define __GNUC__ 15 +#define __GXX_RTTI 1 +#define TLRENDER_FFMPEG_PLUGIN 1 +#define __MMX__ 1 +#define __FLT_HAS_DENORM__ 1 +#define __SIZEOF_LONG_DOUBLE__ 16 +#define __BIGGEST_ALIGNMENT__ 16 +#define __STDC_UTF_16__ 1 +#define __FLT64_MAX_10_EXP__ 308 +#define __BFLT16_IS_IEC_60559__ 0 +#define __FLT16_MAX_10_EXP__ 4 +#define __cpp_delegating_constructors 200604L +#define __DBL_MAX__ double(1.79769313486231570814527423731704357e+308L) +#define __cpp_raw_strings 200710L +#define __INT_FAST32_MAX__ 0x7fffffffffffffffL +#define __DBL_HAS_INFINITY__ 1 +#define __INT64_MAX__ 0x7fffffffffffffffL +#define __SIZEOF_FLOAT__ 4 +#define __HAVE_SPECULATION_SAFE_VALUE 1 +#define __cpp_fold_expressions 201603L +#define __DEC32_MIN_EXP__ (-94) +#define __INTPTR_WIDTH__ 64 +#define __UINT_LEAST32_MAX__ 0xffffffffU +#define __FLT32X_HAS_DENORM__ 1 +#define __INT_FAST16_TYPE__ long int +#define __MMX_WITH_SSE__ 1 +#define __LDBL_HAS_DENORM__ 1 +#define QT_WIDGETS_LIB 1 +#define __SEG_GS 1 +#define __BFLT16_EPSILON__ 7.81250000000000000000000000000000000e-3BF16 +#define __cplusplus 202002L +#define __cpp_ref_qualifiers 200710L +#define __DEC32_MIN__ 1E-95DF +#define __DEPRECATED 1 +#define __cpp_rvalue_references 200610L +#define __DBL_MAX_EXP__ 1024 +#define __WCHAR_WIDTH__ 32 +#define __FLT32_MAX__ 3.40282346638528859811704183484516925e+38F32 +#define __DEC128_EPSILON__ 1E-33DL +#define __FLT16_DECIMAL_DIG__ 5 +#define __SSE2_MATH__ 1 +#define __ATOMIC_HLE_RELEASE 131072 +#define __PTRDIFF_MAX__ 0x7fffffffffffffffL +#define __amd64 1 +#define __DEC64X_MAX__ 9.999999999999999999999999999999999E6144D64x +#define __ATOMIC_HLE_ACQUIRE 65536 +#define __GNUG__ 15 +#define __LONG_LONG_MAX__ 0x7fffffffffffffffLL +#define __SIZEOF_SIZE_T__ 8 +#define __BFLT16_HAS_INFINITY__ 1 +#define __FLT64X_MIN_EXP__ (-16381) +#define __SIZEOF_WINT_T__ 4 +#define __FLT32X_DIG__ 15 +#define __LONG_LONG_WIDTH__ 64 +#define QT_TESTCASE_SOURCEDIR "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests" +#define __cpp_initializer_lists 200806L +#define __FLT32_MAX_EXP__ 128 +#define ABI_ID "ELF" +#define __cpp_hex_float 201603L +#define __GXX_ABI_VERSION 1020 +#define __FLT_MIN_EXP__ (-125) +#define __GCC_HAVE_DWARF2_CFI_ASM 1 +#define TLRENDER_OCIO 1 +#define __x86_64 1 +#define __cpp_lambdas 200907L +#define __INT_FAST64_TYPE__ long int +#define __BFLT16_MAX__ 3.38953138925153547590470800371487867e+38BF16 +#define __FLT64_DENORM_MIN__ 4.94065645841246544176568792868221372e-324F64 +#define __cpp_template_auto 201606L +#define __FLT16_DENORM_MIN__ 5.96046447753906250000000000000000000e-8F16 +#define __FLT128_EPSILON__ 1.92592994438723585305597794258492732e-34F128 +#define __FLT64X_NORM_MAX__ 1.18973149535723176502126385303097021e+4932F64x +#define __SIZEOF_POINTER__ 8 +#define __SIZE_TYPE__ long unsigned int +#define __LP64__ 1 +#define __DBL_HAS_QUIET_NAN__ 1 +#define __FLT32X_EPSILON__ 2.22044604925031308084726333618164062e-16F32x +#define __LDBL_MAX_EXP__ 16384 +#define __DECIMAL_BID_FORMAT__ 1 +#define __FLT64_MIN_10_EXP__ (-307) +#define __FLT16_MIN_10_EXP__ (-4) +#define __FLT64X_DECIMAL_DIG__ 21 +#define __DEC128_MIN__ 1E-6143DL +#define __REGISTER_PREFIX__ +#define __UINT16_MAX__ 0xffff +#define __FLT128_HAS_INFINITY__ 1 +#define __FLT32_MIN__ 1.17549435082228750796873653722224568e-38F32 +#define __UINT8_TYPE__ unsigned char +#define __FLT_DIG__ 6 +#define __NO_INLINE__ 1 +#define __DEC_EVAL_METHOD__ 2 +#define __FLT_MANT_DIG__ 24 +#define __LDBL_DECIMAL_DIG__ 21 +#define __VERSION__ "15.2.1 20260123 (Red Hat 15.2.1-7)" +#define __UINT64_C(c) c ## UL +#define __cpp_unicode_characters 201411L +#define __DEC64X_MIN__ 1E-6143D64x +#define _STDC_PREDEF_H 1 +#define __INT_LEAST32_MAX__ 0x7fffffff +#define __GCC_ATOMIC_INT_LOCK_FREE 2 +#define __FLT128_MAX_EXP__ 16384 +#define __cpp_conditional_explicit 201806L +#define __FLT32_MANT_DIG__ 24 +#define __cpp_decltype 200707L +#define __FLOAT_WORD_ORDER__ __ORDER_LITTLE_ENDIAN__ +#define SIZEOF_DPTR (sizeof(void*)) +#define __FLT32X_MIN_EXP__ (-1021) +#define __cpp_aggregate_paren_init 201902L +#define __STDC_IEC_60559_COMPLEX__ 201404L +#define __cpp_aggregate_bases 201603L +#define __BFLT16_MIN__ 1.17549435082228750796873653722224568e-38BF16 +#define __FLT128_HAS_DENORM__ 1 +#define __FLT32_DECIMAL_DIG__ 9 +#define __FLT128_DIG__ 33 +#define __INT32_C(c) c +#define __DEC64_EPSILON__ 1E-15DD +#define __ORDER_PDP_ENDIAN__ 3412 +#define __DEC128_MIN_EXP__ (-6142) +#define __DEC128_MAX__ 9.999999999999999999999999999999999E6144DL +#define __cpp_constinit 201907L +#define __INT_FAST32_TYPE__ long int +#define __UINT_LEAST16_TYPE__ short unsigned int +#define __DEC64X_MANT_DIG__ 34 +#define __DEC128_MAX_EXP__ 6145 +#define unix 1 +#define __DBL_HAS_DENORM__ 1 +#define __cpp_rtti 199711L +#define __UINT64_MAX__ 0xffffffffffffffffUL +#define __FLT_IS_IEC_60559__ 1 +#define __GNUC_WIDE_EXECUTION_CHARSET_NAME "UTF-32LE" +#define __FLT64X_DIG__ 18 +#define __INT8_TYPE__ signed char +#define __cpp_digit_separators 201309L +#define __ELF__ 1 +#define __GCC_ASM_FLAG_OUTPUTS__ 1 +#define __UINT32_TYPE__ unsigned int +#define __BFLT16_HAS_QUIET_NAN__ 1 +#define __FLT_RADIX__ 2 +#define __INT_LEAST16_TYPE__ short int +#define __LDBL_EPSILON__ 1.08420217248550443400745280086994171e-19L +#define __UINTMAX_C(c) c ## UL +#define __GNUC_RH_RELEASE__ 7 +#define __FLT16_DIG__ 3 +#define __k8 1 +#define __FLT32X_MIN__ 2.22507385850720138309023271733240406e-308F32x +#define __SIG_ATOMIC_MAX__ 0x7fffffff +#define __cpp_constexpr 202002L +#define __GCC_ATOMIC_WCHAR_T_LOCK_FREE 2 +#define __USER_LABEL_PREFIX__ +#define __STDC_IEC_60559_BFP__ 201404L +#define __SIZEOF_PTRDIFF_T__ 8 +#define __FLT64X_HAS_INFINITY__ 1 +#define __SIZEOF_LONG__ 8 +#define __LDBL_DIG__ 18 +#define __FLT64_IS_IEC_60559__ 1 +#define __x86_64__ 1 +#define __FLT16_IS_IEC_60559__ 1 +#define __FLT16_MAX_EXP__ 16 +#define __DEC32_SUBNORMAL_MIN__ 0.000001E-95DF +#define __STDC_EMBED_FOUND__ 1 +#define __INT_FAST16_MAX__ 0x7fffffffffffffffL +#define __GCC_CONSTRUCTIVE_SIZE 64 +#define __FLT64_DIG__ 15 +#define __UINT_FAST32_MAX__ 0xffffffffffffffffUL +#define __UINT_LEAST64_TYPE__ long unsigned int +#define __FLT16_EPSILON__ 9.76562500000000000000000000000000000e-4F16 +#define __FLT_HAS_QUIET_NAN__ 1 +#define __FLT_MAX_10_EXP__ 38 +#define __FLT64X_HAS_DENORM__ 1 +#define __DEC128_SUBNORMAL_MIN__ 0.000000000000000000000000000000001E-6143DL +#define __FLT_HAS_INFINITY__ 1 +#define __GNUC_EXECUTION_CHARSET_NAME "UTF-8" +#define __cpp_unicode_literals 200710L +#define __UINT_FAST16_TYPE__ long unsigned int +#define __DEC64_MAX__ 9.999999999999999E384DD +#define __STDC_EMBED_NOT_FOUND__ 0 +#define __INT_FAST32_WIDTH__ 64 +#define __CHAR16_TYPE__ short unsigned int +#define __PRAGMA_REDEFINE_EXTNAME 1 +#define __DEC64X_SUBNORMAL_MIN__ 0.000000000000000000000000000000001E-6143D64x +#define __SIZE_WIDTH__ 64 +#define __SEG_FS 1 +#define __INT_LEAST16_MAX__ 0x7fff +#define __FLT16_NORM_MAX__ 6.55040000000000000000000000000000000e+4F16 +#define __DEC64_MANT_DIG__ 16 +#define __FLT32_DENORM_MIN__ 1.40129846432481707092372958328991613e-45F32 +#define __SIG_ATOMIC_WIDTH__ 32 +#define __GCC_DESTRUCTIVE_SIZE 64 +#define __INT_LEAST64_TYPE__ long int +#define __INT16_TYPE__ short int +#define __INT_LEAST8_TYPE__ signed char +#define __FLT16_MAX__ 6.55040000000000000000000000000000000e+4F16 +#define __FLT128_MIN__ 3.36210314311209350626267781732175260e-4932F128 +#define __cpp_structured_bindings 201606L +#define __SIZEOF_INT__ 4 +#define __DEC32_MAX_EXP__ 97 +#define __INT_FAST8_MAX__ 0x7f +#define __FLT128_MAX__ 1.18973149535723176508575932662800702e+4932F128 +#define __INTPTR_MAX__ 0x7fffffffffffffffL +#define __cpp_sized_deallocation 201309L +#define __cpp_guaranteed_copy_elision 201606L +#define linux 1 +#define __FLT64_HAS_QUIET_NAN__ 1 +#define __FLT32_MIN_10_EXP__ (-37) +#define __EXCEPTIONS 1 +#define __UINT16_C(c) c +#define __PTRDIFF_WIDTH__ 64 +#define __cpp_range_based_for 201603L +#define __INT_FAST16_WIDTH__ 64 +#define __FLT64_HAS_INFINITY__ 1 +#define __FLT64X_MAX__ 1.18973149535723176502126385303097021e+4932F64x +#define __FLT16_HAS_INFINITY__ 1 +#define __STDCPP_DEFAULT_NEW_ALIGNMENT__ 16 +#define __SIG_ATOMIC_MIN__ (-__SIG_ATOMIC_MAX__ - 1) +#define __code_model_small__ 1 +#define __GCC_ATOMIC_LONG_LOCK_FREE 2 +#define __cpp_nontype_template_args 201911L +#define __DEC32_MANT_DIG__ 7 +#define __k8__ 1 +#define __INTPTR_TYPE__ long int +#define __UINT16_TYPE__ short unsigned int +#define __WCHAR_TYPE__ int +#define __UINTPTR_MAX__ 0xffffffffffffffffUL +#define __INT_FAST64_WIDTH__ 64 +#define __cpp_nontype_template_parameter_class 201806L +#define __cpp_concepts 202002L +#define __INT_FAST64_MAX__ 0x7fffffffffffffffL +#define __GCC_ATOMIC_TEST_AND_SET_TRUEVAL 1 +#define __FLT_NORM_MAX__ 3.40282346638528859811704183484516925e+38F +#define __FLT32_HAS_INFINITY__ 1 +#define __FLT64X_MAX_EXP__ 16384 +#define __UINT_FAST64_TYPE__ long unsigned int +#define __cpp_constexpr_in_decltype 201711L +#define __cpp_inline_variables 201606L +#define __BFLT16_MIN_EXP__ (-125) +#define __INT_MAX__ 0x7fffffff +#define __linux__ 1 +#define __INT64_TYPE__ long int +#define __FLT_MAX_EXP__ 128 +#define __ORDER_BIG_ENDIAN__ 4321 +#define __DBL_MANT_DIG__ 53 +#define QT_CORE_LIB 1 +#define __SIZEOF_FLOAT128__ 16 +#define __BFLT16_MANT_DIG__ 8 +#define __DEC64_MIN__ 1E-383DD +#define __WINT_TYPE__ unsigned int +#define __UINT_LEAST32_TYPE__ unsigned int +#define __SIZEOF_SHORT__ 2 +#define __FLT32_NORM_MAX__ 3.40282346638528859811704183484516925e+38F32 +#define __SSE__ 1 +#define __LDBL_MIN_EXP__ (-16381) +#define __FLT64_MAX__ 1.79769313486231570814527423731704357e+308F64 +#define __DEC64X_MIN_EXP__ (-6142) +#define __amd64__ 1 +#define __WINT_WIDTH__ 32 +#define __INT_LEAST64_WIDTH__ 64 +#define __FLT32X_MAX_10_EXP__ 308 +#define __cpp_namespace_attributes 201411L +#define __SIZEOF_INT128__ 16 +#define __FLT16_MIN__ 6.10351562500000000000000000000000000e-5F16 +#define __FLT64X_IS_IEC_60559__ 1 +#define __GXX_CONSTEXPR_ASM__ 1 +#define __LDBL_MAX_10_EXP__ 4932 +#define __ATOMIC_RELAXED 0 +#define __DBL_EPSILON__ double(2.22044604925031308084726333618164062e-16L) +#define __INT_LEAST32_TYPE__ int +#define _LP64 1 +#define __UINT8_C(c) c +#define __FLT64_MAX_EXP__ 1024 +#define __cpp_return_type_deduction 201304L +#define __SIZEOF_WCHAR_T__ 4 +#define __GNUC_PATCHLEVEL__ 1 +#define __FLT128_NORM_MAX__ 1.18973149535723176508575932662800702e+4932F128 +#define __FLT64_NORM_MAX__ 1.79769313486231570814527423731704357e+308F64 +#define __FLT128_HAS_QUIET_NAN__ 1 +#define __INTMAX_MAX__ 0x7fffffffffffffffL +#define TLRENDER_TIFF 1 +#define __INT_FAST8_TYPE__ signed char +#define __FLT64X_MIN__ 3.36210314311209350626267781732175260e-4932F64x +#define __STDCPP_THREADS__ 1 +#define __BFLT16_HAS_DENORM__ 1 +#define __GNUC_STDC_INLINE__ 1 +#define __FLT64_HAS_DENORM__ 1 +#define __FLT32_EPSILON__ 1.19209289550781250000000000000000000e-7F32 +#define __FLT16_HAS_DENORM__ 1 +#define __DBL_DECIMAL_DIG__ 17 +#define __STDC_UTF_32__ 1 +#define __INT_FAST8_WIDTH__ 8 +#define __FXSR__ 1 +#define __FLT32X_MAX__ 1.79769313486231570814527423731704357e+308F32x +#define __DBL_NORM_MAX__ double(1.79769313486231570814527423731704357e+308L) +#define __BYTE_ORDER__ __ORDER_LITTLE_ENDIAN__ +#define TLRENDER_FFMPEG 1 +#define __INTMAX_WIDTH__ 64 +#define __cpp_runtime_arrays 198712L +#define __FLT32_DIG__ 6 +#define __UINT64_TYPE__ long unsigned int +#define __UINT32_C(c) c ## U +#define __cpp_alias_templates 200704L +#define __cpp_constexpr_dynamic_alloc 201907L +#define __FLT_DENORM_MIN__ 1.40129846432481707092372958328991613e-45F +#define __FLT128_IS_IEC_60559__ 1 +#define __INT8_MAX__ 0x7f +#define __LONG_WIDTH__ 64 +#define __DBL_MIN__ double(2.22507385850720138309023271733240406e-308L) +#define __INT32_MAX__ 0x7fffffff +#define __UINT_FAST32_TYPE__ long unsigned int +#define __FLT16_MANT_DIG__ 11 +#define __FLT32X_NORM_MAX__ 1.79769313486231570814527423731704357e+308F32x +#define __CHAR32_TYPE__ unsigned int +#define __FLT_MAX__ 3.40282346638528859811704183484516925e+38F +#define __SSE2__ 1 +#define __cpp_deduction_guides 201907L +#define __BFLT16_NORM_MAX__ 3.38953138925153547590470800371487867e+38BF16 +#define __INT32_TYPE__ int +#define __SIZEOF_DOUBLE__ 8 +#define __cpp_exceptions 199711L +#define __FLT_MIN_10_EXP__ (-37) +#define __FLT64_MIN__ 2.22507385850720138309023271733240406e-308F64 +#define __INT_LEAST32_WIDTH__ 32 +#define __INTMAX_TYPE__ long int +#define __GLIBCXX_BITSIZE_INT_N_0 128 +#define __FLT32X_HAS_QUIET_NAN__ 1 +#define __ATOMIC_CONSUME 1 +#define __GNUC_MINOR__ 2 +#define __GLIBCXX_TYPE_INT_N_0 __int128 +#define __UINTMAX_MAX__ 0xffffffffffffffffUL +#define __FLT32X_DENORM_MIN__ 4.94065645841246544176568792868221372e-324F32x +#define __cpp_template_template_args 201611L +#define __DBL_MAX_10_EXP__ 308 +#define __LDBL_DENORM_MIN__ 3.64519953188247460252840593361941982e-4951L +#define __INT16_C(c) c +#define __STDC__ 1 +#define __PTRDIFF_TYPE__ long int +#define __LONG_MAX__ 0x7fffffffffffffffL +#define __FLT32X_MIN_10_EXP__ (-307) +#define __UINTPTR_TYPE__ long unsigned int +#define __DEC64_SUBNORMAL_MIN__ 0.000000000000001E-383DD +#define __DEC128_MANT_DIG__ 34 +#define __LDBL_MIN_10_EXP__ (-4931) +#define __cpp_generic_lambdas 201707L +#define __SSE_MATH__ 1 +#define __SIZEOF_LONG_LONG__ 8 +#define __cpp_user_defined_literals 200809L +#define __FLT128_DECIMAL_DIG__ 36 +#define __GCC_ATOMIC_LLONG_LOCK_FREE 2 +#define __FLT32_HAS_QUIET_NAN__ 1 +#define __FLT_DECIMAL_DIG__ 9 +#define __UINT_FAST16_MAX__ 0xffffffffffffffffUL +#define __LDBL_NORM_MAX__ 1.18973149535723176502126385303097021e+4932L +#define __GCC_ATOMIC_SHORT_LOCK_FREE 2 +#define __SIZE_MAX__ 0xffffffffffffffffUL +#define __UINT_FAST8_TYPE__ unsigned char +#define _GNU_SOURCE 1 +#define __cpp_init_captures 201803L +#define __ATOMIC_ACQ_REL 4 +#define __ATOMIC_RELEASE 3 diff --git a/build-linux/tests/test_grid_scrub_autogen/mocs_compilation.cpp b/build-linux/tests/test_grid_scrub_autogen/mocs_compilation.cpp new file mode 100644 index 00000000..bda67f76 --- /dev/null +++ b/build-linux/tests/test_grid_scrub_autogen/mocs_compilation.cpp @@ -0,0 +1,3 @@ +// This file is autogenerated. Changes will be overwritten. +// No files found that require moc or the moc files are included +enum some_compilers { need_more_than_nothing }; diff --git a/build-linux/tests/test_grid_scrub_autogen/timestamp b/build-linux/tests/test_grid_scrub_autogen/timestamp new file mode 100644 index 00000000..e69de29b diff --git a/build-linux/tests/test_icon_utils b/build-linux/tests/test_icon_utils new file mode 100755 index 00000000..0d14e50a Binary files /dev/null and b/build-linux/tests/test_icon_utils differ diff --git a/build-linux/tests/test_icon_utils_autogen/deps b/build-linux/tests/test_icon_utils_autogen/deps new file mode 100644 index 00000000..d1ff64ba --- /dev/null +++ b/build-linux/tests/test_icon_utils_autogen/deps @@ -0,0 +1,919 @@ +test_icon_utils_autogen/timestamp: \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_icon_utils_autogen/moc_predefs.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/icon_utils.cpp \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/icon_utils.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/CMakeLists.txt \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/test_icon_utils.cpp \ + /usr/include/alloca.h \ + /usr/include/asm-generic/bitsperlong.h \ + /usr/include/asm-generic/errno-base.h \ + /usr/include/asm-generic/errno.h \ + /usr/include/asm-generic/int-ll64.h \ + /usr/include/asm-generic/posix_types.h \ + /usr/include/asm-generic/types.h \ + /usr/include/asm/bitsperlong.h \ + /usr/include/asm/errno.h \ + /usr/include/asm/posix_types.h \ + /usr/include/asm/posix_types_64.h \ + /usr/include/asm/types.h \ + /usr/include/asm/unistd.h \ + /usr/include/asm/unistd_64.h \ + /usr/include/assert.h \ + /usr/include/bits/atomic_wide_counter.h \ + /usr/include/bits/byteswap.h \ + /usr/include/bits/confname.h \ + /usr/include/bits/cpu-set.h \ + /usr/include/bits/endian.h \ + /usr/include/bits/endianness.h \ + /usr/include/bits/environments.h \ + /usr/include/bits/errno.h \ + /usr/include/bits/floatn-common.h \ + /usr/include/bits/floatn.h \ + /usr/include/bits/getopt_core.h \ + /usr/include/bits/getopt_posix.h \ + /usr/include/bits/libc-header-start.h \ + /usr/include/bits/local_lim.h \ + /usr/include/bits/locale.h \ + /usr/include/bits/long-double.h \ + /usr/include/bits/posix1_lim.h \ + /usr/include/bits/posix2_lim.h \ + /usr/include/bits/posix_opt.h \ + /usr/include/bits/pthread_stack_min-dynamic.h \ + /usr/include/bits/pthreadtypes-arch.h \ + /usr/include/bits/pthreadtypes.h \ + /usr/include/bits/sched.h \ + /usr/include/bits/select.h \ + /usr/include/bits/semaphore.h \ + /usr/include/bits/setjmp.h \ + /usr/include/bits/stdint-intn.h \ + /usr/include/bits/stdint-least.h \ + /usr/include/bits/stdint-uintn.h \ + /usr/include/bits/stdio_lim.h \ + /usr/include/bits/stdlib-float.h \ + /usr/include/bits/struct_mutex.h \ + /usr/include/bits/struct_rwlock.h \ + /usr/include/bits/syscall.h \ + /usr/include/bits/thread-shared-types.h \ + /usr/include/bits/time.h \ + /usr/include/bits/time64.h \ + /usr/include/bits/timesize.h \ + /usr/include/bits/timex.h \ + /usr/include/bits/types.h \ + /usr/include/bits/types/FILE.h \ + /usr/include/bits/types/__FILE.h \ + /usr/include/bits/types/__fpos64_t.h \ + /usr/include/bits/types/__fpos_t.h \ + /usr/include/bits/types/__locale_t.h \ + /usr/include/bits/types/__mbstate_t.h \ + /usr/include/bits/types/__sigset_t.h \ + /usr/include/bits/types/clock_t.h \ + /usr/include/bits/types/clockid_t.h \ + /usr/include/bits/types/cookie_io_functions_t.h \ + /usr/include/bits/types/error_t.h \ + /usr/include/bits/types/locale_t.h \ + /usr/include/bits/types/mbstate_t.h \ + /usr/include/bits/types/sigset_t.h \ + /usr/include/bits/types/struct_FILE.h \ + /usr/include/bits/types/struct___jmp_buf_tag.h \ + /usr/include/bits/types/struct_itimerspec.h \ + /usr/include/bits/types/struct_sched_param.h \ + /usr/include/bits/types/struct_timespec.h \ + /usr/include/bits/types/struct_timeval.h \ + /usr/include/bits/types/struct_tm.h \ + /usr/include/bits/types/time_t.h \ + /usr/include/bits/types/timer_t.h \ + /usr/include/bits/types/wint_t.h \ + /usr/include/bits/typesizes.h \ + /usr/include/bits/uintn-identity.h \ + /usr/include/bits/uio_lim.h \ + /usr/include/bits/unistd_ext.h \ + /usr/include/bits/waitflags.h \ + /usr/include/bits/waitstatus.h \ + /usr/include/bits/wchar.h \ + /usr/include/bits/wctype-wchar.h \ + /usr/include/bits/wordsize.h \ + /usr/include/bits/xopen_lim.h \ + /usr/include/c++/15/algorithm \ + /usr/include/c++/15/array \ + /usr/include/c++/15/atomic \ + /usr/include/c++/15/backward/auto_ptr.h \ + /usr/include/c++/15/backward/binders.h \ + /usr/include/c++/15/bit \ + /usr/include/c++/15/bits/algorithmfwd.h \ + /usr/include/c++/15/bits/align.h \ + /usr/include/c++/15/bits/alloc_traits.h \ + /usr/include/c++/15/bits/allocated_ptr.h \ + /usr/include/c++/15/bits/allocator.h \ + /usr/include/c++/15/bits/atomic_base.h \ + /usr/include/c++/15/bits/atomic_futex.h \ + /usr/include/c++/15/bits/atomic_lockfree_defines.h \ + /usr/include/c++/15/bits/atomic_timed_wait.h \ + /usr/include/c++/15/bits/atomic_wait.h \ + /usr/include/c++/15/bits/basic_ios.h \ + /usr/include/c++/15/bits/basic_ios.tcc \ + /usr/include/c++/15/bits/basic_string.h \ + /usr/include/c++/15/bits/basic_string.tcc \ + /usr/include/c++/15/bits/char_traits.h \ + /usr/include/c++/15/bits/charconv.h \ + /usr/include/c++/15/bits/chrono.h \ + /usr/include/c++/15/bits/chrono_io.h \ + /usr/include/c++/15/bits/codecvt.h \ + /usr/include/c++/15/bits/concept_check.h \ + /usr/include/c++/15/bits/cpp_type_traits.h \ + /usr/include/c++/15/bits/cxxabi_forced.h \ + /usr/include/c++/15/bits/cxxabi_init_exception.h \ + /usr/include/c++/15/bits/enable_special_members.h \ + /usr/include/c++/15/bits/erase_if.h \ + /usr/include/c++/15/bits/exception.h \ + /usr/include/c++/15/bits/exception_defines.h \ + /usr/include/c++/15/bits/exception_ptr.h \ + /usr/include/c++/15/bits/functexcept.h \ + /usr/include/c++/15/bits/functional_hash.h \ + /usr/include/c++/15/bits/hash_bytes.h \ + /usr/include/c++/15/bits/hashtable.h \ + /usr/include/c++/15/bits/hashtable_policy.h \ + /usr/include/c++/15/bits/invoke.h \ + /usr/include/c++/15/bits/ios_base.h \ + /usr/include/c++/15/bits/istream.tcc \ + /usr/include/c++/15/bits/iterator_concepts.h \ + /usr/include/c++/15/bits/list.tcc \ + /usr/include/c++/15/bits/locale_classes.h \ + /usr/include/c++/15/bits/locale_classes.tcc \ + /usr/include/c++/15/bits/locale_conv.h \ + /usr/include/c++/15/bits/locale_facets.h \ + /usr/include/c++/15/bits/locale_facets.tcc \ + /usr/include/c++/15/bits/locale_facets_nonio.h \ + /usr/include/c++/15/bits/locale_facets_nonio.tcc \ + /usr/include/c++/15/bits/localefwd.h \ + /usr/include/c++/15/bits/max_size_type.h \ + /usr/include/c++/15/bits/memory_resource.h \ + /usr/include/c++/15/bits/memoryfwd.h \ + /usr/include/c++/15/bits/move.h \ + /usr/include/c++/15/bits/nested_exception.h \ + /usr/include/c++/15/bits/new_allocator.h \ + /usr/include/c++/15/bits/node_handle.h \ + /usr/include/c++/15/bits/ostream.h \ + /usr/include/c++/15/bits/ostream.tcc \ + /usr/include/c++/15/bits/ostream_insert.h \ + /usr/include/c++/15/bits/parse_numbers.h \ + /usr/include/c++/15/bits/postypes.h \ + /usr/include/c++/15/bits/predefined_ops.h \ + /usr/include/c++/15/bits/ptr_traits.h \ + /usr/include/c++/15/bits/quoted_string.h \ + /usr/include/c++/15/bits/random.h \ + /usr/include/c++/15/bits/random.tcc \ + /usr/include/c++/15/bits/range_access.h \ + /usr/include/c++/15/bits/ranges_algo.h \ + /usr/include/c++/15/bits/ranges_algobase.h \ + /usr/include/c++/15/bits/ranges_base.h \ + /usr/include/c++/15/bits/ranges_cmp.h \ + /usr/include/c++/15/bits/ranges_uninitialized.h \ + /usr/include/c++/15/bits/ranges_util.h \ + /usr/include/c++/15/bits/refwrap.h \ + /usr/include/c++/15/bits/requires_hosted.h \ + /usr/include/c++/15/bits/semaphore_base.h \ + /usr/include/c++/15/bits/shared_ptr.h \ + /usr/include/c++/15/bits/shared_ptr_atomic.h \ + /usr/include/c++/15/bits/shared_ptr_base.h \ + /usr/include/c++/15/bits/specfun.h \ + /usr/include/c++/15/bits/sstream.tcc \ + /usr/include/c++/15/bits/std_abs.h \ + /usr/include/c++/15/bits/std_function.h \ + /usr/include/c++/15/bits/std_mutex.h \ + /usr/include/c++/15/bits/std_thread.h \ + /usr/include/c++/15/bits/stl_algo.h \ + /usr/include/c++/15/bits/stl_algobase.h \ + /usr/include/c++/15/bits/stl_bvector.h \ + /usr/include/c++/15/bits/stl_construct.h \ + /usr/include/c++/15/bits/stl_function.h \ + /usr/include/c++/15/bits/stl_heap.h \ + /usr/include/c++/15/bits/stl_iterator.h \ + /usr/include/c++/15/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/15/bits/stl_iterator_base_types.h \ + /usr/include/c++/15/bits/stl_list.h \ + /usr/include/c++/15/bits/stl_map.h \ + /usr/include/c++/15/bits/stl_multimap.h \ + /usr/include/c++/15/bits/stl_multiset.h \ + /usr/include/c++/15/bits/stl_numeric.h \ + /usr/include/c++/15/bits/stl_pair.h \ + /usr/include/c++/15/bits/stl_raw_storage_iter.h \ + /usr/include/c++/15/bits/stl_relops.h \ + /usr/include/c++/15/bits/stl_set.h \ + /usr/include/c++/15/bits/stl_tempbuf.h \ + /usr/include/c++/15/bits/stl_tree.h \ + /usr/include/c++/15/bits/stl_uninitialized.h \ + /usr/include/c++/15/bits/stl_vector.h \ + /usr/include/c++/15/bits/stream_iterator.h \ + /usr/include/c++/15/bits/streambuf.tcc \ + /usr/include/c++/15/bits/streambuf_iterator.h \ + /usr/include/c++/15/bits/string_view.tcc \ + /usr/include/c++/15/bits/stringfwd.h \ + /usr/include/c++/15/bits/this_thread_sleep.h \ + /usr/include/c++/15/bits/uniform_int_dist.h \ + /usr/include/c++/15/bits/unique_lock.h \ + /usr/include/c++/15/bits/unique_ptr.h \ + /usr/include/c++/15/bits/unordered_map.h \ + /usr/include/c++/15/bits/unordered_set.h \ + /usr/include/c++/15/bits/uses_allocator.h \ + /usr/include/c++/15/bits/uses_allocator_args.h \ + /usr/include/c++/15/bits/utility.h \ + /usr/include/c++/15/bits/vector.tcc \ + /usr/include/c++/15/bits/version.h \ + /usr/include/c++/15/cassert \ + /usr/include/c++/15/cctype \ + /usr/include/c++/15/cerrno \ + /usr/include/c++/15/charconv \ + /usr/include/c++/15/chrono \ + /usr/include/c++/15/climits \ + /usr/include/c++/15/clocale \ + /usr/include/c++/15/cmath \ + /usr/include/c++/15/compare \ + /usr/include/c++/15/concepts \ + /usr/include/c++/15/condition_variable \ + /usr/include/c++/15/cstddef \ + /usr/include/c++/15/cstdint \ + /usr/include/c++/15/cstdio \ + /usr/include/c++/15/cstdlib \ + /usr/include/c++/15/cstring \ + /usr/include/c++/15/ctime \ + /usr/include/c++/15/cwchar \ + /usr/include/c++/15/cwctype \ + /usr/include/c++/15/debug/assertions.h \ + /usr/include/c++/15/debug/debug.h \ + /usr/include/c++/15/exception \ + /usr/include/c++/15/experimental/source_location \ + /usr/include/c++/15/ext/aligned_buffer.h \ + /usr/include/c++/15/ext/alloc_traits.h \ + /usr/include/c++/15/ext/atomicity.h \ + /usr/include/c++/15/ext/concurrence.h \ + /usr/include/c++/15/ext/numeric_traits.h \ + /usr/include/c++/15/ext/string_conversions.h \ + /usr/include/c++/15/ext/type_traits.h \ + /usr/include/c++/15/filesystem \ + /usr/include/c++/15/format \ + /usr/include/c++/15/functional \ + /usr/include/c++/15/future \ + /usr/include/c++/15/initializer_list \ + /usr/include/c++/15/iomanip \ + /usr/include/c++/15/ios \ + /usr/include/c++/15/iosfwd \ + /usr/include/c++/15/istream \ + /usr/include/c++/15/iterator \ + /usr/include/c++/15/limits \ + /usr/include/c++/15/list \ + /usr/include/c++/15/locale \ + /usr/include/c++/15/map \ + /usr/include/c++/15/memory \ + /usr/include/c++/15/memory_resource \ + /usr/include/c++/15/mutex \ + /usr/include/c++/15/new \ + /usr/include/c++/15/numeric \ + /usr/include/c++/15/optional \ + /usr/include/c++/15/ostream \ + /usr/include/c++/15/pstl/execution_defs.h \ + /usr/include/c++/15/pstl/glue_numeric_defs.h \ + /usr/include/c++/15/pstl/pstl_config.h \ + /usr/include/c++/15/random \ + /usr/include/c++/15/ratio \ + /usr/include/c++/15/semaphore \ + /usr/include/c++/15/set \ + /usr/include/c++/15/shared_mutex \ + /usr/include/c++/15/source_location \ + /usr/include/c++/15/sstream \ + /usr/include/c++/15/stdexcept \ + /usr/include/c++/15/stop_token \ + /usr/include/c++/15/streambuf \ + /usr/include/c++/15/string \ + /usr/include/c++/15/string_view \ + /usr/include/c++/15/system_error \ + /usr/include/c++/15/tr1/bessel_function.tcc \ + /usr/include/c++/15/tr1/beta_function.tcc \ + /usr/include/c++/15/tr1/ell_integral.tcc \ + /usr/include/c++/15/tr1/exp_integral.tcc \ + /usr/include/c++/15/tr1/gamma.tcc \ + /usr/include/c++/15/tr1/hypergeometric.tcc \ + /usr/include/c++/15/tr1/legendre_function.tcc \ + /usr/include/c++/15/tr1/modified_bessel_func.tcc \ + /usr/include/c++/15/tr1/poly_hermite.tcc \ + /usr/include/c++/15/tr1/poly_laguerre.tcc \ + /usr/include/c++/15/tr1/riemann_zeta.tcc \ + /usr/include/c++/15/tr1/special_function_util.h \ + /usr/include/c++/15/tuple \ + /usr/include/c++/15/type_traits \ + /usr/include/c++/15/typeinfo \ + /usr/include/c++/15/unordered_map \ + /usr/include/c++/15/unordered_set \ + /usr/include/c++/15/utility \ + /usr/include/c++/15/variant \ + /usr/include/c++/15/vector \ + /usr/include/c++/15/version \ + /usr/include/c++/15/x86_64-redhat-linux/bits/atomic_word.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/c++allocator.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/c++config.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/c++locale.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/cpu_defines.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/ctype_base.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/ctype_inline.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/error_constants.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/gthr-default.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/gthr.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/messages_members.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/opt_random.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/os_defines.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/time_members.h \ + /usr/include/ctype.h \ + /usr/include/endian.h \ + /usr/include/errno.h \ + /usr/include/features-time64.h \ + /usr/include/features.h \ + /usr/include/gnu/stubs-64.h \ + /usr/include/gnu/stubs.h \ + /usr/include/libintl.h \ + /usr/include/limits.h \ + /usr/include/linux/close_range.h \ + /usr/include/linux/errno.h \ + /usr/include/linux/limits.h \ + /usr/include/linux/posix_types.h \ + /usr/include/linux/sched/types.h \ + /usr/include/linux/stddef.h \ + /usr/include/linux/types.h \ + /usr/include/locale.h \ + /usr/include/pthread.h \ + /usr/include/qt6/QtCore/QAbstractItemModel \ + /usr/include/qt6/QtCore/QDeadlineTimer \ + /usr/include/qt6/QtCore/QEvent \ + /usr/include/qt6/QtCore/QHash \ + /usr/include/qt6/QtCore/QList \ + /usr/include/qt6/QtCore/QMap \ + /usr/include/qt6/QtCore/QMargins \ + /usr/include/qt6/QtCore/QMetaEnum \ + /usr/include/qt6/QtCore/QMutex \ + /usr/include/qt6/QtCore/QObject \ + /usr/include/qt6/QtCore/QRect \ + /usr/include/qt6/QtCore/QSize \ + /usr/include/qt6/QtCore/QSizeF \ + /usr/include/qt6/QtCore/QString \ + /usr/include/qt6/QtCore/QStringList \ + /usr/include/qt6/QtCore/QVariant \ + /usr/include/qt6/QtCore/QtCore \ + /usr/include/qt6/QtCore/QtCoreDepends \ + /usr/include/qt6/QtCore/q17memory.h \ + /usr/include/qt6/QtCore/q20algorithm.h \ + /usr/include/qt6/QtCore/q20chrono.h \ + /usr/include/qt6/QtCore/q20functional.h \ + /usr/include/qt6/QtCore/q20iterator.h \ + /usr/include/qt6/QtCore/q20map.h \ + /usr/include/qt6/QtCore/q20memory.h \ + /usr/include/qt6/QtCore/q20type_traits.h \ + /usr/include/qt6/QtCore/q20utility.h \ + /usr/include/qt6/QtCore/q20vector.h \ + /usr/include/qt6/QtCore/q23functional.h \ + /usr/include/qt6/QtCore/q23type_traits.h \ + /usr/include/qt6/QtCore/q23utility.h \ + /usr/include/qt6/QtCore/q26numeric.h \ + /usr/include/qt6/QtCore/qabstractanimation.h \ + /usr/include/qt6/QtCore/qabstracteventdispatcher.h \ + /usr/include/qt6/QtCore/qabstractitemmodel.h \ + /usr/include/qt6/QtCore/qabstractnativeeventfilter.h \ + /usr/include/qt6/QtCore/qabstractproxymodel.h \ + /usr/include/qt6/QtCore/qalgorithms.h \ + /usr/include/qt6/QtCore/qalloc.h \ + /usr/include/qt6/QtCore/qanimationgroup.h \ + /usr/include/qt6/QtCore/qanystringview.h \ + /usr/include/qt6/QtCore/qapplicationstatic.h \ + /usr/include/qt6/QtCore/qarraydata.h \ + /usr/include/qt6/QtCore/qarraydataops.h \ + /usr/include/qt6/QtCore/qarraydatapointer.h \ + /usr/include/qt6/QtCore/qassert.h \ + /usr/include/qt6/QtCore/qassociativeiterable.h \ + /usr/include/qt6/QtCore/qatomic.h \ + /usr/include/qt6/QtCore/qatomic_cxx11.h \ + /usr/include/qt6/QtCore/qatomicscopedvaluerollback.h \ + /usr/include/qt6/QtCore/qbasicatomic.h \ + /usr/include/qt6/QtCore/qbasictimer.h \ + /usr/include/qt6/QtCore/qbindingstorage.h \ + /usr/include/qt6/QtCore/qbitarray.h \ + /usr/include/qt6/QtCore/qbuffer.h \ + /usr/include/qt6/QtCore/qbytearray.h \ + /usr/include/qt6/QtCore/qbytearrayalgorithms.h \ + /usr/include/qt6/QtCore/qbytearraylist.h \ + /usr/include/qt6/QtCore/qbytearraymatcher.h \ + /usr/include/qt6/QtCore/qbytearrayview.h \ + /usr/include/qt6/QtCore/qcache.h \ + /usr/include/qt6/QtCore/qcalendar.h \ + /usr/include/qt6/QtCore/qcborarray.h \ + /usr/include/qt6/QtCore/qcborcommon.h \ + /usr/include/qt6/QtCore/qcbormap.h \ + /usr/include/qt6/QtCore/qcborstream.h \ + /usr/include/qt6/QtCore/qcborstreamreader.h \ + /usr/include/qt6/QtCore/qcborstreamwriter.h \ + /usr/include/qt6/QtCore/qcborvalue.h \ + /usr/include/qt6/QtCore/qchar.h \ + /usr/include/qt6/QtCore/qcheckedint_impl.h \ + /usr/include/qt6/QtCore/qchronotimer.h \ + /usr/include/qt6/QtCore/qcollator.h \ + /usr/include/qt6/QtCore/qcommandlineoption.h \ + /usr/include/qt6/QtCore/qcommandlineparser.h \ + /usr/include/qt6/QtCore/qcompare.h \ + /usr/include/qt6/QtCore/qcompare_impl.h \ + /usr/include/qt6/QtCore/qcomparehelpers.h \ + /usr/include/qt6/QtCore/qcompilerdetection.h \ + /usr/include/qt6/QtCore/qconcatenatetablesproxymodel.h \ + /usr/include/qt6/QtCore/qconfig-64.h \ + /usr/include/qt6/QtCore/qconfig.h \ + /usr/include/qt6/QtCore/qconstructormacros.h \ + /usr/include/qt6/QtCore/qcontainerfwd.h \ + /usr/include/qt6/QtCore/qcontainerinfo.h \ + /usr/include/qt6/QtCore/qcontainertools_impl.h \ + /usr/include/qt6/QtCore/qcontiguouscache.h \ + /usr/include/qt6/QtCore/qcoreapplication.h \ + /usr/include/qt6/QtCore/qcoreapplication_platform.h \ + /usr/include/qt6/QtCore/qcoreevent.h \ + /usr/include/qt6/QtCore/qcryptographichash.h \ + /usr/include/qt6/QtCore/qdarwinhelpers.h \ + /usr/include/qt6/QtCore/qdatastream.h \ + /usr/include/qt6/QtCore/qdatetime.h \ + /usr/include/qt6/QtCore/qdeadlinetimer.h \ + /usr/include/qt6/QtCore/qdebug.h \ + /usr/include/qt6/QtCore/qdir.h \ + /usr/include/qt6/QtCore/qdiriterator.h \ + /usr/include/qt6/QtCore/qdirlisting.h \ + /usr/include/qt6/QtCore/qeasingcurve.h \ + /usr/include/qt6/QtCore/qelapsedtimer.h \ + /usr/include/qt6/QtCore/qendian.h \ + /usr/include/qt6/QtCore/qeventloop.h \ + /usr/include/qt6/QtCore/qexception.h \ + /usr/include/qt6/QtCore/qexceptionhandling.h \ + /usr/include/qt6/QtCore/qfactoryinterface.h \ + /usr/include/qt6/QtCore/qfile.h \ + /usr/include/qt6/QtCore/qfiledevice.h \ + /usr/include/qt6/QtCore/qfileinfo.h \ + /usr/include/qt6/QtCore/qfileselector.h \ + /usr/include/qt6/QtCore/qfilesystemwatcher.h \ + /usr/include/qt6/QtCore/qflags.h \ + /usr/include/qt6/QtCore/qfloat16.h \ + /usr/include/qt6/QtCore/qforeach.h \ + /usr/include/qt6/QtCore/qfunctionaltools_impl.h \ + /usr/include/qt6/QtCore/qfunctionpointer.h \ + /usr/include/qt6/QtCore/qfuture.h \ + /usr/include/qt6/QtCore/qfuture_impl.h \ + /usr/include/qt6/QtCore/qfutureinterface.h \ + /usr/include/qt6/QtCore/qfuturesynchronizer.h \ + /usr/include/qt6/QtCore/qfuturewatcher.h \ + /usr/include/qt6/QtCore/qgenericatomic.h \ + /usr/include/qt6/QtCore/qglobal.h \ + /usr/include/qt6/QtCore/qglobalstatic.h \ + /usr/include/qt6/QtCore/qhash.h \ + /usr/include/qt6/QtCore/qhashfunctions.h \ + /usr/include/qt6/QtCore/qidentityproxymodel.h \ + /usr/include/qt6/QtCore/qiodevice.h \ + /usr/include/qt6/QtCore/qiodevicebase.h \ + /usr/include/qt6/QtCore/qitemselectionmodel.h \ + /usr/include/qt6/QtCore/qiterable.h \ + /usr/include/qt6/QtCore/qiterator.h \ + /usr/include/qt6/QtCore/qjsonarray.h \ + /usr/include/qt6/QtCore/qjsondocument.h \ + /usr/include/qt6/QtCore/qjsonobject.h \ + /usr/include/qt6/QtCore/qjsonparseerror.h \ + /usr/include/qt6/QtCore/qjsonvalue.h \ + /usr/include/qt6/QtCore/qlatin1stringmatcher.h \ + /usr/include/qt6/QtCore/qlatin1stringview.h \ + /usr/include/qt6/QtCore/qlibrary.h \ + /usr/include/qt6/QtCore/qlibraryinfo.h \ + /usr/include/qt6/QtCore/qline.h \ + /usr/include/qt6/QtCore/qlist.h \ + /usr/include/qt6/QtCore/qlocale.h \ + /usr/include/qt6/QtCore/qlockfile.h \ + /usr/include/qt6/QtCore/qlogging.h \ + /usr/include/qt6/QtCore/qloggingcategory.h \ + /usr/include/qt6/QtCore/qmalloc.h \ + /usr/include/qt6/QtCore/qmap.h \ + /usr/include/qt6/QtCore/qmargins.h \ + /usr/include/qt6/QtCore/qmath.h \ + /usr/include/qt6/QtCore/qmessageauthenticationcode.h \ + /usr/include/qt6/QtCore/qmetacontainer.h \ + /usr/include/qt6/QtCore/qmetaobject.h \ + /usr/include/qt6/QtCore/qmetatype.h \ + /usr/include/qt6/QtCore/qmimedata.h \ + /usr/include/qt6/QtCore/qmimedatabase.h \ + /usr/include/qt6/QtCore/qmimetype.h \ + /usr/include/qt6/QtCore/qminmax.h \ + /usr/include/qt6/QtCore/qmutex.h \ + /usr/include/qt6/QtCore/qnamespace.h \ + /usr/include/qt6/QtCore/qnativeinterface.h \ + /usr/include/qt6/QtCore/qnumeric.h \ + /usr/include/qt6/QtCore/qobject.h \ + /usr/include/qt6/QtCore/qobject_impl.h \ + /usr/include/qt6/QtCore/qobjectcleanuphandler.h \ + /usr/include/qt6/QtCore/qobjectdefs.h \ + /usr/include/qt6/QtCore/qobjectdefs_impl.h \ + /usr/include/qt6/QtCore/qoperatingsystemversion.h \ + /usr/include/qt6/QtCore/qoverload.h \ + /usr/include/qt6/QtCore/qpair.h \ + /usr/include/qt6/QtCore/qparallelanimationgroup.h \ + /usr/include/qt6/QtCore/qpauseanimation.h \ + /usr/include/qt6/QtCore/qpermissions.h \ + /usr/include/qt6/QtCore/qplugin.h \ + /usr/include/qt6/QtCore/qpluginloader.h \ + /usr/include/qt6/QtCore/qpoint.h \ + /usr/include/qt6/QtCore/qpointer.h \ + /usr/include/qt6/QtCore/qprocess.h \ + /usr/include/qt6/QtCore/qprocessordetection.h \ + /usr/include/qt6/QtCore/qpromise.h \ + /usr/include/qt6/QtCore/qproperty.h \ + /usr/include/qt6/QtCore/qpropertyanimation.h \ + /usr/include/qt6/QtCore/qpropertyprivate.h \ + /usr/include/qt6/QtCore/qqueue.h \ + /usr/include/qt6/QtCore/qrandom.h \ + /usr/include/qt6/QtCore/qrangemodel.h \ + /usr/include/qt6/QtCore/qrangemodel_impl.h \ + /usr/include/qt6/QtCore/qreadwritelock.h \ + /usr/include/qt6/QtCore/qrect.h \ + /usr/include/qt6/QtCore/qrefcount.h \ + /usr/include/qt6/QtCore/qregularexpression.h \ + /usr/include/qt6/QtCore/qresource.h \ + /usr/include/qt6/QtCore/qresultstore.h \ + /usr/include/qt6/QtCore/qrunnable.h \ + /usr/include/qt6/QtCore/qsavefile.h \ + /usr/include/qt6/QtCore/qscopedpointer.h \ + /usr/include/qt6/QtCore/qscopedvaluerollback.h \ + /usr/include/qt6/QtCore/qscopeguard.h \ + /usr/include/qt6/QtCore/qsemaphore.h \ + /usr/include/qt6/QtCore/qsequentialanimationgroup.h \ + /usr/include/qt6/QtCore/qsequentialiterable.h \ + /usr/include/qt6/QtCore/qset.h \ + /usr/include/qt6/QtCore/qsettings.h \ + /usr/include/qt6/QtCore/qshareddata.h \ + /usr/include/qt6/QtCore/qshareddata_impl.h \ + /usr/include/qt6/QtCore/qsharedmemory.h \ + /usr/include/qt6/QtCore/qsharedpointer.h \ + /usr/include/qt6/QtCore/qsharedpointer_impl.h \ + /usr/include/qt6/QtCore/qsignalmapper.h \ + /usr/include/qt6/QtCore/qsimd.h \ + /usr/include/qt6/QtCore/qsize.h \ + /usr/include/qt6/QtCore/qsocketnotifier.h \ + /usr/include/qt6/QtCore/qsortfilterproxymodel.h \ + /usr/include/qt6/QtCore/qspan.h \ + /usr/include/qt6/QtCore/qstack.h \ + /usr/include/qt6/QtCore/qstandardpaths.h \ + /usr/include/qt6/QtCore/qstaticlatin1stringmatcher.h \ + /usr/include/qt6/QtCore/qstdlibdetection.h \ + /usr/include/qt6/QtCore/qstorageinfo.h \ + /usr/include/qt6/QtCore/qstring.h \ + /usr/include/qt6/QtCore/qstringalgorithms.h \ + /usr/include/qt6/QtCore/qstringbuilder.h \ + /usr/include/qt6/QtCore/qstringconverter.h \ + /usr/include/qt6/QtCore/qstringconverter_base.h \ + /usr/include/qt6/QtCore/qstringfwd.h \ + /usr/include/qt6/QtCore/qstringlist.h \ + /usr/include/qt6/QtCore/qstringlistmodel.h \ + /usr/include/qt6/QtCore/qstringliteral.h \ + /usr/include/qt6/QtCore/qstringmatcher.h \ + /usr/include/qt6/QtCore/qstringtokenizer.h \ + /usr/include/qt6/QtCore/qstringview.h \ + /usr/include/qt6/QtCore/qswap.h \ + /usr/include/qt6/QtCore/qsysinfo.h \ + /usr/include/qt6/QtCore/qsystemdetection.h \ + /usr/include/qt6/QtCore/qsystemsemaphore.h \ + /usr/include/qt6/QtCore/qtaggedpointer.h \ + /usr/include/qt6/QtCore/qtclasshelpermacros.h \ + /usr/include/qt6/QtCore/qtconfiginclude.h \ + /usr/include/qt6/QtCore/qtconfigmacros.h \ + /usr/include/qt6/QtCore/qtcore-config.h \ + /usr/include/qt6/QtCore/qtcoreexports.h \ + /usr/include/qt6/QtCore/qtcoreglobal.h \ + /usr/include/qt6/QtCore/qtcoreversion.h \ + /usr/include/qt6/QtCore/qtdeprecationdefinitions.h \ + /usr/include/qt6/QtCore/qtdeprecationmarkers.h \ + /usr/include/qt6/QtCore/qtemporarydir.h \ + /usr/include/qt6/QtCore/qtemporaryfile.h \ + /usr/include/qt6/QtCore/qtenvironmentvariables.h \ + /usr/include/qt6/QtCore/qtestsupport_core.h \ + /usr/include/qt6/QtCore/qtextboundaryfinder.h \ + /usr/include/qt6/QtCore/qtextstream.h \ + /usr/include/qt6/QtCore/qtformat_impl.h \ + /usr/include/qt6/QtCore/qthread.h \ + /usr/include/qt6/QtCore/qthreadpool.h \ + /usr/include/qt6/QtCore/qthreadstorage.h \ + /usr/include/qt6/QtCore/qtimeline.h \ + /usr/include/qt6/QtCore/qtimer.h \ + /usr/include/qt6/QtCore/qtimezone.h \ + /usr/include/qt6/QtCore/qtipccommon.h \ + /usr/include/qt6/QtCore/qtmetamacros.h \ + /usr/include/qt6/QtCore/qtmocconstants.h \ + /usr/include/qt6/QtCore/qtnoop.h \ + /usr/include/qt6/QtCore/qtpreprocessorsupport.h \ + /usr/include/qt6/QtCore/qtranslator.h \ + /usr/include/qt6/QtCore/qtransposeproxymodel.h \ + /usr/include/qt6/QtCore/qtresource.h \ + /usr/include/qt6/QtCore/qtsan_impl.h \ + /usr/include/qt6/QtCore/qtsymbolmacros.h \ + /usr/include/qt6/QtCore/qttranslation.h \ + /usr/include/qt6/QtCore/qttypetraits.h \ + /usr/include/qt6/QtCore/qtversion.h \ + /usr/include/qt6/QtCore/qtversionchecks.h \ + /usr/include/qt6/QtCore/qtypeinfo.h \ + /usr/include/qt6/QtCore/qtyperevision.h \ + /usr/include/qt6/QtCore/qtypes.h \ + /usr/include/qt6/QtCore/qurl.h \ + /usr/include/qt6/QtCore/qurlquery.h \ + /usr/include/qt6/QtCore/qutf8stringview.h \ + /usr/include/qt6/QtCore/quuid.h \ + /usr/include/qt6/QtCore/qvariant.h \ + /usr/include/qt6/QtCore/qvariantanimation.h \ + /usr/include/qt6/QtCore/qvarianthash.h \ + /usr/include/qt6/QtCore/qvariantlist.h \ + /usr/include/qt6/QtCore/qvariantmap.h \ + /usr/include/qt6/QtCore/qvarlengtharray.h \ + /usr/include/qt6/QtCore/qvector.h \ + /usr/include/qt6/QtCore/qversionnumber.h \ + /usr/include/qt6/QtCore/qversiontagging.h \ + /usr/include/qt6/QtCore/qwaitcondition.h \ + /usr/include/qt6/QtCore/qwineventnotifier.h \ + /usr/include/qt6/QtCore/qxmlstream.h \ + /usr/include/qt6/QtCore/qxpfunctional.h \ + /usr/include/qt6/QtCore/qxptype_traits.h \ + /usr/include/qt6/QtCore/qyieldcpu.h \ + /usr/include/qt6/QtGui/QBrush \ + /usr/include/qt6/QtGui/QColor \ + /usr/include/qt6/QtGui/QFont \ + /usr/include/qt6/QtGui/QIcon \ + /usr/include/qt6/QtGui/QImage \ + /usr/include/qt6/QtGui/QPainter \ + /usr/include/qt6/QtGui/QPixmap \ + /usr/include/qt6/QtGui/QTransform \ + /usr/include/qt6/QtGui/qabstractfileiconprovider.h \ + /usr/include/qt6/QtGui/qaction.h \ + /usr/include/qt6/QtGui/qbitmap.h \ + /usr/include/qt6/QtGui/qbrush.h \ + /usr/include/qt6/QtGui/qcolor.h \ + /usr/include/qt6/QtGui/qcursor.h \ + /usr/include/qt6/QtGui/qevent.h \ + /usr/include/qt6/QtGui/qeventpoint.h \ + /usr/include/qt6/QtGui/qfont.h \ + /usr/include/qt6/QtGui/qfontinfo.h \ + /usr/include/qt6/QtGui/qfontmetrics.h \ + /usr/include/qt6/QtGui/qfontvariableaxis.h \ + /usr/include/qt6/QtGui/qguiapplication.h \ + /usr/include/qt6/QtGui/qguiapplication_platform.h \ + /usr/include/qt6/QtGui/qicon.h \ + /usr/include/qt6/QtGui/qimage.h \ + /usr/include/qt6/QtGui/qinputdevice.h \ + /usr/include/qt6/QtGui/qinputmethod.h \ + /usr/include/qt6/QtGui/qkeysequence.h \ + /usr/include/qt6/QtGui/qpaintdevice.h \ + /usr/include/qt6/QtGui/qpainter.h \ + /usr/include/qt6/QtGui/qpalette.h \ + /usr/include/qt6/QtGui/qpen.h \ + /usr/include/qt6/QtGui/qpixelformat.h \ + /usr/include/qt6/QtGui/qpixmap.h \ + /usr/include/qt6/QtGui/qpointingdevice.h \ + /usr/include/qt6/QtGui/qpolygon.h \ + /usr/include/qt6/QtGui/qregion.h \ + /usr/include/qt6/QtGui/qrgb.h \ + /usr/include/qt6/QtGui/qrgba64.h \ + /usr/include/qt6/QtGui/qscreen.h \ + /usr/include/qt6/QtGui/qscreen_platform.h \ + /usr/include/qt6/QtGui/qsurface.h \ + /usr/include/qt6/QtGui/qsurfaceformat.h \ + /usr/include/qt6/QtGui/qtestsupport_gui.h \ + /usr/include/qt6/QtGui/qtextoption.h \ + /usr/include/qt6/QtGui/qtgui-config.h \ + /usr/include/qt6/QtGui/qtguiexports.h \ + /usr/include/qt6/QtGui/qtguiglobal.h \ + /usr/include/qt6/QtGui/qtransform.h \ + /usr/include/qt6/QtGui/qvector2d.h \ + /usr/include/qt6/QtGui/qvector3d.h \ + /usr/include/qt6/QtGui/qvector4d.h \ + /usr/include/qt6/QtGui/qvectornd.h \ + /usr/include/qt6/QtGui/qwindow.h \ + /usr/include/qt6/QtGui/qwindowdefs.h \ + /usr/include/qt6/QtTest/QtTest \ + /usr/include/qt6/QtTest/QtTestDepends \ + /usr/include/qt6/QtTest/qabstractitemmodeltester.h \ + /usr/include/qt6/QtTest/qbenchmark.h \ + /usr/include/qt6/QtTest/qbenchmarkmetric.h \ + /usr/include/qt6/QtTest/qsignalspy.h \ + /usr/include/qt6/QtTest/qtest.h \ + /usr/include/qt6/QtTest/qtest_gui.h \ + /usr/include/qt6/QtTest/qtest_widgets.h \ + /usr/include/qt6/QtTest/qtestassert.h \ + /usr/include/qt6/QtTest/qtestcase.h \ + /usr/include/qt6/QtTest/qtestdata.h \ + /usr/include/qt6/QtTest/qtestevent.h \ + /usr/include/qt6/QtTest/qtesteventloop.h \ + /usr/include/qt6/QtTest/qtestkeyboard.h \ + /usr/include/qt6/QtTest/qtestmouse.h \ + /usr/include/qt6/QtTest/qtestspontaneevent.h \ + /usr/include/qt6/QtTest/qtestsystem.h \ + /usr/include/qt6/QtTest/qtesttostring.h \ + /usr/include/qt6/QtTest/qtesttouch.h \ + /usr/include/qt6/QtTest/qtestwheel.h \ + /usr/include/qt6/QtTest/qttestexports.h \ + /usr/include/qt6/QtTest/qttestglobal.h \ + /usr/include/qt6/QtTest/qttestlib-config.h \ + /usr/include/qt6/QtTest/qttestversion.h \ + /usr/include/qt6/QtWidgets/QApplication \ + /usr/include/qt6/QtWidgets/QFileIconProvider \ + /usr/include/qt6/QtWidgets/QSizePolicy \ + /usr/include/qt6/QtWidgets/qapplication.h \ + /usr/include/qt6/QtWidgets/qfileiconprovider.h \ + /usr/include/qt6/QtWidgets/qsizepolicy.h \ + /usr/include/qt6/QtWidgets/qtestsupport_widgets.h \ + /usr/include/qt6/QtWidgets/qtwidgets-config.h \ + /usr/include/qt6/QtWidgets/qtwidgetsexports.h \ + /usr/include/qt6/QtWidgets/qtwidgetsglobal.h \ + /usr/include/qt6/QtWidgets/qwidget.h \ + /usr/include/sched.h \ + /usr/include/semaphore.h \ + /usr/include/stdc-predef.h \ + /usr/include/stdint.h \ + /usr/include/stdio.h \ + /usr/include/stdlib.h \ + /usr/include/string.h \ + /usr/include/strings.h \ + /usr/include/sys/cdefs.h \ + /usr/include/sys/select.h \ + /usr/include/sys/single_threaded.h \ + /usr/include/sys/syscall.h \ + /usr/include/sys/time.h \ + /usr/include/sys/types.h \ + /usr/include/syscall.h \ + /usr/include/time.h \ + /usr/include/unistd.h \ + /usr/include/wchar.h \ + /usr/include/wctype.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/adxintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/amxavx512intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/amxbf16intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/amxcomplexintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/amxfp16intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/amxfp8intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/amxint8intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/amxmovrsintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/amxtf32intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/amxtileintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/amxtransposeintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2-512bf16intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2-512convertintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2-512mediaintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2-512minmaxintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2-512satcvtintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2bf16intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2convertintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2copyintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2mediaintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2minmaxintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2satcvtintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx2intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512bf16intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512bf16vlintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512bitalgintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512bitalgvlintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512bwintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512cdintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512dqintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512fintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512fp16intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512fp16vlintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512ifmaintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512ifmavlintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vbmi2intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vbmi2vlintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vbmiintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vbmivlintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vlbwintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vldqintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vlintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vnniintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vnnivlintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vp2intersectintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vp2intersectvlintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vpopcntdqintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vpopcntdqvlintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avxifmaintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avxintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avxneconvertintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avxvnniint16intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avxvnniint8intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avxvnniintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/bmi2intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/bmiintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/cetintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/cldemoteintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/clflushoptintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/clwbintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/clzerointrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/cmpccxaddintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/emmintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/enqcmdintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/f16cintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/fmaintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/fxsrintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/gfniintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/hresetintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/ia32intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/immintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/keylockerintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/lwpintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/lzcntintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/mm_malloc.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/mmintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/movdirintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/movrsintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/mwaitintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/mwaitxintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/pconfigintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/pkuintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/pmmintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/popcntintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/prfchiintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/prfchwintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/raointintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/rdseedintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/rtmintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/serializeintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/sgxintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/sha512intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/shaintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/sm3intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/sm4intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/smmintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/stdarg.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/stdbool.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/stddef.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/tbmintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/tmmintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/tsxldtrkintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/uintrintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/usermsrintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/vaesintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/vpclmulqdqintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/waitpkgintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/wbnoinvdintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/wmmintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/x86gprintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/xmmintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/xsavecintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/xsaveintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/xsaveoptintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/xsavesintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/xtestintrin.h \ + /usr/lib64/cmake/Qt6/Qt6Config.cmake \ + /usr/lib64/cmake/Qt6/Qt6ConfigExtras.cmake \ + /usr/lib64/cmake/Qt6/Qt6ConfigVersion.cmake \ + /usr/lib64/cmake/Qt6/Qt6ConfigVersionImpl.cmake \ + /usr/lib64/cmake/Qt6/Qt6Dependencies.cmake \ + /usr/lib64/cmake/Qt6/Qt6Targets.cmake \ + /usr/lib64/cmake/Qt6/Qt6VersionlessAliasTargets.cmake \ + /usr/lib64/cmake/Qt6/QtFeature.cmake \ + /usr/lib64/cmake/Qt6/QtFeatureCommon.cmake \ + /usr/lib64/cmake/Qt6/QtInstallPaths.cmake \ + /usr/lib64/cmake/Qt6/QtPublicAndroidHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicAppleHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicCMakeEarlyPolicyHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicCMakeHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicCMakeVersionHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicDependencyHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicExternalProjectHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicFinalizerHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicFindPackageHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicGitHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicPluginHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicPluginHelpers_v2.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomAttributionHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomBuildToolHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomCommonGenerationHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomCpeHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomCycloneDXHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomDepHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomDocumentNamespaceHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomExternalReferenceHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomFileHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomGenerationCycloneDXHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomGenerationHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomLicenseHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomOpsHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomPurlHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomPythonHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomQtEntityHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomRelationshipHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomSystemDepHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicTargetHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicTestHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicToolHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicWalkLibsHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicWindowsHelpers.cmake \ + /usr/lib64/cmake/Qt6Test/Qt6TestAdditionalTargetInfo.cmake \ + /usr/lib64/cmake/Qt6Test/Qt6TestConfig.cmake \ + /usr/lib64/cmake/Qt6Test/Qt6TestConfigVersion.cmake \ + /usr/lib64/cmake/Qt6Test/Qt6TestConfigVersionImpl.cmake \ + /usr/lib64/cmake/Qt6Test/Qt6TestDependencies.cmake \ + /usr/lib64/cmake/Qt6Test/Qt6TestTargets-relwithdebinfo.cmake \ + /usr/lib64/cmake/Qt6Test/Qt6TestTargets.cmake \ + /usr/lib64/cmake/Qt6Test/Qt6TestVersionlessAliasTargets.cmake \ + /usr/lib64/cmake/Qt6Test/QtTestProperties.cmake \ + /usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake \ + /usr/share/cmake/Modules/CheckCXXCompilerFlag.cmake \ + /usr/bin/cmake diff --git a/build-linux/tests/test_icon_utils_autogen/include/test_icon_utils.moc b/build-linux/tests/test_icon_utils_autogen/include/test_icon_utils.moc new file mode 100644 index 00000000..6b60471b --- /dev/null +++ b/build-linux/tests/test_icon_utils_autogen/include/test_icon_utils.moc @@ -0,0 +1,112 @@ +/**************************************************************************** +** Meta object code from reading C++ file 'test_icon_utils.cpp' +** +** Created by: The Qt Meta Object Compiler version 69 (Qt 6.10.3) +** +** WARNING! All changes made in this file will be lost! +*****************************************************************************/ + +#include + +#include + +#include + + +#include +#if !defined(Q_MOC_OUTPUT_REVISION) +#error "The header file 'test_icon_utils.cpp' doesn't include ." +#elif Q_MOC_OUTPUT_REVISION != 69 +#error "This file was generated using the moc from 6.10.3. It" +#error "cannot be used with the include files from this version of Qt." +#error "(The moc has changed too much.)" +#endif + +#ifndef Q_CONSTINIT +#define Q_CONSTINIT +#endif + +QT_WARNING_PUSH +QT_WARNING_DISABLE_DEPRECATED +QT_WARNING_DISABLE_GCC("-Wuseless-cast") +namespace { +struct qt_meta_tag_ZN13TestIconUtilsE_t {}; +} // unnamed namespace + +template <> constexpr inline auto TestIconUtils::qt_create_metaobjectdata() +{ + namespace QMC = QtMocConstants; + QtMocHelpers::StringRefStorage qt_stringData { + "TestIconUtils", + "findsRepoIconsFromBuildTree", + "", + "findsAnnotationIconsFromBuildTree" + }; + + QtMocHelpers::UintData qt_methods { + // Slot 'findsRepoIconsFromBuildTree' + QtMocHelpers::SlotData(1, 2, QMC::AccessPrivate, QMetaType::Void), + // Slot 'findsAnnotationIconsFromBuildTree' + QtMocHelpers::SlotData(3, 2, QMC::AccessPrivate, QMetaType::Void), + }; + QtMocHelpers::UintData qt_properties { + }; + QtMocHelpers::UintData qt_enums { + }; + return QtMocHelpers::metaObjectData(QMC::MetaObjectFlag{}, qt_stringData, + qt_methods, qt_properties, qt_enums); +} +Q_CONSTINIT const QMetaObject TestIconUtils::staticMetaObject = { { + QMetaObject::SuperData::link(), + qt_staticMetaObjectStaticContent.stringdata, + qt_staticMetaObjectStaticContent.data, + qt_static_metacall, + nullptr, + qt_staticMetaObjectRelocatingContent.metaTypes, + nullptr +} }; + +void TestIconUtils::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) +{ + auto *_t = static_cast(_o); + if (_c == QMetaObject::InvokeMetaMethod) { + switch (_id) { + case 0: _t->findsRepoIconsFromBuildTree(); break; + case 1: _t->findsAnnotationIconsFromBuildTree(); break; + default: ; + } + } + (void)_a; +} + +const QMetaObject *TestIconUtils::metaObject() const +{ + return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject; +} + +void *TestIconUtils::qt_metacast(const char *_clname) +{ + if (!_clname) return nullptr; + if (!strcmp(_clname, qt_staticMetaObjectStaticContent.strings)) + return static_cast(this); + return QObject::qt_metacast(_clname); +} + +int TestIconUtils::qt_metacall(QMetaObject::Call _c, int _id, void **_a) +{ + _id = QObject::qt_metacall(_c, _id, _a); + if (_id < 0) + return _id; + if (_c == QMetaObject::InvokeMetaMethod) { + if (_id < 2) + qt_static_metacall(this, _c, _id, _a); + _id -= 2; + } + if (_c == QMetaObject::RegisterMethodArgumentMetaType) { + if (_id < 2) + *reinterpret_cast(_a[0]) = QMetaType(); + _id -= 2; + } + return _id; +} +QT_WARNING_POP diff --git a/build-linux/tests/test_icon_utils_autogen/moc_predefs.h b/build-linux/tests/test_icon_utils_autogen/moc_predefs.h new file mode 100644 index 00000000..0aeb7593 --- /dev/null +++ b/build-linux/tests/test_icon_utils_autogen/moc_predefs.h @@ -0,0 +1,504 @@ +#define __DBL_MIN_EXP__ (-1021) +#define __LDBL_MANT_DIG__ 64 +#define __cpp_nontype_template_parameter_auto 201606L +#define __UINT_LEAST16_MAX__ 0xffff +#define __FLT16_HAS_QUIET_NAN__ 1 +#define __ATOMIC_ACQUIRE 2 +#define QT_TESTCASE_BUILDDIR "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests" +#define __FLT128_MAX_10_EXP__ 4932 +#define __FLT_MIN__ 1.17549435082228750796873653722224568e-38F +#define __GCC_IEC_559_COMPLEX 2 +#define __cpp_aggregate_nsdmi 201304L +#define __UINT_LEAST8_TYPE__ unsigned char +#define __SIZEOF_FLOAT80__ 16 +#define __BFLT16_DENORM_MIN__ 9.18354961579912115600575419704879436e-41BF16 +#define __cpp_impl_three_way_comparison 201907L +#define __INTMAX_C(c) c ## L +#define __CHAR_BIT__ 8 +#define __cpp_designated_initializers 201707L +#define __UINT8_MAX__ 0xff +#define __SCHAR_WIDTH__ 8 +#define __WINT_MAX__ 0xffffffffU +#define __FLT32_MIN_EXP__ (-125) +#define __cpp_static_assert 201411L +#define __BFLT16_MIN_10_EXP__ (-37) +#define __cpp_inheriting_constructors 201511L +#define QT_GUI_LIB 1 +#define __ORDER_LITTLE_ENDIAN__ 1234 +#define __WCHAR_MAX__ 0x7fffffff +#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_2 1 +#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_4 1 +#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_8 1 +#define __GCC_ATOMIC_CHAR_LOCK_FREE 2 +#define __GCC_IEC_559 2 +#define __FLT32X_DECIMAL_DIG__ 17 +#define TLRENDER_OIIO 1 +#define __FLT_EVAL_METHOD__ 0 +#define __cpp_binary_literals 201304L +#define __FLT64_DECIMAL_DIG__ 17 +#define __cpp_noexcept_function_type 201510L +#define __GCC_ATOMIC_CHAR32_T_LOCK_FREE 2 +#define __cpp_variadic_templates 200704L +#define __UINT_FAST64_MAX__ 0xffffffffffffffffUL +#define __SIG_ATOMIC_TYPE__ int +#define __DBL_MIN_10_EXP__ (-307) +#define __FINITE_MATH_ONLY__ 0 +#define __cpp_variable_templates 201304L +#define __FLT32X_MAX_EXP__ 1024 +#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_1 1 +#define __FLT32_HAS_DENORM__ 1 +#define __UINT_FAST8_MAX__ 0xff +#define __cpp_rvalue_reference 200610L +#define __cpp_nested_namespace_definitions 201411L +#define __DEC64_MAX_EXP__ 385 +#define __INT8_C(c) c +#define __LDBL_HAS_INFINITY__ 1 +#define __INT_LEAST8_WIDTH__ 8 +#define __cpp_variadic_using 201611L +#define __UINT_LEAST64_MAX__ 0xffffffffffffffffUL +#define __INT_LEAST8_MAX__ 0x7f +#define __cpp_attributes 200809L +#define __cpp_capture_star_this 201603L +#define __SHRT_MAX__ 0x7fff +#define __LDBL_MAX__ 1.18973149535723176502126385303097021e+4932L +#define __cpp_impl_coroutine 201902L +#define __FLT64X_MAX_10_EXP__ 4932 +#define __cpp_if_constexpr 201606L +#define __BFLT16_MAX_10_EXP__ 38 +#define __BFLT16_MAX_EXP__ 128 +#define __LDBL_IS_IEC_60559__ 1 +#define QT_NO_DEBUG 1 +#define __FLT64X_HAS_QUIET_NAN__ 1 +#define QT_TESTLIB_LIB 1 +#define TLRENDER_SDL2 1 +#define __UINT_LEAST8_MAX__ 0xff +#define __GCC_ATOMIC_BOOL_LOCK_FREE 2 +#define __FLT128_DENORM_MIN__ 6.47517511943802511092443895822764655e-4966F128 +#define __UINTMAX_TYPE__ long unsigned int +#define __cpp_nsdmi 200809L +#define __BFLT16_DECIMAL_DIG__ 4 +#define __linux 1 +#define __DEC32_EPSILON__ 1E-6DF +#define __FLT_EVAL_METHOD_TS_18661_3__ 0 +#define __UINT32_MAX__ 0xffffffffU +#define __GXX_EXPERIMENTAL_CXX0X__ 1 +#define __DBL_DENORM_MIN__ double(4.94065645841246544176568792868221372e-324L) +#define __FLT128_MIN_EXP__ (-16381) +#define __DEC64X_MAX_EXP__ 6145 +#define __WINT_MIN__ 0U +#define __FLT128_MIN_10_EXP__ (-4931) +#define __FLT32X_IS_IEC_60559__ 1 +#define __INT_LEAST16_WIDTH__ 16 +#define __SCHAR_MAX__ 0x7f +#define __FLT128_MANT_DIG__ 113 +#define __WCHAR_MIN__ (-__WCHAR_MAX__ - 1) +#define __INT64_C(c) c ## L +#define __cpp_impl_destroying_delete 201806L +#define __GCC_ATOMIC_POINTER_LOCK_FREE 2 +#define TLRENDER_JPEG 1 +#define __ATOMIC_SEQ_CST 5 +#define __unix 1 +#define __INT_LEAST64_MAX__ 0x7fffffffffffffffL +#define __FLT32X_MANT_DIG__ 53 +#define __GCC_ATOMIC_CHAR16_T_LOCK_FREE 2 +#define __cpp_aligned_new 201606L +#define __FLT32_MAX_10_EXP__ 38 +#define __FLT64X_EPSILON__ 1.08420217248550443400745280086994171e-19F64x +#define __STDC_HOSTED__ 1 +#define __DEC64_MIN_EXP__ (-382) +#define TLRENDER_PNG 1 +#define __cpp_decltype_auto 201304L +#define __DBL_DIG__ 15 +#define __STDC_EMBED_EMPTY__ 2 +#define __FLT_EPSILON__ 1.19209289550781250000000000000000000e-7F +#define __cpp_char8_t 202207L +#define __GXX_WEAK__ 1 +#define __SHRT_WIDTH__ 16 +#define __FLT32_IS_IEC_60559__ 1 +#define __LDBL_MIN__ 3.36210314311209350626267781732175260e-4932L +#define __DBL_IS_IEC_60559__ 1 +#define __DEC32_MAX__ 9.999999E96DF +#define __CHAR8_TYPE__ unsigned char +#define __cpp_threadsafe_static_init 200806L +#define __cpp_enumerator_attributes 201411L +#define TLRENDER_EXR 1 +#define __FLT64X_DENORM_MIN__ 3.64519953188247460252840593361941982e-4951F64x +#define __FLT32X_HAS_INFINITY__ 1 +#define __unix__ 1 +#define __INT_WIDTH__ 32 +#define __STDC_IEC_559__ 1 +#define __STDC_ISO_10646__ 201706L +#define __GCC_ATOMIC_CHAR8_T_LOCK_FREE 2 +#define __DECIMAL_DIG__ 21 +#define __STDC_IEC_559_COMPLEX__ 1 +#define __FLT64_EPSILON__ 2.22044604925031308084726333618164062e-16F64 +#define __gnu_linux__ 1 +#define __INT16_MAX__ 0x7fff +#define __FLT64_MIN_EXP__ (-1021) +#define __cpp_using_enum 201907L +#define __DEC64X_EPSILON__ 1E-33D64x +#define __FLT64X_MIN_10_EXP__ (-4931) +#define __LDBL_HAS_QUIET_NAN__ 1 +#define __FLT16_MIN_EXP__ (-13) +#define __FLT64_MANT_DIG__ 53 +#define __cpp_consteval 202211L +#define __FLT64X_MANT_DIG__ 64 +#define FTK_API_GL_4_1 1 +#define __BFLT16_DIG__ 2 +#define __GNUC__ 15 +#define __GXX_RTTI 1 +#define TLRENDER_FFMPEG_PLUGIN 1 +#define __MMX__ 1 +#define __FLT_HAS_DENORM__ 1 +#define __SIZEOF_LONG_DOUBLE__ 16 +#define __BIGGEST_ALIGNMENT__ 16 +#define __STDC_UTF_16__ 1 +#define __FLT64_MAX_10_EXP__ 308 +#define __BFLT16_IS_IEC_60559__ 0 +#define __FLT16_MAX_10_EXP__ 4 +#define __cpp_delegating_constructors 200604L +#define __DBL_MAX__ double(1.79769313486231570814527423731704357e+308L) +#define __cpp_raw_strings 200710L +#define __INT_FAST32_MAX__ 0x7fffffffffffffffL +#define __DBL_HAS_INFINITY__ 1 +#define __INT64_MAX__ 0x7fffffffffffffffL +#define __SIZEOF_FLOAT__ 4 +#define __HAVE_SPECULATION_SAFE_VALUE 1 +#define __cpp_fold_expressions 201603L +#define __DEC32_MIN_EXP__ (-94) +#define __INTPTR_WIDTH__ 64 +#define __UINT_LEAST32_MAX__ 0xffffffffU +#define __FLT32X_HAS_DENORM__ 1 +#define __INT_FAST16_TYPE__ long int +#define __MMX_WITH_SSE__ 1 +#define __LDBL_HAS_DENORM__ 1 +#define QT_WIDGETS_LIB 1 +#define __SEG_GS 1 +#define __BFLT16_EPSILON__ 7.81250000000000000000000000000000000e-3BF16 +#define __cplusplus 202002L +#define __cpp_ref_qualifiers 200710L +#define __DEC32_MIN__ 1E-95DF +#define __DEPRECATED 1 +#define __cpp_rvalue_references 200610L +#define __DBL_MAX_EXP__ 1024 +#define __WCHAR_WIDTH__ 32 +#define __FLT32_MAX__ 3.40282346638528859811704183484516925e+38F32 +#define __DEC128_EPSILON__ 1E-33DL +#define __FLT16_DECIMAL_DIG__ 5 +#define __SSE2_MATH__ 1 +#define __ATOMIC_HLE_RELEASE 131072 +#define __PTRDIFF_MAX__ 0x7fffffffffffffffL +#define __amd64 1 +#define __DEC64X_MAX__ 9.999999999999999999999999999999999E6144D64x +#define __ATOMIC_HLE_ACQUIRE 65536 +#define __GNUG__ 15 +#define __LONG_LONG_MAX__ 0x7fffffffffffffffLL +#define __SIZEOF_SIZE_T__ 8 +#define __BFLT16_HAS_INFINITY__ 1 +#define __FLT64X_MIN_EXP__ (-16381) +#define __SIZEOF_WINT_T__ 4 +#define __FLT32X_DIG__ 15 +#define __LONG_LONG_WIDTH__ 64 +#define QT_TESTCASE_SOURCEDIR "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests" +#define __cpp_initializer_lists 200806L +#define __FLT32_MAX_EXP__ 128 +#define ABI_ID "ELF" +#define __cpp_hex_float 201603L +#define __GXX_ABI_VERSION 1020 +#define __FLT_MIN_EXP__ (-125) +#define __GCC_HAVE_DWARF2_CFI_ASM 1 +#define TLRENDER_OCIO 1 +#define __x86_64 1 +#define __cpp_lambdas 200907L +#define __INT_FAST64_TYPE__ long int +#define __BFLT16_MAX__ 3.38953138925153547590470800371487867e+38BF16 +#define __FLT64_DENORM_MIN__ 4.94065645841246544176568792868221372e-324F64 +#define __cpp_template_auto 201606L +#define __FLT16_DENORM_MIN__ 5.96046447753906250000000000000000000e-8F16 +#define __FLT128_EPSILON__ 1.92592994438723585305597794258492732e-34F128 +#define __FLT64X_NORM_MAX__ 1.18973149535723176502126385303097021e+4932F64x +#define __SIZEOF_POINTER__ 8 +#define __SIZE_TYPE__ long unsigned int +#define __LP64__ 1 +#define __DBL_HAS_QUIET_NAN__ 1 +#define __FLT32X_EPSILON__ 2.22044604925031308084726333618164062e-16F32x +#define __LDBL_MAX_EXP__ 16384 +#define __DECIMAL_BID_FORMAT__ 1 +#define __FLT64_MIN_10_EXP__ (-307) +#define __FLT16_MIN_10_EXP__ (-4) +#define __FLT64X_DECIMAL_DIG__ 21 +#define __DEC128_MIN__ 1E-6143DL +#define __REGISTER_PREFIX__ +#define __UINT16_MAX__ 0xffff +#define __FLT128_HAS_INFINITY__ 1 +#define __FLT32_MIN__ 1.17549435082228750796873653722224568e-38F32 +#define __UINT8_TYPE__ unsigned char +#define __FLT_DIG__ 6 +#define __NO_INLINE__ 1 +#define __DEC_EVAL_METHOD__ 2 +#define __FLT_MANT_DIG__ 24 +#define __LDBL_DECIMAL_DIG__ 21 +#define __VERSION__ "15.2.1 20260123 (Red Hat 15.2.1-7)" +#define __UINT64_C(c) c ## UL +#define __cpp_unicode_characters 201411L +#define __DEC64X_MIN__ 1E-6143D64x +#define _STDC_PREDEF_H 1 +#define __INT_LEAST32_MAX__ 0x7fffffff +#define __GCC_ATOMIC_INT_LOCK_FREE 2 +#define __FLT128_MAX_EXP__ 16384 +#define __cpp_conditional_explicit 201806L +#define __FLT32_MANT_DIG__ 24 +#define __cpp_decltype 200707L +#define __FLOAT_WORD_ORDER__ __ORDER_LITTLE_ENDIAN__ +#define SIZEOF_DPTR (sizeof(void*)) +#define __FLT32X_MIN_EXP__ (-1021) +#define __cpp_aggregate_paren_init 201902L +#define __STDC_IEC_60559_COMPLEX__ 201404L +#define __cpp_aggregate_bases 201603L +#define __BFLT16_MIN__ 1.17549435082228750796873653722224568e-38BF16 +#define __FLT128_HAS_DENORM__ 1 +#define __FLT32_DECIMAL_DIG__ 9 +#define __FLT128_DIG__ 33 +#define __INT32_C(c) c +#define __DEC64_EPSILON__ 1E-15DD +#define __ORDER_PDP_ENDIAN__ 3412 +#define __DEC128_MIN_EXP__ (-6142) +#define __DEC128_MAX__ 9.999999999999999999999999999999999E6144DL +#define __cpp_constinit 201907L +#define __INT_FAST32_TYPE__ long int +#define __UINT_LEAST16_TYPE__ short unsigned int +#define __DEC64X_MANT_DIG__ 34 +#define __DEC128_MAX_EXP__ 6145 +#define unix 1 +#define __DBL_HAS_DENORM__ 1 +#define __cpp_rtti 199711L +#define __UINT64_MAX__ 0xffffffffffffffffUL +#define __FLT_IS_IEC_60559__ 1 +#define __GNUC_WIDE_EXECUTION_CHARSET_NAME "UTF-32LE" +#define __FLT64X_DIG__ 18 +#define __INT8_TYPE__ signed char +#define __cpp_digit_separators 201309L +#define __ELF__ 1 +#define __GCC_ASM_FLAG_OUTPUTS__ 1 +#define __UINT32_TYPE__ unsigned int +#define __BFLT16_HAS_QUIET_NAN__ 1 +#define __FLT_RADIX__ 2 +#define __INT_LEAST16_TYPE__ short int +#define __LDBL_EPSILON__ 1.08420217248550443400745280086994171e-19L +#define __UINTMAX_C(c) c ## UL +#define __GNUC_RH_RELEASE__ 7 +#define __FLT16_DIG__ 3 +#define __k8 1 +#define __FLT32X_MIN__ 2.22507385850720138309023271733240406e-308F32x +#define __SIG_ATOMIC_MAX__ 0x7fffffff +#define __cpp_constexpr 202002L +#define __GCC_ATOMIC_WCHAR_T_LOCK_FREE 2 +#define __USER_LABEL_PREFIX__ +#define __STDC_IEC_60559_BFP__ 201404L +#define __SIZEOF_PTRDIFF_T__ 8 +#define __FLT64X_HAS_INFINITY__ 1 +#define __SIZEOF_LONG__ 8 +#define __LDBL_DIG__ 18 +#define __FLT64_IS_IEC_60559__ 1 +#define __x86_64__ 1 +#define __FLT16_IS_IEC_60559__ 1 +#define __FLT16_MAX_EXP__ 16 +#define __DEC32_SUBNORMAL_MIN__ 0.000001E-95DF +#define __STDC_EMBED_FOUND__ 1 +#define __INT_FAST16_MAX__ 0x7fffffffffffffffL +#define __GCC_CONSTRUCTIVE_SIZE 64 +#define __FLT64_DIG__ 15 +#define __UINT_FAST32_MAX__ 0xffffffffffffffffUL +#define __UINT_LEAST64_TYPE__ long unsigned int +#define __FLT16_EPSILON__ 9.76562500000000000000000000000000000e-4F16 +#define __FLT_HAS_QUIET_NAN__ 1 +#define __FLT_MAX_10_EXP__ 38 +#define __FLT64X_HAS_DENORM__ 1 +#define __DEC128_SUBNORMAL_MIN__ 0.000000000000000000000000000000001E-6143DL +#define __FLT_HAS_INFINITY__ 1 +#define __GNUC_EXECUTION_CHARSET_NAME "UTF-8" +#define __cpp_unicode_literals 200710L +#define __UINT_FAST16_TYPE__ long unsigned int +#define __DEC64_MAX__ 9.999999999999999E384DD +#define __STDC_EMBED_NOT_FOUND__ 0 +#define __INT_FAST32_WIDTH__ 64 +#define __CHAR16_TYPE__ short unsigned int +#define __PRAGMA_REDEFINE_EXTNAME 1 +#define __DEC64X_SUBNORMAL_MIN__ 0.000000000000000000000000000000001E-6143D64x +#define __SIZE_WIDTH__ 64 +#define __SEG_FS 1 +#define __INT_LEAST16_MAX__ 0x7fff +#define __FLT16_NORM_MAX__ 6.55040000000000000000000000000000000e+4F16 +#define __DEC64_MANT_DIG__ 16 +#define __FLT32_DENORM_MIN__ 1.40129846432481707092372958328991613e-45F32 +#define __SIG_ATOMIC_WIDTH__ 32 +#define __GCC_DESTRUCTIVE_SIZE 64 +#define __INT_LEAST64_TYPE__ long int +#define __INT16_TYPE__ short int +#define __INT_LEAST8_TYPE__ signed char +#define __FLT16_MAX__ 6.55040000000000000000000000000000000e+4F16 +#define __FLT128_MIN__ 3.36210314311209350626267781732175260e-4932F128 +#define __cpp_structured_bindings 201606L +#define __SIZEOF_INT__ 4 +#define __DEC32_MAX_EXP__ 97 +#define __INT_FAST8_MAX__ 0x7f +#define __FLT128_MAX__ 1.18973149535723176508575932662800702e+4932F128 +#define __INTPTR_MAX__ 0x7fffffffffffffffL +#define __cpp_sized_deallocation 201309L +#define __cpp_guaranteed_copy_elision 201606L +#define linux 1 +#define __FLT64_HAS_QUIET_NAN__ 1 +#define __FLT32_MIN_10_EXP__ (-37) +#define __EXCEPTIONS 1 +#define __UINT16_C(c) c +#define __PTRDIFF_WIDTH__ 64 +#define __cpp_range_based_for 201603L +#define __INT_FAST16_WIDTH__ 64 +#define __FLT64_HAS_INFINITY__ 1 +#define __FLT64X_MAX__ 1.18973149535723176502126385303097021e+4932F64x +#define __FLT16_HAS_INFINITY__ 1 +#define __STDCPP_DEFAULT_NEW_ALIGNMENT__ 16 +#define __SIG_ATOMIC_MIN__ (-__SIG_ATOMIC_MAX__ - 1) +#define __code_model_small__ 1 +#define __GCC_ATOMIC_LONG_LOCK_FREE 2 +#define __cpp_nontype_template_args 201911L +#define __DEC32_MANT_DIG__ 7 +#define __k8__ 1 +#define __INTPTR_TYPE__ long int +#define __UINT16_TYPE__ short unsigned int +#define __WCHAR_TYPE__ int +#define __UINTPTR_MAX__ 0xffffffffffffffffUL +#define __INT_FAST64_WIDTH__ 64 +#define __cpp_nontype_template_parameter_class 201806L +#define __cpp_concepts 202002L +#define __INT_FAST64_MAX__ 0x7fffffffffffffffL +#define __GCC_ATOMIC_TEST_AND_SET_TRUEVAL 1 +#define __FLT_NORM_MAX__ 3.40282346638528859811704183484516925e+38F +#define __FLT32_HAS_INFINITY__ 1 +#define __FLT64X_MAX_EXP__ 16384 +#define __UINT_FAST64_TYPE__ long unsigned int +#define __cpp_constexpr_in_decltype 201711L +#define __cpp_inline_variables 201606L +#define __BFLT16_MIN_EXP__ (-125) +#define __INT_MAX__ 0x7fffffff +#define __linux__ 1 +#define __INT64_TYPE__ long int +#define __FLT_MAX_EXP__ 128 +#define __ORDER_BIG_ENDIAN__ 4321 +#define __DBL_MANT_DIG__ 53 +#define QT_CORE_LIB 1 +#define __SIZEOF_FLOAT128__ 16 +#define __BFLT16_MANT_DIG__ 8 +#define __DEC64_MIN__ 1E-383DD +#define __WINT_TYPE__ unsigned int +#define __UINT_LEAST32_TYPE__ unsigned int +#define __SIZEOF_SHORT__ 2 +#define __FLT32_NORM_MAX__ 3.40282346638528859811704183484516925e+38F32 +#define __SSE__ 1 +#define __LDBL_MIN_EXP__ (-16381) +#define __FLT64_MAX__ 1.79769313486231570814527423731704357e+308F64 +#define __DEC64X_MIN_EXP__ (-6142) +#define __amd64__ 1 +#define __WINT_WIDTH__ 32 +#define __INT_LEAST64_WIDTH__ 64 +#define __FLT32X_MAX_10_EXP__ 308 +#define __cpp_namespace_attributes 201411L +#define __SIZEOF_INT128__ 16 +#define __FLT16_MIN__ 6.10351562500000000000000000000000000e-5F16 +#define __FLT64X_IS_IEC_60559__ 1 +#define __GXX_CONSTEXPR_ASM__ 1 +#define __LDBL_MAX_10_EXP__ 4932 +#define __ATOMIC_RELAXED 0 +#define __DBL_EPSILON__ double(2.22044604925031308084726333618164062e-16L) +#define __INT_LEAST32_TYPE__ int +#define _LP64 1 +#define __UINT8_C(c) c +#define __FLT64_MAX_EXP__ 1024 +#define __cpp_return_type_deduction 201304L +#define __SIZEOF_WCHAR_T__ 4 +#define __GNUC_PATCHLEVEL__ 1 +#define __FLT128_NORM_MAX__ 1.18973149535723176508575932662800702e+4932F128 +#define __FLT64_NORM_MAX__ 1.79769313486231570814527423731704357e+308F64 +#define __FLT128_HAS_QUIET_NAN__ 1 +#define __INTMAX_MAX__ 0x7fffffffffffffffL +#define TLRENDER_TIFF 1 +#define __INT_FAST8_TYPE__ signed char +#define __FLT64X_MIN__ 3.36210314311209350626267781732175260e-4932F64x +#define __STDCPP_THREADS__ 1 +#define __BFLT16_HAS_DENORM__ 1 +#define __GNUC_STDC_INLINE__ 1 +#define __FLT64_HAS_DENORM__ 1 +#define __FLT32_EPSILON__ 1.19209289550781250000000000000000000e-7F32 +#define __FLT16_HAS_DENORM__ 1 +#define __DBL_DECIMAL_DIG__ 17 +#define __STDC_UTF_32__ 1 +#define __INT_FAST8_WIDTH__ 8 +#define __FXSR__ 1 +#define __FLT32X_MAX__ 1.79769313486231570814527423731704357e+308F32x +#define __DBL_NORM_MAX__ double(1.79769313486231570814527423731704357e+308L) +#define __BYTE_ORDER__ __ORDER_LITTLE_ENDIAN__ +#define TLRENDER_FFMPEG 1 +#define __INTMAX_WIDTH__ 64 +#define __cpp_runtime_arrays 198712L +#define __FLT32_DIG__ 6 +#define __UINT64_TYPE__ long unsigned int +#define __UINT32_C(c) c ## U +#define __cpp_alias_templates 200704L +#define __cpp_constexpr_dynamic_alloc 201907L +#define __FLT_DENORM_MIN__ 1.40129846432481707092372958328991613e-45F +#define __FLT128_IS_IEC_60559__ 1 +#define __INT8_MAX__ 0x7f +#define __LONG_WIDTH__ 64 +#define __DBL_MIN__ double(2.22507385850720138309023271733240406e-308L) +#define __INT32_MAX__ 0x7fffffff +#define __UINT_FAST32_TYPE__ long unsigned int +#define __FLT16_MANT_DIG__ 11 +#define __FLT32X_NORM_MAX__ 1.79769313486231570814527423731704357e+308F32x +#define __CHAR32_TYPE__ unsigned int +#define __FLT_MAX__ 3.40282346638528859811704183484516925e+38F +#define __SSE2__ 1 +#define __cpp_deduction_guides 201907L +#define __BFLT16_NORM_MAX__ 3.38953138925153547590470800371487867e+38BF16 +#define __INT32_TYPE__ int +#define __SIZEOF_DOUBLE__ 8 +#define __cpp_exceptions 199711L +#define __FLT_MIN_10_EXP__ (-37) +#define __FLT64_MIN__ 2.22507385850720138309023271733240406e-308F64 +#define __INT_LEAST32_WIDTH__ 32 +#define __INTMAX_TYPE__ long int +#define __GLIBCXX_BITSIZE_INT_N_0 128 +#define __FLT32X_HAS_QUIET_NAN__ 1 +#define __ATOMIC_CONSUME 1 +#define __GNUC_MINOR__ 2 +#define __GLIBCXX_TYPE_INT_N_0 __int128 +#define __UINTMAX_MAX__ 0xffffffffffffffffUL +#define __FLT32X_DENORM_MIN__ 4.94065645841246544176568792868221372e-324F32x +#define __cpp_template_template_args 201611L +#define __DBL_MAX_10_EXP__ 308 +#define __LDBL_DENORM_MIN__ 3.64519953188247460252840593361941982e-4951L +#define __INT16_C(c) c +#define __STDC__ 1 +#define __PTRDIFF_TYPE__ long int +#define __LONG_MAX__ 0x7fffffffffffffffL +#define __FLT32X_MIN_10_EXP__ (-307) +#define __UINTPTR_TYPE__ long unsigned int +#define __DEC64_SUBNORMAL_MIN__ 0.000000000000001E-383DD +#define __DEC128_MANT_DIG__ 34 +#define __LDBL_MIN_10_EXP__ (-4931) +#define __cpp_generic_lambdas 201707L +#define __SSE_MATH__ 1 +#define __SIZEOF_LONG_LONG__ 8 +#define __cpp_user_defined_literals 200809L +#define __FLT128_DECIMAL_DIG__ 36 +#define __GCC_ATOMIC_LLONG_LOCK_FREE 2 +#define __FLT32_HAS_QUIET_NAN__ 1 +#define __FLT_DECIMAL_DIG__ 9 +#define __UINT_FAST16_MAX__ 0xffffffffffffffffUL +#define __LDBL_NORM_MAX__ 1.18973149535723176502126385303097021e+4932L +#define __GCC_ATOMIC_SHORT_LOCK_FREE 2 +#define __SIZE_MAX__ 0xffffffffffffffffUL +#define __UINT_FAST8_TYPE__ unsigned char +#define _GNU_SOURCE 1 +#define __cpp_init_captures 201803L +#define __ATOMIC_ACQ_REL 4 +#define __ATOMIC_RELEASE 3 diff --git a/build-linux/tests/test_icon_utils_autogen/mocs_compilation.cpp b/build-linux/tests/test_icon_utils_autogen/mocs_compilation.cpp new file mode 100644 index 00000000..bda67f76 --- /dev/null +++ b/build-linux/tests/test_icon_utils_autogen/mocs_compilation.cpp @@ -0,0 +1,3 @@ +// This file is autogenerated. Changes will be overwritten. +// No files found that require moc or the moc files are included +enum some_compilers { need_more_than_nothing }; diff --git a/build-linux/tests/test_icon_utils_autogen/timestamp b/build-linux/tests/test_icon_utils_autogen/timestamp new file mode 100644 index 00000000..e69de29b diff --git a/build-linux/tests/test_importer b/build-linux/tests/test_importer new file mode 100755 index 00000000..4209a0e7 Binary files /dev/null and b/build-linux/tests/test_importer differ diff --git a/build-linux/tests/test_importer_autogen/VNU7RW3YIC/moc_db.cpp b/build-linux/tests/test_importer_autogen/VNU7RW3YIC/moc_db.cpp new file mode 100644 index 00000000..0098a341 --- /dev/null +++ b/build-linux/tests/test_importer_autogen/VNU7RW3YIC/moc_db.cpp @@ -0,0 +1,187 @@ +/**************************************************************************** +** Meta object code from reading C++ file 'db.h' +** +** Created by: The Qt Meta Object Compiler version 69 (Qt 6.10.3) +** +** WARNING! All changes made in this file will be lost! +*****************************************************************************/ + +#include "../../../../native/qt6/src/db.h" +#include + +#include + +#include + + +#include +#if !defined(Q_MOC_OUTPUT_REVISION) +#error "The header file 'db.h' doesn't include ." +#elif Q_MOC_OUTPUT_REVISION != 69 +#error "This file was generated using the moc from 6.10.3. It" +#error "cannot be used with the include files from this version of Qt." +#error "(The moc has changed too much.)" +#endif + +#ifndef Q_CONSTINIT +#define Q_CONSTINIT +#endif + +QT_WARNING_PUSH +QT_WARNING_DISABLE_DEPRECATED +QT_WARNING_DISABLE_GCC("-Wuseless-cast") +namespace { +struct qt_meta_tag_ZN2DBE_t {}; +} // unnamed namespace + +template <> constexpr inline auto DB::qt_create_metaobjectdata() +{ + namespace QMC = QtMocConstants; + QtMocHelpers::StringRefStorage qt_stringData { + "DB", + "foldersChanged", + "", + "assetsChanged", + "folderId", + "tagsChanged", + "projectFoldersChanged", + "assetVersionsChanged", + "assetId", + "applyChecksumUpdate", + "filePath", + "newSize", + "newChecksum", + "oldChecksum", + "isNewAsset", + "versionNotes" + }; + + QtMocHelpers::UintData qt_methods { + // Signal 'foldersChanged' + QtMocHelpers::SignalData(1, 2, QMC::AccessPublic, QMetaType::Void), + // Signal 'assetsChanged' + QtMocHelpers::SignalData(3, 2, QMC::AccessPublic, QMetaType::Void, {{ + { QMetaType::Int, 4 }, + }}), + // Signal 'tagsChanged' + QtMocHelpers::SignalData(5, 2, QMC::AccessPublic, QMetaType::Void), + // Signal 'projectFoldersChanged' + QtMocHelpers::SignalData(6, 2, QMC::AccessPublic, QMetaType::Void), + // Signal 'assetVersionsChanged' + QtMocHelpers::SignalData(7, 2, QMC::AccessPublic, QMetaType::Void, {{ + { QMetaType::Int, 8 }, + }}), + // Slot 'applyChecksumUpdate' + QtMocHelpers::SlotData(9, 2, QMC::AccessPrivate, QMetaType::Void, {{ + { QMetaType::Int, 8 }, { QMetaType::QString, 10 }, { QMetaType::LongLong, 11 }, { QMetaType::QString, 12 }, + { QMetaType::QString, 13 }, { QMetaType::Bool, 14 }, { QMetaType::QString, 15 }, + }}), + }; + QtMocHelpers::UintData qt_properties { + }; + QtMocHelpers::UintData qt_enums { + }; + return QtMocHelpers::metaObjectData(QMC::MetaObjectFlag{}, qt_stringData, + qt_methods, qt_properties, qt_enums); +} +Q_CONSTINIT const QMetaObject DB::staticMetaObject = { { + QMetaObject::SuperData::link(), + qt_staticMetaObjectStaticContent.stringdata, + qt_staticMetaObjectStaticContent.data, + qt_static_metacall, + nullptr, + qt_staticMetaObjectRelocatingContent.metaTypes, + nullptr +} }; + +void DB::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) +{ + auto *_t = static_cast(_o); + if (_c == QMetaObject::InvokeMetaMethod) { + switch (_id) { + case 0: _t->foldersChanged(); break; + case 1: _t->assetsChanged((*reinterpret_cast>(_a[1]))); break; + case 2: _t->tagsChanged(); break; + case 3: _t->projectFoldersChanged(); break; + case 4: _t->assetVersionsChanged((*reinterpret_cast>(_a[1]))); break; + case 5: _t->applyChecksumUpdate((*reinterpret_cast>(_a[1])),(*reinterpret_cast>(_a[2])),(*reinterpret_cast>(_a[3])),(*reinterpret_cast>(_a[4])),(*reinterpret_cast>(_a[5])),(*reinterpret_cast>(_a[6])),(*reinterpret_cast>(_a[7]))); break; + default: ; + } + } + if (_c == QMetaObject::IndexOfMethod) { + if (QtMocHelpers::indexOfMethod(_a, &DB::foldersChanged, 0)) + return; + if (QtMocHelpers::indexOfMethod(_a, &DB::assetsChanged, 1)) + return; + if (QtMocHelpers::indexOfMethod(_a, &DB::tagsChanged, 2)) + return; + if (QtMocHelpers::indexOfMethod(_a, &DB::projectFoldersChanged, 3)) + return; + if (QtMocHelpers::indexOfMethod(_a, &DB::assetVersionsChanged, 4)) + return; + } +} + +const QMetaObject *DB::metaObject() const +{ + return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject; +} + +void *DB::qt_metacast(const char *_clname) +{ + if (!_clname) return nullptr; + if (!strcmp(_clname, qt_staticMetaObjectStaticContent.strings)) + return static_cast(this); + if (!strcmp(_clname, "IAssetDatabase")) + return static_cast< IAssetDatabase*>(this); + return QObject::qt_metacast(_clname); +} + +int DB::qt_metacall(QMetaObject::Call _c, int _id, void **_a) +{ + _id = QObject::qt_metacall(_c, _id, _a); + if (_id < 0) + return _id; + if (_c == QMetaObject::InvokeMetaMethod) { + if (_id < 6) + qt_static_metacall(this, _c, _id, _a); + _id -= 6; + } + if (_c == QMetaObject::RegisterMethodArgumentMetaType) { + if (_id < 6) + *reinterpret_cast(_a[0]) = QMetaType(); + _id -= 6; + } + return _id; +} + +// SIGNAL 0 +void DB::foldersChanged() +{ + QMetaObject::activate(this, &staticMetaObject, 0, nullptr); +} + +// SIGNAL 1 +void DB::assetsChanged(int _t1) +{ + QMetaObject::activate(this, &staticMetaObject, 1, nullptr, _t1); +} + +// SIGNAL 2 +void DB::tagsChanged() +{ + QMetaObject::activate(this, &staticMetaObject, 2, nullptr); +} + +// SIGNAL 3 +void DB::projectFoldersChanged() +{ + QMetaObject::activate(this, &staticMetaObject, 3, nullptr); +} + +// SIGNAL 4 +void DB::assetVersionsChanged(int _t1) +{ + QMetaObject::activate(this, &staticMetaObject, 4, nullptr, _t1); +} +QT_WARNING_POP diff --git a/build-linux/tests/test_importer_autogen/VNU7RW3YIC/moc_importer.cpp b/build-linux/tests/test_importer_autogen/VNU7RW3YIC/moc_importer.cpp new file mode 100644 index 00000000..84e9624b --- /dev/null +++ b/build-linux/tests/test_importer_autogen/VNU7RW3YIC/moc_importer.cpp @@ -0,0 +1,179 @@ +/**************************************************************************** +** Meta object code from reading C++ file 'importer.h' +** +** Created by: The Qt Meta Object Compiler version 69 (Qt 6.10.3) +** +** WARNING! All changes made in this file will be lost! +*****************************************************************************/ + +#include "../../../../native/qt6/src/importer.h" +#include + +#include + +#include + + +#include +#if !defined(Q_MOC_OUTPUT_REVISION) +#error "The header file 'importer.h' doesn't include ." +#elif Q_MOC_OUTPUT_REVISION != 69 +#error "This file was generated using the moc from 6.10.3. It" +#error "cannot be used with the include files from this version of Qt." +#error "(The moc has changed too much.)" +#endif + +#ifndef Q_CONSTINIT +#define Q_CONSTINIT +#endif + +QT_WARNING_PUSH +QT_WARNING_DISABLE_DEPRECATED +QT_WARNING_DISABLE_GCC("-Wuseless-cast") +namespace { +struct qt_meta_tag_ZN8ImporterE_t {}; +} // unnamed namespace + +template <> constexpr inline auto Importer::qt_create_metaobjectdata() +{ + namespace QMC = QtMocConstants; + QtMocHelpers::StringRefStorage qt_stringData { + "Importer", + "importCompleted", + "", + "filesImported", + "progressChanged", + "current", + "total", + "currentFileChanged", + "fileName", + "currentFolderChanged", + "folderName", + "importFinished" + }; + + QtMocHelpers::UintData qt_methods { + // Signal 'importCompleted' + QtMocHelpers::SignalData(1, 2, QMC::AccessPublic, QMetaType::Void, {{ + { QMetaType::Int, 3 }, + }}), + // Signal 'progressChanged' + QtMocHelpers::SignalData(4, 2, QMC::AccessPublic, QMetaType::Void, {{ + { QMetaType::Int, 5 }, { QMetaType::Int, 6 }, + }}), + // Signal 'currentFileChanged' + QtMocHelpers::SignalData(7, 2, QMC::AccessPublic, QMetaType::Void, {{ + { QMetaType::QString, 8 }, + }}), + // Signal 'currentFolderChanged' + QtMocHelpers::SignalData(9, 2, QMC::AccessPublic, QMetaType::Void, {{ + { QMetaType::QString, 10 }, + }}), + // Signal 'importFinished' + QtMocHelpers::SignalData(11, 2, QMC::AccessPublic, QMetaType::Void), + }; + QtMocHelpers::UintData qt_properties { + }; + QtMocHelpers::UintData qt_enums { + }; + return QtMocHelpers::metaObjectData(QMC::MetaObjectFlag{}, qt_stringData, + qt_methods, qt_properties, qt_enums); +} +Q_CONSTINIT const QMetaObject Importer::staticMetaObject = { { + QMetaObject::SuperData::link(), + qt_staticMetaObjectStaticContent.stringdata, + qt_staticMetaObjectStaticContent.data, + qt_static_metacall, + nullptr, + qt_staticMetaObjectRelocatingContent.metaTypes, + nullptr +} }; + +void Importer::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) +{ + auto *_t = static_cast(_o); + if (_c == QMetaObject::InvokeMetaMethod) { + switch (_id) { + case 0: _t->importCompleted((*reinterpret_cast>(_a[1]))); break; + case 1: _t->progressChanged((*reinterpret_cast>(_a[1])),(*reinterpret_cast>(_a[2]))); break; + case 2: _t->currentFileChanged((*reinterpret_cast>(_a[1]))); break; + case 3: _t->currentFolderChanged((*reinterpret_cast>(_a[1]))); break; + case 4: _t->importFinished(); break; + default: ; + } + } + if (_c == QMetaObject::IndexOfMethod) { + if (QtMocHelpers::indexOfMethod(_a, &Importer::importCompleted, 0)) + return; + if (QtMocHelpers::indexOfMethod(_a, &Importer::progressChanged, 1)) + return; + if (QtMocHelpers::indexOfMethod(_a, &Importer::currentFileChanged, 2)) + return; + if (QtMocHelpers::indexOfMethod(_a, &Importer::currentFolderChanged, 3)) + return; + if (QtMocHelpers::indexOfMethod(_a, &Importer::importFinished, 4)) + return; + } +} + +const QMetaObject *Importer::metaObject() const +{ + return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject; +} + +void *Importer::qt_metacast(const char *_clname) +{ + if (!_clname) return nullptr; + if (!strcmp(_clname, qt_staticMetaObjectStaticContent.strings)) + return static_cast(this); + return QObject::qt_metacast(_clname); +} + +int Importer::qt_metacall(QMetaObject::Call _c, int _id, void **_a) +{ + _id = QObject::qt_metacall(_c, _id, _a); + if (_id < 0) + return _id; + if (_c == QMetaObject::InvokeMetaMethod) { + if (_id < 5) + qt_static_metacall(this, _c, _id, _a); + _id -= 5; + } + if (_c == QMetaObject::RegisterMethodArgumentMetaType) { + if (_id < 5) + *reinterpret_cast(_a[0]) = QMetaType(); + _id -= 5; + } + return _id; +} + +// SIGNAL 0 +void Importer::importCompleted(int _t1) +{ + QMetaObject::activate(this, &staticMetaObject, 0, nullptr, _t1); +} + +// SIGNAL 1 +void Importer::progressChanged(int _t1, int _t2) +{ + QMetaObject::activate(this, &staticMetaObject, 1, nullptr, _t1, _t2); +} + +// SIGNAL 2 +void Importer::currentFileChanged(const QString & _t1) +{ + QMetaObject::activate(this, &staticMetaObject, 2, nullptr, _t1); +} + +// SIGNAL 3 +void Importer::currentFolderChanged(const QString & _t1) +{ + QMetaObject::activate(this, &staticMetaObject, 3, nullptr, _t1); +} + +// SIGNAL 4 +void Importer::importFinished() +{ + QMetaObject::activate(this, &staticMetaObject, 4, nullptr); +} +QT_WARNING_POP diff --git a/build-linux/tests/test_importer_autogen/VNU7RW3YIC/moc_log_manager.cpp b/build-linux/tests/test_importer_autogen/VNU7RW3YIC/moc_log_manager.cpp new file mode 100644 index 00000000..59fa4292 --- /dev/null +++ b/build-linux/tests/test_importer_autogen/VNU7RW3YIC/moc_log_manager.cpp @@ -0,0 +1,165 @@ +/**************************************************************************** +** Meta object code from reading C++ file 'log_manager.h' +** +** Created by: The Qt Meta Object Compiler version 69 (Qt 6.10.3) +** +** WARNING! All changes made in this file will be lost! +*****************************************************************************/ + +#include "../../../../native/qt6/src/log_manager.h" +#include + +#include + +#include + + +#include +#if !defined(Q_MOC_OUTPUT_REVISION) +#error "The header file 'log_manager.h' doesn't include ." +#elif Q_MOC_OUTPUT_REVISION != 69 +#error "This file was generated using the moc from 6.10.3. It" +#error "cannot be used with the include files from this version of Qt." +#error "(The moc has changed too much.)" +#endif + +#ifndef Q_CONSTINIT +#define Q_CONSTINIT +#endif + +QT_WARNING_PUSH +QT_WARNING_DISABLE_DEPRECATED +QT_WARNING_DISABLE_GCC("-Wuseless-cast") +namespace { +struct qt_meta_tag_ZN10LogManagerE_t {}; +} // unnamed namespace + +template <> constexpr inline auto LogManager::qt_create_metaobjectdata() +{ + namespace QMC = QtMocConstants; + QtMocHelpers::StringRefStorage qt_stringData { + "LogManager", + "logsChanged", + "", + "logAdded", + "message", + "addLog", + "level", + "clear", + "logs" + }; + + QtMocHelpers::UintData qt_methods { + // Signal 'logsChanged' + QtMocHelpers::SignalData(1, 2, QMC::AccessPublic, QMetaType::Void), + // Signal 'logAdded' + QtMocHelpers::SignalData(3, 2, QMC::AccessPublic, QMetaType::Void, {{ + { QMetaType::QString, 4 }, + }}), + // Method 'addLog' + QtMocHelpers::MethodData(5, 2, QMC::AccessPublic, QMetaType::Void, {{ + { QMetaType::QString, 4 }, { QMetaType::QString, 6 }, + }}), + // Method 'addLog' + QtMocHelpers::MethodData(5, 2, QMC::AccessPublic | QMC::MethodCloned, QMetaType::Void, {{ + { QMetaType::QString, 4 }, + }}), + // Method 'clear' + QtMocHelpers::MethodData(7, 2, QMC::AccessPublic, QMetaType::Void), + }; + QtMocHelpers::UintData qt_properties { + // property 'logs' + QtMocHelpers::PropertyData(8, QMetaType::QStringList, QMC::DefaultPropertyFlags, 0), + }; + QtMocHelpers::UintData qt_enums { + }; + return QtMocHelpers::metaObjectData(QMC::MetaObjectFlag{}, qt_stringData, + qt_methods, qt_properties, qt_enums); +} +Q_CONSTINIT const QMetaObject LogManager::staticMetaObject = { { + QMetaObject::SuperData::link(), + qt_staticMetaObjectStaticContent.stringdata, + qt_staticMetaObjectStaticContent.data, + qt_static_metacall, + nullptr, + qt_staticMetaObjectRelocatingContent.metaTypes, + nullptr +} }; + +void LogManager::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) +{ + auto *_t = static_cast(_o); + if (_c == QMetaObject::InvokeMetaMethod) { + switch (_id) { + case 0: _t->logsChanged(); break; + case 1: _t->logAdded((*reinterpret_cast>(_a[1]))); break; + case 2: _t->addLog((*reinterpret_cast>(_a[1])),(*reinterpret_cast>(_a[2]))); break; + case 3: _t->addLog((*reinterpret_cast>(_a[1]))); break; + case 4: _t->clear(); break; + default: ; + } + } + if (_c == QMetaObject::IndexOfMethod) { + if (QtMocHelpers::indexOfMethod(_a, &LogManager::logsChanged, 0)) + return; + if (QtMocHelpers::indexOfMethod(_a, &LogManager::logAdded, 1)) + return; + } + if (_c == QMetaObject::ReadProperty) { + void *_v = _a[0]; + switch (_id) { + case 0: *reinterpret_cast(_v) = _t->logs(); break; + default: break; + } + } +} + +const QMetaObject *LogManager::metaObject() const +{ + return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject; +} + +void *LogManager::qt_metacast(const char *_clname) +{ + if (!_clname) return nullptr; + if (!strcmp(_clname, qt_staticMetaObjectStaticContent.strings)) + return static_cast(this); + return QObject::qt_metacast(_clname); +} + +int LogManager::qt_metacall(QMetaObject::Call _c, int _id, void **_a) +{ + _id = QObject::qt_metacall(_c, _id, _a); + if (_id < 0) + return _id; + if (_c == QMetaObject::InvokeMetaMethod) { + if (_id < 5) + qt_static_metacall(this, _c, _id, _a); + _id -= 5; + } + if (_c == QMetaObject::RegisterMethodArgumentMetaType) { + if (_id < 5) + *reinterpret_cast(_a[0]) = QMetaType(); + _id -= 5; + } + if (_c == QMetaObject::ReadProperty || _c == QMetaObject::WriteProperty + || _c == QMetaObject::ResetProperty || _c == QMetaObject::BindableProperty + || _c == QMetaObject::RegisterPropertyMetaType) { + qt_static_metacall(this, _c, _id, _a); + _id -= 1; + } + return _id; +} + +// SIGNAL 0 +void LogManager::logsChanged() +{ + QMetaObject::activate(this, &staticMetaObject, 0, nullptr); +} + +// SIGNAL 1 +void LogManager::logAdded(const QString & _t1) +{ + QMetaObject::activate(this, &staticMetaObject, 1, nullptr, _t1); +} +QT_WARNING_POP diff --git a/build-linux/tests/test_importer_autogen/deps b/build-linux/tests/test_importer_autogen/deps new file mode 100644 index 00000000..98880ee1 --- /dev/null +++ b/build-linux/tests/test_importer_autogen/deps @@ -0,0 +1,939 @@ +test_importer_autogen/timestamp: \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_importer_autogen/moc_predefs.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/db.cpp \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/db.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/file_utils.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/i_asset_database.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/importer.cpp \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/importer.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/log_manager.cpp \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/log_manager.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/sequence_detector.cpp \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/sequence_detector.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/CMakeLists.txt \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/test_importer.cpp \ + /usr/include/alloca.h \ + /usr/include/asm-generic/bitsperlong.h \ + /usr/include/asm-generic/errno-base.h \ + /usr/include/asm-generic/errno.h \ + /usr/include/asm-generic/int-ll64.h \ + /usr/include/asm-generic/posix_types.h \ + /usr/include/asm-generic/types.h \ + /usr/include/asm/bitsperlong.h \ + /usr/include/asm/errno.h \ + /usr/include/asm/posix_types.h \ + /usr/include/asm/posix_types_64.h \ + /usr/include/asm/types.h \ + /usr/include/asm/unistd.h \ + /usr/include/asm/unistd_64.h \ + /usr/include/assert.h \ + /usr/include/bits/atomic_wide_counter.h \ + /usr/include/bits/byteswap.h \ + /usr/include/bits/confname.h \ + /usr/include/bits/cpu-set.h \ + /usr/include/bits/endian.h \ + /usr/include/bits/endianness.h \ + /usr/include/bits/environments.h \ + /usr/include/bits/errno.h \ + /usr/include/bits/floatn-common.h \ + /usr/include/bits/floatn.h \ + /usr/include/bits/getopt_core.h \ + /usr/include/bits/getopt_posix.h \ + /usr/include/bits/libc-header-start.h \ + /usr/include/bits/local_lim.h \ + /usr/include/bits/locale.h \ + /usr/include/bits/long-double.h \ + /usr/include/bits/posix1_lim.h \ + /usr/include/bits/posix2_lim.h \ + /usr/include/bits/posix_opt.h \ + /usr/include/bits/pthread_stack_min-dynamic.h \ + /usr/include/bits/pthreadtypes-arch.h \ + /usr/include/bits/pthreadtypes.h \ + /usr/include/bits/sched.h \ + /usr/include/bits/select.h \ + /usr/include/bits/semaphore.h \ + /usr/include/bits/setjmp.h \ + /usr/include/bits/stdint-intn.h \ + /usr/include/bits/stdint-least.h \ + /usr/include/bits/stdint-uintn.h \ + /usr/include/bits/stdio_lim.h \ + /usr/include/bits/stdlib-float.h \ + /usr/include/bits/struct_mutex.h \ + /usr/include/bits/struct_rwlock.h \ + /usr/include/bits/syscall.h \ + /usr/include/bits/thread-shared-types.h \ + /usr/include/bits/time.h \ + /usr/include/bits/time64.h \ + /usr/include/bits/timesize.h \ + /usr/include/bits/timex.h \ + /usr/include/bits/types.h \ + /usr/include/bits/types/FILE.h \ + /usr/include/bits/types/__FILE.h \ + /usr/include/bits/types/__fpos64_t.h \ + /usr/include/bits/types/__fpos_t.h \ + /usr/include/bits/types/__locale_t.h \ + /usr/include/bits/types/__mbstate_t.h \ + /usr/include/bits/types/__sigset_t.h \ + /usr/include/bits/types/clock_t.h \ + /usr/include/bits/types/clockid_t.h \ + /usr/include/bits/types/cookie_io_functions_t.h \ + /usr/include/bits/types/error_t.h \ + /usr/include/bits/types/locale_t.h \ + /usr/include/bits/types/mbstate_t.h \ + /usr/include/bits/types/sigset_t.h \ + /usr/include/bits/types/struct_FILE.h \ + /usr/include/bits/types/struct___jmp_buf_tag.h \ + /usr/include/bits/types/struct_itimerspec.h \ + /usr/include/bits/types/struct_sched_param.h \ + /usr/include/bits/types/struct_timespec.h \ + /usr/include/bits/types/struct_timeval.h \ + /usr/include/bits/types/struct_tm.h \ + /usr/include/bits/types/time_t.h \ + /usr/include/bits/types/timer_t.h \ + /usr/include/bits/types/wint_t.h \ + /usr/include/bits/typesizes.h \ + /usr/include/bits/uintn-identity.h \ + /usr/include/bits/uio_lim.h \ + /usr/include/bits/unistd_ext.h \ + /usr/include/bits/waitflags.h \ + /usr/include/bits/waitstatus.h \ + /usr/include/bits/wchar.h \ + /usr/include/bits/wctype-wchar.h \ + /usr/include/bits/wordsize.h \ + /usr/include/bits/xopen_lim.h \ + /usr/include/c++/15/algorithm \ + /usr/include/c++/15/array \ + /usr/include/c++/15/atomic \ + /usr/include/c++/15/backward/auto_ptr.h \ + /usr/include/c++/15/backward/binders.h \ + /usr/include/c++/15/bit \ + /usr/include/c++/15/bits/algorithmfwd.h \ + /usr/include/c++/15/bits/align.h \ + /usr/include/c++/15/bits/alloc_traits.h \ + /usr/include/c++/15/bits/allocated_ptr.h \ + /usr/include/c++/15/bits/allocator.h \ + /usr/include/c++/15/bits/atomic_base.h \ + /usr/include/c++/15/bits/atomic_futex.h \ + /usr/include/c++/15/bits/atomic_lockfree_defines.h \ + /usr/include/c++/15/bits/atomic_timed_wait.h \ + /usr/include/c++/15/bits/atomic_wait.h \ + /usr/include/c++/15/bits/basic_ios.h \ + /usr/include/c++/15/bits/basic_ios.tcc \ + /usr/include/c++/15/bits/basic_string.h \ + /usr/include/c++/15/bits/basic_string.tcc \ + /usr/include/c++/15/bits/char_traits.h \ + /usr/include/c++/15/bits/charconv.h \ + /usr/include/c++/15/bits/chrono.h \ + /usr/include/c++/15/bits/chrono_io.h \ + /usr/include/c++/15/bits/codecvt.h \ + /usr/include/c++/15/bits/concept_check.h \ + /usr/include/c++/15/bits/cpp_type_traits.h \ + /usr/include/c++/15/bits/cxxabi_forced.h \ + /usr/include/c++/15/bits/cxxabi_init_exception.h \ + /usr/include/c++/15/bits/enable_special_members.h \ + /usr/include/c++/15/bits/erase_if.h \ + /usr/include/c++/15/bits/exception.h \ + /usr/include/c++/15/bits/exception_defines.h \ + /usr/include/c++/15/bits/exception_ptr.h \ + /usr/include/c++/15/bits/functexcept.h \ + /usr/include/c++/15/bits/functional_hash.h \ + /usr/include/c++/15/bits/hash_bytes.h \ + /usr/include/c++/15/bits/hashtable.h \ + /usr/include/c++/15/bits/hashtable_policy.h \ + /usr/include/c++/15/bits/invoke.h \ + /usr/include/c++/15/bits/ios_base.h \ + /usr/include/c++/15/bits/istream.tcc \ + /usr/include/c++/15/bits/iterator_concepts.h \ + /usr/include/c++/15/bits/list.tcc \ + /usr/include/c++/15/bits/locale_classes.h \ + /usr/include/c++/15/bits/locale_classes.tcc \ + /usr/include/c++/15/bits/locale_conv.h \ + /usr/include/c++/15/bits/locale_facets.h \ + /usr/include/c++/15/bits/locale_facets.tcc \ + /usr/include/c++/15/bits/locale_facets_nonio.h \ + /usr/include/c++/15/bits/locale_facets_nonio.tcc \ + /usr/include/c++/15/bits/localefwd.h \ + /usr/include/c++/15/bits/max_size_type.h \ + /usr/include/c++/15/bits/memory_resource.h \ + /usr/include/c++/15/bits/memoryfwd.h \ + /usr/include/c++/15/bits/move.h \ + /usr/include/c++/15/bits/nested_exception.h \ + /usr/include/c++/15/bits/new_allocator.h \ + /usr/include/c++/15/bits/node_handle.h \ + /usr/include/c++/15/bits/ostream.h \ + /usr/include/c++/15/bits/ostream.tcc \ + /usr/include/c++/15/bits/ostream_insert.h \ + /usr/include/c++/15/bits/parse_numbers.h \ + /usr/include/c++/15/bits/postypes.h \ + /usr/include/c++/15/bits/predefined_ops.h \ + /usr/include/c++/15/bits/ptr_traits.h \ + /usr/include/c++/15/bits/quoted_string.h \ + /usr/include/c++/15/bits/random.h \ + /usr/include/c++/15/bits/random.tcc \ + /usr/include/c++/15/bits/range_access.h \ + /usr/include/c++/15/bits/ranges_algo.h \ + /usr/include/c++/15/bits/ranges_algobase.h \ + /usr/include/c++/15/bits/ranges_base.h \ + /usr/include/c++/15/bits/ranges_cmp.h \ + /usr/include/c++/15/bits/ranges_uninitialized.h \ + /usr/include/c++/15/bits/ranges_util.h \ + /usr/include/c++/15/bits/refwrap.h \ + /usr/include/c++/15/bits/requires_hosted.h \ + /usr/include/c++/15/bits/semaphore_base.h \ + /usr/include/c++/15/bits/shared_ptr.h \ + /usr/include/c++/15/bits/shared_ptr_atomic.h \ + /usr/include/c++/15/bits/shared_ptr_base.h \ + /usr/include/c++/15/bits/specfun.h \ + /usr/include/c++/15/bits/sstream.tcc \ + /usr/include/c++/15/bits/std_abs.h \ + /usr/include/c++/15/bits/std_function.h \ + /usr/include/c++/15/bits/std_mutex.h \ + /usr/include/c++/15/bits/std_thread.h \ + /usr/include/c++/15/bits/stl_algo.h \ + /usr/include/c++/15/bits/stl_algobase.h \ + /usr/include/c++/15/bits/stl_bvector.h \ + /usr/include/c++/15/bits/stl_construct.h \ + /usr/include/c++/15/bits/stl_function.h \ + /usr/include/c++/15/bits/stl_heap.h \ + /usr/include/c++/15/bits/stl_iterator.h \ + /usr/include/c++/15/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/15/bits/stl_iterator_base_types.h \ + /usr/include/c++/15/bits/stl_list.h \ + /usr/include/c++/15/bits/stl_map.h \ + /usr/include/c++/15/bits/stl_multimap.h \ + /usr/include/c++/15/bits/stl_multiset.h \ + /usr/include/c++/15/bits/stl_numeric.h \ + /usr/include/c++/15/bits/stl_pair.h \ + /usr/include/c++/15/bits/stl_raw_storage_iter.h \ + /usr/include/c++/15/bits/stl_relops.h \ + /usr/include/c++/15/bits/stl_set.h \ + /usr/include/c++/15/bits/stl_tempbuf.h \ + /usr/include/c++/15/bits/stl_tree.h \ + /usr/include/c++/15/bits/stl_uninitialized.h \ + /usr/include/c++/15/bits/stl_vector.h \ + /usr/include/c++/15/bits/stream_iterator.h \ + /usr/include/c++/15/bits/streambuf.tcc \ + /usr/include/c++/15/bits/streambuf_iterator.h \ + /usr/include/c++/15/bits/string_view.tcc \ + /usr/include/c++/15/bits/stringfwd.h \ + /usr/include/c++/15/bits/this_thread_sleep.h \ + /usr/include/c++/15/bits/uniform_int_dist.h \ + /usr/include/c++/15/bits/unique_lock.h \ + /usr/include/c++/15/bits/unique_ptr.h \ + /usr/include/c++/15/bits/unordered_map.h \ + /usr/include/c++/15/bits/unordered_set.h \ + /usr/include/c++/15/bits/uses_allocator.h \ + /usr/include/c++/15/bits/uses_allocator_args.h \ + /usr/include/c++/15/bits/utility.h \ + /usr/include/c++/15/bits/vector.tcc \ + /usr/include/c++/15/bits/version.h \ + /usr/include/c++/15/cassert \ + /usr/include/c++/15/cctype \ + /usr/include/c++/15/cerrno \ + /usr/include/c++/15/charconv \ + /usr/include/c++/15/chrono \ + /usr/include/c++/15/climits \ + /usr/include/c++/15/clocale \ + /usr/include/c++/15/cmath \ + /usr/include/c++/15/compare \ + /usr/include/c++/15/concepts \ + /usr/include/c++/15/condition_variable \ + /usr/include/c++/15/cstddef \ + /usr/include/c++/15/cstdint \ + /usr/include/c++/15/cstdio \ + /usr/include/c++/15/cstdlib \ + /usr/include/c++/15/cstring \ + /usr/include/c++/15/ctime \ + /usr/include/c++/15/cwchar \ + /usr/include/c++/15/cwctype \ + /usr/include/c++/15/debug/assertions.h \ + /usr/include/c++/15/debug/debug.h \ + /usr/include/c++/15/exception \ + /usr/include/c++/15/experimental/source_location \ + /usr/include/c++/15/ext/aligned_buffer.h \ + /usr/include/c++/15/ext/alloc_traits.h \ + /usr/include/c++/15/ext/atomicity.h \ + /usr/include/c++/15/ext/concurrence.h \ + /usr/include/c++/15/ext/numeric_traits.h \ + /usr/include/c++/15/ext/string_conversions.h \ + /usr/include/c++/15/ext/type_traits.h \ + /usr/include/c++/15/filesystem \ + /usr/include/c++/15/format \ + /usr/include/c++/15/functional \ + /usr/include/c++/15/future \ + /usr/include/c++/15/initializer_list \ + /usr/include/c++/15/iomanip \ + /usr/include/c++/15/ios \ + /usr/include/c++/15/iosfwd \ + /usr/include/c++/15/istream \ + /usr/include/c++/15/iterator \ + /usr/include/c++/15/limits \ + /usr/include/c++/15/list \ + /usr/include/c++/15/locale \ + /usr/include/c++/15/map \ + /usr/include/c++/15/memory \ + /usr/include/c++/15/memory_resource \ + /usr/include/c++/15/mutex \ + /usr/include/c++/15/new \ + /usr/include/c++/15/numeric \ + /usr/include/c++/15/optional \ + /usr/include/c++/15/ostream \ + /usr/include/c++/15/pstl/execution_defs.h \ + /usr/include/c++/15/pstl/glue_numeric_defs.h \ + /usr/include/c++/15/pstl/pstl_config.h \ + /usr/include/c++/15/random \ + /usr/include/c++/15/ratio \ + /usr/include/c++/15/semaphore \ + /usr/include/c++/15/set \ + /usr/include/c++/15/shared_mutex \ + /usr/include/c++/15/source_location \ + /usr/include/c++/15/sstream \ + /usr/include/c++/15/stdexcept \ + /usr/include/c++/15/stop_token \ + /usr/include/c++/15/streambuf \ + /usr/include/c++/15/string \ + /usr/include/c++/15/string_view \ + /usr/include/c++/15/system_error \ + /usr/include/c++/15/tr1/bessel_function.tcc \ + /usr/include/c++/15/tr1/beta_function.tcc \ + /usr/include/c++/15/tr1/ell_integral.tcc \ + /usr/include/c++/15/tr1/exp_integral.tcc \ + /usr/include/c++/15/tr1/gamma.tcc \ + /usr/include/c++/15/tr1/hypergeometric.tcc \ + /usr/include/c++/15/tr1/legendre_function.tcc \ + /usr/include/c++/15/tr1/modified_bessel_func.tcc \ + /usr/include/c++/15/tr1/poly_hermite.tcc \ + /usr/include/c++/15/tr1/poly_laguerre.tcc \ + /usr/include/c++/15/tr1/riemann_zeta.tcc \ + /usr/include/c++/15/tr1/special_function_util.h \ + /usr/include/c++/15/tuple \ + /usr/include/c++/15/type_traits \ + /usr/include/c++/15/typeinfo \ + /usr/include/c++/15/unordered_map \ + /usr/include/c++/15/unordered_set \ + /usr/include/c++/15/utility \ + /usr/include/c++/15/variant \ + /usr/include/c++/15/vector \ + /usr/include/c++/15/version \ + /usr/include/c++/15/x86_64-redhat-linux/bits/atomic_word.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/c++allocator.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/c++config.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/c++locale.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/cpu_defines.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/ctype_base.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/ctype_inline.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/error_constants.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/gthr-default.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/gthr.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/messages_members.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/opt_random.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/os_defines.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/time_members.h \ + /usr/include/ctype.h \ + /usr/include/endian.h \ + /usr/include/errno.h \ + /usr/include/features-time64.h \ + /usr/include/features.h \ + /usr/include/gnu/stubs-64.h \ + /usr/include/gnu/stubs.h \ + /usr/include/libintl.h \ + /usr/include/limits.h \ + /usr/include/linux/close_range.h \ + /usr/include/linux/errno.h \ + /usr/include/linux/limits.h \ + /usr/include/linux/posix_types.h \ + /usr/include/linux/sched/types.h \ + /usr/include/linux/stddef.h \ + /usr/include/linux/types.h \ + /usr/include/locale.h \ + /usr/include/pthread.h \ + /usr/include/qt6/QtCore/QAbstractItemModel \ + /usr/include/qt6/QtCore/QDateTime \ + /usr/include/qt6/QtCore/QDeadlineTimer \ + /usr/include/qt6/QtCore/QDir \ + /usr/include/qt6/QtCore/QEvent \ + /usr/include/qt6/QtCore/QFile \ + /usr/include/qt6/QtCore/QFileInfo \ + /usr/include/qt6/QtCore/QHash \ + /usr/include/qt6/QtCore/QHashFunctions \ + /usr/include/qt6/QtCore/QList \ + /usr/include/qt6/QtCore/QMap \ + /usr/include/qt6/QtCore/QMargins \ + /usr/include/qt6/QtCore/QMetaEnum \ + /usr/include/qt6/QtCore/QMutex \ + /usr/include/qt6/QtCore/QObject \ + /usr/include/qt6/QtCore/QPair \ + /usr/include/qt6/QtCore/QRect \ + /usr/include/qt6/QtCore/QRegularExpression \ + /usr/include/qt6/QtCore/QSize \ + /usr/include/qt6/QtCore/QSizeF \ + /usr/include/qt6/QtCore/QString \ + /usr/include/qt6/QtCore/QStringList \ + /usr/include/qt6/QtCore/QTemporaryDir \ + /usr/include/qt6/QtCore/QTextStream \ + /usr/include/qt6/QtCore/QVariant \ + /usr/include/qt6/QtCore/QVector \ + /usr/include/qt6/QtCore/QtCore \ + /usr/include/qt6/QtCore/QtCoreDepends \ + /usr/include/qt6/QtCore/q17memory.h \ + /usr/include/qt6/QtCore/q20algorithm.h \ + /usr/include/qt6/QtCore/q20chrono.h \ + /usr/include/qt6/QtCore/q20functional.h \ + /usr/include/qt6/QtCore/q20iterator.h \ + /usr/include/qt6/QtCore/q20map.h \ + /usr/include/qt6/QtCore/q20memory.h \ + /usr/include/qt6/QtCore/q20type_traits.h \ + /usr/include/qt6/QtCore/q20utility.h \ + /usr/include/qt6/QtCore/q20vector.h \ + /usr/include/qt6/QtCore/q23functional.h \ + /usr/include/qt6/QtCore/q23type_traits.h \ + /usr/include/qt6/QtCore/q23utility.h \ + /usr/include/qt6/QtCore/q26numeric.h \ + /usr/include/qt6/QtCore/qabstractanimation.h \ + /usr/include/qt6/QtCore/qabstracteventdispatcher.h \ + /usr/include/qt6/QtCore/qabstractitemmodel.h \ + /usr/include/qt6/QtCore/qabstractnativeeventfilter.h \ + /usr/include/qt6/QtCore/qabstractproxymodel.h \ + /usr/include/qt6/QtCore/qalgorithms.h \ + /usr/include/qt6/QtCore/qalloc.h \ + /usr/include/qt6/QtCore/qanimationgroup.h \ + /usr/include/qt6/QtCore/qanystringview.h \ + /usr/include/qt6/QtCore/qapplicationstatic.h \ + /usr/include/qt6/QtCore/qarraydata.h \ + /usr/include/qt6/QtCore/qarraydataops.h \ + /usr/include/qt6/QtCore/qarraydatapointer.h \ + /usr/include/qt6/QtCore/qassert.h \ + /usr/include/qt6/QtCore/qassociativeiterable.h \ + /usr/include/qt6/QtCore/qatomic.h \ + /usr/include/qt6/QtCore/qatomic_cxx11.h \ + /usr/include/qt6/QtCore/qatomicscopedvaluerollback.h \ + /usr/include/qt6/QtCore/qbasicatomic.h \ + /usr/include/qt6/QtCore/qbasictimer.h \ + /usr/include/qt6/QtCore/qbindingstorage.h \ + /usr/include/qt6/QtCore/qbitarray.h \ + /usr/include/qt6/QtCore/qbuffer.h \ + /usr/include/qt6/QtCore/qbytearray.h \ + /usr/include/qt6/QtCore/qbytearrayalgorithms.h \ + /usr/include/qt6/QtCore/qbytearraylist.h \ + /usr/include/qt6/QtCore/qbytearraymatcher.h \ + /usr/include/qt6/QtCore/qbytearrayview.h \ + /usr/include/qt6/QtCore/qcache.h \ + /usr/include/qt6/QtCore/qcalendar.h \ + /usr/include/qt6/QtCore/qcborarray.h \ + /usr/include/qt6/QtCore/qcborcommon.h \ + /usr/include/qt6/QtCore/qcbormap.h \ + /usr/include/qt6/QtCore/qcborstream.h \ + /usr/include/qt6/QtCore/qcborstreamreader.h \ + /usr/include/qt6/QtCore/qcborstreamwriter.h \ + /usr/include/qt6/QtCore/qcborvalue.h \ + /usr/include/qt6/QtCore/qchar.h \ + /usr/include/qt6/QtCore/qcheckedint_impl.h \ + /usr/include/qt6/QtCore/qchronotimer.h \ + /usr/include/qt6/QtCore/qcollator.h \ + /usr/include/qt6/QtCore/qcommandlineoption.h \ + /usr/include/qt6/QtCore/qcommandlineparser.h \ + /usr/include/qt6/QtCore/qcompare.h \ + /usr/include/qt6/QtCore/qcompare_impl.h \ + /usr/include/qt6/QtCore/qcomparehelpers.h \ + /usr/include/qt6/QtCore/qcompilerdetection.h \ + /usr/include/qt6/QtCore/qconcatenatetablesproxymodel.h \ + /usr/include/qt6/QtCore/qconfig-64.h \ + /usr/include/qt6/QtCore/qconfig.h \ + /usr/include/qt6/QtCore/qconstructormacros.h \ + /usr/include/qt6/QtCore/qcontainerfwd.h \ + /usr/include/qt6/QtCore/qcontainerinfo.h \ + /usr/include/qt6/QtCore/qcontainertools_impl.h \ + /usr/include/qt6/QtCore/qcontiguouscache.h \ + /usr/include/qt6/QtCore/qcoreapplication.h \ + /usr/include/qt6/QtCore/qcoreapplication_platform.h \ + /usr/include/qt6/QtCore/qcoreevent.h \ + /usr/include/qt6/QtCore/qcryptographichash.h \ + /usr/include/qt6/QtCore/qdarwinhelpers.h \ + /usr/include/qt6/QtCore/qdatastream.h \ + /usr/include/qt6/QtCore/qdatetime.h \ + /usr/include/qt6/QtCore/qdeadlinetimer.h \ + /usr/include/qt6/QtCore/qdebug.h \ + /usr/include/qt6/QtCore/qdir.h \ + /usr/include/qt6/QtCore/qdiriterator.h \ + /usr/include/qt6/QtCore/qdirlisting.h \ + /usr/include/qt6/QtCore/qeasingcurve.h \ + /usr/include/qt6/QtCore/qelapsedtimer.h \ + /usr/include/qt6/QtCore/qendian.h \ + /usr/include/qt6/QtCore/qeventloop.h \ + /usr/include/qt6/QtCore/qexception.h \ + /usr/include/qt6/QtCore/qexceptionhandling.h \ + /usr/include/qt6/QtCore/qfactoryinterface.h \ + /usr/include/qt6/QtCore/qfile.h \ + /usr/include/qt6/QtCore/qfiledevice.h \ + /usr/include/qt6/QtCore/qfileinfo.h \ + /usr/include/qt6/QtCore/qfileselector.h \ + /usr/include/qt6/QtCore/qfilesystemwatcher.h \ + /usr/include/qt6/QtCore/qflags.h \ + /usr/include/qt6/QtCore/qfloat16.h \ + /usr/include/qt6/QtCore/qforeach.h \ + /usr/include/qt6/QtCore/qfunctionaltools_impl.h \ + /usr/include/qt6/QtCore/qfunctionpointer.h \ + /usr/include/qt6/QtCore/qfuture.h \ + /usr/include/qt6/QtCore/qfuture_impl.h \ + /usr/include/qt6/QtCore/qfutureinterface.h \ + /usr/include/qt6/QtCore/qfuturesynchronizer.h \ + /usr/include/qt6/QtCore/qfuturewatcher.h \ + /usr/include/qt6/QtCore/qgenericatomic.h \ + /usr/include/qt6/QtCore/qglobal.h \ + /usr/include/qt6/QtCore/qglobalstatic.h \ + /usr/include/qt6/QtCore/qhash.h \ + /usr/include/qt6/QtCore/qhashfunctions.h \ + /usr/include/qt6/QtCore/qidentityproxymodel.h \ + /usr/include/qt6/QtCore/qiodevice.h \ + /usr/include/qt6/QtCore/qiodevicebase.h \ + /usr/include/qt6/QtCore/qitemselectionmodel.h \ + /usr/include/qt6/QtCore/qiterable.h \ + /usr/include/qt6/QtCore/qiterator.h \ + /usr/include/qt6/QtCore/qjsonarray.h \ + /usr/include/qt6/QtCore/qjsondocument.h \ + /usr/include/qt6/QtCore/qjsonobject.h \ + /usr/include/qt6/QtCore/qjsonparseerror.h \ + /usr/include/qt6/QtCore/qjsonvalue.h \ + /usr/include/qt6/QtCore/qlatin1stringmatcher.h \ + /usr/include/qt6/QtCore/qlatin1stringview.h \ + /usr/include/qt6/QtCore/qlibrary.h \ + /usr/include/qt6/QtCore/qlibraryinfo.h \ + /usr/include/qt6/QtCore/qline.h \ + /usr/include/qt6/QtCore/qlist.h \ + /usr/include/qt6/QtCore/qlocale.h \ + /usr/include/qt6/QtCore/qlockfile.h \ + /usr/include/qt6/QtCore/qlogging.h \ + /usr/include/qt6/QtCore/qloggingcategory.h \ + /usr/include/qt6/QtCore/qmalloc.h \ + /usr/include/qt6/QtCore/qmap.h \ + /usr/include/qt6/QtCore/qmargins.h \ + /usr/include/qt6/QtCore/qmath.h \ + /usr/include/qt6/QtCore/qmessageauthenticationcode.h \ + /usr/include/qt6/QtCore/qmetacontainer.h \ + /usr/include/qt6/QtCore/qmetaobject.h \ + /usr/include/qt6/QtCore/qmetatype.h \ + /usr/include/qt6/QtCore/qmimedata.h \ + /usr/include/qt6/QtCore/qmimedatabase.h \ + /usr/include/qt6/QtCore/qmimetype.h \ + /usr/include/qt6/QtCore/qminmax.h \ + /usr/include/qt6/QtCore/qmutex.h \ + /usr/include/qt6/QtCore/qnamespace.h \ + /usr/include/qt6/QtCore/qnativeinterface.h \ + /usr/include/qt6/QtCore/qnumeric.h \ + /usr/include/qt6/QtCore/qobject.h \ + /usr/include/qt6/QtCore/qobject_impl.h \ + /usr/include/qt6/QtCore/qobjectcleanuphandler.h \ + /usr/include/qt6/QtCore/qobjectdefs.h \ + /usr/include/qt6/QtCore/qobjectdefs_impl.h \ + /usr/include/qt6/QtCore/qoperatingsystemversion.h \ + /usr/include/qt6/QtCore/qoverload.h \ + /usr/include/qt6/QtCore/qpair.h \ + /usr/include/qt6/QtCore/qparallelanimationgroup.h \ + /usr/include/qt6/QtCore/qpauseanimation.h \ + /usr/include/qt6/QtCore/qpermissions.h \ + /usr/include/qt6/QtCore/qplugin.h \ + /usr/include/qt6/QtCore/qpluginloader.h \ + /usr/include/qt6/QtCore/qpoint.h \ + /usr/include/qt6/QtCore/qpointer.h \ + /usr/include/qt6/QtCore/qprocess.h \ + /usr/include/qt6/QtCore/qprocessordetection.h \ + /usr/include/qt6/QtCore/qpromise.h \ + /usr/include/qt6/QtCore/qproperty.h \ + /usr/include/qt6/QtCore/qpropertyanimation.h \ + /usr/include/qt6/QtCore/qpropertyprivate.h \ + /usr/include/qt6/QtCore/qqueue.h \ + /usr/include/qt6/QtCore/qrandom.h \ + /usr/include/qt6/QtCore/qrangemodel.h \ + /usr/include/qt6/QtCore/qrangemodel_impl.h \ + /usr/include/qt6/QtCore/qreadwritelock.h \ + /usr/include/qt6/QtCore/qrect.h \ + /usr/include/qt6/QtCore/qrefcount.h \ + /usr/include/qt6/QtCore/qregularexpression.h \ + /usr/include/qt6/QtCore/qresource.h \ + /usr/include/qt6/QtCore/qresultstore.h \ + /usr/include/qt6/QtCore/qrunnable.h \ + /usr/include/qt6/QtCore/qsavefile.h \ + /usr/include/qt6/QtCore/qscopedpointer.h \ + /usr/include/qt6/QtCore/qscopedvaluerollback.h \ + /usr/include/qt6/QtCore/qscopeguard.h \ + /usr/include/qt6/QtCore/qsemaphore.h \ + /usr/include/qt6/QtCore/qsequentialanimationgroup.h \ + /usr/include/qt6/QtCore/qsequentialiterable.h \ + /usr/include/qt6/QtCore/qset.h \ + /usr/include/qt6/QtCore/qsettings.h \ + /usr/include/qt6/QtCore/qshareddata.h \ + /usr/include/qt6/QtCore/qshareddata_impl.h \ + /usr/include/qt6/QtCore/qsharedmemory.h \ + /usr/include/qt6/QtCore/qsharedpointer.h \ + /usr/include/qt6/QtCore/qsharedpointer_impl.h \ + /usr/include/qt6/QtCore/qsignalmapper.h \ + /usr/include/qt6/QtCore/qsimd.h \ + /usr/include/qt6/QtCore/qsize.h \ + /usr/include/qt6/QtCore/qsocketnotifier.h \ + /usr/include/qt6/QtCore/qsortfilterproxymodel.h \ + /usr/include/qt6/QtCore/qspan.h \ + /usr/include/qt6/QtCore/qstack.h \ + /usr/include/qt6/QtCore/qstandardpaths.h \ + /usr/include/qt6/QtCore/qstaticlatin1stringmatcher.h \ + /usr/include/qt6/QtCore/qstdlibdetection.h \ + /usr/include/qt6/QtCore/qstorageinfo.h \ + /usr/include/qt6/QtCore/qstring.h \ + /usr/include/qt6/QtCore/qstringalgorithms.h \ + /usr/include/qt6/QtCore/qstringbuilder.h \ + /usr/include/qt6/QtCore/qstringconverter.h \ + /usr/include/qt6/QtCore/qstringconverter_base.h \ + /usr/include/qt6/QtCore/qstringfwd.h \ + /usr/include/qt6/QtCore/qstringlist.h \ + /usr/include/qt6/QtCore/qstringlistmodel.h \ + /usr/include/qt6/QtCore/qstringliteral.h \ + /usr/include/qt6/QtCore/qstringmatcher.h \ + /usr/include/qt6/QtCore/qstringtokenizer.h \ + /usr/include/qt6/QtCore/qstringview.h \ + /usr/include/qt6/QtCore/qswap.h \ + /usr/include/qt6/QtCore/qsysinfo.h \ + /usr/include/qt6/QtCore/qsystemdetection.h \ + /usr/include/qt6/QtCore/qsystemsemaphore.h \ + /usr/include/qt6/QtCore/qtaggedpointer.h \ + /usr/include/qt6/QtCore/qtclasshelpermacros.h \ + /usr/include/qt6/QtCore/qtconfiginclude.h \ + /usr/include/qt6/QtCore/qtconfigmacros.h \ + /usr/include/qt6/QtCore/qtcore-config.h \ + /usr/include/qt6/QtCore/qtcoreexports.h \ + /usr/include/qt6/QtCore/qtcoreglobal.h \ + /usr/include/qt6/QtCore/qtcoreversion.h \ + /usr/include/qt6/QtCore/qtdeprecationdefinitions.h \ + /usr/include/qt6/QtCore/qtdeprecationmarkers.h \ + /usr/include/qt6/QtCore/qtemporarydir.h \ + /usr/include/qt6/QtCore/qtemporaryfile.h \ + /usr/include/qt6/QtCore/qtenvironmentvariables.h \ + /usr/include/qt6/QtCore/qtestsupport_core.h \ + /usr/include/qt6/QtCore/qtextboundaryfinder.h \ + /usr/include/qt6/QtCore/qtextstream.h \ + /usr/include/qt6/QtCore/qtformat_impl.h \ + /usr/include/qt6/QtCore/qthread.h \ + /usr/include/qt6/QtCore/qthreadpool.h \ + /usr/include/qt6/QtCore/qthreadstorage.h \ + /usr/include/qt6/QtCore/qtimeline.h \ + /usr/include/qt6/QtCore/qtimer.h \ + /usr/include/qt6/QtCore/qtimezone.h \ + /usr/include/qt6/QtCore/qtipccommon.h \ + /usr/include/qt6/QtCore/qtmetamacros.h \ + /usr/include/qt6/QtCore/qtmocconstants.h \ + /usr/include/qt6/QtCore/qtnoop.h \ + /usr/include/qt6/QtCore/qtpreprocessorsupport.h \ + /usr/include/qt6/QtCore/qtranslator.h \ + /usr/include/qt6/QtCore/qtransposeproxymodel.h \ + /usr/include/qt6/QtCore/qtresource.h \ + /usr/include/qt6/QtCore/qtsan_impl.h \ + /usr/include/qt6/QtCore/qtsymbolmacros.h \ + /usr/include/qt6/QtCore/qttranslation.h \ + /usr/include/qt6/QtCore/qttypetraits.h \ + /usr/include/qt6/QtCore/qtversion.h \ + /usr/include/qt6/QtCore/qtversionchecks.h \ + /usr/include/qt6/QtCore/qtypeinfo.h \ + /usr/include/qt6/QtCore/qtyperevision.h \ + /usr/include/qt6/QtCore/qtypes.h \ + /usr/include/qt6/QtCore/qurl.h \ + /usr/include/qt6/QtCore/qurlquery.h \ + /usr/include/qt6/QtCore/qutf8stringview.h \ + /usr/include/qt6/QtCore/quuid.h \ + /usr/include/qt6/QtCore/qvariant.h \ + /usr/include/qt6/QtCore/qvariantanimation.h \ + /usr/include/qt6/QtCore/qvarianthash.h \ + /usr/include/qt6/QtCore/qvariantlist.h \ + /usr/include/qt6/QtCore/qvariantmap.h \ + /usr/include/qt6/QtCore/qvarlengtharray.h \ + /usr/include/qt6/QtCore/qvector.h \ + /usr/include/qt6/QtCore/qversionnumber.h \ + /usr/include/qt6/QtCore/qversiontagging.h \ + /usr/include/qt6/QtCore/qwaitcondition.h \ + /usr/include/qt6/QtCore/qwineventnotifier.h \ + /usr/include/qt6/QtCore/qxmlstream.h \ + /usr/include/qt6/QtCore/qxpfunctional.h \ + /usr/include/qt6/QtCore/qxptype_traits.h \ + /usr/include/qt6/QtCore/qyieldcpu.h \ + /usr/include/qt6/QtGui/QBrush \ + /usr/include/qt6/QtGui/QColor \ + /usr/include/qt6/QtGui/QFont \ + /usr/include/qt6/QtGui/QIcon \ + /usr/include/qt6/QtGui/QImage \ + /usr/include/qt6/QtGui/QPixmap \ + /usr/include/qt6/QtGui/QTransform \ + /usr/include/qt6/QtGui/qaction.h \ + /usr/include/qt6/QtGui/qbitmap.h \ + /usr/include/qt6/QtGui/qbrush.h \ + /usr/include/qt6/QtGui/qcolor.h \ + /usr/include/qt6/QtGui/qcursor.h \ + /usr/include/qt6/QtGui/qevent.h \ + /usr/include/qt6/QtGui/qeventpoint.h \ + /usr/include/qt6/QtGui/qfont.h \ + /usr/include/qt6/QtGui/qfontinfo.h \ + /usr/include/qt6/QtGui/qfontmetrics.h \ + /usr/include/qt6/QtGui/qfontvariableaxis.h \ + /usr/include/qt6/QtGui/qguiapplication.h \ + /usr/include/qt6/QtGui/qguiapplication_platform.h \ + /usr/include/qt6/QtGui/qicon.h \ + /usr/include/qt6/QtGui/qimage.h \ + /usr/include/qt6/QtGui/qinputdevice.h \ + /usr/include/qt6/QtGui/qinputmethod.h \ + /usr/include/qt6/QtGui/qkeysequence.h \ + /usr/include/qt6/QtGui/qpaintdevice.h \ + /usr/include/qt6/QtGui/qpalette.h \ + /usr/include/qt6/QtGui/qpixelformat.h \ + /usr/include/qt6/QtGui/qpixmap.h \ + /usr/include/qt6/QtGui/qpointingdevice.h \ + /usr/include/qt6/QtGui/qpolygon.h \ + /usr/include/qt6/QtGui/qregion.h \ + /usr/include/qt6/QtGui/qrgb.h \ + /usr/include/qt6/QtGui/qrgba64.h \ + /usr/include/qt6/QtGui/qscreen.h \ + /usr/include/qt6/QtGui/qscreen_platform.h \ + /usr/include/qt6/QtGui/qsurface.h \ + /usr/include/qt6/QtGui/qsurfaceformat.h \ + /usr/include/qt6/QtGui/qtestsupport_gui.h \ + /usr/include/qt6/QtGui/qtgui-config.h \ + /usr/include/qt6/QtGui/qtguiexports.h \ + /usr/include/qt6/QtGui/qtguiglobal.h \ + /usr/include/qt6/QtGui/qtransform.h \ + /usr/include/qt6/QtGui/qvector2d.h \ + /usr/include/qt6/QtGui/qvector3d.h \ + /usr/include/qt6/QtGui/qvector4d.h \ + /usr/include/qt6/QtGui/qvectornd.h \ + /usr/include/qt6/QtGui/qwindow.h \ + /usr/include/qt6/QtGui/qwindowdefs.h \ + /usr/include/qt6/QtSql/QSqlDatabase \ + /usr/include/qt6/QtSql/QSqlError \ + /usr/include/qt6/QtSql/QSqlQuery \ + /usr/include/qt6/QtSql/qsqldatabase.h \ + /usr/include/qt6/QtSql/qsqlerror.h \ + /usr/include/qt6/QtSql/qsqlquery.h \ + /usr/include/qt6/QtSql/qtsql-config.h \ + /usr/include/qt6/QtSql/qtsqlexports.h \ + /usr/include/qt6/QtSql/qtsqlglobal.h \ + /usr/include/qt6/QtTest/QtTest \ + /usr/include/qt6/QtTest/QtTestDepends \ + /usr/include/qt6/QtTest/qabstractitemmodeltester.h \ + /usr/include/qt6/QtTest/qbenchmark.h \ + /usr/include/qt6/QtTest/qbenchmarkmetric.h \ + /usr/include/qt6/QtTest/qsignalspy.h \ + /usr/include/qt6/QtTest/qtest.h \ + /usr/include/qt6/QtTest/qtest_gui.h \ + /usr/include/qt6/QtTest/qtest_widgets.h \ + /usr/include/qt6/QtTest/qtestassert.h \ + /usr/include/qt6/QtTest/qtestcase.h \ + /usr/include/qt6/QtTest/qtestdata.h \ + /usr/include/qt6/QtTest/qtestevent.h \ + /usr/include/qt6/QtTest/qtesteventloop.h \ + /usr/include/qt6/QtTest/qtestkeyboard.h \ + /usr/include/qt6/QtTest/qtestmouse.h \ + /usr/include/qt6/QtTest/qtestspontaneevent.h \ + /usr/include/qt6/QtTest/qtestsystem.h \ + /usr/include/qt6/QtTest/qtesttostring.h \ + /usr/include/qt6/QtTest/qtesttouch.h \ + /usr/include/qt6/QtTest/qtestwheel.h \ + /usr/include/qt6/QtTest/qttestexports.h \ + /usr/include/qt6/QtTest/qttestglobal.h \ + /usr/include/qt6/QtTest/qttestlib-config.h \ + /usr/include/qt6/QtTest/qttestversion.h \ + /usr/include/qt6/QtWidgets/QApplication \ + /usr/include/qt6/QtWidgets/QSizePolicy \ + /usr/include/qt6/QtWidgets/qapplication.h \ + /usr/include/qt6/QtWidgets/qsizepolicy.h \ + /usr/include/qt6/QtWidgets/qtestsupport_widgets.h \ + /usr/include/qt6/QtWidgets/qtwidgets-config.h \ + /usr/include/qt6/QtWidgets/qtwidgetsexports.h \ + /usr/include/qt6/QtWidgets/qtwidgetsglobal.h \ + /usr/include/qt6/QtWidgets/qwidget.h \ + /usr/include/sched.h \ + /usr/include/semaphore.h \ + /usr/include/stdc-predef.h \ + /usr/include/stdint.h \ + /usr/include/stdio.h \ + /usr/include/stdlib.h \ + /usr/include/string.h \ + /usr/include/strings.h \ + /usr/include/sys/cdefs.h \ + /usr/include/sys/select.h \ + /usr/include/sys/single_threaded.h \ + /usr/include/sys/syscall.h \ + /usr/include/sys/time.h \ + /usr/include/sys/types.h \ + /usr/include/syscall.h \ + /usr/include/time.h \ + /usr/include/unistd.h \ + /usr/include/wchar.h \ + /usr/include/wctype.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/adxintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/amxavx512intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/amxbf16intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/amxcomplexintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/amxfp16intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/amxfp8intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/amxint8intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/amxmovrsintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/amxtf32intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/amxtileintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/amxtransposeintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2-512bf16intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2-512convertintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2-512mediaintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2-512minmaxintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2-512satcvtintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2bf16intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2convertintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2copyintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2mediaintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2minmaxintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2satcvtintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx2intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512bf16intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512bf16vlintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512bitalgintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512bitalgvlintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512bwintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512cdintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512dqintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512fintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512fp16intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512fp16vlintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512ifmaintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512ifmavlintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vbmi2intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vbmi2vlintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vbmiintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vbmivlintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vlbwintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vldqintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vlintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vnniintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vnnivlintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vp2intersectintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vp2intersectvlintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vpopcntdqintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vpopcntdqvlintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avxifmaintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avxintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avxneconvertintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avxvnniint16intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avxvnniint8intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avxvnniintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/bmi2intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/bmiintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/cetintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/cldemoteintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/clflushoptintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/clwbintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/clzerointrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/cmpccxaddintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/emmintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/enqcmdintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/f16cintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/fmaintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/fxsrintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/gfniintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/hresetintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/ia32intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/immintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/keylockerintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/lwpintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/lzcntintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/mm_malloc.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/mmintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/movdirintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/movrsintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/mwaitintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/mwaitxintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/pconfigintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/pkuintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/pmmintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/popcntintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/prfchiintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/prfchwintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/raointintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/rdseedintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/rtmintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/serializeintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/sgxintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/sha512intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/shaintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/sm3intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/sm4intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/smmintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/stdarg.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/stdbool.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/stddef.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/tbmintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/tmmintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/tsxldtrkintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/uintrintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/usermsrintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/vaesintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/vpclmulqdqintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/waitpkgintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/wbnoinvdintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/wmmintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/x86gprintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/xmmintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/xsavecintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/xsaveintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/xsaveoptintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/xsavesintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/xtestintrin.h \ + /usr/lib64/cmake/Qt6/Qt6Config.cmake \ + /usr/lib64/cmake/Qt6/Qt6ConfigExtras.cmake \ + /usr/lib64/cmake/Qt6/Qt6ConfigVersion.cmake \ + /usr/lib64/cmake/Qt6/Qt6ConfigVersionImpl.cmake \ + /usr/lib64/cmake/Qt6/Qt6Dependencies.cmake \ + /usr/lib64/cmake/Qt6/Qt6Targets.cmake \ + /usr/lib64/cmake/Qt6/Qt6VersionlessAliasTargets.cmake \ + /usr/lib64/cmake/Qt6/QtFeature.cmake \ + /usr/lib64/cmake/Qt6/QtFeatureCommon.cmake \ + /usr/lib64/cmake/Qt6/QtInstallPaths.cmake \ + /usr/lib64/cmake/Qt6/QtPublicAndroidHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicAppleHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicCMakeEarlyPolicyHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicCMakeHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicCMakeVersionHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicDependencyHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicExternalProjectHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicFinalizerHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicFindPackageHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicGitHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicPluginHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicPluginHelpers_v2.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomAttributionHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomBuildToolHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomCommonGenerationHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomCpeHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomCycloneDXHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomDepHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomDocumentNamespaceHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomExternalReferenceHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomFileHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomGenerationCycloneDXHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomGenerationHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomLicenseHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomOpsHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomPurlHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomPythonHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomQtEntityHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomRelationshipHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomSystemDepHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicTargetHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicTestHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicToolHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicWalkLibsHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicWindowsHelpers.cmake \ + /usr/lib64/cmake/Qt6Test/Qt6TestAdditionalTargetInfo.cmake \ + /usr/lib64/cmake/Qt6Test/Qt6TestConfig.cmake \ + /usr/lib64/cmake/Qt6Test/Qt6TestConfigVersion.cmake \ + /usr/lib64/cmake/Qt6Test/Qt6TestConfigVersionImpl.cmake \ + /usr/lib64/cmake/Qt6Test/Qt6TestDependencies.cmake \ + /usr/lib64/cmake/Qt6Test/Qt6TestTargets-relwithdebinfo.cmake \ + /usr/lib64/cmake/Qt6Test/Qt6TestTargets.cmake \ + /usr/lib64/cmake/Qt6Test/Qt6TestVersionlessAliasTargets.cmake \ + /usr/lib64/cmake/Qt6Test/QtTestProperties.cmake \ + /usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake \ + /usr/share/cmake/Modules/CheckCXXCompilerFlag.cmake \ + /usr/bin/cmake diff --git a/build-linux/tests/test_importer_autogen/include/test_importer.moc b/build-linux/tests/test_importer_autogen/include/test_importer.moc new file mode 100644 index 00000000..226933f7 --- /dev/null +++ b/build-linux/tests/test_importer_autogen/include/test_importer.moc @@ -0,0 +1,108 @@ +/**************************************************************************** +** Meta object code from reading C++ file 'test_importer.cpp' +** +** Created by: The Qt Meta Object Compiler version 69 (Qt 6.10.3) +** +** WARNING! All changes made in this file will be lost! +*****************************************************************************/ + +#include + +#include + +#include + + +#include +#if !defined(Q_MOC_OUTPUT_REVISION) +#error "The header file 'test_importer.cpp' doesn't include ." +#elif Q_MOC_OUTPUT_REVISION != 69 +#error "This file was generated using the moc from 6.10.3. It" +#error "cannot be used with the include files from this version of Qt." +#error "(The moc has changed too much.)" +#endif + +#ifndef Q_CONSTINIT +#define Q_CONSTINIT +#endif + +QT_WARNING_PUSH +QT_WARNING_DISABLE_DEPRECATED +QT_WARNING_DISABLE_GCC("-Wuseless-cast") +namespace { +struct qt_meta_tag_ZN12TestImporterE_t {}; +} // unnamed namespace + +template <> constexpr inline auto TestImporter::qt_create_metaobjectdata() +{ + namespace QMC = QtMocConstants; + QtMocHelpers::StringRefStorage qt_stringData { + "TestImporter", + "testImportFolder_basic", + "" + }; + + QtMocHelpers::UintData qt_methods { + // Slot 'testImportFolder_basic' + QtMocHelpers::SlotData(1, 2, QMC::AccessPrivate, QMetaType::Void), + }; + QtMocHelpers::UintData qt_properties { + }; + QtMocHelpers::UintData qt_enums { + }; + return QtMocHelpers::metaObjectData(QMC::MetaObjectFlag{}, qt_stringData, + qt_methods, qt_properties, qt_enums); +} +Q_CONSTINIT const QMetaObject TestImporter::staticMetaObject = { { + QMetaObject::SuperData::link(), + qt_staticMetaObjectStaticContent.stringdata, + qt_staticMetaObjectStaticContent.data, + qt_static_metacall, + nullptr, + qt_staticMetaObjectRelocatingContent.metaTypes, + nullptr +} }; + +void TestImporter::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) +{ + auto *_t = static_cast(_o); + if (_c == QMetaObject::InvokeMetaMethod) { + switch (_id) { + case 0: _t->testImportFolder_basic(); break; + default: ; + } + } + (void)_a; +} + +const QMetaObject *TestImporter::metaObject() const +{ + return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject; +} + +void *TestImporter::qt_metacast(const char *_clname) +{ + if (!_clname) return nullptr; + if (!strcmp(_clname, qt_staticMetaObjectStaticContent.strings)) + return static_cast(this); + return QObject::qt_metacast(_clname); +} + +int TestImporter::qt_metacall(QMetaObject::Call _c, int _id, void **_a) +{ + _id = QObject::qt_metacall(_c, _id, _a); + if (_id < 0) + return _id; + if (_c == QMetaObject::InvokeMetaMethod) { + if (_id < 1) + qt_static_metacall(this, _c, _id, _a); + _id -= 1; + } + if (_c == QMetaObject::RegisterMethodArgumentMetaType) { + if (_id < 1) + *reinterpret_cast(_a[0]) = QMetaType(); + _id -= 1; + } + return _id; +} +QT_WARNING_POP diff --git a/build-linux/tests/test_importer_autogen/moc_predefs.h b/build-linux/tests/test_importer_autogen/moc_predefs.h new file mode 100644 index 00000000..a397064b --- /dev/null +++ b/build-linux/tests/test_importer_autogen/moc_predefs.h @@ -0,0 +1,505 @@ +#define __DBL_MIN_EXP__ (-1021) +#define __LDBL_MANT_DIG__ 64 +#define __cpp_nontype_template_parameter_auto 201606L +#define __UINT_LEAST16_MAX__ 0xffff +#define __FLT16_HAS_QUIET_NAN__ 1 +#define __ATOMIC_ACQUIRE 2 +#define QT_TESTCASE_BUILDDIR "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests" +#define __FLT128_MAX_10_EXP__ 4932 +#define __FLT_MIN__ 1.17549435082228750796873653722224568e-38F +#define __GCC_IEC_559_COMPLEX 2 +#define __cpp_aggregate_nsdmi 201304L +#define __UINT_LEAST8_TYPE__ unsigned char +#define __SIZEOF_FLOAT80__ 16 +#define __BFLT16_DENORM_MIN__ 9.18354961579912115600575419704879436e-41BF16 +#define __cpp_impl_three_way_comparison 201907L +#define __INTMAX_C(c) c ## L +#define __CHAR_BIT__ 8 +#define __cpp_designated_initializers 201707L +#define __UINT8_MAX__ 0xff +#define __SCHAR_WIDTH__ 8 +#define __WINT_MAX__ 0xffffffffU +#define __FLT32_MIN_EXP__ (-125) +#define __cpp_static_assert 201411L +#define __BFLT16_MIN_10_EXP__ (-37) +#define __cpp_inheriting_constructors 201511L +#define QT_GUI_LIB 1 +#define __ORDER_LITTLE_ENDIAN__ 1234 +#define __WCHAR_MAX__ 0x7fffffff +#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_2 1 +#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_4 1 +#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_8 1 +#define __GCC_ATOMIC_CHAR_LOCK_FREE 2 +#define __GCC_IEC_559 2 +#define __FLT32X_DECIMAL_DIG__ 17 +#define TLRENDER_OIIO 1 +#define __FLT_EVAL_METHOD__ 0 +#define __cpp_binary_literals 201304L +#define __FLT64_DECIMAL_DIG__ 17 +#define __cpp_noexcept_function_type 201510L +#define __GCC_ATOMIC_CHAR32_T_LOCK_FREE 2 +#define __cpp_variadic_templates 200704L +#define __UINT_FAST64_MAX__ 0xffffffffffffffffUL +#define __SIG_ATOMIC_TYPE__ int +#define __DBL_MIN_10_EXP__ (-307) +#define __FINITE_MATH_ONLY__ 0 +#define __cpp_variable_templates 201304L +#define __FLT32X_MAX_EXP__ 1024 +#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_1 1 +#define __FLT32_HAS_DENORM__ 1 +#define __UINT_FAST8_MAX__ 0xff +#define __cpp_rvalue_reference 200610L +#define __cpp_nested_namespace_definitions 201411L +#define __DEC64_MAX_EXP__ 385 +#define __INT8_C(c) c +#define __LDBL_HAS_INFINITY__ 1 +#define __INT_LEAST8_WIDTH__ 8 +#define __cpp_variadic_using 201611L +#define __UINT_LEAST64_MAX__ 0xffffffffffffffffUL +#define __INT_LEAST8_MAX__ 0x7f +#define __cpp_attributes 200809L +#define __cpp_capture_star_this 201603L +#define __SHRT_MAX__ 0x7fff +#define __LDBL_MAX__ 1.18973149535723176502126385303097021e+4932L +#define __cpp_impl_coroutine 201902L +#define __FLT64X_MAX_10_EXP__ 4932 +#define __cpp_if_constexpr 201606L +#define __BFLT16_MAX_10_EXP__ 38 +#define __BFLT16_MAX_EXP__ 128 +#define __LDBL_IS_IEC_60559__ 1 +#define QT_NO_DEBUG 1 +#define __FLT64X_HAS_QUIET_NAN__ 1 +#define QT_TESTLIB_LIB 1 +#define TLRENDER_SDL2 1 +#define __UINT_LEAST8_MAX__ 0xff +#define __GCC_ATOMIC_BOOL_LOCK_FREE 2 +#define __FLT128_DENORM_MIN__ 6.47517511943802511092443895822764655e-4966F128 +#define __UINTMAX_TYPE__ long unsigned int +#define __cpp_nsdmi 200809L +#define __BFLT16_DECIMAL_DIG__ 4 +#define __linux 1 +#define __DEC32_EPSILON__ 1E-6DF +#define __FLT_EVAL_METHOD_TS_18661_3__ 0 +#define __UINT32_MAX__ 0xffffffffU +#define __GXX_EXPERIMENTAL_CXX0X__ 1 +#define __DBL_DENORM_MIN__ double(4.94065645841246544176568792868221372e-324L) +#define __FLT128_MIN_EXP__ (-16381) +#define __DEC64X_MAX_EXP__ 6145 +#define __WINT_MIN__ 0U +#define __FLT128_MIN_10_EXP__ (-4931) +#define __FLT32X_IS_IEC_60559__ 1 +#define __INT_LEAST16_WIDTH__ 16 +#define __SCHAR_MAX__ 0x7f +#define __FLT128_MANT_DIG__ 113 +#define __WCHAR_MIN__ (-__WCHAR_MAX__ - 1) +#define __INT64_C(c) c ## L +#define __cpp_impl_destroying_delete 201806L +#define __GCC_ATOMIC_POINTER_LOCK_FREE 2 +#define TLRENDER_JPEG 1 +#define __ATOMIC_SEQ_CST 5 +#define __unix 1 +#define __INT_LEAST64_MAX__ 0x7fffffffffffffffL +#define __FLT32X_MANT_DIG__ 53 +#define __GCC_ATOMIC_CHAR16_T_LOCK_FREE 2 +#define __cpp_aligned_new 201606L +#define __FLT32_MAX_10_EXP__ 38 +#define __FLT64X_EPSILON__ 1.08420217248550443400745280086994171e-19F64x +#define __STDC_HOSTED__ 1 +#define __DEC64_MIN_EXP__ (-382) +#define TLRENDER_PNG 1 +#define __cpp_decltype_auto 201304L +#define __DBL_DIG__ 15 +#define __STDC_EMBED_EMPTY__ 2 +#define __FLT_EPSILON__ 1.19209289550781250000000000000000000e-7F +#define __cpp_char8_t 202207L +#define __GXX_WEAK__ 1 +#define __SHRT_WIDTH__ 16 +#define __FLT32_IS_IEC_60559__ 1 +#define __LDBL_MIN__ 3.36210314311209350626267781732175260e-4932L +#define __DBL_IS_IEC_60559__ 1 +#define __DEC32_MAX__ 9.999999E96DF +#define __CHAR8_TYPE__ unsigned char +#define __cpp_threadsafe_static_init 200806L +#define __cpp_enumerator_attributes 201411L +#define TLRENDER_EXR 1 +#define __FLT64X_DENORM_MIN__ 3.64519953188247460252840593361941982e-4951F64x +#define __FLT32X_HAS_INFINITY__ 1 +#define __unix__ 1 +#define __INT_WIDTH__ 32 +#define __STDC_IEC_559__ 1 +#define __STDC_ISO_10646__ 201706L +#define __GCC_ATOMIC_CHAR8_T_LOCK_FREE 2 +#define __DECIMAL_DIG__ 21 +#define __STDC_IEC_559_COMPLEX__ 1 +#define __FLT64_EPSILON__ 2.22044604925031308084726333618164062e-16F64 +#define __gnu_linux__ 1 +#define __INT16_MAX__ 0x7fff +#define __FLT64_MIN_EXP__ (-1021) +#define __cpp_using_enum 201907L +#define __DEC64X_EPSILON__ 1E-33D64x +#define __FLT64X_MIN_10_EXP__ (-4931) +#define __LDBL_HAS_QUIET_NAN__ 1 +#define __FLT16_MIN_EXP__ (-13) +#define __FLT64_MANT_DIG__ 53 +#define __cpp_consteval 202211L +#define __FLT64X_MANT_DIG__ 64 +#define FTK_API_GL_4_1 1 +#define __BFLT16_DIG__ 2 +#define __GNUC__ 15 +#define __GXX_RTTI 1 +#define TLRENDER_FFMPEG_PLUGIN 1 +#define __MMX__ 1 +#define __FLT_HAS_DENORM__ 1 +#define __SIZEOF_LONG_DOUBLE__ 16 +#define __BIGGEST_ALIGNMENT__ 16 +#define __STDC_UTF_16__ 1 +#define __FLT64_MAX_10_EXP__ 308 +#define __BFLT16_IS_IEC_60559__ 0 +#define __FLT16_MAX_10_EXP__ 4 +#define __cpp_delegating_constructors 200604L +#define __DBL_MAX__ double(1.79769313486231570814527423731704357e+308L) +#define __cpp_raw_strings 200710L +#define __INT_FAST32_MAX__ 0x7fffffffffffffffL +#define __DBL_HAS_INFINITY__ 1 +#define __INT64_MAX__ 0x7fffffffffffffffL +#define __SIZEOF_FLOAT__ 4 +#define __HAVE_SPECULATION_SAFE_VALUE 1 +#define __cpp_fold_expressions 201603L +#define __DEC32_MIN_EXP__ (-94) +#define __INTPTR_WIDTH__ 64 +#define __UINT_LEAST32_MAX__ 0xffffffffU +#define __FLT32X_HAS_DENORM__ 1 +#define __INT_FAST16_TYPE__ long int +#define __MMX_WITH_SSE__ 1 +#define __LDBL_HAS_DENORM__ 1 +#define QT_WIDGETS_LIB 1 +#define __SEG_GS 1 +#define __BFLT16_EPSILON__ 7.81250000000000000000000000000000000e-3BF16 +#define __cplusplus 202002L +#define __cpp_ref_qualifiers 200710L +#define __DEC32_MIN__ 1E-95DF +#define __DEPRECATED 1 +#define __cpp_rvalue_references 200610L +#define __DBL_MAX_EXP__ 1024 +#define __WCHAR_WIDTH__ 32 +#define __FLT32_MAX__ 3.40282346638528859811704183484516925e+38F32 +#define __DEC128_EPSILON__ 1E-33DL +#define __FLT16_DECIMAL_DIG__ 5 +#define __SSE2_MATH__ 1 +#define __ATOMIC_HLE_RELEASE 131072 +#define __PTRDIFF_MAX__ 0x7fffffffffffffffL +#define __amd64 1 +#define __DEC64X_MAX__ 9.999999999999999999999999999999999E6144D64x +#define __ATOMIC_HLE_ACQUIRE 65536 +#define __GNUG__ 15 +#define __LONG_LONG_MAX__ 0x7fffffffffffffffLL +#define __SIZEOF_SIZE_T__ 8 +#define __BFLT16_HAS_INFINITY__ 1 +#define __FLT64X_MIN_EXP__ (-16381) +#define __SIZEOF_WINT_T__ 4 +#define __FLT32X_DIG__ 15 +#define __LONG_LONG_WIDTH__ 64 +#define QT_TESTCASE_SOURCEDIR "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests" +#define __cpp_initializer_lists 200806L +#define __FLT32_MAX_EXP__ 128 +#define ABI_ID "ELF" +#define __cpp_hex_float 201603L +#define __GXX_ABI_VERSION 1020 +#define __FLT_MIN_EXP__ (-125) +#define __GCC_HAVE_DWARF2_CFI_ASM 1 +#define TLRENDER_OCIO 1 +#define __x86_64 1 +#define __cpp_lambdas 200907L +#define __INT_FAST64_TYPE__ long int +#define __BFLT16_MAX__ 3.38953138925153547590470800371487867e+38BF16 +#define __FLT64_DENORM_MIN__ 4.94065645841246544176568792868221372e-324F64 +#define __cpp_template_auto 201606L +#define __FLT16_DENORM_MIN__ 5.96046447753906250000000000000000000e-8F16 +#define __FLT128_EPSILON__ 1.92592994438723585305597794258492732e-34F128 +#define __FLT64X_NORM_MAX__ 1.18973149535723176502126385303097021e+4932F64x +#define __SIZEOF_POINTER__ 8 +#define __SIZE_TYPE__ long unsigned int +#define __LP64__ 1 +#define __DBL_HAS_QUIET_NAN__ 1 +#define __FLT32X_EPSILON__ 2.22044604925031308084726333618164062e-16F32x +#define __LDBL_MAX_EXP__ 16384 +#define __DECIMAL_BID_FORMAT__ 1 +#define __FLT64_MIN_10_EXP__ (-307) +#define __FLT16_MIN_10_EXP__ (-4) +#define __FLT64X_DECIMAL_DIG__ 21 +#define __DEC128_MIN__ 1E-6143DL +#define __REGISTER_PREFIX__ +#define __UINT16_MAX__ 0xffff +#define __FLT128_HAS_INFINITY__ 1 +#define __FLT32_MIN__ 1.17549435082228750796873653722224568e-38F32 +#define __UINT8_TYPE__ unsigned char +#define __FLT_DIG__ 6 +#define __NO_INLINE__ 1 +#define __DEC_EVAL_METHOD__ 2 +#define __FLT_MANT_DIG__ 24 +#define __LDBL_DECIMAL_DIG__ 21 +#define __VERSION__ "15.2.1 20260123 (Red Hat 15.2.1-7)" +#define __UINT64_C(c) c ## UL +#define __cpp_unicode_characters 201411L +#define __DEC64X_MIN__ 1E-6143D64x +#define _STDC_PREDEF_H 1 +#define __INT_LEAST32_MAX__ 0x7fffffff +#define __GCC_ATOMIC_INT_LOCK_FREE 2 +#define __FLT128_MAX_EXP__ 16384 +#define __cpp_conditional_explicit 201806L +#define __FLT32_MANT_DIG__ 24 +#define __cpp_decltype 200707L +#define __FLOAT_WORD_ORDER__ __ORDER_LITTLE_ENDIAN__ +#define SIZEOF_DPTR (sizeof(void*)) +#define __FLT32X_MIN_EXP__ (-1021) +#define __cpp_aggregate_paren_init 201902L +#define __STDC_IEC_60559_COMPLEX__ 201404L +#define __cpp_aggregate_bases 201603L +#define __BFLT16_MIN__ 1.17549435082228750796873653722224568e-38BF16 +#define __FLT128_HAS_DENORM__ 1 +#define __FLT32_DECIMAL_DIG__ 9 +#define __FLT128_DIG__ 33 +#define __INT32_C(c) c +#define __DEC64_EPSILON__ 1E-15DD +#define __ORDER_PDP_ENDIAN__ 3412 +#define __DEC128_MIN_EXP__ (-6142) +#define __DEC128_MAX__ 9.999999999999999999999999999999999E6144DL +#define __cpp_constinit 201907L +#define __INT_FAST32_TYPE__ long int +#define __UINT_LEAST16_TYPE__ short unsigned int +#define __DEC64X_MANT_DIG__ 34 +#define __DEC128_MAX_EXP__ 6145 +#define unix 1 +#define __DBL_HAS_DENORM__ 1 +#define __cpp_rtti 199711L +#define __UINT64_MAX__ 0xffffffffffffffffUL +#define __FLT_IS_IEC_60559__ 1 +#define __GNUC_WIDE_EXECUTION_CHARSET_NAME "UTF-32LE" +#define __FLT64X_DIG__ 18 +#define __INT8_TYPE__ signed char +#define __cpp_digit_separators 201309L +#define __ELF__ 1 +#define __GCC_ASM_FLAG_OUTPUTS__ 1 +#define __UINT32_TYPE__ unsigned int +#define __BFLT16_HAS_QUIET_NAN__ 1 +#define __FLT_RADIX__ 2 +#define __INT_LEAST16_TYPE__ short int +#define __LDBL_EPSILON__ 1.08420217248550443400745280086994171e-19L +#define __UINTMAX_C(c) c ## UL +#define __GNUC_RH_RELEASE__ 7 +#define __FLT16_DIG__ 3 +#define __k8 1 +#define __FLT32X_MIN__ 2.22507385850720138309023271733240406e-308F32x +#define __SIG_ATOMIC_MAX__ 0x7fffffff +#define __cpp_constexpr 202002L +#define __GCC_ATOMIC_WCHAR_T_LOCK_FREE 2 +#define __USER_LABEL_PREFIX__ +#define __STDC_IEC_60559_BFP__ 201404L +#define __SIZEOF_PTRDIFF_T__ 8 +#define __FLT64X_HAS_INFINITY__ 1 +#define __SIZEOF_LONG__ 8 +#define __LDBL_DIG__ 18 +#define __FLT64_IS_IEC_60559__ 1 +#define __x86_64__ 1 +#define __FLT16_IS_IEC_60559__ 1 +#define __FLT16_MAX_EXP__ 16 +#define __DEC32_SUBNORMAL_MIN__ 0.000001E-95DF +#define __STDC_EMBED_FOUND__ 1 +#define __INT_FAST16_MAX__ 0x7fffffffffffffffL +#define __GCC_CONSTRUCTIVE_SIZE 64 +#define __FLT64_DIG__ 15 +#define __UINT_FAST32_MAX__ 0xffffffffffffffffUL +#define __UINT_LEAST64_TYPE__ long unsigned int +#define __FLT16_EPSILON__ 9.76562500000000000000000000000000000e-4F16 +#define __FLT_HAS_QUIET_NAN__ 1 +#define __FLT_MAX_10_EXP__ 38 +#define __FLT64X_HAS_DENORM__ 1 +#define __DEC128_SUBNORMAL_MIN__ 0.000000000000000000000000000000001E-6143DL +#define __FLT_HAS_INFINITY__ 1 +#define __GNUC_EXECUTION_CHARSET_NAME "UTF-8" +#define __cpp_unicode_literals 200710L +#define __UINT_FAST16_TYPE__ long unsigned int +#define __DEC64_MAX__ 9.999999999999999E384DD +#define __STDC_EMBED_NOT_FOUND__ 0 +#define __INT_FAST32_WIDTH__ 64 +#define __CHAR16_TYPE__ short unsigned int +#define __PRAGMA_REDEFINE_EXTNAME 1 +#define __DEC64X_SUBNORMAL_MIN__ 0.000000000000000000000000000000001E-6143D64x +#define __SIZE_WIDTH__ 64 +#define __SEG_FS 1 +#define __INT_LEAST16_MAX__ 0x7fff +#define __FLT16_NORM_MAX__ 6.55040000000000000000000000000000000e+4F16 +#define __DEC64_MANT_DIG__ 16 +#define __FLT32_DENORM_MIN__ 1.40129846432481707092372958328991613e-45F32 +#define __SIG_ATOMIC_WIDTH__ 32 +#define __GCC_DESTRUCTIVE_SIZE 64 +#define __INT_LEAST64_TYPE__ long int +#define __INT16_TYPE__ short int +#define __INT_LEAST8_TYPE__ signed char +#define __FLT16_MAX__ 6.55040000000000000000000000000000000e+4F16 +#define __FLT128_MIN__ 3.36210314311209350626267781732175260e-4932F128 +#define __cpp_structured_bindings 201606L +#define __SIZEOF_INT__ 4 +#define __DEC32_MAX_EXP__ 97 +#define __INT_FAST8_MAX__ 0x7f +#define __FLT128_MAX__ 1.18973149535723176508575932662800702e+4932F128 +#define __INTPTR_MAX__ 0x7fffffffffffffffL +#define __cpp_sized_deallocation 201309L +#define __cpp_guaranteed_copy_elision 201606L +#define linux 1 +#define __FLT64_HAS_QUIET_NAN__ 1 +#define __FLT32_MIN_10_EXP__ (-37) +#define __EXCEPTIONS 1 +#define __UINT16_C(c) c +#define __PTRDIFF_WIDTH__ 64 +#define __cpp_range_based_for 201603L +#define __INT_FAST16_WIDTH__ 64 +#define __FLT64_HAS_INFINITY__ 1 +#define __FLT64X_MAX__ 1.18973149535723176502126385303097021e+4932F64x +#define __FLT16_HAS_INFINITY__ 1 +#define __STDCPP_DEFAULT_NEW_ALIGNMENT__ 16 +#define __SIG_ATOMIC_MIN__ (-__SIG_ATOMIC_MAX__ - 1) +#define __code_model_small__ 1 +#define __GCC_ATOMIC_LONG_LOCK_FREE 2 +#define __cpp_nontype_template_args 201911L +#define __DEC32_MANT_DIG__ 7 +#define __k8__ 1 +#define __INTPTR_TYPE__ long int +#define __UINT16_TYPE__ short unsigned int +#define __WCHAR_TYPE__ int +#define __UINTPTR_MAX__ 0xffffffffffffffffUL +#define __INT_FAST64_WIDTH__ 64 +#define __cpp_nontype_template_parameter_class 201806L +#define __cpp_concepts 202002L +#define __INT_FAST64_MAX__ 0x7fffffffffffffffL +#define __GCC_ATOMIC_TEST_AND_SET_TRUEVAL 1 +#define __FLT_NORM_MAX__ 3.40282346638528859811704183484516925e+38F +#define __FLT32_HAS_INFINITY__ 1 +#define __FLT64X_MAX_EXP__ 16384 +#define __UINT_FAST64_TYPE__ long unsigned int +#define __cpp_constexpr_in_decltype 201711L +#define __cpp_inline_variables 201606L +#define __BFLT16_MIN_EXP__ (-125) +#define __INT_MAX__ 0x7fffffff +#define __linux__ 1 +#define __INT64_TYPE__ long int +#define __FLT_MAX_EXP__ 128 +#define __ORDER_BIG_ENDIAN__ 4321 +#define __DBL_MANT_DIG__ 53 +#define QT_CORE_LIB 1 +#define __SIZEOF_FLOAT128__ 16 +#define __BFLT16_MANT_DIG__ 8 +#define __DEC64_MIN__ 1E-383DD +#define __WINT_TYPE__ unsigned int +#define __UINT_LEAST32_TYPE__ unsigned int +#define __SIZEOF_SHORT__ 2 +#define __FLT32_NORM_MAX__ 3.40282346638528859811704183484516925e+38F32 +#define __SSE__ 1 +#define __LDBL_MIN_EXP__ (-16381) +#define __FLT64_MAX__ 1.79769313486231570814527423731704357e+308F64 +#define __DEC64X_MIN_EXP__ (-6142) +#define __amd64__ 1 +#define __WINT_WIDTH__ 32 +#define __INT_LEAST64_WIDTH__ 64 +#define __FLT32X_MAX_10_EXP__ 308 +#define __cpp_namespace_attributes 201411L +#define __SIZEOF_INT128__ 16 +#define __FLT16_MIN__ 6.10351562500000000000000000000000000e-5F16 +#define __FLT64X_IS_IEC_60559__ 1 +#define __GXX_CONSTEXPR_ASM__ 1 +#define __LDBL_MAX_10_EXP__ 4932 +#define __ATOMIC_RELAXED 0 +#define __DBL_EPSILON__ double(2.22044604925031308084726333618164062e-16L) +#define __INT_LEAST32_TYPE__ int +#define _LP64 1 +#define __UINT8_C(c) c +#define __FLT64_MAX_EXP__ 1024 +#define __cpp_return_type_deduction 201304L +#define __SIZEOF_WCHAR_T__ 4 +#define __GNUC_PATCHLEVEL__ 1 +#define __FLT128_NORM_MAX__ 1.18973149535723176508575932662800702e+4932F128 +#define __FLT64_NORM_MAX__ 1.79769313486231570814527423731704357e+308F64 +#define __FLT128_HAS_QUIET_NAN__ 1 +#define __INTMAX_MAX__ 0x7fffffffffffffffL +#define TLRENDER_TIFF 1 +#define __INT_FAST8_TYPE__ signed char +#define __FLT64X_MIN__ 3.36210314311209350626267781732175260e-4932F64x +#define QT_SQL_LIB 1 +#define __STDCPP_THREADS__ 1 +#define __BFLT16_HAS_DENORM__ 1 +#define __GNUC_STDC_INLINE__ 1 +#define __FLT64_HAS_DENORM__ 1 +#define __FLT32_EPSILON__ 1.19209289550781250000000000000000000e-7F32 +#define __FLT16_HAS_DENORM__ 1 +#define __DBL_DECIMAL_DIG__ 17 +#define __STDC_UTF_32__ 1 +#define __INT_FAST8_WIDTH__ 8 +#define __FXSR__ 1 +#define __FLT32X_MAX__ 1.79769313486231570814527423731704357e+308F32x +#define __DBL_NORM_MAX__ double(1.79769313486231570814527423731704357e+308L) +#define __BYTE_ORDER__ __ORDER_LITTLE_ENDIAN__ +#define TLRENDER_FFMPEG 1 +#define __INTMAX_WIDTH__ 64 +#define __cpp_runtime_arrays 198712L +#define __FLT32_DIG__ 6 +#define __UINT64_TYPE__ long unsigned int +#define __UINT32_C(c) c ## U +#define __cpp_alias_templates 200704L +#define __cpp_constexpr_dynamic_alloc 201907L +#define __FLT_DENORM_MIN__ 1.40129846432481707092372958328991613e-45F +#define __FLT128_IS_IEC_60559__ 1 +#define __INT8_MAX__ 0x7f +#define __LONG_WIDTH__ 64 +#define __DBL_MIN__ double(2.22507385850720138309023271733240406e-308L) +#define __INT32_MAX__ 0x7fffffff +#define __UINT_FAST32_TYPE__ long unsigned int +#define __FLT16_MANT_DIG__ 11 +#define __FLT32X_NORM_MAX__ 1.79769313486231570814527423731704357e+308F32x +#define __CHAR32_TYPE__ unsigned int +#define __FLT_MAX__ 3.40282346638528859811704183484516925e+38F +#define __SSE2__ 1 +#define __cpp_deduction_guides 201907L +#define __BFLT16_NORM_MAX__ 3.38953138925153547590470800371487867e+38BF16 +#define __INT32_TYPE__ int +#define __SIZEOF_DOUBLE__ 8 +#define __cpp_exceptions 199711L +#define __FLT_MIN_10_EXP__ (-37) +#define __FLT64_MIN__ 2.22507385850720138309023271733240406e-308F64 +#define __INT_LEAST32_WIDTH__ 32 +#define __INTMAX_TYPE__ long int +#define __GLIBCXX_BITSIZE_INT_N_0 128 +#define __FLT32X_HAS_QUIET_NAN__ 1 +#define __ATOMIC_CONSUME 1 +#define __GNUC_MINOR__ 2 +#define __GLIBCXX_TYPE_INT_N_0 __int128 +#define __UINTMAX_MAX__ 0xffffffffffffffffUL +#define __FLT32X_DENORM_MIN__ 4.94065645841246544176568792868221372e-324F32x +#define __cpp_template_template_args 201611L +#define __DBL_MAX_10_EXP__ 308 +#define __LDBL_DENORM_MIN__ 3.64519953188247460252840593361941982e-4951L +#define __INT16_C(c) c +#define __STDC__ 1 +#define __PTRDIFF_TYPE__ long int +#define __LONG_MAX__ 0x7fffffffffffffffL +#define __FLT32X_MIN_10_EXP__ (-307) +#define __UINTPTR_TYPE__ long unsigned int +#define __DEC64_SUBNORMAL_MIN__ 0.000000000000001E-383DD +#define __DEC128_MANT_DIG__ 34 +#define __LDBL_MIN_10_EXP__ (-4931) +#define __cpp_generic_lambdas 201707L +#define __SSE_MATH__ 1 +#define __SIZEOF_LONG_LONG__ 8 +#define __cpp_user_defined_literals 200809L +#define __FLT128_DECIMAL_DIG__ 36 +#define __GCC_ATOMIC_LLONG_LOCK_FREE 2 +#define __FLT32_HAS_QUIET_NAN__ 1 +#define __FLT_DECIMAL_DIG__ 9 +#define __UINT_FAST16_MAX__ 0xffffffffffffffffUL +#define __LDBL_NORM_MAX__ 1.18973149535723176502126385303097021e+4932L +#define __GCC_ATOMIC_SHORT_LOCK_FREE 2 +#define __SIZE_MAX__ 0xffffffffffffffffUL +#define __UINT_FAST8_TYPE__ unsigned char +#define _GNU_SOURCE 1 +#define __cpp_init_captures 201803L +#define __ATOMIC_ACQ_REL 4 +#define __ATOMIC_RELEASE 3 diff --git a/build-linux/tests/test_importer_autogen/mocs_compilation.cpp b/build-linux/tests/test_importer_autogen/mocs_compilation.cpp new file mode 100644 index 00000000..7567a9fc --- /dev/null +++ b/build-linux/tests/test_importer_autogen/mocs_compilation.cpp @@ -0,0 +1,4 @@ +// This file is autogenerated. Changes will be overwritten. +#include "VNU7RW3YIC/moc_db.cpp" +#include "VNU7RW3YIC/moc_importer.cpp" +#include "VNU7RW3YIC/moc_log_manager.cpp" diff --git a/build-linux/tests/test_importer_autogen/timestamp b/build-linux/tests/test_importer_autogen/timestamp new file mode 100644 index 00000000..e69de29b diff --git a/build-linux/tests/test_live_preview_manager b/build-linux/tests/test_live_preview_manager new file mode 100755 index 00000000..9f5e7f86 Binary files /dev/null and b/build-linux/tests/test_live_preview_manager differ diff --git a/build-linux/tests/test_live_preview_manager_autogen/VNU7RW3YIC/moc_live_preview_manager.cpp b/build-linux/tests/test_live_preview_manager_autogen/VNU7RW3YIC/moc_live_preview_manager.cpp new file mode 100644 index 00000000..1d55da66 --- /dev/null +++ b/build-linux/tests/test_live_preview_manager_autogen/VNU7RW3YIC/moc_live_preview_manager.cpp @@ -0,0 +1,156 @@ +/**************************************************************************** +** Meta object code from reading C++ file 'live_preview_manager.h' +** +** Created by: The Qt Meta Object Compiler version 69 (Qt 6.10.3) +** +** WARNING! All changes made in this file will be lost! +*****************************************************************************/ + +#include "../../../../native/qt6/src/live_preview_manager.h" +#include + +#include + +#include + + +#include +#if !defined(Q_MOC_OUTPUT_REVISION) +#error "The header file 'live_preview_manager.h' doesn't include ." +#elif Q_MOC_OUTPUT_REVISION != 69 +#error "This file was generated using the moc from 6.10.3. It" +#error "cannot be used with the include files from this version of Qt." +#error "(The moc has changed too much.)" +#endif + +#ifndef Q_CONSTINIT +#define Q_CONSTINIT +#endif + +QT_WARNING_PUSH +QT_WARNING_DISABLE_DEPRECATED +QT_WARNING_DISABLE_GCC("-Wuseless-cast") +namespace { +struct qt_meta_tag_ZN18LivePreviewManagerE_t {}; +} // unnamed namespace + +template <> constexpr inline auto LivePreviewManager::qt_create_metaobjectdata() +{ + namespace QMC = QtMocConstants; + QtMocHelpers::StringRefStorage qt_stringData { + "LivePreviewManager", + "frameReady", + "", + "filePath", + "position", + "QSize", + "targetSize", + "QPixmap", + "pixmap", + "frameFailed", + "errorString", + "cacheStatus", + "status" + }; + + QtMocHelpers::UintData qt_methods { + // Signal 'frameReady' + QtMocHelpers::SignalData(1, 2, QMC::AccessPublic, QMetaType::Void, {{ + { QMetaType::QString, 3 }, { QMetaType::QReal, 4 }, { 0x80000000 | 5, 6 }, { 0x80000000 | 7, 8 }, + }}), + // Signal 'frameFailed' + QtMocHelpers::SignalData(9, 2, QMC::AccessPublic, QMetaType::Void, {{ + { QMetaType::QString, 3 }, { QMetaType::QString, 10 }, + }}), + // Signal 'cacheStatus' + QtMocHelpers::SignalData(11, 2, QMC::AccessPublic, QMetaType::Void, {{ + { QMetaType::QString, 12 }, + }}), + }; + QtMocHelpers::UintData qt_properties { + }; + QtMocHelpers::UintData qt_enums { + }; + return QtMocHelpers::metaObjectData(QMC::MetaObjectFlag{}, qt_stringData, + qt_methods, qt_properties, qt_enums); +} +Q_CONSTINIT const QMetaObject LivePreviewManager::staticMetaObject = { { + QMetaObject::SuperData::link(), + qt_staticMetaObjectStaticContent.stringdata, + qt_staticMetaObjectStaticContent.data, + qt_static_metacall, + nullptr, + qt_staticMetaObjectRelocatingContent.metaTypes, + nullptr +} }; + +void LivePreviewManager::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) +{ + auto *_t = static_cast(_o); + if (_c == QMetaObject::InvokeMetaMethod) { + switch (_id) { + case 0: _t->frameReady((*reinterpret_cast>(_a[1])),(*reinterpret_cast>(_a[2])),(*reinterpret_cast>(_a[3])),(*reinterpret_cast>(_a[4]))); break; + case 1: _t->frameFailed((*reinterpret_cast>(_a[1])),(*reinterpret_cast>(_a[2]))); break; + case 2: _t->cacheStatus((*reinterpret_cast>(_a[1]))); break; + default: ; + } + } + if (_c == QMetaObject::IndexOfMethod) { + if (QtMocHelpers::indexOfMethod(_a, &LivePreviewManager::frameReady, 0)) + return; + if (QtMocHelpers::indexOfMethod(_a, &LivePreviewManager::frameFailed, 1)) + return; + if (QtMocHelpers::indexOfMethod(_a, &LivePreviewManager::cacheStatus, 2)) + return; + } +} + +const QMetaObject *LivePreviewManager::metaObject() const +{ + return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject; +} + +void *LivePreviewManager::qt_metacast(const char *_clname) +{ + if (!_clname) return nullptr; + if (!strcmp(_clname, qt_staticMetaObjectStaticContent.strings)) + return static_cast(this); + return QObject::qt_metacast(_clname); +} + +int LivePreviewManager::qt_metacall(QMetaObject::Call _c, int _id, void **_a) +{ + _id = QObject::qt_metacall(_c, _id, _a); + if (_id < 0) + return _id; + if (_c == QMetaObject::InvokeMetaMethod) { + if (_id < 3) + qt_static_metacall(this, _c, _id, _a); + _id -= 3; + } + if (_c == QMetaObject::RegisterMethodArgumentMetaType) { + if (_id < 3) + *reinterpret_cast(_a[0]) = QMetaType(); + _id -= 3; + } + return _id; +} + +// SIGNAL 0 +void LivePreviewManager::frameReady(const QString & _t1, qreal _t2, QSize _t3, const QPixmap & _t4) +{ + QMetaObject::activate(this, &staticMetaObject, 0, nullptr, _t1, _t2, _t3, _t4); +} + +// SIGNAL 1 +void LivePreviewManager::frameFailed(const QString & _t1, QString _t2) +{ + QMetaObject::activate(this, &staticMetaObject, 1, nullptr, _t1, _t2); +} + +// SIGNAL 2 +void LivePreviewManager::cacheStatus(const QString & _t1) +{ + QMetaObject::activate(this, &staticMetaObject, 2, nullptr, _t1); +} +QT_WARNING_POP diff --git a/build-linux/tests/test_live_preview_manager_autogen/VNU7RW3YIC/moc_thumbnail_cache_manager.cpp b/build-linux/tests/test_live_preview_manager_autogen/VNU7RW3YIC/moc_thumbnail_cache_manager.cpp new file mode 100644 index 00000000..cf757d7a --- /dev/null +++ b/build-linux/tests/test_live_preview_manager_autogen/VNU7RW3YIC/moc_thumbnail_cache_manager.cpp @@ -0,0 +1,136 @@ +/**************************************************************************** +** Meta object code from reading C++ file 'thumbnail_cache_manager.h' +** +** Created by: The Qt Meta Object Compiler version 69 (Qt 6.10.3) +** +** WARNING! All changes made in this file will be lost! +*****************************************************************************/ + +#include "../../../../native/qt6/src/thumbnail_cache_manager.h" +#include + +#include + +#include + + +#include +#if !defined(Q_MOC_OUTPUT_REVISION) +#error "The header file 'thumbnail_cache_manager.h' doesn't include ." +#elif Q_MOC_OUTPUT_REVISION != 69 +#error "This file was generated using the moc from 6.10.3. It" +#error "cannot be used with the include files from this version of Qt." +#error "(The moc has changed too much.)" +#endif + +#ifndef Q_CONSTINIT +#define Q_CONSTINIT +#endif + +QT_WARNING_PUSH +QT_WARNING_DISABLE_DEPRECATED +QT_WARNING_DISABLE_GCC("-Wuseless-cast") +namespace { +struct qt_meta_tag_ZN21ThumbnailCacheManagerE_t {}; +} // unnamed namespace + +template <> constexpr inline auto ThumbnailCacheManager::qt_create_metaobjectdata() +{ + namespace QMC = QtMocConstants; + QtMocHelpers::StringRefStorage qt_stringData { + "ThumbnailCacheManager", + "cacheCleared", + "", + "thumbnailStored", + "filePath", + "QSize", + "size", + "position" + }; + + QtMocHelpers::UintData qt_methods { + // Signal 'cacheCleared' + QtMocHelpers::SignalData(1, 2, QMC::AccessPublic, QMetaType::Void), + // Signal 'thumbnailStored' + QtMocHelpers::SignalData(3, 2, QMC::AccessPublic, QMetaType::Void, {{ + { QMetaType::QString, 4 }, { 0x80000000 | 5, 6 }, { QMetaType::QReal, 7 }, + }}), + }; + QtMocHelpers::UintData qt_properties { + }; + QtMocHelpers::UintData qt_enums { + }; + return QtMocHelpers::metaObjectData(QMC::MetaObjectFlag{}, qt_stringData, + qt_methods, qt_properties, qt_enums); +} +Q_CONSTINIT const QMetaObject ThumbnailCacheManager::staticMetaObject = { { + QMetaObject::SuperData::link(), + qt_staticMetaObjectStaticContent.stringdata, + qt_staticMetaObjectStaticContent.data, + qt_static_metacall, + nullptr, + qt_staticMetaObjectRelocatingContent.metaTypes, + nullptr +} }; + +void ThumbnailCacheManager::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) +{ + auto *_t = static_cast(_o); + if (_c == QMetaObject::InvokeMetaMethod) { + switch (_id) { + case 0: _t->cacheCleared(); break; + case 1: _t->thumbnailStored((*reinterpret_cast>(_a[1])),(*reinterpret_cast>(_a[2])),(*reinterpret_cast>(_a[3]))); break; + default: ; + } + } + if (_c == QMetaObject::IndexOfMethod) { + if (QtMocHelpers::indexOfMethod(_a, &ThumbnailCacheManager::cacheCleared, 0)) + return; + if (QtMocHelpers::indexOfMethod(_a, &ThumbnailCacheManager::thumbnailStored, 1)) + return; + } +} + +const QMetaObject *ThumbnailCacheManager::metaObject() const +{ + return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject; +} + +void *ThumbnailCacheManager::qt_metacast(const char *_clname) +{ + if (!_clname) return nullptr; + if (!strcmp(_clname, qt_staticMetaObjectStaticContent.strings)) + return static_cast(this); + return QObject::qt_metacast(_clname); +} + +int ThumbnailCacheManager::qt_metacall(QMetaObject::Call _c, int _id, void **_a) +{ + _id = QObject::qt_metacall(_c, _id, _a); + if (_id < 0) + return _id; + if (_c == QMetaObject::InvokeMetaMethod) { + if (_id < 2) + qt_static_metacall(this, _c, _id, _a); + _id -= 2; + } + if (_c == QMetaObject::RegisterMethodArgumentMetaType) { + if (_id < 2) + *reinterpret_cast(_a[0]) = QMetaType(); + _id -= 2; + } + return _id; +} + +// SIGNAL 0 +void ThumbnailCacheManager::cacheCleared() +{ + QMetaObject::activate(this, &staticMetaObject, 0, nullptr); +} + +// SIGNAL 1 +void ThumbnailCacheManager::thumbnailStored(const QString & _t1, const QSize & _t2, qreal _t3) +{ + QMetaObject::activate(this, &staticMetaObject, 1, nullptr, _t1, _t2, _t3); +} +QT_WARNING_POP diff --git a/build-linux/tests/test_live_preview_manager_autogen/deps b/build-linux/tests/test_live_preview_manager_autogen/deps new file mode 100644 index 00000000..a9caeb03 --- /dev/null +++ b/build-linux/tests/test_live_preview_manager_autogen/deps @@ -0,0 +1,926 @@ +test_live_preview_manager_autogen/timestamp: \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_live_preview_manager_autogen/moc_predefs.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/live_preview_manager.cpp \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/live_preview_manager.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/oiio_image_loader.cpp \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/oiio_image_loader.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/thumbnail_cache_manager.cpp \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/thumbnail_cache_manager.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/utils.cpp \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/utils.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/CMakeLists.txt \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/test_live_preview_manager.cpp \ + /usr/include/alloca.h \ + /usr/include/asm-generic/bitsperlong.h \ + /usr/include/asm-generic/errno-base.h \ + /usr/include/asm-generic/errno.h \ + /usr/include/asm-generic/int-ll64.h \ + /usr/include/asm-generic/posix_types.h \ + /usr/include/asm-generic/types.h \ + /usr/include/asm/bitsperlong.h \ + /usr/include/asm/errno.h \ + /usr/include/asm/posix_types.h \ + /usr/include/asm/posix_types_64.h \ + /usr/include/asm/types.h \ + /usr/include/asm/unistd.h \ + /usr/include/asm/unistd_64.h \ + /usr/include/assert.h \ + /usr/include/bits/atomic_wide_counter.h \ + /usr/include/bits/byteswap.h \ + /usr/include/bits/confname.h \ + /usr/include/bits/cpu-set.h \ + /usr/include/bits/endian.h \ + /usr/include/bits/endianness.h \ + /usr/include/bits/environments.h \ + /usr/include/bits/errno.h \ + /usr/include/bits/floatn-common.h \ + /usr/include/bits/floatn.h \ + /usr/include/bits/getopt_core.h \ + /usr/include/bits/getopt_posix.h \ + /usr/include/bits/libc-header-start.h \ + /usr/include/bits/local_lim.h \ + /usr/include/bits/locale.h \ + /usr/include/bits/long-double.h \ + /usr/include/bits/posix1_lim.h \ + /usr/include/bits/posix2_lim.h \ + /usr/include/bits/posix_opt.h \ + /usr/include/bits/pthread_stack_min-dynamic.h \ + /usr/include/bits/pthreadtypes-arch.h \ + /usr/include/bits/pthreadtypes.h \ + /usr/include/bits/sched.h \ + /usr/include/bits/select.h \ + /usr/include/bits/semaphore.h \ + /usr/include/bits/setjmp.h \ + /usr/include/bits/stdint-intn.h \ + /usr/include/bits/stdint-least.h \ + /usr/include/bits/stdint-uintn.h \ + /usr/include/bits/stdio_lim.h \ + /usr/include/bits/stdlib-float.h \ + /usr/include/bits/struct_mutex.h \ + /usr/include/bits/struct_rwlock.h \ + /usr/include/bits/syscall.h \ + /usr/include/bits/thread-shared-types.h \ + /usr/include/bits/time.h \ + /usr/include/bits/time64.h \ + /usr/include/bits/timesize.h \ + /usr/include/bits/timex.h \ + /usr/include/bits/types.h \ + /usr/include/bits/types/FILE.h \ + /usr/include/bits/types/__FILE.h \ + /usr/include/bits/types/__fpos64_t.h \ + /usr/include/bits/types/__fpos_t.h \ + /usr/include/bits/types/__locale_t.h \ + /usr/include/bits/types/__mbstate_t.h \ + /usr/include/bits/types/__sigset_t.h \ + /usr/include/bits/types/clock_t.h \ + /usr/include/bits/types/clockid_t.h \ + /usr/include/bits/types/cookie_io_functions_t.h \ + /usr/include/bits/types/error_t.h \ + /usr/include/bits/types/locale_t.h \ + /usr/include/bits/types/mbstate_t.h \ + /usr/include/bits/types/sigset_t.h \ + /usr/include/bits/types/struct_FILE.h \ + /usr/include/bits/types/struct___jmp_buf_tag.h \ + /usr/include/bits/types/struct_itimerspec.h \ + /usr/include/bits/types/struct_sched_param.h \ + /usr/include/bits/types/struct_timespec.h \ + /usr/include/bits/types/struct_timeval.h \ + /usr/include/bits/types/struct_tm.h \ + /usr/include/bits/types/time_t.h \ + /usr/include/bits/types/timer_t.h \ + /usr/include/bits/types/wint_t.h \ + /usr/include/bits/typesizes.h \ + /usr/include/bits/uintn-identity.h \ + /usr/include/bits/uio_lim.h \ + /usr/include/bits/unistd_ext.h \ + /usr/include/bits/waitflags.h \ + /usr/include/bits/waitstatus.h \ + /usr/include/bits/wchar.h \ + /usr/include/bits/wctype-wchar.h \ + /usr/include/bits/wordsize.h \ + /usr/include/bits/xopen_lim.h \ + /usr/include/c++/15/algorithm \ + /usr/include/c++/15/array \ + /usr/include/c++/15/atomic \ + /usr/include/c++/15/backward/auto_ptr.h \ + /usr/include/c++/15/backward/binders.h \ + /usr/include/c++/15/bit \ + /usr/include/c++/15/bits/algorithmfwd.h \ + /usr/include/c++/15/bits/align.h \ + /usr/include/c++/15/bits/alloc_traits.h \ + /usr/include/c++/15/bits/allocated_ptr.h \ + /usr/include/c++/15/bits/allocator.h \ + /usr/include/c++/15/bits/atomic_base.h \ + /usr/include/c++/15/bits/atomic_futex.h \ + /usr/include/c++/15/bits/atomic_lockfree_defines.h \ + /usr/include/c++/15/bits/atomic_timed_wait.h \ + /usr/include/c++/15/bits/atomic_wait.h \ + /usr/include/c++/15/bits/basic_ios.h \ + /usr/include/c++/15/bits/basic_ios.tcc \ + /usr/include/c++/15/bits/basic_string.h \ + /usr/include/c++/15/bits/basic_string.tcc \ + /usr/include/c++/15/bits/char_traits.h \ + /usr/include/c++/15/bits/charconv.h \ + /usr/include/c++/15/bits/chrono.h \ + /usr/include/c++/15/bits/chrono_io.h \ + /usr/include/c++/15/bits/codecvt.h \ + /usr/include/c++/15/bits/concept_check.h \ + /usr/include/c++/15/bits/cpp_type_traits.h \ + /usr/include/c++/15/bits/cxxabi_forced.h \ + /usr/include/c++/15/bits/cxxabi_init_exception.h \ + /usr/include/c++/15/bits/enable_special_members.h \ + /usr/include/c++/15/bits/erase_if.h \ + /usr/include/c++/15/bits/exception.h \ + /usr/include/c++/15/bits/exception_defines.h \ + /usr/include/c++/15/bits/exception_ptr.h \ + /usr/include/c++/15/bits/functexcept.h \ + /usr/include/c++/15/bits/functional_hash.h \ + /usr/include/c++/15/bits/hash_bytes.h \ + /usr/include/c++/15/bits/hashtable.h \ + /usr/include/c++/15/bits/hashtable_policy.h \ + /usr/include/c++/15/bits/invoke.h \ + /usr/include/c++/15/bits/ios_base.h \ + /usr/include/c++/15/bits/istream.tcc \ + /usr/include/c++/15/bits/iterator_concepts.h \ + /usr/include/c++/15/bits/list.tcc \ + /usr/include/c++/15/bits/locale_classes.h \ + /usr/include/c++/15/bits/locale_classes.tcc \ + /usr/include/c++/15/bits/locale_conv.h \ + /usr/include/c++/15/bits/locale_facets.h \ + /usr/include/c++/15/bits/locale_facets.tcc \ + /usr/include/c++/15/bits/locale_facets_nonio.h \ + /usr/include/c++/15/bits/locale_facets_nonio.tcc \ + /usr/include/c++/15/bits/localefwd.h \ + /usr/include/c++/15/bits/max_size_type.h \ + /usr/include/c++/15/bits/memory_resource.h \ + /usr/include/c++/15/bits/memoryfwd.h \ + /usr/include/c++/15/bits/move.h \ + /usr/include/c++/15/bits/nested_exception.h \ + /usr/include/c++/15/bits/new_allocator.h \ + /usr/include/c++/15/bits/node_handle.h \ + /usr/include/c++/15/bits/ostream.h \ + /usr/include/c++/15/bits/ostream.tcc \ + /usr/include/c++/15/bits/ostream_insert.h \ + /usr/include/c++/15/bits/parse_numbers.h \ + /usr/include/c++/15/bits/postypes.h \ + /usr/include/c++/15/bits/predefined_ops.h \ + /usr/include/c++/15/bits/ptr_traits.h \ + /usr/include/c++/15/bits/quoted_string.h \ + /usr/include/c++/15/bits/random.h \ + /usr/include/c++/15/bits/random.tcc \ + /usr/include/c++/15/bits/range_access.h \ + /usr/include/c++/15/bits/ranges_algo.h \ + /usr/include/c++/15/bits/ranges_algobase.h \ + /usr/include/c++/15/bits/ranges_base.h \ + /usr/include/c++/15/bits/ranges_cmp.h \ + /usr/include/c++/15/bits/ranges_uninitialized.h \ + /usr/include/c++/15/bits/ranges_util.h \ + /usr/include/c++/15/bits/refwrap.h \ + /usr/include/c++/15/bits/requires_hosted.h \ + /usr/include/c++/15/bits/semaphore_base.h \ + /usr/include/c++/15/bits/shared_ptr.h \ + /usr/include/c++/15/bits/shared_ptr_atomic.h \ + /usr/include/c++/15/bits/shared_ptr_base.h \ + /usr/include/c++/15/bits/specfun.h \ + /usr/include/c++/15/bits/sstream.tcc \ + /usr/include/c++/15/bits/std_abs.h \ + /usr/include/c++/15/bits/std_function.h \ + /usr/include/c++/15/bits/std_mutex.h \ + /usr/include/c++/15/bits/std_thread.h \ + /usr/include/c++/15/bits/stl_algo.h \ + /usr/include/c++/15/bits/stl_algobase.h \ + /usr/include/c++/15/bits/stl_bvector.h \ + /usr/include/c++/15/bits/stl_construct.h \ + /usr/include/c++/15/bits/stl_function.h \ + /usr/include/c++/15/bits/stl_heap.h \ + /usr/include/c++/15/bits/stl_iterator.h \ + /usr/include/c++/15/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/15/bits/stl_iterator_base_types.h \ + /usr/include/c++/15/bits/stl_list.h \ + /usr/include/c++/15/bits/stl_map.h \ + /usr/include/c++/15/bits/stl_multimap.h \ + /usr/include/c++/15/bits/stl_multiset.h \ + /usr/include/c++/15/bits/stl_numeric.h \ + /usr/include/c++/15/bits/stl_pair.h \ + /usr/include/c++/15/bits/stl_raw_storage_iter.h \ + /usr/include/c++/15/bits/stl_relops.h \ + /usr/include/c++/15/bits/stl_set.h \ + /usr/include/c++/15/bits/stl_tempbuf.h \ + /usr/include/c++/15/bits/stl_tree.h \ + /usr/include/c++/15/bits/stl_uninitialized.h \ + /usr/include/c++/15/bits/stl_vector.h \ + /usr/include/c++/15/bits/stream_iterator.h \ + /usr/include/c++/15/bits/streambuf.tcc \ + /usr/include/c++/15/bits/streambuf_iterator.h \ + /usr/include/c++/15/bits/string_view.tcc \ + /usr/include/c++/15/bits/stringfwd.h \ + /usr/include/c++/15/bits/this_thread_sleep.h \ + /usr/include/c++/15/bits/uniform_int_dist.h \ + /usr/include/c++/15/bits/unique_lock.h \ + /usr/include/c++/15/bits/unique_ptr.h \ + /usr/include/c++/15/bits/unordered_map.h \ + /usr/include/c++/15/bits/unordered_set.h \ + /usr/include/c++/15/bits/uses_allocator.h \ + /usr/include/c++/15/bits/uses_allocator_args.h \ + /usr/include/c++/15/bits/utility.h \ + /usr/include/c++/15/bits/vector.tcc \ + /usr/include/c++/15/bits/version.h \ + /usr/include/c++/15/cassert \ + /usr/include/c++/15/cctype \ + /usr/include/c++/15/cerrno \ + /usr/include/c++/15/charconv \ + /usr/include/c++/15/chrono \ + /usr/include/c++/15/climits \ + /usr/include/c++/15/clocale \ + /usr/include/c++/15/cmath \ + /usr/include/c++/15/compare \ + /usr/include/c++/15/concepts \ + /usr/include/c++/15/condition_variable \ + /usr/include/c++/15/cstddef \ + /usr/include/c++/15/cstdint \ + /usr/include/c++/15/cstdio \ + /usr/include/c++/15/cstdlib \ + /usr/include/c++/15/cstring \ + /usr/include/c++/15/ctime \ + /usr/include/c++/15/cwchar \ + /usr/include/c++/15/cwctype \ + /usr/include/c++/15/debug/assertions.h \ + /usr/include/c++/15/debug/debug.h \ + /usr/include/c++/15/exception \ + /usr/include/c++/15/experimental/source_location \ + /usr/include/c++/15/ext/aligned_buffer.h \ + /usr/include/c++/15/ext/alloc_traits.h \ + /usr/include/c++/15/ext/atomicity.h \ + /usr/include/c++/15/ext/concurrence.h \ + /usr/include/c++/15/ext/numeric_traits.h \ + /usr/include/c++/15/ext/string_conversions.h \ + /usr/include/c++/15/ext/type_traits.h \ + /usr/include/c++/15/filesystem \ + /usr/include/c++/15/format \ + /usr/include/c++/15/functional \ + /usr/include/c++/15/future \ + /usr/include/c++/15/initializer_list \ + /usr/include/c++/15/iomanip \ + /usr/include/c++/15/ios \ + /usr/include/c++/15/iosfwd \ + /usr/include/c++/15/istream \ + /usr/include/c++/15/iterator \ + /usr/include/c++/15/limits \ + /usr/include/c++/15/list \ + /usr/include/c++/15/locale \ + /usr/include/c++/15/map \ + /usr/include/c++/15/memory \ + /usr/include/c++/15/memory_resource \ + /usr/include/c++/15/mutex \ + /usr/include/c++/15/new \ + /usr/include/c++/15/numeric \ + /usr/include/c++/15/optional \ + /usr/include/c++/15/ostream \ + /usr/include/c++/15/pstl/execution_defs.h \ + /usr/include/c++/15/pstl/glue_numeric_defs.h \ + /usr/include/c++/15/pstl/pstl_config.h \ + /usr/include/c++/15/random \ + /usr/include/c++/15/ratio \ + /usr/include/c++/15/semaphore \ + /usr/include/c++/15/set \ + /usr/include/c++/15/shared_mutex \ + /usr/include/c++/15/source_location \ + /usr/include/c++/15/sstream \ + /usr/include/c++/15/stdexcept \ + /usr/include/c++/15/stop_token \ + /usr/include/c++/15/streambuf \ + /usr/include/c++/15/string \ + /usr/include/c++/15/string_view \ + /usr/include/c++/15/system_error \ + /usr/include/c++/15/tr1/bessel_function.tcc \ + /usr/include/c++/15/tr1/beta_function.tcc \ + /usr/include/c++/15/tr1/ell_integral.tcc \ + /usr/include/c++/15/tr1/exp_integral.tcc \ + /usr/include/c++/15/tr1/gamma.tcc \ + /usr/include/c++/15/tr1/hypergeometric.tcc \ + /usr/include/c++/15/tr1/legendre_function.tcc \ + /usr/include/c++/15/tr1/modified_bessel_func.tcc \ + /usr/include/c++/15/tr1/poly_hermite.tcc \ + /usr/include/c++/15/tr1/poly_laguerre.tcc \ + /usr/include/c++/15/tr1/riemann_zeta.tcc \ + /usr/include/c++/15/tr1/special_function_util.h \ + /usr/include/c++/15/tuple \ + /usr/include/c++/15/type_traits \ + /usr/include/c++/15/typeinfo \ + /usr/include/c++/15/unordered_map \ + /usr/include/c++/15/unordered_set \ + /usr/include/c++/15/utility \ + /usr/include/c++/15/variant \ + /usr/include/c++/15/vector \ + /usr/include/c++/15/version \ + /usr/include/c++/15/x86_64-redhat-linux/bits/atomic_word.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/c++allocator.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/c++config.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/c++locale.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/cpu_defines.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/ctype_base.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/ctype_inline.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/error_constants.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/gthr-default.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/gthr.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/messages_members.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/opt_random.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/os_defines.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/time_members.h \ + /usr/include/ctype.h \ + /usr/include/endian.h \ + /usr/include/errno.h \ + /usr/include/features-time64.h \ + /usr/include/features.h \ + /usr/include/gnu/stubs-64.h \ + /usr/include/gnu/stubs.h \ + /usr/include/libintl.h \ + /usr/include/limits.h \ + /usr/include/linux/close_range.h \ + /usr/include/linux/errno.h \ + /usr/include/linux/limits.h \ + /usr/include/linux/posix_types.h \ + /usr/include/linux/sched/types.h \ + /usr/include/linux/stddef.h \ + /usr/include/linux/types.h \ + /usr/include/locale.h \ + /usr/include/pthread.h \ + /usr/include/qt6/QtCore/QAbstractItemModel \ + /usr/include/qt6/QtCore/QCache \ + /usr/include/qt6/QtCore/QDateTime \ + /usr/include/qt6/QtCore/QDeadlineTimer \ + /usr/include/qt6/QtCore/QElapsedTimer \ + /usr/include/qt6/QtCore/QEvent \ + /usr/include/qt6/QtCore/QHash \ + /usr/include/qt6/QtCore/QList \ + /usr/include/qt6/QtCore/QMap \ + /usr/include/qt6/QtCore/QMargins \ + /usr/include/qt6/QtCore/QMetaEnum \ + /usr/include/qt6/QtCore/QMutex \ + /usr/include/qt6/QtCore/QObject \ + /usr/include/qt6/QtCore/QReadWriteLock \ + /usr/include/qt6/QtCore/QRect \ + /usr/include/qt6/QtCore/QSet \ + /usr/include/qt6/QtCore/QSize \ + /usr/include/qt6/QtCore/QSizeF \ + /usr/include/qt6/QtCore/QString \ + /usr/include/qt6/QtCore/QStringList \ + /usr/include/qt6/QtCore/QTemporaryDir \ + /usr/include/qt6/QtCore/QThread \ + /usr/include/qt6/QtCore/QThreadPool \ + /usr/include/qt6/QtCore/QVariant \ + /usr/include/qt6/QtCore/QtCore \ + /usr/include/qt6/QtCore/QtCoreDepends \ + /usr/include/qt6/QtCore/q17memory.h \ + /usr/include/qt6/QtCore/q20algorithm.h \ + /usr/include/qt6/QtCore/q20chrono.h \ + /usr/include/qt6/QtCore/q20functional.h \ + /usr/include/qt6/QtCore/q20iterator.h \ + /usr/include/qt6/QtCore/q20map.h \ + /usr/include/qt6/QtCore/q20memory.h \ + /usr/include/qt6/QtCore/q20type_traits.h \ + /usr/include/qt6/QtCore/q20utility.h \ + /usr/include/qt6/QtCore/q20vector.h \ + /usr/include/qt6/QtCore/q23functional.h \ + /usr/include/qt6/QtCore/q23type_traits.h \ + /usr/include/qt6/QtCore/q23utility.h \ + /usr/include/qt6/QtCore/q26numeric.h \ + /usr/include/qt6/QtCore/qabstractanimation.h \ + /usr/include/qt6/QtCore/qabstracteventdispatcher.h \ + /usr/include/qt6/QtCore/qabstractitemmodel.h \ + /usr/include/qt6/QtCore/qabstractnativeeventfilter.h \ + /usr/include/qt6/QtCore/qabstractproxymodel.h \ + /usr/include/qt6/QtCore/qalgorithms.h \ + /usr/include/qt6/QtCore/qalloc.h \ + /usr/include/qt6/QtCore/qanimationgroup.h \ + /usr/include/qt6/QtCore/qanystringview.h \ + /usr/include/qt6/QtCore/qapplicationstatic.h \ + /usr/include/qt6/QtCore/qarraydata.h \ + /usr/include/qt6/QtCore/qarraydataops.h \ + /usr/include/qt6/QtCore/qarraydatapointer.h \ + /usr/include/qt6/QtCore/qassert.h \ + /usr/include/qt6/QtCore/qassociativeiterable.h \ + /usr/include/qt6/QtCore/qatomic.h \ + /usr/include/qt6/QtCore/qatomic_cxx11.h \ + /usr/include/qt6/QtCore/qatomicscopedvaluerollback.h \ + /usr/include/qt6/QtCore/qbasicatomic.h \ + /usr/include/qt6/QtCore/qbasictimer.h \ + /usr/include/qt6/QtCore/qbindingstorage.h \ + /usr/include/qt6/QtCore/qbitarray.h \ + /usr/include/qt6/QtCore/qbuffer.h \ + /usr/include/qt6/QtCore/qbytearray.h \ + /usr/include/qt6/QtCore/qbytearrayalgorithms.h \ + /usr/include/qt6/QtCore/qbytearraylist.h \ + /usr/include/qt6/QtCore/qbytearraymatcher.h \ + /usr/include/qt6/QtCore/qbytearrayview.h \ + /usr/include/qt6/QtCore/qcache.h \ + /usr/include/qt6/QtCore/qcalendar.h \ + /usr/include/qt6/QtCore/qcborarray.h \ + /usr/include/qt6/QtCore/qcborcommon.h \ + /usr/include/qt6/QtCore/qcbormap.h \ + /usr/include/qt6/QtCore/qcborstream.h \ + /usr/include/qt6/QtCore/qcborstreamreader.h \ + /usr/include/qt6/QtCore/qcborstreamwriter.h \ + /usr/include/qt6/QtCore/qcborvalue.h \ + /usr/include/qt6/QtCore/qchar.h \ + /usr/include/qt6/QtCore/qcheckedint_impl.h \ + /usr/include/qt6/QtCore/qchronotimer.h \ + /usr/include/qt6/QtCore/qcollator.h \ + /usr/include/qt6/QtCore/qcommandlineoption.h \ + /usr/include/qt6/QtCore/qcommandlineparser.h \ + /usr/include/qt6/QtCore/qcompare.h \ + /usr/include/qt6/QtCore/qcompare_impl.h \ + /usr/include/qt6/QtCore/qcomparehelpers.h \ + /usr/include/qt6/QtCore/qcompilerdetection.h \ + /usr/include/qt6/QtCore/qconcatenatetablesproxymodel.h \ + /usr/include/qt6/QtCore/qconfig-64.h \ + /usr/include/qt6/QtCore/qconfig.h \ + /usr/include/qt6/QtCore/qconstructormacros.h \ + /usr/include/qt6/QtCore/qcontainerfwd.h \ + /usr/include/qt6/QtCore/qcontainerinfo.h \ + /usr/include/qt6/QtCore/qcontainertools_impl.h \ + /usr/include/qt6/QtCore/qcontiguouscache.h \ + /usr/include/qt6/QtCore/qcoreapplication.h \ + /usr/include/qt6/QtCore/qcoreapplication_platform.h \ + /usr/include/qt6/QtCore/qcoreevent.h \ + /usr/include/qt6/QtCore/qcryptographichash.h \ + /usr/include/qt6/QtCore/qdarwinhelpers.h \ + /usr/include/qt6/QtCore/qdatastream.h \ + /usr/include/qt6/QtCore/qdatetime.h \ + /usr/include/qt6/QtCore/qdeadlinetimer.h \ + /usr/include/qt6/QtCore/qdebug.h \ + /usr/include/qt6/QtCore/qdir.h \ + /usr/include/qt6/QtCore/qdiriterator.h \ + /usr/include/qt6/QtCore/qdirlisting.h \ + /usr/include/qt6/QtCore/qeasingcurve.h \ + /usr/include/qt6/QtCore/qelapsedtimer.h \ + /usr/include/qt6/QtCore/qendian.h \ + /usr/include/qt6/QtCore/qeventloop.h \ + /usr/include/qt6/QtCore/qexception.h \ + /usr/include/qt6/QtCore/qexceptionhandling.h \ + /usr/include/qt6/QtCore/qfactoryinterface.h \ + /usr/include/qt6/QtCore/qfile.h \ + /usr/include/qt6/QtCore/qfiledevice.h \ + /usr/include/qt6/QtCore/qfileinfo.h \ + /usr/include/qt6/QtCore/qfileselector.h \ + /usr/include/qt6/QtCore/qfilesystemwatcher.h \ + /usr/include/qt6/QtCore/qflags.h \ + /usr/include/qt6/QtCore/qfloat16.h \ + /usr/include/qt6/QtCore/qforeach.h \ + /usr/include/qt6/QtCore/qfunctionaltools_impl.h \ + /usr/include/qt6/QtCore/qfunctionpointer.h \ + /usr/include/qt6/QtCore/qfuture.h \ + /usr/include/qt6/QtCore/qfuture_impl.h \ + /usr/include/qt6/QtCore/qfutureinterface.h \ + /usr/include/qt6/QtCore/qfuturesynchronizer.h \ + /usr/include/qt6/QtCore/qfuturewatcher.h \ + /usr/include/qt6/QtCore/qgenericatomic.h \ + /usr/include/qt6/QtCore/qglobal.h \ + /usr/include/qt6/QtCore/qglobalstatic.h \ + /usr/include/qt6/QtCore/qhash.h \ + /usr/include/qt6/QtCore/qhashfunctions.h \ + /usr/include/qt6/QtCore/qidentityproxymodel.h \ + /usr/include/qt6/QtCore/qiodevice.h \ + /usr/include/qt6/QtCore/qiodevicebase.h \ + /usr/include/qt6/QtCore/qitemselectionmodel.h \ + /usr/include/qt6/QtCore/qiterable.h \ + /usr/include/qt6/QtCore/qiterator.h \ + /usr/include/qt6/QtCore/qjsonarray.h \ + /usr/include/qt6/QtCore/qjsondocument.h \ + /usr/include/qt6/QtCore/qjsonobject.h \ + /usr/include/qt6/QtCore/qjsonparseerror.h \ + /usr/include/qt6/QtCore/qjsonvalue.h \ + /usr/include/qt6/QtCore/qlatin1stringmatcher.h \ + /usr/include/qt6/QtCore/qlatin1stringview.h \ + /usr/include/qt6/QtCore/qlibrary.h \ + /usr/include/qt6/QtCore/qlibraryinfo.h \ + /usr/include/qt6/QtCore/qline.h \ + /usr/include/qt6/QtCore/qlist.h \ + /usr/include/qt6/QtCore/qlocale.h \ + /usr/include/qt6/QtCore/qlockfile.h \ + /usr/include/qt6/QtCore/qlogging.h \ + /usr/include/qt6/QtCore/qloggingcategory.h \ + /usr/include/qt6/QtCore/qmalloc.h \ + /usr/include/qt6/QtCore/qmap.h \ + /usr/include/qt6/QtCore/qmargins.h \ + /usr/include/qt6/QtCore/qmath.h \ + /usr/include/qt6/QtCore/qmessageauthenticationcode.h \ + /usr/include/qt6/QtCore/qmetacontainer.h \ + /usr/include/qt6/QtCore/qmetaobject.h \ + /usr/include/qt6/QtCore/qmetatype.h \ + /usr/include/qt6/QtCore/qmimedata.h \ + /usr/include/qt6/QtCore/qmimedatabase.h \ + /usr/include/qt6/QtCore/qmimetype.h \ + /usr/include/qt6/QtCore/qminmax.h \ + /usr/include/qt6/QtCore/qmutex.h \ + /usr/include/qt6/QtCore/qnamespace.h \ + /usr/include/qt6/QtCore/qnativeinterface.h \ + /usr/include/qt6/QtCore/qnumeric.h \ + /usr/include/qt6/QtCore/qobject.h \ + /usr/include/qt6/QtCore/qobject_impl.h \ + /usr/include/qt6/QtCore/qobjectcleanuphandler.h \ + /usr/include/qt6/QtCore/qobjectdefs.h \ + /usr/include/qt6/QtCore/qobjectdefs_impl.h \ + /usr/include/qt6/QtCore/qoperatingsystemversion.h \ + /usr/include/qt6/QtCore/qoverload.h \ + /usr/include/qt6/QtCore/qpair.h \ + /usr/include/qt6/QtCore/qparallelanimationgroup.h \ + /usr/include/qt6/QtCore/qpauseanimation.h \ + /usr/include/qt6/QtCore/qpermissions.h \ + /usr/include/qt6/QtCore/qplugin.h \ + /usr/include/qt6/QtCore/qpluginloader.h \ + /usr/include/qt6/QtCore/qpoint.h \ + /usr/include/qt6/QtCore/qpointer.h \ + /usr/include/qt6/QtCore/qprocess.h \ + /usr/include/qt6/QtCore/qprocessordetection.h \ + /usr/include/qt6/QtCore/qpromise.h \ + /usr/include/qt6/QtCore/qproperty.h \ + /usr/include/qt6/QtCore/qpropertyanimation.h \ + /usr/include/qt6/QtCore/qpropertyprivate.h \ + /usr/include/qt6/QtCore/qqueue.h \ + /usr/include/qt6/QtCore/qrandom.h \ + /usr/include/qt6/QtCore/qrangemodel.h \ + /usr/include/qt6/QtCore/qrangemodel_impl.h \ + /usr/include/qt6/QtCore/qreadwritelock.h \ + /usr/include/qt6/QtCore/qrect.h \ + /usr/include/qt6/QtCore/qrefcount.h \ + /usr/include/qt6/QtCore/qregularexpression.h \ + /usr/include/qt6/QtCore/qresource.h \ + /usr/include/qt6/QtCore/qresultstore.h \ + /usr/include/qt6/QtCore/qrunnable.h \ + /usr/include/qt6/QtCore/qsavefile.h \ + /usr/include/qt6/QtCore/qscopedpointer.h \ + /usr/include/qt6/QtCore/qscopedvaluerollback.h \ + /usr/include/qt6/QtCore/qscopeguard.h \ + /usr/include/qt6/QtCore/qsemaphore.h \ + /usr/include/qt6/QtCore/qsequentialanimationgroup.h \ + /usr/include/qt6/QtCore/qsequentialiterable.h \ + /usr/include/qt6/QtCore/qset.h \ + /usr/include/qt6/QtCore/qsettings.h \ + /usr/include/qt6/QtCore/qshareddata.h \ + /usr/include/qt6/QtCore/qshareddata_impl.h \ + /usr/include/qt6/QtCore/qsharedmemory.h \ + /usr/include/qt6/QtCore/qsharedpointer.h \ + /usr/include/qt6/QtCore/qsharedpointer_impl.h \ + /usr/include/qt6/QtCore/qsignalmapper.h \ + /usr/include/qt6/QtCore/qsimd.h \ + /usr/include/qt6/QtCore/qsize.h \ + /usr/include/qt6/QtCore/qsocketnotifier.h \ + /usr/include/qt6/QtCore/qsortfilterproxymodel.h \ + /usr/include/qt6/QtCore/qspan.h \ + /usr/include/qt6/QtCore/qstack.h \ + /usr/include/qt6/QtCore/qstandardpaths.h \ + /usr/include/qt6/QtCore/qstaticlatin1stringmatcher.h \ + /usr/include/qt6/QtCore/qstdlibdetection.h \ + /usr/include/qt6/QtCore/qstorageinfo.h \ + /usr/include/qt6/QtCore/qstring.h \ + /usr/include/qt6/QtCore/qstringalgorithms.h \ + /usr/include/qt6/QtCore/qstringbuilder.h \ + /usr/include/qt6/QtCore/qstringconverter.h \ + /usr/include/qt6/QtCore/qstringconverter_base.h \ + /usr/include/qt6/QtCore/qstringfwd.h \ + /usr/include/qt6/QtCore/qstringlist.h \ + /usr/include/qt6/QtCore/qstringlistmodel.h \ + /usr/include/qt6/QtCore/qstringliteral.h \ + /usr/include/qt6/QtCore/qstringmatcher.h \ + /usr/include/qt6/QtCore/qstringtokenizer.h \ + /usr/include/qt6/QtCore/qstringview.h \ + /usr/include/qt6/QtCore/qswap.h \ + /usr/include/qt6/QtCore/qsysinfo.h \ + /usr/include/qt6/QtCore/qsystemdetection.h \ + /usr/include/qt6/QtCore/qsystemsemaphore.h \ + /usr/include/qt6/QtCore/qtaggedpointer.h \ + /usr/include/qt6/QtCore/qtclasshelpermacros.h \ + /usr/include/qt6/QtCore/qtconfiginclude.h \ + /usr/include/qt6/QtCore/qtconfigmacros.h \ + /usr/include/qt6/QtCore/qtcore-config.h \ + /usr/include/qt6/QtCore/qtcoreexports.h \ + /usr/include/qt6/QtCore/qtcoreglobal.h \ + /usr/include/qt6/QtCore/qtcoreversion.h \ + /usr/include/qt6/QtCore/qtdeprecationdefinitions.h \ + /usr/include/qt6/QtCore/qtdeprecationmarkers.h \ + /usr/include/qt6/QtCore/qtemporarydir.h \ + /usr/include/qt6/QtCore/qtemporaryfile.h \ + /usr/include/qt6/QtCore/qtenvironmentvariables.h \ + /usr/include/qt6/QtCore/qtestsupport_core.h \ + /usr/include/qt6/QtCore/qtextboundaryfinder.h \ + /usr/include/qt6/QtCore/qtextstream.h \ + /usr/include/qt6/QtCore/qtformat_impl.h \ + /usr/include/qt6/QtCore/qthread.h \ + /usr/include/qt6/QtCore/qthreadpool.h \ + /usr/include/qt6/QtCore/qthreadstorage.h \ + /usr/include/qt6/QtCore/qtimeline.h \ + /usr/include/qt6/QtCore/qtimer.h \ + /usr/include/qt6/QtCore/qtimezone.h \ + /usr/include/qt6/QtCore/qtipccommon.h \ + /usr/include/qt6/QtCore/qtmetamacros.h \ + /usr/include/qt6/QtCore/qtmocconstants.h \ + /usr/include/qt6/QtCore/qtnoop.h \ + /usr/include/qt6/QtCore/qtpreprocessorsupport.h \ + /usr/include/qt6/QtCore/qtranslator.h \ + /usr/include/qt6/QtCore/qtransposeproxymodel.h \ + /usr/include/qt6/QtCore/qtresource.h \ + /usr/include/qt6/QtCore/qtsan_impl.h \ + /usr/include/qt6/QtCore/qtsymbolmacros.h \ + /usr/include/qt6/QtCore/qttranslation.h \ + /usr/include/qt6/QtCore/qttypetraits.h \ + /usr/include/qt6/QtCore/qtversion.h \ + /usr/include/qt6/QtCore/qtversionchecks.h \ + /usr/include/qt6/QtCore/qtypeinfo.h \ + /usr/include/qt6/QtCore/qtyperevision.h \ + /usr/include/qt6/QtCore/qtypes.h \ + /usr/include/qt6/QtCore/qurl.h \ + /usr/include/qt6/QtCore/qurlquery.h \ + /usr/include/qt6/QtCore/qutf8stringview.h \ + /usr/include/qt6/QtCore/quuid.h \ + /usr/include/qt6/QtCore/qvariant.h \ + /usr/include/qt6/QtCore/qvariantanimation.h \ + /usr/include/qt6/QtCore/qvarianthash.h \ + /usr/include/qt6/QtCore/qvariantlist.h \ + /usr/include/qt6/QtCore/qvariantmap.h \ + /usr/include/qt6/QtCore/qvarlengtharray.h \ + /usr/include/qt6/QtCore/qvector.h \ + /usr/include/qt6/QtCore/qversionnumber.h \ + /usr/include/qt6/QtCore/qversiontagging.h \ + /usr/include/qt6/QtCore/qwaitcondition.h \ + /usr/include/qt6/QtCore/qwineventnotifier.h \ + /usr/include/qt6/QtCore/qxmlstream.h \ + /usr/include/qt6/QtCore/qxpfunctional.h \ + /usr/include/qt6/QtCore/qxptype_traits.h \ + /usr/include/qt6/QtCore/qyieldcpu.h \ + /usr/include/qt6/QtGui/QBrush \ + /usr/include/qt6/QtGui/QColor \ + /usr/include/qt6/QtGui/QFont \ + /usr/include/qt6/QtGui/QIcon \ + /usr/include/qt6/QtGui/QImage \ + /usr/include/qt6/QtGui/QPixmap \ + /usr/include/qt6/QtGui/QTransform \ + /usr/include/qt6/QtGui/qaction.h \ + /usr/include/qt6/QtGui/qbitmap.h \ + /usr/include/qt6/QtGui/qbrush.h \ + /usr/include/qt6/QtGui/qcolor.h \ + /usr/include/qt6/QtGui/qcursor.h \ + /usr/include/qt6/QtGui/qevent.h \ + /usr/include/qt6/QtGui/qeventpoint.h \ + /usr/include/qt6/QtGui/qfont.h \ + /usr/include/qt6/QtGui/qfontinfo.h \ + /usr/include/qt6/QtGui/qfontmetrics.h \ + /usr/include/qt6/QtGui/qfontvariableaxis.h \ + /usr/include/qt6/QtGui/qguiapplication.h \ + /usr/include/qt6/QtGui/qguiapplication_platform.h \ + /usr/include/qt6/QtGui/qicon.h \ + /usr/include/qt6/QtGui/qimage.h \ + /usr/include/qt6/QtGui/qinputdevice.h \ + /usr/include/qt6/QtGui/qinputmethod.h \ + /usr/include/qt6/QtGui/qkeysequence.h \ + /usr/include/qt6/QtGui/qpaintdevice.h \ + /usr/include/qt6/QtGui/qpalette.h \ + /usr/include/qt6/QtGui/qpixelformat.h \ + /usr/include/qt6/QtGui/qpixmap.h \ + /usr/include/qt6/QtGui/qpointingdevice.h \ + /usr/include/qt6/QtGui/qpolygon.h \ + /usr/include/qt6/QtGui/qregion.h \ + /usr/include/qt6/QtGui/qrgb.h \ + /usr/include/qt6/QtGui/qrgba64.h \ + /usr/include/qt6/QtGui/qscreen.h \ + /usr/include/qt6/QtGui/qscreen_platform.h \ + /usr/include/qt6/QtGui/qsurface.h \ + /usr/include/qt6/QtGui/qsurfaceformat.h \ + /usr/include/qt6/QtGui/qtestsupport_gui.h \ + /usr/include/qt6/QtGui/qtgui-config.h \ + /usr/include/qt6/QtGui/qtguiexports.h \ + /usr/include/qt6/QtGui/qtguiglobal.h \ + /usr/include/qt6/QtGui/qtransform.h \ + /usr/include/qt6/QtGui/qvector2d.h \ + /usr/include/qt6/QtGui/qvector3d.h \ + /usr/include/qt6/QtGui/qvector4d.h \ + /usr/include/qt6/QtGui/qvectornd.h \ + /usr/include/qt6/QtGui/qwindow.h \ + /usr/include/qt6/QtGui/qwindowdefs.h \ + /usr/include/qt6/QtTest/QSignalSpy \ + /usr/include/qt6/QtTest/QtTest \ + /usr/include/qt6/QtTest/QtTestDepends \ + /usr/include/qt6/QtTest/qabstractitemmodeltester.h \ + /usr/include/qt6/QtTest/qbenchmark.h \ + /usr/include/qt6/QtTest/qbenchmarkmetric.h \ + /usr/include/qt6/QtTest/qsignalspy.h \ + /usr/include/qt6/QtTest/qtest.h \ + /usr/include/qt6/QtTest/qtest_gui.h \ + /usr/include/qt6/QtTest/qtest_widgets.h \ + /usr/include/qt6/QtTest/qtestassert.h \ + /usr/include/qt6/QtTest/qtestcase.h \ + /usr/include/qt6/QtTest/qtestdata.h \ + /usr/include/qt6/QtTest/qtestevent.h \ + /usr/include/qt6/QtTest/qtesteventloop.h \ + /usr/include/qt6/QtTest/qtestkeyboard.h \ + /usr/include/qt6/QtTest/qtestmouse.h \ + /usr/include/qt6/QtTest/qtestspontaneevent.h \ + /usr/include/qt6/QtTest/qtestsystem.h \ + /usr/include/qt6/QtTest/qtesttostring.h \ + /usr/include/qt6/QtTest/qtesttouch.h \ + /usr/include/qt6/QtTest/qtestwheel.h \ + /usr/include/qt6/QtTest/qttestexports.h \ + /usr/include/qt6/QtTest/qttestglobal.h \ + /usr/include/qt6/QtTest/qttestlib-config.h \ + /usr/include/qt6/QtTest/qttestversion.h \ + /usr/include/qt6/QtWidgets/QSizePolicy \ + /usr/include/qt6/QtWidgets/qapplication.h \ + /usr/include/qt6/QtWidgets/qsizepolicy.h \ + /usr/include/qt6/QtWidgets/qtestsupport_widgets.h \ + /usr/include/qt6/QtWidgets/qtwidgets-config.h \ + /usr/include/qt6/QtWidgets/qtwidgetsexports.h \ + /usr/include/qt6/QtWidgets/qtwidgetsglobal.h \ + /usr/include/qt6/QtWidgets/qwidget.h \ + /usr/include/sched.h \ + /usr/include/semaphore.h \ + /usr/include/stdc-predef.h \ + /usr/include/stdint.h \ + /usr/include/stdio.h \ + /usr/include/stdlib.h \ + /usr/include/string.h \ + /usr/include/strings.h \ + /usr/include/sys/cdefs.h \ + /usr/include/sys/select.h \ + /usr/include/sys/single_threaded.h \ + /usr/include/sys/syscall.h \ + /usr/include/sys/time.h \ + /usr/include/sys/types.h \ + /usr/include/syscall.h \ + /usr/include/time.h \ + /usr/include/unistd.h \ + /usr/include/wchar.h \ + /usr/include/wctype.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/adxintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/amxavx512intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/amxbf16intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/amxcomplexintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/amxfp16intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/amxfp8intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/amxint8intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/amxmovrsintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/amxtf32intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/amxtileintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/amxtransposeintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2-512bf16intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2-512convertintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2-512mediaintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2-512minmaxintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2-512satcvtintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2bf16intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2convertintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2copyintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2mediaintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2minmaxintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2satcvtintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx2intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512bf16intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512bf16vlintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512bitalgintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512bitalgvlintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512bwintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512cdintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512dqintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512fintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512fp16intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512fp16vlintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512ifmaintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512ifmavlintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vbmi2intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vbmi2vlintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vbmiintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vbmivlintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vlbwintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vldqintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vlintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vnniintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vnnivlintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vp2intersectintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vp2intersectvlintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vpopcntdqintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vpopcntdqvlintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avxifmaintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avxintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avxneconvertintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avxvnniint16intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avxvnniint8intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avxvnniintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/bmi2intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/bmiintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/cetintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/cldemoteintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/clflushoptintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/clwbintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/clzerointrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/cmpccxaddintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/emmintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/enqcmdintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/f16cintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/fmaintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/fxsrintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/gfniintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/hresetintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/ia32intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/immintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/keylockerintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/lwpintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/lzcntintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/mm_malloc.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/mmintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/movdirintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/movrsintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/mwaitintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/mwaitxintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/pconfigintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/pkuintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/pmmintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/popcntintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/prfchiintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/prfchwintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/raointintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/rdseedintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/rtmintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/serializeintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/sgxintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/sha512intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/shaintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/sm3intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/sm4intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/smmintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/stdarg.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/stdbool.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/stddef.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/tbmintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/tmmintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/tsxldtrkintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/uintrintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/usermsrintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/vaesintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/vpclmulqdqintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/waitpkgintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/wbnoinvdintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/wmmintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/x86gprintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/xmmintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/xsavecintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/xsaveintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/xsaveoptintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/xsavesintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/xtestintrin.h \ + /usr/lib64/cmake/Qt6/Qt6Config.cmake \ + /usr/lib64/cmake/Qt6/Qt6ConfigExtras.cmake \ + /usr/lib64/cmake/Qt6/Qt6ConfigVersion.cmake \ + /usr/lib64/cmake/Qt6/Qt6ConfigVersionImpl.cmake \ + /usr/lib64/cmake/Qt6/Qt6Dependencies.cmake \ + /usr/lib64/cmake/Qt6/Qt6Targets.cmake \ + /usr/lib64/cmake/Qt6/Qt6VersionlessAliasTargets.cmake \ + /usr/lib64/cmake/Qt6/QtFeature.cmake \ + /usr/lib64/cmake/Qt6/QtFeatureCommon.cmake \ + /usr/lib64/cmake/Qt6/QtInstallPaths.cmake \ + /usr/lib64/cmake/Qt6/QtPublicAndroidHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicAppleHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicCMakeEarlyPolicyHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicCMakeHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicCMakeVersionHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicDependencyHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicExternalProjectHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicFinalizerHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicFindPackageHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicGitHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicPluginHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicPluginHelpers_v2.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomAttributionHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomBuildToolHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomCommonGenerationHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomCpeHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomCycloneDXHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomDepHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomDocumentNamespaceHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomExternalReferenceHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomFileHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomGenerationCycloneDXHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomGenerationHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomLicenseHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomOpsHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomPurlHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomPythonHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomQtEntityHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomRelationshipHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomSystemDepHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicTargetHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicTestHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicToolHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicWalkLibsHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicWindowsHelpers.cmake \ + /usr/lib64/cmake/Qt6Test/Qt6TestAdditionalTargetInfo.cmake \ + /usr/lib64/cmake/Qt6Test/Qt6TestConfig.cmake \ + /usr/lib64/cmake/Qt6Test/Qt6TestConfigVersion.cmake \ + /usr/lib64/cmake/Qt6Test/Qt6TestConfigVersionImpl.cmake \ + /usr/lib64/cmake/Qt6Test/Qt6TestDependencies.cmake \ + /usr/lib64/cmake/Qt6Test/Qt6TestTargets-relwithdebinfo.cmake \ + /usr/lib64/cmake/Qt6Test/Qt6TestTargets.cmake \ + /usr/lib64/cmake/Qt6Test/Qt6TestVersionlessAliasTargets.cmake \ + /usr/lib64/cmake/Qt6Test/QtTestProperties.cmake \ + /usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake \ + /usr/share/cmake/Modules/CheckCXXCompilerFlag.cmake \ + /usr/bin/cmake diff --git a/build-linux/tests/test_live_preview_manager_autogen/include/test_live_preview_manager.moc b/build-linux/tests/test_live_preview_manager_autogen/include/test_live_preview_manager.moc new file mode 100644 index 00000000..99bab703 --- /dev/null +++ b/build-linux/tests/test_live_preview_manager_autogen/include/test_live_preview_manager.moc @@ -0,0 +1,108 @@ +/**************************************************************************** +** Meta object code from reading C++ file 'test_live_preview_manager.cpp' +** +** Created by: The Qt Meta Object Compiler version 69 (Qt 6.10.3) +** +** WARNING! All changes made in this file will be lost! +*****************************************************************************/ + +#include + +#include + +#include + + +#include +#if !defined(Q_MOC_OUTPUT_REVISION) +#error "The header file 'test_live_preview_manager.cpp' doesn't include ." +#elif Q_MOC_OUTPUT_REVISION != 69 +#error "This file was generated using the moc from 6.10.3. It" +#error "cannot be used with the include files from this version of Qt." +#error "(The moc has changed too much.)" +#endif + +#ifndef Q_CONSTINIT +#define Q_CONSTINIT +#endif + +QT_WARNING_PUSH +QT_WARNING_DISABLE_DEPRECATED +QT_WARNING_DISABLE_GCC("-Wuseless-cast") +namespace { +struct qt_meta_tag_ZN22TestLivePreviewManagerE_t {}; +} // unnamed namespace + +template <> constexpr inline auto TestLivePreviewManager::qt_create_metaobjectdata() +{ + namespace QMC = QtMocConstants; + QtMocHelpers::StringRefStorage qt_stringData { + "TestLivePreviewManager", + "testRequestAndCacheStillPng", + "" + }; + + QtMocHelpers::UintData qt_methods { + // Slot 'testRequestAndCacheStillPng' + QtMocHelpers::SlotData(1, 2, QMC::AccessPrivate, QMetaType::Void), + }; + QtMocHelpers::UintData qt_properties { + }; + QtMocHelpers::UintData qt_enums { + }; + return QtMocHelpers::metaObjectData(QMC::MetaObjectFlag{}, qt_stringData, + qt_methods, qt_properties, qt_enums); +} +Q_CONSTINIT const QMetaObject TestLivePreviewManager::staticMetaObject = { { + QMetaObject::SuperData::link(), + qt_staticMetaObjectStaticContent.stringdata, + qt_staticMetaObjectStaticContent.data, + qt_static_metacall, + nullptr, + qt_staticMetaObjectRelocatingContent.metaTypes, + nullptr +} }; + +void TestLivePreviewManager::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) +{ + auto *_t = static_cast(_o); + if (_c == QMetaObject::InvokeMetaMethod) { + switch (_id) { + case 0: _t->testRequestAndCacheStillPng(); break; + default: ; + } + } + (void)_a; +} + +const QMetaObject *TestLivePreviewManager::metaObject() const +{ + return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject; +} + +void *TestLivePreviewManager::qt_metacast(const char *_clname) +{ + if (!_clname) return nullptr; + if (!strcmp(_clname, qt_staticMetaObjectStaticContent.strings)) + return static_cast(this); + return QObject::qt_metacast(_clname); +} + +int TestLivePreviewManager::qt_metacall(QMetaObject::Call _c, int _id, void **_a) +{ + _id = QObject::qt_metacall(_c, _id, _a); + if (_id < 0) + return _id; + if (_c == QMetaObject::InvokeMetaMethod) { + if (_id < 1) + qt_static_metacall(this, _c, _id, _a); + _id -= 1; + } + if (_c == QMetaObject::RegisterMethodArgumentMetaType) { + if (_id < 1) + *reinterpret_cast(_a[0]) = QMetaType(); + _id -= 1; + } + return _id; +} +QT_WARNING_POP diff --git a/build-linux/tests/test_live_preview_manager_autogen/moc_predefs.h b/build-linux/tests/test_live_preview_manager_autogen/moc_predefs.h new file mode 100644 index 00000000..f95fd5a3 --- /dev/null +++ b/build-linux/tests/test_live_preview_manager_autogen/moc_predefs.h @@ -0,0 +1,508 @@ +#define __DBL_MIN_EXP__ (-1021) +#define __LDBL_MANT_DIG__ 64 +#define __cpp_nontype_template_parameter_auto 201606L +#define __UINT_LEAST16_MAX__ 0xffff +#define __FLT16_HAS_QUIET_NAN__ 1 +#define __ATOMIC_ACQUIRE 2 +#define QT_TESTCASE_BUILDDIR "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests" +#define __FLT128_MAX_10_EXP__ 4932 +#define __FLT_MIN__ 1.17549435082228750796873653722224568e-38F +#define __GCC_IEC_559_COMPLEX 2 +#define __cpp_aggregate_nsdmi 201304L +#define __UINT_LEAST8_TYPE__ unsigned char +#define __SIZEOF_FLOAT80__ 16 +#define __BFLT16_DENORM_MIN__ 9.18354961579912115600575419704879436e-41BF16 +#define __cpp_impl_three_way_comparison 201907L +#define __INTMAX_C(c) c ## L +#define __CHAR_BIT__ 8 +#define __cpp_designated_initializers 201707L +#define __UINT8_MAX__ 0xff +#define __SCHAR_WIDTH__ 8 +#define __WINT_MAX__ 0xffffffffU +#define __FLT32_MIN_EXP__ (-125) +#define __cpp_static_assert 201411L +#define __BFLT16_MIN_10_EXP__ (-37) +#define __cpp_inheriting_constructors 201511L +#define QT_GUI_LIB 1 +#define __ORDER_LITTLE_ENDIAN__ 1234 +#define __WCHAR_MAX__ 0x7fffffff +#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_2 1 +#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_4 1 +#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_8 1 +#define __GCC_ATOMIC_CHAR_LOCK_FREE 2 +#define __GCC_IEC_559 2 +#define __FLT32X_DECIMAL_DIG__ 17 +#define TLRENDER_OIIO 1 +#define __FLT_EVAL_METHOD__ 0 +#define __cpp_binary_literals 201304L +#define __FLT64_DECIMAL_DIG__ 17 +#define __cpp_noexcept_function_type 201510L +#define __GCC_ATOMIC_CHAR32_T_LOCK_FREE 2 +#define __cpp_variadic_templates 200704L +#define __UINT_FAST64_MAX__ 0xffffffffffffffffUL +#define __SIG_ATOMIC_TYPE__ int +#define __DBL_MIN_10_EXP__ (-307) +#define __FINITE_MATH_ONLY__ 0 +#define __cpp_variable_templates 201304L +#define __FLT32X_MAX_EXP__ 1024 +#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_1 1 +#define __FLT32_HAS_DENORM__ 1 +#define __UINT_FAST8_MAX__ 0xff +#define __cpp_rvalue_reference 200610L +#define __cpp_nested_namespace_definitions 201411L +#define __DEC64_MAX_EXP__ 385 +#define __INT8_C(c) c +#define __LDBL_HAS_INFINITY__ 1 +#define __INT_LEAST8_WIDTH__ 8 +#define __cpp_variadic_using 201611L +#define __UINT_LEAST64_MAX__ 0xffffffffffffffffUL +#define HAVE_FFMPEG 0 +#define __INT_LEAST8_MAX__ 0x7f +#define __cpp_attributes 200809L +#define __cpp_capture_star_this 201603L +#define __SHRT_MAX__ 0x7fff +#define __LDBL_MAX__ 1.18973149535723176502126385303097021e+4932L +#define __cpp_impl_coroutine 201902L +#define __FLT64X_MAX_10_EXP__ 4932 +#define __cpp_if_constexpr 201606L +#define __BFLT16_MAX_10_EXP__ 38 +#define __BFLT16_MAX_EXP__ 128 +#define __LDBL_IS_IEC_60559__ 1 +#define QT_NO_DEBUG 1 +#define __FLT64X_HAS_QUIET_NAN__ 1 +#define QT_TESTLIB_LIB 1 +#define TLRENDER_SDL2 1 +#define __UINT_LEAST8_MAX__ 0xff +#define __GCC_ATOMIC_BOOL_LOCK_FREE 2 +#define __FLT128_DENORM_MIN__ 6.47517511943802511092443895822764655e-4966F128 +#define __UINTMAX_TYPE__ long unsigned int +#define __cpp_nsdmi 200809L +#define __BFLT16_DECIMAL_DIG__ 4 +#define __linux 1 +#define __DEC32_EPSILON__ 1E-6DF +#define __FLT_EVAL_METHOD_TS_18661_3__ 0 +#define __UINT32_MAX__ 0xffffffffU +#define __GXX_EXPERIMENTAL_CXX0X__ 1 +#define __DBL_DENORM_MIN__ double(4.94065645841246544176568792868221372e-324L) +#define __FLT128_MIN_EXP__ (-16381) +#define __DEC64X_MAX_EXP__ 6145 +#define __WINT_MIN__ 0U +#define __FLT128_MIN_10_EXP__ (-4931) +#define __FLT32X_IS_IEC_60559__ 1 +#define __INT_LEAST16_WIDTH__ 16 +#define __SCHAR_MAX__ 0x7f +#define __FLT128_MANT_DIG__ 113 +#define __WCHAR_MIN__ (-__WCHAR_MAX__ - 1) +#define __INT64_C(c) c ## L +#define __cpp_impl_destroying_delete 201806L +#define __GCC_ATOMIC_POINTER_LOCK_FREE 2 +#define TLRENDER_JPEG 1 +#define __ATOMIC_SEQ_CST 5 +#define __unix 1 +#define __INT_LEAST64_MAX__ 0x7fffffffffffffffL +#define __FLT32X_MANT_DIG__ 53 +#define __GCC_ATOMIC_CHAR16_T_LOCK_FREE 2 +#define __cpp_aligned_new 201606L +#define __FLT32_MAX_10_EXP__ 38 +#define __FLT64X_EPSILON__ 1.08420217248550443400745280086994171e-19F64x +#define __STDC_HOSTED__ 1 +#define __DEC64_MIN_EXP__ (-382) +#define TLRENDER_PNG 1 +#define __cpp_decltype_auto 201304L +#define __DBL_DIG__ 15 +#define __STDC_EMBED_EMPTY__ 2 +#define __FLT_EPSILON__ 1.19209289550781250000000000000000000e-7F +#define __cpp_char8_t 202207L +#define __GXX_WEAK__ 1 +#define __SHRT_WIDTH__ 16 +#define __FLT32_IS_IEC_60559__ 1 +#define __LDBL_MIN__ 3.36210314311209350626267781732175260e-4932L +#define __DBL_IS_IEC_60559__ 1 +#define __DEC32_MAX__ 9.999999E96DF +#define __CHAR8_TYPE__ unsigned char +#define __cpp_threadsafe_static_init 200806L +#define __cpp_enumerator_attributes 201411L +#define TLRENDER_EXR 1 +#define __FLT64X_DENORM_MIN__ 3.64519953188247460252840593361941982e-4951F64x +#define __FLT32X_HAS_INFINITY__ 1 +#define __unix__ 1 +#define __INT_WIDTH__ 32 +#define __STDC_IEC_559__ 1 +#define __STDC_ISO_10646__ 201706L +#define __GCC_ATOMIC_CHAR8_T_LOCK_FREE 2 +#define __DECIMAL_DIG__ 21 +#define __STDC_IEC_559_COMPLEX__ 1 +#define __FLT64_EPSILON__ 2.22044604925031308084726333618164062e-16F64 +#define __gnu_linux__ 1 +#define __INT16_MAX__ 0x7fff +#define __FLT64_MIN_EXP__ (-1021) +#define __cpp_using_enum 201907L +#define __DEC64X_EPSILON__ 1E-33D64x +#define __FLT64X_MIN_10_EXP__ (-4931) +#define __LDBL_HAS_QUIET_NAN__ 1 +#define __FLT16_MIN_EXP__ (-13) +#define __FLT64_MANT_DIG__ 53 +#define __cpp_consteval 202211L +#define __FLT64X_MANT_DIG__ 64 +#define FTK_API_GL_4_1 1 +#define __BFLT16_DIG__ 2 +#define __GNUC__ 15 +#define __GXX_RTTI 1 +#define TLRENDER_FFMPEG_PLUGIN 1 +#define __MMX__ 1 +#define __FLT_HAS_DENORM__ 1 +#define __SIZEOF_LONG_DOUBLE__ 16 +#define __BIGGEST_ALIGNMENT__ 16 +#define __STDC_UTF_16__ 1 +#define __FLT64_MAX_10_EXP__ 308 +#define __BFLT16_IS_IEC_60559__ 0 +#define __FLT16_MAX_10_EXP__ 4 +#define __cpp_delegating_constructors 200604L +#define __DBL_MAX__ double(1.79769313486231570814527423731704357e+308L) +#define __cpp_raw_strings 200710L +#define __INT_FAST32_MAX__ 0x7fffffffffffffffL +#define __DBL_HAS_INFINITY__ 1 +#define __INT64_MAX__ 0x7fffffffffffffffL +#define __SIZEOF_FLOAT__ 4 +#define __HAVE_SPECULATION_SAFE_VALUE 1 +#define __cpp_fold_expressions 201603L +#define __DEC32_MIN_EXP__ (-94) +#define __INTPTR_WIDTH__ 64 +#define __UINT_LEAST32_MAX__ 0xffffffffU +#define __FLT32X_HAS_DENORM__ 1 +#define __INT_FAST16_TYPE__ long int +#define __MMX_WITH_SSE__ 1 +#define __LDBL_HAS_DENORM__ 1 +#define QT_WIDGETS_LIB 1 +#define __SEG_GS 1 +#define __BFLT16_EPSILON__ 7.81250000000000000000000000000000000e-3BF16 +#define __cplusplus 202002L +#define __cpp_ref_qualifiers 200710L +#define __DEC32_MIN__ 1E-95DF +#define __DEPRECATED 1 +#define __cpp_rvalue_references 200610L +#define __DBL_MAX_EXP__ 1024 +#define __WCHAR_WIDTH__ 32 +#define __FLT32_MAX__ 3.40282346638528859811704183484516925e+38F32 +#define __DEC128_EPSILON__ 1E-33DL +#define __FLT16_DECIMAL_DIG__ 5 +#define __SSE2_MATH__ 1 +#define __ATOMIC_HLE_RELEASE 131072 +#define __PTRDIFF_MAX__ 0x7fffffffffffffffL +#define __amd64 1 +#define __DEC64X_MAX__ 9.999999999999999999999999999999999E6144D64x +#define __ATOMIC_HLE_ACQUIRE 65536 +#define __GNUG__ 15 +#define __LONG_LONG_MAX__ 0x7fffffffffffffffLL +#define __SIZEOF_SIZE_T__ 8 +#define __BFLT16_HAS_INFINITY__ 1 +#define __FLT64X_MIN_EXP__ (-16381) +#define __SIZEOF_WINT_T__ 4 +#define __FLT32X_DIG__ 15 +#define __LONG_LONG_WIDTH__ 64 +#define QT_TESTCASE_SOURCEDIR "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests" +#define __cpp_initializer_lists 200806L +#define __FLT32_MAX_EXP__ 128 +#define ABI_ID "ELF" +#define __cpp_hex_float 201603L +#define __GXX_ABI_VERSION 1020 +#define __FLT_MIN_EXP__ (-125) +#define __GCC_HAVE_DWARF2_CFI_ASM 1 +#define TLRENDER_OCIO 1 +#define __x86_64 1 +#define __cpp_lambdas 200907L +#define __INT_FAST64_TYPE__ long int +#define __BFLT16_MAX__ 3.38953138925153547590470800371487867e+38BF16 +#define __FLT64_DENORM_MIN__ 4.94065645841246544176568792868221372e-324F64 +#define __cpp_template_auto 201606L +#define __FLT16_DENORM_MIN__ 5.96046447753906250000000000000000000e-8F16 +#define __FLT128_EPSILON__ 1.92592994438723585305597794258492732e-34F128 +#define __FLT64X_NORM_MAX__ 1.18973149535723176502126385303097021e+4932F64x +#define __SIZEOF_POINTER__ 8 +#define __SIZE_TYPE__ long unsigned int +#define __LP64__ 1 +#define __DBL_HAS_QUIET_NAN__ 1 +#define __FLT32X_EPSILON__ 2.22044604925031308084726333618164062e-16F32x +#define __LDBL_MAX_EXP__ 16384 +#define __DECIMAL_BID_FORMAT__ 1 +#define __FLT64_MIN_10_EXP__ (-307) +#define __FLT16_MIN_10_EXP__ (-4) +#define __FLT64X_DECIMAL_DIG__ 21 +#define __DEC128_MIN__ 1E-6143DL +#define __REGISTER_PREFIX__ +#define __UINT16_MAX__ 0xffff +#define __FLT128_HAS_INFINITY__ 1 +#define __FLT32_MIN__ 1.17549435082228750796873653722224568e-38F32 +#define __UINT8_TYPE__ unsigned char +#define __FLT_DIG__ 6 +#define __NO_INLINE__ 1 +#define __DEC_EVAL_METHOD__ 2 +#define __FLT_MANT_DIG__ 24 +#define __LDBL_DECIMAL_DIG__ 21 +#define __VERSION__ "15.2.1 20260123 (Red Hat 15.2.1-7)" +#define __UINT64_C(c) c ## UL +#define __cpp_unicode_characters 201411L +#define __DEC64X_MIN__ 1E-6143D64x +#define _STDC_PREDEF_H 1 +#define __INT_LEAST32_MAX__ 0x7fffffff +#define __GCC_ATOMIC_INT_LOCK_FREE 2 +#define __FLT128_MAX_EXP__ 16384 +#define __cpp_conditional_explicit 201806L +#define __FLT32_MANT_DIG__ 24 +#define __cpp_decltype 200707L +#define __FLOAT_WORD_ORDER__ __ORDER_LITTLE_ENDIAN__ +#define SIZEOF_DPTR (sizeof(void*)) +#define __FLT32X_MIN_EXP__ (-1021) +#define __cpp_aggregate_paren_init 201902L +#define __STDC_IEC_60559_COMPLEX__ 201404L +#define __cpp_aggregate_bases 201603L +#define __BFLT16_MIN__ 1.17549435082228750796873653722224568e-38BF16 +#define __FLT128_HAS_DENORM__ 1 +#define __FLT32_DECIMAL_DIG__ 9 +#define __FLT128_DIG__ 33 +#define __INT32_C(c) c +#define __DEC64_EPSILON__ 1E-15DD +#define __ORDER_PDP_ENDIAN__ 3412 +#define __DEC128_MIN_EXP__ (-6142) +#define __DEC128_MAX__ 9.999999999999999999999999999999999E6144DL +#define __cpp_constinit 201907L +#define __INT_FAST32_TYPE__ long int +#define QT_CONCURRENT_LIB 1 +#define __UINT_LEAST16_TYPE__ short unsigned int +#define __DEC64X_MANT_DIG__ 34 +#define __DEC128_MAX_EXP__ 6145 +#define unix 1 +#define __DBL_HAS_DENORM__ 1 +#define __cpp_rtti 199711L +#define __UINT64_MAX__ 0xffffffffffffffffUL +#define __FLT_IS_IEC_60559__ 1 +#define __GNUC_WIDE_EXECUTION_CHARSET_NAME "UTF-32LE" +#define __FLT64X_DIG__ 18 +#define __INT8_TYPE__ signed char +#define __cpp_digit_separators 201309L +#define __ELF__ 1 +#define __GCC_ASM_FLAG_OUTPUTS__ 1 +#define __UINT32_TYPE__ unsigned int +#define __BFLT16_HAS_QUIET_NAN__ 1 +#define __FLT_RADIX__ 2 +#define __INT_LEAST16_TYPE__ short int +#define __LDBL_EPSILON__ 1.08420217248550443400745280086994171e-19L +#define __UINTMAX_C(c) c ## UL +#define __GNUC_RH_RELEASE__ 7 +#define __FLT16_DIG__ 3 +#define __k8 1 +#define __FLT32X_MIN__ 2.22507385850720138309023271733240406e-308F32x +#define __SIG_ATOMIC_MAX__ 0x7fffffff +#define __cpp_constexpr 202002L +#define __GCC_ATOMIC_WCHAR_T_LOCK_FREE 2 +#define __USER_LABEL_PREFIX__ +#define __STDC_IEC_60559_BFP__ 201404L +#define __SIZEOF_PTRDIFF_T__ 8 +#define __FLT64X_HAS_INFINITY__ 1 +#define __SIZEOF_LONG__ 8 +#define __LDBL_DIG__ 18 +#define __FLT64_IS_IEC_60559__ 1 +#define __x86_64__ 1 +#define __FLT16_IS_IEC_60559__ 1 +#define __FLT16_MAX_EXP__ 16 +#define __DEC32_SUBNORMAL_MIN__ 0.000001E-95DF +#define __STDC_EMBED_FOUND__ 1 +#define __INT_FAST16_MAX__ 0x7fffffffffffffffL +#define __GCC_CONSTRUCTIVE_SIZE 64 +#define __FLT64_DIG__ 15 +#define __UINT_FAST32_MAX__ 0xffffffffffffffffUL +#define __UINT_LEAST64_TYPE__ long unsigned int +#define __FLT16_EPSILON__ 9.76562500000000000000000000000000000e-4F16 +#define __FLT_HAS_QUIET_NAN__ 1 +#define __FLT_MAX_10_EXP__ 38 +#define __FLT64X_HAS_DENORM__ 1 +#define __DEC128_SUBNORMAL_MIN__ 0.000000000000000000000000000000001E-6143DL +#define __FLT_HAS_INFINITY__ 1 +#define __GNUC_EXECUTION_CHARSET_NAME "UTF-8" +#define __cpp_unicode_literals 200710L +#define __UINT_FAST16_TYPE__ long unsigned int +#define __DEC64_MAX__ 9.999999999999999E384DD +#define __STDC_EMBED_NOT_FOUND__ 0 +#define __INT_FAST32_WIDTH__ 64 +#define __CHAR16_TYPE__ short unsigned int +#define __PRAGMA_REDEFINE_EXTNAME 1 +#define __DEC64X_SUBNORMAL_MIN__ 0.000000000000000000000000000000001E-6143D64x +#define __SIZE_WIDTH__ 64 +#define __SEG_FS 1 +#define HAVE_OPENIMAGEIO 0 +#define __INT_LEAST16_MAX__ 0x7fff +#define __FLT16_NORM_MAX__ 6.55040000000000000000000000000000000e+4F16 +#define __DEC64_MANT_DIG__ 16 +#define __FLT32_DENORM_MIN__ 1.40129846432481707092372958328991613e-45F32 +#define __SIG_ATOMIC_WIDTH__ 32 +#define __GCC_DESTRUCTIVE_SIZE 64 +#define __INT_LEAST64_TYPE__ long int +#define __INT16_TYPE__ short int +#define __INT_LEAST8_TYPE__ signed char +#define __FLT16_MAX__ 6.55040000000000000000000000000000000e+4F16 +#define __FLT128_MIN__ 3.36210314311209350626267781732175260e-4932F128 +#define __cpp_structured_bindings 201606L +#define __SIZEOF_INT__ 4 +#define __DEC32_MAX_EXP__ 97 +#define __INT_FAST8_MAX__ 0x7f +#define __FLT128_MAX__ 1.18973149535723176508575932662800702e+4932F128 +#define __INTPTR_MAX__ 0x7fffffffffffffffL +#define __cpp_sized_deallocation 201309L +#define __cpp_guaranteed_copy_elision 201606L +#define linux 1 +#define __FLT64_HAS_QUIET_NAN__ 1 +#define __FLT32_MIN_10_EXP__ (-37) +#define __EXCEPTIONS 1 +#define __UINT16_C(c) c +#define __PTRDIFF_WIDTH__ 64 +#define __cpp_range_based_for 201603L +#define __INT_FAST16_WIDTH__ 64 +#define __FLT64_HAS_INFINITY__ 1 +#define __FLT64X_MAX__ 1.18973149535723176502126385303097021e+4932F64x +#define __FLT16_HAS_INFINITY__ 1 +#define __STDCPP_DEFAULT_NEW_ALIGNMENT__ 16 +#define __SIG_ATOMIC_MIN__ (-__SIG_ATOMIC_MAX__ - 1) +#define __code_model_small__ 1 +#define __GCC_ATOMIC_LONG_LOCK_FREE 2 +#define __cpp_nontype_template_args 201911L +#define __DEC32_MANT_DIG__ 7 +#define __k8__ 1 +#define __INTPTR_TYPE__ long int +#define __UINT16_TYPE__ short unsigned int +#define __WCHAR_TYPE__ int +#define __UINTPTR_MAX__ 0xffffffffffffffffUL +#define __INT_FAST64_WIDTH__ 64 +#define __cpp_nontype_template_parameter_class 201806L +#define __cpp_concepts 202002L +#define __INT_FAST64_MAX__ 0x7fffffffffffffffL +#define __GCC_ATOMIC_TEST_AND_SET_TRUEVAL 1 +#define __FLT_NORM_MAX__ 3.40282346638528859811704183484516925e+38F +#define __FLT32_HAS_INFINITY__ 1 +#define __FLT64X_MAX_EXP__ 16384 +#define __UINT_FAST64_TYPE__ long unsigned int +#define __cpp_constexpr_in_decltype 201711L +#define __cpp_inline_variables 201606L +#define __BFLT16_MIN_EXP__ (-125) +#define __INT_MAX__ 0x7fffffff +#define __linux__ 1 +#define __INT64_TYPE__ long int +#define __FLT_MAX_EXP__ 128 +#define __ORDER_BIG_ENDIAN__ 4321 +#define __DBL_MANT_DIG__ 53 +#define QT_CORE_LIB 1 +#define __SIZEOF_FLOAT128__ 16 +#define __BFLT16_MANT_DIG__ 8 +#define __DEC64_MIN__ 1E-383DD +#define __WINT_TYPE__ unsigned int +#define __UINT_LEAST32_TYPE__ unsigned int +#define __SIZEOF_SHORT__ 2 +#define __FLT32_NORM_MAX__ 3.40282346638528859811704183484516925e+38F32 +#define __SSE__ 1 +#define __LDBL_MIN_EXP__ (-16381) +#define __FLT64_MAX__ 1.79769313486231570814527423731704357e+308F64 +#define __DEC64X_MIN_EXP__ (-6142) +#define __amd64__ 1 +#define __WINT_WIDTH__ 32 +#define __INT_LEAST64_WIDTH__ 64 +#define __FLT32X_MAX_10_EXP__ 308 +#define __cpp_namespace_attributes 201411L +#define __SIZEOF_INT128__ 16 +#define __FLT16_MIN__ 6.10351562500000000000000000000000000e-5F16 +#define __FLT64X_IS_IEC_60559__ 1 +#define __GXX_CONSTEXPR_ASM__ 1 +#define __LDBL_MAX_10_EXP__ 4932 +#define __ATOMIC_RELAXED 0 +#define __DBL_EPSILON__ double(2.22044604925031308084726333618164062e-16L) +#define __INT_LEAST32_TYPE__ int +#define _LP64 1 +#define __UINT8_C(c) c +#define __FLT64_MAX_EXP__ 1024 +#define __cpp_return_type_deduction 201304L +#define __SIZEOF_WCHAR_T__ 4 +#define __GNUC_PATCHLEVEL__ 1 +#define __FLT128_NORM_MAX__ 1.18973149535723176508575932662800702e+4932F128 +#define __FLT64_NORM_MAX__ 1.79769313486231570814527423731704357e+308F64 +#define __FLT128_HAS_QUIET_NAN__ 1 +#define __INTMAX_MAX__ 0x7fffffffffffffffL +#define TLRENDER_TIFF 1 +#define __INT_FAST8_TYPE__ signed char +#define __FLT64X_MIN__ 3.36210314311209350626267781732175260e-4932F64x +#define __STDCPP_THREADS__ 1 +#define __BFLT16_HAS_DENORM__ 1 +#define __GNUC_STDC_INLINE__ 1 +#define __FLT64_HAS_DENORM__ 1 +#define __FLT32_EPSILON__ 1.19209289550781250000000000000000000e-7F32 +#define __FLT16_HAS_DENORM__ 1 +#define __DBL_DECIMAL_DIG__ 17 +#define __STDC_UTF_32__ 1 +#define __INT_FAST8_WIDTH__ 8 +#define __FXSR__ 1 +#define __FLT32X_MAX__ 1.79769313486231570814527423731704357e+308F32x +#define __DBL_NORM_MAX__ double(1.79769313486231570814527423731704357e+308L) +#define __BYTE_ORDER__ __ORDER_LITTLE_ENDIAN__ +#define TLRENDER_FFMPEG 1 +#define __INTMAX_WIDTH__ 64 +#define __cpp_runtime_arrays 198712L +#define __FLT32_DIG__ 6 +#define __UINT64_TYPE__ long unsigned int +#define __UINT32_C(c) c ## U +#define __cpp_alias_templates 200704L +#define __cpp_constexpr_dynamic_alloc 201907L +#define __FLT_DENORM_MIN__ 1.40129846432481707092372958328991613e-45F +#define __FLT128_IS_IEC_60559__ 1 +#define __INT8_MAX__ 0x7f +#define __LONG_WIDTH__ 64 +#define __DBL_MIN__ double(2.22507385850720138309023271733240406e-308L) +#define __INT32_MAX__ 0x7fffffff +#define __UINT_FAST32_TYPE__ long unsigned int +#define __FLT16_MANT_DIG__ 11 +#define __FLT32X_NORM_MAX__ 1.79769313486231570814527423731704357e+308F32x +#define __CHAR32_TYPE__ unsigned int +#define __FLT_MAX__ 3.40282346638528859811704183484516925e+38F +#define __SSE2__ 1 +#define __cpp_deduction_guides 201907L +#define __BFLT16_NORM_MAX__ 3.38953138925153547590470800371487867e+38BF16 +#define __INT32_TYPE__ int +#define __SIZEOF_DOUBLE__ 8 +#define __cpp_exceptions 199711L +#define __FLT_MIN_10_EXP__ (-37) +#define __FLT64_MIN__ 2.22507385850720138309023271733240406e-308F64 +#define __INT_LEAST32_WIDTH__ 32 +#define __INTMAX_TYPE__ long int +#define __GLIBCXX_BITSIZE_INT_N_0 128 +#define __FLT32X_HAS_QUIET_NAN__ 1 +#define __ATOMIC_CONSUME 1 +#define __GNUC_MINOR__ 2 +#define __GLIBCXX_TYPE_INT_N_0 __int128 +#define __UINTMAX_MAX__ 0xffffffffffffffffUL +#define __FLT32X_DENORM_MIN__ 4.94065645841246544176568792868221372e-324F32x +#define __cpp_template_template_args 201611L +#define __DBL_MAX_10_EXP__ 308 +#define __LDBL_DENORM_MIN__ 3.64519953188247460252840593361941982e-4951L +#define __INT16_C(c) c +#define __STDC__ 1 +#define __PTRDIFF_TYPE__ long int +#define HAVE_TLRENDER 0 +#define __LONG_MAX__ 0x7fffffffffffffffL +#define __FLT32X_MIN_10_EXP__ (-307) +#define __UINTPTR_TYPE__ long unsigned int +#define __DEC64_SUBNORMAL_MIN__ 0.000000000000001E-383DD +#define __DEC128_MANT_DIG__ 34 +#define __LDBL_MIN_10_EXP__ (-4931) +#define __cpp_generic_lambdas 201707L +#define __SSE_MATH__ 1 +#define __SIZEOF_LONG_LONG__ 8 +#define __cpp_user_defined_literals 200809L +#define __FLT128_DECIMAL_DIG__ 36 +#define __GCC_ATOMIC_LLONG_LOCK_FREE 2 +#define __FLT32_HAS_QUIET_NAN__ 1 +#define __FLT_DECIMAL_DIG__ 9 +#define __UINT_FAST16_MAX__ 0xffffffffffffffffUL +#define __LDBL_NORM_MAX__ 1.18973149535723176502126385303097021e+4932L +#define __GCC_ATOMIC_SHORT_LOCK_FREE 2 +#define __SIZE_MAX__ 0xffffffffffffffffUL +#define __UINT_FAST8_TYPE__ unsigned char +#define _GNU_SOURCE 1 +#define __cpp_init_captures 201803L +#define __ATOMIC_ACQ_REL 4 +#define __ATOMIC_RELEASE 3 diff --git a/build-linux/tests/test_live_preview_manager_autogen/mocs_compilation.cpp b/build-linux/tests/test_live_preview_manager_autogen/mocs_compilation.cpp new file mode 100644 index 00000000..85307495 --- /dev/null +++ b/build-linux/tests/test_live_preview_manager_autogen/mocs_compilation.cpp @@ -0,0 +1,3 @@ +// This file is autogenerated. Changes will be overwritten. +#include "VNU7RW3YIC/moc_live_preview_manager.cpp" +#include "VNU7RW3YIC/moc_thumbnail_cache_manager.cpp" diff --git a/build-linux/tests/test_live_preview_manager_autogen/timestamp b/build-linux/tests/test_live_preview_manager_autogen/timestamp new file mode 100644 index 00000000..e69de29b diff --git a/build-linux/tests/test_media_converter_worker b/build-linux/tests/test_media_converter_worker new file mode 100755 index 00000000..ec23c45e Binary files /dev/null and b/build-linux/tests/test_media_converter_worker differ diff --git a/build-linux/tests/test_media_converter_worker_autogen/VNU7RW3YIC/moc_media_converter_worker.cpp b/build-linux/tests/test_media_converter_worker_autogen/VNU7RW3YIC/moc_media_converter_worker.cpp new file mode 100644 index 00000000..2b514e9f --- /dev/null +++ b/build-linux/tests/test_media_converter_worker_autogen/VNU7RW3YIC/moc_media_converter_worker.cpp @@ -0,0 +1,254 @@ +/**************************************************************************** +** Meta object code from reading C++ file 'media_converter_worker.h' +** +** Created by: The Qt Meta Object Compiler version 69 (Qt 6.10.3) +** +** WARNING! All changes made in this file will be lost! +*****************************************************************************/ + +#include "../../../../native/qt6/src/media_converter_worker.h" +#include +#include + +#include + +#include + + +#include +#if !defined(Q_MOC_OUTPUT_REVISION) +#error "The header file 'media_converter_worker.h' doesn't include ." +#elif Q_MOC_OUTPUT_REVISION != 69 +#error "This file was generated using the moc from 6.10.3. It" +#error "cannot be used with the include files from this version of Qt." +#error "(The moc has changed too much.)" +#endif + +#ifndef Q_CONSTINIT +#define Q_CONSTINIT +#endif + +QT_WARNING_PUSH +QT_WARNING_DISABLE_DEPRECATED +QT_WARNING_DISABLE_GCC("-Wuseless-cast") +namespace { +struct qt_meta_tag_ZN20MediaConverterWorkerE_t {}; +} // unnamed namespace + +template <> constexpr inline auto MediaConverterWorker::qt_create_metaobjectdata() +{ + namespace QMC = QtMocConstants; + QtMocHelpers::StringRefStorage qt_stringData { + "MediaConverterWorker", + "queueStarted", + "", + "total", + "fileStarted", + "index", + "srcPath", + "outPath", + "durationMs", + "logLine", + "line", + "currentFileProgress", + "percent", + "outTimeMs", + "totalMs", + "overallProgress", + "fileFinished", + "success", + "errorMsg", + "queueFinished", + "allSuccess", + "start", + "QList", + "tasks", + "cancelAll", + "retryCurrent", + "continueAfterFailure", + "onReadyStdOut", + "onReadyStdErr", + "onFinished", + "exitCode", + "QProcess::ExitStatus", + "status" + }; + + QtMocHelpers::UintData qt_methods { + // Signal 'queueStarted' + QtMocHelpers::SignalData(1, 2, QMC::AccessPublic, QMetaType::Void, {{ + { QMetaType::Int, 3 }, + }}), + // Signal 'fileStarted' + QtMocHelpers::SignalData(4, 2, QMC::AccessPublic, QMetaType::Void, {{ + { QMetaType::Int, 5 }, { QMetaType::QString, 6 }, { QMetaType::QString, 7 }, { QMetaType::LongLong, 8 }, + }}), + // Signal 'logLine' + QtMocHelpers::SignalData(9, 2, QMC::AccessPublic, QMetaType::Void, {{ + { QMetaType::QString, 10 }, + }}), + // Signal 'currentFileProgress' + QtMocHelpers::SignalData(11, 2, QMC::AccessPublic, QMetaType::Void, {{ + { QMetaType::Int, 5 }, { QMetaType::Int, 12 }, { QMetaType::LongLong, 13 }, { QMetaType::LongLong, 14 }, + }}), + // Signal 'overallProgress' + QtMocHelpers::SignalData(15, 2, QMC::AccessPublic, QMetaType::Void, {{ + { QMetaType::Int, 12 }, + }}), + // Signal 'fileFinished' + QtMocHelpers::SignalData(16, 2, QMC::AccessPublic, QMetaType::Void, {{ + { QMetaType::Int, 5 }, { QMetaType::Bool, 17 }, { QMetaType::QString, 18 }, + }}), + // Signal 'queueFinished' + QtMocHelpers::SignalData(19, 2, QMC::AccessPublic, QMetaType::Void, {{ + { QMetaType::Bool, 20 }, + }}), + // Slot 'start' + QtMocHelpers::SlotData &)>(21, 2, QMC::AccessPublic, QMetaType::Void, {{ + { 0x80000000 | 22, 23 }, + }}), + // Slot 'cancelAll' + QtMocHelpers::SlotData(24, 2, QMC::AccessPublic, QMetaType::Void), + // Slot 'retryCurrent' + QtMocHelpers::SlotData(25, 2, QMC::AccessPublic, QMetaType::Void), + // Slot 'continueAfterFailure' + QtMocHelpers::SlotData(26, 2, QMC::AccessPublic, QMetaType::Void), + // Slot 'onReadyStdOut' + QtMocHelpers::SlotData(27, 2, QMC::AccessPrivate, QMetaType::Void), + // Slot 'onReadyStdErr' + QtMocHelpers::SlotData(28, 2, QMC::AccessPrivate, QMetaType::Void), + // Slot 'onFinished' + QtMocHelpers::SlotData(29, 2, QMC::AccessPrivate, QMetaType::Void, {{ + { QMetaType::Int, 30 }, { 0x80000000 | 31, 32 }, + }}), + }; + QtMocHelpers::UintData qt_properties { + }; + QtMocHelpers::UintData qt_enums { + }; + return QtMocHelpers::metaObjectData(QMC::MetaObjectFlag{}, qt_stringData, + qt_methods, qt_properties, qt_enums); +} +Q_CONSTINIT const QMetaObject MediaConverterWorker::staticMetaObject = { { + QMetaObject::SuperData::link(), + qt_staticMetaObjectStaticContent.stringdata, + qt_staticMetaObjectStaticContent.data, + qt_static_metacall, + nullptr, + qt_staticMetaObjectRelocatingContent.metaTypes, + nullptr +} }; + +void MediaConverterWorker::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) +{ + auto *_t = static_cast(_o); + if (_c == QMetaObject::InvokeMetaMethod) { + switch (_id) { + case 0: _t->queueStarted((*reinterpret_cast>(_a[1]))); break; + case 1: _t->fileStarted((*reinterpret_cast>(_a[1])),(*reinterpret_cast>(_a[2])),(*reinterpret_cast>(_a[3])),(*reinterpret_cast>(_a[4]))); break; + case 2: _t->logLine((*reinterpret_cast>(_a[1]))); break; + case 3: _t->currentFileProgress((*reinterpret_cast>(_a[1])),(*reinterpret_cast>(_a[2])),(*reinterpret_cast>(_a[3])),(*reinterpret_cast>(_a[4]))); break; + case 4: _t->overallProgress((*reinterpret_cast>(_a[1]))); break; + case 5: _t->fileFinished((*reinterpret_cast>(_a[1])),(*reinterpret_cast>(_a[2])),(*reinterpret_cast>(_a[3]))); break; + case 6: _t->queueFinished((*reinterpret_cast>(_a[1]))); break; + case 7: _t->start((*reinterpret_cast>>(_a[1]))); break; + case 8: _t->cancelAll(); break; + case 9: _t->retryCurrent(); break; + case 10: _t->continueAfterFailure(); break; + case 11: _t->onReadyStdOut(); break; + case 12: _t->onReadyStdErr(); break; + case 13: _t->onFinished((*reinterpret_cast>(_a[1])),(*reinterpret_cast>(_a[2]))); break; + default: ; + } + } + if (_c == QMetaObject::IndexOfMethod) { + if (QtMocHelpers::indexOfMethod(_a, &MediaConverterWorker::queueStarted, 0)) + return; + if (QtMocHelpers::indexOfMethod(_a, &MediaConverterWorker::fileStarted, 1)) + return; + if (QtMocHelpers::indexOfMethod(_a, &MediaConverterWorker::logLine, 2)) + return; + if (QtMocHelpers::indexOfMethod(_a, &MediaConverterWorker::currentFileProgress, 3)) + return; + if (QtMocHelpers::indexOfMethod(_a, &MediaConverterWorker::overallProgress, 4)) + return; + if (QtMocHelpers::indexOfMethod(_a, &MediaConverterWorker::fileFinished, 5)) + return; + if (QtMocHelpers::indexOfMethod(_a, &MediaConverterWorker::queueFinished, 6)) + return; + } +} + +const QMetaObject *MediaConverterWorker::metaObject() const +{ + return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject; +} + +void *MediaConverterWorker::qt_metacast(const char *_clname) +{ + if (!_clname) return nullptr; + if (!strcmp(_clname, qt_staticMetaObjectStaticContent.strings)) + return static_cast(this); + return QObject::qt_metacast(_clname); +} + +int MediaConverterWorker::qt_metacall(QMetaObject::Call _c, int _id, void **_a) +{ + _id = QObject::qt_metacall(_c, _id, _a); + if (_id < 0) + return _id; + if (_c == QMetaObject::InvokeMetaMethod) { + if (_id < 14) + qt_static_metacall(this, _c, _id, _a); + _id -= 14; + } + if (_c == QMetaObject::RegisterMethodArgumentMetaType) { + if (_id < 14) + *reinterpret_cast(_a[0]) = QMetaType(); + _id -= 14; + } + return _id; +} + +// SIGNAL 0 +void MediaConverterWorker::queueStarted(int _t1) +{ + QMetaObject::activate(this, &staticMetaObject, 0, nullptr, _t1); +} + +// SIGNAL 1 +void MediaConverterWorker::fileStarted(int _t1, const QString & _t2, const QString & _t3, qint64 _t4) +{ + QMetaObject::activate(this, &staticMetaObject, 1, nullptr, _t1, _t2, _t3, _t4); +} + +// SIGNAL 2 +void MediaConverterWorker::logLine(const QString & _t1) +{ + QMetaObject::activate(this, &staticMetaObject, 2, nullptr, _t1); +} + +// SIGNAL 3 +void MediaConverterWorker::currentFileProgress(int _t1, int _t2, qint64 _t3, qint64 _t4) +{ + QMetaObject::activate(this, &staticMetaObject, 3, nullptr, _t1, _t2, _t3, _t4); +} + +// SIGNAL 4 +void MediaConverterWorker::overallProgress(int _t1) +{ + QMetaObject::activate(this, &staticMetaObject, 4, nullptr, _t1); +} + +// SIGNAL 5 +void MediaConverterWorker::fileFinished(int _t1, bool _t2, const QString & _t3) +{ + QMetaObject::activate(this, &staticMetaObject, 5, nullptr, _t1, _t2, _t3); +} + +// SIGNAL 6 +void MediaConverterWorker::queueFinished(bool _t1) +{ + QMetaObject::activate(this, &staticMetaObject, 6, nullptr, _t1); +} +QT_WARNING_POP diff --git a/build-linux/tests/test_media_converter_worker_autogen/deps b/build-linux/tests/test_media_converter_worker_autogen/deps new file mode 100644 index 00000000..1828e4c3 --- /dev/null +++ b/build-linux/tests/test_media_converter_worker_autogen/deps @@ -0,0 +1,917 @@ +test_media_converter_worker_autogen/timestamp: \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_media_converter_worker_autogen/moc_predefs.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/media_converter_worker.cpp \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/media_converter_worker.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/CMakeLists.txt \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/test_media_converter_worker.cpp \ + /usr/include/alloca.h \ + /usr/include/asm-generic/bitsperlong.h \ + /usr/include/asm-generic/errno-base.h \ + /usr/include/asm-generic/errno.h \ + /usr/include/asm-generic/int-ll64.h \ + /usr/include/asm-generic/posix_types.h \ + /usr/include/asm-generic/types.h \ + /usr/include/asm/bitsperlong.h \ + /usr/include/asm/errno.h \ + /usr/include/asm/posix_types.h \ + /usr/include/asm/posix_types_64.h \ + /usr/include/asm/types.h \ + /usr/include/asm/unistd.h \ + /usr/include/asm/unistd_64.h \ + /usr/include/assert.h \ + /usr/include/bits/atomic_wide_counter.h \ + /usr/include/bits/byteswap.h \ + /usr/include/bits/confname.h \ + /usr/include/bits/cpu-set.h \ + /usr/include/bits/endian.h \ + /usr/include/bits/endianness.h \ + /usr/include/bits/environments.h \ + /usr/include/bits/errno.h \ + /usr/include/bits/floatn-common.h \ + /usr/include/bits/floatn.h \ + /usr/include/bits/getopt_core.h \ + /usr/include/bits/getopt_posix.h \ + /usr/include/bits/libc-header-start.h \ + /usr/include/bits/local_lim.h \ + /usr/include/bits/locale.h \ + /usr/include/bits/long-double.h \ + /usr/include/bits/posix1_lim.h \ + /usr/include/bits/posix2_lim.h \ + /usr/include/bits/posix_opt.h \ + /usr/include/bits/pthread_stack_min-dynamic.h \ + /usr/include/bits/pthreadtypes-arch.h \ + /usr/include/bits/pthreadtypes.h \ + /usr/include/bits/sched.h \ + /usr/include/bits/select.h \ + /usr/include/bits/semaphore.h \ + /usr/include/bits/setjmp.h \ + /usr/include/bits/stdint-intn.h \ + /usr/include/bits/stdint-least.h \ + /usr/include/bits/stdint-uintn.h \ + /usr/include/bits/stdio_lim.h \ + /usr/include/bits/stdlib-float.h \ + /usr/include/bits/struct_mutex.h \ + /usr/include/bits/struct_rwlock.h \ + /usr/include/bits/syscall.h \ + /usr/include/bits/thread-shared-types.h \ + /usr/include/bits/time.h \ + /usr/include/bits/time64.h \ + /usr/include/bits/timesize.h \ + /usr/include/bits/timex.h \ + /usr/include/bits/types.h \ + /usr/include/bits/types/FILE.h \ + /usr/include/bits/types/__FILE.h \ + /usr/include/bits/types/__fpos64_t.h \ + /usr/include/bits/types/__fpos_t.h \ + /usr/include/bits/types/__locale_t.h \ + /usr/include/bits/types/__mbstate_t.h \ + /usr/include/bits/types/__sigset_t.h \ + /usr/include/bits/types/clock_t.h \ + /usr/include/bits/types/clockid_t.h \ + /usr/include/bits/types/cookie_io_functions_t.h \ + /usr/include/bits/types/error_t.h \ + /usr/include/bits/types/locale_t.h \ + /usr/include/bits/types/mbstate_t.h \ + /usr/include/bits/types/sigset_t.h \ + /usr/include/bits/types/struct_FILE.h \ + /usr/include/bits/types/struct___jmp_buf_tag.h \ + /usr/include/bits/types/struct_itimerspec.h \ + /usr/include/bits/types/struct_sched_param.h \ + /usr/include/bits/types/struct_timespec.h \ + /usr/include/bits/types/struct_timeval.h \ + /usr/include/bits/types/struct_tm.h \ + /usr/include/bits/types/time_t.h \ + /usr/include/bits/types/timer_t.h \ + /usr/include/bits/types/wint_t.h \ + /usr/include/bits/typesizes.h \ + /usr/include/bits/uintn-identity.h \ + /usr/include/bits/uio_lim.h \ + /usr/include/bits/unistd_ext.h \ + /usr/include/bits/waitflags.h \ + /usr/include/bits/waitstatus.h \ + /usr/include/bits/wchar.h \ + /usr/include/bits/wctype-wchar.h \ + /usr/include/bits/wordsize.h \ + /usr/include/bits/xopen_lim.h \ + /usr/include/c++/15/algorithm \ + /usr/include/c++/15/array \ + /usr/include/c++/15/atomic \ + /usr/include/c++/15/backward/auto_ptr.h \ + /usr/include/c++/15/backward/binders.h \ + /usr/include/c++/15/bit \ + /usr/include/c++/15/bits/algorithmfwd.h \ + /usr/include/c++/15/bits/align.h \ + /usr/include/c++/15/bits/alloc_traits.h \ + /usr/include/c++/15/bits/allocated_ptr.h \ + /usr/include/c++/15/bits/allocator.h \ + /usr/include/c++/15/bits/atomic_base.h \ + /usr/include/c++/15/bits/atomic_futex.h \ + /usr/include/c++/15/bits/atomic_lockfree_defines.h \ + /usr/include/c++/15/bits/atomic_timed_wait.h \ + /usr/include/c++/15/bits/atomic_wait.h \ + /usr/include/c++/15/bits/basic_ios.h \ + /usr/include/c++/15/bits/basic_ios.tcc \ + /usr/include/c++/15/bits/basic_string.h \ + /usr/include/c++/15/bits/basic_string.tcc \ + /usr/include/c++/15/bits/char_traits.h \ + /usr/include/c++/15/bits/charconv.h \ + /usr/include/c++/15/bits/chrono.h \ + /usr/include/c++/15/bits/chrono_io.h \ + /usr/include/c++/15/bits/codecvt.h \ + /usr/include/c++/15/bits/concept_check.h \ + /usr/include/c++/15/bits/cpp_type_traits.h \ + /usr/include/c++/15/bits/cxxabi_forced.h \ + /usr/include/c++/15/bits/cxxabi_init_exception.h \ + /usr/include/c++/15/bits/enable_special_members.h \ + /usr/include/c++/15/bits/erase_if.h \ + /usr/include/c++/15/bits/exception.h \ + /usr/include/c++/15/bits/exception_defines.h \ + /usr/include/c++/15/bits/exception_ptr.h \ + /usr/include/c++/15/bits/functexcept.h \ + /usr/include/c++/15/bits/functional_hash.h \ + /usr/include/c++/15/bits/hash_bytes.h \ + /usr/include/c++/15/bits/hashtable.h \ + /usr/include/c++/15/bits/hashtable_policy.h \ + /usr/include/c++/15/bits/invoke.h \ + /usr/include/c++/15/bits/ios_base.h \ + /usr/include/c++/15/bits/istream.tcc \ + /usr/include/c++/15/bits/iterator_concepts.h \ + /usr/include/c++/15/bits/list.tcc \ + /usr/include/c++/15/bits/locale_classes.h \ + /usr/include/c++/15/bits/locale_classes.tcc \ + /usr/include/c++/15/bits/locale_conv.h \ + /usr/include/c++/15/bits/locale_facets.h \ + /usr/include/c++/15/bits/locale_facets.tcc \ + /usr/include/c++/15/bits/locale_facets_nonio.h \ + /usr/include/c++/15/bits/locale_facets_nonio.tcc \ + /usr/include/c++/15/bits/localefwd.h \ + /usr/include/c++/15/bits/max_size_type.h \ + /usr/include/c++/15/bits/memory_resource.h \ + /usr/include/c++/15/bits/memoryfwd.h \ + /usr/include/c++/15/bits/move.h \ + /usr/include/c++/15/bits/nested_exception.h \ + /usr/include/c++/15/bits/new_allocator.h \ + /usr/include/c++/15/bits/node_handle.h \ + /usr/include/c++/15/bits/ostream.h \ + /usr/include/c++/15/bits/ostream.tcc \ + /usr/include/c++/15/bits/ostream_insert.h \ + /usr/include/c++/15/bits/parse_numbers.h \ + /usr/include/c++/15/bits/postypes.h \ + /usr/include/c++/15/bits/predefined_ops.h \ + /usr/include/c++/15/bits/ptr_traits.h \ + /usr/include/c++/15/bits/quoted_string.h \ + /usr/include/c++/15/bits/random.h \ + /usr/include/c++/15/bits/random.tcc \ + /usr/include/c++/15/bits/range_access.h \ + /usr/include/c++/15/bits/ranges_algo.h \ + /usr/include/c++/15/bits/ranges_algobase.h \ + /usr/include/c++/15/bits/ranges_base.h \ + /usr/include/c++/15/bits/ranges_cmp.h \ + /usr/include/c++/15/bits/ranges_uninitialized.h \ + /usr/include/c++/15/bits/ranges_util.h \ + /usr/include/c++/15/bits/refwrap.h \ + /usr/include/c++/15/bits/requires_hosted.h \ + /usr/include/c++/15/bits/semaphore_base.h \ + /usr/include/c++/15/bits/shared_ptr.h \ + /usr/include/c++/15/bits/shared_ptr_atomic.h \ + /usr/include/c++/15/bits/shared_ptr_base.h \ + /usr/include/c++/15/bits/specfun.h \ + /usr/include/c++/15/bits/sstream.tcc \ + /usr/include/c++/15/bits/std_abs.h \ + /usr/include/c++/15/bits/std_function.h \ + /usr/include/c++/15/bits/std_mutex.h \ + /usr/include/c++/15/bits/std_thread.h \ + /usr/include/c++/15/bits/stl_algo.h \ + /usr/include/c++/15/bits/stl_algobase.h \ + /usr/include/c++/15/bits/stl_bvector.h \ + /usr/include/c++/15/bits/stl_construct.h \ + /usr/include/c++/15/bits/stl_function.h \ + /usr/include/c++/15/bits/stl_heap.h \ + /usr/include/c++/15/bits/stl_iterator.h \ + /usr/include/c++/15/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/15/bits/stl_iterator_base_types.h \ + /usr/include/c++/15/bits/stl_list.h \ + /usr/include/c++/15/bits/stl_map.h \ + /usr/include/c++/15/bits/stl_multimap.h \ + /usr/include/c++/15/bits/stl_multiset.h \ + /usr/include/c++/15/bits/stl_numeric.h \ + /usr/include/c++/15/bits/stl_pair.h \ + /usr/include/c++/15/bits/stl_raw_storage_iter.h \ + /usr/include/c++/15/bits/stl_relops.h \ + /usr/include/c++/15/bits/stl_set.h \ + /usr/include/c++/15/bits/stl_tempbuf.h \ + /usr/include/c++/15/bits/stl_tree.h \ + /usr/include/c++/15/bits/stl_uninitialized.h \ + /usr/include/c++/15/bits/stl_vector.h \ + /usr/include/c++/15/bits/stream_iterator.h \ + /usr/include/c++/15/bits/streambuf.tcc \ + /usr/include/c++/15/bits/streambuf_iterator.h \ + /usr/include/c++/15/bits/string_view.tcc \ + /usr/include/c++/15/bits/stringfwd.h \ + /usr/include/c++/15/bits/this_thread_sleep.h \ + /usr/include/c++/15/bits/uniform_int_dist.h \ + /usr/include/c++/15/bits/unique_lock.h \ + /usr/include/c++/15/bits/unique_ptr.h \ + /usr/include/c++/15/bits/unordered_map.h \ + /usr/include/c++/15/bits/unordered_set.h \ + /usr/include/c++/15/bits/uses_allocator.h \ + /usr/include/c++/15/bits/uses_allocator_args.h \ + /usr/include/c++/15/bits/utility.h \ + /usr/include/c++/15/bits/vector.tcc \ + /usr/include/c++/15/bits/version.h \ + /usr/include/c++/15/cassert \ + /usr/include/c++/15/cctype \ + /usr/include/c++/15/cerrno \ + /usr/include/c++/15/charconv \ + /usr/include/c++/15/chrono \ + /usr/include/c++/15/climits \ + /usr/include/c++/15/clocale \ + /usr/include/c++/15/cmath \ + /usr/include/c++/15/compare \ + /usr/include/c++/15/concepts \ + /usr/include/c++/15/condition_variable \ + /usr/include/c++/15/cstddef \ + /usr/include/c++/15/cstdint \ + /usr/include/c++/15/cstdio \ + /usr/include/c++/15/cstdlib \ + /usr/include/c++/15/cstring \ + /usr/include/c++/15/ctime \ + /usr/include/c++/15/cwchar \ + /usr/include/c++/15/cwctype \ + /usr/include/c++/15/debug/assertions.h \ + /usr/include/c++/15/debug/debug.h \ + /usr/include/c++/15/exception \ + /usr/include/c++/15/experimental/source_location \ + /usr/include/c++/15/ext/aligned_buffer.h \ + /usr/include/c++/15/ext/alloc_traits.h \ + /usr/include/c++/15/ext/atomicity.h \ + /usr/include/c++/15/ext/concurrence.h \ + /usr/include/c++/15/ext/numeric_traits.h \ + /usr/include/c++/15/ext/string_conversions.h \ + /usr/include/c++/15/ext/type_traits.h \ + /usr/include/c++/15/filesystem \ + /usr/include/c++/15/format \ + /usr/include/c++/15/functional \ + /usr/include/c++/15/future \ + /usr/include/c++/15/initializer_list \ + /usr/include/c++/15/iomanip \ + /usr/include/c++/15/ios \ + /usr/include/c++/15/iosfwd \ + /usr/include/c++/15/istream \ + /usr/include/c++/15/iterator \ + /usr/include/c++/15/limits \ + /usr/include/c++/15/list \ + /usr/include/c++/15/locale \ + /usr/include/c++/15/map \ + /usr/include/c++/15/memory \ + /usr/include/c++/15/memory_resource \ + /usr/include/c++/15/mutex \ + /usr/include/c++/15/new \ + /usr/include/c++/15/numeric \ + /usr/include/c++/15/optional \ + /usr/include/c++/15/ostream \ + /usr/include/c++/15/pstl/execution_defs.h \ + /usr/include/c++/15/pstl/glue_numeric_defs.h \ + /usr/include/c++/15/pstl/pstl_config.h \ + /usr/include/c++/15/random \ + /usr/include/c++/15/ratio \ + /usr/include/c++/15/semaphore \ + /usr/include/c++/15/set \ + /usr/include/c++/15/shared_mutex \ + /usr/include/c++/15/source_location \ + /usr/include/c++/15/sstream \ + /usr/include/c++/15/stdexcept \ + /usr/include/c++/15/stop_token \ + /usr/include/c++/15/streambuf \ + /usr/include/c++/15/string \ + /usr/include/c++/15/string_view \ + /usr/include/c++/15/system_error \ + /usr/include/c++/15/tr1/bessel_function.tcc \ + /usr/include/c++/15/tr1/beta_function.tcc \ + /usr/include/c++/15/tr1/ell_integral.tcc \ + /usr/include/c++/15/tr1/exp_integral.tcc \ + /usr/include/c++/15/tr1/gamma.tcc \ + /usr/include/c++/15/tr1/hypergeometric.tcc \ + /usr/include/c++/15/tr1/legendre_function.tcc \ + /usr/include/c++/15/tr1/modified_bessel_func.tcc \ + /usr/include/c++/15/tr1/poly_hermite.tcc \ + /usr/include/c++/15/tr1/poly_laguerre.tcc \ + /usr/include/c++/15/tr1/riemann_zeta.tcc \ + /usr/include/c++/15/tr1/special_function_util.h \ + /usr/include/c++/15/tuple \ + /usr/include/c++/15/type_traits \ + /usr/include/c++/15/typeinfo \ + /usr/include/c++/15/unordered_map \ + /usr/include/c++/15/unordered_set \ + /usr/include/c++/15/utility \ + /usr/include/c++/15/variant \ + /usr/include/c++/15/vector \ + /usr/include/c++/15/version \ + /usr/include/c++/15/x86_64-redhat-linux/bits/atomic_word.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/c++allocator.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/c++config.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/c++locale.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/cpu_defines.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/ctype_base.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/ctype_inline.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/error_constants.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/gthr-default.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/gthr.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/messages_members.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/opt_random.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/os_defines.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/time_members.h \ + /usr/include/ctype.h \ + /usr/include/endian.h \ + /usr/include/errno.h \ + /usr/include/features-time64.h \ + /usr/include/features.h \ + /usr/include/gnu/stubs-64.h \ + /usr/include/gnu/stubs.h \ + /usr/include/libintl.h \ + /usr/include/limits.h \ + /usr/include/linux/close_range.h \ + /usr/include/linux/errno.h \ + /usr/include/linux/limits.h \ + /usr/include/linux/posix_types.h \ + /usr/include/linux/sched/types.h \ + /usr/include/linux/stddef.h \ + /usr/include/linux/types.h \ + /usr/include/locale.h \ + /usr/include/pthread.h \ + /usr/include/qt6/QtCore/QAbstractItemModel \ + /usr/include/qt6/QtCore/QDeadlineTimer \ + /usr/include/qt6/QtCore/QElapsedTimer \ + /usr/include/qt6/QtCore/QEvent \ + /usr/include/qt6/QtCore/QFileInfo \ + /usr/include/qt6/QtCore/QHash \ + /usr/include/qt6/QtCore/QList \ + /usr/include/qt6/QtCore/QMap \ + /usr/include/qt6/QtCore/QMargins \ + /usr/include/qt6/QtCore/QMetaEnum \ + /usr/include/qt6/QtCore/QMutex \ + /usr/include/qt6/QtCore/QObject \ + /usr/include/qt6/QtCore/QProcess \ + /usr/include/qt6/QtCore/QRect \ + /usr/include/qt6/QtCore/QSize \ + /usr/include/qt6/QtCore/QSizeF \ + /usr/include/qt6/QtCore/QString \ + /usr/include/qt6/QtCore/QStringList \ + /usr/include/qt6/QtCore/QTemporaryDir \ + /usr/include/qt6/QtCore/QVariant \ + /usr/include/qt6/QtCore/QVector \ + /usr/include/qt6/QtCore/QtCore \ + /usr/include/qt6/QtCore/QtCoreDepends \ + /usr/include/qt6/QtCore/q17memory.h \ + /usr/include/qt6/QtCore/q20algorithm.h \ + /usr/include/qt6/QtCore/q20chrono.h \ + /usr/include/qt6/QtCore/q20functional.h \ + /usr/include/qt6/QtCore/q20iterator.h \ + /usr/include/qt6/QtCore/q20map.h \ + /usr/include/qt6/QtCore/q20memory.h \ + /usr/include/qt6/QtCore/q20type_traits.h \ + /usr/include/qt6/QtCore/q20utility.h \ + /usr/include/qt6/QtCore/q20vector.h \ + /usr/include/qt6/QtCore/q23functional.h \ + /usr/include/qt6/QtCore/q23type_traits.h \ + /usr/include/qt6/QtCore/q23utility.h \ + /usr/include/qt6/QtCore/q26numeric.h \ + /usr/include/qt6/QtCore/qabstractanimation.h \ + /usr/include/qt6/QtCore/qabstracteventdispatcher.h \ + /usr/include/qt6/QtCore/qabstractitemmodel.h \ + /usr/include/qt6/QtCore/qabstractnativeeventfilter.h \ + /usr/include/qt6/QtCore/qabstractproxymodel.h \ + /usr/include/qt6/QtCore/qalgorithms.h \ + /usr/include/qt6/QtCore/qalloc.h \ + /usr/include/qt6/QtCore/qanimationgroup.h \ + /usr/include/qt6/QtCore/qanystringview.h \ + /usr/include/qt6/QtCore/qapplicationstatic.h \ + /usr/include/qt6/QtCore/qarraydata.h \ + /usr/include/qt6/QtCore/qarraydataops.h \ + /usr/include/qt6/QtCore/qarraydatapointer.h \ + /usr/include/qt6/QtCore/qassert.h \ + /usr/include/qt6/QtCore/qassociativeiterable.h \ + /usr/include/qt6/QtCore/qatomic.h \ + /usr/include/qt6/QtCore/qatomic_cxx11.h \ + /usr/include/qt6/QtCore/qatomicscopedvaluerollback.h \ + /usr/include/qt6/QtCore/qbasicatomic.h \ + /usr/include/qt6/QtCore/qbasictimer.h \ + /usr/include/qt6/QtCore/qbindingstorage.h \ + /usr/include/qt6/QtCore/qbitarray.h \ + /usr/include/qt6/QtCore/qbuffer.h \ + /usr/include/qt6/QtCore/qbytearray.h \ + /usr/include/qt6/QtCore/qbytearrayalgorithms.h \ + /usr/include/qt6/QtCore/qbytearraylist.h \ + /usr/include/qt6/QtCore/qbytearraymatcher.h \ + /usr/include/qt6/QtCore/qbytearrayview.h \ + /usr/include/qt6/QtCore/qcache.h \ + /usr/include/qt6/QtCore/qcalendar.h \ + /usr/include/qt6/QtCore/qcborarray.h \ + /usr/include/qt6/QtCore/qcborcommon.h \ + /usr/include/qt6/QtCore/qcbormap.h \ + /usr/include/qt6/QtCore/qcborstream.h \ + /usr/include/qt6/QtCore/qcborstreamreader.h \ + /usr/include/qt6/QtCore/qcborstreamwriter.h \ + /usr/include/qt6/QtCore/qcborvalue.h \ + /usr/include/qt6/QtCore/qchar.h \ + /usr/include/qt6/QtCore/qcheckedint_impl.h \ + /usr/include/qt6/QtCore/qchronotimer.h \ + /usr/include/qt6/QtCore/qcollator.h \ + /usr/include/qt6/QtCore/qcommandlineoption.h \ + /usr/include/qt6/QtCore/qcommandlineparser.h \ + /usr/include/qt6/QtCore/qcompare.h \ + /usr/include/qt6/QtCore/qcompare_impl.h \ + /usr/include/qt6/QtCore/qcomparehelpers.h \ + /usr/include/qt6/QtCore/qcompilerdetection.h \ + /usr/include/qt6/QtCore/qconcatenatetablesproxymodel.h \ + /usr/include/qt6/QtCore/qconfig-64.h \ + /usr/include/qt6/QtCore/qconfig.h \ + /usr/include/qt6/QtCore/qconstructormacros.h \ + /usr/include/qt6/QtCore/qcontainerfwd.h \ + /usr/include/qt6/QtCore/qcontainerinfo.h \ + /usr/include/qt6/QtCore/qcontainertools_impl.h \ + /usr/include/qt6/QtCore/qcontiguouscache.h \ + /usr/include/qt6/QtCore/qcoreapplication.h \ + /usr/include/qt6/QtCore/qcoreapplication_platform.h \ + /usr/include/qt6/QtCore/qcoreevent.h \ + /usr/include/qt6/QtCore/qcryptographichash.h \ + /usr/include/qt6/QtCore/qdarwinhelpers.h \ + /usr/include/qt6/QtCore/qdatastream.h \ + /usr/include/qt6/QtCore/qdatetime.h \ + /usr/include/qt6/QtCore/qdeadlinetimer.h \ + /usr/include/qt6/QtCore/qdebug.h \ + /usr/include/qt6/QtCore/qdir.h \ + /usr/include/qt6/QtCore/qdiriterator.h \ + /usr/include/qt6/QtCore/qdirlisting.h \ + /usr/include/qt6/QtCore/qeasingcurve.h \ + /usr/include/qt6/QtCore/qelapsedtimer.h \ + /usr/include/qt6/QtCore/qendian.h \ + /usr/include/qt6/QtCore/qeventloop.h \ + /usr/include/qt6/QtCore/qexception.h \ + /usr/include/qt6/QtCore/qexceptionhandling.h \ + /usr/include/qt6/QtCore/qfactoryinterface.h \ + /usr/include/qt6/QtCore/qfile.h \ + /usr/include/qt6/QtCore/qfiledevice.h \ + /usr/include/qt6/QtCore/qfileinfo.h \ + /usr/include/qt6/QtCore/qfileselector.h \ + /usr/include/qt6/QtCore/qfilesystemwatcher.h \ + /usr/include/qt6/QtCore/qflags.h \ + /usr/include/qt6/QtCore/qfloat16.h \ + /usr/include/qt6/QtCore/qforeach.h \ + /usr/include/qt6/QtCore/qfunctionaltools_impl.h \ + /usr/include/qt6/QtCore/qfunctionpointer.h \ + /usr/include/qt6/QtCore/qfuture.h \ + /usr/include/qt6/QtCore/qfuture_impl.h \ + /usr/include/qt6/QtCore/qfutureinterface.h \ + /usr/include/qt6/QtCore/qfuturesynchronizer.h \ + /usr/include/qt6/QtCore/qfuturewatcher.h \ + /usr/include/qt6/QtCore/qgenericatomic.h \ + /usr/include/qt6/QtCore/qglobal.h \ + /usr/include/qt6/QtCore/qglobalstatic.h \ + /usr/include/qt6/QtCore/qhash.h \ + /usr/include/qt6/QtCore/qhashfunctions.h \ + /usr/include/qt6/QtCore/qidentityproxymodel.h \ + /usr/include/qt6/QtCore/qiodevice.h \ + /usr/include/qt6/QtCore/qiodevicebase.h \ + /usr/include/qt6/QtCore/qitemselectionmodel.h \ + /usr/include/qt6/QtCore/qiterable.h \ + /usr/include/qt6/QtCore/qiterator.h \ + /usr/include/qt6/QtCore/qjsonarray.h \ + /usr/include/qt6/QtCore/qjsondocument.h \ + /usr/include/qt6/QtCore/qjsonobject.h \ + /usr/include/qt6/QtCore/qjsonparseerror.h \ + /usr/include/qt6/QtCore/qjsonvalue.h \ + /usr/include/qt6/QtCore/qlatin1stringmatcher.h \ + /usr/include/qt6/QtCore/qlatin1stringview.h \ + /usr/include/qt6/QtCore/qlibrary.h \ + /usr/include/qt6/QtCore/qlibraryinfo.h \ + /usr/include/qt6/QtCore/qline.h \ + /usr/include/qt6/QtCore/qlist.h \ + /usr/include/qt6/QtCore/qlocale.h \ + /usr/include/qt6/QtCore/qlockfile.h \ + /usr/include/qt6/QtCore/qlogging.h \ + /usr/include/qt6/QtCore/qloggingcategory.h \ + /usr/include/qt6/QtCore/qmalloc.h \ + /usr/include/qt6/QtCore/qmap.h \ + /usr/include/qt6/QtCore/qmargins.h \ + /usr/include/qt6/QtCore/qmath.h \ + /usr/include/qt6/QtCore/qmessageauthenticationcode.h \ + /usr/include/qt6/QtCore/qmetacontainer.h \ + /usr/include/qt6/QtCore/qmetaobject.h \ + /usr/include/qt6/QtCore/qmetatype.h \ + /usr/include/qt6/QtCore/qmimedata.h \ + /usr/include/qt6/QtCore/qmimedatabase.h \ + /usr/include/qt6/QtCore/qmimetype.h \ + /usr/include/qt6/QtCore/qminmax.h \ + /usr/include/qt6/QtCore/qmutex.h \ + /usr/include/qt6/QtCore/qnamespace.h \ + /usr/include/qt6/QtCore/qnativeinterface.h \ + /usr/include/qt6/QtCore/qnumeric.h \ + /usr/include/qt6/QtCore/qobject.h \ + /usr/include/qt6/QtCore/qobject_impl.h \ + /usr/include/qt6/QtCore/qobjectcleanuphandler.h \ + /usr/include/qt6/QtCore/qobjectdefs.h \ + /usr/include/qt6/QtCore/qobjectdefs_impl.h \ + /usr/include/qt6/QtCore/qoperatingsystemversion.h \ + /usr/include/qt6/QtCore/qoverload.h \ + /usr/include/qt6/QtCore/qpair.h \ + /usr/include/qt6/QtCore/qparallelanimationgroup.h \ + /usr/include/qt6/QtCore/qpauseanimation.h \ + /usr/include/qt6/QtCore/qpermissions.h \ + /usr/include/qt6/QtCore/qplugin.h \ + /usr/include/qt6/QtCore/qpluginloader.h \ + /usr/include/qt6/QtCore/qpoint.h \ + /usr/include/qt6/QtCore/qpointer.h \ + /usr/include/qt6/QtCore/qprocess.h \ + /usr/include/qt6/QtCore/qprocessordetection.h \ + /usr/include/qt6/QtCore/qpromise.h \ + /usr/include/qt6/QtCore/qproperty.h \ + /usr/include/qt6/QtCore/qpropertyanimation.h \ + /usr/include/qt6/QtCore/qpropertyprivate.h \ + /usr/include/qt6/QtCore/qqueue.h \ + /usr/include/qt6/QtCore/qrandom.h \ + /usr/include/qt6/QtCore/qrangemodel.h \ + /usr/include/qt6/QtCore/qrangemodel_impl.h \ + /usr/include/qt6/QtCore/qreadwritelock.h \ + /usr/include/qt6/QtCore/qrect.h \ + /usr/include/qt6/QtCore/qrefcount.h \ + /usr/include/qt6/QtCore/qregularexpression.h \ + /usr/include/qt6/QtCore/qresource.h \ + /usr/include/qt6/QtCore/qresultstore.h \ + /usr/include/qt6/QtCore/qrunnable.h \ + /usr/include/qt6/QtCore/qsavefile.h \ + /usr/include/qt6/QtCore/qscopedpointer.h \ + /usr/include/qt6/QtCore/qscopedvaluerollback.h \ + /usr/include/qt6/QtCore/qscopeguard.h \ + /usr/include/qt6/QtCore/qsemaphore.h \ + /usr/include/qt6/QtCore/qsequentialanimationgroup.h \ + /usr/include/qt6/QtCore/qsequentialiterable.h \ + /usr/include/qt6/QtCore/qset.h \ + /usr/include/qt6/QtCore/qsettings.h \ + /usr/include/qt6/QtCore/qshareddata.h \ + /usr/include/qt6/QtCore/qshareddata_impl.h \ + /usr/include/qt6/QtCore/qsharedmemory.h \ + /usr/include/qt6/QtCore/qsharedpointer.h \ + /usr/include/qt6/QtCore/qsharedpointer_impl.h \ + /usr/include/qt6/QtCore/qsignalmapper.h \ + /usr/include/qt6/QtCore/qsimd.h \ + /usr/include/qt6/QtCore/qsize.h \ + /usr/include/qt6/QtCore/qsocketnotifier.h \ + /usr/include/qt6/QtCore/qsortfilterproxymodel.h \ + /usr/include/qt6/QtCore/qspan.h \ + /usr/include/qt6/QtCore/qstack.h \ + /usr/include/qt6/QtCore/qstandardpaths.h \ + /usr/include/qt6/QtCore/qstaticlatin1stringmatcher.h \ + /usr/include/qt6/QtCore/qstdlibdetection.h \ + /usr/include/qt6/QtCore/qstorageinfo.h \ + /usr/include/qt6/QtCore/qstring.h \ + /usr/include/qt6/QtCore/qstringalgorithms.h \ + /usr/include/qt6/QtCore/qstringbuilder.h \ + /usr/include/qt6/QtCore/qstringconverter.h \ + /usr/include/qt6/QtCore/qstringconverter_base.h \ + /usr/include/qt6/QtCore/qstringfwd.h \ + /usr/include/qt6/QtCore/qstringlist.h \ + /usr/include/qt6/QtCore/qstringlistmodel.h \ + /usr/include/qt6/QtCore/qstringliteral.h \ + /usr/include/qt6/QtCore/qstringmatcher.h \ + /usr/include/qt6/QtCore/qstringtokenizer.h \ + /usr/include/qt6/QtCore/qstringview.h \ + /usr/include/qt6/QtCore/qswap.h \ + /usr/include/qt6/QtCore/qsysinfo.h \ + /usr/include/qt6/QtCore/qsystemdetection.h \ + /usr/include/qt6/QtCore/qsystemsemaphore.h \ + /usr/include/qt6/QtCore/qtaggedpointer.h \ + /usr/include/qt6/QtCore/qtclasshelpermacros.h \ + /usr/include/qt6/QtCore/qtconfiginclude.h \ + /usr/include/qt6/QtCore/qtconfigmacros.h \ + /usr/include/qt6/QtCore/qtcore-config.h \ + /usr/include/qt6/QtCore/qtcoreexports.h \ + /usr/include/qt6/QtCore/qtcoreglobal.h \ + /usr/include/qt6/QtCore/qtcoreversion.h \ + /usr/include/qt6/QtCore/qtdeprecationdefinitions.h \ + /usr/include/qt6/QtCore/qtdeprecationmarkers.h \ + /usr/include/qt6/QtCore/qtemporarydir.h \ + /usr/include/qt6/QtCore/qtemporaryfile.h \ + /usr/include/qt6/QtCore/qtenvironmentvariables.h \ + /usr/include/qt6/QtCore/qtestsupport_core.h \ + /usr/include/qt6/QtCore/qtextboundaryfinder.h \ + /usr/include/qt6/QtCore/qtextstream.h \ + /usr/include/qt6/QtCore/qtformat_impl.h \ + /usr/include/qt6/QtCore/qthread.h \ + /usr/include/qt6/QtCore/qthreadpool.h \ + /usr/include/qt6/QtCore/qthreadstorage.h \ + /usr/include/qt6/QtCore/qtimeline.h \ + /usr/include/qt6/QtCore/qtimer.h \ + /usr/include/qt6/QtCore/qtimezone.h \ + /usr/include/qt6/QtCore/qtipccommon.h \ + /usr/include/qt6/QtCore/qtmetamacros.h \ + /usr/include/qt6/QtCore/qtmocconstants.h \ + /usr/include/qt6/QtCore/qtnoop.h \ + /usr/include/qt6/QtCore/qtpreprocessorsupport.h \ + /usr/include/qt6/QtCore/qtranslator.h \ + /usr/include/qt6/QtCore/qtransposeproxymodel.h \ + /usr/include/qt6/QtCore/qtresource.h \ + /usr/include/qt6/QtCore/qtsan_impl.h \ + /usr/include/qt6/QtCore/qtsymbolmacros.h \ + /usr/include/qt6/QtCore/qttranslation.h \ + /usr/include/qt6/QtCore/qttypetraits.h \ + /usr/include/qt6/QtCore/qtversion.h \ + /usr/include/qt6/QtCore/qtversionchecks.h \ + /usr/include/qt6/QtCore/qtypeinfo.h \ + /usr/include/qt6/QtCore/qtyperevision.h \ + /usr/include/qt6/QtCore/qtypes.h \ + /usr/include/qt6/QtCore/qurl.h \ + /usr/include/qt6/QtCore/qurlquery.h \ + /usr/include/qt6/QtCore/qutf8stringview.h \ + /usr/include/qt6/QtCore/quuid.h \ + /usr/include/qt6/QtCore/qvariant.h \ + /usr/include/qt6/QtCore/qvariantanimation.h \ + /usr/include/qt6/QtCore/qvarianthash.h \ + /usr/include/qt6/QtCore/qvariantlist.h \ + /usr/include/qt6/QtCore/qvariantmap.h \ + /usr/include/qt6/QtCore/qvarlengtharray.h \ + /usr/include/qt6/QtCore/qvector.h \ + /usr/include/qt6/QtCore/qversionnumber.h \ + /usr/include/qt6/QtCore/qversiontagging.h \ + /usr/include/qt6/QtCore/qwaitcondition.h \ + /usr/include/qt6/QtCore/qwineventnotifier.h \ + /usr/include/qt6/QtCore/qxmlstream.h \ + /usr/include/qt6/QtCore/qxpfunctional.h \ + /usr/include/qt6/QtCore/qxptype_traits.h \ + /usr/include/qt6/QtCore/qyieldcpu.h \ + /usr/include/qt6/QtGui/QBrush \ + /usr/include/qt6/QtGui/QColor \ + /usr/include/qt6/QtGui/QFont \ + /usr/include/qt6/QtGui/QIcon \ + /usr/include/qt6/QtGui/QImage \ + /usr/include/qt6/QtGui/QPixmap \ + /usr/include/qt6/QtGui/QTransform \ + /usr/include/qt6/QtGui/qaction.h \ + /usr/include/qt6/QtGui/qbitmap.h \ + /usr/include/qt6/QtGui/qbrush.h \ + /usr/include/qt6/QtGui/qcolor.h \ + /usr/include/qt6/QtGui/qcursor.h \ + /usr/include/qt6/QtGui/qevent.h \ + /usr/include/qt6/QtGui/qeventpoint.h \ + /usr/include/qt6/QtGui/qfont.h \ + /usr/include/qt6/QtGui/qfontinfo.h \ + /usr/include/qt6/QtGui/qfontmetrics.h \ + /usr/include/qt6/QtGui/qfontvariableaxis.h \ + /usr/include/qt6/QtGui/qguiapplication.h \ + /usr/include/qt6/QtGui/qguiapplication_platform.h \ + /usr/include/qt6/QtGui/qicon.h \ + /usr/include/qt6/QtGui/qimage.h \ + /usr/include/qt6/QtGui/qinputdevice.h \ + /usr/include/qt6/QtGui/qinputmethod.h \ + /usr/include/qt6/QtGui/qkeysequence.h \ + /usr/include/qt6/QtGui/qpaintdevice.h \ + /usr/include/qt6/QtGui/qpalette.h \ + /usr/include/qt6/QtGui/qpixelformat.h \ + /usr/include/qt6/QtGui/qpixmap.h \ + /usr/include/qt6/QtGui/qpointingdevice.h \ + /usr/include/qt6/QtGui/qpolygon.h \ + /usr/include/qt6/QtGui/qregion.h \ + /usr/include/qt6/QtGui/qrgb.h \ + /usr/include/qt6/QtGui/qrgba64.h \ + /usr/include/qt6/QtGui/qscreen.h \ + /usr/include/qt6/QtGui/qscreen_platform.h \ + /usr/include/qt6/QtGui/qsurface.h \ + /usr/include/qt6/QtGui/qsurfaceformat.h \ + /usr/include/qt6/QtGui/qtestsupport_gui.h \ + /usr/include/qt6/QtGui/qtgui-config.h \ + /usr/include/qt6/QtGui/qtguiexports.h \ + /usr/include/qt6/QtGui/qtguiglobal.h \ + /usr/include/qt6/QtGui/qtransform.h \ + /usr/include/qt6/QtGui/qvector2d.h \ + /usr/include/qt6/QtGui/qvector3d.h \ + /usr/include/qt6/QtGui/qvector4d.h \ + /usr/include/qt6/QtGui/qvectornd.h \ + /usr/include/qt6/QtGui/qwindow.h \ + /usr/include/qt6/QtGui/qwindowdefs.h \ + /usr/include/qt6/QtTest/QSignalSpy \ + /usr/include/qt6/QtTest/QtTest \ + /usr/include/qt6/QtTest/QtTestDepends \ + /usr/include/qt6/QtTest/qabstractitemmodeltester.h \ + /usr/include/qt6/QtTest/qbenchmark.h \ + /usr/include/qt6/QtTest/qbenchmarkmetric.h \ + /usr/include/qt6/QtTest/qsignalspy.h \ + /usr/include/qt6/QtTest/qtest.h \ + /usr/include/qt6/QtTest/qtest_gui.h \ + /usr/include/qt6/QtTest/qtest_widgets.h \ + /usr/include/qt6/QtTest/qtestassert.h \ + /usr/include/qt6/QtTest/qtestcase.h \ + /usr/include/qt6/QtTest/qtestdata.h \ + /usr/include/qt6/QtTest/qtestevent.h \ + /usr/include/qt6/QtTest/qtesteventloop.h \ + /usr/include/qt6/QtTest/qtestkeyboard.h \ + /usr/include/qt6/QtTest/qtestmouse.h \ + /usr/include/qt6/QtTest/qtestspontaneevent.h \ + /usr/include/qt6/QtTest/qtestsystem.h \ + /usr/include/qt6/QtTest/qtesttostring.h \ + /usr/include/qt6/QtTest/qtesttouch.h \ + /usr/include/qt6/QtTest/qtestwheel.h \ + /usr/include/qt6/QtTest/qttestexports.h \ + /usr/include/qt6/QtTest/qttestglobal.h \ + /usr/include/qt6/QtTest/qttestlib-config.h \ + /usr/include/qt6/QtTest/qttestversion.h \ + /usr/include/qt6/QtWidgets/QSizePolicy \ + /usr/include/qt6/QtWidgets/qapplication.h \ + /usr/include/qt6/QtWidgets/qsizepolicy.h \ + /usr/include/qt6/QtWidgets/qtestsupport_widgets.h \ + /usr/include/qt6/QtWidgets/qtwidgets-config.h \ + /usr/include/qt6/QtWidgets/qtwidgetsexports.h \ + /usr/include/qt6/QtWidgets/qtwidgetsglobal.h \ + /usr/include/qt6/QtWidgets/qwidget.h \ + /usr/include/sched.h \ + /usr/include/semaphore.h \ + /usr/include/stdc-predef.h \ + /usr/include/stdint.h \ + /usr/include/stdio.h \ + /usr/include/stdlib.h \ + /usr/include/string.h \ + /usr/include/strings.h \ + /usr/include/sys/cdefs.h \ + /usr/include/sys/select.h \ + /usr/include/sys/single_threaded.h \ + /usr/include/sys/syscall.h \ + /usr/include/sys/time.h \ + /usr/include/sys/types.h \ + /usr/include/syscall.h \ + /usr/include/time.h \ + /usr/include/unistd.h \ + /usr/include/wchar.h \ + /usr/include/wctype.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/adxintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/amxavx512intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/amxbf16intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/amxcomplexintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/amxfp16intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/amxfp8intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/amxint8intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/amxmovrsintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/amxtf32intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/amxtileintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/amxtransposeintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2-512bf16intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2-512convertintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2-512mediaintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2-512minmaxintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2-512satcvtintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2bf16intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2convertintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2copyintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2mediaintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2minmaxintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2satcvtintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx2intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512bf16intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512bf16vlintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512bitalgintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512bitalgvlintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512bwintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512cdintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512dqintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512fintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512fp16intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512fp16vlintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512ifmaintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512ifmavlintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vbmi2intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vbmi2vlintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vbmiintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vbmivlintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vlbwintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vldqintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vlintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vnniintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vnnivlintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vp2intersectintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vp2intersectvlintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vpopcntdqintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vpopcntdqvlintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avxifmaintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avxintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avxneconvertintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avxvnniint16intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avxvnniint8intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avxvnniintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/bmi2intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/bmiintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/cetintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/cldemoteintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/clflushoptintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/clwbintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/clzerointrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/cmpccxaddintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/emmintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/enqcmdintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/f16cintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/fmaintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/fxsrintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/gfniintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/hresetintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/ia32intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/immintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/keylockerintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/lwpintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/lzcntintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/mm_malloc.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/mmintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/movdirintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/movrsintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/mwaitintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/mwaitxintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/pconfigintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/pkuintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/pmmintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/popcntintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/prfchiintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/prfchwintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/raointintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/rdseedintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/rtmintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/serializeintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/sgxintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/sha512intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/shaintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/sm3intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/sm4intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/smmintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/stdarg.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/stdbool.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/stddef.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/tbmintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/tmmintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/tsxldtrkintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/uintrintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/usermsrintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/vaesintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/vpclmulqdqintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/waitpkgintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/wbnoinvdintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/wmmintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/x86gprintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/xmmintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/xsavecintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/xsaveintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/xsaveoptintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/xsavesintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/xtestintrin.h \ + /usr/lib64/cmake/Qt6/Qt6Config.cmake \ + /usr/lib64/cmake/Qt6/Qt6ConfigExtras.cmake \ + /usr/lib64/cmake/Qt6/Qt6ConfigVersion.cmake \ + /usr/lib64/cmake/Qt6/Qt6ConfigVersionImpl.cmake \ + /usr/lib64/cmake/Qt6/Qt6Dependencies.cmake \ + /usr/lib64/cmake/Qt6/Qt6Targets.cmake \ + /usr/lib64/cmake/Qt6/Qt6VersionlessAliasTargets.cmake \ + /usr/lib64/cmake/Qt6/QtFeature.cmake \ + /usr/lib64/cmake/Qt6/QtFeatureCommon.cmake \ + /usr/lib64/cmake/Qt6/QtInstallPaths.cmake \ + /usr/lib64/cmake/Qt6/QtPublicAndroidHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicAppleHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicCMakeEarlyPolicyHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicCMakeHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicCMakeVersionHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicDependencyHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicExternalProjectHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicFinalizerHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicFindPackageHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicGitHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicPluginHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicPluginHelpers_v2.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomAttributionHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomBuildToolHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomCommonGenerationHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomCpeHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomCycloneDXHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomDepHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomDocumentNamespaceHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomExternalReferenceHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomFileHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomGenerationCycloneDXHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomGenerationHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomLicenseHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomOpsHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomPurlHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomPythonHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomQtEntityHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomRelationshipHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomSystemDepHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicTargetHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicTestHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicToolHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicWalkLibsHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicWindowsHelpers.cmake \ + /usr/lib64/cmake/Qt6Test/Qt6TestAdditionalTargetInfo.cmake \ + /usr/lib64/cmake/Qt6Test/Qt6TestConfig.cmake \ + /usr/lib64/cmake/Qt6Test/Qt6TestConfigVersion.cmake \ + /usr/lib64/cmake/Qt6Test/Qt6TestConfigVersionImpl.cmake \ + /usr/lib64/cmake/Qt6Test/Qt6TestDependencies.cmake \ + /usr/lib64/cmake/Qt6Test/Qt6TestTargets-relwithdebinfo.cmake \ + /usr/lib64/cmake/Qt6Test/Qt6TestTargets.cmake \ + /usr/lib64/cmake/Qt6Test/Qt6TestVersionlessAliasTargets.cmake \ + /usr/lib64/cmake/Qt6Test/QtTestProperties.cmake \ + /usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake \ + /usr/share/cmake/Modules/CheckCXXCompilerFlag.cmake \ + /usr/bin/cmake diff --git a/build-linux/tests/test_media_converter_worker_autogen/include/test_media_converter_worker.moc b/build-linux/tests/test_media_converter_worker_autogen/include/test_media_converter_worker.moc new file mode 100644 index 00000000..0bdfc84c --- /dev/null +++ b/build-linux/tests/test_media_converter_worker_autogen/include/test_media_converter_worker.moc @@ -0,0 +1,108 @@ +/**************************************************************************** +** Meta object code from reading C++ file 'test_media_converter_worker.cpp' +** +** Created by: The Qt Meta Object Compiler version 69 (Qt 6.10.3) +** +** WARNING! All changes made in this file will be lost! +*****************************************************************************/ + +#include + +#include + +#include + + +#include +#if !defined(Q_MOC_OUTPUT_REVISION) +#error "The header file 'test_media_converter_worker.cpp' doesn't include ." +#elif Q_MOC_OUTPUT_REVISION != 69 +#error "This file was generated using the moc from 6.10.3. It" +#error "cannot be used with the include files from this version of Qt." +#error "(The moc has changed too much.)" +#endif + +#ifndef Q_CONSTINIT +#define Q_CONSTINIT +#endif + +QT_WARNING_PUSH +QT_WARNING_DISABLE_DEPRECATED +QT_WARNING_DISABLE_GCC("-Wuseless-cast") +namespace { +struct qt_meta_tag_ZN24TestMediaConverterWorkerE_t {}; +} // unnamed namespace + +template <> constexpr inline auto TestMediaConverterWorker::qt_create_metaobjectdata() +{ + namespace QMC = QtMocConstants; + QtMocHelpers::StringRefStorage qt_stringData { + "TestMediaConverterWorker", + "testEmptyQueueFinishesImmediately", + "" + }; + + QtMocHelpers::UintData qt_methods { + // Slot 'testEmptyQueueFinishesImmediately' + QtMocHelpers::SlotData(1, 2, QMC::AccessPrivate, QMetaType::Void), + }; + QtMocHelpers::UintData qt_properties { + }; + QtMocHelpers::UintData qt_enums { + }; + return QtMocHelpers::metaObjectData(QMC::MetaObjectFlag{}, qt_stringData, + qt_methods, qt_properties, qt_enums); +} +Q_CONSTINIT const QMetaObject TestMediaConverterWorker::staticMetaObject = { { + QMetaObject::SuperData::link(), + qt_staticMetaObjectStaticContent.stringdata, + qt_staticMetaObjectStaticContent.data, + qt_static_metacall, + nullptr, + qt_staticMetaObjectRelocatingContent.metaTypes, + nullptr +} }; + +void TestMediaConverterWorker::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) +{ + auto *_t = static_cast(_o); + if (_c == QMetaObject::InvokeMetaMethod) { + switch (_id) { + case 0: _t->testEmptyQueueFinishesImmediately(); break; + default: ; + } + } + (void)_a; +} + +const QMetaObject *TestMediaConverterWorker::metaObject() const +{ + return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject; +} + +void *TestMediaConverterWorker::qt_metacast(const char *_clname) +{ + if (!_clname) return nullptr; + if (!strcmp(_clname, qt_staticMetaObjectStaticContent.strings)) + return static_cast(this); + return QObject::qt_metacast(_clname); +} + +int TestMediaConverterWorker::qt_metacall(QMetaObject::Call _c, int _id, void **_a) +{ + _id = QObject::qt_metacall(_c, _id, _a); + if (_id < 0) + return _id; + if (_c == QMetaObject::InvokeMetaMethod) { + if (_id < 1) + qt_static_metacall(this, _c, _id, _a); + _id -= 1; + } + if (_c == QMetaObject::RegisterMethodArgumentMetaType) { + if (_id < 1) + *reinterpret_cast(_a[0]) = QMetaType(); + _id -= 1; + } + return _id; +} +QT_WARNING_POP diff --git a/build-linux/tests/test_media_converter_worker_autogen/moc_predefs.h b/build-linux/tests/test_media_converter_worker_autogen/moc_predefs.h new file mode 100644 index 00000000..0aeb7593 --- /dev/null +++ b/build-linux/tests/test_media_converter_worker_autogen/moc_predefs.h @@ -0,0 +1,504 @@ +#define __DBL_MIN_EXP__ (-1021) +#define __LDBL_MANT_DIG__ 64 +#define __cpp_nontype_template_parameter_auto 201606L +#define __UINT_LEAST16_MAX__ 0xffff +#define __FLT16_HAS_QUIET_NAN__ 1 +#define __ATOMIC_ACQUIRE 2 +#define QT_TESTCASE_BUILDDIR "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests" +#define __FLT128_MAX_10_EXP__ 4932 +#define __FLT_MIN__ 1.17549435082228750796873653722224568e-38F +#define __GCC_IEC_559_COMPLEX 2 +#define __cpp_aggregate_nsdmi 201304L +#define __UINT_LEAST8_TYPE__ unsigned char +#define __SIZEOF_FLOAT80__ 16 +#define __BFLT16_DENORM_MIN__ 9.18354961579912115600575419704879436e-41BF16 +#define __cpp_impl_three_way_comparison 201907L +#define __INTMAX_C(c) c ## L +#define __CHAR_BIT__ 8 +#define __cpp_designated_initializers 201707L +#define __UINT8_MAX__ 0xff +#define __SCHAR_WIDTH__ 8 +#define __WINT_MAX__ 0xffffffffU +#define __FLT32_MIN_EXP__ (-125) +#define __cpp_static_assert 201411L +#define __BFLT16_MIN_10_EXP__ (-37) +#define __cpp_inheriting_constructors 201511L +#define QT_GUI_LIB 1 +#define __ORDER_LITTLE_ENDIAN__ 1234 +#define __WCHAR_MAX__ 0x7fffffff +#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_2 1 +#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_4 1 +#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_8 1 +#define __GCC_ATOMIC_CHAR_LOCK_FREE 2 +#define __GCC_IEC_559 2 +#define __FLT32X_DECIMAL_DIG__ 17 +#define TLRENDER_OIIO 1 +#define __FLT_EVAL_METHOD__ 0 +#define __cpp_binary_literals 201304L +#define __FLT64_DECIMAL_DIG__ 17 +#define __cpp_noexcept_function_type 201510L +#define __GCC_ATOMIC_CHAR32_T_LOCK_FREE 2 +#define __cpp_variadic_templates 200704L +#define __UINT_FAST64_MAX__ 0xffffffffffffffffUL +#define __SIG_ATOMIC_TYPE__ int +#define __DBL_MIN_10_EXP__ (-307) +#define __FINITE_MATH_ONLY__ 0 +#define __cpp_variable_templates 201304L +#define __FLT32X_MAX_EXP__ 1024 +#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_1 1 +#define __FLT32_HAS_DENORM__ 1 +#define __UINT_FAST8_MAX__ 0xff +#define __cpp_rvalue_reference 200610L +#define __cpp_nested_namespace_definitions 201411L +#define __DEC64_MAX_EXP__ 385 +#define __INT8_C(c) c +#define __LDBL_HAS_INFINITY__ 1 +#define __INT_LEAST8_WIDTH__ 8 +#define __cpp_variadic_using 201611L +#define __UINT_LEAST64_MAX__ 0xffffffffffffffffUL +#define __INT_LEAST8_MAX__ 0x7f +#define __cpp_attributes 200809L +#define __cpp_capture_star_this 201603L +#define __SHRT_MAX__ 0x7fff +#define __LDBL_MAX__ 1.18973149535723176502126385303097021e+4932L +#define __cpp_impl_coroutine 201902L +#define __FLT64X_MAX_10_EXP__ 4932 +#define __cpp_if_constexpr 201606L +#define __BFLT16_MAX_10_EXP__ 38 +#define __BFLT16_MAX_EXP__ 128 +#define __LDBL_IS_IEC_60559__ 1 +#define QT_NO_DEBUG 1 +#define __FLT64X_HAS_QUIET_NAN__ 1 +#define QT_TESTLIB_LIB 1 +#define TLRENDER_SDL2 1 +#define __UINT_LEAST8_MAX__ 0xff +#define __GCC_ATOMIC_BOOL_LOCK_FREE 2 +#define __FLT128_DENORM_MIN__ 6.47517511943802511092443895822764655e-4966F128 +#define __UINTMAX_TYPE__ long unsigned int +#define __cpp_nsdmi 200809L +#define __BFLT16_DECIMAL_DIG__ 4 +#define __linux 1 +#define __DEC32_EPSILON__ 1E-6DF +#define __FLT_EVAL_METHOD_TS_18661_3__ 0 +#define __UINT32_MAX__ 0xffffffffU +#define __GXX_EXPERIMENTAL_CXX0X__ 1 +#define __DBL_DENORM_MIN__ double(4.94065645841246544176568792868221372e-324L) +#define __FLT128_MIN_EXP__ (-16381) +#define __DEC64X_MAX_EXP__ 6145 +#define __WINT_MIN__ 0U +#define __FLT128_MIN_10_EXP__ (-4931) +#define __FLT32X_IS_IEC_60559__ 1 +#define __INT_LEAST16_WIDTH__ 16 +#define __SCHAR_MAX__ 0x7f +#define __FLT128_MANT_DIG__ 113 +#define __WCHAR_MIN__ (-__WCHAR_MAX__ - 1) +#define __INT64_C(c) c ## L +#define __cpp_impl_destroying_delete 201806L +#define __GCC_ATOMIC_POINTER_LOCK_FREE 2 +#define TLRENDER_JPEG 1 +#define __ATOMIC_SEQ_CST 5 +#define __unix 1 +#define __INT_LEAST64_MAX__ 0x7fffffffffffffffL +#define __FLT32X_MANT_DIG__ 53 +#define __GCC_ATOMIC_CHAR16_T_LOCK_FREE 2 +#define __cpp_aligned_new 201606L +#define __FLT32_MAX_10_EXP__ 38 +#define __FLT64X_EPSILON__ 1.08420217248550443400745280086994171e-19F64x +#define __STDC_HOSTED__ 1 +#define __DEC64_MIN_EXP__ (-382) +#define TLRENDER_PNG 1 +#define __cpp_decltype_auto 201304L +#define __DBL_DIG__ 15 +#define __STDC_EMBED_EMPTY__ 2 +#define __FLT_EPSILON__ 1.19209289550781250000000000000000000e-7F +#define __cpp_char8_t 202207L +#define __GXX_WEAK__ 1 +#define __SHRT_WIDTH__ 16 +#define __FLT32_IS_IEC_60559__ 1 +#define __LDBL_MIN__ 3.36210314311209350626267781732175260e-4932L +#define __DBL_IS_IEC_60559__ 1 +#define __DEC32_MAX__ 9.999999E96DF +#define __CHAR8_TYPE__ unsigned char +#define __cpp_threadsafe_static_init 200806L +#define __cpp_enumerator_attributes 201411L +#define TLRENDER_EXR 1 +#define __FLT64X_DENORM_MIN__ 3.64519953188247460252840593361941982e-4951F64x +#define __FLT32X_HAS_INFINITY__ 1 +#define __unix__ 1 +#define __INT_WIDTH__ 32 +#define __STDC_IEC_559__ 1 +#define __STDC_ISO_10646__ 201706L +#define __GCC_ATOMIC_CHAR8_T_LOCK_FREE 2 +#define __DECIMAL_DIG__ 21 +#define __STDC_IEC_559_COMPLEX__ 1 +#define __FLT64_EPSILON__ 2.22044604925031308084726333618164062e-16F64 +#define __gnu_linux__ 1 +#define __INT16_MAX__ 0x7fff +#define __FLT64_MIN_EXP__ (-1021) +#define __cpp_using_enum 201907L +#define __DEC64X_EPSILON__ 1E-33D64x +#define __FLT64X_MIN_10_EXP__ (-4931) +#define __LDBL_HAS_QUIET_NAN__ 1 +#define __FLT16_MIN_EXP__ (-13) +#define __FLT64_MANT_DIG__ 53 +#define __cpp_consteval 202211L +#define __FLT64X_MANT_DIG__ 64 +#define FTK_API_GL_4_1 1 +#define __BFLT16_DIG__ 2 +#define __GNUC__ 15 +#define __GXX_RTTI 1 +#define TLRENDER_FFMPEG_PLUGIN 1 +#define __MMX__ 1 +#define __FLT_HAS_DENORM__ 1 +#define __SIZEOF_LONG_DOUBLE__ 16 +#define __BIGGEST_ALIGNMENT__ 16 +#define __STDC_UTF_16__ 1 +#define __FLT64_MAX_10_EXP__ 308 +#define __BFLT16_IS_IEC_60559__ 0 +#define __FLT16_MAX_10_EXP__ 4 +#define __cpp_delegating_constructors 200604L +#define __DBL_MAX__ double(1.79769313486231570814527423731704357e+308L) +#define __cpp_raw_strings 200710L +#define __INT_FAST32_MAX__ 0x7fffffffffffffffL +#define __DBL_HAS_INFINITY__ 1 +#define __INT64_MAX__ 0x7fffffffffffffffL +#define __SIZEOF_FLOAT__ 4 +#define __HAVE_SPECULATION_SAFE_VALUE 1 +#define __cpp_fold_expressions 201603L +#define __DEC32_MIN_EXP__ (-94) +#define __INTPTR_WIDTH__ 64 +#define __UINT_LEAST32_MAX__ 0xffffffffU +#define __FLT32X_HAS_DENORM__ 1 +#define __INT_FAST16_TYPE__ long int +#define __MMX_WITH_SSE__ 1 +#define __LDBL_HAS_DENORM__ 1 +#define QT_WIDGETS_LIB 1 +#define __SEG_GS 1 +#define __BFLT16_EPSILON__ 7.81250000000000000000000000000000000e-3BF16 +#define __cplusplus 202002L +#define __cpp_ref_qualifiers 200710L +#define __DEC32_MIN__ 1E-95DF +#define __DEPRECATED 1 +#define __cpp_rvalue_references 200610L +#define __DBL_MAX_EXP__ 1024 +#define __WCHAR_WIDTH__ 32 +#define __FLT32_MAX__ 3.40282346638528859811704183484516925e+38F32 +#define __DEC128_EPSILON__ 1E-33DL +#define __FLT16_DECIMAL_DIG__ 5 +#define __SSE2_MATH__ 1 +#define __ATOMIC_HLE_RELEASE 131072 +#define __PTRDIFF_MAX__ 0x7fffffffffffffffL +#define __amd64 1 +#define __DEC64X_MAX__ 9.999999999999999999999999999999999E6144D64x +#define __ATOMIC_HLE_ACQUIRE 65536 +#define __GNUG__ 15 +#define __LONG_LONG_MAX__ 0x7fffffffffffffffLL +#define __SIZEOF_SIZE_T__ 8 +#define __BFLT16_HAS_INFINITY__ 1 +#define __FLT64X_MIN_EXP__ (-16381) +#define __SIZEOF_WINT_T__ 4 +#define __FLT32X_DIG__ 15 +#define __LONG_LONG_WIDTH__ 64 +#define QT_TESTCASE_SOURCEDIR "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests" +#define __cpp_initializer_lists 200806L +#define __FLT32_MAX_EXP__ 128 +#define ABI_ID "ELF" +#define __cpp_hex_float 201603L +#define __GXX_ABI_VERSION 1020 +#define __FLT_MIN_EXP__ (-125) +#define __GCC_HAVE_DWARF2_CFI_ASM 1 +#define TLRENDER_OCIO 1 +#define __x86_64 1 +#define __cpp_lambdas 200907L +#define __INT_FAST64_TYPE__ long int +#define __BFLT16_MAX__ 3.38953138925153547590470800371487867e+38BF16 +#define __FLT64_DENORM_MIN__ 4.94065645841246544176568792868221372e-324F64 +#define __cpp_template_auto 201606L +#define __FLT16_DENORM_MIN__ 5.96046447753906250000000000000000000e-8F16 +#define __FLT128_EPSILON__ 1.92592994438723585305597794258492732e-34F128 +#define __FLT64X_NORM_MAX__ 1.18973149535723176502126385303097021e+4932F64x +#define __SIZEOF_POINTER__ 8 +#define __SIZE_TYPE__ long unsigned int +#define __LP64__ 1 +#define __DBL_HAS_QUIET_NAN__ 1 +#define __FLT32X_EPSILON__ 2.22044604925031308084726333618164062e-16F32x +#define __LDBL_MAX_EXP__ 16384 +#define __DECIMAL_BID_FORMAT__ 1 +#define __FLT64_MIN_10_EXP__ (-307) +#define __FLT16_MIN_10_EXP__ (-4) +#define __FLT64X_DECIMAL_DIG__ 21 +#define __DEC128_MIN__ 1E-6143DL +#define __REGISTER_PREFIX__ +#define __UINT16_MAX__ 0xffff +#define __FLT128_HAS_INFINITY__ 1 +#define __FLT32_MIN__ 1.17549435082228750796873653722224568e-38F32 +#define __UINT8_TYPE__ unsigned char +#define __FLT_DIG__ 6 +#define __NO_INLINE__ 1 +#define __DEC_EVAL_METHOD__ 2 +#define __FLT_MANT_DIG__ 24 +#define __LDBL_DECIMAL_DIG__ 21 +#define __VERSION__ "15.2.1 20260123 (Red Hat 15.2.1-7)" +#define __UINT64_C(c) c ## UL +#define __cpp_unicode_characters 201411L +#define __DEC64X_MIN__ 1E-6143D64x +#define _STDC_PREDEF_H 1 +#define __INT_LEAST32_MAX__ 0x7fffffff +#define __GCC_ATOMIC_INT_LOCK_FREE 2 +#define __FLT128_MAX_EXP__ 16384 +#define __cpp_conditional_explicit 201806L +#define __FLT32_MANT_DIG__ 24 +#define __cpp_decltype 200707L +#define __FLOAT_WORD_ORDER__ __ORDER_LITTLE_ENDIAN__ +#define SIZEOF_DPTR (sizeof(void*)) +#define __FLT32X_MIN_EXP__ (-1021) +#define __cpp_aggregate_paren_init 201902L +#define __STDC_IEC_60559_COMPLEX__ 201404L +#define __cpp_aggregate_bases 201603L +#define __BFLT16_MIN__ 1.17549435082228750796873653722224568e-38BF16 +#define __FLT128_HAS_DENORM__ 1 +#define __FLT32_DECIMAL_DIG__ 9 +#define __FLT128_DIG__ 33 +#define __INT32_C(c) c +#define __DEC64_EPSILON__ 1E-15DD +#define __ORDER_PDP_ENDIAN__ 3412 +#define __DEC128_MIN_EXP__ (-6142) +#define __DEC128_MAX__ 9.999999999999999999999999999999999E6144DL +#define __cpp_constinit 201907L +#define __INT_FAST32_TYPE__ long int +#define __UINT_LEAST16_TYPE__ short unsigned int +#define __DEC64X_MANT_DIG__ 34 +#define __DEC128_MAX_EXP__ 6145 +#define unix 1 +#define __DBL_HAS_DENORM__ 1 +#define __cpp_rtti 199711L +#define __UINT64_MAX__ 0xffffffffffffffffUL +#define __FLT_IS_IEC_60559__ 1 +#define __GNUC_WIDE_EXECUTION_CHARSET_NAME "UTF-32LE" +#define __FLT64X_DIG__ 18 +#define __INT8_TYPE__ signed char +#define __cpp_digit_separators 201309L +#define __ELF__ 1 +#define __GCC_ASM_FLAG_OUTPUTS__ 1 +#define __UINT32_TYPE__ unsigned int +#define __BFLT16_HAS_QUIET_NAN__ 1 +#define __FLT_RADIX__ 2 +#define __INT_LEAST16_TYPE__ short int +#define __LDBL_EPSILON__ 1.08420217248550443400745280086994171e-19L +#define __UINTMAX_C(c) c ## UL +#define __GNUC_RH_RELEASE__ 7 +#define __FLT16_DIG__ 3 +#define __k8 1 +#define __FLT32X_MIN__ 2.22507385850720138309023271733240406e-308F32x +#define __SIG_ATOMIC_MAX__ 0x7fffffff +#define __cpp_constexpr 202002L +#define __GCC_ATOMIC_WCHAR_T_LOCK_FREE 2 +#define __USER_LABEL_PREFIX__ +#define __STDC_IEC_60559_BFP__ 201404L +#define __SIZEOF_PTRDIFF_T__ 8 +#define __FLT64X_HAS_INFINITY__ 1 +#define __SIZEOF_LONG__ 8 +#define __LDBL_DIG__ 18 +#define __FLT64_IS_IEC_60559__ 1 +#define __x86_64__ 1 +#define __FLT16_IS_IEC_60559__ 1 +#define __FLT16_MAX_EXP__ 16 +#define __DEC32_SUBNORMAL_MIN__ 0.000001E-95DF +#define __STDC_EMBED_FOUND__ 1 +#define __INT_FAST16_MAX__ 0x7fffffffffffffffL +#define __GCC_CONSTRUCTIVE_SIZE 64 +#define __FLT64_DIG__ 15 +#define __UINT_FAST32_MAX__ 0xffffffffffffffffUL +#define __UINT_LEAST64_TYPE__ long unsigned int +#define __FLT16_EPSILON__ 9.76562500000000000000000000000000000e-4F16 +#define __FLT_HAS_QUIET_NAN__ 1 +#define __FLT_MAX_10_EXP__ 38 +#define __FLT64X_HAS_DENORM__ 1 +#define __DEC128_SUBNORMAL_MIN__ 0.000000000000000000000000000000001E-6143DL +#define __FLT_HAS_INFINITY__ 1 +#define __GNUC_EXECUTION_CHARSET_NAME "UTF-8" +#define __cpp_unicode_literals 200710L +#define __UINT_FAST16_TYPE__ long unsigned int +#define __DEC64_MAX__ 9.999999999999999E384DD +#define __STDC_EMBED_NOT_FOUND__ 0 +#define __INT_FAST32_WIDTH__ 64 +#define __CHAR16_TYPE__ short unsigned int +#define __PRAGMA_REDEFINE_EXTNAME 1 +#define __DEC64X_SUBNORMAL_MIN__ 0.000000000000000000000000000000001E-6143D64x +#define __SIZE_WIDTH__ 64 +#define __SEG_FS 1 +#define __INT_LEAST16_MAX__ 0x7fff +#define __FLT16_NORM_MAX__ 6.55040000000000000000000000000000000e+4F16 +#define __DEC64_MANT_DIG__ 16 +#define __FLT32_DENORM_MIN__ 1.40129846432481707092372958328991613e-45F32 +#define __SIG_ATOMIC_WIDTH__ 32 +#define __GCC_DESTRUCTIVE_SIZE 64 +#define __INT_LEAST64_TYPE__ long int +#define __INT16_TYPE__ short int +#define __INT_LEAST8_TYPE__ signed char +#define __FLT16_MAX__ 6.55040000000000000000000000000000000e+4F16 +#define __FLT128_MIN__ 3.36210314311209350626267781732175260e-4932F128 +#define __cpp_structured_bindings 201606L +#define __SIZEOF_INT__ 4 +#define __DEC32_MAX_EXP__ 97 +#define __INT_FAST8_MAX__ 0x7f +#define __FLT128_MAX__ 1.18973149535723176508575932662800702e+4932F128 +#define __INTPTR_MAX__ 0x7fffffffffffffffL +#define __cpp_sized_deallocation 201309L +#define __cpp_guaranteed_copy_elision 201606L +#define linux 1 +#define __FLT64_HAS_QUIET_NAN__ 1 +#define __FLT32_MIN_10_EXP__ (-37) +#define __EXCEPTIONS 1 +#define __UINT16_C(c) c +#define __PTRDIFF_WIDTH__ 64 +#define __cpp_range_based_for 201603L +#define __INT_FAST16_WIDTH__ 64 +#define __FLT64_HAS_INFINITY__ 1 +#define __FLT64X_MAX__ 1.18973149535723176502126385303097021e+4932F64x +#define __FLT16_HAS_INFINITY__ 1 +#define __STDCPP_DEFAULT_NEW_ALIGNMENT__ 16 +#define __SIG_ATOMIC_MIN__ (-__SIG_ATOMIC_MAX__ - 1) +#define __code_model_small__ 1 +#define __GCC_ATOMIC_LONG_LOCK_FREE 2 +#define __cpp_nontype_template_args 201911L +#define __DEC32_MANT_DIG__ 7 +#define __k8__ 1 +#define __INTPTR_TYPE__ long int +#define __UINT16_TYPE__ short unsigned int +#define __WCHAR_TYPE__ int +#define __UINTPTR_MAX__ 0xffffffffffffffffUL +#define __INT_FAST64_WIDTH__ 64 +#define __cpp_nontype_template_parameter_class 201806L +#define __cpp_concepts 202002L +#define __INT_FAST64_MAX__ 0x7fffffffffffffffL +#define __GCC_ATOMIC_TEST_AND_SET_TRUEVAL 1 +#define __FLT_NORM_MAX__ 3.40282346638528859811704183484516925e+38F +#define __FLT32_HAS_INFINITY__ 1 +#define __FLT64X_MAX_EXP__ 16384 +#define __UINT_FAST64_TYPE__ long unsigned int +#define __cpp_constexpr_in_decltype 201711L +#define __cpp_inline_variables 201606L +#define __BFLT16_MIN_EXP__ (-125) +#define __INT_MAX__ 0x7fffffff +#define __linux__ 1 +#define __INT64_TYPE__ long int +#define __FLT_MAX_EXP__ 128 +#define __ORDER_BIG_ENDIAN__ 4321 +#define __DBL_MANT_DIG__ 53 +#define QT_CORE_LIB 1 +#define __SIZEOF_FLOAT128__ 16 +#define __BFLT16_MANT_DIG__ 8 +#define __DEC64_MIN__ 1E-383DD +#define __WINT_TYPE__ unsigned int +#define __UINT_LEAST32_TYPE__ unsigned int +#define __SIZEOF_SHORT__ 2 +#define __FLT32_NORM_MAX__ 3.40282346638528859811704183484516925e+38F32 +#define __SSE__ 1 +#define __LDBL_MIN_EXP__ (-16381) +#define __FLT64_MAX__ 1.79769313486231570814527423731704357e+308F64 +#define __DEC64X_MIN_EXP__ (-6142) +#define __amd64__ 1 +#define __WINT_WIDTH__ 32 +#define __INT_LEAST64_WIDTH__ 64 +#define __FLT32X_MAX_10_EXP__ 308 +#define __cpp_namespace_attributes 201411L +#define __SIZEOF_INT128__ 16 +#define __FLT16_MIN__ 6.10351562500000000000000000000000000e-5F16 +#define __FLT64X_IS_IEC_60559__ 1 +#define __GXX_CONSTEXPR_ASM__ 1 +#define __LDBL_MAX_10_EXP__ 4932 +#define __ATOMIC_RELAXED 0 +#define __DBL_EPSILON__ double(2.22044604925031308084726333618164062e-16L) +#define __INT_LEAST32_TYPE__ int +#define _LP64 1 +#define __UINT8_C(c) c +#define __FLT64_MAX_EXP__ 1024 +#define __cpp_return_type_deduction 201304L +#define __SIZEOF_WCHAR_T__ 4 +#define __GNUC_PATCHLEVEL__ 1 +#define __FLT128_NORM_MAX__ 1.18973149535723176508575932662800702e+4932F128 +#define __FLT64_NORM_MAX__ 1.79769313486231570814527423731704357e+308F64 +#define __FLT128_HAS_QUIET_NAN__ 1 +#define __INTMAX_MAX__ 0x7fffffffffffffffL +#define TLRENDER_TIFF 1 +#define __INT_FAST8_TYPE__ signed char +#define __FLT64X_MIN__ 3.36210314311209350626267781732175260e-4932F64x +#define __STDCPP_THREADS__ 1 +#define __BFLT16_HAS_DENORM__ 1 +#define __GNUC_STDC_INLINE__ 1 +#define __FLT64_HAS_DENORM__ 1 +#define __FLT32_EPSILON__ 1.19209289550781250000000000000000000e-7F32 +#define __FLT16_HAS_DENORM__ 1 +#define __DBL_DECIMAL_DIG__ 17 +#define __STDC_UTF_32__ 1 +#define __INT_FAST8_WIDTH__ 8 +#define __FXSR__ 1 +#define __FLT32X_MAX__ 1.79769313486231570814527423731704357e+308F32x +#define __DBL_NORM_MAX__ double(1.79769313486231570814527423731704357e+308L) +#define __BYTE_ORDER__ __ORDER_LITTLE_ENDIAN__ +#define TLRENDER_FFMPEG 1 +#define __INTMAX_WIDTH__ 64 +#define __cpp_runtime_arrays 198712L +#define __FLT32_DIG__ 6 +#define __UINT64_TYPE__ long unsigned int +#define __UINT32_C(c) c ## U +#define __cpp_alias_templates 200704L +#define __cpp_constexpr_dynamic_alloc 201907L +#define __FLT_DENORM_MIN__ 1.40129846432481707092372958328991613e-45F +#define __FLT128_IS_IEC_60559__ 1 +#define __INT8_MAX__ 0x7f +#define __LONG_WIDTH__ 64 +#define __DBL_MIN__ double(2.22507385850720138309023271733240406e-308L) +#define __INT32_MAX__ 0x7fffffff +#define __UINT_FAST32_TYPE__ long unsigned int +#define __FLT16_MANT_DIG__ 11 +#define __FLT32X_NORM_MAX__ 1.79769313486231570814527423731704357e+308F32x +#define __CHAR32_TYPE__ unsigned int +#define __FLT_MAX__ 3.40282346638528859811704183484516925e+38F +#define __SSE2__ 1 +#define __cpp_deduction_guides 201907L +#define __BFLT16_NORM_MAX__ 3.38953138925153547590470800371487867e+38BF16 +#define __INT32_TYPE__ int +#define __SIZEOF_DOUBLE__ 8 +#define __cpp_exceptions 199711L +#define __FLT_MIN_10_EXP__ (-37) +#define __FLT64_MIN__ 2.22507385850720138309023271733240406e-308F64 +#define __INT_LEAST32_WIDTH__ 32 +#define __INTMAX_TYPE__ long int +#define __GLIBCXX_BITSIZE_INT_N_0 128 +#define __FLT32X_HAS_QUIET_NAN__ 1 +#define __ATOMIC_CONSUME 1 +#define __GNUC_MINOR__ 2 +#define __GLIBCXX_TYPE_INT_N_0 __int128 +#define __UINTMAX_MAX__ 0xffffffffffffffffUL +#define __FLT32X_DENORM_MIN__ 4.94065645841246544176568792868221372e-324F32x +#define __cpp_template_template_args 201611L +#define __DBL_MAX_10_EXP__ 308 +#define __LDBL_DENORM_MIN__ 3.64519953188247460252840593361941982e-4951L +#define __INT16_C(c) c +#define __STDC__ 1 +#define __PTRDIFF_TYPE__ long int +#define __LONG_MAX__ 0x7fffffffffffffffL +#define __FLT32X_MIN_10_EXP__ (-307) +#define __UINTPTR_TYPE__ long unsigned int +#define __DEC64_SUBNORMAL_MIN__ 0.000000000000001E-383DD +#define __DEC128_MANT_DIG__ 34 +#define __LDBL_MIN_10_EXP__ (-4931) +#define __cpp_generic_lambdas 201707L +#define __SSE_MATH__ 1 +#define __SIZEOF_LONG_LONG__ 8 +#define __cpp_user_defined_literals 200809L +#define __FLT128_DECIMAL_DIG__ 36 +#define __GCC_ATOMIC_LLONG_LOCK_FREE 2 +#define __FLT32_HAS_QUIET_NAN__ 1 +#define __FLT_DECIMAL_DIG__ 9 +#define __UINT_FAST16_MAX__ 0xffffffffffffffffUL +#define __LDBL_NORM_MAX__ 1.18973149535723176502126385303097021e+4932L +#define __GCC_ATOMIC_SHORT_LOCK_FREE 2 +#define __SIZE_MAX__ 0xffffffffffffffffUL +#define __UINT_FAST8_TYPE__ unsigned char +#define _GNU_SOURCE 1 +#define __cpp_init_captures 201803L +#define __ATOMIC_ACQ_REL 4 +#define __ATOMIC_RELEASE 3 diff --git a/build-linux/tests/test_media_converter_worker_autogen/mocs_compilation.cpp b/build-linux/tests/test_media_converter_worker_autogen/mocs_compilation.cpp new file mode 100644 index 00000000..5b93a281 --- /dev/null +++ b/build-linux/tests/test_media_converter_worker_autogen/mocs_compilation.cpp @@ -0,0 +1,2 @@ +// This file is autogenerated. Changes will be overwritten. +#include "VNU7RW3YIC/moc_media_converter_worker.cpp" diff --git a/build-linux/tests/test_media_converter_worker_autogen/timestamp b/build-linux/tests/test_media_converter_worker_autogen/timestamp new file mode 100644 index 00000000..e69de29b diff --git a/build-linux/tests/test_models b/build-linux/tests/test_models new file mode 100755 index 00000000..bbbf0b01 Binary files /dev/null and b/build-linux/tests/test_models differ diff --git a/build-linux/tests/test_models_autogen/VNU7RW3YIC/moc_assets_model.cpp b/build-linux/tests/test_models_autogen/VNU7RW3YIC/moc_assets_model.cpp new file mode 100644 index 00000000..c20839a0 --- /dev/null +++ b/build-linux/tests/test_models_autogen/VNU7RW3YIC/moc_assets_model.cpp @@ -0,0 +1,342 @@ +/**************************************************************************** +** Meta object code from reading C++ file 'assets_model.h' +** +** Created by: The Qt Meta Object Compiler version 69 (Qt 6.10.3) +** +** WARNING! All changes made in this file will be lost! +*****************************************************************************/ + +#include "../../../../native/qt6/src/assets_model.h" +#include + +#include + +#include + + +#include +#if !defined(Q_MOC_OUTPUT_REVISION) +#error "The header file 'assets_model.h' doesn't include ." +#elif Q_MOC_OUTPUT_REVISION != 69 +#error "This file was generated using the moc from 6.10.3. It" +#error "cannot be used with the include files from this version of Qt." +#error "(The moc has changed too much.)" +#endif + +#ifndef Q_CONSTINIT +#define Q_CONSTINIT +#endif + +QT_WARNING_PUSH +QT_WARNING_DISABLE_DEPRECATED +QT_WARNING_DISABLE_GCC("-Wuseless-cast") +namespace { +struct qt_meta_tag_ZN11AssetsModelE_t {}; +} // unnamed namespace + +template <> constexpr inline auto AssetsModel::qt_create_metaobjectdata() +{ + namespace QMC = QtMocConstants; + QtMocHelpers::StringRefStorage qt_stringData { + "AssetsModel", + "QML.Element", + "auto", + "folderIdChanged", + "", + "searchQueryChanged", + "typeFilterChanged", + "selectedTagNamesChanged", + "tagFilterModeChanged", + "recursiveModeChanged", + "searchEntireDatabaseChanged", + "tagsChangedForAsset", + "assetId", + "reload", + "onAssetsChangedForFolder", + "folderId", + "triggerDebouncedReload", + "setFilters", + "typeFilter", + "ratingFilter", + "tagNames", + "tagMode", + "moveAssetToFolder", + "moveAssetsToFolder", + "QVariantList", + "assetIds", + "removeAssets", + "setAssetsRating", + "rating", + "assignTags", + "tagIds", + "get", + "QVariantMap", + "row", + "tagsForAsset", + "searchQuery", + "selectedTagNames", + "tagFilterMode", + "recursiveMode", + "searchEntireDatabase" + }; + + QtMocHelpers::UintData qt_methods { + // Signal 'folderIdChanged' + QtMocHelpers::SignalData(3, 4, QMC::AccessPublic, QMetaType::Void), + // Signal 'searchQueryChanged' + QtMocHelpers::SignalData(5, 4, QMC::AccessPublic, QMetaType::Void), + // Signal 'typeFilterChanged' + QtMocHelpers::SignalData(6, 4, QMC::AccessPublic, QMetaType::Void), + // Signal 'selectedTagNamesChanged' + QtMocHelpers::SignalData(7, 4, QMC::AccessPublic, QMetaType::Void), + // Signal 'tagFilterModeChanged' + QtMocHelpers::SignalData(8, 4, QMC::AccessPublic, QMetaType::Void), + // Signal 'recursiveModeChanged' + QtMocHelpers::SignalData(9, 4, QMC::AccessPublic, QMetaType::Void), + // Signal 'searchEntireDatabaseChanged' + QtMocHelpers::SignalData(10, 4, QMC::AccessPublic, QMetaType::Void), + // Signal 'tagsChangedForAsset' + QtMocHelpers::SignalData(11, 4, QMC::AccessPublic, QMetaType::Void, {{ + { QMetaType::Int, 12 }, + }}), + // Slot 'reload' + QtMocHelpers::SlotData(13, 4, QMC::AccessPublic, QMetaType::Void), + // Slot 'onAssetsChangedForFolder' + QtMocHelpers::SlotData(14, 4, QMC::AccessPrivate, QMetaType::Void, {{ + { QMetaType::Int, 15 }, + }}), + // Slot 'triggerDebouncedReload' + QtMocHelpers::SlotData(16, 4, QMC::AccessPrivate, QMetaType::Void), + // Method 'setFilters' + QtMocHelpers::MethodData(17, 4, QMC::AccessPublic, QMetaType::Void, {{ + { QMetaType::Int, 18 }, { QMetaType::Int, 19 }, { QMetaType::QStringList, 20 }, { QMetaType::Int, 21 }, + }}), + // Method 'moveAssetToFolder' + QtMocHelpers::MethodData(22, 4, QMC::AccessPublic, QMetaType::Bool, {{ + { QMetaType::Int, 12 }, { QMetaType::Int, 15 }, + }}), + // Method 'moveAssetsToFolder' + QtMocHelpers::MethodData(23, 4, QMC::AccessPublic, QMetaType::Bool, {{ + { 0x80000000 | 24, 25 }, { QMetaType::Int, 15 }, + }}), + // Method 'removeAssets' + QtMocHelpers::MethodData(26, 4, QMC::AccessPublic, QMetaType::Bool, {{ + { 0x80000000 | 24, 25 }, + }}), + // Method 'setAssetsRating' + QtMocHelpers::MethodData(27, 4, QMC::AccessPublic, QMetaType::Bool, {{ + { 0x80000000 | 24, 25 }, { QMetaType::Int, 28 }, + }}), + // Method 'assignTags' + QtMocHelpers::MethodData(29, 4, QMC::AccessPublic, QMetaType::Bool, {{ + { 0x80000000 | 24, 25 }, { 0x80000000 | 24, 30 }, + }}), + // Method 'get' + QtMocHelpers::MethodData(31, 4, QMC::AccessPublic, 0x80000000 | 32, {{ + { QMetaType::Int, 33 }, + }}), + // Method 'tagsForAsset' + QtMocHelpers::MethodData(34, 4, QMC::AccessPublic, QMetaType::QStringList, {{ + { QMetaType::Int, 12 }, + }}), + }; + QtMocHelpers::UintData qt_properties { + // property 'folderId' + QtMocHelpers::PropertyData(15, QMetaType::Int, QMC::DefaultPropertyFlags | QMC::Writable | QMC::StdCppSet, 0), + // property 'searchQuery' + QtMocHelpers::PropertyData(35, QMetaType::QString, QMC::DefaultPropertyFlags | QMC::Writable | QMC::StdCppSet, 1), + // property 'typeFilter' + QtMocHelpers::PropertyData(18, QMetaType::Int, QMC::DefaultPropertyFlags | QMC::Writable | QMC::StdCppSet, 2), + // property 'selectedTagNames' + QtMocHelpers::PropertyData(36, QMetaType::QStringList, QMC::DefaultPropertyFlags | QMC::Writable | QMC::StdCppSet, 3), + // property 'tagFilterMode' + QtMocHelpers::PropertyData(37, QMetaType::Int, QMC::DefaultPropertyFlags | QMC::Writable | QMC::StdCppSet, 4), + // property 'recursiveMode' + QtMocHelpers::PropertyData(38, QMetaType::Bool, QMC::DefaultPropertyFlags | QMC::Writable | QMC::StdCppSet, 5), + // property 'searchEntireDatabase' + QtMocHelpers::PropertyData(39, QMetaType::Bool, QMC::DefaultPropertyFlags | QMC::Writable | QMC::StdCppSet, 6), + }; + QtMocHelpers::UintData qt_enums { + }; + QtMocHelpers::UintData qt_constructors {}; + QtMocHelpers::ClassInfos qt_classinfo({ + { 1, 2 }, + }); + return QtMocHelpers::metaObjectData(QMC::MetaObjectFlag{}, qt_stringData, + qt_methods, qt_properties, qt_enums, qt_constructors, qt_classinfo); +} +Q_CONSTINIT const QMetaObject AssetsModel::staticMetaObject = { { + QMetaObject::SuperData::link(), + qt_staticMetaObjectStaticContent.stringdata, + qt_staticMetaObjectStaticContent.data, + qt_static_metacall, + nullptr, + qt_staticMetaObjectRelocatingContent.metaTypes, + nullptr +} }; + +void AssetsModel::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) +{ + auto *_t = static_cast(_o); + if (_c == QMetaObject::InvokeMetaMethod) { + switch (_id) { + case 0: _t->folderIdChanged(); break; + case 1: _t->searchQueryChanged(); break; + case 2: _t->typeFilterChanged(); break; + case 3: _t->selectedTagNamesChanged(); break; + case 4: _t->tagFilterModeChanged(); break; + case 5: _t->recursiveModeChanged(); break; + case 6: _t->searchEntireDatabaseChanged(); break; + case 7: _t->tagsChangedForAsset((*reinterpret_cast>(_a[1]))); break; + case 8: _t->reload(); break; + case 9: _t->onAssetsChangedForFolder((*reinterpret_cast>(_a[1]))); break; + case 10: _t->triggerDebouncedReload(); break; + case 11: _t->setFilters((*reinterpret_cast>(_a[1])),(*reinterpret_cast>(_a[2])),(*reinterpret_cast>(_a[3])),(*reinterpret_cast>(_a[4]))); break; + case 12: { bool _r = _t->moveAssetToFolder((*reinterpret_cast>(_a[1])),(*reinterpret_cast>(_a[2]))); + if (_a[0]) *reinterpret_cast(_a[0]) = std::move(_r); } break; + case 13: { bool _r = _t->moveAssetsToFolder((*reinterpret_cast>(_a[1])),(*reinterpret_cast>(_a[2]))); + if (_a[0]) *reinterpret_cast(_a[0]) = std::move(_r); } break; + case 14: { bool _r = _t->removeAssets((*reinterpret_cast>(_a[1]))); + if (_a[0]) *reinterpret_cast(_a[0]) = std::move(_r); } break; + case 15: { bool _r = _t->setAssetsRating((*reinterpret_cast>(_a[1])),(*reinterpret_cast>(_a[2]))); + if (_a[0]) *reinterpret_cast(_a[0]) = std::move(_r); } break; + case 16: { bool _r = _t->assignTags((*reinterpret_cast>(_a[1])),(*reinterpret_cast>(_a[2]))); + if (_a[0]) *reinterpret_cast(_a[0]) = std::move(_r); } break; + case 17: { QVariantMap _r = _t->get((*reinterpret_cast>(_a[1]))); + if (_a[0]) *reinterpret_cast(_a[0]) = std::move(_r); } break; + case 18: { QStringList _r = _t->tagsForAsset((*reinterpret_cast>(_a[1]))); + if (_a[0]) *reinterpret_cast(_a[0]) = std::move(_r); } break; + default: ; + } + } + if (_c == QMetaObject::IndexOfMethod) { + if (QtMocHelpers::indexOfMethod(_a, &AssetsModel::folderIdChanged, 0)) + return; + if (QtMocHelpers::indexOfMethod(_a, &AssetsModel::searchQueryChanged, 1)) + return; + if (QtMocHelpers::indexOfMethod(_a, &AssetsModel::typeFilterChanged, 2)) + return; + if (QtMocHelpers::indexOfMethod(_a, &AssetsModel::selectedTagNamesChanged, 3)) + return; + if (QtMocHelpers::indexOfMethod(_a, &AssetsModel::tagFilterModeChanged, 4)) + return; + if (QtMocHelpers::indexOfMethod(_a, &AssetsModel::recursiveModeChanged, 5)) + return; + if (QtMocHelpers::indexOfMethod(_a, &AssetsModel::searchEntireDatabaseChanged, 6)) + return; + if (QtMocHelpers::indexOfMethod(_a, &AssetsModel::tagsChangedForAsset, 7)) + return; + } + if (_c == QMetaObject::ReadProperty) { + void *_v = _a[0]; + switch (_id) { + case 0: *reinterpret_cast(_v) = _t->folderId(); break; + case 1: *reinterpret_cast(_v) = _t->searchQuery(); break; + case 2: *reinterpret_cast(_v) = _t->typeFilter(); break; + case 3: *reinterpret_cast(_v) = _t->selectedTagNames(); break; + case 4: *reinterpret_cast(_v) = _t->tagFilterMode(); break; + case 5: *reinterpret_cast(_v) = _t->recursiveMode(); break; + case 6: *reinterpret_cast(_v) = _t->searchEntireDatabase(); break; + default: break; + } + } + if (_c == QMetaObject::WriteProperty) { + void *_v = _a[0]; + switch (_id) { + case 0: _t->setFolderId(*reinterpret_cast(_v)); break; + case 1: _t->setSearchQuery(*reinterpret_cast(_v)); break; + case 2: _t->setTypeFilter(*reinterpret_cast(_v)); break; + case 3: _t->setSelectedTagNames(*reinterpret_cast(_v)); break; + case 4: _t->setTagFilterMode(*reinterpret_cast(_v)); break; + case 5: _t->setRecursiveMode(*reinterpret_cast(_v)); break; + case 6: _t->setSearchEntireDatabase(*reinterpret_cast(_v)); break; + default: break; + } + } +} + +const QMetaObject *AssetsModel::metaObject() const +{ + return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject; +} + +void *AssetsModel::qt_metacast(const char *_clname) +{ + if (!_clname) return nullptr; + if (!strcmp(_clname, qt_staticMetaObjectStaticContent.strings)) + return static_cast(this); + return QAbstractListModel::qt_metacast(_clname); +} + +int AssetsModel::qt_metacall(QMetaObject::Call _c, int _id, void **_a) +{ + _id = QAbstractListModel::qt_metacall(_c, _id, _a); + if (_id < 0) + return _id; + if (_c == QMetaObject::InvokeMetaMethod) { + if (_id < 19) + qt_static_metacall(this, _c, _id, _a); + _id -= 19; + } + if (_c == QMetaObject::RegisterMethodArgumentMetaType) { + if (_id < 19) + *reinterpret_cast(_a[0]) = QMetaType(); + _id -= 19; + } + if (_c == QMetaObject::ReadProperty || _c == QMetaObject::WriteProperty + || _c == QMetaObject::ResetProperty || _c == QMetaObject::BindableProperty + || _c == QMetaObject::RegisterPropertyMetaType) { + qt_static_metacall(this, _c, _id, _a); + _id -= 7; + } + return _id; +} + +// SIGNAL 0 +void AssetsModel::folderIdChanged() +{ + QMetaObject::activate(this, &staticMetaObject, 0, nullptr); +} + +// SIGNAL 1 +void AssetsModel::searchQueryChanged() +{ + QMetaObject::activate(this, &staticMetaObject, 1, nullptr); +} + +// SIGNAL 2 +void AssetsModel::typeFilterChanged() +{ + QMetaObject::activate(this, &staticMetaObject, 2, nullptr); +} + +// SIGNAL 3 +void AssetsModel::selectedTagNamesChanged() +{ + QMetaObject::activate(this, &staticMetaObject, 3, nullptr); +} + +// SIGNAL 4 +void AssetsModel::tagFilterModeChanged() +{ + QMetaObject::activate(this, &staticMetaObject, 4, nullptr); +} + +// SIGNAL 5 +void AssetsModel::recursiveModeChanged() +{ + QMetaObject::activate(this, &staticMetaObject, 5, nullptr); +} + +// SIGNAL 6 +void AssetsModel::searchEntireDatabaseChanged() +{ + QMetaObject::activate(this, &staticMetaObject, 6, nullptr); +} + +// SIGNAL 7 +void AssetsModel::tagsChangedForAsset(int _t1) +{ + QMetaObject::activate(this, &staticMetaObject, 7, nullptr, _t1); +} +QT_WARNING_POP diff --git a/build-linux/tests/test_models_autogen/VNU7RW3YIC/moc_db.cpp b/build-linux/tests/test_models_autogen/VNU7RW3YIC/moc_db.cpp new file mode 100644 index 00000000..0098a341 --- /dev/null +++ b/build-linux/tests/test_models_autogen/VNU7RW3YIC/moc_db.cpp @@ -0,0 +1,187 @@ +/**************************************************************************** +** Meta object code from reading C++ file 'db.h' +** +** Created by: The Qt Meta Object Compiler version 69 (Qt 6.10.3) +** +** WARNING! All changes made in this file will be lost! +*****************************************************************************/ + +#include "../../../../native/qt6/src/db.h" +#include + +#include + +#include + + +#include +#if !defined(Q_MOC_OUTPUT_REVISION) +#error "The header file 'db.h' doesn't include ." +#elif Q_MOC_OUTPUT_REVISION != 69 +#error "This file was generated using the moc from 6.10.3. It" +#error "cannot be used with the include files from this version of Qt." +#error "(The moc has changed too much.)" +#endif + +#ifndef Q_CONSTINIT +#define Q_CONSTINIT +#endif + +QT_WARNING_PUSH +QT_WARNING_DISABLE_DEPRECATED +QT_WARNING_DISABLE_GCC("-Wuseless-cast") +namespace { +struct qt_meta_tag_ZN2DBE_t {}; +} // unnamed namespace + +template <> constexpr inline auto DB::qt_create_metaobjectdata() +{ + namespace QMC = QtMocConstants; + QtMocHelpers::StringRefStorage qt_stringData { + "DB", + "foldersChanged", + "", + "assetsChanged", + "folderId", + "tagsChanged", + "projectFoldersChanged", + "assetVersionsChanged", + "assetId", + "applyChecksumUpdate", + "filePath", + "newSize", + "newChecksum", + "oldChecksum", + "isNewAsset", + "versionNotes" + }; + + QtMocHelpers::UintData qt_methods { + // Signal 'foldersChanged' + QtMocHelpers::SignalData(1, 2, QMC::AccessPublic, QMetaType::Void), + // Signal 'assetsChanged' + QtMocHelpers::SignalData(3, 2, QMC::AccessPublic, QMetaType::Void, {{ + { QMetaType::Int, 4 }, + }}), + // Signal 'tagsChanged' + QtMocHelpers::SignalData(5, 2, QMC::AccessPublic, QMetaType::Void), + // Signal 'projectFoldersChanged' + QtMocHelpers::SignalData(6, 2, QMC::AccessPublic, QMetaType::Void), + // Signal 'assetVersionsChanged' + QtMocHelpers::SignalData(7, 2, QMC::AccessPublic, QMetaType::Void, {{ + { QMetaType::Int, 8 }, + }}), + // Slot 'applyChecksumUpdate' + QtMocHelpers::SlotData(9, 2, QMC::AccessPrivate, QMetaType::Void, {{ + { QMetaType::Int, 8 }, { QMetaType::QString, 10 }, { QMetaType::LongLong, 11 }, { QMetaType::QString, 12 }, + { QMetaType::QString, 13 }, { QMetaType::Bool, 14 }, { QMetaType::QString, 15 }, + }}), + }; + QtMocHelpers::UintData qt_properties { + }; + QtMocHelpers::UintData qt_enums { + }; + return QtMocHelpers::metaObjectData(QMC::MetaObjectFlag{}, qt_stringData, + qt_methods, qt_properties, qt_enums); +} +Q_CONSTINIT const QMetaObject DB::staticMetaObject = { { + QMetaObject::SuperData::link(), + qt_staticMetaObjectStaticContent.stringdata, + qt_staticMetaObjectStaticContent.data, + qt_static_metacall, + nullptr, + qt_staticMetaObjectRelocatingContent.metaTypes, + nullptr +} }; + +void DB::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) +{ + auto *_t = static_cast(_o); + if (_c == QMetaObject::InvokeMetaMethod) { + switch (_id) { + case 0: _t->foldersChanged(); break; + case 1: _t->assetsChanged((*reinterpret_cast>(_a[1]))); break; + case 2: _t->tagsChanged(); break; + case 3: _t->projectFoldersChanged(); break; + case 4: _t->assetVersionsChanged((*reinterpret_cast>(_a[1]))); break; + case 5: _t->applyChecksumUpdate((*reinterpret_cast>(_a[1])),(*reinterpret_cast>(_a[2])),(*reinterpret_cast>(_a[3])),(*reinterpret_cast>(_a[4])),(*reinterpret_cast>(_a[5])),(*reinterpret_cast>(_a[6])),(*reinterpret_cast>(_a[7]))); break; + default: ; + } + } + if (_c == QMetaObject::IndexOfMethod) { + if (QtMocHelpers::indexOfMethod(_a, &DB::foldersChanged, 0)) + return; + if (QtMocHelpers::indexOfMethod(_a, &DB::assetsChanged, 1)) + return; + if (QtMocHelpers::indexOfMethod(_a, &DB::tagsChanged, 2)) + return; + if (QtMocHelpers::indexOfMethod(_a, &DB::projectFoldersChanged, 3)) + return; + if (QtMocHelpers::indexOfMethod(_a, &DB::assetVersionsChanged, 4)) + return; + } +} + +const QMetaObject *DB::metaObject() const +{ + return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject; +} + +void *DB::qt_metacast(const char *_clname) +{ + if (!_clname) return nullptr; + if (!strcmp(_clname, qt_staticMetaObjectStaticContent.strings)) + return static_cast(this); + if (!strcmp(_clname, "IAssetDatabase")) + return static_cast< IAssetDatabase*>(this); + return QObject::qt_metacast(_clname); +} + +int DB::qt_metacall(QMetaObject::Call _c, int _id, void **_a) +{ + _id = QObject::qt_metacall(_c, _id, _a); + if (_id < 0) + return _id; + if (_c == QMetaObject::InvokeMetaMethod) { + if (_id < 6) + qt_static_metacall(this, _c, _id, _a); + _id -= 6; + } + if (_c == QMetaObject::RegisterMethodArgumentMetaType) { + if (_id < 6) + *reinterpret_cast(_a[0]) = QMetaType(); + _id -= 6; + } + return _id; +} + +// SIGNAL 0 +void DB::foldersChanged() +{ + QMetaObject::activate(this, &staticMetaObject, 0, nullptr); +} + +// SIGNAL 1 +void DB::assetsChanged(int _t1) +{ + QMetaObject::activate(this, &staticMetaObject, 1, nullptr, _t1); +} + +// SIGNAL 2 +void DB::tagsChanged() +{ + QMetaObject::activate(this, &staticMetaObject, 2, nullptr); +} + +// SIGNAL 3 +void DB::projectFoldersChanged() +{ + QMetaObject::activate(this, &staticMetaObject, 3, nullptr); +} + +// SIGNAL 4 +void DB::assetVersionsChanged(int _t1) +{ + QMetaObject::activate(this, &staticMetaObject, 4, nullptr, _t1); +} +QT_WARNING_POP diff --git a/build-linux/tests/test_models_autogen/VNU7RW3YIC/moc_log_manager.cpp b/build-linux/tests/test_models_autogen/VNU7RW3YIC/moc_log_manager.cpp new file mode 100644 index 00000000..59fa4292 --- /dev/null +++ b/build-linux/tests/test_models_autogen/VNU7RW3YIC/moc_log_manager.cpp @@ -0,0 +1,165 @@ +/**************************************************************************** +** Meta object code from reading C++ file 'log_manager.h' +** +** Created by: The Qt Meta Object Compiler version 69 (Qt 6.10.3) +** +** WARNING! All changes made in this file will be lost! +*****************************************************************************/ + +#include "../../../../native/qt6/src/log_manager.h" +#include + +#include + +#include + + +#include +#if !defined(Q_MOC_OUTPUT_REVISION) +#error "The header file 'log_manager.h' doesn't include ." +#elif Q_MOC_OUTPUT_REVISION != 69 +#error "This file was generated using the moc from 6.10.3. It" +#error "cannot be used with the include files from this version of Qt." +#error "(The moc has changed too much.)" +#endif + +#ifndef Q_CONSTINIT +#define Q_CONSTINIT +#endif + +QT_WARNING_PUSH +QT_WARNING_DISABLE_DEPRECATED +QT_WARNING_DISABLE_GCC("-Wuseless-cast") +namespace { +struct qt_meta_tag_ZN10LogManagerE_t {}; +} // unnamed namespace + +template <> constexpr inline auto LogManager::qt_create_metaobjectdata() +{ + namespace QMC = QtMocConstants; + QtMocHelpers::StringRefStorage qt_stringData { + "LogManager", + "logsChanged", + "", + "logAdded", + "message", + "addLog", + "level", + "clear", + "logs" + }; + + QtMocHelpers::UintData qt_methods { + // Signal 'logsChanged' + QtMocHelpers::SignalData(1, 2, QMC::AccessPublic, QMetaType::Void), + // Signal 'logAdded' + QtMocHelpers::SignalData(3, 2, QMC::AccessPublic, QMetaType::Void, {{ + { QMetaType::QString, 4 }, + }}), + // Method 'addLog' + QtMocHelpers::MethodData(5, 2, QMC::AccessPublic, QMetaType::Void, {{ + { QMetaType::QString, 4 }, { QMetaType::QString, 6 }, + }}), + // Method 'addLog' + QtMocHelpers::MethodData(5, 2, QMC::AccessPublic | QMC::MethodCloned, QMetaType::Void, {{ + { QMetaType::QString, 4 }, + }}), + // Method 'clear' + QtMocHelpers::MethodData(7, 2, QMC::AccessPublic, QMetaType::Void), + }; + QtMocHelpers::UintData qt_properties { + // property 'logs' + QtMocHelpers::PropertyData(8, QMetaType::QStringList, QMC::DefaultPropertyFlags, 0), + }; + QtMocHelpers::UintData qt_enums { + }; + return QtMocHelpers::metaObjectData(QMC::MetaObjectFlag{}, qt_stringData, + qt_methods, qt_properties, qt_enums); +} +Q_CONSTINIT const QMetaObject LogManager::staticMetaObject = { { + QMetaObject::SuperData::link(), + qt_staticMetaObjectStaticContent.stringdata, + qt_staticMetaObjectStaticContent.data, + qt_static_metacall, + nullptr, + qt_staticMetaObjectRelocatingContent.metaTypes, + nullptr +} }; + +void LogManager::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) +{ + auto *_t = static_cast(_o); + if (_c == QMetaObject::InvokeMetaMethod) { + switch (_id) { + case 0: _t->logsChanged(); break; + case 1: _t->logAdded((*reinterpret_cast>(_a[1]))); break; + case 2: _t->addLog((*reinterpret_cast>(_a[1])),(*reinterpret_cast>(_a[2]))); break; + case 3: _t->addLog((*reinterpret_cast>(_a[1]))); break; + case 4: _t->clear(); break; + default: ; + } + } + if (_c == QMetaObject::IndexOfMethod) { + if (QtMocHelpers::indexOfMethod(_a, &LogManager::logsChanged, 0)) + return; + if (QtMocHelpers::indexOfMethod(_a, &LogManager::logAdded, 1)) + return; + } + if (_c == QMetaObject::ReadProperty) { + void *_v = _a[0]; + switch (_id) { + case 0: *reinterpret_cast(_v) = _t->logs(); break; + default: break; + } + } +} + +const QMetaObject *LogManager::metaObject() const +{ + return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject; +} + +void *LogManager::qt_metacast(const char *_clname) +{ + if (!_clname) return nullptr; + if (!strcmp(_clname, qt_staticMetaObjectStaticContent.strings)) + return static_cast(this); + return QObject::qt_metacast(_clname); +} + +int LogManager::qt_metacall(QMetaObject::Call _c, int _id, void **_a) +{ + _id = QObject::qt_metacall(_c, _id, _a); + if (_id < 0) + return _id; + if (_c == QMetaObject::InvokeMetaMethod) { + if (_id < 5) + qt_static_metacall(this, _c, _id, _a); + _id -= 5; + } + if (_c == QMetaObject::RegisterMethodArgumentMetaType) { + if (_id < 5) + *reinterpret_cast(_a[0]) = QMetaType(); + _id -= 5; + } + if (_c == QMetaObject::ReadProperty || _c == QMetaObject::WriteProperty + || _c == QMetaObject::ResetProperty || _c == QMetaObject::BindableProperty + || _c == QMetaObject::RegisterPropertyMetaType) { + qt_static_metacall(this, _c, _id, _a); + _id -= 1; + } + return _id; +} + +// SIGNAL 0 +void LogManager::logsChanged() +{ + QMetaObject::activate(this, &staticMetaObject, 0, nullptr); +} + +// SIGNAL 1 +void LogManager::logAdded(const QString & _t1) +{ + QMetaObject::activate(this, &staticMetaObject, 1, nullptr, _t1); +} +QT_WARNING_POP diff --git a/build-linux/tests/test_models_autogen/deps b/build-linux/tests/test_models_autogen/deps new file mode 100644 index 00000000..e47db4e4 --- /dev/null +++ b/build-linux/tests/test_models_autogen/deps @@ -0,0 +1,952 @@ +test_models_autogen/timestamp: \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_models_autogen/moc_predefs.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/assets_model.cpp \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/assets_model.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/db.cpp \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/db.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/i_asset_database.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/log_manager.cpp \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/log_manager.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/CMakeLists.txt \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/test_models.cpp \ + /usr/include/alloca.h \ + /usr/include/asm-generic/bitsperlong.h \ + /usr/include/asm-generic/errno-base.h \ + /usr/include/asm-generic/errno.h \ + /usr/include/asm-generic/int-ll64.h \ + /usr/include/asm-generic/posix_types.h \ + /usr/include/asm-generic/types.h \ + /usr/include/asm/bitsperlong.h \ + /usr/include/asm/errno.h \ + /usr/include/asm/posix_types.h \ + /usr/include/asm/posix_types_64.h \ + /usr/include/asm/types.h \ + /usr/include/asm/unistd.h \ + /usr/include/asm/unistd_64.h \ + /usr/include/assert.h \ + /usr/include/bits/atomic_wide_counter.h \ + /usr/include/bits/byteswap.h \ + /usr/include/bits/confname.h \ + /usr/include/bits/cpu-set.h \ + /usr/include/bits/endian.h \ + /usr/include/bits/endianness.h \ + /usr/include/bits/environments.h \ + /usr/include/bits/errno.h \ + /usr/include/bits/floatn-common.h \ + /usr/include/bits/floatn.h \ + /usr/include/bits/getopt_core.h \ + /usr/include/bits/getopt_posix.h \ + /usr/include/bits/libc-header-start.h \ + /usr/include/bits/local_lim.h \ + /usr/include/bits/locale.h \ + /usr/include/bits/long-double.h \ + /usr/include/bits/posix1_lim.h \ + /usr/include/bits/posix2_lim.h \ + /usr/include/bits/posix_opt.h \ + /usr/include/bits/pthread_stack_min-dynamic.h \ + /usr/include/bits/pthreadtypes-arch.h \ + /usr/include/bits/pthreadtypes.h \ + /usr/include/bits/sched.h \ + /usr/include/bits/select.h \ + /usr/include/bits/semaphore.h \ + /usr/include/bits/setjmp.h \ + /usr/include/bits/stdint-intn.h \ + /usr/include/bits/stdint-least.h \ + /usr/include/bits/stdint-uintn.h \ + /usr/include/bits/stdio_lim.h \ + /usr/include/bits/stdlib-float.h \ + /usr/include/bits/struct_mutex.h \ + /usr/include/bits/struct_rwlock.h \ + /usr/include/bits/syscall.h \ + /usr/include/bits/thread-shared-types.h \ + /usr/include/bits/time.h \ + /usr/include/bits/time64.h \ + /usr/include/bits/timesize.h \ + /usr/include/bits/timex.h \ + /usr/include/bits/types.h \ + /usr/include/bits/types/FILE.h \ + /usr/include/bits/types/__FILE.h \ + /usr/include/bits/types/__fpos64_t.h \ + /usr/include/bits/types/__fpos_t.h \ + /usr/include/bits/types/__locale_t.h \ + /usr/include/bits/types/__mbstate_t.h \ + /usr/include/bits/types/__sigset_t.h \ + /usr/include/bits/types/clock_t.h \ + /usr/include/bits/types/clockid_t.h \ + /usr/include/bits/types/cookie_io_functions_t.h \ + /usr/include/bits/types/error_t.h \ + /usr/include/bits/types/locale_t.h \ + /usr/include/bits/types/mbstate_t.h \ + /usr/include/bits/types/sigset_t.h \ + /usr/include/bits/types/struct_FILE.h \ + /usr/include/bits/types/struct___jmp_buf_tag.h \ + /usr/include/bits/types/struct_itimerspec.h \ + /usr/include/bits/types/struct_sched_param.h \ + /usr/include/bits/types/struct_timespec.h \ + /usr/include/bits/types/struct_timeval.h \ + /usr/include/bits/types/struct_tm.h \ + /usr/include/bits/types/time_t.h \ + /usr/include/bits/types/timer_t.h \ + /usr/include/bits/types/wint_t.h \ + /usr/include/bits/typesizes.h \ + /usr/include/bits/uintn-identity.h \ + /usr/include/bits/uio_lim.h \ + /usr/include/bits/unistd_ext.h \ + /usr/include/bits/waitflags.h \ + /usr/include/bits/waitstatus.h \ + /usr/include/bits/wchar.h \ + /usr/include/bits/wctype-wchar.h \ + /usr/include/bits/wordsize.h \ + /usr/include/bits/xopen_lim.h \ + /usr/include/c++/15/algorithm \ + /usr/include/c++/15/array \ + /usr/include/c++/15/atomic \ + /usr/include/c++/15/backward/auto_ptr.h \ + /usr/include/c++/15/backward/binders.h \ + /usr/include/c++/15/bit \ + /usr/include/c++/15/bits/algorithmfwd.h \ + /usr/include/c++/15/bits/align.h \ + /usr/include/c++/15/bits/alloc_traits.h \ + /usr/include/c++/15/bits/allocated_ptr.h \ + /usr/include/c++/15/bits/allocator.h \ + /usr/include/c++/15/bits/atomic_base.h \ + /usr/include/c++/15/bits/atomic_futex.h \ + /usr/include/c++/15/bits/atomic_lockfree_defines.h \ + /usr/include/c++/15/bits/atomic_timed_wait.h \ + /usr/include/c++/15/bits/atomic_wait.h \ + /usr/include/c++/15/bits/basic_ios.h \ + /usr/include/c++/15/bits/basic_ios.tcc \ + /usr/include/c++/15/bits/basic_string.h \ + /usr/include/c++/15/bits/basic_string.tcc \ + /usr/include/c++/15/bits/char_traits.h \ + /usr/include/c++/15/bits/charconv.h \ + /usr/include/c++/15/bits/chrono.h \ + /usr/include/c++/15/bits/chrono_io.h \ + /usr/include/c++/15/bits/codecvt.h \ + /usr/include/c++/15/bits/concept_check.h \ + /usr/include/c++/15/bits/cpp_type_traits.h \ + /usr/include/c++/15/bits/cxxabi_forced.h \ + /usr/include/c++/15/bits/cxxabi_init_exception.h \ + /usr/include/c++/15/bits/enable_special_members.h \ + /usr/include/c++/15/bits/erase_if.h \ + /usr/include/c++/15/bits/exception.h \ + /usr/include/c++/15/bits/exception_defines.h \ + /usr/include/c++/15/bits/exception_ptr.h \ + /usr/include/c++/15/bits/functexcept.h \ + /usr/include/c++/15/bits/functional_hash.h \ + /usr/include/c++/15/bits/hash_bytes.h \ + /usr/include/c++/15/bits/hashtable.h \ + /usr/include/c++/15/bits/hashtable_policy.h \ + /usr/include/c++/15/bits/invoke.h \ + /usr/include/c++/15/bits/ios_base.h \ + /usr/include/c++/15/bits/istream.tcc \ + /usr/include/c++/15/bits/iterator_concepts.h \ + /usr/include/c++/15/bits/list.tcc \ + /usr/include/c++/15/bits/locale_classes.h \ + /usr/include/c++/15/bits/locale_classes.tcc \ + /usr/include/c++/15/bits/locale_conv.h \ + /usr/include/c++/15/bits/locale_facets.h \ + /usr/include/c++/15/bits/locale_facets.tcc \ + /usr/include/c++/15/bits/locale_facets_nonio.h \ + /usr/include/c++/15/bits/locale_facets_nonio.tcc \ + /usr/include/c++/15/bits/localefwd.h \ + /usr/include/c++/15/bits/max_size_type.h \ + /usr/include/c++/15/bits/memory_resource.h \ + /usr/include/c++/15/bits/memoryfwd.h \ + /usr/include/c++/15/bits/move.h \ + /usr/include/c++/15/bits/nested_exception.h \ + /usr/include/c++/15/bits/new_allocator.h \ + /usr/include/c++/15/bits/node_handle.h \ + /usr/include/c++/15/bits/ostream.h \ + /usr/include/c++/15/bits/ostream.tcc \ + /usr/include/c++/15/bits/ostream_insert.h \ + /usr/include/c++/15/bits/parse_numbers.h \ + /usr/include/c++/15/bits/postypes.h \ + /usr/include/c++/15/bits/predefined_ops.h \ + /usr/include/c++/15/bits/ptr_traits.h \ + /usr/include/c++/15/bits/quoted_string.h \ + /usr/include/c++/15/bits/random.h \ + /usr/include/c++/15/bits/random.tcc \ + /usr/include/c++/15/bits/range_access.h \ + /usr/include/c++/15/bits/ranges_algo.h \ + /usr/include/c++/15/bits/ranges_algobase.h \ + /usr/include/c++/15/bits/ranges_base.h \ + /usr/include/c++/15/bits/ranges_cmp.h \ + /usr/include/c++/15/bits/ranges_uninitialized.h \ + /usr/include/c++/15/bits/ranges_util.h \ + /usr/include/c++/15/bits/refwrap.h \ + /usr/include/c++/15/bits/requires_hosted.h \ + /usr/include/c++/15/bits/semaphore_base.h \ + /usr/include/c++/15/bits/shared_ptr.h \ + /usr/include/c++/15/bits/shared_ptr_atomic.h \ + /usr/include/c++/15/bits/shared_ptr_base.h \ + /usr/include/c++/15/bits/specfun.h \ + /usr/include/c++/15/bits/sstream.tcc \ + /usr/include/c++/15/bits/std_abs.h \ + /usr/include/c++/15/bits/std_function.h \ + /usr/include/c++/15/bits/std_mutex.h \ + /usr/include/c++/15/bits/std_thread.h \ + /usr/include/c++/15/bits/stl_algo.h \ + /usr/include/c++/15/bits/stl_algobase.h \ + /usr/include/c++/15/bits/stl_bvector.h \ + /usr/include/c++/15/bits/stl_construct.h \ + /usr/include/c++/15/bits/stl_function.h \ + /usr/include/c++/15/bits/stl_heap.h \ + /usr/include/c++/15/bits/stl_iterator.h \ + /usr/include/c++/15/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/15/bits/stl_iterator_base_types.h \ + /usr/include/c++/15/bits/stl_list.h \ + /usr/include/c++/15/bits/stl_map.h \ + /usr/include/c++/15/bits/stl_multimap.h \ + /usr/include/c++/15/bits/stl_multiset.h \ + /usr/include/c++/15/bits/stl_numeric.h \ + /usr/include/c++/15/bits/stl_pair.h \ + /usr/include/c++/15/bits/stl_raw_storage_iter.h \ + /usr/include/c++/15/bits/stl_relops.h \ + /usr/include/c++/15/bits/stl_set.h \ + /usr/include/c++/15/bits/stl_tempbuf.h \ + /usr/include/c++/15/bits/stl_tree.h \ + /usr/include/c++/15/bits/stl_uninitialized.h \ + /usr/include/c++/15/bits/stl_vector.h \ + /usr/include/c++/15/bits/stream_iterator.h \ + /usr/include/c++/15/bits/streambuf.tcc \ + /usr/include/c++/15/bits/streambuf_iterator.h \ + /usr/include/c++/15/bits/string_view.tcc \ + /usr/include/c++/15/bits/stringfwd.h \ + /usr/include/c++/15/bits/this_thread_sleep.h \ + /usr/include/c++/15/bits/uniform_int_dist.h \ + /usr/include/c++/15/bits/unique_lock.h \ + /usr/include/c++/15/bits/unique_ptr.h \ + /usr/include/c++/15/bits/unordered_map.h \ + /usr/include/c++/15/bits/unordered_set.h \ + /usr/include/c++/15/bits/uses_allocator.h \ + /usr/include/c++/15/bits/uses_allocator_args.h \ + /usr/include/c++/15/bits/utility.h \ + /usr/include/c++/15/bits/vector.tcc \ + /usr/include/c++/15/bits/version.h \ + /usr/include/c++/15/cassert \ + /usr/include/c++/15/cctype \ + /usr/include/c++/15/cerrno \ + /usr/include/c++/15/charconv \ + /usr/include/c++/15/chrono \ + /usr/include/c++/15/climits \ + /usr/include/c++/15/clocale \ + /usr/include/c++/15/cmath \ + /usr/include/c++/15/compare \ + /usr/include/c++/15/concepts \ + /usr/include/c++/15/condition_variable \ + /usr/include/c++/15/cstddef \ + /usr/include/c++/15/cstdint \ + /usr/include/c++/15/cstdio \ + /usr/include/c++/15/cstdlib \ + /usr/include/c++/15/cstring \ + /usr/include/c++/15/ctime \ + /usr/include/c++/15/cwchar \ + /usr/include/c++/15/cwctype \ + /usr/include/c++/15/debug/assertions.h \ + /usr/include/c++/15/debug/debug.h \ + /usr/include/c++/15/exception \ + /usr/include/c++/15/experimental/source_location \ + /usr/include/c++/15/ext/aligned_buffer.h \ + /usr/include/c++/15/ext/alloc_traits.h \ + /usr/include/c++/15/ext/atomicity.h \ + /usr/include/c++/15/ext/concurrence.h \ + /usr/include/c++/15/ext/numeric_traits.h \ + /usr/include/c++/15/ext/string_conversions.h \ + /usr/include/c++/15/ext/type_traits.h \ + /usr/include/c++/15/filesystem \ + /usr/include/c++/15/format \ + /usr/include/c++/15/functional \ + /usr/include/c++/15/future \ + /usr/include/c++/15/initializer_list \ + /usr/include/c++/15/iomanip \ + /usr/include/c++/15/ios \ + /usr/include/c++/15/iosfwd \ + /usr/include/c++/15/istream \ + /usr/include/c++/15/iterator \ + /usr/include/c++/15/limits \ + /usr/include/c++/15/list \ + /usr/include/c++/15/locale \ + /usr/include/c++/15/map \ + /usr/include/c++/15/memory \ + /usr/include/c++/15/memory_resource \ + /usr/include/c++/15/mutex \ + /usr/include/c++/15/new \ + /usr/include/c++/15/numeric \ + /usr/include/c++/15/optional \ + /usr/include/c++/15/ostream \ + /usr/include/c++/15/pstl/execution_defs.h \ + /usr/include/c++/15/pstl/glue_numeric_defs.h \ + /usr/include/c++/15/pstl/pstl_config.h \ + /usr/include/c++/15/random \ + /usr/include/c++/15/ratio \ + /usr/include/c++/15/semaphore \ + /usr/include/c++/15/set \ + /usr/include/c++/15/shared_mutex \ + /usr/include/c++/15/source_location \ + /usr/include/c++/15/sstream \ + /usr/include/c++/15/stdexcept \ + /usr/include/c++/15/stop_token \ + /usr/include/c++/15/streambuf \ + /usr/include/c++/15/string \ + /usr/include/c++/15/string_view \ + /usr/include/c++/15/system_error \ + /usr/include/c++/15/tr1/bessel_function.tcc \ + /usr/include/c++/15/tr1/beta_function.tcc \ + /usr/include/c++/15/tr1/ell_integral.tcc \ + /usr/include/c++/15/tr1/exp_integral.tcc \ + /usr/include/c++/15/tr1/gamma.tcc \ + /usr/include/c++/15/tr1/hypergeometric.tcc \ + /usr/include/c++/15/tr1/legendre_function.tcc \ + /usr/include/c++/15/tr1/modified_bessel_func.tcc \ + /usr/include/c++/15/tr1/poly_hermite.tcc \ + /usr/include/c++/15/tr1/poly_laguerre.tcc \ + /usr/include/c++/15/tr1/riemann_zeta.tcc \ + /usr/include/c++/15/tr1/special_function_util.h \ + /usr/include/c++/15/tuple \ + /usr/include/c++/15/type_traits \ + /usr/include/c++/15/typeinfo \ + /usr/include/c++/15/unordered_map \ + /usr/include/c++/15/unordered_set \ + /usr/include/c++/15/utility \ + /usr/include/c++/15/variant \ + /usr/include/c++/15/vector \ + /usr/include/c++/15/version \ + /usr/include/c++/15/x86_64-redhat-linux/bits/atomic_word.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/c++allocator.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/c++config.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/c++locale.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/cpu_defines.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/ctype_base.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/ctype_inline.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/error_constants.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/gthr-default.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/gthr.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/messages_members.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/opt_random.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/os_defines.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/time_members.h \ + /usr/include/ctype.h \ + /usr/include/endian.h \ + /usr/include/errno.h \ + /usr/include/features-time64.h \ + /usr/include/features.h \ + /usr/include/gnu/stubs-64.h \ + /usr/include/gnu/stubs.h \ + /usr/include/libintl.h \ + /usr/include/limits.h \ + /usr/include/linux/close_range.h \ + /usr/include/linux/errno.h \ + /usr/include/linux/limits.h \ + /usr/include/linux/posix_types.h \ + /usr/include/linux/sched/types.h \ + /usr/include/linux/stddef.h \ + /usr/include/linux/types.h \ + /usr/include/locale.h \ + /usr/include/pthread.h \ + /usr/include/qt6/QtCore/QAbstractItemModel \ + /usr/include/qt6/QtCore/QAbstractListModel \ + /usr/include/qt6/QtCore/QDateTime \ + /usr/include/qt6/QtCore/QDeadlineTimer \ + /usr/include/qt6/QtCore/QEvent \ + /usr/include/qt6/QtCore/QFile \ + /usr/include/qt6/QtCore/QFileInfo \ + /usr/include/qt6/QtCore/QHash \ + /usr/include/qt6/QtCore/QList \ + /usr/include/qt6/QtCore/QMap \ + /usr/include/qt6/QtCore/QMargins \ + /usr/include/qt6/QtCore/QMetaEnum \ + /usr/include/qt6/QtCore/QMutex \ + /usr/include/qt6/QtCore/QObject \ + /usr/include/qt6/QtCore/QPair \ + /usr/include/qt6/QtCore/QRect \ + /usr/include/qt6/QtCore/QSize \ + /usr/include/qt6/QtCore/QSizeF \ + /usr/include/qt6/QtCore/QString \ + /usr/include/qt6/QtCore/QStringList \ + /usr/include/qt6/QtCore/QTemporaryDir \ + /usr/include/qt6/QtCore/QTextStream \ + /usr/include/qt6/QtCore/QTimer \ + /usr/include/qt6/QtCore/QVariant \ + /usr/include/qt6/QtCore/QVariantMap \ + /usr/include/qt6/QtCore/QVector \ + /usr/include/qt6/QtCore/QtCore \ + /usr/include/qt6/QtCore/QtCoreDepends \ + /usr/include/qt6/QtCore/q17memory.h \ + /usr/include/qt6/QtCore/q20algorithm.h \ + /usr/include/qt6/QtCore/q20chrono.h \ + /usr/include/qt6/QtCore/q20functional.h \ + /usr/include/qt6/QtCore/q20iterator.h \ + /usr/include/qt6/QtCore/q20map.h \ + /usr/include/qt6/QtCore/q20memory.h \ + /usr/include/qt6/QtCore/q20type_traits.h \ + /usr/include/qt6/QtCore/q20utility.h \ + /usr/include/qt6/QtCore/q20vector.h \ + /usr/include/qt6/QtCore/q23functional.h \ + /usr/include/qt6/QtCore/q23type_traits.h \ + /usr/include/qt6/QtCore/q23utility.h \ + /usr/include/qt6/QtCore/q26numeric.h \ + /usr/include/qt6/QtCore/qabstractanimation.h \ + /usr/include/qt6/QtCore/qabstracteventdispatcher.h \ + /usr/include/qt6/QtCore/qabstractitemmodel.h \ + /usr/include/qt6/QtCore/qabstractnativeeventfilter.h \ + /usr/include/qt6/QtCore/qabstractproxymodel.h \ + /usr/include/qt6/QtCore/qalgorithms.h \ + /usr/include/qt6/QtCore/qalloc.h \ + /usr/include/qt6/QtCore/qanimationgroup.h \ + /usr/include/qt6/QtCore/qanystringview.h \ + /usr/include/qt6/QtCore/qapplicationstatic.h \ + /usr/include/qt6/QtCore/qarraydata.h \ + /usr/include/qt6/QtCore/qarraydataops.h \ + /usr/include/qt6/QtCore/qarraydatapointer.h \ + /usr/include/qt6/QtCore/qassert.h \ + /usr/include/qt6/QtCore/qassociativeiterable.h \ + /usr/include/qt6/QtCore/qatomic.h \ + /usr/include/qt6/QtCore/qatomic_cxx11.h \ + /usr/include/qt6/QtCore/qatomicscopedvaluerollback.h \ + /usr/include/qt6/QtCore/qbasicatomic.h \ + /usr/include/qt6/QtCore/qbasictimer.h \ + /usr/include/qt6/QtCore/qbindingstorage.h \ + /usr/include/qt6/QtCore/qbitarray.h \ + /usr/include/qt6/QtCore/qbuffer.h \ + /usr/include/qt6/QtCore/qbytearray.h \ + /usr/include/qt6/QtCore/qbytearrayalgorithms.h \ + /usr/include/qt6/QtCore/qbytearraylist.h \ + /usr/include/qt6/QtCore/qbytearraymatcher.h \ + /usr/include/qt6/QtCore/qbytearrayview.h \ + /usr/include/qt6/QtCore/qcache.h \ + /usr/include/qt6/QtCore/qcalendar.h \ + /usr/include/qt6/QtCore/qcborarray.h \ + /usr/include/qt6/QtCore/qcborcommon.h \ + /usr/include/qt6/QtCore/qcbormap.h \ + /usr/include/qt6/QtCore/qcborstream.h \ + /usr/include/qt6/QtCore/qcborstreamreader.h \ + /usr/include/qt6/QtCore/qcborstreamwriter.h \ + /usr/include/qt6/QtCore/qcborvalue.h \ + /usr/include/qt6/QtCore/qchar.h \ + /usr/include/qt6/QtCore/qcheckedint_impl.h \ + /usr/include/qt6/QtCore/qchronotimer.h \ + /usr/include/qt6/QtCore/qcollator.h \ + /usr/include/qt6/QtCore/qcommandlineoption.h \ + /usr/include/qt6/QtCore/qcommandlineparser.h \ + /usr/include/qt6/QtCore/qcompare.h \ + /usr/include/qt6/QtCore/qcompare_impl.h \ + /usr/include/qt6/QtCore/qcomparehelpers.h \ + /usr/include/qt6/QtCore/qcompilerdetection.h \ + /usr/include/qt6/QtCore/qconcatenatetablesproxymodel.h \ + /usr/include/qt6/QtCore/qconfig-64.h \ + /usr/include/qt6/QtCore/qconfig.h \ + /usr/include/qt6/QtCore/qconstructormacros.h \ + /usr/include/qt6/QtCore/qcontainerfwd.h \ + /usr/include/qt6/QtCore/qcontainerinfo.h \ + /usr/include/qt6/QtCore/qcontainertools_impl.h \ + /usr/include/qt6/QtCore/qcontiguouscache.h \ + /usr/include/qt6/QtCore/qcoreapplication.h \ + /usr/include/qt6/QtCore/qcoreapplication_platform.h \ + /usr/include/qt6/QtCore/qcoreevent.h \ + /usr/include/qt6/QtCore/qcryptographichash.h \ + /usr/include/qt6/QtCore/qdarwinhelpers.h \ + /usr/include/qt6/QtCore/qdatastream.h \ + /usr/include/qt6/QtCore/qdatetime.h \ + /usr/include/qt6/QtCore/qdeadlinetimer.h \ + /usr/include/qt6/QtCore/qdebug.h \ + /usr/include/qt6/QtCore/qdir.h \ + /usr/include/qt6/QtCore/qdiriterator.h \ + /usr/include/qt6/QtCore/qdirlisting.h \ + /usr/include/qt6/QtCore/qeasingcurve.h \ + /usr/include/qt6/QtCore/qelapsedtimer.h \ + /usr/include/qt6/QtCore/qendian.h \ + /usr/include/qt6/QtCore/qeventloop.h \ + /usr/include/qt6/QtCore/qexception.h \ + /usr/include/qt6/QtCore/qexceptionhandling.h \ + /usr/include/qt6/QtCore/qfactoryinterface.h \ + /usr/include/qt6/QtCore/qfile.h \ + /usr/include/qt6/QtCore/qfiledevice.h \ + /usr/include/qt6/QtCore/qfileinfo.h \ + /usr/include/qt6/QtCore/qfileselector.h \ + /usr/include/qt6/QtCore/qfilesystemwatcher.h \ + /usr/include/qt6/QtCore/qflags.h \ + /usr/include/qt6/QtCore/qfloat16.h \ + /usr/include/qt6/QtCore/qforeach.h \ + /usr/include/qt6/QtCore/qfunctionaltools_impl.h \ + /usr/include/qt6/QtCore/qfunctionpointer.h \ + /usr/include/qt6/QtCore/qfuture.h \ + /usr/include/qt6/QtCore/qfuture_impl.h \ + /usr/include/qt6/QtCore/qfutureinterface.h \ + /usr/include/qt6/QtCore/qfuturesynchronizer.h \ + /usr/include/qt6/QtCore/qfuturewatcher.h \ + /usr/include/qt6/QtCore/qgenericatomic.h \ + /usr/include/qt6/QtCore/qglobal.h \ + /usr/include/qt6/QtCore/qglobalstatic.h \ + /usr/include/qt6/QtCore/qhash.h \ + /usr/include/qt6/QtCore/qhashfunctions.h \ + /usr/include/qt6/QtCore/qidentityproxymodel.h \ + /usr/include/qt6/QtCore/qiodevice.h \ + /usr/include/qt6/QtCore/qiodevicebase.h \ + /usr/include/qt6/QtCore/qitemselectionmodel.h \ + /usr/include/qt6/QtCore/qiterable.h \ + /usr/include/qt6/QtCore/qiterator.h \ + /usr/include/qt6/QtCore/qjsonarray.h \ + /usr/include/qt6/QtCore/qjsondocument.h \ + /usr/include/qt6/QtCore/qjsonobject.h \ + /usr/include/qt6/QtCore/qjsonparseerror.h \ + /usr/include/qt6/QtCore/qjsonvalue.h \ + /usr/include/qt6/QtCore/qlatin1stringmatcher.h \ + /usr/include/qt6/QtCore/qlatin1stringview.h \ + /usr/include/qt6/QtCore/qlibrary.h \ + /usr/include/qt6/QtCore/qlibraryinfo.h \ + /usr/include/qt6/QtCore/qline.h \ + /usr/include/qt6/QtCore/qlist.h \ + /usr/include/qt6/QtCore/qlocale.h \ + /usr/include/qt6/QtCore/qlockfile.h \ + /usr/include/qt6/QtCore/qlogging.h \ + /usr/include/qt6/QtCore/qloggingcategory.h \ + /usr/include/qt6/QtCore/qmalloc.h \ + /usr/include/qt6/QtCore/qmap.h \ + /usr/include/qt6/QtCore/qmargins.h \ + /usr/include/qt6/QtCore/qmath.h \ + /usr/include/qt6/QtCore/qmessageauthenticationcode.h \ + /usr/include/qt6/QtCore/qmetacontainer.h \ + /usr/include/qt6/QtCore/qmetaobject.h \ + /usr/include/qt6/QtCore/qmetatype.h \ + /usr/include/qt6/QtCore/qmimedata.h \ + /usr/include/qt6/QtCore/qmimedatabase.h \ + /usr/include/qt6/QtCore/qmimetype.h \ + /usr/include/qt6/QtCore/qminmax.h \ + /usr/include/qt6/QtCore/qmutex.h \ + /usr/include/qt6/QtCore/qnamespace.h \ + /usr/include/qt6/QtCore/qnativeinterface.h \ + /usr/include/qt6/QtCore/qnumeric.h \ + /usr/include/qt6/QtCore/qobject.h \ + /usr/include/qt6/QtCore/qobject_impl.h \ + /usr/include/qt6/QtCore/qobjectcleanuphandler.h \ + /usr/include/qt6/QtCore/qobjectdefs.h \ + /usr/include/qt6/QtCore/qobjectdefs_impl.h \ + /usr/include/qt6/QtCore/qoperatingsystemversion.h \ + /usr/include/qt6/QtCore/qoverload.h \ + /usr/include/qt6/QtCore/qpair.h \ + /usr/include/qt6/QtCore/qparallelanimationgroup.h \ + /usr/include/qt6/QtCore/qpauseanimation.h \ + /usr/include/qt6/QtCore/qpermissions.h \ + /usr/include/qt6/QtCore/qplugin.h \ + /usr/include/qt6/QtCore/qpluginloader.h \ + /usr/include/qt6/QtCore/qpoint.h \ + /usr/include/qt6/QtCore/qpointer.h \ + /usr/include/qt6/QtCore/qprocess.h \ + /usr/include/qt6/QtCore/qprocessordetection.h \ + /usr/include/qt6/QtCore/qpromise.h \ + /usr/include/qt6/QtCore/qproperty.h \ + /usr/include/qt6/QtCore/qpropertyanimation.h \ + /usr/include/qt6/QtCore/qpropertyprivate.h \ + /usr/include/qt6/QtCore/qqueue.h \ + /usr/include/qt6/QtCore/qrandom.h \ + /usr/include/qt6/QtCore/qrangemodel.h \ + /usr/include/qt6/QtCore/qrangemodel_impl.h \ + /usr/include/qt6/QtCore/qreadwritelock.h \ + /usr/include/qt6/QtCore/qrect.h \ + /usr/include/qt6/QtCore/qrefcount.h \ + /usr/include/qt6/QtCore/qregularexpression.h \ + /usr/include/qt6/QtCore/qresource.h \ + /usr/include/qt6/QtCore/qresultstore.h \ + /usr/include/qt6/QtCore/qrunnable.h \ + /usr/include/qt6/QtCore/qsavefile.h \ + /usr/include/qt6/QtCore/qscopedpointer.h \ + /usr/include/qt6/QtCore/qscopedvaluerollback.h \ + /usr/include/qt6/QtCore/qscopeguard.h \ + /usr/include/qt6/QtCore/qsemaphore.h \ + /usr/include/qt6/QtCore/qsequentialanimationgroup.h \ + /usr/include/qt6/QtCore/qsequentialiterable.h \ + /usr/include/qt6/QtCore/qset.h \ + /usr/include/qt6/QtCore/qsettings.h \ + /usr/include/qt6/QtCore/qshareddata.h \ + /usr/include/qt6/QtCore/qshareddata_impl.h \ + /usr/include/qt6/QtCore/qsharedmemory.h \ + /usr/include/qt6/QtCore/qsharedpointer.h \ + /usr/include/qt6/QtCore/qsharedpointer_impl.h \ + /usr/include/qt6/QtCore/qsignalmapper.h \ + /usr/include/qt6/QtCore/qsimd.h \ + /usr/include/qt6/QtCore/qsize.h \ + /usr/include/qt6/QtCore/qsocketnotifier.h \ + /usr/include/qt6/QtCore/qsortfilterproxymodel.h \ + /usr/include/qt6/QtCore/qspan.h \ + /usr/include/qt6/QtCore/qstack.h \ + /usr/include/qt6/QtCore/qstandardpaths.h \ + /usr/include/qt6/QtCore/qstaticlatin1stringmatcher.h \ + /usr/include/qt6/QtCore/qstdlibdetection.h \ + /usr/include/qt6/QtCore/qstorageinfo.h \ + /usr/include/qt6/QtCore/qstring.h \ + /usr/include/qt6/QtCore/qstringalgorithms.h \ + /usr/include/qt6/QtCore/qstringbuilder.h \ + /usr/include/qt6/QtCore/qstringconverter.h \ + /usr/include/qt6/QtCore/qstringconverter_base.h \ + /usr/include/qt6/QtCore/qstringfwd.h \ + /usr/include/qt6/QtCore/qstringlist.h \ + /usr/include/qt6/QtCore/qstringlistmodel.h \ + /usr/include/qt6/QtCore/qstringliteral.h \ + /usr/include/qt6/QtCore/qstringmatcher.h \ + /usr/include/qt6/QtCore/qstringtokenizer.h \ + /usr/include/qt6/QtCore/qstringview.h \ + /usr/include/qt6/QtCore/qswap.h \ + /usr/include/qt6/QtCore/qsysinfo.h \ + /usr/include/qt6/QtCore/qsystemdetection.h \ + /usr/include/qt6/QtCore/qsystemsemaphore.h \ + /usr/include/qt6/QtCore/qtaggedpointer.h \ + /usr/include/qt6/QtCore/qtclasshelpermacros.h \ + /usr/include/qt6/QtCore/qtconfiginclude.h \ + /usr/include/qt6/QtCore/qtconfigmacros.h \ + /usr/include/qt6/QtCore/qtcore-config.h \ + /usr/include/qt6/QtCore/qtcoreexports.h \ + /usr/include/qt6/QtCore/qtcoreglobal.h \ + /usr/include/qt6/QtCore/qtcoreversion.h \ + /usr/include/qt6/QtCore/qtdeprecationdefinitions.h \ + /usr/include/qt6/QtCore/qtdeprecationmarkers.h \ + /usr/include/qt6/QtCore/qtemporarydir.h \ + /usr/include/qt6/QtCore/qtemporaryfile.h \ + /usr/include/qt6/QtCore/qtenvironmentvariables.h \ + /usr/include/qt6/QtCore/qtestsupport_core.h \ + /usr/include/qt6/QtCore/qtextboundaryfinder.h \ + /usr/include/qt6/QtCore/qtextstream.h \ + /usr/include/qt6/QtCore/qtformat_impl.h \ + /usr/include/qt6/QtCore/qthread.h \ + /usr/include/qt6/QtCore/qthreadpool.h \ + /usr/include/qt6/QtCore/qthreadstorage.h \ + /usr/include/qt6/QtCore/qtimeline.h \ + /usr/include/qt6/QtCore/qtimer.h \ + /usr/include/qt6/QtCore/qtimezone.h \ + /usr/include/qt6/QtCore/qtipccommon.h \ + /usr/include/qt6/QtCore/qtmetamacros.h \ + /usr/include/qt6/QtCore/qtmocconstants.h \ + /usr/include/qt6/QtCore/qtnoop.h \ + /usr/include/qt6/QtCore/qtpreprocessorsupport.h \ + /usr/include/qt6/QtCore/qtranslator.h \ + /usr/include/qt6/QtCore/qtransposeproxymodel.h \ + /usr/include/qt6/QtCore/qtresource.h \ + /usr/include/qt6/QtCore/qtsan_impl.h \ + /usr/include/qt6/QtCore/qtsymbolmacros.h \ + /usr/include/qt6/QtCore/qttranslation.h \ + /usr/include/qt6/QtCore/qttypetraits.h \ + /usr/include/qt6/QtCore/qtversion.h \ + /usr/include/qt6/QtCore/qtversionchecks.h \ + /usr/include/qt6/QtCore/qtypeinfo.h \ + /usr/include/qt6/QtCore/qtyperevision.h \ + /usr/include/qt6/QtCore/qtypes.h \ + /usr/include/qt6/QtCore/qurl.h \ + /usr/include/qt6/QtCore/qurlquery.h \ + /usr/include/qt6/QtCore/qutf8stringview.h \ + /usr/include/qt6/QtCore/quuid.h \ + /usr/include/qt6/QtCore/qvariant.h \ + /usr/include/qt6/QtCore/qvariantanimation.h \ + /usr/include/qt6/QtCore/qvarianthash.h \ + /usr/include/qt6/QtCore/qvariantlist.h \ + /usr/include/qt6/QtCore/qvariantmap.h \ + /usr/include/qt6/QtCore/qvarlengtharray.h \ + /usr/include/qt6/QtCore/qvector.h \ + /usr/include/qt6/QtCore/qversionnumber.h \ + /usr/include/qt6/QtCore/qversiontagging.h \ + /usr/include/qt6/QtCore/qwaitcondition.h \ + /usr/include/qt6/QtCore/qwineventnotifier.h \ + /usr/include/qt6/QtCore/qxmlstream.h \ + /usr/include/qt6/QtCore/qxpfunctional.h \ + /usr/include/qt6/QtCore/qxptype_traits.h \ + /usr/include/qt6/QtCore/qyieldcpu.h \ + /usr/include/qt6/QtGui/QBrush \ + /usr/include/qt6/QtGui/QColor \ + /usr/include/qt6/QtGui/QFont \ + /usr/include/qt6/QtGui/QIcon \ + /usr/include/qt6/QtGui/QImage \ + /usr/include/qt6/QtGui/QPixmap \ + /usr/include/qt6/QtGui/QTransform \ + /usr/include/qt6/QtGui/qaction.h \ + /usr/include/qt6/QtGui/qbitmap.h \ + /usr/include/qt6/QtGui/qbrush.h \ + /usr/include/qt6/QtGui/qcolor.h \ + /usr/include/qt6/QtGui/qcursor.h \ + /usr/include/qt6/QtGui/qevent.h \ + /usr/include/qt6/QtGui/qeventpoint.h \ + /usr/include/qt6/QtGui/qfont.h \ + /usr/include/qt6/QtGui/qfontinfo.h \ + /usr/include/qt6/QtGui/qfontmetrics.h \ + /usr/include/qt6/QtGui/qfontvariableaxis.h \ + /usr/include/qt6/QtGui/qguiapplication.h \ + /usr/include/qt6/QtGui/qguiapplication_platform.h \ + /usr/include/qt6/QtGui/qicon.h \ + /usr/include/qt6/QtGui/qimage.h \ + /usr/include/qt6/QtGui/qinputdevice.h \ + /usr/include/qt6/QtGui/qinputmethod.h \ + /usr/include/qt6/QtGui/qkeysequence.h \ + /usr/include/qt6/QtGui/qpaintdevice.h \ + /usr/include/qt6/QtGui/qpalette.h \ + /usr/include/qt6/QtGui/qpixelformat.h \ + /usr/include/qt6/QtGui/qpixmap.h \ + /usr/include/qt6/QtGui/qpointingdevice.h \ + /usr/include/qt6/QtGui/qpolygon.h \ + /usr/include/qt6/QtGui/qregion.h \ + /usr/include/qt6/QtGui/qrgb.h \ + /usr/include/qt6/QtGui/qrgba64.h \ + /usr/include/qt6/QtGui/qscreen.h \ + /usr/include/qt6/QtGui/qscreen_platform.h \ + /usr/include/qt6/QtGui/qsurface.h \ + /usr/include/qt6/QtGui/qsurfaceformat.h \ + /usr/include/qt6/QtGui/qtestsupport_gui.h \ + /usr/include/qt6/QtGui/qtgui-config.h \ + /usr/include/qt6/QtGui/qtguiexports.h \ + /usr/include/qt6/QtGui/qtguiglobal.h \ + /usr/include/qt6/QtGui/qtransform.h \ + /usr/include/qt6/QtGui/qvector2d.h \ + /usr/include/qt6/QtGui/qvector3d.h \ + /usr/include/qt6/QtGui/qvector4d.h \ + /usr/include/qt6/QtGui/qvectornd.h \ + /usr/include/qt6/QtGui/qwindow.h \ + /usr/include/qt6/QtGui/qwindowdefs.h \ + /usr/include/qt6/QtNetwork/qtnetwork-config.h \ + /usr/include/qt6/QtNetwork/qtnetworkexports.h \ + /usr/include/qt6/QtNetwork/qtnetworkglobal.h \ + /usr/include/qt6/QtQml/qjsnumbercoercion.h \ + /usr/include/qt6/QtQml/qjsprimitivevalue.h \ + /usr/include/qt6/QtQml/qjsvalue.h \ + /usr/include/qt6/QtQml/qqml.h \ + /usr/include/qt6/QtQml/qqmllist.h \ + /usr/include/qt6/QtQml/qqmlparserstatus.h \ + /usr/include/qt6/QtQml/qqmlprivate.h \ + /usr/include/qt6/QtQml/qqmlpropertyvaluesource.h \ + /usr/include/qt6/QtQml/qqmlregistration.h \ + /usr/include/qt6/QtQml/qtqml-config.h \ + /usr/include/qt6/QtQml/qtqmlexports.h \ + /usr/include/qt6/QtQml/qtqmlglobal.h \ + /usr/include/qt6/QtQmlIntegration/qqmlintegration.h \ + /usr/include/qt6/QtSql/QSqlDatabase \ + /usr/include/qt6/QtSql/QSqlError \ + /usr/include/qt6/QtSql/QSqlQuery \ + /usr/include/qt6/QtSql/qsqldatabase.h \ + /usr/include/qt6/QtSql/qsqlerror.h \ + /usr/include/qt6/QtSql/qsqlquery.h \ + /usr/include/qt6/QtSql/qtsql-config.h \ + /usr/include/qt6/QtSql/qtsqlexports.h \ + /usr/include/qt6/QtSql/qtsqlglobal.h \ + /usr/include/qt6/QtTest/QtTest \ + /usr/include/qt6/QtTest/QtTestDepends \ + /usr/include/qt6/QtTest/qabstractitemmodeltester.h \ + /usr/include/qt6/QtTest/qbenchmark.h \ + /usr/include/qt6/QtTest/qbenchmarkmetric.h \ + /usr/include/qt6/QtTest/qsignalspy.h \ + /usr/include/qt6/QtTest/qtest.h \ + /usr/include/qt6/QtTest/qtest_gui.h \ + /usr/include/qt6/QtTest/qtest_widgets.h \ + /usr/include/qt6/QtTest/qtestassert.h \ + /usr/include/qt6/QtTest/qtestcase.h \ + /usr/include/qt6/QtTest/qtestdata.h \ + /usr/include/qt6/QtTest/qtestevent.h \ + /usr/include/qt6/QtTest/qtesteventloop.h \ + /usr/include/qt6/QtTest/qtestkeyboard.h \ + /usr/include/qt6/QtTest/qtestmouse.h \ + /usr/include/qt6/QtTest/qtestspontaneevent.h \ + /usr/include/qt6/QtTest/qtestsystem.h \ + /usr/include/qt6/QtTest/qtesttostring.h \ + /usr/include/qt6/QtTest/qtesttouch.h \ + /usr/include/qt6/QtTest/qtestwheel.h \ + /usr/include/qt6/QtTest/qttestexports.h \ + /usr/include/qt6/QtTest/qttestglobal.h \ + /usr/include/qt6/QtTest/qttestlib-config.h \ + /usr/include/qt6/QtTest/qttestversion.h \ + /usr/include/qt6/QtWidgets/QApplication \ + /usr/include/qt6/QtWidgets/QSizePolicy \ + /usr/include/qt6/QtWidgets/qapplication.h \ + /usr/include/qt6/QtWidgets/qsizepolicy.h \ + /usr/include/qt6/QtWidgets/qtestsupport_widgets.h \ + /usr/include/qt6/QtWidgets/qtwidgets-config.h \ + /usr/include/qt6/QtWidgets/qtwidgetsexports.h \ + /usr/include/qt6/QtWidgets/qtwidgetsglobal.h \ + /usr/include/qt6/QtWidgets/qwidget.h \ + /usr/include/sched.h \ + /usr/include/semaphore.h \ + /usr/include/stdc-predef.h \ + /usr/include/stdint.h \ + /usr/include/stdio.h \ + /usr/include/stdlib.h \ + /usr/include/string.h \ + /usr/include/strings.h \ + /usr/include/sys/cdefs.h \ + /usr/include/sys/select.h \ + /usr/include/sys/single_threaded.h \ + /usr/include/sys/syscall.h \ + /usr/include/sys/time.h \ + /usr/include/sys/types.h \ + /usr/include/syscall.h \ + /usr/include/time.h \ + /usr/include/unistd.h \ + /usr/include/wchar.h \ + /usr/include/wctype.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/adxintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/amxavx512intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/amxbf16intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/amxcomplexintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/amxfp16intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/amxfp8intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/amxint8intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/amxmovrsintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/amxtf32intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/amxtileintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/amxtransposeintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2-512bf16intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2-512convertintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2-512mediaintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2-512minmaxintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2-512satcvtintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2bf16intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2convertintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2copyintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2mediaintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2minmaxintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2satcvtintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx2intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512bf16intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512bf16vlintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512bitalgintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512bitalgvlintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512bwintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512cdintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512dqintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512fintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512fp16intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512fp16vlintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512ifmaintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512ifmavlintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vbmi2intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vbmi2vlintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vbmiintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vbmivlintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vlbwintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vldqintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vlintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vnniintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vnnivlintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vp2intersectintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vp2intersectvlintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vpopcntdqintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vpopcntdqvlintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avxifmaintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avxintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avxneconvertintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avxvnniint16intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avxvnniint8intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avxvnniintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/bmi2intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/bmiintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/cetintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/cldemoteintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/clflushoptintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/clwbintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/clzerointrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/cmpccxaddintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/emmintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/enqcmdintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/f16cintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/fmaintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/fxsrintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/gfniintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/hresetintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/ia32intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/immintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/keylockerintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/lwpintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/lzcntintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/mm_malloc.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/mmintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/movdirintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/movrsintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/mwaitintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/mwaitxintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/pconfigintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/pkuintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/pmmintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/popcntintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/prfchiintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/prfchwintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/raointintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/rdseedintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/rtmintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/serializeintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/sgxintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/sha512intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/shaintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/sm3intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/sm4intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/smmintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/stdarg.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/stdbool.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/stddef.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/tbmintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/tmmintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/tsxldtrkintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/uintrintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/usermsrintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/vaesintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/vpclmulqdqintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/waitpkgintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/wbnoinvdintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/wmmintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/x86gprintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/xmmintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/xsavecintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/xsaveintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/xsaveoptintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/xsavesintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/xtestintrin.h \ + /usr/lib64/cmake/Qt6/Qt6Config.cmake \ + /usr/lib64/cmake/Qt6/Qt6ConfigExtras.cmake \ + /usr/lib64/cmake/Qt6/Qt6ConfigVersion.cmake \ + /usr/lib64/cmake/Qt6/Qt6ConfigVersionImpl.cmake \ + /usr/lib64/cmake/Qt6/Qt6Dependencies.cmake \ + /usr/lib64/cmake/Qt6/Qt6Targets.cmake \ + /usr/lib64/cmake/Qt6/Qt6VersionlessAliasTargets.cmake \ + /usr/lib64/cmake/Qt6/QtFeature.cmake \ + /usr/lib64/cmake/Qt6/QtFeatureCommon.cmake \ + /usr/lib64/cmake/Qt6/QtInstallPaths.cmake \ + /usr/lib64/cmake/Qt6/QtPublicAndroidHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicAppleHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicCMakeEarlyPolicyHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicCMakeHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicCMakeVersionHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicDependencyHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicExternalProjectHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicFinalizerHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicFindPackageHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicGitHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicPluginHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicPluginHelpers_v2.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomAttributionHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomBuildToolHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomCommonGenerationHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomCpeHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomCycloneDXHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomDepHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomDocumentNamespaceHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomExternalReferenceHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomFileHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomGenerationCycloneDXHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomGenerationHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomLicenseHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomOpsHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomPurlHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomPythonHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomQtEntityHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomRelationshipHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomSystemDepHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicTargetHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicTestHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicToolHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicWalkLibsHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicWindowsHelpers.cmake \ + /usr/lib64/cmake/Qt6Test/Qt6TestAdditionalTargetInfo.cmake \ + /usr/lib64/cmake/Qt6Test/Qt6TestConfig.cmake \ + /usr/lib64/cmake/Qt6Test/Qt6TestConfigVersion.cmake \ + /usr/lib64/cmake/Qt6Test/Qt6TestConfigVersionImpl.cmake \ + /usr/lib64/cmake/Qt6Test/Qt6TestDependencies.cmake \ + /usr/lib64/cmake/Qt6Test/Qt6TestTargets-relwithdebinfo.cmake \ + /usr/lib64/cmake/Qt6Test/Qt6TestTargets.cmake \ + /usr/lib64/cmake/Qt6Test/Qt6TestVersionlessAliasTargets.cmake \ + /usr/lib64/cmake/Qt6Test/QtTestProperties.cmake \ + /usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake \ + /usr/share/cmake/Modules/CheckCXXCompilerFlag.cmake \ + /usr/bin/cmake diff --git a/build-linux/tests/test_models_autogen/include/test_models.moc b/build-linux/tests/test_models_autogen/include/test_models.moc new file mode 100644 index 00000000..1d5e3cee --- /dev/null +++ b/build-linux/tests/test_models_autogen/include/test_models.moc @@ -0,0 +1,124 @@ +/**************************************************************************** +** Meta object code from reading C++ file 'test_models.cpp' +** +** Created by: The Qt Meta Object Compiler version 69 (Qt 6.10.3) +** +** WARNING! All changes made in this file will be lost! +*****************************************************************************/ + +#include + +#include + +#include + + +#include +#if !defined(Q_MOC_OUTPUT_REVISION) +#error "The header file 'test_models.cpp' doesn't include ." +#elif Q_MOC_OUTPUT_REVISION != 69 +#error "This file was generated using the moc from 6.10.3. It" +#error "cannot be used with the include files from this version of Qt." +#error "(The moc has changed too much.)" +#endif + +#ifndef Q_CONSTINIT +#define Q_CONSTINIT +#endif + +QT_WARNING_PUSH +QT_WARNING_DISABLE_DEPRECATED +QT_WARNING_DISABLE_GCC("-Wuseless-cast") +namespace { +struct qt_meta_tag_ZN10TestModelsE_t {}; +} // unnamed namespace + +template <> constexpr inline auto TestModels::qt_create_metaobjectdata() +{ + namespace QMC = QtMocConstants; + QtMocHelpers::StringRefStorage qt_stringData { + "TestModels", + "initTestCase", + "", + "testAssetsModelRowCount", + "testAssetsModelDataAccess", + "testAssetsModelTypeFiltering", + "testAssetsModelSearch" + }; + + QtMocHelpers::UintData qt_methods { + // Slot 'initTestCase' + QtMocHelpers::SlotData(1, 2, QMC::AccessPrivate, QMetaType::Void), + // Slot 'testAssetsModelRowCount' + QtMocHelpers::SlotData(3, 2, QMC::AccessPrivate, QMetaType::Void), + // Slot 'testAssetsModelDataAccess' + QtMocHelpers::SlotData(4, 2, QMC::AccessPrivate, QMetaType::Void), + // Slot 'testAssetsModelTypeFiltering' + QtMocHelpers::SlotData(5, 2, QMC::AccessPrivate, QMetaType::Void), + // Slot 'testAssetsModelSearch' + QtMocHelpers::SlotData(6, 2, QMC::AccessPrivate, QMetaType::Void), + }; + QtMocHelpers::UintData qt_properties { + }; + QtMocHelpers::UintData qt_enums { + }; + return QtMocHelpers::metaObjectData(QMC::MetaObjectFlag{}, qt_stringData, + qt_methods, qt_properties, qt_enums); +} +Q_CONSTINIT const QMetaObject TestModels::staticMetaObject = { { + QMetaObject::SuperData::link(), + qt_staticMetaObjectStaticContent.stringdata, + qt_staticMetaObjectStaticContent.data, + qt_static_metacall, + nullptr, + qt_staticMetaObjectRelocatingContent.metaTypes, + nullptr +} }; + +void TestModels::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) +{ + auto *_t = static_cast(_o); + if (_c == QMetaObject::InvokeMetaMethod) { + switch (_id) { + case 0: _t->initTestCase(); break; + case 1: _t->testAssetsModelRowCount(); break; + case 2: _t->testAssetsModelDataAccess(); break; + case 3: _t->testAssetsModelTypeFiltering(); break; + case 4: _t->testAssetsModelSearch(); break; + default: ; + } + } + (void)_a; +} + +const QMetaObject *TestModels::metaObject() const +{ + return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject; +} + +void *TestModels::qt_metacast(const char *_clname) +{ + if (!_clname) return nullptr; + if (!strcmp(_clname, qt_staticMetaObjectStaticContent.strings)) + return static_cast(this); + return QObject::qt_metacast(_clname); +} + +int TestModels::qt_metacall(QMetaObject::Call _c, int _id, void **_a) +{ + _id = QObject::qt_metacall(_c, _id, _a); + if (_id < 0) + return _id; + if (_c == QMetaObject::InvokeMetaMethod) { + if (_id < 5) + qt_static_metacall(this, _c, _id, _a); + _id -= 5; + } + if (_c == QMetaObject::RegisterMethodArgumentMetaType) { + if (_id < 5) + *reinterpret_cast(_a[0]) = QMetaType(); + _id -= 5; + } + return _id; +} +QT_WARNING_POP diff --git a/build-linux/tests/test_models_autogen/moc_predefs.h b/build-linux/tests/test_models_autogen/moc_predefs.h new file mode 100644 index 00000000..a397064b --- /dev/null +++ b/build-linux/tests/test_models_autogen/moc_predefs.h @@ -0,0 +1,505 @@ +#define __DBL_MIN_EXP__ (-1021) +#define __LDBL_MANT_DIG__ 64 +#define __cpp_nontype_template_parameter_auto 201606L +#define __UINT_LEAST16_MAX__ 0xffff +#define __FLT16_HAS_QUIET_NAN__ 1 +#define __ATOMIC_ACQUIRE 2 +#define QT_TESTCASE_BUILDDIR "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests" +#define __FLT128_MAX_10_EXP__ 4932 +#define __FLT_MIN__ 1.17549435082228750796873653722224568e-38F +#define __GCC_IEC_559_COMPLEX 2 +#define __cpp_aggregate_nsdmi 201304L +#define __UINT_LEAST8_TYPE__ unsigned char +#define __SIZEOF_FLOAT80__ 16 +#define __BFLT16_DENORM_MIN__ 9.18354961579912115600575419704879436e-41BF16 +#define __cpp_impl_three_way_comparison 201907L +#define __INTMAX_C(c) c ## L +#define __CHAR_BIT__ 8 +#define __cpp_designated_initializers 201707L +#define __UINT8_MAX__ 0xff +#define __SCHAR_WIDTH__ 8 +#define __WINT_MAX__ 0xffffffffU +#define __FLT32_MIN_EXP__ (-125) +#define __cpp_static_assert 201411L +#define __BFLT16_MIN_10_EXP__ (-37) +#define __cpp_inheriting_constructors 201511L +#define QT_GUI_LIB 1 +#define __ORDER_LITTLE_ENDIAN__ 1234 +#define __WCHAR_MAX__ 0x7fffffff +#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_2 1 +#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_4 1 +#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_8 1 +#define __GCC_ATOMIC_CHAR_LOCK_FREE 2 +#define __GCC_IEC_559 2 +#define __FLT32X_DECIMAL_DIG__ 17 +#define TLRENDER_OIIO 1 +#define __FLT_EVAL_METHOD__ 0 +#define __cpp_binary_literals 201304L +#define __FLT64_DECIMAL_DIG__ 17 +#define __cpp_noexcept_function_type 201510L +#define __GCC_ATOMIC_CHAR32_T_LOCK_FREE 2 +#define __cpp_variadic_templates 200704L +#define __UINT_FAST64_MAX__ 0xffffffffffffffffUL +#define __SIG_ATOMIC_TYPE__ int +#define __DBL_MIN_10_EXP__ (-307) +#define __FINITE_MATH_ONLY__ 0 +#define __cpp_variable_templates 201304L +#define __FLT32X_MAX_EXP__ 1024 +#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_1 1 +#define __FLT32_HAS_DENORM__ 1 +#define __UINT_FAST8_MAX__ 0xff +#define __cpp_rvalue_reference 200610L +#define __cpp_nested_namespace_definitions 201411L +#define __DEC64_MAX_EXP__ 385 +#define __INT8_C(c) c +#define __LDBL_HAS_INFINITY__ 1 +#define __INT_LEAST8_WIDTH__ 8 +#define __cpp_variadic_using 201611L +#define __UINT_LEAST64_MAX__ 0xffffffffffffffffUL +#define __INT_LEAST8_MAX__ 0x7f +#define __cpp_attributes 200809L +#define __cpp_capture_star_this 201603L +#define __SHRT_MAX__ 0x7fff +#define __LDBL_MAX__ 1.18973149535723176502126385303097021e+4932L +#define __cpp_impl_coroutine 201902L +#define __FLT64X_MAX_10_EXP__ 4932 +#define __cpp_if_constexpr 201606L +#define __BFLT16_MAX_10_EXP__ 38 +#define __BFLT16_MAX_EXP__ 128 +#define __LDBL_IS_IEC_60559__ 1 +#define QT_NO_DEBUG 1 +#define __FLT64X_HAS_QUIET_NAN__ 1 +#define QT_TESTLIB_LIB 1 +#define TLRENDER_SDL2 1 +#define __UINT_LEAST8_MAX__ 0xff +#define __GCC_ATOMIC_BOOL_LOCK_FREE 2 +#define __FLT128_DENORM_MIN__ 6.47517511943802511092443895822764655e-4966F128 +#define __UINTMAX_TYPE__ long unsigned int +#define __cpp_nsdmi 200809L +#define __BFLT16_DECIMAL_DIG__ 4 +#define __linux 1 +#define __DEC32_EPSILON__ 1E-6DF +#define __FLT_EVAL_METHOD_TS_18661_3__ 0 +#define __UINT32_MAX__ 0xffffffffU +#define __GXX_EXPERIMENTAL_CXX0X__ 1 +#define __DBL_DENORM_MIN__ double(4.94065645841246544176568792868221372e-324L) +#define __FLT128_MIN_EXP__ (-16381) +#define __DEC64X_MAX_EXP__ 6145 +#define __WINT_MIN__ 0U +#define __FLT128_MIN_10_EXP__ (-4931) +#define __FLT32X_IS_IEC_60559__ 1 +#define __INT_LEAST16_WIDTH__ 16 +#define __SCHAR_MAX__ 0x7f +#define __FLT128_MANT_DIG__ 113 +#define __WCHAR_MIN__ (-__WCHAR_MAX__ - 1) +#define __INT64_C(c) c ## L +#define __cpp_impl_destroying_delete 201806L +#define __GCC_ATOMIC_POINTER_LOCK_FREE 2 +#define TLRENDER_JPEG 1 +#define __ATOMIC_SEQ_CST 5 +#define __unix 1 +#define __INT_LEAST64_MAX__ 0x7fffffffffffffffL +#define __FLT32X_MANT_DIG__ 53 +#define __GCC_ATOMIC_CHAR16_T_LOCK_FREE 2 +#define __cpp_aligned_new 201606L +#define __FLT32_MAX_10_EXP__ 38 +#define __FLT64X_EPSILON__ 1.08420217248550443400745280086994171e-19F64x +#define __STDC_HOSTED__ 1 +#define __DEC64_MIN_EXP__ (-382) +#define TLRENDER_PNG 1 +#define __cpp_decltype_auto 201304L +#define __DBL_DIG__ 15 +#define __STDC_EMBED_EMPTY__ 2 +#define __FLT_EPSILON__ 1.19209289550781250000000000000000000e-7F +#define __cpp_char8_t 202207L +#define __GXX_WEAK__ 1 +#define __SHRT_WIDTH__ 16 +#define __FLT32_IS_IEC_60559__ 1 +#define __LDBL_MIN__ 3.36210314311209350626267781732175260e-4932L +#define __DBL_IS_IEC_60559__ 1 +#define __DEC32_MAX__ 9.999999E96DF +#define __CHAR8_TYPE__ unsigned char +#define __cpp_threadsafe_static_init 200806L +#define __cpp_enumerator_attributes 201411L +#define TLRENDER_EXR 1 +#define __FLT64X_DENORM_MIN__ 3.64519953188247460252840593361941982e-4951F64x +#define __FLT32X_HAS_INFINITY__ 1 +#define __unix__ 1 +#define __INT_WIDTH__ 32 +#define __STDC_IEC_559__ 1 +#define __STDC_ISO_10646__ 201706L +#define __GCC_ATOMIC_CHAR8_T_LOCK_FREE 2 +#define __DECIMAL_DIG__ 21 +#define __STDC_IEC_559_COMPLEX__ 1 +#define __FLT64_EPSILON__ 2.22044604925031308084726333618164062e-16F64 +#define __gnu_linux__ 1 +#define __INT16_MAX__ 0x7fff +#define __FLT64_MIN_EXP__ (-1021) +#define __cpp_using_enum 201907L +#define __DEC64X_EPSILON__ 1E-33D64x +#define __FLT64X_MIN_10_EXP__ (-4931) +#define __LDBL_HAS_QUIET_NAN__ 1 +#define __FLT16_MIN_EXP__ (-13) +#define __FLT64_MANT_DIG__ 53 +#define __cpp_consteval 202211L +#define __FLT64X_MANT_DIG__ 64 +#define FTK_API_GL_4_1 1 +#define __BFLT16_DIG__ 2 +#define __GNUC__ 15 +#define __GXX_RTTI 1 +#define TLRENDER_FFMPEG_PLUGIN 1 +#define __MMX__ 1 +#define __FLT_HAS_DENORM__ 1 +#define __SIZEOF_LONG_DOUBLE__ 16 +#define __BIGGEST_ALIGNMENT__ 16 +#define __STDC_UTF_16__ 1 +#define __FLT64_MAX_10_EXP__ 308 +#define __BFLT16_IS_IEC_60559__ 0 +#define __FLT16_MAX_10_EXP__ 4 +#define __cpp_delegating_constructors 200604L +#define __DBL_MAX__ double(1.79769313486231570814527423731704357e+308L) +#define __cpp_raw_strings 200710L +#define __INT_FAST32_MAX__ 0x7fffffffffffffffL +#define __DBL_HAS_INFINITY__ 1 +#define __INT64_MAX__ 0x7fffffffffffffffL +#define __SIZEOF_FLOAT__ 4 +#define __HAVE_SPECULATION_SAFE_VALUE 1 +#define __cpp_fold_expressions 201603L +#define __DEC32_MIN_EXP__ (-94) +#define __INTPTR_WIDTH__ 64 +#define __UINT_LEAST32_MAX__ 0xffffffffU +#define __FLT32X_HAS_DENORM__ 1 +#define __INT_FAST16_TYPE__ long int +#define __MMX_WITH_SSE__ 1 +#define __LDBL_HAS_DENORM__ 1 +#define QT_WIDGETS_LIB 1 +#define __SEG_GS 1 +#define __BFLT16_EPSILON__ 7.81250000000000000000000000000000000e-3BF16 +#define __cplusplus 202002L +#define __cpp_ref_qualifiers 200710L +#define __DEC32_MIN__ 1E-95DF +#define __DEPRECATED 1 +#define __cpp_rvalue_references 200610L +#define __DBL_MAX_EXP__ 1024 +#define __WCHAR_WIDTH__ 32 +#define __FLT32_MAX__ 3.40282346638528859811704183484516925e+38F32 +#define __DEC128_EPSILON__ 1E-33DL +#define __FLT16_DECIMAL_DIG__ 5 +#define __SSE2_MATH__ 1 +#define __ATOMIC_HLE_RELEASE 131072 +#define __PTRDIFF_MAX__ 0x7fffffffffffffffL +#define __amd64 1 +#define __DEC64X_MAX__ 9.999999999999999999999999999999999E6144D64x +#define __ATOMIC_HLE_ACQUIRE 65536 +#define __GNUG__ 15 +#define __LONG_LONG_MAX__ 0x7fffffffffffffffLL +#define __SIZEOF_SIZE_T__ 8 +#define __BFLT16_HAS_INFINITY__ 1 +#define __FLT64X_MIN_EXP__ (-16381) +#define __SIZEOF_WINT_T__ 4 +#define __FLT32X_DIG__ 15 +#define __LONG_LONG_WIDTH__ 64 +#define QT_TESTCASE_SOURCEDIR "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests" +#define __cpp_initializer_lists 200806L +#define __FLT32_MAX_EXP__ 128 +#define ABI_ID "ELF" +#define __cpp_hex_float 201603L +#define __GXX_ABI_VERSION 1020 +#define __FLT_MIN_EXP__ (-125) +#define __GCC_HAVE_DWARF2_CFI_ASM 1 +#define TLRENDER_OCIO 1 +#define __x86_64 1 +#define __cpp_lambdas 200907L +#define __INT_FAST64_TYPE__ long int +#define __BFLT16_MAX__ 3.38953138925153547590470800371487867e+38BF16 +#define __FLT64_DENORM_MIN__ 4.94065645841246544176568792868221372e-324F64 +#define __cpp_template_auto 201606L +#define __FLT16_DENORM_MIN__ 5.96046447753906250000000000000000000e-8F16 +#define __FLT128_EPSILON__ 1.92592994438723585305597794258492732e-34F128 +#define __FLT64X_NORM_MAX__ 1.18973149535723176502126385303097021e+4932F64x +#define __SIZEOF_POINTER__ 8 +#define __SIZE_TYPE__ long unsigned int +#define __LP64__ 1 +#define __DBL_HAS_QUIET_NAN__ 1 +#define __FLT32X_EPSILON__ 2.22044604925031308084726333618164062e-16F32x +#define __LDBL_MAX_EXP__ 16384 +#define __DECIMAL_BID_FORMAT__ 1 +#define __FLT64_MIN_10_EXP__ (-307) +#define __FLT16_MIN_10_EXP__ (-4) +#define __FLT64X_DECIMAL_DIG__ 21 +#define __DEC128_MIN__ 1E-6143DL +#define __REGISTER_PREFIX__ +#define __UINT16_MAX__ 0xffff +#define __FLT128_HAS_INFINITY__ 1 +#define __FLT32_MIN__ 1.17549435082228750796873653722224568e-38F32 +#define __UINT8_TYPE__ unsigned char +#define __FLT_DIG__ 6 +#define __NO_INLINE__ 1 +#define __DEC_EVAL_METHOD__ 2 +#define __FLT_MANT_DIG__ 24 +#define __LDBL_DECIMAL_DIG__ 21 +#define __VERSION__ "15.2.1 20260123 (Red Hat 15.2.1-7)" +#define __UINT64_C(c) c ## UL +#define __cpp_unicode_characters 201411L +#define __DEC64X_MIN__ 1E-6143D64x +#define _STDC_PREDEF_H 1 +#define __INT_LEAST32_MAX__ 0x7fffffff +#define __GCC_ATOMIC_INT_LOCK_FREE 2 +#define __FLT128_MAX_EXP__ 16384 +#define __cpp_conditional_explicit 201806L +#define __FLT32_MANT_DIG__ 24 +#define __cpp_decltype 200707L +#define __FLOAT_WORD_ORDER__ __ORDER_LITTLE_ENDIAN__ +#define SIZEOF_DPTR (sizeof(void*)) +#define __FLT32X_MIN_EXP__ (-1021) +#define __cpp_aggregate_paren_init 201902L +#define __STDC_IEC_60559_COMPLEX__ 201404L +#define __cpp_aggregate_bases 201603L +#define __BFLT16_MIN__ 1.17549435082228750796873653722224568e-38BF16 +#define __FLT128_HAS_DENORM__ 1 +#define __FLT32_DECIMAL_DIG__ 9 +#define __FLT128_DIG__ 33 +#define __INT32_C(c) c +#define __DEC64_EPSILON__ 1E-15DD +#define __ORDER_PDP_ENDIAN__ 3412 +#define __DEC128_MIN_EXP__ (-6142) +#define __DEC128_MAX__ 9.999999999999999999999999999999999E6144DL +#define __cpp_constinit 201907L +#define __INT_FAST32_TYPE__ long int +#define __UINT_LEAST16_TYPE__ short unsigned int +#define __DEC64X_MANT_DIG__ 34 +#define __DEC128_MAX_EXP__ 6145 +#define unix 1 +#define __DBL_HAS_DENORM__ 1 +#define __cpp_rtti 199711L +#define __UINT64_MAX__ 0xffffffffffffffffUL +#define __FLT_IS_IEC_60559__ 1 +#define __GNUC_WIDE_EXECUTION_CHARSET_NAME "UTF-32LE" +#define __FLT64X_DIG__ 18 +#define __INT8_TYPE__ signed char +#define __cpp_digit_separators 201309L +#define __ELF__ 1 +#define __GCC_ASM_FLAG_OUTPUTS__ 1 +#define __UINT32_TYPE__ unsigned int +#define __BFLT16_HAS_QUIET_NAN__ 1 +#define __FLT_RADIX__ 2 +#define __INT_LEAST16_TYPE__ short int +#define __LDBL_EPSILON__ 1.08420217248550443400745280086994171e-19L +#define __UINTMAX_C(c) c ## UL +#define __GNUC_RH_RELEASE__ 7 +#define __FLT16_DIG__ 3 +#define __k8 1 +#define __FLT32X_MIN__ 2.22507385850720138309023271733240406e-308F32x +#define __SIG_ATOMIC_MAX__ 0x7fffffff +#define __cpp_constexpr 202002L +#define __GCC_ATOMIC_WCHAR_T_LOCK_FREE 2 +#define __USER_LABEL_PREFIX__ +#define __STDC_IEC_60559_BFP__ 201404L +#define __SIZEOF_PTRDIFF_T__ 8 +#define __FLT64X_HAS_INFINITY__ 1 +#define __SIZEOF_LONG__ 8 +#define __LDBL_DIG__ 18 +#define __FLT64_IS_IEC_60559__ 1 +#define __x86_64__ 1 +#define __FLT16_IS_IEC_60559__ 1 +#define __FLT16_MAX_EXP__ 16 +#define __DEC32_SUBNORMAL_MIN__ 0.000001E-95DF +#define __STDC_EMBED_FOUND__ 1 +#define __INT_FAST16_MAX__ 0x7fffffffffffffffL +#define __GCC_CONSTRUCTIVE_SIZE 64 +#define __FLT64_DIG__ 15 +#define __UINT_FAST32_MAX__ 0xffffffffffffffffUL +#define __UINT_LEAST64_TYPE__ long unsigned int +#define __FLT16_EPSILON__ 9.76562500000000000000000000000000000e-4F16 +#define __FLT_HAS_QUIET_NAN__ 1 +#define __FLT_MAX_10_EXP__ 38 +#define __FLT64X_HAS_DENORM__ 1 +#define __DEC128_SUBNORMAL_MIN__ 0.000000000000000000000000000000001E-6143DL +#define __FLT_HAS_INFINITY__ 1 +#define __GNUC_EXECUTION_CHARSET_NAME "UTF-8" +#define __cpp_unicode_literals 200710L +#define __UINT_FAST16_TYPE__ long unsigned int +#define __DEC64_MAX__ 9.999999999999999E384DD +#define __STDC_EMBED_NOT_FOUND__ 0 +#define __INT_FAST32_WIDTH__ 64 +#define __CHAR16_TYPE__ short unsigned int +#define __PRAGMA_REDEFINE_EXTNAME 1 +#define __DEC64X_SUBNORMAL_MIN__ 0.000000000000000000000000000000001E-6143D64x +#define __SIZE_WIDTH__ 64 +#define __SEG_FS 1 +#define __INT_LEAST16_MAX__ 0x7fff +#define __FLT16_NORM_MAX__ 6.55040000000000000000000000000000000e+4F16 +#define __DEC64_MANT_DIG__ 16 +#define __FLT32_DENORM_MIN__ 1.40129846432481707092372958328991613e-45F32 +#define __SIG_ATOMIC_WIDTH__ 32 +#define __GCC_DESTRUCTIVE_SIZE 64 +#define __INT_LEAST64_TYPE__ long int +#define __INT16_TYPE__ short int +#define __INT_LEAST8_TYPE__ signed char +#define __FLT16_MAX__ 6.55040000000000000000000000000000000e+4F16 +#define __FLT128_MIN__ 3.36210314311209350626267781732175260e-4932F128 +#define __cpp_structured_bindings 201606L +#define __SIZEOF_INT__ 4 +#define __DEC32_MAX_EXP__ 97 +#define __INT_FAST8_MAX__ 0x7f +#define __FLT128_MAX__ 1.18973149535723176508575932662800702e+4932F128 +#define __INTPTR_MAX__ 0x7fffffffffffffffL +#define __cpp_sized_deallocation 201309L +#define __cpp_guaranteed_copy_elision 201606L +#define linux 1 +#define __FLT64_HAS_QUIET_NAN__ 1 +#define __FLT32_MIN_10_EXP__ (-37) +#define __EXCEPTIONS 1 +#define __UINT16_C(c) c +#define __PTRDIFF_WIDTH__ 64 +#define __cpp_range_based_for 201603L +#define __INT_FAST16_WIDTH__ 64 +#define __FLT64_HAS_INFINITY__ 1 +#define __FLT64X_MAX__ 1.18973149535723176502126385303097021e+4932F64x +#define __FLT16_HAS_INFINITY__ 1 +#define __STDCPP_DEFAULT_NEW_ALIGNMENT__ 16 +#define __SIG_ATOMIC_MIN__ (-__SIG_ATOMIC_MAX__ - 1) +#define __code_model_small__ 1 +#define __GCC_ATOMIC_LONG_LOCK_FREE 2 +#define __cpp_nontype_template_args 201911L +#define __DEC32_MANT_DIG__ 7 +#define __k8__ 1 +#define __INTPTR_TYPE__ long int +#define __UINT16_TYPE__ short unsigned int +#define __WCHAR_TYPE__ int +#define __UINTPTR_MAX__ 0xffffffffffffffffUL +#define __INT_FAST64_WIDTH__ 64 +#define __cpp_nontype_template_parameter_class 201806L +#define __cpp_concepts 202002L +#define __INT_FAST64_MAX__ 0x7fffffffffffffffL +#define __GCC_ATOMIC_TEST_AND_SET_TRUEVAL 1 +#define __FLT_NORM_MAX__ 3.40282346638528859811704183484516925e+38F +#define __FLT32_HAS_INFINITY__ 1 +#define __FLT64X_MAX_EXP__ 16384 +#define __UINT_FAST64_TYPE__ long unsigned int +#define __cpp_constexpr_in_decltype 201711L +#define __cpp_inline_variables 201606L +#define __BFLT16_MIN_EXP__ (-125) +#define __INT_MAX__ 0x7fffffff +#define __linux__ 1 +#define __INT64_TYPE__ long int +#define __FLT_MAX_EXP__ 128 +#define __ORDER_BIG_ENDIAN__ 4321 +#define __DBL_MANT_DIG__ 53 +#define QT_CORE_LIB 1 +#define __SIZEOF_FLOAT128__ 16 +#define __BFLT16_MANT_DIG__ 8 +#define __DEC64_MIN__ 1E-383DD +#define __WINT_TYPE__ unsigned int +#define __UINT_LEAST32_TYPE__ unsigned int +#define __SIZEOF_SHORT__ 2 +#define __FLT32_NORM_MAX__ 3.40282346638528859811704183484516925e+38F32 +#define __SSE__ 1 +#define __LDBL_MIN_EXP__ (-16381) +#define __FLT64_MAX__ 1.79769313486231570814527423731704357e+308F64 +#define __DEC64X_MIN_EXP__ (-6142) +#define __amd64__ 1 +#define __WINT_WIDTH__ 32 +#define __INT_LEAST64_WIDTH__ 64 +#define __FLT32X_MAX_10_EXP__ 308 +#define __cpp_namespace_attributes 201411L +#define __SIZEOF_INT128__ 16 +#define __FLT16_MIN__ 6.10351562500000000000000000000000000e-5F16 +#define __FLT64X_IS_IEC_60559__ 1 +#define __GXX_CONSTEXPR_ASM__ 1 +#define __LDBL_MAX_10_EXP__ 4932 +#define __ATOMIC_RELAXED 0 +#define __DBL_EPSILON__ double(2.22044604925031308084726333618164062e-16L) +#define __INT_LEAST32_TYPE__ int +#define _LP64 1 +#define __UINT8_C(c) c +#define __FLT64_MAX_EXP__ 1024 +#define __cpp_return_type_deduction 201304L +#define __SIZEOF_WCHAR_T__ 4 +#define __GNUC_PATCHLEVEL__ 1 +#define __FLT128_NORM_MAX__ 1.18973149535723176508575932662800702e+4932F128 +#define __FLT64_NORM_MAX__ 1.79769313486231570814527423731704357e+308F64 +#define __FLT128_HAS_QUIET_NAN__ 1 +#define __INTMAX_MAX__ 0x7fffffffffffffffL +#define TLRENDER_TIFF 1 +#define __INT_FAST8_TYPE__ signed char +#define __FLT64X_MIN__ 3.36210314311209350626267781732175260e-4932F64x +#define QT_SQL_LIB 1 +#define __STDCPP_THREADS__ 1 +#define __BFLT16_HAS_DENORM__ 1 +#define __GNUC_STDC_INLINE__ 1 +#define __FLT64_HAS_DENORM__ 1 +#define __FLT32_EPSILON__ 1.19209289550781250000000000000000000e-7F32 +#define __FLT16_HAS_DENORM__ 1 +#define __DBL_DECIMAL_DIG__ 17 +#define __STDC_UTF_32__ 1 +#define __INT_FAST8_WIDTH__ 8 +#define __FXSR__ 1 +#define __FLT32X_MAX__ 1.79769313486231570814527423731704357e+308F32x +#define __DBL_NORM_MAX__ double(1.79769313486231570814527423731704357e+308L) +#define __BYTE_ORDER__ __ORDER_LITTLE_ENDIAN__ +#define TLRENDER_FFMPEG 1 +#define __INTMAX_WIDTH__ 64 +#define __cpp_runtime_arrays 198712L +#define __FLT32_DIG__ 6 +#define __UINT64_TYPE__ long unsigned int +#define __UINT32_C(c) c ## U +#define __cpp_alias_templates 200704L +#define __cpp_constexpr_dynamic_alloc 201907L +#define __FLT_DENORM_MIN__ 1.40129846432481707092372958328991613e-45F +#define __FLT128_IS_IEC_60559__ 1 +#define __INT8_MAX__ 0x7f +#define __LONG_WIDTH__ 64 +#define __DBL_MIN__ double(2.22507385850720138309023271733240406e-308L) +#define __INT32_MAX__ 0x7fffffff +#define __UINT_FAST32_TYPE__ long unsigned int +#define __FLT16_MANT_DIG__ 11 +#define __FLT32X_NORM_MAX__ 1.79769313486231570814527423731704357e+308F32x +#define __CHAR32_TYPE__ unsigned int +#define __FLT_MAX__ 3.40282346638528859811704183484516925e+38F +#define __SSE2__ 1 +#define __cpp_deduction_guides 201907L +#define __BFLT16_NORM_MAX__ 3.38953138925153547590470800371487867e+38BF16 +#define __INT32_TYPE__ int +#define __SIZEOF_DOUBLE__ 8 +#define __cpp_exceptions 199711L +#define __FLT_MIN_10_EXP__ (-37) +#define __FLT64_MIN__ 2.22507385850720138309023271733240406e-308F64 +#define __INT_LEAST32_WIDTH__ 32 +#define __INTMAX_TYPE__ long int +#define __GLIBCXX_BITSIZE_INT_N_0 128 +#define __FLT32X_HAS_QUIET_NAN__ 1 +#define __ATOMIC_CONSUME 1 +#define __GNUC_MINOR__ 2 +#define __GLIBCXX_TYPE_INT_N_0 __int128 +#define __UINTMAX_MAX__ 0xffffffffffffffffUL +#define __FLT32X_DENORM_MIN__ 4.94065645841246544176568792868221372e-324F32x +#define __cpp_template_template_args 201611L +#define __DBL_MAX_10_EXP__ 308 +#define __LDBL_DENORM_MIN__ 3.64519953188247460252840593361941982e-4951L +#define __INT16_C(c) c +#define __STDC__ 1 +#define __PTRDIFF_TYPE__ long int +#define __LONG_MAX__ 0x7fffffffffffffffL +#define __FLT32X_MIN_10_EXP__ (-307) +#define __UINTPTR_TYPE__ long unsigned int +#define __DEC64_SUBNORMAL_MIN__ 0.000000000000001E-383DD +#define __DEC128_MANT_DIG__ 34 +#define __LDBL_MIN_10_EXP__ (-4931) +#define __cpp_generic_lambdas 201707L +#define __SSE_MATH__ 1 +#define __SIZEOF_LONG_LONG__ 8 +#define __cpp_user_defined_literals 200809L +#define __FLT128_DECIMAL_DIG__ 36 +#define __GCC_ATOMIC_LLONG_LOCK_FREE 2 +#define __FLT32_HAS_QUIET_NAN__ 1 +#define __FLT_DECIMAL_DIG__ 9 +#define __UINT_FAST16_MAX__ 0xffffffffffffffffUL +#define __LDBL_NORM_MAX__ 1.18973149535723176502126385303097021e+4932L +#define __GCC_ATOMIC_SHORT_LOCK_FREE 2 +#define __SIZE_MAX__ 0xffffffffffffffffUL +#define __UINT_FAST8_TYPE__ unsigned char +#define _GNU_SOURCE 1 +#define __cpp_init_captures 201803L +#define __ATOMIC_ACQ_REL 4 +#define __ATOMIC_RELEASE 3 diff --git a/build-linux/tests/test_models_autogen/mocs_compilation.cpp b/build-linux/tests/test_models_autogen/mocs_compilation.cpp new file mode 100644 index 00000000..06fe5791 --- /dev/null +++ b/build-linux/tests/test_models_autogen/mocs_compilation.cpp @@ -0,0 +1,4 @@ +// This file is autogenerated. Changes will be overwritten. +#include "VNU7RW3YIC/moc_assets_model.cpp" +#include "VNU7RW3YIC/moc_db.cpp" +#include "VNU7RW3YIC/moc_log_manager.cpp" diff --git a/build-linux/tests/test_models_autogen/timestamp b/build-linux/tests/test_models_autogen/timestamp new file mode 100644 index 00000000..e69de29b diff --git a/build-linux/tests/test_platform_session b/build-linux/tests/test_platform_session new file mode 100755 index 00000000..8fe2025c Binary files /dev/null and b/build-linux/tests/test_platform_session differ diff --git a/build-linux/tests/test_platform_session_autogen/deps b/build-linux/tests/test_platform_session_autogen/deps new file mode 100644 index 00000000..21085822 --- /dev/null +++ b/build-linux/tests/test_platform_session_autogen/deps @@ -0,0 +1,828 @@ +test_platform_session_autogen/timestamp: \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_platform_session_autogen/moc_predefs.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/platform_session.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/CMakeLists.txt \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/test_platform_session.cpp \ + /usr/include/asm-generic/bitsperlong.h \ + /usr/include/asm-generic/errno-base.h \ + /usr/include/asm-generic/errno.h \ + /usr/include/asm-generic/int-ll64.h \ + /usr/include/asm-generic/posix_types.h \ + /usr/include/asm-generic/types.h \ + /usr/include/asm/bitsperlong.h \ + /usr/include/asm/errno.h \ + /usr/include/asm/posix_types.h \ + /usr/include/asm/posix_types_64.h \ + /usr/include/asm/types.h \ + /usr/include/asm/unistd.h \ + /usr/include/asm/unistd_64.h \ + /usr/include/assert.h \ + /usr/include/bits/atomic_wide_counter.h \ + /usr/include/bits/byteswap.h \ + /usr/include/bits/confname.h \ + /usr/include/bits/cpu-set.h \ + /usr/include/bits/endian.h \ + /usr/include/bits/endianness.h \ + /usr/include/bits/environments.h \ + /usr/include/bits/errno.h \ + /usr/include/bits/floatn-common.h \ + /usr/include/bits/floatn.h \ + /usr/include/bits/getopt_core.h \ + /usr/include/bits/getopt_posix.h \ + /usr/include/bits/libc-header-start.h \ + /usr/include/bits/locale.h \ + /usr/include/bits/long-double.h \ + /usr/include/bits/posix_opt.h \ + /usr/include/bits/pthread_stack_min-dynamic.h \ + /usr/include/bits/pthreadtypes-arch.h \ + /usr/include/bits/pthreadtypes.h \ + /usr/include/bits/sched.h \ + /usr/include/bits/select.h \ + /usr/include/bits/semaphore.h \ + /usr/include/bits/setjmp.h \ + /usr/include/bits/stdint-intn.h \ + /usr/include/bits/stdio_lim.h \ + /usr/include/bits/struct_mutex.h \ + /usr/include/bits/struct_rwlock.h \ + /usr/include/bits/syscall.h \ + /usr/include/bits/thread-shared-types.h \ + /usr/include/bits/time.h \ + /usr/include/bits/time64.h \ + /usr/include/bits/timesize.h \ + /usr/include/bits/timex.h \ + /usr/include/bits/types.h \ + /usr/include/bits/types/FILE.h \ + /usr/include/bits/types/__FILE.h \ + /usr/include/bits/types/__fpos64_t.h \ + /usr/include/bits/types/__fpos_t.h \ + /usr/include/bits/types/__locale_t.h \ + /usr/include/bits/types/__mbstate_t.h \ + /usr/include/bits/types/__sigset_t.h \ + /usr/include/bits/types/clock_t.h \ + /usr/include/bits/types/clockid_t.h \ + /usr/include/bits/types/cookie_io_functions_t.h \ + /usr/include/bits/types/error_t.h \ + /usr/include/bits/types/locale_t.h \ + /usr/include/bits/types/mbstate_t.h \ + /usr/include/bits/types/sigset_t.h \ + /usr/include/bits/types/struct_FILE.h \ + /usr/include/bits/types/struct___jmp_buf_tag.h \ + /usr/include/bits/types/struct_itimerspec.h \ + /usr/include/bits/types/struct_sched_param.h \ + /usr/include/bits/types/struct_timespec.h \ + /usr/include/bits/types/struct_timeval.h \ + /usr/include/bits/types/struct_tm.h \ + /usr/include/bits/types/time_t.h \ + /usr/include/bits/types/timer_t.h \ + /usr/include/bits/types/wint_t.h \ + /usr/include/bits/typesizes.h \ + /usr/include/bits/uintn-identity.h \ + /usr/include/bits/unistd_ext.h \ + /usr/include/bits/wchar.h \ + /usr/include/bits/wctype-wchar.h \ + /usr/include/bits/wordsize.h \ + /usr/include/c++/15/algorithm \ + /usr/include/c++/15/array \ + /usr/include/c++/15/atomic \ + /usr/include/c++/15/backward/auto_ptr.h \ + /usr/include/c++/15/backward/binders.h \ + /usr/include/c++/15/bit \ + /usr/include/c++/15/bits/algorithmfwd.h \ + /usr/include/c++/15/bits/align.h \ + /usr/include/c++/15/bits/alloc_traits.h \ + /usr/include/c++/15/bits/allocated_ptr.h \ + /usr/include/c++/15/bits/allocator.h \ + /usr/include/c++/15/bits/atomic_base.h \ + /usr/include/c++/15/bits/atomic_futex.h \ + /usr/include/c++/15/bits/atomic_lockfree_defines.h \ + /usr/include/c++/15/bits/atomic_timed_wait.h \ + /usr/include/c++/15/bits/atomic_wait.h \ + /usr/include/c++/15/bits/basic_ios.h \ + /usr/include/c++/15/bits/basic_ios.tcc \ + /usr/include/c++/15/bits/basic_string.h \ + /usr/include/c++/15/bits/basic_string.tcc \ + /usr/include/c++/15/bits/char_traits.h \ + /usr/include/c++/15/bits/charconv.h \ + /usr/include/c++/15/bits/chrono.h \ + /usr/include/c++/15/bits/chrono_io.h \ + /usr/include/c++/15/bits/codecvt.h \ + /usr/include/c++/15/bits/concept_check.h \ + /usr/include/c++/15/bits/cpp_type_traits.h \ + /usr/include/c++/15/bits/cxxabi_forced.h \ + /usr/include/c++/15/bits/cxxabi_init_exception.h \ + /usr/include/c++/15/bits/enable_special_members.h \ + /usr/include/c++/15/bits/erase_if.h \ + /usr/include/c++/15/bits/exception.h \ + /usr/include/c++/15/bits/exception_defines.h \ + /usr/include/c++/15/bits/exception_ptr.h \ + /usr/include/c++/15/bits/functexcept.h \ + /usr/include/c++/15/bits/functional_hash.h \ + /usr/include/c++/15/bits/hash_bytes.h \ + /usr/include/c++/15/bits/hashtable.h \ + /usr/include/c++/15/bits/hashtable_policy.h \ + /usr/include/c++/15/bits/invoke.h \ + /usr/include/c++/15/bits/ios_base.h \ + /usr/include/c++/15/bits/istream.tcc \ + /usr/include/c++/15/bits/iterator_concepts.h \ + /usr/include/c++/15/bits/list.tcc \ + /usr/include/c++/15/bits/locale_classes.h \ + /usr/include/c++/15/bits/locale_classes.tcc \ + /usr/include/c++/15/bits/locale_conv.h \ + /usr/include/c++/15/bits/locale_facets.h \ + /usr/include/c++/15/bits/locale_facets.tcc \ + /usr/include/c++/15/bits/locale_facets_nonio.h \ + /usr/include/c++/15/bits/locale_facets_nonio.tcc \ + /usr/include/c++/15/bits/localefwd.h \ + /usr/include/c++/15/bits/max_size_type.h \ + /usr/include/c++/15/bits/memory_resource.h \ + /usr/include/c++/15/bits/memoryfwd.h \ + /usr/include/c++/15/bits/move.h \ + /usr/include/c++/15/bits/nested_exception.h \ + /usr/include/c++/15/bits/new_allocator.h \ + /usr/include/c++/15/bits/node_handle.h \ + /usr/include/c++/15/bits/ostream.h \ + /usr/include/c++/15/bits/ostream.tcc \ + /usr/include/c++/15/bits/ostream_insert.h \ + /usr/include/c++/15/bits/parse_numbers.h \ + /usr/include/c++/15/bits/postypes.h \ + /usr/include/c++/15/bits/predefined_ops.h \ + /usr/include/c++/15/bits/ptr_traits.h \ + /usr/include/c++/15/bits/quoted_string.h \ + /usr/include/c++/15/bits/random.h \ + /usr/include/c++/15/bits/random.tcc \ + /usr/include/c++/15/bits/range_access.h \ + /usr/include/c++/15/bits/ranges_algo.h \ + /usr/include/c++/15/bits/ranges_algobase.h \ + /usr/include/c++/15/bits/ranges_base.h \ + /usr/include/c++/15/bits/ranges_cmp.h \ + /usr/include/c++/15/bits/ranges_uninitialized.h \ + /usr/include/c++/15/bits/ranges_util.h \ + /usr/include/c++/15/bits/refwrap.h \ + /usr/include/c++/15/bits/requires_hosted.h \ + /usr/include/c++/15/bits/semaphore_base.h \ + /usr/include/c++/15/bits/shared_ptr.h \ + /usr/include/c++/15/bits/shared_ptr_atomic.h \ + /usr/include/c++/15/bits/shared_ptr_base.h \ + /usr/include/c++/15/bits/specfun.h \ + /usr/include/c++/15/bits/sstream.tcc \ + /usr/include/c++/15/bits/std_abs.h \ + /usr/include/c++/15/bits/std_function.h \ + /usr/include/c++/15/bits/std_mutex.h \ + /usr/include/c++/15/bits/std_thread.h \ + /usr/include/c++/15/bits/stl_algo.h \ + /usr/include/c++/15/bits/stl_algobase.h \ + /usr/include/c++/15/bits/stl_bvector.h \ + /usr/include/c++/15/bits/stl_construct.h \ + /usr/include/c++/15/bits/stl_function.h \ + /usr/include/c++/15/bits/stl_heap.h \ + /usr/include/c++/15/bits/stl_iterator.h \ + /usr/include/c++/15/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/15/bits/stl_iterator_base_types.h \ + /usr/include/c++/15/bits/stl_list.h \ + /usr/include/c++/15/bits/stl_map.h \ + /usr/include/c++/15/bits/stl_multimap.h \ + /usr/include/c++/15/bits/stl_multiset.h \ + /usr/include/c++/15/bits/stl_numeric.h \ + /usr/include/c++/15/bits/stl_pair.h \ + /usr/include/c++/15/bits/stl_raw_storage_iter.h \ + /usr/include/c++/15/bits/stl_relops.h \ + /usr/include/c++/15/bits/stl_set.h \ + /usr/include/c++/15/bits/stl_tempbuf.h \ + /usr/include/c++/15/bits/stl_tree.h \ + /usr/include/c++/15/bits/stl_uninitialized.h \ + /usr/include/c++/15/bits/stl_vector.h \ + /usr/include/c++/15/bits/stream_iterator.h \ + /usr/include/c++/15/bits/streambuf.tcc \ + /usr/include/c++/15/bits/streambuf_iterator.h \ + /usr/include/c++/15/bits/string_view.tcc \ + /usr/include/c++/15/bits/stringfwd.h \ + /usr/include/c++/15/bits/this_thread_sleep.h \ + /usr/include/c++/15/bits/uniform_int_dist.h \ + /usr/include/c++/15/bits/unique_lock.h \ + /usr/include/c++/15/bits/unique_ptr.h \ + /usr/include/c++/15/bits/unordered_map.h \ + /usr/include/c++/15/bits/unordered_set.h \ + /usr/include/c++/15/bits/uses_allocator.h \ + /usr/include/c++/15/bits/uses_allocator_args.h \ + /usr/include/c++/15/bits/utility.h \ + /usr/include/c++/15/bits/vector.tcc \ + /usr/include/c++/15/bits/version.h \ + /usr/include/c++/15/cassert \ + /usr/include/c++/15/cctype \ + /usr/include/c++/15/cerrno \ + /usr/include/c++/15/charconv \ + /usr/include/c++/15/chrono \ + /usr/include/c++/15/climits \ + /usr/include/c++/15/clocale \ + /usr/include/c++/15/cmath \ + /usr/include/c++/15/compare \ + /usr/include/c++/15/concepts \ + /usr/include/c++/15/condition_variable \ + /usr/include/c++/15/cstddef \ + /usr/include/c++/15/cstdint \ + /usr/include/c++/15/cstdio \ + /usr/include/c++/15/cstdlib \ + /usr/include/c++/15/cstring \ + /usr/include/c++/15/ctime \ + /usr/include/c++/15/cwchar \ + /usr/include/c++/15/cwctype \ + /usr/include/c++/15/debug/assertions.h \ + /usr/include/c++/15/debug/debug.h \ + /usr/include/c++/15/exception \ + /usr/include/c++/15/experimental/source_location \ + /usr/include/c++/15/ext/aligned_buffer.h \ + /usr/include/c++/15/ext/alloc_traits.h \ + /usr/include/c++/15/ext/atomicity.h \ + /usr/include/c++/15/ext/concurrence.h \ + /usr/include/c++/15/ext/numeric_traits.h \ + /usr/include/c++/15/ext/string_conversions.h \ + /usr/include/c++/15/ext/type_traits.h \ + /usr/include/c++/15/filesystem \ + /usr/include/c++/15/format \ + /usr/include/c++/15/functional \ + /usr/include/c++/15/future \ + /usr/include/c++/15/initializer_list \ + /usr/include/c++/15/iomanip \ + /usr/include/c++/15/ios \ + /usr/include/c++/15/iosfwd \ + /usr/include/c++/15/istream \ + /usr/include/c++/15/iterator \ + /usr/include/c++/15/limits \ + /usr/include/c++/15/list \ + /usr/include/c++/15/locale \ + /usr/include/c++/15/map \ + /usr/include/c++/15/memory \ + /usr/include/c++/15/memory_resource \ + /usr/include/c++/15/mutex \ + /usr/include/c++/15/new \ + /usr/include/c++/15/numeric \ + /usr/include/c++/15/optional \ + /usr/include/c++/15/ostream \ + /usr/include/c++/15/pstl/execution_defs.h \ + /usr/include/c++/15/pstl/glue_numeric_defs.h \ + /usr/include/c++/15/pstl/pstl_config.h \ + /usr/include/c++/15/random \ + /usr/include/c++/15/ratio \ + /usr/include/c++/15/semaphore \ + /usr/include/c++/15/set \ + /usr/include/c++/15/shared_mutex \ + /usr/include/c++/15/source_location \ + /usr/include/c++/15/sstream \ + /usr/include/c++/15/stdexcept \ + /usr/include/c++/15/stdlib.h \ + /usr/include/c++/15/stop_token \ + /usr/include/c++/15/streambuf \ + /usr/include/c++/15/string \ + /usr/include/c++/15/string_view \ + /usr/include/c++/15/system_error \ + /usr/include/c++/15/tr1/bessel_function.tcc \ + /usr/include/c++/15/tr1/beta_function.tcc \ + /usr/include/c++/15/tr1/ell_integral.tcc \ + /usr/include/c++/15/tr1/exp_integral.tcc \ + /usr/include/c++/15/tr1/gamma.tcc \ + /usr/include/c++/15/tr1/hypergeometric.tcc \ + /usr/include/c++/15/tr1/legendre_function.tcc \ + /usr/include/c++/15/tr1/modified_bessel_func.tcc \ + /usr/include/c++/15/tr1/poly_hermite.tcc \ + /usr/include/c++/15/tr1/poly_laguerre.tcc \ + /usr/include/c++/15/tr1/riemann_zeta.tcc \ + /usr/include/c++/15/tr1/special_function_util.h \ + /usr/include/c++/15/tuple \ + /usr/include/c++/15/type_traits \ + /usr/include/c++/15/typeinfo \ + /usr/include/c++/15/unordered_map \ + /usr/include/c++/15/unordered_set \ + /usr/include/c++/15/utility \ + /usr/include/c++/15/variant \ + /usr/include/c++/15/vector \ + /usr/include/c++/15/version \ + /usr/include/c++/15/x86_64-redhat-linux/bits/atomic_word.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/c++allocator.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/c++config.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/c++locale.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/cpu_defines.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/ctype_base.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/ctype_inline.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/error_constants.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/gthr-default.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/gthr.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/messages_members.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/opt_random.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/os_defines.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/time_members.h \ + /usr/include/ctype.h \ + /usr/include/endian.h \ + /usr/include/errno.h \ + /usr/include/features-time64.h \ + /usr/include/features.h \ + /usr/include/gnu/stubs-64.h \ + /usr/include/gnu/stubs.h \ + /usr/include/libintl.h \ + /usr/include/linux/close_range.h \ + /usr/include/linux/errno.h \ + /usr/include/linux/posix_types.h \ + /usr/include/linux/sched/types.h \ + /usr/include/linux/stddef.h \ + /usr/include/linux/types.h \ + /usr/include/locale.h \ + /usr/include/pthread.h \ + /usr/include/qt6/QtCore/QAbstractItemModel \ + /usr/include/qt6/QtCore/QDeadlineTimer \ + /usr/include/qt6/QtCore/QHash \ + /usr/include/qt6/QtCore/QList \ + /usr/include/qt6/QtCore/QMap \ + /usr/include/qt6/QtCore/QMutex \ + /usr/include/qt6/QtCore/QObject \ + /usr/include/qt6/QtCore/QString \ + /usr/include/qt6/QtCore/QStringList \ + /usr/include/qt6/QtCore/QVariant \ + /usr/include/qt6/QtCore/QtCore \ + /usr/include/qt6/QtCore/QtCoreDepends \ + /usr/include/qt6/QtCore/q17memory.h \ + /usr/include/qt6/QtCore/q20algorithm.h \ + /usr/include/qt6/QtCore/q20chrono.h \ + /usr/include/qt6/QtCore/q20functional.h \ + /usr/include/qt6/QtCore/q20iterator.h \ + /usr/include/qt6/QtCore/q20map.h \ + /usr/include/qt6/QtCore/q20memory.h \ + /usr/include/qt6/QtCore/q20type_traits.h \ + /usr/include/qt6/QtCore/q20utility.h \ + /usr/include/qt6/QtCore/q20vector.h \ + /usr/include/qt6/QtCore/q23functional.h \ + /usr/include/qt6/QtCore/q23type_traits.h \ + /usr/include/qt6/QtCore/q23utility.h \ + /usr/include/qt6/QtCore/q26numeric.h \ + /usr/include/qt6/QtCore/qabstractanimation.h \ + /usr/include/qt6/QtCore/qabstracteventdispatcher.h \ + /usr/include/qt6/QtCore/qabstractitemmodel.h \ + /usr/include/qt6/QtCore/qabstractnativeeventfilter.h \ + /usr/include/qt6/QtCore/qabstractproxymodel.h \ + /usr/include/qt6/QtCore/qalgorithms.h \ + /usr/include/qt6/QtCore/qalloc.h \ + /usr/include/qt6/QtCore/qanimationgroup.h \ + /usr/include/qt6/QtCore/qanystringview.h \ + /usr/include/qt6/QtCore/qapplicationstatic.h \ + /usr/include/qt6/QtCore/qarraydata.h \ + /usr/include/qt6/QtCore/qarraydataops.h \ + /usr/include/qt6/QtCore/qarraydatapointer.h \ + /usr/include/qt6/QtCore/qassert.h \ + /usr/include/qt6/QtCore/qassociativeiterable.h \ + /usr/include/qt6/QtCore/qatomic.h \ + /usr/include/qt6/QtCore/qatomic_cxx11.h \ + /usr/include/qt6/QtCore/qatomicscopedvaluerollback.h \ + /usr/include/qt6/QtCore/qbasicatomic.h \ + /usr/include/qt6/QtCore/qbasictimer.h \ + /usr/include/qt6/QtCore/qbindingstorage.h \ + /usr/include/qt6/QtCore/qbitarray.h \ + /usr/include/qt6/QtCore/qbuffer.h \ + /usr/include/qt6/QtCore/qbytearray.h \ + /usr/include/qt6/QtCore/qbytearrayalgorithms.h \ + /usr/include/qt6/QtCore/qbytearraylist.h \ + /usr/include/qt6/QtCore/qbytearraymatcher.h \ + /usr/include/qt6/QtCore/qbytearrayview.h \ + /usr/include/qt6/QtCore/qcache.h \ + /usr/include/qt6/QtCore/qcalendar.h \ + /usr/include/qt6/QtCore/qcborarray.h \ + /usr/include/qt6/QtCore/qcborcommon.h \ + /usr/include/qt6/QtCore/qcbormap.h \ + /usr/include/qt6/QtCore/qcborstream.h \ + /usr/include/qt6/QtCore/qcborstreamreader.h \ + /usr/include/qt6/QtCore/qcborstreamwriter.h \ + /usr/include/qt6/QtCore/qcborvalue.h \ + /usr/include/qt6/QtCore/qchar.h \ + /usr/include/qt6/QtCore/qcheckedint_impl.h \ + /usr/include/qt6/QtCore/qchronotimer.h \ + /usr/include/qt6/QtCore/qcollator.h \ + /usr/include/qt6/QtCore/qcommandlineoption.h \ + /usr/include/qt6/QtCore/qcommandlineparser.h \ + /usr/include/qt6/QtCore/qcompare.h \ + /usr/include/qt6/QtCore/qcompare_impl.h \ + /usr/include/qt6/QtCore/qcomparehelpers.h \ + /usr/include/qt6/QtCore/qcompilerdetection.h \ + /usr/include/qt6/QtCore/qconcatenatetablesproxymodel.h \ + /usr/include/qt6/QtCore/qconfig-64.h \ + /usr/include/qt6/QtCore/qconfig.h \ + /usr/include/qt6/QtCore/qconstructormacros.h \ + /usr/include/qt6/QtCore/qcontainerfwd.h \ + /usr/include/qt6/QtCore/qcontainerinfo.h \ + /usr/include/qt6/QtCore/qcontainertools_impl.h \ + /usr/include/qt6/QtCore/qcontiguouscache.h \ + /usr/include/qt6/QtCore/qcoreapplication.h \ + /usr/include/qt6/QtCore/qcoreapplication_platform.h \ + /usr/include/qt6/QtCore/qcoreevent.h \ + /usr/include/qt6/QtCore/qcryptographichash.h \ + /usr/include/qt6/QtCore/qdarwinhelpers.h \ + /usr/include/qt6/QtCore/qdatastream.h \ + /usr/include/qt6/QtCore/qdatetime.h \ + /usr/include/qt6/QtCore/qdeadlinetimer.h \ + /usr/include/qt6/QtCore/qdebug.h \ + /usr/include/qt6/QtCore/qdir.h \ + /usr/include/qt6/QtCore/qdiriterator.h \ + /usr/include/qt6/QtCore/qdirlisting.h \ + /usr/include/qt6/QtCore/qeasingcurve.h \ + /usr/include/qt6/QtCore/qelapsedtimer.h \ + /usr/include/qt6/QtCore/qendian.h \ + /usr/include/qt6/QtCore/qeventloop.h \ + /usr/include/qt6/QtCore/qexception.h \ + /usr/include/qt6/QtCore/qexceptionhandling.h \ + /usr/include/qt6/QtCore/qfactoryinterface.h \ + /usr/include/qt6/QtCore/qfile.h \ + /usr/include/qt6/QtCore/qfiledevice.h \ + /usr/include/qt6/QtCore/qfileinfo.h \ + /usr/include/qt6/QtCore/qfileselector.h \ + /usr/include/qt6/QtCore/qfilesystemwatcher.h \ + /usr/include/qt6/QtCore/qflags.h \ + /usr/include/qt6/QtCore/qfloat16.h \ + /usr/include/qt6/QtCore/qforeach.h \ + /usr/include/qt6/QtCore/qfunctionaltools_impl.h \ + /usr/include/qt6/QtCore/qfunctionpointer.h \ + /usr/include/qt6/QtCore/qfuture.h \ + /usr/include/qt6/QtCore/qfuture_impl.h \ + /usr/include/qt6/QtCore/qfutureinterface.h \ + /usr/include/qt6/QtCore/qfuturesynchronizer.h \ + /usr/include/qt6/QtCore/qfuturewatcher.h \ + /usr/include/qt6/QtCore/qgenericatomic.h \ + /usr/include/qt6/QtCore/qglobal.h \ + /usr/include/qt6/QtCore/qglobalstatic.h \ + /usr/include/qt6/QtCore/qhash.h \ + /usr/include/qt6/QtCore/qhashfunctions.h \ + /usr/include/qt6/QtCore/qidentityproxymodel.h \ + /usr/include/qt6/QtCore/qiodevice.h \ + /usr/include/qt6/QtCore/qiodevicebase.h \ + /usr/include/qt6/QtCore/qitemselectionmodel.h \ + /usr/include/qt6/QtCore/qiterable.h \ + /usr/include/qt6/QtCore/qiterator.h \ + /usr/include/qt6/QtCore/qjsonarray.h \ + /usr/include/qt6/QtCore/qjsondocument.h \ + /usr/include/qt6/QtCore/qjsonobject.h \ + /usr/include/qt6/QtCore/qjsonparseerror.h \ + /usr/include/qt6/QtCore/qjsonvalue.h \ + /usr/include/qt6/QtCore/qlatin1stringmatcher.h \ + /usr/include/qt6/QtCore/qlatin1stringview.h \ + /usr/include/qt6/QtCore/qlibrary.h \ + /usr/include/qt6/QtCore/qlibraryinfo.h \ + /usr/include/qt6/QtCore/qline.h \ + /usr/include/qt6/QtCore/qlist.h \ + /usr/include/qt6/QtCore/qlocale.h \ + /usr/include/qt6/QtCore/qlockfile.h \ + /usr/include/qt6/QtCore/qlogging.h \ + /usr/include/qt6/QtCore/qloggingcategory.h \ + /usr/include/qt6/QtCore/qmalloc.h \ + /usr/include/qt6/QtCore/qmap.h \ + /usr/include/qt6/QtCore/qmargins.h \ + /usr/include/qt6/QtCore/qmath.h \ + /usr/include/qt6/QtCore/qmessageauthenticationcode.h \ + /usr/include/qt6/QtCore/qmetacontainer.h \ + /usr/include/qt6/QtCore/qmetaobject.h \ + /usr/include/qt6/QtCore/qmetatype.h \ + /usr/include/qt6/QtCore/qmimedata.h \ + /usr/include/qt6/QtCore/qmimedatabase.h \ + /usr/include/qt6/QtCore/qmimetype.h \ + /usr/include/qt6/QtCore/qminmax.h \ + /usr/include/qt6/QtCore/qmutex.h \ + /usr/include/qt6/QtCore/qnamespace.h \ + /usr/include/qt6/QtCore/qnativeinterface.h \ + /usr/include/qt6/QtCore/qnumeric.h \ + /usr/include/qt6/QtCore/qobject.h \ + /usr/include/qt6/QtCore/qobject_impl.h \ + /usr/include/qt6/QtCore/qobjectcleanuphandler.h \ + /usr/include/qt6/QtCore/qobjectdefs.h \ + /usr/include/qt6/QtCore/qobjectdefs_impl.h \ + /usr/include/qt6/QtCore/qoperatingsystemversion.h \ + /usr/include/qt6/QtCore/qoverload.h \ + /usr/include/qt6/QtCore/qpair.h \ + /usr/include/qt6/QtCore/qparallelanimationgroup.h \ + /usr/include/qt6/QtCore/qpauseanimation.h \ + /usr/include/qt6/QtCore/qpermissions.h \ + /usr/include/qt6/QtCore/qplugin.h \ + /usr/include/qt6/QtCore/qpluginloader.h \ + /usr/include/qt6/QtCore/qpoint.h \ + /usr/include/qt6/QtCore/qpointer.h \ + /usr/include/qt6/QtCore/qprocess.h \ + /usr/include/qt6/QtCore/qprocessordetection.h \ + /usr/include/qt6/QtCore/qpromise.h \ + /usr/include/qt6/QtCore/qproperty.h \ + /usr/include/qt6/QtCore/qpropertyanimation.h \ + /usr/include/qt6/QtCore/qpropertyprivate.h \ + /usr/include/qt6/QtCore/qqueue.h \ + /usr/include/qt6/QtCore/qrandom.h \ + /usr/include/qt6/QtCore/qrangemodel.h \ + /usr/include/qt6/QtCore/qrangemodel_impl.h \ + /usr/include/qt6/QtCore/qreadwritelock.h \ + /usr/include/qt6/QtCore/qrect.h \ + /usr/include/qt6/QtCore/qrefcount.h \ + /usr/include/qt6/QtCore/qregularexpression.h \ + /usr/include/qt6/QtCore/qresource.h \ + /usr/include/qt6/QtCore/qresultstore.h \ + /usr/include/qt6/QtCore/qrunnable.h \ + /usr/include/qt6/QtCore/qsavefile.h \ + /usr/include/qt6/QtCore/qscopedpointer.h \ + /usr/include/qt6/QtCore/qscopedvaluerollback.h \ + /usr/include/qt6/QtCore/qscopeguard.h \ + /usr/include/qt6/QtCore/qsemaphore.h \ + /usr/include/qt6/QtCore/qsequentialanimationgroup.h \ + /usr/include/qt6/QtCore/qsequentialiterable.h \ + /usr/include/qt6/QtCore/qset.h \ + /usr/include/qt6/QtCore/qsettings.h \ + /usr/include/qt6/QtCore/qshareddata.h \ + /usr/include/qt6/QtCore/qshareddata_impl.h \ + /usr/include/qt6/QtCore/qsharedmemory.h \ + /usr/include/qt6/QtCore/qsharedpointer.h \ + /usr/include/qt6/QtCore/qsharedpointer_impl.h \ + /usr/include/qt6/QtCore/qsignalmapper.h \ + /usr/include/qt6/QtCore/qsimd.h \ + /usr/include/qt6/QtCore/qsize.h \ + /usr/include/qt6/QtCore/qsocketnotifier.h \ + /usr/include/qt6/QtCore/qsortfilterproxymodel.h \ + /usr/include/qt6/QtCore/qspan.h \ + /usr/include/qt6/QtCore/qstack.h \ + /usr/include/qt6/QtCore/qstandardpaths.h \ + /usr/include/qt6/QtCore/qstaticlatin1stringmatcher.h \ + /usr/include/qt6/QtCore/qstdlibdetection.h \ + /usr/include/qt6/QtCore/qstorageinfo.h \ + /usr/include/qt6/QtCore/qstring.h \ + /usr/include/qt6/QtCore/qstringalgorithms.h \ + /usr/include/qt6/QtCore/qstringbuilder.h \ + /usr/include/qt6/QtCore/qstringconverter.h \ + /usr/include/qt6/QtCore/qstringconverter_base.h \ + /usr/include/qt6/QtCore/qstringfwd.h \ + /usr/include/qt6/QtCore/qstringlist.h \ + /usr/include/qt6/QtCore/qstringlistmodel.h \ + /usr/include/qt6/QtCore/qstringliteral.h \ + /usr/include/qt6/QtCore/qstringmatcher.h \ + /usr/include/qt6/QtCore/qstringtokenizer.h \ + /usr/include/qt6/QtCore/qstringview.h \ + /usr/include/qt6/QtCore/qswap.h \ + /usr/include/qt6/QtCore/qsysinfo.h \ + /usr/include/qt6/QtCore/qsystemdetection.h \ + /usr/include/qt6/QtCore/qsystemsemaphore.h \ + /usr/include/qt6/QtCore/qtaggedpointer.h \ + /usr/include/qt6/QtCore/qtclasshelpermacros.h \ + /usr/include/qt6/QtCore/qtconfiginclude.h \ + /usr/include/qt6/QtCore/qtconfigmacros.h \ + /usr/include/qt6/QtCore/qtcore-config.h \ + /usr/include/qt6/QtCore/qtcoreexports.h \ + /usr/include/qt6/QtCore/qtcoreglobal.h \ + /usr/include/qt6/QtCore/qtcoreversion.h \ + /usr/include/qt6/QtCore/qtdeprecationdefinitions.h \ + /usr/include/qt6/QtCore/qtdeprecationmarkers.h \ + /usr/include/qt6/QtCore/qtemporarydir.h \ + /usr/include/qt6/QtCore/qtemporaryfile.h \ + /usr/include/qt6/QtCore/qtenvironmentvariables.h \ + /usr/include/qt6/QtCore/qtestsupport_core.h \ + /usr/include/qt6/QtCore/qtextboundaryfinder.h \ + /usr/include/qt6/QtCore/qtextstream.h \ + /usr/include/qt6/QtCore/qtformat_impl.h \ + /usr/include/qt6/QtCore/qthread.h \ + /usr/include/qt6/QtCore/qthreadpool.h \ + /usr/include/qt6/QtCore/qthreadstorage.h \ + /usr/include/qt6/QtCore/qtimeline.h \ + /usr/include/qt6/QtCore/qtimer.h \ + /usr/include/qt6/QtCore/qtimezone.h \ + /usr/include/qt6/QtCore/qtipccommon.h \ + /usr/include/qt6/QtCore/qtmetamacros.h \ + /usr/include/qt6/QtCore/qtmocconstants.h \ + /usr/include/qt6/QtCore/qtnoop.h \ + /usr/include/qt6/QtCore/qtpreprocessorsupport.h \ + /usr/include/qt6/QtCore/qtranslator.h \ + /usr/include/qt6/QtCore/qtransposeproxymodel.h \ + /usr/include/qt6/QtCore/qtresource.h \ + /usr/include/qt6/QtCore/qtsan_impl.h \ + /usr/include/qt6/QtCore/qtsymbolmacros.h \ + /usr/include/qt6/QtCore/qttranslation.h \ + /usr/include/qt6/QtCore/qttypetraits.h \ + /usr/include/qt6/QtCore/qtversion.h \ + /usr/include/qt6/QtCore/qtversionchecks.h \ + /usr/include/qt6/QtCore/qtypeinfo.h \ + /usr/include/qt6/QtCore/qtyperevision.h \ + /usr/include/qt6/QtCore/qtypes.h \ + /usr/include/qt6/QtCore/qurl.h \ + /usr/include/qt6/QtCore/qurlquery.h \ + /usr/include/qt6/QtCore/qutf8stringview.h \ + /usr/include/qt6/QtCore/quuid.h \ + /usr/include/qt6/QtCore/qvariant.h \ + /usr/include/qt6/QtCore/qvariantanimation.h \ + /usr/include/qt6/QtCore/qvarianthash.h \ + /usr/include/qt6/QtCore/qvariantlist.h \ + /usr/include/qt6/QtCore/qvariantmap.h \ + /usr/include/qt6/QtCore/qvarlengtharray.h \ + /usr/include/qt6/QtCore/qvector.h \ + /usr/include/qt6/QtCore/qversionnumber.h \ + /usr/include/qt6/QtCore/qversiontagging.h \ + /usr/include/qt6/QtCore/qwaitcondition.h \ + /usr/include/qt6/QtCore/qwineventnotifier.h \ + /usr/include/qt6/QtCore/qxmlstream.h \ + /usr/include/qt6/QtCore/qxpfunctional.h \ + /usr/include/qt6/QtCore/qxptype_traits.h \ + /usr/include/qt6/QtCore/qyieldcpu.h \ + /usr/include/qt6/QtTest/QtTest \ + /usr/include/qt6/QtTest/QtTestDepends \ + /usr/include/qt6/QtTest/qabstractitemmodeltester.h \ + /usr/include/qt6/QtTest/qbenchmark.h \ + /usr/include/qt6/QtTest/qbenchmarkmetric.h \ + /usr/include/qt6/QtTest/qsignalspy.h \ + /usr/include/qt6/QtTest/qtest.h \ + /usr/include/qt6/QtTest/qtestassert.h \ + /usr/include/qt6/QtTest/qtestcase.h \ + /usr/include/qt6/QtTest/qtestdata.h \ + /usr/include/qt6/QtTest/qtesteventloop.h \ + /usr/include/qt6/QtTest/qtestsystem.h \ + /usr/include/qt6/QtTest/qtesttostring.h \ + /usr/include/qt6/QtTest/qttestexports.h \ + /usr/include/qt6/QtTest/qttestglobal.h \ + /usr/include/qt6/QtTest/qttestlib-config.h \ + /usr/include/qt6/QtTest/qttestversion.h \ + /usr/include/sched.h \ + /usr/include/semaphore.h \ + /usr/include/stdc-predef.h \ + /usr/include/stdio.h \ + /usr/include/string.h \ + /usr/include/strings.h \ + /usr/include/sys/cdefs.h \ + /usr/include/sys/select.h \ + /usr/include/sys/single_threaded.h \ + /usr/include/sys/syscall.h \ + /usr/include/sys/time.h \ + /usr/include/sys/types.h \ + /usr/include/syscall.h \ + /usr/include/time.h \ + /usr/include/unistd.h \ + /usr/include/wchar.h \ + /usr/include/wctype.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/adxintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/amxavx512intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/amxbf16intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/amxcomplexintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/amxfp16intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/amxfp8intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/amxint8intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/amxmovrsintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/amxtf32intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/amxtileintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/amxtransposeintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2-512bf16intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2-512convertintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2-512mediaintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2-512minmaxintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2-512satcvtintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2bf16intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2convertintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2copyintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2mediaintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2minmaxintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2satcvtintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx2intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512bf16intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512bf16vlintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512bitalgintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512bitalgvlintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512bwintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512cdintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512dqintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512fintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512fp16intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512fp16vlintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512ifmaintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512ifmavlintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vbmi2intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vbmi2vlintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vbmiintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vbmivlintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vlbwintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vldqintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vlintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vnniintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vnnivlintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vp2intersectintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vp2intersectvlintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vpopcntdqintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vpopcntdqvlintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avxifmaintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avxintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avxneconvertintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avxvnniint16intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avxvnniint8intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avxvnniintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/bmi2intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/bmiintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/cetintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/cldemoteintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/clflushoptintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/clwbintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/clzerointrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/cmpccxaddintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/emmintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/enqcmdintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/f16cintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/fmaintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/fxsrintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/gfniintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/hresetintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/ia32intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/immintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/keylockerintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/limits.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/lwpintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/lzcntintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/mm_malloc.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/mmintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/movdirintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/movrsintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/mwaitintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/mwaitxintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/pconfigintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/pkuintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/pmmintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/popcntintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/prfchiintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/prfchwintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/raointintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/rdseedintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/rtmintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/serializeintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/sgxintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/sha512intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/shaintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/sm3intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/sm4intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/smmintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/stdarg.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/stdbool.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/stddef.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/stdint.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/syslimits.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/tbmintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/tmmintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/tsxldtrkintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/uintrintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/usermsrintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/vaesintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/vpclmulqdqintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/waitpkgintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/wbnoinvdintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/wmmintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/x86gprintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/xmmintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/xsavecintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/xsaveintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/xsaveoptintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/xsavesintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/xtestintrin.h \ + /usr/lib64/cmake/Qt6/Qt6Config.cmake \ + /usr/lib64/cmake/Qt6/Qt6ConfigExtras.cmake \ + /usr/lib64/cmake/Qt6/Qt6ConfigVersion.cmake \ + /usr/lib64/cmake/Qt6/Qt6ConfigVersionImpl.cmake \ + /usr/lib64/cmake/Qt6/Qt6Dependencies.cmake \ + /usr/lib64/cmake/Qt6/Qt6Targets.cmake \ + /usr/lib64/cmake/Qt6/Qt6VersionlessAliasTargets.cmake \ + /usr/lib64/cmake/Qt6/QtFeature.cmake \ + /usr/lib64/cmake/Qt6/QtFeatureCommon.cmake \ + /usr/lib64/cmake/Qt6/QtInstallPaths.cmake \ + /usr/lib64/cmake/Qt6/QtPublicAndroidHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicAppleHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicCMakeEarlyPolicyHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicCMakeHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicCMakeVersionHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicDependencyHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicExternalProjectHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicFinalizerHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicFindPackageHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicGitHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicPluginHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicPluginHelpers_v2.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomAttributionHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomBuildToolHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomCommonGenerationHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomCpeHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomCycloneDXHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomDepHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomDocumentNamespaceHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomExternalReferenceHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomFileHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomGenerationCycloneDXHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomGenerationHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomLicenseHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomOpsHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomPurlHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomPythonHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomQtEntityHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomRelationshipHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomSystemDepHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicTargetHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicTestHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicToolHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicWalkLibsHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicWindowsHelpers.cmake \ + /usr/lib64/cmake/Qt6Test/Qt6TestAdditionalTargetInfo.cmake \ + /usr/lib64/cmake/Qt6Test/Qt6TestConfig.cmake \ + /usr/lib64/cmake/Qt6Test/Qt6TestConfigVersion.cmake \ + /usr/lib64/cmake/Qt6Test/Qt6TestConfigVersionImpl.cmake \ + /usr/lib64/cmake/Qt6Test/Qt6TestDependencies.cmake \ + /usr/lib64/cmake/Qt6Test/Qt6TestTargets-relwithdebinfo.cmake \ + /usr/lib64/cmake/Qt6Test/Qt6TestTargets.cmake \ + /usr/lib64/cmake/Qt6Test/Qt6TestVersionlessAliasTargets.cmake \ + /usr/lib64/cmake/Qt6Test/QtTestProperties.cmake \ + /usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake \ + /usr/share/cmake/Modules/CheckCXXCompilerFlag.cmake \ + /usr/bin/cmake diff --git a/build-linux/tests/test_platform_session_autogen/include/test_platform_session.moc b/build-linux/tests/test_platform_session_autogen/include/test_platform_session.moc new file mode 100644 index 00000000..647adce4 --- /dev/null +++ b/build-linux/tests/test_platform_session_autogen/include/test_platform_session.moc @@ -0,0 +1,124 @@ +/**************************************************************************** +** Meta object code from reading C++ file 'test_platform_session.cpp' +** +** Created by: The Qt Meta Object Compiler version 69 (Qt 6.10.3) +** +** WARNING! All changes made in this file will be lost! +*****************************************************************************/ + +#include + +#include + +#include + + +#include +#if !defined(Q_MOC_OUTPUT_REVISION) +#error "The header file 'test_platform_session.cpp' doesn't include ." +#elif Q_MOC_OUTPUT_REVISION != 69 +#error "This file was generated using the moc from 6.10.3. It" +#error "cannot be used with the include files from this version of Qt." +#error "(The moc has changed too much.)" +#endif + +#ifndef Q_CONSTINIT +#define Q_CONSTINIT +#endif + +QT_WARNING_PUSH +QT_WARNING_DISABLE_DEPRECATED +QT_WARNING_DISABLE_GCC("-Wuseless-cast") +namespace { +struct qt_meta_tag_ZN19TestPlatformSessionE_t {}; +} // unnamed namespace + +template <> constexpr inline auto TestPlatformSession::qt_create_metaobjectdata() +{ + namespace QMC = QtMocConstants; + QtMocHelpers::StringRefStorage qt_stringData { + "TestPlatformSession", + "detectsWaylandFromPlatformName", + "", + "detectsWaylandFromSessionType", + "ignoresNonWaylandSessions", + "doesNotForceRasterWidgetsOnWayland", + "usesRasterPreviewFallbackOnWayland" + }; + + QtMocHelpers::UintData qt_methods { + // Slot 'detectsWaylandFromPlatformName' + QtMocHelpers::SlotData(1, 2, QMC::AccessPrivate, QMetaType::Void), + // Slot 'detectsWaylandFromSessionType' + QtMocHelpers::SlotData(3, 2, QMC::AccessPrivate, QMetaType::Void), + // Slot 'ignoresNonWaylandSessions' + QtMocHelpers::SlotData(4, 2, QMC::AccessPrivate, QMetaType::Void), + // Slot 'doesNotForceRasterWidgetsOnWayland' + QtMocHelpers::SlotData(5, 2, QMC::AccessPrivate, QMetaType::Void), + // Slot 'usesRasterPreviewFallbackOnWayland' + QtMocHelpers::SlotData(6, 2, QMC::AccessPrivate, QMetaType::Void), + }; + QtMocHelpers::UintData qt_properties { + }; + QtMocHelpers::UintData qt_enums { + }; + return QtMocHelpers::metaObjectData(QMC::MetaObjectFlag{}, qt_stringData, + qt_methods, qt_properties, qt_enums); +} +Q_CONSTINIT const QMetaObject TestPlatformSession::staticMetaObject = { { + QMetaObject::SuperData::link(), + qt_staticMetaObjectStaticContent.stringdata, + qt_staticMetaObjectStaticContent.data, + qt_static_metacall, + nullptr, + qt_staticMetaObjectRelocatingContent.metaTypes, + nullptr +} }; + +void TestPlatformSession::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) +{ + auto *_t = static_cast(_o); + if (_c == QMetaObject::InvokeMetaMethod) { + switch (_id) { + case 0: _t->detectsWaylandFromPlatformName(); break; + case 1: _t->detectsWaylandFromSessionType(); break; + case 2: _t->ignoresNonWaylandSessions(); break; + case 3: _t->doesNotForceRasterWidgetsOnWayland(); break; + case 4: _t->usesRasterPreviewFallbackOnWayland(); break; + default: ; + } + } + (void)_a; +} + +const QMetaObject *TestPlatformSession::metaObject() const +{ + return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject; +} + +void *TestPlatformSession::qt_metacast(const char *_clname) +{ + if (!_clname) return nullptr; + if (!strcmp(_clname, qt_staticMetaObjectStaticContent.strings)) + return static_cast(this); + return QObject::qt_metacast(_clname); +} + +int TestPlatformSession::qt_metacall(QMetaObject::Call _c, int _id, void **_a) +{ + _id = QObject::qt_metacall(_c, _id, _a); + if (_id < 0) + return _id; + if (_c == QMetaObject::InvokeMetaMethod) { + if (_id < 5) + qt_static_metacall(this, _c, _id, _a); + _id -= 5; + } + if (_c == QMetaObject::RegisterMethodArgumentMetaType) { + if (_id < 5) + *reinterpret_cast(_a[0]) = QMetaType(); + _id -= 5; + } + return _id; +} +QT_WARNING_POP diff --git a/build-linux/tests/test_platform_session_autogen/moc_predefs.h b/build-linux/tests/test_platform_session_autogen/moc_predefs.h new file mode 100644 index 00000000..2c4c79c9 --- /dev/null +++ b/build-linux/tests/test_platform_session_autogen/moc_predefs.h @@ -0,0 +1,502 @@ +#define __DBL_MIN_EXP__ (-1021) +#define __LDBL_MANT_DIG__ 64 +#define __cpp_nontype_template_parameter_auto 201606L +#define __UINT_LEAST16_MAX__ 0xffff +#define __FLT16_HAS_QUIET_NAN__ 1 +#define __ATOMIC_ACQUIRE 2 +#define QT_TESTCASE_BUILDDIR "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests" +#define __FLT128_MAX_10_EXP__ 4932 +#define __FLT_MIN__ 1.17549435082228750796873653722224568e-38F +#define __GCC_IEC_559_COMPLEX 2 +#define __cpp_aggregate_nsdmi 201304L +#define __UINT_LEAST8_TYPE__ unsigned char +#define __SIZEOF_FLOAT80__ 16 +#define __BFLT16_DENORM_MIN__ 9.18354961579912115600575419704879436e-41BF16 +#define __cpp_impl_three_way_comparison 201907L +#define __INTMAX_C(c) c ## L +#define __CHAR_BIT__ 8 +#define __cpp_designated_initializers 201707L +#define __UINT8_MAX__ 0xff +#define __SCHAR_WIDTH__ 8 +#define __WINT_MAX__ 0xffffffffU +#define __FLT32_MIN_EXP__ (-125) +#define __cpp_static_assert 201411L +#define __BFLT16_MIN_10_EXP__ (-37) +#define __cpp_inheriting_constructors 201511L +#define __ORDER_LITTLE_ENDIAN__ 1234 +#define __WCHAR_MAX__ 0x7fffffff +#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_2 1 +#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_4 1 +#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_8 1 +#define __GCC_ATOMIC_CHAR_LOCK_FREE 2 +#define __GCC_IEC_559 2 +#define __FLT32X_DECIMAL_DIG__ 17 +#define TLRENDER_OIIO 1 +#define __FLT_EVAL_METHOD__ 0 +#define __cpp_binary_literals 201304L +#define __FLT64_DECIMAL_DIG__ 17 +#define __cpp_noexcept_function_type 201510L +#define __GCC_ATOMIC_CHAR32_T_LOCK_FREE 2 +#define __cpp_variadic_templates 200704L +#define __UINT_FAST64_MAX__ 0xffffffffffffffffUL +#define __SIG_ATOMIC_TYPE__ int +#define __DBL_MIN_10_EXP__ (-307) +#define __FINITE_MATH_ONLY__ 0 +#define __cpp_variable_templates 201304L +#define __FLT32X_MAX_EXP__ 1024 +#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_1 1 +#define __FLT32_HAS_DENORM__ 1 +#define __UINT_FAST8_MAX__ 0xff +#define __cpp_rvalue_reference 200610L +#define __cpp_nested_namespace_definitions 201411L +#define __DEC64_MAX_EXP__ 385 +#define __INT8_C(c) c +#define __LDBL_HAS_INFINITY__ 1 +#define __INT_LEAST8_WIDTH__ 8 +#define __cpp_variadic_using 201611L +#define __UINT_LEAST64_MAX__ 0xffffffffffffffffUL +#define __INT_LEAST8_MAX__ 0x7f +#define __cpp_attributes 200809L +#define __cpp_capture_star_this 201603L +#define __SHRT_MAX__ 0x7fff +#define __LDBL_MAX__ 1.18973149535723176502126385303097021e+4932L +#define __cpp_impl_coroutine 201902L +#define __FLT64X_MAX_10_EXP__ 4932 +#define __cpp_if_constexpr 201606L +#define __BFLT16_MAX_10_EXP__ 38 +#define __BFLT16_MAX_EXP__ 128 +#define __LDBL_IS_IEC_60559__ 1 +#define QT_NO_DEBUG 1 +#define __FLT64X_HAS_QUIET_NAN__ 1 +#define QT_TESTLIB_LIB 1 +#define TLRENDER_SDL2 1 +#define __UINT_LEAST8_MAX__ 0xff +#define __GCC_ATOMIC_BOOL_LOCK_FREE 2 +#define __FLT128_DENORM_MIN__ 6.47517511943802511092443895822764655e-4966F128 +#define __UINTMAX_TYPE__ long unsigned int +#define __cpp_nsdmi 200809L +#define __BFLT16_DECIMAL_DIG__ 4 +#define __linux 1 +#define __DEC32_EPSILON__ 1E-6DF +#define __FLT_EVAL_METHOD_TS_18661_3__ 0 +#define __UINT32_MAX__ 0xffffffffU +#define __GXX_EXPERIMENTAL_CXX0X__ 1 +#define __DBL_DENORM_MIN__ double(4.94065645841246544176568792868221372e-324L) +#define __FLT128_MIN_EXP__ (-16381) +#define __DEC64X_MAX_EXP__ 6145 +#define __WINT_MIN__ 0U +#define __FLT128_MIN_10_EXP__ (-4931) +#define __FLT32X_IS_IEC_60559__ 1 +#define __INT_LEAST16_WIDTH__ 16 +#define __SCHAR_MAX__ 0x7f +#define __FLT128_MANT_DIG__ 113 +#define __WCHAR_MIN__ (-__WCHAR_MAX__ - 1) +#define __INT64_C(c) c ## L +#define __cpp_impl_destroying_delete 201806L +#define __GCC_ATOMIC_POINTER_LOCK_FREE 2 +#define TLRENDER_JPEG 1 +#define __ATOMIC_SEQ_CST 5 +#define __unix 1 +#define __INT_LEAST64_MAX__ 0x7fffffffffffffffL +#define __FLT32X_MANT_DIG__ 53 +#define __GCC_ATOMIC_CHAR16_T_LOCK_FREE 2 +#define __cpp_aligned_new 201606L +#define __FLT32_MAX_10_EXP__ 38 +#define __FLT64X_EPSILON__ 1.08420217248550443400745280086994171e-19F64x +#define __STDC_HOSTED__ 1 +#define __DEC64_MIN_EXP__ (-382) +#define TLRENDER_PNG 1 +#define __cpp_decltype_auto 201304L +#define __DBL_DIG__ 15 +#define __STDC_EMBED_EMPTY__ 2 +#define __FLT_EPSILON__ 1.19209289550781250000000000000000000e-7F +#define __cpp_char8_t 202207L +#define __GXX_WEAK__ 1 +#define __SHRT_WIDTH__ 16 +#define __FLT32_IS_IEC_60559__ 1 +#define __LDBL_MIN__ 3.36210314311209350626267781732175260e-4932L +#define __DBL_IS_IEC_60559__ 1 +#define __DEC32_MAX__ 9.999999E96DF +#define __CHAR8_TYPE__ unsigned char +#define __cpp_threadsafe_static_init 200806L +#define __cpp_enumerator_attributes 201411L +#define TLRENDER_EXR 1 +#define __FLT64X_DENORM_MIN__ 3.64519953188247460252840593361941982e-4951F64x +#define __FLT32X_HAS_INFINITY__ 1 +#define __unix__ 1 +#define __INT_WIDTH__ 32 +#define __STDC_IEC_559__ 1 +#define __STDC_ISO_10646__ 201706L +#define __GCC_ATOMIC_CHAR8_T_LOCK_FREE 2 +#define __DECIMAL_DIG__ 21 +#define __STDC_IEC_559_COMPLEX__ 1 +#define __FLT64_EPSILON__ 2.22044604925031308084726333618164062e-16F64 +#define __gnu_linux__ 1 +#define __INT16_MAX__ 0x7fff +#define __FLT64_MIN_EXP__ (-1021) +#define __cpp_using_enum 201907L +#define __DEC64X_EPSILON__ 1E-33D64x +#define __FLT64X_MIN_10_EXP__ (-4931) +#define __LDBL_HAS_QUIET_NAN__ 1 +#define __FLT16_MIN_EXP__ (-13) +#define __FLT64_MANT_DIG__ 53 +#define __cpp_consteval 202211L +#define __FLT64X_MANT_DIG__ 64 +#define FTK_API_GL_4_1 1 +#define __BFLT16_DIG__ 2 +#define __GNUC__ 15 +#define __GXX_RTTI 1 +#define TLRENDER_FFMPEG_PLUGIN 1 +#define __MMX__ 1 +#define __FLT_HAS_DENORM__ 1 +#define __SIZEOF_LONG_DOUBLE__ 16 +#define __BIGGEST_ALIGNMENT__ 16 +#define __STDC_UTF_16__ 1 +#define __FLT64_MAX_10_EXP__ 308 +#define __BFLT16_IS_IEC_60559__ 0 +#define __FLT16_MAX_10_EXP__ 4 +#define __cpp_delegating_constructors 200604L +#define __DBL_MAX__ double(1.79769313486231570814527423731704357e+308L) +#define __cpp_raw_strings 200710L +#define __INT_FAST32_MAX__ 0x7fffffffffffffffL +#define __DBL_HAS_INFINITY__ 1 +#define __INT64_MAX__ 0x7fffffffffffffffL +#define __SIZEOF_FLOAT__ 4 +#define __HAVE_SPECULATION_SAFE_VALUE 1 +#define __cpp_fold_expressions 201603L +#define __DEC32_MIN_EXP__ (-94) +#define __INTPTR_WIDTH__ 64 +#define __UINT_LEAST32_MAX__ 0xffffffffU +#define __FLT32X_HAS_DENORM__ 1 +#define __INT_FAST16_TYPE__ long int +#define __MMX_WITH_SSE__ 1 +#define __LDBL_HAS_DENORM__ 1 +#define __SEG_GS 1 +#define __BFLT16_EPSILON__ 7.81250000000000000000000000000000000e-3BF16 +#define __cplusplus 202002L +#define __cpp_ref_qualifiers 200710L +#define __DEC32_MIN__ 1E-95DF +#define __DEPRECATED 1 +#define __cpp_rvalue_references 200610L +#define __DBL_MAX_EXP__ 1024 +#define __WCHAR_WIDTH__ 32 +#define __FLT32_MAX__ 3.40282346638528859811704183484516925e+38F32 +#define __DEC128_EPSILON__ 1E-33DL +#define __FLT16_DECIMAL_DIG__ 5 +#define __SSE2_MATH__ 1 +#define __ATOMIC_HLE_RELEASE 131072 +#define __PTRDIFF_MAX__ 0x7fffffffffffffffL +#define __amd64 1 +#define __DEC64X_MAX__ 9.999999999999999999999999999999999E6144D64x +#define __ATOMIC_HLE_ACQUIRE 65536 +#define __GNUG__ 15 +#define __LONG_LONG_MAX__ 0x7fffffffffffffffLL +#define __SIZEOF_SIZE_T__ 8 +#define __BFLT16_HAS_INFINITY__ 1 +#define __FLT64X_MIN_EXP__ (-16381) +#define __SIZEOF_WINT_T__ 4 +#define __FLT32X_DIG__ 15 +#define __LONG_LONG_WIDTH__ 64 +#define QT_TESTCASE_SOURCEDIR "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests" +#define __cpp_initializer_lists 200806L +#define __FLT32_MAX_EXP__ 128 +#define ABI_ID "ELF" +#define __cpp_hex_float 201603L +#define __GXX_ABI_VERSION 1020 +#define __FLT_MIN_EXP__ (-125) +#define __GCC_HAVE_DWARF2_CFI_ASM 1 +#define TLRENDER_OCIO 1 +#define __x86_64 1 +#define __cpp_lambdas 200907L +#define __INT_FAST64_TYPE__ long int +#define __BFLT16_MAX__ 3.38953138925153547590470800371487867e+38BF16 +#define __FLT64_DENORM_MIN__ 4.94065645841246544176568792868221372e-324F64 +#define __cpp_template_auto 201606L +#define __FLT16_DENORM_MIN__ 5.96046447753906250000000000000000000e-8F16 +#define __FLT128_EPSILON__ 1.92592994438723585305597794258492732e-34F128 +#define __FLT64X_NORM_MAX__ 1.18973149535723176502126385303097021e+4932F64x +#define __SIZEOF_POINTER__ 8 +#define __SIZE_TYPE__ long unsigned int +#define __LP64__ 1 +#define __DBL_HAS_QUIET_NAN__ 1 +#define __FLT32X_EPSILON__ 2.22044604925031308084726333618164062e-16F32x +#define __LDBL_MAX_EXP__ 16384 +#define __DECIMAL_BID_FORMAT__ 1 +#define __FLT64_MIN_10_EXP__ (-307) +#define __FLT16_MIN_10_EXP__ (-4) +#define __FLT64X_DECIMAL_DIG__ 21 +#define __DEC128_MIN__ 1E-6143DL +#define __REGISTER_PREFIX__ +#define __UINT16_MAX__ 0xffff +#define __FLT128_HAS_INFINITY__ 1 +#define __FLT32_MIN__ 1.17549435082228750796873653722224568e-38F32 +#define __UINT8_TYPE__ unsigned char +#define __FLT_DIG__ 6 +#define __NO_INLINE__ 1 +#define __DEC_EVAL_METHOD__ 2 +#define __FLT_MANT_DIG__ 24 +#define __LDBL_DECIMAL_DIG__ 21 +#define __VERSION__ "15.2.1 20260123 (Red Hat 15.2.1-7)" +#define __UINT64_C(c) c ## UL +#define __cpp_unicode_characters 201411L +#define __DEC64X_MIN__ 1E-6143D64x +#define _STDC_PREDEF_H 1 +#define __INT_LEAST32_MAX__ 0x7fffffff +#define __GCC_ATOMIC_INT_LOCK_FREE 2 +#define __FLT128_MAX_EXP__ 16384 +#define __cpp_conditional_explicit 201806L +#define __FLT32_MANT_DIG__ 24 +#define __cpp_decltype 200707L +#define __FLOAT_WORD_ORDER__ __ORDER_LITTLE_ENDIAN__ +#define SIZEOF_DPTR (sizeof(void*)) +#define __FLT32X_MIN_EXP__ (-1021) +#define __cpp_aggregate_paren_init 201902L +#define __STDC_IEC_60559_COMPLEX__ 201404L +#define __cpp_aggregate_bases 201603L +#define __BFLT16_MIN__ 1.17549435082228750796873653722224568e-38BF16 +#define __FLT128_HAS_DENORM__ 1 +#define __FLT32_DECIMAL_DIG__ 9 +#define __FLT128_DIG__ 33 +#define __INT32_C(c) c +#define __DEC64_EPSILON__ 1E-15DD +#define __ORDER_PDP_ENDIAN__ 3412 +#define __DEC128_MIN_EXP__ (-6142) +#define __DEC128_MAX__ 9.999999999999999999999999999999999E6144DL +#define __cpp_constinit 201907L +#define __INT_FAST32_TYPE__ long int +#define __UINT_LEAST16_TYPE__ short unsigned int +#define __DEC64X_MANT_DIG__ 34 +#define __DEC128_MAX_EXP__ 6145 +#define unix 1 +#define __DBL_HAS_DENORM__ 1 +#define __cpp_rtti 199711L +#define __UINT64_MAX__ 0xffffffffffffffffUL +#define __FLT_IS_IEC_60559__ 1 +#define __GNUC_WIDE_EXECUTION_CHARSET_NAME "UTF-32LE" +#define __FLT64X_DIG__ 18 +#define __INT8_TYPE__ signed char +#define __cpp_digit_separators 201309L +#define __ELF__ 1 +#define __GCC_ASM_FLAG_OUTPUTS__ 1 +#define __UINT32_TYPE__ unsigned int +#define __BFLT16_HAS_QUIET_NAN__ 1 +#define __FLT_RADIX__ 2 +#define __INT_LEAST16_TYPE__ short int +#define __LDBL_EPSILON__ 1.08420217248550443400745280086994171e-19L +#define __UINTMAX_C(c) c ## UL +#define __GNUC_RH_RELEASE__ 7 +#define __FLT16_DIG__ 3 +#define __k8 1 +#define __FLT32X_MIN__ 2.22507385850720138309023271733240406e-308F32x +#define __SIG_ATOMIC_MAX__ 0x7fffffff +#define __cpp_constexpr 202002L +#define __GCC_ATOMIC_WCHAR_T_LOCK_FREE 2 +#define __USER_LABEL_PREFIX__ +#define __STDC_IEC_60559_BFP__ 201404L +#define __SIZEOF_PTRDIFF_T__ 8 +#define __FLT64X_HAS_INFINITY__ 1 +#define __SIZEOF_LONG__ 8 +#define __LDBL_DIG__ 18 +#define __FLT64_IS_IEC_60559__ 1 +#define __x86_64__ 1 +#define __FLT16_IS_IEC_60559__ 1 +#define __FLT16_MAX_EXP__ 16 +#define __DEC32_SUBNORMAL_MIN__ 0.000001E-95DF +#define __STDC_EMBED_FOUND__ 1 +#define __INT_FAST16_MAX__ 0x7fffffffffffffffL +#define __GCC_CONSTRUCTIVE_SIZE 64 +#define __FLT64_DIG__ 15 +#define __UINT_FAST32_MAX__ 0xffffffffffffffffUL +#define __UINT_LEAST64_TYPE__ long unsigned int +#define __FLT16_EPSILON__ 9.76562500000000000000000000000000000e-4F16 +#define __FLT_HAS_QUIET_NAN__ 1 +#define __FLT_MAX_10_EXP__ 38 +#define __FLT64X_HAS_DENORM__ 1 +#define __DEC128_SUBNORMAL_MIN__ 0.000000000000000000000000000000001E-6143DL +#define __FLT_HAS_INFINITY__ 1 +#define __GNUC_EXECUTION_CHARSET_NAME "UTF-8" +#define __cpp_unicode_literals 200710L +#define __UINT_FAST16_TYPE__ long unsigned int +#define __DEC64_MAX__ 9.999999999999999E384DD +#define __STDC_EMBED_NOT_FOUND__ 0 +#define __INT_FAST32_WIDTH__ 64 +#define __CHAR16_TYPE__ short unsigned int +#define __PRAGMA_REDEFINE_EXTNAME 1 +#define __DEC64X_SUBNORMAL_MIN__ 0.000000000000000000000000000000001E-6143D64x +#define __SIZE_WIDTH__ 64 +#define __SEG_FS 1 +#define __INT_LEAST16_MAX__ 0x7fff +#define __FLT16_NORM_MAX__ 6.55040000000000000000000000000000000e+4F16 +#define __DEC64_MANT_DIG__ 16 +#define __FLT32_DENORM_MIN__ 1.40129846432481707092372958328991613e-45F32 +#define __SIG_ATOMIC_WIDTH__ 32 +#define __GCC_DESTRUCTIVE_SIZE 64 +#define __INT_LEAST64_TYPE__ long int +#define __INT16_TYPE__ short int +#define __INT_LEAST8_TYPE__ signed char +#define __FLT16_MAX__ 6.55040000000000000000000000000000000e+4F16 +#define __FLT128_MIN__ 3.36210314311209350626267781732175260e-4932F128 +#define __cpp_structured_bindings 201606L +#define __SIZEOF_INT__ 4 +#define __DEC32_MAX_EXP__ 97 +#define __INT_FAST8_MAX__ 0x7f +#define __FLT128_MAX__ 1.18973149535723176508575932662800702e+4932F128 +#define __INTPTR_MAX__ 0x7fffffffffffffffL +#define __cpp_sized_deallocation 201309L +#define __cpp_guaranteed_copy_elision 201606L +#define linux 1 +#define __FLT64_HAS_QUIET_NAN__ 1 +#define __FLT32_MIN_10_EXP__ (-37) +#define __EXCEPTIONS 1 +#define __UINT16_C(c) c +#define __PTRDIFF_WIDTH__ 64 +#define __cpp_range_based_for 201603L +#define __INT_FAST16_WIDTH__ 64 +#define __FLT64_HAS_INFINITY__ 1 +#define __FLT64X_MAX__ 1.18973149535723176502126385303097021e+4932F64x +#define __FLT16_HAS_INFINITY__ 1 +#define __STDCPP_DEFAULT_NEW_ALIGNMENT__ 16 +#define __SIG_ATOMIC_MIN__ (-__SIG_ATOMIC_MAX__ - 1) +#define __code_model_small__ 1 +#define __GCC_ATOMIC_LONG_LOCK_FREE 2 +#define __cpp_nontype_template_args 201911L +#define __DEC32_MANT_DIG__ 7 +#define __k8__ 1 +#define __INTPTR_TYPE__ long int +#define __UINT16_TYPE__ short unsigned int +#define __WCHAR_TYPE__ int +#define __UINTPTR_MAX__ 0xffffffffffffffffUL +#define __INT_FAST64_WIDTH__ 64 +#define __cpp_nontype_template_parameter_class 201806L +#define __cpp_concepts 202002L +#define __INT_FAST64_MAX__ 0x7fffffffffffffffL +#define __GCC_ATOMIC_TEST_AND_SET_TRUEVAL 1 +#define __FLT_NORM_MAX__ 3.40282346638528859811704183484516925e+38F +#define __FLT32_HAS_INFINITY__ 1 +#define __FLT64X_MAX_EXP__ 16384 +#define __UINT_FAST64_TYPE__ long unsigned int +#define __cpp_constexpr_in_decltype 201711L +#define __cpp_inline_variables 201606L +#define __BFLT16_MIN_EXP__ (-125) +#define __INT_MAX__ 0x7fffffff +#define __linux__ 1 +#define __INT64_TYPE__ long int +#define __FLT_MAX_EXP__ 128 +#define __ORDER_BIG_ENDIAN__ 4321 +#define __DBL_MANT_DIG__ 53 +#define QT_CORE_LIB 1 +#define __SIZEOF_FLOAT128__ 16 +#define __BFLT16_MANT_DIG__ 8 +#define __DEC64_MIN__ 1E-383DD +#define __WINT_TYPE__ unsigned int +#define __UINT_LEAST32_TYPE__ unsigned int +#define __SIZEOF_SHORT__ 2 +#define __FLT32_NORM_MAX__ 3.40282346638528859811704183484516925e+38F32 +#define __SSE__ 1 +#define __LDBL_MIN_EXP__ (-16381) +#define __FLT64_MAX__ 1.79769313486231570814527423731704357e+308F64 +#define __DEC64X_MIN_EXP__ (-6142) +#define __amd64__ 1 +#define __WINT_WIDTH__ 32 +#define __INT_LEAST64_WIDTH__ 64 +#define __FLT32X_MAX_10_EXP__ 308 +#define __cpp_namespace_attributes 201411L +#define __SIZEOF_INT128__ 16 +#define __FLT16_MIN__ 6.10351562500000000000000000000000000e-5F16 +#define __FLT64X_IS_IEC_60559__ 1 +#define __GXX_CONSTEXPR_ASM__ 1 +#define __LDBL_MAX_10_EXP__ 4932 +#define __ATOMIC_RELAXED 0 +#define __DBL_EPSILON__ double(2.22044604925031308084726333618164062e-16L) +#define __INT_LEAST32_TYPE__ int +#define _LP64 1 +#define __UINT8_C(c) c +#define __FLT64_MAX_EXP__ 1024 +#define __cpp_return_type_deduction 201304L +#define __SIZEOF_WCHAR_T__ 4 +#define __GNUC_PATCHLEVEL__ 1 +#define __FLT128_NORM_MAX__ 1.18973149535723176508575932662800702e+4932F128 +#define __FLT64_NORM_MAX__ 1.79769313486231570814527423731704357e+308F64 +#define __FLT128_HAS_QUIET_NAN__ 1 +#define __INTMAX_MAX__ 0x7fffffffffffffffL +#define TLRENDER_TIFF 1 +#define __INT_FAST8_TYPE__ signed char +#define __FLT64X_MIN__ 3.36210314311209350626267781732175260e-4932F64x +#define __STDCPP_THREADS__ 1 +#define __BFLT16_HAS_DENORM__ 1 +#define __GNUC_STDC_INLINE__ 1 +#define __FLT64_HAS_DENORM__ 1 +#define __FLT32_EPSILON__ 1.19209289550781250000000000000000000e-7F32 +#define __FLT16_HAS_DENORM__ 1 +#define __DBL_DECIMAL_DIG__ 17 +#define __STDC_UTF_32__ 1 +#define __INT_FAST8_WIDTH__ 8 +#define __FXSR__ 1 +#define __FLT32X_MAX__ 1.79769313486231570814527423731704357e+308F32x +#define __DBL_NORM_MAX__ double(1.79769313486231570814527423731704357e+308L) +#define __BYTE_ORDER__ __ORDER_LITTLE_ENDIAN__ +#define TLRENDER_FFMPEG 1 +#define __INTMAX_WIDTH__ 64 +#define __cpp_runtime_arrays 198712L +#define __FLT32_DIG__ 6 +#define __UINT64_TYPE__ long unsigned int +#define __UINT32_C(c) c ## U +#define __cpp_alias_templates 200704L +#define __cpp_constexpr_dynamic_alloc 201907L +#define __FLT_DENORM_MIN__ 1.40129846432481707092372958328991613e-45F +#define __FLT128_IS_IEC_60559__ 1 +#define __INT8_MAX__ 0x7f +#define __LONG_WIDTH__ 64 +#define __DBL_MIN__ double(2.22507385850720138309023271733240406e-308L) +#define __INT32_MAX__ 0x7fffffff +#define __UINT_FAST32_TYPE__ long unsigned int +#define __FLT16_MANT_DIG__ 11 +#define __FLT32X_NORM_MAX__ 1.79769313486231570814527423731704357e+308F32x +#define __CHAR32_TYPE__ unsigned int +#define __FLT_MAX__ 3.40282346638528859811704183484516925e+38F +#define __SSE2__ 1 +#define __cpp_deduction_guides 201907L +#define __BFLT16_NORM_MAX__ 3.38953138925153547590470800371487867e+38BF16 +#define __INT32_TYPE__ int +#define __SIZEOF_DOUBLE__ 8 +#define __cpp_exceptions 199711L +#define __FLT_MIN_10_EXP__ (-37) +#define __FLT64_MIN__ 2.22507385850720138309023271733240406e-308F64 +#define __INT_LEAST32_WIDTH__ 32 +#define __INTMAX_TYPE__ long int +#define __GLIBCXX_BITSIZE_INT_N_0 128 +#define __FLT32X_HAS_QUIET_NAN__ 1 +#define __ATOMIC_CONSUME 1 +#define __GNUC_MINOR__ 2 +#define __GLIBCXX_TYPE_INT_N_0 __int128 +#define __UINTMAX_MAX__ 0xffffffffffffffffUL +#define __FLT32X_DENORM_MIN__ 4.94065645841246544176568792868221372e-324F32x +#define __cpp_template_template_args 201611L +#define __DBL_MAX_10_EXP__ 308 +#define __LDBL_DENORM_MIN__ 3.64519953188247460252840593361941982e-4951L +#define __INT16_C(c) c +#define __STDC__ 1 +#define __PTRDIFF_TYPE__ long int +#define __LONG_MAX__ 0x7fffffffffffffffL +#define __FLT32X_MIN_10_EXP__ (-307) +#define __UINTPTR_TYPE__ long unsigned int +#define __DEC64_SUBNORMAL_MIN__ 0.000000000000001E-383DD +#define __DEC128_MANT_DIG__ 34 +#define __LDBL_MIN_10_EXP__ (-4931) +#define __cpp_generic_lambdas 201707L +#define __SSE_MATH__ 1 +#define __SIZEOF_LONG_LONG__ 8 +#define __cpp_user_defined_literals 200809L +#define __FLT128_DECIMAL_DIG__ 36 +#define __GCC_ATOMIC_LLONG_LOCK_FREE 2 +#define __FLT32_HAS_QUIET_NAN__ 1 +#define __FLT_DECIMAL_DIG__ 9 +#define __UINT_FAST16_MAX__ 0xffffffffffffffffUL +#define __LDBL_NORM_MAX__ 1.18973149535723176502126385303097021e+4932L +#define __GCC_ATOMIC_SHORT_LOCK_FREE 2 +#define __SIZE_MAX__ 0xffffffffffffffffUL +#define __UINT_FAST8_TYPE__ unsigned char +#define _GNU_SOURCE 1 +#define __cpp_init_captures 201803L +#define __ATOMIC_ACQ_REL 4 +#define __ATOMIC_RELEASE 3 diff --git a/build-linux/tests/test_platform_session_autogen/mocs_compilation.cpp b/build-linux/tests/test_platform_session_autogen/mocs_compilation.cpp new file mode 100644 index 00000000..bda67f76 --- /dev/null +++ b/build-linux/tests/test_platform_session_autogen/mocs_compilation.cpp @@ -0,0 +1,3 @@ +// This file is autogenerated. Changes will be overwritten. +// No files found that require moc or the moc files are included +enum some_compilers { need_more_than_nothing }; diff --git a/build-linux/tests/test_platform_session_autogen/timestamp b/build-linux/tests/test_platform_session_autogen/timestamp new file mode 100644 index 00000000..e69de29b diff --git a/build-linux/tests/test_sequence_detector b/build-linux/tests/test_sequence_detector new file mode 100755 index 00000000..6b8de768 Binary files /dev/null and b/build-linux/tests/test_sequence_detector differ diff --git a/build-linux/tests/test_sequence_detector_autogen/deps b/build-linux/tests/test_sequence_detector_autogen/deps new file mode 100644 index 00000000..1d56885a --- /dev/null +++ b/build-linux/tests/test_sequence_detector_autogen/deps @@ -0,0 +1,837 @@ +test_sequence_detector_autogen/timestamp: \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_sequence_detector_autogen/moc_predefs.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/sequence_detector.cpp \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/sequence_detector.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/CMakeLists.txt \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/test_sequence_detector.cpp \ + /usr/include/asm-generic/bitsperlong.h \ + /usr/include/asm-generic/errno-base.h \ + /usr/include/asm-generic/errno.h \ + /usr/include/asm-generic/int-ll64.h \ + /usr/include/asm-generic/posix_types.h \ + /usr/include/asm-generic/types.h \ + /usr/include/asm/bitsperlong.h \ + /usr/include/asm/errno.h \ + /usr/include/asm/posix_types.h \ + /usr/include/asm/posix_types_64.h \ + /usr/include/asm/types.h \ + /usr/include/asm/unistd.h \ + /usr/include/asm/unistd_64.h \ + /usr/include/assert.h \ + /usr/include/bits/atomic_wide_counter.h \ + /usr/include/bits/byteswap.h \ + /usr/include/bits/confname.h \ + /usr/include/bits/cpu-set.h \ + /usr/include/bits/endian.h \ + /usr/include/bits/endianness.h \ + /usr/include/bits/environments.h \ + /usr/include/bits/errno.h \ + /usr/include/bits/floatn-common.h \ + /usr/include/bits/floatn.h \ + /usr/include/bits/getopt_core.h \ + /usr/include/bits/getopt_posix.h \ + /usr/include/bits/libc-header-start.h \ + /usr/include/bits/locale.h \ + /usr/include/bits/long-double.h \ + /usr/include/bits/posix_opt.h \ + /usr/include/bits/pthread_stack_min-dynamic.h \ + /usr/include/bits/pthreadtypes-arch.h \ + /usr/include/bits/pthreadtypes.h \ + /usr/include/bits/sched.h \ + /usr/include/bits/select.h \ + /usr/include/bits/semaphore.h \ + /usr/include/bits/setjmp.h \ + /usr/include/bits/stdint-intn.h \ + /usr/include/bits/stdio_lim.h \ + /usr/include/bits/struct_mutex.h \ + /usr/include/bits/struct_rwlock.h \ + /usr/include/bits/syscall.h \ + /usr/include/bits/thread-shared-types.h \ + /usr/include/bits/time.h \ + /usr/include/bits/time64.h \ + /usr/include/bits/timesize.h \ + /usr/include/bits/timex.h \ + /usr/include/bits/types.h \ + /usr/include/bits/types/FILE.h \ + /usr/include/bits/types/__FILE.h \ + /usr/include/bits/types/__fpos64_t.h \ + /usr/include/bits/types/__fpos_t.h \ + /usr/include/bits/types/__locale_t.h \ + /usr/include/bits/types/__mbstate_t.h \ + /usr/include/bits/types/__sigset_t.h \ + /usr/include/bits/types/clock_t.h \ + /usr/include/bits/types/clockid_t.h \ + /usr/include/bits/types/cookie_io_functions_t.h \ + /usr/include/bits/types/error_t.h \ + /usr/include/bits/types/locale_t.h \ + /usr/include/bits/types/mbstate_t.h \ + /usr/include/bits/types/sigset_t.h \ + /usr/include/bits/types/struct_FILE.h \ + /usr/include/bits/types/struct___jmp_buf_tag.h \ + /usr/include/bits/types/struct_itimerspec.h \ + /usr/include/bits/types/struct_sched_param.h \ + /usr/include/bits/types/struct_timespec.h \ + /usr/include/bits/types/struct_timeval.h \ + /usr/include/bits/types/struct_tm.h \ + /usr/include/bits/types/time_t.h \ + /usr/include/bits/types/timer_t.h \ + /usr/include/bits/types/wint_t.h \ + /usr/include/bits/typesizes.h \ + /usr/include/bits/uintn-identity.h \ + /usr/include/bits/unistd_ext.h \ + /usr/include/bits/wchar.h \ + /usr/include/bits/wctype-wchar.h \ + /usr/include/bits/wordsize.h \ + /usr/include/c++/15/algorithm \ + /usr/include/c++/15/array \ + /usr/include/c++/15/atomic \ + /usr/include/c++/15/backward/auto_ptr.h \ + /usr/include/c++/15/backward/binders.h \ + /usr/include/c++/15/bit \ + /usr/include/c++/15/bits/algorithmfwd.h \ + /usr/include/c++/15/bits/align.h \ + /usr/include/c++/15/bits/alloc_traits.h \ + /usr/include/c++/15/bits/allocated_ptr.h \ + /usr/include/c++/15/bits/allocator.h \ + /usr/include/c++/15/bits/atomic_base.h \ + /usr/include/c++/15/bits/atomic_futex.h \ + /usr/include/c++/15/bits/atomic_lockfree_defines.h \ + /usr/include/c++/15/bits/atomic_timed_wait.h \ + /usr/include/c++/15/bits/atomic_wait.h \ + /usr/include/c++/15/bits/basic_ios.h \ + /usr/include/c++/15/bits/basic_ios.tcc \ + /usr/include/c++/15/bits/basic_string.h \ + /usr/include/c++/15/bits/basic_string.tcc \ + /usr/include/c++/15/bits/char_traits.h \ + /usr/include/c++/15/bits/charconv.h \ + /usr/include/c++/15/bits/chrono.h \ + /usr/include/c++/15/bits/chrono_io.h \ + /usr/include/c++/15/bits/codecvt.h \ + /usr/include/c++/15/bits/concept_check.h \ + /usr/include/c++/15/bits/cpp_type_traits.h \ + /usr/include/c++/15/bits/cxxabi_forced.h \ + /usr/include/c++/15/bits/cxxabi_init_exception.h \ + /usr/include/c++/15/bits/enable_special_members.h \ + /usr/include/c++/15/bits/erase_if.h \ + /usr/include/c++/15/bits/exception.h \ + /usr/include/c++/15/bits/exception_defines.h \ + /usr/include/c++/15/bits/exception_ptr.h \ + /usr/include/c++/15/bits/functexcept.h \ + /usr/include/c++/15/bits/functional_hash.h \ + /usr/include/c++/15/bits/hash_bytes.h \ + /usr/include/c++/15/bits/hashtable.h \ + /usr/include/c++/15/bits/hashtable_policy.h \ + /usr/include/c++/15/bits/invoke.h \ + /usr/include/c++/15/bits/ios_base.h \ + /usr/include/c++/15/bits/istream.tcc \ + /usr/include/c++/15/bits/iterator_concepts.h \ + /usr/include/c++/15/bits/list.tcc \ + /usr/include/c++/15/bits/locale_classes.h \ + /usr/include/c++/15/bits/locale_classes.tcc \ + /usr/include/c++/15/bits/locale_conv.h \ + /usr/include/c++/15/bits/locale_facets.h \ + /usr/include/c++/15/bits/locale_facets.tcc \ + /usr/include/c++/15/bits/locale_facets_nonio.h \ + /usr/include/c++/15/bits/locale_facets_nonio.tcc \ + /usr/include/c++/15/bits/localefwd.h \ + /usr/include/c++/15/bits/max_size_type.h \ + /usr/include/c++/15/bits/memory_resource.h \ + /usr/include/c++/15/bits/memoryfwd.h \ + /usr/include/c++/15/bits/move.h \ + /usr/include/c++/15/bits/nested_exception.h \ + /usr/include/c++/15/bits/new_allocator.h \ + /usr/include/c++/15/bits/node_handle.h \ + /usr/include/c++/15/bits/ostream.h \ + /usr/include/c++/15/bits/ostream.tcc \ + /usr/include/c++/15/bits/ostream_insert.h \ + /usr/include/c++/15/bits/parse_numbers.h \ + /usr/include/c++/15/bits/postypes.h \ + /usr/include/c++/15/bits/predefined_ops.h \ + /usr/include/c++/15/bits/ptr_traits.h \ + /usr/include/c++/15/bits/quoted_string.h \ + /usr/include/c++/15/bits/random.h \ + /usr/include/c++/15/bits/random.tcc \ + /usr/include/c++/15/bits/range_access.h \ + /usr/include/c++/15/bits/ranges_algo.h \ + /usr/include/c++/15/bits/ranges_algobase.h \ + /usr/include/c++/15/bits/ranges_base.h \ + /usr/include/c++/15/bits/ranges_cmp.h \ + /usr/include/c++/15/bits/ranges_uninitialized.h \ + /usr/include/c++/15/bits/ranges_util.h \ + /usr/include/c++/15/bits/refwrap.h \ + /usr/include/c++/15/bits/requires_hosted.h \ + /usr/include/c++/15/bits/semaphore_base.h \ + /usr/include/c++/15/bits/shared_ptr.h \ + /usr/include/c++/15/bits/shared_ptr_atomic.h \ + /usr/include/c++/15/bits/shared_ptr_base.h \ + /usr/include/c++/15/bits/specfun.h \ + /usr/include/c++/15/bits/sstream.tcc \ + /usr/include/c++/15/bits/std_abs.h \ + /usr/include/c++/15/bits/std_function.h \ + /usr/include/c++/15/bits/std_mutex.h \ + /usr/include/c++/15/bits/std_thread.h \ + /usr/include/c++/15/bits/stl_algo.h \ + /usr/include/c++/15/bits/stl_algobase.h \ + /usr/include/c++/15/bits/stl_bvector.h \ + /usr/include/c++/15/bits/stl_construct.h \ + /usr/include/c++/15/bits/stl_function.h \ + /usr/include/c++/15/bits/stl_heap.h \ + /usr/include/c++/15/bits/stl_iterator.h \ + /usr/include/c++/15/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/15/bits/stl_iterator_base_types.h \ + /usr/include/c++/15/bits/stl_list.h \ + /usr/include/c++/15/bits/stl_map.h \ + /usr/include/c++/15/bits/stl_multimap.h \ + /usr/include/c++/15/bits/stl_multiset.h \ + /usr/include/c++/15/bits/stl_numeric.h \ + /usr/include/c++/15/bits/stl_pair.h \ + /usr/include/c++/15/bits/stl_raw_storage_iter.h \ + /usr/include/c++/15/bits/stl_relops.h \ + /usr/include/c++/15/bits/stl_set.h \ + /usr/include/c++/15/bits/stl_tempbuf.h \ + /usr/include/c++/15/bits/stl_tree.h \ + /usr/include/c++/15/bits/stl_uninitialized.h \ + /usr/include/c++/15/bits/stl_vector.h \ + /usr/include/c++/15/bits/stream_iterator.h \ + /usr/include/c++/15/bits/streambuf.tcc \ + /usr/include/c++/15/bits/streambuf_iterator.h \ + /usr/include/c++/15/bits/string_view.tcc \ + /usr/include/c++/15/bits/stringfwd.h \ + /usr/include/c++/15/bits/this_thread_sleep.h \ + /usr/include/c++/15/bits/uniform_int_dist.h \ + /usr/include/c++/15/bits/unique_lock.h \ + /usr/include/c++/15/bits/unique_ptr.h \ + /usr/include/c++/15/bits/unordered_map.h \ + /usr/include/c++/15/bits/unordered_set.h \ + /usr/include/c++/15/bits/uses_allocator.h \ + /usr/include/c++/15/bits/uses_allocator_args.h \ + /usr/include/c++/15/bits/utility.h \ + /usr/include/c++/15/bits/vector.tcc \ + /usr/include/c++/15/bits/version.h \ + /usr/include/c++/15/cassert \ + /usr/include/c++/15/cctype \ + /usr/include/c++/15/cerrno \ + /usr/include/c++/15/charconv \ + /usr/include/c++/15/chrono \ + /usr/include/c++/15/climits \ + /usr/include/c++/15/clocale \ + /usr/include/c++/15/cmath \ + /usr/include/c++/15/compare \ + /usr/include/c++/15/concepts \ + /usr/include/c++/15/condition_variable \ + /usr/include/c++/15/cstddef \ + /usr/include/c++/15/cstdint \ + /usr/include/c++/15/cstdio \ + /usr/include/c++/15/cstdlib \ + /usr/include/c++/15/cstring \ + /usr/include/c++/15/ctime \ + /usr/include/c++/15/cwchar \ + /usr/include/c++/15/cwctype \ + /usr/include/c++/15/debug/assertions.h \ + /usr/include/c++/15/debug/debug.h \ + /usr/include/c++/15/exception \ + /usr/include/c++/15/experimental/source_location \ + /usr/include/c++/15/ext/aligned_buffer.h \ + /usr/include/c++/15/ext/alloc_traits.h \ + /usr/include/c++/15/ext/atomicity.h \ + /usr/include/c++/15/ext/concurrence.h \ + /usr/include/c++/15/ext/numeric_traits.h \ + /usr/include/c++/15/ext/string_conversions.h \ + /usr/include/c++/15/ext/type_traits.h \ + /usr/include/c++/15/filesystem \ + /usr/include/c++/15/format \ + /usr/include/c++/15/functional \ + /usr/include/c++/15/future \ + /usr/include/c++/15/initializer_list \ + /usr/include/c++/15/iomanip \ + /usr/include/c++/15/ios \ + /usr/include/c++/15/iosfwd \ + /usr/include/c++/15/istream \ + /usr/include/c++/15/iterator \ + /usr/include/c++/15/limits \ + /usr/include/c++/15/list \ + /usr/include/c++/15/locale \ + /usr/include/c++/15/map \ + /usr/include/c++/15/memory \ + /usr/include/c++/15/memory_resource \ + /usr/include/c++/15/mutex \ + /usr/include/c++/15/new \ + /usr/include/c++/15/numeric \ + /usr/include/c++/15/optional \ + /usr/include/c++/15/ostream \ + /usr/include/c++/15/pstl/execution_defs.h \ + /usr/include/c++/15/pstl/glue_numeric_defs.h \ + /usr/include/c++/15/pstl/pstl_config.h \ + /usr/include/c++/15/random \ + /usr/include/c++/15/ratio \ + /usr/include/c++/15/semaphore \ + /usr/include/c++/15/set \ + /usr/include/c++/15/shared_mutex \ + /usr/include/c++/15/source_location \ + /usr/include/c++/15/sstream \ + /usr/include/c++/15/stdexcept \ + /usr/include/c++/15/stdlib.h \ + /usr/include/c++/15/stop_token \ + /usr/include/c++/15/streambuf \ + /usr/include/c++/15/string \ + /usr/include/c++/15/string_view \ + /usr/include/c++/15/system_error \ + /usr/include/c++/15/tr1/bessel_function.tcc \ + /usr/include/c++/15/tr1/beta_function.tcc \ + /usr/include/c++/15/tr1/ell_integral.tcc \ + /usr/include/c++/15/tr1/exp_integral.tcc \ + /usr/include/c++/15/tr1/gamma.tcc \ + /usr/include/c++/15/tr1/hypergeometric.tcc \ + /usr/include/c++/15/tr1/legendre_function.tcc \ + /usr/include/c++/15/tr1/modified_bessel_func.tcc \ + /usr/include/c++/15/tr1/poly_hermite.tcc \ + /usr/include/c++/15/tr1/poly_laguerre.tcc \ + /usr/include/c++/15/tr1/riemann_zeta.tcc \ + /usr/include/c++/15/tr1/special_function_util.h \ + /usr/include/c++/15/tuple \ + /usr/include/c++/15/type_traits \ + /usr/include/c++/15/typeinfo \ + /usr/include/c++/15/unordered_map \ + /usr/include/c++/15/unordered_set \ + /usr/include/c++/15/utility \ + /usr/include/c++/15/variant \ + /usr/include/c++/15/vector \ + /usr/include/c++/15/version \ + /usr/include/c++/15/x86_64-redhat-linux/bits/atomic_word.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/c++allocator.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/c++config.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/c++locale.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/cpu_defines.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/ctype_base.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/ctype_inline.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/error_constants.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/gthr-default.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/gthr.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/messages_members.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/opt_random.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/os_defines.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/time_members.h \ + /usr/include/ctype.h \ + /usr/include/endian.h \ + /usr/include/errno.h \ + /usr/include/features-time64.h \ + /usr/include/features.h \ + /usr/include/gnu/stubs-64.h \ + /usr/include/gnu/stubs.h \ + /usr/include/libintl.h \ + /usr/include/linux/close_range.h \ + /usr/include/linux/errno.h \ + /usr/include/linux/posix_types.h \ + /usr/include/linux/sched/types.h \ + /usr/include/linux/stddef.h \ + /usr/include/linux/types.h \ + /usr/include/locale.h \ + /usr/include/pthread.h \ + /usr/include/qt6/QtCore/QAbstractItemModel \ + /usr/include/qt6/QtCore/QDeadlineTimer \ + /usr/include/qt6/QtCore/QDir \ + /usr/include/qt6/QtCore/QFile \ + /usr/include/qt6/QtCore/QFileInfo \ + /usr/include/qt6/QtCore/QHash \ + /usr/include/qt6/QtCore/QHashFunctions \ + /usr/include/qt6/QtCore/QList \ + /usr/include/qt6/QtCore/QMap \ + /usr/include/qt6/QtCore/QMutex \ + /usr/include/qt6/QtCore/QObject \ + /usr/include/qt6/QtCore/QRegularExpression \ + /usr/include/qt6/QtCore/QString \ + /usr/include/qt6/QtCore/QStringList \ + /usr/include/qt6/QtCore/QTemporaryDir \ + /usr/include/qt6/QtCore/QTextStream \ + /usr/include/qt6/QtCore/QVariant \ + /usr/include/qt6/QtCore/QVector \ + /usr/include/qt6/QtCore/QtCore \ + /usr/include/qt6/QtCore/QtCoreDepends \ + /usr/include/qt6/QtCore/q17memory.h \ + /usr/include/qt6/QtCore/q20algorithm.h \ + /usr/include/qt6/QtCore/q20chrono.h \ + /usr/include/qt6/QtCore/q20functional.h \ + /usr/include/qt6/QtCore/q20iterator.h \ + /usr/include/qt6/QtCore/q20map.h \ + /usr/include/qt6/QtCore/q20memory.h \ + /usr/include/qt6/QtCore/q20type_traits.h \ + /usr/include/qt6/QtCore/q20utility.h \ + /usr/include/qt6/QtCore/q20vector.h \ + /usr/include/qt6/QtCore/q23functional.h \ + /usr/include/qt6/QtCore/q23type_traits.h \ + /usr/include/qt6/QtCore/q23utility.h \ + /usr/include/qt6/QtCore/q26numeric.h \ + /usr/include/qt6/QtCore/qabstractanimation.h \ + /usr/include/qt6/QtCore/qabstracteventdispatcher.h \ + /usr/include/qt6/QtCore/qabstractitemmodel.h \ + /usr/include/qt6/QtCore/qabstractnativeeventfilter.h \ + /usr/include/qt6/QtCore/qabstractproxymodel.h \ + /usr/include/qt6/QtCore/qalgorithms.h \ + /usr/include/qt6/QtCore/qalloc.h \ + /usr/include/qt6/QtCore/qanimationgroup.h \ + /usr/include/qt6/QtCore/qanystringview.h \ + /usr/include/qt6/QtCore/qapplicationstatic.h \ + /usr/include/qt6/QtCore/qarraydata.h \ + /usr/include/qt6/QtCore/qarraydataops.h \ + /usr/include/qt6/QtCore/qarraydatapointer.h \ + /usr/include/qt6/QtCore/qassert.h \ + /usr/include/qt6/QtCore/qassociativeiterable.h \ + /usr/include/qt6/QtCore/qatomic.h \ + /usr/include/qt6/QtCore/qatomic_cxx11.h \ + /usr/include/qt6/QtCore/qatomicscopedvaluerollback.h \ + /usr/include/qt6/QtCore/qbasicatomic.h \ + /usr/include/qt6/QtCore/qbasictimer.h \ + /usr/include/qt6/QtCore/qbindingstorage.h \ + /usr/include/qt6/QtCore/qbitarray.h \ + /usr/include/qt6/QtCore/qbuffer.h \ + /usr/include/qt6/QtCore/qbytearray.h \ + /usr/include/qt6/QtCore/qbytearrayalgorithms.h \ + /usr/include/qt6/QtCore/qbytearraylist.h \ + /usr/include/qt6/QtCore/qbytearraymatcher.h \ + /usr/include/qt6/QtCore/qbytearrayview.h \ + /usr/include/qt6/QtCore/qcache.h \ + /usr/include/qt6/QtCore/qcalendar.h \ + /usr/include/qt6/QtCore/qcborarray.h \ + /usr/include/qt6/QtCore/qcborcommon.h \ + /usr/include/qt6/QtCore/qcbormap.h \ + /usr/include/qt6/QtCore/qcborstream.h \ + /usr/include/qt6/QtCore/qcborstreamreader.h \ + /usr/include/qt6/QtCore/qcborstreamwriter.h \ + /usr/include/qt6/QtCore/qcborvalue.h \ + /usr/include/qt6/QtCore/qchar.h \ + /usr/include/qt6/QtCore/qcheckedint_impl.h \ + /usr/include/qt6/QtCore/qchronotimer.h \ + /usr/include/qt6/QtCore/qcollator.h \ + /usr/include/qt6/QtCore/qcommandlineoption.h \ + /usr/include/qt6/QtCore/qcommandlineparser.h \ + /usr/include/qt6/QtCore/qcompare.h \ + /usr/include/qt6/QtCore/qcompare_impl.h \ + /usr/include/qt6/QtCore/qcomparehelpers.h \ + /usr/include/qt6/QtCore/qcompilerdetection.h \ + /usr/include/qt6/QtCore/qconcatenatetablesproxymodel.h \ + /usr/include/qt6/QtCore/qconfig-64.h \ + /usr/include/qt6/QtCore/qconfig.h \ + /usr/include/qt6/QtCore/qconstructormacros.h \ + /usr/include/qt6/QtCore/qcontainerfwd.h \ + /usr/include/qt6/QtCore/qcontainerinfo.h \ + /usr/include/qt6/QtCore/qcontainertools_impl.h \ + /usr/include/qt6/QtCore/qcontiguouscache.h \ + /usr/include/qt6/QtCore/qcoreapplication.h \ + /usr/include/qt6/QtCore/qcoreapplication_platform.h \ + /usr/include/qt6/QtCore/qcoreevent.h \ + /usr/include/qt6/QtCore/qcryptographichash.h \ + /usr/include/qt6/QtCore/qdarwinhelpers.h \ + /usr/include/qt6/QtCore/qdatastream.h \ + /usr/include/qt6/QtCore/qdatetime.h \ + /usr/include/qt6/QtCore/qdeadlinetimer.h \ + /usr/include/qt6/QtCore/qdebug.h \ + /usr/include/qt6/QtCore/qdir.h \ + /usr/include/qt6/QtCore/qdiriterator.h \ + /usr/include/qt6/QtCore/qdirlisting.h \ + /usr/include/qt6/QtCore/qeasingcurve.h \ + /usr/include/qt6/QtCore/qelapsedtimer.h \ + /usr/include/qt6/QtCore/qendian.h \ + /usr/include/qt6/QtCore/qeventloop.h \ + /usr/include/qt6/QtCore/qexception.h \ + /usr/include/qt6/QtCore/qexceptionhandling.h \ + /usr/include/qt6/QtCore/qfactoryinterface.h \ + /usr/include/qt6/QtCore/qfile.h \ + /usr/include/qt6/QtCore/qfiledevice.h \ + /usr/include/qt6/QtCore/qfileinfo.h \ + /usr/include/qt6/QtCore/qfileselector.h \ + /usr/include/qt6/QtCore/qfilesystemwatcher.h \ + /usr/include/qt6/QtCore/qflags.h \ + /usr/include/qt6/QtCore/qfloat16.h \ + /usr/include/qt6/QtCore/qforeach.h \ + /usr/include/qt6/QtCore/qfunctionaltools_impl.h \ + /usr/include/qt6/QtCore/qfunctionpointer.h \ + /usr/include/qt6/QtCore/qfuture.h \ + /usr/include/qt6/QtCore/qfuture_impl.h \ + /usr/include/qt6/QtCore/qfutureinterface.h \ + /usr/include/qt6/QtCore/qfuturesynchronizer.h \ + /usr/include/qt6/QtCore/qfuturewatcher.h \ + /usr/include/qt6/QtCore/qgenericatomic.h \ + /usr/include/qt6/QtCore/qglobal.h \ + /usr/include/qt6/QtCore/qglobalstatic.h \ + /usr/include/qt6/QtCore/qhash.h \ + /usr/include/qt6/QtCore/qhashfunctions.h \ + /usr/include/qt6/QtCore/qidentityproxymodel.h \ + /usr/include/qt6/QtCore/qiodevice.h \ + /usr/include/qt6/QtCore/qiodevicebase.h \ + /usr/include/qt6/QtCore/qitemselectionmodel.h \ + /usr/include/qt6/QtCore/qiterable.h \ + /usr/include/qt6/QtCore/qiterator.h \ + /usr/include/qt6/QtCore/qjsonarray.h \ + /usr/include/qt6/QtCore/qjsondocument.h \ + /usr/include/qt6/QtCore/qjsonobject.h \ + /usr/include/qt6/QtCore/qjsonparseerror.h \ + /usr/include/qt6/QtCore/qjsonvalue.h \ + /usr/include/qt6/QtCore/qlatin1stringmatcher.h \ + /usr/include/qt6/QtCore/qlatin1stringview.h \ + /usr/include/qt6/QtCore/qlibrary.h \ + /usr/include/qt6/QtCore/qlibraryinfo.h \ + /usr/include/qt6/QtCore/qline.h \ + /usr/include/qt6/QtCore/qlist.h \ + /usr/include/qt6/QtCore/qlocale.h \ + /usr/include/qt6/QtCore/qlockfile.h \ + /usr/include/qt6/QtCore/qlogging.h \ + /usr/include/qt6/QtCore/qloggingcategory.h \ + /usr/include/qt6/QtCore/qmalloc.h \ + /usr/include/qt6/QtCore/qmap.h \ + /usr/include/qt6/QtCore/qmargins.h \ + /usr/include/qt6/QtCore/qmath.h \ + /usr/include/qt6/QtCore/qmessageauthenticationcode.h \ + /usr/include/qt6/QtCore/qmetacontainer.h \ + /usr/include/qt6/QtCore/qmetaobject.h \ + /usr/include/qt6/QtCore/qmetatype.h \ + /usr/include/qt6/QtCore/qmimedata.h \ + /usr/include/qt6/QtCore/qmimedatabase.h \ + /usr/include/qt6/QtCore/qmimetype.h \ + /usr/include/qt6/QtCore/qminmax.h \ + /usr/include/qt6/QtCore/qmutex.h \ + /usr/include/qt6/QtCore/qnamespace.h \ + /usr/include/qt6/QtCore/qnativeinterface.h \ + /usr/include/qt6/QtCore/qnumeric.h \ + /usr/include/qt6/QtCore/qobject.h \ + /usr/include/qt6/QtCore/qobject_impl.h \ + /usr/include/qt6/QtCore/qobjectcleanuphandler.h \ + /usr/include/qt6/QtCore/qobjectdefs.h \ + /usr/include/qt6/QtCore/qobjectdefs_impl.h \ + /usr/include/qt6/QtCore/qoperatingsystemversion.h \ + /usr/include/qt6/QtCore/qoverload.h \ + /usr/include/qt6/QtCore/qpair.h \ + /usr/include/qt6/QtCore/qparallelanimationgroup.h \ + /usr/include/qt6/QtCore/qpauseanimation.h \ + /usr/include/qt6/QtCore/qpermissions.h \ + /usr/include/qt6/QtCore/qplugin.h \ + /usr/include/qt6/QtCore/qpluginloader.h \ + /usr/include/qt6/QtCore/qpoint.h \ + /usr/include/qt6/QtCore/qpointer.h \ + /usr/include/qt6/QtCore/qprocess.h \ + /usr/include/qt6/QtCore/qprocessordetection.h \ + /usr/include/qt6/QtCore/qpromise.h \ + /usr/include/qt6/QtCore/qproperty.h \ + /usr/include/qt6/QtCore/qpropertyanimation.h \ + /usr/include/qt6/QtCore/qpropertyprivate.h \ + /usr/include/qt6/QtCore/qqueue.h \ + /usr/include/qt6/QtCore/qrandom.h \ + /usr/include/qt6/QtCore/qrangemodel.h \ + /usr/include/qt6/QtCore/qrangemodel_impl.h \ + /usr/include/qt6/QtCore/qreadwritelock.h \ + /usr/include/qt6/QtCore/qrect.h \ + /usr/include/qt6/QtCore/qrefcount.h \ + /usr/include/qt6/QtCore/qregularexpression.h \ + /usr/include/qt6/QtCore/qresource.h \ + /usr/include/qt6/QtCore/qresultstore.h \ + /usr/include/qt6/QtCore/qrunnable.h \ + /usr/include/qt6/QtCore/qsavefile.h \ + /usr/include/qt6/QtCore/qscopedpointer.h \ + /usr/include/qt6/QtCore/qscopedvaluerollback.h \ + /usr/include/qt6/QtCore/qscopeguard.h \ + /usr/include/qt6/QtCore/qsemaphore.h \ + /usr/include/qt6/QtCore/qsequentialanimationgroup.h \ + /usr/include/qt6/QtCore/qsequentialiterable.h \ + /usr/include/qt6/QtCore/qset.h \ + /usr/include/qt6/QtCore/qsettings.h \ + /usr/include/qt6/QtCore/qshareddata.h \ + /usr/include/qt6/QtCore/qshareddata_impl.h \ + /usr/include/qt6/QtCore/qsharedmemory.h \ + /usr/include/qt6/QtCore/qsharedpointer.h \ + /usr/include/qt6/QtCore/qsharedpointer_impl.h \ + /usr/include/qt6/QtCore/qsignalmapper.h \ + /usr/include/qt6/QtCore/qsimd.h \ + /usr/include/qt6/QtCore/qsize.h \ + /usr/include/qt6/QtCore/qsocketnotifier.h \ + /usr/include/qt6/QtCore/qsortfilterproxymodel.h \ + /usr/include/qt6/QtCore/qspan.h \ + /usr/include/qt6/QtCore/qstack.h \ + /usr/include/qt6/QtCore/qstandardpaths.h \ + /usr/include/qt6/QtCore/qstaticlatin1stringmatcher.h \ + /usr/include/qt6/QtCore/qstdlibdetection.h \ + /usr/include/qt6/QtCore/qstorageinfo.h \ + /usr/include/qt6/QtCore/qstring.h \ + /usr/include/qt6/QtCore/qstringalgorithms.h \ + /usr/include/qt6/QtCore/qstringbuilder.h \ + /usr/include/qt6/QtCore/qstringconverter.h \ + /usr/include/qt6/QtCore/qstringconverter_base.h \ + /usr/include/qt6/QtCore/qstringfwd.h \ + /usr/include/qt6/QtCore/qstringlist.h \ + /usr/include/qt6/QtCore/qstringlistmodel.h \ + /usr/include/qt6/QtCore/qstringliteral.h \ + /usr/include/qt6/QtCore/qstringmatcher.h \ + /usr/include/qt6/QtCore/qstringtokenizer.h \ + /usr/include/qt6/QtCore/qstringview.h \ + /usr/include/qt6/QtCore/qswap.h \ + /usr/include/qt6/QtCore/qsysinfo.h \ + /usr/include/qt6/QtCore/qsystemdetection.h \ + /usr/include/qt6/QtCore/qsystemsemaphore.h \ + /usr/include/qt6/QtCore/qtaggedpointer.h \ + /usr/include/qt6/QtCore/qtclasshelpermacros.h \ + /usr/include/qt6/QtCore/qtconfiginclude.h \ + /usr/include/qt6/QtCore/qtconfigmacros.h \ + /usr/include/qt6/QtCore/qtcore-config.h \ + /usr/include/qt6/QtCore/qtcoreexports.h \ + /usr/include/qt6/QtCore/qtcoreglobal.h \ + /usr/include/qt6/QtCore/qtcoreversion.h \ + /usr/include/qt6/QtCore/qtdeprecationdefinitions.h \ + /usr/include/qt6/QtCore/qtdeprecationmarkers.h \ + /usr/include/qt6/QtCore/qtemporarydir.h \ + /usr/include/qt6/QtCore/qtemporaryfile.h \ + /usr/include/qt6/QtCore/qtenvironmentvariables.h \ + /usr/include/qt6/QtCore/qtestsupport_core.h \ + /usr/include/qt6/QtCore/qtextboundaryfinder.h \ + /usr/include/qt6/QtCore/qtextstream.h \ + /usr/include/qt6/QtCore/qtformat_impl.h \ + /usr/include/qt6/QtCore/qthread.h \ + /usr/include/qt6/QtCore/qthreadpool.h \ + /usr/include/qt6/QtCore/qthreadstorage.h \ + /usr/include/qt6/QtCore/qtimeline.h \ + /usr/include/qt6/QtCore/qtimer.h \ + /usr/include/qt6/QtCore/qtimezone.h \ + /usr/include/qt6/QtCore/qtipccommon.h \ + /usr/include/qt6/QtCore/qtmetamacros.h \ + /usr/include/qt6/QtCore/qtmocconstants.h \ + /usr/include/qt6/QtCore/qtnoop.h \ + /usr/include/qt6/QtCore/qtpreprocessorsupport.h \ + /usr/include/qt6/QtCore/qtranslator.h \ + /usr/include/qt6/QtCore/qtransposeproxymodel.h \ + /usr/include/qt6/QtCore/qtresource.h \ + /usr/include/qt6/QtCore/qtsan_impl.h \ + /usr/include/qt6/QtCore/qtsymbolmacros.h \ + /usr/include/qt6/QtCore/qttranslation.h \ + /usr/include/qt6/QtCore/qttypetraits.h \ + /usr/include/qt6/QtCore/qtversion.h \ + /usr/include/qt6/QtCore/qtversionchecks.h \ + /usr/include/qt6/QtCore/qtypeinfo.h \ + /usr/include/qt6/QtCore/qtyperevision.h \ + /usr/include/qt6/QtCore/qtypes.h \ + /usr/include/qt6/QtCore/qurl.h \ + /usr/include/qt6/QtCore/qurlquery.h \ + /usr/include/qt6/QtCore/qutf8stringview.h \ + /usr/include/qt6/QtCore/quuid.h \ + /usr/include/qt6/QtCore/qvariant.h \ + /usr/include/qt6/QtCore/qvariantanimation.h \ + /usr/include/qt6/QtCore/qvarianthash.h \ + /usr/include/qt6/QtCore/qvariantlist.h \ + /usr/include/qt6/QtCore/qvariantmap.h \ + /usr/include/qt6/QtCore/qvarlengtharray.h \ + /usr/include/qt6/QtCore/qvector.h \ + /usr/include/qt6/QtCore/qversionnumber.h \ + /usr/include/qt6/QtCore/qversiontagging.h \ + /usr/include/qt6/QtCore/qwaitcondition.h \ + /usr/include/qt6/QtCore/qwineventnotifier.h \ + /usr/include/qt6/QtCore/qxmlstream.h \ + /usr/include/qt6/QtCore/qxpfunctional.h \ + /usr/include/qt6/QtCore/qxptype_traits.h \ + /usr/include/qt6/QtCore/qyieldcpu.h \ + /usr/include/qt6/QtTest/QtTest \ + /usr/include/qt6/QtTest/QtTestDepends \ + /usr/include/qt6/QtTest/qabstractitemmodeltester.h \ + /usr/include/qt6/QtTest/qbenchmark.h \ + /usr/include/qt6/QtTest/qbenchmarkmetric.h \ + /usr/include/qt6/QtTest/qsignalspy.h \ + /usr/include/qt6/QtTest/qtest.h \ + /usr/include/qt6/QtTest/qtestassert.h \ + /usr/include/qt6/QtTest/qtestcase.h \ + /usr/include/qt6/QtTest/qtestdata.h \ + /usr/include/qt6/QtTest/qtesteventloop.h \ + /usr/include/qt6/QtTest/qtestsystem.h \ + /usr/include/qt6/QtTest/qtesttostring.h \ + /usr/include/qt6/QtTest/qttestexports.h \ + /usr/include/qt6/QtTest/qttestglobal.h \ + /usr/include/qt6/QtTest/qttestlib-config.h \ + /usr/include/qt6/QtTest/qttestversion.h \ + /usr/include/sched.h \ + /usr/include/semaphore.h \ + /usr/include/stdc-predef.h \ + /usr/include/stdio.h \ + /usr/include/string.h \ + /usr/include/strings.h \ + /usr/include/sys/cdefs.h \ + /usr/include/sys/select.h \ + /usr/include/sys/single_threaded.h \ + /usr/include/sys/syscall.h \ + /usr/include/sys/time.h \ + /usr/include/sys/types.h \ + /usr/include/syscall.h \ + /usr/include/time.h \ + /usr/include/unistd.h \ + /usr/include/wchar.h \ + /usr/include/wctype.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/adxintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/amxavx512intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/amxbf16intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/amxcomplexintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/amxfp16intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/amxfp8intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/amxint8intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/amxmovrsintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/amxtf32intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/amxtileintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/amxtransposeintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2-512bf16intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2-512convertintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2-512mediaintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2-512minmaxintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2-512satcvtintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2bf16intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2convertintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2copyintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2mediaintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2minmaxintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2satcvtintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx2intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512bf16intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512bf16vlintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512bitalgintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512bitalgvlintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512bwintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512cdintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512dqintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512fintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512fp16intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512fp16vlintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512ifmaintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512ifmavlintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vbmi2intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vbmi2vlintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vbmiintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vbmivlintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vlbwintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vldqintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vlintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vnniintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vnnivlintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vp2intersectintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vp2intersectvlintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vpopcntdqintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vpopcntdqvlintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avxifmaintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avxintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avxneconvertintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avxvnniint16intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avxvnniint8intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avxvnniintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/bmi2intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/bmiintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/cetintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/cldemoteintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/clflushoptintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/clwbintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/clzerointrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/cmpccxaddintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/emmintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/enqcmdintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/f16cintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/fmaintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/fxsrintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/gfniintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/hresetintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/ia32intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/immintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/keylockerintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/limits.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/lwpintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/lzcntintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/mm_malloc.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/mmintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/movdirintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/movrsintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/mwaitintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/mwaitxintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/pconfigintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/pkuintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/pmmintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/popcntintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/prfchiintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/prfchwintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/raointintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/rdseedintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/rtmintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/serializeintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/sgxintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/sha512intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/shaintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/sm3intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/sm4intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/smmintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/stdarg.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/stdbool.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/stddef.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/stdint.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/syslimits.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/tbmintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/tmmintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/tsxldtrkintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/uintrintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/usermsrintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/vaesintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/vpclmulqdqintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/waitpkgintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/wbnoinvdintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/wmmintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/x86gprintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/xmmintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/xsavecintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/xsaveintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/xsaveoptintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/xsavesintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/xtestintrin.h \ + /usr/lib64/cmake/Qt6/Qt6Config.cmake \ + /usr/lib64/cmake/Qt6/Qt6ConfigExtras.cmake \ + /usr/lib64/cmake/Qt6/Qt6ConfigVersion.cmake \ + /usr/lib64/cmake/Qt6/Qt6ConfigVersionImpl.cmake \ + /usr/lib64/cmake/Qt6/Qt6Dependencies.cmake \ + /usr/lib64/cmake/Qt6/Qt6Targets.cmake \ + /usr/lib64/cmake/Qt6/Qt6VersionlessAliasTargets.cmake \ + /usr/lib64/cmake/Qt6/QtFeature.cmake \ + /usr/lib64/cmake/Qt6/QtFeatureCommon.cmake \ + /usr/lib64/cmake/Qt6/QtInstallPaths.cmake \ + /usr/lib64/cmake/Qt6/QtPublicAndroidHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicAppleHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicCMakeEarlyPolicyHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicCMakeHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicCMakeVersionHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicDependencyHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicExternalProjectHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicFinalizerHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicFindPackageHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicGitHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicPluginHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicPluginHelpers_v2.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomAttributionHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomBuildToolHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomCommonGenerationHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomCpeHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomCycloneDXHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomDepHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomDocumentNamespaceHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomExternalReferenceHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomFileHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomGenerationCycloneDXHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomGenerationHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomLicenseHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomOpsHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomPurlHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomPythonHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomQtEntityHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomRelationshipHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomSystemDepHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicTargetHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicTestHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicToolHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicWalkLibsHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicWindowsHelpers.cmake \ + /usr/lib64/cmake/Qt6Test/Qt6TestAdditionalTargetInfo.cmake \ + /usr/lib64/cmake/Qt6Test/Qt6TestConfig.cmake \ + /usr/lib64/cmake/Qt6Test/Qt6TestConfigVersion.cmake \ + /usr/lib64/cmake/Qt6Test/Qt6TestConfigVersionImpl.cmake \ + /usr/lib64/cmake/Qt6Test/Qt6TestDependencies.cmake \ + /usr/lib64/cmake/Qt6Test/Qt6TestTargets-relwithdebinfo.cmake \ + /usr/lib64/cmake/Qt6Test/Qt6TestTargets.cmake \ + /usr/lib64/cmake/Qt6Test/Qt6TestVersionlessAliasTargets.cmake \ + /usr/lib64/cmake/Qt6Test/QtTestProperties.cmake \ + /usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake \ + /usr/share/cmake/Modules/CheckCXXCompilerFlag.cmake \ + /usr/bin/cmake diff --git a/build-linux/tests/test_sequence_detector_autogen/include/test_sequence_detector.moc b/build-linux/tests/test_sequence_detector_autogen/include/test_sequence_detector.moc new file mode 100644 index 00000000..eb627294 --- /dev/null +++ b/build-linux/tests/test_sequence_detector_autogen/include/test_sequence_detector.moc @@ -0,0 +1,120 @@ +/**************************************************************************** +** Meta object code from reading C++ file 'test_sequence_detector.cpp' +** +** Created by: The Qt Meta Object Compiler version 69 (Qt 6.10.3) +** +** WARNING! All changes made in this file will be lost! +*****************************************************************************/ + +#include + +#include + +#include + + +#include +#if !defined(Q_MOC_OUTPUT_REVISION) +#error "The header file 'test_sequence_detector.cpp' doesn't include ." +#elif Q_MOC_OUTPUT_REVISION != 69 +#error "This file was generated using the moc from 6.10.3. It" +#error "cannot be used with the include files from this version of Qt." +#error "(The moc has changed too much.)" +#endif + +#ifndef Q_CONSTINIT +#define Q_CONSTINIT +#endif + +QT_WARNING_PUSH +QT_WARNING_DISABLE_DEPRECATED +QT_WARNING_DISABLE_GCC("-Wuseless-cast") +namespace { +struct qt_meta_tag_ZN20TestSequenceDetectorE_t {}; +} // unnamed namespace + +template <> constexpr inline auto TestSequenceDetector::qt_create_metaobjectdata() +{ + namespace QMC = QtMocConstants; + QtMocHelpers::StringRefStorage qt_stringData { + "TestSequenceDetector", + "testGeneratePattern", + "", + "testExtractFrameNumber", + "testIsSequenceFile", + "testDetectSequences_basic" + }; + + QtMocHelpers::UintData qt_methods { + // Slot 'testGeneratePattern' + QtMocHelpers::SlotData(1, 2, QMC::AccessPrivate, QMetaType::Void), + // Slot 'testExtractFrameNumber' + QtMocHelpers::SlotData(3, 2, QMC::AccessPrivate, QMetaType::Void), + // Slot 'testIsSequenceFile' + QtMocHelpers::SlotData(4, 2, QMC::AccessPrivate, QMetaType::Void), + // Slot 'testDetectSequences_basic' + QtMocHelpers::SlotData(5, 2, QMC::AccessPrivate, QMetaType::Void), + }; + QtMocHelpers::UintData qt_properties { + }; + QtMocHelpers::UintData qt_enums { + }; + return QtMocHelpers::metaObjectData(QMC::MetaObjectFlag{}, qt_stringData, + qt_methods, qt_properties, qt_enums); +} +Q_CONSTINIT const QMetaObject TestSequenceDetector::staticMetaObject = { { + QMetaObject::SuperData::link(), + qt_staticMetaObjectStaticContent.stringdata, + qt_staticMetaObjectStaticContent.data, + qt_static_metacall, + nullptr, + qt_staticMetaObjectRelocatingContent.metaTypes, + nullptr +} }; + +void TestSequenceDetector::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) +{ + auto *_t = static_cast(_o); + if (_c == QMetaObject::InvokeMetaMethod) { + switch (_id) { + case 0: _t->testGeneratePattern(); break; + case 1: _t->testExtractFrameNumber(); break; + case 2: _t->testIsSequenceFile(); break; + case 3: _t->testDetectSequences_basic(); break; + default: ; + } + } + (void)_a; +} + +const QMetaObject *TestSequenceDetector::metaObject() const +{ + return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject; +} + +void *TestSequenceDetector::qt_metacast(const char *_clname) +{ + if (!_clname) return nullptr; + if (!strcmp(_clname, qt_staticMetaObjectStaticContent.strings)) + return static_cast(this); + return QObject::qt_metacast(_clname); +} + +int TestSequenceDetector::qt_metacall(QMetaObject::Call _c, int _id, void **_a) +{ + _id = QObject::qt_metacall(_c, _id, _a); + if (_id < 0) + return _id; + if (_c == QMetaObject::InvokeMetaMethod) { + if (_id < 4) + qt_static_metacall(this, _c, _id, _a); + _id -= 4; + } + if (_c == QMetaObject::RegisterMethodArgumentMetaType) { + if (_id < 4) + *reinterpret_cast(_a[0]) = QMetaType(); + _id -= 4; + } + return _id; +} +QT_WARNING_POP diff --git a/build-linux/tests/test_sequence_detector_autogen/moc_predefs.h b/build-linux/tests/test_sequence_detector_autogen/moc_predefs.h new file mode 100644 index 00000000..2c4c79c9 --- /dev/null +++ b/build-linux/tests/test_sequence_detector_autogen/moc_predefs.h @@ -0,0 +1,502 @@ +#define __DBL_MIN_EXP__ (-1021) +#define __LDBL_MANT_DIG__ 64 +#define __cpp_nontype_template_parameter_auto 201606L +#define __UINT_LEAST16_MAX__ 0xffff +#define __FLT16_HAS_QUIET_NAN__ 1 +#define __ATOMIC_ACQUIRE 2 +#define QT_TESTCASE_BUILDDIR "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests" +#define __FLT128_MAX_10_EXP__ 4932 +#define __FLT_MIN__ 1.17549435082228750796873653722224568e-38F +#define __GCC_IEC_559_COMPLEX 2 +#define __cpp_aggregate_nsdmi 201304L +#define __UINT_LEAST8_TYPE__ unsigned char +#define __SIZEOF_FLOAT80__ 16 +#define __BFLT16_DENORM_MIN__ 9.18354961579912115600575419704879436e-41BF16 +#define __cpp_impl_three_way_comparison 201907L +#define __INTMAX_C(c) c ## L +#define __CHAR_BIT__ 8 +#define __cpp_designated_initializers 201707L +#define __UINT8_MAX__ 0xff +#define __SCHAR_WIDTH__ 8 +#define __WINT_MAX__ 0xffffffffU +#define __FLT32_MIN_EXP__ (-125) +#define __cpp_static_assert 201411L +#define __BFLT16_MIN_10_EXP__ (-37) +#define __cpp_inheriting_constructors 201511L +#define __ORDER_LITTLE_ENDIAN__ 1234 +#define __WCHAR_MAX__ 0x7fffffff +#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_2 1 +#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_4 1 +#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_8 1 +#define __GCC_ATOMIC_CHAR_LOCK_FREE 2 +#define __GCC_IEC_559 2 +#define __FLT32X_DECIMAL_DIG__ 17 +#define TLRENDER_OIIO 1 +#define __FLT_EVAL_METHOD__ 0 +#define __cpp_binary_literals 201304L +#define __FLT64_DECIMAL_DIG__ 17 +#define __cpp_noexcept_function_type 201510L +#define __GCC_ATOMIC_CHAR32_T_LOCK_FREE 2 +#define __cpp_variadic_templates 200704L +#define __UINT_FAST64_MAX__ 0xffffffffffffffffUL +#define __SIG_ATOMIC_TYPE__ int +#define __DBL_MIN_10_EXP__ (-307) +#define __FINITE_MATH_ONLY__ 0 +#define __cpp_variable_templates 201304L +#define __FLT32X_MAX_EXP__ 1024 +#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_1 1 +#define __FLT32_HAS_DENORM__ 1 +#define __UINT_FAST8_MAX__ 0xff +#define __cpp_rvalue_reference 200610L +#define __cpp_nested_namespace_definitions 201411L +#define __DEC64_MAX_EXP__ 385 +#define __INT8_C(c) c +#define __LDBL_HAS_INFINITY__ 1 +#define __INT_LEAST8_WIDTH__ 8 +#define __cpp_variadic_using 201611L +#define __UINT_LEAST64_MAX__ 0xffffffffffffffffUL +#define __INT_LEAST8_MAX__ 0x7f +#define __cpp_attributes 200809L +#define __cpp_capture_star_this 201603L +#define __SHRT_MAX__ 0x7fff +#define __LDBL_MAX__ 1.18973149535723176502126385303097021e+4932L +#define __cpp_impl_coroutine 201902L +#define __FLT64X_MAX_10_EXP__ 4932 +#define __cpp_if_constexpr 201606L +#define __BFLT16_MAX_10_EXP__ 38 +#define __BFLT16_MAX_EXP__ 128 +#define __LDBL_IS_IEC_60559__ 1 +#define QT_NO_DEBUG 1 +#define __FLT64X_HAS_QUIET_NAN__ 1 +#define QT_TESTLIB_LIB 1 +#define TLRENDER_SDL2 1 +#define __UINT_LEAST8_MAX__ 0xff +#define __GCC_ATOMIC_BOOL_LOCK_FREE 2 +#define __FLT128_DENORM_MIN__ 6.47517511943802511092443895822764655e-4966F128 +#define __UINTMAX_TYPE__ long unsigned int +#define __cpp_nsdmi 200809L +#define __BFLT16_DECIMAL_DIG__ 4 +#define __linux 1 +#define __DEC32_EPSILON__ 1E-6DF +#define __FLT_EVAL_METHOD_TS_18661_3__ 0 +#define __UINT32_MAX__ 0xffffffffU +#define __GXX_EXPERIMENTAL_CXX0X__ 1 +#define __DBL_DENORM_MIN__ double(4.94065645841246544176568792868221372e-324L) +#define __FLT128_MIN_EXP__ (-16381) +#define __DEC64X_MAX_EXP__ 6145 +#define __WINT_MIN__ 0U +#define __FLT128_MIN_10_EXP__ (-4931) +#define __FLT32X_IS_IEC_60559__ 1 +#define __INT_LEAST16_WIDTH__ 16 +#define __SCHAR_MAX__ 0x7f +#define __FLT128_MANT_DIG__ 113 +#define __WCHAR_MIN__ (-__WCHAR_MAX__ - 1) +#define __INT64_C(c) c ## L +#define __cpp_impl_destroying_delete 201806L +#define __GCC_ATOMIC_POINTER_LOCK_FREE 2 +#define TLRENDER_JPEG 1 +#define __ATOMIC_SEQ_CST 5 +#define __unix 1 +#define __INT_LEAST64_MAX__ 0x7fffffffffffffffL +#define __FLT32X_MANT_DIG__ 53 +#define __GCC_ATOMIC_CHAR16_T_LOCK_FREE 2 +#define __cpp_aligned_new 201606L +#define __FLT32_MAX_10_EXP__ 38 +#define __FLT64X_EPSILON__ 1.08420217248550443400745280086994171e-19F64x +#define __STDC_HOSTED__ 1 +#define __DEC64_MIN_EXP__ (-382) +#define TLRENDER_PNG 1 +#define __cpp_decltype_auto 201304L +#define __DBL_DIG__ 15 +#define __STDC_EMBED_EMPTY__ 2 +#define __FLT_EPSILON__ 1.19209289550781250000000000000000000e-7F +#define __cpp_char8_t 202207L +#define __GXX_WEAK__ 1 +#define __SHRT_WIDTH__ 16 +#define __FLT32_IS_IEC_60559__ 1 +#define __LDBL_MIN__ 3.36210314311209350626267781732175260e-4932L +#define __DBL_IS_IEC_60559__ 1 +#define __DEC32_MAX__ 9.999999E96DF +#define __CHAR8_TYPE__ unsigned char +#define __cpp_threadsafe_static_init 200806L +#define __cpp_enumerator_attributes 201411L +#define TLRENDER_EXR 1 +#define __FLT64X_DENORM_MIN__ 3.64519953188247460252840593361941982e-4951F64x +#define __FLT32X_HAS_INFINITY__ 1 +#define __unix__ 1 +#define __INT_WIDTH__ 32 +#define __STDC_IEC_559__ 1 +#define __STDC_ISO_10646__ 201706L +#define __GCC_ATOMIC_CHAR8_T_LOCK_FREE 2 +#define __DECIMAL_DIG__ 21 +#define __STDC_IEC_559_COMPLEX__ 1 +#define __FLT64_EPSILON__ 2.22044604925031308084726333618164062e-16F64 +#define __gnu_linux__ 1 +#define __INT16_MAX__ 0x7fff +#define __FLT64_MIN_EXP__ (-1021) +#define __cpp_using_enum 201907L +#define __DEC64X_EPSILON__ 1E-33D64x +#define __FLT64X_MIN_10_EXP__ (-4931) +#define __LDBL_HAS_QUIET_NAN__ 1 +#define __FLT16_MIN_EXP__ (-13) +#define __FLT64_MANT_DIG__ 53 +#define __cpp_consteval 202211L +#define __FLT64X_MANT_DIG__ 64 +#define FTK_API_GL_4_1 1 +#define __BFLT16_DIG__ 2 +#define __GNUC__ 15 +#define __GXX_RTTI 1 +#define TLRENDER_FFMPEG_PLUGIN 1 +#define __MMX__ 1 +#define __FLT_HAS_DENORM__ 1 +#define __SIZEOF_LONG_DOUBLE__ 16 +#define __BIGGEST_ALIGNMENT__ 16 +#define __STDC_UTF_16__ 1 +#define __FLT64_MAX_10_EXP__ 308 +#define __BFLT16_IS_IEC_60559__ 0 +#define __FLT16_MAX_10_EXP__ 4 +#define __cpp_delegating_constructors 200604L +#define __DBL_MAX__ double(1.79769313486231570814527423731704357e+308L) +#define __cpp_raw_strings 200710L +#define __INT_FAST32_MAX__ 0x7fffffffffffffffL +#define __DBL_HAS_INFINITY__ 1 +#define __INT64_MAX__ 0x7fffffffffffffffL +#define __SIZEOF_FLOAT__ 4 +#define __HAVE_SPECULATION_SAFE_VALUE 1 +#define __cpp_fold_expressions 201603L +#define __DEC32_MIN_EXP__ (-94) +#define __INTPTR_WIDTH__ 64 +#define __UINT_LEAST32_MAX__ 0xffffffffU +#define __FLT32X_HAS_DENORM__ 1 +#define __INT_FAST16_TYPE__ long int +#define __MMX_WITH_SSE__ 1 +#define __LDBL_HAS_DENORM__ 1 +#define __SEG_GS 1 +#define __BFLT16_EPSILON__ 7.81250000000000000000000000000000000e-3BF16 +#define __cplusplus 202002L +#define __cpp_ref_qualifiers 200710L +#define __DEC32_MIN__ 1E-95DF +#define __DEPRECATED 1 +#define __cpp_rvalue_references 200610L +#define __DBL_MAX_EXP__ 1024 +#define __WCHAR_WIDTH__ 32 +#define __FLT32_MAX__ 3.40282346638528859811704183484516925e+38F32 +#define __DEC128_EPSILON__ 1E-33DL +#define __FLT16_DECIMAL_DIG__ 5 +#define __SSE2_MATH__ 1 +#define __ATOMIC_HLE_RELEASE 131072 +#define __PTRDIFF_MAX__ 0x7fffffffffffffffL +#define __amd64 1 +#define __DEC64X_MAX__ 9.999999999999999999999999999999999E6144D64x +#define __ATOMIC_HLE_ACQUIRE 65536 +#define __GNUG__ 15 +#define __LONG_LONG_MAX__ 0x7fffffffffffffffLL +#define __SIZEOF_SIZE_T__ 8 +#define __BFLT16_HAS_INFINITY__ 1 +#define __FLT64X_MIN_EXP__ (-16381) +#define __SIZEOF_WINT_T__ 4 +#define __FLT32X_DIG__ 15 +#define __LONG_LONG_WIDTH__ 64 +#define QT_TESTCASE_SOURCEDIR "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests" +#define __cpp_initializer_lists 200806L +#define __FLT32_MAX_EXP__ 128 +#define ABI_ID "ELF" +#define __cpp_hex_float 201603L +#define __GXX_ABI_VERSION 1020 +#define __FLT_MIN_EXP__ (-125) +#define __GCC_HAVE_DWARF2_CFI_ASM 1 +#define TLRENDER_OCIO 1 +#define __x86_64 1 +#define __cpp_lambdas 200907L +#define __INT_FAST64_TYPE__ long int +#define __BFLT16_MAX__ 3.38953138925153547590470800371487867e+38BF16 +#define __FLT64_DENORM_MIN__ 4.94065645841246544176568792868221372e-324F64 +#define __cpp_template_auto 201606L +#define __FLT16_DENORM_MIN__ 5.96046447753906250000000000000000000e-8F16 +#define __FLT128_EPSILON__ 1.92592994438723585305597794258492732e-34F128 +#define __FLT64X_NORM_MAX__ 1.18973149535723176502126385303097021e+4932F64x +#define __SIZEOF_POINTER__ 8 +#define __SIZE_TYPE__ long unsigned int +#define __LP64__ 1 +#define __DBL_HAS_QUIET_NAN__ 1 +#define __FLT32X_EPSILON__ 2.22044604925031308084726333618164062e-16F32x +#define __LDBL_MAX_EXP__ 16384 +#define __DECIMAL_BID_FORMAT__ 1 +#define __FLT64_MIN_10_EXP__ (-307) +#define __FLT16_MIN_10_EXP__ (-4) +#define __FLT64X_DECIMAL_DIG__ 21 +#define __DEC128_MIN__ 1E-6143DL +#define __REGISTER_PREFIX__ +#define __UINT16_MAX__ 0xffff +#define __FLT128_HAS_INFINITY__ 1 +#define __FLT32_MIN__ 1.17549435082228750796873653722224568e-38F32 +#define __UINT8_TYPE__ unsigned char +#define __FLT_DIG__ 6 +#define __NO_INLINE__ 1 +#define __DEC_EVAL_METHOD__ 2 +#define __FLT_MANT_DIG__ 24 +#define __LDBL_DECIMAL_DIG__ 21 +#define __VERSION__ "15.2.1 20260123 (Red Hat 15.2.1-7)" +#define __UINT64_C(c) c ## UL +#define __cpp_unicode_characters 201411L +#define __DEC64X_MIN__ 1E-6143D64x +#define _STDC_PREDEF_H 1 +#define __INT_LEAST32_MAX__ 0x7fffffff +#define __GCC_ATOMIC_INT_LOCK_FREE 2 +#define __FLT128_MAX_EXP__ 16384 +#define __cpp_conditional_explicit 201806L +#define __FLT32_MANT_DIG__ 24 +#define __cpp_decltype 200707L +#define __FLOAT_WORD_ORDER__ __ORDER_LITTLE_ENDIAN__ +#define SIZEOF_DPTR (sizeof(void*)) +#define __FLT32X_MIN_EXP__ (-1021) +#define __cpp_aggregate_paren_init 201902L +#define __STDC_IEC_60559_COMPLEX__ 201404L +#define __cpp_aggregate_bases 201603L +#define __BFLT16_MIN__ 1.17549435082228750796873653722224568e-38BF16 +#define __FLT128_HAS_DENORM__ 1 +#define __FLT32_DECIMAL_DIG__ 9 +#define __FLT128_DIG__ 33 +#define __INT32_C(c) c +#define __DEC64_EPSILON__ 1E-15DD +#define __ORDER_PDP_ENDIAN__ 3412 +#define __DEC128_MIN_EXP__ (-6142) +#define __DEC128_MAX__ 9.999999999999999999999999999999999E6144DL +#define __cpp_constinit 201907L +#define __INT_FAST32_TYPE__ long int +#define __UINT_LEAST16_TYPE__ short unsigned int +#define __DEC64X_MANT_DIG__ 34 +#define __DEC128_MAX_EXP__ 6145 +#define unix 1 +#define __DBL_HAS_DENORM__ 1 +#define __cpp_rtti 199711L +#define __UINT64_MAX__ 0xffffffffffffffffUL +#define __FLT_IS_IEC_60559__ 1 +#define __GNUC_WIDE_EXECUTION_CHARSET_NAME "UTF-32LE" +#define __FLT64X_DIG__ 18 +#define __INT8_TYPE__ signed char +#define __cpp_digit_separators 201309L +#define __ELF__ 1 +#define __GCC_ASM_FLAG_OUTPUTS__ 1 +#define __UINT32_TYPE__ unsigned int +#define __BFLT16_HAS_QUIET_NAN__ 1 +#define __FLT_RADIX__ 2 +#define __INT_LEAST16_TYPE__ short int +#define __LDBL_EPSILON__ 1.08420217248550443400745280086994171e-19L +#define __UINTMAX_C(c) c ## UL +#define __GNUC_RH_RELEASE__ 7 +#define __FLT16_DIG__ 3 +#define __k8 1 +#define __FLT32X_MIN__ 2.22507385850720138309023271733240406e-308F32x +#define __SIG_ATOMIC_MAX__ 0x7fffffff +#define __cpp_constexpr 202002L +#define __GCC_ATOMIC_WCHAR_T_LOCK_FREE 2 +#define __USER_LABEL_PREFIX__ +#define __STDC_IEC_60559_BFP__ 201404L +#define __SIZEOF_PTRDIFF_T__ 8 +#define __FLT64X_HAS_INFINITY__ 1 +#define __SIZEOF_LONG__ 8 +#define __LDBL_DIG__ 18 +#define __FLT64_IS_IEC_60559__ 1 +#define __x86_64__ 1 +#define __FLT16_IS_IEC_60559__ 1 +#define __FLT16_MAX_EXP__ 16 +#define __DEC32_SUBNORMAL_MIN__ 0.000001E-95DF +#define __STDC_EMBED_FOUND__ 1 +#define __INT_FAST16_MAX__ 0x7fffffffffffffffL +#define __GCC_CONSTRUCTIVE_SIZE 64 +#define __FLT64_DIG__ 15 +#define __UINT_FAST32_MAX__ 0xffffffffffffffffUL +#define __UINT_LEAST64_TYPE__ long unsigned int +#define __FLT16_EPSILON__ 9.76562500000000000000000000000000000e-4F16 +#define __FLT_HAS_QUIET_NAN__ 1 +#define __FLT_MAX_10_EXP__ 38 +#define __FLT64X_HAS_DENORM__ 1 +#define __DEC128_SUBNORMAL_MIN__ 0.000000000000000000000000000000001E-6143DL +#define __FLT_HAS_INFINITY__ 1 +#define __GNUC_EXECUTION_CHARSET_NAME "UTF-8" +#define __cpp_unicode_literals 200710L +#define __UINT_FAST16_TYPE__ long unsigned int +#define __DEC64_MAX__ 9.999999999999999E384DD +#define __STDC_EMBED_NOT_FOUND__ 0 +#define __INT_FAST32_WIDTH__ 64 +#define __CHAR16_TYPE__ short unsigned int +#define __PRAGMA_REDEFINE_EXTNAME 1 +#define __DEC64X_SUBNORMAL_MIN__ 0.000000000000000000000000000000001E-6143D64x +#define __SIZE_WIDTH__ 64 +#define __SEG_FS 1 +#define __INT_LEAST16_MAX__ 0x7fff +#define __FLT16_NORM_MAX__ 6.55040000000000000000000000000000000e+4F16 +#define __DEC64_MANT_DIG__ 16 +#define __FLT32_DENORM_MIN__ 1.40129846432481707092372958328991613e-45F32 +#define __SIG_ATOMIC_WIDTH__ 32 +#define __GCC_DESTRUCTIVE_SIZE 64 +#define __INT_LEAST64_TYPE__ long int +#define __INT16_TYPE__ short int +#define __INT_LEAST8_TYPE__ signed char +#define __FLT16_MAX__ 6.55040000000000000000000000000000000e+4F16 +#define __FLT128_MIN__ 3.36210314311209350626267781732175260e-4932F128 +#define __cpp_structured_bindings 201606L +#define __SIZEOF_INT__ 4 +#define __DEC32_MAX_EXP__ 97 +#define __INT_FAST8_MAX__ 0x7f +#define __FLT128_MAX__ 1.18973149535723176508575932662800702e+4932F128 +#define __INTPTR_MAX__ 0x7fffffffffffffffL +#define __cpp_sized_deallocation 201309L +#define __cpp_guaranteed_copy_elision 201606L +#define linux 1 +#define __FLT64_HAS_QUIET_NAN__ 1 +#define __FLT32_MIN_10_EXP__ (-37) +#define __EXCEPTIONS 1 +#define __UINT16_C(c) c +#define __PTRDIFF_WIDTH__ 64 +#define __cpp_range_based_for 201603L +#define __INT_FAST16_WIDTH__ 64 +#define __FLT64_HAS_INFINITY__ 1 +#define __FLT64X_MAX__ 1.18973149535723176502126385303097021e+4932F64x +#define __FLT16_HAS_INFINITY__ 1 +#define __STDCPP_DEFAULT_NEW_ALIGNMENT__ 16 +#define __SIG_ATOMIC_MIN__ (-__SIG_ATOMIC_MAX__ - 1) +#define __code_model_small__ 1 +#define __GCC_ATOMIC_LONG_LOCK_FREE 2 +#define __cpp_nontype_template_args 201911L +#define __DEC32_MANT_DIG__ 7 +#define __k8__ 1 +#define __INTPTR_TYPE__ long int +#define __UINT16_TYPE__ short unsigned int +#define __WCHAR_TYPE__ int +#define __UINTPTR_MAX__ 0xffffffffffffffffUL +#define __INT_FAST64_WIDTH__ 64 +#define __cpp_nontype_template_parameter_class 201806L +#define __cpp_concepts 202002L +#define __INT_FAST64_MAX__ 0x7fffffffffffffffL +#define __GCC_ATOMIC_TEST_AND_SET_TRUEVAL 1 +#define __FLT_NORM_MAX__ 3.40282346638528859811704183484516925e+38F +#define __FLT32_HAS_INFINITY__ 1 +#define __FLT64X_MAX_EXP__ 16384 +#define __UINT_FAST64_TYPE__ long unsigned int +#define __cpp_constexpr_in_decltype 201711L +#define __cpp_inline_variables 201606L +#define __BFLT16_MIN_EXP__ (-125) +#define __INT_MAX__ 0x7fffffff +#define __linux__ 1 +#define __INT64_TYPE__ long int +#define __FLT_MAX_EXP__ 128 +#define __ORDER_BIG_ENDIAN__ 4321 +#define __DBL_MANT_DIG__ 53 +#define QT_CORE_LIB 1 +#define __SIZEOF_FLOAT128__ 16 +#define __BFLT16_MANT_DIG__ 8 +#define __DEC64_MIN__ 1E-383DD +#define __WINT_TYPE__ unsigned int +#define __UINT_LEAST32_TYPE__ unsigned int +#define __SIZEOF_SHORT__ 2 +#define __FLT32_NORM_MAX__ 3.40282346638528859811704183484516925e+38F32 +#define __SSE__ 1 +#define __LDBL_MIN_EXP__ (-16381) +#define __FLT64_MAX__ 1.79769313486231570814527423731704357e+308F64 +#define __DEC64X_MIN_EXP__ (-6142) +#define __amd64__ 1 +#define __WINT_WIDTH__ 32 +#define __INT_LEAST64_WIDTH__ 64 +#define __FLT32X_MAX_10_EXP__ 308 +#define __cpp_namespace_attributes 201411L +#define __SIZEOF_INT128__ 16 +#define __FLT16_MIN__ 6.10351562500000000000000000000000000e-5F16 +#define __FLT64X_IS_IEC_60559__ 1 +#define __GXX_CONSTEXPR_ASM__ 1 +#define __LDBL_MAX_10_EXP__ 4932 +#define __ATOMIC_RELAXED 0 +#define __DBL_EPSILON__ double(2.22044604925031308084726333618164062e-16L) +#define __INT_LEAST32_TYPE__ int +#define _LP64 1 +#define __UINT8_C(c) c +#define __FLT64_MAX_EXP__ 1024 +#define __cpp_return_type_deduction 201304L +#define __SIZEOF_WCHAR_T__ 4 +#define __GNUC_PATCHLEVEL__ 1 +#define __FLT128_NORM_MAX__ 1.18973149535723176508575932662800702e+4932F128 +#define __FLT64_NORM_MAX__ 1.79769313486231570814527423731704357e+308F64 +#define __FLT128_HAS_QUIET_NAN__ 1 +#define __INTMAX_MAX__ 0x7fffffffffffffffL +#define TLRENDER_TIFF 1 +#define __INT_FAST8_TYPE__ signed char +#define __FLT64X_MIN__ 3.36210314311209350626267781732175260e-4932F64x +#define __STDCPP_THREADS__ 1 +#define __BFLT16_HAS_DENORM__ 1 +#define __GNUC_STDC_INLINE__ 1 +#define __FLT64_HAS_DENORM__ 1 +#define __FLT32_EPSILON__ 1.19209289550781250000000000000000000e-7F32 +#define __FLT16_HAS_DENORM__ 1 +#define __DBL_DECIMAL_DIG__ 17 +#define __STDC_UTF_32__ 1 +#define __INT_FAST8_WIDTH__ 8 +#define __FXSR__ 1 +#define __FLT32X_MAX__ 1.79769313486231570814527423731704357e+308F32x +#define __DBL_NORM_MAX__ double(1.79769313486231570814527423731704357e+308L) +#define __BYTE_ORDER__ __ORDER_LITTLE_ENDIAN__ +#define TLRENDER_FFMPEG 1 +#define __INTMAX_WIDTH__ 64 +#define __cpp_runtime_arrays 198712L +#define __FLT32_DIG__ 6 +#define __UINT64_TYPE__ long unsigned int +#define __UINT32_C(c) c ## U +#define __cpp_alias_templates 200704L +#define __cpp_constexpr_dynamic_alloc 201907L +#define __FLT_DENORM_MIN__ 1.40129846432481707092372958328991613e-45F +#define __FLT128_IS_IEC_60559__ 1 +#define __INT8_MAX__ 0x7f +#define __LONG_WIDTH__ 64 +#define __DBL_MIN__ double(2.22507385850720138309023271733240406e-308L) +#define __INT32_MAX__ 0x7fffffff +#define __UINT_FAST32_TYPE__ long unsigned int +#define __FLT16_MANT_DIG__ 11 +#define __FLT32X_NORM_MAX__ 1.79769313486231570814527423731704357e+308F32x +#define __CHAR32_TYPE__ unsigned int +#define __FLT_MAX__ 3.40282346638528859811704183484516925e+38F +#define __SSE2__ 1 +#define __cpp_deduction_guides 201907L +#define __BFLT16_NORM_MAX__ 3.38953138925153547590470800371487867e+38BF16 +#define __INT32_TYPE__ int +#define __SIZEOF_DOUBLE__ 8 +#define __cpp_exceptions 199711L +#define __FLT_MIN_10_EXP__ (-37) +#define __FLT64_MIN__ 2.22507385850720138309023271733240406e-308F64 +#define __INT_LEAST32_WIDTH__ 32 +#define __INTMAX_TYPE__ long int +#define __GLIBCXX_BITSIZE_INT_N_0 128 +#define __FLT32X_HAS_QUIET_NAN__ 1 +#define __ATOMIC_CONSUME 1 +#define __GNUC_MINOR__ 2 +#define __GLIBCXX_TYPE_INT_N_0 __int128 +#define __UINTMAX_MAX__ 0xffffffffffffffffUL +#define __FLT32X_DENORM_MIN__ 4.94065645841246544176568792868221372e-324F32x +#define __cpp_template_template_args 201611L +#define __DBL_MAX_10_EXP__ 308 +#define __LDBL_DENORM_MIN__ 3.64519953188247460252840593361941982e-4951L +#define __INT16_C(c) c +#define __STDC__ 1 +#define __PTRDIFF_TYPE__ long int +#define __LONG_MAX__ 0x7fffffffffffffffL +#define __FLT32X_MIN_10_EXP__ (-307) +#define __UINTPTR_TYPE__ long unsigned int +#define __DEC64_SUBNORMAL_MIN__ 0.000000000000001E-383DD +#define __DEC128_MANT_DIG__ 34 +#define __LDBL_MIN_10_EXP__ (-4931) +#define __cpp_generic_lambdas 201707L +#define __SSE_MATH__ 1 +#define __SIZEOF_LONG_LONG__ 8 +#define __cpp_user_defined_literals 200809L +#define __FLT128_DECIMAL_DIG__ 36 +#define __GCC_ATOMIC_LLONG_LOCK_FREE 2 +#define __FLT32_HAS_QUIET_NAN__ 1 +#define __FLT_DECIMAL_DIG__ 9 +#define __UINT_FAST16_MAX__ 0xffffffffffffffffUL +#define __LDBL_NORM_MAX__ 1.18973149535723176502126385303097021e+4932L +#define __GCC_ATOMIC_SHORT_LOCK_FREE 2 +#define __SIZE_MAX__ 0xffffffffffffffffUL +#define __UINT_FAST8_TYPE__ unsigned char +#define _GNU_SOURCE 1 +#define __cpp_init_captures 201803L +#define __ATOMIC_ACQ_REL 4 +#define __ATOMIC_RELEASE 3 diff --git a/build-linux/tests/test_sequence_detector_autogen/mocs_compilation.cpp b/build-linux/tests/test_sequence_detector_autogen/mocs_compilation.cpp new file mode 100644 index 00000000..bda67f76 --- /dev/null +++ b/build-linux/tests/test_sequence_detector_autogen/mocs_compilation.cpp @@ -0,0 +1,3 @@ +// This file is autogenerated. Changes will be overwritten. +// No files found that require moc or the moc files are included +enum some_compilers { need_more_than_nothing }; diff --git a/build-linux/tests/test_sequence_detector_autogen/timestamp b/build-linux/tests/test_sequence_detector_autogen/timestamp new file mode 100644 index 00000000..e69de29b diff --git a/build-linux/tests/test_simple b/build-linux/tests/test_simple new file mode 100755 index 00000000..1bd4c2ab Binary files /dev/null and b/build-linux/tests/test_simple differ diff --git a/build-linux/tests/test_simple_autogen/deps b/build-linux/tests/test_simple_autogen/deps new file mode 100644 index 00000000..674dfbd1 --- /dev/null +++ b/build-linux/tests/test_simple_autogen/deps @@ -0,0 +1,827 @@ +test_simple_autogen/timestamp: \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_simple_autogen/moc_predefs.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/CMakeLists.txt \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/test_simple.cpp \ + /usr/include/asm-generic/bitsperlong.h \ + /usr/include/asm-generic/errno-base.h \ + /usr/include/asm-generic/errno.h \ + /usr/include/asm-generic/int-ll64.h \ + /usr/include/asm-generic/posix_types.h \ + /usr/include/asm-generic/types.h \ + /usr/include/asm/bitsperlong.h \ + /usr/include/asm/errno.h \ + /usr/include/asm/posix_types.h \ + /usr/include/asm/posix_types_64.h \ + /usr/include/asm/types.h \ + /usr/include/asm/unistd.h \ + /usr/include/asm/unistd_64.h \ + /usr/include/assert.h \ + /usr/include/bits/atomic_wide_counter.h \ + /usr/include/bits/byteswap.h \ + /usr/include/bits/confname.h \ + /usr/include/bits/cpu-set.h \ + /usr/include/bits/endian.h \ + /usr/include/bits/endianness.h \ + /usr/include/bits/environments.h \ + /usr/include/bits/errno.h \ + /usr/include/bits/floatn-common.h \ + /usr/include/bits/floatn.h \ + /usr/include/bits/getopt_core.h \ + /usr/include/bits/getopt_posix.h \ + /usr/include/bits/libc-header-start.h \ + /usr/include/bits/locale.h \ + /usr/include/bits/long-double.h \ + /usr/include/bits/posix_opt.h \ + /usr/include/bits/pthread_stack_min-dynamic.h \ + /usr/include/bits/pthreadtypes-arch.h \ + /usr/include/bits/pthreadtypes.h \ + /usr/include/bits/sched.h \ + /usr/include/bits/select.h \ + /usr/include/bits/semaphore.h \ + /usr/include/bits/setjmp.h \ + /usr/include/bits/stdint-intn.h \ + /usr/include/bits/stdio_lim.h \ + /usr/include/bits/struct_mutex.h \ + /usr/include/bits/struct_rwlock.h \ + /usr/include/bits/syscall.h \ + /usr/include/bits/thread-shared-types.h \ + /usr/include/bits/time.h \ + /usr/include/bits/time64.h \ + /usr/include/bits/timesize.h \ + /usr/include/bits/timex.h \ + /usr/include/bits/types.h \ + /usr/include/bits/types/FILE.h \ + /usr/include/bits/types/__FILE.h \ + /usr/include/bits/types/__fpos64_t.h \ + /usr/include/bits/types/__fpos_t.h \ + /usr/include/bits/types/__locale_t.h \ + /usr/include/bits/types/__mbstate_t.h \ + /usr/include/bits/types/__sigset_t.h \ + /usr/include/bits/types/clock_t.h \ + /usr/include/bits/types/clockid_t.h \ + /usr/include/bits/types/cookie_io_functions_t.h \ + /usr/include/bits/types/error_t.h \ + /usr/include/bits/types/locale_t.h \ + /usr/include/bits/types/mbstate_t.h \ + /usr/include/bits/types/sigset_t.h \ + /usr/include/bits/types/struct_FILE.h \ + /usr/include/bits/types/struct___jmp_buf_tag.h \ + /usr/include/bits/types/struct_itimerspec.h \ + /usr/include/bits/types/struct_sched_param.h \ + /usr/include/bits/types/struct_timespec.h \ + /usr/include/bits/types/struct_timeval.h \ + /usr/include/bits/types/struct_tm.h \ + /usr/include/bits/types/time_t.h \ + /usr/include/bits/types/timer_t.h \ + /usr/include/bits/types/wint_t.h \ + /usr/include/bits/typesizes.h \ + /usr/include/bits/uintn-identity.h \ + /usr/include/bits/unistd_ext.h \ + /usr/include/bits/wchar.h \ + /usr/include/bits/wctype-wchar.h \ + /usr/include/bits/wordsize.h \ + /usr/include/c++/15/algorithm \ + /usr/include/c++/15/array \ + /usr/include/c++/15/atomic \ + /usr/include/c++/15/backward/auto_ptr.h \ + /usr/include/c++/15/backward/binders.h \ + /usr/include/c++/15/bit \ + /usr/include/c++/15/bits/algorithmfwd.h \ + /usr/include/c++/15/bits/align.h \ + /usr/include/c++/15/bits/alloc_traits.h \ + /usr/include/c++/15/bits/allocated_ptr.h \ + /usr/include/c++/15/bits/allocator.h \ + /usr/include/c++/15/bits/atomic_base.h \ + /usr/include/c++/15/bits/atomic_futex.h \ + /usr/include/c++/15/bits/atomic_lockfree_defines.h \ + /usr/include/c++/15/bits/atomic_timed_wait.h \ + /usr/include/c++/15/bits/atomic_wait.h \ + /usr/include/c++/15/bits/basic_ios.h \ + /usr/include/c++/15/bits/basic_ios.tcc \ + /usr/include/c++/15/bits/basic_string.h \ + /usr/include/c++/15/bits/basic_string.tcc \ + /usr/include/c++/15/bits/char_traits.h \ + /usr/include/c++/15/bits/charconv.h \ + /usr/include/c++/15/bits/chrono.h \ + /usr/include/c++/15/bits/chrono_io.h \ + /usr/include/c++/15/bits/codecvt.h \ + /usr/include/c++/15/bits/concept_check.h \ + /usr/include/c++/15/bits/cpp_type_traits.h \ + /usr/include/c++/15/bits/cxxabi_forced.h \ + /usr/include/c++/15/bits/cxxabi_init_exception.h \ + /usr/include/c++/15/bits/enable_special_members.h \ + /usr/include/c++/15/bits/erase_if.h \ + /usr/include/c++/15/bits/exception.h \ + /usr/include/c++/15/bits/exception_defines.h \ + /usr/include/c++/15/bits/exception_ptr.h \ + /usr/include/c++/15/bits/functexcept.h \ + /usr/include/c++/15/bits/functional_hash.h \ + /usr/include/c++/15/bits/hash_bytes.h \ + /usr/include/c++/15/bits/hashtable.h \ + /usr/include/c++/15/bits/hashtable_policy.h \ + /usr/include/c++/15/bits/invoke.h \ + /usr/include/c++/15/bits/ios_base.h \ + /usr/include/c++/15/bits/istream.tcc \ + /usr/include/c++/15/bits/iterator_concepts.h \ + /usr/include/c++/15/bits/list.tcc \ + /usr/include/c++/15/bits/locale_classes.h \ + /usr/include/c++/15/bits/locale_classes.tcc \ + /usr/include/c++/15/bits/locale_conv.h \ + /usr/include/c++/15/bits/locale_facets.h \ + /usr/include/c++/15/bits/locale_facets.tcc \ + /usr/include/c++/15/bits/locale_facets_nonio.h \ + /usr/include/c++/15/bits/locale_facets_nonio.tcc \ + /usr/include/c++/15/bits/localefwd.h \ + /usr/include/c++/15/bits/max_size_type.h \ + /usr/include/c++/15/bits/memory_resource.h \ + /usr/include/c++/15/bits/memoryfwd.h \ + /usr/include/c++/15/bits/move.h \ + /usr/include/c++/15/bits/nested_exception.h \ + /usr/include/c++/15/bits/new_allocator.h \ + /usr/include/c++/15/bits/node_handle.h \ + /usr/include/c++/15/bits/ostream.h \ + /usr/include/c++/15/bits/ostream.tcc \ + /usr/include/c++/15/bits/ostream_insert.h \ + /usr/include/c++/15/bits/parse_numbers.h \ + /usr/include/c++/15/bits/postypes.h \ + /usr/include/c++/15/bits/predefined_ops.h \ + /usr/include/c++/15/bits/ptr_traits.h \ + /usr/include/c++/15/bits/quoted_string.h \ + /usr/include/c++/15/bits/random.h \ + /usr/include/c++/15/bits/random.tcc \ + /usr/include/c++/15/bits/range_access.h \ + /usr/include/c++/15/bits/ranges_algo.h \ + /usr/include/c++/15/bits/ranges_algobase.h \ + /usr/include/c++/15/bits/ranges_base.h \ + /usr/include/c++/15/bits/ranges_cmp.h \ + /usr/include/c++/15/bits/ranges_uninitialized.h \ + /usr/include/c++/15/bits/ranges_util.h \ + /usr/include/c++/15/bits/refwrap.h \ + /usr/include/c++/15/bits/requires_hosted.h \ + /usr/include/c++/15/bits/semaphore_base.h \ + /usr/include/c++/15/bits/shared_ptr.h \ + /usr/include/c++/15/bits/shared_ptr_atomic.h \ + /usr/include/c++/15/bits/shared_ptr_base.h \ + /usr/include/c++/15/bits/specfun.h \ + /usr/include/c++/15/bits/sstream.tcc \ + /usr/include/c++/15/bits/std_abs.h \ + /usr/include/c++/15/bits/std_function.h \ + /usr/include/c++/15/bits/std_mutex.h \ + /usr/include/c++/15/bits/std_thread.h \ + /usr/include/c++/15/bits/stl_algo.h \ + /usr/include/c++/15/bits/stl_algobase.h \ + /usr/include/c++/15/bits/stl_bvector.h \ + /usr/include/c++/15/bits/stl_construct.h \ + /usr/include/c++/15/bits/stl_function.h \ + /usr/include/c++/15/bits/stl_heap.h \ + /usr/include/c++/15/bits/stl_iterator.h \ + /usr/include/c++/15/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/15/bits/stl_iterator_base_types.h \ + /usr/include/c++/15/bits/stl_list.h \ + /usr/include/c++/15/bits/stl_map.h \ + /usr/include/c++/15/bits/stl_multimap.h \ + /usr/include/c++/15/bits/stl_multiset.h \ + /usr/include/c++/15/bits/stl_numeric.h \ + /usr/include/c++/15/bits/stl_pair.h \ + /usr/include/c++/15/bits/stl_raw_storage_iter.h \ + /usr/include/c++/15/bits/stl_relops.h \ + /usr/include/c++/15/bits/stl_set.h \ + /usr/include/c++/15/bits/stl_tempbuf.h \ + /usr/include/c++/15/bits/stl_tree.h \ + /usr/include/c++/15/bits/stl_uninitialized.h \ + /usr/include/c++/15/bits/stl_vector.h \ + /usr/include/c++/15/bits/stream_iterator.h \ + /usr/include/c++/15/bits/streambuf.tcc \ + /usr/include/c++/15/bits/streambuf_iterator.h \ + /usr/include/c++/15/bits/string_view.tcc \ + /usr/include/c++/15/bits/stringfwd.h \ + /usr/include/c++/15/bits/this_thread_sleep.h \ + /usr/include/c++/15/bits/uniform_int_dist.h \ + /usr/include/c++/15/bits/unique_lock.h \ + /usr/include/c++/15/bits/unique_ptr.h \ + /usr/include/c++/15/bits/unordered_map.h \ + /usr/include/c++/15/bits/unordered_set.h \ + /usr/include/c++/15/bits/uses_allocator.h \ + /usr/include/c++/15/bits/uses_allocator_args.h \ + /usr/include/c++/15/bits/utility.h \ + /usr/include/c++/15/bits/vector.tcc \ + /usr/include/c++/15/bits/version.h \ + /usr/include/c++/15/cassert \ + /usr/include/c++/15/cctype \ + /usr/include/c++/15/cerrno \ + /usr/include/c++/15/charconv \ + /usr/include/c++/15/chrono \ + /usr/include/c++/15/climits \ + /usr/include/c++/15/clocale \ + /usr/include/c++/15/cmath \ + /usr/include/c++/15/compare \ + /usr/include/c++/15/concepts \ + /usr/include/c++/15/condition_variable \ + /usr/include/c++/15/cstddef \ + /usr/include/c++/15/cstdint \ + /usr/include/c++/15/cstdio \ + /usr/include/c++/15/cstdlib \ + /usr/include/c++/15/cstring \ + /usr/include/c++/15/ctime \ + /usr/include/c++/15/cwchar \ + /usr/include/c++/15/cwctype \ + /usr/include/c++/15/debug/assertions.h \ + /usr/include/c++/15/debug/debug.h \ + /usr/include/c++/15/exception \ + /usr/include/c++/15/experimental/source_location \ + /usr/include/c++/15/ext/aligned_buffer.h \ + /usr/include/c++/15/ext/alloc_traits.h \ + /usr/include/c++/15/ext/atomicity.h \ + /usr/include/c++/15/ext/concurrence.h \ + /usr/include/c++/15/ext/numeric_traits.h \ + /usr/include/c++/15/ext/string_conversions.h \ + /usr/include/c++/15/ext/type_traits.h \ + /usr/include/c++/15/filesystem \ + /usr/include/c++/15/format \ + /usr/include/c++/15/functional \ + /usr/include/c++/15/future \ + /usr/include/c++/15/initializer_list \ + /usr/include/c++/15/iomanip \ + /usr/include/c++/15/ios \ + /usr/include/c++/15/iosfwd \ + /usr/include/c++/15/istream \ + /usr/include/c++/15/iterator \ + /usr/include/c++/15/limits \ + /usr/include/c++/15/list \ + /usr/include/c++/15/locale \ + /usr/include/c++/15/map \ + /usr/include/c++/15/memory \ + /usr/include/c++/15/memory_resource \ + /usr/include/c++/15/mutex \ + /usr/include/c++/15/new \ + /usr/include/c++/15/numeric \ + /usr/include/c++/15/optional \ + /usr/include/c++/15/ostream \ + /usr/include/c++/15/pstl/execution_defs.h \ + /usr/include/c++/15/pstl/glue_numeric_defs.h \ + /usr/include/c++/15/pstl/pstl_config.h \ + /usr/include/c++/15/random \ + /usr/include/c++/15/ratio \ + /usr/include/c++/15/semaphore \ + /usr/include/c++/15/set \ + /usr/include/c++/15/shared_mutex \ + /usr/include/c++/15/source_location \ + /usr/include/c++/15/sstream \ + /usr/include/c++/15/stdexcept \ + /usr/include/c++/15/stdlib.h \ + /usr/include/c++/15/stop_token \ + /usr/include/c++/15/streambuf \ + /usr/include/c++/15/string \ + /usr/include/c++/15/string_view \ + /usr/include/c++/15/system_error \ + /usr/include/c++/15/tr1/bessel_function.tcc \ + /usr/include/c++/15/tr1/beta_function.tcc \ + /usr/include/c++/15/tr1/ell_integral.tcc \ + /usr/include/c++/15/tr1/exp_integral.tcc \ + /usr/include/c++/15/tr1/gamma.tcc \ + /usr/include/c++/15/tr1/hypergeometric.tcc \ + /usr/include/c++/15/tr1/legendre_function.tcc \ + /usr/include/c++/15/tr1/modified_bessel_func.tcc \ + /usr/include/c++/15/tr1/poly_hermite.tcc \ + /usr/include/c++/15/tr1/poly_laguerre.tcc \ + /usr/include/c++/15/tr1/riemann_zeta.tcc \ + /usr/include/c++/15/tr1/special_function_util.h \ + /usr/include/c++/15/tuple \ + /usr/include/c++/15/type_traits \ + /usr/include/c++/15/typeinfo \ + /usr/include/c++/15/unordered_map \ + /usr/include/c++/15/unordered_set \ + /usr/include/c++/15/utility \ + /usr/include/c++/15/variant \ + /usr/include/c++/15/vector \ + /usr/include/c++/15/version \ + /usr/include/c++/15/x86_64-redhat-linux/bits/atomic_word.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/c++allocator.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/c++config.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/c++locale.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/cpu_defines.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/ctype_base.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/ctype_inline.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/error_constants.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/gthr-default.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/gthr.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/messages_members.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/opt_random.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/os_defines.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/time_members.h \ + /usr/include/ctype.h \ + /usr/include/endian.h \ + /usr/include/errno.h \ + /usr/include/features-time64.h \ + /usr/include/features.h \ + /usr/include/gnu/stubs-64.h \ + /usr/include/gnu/stubs.h \ + /usr/include/libintl.h \ + /usr/include/linux/close_range.h \ + /usr/include/linux/errno.h \ + /usr/include/linux/posix_types.h \ + /usr/include/linux/sched/types.h \ + /usr/include/linux/stddef.h \ + /usr/include/linux/types.h \ + /usr/include/locale.h \ + /usr/include/pthread.h \ + /usr/include/qt6/QtCore/QAbstractItemModel \ + /usr/include/qt6/QtCore/QDeadlineTimer \ + /usr/include/qt6/QtCore/QHash \ + /usr/include/qt6/QtCore/QList \ + /usr/include/qt6/QtCore/QMap \ + /usr/include/qt6/QtCore/QMutex \ + /usr/include/qt6/QtCore/QObject \ + /usr/include/qt6/QtCore/QString \ + /usr/include/qt6/QtCore/QStringList \ + /usr/include/qt6/QtCore/QVariant \ + /usr/include/qt6/QtCore/QtCore \ + /usr/include/qt6/QtCore/QtCoreDepends \ + /usr/include/qt6/QtCore/q17memory.h \ + /usr/include/qt6/QtCore/q20algorithm.h \ + /usr/include/qt6/QtCore/q20chrono.h \ + /usr/include/qt6/QtCore/q20functional.h \ + /usr/include/qt6/QtCore/q20iterator.h \ + /usr/include/qt6/QtCore/q20map.h \ + /usr/include/qt6/QtCore/q20memory.h \ + /usr/include/qt6/QtCore/q20type_traits.h \ + /usr/include/qt6/QtCore/q20utility.h \ + /usr/include/qt6/QtCore/q20vector.h \ + /usr/include/qt6/QtCore/q23functional.h \ + /usr/include/qt6/QtCore/q23type_traits.h \ + /usr/include/qt6/QtCore/q23utility.h \ + /usr/include/qt6/QtCore/q26numeric.h \ + /usr/include/qt6/QtCore/qabstractanimation.h \ + /usr/include/qt6/QtCore/qabstracteventdispatcher.h \ + /usr/include/qt6/QtCore/qabstractitemmodel.h \ + /usr/include/qt6/QtCore/qabstractnativeeventfilter.h \ + /usr/include/qt6/QtCore/qabstractproxymodel.h \ + /usr/include/qt6/QtCore/qalgorithms.h \ + /usr/include/qt6/QtCore/qalloc.h \ + /usr/include/qt6/QtCore/qanimationgroup.h \ + /usr/include/qt6/QtCore/qanystringview.h \ + /usr/include/qt6/QtCore/qapplicationstatic.h \ + /usr/include/qt6/QtCore/qarraydata.h \ + /usr/include/qt6/QtCore/qarraydataops.h \ + /usr/include/qt6/QtCore/qarraydatapointer.h \ + /usr/include/qt6/QtCore/qassert.h \ + /usr/include/qt6/QtCore/qassociativeiterable.h \ + /usr/include/qt6/QtCore/qatomic.h \ + /usr/include/qt6/QtCore/qatomic_cxx11.h \ + /usr/include/qt6/QtCore/qatomicscopedvaluerollback.h \ + /usr/include/qt6/QtCore/qbasicatomic.h \ + /usr/include/qt6/QtCore/qbasictimer.h \ + /usr/include/qt6/QtCore/qbindingstorage.h \ + /usr/include/qt6/QtCore/qbitarray.h \ + /usr/include/qt6/QtCore/qbuffer.h \ + /usr/include/qt6/QtCore/qbytearray.h \ + /usr/include/qt6/QtCore/qbytearrayalgorithms.h \ + /usr/include/qt6/QtCore/qbytearraylist.h \ + /usr/include/qt6/QtCore/qbytearraymatcher.h \ + /usr/include/qt6/QtCore/qbytearrayview.h \ + /usr/include/qt6/QtCore/qcache.h \ + /usr/include/qt6/QtCore/qcalendar.h \ + /usr/include/qt6/QtCore/qcborarray.h \ + /usr/include/qt6/QtCore/qcborcommon.h \ + /usr/include/qt6/QtCore/qcbormap.h \ + /usr/include/qt6/QtCore/qcborstream.h \ + /usr/include/qt6/QtCore/qcborstreamreader.h \ + /usr/include/qt6/QtCore/qcborstreamwriter.h \ + /usr/include/qt6/QtCore/qcborvalue.h \ + /usr/include/qt6/QtCore/qchar.h \ + /usr/include/qt6/QtCore/qcheckedint_impl.h \ + /usr/include/qt6/QtCore/qchronotimer.h \ + /usr/include/qt6/QtCore/qcollator.h \ + /usr/include/qt6/QtCore/qcommandlineoption.h \ + /usr/include/qt6/QtCore/qcommandlineparser.h \ + /usr/include/qt6/QtCore/qcompare.h \ + /usr/include/qt6/QtCore/qcompare_impl.h \ + /usr/include/qt6/QtCore/qcomparehelpers.h \ + /usr/include/qt6/QtCore/qcompilerdetection.h \ + /usr/include/qt6/QtCore/qconcatenatetablesproxymodel.h \ + /usr/include/qt6/QtCore/qconfig-64.h \ + /usr/include/qt6/QtCore/qconfig.h \ + /usr/include/qt6/QtCore/qconstructormacros.h \ + /usr/include/qt6/QtCore/qcontainerfwd.h \ + /usr/include/qt6/QtCore/qcontainerinfo.h \ + /usr/include/qt6/QtCore/qcontainertools_impl.h \ + /usr/include/qt6/QtCore/qcontiguouscache.h \ + /usr/include/qt6/QtCore/qcoreapplication.h \ + /usr/include/qt6/QtCore/qcoreapplication_platform.h \ + /usr/include/qt6/QtCore/qcoreevent.h \ + /usr/include/qt6/QtCore/qcryptographichash.h \ + /usr/include/qt6/QtCore/qdarwinhelpers.h \ + /usr/include/qt6/QtCore/qdatastream.h \ + /usr/include/qt6/QtCore/qdatetime.h \ + /usr/include/qt6/QtCore/qdeadlinetimer.h \ + /usr/include/qt6/QtCore/qdebug.h \ + /usr/include/qt6/QtCore/qdir.h \ + /usr/include/qt6/QtCore/qdiriterator.h \ + /usr/include/qt6/QtCore/qdirlisting.h \ + /usr/include/qt6/QtCore/qeasingcurve.h \ + /usr/include/qt6/QtCore/qelapsedtimer.h \ + /usr/include/qt6/QtCore/qendian.h \ + /usr/include/qt6/QtCore/qeventloop.h \ + /usr/include/qt6/QtCore/qexception.h \ + /usr/include/qt6/QtCore/qexceptionhandling.h \ + /usr/include/qt6/QtCore/qfactoryinterface.h \ + /usr/include/qt6/QtCore/qfile.h \ + /usr/include/qt6/QtCore/qfiledevice.h \ + /usr/include/qt6/QtCore/qfileinfo.h \ + /usr/include/qt6/QtCore/qfileselector.h \ + /usr/include/qt6/QtCore/qfilesystemwatcher.h \ + /usr/include/qt6/QtCore/qflags.h \ + /usr/include/qt6/QtCore/qfloat16.h \ + /usr/include/qt6/QtCore/qforeach.h \ + /usr/include/qt6/QtCore/qfunctionaltools_impl.h \ + /usr/include/qt6/QtCore/qfunctionpointer.h \ + /usr/include/qt6/QtCore/qfuture.h \ + /usr/include/qt6/QtCore/qfuture_impl.h \ + /usr/include/qt6/QtCore/qfutureinterface.h \ + /usr/include/qt6/QtCore/qfuturesynchronizer.h \ + /usr/include/qt6/QtCore/qfuturewatcher.h \ + /usr/include/qt6/QtCore/qgenericatomic.h \ + /usr/include/qt6/QtCore/qglobal.h \ + /usr/include/qt6/QtCore/qglobalstatic.h \ + /usr/include/qt6/QtCore/qhash.h \ + /usr/include/qt6/QtCore/qhashfunctions.h \ + /usr/include/qt6/QtCore/qidentityproxymodel.h \ + /usr/include/qt6/QtCore/qiodevice.h \ + /usr/include/qt6/QtCore/qiodevicebase.h \ + /usr/include/qt6/QtCore/qitemselectionmodel.h \ + /usr/include/qt6/QtCore/qiterable.h \ + /usr/include/qt6/QtCore/qiterator.h \ + /usr/include/qt6/QtCore/qjsonarray.h \ + /usr/include/qt6/QtCore/qjsondocument.h \ + /usr/include/qt6/QtCore/qjsonobject.h \ + /usr/include/qt6/QtCore/qjsonparseerror.h \ + /usr/include/qt6/QtCore/qjsonvalue.h \ + /usr/include/qt6/QtCore/qlatin1stringmatcher.h \ + /usr/include/qt6/QtCore/qlatin1stringview.h \ + /usr/include/qt6/QtCore/qlibrary.h \ + /usr/include/qt6/QtCore/qlibraryinfo.h \ + /usr/include/qt6/QtCore/qline.h \ + /usr/include/qt6/QtCore/qlist.h \ + /usr/include/qt6/QtCore/qlocale.h \ + /usr/include/qt6/QtCore/qlockfile.h \ + /usr/include/qt6/QtCore/qlogging.h \ + /usr/include/qt6/QtCore/qloggingcategory.h \ + /usr/include/qt6/QtCore/qmalloc.h \ + /usr/include/qt6/QtCore/qmap.h \ + /usr/include/qt6/QtCore/qmargins.h \ + /usr/include/qt6/QtCore/qmath.h \ + /usr/include/qt6/QtCore/qmessageauthenticationcode.h \ + /usr/include/qt6/QtCore/qmetacontainer.h \ + /usr/include/qt6/QtCore/qmetaobject.h \ + /usr/include/qt6/QtCore/qmetatype.h \ + /usr/include/qt6/QtCore/qmimedata.h \ + /usr/include/qt6/QtCore/qmimedatabase.h \ + /usr/include/qt6/QtCore/qmimetype.h \ + /usr/include/qt6/QtCore/qminmax.h \ + /usr/include/qt6/QtCore/qmutex.h \ + /usr/include/qt6/QtCore/qnamespace.h \ + /usr/include/qt6/QtCore/qnativeinterface.h \ + /usr/include/qt6/QtCore/qnumeric.h \ + /usr/include/qt6/QtCore/qobject.h \ + /usr/include/qt6/QtCore/qobject_impl.h \ + /usr/include/qt6/QtCore/qobjectcleanuphandler.h \ + /usr/include/qt6/QtCore/qobjectdefs.h \ + /usr/include/qt6/QtCore/qobjectdefs_impl.h \ + /usr/include/qt6/QtCore/qoperatingsystemversion.h \ + /usr/include/qt6/QtCore/qoverload.h \ + /usr/include/qt6/QtCore/qpair.h \ + /usr/include/qt6/QtCore/qparallelanimationgroup.h \ + /usr/include/qt6/QtCore/qpauseanimation.h \ + /usr/include/qt6/QtCore/qpermissions.h \ + /usr/include/qt6/QtCore/qplugin.h \ + /usr/include/qt6/QtCore/qpluginloader.h \ + /usr/include/qt6/QtCore/qpoint.h \ + /usr/include/qt6/QtCore/qpointer.h \ + /usr/include/qt6/QtCore/qprocess.h \ + /usr/include/qt6/QtCore/qprocessordetection.h \ + /usr/include/qt6/QtCore/qpromise.h \ + /usr/include/qt6/QtCore/qproperty.h \ + /usr/include/qt6/QtCore/qpropertyanimation.h \ + /usr/include/qt6/QtCore/qpropertyprivate.h \ + /usr/include/qt6/QtCore/qqueue.h \ + /usr/include/qt6/QtCore/qrandom.h \ + /usr/include/qt6/QtCore/qrangemodel.h \ + /usr/include/qt6/QtCore/qrangemodel_impl.h \ + /usr/include/qt6/QtCore/qreadwritelock.h \ + /usr/include/qt6/QtCore/qrect.h \ + /usr/include/qt6/QtCore/qrefcount.h \ + /usr/include/qt6/QtCore/qregularexpression.h \ + /usr/include/qt6/QtCore/qresource.h \ + /usr/include/qt6/QtCore/qresultstore.h \ + /usr/include/qt6/QtCore/qrunnable.h \ + /usr/include/qt6/QtCore/qsavefile.h \ + /usr/include/qt6/QtCore/qscopedpointer.h \ + /usr/include/qt6/QtCore/qscopedvaluerollback.h \ + /usr/include/qt6/QtCore/qscopeguard.h \ + /usr/include/qt6/QtCore/qsemaphore.h \ + /usr/include/qt6/QtCore/qsequentialanimationgroup.h \ + /usr/include/qt6/QtCore/qsequentialiterable.h \ + /usr/include/qt6/QtCore/qset.h \ + /usr/include/qt6/QtCore/qsettings.h \ + /usr/include/qt6/QtCore/qshareddata.h \ + /usr/include/qt6/QtCore/qshareddata_impl.h \ + /usr/include/qt6/QtCore/qsharedmemory.h \ + /usr/include/qt6/QtCore/qsharedpointer.h \ + /usr/include/qt6/QtCore/qsharedpointer_impl.h \ + /usr/include/qt6/QtCore/qsignalmapper.h \ + /usr/include/qt6/QtCore/qsimd.h \ + /usr/include/qt6/QtCore/qsize.h \ + /usr/include/qt6/QtCore/qsocketnotifier.h \ + /usr/include/qt6/QtCore/qsortfilterproxymodel.h \ + /usr/include/qt6/QtCore/qspan.h \ + /usr/include/qt6/QtCore/qstack.h \ + /usr/include/qt6/QtCore/qstandardpaths.h \ + /usr/include/qt6/QtCore/qstaticlatin1stringmatcher.h \ + /usr/include/qt6/QtCore/qstdlibdetection.h \ + /usr/include/qt6/QtCore/qstorageinfo.h \ + /usr/include/qt6/QtCore/qstring.h \ + /usr/include/qt6/QtCore/qstringalgorithms.h \ + /usr/include/qt6/QtCore/qstringbuilder.h \ + /usr/include/qt6/QtCore/qstringconverter.h \ + /usr/include/qt6/QtCore/qstringconverter_base.h \ + /usr/include/qt6/QtCore/qstringfwd.h \ + /usr/include/qt6/QtCore/qstringlist.h \ + /usr/include/qt6/QtCore/qstringlistmodel.h \ + /usr/include/qt6/QtCore/qstringliteral.h \ + /usr/include/qt6/QtCore/qstringmatcher.h \ + /usr/include/qt6/QtCore/qstringtokenizer.h \ + /usr/include/qt6/QtCore/qstringview.h \ + /usr/include/qt6/QtCore/qswap.h \ + /usr/include/qt6/QtCore/qsysinfo.h \ + /usr/include/qt6/QtCore/qsystemdetection.h \ + /usr/include/qt6/QtCore/qsystemsemaphore.h \ + /usr/include/qt6/QtCore/qtaggedpointer.h \ + /usr/include/qt6/QtCore/qtclasshelpermacros.h \ + /usr/include/qt6/QtCore/qtconfiginclude.h \ + /usr/include/qt6/QtCore/qtconfigmacros.h \ + /usr/include/qt6/QtCore/qtcore-config.h \ + /usr/include/qt6/QtCore/qtcoreexports.h \ + /usr/include/qt6/QtCore/qtcoreglobal.h \ + /usr/include/qt6/QtCore/qtcoreversion.h \ + /usr/include/qt6/QtCore/qtdeprecationdefinitions.h \ + /usr/include/qt6/QtCore/qtdeprecationmarkers.h \ + /usr/include/qt6/QtCore/qtemporarydir.h \ + /usr/include/qt6/QtCore/qtemporaryfile.h \ + /usr/include/qt6/QtCore/qtenvironmentvariables.h \ + /usr/include/qt6/QtCore/qtestsupport_core.h \ + /usr/include/qt6/QtCore/qtextboundaryfinder.h \ + /usr/include/qt6/QtCore/qtextstream.h \ + /usr/include/qt6/QtCore/qtformat_impl.h \ + /usr/include/qt6/QtCore/qthread.h \ + /usr/include/qt6/QtCore/qthreadpool.h \ + /usr/include/qt6/QtCore/qthreadstorage.h \ + /usr/include/qt6/QtCore/qtimeline.h \ + /usr/include/qt6/QtCore/qtimer.h \ + /usr/include/qt6/QtCore/qtimezone.h \ + /usr/include/qt6/QtCore/qtipccommon.h \ + /usr/include/qt6/QtCore/qtmetamacros.h \ + /usr/include/qt6/QtCore/qtmocconstants.h \ + /usr/include/qt6/QtCore/qtnoop.h \ + /usr/include/qt6/QtCore/qtpreprocessorsupport.h \ + /usr/include/qt6/QtCore/qtranslator.h \ + /usr/include/qt6/QtCore/qtransposeproxymodel.h \ + /usr/include/qt6/QtCore/qtresource.h \ + /usr/include/qt6/QtCore/qtsan_impl.h \ + /usr/include/qt6/QtCore/qtsymbolmacros.h \ + /usr/include/qt6/QtCore/qttranslation.h \ + /usr/include/qt6/QtCore/qttypetraits.h \ + /usr/include/qt6/QtCore/qtversion.h \ + /usr/include/qt6/QtCore/qtversionchecks.h \ + /usr/include/qt6/QtCore/qtypeinfo.h \ + /usr/include/qt6/QtCore/qtyperevision.h \ + /usr/include/qt6/QtCore/qtypes.h \ + /usr/include/qt6/QtCore/qurl.h \ + /usr/include/qt6/QtCore/qurlquery.h \ + /usr/include/qt6/QtCore/qutf8stringview.h \ + /usr/include/qt6/QtCore/quuid.h \ + /usr/include/qt6/QtCore/qvariant.h \ + /usr/include/qt6/QtCore/qvariantanimation.h \ + /usr/include/qt6/QtCore/qvarianthash.h \ + /usr/include/qt6/QtCore/qvariantlist.h \ + /usr/include/qt6/QtCore/qvariantmap.h \ + /usr/include/qt6/QtCore/qvarlengtharray.h \ + /usr/include/qt6/QtCore/qvector.h \ + /usr/include/qt6/QtCore/qversionnumber.h \ + /usr/include/qt6/QtCore/qversiontagging.h \ + /usr/include/qt6/QtCore/qwaitcondition.h \ + /usr/include/qt6/QtCore/qwineventnotifier.h \ + /usr/include/qt6/QtCore/qxmlstream.h \ + /usr/include/qt6/QtCore/qxpfunctional.h \ + /usr/include/qt6/QtCore/qxptype_traits.h \ + /usr/include/qt6/QtCore/qyieldcpu.h \ + /usr/include/qt6/QtTest/QtTest \ + /usr/include/qt6/QtTest/QtTestDepends \ + /usr/include/qt6/QtTest/qabstractitemmodeltester.h \ + /usr/include/qt6/QtTest/qbenchmark.h \ + /usr/include/qt6/QtTest/qbenchmarkmetric.h \ + /usr/include/qt6/QtTest/qsignalspy.h \ + /usr/include/qt6/QtTest/qtest.h \ + /usr/include/qt6/QtTest/qtestassert.h \ + /usr/include/qt6/QtTest/qtestcase.h \ + /usr/include/qt6/QtTest/qtestdata.h \ + /usr/include/qt6/QtTest/qtesteventloop.h \ + /usr/include/qt6/QtTest/qtestsystem.h \ + /usr/include/qt6/QtTest/qtesttostring.h \ + /usr/include/qt6/QtTest/qttestexports.h \ + /usr/include/qt6/QtTest/qttestglobal.h \ + /usr/include/qt6/QtTest/qttestlib-config.h \ + /usr/include/qt6/QtTest/qttestversion.h \ + /usr/include/sched.h \ + /usr/include/semaphore.h \ + /usr/include/stdc-predef.h \ + /usr/include/stdio.h \ + /usr/include/string.h \ + /usr/include/strings.h \ + /usr/include/sys/cdefs.h \ + /usr/include/sys/select.h \ + /usr/include/sys/single_threaded.h \ + /usr/include/sys/syscall.h \ + /usr/include/sys/time.h \ + /usr/include/sys/types.h \ + /usr/include/syscall.h \ + /usr/include/time.h \ + /usr/include/unistd.h \ + /usr/include/wchar.h \ + /usr/include/wctype.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/adxintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/amxavx512intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/amxbf16intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/amxcomplexintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/amxfp16intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/amxfp8intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/amxint8intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/amxmovrsintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/amxtf32intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/amxtileintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/amxtransposeintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2-512bf16intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2-512convertintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2-512mediaintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2-512minmaxintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2-512satcvtintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2bf16intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2convertintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2copyintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2mediaintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2minmaxintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2satcvtintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx2intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512bf16intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512bf16vlintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512bitalgintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512bitalgvlintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512bwintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512cdintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512dqintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512fintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512fp16intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512fp16vlintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512ifmaintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512ifmavlintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vbmi2intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vbmi2vlintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vbmiintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vbmivlintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vlbwintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vldqintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vlintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vnniintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vnnivlintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vp2intersectintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vp2intersectvlintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vpopcntdqintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vpopcntdqvlintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avxifmaintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avxintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avxneconvertintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avxvnniint16intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avxvnniint8intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avxvnniintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/bmi2intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/bmiintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/cetintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/cldemoteintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/clflushoptintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/clwbintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/clzerointrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/cmpccxaddintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/emmintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/enqcmdintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/f16cintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/fmaintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/fxsrintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/gfniintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/hresetintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/ia32intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/immintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/keylockerintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/limits.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/lwpintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/lzcntintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/mm_malloc.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/mmintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/movdirintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/movrsintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/mwaitintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/mwaitxintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/pconfigintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/pkuintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/pmmintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/popcntintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/prfchiintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/prfchwintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/raointintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/rdseedintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/rtmintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/serializeintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/sgxintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/sha512intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/shaintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/sm3intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/sm4intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/smmintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/stdarg.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/stdbool.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/stddef.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/stdint.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/syslimits.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/tbmintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/tmmintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/tsxldtrkintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/uintrintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/usermsrintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/vaesintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/vpclmulqdqintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/waitpkgintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/wbnoinvdintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/wmmintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/x86gprintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/xmmintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/xsavecintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/xsaveintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/xsaveoptintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/xsavesintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/xtestintrin.h \ + /usr/lib64/cmake/Qt6/Qt6Config.cmake \ + /usr/lib64/cmake/Qt6/Qt6ConfigExtras.cmake \ + /usr/lib64/cmake/Qt6/Qt6ConfigVersion.cmake \ + /usr/lib64/cmake/Qt6/Qt6ConfigVersionImpl.cmake \ + /usr/lib64/cmake/Qt6/Qt6Dependencies.cmake \ + /usr/lib64/cmake/Qt6/Qt6Targets.cmake \ + /usr/lib64/cmake/Qt6/Qt6VersionlessAliasTargets.cmake \ + /usr/lib64/cmake/Qt6/QtFeature.cmake \ + /usr/lib64/cmake/Qt6/QtFeatureCommon.cmake \ + /usr/lib64/cmake/Qt6/QtInstallPaths.cmake \ + /usr/lib64/cmake/Qt6/QtPublicAndroidHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicAppleHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicCMakeEarlyPolicyHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicCMakeHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicCMakeVersionHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicDependencyHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicExternalProjectHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicFinalizerHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicFindPackageHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicGitHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicPluginHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicPluginHelpers_v2.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomAttributionHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomBuildToolHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomCommonGenerationHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomCpeHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomCycloneDXHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomDepHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomDocumentNamespaceHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomExternalReferenceHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomFileHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomGenerationCycloneDXHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomGenerationHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomLicenseHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomOpsHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomPurlHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomPythonHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomQtEntityHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomRelationshipHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomSystemDepHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicTargetHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicTestHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicToolHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicWalkLibsHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicWindowsHelpers.cmake \ + /usr/lib64/cmake/Qt6Test/Qt6TestAdditionalTargetInfo.cmake \ + /usr/lib64/cmake/Qt6Test/Qt6TestConfig.cmake \ + /usr/lib64/cmake/Qt6Test/Qt6TestConfigVersion.cmake \ + /usr/lib64/cmake/Qt6Test/Qt6TestConfigVersionImpl.cmake \ + /usr/lib64/cmake/Qt6Test/Qt6TestDependencies.cmake \ + /usr/lib64/cmake/Qt6Test/Qt6TestTargets-relwithdebinfo.cmake \ + /usr/lib64/cmake/Qt6Test/Qt6TestTargets.cmake \ + /usr/lib64/cmake/Qt6Test/Qt6TestVersionlessAliasTargets.cmake \ + /usr/lib64/cmake/Qt6Test/QtTestProperties.cmake \ + /usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake \ + /usr/share/cmake/Modules/CheckCXXCompilerFlag.cmake \ + /usr/bin/cmake diff --git a/build-linux/tests/test_simple_autogen/include/test_simple.moc b/build-linux/tests/test_simple_autogen/include/test_simple.moc new file mode 100644 index 00000000..d9fe2a64 --- /dev/null +++ b/build-linux/tests/test_simple_autogen/include/test_simple.moc @@ -0,0 +1,116 @@ +/**************************************************************************** +** Meta object code from reading C++ file 'test_simple.cpp' +** +** Created by: The Qt Meta Object Compiler version 69 (Qt 6.10.3) +** +** WARNING! All changes made in this file will be lost! +*****************************************************************************/ + +#include + +#include + +#include + + +#include +#if !defined(Q_MOC_OUTPUT_REVISION) +#error "The header file 'test_simple.cpp' doesn't include ." +#elif Q_MOC_OUTPUT_REVISION != 69 +#error "This file was generated using the moc from 6.10.3. It" +#error "cannot be used with the include files from this version of Qt." +#error "(The moc has changed too much.)" +#endif + +#ifndef Q_CONSTINIT +#define Q_CONSTINIT +#endif + +QT_WARNING_PUSH +QT_WARNING_DISABLE_DEPRECATED +QT_WARNING_DISABLE_GCC("-Wuseless-cast") +namespace { +struct qt_meta_tag_ZN10TestSimpleE_t {}; +} // unnamed namespace + +template <> constexpr inline auto TestSimple::qt_create_metaobjectdata() +{ + namespace QMC = QtMocConstants; + QtMocHelpers::StringRefStorage qt_stringData { + "TestSimple", + "testArithmetic", + "", + "testString", + "testBool" + }; + + QtMocHelpers::UintData qt_methods { + // Slot 'testArithmetic' + QtMocHelpers::SlotData(1, 2, QMC::AccessPrivate, QMetaType::Void), + // Slot 'testString' + QtMocHelpers::SlotData(3, 2, QMC::AccessPrivate, QMetaType::Void), + // Slot 'testBool' + QtMocHelpers::SlotData(4, 2, QMC::AccessPrivate, QMetaType::Void), + }; + QtMocHelpers::UintData qt_properties { + }; + QtMocHelpers::UintData qt_enums { + }; + return QtMocHelpers::metaObjectData(QMC::MetaObjectFlag{}, qt_stringData, + qt_methods, qt_properties, qt_enums); +} +Q_CONSTINIT const QMetaObject TestSimple::staticMetaObject = { { + QMetaObject::SuperData::link(), + qt_staticMetaObjectStaticContent.stringdata, + qt_staticMetaObjectStaticContent.data, + qt_static_metacall, + nullptr, + qt_staticMetaObjectRelocatingContent.metaTypes, + nullptr +} }; + +void TestSimple::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) +{ + auto *_t = static_cast(_o); + if (_c == QMetaObject::InvokeMetaMethod) { + switch (_id) { + case 0: _t->testArithmetic(); break; + case 1: _t->testString(); break; + case 2: _t->testBool(); break; + default: ; + } + } + (void)_a; +} + +const QMetaObject *TestSimple::metaObject() const +{ + return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject; +} + +void *TestSimple::qt_metacast(const char *_clname) +{ + if (!_clname) return nullptr; + if (!strcmp(_clname, qt_staticMetaObjectStaticContent.strings)) + return static_cast(this); + return QObject::qt_metacast(_clname); +} + +int TestSimple::qt_metacall(QMetaObject::Call _c, int _id, void **_a) +{ + _id = QObject::qt_metacall(_c, _id, _a); + if (_id < 0) + return _id; + if (_c == QMetaObject::InvokeMetaMethod) { + if (_id < 3) + qt_static_metacall(this, _c, _id, _a); + _id -= 3; + } + if (_c == QMetaObject::RegisterMethodArgumentMetaType) { + if (_id < 3) + *reinterpret_cast(_a[0]) = QMetaType(); + _id -= 3; + } + return _id; +} +QT_WARNING_POP diff --git a/build-linux/tests/test_simple_autogen/moc_predefs.h b/build-linux/tests/test_simple_autogen/moc_predefs.h new file mode 100644 index 00000000..2c4c79c9 --- /dev/null +++ b/build-linux/tests/test_simple_autogen/moc_predefs.h @@ -0,0 +1,502 @@ +#define __DBL_MIN_EXP__ (-1021) +#define __LDBL_MANT_DIG__ 64 +#define __cpp_nontype_template_parameter_auto 201606L +#define __UINT_LEAST16_MAX__ 0xffff +#define __FLT16_HAS_QUIET_NAN__ 1 +#define __ATOMIC_ACQUIRE 2 +#define QT_TESTCASE_BUILDDIR "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests" +#define __FLT128_MAX_10_EXP__ 4932 +#define __FLT_MIN__ 1.17549435082228750796873653722224568e-38F +#define __GCC_IEC_559_COMPLEX 2 +#define __cpp_aggregate_nsdmi 201304L +#define __UINT_LEAST8_TYPE__ unsigned char +#define __SIZEOF_FLOAT80__ 16 +#define __BFLT16_DENORM_MIN__ 9.18354961579912115600575419704879436e-41BF16 +#define __cpp_impl_three_way_comparison 201907L +#define __INTMAX_C(c) c ## L +#define __CHAR_BIT__ 8 +#define __cpp_designated_initializers 201707L +#define __UINT8_MAX__ 0xff +#define __SCHAR_WIDTH__ 8 +#define __WINT_MAX__ 0xffffffffU +#define __FLT32_MIN_EXP__ (-125) +#define __cpp_static_assert 201411L +#define __BFLT16_MIN_10_EXP__ (-37) +#define __cpp_inheriting_constructors 201511L +#define __ORDER_LITTLE_ENDIAN__ 1234 +#define __WCHAR_MAX__ 0x7fffffff +#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_2 1 +#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_4 1 +#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_8 1 +#define __GCC_ATOMIC_CHAR_LOCK_FREE 2 +#define __GCC_IEC_559 2 +#define __FLT32X_DECIMAL_DIG__ 17 +#define TLRENDER_OIIO 1 +#define __FLT_EVAL_METHOD__ 0 +#define __cpp_binary_literals 201304L +#define __FLT64_DECIMAL_DIG__ 17 +#define __cpp_noexcept_function_type 201510L +#define __GCC_ATOMIC_CHAR32_T_LOCK_FREE 2 +#define __cpp_variadic_templates 200704L +#define __UINT_FAST64_MAX__ 0xffffffffffffffffUL +#define __SIG_ATOMIC_TYPE__ int +#define __DBL_MIN_10_EXP__ (-307) +#define __FINITE_MATH_ONLY__ 0 +#define __cpp_variable_templates 201304L +#define __FLT32X_MAX_EXP__ 1024 +#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_1 1 +#define __FLT32_HAS_DENORM__ 1 +#define __UINT_FAST8_MAX__ 0xff +#define __cpp_rvalue_reference 200610L +#define __cpp_nested_namespace_definitions 201411L +#define __DEC64_MAX_EXP__ 385 +#define __INT8_C(c) c +#define __LDBL_HAS_INFINITY__ 1 +#define __INT_LEAST8_WIDTH__ 8 +#define __cpp_variadic_using 201611L +#define __UINT_LEAST64_MAX__ 0xffffffffffffffffUL +#define __INT_LEAST8_MAX__ 0x7f +#define __cpp_attributes 200809L +#define __cpp_capture_star_this 201603L +#define __SHRT_MAX__ 0x7fff +#define __LDBL_MAX__ 1.18973149535723176502126385303097021e+4932L +#define __cpp_impl_coroutine 201902L +#define __FLT64X_MAX_10_EXP__ 4932 +#define __cpp_if_constexpr 201606L +#define __BFLT16_MAX_10_EXP__ 38 +#define __BFLT16_MAX_EXP__ 128 +#define __LDBL_IS_IEC_60559__ 1 +#define QT_NO_DEBUG 1 +#define __FLT64X_HAS_QUIET_NAN__ 1 +#define QT_TESTLIB_LIB 1 +#define TLRENDER_SDL2 1 +#define __UINT_LEAST8_MAX__ 0xff +#define __GCC_ATOMIC_BOOL_LOCK_FREE 2 +#define __FLT128_DENORM_MIN__ 6.47517511943802511092443895822764655e-4966F128 +#define __UINTMAX_TYPE__ long unsigned int +#define __cpp_nsdmi 200809L +#define __BFLT16_DECIMAL_DIG__ 4 +#define __linux 1 +#define __DEC32_EPSILON__ 1E-6DF +#define __FLT_EVAL_METHOD_TS_18661_3__ 0 +#define __UINT32_MAX__ 0xffffffffU +#define __GXX_EXPERIMENTAL_CXX0X__ 1 +#define __DBL_DENORM_MIN__ double(4.94065645841246544176568792868221372e-324L) +#define __FLT128_MIN_EXP__ (-16381) +#define __DEC64X_MAX_EXP__ 6145 +#define __WINT_MIN__ 0U +#define __FLT128_MIN_10_EXP__ (-4931) +#define __FLT32X_IS_IEC_60559__ 1 +#define __INT_LEAST16_WIDTH__ 16 +#define __SCHAR_MAX__ 0x7f +#define __FLT128_MANT_DIG__ 113 +#define __WCHAR_MIN__ (-__WCHAR_MAX__ - 1) +#define __INT64_C(c) c ## L +#define __cpp_impl_destroying_delete 201806L +#define __GCC_ATOMIC_POINTER_LOCK_FREE 2 +#define TLRENDER_JPEG 1 +#define __ATOMIC_SEQ_CST 5 +#define __unix 1 +#define __INT_LEAST64_MAX__ 0x7fffffffffffffffL +#define __FLT32X_MANT_DIG__ 53 +#define __GCC_ATOMIC_CHAR16_T_LOCK_FREE 2 +#define __cpp_aligned_new 201606L +#define __FLT32_MAX_10_EXP__ 38 +#define __FLT64X_EPSILON__ 1.08420217248550443400745280086994171e-19F64x +#define __STDC_HOSTED__ 1 +#define __DEC64_MIN_EXP__ (-382) +#define TLRENDER_PNG 1 +#define __cpp_decltype_auto 201304L +#define __DBL_DIG__ 15 +#define __STDC_EMBED_EMPTY__ 2 +#define __FLT_EPSILON__ 1.19209289550781250000000000000000000e-7F +#define __cpp_char8_t 202207L +#define __GXX_WEAK__ 1 +#define __SHRT_WIDTH__ 16 +#define __FLT32_IS_IEC_60559__ 1 +#define __LDBL_MIN__ 3.36210314311209350626267781732175260e-4932L +#define __DBL_IS_IEC_60559__ 1 +#define __DEC32_MAX__ 9.999999E96DF +#define __CHAR8_TYPE__ unsigned char +#define __cpp_threadsafe_static_init 200806L +#define __cpp_enumerator_attributes 201411L +#define TLRENDER_EXR 1 +#define __FLT64X_DENORM_MIN__ 3.64519953188247460252840593361941982e-4951F64x +#define __FLT32X_HAS_INFINITY__ 1 +#define __unix__ 1 +#define __INT_WIDTH__ 32 +#define __STDC_IEC_559__ 1 +#define __STDC_ISO_10646__ 201706L +#define __GCC_ATOMIC_CHAR8_T_LOCK_FREE 2 +#define __DECIMAL_DIG__ 21 +#define __STDC_IEC_559_COMPLEX__ 1 +#define __FLT64_EPSILON__ 2.22044604925031308084726333618164062e-16F64 +#define __gnu_linux__ 1 +#define __INT16_MAX__ 0x7fff +#define __FLT64_MIN_EXP__ (-1021) +#define __cpp_using_enum 201907L +#define __DEC64X_EPSILON__ 1E-33D64x +#define __FLT64X_MIN_10_EXP__ (-4931) +#define __LDBL_HAS_QUIET_NAN__ 1 +#define __FLT16_MIN_EXP__ (-13) +#define __FLT64_MANT_DIG__ 53 +#define __cpp_consteval 202211L +#define __FLT64X_MANT_DIG__ 64 +#define FTK_API_GL_4_1 1 +#define __BFLT16_DIG__ 2 +#define __GNUC__ 15 +#define __GXX_RTTI 1 +#define TLRENDER_FFMPEG_PLUGIN 1 +#define __MMX__ 1 +#define __FLT_HAS_DENORM__ 1 +#define __SIZEOF_LONG_DOUBLE__ 16 +#define __BIGGEST_ALIGNMENT__ 16 +#define __STDC_UTF_16__ 1 +#define __FLT64_MAX_10_EXP__ 308 +#define __BFLT16_IS_IEC_60559__ 0 +#define __FLT16_MAX_10_EXP__ 4 +#define __cpp_delegating_constructors 200604L +#define __DBL_MAX__ double(1.79769313486231570814527423731704357e+308L) +#define __cpp_raw_strings 200710L +#define __INT_FAST32_MAX__ 0x7fffffffffffffffL +#define __DBL_HAS_INFINITY__ 1 +#define __INT64_MAX__ 0x7fffffffffffffffL +#define __SIZEOF_FLOAT__ 4 +#define __HAVE_SPECULATION_SAFE_VALUE 1 +#define __cpp_fold_expressions 201603L +#define __DEC32_MIN_EXP__ (-94) +#define __INTPTR_WIDTH__ 64 +#define __UINT_LEAST32_MAX__ 0xffffffffU +#define __FLT32X_HAS_DENORM__ 1 +#define __INT_FAST16_TYPE__ long int +#define __MMX_WITH_SSE__ 1 +#define __LDBL_HAS_DENORM__ 1 +#define __SEG_GS 1 +#define __BFLT16_EPSILON__ 7.81250000000000000000000000000000000e-3BF16 +#define __cplusplus 202002L +#define __cpp_ref_qualifiers 200710L +#define __DEC32_MIN__ 1E-95DF +#define __DEPRECATED 1 +#define __cpp_rvalue_references 200610L +#define __DBL_MAX_EXP__ 1024 +#define __WCHAR_WIDTH__ 32 +#define __FLT32_MAX__ 3.40282346638528859811704183484516925e+38F32 +#define __DEC128_EPSILON__ 1E-33DL +#define __FLT16_DECIMAL_DIG__ 5 +#define __SSE2_MATH__ 1 +#define __ATOMIC_HLE_RELEASE 131072 +#define __PTRDIFF_MAX__ 0x7fffffffffffffffL +#define __amd64 1 +#define __DEC64X_MAX__ 9.999999999999999999999999999999999E6144D64x +#define __ATOMIC_HLE_ACQUIRE 65536 +#define __GNUG__ 15 +#define __LONG_LONG_MAX__ 0x7fffffffffffffffLL +#define __SIZEOF_SIZE_T__ 8 +#define __BFLT16_HAS_INFINITY__ 1 +#define __FLT64X_MIN_EXP__ (-16381) +#define __SIZEOF_WINT_T__ 4 +#define __FLT32X_DIG__ 15 +#define __LONG_LONG_WIDTH__ 64 +#define QT_TESTCASE_SOURCEDIR "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests" +#define __cpp_initializer_lists 200806L +#define __FLT32_MAX_EXP__ 128 +#define ABI_ID "ELF" +#define __cpp_hex_float 201603L +#define __GXX_ABI_VERSION 1020 +#define __FLT_MIN_EXP__ (-125) +#define __GCC_HAVE_DWARF2_CFI_ASM 1 +#define TLRENDER_OCIO 1 +#define __x86_64 1 +#define __cpp_lambdas 200907L +#define __INT_FAST64_TYPE__ long int +#define __BFLT16_MAX__ 3.38953138925153547590470800371487867e+38BF16 +#define __FLT64_DENORM_MIN__ 4.94065645841246544176568792868221372e-324F64 +#define __cpp_template_auto 201606L +#define __FLT16_DENORM_MIN__ 5.96046447753906250000000000000000000e-8F16 +#define __FLT128_EPSILON__ 1.92592994438723585305597794258492732e-34F128 +#define __FLT64X_NORM_MAX__ 1.18973149535723176502126385303097021e+4932F64x +#define __SIZEOF_POINTER__ 8 +#define __SIZE_TYPE__ long unsigned int +#define __LP64__ 1 +#define __DBL_HAS_QUIET_NAN__ 1 +#define __FLT32X_EPSILON__ 2.22044604925031308084726333618164062e-16F32x +#define __LDBL_MAX_EXP__ 16384 +#define __DECIMAL_BID_FORMAT__ 1 +#define __FLT64_MIN_10_EXP__ (-307) +#define __FLT16_MIN_10_EXP__ (-4) +#define __FLT64X_DECIMAL_DIG__ 21 +#define __DEC128_MIN__ 1E-6143DL +#define __REGISTER_PREFIX__ +#define __UINT16_MAX__ 0xffff +#define __FLT128_HAS_INFINITY__ 1 +#define __FLT32_MIN__ 1.17549435082228750796873653722224568e-38F32 +#define __UINT8_TYPE__ unsigned char +#define __FLT_DIG__ 6 +#define __NO_INLINE__ 1 +#define __DEC_EVAL_METHOD__ 2 +#define __FLT_MANT_DIG__ 24 +#define __LDBL_DECIMAL_DIG__ 21 +#define __VERSION__ "15.2.1 20260123 (Red Hat 15.2.1-7)" +#define __UINT64_C(c) c ## UL +#define __cpp_unicode_characters 201411L +#define __DEC64X_MIN__ 1E-6143D64x +#define _STDC_PREDEF_H 1 +#define __INT_LEAST32_MAX__ 0x7fffffff +#define __GCC_ATOMIC_INT_LOCK_FREE 2 +#define __FLT128_MAX_EXP__ 16384 +#define __cpp_conditional_explicit 201806L +#define __FLT32_MANT_DIG__ 24 +#define __cpp_decltype 200707L +#define __FLOAT_WORD_ORDER__ __ORDER_LITTLE_ENDIAN__ +#define SIZEOF_DPTR (sizeof(void*)) +#define __FLT32X_MIN_EXP__ (-1021) +#define __cpp_aggregate_paren_init 201902L +#define __STDC_IEC_60559_COMPLEX__ 201404L +#define __cpp_aggregate_bases 201603L +#define __BFLT16_MIN__ 1.17549435082228750796873653722224568e-38BF16 +#define __FLT128_HAS_DENORM__ 1 +#define __FLT32_DECIMAL_DIG__ 9 +#define __FLT128_DIG__ 33 +#define __INT32_C(c) c +#define __DEC64_EPSILON__ 1E-15DD +#define __ORDER_PDP_ENDIAN__ 3412 +#define __DEC128_MIN_EXP__ (-6142) +#define __DEC128_MAX__ 9.999999999999999999999999999999999E6144DL +#define __cpp_constinit 201907L +#define __INT_FAST32_TYPE__ long int +#define __UINT_LEAST16_TYPE__ short unsigned int +#define __DEC64X_MANT_DIG__ 34 +#define __DEC128_MAX_EXP__ 6145 +#define unix 1 +#define __DBL_HAS_DENORM__ 1 +#define __cpp_rtti 199711L +#define __UINT64_MAX__ 0xffffffffffffffffUL +#define __FLT_IS_IEC_60559__ 1 +#define __GNUC_WIDE_EXECUTION_CHARSET_NAME "UTF-32LE" +#define __FLT64X_DIG__ 18 +#define __INT8_TYPE__ signed char +#define __cpp_digit_separators 201309L +#define __ELF__ 1 +#define __GCC_ASM_FLAG_OUTPUTS__ 1 +#define __UINT32_TYPE__ unsigned int +#define __BFLT16_HAS_QUIET_NAN__ 1 +#define __FLT_RADIX__ 2 +#define __INT_LEAST16_TYPE__ short int +#define __LDBL_EPSILON__ 1.08420217248550443400745280086994171e-19L +#define __UINTMAX_C(c) c ## UL +#define __GNUC_RH_RELEASE__ 7 +#define __FLT16_DIG__ 3 +#define __k8 1 +#define __FLT32X_MIN__ 2.22507385850720138309023271733240406e-308F32x +#define __SIG_ATOMIC_MAX__ 0x7fffffff +#define __cpp_constexpr 202002L +#define __GCC_ATOMIC_WCHAR_T_LOCK_FREE 2 +#define __USER_LABEL_PREFIX__ +#define __STDC_IEC_60559_BFP__ 201404L +#define __SIZEOF_PTRDIFF_T__ 8 +#define __FLT64X_HAS_INFINITY__ 1 +#define __SIZEOF_LONG__ 8 +#define __LDBL_DIG__ 18 +#define __FLT64_IS_IEC_60559__ 1 +#define __x86_64__ 1 +#define __FLT16_IS_IEC_60559__ 1 +#define __FLT16_MAX_EXP__ 16 +#define __DEC32_SUBNORMAL_MIN__ 0.000001E-95DF +#define __STDC_EMBED_FOUND__ 1 +#define __INT_FAST16_MAX__ 0x7fffffffffffffffL +#define __GCC_CONSTRUCTIVE_SIZE 64 +#define __FLT64_DIG__ 15 +#define __UINT_FAST32_MAX__ 0xffffffffffffffffUL +#define __UINT_LEAST64_TYPE__ long unsigned int +#define __FLT16_EPSILON__ 9.76562500000000000000000000000000000e-4F16 +#define __FLT_HAS_QUIET_NAN__ 1 +#define __FLT_MAX_10_EXP__ 38 +#define __FLT64X_HAS_DENORM__ 1 +#define __DEC128_SUBNORMAL_MIN__ 0.000000000000000000000000000000001E-6143DL +#define __FLT_HAS_INFINITY__ 1 +#define __GNUC_EXECUTION_CHARSET_NAME "UTF-8" +#define __cpp_unicode_literals 200710L +#define __UINT_FAST16_TYPE__ long unsigned int +#define __DEC64_MAX__ 9.999999999999999E384DD +#define __STDC_EMBED_NOT_FOUND__ 0 +#define __INT_FAST32_WIDTH__ 64 +#define __CHAR16_TYPE__ short unsigned int +#define __PRAGMA_REDEFINE_EXTNAME 1 +#define __DEC64X_SUBNORMAL_MIN__ 0.000000000000000000000000000000001E-6143D64x +#define __SIZE_WIDTH__ 64 +#define __SEG_FS 1 +#define __INT_LEAST16_MAX__ 0x7fff +#define __FLT16_NORM_MAX__ 6.55040000000000000000000000000000000e+4F16 +#define __DEC64_MANT_DIG__ 16 +#define __FLT32_DENORM_MIN__ 1.40129846432481707092372958328991613e-45F32 +#define __SIG_ATOMIC_WIDTH__ 32 +#define __GCC_DESTRUCTIVE_SIZE 64 +#define __INT_LEAST64_TYPE__ long int +#define __INT16_TYPE__ short int +#define __INT_LEAST8_TYPE__ signed char +#define __FLT16_MAX__ 6.55040000000000000000000000000000000e+4F16 +#define __FLT128_MIN__ 3.36210314311209350626267781732175260e-4932F128 +#define __cpp_structured_bindings 201606L +#define __SIZEOF_INT__ 4 +#define __DEC32_MAX_EXP__ 97 +#define __INT_FAST8_MAX__ 0x7f +#define __FLT128_MAX__ 1.18973149535723176508575932662800702e+4932F128 +#define __INTPTR_MAX__ 0x7fffffffffffffffL +#define __cpp_sized_deallocation 201309L +#define __cpp_guaranteed_copy_elision 201606L +#define linux 1 +#define __FLT64_HAS_QUIET_NAN__ 1 +#define __FLT32_MIN_10_EXP__ (-37) +#define __EXCEPTIONS 1 +#define __UINT16_C(c) c +#define __PTRDIFF_WIDTH__ 64 +#define __cpp_range_based_for 201603L +#define __INT_FAST16_WIDTH__ 64 +#define __FLT64_HAS_INFINITY__ 1 +#define __FLT64X_MAX__ 1.18973149535723176502126385303097021e+4932F64x +#define __FLT16_HAS_INFINITY__ 1 +#define __STDCPP_DEFAULT_NEW_ALIGNMENT__ 16 +#define __SIG_ATOMIC_MIN__ (-__SIG_ATOMIC_MAX__ - 1) +#define __code_model_small__ 1 +#define __GCC_ATOMIC_LONG_LOCK_FREE 2 +#define __cpp_nontype_template_args 201911L +#define __DEC32_MANT_DIG__ 7 +#define __k8__ 1 +#define __INTPTR_TYPE__ long int +#define __UINT16_TYPE__ short unsigned int +#define __WCHAR_TYPE__ int +#define __UINTPTR_MAX__ 0xffffffffffffffffUL +#define __INT_FAST64_WIDTH__ 64 +#define __cpp_nontype_template_parameter_class 201806L +#define __cpp_concepts 202002L +#define __INT_FAST64_MAX__ 0x7fffffffffffffffL +#define __GCC_ATOMIC_TEST_AND_SET_TRUEVAL 1 +#define __FLT_NORM_MAX__ 3.40282346638528859811704183484516925e+38F +#define __FLT32_HAS_INFINITY__ 1 +#define __FLT64X_MAX_EXP__ 16384 +#define __UINT_FAST64_TYPE__ long unsigned int +#define __cpp_constexpr_in_decltype 201711L +#define __cpp_inline_variables 201606L +#define __BFLT16_MIN_EXP__ (-125) +#define __INT_MAX__ 0x7fffffff +#define __linux__ 1 +#define __INT64_TYPE__ long int +#define __FLT_MAX_EXP__ 128 +#define __ORDER_BIG_ENDIAN__ 4321 +#define __DBL_MANT_DIG__ 53 +#define QT_CORE_LIB 1 +#define __SIZEOF_FLOAT128__ 16 +#define __BFLT16_MANT_DIG__ 8 +#define __DEC64_MIN__ 1E-383DD +#define __WINT_TYPE__ unsigned int +#define __UINT_LEAST32_TYPE__ unsigned int +#define __SIZEOF_SHORT__ 2 +#define __FLT32_NORM_MAX__ 3.40282346638528859811704183484516925e+38F32 +#define __SSE__ 1 +#define __LDBL_MIN_EXP__ (-16381) +#define __FLT64_MAX__ 1.79769313486231570814527423731704357e+308F64 +#define __DEC64X_MIN_EXP__ (-6142) +#define __amd64__ 1 +#define __WINT_WIDTH__ 32 +#define __INT_LEAST64_WIDTH__ 64 +#define __FLT32X_MAX_10_EXP__ 308 +#define __cpp_namespace_attributes 201411L +#define __SIZEOF_INT128__ 16 +#define __FLT16_MIN__ 6.10351562500000000000000000000000000e-5F16 +#define __FLT64X_IS_IEC_60559__ 1 +#define __GXX_CONSTEXPR_ASM__ 1 +#define __LDBL_MAX_10_EXP__ 4932 +#define __ATOMIC_RELAXED 0 +#define __DBL_EPSILON__ double(2.22044604925031308084726333618164062e-16L) +#define __INT_LEAST32_TYPE__ int +#define _LP64 1 +#define __UINT8_C(c) c +#define __FLT64_MAX_EXP__ 1024 +#define __cpp_return_type_deduction 201304L +#define __SIZEOF_WCHAR_T__ 4 +#define __GNUC_PATCHLEVEL__ 1 +#define __FLT128_NORM_MAX__ 1.18973149535723176508575932662800702e+4932F128 +#define __FLT64_NORM_MAX__ 1.79769313486231570814527423731704357e+308F64 +#define __FLT128_HAS_QUIET_NAN__ 1 +#define __INTMAX_MAX__ 0x7fffffffffffffffL +#define TLRENDER_TIFF 1 +#define __INT_FAST8_TYPE__ signed char +#define __FLT64X_MIN__ 3.36210314311209350626267781732175260e-4932F64x +#define __STDCPP_THREADS__ 1 +#define __BFLT16_HAS_DENORM__ 1 +#define __GNUC_STDC_INLINE__ 1 +#define __FLT64_HAS_DENORM__ 1 +#define __FLT32_EPSILON__ 1.19209289550781250000000000000000000e-7F32 +#define __FLT16_HAS_DENORM__ 1 +#define __DBL_DECIMAL_DIG__ 17 +#define __STDC_UTF_32__ 1 +#define __INT_FAST8_WIDTH__ 8 +#define __FXSR__ 1 +#define __FLT32X_MAX__ 1.79769313486231570814527423731704357e+308F32x +#define __DBL_NORM_MAX__ double(1.79769313486231570814527423731704357e+308L) +#define __BYTE_ORDER__ __ORDER_LITTLE_ENDIAN__ +#define TLRENDER_FFMPEG 1 +#define __INTMAX_WIDTH__ 64 +#define __cpp_runtime_arrays 198712L +#define __FLT32_DIG__ 6 +#define __UINT64_TYPE__ long unsigned int +#define __UINT32_C(c) c ## U +#define __cpp_alias_templates 200704L +#define __cpp_constexpr_dynamic_alloc 201907L +#define __FLT_DENORM_MIN__ 1.40129846432481707092372958328991613e-45F +#define __FLT128_IS_IEC_60559__ 1 +#define __INT8_MAX__ 0x7f +#define __LONG_WIDTH__ 64 +#define __DBL_MIN__ double(2.22507385850720138309023271733240406e-308L) +#define __INT32_MAX__ 0x7fffffff +#define __UINT_FAST32_TYPE__ long unsigned int +#define __FLT16_MANT_DIG__ 11 +#define __FLT32X_NORM_MAX__ 1.79769313486231570814527423731704357e+308F32x +#define __CHAR32_TYPE__ unsigned int +#define __FLT_MAX__ 3.40282346638528859811704183484516925e+38F +#define __SSE2__ 1 +#define __cpp_deduction_guides 201907L +#define __BFLT16_NORM_MAX__ 3.38953138925153547590470800371487867e+38BF16 +#define __INT32_TYPE__ int +#define __SIZEOF_DOUBLE__ 8 +#define __cpp_exceptions 199711L +#define __FLT_MIN_10_EXP__ (-37) +#define __FLT64_MIN__ 2.22507385850720138309023271733240406e-308F64 +#define __INT_LEAST32_WIDTH__ 32 +#define __INTMAX_TYPE__ long int +#define __GLIBCXX_BITSIZE_INT_N_0 128 +#define __FLT32X_HAS_QUIET_NAN__ 1 +#define __ATOMIC_CONSUME 1 +#define __GNUC_MINOR__ 2 +#define __GLIBCXX_TYPE_INT_N_0 __int128 +#define __UINTMAX_MAX__ 0xffffffffffffffffUL +#define __FLT32X_DENORM_MIN__ 4.94065645841246544176568792868221372e-324F32x +#define __cpp_template_template_args 201611L +#define __DBL_MAX_10_EXP__ 308 +#define __LDBL_DENORM_MIN__ 3.64519953188247460252840593361941982e-4951L +#define __INT16_C(c) c +#define __STDC__ 1 +#define __PTRDIFF_TYPE__ long int +#define __LONG_MAX__ 0x7fffffffffffffffL +#define __FLT32X_MIN_10_EXP__ (-307) +#define __UINTPTR_TYPE__ long unsigned int +#define __DEC64_SUBNORMAL_MIN__ 0.000000000000001E-383DD +#define __DEC128_MANT_DIG__ 34 +#define __LDBL_MIN_10_EXP__ (-4931) +#define __cpp_generic_lambdas 201707L +#define __SSE_MATH__ 1 +#define __SIZEOF_LONG_LONG__ 8 +#define __cpp_user_defined_literals 200809L +#define __FLT128_DECIMAL_DIG__ 36 +#define __GCC_ATOMIC_LLONG_LOCK_FREE 2 +#define __FLT32_HAS_QUIET_NAN__ 1 +#define __FLT_DECIMAL_DIG__ 9 +#define __UINT_FAST16_MAX__ 0xffffffffffffffffUL +#define __LDBL_NORM_MAX__ 1.18973149535723176502126385303097021e+4932L +#define __GCC_ATOMIC_SHORT_LOCK_FREE 2 +#define __SIZE_MAX__ 0xffffffffffffffffUL +#define __UINT_FAST8_TYPE__ unsigned char +#define _GNU_SOURCE 1 +#define __cpp_init_captures 201803L +#define __ATOMIC_ACQ_REL 4 +#define __ATOMIC_RELEASE 3 diff --git a/build-linux/tests/test_simple_autogen/mocs_compilation.cpp b/build-linux/tests/test_simple_autogen/mocs_compilation.cpp new file mode 100644 index 00000000..bda67f76 --- /dev/null +++ b/build-linux/tests/test_simple_autogen/mocs_compilation.cpp @@ -0,0 +1,3 @@ +// This file is autogenerated. Changes will be overwritten. +// No files found that require moc or the moc files are included +enum some_compilers { need_more_than_nothing }; diff --git a/build-linux/tests/test_simple_autogen/timestamp b/build-linux/tests/test_simple_autogen/timestamp new file mode 100644 index 00000000..e69de29b diff --git a/build-linux/tests/test_utils b/build-linux/tests/test_utils new file mode 100755 index 00000000..1440f83f Binary files /dev/null and b/build-linux/tests/test_utils differ diff --git a/build-linux/tests/test_utils_autogen/deps b/build-linux/tests/test_utils_autogen/deps new file mode 100644 index 00000000..78df403c --- /dev/null +++ b/build-linux/tests/test_utils_autogen/deps @@ -0,0 +1,829 @@ +test_utils_autogen/timestamp: \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_utils_autogen/moc_predefs.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/utils.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/CMakeLists.txt \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/test_utils.cpp \ + /usr/include/asm-generic/bitsperlong.h \ + /usr/include/asm-generic/errno-base.h \ + /usr/include/asm-generic/errno.h \ + /usr/include/asm-generic/int-ll64.h \ + /usr/include/asm-generic/posix_types.h \ + /usr/include/asm-generic/types.h \ + /usr/include/asm/bitsperlong.h \ + /usr/include/asm/errno.h \ + /usr/include/asm/posix_types.h \ + /usr/include/asm/posix_types_64.h \ + /usr/include/asm/types.h \ + /usr/include/asm/unistd.h \ + /usr/include/asm/unistd_64.h \ + /usr/include/assert.h \ + /usr/include/bits/atomic_wide_counter.h \ + /usr/include/bits/byteswap.h \ + /usr/include/bits/confname.h \ + /usr/include/bits/cpu-set.h \ + /usr/include/bits/endian.h \ + /usr/include/bits/endianness.h \ + /usr/include/bits/environments.h \ + /usr/include/bits/errno.h \ + /usr/include/bits/floatn-common.h \ + /usr/include/bits/floatn.h \ + /usr/include/bits/getopt_core.h \ + /usr/include/bits/getopt_posix.h \ + /usr/include/bits/libc-header-start.h \ + /usr/include/bits/locale.h \ + /usr/include/bits/long-double.h \ + /usr/include/bits/posix_opt.h \ + /usr/include/bits/pthread_stack_min-dynamic.h \ + /usr/include/bits/pthreadtypes-arch.h \ + /usr/include/bits/pthreadtypes.h \ + /usr/include/bits/sched.h \ + /usr/include/bits/select.h \ + /usr/include/bits/semaphore.h \ + /usr/include/bits/setjmp.h \ + /usr/include/bits/stdint-intn.h \ + /usr/include/bits/stdio_lim.h \ + /usr/include/bits/struct_mutex.h \ + /usr/include/bits/struct_rwlock.h \ + /usr/include/bits/syscall.h \ + /usr/include/bits/thread-shared-types.h \ + /usr/include/bits/time.h \ + /usr/include/bits/time64.h \ + /usr/include/bits/timesize.h \ + /usr/include/bits/timex.h \ + /usr/include/bits/types.h \ + /usr/include/bits/types/FILE.h \ + /usr/include/bits/types/__FILE.h \ + /usr/include/bits/types/__fpos64_t.h \ + /usr/include/bits/types/__fpos_t.h \ + /usr/include/bits/types/__locale_t.h \ + /usr/include/bits/types/__mbstate_t.h \ + /usr/include/bits/types/__sigset_t.h \ + /usr/include/bits/types/clock_t.h \ + /usr/include/bits/types/clockid_t.h \ + /usr/include/bits/types/cookie_io_functions_t.h \ + /usr/include/bits/types/error_t.h \ + /usr/include/bits/types/locale_t.h \ + /usr/include/bits/types/mbstate_t.h \ + /usr/include/bits/types/sigset_t.h \ + /usr/include/bits/types/struct_FILE.h \ + /usr/include/bits/types/struct___jmp_buf_tag.h \ + /usr/include/bits/types/struct_itimerspec.h \ + /usr/include/bits/types/struct_sched_param.h \ + /usr/include/bits/types/struct_timespec.h \ + /usr/include/bits/types/struct_timeval.h \ + /usr/include/bits/types/struct_tm.h \ + /usr/include/bits/types/time_t.h \ + /usr/include/bits/types/timer_t.h \ + /usr/include/bits/types/wint_t.h \ + /usr/include/bits/typesizes.h \ + /usr/include/bits/uintn-identity.h \ + /usr/include/bits/unistd_ext.h \ + /usr/include/bits/wchar.h \ + /usr/include/bits/wctype-wchar.h \ + /usr/include/bits/wordsize.h \ + /usr/include/c++/15/algorithm \ + /usr/include/c++/15/array \ + /usr/include/c++/15/atomic \ + /usr/include/c++/15/backward/auto_ptr.h \ + /usr/include/c++/15/backward/binders.h \ + /usr/include/c++/15/bit \ + /usr/include/c++/15/bits/algorithmfwd.h \ + /usr/include/c++/15/bits/align.h \ + /usr/include/c++/15/bits/alloc_traits.h \ + /usr/include/c++/15/bits/allocated_ptr.h \ + /usr/include/c++/15/bits/allocator.h \ + /usr/include/c++/15/bits/atomic_base.h \ + /usr/include/c++/15/bits/atomic_futex.h \ + /usr/include/c++/15/bits/atomic_lockfree_defines.h \ + /usr/include/c++/15/bits/atomic_timed_wait.h \ + /usr/include/c++/15/bits/atomic_wait.h \ + /usr/include/c++/15/bits/basic_ios.h \ + /usr/include/c++/15/bits/basic_ios.tcc \ + /usr/include/c++/15/bits/basic_string.h \ + /usr/include/c++/15/bits/basic_string.tcc \ + /usr/include/c++/15/bits/char_traits.h \ + /usr/include/c++/15/bits/charconv.h \ + /usr/include/c++/15/bits/chrono.h \ + /usr/include/c++/15/bits/chrono_io.h \ + /usr/include/c++/15/bits/codecvt.h \ + /usr/include/c++/15/bits/concept_check.h \ + /usr/include/c++/15/bits/cpp_type_traits.h \ + /usr/include/c++/15/bits/cxxabi_forced.h \ + /usr/include/c++/15/bits/cxxabi_init_exception.h \ + /usr/include/c++/15/bits/enable_special_members.h \ + /usr/include/c++/15/bits/erase_if.h \ + /usr/include/c++/15/bits/exception.h \ + /usr/include/c++/15/bits/exception_defines.h \ + /usr/include/c++/15/bits/exception_ptr.h \ + /usr/include/c++/15/bits/functexcept.h \ + /usr/include/c++/15/bits/functional_hash.h \ + /usr/include/c++/15/bits/hash_bytes.h \ + /usr/include/c++/15/bits/hashtable.h \ + /usr/include/c++/15/bits/hashtable_policy.h \ + /usr/include/c++/15/bits/invoke.h \ + /usr/include/c++/15/bits/ios_base.h \ + /usr/include/c++/15/bits/istream.tcc \ + /usr/include/c++/15/bits/iterator_concepts.h \ + /usr/include/c++/15/bits/list.tcc \ + /usr/include/c++/15/bits/locale_classes.h \ + /usr/include/c++/15/bits/locale_classes.tcc \ + /usr/include/c++/15/bits/locale_conv.h \ + /usr/include/c++/15/bits/locale_facets.h \ + /usr/include/c++/15/bits/locale_facets.tcc \ + /usr/include/c++/15/bits/locale_facets_nonio.h \ + /usr/include/c++/15/bits/locale_facets_nonio.tcc \ + /usr/include/c++/15/bits/localefwd.h \ + /usr/include/c++/15/bits/max_size_type.h \ + /usr/include/c++/15/bits/memory_resource.h \ + /usr/include/c++/15/bits/memoryfwd.h \ + /usr/include/c++/15/bits/move.h \ + /usr/include/c++/15/bits/nested_exception.h \ + /usr/include/c++/15/bits/new_allocator.h \ + /usr/include/c++/15/bits/node_handle.h \ + /usr/include/c++/15/bits/ostream.h \ + /usr/include/c++/15/bits/ostream.tcc \ + /usr/include/c++/15/bits/ostream_insert.h \ + /usr/include/c++/15/bits/parse_numbers.h \ + /usr/include/c++/15/bits/postypes.h \ + /usr/include/c++/15/bits/predefined_ops.h \ + /usr/include/c++/15/bits/ptr_traits.h \ + /usr/include/c++/15/bits/quoted_string.h \ + /usr/include/c++/15/bits/random.h \ + /usr/include/c++/15/bits/random.tcc \ + /usr/include/c++/15/bits/range_access.h \ + /usr/include/c++/15/bits/ranges_algo.h \ + /usr/include/c++/15/bits/ranges_algobase.h \ + /usr/include/c++/15/bits/ranges_base.h \ + /usr/include/c++/15/bits/ranges_cmp.h \ + /usr/include/c++/15/bits/ranges_uninitialized.h \ + /usr/include/c++/15/bits/ranges_util.h \ + /usr/include/c++/15/bits/refwrap.h \ + /usr/include/c++/15/bits/requires_hosted.h \ + /usr/include/c++/15/bits/semaphore_base.h \ + /usr/include/c++/15/bits/shared_ptr.h \ + /usr/include/c++/15/bits/shared_ptr_atomic.h \ + /usr/include/c++/15/bits/shared_ptr_base.h \ + /usr/include/c++/15/bits/specfun.h \ + /usr/include/c++/15/bits/sstream.tcc \ + /usr/include/c++/15/bits/std_abs.h \ + /usr/include/c++/15/bits/std_function.h \ + /usr/include/c++/15/bits/std_mutex.h \ + /usr/include/c++/15/bits/std_thread.h \ + /usr/include/c++/15/bits/stl_algo.h \ + /usr/include/c++/15/bits/stl_algobase.h \ + /usr/include/c++/15/bits/stl_bvector.h \ + /usr/include/c++/15/bits/stl_construct.h \ + /usr/include/c++/15/bits/stl_function.h \ + /usr/include/c++/15/bits/stl_heap.h \ + /usr/include/c++/15/bits/stl_iterator.h \ + /usr/include/c++/15/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/15/bits/stl_iterator_base_types.h \ + /usr/include/c++/15/bits/stl_list.h \ + /usr/include/c++/15/bits/stl_map.h \ + /usr/include/c++/15/bits/stl_multimap.h \ + /usr/include/c++/15/bits/stl_multiset.h \ + /usr/include/c++/15/bits/stl_numeric.h \ + /usr/include/c++/15/bits/stl_pair.h \ + /usr/include/c++/15/bits/stl_raw_storage_iter.h \ + /usr/include/c++/15/bits/stl_relops.h \ + /usr/include/c++/15/bits/stl_set.h \ + /usr/include/c++/15/bits/stl_tempbuf.h \ + /usr/include/c++/15/bits/stl_tree.h \ + /usr/include/c++/15/bits/stl_uninitialized.h \ + /usr/include/c++/15/bits/stl_vector.h \ + /usr/include/c++/15/bits/stream_iterator.h \ + /usr/include/c++/15/bits/streambuf.tcc \ + /usr/include/c++/15/bits/streambuf_iterator.h \ + /usr/include/c++/15/bits/string_view.tcc \ + /usr/include/c++/15/bits/stringfwd.h \ + /usr/include/c++/15/bits/this_thread_sleep.h \ + /usr/include/c++/15/bits/uniform_int_dist.h \ + /usr/include/c++/15/bits/unique_lock.h \ + /usr/include/c++/15/bits/unique_ptr.h \ + /usr/include/c++/15/bits/unordered_map.h \ + /usr/include/c++/15/bits/unordered_set.h \ + /usr/include/c++/15/bits/uses_allocator.h \ + /usr/include/c++/15/bits/uses_allocator_args.h \ + /usr/include/c++/15/bits/utility.h \ + /usr/include/c++/15/bits/vector.tcc \ + /usr/include/c++/15/bits/version.h \ + /usr/include/c++/15/cassert \ + /usr/include/c++/15/cctype \ + /usr/include/c++/15/cerrno \ + /usr/include/c++/15/charconv \ + /usr/include/c++/15/chrono \ + /usr/include/c++/15/climits \ + /usr/include/c++/15/clocale \ + /usr/include/c++/15/cmath \ + /usr/include/c++/15/compare \ + /usr/include/c++/15/concepts \ + /usr/include/c++/15/condition_variable \ + /usr/include/c++/15/cstddef \ + /usr/include/c++/15/cstdint \ + /usr/include/c++/15/cstdio \ + /usr/include/c++/15/cstdlib \ + /usr/include/c++/15/cstring \ + /usr/include/c++/15/ctime \ + /usr/include/c++/15/cwchar \ + /usr/include/c++/15/cwctype \ + /usr/include/c++/15/debug/assertions.h \ + /usr/include/c++/15/debug/debug.h \ + /usr/include/c++/15/exception \ + /usr/include/c++/15/experimental/source_location \ + /usr/include/c++/15/ext/aligned_buffer.h \ + /usr/include/c++/15/ext/alloc_traits.h \ + /usr/include/c++/15/ext/atomicity.h \ + /usr/include/c++/15/ext/concurrence.h \ + /usr/include/c++/15/ext/numeric_traits.h \ + /usr/include/c++/15/ext/string_conversions.h \ + /usr/include/c++/15/ext/type_traits.h \ + /usr/include/c++/15/filesystem \ + /usr/include/c++/15/format \ + /usr/include/c++/15/functional \ + /usr/include/c++/15/future \ + /usr/include/c++/15/initializer_list \ + /usr/include/c++/15/iomanip \ + /usr/include/c++/15/ios \ + /usr/include/c++/15/iosfwd \ + /usr/include/c++/15/istream \ + /usr/include/c++/15/iterator \ + /usr/include/c++/15/limits \ + /usr/include/c++/15/list \ + /usr/include/c++/15/locale \ + /usr/include/c++/15/map \ + /usr/include/c++/15/memory \ + /usr/include/c++/15/memory_resource \ + /usr/include/c++/15/mutex \ + /usr/include/c++/15/new \ + /usr/include/c++/15/numeric \ + /usr/include/c++/15/optional \ + /usr/include/c++/15/ostream \ + /usr/include/c++/15/pstl/execution_defs.h \ + /usr/include/c++/15/pstl/glue_numeric_defs.h \ + /usr/include/c++/15/pstl/pstl_config.h \ + /usr/include/c++/15/random \ + /usr/include/c++/15/ratio \ + /usr/include/c++/15/semaphore \ + /usr/include/c++/15/set \ + /usr/include/c++/15/shared_mutex \ + /usr/include/c++/15/source_location \ + /usr/include/c++/15/sstream \ + /usr/include/c++/15/stdexcept \ + /usr/include/c++/15/stdlib.h \ + /usr/include/c++/15/stop_token \ + /usr/include/c++/15/streambuf \ + /usr/include/c++/15/string \ + /usr/include/c++/15/string_view \ + /usr/include/c++/15/system_error \ + /usr/include/c++/15/tr1/bessel_function.tcc \ + /usr/include/c++/15/tr1/beta_function.tcc \ + /usr/include/c++/15/tr1/ell_integral.tcc \ + /usr/include/c++/15/tr1/exp_integral.tcc \ + /usr/include/c++/15/tr1/gamma.tcc \ + /usr/include/c++/15/tr1/hypergeometric.tcc \ + /usr/include/c++/15/tr1/legendre_function.tcc \ + /usr/include/c++/15/tr1/modified_bessel_func.tcc \ + /usr/include/c++/15/tr1/poly_hermite.tcc \ + /usr/include/c++/15/tr1/poly_laguerre.tcc \ + /usr/include/c++/15/tr1/riemann_zeta.tcc \ + /usr/include/c++/15/tr1/special_function_util.h \ + /usr/include/c++/15/tuple \ + /usr/include/c++/15/type_traits \ + /usr/include/c++/15/typeinfo \ + /usr/include/c++/15/unordered_map \ + /usr/include/c++/15/unordered_set \ + /usr/include/c++/15/utility \ + /usr/include/c++/15/variant \ + /usr/include/c++/15/vector \ + /usr/include/c++/15/version \ + /usr/include/c++/15/x86_64-redhat-linux/bits/atomic_word.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/c++allocator.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/c++config.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/c++locale.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/cpu_defines.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/ctype_base.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/ctype_inline.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/error_constants.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/gthr-default.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/gthr.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/messages_members.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/opt_random.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/os_defines.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/time_members.h \ + /usr/include/ctype.h \ + /usr/include/endian.h \ + /usr/include/errno.h \ + /usr/include/features-time64.h \ + /usr/include/features.h \ + /usr/include/gnu/stubs-64.h \ + /usr/include/gnu/stubs.h \ + /usr/include/libintl.h \ + /usr/include/linux/close_range.h \ + /usr/include/linux/errno.h \ + /usr/include/linux/posix_types.h \ + /usr/include/linux/sched/types.h \ + /usr/include/linux/stddef.h \ + /usr/include/linux/types.h \ + /usr/include/locale.h \ + /usr/include/pthread.h \ + /usr/include/qt6/QtCore/QAbstractItemModel \ + /usr/include/qt6/QtCore/QDeadlineTimer \ + /usr/include/qt6/QtCore/QHash \ + /usr/include/qt6/QtCore/QList \ + /usr/include/qt6/QtCore/QMap \ + /usr/include/qt6/QtCore/QMutex \ + /usr/include/qt6/QtCore/QObject \ + /usr/include/qt6/QtCore/QString \ + /usr/include/qt6/QtCore/QStringList \ + /usr/include/qt6/QtCore/QVariant \ + /usr/include/qt6/QtCore/QtCore \ + /usr/include/qt6/QtCore/QtCoreDepends \ + /usr/include/qt6/QtCore/QtGlobal \ + /usr/include/qt6/QtCore/q17memory.h \ + /usr/include/qt6/QtCore/q20algorithm.h \ + /usr/include/qt6/QtCore/q20chrono.h \ + /usr/include/qt6/QtCore/q20functional.h \ + /usr/include/qt6/QtCore/q20iterator.h \ + /usr/include/qt6/QtCore/q20map.h \ + /usr/include/qt6/QtCore/q20memory.h \ + /usr/include/qt6/QtCore/q20type_traits.h \ + /usr/include/qt6/QtCore/q20utility.h \ + /usr/include/qt6/QtCore/q20vector.h \ + /usr/include/qt6/QtCore/q23functional.h \ + /usr/include/qt6/QtCore/q23type_traits.h \ + /usr/include/qt6/QtCore/q23utility.h \ + /usr/include/qt6/QtCore/q26numeric.h \ + /usr/include/qt6/QtCore/qabstractanimation.h \ + /usr/include/qt6/QtCore/qabstracteventdispatcher.h \ + /usr/include/qt6/QtCore/qabstractitemmodel.h \ + /usr/include/qt6/QtCore/qabstractnativeeventfilter.h \ + /usr/include/qt6/QtCore/qabstractproxymodel.h \ + /usr/include/qt6/QtCore/qalgorithms.h \ + /usr/include/qt6/QtCore/qalloc.h \ + /usr/include/qt6/QtCore/qanimationgroup.h \ + /usr/include/qt6/QtCore/qanystringview.h \ + /usr/include/qt6/QtCore/qapplicationstatic.h \ + /usr/include/qt6/QtCore/qarraydata.h \ + /usr/include/qt6/QtCore/qarraydataops.h \ + /usr/include/qt6/QtCore/qarraydatapointer.h \ + /usr/include/qt6/QtCore/qassert.h \ + /usr/include/qt6/QtCore/qassociativeiterable.h \ + /usr/include/qt6/QtCore/qatomic.h \ + /usr/include/qt6/QtCore/qatomic_cxx11.h \ + /usr/include/qt6/QtCore/qatomicscopedvaluerollback.h \ + /usr/include/qt6/QtCore/qbasicatomic.h \ + /usr/include/qt6/QtCore/qbasictimer.h \ + /usr/include/qt6/QtCore/qbindingstorage.h \ + /usr/include/qt6/QtCore/qbitarray.h \ + /usr/include/qt6/QtCore/qbuffer.h \ + /usr/include/qt6/QtCore/qbytearray.h \ + /usr/include/qt6/QtCore/qbytearrayalgorithms.h \ + /usr/include/qt6/QtCore/qbytearraylist.h \ + /usr/include/qt6/QtCore/qbytearraymatcher.h \ + /usr/include/qt6/QtCore/qbytearrayview.h \ + /usr/include/qt6/QtCore/qcache.h \ + /usr/include/qt6/QtCore/qcalendar.h \ + /usr/include/qt6/QtCore/qcborarray.h \ + /usr/include/qt6/QtCore/qcborcommon.h \ + /usr/include/qt6/QtCore/qcbormap.h \ + /usr/include/qt6/QtCore/qcborstream.h \ + /usr/include/qt6/QtCore/qcborstreamreader.h \ + /usr/include/qt6/QtCore/qcborstreamwriter.h \ + /usr/include/qt6/QtCore/qcborvalue.h \ + /usr/include/qt6/QtCore/qchar.h \ + /usr/include/qt6/QtCore/qcheckedint_impl.h \ + /usr/include/qt6/QtCore/qchronotimer.h \ + /usr/include/qt6/QtCore/qcollator.h \ + /usr/include/qt6/QtCore/qcommandlineoption.h \ + /usr/include/qt6/QtCore/qcommandlineparser.h \ + /usr/include/qt6/QtCore/qcompare.h \ + /usr/include/qt6/QtCore/qcompare_impl.h \ + /usr/include/qt6/QtCore/qcomparehelpers.h \ + /usr/include/qt6/QtCore/qcompilerdetection.h \ + /usr/include/qt6/QtCore/qconcatenatetablesproxymodel.h \ + /usr/include/qt6/QtCore/qconfig-64.h \ + /usr/include/qt6/QtCore/qconfig.h \ + /usr/include/qt6/QtCore/qconstructormacros.h \ + /usr/include/qt6/QtCore/qcontainerfwd.h \ + /usr/include/qt6/QtCore/qcontainerinfo.h \ + /usr/include/qt6/QtCore/qcontainertools_impl.h \ + /usr/include/qt6/QtCore/qcontiguouscache.h \ + /usr/include/qt6/QtCore/qcoreapplication.h \ + /usr/include/qt6/QtCore/qcoreapplication_platform.h \ + /usr/include/qt6/QtCore/qcoreevent.h \ + /usr/include/qt6/QtCore/qcryptographichash.h \ + /usr/include/qt6/QtCore/qdarwinhelpers.h \ + /usr/include/qt6/QtCore/qdatastream.h \ + /usr/include/qt6/QtCore/qdatetime.h \ + /usr/include/qt6/QtCore/qdeadlinetimer.h \ + /usr/include/qt6/QtCore/qdebug.h \ + /usr/include/qt6/QtCore/qdir.h \ + /usr/include/qt6/QtCore/qdiriterator.h \ + /usr/include/qt6/QtCore/qdirlisting.h \ + /usr/include/qt6/QtCore/qeasingcurve.h \ + /usr/include/qt6/QtCore/qelapsedtimer.h \ + /usr/include/qt6/QtCore/qendian.h \ + /usr/include/qt6/QtCore/qeventloop.h \ + /usr/include/qt6/QtCore/qexception.h \ + /usr/include/qt6/QtCore/qexceptionhandling.h \ + /usr/include/qt6/QtCore/qfactoryinterface.h \ + /usr/include/qt6/QtCore/qfile.h \ + /usr/include/qt6/QtCore/qfiledevice.h \ + /usr/include/qt6/QtCore/qfileinfo.h \ + /usr/include/qt6/QtCore/qfileselector.h \ + /usr/include/qt6/QtCore/qfilesystemwatcher.h \ + /usr/include/qt6/QtCore/qflags.h \ + /usr/include/qt6/QtCore/qfloat16.h \ + /usr/include/qt6/QtCore/qforeach.h \ + /usr/include/qt6/QtCore/qfunctionaltools_impl.h \ + /usr/include/qt6/QtCore/qfunctionpointer.h \ + /usr/include/qt6/QtCore/qfuture.h \ + /usr/include/qt6/QtCore/qfuture_impl.h \ + /usr/include/qt6/QtCore/qfutureinterface.h \ + /usr/include/qt6/QtCore/qfuturesynchronizer.h \ + /usr/include/qt6/QtCore/qfuturewatcher.h \ + /usr/include/qt6/QtCore/qgenericatomic.h \ + /usr/include/qt6/QtCore/qglobal.h \ + /usr/include/qt6/QtCore/qglobalstatic.h \ + /usr/include/qt6/QtCore/qhash.h \ + /usr/include/qt6/QtCore/qhashfunctions.h \ + /usr/include/qt6/QtCore/qidentityproxymodel.h \ + /usr/include/qt6/QtCore/qiodevice.h \ + /usr/include/qt6/QtCore/qiodevicebase.h \ + /usr/include/qt6/QtCore/qitemselectionmodel.h \ + /usr/include/qt6/QtCore/qiterable.h \ + /usr/include/qt6/QtCore/qiterator.h \ + /usr/include/qt6/QtCore/qjsonarray.h \ + /usr/include/qt6/QtCore/qjsondocument.h \ + /usr/include/qt6/QtCore/qjsonobject.h \ + /usr/include/qt6/QtCore/qjsonparseerror.h \ + /usr/include/qt6/QtCore/qjsonvalue.h \ + /usr/include/qt6/QtCore/qlatin1stringmatcher.h \ + /usr/include/qt6/QtCore/qlatin1stringview.h \ + /usr/include/qt6/QtCore/qlibrary.h \ + /usr/include/qt6/QtCore/qlibraryinfo.h \ + /usr/include/qt6/QtCore/qline.h \ + /usr/include/qt6/QtCore/qlist.h \ + /usr/include/qt6/QtCore/qlocale.h \ + /usr/include/qt6/QtCore/qlockfile.h \ + /usr/include/qt6/QtCore/qlogging.h \ + /usr/include/qt6/QtCore/qloggingcategory.h \ + /usr/include/qt6/QtCore/qmalloc.h \ + /usr/include/qt6/QtCore/qmap.h \ + /usr/include/qt6/QtCore/qmargins.h \ + /usr/include/qt6/QtCore/qmath.h \ + /usr/include/qt6/QtCore/qmessageauthenticationcode.h \ + /usr/include/qt6/QtCore/qmetacontainer.h \ + /usr/include/qt6/QtCore/qmetaobject.h \ + /usr/include/qt6/QtCore/qmetatype.h \ + /usr/include/qt6/QtCore/qmimedata.h \ + /usr/include/qt6/QtCore/qmimedatabase.h \ + /usr/include/qt6/QtCore/qmimetype.h \ + /usr/include/qt6/QtCore/qminmax.h \ + /usr/include/qt6/QtCore/qmutex.h \ + /usr/include/qt6/QtCore/qnamespace.h \ + /usr/include/qt6/QtCore/qnativeinterface.h \ + /usr/include/qt6/QtCore/qnumeric.h \ + /usr/include/qt6/QtCore/qobject.h \ + /usr/include/qt6/QtCore/qobject_impl.h \ + /usr/include/qt6/QtCore/qobjectcleanuphandler.h \ + /usr/include/qt6/QtCore/qobjectdefs.h \ + /usr/include/qt6/QtCore/qobjectdefs_impl.h \ + /usr/include/qt6/QtCore/qoperatingsystemversion.h \ + /usr/include/qt6/QtCore/qoverload.h \ + /usr/include/qt6/QtCore/qpair.h \ + /usr/include/qt6/QtCore/qparallelanimationgroup.h \ + /usr/include/qt6/QtCore/qpauseanimation.h \ + /usr/include/qt6/QtCore/qpermissions.h \ + /usr/include/qt6/QtCore/qplugin.h \ + /usr/include/qt6/QtCore/qpluginloader.h \ + /usr/include/qt6/QtCore/qpoint.h \ + /usr/include/qt6/QtCore/qpointer.h \ + /usr/include/qt6/QtCore/qprocess.h \ + /usr/include/qt6/QtCore/qprocessordetection.h \ + /usr/include/qt6/QtCore/qpromise.h \ + /usr/include/qt6/QtCore/qproperty.h \ + /usr/include/qt6/QtCore/qpropertyanimation.h \ + /usr/include/qt6/QtCore/qpropertyprivate.h \ + /usr/include/qt6/QtCore/qqueue.h \ + /usr/include/qt6/QtCore/qrandom.h \ + /usr/include/qt6/QtCore/qrangemodel.h \ + /usr/include/qt6/QtCore/qrangemodel_impl.h \ + /usr/include/qt6/QtCore/qreadwritelock.h \ + /usr/include/qt6/QtCore/qrect.h \ + /usr/include/qt6/QtCore/qrefcount.h \ + /usr/include/qt6/QtCore/qregularexpression.h \ + /usr/include/qt6/QtCore/qresource.h \ + /usr/include/qt6/QtCore/qresultstore.h \ + /usr/include/qt6/QtCore/qrunnable.h \ + /usr/include/qt6/QtCore/qsavefile.h \ + /usr/include/qt6/QtCore/qscopedpointer.h \ + /usr/include/qt6/QtCore/qscopedvaluerollback.h \ + /usr/include/qt6/QtCore/qscopeguard.h \ + /usr/include/qt6/QtCore/qsemaphore.h \ + /usr/include/qt6/QtCore/qsequentialanimationgroup.h \ + /usr/include/qt6/QtCore/qsequentialiterable.h \ + /usr/include/qt6/QtCore/qset.h \ + /usr/include/qt6/QtCore/qsettings.h \ + /usr/include/qt6/QtCore/qshareddata.h \ + /usr/include/qt6/QtCore/qshareddata_impl.h \ + /usr/include/qt6/QtCore/qsharedmemory.h \ + /usr/include/qt6/QtCore/qsharedpointer.h \ + /usr/include/qt6/QtCore/qsharedpointer_impl.h \ + /usr/include/qt6/QtCore/qsignalmapper.h \ + /usr/include/qt6/QtCore/qsimd.h \ + /usr/include/qt6/QtCore/qsize.h \ + /usr/include/qt6/QtCore/qsocketnotifier.h \ + /usr/include/qt6/QtCore/qsortfilterproxymodel.h \ + /usr/include/qt6/QtCore/qspan.h \ + /usr/include/qt6/QtCore/qstack.h \ + /usr/include/qt6/QtCore/qstandardpaths.h \ + /usr/include/qt6/QtCore/qstaticlatin1stringmatcher.h \ + /usr/include/qt6/QtCore/qstdlibdetection.h \ + /usr/include/qt6/QtCore/qstorageinfo.h \ + /usr/include/qt6/QtCore/qstring.h \ + /usr/include/qt6/QtCore/qstringalgorithms.h \ + /usr/include/qt6/QtCore/qstringbuilder.h \ + /usr/include/qt6/QtCore/qstringconverter.h \ + /usr/include/qt6/QtCore/qstringconverter_base.h \ + /usr/include/qt6/QtCore/qstringfwd.h \ + /usr/include/qt6/QtCore/qstringlist.h \ + /usr/include/qt6/QtCore/qstringlistmodel.h \ + /usr/include/qt6/QtCore/qstringliteral.h \ + /usr/include/qt6/QtCore/qstringmatcher.h \ + /usr/include/qt6/QtCore/qstringtokenizer.h \ + /usr/include/qt6/QtCore/qstringview.h \ + /usr/include/qt6/QtCore/qswap.h \ + /usr/include/qt6/QtCore/qsysinfo.h \ + /usr/include/qt6/QtCore/qsystemdetection.h \ + /usr/include/qt6/QtCore/qsystemsemaphore.h \ + /usr/include/qt6/QtCore/qtaggedpointer.h \ + /usr/include/qt6/QtCore/qtclasshelpermacros.h \ + /usr/include/qt6/QtCore/qtconfiginclude.h \ + /usr/include/qt6/QtCore/qtconfigmacros.h \ + /usr/include/qt6/QtCore/qtcore-config.h \ + /usr/include/qt6/QtCore/qtcoreexports.h \ + /usr/include/qt6/QtCore/qtcoreglobal.h \ + /usr/include/qt6/QtCore/qtcoreversion.h \ + /usr/include/qt6/QtCore/qtdeprecationdefinitions.h \ + /usr/include/qt6/QtCore/qtdeprecationmarkers.h \ + /usr/include/qt6/QtCore/qtemporarydir.h \ + /usr/include/qt6/QtCore/qtemporaryfile.h \ + /usr/include/qt6/QtCore/qtenvironmentvariables.h \ + /usr/include/qt6/QtCore/qtestsupport_core.h \ + /usr/include/qt6/QtCore/qtextboundaryfinder.h \ + /usr/include/qt6/QtCore/qtextstream.h \ + /usr/include/qt6/QtCore/qtformat_impl.h \ + /usr/include/qt6/QtCore/qthread.h \ + /usr/include/qt6/QtCore/qthreadpool.h \ + /usr/include/qt6/QtCore/qthreadstorage.h \ + /usr/include/qt6/QtCore/qtimeline.h \ + /usr/include/qt6/QtCore/qtimer.h \ + /usr/include/qt6/QtCore/qtimezone.h \ + /usr/include/qt6/QtCore/qtipccommon.h \ + /usr/include/qt6/QtCore/qtmetamacros.h \ + /usr/include/qt6/QtCore/qtmocconstants.h \ + /usr/include/qt6/QtCore/qtnoop.h \ + /usr/include/qt6/QtCore/qtpreprocessorsupport.h \ + /usr/include/qt6/QtCore/qtranslator.h \ + /usr/include/qt6/QtCore/qtransposeproxymodel.h \ + /usr/include/qt6/QtCore/qtresource.h \ + /usr/include/qt6/QtCore/qtsan_impl.h \ + /usr/include/qt6/QtCore/qtsymbolmacros.h \ + /usr/include/qt6/QtCore/qttranslation.h \ + /usr/include/qt6/QtCore/qttypetraits.h \ + /usr/include/qt6/QtCore/qtversion.h \ + /usr/include/qt6/QtCore/qtversionchecks.h \ + /usr/include/qt6/QtCore/qtypeinfo.h \ + /usr/include/qt6/QtCore/qtyperevision.h \ + /usr/include/qt6/QtCore/qtypes.h \ + /usr/include/qt6/QtCore/qurl.h \ + /usr/include/qt6/QtCore/qurlquery.h \ + /usr/include/qt6/QtCore/qutf8stringview.h \ + /usr/include/qt6/QtCore/quuid.h \ + /usr/include/qt6/QtCore/qvariant.h \ + /usr/include/qt6/QtCore/qvariantanimation.h \ + /usr/include/qt6/QtCore/qvarianthash.h \ + /usr/include/qt6/QtCore/qvariantlist.h \ + /usr/include/qt6/QtCore/qvariantmap.h \ + /usr/include/qt6/QtCore/qvarlengtharray.h \ + /usr/include/qt6/QtCore/qvector.h \ + /usr/include/qt6/QtCore/qversionnumber.h \ + /usr/include/qt6/QtCore/qversiontagging.h \ + /usr/include/qt6/QtCore/qwaitcondition.h \ + /usr/include/qt6/QtCore/qwineventnotifier.h \ + /usr/include/qt6/QtCore/qxmlstream.h \ + /usr/include/qt6/QtCore/qxpfunctional.h \ + /usr/include/qt6/QtCore/qxptype_traits.h \ + /usr/include/qt6/QtCore/qyieldcpu.h \ + /usr/include/qt6/QtTest/QtTest \ + /usr/include/qt6/QtTest/QtTestDepends \ + /usr/include/qt6/QtTest/qabstractitemmodeltester.h \ + /usr/include/qt6/QtTest/qbenchmark.h \ + /usr/include/qt6/QtTest/qbenchmarkmetric.h \ + /usr/include/qt6/QtTest/qsignalspy.h \ + /usr/include/qt6/QtTest/qtest.h \ + /usr/include/qt6/QtTest/qtestassert.h \ + /usr/include/qt6/QtTest/qtestcase.h \ + /usr/include/qt6/QtTest/qtestdata.h \ + /usr/include/qt6/QtTest/qtesteventloop.h \ + /usr/include/qt6/QtTest/qtestsystem.h \ + /usr/include/qt6/QtTest/qtesttostring.h \ + /usr/include/qt6/QtTest/qttestexports.h \ + /usr/include/qt6/QtTest/qttestglobal.h \ + /usr/include/qt6/QtTest/qttestlib-config.h \ + /usr/include/qt6/QtTest/qttestversion.h \ + /usr/include/sched.h \ + /usr/include/semaphore.h \ + /usr/include/stdc-predef.h \ + /usr/include/stdio.h \ + /usr/include/string.h \ + /usr/include/strings.h \ + /usr/include/sys/cdefs.h \ + /usr/include/sys/select.h \ + /usr/include/sys/single_threaded.h \ + /usr/include/sys/syscall.h \ + /usr/include/sys/time.h \ + /usr/include/sys/types.h \ + /usr/include/syscall.h \ + /usr/include/time.h \ + /usr/include/unistd.h \ + /usr/include/wchar.h \ + /usr/include/wctype.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/adxintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/amxavx512intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/amxbf16intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/amxcomplexintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/amxfp16intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/amxfp8intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/amxint8intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/amxmovrsintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/amxtf32intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/amxtileintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/amxtransposeintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2-512bf16intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2-512convertintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2-512mediaintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2-512minmaxintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2-512satcvtintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2bf16intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2convertintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2copyintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2mediaintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2minmaxintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2satcvtintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx2intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512bf16intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512bf16vlintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512bitalgintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512bitalgvlintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512bwintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512cdintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512dqintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512fintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512fp16intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512fp16vlintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512ifmaintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512ifmavlintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vbmi2intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vbmi2vlintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vbmiintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vbmivlintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vlbwintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vldqintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vlintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vnniintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vnnivlintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vp2intersectintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vp2intersectvlintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vpopcntdqintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vpopcntdqvlintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avxifmaintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avxintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avxneconvertintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avxvnniint16intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avxvnniint8intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avxvnniintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/bmi2intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/bmiintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/cetintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/cldemoteintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/clflushoptintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/clwbintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/clzerointrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/cmpccxaddintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/emmintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/enqcmdintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/f16cintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/fmaintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/fxsrintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/gfniintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/hresetintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/ia32intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/immintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/keylockerintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/limits.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/lwpintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/lzcntintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/mm_malloc.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/mmintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/movdirintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/movrsintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/mwaitintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/mwaitxintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/pconfigintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/pkuintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/pmmintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/popcntintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/prfchiintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/prfchwintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/raointintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/rdseedintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/rtmintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/serializeintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/sgxintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/sha512intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/shaintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/sm3intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/sm4intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/smmintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/stdarg.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/stdbool.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/stddef.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/stdint.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/syslimits.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/tbmintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/tmmintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/tsxldtrkintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/uintrintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/usermsrintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/vaesintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/vpclmulqdqintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/waitpkgintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/wbnoinvdintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/wmmintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/x86gprintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/xmmintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/xsavecintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/xsaveintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/xsaveoptintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/xsavesintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/xtestintrin.h \ + /usr/lib64/cmake/Qt6/Qt6Config.cmake \ + /usr/lib64/cmake/Qt6/Qt6ConfigExtras.cmake \ + /usr/lib64/cmake/Qt6/Qt6ConfigVersion.cmake \ + /usr/lib64/cmake/Qt6/Qt6ConfigVersionImpl.cmake \ + /usr/lib64/cmake/Qt6/Qt6Dependencies.cmake \ + /usr/lib64/cmake/Qt6/Qt6Targets.cmake \ + /usr/lib64/cmake/Qt6/Qt6VersionlessAliasTargets.cmake \ + /usr/lib64/cmake/Qt6/QtFeature.cmake \ + /usr/lib64/cmake/Qt6/QtFeatureCommon.cmake \ + /usr/lib64/cmake/Qt6/QtInstallPaths.cmake \ + /usr/lib64/cmake/Qt6/QtPublicAndroidHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicAppleHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicCMakeEarlyPolicyHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicCMakeHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicCMakeVersionHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicDependencyHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicExternalProjectHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicFinalizerHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicFindPackageHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicGitHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicPluginHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicPluginHelpers_v2.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomAttributionHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomBuildToolHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomCommonGenerationHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomCpeHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomCycloneDXHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomDepHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomDocumentNamespaceHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomExternalReferenceHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomFileHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomGenerationCycloneDXHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomGenerationHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomLicenseHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomOpsHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomPurlHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomPythonHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomQtEntityHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomRelationshipHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomSystemDepHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicTargetHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicTestHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicToolHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicWalkLibsHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicWindowsHelpers.cmake \ + /usr/lib64/cmake/Qt6Test/Qt6TestAdditionalTargetInfo.cmake \ + /usr/lib64/cmake/Qt6Test/Qt6TestConfig.cmake \ + /usr/lib64/cmake/Qt6Test/Qt6TestConfigVersion.cmake \ + /usr/lib64/cmake/Qt6Test/Qt6TestConfigVersionImpl.cmake \ + /usr/lib64/cmake/Qt6Test/Qt6TestDependencies.cmake \ + /usr/lib64/cmake/Qt6Test/Qt6TestTargets-relwithdebinfo.cmake \ + /usr/lib64/cmake/Qt6Test/Qt6TestTargets.cmake \ + /usr/lib64/cmake/Qt6Test/Qt6TestVersionlessAliasTargets.cmake \ + /usr/lib64/cmake/Qt6Test/QtTestProperties.cmake \ + /usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake \ + /usr/share/cmake/Modules/CheckCXXCompilerFlag.cmake \ + /usr/bin/cmake diff --git a/build-linux/tests/test_utils_autogen/include/test_utils.moc b/build-linux/tests/test_utils_autogen/include/test_utils.moc new file mode 100644 index 00000000..5873512c --- /dev/null +++ b/build-linux/tests/test_utils_autogen/include/test_utils.moc @@ -0,0 +1,112 @@ +/**************************************************************************** +** Meta object code from reading C++ file 'test_utils.cpp' +** +** Created by: The Qt Meta Object Compiler version 69 (Qt 6.10.3) +** +** WARNING! All changes made in this file will be lost! +*****************************************************************************/ + +#include + +#include + +#include + + +#include +#if !defined(Q_MOC_OUTPUT_REVISION) +#error "The header file 'test_utils.cpp' doesn't include ." +#elif Q_MOC_OUTPUT_REVISION != 69 +#error "This file was generated using the moc from 6.10.3. It" +#error "cannot be used with the include files from this version of Qt." +#error "(The moc has changed too much.)" +#endif + +#ifndef Q_CONSTINIT +#define Q_CONSTINIT +#endif + +QT_WARNING_PUSH +QT_WARNING_DISABLE_DEPRECATED +QT_WARNING_DISABLE_GCC("-Wuseless-cast") +namespace { +struct qt_meta_tag_ZN9TestUtilsE_t {}; +} // unnamed namespace + +template <> constexpr inline auto TestUtils::qt_create_metaobjectdata() +{ + namespace QMC = QtMocConstants; + QtMocHelpers::StringRefStorage qt_stringData { + "TestUtils", + "testBinarySearchFirstTrue", + "", + "testBinarySearchLastTrue" + }; + + QtMocHelpers::UintData qt_methods { + // Slot 'testBinarySearchFirstTrue' + QtMocHelpers::SlotData(1, 2, QMC::AccessPrivate, QMetaType::Void), + // Slot 'testBinarySearchLastTrue' + QtMocHelpers::SlotData(3, 2, QMC::AccessPrivate, QMetaType::Void), + }; + QtMocHelpers::UintData qt_properties { + }; + QtMocHelpers::UintData qt_enums { + }; + return QtMocHelpers::metaObjectData(QMC::MetaObjectFlag{}, qt_stringData, + qt_methods, qt_properties, qt_enums); +} +Q_CONSTINIT const QMetaObject TestUtils::staticMetaObject = { { + QMetaObject::SuperData::link(), + qt_staticMetaObjectStaticContent.stringdata, + qt_staticMetaObjectStaticContent.data, + qt_static_metacall, + nullptr, + qt_staticMetaObjectRelocatingContent.metaTypes, + nullptr +} }; + +void TestUtils::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) +{ + auto *_t = static_cast(_o); + if (_c == QMetaObject::InvokeMetaMethod) { + switch (_id) { + case 0: _t->testBinarySearchFirstTrue(); break; + case 1: _t->testBinarySearchLastTrue(); break; + default: ; + } + } + (void)_a; +} + +const QMetaObject *TestUtils::metaObject() const +{ + return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject; +} + +void *TestUtils::qt_metacast(const char *_clname) +{ + if (!_clname) return nullptr; + if (!strcmp(_clname, qt_staticMetaObjectStaticContent.strings)) + return static_cast(this); + return QObject::qt_metacast(_clname); +} + +int TestUtils::qt_metacall(QMetaObject::Call _c, int _id, void **_a) +{ + _id = QObject::qt_metacall(_c, _id, _a); + if (_id < 0) + return _id; + if (_c == QMetaObject::InvokeMetaMethod) { + if (_id < 2) + qt_static_metacall(this, _c, _id, _a); + _id -= 2; + } + if (_c == QMetaObject::RegisterMethodArgumentMetaType) { + if (_id < 2) + *reinterpret_cast(_a[0]) = QMetaType(); + _id -= 2; + } + return _id; +} +QT_WARNING_POP diff --git a/build-linux/tests/test_utils_autogen/moc_predefs.h b/build-linux/tests/test_utils_autogen/moc_predefs.h new file mode 100644 index 00000000..2c4c79c9 --- /dev/null +++ b/build-linux/tests/test_utils_autogen/moc_predefs.h @@ -0,0 +1,502 @@ +#define __DBL_MIN_EXP__ (-1021) +#define __LDBL_MANT_DIG__ 64 +#define __cpp_nontype_template_parameter_auto 201606L +#define __UINT_LEAST16_MAX__ 0xffff +#define __FLT16_HAS_QUIET_NAN__ 1 +#define __ATOMIC_ACQUIRE 2 +#define QT_TESTCASE_BUILDDIR "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests" +#define __FLT128_MAX_10_EXP__ 4932 +#define __FLT_MIN__ 1.17549435082228750796873653722224568e-38F +#define __GCC_IEC_559_COMPLEX 2 +#define __cpp_aggregate_nsdmi 201304L +#define __UINT_LEAST8_TYPE__ unsigned char +#define __SIZEOF_FLOAT80__ 16 +#define __BFLT16_DENORM_MIN__ 9.18354961579912115600575419704879436e-41BF16 +#define __cpp_impl_three_way_comparison 201907L +#define __INTMAX_C(c) c ## L +#define __CHAR_BIT__ 8 +#define __cpp_designated_initializers 201707L +#define __UINT8_MAX__ 0xff +#define __SCHAR_WIDTH__ 8 +#define __WINT_MAX__ 0xffffffffU +#define __FLT32_MIN_EXP__ (-125) +#define __cpp_static_assert 201411L +#define __BFLT16_MIN_10_EXP__ (-37) +#define __cpp_inheriting_constructors 201511L +#define __ORDER_LITTLE_ENDIAN__ 1234 +#define __WCHAR_MAX__ 0x7fffffff +#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_2 1 +#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_4 1 +#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_8 1 +#define __GCC_ATOMIC_CHAR_LOCK_FREE 2 +#define __GCC_IEC_559 2 +#define __FLT32X_DECIMAL_DIG__ 17 +#define TLRENDER_OIIO 1 +#define __FLT_EVAL_METHOD__ 0 +#define __cpp_binary_literals 201304L +#define __FLT64_DECIMAL_DIG__ 17 +#define __cpp_noexcept_function_type 201510L +#define __GCC_ATOMIC_CHAR32_T_LOCK_FREE 2 +#define __cpp_variadic_templates 200704L +#define __UINT_FAST64_MAX__ 0xffffffffffffffffUL +#define __SIG_ATOMIC_TYPE__ int +#define __DBL_MIN_10_EXP__ (-307) +#define __FINITE_MATH_ONLY__ 0 +#define __cpp_variable_templates 201304L +#define __FLT32X_MAX_EXP__ 1024 +#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_1 1 +#define __FLT32_HAS_DENORM__ 1 +#define __UINT_FAST8_MAX__ 0xff +#define __cpp_rvalue_reference 200610L +#define __cpp_nested_namespace_definitions 201411L +#define __DEC64_MAX_EXP__ 385 +#define __INT8_C(c) c +#define __LDBL_HAS_INFINITY__ 1 +#define __INT_LEAST8_WIDTH__ 8 +#define __cpp_variadic_using 201611L +#define __UINT_LEAST64_MAX__ 0xffffffffffffffffUL +#define __INT_LEAST8_MAX__ 0x7f +#define __cpp_attributes 200809L +#define __cpp_capture_star_this 201603L +#define __SHRT_MAX__ 0x7fff +#define __LDBL_MAX__ 1.18973149535723176502126385303097021e+4932L +#define __cpp_impl_coroutine 201902L +#define __FLT64X_MAX_10_EXP__ 4932 +#define __cpp_if_constexpr 201606L +#define __BFLT16_MAX_10_EXP__ 38 +#define __BFLT16_MAX_EXP__ 128 +#define __LDBL_IS_IEC_60559__ 1 +#define QT_NO_DEBUG 1 +#define __FLT64X_HAS_QUIET_NAN__ 1 +#define QT_TESTLIB_LIB 1 +#define TLRENDER_SDL2 1 +#define __UINT_LEAST8_MAX__ 0xff +#define __GCC_ATOMIC_BOOL_LOCK_FREE 2 +#define __FLT128_DENORM_MIN__ 6.47517511943802511092443895822764655e-4966F128 +#define __UINTMAX_TYPE__ long unsigned int +#define __cpp_nsdmi 200809L +#define __BFLT16_DECIMAL_DIG__ 4 +#define __linux 1 +#define __DEC32_EPSILON__ 1E-6DF +#define __FLT_EVAL_METHOD_TS_18661_3__ 0 +#define __UINT32_MAX__ 0xffffffffU +#define __GXX_EXPERIMENTAL_CXX0X__ 1 +#define __DBL_DENORM_MIN__ double(4.94065645841246544176568792868221372e-324L) +#define __FLT128_MIN_EXP__ (-16381) +#define __DEC64X_MAX_EXP__ 6145 +#define __WINT_MIN__ 0U +#define __FLT128_MIN_10_EXP__ (-4931) +#define __FLT32X_IS_IEC_60559__ 1 +#define __INT_LEAST16_WIDTH__ 16 +#define __SCHAR_MAX__ 0x7f +#define __FLT128_MANT_DIG__ 113 +#define __WCHAR_MIN__ (-__WCHAR_MAX__ - 1) +#define __INT64_C(c) c ## L +#define __cpp_impl_destroying_delete 201806L +#define __GCC_ATOMIC_POINTER_LOCK_FREE 2 +#define TLRENDER_JPEG 1 +#define __ATOMIC_SEQ_CST 5 +#define __unix 1 +#define __INT_LEAST64_MAX__ 0x7fffffffffffffffL +#define __FLT32X_MANT_DIG__ 53 +#define __GCC_ATOMIC_CHAR16_T_LOCK_FREE 2 +#define __cpp_aligned_new 201606L +#define __FLT32_MAX_10_EXP__ 38 +#define __FLT64X_EPSILON__ 1.08420217248550443400745280086994171e-19F64x +#define __STDC_HOSTED__ 1 +#define __DEC64_MIN_EXP__ (-382) +#define TLRENDER_PNG 1 +#define __cpp_decltype_auto 201304L +#define __DBL_DIG__ 15 +#define __STDC_EMBED_EMPTY__ 2 +#define __FLT_EPSILON__ 1.19209289550781250000000000000000000e-7F +#define __cpp_char8_t 202207L +#define __GXX_WEAK__ 1 +#define __SHRT_WIDTH__ 16 +#define __FLT32_IS_IEC_60559__ 1 +#define __LDBL_MIN__ 3.36210314311209350626267781732175260e-4932L +#define __DBL_IS_IEC_60559__ 1 +#define __DEC32_MAX__ 9.999999E96DF +#define __CHAR8_TYPE__ unsigned char +#define __cpp_threadsafe_static_init 200806L +#define __cpp_enumerator_attributes 201411L +#define TLRENDER_EXR 1 +#define __FLT64X_DENORM_MIN__ 3.64519953188247460252840593361941982e-4951F64x +#define __FLT32X_HAS_INFINITY__ 1 +#define __unix__ 1 +#define __INT_WIDTH__ 32 +#define __STDC_IEC_559__ 1 +#define __STDC_ISO_10646__ 201706L +#define __GCC_ATOMIC_CHAR8_T_LOCK_FREE 2 +#define __DECIMAL_DIG__ 21 +#define __STDC_IEC_559_COMPLEX__ 1 +#define __FLT64_EPSILON__ 2.22044604925031308084726333618164062e-16F64 +#define __gnu_linux__ 1 +#define __INT16_MAX__ 0x7fff +#define __FLT64_MIN_EXP__ (-1021) +#define __cpp_using_enum 201907L +#define __DEC64X_EPSILON__ 1E-33D64x +#define __FLT64X_MIN_10_EXP__ (-4931) +#define __LDBL_HAS_QUIET_NAN__ 1 +#define __FLT16_MIN_EXP__ (-13) +#define __FLT64_MANT_DIG__ 53 +#define __cpp_consteval 202211L +#define __FLT64X_MANT_DIG__ 64 +#define FTK_API_GL_4_1 1 +#define __BFLT16_DIG__ 2 +#define __GNUC__ 15 +#define __GXX_RTTI 1 +#define TLRENDER_FFMPEG_PLUGIN 1 +#define __MMX__ 1 +#define __FLT_HAS_DENORM__ 1 +#define __SIZEOF_LONG_DOUBLE__ 16 +#define __BIGGEST_ALIGNMENT__ 16 +#define __STDC_UTF_16__ 1 +#define __FLT64_MAX_10_EXP__ 308 +#define __BFLT16_IS_IEC_60559__ 0 +#define __FLT16_MAX_10_EXP__ 4 +#define __cpp_delegating_constructors 200604L +#define __DBL_MAX__ double(1.79769313486231570814527423731704357e+308L) +#define __cpp_raw_strings 200710L +#define __INT_FAST32_MAX__ 0x7fffffffffffffffL +#define __DBL_HAS_INFINITY__ 1 +#define __INT64_MAX__ 0x7fffffffffffffffL +#define __SIZEOF_FLOAT__ 4 +#define __HAVE_SPECULATION_SAFE_VALUE 1 +#define __cpp_fold_expressions 201603L +#define __DEC32_MIN_EXP__ (-94) +#define __INTPTR_WIDTH__ 64 +#define __UINT_LEAST32_MAX__ 0xffffffffU +#define __FLT32X_HAS_DENORM__ 1 +#define __INT_FAST16_TYPE__ long int +#define __MMX_WITH_SSE__ 1 +#define __LDBL_HAS_DENORM__ 1 +#define __SEG_GS 1 +#define __BFLT16_EPSILON__ 7.81250000000000000000000000000000000e-3BF16 +#define __cplusplus 202002L +#define __cpp_ref_qualifiers 200710L +#define __DEC32_MIN__ 1E-95DF +#define __DEPRECATED 1 +#define __cpp_rvalue_references 200610L +#define __DBL_MAX_EXP__ 1024 +#define __WCHAR_WIDTH__ 32 +#define __FLT32_MAX__ 3.40282346638528859811704183484516925e+38F32 +#define __DEC128_EPSILON__ 1E-33DL +#define __FLT16_DECIMAL_DIG__ 5 +#define __SSE2_MATH__ 1 +#define __ATOMIC_HLE_RELEASE 131072 +#define __PTRDIFF_MAX__ 0x7fffffffffffffffL +#define __amd64 1 +#define __DEC64X_MAX__ 9.999999999999999999999999999999999E6144D64x +#define __ATOMIC_HLE_ACQUIRE 65536 +#define __GNUG__ 15 +#define __LONG_LONG_MAX__ 0x7fffffffffffffffLL +#define __SIZEOF_SIZE_T__ 8 +#define __BFLT16_HAS_INFINITY__ 1 +#define __FLT64X_MIN_EXP__ (-16381) +#define __SIZEOF_WINT_T__ 4 +#define __FLT32X_DIG__ 15 +#define __LONG_LONG_WIDTH__ 64 +#define QT_TESTCASE_SOURCEDIR "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests" +#define __cpp_initializer_lists 200806L +#define __FLT32_MAX_EXP__ 128 +#define ABI_ID "ELF" +#define __cpp_hex_float 201603L +#define __GXX_ABI_VERSION 1020 +#define __FLT_MIN_EXP__ (-125) +#define __GCC_HAVE_DWARF2_CFI_ASM 1 +#define TLRENDER_OCIO 1 +#define __x86_64 1 +#define __cpp_lambdas 200907L +#define __INT_FAST64_TYPE__ long int +#define __BFLT16_MAX__ 3.38953138925153547590470800371487867e+38BF16 +#define __FLT64_DENORM_MIN__ 4.94065645841246544176568792868221372e-324F64 +#define __cpp_template_auto 201606L +#define __FLT16_DENORM_MIN__ 5.96046447753906250000000000000000000e-8F16 +#define __FLT128_EPSILON__ 1.92592994438723585305597794258492732e-34F128 +#define __FLT64X_NORM_MAX__ 1.18973149535723176502126385303097021e+4932F64x +#define __SIZEOF_POINTER__ 8 +#define __SIZE_TYPE__ long unsigned int +#define __LP64__ 1 +#define __DBL_HAS_QUIET_NAN__ 1 +#define __FLT32X_EPSILON__ 2.22044604925031308084726333618164062e-16F32x +#define __LDBL_MAX_EXP__ 16384 +#define __DECIMAL_BID_FORMAT__ 1 +#define __FLT64_MIN_10_EXP__ (-307) +#define __FLT16_MIN_10_EXP__ (-4) +#define __FLT64X_DECIMAL_DIG__ 21 +#define __DEC128_MIN__ 1E-6143DL +#define __REGISTER_PREFIX__ +#define __UINT16_MAX__ 0xffff +#define __FLT128_HAS_INFINITY__ 1 +#define __FLT32_MIN__ 1.17549435082228750796873653722224568e-38F32 +#define __UINT8_TYPE__ unsigned char +#define __FLT_DIG__ 6 +#define __NO_INLINE__ 1 +#define __DEC_EVAL_METHOD__ 2 +#define __FLT_MANT_DIG__ 24 +#define __LDBL_DECIMAL_DIG__ 21 +#define __VERSION__ "15.2.1 20260123 (Red Hat 15.2.1-7)" +#define __UINT64_C(c) c ## UL +#define __cpp_unicode_characters 201411L +#define __DEC64X_MIN__ 1E-6143D64x +#define _STDC_PREDEF_H 1 +#define __INT_LEAST32_MAX__ 0x7fffffff +#define __GCC_ATOMIC_INT_LOCK_FREE 2 +#define __FLT128_MAX_EXP__ 16384 +#define __cpp_conditional_explicit 201806L +#define __FLT32_MANT_DIG__ 24 +#define __cpp_decltype 200707L +#define __FLOAT_WORD_ORDER__ __ORDER_LITTLE_ENDIAN__ +#define SIZEOF_DPTR (sizeof(void*)) +#define __FLT32X_MIN_EXP__ (-1021) +#define __cpp_aggregate_paren_init 201902L +#define __STDC_IEC_60559_COMPLEX__ 201404L +#define __cpp_aggregate_bases 201603L +#define __BFLT16_MIN__ 1.17549435082228750796873653722224568e-38BF16 +#define __FLT128_HAS_DENORM__ 1 +#define __FLT32_DECIMAL_DIG__ 9 +#define __FLT128_DIG__ 33 +#define __INT32_C(c) c +#define __DEC64_EPSILON__ 1E-15DD +#define __ORDER_PDP_ENDIAN__ 3412 +#define __DEC128_MIN_EXP__ (-6142) +#define __DEC128_MAX__ 9.999999999999999999999999999999999E6144DL +#define __cpp_constinit 201907L +#define __INT_FAST32_TYPE__ long int +#define __UINT_LEAST16_TYPE__ short unsigned int +#define __DEC64X_MANT_DIG__ 34 +#define __DEC128_MAX_EXP__ 6145 +#define unix 1 +#define __DBL_HAS_DENORM__ 1 +#define __cpp_rtti 199711L +#define __UINT64_MAX__ 0xffffffffffffffffUL +#define __FLT_IS_IEC_60559__ 1 +#define __GNUC_WIDE_EXECUTION_CHARSET_NAME "UTF-32LE" +#define __FLT64X_DIG__ 18 +#define __INT8_TYPE__ signed char +#define __cpp_digit_separators 201309L +#define __ELF__ 1 +#define __GCC_ASM_FLAG_OUTPUTS__ 1 +#define __UINT32_TYPE__ unsigned int +#define __BFLT16_HAS_QUIET_NAN__ 1 +#define __FLT_RADIX__ 2 +#define __INT_LEAST16_TYPE__ short int +#define __LDBL_EPSILON__ 1.08420217248550443400745280086994171e-19L +#define __UINTMAX_C(c) c ## UL +#define __GNUC_RH_RELEASE__ 7 +#define __FLT16_DIG__ 3 +#define __k8 1 +#define __FLT32X_MIN__ 2.22507385850720138309023271733240406e-308F32x +#define __SIG_ATOMIC_MAX__ 0x7fffffff +#define __cpp_constexpr 202002L +#define __GCC_ATOMIC_WCHAR_T_LOCK_FREE 2 +#define __USER_LABEL_PREFIX__ +#define __STDC_IEC_60559_BFP__ 201404L +#define __SIZEOF_PTRDIFF_T__ 8 +#define __FLT64X_HAS_INFINITY__ 1 +#define __SIZEOF_LONG__ 8 +#define __LDBL_DIG__ 18 +#define __FLT64_IS_IEC_60559__ 1 +#define __x86_64__ 1 +#define __FLT16_IS_IEC_60559__ 1 +#define __FLT16_MAX_EXP__ 16 +#define __DEC32_SUBNORMAL_MIN__ 0.000001E-95DF +#define __STDC_EMBED_FOUND__ 1 +#define __INT_FAST16_MAX__ 0x7fffffffffffffffL +#define __GCC_CONSTRUCTIVE_SIZE 64 +#define __FLT64_DIG__ 15 +#define __UINT_FAST32_MAX__ 0xffffffffffffffffUL +#define __UINT_LEAST64_TYPE__ long unsigned int +#define __FLT16_EPSILON__ 9.76562500000000000000000000000000000e-4F16 +#define __FLT_HAS_QUIET_NAN__ 1 +#define __FLT_MAX_10_EXP__ 38 +#define __FLT64X_HAS_DENORM__ 1 +#define __DEC128_SUBNORMAL_MIN__ 0.000000000000000000000000000000001E-6143DL +#define __FLT_HAS_INFINITY__ 1 +#define __GNUC_EXECUTION_CHARSET_NAME "UTF-8" +#define __cpp_unicode_literals 200710L +#define __UINT_FAST16_TYPE__ long unsigned int +#define __DEC64_MAX__ 9.999999999999999E384DD +#define __STDC_EMBED_NOT_FOUND__ 0 +#define __INT_FAST32_WIDTH__ 64 +#define __CHAR16_TYPE__ short unsigned int +#define __PRAGMA_REDEFINE_EXTNAME 1 +#define __DEC64X_SUBNORMAL_MIN__ 0.000000000000000000000000000000001E-6143D64x +#define __SIZE_WIDTH__ 64 +#define __SEG_FS 1 +#define __INT_LEAST16_MAX__ 0x7fff +#define __FLT16_NORM_MAX__ 6.55040000000000000000000000000000000e+4F16 +#define __DEC64_MANT_DIG__ 16 +#define __FLT32_DENORM_MIN__ 1.40129846432481707092372958328991613e-45F32 +#define __SIG_ATOMIC_WIDTH__ 32 +#define __GCC_DESTRUCTIVE_SIZE 64 +#define __INT_LEAST64_TYPE__ long int +#define __INT16_TYPE__ short int +#define __INT_LEAST8_TYPE__ signed char +#define __FLT16_MAX__ 6.55040000000000000000000000000000000e+4F16 +#define __FLT128_MIN__ 3.36210314311209350626267781732175260e-4932F128 +#define __cpp_structured_bindings 201606L +#define __SIZEOF_INT__ 4 +#define __DEC32_MAX_EXP__ 97 +#define __INT_FAST8_MAX__ 0x7f +#define __FLT128_MAX__ 1.18973149535723176508575932662800702e+4932F128 +#define __INTPTR_MAX__ 0x7fffffffffffffffL +#define __cpp_sized_deallocation 201309L +#define __cpp_guaranteed_copy_elision 201606L +#define linux 1 +#define __FLT64_HAS_QUIET_NAN__ 1 +#define __FLT32_MIN_10_EXP__ (-37) +#define __EXCEPTIONS 1 +#define __UINT16_C(c) c +#define __PTRDIFF_WIDTH__ 64 +#define __cpp_range_based_for 201603L +#define __INT_FAST16_WIDTH__ 64 +#define __FLT64_HAS_INFINITY__ 1 +#define __FLT64X_MAX__ 1.18973149535723176502126385303097021e+4932F64x +#define __FLT16_HAS_INFINITY__ 1 +#define __STDCPP_DEFAULT_NEW_ALIGNMENT__ 16 +#define __SIG_ATOMIC_MIN__ (-__SIG_ATOMIC_MAX__ - 1) +#define __code_model_small__ 1 +#define __GCC_ATOMIC_LONG_LOCK_FREE 2 +#define __cpp_nontype_template_args 201911L +#define __DEC32_MANT_DIG__ 7 +#define __k8__ 1 +#define __INTPTR_TYPE__ long int +#define __UINT16_TYPE__ short unsigned int +#define __WCHAR_TYPE__ int +#define __UINTPTR_MAX__ 0xffffffffffffffffUL +#define __INT_FAST64_WIDTH__ 64 +#define __cpp_nontype_template_parameter_class 201806L +#define __cpp_concepts 202002L +#define __INT_FAST64_MAX__ 0x7fffffffffffffffL +#define __GCC_ATOMIC_TEST_AND_SET_TRUEVAL 1 +#define __FLT_NORM_MAX__ 3.40282346638528859811704183484516925e+38F +#define __FLT32_HAS_INFINITY__ 1 +#define __FLT64X_MAX_EXP__ 16384 +#define __UINT_FAST64_TYPE__ long unsigned int +#define __cpp_constexpr_in_decltype 201711L +#define __cpp_inline_variables 201606L +#define __BFLT16_MIN_EXP__ (-125) +#define __INT_MAX__ 0x7fffffff +#define __linux__ 1 +#define __INT64_TYPE__ long int +#define __FLT_MAX_EXP__ 128 +#define __ORDER_BIG_ENDIAN__ 4321 +#define __DBL_MANT_DIG__ 53 +#define QT_CORE_LIB 1 +#define __SIZEOF_FLOAT128__ 16 +#define __BFLT16_MANT_DIG__ 8 +#define __DEC64_MIN__ 1E-383DD +#define __WINT_TYPE__ unsigned int +#define __UINT_LEAST32_TYPE__ unsigned int +#define __SIZEOF_SHORT__ 2 +#define __FLT32_NORM_MAX__ 3.40282346638528859811704183484516925e+38F32 +#define __SSE__ 1 +#define __LDBL_MIN_EXP__ (-16381) +#define __FLT64_MAX__ 1.79769313486231570814527423731704357e+308F64 +#define __DEC64X_MIN_EXP__ (-6142) +#define __amd64__ 1 +#define __WINT_WIDTH__ 32 +#define __INT_LEAST64_WIDTH__ 64 +#define __FLT32X_MAX_10_EXP__ 308 +#define __cpp_namespace_attributes 201411L +#define __SIZEOF_INT128__ 16 +#define __FLT16_MIN__ 6.10351562500000000000000000000000000e-5F16 +#define __FLT64X_IS_IEC_60559__ 1 +#define __GXX_CONSTEXPR_ASM__ 1 +#define __LDBL_MAX_10_EXP__ 4932 +#define __ATOMIC_RELAXED 0 +#define __DBL_EPSILON__ double(2.22044604925031308084726333618164062e-16L) +#define __INT_LEAST32_TYPE__ int +#define _LP64 1 +#define __UINT8_C(c) c +#define __FLT64_MAX_EXP__ 1024 +#define __cpp_return_type_deduction 201304L +#define __SIZEOF_WCHAR_T__ 4 +#define __GNUC_PATCHLEVEL__ 1 +#define __FLT128_NORM_MAX__ 1.18973149535723176508575932662800702e+4932F128 +#define __FLT64_NORM_MAX__ 1.79769313486231570814527423731704357e+308F64 +#define __FLT128_HAS_QUIET_NAN__ 1 +#define __INTMAX_MAX__ 0x7fffffffffffffffL +#define TLRENDER_TIFF 1 +#define __INT_FAST8_TYPE__ signed char +#define __FLT64X_MIN__ 3.36210314311209350626267781732175260e-4932F64x +#define __STDCPP_THREADS__ 1 +#define __BFLT16_HAS_DENORM__ 1 +#define __GNUC_STDC_INLINE__ 1 +#define __FLT64_HAS_DENORM__ 1 +#define __FLT32_EPSILON__ 1.19209289550781250000000000000000000e-7F32 +#define __FLT16_HAS_DENORM__ 1 +#define __DBL_DECIMAL_DIG__ 17 +#define __STDC_UTF_32__ 1 +#define __INT_FAST8_WIDTH__ 8 +#define __FXSR__ 1 +#define __FLT32X_MAX__ 1.79769313486231570814527423731704357e+308F32x +#define __DBL_NORM_MAX__ double(1.79769313486231570814527423731704357e+308L) +#define __BYTE_ORDER__ __ORDER_LITTLE_ENDIAN__ +#define TLRENDER_FFMPEG 1 +#define __INTMAX_WIDTH__ 64 +#define __cpp_runtime_arrays 198712L +#define __FLT32_DIG__ 6 +#define __UINT64_TYPE__ long unsigned int +#define __UINT32_C(c) c ## U +#define __cpp_alias_templates 200704L +#define __cpp_constexpr_dynamic_alloc 201907L +#define __FLT_DENORM_MIN__ 1.40129846432481707092372958328991613e-45F +#define __FLT128_IS_IEC_60559__ 1 +#define __INT8_MAX__ 0x7f +#define __LONG_WIDTH__ 64 +#define __DBL_MIN__ double(2.22507385850720138309023271733240406e-308L) +#define __INT32_MAX__ 0x7fffffff +#define __UINT_FAST32_TYPE__ long unsigned int +#define __FLT16_MANT_DIG__ 11 +#define __FLT32X_NORM_MAX__ 1.79769313486231570814527423731704357e+308F32x +#define __CHAR32_TYPE__ unsigned int +#define __FLT_MAX__ 3.40282346638528859811704183484516925e+38F +#define __SSE2__ 1 +#define __cpp_deduction_guides 201907L +#define __BFLT16_NORM_MAX__ 3.38953138925153547590470800371487867e+38BF16 +#define __INT32_TYPE__ int +#define __SIZEOF_DOUBLE__ 8 +#define __cpp_exceptions 199711L +#define __FLT_MIN_10_EXP__ (-37) +#define __FLT64_MIN__ 2.22507385850720138309023271733240406e-308F64 +#define __INT_LEAST32_WIDTH__ 32 +#define __INTMAX_TYPE__ long int +#define __GLIBCXX_BITSIZE_INT_N_0 128 +#define __FLT32X_HAS_QUIET_NAN__ 1 +#define __ATOMIC_CONSUME 1 +#define __GNUC_MINOR__ 2 +#define __GLIBCXX_TYPE_INT_N_0 __int128 +#define __UINTMAX_MAX__ 0xffffffffffffffffUL +#define __FLT32X_DENORM_MIN__ 4.94065645841246544176568792868221372e-324F32x +#define __cpp_template_template_args 201611L +#define __DBL_MAX_10_EXP__ 308 +#define __LDBL_DENORM_MIN__ 3.64519953188247460252840593361941982e-4951L +#define __INT16_C(c) c +#define __STDC__ 1 +#define __PTRDIFF_TYPE__ long int +#define __LONG_MAX__ 0x7fffffffffffffffL +#define __FLT32X_MIN_10_EXP__ (-307) +#define __UINTPTR_TYPE__ long unsigned int +#define __DEC64_SUBNORMAL_MIN__ 0.000000000000001E-383DD +#define __DEC128_MANT_DIG__ 34 +#define __LDBL_MIN_10_EXP__ (-4931) +#define __cpp_generic_lambdas 201707L +#define __SSE_MATH__ 1 +#define __SIZEOF_LONG_LONG__ 8 +#define __cpp_user_defined_literals 200809L +#define __FLT128_DECIMAL_DIG__ 36 +#define __GCC_ATOMIC_LLONG_LOCK_FREE 2 +#define __FLT32_HAS_QUIET_NAN__ 1 +#define __FLT_DECIMAL_DIG__ 9 +#define __UINT_FAST16_MAX__ 0xffffffffffffffffUL +#define __LDBL_NORM_MAX__ 1.18973149535723176502126385303097021e+4932L +#define __GCC_ATOMIC_SHORT_LOCK_FREE 2 +#define __SIZE_MAX__ 0xffffffffffffffffUL +#define __UINT_FAST8_TYPE__ unsigned char +#define _GNU_SOURCE 1 +#define __cpp_init_captures 201803L +#define __ATOMIC_ACQ_REL 4 +#define __ATOMIC_RELEASE 3 diff --git a/build-linux/tests/test_utils_autogen/mocs_compilation.cpp b/build-linux/tests/test_utils_autogen/mocs_compilation.cpp new file mode 100644 index 00000000..bda67f76 --- /dev/null +++ b/build-linux/tests/test_utils_autogen/mocs_compilation.cpp @@ -0,0 +1,3 @@ +// This file is autogenerated. Changes will be overwritten. +// No files found that require moc or the moc files are included +enum some_compilers { need_more_than_nothing }; diff --git a/build-linux/tests/test_utils_autogen/timestamp b/build-linux/tests/test_utils_autogen/timestamp new file mode 100644 index 00000000..e69de29b diff --git a/build-linux/tests/test_virtual_drag b/build-linux/tests/test_virtual_drag new file mode 100755 index 00000000..168919ec Binary files /dev/null and b/build-linux/tests/test_virtual_drag differ diff --git a/build-linux/tests/test_virtual_drag_autogen/deps b/build-linux/tests/test_virtual_drag_autogen/deps new file mode 100644 index 00000000..5066068a --- /dev/null +++ b/build-linux/tests/test_virtual_drag_autogen/deps @@ -0,0 +1,898 @@ +test_virtual_drag_autogen/timestamp: \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests/test_virtual_drag_autogen/moc_predefs.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/virtual_drag.cpp \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/src/virtual_drag.h \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/CMakeLists.txt \ + /home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests/test_virtual_drag.cpp \ + /usr/include/alloca.h \ + /usr/include/asm-generic/bitsperlong.h \ + /usr/include/asm-generic/errno-base.h \ + /usr/include/asm-generic/errno.h \ + /usr/include/asm-generic/int-ll64.h \ + /usr/include/asm-generic/posix_types.h \ + /usr/include/asm-generic/types.h \ + /usr/include/asm/bitsperlong.h \ + /usr/include/asm/errno.h \ + /usr/include/asm/posix_types.h \ + /usr/include/asm/posix_types_64.h \ + /usr/include/asm/types.h \ + /usr/include/asm/unistd.h \ + /usr/include/asm/unistd_64.h \ + /usr/include/assert.h \ + /usr/include/bits/atomic_wide_counter.h \ + /usr/include/bits/byteswap.h \ + /usr/include/bits/confname.h \ + /usr/include/bits/cpu-set.h \ + /usr/include/bits/endian.h \ + /usr/include/bits/endianness.h \ + /usr/include/bits/environments.h \ + /usr/include/bits/errno.h \ + /usr/include/bits/floatn-common.h \ + /usr/include/bits/floatn.h \ + /usr/include/bits/getopt_core.h \ + /usr/include/bits/getopt_posix.h \ + /usr/include/bits/libc-header-start.h \ + /usr/include/bits/local_lim.h \ + /usr/include/bits/locale.h \ + /usr/include/bits/long-double.h \ + /usr/include/bits/posix1_lim.h \ + /usr/include/bits/posix2_lim.h \ + /usr/include/bits/posix_opt.h \ + /usr/include/bits/pthread_stack_min-dynamic.h \ + /usr/include/bits/pthreadtypes-arch.h \ + /usr/include/bits/pthreadtypes.h \ + /usr/include/bits/sched.h \ + /usr/include/bits/select.h \ + /usr/include/bits/semaphore.h \ + /usr/include/bits/setjmp.h \ + /usr/include/bits/stdint-intn.h \ + /usr/include/bits/stdint-least.h \ + /usr/include/bits/stdint-uintn.h \ + /usr/include/bits/stdio_lim.h \ + /usr/include/bits/stdlib-float.h \ + /usr/include/bits/struct_mutex.h \ + /usr/include/bits/struct_rwlock.h \ + /usr/include/bits/syscall.h \ + /usr/include/bits/thread-shared-types.h \ + /usr/include/bits/time.h \ + /usr/include/bits/time64.h \ + /usr/include/bits/timesize.h \ + /usr/include/bits/timex.h \ + /usr/include/bits/types.h \ + /usr/include/bits/types/FILE.h \ + /usr/include/bits/types/__FILE.h \ + /usr/include/bits/types/__fpos64_t.h \ + /usr/include/bits/types/__fpos_t.h \ + /usr/include/bits/types/__locale_t.h \ + /usr/include/bits/types/__mbstate_t.h \ + /usr/include/bits/types/__sigset_t.h \ + /usr/include/bits/types/clock_t.h \ + /usr/include/bits/types/clockid_t.h \ + /usr/include/bits/types/cookie_io_functions_t.h \ + /usr/include/bits/types/error_t.h \ + /usr/include/bits/types/locale_t.h \ + /usr/include/bits/types/mbstate_t.h \ + /usr/include/bits/types/sigset_t.h \ + /usr/include/bits/types/struct_FILE.h \ + /usr/include/bits/types/struct___jmp_buf_tag.h \ + /usr/include/bits/types/struct_itimerspec.h \ + /usr/include/bits/types/struct_sched_param.h \ + /usr/include/bits/types/struct_timespec.h \ + /usr/include/bits/types/struct_timeval.h \ + /usr/include/bits/types/struct_tm.h \ + /usr/include/bits/types/time_t.h \ + /usr/include/bits/types/timer_t.h \ + /usr/include/bits/types/wint_t.h \ + /usr/include/bits/typesizes.h \ + /usr/include/bits/uintn-identity.h \ + /usr/include/bits/uio_lim.h \ + /usr/include/bits/unistd_ext.h \ + /usr/include/bits/waitflags.h \ + /usr/include/bits/waitstatus.h \ + /usr/include/bits/wchar.h \ + /usr/include/bits/wctype-wchar.h \ + /usr/include/bits/wordsize.h \ + /usr/include/bits/xopen_lim.h \ + /usr/include/c++/15/algorithm \ + /usr/include/c++/15/array \ + /usr/include/c++/15/atomic \ + /usr/include/c++/15/backward/auto_ptr.h \ + /usr/include/c++/15/backward/binders.h \ + /usr/include/c++/15/bit \ + /usr/include/c++/15/bits/algorithmfwd.h \ + /usr/include/c++/15/bits/align.h \ + /usr/include/c++/15/bits/alloc_traits.h \ + /usr/include/c++/15/bits/allocated_ptr.h \ + /usr/include/c++/15/bits/allocator.h \ + /usr/include/c++/15/bits/atomic_base.h \ + /usr/include/c++/15/bits/atomic_futex.h \ + /usr/include/c++/15/bits/atomic_lockfree_defines.h \ + /usr/include/c++/15/bits/atomic_timed_wait.h \ + /usr/include/c++/15/bits/atomic_wait.h \ + /usr/include/c++/15/bits/basic_ios.h \ + /usr/include/c++/15/bits/basic_ios.tcc \ + /usr/include/c++/15/bits/basic_string.h \ + /usr/include/c++/15/bits/basic_string.tcc \ + /usr/include/c++/15/bits/char_traits.h \ + /usr/include/c++/15/bits/charconv.h \ + /usr/include/c++/15/bits/chrono.h \ + /usr/include/c++/15/bits/chrono_io.h \ + /usr/include/c++/15/bits/codecvt.h \ + /usr/include/c++/15/bits/concept_check.h \ + /usr/include/c++/15/bits/cpp_type_traits.h \ + /usr/include/c++/15/bits/cxxabi_forced.h \ + /usr/include/c++/15/bits/cxxabi_init_exception.h \ + /usr/include/c++/15/bits/enable_special_members.h \ + /usr/include/c++/15/bits/erase_if.h \ + /usr/include/c++/15/bits/exception.h \ + /usr/include/c++/15/bits/exception_defines.h \ + /usr/include/c++/15/bits/exception_ptr.h \ + /usr/include/c++/15/bits/functexcept.h \ + /usr/include/c++/15/bits/functional_hash.h \ + /usr/include/c++/15/bits/hash_bytes.h \ + /usr/include/c++/15/bits/hashtable.h \ + /usr/include/c++/15/bits/hashtable_policy.h \ + /usr/include/c++/15/bits/invoke.h \ + /usr/include/c++/15/bits/ios_base.h \ + /usr/include/c++/15/bits/istream.tcc \ + /usr/include/c++/15/bits/iterator_concepts.h \ + /usr/include/c++/15/bits/list.tcc \ + /usr/include/c++/15/bits/locale_classes.h \ + /usr/include/c++/15/bits/locale_classes.tcc \ + /usr/include/c++/15/bits/locale_conv.h \ + /usr/include/c++/15/bits/locale_facets.h \ + /usr/include/c++/15/bits/locale_facets.tcc \ + /usr/include/c++/15/bits/locale_facets_nonio.h \ + /usr/include/c++/15/bits/locale_facets_nonio.tcc \ + /usr/include/c++/15/bits/localefwd.h \ + /usr/include/c++/15/bits/max_size_type.h \ + /usr/include/c++/15/bits/memory_resource.h \ + /usr/include/c++/15/bits/memoryfwd.h \ + /usr/include/c++/15/bits/move.h \ + /usr/include/c++/15/bits/nested_exception.h \ + /usr/include/c++/15/bits/new_allocator.h \ + /usr/include/c++/15/bits/node_handle.h \ + /usr/include/c++/15/bits/ostream.h \ + /usr/include/c++/15/bits/ostream.tcc \ + /usr/include/c++/15/bits/ostream_insert.h \ + /usr/include/c++/15/bits/parse_numbers.h \ + /usr/include/c++/15/bits/postypes.h \ + /usr/include/c++/15/bits/predefined_ops.h \ + /usr/include/c++/15/bits/ptr_traits.h \ + /usr/include/c++/15/bits/quoted_string.h \ + /usr/include/c++/15/bits/random.h \ + /usr/include/c++/15/bits/random.tcc \ + /usr/include/c++/15/bits/range_access.h \ + /usr/include/c++/15/bits/ranges_algo.h \ + /usr/include/c++/15/bits/ranges_algobase.h \ + /usr/include/c++/15/bits/ranges_base.h \ + /usr/include/c++/15/bits/ranges_cmp.h \ + /usr/include/c++/15/bits/ranges_uninitialized.h \ + /usr/include/c++/15/bits/ranges_util.h \ + /usr/include/c++/15/bits/refwrap.h \ + /usr/include/c++/15/bits/requires_hosted.h \ + /usr/include/c++/15/bits/semaphore_base.h \ + /usr/include/c++/15/bits/shared_ptr.h \ + /usr/include/c++/15/bits/shared_ptr_atomic.h \ + /usr/include/c++/15/bits/shared_ptr_base.h \ + /usr/include/c++/15/bits/specfun.h \ + /usr/include/c++/15/bits/sstream.tcc \ + /usr/include/c++/15/bits/std_abs.h \ + /usr/include/c++/15/bits/std_function.h \ + /usr/include/c++/15/bits/std_mutex.h \ + /usr/include/c++/15/bits/std_thread.h \ + /usr/include/c++/15/bits/stl_algo.h \ + /usr/include/c++/15/bits/stl_algobase.h \ + /usr/include/c++/15/bits/stl_bvector.h \ + /usr/include/c++/15/bits/stl_construct.h \ + /usr/include/c++/15/bits/stl_function.h \ + /usr/include/c++/15/bits/stl_heap.h \ + /usr/include/c++/15/bits/stl_iterator.h \ + /usr/include/c++/15/bits/stl_iterator_base_funcs.h \ + /usr/include/c++/15/bits/stl_iterator_base_types.h \ + /usr/include/c++/15/bits/stl_list.h \ + /usr/include/c++/15/bits/stl_map.h \ + /usr/include/c++/15/bits/stl_multimap.h \ + /usr/include/c++/15/bits/stl_multiset.h \ + /usr/include/c++/15/bits/stl_numeric.h \ + /usr/include/c++/15/bits/stl_pair.h \ + /usr/include/c++/15/bits/stl_raw_storage_iter.h \ + /usr/include/c++/15/bits/stl_relops.h \ + /usr/include/c++/15/bits/stl_set.h \ + /usr/include/c++/15/bits/stl_tempbuf.h \ + /usr/include/c++/15/bits/stl_tree.h \ + /usr/include/c++/15/bits/stl_uninitialized.h \ + /usr/include/c++/15/bits/stl_vector.h \ + /usr/include/c++/15/bits/stream_iterator.h \ + /usr/include/c++/15/bits/streambuf.tcc \ + /usr/include/c++/15/bits/streambuf_iterator.h \ + /usr/include/c++/15/bits/string_view.tcc \ + /usr/include/c++/15/bits/stringfwd.h \ + /usr/include/c++/15/bits/this_thread_sleep.h \ + /usr/include/c++/15/bits/uniform_int_dist.h \ + /usr/include/c++/15/bits/unique_lock.h \ + /usr/include/c++/15/bits/unique_ptr.h \ + /usr/include/c++/15/bits/unordered_map.h \ + /usr/include/c++/15/bits/unordered_set.h \ + /usr/include/c++/15/bits/uses_allocator.h \ + /usr/include/c++/15/bits/uses_allocator_args.h \ + /usr/include/c++/15/bits/utility.h \ + /usr/include/c++/15/bits/vector.tcc \ + /usr/include/c++/15/bits/version.h \ + /usr/include/c++/15/cassert \ + /usr/include/c++/15/cctype \ + /usr/include/c++/15/cerrno \ + /usr/include/c++/15/charconv \ + /usr/include/c++/15/chrono \ + /usr/include/c++/15/climits \ + /usr/include/c++/15/clocale \ + /usr/include/c++/15/cmath \ + /usr/include/c++/15/compare \ + /usr/include/c++/15/concepts \ + /usr/include/c++/15/condition_variable \ + /usr/include/c++/15/cstddef \ + /usr/include/c++/15/cstdint \ + /usr/include/c++/15/cstdio \ + /usr/include/c++/15/cstdlib \ + /usr/include/c++/15/cstring \ + /usr/include/c++/15/ctime \ + /usr/include/c++/15/cwchar \ + /usr/include/c++/15/cwctype \ + /usr/include/c++/15/debug/assertions.h \ + /usr/include/c++/15/debug/debug.h \ + /usr/include/c++/15/exception \ + /usr/include/c++/15/experimental/source_location \ + /usr/include/c++/15/ext/aligned_buffer.h \ + /usr/include/c++/15/ext/alloc_traits.h \ + /usr/include/c++/15/ext/atomicity.h \ + /usr/include/c++/15/ext/concurrence.h \ + /usr/include/c++/15/ext/numeric_traits.h \ + /usr/include/c++/15/ext/string_conversions.h \ + /usr/include/c++/15/ext/type_traits.h \ + /usr/include/c++/15/filesystem \ + /usr/include/c++/15/format \ + /usr/include/c++/15/functional \ + /usr/include/c++/15/future \ + /usr/include/c++/15/initializer_list \ + /usr/include/c++/15/iomanip \ + /usr/include/c++/15/ios \ + /usr/include/c++/15/iosfwd \ + /usr/include/c++/15/istream \ + /usr/include/c++/15/iterator \ + /usr/include/c++/15/limits \ + /usr/include/c++/15/list \ + /usr/include/c++/15/locale \ + /usr/include/c++/15/map \ + /usr/include/c++/15/memory \ + /usr/include/c++/15/memory_resource \ + /usr/include/c++/15/mutex \ + /usr/include/c++/15/new \ + /usr/include/c++/15/numeric \ + /usr/include/c++/15/optional \ + /usr/include/c++/15/ostream \ + /usr/include/c++/15/pstl/execution_defs.h \ + /usr/include/c++/15/pstl/glue_numeric_defs.h \ + /usr/include/c++/15/pstl/pstl_config.h \ + /usr/include/c++/15/random \ + /usr/include/c++/15/ratio \ + /usr/include/c++/15/semaphore \ + /usr/include/c++/15/set \ + /usr/include/c++/15/shared_mutex \ + /usr/include/c++/15/source_location \ + /usr/include/c++/15/sstream \ + /usr/include/c++/15/stdexcept \ + /usr/include/c++/15/stop_token \ + /usr/include/c++/15/streambuf \ + /usr/include/c++/15/string \ + /usr/include/c++/15/string_view \ + /usr/include/c++/15/system_error \ + /usr/include/c++/15/tr1/bessel_function.tcc \ + /usr/include/c++/15/tr1/beta_function.tcc \ + /usr/include/c++/15/tr1/ell_integral.tcc \ + /usr/include/c++/15/tr1/exp_integral.tcc \ + /usr/include/c++/15/tr1/gamma.tcc \ + /usr/include/c++/15/tr1/hypergeometric.tcc \ + /usr/include/c++/15/tr1/legendre_function.tcc \ + /usr/include/c++/15/tr1/modified_bessel_func.tcc \ + /usr/include/c++/15/tr1/poly_hermite.tcc \ + /usr/include/c++/15/tr1/poly_laguerre.tcc \ + /usr/include/c++/15/tr1/riemann_zeta.tcc \ + /usr/include/c++/15/tr1/special_function_util.h \ + /usr/include/c++/15/tuple \ + /usr/include/c++/15/type_traits \ + /usr/include/c++/15/typeinfo \ + /usr/include/c++/15/unordered_map \ + /usr/include/c++/15/unordered_set \ + /usr/include/c++/15/utility \ + /usr/include/c++/15/variant \ + /usr/include/c++/15/vector \ + /usr/include/c++/15/version \ + /usr/include/c++/15/x86_64-redhat-linux/bits/atomic_word.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/c++allocator.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/c++config.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/c++locale.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/cpu_defines.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/ctype_base.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/ctype_inline.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/error_constants.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/gthr-default.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/gthr.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/messages_members.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/opt_random.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/os_defines.h \ + /usr/include/c++/15/x86_64-redhat-linux/bits/time_members.h \ + /usr/include/ctype.h \ + /usr/include/endian.h \ + /usr/include/errno.h \ + /usr/include/features-time64.h \ + /usr/include/features.h \ + /usr/include/gnu/stubs-64.h \ + /usr/include/gnu/stubs.h \ + /usr/include/libintl.h \ + /usr/include/limits.h \ + /usr/include/linux/close_range.h \ + /usr/include/linux/errno.h \ + /usr/include/linux/limits.h \ + /usr/include/linux/posix_types.h \ + /usr/include/linux/sched/types.h \ + /usr/include/linux/stddef.h \ + /usr/include/linux/types.h \ + /usr/include/locale.h \ + /usr/include/pthread.h \ + /usr/include/qt6/QtCore/QAbstractItemModel \ + /usr/include/qt6/QtCore/QByteArray \ + /usr/include/qt6/QtCore/QDeadlineTimer \ + /usr/include/qt6/QtCore/QEvent \ + /usr/include/qt6/QtCore/QHash \ + /usr/include/qt6/QtCore/QList \ + /usr/include/qt6/QtCore/QMap \ + /usr/include/qt6/QtCore/QMargins \ + /usr/include/qt6/QtCore/QMutex \ + /usr/include/qt6/QtCore/QObject \ + /usr/include/qt6/QtCore/QRect \ + /usr/include/qt6/QtCore/QSize \ + /usr/include/qt6/QtCore/QSizeF \ + /usr/include/qt6/QtCore/QString \ + /usr/include/qt6/QtCore/QStringList \ + /usr/include/qt6/QtCore/QVariant \ + /usr/include/qt6/QtCore/QVector \ + /usr/include/qt6/QtCore/QtCore \ + /usr/include/qt6/QtCore/QtCoreDepends \ + /usr/include/qt6/QtCore/q17memory.h \ + /usr/include/qt6/QtCore/q20algorithm.h \ + /usr/include/qt6/QtCore/q20chrono.h \ + /usr/include/qt6/QtCore/q20functional.h \ + /usr/include/qt6/QtCore/q20iterator.h \ + /usr/include/qt6/QtCore/q20map.h \ + /usr/include/qt6/QtCore/q20memory.h \ + /usr/include/qt6/QtCore/q20type_traits.h \ + /usr/include/qt6/QtCore/q20utility.h \ + /usr/include/qt6/QtCore/q20vector.h \ + /usr/include/qt6/QtCore/q23functional.h \ + /usr/include/qt6/QtCore/q23type_traits.h \ + /usr/include/qt6/QtCore/q23utility.h \ + /usr/include/qt6/QtCore/q26numeric.h \ + /usr/include/qt6/QtCore/qabstractanimation.h \ + /usr/include/qt6/QtCore/qabstracteventdispatcher.h \ + /usr/include/qt6/QtCore/qabstractitemmodel.h \ + /usr/include/qt6/QtCore/qabstractnativeeventfilter.h \ + /usr/include/qt6/QtCore/qabstractproxymodel.h \ + /usr/include/qt6/QtCore/qalgorithms.h \ + /usr/include/qt6/QtCore/qalloc.h \ + /usr/include/qt6/QtCore/qanimationgroup.h \ + /usr/include/qt6/QtCore/qanystringview.h \ + /usr/include/qt6/QtCore/qapplicationstatic.h \ + /usr/include/qt6/QtCore/qarraydata.h \ + /usr/include/qt6/QtCore/qarraydataops.h \ + /usr/include/qt6/QtCore/qarraydatapointer.h \ + /usr/include/qt6/QtCore/qassert.h \ + /usr/include/qt6/QtCore/qassociativeiterable.h \ + /usr/include/qt6/QtCore/qatomic.h \ + /usr/include/qt6/QtCore/qatomic_cxx11.h \ + /usr/include/qt6/QtCore/qatomicscopedvaluerollback.h \ + /usr/include/qt6/QtCore/qbasicatomic.h \ + /usr/include/qt6/QtCore/qbasictimer.h \ + /usr/include/qt6/QtCore/qbindingstorage.h \ + /usr/include/qt6/QtCore/qbitarray.h \ + /usr/include/qt6/QtCore/qbuffer.h \ + /usr/include/qt6/QtCore/qbytearray.h \ + /usr/include/qt6/QtCore/qbytearrayalgorithms.h \ + /usr/include/qt6/QtCore/qbytearraylist.h \ + /usr/include/qt6/QtCore/qbytearraymatcher.h \ + /usr/include/qt6/QtCore/qbytearrayview.h \ + /usr/include/qt6/QtCore/qcache.h \ + /usr/include/qt6/QtCore/qcalendar.h \ + /usr/include/qt6/QtCore/qcborarray.h \ + /usr/include/qt6/QtCore/qcborcommon.h \ + /usr/include/qt6/QtCore/qcbormap.h \ + /usr/include/qt6/QtCore/qcborstream.h \ + /usr/include/qt6/QtCore/qcborstreamreader.h \ + /usr/include/qt6/QtCore/qcborstreamwriter.h \ + /usr/include/qt6/QtCore/qcborvalue.h \ + /usr/include/qt6/QtCore/qchar.h \ + /usr/include/qt6/QtCore/qcheckedint_impl.h \ + /usr/include/qt6/QtCore/qchronotimer.h \ + /usr/include/qt6/QtCore/qcollator.h \ + /usr/include/qt6/QtCore/qcommandlineoption.h \ + /usr/include/qt6/QtCore/qcommandlineparser.h \ + /usr/include/qt6/QtCore/qcompare.h \ + /usr/include/qt6/QtCore/qcompare_impl.h \ + /usr/include/qt6/QtCore/qcomparehelpers.h \ + /usr/include/qt6/QtCore/qcompilerdetection.h \ + /usr/include/qt6/QtCore/qconcatenatetablesproxymodel.h \ + /usr/include/qt6/QtCore/qconfig-64.h \ + /usr/include/qt6/QtCore/qconfig.h \ + /usr/include/qt6/QtCore/qconstructormacros.h \ + /usr/include/qt6/QtCore/qcontainerfwd.h \ + /usr/include/qt6/QtCore/qcontainerinfo.h \ + /usr/include/qt6/QtCore/qcontainertools_impl.h \ + /usr/include/qt6/QtCore/qcontiguouscache.h \ + /usr/include/qt6/QtCore/qcoreapplication.h \ + /usr/include/qt6/QtCore/qcoreapplication_platform.h \ + /usr/include/qt6/QtCore/qcoreevent.h \ + /usr/include/qt6/QtCore/qcryptographichash.h \ + /usr/include/qt6/QtCore/qdarwinhelpers.h \ + /usr/include/qt6/QtCore/qdatastream.h \ + /usr/include/qt6/QtCore/qdatetime.h \ + /usr/include/qt6/QtCore/qdeadlinetimer.h \ + /usr/include/qt6/QtCore/qdebug.h \ + /usr/include/qt6/QtCore/qdir.h \ + /usr/include/qt6/QtCore/qdiriterator.h \ + /usr/include/qt6/QtCore/qdirlisting.h \ + /usr/include/qt6/QtCore/qeasingcurve.h \ + /usr/include/qt6/QtCore/qelapsedtimer.h \ + /usr/include/qt6/QtCore/qendian.h \ + /usr/include/qt6/QtCore/qeventloop.h \ + /usr/include/qt6/QtCore/qexception.h \ + /usr/include/qt6/QtCore/qexceptionhandling.h \ + /usr/include/qt6/QtCore/qfactoryinterface.h \ + /usr/include/qt6/QtCore/qfile.h \ + /usr/include/qt6/QtCore/qfiledevice.h \ + /usr/include/qt6/QtCore/qfileinfo.h \ + /usr/include/qt6/QtCore/qfileselector.h \ + /usr/include/qt6/QtCore/qfilesystemwatcher.h \ + /usr/include/qt6/QtCore/qflags.h \ + /usr/include/qt6/QtCore/qfloat16.h \ + /usr/include/qt6/QtCore/qforeach.h \ + /usr/include/qt6/QtCore/qfunctionaltools_impl.h \ + /usr/include/qt6/QtCore/qfunctionpointer.h \ + /usr/include/qt6/QtCore/qfuture.h \ + /usr/include/qt6/QtCore/qfuture_impl.h \ + /usr/include/qt6/QtCore/qfutureinterface.h \ + /usr/include/qt6/QtCore/qfuturesynchronizer.h \ + /usr/include/qt6/QtCore/qfuturewatcher.h \ + /usr/include/qt6/QtCore/qgenericatomic.h \ + /usr/include/qt6/QtCore/qglobal.h \ + /usr/include/qt6/QtCore/qglobalstatic.h \ + /usr/include/qt6/QtCore/qhash.h \ + /usr/include/qt6/QtCore/qhashfunctions.h \ + /usr/include/qt6/QtCore/qidentityproxymodel.h \ + /usr/include/qt6/QtCore/qiodevice.h \ + /usr/include/qt6/QtCore/qiodevicebase.h \ + /usr/include/qt6/QtCore/qitemselectionmodel.h \ + /usr/include/qt6/QtCore/qiterable.h \ + /usr/include/qt6/QtCore/qiterator.h \ + /usr/include/qt6/QtCore/qjsonarray.h \ + /usr/include/qt6/QtCore/qjsondocument.h \ + /usr/include/qt6/QtCore/qjsonobject.h \ + /usr/include/qt6/QtCore/qjsonparseerror.h \ + /usr/include/qt6/QtCore/qjsonvalue.h \ + /usr/include/qt6/QtCore/qlatin1stringmatcher.h \ + /usr/include/qt6/QtCore/qlatin1stringview.h \ + /usr/include/qt6/QtCore/qlibrary.h \ + /usr/include/qt6/QtCore/qlibraryinfo.h \ + /usr/include/qt6/QtCore/qline.h \ + /usr/include/qt6/QtCore/qlist.h \ + /usr/include/qt6/QtCore/qlocale.h \ + /usr/include/qt6/QtCore/qlockfile.h \ + /usr/include/qt6/QtCore/qlogging.h \ + /usr/include/qt6/QtCore/qloggingcategory.h \ + /usr/include/qt6/QtCore/qmalloc.h \ + /usr/include/qt6/QtCore/qmap.h \ + /usr/include/qt6/QtCore/qmargins.h \ + /usr/include/qt6/QtCore/qmath.h \ + /usr/include/qt6/QtCore/qmessageauthenticationcode.h \ + /usr/include/qt6/QtCore/qmetacontainer.h \ + /usr/include/qt6/QtCore/qmetaobject.h \ + /usr/include/qt6/QtCore/qmetatype.h \ + /usr/include/qt6/QtCore/qmimedata.h \ + /usr/include/qt6/QtCore/qmimedatabase.h \ + /usr/include/qt6/QtCore/qmimetype.h \ + /usr/include/qt6/QtCore/qminmax.h \ + /usr/include/qt6/QtCore/qmutex.h \ + /usr/include/qt6/QtCore/qnamespace.h \ + /usr/include/qt6/QtCore/qnativeinterface.h \ + /usr/include/qt6/QtCore/qnumeric.h \ + /usr/include/qt6/QtCore/qobject.h \ + /usr/include/qt6/QtCore/qobject_impl.h \ + /usr/include/qt6/QtCore/qobjectcleanuphandler.h \ + /usr/include/qt6/QtCore/qobjectdefs.h \ + /usr/include/qt6/QtCore/qobjectdefs_impl.h \ + /usr/include/qt6/QtCore/qoperatingsystemversion.h \ + /usr/include/qt6/QtCore/qoverload.h \ + /usr/include/qt6/QtCore/qpair.h \ + /usr/include/qt6/QtCore/qparallelanimationgroup.h \ + /usr/include/qt6/QtCore/qpauseanimation.h \ + /usr/include/qt6/QtCore/qpermissions.h \ + /usr/include/qt6/QtCore/qplugin.h \ + /usr/include/qt6/QtCore/qpluginloader.h \ + /usr/include/qt6/QtCore/qpoint.h \ + /usr/include/qt6/QtCore/qpointer.h \ + /usr/include/qt6/QtCore/qprocess.h \ + /usr/include/qt6/QtCore/qprocessordetection.h \ + /usr/include/qt6/QtCore/qpromise.h \ + /usr/include/qt6/QtCore/qproperty.h \ + /usr/include/qt6/QtCore/qpropertyanimation.h \ + /usr/include/qt6/QtCore/qpropertyprivate.h \ + /usr/include/qt6/QtCore/qqueue.h \ + /usr/include/qt6/QtCore/qrandom.h \ + /usr/include/qt6/QtCore/qrangemodel.h \ + /usr/include/qt6/QtCore/qrangemodel_impl.h \ + /usr/include/qt6/QtCore/qreadwritelock.h \ + /usr/include/qt6/QtCore/qrect.h \ + /usr/include/qt6/QtCore/qrefcount.h \ + /usr/include/qt6/QtCore/qregularexpression.h \ + /usr/include/qt6/QtCore/qresource.h \ + /usr/include/qt6/QtCore/qresultstore.h \ + /usr/include/qt6/QtCore/qrunnable.h \ + /usr/include/qt6/QtCore/qsavefile.h \ + /usr/include/qt6/QtCore/qscopedpointer.h \ + /usr/include/qt6/QtCore/qscopedvaluerollback.h \ + /usr/include/qt6/QtCore/qscopeguard.h \ + /usr/include/qt6/QtCore/qsemaphore.h \ + /usr/include/qt6/QtCore/qsequentialanimationgroup.h \ + /usr/include/qt6/QtCore/qsequentialiterable.h \ + /usr/include/qt6/QtCore/qset.h \ + /usr/include/qt6/QtCore/qsettings.h \ + /usr/include/qt6/QtCore/qshareddata.h \ + /usr/include/qt6/QtCore/qshareddata_impl.h \ + /usr/include/qt6/QtCore/qsharedmemory.h \ + /usr/include/qt6/QtCore/qsharedpointer.h \ + /usr/include/qt6/QtCore/qsharedpointer_impl.h \ + /usr/include/qt6/QtCore/qsignalmapper.h \ + /usr/include/qt6/QtCore/qsimd.h \ + /usr/include/qt6/QtCore/qsize.h \ + /usr/include/qt6/QtCore/qsocketnotifier.h \ + /usr/include/qt6/QtCore/qsortfilterproxymodel.h \ + /usr/include/qt6/QtCore/qspan.h \ + /usr/include/qt6/QtCore/qstack.h \ + /usr/include/qt6/QtCore/qstandardpaths.h \ + /usr/include/qt6/QtCore/qstaticlatin1stringmatcher.h \ + /usr/include/qt6/QtCore/qstdlibdetection.h \ + /usr/include/qt6/QtCore/qstorageinfo.h \ + /usr/include/qt6/QtCore/qstring.h \ + /usr/include/qt6/QtCore/qstringalgorithms.h \ + /usr/include/qt6/QtCore/qstringbuilder.h \ + /usr/include/qt6/QtCore/qstringconverter.h \ + /usr/include/qt6/QtCore/qstringconverter_base.h \ + /usr/include/qt6/QtCore/qstringfwd.h \ + /usr/include/qt6/QtCore/qstringlist.h \ + /usr/include/qt6/QtCore/qstringlistmodel.h \ + /usr/include/qt6/QtCore/qstringliteral.h \ + /usr/include/qt6/QtCore/qstringmatcher.h \ + /usr/include/qt6/QtCore/qstringtokenizer.h \ + /usr/include/qt6/QtCore/qstringview.h \ + /usr/include/qt6/QtCore/qswap.h \ + /usr/include/qt6/QtCore/qsysinfo.h \ + /usr/include/qt6/QtCore/qsystemdetection.h \ + /usr/include/qt6/QtCore/qsystemsemaphore.h \ + /usr/include/qt6/QtCore/qtaggedpointer.h \ + /usr/include/qt6/QtCore/qtclasshelpermacros.h \ + /usr/include/qt6/QtCore/qtconfiginclude.h \ + /usr/include/qt6/QtCore/qtconfigmacros.h \ + /usr/include/qt6/QtCore/qtcore-config.h \ + /usr/include/qt6/QtCore/qtcoreexports.h \ + /usr/include/qt6/QtCore/qtcoreglobal.h \ + /usr/include/qt6/QtCore/qtcoreversion.h \ + /usr/include/qt6/QtCore/qtdeprecationdefinitions.h \ + /usr/include/qt6/QtCore/qtdeprecationmarkers.h \ + /usr/include/qt6/QtCore/qtemporarydir.h \ + /usr/include/qt6/QtCore/qtemporaryfile.h \ + /usr/include/qt6/QtCore/qtenvironmentvariables.h \ + /usr/include/qt6/QtCore/qtestsupport_core.h \ + /usr/include/qt6/QtCore/qtextboundaryfinder.h \ + /usr/include/qt6/QtCore/qtextstream.h \ + /usr/include/qt6/QtCore/qtformat_impl.h \ + /usr/include/qt6/QtCore/qthread.h \ + /usr/include/qt6/QtCore/qthreadpool.h \ + /usr/include/qt6/QtCore/qthreadstorage.h \ + /usr/include/qt6/QtCore/qtimeline.h \ + /usr/include/qt6/QtCore/qtimer.h \ + /usr/include/qt6/QtCore/qtimezone.h \ + /usr/include/qt6/QtCore/qtipccommon.h \ + /usr/include/qt6/QtCore/qtmetamacros.h \ + /usr/include/qt6/QtCore/qtmocconstants.h \ + /usr/include/qt6/QtCore/qtnoop.h \ + /usr/include/qt6/QtCore/qtpreprocessorsupport.h \ + /usr/include/qt6/QtCore/qtranslator.h \ + /usr/include/qt6/QtCore/qtransposeproxymodel.h \ + /usr/include/qt6/QtCore/qtresource.h \ + /usr/include/qt6/QtCore/qtsan_impl.h \ + /usr/include/qt6/QtCore/qtsymbolmacros.h \ + /usr/include/qt6/QtCore/qttranslation.h \ + /usr/include/qt6/QtCore/qttypetraits.h \ + /usr/include/qt6/QtCore/qtversion.h \ + /usr/include/qt6/QtCore/qtversionchecks.h \ + /usr/include/qt6/QtCore/qtypeinfo.h \ + /usr/include/qt6/QtCore/qtyperevision.h \ + /usr/include/qt6/QtCore/qtypes.h \ + /usr/include/qt6/QtCore/qurl.h \ + /usr/include/qt6/QtCore/qurlquery.h \ + /usr/include/qt6/QtCore/qutf8stringview.h \ + /usr/include/qt6/QtCore/quuid.h \ + /usr/include/qt6/QtCore/qvariant.h \ + /usr/include/qt6/QtCore/qvariantanimation.h \ + /usr/include/qt6/QtCore/qvarianthash.h \ + /usr/include/qt6/QtCore/qvariantlist.h \ + /usr/include/qt6/QtCore/qvariantmap.h \ + /usr/include/qt6/QtCore/qvarlengtharray.h \ + /usr/include/qt6/QtCore/qvector.h \ + /usr/include/qt6/QtCore/qversionnumber.h \ + /usr/include/qt6/QtCore/qversiontagging.h \ + /usr/include/qt6/QtCore/qwaitcondition.h \ + /usr/include/qt6/QtCore/qwineventnotifier.h \ + /usr/include/qt6/QtCore/qxmlstream.h \ + /usr/include/qt6/QtCore/qxpfunctional.h \ + /usr/include/qt6/QtCore/qxptype_traits.h \ + /usr/include/qt6/QtCore/qyieldcpu.h \ + /usr/include/qt6/QtGui/QBrush \ + /usr/include/qt6/QtGui/QColor \ + /usr/include/qt6/QtGui/QFont \ + /usr/include/qt6/QtGui/QIcon \ + /usr/include/qt6/QtGui/QImage \ + /usr/include/qt6/QtGui/QPixmap \ + /usr/include/qt6/QtGui/QTransform \ + /usr/include/qt6/QtGui/qbitmap.h \ + /usr/include/qt6/QtGui/qbrush.h \ + /usr/include/qt6/QtGui/qcolor.h \ + /usr/include/qt6/QtGui/qcursor.h \ + /usr/include/qt6/QtGui/qevent.h \ + /usr/include/qt6/QtGui/qeventpoint.h \ + /usr/include/qt6/QtGui/qfont.h \ + /usr/include/qt6/QtGui/qguiapplication.h \ + /usr/include/qt6/QtGui/qguiapplication_platform.h \ + /usr/include/qt6/QtGui/qicon.h \ + /usr/include/qt6/QtGui/qimage.h \ + /usr/include/qt6/QtGui/qinputdevice.h \ + /usr/include/qt6/QtGui/qinputmethod.h \ + /usr/include/qt6/QtGui/qkeysequence.h \ + /usr/include/qt6/QtGui/qpaintdevice.h \ + /usr/include/qt6/QtGui/qpixelformat.h \ + /usr/include/qt6/QtGui/qpixmap.h \ + /usr/include/qt6/QtGui/qpointingdevice.h \ + /usr/include/qt6/QtGui/qpolygon.h \ + /usr/include/qt6/QtGui/qregion.h \ + /usr/include/qt6/QtGui/qrgb.h \ + /usr/include/qt6/QtGui/qrgba64.h \ + /usr/include/qt6/QtGui/qscreen.h \ + /usr/include/qt6/QtGui/qscreen_platform.h \ + /usr/include/qt6/QtGui/qsurface.h \ + /usr/include/qt6/QtGui/qsurfaceformat.h \ + /usr/include/qt6/QtGui/qtestsupport_gui.h \ + /usr/include/qt6/QtGui/qtgui-config.h \ + /usr/include/qt6/QtGui/qtguiexports.h \ + /usr/include/qt6/QtGui/qtguiglobal.h \ + /usr/include/qt6/QtGui/qtransform.h \ + /usr/include/qt6/QtGui/qvector2d.h \ + /usr/include/qt6/QtGui/qvector3d.h \ + /usr/include/qt6/QtGui/qvector4d.h \ + /usr/include/qt6/QtGui/qvectornd.h \ + /usr/include/qt6/QtGui/qwindow.h \ + /usr/include/qt6/QtGui/qwindowdefs.h \ + /usr/include/qt6/QtTest/QtTest \ + /usr/include/qt6/QtTest/QtTestDepends \ + /usr/include/qt6/QtTest/qabstractitemmodeltester.h \ + /usr/include/qt6/QtTest/qbenchmark.h \ + /usr/include/qt6/QtTest/qbenchmarkmetric.h \ + /usr/include/qt6/QtTest/qsignalspy.h \ + /usr/include/qt6/QtTest/qtest.h \ + /usr/include/qt6/QtTest/qtest_gui.h \ + /usr/include/qt6/QtTest/qtestassert.h \ + /usr/include/qt6/QtTest/qtestcase.h \ + /usr/include/qt6/QtTest/qtestdata.h \ + /usr/include/qt6/QtTest/qtestevent.h \ + /usr/include/qt6/QtTest/qtesteventloop.h \ + /usr/include/qt6/QtTest/qtestkeyboard.h \ + /usr/include/qt6/QtTest/qtestmouse.h \ + /usr/include/qt6/QtTest/qtestspontaneevent.h \ + /usr/include/qt6/QtTest/qtestsystem.h \ + /usr/include/qt6/QtTest/qtesttostring.h \ + /usr/include/qt6/QtTest/qtesttouch.h \ + /usr/include/qt6/QtTest/qtestwheel.h \ + /usr/include/qt6/QtTest/qttestexports.h \ + /usr/include/qt6/QtTest/qttestglobal.h \ + /usr/include/qt6/QtTest/qttestlib-config.h \ + /usr/include/qt6/QtTest/qttestversion.h \ + /usr/include/sched.h \ + /usr/include/semaphore.h \ + /usr/include/stdc-predef.h \ + /usr/include/stdint.h \ + /usr/include/stdio.h \ + /usr/include/stdlib.h \ + /usr/include/string.h \ + /usr/include/strings.h \ + /usr/include/sys/cdefs.h \ + /usr/include/sys/select.h \ + /usr/include/sys/single_threaded.h \ + /usr/include/sys/syscall.h \ + /usr/include/sys/time.h \ + /usr/include/sys/types.h \ + /usr/include/syscall.h \ + /usr/include/time.h \ + /usr/include/unistd.h \ + /usr/include/wchar.h \ + /usr/include/wctype.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/adxintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/amxavx512intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/amxbf16intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/amxcomplexintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/amxfp16intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/amxfp8intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/amxint8intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/amxmovrsintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/amxtf32intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/amxtileintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/amxtransposeintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2-512bf16intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2-512convertintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2-512mediaintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2-512minmaxintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2-512satcvtintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2bf16intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2convertintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2copyintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2mediaintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2minmaxintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx10_2satcvtintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx2intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512bf16intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512bf16vlintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512bitalgintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512bitalgvlintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512bwintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512cdintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512dqintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512fintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512fp16intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512fp16vlintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512ifmaintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512ifmavlintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vbmi2intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vbmi2vlintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vbmiintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vbmivlintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vlbwintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vldqintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vlintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vnniintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vnnivlintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vp2intersectintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vp2intersectvlintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vpopcntdqintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avx512vpopcntdqvlintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avxifmaintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avxintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avxneconvertintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avxvnniint16intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avxvnniint8intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/avxvnniintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/bmi2intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/bmiintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/cetintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/cldemoteintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/clflushoptintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/clwbintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/clzerointrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/cmpccxaddintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/emmintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/enqcmdintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/f16cintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/fmaintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/fxsrintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/gfniintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/hresetintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/ia32intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/immintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/keylockerintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/lwpintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/lzcntintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/mm_malloc.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/mmintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/movdirintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/movrsintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/mwaitintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/mwaitxintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/pconfigintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/pkuintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/pmmintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/popcntintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/prfchiintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/prfchwintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/raointintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/rdseedintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/rtmintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/serializeintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/sgxintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/sha512intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/shaintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/sm3intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/sm4intrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/smmintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/stdarg.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/stdbool.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/stddef.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/tbmintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/tmmintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/tsxldtrkintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/uintrintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/usermsrintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/vaesintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/vpclmulqdqintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/waitpkgintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/wbnoinvdintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/wmmintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/x86gprintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/xmmintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/xsavecintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/xsaveintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/xsaveoptintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/xsavesintrin.h \ + /usr/lib/gcc/x86_64-redhat-linux/15/include/xtestintrin.h \ + /usr/lib64/cmake/Qt6/Qt6Config.cmake \ + /usr/lib64/cmake/Qt6/Qt6ConfigExtras.cmake \ + /usr/lib64/cmake/Qt6/Qt6ConfigVersion.cmake \ + /usr/lib64/cmake/Qt6/Qt6ConfigVersionImpl.cmake \ + /usr/lib64/cmake/Qt6/Qt6Dependencies.cmake \ + /usr/lib64/cmake/Qt6/Qt6Targets.cmake \ + /usr/lib64/cmake/Qt6/Qt6VersionlessAliasTargets.cmake \ + /usr/lib64/cmake/Qt6/QtFeature.cmake \ + /usr/lib64/cmake/Qt6/QtFeatureCommon.cmake \ + /usr/lib64/cmake/Qt6/QtInstallPaths.cmake \ + /usr/lib64/cmake/Qt6/QtPublicAndroidHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicAppleHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicCMakeEarlyPolicyHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicCMakeHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicCMakeVersionHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicDependencyHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicExternalProjectHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicFinalizerHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicFindPackageHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicGitHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicPluginHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicPluginHelpers_v2.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomAttributionHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomBuildToolHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomCommonGenerationHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomCpeHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomCycloneDXHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomDepHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomDocumentNamespaceHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomExternalReferenceHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomFileHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomGenerationCycloneDXHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomGenerationHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomLicenseHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomOpsHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomPurlHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomPythonHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomQtEntityHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomRelationshipHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicSbomSystemDepHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicTargetHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicTestHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicToolHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicWalkLibsHelpers.cmake \ + /usr/lib64/cmake/Qt6/QtPublicWindowsHelpers.cmake \ + /usr/lib64/cmake/Qt6Test/Qt6TestAdditionalTargetInfo.cmake \ + /usr/lib64/cmake/Qt6Test/Qt6TestConfig.cmake \ + /usr/lib64/cmake/Qt6Test/Qt6TestConfigVersion.cmake \ + /usr/lib64/cmake/Qt6Test/Qt6TestConfigVersionImpl.cmake \ + /usr/lib64/cmake/Qt6Test/Qt6TestDependencies.cmake \ + /usr/lib64/cmake/Qt6Test/Qt6TestTargets-relwithdebinfo.cmake \ + /usr/lib64/cmake/Qt6Test/Qt6TestTargets.cmake \ + /usr/lib64/cmake/Qt6Test/Qt6TestVersionlessAliasTargets.cmake \ + /usr/lib64/cmake/Qt6Test/QtTestProperties.cmake \ + /usr/share/cmake/Modules/CMakeFindDependencyMacro.cmake \ + /usr/share/cmake/Modules/CheckCXXCompilerFlag.cmake \ + /usr/bin/cmake diff --git a/build-linux/tests/test_virtual_drag_autogen/include/test_virtual_drag.moc b/build-linux/tests/test_virtual_drag_autogen/include/test_virtual_drag.moc new file mode 100644 index 00000000..8005c627 --- /dev/null +++ b/build-linux/tests/test_virtual_drag_autogen/include/test_virtual_drag.moc @@ -0,0 +1,108 @@ +/**************************************************************************** +** Meta object code from reading C++ file 'test_virtual_drag.cpp' +** +** Created by: The Qt Meta Object Compiler version 69 (Qt 6.10.3) +** +** WARNING! All changes made in this file will be lost! +*****************************************************************************/ + +#include + +#include + +#include + + +#include +#if !defined(Q_MOC_OUTPUT_REVISION) +#error "The header file 'test_virtual_drag.cpp' doesn't include ." +#elif Q_MOC_OUTPUT_REVISION != 69 +#error "This file was generated using the moc from 6.10.3. It" +#error "cannot be used with the include files from this version of Qt." +#error "(The moc has changed too much.)" +#endif + +#ifndef Q_CONSTINIT +#define Q_CONSTINIT +#endif + +QT_WARNING_PUSH +QT_WARNING_DISABLE_DEPRECATED +QT_WARNING_DISABLE_GCC("-Wuseless-cast") +namespace { +struct qt_meta_tag_ZN15TestVirtualDragE_t {}; +} // unnamed namespace + +template <> constexpr inline auto TestVirtualDrag::qt_create_metaobjectdata() +{ + namespace QMC = QtMocConstants; + QtMocHelpers::StringRefStorage qt_stringData { + "TestVirtualDrag", + "nonWindowsStubsReturnFalse", + "" + }; + + QtMocHelpers::UintData qt_methods { + // Slot 'nonWindowsStubsReturnFalse' + QtMocHelpers::SlotData(1, 2, QMC::AccessPrivate, QMetaType::Void), + }; + QtMocHelpers::UintData qt_properties { + }; + QtMocHelpers::UintData qt_enums { + }; + return QtMocHelpers::metaObjectData(QMC::MetaObjectFlag{}, qt_stringData, + qt_methods, qt_properties, qt_enums); +} +Q_CONSTINIT const QMetaObject TestVirtualDrag::staticMetaObject = { { + QMetaObject::SuperData::link(), + qt_staticMetaObjectStaticContent.stringdata, + qt_staticMetaObjectStaticContent.data, + qt_static_metacall, + nullptr, + qt_staticMetaObjectRelocatingContent.metaTypes, + nullptr +} }; + +void TestVirtualDrag::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) +{ + auto *_t = static_cast(_o); + if (_c == QMetaObject::InvokeMetaMethod) { + switch (_id) { + case 0: _t->nonWindowsStubsReturnFalse(); break; + default: ; + } + } + (void)_a; +} + +const QMetaObject *TestVirtualDrag::metaObject() const +{ + return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject; +} + +void *TestVirtualDrag::qt_metacast(const char *_clname) +{ + if (!_clname) return nullptr; + if (!strcmp(_clname, qt_staticMetaObjectStaticContent.strings)) + return static_cast(this); + return QObject::qt_metacast(_clname); +} + +int TestVirtualDrag::qt_metacall(QMetaObject::Call _c, int _id, void **_a) +{ + _id = QObject::qt_metacall(_c, _id, _a); + if (_id < 0) + return _id; + if (_c == QMetaObject::InvokeMetaMethod) { + if (_id < 1) + qt_static_metacall(this, _c, _id, _a); + _id -= 1; + } + if (_c == QMetaObject::RegisterMethodArgumentMetaType) { + if (_id < 1) + *reinterpret_cast(_a[0]) = QMetaType(); + _id -= 1; + } + return _id; +} +QT_WARNING_POP diff --git a/build-linux/tests/test_virtual_drag_autogen/moc_predefs.h b/build-linux/tests/test_virtual_drag_autogen/moc_predefs.h new file mode 100644 index 00000000..a4d18ac9 --- /dev/null +++ b/build-linux/tests/test_virtual_drag_autogen/moc_predefs.h @@ -0,0 +1,503 @@ +#define __DBL_MIN_EXP__ (-1021) +#define __LDBL_MANT_DIG__ 64 +#define __cpp_nontype_template_parameter_auto 201606L +#define __UINT_LEAST16_MAX__ 0xffff +#define __FLT16_HAS_QUIET_NAN__ 1 +#define __ATOMIC_ACQUIRE 2 +#define QT_TESTCASE_BUILDDIR "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/build-linux/tests" +#define __FLT128_MAX_10_EXP__ 4932 +#define __FLT_MIN__ 1.17549435082228750796873653722224568e-38F +#define __GCC_IEC_559_COMPLEX 2 +#define __cpp_aggregate_nsdmi 201304L +#define __UINT_LEAST8_TYPE__ unsigned char +#define __SIZEOF_FLOAT80__ 16 +#define __BFLT16_DENORM_MIN__ 9.18354961579912115600575419704879436e-41BF16 +#define __cpp_impl_three_way_comparison 201907L +#define __INTMAX_C(c) c ## L +#define __CHAR_BIT__ 8 +#define __cpp_designated_initializers 201707L +#define __UINT8_MAX__ 0xff +#define __SCHAR_WIDTH__ 8 +#define __WINT_MAX__ 0xffffffffU +#define __FLT32_MIN_EXP__ (-125) +#define __cpp_static_assert 201411L +#define __BFLT16_MIN_10_EXP__ (-37) +#define __cpp_inheriting_constructors 201511L +#define QT_GUI_LIB 1 +#define __ORDER_LITTLE_ENDIAN__ 1234 +#define __WCHAR_MAX__ 0x7fffffff +#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_2 1 +#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_4 1 +#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_8 1 +#define __GCC_ATOMIC_CHAR_LOCK_FREE 2 +#define __GCC_IEC_559 2 +#define __FLT32X_DECIMAL_DIG__ 17 +#define TLRENDER_OIIO 1 +#define __FLT_EVAL_METHOD__ 0 +#define __cpp_binary_literals 201304L +#define __FLT64_DECIMAL_DIG__ 17 +#define __cpp_noexcept_function_type 201510L +#define __GCC_ATOMIC_CHAR32_T_LOCK_FREE 2 +#define __cpp_variadic_templates 200704L +#define __UINT_FAST64_MAX__ 0xffffffffffffffffUL +#define __SIG_ATOMIC_TYPE__ int +#define __DBL_MIN_10_EXP__ (-307) +#define __FINITE_MATH_ONLY__ 0 +#define __cpp_variable_templates 201304L +#define __FLT32X_MAX_EXP__ 1024 +#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_1 1 +#define __FLT32_HAS_DENORM__ 1 +#define __UINT_FAST8_MAX__ 0xff +#define __cpp_rvalue_reference 200610L +#define __cpp_nested_namespace_definitions 201411L +#define __DEC64_MAX_EXP__ 385 +#define __INT8_C(c) c +#define __LDBL_HAS_INFINITY__ 1 +#define __INT_LEAST8_WIDTH__ 8 +#define __cpp_variadic_using 201611L +#define __UINT_LEAST64_MAX__ 0xffffffffffffffffUL +#define __INT_LEAST8_MAX__ 0x7f +#define __cpp_attributes 200809L +#define __cpp_capture_star_this 201603L +#define __SHRT_MAX__ 0x7fff +#define __LDBL_MAX__ 1.18973149535723176502126385303097021e+4932L +#define __cpp_impl_coroutine 201902L +#define __FLT64X_MAX_10_EXP__ 4932 +#define __cpp_if_constexpr 201606L +#define __BFLT16_MAX_10_EXP__ 38 +#define __BFLT16_MAX_EXP__ 128 +#define __LDBL_IS_IEC_60559__ 1 +#define QT_NO_DEBUG 1 +#define __FLT64X_HAS_QUIET_NAN__ 1 +#define QT_TESTLIB_LIB 1 +#define TLRENDER_SDL2 1 +#define __UINT_LEAST8_MAX__ 0xff +#define __GCC_ATOMIC_BOOL_LOCK_FREE 2 +#define __FLT128_DENORM_MIN__ 6.47517511943802511092443895822764655e-4966F128 +#define __UINTMAX_TYPE__ long unsigned int +#define __cpp_nsdmi 200809L +#define __BFLT16_DECIMAL_DIG__ 4 +#define __linux 1 +#define __DEC32_EPSILON__ 1E-6DF +#define __FLT_EVAL_METHOD_TS_18661_3__ 0 +#define __UINT32_MAX__ 0xffffffffU +#define __GXX_EXPERIMENTAL_CXX0X__ 1 +#define __DBL_DENORM_MIN__ double(4.94065645841246544176568792868221372e-324L) +#define __FLT128_MIN_EXP__ (-16381) +#define __DEC64X_MAX_EXP__ 6145 +#define __WINT_MIN__ 0U +#define __FLT128_MIN_10_EXP__ (-4931) +#define __FLT32X_IS_IEC_60559__ 1 +#define __INT_LEAST16_WIDTH__ 16 +#define __SCHAR_MAX__ 0x7f +#define __FLT128_MANT_DIG__ 113 +#define __WCHAR_MIN__ (-__WCHAR_MAX__ - 1) +#define __INT64_C(c) c ## L +#define __cpp_impl_destroying_delete 201806L +#define __GCC_ATOMIC_POINTER_LOCK_FREE 2 +#define TLRENDER_JPEG 1 +#define __ATOMIC_SEQ_CST 5 +#define __unix 1 +#define __INT_LEAST64_MAX__ 0x7fffffffffffffffL +#define __FLT32X_MANT_DIG__ 53 +#define __GCC_ATOMIC_CHAR16_T_LOCK_FREE 2 +#define __cpp_aligned_new 201606L +#define __FLT32_MAX_10_EXP__ 38 +#define __FLT64X_EPSILON__ 1.08420217248550443400745280086994171e-19F64x +#define __STDC_HOSTED__ 1 +#define __DEC64_MIN_EXP__ (-382) +#define TLRENDER_PNG 1 +#define __cpp_decltype_auto 201304L +#define __DBL_DIG__ 15 +#define __STDC_EMBED_EMPTY__ 2 +#define __FLT_EPSILON__ 1.19209289550781250000000000000000000e-7F +#define __cpp_char8_t 202207L +#define __GXX_WEAK__ 1 +#define __SHRT_WIDTH__ 16 +#define __FLT32_IS_IEC_60559__ 1 +#define __LDBL_MIN__ 3.36210314311209350626267781732175260e-4932L +#define __DBL_IS_IEC_60559__ 1 +#define __DEC32_MAX__ 9.999999E96DF +#define __CHAR8_TYPE__ unsigned char +#define __cpp_threadsafe_static_init 200806L +#define __cpp_enumerator_attributes 201411L +#define TLRENDER_EXR 1 +#define __FLT64X_DENORM_MIN__ 3.64519953188247460252840593361941982e-4951F64x +#define __FLT32X_HAS_INFINITY__ 1 +#define __unix__ 1 +#define __INT_WIDTH__ 32 +#define __STDC_IEC_559__ 1 +#define __STDC_ISO_10646__ 201706L +#define __GCC_ATOMIC_CHAR8_T_LOCK_FREE 2 +#define __DECIMAL_DIG__ 21 +#define __STDC_IEC_559_COMPLEX__ 1 +#define __FLT64_EPSILON__ 2.22044604925031308084726333618164062e-16F64 +#define __gnu_linux__ 1 +#define __INT16_MAX__ 0x7fff +#define __FLT64_MIN_EXP__ (-1021) +#define __cpp_using_enum 201907L +#define __DEC64X_EPSILON__ 1E-33D64x +#define __FLT64X_MIN_10_EXP__ (-4931) +#define __LDBL_HAS_QUIET_NAN__ 1 +#define __FLT16_MIN_EXP__ (-13) +#define __FLT64_MANT_DIG__ 53 +#define __cpp_consteval 202211L +#define __FLT64X_MANT_DIG__ 64 +#define FTK_API_GL_4_1 1 +#define __BFLT16_DIG__ 2 +#define __GNUC__ 15 +#define __GXX_RTTI 1 +#define TLRENDER_FFMPEG_PLUGIN 1 +#define __MMX__ 1 +#define __FLT_HAS_DENORM__ 1 +#define __SIZEOF_LONG_DOUBLE__ 16 +#define __BIGGEST_ALIGNMENT__ 16 +#define __STDC_UTF_16__ 1 +#define __FLT64_MAX_10_EXP__ 308 +#define __BFLT16_IS_IEC_60559__ 0 +#define __FLT16_MAX_10_EXP__ 4 +#define __cpp_delegating_constructors 200604L +#define __DBL_MAX__ double(1.79769313486231570814527423731704357e+308L) +#define __cpp_raw_strings 200710L +#define __INT_FAST32_MAX__ 0x7fffffffffffffffL +#define __DBL_HAS_INFINITY__ 1 +#define __INT64_MAX__ 0x7fffffffffffffffL +#define __SIZEOF_FLOAT__ 4 +#define __HAVE_SPECULATION_SAFE_VALUE 1 +#define __cpp_fold_expressions 201603L +#define __DEC32_MIN_EXP__ (-94) +#define __INTPTR_WIDTH__ 64 +#define __UINT_LEAST32_MAX__ 0xffffffffU +#define __FLT32X_HAS_DENORM__ 1 +#define __INT_FAST16_TYPE__ long int +#define __MMX_WITH_SSE__ 1 +#define __LDBL_HAS_DENORM__ 1 +#define __SEG_GS 1 +#define __BFLT16_EPSILON__ 7.81250000000000000000000000000000000e-3BF16 +#define __cplusplus 202002L +#define __cpp_ref_qualifiers 200710L +#define __DEC32_MIN__ 1E-95DF +#define __DEPRECATED 1 +#define __cpp_rvalue_references 200610L +#define __DBL_MAX_EXP__ 1024 +#define __WCHAR_WIDTH__ 32 +#define __FLT32_MAX__ 3.40282346638528859811704183484516925e+38F32 +#define __DEC128_EPSILON__ 1E-33DL +#define __FLT16_DECIMAL_DIG__ 5 +#define __SSE2_MATH__ 1 +#define __ATOMIC_HLE_RELEASE 131072 +#define __PTRDIFF_MAX__ 0x7fffffffffffffffL +#define __amd64 1 +#define __DEC64X_MAX__ 9.999999999999999999999999999999999E6144D64x +#define __ATOMIC_HLE_ACQUIRE 65536 +#define __GNUG__ 15 +#define __LONG_LONG_MAX__ 0x7fffffffffffffffLL +#define __SIZEOF_SIZE_T__ 8 +#define __BFLT16_HAS_INFINITY__ 1 +#define __FLT64X_MIN_EXP__ (-16381) +#define __SIZEOF_WINT_T__ 4 +#define __FLT32X_DIG__ 15 +#define __LONG_LONG_WIDTH__ 64 +#define QT_TESTCASE_SOURCEDIR "/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt/native/qt6/tests" +#define __cpp_initializer_lists 200806L +#define __FLT32_MAX_EXP__ 128 +#define ABI_ID "ELF" +#define __cpp_hex_float 201603L +#define __GXX_ABI_VERSION 1020 +#define __FLT_MIN_EXP__ (-125) +#define __GCC_HAVE_DWARF2_CFI_ASM 1 +#define TLRENDER_OCIO 1 +#define __x86_64 1 +#define __cpp_lambdas 200907L +#define __INT_FAST64_TYPE__ long int +#define __BFLT16_MAX__ 3.38953138925153547590470800371487867e+38BF16 +#define __FLT64_DENORM_MIN__ 4.94065645841246544176568792868221372e-324F64 +#define __cpp_template_auto 201606L +#define __FLT16_DENORM_MIN__ 5.96046447753906250000000000000000000e-8F16 +#define __FLT128_EPSILON__ 1.92592994438723585305597794258492732e-34F128 +#define __FLT64X_NORM_MAX__ 1.18973149535723176502126385303097021e+4932F64x +#define __SIZEOF_POINTER__ 8 +#define __SIZE_TYPE__ long unsigned int +#define __LP64__ 1 +#define __DBL_HAS_QUIET_NAN__ 1 +#define __FLT32X_EPSILON__ 2.22044604925031308084726333618164062e-16F32x +#define __LDBL_MAX_EXP__ 16384 +#define __DECIMAL_BID_FORMAT__ 1 +#define __FLT64_MIN_10_EXP__ (-307) +#define __FLT16_MIN_10_EXP__ (-4) +#define __FLT64X_DECIMAL_DIG__ 21 +#define __DEC128_MIN__ 1E-6143DL +#define __REGISTER_PREFIX__ +#define __UINT16_MAX__ 0xffff +#define __FLT128_HAS_INFINITY__ 1 +#define __FLT32_MIN__ 1.17549435082228750796873653722224568e-38F32 +#define __UINT8_TYPE__ unsigned char +#define __FLT_DIG__ 6 +#define __NO_INLINE__ 1 +#define __DEC_EVAL_METHOD__ 2 +#define __FLT_MANT_DIG__ 24 +#define __LDBL_DECIMAL_DIG__ 21 +#define __VERSION__ "15.2.1 20260123 (Red Hat 15.2.1-7)" +#define __UINT64_C(c) c ## UL +#define __cpp_unicode_characters 201411L +#define __DEC64X_MIN__ 1E-6143D64x +#define _STDC_PREDEF_H 1 +#define __INT_LEAST32_MAX__ 0x7fffffff +#define __GCC_ATOMIC_INT_LOCK_FREE 2 +#define __FLT128_MAX_EXP__ 16384 +#define __cpp_conditional_explicit 201806L +#define __FLT32_MANT_DIG__ 24 +#define __cpp_decltype 200707L +#define __FLOAT_WORD_ORDER__ __ORDER_LITTLE_ENDIAN__ +#define SIZEOF_DPTR (sizeof(void*)) +#define __FLT32X_MIN_EXP__ (-1021) +#define __cpp_aggregate_paren_init 201902L +#define __STDC_IEC_60559_COMPLEX__ 201404L +#define __cpp_aggregate_bases 201603L +#define __BFLT16_MIN__ 1.17549435082228750796873653722224568e-38BF16 +#define __FLT128_HAS_DENORM__ 1 +#define __FLT32_DECIMAL_DIG__ 9 +#define __FLT128_DIG__ 33 +#define __INT32_C(c) c +#define __DEC64_EPSILON__ 1E-15DD +#define __ORDER_PDP_ENDIAN__ 3412 +#define __DEC128_MIN_EXP__ (-6142) +#define __DEC128_MAX__ 9.999999999999999999999999999999999E6144DL +#define __cpp_constinit 201907L +#define __INT_FAST32_TYPE__ long int +#define __UINT_LEAST16_TYPE__ short unsigned int +#define __DEC64X_MANT_DIG__ 34 +#define __DEC128_MAX_EXP__ 6145 +#define unix 1 +#define __DBL_HAS_DENORM__ 1 +#define __cpp_rtti 199711L +#define __UINT64_MAX__ 0xffffffffffffffffUL +#define __FLT_IS_IEC_60559__ 1 +#define __GNUC_WIDE_EXECUTION_CHARSET_NAME "UTF-32LE" +#define __FLT64X_DIG__ 18 +#define __INT8_TYPE__ signed char +#define __cpp_digit_separators 201309L +#define __ELF__ 1 +#define __GCC_ASM_FLAG_OUTPUTS__ 1 +#define __UINT32_TYPE__ unsigned int +#define __BFLT16_HAS_QUIET_NAN__ 1 +#define __FLT_RADIX__ 2 +#define __INT_LEAST16_TYPE__ short int +#define __LDBL_EPSILON__ 1.08420217248550443400745280086994171e-19L +#define __UINTMAX_C(c) c ## UL +#define __GNUC_RH_RELEASE__ 7 +#define __FLT16_DIG__ 3 +#define __k8 1 +#define __FLT32X_MIN__ 2.22507385850720138309023271733240406e-308F32x +#define __SIG_ATOMIC_MAX__ 0x7fffffff +#define __cpp_constexpr 202002L +#define __GCC_ATOMIC_WCHAR_T_LOCK_FREE 2 +#define __USER_LABEL_PREFIX__ +#define __STDC_IEC_60559_BFP__ 201404L +#define __SIZEOF_PTRDIFF_T__ 8 +#define __FLT64X_HAS_INFINITY__ 1 +#define __SIZEOF_LONG__ 8 +#define __LDBL_DIG__ 18 +#define __FLT64_IS_IEC_60559__ 1 +#define __x86_64__ 1 +#define __FLT16_IS_IEC_60559__ 1 +#define __FLT16_MAX_EXP__ 16 +#define __DEC32_SUBNORMAL_MIN__ 0.000001E-95DF +#define __STDC_EMBED_FOUND__ 1 +#define __INT_FAST16_MAX__ 0x7fffffffffffffffL +#define __GCC_CONSTRUCTIVE_SIZE 64 +#define __FLT64_DIG__ 15 +#define __UINT_FAST32_MAX__ 0xffffffffffffffffUL +#define __UINT_LEAST64_TYPE__ long unsigned int +#define __FLT16_EPSILON__ 9.76562500000000000000000000000000000e-4F16 +#define __FLT_HAS_QUIET_NAN__ 1 +#define __FLT_MAX_10_EXP__ 38 +#define __FLT64X_HAS_DENORM__ 1 +#define __DEC128_SUBNORMAL_MIN__ 0.000000000000000000000000000000001E-6143DL +#define __FLT_HAS_INFINITY__ 1 +#define __GNUC_EXECUTION_CHARSET_NAME "UTF-8" +#define __cpp_unicode_literals 200710L +#define __UINT_FAST16_TYPE__ long unsigned int +#define __DEC64_MAX__ 9.999999999999999E384DD +#define __STDC_EMBED_NOT_FOUND__ 0 +#define __INT_FAST32_WIDTH__ 64 +#define __CHAR16_TYPE__ short unsigned int +#define __PRAGMA_REDEFINE_EXTNAME 1 +#define __DEC64X_SUBNORMAL_MIN__ 0.000000000000000000000000000000001E-6143D64x +#define __SIZE_WIDTH__ 64 +#define __SEG_FS 1 +#define __INT_LEAST16_MAX__ 0x7fff +#define __FLT16_NORM_MAX__ 6.55040000000000000000000000000000000e+4F16 +#define __DEC64_MANT_DIG__ 16 +#define __FLT32_DENORM_MIN__ 1.40129846432481707092372958328991613e-45F32 +#define __SIG_ATOMIC_WIDTH__ 32 +#define __GCC_DESTRUCTIVE_SIZE 64 +#define __INT_LEAST64_TYPE__ long int +#define __INT16_TYPE__ short int +#define __INT_LEAST8_TYPE__ signed char +#define __FLT16_MAX__ 6.55040000000000000000000000000000000e+4F16 +#define __FLT128_MIN__ 3.36210314311209350626267781732175260e-4932F128 +#define __cpp_structured_bindings 201606L +#define __SIZEOF_INT__ 4 +#define __DEC32_MAX_EXP__ 97 +#define __INT_FAST8_MAX__ 0x7f +#define __FLT128_MAX__ 1.18973149535723176508575932662800702e+4932F128 +#define __INTPTR_MAX__ 0x7fffffffffffffffL +#define __cpp_sized_deallocation 201309L +#define __cpp_guaranteed_copy_elision 201606L +#define linux 1 +#define __FLT64_HAS_QUIET_NAN__ 1 +#define __FLT32_MIN_10_EXP__ (-37) +#define __EXCEPTIONS 1 +#define __UINT16_C(c) c +#define __PTRDIFF_WIDTH__ 64 +#define __cpp_range_based_for 201603L +#define __INT_FAST16_WIDTH__ 64 +#define __FLT64_HAS_INFINITY__ 1 +#define __FLT64X_MAX__ 1.18973149535723176502126385303097021e+4932F64x +#define __FLT16_HAS_INFINITY__ 1 +#define __STDCPP_DEFAULT_NEW_ALIGNMENT__ 16 +#define __SIG_ATOMIC_MIN__ (-__SIG_ATOMIC_MAX__ - 1) +#define __code_model_small__ 1 +#define __GCC_ATOMIC_LONG_LOCK_FREE 2 +#define __cpp_nontype_template_args 201911L +#define __DEC32_MANT_DIG__ 7 +#define __k8__ 1 +#define __INTPTR_TYPE__ long int +#define __UINT16_TYPE__ short unsigned int +#define __WCHAR_TYPE__ int +#define __UINTPTR_MAX__ 0xffffffffffffffffUL +#define __INT_FAST64_WIDTH__ 64 +#define __cpp_nontype_template_parameter_class 201806L +#define __cpp_concepts 202002L +#define __INT_FAST64_MAX__ 0x7fffffffffffffffL +#define __GCC_ATOMIC_TEST_AND_SET_TRUEVAL 1 +#define __FLT_NORM_MAX__ 3.40282346638528859811704183484516925e+38F +#define __FLT32_HAS_INFINITY__ 1 +#define __FLT64X_MAX_EXP__ 16384 +#define __UINT_FAST64_TYPE__ long unsigned int +#define __cpp_constexpr_in_decltype 201711L +#define __cpp_inline_variables 201606L +#define __BFLT16_MIN_EXP__ (-125) +#define __INT_MAX__ 0x7fffffff +#define __linux__ 1 +#define __INT64_TYPE__ long int +#define __FLT_MAX_EXP__ 128 +#define __ORDER_BIG_ENDIAN__ 4321 +#define __DBL_MANT_DIG__ 53 +#define QT_CORE_LIB 1 +#define __SIZEOF_FLOAT128__ 16 +#define __BFLT16_MANT_DIG__ 8 +#define __DEC64_MIN__ 1E-383DD +#define __WINT_TYPE__ unsigned int +#define __UINT_LEAST32_TYPE__ unsigned int +#define __SIZEOF_SHORT__ 2 +#define __FLT32_NORM_MAX__ 3.40282346638528859811704183484516925e+38F32 +#define __SSE__ 1 +#define __LDBL_MIN_EXP__ (-16381) +#define __FLT64_MAX__ 1.79769313486231570814527423731704357e+308F64 +#define __DEC64X_MIN_EXP__ (-6142) +#define __amd64__ 1 +#define __WINT_WIDTH__ 32 +#define __INT_LEAST64_WIDTH__ 64 +#define __FLT32X_MAX_10_EXP__ 308 +#define __cpp_namespace_attributes 201411L +#define __SIZEOF_INT128__ 16 +#define __FLT16_MIN__ 6.10351562500000000000000000000000000e-5F16 +#define __FLT64X_IS_IEC_60559__ 1 +#define __GXX_CONSTEXPR_ASM__ 1 +#define __LDBL_MAX_10_EXP__ 4932 +#define __ATOMIC_RELAXED 0 +#define __DBL_EPSILON__ double(2.22044604925031308084726333618164062e-16L) +#define __INT_LEAST32_TYPE__ int +#define _LP64 1 +#define __UINT8_C(c) c +#define __FLT64_MAX_EXP__ 1024 +#define __cpp_return_type_deduction 201304L +#define __SIZEOF_WCHAR_T__ 4 +#define __GNUC_PATCHLEVEL__ 1 +#define __FLT128_NORM_MAX__ 1.18973149535723176508575932662800702e+4932F128 +#define __FLT64_NORM_MAX__ 1.79769313486231570814527423731704357e+308F64 +#define __FLT128_HAS_QUIET_NAN__ 1 +#define __INTMAX_MAX__ 0x7fffffffffffffffL +#define TLRENDER_TIFF 1 +#define __INT_FAST8_TYPE__ signed char +#define __FLT64X_MIN__ 3.36210314311209350626267781732175260e-4932F64x +#define __STDCPP_THREADS__ 1 +#define __BFLT16_HAS_DENORM__ 1 +#define __GNUC_STDC_INLINE__ 1 +#define __FLT64_HAS_DENORM__ 1 +#define __FLT32_EPSILON__ 1.19209289550781250000000000000000000e-7F32 +#define __FLT16_HAS_DENORM__ 1 +#define __DBL_DECIMAL_DIG__ 17 +#define __STDC_UTF_32__ 1 +#define __INT_FAST8_WIDTH__ 8 +#define __FXSR__ 1 +#define __FLT32X_MAX__ 1.79769313486231570814527423731704357e+308F32x +#define __DBL_NORM_MAX__ double(1.79769313486231570814527423731704357e+308L) +#define __BYTE_ORDER__ __ORDER_LITTLE_ENDIAN__ +#define TLRENDER_FFMPEG 1 +#define __INTMAX_WIDTH__ 64 +#define __cpp_runtime_arrays 198712L +#define __FLT32_DIG__ 6 +#define __UINT64_TYPE__ long unsigned int +#define __UINT32_C(c) c ## U +#define __cpp_alias_templates 200704L +#define __cpp_constexpr_dynamic_alloc 201907L +#define __FLT_DENORM_MIN__ 1.40129846432481707092372958328991613e-45F +#define __FLT128_IS_IEC_60559__ 1 +#define __INT8_MAX__ 0x7f +#define __LONG_WIDTH__ 64 +#define __DBL_MIN__ double(2.22507385850720138309023271733240406e-308L) +#define __INT32_MAX__ 0x7fffffff +#define __UINT_FAST32_TYPE__ long unsigned int +#define __FLT16_MANT_DIG__ 11 +#define __FLT32X_NORM_MAX__ 1.79769313486231570814527423731704357e+308F32x +#define __CHAR32_TYPE__ unsigned int +#define __FLT_MAX__ 3.40282346638528859811704183484516925e+38F +#define __SSE2__ 1 +#define __cpp_deduction_guides 201907L +#define __BFLT16_NORM_MAX__ 3.38953138925153547590470800371487867e+38BF16 +#define __INT32_TYPE__ int +#define __SIZEOF_DOUBLE__ 8 +#define __cpp_exceptions 199711L +#define __FLT_MIN_10_EXP__ (-37) +#define __FLT64_MIN__ 2.22507385850720138309023271733240406e-308F64 +#define __INT_LEAST32_WIDTH__ 32 +#define __INTMAX_TYPE__ long int +#define __GLIBCXX_BITSIZE_INT_N_0 128 +#define __FLT32X_HAS_QUIET_NAN__ 1 +#define __ATOMIC_CONSUME 1 +#define __GNUC_MINOR__ 2 +#define __GLIBCXX_TYPE_INT_N_0 __int128 +#define __UINTMAX_MAX__ 0xffffffffffffffffUL +#define __FLT32X_DENORM_MIN__ 4.94065645841246544176568792868221372e-324F32x +#define __cpp_template_template_args 201611L +#define __DBL_MAX_10_EXP__ 308 +#define __LDBL_DENORM_MIN__ 3.64519953188247460252840593361941982e-4951L +#define __INT16_C(c) c +#define __STDC__ 1 +#define __PTRDIFF_TYPE__ long int +#define __LONG_MAX__ 0x7fffffffffffffffL +#define __FLT32X_MIN_10_EXP__ (-307) +#define __UINTPTR_TYPE__ long unsigned int +#define __DEC64_SUBNORMAL_MIN__ 0.000000000000001E-383DD +#define __DEC128_MANT_DIG__ 34 +#define __LDBL_MIN_10_EXP__ (-4931) +#define __cpp_generic_lambdas 201707L +#define __SSE_MATH__ 1 +#define __SIZEOF_LONG_LONG__ 8 +#define __cpp_user_defined_literals 200809L +#define __FLT128_DECIMAL_DIG__ 36 +#define __GCC_ATOMIC_LLONG_LOCK_FREE 2 +#define __FLT32_HAS_QUIET_NAN__ 1 +#define __FLT_DECIMAL_DIG__ 9 +#define __UINT_FAST16_MAX__ 0xffffffffffffffffUL +#define __LDBL_NORM_MAX__ 1.18973149535723176502126385303097021e+4932L +#define __GCC_ATOMIC_SHORT_LOCK_FREE 2 +#define __SIZE_MAX__ 0xffffffffffffffffUL +#define __UINT_FAST8_TYPE__ unsigned char +#define _GNU_SOURCE 1 +#define __cpp_init_captures 201803L +#define __ATOMIC_ACQ_REL 4 +#define __ATOMIC_RELEASE 3 diff --git a/build-linux/tests/test_virtual_drag_autogen/mocs_compilation.cpp b/build-linux/tests/test_virtual_drag_autogen/mocs_compilation.cpp new file mode 100644 index 00000000..bda67f76 --- /dev/null +++ b/build-linux/tests/test_virtual_drag_autogen/mocs_compilation.cpp @@ -0,0 +1,3 @@ +// This file is autogenerated. Changes will be overwritten. +// No files found that require moc or the moc files are included +enum some_compilers { need_more_than_nothing }; diff --git a/build-linux/tests/test_virtual_drag_autogen/timestamp b/build-linux/tests/test_virtual_drag_autogen/timestamp new file mode 100644 index 00000000..e69de29b diff --git a/codemap.md b/codemap.md new file mode 100644 index 00000000..af1c0ab2 --- /dev/null +++ b/codemap.md @@ -0,0 +1,61 @@ +# linux-port-fedora43-wt/ + + + +## Responsibility + + + +## Design + + + +## Flow + + + +## Integration + + +# Repository Atlas: KAssetManager (linux-port-fedora43-wt) + +## Project Responsibility +Qt 6 / C++20 desktop asset manager with three major shells inside one application: +- Asset Manager for the indexed library +- File Manager for direct filesystem browsing +- Project Manager for watch-folder based project ingest + +This worktree contains branch-specific Linux/Wayland preview behavior and must be treated as the source of truth for current playback and annotation work. + +## Entry Points +- `native/qt6/src/main.cpp`: process startup, Qt application attributes, Wayland/OpenGL toggles, database initialization, main window creation +- `native/qt6/src/mainwindow.cpp`: top-level UI orchestration for Asset Manager, File Manager, Project Manager, overlay launching, and preview routing +- `native/qt6/CMakeLists.txt`: authoritative build wiring for app, tlRender integration, Qt modules, and platform dependency discovery + +## Branch-Specific Verified Findings +- Wayland raster preview fallback is enabled unconditionally by `PlatformSession::shouldUseRasterPreviewFallbackOnWayland()` returning `isWayland()`. +- `PreviewOverlay` video annotation in this worktree uses a transparent `annotationOverlayView` over the active video widget, not the still-image `imageScene` path described in the older checkout. +- `TLRenderViewport` has two rendering paths: + - native `tl::qtwidget::Viewport` + - Wayland raster fallback via `QLabel` fed by `TLRenderPlayer::getCurrentFrame()` + +## Directory Map +| Directory | Responsibility | Detailed Map | +|-----------|----------------|--------------| +| `native/qt6/` | Qt application build, dependency wiring, and test target definitions. | `native/qt6/codemap.md` | +| `native/qt6/src/` | Main application code: window shell, models, preview overlays, importers, DB access, file operations. | `native/qt6/src/codemap.md` | +| `native/qt6/src/media/` | tlRender player, viewport wrappers, OpenGL widget, and preview rendering integration. | `native/qt6/src/media/codemap.md` | +| `scripts/` | Windows build and packaging automation. | `scripts/codemap.md` | + +## Preview / Annotation Flow +1. `MainWindow` selects an asset and opens `PreviewOverlay`. +2. `PreviewOverlay::showVideo()` ensures `TLRenderPlayer` and `TLRenderViewport` exist, loads media, and starts playback. +3. On Wayland, `TLRenderViewport` uses raster fallback and paints a `QLabel` pixmap from `TLRenderPlayer::getCurrentFrame()`. +4. When annotation mode is enabled for video, `PreviewOverlay` keeps the live video widget visible and layers `annotationOverlayView` above it. +5. Annotation input is converted from overlay view coordinates to scene coordinates in `PreviewOverlay::eventFilter()` and forwarded into `AnnotationLayer`. + +## Verification Scope +This atlas was rebuilt from the active worktree under: +`/home/npittas/KAssetManager/.worktrees/linux-port-fedora43-wt` + +Older codemap files from the main checkout should be treated as background context only. diff --git a/docs/APPIMAGE_CREATION.md b/docs/APPIMAGE_CREATION.md new file mode 100644 index 00000000..aa8285ea --- /dev/null +++ b/docs/APPIMAGE_CREATION.md @@ -0,0 +1,238 @@ +# AppImage Creation Guide for KAssetManager + +This guide documents the complete process for creating a working AppImage of KAssetManager on Fedora 43 (or similar modern Linux distributions). + +## Overview + +AppImage packaging bundles the application with its dependencies into a single executable file that runs on most Linux distributions. The process involves: + +1. Building the application with proper CMake configuration +2. Installing to a staging directory (AppDir) +3. Using linuxdeploy or AppImage tools to bundle dependencies +4. Creating the final AppImage + +## Prerequisites + +### Required Tools + +- **CMake 3.20+** +- **Ninja build system** +- **Qt 6 development packages** (Qt 6.5+) +- **GCC or Clang compiler** with C++20 support +- **appimagetool** (for creating the final AppImage) + +### Optional Tools + +- **linuxdeploy** (for automatic dependency bundling) +- **linuxdeploy-plugin-qt** (for Qt-specific bundling) + +You can find these tools in your package manager or download official AppImage versions: + +```bash +# Download official AppImage tools to project-local directory +mkdir -p tools/appimage +cd tools/appimage +curl -L -o appimagetool-x86_64.AppImage https://github.com/AppImage/AppImageKit/releases/download/continuous/appimagetool-x86_64.AppImage +curl -L -o linuxdeploy-x86_64.AppImage https://github.com/linuxdeploy/linuxdeploy/releases/download/continuous/linuxdeploy-x86_64.AppImage +curl -L -o linuxdeploy-plugin-qt-x86_64.AppImage https://github.com/linuxdeploy/linuxdeploy-plugin-qt/releases/download/continuous/linuxdeploy-plugin-qt-x86_64.AppImage +chmod +x *.AppImage +cd ../.. +``` + +## Step-by-Step Build Process + +### Step 1: Clean Build Environment + +**Critical**: Always start with a clean build directory. Stale CMake caches can cause issues with incorrect paths (e.g., FFmpeg pointing to non-existent `.worktrees/` directories). + +```bash +# Remove old build artifacts +rm -rf /home/npittas/KAssetManager/build-linux-appimage +mkdir -p /home/npittas/KAssetManager/build-linux-appimage +``` + +### Step 2: Configure with CMake + +**Important Flags**: +- `-DCMAKE_INSTALL_LIBDIR=lib`: Fedora defaults to `lib64`, but tlRender installs libraries to `lib/`. This mismatch causes segfaults because the binary's RUNPATH (`$ORIGIN/../lib64`) points to a non-existent directory. +- `-DCMAKE_PREFIX_PATH`: Point to the tlRender installation directory +- `-DCMAKE_BUILD_TYPE=Release`: Create optimized release build + +```bash +cd /home/npittas/KAssetManager + +cmake -S native/qt6 -B build-linux-appimage -G Ninja \ + -DCMAKE_BUILD_TYPE=Release \ + -DBUILD_APP=ON \ + -DBUILD_TESTS=OFF \ + -DCMAKE_INSTALL_LIBDIR=lib \ + -DCMAKE_PREFIX_PATH="/home/npittas/KAssetManager/third_party/tlRender-install-Release" +``` + +### Step 3: Build the Application + +```bash +ninja -j$(nproc) -C /home/npittas/KAssetManager/build-linux-appimage +``` + +This creates the executable at `build-linux-appimage/kassetmanagerqt` + +### Step 4: Prepare for Installation + +CMake's post-build step deletes `qt.conf` from the build tree (to prevent breaking local runs). You must recreate it before installation, or the install step fails with "file INSTALL cannot find qt.conf". + +```bash +# Recreate qt.conf in the build tree +printf '[Paths]\nPlugins=../plugins\n' > /home/npittas/KAssetManager/build-linux-appimage/qt.conf +``` + +### Step 5: Install to AppDir + +```bash +cmake --install /home/npittas/KAssetManager/build-linux-appimage \ + --prefix /home/npittas/KAssetManager/build-linux-appimage/AppDir/usr +``` + +This creates the AppDir structure: +- `AppDir/usr/bin/kassetmanagerqt` (main executable) +- `AppDir/usr/lib/` (libraries) +- `AppDir/usr/plugins/` (Qt plugins) +- `AppDir/usr/qml/` (Qt QML files, if needed) + +### Step 6: Create the AppImage + +There are two approaches: + +#### Option A: Using linuxdeploy (Recommended, if it works) + +```bash +cd /home/npittas/KAssetManager + +export APPIMAGETOOL="$PWD/tools/appimage/appimagetool-x86_64.AppImage" +export LINUXDEPLOY="$PWD/tools/appimage/linuxdeploy-x86_64.AppImage" +export LINUXDEPLOY_PLUGIN_QT="$PWD/tools/appimage/linuxdeploy-plugin-qt-x86_64.AppImage" +export NO_STRIP=1 # Fedora 43 uses newer ELF format + +bash scripts/package-appimage.sh +``` + +**Known Issues with linuxdeploy**: +- May fail with "Failed to run plugin: qt (exit code: 1)" +- Sometimes has issues with `qmake -query` + +#### Option B: Using qtpaths fallback (More reliable) + +If linuxdeploy fails, use the fallback method that copies Qt plugins using `qtpaths`: + +```bash +cd /home/npittas/KAssetManager + +export APPIMAGETOOL="$PWD/tools/appimage/appimagetool-x86_64.AppImage" +export LINUXDEPLOY="" # Disable linuxdeploy +export LINUXDEPLOY_PLUGIN_QT="" # Disable plugin +export NO_STRIP=1 # Avoid ELF format issues +export APPIMAGE_NAME="KAssetManager-1.8.6-x86_64.AppImage" + +bash scripts/package-appimage.sh +``` + +### Step 7: Verify the AppImage + +```bash +# Extract and test (doesn't require display) +cd /tmp +rm -rf appimage-test &>/dev/null +/home/npittas/KAssetManager/KAssetManager-1.8.6-x86_64.AppImage --appimage-extract + +# Test with offscreen platform (no display needed) +cd squashfs-root/usr/bin +QT_QPA_PLATFORM=offscreen timeout 5 ./kassetmanagerqt 2>&1 + +# Should print Qt messages and exit with code 124 (timeout), NOT 139 (segfault) +``` + +## Troubleshooting + +### Common Failure Modes + +| Symptom | Cause | Fix | +|--------|-------|-----| +| **Segfault (Exit 139)** | RUNPATH points to `lib64` but libraries in `lib/` | Add `-DCMAKE_INSTALL_LIBDIR=lib` to cmake | +| **"file INSTALL cannot find qt.conf"** | Post-build deleted qt.conf | Recreate qt.conf before `cmake --install` | +| **linuxdeploy-plugin-qt: "Failed to run plugin"** | linuxdeploy can't query qmake | Set `LINUXDEPLOY=""` to use fallback | +| **Incompatible library versions bundled** | Multiple FFmpeg versions (.61, .62, .59) | Remove duplicates before packaging | +| **Stales CMake cache** | FFmpeg_CFLAGS points to `.worktrees/` | Wipe build directory and reconfigure | + +### Critical Details + +#### Why `CMAKE_INSTALL_LIBDIR=lib` is Required + +Fedora defaults `CMAKE_INSTALL_LIBDIR` to `lib64/`, but tlRender installs libraries to `lib/`. When the binary is built with RUNPATH `$ORIGIN/../lib64` but libraries are in `$ORIGIN/../lib`, the dynamic linker fails to find them, causing an immediate segfault. + +The AppImage bundling process preserves the binary's RUNPATH, so this mismatch must be fixed at configure time. + +#### The `.d` File Problem + +Compiler dependency files (`.d`) should **never** be in the source root. They should be in the build tree under `CMakeFiles/`. Old builds from git worktrees may have generated them incorrectly, but modern out-of-source builds with Ninja won't recreate them there. + +If you see `a-*.d` files in the root: +- They're from an old build and safe to delete +- They're now in `.gitignore` (`*.d`) +- They won't reappear with current build configuration + +#### Using NO_STRIP=1 + +Fedora 43 uses a newer ELF format with `.relr.dyn` sections that older `strip` tools don't recognize. This causes linuxdeploy to fail when trying to strip libraries. Setting `NO_STRIP=1` skips the stripping step. + +## Scripts Reference + +### Build Script (`scripts/build-linux-appimage.sh`) + +Handles CMake configuration and build. Key features: +- Uses Ninja generator +- Sets proper install prefix +- Configures for AppImage packaging + +### Package Script (`scripts/package-appimage.sh`) + +Handles AppImage creation with: +- linuxdeploy support (if available) +- qtpaths fallback (if linuxdeploy fails) +- Proper environment setup +- AppImage generation + +## Final AppImage Location + +After successful build: +- **Main AppImage**: `/home/npittas/KAssetManager/KAssetManager-1.8.6-x86_64.AppImage` + +This file is ready to distribute and run on most Linux distributions. + +## Testing on Target Systems + +To test the AppImage on different systems: + +```bash +# Make executable +chmod +x KAssetManager-1.8.6-x86_64.AppImage + +# Run normally +./KAssetManager-1.8.6-x86_64.AppImage + +# Debug mode +./KAssetManager-1.8.6-x86_64.AppImage --appimage-extract-and-run +``` + +## Environment Variables + +- `APPIMAGETOOL`: Path to appimagetool binary +- `LINUXDEPLOY`: Path to linuxdeploy binary (set to empty to use fallback) +- `LINUXDEPLOY_PLUGIN_QT`: Path to Qt plugin (set to empty to use fallback) +- `NO_STRIP`: Set to `1` to skip library stripping +- `APPIMAGE_NAME`: Output filename (default: `KAssetManager-$(uname -m).AppImage`) + +## See Also + +- `docs/INSTALL.md` - General installation instructions +- `docs/linux-wayland-validation.md` - Linux/Wayland specific validation +- `docs/DEVELOPER_GUIDE.md` - Developer setup and contributions diff --git a/docs/ARCHITECTURE.md b/docs/ARCHITECTURE.md index 8352e2e3..a5d9f1f6 100644 --- a/docs/ARCHITECTURE.md +++ b/docs/ARCHITECTURE.md @@ -11,7 +11,7 @@ This document summarizes core runtime subsystems and cross‑cutting concerns: t - Background work - LivePreviewManager - Decoding and thumbnail generation run off the UI thread via QtConcurrent::run(). - - Video and image-sequence playback/preview use tlRender (mrv2) as the primary backend with OCIO support; OpenImageIO is used for all still image formats (unified for consistency, quality, and proper aspect ratio handling). FFmpeg is only used by the Convert dialog, not for live playback. + - Video and image-sequence playback/preview use tlRender (mrv2) as the primary backend with OCIO support; OpenImageIO is used for all still image formats (unified for consistency, quality, and proper aspect ratio handling). FFmpeg is used by the Convert dialog/tools and, on Linux/Wayland, as the live MOV playback backend via `FFmpegMovPlayer`. - Results are delivered back to the UI using queued connections. - Uses QCache with LRU semantics and a small metadata cache for image sequences. - Media conversion diff --git a/docs/DEVELOPER_GUIDE.md b/docs/DEVELOPER_GUIDE.md index 0654bacd..cfd4743c 100644 --- a/docs/DEVELOPER_GUIDE.md +++ b/docs/DEVELOPER_GUIDE.md @@ -10,6 +10,8 @@ native/qt6/ CMakeLists.txt # build configuration (app + tests) scripts/ build-windows.ps1 # Windows build/packaging helper + build-linux-appimage.sh + package-appimage.sh docs/ ARCHITECTURE.md, DEPENDENCIES.md, INSTALL.md, USER_GUIDE.md ``` @@ -28,11 +30,28 @@ docs/ - OpenImageIO via vcpkg (HAVE_OPENIMAGEIO automatically defined when found). - ImageMagick portable via IMAGEMAGICK_ROOT (only used at runtime for conversions). +### Linux baseline +- Fedora 43 KDE Wayland is the current validated Linux runtime baseline. +- The active Linux playback work in this branch uses: + - tlRender where still applicable + - a rewritten FFmpeg MOV player path for demanding MOV playback on Wayland +- `mpv` should be treated as inactive/stubbed for this Linux runtime path. + +### Linux packaging +- Linux packaging currently targets AppImage first. +- AppDir/AppImage helpers live in: + - `scripts/build-linux-appimage.sh` + - `scripts/package-appimage.sh` + - `native/qt6/packaging/linux/` +- The current AppImage runtime is expected to use a per-user writable Qt data root when the executable directory is not writable. + ### Testing - Unit tests use QtTest. Build with -DBUILD_TESTS=ON - Run locally: - Windows: after install step, test binaries in native/qt6/build//install_run/bin - Linux: ctest --test-dir build --output-on-failure + - Fedora 43 Wayland app runtime: `./build-linux-recovery-native-qt6/kassetmanagerqt` + - Linux AppImage runtime: `./KAssetManager-x86_64.AppImage` - Notes: - Some tests disable heavy features by compiling with definitions set to 0 and using guards `#if defined(HAVE_...) && HAVE_...` in code - Prefer deterministic test cases (QSignalSpy with bounded wait) @@ -41,7 +60,8 @@ docs/ ### Logging - A single message handler funnels Qt logs to LogManager -- LogManager is thread-safe, keeps a ring buffer (~1000 entries), and writes to app.log near the executable +- LogManager is thread-safe, keeps a ring buffer (~1000 entries), and writes to a writable runtime log path +- On packaged/AppImage Linux runs, the writable log path must not resolve inside the mounted AppImage - Avoid logging sensitive data. File paths and error summaries are acceptable ### Database patterns @@ -50,6 +70,7 @@ docs/ - Heavy DB operations are batched in transactions - Prepared statements and IN-clauses are used for bulk operations; placeholder strings are built safely - Schema versioning via PRAGMA user_version; migrations performed on startup as needed +- Linux/AppImage runtime data should resolve through the shared runtime-path helper rather than writing into the mounted application directory ### Threading and I/O - UI thread must remain responsive; no blocking I/O on UI @@ -60,10 +81,15 @@ docs/ ### Live preview and conversions - tlRender powers video and image-sequence playback; OpenImageIO handles all still image formats for consistent quality and behavior; FFmpeg is no longer used for playback. +- On the current Fedora 43 Wayland branch, demanding MOV playback uses the rewritten FFmpeg MOV player path rather than relying on `mpv`. - RAII wrappers ensure FFmpeg resources used by the Convert dialog are released on all paths. - Image conversions use ImageMagick; video conversions use FFmpeg via the Convert dialog/tools. - Conversion Pause/Resume is disabled by design. +### Linux validation corpus +- Local Linux/Wayland playback validation was run against `/mnt/ssd2/Tests/`, especially `/mnt/ssd2/Tests/Videos/`. +- See `docs/linux-wayland-validation.md` for the accepted playback set and current Linux/AppImage notes. + ### Security & hardening (summary) See CODEBASE_REVIEW_REPORT.md for the detailed audit. Implemented highlights: - SQL injection fixes with whitelisting and prepared statements diff --git a/docs/INSTALL.md b/docs/INSTALL.md index 5a2f1584..d9797d5d 100644 --- a/docs/INSTALL.md +++ b/docs/INSTALL.md @@ -1,10 +1,11 @@ ## Installation and Build Guide -This guide covers building, packaging, and running KAsset Manager on Windows (full application) and Linux (tests-only). +This guide covers building, packaging, and running KAsset Manager on Windows and on the current validated Linux baseline: Fedora 43 KDE Wayland. ### Supported platforms - Windows 10/11 (64-bit) — full application -- Linux (Ubuntu-latest) — CI/tests-only configuration +- Fedora 43 KDE Wayland — validated Linux runtime baseline +- Linux CI/tests-only configuration also exists for headless verification ### Prerequisites (Windows) - Visual Studio 2022 or Build Tools (x64) @@ -52,7 +53,7 @@ Run the application after packaging: - ENABLE_CLANG_TIDY=ON — static analysis - ENABLE_COVERAGE=ON — coverage (GCC/Clang) -### Linux (tests-only) +### Linux CI / tests-only ```bash cmake -S native/qt6 -B build -G Ninja -DBUILD_APP=OFF -DBUILD_TESTS=ON -DCMAKE_BUILD_TYPE=Debug @@ -62,9 +63,85 @@ ctest --test-dir build --output-on-failure The CI workflow (.github/workflows/ci.yml) demonstrates this configuration with optional sanitizers and coverage. +### Fedora 43 KDE Wayland build + +```bash +cmake -S native/qt6 -B build-linux-recovery-native-qt6 -G Ninja -DBUILD_APP=ON -DBUILD_TESTS=ON -DCMAKE_BUILD_TYPE=Release +cmake --build build-linux-recovery-native-qt6 -j 2 +./build-linux-recovery-native-qt6/kassetmanagerqt +``` + +Notes: + +- This Linux port uses the active Qt 6 native app build under `native/qt6` +- The current Linux playback path for demanding MOV files is the rewritten FFmpeg MOV backend in the current worktree +- `mpv` should not be treated as the active Linux playback backend in this runtime + +### Linux AppImage packaging + +For detailed step-by-step instructions, troubleshooting, and common failure modes, see: [docs/APPIMAGE_CREATION.md](../docs/APPIMAGE_CREATION.md) + +Quick start: + +```bash +# Full build (recommended for first build) +rm -rf /home/npittas/KAssetManager/build-linux-appimage +./scripts/build-linux-appimage.sh +./scripts/package-appimage.sh + +# Result: KAssetManager-x86_64.AppImage +``` + +Run AppImage: + +```bash +chmod +x ./KAssetManager-x86_64.AppImage +./KAssetManager-x86_64.AppImage +``` + +Key requirements: +- **CMAKE_INSTALL_LIBDIR=lib**: Fedora defaults to `lib64`, but must use `lib` to match tlRender's library layout +- **Clean build directory**: Stale caches from git worktrees can cause path issues +- **Recreate qt.conf**: CMake's post-build deletes it; must recreate before `cmake --install` + +Packaging notes: + +- The repo now contains Linux AppImage helper scripts and packaging metadata +- If host packages for `appimagetool` or `linuxdeploy` are unavailable, official upstream AppImage builds of those tools can be used locally +- The packaged Linux runtime uses a writable per-user Qt data location when the executable/AppImage mount is not writable +- Set `LINUXDEPLOY=""` if linuxdeploy-plugin-qt fails (uses qtpaths fallback) + +### Linux writable data location + +- Portable/dev layout: if `applicationDirPath()/data` is writable, the app keeps using it +- Packaged/AppImage layout: runtime data falls back to a per-user Qt writable data directory +- This applies to: + - `kasset.db` + - `projects.db` + - `app.log` + - thumbnail cache defaults + - version storage + ### Database and user data location - Data persists across updates and is stored under QStandardPaths::AppDataLocation - Windows example: %AppData%/KAssetManagerQt (exact path may vary by user/profile) + - Linux/AppImage example: `~/.local/share///` as resolved by Qt + +### Local validation corpus + +The Linux playback validation corpus used during the Fedora 43 Wayland port is under: + +```text +/mnt/ssd2/Tests/ +``` + +Video playback checks were concentrated under: + +```text +/mnt/ssd2/Tests/Videos/ +``` + +See `docs/linux-wayland-validation.md` for the accepted playback set and AppImage validation notes. ### Troubleshooting - Missing Qt tools (moc/rcc/windeployqt): Ensure your Qt MSVC bin is on PATH; the build script adds it automatically. @@ -72,3 +149,5 @@ The CI workflow (.github/workflows/ci.yml) demonstrates this configuration with - FFmpeg not detected (Convert dialog/tools): Set FFMPEG_ROOT to a prefix with include/ and lib/; DLLs will be copied from FFMPEG_ROOT/bin. - ImageMagick not detected: Set IMAGEMAGICK_ROOT to the portable root that contains magick.exe (either in root or in bin/). - OpenImageIO (advanced formats): Provided via vcpkg when available; optional at build time. +- Linux AppImage DB startup failures: packaged builds must not write under the mounted AppImage path; current builds use per-user writable Qt data paths. +- Linux color controls / OCIO: playback recovery and AppImage startup are validated, but OCIO/color controls on the non-native Linux video playback paths remain follow-up work. diff --git a/docs/TECH.md b/docs/TECH.md index 681b9ded..bf97a6a2 100644 --- a/docs/TECH.md +++ b/docs/TECH.md @@ -43,11 +43,11 @@ KAsset Manager is built with **Qt 6 Widgets** (C++20) for native Windows desktop ### Media Support -- **tlRender (mrv2)** - Primary backend for all video and image-sequence playback +- **tlRender (mrv2)** - Primary backend for video and image-sequence playback - tlRender integration (see `tlrender_player.*`, `tlrender_widget.*`) feeds LivePreviewManager and PreviewOverlay. - Supports professional codecs and containers such as MP4, MOV (including ProRes 4444 and Animation), AVI, etc., via bundled FFmpeg. - **Qt Multimedia / Audio** - Used only for lightweight audio-only playback where appropriate. -- **FFmpeg (external)** - Used only by the Convert dialog/tools for format conversion (not for live playback). +- **FFmpeg (external)** - Used by the Convert dialog/tools for format conversion. On Linux/Wayland, FFmpeg is also used as the live MOV playback backend via `FFmpegMovPlayer` when the raster preview fallback is active. ### Image Support @@ -368,15 +368,26 @@ CREATE INDEX idx_asset_versions_asset_id ON asset_versions(asset_id); ### Current - Windows 10/11 (64-bit) +- Fedora 43 KDE Wayland (validated Linux baseline) ### Future - macOS (Qt Widgets is cross-platform) -- Linux (Qt Widgets is cross-platform) +- Other Linux distributions (Qt Widgets is cross-platform) ## Version History -### v1.2.0 (Current) +### v1.8.6 (Current) + +- Fedora 43 KDE Wayland Linux port validation and packaging: + - AppImage packaging support (`scripts/build-linux-appimage.sh`, `scripts/package-appimage.sh`). + - FFmpeg MOV playback backend for Linux/Wayland raster preview fallback. + - Reverse playback async seek overlap fixes for smooth MP4/MOV backward playback. + - Annotation overlay preservation on Wayland video preview. + - Transport button UI refinements: loop and speed controls merged into the audio row. +- Bug fixes and optimizations around MOV backward buffer oscillation and choppiness. + +### v1.2.0 - File Manager network-drive performance improvements: - Lightweight folder-tree icons and folder-only expansion (no file or thumbnail work until a folder is selected). @@ -384,7 +395,7 @@ CREATE INDEX idx_asset_versions_asset_id ON asset_versions(asset_id); - Context-aware status bar progress: - Status bar progress label distinguishes "File Manager previews (visible)" from "Asset previews (visible)" while thumbnails are being generated. - Playback backend updates: - - tlRender is now the primary backend for video and image-sequence playback; FFmpeg is retained only for the Convert dialog/tools. + - tlRender is now the primary backend for video and image-sequence playback; FFmpeg is retained for the Convert dialog/tools and Linux MOV live playback. ### v1.1.0 diff --git a/docs/linux-wayland-validation.md b/docs/linux-wayland-validation.md new file mode 100644 index 00000000..38d60ef1 --- /dev/null +++ b/docs/linux-wayland-validation.md @@ -0,0 +1,97 @@ +# Fedora 43 Wayland Validation + +## Baseline + +KAsset Manager is validated on Fedora 43 KDE Wayland as the current Linux baseline. + +Validated areas from the current Linux worktree/runtime checks: + +- video playback on Wayland, including demanding MOV files, within small acceptable variance +- fullscreen/video annotation workflows +- annotation export +- thumbnail generation and scrubbing +- Project Manager workflows +- Batch Rename +- bundled converter runtime behavior +- AppImage startup past database initialization using per-user writable data paths + +Current not-yet-closed Linux items: + +- final AppImage feature smoke pass by the user in a normal Wayland session +- Linux/AppImage documentation polish +- OCIO/color controls on the non-native video playback paths + +## Playback Validation Corpus + +The local playback validation corpus used during this Linux/Wayland port is: + +```text +/mnt/ssd2/Tests/Videos/ +``` + +Representative validated files include: + +- `Atmosphere-019.mov` +- `Shot_0140_v005.mov` +- `Cut1GRAPHICS.mov` +- `Ns Ethereal 1.mp4` +- `MEGY_comp_4K_LL180_ap0_r709g24_v015.mov` + +Accepted playback result policy for this port: + +- small FPS variance from nominal playback rate is acceptable when it is within practical margin of error +- example accepted results from the current worktree include: + - `Shot_0140_v005.mov`: about `23.45 fps` + - `Atmosphere-019.mov`: about `23.38 fps` + - `Cut1GRAPHICS.mov`: about `29.50 fps` + - `Ns Ethereal 1.mp4`: about `22.98 fps` + +## AppImage Notes + +For complete step-by-step instructions, required CMake flags, troubleshooting, and common failure modes, see: [docs/APPIMAGE_CREATION.md](../docs/APPIMAGE_CREATION.md) + +The packaging produces: + +```text +KAssetManager-x86_64.AppImage +``` + +Key packaging/runtime notes: + +- AppDir staging is built by `scripts/build-linux-appimage.sh` +- AppImage packaging is driven by `scripts/package-appimage.sh` +- official `appimagetool` and `linuxdeploy` AppImages can be used locally when host packages are unavailable +- packaged/AppImage runtime data must use a writable per-user Qt data location rather than the mounted AppImage path +- Set `CMAKE_INSTALL_LIBDIR=lib` (Fedora defaults to `lib64` but tlRender uses `lib`) +- Clean build directory before each AppImage build to avoid stale caches + +## Smoke Commands + +Build/install AppDir: + +```bash +./scripts/build-linux-appimage.sh +``` + +Package AppImage: + +```bash +./scripts/package-appimage.sh +``` + +Run AppImage: + +```bash +chmod +x ./KAssetManager-x86_64.AppImage +./KAssetManager-x86_64.AppImage +``` + +For detailed troubleshooting, see `docs/APPIMAGE_CREATION.md`. + +## Known Remaining Linux Gap + +The main known Linux/video gap after playback recovery is: + +- OCIO/color controls are not fully implemented on the non-native video playback paths used by the current Linux/Wayland runtime + +This should be treated as follow-up work, not as part of the accepted playback recovery result. diff --git a/docs/superpowers/plans/2026-04-10-linux-port-fedora43-wayland-appimage.md b/docs/superpowers/plans/2026-04-10-linux-port-fedora43-wayland-appimage.md new file mode 100644 index 00000000..85087c97 --- /dev/null +++ b/docs/superpowers/plans/2026-04-10-linux-port-fedora43-wayland-appimage.md @@ -0,0 +1,568 @@ +# Fedora 43 Wayland AppImage Linux Port Implementation Plan + +> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking. + +**Goal:** Port KAsset Manager to Fedora Linux 43 KDE Wayland and ship it as an AppImage while preserving all core workflows and differentiating features except Everything Search. + +**Architecture:** Keep the existing Qt Widgets + tlRender architecture and port the platform-specific integrations to Linux/Wayland instead of replacing core subsystems. Execute the work gate-first: prove native Wayland media/runtime behavior on Fedora 43, then port Linux file-manager integration and AppImage packaging, and finally verify all required workflows against the real test corpus in `/mnt/ssd2/Tests/`. + +**Tech Stack:** Qt 6 Widgets, CMake, QtTest, tlRender, OpenImageIO, SQLite, FFmpeg, ImageMagick, D-Bus freedesktop integration, AppImage/linuxdeploy, Fedora 43 KDE Wayland + +--- + +## Scope And Acceptance Contract + +The port is only accepted when all of these work on Fedora 43 KDE Wayland from both a local build and the final AppImage: + +- Native Wayland app launch +- Video playback +- Image-sequence playback +- Timeline scrubbing for video and sequences +- Annotation on video and sequences +- Video and sequence thumbnail generation +- Project Manager watch/import/version workflows +- Batch rename +- Standard Linux file operations: copy, move, paste, trash, permanent delete, rename, new folder +- Reveal/select in the Linux file manager +- Bundled `ffmpeg` and `magick` conversions +- AppImage runtime reproduces the same behaviors + +Everything Search may be omitted if no Linux-equivalent implementation reaches acceptable quality. + +## Hard Gates + +- `tlRender` + Qt 6 + Wayland runtime +- Video playback on Wayland +- Sequence playback on Wayland +- Annotation overlay correctness above the GL/video surface +- Video thumbnail extraction via `TLRenderPlayer` +- AppImage bundling of Qt Wayland plugins, tlRender, and media dependencies + +## Non-Gates + +- Project Manager DB/model/watcher logic +- Batch rename +- Sequence grouping/version grouping logic +- Sequence thumbnail generation from image frames +- Standard file CRUD behavior + +## Validation Assets + +Use these exact files during manual validation: + +- Documents: + - `/mnt/ssd2/Tests/Documents/4-ypeythini-dilosi-pragmatikwn-dikaiouxwn-1.docx` + - `/mnt/ssd2/Tests/Documents/7Shots_Combined_AfterLife_BID_v14JN_UPDATED_22-10-24- Juice Scope.xlsx` + - `/mnt/ssd2/Tests/Documents/6k_2023_deyterobaumias_ekpaideyshs_elenh.eleyuerakh1.pdf` +- Images: + - `/mnt/ssd2/Tests/Images/WARM_0020a_comp_10K_LL180_acescg_lin_v0047_1001.exr` + - `/mnt/ssd2/Tests/Images/Big_Hole_01.jpg` + - `/mnt/ssd2/Tests/Images/Burn_1_Front_Dry.png` + - `/mnt/ssd2/Tests/Images/Shotgun Drywall 1.png` +- Sequence: + - `/mnt/ssd2/Tests/Images/HD/Sunshine_10_sec_RoopHD_0303.png` through `/mnt/ssd2/Tests/Images/HD/Sunshine_10_sec_RoopHD_0360.png` +- Videos: + - `/mnt/ssd2/Tests/Videos/MEGY_comp_4K_LL180_ap0_r709g24_v015.mov` + - `/mnt/ssd2/Tests/Videos/Blood_Hit_03.mov` + - `/mnt/ssd2/Tests/Videos/Sunshine 10sec Full Comp v3.mov` + - `/mnt/ssd2/Tests/Videos/Atmosphere-019.mov` +- Projects: + - `/mnt/ssd2/Tests/Projects/WARM_0010_fade in_test.v001.nk` + +## Files To Modify + +### Build and packaging +- Modify: `native/qt6/CMakeLists.txt` +- Modify: `native/qt6/cmake/DeployQt.cmake` +- Create: `scripts/build-linux-appimage.sh` +- Create: `scripts/package-appimage.sh` +- Create: `native/qt6/packaging/linux/kassetmanager.desktop` +- Create: `native/qt6/packaging/linux/AppRun.env` +- Modify/create: `.github/workflows/linux-appimage.yml` + +### Wayland/media/runtime +- Modify: `native/qt6/src/main.cpp` +- Modify: `native/qt6/src/preview_overlay.cpp` +- Modify: `native/qt6/src/live_preview_manager.cpp` +- Modify: `native/qt6/src/media/tlrender_player.cpp` +- Modify: `native/qt6/src/media/tlrender_widget.cpp` +- Modify: `native/qt6/src/media/tlrender_viewport.cpp` +- Modify: `native/qt6/src/thumbnail_generator_worker.cpp` + +### Linux shell/file integration +- Modify: `native/qt6/src/file_ops.h` +- Modify: `native/qt6/src/file_ops.cpp` +- Modify: `native/qt6/src/drag_utils.cpp` +- Modify: `native/qt6/src/mainwindow.cpp` + +### Preview/docs/project workflows +- Modify: `native/qt6/src/office_preview.cpp` +- Modify: `native/qt6/src/media_convert_dialog.cpp` +- Modify: `native/qt6/src/media_converter_worker.cpp` +- Modify only if needed: `native/qt6/src/project_manager_watcher.cpp` +- Modify only if needed: `native/qt6/src/project_db.cpp` +- Modify only if needed: `native/qt6/src/project_assets_model.cpp` +- Modify only if needed: `native/qt6/src/project_sequence_grouping_proxy_model.cpp` +- Modify only if needed: `native/qt6/src/bulk_rename_dialog.cpp` + +### Tests and docs +- Modify/create: `native/qt6/tests/test_live_preview_manager.cpp` +- Modify/create: `native/qt6/tests/test_models.cpp` +- Modify/create: `native/qt6/tests/test_project_manager.cpp` +- Create: `docs/linux-wayland-validation.md` +- Modify: `README.md` +- Modify: `docs/INSTALL.md` +- Modify: `docs/DEVELOPER_GUIDE.md` +- Modify: `AGENTS.md` + +### Task 1: Establish Fedora 43 Wayland App Build Baseline + +**Files:** +- Modify: `native/qt6/CMakeLists.txt` +- Modify: `native/qt6/cmake/DeployQt.cmake` +- Modify: `native/qt6/src/main.cpp` + +- [ ] **Step 1: Write the failing baseline verification** + +Run: +```bash +cmake -S native/qt6 -B build-linux -G Ninja -DBUILD_APP=ON -DBUILD_TESTS=ON -DCMAKE_BUILD_TYPE=Release +``` + +Expected: configuration fails on current Windows-only assumptions such as tlRender layout, `zlib.lib`, or Windows deployment logic. + +- [ ] **Step 2: Implement minimal Linux-safe CMake configuration** + +Requirements: +- remove shared references to Windows-only import libs such as `zlib.lib` +- guard Windows deployment logic under `WIN32` +- support Linux tlRender via `TLRENDER_ROOT` or `CMAKE_PREFIX_PATH` +- keep existing Windows behavior intact + +- [ ] **Step 3: Re-run configuration to verify it passes** + +Run: +```bash +cmake -S native/qt6 -B build-linux -G Ninja -DBUILD_APP=ON -DBUILD_TESTS=ON -DCMAKE_BUILD_TYPE=Release +``` + +Expected: configuration succeeds on Fedora 43. + +- [ ] **Step 4: Build the app and tests** + +Run: +```bash +cmake --build build-linux -j 2 +``` + +Expected: app and test targets compile successfully. + +- [ ] **Step 5: Verify native Wayland startup** + +Run: +```bash +./build-linux/kassetmanagerqt +``` + +Expected: +- app launches in the current Wayland session +- no immediate crash +- no missing Qt Wayland plugin errors +- OpenGL initialization succeeds + +- [ ] **Step 6: Commit** + +```bash +git add native/qt6/CMakeLists.txt native/qt6/cmake/DeployQt.cmake native/qt6/src/main.cpp +git commit -m "build: enable Fedora Wayland app configure and startup" +``` + +### Task 2: Prove tlRender Video And Sequence Playback On Wayland + +**Files:** +- Modify: `native/qt6/src/preview_overlay.cpp` +- Modify: `native/qt6/src/live_preview_manager.cpp` +- Modify: `native/qt6/src/media/tlrender_player.cpp` +- Modify: `native/qt6/src/media/tlrender_widget.cpp` +- Modify: `native/qt6/src/media/tlrender_viewport.cpp` +- Test: `/mnt/ssd2/Tests/Videos/*` and `/mnt/ssd2/Tests/Images/HD/*` + +- [ ] **Step 1: Run failing manual playback validation** + +Validate these inputs: +- `/mnt/ssd2/Tests/Videos/MEGY_comp_4K_LL180_ap0_r709g24_v015.mov` +- `/mnt/ssd2/Tests/Videos/Sunshine 10sec Full Comp v3.mov` +- `/mnt/ssd2/Tests/Images/HD/Sunshine_10_sec_RoopHD_0303.png ... 0360.png` + +Record any failures in: +- viewport creation +- frame presentation +- play/pause +- seek +- frame stepping +- sequence grouping/playback + +- [ ] **Step 2: Implement the minimal playback fixes** + +Fix only what is required for stable Wayland playback: +- tlRender initialization order +- OpenGL context/surface handling +- viewport/player hookup +- seek/frame-step correctness + +- [ ] **Step 3: Re-run manual validation** + +Expected: +- both video and image sequence playback work correctly on Fedora 43 Wayland + +- [ ] **Step 4: Run focused tests** + +Run: +```bash +cmake --install build-linux --prefix build-linux/install_run +ctest --test-dir build-linux --output-on-failure -R test_live_preview +``` + +Expected: live preview related tests pass after install. + +- [ ] **Step 5: Commit** + +```bash +git add native/qt6/src/preview_overlay.cpp native/qt6/src/live_preview_manager.cpp native/qt6/src/media/tlrender_player.cpp native/qt6/src/media/tlrender_widget.cpp native/qt6/src/media/tlrender_viewport.cpp native/qt6/tests +git commit -m "fix: restore tlRender playback on Fedora Wayland" +``` + +### Task 3: Preserve Annotation On Video And Sequences + +**Files:** +- Modify: `native/qt6/src/preview_overlay.cpp` +- Modify: `native/qt6/src/annotation_layer.cpp` +- Modify: `native/qt6/src/annotation_items.cpp` +- Test: sequence/video annotation using `/mnt/ssd2/Tests/Images/HD/*` and `/mnt/ssd2/Tests/Videos/*` + +- [ ] **Step 1: Write failing manual validation notes for sequence annotation** + +Verify on `/mnt/ssd2/Tests/Images/HD/` sequence: +- toggle annotation mode +- draw on multiple frames +- undo/redo +- frame markers +- save current +- save all + +Expected: if anything fails, capture whether it is overlay visibility, event routing, frame drift, or export mismatch. + +- [ ] **Step 2: Write failing manual validation notes for video annotation** + +Verify on: +- `/mnt/ssd2/Tests/Videos/Blood_Hit_03.mov` +- `/mnt/ssd2/Tests/Videos/Sunshine 10sec Full Comp v3.mov` + +- [ ] **Step 3: Implement minimal overlay and frame-sync fixes** + +Preserve: +- transparent overlay above the GL surface +- per-frame annotation persistence +- export correctness +- keyboard shortcuts and frame markers + +- [ ] **Step 4: Re-run annotation validation** + +Expected: annotation behaves correctly for both sequence and video under Wayland. + +- [ ] **Step 4a: Restore application and annotation icons on Linux** + +Verify and fix: +- file manager toolbar icons +- media transport icons in preview surfaces +- annotation toggle and annotation toolbar icons + +Expected: core app navigation and annotation UI are usable on Fedora 43 Wayland local builds and packaged layouts. + +- [ ] **Step 5: Commit** + +```bash +git add native/qt6/src/preview_overlay.cpp native/qt6/src/annotation_layer.cpp native/qt6/src/annotation_items.cpp +git commit -m "fix: preserve annotation workflows on Wayland" +``` + +### Task 4: Preserve Thumbnail Generation And Scrubbing + +**Files:** +- Modify: `native/qt6/src/thumbnail_generator_worker.cpp` +- Modify: `native/qt6/src/live_preview_manager.cpp` +- Modify: `native/qt6/src/grid_scrub.cpp` +- Modify: `native/qt6/src/asset_item_delegate.cpp` +- Modify: `native/qt6/src/fm_item_delegate.cpp` + +- [ ] **Step 1: Write failing validation for still, sequence, and video thumbnails** + +Use: +- `/mnt/ssd2/Tests/Images/WARM_0020a_comp_10K_LL180_acescg_lin_v0047_1001.exr` +- `/mnt/ssd2/Tests/Images/Burn_1_Front_Dry.png` +- `/mnt/ssd2/Tests/Images/HD/*` +- `/mnt/ssd2/Tests/Videos/Atmosphere-019.mov` + +Verify: +- Generate Thumbnail action +- persistent cache creation +- hover/grid scrubbing +- timeline scrubbing + +- [ ] **Step 2: Implement minimal fixes for tlRender-backed video thumbnails and scrub position mapping** + +- [ ] **Step 3: Re-run thumbnail and scrubbing validation** + +Expected: +- image, sequence, and video thumbnails generate correctly +- video and sequence scrubbing remain responsive and accurate + +- [ ] **Step 4: Commit** + +```bash +git add native/qt6/src/thumbnail_generator_worker.cpp native/qt6/src/live_preview_manager.cpp native/qt6/src/grid_scrub.cpp native/qt6/src/asset_item_delegate.cpp native/qt6/src/fm_item_delegate.cpp +git commit -m "fix: restore thumbnails and scrubbing on Linux" +``` + +### Task 5: Port Linux File Operations And File Manager Reveal + +**Files:** +- Modify: `native/qt6/src/file_ops.h` +- Modify: `native/qt6/src/file_ops.cpp` +- Modify: `native/qt6/src/drag_utils.cpp` +- Modify: `native/qt6/src/mainwindow.cpp` + +- [ ] **Step 1: Write the failing manual verification checklist** + +Validate: +- copy +- cut +- paste +- move +- delete to trash +- permanent delete +- rename +- new folder +- reveal/select in file manager + +Use a disposable scratch directory created near `/mnt/ssd2/Tests/` rather than mutating the corpus. + +- [ ] **Step 2: Implement Linux-native file-manager semantics** + +Requirements: +- use Qt filesystem operations for copy/move/rename/new folder +- use `QFile::supportsMoveToTrash()` and `QFile::moveToTrash()` for trash where supported +- use D-Bus `org.freedesktop.FileManager1.ShowItems` for reveal/select +- preserve queue/progress/error UX in `FileOpsQueue` + +- [ ] **Step 3: Re-run manual file operation validation** + +Expected: operations behave like a normal Linux file manager while preserving the app’s queue/progress UX. + +- [ ] **Step 4: Commit** + +```bash +git add native/qt6/src/file_ops.h native/qt6/src/file_ops.cpp native/qt6/src/drag_utils.cpp native/qt6/src/mainwindow.cpp +git commit -m "feat: add Linux-native file operations and file manager reveal" +``` + +### Task 6: Verify Project Manager And Batch Rename + +**Files:** +- Modify only if needed: `native/qt6/src/project_manager_watcher.cpp` +- Modify only if needed: `native/qt6/src/project_db.cpp` +- Modify only if needed: `native/qt6/src/project_assets_model.cpp` +- Modify only if needed: `native/qt6/src/project_sequence_grouping_proxy_model.cpp` +- Modify only if needed: `native/qt6/src/bulk_rename_dialog.cpp` + +- [ ] **Step 1: Run Project Manager validation against `/mnt/ssd2/Tests/`** + +Verify: +- create/open project rooted at `/mnt/ssd2/Tests/` +- watch path +- detect new files +- browse folders +- version grouping for `/mnt/ssd2/Tests/Projects/WARM_0010_fade in_test.v001.nk` +- preview project assets + +- [ ] **Step 2: Run bulk rename validation on a scratch copy of image files** + +Verify: +- rename pattern preview +- token handling +- duplicate conflict handling +- filesystem rename +- DB update where relevant + +- [ ] **Step 3: Implement only Linux-specific fixes found** + +- [ ] **Step 4: Run focused tests** + +Run: +```bash +cmake --install build-linux --prefix build-linux/install_run +ctest --test-dir build-linux --output-on-failure -R "test_models|test_db" +``` + +Expected: model and DB tests pass. + +- [ ] **Step 5: Commit** + +```bash +git add native/qt6/src/project_manager_watcher.cpp native/qt6/src/project_db.cpp native/qt6/src/project_assets_model.cpp native/qt6/src/project_sequence_grouping_proxy_model.cpp native/qt6/src/bulk_rename_dialog.cpp native/qt6/tests +git commit -m "fix: validate project manager and bulk rename on Linux" +``` + +### Task 7: Bundle And Verify Converters + +**Files:** +- Modify: `native/qt6/src/media_convert_dialog.cpp` +- Modify: `native/qt6/src/media_converter_worker.cpp` +- Create/modify: `scripts/build-linux-appimage.sh` +- Create/modify: `scripts/package-appimage.sh` + +- [ ] **Step 1: Write failing validation for conversion behavior** + +Use video and image inputs from `/mnt/ssd2/Tests/Videos/` and `/mnt/ssd2/Tests/Images/`. + +Verify: +- converter locates binaries +- MP4/MOV outputs work +- PNG/TIF sequence outputs preserve alpha where expected + +- [ ] **Step 2: Implement bundled-path-first lookup for `ffmpeg` and `magick`** + +Requirement: +- prefer bundled AppImage runtime paths +- fall back to PATH only for developer convenience + +- [ ] **Step 3: Re-run conversion validation** + +Expected: conversions succeed using Linux-safe runtime lookup. + +- [ ] **Step 4: Commit** + +```bash +git add native/qt6/src/media_convert_dialog.cpp native/qt6/src/media_converter_worker.cpp scripts +git commit -m "feat: resolve bundled conversion tools on Linux" +``` + +### Task 8: Package The Fedora 43 Wayland AppImage + +**Files:** +- Modify: `native/qt6/CMakeLists.txt` +- Create: `scripts/build-linux-appimage.sh` +- Create: `scripts/package-appimage.sh` +- Create: `native/qt6/packaging/linux/kassetmanager.desktop` +- Create: `native/qt6/packaging/linux/AppRun.env` +- Create/modify: `.github/workflows/linux-appimage.yml` + +- [ ] **Step 1: Implement Linux install/AppDir layout** + +Bundle: +- executable +- Qt Wayland-capable platform plugins +- imageformats/platforms/styles/plugins needed at runtime +- tlRender runtime libraries +- OpenImageIO runtime dependencies +- bundled `ffmpeg` +- bundled `magick` +- desktop file and icons + +- [ ] **Step 2: Install into AppDir** + +Run: +```bash +cmake --install build-linux --prefix build-linux/AppDir/usr +``` + +Expected: AppDir contains a complete Linux runtime layout. + +- [ ] **Step 3: Package AppImage** + +Run: +```bash +./scripts/package-appimage.sh +``` + +Expected: a `KAssetManager-*.AppImage` artifact is produced. + +- [ ] **Step 4: Smoke-test the AppImage on Fedora 43 Wayland** + +Run: +```bash +chmod +x KAssetManager-*.AppImage +./KAssetManager-*.AppImage +``` + +Expected: +- app launches on Wayland +- no missing platform/plugin/runtime errors + +- [ ] **Step 5: Re-run critical feature checks from the AppImage** + +Verify again: +- video playback +- sequence playback +- annotation +- thumbnails +- conversion + +- [ ] **Step 6: Commit** + +```bash +git add native/qt6/CMakeLists.txt scripts native/qt6/packaging/linux .github/workflows +git commit -m "build: package Fedora Wayland AppImage" +``` + +### Task 9: Document Linux/Fedora 43 Wayland Support + +**Files:** +- Create: `docs/linux-wayland-validation.md` +- Modify: `README.md` +- Modify: `docs/INSTALL.md` +- Modify: `docs/DEVELOPER_GUIDE.md` +- Modify: `AGENTS.md` + +- [ ] **Step 1: Document Fedora 43 KDE Wayland as the initial validated baseline** +- [ ] **Step 2: Document Linux build prerequisites and tlRender integration** +- [ ] **Step 3: Document AppImage packaging flow** +- [ ] **Step 4: Document the local validation corpus at `/mnt/ssd2/Tests/`** +- [ ] **Step 5: Commit** + +```bash +git add docs/linux-wayland-validation.md README.md docs/INSTALL.md docs/DEVELOPER_GUIDE.md AGENTS.md +git commit -m "docs: add Fedora Wayland Linux port guidance" +``` + +## Final Verification Commands + +Run these before declaring the port ready: + +```bash +cmake -S native/qt6 -B build-linux -G Ninja -DBUILD_APP=ON -DBUILD_TESTS=ON -DCMAKE_BUILD_TYPE=Release +cmake --build build-linux -j 2 +cmake --install build-linux --prefix build-linux/install_run +ctest --test-dir build-linux --output-on-failure +./build-linux/kassetmanagerqt +chmod +x KAssetManager-*.AppImage +./KAssetManager-*.AppImage +``` + +## Manual Validation Checklist + +- [ ] Launch app in the current Fedora 43 Wayland session +- [ ] Open `/mnt/ssd2/Tests/Videos/MEGY_comp_4K_LL180_ap0_r709g24_v015.mov` +- [ ] Play, pause, seek, and frame-step video playback +- [ ] Open the PNG sequence under `/mnt/ssd2/Tests/Images/HD/` +- [ ] Scrub the sequence timeline and verify frame accuracy +- [ ] Annotate at least 3 different frames in the sequence and export them +- [ ] Annotate at least 3 different frames in a video and export them +- [ ] Generate thumbnails for EXR, PNG sequence, and MOV assets +- [ ] Verify hover scrub/grid scrub works on video and sequence entries +- [ ] Create a project rooted at `/mnt/ssd2/Tests/` +- [ ] Verify the Nuke project appears and version logic remains correct +- [ ] Run bulk rename on a scratch copy of several images +- [ ] Copy, move, trash, permanently delete, and reveal files in the Linux file manager +- [ ] Convert a video and an image sequence using bundled tools +- [ ] Repeat the critical preview/annotation/thumbnail/conversion checks from the AppImage diff --git a/native/codemap.md b/native/codemap.md new file mode 100644 index 00000000..6de6a3a7 --- /dev/null +++ b/native/codemap.md @@ -0,0 +1,19 @@ +# native/ + + + +## Responsibility + + + +## Design + + + +## Flow + + + +## Integration + + diff --git a/native/qt6/CMakeLists.txt b/native/qt6/CMakeLists.txt index 480289c2..9fa2bada 100644 --- a/native/qt6/CMakeLists.txt +++ b/native/qt6/CMakeLists.txt @@ -7,14 +7,18 @@ if(NOT DEFINED CMAKE_TOOLCHAIN_FILE) set(CMAKE_TOOLCHAIN_FILE "$ENV{VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake" CACHE STRING "Vcpkg toolchain file") # Default triplet; can be overridden by user if(NOT DEFINED VCPKG_TARGET_TRIPLET) - set(VCPKG_TARGET_TRIPLET "x64-windows" CACHE STRING "Vcpkg target triplet") + if(WIN32) + set(VCPKG_TARGET_TRIPLET "x64-windows" CACHE STRING "Vcpkg target triplet") + else() + set(VCPKG_TARGET_TRIPLET "x64-linux" CACHE STRING "Vcpkg target triplet") + endif() endif() message(STATUS "Using vcpkg toolchain: ${CMAKE_TOOLCHAIN_FILE}") message(STATUS "Using vcpkg triplet: ${VCPKG_TARGET_TRIPLET}") endif() endif() -project(KAssetManagerQt VERSION 1.8.5 LANGUAGES CXX) +project(KAssetManagerQt VERSION 1.8.6 LANGUAGES CXX) # Optional static analysis / sanitizers option(ENABLE_ASAN "Enable AddressSanitizer (Clang/GCC only)" OFF) if(ENABLE_ASAN) @@ -74,8 +78,8 @@ endif() if(BUILD_APP) -find_package(QT NAMES Qt6 REQUIRED COMPONENTS Widgets Multimedia MultimediaWidgets Sql Concurrent Svg SvgWidgets OpenGLWidgets) -find_package(Qt6 REQUIRED COMPONENTS Widgets Multimedia MultimediaWidgets Sql Concurrent Svg SvgWidgets OpenGLWidgets) +find_package(QT NAMES Qt6 REQUIRED COMPONENTS Widgets Multimedia MultimediaWidgets Sql Concurrent Svg SvgWidgets OpenGL OpenGLWidgets Quick QuickWidgets DBus) +find_package(Qt6 REQUIRED COMPONENTS Widgets Multimedia MultimediaWidgets Sql Concurrent Svg SvgWidgets OpenGL OpenGLWidgets Quick QuickWidgets DBus) # Optional: Qt PDF (viewer) if available find_package(Qt6 QUIET COMPONENTS Pdf PdfWidgets) # ActiveQt (QAxObject) for Office-to-PDF conversion on Windows (optional) @@ -123,8 +127,12 @@ endif() set(_tlrender_candidates "${CMAKE_SOURCE_DIR}/../third_party/tlRender-build/install-Release" "${CMAKE_SOURCE_DIR}/../../third_party/tlRender-build/install-Release" + "${CMAKE_SOURCE_DIR}/../third_party/tlRender-install-Release" + "${CMAKE_SOURCE_DIR}/../../third_party/tlRender-install-Release" "${CMAKE_CURRENT_LIST_DIR}/../third_party/tlRender-build/install-Release" "${CMAKE_CURRENT_LIST_DIR}/../../third_party/tlRender-build/install-Release" + "${CMAKE_CURRENT_LIST_DIR}/../third_party/tlRender-install-Release" + "${CMAKE_CURRENT_LIST_DIR}/../../third_party/tlRender-install-Release" ) foreach(_candidate IN LISTS _tlrender_candidates) get_filename_component(_abs_candidate "${_candidate}" ABSOLUTE) @@ -140,12 +148,21 @@ if(TLRENDER_ROOT) list(PREPEND CMAKE_PREFIX_PATH "${TLRENDER_ROOT}" "${TLRENDER_ROOT}/share/ftk") message(STATUS "Using tlRender from ${TLRENDER_ROOT}") - # Force CMake to use tlRender's bundled ZLIB to avoid duplicate symbol issues - # tlRender bundles a static zlib that was used during its build - # We must set these as CACHE FORCE to override vcpkg's zlib + # Force CMake to use tlRender's bundled ZLIB to avoid duplicate symbol issues. + # The install layout differs by platform (.lib on Windows, libz.a on Linux). + set(_tlrender_zlib_library "") + if(WIN32 AND EXISTS "${TLRENDER_ROOT}/lib/zlib.lib") + set(_tlrender_zlib_library "${TLRENDER_ROOT}/lib/zlib.lib") + elseif(EXISTS "${TLRENDER_ROOT}/lib/libz.a") + set(_tlrender_zlib_library "${TLRENDER_ROOT}/lib/libz.a") + elseif(EXISTS "${TLRENDER_ROOT}/lib64/libz.a") + set(_tlrender_zlib_library "${TLRENDER_ROOT}/lib64/libz.a") + endif() set(ZLIB_ROOT "${TLRENDER_ROOT}" CACHE PATH "ZLIB root" FORCE) - set(ZLIB_LIBRARY "${TLRENDER_ROOT}/lib/zlib.lib" CACHE FILEPATH "ZLIB library" FORCE) - set(ZLIB_LIBRARY_RELEASE "${TLRENDER_ROOT}/lib/zlib.lib" CACHE FILEPATH "ZLIB Release library" FORCE) + if(_tlrender_zlib_library) + set(ZLIB_LIBRARY "${_tlrender_zlib_library}" CACHE FILEPATH "ZLIB library" FORCE) + set(ZLIB_LIBRARY_RELEASE "${_tlrender_zlib_library}" CACHE FILEPATH "ZLIB Release library" FORCE) + endif() set(ZLIB_INCLUDE_DIR "${TLRENDER_ROOT}/include" CACHE PATH "ZLIB include dir" FORCE) # Clear any cached found status unset(ZLIB_FOUND CACHE) @@ -176,7 +193,8 @@ if(TLRENDER_ROOT) else() message(FATAL_ERROR "tlRender not found! tlRender is required for video/image sequence playback.\n" "Build tlRender by running:\n" - " cd third_party/tlRender-build && .\\build-tlrender.ps1\n" + " Linux: configure/build tlRender into third_party/tlRender-install-Release\n" + " Windows: cd third_party/tlRender-build && .\\build-tlrender.ps1\n" "This will build tlRender with all dependencies including OpenColorIO and OpenImageIO.") endif() @@ -239,6 +257,8 @@ qt_add_executable(kassetmanagerqt WIN32 src/log_manager.cpp src/progress_manager.h src/progress_manager.cpp + src/runtime_paths.h + src/runtime_paths.cpp src/tags_model.h src/preview_overlay.h src/preview_overlay.cpp @@ -275,6 +295,8 @@ qt_add_executable(kassetmanagerqt WIN32 src/fm_views_ex.cpp src/file_manager_pane.h src/file_manager_pane.cpp + src/image_memory_limits.h + src/image_memory_limits.cpp src/oiio_image_loader.h src/oiio_image_loader.cpp src/project_folder_watcher.h @@ -316,11 +338,21 @@ qt_add_executable(kassetmanagerqt WIN32 src/thumbnail_generator_dialog.cpp src/thumbnail_generator_worker.h src/thumbnail_generator_worker.cpp - # tlRender integration - professional video/sequence playback with OCIO + # tlRender integration - professional video/sequence playback + src/media/media_player_types.h + src/media/libmpv_headers.h + src/media/libmpv_runtime.h + src/media/libmpv_runtime.cpp + src/media/mpv_player.h + src/media/mpv_player.cpp + src/media/mpv_viewport.h + src/media/mpv_viewport.cpp + src/media/ffmpeg_mov_player.h + src/media/ffmpeg_mov_player.cpp + src/media/ffmpeg_mov_viewport.h + src/media/ffmpeg_mov_viewport.cpp src/media/tlrender_player.h src/media/tlrender_player.cpp - src/media/tlrender_widget.h - src/media/tlrender_widget.cpp src/media/tlrender_viewport.h src/media/tlrender_viewport.cpp src/theme_manager.h @@ -370,7 +402,7 @@ if(TLRENDER_FOUND) tlRender::tlUI # UI widgets tlRender::tlDevice # Device handling ) - + # Link Qt integration libraries if available if(TLRENDER_HAS_QT) target_link_libraries(kassetmanagerqt PRIVATE @@ -378,16 +410,15 @@ if(TLRENDER_FOUND) tlRender::tlQtWidget # Qt widget implementations (Viewport, etc.) ) endif() - + # Add compile definitions to enable tlRender + bundled deps code paths. # NOTE: We intentionally rely on tlRender's bundled dependencies to avoid ABI/version mixing. - # These are used throughout the app (thumbnails, still-image preview, OCIO UI lists). + # These are used throughout the app (thumbnails and still-image preview). target_compile_definitions(kassetmanagerqt PRIVATE HAVE_TLRENDER=1 HAVE_OPENIMAGEIO=1 - HAVE_OCIO=1 ) - + # Windows system libraries required by tlRender dependencies if(WIN32) target_link_libraries(kassetmanagerqt PRIVATE @@ -408,8 +439,8 @@ if(TLRENDER_FOUND) dwmapi ) endif() - - message(STATUS "tlRender linked via imported targets with OCIO color management") + + message(STATUS "tlRender linked via imported targets") endif() # FFmpeg is provided by tlRender as a transitive dependency @@ -426,9 +457,13 @@ target_link_libraries(kassetmanagerqt PRIVATE Qt6::MultimediaWidgets Qt6::Sql Qt6::Concurrent + Qt6::DBus Qt6::Svg Qt6::SvgWidgets + Qt6::OpenGL Qt6::OpenGLWidgets + Qt6::Quick + Qt6::QuickWidgets ) # Link Qt PDF if available (widgets optional) if (TARGET Qt6::Pdf) @@ -442,7 +477,7 @@ endif() # OpenImageIO is provided by tlRender - no need to link separately -# Link minizip-ng (vcpkg target) - separate from tlRender's bundled minizip-ng +# Link minizip-ng from the tlRender install target_link_libraries(kassetmanagerqt PRIVATE MINIZIP::minizip-ng) target_compile_definitions(kassetmanagerqt PRIVATE HAVE_MINIZIP_NG) @@ -456,21 +491,77 @@ endif() install(TARGETS kassetmanagerqt RUNTIME DESTINATION bin) # Install icons folder -set(_ICONS_DIR "${CMAKE_SOURCE_DIR}/../../icons") +set(_ICONS_DIR "${CMAKE_SOURCE_DIR}/../../Icons") if(EXISTS "${_ICONS_DIR}") install(DIRECTORY "${_ICONS_DIR}" DESTINATION bin) - message(STATUS "Icons folder will be installed to bin/icons directory") + message(STATUS "Icons folder will be installed to bin/Icons directory") else() message(WARNING "Icons folder not found at ${_ICONS_DIR}") endif() -# Install bundled ACES OCIO config (ships with repo) so the portable build has a known-good config. -set(_ACES_OCIO_DIR "${CMAKE_SOURCE_DIR}/../../OpenColorIO-Config-ACES-1.2") -if(EXISTS "${_ACES_OCIO_DIR}") - install(DIRECTORY "${_ACES_OCIO_DIR}" DESTINATION bin) - message(STATUS "ACES OCIO config will be installed to bin/OpenColorIO-Config-ACES-1.2") -else() - message(WARNING "ACES OCIO config folder not found at ${_ACES_OCIO_DIR}") +if(UNIX AND NOT APPLE) + set(_LINUX_PACKAGING_DIR "${CMAKE_CURRENT_SOURCE_DIR}/packaging/linux") + set(_APP_ICON_PNG "${CMAKE_SOURCE_DIR}/../../icon.png") + + # Keep Linux assets in the install tree even before AppImage assembly. + set(_QT_CONF "${CMAKE_CURRENT_BINARY_DIR}/qt.conf") + file(WRITE "${_QT_CONF}" "[Paths]\nPlugins=../plugins\n") + install(FILES "${_QT_CONF}" DESTINATION bin) + + # The packaged layout needs qt.conf in the install tree, but keeping the same + # file beside the build-tree executable breaks normal local runs because the + # referenced ../plugins path does not exist there. + add_custom_command( + TARGET kassetmanagerqt POST_BUILD + COMMAND ${CMAKE_COMMAND} -E rm -f "${_QT_CONF}" + COMMENT "Removing build-tree qt.conf to preserve normal local Qt plugin discovery" + ) + + if(EXISTS "${_LINUX_PACKAGING_DIR}/kassetmanager.desktop") + install(FILES "${_LINUX_PACKAGING_DIR}/kassetmanager.desktop" DESTINATION share/applications) + endif() + + if(EXISTS "${_LINUX_PACKAGING_DIR}/AppRun.env") + install(FILES "${_LINUX_PACKAGING_DIR}/AppRun.env" DESTINATION share/kassetmanager) + endif() + + if(EXISTS "${_APP_ICON_PNG}") + install(FILES "${_APP_ICON_PNG}" DESTINATION share/icons/hicolor/256x256/apps RENAME kassetmanager.png) + else() + message(WARNING "App icon not found at ${_APP_ICON_PNG}") + endif() + + if(TLRENDER_ROOT) + foreach(_tlrender_lib_dir lib lib64) + if(EXISTS "${TLRENDER_ROOT}/${_tlrender_lib_dir}") + file(GLOB _TLRENDER_SO_FILES + "${TLRENDER_ROOT}/${_tlrender_lib_dir}/*.so" + "${TLRENDER_ROOT}/${_tlrender_lib_dir}/*.so.*") + if(_TLRENDER_SO_FILES) + install(FILES ${_TLRENDER_SO_FILES} DESTINATION lib) + endif() + endif() + endforeach() + endif() + + set(_LINUX_FFMPEG_BIN "${CMAKE_SOURCE_DIR}/../../third_party/ffmpeg/bin") + if(EXISTS "${_LINUX_FFMPEG_BIN}/ffmpeg" AND EXISTS "${_LINUX_FFMPEG_BIN}/ffprobe") + install(PROGRAMS + "${_LINUX_FFMPEG_BIN}/ffmpeg" + "${_LINUX_FFMPEG_BIN}/ffprobe" + DESTINATION bin) + endif() + + set(_LINUX_MAGICK_CANDIDATES + "${CMAKE_SOURCE_DIR}/../../third_party/imagemagick/bin/magick" + "${CMAKE_SOURCE_DIR}/../../third_party/imagemagick/magick" + ) + foreach(_linux_magick IN LISTS _LINUX_MAGICK_CANDIDATES) + if(EXISTS "${_linux_magick}") + install(PROGRAMS "${_linux_magick}" DESTINATION bin) + break() + endif() + endforeach() endif() # Packaging: deploy Qt runtime. Prefer Qt6DeploySupport if available. @@ -579,12 +670,16 @@ if(BUILD_TESTS) add_subdirectory(tests) endif() -# CPack configuration (NSIS + ZIP) +# CPack configuration set(CPACK_PACKAGE_NAME "KAsset Manager Qt") set(CPACK_PACKAGE_VENDOR "KAM") set(CPACK_PACKAGE_VERSION ${PROJECT_VERSION}) set(CPACK_PACKAGE_INSTALL_DIRECTORY "KAssetManagerQt") -set(CPACK_GENERATOR "ZIP;NSIS") +if(WIN32) + set(CPACK_GENERATOR "ZIP;NSIS") +else() + set(CPACK_GENERATOR "TGZ") +endif() include(CPack) diff --git a/native/qt6/codemap.md b/native/qt6/codemap.md new file mode 100644 index 00000000..473199a8 --- /dev/null +++ b/native/qt6/codemap.md @@ -0,0 +1,43 @@ +# native/qt6/ + + + +## Responsibility + + + +## Design + + + +## Flow + + + +## Integration + + +# native/qt6/ + +## Responsibility +Defines the Qt 6 application build, platform dependency discovery, and unit-test target composition for the native desktop client. + +## Build Design +- `CMakeLists.txt` is the authoritative application manifest. +- `tlRender` is required for app builds and is discovered from branch-local `third_party` install paths. +- Linux and Windows dependency handling diverge in build scripts, but the app target is always driven from this CMake project. +- Tests are declared as individual QtTest executables in `tests/CMakeLists.txt`. + +## Verified Branch-Specific Behavior +- This branch extends tlRender candidate paths to include Linux-style install layouts such as `third_party/tlRender-install-Release`. +- The app still links Qt Widgets, Multimedia, SQL, Concurrent, SVG, and OpenGLWidgets. +- Unit tests intentionally compile some targets with feature defines forced to `0`, so application code must use `#if defined(X) && X` style guards. + +## Control Flow +1. Configure locates Qt and tlRender. +2. `kassetmanagerqt` target compiles the monolithic UI shell plus models, DB, preview, and media layers. +3. Test targets compile selected source files directly from `src/` and run from the install tree. + +## Integration +- Consumed by: local developer builds, CI, Windows packaging scripts +- Depends on: tlRender install, Qt 6, minizip-ng, bundled FFmpeg via tlRender diff --git a/native/qt6/packaging/linux/AppRun.env b/native/qt6/packaging/linux/AppRun.env new file mode 100644 index 00000000..d5339db5 --- /dev/null +++ b/native/qt6/packaging/linux/AppRun.env @@ -0,0 +1,22 @@ +#!/bin/sh + +APPDIR="${APPDIR:-}" + +prepend_path() { + var_name="$1" + value="$2" + eval "current=\${$var_name}" + if [ -n "$current" ]; then + eval "export $var_name=\"$value:$current\"" + else + eval "export $var_name=\"$value\"" + fi +} + +prepend_path LD_LIBRARY_PATH "$APPDIR/usr/lib" +prepend_path QT_PLUGIN_PATH "$APPDIR/usr/plugins" +prepend_path QML2_IMPORT_PATH "$APPDIR/usr/qml" +prepend_path PATH "$APPDIR/usr/bin" + +export QT_QPA_PLATFORM="${QT_QPA_PLATFORM:-wayland;xcb}" +export QT_WAYLAND_DISABLE_WINDOWDECORATION="${QT_WAYLAND_DISABLE_WINDOWDECORATION:-1}" diff --git a/native/qt6/packaging/linux/kassetmanager.desktop b/native/qt6/packaging/linux/kassetmanager.desktop new file mode 100644 index 00000000..103dc657 --- /dev/null +++ b/native/qt6/packaging/linux/kassetmanager.desktop @@ -0,0 +1,10 @@ +[Desktop Entry] +Type=Application +Name=KAsset Manager +Comment=Professional asset management +Exec=kassetmanagerqt +Icon=kassetmanager +Terminal=false +Categories=Graphics;Utility; +StartupNotify=true +StartupWMClass=kassetmanagerqt diff --git a/native/qt6/src/annotation_items.cpp b/native/qt6/src/annotation_items.cpp index 66a28b41..f5d04949 100644 --- a/native/qt6/src/annotation_items.cpp +++ b/native/qt6/src/annotation_items.cpp @@ -177,10 +177,11 @@ QRectF TextAnnotation::boundingRect() const QJsonObject TextAnnotation::toJson() const { QJsonObject json; + const QPointF scenePosition = pos(); json["type"] = "text"; json["text"] = m_text; - json["x"] = m_position.x(); - json["y"] = m_position.y(); + json["x"] = scenePosition.x(); + json["y"] = scenePosition.y(); json["color"] = m_color.name(); json["penWidth"] = m_penWidth; json["scale"] = m_scale; @@ -267,6 +268,7 @@ FreehandAnnotation::FreehandAnnotation(const QPainterPath& path, QGraphicsItem* void FreehandAnnotation::addPoint(const QPointF& point) { + prepareGeometryChange(); if (m_path.elementCount() == 0) { m_path.moveTo(point); } else { @@ -306,6 +308,7 @@ QRectF FreehandAnnotation::boundingRect() const QJsonObject FreehandAnnotation::toJson() const { QJsonObject json; + const QPointF offset = pos(); json["type"] = "freehand"; json["color"] = m_color.name(); json["penWidth"] = m_penWidth; @@ -314,8 +317,8 @@ QJsonObject FreehandAnnotation::toJson() const for (int i = 0; i < m_path.elementCount(); ++i) { QPainterPath::Element elem = m_path.elementAt(i); QJsonObject pt; - pt["x"] = elem.x; - pt["y"] = elem.y; + pt["x"] = elem.x + offset.x(); + pt["y"] = elem.y + offset.y(); points.append(pt); } json["points"] = points; @@ -365,11 +368,12 @@ QRectF RectangleAnnotation::boundingRect() const QJsonObject RectangleAnnotation::toJson() const { QJsonObject json; + const QRectF rect = m_rect.translated(pos()); json["type"] = "rectangle"; - json["x"] = m_rect.x(); - json["y"] = m_rect.y(); - json["width"] = m_rect.width(); - json["height"] = m_rect.height(); + json["x"] = rect.x(); + json["y"] = rect.y(); + json["width"] = rect.width(); + json["height"] = rect.height(); json["color"] = m_color.name(); json["penWidth"] = m_penWidth; return json; @@ -417,11 +421,12 @@ QRectF EllipseAnnotation::boundingRect() const QJsonObject EllipseAnnotation::toJson() const { QJsonObject json; + const QRectF rect = m_rect.translated(pos()); json["type"] = "ellipse"; - json["x"] = m_rect.x(); - json["y"] = m_rect.y(); - json["width"] = m_rect.width(); - json["height"] = m_rect.height(); + json["x"] = rect.x(); + json["y"] = rect.y(); + json["width"] = rect.width(); + json["height"] = rect.height(); json["color"] = m_color.name(); json["penWidth"] = m_penWidth; return json; @@ -507,11 +512,12 @@ QRectF ArrowAnnotation::boundingRect() const QJsonObject ArrowAnnotation::toJson() const { QJsonObject json; + const QPointF offset = pos(); json["type"] = "arrow"; - json["x1"] = m_line.x1(); - json["y1"] = m_line.y1(); - json["x2"] = m_line.x2(); - json["y2"] = m_line.y2(); + json["x1"] = m_line.x1() + offset.x(); + json["y1"] = m_line.y1() + offset.y(); + json["x2"] = m_line.x2() + offset.x(); + json["y2"] = m_line.y2() + offset.y(); json["color"] = m_color.name(); json["penWidth"] = m_penWidth; json["arrowHeadSize"] = m_arrowHeadSize; diff --git a/native/qt6/src/annotation_items.h b/native/qt6/src/annotation_items.h index 092b7083..c789ca99 100644 --- a/native/qt6/src/annotation_items.h +++ b/native/qt6/src/annotation_items.h @@ -39,7 +39,7 @@ class AnnotationItem : public QGraphicsItem // QGraphicsItem interface virtual void paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget = nullptr) override = 0; virtual QRectF boundingRect() const override = 0; - int type() const override { return UserType + annotationType(); } + int type() const override { return UserType + static_cast(annotationType()); } // Serialization virtual QJsonObject toJson() const = 0; @@ -122,7 +122,7 @@ class FreehandAnnotation : public AnnotationItem // Path operations QPainterPath path() const { return m_path; } - void setPath(const QPainterPath& path) { m_path = path; update(); } + void setPath(const QPainterPath& path) { prepareGeometryChange(); m_path = path; update(); } void addPoint(const QPointF& point); void finishPath(); @@ -146,7 +146,7 @@ class RectangleAnnotation : public AnnotationItem // Rectangle properties QRectF rect() const { return m_rect; } - void setRect(const QRectF& rect) { m_rect = rect; update(); } + void setRect(const QRectF& rect) { prepareGeometryChange(); m_rect = rect; update(); } private: QRectF m_rect; @@ -168,7 +168,7 @@ class EllipseAnnotation : public AnnotationItem // Ellipse properties (bounding rect) QRectF rect() const { return m_rect; } - void setRect(const QRectF& rect) { m_rect = rect; update(); } + void setRect(const QRectF& rect) { prepareGeometryChange(); m_rect = rect; update(); } private: QRectF m_rect; @@ -190,10 +190,10 @@ class ArrowAnnotation : public AnnotationItem // Arrow properties QLineF line() const { return m_line; } - void setLine(const QLineF& line) { m_line = line; update(); } + void setLine(const QLineF& line) { prepareGeometryChange(); m_line = line; update(); } double arrowHeadSize() const { return m_arrowHeadSize; } - void setArrowHeadSize(double size) { m_arrowHeadSize = size; update(); } + void setArrowHeadSize(double size) { prepareGeometryChange(); m_arrowHeadSize = size; update(); } private: QLineF m_line; diff --git a/native/qt6/src/annotation_layer.cpp b/native/qt6/src/annotation_layer.cpp index 37543dc9..c3fc1cec 100644 --- a/native/qt6/src/annotation_layer.cpp +++ b/native/qt6/src/annotation_layer.cpp @@ -201,13 +201,12 @@ void AnnotationLayer::handleMouseMove(QGraphicsSceneMouseEvent* event) void AnnotationLayer::handleMouseRelease(QGraphicsSceneMouseEvent* event) { - Q_UNUSED(event); - if (!m_isDrawing) { return; } if (m_currentMode != Text) { + updateDrawingItem(event->scenePos()); finishDrawing(); } } diff --git a/native/qt6/src/app.rc b/native/qt6/src/app.rc deleted file mode 100644 index ad156302..00000000 --- a/native/qt6/src/app.rc +++ /dev/null @@ -1,38 +0,0 @@ -// Windows Resource File for KAsset Manager -// This embeds the application icon into the executable - -#include - -// Application icon -IDI_ICON1 ICON "..\\..\\..\\icon.ico" - -// Version information -VS_VERSION_INFO VERSIONINFO -FILEVERSION 1,8,5,0 -PRODUCTVERSION 1,8,5,0 -FILEFLAGSMASK 0x3fL -FILEFLAGS 0x0L -FILEOS VOS_NT_WINDOWS32 -FILETYPE VFT_APP -FILESUBTYPE VFT2_UNKNOWN -BEGIN - BLOCK "StringFileInfo" - BEGIN - BLOCK "040904b0" - BEGIN - VALUE "CompanyName", "KAsset Manager" - VALUE "FileDescription", "KAsset Manager - Professional Asset Management" - VALUE "FileVersion", "1.8.5.0" - VALUE "InternalName", "kassetmanagerqt" - VALUE "LegalCopyright", "Copyright (C) 2024" - VALUE "OriginalFilename", "kassetmanagerqt.exe" - VALUE "ProductName", "KAsset Manager" - VALUE "ProductVersion", "1.8.5.0" - END - END - BLOCK "VarFileInfo" - BEGIN - VALUE "Translation", 0x409, 1200 - END -END - diff --git a/native/qt6/src/bulk_rename_dialog.cpp b/native/qt6/src/bulk_rename_dialog.cpp index a0ff8019..dc98d35c 100644 --- a/native/qt6/src/bulk_rename_dialog.cpp +++ b/native/qt6/src/bulk_rename_dialog.cpp @@ -229,6 +229,13 @@ void BulkRenameDialog::updatePreview() { for (int i = 0; i < m_previewItems.size(); ++i) { RenamePreviewItem& item = m_previewItems[i]; item.newName = applyPattern(item.originalName, i); + item.hasConflict = false; + item.conflictReason.clear(); + + QFileInfo originalInfo(item.fullPath); + const QString candidatePath = originalInfo.dir().filePath(item.newName); + const bool nameUnchanged = item.newName == item.originalName; + const bool existingPathConflict = !nameUnchanged && QFileInfo::exists(candidatePath); // Check for conflicts if (newNames.contains(item.newName)) { @@ -239,12 +246,14 @@ void BulkRenameDialog::updatePreview() { item.hasConflict = true; item.conflictReason = "Empty name"; m_hasConflicts = true; - } else if (item.newName == item.originalName) { + } else if (existingPathConflict) { + item.hasConflict = true; + item.conflictReason = "Target already exists"; + m_hasConflicts = true; + } else if (nameUnchanged) { item.hasConflict = false; item.conflictReason = "No change"; } else { - item.hasConflict = false; - item.conflictReason = ""; newNames.insert(item.newName); } } @@ -465,7 +474,6 @@ bool BulkRenameDialog::performFileRename() { QMessageBox::critical(this, "Invalid Name", QString("The new name '%1' is invalid. It must not contain '/' or '\\' or be '.'/'..'.") .arg(item.newName)); - // Rollback previous renames for (const auto& pair : renamedFiles) { QFile rollbackFile(pair.second); rollbackFile.rename(pair.first); @@ -473,7 +481,6 @@ bool BulkRenameDialog::performFileRename() { return false; } - QFileInfo originalInfo(item.fullPath); QString newPath = originalInfo.dir().filePath(item.newName); @@ -486,21 +493,6 @@ bool BulkRenameDialog::performFileRename() { .arg(item.fullPath) .arg(newPath) .arg(file.errorString())); - // Validate that newName does not traverse directories or include separators - if (item.newName == "." || item.newName == ".." || item.newName.contains('/') || item.newName.contains('\\')) { - QMessageBox::critical(this, "Invalid Name", - QString("The new name '%1' is invalid. It must not contain '/' or '\\' or be '.'/'..'.") - .arg(item.newName)); - // Rollback previous renames - for (const auto& pair : renamedFiles) { - QFile rollbackFile(pair.second); - rollbackFile.rename(pair.first); - } - return false; - } - - - // Rollback previous renames for (const auto& pair : renamedFiles) { QFile rollbackFile(pair.second); rollbackFile.rename(pair.first); diff --git a/native/qt6/src/codemap.md b/native/qt6/src/codemap.md new file mode 100644 index 00000000..b802744a --- /dev/null +++ b/native/qt6/src/codemap.md @@ -0,0 +1,60 @@ +# native/qt6/src/ + + + +## Responsibility + + + +## Design + + + +## Flow + + + +## Integration + + +# native/qt6/src/ + +## Responsibility +Implements the main Qt Widgets application, including data models, project/file management, preview overlays, annotation tools, import workflows, and persistence. + +## Main Shells +- `main.cpp`: startup, Wayland session detection, Qt attributes, persistent DB initialization +- `mainwindow.cpp`: primary orchestration hub for Asset Manager, File Manager, and Project Manager +- `preview_overlay.cpp`: full-screen preview shell for image, sequence, video, PDF, text, and annotation workflows +- `image_preview_overlay.cpp`: lighter image-only preview variant + +## Key Design Patterns +- Centralized UI orchestration in `MainWindow` and `PreviewOverlay` +- Model/view usage for library, filesystem, and project panes +- Background decode/import work via QtConcurrent and thread pools +- Scene-based annotation editing through `AnnotationLayer` + `AnnotationItem` hierarchy + +## Preview and Annotation Flow +1. `MainWindow` or File Manager opens `PreviewOverlay` for the selected asset. +2. `PreviewOverlay` routes by media type: + - images/sequences through `QGraphicsScene`/`QGraphicsView` + - video through `TLRenderPlayer` + `TLRenderViewport` +3. In this branch, video annotation mode keeps the video widget visible and overlays `annotationOverlayView` on top of it. +4. `PreviewOverlay::eventFilter()` translates mouse events from the active annotation surface into scene coordinates and forwards them to `AnnotationLayer`. +5. `AnnotationLayer` creates concrete `AnnotationItem` objects and serializes them per frame in `frameAnnotations`. + +## Verified Active Files For Current Preview Work +- `preview_overlay.cpp/.h` +- `annotation_layer.cpp/.h` +- `annotation_items.cpp/.h` +- `icon_utils.cpp/.h` +- `platform_session.h` + +## Verified Branch-Specific Findings +- `PlatformSession::shouldUseRasterPreviewFallbackOnWayland()` always returns `isWayland()`, so Wayland preview defaults to the raster path. +- `PreviewOverlay::enableAnnotationMode()` for video sets `annotationLayer` to `annotationOverlayScene`, not `imageScene`. +- `PreviewOverlay::captureCurrentFrame()` still depends on `TLRenderPlayer::getCurrentFrame()` for video export and annotation capture. + +## Integration +- Consumed by: `kassetmanagerqt` +- Depends on: media layer in `src/media/`, DB layer, theme/log/progress managers, tlRender feature flags diff --git a/native/qt6/src/converter_tool_resolver.h b/native/qt6/src/converter_tool_resolver.h new file mode 100644 index 00000000..e550fe56 --- /dev/null +++ b/native/qt6/src/converter_tool_resolver.h @@ -0,0 +1,179 @@ +#pragma once + +#include +#include +#include +#include + +enum class ConverterToolSource { + BundledRuntime, + BundledDevCheckout, + EnvOverride, + PathFallback, + Missing +}; + +struct ConverterToolResolution { + QString toolName; + QString resolvedPath; + ConverterToolSource source = ConverterToolSource::Missing; + + bool isAbsolute() const { return QFileInfo(resolvedPath).isAbsolute(); } + bool isFallback() const { return source == ConverterToolSource::PathFallback; } +}; + +namespace ConverterToolResolverDetail { + +inline QString executableNameFor(const QString& toolName) +{ +#ifdef Q_OS_WIN + return toolName + QStringLiteral(".exe"); +#else + return toolName; +#endif +} + +inline QString ffprobeExecutableName() +{ + return executableNameFor(QStringLiteral("ffprobe")); +} + +inline ConverterToolResolution resolutionFor(const QString& toolName, + const QString& resolvedPath, + ConverterToolSource source) +{ + return ConverterToolResolution{toolName, resolvedPath, source}; +} + +inline ConverterToolResolution findFirstExisting(const QString& toolName, + const QStringList& candidates, + ConverterToolSource source) +{ + for (const QString& candidate : candidates) { + const QFileInfo info(candidate); + if (info.exists() && info.isFile()) { + return resolutionFor(toolName, info.absoluteFilePath(), source); + } + } + return resolutionFor(toolName, QString(), ConverterToolSource::Missing); +} + +inline QStringList runtimeCandidates(const QString& appDir, const QString& executableName) +{ + return { + QDir(appDir).filePath(executableName), + QDir(appDir).filePath(QStringLiteral("../bin/%1").arg(executableName)) + }; +} + +inline QStringList envCandidates(const QString& envRoot, const QString& executableName) +{ + if (envRoot.isEmpty()) { + return {}; + } + + return { + QDir(envRoot).filePath(executableName), + QDir(envRoot).filePath(QStringLiteral("bin/%1").arg(executableName)) + }; +} + +inline ConverterToolResolution resolveFfmpegToolImpl(const QString& appDir) +{ + const QString toolName = QStringLiteral("ffmpeg"); + const QString executableName = executableNameFor(toolName); + + if (const auto runtime = findFirstExisting(toolName, runtimeCandidates(appDir, executableName), ConverterToolSource::BundledRuntime); + runtime.source != ConverterToolSource::Missing) { + return runtime; + } + + const QString thirdPartyPath = QDir(appDir).filePath(QStringLiteral("../../third_party/ffmpeg/bin/%1").arg(executableName)); + if (const auto dev = findFirstExisting(toolName, {thirdPartyPath}, ConverterToolSource::BundledDevCheckout); + dev.source != ConverterToolSource::Missing) { + return dev; + } + + const QString envRoot = qEnvironmentVariable("FFMPEG_ROOT"); + if (const auto env = findFirstExisting(toolName, envCandidates(envRoot, executableName), ConverterToolSource::EnvOverride); + env.source != ConverterToolSource::Missing) { + return env; + } + + return resolutionFor(toolName, toolName, ConverterToolSource::PathFallback); +} + +inline ConverterToolResolution resolveMagickToolImpl(const QString& appDir) +{ + const QString toolName = QStringLiteral("magick"); + const QString executableName = executableNameFor(toolName); + + if (const auto runtime = findFirstExisting(toolName, runtimeCandidates(appDir, executableName), ConverterToolSource::BundledRuntime); + runtime.source != ConverterToolSource::Missing) { + return runtime; + } + + const QString thirdPartyRoot = QDir(appDir).filePath(QStringLiteral("../../third_party")); + const QDir thirdPartyDir(thirdPartyRoot); + if (thirdPartyDir.exists()) { + if (const auto lowerCase = findFirstExisting(toolName, + {QDir(thirdPartyRoot).filePath(QStringLiteral("imagemagick/bin/%1").arg(executableName))}, + ConverterToolSource::BundledDevCheckout); + lowerCase.source != ConverterToolSource::Missing) { + return lowerCase; + } + + const QStringList imageMagickDirs = thirdPartyDir.entryList(QStringList() << QStringLiteral("ImageMagick*"), + QDir::Dirs | QDir::NoDotAndDotDot, + QDir::Name); + for (const QString& dirName : imageMagickDirs) { + const QString root = thirdPartyDir.filePath(dirName); + if (const auto dev = findFirstExisting(toolName, + {QDir(root).filePath(executableName), + QDir(root).filePath(QStringLiteral("bin/%1").arg(executableName))}, + ConverterToolSource::BundledDevCheckout); + dev.source != ConverterToolSource::Missing) { + return dev; + } + } + } + + const QStringList envVars = {QStringLiteral("MAGICK_ROOT"), QStringLiteral("IMAGEMAGICK_ROOT")}; + for (const QString& envVar : envVars) { + if (const auto env = findFirstExisting(toolName, + envCandidates(qEnvironmentVariable(envVar.toUtf8().constData()), executableName), + ConverterToolSource::EnvOverride); + env.source != ConverterToolSource::Missing) { + return env; + } + } + + return resolutionFor(toolName, toolName, ConverterToolSource::PathFallback); +} + +} // namespace ConverterToolResolverDetail + +inline ConverterToolResolution resolveFfmpegTool(const QString& appDir) +{ + return ConverterToolResolverDetail::resolveFfmpegToolImpl(appDir); +} + +inline ConverterToolResolution resolveMagickTool(const QString& appDir) +{ + return ConverterToolResolverDetail::resolveMagickToolImpl(appDir); +} + +inline QString resolveSiblingFfprobePath(const QString& ffmpegPath) +{ + if (!ffmpegPath.isEmpty()) { + const QFileInfo ffmpegInfo(ffmpegPath); + if (ffmpegInfo.isAbsolute()) { + const QString sibling = ffmpegInfo.dir().filePath(ConverterToolResolverDetail::ffprobeExecutableName()); + if (QFileInfo::exists(sibling)) { + return QFileInfo(sibling).absoluteFilePath(); + } + } + } + + return QStringLiteral("ffprobe"); +} diff --git a/native/qt6/src/db.cpp b/native/qt6/src/db.cpp index 3e6470d5..a01d24e9 100644 --- a/native/qt6/src/db.cpp +++ b/native/qt6/src/db.cpp @@ -22,7 +22,7 @@ static QString computeFileSha256(const QString& path) while (true) { qint64 n = f.read(buf.data(), buf.size()); if (n <= 0) break; - hasher.addData(buf.constData(), (int)n); + hasher.addData(QByteArrayView(buf.constData(), n)); } return hasher.result().toHex(); } @@ -201,27 +201,6 @@ bool DB::setSchemaUserVersion(int v) { return exec(QStringLiteral("PRAGMA user_version=%1").arg(v)); } -QSqlQuery DB::prepared(const QString& key, const QString& sql) const -{ - // Note: QSqlQuery is an implicitly shared handle; safe to return by value within the same thread - auto it = m_stmtCache.find(key); - if (it != m_stmtCache.end()) { - // If SQL text changed for this key, re-prepare - if (m_stmtSql.value(key) == sql) { - return it.value(); - } - m_stmtCache.erase(it); - } - QSqlQuery q(m_db); - if (!q.prepare(sql)) { - qWarning() << "prepare() failed:" << sql << q.lastError(); - return q; // returns invalid; caller should handle - } - m_stmtSql.insert(key, sql); - m_stmtCache.insert(key, q); - return q; -} - bool DB::hasColumn(const QString& table, const QString& column) const { static const QSet validTables = { QStringLiteral("virtual_folders"), @@ -623,7 +602,7 @@ bool DB::setAssetsRating(const QList& assetIds, int rating){ QSqlQuery q(m_db); q.prepare(sql); - if (rating < 0) q.addBindValue(QVariant(QVariant::Int)); else q.addBindValue(rating); + if (rating < 0) q.addBindValue(QVariant(QMetaType::fromType())); else q.addBindValue(rating); for (int id : assetIds) q.addBindValue(id); bool ok = q.exec(); @@ -788,7 +767,8 @@ QHash DB::tagsForAssets(const QList& assetIds) const { const QString inList = marks.join(','); const QString sql = QString("SELECT at.asset_id, t.name FROM asset_tags at JOIN tags t ON t.id=at.tag_id WHERE at.asset_id IN (%1) ORDER BY at.asset_id").arg(inList); - QSqlQuery q = prepared(QStringLiteral("tagsForAssets_%1").arg(assetIds.size()), sql); + QSqlQuery q(m_db); + q.prepare(sql); for (int id : assetIds) q.addBindValue(id); if (q.exec()) { while (q.next()) { @@ -804,7 +784,8 @@ QHash DB::tagsForAssets(const QList& assetIds) const { int DB::getAssetIdByPath(const QString& filePath) const { QFileInfo fi(filePath); - QSqlQuery q = prepared(QStringLiteral("getAssetIdByPath"), QStringLiteral("SELECT id FROM assets WHERE file_path=?")); + QSqlQuery q(m_db); + q.prepare(QStringLiteral("SELECT id FROM assets WHERE file_path=?")); q.addBindValue(fi.absoluteFilePath()); if (q.exec() && q.next()) { bool ok=false; int id=q.value(0).toInt(&ok); if (ok) return id; } return 0; @@ -813,7 +794,8 @@ int DB::getAssetIdByPath(const QString& filePath) const QVector DB::listAssetVersions(int assetId) const { QVector rows; - QSqlQuery q = prepared(QStringLiteral("listAssetVersions"), QStringLiteral("SELECT id, asset_id, version_number, version_name, file_path, file_size, checksum, created_at, COALESCE(notes,'') FROM asset_versions WHERE asset_id=? ORDER BY version_number ASC")); + QSqlQuery q(m_db); + q.prepare(QStringLiteral("SELECT id, asset_id, version_number, version_name, file_path, file_size, checksum, created_at, COALESCE(notes,'') FROM asset_versions WHERE asset_id=? ORDER BY version_number ASC")); q.addBindValue(assetId); if (q.exec()) { while (q.next()) { diff --git a/native/qt6/src/db.h b/native/qt6/src/db.h index 0f520a3b..a3ef4e8e 100644 --- a/native/qt6/src/db.h +++ b/native/qt6/src/db.h @@ -107,9 +107,6 @@ class DB : public QObject, public IAssetDatabase { bool exec(const QString& sql); bool hasColumn(const QString& table, const QString& column) const; - // Prepared statement cache - QSqlQuery prepared(const QString& key, const QString& sql) const; - // Schema versioning helpers (SQLite PRAGMA user_version) int schemaUserVersion() const; bool setSchemaUserVersion(int v); @@ -139,8 +136,4 @@ private slots: int m_rootId = 0; QString m_dataDir; // directory that holds the DB; used for version storage - // Simple prepared statement cache keyed by a stable key name - mutable QHash m_stmtCache; - mutable QHash m_stmtSql; // to detect SQL changes per key }; - diff --git a/native/qt6/src/drag_utils.cpp b/native/qt6/src/drag_utils.cpp index 41b346f2..7c788a15 100644 --- a/native/qt6/src/drag_utils.cpp +++ b/native/qt6/src/drag_utils.cpp @@ -3,11 +3,18 @@ #include #include #include +#include #include #include #include #include #include +#include +#ifdef Q_OS_LINUX +#include +#include +#include +#endif #ifdef _WIN32 #include #include @@ -30,12 +37,8 @@ bool DragUtils::startFileDrag(const QStringList &paths) { return VirtualDrag::startRealPathsDrag(v); #else // Fallback to Qt cross-platform drag (non-Windows) - QWindow *win = QGuiApplication::focusWindow(); - if (!win) win = QGuiApplication::activeWindow(); - QObject *dragParent = win ? static_cast(win) : static_cast(QGuiApplication::instance()); - - auto *drag = new QDrag(dragParent); - auto *mime = new QMimeData(drag); // Set drag as parent for ownership + auto *drag = new QDrag(QApplication::instance()); + auto *mime = new QMimeData(); QList urls; urls.reserve(paths.size()); for (const auto &p : paths) urls << QUrl::fromLocalFile(p); mime->setUrls(urls); @@ -68,7 +71,9 @@ bool DragUtils::startVirtualDragSampleMulti() { } bool DragUtils::startVirtualDragSampleFallbackCFHDrop() { - QTemporaryDir tmp; + const QString tempRoot = QCoreApplication::applicationDirPath() + QStringLiteral("/data/tmp"); + QDir().mkpath(tempRoot); + QTemporaryDir tmp(tempRoot + QStringLiteral("/drag-XXXXXX")); if (!tmp.isValid()) return false; const QString path = tmp.filePath("Virtual-From-App.txt"); QFile f(path); @@ -88,10 +93,33 @@ bool DragUtils::showInExplorer(const QString &path) { HRESULT hr = SHOpenFolderAndSelectItems(pidl, 0, nullptr, 0); ILFree(pidl); return SUCCEEDED(hr); +#elif defined(Q_OS_LINUX) + const QFileInfo fi(path); + const QString targetPath = fi.exists() ? fi.absoluteFilePath() : path; + const QUrl targetUrl = QUrl::fromLocalFile(targetPath); + + QDBusInterface fileManager( + QStringLiteral("org.freedesktop.FileManager1"), + QStringLiteral("/org/freedesktop/FileManager1"), + QStringLiteral("org.freedesktop.FileManager1"), + QDBusConnection::sessionBus()); + + if (fileManager.isValid()) { + const QStringList uris{targetUrl.toString()}; + const QDBusReply reply = fileManager.call( + QStringLiteral("ShowItems"), + uris, + QString()); + if (reply.isValid()) { + return true; + } + qWarning() << "[DragUtils] FileManager1 ShowItems failed for" << path << ':' << reply.error().message(); + } + + const QString fallbackPath = fi.isDir() ? fi.absoluteFilePath() : fi.absolutePath(); + return QDesktopServices::openUrl(QUrl::fromLocalFile(fallbackPath)); #else QFileInfo fi(path); return QDesktopServices::openUrl(QUrl::fromLocalFile(fi.absolutePath())); #endif } - - diff --git a/native/qt6/src/everything_search.cpp b/native/qt6/src/everything_search.cpp index 8f745d38..415b33e3 100644 --- a/native/qt6/src/everything_search.cpp +++ b/native/qt6/src/everything_search.cpp @@ -1,11 +1,14 @@ #include "everything_search.h" -#include "db.h" #include #include #include #include +#include +#ifdef _WIN32 #include +#endif +#ifdef _WIN32 // Everything SDK function pointer typedefs typedef void (__stdcall *Everything_SetSearchW_t)(LPCWSTR lpString); typedef void (__stdcall *Everything_SetMatchCase_t)(BOOL bEnable); @@ -25,6 +28,7 @@ typedef DWORD (__stdcall *Everything_GetMajorVersion_t)(); typedef DWORD (__stdcall *Everything_GetMinorVersion_t)(); typedef DWORD (__stdcall *Everything_GetRevision_t)(); typedef BOOL (__stdcall *Everything_IsDBLoaded_t)(); +#endif EverythingSearch& EverythingSearch::instance() { static EverythingSearch instance; @@ -60,6 +64,11 @@ EverythingSearch::~EverythingSearch() { } bool EverythingSearch::initialize() { +#ifndef _WIN32 + qInfo() << "[EverythingSearch] Not available on this platform"; + m_available = false; + return false; +#else if (m_available) { return true; } @@ -88,9 +97,13 @@ bool EverythingSearch::initialize() { m_available = true; qInfo() << "[EverythingSearch] Initialized successfully - Version:" << getVersion(); return true; +#endif } bool EverythingSearch::loadDLL() { +#ifndef _WIN32 + return false; +#else // Get application directory QString appDir = QCoreApplication::applicationDirPath(); @@ -124,6 +137,7 @@ bool EverythingSearch::loadDLL() { qWarning() << "[EverythingSearch] Failed to load Everything DLL from any location"; return false; +#endif } void EverythingSearch::unloadDLL() { @@ -136,6 +150,9 @@ void EverythingSearch::unloadDLL() { } bool EverythingSearch::loadFunctions() { +#ifndef _WIN32 + return false; +#else if (!m_library) return false; // Load all required function pointers @@ -165,15 +182,23 @@ bool EverythingSearch::loadFunctions() { } return true; +#endif } bool EverythingSearch::isEverythingRunning() const { +#ifndef _WIN32 + return false; +#else if (!m_isDBLoaded) return false; auto func = reinterpret_cast(m_isDBLoaded); return func() != 0; +#endif } QString EverythingSearch::getVersion() const { +#ifndef _WIN32 + return QStringLiteral("Unavailable"); +#else if (!m_getMajorVersion || !m_getMinorVersion || !m_getRevision) { return "Unknown"; } @@ -187,10 +212,18 @@ QString EverythingSearch::getVersion() const { DWORD revision = getRev(); return QString("%1.%2.%3").arg(major).arg(minor).arg(revision); +#endif } QVector EverythingSearch::search(const QString& query, int maxResults) { QVector results; + +#ifndef _WIN32 + Q_UNUSED(query); + Q_UNUSED(maxResults); + qInfo() << "[EverythingSearch] Search is unavailable on this platform"; + return results; +#else if (!m_available) { qWarning() << "[EverythingSearch] Not initialized"; @@ -282,6 +315,7 @@ QVector EverythingSearch::search(const QString& query, int max } return results; +#endif } QVector EverythingSearch::searchWithFilter(const QString& query, const QString& fileTypes, int maxResults) { @@ -298,4 +332,3 @@ QVector EverythingSearch::searchWithFilter(const QString& quer return search(fullQuery, maxResults); } - diff --git a/native/qt6/src/file_manager_pane.cpp b/native/qt6/src/file_manager_pane.cpp index a8e3974d..337c22cf 100644 --- a/native/qt6/src/file_manager_pane.cpp +++ b/native/qt6/src/file_manager_pane.cpp @@ -12,17 +12,26 @@ #include #include +#include +#include +#include +#include +#include #include #include #include #include #include +#include #include #include #include #include +#include #include +#include + #if defined(HAVE_QT_PDF) #include #endif @@ -422,14 +431,8 @@ void FileManagerPane::setupPreviewPanel() pv->addLayout(alphaRow); // Video widget (tlRender viewport) - m_videoWidget = new TLRenderViewport(m_previewPanel); - m_videoWidget->setMinimumHeight(0); // Allow free resizing - m_videoWidget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); - m_videoWidget->hide(); - // tlRender player m_tlrenderPlayer = new TLRenderPlayer(m_previewPanel); - m_videoWidget->setPlayer(m_tlrenderPlayer); // Media controls QHBoxLayout *mc = new QHBoxLayout(); @@ -541,12 +544,11 @@ void FileManagerPane::setupPreviewPanel() }); // Preview content - QWidget *previewContent = new QWidget(m_previewPanel); - QVBoxLayout *pc = new QVBoxLayout(previewContent); + m_previewContent = new QWidget(m_previewPanel); + QVBoxLayout *pc = new QVBoxLayout(m_previewContent); pc->setContentsMargins(0, 0, 0, 0); pc->setSpacing(4); pc->addWidget(m_imageView, 1); - pc->addWidget(m_videoWidget, 1); pc->addWidget(m_textView, 1); pc->addWidget(m_csvView, 1); #if defined(HAVE_QT_PDF_WIDGETS) @@ -554,7 +556,7 @@ void FileManagerPane::setupPreviewPanel() #endif pc->addWidget(m_svgView, 1); - pv->addWidget(previewContent); + pv->addWidget(m_previewContent); pv->addLayout(mc); pv->addLayout(docc); @@ -721,7 +723,7 @@ void FileManagerPane::refresh() } // Force a model refresh by flipping the root path. - QString tempPath = QDir::tempPath(); + QString tempPath = QCoreApplication::applicationDirPath(); m_dirModel->setRootPath(tempPath); m_dirModel->setRootPath(path); @@ -932,7 +934,7 @@ void FileManagerPane::pasteFromClipboard() QString destDir = currentPath(); if (destDir.isEmpty()) return; - emit filesDropped(m_clipboardPaths, destDir); + emit filesDropped(m_clipboardPaths, destDir, m_clipboardCutMode); // Clear clipboard if it was a cut operation if (m_clipboardCutMode) { @@ -1032,8 +1034,9 @@ void FileManagerPane::updatePreviewForIndex(const QModelIndex &idx) } else if (videoExts.contains(suffix)) { // Video preview if (m_tlrenderPlayer) { + ensureVideoPreview(); m_tlrenderPlayer->loadMedia(filePath); - m_videoWidget->show(); + if (m_videoWidget) m_videoWidget->show(); m_playPauseBtn->show(); m_positionSlider->show(); m_timeLabel->show(); @@ -1126,6 +1129,25 @@ void FileManagerPane::clearPreview() m_infoPermissions->clear(); } +void FileManagerPane::ensureVideoPreview() +{ + if (m_videoWidget || !m_previewContent) { + return; + } + + auto *layout = qobject_cast(m_previewContent->layout()); + if (!layout) { + return; + } + + m_videoWidget = new TLRenderViewport(m_previewPanel); + m_videoWidget->setMinimumHeight(0); + m_videoWidget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); + m_videoWidget->hide(); + m_videoWidget->setPlayer(m_tlrenderPlayer); + layout->insertWidget(1, m_videoWidget, 1); +} + void FileManagerPane::saveState(QSettings &settings, const QString &prefix) { settings.setValue(prefix + "/ViewMode", m_isGridMode); @@ -1193,6 +1215,104 @@ bool FileManagerPane::eventFilter(QObject *watched, QEvent *event) if (event->type() == QEvent::FocusIn || event->type() == QEvent::MouseButtonPress) { setActive(true); } + + const bool viewViewport = (m_gridView && watched == m_gridView->viewport()) || + (m_listView && watched == m_listView->viewport()); + if (viewViewport) { + auto destinationForEvent = [this, watched](const QPoint &pos) { + QAbstractItemView *view = (m_gridView && watched == m_gridView->viewport()) + ? static_cast(m_gridView) + : static_cast(m_listView); + QModelIndex idx = view ? view->indexAt(pos) : QModelIndex(); + QModelIndex srcIdx = idx; + if (idx.isValid() && m_proxyModel && idx.model() == m_proxyModel) { + srcIdx = m_proxyModel->mapToSource(idx); + } + + if (idx.isValid() && m_dirModel && m_dirModel->isDir(srcIdx)) { + return m_dirModel->filePath(srcIdx); + } + return currentPath(); + }; + + auto decodeDroppedSources = [](const QMimeData *mimeData) { + QStringList sources; + if (!mimeData) return sources; + if (mimeData->hasFormat("application/x-kasset-sequence-urls")) { + QByteArray enc = mimeData->data("application/x-kasset-sequence-urls"); + QDataStream ds(&enc, QIODevice::ReadOnly); + ds >> sources; + } else if (mimeData->hasUrls()) { + for (const QUrl &url : mimeData->urls()) { + if (url.isLocalFile()) sources << url.toLocalFile(); + } + } + sources.removeDuplicates(); + return sources; + }; + + auto sameFolderOnly = [](const QStringList &sources, const QString &destDir) { + if (sources.isEmpty() || destDir.isEmpty()) return false; + const QString normDest = QDir(QDir::cleanPath(destDir)).absolutePath().toLower(); + return std::all_of(sources.cbegin(), sources.cend(), [&](const QString &source) { + QString parent = QFileInfo(source).absoluteDir().absolutePath(); + parent = QDir::cleanPath(parent).toLower(); + return parent == normDest; + }); + }; + + if (event->type() == QEvent::DragEnter) { + auto *dragEvent = static_cast(event); + if (dragEvent->mimeData()->hasUrls() || dragEvent->mimeData()->hasFormat("application/x-kasset-sequence-urls")) { + const QString destDir = destinationForEvent(dragEvent->position().toPoint()); + const QStringList sources = decodeDroppedSources(dragEvent->mimeData()); + if (sameFolderOnly(sources, destDir)) { + dragEvent->setDropAction(Qt::IgnoreAction); + dragEvent->accept(); + return true; + } + const bool moveRequested = dragEvent->modifiers().testFlag(Qt::ShiftModifier); + dragEvent->setDropAction(moveRequested ? Qt::MoveAction : Qt::CopyAction); + dragEvent->accept(); + return true; + } + } else if (event->type() == QEvent::DragMove) { + auto *dragEvent = static_cast(event); + if (dragEvent->mimeData()->hasUrls() || dragEvent->mimeData()->hasFormat("application/x-kasset-sequence-urls")) { + const QString destDir = destinationForEvent(dragEvent->position().toPoint()); + const QStringList sources = decodeDroppedSources(dragEvent->mimeData()); + if (sameFolderOnly(sources, destDir)) { + dragEvent->setDropAction(Qt::IgnoreAction); + dragEvent->accept(); + return true; + } + const bool moveRequested = dragEvent->modifiers().testFlag(Qt::ShiftModifier); + dragEvent->setDropAction(moveRequested ? Qt::MoveAction : Qt::CopyAction); + dragEvent->accept(); + return true; + } + } else if (event->type() == QEvent::Drop) { + auto *dropEvent = static_cast(event); + const QString destDir = destinationForEvent(dropEvent->position().toPoint()); + const QStringList sources = decodeDroppedSources(dropEvent->mimeData()); + if (destDir.isEmpty() || sources.isEmpty()) { + return false; + } + if (sameFolderOnly(sources, destDir)) { + dropEvent->setDropAction(Qt::IgnoreAction); + dropEvent->accept(); + return true; + } + const bool moveRequested = dropEvent->modifiers().testFlag(Qt::ShiftModifier) + || dropEvent->dropAction() == Qt::MoveAction + || dropEvent->proposedAction() == Qt::MoveAction; + emit filesDropped(sources, destDir, moveRequested); + dropEvent->setDropAction(moveRequested ? Qt::MoveAction : Qt::CopyAction); + dropEvent->accept(); + return true; + } + } + return QWidget::eventFilter(watched, event); } diff --git a/native/qt6/src/file_manager_pane.h b/native/qt6/src/file_manager_pane.h index 618b6a74..f541bb81 100644 --- a/native/qt6/src/file_manager_pane.h +++ b/native/qt6/src/file_manager_pane.h @@ -125,7 +125,7 @@ class FileManagerPane : public QWidget void activated(); // Emitted when pane receives focus/click void fileDoubleClicked(const QString &path); void contextMenuRequested(const QPoint &globalPos); - void filesDropped(const QStringList &paths, const QString &targetDir); // Emitted when files dropped + void filesDropped(const QStringList &paths, const QString &targetDir, bool moveRequested); // Emitted when files dropped protected: void focusInEvent(QFocusEvent *event) override; @@ -149,6 +149,7 @@ private slots: void setupConnections(); void updateNavigationButtons(); void applyActiveStyle(); + void ensureVideoPreview(); // Sequence playback helpers void loadSequenceFrame(int index); @@ -190,6 +191,7 @@ private slots: QGraphicsPixmapItem *m_imageItem = nullptr; TLRenderViewport *m_videoWidget = nullptr; TLRenderPlayer *m_tlrenderPlayer = nullptr; + QWidget *m_previewContent = nullptr; QPlainTextEdit *m_textView = nullptr; QTableView *m_csvView = nullptr; QStandardItemModel *m_csvModel = nullptr; diff --git a/native/qt6/src/file_ops.cpp b/native/qt6/src/file_ops.cpp index 544b6e6f..25b98677 100644 --- a/native/qt6/src/file_ops.cpp +++ b/native/qt6/src/file_ops.cpp @@ -12,6 +12,9 @@ #include #include #include +#include + +#include #include "file_utils.h" #include @@ -34,6 +37,341 @@ static QString typeToString(FileOpsQueue::Type t) { return ""; } +#ifndef _WIN32 +static bool samePath(const QString& a, const QString& b) +{ + return QFileInfo(a).absoluteFilePath() == QFileInfo(b).absoluteFilePath(); +} + +static QString uniqueNameInDirNonWindows(const QString& dir, const QString& baseName) +{ + QString name = baseName; + QString path = QDir(dir).filePath(name); + int i = 2; + while (FileUtils::pathExists(path)) { + const QFileInfo fi(baseName); + const QString stem = fi.completeBaseName(); + const QString ext = fi.suffix(); + if (ext.isEmpty()) name = QString("%1 (%2)").arg(stem).arg(i++); + else name = QString("%1 (%2).%3").arg(stem).arg(i++).arg(ext); + path = QDir(dir).filePath(name); + } + return path; +} + +struct FileOpProgressState +{ + qint64 completedFiles = 0; + qint64 totalFiles = 0; + qint64 completedWork = 0; + qint64 totalWork = 0; + qint64 currentWork = 0; + QString currentFile; +}; + +struct FileOpEstimate +{ + qint64 fileCount = 0; + qint64 workUnits = 0; +}; + +static FileOpEstimate estimatePath(const QString& path) +{ + FileOpEstimate estimate; + QFileInfo rootInfo(path); + if (!rootInfo.exists()) { + return estimate; + } + + if (rootInfo.isFile()) { + estimate.fileCount = 1; + estimate.workUnits = qMax(1, rootInfo.size()); + return estimate; + } + + QStack pending; + pending.push(rootInfo.absoluteFilePath()); + while (!pending.isEmpty()) { + const QString currentPath = pending.pop(); + const QFileInfo currentInfo(currentPath); + if (currentInfo.isDir()) { + estimate.workUnits += 1; + const QFileInfoList entries = QDir(currentPath).entryInfoList(QDir::NoDotAndDotDot | QDir::AllEntries); + for (const QFileInfo& entry : entries) { + pending.push(entry.absoluteFilePath()); + } + } else { + estimate.fileCount += 1; + estimate.workUnits += qMax(1, currentInfo.size()); + } + } + + if (estimate.fileCount == 0) { + estimate.fileCount = 1; + } + return estimate; +} + +static qint64 estimatePathWorkUnits(const QString& path) +{ + return estimatePath(path).workUnits; +} + +static qint64 estimateBatchWorkUnits(const QStringList& paths) +{ + qint64 total = 0; + for (const QString& path : paths) { + total += estimatePathWorkUnits(path); + } + return qMax(1, total); +} + +static qint64 estimateBatchFileCount(const QStringList& paths) +{ + qint64 total = 0; + for (const QString& path : paths) { + total += estimatePath(path).fileCount; + } + return qMax(1, total); +} + +static bool removeRecursivelyNonWindowsWithProgress(const QString& path, + std::atomic_bool& cancel, + FileOpProgressState* progress, + const std::function& reportProgress, + QString* errorOut) +{ + if (!FileUtils::pathExists(path)) return true; + + const QFileInfo fi(path); + if (cancel.load()) return false; + + if (fi.isDir()) { + const QFileInfoList entries = QDir(path).entryInfoList(QDir::NoDotAndDotDot | QDir::AllEntries); + for (const QFileInfo& entry : entries) { + if (!removeRecursivelyNonWindowsWithProgress(entry.absoluteFilePath(), cancel, progress, reportProgress, errorOut)) { + return false; + } + } + if (!QDir().rmdir(path)) { + if (errorOut) *errorOut = QObject::tr("Failed to permanently delete: %1").arg(path); + return false; + } + if (progress) { + progress->currentFile = path; + progress->completedWork += 1; + progress->currentWork = progress->completedWork; + reportProgress(*progress); + } + return true; + } + + const qint64 fileWork = qMax(1, fi.size()); + if (!QFile::remove(path)) { + if (errorOut) *errorOut = QObject::tr("Failed to permanently delete: %1").arg(path); + return false; + } + if (progress) { + progress->currentFile = path; + progress->completedFiles += 1; + progress->completedWork += fileWork; + progress->currentWork = progress->completedWork; + reportProgress(*progress); + } + return true; +} + +static bool copyFileWithProgressNonWindows(const QString& src, + const QString& dst, + std::atomic_bool& cancel, + FileOpProgressState* progress, + const std::function& reportProgress, + QString* errorOut) +{ + QFile in(src); + QFile out(dst); + if (!in.open(QIODevice::ReadOnly)) { + if (errorOut) *errorOut = QObject::tr("Failed to open %1").arg(src); + return false; + } + QDir().mkpath(QFileInfo(dst).absolutePath()); + if (!out.open(QIODevice::WriteOnly)) { + if (errorOut) *errorOut = QObject::tr("Failed to write %1").arg(dst); + return false; + } + const qint64 totalBytes = qMax(1, in.size()); + qint64 copiedBytes = 0; + const qint64 baseWork = progress ? progress->completedWork : 0; + QByteArray buf; + buf.resize(4 * 1024 * 1024); + while (!in.atEnd()) { + if (cancel.load()) { + out.close(); + out.remove(); + return false; + } + const qint64 r = in.read(buf.data(), buf.size()); + if (r <= 0) break; + const qint64 w = out.write(buf.constData(), r); + if (w != r) { + if (errorOut) *errorOut = QObject::tr("Write error %1").arg(dst); + out.close(); + return false; + } + copiedBytes += w; + if (progress) { + progress->currentFile = src; + progress->currentWork = baseWork + copiedBytes; + reportProgress(*progress); + } + } + out.flush(); + out.close(); + in.close(); + if (progress) { + progress->completedFiles += 1; + progress->completedWork += totalBytes; + progress->currentWork = progress->completedWork; + progress->currentFile = src; + reportProgress(*progress); + } + return true; +} + +static bool copyRecursivelyNonWindows(const QString& src, + const QString& dst, + std::atomic_bool& cancel, + FileOpProgressState* progress, + const std::function& reportProgress, + QString* errorOut) +{ + const QFileInfo sourceInfo(src); + if (sourceInfo.isDir()) { + QDir dstDir(dst); + if (!dstDir.exists() && !QDir().mkpath(dst)) { + if (errorOut) *errorOut = QObject::tr("Failed to create directory %1").arg(dst); + return false; + } + if (progress) { + progress->currentFile = src; + progress->completedWork += 1; + progress->currentWork = progress->completedWork; + reportProgress(*progress); + } + const QFileInfoList entries = QDir(src).entryInfoList(QDir::NoDotAndDotDot | QDir::AllEntries); + for (const QFileInfo& entry : entries) { + if (cancel.load()) return false; + const QString target = dstDir.filePath(entry.fileName()); + if (!copyRecursivelyNonWindows(entry.absoluteFilePath(), target, cancel, progress, reportProgress, errorOut)) { + return false; + } + } + return true; + } + return copyFileWithProgressNonWindows(src, dst, cancel, progress, reportProgress, errorOut); +} + +static bool copyEntryToDestination(const QString& src, + const QString& destinationDir, + std::atomic_bool& cancel, + FileOpProgressState* progress, + const std::function& reportProgress, + QString* errorOut) +{ + const QFileInfo sourceInfo(src); + if (!sourceInfo.exists()) { + if (errorOut) *errorOut = QObject::tr("Source does not exist: %1").arg(src); + return false; + } + + const QString targetPath = uniqueNameInDirNonWindows(destinationDir, sourceInfo.fileName()); + if (sourceInfo.isDir()) { + return copyRecursivelyNonWindows(src, targetPath, cancel, progress, reportProgress, errorOut); + } + return copyFileWithProgressNonWindows(src, targetPath, cancel, progress, reportProgress, errorOut); +} + +static bool moveEntryToDestination(const QString& src, + const QString& destinationDir, + std::atomic_bool& cancel, + FileOpProgressState* progress, + const std::function& reportProgress, + QString* errorOut) +{ + const QFileInfo sourceInfo(src); + if (!sourceInfo.exists()) { + if (errorOut) *errorOut = QObject::tr("Source does not exist: %1").arg(src); + return false; + } + + QString targetPath = QDir(destinationDir).filePath(sourceInfo.fileName()); + if (samePath(src, targetPath)) { + return true; + } + if (FileUtils::pathExists(targetPath)) { + targetPath = uniqueNameInDirNonWindows(destinationDir, sourceInfo.fileName()); + } + + if (QDir().rename(src, targetPath)) { + if (progress) { + progress->completedFiles += estimatePath(src).fileCount; + progress->completedWork += estimatePathWorkUnits(src); + progress->currentWork = progress->completedWork; + progress->currentFile = src; + reportProgress(*progress); + } + return true; + } + + if (!copyEntryToDestination(src, destinationDir, cancel, progress, reportProgress, errorOut)) { + return false; + } + + if (!removeRecursivelyNonWindowsWithProgress(src, cancel, nullptr, [](const FileOpProgressState&) {}, errorOut)) { + if (errorOut && errorOut->isEmpty()) { + *errorOut = QObject::tr("Moved copy created, but failed to remove original: %1").arg(src); + } + return false; + } + return true; +} + +static bool deleteEntry(const QString& path, + bool permanent, + std::atomic_bool& cancel, + FileOpProgressState* progress, + const std::function& reportProgress, + QString* errorOut) +{ + if (!FileUtils::pathExists(path)) { + return true; + } + if (cancel.load()) { + return false; + } + + if (!permanent) { + QString pathInTrash; + if (QFile::moveToTrash(path, &pathInTrash)) { + if (progress) { + progress->currentFile = path; + progress->completedFiles += estimatePath(path).fileCount; + progress->completedWork += estimatePathWorkUnits(path); + progress->currentWork = progress->completedWork; + reportProgress(*progress); + } + return true; + } + if (errorOut) { + *errorOut = QObject::tr("Failed to move to trash: %1").arg(path); + } + return false; + } + + return removeRecursivelyNonWindowsWithProgress(path, cancel, progress, reportProgress, errorOut); +} +#endif + FileOpsQueue& FileOpsQueue::instance() { static FileOpsQueue inst; @@ -132,6 +470,7 @@ void FileOpsQueue::startNext() Item &item = m_queue[idx]; item.status = "In Progress"; item.completedFiles = 0; + item.completedWork = 0; m_cancel.store(false); m_running = true; @@ -288,7 +627,64 @@ void FileOpsQueue::startNext() << "success=" << success << "aborted=" << aborted << "code=" << codeStr << (opError.isEmpty() ? QString() : QString("error=%1").arg(opError)); #else - opError = QStringLiteral("OS-level file operations not supported on this platform"); + FileOpProgressState progress; + progress.totalFiles = estimateBatchFileCount(sources); + progress.totalWork = estimateBatchWorkUnits(sources); + progress.currentWork = 0; + auto markProgress = [this, itemId](const FileOpProgressState& progressState) { + { + QMutexLocker lk(&m_mutex); + for (Item &queued : m_queue) { + if (queued.id == itemId) { + queued.completedFiles = progressState.completedFiles; + queued.totalFiles = progressState.totalFiles; + queued.completedWork = progressState.currentWork; + queued.totalWork = progressState.totalWork; + queued.currentFile = progressState.currentFile; + break; + } + } + } + emit progressChanged(progressState.currentWork, progressState.totalWork, progressState.currentFile); + emit queueChanged(); + }; + markProgress(progress); + + success = true; + for (const QString& source : sources) { + if (m_cancel.load()) { + aborted = true; + success = false; + break; + } + + QString localError; + bool stepOk = false; + if (type == Type::Copy) { + stepOk = copyEntryToDestination(source, dest, m_cancel, &progress, markProgress, &localError); + } else if (type == Type::Move) { + stepOk = moveEntryToDestination(source, dest, m_cancel, &progress, markProgress, &localError); + } else { + stepOk = deleteEntry(source, permanent, m_cancel, &progress, markProgress, &localError); + } + + if (!stepOk) { + if (m_cancel.load()) { + aborted = true; + } + success = false; + opError = localError; + break; + } + + progress.currentFile = source; + progress.currentWork = progress.completedWork; + markProgress(progress); + } + + if (!success && opError.isEmpty() && aborted) { + opError = QStringLiteral("Operation cancelled"); + } #endif emit itemFinished(itemId, success, opError); @@ -387,4 +783,3 @@ bool FileOpsQueue::removeRecursively(const QString& path, std::atomic_bool& canc return QFile::remove(path); } } - diff --git a/native/qt6/src/file_ops.h b/native/qt6/src/file_ops.h index 784278e7..4eb6f80d 100644 --- a/native/qt6/src/file_ops.h +++ b/native/qt6/src/file_ops.h @@ -16,8 +16,10 @@ class FileOpsQueue : public QObject { QStringList sources; QString destination; // For Copy/Move QString status; // Queued, In Progress, Completed, Cancelled, Failed - int completedFiles = 0; - int totalFiles = 0; + qint64 completedFiles = 0; + qint64 totalFiles = 0; + qint64 completedWork = 0; + qint64 totalWork = 0; QString currentFile; QString error; bool permanentDelete = false; // For Delete operations: true = permanent, false = Recycle Bin @@ -39,7 +41,7 @@ class FileOpsQueue : public QObject { signals: void queueChanged(); - void progressChanged(int current, int total, const QString& currentFile); + void progressChanged(qint64 current, qint64 total, const QString& currentFile); void currentItemChanged(const FileOpsQueue::Item& item); void itemFinished(int id, bool success, const QString& error); @@ -69,4 +71,3 @@ public slots: QFuture m_future; QFutureWatcher m_watcher; }; - diff --git a/native/qt6/src/file_ops_dialog.cpp b/native/qt6/src/file_ops_dialog.cpp index f838cd1b..f1941898 100644 --- a/native/qt6/src/file_ops_dialog.cpp +++ b/native/qt6/src/file_ops_dialog.cpp @@ -64,9 +64,13 @@ void FileOpsProgressDialog::refreshList() for (const auto &it : items) { if (it.status == "Queued" || it.status == "In Progress") { anyActive = true; - QString text = QString("#%1 %2 (%3/%4) %5") + const int percent = it.totalWork > 0 + ? int((100.0 * double(it.completedWork)) / double(it.totalWork)) + : 0; + QString text = QString("#%1 %2 %3% (%4/%5 files) %6") .arg(it.id) .arg(it.type == FileOpsQueue::Type::Copy ? "Copy" : it.type == FileOpsQueue::Type::Move ? "Move" : "Delete") + .arg(percent) .arg(it.completedFiles) .arg(it.totalFiles) .arg(it.status); @@ -80,7 +84,7 @@ void FileOpsProgressDialog::refreshList() } } -void FileOpsProgressDialog::onProgress(int current, int total, const QString& currentFile) +void FileOpsProgressDialog::onProgress(qint64 current, qint64 total, const QString& currentFile) { if (total <= 0) { bar->setRange(0,0); return; } bar->setRange(0, 1000); @@ -94,10 +98,11 @@ void FileOpsProgressDialog::onProgress(int current, int total, const QString& cu void FileOpsProgressDialog::onCurrentChanged(const FileOpsQueue::Item& item) { + const QString target = item.destination.isEmpty() ? QStringLiteral("current location") : item.destination; label->setText(QString("%1: %2 item(s) -> %3").arg( item.type == FileOpsQueue::Type::Copy ? "Copy" : item.type == FileOpsQueue::Type::Move ? "Move" : "Delete", QString::number(item.totalFiles), - item.destination)); + target)); // Indeterminate until we get explicit progress bar->setRange(0, 0); bar->setValue(0); @@ -120,4 +125,3 @@ void FileOpsProgressDialog::onItemFinished(int, bool success, const QString& err } if (!anyActive) close(); } - diff --git a/native/qt6/src/file_ops_dialog.h b/native/qt6/src/file_ops_dialog.h index 9c75e58b..058ad408 100644 --- a/native/qt6/src/file_ops_dialog.h +++ b/native/qt6/src/file_ops_dialog.h @@ -15,7 +15,7 @@ class FileOpsProgressDialog : public QDialog { private slots: void refreshList(); - void onProgress(int current, int total, const QString& currentFile); + void onProgress(qint64 current, qint64 total, const QString& currentFile); void onCurrentChanged(const FileOpsQueue::Item& item); void onItemFinished(int id, bool success, const QString& error); @@ -28,4 +28,3 @@ private slots: QPushButton* closeBtn; QTimer refreshTimer; }; - diff --git a/native/qt6/src/fm_views_ex.cpp b/native/qt6/src/fm_views_ex.cpp index 8d597ed8..fb736607 100644 --- a/native/qt6/src/fm_views_ex.cpp +++ b/native/qt6/src/fm_views_ex.cpp @@ -68,10 +68,12 @@ void FmGridViewEx::startDrag(Qt::DropActions supported) QSet folderSet; for (const QUrl &u : repUrls) if (u.isLocalFile()) folderSet.insert(QFileInfo(u.toLocalFile()).absoluteFilePath()); QVector folderVec = QVector(folderSet.cbegin(), folderSet.cend()); +#ifdef _WIN32 if (!frameVec.isEmpty() || !folderVec.isEmpty()) { VirtualDrag::startAdaptivePathsDrag(frameVec, folderVec); + return; } - return; +#endif QMimeData* mime = new QMimeData(); if (!dccTextLines.isEmpty()) { mime->setText(dccTextLines.join("\r\n")); @@ -153,8 +155,32 @@ void FmListViewEx::startDrag(Qt::DropActions supported) QSet folderSet; for (const QUrl &u : repUrls) if (u.isLocalFile()) folderSet.insert(QFileInfo(u.toLocalFile()).absoluteFilePath()); QVector folderVec = QVector(folderSet.cbegin(), folderSet.cend()); +#ifdef _WIN32 if (!frameVec.isEmpty() || !folderVec.isEmpty()) { VirtualDrag::startAdaptivePathsDrag(frameVec, folderVec); + return; } - return; +#endif + + QMimeData* mime = new QMimeData(); + if (!dccTextLines.isEmpty()) { + mime->setText(dccTextLines.join("\r\n")); + QByteArray uriData = dccUriLines.join("\r\n").toUtf8(); + mime->setData("text/uri-list", uriData); + } + if (!repUrls.isEmpty()) mime->setUrls(repUrls); + if (!fullPaths.isEmpty()) { + QByteArray enc; QDataStream ds(&enc, QIODevice::WriteOnly); ds << fullPaths; + mime->setData("application/x-kasset-sequence-urls", enc); + } + QDrag* drag = new QDrag(this); + drag->setMimeData(mime); + const int itemCount = fullPaths.size(); + QPixmap pm(60, 60); pm.fill(Qt::transparent); + QPainter pr(&pm); pr.setRenderHint(QPainter::Antialiasing); + pr.setBrush(QColor(88,166,255,200)); pr.setPen(Qt::NoPen); pr.drawRoundedRect(0,0,60,60,8,8); + pr.setPen(Qt::white); QFont f=pr.font(); f.setPixelSize(20); f.setBold(true); pr.setFont(f); + pr.drawText(QRect(0,0,60,60), Qt::AlignCenter, QString::number(itemCount)); pr.end(); + drag->setPixmap(pm); drag->setHotSpot(QPoint(30,30)); + drag->exec(supported, Qt::CopyAction); } diff --git a/native/qt6/src/grid_scrub.cpp b/native/qt6/src/grid_scrub.cpp index 341134b6..7c6c02d0 100644 --- a/native/qt6/src/grid_scrub.cpp +++ b/native/qt6/src/grid_scrub.cpp @@ -422,7 +422,9 @@ bool GridScrubController::handleCtrlScrub(const QPoint &pos) } const int clampedX = std::clamp(pos.x(), thumbRect.left(), thumbRect.right()); const int clampedY = std::clamp(pos.y(), thumbRect.top(), thumbRect.bottom()); - if (m_view && m_view->viewport() && (clampedX != pos.x() || clampedY != pos.y())) { + if (m_view && m_view->viewport() && + !PlatformSession::isWayland() && + (clampedX != pos.x() || clampedY != pos.y())) { m_warpingCursor = true; const QPoint clampedPoint(clampedX, clampedY); QCursor::setPos(m_view->viewport()->mapToGlobal(clampedPoint)); @@ -487,7 +489,7 @@ void GridScrubController::beginScrub() return; } m_scrubActive = true; - if (m_view && m_view->viewport() && !m_mouseGrabbed) { + if (m_view && m_view->viewport() && !m_mouseGrabbed && !PlatformSession::isWayland()) { m_view->viewport()->grabMouse(); m_mouseGrabbed = true; } diff --git a/native/qt6/src/grid_scrub.h b/native/qt6/src/grid_scrub.h index 81f9b2ad..ddeba200 100644 --- a/native/qt6/src/grid_scrub.h +++ b/native/qt6/src/grid_scrub.h @@ -7,8 +7,11 @@ #include #include #include +#include #include +#include "platform_session.h" + /** * @brief Minimal overlay for showing scrub progress indicator. * @@ -43,6 +46,11 @@ class GridScrubController : public QObject QObject *parent = nullptr); ~GridScrubController() override; + static bool shouldGrabMouseForSessionType(const QString &sessionType) + { + return !PlatformSession::isWayland(QString(), sessionType); + } + void setSequenceGroupingEnabled(bool enabled); bool isSequenceGroupingEnabled() const; bool canScrubFile(const QString& filePath) const; diff --git a/native/qt6/src/icon_utils.cpp b/native/qt6/src/icon_utils.cpp index 170a8c77..75879046 100644 --- a/native/qt6/src/icon_utils.cpp +++ b/native/qt6/src/icon_utils.cpp @@ -10,6 +10,8 @@ #include #include #include +#include +#include // Icon generation helpers // Creates DPI-aware icons that render crisply on High DPI displays @@ -43,26 +45,75 @@ QIcon mkIcon(const std::function& draw, const QC return QIcon(pm); } -QIcon loadPngIcon(const QString& filename, const QColor& targetColor) +QString findIconPath(const QString& filename) { - // Try multiple possible locations for the icons folder + const QString appDir = QCoreApplication::applicationDirPath(); + const QString baseName = QFileInfo(filename).fileName(); + const QString normalized = filename.startsWith(QStringLiteral("media/"), Qt::CaseInsensitive) + ? QStringLiteral("Media/") + filename.mid(6) + : filename; + const QString lowerNormalized = normalized.toLower(); + QStringList searchPaths = { - QCoreApplication::applicationDirPath() + "/icons/" + filename, - QCoreApplication::applicationDirPath() + "/../icons/" + filename, - QCoreApplication::applicationDirPath() + "/../../icons/" + filename + appDir + "/Icons/" + normalized, + appDir + "/../Icons/" + normalized, + appDir + "/../../Icons/" + normalized, + appDir + "/../../../Icons/" + normalized, + appDir + "/icons/" + lowerNormalized, + appDir + "/../icons/" + lowerNormalized, + appDir + "/../../icons/" + lowerNormalized, + appDir + "/../../../icons/" + lowerNormalized, + appDir + "/Icons/Media/" + baseName, + appDir + "/../Icons/Media/" + baseName, + appDir + "/../../Icons/Media/" + baseName, + appDir + "/../../../Icons/Media/" + baseName, + appDir + "/Icons/Annotation/" + baseName, + appDir + "/../Icons/Annotation/" + baseName, + appDir + "/../../Icons/Annotation/" + baseName, + appDir + "/../../../Icons/Annotation/" + baseName, + appDir + "/../Resources/icons/" + normalized, + appDir + "/../../Resources/icons/" + normalized, + appDir + "/../../../Resources/icons/" + normalized, + QDir::currentPath() + "/Icons/" + normalized, + QDir::currentPath() + "/Icons/Media/" + baseName, + QDir::currentPath() + "/Icons/Annotation/" + baseName, + QDir::currentPath() + "/../Icons/" + normalized, + QDir::currentPath() + "/../Icons/Media/" + baseName, + QDir::currentPath() + "/../Icons/Annotation/" + baseName, + QDir::currentPath() + "/../../Icons/" + normalized, + QDir::currentPath() + "/../../Icons/Media/" + baseName, + QDir::currentPath() + "/../../Icons/Annotation/" + baseName, + QDir::currentPath() + "/../../../Icons/" + normalized, + QDir::currentPath() + "/../../../Icons/Media/" + baseName, + QDir::currentPath() + "/../../../Icons/Annotation/" + baseName }; - QString foundPath; for (const QString& path : searchPaths) { if (QFile::exists(path)) { - foundPath = path; - break; + return path; } } + return QString(); +} + +QIcon loadRawPngIcon(const QString& filename) +{ + const QString foundPath = findIconPath(filename); + if (foundPath.isEmpty()) { + qWarning() << "Failed to find raw icon:" << filename; + return QIcon(); + } + + return QIcon(foundPath); +} + +QIcon loadPngIcon(const QString& filename, const QColor& targetColor) +{ + const QString foundPath = findIconPath(filename); + if (foundPath.isEmpty()) { - qWarning() << "Failed to find icon:" << filename << "- searched paths:" << searchPaths; - // Return a fallback empty icon + qWarning() << "Failed to find icon:" << filename; return QIcon(); } diff --git a/native/qt6/src/icon_utils.h b/native/qt6/src/icon_utils.h index d21f413b..ed9e688d 100644 --- a/native/qt6/src/icon_utils.h +++ b/native/qt6/src/icon_utils.h @@ -4,11 +4,14 @@ #include #include #include +#include #include #include // Icon generation helpers QIcon mkIcon(const std::function& draw, const QColor& color = QColor(235,235,235)); +QString findIconPath(const QString& filename); +QIcon loadRawPngIcon(const QString& filename); QIcon loadPngIcon(const QString& filename, const QColor& targetColor = QColor(255, 255, 255)); // General icons diff --git a/native/qt6/src/image_memory_limits.cpp b/native/qt6/src/image_memory_limits.cpp new file mode 100644 index 00000000..37e5416e --- /dev/null +++ b/native/qt6/src/image_memory_limits.cpp @@ -0,0 +1,86 @@ +#include "image_memory_limits.h" + +#include +#include + +#ifdef Q_OS_WIN +#include +#elif defined(Q_OS_LINUX) +#include +#elif defined(Q_OS_MAC) +#include +#endif + +namespace { +constexpr auto kImageMemoryLimitSetting = "Images/MemoryLimitMB"; + +qint64 clampImageMemoryLimitMb(qint64 value) +{ + return qBound(512LL, value, 262144LL); +} +} + +namespace ImageMemoryLimits { + +qint64 detectPhysicalMemoryMb() +{ +#ifdef Q_OS_WIN + MEMORYSTATUSEX memInfo; + memInfo.dwLength = sizeof(MEMORYSTATUSEX); + if (GlobalMemoryStatusEx(&memInfo)) { + return static_cast(memInfo.ullTotalPhys / (1024 * 1024)); + } +#elif defined(Q_OS_LINUX) + struct sysinfo info; + if (sysinfo(&info) == 0) { + const qint64 unit = info.mem_unit > 0 ? static_cast(info.mem_unit) : 1; + const qint64 totalBytes = static_cast(info.totalram) * unit; + if (totalBytes > 0) { + return totalBytes / (1024 * 1024); + } + } +#elif defined(Q_OS_MAC) + int mib[2] = {CTL_HW, HW_MEMSIZE}; + uint64_t memsize = 0; + size_t len = sizeof(memsize); + if (sysctl(mib, 2, &memsize, &len, nullptr, 0) == 0) { + return static_cast(memsize / (1024 * 1024)); + } +#endif + return 8192; +} + +qint64 defaultImageMemoryLimitMb() +{ + return detectPhysicalMemoryMb() > kHighMemoryThresholdMb ? kHighMemoryDefaultLimitMb + : kStandardDefaultLimitMb; +} + +qint64 configuredImageMemoryLimitMb() +{ + QSettings settings("AugmentCode", "KAssetManager"); + return clampImageMemoryLimitMb(settings.value(kImageMemoryLimitSetting, defaultImageMemoryLimitMb()).toLongLong()); +} + +bool isImageWithinMemoryLimit(qint64 width, qint64 height, int channels, qint64 extraMultiplier) +{ + if (width <= 0 || height <= 0 || channels <= 0 || extraMultiplier <= 0) { + return false; + } + + const qint64 bytesPerPixel = channels * static_cast(sizeof(float)); + const qint64 estimatedBytes = width * height * bytesPerPixel * extraMultiplier; + const qint64 limitBytes = configuredImageMemoryLimitMb() * 1024LL * 1024LL; + return estimatedBytes <= limitBytes; +} + +QString limitExceededMessage(const QString& context) +{ + const QString prefix = context.isEmpty() ? QStringLiteral("Image exceeds the configured memory limit") + : context; + return QStringLiteral("%1 (%2 MB). Increase Settings > Cache & Database > Image memory limit if needed.") + .arg(prefix) + .arg(configuredImageMemoryLimitMb()); +} + +} diff --git a/native/qt6/src/image_memory_limits.h b/native/qt6/src/image_memory_limits.h new file mode 100644 index 00000000..21ea16e7 --- /dev/null +++ b/native/qt6/src/image_memory_limits.h @@ -0,0 +1,18 @@ +#pragma once + +#include +#include + +namespace ImageMemoryLimits { + +constexpr qint64 kStandardDefaultLimitMb = 4096; +constexpr qint64 kHighMemoryDefaultLimitMb = 8192; +constexpr qint64 kHighMemoryThresholdMb = 64 * 1024; + +qint64 detectPhysicalMemoryMb(); +qint64 defaultImageMemoryLimitMb(); +qint64 configuredImageMemoryLimitMb(); +bool isImageWithinMemoryLimit(qint64 width, qint64 height, int channels = 4, qint64 extraMultiplier = 2); +QString limitExceededMessage(const QString& context = QString()); + +} diff --git a/native/qt6/src/image_preview_overlay.cpp b/native/qt6/src/image_preview_overlay.cpp index 2db1312e..3d953adc 100644 --- a/native/qt6/src/image_preview_overlay.cpp +++ b/native/qt6/src/image_preview_overlay.cpp @@ -1,4 +1,5 @@ #include "image_preview_overlay.h" +#include "icon_utils.h" #include #include @@ -59,8 +60,7 @@ void ImagePreviewOverlay::setupUi() topLayout->addStretch(); toggleAnnotationBtn = new QPushButton(this); - QString annotationIconPath = QCoreApplication::applicationDirPath() + "/Icons/Annotation/Annotate.png"; - toggleAnnotationBtn->setIcon(QIcon(annotationIconPath)); + toggleAnnotationBtn->setIcon(loadRawPngIcon(QStringLiteral("Annotation/Annotate.png"))); toggleAnnotationBtn->setIconSize(QSize(24, 24)); toggleAnnotationBtn->setText(" Annotate"); toggleAnnotationBtn->setFocusPolicy(Qt::NoFocus); @@ -129,7 +129,7 @@ void ImagePreviewOverlay::showImage(const QString &filePath, const QString &file QImage image; QPixmap newPixmap; if (OIIOImageLoader::isOIIOSupported(filePath)) { - image = OIIOImageLoader::loadImage(filePath, 0, 0, currentColorSpace); + image = OIIOImageLoader::loadImage(filePath, 0, 0); if (!image.isNull()) { newPixmap = QPixmap::fromImage(image); } @@ -372,10 +372,8 @@ void ImagePreviewOverlay::setupAnnotationToolbar() "QPushButton:hover { background-color: #555; }" "QPushButton:checked { background-color: #58a6ff; }"; - QString iconPath = QCoreApplication::applicationDirPath() + "/Icons/Annotation/"; - QPushButton *selectToolBtn = new QPushButton(annotationToolbar); - selectToolBtn->setIcon(QIcon(iconPath + "cursor.png")); + selectToolBtn->setIcon(loadRawPngIcon(QStringLiteral("Annotation/cursor.png"))); selectToolBtn->setIconSize(QSize(24, 24)); selectToolBtn->setCheckable(true); selectToolBtn->setFocusPolicy(Qt::NoFocus); @@ -394,7 +392,7 @@ void ImagePreviewOverlay::setupAnnotationToolbar() toolbarLayout->addWidget(selectToolBtn); penToolBtn = new QPushButton(annotationToolbar); - penToolBtn->setIcon(QIcon(iconPath + "paint.png")); + penToolBtn->setIcon(loadRawPngIcon(QStringLiteral("Annotation/paint.png"))); penToolBtn->setIconSize(QSize(24, 24)); penToolBtn->setCheckable(true); penToolBtn->setFocusPolicy(Qt::NoFocus); @@ -404,7 +402,7 @@ void ImagePreviewOverlay::setupAnnotationToolbar() toolbarLayout->addWidget(penToolBtn); textToolBtn = new QPushButton(annotationToolbar); - textToolBtn->setIcon(QIcon(iconPath + "text.png")); + textToolBtn->setIcon(loadRawPngIcon(QStringLiteral("Annotation/text.png"))); textToolBtn->setIconSize(QSize(24, 24)); textToolBtn->setCheckable(true); textToolBtn->setFocusPolicy(Qt::NoFocus); @@ -414,7 +412,7 @@ void ImagePreviewOverlay::setupAnnotationToolbar() toolbarLayout->addWidget(textToolBtn); rectangleToolBtn = new QPushButton(annotationToolbar); - rectangleToolBtn->setIcon(QIcon(iconPath + "Rectangle.png")); + rectangleToolBtn->setIcon(loadRawPngIcon(QStringLiteral("Annotation/Rectangle.png"))); rectangleToolBtn->setIconSize(QSize(24, 24)); rectangleToolBtn->setCheckable(true); rectangleToolBtn->setFocusPolicy(Qt::NoFocus); @@ -424,7 +422,7 @@ void ImagePreviewOverlay::setupAnnotationToolbar() toolbarLayout->addWidget(rectangleToolBtn); ellipseToolBtn = new QPushButton(annotationToolbar); - ellipseToolBtn->setIcon(QIcon(iconPath + "circle.png")); + ellipseToolBtn->setIcon(loadRawPngIcon(QStringLiteral("Annotation/circle.png"))); ellipseToolBtn->setIconSize(QSize(24, 24)); ellipseToolBtn->setCheckable(true); ellipseToolBtn->setFocusPolicy(Qt::NoFocus); @@ -434,7 +432,7 @@ void ImagePreviewOverlay::setupAnnotationToolbar() toolbarLayout->addWidget(ellipseToolBtn); arrowToolBtn = new QPushButton(annotationToolbar); - arrowToolBtn->setIcon(QIcon(iconPath + "arrow.png")); + arrowToolBtn->setIcon(loadRawPngIcon(QStringLiteral("Annotation/arrow.png"))); arrowToolBtn->setIconSize(QSize(24, 24)); arrowToolBtn->setCheckable(true); arrowToolBtn->setFocusPolicy(Qt::NoFocus); @@ -475,7 +473,7 @@ void ImagePreviewOverlay::setupAnnotationToolbar() toolbarLayout->addStretch(); undoBtn = new QPushButton(annotationToolbar); - undoBtn->setIcon(QIcon(iconPath + "undo.png")); + undoBtn->setIcon(loadRawPngIcon(QStringLiteral("Annotation/undo.png"))); undoBtn->setIconSize(QSize(24, 24)); undoBtn->setStyleSheet(buttonStyle); undoBtn->setFocusPolicy(Qt::NoFocus); @@ -484,7 +482,7 @@ void ImagePreviewOverlay::setupAnnotationToolbar() toolbarLayout->addWidget(undoBtn); redoBtn = new QPushButton(annotationToolbar); - redoBtn->setIcon(QIcon(iconPath + "redo.png")); + redoBtn->setIcon(loadRawPngIcon(QStringLiteral("Annotation/redo.png"))); redoBtn->setIconSize(QSize(24, 24)); redoBtn->setStyleSheet(buttonStyle); redoBtn->setFocusPolicy(Qt::NoFocus); @@ -493,7 +491,7 @@ void ImagePreviewOverlay::setupAnnotationToolbar() toolbarLayout->addWidget(redoBtn); clearAnnotationsBtn = new QPushButton(annotationToolbar); - clearAnnotationsBtn->setIcon(QIcon(iconPath + "clear.png")); + clearAnnotationsBtn->setIcon(loadRawPngIcon(QStringLiteral("Annotation/clear.png"))); clearAnnotationsBtn->setIconSize(QSize(24, 24)); clearAnnotationsBtn->setStyleSheet(buttonStyle); clearAnnotationsBtn->setFocusPolicy(Qt::NoFocus); @@ -502,7 +500,7 @@ void ImagePreviewOverlay::setupAnnotationToolbar() toolbarLayout->addWidget(clearAnnotationsBtn); saveFrameBtn = new QPushButton(annotationToolbar); - saveFrameBtn->setIcon(QIcon(iconPath + "save.png")); + saveFrameBtn->setIcon(loadRawPngIcon(QStringLiteral("Annotation/save.png"))); saveFrameBtn->setIconSize(QSize(24, 24)); saveFrameBtn->setStyleSheet(buttonStyle); saveFrameBtn->setFocusPolicy(Qt::NoFocus); diff --git a/native/qt6/src/image_preview_overlay.h b/native/qt6/src/image_preview_overlay.h index 07ace917..56100c14 100644 --- a/native/qt6/src/image_preview_overlay.h +++ b/native/qt6/src/image_preview_overlay.h @@ -87,7 +87,6 @@ private slots: double currentZoom = 1.0; bool fitMode = true; - OIIOImageLoader::ColorSpace currentColorSpace = OIIOImageLoader::ColorSpace::sRGB; }; #endif // IMAGE_PREVIEW_OVERLAY_H diff --git a/native/qt6/src/importer.cpp b/native/qt6/src/importer.cpp index 354e35a0..cf168aa4 100644 --- a/native/qt6/src/importer.cpp +++ b/native/qt6/src/importer.cpp @@ -2,6 +2,7 @@ #include "db.h" #include "i_asset_database.h" #include "log_manager.h" +#include "project_path_utils.h" #include #include #include @@ -230,7 +231,7 @@ bool Importer::importFolderContents(const QString& dirPath, int targetFolderId) // Helper to normalize paths for consistent comparison auto normalizePath = [](const QString& p) -> QString { - return QDir::cleanPath(p).toLower(); + return ProjectPathUtils::keyForPath(p); }; // Build subfolders directly under target folder (breadth-first) diff --git a/native/qt6/src/live_preview_manager.cpp b/native/qt6/src/live_preview_manager.cpp index 49b6606b..b54d4689 100644 --- a/native/qt6/src/live_preview_manager.cpp +++ b/native/qt6/src/live_preview_manager.cpp @@ -1,4 +1,5 @@ #include "live_preview_manager.h" +#include "image_memory_limits.h" #include "oiio_image_loader.h" #include "utils.h" @@ -22,17 +23,6 @@ #include -#if defined(HAVE_FFMPEG) && HAVE_FFMPEG -extern "C" { -#include -#include -#include -#include -#include -} -#endif - - namespace { constexpr int kMinCacheEntries = 64; @@ -49,20 +39,6 @@ constexpr int kSequenceMetaTtlMs = 30000; static QHash s_durationCache; static QMutex s_durationCacheMutex; -#if defined(HAVE_FFMPEG) && HAVE_FFMPEG -QString ffmpegErrorString(int err) -{ - char buf[AV_ERROR_MAX_STRING_SIZE] = {}; - av_strerror(err, buf, sizeof(buf)); - return QString::fromUtf8(buf); -} -#else -static QString ffmpegErrorString(int err) -{ - return QString::number(err); -} -#endif - bool isImageExtension(const QString& suffix) { static const QSet kImageExt = { @@ -599,6 +575,12 @@ QImage LivePreviewManager::loadImageFrame(const Request& request, QString& error #if defined(HAVE_OPENIMAGEIO) && HAVE_OPENIMAGEIO image = OIIOImageLoader::loadImage(request.filePath, request.targetSize.width(), request.targetSize.height()); if (image.isNull()) { + QImageReader sizeProbe(request.filePath); + const QSize imageSize = sizeProbe.size(); + if (!ImageMemoryLimits::isImageWithinMemoryLimit(imageSize.width(), imageSize.height())) { + error = ImageMemoryLimits::limitExceededMessage(QStringLiteral("Image exceeds the configured memory limit for live preview")); + return {}; + } qDebug() << "[LivePreview] OIIO failed to load, falling back to Qt:" << request.filePath; } #endif diff --git a/native/qt6/src/log_manager.cpp b/native/qt6/src/log_manager.cpp index 91b10999..680a70eb 100644 --- a/native/qt6/src/log_manager.cpp +++ b/native/qt6/src/log_manager.cpp @@ -1,4 +1,5 @@ #include "log_manager.h" +#include "runtime_paths.h" #include #include #include @@ -40,8 +41,7 @@ bool shouldLogQtMessage(QtMsgType type, QString* levelOut) { } // namespace LogManager::LogManager(QObject* parent) : QObject(parent) { - // Open persistent app log next to the executable - QString path = QCoreApplication::applicationDirPath() + "/app.log"; + const QString path = RuntimePaths::dataPath("app.log"); m_file.setFileName(path); if (m_file.open(QIODevice::Append | QIODevice::Text)) { m_ts.setDevice(&m_file); diff --git a/native/qt6/src/main.cpp b/native/qt6/src/main.cpp index b6cbfd6b..7fe88cc1 100644 --- a/native/qt6/src/main.cpp +++ b/native/qt6/src/main.cpp @@ -7,12 +7,16 @@ #include #include #include +#include +#include #include #include "mainwindow.h" #include "db.h" #include "log_manager.h" #include "progress_manager.h" +#include "runtime_paths.h" #include "theme_manager.h" +#include "platform_session.h" #ifdef HAVE_TLRENDER #include "media/tlrender_player.h" #endif @@ -37,6 +41,8 @@ extern "C" { int main(int argc, char *argv[]) { + setlocale(LC_NUMERIC, "C"); + // High DPI Configuration - MUST be set before QApplication is created // Qt 6 enables High DPI scaling by default, but we need to configure it properly // to prevent blurry rendering and ensure consistent UI across different DPI displays. @@ -49,14 +55,27 @@ int main(int argc, char *argv[]) // Enable OpenGL context sharing for multiple QOpenGLWidgets. QApplication::setAttribute(Qt::AA_ShareOpenGLContexts); - // Enable hardware-accelerated OpenGL rendering for smooth window resize/move - // This uses the system's native OpenGL driver for widget compositing - QApplication::setAttribute(Qt::AA_UseDesktopOpenGL); +#if defined(Q_OS_LINUX) + if (PlatformSession::isWayland() && PlatformSession::shouldForceRasterWidgetsOnWayland()) { + QApplication::setAttribute(Qt::AA_ForceRasterWidgets); + } + if (PlatformSession::isWayland() && qEnvironmentVariableIsEmpty("QT_WIDGETS_RHI")) { + // Qt's widget RHI path is the codepath emitting + // "Failed to create QRhi for QBackingStoreRhiSupport" on Fedora Wayland + // when a tlRender QOpenGLWidget preview is created on demand. + qputenv("QT_WIDGETS_RHI", QByteArrayLiteral("0")); + } +#endif -#ifdef HAVE_TLRENDER - // Initialize tlRender before QApplication to ensure the default surface format - // is set correctly for QOpenGLWidget usage. - TLRenderPlayer::initialize(); + // Use desktop OpenGL for widget-based playback surfaces. + // On Wayland we avoid forcing tlRender's global 4.1 default format, but still + // prefer the desktop GL backend so the tlRender QOpenGLWidget can create a context. +#if !defined(Q_OS_LINUX) + QApplication::setAttribute(Qt::AA_UseDesktopOpenGL); +#elif defined(Q_OS_LINUX) + if (PlatformSession::isWayland() && PlatformSession::shouldUseDesktopOpenGLOnWayland()) { + QApplication::setAttribute(Qt::AA_UseDesktopOpenGL); + } #endif // Suppress FFmpeg error messages to prevent console spam @@ -75,17 +94,15 @@ int main(int argc, char *argv[]) // Load and apply theme (palette + minimal stylesheet) before any widgets are created ThemeManager::instance().loadTheme(); - // Install centralized message handler that logs via LogManager to app.log + // Install centralized message handler that logs via LogManager. QString appDir = QCoreApplication::applicationDirPath(); qInstallMessageHandler(customMessageHandler); #ifdef Q_OS_WIN // Install a top-level SEH filter to capture crashes and write a minidump SetUnhandledExceptionFilter([](EXCEPTION_POINTERS* ep) -> LONG { - // Use persistent user data location for crash dumps - QString dataDir = QStandardPaths::writableLocation(QStandardPaths::AppDataLocation); - QDir().mkpath(dataDir); - QString dumpPath = dataDir + "/crash.dmp"; + const QString dataDir = RuntimePaths::writableDataRoot(); + const QString dumpPath = RuntimePaths::dataPath("crash.dmp"); HANDLE hFile = CreateFileW((LPCWSTR)dumpPath.utf16(), GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); if (hFile != INVALID_HANDLE_VALUE) { MINIDUMP_EXCEPTION_INFORMATION mei; @@ -119,63 +136,12 @@ int main(int argc, char *argv[]) auto& progressManager = ProgressManager::instance(); LogManager::instance().addLog("[MAIN] Before DB init"); - // Use persistent user data location for database (survives app updates) - // On Windows: C:/Users/[Username]/AppData/Roaming/KAsset/KAsset Manager Qt/ - const QString dataDir = QStandardPaths::writableLocation(QStandardPaths::AppDataLocation); - QDir().mkpath(dataDir); - const QString dbPath = dataDir + "/kasset.db"; - - // Migration: Move database from old location (appDir/data) to new location (AppData) - const QString oldDataDir = appDir + "/data"; - const QString oldDbPath = oldDataDir + "/kasset.db"; - if (!QFile::exists(dbPath) && QFile::exists(oldDbPath)) { - LogManager::instance().addLog("[MAIN] Migrating database from old location to persistent location"); - LogManager::instance().addLog("[MAIN] Old: " + oldDbPath); - LogManager::instance().addLog("[MAIN] New: " + dbPath); - - // Copy database file - if (QFile::copy(oldDbPath, dbPath)) { - LogManager::instance().addLog("[MAIN] Database migrated successfully"); - - // Migrate versions directory if it exists - const QString oldVersionsDir = oldDataDir + "/versions"; - const QString newVersionsDir = dataDir + "/versions"; - if (QDir(oldVersionsDir).exists()) { - LogManager::instance().addLog("[MAIN] Migrating versions directory"); - QDir().mkpath(newVersionsDir); - - // Copy all version subdirectories - QDir oldDir(oldVersionsDir); - QStringList assetDirs = oldDir.entryList(QDir::Dirs | QDir::NoDotAndDotDot); - for (const QString& assetDir : assetDirs) { - QString srcPath = oldVersionsDir + "/" + assetDir; - QString dstPath = newVersionsDir + "/" + assetDir; - QDir().mkpath(dstPath); - - QDir srcDir(srcPath); - QStringList files = srcDir.entryList(QDir::Files); - for (const QString& file : files) { - QFile::copy(srcPath + "/" + file, dstPath + "/" + file); - } - } - LogManager::instance().addLog("[MAIN] Versions migrated successfully"); - } - - // Optionally remove old database (keep for safety - user can delete manually) - // QFile::remove(oldDbPath); - LogManager::instance().addLog("[MAIN] Old database preserved at: " + oldDbPath); - } else { - LogManager::instance().addLog("[MAIN] WARNING: Failed to migrate database, will use old location"); - // Fall back to old location if migration fails - const QString fallbackDbPath = oldDbPath; - if (!DB::instance().init(fallbackDbPath)) { - qCritical() << "Failed to initialize database at" << fallbackDbPath; - return -1; - } - LogManager::instance().addLog("[MAIN] DB init ok (using old location)"); - goto skip_new_init; - } - } + const QString dataDir = RuntimePaths::writableDataRoot(); + RuntimePaths::migrateLegacyDataToWritableRoot(); + const QString dbPath = RuntimePaths::dataPath("kasset.db"); + LogManager::instance().addLog("[MAIN] Writable data root: " + dataDir); + LogManager::instance().addLog(QString("[MAIN] Data mode: %1") + .arg(RuntimePaths::usingPortableDataRoot() ? "portable" : "per-user")); if (!DB::instance().init(dbPath)) { qCritical() << "Failed to initialize database at" << dbPath; @@ -183,14 +149,13 @@ int main(int argc, char *argv[]) } LogManager::instance().addLog("[MAIN] DB init ok at: " + dbPath); -skip_new_init: - LogManager::instance().addLog("[MAIN] Creating MainWindow"); // Create and show main window MainWindow mainWindow; LogManager::instance().addLog("[MAIN] MainWindow constructed"); mainWindow.show(); LogManager::instance().addLog("[MAIN] MainWindow shown"); + QObject::connect(&app, &QCoreApplication::aboutToQuit, []{ LogManager::instance().addLog("[MAIN] aboutToQuit"); }); QTimer::singleShot(0, []{ LogManager::instance().addLog("[MAIN] Event loop entered"); }); diff --git a/native/qt6/src/mainwindow.cpp b/native/qt6/src/mainwindow.cpp index 6376b1e6..f98f9ab7 100644 --- a/native/qt6/src/mainwindow.cpp +++ b/native/qt6/src/mainwindow.cpp @@ -18,8 +18,9 @@ #include "progress_manager.h" #include "file_ops.h" #include "file_ops_dialog.h" -#include "log_manager.h" -#include "sequence_detector.h" +#include "log_manager.h" +#include "runtime_paths.h" +#include "sequence_detector.h" #include "context_preserver.h" #include "database_health_agent.h" #include "database_health_dialog.h" @@ -32,9 +33,10 @@ #include "project_assets_model.h" #include "project_folders_model.h" #include "project_sequence_grouping_proxy_model.h" -#include "project_item_delegate.h" -#include "project_db.h" -#include "project_version_detector.h" +#include "project_item_delegate.h" +#include "project_db.h" +#include "project_path_utils.h" +#include "project_version_detector.h" #include "project_manager_watcher.h" #include "office_preview.h" @@ -62,7 +64,7 @@ #include #include #include -#include +#include #include #include @@ -101,9 +103,10 @@ static size_t currentWorkingSetMB() { #include #include #include -#include -#include -#include +#include +#include +#include +#include #include #include @@ -993,6 +996,30 @@ void MainWindow::setupUi() infoDimensions->setWordWrap(true); infoLayout->addWidget(infoDimensions); + infoVideoCodec = new QLabel("", this); + infoVideoCodec->setWordWrap(true); + infoLayout->addWidget(infoVideoCodec); + + infoAudioCodec = new QLabel("", this); + infoAudioCodec->setWordWrap(true); + infoLayout->addWidget(infoAudioCodec); + + infoBitrate = new QLabel("", this); + infoBitrate->setWordWrap(true); + infoLayout->addWidget(infoBitrate); + + infoTimecode = new QLabel("", this); + infoTimecode->setWordWrap(true); + infoLayout->addWidget(infoTimecode); + + infoCameraInfo = new QLabel("", this); + infoCameraInfo->setWordWrap(true); + infoLayout->addWidget(infoCameraInfo); + + infoShotInfo = new QLabel("", this); + infoShotInfo->setWordWrap(true); + infoLayout->addWidget(infoShotInfo); + infoCreated = new QLabel("", this); infoCreated->setWordWrap(true); infoLayout->addWidget(infoCreated); @@ -1111,9 +1138,10 @@ void MainWindow::setupUi() LogManager::instance().addLog("[TRACE] setupProjectManagerUi() completed", "DEBUG"); mainTabs->addTab(projectManagerPage, "Project Manager"); - // Log viewer as dock widget at bottom (hidden by default) - QDockWidget* logDock = new QDockWidget("Application Log", this); - LogManager::instance().addLog("[TRACE] logDock created", "DEBUG"); + // Log viewer as dock widget at bottom (hidden by default) + QDockWidget* logDock = new QDockWidget("Application Log", this); + logDock->setObjectName(QStringLiteral("applicationLogDock")); + LogManager::instance().addLog("[TRACE] logDock created", "DEBUG"); logDock->setAllowedAreas(Qt::BottomDockWidgetArea); logDock->setFeatures(QDockWidget::DockWidgetClosable); logViewerWidget = new LogViewerWidget(logDock); @@ -1391,9 +1419,11 @@ void MainWindow::setupFileManagerUi() connect(fmFavoritesList, &QListWidget::customContextMenuRequested, this, [this](const QPoint &pos){ if (!fmFavoritesList) return; QPoint gp = fmFavoritesList->viewport()->mapToGlobal(pos); - QMenu m; QAction *rem = m.addAction("Remove Favorite", this, &MainWindow::onFmRemoveFavorite); - rem->setEnabled(fmFavoritesList->currentItem()!=nullptr); - m.exec(gp); + QMenu m; + QAction *rem = m.addAction("Remove Favorite"); + connect(rem, &QAction::triggered, this, &MainWindow::onFmRemoveFavorite); + rem->setEnabled(fmFavoritesList->currentItem()!=nullptr); + m.exec(gp); }); favLayout->addWidget(fmFavoritesList); LogManager::instance().addLog("[TRACE] favorites list widget added", "DEBUG"); @@ -1941,14 +1971,8 @@ void MainWindow::setupFileManagerUi() pv->addLayout(alphaRow); // Video widget for tlRender rendering - fmVideoWidget = new TLRenderViewport(fmPreviewPanel); - fmVideoWidget->setMinimumHeight(160); - fmVideoWidget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); - fmVideoWidget->hide(); - - // Create tlRender player for video playback - fmTlRenderPlayer = new TLRenderPlayer(fmPreviewPanel); - fmVideoWidget->setPlayer(fmTlRenderPlayer); + // Create tlRender player for video playback + fmTlRenderPlayer = new TLRenderPlayer(fmPreviewPanel); // Media controls (Explorer-like): Prev - Play/Pause - Next - Slider - Time - Audio QHBoxLayout *mc = new QHBoxLayout(); @@ -2051,13 +2075,12 @@ void MainWindow::setupFileManagerUi() // Center the preview content between title and controls - QWidget *previewContent = new QWidget(fmPreviewPanel); - QVBoxLayout *pc = new QVBoxLayout(previewContent); - pc->setContentsMargins(0,0,0,0); - pc->setSpacing(6); - pc->addWidget(fmImageView, 1); - pc->addWidget(fmVideoWidget, 1); - pv->addWidget(previewContent); + fmPreviewContent = new QWidget(fmPreviewPanel); + QVBoxLayout *pc = new QVBoxLayout(fmPreviewContent); + pc->setContentsMargins(0,0,0,0); + pc->setSpacing(6); + pc->addWidget(fmImageView, 1); + pv->addWidget(fmPreviewContent); pv->addLayout(mc); // Hide media controls by default (only show for video/audio) if (fmPrevFrameBtn) fmPrevFrameBtn->hide(); @@ -2131,6 +2154,30 @@ void MainWindow::setupFileManagerUi() fmInfoDimensions->setWordWrap(true); infoLayout->addWidget(fmInfoDimensions); + fmInfoVideoCodec = new QLabel("", fmInfoPanel); + fmInfoVideoCodec->setWordWrap(true); + infoLayout->addWidget(fmInfoVideoCodec); + + fmInfoAudioCodec = new QLabel("", fmInfoPanel); + fmInfoAudioCodec->setWordWrap(true); + infoLayout->addWidget(fmInfoAudioCodec); + + fmInfoBitrate = new QLabel("", fmInfoPanel); + fmInfoBitrate->setWordWrap(true); + infoLayout->addWidget(fmInfoBitrate); + + fmInfoTimecode = new QLabel("", fmInfoPanel); + fmInfoTimecode->setWordWrap(true); + infoLayout->addWidget(fmInfoTimecode); + + fmInfoCameraInfo = new QLabel("", fmInfoPanel); + fmInfoCameraInfo->setWordWrap(true); + infoLayout->addWidget(fmInfoCameraInfo); + + fmInfoShotInfo = new QLabel("", fmInfoPanel); + fmInfoShotInfo->setWordWrap(true); + infoLayout->addWidget(fmInfoShotInfo); + fmInfoCreated = new QLabel("", fmInfoPanel); fmInfoCreated->setWordWrap(true); infoLayout->addWidget(fmInfoCreated); @@ -2490,23 +2537,32 @@ void MainWindow::onFmTreeCurrentChanged(const QModelIndex ¤t, const QModel } -void MainWindow::onFmTreeActivated(const QModelIndex &index) -{ - QString path = fmPathForIndex(index); - LogManager::instance().addLog(QString("[FileManager] Tree activated, path: %1").arg(path), "INFO"); - if (path.isEmpty()) { - LogManager::instance().addLog("[FileManager] Empty path from tree index", "WARN"); - return; - } - - fmSuppressTreeSync = true; - fmNavigateToPath(path, true); - fmSuppressTreeSync = false; -} +void MainWindow::onFmTreeActivated(const QModelIndex &index) +{ + QString path = fmPathForIndex(index); + LogManager::instance().addLog(QString("[FileManager] Tree activated, path: %1").arg(path), "INFO"); + if (path.isEmpty()) { + LogManager::instance().addLog("[FileManager] Empty path from tree index", "WARN"); + return; + } + + fmSuppressTreeSync = true; + fmNavigateToPath(path, true); + fmSuppressTreeSync = false; +} // Forward declarations for file-type helpers used by File Manager handlers static inline bool isImageFile(const QString &ext); -static inline bool isVideoFile(const QString &ext); +static inline bool isVideoFile(const QString &ext); + +QRect MainWindow::initialOverlayGeometry() const +{ + const QRect base = frameGeometry().isValid() ? frameGeometry() : geometry(); + const int width = qMax(960, static_cast(base.width() * 0.8)); + const int height = qMax(640, static_cast(base.height() * 0.8)); + const QPoint center = base.center(); + return QRect(center.x() - width / 2, center.y() - height / 2, width, height); +} static bool isPreviewOverlayViewable(const QString &ext); void MainWindow::onFmItemDoubleClicked(const QModelIndex &index) @@ -2531,7 +2587,7 @@ void MainWindow::onFmItemDoubleClicked(const QModelIndex &index) if (!previewOverlay) { previewOverlay = new PreviewOverlay(this); // Center overlay to the app window instead of screen top-left - previewOverlay->setGeometry(geometry()); + previewOverlay->setGeometry(initialOverlayGeometry()); connect(previewOverlay, &PreviewOverlay::closed, this, &MainWindow::closePreview); connect(previewOverlay, &PreviewOverlay::navigateRequested, this, &MainWindow::changeFmPreview); } else { @@ -2575,7 +2631,7 @@ void MainWindow::onFmItemDoubleClicked(const QModelIndex &index) } if (!imagePreviewOverlay) { imagePreviewOverlay = new ImagePreviewOverlay(this); - imagePreviewOverlay->setGeometry(geometry()); + imagePreviewOverlay->setGeometry(initialOverlayGeometry()); connect(imagePreviewOverlay, &ImagePreviewOverlay::closed, this, &MainWindow::closePreview); connect(imagePreviewOverlay, &ImagePreviewOverlay::navigateRequested, this, &MainWindow::changeFmPreview); } else { @@ -2590,7 +2646,7 @@ void MainWindow::onFmItemDoubleClicked(const QModelIndex &index) if (!previewOverlay) { previewOverlay = new PreviewOverlay(this); // Center overlay to the app window instead of screen top-left - previewOverlay->setGeometry(geometry()); + previewOverlay->setGeometry(initialOverlayGeometry()); connect(previewOverlay, &PreviewOverlay::closed, this, &MainWindow::closePreview); connect(previewOverlay, &PreviewOverlay::navigateRequested, this, &MainWindow::changeFmPreview); } else { @@ -2718,23 +2774,16 @@ void MainWindow::onFmPaste() fmClipboardCutMode = false; } -void MainWindow::onFmDelete() -{ +void MainWindow::onFmDelete() +{ if (qobject_cast(sender())) { QWidget* fw = QApplication::focusWidget(); if (fw && (qobject_cast(fw) || fw->inherits("QTextEdit") || fw->inherits("QPlainTextEdit"))) return; } - QStringList paths = selectedPathsForActiveFmPane(); - if (paths.isEmpty()) return; - - - // Ensure any preview locks are released before file ops - releaseAnyPreviewLocksForPaths(paths); - // Enqueue async delete - auto &q = FileOpsQueue::instance(); - q.enqueueDelete(paths); - -} + QStringList paths = selectedPathsForActiveFmPane(); + if (paths.isEmpty()) return; + confirmAndQueueFmDelete(paths, false); +} void MainWindow::onFmDeletePermanent() @@ -2743,16 +2792,10 @@ void MainWindow::onFmDeletePermanent() QWidget* fw = QApplication::focusWidget(); if (fw && (qobject_cast(fw) || fw->inherits("QTextEdit") || fw->inherits("QPlainTextEdit"))) return; } - QStringList paths = selectedPathsForActiveFmPane(); - if (paths.isEmpty()) return; - - - // Ensure any preview locks are released before file ops - releaseAnyPreviewLocksForPaths(paths); - auto &q = FileOpsQueue::instance(); - q.enqueueDeletePermanent(paths); - -} + QStringList paths = selectedPathsForActiveFmPane(); + if (paths.isEmpty()) return; + confirmAndQueueFmDelete(paths, true); +} void MainWindow::onFmBackToParent() { @@ -2795,7 +2838,7 @@ void MainWindow::onFmRefresh() // Clearing it causes all visible thumbnails to flicker and re-decode. // Re-read directory by flipping root path (only for manual F5 refresh) - QString tempPath = QDir::tempPath(); + QString tempPath = QCoreApplication::applicationDirPath(); fmDirModel->setRootPath(tempPath); fmDirModel->setRootPath(currentPath); @@ -2823,7 +2866,7 @@ void MainWindow::onFmLightRefresh() if (fmDirModel) { QString currentPath = fmDirModel->rootPath(); if (!currentPath.isEmpty()) { - QString tempPath = QDir::tempPath(); + QString tempPath = QCoreApplication::applicationDirPath(); fmDirModel->setRootPath(tempPath); fmDirModel->setRootPath(currentPath); @@ -2843,8 +2886,8 @@ void MainWindow::onFmLightRefresh() if (fmListView && fmListView->viewport()) fmListView->viewport()->update(); } -void MainWindow::onFmRename() -{ +void MainWindow::onFmRename() +{ if (qobject_cast(sender())) { QWidget* fw = QApplication::focusWidget(); if (fw && (qobject_cast(fw) || fw->inherits("QTextEdit") || fw->inherits("QPlainTextEdit"))) return; @@ -2852,20 +2895,40 @@ void MainWindow::onFmRename() QStringList paths = selectedPathsForActiveFmPane(); if (paths.size() != 1) return; - QString p = paths.first(); - releaseAnyPreviewLocksForPaths(QStringList{p}); - QFileInfo fi(p); - bool ok = false; - QString newName = QInputDialog::getText(this, "Rename", "New name:", QLineEdit::Normal, fi.fileName(), &ok); - if (!ok || newName.trimmed().isEmpty()) return; - QString dest = fi.absolutePath() + QDir::separator() + newName.trimmed(); - if (fi.isDir()) { - QDir parent(fi.absolutePath()); - parent.rename(fi.fileName(), newName.trimmed()); - } else { - QFile::rename(p, dest); - } -} + QString p = paths.first(); + releaseAnyPreviewLocksForPaths(QStringList{p}); + QFileInfo fi(p); + bool ok = false; + QString newName = QInputDialog::getText(this, "Rename", "New name:", QLineEdit::Normal, fi.fileName(), &ok); + const QString trimmedName = newName.trimmed(); + if (!ok || trimmedName.isEmpty()) return; + if (trimmedName == fi.fileName()) { + statusBar()->showMessage("Name unchanged", 2000); + return; + } + + const QString dest = fi.absolutePath() + QDir::separator() + trimmedName; + if (QFileInfo::exists(dest)) { + QMessageBox::warning(this, "Rename", QString("A file or folder named '%1' already exists.").arg(trimmedName)); + return; + } + + bool renamed = false; + if (fi.isDir()) { + QDir parent(fi.absolutePath()); + renamed = parent.rename(fi.fileName(), trimmedName); + } else { + renamed = QFile::rename(p, dest); + } + + if (!renamed) { + QMessageBox::warning(this, "Rename", QString("Failed to rename '%1' to '%2'.").arg(fi.fileName(), trimmedName)); + return; + } + + onFmLightRefresh(); + statusBar()->showMessage("Renamed successfully", 2000); +} void MainWindow::onFmBulkRename() { @@ -2889,19 +2952,19 @@ void MainWindow::onFmBulkRename() } } -void MainWindow::onFmNewFolder() -{ - if (qobject_cast(sender())) { - QWidget* fw = QApplication::focusWidget(); - if (fw && (qobject_cast(fw) || fw->inherits("QTextEdit") || fw->inherits("QPlainTextEdit"))) return; - } - const QString destDir = activeFmRootPath(); - if (destDir.isEmpty()) return; - QString path = uniqueNameInDir(destDir, "New Folder"); - if (QDir().mkpath(path)) { - // Refresh the file list and tree to show the new folder - if (fmDirModel) { - QString tempPath = QDir::tempPath(); +void MainWindow::onFmNewFolder() +{ + if (qobject_cast(sender())) { + QWidget* fw = QApplication::focusWidget(); + if (fw && (qobject_cast(fw) || fw->inherits("QTextEdit") || fw->inherits("QPlainTextEdit"))) return; + } + const QString destDir = activeFmRootPath(); + if (destDir.isEmpty()) return; + QString path = uniqueNameInDir(destDir, "New Folder"); + if (QDir().mkpath(path)) { + // Refresh the file list and tree to show the new folder + if (fmDirModel) { + QString tempPath = QCoreApplication::applicationDirPath(); fmDirModel->setRootPath(tempPath); fmDirModel->setRootPath(destDir); @@ -2961,13 +3024,13 @@ void MainWindow::onFmRemoveFavorite() saveFmFavorites(); } -void MainWindow::onFmFavoriteActivated(QListWidgetItem* item) -{ - if (!item) return; - QString path = item->data(Qt::UserRole).toString(); - if (path.isEmpty()) return; - fmNavigateToPath(path, true); -} +void MainWindow::onFmFavoriteActivated(QListWidgetItem* item) +{ + if (!item) return; + QString path = item->data(Qt::UserRole).toString(); + if (path.isEmpty()) return; + fmNavigateToPath(path, true); +} void MainWindow::loadFmFavorites() { @@ -3020,23 +3083,33 @@ void MainWindow::onFmShowContextMenu(const QPoint &pos) showFmContextMenuAt(globalPos); } -void MainWindow::showFmContextMenuAt(const QPoint &globalPos) -{ - QMenu menu; - QAction *refreshA = menu.addAction("Refresh", this, &MainWindow::onFmRefresh, QKeySequence(Qt::Key_F5)); - menu.addSeparator(); - QAction *copyA = menu.addAction("Copy", this, &MainWindow::onFmCopy, QKeySequence::Copy); - QAction *cutA = menu.addAction("Cut", this, &MainWindow::onFmCut, QKeySequence::Cut); - QAction *pasteA = menu.addAction("Paste", this, &MainWindow::onFmPaste, QKeySequence::Paste); - menu.addSeparator(); - QAction *renameA = menu.addAction("Rename", this, &MainWindow::onFmRename, QKeySequence(Qt::Key_F2)); - QAction *bulkRenameA = menu.addAction("Bulk Rename...", this, &MainWindow::onFmBulkRename); - QAction *delA = menu.addAction("Delete", this, &MainWindow::onFmDelete, QKeySequence::Delete); - QAction *createFolderWithSel = menu.addAction("Create Folder with Selected Files", this, &MainWindow::onFmCreateFolderWithSelected); - menu.addSeparator(); - QAction *addLibA = menu.addAction("Add to Asset Library", this, &MainWindow::onAddSelectionToAssetLibrary); - - QAction *favA = menu.addAction("Add to Favorites", this, &MainWindow::onFmAddToFavorites); +void MainWindow::showFmContextMenuAt(const QPoint &globalPos) +{ + QMenu menu; + auto addConnectedAction = [this, &menu](const QString &text, auto slot, const QKeySequence &shortcut = QKeySequence()) { + QAction *action = menu.addAction(text); + connect(action, &QAction::triggered, this, slot); + if (!shortcut.isEmpty()) { + action->setShortcut(shortcut); + } + return action; + }; + + QAction *refreshA = addConnectedAction("Refresh", &MainWindow::onFmRefresh, QKeySequence(Qt::Key_F5)); + menu.addSeparator(); + QAction *copyA = addConnectedAction("Copy", &MainWindow::onFmCopy, QKeySequence::Copy); + QAction *cutA = addConnectedAction("Cut", &MainWindow::onFmCut, QKeySequence::Cut); + QAction *pasteA = addConnectedAction("Paste", &MainWindow::onFmPaste, QKeySequence::Paste); + menu.addSeparator(); + QAction *renameA = addConnectedAction("Rename", &MainWindow::onFmRename, QKeySequence(Qt::Key_F2)); + QAction *bulkRenameA = addConnectedAction("Bulk Rename...", &MainWindow::onFmBulkRename); + QAction *delA = addConnectedAction("Delete", &MainWindow::onFmDelete, QKeySequence::Delete); + QAction *permDelA = addConnectedAction("Permanent Delete", &MainWindow::onFmDeletePermanent, QKeySequence(Qt::SHIFT | Qt::Key_Delete)); + QAction *createFolderWithSel = addConnectedAction("Create Folder with Selected Files", &MainWindow::onFmCreateFolderWithSelected); + menu.addSeparator(); + QAction *addLibA = addConnectedAction("Add to Asset Library", &MainWindow::onAddSelectionToAssetLibrary); + + QAction *favA = addConnectedAction("Add to Favorites", &MainWindow::onFmAddToFavorites); menu.addSeparator(); QAction *openInExplorerA = menu.addAction("Open in Explorer"); @@ -3051,9 +3124,10 @@ void MainWindow::showFmContextMenuAt(const QPoint &globalPos) copyA->setEnabled(hasSel); cutA->setEnabled(hasSel); renameA->setEnabled(selCount == 1); - bulkRenameA->setEnabled(selCount >= 2); - delA->setEnabled(hasSel); - pasteA->setEnabled(!fmClipboard.isEmpty()); + bulkRenameA->setEnabled(selCount >= 2); + delA->setEnabled(hasSel); + permDelA->setEnabled(hasSel); + pasteA->setEnabled(!fmClipboard.isEmpty()); addLibA->setEnabled(hasSel); favA->setEnabled(hasSel); createFolderWithSel->setEnabled(hasSel); @@ -3094,15 +3168,14 @@ void MainWindow::showFmContextMenuAt(const QPoint &globalPos) } - // Handle new context menu actions - if (chosen == openInExplorerA && selCount == 1) { - QString path = selectedPaths.first(); - // Use explorer.exe /select to open Explorer and select the file - QProcess::startDetached("explorer.exe", QStringList() << "/select," << QDir::toNativeSeparators(path)); - } else if (chosen == propertiesA && selCount == 1) { - QString path = selectedPaths.first(); - // Use Windows Shell API to show Properties dialog - #ifdef Q_OS_WIN + // Handle new context menu actions + if (chosen == openInExplorerA && selCount == 1) { + QString path = selectedPaths.first(); + DragUtils::instance().showInExplorer(path); + } else if (chosen == propertiesA && selCount == 1) { + QString path = selectedPaths.first(); + // Use Windows Shell API to show Properties dialog + #ifdef Q_OS_WIN std::wstring wpath = path.toStdWString(); SHELLEXECUTEINFOW sei = { sizeof(sei) }; sei.lpVerb = L"properties"; @@ -3189,23 +3262,36 @@ void MainWindow::onFmTreeContextMenu(const QPoint &pos) QStringList paths = getSelectedFmTreePaths(); if (paths.isEmpty()) return; - releaseAnyPreviewLocksForPaths(paths); - FileOpsQueue::instance().enqueueDelete(paths); - - } else if (chosen == permDelA) { - QStringList paths = getSelectedFmTreePaths(); - releaseAnyPreviewLocksForPaths(paths); - doPermanentDelete(paths); - } else if (chosen == renameA) { - QStringList paths = getSelectedFmTreePaths(); - if (paths.size() != 1) return; - QFileInfo fi(paths.first()); - bool ok=false; - QString newName = QInputDialog::getText(this, "Rename", "New name:", QLineEdit::Normal, fi.fileName(), &ok); - if (!ok || newName.trimmed().isEmpty()) return; - QDir parent(fi.absolutePath()); - parent.rename(fi.fileName(), newName.trimmed()); - } else if (chosen == newFolderA) { + confirmAndQueueFmDelete(paths, false); + + } else if (chosen == permDelA) { + QStringList paths = getSelectedFmTreePaths(); + doPermanentDelete(paths); + } else if (chosen == renameA) { + QStringList paths = getSelectedFmTreePaths(); + if (paths.size() != 1) return; + QFileInfo fi(paths.first()); + bool ok=false; + QString newName = QInputDialog::getText(this, "Rename", "New name:", QLineEdit::Normal, fi.fileName(), &ok); + const QString trimmedName = newName.trimmed(); + if (!ok || trimmedName.isEmpty()) return; + if (trimmedName == fi.fileName()) { + statusBar()->showMessage("Name unchanged", 2000); + return; + } + const QString dest = fi.absolutePath() + QDir::separator() + trimmedName; + if (QFileInfo::exists(dest)) { + QMessageBox::warning(this, "Rename", QString("A file or folder named '%1' already exists.").arg(trimmedName)); + return; + } + QDir parent(fi.absolutePath()); + if (!parent.rename(fi.fileName(), trimmedName)) { + QMessageBox::warning(this, "Rename", QString("Failed to rename '%1' to '%2'.").arg(fi.fileName(), trimmedName)); + return; + } + onFmLightRefresh(); + statusBar()->showMessage("Renamed successfully", 2000); + } else if (chosen == newFolderA) { QDir dir(path); QString newPath = uniqueNameInDir(path, "New Folder"); dir.mkpath(newPath); @@ -3230,8 +3316,7 @@ void MainWindow::onFmTreeContextMenu(const QPoint &pos) } releaseAnyPreviewLocksForPaths(files); FileOpsQueue::instance().enqueueMove(files, folderPath); - if (!fileOpsDialog) fileOpsDialog = new FileOpsProgressDialog(this); - fileOpsDialog->show(); fileOpsDialog->raise(); fileOpsDialog->activateWindow(); + showFileOpsDialog(); } else if (chosen == addLibA) { onAddTreeSelectionToAssetLibrary(); } else if (chosen == importPmA && isSingleFolder) { @@ -3240,15 +3325,15 @@ void MainWindow::onFmTreeContextMenu(const QPoint &pos) pmImportToProject(folderName, folderPath); // Switch to Project Manager tab if (mainTabs) mainTabs->setCurrentWidget(projectManagerPage); - } else if (chosen == favA) { - onFmAddToFavorites(); - } else if (chosen == openInExplorerA && hasSelection && selectedPaths.size() == 1) { - const QString p = selectedPaths.first(); - QProcess::startDetached("explorer.exe", QStringList() << "/select," << QDir::toNativeSeparators(p)); - } else if (chosen == propertiesA && hasSelection && selectedPaths.size() == 1) { - const QString p = selectedPaths.first(); -#ifdef Q_OS_WIN - std::wstring wpath = p.toStdWString(); + } else if (chosen == favA) { + onFmAddToFavorites(); + } else if (chosen == openInExplorerA && hasSelection && selectedPaths.size() == 1) { + const QString p = selectedPaths.first(); + DragUtils::instance().showInExplorer(p); + } else if (chosen == propertiesA && hasSelection && selectedPaths.size() == 1) { + const QString p = selectedPaths.first(); +#ifdef Q_OS_WIN + std::wstring wpath = p.toStdWString(); SHELLEXECUTEINFOW sei = { sizeof(sei) }; sei.lpVerb = L"properties"; sei.lpFile = wpath.c_str(); @@ -3273,33 +3358,74 @@ QStringList MainWindow::getSelectedFmTreePaths() const return out; } -void MainWindow::onFmPasteInto(const QString& destDir) -{ +void MainWindow::onFmPasteInto(const QString& destDir) +{ if (fmClipboard.isEmpty()) return; // Ensure any preview locks are released before file ops releaseAnyPreviewLocksForPaths(fmClipboard); auto &q = FileOpsQueue::instance(); if (fmClipboardCutMode) q.enqueueMove(fmClipboard, destDir); else q.enqueueCopy(fmClipboard, destDir); - if (!fileOpsDialog) fileOpsDialog = new FileOpsProgressDialog(this); - fileOpsDialog->show(); fileOpsDialog->raise(); fileOpsDialog->activateWindow(); - fmClipboard.clear(); - fmClipboardCutMode = false; -} - -void MainWindow::doPermanentDelete(const QStringList& paths) -{ - if (paths.isEmpty()) return; - // Ensure any preview locks are released before file ops - releaseAnyPreviewLocksForPaths(paths); - FileOpsQueue::instance().enqueueDeletePermanent(paths); - -} - - -void MainWindow::releaseAnyPreviewLocksForPaths(const QStringList& paths) -{ - QSet s; for (const QString &p : paths) s.insert(QFileInfo(p).absoluteFilePath()); + showFileOpsDialog(); + fmClipboard.clear(); + fmClipboardCutMode = false; +} + +bool MainWindow::confirmAndQueueFmDelete(const QStringList& paths, bool permanentDelete) +{ + if (paths.isEmpty()) return false; + + const QString actionVerb = permanentDelete ? QStringLiteral("permanently delete") + : QStringLiteral("move to the Trash"); + QString message; + if (paths.size() == 1) { + const QFileInfo info(paths.first()); + const QString noun = info.isDir() ? QStringLiteral("folder") : QStringLiteral("file"); + message = permanentDelete + ? QString("Are you sure you want to permanently delete the %1 '%2'?\n\nThis action cannot be undone.") + .arg(noun, info.fileName()) + : QString("Are you sure you want to move the %1 '%2' to the Trash?") + .arg(noun, info.fileName()); + } else { + message = permanentDelete + ? QString("Are you sure you want to permanently delete %1 selected items?\n\nThis action cannot be undone.").arg(paths.size()) + : QString("Are you sure you want to move %1 selected items to the Trash?").arg(paths.size()); + } + + const auto reply = QMessageBox::question( + this, + permanentDelete ? tr("Permanent Delete") : tr("Delete"), + message, + QMessageBox::Yes | QMessageBox::No, + QMessageBox::No); + if (reply != QMessageBox::Yes) return false; + + releaseAnyPreviewLocksForPaths(paths); + if (permanentDelete) FileOpsQueue::instance().enqueueDeletePermanent(paths); + else FileOpsQueue::instance().enqueueDelete(paths); + showFileOpsDialog(); + statusBar()->showMessage(QString("Starting %1 of %2 item(s)...").arg(actionVerb).arg(paths.size()), 3000); + return true; +} + +void MainWindow::showFileOpsDialog() +{ + if (!fileOpsDialog) fileOpsDialog = new FileOpsProgressDialog(this); + fileOpsDialog->show(); + fileOpsDialog->raise(); + fileOpsDialog->activateWindow(); +} + +void MainWindow::doPermanentDelete(const QStringList& paths) +{ + if (paths.isEmpty()) return; + confirmAndQueueFmDelete(paths, true); +} + + +void MainWindow::releaseAnyPreviewLocksForPaths(const QStringList& paths) +{ + QSet s; for (const QString &p : paths) s.insert(QFileInfo(p).absoluteFilePath()); // Embedded FM preview: stop media and clear if current preview is among paths if (fmTlRenderPlayer) { fmTlRenderPlayer->stop(); } if (!fmCurrentPreviewPath.isEmpty()) { @@ -3316,9 +3442,55 @@ void MainWindow::releaseAnyPreviewLocksForPaths(const QStringList& paths) } else { // still release any handles previewOverlay->stopPlayback(); - } - } -} + } + } +} + +void MainWindow::queueFmFileOperation(const QStringList& sources, const QString& destDir, bool moveRequested) +{ + if (sources.isEmpty() || destDir.isEmpty()) return; + + releaseAnyPreviewLocksForPaths(sources); + if (moveRequested) FileOpsQueue::instance().enqueueMove(sources, destDir); + else FileOpsQueue::instance().enqueueCopy(sources, destDir); + + showFileOpsDialog(); +} + +void MainWindow::refreshFileManagerViewsForPaths(const QStringList& paths, const QString& destination) +{ + QSet dirs; + for (const QString &path : paths) { + QFileInfo info(path); + const QString dir = info.isDir() ? info.absolutePath() : info.absolutePath(); + if (!dir.isEmpty()) dirs.insert(QDir::cleanPath(dir)); + } + if (!destination.isEmpty()) { + dirs.insert(QDir::cleanPath(destination)); + } + + const QString primaryRoot = fmDirModel ? QDir::cleanPath(fmDirModel->rootPath()) : QString(); + const QString secondaryRoot = fmSecondaryPane ? QDir::cleanPath(fmSecondaryPane->currentPath()) : QString(); + + bool refreshPrimary = false; + bool refreshSecondary = false; + for (const QString &dir : dirs) { + if (!primaryRoot.isEmpty() && dir == primaryRoot) refreshPrimary = true; + if (!secondaryRoot.isEmpty() && dir == secondaryRoot) refreshSecondary = true; + if (fmEverythingTreeModel) fmEverythingTreeModel->refreshPath(dir); + } + + if (refreshPrimary) { + onFmLightRefresh(); + } + if (refreshSecondary && fmSecondaryPane && (!refreshPrimary || secondaryRoot != primaryRoot)) { + fmSecondaryPane->refresh(); + } + + if (!dirs.isEmpty()) { + scheduleVisibleThumbProgressUpdate(); + } +} void MainWindow::onFmCreateFolderWithSelected() @@ -3350,8 +3522,7 @@ void MainWindow::onFmCreateFolderWithSelected() // Enqueue async move of selected into the new folder auto &q = FileOpsQueue::instance(); q.enqueueMove(paths, folderPath); - if (!fileOpsDialog) fileOpsDialog = new FileOpsProgressDialog(this); - fileOpsDialog->show(); fileOpsDialog->raise(); fileOpsDialog->activateWindow(); + showFileOpsDialog(); } void MainWindow::onFmViewModeToggled() @@ -3437,18 +3608,9 @@ void MainWindow::onFmToggleSecondPane(bool checked) }); // Connect filesDropped for copy/move operations - connect(fmSecondaryPane, &FileManagerPane::filesDropped, this, [this](const QStringList &paths, const QString &destDir) { - // Determine if this is a cut (move) or copy operation - bool isCut = fmSecondaryPane->isClipboardCutMode(); - - // Use FileOpsQueue for the operation - FileOpsQueue &queue = FileOpsQueue::instance(); - if (isCut) { - queue.enqueueMove(paths, destDir); - } else { - queue.enqueueCopy(paths, destDir); - } - }); + connect(fmSecondaryPane, &FileManagerPane::filesDropped, this, [this](const QStringList &paths, const QString &destDir, bool moveRequested) { + queueFmFileOperation(paths, destDir, moveRequested); + }); // Connect fileDoubleClicked to open preview overlay connect(fmSecondaryPane, &FileManagerPane::fileDoubleClicked, this, &MainWindow::onSecondaryPaneFileDoubleClicked); @@ -3578,7 +3740,7 @@ void MainWindow::onSecondaryPaneFileDoubleClicked(const QString &path) } if (!imagePreviewOverlay) { imagePreviewOverlay = new ImagePreviewOverlay(this); - imagePreviewOverlay->setGeometry(geometry()); + imagePreviewOverlay->setGeometry(initialOverlayGeometry()); connect(imagePreviewOverlay, &ImagePreviewOverlay::closed, this, &MainWindow::closePreview); connect(imagePreviewOverlay, &ImagePreviewOverlay::navigateRequested, this, &MainWindow::changeFmPreview); } else { @@ -3592,7 +3754,7 @@ void MainWindow::onSecondaryPaneFileDoubleClicked(const QString &path) } if (!previewOverlay) { previewOverlay = new PreviewOverlay(this); - previewOverlay->setGeometry(geometry()); + previewOverlay->setGeometry(initialOverlayGeometry()); connect(previewOverlay, &PreviewOverlay::closed, this, &MainWindow::closePreview); connect(previewOverlay, &PreviewOverlay::navigateRequested, this, &MainWindow::changeFmPreview); } else { @@ -3811,9 +3973,8 @@ void MainWindow::setupProjectManagerUi() LogManager::instance().addLog("[ProjectManager] Setting up Project Manager UI...", "INFO"); // Initialize ProjectDB with separate database file - const QString dataDir = QStandardPaths::writableLocation(QStandardPaths::AppDataLocation); - const QString projectsDbPath = dataDir + "/projects.db"; - if (!ProjectDB::instance().init(projectsDbPath)) { + const QString projectsDbPath = RuntimePaths::dataPath("projects.db"); + if (!ProjectDB::instance().init(projectsDbPath)) { LogManager::instance().addLog("[ProjectManager] Failed to initialize ProjectDB at: " + projectsDbPath, "ERROR"); return; } @@ -4149,19 +4310,13 @@ void MainWindow::setupProjectManagerUi() pmImageView->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); // Video widget (hidden by default) - pmVideoWidget = new TLRenderViewport(pmPreviewPanel); - pmVideoWidget->setMinimumHeight(160); - pmVideoWidget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); - pmVideoWidget->hide(); - - // Preview content container - QWidget *previewContent = new QWidget(pmPreviewPanel); - QVBoxLayout *pc = new QVBoxLayout(previewContent); - pc->setContentsMargins(0, 0, 0, 0); - pc->setSpacing(6); - pc->addWidget(pmImageView, 1); - pc->addWidget(pmVideoWidget, 1); - pv->addWidget(previewContent); + // Preview content container + pmPreviewContent = new QWidget(pmPreviewPanel); + QVBoxLayout *pc = new QVBoxLayout(pmPreviewContent); + pc->setContentsMargins(0, 0, 0, 0); + pc->setSpacing(6); + pc->addWidget(pmImageView, 1); + pv->addWidget(pmPreviewContent); // Media controls QHBoxLayout *mc = new QHBoxLayout(); @@ -4218,9 +4373,8 @@ void MainWindow::setupProjectManagerUi() pv->addLayout(mc); - // Create tlRender player for video playback - pmTlRenderPlayer = new TLRenderPlayer(pmPreviewPanel); - pmVideoWidget->setPlayer(pmTlRenderPlayer); + // Create tlRender player for video playback + pmTlRenderPlayer = new TLRenderPlayer(pmPreviewPanel); // Sequence timer for image sequence playback pmSequenceTimer = new QTimer(pmPreviewPanel); @@ -4708,7 +4862,7 @@ void MainWindow::onPmOpenOverlay() } if (!previewOverlay) { previewOverlay = new PreviewOverlay(this); - previewOverlay->setGeometry(geometry()); + previewOverlay->setGeometry(initialOverlayGeometry()); connect(previewOverlay, &PreviewOverlay::closed, this, &MainWindow::closePreview); connect(previewOverlay, &PreviewOverlay::navigateRequested, this, &MainWindow::changePmPreview); } else { @@ -4741,7 +4895,7 @@ void MainWindow::onPmOpenOverlay() } if (!imagePreviewOverlay) { imagePreviewOverlay = new ImagePreviewOverlay(this); - imagePreviewOverlay->setGeometry(geometry()); + imagePreviewOverlay->setGeometry(initialOverlayGeometry()); connect(imagePreviewOverlay, &ImagePreviewOverlay::closed, this, &MainWindow::closePreview); connect(imagePreviewOverlay, &ImagePreviewOverlay::navigateRequested, this, &MainWindow::changePmPreview); } else { @@ -4755,7 +4909,7 @@ void MainWindow::onPmOpenOverlay() } if (!previewOverlay) { previewOverlay = new PreviewOverlay(this); - previewOverlay->setGeometry(geometry()); + previewOverlay->setGeometry(initialOverlayGeometry()); connect(previewOverlay, &PreviewOverlay::closed, this, &MainWindow::closePreview); connect(previewOverlay, &PreviewOverlay::navigateRequested, this, &MainWindow::changePmPreview); } else { @@ -4777,18 +4931,23 @@ void MainWindow::onPmAssetContextMenu(const QPoint &pos) index = view->indexAt(pos); // Get all selected items - QModelIndexList selectedIndexes = view->selectionModel()->selectedIndexes(); - QStringList selectedPaths; - QList selectedAssetIds; - - for (const QModelIndex &idx : selectedIndexes) { - QString path = idx.data(ProjectAssetsModel::FilePathRole).toString(); - int assetId = idx.data(ProjectAssetsModel::IdRole).toInt(); - if (!path.isEmpty() && !selectedPaths.contains(path)) { - selectedPaths.append(path); - selectedAssetIds.append(assetId); - } - } + QModelIndexList selectedIndexes = view->selectionModel()->selectedIndexes(); + QStringList selectedPaths; + QStringList selectedRenamablePaths; + QList selectedAssetIds; + + for (const QModelIndex &idx : selectedIndexes) { + const bool isFolder = idx.data(ProjectAssetsModel::IsFolderRole).toBool(); + QString path = idx.data(ProjectAssetsModel::FilePathRole).toString(); + int assetId = idx.data(ProjectAssetsModel::IdRole).toInt(); + if (!path.isEmpty() && !selectedPaths.contains(path)) { + selectedPaths.append(path); + selectedAssetIds.append(assetId); + if (!isFolder) { + selectedRenamablePaths.append(path); + } + } + } bool hasSel = !selectedPaths.isEmpty(); int selCount = selectedPaths.size(); @@ -4824,13 +4983,16 @@ void MainWindow::onPmAssetContextMenu(const QPoint &pos) menu.addSeparator(); - QAction *renameA = menu.addAction("Rename"); - renameA->setShortcut(QKeySequence(Qt::Key_F2)); - renameA->setEnabled(selCount == 1); - - QAction *deleteA = menu.addAction("Delete"); - deleteA->setShortcut(QKeySequence::Delete); - deleteA->setEnabled(hasSel); + QAction *renameA = menu.addAction("Rename"); + renameA->setShortcut(QKeySequence(Qt::Key_F2)); + renameA->setEnabled(selCount == 1); + + QAction *bulkRenameA = menu.addAction(QString("Bulk Rename (%1 item(s))...").arg(selectedRenamablePaths.size())); + bulkRenameA->setEnabled(selectedRenamablePaths.size() >= 2); + + QAction *deleteA = menu.addAction("Delete"); + deleteA->setShortcut(QKeySequence::Delete); + deleteA->setEnabled(hasSel); menu.addSeparator(); @@ -4858,18 +5020,25 @@ void MainWindow::onPmAssetContextMenu(const QPoint &pos) pmClipboard = selectedPaths; pmClipboardCutMode = true; statusBar()->showMessage(QString("Cut %1 file(s)").arg(selCount), 2000); - } else if (chosen == pasteA) { - onPmPaste(); - } else if (chosen == renameA && selCount == 1) { - onPmRename(); - } else if (chosen == deleteA) { - onPmDelete(); - } else if (chosen == showInExplorerA && selCount == 1) { - QProcess::startDetached("explorer.exe", {"/select,", QDir::toNativeSeparators(selectedPaths.first())}); - } else if (chosen == propertiesA && selCount == 1) { - #ifdef Q_OS_WIN - std::wstring wpath = selectedPaths.first().toStdWString(); - SHELLEXECUTEINFOW sei = { sizeof(sei) }; + } else if (chosen == pasteA) { + onPmPaste(); + } else if (chosen == renameA && selCount == 1) { + onPmRename(); + } else if (chosen == bulkRenameA && selectedRenamablePaths.size() >= 2) { + releaseAnyPreviewLocksForPaths(selectedRenamablePaths); + BulkRenameDialog dialog(selectedRenamablePaths, this); + if (dialog.exec() == QDialog::Accepted) { + onPmRefresh(); + statusBar()->showMessage("Bulk rename completed", 3000); + } + } else if (chosen == deleteA) { + onPmDelete(); + } else if (chosen == showInExplorerA && selCount == 1) { + DragUtils::instance().showInExplorer(selectedPaths.first()); + } else if (chosen == propertiesA && selCount == 1) { + #ifdef Q_OS_WIN + std::wstring wpath = selectedPaths.first().toStdWString(); + SHELLEXECUTEINFOW sei = { sizeof(sei) }; sei.lpVerb = L"properties"; sei.lpFile = wpath.c_str(); sei.nShow = SW_SHOW; @@ -4950,8 +5119,10 @@ void MainWindow::onPmProjectContextMenu(const QPoint &pos) if (index.isValid()) { int projectId = index.data(ProjectsModel::IdRole).toInt(); - menu.addAction("Rename Project", this, &MainWindow::onPmRenameProject); - menu.addAction("Change Watch Folder...", this, &MainWindow::onPmAddWatchFolder); + QAction *renameProjectAction = menu.addAction("Rename Project"); + connect(renameProjectAction, &QAction::triggered, this, &MainWindow::onPmRenameProject); + QAction *changeWatchFolderAction = menu.addAction("Change Watch Folder..."); + connect(changeWatchFolderAction, &QAction::triggered, this, &MainWindow::onPmAddWatchFolder); menu.addSeparator(); // Generate Thumbnails submenu @@ -4967,9 +5138,10 @@ void MainWindow::onPmProjectContextMenu(const QPoint &pos) }); menu.addSeparator(); - menu.addAction("Re-sync Asset Folders", this, [this, index]() { - int projectId = index.data(ProjectsModel::IdRole).toInt(); - if (projectId <= 0) return; + QAction *resyncAction = menu.addAction("Re-sync Asset Folders"); + connect(resyncAction, &QAction::triggered, this, [this, index]() { + int projectId = index.data(ProjectsModel::IdRole).toInt(); + if (projectId <= 0) return; statusBar()->showMessage("Re-syncing asset folders (background)..."); @@ -4989,11 +5161,13 @@ void MainWindow::onPmProjectContextMenu(const QPoint &pos) } }); }); - menu.addSeparator(); - menu.addAction("Delete Project", this, &MainWindow::onPmDeleteProject); - } else { - menu.addAction("New Project...", this, &MainWindow::onPmCreateProject); - } + menu.addSeparator(); + QAction *deleteProjectAction = menu.addAction("Delete Project"); + connect(deleteProjectAction, &QAction::triggered, this, &MainWindow::onPmDeleteProject); + } else { + QAction *newProjectAction = menu.addAction("New Project..."); + connect(newProjectAction, &QAction::triggered, this, &MainWindow::onPmCreateProject); + } menu.exec(pmProjectsListView->viewport()->mapToGlobal(pos)); } @@ -5294,13 +5468,16 @@ void MainWindow::onPmVersionDropdownRequested(const QModelIndex &index, const QP } } -void MainWindow::onPmRefresh() -{ - if (pmProjectsModel) { - pmProjectsModel->refresh(); - } - if (pmAssetsModel && pmCurrentProjectId > 0) { - pmAssetsModel->setProjectId(pmCurrentProjectId); +void MainWindow::onPmRefresh() +{ + if (pmWatcher && pmCurrentProjectId > 0) { + pmWatcher->rescan(pmCurrentProjectId); + } + if (pmProjectsModel) { + pmProjectsModel->refresh(); + } + if (pmAssetsModel && pmCurrentProjectId > 0) { + pmAssetsModel->setProjectId(pmCurrentProjectId); } } @@ -5660,11 +5837,14 @@ void MainWindow::updatePmInfoPanel() } } -void MainWindow::updatePmPreviewForIndex(const QModelIndex &idx) -{ - if (!idx.isValid()) { - clearPmPreview(); - return; +void MainWindow::updatePmPreviewForIndex(const QModelIndex &idx) +{ + if (!pmPreviewPanel || !pmPreviewPanel->isVisible()) { + return; + } + if (!idx.isValid()) { + clearPmPreview(); + return; } // Skip folders - they don't have previews @@ -5810,9 +5990,11 @@ void MainWindow::loadPmSequenceFrame(int index) } } -void MainWindow::showPmVideo(const QString &filePath) -{ - if (!pmTlRenderPlayer || !pmVideoWidget) return; +void MainWindow::showPmVideo(const QString &filePath) +{ + if (!pmTlRenderPlayer) return; + ensurePmVideoPreview(); + if (!pmVideoWidget) return; // Stop any previous playback pmTlRenderPlayer->stop(); @@ -5838,7 +6020,45 @@ void MainWindow::showPmVideo(const QString &filePath) // Load and play pmTlRenderPlayer->loadMedia(filePath); pmTlRenderPlayer->play(); -} +} + +void MainWindow::ensureFmVideoPreview() +{ + if (fmVideoWidget || !fmPreviewContent) { + return; + } + + auto *layout = qobject_cast(fmPreviewContent->layout()); + if (!layout) { + return; + } + + fmVideoWidget = new TLRenderViewport(fmPreviewPanel); + fmVideoWidget->setMinimumHeight(160); + fmVideoWidget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); + fmVideoWidget->hide(); + fmVideoWidget->setPlayer(fmTlRenderPlayer); + layout->insertWidget(1, fmVideoWidget, 1); +} + +void MainWindow::ensurePmVideoPreview() +{ + if (pmVideoWidget || !pmPreviewContent) { + return; + } + + auto *layout = qobject_cast(pmPreviewContent->layout()); + if (!layout) { + return; + } + + pmVideoWidget = new TLRenderViewport(pmPreviewPanel); + pmVideoWidget->setMinimumHeight(160); + pmVideoWidget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); + pmVideoWidget->hide(); + pmVideoWidget->setPlayer(pmTlRenderPlayer); + layout->insertWidget(1, pmVideoWidget, 1); +} void MainWindow::showPmImage(const QString &filePath) { @@ -5958,7 +6178,7 @@ void MainWindow::changePmPreview(int delta) } if (!previewOverlay) { previewOverlay = new PreviewOverlay(this); - previewOverlay->setGeometry(geometry()); + previewOverlay->setGeometry(initialOverlayGeometry()); connect(previewOverlay, &PreviewOverlay::closed, this, &MainWindow::closePreview); connect(previewOverlay, &PreviewOverlay::navigateRequested, this, &MainWindow::changePmPreview); } @@ -6005,7 +6225,7 @@ void MainWindow::changePmPreview(int delta) } if (!imagePreviewOverlay) { imagePreviewOverlay = new ImagePreviewOverlay(this); - imagePreviewOverlay->setGeometry(geometry()); + imagePreviewOverlay->setGeometry(initialOverlayGeometry()); connect(imagePreviewOverlay, &ImagePreviewOverlay::closed, this, &MainWindow::closePreview); connect(imagePreviewOverlay, &ImagePreviewOverlay::navigateRequested, this, &MainWindow::changePmPreview); } @@ -6016,7 +6236,7 @@ void MainWindow::changePmPreview(int delta) } if (!previewOverlay) { previewOverlay = new PreviewOverlay(this); - previewOverlay->setGeometry(geometry()); + previewOverlay->setGeometry(initialOverlayGeometry()); connect(previewOverlay, &PreviewOverlay::closed, this, &MainWindow::closePreview); connect(previewOverlay, &PreviewOverlay::navigateRequested, this, &MainWindow::changePmPreview); } @@ -6102,9 +6322,9 @@ void MainWindow::pmNavigateUp() onPmNavigateUp(); } -QStringList MainWindow::getSelectedPmAssetPaths() const -{ - QStringList paths; +QStringList MainWindow::getSelectedPmAssetPaths() const +{ + QStringList paths; QModelIndexList selected; if (pmIsGridMode && pmAssetsGridView && pmAssetsGridView->selectionModel()) { @@ -6119,9 +6339,53 @@ QStringList MainWindow::getSelectedPmAssetPaths() const paths.append(path); } } - - return paths; -} + + return paths; +} + +QString MainWindow::pmCurrentDestinationDir() const +{ + if (pmCurrentProjectId <= 0) { + return QString(); + } + + const Project project = ProjectDB::instance().getProject(pmCurrentProjectId); + const QString watchPath = QDir::cleanPath(project.watchPath); + if (watchPath.isEmpty()) { + return QString(); + } + + if (pmCurrentFolderId <= 0) { + return watchPath; + } + + QStringList pathSegments; + int folderId = pmCurrentFolderId; + const int rootFolderId = ProjectDB::instance().getProjectRootFolderId(pmCurrentProjectId); + + while (folderId > 0 && folderId != rootFolderId) { + QSqlQuery query(ProjectDB::instance().database()); + query.prepare("SELECT name, parent_id FROM virtual_folders WHERE id = ?"); + query.addBindValue(folderId); + if (!query.exec() || !query.next()) { + return watchPath; + } + + pathSegments.prepend(query.value(0).toString()); + folderId = query.value(1).toInt(); + } + + if (folderId != rootFolderId) { + return watchPath; + } + + QString destination = watchPath; + for (const QString &segment : pathSegments) { + destination = QDir(destination).filePath(segment); + } + + return QDir::cleanPath(destination); +} void MainWindow::restoreProjectManagerState() { @@ -6251,8 +6515,8 @@ void MainWindow::navigateToProjectAsset(int projectId, int assetId, const QStrin match = (srcIdx.data(ProjectAssetsModel::IdRole).toInt() == assetId); } if (!match && !filePath.isEmpty()) { - match = srcIdx.data(ProjectAssetsModel::FilePathRole).toString().compare(filePath, Qt::CaseInsensitive) == 0; - } + match = ProjectPathUtils::pathsEqual(srcIdx.data(ProjectAssetsModel::FilePathRole).toString(), filePath); + } if (match) { targetRow = row; break; @@ -6293,26 +6557,16 @@ void MainWindow::onPmCut() } } -void MainWindow::onPmPaste() -{ - if (pmClipboard.isEmpty()) return; - - // Get current folder path from the first item's directory or project watch path - QString destDir; - if (pmCurrentProjectId > 0) { - QVector projects = ProjectDB::instance().listProjects(); - for (const Project& p : projects) { - if (p.id == pmCurrentProjectId) { - destDir = p.watchPath; - break; - } - } - } - - if (destDir.isEmpty()) { - QMessageBox::warning(this, "Paste", "No destination folder available"); - return; - } +void MainWindow::onPmPaste() +{ + if (pmClipboard.isEmpty()) return; + + const QString destDir = pmCurrentDestinationDir(); + + if (destDir.isEmpty()) { + QMessageBox::warning(this, "Paste", "No destination folder available"); + return; + } auto &q = FileOpsQueue::instance(); if (pmClipboardCutMode) { @@ -6328,9 +6582,7 @@ void MainWindow::onPmPaste() pmAssetsModel->setProjectId(pmCurrentProjectId); } - if (!fileOpsDialog) fileOpsDialog = new FileOpsProgressDialog(this); - fileOpsDialog->show(); - fileOpsDialog->raise(); + showFileOpsDialog(); pmClipboard.clear(); pmClipboardCutMode = false; @@ -6356,8 +6608,7 @@ void MainWindow::onPmDelete() } FileOpsQueue::instance().enqueueDelete(paths); - if (!fileOpsDialog) fileOpsDialog = new FileOpsProgressDialog(this); - fileOpsDialog->show(); + showFileOpsDialog(); } void MainWindow::onPmRename() @@ -6387,24 +6638,14 @@ void MainWindow::onPmRename() } } -void MainWindow::onPmNewFolder() -{ - // Create folder in current project's watch path - QString destDir; - if (pmCurrentProjectId > 0) { - QVector projects = ProjectDB::instance().listProjects(); - for (const Project& p : projects) { - if (p.id == pmCurrentProjectId) { - destDir = p.watchPath; - break; - } - } - } - - if (destDir.isEmpty()) { - QMessageBox::warning(this, "New Folder", "No project selected"); - return; - } +void MainWindow::onPmNewFolder() +{ + const QString destDir = pmCurrentDestinationDir(); + + if (destDir.isEmpty()) { + QMessageBox::warning(this, "New Folder", "No project selected"); + return; + } bool ok = false; QString folderName = QInputDialog::getText(this, "New Folder", "Folder name:", QLineEdit::Normal, "New Folder", &ok); @@ -6594,11 +6835,19 @@ void MainWindow::setupConnections() connect(&DB::instance(), &DB::assetVersionsChanged, this, &MainWindow::onAssetVersionsChanged); - // Note: We intentionally do NOT refresh File Manager after file operations. - // QFileSystemModel has its own internal file watcher that auto-updates. - // Triggering onFmRefresh() would cause unnecessary 1sec+ delays after every operation. - // Use F5 or View > Refresh for manual refresh if needed. -} + auto &fileOpsQueue = FileOpsQueue::instance(); + auto pendingFileOps = std::make_shared>(); + connect(&fileOpsQueue, &FileOpsQueue::currentItemChanged, this, [pendingFileOps](const FileOpsQueue::Item &item) { + pendingFileOps->insert(item.id, item); + }); + connect(&fileOpsQueue, &FileOpsQueue::itemFinished, this, [this, pendingFileOps](int id, bool success, const QString &) { + const FileOpsQueue::Item item = pendingFileOps->take(id); + if (!success) { + return; + } + refreshFileManagerViewsForPaths(item.sources, item.destination); + }); +} void MainWindow::onTabChanged(int index) @@ -7456,7 +7705,7 @@ void MainWindow::showPreview(int index) } if (!imagePreviewOverlay) { imagePreviewOverlay = new ImagePreviewOverlay(this); - imagePreviewOverlay->setGeometry(geometry()); + imagePreviewOverlay->setGeometry(initialOverlayGeometry()); connect(imagePreviewOverlay, &ImagePreviewOverlay::closed, this, &MainWindow::closePreview); connect(imagePreviewOverlay, &ImagePreviewOverlay::navigateRequested, this, &MainWindow::changePreview); } else { @@ -7474,7 +7723,7 @@ void MainWindow::showPreview(int index) if (!previewOverlay) { previewOverlay = new PreviewOverlay(this); // Center overlay to the app window instead of screen top-left - previewOverlay->setGeometry(geometry()); + previewOverlay->setGeometry(initialOverlayGeometry()); connect(previewOverlay, &PreviewOverlay::closed, this, &MainWindow::closePreview); connect(previewOverlay, &PreviewOverlay::navigateRequested, this, &MainWindow::changePreview); @@ -7507,8 +7756,8 @@ void MainWindow::showPreview(int index) } } -void MainWindow::closePreview() -{ +void MainWindow::closePreview() +{ // Preserve the last asset index for restoring Asset Manager focus const int lastAssetIndex = previewIndex; previewIndex = -1; @@ -7527,18 +7776,18 @@ void MainWindow::closePreview() imagePreviewOverlay = nullptr; } - // 1) If preview was opened from File Manager, restore focus/selection there - if (fmOverlaySourceView && fmOverlayCurrentIndex.isValid()) { - if (QItemSelectionModel *sel = fmOverlaySourceView->selectionModel()) { - sel->setCurrentIndex(fmOverlayCurrentIndex, QItemSelectionModel::ClearAndSelect | QItemSelectionModel::Rows); - } else { - fmOverlaySourceView->setCurrentIndex(fmOverlayCurrentIndex); - } - fmOverlaySourceView->setFocus(); - return; // Done - } - - // 2) Otherwise, restore focus/selection to Asset Manager + // 1) If preview was opened from File Manager, restore focus/selection there + if (fmOverlaySourceView && fmOverlayCurrentIndex.isValid()) { + if (QItemSelectionModel *sel = fmOverlaySourceView->selectionModel()) { + sel->setCurrentIndex(fmOverlayCurrentIndex, QItemSelectionModel::ClearAndSelect | QItemSelectionModel::Rows); + } else { + fmOverlaySourceView->setCurrentIndex(fmOverlayCurrentIndex); + } + fmOverlaySourceView->setFocus(); + return; // Done + } + + // 2) Otherwise, restore focus/selection to Asset Manager if (lastAssetIndex >= 0) { if (isGridMode && assetGridView && assetsModel) { QModelIndex idx = assetsModel->index(lastAssetIndex, 0); @@ -7625,7 +7874,7 @@ void MainWindow::changeFmPreview(int delta) } if (!imagePreviewOverlay) { imagePreviewOverlay = new ImagePreviewOverlay(this); - imagePreviewOverlay->setGeometry(geometry()); + imagePreviewOverlay->setGeometry(initialOverlayGeometry()); connect(imagePreviewOverlay, &ImagePreviewOverlay::closed, this, &MainWindow::closePreview); connect(imagePreviewOverlay, &ImagePreviewOverlay::navigateRequested, this, &MainWindow::changeFmPreview); } @@ -7637,7 +7886,7 @@ void MainWindow::changeFmPreview(int delta) } if (!previewOverlay) { previewOverlay = new PreviewOverlay(this); - previewOverlay->setGeometry(geometry()); + previewOverlay->setGeometry(initialOverlayGeometry()); connect(previewOverlay, &PreviewOverlay::closed, this, &MainWindow::closePreview); connect(previewOverlay, &PreviewOverlay::navigateRequested, this, &MainWindow::changeFmPreview); } @@ -7737,7 +7986,7 @@ void MainWindow::changeFmPreview(int delta) } if (!previewOverlay) { previewOverlay = new PreviewOverlay(this); - previewOverlay->setGeometry(geometry()); + previewOverlay->setGeometry(initialOverlayGeometry()); connect(previewOverlay, &PreviewOverlay::closed, this, &MainWindow::closePreview); connect(previewOverlay, &PreviewOverlay::navigateRequested, this, &MainWindow::changeFmPreview); } @@ -7793,6 +8042,12 @@ void MainWindow::updateInfoPanel() infoFileSize->clear(); infoFileType->clear(); infoDimensions->clear(); + infoVideoCodec->clear(); infoVideoCodec->setVisible(false); + infoAudioCodec->clear(); infoAudioCodec->setVisible(false); + infoBitrate->clear(); infoBitrate->setVisible(false); + infoTimecode->clear(); infoTimecode->setVisible(false); + infoCameraInfo->clear(); infoCameraInfo->setVisible(false); + infoShotInfo->clear(); infoShotInfo->setVisible(false); infoCreated->clear(); infoModified->clear(); infoPermissions->clear(); @@ -7886,15 +8141,96 @@ void MainWindow::updateInfoPanel() } else { dimensionsStr = "Dimensions: Unable to read"; } + // Hide video-specific metadata labels for images + infoVideoCodec->clear(); infoVideoCodec->setVisible(false); + infoAudioCodec->clear(); infoAudioCodec->setVisible(false); + infoBitrate->clear(); infoBitrate->setVisible(false); + infoTimecode->clear(); infoTimecode->setVisible(false); + infoCameraInfo->clear(); infoCameraInfo->setVisible(false); + infoShotInfo->clear(); infoShotInfo->setVisible(false); } // Check if it's a video else { QStringList videoExts = {"mp4", "mov", "avi", "mkv", "wmv", "flv", "webm", "m4v", "mpg", "mpeg", "3gp", "mts", "m2ts", "mxf"}; if (videoExts.contains(fileType.toLower())) { - // TODO: Extract video metadata using tlRender/FFmpeg - // For now, just show "Video file" - dimensionsStr = "Video file"; + MediaInfo::VideoMetadata meta; + QString metaError; + if (MediaInfo::probeVideoFile(filePath, meta, &metaError)) { + // Dimensions + if (meta.width > 0 && meta.height > 0) { + dimensionsStr = QString("Dimensions: %1 x %2") + .arg(meta.width).arg(meta.height); + if (meta.fps > 0.0) { + dimensionsStr += QString(" @ %1 fps").arg(meta.fps, 0, 'f', 2); + } + } + + // Video codec + QString vcodec = meta.videoCodec; + if (!meta.videoProfile.isEmpty()) { + vcodec += " (" + meta.videoProfile + ")"; + } + infoVideoCodec->setText("Video Codec: " + vcodec); + infoVideoCodec->setVisible(!vcodec.isEmpty()); + + // Audio codec + channels + QString acodec = meta.audioCodec; + if (meta.audioChannels > 0) { + acodec += QString(" — %1 ch").arg(meta.audioChannels); + } + infoAudioCodec->setText("Audio: " + acodec); + infoAudioCodec->setVisible(!acodec.isEmpty()); + + // Bitrate (Mbps) + if (meta.bitrate > 0) { + double mbps = meta.bitrate / 1'000'000.0; + infoBitrate->setText(QString("Bitrate: %1 Mbps").arg(mbps, 0, 'f', 2)); + infoBitrate->setVisible(true); + } else { + infoBitrate->clear(); infoBitrate->setVisible(false); + } + + // Timecode + if (meta.hasTimecode && !meta.timecodeStart.isEmpty()) { + infoTimecode->setText("Timecode: " + meta.timecodeStart); + infoTimecode->setVisible(true); + } else { + infoTimecode->clear(); infoTimecode->setVisible(false); + } + + // Camera info + QStringList cameraParts; + if (!meta.cameraName.isEmpty()) cameraParts << meta.cameraName; + if (!meta.cameraModel.isEmpty()) cameraParts << meta.cameraModel; + if (!meta.lens.isEmpty()) cameraParts << "Lens: " + meta.lens; + if (!cameraParts.isEmpty()) { + infoCameraInfo->setText("Camera: " + cameraParts.join(" / ")); + infoCameraInfo->setVisible(true); + } else { + infoCameraInfo->clear(); infoCameraInfo->setVisible(false); + } + + // Shot info (reel / scene / take) + QStringList shotParts; + if (!meta.reelName.isEmpty()) shotParts << "Reel: " + meta.reelName; + if (!meta.scene.isEmpty()) shotParts << "Scene: " + meta.scene; + if (!meta.take.isEmpty()) shotParts << "Take: " + meta.take; + if (!shotParts.isEmpty()) { + infoShotInfo->setText(shotParts.join(" | ")); + infoShotInfo->setVisible(true); + } else { + infoShotInfo->clear(); infoShotInfo->setVisible(false); + } + } else { + dimensionsStr = "Video file"; + infoVideoCodec->clear(); infoVideoCodec->setVisible(false); + infoAudioCodec->clear(); infoAudioCodec->setVisible(false); + infoBitrate->clear(); infoBitrate->setVisible(false); + infoTimecode->clear(); infoTimecode->setVisible(false); + infoCameraInfo->clear(); infoCameraInfo->setVisible(false); + infoShotInfo->clear(); infoShotInfo->setVisible(false); + } } } } @@ -7973,6 +8309,12 @@ void MainWindow::updateInfoPanel() infoFileSize->clear(); infoFileType->clear(); infoDimensions->clear(); + infoVideoCodec->clear(); infoVideoCodec->setVisible(false); + infoAudioCodec->clear(); infoAudioCodec->setVisible(false); + infoBitrate->clear(); infoBitrate->setVisible(false); + infoTimecode->clear(); infoTimecode->setVisible(false); + infoCameraInfo->clear(); infoCameraInfo->setVisible(false); + infoShotInfo->clear(); infoShotInfo->setVisible(false); infoCreated->clear(); infoModified->clear(); infoPermissions->clear(); @@ -8547,12 +8889,23 @@ void MainWindow::onImportComplete() } } -bool MainWindow::eventFilter(QObject *watched, QEvent *event) -{ - // During UI construction, ignore heavy logic in event filter - if (m_initializing) { - return false; // do not intercept; let normal processing continue - } +bool MainWindow::eventFilter(QObject *watched, QEvent *event) +{ + // During UI construction, ignore heavy logic in event filter + if (m_initializing) { + return false; // do not intercept; let normal processing continue + } + + if (fmSecondaryPane && fmSecondaryPane->isVisible() && event->type() == QEvent::MouseButtonPress) { + if (watched == fmGridView || watched == fmListView || + (fmGridView && watched == fmGridView->viewport()) || + (fmListView && watched == fmListView->viewport()) || + watched == fmPathBar || watched == fmPreviewPanel || + watched == fmImageView || (fmImageView && watched == fmImageView->viewport()) || + watched == fmPreviewContent || watched == fmTree || (fmTree && watched == fmTree->viewport())) { + setActiveFmPane(true); + } + } // Handle version badge clicks on Project Manager grid view if (pmAssetsGridView && watched == pmAssetsGridView->viewport()) { @@ -8750,7 +9103,7 @@ bool MainWindow::eventFilter(QObject *watched, QEvent *event) dragEvent->accept(); return true; } - const bool shift = dragEvent->keyboardModifiers().testFlag(Qt::ShiftModifier); + const bool shift = dragEvent->modifiers().testFlag(Qt::ShiftModifier); dragEvent->setDropAction(shift ? Qt::MoveAction : Qt::CopyAction); dragEvent->accept(); return true; @@ -8798,7 +9151,7 @@ bool MainWindow::eventFilter(QObject *watched, QEvent *event) dragEvent->accept(); return true; } - const bool shift = dragEvent->keyboardModifiers().testFlag(Qt::ShiftModifier); + const bool shift = dragEvent->modifiers().testFlag(Qt::ShiftModifier); dragEvent->setDropAction(shift ? Qt::MoveAction : Qt::CopyAction); dragEvent->accept(); return true; @@ -8852,18 +9205,13 @@ bool MainWindow::eventFilter(QObject *watched, QEvent *event) return true; } - const bool shift = dropEvent->keyboardModifiers().testFlag(Qt::ShiftModifier); - // Ensure any preview locks are released before file ops - if (fmTlRenderPlayer) { fmTlRenderPlayer->stop(); } - if (shift) FileOpsQueue::instance().enqueueMove(sources, destDir); - else FileOpsQueue::instance().enqueueCopy(sources, destDir); - if (!fileOpsDialog) fileOpsDialog = new FileOpsProgressDialog(this); - fileOpsDialog->show(); fileOpsDialog->raise(); fileOpsDialog->activateWindow(); - statusBar()->showMessage(QString("Queued %1 item(s) for %2").arg(sources.size()).arg(shift ? "move" : "copy"), 3000); - } - dropEvent->setDropAction(dropEvent->keyboardModifiers().testFlag(Qt::ShiftModifier) ? Qt::MoveAction : Qt::CopyAction); - dropEvent->accept(); - return true; + const bool shift = dropEvent->modifiers().testFlag(Qt::ShiftModifier); + queueFmFileOperation(sources, destDir, shift); + statusBar()->showMessage(QString("Queued %1 item(s) for %2").arg(sources.size()).arg(shift ? "move" : "copy"), 3000); + } + dropEvent->setDropAction(dropEvent->modifiers().testFlag(Qt::ShiftModifier) ? Qt::MoveAction : Qt::CopyAction); + dropEvent->accept(); + return true; } } // Handle drops on File Manager folder tree (filesystem) @@ -8871,10 +9219,10 @@ bool MainWindow::eventFilter(QObject *watched, QEvent *event) if (event->type() == QEvent::DragEnter) { QDragEnterEvent *dragEvent = static_cast(event); if (dragEvent->mimeData()->hasUrls() || dragEvent->mimeData()->hasFormat("application/x-kasset-asset-ids") || dragEvent->mimeData()->hasFormat("application/x-kasset-sequence-urls")) { - const bool shift = dragEvent->keyboardModifiers().testFlag(Qt::ShiftModifier); - dragEvent->setDropAction(shift ? Qt::MoveAction : Qt::CopyAction); - dragEvent->accept(); - return true; + const bool shift = dragEvent->modifiers().testFlag(Qt::ShiftModifier); + dragEvent->setDropAction(shift ? Qt::MoveAction : Qt::CopyAction); + dragEvent->accept(); + return true; } } else if (event->type() == QEvent::DragMove) { QDragMoveEvent *dragEvent = static_cast(event); @@ -8915,10 +9263,10 @@ bool MainWindow::eventFilter(QObject *watched, QEvent *event) dragEvent->accept(); return true; } - const bool shift = dragEvent->keyboardModifiers().testFlag(Qt::ShiftModifier); - dragEvent->setDropAction(shift ? Qt::MoveAction : Qt::CopyAction); - dragEvent->accept(); - return true; + const bool shift = dragEvent->modifiers().testFlag(Qt::ShiftModifier); + dragEvent->setDropAction(shift ? Qt::MoveAction : Qt::CopyAction); + dragEvent->accept(); + return true; } } else if (event->type() == QEvent::Drop) { QDropEvent *dropEvent = static_cast(event); @@ -8958,18 +9306,13 @@ bool MainWindow::eventFilter(QObject *watched, QEvent *event) return true; } - const bool shift = dropEvent->keyboardModifiers().testFlag(Qt::ShiftModifier); - // Ensure any preview locks are released before file ops - if (fmTlRenderPlayer) { fmTlRenderPlayer->stop(); } - if (shift) FileOpsQueue::instance().enqueueMove(sources, destDir); - else FileOpsQueue::instance().enqueueCopy(sources, destDir); - if (!fileOpsDialog) fileOpsDialog = new FileOpsProgressDialog(this); - fileOpsDialog->show(); fileOpsDialog->raise(); fileOpsDialog->activateWindow(); - statusBar()->showMessage(QString("Queued %1 item(s) for %2").arg(sources.size()).arg(shift ? "move" : "copy"), 3000); - } - dropEvent->setDropAction(dropEvent->keyboardModifiers().testFlag(Qt::ShiftModifier) ? Qt::MoveAction : Qt::CopyAction); - dropEvent->accept(); - return true; + const bool shift = dropEvent->modifiers().testFlag(Qt::ShiftModifier); + queueFmFileOperation(sources, destDir, shift); + statusBar()->showMessage(QString("Queued %1 item(s) for %2").arg(sources.size()).arg(shift ? "move" : "copy"), 3000); + } + dropEvent->setDropAction(dropEvent->modifiers().testFlag(Qt::ShiftModifier) ? Qt::MoveAction : Qt::CopyAction); + dropEvent->accept(); + return true; } } @@ -10113,9 +10456,9 @@ void MainWindow::updateFmPreviewForIndex(const QModelIndex &idx) // Try OpenImageIO first for advanced formats (PSD/EXR/TIFF/etc.) QImage img; - if (OIIOImageLoader::isOIIOSupported(path)) { - img = OIIOImageLoader::loadImage(path, 0, 0, OIIOImageLoader::ColorSpace::sRGB); - } + if (OIIOImageLoader::isOIIOSupported(path)) { + img = OIIOImageLoader::loadImage(path, 0, 0); + } if (img.isNull()) { QImageReader reader(path); reader.setAutoTransform(true); @@ -10240,14 +10583,14 @@ void MainWindow::updateFmPreviewForIndex(const QModelIndex &idx) } // UTF-16 LE BOM if (n >= 2 && b[0] == 0xFF && b[1] == 0xFE) { - return QString::fromUtf16(reinterpret_cast(b + 2), (n - 2) / 2); + return QString::fromUtf16(reinterpret_cast(b + 2), (n - 2) / 2); } // UTF-16 BE BOM if (n >= 2 && b[0] == 0xFE && b[1] == 0xFF) { const int ulen = (n - 2) / 2; - QVector buf; buf.resize(ulen); - for (int i = 0; i < ulen; ++i) buf[i] = (ushort(b[2 + 2*i]) << 8) | ushort(b[2 + 2*i + 1]); - return QString::fromUtf16(buf.constData(), ulen); + QVector buf; buf.resize(ulen); + for (int i = 0; i < ulen; ++i) buf[i] = char16_t((ushort(b[2 + 2*i]) << 8) | ushort(b[2 + 2*i + 1])); + return QString::fromUtf16(buf.constData(), ulen); } // Heuristic: UTF-16 without BOM (look for lots of NULs at odd/even positions) const int sample = qMin(n, 4096); @@ -10259,12 +10602,12 @@ void MainWindow::updateFmPreviewForIndex(const QModelIndex &idx) const bool le = (zeroOdd > zeroEven); const int ulen = n / 2; if (le) { - return QString::fromUtf16(reinterpret_cast(b), ulen); - } else { - QVector buf; buf.resize(ulen); - for (int i = 0; i < ulen; ++i) buf[i] = (ushort(b[2*i]) << 8) | ushort(b[2*i + 1]); - return QString::fromUtf16(buf.constData(), ulen); - } + return QString::fromUtf16(reinterpret_cast(b), ulen); + } else { + QVector buf; buf.resize(ulen); + for (int i = 0; i < ulen; ++i) buf[i] = char16_t((ushort(b[2*i]) << 8) | ushort(b[2*i + 1])); + return QString::fromUtf16(buf.constData(), ulen); + } } // Default: UTF-8, fallback to local 8-bit if many replacement chars QString s = QString::fromUtf8(reinterpret_cast(b), n); @@ -10381,7 +10724,8 @@ if (isExcelFile(ext)) { if (isVideoFile(ext)) { fmCurrentPreviewPath = path; if (fmVideoWidget) { - fmVideoWidget->show(); + ensureFmVideoPreview(); + if (fmVideoWidget) fmVideoWidget->show(); // CRITICAL: Set video widget AFTER show() to ensure valid window handle if (fmTlRenderPlayer) fmVideoWidget->setPlayer(fmTlRenderPlayer); } @@ -10398,7 +10742,8 @@ if (isExcelFile(ext)) { if (fmMuteBtn) fmMuteBtn->show(); if (fmTlRenderPlayer) { - fmTlRenderPlayer->loadMedia(path); + ensureFmVideoPreview(); + fmTlRenderPlayer->loadMedia(path); fmTlRenderPlayer->pause(); if (fmPlayPauseBtn) fmPlayPauseBtn->setIcon(icoMediaPlay(ThemeManager::instance().iconColor())); } @@ -10480,10 +10825,10 @@ void MainWindow::loadFmSequenceFrame(int index) fmSequenceCurrentIndex = index; const QString path = fmSequenceFramePaths.at(index); QPixmap px; - if (OIIOImageLoader::isOIIOSupported(path)) { - QImage img = OIIOImageLoader::loadImage(path, 0, 0, OIIOImageLoader::ColorSpace::sRGB); - if (!img.isNull()) px = QPixmap::fromImage(img); - } + if (OIIOImageLoader::isOIIOSupported(path)) { + QImage img = OIIOImageLoader::loadImage(path, 0, 0); + if (!img.isNull()) px = QPixmap::fromImage(img); + } if (px.isNull()) { QImageReader reader(path); reader.setAutoTransform(true); @@ -10610,6 +10955,12 @@ void MainWindow::updateFmInfoPanel() if (fmInfoFileSize) fmInfoFileSize->clear(); if (fmInfoFileType) fmInfoFileType->clear(); if (fmInfoDimensions) fmInfoDimensions->clear(); + if (fmInfoVideoCodec) { fmInfoVideoCodec->clear(); fmInfoVideoCodec->setVisible(false); } + if (fmInfoAudioCodec) { fmInfoAudioCodec->clear(); fmInfoAudioCodec->setVisible(false); } + if (fmInfoBitrate) { fmInfoBitrate->clear(); fmInfoBitrate->setVisible(false); } + if (fmInfoTimecode) { fmInfoTimecode->clear(); fmInfoTimecode->setVisible(false); } + if (fmInfoCameraInfo) { fmInfoCameraInfo->clear(); fmInfoCameraInfo->setVisible(false); } + if (fmInfoShotInfo) { fmInfoShotInfo->clear(); fmInfoShotInfo->setVisible(false); } if (fmInfoCreated) fmInfoCreated->clear(); if (fmInfoModified) fmInfoModified->clear(); if (fmInfoPermissions) fmInfoPermissions->clear(); @@ -10680,17 +11031,110 @@ void MainWindow::updateFmInfoPanel() } else { dimensionsStr = "Dimensions: Unable to read"; } + // Hide video-specific metadata labels for images + if (fmInfoVideoCodec) { fmInfoVideoCodec->clear(); fmInfoVideoCodec->setVisible(false); } + if (fmInfoAudioCodec) { fmInfoAudioCodec->clear(); fmInfoAudioCodec->setVisible(false); } + if (fmInfoBitrate) { fmInfoBitrate->clear(); fmInfoBitrate->setVisible(false); } + if (fmInfoTimecode) { fmInfoTimecode->clear(); fmInfoTimecode->setVisible(false); } + if (fmInfoCameraInfo) { fmInfoCameraInfo->clear(); fmInfoCameraInfo->setVisible(false); } + if (fmInfoShotInfo) { fmInfoShotInfo->clear(); fmInfoShotInfo->setVisible(false); } } else { QStringList videoExts = {"mp4", "mov", "avi", "mkv", "wmv", "flv", "webm", "m4v", "mpg", "mpeg", "3gp", "mts", "m2ts", "mxf"}; if (videoExts.contains(ext)) { - // TODO: Extract video metadata using tlRender/FFmpeg - // For now, just show "Video file" - dimensionsStr = "Video file"; + MediaInfo::VideoMetadata meta; + QString metaError; + if (MediaInfo::probeVideoFile(filePath, meta, &metaError)) { + // Dimensions + if (meta.width > 0 && meta.height > 0) { + dimensionsStr = QString("Dimensions: %1 x %2") + .arg(meta.width).arg(meta.height); + if (meta.fps > 0.0) { + dimensionsStr += QString(" @ %1 fps").arg(meta.fps, 0, 'f', 2); + } + } + + // Video codec + QString vcodec = meta.videoCodec; + if (!meta.videoProfile.isEmpty()) { + vcodec += " (" + meta.videoProfile + ")"; + } + if (fmInfoVideoCodec) { + fmInfoVideoCodec->setText("Video Codec: " + vcodec); + fmInfoVideoCodec->setVisible(!vcodec.isEmpty()); + } + + // Audio codec + channels + QString acodec = meta.audioCodec; + if (meta.audioChannels > 0) { + acodec += QString(" — %1 ch").arg(meta.audioChannels); + } + if (fmInfoAudioCodec) { + fmInfoAudioCodec->setText("Audio: " + acodec); + fmInfoAudioCodec->setVisible(!acodec.isEmpty()); + } + + // Bitrate (Mbps) + if (meta.bitrate > 0) { + double mbps = meta.bitrate / 1'000'000.0; + if (fmInfoBitrate) { + fmInfoBitrate->setText(QString("Bitrate: %1 Mbps").arg(mbps, 0, 'f', 2)); + fmInfoBitrate->setVisible(true); + } + } else { + if (fmInfoBitrate) { fmInfoBitrate->clear(); fmInfoBitrate->setVisible(false); } + } + + // Timecode + if (meta.hasTimecode && !meta.timecodeStart.isEmpty()) { + if (fmInfoTimecode) { + fmInfoTimecode->setText("Timecode: " + meta.timecodeStart); + fmInfoTimecode->setVisible(true); + } + } else { + if (fmInfoTimecode) { fmInfoTimecode->clear(); fmInfoTimecode->setVisible(false); } + } + + // Camera info + QStringList cameraParts; + if (!meta.cameraName.isEmpty()) cameraParts << meta.cameraName; + if (!meta.cameraModel.isEmpty()) cameraParts << meta.cameraModel; + if (!meta.lens.isEmpty()) cameraParts << "Lens: " + meta.lens; + if (!cameraParts.isEmpty()) { + if (fmInfoCameraInfo) { + fmInfoCameraInfo->setText("Camera: " + cameraParts.join(" / ")); + fmInfoCameraInfo->setVisible(true); + } + } else { + if (fmInfoCameraInfo) { fmInfoCameraInfo->clear(); fmInfoCameraInfo->setVisible(false); } + } + + // Shot info (reel / scene / take) + QStringList shotParts; + if (!meta.reelName.isEmpty()) shotParts << "Reel: " + meta.reelName; + if (!meta.scene.isEmpty()) shotParts << "Scene: " + meta.scene; + if (!meta.take.isEmpty()) shotParts << "Take: " + meta.take; + if (!shotParts.isEmpty()) { + if (fmInfoShotInfo) { + fmInfoShotInfo->setText(shotParts.join(" | ")); + fmInfoShotInfo->setVisible(true); + } + } else { + if (fmInfoShotInfo) { fmInfoShotInfo->clear(); fmInfoShotInfo->setVisible(false); } + } + } else { + dimensionsStr = "Video file"; + if (fmInfoVideoCodec) { fmInfoVideoCodec->clear(); fmInfoVideoCodec->setVisible(false); } + if (fmInfoAudioCodec) { fmInfoAudioCodec->clear(); fmInfoAudioCodec->setVisible(false); } + if (fmInfoBitrate) { fmInfoBitrate->clear(); fmInfoBitrate->setVisible(false); } + if (fmInfoTimecode) { fmInfoTimecode->clear(); fmInfoTimecode->setVisible(false); } + if (fmInfoCameraInfo) { fmInfoCameraInfo->clear(); fmInfoCameraInfo->setVisible(false); } + if (fmInfoShotInfo) { fmInfoShotInfo->clear(); fmInfoShotInfo->setVisible(false); } + } } } - fmInfoDimensions->setText(dimensionsStr); + if (fmInfoDimensions) fmInfoDimensions->setText(dimensionsStr); } // Update created date @@ -10738,7 +11182,7 @@ void MainWindow::onFmOpenOverlay() } if (!imagePreviewOverlay) { imagePreviewOverlay = new ImagePreviewOverlay(this); - imagePreviewOverlay->setGeometry(geometry()); + imagePreviewOverlay->setGeometry(initialOverlayGeometry()); connect(imagePreviewOverlay, &ImagePreviewOverlay::closed, this, &MainWindow::closePreview); connect(imagePreviewOverlay, &ImagePreviewOverlay::navigateRequested, this, &MainWindow::changeFmPreview); } @@ -10750,7 +11194,7 @@ void MainWindow::onFmOpenOverlay() } if (!previewOverlay) { previewOverlay = new PreviewOverlay(this); - previewOverlay->setGeometry(geometry()); + previewOverlay->setGeometry(initialOverlayGeometry()); connect(previewOverlay, &PreviewOverlay::closed, this, &MainWindow::closePreview); connect(previewOverlay, &PreviewOverlay::navigateRequested, this, &MainWindow::changeFmPreview); } else { @@ -10761,25 +11205,25 @@ void MainWindow::onFmOpenOverlay() }; // Check if secondary pane is active and has focus - if (fmSecondaryPane && fmSecondaryPane->isVisible() && !fmPrimaryPaneActive) { - QModelIndex idx = fmSecondaryPane->currentIndex(); - if (idx.isValid()) { - // Get the file path from secondary pane - QStringList paths = fmSecondaryPane->selectedPaths(); - if (!paths.isEmpty()) { - QString path = paths.first(); - QFileInfo info(path); - if (info.exists() && !info.isDir()) { - // Mark that overlay was opened from secondary pane for navigation - fmOverlayFromSecondaryPane = true; - fmOverlayCurrentIndex = QPersistentModelIndex(idx); - fmOverlaySourceView = nullptr; - showFmOverlayForPath(path); - return; - } - } - } - } + if (fmSecondaryPane && fmSecondaryPane->isVisible() && !fmPrimaryPaneActive) { + QModelIndex idx = fmSecondaryPane->currentIndex(); + if (idx.isValid()) { + // Get the file path from secondary pane + QStringList paths = fmSecondaryPane->selectedPaths(); + if (!paths.isEmpty()) { + QString path = paths.first(); + QFileInfo info(path); + if (info.exists() && !info.isDir()) { + // Mark that overlay was opened from secondary pane for navigation + fmOverlayFromSecondaryPane = true; + fmOverlayCurrentIndex = QPersistentModelIndex(idx); + fmOverlaySourceView = nullptr; + showFmOverlayForPath(path); + return; + } + } + } + } // Determine current selection in FM and open full-screen overlay (primary pane) QModelIndex idx; @@ -10804,7 +11248,7 @@ void MainWindow::onFmOpenOverlay() if (!previewOverlay) { previewOverlay = new PreviewOverlay(this); // Center overlay to the app window instead of screen top-left - previewOverlay->setGeometry(geometry()); + previewOverlay->setGeometry(initialOverlayGeometry()); connect(previewOverlay, &PreviewOverlay::closed, this, &MainWindow::closePreview); connect(previewOverlay, &PreviewOverlay::navigateRequested, this, &MainWindow::changeFmPreview); } else { diff --git a/native/qt6/src/mainwindow.h b/native/qt6/src/mainwindow.h index 3a400938..5b87fe3f 100644 --- a/native/qt6/src/mainwindow.h +++ b/native/qt6/src/mainwindow.h @@ -223,10 +223,13 @@ private slots: void onFmTreeChildrenFetched(const QModelIndex &parent); // Handle async tree fetch completion private: + QRect initialOverlayGeometry() const; QString fmPathForIndex(const QModelIndex& idx) const; QModelIndex fmIndexForPath(const QString& path); void fmRefreshTreeModel(); void releaseAnyPreviewLocksForPaths(const QStringList& paths); + void queueFmFileOperation(const QStringList& sources, const QString& destDir, bool moveRequested); + void refreshFileManagerViewsForPaths(const QStringList& paths, const QString& destination = QString()); void importToAssetLibrary(const QStringList& filePaths, const QStringList& folderPaths); void updateFmInfoPanel(); void fmNavigateToPath(const QString& path, bool addToHistory = true); @@ -358,6 +361,12 @@ private slots: QLabel *infoFileSize; QLabel *infoFileType; QLabel *infoDimensions; + QLabel *infoVideoCodec; + QLabel *infoAudioCodec; + QLabel *infoBitrate; + QLabel *infoTimecode; + QLabel *infoCameraInfo; + QLabel *infoShotInfo; QLabel *infoCreated; QLabel *infoModified; QLabel *infoPermissions; @@ -473,6 +482,7 @@ private slots: class QGraphicsScene *fmImageScene = nullptr; class QGraphicsPixmapItem *fmImageItem = nullptr; TLRenderViewport *fmVideoWidget = nullptr; // tlRender viewport for video playback + QWidget *fmPreviewContent = nullptr; // Additional preview widgets class QPlainTextEdit *fmTextView = nullptr; // TXT/LOG class QTableView *fmCsvView = nullptr; // CSV table @@ -506,6 +516,8 @@ private slots: // Helpers for tree/context operations QStringList getSelectedFmTreePaths() const; void onFmPasteInto(const QString& destDir); + bool confirmAndQueueFmDelete(const QStringList& paths, bool permanentDelete); + void showFileOpsDialog(); void doPermanentDelete(const QStringList& paths); QSlider *fmPositionSlider; @@ -532,6 +544,12 @@ private slots: QLabel *fmInfoFileSize = nullptr; QLabel *fmInfoFileType = nullptr; QLabel *fmInfoDimensions = nullptr; + QLabel *fmInfoVideoCodec = nullptr; + QLabel *fmInfoAudioCodec = nullptr; + QLabel *fmInfoBitrate = nullptr; + QLabel *fmInfoTimecode = nullptr; + QLabel *fmInfoCameraInfo = nullptr; + QLabel *fmInfoShotInfo = nullptr; QLabel *fmInfoCreated = nullptr; QLabel *fmInfoModified = nullptr; QLabel *fmInfoPermissions = nullptr; @@ -548,6 +566,8 @@ private slots: // Helpers void updateFmPreviewForIndex(const QModelIndex &idx); void clearFmPreview(); + void ensureFmVideoPreview(); + void ensurePmVideoPreview(); // Dual-pane File Manager support FileManagerPane *fmSecondaryPane = nullptr; // Secondary pane (optional, togglable) @@ -619,6 +639,7 @@ private slots: class QGraphicsScene *pmImageScene = nullptr; class QGraphicsPixmapItem *pmImageItem = nullptr; TLRenderViewport *pmVideoWidget = nullptr; + QWidget *pmPreviewContent = nullptr; class TLRenderPlayer *pmTlRenderPlayer = nullptr; // Media controls @@ -671,6 +692,7 @@ private slots: void pmNavigateBack(); void pmNavigateUp(); QStringList getSelectedPmAssetPaths() const; + QString pmCurrentDestinationDir() const; void restoreProjectManagerState(); void saveProjectManagerState(QSettings& s); QModelIndex pmIndexForProjectId(int projectId) const; diff --git a/native/qt6/src/media/codemap.md b/native/qt6/src/media/codemap.md new file mode 100644 index 00000000..cb52e02f --- /dev/null +++ b/native/qt6/src/media/codemap.md @@ -0,0 +1,54 @@ +# native/qt6/src/media/ + + + +## Responsibility + + + +## Design + + + +## Flow + + + +## Integration + + +# native/qt6/src/media/ + +## Responsibility +Provides the media playback backend and preview rendering bridge between Qt Widgets and tlRender. + +## Components +- `tlrender_player.cpp/.h`: media loading, playback control, tlRender context ownership, cached frame access, OCIO/display options +- `tlrender_viewport.cpp/.h`: QWidget wrapper that chooses between native `tl::qtwidget::Viewport` and Wayland raster fallback +- `tlrender_widget.cpp/.h`: older direct `QOpenGLWidget` renderer that draws `currentVideoFrames()` manually; present in the branch but not the active `PreviewOverlay` video path + +## Active Playback Paths +### Native viewport path +1. `TLRenderViewport::ensureViewport()` creates `tl::qtwidget::Viewport`. +2. `setPlayer()` binds the shared `tl::qt::PlayerObject` from `TLRenderPlayer`. +3. tlRender paints frames internally. + +### Wayland raster fallback path +1. `PlatformSession::shouldUseRasterPreviewFallbackOnWayland()` returns true on Wayland. +2. `TLRenderViewport` creates `m_rasterLabel` instead of native viewport. +3. `updateRasterFrame()` calls `m_player->getCurrentFrame(targetSize)`. +4. The returned `QImage` is converted to a `QPixmap` and displayed centered inside the label. + +## Verified Branch-Specific Findings +- The active Fedora worktree uses the raster fallback on Wayland by policy, not as a rare fallback. +- `displayedContentRect()` computes overlay geometry from the raster label's fitted pixmap size when the raster path is active. +- `PreviewOverlay` relies on that rect through `syncAnnotationOverlayToVideo()` to place the annotation overlay. +- `TLRenderPlayer::getCurrentFrame()` currently prefers cached tlRender frames and falls back to FFmpeg thumbnail extraction. + +## Current Risk Areas +- Any bug in `getCurrentFrame()` affects both Wayland raster playback appearance and video annotation/export capture. +- Any mismatch between `displayedContentRect()`, overlay view geometry, and annotation scene rect will break visible drawing even when annotation items exist. + +## Integration +- Consumed by: `PreviewOverlay`, File Manager preview surfaces, other video preview entry points +- Depends on: tlRender timeline/player/Qt wrappers, feather-tk image types, platform session policy diff --git a/native/qt6/src/media/ffmpeg_mov_player.cpp b/native/qt6/src/media/ffmpeg_mov_player.cpp new file mode 100644 index 00000000..a7c1a5cd --- /dev/null +++ b/native/qt6/src/media/ffmpeg_mov_player.cpp @@ -0,0 +1,1729 @@ +#include "ffmpeg_mov_player.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#if defined(HAVE_FFMPEG) && HAVE_FFMPEG +extern "C" { +#include +#include +#include +#include +#include +#include +} +#endif + +namespace { + +constexpr double kDefaultFps = 24.0; +constexpr int kDecodeQueueFrames = 32; +constexpr int kPresentedHistoryFrames = 64; +constexpr qint64 kBackwardBufferMaxBytes = 256 * 1024 * 1024; // 256 MiB cap for backward buffer + +#if defined(HAVE_FFMPEG) && HAVE_FFMPEG && defined(Q_OS_LINUX) +constexpr AVHWDeviceType kPreferredHwDeviceType = AV_HWDEVICE_TYPE_VAAPI; +#endif + +double rationalToDouble(int num, int den) +{ + return (num > 0 && den > 0) ? (static_cast(num) / static_cast(den)) : 0.0; +} + +#if defined(HAVE_FFMPEG) && HAVE_FFMPEG +QString avErrorToQString(int errorCode) +{ + char buffer[AV_ERROR_MAX_STRING_SIZE] = { 0 }; + av_strerror(errorCode, buffer, sizeof(buffer)); + return QString::fromLocal8Bit(buffer); +} + +bool isTargetHardwareCodec(AVCodecID codecId) +{ + switch (codecId) { + case AV_CODEC_ID_H264: + case AV_CODEC_ID_HEVC: + return true; + default: + return false; + } +} +#endif + +bool isRecoverableDecodeError(int errorCode) +{ +#if defined(HAVE_FFMPEG) && HAVE_FFMPEG + return errorCode < 0 && errorCode != AVERROR(EAGAIN) && errorCode != AVERROR_EOF; +#else + Q_UNUSED(errorCode); + return false; +#endif +} + +} // namespace + +FFmpegMovPlayer::FFmpegMovPlayer(QObject* parent) + : QObject(parent) +{ + m_playbackTimer = new QChronoTimer(this); + m_playbackTimer->setTimerType(Qt::PreciseTimer); + m_playbackTimer->setSingleShot(true); + connect(m_playbackTimer, &QChronoTimer::timeout, this, &FFmpegMovPlayer::onPlaybackTick); + + m_audioOutput = new QAudioOutput(this); + m_audioPlayer = new QMediaPlayer(this); + m_audioPlayer->setAudioOutput(m_audioOutput); +} + +FFmpegMovPlayer::~FFmpegMovPlayer() +{ + unloadMedia(); +} + +void FFmpegMovPlayer::loadMedia(const QString& filePath) +{ +#if defined(HAVE_FFMPEG) && HAVE_FFMPEG + unloadMedia(); + + QString errorString; + if (!openMedia(filePath, &errorString, false)) { + emit error(errorString.isEmpty() ? tr("Failed to open MOV media") : errorString); + return; + } + + m_currentPath = filePath; + startDecodeThread(); + + if (m_audioPlayer && m_mediaInfo.hasAudio) { + m_audioPlayer->setSource(QUrl::fromLocalFile(filePath)); + m_audioPlayer->setPlaybackRate(std::abs(m_playbackRate)); + m_audioOutput->setVolume(m_volume); + m_audioOutput->setMuted(m_muted); + } else if (m_audioPlayer) { + m_audioPlayer->stop(); + m_audioPlayer->setSource(QUrl()); + } + + emit durationChanged(m_durationMs); + emit mediaInfoReady(m_mediaInfo); + + if (!seekInternal(0, true, true)) { + emit error(tr("Failed to decode first frame from %1").arg(filePath)); + unloadMedia(); + } +#else + Q_UNUSED(filePath); + emit error(tr("FFmpeg MOV playback is unavailable in this build")); +#endif +} + +void FFmpegMovPlayer::unloadMedia() +{ + m_playbackTimer->stop(); + if (m_audioPlayer) { + m_audioPlayer->stop(); + m_audioPlayer->setSource(QUrl()); + } + + stopDecodeThread(); + closeMedia(); + + m_mediaInfo = media_player::MediaInfo(); + m_currentPath.clear(); + m_positionMs = 0; + m_durationMs = 0; + m_currentFrame = 0; + m_totalFrames = 0; + m_lastPresentedPts = -1; + clearPresentedHistory(); + clearBackwardFrames(); + m_playbackClock.invalidate(); + m_nextPlaybackDeadline = std::chrono::nanoseconds::zero(); + m_playbackStartPositionMs = 0; + setPlaybackState(media_player::PlaybackState::Stopped); + clearPresentedFrame(); +} + +bool FFmpegMovPlayer::hasMedia() const +{ + return m_formatContext && m_codecContext && m_videoStreamIndex >= 0; +} + +void FFmpegMovPlayer::play() +{ + if (!hasMedia()) { + return; + } + + setPlaybackState(media_player::PlaybackState::Playing); + resetPlaybackClock(); + if (m_audioPlayer && m_mediaInfo.hasAudio) { + if (m_playbackRate < 0.0) { + m_audioPlayer->pause(); + } else { + syncAudioPosition(m_positionMs); + m_audioPlayer->setPlaybackRate(std::abs(m_playbackRate)); + m_audioPlayer->play(); + } + } + updatePlaybackTimer(); +} + +void FFmpegMovPlayer::pause() +{ + if (!hasMedia()) { + return; + } + + m_playbackTimer->stop(); + m_playbackClock.invalidate(); + m_nextPlaybackDeadline = std::chrono::nanoseconds::zero(); + if (m_audioPlayer && m_mediaInfo.hasAudio) { + m_audioPlayer->pause(); + } + setPlaybackState(media_player::PlaybackState::Paused); +} + +void FFmpegMovPlayer::stop() +{ + if (!hasMedia()) { + return; + } + + m_playbackTimer->stop(); + m_playbackClock.invalidate(); + m_nextPlaybackDeadline = std::chrono::nanoseconds::zero(); + if (m_audioPlayer && m_mediaInfo.hasAudio) { + m_audioPlayer->stop(); + } + setPlaybackState(media_player::PlaybackState::Stopped); + seekInternal(0, true, true); +} + +void FFmpegMovPlayer::seek(qint64 positionMs) +{ + if (!hasMedia()) { + return; + } + seekInternal(positionMs, true, true); +} + +void FFmpegMovPlayer::seekToFrame(qint64 frameNumber) +{ + if (!hasMedia()) { + return; + } + + seekToTimestampInternal(frameToTimestamp(frameNumber), true, false, true); +} + +void FFmpegMovPlayer::stepForward() +{ + seekToFrame(m_currentFrame + 1); +} + +void FFmpegMovPlayer::stepBackward() +{ + if (!hasMedia()) { + return; + } + + BufferedFrame previousFrame; + if (popBackwardFrame(&previousFrame)) { + presentBufferedFrame(previousFrame, true, false); + return; + } + + const int64_t targetTs = (m_lastPresentedPts != AV_NOPTS_VALUE && m_lastPresentedPts > 0) + ? (m_lastPresentedPts - 1) + : frameToTimestamp(clampFrameNumber(m_currentFrame - 1)); + seekToTimestampInternal(targetTs, true, true, false); +} + +void FFmpegMovPlayer::setPlaybackRate(double rate) +{ + m_playbackRate = qFuzzyIsNull(rate) ? 1.0 : rate; + if (m_audioPlayer && m_mediaInfo.hasAudio) { + m_audioPlayer->setPlaybackRate(std::abs(m_playbackRate)); + } + if (m_playbackState == media_player::PlaybackState::Playing) { + resetPlaybackClock(); + } + updatePlaybackTimer(); +} + +void FFmpegMovPlayer::setLoopMode(media_player::LoopMode mode) +{ + m_loopMode = mode; +} + +void FFmpegMovPlayer::setVolume(float volume) +{ + m_volume = qBound(0.0f, volume, 1.0f); + if (m_audioOutput) { + m_audioOutput->setVolume(m_volume); + } +} + +void FFmpegMovPlayer::setMuted(bool muted) +{ + m_muted = muted; + if (m_audioOutput) { + m_audioOutput->setMuted(muted); + } +} + +QImage FFmpegMovPlayer::currentFrameImage() const +{ + QMutexLocker locker(&m_frameMutex); + return m_currentFrameImage; +} + +QImage FFmpegMovPlayer::currentFrameImage(const QSize& targetSize) +{ + QMutexLocker locker(&m_frameMutex); + if (targetSize.isEmpty()) { + m_requestedFrameTargetSize = QSize(); + return m_currentFrameImage; + } + if (!m_currentFrameScaledImage.isNull() && m_currentFrameScaledTargetSize == targetSize) { + return m_currentFrameScaledImage; + } + + m_requestedFrameTargetSize = targetSize; + if (!m_currentFrameImage.isNull()) { + m_currentFrameScaledImage = m_currentFrameImage.scaled(targetSize, Qt::KeepAspectRatio, Qt::SmoothTransformation); + m_currentFrameScaledTargetSize = targetSize; + return m_currentFrameScaledImage; + } + return m_currentFrameImage; +} + +QSize FFmpegMovPlayer::currentFrameSize() const +{ + QMutexLocker locker(&m_frameMutex); + return m_currentFrameImage.size(); +} + +void FFmpegMovPlayer::startDecodeThread() +{ +#if defined(HAVE_FFMPEG) && HAVE_FFMPEG + stopDecodeThread(); + + { + std::lock_guard lock(m_decodeMutex); + m_decodedFrames.clear(); + m_seekResultFrame = BufferedFrame(); + m_decodeStopRequested = false; + m_seekPending = false; + m_seekInProgress = false; + m_seekFailed = false; + m_seekResultReady = false; + m_decodeAtEnd = false; + m_pendingSeekMs = 0; + m_pendingSeekTs = 0; + m_decodeGeneration = 0; + m_pendingDecodeError.clear(); + } + + m_decodeThread = std::thread(&FFmpegMovPlayer::decodeThreadMain, this); +#endif +} + +void FFmpegMovPlayer::stopDecodeThread() +{ + { + std::lock_guard lock(m_decodeMutex); + m_decodeStopRequested = true; + m_decodeCondition.notify_all(); + } + + if (m_decodeThread.joinable()) { + m_decodeThread.join(); + } + + std::lock_guard lock(m_decodeMutex); + m_decodedFrames.clear(); + m_seekResultFrame = BufferedFrame(); + m_decodeStopRequested = false; + m_seekPending = false; + m_seekInProgress = false; + m_seekFailed = false; + m_seekResultReady = false; + m_decodeAtEnd = false; + m_pendingSeekMs = 0; + m_pendingSeekTs = 0; + m_pendingDecodeError.clear(); +} + +void FFmpegMovPlayer::decodeThreadMain() +{ +#if defined(HAVE_FFMPEG) && HAVE_FFMPEG + for (;;) { + quint64 generation = 0; + qint64 seekPositionMs = 0; + int64_t seekTimestamp = 0; + bool preferPreviousFrame = false; + bool handleSeek = false; + + { + std::unique_lock lock(m_decodeMutex); + m_decodeCondition.wait(lock, [this]() { + return m_decodeStopRequested + || m_seekPending + || (!m_seekInProgress && hasMedia() && !m_decodeAtEnd + && m_decodedFrames.size() < static_cast(decodeQueueCapacity())); + }); + + if (m_decodeStopRequested) { + break; + } + + if (m_seekPending) { + handleSeek = true; + seekPositionMs = m_pendingSeekMs; + seekTimestamp = m_pendingSeekTs; + preferPreviousFrame = m_pendingSeekPreferPreviousFrame; + generation = m_decodeGeneration; + m_seekPending = false; + m_seekInProgress = true; + m_seekFailed = false; + m_seekResultReady = false; + m_decodeAtEnd = false; + m_pendingDecodeError.clear(); + m_decodedFrames.clear(); + } else { + generation = m_decodeGeneration; + } + } + + if (handleSeek) { + QString errorString; + bool ok = false; + const qint64 clampedMs = qBound(0, seekPositionMs, qMax(0, m_durationMs)); + const int64_t targetTs = seekTimestamp > 0 ? seekTimestamp : msToTimestamp(clampedMs); + const int seekResult = av_seek_frame(m_formatContext, m_videoStreamIndex, targetTs, AVSEEK_FLAG_BACKWARD); + if (seekResult >= 0) { + avcodec_flush_buffers(m_codecContext); + ok = decodeFrameForTimestamp(targetTs, clampedMs == 0, generation, preferPreviousFrame); + if (!ok && errorString.isEmpty()) { + errorString = tr("Failed to decode seek target from %1").arg(m_currentPath); + } + } else { + errorString = tr("Failed to seek %1: %2").arg(m_currentPath, avErrorToQString(seekResult)); + } + + std::lock_guard lock(m_decodeMutex); + if (generation == m_decodeGeneration) { + if (!ok) { + m_seekFailed = true; + m_decodeAtEnd = true; + if (!errorString.isEmpty()) { + m_pendingDecodeError = errorString; + } + } + m_seekInProgress = false; + m_decodeCondition.notify_all(); + } + continue; + } + + const bool ok = decodeNextFrame(generation); + std::lock_guard lock(m_decodeMutex); + if (m_decodeStopRequested) { + break; + } + if (generation != m_decodeGeneration || m_seekPending || m_seekInProgress) { + continue; + } + if (!ok) { + m_decodeAtEnd = true; + m_decodeCondition.notify_all(); + } + } +#endif +} + +void FFmpegMovPlayer::onPlaybackTick() +{ + if (!hasMedia() || m_playbackState != media_player::PlaybackState::Playing) { + return; + } + + if (m_playbackRate < 0.0) { + // Fast path: consume pre-buffered backward frames. + BufferedFrame previousFrame; + if (popBackwardFrame(&previousFrame)) { + presentBufferedFrame(previousFrame, true, false); + // If the backward buffer is nearly exhausted, kick off the next + // backward seek NOW so it overlaps with the current frame's display + // time instead of adding to it. + postReverseSeekIfNeeded(); + updatePlaybackTimer(); + return; + } + + // Slow path: backward buffer empty. Check for a pending async seek result. + BufferedFrame seekResult; + bool hasSeekResult = false; + bool seekActive = false; + bool seekFailed = false; + QString seekError; + { + std::lock_guard lock(m_decodeMutex); + if (m_seekResultReady) { + hasSeekResult = true; + seekResult = std::move(m_seekResultFrame); + m_seekResultFrame = BufferedFrame(); + m_seekResultReady = false; + } else if (m_seekFailed) { + seekFailed = true; + seekError = m_pendingDecodeError; + m_pendingDecodeError.clear(); + } else { + seekActive = m_seekPending || m_seekInProgress; + } + } + + if (hasSeekResult) { + presentBufferedFrame(seekResult, true, false); + // Immediately post the next reverse seek so it runs in parallel + // with the upcoming frame display period. + postReverseSeek(); + updatePlaybackTimer(); + return; + } + + if (seekFailed) { + if (!seekError.isEmpty()) { + emit error(seekError); + } + // A failed seek during reverse means we are at/before the start. + switch (m_loopMode) { + case media_player::LoopMode::Loop: + seekInternal(m_durationMs, true, true); + resetPlaybackClock(); + updatePlaybackTimer(); + break; + case media_player::LoopMode::PingPong: + m_playbackRate = -m_playbackRate; + resetPlaybackClock(); + updatePlaybackTimer(); + break; + case media_player::LoopMode::Once: + default: + pause(); + emit endOfStream(); + break; + } + return; + } + + if (seekActive) { + // Seek still in progress; check back soon. + m_playbackTimer->setInterval(std::chrono::milliseconds(1)); + m_playbackTimer->start(); + return; + } + + // No seek active. If we are at the very start, emit end-of-stream. + if (m_currentFrame <= 0 || m_lastPresentedPts <= 0) { + switch (m_loopMode) { + case media_player::LoopMode::Loop: + seekInternal(m_durationMs, true, true); + resetPlaybackClock(); + updatePlaybackTimer(); + break; + case media_player::LoopMode::PingPong: + m_playbackRate = -m_playbackRate; + resetPlaybackClock(); + updatePlaybackTimer(); + break; + case media_player::LoopMode::Once: + default: + pause(); + emit endOfStream(); + break; + } + return; + } + + // Post an async backward seek; timer will fire again in 1 ms to check it. + postReverseSeek(); + m_playbackTimer->setInterval(std::chrono::milliseconds(1)); + m_playbackTimer->start(); + return; + } + + const double elapsedMs = m_playbackClock.isValid() + ? (static_cast(m_playbackClock.nsecsElapsed()) / 1'000'000.0) + : 0.0; + const double fps = m_mediaInfo.fps > 0.0 ? m_mediaInfo.fps : kDefaultFps; + const qint64 targetPositionMs = qBound( + 0, + m_playbackStartPositionMs + qRound64(static_cast(elapsedMs) * m_playbackRate), + qMax(0, m_durationMs)); + BufferedFrame frame; + bool reachedEndOfStream = false; + bool presentedFrame = false; + int catchUpFramesRemaining = decodeQueueCapacity(); + while (catchUpFramesRemaining-- > 0 + && takeBufferedFrameForPlayback(targetPositionMs, &frame, &reachedEndOfStream)) { + presentBufferedFrame(frame, true); + presentedFrame = true; + if (frame.positionMs >= targetPositionMs) { + break; + } + } + + if (presentedFrame) { + if (m_mediaInfo.hasAudio) { + syncAudioPosition(m_positionMs); + } + updatePlaybackTimer(); + return; + } + + if (!reachedEndOfStream) { + m_playbackTimer->setInterval(std::chrono::milliseconds(1)); + m_playbackTimer->start(); + return; + } + + switch (m_loopMode) { + case media_player::LoopMode::Loop: + if (!seekInternal(0, true, true)) { + pause(); + emit endOfStream(); + } + break; + case media_player::LoopMode::PingPong: + m_playbackRate = -m_playbackRate; + resetPlaybackClock(); + updatePlaybackTimer(); + break; + case media_player::LoopMode::Once: + default: + pause(); + emit endOfStream(); + break; + } +} + +bool FFmpegMovPlayer::openMedia(const QString& filePath, QString* errorString, bool allowHardwareDecoding) +{ +#if defined(HAVE_FFMPEG) && HAVE_FFMPEG + static bool logLevelSet = false; + if (!logLevelSet) { + av_log_set_level(AV_LOG_ERROR); + logLevelSet = true; + } + + AVFormatContext* formatContext = nullptr; + QByteArray localPath = QFile::encodeName(filePath); + int ret = avformat_open_input(&formatContext, localPath.constData(), nullptr, nullptr); + if (ret < 0 || !formatContext) { + if (errorString) { + *errorString = tr("Could not open %1").arg(filePath); + } + return false; + } + + ret = avformat_find_stream_info(formatContext, nullptr); + if (ret < 0) { + avformat_close_input(&formatContext); + if (errorString) { + *errorString = tr("Could not read stream info from %1").arg(filePath); + } + return false; + } + + const int videoStreamIndex = av_find_best_stream(formatContext, AVMEDIA_TYPE_VIDEO, -1, -1, nullptr, 0); + if (videoStreamIndex < 0) { + avformat_close_input(&formatContext); + if (errorString) { + *errorString = tr("No video stream found in %1").arg(filePath); + } + return false; + } + + AVStream* videoStream = formatContext->streams[videoStreamIndex]; + const AVCodec* codec = avcodec_find_decoder(videoStream->codecpar->codec_id); + if (!codec) { + avformat_close_input(&formatContext); + if (errorString) { + *errorString = tr("Unsupported MOV codec in %1").arg(filePath); + } + return false; + } + + AVCodecContext* codecContext = nullptr; + AVBufferRef* hwDeviceContext = nullptr; + bool hardwareDecodingActive = false; + int hwPixelFormat = AV_PIX_FMT_NONE; + + auto freeCodecResources = [&]() { + if (hwDeviceContext) { + av_buffer_unref(&hwDeviceContext); + } + if (codecContext) { + avcodec_free_context(&codecContext); + } + }; + + auto openCodecContext = [&](bool useHardwareDecoding) -> bool { + codecContext = avcodec_alloc_context3(codec); + if (!codecContext) { + if (errorString) { + *errorString = tr("Could not allocate FFmpeg codec context"); + } + return false; + } + + ret = avcodec_parameters_to_context(codecContext, videoStream->codecpar); + if (ret < 0) { + if (errorString) { + *errorString = tr("Could not initialize MOV decoder parameters for %1").arg(filePath); + } + freeCodecResources(); + return false; + } + + if (!useHardwareDecoding) { + codecContext->thread_count = qBound(1, QThread::idealThreadCount(), 16); + codecContext->thread_type = FF_THREAD_FRAME | FF_THREAD_SLICE; + } + +#if defined(Q_OS_LINUX) + if (useHardwareDecoding) { + for (int i = 0;; ++i) { + const AVCodecHWConfig* hwConfig = avcodec_get_hw_config(codec, i); + if (!hwConfig) { + break; + } + if ((hwConfig->methods & AV_CODEC_HW_CONFIG_METHOD_HW_DEVICE_CTX) + && hwConfig->device_type == kPreferredHwDeviceType) { + hwPixelFormat = hwConfig->pix_fmt; + break; + } + } + + if (hwPixelFormat == AV_PIX_FMT_NONE) { + freeCodecResources(); + return false; + } + + ret = av_hwdevice_ctx_create(&hwDeviceContext, kPreferredHwDeviceType, nullptr, nullptr, 0); + if (ret < 0 || !hwDeviceContext) { + qWarning() << "MOV hardware decode init failed:" << avErrorToQString(ret); + freeCodecResources(); + return false; + } + + codecContext->opaque = this; + codecContext->get_format = &FFmpegMovPlayer::selectHardwarePixelFormat; + codecContext->hw_device_ctx = av_buffer_ref(hwDeviceContext); + if (!codecContext->hw_device_ctx) { + freeCodecResources(); + return false; + } + } +#else + Q_UNUSED(useHardwareDecoding); +#endif + + ret = avcodec_open2(codecContext, codec, nullptr); + if (ret < 0) { + if (useHardwareDecoding) { + qWarning() << "MOV hardware decode open failed:" << avErrorToQString(ret); + } else if (errorString) { + *errorString = tr("Could not initialize MOV decoder for %1").arg(filePath); + } + freeCodecResources(); + return false; + } + + hardwareDecodingActive = useHardwareDecoding; + return true; + }; + + const bool tryHardwareDecoding = allowHardwareDecoding && isTargetHardwareCodec(videoStream->codecpar->codec_id); + if (!(tryHardwareDecoding && openCodecContext(true)) && !openCodecContext(false)) { + avformat_close_input(&formatContext); + return false; + } + + AVFrame* decodeFrame = av_frame_alloc(); + AVFrame* transferFrame = av_frame_alloc(); + AVPacket* packet = av_packet_alloc(); + if (!decodeFrame || !transferFrame || !packet) { + if (decodeFrame) av_frame_free(&decodeFrame); + if (transferFrame) av_frame_free(&transferFrame); + if (packet) av_packet_free(&packet); + freeCodecResources(); + avformat_close_input(&formatContext); + if (errorString) { + *errorString = tr("Could not allocate FFmpeg decode buffers"); + } + return false; + } + + closeMedia(); + m_formatContext = formatContext; + m_codecContext = codecContext; + m_hwDeviceContext = hwDeviceContext; + m_decodeFrame = decodeFrame; + m_transferFrame = transferFrame; + m_packet = packet; + m_videoStreamIndex = videoStreamIndex; + const AVRational frameRate = (videoStream->avg_frame_rate.num > 0 && videoStream->avg_frame_rate.den > 0) + ? videoStream->avg_frame_rate + : av_guess_frame_rate(formatContext, videoStream, nullptr); + m_timeBaseNum = videoStream->time_base.num; + m_timeBaseDen = videoStream->time_base.den; + m_frameRateNum = frameRate.num; + m_frameRateDen = frameRate.den; + m_hwPixelFormat = hwPixelFormat; + m_swsSourceFormat = AV_PIX_FMT_NONE; + m_swsWidth = 0; + m_swsHeight = 0; + m_hardwareDecodingActive = hardwareDecodingActive; + + const double guessedFps = rationalToDouble(m_frameRateNum, m_frameRateDen); + const double fps = guessedFps > 0.0 ? guessedFps : kDefaultFps; + const qint64 durationMs = formatContext->duration > 0 + ? static_cast((formatContext->duration * 1000.0) / AV_TIME_BASE) + : timestampToMs(videoStream->duration); + const qint64 totalFrames = videoStream->nb_frames > 0 + ? static_cast(videoStream->nb_frames) + : qMax(1, qRound64((durationMs / 1000.0) * fps)); + + m_mediaInfo.width = codecContext->width; + m_mediaInfo.height = codecContext->height; + m_mediaInfo.fps = fps; + m_mediaInfo.durationMs = durationMs; + m_mediaInfo.totalFrames = totalFrames; + m_mediaInfo.codec = QString::fromLatin1(codec->name); + m_mediaInfo.hasAudio = av_find_best_stream(formatContext, AVMEDIA_TYPE_AUDIO, -1, -1, nullptr, 0) >= 0; + m_durationMs = durationMs; + m_totalFrames = totalFrames; + return true; +#else + Q_UNUSED(filePath); + if (errorString) { + *errorString = tr("FFmpeg support is unavailable"); + } + return false; +#endif +} + +void FFmpegMovPlayer::closeMedia() +{ +#if defined(HAVE_FFMPEG) && HAVE_FFMPEG + if (m_packet) { + av_packet_free(&m_packet); + } + if (m_decodeFrame) { + av_frame_free(&m_decodeFrame); + } + if (m_transferFrame) { + av_frame_free(&m_transferFrame); + } + if (m_swsContext) { + sws_freeContext(m_swsContext); + m_swsContext = nullptr; + } + if (m_codecContext) { + avcodec_free_context(&m_codecContext); + } + if (m_hwDeviceContext) { + av_buffer_unref(&m_hwDeviceContext); + } + if (m_formatContext) { + avformat_close_input(&m_formatContext); + } +#endif + m_videoStreamIndex = -1; + m_timeBaseNum = 0; + m_timeBaseDen = 1; + m_frameRateNum = 0; + m_frameRateDen = 1; + m_hwPixelFormat = -1; + m_swsSourceFormat = -1; + m_swsWidth = 0; + m_swsHeight = 0; + m_hardwareDecodingActive = false; +} + +void FFmpegMovPlayer::updatePlaybackTimer() +{ + if (!hasMedia() || m_playbackState != media_player::PlaybackState::Playing) { + m_playbackTimer->stop(); + return; + } + + const double fps = m_mediaInfo.fps > 0.0 ? m_mediaInfo.fps : kDefaultFps; + const double rate = qMax(0.001, std::abs(m_playbackRate)); + const auto frameDurationNs = std::chrono::duration_cast( + std::chrono::duration(qMax(1.0, 1000.0 / (fps * rate)))); + if (!m_playbackClock.isValid()) { + m_playbackClock.start(); + m_playbackStartPositionMs = m_positionMs; + } + if (m_nextPlaybackDeadline <= std::chrono::nanoseconds::zero()) { + m_nextPlaybackDeadline = frameDurationNs; + } + + const auto nowNs = std::chrono::nanoseconds(m_playbackClock.nsecsElapsed()); + const auto delay = std::max(std::chrono::nanoseconds::zero(), m_nextPlaybackDeadline - nowNs); + m_playbackTimer->setInterval(delay); + m_playbackTimer->start(); + m_nextPlaybackDeadline = std::max(m_nextPlaybackDeadline, nowNs) + frameDurationNs; +} + +bool FFmpegMovPlayer::decodeNextFrame(quint64 generation) +{ +#if defined(HAVE_FFMPEG) && HAVE_FFMPEG + if (!hasMedia()) { + return false; + } + + bool inputEof = false; + bool packetPending = false; + + while (true) { + int ret = 0; + while ((ret = avcodec_receive_frame(m_codecContext, m_decodeFrame)) >= 0) { + BufferedFrame frame; + if (!presentDecodedFrame(m_decodeFrame, &frame)) { + continue; + } + if (queueBufferedFrame(std::move(frame), generation, false)) { + return true; + } + + std::lock_guard lock(m_decodeMutex); + return generation != m_decodeGeneration || m_seekPending || m_decodeStopRequested; + } + + if (ret == AVERROR_EOF) { + return false; + } + if (ret != AVERROR(EAGAIN) && ret < 0) { + if (m_hardwareDecodingActive && isRecoverableDecodeError(ret)) { + return fallbackToSoftwareDecoding(m_positionMs, generation, false); + } + return false; + } + + if (packetPending) { + ret = avcodec_send_packet(m_codecContext, m_packet); + if (ret == AVERROR(EAGAIN)) { + continue; + } + av_packet_unref(m_packet); + packetPending = false; + if (ret < 0) { + if (m_hardwareDecodingActive && isRecoverableDecodeError(ret)) { + return fallbackToSoftwareDecoding(m_positionMs, generation, false); + } + continue; + } + continue; + } + + if (inputEof) { + ret = avcodec_send_packet(m_codecContext, nullptr); + if (ret == AVERROR(EAGAIN)) { + continue; + } + if (m_hardwareDecodingActive && isRecoverableDecodeError(ret)) { + return fallbackToSoftwareDecoding(m_positionMs, generation, false); + } + if (ret < 0) { + return false; + } + inputEof = false; + continue; + } + + ret = av_read_frame(m_formatContext, m_packet); + if (ret < 0) { + inputEof = true; + continue; + } + if (m_packet->stream_index != m_videoStreamIndex) { + av_packet_unref(m_packet); + continue; + } + packetPending = true; + } +#else + Q_UNUSED(generation); +#endif + return false; +} + +bool FFmpegMovPlayer::decodeFrameForTimestamp(int64_t targetTs, bool allowPastTarget, quint64 generation, bool preferPreviousFrame) +{ +#if defined(HAVE_FFMPEG) && HAVE_FFMPEG + if (!hasMedia()) { + return false; + } + + bool inputEof = false; + bool packetPending = false; + BufferedFrame previousFrame; + bool hasPreviousFrame = false; + + while (true) { + int ret = 0; + while ((ret = avcodec_receive_frame(m_codecContext, m_decodeFrame)) >= 0) { + const int64_t pts = (m_decodeFrame->best_effort_timestamp != AV_NOPTS_VALUE) + ? m_decodeFrame->best_effort_timestamp + : m_decodeFrame->pts; + + BufferedFrame frame; + if (!presentDecodedFrame(m_decodeFrame, &frame)) { + continue; + } + + if (preferPreviousFrame && pts != AV_NOPTS_VALUE) { + if (pts <= targetTs) { + previousFrame = frame; + hasPreviousFrame = true; + continue; + } + + if (hasPreviousFrame) { + return queueBufferedFrame(std::move(previousFrame), generation, true); + } + } + + if (!allowPastTarget && pts != AV_NOPTS_VALUE && pts < targetTs) { + continue; + } + return queueBufferedFrame(std::move(frame), generation, true); + } + + if (ret == AVERROR_EOF) { + if (preferPreviousFrame && hasPreviousFrame) { + return queueBufferedFrame(std::move(previousFrame), generation, true); + } + return false; + } + if (ret != AVERROR(EAGAIN) && ret < 0) { + if (m_hardwareDecodingActive && isRecoverableDecodeError(ret)) { + return fallbackToSoftwareDecoding(timestampToMs(targetTs), generation, true); + } + return false; + } + + if (packetPending) { + ret = avcodec_send_packet(m_codecContext, m_packet); + if (ret == AVERROR(EAGAIN)) { + continue; + } + av_packet_unref(m_packet); + packetPending = false; + if (ret < 0) { + if (m_hardwareDecodingActive && isRecoverableDecodeError(ret)) { + return fallbackToSoftwareDecoding(timestampToMs(targetTs), generation, true); + } + continue; + } + continue; + } + + if (inputEof) { + ret = avcodec_send_packet(m_codecContext, nullptr); + if (ret == AVERROR(EAGAIN)) { + continue; + } + if (m_hardwareDecodingActive && isRecoverableDecodeError(ret)) { + return fallbackToSoftwareDecoding(timestampToMs(targetTs), generation, true); + } + if (ret < 0) { + return false; + } + inputEof = false; + continue; + } + + ret = av_read_frame(m_formatContext, m_packet); + if (ret < 0) { + inputEof = true; + continue; + } + if (m_packet->stream_index != m_videoStreamIndex) { + av_packet_unref(m_packet); + continue; + } + packetPending = true; + } +#else + Q_UNUSED(targetTs); + Q_UNUSED(allowPastTarget); + Q_UNUSED(generation); +#endif + return false; +} + +bool FFmpegMovPlayer::seekInternal(qint64 positionMs, bool emitSignals, bool clearHistory) +{ +#if defined(HAVE_FFMPEG) && HAVE_FFMPEG + if (!hasMedia()) { + return false; + } + + return seekToTimestampInternal(msToTimestamp(positionMs), emitSignals, false, clearHistory); +#else + Q_UNUSED(positionMs); + Q_UNUSED(emitSignals); + return false; +#endif +} + +bool FFmpegMovPlayer::seekToTimestampInternal(int64_t targetTs, bool emitSignals, bool preferPreviousFrame, bool clearHistory) +{ +#if defined(HAVE_FFMPEG) && HAVE_FFMPEG + if (!hasMedia()) { + return false; + } + + const qint64 clampedMs = qBound(0, timestampToMs(targetTs), qMax(0, m_durationMs)); + const int64_t clampedTs = qMax(0, targetTs); + const bool wasPlaying = m_playbackState == media_player::PlaybackState::Playing; + m_playbackTimer->stop(); + if (clearHistory) { + clearPresentedHistory(); + clearBackwardFrames(); + } + + quint64 generation = 0; + { + std::lock_guard lock(m_decodeMutex); + ++m_decodeGeneration; + generation = m_decodeGeneration; + m_pendingSeekMs = clampedMs; + m_pendingSeekTs = clampedTs; + m_pendingSeekPreferPreviousFrame = preferPreviousFrame; + m_seekPending = true; + m_seekInProgress = false; + m_seekFailed = false; + m_seekResultReady = false; + m_decodeAtEnd = false; + m_pendingDecodeError.clear(); + m_decodedFrames.clear(); + } + m_decodeCondition.notify_all(); + + BufferedFrame frame; + QString errorString; + if (!waitForSeekFrame(generation, &frame, &errorString)) { + if (!errorString.isEmpty()) { + emit error(errorString); + } + return false; + } + + presentBufferedFrame(frame, emitSignals, false); + if (m_mediaInfo.hasAudio) { + syncAudioPosition(m_positionMs); + } + + if (wasPlaying) { + resetPlaybackClock(); + updatePlaybackTimer(); + } + return true; +#else + Q_UNUSED(targetTs); + Q_UNUSED(emitSignals); + return false; +#endif +} + +bool FFmpegMovPlayer::presentDecodedFrame(AVFrame* frame, BufferedFrame* bufferedFrame) +{ +#if defined(HAVE_FFMPEG) && HAVE_FFMPEG + if (!frame || !bufferedFrame || !m_codecContext) { + return false; + } + + AVFrame* readableFrame = frame; + if (m_hardwareDecodingActive && frame->format == m_hwPixelFormat) { + if (!m_transferFrame) { + m_transferFrame = av_frame_alloc(); + if (!m_transferFrame) { + return false; + } + } + av_frame_unref(m_transferFrame); + const int ret = av_hwframe_transfer_data(m_transferFrame, frame, 0); + if (ret < 0) { + qWarning() << "MOV hardware decode transfer failed:" << avErrorToQString(ret); + return false; + } + readableFrame = m_transferFrame; + } + + if (!ensureConversionContext(readableFrame)) { + return false; + } + + const QSize frameSize(readableFrame->width, readableFrame->height); + if (m_conversionScratchImage.size() != frameSize + || m_conversionScratchImage.format() != QImage::Format_ARGB32) { + m_conversionScratchImage = QImage(frameSize, QImage::Format_ARGB32); + } + if (m_conversionScratchImage.isNull()) { + return false; + } + + uint8_t* dstData[4] = { m_conversionScratchImage.bits(), nullptr, nullptr, nullptr }; + int dstLinesize[4] = { static_cast(m_conversionScratchImage.bytesPerLine()), 0, 0, 0 }; + sws_scale( + m_swsContext, + readableFrame->data, + readableFrame->linesize, + 0, + readableFrame->height, + dstData, + dstLinesize); + + const int64_t pts = (frame->best_effort_timestamp != AV_NOPTS_VALUE) + ? frame->best_effort_timestamp + : frame->pts; + const double fps = m_mediaInfo.fps > 0.0 ? m_mediaInfo.fps : kDefaultFps; + const qint64 fallbackPositionMs = m_lastPresentedPts != AV_NOPTS_VALUE && m_lastPresentedPts >= 0 + ? timestampToMs(m_lastPresentedPts) + qRound64(1000.0 / fps) + : 0; + const qint64 positionMs = pts != AV_NOPTS_VALUE ? timestampToMs(pts) : fallbackPositionMs; + + bufferedFrame->image = m_conversionScratchImage.copy(); + if (!bufferedFrame->image.isNull()) { + QSize targetSize; + { + QMutexLocker locker(&m_frameMutex); + targetSize = m_requestedFrameTargetSize; + } + if (targetSize.isValid()) { + bufferedFrame->scaledImage = bufferedFrame->image.scaled(targetSize, Qt::KeepAspectRatio, Qt::SmoothTransformation); + bufferedFrame->scaledTargetSize = targetSize; + } + } + bufferedFrame->positionMs = positionMs; + bufferedFrame->frameNumber = timestampToFrame(pts, positionMs); + bufferedFrame->pts = pts != AV_NOPTS_VALUE ? pts : 0; + return true; +#else + Q_UNUSED(frame); + Q_UNUSED(bufferedFrame); + return false; +#endif +} + +bool FFmpegMovPlayer::queueBufferedFrame(BufferedFrame&& frame, quint64 generation, bool satisfySeek) +{ + std::unique_lock lock(m_decodeMutex); + if (m_decodeStopRequested || generation != m_decodeGeneration) { + return false; + } + + if (satisfySeek) { + m_seekResultFrame = std::move(frame); + m_seekResultReady = true; + m_seekFailed = false; + m_seekInProgress = false; + m_decodeAtEnd = false; + m_decodeCondition.notify_all(); + return true; + } + + while (m_decodedFrames.size() >= static_cast(decodeQueueCapacity())) { + m_decodeCondition.wait(lock, [this, generation]() { + return m_decodeStopRequested + || generation != m_decodeGeneration + || m_seekPending + || m_seekInProgress + || m_decodedFrames.size() < static_cast(decodeQueueCapacity()); + }); + + if (m_decodeStopRequested || generation != m_decodeGeneration || m_seekPending || m_seekInProgress) { + return false; + } + } + + m_decodedFrames.emplace_back(std::move(frame)); + m_decodeAtEnd = false; + m_decodeCondition.notify_all(); + return true; +} + +bool FFmpegMovPlayer::waitForSeekFrame(quint64 generation, BufferedFrame* frame, QString* errorString) +{ + std::unique_lock lock(m_decodeMutex); + m_decodeCondition.wait(lock, [this, generation]() { + return m_decodeStopRequested + || generation != m_decodeGeneration + || m_seekResultReady + || m_seekFailed; + }); + + if (m_decodeStopRequested || generation != m_decodeGeneration) { + if (errorString) { + *errorString = tr("MOV seek was interrupted"); + } + return false; + } + + if (!m_seekResultReady) { + if (errorString) { + *errorString = m_pendingDecodeError.isEmpty() + ? tr("Failed to decode MOV seek target") + : m_pendingDecodeError; + } + return false; + } + + if (frame) { + *frame = m_seekResultFrame; + } + m_seekResultFrame = BufferedFrame(); + m_seekResultReady = false; + return true; +} + +bool FFmpegMovPlayer::takeBufferedFrameForPlayback(qint64 targetPositionMs, BufferedFrame* frame, bool* reachedEndOfStream) +{ + std::lock_guard lock(m_decodeMutex); + if (m_decodedFrames.empty()) { + if (reachedEndOfStream) { + *reachedEndOfStream = m_decodeAtEnd && !m_seekPending && !m_seekInProgress; + } + return false; + } + + if (m_decodedFrames.front().positionMs > targetPositionMs) { + if (reachedEndOfStream) { + *reachedEndOfStream = false; + } + return false; + } + + size_t selectedIndex = 0; + while (selectedIndex + 1 < m_decodedFrames.size() + && m_decodedFrames[selectedIndex + 1].positionMs <= targetPositionMs) { + ++selectedIndex; + } + + if (frame) { + *frame = std::move(m_decodedFrames[selectedIndex]); + } + m_decodedFrames.erase(m_decodedFrames.begin(), m_decodedFrames.begin() + static_cast(selectedIndex + 1)); + if (reachedEndOfStream) { + *reachedEndOfStream = false; + } + m_decodeCondition.notify_all(); + return true; +} + +void FFmpegMovPlayer::presentBufferedFrame(const BufferedFrame& frame, bool emitSignals, bool pushToBackwardBuffer) +{ + rememberPresentedFrame(frame); + if (pushToBackwardBuffer) { + pushBackwardFrame(frame); + } + + { + QMutexLocker locker(&m_frameMutex); + m_currentFrameImage = frame.image; + m_currentFrameScaledImage = QImage(); + m_currentFrameScaledTargetSize = QSize(); + } + + m_lastPresentedPts = frame.pts; + m_positionMs = frame.positionMs; + m_currentFrame = frame.frameNumber; + + const qint64 positionMs = m_positionMs; + const qint64 frameNumber = m_currentFrame; + const qint64 pts = frame.pts; + QMetaObject::invokeMethod(this, + [this, emitSignals, positionMs, frameNumber]() { + emit frameUpdated(); + // DEBUG: uncomment if you need per-frame diagnostics + // emit debugFramePresented(frameNumber, positionMs, pts); + if (emitSignals) { + emit positionChanged(positionMs); + emit currentFrameChanged(frameNumber); + } + }, + Qt::QueuedConnection); +} + +int FFmpegMovPlayer::decodeQueueCapacity() const +{ + return kDecodeQueueFrames; +} + +void FFmpegMovPlayer::rememberPresentedFrame(const BufferedFrame& frame) +{ + std::lock_guard lock(m_decodeMutex); + if (!m_presentedFrames.empty() && m_presentedFrames.back().pts == frame.pts) { + return; + } + m_presentedFrames.push_back(frame); + while (m_presentedFrames.size() > static_cast(kPresentedHistoryFrames)) { + m_presentedFrames.pop_front(); + } +} + +bool FFmpegMovPlayer::takePreviousPresentedFrame(BufferedFrame* frame) +{ + std::lock_guard lock(m_decodeMutex); + if (m_presentedFrames.size() < 2) { + return false; + } + + m_presentedFrames.pop_back(); + if (frame) { + *frame = m_presentedFrames.back(); + } + return true; +} + +void FFmpegMovPlayer::clearPresentedHistory() +{ + std::lock_guard lock(m_decodeMutex); + m_presentedFrames.clear(); +} + +void FFmpegMovPlayer::pushBackwardFrame(const BufferedFrame& frame) +{ + std::lock_guard lock(m_decodeMutex); + if (!m_backwardFrames.empty() && m_backwardFrames.back().pts == frame.pts) { + return; + } + m_backwardFrames.push_back(frame); + + // Cap by frame count (existing) and by memory (new) to avoid OOM on 4K+ content. + qint64 totalBytes = 0; + for (const auto& f : m_backwardFrames) { + totalBytes += f.image.isNull() ? 0 : f.image.sizeInBytes(); + totalBytes += f.scaledImage.isNull() ? 0 : f.scaledImage.sizeInBytes(); + } + while (m_backwardFrames.size() > static_cast(kPresentedHistoryFrames) + || totalBytes > kBackwardBufferMaxBytes) { + const BufferedFrame& oldest = m_backwardFrames.front(); + totalBytes -= oldest.image.isNull() ? 0 : oldest.image.sizeInBytes(); + totalBytes -= oldest.scaledImage.isNull() ? 0 : oldest.scaledImage.sizeInBytes(); + m_backwardFrames.pop_front(); + } +} + +bool FFmpegMovPlayer::popBackwardFrame(BufferedFrame* frame) +{ + std::lock_guard lock(m_decodeMutex); + if (m_backwardFrames.size() < 2) { + return false; + } + + m_backwardFrames.pop_back(); + if (frame) { + *frame = m_backwardFrames.back(); + } + return true; +} + +void FFmpegMovPlayer::clearBackwardFrames() +{ + std::lock_guard lock(m_decodeMutex); + m_backwardFrames.clear(); +} + +void FFmpegMovPlayer::resetPlaybackClock() +{ + m_playbackClock.restart(); + m_playbackStartPositionMs = m_positionMs; + const double fps = m_mediaInfo.fps > 0.0 ? m_mediaInfo.fps : kDefaultFps; + const double rate = qMax(0.001, std::abs(m_playbackRate)); + m_nextPlaybackDeadline = std::chrono::duration_cast( + std::chrono::duration(qMax(1.0, 1000.0 / (fps * rate)))); +} + +bool FFmpegMovPlayer::fallbackToSoftwareDecoding(qint64 restartPositionMs, quint64 generation, bool satisfySeek, QString* errorString) +{ +#if defined(HAVE_FFMPEG) && HAVE_FFMPEG + if (!m_hardwareDecodingActive || m_currentPath.isEmpty()) { + return false; + } + + const QString currentPath = m_currentPath; + closeMedia(); + + QString localError; + if (!openMedia(currentPath, &localError, false)) { + if (errorString) { + *errorString = localError; + } + return false; + } + + const qint64 clampedMs = qBound(0, restartPositionMs, qMax(0, m_durationMs)); + const int64_t targetTs = msToTimestamp(clampedMs); + const int seekResult = av_seek_frame(m_formatContext, m_videoStreamIndex, targetTs, AVSEEK_FLAG_BACKWARD); + if (seekResult < 0) { + localError = tr("Failed to resume MOV playback in software mode for %1").arg(currentPath); + if (errorString) { + *errorString = localError; + } + return false; + } + + avcodec_flush_buffers(m_codecContext); + const bool ok = satisfySeek + ? decodeFrameForTimestamp(targetTs, clampedMs == 0, generation, clampedMs != 0) + : decodeFrameForTimestamp(targetTs, true, generation, false); + if (!ok && errorString) { + *errorString = tr("Failed to resume MOV playback in software mode for %1").arg(currentPath); + } + + qWarning() << "MOV hardware decode disabled, using software fallback for" << currentPath; + return ok; +#else + Q_UNUSED(restartPositionMs); + Q_UNUSED(generation); + Q_UNUSED(satisfySeek); + Q_UNUSED(errorString); + return false; +#endif +} + +bool FFmpegMovPlayer::ensureConversionContext(AVFrame* frame) +{ +#if defined(HAVE_FFMPEG) && HAVE_FFMPEG + if (!frame) { + return false; + } + + if (m_swsContext && m_swsSourceFormat == frame->format && m_swsWidth == frame->width && m_swsHeight == frame->height) { + return true; + } + + if (m_swsContext) { + sws_freeContext(m_swsContext); + m_swsContext = nullptr; + } + + m_swsContext = sws_getContext(frame->width, + frame->height, + static_cast(frame->format), + frame->width, + frame->height, + AV_PIX_FMT_BGRA, + SWS_BILINEAR, + nullptr, + nullptr, + nullptr); + if (!m_swsContext) { + return false; + } + + m_swsSourceFormat = frame->format; + m_swsWidth = frame->width; + m_swsHeight = frame->height; + return true; +#else + Q_UNUSED(frame); + return false; +#endif +} + +AVPixelFormat FFmpegMovPlayer::selectHardwarePixelFormat(AVCodecContext* codecContext, const AVPixelFormat* pixelFormats) +{ +#if defined(HAVE_FFMPEG) && HAVE_FFMPEG + const auto* player = static_cast(codecContext ? codecContext->opaque : nullptr); + const AVPixelFormat preferredFormat = player ? static_cast(player->m_hwPixelFormat) : AV_PIX_FMT_NONE; + + if (pixelFormats) { + for (const auto* format = pixelFormats; *format != AV_PIX_FMT_NONE; ++format) { + if (*format == preferredFormat) { + return *format; + } + } + return pixelFormats[0]; + } +#else + Q_UNUSED(codecContext); + Q_UNUSED(pixelFormats); +#endif + return AV_PIX_FMT_NONE; +} + +// --------------------------------------------------------------------------- +// Async reverse-playback helpers +// --------------------------------------------------------------------------- + +// Post a non-blocking seek to the frame immediately before the current +// presentation position. The decode thread will produce the result in +// m_seekResultFrame / m_seekResultReady; the caller must NOT block waiting +// for it (use the async path in onPlaybackTick instead). +void FFmpegMovPlayer::postReverseSeek() +{ +#if defined(HAVE_FFMPEG) && HAVE_FFMPEG + if (!hasMedia()) { + return; + } + + // Already at the very beginning – nothing to seek to. + if (m_currentFrame <= 0 && m_lastPresentedPts <= 0) { + return; + } + + const int64_t targetTs = + (m_lastPresentedPts != AV_NOPTS_VALUE && m_lastPresentedPts > 0) + ? (m_lastPresentedPts - 1) + : frameToTimestamp(clampFrameNumber(m_currentFrame > 0 ? m_currentFrame - 1 : 0)); + + std::lock_guard lock(m_decodeMutex); + if (m_seekPending || m_seekInProgress) { + return; // Already seeking – the in-flight seek is good enough. + } + + ++m_decodeGeneration; + m_pendingSeekMs = timestampToMs(targetTs); + m_pendingSeekTs = targetTs; + m_pendingSeekPreferPreviousFrame = true; + m_seekPending = true; + m_seekInProgress = false; + m_seekFailed = false; + m_seekResultReady = false; + m_decodeAtEnd = false; + m_pendingDecodeError.clear(); + m_decodedFrames.clear(); + m_decodeCondition.notify_all(); +#endif +} + +// Post an async backward seek only when the backward buffer is nearly empty, +// so the seek overlaps with the current frame's display window. +void FFmpegMovPlayer::postReverseSeekIfNeeded() +{ + { + std::lock_guard lock(m_decodeMutex); + if (m_backwardFrames.size() >= 2) { + return; // Buffer still has frames – no prefetch needed yet. + } + if (m_seekPending || m_seekInProgress) { + return; // Seek already in flight. + } + } + postReverseSeek(); +} + +qint64 FFmpegMovPlayer::timestampToMs(int64_t pts) const +{ +#if defined(HAVE_FFMPEG) && HAVE_FFMPEG + if (pts == AV_NOPTS_VALUE || m_timeBaseNum <= 0 || m_timeBaseDen <= 0) { + return 0; + } + return qMax(0, qRound64((pts * 1000.0 * m_timeBaseNum) / m_timeBaseDen)); +#else + Q_UNUSED(pts); + return 0; +#endif +} + +int64_t FFmpegMovPlayer::msToTimestamp(qint64 positionMs) const +{ +#if defined(HAVE_FFMPEG) && HAVE_FFMPEG + if (m_timeBaseNum <= 0 || m_timeBaseDen <= 0) { + return 0; + } + return qRound64((positionMs / 1000.0) * m_timeBaseDen / m_timeBaseNum); +#else + Q_UNUSED(positionMs); + return 0; +#endif +} + +int64_t FFmpegMovPlayer::frameToTimestamp(qint64 frameNumber) const +{ +#if defined(HAVE_FFMPEG) && HAVE_FFMPEG + const qint64 clampedFrame = clampFrameNumber(frameNumber); + if (m_frameRateNum <= 0 || m_frameRateDen <= 0 || m_timeBaseNum <= 0 || m_timeBaseDen <= 0) { + return msToTimestamp(qRound64((clampedFrame * 1000.0) / (m_mediaInfo.fps > 0.0 ? m_mediaInfo.fps : kDefaultFps))); + } + + const double seconds = (static_cast(clampedFrame) * m_frameRateDen) / m_frameRateNum; + return qMax(0, qRound64(seconds * m_timeBaseDen / m_timeBaseNum)); +#else + Q_UNUSED(frameNumber); + return 0; +#endif +} + +qint64 FFmpegMovPlayer::timestampToFrame(int64_t pts, qint64 fallbackPositionMs) const +{ +#if defined(HAVE_FFMPEG) && HAVE_FFMPEG + if (pts != AV_NOPTS_VALUE && m_frameRateNum > 0 && m_frameRateDen > 0 && m_timeBaseNum > 0 && m_timeBaseDen > 0) { + const double seconds = (static_cast(pts) * m_timeBaseNum) / m_timeBaseDen; + const double frameValue = seconds * m_frameRateNum / m_frameRateDen; + return clampFrameNumber(qRound64(frameValue)); + } + + const double fps = m_mediaInfo.fps > 0.0 ? m_mediaInfo.fps : kDefaultFps; + return clampFrameNumber(qRound64((fallbackPositionMs / 1000.0) * fps)); +#else + Q_UNUSED(pts); + Q_UNUSED(fallbackPositionMs); + return 0; +#endif +} + +qint64 FFmpegMovPlayer::clampFrameNumber(qint64 frameNumber) const +{ + const qint64 maxFrame = qMax(0, m_totalFrames - 1); + return qBound(0, frameNumber, maxFrame); +} + +void FFmpegMovPlayer::setPlaybackState(media_player::PlaybackState state) +{ + if (m_playbackState == state) { + return; + } + m_playbackState = state; + emit playbackStateChanged(state); +} + +void FFmpegMovPlayer::clearPresentedFrame() +{ + QMutexLocker locker(&m_frameMutex); + m_currentFrameImage = QImage(); + m_currentFrameScaledImage = QImage(); + m_currentFrameScaledTargetSize = QSize(); + m_requestedFrameTargetSize = QSize(); +} + +void FFmpegMovPlayer::syncAudioPosition(qint64 positionMs) +{ + if (!m_audioPlayer || m_audioPlayer->source().isEmpty()) { + return; + } + + const qint64 delta = std::llabs(m_audioPlayer->position() - positionMs); + if (delta > 80) { + m_audioPlayer->setPosition(positionMs); + } +} diff --git a/native/qt6/src/media/ffmpeg_mov_player.h b/native/qt6/src/media/ffmpeg_mov_player.h new file mode 100644 index 00000000..61054a0c --- /dev/null +++ b/native/qt6/src/media/ffmpeg_mov_player.h @@ -0,0 +1,200 @@ +#ifndef FFMPEG_MOV_PLAYER_H +#define FFMPEG_MOV_PLAYER_H + +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +#include "media_player_types.h" + +#if defined(HAVE_FFMPEG) && HAVE_FFMPEG +extern "C" { +#include +} +#endif + +struct AVCodecContext; +struct AVFormatContext; +struct AVBufferRef; +struct AVFrame; +struct AVPacket; +struct SwsContext; +class FFmpegMovPlayer : public QObject +{ + Q_OBJECT + +public: + explicit FFmpegMovPlayer(QObject* parent = nullptr); + ~FFmpegMovPlayer() override; + + void loadMedia(const QString& filePath); + void unloadMedia(); + bool hasMedia() const; + + void play(); + void pause(); + void stop(); + void seek(qint64 positionMs); + void seekToFrame(qint64 frameNumber); + void stepForward(); + void stepBackward(); + + void setPlaybackRate(double rate); + double playbackRate() const { return m_playbackRate; } + void setLoopMode(media_player::LoopMode mode); + media_player::LoopMode loopMode() const { return m_loopMode; } + + void setVolume(float volume); + float volume() const { return m_volume; } + void setMuted(bool muted); + bool isMuted() const { return m_muted; } + + media_player::PlaybackState playbackState() const { return m_playbackState; } + qint64 position() const { return m_positionMs; } + qint64 duration() const { return m_durationMs; } + qint64 currentFrame() const { return m_currentFrame; } + qint64 totalFrames() const { return m_totalFrames; } + media_player::MediaInfo mediaInfo() const { return m_mediaInfo; } + QString currentMediaPath() const { return m_currentPath; } + + QImage currentFrameImage() const; + QImage currentFrameImage(const QSize& targetSize); + QSize currentFrameSize() const; + +signals: + void positionChanged(qint64 positionMs); + void durationChanged(qint64 durationMs); + void currentFrameChanged(qint64 frameNumber); + // DEBUG: uncomment if you need per-frame diagnostics + // void debugFramePresented(qint64 frameNumber, qint64 positionMs, qint64 pts); + void mediaInfoReady(const media_player::MediaInfo& info); + void playbackStateChanged(media_player::PlaybackState state); + void error(const QString& errorString); + void endOfStream(); + void frameUpdated(); + +private slots: + void onPlaybackTick(); + void syncAudioPosition(qint64 positionMs); + +private: + struct BufferedFrame { + QImage image; + QImage scaledImage; + QSize scaledTargetSize; + qint64 positionMs{0}; + qint64 frameNumber{0}; + qint64 pts{0}; + }; + + bool openMedia(const QString& filePath, QString* errorString, bool allowHardwareDecoding = true); + void closeMedia(); + void startDecodeThread(); + void stopDecodeThread(); + void decodeThreadMain(); + void updatePlaybackTimer(); + bool decodeNextFrame(quint64 generation); + bool decodeFrameForTimestamp(int64_t targetTs, bool allowPastTarget, quint64 generation, bool preferPreviousFrame = false); + bool seekInternal(qint64 positionMs, bool emitSignals, bool clearHistory = true); + bool seekToTimestampInternal(int64_t targetTs, bool emitSignals, bool preferPreviousFrame = false, bool clearHistory = true); + bool presentDecodedFrame(AVFrame* frame, BufferedFrame* bufferedFrame); + bool queueBufferedFrame(BufferedFrame&& frame, quint64 generation, bool satisfySeek); + bool waitForSeekFrame(quint64 generation, BufferedFrame* frame, QString* errorString = nullptr); + bool takeBufferedFrameForPlayback(qint64 targetPositionMs, BufferedFrame* frame, bool* reachedEndOfStream); + void presentBufferedFrame(const BufferedFrame& frame, bool emitSignals, bool pushToBackwardBuffer = true); + void rememberPresentedFrame(const BufferedFrame& frame); + bool takePreviousPresentedFrame(BufferedFrame* frame); + void clearPresentedHistory(); + void pushBackwardFrame(const BufferedFrame& frame); + bool popBackwardFrame(BufferedFrame* frame); + void clearBackwardFrames(); + int decodeQueueCapacity() const; + void resetPlaybackClock(); + bool fallbackToSoftwareDecoding(qint64 restartPositionMs, quint64 generation, bool satisfySeek, QString* errorString = nullptr); + bool ensureConversionContext(AVFrame* frame); + void postReverseSeek(); + void postReverseSeekIfNeeded(); + qint64 timestampToMs(int64_t pts) const; + int64_t msToTimestamp(qint64 positionMs) const; + int64_t frameToTimestamp(qint64 frameNumber) const; + qint64 timestampToFrame(int64_t pts, qint64 fallbackPositionMs) const; + qint64 clampFrameNumber(qint64 frameNumber) const; + void setPlaybackState(media_player::PlaybackState state); + void clearPresentedFrame(); + static AVPixelFormat selectHardwarePixelFormat(AVCodecContext* codecContext, const AVPixelFormat* pixelFormats); + + mutable QMutex m_frameMutex; + QImage m_currentFrameImage; + QImage m_currentFrameScaledImage; + QSize m_currentFrameScaledTargetSize; + QSize m_requestedFrameTargetSize; + QImage m_conversionScratchImage; + + QChronoTimer* m_playbackTimer{nullptr}; + QElapsedTimer m_playbackClock; + std::chrono::nanoseconds m_nextPlaybackDeadline{std::chrono::nanoseconds::zero()}; + qint64 m_playbackStartPositionMs{0}; + class QMediaPlayer* m_audioPlayer{nullptr}; + class QAudioOutput* m_audioOutput{nullptr}; + media_player::PlaybackState m_playbackState{media_player::PlaybackState::Stopped}; + media_player::LoopMode m_loopMode{media_player::LoopMode::Loop}; + media_player::MediaInfo m_mediaInfo; + QString m_currentPath; + qint64 m_positionMs{0}; + qint64 m_durationMs{0}; + qint64 m_currentFrame{0}; + qint64 m_totalFrames{0}; + float m_volume{1.0f}; + bool m_muted{false}; + double m_playbackRate{1.0}; + + AVFormatContext* m_formatContext{nullptr}; + AVCodecContext* m_codecContext{nullptr}; + AVBufferRef* m_hwDeviceContext{nullptr}; + SwsContext* m_swsContext{nullptr}; + AVFrame* m_decodeFrame{nullptr}; + AVFrame* m_transferFrame{nullptr}; + AVPacket* m_packet{nullptr}; + int m_videoStreamIndex{-1}; + int m_timeBaseNum{0}; + int m_timeBaseDen{1}; + int m_frameRateNum{0}; + int m_frameRateDen{1}; + int m_hwPixelFormat{-1}; + int m_swsSourceFormat{-1}; + int m_swsWidth{0}; + int m_swsHeight{0}; + int64_t m_lastPresentedPts{-1}; + bool m_hardwareDecodingActive{false}; + + std::mutex m_decodeMutex; + std::condition_variable m_decodeCondition; + std::deque m_decodedFrames; + std::deque m_presentedFrames; + std::deque m_backwardFrames; + BufferedFrame m_seekResultFrame; + std::thread m_decodeThread; + bool m_decodeStopRequested{false}; + bool m_seekPending{false}; + bool m_seekInProgress{false}; + bool m_seekFailed{false}; + bool m_seekResultReady{false}; + bool m_decodeAtEnd{false}; + qint64 m_pendingSeekMs{0}; + int64_t m_pendingSeekTs{0}; + bool m_pendingSeekPreferPreviousFrame{false}; + quint64 m_decodeGeneration{0}; + QString m_pendingDecodeError; +}; + +#endif diff --git a/native/qt6/src/media/ffmpeg_mov_viewport.cpp b/native/qt6/src/media/ffmpeg_mov_viewport.cpp new file mode 100644 index 00000000..773398f5 --- /dev/null +++ b/native/qt6/src/media/ffmpeg_mov_viewport.cpp @@ -0,0 +1,165 @@ +#include "ffmpeg_mov_viewport.h" + +#include +#include +#include +#include + +#include "ffmpeg_mov_player.h" + +FFmpegMovViewport::FFmpegMovViewport(QWidget* parent) + : QWidget(parent) +{ + setFocusPolicy(Qt::StrongFocus); + setAttribute(Qt::WA_OpaquePaintEvent, true); + setAutoFillBackground(false); +} + +void FFmpegMovViewport::setPlayer(FFmpegMovPlayer* player) +{ + if (m_player) { + disconnect(m_player, nullptr, this, nullptr); + } + + m_player = player; + if (m_player) { + connect(m_player, &FFmpegMovPlayer::frameUpdated, this, [this]() { + invalidateDisplayCache(); + update(); + emit frameRendered(); + }); + connect(m_player, &FFmpegMovPlayer::mediaInfoReady, this, [this](const media_player::MediaInfo&) { + invalidateDisplayCache(); + update(); + }); + } + invalidateDisplayCache(); + update(); +} + +void FFmpegMovViewport::setFrameView(bool enabled) +{ + if (enabled) { + m_zoom = 1.0; + update(); + } +} + +bool FFmpegMovViewport::frameViewEnabled() const +{ + return qFuzzyCompare(m_zoom, 1.0); +} + +void FFmpegMovViewport::zoomRelative(double factor) +{ + m_zoom = qBound(0.1, m_zoom * factor, 10.0); + update(); +} + +QRect FFmpegMovViewport::displayedContentRect() const +{ + return imageRect(); +} + +QImage FFmpegMovViewport::currentFrameForTest() const +{ + return m_player ? m_player->currentFrameImage() : QImage(); +} + +void FFmpegMovViewport::invalidateDisplayCache() +{ + m_displayPixmap = QPixmap(); + m_sourceFrameSize = QSize(); + m_sourceFrameFingerprint.clear(); +} + +void FFmpegMovViewport::updateDisplayCache() +{ + if (!m_player) { + invalidateDisplayCache(); + return; + } + + const QImage frame = m_player->currentFrameImage(); + if (frame.isNull()) { + invalidateDisplayCache(); + return; + } + + const QRect targetRect = imageRect(); + if (!targetRect.isValid() || targetRect.isEmpty()) { + invalidateDisplayCache(); + return; + } + + const QImage normalized = frame.convertToFormat(QImage::Format_RGBA8888); + const QByteArray frameFingerprint = QCryptographicHash::hash( + QByteArray(reinterpret_cast(normalized.constBits()), static_cast(normalized.sizeInBytes())), + QCryptographicHash::Sha256); + + if (!m_displayPixmap.isNull() + && m_sourceFrameSize == frame.size() + && m_displayPixmap.size() == targetRect.size() + && m_sourceFrameFingerprint == frameFingerprint) { + return; + } + + const QImage scaled = frame.scaled(targetRect.size(), Qt::KeepAspectRatio, Qt::SmoothTransformation); + m_displayPixmap = QPixmap::fromImage(scaled); + m_sourceFrameSize = frame.size(); + m_sourceFrameFingerprint = frameFingerprint; +} + +void FFmpegMovViewport::paintEvent(QPaintEvent* event) +{ + Q_UNUSED(event); + + QPainter painter(this); + painter.fillRect(rect(), QColor(17, 17, 17)); + + if (!m_player) { + return; + } + + updateDisplayCache(); + if (m_displayPixmap.isNull()) { + return; + } + + const QRect targetRect = imageRect(); + if (!targetRect.isValid() || targetRect.isEmpty()) { + return; + } + + painter.drawPixmap(targetRect, m_displayPixmap); +} + +void FFmpegMovViewport::resizeEvent(QResizeEvent* event) +{ + QWidget::resizeEvent(event); + invalidateDisplayCache(); +} + +QRect FFmpegMovViewport::imageRect() const +{ + const QRect contents = contentsRect(); + const QSize sourceSize = sourceImageSize(); + if (!sourceSize.isValid()) { + return contents; + } + + QSize drawSize = sourceSize.scaled(contents.size(), Qt::KeepAspectRatio); + if (!qFuzzyCompare(m_zoom, 1.0)) { + drawSize = (drawSize * m_zoom).boundedTo(contents.size() * 10); + } + + const QPoint topLeft( + contents.x() + (contents.width() - drawSize.width()) / 2, + contents.y() + (contents.height() - drawSize.height()) / 2); + return QRect(topLeft, drawSize); +} + +QSize FFmpegMovViewport::sourceImageSize() const +{ + return m_player ? m_player->currentFrameSize() : QSize(); +} diff --git a/native/qt6/src/media/ffmpeg_mov_viewport.h b/native/qt6/src/media/ffmpeg_mov_viewport.h new file mode 100644 index 00000000..7584b354 --- /dev/null +++ b/native/qt6/src/media/ffmpeg_mov_viewport.h @@ -0,0 +1,47 @@ +#ifndef FFMPEG_MOV_VIEWPORT_H +#define FFMPEG_MOV_VIEWPORT_H + +#include +#include +#include +#include +#include + +class FFmpegMovPlayer; +class FFmpegMovViewport : public QWidget +{ + Q_OBJECT + +public: + explicit FFmpegMovViewport(QWidget* parent = nullptr); + + void setPlayer(FFmpegMovPlayer* player); + FFmpegMovPlayer* player() const { return m_player; } + + void setFrameView(bool enabled); + bool frameViewEnabled() const; + void zoomRelative(double factor); + QRect displayedContentRect() const; + QImage currentFrameForTest() const; + +signals: + void frameRendered(); + +protected: + void paintEvent(QPaintEvent* event) override; + void resizeEvent(QResizeEvent* event) override; + +private: + QRect imageRect() const; + QSize sourceImageSize() const; + void invalidateDisplayCache(); + void updateDisplayCache(); + + FFmpegMovPlayer* m_player{nullptr}; + double m_zoom{1.0}; + QPixmap m_displayPixmap; + QSize m_sourceFrameSize; + QByteArray m_sourceFrameFingerprint; +}; + +#endif diff --git a/native/qt6/src/media/libmpv_headers.h b/native/qt6/src/media/libmpv_headers.h new file mode 100644 index 00000000..256d90da --- /dev/null +++ b/native/qt6/src/media/libmpv_headers.h @@ -0,0 +1,11 @@ +#ifndef LIBMPV_HEADERS_H +#define LIBMPV_HEADERS_H + +// Vendored official libmpv API headers to avoid relying on system -devel +// packages on developer machines. Runtime still loads the system libmpv.so. + +#include "mpv/client.h" +#include "mpv/render.h" +#include "mpv/render_gl.h" + +#endif diff --git a/native/qt6/src/media/libmpv_runtime.cpp b/native/qt6/src/media/libmpv_runtime.cpp new file mode 100644 index 00000000..bd32a9b3 --- /dev/null +++ b/native/qt6/src/media/libmpv_runtime.cpp @@ -0,0 +1,67 @@ +#include "libmpv_runtime.h" + +LibMpvRuntime& LibMpvRuntime::instance() +{ + static LibMpvRuntime runtime; + return runtime; +} + +LibMpvRuntime::LibMpvRuntime() +{ +#if defined(Q_OS_WIN) + m_library.setFileName(QStringLiteral("mpv-2")); +#else + const QStringList candidates = { + QStringLiteral("libmpv.so.2"), + QStringLiteral("mpv") + }; + for (const QString& candidate : candidates) { + m_library.setFileName(candidate); + if (m_library.load()) { + break; + } + m_error = m_library.errorString(); + } + if (!m_library.isLoaded()) { + return; + } +#endif + +#if defined(Q_OS_WIN) + if (!m_library.load()) { + m_error = m_library.errorString(); + return; + } +#endif + + m_loaded = + resolve(client_api_version, "mpv_client_api_version") && + resolve(error_string, "mpv_error_string") && + resolve(free_fn, "mpv_free") && + resolve(free_node_contents, "mpv_free_node_contents") && + resolve(create, "mpv_create") && + resolve(initialize, "mpv_initialize") && + resolve(destroy, "mpv_destroy") && + resolve(terminate_destroy, "mpv_terminate_destroy") && + resolve(set_option_string, "mpv_set_option_string") && + resolve(command, "mpv_command") && + resolve(command_node, "mpv_command_node") && + resolve(set_property, "mpv_set_property") && + resolve(set_property_string, "mpv_set_property_string") && + resolve(get_property, "mpv_get_property") && + resolve(get_property_string, "mpv_get_property_string") && + resolve(observe_property, "mpv_observe_property") && + resolve(unobserve_property, "mpv_unobserve_property") && + resolve(request_event, "mpv_request_event") && + resolve(request_log_messages, "mpv_request_log_messages") && + resolve(wait_event, "mpv_wait_event") && + resolve(set_wakeup_callback, "mpv_set_wakeup_callback") && + resolve(render_context_create, "mpv_render_context_create") && + resolve(render_context_set_parameter, "mpv_render_context_set_parameter") && + resolve(render_context_get_info, "mpv_render_context_get_info") && + resolve(render_context_set_update_callback, "mpv_render_context_set_update_callback") && + resolve(render_context_update, "mpv_render_context_update") && + resolve(render_context_render, "mpv_render_context_render") && + resolve(render_context_report_swap, "mpv_render_context_report_swap") && + resolve(render_context_free, "mpv_render_context_free"); +} diff --git a/native/qt6/src/media/libmpv_runtime.h b/native/qt6/src/media/libmpv_runtime.h new file mode 100644 index 00000000..e686c497 --- /dev/null +++ b/native/qt6/src/media/libmpv_runtime.h @@ -0,0 +1,67 @@ +#ifndef LIBMPV_RUNTIME_H +#define LIBMPV_RUNTIME_H + +#include +#include + +#include "libmpv_headers.h" + +class LibMpvRuntime +{ +public: + static LibMpvRuntime& instance(); + + bool isAvailable() const { return m_loaded; } + QString errorString() const { return m_error; } + + unsigned long (*client_api_version)(); + const char *(*error_string)(int error); + void (*free_fn)(void *data); + void (*free_node_contents)(mpv_node *node); + mpv_handle *(*create)(); + int (*initialize)(mpv_handle *ctx); + void (*destroy)(mpv_handle *ctx); + void (*terminate_destroy)(mpv_handle *ctx); + int (*set_option_string)(mpv_handle *ctx, const char *name, const char *data); + int (*command)(mpv_handle *ctx, const char **args); + int (*command_node)(mpv_handle *ctx, mpv_node *args, mpv_node *result); + int (*set_property)(mpv_handle *ctx, const char *name, mpv_format format, void *data); + int (*set_property_string)(mpv_handle *ctx, const char *name, const char *data); + int (*get_property)(mpv_handle *ctx, const char *name, mpv_format format, void *data); + char *(*get_property_string)(mpv_handle *ctx, const char *name); + int (*observe_property)(mpv_handle *ctx, uint64_t reply_userdata, const char *name, mpv_format format); + int (*unobserve_property)(mpv_handle *ctx, uint64_t registered_reply_userdata); + int (*request_event)(mpv_handle *ctx, mpv_event_id event, int enable); + int (*request_log_messages)(mpv_handle *ctx, const char *min_level); + mpv_event *(*wait_event)(mpv_handle *ctx, double timeout); + void (*set_wakeup_callback)(mpv_handle *ctx, void (*cb)(void *d), void *d); + + int (*render_context_create)(mpv_render_context **res, mpv_handle *mpv, mpv_render_param *params); + int (*render_context_set_parameter)(mpv_render_context *ctx, mpv_render_param param); + int (*render_context_get_info)(mpv_render_context *ctx, mpv_render_param param); + void (*render_context_set_update_callback)(mpv_render_context *ctx, mpv_render_update_fn callback, void *callback_ctx); + uint64_t (*render_context_update)(mpv_render_context *ctx); + int (*render_context_render)(mpv_render_context *ctx, mpv_render_param *params); + void (*render_context_report_swap)(mpv_render_context *ctx); + void (*render_context_free)(mpv_render_context *ctx); + +private: + LibMpvRuntime(); + + template + bool resolve(T& out, const char* symbol) + { + out = reinterpret_cast(m_library.resolve(symbol)); + if (!out) { + m_error = QStringLiteral("Failed to resolve libmpv symbol: %1").arg(QString::fromUtf8(symbol)); + return false; + } + return true; + } + + bool m_loaded{false}; + QString m_error; + QLibrary m_library; +}; + +#endif diff --git a/native/qt6/src/media/media_player_types.h b/native/qt6/src/media/media_player_types.h new file mode 100644 index 00000000..c04d1c94 --- /dev/null +++ b/native/qt6/src/media/media_player_types.h @@ -0,0 +1,35 @@ +#ifndef MEDIA_PLAYER_TYPES_H +#define MEDIA_PLAYER_TYPES_H + +#include +#include + +namespace media_player { + +enum class PlaybackState { + Stopped, + Playing, + Paused +}; + +enum class LoopMode { + Once, + Loop, + PingPong +}; + +struct MediaInfo { + int width = 0; + int height = 0; + double fps = 0.0; + qint64 durationMs = 0; + qint64 totalFrames = 0; + QString codec; + bool hasAudio = false; + int audioChannels = 0; + int audioSampleRate = 0; +}; + +} // namespace media_player + +#endif diff --git a/native/qt6/src/media/mpv/client.h b/native/qt6/src/media/mpv/client.h new file mode 100644 index 00000000..33d64199 --- /dev/null +++ b/native/qt6/src/media/mpv/client.h @@ -0,0 +1,178 @@ +/* Official libmpv client API header (trimmed local copy). */ +/* Source: https://raw.githubusercontent.com/mpv-player/mpv/master/include/mpv/client.h */ +/* ISC license retained from upstream. */ + +#ifndef MPV_CLIENT_API_H_ +#define MPV_CLIENT_API_H_ + +#include +#include + +#ifdef _WIN32 +#define MPV_EXPORT __declspec(dllexport) +#define MPV_SELECTANY __declspec(selectany) +#elif defined(__GNUC__) || defined(__clang__) +#define MPV_EXPORT __attribute__((visibility("default"))) +#define MPV_SELECTANY +#else +#define MPV_EXPORT +#define MPV_SELECTANY +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +#define MPV_MAKE_VERSION(major, minor) (((major) << 16) | (minor) | 0UL) +#define MPV_CLIENT_API_VERSION MPV_MAKE_VERSION(2, 5) + +#ifndef MPV_ENABLE_DEPRECATED +#define MPV_ENABLE_DEPRECATED 1 +#endif + +typedef struct mpv_handle mpv_handle; + +typedef enum mpv_error { + MPV_ERROR_SUCCESS = 0, + MPV_ERROR_EVENT_QUEUE_FULL = -1, + MPV_ERROR_NOMEM = -2, + MPV_ERROR_UNINITIALIZED = -3, + MPV_ERROR_INVALID_PARAMETER = -4, + MPV_ERROR_OPTION_NOT_FOUND = -5, + MPV_ERROR_OPTION_FORMAT = -6, + MPV_ERROR_OPTION_ERROR = -7, + MPV_ERROR_PROPERTY_NOT_FOUND = -8, + MPV_ERROR_PROPERTY_FORMAT = -9, + MPV_ERROR_PROPERTY_UNAVAILABLE = -10, + MPV_ERROR_PROPERTY_ERROR = -11, + MPV_ERROR_COMMAND = -12, + MPV_ERROR_LOADING_FAILED = -13, + MPV_ERROR_AO_INIT_FAILED = -14, + MPV_ERROR_VO_INIT_FAILED = -15, + MPV_ERROR_NOTHING_TO_PLAY = -16, + MPV_ERROR_UNKNOWN_FORMAT = -17, + MPV_ERROR_UNSUPPORTED = -18, + MPV_ERROR_NOT_IMPLEMENTED = -19, + MPV_ERROR_GENERIC = -20 +} mpv_error; + +typedef enum mpv_format { + MPV_FORMAT_NONE = 0, + MPV_FORMAT_STRING = 1, + MPV_FORMAT_OSD_STRING = 2, + MPV_FORMAT_FLAG = 3, + MPV_FORMAT_INT64 = 4, + MPV_FORMAT_DOUBLE = 5, + MPV_FORMAT_NODE = 6, + MPV_FORMAT_NODE_ARRAY = 7, + MPV_FORMAT_NODE_MAP = 8, + MPV_FORMAT_BYTE_ARRAY = 9 +} mpv_format; + +typedef struct mpv_node mpv_node; +typedef struct mpv_node_list mpv_node_list; +typedef struct mpv_byte_array mpv_byte_array; + +struct mpv_node { + union { + char *string; + int flag; + int64_t int64; + double double_; + struct mpv_node_list *list; + struct mpv_byte_array *ba; + } u; + mpv_format format; +}; + +struct mpv_node_list { + int num; + mpv_node *values; + char **keys; +}; + +struct mpv_byte_array { + void *data; + size_t size; +}; + +typedef enum mpv_event_id { + MPV_EVENT_NONE = 0, + MPV_EVENT_SHUTDOWN = 1, + MPV_EVENT_LOG_MESSAGE = 2, + MPV_EVENT_GET_PROPERTY_REPLY = 3, + MPV_EVENT_SET_PROPERTY_REPLY = 4, + MPV_EVENT_COMMAND_REPLY = 5, + MPV_EVENT_START_FILE = 6, + MPV_EVENT_END_FILE = 7, + MPV_EVENT_FILE_LOADED = 8, + MPV_EVENT_CLIENT_MESSAGE = 16, + MPV_EVENT_VIDEO_RECONFIG = 17, + MPV_EVENT_AUDIO_RECONFIG = 18, + MPV_EVENT_SEEK = 20, + MPV_EVENT_PLAYBACK_RESTART = 21, + MPV_EVENT_PROPERTY_CHANGE = 22, + MPV_EVENT_QUEUE_OVERFLOW = 24, + MPV_EVENT_HOOK = 25, +} mpv_event_id; + +typedef struct mpv_event_property { + const char *name; + mpv_format format; + void *data; +} mpv_event_property; + +typedef enum mpv_end_file_reason { + MPV_END_FILE_REASON_EOF = 0, + MPV_END_FILE_REASON_STOP = 2, + MPV_END_FILE_REASON_QUIT = 3, + MPV_END_FILE_REASON_ERROR = 4, + MPV_END_FILE_REASON_REDIRECT = 5, +} mpv_end_file_reason; + +typedef struct mpv_event_end_file { + mpv_end_file_reason reason; + int error; + int64_t playlist_entry_id; + int64_t playlist_insert_id; + int playlist_insert_num_entries; +} mpv_event_end_file; + +typedef struct mpv_event_command { + mpv_node result; +} mpv_event_command; + +typedef struct mpv_event { + mpv_event_id event_id; + int error; + uint64_t reply_userdata; + void *data; +} mpv_event; + +MPV_EXPORT unsigned long mpv_client_api_version(void); +MPV_EXPORT const char *mpv_error_string(int error); +MPV_EXPORT void mpv_free(void *data); +MPV_EXPORT void mpv_free_node_contents(mpv_node *node); +MPV_EXPORT mpv_handle *mpv_create(void); +MPV_EXPORT int mpv_initialize(mpv_handle *ctx); +MPV_EXPORT void mpv_destroy(mpv_handle *ctx); +MPV_EXPORT void mpv_terminate_destroy(mpv_handle *ctx); +MPV_EXPORT int mpv_set_option_string(mpv_handle *ctx, const char *name, const char *data); +MPV_EXPORT int mpv_command(mpv_handle *ctx, const char **args); +MPV_EXPORT int mpv_command_node(mpv_handle *ctx, mpv_node *args, mpv_node *result); +MPV_EXPORT int mpv_set_property(mpv_handle *ctx, const char *name, mpv_format format, void *data); +MPV_EXPORT int mpv_set_property_string(mpv_handle *ctx, const char *name, const char *data); +MPV_EXPORT int mpv_get_property(mpv_handle *ctx, const char *name, mpv_format format, void *data); +MPV_EXPORT char *mpv_get_property_string(mpv_handle *ctx, const char *name); +MPV_EXPORT int mpv_observe_property(mpv_handle *mpv, uint64_t reply_userdata, const char *name, mpv_format format); +MPV_EXPORT int mpv_unobserve_property(mpv_handle *mpv, uint64_t registered_reply_userdata); +MPV_EXPORT int mpv_request_event(mpv_handle *ctx, mpv_event_id event, int enable); +MPV_EXPORT int mpv_request_log_messages(mpv_handle *ctx, const char *min_level); +MPV_EXPORT mpv_event *mpv_wait_event(mpv_handle *ctx, double timeout); +MPV_EXPORT void mpv_set_wakeup_callback(mpv_handle *ctx, void (*cb)(void *d), void *d); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/native/qt6/src/media/mpv/render.h b/native/qt6/src/media/mpv/render.h new file mode 100644 index 00000000..0147653f --- /dev/null +++ b/native/qt6/src/media/mpv/render.h @@ -0,0 +1,78 @@ +/* Official libmpv render API header (trimmed local copy). */ + +#ifndef MPV_CLIENT_API_RENDER_H_ +#define MPV_CLIENT_API_RENDER_H_ + +#include "client.h" + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct mpv_render_context mpv_render_context; + +typedef enum mpv_render_param_type { + MPV_RENDER_PARAM_INVALID = 0, + MPV_RENDER_PARAM_API_TYPE = 1, + MPV_RENDER_PARAM_OPENGL_INIT_PARAMS = 2, + MPV_RENDER_PARAM_OPENGL_FBO = 3, + MPV_RENDER_PARAM_FLIP_Y = 4, + MPV_RENDER_PARAM_DEPTH = 5, + MPV_RENDER_PARAM_ICC_PROFILE = 6, + MPV_RENDER_PARAM_AMBIENT_LIGHT = 7, + MPV_RENDER_PARAM_X11_DISPLAY = 8, + MPV_RENDER_PARAM_WL_DISPLAY = 9, + MPV_RENDER_PARAM_ADVANCED_CONTROL = 10, + MPV_RENDER_PARAM_NEXT_FRAME_INFO = 11, + MPV_RENDER_PARAM_BLOCK_FOR_TARGET_TIME = 12, + MPV_RENDER_PARAM_SKIP_RENDERING = 13, + MPV_RENDER_PARAM_DRM_DISPLAY = 14, + MPV_RENDER_PARAM_DRM_DRAW_SURFACE_SIZE = 15, + MPV_RENDER_PARAM_DRM_DISPLAY_V2 = 16, + MPV_RENDER_PARAM_SW_SIZE = 17, + MPV_RENDER_PARAM_SW_FORMAT = 18, + MPV_RENDER_PARAM_SW_STRIDE = 19, + MPV_RENDER_PARAM_SW_POINTER = 20, +} mpv_render_param_type; + +typedef struct mpv_render_param { + enum mpv_render_param_type type; + void *data; +} mpv_render_param; + +#define MPV_RENDER_API_TYPE_OPENGL "opengl" +#define MPV_RENDER_API_TYPE_SW "sw" + +typedef enum mpv_render_frame_info_flag { + MPV_RENDER_FRAME_INFO_PRESENT = 1 << 0, + MPV_RENDER_FRAME_INFO_REDRAW = 1 << 1, + MPV_RENDER_FRAME_INFO_REPEAT = 1 << 2, + MPV_RENDER_FRAME_INFO_BLOCK_VSYNC = 1 << 3, +} mpv_render_frame_info_flag; + +typedef struct mpv_render_frame_info { + uint64_t flags; + int64_t target_time; +} mpv_render_frame_info; + +typedef void (*mpv_render_update_fn)(void *cb_ctx); + +MPV_EXPORT int mpv_render_context_create(mpv_render_context **res, mpv_handle *mpv, + mpv_render_param *params); +MPV_EXPORT int mpv_render_context_set_parameter(mpv_render_context *ctx, + mpv_render_param param); +MPV_EXPORT int mpv_render_context_get_info(mpv_render_context *ctx, + mpv_render_param param); +MPV_EXPORT void mpv_render_context_set_update_callback(mpv_render_context *ctx, + mpv_render_update_fn callback, + void *callback_ctx); +MPV_EXPORT uint64_t mpv_render_context_update(mpv_render_context *ctx); +MPV_EXPORT int mpv_render_context_render(mpv_render_context *ctx, mpv_render_param *params); +MPV_EXPORT void mpv_render_context_report_swap(mpv_render_context *ctx); +MPV_EXPORT void mpv_render_context_free(mpv_render_context *ctx); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/native/qt6/src/media/mpv/render_gl.h b/native/qt6/src/media/mpv/render_gl.h new file mode 100644 index 00000000..eb606b6e --- /dev/null +++ b/native/qt6/src/media/mpv/render_gl.h @@ -0,0 +1,27 @@ +/* Official libmpv OpenGL render API header (trimmed local copy). */ + +#ifndef MPV_CLIENT_API_RENDER_GL_H_ +#define MPV_CLIENT_API_RENDER_GL_H_ + +#include "render.h" + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct mpv_opengl_init_params { + void *(*get_proc_address)(void *ctx, const char *name); + void *get_proc_address_ctx; +} mpv_opengl_init_params; + +typedef struct mpv_opengl_fbo { + int fbo; + int w, h; + int internal_format; +} mpv_opengl_fbo; + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/native/qt6/src/media/mpv_player.cpp b/native/qt6/src/media/mpv_player.cpp new file mode 100644 index 00000000..0b900993 --- /dev/null +++ b/native/qt6/src/media/mpv_player.cpp @@ -0,0 +1,454 @@ +#include "mpv_player.h" + +#include +#include +#include +#include +#include +#include +#include + +namespace { +struct MpvNumericLocaleGuard { + MpvNumericLocaleGuard() { + setlocale(LC_NUMERIC, "C"); + } +}; + +const MpvNumericLocaleGuard g_mpvNumericLocaleGuard; + +constexpr uint64_t kObserveTimePos = 1; +constexpr uint64_t kObserveDuration = 2; +constexpr uint64_t kObservePause = 3; +constexpr uint64_t kObserveWidth = 4; +constexpr uint64_t kObserveHeight = 5; +constexpr uint64_t kObserveFps = 6; +constexpr uint64_t kObserveEstimatedFrames = 7; +constexpr uint64_t kObserveVolume = 8; +constexpr uint64_t kObserveMute = 9; +constexpr uint64_t kObserveAudioParams = 10; +} + +MpvPlayer::MpvPlayer(QObject* parent) + : QObject(parent) + , m_runtime(LibMpvRuntime::instance()) +{ + + if (!m_runtime.isAvailable()) { + return; + } + + m_mpv = m_runtime.create(); + if (!m_mpv) { + return; + } + + m_runtime.set_option_string(m_mpv, "vo", "libmpv"); + m_runtime.set_option_string(m_mpv, "hwdec", "auto-safe"); + m_runtime.set_option_string(m_mpv, "keep-open", "yes"); + m_runtime.set_option_string(m_mpv, "keepaspect", "yes"); + m_runtime.set_option_string(m_mpv, "osc", "no"); + m_runtime.set_option_string(m_mpv, "input-default-bindings", "no"); + m_runtime.set_option_string(m_mpv, "input-vo-keyboard", "no"); + m_runtime.set_option_string(m_mpv, "config", "no"); + m_runtime.set_option_string(m_mpv, "audio-display", "no"); + + if (m_runtime.initialize(m_mpv) < 0) { + m_runtime.terminate_destroy(m_mpv); + m_mpv = nullptr; + return; + } + + m_runtime.observe_property(m_mpv, kObserveTimePos, "time-pos", MPV_FORMAT_DOUBLE); + m_runtime.observe_property(m_mpv, kObserveDuration, "duration", MPV_FORMAT_DOUBLE); + m_runtime.observe_property(m_mpv, kObservePause, "pause", MPV_FORMAT_FLAG); + m_runtime.observe_property(m_mpv, kObserveWidth, "width", MPV_FORMAT_INT64); + m_runtime.observe_property(m_mpv, kObserveHeight, "height", MPV_FORMAT_INT64); + m_runtime.observe_property(m_mpv, kObserveFps, "container-fps", MPV_FORMAT_DOUBLE); + m_runtime.observe_property(m_mpv, kObserveEstimatedFrames, "estimated-frame-count", MPV_FORMAT_INT64); + m_runtime.observe_property(m_mpv, kObserveVolume, "volume", MPV_FORMAT_DOUBLE); + m_runtime.observe_property(m_mpv, kObserveMute, "mute", MPV_FORMAT_FLAG); + m_runtime.observe_property(m_mpv, kObserveAudioParams, "audio-params", MPV_FORMAT_NODE); + m_runtime.request_event(m_mpv, MPV_EVENT_FILE_LOADED, 1); + m_runtime.request_event(m_mpv, MPV_EVENT_END_FILE, 1); + m_runtime.set_wakeup_callback(m_mpv, &MpvPlayer::wakeup, this); +} + +MpvPlayer::~MpvPlayer() +{ + if (m_mpv) { + m_runtime.set_wakeup_callback(m_mpv, nullptr, nullptr); + m_runtime.terminate_destroy(m_mpv); + m_mpv = nullptr; + } +} + +bool MpvPlayer::isAvailable() const +{ + return m_runtime.isAvailable() && m_mpv; +} + +QString MpvPlayer::availabilityError() const +{ + return m_runtime.errorString(); +} + +void MpvPlayer::wakeup(void* ctx) +{ + QMetaObject::invokeMethod(static_cast(ctx), &MpvPlayer::onMpvEvents, Qt::QueuedConnection); +} + +void MpvPlayer::onMpvEvents() +{ + if (!m_mpv) { + return; + } + while (true) { + mpv_event* event = m_runtime.wait_event(m_mpv, 0.0); + if (!event || event->event_id == MPV_EVENT_NONE) { + break; + } + processEvent(event); + } +} + +void MpvPlayer::processEvent(mpv_event* event) +{ + switch (event->event_id) { + case MPV_EVENT_PROPERTY_CHANGE: { + auto* prop = static_cast(event->data); + if (!prop || prop->format == MPV_FORMAT_NONE) { + break; + } + switch (event->reply_userdata) { + case kObserveTimePos: { + const double timePos = *static_cast(prop->data); + m_positionMs = qMax(0, qRound64(timePos * 1000.0)); + const qint64 frame = qRound64(timePos * fpsOrDefault()); + if (frame != m_currentFrame) { + m_currentFrame = frame; + emit currentFrameChanged(frame); + } + emit positionChanged(m_positionMs); + break; + } + case kObserveDuration: { + const double duration = *static_cast(prop->data); + m_durationMs = qMax(0, qRound64(duration * 1000.0)); + m_mediaInfo.durationMs = m_durationMs; + emit durationChanged(m_durationMs); + break; + } + case kObservePause: + updatePlaybackStateFromPause(*static_cast(prop->data) != 0); + break; + case kObserveWidth: + m_mediaInfo.width = static_cast(*static_cast(prop->data)); + break; + case kObserveHeight: + m_mediaInfo.height = static_cast(*static_cast(prop->data)); + break; + case kObserveFps: + m_mediaInfo.fps = *static_cast(prop->data); + break; + case kObserveEstimatedFrames: + m_totalFrames = *static_cast(prop->data); + m_mediaInfo.totalFrames = m_totalFrames; + break; + case kObserveVolume: + m_volume = static_cast(*static_cast(prop->data) / 100.0); + break; + case kObserveMute: + m_muted = (*static_cast(prop->data) != 0); + break; + case kObserveAudioParams: + if (auto* node = static_cast(prop->data); node && node->format == MPV_FORMAT_NODE_MAP && node->u.list) { + m_mediaInfo.hasAudio = node->u.list->num > 0; + for (int i = 0; i < node->u.list->num; ++i) { + const QString key = QString::fromUtf8(node->u.list->keys[i]); + const mpv_node& value = node->u.list->values[i]; + if (key == QLatin1String("samplerate") && value.format == MPV_FORMAT_INT64) { + m_mediaInfo.audioSampleRate = static_cast(value.u.int64); + } else if (key == QLatin1String("channels") && value.format == MPV_FORMAT_STRING) { + m_mediaInfo.audioChannels = QString::fromUtf8(value.u.string).count(QLatin1Char(',')) + 1; + } + } + } else { + m_mediaInfo.hasAudio = false; + m_mediaInfo.audioChannels = 0; + m_mediaInfo.audioSampleRate = 0; + } + break; + default: + break; + } + break; + } + case MPV_EVENT_FILE_LOADED: + updateMediaInfoFromCore(); + emit mediaInfoReady(m_mediaInfo); + break; + case MPV_EVENT_END_FILE: { + auto* endFile = static_cast(event->data); + qWarning() << "[MpvPlayer] END_FILE reason=" << (endFile ? endFile->reason : -1) + << "error=" << (endFile ? endFile->error : 0) + << "msg=" << (endFile ? QString::fromUtf8(m_runtime.error_string(endFile->error)) : QString()); + if (endFile && endFile->reason == MPV_END_FILE_REASON_ERROR) { + emit error(QString::fromUtf8(m_runtime.error_string(endFile->error))); + } else { + emit endOfStream(); + } + break; + } + case MPV_EVENT_VIDEO_RECONFIG: + updateMediaInfoFromCore(); + emit mediaInfoReady(m_mediaInfo); + break; + case MPV_EVENT_PLAYBACK_RESTART: + emit frameUpdated(); + break; + default: + break; + } +} + +void MpvPlayer::updatePlaybackStateFromPause(bool paused) +{ + const auto newState = paused ? media_player::PlaybackState::Paused : media_player::PlaybackState::Playing; + if (newState != m_playbackState) { + m_playbackState = newState; + emit playbackStateChanged(newState); + } +} + +void MpvPlayer::updateMediaInfoFromCore() +{ + if (!m_mpv) { + return; + } + m_mediaInfo.durationMs = m_durationMs; + m_mediaInfo.totalFrames = m_totalFrames; +} + +double MpvPlayer::fpsOrDefault() const +{ + return m_mediaInfo.fps > 0.0 ? m_mediaInfo.fps : 24.0; +} + +void MpvPlayer::loadMedia(const QString& filePath) +{ + if (!m_mpv) { + emit error(availabilityError()); + return; + } + m_currentPath = filePath; + m_playbackState = media_player::PlaybackState::Stopped; + m_positionMs = 0; + m_durationMs = 0; + m_currentFrame = 0; + m_totalFrames = 0; + m_mediaInfo = media_player::MediaInfo(); + + QByteArray path = QFile::encodeName(filePath); + const char* cmd[] = {"loadfile", path.constData(), "replace", nullptr}; + const int rc = m_runtime.command(m_mpv, cmd); + if (rc < 0) { + emit error(QString::fromUtf8(m_runtime.error_string(rc))); + } +} + +void MpvPlayer::unloadMedia() +{ + if (!m_mpv) { + return; + } + const char* cmd[] = {"stop", nullptr}; + m_runtime.command(m_mpv, cmd); + m_currentPath.clear(); +} + +bool MpvPlayer::hasMedia() const +{ + return !m_currentPath.isEmpty(); +} + +void MpvPlayer::play() +{ + if (!m_mpv) { + return; + } + int paused = 0; + m_runtime.set_property(m_mpv, "pause", MPV_FORMAT_FLAG, &paused); + if (m_playbackRate < 0.0) { + m_runtime.command(m_mpv, (const char*[]){"seek", "0", "relative", "exact", nullptr}); + } + m_playbackState = media_player::PlaybackState::Playing; + emit playbackStateChanged(m_playbackState); +} + +void MpvPlayer::pause() +{ + if (!m_mpv) { + return; + } + int paused = 1; + m_runtime.set_property(m_mpv, "pause", MPV_FORMAT_FLAG, &paused); + m_playbackState = media_player::PlaybackState::Paused; + emit playbackStateChanged(m_playbackState); +} + +void MpvPlayer::stop() +{ + if (!m_mpv) { + return; + } + const char* cmd[] = {"stop", nullptr}; + m_runtime.command(m_mpv, cmd); + m_playbackState = media_player::PlaybackState::Stopped; + emit playbackStateChanged(m_playbackState); +} + +void MpvPlayer::seek(qint64 positionMs) +{ + if (!m_mpv) { + return; + } + const double seconds = positionMs / 1000.0; + QByteArray pos = QByteArray::number(seconds, 'f', 6); + const char* cmd[] = {"seek", pos.constData(), "absolute", "exact", nullptr}; + m_runtime.command(m_mpv, cmd); +} + +void MpvPlayer::seekToFrame(qint64 frameNumber) +{ + seek(qRound64((frameNumber / fpsOrDefault()) * 1000.0)); +} + +void MpvPlayer::setPlaybackRate(double rate) +{ + if (!m_mpv) { + return; + } + m_playbackRate = rate; + const double absRate = qAbs(rate); + m_runtime.set_property(m_mpv, "speed", MPV_FORMAT_DOUBLE, const_cast(&absRate)); + if (rate < 0.0) { + int yes = 1; + m_runtime.set_property(m_mpv, "pause", MPV_FORMAT_FLAG, &yes); + } +} + +void MpvPlayer::setLoopMode(media_player::LoopMode mode) +{ + m_loopMode = mode; + if (!m_mpv) { + return; + } + const char* value = mode == media_player::LoopMode::Loop ? "inf" : "no"; + m_runtime.set_property_string(m_mpv, "loop-file", value); +} + +void MpvPlayer::stepForward() +{ + if (!m_mpv) { + return; + } + const char* cmd[] = {"frame-step", nullptr}; + m_runtime.command(m_mpv, cmd); +} + +void MpvPlayer::stepBackward() +{ + if (!m_mpv) { + return; + } + const char* cmd[] = {"frame-back-step", nullptr}; + m_runtime.command(m_mpv, cmd); +} + +void MpvPlayer::setVolume(float volume) +{ + m_volume = qBound(0.0f, volume, 1.0f); + if (!m_mpv) { + return; + } + double percent = m_volume * 100.0; + m_runtime.set_property(m_mpv, "volume", MPV_FORMAT_DOUBLE, &percent); +} + +void MpvPlayer::setMuted(bool muted) +{ + m_muted = muted; + if (!m_mpv) { + return; + } + int flag = muted ? 1 : 0; + m_runtime.set_property(m_mpv, "mute", MPV_FORMAT_FLAG, &flag); +} + +QImage MpvPlayer::currentFrameImage() const +{ + QMutexLocker locker(&m_frameMutex); + if (!m_lastFramebufferImage.isNull()) { + return m_lastFramebufferImage; + } + if (!m_mpv) { + return {}; + } + + mpv_node result{}; + mpv_node args[4]{}; + args[0].format = MPV_FORMAT_STRING; + args[0].u.string = const_cast("screenshot-raw"); + args[1].format = MPV_FORMAT_STRING; + args[1].u.string = const_cast("video"); + args[2].format = MPV_FORMAT_STRING; + args[2].u.string = const_cast("single"); + mpv_node_list list{3, args, nullptr}; + mpv_node root{}; + root.format = MPV_FORMAT_NODE_ARRAY; + root.u.list = &list; + + if (m_runtime.command_node(m_mpv, &root, &result) < 0) { + return {}; + } + + QImage image; + if (result.format == MPV_FORMAT_NODE_MAP && result.u.list) { + int w = 0; + int h = 0; + int stride = 0; + QByteArray format; + const uchar* data = nullptr; + size_t dataSize = 0; + for (int i = 0; i < result.u.list->num; ++i) { + const QString key = QString::fromUtf8(result.u.list->keys[i]); + const mpv_node& value = result.u.list->values[i]; + if (key == QLatin1String("w") && value.format == MPV_FORMAT_INT64) { + w = static_cast(value.u.int64); + } else if (key == QLatin1String("h") && value.format == MPV_FORMAT_INT64) { + h = static_cast(value.u.int64); + } else if (key == QLatin1String("stride") && value.format == MPV_FORMAT_INT64) { + stride = static_cast(value.u.int64); + } else if (key == QLatin1String("format") && value.format == MPV_FORMAT_STRING) { + format = value.u.string; + } else if (key == QLatin1String("data") && value.format == MPV_FORMAT_BYTE_ARRAY && value.u.ba) { + data = static_cast(value.u.ba->data); + dataSize = value.u.ba->size; + } + } + if (w > 0 && h > 0 && stride > 0 && data && dataSize >= static_cast(stride * h) && format == QByteArrayLiteral("bgr0")) { + QImage wrapped(data, stride / 4, h, stride, QImage::Format_ARGB32); + image = wrapped.copy().rgbSwapped(); + } + } + + m_runtime.free_node_contents(&result); + return image; +} + +void MpvPlayer::setLastFramebufferImage(const QImage& image) +{ + QMutexLocker locker(&m_frameMutex); + m_lastFramebufferImage = image; +} diff --git a/native/qt6/src/media/mpv_player.h b/native/qt6/src/media/mpv_player.h new file mode 100644 index 00000000..a0f3ae0f --- /dev/null +++ b/native/qt6/src/media/mpv_player.h @@ -0,0 +1,99 @@ +#ifndef MPV_PLAYER_H +#define MPV_PLAYER_H + +#include +#include +#include +#include + +#include "media_player_types.h" +#include "libmpv_runtime.h" + +class MpvPlayer : public QObject +{ + Q_OBJECT + +public: + explicit MpvPlayer(QObject* parent = nullptr); + ~MpvPlayer() override; + + bool isAvailable() const; + QString availabilityError() const; + + void loadMedia(const QString& filePath); + void unloadMedia(); + bool hasMedia() const; + bool isViewportReady() const { return m_viewportReady; } + + void play(); + void pause(); + void stop(); + void seek(qint64 positionMs); + void seekToFrame(qint64 frameNumber); + void setPlaybackRate(double rate); + double playbackRate() const { return m_playbackRate; } + void setLoopMode(media_player::LoopMode mode); + media_player::LoopMode loopMode() const { return m_loopMode; } + void stepForward(); + void stepBackward(); + + void setVolume(float volume); + float volume() const { return m_volume; } + void setMuted(bool muted); + bool isMuted() const { return m_muted; } + + media_player::PlaybackState playbackState() const { return m_playbackState; } + qint64 position() const { return m_positionMs; } + qint64 duration() const { return m_durationMs; } + qint64 currentFrame() const { return m_currentFrame; } + qint64 totalFrames() const { return m_totalFrames; } + media_player::MediaInfo mediaInfo() const { return m_mediaInfo; } + QString currentMediaPath() const { return m_currentPath; } + + QImage currentFrameImage() const; + void setLastFramebufferImage(const QImage& image); + + mpv_handle* handle() const { return m_mpv; } + +signals: + void positionChanged(qint64 positionMs); + void durationChanged(qint64 durationMs); + void currentFrameChanged(qint64 frameNumber); + void mediaInfoReady(const media_player::MediaInfo& info); + void playbackStateChanged(media_player::PlaybackState state); + void error(const QString& errorString); + void endOfStream(); + void frameUpdated(); + void viewportReadyChanged(bool ready); + +private slots: + void onMpvEvents(); + +private: + static void wakeup(void* ctx); + void processEvent(mpv_event* event); + void updatePlaybackStateFromPause(bool paused); + void updateMediaInfoFromCore(); + double fpsOrDefault() const; + void setViewportReady(bool ready); + + const LibMpvRuntime& m_runtime; + mpv_handle* m_mpv{nullptr}; + mutable QMutex m_frameMutex; + QImage m_lastFramebufferImage; + + media_player::PlaybackState m_playbackState{media_player::PlaybackState::Stopped}; + media_player::LoopMode m_loopMode{media_player::LoopMode::Loop}; + media_player::MediaInfo m_mediaInfo; + QString m_currentPath; + qint64 m_positionMs{0}; + qint64 m_durationMs{0}; + qint64 m_currentFrame{0}; + qint64 m_totalFrames{0}; + float m_volume{1.0f}; + bool m_muted{false}; + bool m_viewportReady{false}; + double m_playbackRate{1.0}; +}; + +#endif diff --git a/native/qt6/src/media/mpv_viewport.cpp b/native/qt6/src/media/mpv_viewport.cpp new file mode 100644 index 00000000..04453d39 --- /dev/null +++ b/native/qt6/src/media/mpv_viewport.cpp @@ -0,0 +1,305 @@ +#include "mpv_viewport.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "libmpv_runtime.h" +#include "platform_session.h" + +#define MPV_LOG(fmt, ...) do { fprintf(stderr, "[MPV_DBG] " fmt "\n", ##__VA_ARGS__); fflush(stderr); } while(0) + +// ============================================================================ +// MpvQuickRenderer — QQuickFramebufferObject::Renderer that drives mpv +// ============================================================================ + +class MpvQuickRenderer : public QQuickFramebufferObject::Renderer +{ +public: + MpvQuickRenderer(MpvQuickItem* item) + : m_item(item) + , m_runtime(LibMpvRuntime::instance()) + { + MPV_LOG("MpvQuickRenderer constructed, item=%p", item); + } + + ~MpvQuickRenderer() override + { + MPV_LOG("MpvQuickRenderer destructor"); + if (m_renderContext) { + m_runtime.render_context_set_update_callback(m_renderContext, nullptr, nullptr); + m_runtime.render_context_free(m_renderContext); + m_renderContext = nullptr; + } + } + + // Called on render thread with GUI thread blocked — safe to read item state + void synchronize(QQuickFramebufferObject* fboItem) override + { + auto* item = static_cast(fboItem); + m_mpvHandle = item->mpvHandle(); + } + + // Called on render thread when FBO needs (re)creation — GL context is valid here + QOpenGLFramebufferObject* createFramebufferObject(const QSize& size) override + { + MPV_LOG("createFramebufferObject: size=%dx%d", size.width(), size.height()); + auto* ctx = QOpenGLContext::currentContext(); + MPV_LOG(" GL context=%p valid=%d", ctx, ctx ? ctx->isValid() : -1); + if (!m_renderContext && m_mpvHandle) { + createRenderContext(); + } + auto* fbo = new QOpenGLFramebufferObject(size); + MPV_LOG(" FBO created: valid=%d handle=%u", fbo->isValid(), fbo->handle()); + return fbo; + } + + // Called on render thread to render a frame into the FBO + void render() override + { + if (!m_renderContext) { + return; + } + + m_runtime.render_context_update(m_renderContext); + + auto* fbo = framebufferObject(); + const auto dpr = m_item->window() ? m_item->window()->devicePixelRatio() : 1.0; + const int w = static_cast(fbo->width() * dpr); + const int h = static_cast(fbo->height() * dpr); + + mpv_opengl_fbo mpvFbo{ + static_cast(fbo->handle()), + w, h, + 0 // internal format (0 = default) + }; + int flipY = 0; // QQuickFBO renders offscreen; scene graph handles Y-flip + mpv_render_param params[] = { + {MPV_RENDER_PARAM_OPENGL_FBO, &mpvFbo}, + {MPV_RENDER_PARAM_FLIP_Y, &flipY}, + {MPV_RENDER_PARAM_INVALID, nullptr} + }; + + m_runtime.render_context_render(m_renderContext, params); + m_runtime.render_context_report_swap(m_renderContext); + + // Signal the item that a frame was rendered + if (m_item) { + QMetaObject::invokeMethod(m_item, "frameRendered", Qt::QueuedConnection); + } + } + +private: + static void* getProcAddress(void* /*ctx*/, const char* name) + { + if (auto* gl = QOpenGLContext::currentContext()) { + return reinterpret_cast(gl->getProcAddress(QByteArray(name))); + } + return nullptr; + } + + void createRenderContext() + { + MPV_LOG("createRenderContext: mpvHandle=%p runtime.available=%d", + m_mpvHandle, m_runtime.isAvailable()); + if (!m_mpvHandle || !m_runtime.isAvailable()) { + return; + } + + mpv_opengl_init_params glInit{&MpvQuickRenderer::getProcAddress, nullptr}; + + void* wlDisplay = nullptr; + if (PlatformSession::isWayland()) { + if (auto* app = qGuiApp) { + if (auto* waylandApp = app->nativeInterface()) { + wlDisplay = waylandApp->display(); + } + } + } + MPV_LOG(" wlDisplay=%p", wlDisplay); + + int advanced = 0; + mpv_render_param params[5] = {}; + int idx = 0; + params[idx++] = {MPV_RENDER_PARAM_API_TYPE, const_cast(MPV_RENDER_API_TYPE_OPENGL)}; + params[idx++] = {MPV_RENDER_PARAM_OPENGL_INIT_PARAMS, &glInit}; + if (wlDisplay) { + params[idx++] = {MPV_RENDER_PARAM_WL_DISPLAY, wlDisplay}; + MPV_LOG(" Passing wl_display to mpv render context"); + } + params[idx++] = {MPV_RENDER_PARAM_ADVANCED_CONTROL, &advanced}; + params[idx++] = {MPV_RENDER_PARAM_INVALID, nullptr}; + + int rc = m_runtime.render_context_create(&m_renderContext, m_mpvHandle, params); + if (rc < 0) { + MPV_LOG(" FAILED to create render context, rc=%d", rc); + m_renderContext = nullptr; + return; + } + + MPV_LOG(" Render context created successfully: %p", m_renderContext); + + // Set up the redraw callback — when mpv has a new frame, trigger update on the item + m_runtime.render_context_set_update_callback( + m_renderContext, &MpvQuickItem::onMpvRedraw, m_item); + } + + MpvQuickItem* m_item{nullptr}; + const LibMpvRuntime& m_runtime; + mpv_handle* m_mpvHandle{nullptr}; + mpv_render_context* m_renderContext{nullptr}; +}; + + +// ============================================================================ +// MpvQuickItem — QQuickFramebufferObject subclass +// ============================================================================ + +MpvQuickItem::MpvQuickItem(QQuickItem* parent) + : QQuickFramebufferObject(parent) +{ + MPV_LOG("MpvQuickItem constructed"); + // When this item is placed in a window, connect to frameSwapped + connect(this, &QQuickItem::windowChanged, this, &MpvQuickItem::onWindowChanged); +} + +MpvQuickItem::~MpvQuickItem() = default; + +QQuickFramebufferObject::Renderer* MpvQuickItem::createRenderer() const +{ + MPV_LOG("MpvQuickItem::createRenderer called"); + return new MpvQuickRenderer(const_cast(this)); +} + +void MpvQuickItem::setPlayer(MpvPlayer* player) +{ + MPV_LOG("MpvQuickItem::setPlayer player=%p", player); + if (m_player) { + disconnect(m_player, nullptr, this, nullptr); + } + m_player = player; + if (m_player) { + MPV_LOG(" mpv handle=%p", m_player->handle()); + // When mpv signals a new frame, trigger a Qt Quick update + connect(m_player, &MpvPlayer::frameUpdated, this, [this]() { + update(); + }); + connect(m_player, &MpvPlayer::mediaInfoReady, this, [this](const media_player::MediaInfo&) { + update(); + }); + } + update(); +} + +mpv_handle* MpvQuickItem::mpvHandle() const +{ + return m_player ? m_player->handle() : nullptr; +} + +void MpvQuickItem::onWindowChanged(QQuickWindow* window) +{ + MPV_LOG("MpvQuickItem::onWindowChanged window=%p", window); + if (window) { + // Ensure scene graph rendering triggers our update + connect(window, &QQuickWindow::frameSwapped, this, [this]() { + // Already handled by render() emitting frameRendered + }, Qt::DirectConnection); + } +} + +// Static callback from mpv render context — called from mpv's internal thread +void MpvQuickItem::onMpvRedraw(void* ctx) +{ + QMetaObject::invokeMethod( + static_cast(ctx), + "update", + Qt::QueuedConnection); +} + + +// ============================================================================ +// MpvViewport — QWidget wrapper hosting QQuickWidget + MpvQuickItem +// ============================================================================ + +MpvViewport::MpvViewport(QWidget* parent) + : QWidget(parent) +{ + MPV_LOG("MpvViewport::MpvViewport START"); + auto* layout = new QVBoxLayout(this); + layout->setContentsMargins(0, 0, 0, 0); + layout->setSpacing(0); + + MPV_LOG(" Creating QQuickWidget..."); + m_quickWidget = new QQuickWidget(this); + MPV_LOG(" QQuickWidget created: %p", m_quickWidget); + m_quickWidget->setResizeMode(QQuickWidget::SizeRootObjectToView); + m_quickWidget->setClearColor(QColor(0x11, 0x11, 0x11)); + + MPV_LOG(" Creating MpvQuickItem..."); + m_quickItem = new MpvQuickItem(); + + // Set the MpvQuickItem as the root item — no QML file needed + MPV_LOG(" Setting content on QQuickWidget..."); + m_quickWidget->setContent(QUrl(), nullptr, m_quickItem); + MPV_LOG(" Content set, status=%d", static_cast(m_quickWidget->status())); + + layout->addWidget(m_quickWidget); + + // Forward frameRendered from the quick item + connect(m_quickItem, &MpvQuickItem::frameRendered, this, &MpvViewport::frameRendered); + MPV_LOG("MpvViewport::MpvViewport DONE"); +} + +MpvViewport::~MpvViewport() = default; + +void MpvViewport::setPlayer(MpvPlayer* player) +{ + MPV_LOG("MpvViewport::setPlayer player=%p", player); + m_quickItem->setPlayer(player); +} + +MpvPlayer* MpvViewport::player() const +{ + return m_quickItem->player(); +} + +void MpvViewport::setFrameView(bool enabled) +{ + m_frameViewEnabled = enabled; + if (enabled) { + m_zoom = 1.0; + } + // mpv handles its own aspect ratio via keepaspect=yes + // Zoom/pan would need mpv's video-pan-x/y properties in future +} + +void MpvViewport::zoomRelative(double factor) +{ + if (m_frameViewEnabled) { + m_frameViewEnabled = false; + } + m_zoom = qBound(0.1, m_zoom * factor, 10.0); + // Zoom/pan via mpv properties — future enhancement +} + +QRect MpvViewport::displayedContentRect() const +{ + // With keepaspect=yes, mpv renders within its surface respecting aspect ratio. + // Return the full widget rect as a reasonable approximation. + return rect(); +} + +QImage MpvViewport::currentFrameForTest() +{ + if (m_quickWidget) { + return m_quickWidget->grabFramebuffer(); + } + return {}; +} diff --git a/native/qt6/src/media/mpv_viewport.h b/native/qt6/src/media/mpv_viewport.h new file mode 100644 index 00000000..82dbf6ff --- /dev/null +++ b/native/qt6/src/media/mpv_viewport.h @@ -0,0 +1,88 @@ +#ifndef MPV_VIEWPORT_H +#define MPV_VIEWPORT_H + +#include +#include +#include +#include + +#include "mpv_player.h" +#include "libmpv_headers.h" + +class QQuickWidget; + +// Forward-declare the renderer (defined in .cpp) +class MpvQuickRenderer; + +/** + * @brief QQuickFramebufferObject item that renders mpv frames via the render API. + * + * This is the Qt Quick equivalent of the old QOpenGLWindow-based MpvViewport. + * It works on Wayland+NVIDIA because Qt Quick's scene graph manages GL contexts + * correctly, unlike QOpenGLWidget/QOpenGLWindow. + * + * Pattern taken from KDE/mpvqt (MpvAbstractItem + MpvRenderer). + */ +class MpvQuickItem : public QQuickFramebufferObject +{ + Q_OBJECT + +public: + explicit MpvQuickItem(QQuickItem* parent = nullptr); + ~MpvQuickItem() override; + + Renderer* createRenderer() const override; + + void setPlayer(MpvPlayer* player); + MpvPlayer* player() const { return m_player; } + + mpv_handle* mpvHandle() const; + +signals: + void frameRendered(); + +private slots: + void onWindowChanged(QQuickWindow* window); + +private: + friend class MpvQuickRenderer; + static void onMpvRedraw(void* ctx); + + MpvPlayer* m_player{nullptr}; +}; + +/** + * @brief QWidget wrapper around a QQuickWidget hosting MpvQuickItem. + * + * This provides the same public interface as the old QOpenGLWindow-based + * MpvViewport, so TLRenderViewport can use it as a drop-in replacement + * without any QML files or QRC resources. + */ +class MpvViewport : public QWidget +{ + Q_OBJECT + +public: + explicit MpvViewport(QWidget* parent = nullptr); + ~MpvViewport() override; + + void setPlayer(MpvPlayer* player); + MpvPlayer* player() const; + + void setFrameView(bool enabled); + bool frameViewEnabled() const { return m_frameViewEnabled; } + void zoomRelative(double factor); + QRect displayedContentRect() const; + QImage currentFrameForTest(); + +signals: + void frameRendered(); + +private: + QQuickWidget* m_quickWidget{nullptr}; + MpvQuickItem* m_quickItem{nullptr}; + bool m_frameViewEnabled{true}; + double m_zoom{1.0}; +}; + +#endif diff --git a/native/qt6/src/media/tlrender_player.cpp b/native/qt6/src/media/tlrender_player.cpp index a659b12d..fa43a68a 100644 --- a/native/qt6/src/media/tlrender_player.cpp +++ b/native/qt6/src/media/tlrender_player.cpp @@ -6,6 +6,9 @@ */ #include "tlrender_player.h" +#include "ffmpeg_mov_player.h" +#include "mpv_player.h" +#include "file_utils.h" #include #include #include @@ -15,8 +18,14 @@ #include #include #include +#include +#include +#include +#include +#include #include #include "video_metadata.h" +#include "platform_session.h" #if defined(HAVE_FFMPEG) && HAVE_FFMPEG extern "C" { @@ -45,17 +54,14 @@ extern "C" { #include #include +#include #include +#include #include #include #include -#ifdef HAVE_OCIO -#include -namespace OCIO = OCIO_NAMESPACE; -#endif - #endif // HAVE_TLRENDER bool TLRenderPlayer::s_initialized = false; @@ -63,6 +69,323 @@ bool TLRenderPlayer::s_fontsInitialized = false; #ifdef HAVE_TLRENDER std::shared_ptr TLRenderPlayer::s_sharedContext; QPointer TLRenderPlayer::s_contextObject; + +namespace { + +TLRenderPlayer::PlaybackState toTlPlaybackState(media_player::PlaybackState state) +{ + switch (state) { + case media_player::PlaybackState::Playing: + return TLRenderPlayer::PlaybackState::Playing; + case media_player::PlaybackState::Paused: + return TLRenderPlayer::PlaybackState::Paused; + case media_player::PlaybackState::Stopped: + default: + return TLRenderPlayer::PlaybackState::Stopped; + } +} + +media_player::LoopMode toMpvLoopMode(TLRenderPlayer::LoopMode mode) +{ + switch (mode) { + case TLRenderPlayer::LoopMode::Once: + return media_player::LoopMode::Once; + case TLRenderPlayer::LoopMode::PingPong: + return media_player::LoopMode::PingPong; + case TLRenderPlayer::LoopMode::Loop: + default: + return media_player::LoopMode::Loop; + } +} + +TLRenderPlayer::MediaInfo toTlMediaInfo(const media_player::MediaInfo& info) +{ + TLRenderPlayer::MediaInfo out; + out.width = info.width; + out.height = info.height; + out.fps = info.fps; + out.durationMs = info.durationMs; + out.totalFrames = info.totalFrames; + out.codec = info.codec; + out.hasAudio = info.hasAudio; + out.audioChannels = info.audioChannels; + out.audioSampleRate = info.audioSampleRate; + return out; +} + +struct YuvToRgbCoefficients +{ + float kr = 0.2126f; + float kb = 0.0722f; +}; + +YuvToRgbCoefficients getYuvToRgbCoefficients(ftk::YUVCoefficients coefficients) +{ + switch (coefficients) { + case ftk::YUVCoefficients::BT2020: + return { 0.2627f, 0.0593f }; + case ftk::YUVCoefficients::REC709: + default: + return { 0.2126f, 0.0722f }; + } +} + +inline float clampUnit(float value) +{ + return std::clamp(value, 0.0f, 1.0f); +} + +QSize fittedTargetSize(const QSize& sourceSize, const QSize& targetSize) +{ + if (sourceSize.isEmpty() || targetSize.isEmpty()) { + return sourceSize; + } + return sourceSize.scaled(targetSize, Qt::KeepAspectRatio); +} + +template +QImage planarYuv422ToQImage(const std::shared_ptr& image, const QSize& targetSize = QSize()) +{ + if (!image || !image->isValid()) { + return {}; + } + + const auto& info = image->getInfo(); + const int width = info.size.w; + const int height = info.size.h; + if (width <= 0 || height <= 0) { + return {}; + } + + const uint8_t* base = image->getData(); + if (!base) { + return {}; + } + + const int chromaWidth = (width + 1) / 2; + const size_t sampleBytes = sizeof(Sample); + const size_t yStride = ftk::getAlignedByteCount(static_cast(width) * sampleBytes, info.layout.alignment); + const size_t uvStride = ftk::getAlignedByteCount(static_cast(chromaWidth) * sampleBytes, info.layout.alignment); + const size_t yBytes = yStride * static_cast(height); + const size_t uvBytes = uvStride * static_cast(height); + const size_t totalBytes = yBytes + uvBytes * 2; + if (image->getByteCount() < totalBytes) { + return {}; + } + + const uint8_t* uBase = base + yBytes; + const uint8_t* vBase = uBase + uvBytes; + const auto coefficients = getYuvToRgbCoefficients(info.yuvCoefficients); + const float kg = 1.0f - coefficients.kr - coefficients.kb; + if (kg <= 0.0f) { + return {}; + } + + const float maxValue = static_cast(std::numeric_limits::max()); + const float invMaxValue = 1.0f / maxValue; + const bool legalRange = info.videoLevels == ftk::VideoLevels::LegalRange; + const float yOffset = legalRange ? (16.0f / 255.0f) : 0.0f; + const float yScale = legalRange ? (255.0f / 219.0f) : 1.0f; + const float uvOffset = 0.5f; + const float uvScale = legalRange ? (255.0f / 224.0f) * 2.0f : 2.0f; + const float rFactor = 2.0f * (1.0f - coefficients.kr); + const float bFactor = 2.0f * (1.0f - coefficients.kb); + const float gUFactor = 2.0f * coefficients.kb * (1.0f - coefficients.kb) / kg; + const float gVFactor = 2.0f * coefficients.kr * (1.0f - coefficients.kr) / kg; + + const QSize outputSize = fittedTargetSize(QSize(width, height), targetSize); + const int outputWidth = outputSize.width(); + const int outputHeight = outputSize.height(); + QImage out(outputWidth, outputHeight, QImage::Format_RGB32); + if (out.isNull()) { + return {}; + } + + for (int y = 0; y < outputHeight; ++y) { + const int srcY = std::min(height - 1, (y * height) / outputHeight); + const auto* yRow = reinterpret_cast(base + yStride * static_cast(srcY)); + const auto* uRow = reinterpret_cast(uBase + uvStride * static_cast(srcY)); + const auto* vRow = reinterpret_cast(vBase + uvStride * static_cast(srcY)); + QRgb* dst = reinterpret_cast(out.scanLine(y)); + + for (int x = 0; x < outputWidth; ++x) { + const int srcX = std::min(width - 1, (x * width) / outputWidth); + const float ySample = clampUnit((static_cast(yRow[srcX]) * invMaxValue - yOffset) * yScale); + const float uSample = (static_cast(uRow[srcX / 2]) * invMaxValue - uvOffset) * uvScale; + const float vSample = (static_cast(vRow[srcX / 2]) * invMaxValue - uvOffset) * uvScale; + + const float r = clampUnit(ySample + rFactor * vSample); + const float g = clampUnit(ySample - gUFactor * uSample - gVFactor * vSample); + const float b = clampUnit(ySample + bFactor * uSample); + + dst[x] = qRgb( + static_cast(std::lround(r * 255.0f)), + static_cast(std::lround(g * 255.0f)), + static_cast(std::lround(b * 255.0f))); + } + } + + return out; +} + +template +QImage planarYuv420ToQImage(const std::shared_ptr& image, const QSize& targetSize = QSize()) +{ + if (!image || !image->isValid()) { + return {}; + } + + const auto& info = image->getInfo(); + const int width = info.size.w; + const int height = info.size.h; + if (width <= 0 || height <= 0) { + return {}; + } + + const uint8_t* base = image->getData(); + if (!base) { + return {}; + } + + const int chromaWidth = (width + 1) / 2; + const int chromaHeight = (height + 1) / 2; + const size_t sampleBytes = sizeof(Sample); + const size_t yStride = ftk::getAlignedByteCount(static_cast(width) * sampleBytes, info.layout.alignment); + const size_t uvStride = ftk::getAlignedByteCount(static_cast(chromaWidth) * sampleBytes, info.layout.alignment); + const size_t yBytes = yStride * static_cast(height); + const size_t uvBytes = uvStride * static_cast(chromaHeight); + const size_t totalBytes = yBytes + uvBytes * 2; + if (image->getByteCount() < totalBytes) { + return {}; + } + + const uint8_t* uBase = base + yBytes; + const uint8_t* vBase = uBase + uvBytes; + const auto coefficients = getYuvToRgbCoefficients(info.yuvCoefficients); + const float kg = 1.0f - coefficients.kr - coefficients.kb; + if (kg <= 0.0f) { + return {}; + } + + const float maxValue = static_cast(std::numeric_limits::max()); + const float invMaxValue = 1.0f / maxValue; + const bool legalRange = info.videoLevels == ftk::VideoLevels::LegalRange; + const float yOffset = legalRange ? (16.0f / 255.0f) : 0.0f; + const float yScale = legalRange ? (255.0f / 219.0f) : 1.0f; + const float uvOffset = 0.5f; + const float uvScale = legalRange ? (255.0f / 224.0f) * 2.0f : 2.0f; + const float rFactor = 2.0f * (1.0f - coefficients.kr); + const float bFactor = 2.0f * (1.0f - coefficients.kb); + const float gUFactor = 2.0f * coefficients.kb * (1.0f - coefficients.kb) / kg; + const float gVFactor = 2.0f * coefficients.kr * (1.0f - coefficients.kr) / kg; + + const QSize outputSize = fittedTargetSize(QSize(width, height), targetSize); + const int outputWidth = outputSize.width(); + const int outputHeight = outputSize.height(); + QImage out(outputWidth, outputHeight, QImage::Format_RGB32); + if (out.isNull()) { + return {}; + } + + for (int y = 0; y < outputHeight; ++y) { + const int srcY = std::min(height - 1, (y * height) / outputHeight); + const auto* yRow = reinterpret_cast(base + yStride * static_cast(srcY)); + const auto* uRow = reinterpret_cast(uBase + uvStride * static_cast(srcY / 2)); + const auto* vRow = reinterpret_cast(vBase + uvStride * static_cast(srcY / 2)); + QRgb* dst = reinterpret_cast(out.scanLine(y)); + + for (int x = 0; x < outputWidth; ++x) { + const int srcX = std::min(width - 1, (x * width) / outputWidth); + const float ySample = clampUnit((static_cast(yRow[srcX]) * invMaxValue - yOffset) * yScale); + const float uSample = (static_cast(uRow[srcX / 2]) * invMaxValue - uvOffset) * uvScale; + const float vSample = (static_cast(vRow[srcX / 2]) * invMaxValue - uvOffset) * uvScale; + + const float r = clampUnit(ySample + rFactor * vSample); + const float g = clampUnit(ySample - gUFactor * uSample - gVFactor * vSample); + const float b = clampUnit(ySample + bFactor * uSample); + + dst[x] = qRgb( + static_cast(std::lround(r * 255.0f)), + static_cast(std::lround(g * 255.0f)), + static_cast(std::lround(b * 255.0f))); + } + } + + return out; +} + +QImage imageToQImage(const std::shared_ptr& image, const QSize& targetSize = QSize()) +{ + if (!image || !image->isValid()) { + return {}; + } + + const auto& info = image->getInfo(); + const int width = info.size.w; + const int height = info.size.h; + if (width <= 0 || height <= 0) { + return {}; + } + + const uchar* data = image->getData(); + if (!data) { + return {}; + } + + QImage out; + switch (info.type) { + case ftk::ImageType::L_U8: { + const int bytesPerLine = static_cast(ftk::getAlignedByteCount(static_cast(width), info.layout.alignment)); + out = QImage(data, width, height, bytesPerLine, QImage::Format_Grayscale8).copy(); + break; + } + case ftk::ImageType::RGB_U8: { + const int bytesPerLine = static_cast(ftk::getAlignedByteCount(static_cast(width) * 3, info.layout.alignment)); + out = QImage(data, width, height, bytesPerLine, QImage::Format_RGB888).copy(); + break; + } + case ftk::ImageType::RGBA_U8: { + const int bytesPerLine = static_cast(ftk::getAlignedByteCount(static_cast(width) * 4, info.layout.alignment)); + out = QImage(data, width, height, bytesPerLine, QImage::Format_RGBA8888).copy(); + break; + } + case ftk::ImageType::YUV_422P_U8: + out = planarYuv422ToQImage(image, targetSize); + break; + case ftk::ImageType::YUV_422P_U16: + out = planarYuv422ToQImage(image, targetSize); + break; + case ftk::ImageType::YUV_420P_U8: + out = planarYuv420ToQImage(image, targetSize); + break; + case ftk::ImageType::YUV_420P_U16: + out = planarYuv420ToQImage(image, targetSize); + break; + default: + return {}; + } + + return out; +} + +QImage currentVideoFramesToQImage(const std::vector& frames, const QSize& targetSize) +{ + for (const auto& frame : frames) { + for (const auto& layer : frame.layers) { + QImage image = imageToQImage(layer.image, targetSize); + if (image.isNull()) { + continue; + } + if (!targetSize.isEmpty() && image.size() != fittedTargetSize(image.size(), targetSize)) { + image = image.scaled(targetSize, Qt::KeepAspectRatio, Qt::SmoothTransformation); + } + return image; + } + } + return {}; +} + +} // namespace #endif // ============================================================================ @@ -72,15 +395,44 @@ QPointer TLRenderPlayer::s_contextObject; TLRenderPlayer::TLRenderPlayer(QObject* parent) : QObject(parent) { + m_mpvPlayer = nullptr; + m_ffmpegMovPlayer = new FFmpegMovPlayer(this); + connect(m_ffmpegMovPlayer, &FFmpegMovPlayer::positionChanged, this, [this](qint64 positionMs) { + m_position = positionMs; + emit positionChanged(positionMs); + }); + connect(m_ffmpegMovPlayer, &FFmpegMovPlayer::durationChanged, this, [this](qint64 durationMs) { + m_duration = durationMs; + emit durationChanged(durationMs); + }); + connect(m_ffmpegMovPlayer, &FFmpegMovPlayer::currentFrameChanged, this, [this](qint64 frameNumber) { + m_currentFrame = frameNumber; + emit currentFrameChanged(frameNumber); + }); + connect(m_ffmpegMovPlayer, &FFmpegMovPlayer::mediaInfoReady, this, [this](const media_player::MediaInfo& info) { + m_mediaInfo = toTlMediaInfo(info); + m_duration = m_mediaInfo.durationMs; + m_totalFrames = m_mediaInfo.totalFrames; + emit mediaInfoReady(m_mediaInfo); + }); + connect(m_ffmpegMovPlayer, &FFmpegMovPlayer::playbackStateChanged, this, [this](media_player::PlaybackState state) { + m_playbackState = toTlPlaybackState(state); + emit playbackStateChanged(m_playbackState); + }); + connect(m_ffmpegMovPlayer, &FFmpegMovPlayer::error, this, &TLRenderPlayer::error); + connect(m_ffmpegMovPlayer, &FFmpegMovPlayer::endOfStream, this, &TLRenderPlayer::endOfStream); + connect(m_ffmpegMovPlayer, &FFmpegMovPlayer::frameUpdated, this, [this]() { + QMutexLocker locker(&m_mutex); + locker.unlock(); + emit videoFramesChanged(); + }); + // Create update timer for position updates m_updateTimer = new QTimer(this); m_updateTimer->setTimerType(Qt::PreciseTimer); m_updateTimer->setInterval(5); // keep tlRender context ticking consistently connect(m_updateTimer, &QTimer::timeout, this, &TLRenderPlayer::onUpdateTimer); -#ifdef HAVE_TLRENDER - setupContext(); -#endif } TLRenderPlayer::~TLRenderPlayer() @@ -88,6 +440,15 @@ TLRenderPlayer::~TLRenderPlayer() unloadMedia(); } +void TLRenderPlayer::ensureTlRenderContext() +{ +#ifdef HAVE_TLRENDER + if (!m_context) { + setupContext(); + } +#endif +} + void TLRenderPlayer::initialize() { if (s_initialized) { @@ -111,9 +472,12 @@ void TLRenderPlayer::initialize() // Initialize tlRender with Qt Widgets integration. // This registers Qt metatypes and sets a sane default OpenGL surface format. + const bool useDefaultWaylandSurfaceFormat = PlatformSession::isWayland(); tl::qtwidget::init( s_sharedContext, - tl::qt::DefaultSurfaceFormat::OpenGL_4_1_CoreProfile); + useDefaultWaylandSurfaceFormat + ? tl::qt::DefaultSurfaceFormat::None + : tl::qt::DefaultSurfaceFormat::OpenGL_4_1_CoreProfile); // Keep the shared context ticking via a precise Qt timer. // This must be created after QApplication exists. @@ -126,7 +490,6 @@ void TLRenderPlayer::initialize() } s_initialized = true; - qDebug() << "TLRenderPlayer: tlRender initialized successfully"; } catch (const std::exception& e) { qWarning() << "TLRenderPlayer: Failed to initialize tlRender:" << e.what(); } @@ -164,16 +527,57 @@ void TLRenderPlayer::setupContext() void TLRenderPlayer::loadMedia(const QString& filePath) { + if (QFileInfo(filePath).suffix().compare(QStringLiteral("mov"), Qt::CaseInsensitive) == 0 && m_ffmpegMovPlayer) { + if (m_mpvPlayer && m_mpvPlayer->hasMedia()) { + m_mpvPlayer->unloadMedia(); + } + if (m_player) { + m_player->stop(); + m_player.reset(); + } + m_timeline.reset(); + m_playerObject.clear(); + m_updateTimer->stop(); + + QMutexLocker locker(&m_mutex); + m_currentPath = filePath; + m_frameAcquisitionStats = FrameAcquisitionStats(); + m_cachedVideoFrames.clear(); + locker.unlock(); + + m_ffmpegMovPlayer->setLoopMode(toMpvLoopMode(m_loopMode)); + m_ffmpegMovPlayer->setVolume(m_volume); + m_ffmpegMovPlayer->setMuted(m_muted); + m_ffmpegMovPlayer->setPlaybackRate(m_playbackRate); + m_ffmpegMovPlayer->loadMedia(filePath); + return; + } + if (m_ffmpegMovPlayer && m_ffmpegMovPlayer->hasMedia()) { + m_ffmpegMovPlayer->unloadMedia(); + } + + if (m_mpvPlayer && m_mpvPlayer->hasMedia()) { + m_mpvPlayer->unloadMedia(); + } + + { + QMutexLocker locker(&m_mutex); + + // Clear cached frames from previous media before any early return. + m_pendingPlay = false; + m_pendingReverse = false; + m_cachedVideoFrames.clear(); + m_frameAcquisitionStats = FrameAcquisitionStats(); + } #ifdef HAVE_TLRENDER + ensureTlRenderContext(); + if (!m_context) { + emit error(tr("Failed to initialize tlRender context")); + return; + } + QMutexLocker locker(&m_mutex); - - // Reset any pending deferred playback from previous media - m_pendingPlay = false; - m_pendingReverse = false; - - // Clear cached frames from previous media to avoid stale data - m_cachedVideoFrames.clear(); - + // Stop any current playback if (m_player) { m_player->stop(); @@ -184,12 +588,6 @@ void TLRenderPlayer::loadMedia(const QString& filePath) std::string pathStr = filePath.toStdString(); ftk::Path path(pathStr); - qDebug() << "[TLRenderPlayer] loadMedia: input path=" << filePath; - qDebug() << "[TLRenderPlayer] loadMedia: ftk::Path:" - << "isSeq=" << path.isSeq() - << "getNum=" << QString::fromStdString(path.getNum()) - << "getPad=" << path.getPad(); - // Create timeline from path (handles video, sequences, and .otio files) tl::Options timelineOptions; #ifdef HAVE_FFMPEG @@ -201,7 +599,6 @@ void TLRenderPlayer::loadMedia(const QString& filePath) // PNG-in-MOV can be unstable with multi-threaded FFmpeg decode. timelineOptions.ioOptions["FFmpeg/ThreadCount"] = "1"; timelineOptions.ioOptions["FFmpeg/VideoBufferSize"] = "1"; - qDebug() << "[TLRenderPlayer] Using single-thread FFmpeg decode for PNG codec"; } } #endif @@ -212,17 +609,6 @@ void TLRenderPlayer::loadMedia(const QString& filePath) return; } - // Log what tlRender actually detected/expanded - const auto& tlPath = m_timeline->getPath(); - qDebug() << "[TLRenderPlayer] loadMedia: tlRender expanded path:" - << "path=" << QString::fromStdString(tlPath.get()) - << "isSeq=" << tlPath.isSeq() - << "hasFrames=" << tlPath.getFrames().has_value(); - if (tlPath.getFrames().has_value()) { - const auto& frames = tlPath.getFrames().value(); - qDebug() << "[TLRenderPlayer] loadMedia: frame range=" << frames.min() << "-" << frames.max(); - } - // Create player tl::PlayerOptions playerOptions; // PlayerCacheOptions uses videoGB/audioGB (float) and readBehind (float seconds) @@ -273,16 +659,11 @@ void TLRenderPlayer::loadMedia(const QString& filePath) } } - qDebug() << "[TLRenderPlayer] currentVideoChanged: got" << frames.size() - << "frames, hasValidFrame:" << hasValidFrame - << "pendingPlay:" << m_pendingPlay; - // Start actual playback now that we have frames if (shouldStartPlayback && m_player) { - qDebug() << "[TLRenderPlayer] First frame ready, starting deferred playback"; if (reversePlayback) { - m_player->setSpeedMult(std::abs(m_playbackRate.load())); - m_player->reverse(); + m_manualReversePlaybackActive = true; + m_manualReverseStepAccumulatorMs = 0.0; } else { m_player->setSpeedMult(m_playbackRate.load()); m_player->forward(); @@ -308,27 +689,15 @@ void TLRenderPlayer::loadMedia(const QString& filePath) } const qint64 newFrame = static_cast(localValue); const qint64 newPositionMs = static_cast((localValue / rate) * 1000.0); - - qDebug() << "[TLRenderPlayer] currentTimeChanged DEBUG:" - << "rawValue=" << value.value() - << "startValue=" << startValue - << "durationValue=" << durationValue - << "localValue=" << localValue - << "rate=" << rate - << "newFrame=" << newFrame - << "newPositionMs=" << newPositionMs - << "m_duration=" << m_duration.load(); // Lazy update media info if we haven't got valid duration yet // (common for sequences where timeline loads asynchronously) if (m_duration.load() <= 0 && timeRange.duration().value() > 0.0) { - qDebug() << "[TLRenderPlayer] Late media info update (sequence async load)"; updateMediaInfo(); } if (newPositionMs != m_position) { m_position = newPositionMs; - qDebug() << "[TLRenderPlayer] currentTimeChanged: frame" << newFrame << "pos" << newPositionMs << "ms"; emit positionChanged(newPositionMs); } if (newFrame != m_currentFrame) { @@ -342,8 +711,6 @@ void TLRenderPlayer::loadMedia(const QString& filePath) this, [this](tl::Playback playback) { - qDebug() << "[TLRenderPlayer] playbackChanged SIGNAL received:" << static_cast(playback) - << "(0=Stop, 1=Forward, 2=Reverse)"; PlaybackState newState; switch (playback) { case tl::Playback::Stop: @@ -363,9 +730,6 @@ void TLRenderPlayer::loadMedia(const QString& filePath) } }); - // Apply current OCIO settings - applyOCIOOptions(); - // Set loop mode switch (m_loopMode) { case LoopMode::Once: @@ -386,19 +750,23 @@ void TLRenderPlayer::loadMedia(const QString& filePath) // Keep a precise tick running to avoid render stalls on some systems. m_updateTimer->start(); - qDebug() << "TLRenderPlayer: Loaded media:" << filePath; - } catch (const std::exception& e) { emit error(tr("Failed to load media: %1 - %2").arg(filePath, e.what())); } #else - Q_UNUSED(filePath) + Q_UNUSED(filePath); emit error(tr("tlRender support not available")); #endif } void TLRenderPlayer::unloadMedia() { + if (m_ffmpegMovPlayer && m_ffmpegMovPlayer->hasMedia()) { + m_ffmpegMovPlayer->unloadMedia(); + } + if (m_mpvPlayer && m_mpvPlayer->hasMedia()) { + m_mpvPlayer->unloadMedia(); + } #ifdef HAVE_TLRENDER QMutexLocker locker(&m_mutex); @@ -425,11 +793,18 @@ void TLRenderPlayer::unloadMedia() m_mediaInfo = MediaInfo(); m_cachedVideoFrames.clear(); + m_frameAcquisitionStats = FrameAcquisitionStats(); #endif } bool TLRenderPlayer::hasMedia() const { + if (m_ffmpegMovPlayer && m_ffmpegMovPlayer->hasMedia()) { + return true; + } + if (m_mpvPlayer && m_mpvPlayer->hasMedia()) { + return true; + } #ifdef HAVE_TLRENDER return m_player != nullptr; #else @@ -444,20 +819,30 @@ QString TLRenderPlayer::currentMediaPath() const void TLRenderPlayer::updateMediaInfo() { + if (m_ffmpegMovPlayer && m_ffmpegMovPlayer->hasMedia()) { + m_mediaInfo = toTlMediaInfo(m_ffmpegMovPlayer->mediaInfo()); + m_duration = m_mediaInfo.durationMs; + m_totalFrames = m_mediaInfo.totalFrames; + emit durationChanged(m_mediaInfo.durationMs); + emit mediaInfoReady(m_mediaInfo); + return; + } + if (m_mpvPlayer && m_mpvPlayer->hasMedia()) { + m_mediaInfo = toTlMediaInfo(m_mpvPlayer->mediaInfo()); + m_duration = m_mediaInfo.durationMs; + m_totalFrames = m_mediaInfo.totalFrames; + emit durationChanged(m_mediaInfo.durationMs); + emit mediaInfoReady(m_mediaInfo); + return; + } #ifdef HAVE_TLRENDER if (!m_player || !m_timeline) { - qDebug() << "[TLRenderPlayer] updateMediaInfo: no player or timeline!"; return; } const auto& ioInfo = m_player->getIOInfo(); const auto& timeRange = m_player->getTimeRange(); - qDebug() << "[TLRenderPlayer] updateMediaInfo:" - << "timeRange.start=" << timeRange.start_time().value() - << "timeRange.duration=" << timeRange.duration().value() - << "timeRange.rate=" << timeRange.duration().rate(); - m_mediaInfo.width = 0; m_mediaInfo.height = 0; @@ -471,11 +856,6 @@ void TLRenderPlayer::updateMediaInfo() m_mediaInfo.totalFrames = static_cast(timeRange.duration().value()); m_mediaInfo.durationMs = static_cast((timeRange.duration().value() / rate) * 1000.0); - qDebug() << "[TLRenderPlayer] updateMediaInfo computed:" - << "fps=" << m_mediaInfo.fps - << "totalFrames=" << m_mediaInfo.totalFrames - << "durationMs=" << m_mediaInfo.durationMs; - // Get video info from first video layer if (!ioInfo.video.empty()) { const auto& videoInfo = ioInfo.video[0]; @@ -504,14 +884,30 @@ void TLRenderPlayer::updateMediaInfo() void TLRenderPlayer::play() { + if (m_ffmpegMovPlayer && m_ffmpegMovPlayer->hasMedia()) { + m_ffmpegMovPlayer->play(); + return; + } + if (m_mpvPlayer && m_mpvPlayer->hasMedia()) { + m_mpvPlayer->play(); + return; + } #ifdef HAVE_TLRENDER if (!m_player) { - qDebug() << "[TLRenderPlayer::play] No player - cannot play"; return; } - qDebug() << "[TLRenderPlayer::play] CALLED - rate:" << m_playbackRate - << "currentPlayback:" << static_cast(m_player->getPlayback()); + stopManualReversePlayback(); + + // Honor current playback rate sign (JKL expects reverse playback). + if (m_playbackRate < 0.0) { + m_player->stop(); + m_manualReversePlaybackActive = true; + m_manualReverseStepAccumulatorMs = 0.0; + m_playbackState = PlaybackState::Playing; + emit playbackStateChanged(PlaybackState::Playing); + return; + } // Check if we have frames with valid image data cached yet. If not, defer // playback until currentVideoChanged delivers the first valid frame. This @@ -528,9 +924,8 @@ void TLRenderPlayer::play() } if (!hasValidFrame) { - qDebug() << "[TLRenderPlayer::play] No valid frames cached yet, deferring playback"; m_pendingPlay = true; - m_pendingReverse = (m_playbackRate < 0.0); + m_pendingReverse = false; m_playbackState = PlaybackState::Playing; // UI shows "playing" immediately locker.unlock(); emit playbackStateChanged(PlaybackState::Playing); @@ -538,34 +933,30 @@ void TLRenderPlayer::play() } } - // Honor current playback rate sign (JKL expects reverse playback). - if (m_playbackRate < 0.0) { - m_player->setSpeedMult(std::abs(m_playbackRate)); - qDebug() << "[TLRenderPlayer::play] Calling m_player->reverse()"; - m_player->reverse(); - qDebug() << "[TLRenderPlayer::play] After reverse(), playback:" << static_cast(m_player->getPlayback()); - } else { - m_player->setSpeedMult(m_playbackRate); - qDebug() << "[TLRenderPlayer::play] Calling m_player->forward()"; - m_player->forward(); - qDebug() << "[TLRenderPlayer::play] After forward(), playback:" << static_cast(m_player->getPlayback()); - } + m_player->setSpeedMult(m_playbackRate); + m_player->forward(); m_playbackState = PlaybackState::Playing; emit playbackStateChanged(PlaybackState::Playing); - qDebug() << "[TLRenderPlayer::play] COMPLETED - emitted PlaybackState::Playing"; #endif } void TLRenderPlayer::pause() { + if (m_ffmpegMovPlayer && m_ffmpegMovPlayer->hasMedia()) { + m_ffmpegMovPlayer->pause(); + return; + } + if (m_mpvPlayer && m_mpvPlayer->hasMedia()) { + m_mpvPlayer->pause(); + return; + } #ifdef HAVE_TLRENDER if (!m_player) { - qDebug() << "[TLRenderPlayer::pause] No player - cannot pause"; return; } - - qDebug() << "[TLRenderPlayer::pause] Pausing playback"; - + + stopManualReversePlayback(); + // Cancel any pending deferred playback { QMutexLocker locker(&m_mutex); @@ -581,9 +972,19 @@ void TLRenderPlayer::pause() void TLRenderPlayer::stop() { + if (m_ffmpegMovPlayer && m_ffmpegMovPlayer->hasMedia()) { + m_ffmpegMovPlayer->stop(); + return; + } + if (m_mpvPlayer && m_mpvPlayer->hasMedia()) { + m_mpvPlayer->stop(); + return; + } #ifdef HAVE_TLRENDER if (!m_player) return; - + + stopManualReversePlayback(); + // Cancel any pending deferred playback { QMutexLocker locker(&m_mutex); @@ -613,9 +1014,24 @@ void TLRenderPlayer::togglePlayback() void TLRenderPlayer::seek(qint64 positionMs) { + if (m_ffmpegMovPlayer && m_ffmpegMovPlayer->hasMedia()) { + m_ffmpegMovPlayer->seek(positionMs); + return; + } + if (m_mpvPlayer && m_mpvPlayer->hasMedia()) { + m_mpvPlayer->seek(positionMs); + return; + } #ifdef HAVE_TLRENDER if (!m_player) return; - + + stopManualReversePlayback(); + + { + QMutexLocker locker(&m_mutex); + m_cachedVideoFrames.clear(); + } + const auto& timeRange = m_player->getTimeRange(); double rate = timeRange.duration().rate(); if (rate <= 0.0) { @@ -635,9 +1051,24 @@ void TLRenderPlayer::seek(qint64 positionMs) void TLRenderPlayer::seekToFrame(qint64 frameNumber) { + if (m_ffmpegMovPlayer && m_ffmpegMovPlayer->hasMedia()) { + m_ffmpegMovPlayer->seekToFrame(frameNumber); + return; + } + if (m_mpvPlayer && m_mpvPlayer->hasMedia()) { + m_mpvPlayer->seekToFrame(frameNumber); + return; + } #ifdef HAVE_TLRENDER if (!m_player) return; - + + stopManualReversePlayback(); + + { + QMutexLocker locker(&m_mutex); + m_cachedVideoFrames.clear(); + } + const auto& timeRange = m_player->getTimeRange(); double rate = timeRange.duration().rate(); if (rate <= 0.0) { @@ -655,18 +1086,30 @@ void TLRenderPlayer::seekToFrame(qint64 frameNumber) void TLRenderPlayer::setPlaybackRate(double rate) { + m_playbackRate = rate; + if (m_ffmpegMovPlayer && m_ffmpegMovPlayer->hasMedia()) { + m_ffmpegMovPlayer->setPlaybackRate(rate); + return; + } + if (m_mpvPlayer && m_mpvPlayer->hasMedia()) { + m_mpvPlayer->setPlaybackRate(rate); + return; + } #ifdef HAVE_TLRENDER if (!m_player) return; - - m_playbackRate = rate; - + m_player->setSpeedMult(std::abs(rate)); if (m_playbackState == PlaybackState::Playing) { if (rate < 0) { - m_player->reverse(); + m_player->stop(); + m_manualReversePlaybackActive = true; + m_manualReverseStepAccumulatorMs = 0.0; } else { + stopManualReversePlayback(); m_player->forward(); } + } else if (rate >= 0.0) { + stopManualReversePlayback(); } #endif } @@ -678,9 +1121,16 @@ double TLRenderPlayer::playbackRate() const void TLRenderPlayer::setLoopMode(LoopMode mode) { -#ifdef HAVE_TLRENDER m_loopMode = mode; - + if (m_ffmpegMovPlayer && m_ffmpegMovPlayer->hasMedia()) { + m_ffmpegMovPlayer->setLoopMode(toMpvLoopMode(mode)); + return; + } + if (m_mpvPlayer && m_mpvPlayer->hasMedia()) { + m_mpvPlayer->setLoopMode(toMpvLoopMode(mode)); + return; + } +#ifdef HAVE_TLRENDER if (m_player) { switch (mode) { case LoopMode::Once: @@ -704,24 +1154,60 @@ TLRenderPlayer::LoopMode TLRenderPlayer::loopMode() const void TLRenderPlayer::stepForward() { + if (m_ffmpegMovPlayer && m_ffmpegMovPlayer->hasMedia()) { + m_ffmpegMovPlayer->stepForward(); + return; + } + if (m_mpvPlayer && m_mpvPlayer->hasMedia()) { + m_mpvPlayer->stepForward(); + return; + } #ifdef HAVE_TLRENDER if (!m_player) return; + stopManualReversePlayback(); m_player->frameNext(); #endif } -void TLRenderPlayer::stepBackward() +void TLRenderPlayer::stepBackwardInternal() { #ifdef HAVE_TLRENDER if (!m_player) return; + { + QMutexLocker locker(&m_mutex); + m_cachedVideoFrames.clear(); + } m_player->framePrev(); + tick(); + emit videoFramesChanged(); #endif } +void TLRenderPlayer::stepBackward() +{ + if (m_ffmpegMovPlayer && m_ffmpegMovPlayer->hasMedia()) { + m_ffmpegMovPlayer->stepBackward(); + return; + } + if (m_mpvPlayer && m_mpvPlayer->hasMedia()) { + m_mpvPlayer->stepBackward(); + return; + } + stopManualReversePlayback(); + stepBackwardInternal(); +} + void TLRenderPlayer::stepForwardBy(int frames) { + if (m_ffmpegMovPlayer && m_ffmpegMovPlayer->hasMedia()) { + for (int i = 0; i < frames; ++i) { + m_ffmpegMovPlayer->stepForward(); + } + return; + } #ifdef HAVE_TLRENDER if (!m_player) return; + stopManualReversePlayback(); for (int i = 0; i < frames; ++i) { m_player->frameNext(); } @@ -730,8 +1216,15 @@ void TLRenderPlayer::stepForwardBy(int frames) void TLRenderPlayer::stepBackwardBy(int frames) { + if (m_ffmpegMovPlayer && m_ffmpegMovPlayer->hasMedia()) { + for (int i = 0; i < frames; ++i) { + m_ffmpegMovPlayer->stepBackward(); + } + return; + } #ifdef HAVE_TLRENDER if (!m_player) return; + stopManualReversePlayback(); for (int i = 0; i < frames; ++i) { m_player->framePrev(); } @@ -740,16 +1233,26 @@ void TLRenderPlayer::stepBackwardBy(int frames) void TLRenderPlayer::gotoStart() { + if (m_ffmpegMovPlayer && m_ffmpegMovPlayer->hasMedia()) { + m_ffmpegMovPlayer->seek(0); + return; + } #ifdef HAVE_TLRENDER if (!m_player) return; + stopManualReversePlayback(); m_player->gotoStart(); #endif } void TLRenderPlayer::gotoEnd() { + if (m_ffmpegMovPlayer && m_ffmpegMovPlayer->hasMedia()) { + m_ffmpegMovPlayer->seek(m_ffmpegMovPlayer->duration()); + return; + } #ifdef HAVE_TLRENDER if (!m_player) return; + stopManualReversePlayback(); m_player->gotoEnd(); #endif } @@ -760,8 +1263,16 @@ void TLRenderPlayer::gotoEnd() void TLRenderPlayer::setVolume(float volume) { -#ifdef HAVE_TLRENDER m_volume = qBound(0.0f, volume, 1.0f); + if (m_ffmpegMovPlayer && m_ffmpegMovPlayer->hasMedia()) { + m_ffmpegMovPlayer->setVolume(m_volume); + return; + } + if (m_mpvPlayer && m_mpvPlayer->hasMedia()) { + m_mpvPlayer->setVolume(m_volume); + return; + } +#ifdef HAVE_TLRENDER if (m_player) { m_player->setVolume(m_volume); } @@ -775,8 +1286,16 @@ float TLRenderPlayer::volume() const void TLRenderPlayer::setMuted(bool muted) { -#ifdef HAVE_TLRENDER m_muted = muted; + if (m_ffmpegMovPlayer && m_ffmpegMovPlayer->hasMedia()) { + m_ffmpegMovPlayer->setMuted(muted); + return; + } + if (m_mpvPlayer && m_mpvPlayer->hasMedia()) { + m_mpvPlayer->setMuted(muted); + return; + } +#ifdef HAVE_TLRENDER if (m_player) { m_player->setMute(muted); } @@ -822,277 +1341,14 @@ TLRenderPlayer::MediaInfo TLRenderPlayer::mediaInfo() const return m_mediaInfo; } -// ============================================================================ -// OCIO Color Management -// ============================================================================ - -void TLRenderPlayer::setOCIOEnabled(bool enabled) -{ - m_ocioEnabled = enabled; - applyOCIOOptions(); - emit ocioOptionsChanged(); -} - -bool TLRenderPlayer::isOCIOEnabled() const -{ - return m_ocioEnabled; -} - -void TLRenderPlayer::setOCIOConfig(const QString& configPath) -{ - m_ocioConfigPath = configPath; - updateOCIOLists(); - applyOCIOOptions(); - emit ocioConfigChanged(configPath); - emit ocioOptionsChanged(); -} - -QString TLRenderPlayer::ocioConfigPath() const -{ - return m_ocioConfigPath; -} - -void TLRenderPlayer::setInputColorspace(const QString& colorspace) -{ - m_inputColorspace = colorspace; - applyOCIOOptions(); - emit ocioOptionsChanged(); -} - -QString TLRenderPlayer::inputColorspace() const -{ - return m_inputColorspace; -} - -void TLRenderPlayer::setDisplay(const QString& display) -{ - m_display = display; - applyOCIOOptions(); - emit ocioOptionsChanged(); - - // Update available views for this display - emit viewsChanged(availableViews(display)); -} - -QString TLRenderPlayer::display() const -{ - return m_display; -} - -void TLRenderPlayer::setView(const QString& view) -{ - m_view = view; - applyOCIOOptions(); - emit ocioOptionsChanged(); -} - -QString TLRenderPlayer::view() const -{ - return m_view; -} - -void TLRenderPlayer::setLook(const QString& look) -{ - m_look = look; - applyOCIOOptions(); - emit ocioOptionsChanged(); -} - -QString TLRenderPlayer::look() const -{ - return m_look; -} - -QStringList TLRenderPlayer::availableColorspaces() const -{ - return m_availableColorspaces; -} - -QStringList TLRenderPlayer::availableDisplays() const -{ - return m_availableDisplays; -} - -QStringList TLRenderPlayer::availableViews(const QString& display) const -{ - if (m_availableViews.contains(display)) { - return m_availableViews[display]; - } - -#ifdef HAVE_OCIO - try { - OCIO::ConstConfigRcPtr config; - if (m_ocioConfigPath.isEmpty()) { - config = OCIO::GetCurrentConfig(); - } else { - config = OCIO::Config::CreateFromFile(m_ocioConfigPath.toStdString().c_str()); - } - - if (config) { - QStringList views; - int numViews = config->getNumViews(display.toStdString().c_str()); - for (int i = 0; i < numViews; ++i) { - views.append(QString::fromStdString( - config->getView(display.toStdString().c_str(), i))); - } - m_availableViews[display] = views; - return views; - } - } catch (const OCIO::Exception& e) { - qWarning() << "OCIO: Failed to get views for display" << display << ":" << e.what(); - } -#endif - - return QStringList(); -} - -QStringList TLRenderPlayer::availableLooks() const -{ - return m_availableLooks; -} - -void TLRenderPlayer::updateOCIOLists() -{ -#ifdef HAVE_OCIO - try { - OCIO::ConstConfigRcPtr config; - if (m_ocioConfigPath.isEmpty()) { - config = OCIO::GetCurrentConfig(); - } else { - config = OCIO::Config::CreateFromFile(m_ocioConfigPath.toStdString().c_str()); - } - - if (!config) { - qWarning() << "OCIO: No config available"; - return; - } - - // Get colorspaces - m_availableColorspaces.clear(); - for (int i = 0; i < config->getNumColorSpaces(); ++i) { - m_availableColorspaces.append(QString::fromStdString(config->getColorSpaceNameByIndex(i))); - } - if (m_inputColorspace.isEmpty() || !m_availableColorspaces.contains(m_inputColorspace)) { - const char* role = config->getRoleColorSpace(OCIO::ROLE_SCENE_LINEAR); - if (role && *role) { - m_inputColorspace = QString::fromStdString(role); - } else if (!m_availableColorspaces.isEmpty()) { - m_inputColorspace = m_availableColorspaces.first(); - } - } - emit colorspacesChanged(m_availableColorspaces); - - // Get displays - m_availableDisplays.clear(); - for (int i = 0; i < config->getNumDisplays(); ++i) { - m_availableDisplays.append(QString::fromStdString(config->getDisplay(i))); - } - emit displaysChanged(m_availableDisplays); - - // Get looks - m_availableLooks.clear(); - for (int i = 0; i < config->getNumLooks(); ++i) { - m_availableLooks.append(QString::fromStdString(config->getLookNameByIndex(i))); - } - - // Clear cached views - m_availableViews.clear(); - - // Set defaults if not set - if (!m_availableDisplays.isEmpty()) { - if (m_display.isEmpty() || !m_availableDisplays.contains(m_display)) { - m_display = QString::fromStdString(config->getDefaultDisplay()); - } - } - if (!m_display.isEmpty()) { - const QStringList views = availableViews(m_display); - if (m_view.isEmpty() || !views.contains(m_view)) { - m_view = QString::fromStdString(config->getDefaultView(m_display.toStdString().c_str())); - } - } - - // Make sure view dropdowns can populate immediately after config load. - if (!m_display.isEmpty()) { - emit viewsChanged(availableViews(m_display)); - } - - qDebug() << "OCIO: Loaded config with" << m_availableColorspaces.size() << "colorspaces," - << m_availableDisplays.size() << "displays"; - - } catch (const OCIO::Exception& e) { - qWarning() << "OCIO: Failed to load config:" << e.what(); - } -#endif -} - -void TLRenderPlayer::applyOCIOOptions() +MpvPlayer* TLRenderPlayer::mpvPlayer() const { -#ifdef HAVE_TLRENDER - // OCIO options will be used during rendering in TLRenderWidget - // The player itself doesn't directly apply OCIO - that happens in the GL renderer -#endif + return m_mpvPlayer; } -tl::OCIOOptions TLRenderPlayer::currentOCIOOptions() const +FFmpegMovPlayer* TLRenderPlayer::ffmpegMovPlayer() const { - tl::OCIOOptions options; -#ifdef HAVE_TLRENDER - options.enabled = m_ocioEnabled; - - if (!m_ocioConfigPath.isEmpty()) { - options.config = tl::OCIOConfig::File; - options.fileName = m_ocioConfigPath.toStdString(); - } else { - options.config = tl::OCIOConfig::EnvVar; - } - - options.input = m_inputColorspace.toStdString(); - options.display = m_display.toStdString(); - options.view = m_view.toStdString(); - options.look = m_look.toStdString(); -#endif - return options; -} - -tl::DisplayOptions TLRenderPlayer::currentDisplayOptions() const -{ - tl::DisplayOptions options; -#ifdef HAVE_TLRENDER - // EXR Display settings (exposure) - if (m_exposure != 0.0f) { - options.exrDisplay.enabled = true; - options.exrDisplay.exposure = m_exposure; - } - - // Levels settings (gamma) - if (m_gamma != 1.0f) { - options.levels.enabled = true; - options.levels.gamma = m_gamma; - } -#endif - return options; -} - -void TLRenderPlayer::setExposure(float exposure) -{ - m_exposure = qBound(-10.0f, exposure, 10.0f); - emit videoFramesChanged(); // Trigger redraw -} - -float TLRenderPlayer::exposure() const -{ - return m_exposure; -} - -void TLRenderPlayer::setGamma(float gamma) -{ - m_gamma = qBound(0.1f, gamma, 4.0f); - emit videoFramesChanged(); // Trigger redraw -} - -float TLRenderPlayer::gamma() const -{ - return m_gamma; + return m_ffmpegMovPlayer; } // ============================================================================ @@ -1158,13 +1414,61 @@ void TLRenderPlayer::tick() #endif } +void TLRenderPlayer::refreshCurrentFrame() +{ + if (m_ffmpegMovPlayer && m_ffmpegMovPlayer->hasMedia()) { + emit videoFramesChanged(); + return; + } + if (m_mpvPlayer && m_mpvPlayer->hasMedia()) { + emit videoFramesChanged(); + return; + } +#ifdef HAVE_TLRENDER + tick(); + emit videoFramesChanged(); +#endif +} + +void TLRenderPlayer::stopManualReversePlayback() +{ +#ifdef HAVE_TLRENDER + m_manualReversePlaybackActive = false; + m_manualReverseStepAccumulatorMs = 0.0; +#endif +} + // ============================================================================ // Update Timer // ============================================================================ void TLRenderPlayer::onUpdateTimer() { + if (m_ffmpegMovPlayer && m_ffmpegMovPlayer->hasMedia()) { + return; + } + if (m_mpvPlayer && m_mpvPlayer->hasMedia()) { + return; + } #ifdef HAVE_TLRENDER + if (m_manualReversePlaybackActive) { + const double fps = m_mediaInfo.fps > 0.0 ? m_mediaInfo.fps : 24.0; + const double rate = std::abs(static_cast(m_playbackRate)); + const double frameDurationMs = 1000.0 / qMax(0.001, fps * qMax(0.001, rate)); + m_manualReverseStepAccumulatorMs += m_updateTimer->interval(); + + while (m_manualReverseStepAccumulatorMs >= frameDurationMs) { + m_manualReverseStepAccumulatorMs -= frameDurationMs; + stepBackwardInternal(); + if (m_currentFrame.load() <= 0) { + m_playbackState = PlaybackState::Paused; + emit playbackStateChanged(PlaybackState::Paused); + stopManualReversePlayback(); + break; + } + } + return; + } tick(); #endif } @@ -1175,12 +1479,105 @@ void TLRenderPlayer::onUpdateTimer() QImage TLRenderPlayer::getCurrentFrame(const QSize& targetSize) { + QElapsedTimer timer; + timer.start(); + if (m_ffmpegMovPlayer && m_ffmpegMovPlayer->hasMedia()) { + QImage frame = m_ffmpegMovPlayer->currentFrameImage(targetSize); +#ifdef HAVE_TLRENDER + QMutexLocker locker(&m_mutex); + m_frameAcquisitionStats.lastGetCurrentFrameNs = timer.nsecsElapsed(); +#endif + return frame; + } + if (m_mpvPlayer && m_mpvPlayer->hasMedia()) { + QImage frame = m_mpvPlayer->currentFrameImage(); + if (!frame.isNull() && !targetSize.isEmpty()) { + frame = frame.scaled(targetSize, Qt::KeepAspectRatio, Qt::SmoothTransformation); + } + return frame; + } +#ifdef HAVE_TLRENDER + std::vector cachedVideoFrames; + QString currentPath; + PlaybackState playbackState = PlaybackState::Stopped; + + { + QMutexLocker locker(&m_mutex); + cachedVideoFrames = m_cachedVideoFrames; + currentPath = m_currentPath; + playbackState = m_playbackState; + } + + QImage cachedFrame = currentVideoFramesToQImage(cachedVideoFrames, targetSize); + if (!cachedFrame.isNull()) { + { + QMutexLocker locker(&m_mutex); + ++m_frameAcquisitionStats.cachedFrameConversions; + if (!cachedVideoFrames.empty() && !cachedVideoFrames.front().layers.empty() && cachedVideoFrames.front().layers.front().image) { + m_frameAcquisitionStats.lastCachedImageType = static_cast(cachedVideoFrames.front().layers.front().image->getInfo().type); + } + m_frameAcquisitionStats.lastCachedConversionNs = timer.nsecsElapsed(); + m_frameAcquisitionStats.lastGetCurrentFrameNs = m_frameAcquisitionStats.lastCachedConversionNs; + return cachedFrame; + } + } + + if (!cachedVideoFrames.empty()) { + for (const auto& frame : cachedVideoFrames) { + for (const auto& layer : frame.layers) { + if (layer.image) { + QMutexLocker locker(&m_mutex); + ++m_frameAcquisitionStats.unsupportedCachedFrameTypes; + m_frameAcquisitionStats.lastCachedImageType = static_cast(layer.image->getInfo().type); + break; + } + } + } + } + // For now, reuse the static thumbnail extraction when possible. - // Note: This will only work for regular video files (not sequence patterns). - if (m_currentPath.isEmpty()) { + // This remains the fallback when tlRender has no cached frame yet or the + // cached frame format is not handled above. + if (playbackState == PlaybackState::Playing || currentPath.isEmpty() || !m_player) { + QMutexLocker locker(&m_mutex); + m_frameAcquisitionStats.lastGetCurrentFrameNs = timer.nsecsElapsed(); return QImage(); } - return extractThumbnail(m_currentPath, targetSize, position()); + const QImage fallback = extractThumbnail(currentPath, targetSize, position()); + { + QMutexLocker locker(&m_mutex); + ++m_frameAcquisitionStats.fallbackExtractions; + m_frameAcquisitionStats.lastFallbackExtractionNs = timer.nsecsElapsed(); + m_frameAcquisitionStats.lastGetCurrentFrameNs = m_frameAcquisitionStats.lastFallbackExtractionNs; + } + return fallback; +#endif + + return QImage(); +} + +bool TLRenderPlayer::useMpvBackendForCurrentMedia(const QString& filePath) const +{ + const QString suffix = QFileInfo(filePath).suffix(); + return FileUtils::isVideoFile(suffix) && suffix.compare(QStringLiteral("mov"), Qt::CaseInsensitive) != 0; +} + +TLRenderPlayer::FrameAcquisitionStats TLRenderPlayer::frameAcquisitionStatsForTest() const +{ +#ifdef HAVE_TLRENDER + QMutexLocker locker(&m_mutex); + return m_frameAcquisitionStats; +#else + return TLRenderPlayer::FrameAcquisitionStats(); +#endif +} + +void TLRenderPlayer::resetFrameAcquisitionStatsForTest() +{ +#ifdef HAVE_TLRENDER + QMutexLocker locker(&m_mutex); + m_frameAcquisitionStats = TLRenderPlayer::FrameAcquisitionStats(); +#endif } QImage TLRenderPlayer::extractThumbnail(const QString& filePath, const QSize& targetSize, qint64 positionMs) @@ -1354,9 +1751,9 @@ QImage TLRenderPlayer::extractThumbnail(const QString& filePath, const QSize& ta return out; #else - Q_UNUSED(filePath) - Q_UNUSED(targetSize) - Q_UNUSED(positionMs) + Q_UNUSED(filePath); + Q_UNUSED(targetSize); + Q_UNUSED(positionMs); return {}; #endif } @@ -1398,7 +1795,7 @@ qint64 TLRenderPlayer::queryDuration(const QString& filePath) avformat_close_input(&fmtCtx); return durationMs; #else - Q_UNUSED(filePath) + Q_UNUSED(filePath); return 0; #endif } diff --git a/native/qt6/src/media/tlrender_player.h b/native/qt6/src/media/tlrender_player.h index 5e71b13c..ea9f4780 100644 --- a/native/qt6/src/media/tlrender_player.h +++ b/native/qt6/src/media/tlrender_player.h @@ -14,6 +14,9 @@ #include #include +class MpvPlayer; +class FFmpegMovPlayer; + // Forward declarations for tlRender types namespace ftk { class Context; @@ -25,11 +28,7 @@ namespace tl { class Player; class Timeline; class System; - struct OCIOOptions; struct VideoFrame; - struct DisplayOptions; - struct Levels; - struct EXRDisplay; namespace qt { class ContextObject; class PlayerObject; @@ -44,10 +43,9 @@ namespace tl { * @brief Professional tlRender-based video player for Qt applications * * This class provides production-ready video playback using tlRender (mrv2's engine), - * with full OpenColorIO (ACES) color management support. + * with tlRender-backed playback support. * * Key features: - * - Full ACES/OpenColorIO color management pipeline * - OpenGL 4.1 hardware-accelerated rendering * - OpenTimelineIO support (.otio, .otioz files) * - Image sequence playback (EXR, PNG, JPEG, TIFF, etc.) @@ -57,13 +55,7 @@ namespace tl { * - Playback rate control (including reverse) * - Loop modes (Once, Loop, PingPong) * - * OCIO Features: - * - Load custom OCIO config files - * - Select input colorspace - * - Select display and view - * - Apply looks - * - * This replaces GStreamerPlayer with native OCIO support. + * This replaces GStreamerPlayer in the current app stack. */ class TLRenderPlayer : public QObject { @@ -96,6 +88,16 @@ class TLRenderPlayer : public QObject int audioSampleRate = 0; }; + struct FrameAcquisitionStats { + qint64 cachedFrameConversions = 0; + qint64 fallbackExtractions = 0; + qint64 unsupportedCachedFrameTypes = 0; + int lastCachedImageType = -1; + qint64 lastCachedConversionNs = 0; + qint64 lastFallbackExtractionNs = 0; + qint64 lastGetCurrentFrameNs = 0; + }; + explicit TLRenderPlayer(QObject* parent = nullptr); ~TLRenderPlayer(); @@ -196,67 +198,6 @@ class TLRenderPlayer : public QObject qint64 totalFrames() const; // Total frame count MediaInfo mediaInfo() const; - // ======================================================================== - // OpenColorIO (OCIO) Color Management - // ======================================================================== - - /** - * @brief Enable/disable OCIO color management - */ - void setOCIOEnabled(bool enabled); - bool isOCIOEnabled() const; - - /** - * @brief Set OCIO config file path - * @param configPath Path to config.ocio file, or empty for environment variable - */ - void setOCIOConfig(const QString& configPath); - QString ocioConfigPath() const; - - /** - * @brief Set input colorspace (e.g., "ACES - ACEScg", "Utility - Linear - sRGB") - */ - void setInputColorspace(const QString& colorspace); - QString inputColorspace() const; - - /** - * @brief Set display device (e.g., "sRGB", "Rec.709", "P3-D65") - */ - void setDisplay(const QString& display); - QString display() const; - - /** - * @brief Set view transform (e.g., "ACES 1.0 - SDR Video", "Raw") - */ - void setView(const QString& view); - QString view() const; - - /** - * @brief Set OCIO look (optional, e.g., film look) - */ - void setLook(const QString& look); - QString look() const; - - /** - * @brief Get available colorspaces from current OCIO config - */ - QStringList availableColorspaces() const; - - /** - * @brief Get available displays from current OCIO config - */ - QStringList availableDisplays() const; - - /** - * @brief Get available views for a display from current OCIO config - */ - QStringList availableViews(const QString& display) const; - - /** - * @brief Get available looks from current OCIO config - */ - QStringList availableLooks() const; - // ======================================================================== // Rendering (for TLRenderWidget) // ======================================================================== @@ -280,6 +221,8 @@ class TLRenderPlayer : public QObject * @brief Get the tlRender player (for widget rendering) */ std::shared_ptr player() const; + MpvPlayer* mpvPlayer() const; + FFmpegMovPlayer* ffmpegMovPlayer() const; /** * @brief Get the Qt PlayerObject wrapper (for native viewports) @@ -291,32 +234,11 @@ class TLRenderPlayer : public QObject */ std::vector currentVideoFrames() const; - /** - * @brief Get the current OCIO options - */ - tl::OCIOOptions currentOCIOOptions() const; - - /** - * @brief Get the current display options (exposure, gamma, etc.) - */ - tl::DisplayOptions currentDisplayOptions() const; - - /** - * @brief Set exposure adjustment (-10.0 to 10.0, 0.0 = no change) - */ - void setExposure(float exposure); - float exposure() const; - - /** - * @brief Set gamma adjustment (0.1 to 4.0, 1.0 = no change) - */ - void setGamma(float gamma); - float gamma() const; - /** * @brief Tick the player (call from render loop) */ void tick(); + void refreshCurrentFrame(); // ======================================================================== // Frame Extraction (for thumbnails) @@ -339,6 +261,9 @@ class TLRenderPlayer : public QObject */ static qint64 queryDuration(const QString& filePath); + FrameAcquisitionStats frameAcquisitionStatsForTest() const; + void resetFrameAcquisitionStatsForTest(); + // ======================================================================== // Static Initialization // ======================================================================== @@ -365,27 +290,24 @@ class TLRenderPlayer : public QObject void error(const QString& errorString); void endOfStream(); - // OCIO signals - void ocioConfigChanged(const QString& configPath); - void ocioOptionsChanged(); - void colorspacesChanged(const QStringList& colorspaces); - void displaysChanged(const QStringList& displays); - void viewsChanged(const QStringList& views); - private slots: void onUpdateTimer(); private: + void ensureTlRenderContext(); void setupContext(); void updateMediaInfo(); - void updateOCIOLists(); - void applyOCIOOptions(); + bool useMpvBackendForCurrentMedia(const QString& filePath) const; + void stopManualReversePlayback(); + void stepBackwardInternal(); // tlRender objects std::shared_ptr m_context; std::shared_ptr m_system; std::shared_ptr m_timeline; std::shared_ptr m_player; + MpvPlayer* m_mpvPlayer{nullptr}; + FFmpegMovPlayer* m_ffmpegMovPlayer{nullptr}; // tlRender Qt integration (observes player + keeps context ticking). // Stored as QSharedPointer so it can be shared with native viewport. @@ -393,6 +315,7 @@ private slots: // Cached frames for rendering (to avoid blocking calls on the UI thread). std::vector m_cachedVideoFrames; + FrameAcquisitionStats m_frameAcquisitionStats; // State mutable QMutex m_mutex; @@ -412,22 +335,8 @@ private slots: // Flag to defer playback until first frame is cached bool m_pendingPlay{false}; bool m_pendingReverse{false}; - - // OCIO state - bool m_ocioEnabled{false}; - QString m_ocioConfigPath; - QString m_inputColorspace; - QString m_display; - QString m_view; - QString m_look; - QStringList m_availableColorspaces; - QStringList m_availableDisplays; - mutable QMap m_availableViews; - QStringList m_availableLooks; - - // Display options (exposure, gamma, etc.) - float m_exposure{0.0f}; - float m_gamma{1.0f}; + bool m_manualReversePlaybackActive{false}; + double m_manualReverseStepAccumulatorMs{0.0}; // Update timer QTimer* m_updateTimer{nullptr}; diff --git a/native/qt6/src/media/tlrender_viewport.cpp b/native/qt6/src/media/tlrender_viewport.cpp index 89190622..2bf512fd 100644 --- a/native/qt6/src/media/tlrender_viewport.cpp +++ b/native/qt6/src/media/tlrender_viewport.cpp @@ -3,10 +3,18 @@ */ #include "tlrender_viewport.h" +#include "ffmpeg_mov_player.h" #include "tlrender_player.h" +#include "platform_session.h" #include +#include +#include #include #include +#include +#include +#include +#include #ifdef HAVE_TLRENDER #include @@ -17,40 +25,22 @@ TLRenderViewport::TLRenderViewport(QWidget* parent) : QWidget(parent) { + setFocusPolicy(Qt::StrongFocus); + // Create layout to hold the viewport m_layout = new QVBoxLayout(this); m_layout->setContentsMargins(0, 0, 0, 0); m_layout->setSpacing(0); + m_presentationTimer = new QTimer(this); + m_presentationTimer->setTimerType(Qt::PreciseTimer); + connect(m_presentationTimer, &QTimer::timeout, this, &TLRenderViewport::updateRasterFrame); + #ifdef HAVE_TLRENDER - // Get shared context from TLRenderPlayer - if (!TLRenderPlayer::isInitialized()) { - TLRenderPlayer::initialize(); - } - m_context = TLRenderPlayer::sharedContext(); - - if (m_context) { - // Create style for the viewport - m_style = ftk::Style::create(m_context); - - // Create native tlRender viewport - m_viewport = new tl::qtwidget::Viewport(m_context, m_style, this); - m_layout->addWidget(m_viewport); - m_viewport->installEventFilter(this); - m_viewport->setMouseTracking(true); - - // Enable frame view by default (fit video to window) - m_viewport->setFrameView(true); - - // Set dark background - tl::BackgroundOptions bgOptions; - bgOptions.type = tl::Background::Solid; - bgOptions.solidColor = ftk::Color4F(0.1f, 0.1f, 0.1f, 1.0f); - m_viewport->setBackgroundOptions(bgOptions); - - qDebug() << "[TLRenderViewport] Native tlRender viewport created"; - } else { - qWarning() << "[TLRenderViewport] No tlRender context available"; + if (PlatformSession::shouldUseRasterPreviewFallbackOnWayland()) { + setAttribute(Qt::WA_OpaquePaintEvent, true); + setAutoFillBackground(false); + installEventFilter(this); } #else qWarning() << "[TLRenderViewport] tlRender not available"; @@ -62,68 +52,373 @@ TLRenderViewport::~TLRenderViewport() // No cleanup needed - viewport and player objects are owned elsewhere } +void TLRenderViewport::prepareForMpvPlayback() +{ + return; +} + +void TLRenderViewport::ensureMpvViewport() +{ + if (m_mpvViewport) { + return; + } + + m_mpvViewport = new MpvViewport(this); + m_mpvViewport->hide(); + m_mpvViewport->setFocusPolicy(Qt::StrongFocus); + m_mpvViewport->installEventFilter(this); + m_layout->insertWidget(0, m_mpvViewport); + connect(m_mpvViewport, &MpvViewport::frameRendered, this, [this]() { + noteFrameRendered(); + }); +} + +void TLRenderViewport::ensureFfmpegMovViewport() +{ + if (m_ffmpegMovViewport) { + return; + } + + m_ffmpegMovViewport = new FFmpegMovViewport(this); + m_ffmpegMovViewport->hide(); + m_ffmpegMovViewport->setFocusPolicy(Qt::StrongFocus); + m_ffmpegMovViewport->installEventFilter(this); + m_layout->insertWidget(0, m_ffmpegMovViewport); + connect(m_ffmpegMovViewport, &FFmpegMovViewport::frameRendered, this, [this]() { + noteFrameRendered(); + }); +} + +void TLRenderViewport::noteFrameRendered() +{ + ++m_presentationRevision; + ++m_measuredFpsFrames; + if (!m_measuredFpsTimer.isValid()) { + m_measuredFpsTimer.start(); + } else { + const qint64 elapsed = m_measuredFpsTimer.elapsed(); + if (elapsed >= 500) { + m_measuredFps = (m_measuredFpsFrames * 1000.0) / qMax(1, elapsed); + emit fpsChanged(m_measuredFps); + m_measuredFpsFrames = 0; + m_measuredFpsTimer.restart(); + } + } + emit frameRendered(); +} + void TLRenderViewport::setPlayer(TLRenderPlayer* player) { // Disconnect from previous player if (m_player) { disconnect(m_player, nullptr, this, nullptr); + if (m_player->mpvPlayer()) { + disconnect(m_player->mpvPlayer(), nullptr, this, nullptr); + } } - + + if (m_presentationTimer) { + m_presentationTimer->stop(); + } + m_player = player; -#ifdef HAVE_TLRENDER - if (!m_viewport) { - qWarning() << "[TLRenderViewport] No viewport to set player on"; - return; + if (m_mpvViewport) { + m_mpvViewport->setPlayer(player ? player->mpvPlayer() : nullptr); + } + if (m_ffmpegMovViewport) { + m_ffmpegMovViewport->setPlayer(player ? player->ffmpegMovPlayer() : nullptr); } +#ifdef HAVE_TLRENDER if (player) { + if (auto* mpvPlayer = player->mpvPlayer()) { + connect(mpvPlayer, &MpvPlayer::viewportReadyChanged, this, [this](bool ready) { + syncBackendWidgetVisibility(); + syncPresentationTimer(); + if (ready && m_player && m_player->mpvPlayer() && m_player->mpvPlayer()->hasMedia()) { + prepareForMpvPlayback(); + } + }); + } // Connect to media loaded signal to setup viewport when player has content connect(player, &TLRenderPlayer::mediaInfoReady, this, &TLRenderViewport::onMediaLoaded); - - // Connect to OCIO changes - connect(player, &TLRenderPlayer::ocioOptionsChanged, this, [this]() { - if (m_viewport && m_player) { - m_viewport->setOCIOOptions(m_player->currentOCIOOptions()); - } + connect(player, &TLRenderPlayer::playbackStateChanged, this, [this](TLRenderPlayer::PlaybackState) { + syncPresentationTimer(); }); - // Connect to video frames changed (for exposure/gamma updates) connect(player, &TLRenderPlayer::videoFramesChanged, this, [this]() { - if (m_viewport && m_player) { - m_viewport->setDisplayOptions({m_player->currentDisplayOptions()}); + if (PlatformSession::shouldUseRasterPreviewFallbackOnWayland() && m_player) { + if (m_player->playbackState() != TLRenderPlayer::PlaybackState::Playing) { + updateRasterFrame(); + } } }); // If player already has media loaded, setup now - if (player->playerObject()) { + if (PlatformSession::shouldUseRasterPreviewFallbackOnWayland()) { + updateRasterFrame(); + syncPresentationTimer(); + } else if (player->playerObject()) { setupViewportPlayer(); - } else { + } else if (m_viewport) { // Clear viewport until media is loaded m_viewport->setPlayer(QSharedPointer()); qDebug() << "[TLRenderViewport] Player set, waiting for media load"; } - } else { + } else if (m_viewport) { m_viewport->setPlayer(QSharedPointer()); qDebug() << "[TLRenderViewport] Player cleared from viewport"; } #else Q_UNUSED(player) #endif + + syncBackendWidgetVisibility(); + if (useFfmpegMovViewport()) { + if (m_ffmpegMovViewport) { + m_ffmpegMovViewport->update(); + } + syncPresentationTimer(); + return; + } + if (useMpvViewport()) { + syncPresentationTimer(); + return; + } } void TLRenderViewport::onMediaLoaded(const TLRenderPlayer::MediaInfo& info) { - Q_UNUSED(info) + m_mediaFps = info.fps > 0.0 ? info.fps : 24.0; + syncBackendWidgetVisibility(); + if (useFfmpegMovViewport()) { + syncPresentationTimer(); + return; + } + if (useMpvViewport()) { + prepareForMpvPlayback(); + syncPresentationTimer(); + return; + } +#ifdef HAVE_TLRENDER + if (PlatformSession::shouldUseRasterPreviewFallbackOnWayland()) { + updateRasterFrame(); + syncPresentationTimer(); + } else { + qDebug() << "[TLRenderViewport] onMediaLoaded slot called, setting up viewport player"; + setupViewportPlayer(); + } +#endif +} + +void TLRenderViewport::syncBackendWidgetVisibility() +{ + const bool mpvActive = useMpvViewport(); + const bool ffmpegMovActive = useFfmpegMovViewport(); + if (mpvActive) { + ensureMpvViewport(); + m_mpvViewport->setPlayer(m_player ? m_player->mpvPlayer() : nullptr); + } + if (ffmpegMovActive) { + ensureFfmpegMovViewport(); + m_ffmpegMovViewport->setPlayer(m_player ? m_player->ffmpegMovPlayer() : nullptr); + } + if (m_mpvViewport) { + m_mpvViewport->setVisible(mpvActive); + } + if (m_ffmpegMovViewport) { + m_ffmpegMovViewport->setVisible(ffmpegMovActive); + } + if ((mpvActive || ffmpegMovActive) && m_presentationTimer) { + m_presentationTimer->stop(); + } +#ifdef HAVE_TLRENDER + if (m_viewport) { + m_viewport->setVisible(!mpvActive && !ffmpegMovActive); + } +#endif +} + +void TLRenderViewport::syncPresentationTimer() +{ + if (useFfmpegMovViewport()) { + if (m_presentationTimer) { + m_presentationTimer->stop(); + } + return; + } + if (useMpvViewport()) { + if (m_presentationTimer) { + m_presentationTimer->stop(); + } + return; + } +#ifdef HAVE_TLRENDER + if (!m_presentationTimer) { + return; + } + if (!m_player || !PlatformSession::shouldUseRasterPreviewFallbackOnWayland()) { + m_presentationTimer->stop(); + return; + } + if (m_player->mpvPlayer() && m_player->mpvPlayer()->hasMedia()) { + m_presentationTimer->stop(); + return; + } + if (m_player->playbackState() != TLRenderPlayer::PlaybackState::Playing) { + m_presentationTimer->stop(); + return; + } + + const double fps = m_mediaFps > 0.0 ? m_mediaFps : 24.0; + const int intervalMs = std::max(1, qRound(1000.0 / fps)); + if (m_presentationTimer->interval() != intervalMs) { + m_presentationTimer->setInterval(intervalMs); + } + if (!m_presentationTimer->isActive()) { + m_presentationTimer->start(); + } +#endif +} + +void TLRenderViewport::ensureViewport() +{ +#ifdef HAVE_TLRENDER + if (PlatformSession::shouldUseRasterPreviewFallbackOnWayland()) { + return; + } + if (m_viewport) { + return; + } + + if (!TLRenderPlayer::isInitialized()) { + TLRenderPlayer::initialize(); + } + m_context = TLRenderPlayer::sharedContext(); + if (!m_context) { + qWarning() << "[TLRenderViewport] No tlRender context available"; + return; + } + + if (!m_style) { + m_style = ftk::Style::create(m_context); + } + + m_viewport = new tl::qtwidget::Viewport(m_context, m_style, this); + m_layout->addWidget(m_viewport); + m_viewport->installEventFilter(this); + m_viewport->setMinimumSize(QSize(0, 0)); + m_viewport->setMouseTracking(true); + m_viewport->setFrameView(true); + + tl::BackgroundOptions bgOptions; + bgOptions.type = tl::Background::Solid; + bgOptions.solidColor = ftk::Color4F(0.1f, 0.1f, 0.1f, 1.0f); + m_viewport->setBackgroundOptions(bgOptions); + + qDebug() << "[TLRenderViewport] Native tlRender viewport created"; +#endif +} + +void TLRenderViewport::updateRasterFrame() +{ + if (useFfmpegMovViewport()) { + if (m_ffmpegMovViewport) { + m_ffmpegMovViewport->update(); + } + return; + } + if (useMpvViewport()) { + if (m_mpvViewport) { + m_mpvViewport->update(); + } + return; + } #ifdef HAVE_TLRENDER - qDebug() << "[TLRenderViewport] onMediaLoaded slot called, setting up viewport player"; - setupViewportPlayer(); + if (!m_player || !PlatformSession::shouldUseRasterPreviewFallbackOnWayland()) { + return; + } + if (m_player->mpvPlayer() && m_player->mpvPlayer()->hasMedia()) { + return; + } + + const QSize targetSize = size(); + QImage frame; + if (m_player->ffmpegMovPlayer() && m_player->ffmpegMovPlayer()->hasMedia()) { + frame = m_player->ffmpegMovPlayer()->currentFrameImage(targetSize); + } else { + frame = m_player->getCurrentFrame(targetSize); + } + if (frame.isNull()) { + return; + } + + m_rasterFrame = frame; + ++m_presentationRevision; + update(); + emit frameRendered(); #endif } +void TLRenderViewport::paintEvent(QPaintEvent* event) +{ + QWidget::paintEvent(event); + + if (!PlatformSession::shouldUseRasterPreviewFallbackOnWayland() || useFfmpegMovViewport() || useMpvViewport()) { + return; + } + + QPainter painter(this); + painter.fillRect(rect(), QColor(17, 17, 17)); + + if (m_rasterFrame.isNull()) { + return; + } + + const QRect targetRect = rasterImageRect(); + if (!targetRect.isValid() || targetRect.isEmpty()) { + return; + } + + painter.setRenderHint(QPainter::SmoothPixmapTransform, true); + painter.drawImage(targetRect, m_rasterFrame); +} + +QImage TLRenderViewport::currentRasterFrameForTest() +{ + if (useFfmpegMovViewport()) { + return m_ffmpegMovViewport ? m_ffmpegMovViewport->currentFrameForTest() : QImage(); + } + if (useMpvViewport()) { + return m_mpvViewport ? m_mpvViewport->currentFrameForTest() : QImage(); + } + return m_rasterFrame; +} + +QImage TLRenderViewport::currentPresentedFrameForTest() +{ + if (useFfmpegMovViewport()) { + return m_ffmpegMovViewport ? m_ffmpegMovViewport->currentFrameForTest() : QImage(); + } + if (useMpvViewport()) { + return m_mpvViewport ? m_mpvViewport->currentFrameForTest() : QImage(); + } +#ifdef HAVE_TLRENDER + if (PlatformSession::shouldUseRasterPreviewFallbackOnWayland()) { + return currentRasterFrameForTest(); + } + if (m_viewport) { + return m_viewport->grab().toImage(); + } +#endif + return {}; +} + void TLRenderViewport::setupViewportPlayer() { #ifdef HAVE_TLRENDER + ensureViewport(); qDebug() << "[TLRenderViewport] setupViewportPlayer called"; qDebug() << "[TLRenderViewport] m_viewport=" << m_viewport << "m_player=" << m_player; @@ -148,60 +443,122 @@ void TLRenderViewport::setupViewportPlayer() // Set the shared player on native viewport m_viewport->setPlayer(playerObj); - // Apply current OCIO options from player - m_viewport->setOCIOOptions(m_player->currentOCIOOptions()); - - // Apply current display options (exposure/gamma) from player - m_viewport->setDisplayOptions({m_player->currentDisplayOptions()}); - qDebug() << "[TLRenderViewport] Viewport player setup complete"; #endif } -void TLRenderViewport::setOCIOOptions(const QString& configPath, - const QString& inputColorSpace, - const QString& display, - const QString& view) +void TLRenderViewport::setFrameView(bool enabled) { + if (useFfmpegMovViewport()) { + if (m_ffmpegMovViewport) { + m_ffmpegMovViewport->setFrameView(enabled); + } + return; + } + if (useMpvViewport()) { + if (m_mpvViewport) { + m_mpvViewport->setFrameView(enabled); + } + return; + } #ifdef HAVE_TLRENDER - if (!m_viewport) return; - - tl::OCIOOptions options; - options.enabled = !configPath.isEmpty(); - options.fileName = configPath.toStdString(); - options.input = inputColorSpace.toStdString(); - options.display = display.toStdString(); - options.view = view.toStdString(); - - m_viewport->setOCIOOptions(options); - qDebug() << "[TLRenderViewport] OCIO options set:" - << "config=" << configPath - << "input=" << inputColorSpace - << "display=" << display - << "view=" << view; + if (PlatformSession::shouldUseRasterPreviewFallbackOnWayland()) { + if (enabled) { + m_waylandZoom = 1.0; + updateRasterFrame(); + } + return; + } + if (m_viewport) { + m_viewport->setFrameView(enabled); + } #else - Q_UNUSED(configPath) - Q_UNUSED(inputColorSpace) - Q_UNUSED(display) - Q_UNUSED(view) + Q_UNUSED(enabled) #endif } -void TLRenderViewport::setFrameView(bool enabled) +bool TLRenderViewport::frameViewEnabled() const { + if (useFfmpegMovViewport()) { + return m_ffmpegMovViewport ? m_ffmpegMovViewport->frameViewEnabled() : true; + } + if (useMpvViewport()) { + return m_mpvViewport ? m_mpvViewport->frameViewEnabled() : true; + } #ifdef HAVE_TLRENDER + if (PlatformSession::shouldUseRasterPreviewFallbackOnWayland()) { + return qFuzzyCompare(m_waylandZoom, 1.0); + } if (m_viewport) { - m_viewport->setFrameView(enabled); + return m_viewport->hasFrameView(); + } +#endif + return true; +} + +void TLRenderViewport::zoomRelative(double factor) +{ + if (useFfmpegMovViewport()) { + if (m_ffmpegMovViewport) { + m_ffmpegMovViewport->zoomRelative(factor); + } + return; + } + if (useMpvViewport()) { + if (m_mpvViewport) { + m_mpvViewport->zoomRelative(factor); + } + return; + } +#ifdef HAVE_TLRENDER + if (PlatformSession::shouldUseRasterPreviewFallbackOnWayland()) { + m_waylandZoom = qBound(0.1, m_waylandZoom * factor, 10.0); + update(); + return; + } + if (m_viewport) { + if (m_viewport->hasFrameView()) { + m_viewport->setFrameView(false); + } + const double zoom = qBound(0.1, m_viewport->zoom() * factor, 10.0); + m_viewport->setViewPosAndZoom(m_viewport->viewPos(), zoom); } #else - Q_UNUSED(enabled) + Q_UNUSED(factor) #endif } -double TLRenderViewport::fps() const +QRect TLRenderViewport::displayedContentRect() const { + if (useFfmpegMovViewport()) { + return m_ffmpegMovViewport ? m_ffmpegMovViewport->displayedContentRect() : rect(); + } + if (useMpvViewport()) { + return m_mpvViewport ? m_mpvViewport->displayedContentRect() : rect(); + } #ifdef HAVE_TLRENDER + if (PlatformSession::shouldUseRasterPreviewFallbackOnWayland()) { + return rasterImageRect(); + } if (m_viewport) { + return m_viewport->geometry(); + } +#endif + return rect(); +} + +double TLRenderViewport::fps() const +{ + if (useFfmpegMovViewport()) { + return m_measuredFps; + } + if (useMpvViewport()) { + return m_measuredFps; + } +#ifdef HAVE_TLRENDER + if (PlatformSession::shouldUseRasterPreviewFallbackOnWayland()) { + return m_measuredFps; + } else if (m_viewport) { return m_viewport->getFPS(); } #endif @@ -210,6 +567,12 @@ double TLRenderViewport::fps() const size_t TLRenderViewport::droppedFrames() const { + if (useFfmpegMovViewport()) { + return 0; + } + if (useMpvViewport()) { + return 0; + } #ifdef HAVE_TLRENDER if (m_viewport) { return m_viewport->getDroppedFrames(); @@ -221,36 +584,87 @@ size_t TLRenderViewport::droppedFrames() const void TLRenderViewport::resizeEvent(QResizeEvent* event) { QWidget::resizeEvent(event); - // The native viewport handles resize internally + if (useFfmpegMovViewport() && m_ffmpegMovViewport) { + m_ffmpegMovViewport->update(); + return; + } + if (useMpvViewport() && m_mpvViewport) { + m_mpvViewport->update(); + return; + } + if (PlatformSession::shouldUseRasterPreviewFallbackOnWayland()) { + updateRasterFrame(); + } +} + +QRect TLRenderViewport::rasterImageRect() const +{ + const QRect contents = contentsRect(); + if (m_rasterFrame.isNull()) { + return contents; + } + + QSize drawSize = m_rasterFrame.size().scaled(contents.size(), Qt::KeepAspectRatio); + if (!qFuzzyCompare(m_waylandZoom, 1.0)) { + drawSize = (drawSize * m_waylandZoom).boundedTo(contents.size() * 10); + } + + const QPoint topLeft( + contents.x() + (contents.width() - drawSize.width()) / 2, + contents.y() + (contents.height() - drawSize.height()) / 2); + return QRect(topLeft, drawSize); } bool TLRenderViewport::eventFilter(QObject* watched, QEvent* event) { + if (watched == m_ffmpegMovViewport || watched == m_mpvViewport) { + if (event->type() == QEvent::KeyPress || event->type() == QEvent::KeyRelease) { + if (QWidget* overlay = parentWidget()) { + QCoreApplication::sendEvent(overlay, event); + return true; + } + } + } #ifdef HAVE_TLRENDER - if (watched == m_viewport) { + if (watched == m_viewport || watched == this) { + if (event->type() == QEvent::KeyPress || event->type() == QEvent::KeyRelease) { + auto *keyEvent = static_cast(event); + if (QWidget *overlay = parentWidget()) { + QCoreApplication::sendEvent(overlay, keyEvent); + return true; + } + } if (event->type() == QEvent::MouseButtonPress) { QMouseEvent* mouseEvent = static_cast(event); if (mouseEvent->button() == Qt::RightButton) { m_isPanning = false; unsetCursor(); - m_viewport->setFrameView(true); + setFrameView(true); return true; } if (mouseEvent->button() == Qt::MiddleButton) { - if (m_viewport->hasFrameView()) { - m_viewport->setFrameView(false); + if (frameViewEnabled()) { + setFrameView(false); } m_isPanning = true; m_lastPanPos = mouseEvent->pos(); setCursor(Qt::ClosedHandCursor); return true; } + } else if (event->type() == QEvent::Wheel) { + QWheelEvent* wheelEvent = static_cast(event); + const double factor = wheelEvent->angleDelta().y() > 0 ? 1.15 : 0.85; + zoomRelative(factor); + return true; } else if (event->type() == QEvent::MouseMove) { QMouseEvent* mouseEvent = static_cast(event); if (m_isPanning && (mouseEvent->buttons() & Qt::MiddleButton)) { + if (PlatformSession::shouldUseRasterPreviewFallbackOnWayland()) { + return true; + } const QPoint delta = mouseEvent->pos() - m_lastPanPos; m_lastPanPos = mouseEvent->pos(); - const double zoom = m_viewport->viewZoom(); + const double zoom = m_viewport->zoom(); const double scale = zoom > 0.0 ? zoom : 1.0; const int dx = qRound(delta.x() / scale); const int dy = qRound(delta.y() / scale); @@ -271,3 +685,18 @@ bool TLRenderViewport::eventFilter(QObject* watched, QEvent* event) #endif return QWidget::eventFilter(watched, event); } + +bool TLRenderViewport::useFfmpegMovViewport() const +{ + if (PlatformSession::shouldUseRasterPreviewFallbackOnWayland()) { + return false; + } + return m_player + && m_player->ffmpegMovPlayer() + && m_player->ffmpegMovPlayer()->hasMedia(); +} + +bool TLRenderViewport::useMpvViewport() const +{ + return false; +} diff --git a/native/qt6/src/media/tlrender_viewport.h b/native/qt6/src/media/tlrender_viewport.h index e51f9216..8292b51e 100644 --- a/native/qt6/src/media/tlrender_viewport.h +++ b/native/qt6/src/media/tlrender_viewport.h @@ -4,7 +4,6 @@ * This uses tlRender's built-in qtwidget::Viewport which provides: * - Proper 5ms precision timer-driven rendering * - Internal player observation (no manual frame fetching) - * - Built-in OCIO/LUT color pipeline * - Efficient dirty-flag based redraws */ @@ -14,9 +13,16 @@ #include #include #include -#include +#include +#include +#include +#include +#include +#include "ffmpeg_mov_viewport.h" #include "tlrender_player.h" +#include "mpv_viewport.h" + #ifdef HAVE_TLRENDER #include @@ -29,7 +35,7 @@ * @brief Qt wrapper around tlRender's native viewport * * This thin wrapper embeds tlRender's qtwidget::Viewport which handles - * all rendering internally with proper timing and OCIO support. + * all rendering internally with proper timing. */ class TLRenderViewport : public QWidget { @@ -39,6 +45,8 @@ class TLRenderViewport : public QWidget explicit TLRenderViewport(QWidget* parent = nullptr); ~TLRenderViewport(); + void prepareForMpvPlayback(); + /** * @brief Set the player to render * Creates a PlayerObject wrapper for the native viewport @@ -46,18 +54,13 @@ class TLRenderViewport : public QWidget void setPlayer(TLRenderPlayer* player); TLRenderPlayer* player() const { return m_player; } - /** - * @brief Set OCIO options on the viewport - */ - void setOCIOOptions(const QString& configPath, - const QString& inputColorSpace, - const QString& display, - const QString& view); - /** * @brief Enable/disable frame view (fit to window) */ void setFrameView(bool enabled); + bool frameViewEnabled() const; + void zoomRelative(double factor); + QRect displayedContentRect() const; /** * @brief Get the native viewport for advanced access @@ -76,32 +79,60 @@ class TLRenderViewport : public QWidget */ size_t droppedFrames() const; + /** + * @brief Test-only access to the last raster-presented frame. + */ + QImage currentRasterFrameForTest(); + QImage currentPresentedFrameForTest(); + qint64 rasterPresentationRevisionForTest() const { return m_presentationRevision; } + signals: void fpsChanged(double fps); void frameRendered(); protected: + void paintEvent(QPaintEvent* event) override; void resizeEvent(QResizeEvent* event) override; bool eventFilter(QObject* watched, QEvent* event) override; private slots: void onMediaLoaded(const TLRenderPlayer::MediaInfo& info); + void updateRasterFrame(); private: + void noteFrameRendered(); + void ensureMpvViewport(); + void ensureFfmpegMovViewport(); + void ensureViewport(); void setupViewportPlayer(); - + void syncPresentationTimer(); + void syncBackendWidgetVisibility(); + QRect rasterImageRect() const; + bool useFfmpegMovViewport() const; + bool useMpvViewport() const; + + QVBoxLayout* m_layout{nullptr}; TLRenderPlayer* m_player{nullptr}; + MpvViewport* m_mpvViewport{nullptr}; + FFmpegMovViewport* m_ffmpegMovViewport{nullptr}; #ifdef HAVE_TLRENDER std::shared_ptr m_context; std::shared_ptr m_style; tl::qtwidget::Viewport* m_viewport{nullptr}; #endif + QTimer* m_presentationTimer = nullptr; + QImage m_rasterFrame; - QVBoxLayout* m_layout{nullptr}; bool m_isPanning{false}; QPoint m_lastPanPos; + double m_waylandZoom{1.0}; + qint64 m_presentationRevision{0}; + double m_mediaFps{24.0}; + QElapsedTimer m_measuredFpsTimer; + int m_measuredFpsFrames{0}; + double m_measuredFps{0.0}; }; #endif // TLRENDER_VIEWPORT_H diff --git a/native/qt6/src/media/tlrender_widget.cpp b/native/qt6/src/media/tlrender_widget.cpp index 515a84f4..a4570ad6 100644 --- a/native/qt6/src/media/tlrender_widget.cpp +++ b/native/qt6/src/media/tlrender_widget.cpp @@ -241,9 +241,6 @@ void TLRenderWidget::paintGL() // Begin render m_render->begin(renderSize); - // Apply OCIO options to renderer - m_render->setOCIOOptions(m_player->currentOCIOOptions()); - // Calculate video box ftk::Box2I videoBox( static_cast(m_videoRect.x() * devicePixelRatio()), diff --git a/native/qt6/src/media_convert_dialog.cpp b/native/qt6/src/media_convert_dialog.cpp index 1e32aad8..d386c95c 100644 --- a/native/qt6/src/media_convert_dialog.cpp +++ b/native/qt6/src/media_convert_dialog.cpp @@ -8,6 +8,7 @@ #include #include #include +#include #include "sequence_detector.h" @@ -15,6 +16,43 @@ static QString extOf(const QString& path){ return QFileInfo(path).suffix().toLower(); } +namespace { + +QString toolSourceLabel(ConverterToolSource source) +{ + switch (source) { + case ConverterToolSource::BundledRuntime: return QStringLiteral("bundled runtime"); + case ConverterToolSource::BundledDevCheckout: return QStringLiteral("bundled dev checkout"); + case ConverterToolSource::EnvOverride: return QStringLiteral("environment override"); + case ConverterToolSource::PathFallback: return QStringLiteral("PATH fallback"); + case ConverterToolSource::Missing: return QStringLiteral("missing"); + } + + return QStringLiteral("unknown"); +} + +QString describeResolutionStatus(const QString& label, const ConverterToolResolution& resolution, const QString& unavailable) +{ + if (resolution.source == ConverterToolSource::Missing || resolution.resolvedPath.isEmpty()) { + return unavailable; + } + + const QString suffix = resolution.isFallback() ? QStringLiteral(" (plain program name)") : QString(); + return QStringLiteral("%1: %2 — %3%4") + .arg(label, toolSourceLabel(resolution.source), resolution.resolvedPath, suffix); +} + +bool requireBundledConverters() +{ +#ifdef Q_OS_LINUX + return qEnvironmentVariableIntValue("KASSETMANAGER_REQUIRE_BUNDLED_CONVERTERS") == 1; +#else + return false; +#endif +} + +} + MediaConvertDialog::MediaConvertDialog(const QStringList& sourcePaths, QWidget* parent) : QDialog(parent), m_sources(sourcePaths) { @@ -26,12 +64,20 @@ MediaConvertDialog::MediaConvertDialog(const QStringList& sourcePaths, QWidget* buildUi(); loadSettings(); - m_ffmpeg = locateFfmpeg(); - m_magick = locateMagick(); + m_ffmpegResolution = locateFfmpeg(); + m_magickResolution = locateMagick(); + QStringList notices; - if (m_ffmpeg.isEmpty()) notices << "FFmpeg not found (video/sequence conversions unavailable)"; - if (m_magick.isEmpty()) notices << "ImageMagick not found (single-image conversions unavailable)"; - if (!notices.isEmpty()) m_status->setText(notices.join(" · ")); + notices << describeResolutionStatus(QStringLiteral("FFmpeg"), + m_ffmpegResolution, + QStringLiteral("FFmpeg not found (video/sequence conversions unavailable)")); + notices << describeResolutionStatus(QStringLiteral("ImageMagick"), + m_magickResolution, + QStringLiteral("ImageMagick not found (single-image conversions unavailable)")); + if (requireBundledConverters()) { + notices << QStringLiteral("Strict bundled converter verification enabled"); + } + m_status->setText(notices.join(QStringLiteral(" · "))); } MediaConvertDialog::~MediaConvertDialog() @@ -67,6 +113,9 @@ void MediaConvertDialog::buildUi() m_verifyBtn->setToolTip("Verify sequence (full directory scan)"); { QStringList paths = { + QCoreApplication::applicationDirPath() + "/Icons/Verify.png", + QCoreApplication::applicationDirPath() + "/../Icons/Verify.png", + QCoreApplication::applicationDirPath() + "/../../Icons/Verify.png", QCoreApplication::applicationDirPath() + "/icons/Verify.png", QCoreApplication::applicationDirPath() + "/../icons/Verify.png", QCoreApplication::applicationDirPath() + "/../../icons/Verify.png", @@ -271,7 +320,7 @@ void MediaConvertDialog::loadSettings() } if (outToSet.isEmpty()) { const QString last = s.value("MediaConvert/OutputDir").toString(); - outToSet = last.isEmpty() ? QDir::homePath() : last; + outToSet = last.isEmpty() ? (QCoreApplication::applicationDirPath() + QStringLiteral("/data/exports")) : last; } m_outputDir->setText(outToSet); m_scaleW->setValue(s.value("MediaConvert/ScaleW", 0).toInt()); @@ -295,66 +344,15 @@ void MediaConvertDialog::saveSettings() if (m_movFps) s.setValue("MediaConvert/MOV/Fps", m_movFps->value()); } -QString MediaConvertDialog::locateFfmpeg() const +ConverterToolResolution MediaConvertDialog::locateFfmpeg() const { - // 1) Next to app - QString d = QCoreApplication::applicationDirPath(); -#ifdef Q_OS_WIN - QString cand = QDir(d).filePath("ffmpeg.exe"); if (QFileInfo::exists(cand)) return cand; -#endif - // 2) third_party - cand = QDir(QCoreApplication::applicationDirPath()).filePath("../../third_party/ffmpeg/bin/ffmpeg.exe"); - if (QFileInfo::exists(cand)) return QFileInfo(cand).absoluteFilePath(); - // 3) FFMPEG_ROOT - QString env = qEnvironmentVariable("FFMPEG_ROOT"); - if (!env.isEmpty()) { - cand = QDir(env).filePath("bin/ffmpeg.exe"); if (QFileInfo::exists(cand)) return QFileInfo(cand).absoluteFilePath(); - } - // 4) PATH - return "ffmpeg"; - + return resolveFfmpegTool(QCoreApplication::applicationDirPath()); } -QString MediaConvertDialog::locateMagick() const +ConverterToolResolution MediaConvertDialog::locateMagick() const { - // 1) Next to app - QString d = QCoreApplication::applicationDirPath(); -#ifdef Q_OS_WIN - QString cand = QDir(d).filePath("magick.exe"); if (QFileInfo::exists(cand)) return cand; -#endif - // 2) third_party common layouts (dev checkout) - { - const QString tp = QDir(QCoreApplication::applicationDirPath()).filePath("../../third_party"); - // a) third_party/imagemagick/bin - QString p1 = QDir(tp).filePath("imagemagick/bin/magick.exe"); - if (QFileInfo::exists(p1)) return QFileInfo(p1).absoluteFilePath(); - // b) third_party/ImageMagick-*/magick.exe or .../bin/magick.exe - QDir tpd(tp); - if (tpd.exists()) { - const QStringList dirs = tpd.entryList(QStringList() << "ImageMagick*", QDir::Dirs | QDir::NoDotAndDotDot); - for (const QString& dn : dirs) { - QString root = tpd.filePath(dn); - QString pRoot = QDir(root).filePath("magick.exe"); if (QFileInfo::exists(pRoot)) return QFileInfo(pRoot).absoluteFilePath(); - QString pBin = QDir(root).filePath("bin/magick.exe"); if (QFileInfo::exists(pBin)) return QFileInfo(pBin).absoluteFilePath(); - } - } - } - // 3) Environment variables (MAGICK_ROOT / IMAGEMAGICK_ROOT) - { - QString env = qEnvironmentVariable("MAGICK_ROOT"); - if (!env.isEmpty()) { - QString pRoot = QDir(env).filePath("magick.exe"); if (QFileInfo::exists(pRoot)) return QFileInfo(pRoot).absoluteFilePath(); - QString pBin = QDir(env).filePath("bin/magick.exe"); if (QFileInfo::exists(pBin)) return QFileInfo(pBin).absoluteFilePath(); - } - QString env2 = qEnvironmentVariable("IMAGEMAGICK_ROOT"); - if (!env2.isEmpty()) { - QString pRoot = QDir(env2).filePath("magick.exe"); if (QFileInfo::exists(pRoot)) return QFileInfo(pRoot).absoluteFilePath(); - QString pBin = QDir(env2).filePath("bin/magick.exe"); if (QFileInfo::exists(pBin)) return QFileInfo(pBin).absoluteFilePath(); - } - } - // 4) PATH - return "magick"; + return resolveMagickTool(QCoreApplication::applicationDirPath()); } @@ -404,16 +402,34 @@ bool MediaConvertDialog::validateAndBuildTasks(QVector(targetData); // Validate external tool availability for the selected target - if ((target == MediaConverterWorker::TargetKind::VideoMP4 || target == MediaConverterWorker::TargetKind::VideoMOV || - target == MediaConverterWorker::TargetKind::JpgSequence || target == MediaConverterWorker::TargetKind::PngSequence || - target == MediaConverterWorker::TargetKind::TifSequence) && m_ffmpeg.isEmpty()) { + const bool usesFfmpeg = + target == MediaConverterWorker::TargetKind::VideoMP4 || target == MediaConverterWorker::TargetKind::VideoMOV || + target == MediaConverterWorker::TargetKind::JpgSequence || target == MediaConverterWorker::TargetKind::PngSequence || + target == MediaConverterWorker::TargetKind::TifSequence; + const bool usesMagick = + target == MediaConverterWorker::TargetKind::ImageJpg || target == MediaConverterWorker::TargetKind::ImagePng || + target == MediaConverterWorker::TargetKind::ImageTif; + + if (usesFfmpeg && m_ffmpegResolution.resolvedPath.isEmpty()) { error = "FFmpeg not found. Install it or set FFMPEG_ROOT to convert videos/sequences."; return false; } - if ((target == MediaConverterWorker::TargetKind::ImageJpg || target == MediaConverterWorker::TargetKind::ImagePng || - target == MediaConverterWorker::TargetKind::ImageTif) && m_magick.isEmpty()) { + if (usesMagick && m_magickResolution.resolvedPath.isEmpty()) { error = "ImageMagick (magick) not found. Bundle it in third_party or set MAGICK_ROOT to convert single images."; return false; } + if (requireBundledConverters()) { + if (usesFfmpeg && m_ffmpegResolution.isFallback()) { + error = QStringLiteral("Strict bundled verification is enabled, but FFmpeg resolved via PATH fallback (%1). Bundle ffmpeg/ffprobe next to the app or set FFMPEG_ROOT.") + .arg(m_ffmpegResolution.resolvedPath); + return false; + } + if (usesMagick && m_magickResolution.isFallback()) { + error = QStringLiteral("Strict bundled verification is enabled, but ImageMagick resolved via PATH fallback (%1). Bundle magick next to the app or set MAGICK_ROOT/IMAGEMAGICK_ROOT.") + .arg(m_magickResolution.resolvedPath); + return false; + } + } + int W = m_scaleW->value(); int H = m_scaleH->value(); if (m_lockAspect->isChecked()) { if (W > 0 && H > 0) H = 0; // keep width, infer height to preserve AR @@ -484,15 +500,19 @@ void MediaConvertDialog::onStart() if (!m_thread.isRunning()) m_thread.start(QThread::LowPriority); - m_worker->setFfmpegPath(m_ffmpeg); - m_worker->setMagickPath(m_magick); + m_worker->setFfmpegPath(m_ffmpegResolution.resolvedPath); + m_worker->setMagickPath(m_magickResolution.resolvedPath); // invoke start on worker's thread QMetaObject::invokeMethod(m_worker, [this, tasks](){ m_worker->start(tasks); }, Qt::QueuedConnection); m_running = true; m_startBtn->setEnabled(false); m_cancelBtn->setEnabled(true); - m_status->setText("Starting..."); + QStringList startStatus; + startStatus << QStringLiteral("Starting..."); + startStatus << describeResolutionStatus(QStringLiteral("FFmpeg"), m_ffmpegResolution, QStringLiteral("FFmpeg unavailable")); + startStatus << describeResolutionStatus(QStringLiteral("ImageMagick"), m_magickResolution, QStringLiteral("ImageMagick unavailable")); + m_status->setText(startStatus.join(QStringLiteral(" · "))); } @@ -625,4 +645,3 @@ void MediaConvertDialog::onVerifySequence() } m_status->setText("Verify: no image sequence in selection"); } - diff --git a/native/qt6/src/media_convert_dialog.h b/native/qt6/src/media_convert_dialog.h index af336938..6a3b1737 100644 --- a/native/qt6/src/media_convert_dialog.h +++ b/native/qt6/src/media_convert_dialog.h @@ -15,6 +15,7 @@ #include #include +#include "converter_tool_resolver.h" #include "media_converter_worker.h" class MediaConvertDialog : public QDialog { @@ -43,8 +44,8 @@ private slots: void buildUi(); void loadSettings(); void saveSettings(); - QString locateFfmpeg() const; - QString locateMagick() const; + ConverterToolResolution locateFfmpeg() const; + ConverterToolResolution locateMagick() const; bool validateAndBuildTasks(QVector& outTasks, QString& error); static bool isVideoExt(const QString& ext); @@ -93,9 +94,8 @@ private slots: // Worker QThread m_thread; MediaConverterWorker* m_worker = nullptr; - QString m_ffmpeg; - QString m_magick; + ConverterToolResolution m_ffmpegResolution; + ConverterToolResolution m_magickResolution; int m_total = 0; bool m_running = false; }; - diff --git a/native/qt6/src/media_converter_worker.cpp b/native/qt6/src/media_converter_worker.cpp index 31ca82e6..15196c79 100644 --- a/native/qt6/src/media_converter_worker.cpp +++ b/native/qt6/src/media_converter_worker.cpp @@ -1,10 +1,10 @@ #include "media_converter_worker.h" +#include "converter_tool_resolver.h" #include "utils.h" #include #include #include -#include #include #include #include @@ -205,9 +205,7 @@ QString MediaConverterWorker::uniqueOutPath(const QString& basePath) bool MediaConverterWorker::probeDurationMs(const QString& ffmpeg, const QString& input, qint64& durMs, int& w, int& h, QString& err) { durMs = 0; w = 0; h = 0; - // Use ffprobe next to ffmpeg if possible - QString ffprobe = QFileInfo(ffmpeg).dir().filePath("ffprobe.exe"); - if (!QFileInfo::exists(ffprobe)) ffprobe = "ffprobe"; // try PATH + const QString ffprobe = resolveFfprobeForFfmpeg(ffmpeg); QProcess p; QStringList a; a << "-v" << "error" << "-select_streams" << "v:0" << "-show_entries" << "stream=width,height" << "-of" << "default=nw=1:nk=1" << input; @@ -229,11 +227,15 @@ bool MediaConverterWorker::probeDurationMs(const QString& ffmpeg, const QString& return true; } +QString MediaConverterWorker::resolveFfprobeForFfmpeg(const QString& ffmpegPath) +{ + return resolveSiblingFfprobePath(ffmpegPath); +} + double MediaConverterWorker::probeAvgFps(const QString& ffmpeg, const QString& input) { // Use ffprobe to fetch avg_frame_rate as a rational (e.g., 30000/1001) - QString ffprobe = QFileInfo(ffmpeg).dir().filePath("ffprobe.exe"); - if (!QFileInfo::exists(ffprobe)) ffprobe = "ffprobe"; + const QString ffprobe = resolveFfprobeForFfmpeg(ffmpeg); QProcess p; QStringList a; a << "-v" << "error" << "-select_streams" << "v:0" << "-show_entries" << "stream=avg_frame_rate" << "-of" << "default=nw=1:nk=1" << input; p.start(ffprobe, a); p.waitForFinished(5000); @@ -457,8 +459,7 @@ bool MediaConverterWorker::buildCommand(const Task& t, QString& program, QString // Determine if we should preserve alpha and set appropriate pixel format auto ffprobeHasAlpha = [&](const QString& inputPath)->bool { - QString ffprobe = QFileInfo(m_ffmpegPath).dir().filePath("ffprobe.exe"); - if (!QFileInfo::exists(ffprobe)) ffprobe = "ffprobe"; + const QString ffprobe = resolveFfprobeForFfmpeg(m_ffmpegPath); QProcess p; QStringList a; a << "-v" << "error" << "-select_streams" << "v:0" << "-show_entries" << "stream=pix_fmt" << "-of" << "default=nw=1:nk=1" << inputPath; p.start(ffprobe, a); p.waitForFinished(4000); @@ -518,5 +519,3 @@ bool MediaConverterWorker::buildCommand(const Task& t, QString& program, QString args << safePath(outPath); return true; } - - diff --git a/native/qt6/src/media_converter_worker.h b/native/qt6/src/media_converter_worker.h index 04a823a8..bd381f6b 100644 --- a/native/qt6/src/media_converter_worker.h +++ b/native/qt6/src/media_converter_worker.h @@ -84,6 +84,7 @@ private slots: // Build external command (ffmpeg or ImageMagick) and compute output path for given task bool buildCommand(const Task& t, QString& program, QString& outPath, QStringList& args, qint64& estDurationMs, QString& err) const; static bool probeDurationMs(const QString& ffmpeg, const QString& input, qint64& durMs, int& width, int& height, QString& err); + static QString resolveFfprobeForFfmpeg(const QString& ffmpegPath); static QString uniqueOutPath(const QString& basePath); static QString scaleFilterFor(const Task& t, bool isVideo); static double probeAvgFps(const QString& ffmpeg, const QString& input); @@ -105,4 +106,3 @@ private slots: qint64 m_estTotalFrames = 0; QElapsedTimer m_timer; }; - diff --git a/native/qt6/src/oiio_image_loader.cpp b/native/qt6/src/oiio_image_loader.cpp index 8b68427f..c72113a5 100644 --- a/native/qt6/src/oiio_image_loader.cpp +++ b/native/qt6/src/oiio_image_loader.cpp @@ -1,6 +1,6 @@ #include "oiio_image_loader.h" +#include "image_memory_limits.h" #include -#include #include @@ -41,7 +41,7 @@ bool OIIOImageLoader::isOIIOSupported(const QString& filePath) { #endif } -QImage OIIOImageLoader::loadImage(const QString& filePath, int maxWidth, int maxHeight, ColorSpace colorSpace) { +QImage OIIOImageLoader::loadImage(const QString& filePath, int maxWidth, int maxHeight) { #if defined(HAVE_OPENIMAGEIO) && HAVE_OPENIMAGEIO // Wrap entire OIIO operation in try-catch to prevent crashes from corrupted files // or OIIO internal errors from propagating and terminating the application @@ -75,10 +75,8 @@ QImage OIIOImageLoader::loadImage(const QString& filePath, int maxWidth, int max return QImage(); } - // Sanity check for extremely large images that could cause memory issues - constexpr qint64 kMaxPixels = 100000000; // 100 megapixels - if (static_cast(width) * height > kMaxPixels) { - qWarning() << "[OIIOImageLoader] Image too large:" << width << "x" << height; + if (!ImageMemoryLimits::isImageWithinMemoryLimit(width, height, qMax(channels, 4), 2)) { + qWarning() << "[OIIOImageLoader] Image exceeds configured memory limit:" << width << "x" << height; return QImage(); } @@ -103,7 +101,7 @@ QImage OIIOImageLoader::loadImage(const QString& filePath, int maxWidth, int max // Resize if needed if (needsResize) { ImageBuf resized; - if (!ImageBufAlgo::resize(resized, buf, "", 0, ROI(0, targetWidth, 0, targetHeight))) { + if (!ImageBufAlgo::resize(resized, buf, ImageBufAlgo::KWArgs{}, ROI(0, targetWidth, 0, targetHeight))) { qWarning() << "[OIIOImageLoader] Failed to resize image"; return QImage(); } @@ -134,53 +132,13 @@ QImage OIIOImageLoader::loadImage(const QString& filePath, int maxWidth, int max buf = std::move(converted); } - // Check if this is truly an HDR image by file extension - // Don't just check format type, as OIIO may load regular images as float for processing - QFileInfo fileInfo(filePath); - QString ext = fileInfo.suffix().toLower(); - QStringList hdrFormats = {"exr", "hdr", "pfm", "pic"}; - bool isHDR = hdrFormats.contains(ext); - - if (isHDR) { - QString colorSpaceName; - switch (colorSpace) { - case ColorSpace::Linear: colorSpaceName = "Linear"; break; - case ColorSpace::sRGB: colorSpaceName = "sRGB"; break; - case ColorSpace::Rec709: colorSpaceName = "Rec.709"; break; - } - qDebug() << "[OIIOImageLoader] HDR image detected, applying tone mapping with" << colorSpaceName << "color space"; - - // Get float data - std::vector pixels(width * height * targetChannels); - if (!buf.get_pixels(ROI(0, width, 0, height), TypeDesc::FLOAT, pixels.data())) { - QString errorMsg = QString::fromStdString(buf.geterror()); - qWarning() << "[OIIOImageLoader] Failed to get HDR pixel data:" << errorMsg; - return QImage(); - } - - qDebug() << "[OIIOImageLoader] Successfully extracted HDR pixel data, applying tone mapping..."; - - // Apply tone mapping with color space transform - QImage result = toneMapHDR(pixels.data(), width, height, targetChannels, colorSpace); - if (result.isNull()) { - qWarning() << "[OIIOImageLoader] Tone mapping failed to produce valid image"; - return QImage(); - } - - qDebug() << "[OIIOImageLoader] HDR tone mapping complete, image size:" << result.width() << "x" << result.height(); - return result; - } else { - // Convert to 8-bit directly - qDebug() << "[OIIOImageLoader] LDR image, converting to 8-bit"; - std::vector pixels(width * height * targetChannels); if (!buf.get_pixels(ROI(0, width, 0, height), TypeDesc::UINT8, pixels.data())) { QString errorMsg = QString::fromStdString(buf.geterror()); - qWarning() << "[OIIOImageLoader] Failed to get LDR pixel data:" << errorMsg; + qWarning() << "[OIIOImageLoader] Failed to get image pixel data:" << errorMsg; return QImage(); } - // Create QImage QImage::Format format = (targetChannels == 4) ? QImage::Format_RGBA8888 : QImage::Format_RGB888; QImage image(width, height, format); @@ -189,9 +147,8 @@ QImage OIIOImageLoader::loadImage(const QString& filePath, int maxWidth, int max memcpy(scanline, &pixels[y * width * targetChannels], width * targetChannels); } - qDebug() << "[OIIOImageLoader] Successfully loaded LDR image"; + qDebug() << "[OIIOImageLoader] Successfully loaded image"; return image; - } } catch (const std::exception& e) { qWarning() << "[OIIOImageLoader] Exception loading image" << filePath << ":" << e.what(); return QImage(); @@ -207,132 +164,3 @@ QImage OIIOImageLoader::loadImage(const QString& filePath, int maxWidth, int max return QImage(); // Return null image #endif } - -QImage OIIOImageLoader::toneMapHDR(const float* data, int width, int height, int channels, ColorSpace colorSpace, float exposure) { -#if defined(HAVE_OPENIMAGEIO) && HAVE_OPENIMAGEIO - if (!data || width <= 0 || height <= 0 || channels < 1) { - qWarning() << "[OIIOImageLoader] Invalid tone mapping parameters: width=" << width << "height=" << height << "channels=" << channels; - return QImage(); - } - - QString colorSpaceName; - switch (colorSpace) { - case ColorSpace::Linear: colorSpaceName = "Linear"; break; - case ColorSpace::sRGB: colorSpaceName = "sRGB"; break; - case ColorSpace::Rec709: colorSpaceName = "Rec.709"; break; - } - qDebug() << "[OIIOImageLoader] Tone mapping HDR image:" << width << "x" << height << "to" << colorSpaceName; - - QImage::Format format = (channels == 4) ? QImage::Format_RGBA8888 : QImage::Format_RGB888; - QImage image(width, height, format); - - if (image.isNull()) { - qWarning() << "[OIIOImageLoader] Failed to allocate QImage for tone mapping"; - return QImage(); - } - - float exposureScale = std::pow(2.0f, exposure); - - for (int y = 0; y < height; ++y) { - uint8_t* scanline = image.scanLine(y); - - for (int x = 0; x < width; ++x) { - int srcIdx = (y * width + x) * channels; - int dstIdx = x * channels; - - // Apply exposure and tone mapping to RGB channels - for (int c = 0; c < 3; ++c) { - // For grayscale images (1 channel), replicate the value to all RGB channels - int srcChannel = (channels == 1) ? 0 : c; - float value = data[srcIdx + srcChannel] * exposureScale; - - // Apply tone mapping (Reinhard) - value = reinhardToneMap(value); - - // Apply color space transform - switch (colorSpace) { - case ColorSpace::Linear: - // No gamma correction, just clamp - value = clamp(value, 0.0f, 1.0f); - break; - case ColorSpace::sRGB: - // Apply sRGB gamma curve - value = linearToSRGB(value); - break; - case ColorSpace::Rec709: - // Apply Rec.709 gamma curve - value = linearToRec709(value); - break; - } - - scanline[dstIdx + c] = uint8_t(value * 255.0f); - } - - // Copy alpha channel if present - if (channels == 4) { - float alpha = clamp(data[srcIdx + 3], 0.0f, 1.0f); - scanline[dstIdx + 3] = uint8_t(alpha * 255.0f); - } - } - } - - qDebug() << "[OIIOImageLoader] Tone mapping complete, result valid:" << !image.isNull(); - return image; -#else - Q_UNUSED(data); - Q_UNUSED(width); - Q_UNUSED(height); - Q_UNUSED(channels); - Q_UNUSED(colorSpace); - Q_UNUSED(exposure); - qWarning() << "[OIIOImageLoader] OpenImageIO not available"; - return QImage(); // Return null image -#endif -} - -float OIIOImageLoader::reinhardToneMap(float value) { -#if defined(HAVE_OPENIMAGEIO) && HAVE_OPENIMAGEIO - // Simple Reinhard tone mapping: x / (1 + x) - return value / (1.0f + value); -#else - Q_UNUSED(value); - return 0.0f; -#endif -} - -float OIIOImageLoader::linearToSRGB(float value) { -#if defined(HAVE_OPENIMAGEIO) && HAVE_OPENIMAGEIO - // sRGB gamma curve - value = clamp(value, 0.0f, 1.0f); - if (value <= 0.0031308f) { - return 12.92f * value; - } else { - return 1.055f * std::pow(value, 1.0f / 2.4f) - 0.055f; - } -#else - Q_UNUSED(value); - return 0.0f; -#endif -} - -float OIIOImageLoader::linearToRec709(float value) { -#if defined(HAVE_OPENIMAGEIO) && HAVE_OPENIMAGEIO - // Rec.709 gamma curve (similar to sRGB but slightly different) - value = clamp(value, 0.0f, 1.0f); - if (value < 0.018f) { - return 4.5f * value; - } else { - return 1.099f * std::pow(value, 0.45f) - 0.099f; - } -#else - Q_UNUSED(value); - return 0.0f; -#endif -} - -float OIIOImageLoader::clamp(float value, float min, float max) { - if (value < min) return min; - if (value > max) return max; - return value; -} - diff --git a/native/qt6/src/oiio_image_loader.h b/native/qt6/src/oiio_image_loader.h index 34f4a951..11affe6c 100644 --- a/native/qt6/src/oiio_image_loader.h +++ b/native/qt6/src/oiio_image_loader.h @@ -9,21 +9,16 @@ */ class OIIOImageLoader { public: - enum class ColorSpace { - Linear, - sRGB, - Rec709 - }; - /** * Load an image using OpenImageIO * @param filePath Path to the image file * @param maxWidth Maximum width for the loaded image (for thumbnails) * @param maxHeight Maximum height for the loaded image (for thumbnails) - * @param colorSpace Color space for HDR display transform (default: sRGB) * @return QImage containing the loaded image, or null QImage on failure */ - static QImage loadImage(const QString& filePath, int maxWidth = 0, int maxHeight = 0, ColorSpace colorSpace = ColorSpace::sRGB); + static QImage loadImage(const QString& filePath, + int maxWidth = 0, + int maxHeight = 0); /** * Check if a file format is supported by OIIO @@ -32,37 +27,4 @@ class OIIOImageLoader { */ static bool isOIIOSupported(const QString& filePath); - /** - * Apply tone mapping to HDR image data with color space transform - * @param data Float image data (RGB or RGBA) - * @param width Image width - * @param height Image height - * @param channels Number of channels (3 or 4) - * @param colorSpace Target color space - * @param exposure Exposure adjustment (default 0.0) - * @return QImage with tone-mapped 8-bit data - */ - static QImage toneMapHDR(const float* data, int width, int height, int channels, ColorSpace colorSpace = ColorSpace::sRGB, float exposure = 0.0f); - -private: - /** - * Simple Reinhard tone mapping operator - */ - static float reinhardToneMap(float value); - - /** - * Apply sRGB gamma curve - */ - static float linearToSRGB(float value); - - /** - * Apply Rec.709 gamma curve - */ - static float linearToRec709(float value); - - /** - * Clamp value to [0, 1] range - */ - static float clamp(float value, float min = 0.0f, float max = 1.0f); }; - diff --git a/native/qt6/src/platform_session.h b/native/qt6/src/platform_session.h new file mode 100644 index 00000000..02385b6c --- /dev/null +++ b/native/qt6/src/platform_session.h @@ -0,0 +1,43 @@ +#pragma once + +#include + +namespace PlatformSession { + +inline bool isWayland(const QString &platformName, const QString &sessionType) +{ +#if defined(Q_OS_LINUX) + return platformName.startsWith(QStringLiteral("wayland"), Qt::CaseInsensitive) || + sessionType.compare(QStringLiteral("wayland"), Qt::CaseInsensitive) == 0; +#else + Q_UNUSED(platformName); + Q_UNUSED(sessionType); + return false; +#endif +} + +inline bool isWayland() +{ +#if defined(Q_OS_LINUX) + return isWayland(qEnvironmentVariable("QT_QPA_PLATFORM"), qEnvironmentVariable("XDG_SESSION_TYPE")); +#else + return false; +#endif +} + +inline bool shouldForceRasterWidgetsOnWayland() +{ + return false; +} + +inline bool shouldUseDesktopOpenGLOnWayland() +{ + return false; +} + +inline bool shouldUseRasterPreviewFallbackOnWayland() +{ + return isWayland(); +} + +} // namespace PlatformSession diff --git a/native/qt6/src/preview_overlay.cpp b/native/qt6/src/preview_overlay.cpp index 306a76e4..a9b13c33 100644 --- a/native/qt6/src/preview_overlay.cpp +++ b/native/qt6/src/preview_overlay.cpp @@ -1,16 +1,18 @@ #include "preview_overlay.h" +#include "icon_utils.h" #include "media/tlrender_player.h" #include "media/tlrender_viewport.h" +#include "file_utils.h" // Compatibility macros for tlRender #define PLAYER_PTR m_player -#define PLAYER_PLAY() m_player->play() -#define PLAYER_PAUSE() m_player->pause() -#define PLAYER_STOP() m_player->stop() -#define PLAYER_SEEK(pos) m_player->seek(pos) -#define PLAYER_DURATION() m_player->duration() -#define PLAYER_POSITION() m_player->position() -#define PLAYER_SET_URI(uri) m_player->load(uri) -#define PLAYER_STATE() m_player->playbackState() +#define PLAYER_PLAY() do { if (m_player) m_player->play(); } while (0) +#define PLAYER_PAUSE() do { if (m_player) m_player->pause(); } while (0) +#define PLAYER_STOP() do { if (m_player) m_player->stop(); } while (0) +#define PLAYER_SEEK(pos) do { if (m_player) m_player->seek(pos); } while (0) +#define PLAYER_DURATION() (m_player ? m_player->duration() : 0) +#define PLAYER_POSITION() (m_player ? m_player->position() : 0) +#define PLAYER_SET_URI(uri) do { if (m_player) m_player->load(uri); } while (0) +#define PLAYER_STATE() (m_player ? m_player->playbackState() : TLRenderPlayer::PlaybackState::Stopped) #define PLAYER_STATE_PLAYING TLRenderPlayer::PlaybackState::Playing #define PLAYER_STATE_PAUSED TLRenderPlayer::PlaybackState::Paused #define PLAYER_STATE_STOPPED TLRenderPlayer::PlaybackState::Stopped @@ -88,165 +90,84 @@ #include #include #include +#include #include +#include #include +#if defined(Q_OS_LINUX) +#include +#endif #ifdef HAVE_OPENIMAGEIO #include #endif namespace { -#ifdef HAVE_TLRENDER -const QString kOcioInputSrgb = QStringLiteral("Output - sRGB"); -const QString kOcioInputRec709 = QStringLiteral("Output - Rec.709"); -const QString kOcioEnabledSetting = QStringLiteral("OCIO/Enabled"); -const QString kOcioConfigSetting = QStringLiteral("OCIO/ConfigPath"); -const QString kOcioDefault8bitSetting = QStringLiteral("OCIO/DefaultInput8bit"); -const QString kOcioDefault16bitSetting = QStringLiteral("OCIO/DefaultInput16bit"); -const QString kOcioDefault32bitSetting = QStringLiteral("OCIO/DefaultInput32bit"); -const QString kOcioDefaultLogSetting = QStringLiteral("OCIO/DefaultInputLog"); -const QString kOcioLast8bitSetting = QStringLiteral("OCIO/LastInput8bit"); -const QString kOcioLast16bitSetting = QStringLiteral("OCIO/LastInput16bit"); -const QString kOcioLast32bitSetting = QStringLiteral("OCIO/LastInput32bit"); -const QString kOcioLastLogSetting = QStringLiteral("OCIO/LastInputLog"); -const QString kOcioLegacyVideoSetting = QStringLiteral("OCIO/LastInputColorspaceVideo"); -const QString kOcioLegacyOtherSetting = QStringLiteral("OCIO/LastInputColorspaceOther"); - -enum class OcioInputCategory -{ - Bit8, - Bit16, - Bit32, - Log -}; - -bool isVideoExtension(const QString& ext) -{ - static const QStringList kVideoExtensions = { - "mp4", "avi", "mov", "mkv", "webm", "flv", "wmv", "m4v", "mxf" - }; - return kVideoExtensions.contains(ext, Qt::CaseInsensitive); -} - -bool isLogExtension(const QString& ext) -{ - static const QStringList kLogExtensions = { - "dpx", "cin", "cineon" - }; - return kLogExtensions.contains(ext, Qt::CaseInsensitive); -} - -int detectImageBitDepth(const QString& filePath) +void activatePreviewWindow(QWidget* window, QWidget* preferredFocus = nullptr) { -#ifdef HAVE_OPENIMAGEIO - using namespace OIIO; - auto in = ImageInput::open(filePath.toStdString()); - if (!in) { - return 0; - } - const ImageSpec& spec = in->spec(); - in->close(); - switch (spec.format.basetype) { - case TypeDesc::UINT8: - return 8; - case TypeDesc::UINT16: - case TypeDesc::HALF: - return 16; - case TypeDesc::FLOAT: - case TypeDesc::DOUBLE: - return 32; - default: - return 0; + if (!window) { + return; } -#else - Q_UNUSED(filePath); - return 0; -#endif -} -OcioInputCategory ocioCategoryForFile(const QString& filePath) -{ - const QString ext = QFileInfo(filePath).suffix().toLower(); - if (isLogExtension(ext)) { - return OcioInputCategory::Log; + window->show(); + window->raise(); + window->activateWindow(); + window->setFocus(Qt::ActiveWindowFocusReason); + + if (preferredFocus) { + preferredFocus->setFocus(Qt::ActiveWindowFocusReason); } - const QStringList hdrExts = {"exr", "hdr", "pfm", "pic"}; - if (hdrExts.contains(ext)) { - const int depth = detectImageBitDepth(filePath); - if (depth >= 32) { - return OcioInputCategory::Bit32; + // Wayland focus handoff can lag until the next event turn. + QTimer::singleShot(0, window, [window, preferredFocus]() { + if (!window) { + return; } - if (depth == 16) { - return OcioInputCategory::Bit16; + window->raise(); + window->activateWindow(); + if (preferredFocus) { + preferredFocus->setFocus(Qt::ActiveWindowFocusReason); + } else { + window->setFocus(Qt::ActiveWindowFocusReason); } - } - - return OcioInputCategory::Bit8; + }); } -QString ocioDefaultKey(OcioInputCategory category) +void syncAnnotationOverlayToVideo(QGraphicsView* overlayView, + QGraphicsScene* overlayScene, + QWidget* videoContainer) { - switch (category) { - case OcioInputCategory::Bit8: return kOcioDefault8bitSetting; - case OcioInputCategory::Bit16: return kOcioDefault16bitSetting; - case OcioInputCategory::Bit32: return kOcioDefault32bitSetting; - case OcioInputCategory::Log: return kOcioDefaultLogSetting; + if (!overlayView || !overlayScene || !videoContainer) { + return; } - return QString(); -} -QString ocioLastKey(OcioInputCategory category) -{ - switch (category) { - case OcioInputCategory::Bit8: return kOcioLast8bitSetting; - case OcioInputCategory::Bit16: return kOcioLast16bitSetting; - case OcioInputCategory::Bit32: return kOcioLast32bitSetting; - case OcioInputCategory::Log: return kOcioLastLogSetting; + QRect displayedRect(QPoint(0, 0), videoContainer->size()); + if (auto *renderViewport = qobject_cast(videoContainer)) { + displayedRect = renderViewport->displayedContentRect(); } - return QString(); -} -QString findBundledAcesConfig() -{ - const QString appDir = QCoreApplication::applicationDirPath(); - const QString relPath = "OpenColorIO-Config-ACES-1.2/aces_1.2/config.ocio"; - const QStringList roots = { - appDir, - QDir(appDir).filePath(".."), - QDir(appDir).filePath("../.."), - QDir(appDir).filePath("../../.."), - QDir::currentPath(), - QDir(QDir::currentPath()).filePath(".."), - QDir(QDir::currentPath()).filePath("../..") - }; - for (const QString& root : roots) { - const QString candidate = QDir(root).filePath(relPath); - if (QFileInfo::exists(candidate)) { - return QDir::cleanPath(candidate); - } + if (QWidget* parent = overlayView->parentWidget()) { + const QPoint overlayPos = videoContainer->mapTo(parent, displayedRect.topLeft()); + overlayView->setGeometry(QRect(overlayPos, displayedRect.size())); } - return QString(); + + if (overlayScene->sceneRect().isEmpty()) { + overlayScene->setSceneRect(QRectF(QPointF(0, 0), QSizeF(displayedRect.size()))); + } + + // The overlay geometry already matches the displayed video rect. Fit the + // frame-space scene into that rect and let mapToScene() provide the only + // coordinate transform for annotation input. + overlayView->resetTransform(); + overlayView->setSceneRect(overlayScene->sceneRect()); + overlayView->fitInView(overlayScene->sceneRect(), Qt::KeepAspectRatio); } -#endif + } // namespace -// Load media icons from disk without recoloring; search common install paths +// Load media icons from disk without recoloring. static QIcon loadMediaIcon(const QString& relative) { - const QString appDir = QCoreApplication::applicationDirPath(); - const QStringList searchPaths = { - appDir + "/icons/" + relative, - appDir + "/../icons/" + relative, - appDir + "/../../icons/" + relative, - appDir + "/../Resources/icons/" + relative - }; - for (const QString& p : searchPaths) { - if (QFileInfo::exists(p)) { - return QIcon(p); - } - } - qWarning() << "[PreviewOverlay] Icon not found:" << relative; - return QIcon(); + return loadRawPngIcon(relative); } // Simple tint helper to force monochrome icons to a desired color @@ -286,21 +207,7 @@ static constexpr int kImageControlsTopMargin = 4; static constexpr int kImageControlsBottomMargin = 6; static constexpr int kImageControlsSpacing = 0; -#ifdef HAVE_FFMPEG -extern "C" { -#include -#include -} -#include -#include - -// Unified FFmpeg-based video and image sequence playback backend -// Replaces manual FallbackPngMovReader implementation with FFmpegPlayer -// Features: Hardware acceleration, smart caching, seamless integration -// All video and sequence playback now handled through FFmpegPlayer member variable -// All video playback now handled through unified FFmpegPlayer backend -#endif // HAVE_FFMPEG PreviewOverlay::PreviewOverlay(QWidget *parent) : QWidget(parent) @@ -323,34 +230,17 @@ PreviewOverlay::PreviewOverlay(QWidget *parent) , sequenceStartFrame(0) , sequenceEndFrame(0) , sequencePlaying(false) - , currentColorSpace(OIIOImageLoader::ColorSpace::sRGB) - , isHDRImage(false) , useCacheForSequences(true) // ENABLED - using QRecursiveMutex to fix deadlock , annotationLayer(nullptr) , annotationModeEnabled(false) , annotationToolbar(nullptr) , currentAnnotatedFrame(-1) { - // Initialize tlRender globally (call once) - TLRenderPlayer::initialize(); - - // Create tlRender player for video and image sequence playback with OCIO support - m_player = new TLRenderPlayer(this); - - // Connect TLRenderPlayer signals to PreviewOverlay handlers - connect(m_player, &TLRenderPlayer::positionChanged, this, &PreviewOverlay::onPlayerPositionChanged); - connect(m_player, &TLRenderPlayer::durationChanged, this, &PreviewOverlay::onPlayerDurationChanged); - connect(m_player, &TLRenderPlayer::mediaInfoReady, this, &PreviewOverlay::onPlayerMediaInfo); - connect(m_player, &TLRenderPlayer::playbackStateChanged, this, &PreviewOverlay::onPlayerPlaybackStateChanged); - connect(m_player, &TLRenderPlayer::error, this, &PreviewOverlay::onPlayerError); - connect(m_player, &TLRenderPlayer::endOfStream, this, &PreviewOverlay::onPlayerEndOfStream); - - qDebug() << "[PreviewOverlay] TLRenderPlayer initialized with OCIO color management"; - setupUi(); setFocusPolicy(Qt::StrongFocus); + setMouseTracking(true); - // Auto-hide controls timer + // Controls remain visible during preview playback; timer kept inert for compatibility. controlsTimer = new QTimer(this); controlsTimer->setSingleShot(true); controlsTimer->setInterval(3000); @@ -412,6 +302,7 @@ void PreviewOverlay::setupUi() setWindowFlags(Qt::Window | Qt::WindowStaysOnTopHint); setWindowTitle(tr("Preview")); setAttribute(Qt::WA_DeleteOnClose, false); // Don't auto-delete when closed + setMinimumSize(QSize(640, 420)); QVBoxLayout *mainLayout = new QVBoxLayout(this); // No bottom margin - controls will be at the very bottom with internal padding @@ -465,8 +356,7 @@ void PreviewOverlay::setupUi() // Annotation toggle button with icon toggleAnnotationBtn = new QPushButton(this); - QString annotationIconPath = QCoreApplication::applicationDirPath() + "/Icons/Annotation/Annotate.png"; - toggleAnnotationBtn->setIcon(QIcon(annotationIconPath)); + toggleAnnotationBtn->setIcon(loadRawPngIcon(QStringLiteral("Annotation/Annotate.png"))); toggleAnnotationBtn->setIconSize(QSize(24, 24)); toggleAnnotationBtn->setText(" Annotate"); toggleAnnotationBtn->setFocusPolicy(Qt::NoFocus); @@ -496,12 +386,13 @@ void PreviewOverlay::setupUi() // Content area (image or video) QWidget *contentWidget = new QWidget(this); + contentWidget->setMinimumSize(QSize(0, 0)); QVBoxLayout *contentLayout = new QVBoxLayout(contentWidget); contentLayout->setContentsMargins(0, 0, 0, 0); // Image view with zoom/pan support (for images and videos) imageView = new QGraphicsView(this); -#if defined(KAM_HAVE_QOPENGLWIDGET) && !(defined(HAVE_TLRENDER) && HAVE_TLRENDER) +#if defined(KAM_HAVE_QOPENGLWIDGET) && !(defined(HAVE_TLRENDER) && HAVE_TLRENDER) && !defined(Q_OS_LINUX) // Use OpenGL-backed viewport for smoother video/image scaling when available. // When tlRender is enabled, avoid an extra QOpenGLWidget to reduce context churn. imageView->setViewport(new QOpenGLWidget()); @@ -573,6 +464,8 @@ void PreviewOverlay::setupUi() annotationOverlayView->setFrameShape(QFrame::NoFrame); annotationOverlayView->setRenderHints(QPainter::Antialiasing | QPainter::TextAntialiasing); annotationOverlayView->setInteractive(true); + annotationOverlayView->installEventFilter(this); + annotationOverlayView->viewport()->installEventFilter(this); annotationOverlayView->hide(); // Will position overlay absolutely when annotation mode is enabled #ifdef HAVE_QT_PDF @@ -614,6 +507,9 @@ void PreviewOverlay::setupUi() controlsWidget->setStyleSheet("QWidget { background-color: rgba(0, 0, 0, 180); }"); controlsWidget->setMinimumHeight(kControlsMinHeight); controlsWidget->setMaximumHeight(kControlsMaxHeight); // Flexible height to fit all controls + QSizePolicy controlsPolicy = controlsWidget->sizePolicy(); + controlsPolicy.setRetainSizeWhenHidden(true); + controlsWidget->setSizePolicy(controlsPolicy); controlsWidget->installEventFilter(this); controlsWidget->hide(); @@ -626,6 +522,7 @@ void PreviewOverlay::setupUi() // Position slider with cached frame visualization positionSlider = new CachedFrameSlider(Qt::Horizontal, this); positionSlider->setFocusPolicy(Qt::NoFocus); + positionSlider->installEventFilter(this); positionSlider->setStyleSheet( "QSlider::groove:horizontal { background: transparent; height: 28px; margin: 0 12px; }" "QSlider::handle:horizontal { background: transparent; width: 18px; margin: -14px 0; }" @@ -676,99 +573,6 @@ void PreviewOverlay::setupUi() controlsLayout->addLayout(timelineRow); } - // Optional colorspace selector (hidden until relevant) - colorSpaceLabel = new QLabel("Colorspace", this); - colorSpaceLabel->setStyleSheet("QLabel { color: white; font-size: 14px; padding: 0 5px; }"); - colorSpaceLabel->hide(); - - colorSpaceCombo = new QComboBox(this); - // Order: sRGB, Rec.709, Linear - colorSpaceCombo->addItem("sRGB"); - colorSpaceCombo->addItem("Rec.709"); - colorSpaceCombo->addItem("Linear"); - colorSpaceCombo->setCurrentIndex(0); - colorSpaceCombo->setFocusPolicy(Qt::NoFocus); - colorSpaceCombo->setStyleSheet( - "QComboBox { background-color: #333; color: white; border: 1px solid #555; " - "padding: 5px; border-radius: 3px; min-width: 100px; }" - "QComboBox::drop-down { border: none; }" - "QComboBox::down-arrow { image: none; border: none; }" - "QComboBox QAbstractItemView { background-color: #333; color: white; selection-background-color: #58a6ff; }" - ); - colorSpaceCombo->hide(); - connect(colorSpaceCombo, QOverload::of(&QComboBox::currentIndexChanged), this, &PreviewOverlay::onColorSpaceChanged); - -#ifdef HAVE_TLRENDER - // OCIO controls (hidden until video/sequence playback) - ocioEnableCheck = new QCheckBox("OCIO", this); - ocioEnableCheck->setFocusPolicy(Qt::NoFocus); - ocioEnableCheck->setStyleSheet("QCheckBox { color: white; font-size: 14px; padding: 0 4px; }"); - ocioEnableCheck->setChecked(true); - ocioEnableCheck->hide(); - - ocioConfigBtn = new QPushButton("Config…", this); - ocioConfigBtn->setFocusPolicy(Qt::NoFocus); - ocioConfigBtn->setStyleSheet( - "QPushButton { background-color: #444; color: white; font-size: 13px; border-radius: 6px; padding: 4px 8px; border: none; }" - "QPushButton:hover { background-color: #555; }" - ); - ocioConfigBtn->hide(); - - ocioInputLabel = new QLabel("Input", this); - ocioInputLabel->setStyleSheet("QLabel { color: white; font-size: 14px; padding: 0 4px; }"); - ocioInputLabel->hide(); - - ocioInputCombo = new QComboBox(this); - ocioInputCombo->setFocusPolicy(Qt::NoFocus); - ocioInputCombo->setEditable(true); - ocioInputCombo->setInsertPolicy(QComboBox::NoInsert); - ocioInputCombo->setStyleSheet( - "QComboBox { background-color: #333; color: white; border: 1px solid #555; padding: 5px; border-radius: 3px; min-width: 200px; }" - "QComboBox::drop-down { border: none; }" - "QComboBox::down-arrow { image: none; border: none; }" - "QComboBox QAbstractItemView { background-color: #333; color: white; selection-background-color: #58a6ff; }" - ); - if (auto *edit = ocioInputCombo->lineEdit()) { - edit->setPlaceholderText("Search..."); - edit->setClearButtonEnabled(true); - } - auto *ocioCompleter = new QCompleter(ocioInputCombo); - ocioCompleter->setModel(ocioInputCombo->model()); - ocioCompleter->setCompletionMode(QCompleter::PopupCompletion); - ocioCompleter->setFilterMode(Qt::MatchContains); - ocioCompleter->setCaseSensitivity(Qt::CaseInsensitive); - ocioInputCombo->setCompleter(ocioCompleter); - ocioInputCombo->hide(); - - ocioDisplayLabel = new QLabel("Display", this); - ocioDisplayLabel->setStyleSheet("QLabel { color: white; font-size: 14px; padding: 0 4px; }"); - ocioDisplayLabel->hide(); - - ocioDisplayCombo = new QComboBox(this); - ocioDisplayCombo->setFocusPolicy(Qt::NoFocus); - ocioDisplayCombo->setStyleSheet( - "QComboBox { background-color: #333; color: white; border: 1px solid #555; padding: 5px; border-radius: 3px; min-width: 120px; }" - "QComboBox::drop-down { border: none; }" - "QComboBox::down-arrow { image: none; border: none; }" - "QComboBox QAbstractItemView { background-color: #333; color: white; selection-background-color: #58a6ff; }" - ); - ocioDisplayCombo->hide(); - - ocioViewLabel = new QLabel("View", this); - ocioViewLabel->setStyleSheet("QLabel { color: white; font-size: 14px; padding: 0 4px; }"); - ocioViewLabel->hide(); - - ocioViewCombo = new QComboBox(this); - ocioViewCombo->setFocusPolicy(Qt::NoFocus); - ocioViewCombo->setStyleSheet( - "QComboBox { background-color: #333; color: white; border: 1px solid #555; padding: 5px; border-radius: 3px; min-width: 160px; }" - "QComboBox::drop-down { border: none; }" - "QComboBox::down-arrow { image: none; border: none; }" - "QComboBox QAbstractItemView { background-color: #333; color: white; selection-background-color: #58a6ff; }" - ); - ocioViewCombo->hide(); - - // Loop mode combo loopModeCombo = new QComboBox(this); loopModeCombo->setFocusPolicy(Qt::NoFocus); loopModeCombo->addItems({"Loop", "Once", "Ping-Pong"}); @@ -779,53 +583,17 @@ void PreviewOverlay::setupUi() "QComboBox::down-arrow { image: none; border: none; }" "QComboBox QAbstractItemView { background-color: #333; color: white; selection-background-color: #58a6ff; }" ); - // Visibility managed by parent playbackControlsGroup - - // Playback rate combo + playbackRateCombo = new QComboBox(this); playbackRateCombo->setFocusPolicy(Qt::NoFocus); playbackRateCombo->addItems({"0.25x", "0.5x", "1x", "1.5x", "2x", "4x"}); - playbackRateCombo->setCurrentIndex(2); // Default to 1x + playbackRateCombo->setCurrentIndex(2); playbackRateCombo->setStyleSheet( "QComboBox { background-color: #333; color: white; border: 1px solid #555; padding: 5px; border-radius: 3px; min-width: 60px; }" "QComboBox::drop-down { border: none; }" "QComboBox::down-arrow { image: none; border: none; }" "QComboBox QAbstractItemView { background-color: #333; color: white; selection-background-color: #58a6ff; }" ); - // Visibility managed by parent playbackControlsGroup - - // Exposure slider - exposureLabel = new QLabel("Exp: 0.0", this); - exposureLabel->setStyleSheet("QLabel { color: white; font-size: 12px; min-width: 55px; }"); - // Visibility managed by parent playbackControlsGroup - - exposureSlider = new QSlider(Qt::Horizontal, this); - exposureSlider->setFocusPolicy(Qt::NoFocus); - exposureSlider->setRange(-100, 100); // -10.0 to 10.0 with 0.1 steps - exposureSlider->setValue(0); - exposureSlider->setFixedWidth(80); - exposureSlider->setStyleSheet( - "QSlider::groove:horizontal { background: #555; height: 4px; border-radius: 2px; }" - "QSlider::handle:horizontal { background: #fff; border: 1px solid #58a6ff; width: 10px; margin: -4px 0; border-radius: 5px; }" - ); - // Visibility managed by parent playbackControlsGroup - - // Gamma slider - gammaLabel = new QLabel("γ: 1.0", this); - gammaLabel->setStyleSheet("QLabel { color: white; font-size: 12px; min-width: 45px; }"); - // Visibility managed by parent playbackControlsGroup - - gammaSlider = new QSlider(Qt::Horizontal, this); - gammaSlider->setFocusPolicy(Qt::NoFocus); - gammaSlider->setRange(10, 400); // 0.1 to 4.0 with 0.01 steps - gammaSlider->setValue(100); // 1.0 - gammaSlider->setFixedWidth(80); - gammaSlider->setStyleSheet( - "QSlider::groove:horizontal { background: #555; height: 4px; border-radius: 2px; }" - "QSlider::handle:horizontal { background: #fff; border: 1px solid #58a6ff; width: 10px; margin: -4px 0; border-radius: 5px; }" - ); - // Visibility managed by parent playbackControlsGroup -#endif // ========== ROW 3: Playback (center) + Audio (right) ========== // Transport (Prev - Play/Pause - Next) @@ -849,6 +617,7 @@ void PreviewOverlay::setupUi() transportLayout->addWidget(prevFrameBtn); playPauseBtn = new QPushButton(this); + playPauseBtn->installEventFilter(this); playPauseBtn->setIcon(playIcon); playPauseBtn->setIconSize(QSize(24, 24)); playPauseBtn->setFixedSize(40, 40); @@ -874,12 +643,15 @@ void PreviewOverlay::setupUi() connect(nextFrameBtn, &QPushButton::clicked, this, &PreviewOverlay::onStepNextFrame); transportLayout->addWidget(nextFrameBtn); - // Audio controls group (right) + // Audio controls group (right), with loop/rate combos merged in QWidget *audioGroup = new QWidget(this); QHBoxLayout *audioLayout = new QHBoxLayout(audioGroup); audioLayout->setContentsMargins(0, 0, 0, 0); audioLayout->setSpacing(8); + audioLayout->addWidget(loopModeCombo); + audioLayout->addWidget(playbackRateCombo); + muteBtn = new QPushButton(this); muteBtn->setIcon(audioIcon); muteBtn->setIconSize(QSize(18, 18)); @@ -904,65 +676,20 @@ void PreviewOverlay::setupUi() connect(volumeSlider, &QSlider::valueChanged, this, &PreviewOverlay::onVolumeChanged); audioLayout->addWidget(volumeSlider); - // Bottom row grid to center transport and right-align audio + // Bottom row: transport spans full width (true center), audio overlaid on right QGridLayout *bottomGrid = new QGridLayout(); bottomGrid->setContentsMargins(0, 0, 0, 0); - bottomGrid->setHorizontalSpacing(10); - - bottomGrid->setColumnStretch(0, 1); // left stretch - bottomGrid->setColumnStretch(1, 0); // center content - bottomGrid->setColumnStretch(2, 1); // right stretch (before audio) - bottomGrid->setColumnStretch(3, 0); // audio group - - bottomGrid->addWidget(transport, 0, 1, Qt::AlignHCenter | Qt::AlignVCenter); - - // Keep color space controls in layout (hidden) between center and right - QWidget *csGroup = new QWidget(this); - QHBoxLayout *csLayout = new QHBoxLayout(csGroup); - csLayout->setContentsMargins(0, 0, 0, 0); - csLayout->setSpacing(6); - csLayout->addWidget(colorSpaceLabel); - csLayout->addWidget(colorSpaceCombo); -#ifdef HAVE_TLRENDER - csLayout->addSpacing(8); - csLayout->addWidget(ocioEnableCheck); - csLayout->addWidget(ocioConfigBtn); - csLayout->addWidget(ocioInputLabel); - csLayout->addWidget(ocioInputCombo); - csLayout->addWidget(ocioDisplayLabel); - csLayout->addWidget(ocioDisplayCombo); - csLayout->addWidget(ocioViewLabel); - csLayout->addWidget(ocioViewCombo); -#endif - // Do not forcibly hide the container; children visibility will control it - bottomGrid->addWidget(csGroup, 0, 2, Qt::AlignVCenter); + bottomGrid->setHorizontalSpacing(0); - bottomGrid->addWidget(audioGroup, 0, 3, Qt::AlignRight | Qt::AlignVCenter); + // Transport spans all columns so it centers in the full width + bottomGrid->addWidget(transport, 0, 0, 1, 2, Qt::AlignHCenter | Qt::AlignVCenter); + // Audio group in column 1 only, right-aligned (overlaps but doesn't affect transport center) + bottomGrid->addWidget(audioGroup, 0, 1, Qt::AlignRight | Qt::AlignVCenter); - controlsLayout->addLayout(bottomGrid); + bottomGrid->setColumnStretch(0, 1); + bottomGrid->setColumnStretch(1, 1); -#ifdef HAVE_TLRENDER - // Playback controls row (Loop, Rate, Exposure, Gamma) - added as separate row in controlsLayout - playbackControlsGroup = new QWidget(this); - QHBoxLayout *playbackControlsLayout = new QHBoxLayout(playbackControlsGroup); - playbackControlsLayout->setContentsMargins(0, 0, 0, 0); - playbackControlsLayout->setSpacing(8); - playbackControlsLayout->addStretch(); - playbackControlsLayout->addWidget(loopModeCombo); - playbackControlsLayout->addWidget(playbackRateCombo); - playbackControlsLayout->addSpacing(16); - playbackControlsLayout->addWidget(exposureLabel); - playbackControlsLayout->addWidget(exposureSlider); - playbackControlsLayout->addWidget(gammaLabel); - playbackControlsLayout->addWidget(gammaSlider); - playbackControlsLayout->addStretch(); - playbackControlsGroup->setFixedHeight(30); - playbackControlsGroup->hide(); // Hidden by default - - // Add directly to controls layout as a new row - controlsLayout->addWidget(playbackControlsGroup); - qDebug() << "[setupUi] playbackControlsGroup created and added to layout"; -#endif + controlsLayout->addLayout(bottomGrid); mainLayout->addWidget(controlsWidget); // Overlay side navigation arrows @@ -1001,101 +728,13 @@ void PreviewOverlay::setupUi() navNextBtn->show(); } -#ifdef HAVE_TLRENDER - // Set video widget for tlRender rendering using native viewport - m_renderWidget = new TLRenderViewport(this); - m_renderWidget->setPlayer(m_player); - // Ensure the overlay remains the focus target for keyboard shortcuts. - m_renderWidget->setFocusPolicy(Qt::NoFocus); - m_renderWidget->installEventFilter(this); - // Replace videoWidget with m_renderWidget in the layout - if (videoWidget && videoWidget->parentWidget()) { - QLayout* parentLayout = videoWidget->parentWidget()->layout(); - if (parentLayout) { - parentLayout->replaceWidget(videoWidget, m_renderWidget); - } - } - // Set initial volume - m_player->setVolume(0.5); + // Delay all tlRender setup until a video/sequence is actually shown. + // Creating the player or hidden GL surfaces up front is unstable on Wayland/NVIDIA. - // Wire OCIO controls - if (ocioEnableCheck) { - connect(ocioEnableCheck, &QCheckBox::toggled, this, [this](bool enabled) { - m_player->setOCIOEnabled(enabled); - QSettings settings("AugmentCode", "KAssetManager"); - settings.setValue(kOcioEnabledSetting, enabled); - if (controlsTimer) { - controlsTimer->start(); - } - }); - } - if (ocioConfigBtn) { - connect(ocioConfigBtn, &QPushButton::clicked, this, [this]() { - const QString filePath = QFileDialog::getOpenFileName( - this, - tr("Select OCIO config"), - QString(), - tr("OCIO Config (config.ocio);;All Files (*.*)") - ); - if (!filePath.isEmpty()) { - m_player->setOCIOConfig(filePath); - QSettings settings("AugmentCode", "KAssetManager"); - settings.setValue(kOcioConfigSetting, filePath); - } - }); - } - if (ocioInputCombo) { - connect(ocioInputCombo, QOverload::of(&QComboBox::currentIndexChanged), this, [this](int idx) { - if (idx < 0) return; - const QString colorspace = ocioInputCombo->itemText(idx); - m_player->setInputColorspace(colorspace); - - const OcioInputCategory category = ocioCategoryForFile(currentFilePath); - const QString settingsKey = ocioLastKey(category); - if (!settingsKey.isEmpty()) { - QSettings settings("AugmentCode", "KAssetManager"); - settings.setValue(settingsKey, colorspace); - } - controlsTimer->start(); - }); - } - if (ocioDisplayCombo) { - connect(ocioDisplayCombo, QOverload::of(&QComboBox::currentIndexChanged), this, [this](int idx) { - if (idx < 0) return; - const QString display = ocioDisplayCombo->itemText(idx); - m_player->setDisplay(display); - - if (ocioViewCombo) { - const QStringList views = m_player->availableViews(display); - ocioViewCombo->blockSignals(true); - ocioViewCombo->clear(); - ocioViewCombo->addItems(views); - // Try to keep the player's current view selected - const int viewIdx = ocioViewCombo->findText(m_player->view()); - if (viewIdx >= 0) { - ocioViewCombo->setCurrentIndex(viewIdx); - } - ocioViewCombo->blockSignals(false); - } - controlsTimer->start(); - }); - } - if (ocioViewCombo) { - connect(ocioViewCombo, QOverload::of(&QComboBox::currentIndexChanged), this, [this](int idx) { - if (idx < 0) return; - const QString view = ocioViewCombo->itemText(idx); - m_player->setView(view); - // Save to settings for persistence - QSettings settings("AugmentCode", "KAssetManager"); - settings.setValue("OCIO/LastView", view); - settings.setValue("OCIO/LastDisplay", m_player->display()); - controlsTimer->start(); - }); - } - // Loop mode control if (loopModeCombo) { connect(loopModeCombo, QOverload::of(&QComboBox::currentIndexChanged), this, [this](int idx) { + if (!isVideo || !m_player) return; TLRenderPlayer::LoopMode mode = TLRenderPlayer::LoopMode::Loop; switch (idx) { case 0: mode = TLRenderPlayer::LoopMode::Loop; break; @@ -1110,6 +749,7 @@ void PreviewOverlay::setupUi() // Playback rate control if (playbackRateCombo) { connect(playbackRateCombo, QOverload::of(&QComboBox::currentIndexChanged), this, [this](int idx) { + if (!isVideo || !m_player) return; static const double rates[] = {0.25, 0.5, 1.0, 1.5, 2.0, 4.0}; if (idx >= 0 && idx < 6) { m_player->setPlaybackRate(rates[idx]); @@ -1118,177 +758,6 @@ void PreviewOverlay::setupUi() }); } - // Exposure slider - if (exposureSlider) { - connect(exposureSlider, &QSlider::valueChanged, this, [this](int value) { - float exposure = value / 10.0f; // -10.0 to 10.0 - m_player->setExposure(exposure); - if (exposureLabel) { - exposureLabel->setText(QString("Exp: %1").arg(exposure, 0, 'f', 1)); - } - controlsTimer->start(); - }); - } - - // Gamma slider - if (gammaSlider) { - connect(gammaSlider, &QSlider::valueChanged, this, [this](int value) { - float gamma = value / 100.0f; // 0.1 to 4.0 - m_player->setGamma(gamma); - if (gammaLabel) { - gammaLabel->setText(QString("γ: %1").arg(gamma, 0, 'f', 2)); - } - controlsTimer->start(); - }); - } - - // Populate OCIO lists once we have a config loaded - connect(m_player, &TLRenderPlayer::colorspacesChanged, this, [this](const QStringList& colorspaces) { - populateOcioInputColorspaces(colorspaces); - if (!currentFilePath.isEmpty()) { - applyOcioInputDefaults(currentFilePath); - } - }); - connect(m_player, &TLRenderPlayer::displaysChanged, this, [this](const QStringList& displays) { - if (!ocioDisplayCombo) return; - ocioDisplayCombo->blockSignals(true); - ocioDisplayCombo->clear(); - ocioDisplayCombo->addItems(displays); - - // Try to restore last used display from settings - QSettings settings("AugmentCode", "KAssetManager"); - const QString lastDisplay = settings.value("OCIO/LastDisplay").toString(); - int idx = -1; - if (!lastDisplay.isEmpty()) { - idx = ocioDisplayCombo->findText(lastDisplay); - } - if (idx < 0) { - idx = ocioDisplayCombo->findText(m_player->display()); - } - if (idx >= 0) { - ocioDisplayCombo->setCurrentIndex(idx); - } - ocioDisplayCombo->blockSignals(false); - - // Ensure the views combo is populated for the selected display. - if (ocioViewCombo) { - const QString display = (idx >= 0) ? ocioDisplayCombo->itemText(idx) - : (ocioDisplayCombo->count() > 0 ? ocioDisplayCombo->itemText(0) : QString()); - const QStringList views = display.isEmpty() ? QStringList() : m_player->availableViews(display); - ocioViewCombo->blockSignals(true); - ocioViewCombo->clear(); - ocioViewCombo->addItems(views); - - // Restore view from settings or use smart defaults - const QString lastView = settings.value("OCIO/LastView").toString(); - int viewIdx = -1; - if (!lastView.isEmpty()) { - viewIdx = ocioViewCombo->findText(lastView); - } - - // If no saved view, check for video file defaults - if (viewIdx < 0 && !currentFilePath.isEmpty()) { - const QString ext = QFileInfo(currentFilePath).suffix().toLower(); - const int rec709Idx = ocioViewCombo->findText("Rec.709", Qt::MatchFixedString); - const int srgbIdx = ocioViewCombo->findText("sRGB", Qt::MatchFixedString); - if (isVideoExtension(ext)) { - if (rec709Idx >= 0) { - viewIdx = rec709Idx; - } else if (srgbIdx >= 0) { - viewIdx = srgbIdx; - } - } else if (srgbIdx >= 0) { - viewIdx = srgbIdx; - } - } - - if (viewIdx < 0) { - viewIdx = ocioViewCombo->findText(m_player->view()); - } - if (viewIdx >= 0) { - ocioViewCombo->setCurrentIndex(viewIdx); - } - ocioViewCombo->blockSignals(false); - } - }); - - connect(m_player, &TLRenderPlayer::viewsChanged, this, [this](const QStringList& views) { - if (!ocioViewCombo) return; - ocioViewCombo->blockSignals(true); - ocioViewCombo->clear(); - ocioViewCombo->addItems(views); - - // Try to restore last used view from settings - QSettings settings("AugmentCode", "KAssetManager"); - const QString lastView = settings.value("OCIO/LastView").toString(); - int viewIdx = -1; - - if (!lastView.isEmpty()) { - viewIdx = ocioViewCombo->findText(lastView); - } - - // If no saved view or saved view not found, check for video file defaults - if (viewIdx < 0 && !currentFilePath.isEmpty()) { - const QString ext = QFileInfo(currentFilePath).suffix().toLower(); - const int rec709Idx = ocioViewCombo->findText("Rec.709", Qt::MatchFixedString); - const int srgbIdx = ocioViewCombo->findText("sRGB", Qt::MatchFixedString); - if (isVideoExtension(ext)) { - if (rec709Idx >= 0) { - viewIdx = rec709Idx; - } else if (srgbIdx >= 0) { - viewIdx = srgbIdx; - } - } else if (srgbIdx >= 0) { - viewIdx = srgbIdx; - } - } - - // Final fallback: use player's current view or first item - if (viewIdx < 0) { - viewIdx = ocioViewCombo->findText(m_player->view()); - } - if (viewIdx >= 0) { - ocioViewCombo->setCurrentIndex(viewIdx); - } - ocioViewCombo->blockSignals(false); - }); - - // Default to bundled ACES config if it exists in the deployed bin folder - { - QSettings settings("AugmentCode", "KAssetManager"); - const bool ocioEnabled = settings.value(kOcioEnabledSetting, true).toBool(); - if (ocioEnableCheck) { - QSignalBlocker blocker(ocioEnableCheck); - ocioEnableCheck->setChecked(ocioEnabled); - } - m_player->setOCIOEnabled(ocioEnabled); - - QString configPath = settings.value(kOcioConfigSetting).toString(); - if (!configPath.isEmpty() && !QFileInfo::exists(configPath)) { - qWarning() << "[PreviewOverlay] OCIO config not found at" << configPath; - configPath.clear(); - } - if (configPath.isEmpty()) { - configPath = findBundledAcesConfig(); - } - if (!configPath.isEmpty()) { - m_player->setOCIOConfig(configPath); - } else { - qWarning() << "[PreviewOverlay] ACES OCIO config not found."; - } - - // Restore last used OCIO display/view from settings - const QString lastDisplay = settings.value("OCIO/LastDisplay").toString(); - const QString lastView = settings.value("OCIO/LastView").toString(); - if (!lastDisplay.isEmpty()) { - m_player->setDisplay(lastDisplay); - } - if (!lastView.isEmpty()) { - m_player->setView(lastView); - } - } -#endif - // Initialize annotation system annotationLayer = new AnnotationLayer(imageScene, this); annotationLayer->setParentWidget(this); // Set parent for dialogs @@ -1299,86 +768,69 @@ void PreviewOverlay::setupUi() qDebug() << "[PreviewOverlay] Annotation added signal received - saving frame immediately"; saveCurrentFrameAnnotations(); }); + connect(annotationLayer, &AnnotationLayer::annotationRemoved, this, [this](AnnotationItem* item) { + Q_UNUSED(item); + saveCurrentFrameAnnotations(); + }); + connect(annotationLayer, &AnnotationLayer::annotationsCleared, this, [this]() { + saveCurrentFrameAnnotations(); + }); setupAnnotationToolbar(); } -#ifdef HAVE_TLRENDER -void PreviewOverlay::populateOcioInputColorspaces(const QStringList& colorspaces) +void PreviewOverlay::ensurePlayer() { - if (!ocioInputCombo) return; - QSignalBlocker blocker(ocioInputCombo); - ocioInputCombo->clear(); - ocioInputCombo->addItems(colorspaces); -} + if (m_player) { + return; + } -QString PreviewOverlay::defaultOcioInputName(const QString& filePath) const -{ - const QString ext = QFileInfo(filePath).suffix().toLower(); - return isVideoExtension(ext) ? kOcioInputRec709 : kOcioInputSrgb; + m_player = new TLRenderPlayer(this); + + connect(m_player, &TLRenderPlayer::positionChanged, this, &PreviewOverlay::onPlayerPositionChanged); + connect(m_player, &TLRenderPlayer::durationChanged, this, &PreviewOverlay::onPlayerDurationChanged); + connect(m_player, &TLRenderPlayer::mediaInfoReady, this, &PreviewOverlay::onPlayerMediaInfo); + connect(m_player, &TLRenderPlayer::playbackStateChanged, this, &PreviewOverlay::onPlayerPlaybackStateChanged); + connect(m_player, &TLRenderPlayer::error, this, &PreviewOverlay::onPlayerError); + connect(m_player, &TLRenderPlayer::endOfStream, this, &PreviewOverlay::onPlayerEndOfStream); + + m_player->setVolume(0.5); } -void PreviewOverlay::applyOcioInputDefaults(const QString& filePath) +void PreviewOverlay::ensureRenderWidget() { - if (!m_player || !ocioInputCombo) return; - const QStringList colorspaces = m_player->availableColorspaces(); - if (colorspaces.isEmpty()) return; - - QSettings settings("AugmentCode", "KAssetManager"); - const OcioInputCategory category = ocioCategoryForFile(filePath); - QString selected; - const QString lastKey = ocioLastKey(category); - const QString defaultKey = ocioDefaultKey(category); - - if (!lastKey.isEmpty()) { - selected = settings.value(lastKey).toString(); - } - if (selected.isEmpty() || !colorspaces.contains(selected)) { - if (!defaultKey.isEmpty()) { - selected = settings.value(defaultKey).toString(); - } + if (!m_player) { + return; } - if (selected.isEmpty() || !colorspaces.contains(selected)) { - if (category == OcioInputCategory::Bit8) { - selected = defaultOcioInputName(filePath); - } else { - const QString current = m_player->inputColorspace(); - if (colorspaces.contains(current)) { - selected = current; + + if (!m_renderWidget) { + m_renderWidget = new TLRenderViewport(this); + m_renderWidget->setFocusPolicy(Qt::NoFocus); + m_renderWidget->installEventFilter(this); + connect(m_renderWidget, &TLRenderViewport::fpsChanged, this, [this](double fps) { + currentPlaybackFps = fps; + if (fpsLabel && fps > 0.0 && isVideo && m_player && m_player->playbackState() == TLRenderPlayer::PlaybackState::Playing) { + fpsLabel->setText(QString::number(fps, 'f', 1) + " fps"); } - } - } - if (selected.isEmpty() || !colorspaces.contains(selected)) { - if (category == OcioInputCategory::Bit8) { - const QString legacyKey = isVideoExtension(QFileInfo(filePath).suffix().toLower()) - ? kOcioLegacyVideoSetting - : kOcioLegacyOtherSetting; - const QString legacyValue = settings.value(legacyKey).toString(); - if (colorspaces.contains(legacyValue)) { - selected = legacyValue; + }); + if (videoWidget && videoWidget->parentWidget()) { + QLayout* parentLayout = videoWidget->parentWidget()->layout(); + if (parentLayout) { + parentLayout->replaceWidget(videoWidget, m_renderWidget); } + videoWidget->hide(); + videoWidget->setEnabled(false); } } - if (selected.isEmpty() || !colorspaces.contains(selected)) { - if (!selected.isEmpty()) { - qWarning() << "[PreviewOverlay] OCIO input colorspace not found in config:" << selected; - } - return; - } - const int idx = ocioInputCombo->findText(selected); - if (idx >= 0) { - QSignalBlocker blocker(ocioInputCombo); - ocioInputCombo->setCurrentIndex(idx); - } - m_player->setInputColorspace(selected); + m_renderWidget->setPlayer(m_player); } -#endif void PreviewOverlay::showAsset(const QString &filePath, const QString &fileName, const QString &fileType) { // First, stop any ongoing playback (video, fallback, or sequence) stopPlayback(); + resetAnnotationSession(); detectedFps = 0.0; if (positionSlider) { positionSlider->clearCachedFrames(); @@ -1391,19 +843,6 @@ void PreviewOverlay::showAsset(const QString &filePath, const QString &fileName, if (sequenceTimer->isActive()) { sequenceTimer->stop(); } - -#ifdef HAVE_TLRENDER - // Default to hiding OCIO controls; showVideo()/showSequence(tlRender path) will enable them. - if (ocioEnableCheck) ocioEnableCheck->hide(); - if (ocioConfigBtn) ocioConfigBtn->hide(); - if (ocioInputLabel) ocioInputLabel->hide(); - if (ocioInputCombo) ocioInputCombo->hide(); - if (ocioDisplayLabel) ocioDisplayLabel->hide(); - if (ocioDisplayCombo) ocioDisplayCombo->hide(); - if (ocioViewLabel) ocioViewLabel->hide(); - if (ocioViewCombo) ocioViewCombo->hide(); -#endif - // Office parse-only previews if (fileType.compare("doc", Qt::CaseInsensitive) == 0) { currentFilePath = filePath; @@ -1434,13 +873,10 @@ void PreviewOverlay::showAsset(const QString &filePath, const QString &fileName, if (closeBtn) closeBtn->show(); // Determine content type and route - QStringList videoFormats = {"mp4", "avi", "mov", "mkv", "webm", "flv", "wmv", "m4v", "mxf"}; - isVideo = videoFormats.contains(currentFileType); + isVideo = FileUtils::isVideoFile(currentFileType); - // Make sure widget is shown and sized before loading content - show(); - raise(); - setFocus(); + // Make sure widget is shown and owns focus before loading content. + activatePreviewWindow(this); // Process events to ensure window is properly sized @@ -1467,7 +903,6 @@ void PreviewOverlay::showAsset(const QString &filePath, const QString &fileName, setControlsVisible(false); if (alphaCheck) alphaCheck->hide(); isVideo = false; - isHDRImage = false; originalPixmap = QPixmap(); return; } @@ -1488,7 +923,6 @@ void PreviewOverlay::showAsset(const QString &filePath, const QString &fileName, setControlsVisible(false); if (alphaCheck) alphaCheck->hide(); isVideo = false; - isHDRImage = false; originalPixmap = QPixmap(); return; } @@ -1522,20 +956,16 @@ void PreviewOverlay::showImage(const QString &filePath) if (navPrevBtn) navPrevBtn->hide(); if (navNextBtn) navNextBtn->hide(); - // CRITICAL: Stop any video playback - PLAYER_STOP(); - - // Check if this is an HDR/EXR image - QFileInfo fileInfo(filePath); - QString ext = fileInfo.suffix().toLower(); - isHDRImage = (ext == "exr" || ext == "hdr" || ext == "pic"); + // CRITICAL: Stop any video playback only when a player exists + if (m_player) { + PLAYER_STOP(); + } // Try loading with OpenImageIO first for advanced formats QImage image; QPixmap newPixmap; if (OIIOImageLoader::isOIIOSupported(filePath)) { - // Load at full resolution for preview (no size limit) with current color space - image = OIIOImageLoader::loadImage(filePath, 0, 0, currentColorSpace); + image = OIIOImageLoader::loadImage(filePath, 0, 0); if (!image.isNull()) { newPixmap = QPixmap::fromImage(image); } else { @@ -1546,7 +976,6 @@ void PreviewOverlay::showImage(const QString &filePath) // Fall back to Qt's native loader if OIIO didn't work or isn't supported if (newPixmap.isNull()) { newPixmap = QPixmap(filePath); - isHDRImage = false; // Qt loader doesn't support HDR } @@ -1580,10 +1009,7 @@ void PreviewOverlay::showImage(const QString &filePath) } imageScene->update(); - // No controls for still images setPlaybackControlsVisible(false); - if (colorSpaceLabel) colorSpaceLabel->hide(); - if (colorSpaceCombo) colorSpaceCombo->hide(); setControlsVisible(false); } else { qWarning() << "[PreviewOverlay::showImage] Failed to load image:" << filePath; @@ -1594,6 +1020,11 @@ void PreviewOverlay::showImage(const QString &filePath) void PreviewOverlay::showVideo(const QString &filePath) { + ensurePlayer(); + if (!m_player) { + return; + } + ensureRenderWidget(); // Stop any existing playback PLAYER_STOP(); @@ -1604,21 +1035,20 @@ void PreviewOverlay::showVideo(const QString &filePath) if (pdfView) pdfView->hide(); #endif if (imageView) imageView->hide(); + if (stillImageView) stillImageView->hide(); - // CRITICAL: Set render widget AFTER show() to ensure valid window handle - if (!m_renderWidget) { - m_renderWidget = new TLRenderViewport(this); - m_renderWidget->setPlayer(m_player); - } m_renderWidget->show(); m_renderWidget->raise(); if (videoWidget) videoWidget->hide(); // Hide the placeholder widget + activatePreviewWindow(this, m_renderWidget); // Anchor nav arrows to the video widget positionNavButtons(activeVideoWidget()); setPlaybackControlsVisible(true); setControlsHeightForImage(false); setControlsVisible(true); + controlsPinned = false; + controlsHovering = false; // Cache bar is only for sequences if (cacheBar) cacheBar->hide(); @@ -1637,46 +1067,27 @@ void PreviewOverlay::showVideo(const QString &filePath) // Hide alpha toggle for videos if (alphaCheck) alphaCheck->hide(); - // Hide legacy per-image tone-map colorspace selector for videos (OCIO handles color) - if (colorSpaceLabel) colorSpaceLabel->hide(); - if (colorSpaceCombo) colorSpaceCombo->hide(); - - // Show OCIO controls for tlRender playback - if (ocioEnableCheck) ocioEnableCheck->show(); - if (ocioConfigBtn) ocioConfigBtn->show(); - if (ocioInputLabel) ocioInputLabel->show(); - if (ocioInputCombo) ocioInputCombo->show(); - if (ocioDisplayLabel) ocioDisplayLabel->show(); - if (ocioDisplayCombo) ocioDisplayCombo->show(); - if (ocioViewLabel) ocioViewLabel->show(); - if (ocioViewCombo) ocioViewCombo->show(); - - // Show playback control widgets row - qDebug() << "[showVideo] Playback controls check:" - << "playbackControlsGroup:" << (playbackControlsGroup != nullptr) - << "loopModeCombo:" << (loopModeCombo != nullptr) - << "exposureSlider:" << (exposureSlider != nullptr); - if (playbackControlsGroup) { - playbackControlsGroup->show(); - playbackControlsGroup->setVisible(true); - qDebug() << "[showVideo] playbackControlsGroup isVisible:" << playbackControlsGroup->isVisible() - << "size:" << playbackControlsGroup->size() - << "parent:" << playbackControlsGroup->parentWidget(); - } - originalPixmap = QPixmap(); // Clear the pixmap fitPending = true; + // Reset video timeline state before the new media reports duration. + positionSlider->blockSignals(true); + positionSlider->setRange(0, 0); + positionSlider->setValue(0); + positionSlider->blockSignals(false); + // Default timeline context while media info is loading positionSlider->setTimelineContext(true, 24.0); - // Load and play video with tlRender -#ifdef HAVE_TLRENDER - applyOcioInputDefaults(filePath); -#endif if (m_renderWidget) { m_renderWidget->setFrameView(true); } + if (playbackRateCombo) { + playbackRateCombo->blockSignals(true); + playbackRateCombo->setCurrentIndex(2); + playbackRateCombo->blockSignals(false); + } + m_player->setPlaybackRate(1.0); m_player->loadMedia(filePath); PLAYER_PLAY(); @@ -1695,6 +1106,9 @@ void PreviewOverlay::onPlayPauseClicked() playSequence(); } } else { + if (!m_player) { + return; + } // Handle video/tlRender playback auto state = PLAYER_STATE(); qDebug() << "[PreviewOverlay] onPlayPauseClicked: current state=" << static_cast(state); @@ -1724,27 +1138,42 @@ void PreviewOverlay::onSliderMoved(int position) } // Video path - always do live scrubbing - PLAYER_SEEK(position); - + if (!m_player) { + return; + } + + const double fps = detectedFps > 0.0 ? detectedFps : 24.0; + const qint64 targetFrame = qMax(0, qRound64((position / 1000.0) * fps)); + m_player->seekToFrame(targetFrame); + m_player->refreshCurrentFrame(); + lastKnownVideoFrame = static_cast(targetFrame); + // Update timecode immediately during scrubbing lastKnownPosition = position; qint64 durationMs = PLAYER_DURATION(); updateVideoTimeDisplays(position, durationMs); - - // Don't recapture frame during drag if in annotation mode (too slow) - // Will update on release - + + if (annotationModeEnabled && isVideo) { + updateVideoAnnotationFrame(); + } + controlsTimer->start(); } void PreviewOverlay::onVolumeChanged(int value) { + if (!m_player) { + return; + } m_player->setVolume(value / 100.0); controlsTimer->start(); } void PreviewOverlay::onToggleMute() { + if (!m_player) { + return; + } const bool newMuted = !m_player->isMuted(); m_player->setMuted(newMuted); if (muteBtn) { @@ -1762,6 +1191,10 @@ void PreviewOverlay::onSliderPressed() return; } + if (!m_player) { + userSeeking = false; + return; + } wasPlayingBeforeSeek = (PLAYER_STATE() == PLAYER_STATE_PLAYING); // Capture position before pausing for seek lastKnownPosition = PLAYER_POSITION(); @@ -1778,15 +1211,22 @@ void PreviewOverlay::onSliderReleased() loadSequenceFrame(pos); if (wasPlayingBeforeSeek) playSequence(); userSeeking = false; + controlsPinned = false; controlsTimer->start(); return; } - PLAYER_SEEK(pos); + if (!m_player) { + userSeeking = false; + return; + } + const double fps = detectedFps > 0.0 ? detectedFps : 24.0; + const qint64 targetFrame = qMax(0, qRound64((pos / 1000.0) * fps)); + m_player->seekToFrame(targetFrame); + m_player->refreshCurrentFrame(); // Calculate and explicitly track the frame number we seeked to - double fps = detectedFps > 0.0 ? detectedFps : 24.0; - lastKnownVideoFrame = static_cast(qRound((pos / 1000.0) * fps)); + lastKnownVideoFrame = static_cast(targetFrame); qDebug() << "[PreviewOverlay] Seek to position" << pos << "ms - explicitly set frame to:" << lastKnownVideoFrame; // Update lastKnownPosition immediately for timecode display @@ -1802,6 +1242,7 @@ void PreviewOverlay::onSliderReleased() } userSeeking = false; + controlsPinned = false; controlsTimer->start(); } @@ -1817,6 +1258,9 @@ void PreviewOverlay::onStepNextFrame() } // Player path - professional frame stepping + if (!m_player) { + return; + } m_player->stepForward(); // Explicitly track frame number for frame-accurate annotations @@ -1854,6 +1298,9 @@ void PreviewOverlay::onStepPrevFrame() } // Player path - professional frame stepping + if (!m_player) { + return; + } m_player->stepBackward(); // Explicitly track frame number for frame-accurate annotations @@ -1907,7 +1354,6 @@ void PreviewOverlay::setPlaybackControlsVisible(bool visible) if (nextFrameBtn) nextFrameBtn->setVisible(visible); if (muteBtn) muteBtn->setVisible(visible); if (volumeSlider) volumeSlider->setVisible(visible); - if (playbackControlsGroup) playbackControlsGroup->setVisible(visible); } void PreviewOverlay::setControlsHeightForImage(bool imageMode) @@ -1938,11 +1384,12 @@ void PreviewOverlay::setControlsVisible(bool visible) if (!controlsWidget) return; const bool allow = isVideo || isSequence; if (visible && allow) { + setControlsHeightForImage(false); controlsWidget->show(); - } else { + } else if (!allow) { controlsWidget->hide(); - controlsWidget->setMinimumHeight(0); - controlsWidget->setMaximumHeight(0); + } else { + controlsWidget->show(); } controlsWidget->updateGeometry(); } @@ -1961,10 +1408,12 @@ void PreviewOverlay::hideVideoWidgets() void PreviewOverlay::hideControls() { - // Never hide playback controls in full-screen previews - // Requirement: playback buttons must remain visible at all times - Q_UNUSED(this); - return; // no-op + if (!controlsWidget || !isVideo || userSeeking || controlsPinned || controlsHovering) { + return; + } + + // Playback controls must remain visible during preview playback. + setControlsVisible(true); } void PreviewOverlay::updatePlayPauseButton() @@ -1988,10 +1437,15 @@ void PreviewOverlay::positionNavButtons(QWidget* container) const bool videoCase = (container == videoWidget || container == m_renderWidget); - auto setupTopLevel = [this](QPushButton* b){ - // Convert to a small top-level tool window that can float above native video - if (b->parentWidget() != this || !(b->windowFlags() & Qt::Tool)) { - b->setParent(this, Qt::FramelessWindowHint | Qt::Tool | Qt::WindowStaysOnTopHint); + // Keep video navigation arrows in the main overlay stacking context so + // they follow the same layering model as the annotation overlay. + auto setupOverlayChild = [this](QPushButton* b) { + if (!b) { + return; + } + if (b->parentWidget() != this || (b->windowFlags() & Qt::Window)) { + b->setParent(this); + b->setWindowFlags(Qt::Widget); b->setAttribute(Qt::WA_TranslucentBackground, true); b->setFocusPolicy(Qt::NoFocus); b->show(); @@ -2006,14 +1460,17 @@ void PreviewOverlay::positionNavButtons(QWidget* container) }; if (videoCase) { - // Top-level tool windows: use global coordinates for Y from the overlay center - setupTopLevel(navPrevBtn); - setupTopLevel(navNextBtn); - const int yGlobal = mapToGlobal(QPoint(0, qMax(0, overlayCenterY))).y(); - const int leftX = container->mapToGlobal(QPoint(margin, 0)).x(); - const int rightX = container->mapToGlobal(QPoint(qMax(0, container->width() - margin - navNextBtn->width()), 0)).x(); - navPrevBtn->move(QPoint(leftX, yGlobal)); - navNextBtn->move(QPoint(rightX, yGlobal)); + setupOverlayChild(navPrevBtn); + setupOverlayChild(navNextBtn); + + const QRect containerRect = QRect(container->mapTo(this, QPoint(0, 0)), container->size()); + const int yInOverlay = qBound(0, + overlayCenterY, + qMax(0, height() - navPrevBtn->height())); + const int leftX = containerRect.left() + margin; + const int rightX = containerRect.right() - margin - navNextBtn->width() + 1; + navPrevBtn->move(QPoint(leftX, yInOverlay)); + navNextBtn->move(QPoint(qMax(leftX + navPrevBtn->width(), rightX), yInOverlay)); navPrevBtn->raise(); navNextBtn->raise(); } else { @@ -2124,35 +1581,54 @@ void PreviewOverlay::navigatePrevious() void PreviewOverlay::keyPressEvent(QKeyEvent *event) { + bool handled = false; + switch (event->key()) { case Qt::Key_Escape: // Ensure playback fully stops before closing overlay stopPlayback(); emit closed(); + handled = true; break; case Qt::Key_Left: // CTRL+Left: Step backward one frame if (event->modifiers() & Qt::ControlModifier) { - if (isVideo || isSequence) { onStepPrevFrame(); return; } + if (isVideo || isSequence) { + onStepPrevFrame(); + handled = true; + break; + } break; } // Navigate to previous file (MainWindow will handle stopPlayback) navigatePrevious(); + handled = true; break; case Qt::Key_Right: // CTRL+Right: Step forward one frame if (event->modifiers() & Qt::ControlModifier) { - if (isVideo || isSequence) { onStepNextFrame(); return; } + if (isVideo || isSequence) { + onStepNextFrame(); + handled = true; + break; + } break; } // Navigate to next file (MainWindow will handle stopPlayback) navigateNext(); + handled = true; break; case Qt::Key_Period: // '.' next frame - if (isVideo || isSequence) { onStepNextFrame(); return; } + if (isVideo || isSequence) { + onStepNextFrame(); + handled = true; + } break; case Qt::Key_Comma: // ',' previous frame - if (isVideo || isSequence) { onStepPrevFrame(); return; } + if (isVideo || isSequence) { + onStepPrevFrame(); + handled = true; + } break; // JKL scrubbing (NLE-style playback control) @@ -2164,10 +1640,15 @@ void PreviewOverlay::keyPressEvent(QKeyEvent *event) playSequence(); } } else if (isVideo) { + if (!m_player) { + handled = true; + break; + } m_player->setPlaybackRate(-1.0); PLAYER_PLAY(); } - return; + handled = true; + break; case Qt::Key_K: // K = Pause/Stop if (isSequence) { @@ -2175,9 +1656,14 @@ void PreviewOverlay::keyPressEvent(QKeyEvent *event) pauseSequence(); } } else if (isVideo) { + if (!m_player) { + handled = true; + break; + } PLAYER_PAUSE(); } - return; + handled = true; + break; case Qt::Key_L: // L = Play forward if (isSequence) { @@ -2186,6 +1672,10 @@ void PreviewOverlay::keyPressEvent(QKeyEvent *event) playSequence(); } } else if (isVideo) { + if (!m_player) { + handled = true; + break; + } // If already playing forward, just ensure rate is 1.0 if (PLAYER_STATE() == TLRenderPlayer::PlaybackState::Playing && m_player->playbackRate() > 0) { @@ -2195,7 +1685,8 @@ void PreviewOverlay::keyPressEvent(QKeyEvent *event) PLAYER_PLAY(); } } - return; + handled = true; + break; #ifdef HAVE_QT_PDF case Qt::Key_Up: @@ -2215,10 +1706,18 @@ void PreviewOverlay::keyPressEvent(QKeyEvent *event) // Space toggles overlay visibility (consistent with File/Asset Manager) stopPlayback(); emit closed(); + handled = true; break; default: - QWidget::keyPressEvent(event); + break; } + + if (handled) { + event->accept(); + return; + } + + QWidget::keyPressEvent(event); } void PreviewOverlay::resizeEvent(QResizeEvent *event) @@ -2241,9 +1740,7 @@ void PreviewOverlay::resizeEvent(QResizeEvent *event) // Update annotation overlay geometry if enabled if (annotationModeEnabled && annotationOverlayView && annotationOverlayView->isVisible()) { - QPoint overlayPos = videoContainer->mapTo(this, QPoint(0, 0)); - annotationOverlayView->setGeometry(QRect(overlayPos, videoContainer->size())); - annotationOverlayScene->setSceneRect(0, 0, videoContainer->width(), videoContainer->height()); + syncAnnotationOverlayToVideo(annotationOverlayView, annotationOverlayScene, videoContainer); } } @@ -2271,8 +1768,11 @@ void PreviewOverlay::mousePressEvent(QMouseEvent *event) if (isVideo) { // Show controls on click + controlsPinned = false; setControlsVisible(true); controlsTimer->start(); + QWidget::mousePressEvent(event); + return; } else if (event->button() == Qt::MiddleButton) { // Start panning for images isPanning = true; @@ -2282,8 +1782,29 @@ void PreviewOverlay::mousePressEvent(QMouseEvent *event) QWidget::mousePressEvent(event); } +void PreviewOverlay::mouseMoveEvent(QMouseEvent *event) +{ + if (isVideo) { + setControlsVisible(true); + controlsTimer->start(); + } + QWidget::mouseMoveEvent(event); +} + +void PreviewOverlay::leaveEvent(QEvent *event) +{ + controlsHovering = false; + QWidget::leaveEvent(event); +} + void PreviewOverlay::wheelEvent(QWheelEvent *event) { + if (isVideo && m_renderWidget) { + m_renderWidget->zoomRelative(event->angleDelta().y() > 0 ? 1.15 : 0.85); + event->accept(); + return; + } + // Enable zoom for images and sequences (fallback if event reached overlay) if (stillImageView && stillImageView->isVisible() && !originalPixmap.isNull()) { double factor = event->angleDelta().y() > 0 ? 1.15 : 0.85; @@ -2302,6 +1823,17 @@ void PreviewOverlay::wheelEvent(QWheelEvent *event) bool PreviewOverlay::eventFilter(QObject* watched, QEvent* event) { + if ((watched == controlsWidget || watched == positionSlider || watched == playPauseBtn) && isVideo) { + if (event->type() == QEvent::Enter || event->type() == QEvent::MouseMove) { + controlsHovering = true; + setControlsVisible(true); + controlsTimer->start(); + } else if (event->type() == QEvent::Leave) { + controlsHovering = false; + controlsTimer->start(); + } + } + // Handle annotation mode mouse events on the scene if (annotationModeEnabled && (watched == imageView || (imageView && watched == imageView->viewport()) || watched == stillImageView || (stillImageView && watched == stillImageView->viewport()) || @@ -2336,7 +1868,11 @@ bool PreviewOverlay::eventFilter(QObject* watched, QEvent* event) } else { activeView = imageView; } - QPointF scenePos = activeView->mapToScene(mouseEvent->pos()); + QPoint viewPos = mouseEvent->pos(); + if (watched != activeView->viewport()) { + viewPos = activeView->mapFromGlobal(mouseEvent->globalPosition().toPoint()); + } + QPointF scenePos = activeView->mapToScene(viewPos); // Create a scene mouse event QGraphicsSceneMouseEvent sceneMouseEvent( @@ -2536,99 +2072,8 @@ void PreviewOverlay::zoomStillImage(double factor) void PreviewOverlay::showSequence(const QStringList &framePaths, const QString &sequenceName, int startFrame, int endFrame) { -#ifdef HAVE_TLRENDER - // tlRender-native sequence playback. - // We intentionally do not use the legacy RAM cache / per-frame OIIO path here. - // This fixes slow/blank sequence preview when OIIO is compiled out and enables - // proper scrubbing/playback via the tlRender engine. - - if (framePaths.isEmpty()) { - qWarning() << "[PreviewOverlay] showSequence called with empty frame list"; - return; - } - - currentFilePath = framePaths.first(); - currentFileType = QFileInfo(currentFilePath).suffix().toLower(); - - // Calculate duration from known frame range (we already know start/end from sequence grouping) - const int totalFrames = endFrame - startFrame + 1; - const double defaultFps = 24.0; - const qint64 knownDurationMs = static_cast((totalFrames / defaultFps) * 1000.0); - qDebug() << "[PreviewOverlay] Sequence range:" << startFrame << "-" << endFrame - << "totalFrames:" << totalFrames << "durationMs:" << knownDurationMs; - - // Treat sequences as video-like for timeline/scrubbing/controls. - isSequence = false; - isVideo = true; - sequencePlaying = false; - - // Make sure widget is shown and sized before loading content - show(); - raise(); - setFocus(); - - // Anchor nav arrows to the render widget for sequences - if (m_renderWidget) { - positionNavButtons(m_renderWidget); - } - - // Ensure image view is not used for tlRender sequences - imageView->hide(); - if (videoWidget) videoWidget->hide(); - if (m_renderWidget) m_renderWidget->show(); - - setPlaybackControlsVisible(true); - setControlsHeightForImage(false); - setControlsVisible(true); - - // Hide legacy per-image tone-map colorspace controls; OCIO handles color - if (colorSpaceLabel) colorSpaceLabel->hide(); - if (colorSpaceCombo) colorSpaceCombo->hide(); - - // Show OCIO controls for tlRender playback (sequences are treated like video here). - if (ocioEnableCheck) ocioEnableCheck->show(); - if (ocioConfigBtn) ocioConfigBtn->show(); - if (ocioInputLabel) ocioInputLabel->show(); - if (ocioInputCombo) ocioInputCombo->show(); - if (ocioDisplayLabel) ocioDisplayLabel->show(); - if (ocioDisplayCombo) ocioDisplayCombo->show(); - if (ocioViewLabel) ocioViewLabel->show(); - if (ocioViewCombo) ocioViewCombo->show(); - - // Show playback control widgets row - if (playbackControlsGroup) { - playbackControlsGroup->show(); - } - - // Stop any existing playback and load the sequence pattern - PLAYER_STOP(); - - fileNameLabel->setText(sequenceName); - setWindowTitle(tr("Preview - %1").arg(sequenceName)); - - const QString patternPath = SequenceDetector::toHashPatternPath(framePaths.first()); - qDebug() << "[PreviewOverlay] tlRender sequence load:" << framePaths.first() << "->" << patternPath; - - // Set slider range immediately using known frame range (don't wait for tlRender) - positionSlider->setRange(0, static_cast(knownDurationMs)); - positionSlider->setValue(0); - positionSlider->setTimelineContext(true, defaultFps); - updateVideoTimeDisplays(0, knownDurationMs); - detectedFps = defaultFps; - if (fpsLabel) fpsLabel->setText(QString::number(defaultFps, 'f', 1) + " fps"); - - applyOcioInputDefaults(framePaths.first()); - if (m_renderWidget) { - m_renderWidget->setFrameView(true); - } - m_player->load(patternPath); - // Do not auto-play sequences; keep same UX as legacy sequence preview. - m_player->pause(); - updatePlayPauseButton(); - - controlsTimer->start(); - return; -#endif + stopPlayback(); + resetAnnotationSession(); isSequence = true; isVideo = false; @@ -2639,19 +2084,16 @@ void PreviewOverlay::showSequence(const QStringList &framePaths, const QString & sequencePlaying = false; sequencePlayDirection = 1; // Default forward - // Check if this is an HDR/EXR sequence if (!framePaths.isEmpty()) { - QFileInfo fileInfo(framePaths.first()); - QString ext = fileInfo.suffix().toLower(); - isHDRImage = (ext == "exr" || ext == "hdr" || ext == "pic"); + currentFilePath = framePaths.first(); + currentFileType = QFileInfo(framePaths.first()).suffix().toLower(); } else { - isHDRImage = false; + currentFilePath = sequenceName; + currentFileType.clear(); } - // Make sure widget is shown and sized before loading content - show(); - raise(); - setFocus(); + // Make sure widget is shown and owns focus before loading content. + activatePreviewWindow(this, imageView); // Anchor nav arrows to the image viewport for sequences if (stillImageView) stillImageView->hide(); @@ -2669,6 +2111,8 @@ void PreviewOverlay::showSequence(const QStringList &framePaths, const QString & setPlaybackControlsVisible(true); setControlsHeightForImage(false); setControlsVisible(true); + controlsPinned = false; + controlsHovering = false; // Disable audio controls for image sequences (no audio) if (muteBtn) { muteBtn->setEnabled(false); @@ -2689,32 +2133,12 @@ void PreviewOverlay::showSequence(const QStringList &framePaths, const QString & fileNameLabel->setText(sequenceName); setWindowTitle(tr("Preview - %1").arg(sequenceName)); - // Always show colorspace selector for image sequences. - // Default: EXR -> Linear; others -> sRGB (user-changeable). - colorSpaceLabel->show(); - colorSpaceCombo->show(); - if (!sequenceFramePaths.isEmpty()) { - QFileInfo fi(sequenceFramePaths.first()); - const QString extLower = fi.suffix().toLower(); - if (extLower == "exr") { - currentColorSpace = OIIOImageLoader::ColorSpace::Linear; - colorSpaceCombo->blockSignals(true); - colorSpaceCombo->setCurrentIndex(2); // Linear - colorSpaceCombo->blockSignals(false); - } else { - currentColorSpace = OIIOImageLoader::ColorSpace::sRGB; - colorSpaceCombo->blockSignals(true); - colorSpaceCombo->setCurrentIndex(0); // sRGB - colorSpaceCombo->blockSignals(false); - } - } - // Clear cached frame visualization positionSlider->clearCachedFrames(); // Initialize frame cache for this sequence (only if enabled) if (frameCache && useCacheForSequences) { - frameCache->setSequence(framePaths, currentColorSpace); + frameCache->setSequence(framePaths); qDebug() << "[PreviewOverlay] Frame cache initialized for sequence with" << framePaths.size() << "frames"; // Prepare to receive cache progress updates (disconnect to avoid duplicates) @@ -2753,7 +2177,7 @@ void PreviewOverlay::showSequence(const QStringList &framePaths, const QString & QString framePath = sequenceFramePaths[0]; QImage image; if (OIIOImageLoader::isOIIOSupported(framePath)) { - image = OIIOImageLoader::loadImage(framePath, 0, 0, currentColorSpace); + image = OIIOImageLoader::loadImage(framePath, 0, 0); if (!image.isNull()) { originalPixmap = QPixmap::fromImage(image); } @@ -2832,7 +2256,7 @@ void PreviewOverlay::loadSequenceFrame(int frameIndex) QString framePath = sequenceFramePaths[frameIndex]; QImage image; if (OIIOImageLoader::isOIIOSupported(framePath)) { - image = OIIOImageLoader::loadImage(framePath, 0, 0, currentColorSpace); + image = OIIOImageLoader::loadImage(framePath, 0, 0); if (!image.isNull()) { originalPixmap = QPixmap::fromImage(image); } else { @@ -3006,73 +2430,49 @@ void PreviewOverlay::onSequenceTimerTick() // Handle looping if (currentSequenceFrame >= sequenceFramePaths.size()) { - currentSequenceFrame = 0; - // When looping, only kick prefetch if cache isn’t already full - if (frameCache && useCacheForSequences) { - const int need = qMin(frameCache->maxCacheSize(), sequenceFramePaths.size()); - if (frameCache->cachedFrameCount() < need) { - qDebug() << "[PreviewOverlay] Sequence looped; cache not full, restarting prefetch"; - frameCache->startPrefetch(0); + const int loopIndex = loopModeCombo ? loopModeCombo->currentIndex() : 0; + if (loopIndex == 1) { + stopSequence(); + return; + } + if (loopIndex == 2) { + sequencePlayDirection = -1; + currentSequenceFrame = qMax(0, sequenceFramePaths.size() - 2); + } else { + currentSequenceFrame = 0; + if (frameCache && useCacheForSequences) { + const int need = qMin(frameCache->maxCacheSize(), sequenceFramePaths.size()); + if (frameCache->cachedFrameCount() < need) { + qDebug() << "[PreviewOverlay] Sequence looped; cache not full, restarting prefetch"; + frameCache->startPrefetch(0); + } } } } else if (currentSequenceFrame < 0) { - // Loop back to end when playing in reverse - currentSequenceFrame = sequenceFramePaths.size() - 1; + const int loopIndex = loopModeCombo ? loopModeCombo->currentIndex() : 0; + if (loopIndex == 1) { + stopSequence(); + return; + } + if (loopIndex == 2) { + sequencePlayDirection = 1; + currentSequenceFrame = qMin(1, sequenceFramePaths.size() - 1); + } else { + currentSequenceFrame = sequenceFramePaths.size() - 1; + } } loadSequenceFrame(currentSequenceFrame); } -void PreviewOverlay::onColorSpaceChanged(int index) -{ - qDebug() << "[PreviewOverlay] Color space changed to index:" << index; - - // Update current color space - switch (index) { - case 0: - currentColorSpace = OIIOImageLoader::ColorSpace::sRGB; - qDebug() << "[PreviewOverlay] Switched to sRGB color space"; - break; - case 1: - currentColorSpace = OIIOImageLoader::ColorSpace::Rec709; - qDebug() << "[PreviewOverlay] Switched to Rec.709 color space"; - break; - case 2: - currentColorSpace = OIIOImageLoader::ColorSpace::Linear; - qDebug() << "[PreviewOverlay] Switched to Linear color space"; - break; - default: - currentColorSpace = OIIOImageLoader::ColorSpace::sRGB; - break; - } - - // Reload current frame/image with new color space - if (isSequence) { - qDebug() << "[PreviewOverlay] Reloading sequence frame with new color space"; - - // Clear cache and reinitialize with new color space (only if cache is enabled) - if (frameCache && useCacheForSequences) { - frameCache->setSequence(sequenceFramePaths, currentColorSpace); - // Clear cache visualization on the timeline and restart prefetch for accurate redraw - if (positionSlider) { - positionSlider->clearCachedFrames(); - } - frameCache->startPrefetch(currentSequenceFrame); - } - - loadSequenceFrame(currentSequenceFrame); - } else if (!currentFilePath.isEmpty() && isHDRImage) { - qDebug() << "[PreviewOverlay] Reloading image with new color space"; - showImage(currentFilePath); - } -} - void PreviewOverlay::stopPlayback() { qDebug() << "[PreviewOverlay] Stopping playback"; // Stop video playback - PLAYER_STOP(); + if (m_player) { + PLAYER_STOP(); + } // Stop sequence playback if (sequencePlaying) { @@ -3107,6 +2507,9 @@ void PreviewOverlay::onDurationChanged(qint64 duration) void PreviewOverlay::onPlayerPositionChanged(qint64 positionMs) { + if (!m_player) { + return; + } qDebug() << "[PreviewOverlay] onPlayerPositionChanged:" << "positionMs=" << positionMs << "slider range=[" << positionSlider->minimum() << "," << positionSlider->maximum() << "]" @@ -3131,10 +2534,11 @@ void PreviewOverlay::onPlayerPositionChanged(qint64 positionMs) void PreviewOverlay::onPlayerDurationChanged(qint64 durationMs) { - // Only update if tlRender reports a valid duration AND it's larger than what we have - // (we may have pre-set the range from known sequence metadata) - if (durationMs > 0 && durationMs > positionSlider->maximum()) { + if (durationMs > 0) { positionSlider->setRange(0, static_cast(durationMs)); + if (positionSlider->value() > durationMs) { + positionSlider->setValue(static_cast(durationMs)); + } } } @@ -3147,18 +2551,27 @@ void PreviewOverlay::onPlayerMediaInfo(const TLRenderPlayer::MediaInfo& info) << "Resolution:" << info.width << "x" << info.height << "Has Audio:" << info.hasAudio; - // Only update slider if tlRender reports a valid duration larger than what we have - // (we may have pre-set the range from known sequence metadata) - if (info.durationMs > 0 && info.durationMs > positionSlider->maximum()) { + if (info.durationMs > 0) { qDebug() << "[PreviewOverlay] Updating slider range to [0," << info.durationMs << "]"; positionSlider->setRange(0, info.durationMs); - } else if (info.durationMs <= 0) { + if (positionSlider->value() > info.durationMs) { + positionSlider->setValue(info.durationMs); + } + } else { qDebug() << "[PreviewOverlay] tlRender reported invalid duration, keeping current range [0," << positionSlider->maximum() << "]"; } if (info.fps > 0.0) { detectedFps = info.fps; - if (fpsLabel) fpsLabel->setText(QString::number(info.fps, 'f', 1) + " fps"); + if (fpsLabel && currentPlaybackFps <= 0.0) fpsLabel->setText(QString::number(info.fps, 'f', 1) + " fps"); + } + + if (annotationModeEnabled && isVideo && annotationOverlayView && annotationOverlayView->isVisible() && + info.width > 0 && info.height > 0) { + annotationOverlayScene->setSceneRect(QRectF(0, 0, info.width, info.height)); + if (QWidget* videoContainer = activeVideoWidget()) { + syncAnnotationOverlayToVideo(annotationOverlayView, annotationOverlayScene, videoContainer); + } } // Enable/disable audio controls based on actual media @@ -3177,6 +2590,11 @@ void PreviewOverlay::onPlayerMediaInfo(const TLRenderPlayer::MediaInfo& info) void PreviewOverlay::onPlayerPlaybackStateChanged(TLRenderPlayer::PlaybackState state) { + if (!m_player && state != TLRenderPlayer::PlaybackState::Playing) { + if (playPauseBtn) playPauseBtn->setIcon(playIcon); + return; + } + qDebug() << "[PreviewOverlay] tlRender state changed to:" << static_cast(state); switch (state) { @@ -3186,7 +2604,7 @@ void PreviewOverlay::onPlayerPlaybackStateChanged(TLRenderPlayer::PlaybackState case TLRenderPlayer::PlaybackState::Paused: case TLRenderPlayer::PlaybackState::Stopped: if (playPauseBtn) playPauseBtn->setIcon(playIcon); - if (isVideo && lastKnownPosition >= 0) { + if (isVideo && m_player && lastKnownPosition >= 0) { qint64 durationMs = m_player->duration(); updateVideoTimeDisplays(lastKnownPosition, durationMs); } @@ -3204,8 +2622,17 @@ void PreviewOverlay::onPlayerError(const QString& errorString) void PreviewOverlay::onPlayerEndOfStream() { qDebug() << "[PreviewOverlay] tlRender end of stream reached"; - m_player->stop(); - m_player->seek(0); + if (!m_player) { + return; + } + + const TLRenderPlayer::LoopMode loopMode = m_player->loopMode(); + if (loopMode == TLRenderPlayer::LoopMode::Once) { + m_player->pause(); + } else { + m_player->stop(); + m_player->seek(0); + } if (playPauseBtn) playPauseBtn->setIcon(playIcon); } @@ -3237,13 +2664,13 @@ void PreviewOverlay::showText(const QString &filePath) } // UTF-16 LE BOM if (n >= 2 && b[0] == 0xFF && b[1] == 0xFE) { - return QString::fromUtf16(reinterpret_cast(b + 2), (n - 2) / 2); + return QString::fromUtf16(reinterpret_cast(b + 2), (n - 2) / 2); } // UTF-16 BE BOM if (n >= 2 && b[0] == 0xFE && b[1] == 0xFF) { const int ulen = (n - 2) / 2; - QVector buf; buf.resize(ulen); - for (int i = 0; i < ulen; ++i) buf[i] = (ushort(b[2 + 2*i]) << 8) | ushort(b[2 + 2*i + 1]); + QVector buf; buf.resize(ulen); + for (int i = 0; i < ulen; ++i) buf[i] = char16_t((ushort(b[2 + 2*i]) << 8) | ushort(b[2 + 2*i + 1])); return QString::fromUtf16(buf.constData(), ulen); } // Heuristic: UTF-16 without BOM (look for lots of NULs at odd/even positions) @@ -3256,10 +2683,10 @@ void PreviewOverlay::showText(const QString &filePath) const bool le = (zeroOdd > zeroEven); const int ulen = n / 2; if (le) { - return QString::fromUtf16(reinterpret_cast(b), ulen); + return QString::fromUtf16(reinterpret_cast(b), ulen); } else { - QVector buf; buf.resize(ulen); - for (int i = 0; i < ulen; ++i) buf[i] = (ushort(b[2*i]) << 8) | ushort(b[2*i + 1]); + QVector buf; buf.resize(ulen); + for (int i = 0; i < ulen; ++i) buf[i] = char16_t((ushort(b[2*i]) << 8) | ushort(b[2*i + 1])); return QString::fromUtf16(buf.constData(), ulen); } } @@ -3274,15 +2701,6 @@ void PreviewOverlay::showText(const QString &filePath) textView->setPlainText(decodeText(data)); } else { textView->setPlainText("Preview not available"); - // Show OCIO controls for tlRender sequence playback - if (ocioEnableCheck) ocioEnableCheck->show(); - if (ocioConfigBtn) ocioConfigBtn->show(); - if (ocioInputLabel) ocioInputLabel->show(); - if (ocioInputCombo) ocioInputCombo->show(); - if (ocioDisplayLabel) ocioDisplayLabel->show(); - if (ocioDisplayCombo) ocioDisplayCombo->show(); - if (ocioViewLabel) ocioViewLabel->show(); - if (ocioViewCombo) ocioViewCombo->show(); } textView->show(); positionNavButtons(textView); @@ -3358,7 +2776,6 @@ void PreviewOverlay::showXlsx(const QString &filePath) { // Hide other content hideVideoWidgets(); - PLAYER_PLAY(); #ifdef HAVE_QT_PDF if (pdfView) pdfView->hide(); #endif @@ -3367,7 +2784,6 @@ void PreviewOverlay::showXlsx(const QString &filePath) setControlsVisible(false); if (alphaCheck) alphaCheck->hide(); - PLAYER_PLAY(); // Ensure overlay is visible for Office previews show(); raise(); @@ -3477,7 +2893,6 @@ void PreviewOverlay::moveEvent(QMoveEvent *event) SequenceFrameCache::SequenceFrameCache(QObject *parent) : QObject(parent) - , m_colorSpace(OIIOImageLoader::ColorSpace::sRGB) , m_cache(100 * 50 * 1024) // Max cost in KB: will be updated based on settings , m_threadPool(QThreadPool::globalInstance()) , m_maxCacheSize(100) @@ -3538,13 +2953,12 @@ SequenceFrameCache::~SequenceFrameCache() qDebug() << "[SequenceFrameCache::~SequenceFrameCache] Destructor complete"; } -void SequenceFrameCache::setSequence(const QStringList &framePaths, OIIOImageLoader::ColorSpace colorSpace) +void SequenceFrameCache::setSequence(const QStringList &framePaths) { QMutexLocker locker(&m_mutex); stopPrefetch(); clearCache(); m_framePaths = framePaths; - m_colorSpace = colorSpace; m_currentFrame = 0; m_windowStart = 0; m_windowEnd = qMax(-1, qMin((int)framePaths.size()-1, m_maxCacheSize-1)); @@ -3720,7 +3134,7 @@ void SequenceFrameCache::scheduleFrameIfNeeded(int frameIndex, quint64 epoch, bo if (m_cache.contains(frameIndex) || m_pendingFrames.contains(frameIndex) || frameIndex < 0 || frameIndex >= m_framePaths.size()) return; m_pendingFrames.insert(frameIndex); QString framePath = m_framePaths[frameIndex]; - FrameLoaderWorker *worker = new FrameLoaderWorker(this, frameIndex, framePath, m_colorSpace, epoch); + FrameLoaderWorker *worker = new FrameLoaderWorker(this, frameIndex, framePath, epoch); // CRITICAL: Use Qt::QueuedConnection with context object to ensure auto-disconnect // This prevents crashes when SequenceFrameCache is destroyed while workers are running @@ -3770,7 +3184,7 @@ QPixmap SequenceFrameCache::loadFrame(int frameIndex) // Try OpenImageIO first for supported formats if (OIIOImageLoader::isOIIOSupported(framePath)) { - image = OIIOImageLoader::loadImage(framePath, 0, 0, m_colorSpace); + image = OIIOImageLoader::loadImage(framePath, 0, 0); } // Fall back to Qt loader @@ -3791,11 +3205,11 @@ QPixmap SequenceFrameCache::loadFrame(int frameIndex) // ============================================================================ FrameLoaderWorker::FrameLoaderWorker(SequenceFrameCache *cache, int frameIndex, - const QString &framePath, OIIOImageLoader::ColorSpace colorSpace, quint64 epoch) + const QString &framePath, + quint64 epoch) : m_cache(cache) , m_frameIndex(frameIndex) , m_framePath(framePath) - , m_colorSpace(colorSpace) , m_epoch(epoch) { setAutoDelete(true); @@ -3818,7 +3232,7 @@ void FrameLoaderWorker::run() // Try OpenImageIO first for supported formats if (OIIOImageLoader::isOIIOSupported(m_framePath)) { - image = OIIOImageLoader::loadImage(m_framePath, 0, 0, m_colorSpace); + image = OIIOImageLoader::loadImage(m_framePath, 0, 0); // Re-check cancellation after potentially expensive I/O if (!cache->isEpochCurrent(m_epoch)) { return; @@ -3867,17 +3281,38 @@ qint64 SequenceFrameCache::getAvailableRAM() return static_cast(memInfo.ullAvailPhys / (1024 * 1024)); } #elif defined(Q_OS_LINUX) - // Linux: Read from /proc/meminfo + struct sysinfo info; + if (sysinfo(&info) == 0) { + const qint64 unit = info.mem_unit > 0 ? static_cast(info.mem_unit) : 1; + const qint64 availableBytes = static_cast(info.totalram) * unit; + if (availableBytes > 0) { + return availableBytes / (1024 * 1024); + } + } + + // Linux fallback: read from /proc/meminfo QFile file("/proc/meminfo"); if (file.open(QIODevice::ReadOnly)) { QTextStream in(&file); while (!in.atEnd()) { - QString line = in.readLine(); + const QString line = in.readLine().trimmed(); if (line.startsWith("MemAvailable:")) { - QStringList parts = line.split(QRegularExpression("\\s+")); + const QRegularExpression re(QStringLiteral("^MemAvailable:\\s+(\\d+)\\s*kB$"), QRegularExpression::CaseInsensitiveOption); + const QRegularExpressionMatch match = re.match(line); + if (match.hasMatch()) { + const qint64 kb = match.captured(1).toLongLong(); + if (kb > 0) { + return kb / 1024; // Convert KB to MB + } + } + + const QStringList parts = line.split(QRegularExpression(QStringLiteral("\\s+")), Qt::SkipEmptyParts); if (parts.size() >= 2) { - qint64 kb = parts[1].toLongLong(); - return kb / 1024; // Convert KB to MB + bool ok = false; + const qint64 kb = parts[1].toLongLong(&ok); + if (ok && kb > 0) { + return kb / 1024; + } } } } @@ -3940,30 +3375,27 @@ void PreviewOverlay::setupAnnotationToolbar() "QPushButton:hover { background-color: #555; }" "QPushButton:checked { background-color: #58a6ff; }"; - // Load icons from Icons/Annotation folder - QString iconPath = QCoreApplication::applicationDirPath() + "/Icons/Annotation/"; - // Selection/move tool - QPushButton* selectToolBtn = new QPushButton(annotationToolbar); - selectToolBtn->setIcon(QIcon(iconPath + "cursor.png")); + selectToolBtn = new QPushButton(annotationToolbar); + selectToolBtn->setIcon(loadRawPngIcon(QStringLiteral("Annotation/cursor.png"))); selectToolBtn->setIconSize(QSize(24, 24)); selectToolBtn->setCheckable(true); selectToolBtn->setChecked(true); // Default mode selectToolBtn->setStyleSheet(buttonStyle); selectToolBtn->setToolTip("Select and move annotations"); - connect(selectToolBtn, &QPushButton::clicked, this, [this, selectToolBtn]() { + connect(selectToolBtn, &QPushButton::clicked, this, [this]() { + if (selectToolBtn) selectToolBtn->setChecked(true); penToolBtn->setChecked(false); textToolBtn->setChecked(false); rectangleToolBtn->setChecked(false); ellipseToolBtn->setChecked(false); arrowToolBtn->setChecked(false); - selectToolBtn->setChecked(true); annotationLayer->setDrawMode(AnnotationLayer::Select); }); toolbarLayout->addWidget(selectToolBtn); penToolBtn = new QPushButton(annotationToolbar); - penToolBtn->setIcon(QIcon(iconPath + "paint.png")); + penToolBtn->setIcon(loadRawPngIcon(QStringLiteral("Annotation/paint.png"))); penToolBtn->setIconSize(QSize(24, 24)); penToolBtn->setCheckable(true); penToolBtn->setStyleSheet(buttonStyle); @@ -3972,7 +3404,7 @@ void PreviewOverlay::setupAnnotationToolbar() toolbarLayout->addWidget(penToolBtn); textToolBtn = new QPushButton(annotationToolbar); - textToolBtn->setIcon(QIcon(iconPath + "text.png")); + textToolBtn->setIcon(loadRawPngIcon(QStringLiteral("Annotation/text.png"))); textToolBtn->setIconSize(QSize(24, 24)); textToolBtn->setCheckable(true); textToolBtn->setStyleSheet(buttonStyle); @@ -3981,7 +3413,7 @@ void PreviewOverlay::setupAnnotationToolbar() toolbarLayout->addWidget(textToolBtn); rectangleToolBtn = new QPushButton(annotationToolbar); - rectangleToolBtn->setIcon(QIcon(iconPath + "Rectangle.png")); + rectangleToolBtn->setIcon(loadRawPngIcon(QStringLiteral("Annotation/Rectangle.png"))); rectangleToolBtn->setIconSize(QSize(24, 24)); rectangleToolBtn->setCheckable(true); rectangleToolBtn->setStyleSheet(buttonStyle); @@ -3990,7 +3422,7 @@ void PreviewOverlay::setupAnnotationToolbar() toolbarLayout->addWidget(rectangleToolBtn); ellipseToolBtn = new QPushButton(annotationToolbar); - ellipseToolBtn->setIcon(QIcon(iconPath + "circle.png")); + ellipseToolBtn->setIcon(loadRawPngIcon(QStringLiteral("Annotation/circle.png"))); ellipseToolBtn->setIconSize(QSize(24, 24)); ellipseToolBtn->setCheckable(true); ellipseToolBtn->setStyleSheet(buttonStyle); @@ -3999,7 +3431,7 @@ void PreviewOverlay::setupAnnotationToolbar() toolbarLayout->addWidget(ellipseToolBtn); arrowToolBtn = new QPushButton(annotationToolbar); - arrowToolBtn->setIcon(QIcon(iconPath + "arrow.png")); + arrowToolBtn->setIcon(loadRawPngIcon(QStringLiteral("Annotation/arrow.png"))); arrowToolBtn->setIconSize(QSize(24, 24)); arrowToolBtn->setCheckable(true); arrowToolBtn->setStyleSheet(buttonStyle); @@ -4040,7 +3472,7 @@ void PreviewOverlay::setupAnnotationToolbar() // Undo/Redo buttons with icons undoBtn = new QPushButton(annotationToolbar); - undoBtn->setIcon(QIcon(iconPath + "undo.png")); + undoBtn->setIcon(loadRawPngIcon(QStringLiteral("Annotation/undo.png"))); undoBtn->setIconSize(QSize(24, 24)); undoBtn->setStyleSheet(buttonStyle); undoBtn->setToolTip("Undo (Ctrl+Z)"); @@ -4048,7 +3480,7 @@ void PreviewOverlay::setupAnnotationToolbar() toolbarLayout->addWidget(undoBtn); redoBtn = new QPushButton(annotationToolbar); - redoBtn->setIcon(QIcon(iconPath + "redo.png")); + redoBtn->setIcon(loadRawPngIcon(QStringLiteral("Annotation/redo.png"))); redoBtn->setIconSize(QSize(24, 24)); redoBtn->setStyleSheet(buttonStyle); redoBtn->setToolTip("Redo (Ctrl+Y)"); @@ -4057,7 +3489,7 @@ void PreviewOverlay::setupAnnotationToolbar() // Clear and save buttons with icons clearAnnotationsBtn = new QPushButton(annotationToolbar); - clearAnnotationsBtn->setIcon(QIcon(iconPath + "clear.png")); + clearAnnotationsBtn->setIcon(loadRawPngIcon(QStringLiteral("Annotation/clear.png"))); clearAnnotationsBtn->setIconSize(QSize(24, 24)); clearAnnotationsBtn->setStyleSheet(buttonStyle); clearAnnotationsBtn->setToolTip("Clear all annotations on current frame"); @@ -4065,7 +3497,7 @@ void PreviewOverlay::setupAnnotationToolbar() toolbarLayout->addWidget(clearAnnotationsBtn); saveFrameBtn = new QPushButton(annotationToolbar); - saveFrameBtn->setIcon(QIcon(iconPath + "save.png")); + saveFrameBtn->setIcon(loadRawPngIcon(QStringLiteral("Annotation/save.png"))); saveFrameBtn->setIconSize(QSize(24, 24)); saveFrameBtn->setStyleSheet(buttonStyle); saveFrameBtn->setToolTip("Save annotated frame (Ctrl+S)"); @@ -4073,7 +3505,7 @@ void PreviewOverlay::setupAnnotationToolbar() toolbarLayout->addWidget(saveFrameBtn); saveAllFramesBtn = new QPushButton(annotationToolbar); - saveAllFramesBtn->setIcon(QIcon(iconPath + "save all.png")); + saveAllFramesBtn->setIcon(loadRawPngIcon(QStringLiteral("Annotation/save all.png"))); saveAllFramesBtn->setIconSize(QSize(24, 24)); saveAllFramesBtn->setStyleSheet(buttonStyle); saveAllFramesBtn->setToolTip("Save all annotated frames"); @@ -4093,6 +3525,14 @@ void PreviewOverlay::enableAnnotationMode(bool enable) annotationModeEnabled = enable; if (enable) { + if (isVideo && !m_player) { + annotationModeEnabled = false; + if (toggleAnnotationBtn) { + toggleAnnotationBtn->setChecked(false); + } + return; + } + // Show annotation toolbar if (annotationToolbar) { annotationToolbar->show(); @@ -4118,8 +3558,8 @@ void PreviewOverlay::enableAnnotationMode(bool enable) } } - // For videos, capture current frame and switch to imageView for annotation - // This works around Qt transparency issues with native video windows + // For videos, keep the live tlRender surface visible and draw annotations in a + // transparent overlay layered above it. if (isVideo) { // Initialize explicit frame tracking from current position double fps = detectedFps > 0.0 ? detectedFps : 24.0; @@ -4127,23 +3567,48 @@ void PreviewOverlay::enableAnnotationMode(bool enable) qDebug() << "[PreviewOverlay] Entering annotation mode - initialized frame to:" << lastKnownVideoFrame; QImage videoFrame = m_player->getCurrentFrame(); + const TLRenderPlayer::MediaInfo info = m_player->mediaInfo(); + const QSize overlayFrameSize = !videoFrame.isNull() + ? videoFrame.size() + : QSize(info.width, info.height); if (!videoFrame.isNull()) { originalPixmap = QPixmap::fromImage(videoFrame); - - // Switch from video widget to image view - hideVideoWidgets(); - if (stillImageView) stillImageView->hide(); - imageView->show(); - - // Display captured frame in imageView - imageScene->clear(); - imageItem = imageScene->addPixmap(originalPixmap); - imageScene->setSceneRect(originalPixmap.rect()); - fitImageToView(); - - qDebug() << "[PreviewOverlay] Video frame captured for annotation"; + } + + if (!overlayFrameSize.isEmpty()) { + annotationLayer->setScene(annotationOverlayScene); + annotationOverlayScene->setSceneRect(QRectF(QPointF(0, 0), QSizeF(overlayFrameSize))); + if (QWidget* videoContainer = activeVideoWidget()) { + syncAnnotationOverlayToVideo(annotationOverlayView, annotationOverlayScene, videoContainer); + } + annotationOverlayView->show(); + annotationOverlayView->raise(); + annotationOverlayView->viewport()->update(); + QTimer::singleShot(0, this, [this]() { + if (!annotationModeEnabled || !isVideo || !annotationOverlayView || !annotationOverlayScene) { + return; + } + if (QWidget* videoContainer = activeVideoWidget()) { + syncAnnotationOverlayToVideo(annotationOverlayView, annotationOverlayScene, videoContainer); + } + annotationOverlayView->raise(); + annotationOverlayView->viewport()->update(); + }); + if (controlsWidget) { + controlsPinned = true; + setControlsVisible(true); + controlsWidget->raise(); + } + if (annotationToolbar) { + annotationToolbar->raise(); + } + if (navPrevBtn) navPrevBtn->raise(); + if (navNextBtn) navNextBtn->raise(); + activatePreviewWindow(this, annotationOverlayView); + + qDebug() << "[PreviewOverlay] Video annotation overlay armed for live viewport"; } else { - qWarning() << "[PreviewOverlay] Failed to capture video frame - annotation disabled"; + qWarning() << "[PreviewOverlay] Failed to size video annotation overlay - annotation disabled"; toggleAnnotationBtn->setChecked(false); annotationModeEnabled = false; if (annotationToolbar) { @@ -4151,12 +3616,12 @@ void PreviewOverlay::enableAnnotationMode(bool enable) } return; } - - // Use regular imageScene for video annotations - annotationLayer->setScene(imageScene); } else { // For images/sequences, use regular imageScene annotationLayer->setScene(imageScene); + if (annotationOverlayView) { + annotationOverlayView->hide(); + } } // Enable scene interaction for annotations @@ -4170,9 +3635,34 @@ void PreviewOverlay::enableAnnotationMode(bool enable) int frameIndex = isSequence ? currentSequenceFrame : (isVideo ? getVideoFrameNumber() : 0); currentAnnotatedFrame = frameIndex; loadFrameAnnotations(frameIndex); + + // Align the logical annotation mode with the currently checked toolbar state + // when entering a fresh annotation session. This avoids starting in None + // while the UI shows Select or another tool as active. + if (annotationLayer->currentMode() == AnnotationLayer::None) { + if (penToolBtn && penToolBtn->isChecked()) { + annotationLayer->setDrawMode(AnnotationLayer::Pen); + } else if (textToolBtn && textToolBtn->isChecked()) { + annotationLayer->setDrawMode(AnnotationLayer::Text); + } else if (rectangleToolBtn && rectangleToolBtn->isChecked()) { + annotationLayer->setDrawMode(AnnotationLayer::Rectangle); + } else if (ellipseToolBtn && ellipseToolBtn->isChecked()) { + annotationLayer->setDrawMode(AnnotationLayer::Ellipse); + } else if (arrowToolBtn && arrowToolBtn->isChecked()) { + annotationLayer->setDrawMode(AnnotationLayer::Arrow); + } else { + annotationLayer->setDrawMode(AnnotationLayer::Select); + if (selectToolBtn) selectToolBtn->setChecked(true); + if (penToolBtn) penToolBtn->setChecked(false); + if (textToolBtn) textToolBtn->setChecked(false); + if (rectangleToolBtn) rectangleToolBtn->setChecked(false); + if (ellipseToolBtn) ellipseToolBtn->setChecked(false); + if (arrowToolBtn) arrowToolBtn->setChecked(false); + } + } - // Set default to select mode (for moving/editing) - annotationLayer->setDrawMode(AnnotationLayer::Select); + // Keep the currently selected annotation tool/mode when entering annotation mode. + // Forcing Select here prevents drawing tools from working on video. } else { // Save annotations before closing editor saveCurrentFrameAnnotations(); @@ -4185,18 +3675,20 @@ void PreviewOverlay::enableAnnotationMode(bool enable) // For videos, restore video playback if (isVideo) { // Clear annotations from scene (they're saved in frameAnnotations) + const QSignalBlocker blocker(annotationLayer); annotationLayer->clearAnnotations(); - - // Switch back to video widget - imageView->hide(); + annotationLayer->setScene(imageScene); + if (annotationOverlayView) { + annotationOverlayView->hide(); + } if (QWidget* videoContainer = activeVideoWidget()) { videoContainer->show(); + videoContainer->raise(); } - - // Clear imageScene - imageScene->clear(); - imageItem = nullptr; - originalPixmap = QPixmap(); + controlsPinned = false; + controlsHovering = false; + setControlsVisible(true); + controlsTimer->start(); qDebug() << "[PreviewOverlay] Restored video playback from annotation mode"; } @@ -4213,6 +3705,43 @@ void PreviewOverlay::enableAnnotationMode(bool enable) } } +void PreviewOverlay::resetAnnotationSession() +{ + currentAnnotatedFrame = -1; + frameAnnotations.clear(); + annotatedFrameIndices.clear(); + + annotationModeEnabled = false; + + if (annotationLayer) { + const QSignalBlocker blocker(annotationLayer); + annotationLayer->clearAnnotations(); + annotationLayer->setScene(imageScene); + annotationLayer->setDrawMode(AnnotationLayer::None); + } + + if (annotationToolbar) { + annotationToolbar->hide(); + } + + if (annotationOverlayView) { + annotationOverlayView->hide(); + } + + if (toggleAnnotationBtn) { + const QSignalBlocker blocker(toggleAnnotationBtn); + toggleAnnotationBtn->setChecked(false); + } + + if (positionSlider) { + positionSlider->clearAnnotatedFrames(); + } + + if (saveAllFramesBtn) { + saveAllFramesBtn->hide(); + } +} + void PreviewOverlay::onToggleAnnotation() { enableAnnotationMode(toggleAnnotationBtn->isChecked()); @@ -4221,6 +3750,7 @@ void PreviewOverlay::onToggleAnnotation() void PreviewOverlay::onAnnotationToolSelected() { // Uncheck all tool buttons + if (selectToolBtn) selectToolBtn->setChecked(false); penToolBtn->setChecked(false); textToolBtn->setChecked(false); rectangleToolBtn->setChecked(false); @@ -4242,6 +3772,8 @@ void PreviewOverlay::onAnnotationToolSelected() annotationLayer->setDrawMode(AnnotationLayer::Ellipse); } else if (clicked == arrowToolBtn) { annotationLayer->setDrawMode(AnnotationLayer::Arrow); + } else if (clicked == selectToolBtn) { + annotationLayer->setDrawMode(AnnotationLayer::Select); } } } @@ -4271,7 +3803,7 @@ void PreviewOverlay::onClearAnnotations() annotationLayer->clearAnnotations(); // Clear annotation marker for current frame - int frameIndex = isSequence ? currentAnnotatedFrame : 0; + int frameIndex = isSequence ? currentAnnotatedFrame : (isVideo ? currentAnnotatedFrame : 0); if (frameIndex >= 0) { frameAnnotations.remove(frameIndex); annotatedFrameIndices.remove(frameIndex); @@ -4333,6 +3865,10 @@ void PreviewOverlay::onSaveAllAnnotatedFrames() // Save current frame/time state to restore later int originalFrame = isSequence ? currentSequenceFrame : (isVideo ? getVideoFrameNumber() : 0); + if (isVideo && !m_player) { + QMessageBox::warning(this, "Export Annotated Frames", "Video player is not available."); + return; + } bool wasPlaying = (PLAYER_STATE() == PLAYER_STATE_PLAYING); if (isVideo && wasPlaying) { PLAYER_PAUSE(); @@ -4480,7 +4016,9 @@ void PreviewOverlay::saveCurrentFrameAnnotations() void PreviewOverlay::loadFrameAnnotations(int frameIndex) { qDebug() << "[PreviewOverlay] Loading annotations for frame" << frameIndex; - + + const QSignalBlocker blocker(annotationLayer); + // Clear current annotations annotationLayer->clearAnnotations(); @@ -4499,7 +4037,13 @@ void PreviewOverlay::loadFrameAnnotations(int frameIndex) QImage PreviewOverlay::captureCurrentFrame() { if (isVideo) { - // For video, capture current frame from player + if (!originalPixmap.isNull()) { + return originalPixmap.toImage(); + } + if (!m_player) { + return QImage(); + } + // For video fallback, capture current frame from player QImage frame = m_player->getCurrentFrame(); if (frame.isNull()) { qWarning() << "[PreviewOverlay] Failed to capture video frame for annotation"; @@ -4553,7 +4097,7 @@ void PreviewOverlay::exportAnnotatedFrame(const QString& filePath, const QString int PreviewOverlay::getVideoFrameNumber() const { - if (!isVideo) return 0; + if (!isVideo || !m_player) return 0; // If we have an explicitly tracked frame number from seek/step operations, // use it directly for frame-perfect annotation positioning @@ -4578,7 +4122,7 @@ int PreviewOverlay::getVideoFrameNumber() const void PreviewOverlay::updateVideoAnnotationFrame() { - if (!isVideo || !annotationModeEnabled) { + if (!isVideo || !annotationModeEnabled || !m_player) { return; } @@ -4598,17 +4142,28 @@ void PreviewOverlay::updateVideoAnnotationFrame() // Capture new frame (this is slow but necessary for accuracy) // Use a single-shot timer to avoid blocking QTimer::singleShot(0, this, [this, newFrameIndex, previousFrame]() { + Q_UNUSED(previousFrame); + if (!m_player) { + return; + } QImage videoFrame = m_player->getCurrentFrame(); - if (!videoFrame.isNull() && imageItem) { + if (!videoFrame.isNull()) { originalPixmap = QPixmap::fromImage(videoFrame); - imageItem->setPixmap(originalPixmap); - - // Load annotations for this frame - loadFrameAnnotations(newFrameIndex); - - qDebug() << "[PreviewOverlay] Updated video annotation frame at time" << newFrameIndex - << "- annotated frames:" << annotatedFrameIndices.size(); + if (!annotationOverlayScene->sceneRect().isEmpty() && + annotationOverlayScene->sceneRect().size() != QSizeF(videoFrame.size())) { + annotationOverlayScene->setSceneRect(QRectF(QPointF(0, 0), QSizeF(videoFrame.size()))); + if (QWidget* videoContainer = activeVideoWidget()) { + syncAnnotationOverlayToVideo(annotationOverlayView, annotationOverlayScene, videoContainer); + } + } } + + loadFrameAnnotations(newFrameIndex); + if (annotationOverlayView && annotationOverlayView->isVisible()) { + annotationOverlayView->viewport()->update(); + } + + qDebug() << "[PreviewOverlay] Updated video annotation frame at time" << newFrameIndex + << "- annotated frames:" << annotatedFrameIndices.size(); }); } - diff --git a/native/qt6/src/preview_overlay.h b/native/qt6/src/preview_overlay.h index e4013766..4c2f68f8 100644 --- a/native/qt6/src/preview_overlay.h +++ b/native/qt6/src/preview_overlay.h @@ -80,6 +80,7 @@ class CachedFrameSlider : public QSlider explicit CachedFrameSlider(Qt::Orientation orientation, QWidget *parent = nullptr) : QSlider(orientation, parent) { + setMouseTracking(true); } /** @@ -168,6 +169,45 @@ class CachedFrameSlider : public QSlider } protected: + void mousePressEvent(QMouseEvent *event) override + { + if (event->button() == Qt::LeftButton) { + const int newValue = pixelPosToRangeValue(event->position().toPoint()); + setSliderDown(true); + setValue(newValue); + emit sliderPressed(); + emit sliderMoved(newValue); + event->accept(); + return; + } + QSlider::mousePressEvent(event); + } + + void mouseMoveEvent(QMouseEvent *event) override + { + if (isSliderDown() && (event->buttons() & Qt::LeftButton)) { + const int newValue = pixelPosToRangeValue(event->position().toPoint()); + setValue(newValue); + emit sliderMoved(newValue); + event->accept(); + return; + } + QSlider::mouseMoveEvent(event); + } + + void mouseReleaseEvent(QMouseEvent *event) override + { + if (event->button() == Qt::LeftButton && isSliderDown()) { + const int newValue = pixelPosToRangeValue(event->position().toPoint()); + setValue(newValue); + setSliderDown(false); + emit sliderReleased(); + event->accept(); + return; + } + QSlider::mouseReleaseEvent(event); + } + // Custom paint event to draw cached frame indicators // Draws a thin red line above the timeline groove showing which frames are in cache void paintEvent(QPaintEvent *event) override @@ -277,6 +317,17 @@ class CachedFrameSlider : public QSlider } private: + int pixelPosToRangeValue(const QPoint& pos) const + { + QStyleOptionSlider opt; + const_cast(this)->initStyleOption(&opt); + const QRect grooveRect = style()->subControlRect(QStyle::CC_Slider, &opt, QStyle::SC_SliderGroove, this); + const int span = qMax(1, grooveRect.width() - 1); + const int x = qBound(grooveRect.left(), pos.x(), grooveRect.right()); + const double t = static_cast(x - grooveRect.left()) / span; + return minimum() + qRound(t * (maximum() - minimum())); + } + bool m_isVideo = true; double m_fps = 24.0; QSet m_cachedFrames; @@ -366,6 +417,8 @@ class PreviewOverlay : public QWidget void resizeEvent(QResizeEvent *event) override; void moveEvent(QMoveEvent *event) override; void mousePressEvent(QMouseEvent *event) override; + void mouseMoveEvent(QMouseEvent *event) override; + void leaveEvent(QEvent *event) override; void wheelEvent(QWheelEvent *event) override; bool eventFilter(QObject* watched, QEvent* event) override; @@ -383,7 +436,6 @@ private slots: void hideControls(); void onSequenceTimerTick(); - void onColorSpaceChanged(int index); // TLRenderPlayer signal handlers void onPlayerPositionChanged(qint64 positionMs); @@ -442,6 +494,7 @@ private slots: // Annotation helpers void setupAnnotationToolbar(); void enableAnnotationMode(bool enable); + void resetAnnotationSession(); void saveCurrentFrameAnnotations(); void loadFrameAnnotations(int frameIndex); QImage captureCurrentFrame(); @@ -449,11 +502,8 @@ private slots: void updateVideoAnnotationFrame(); // Update frame and handle per-frame annotations for videos int getVideoFrameNumber() const; // Calculate frame number from current position and FPS -#ifdef HAVE_TLRENDER - void populateOcioInputColorspaces(const QStringList& colorspaces); - void applyOcioInputDefaults(const QString& filePath); - QString defaultOcioInputName(const QString& filePath) const; -#endif + void ensurePlayer(); + void ensureRenderWidget(); // UI Components QGraphicsView *imageView; @@ -477,33 +527,11 @@ private slots: QPushButton *closeBtn; QLabel *fileNameLabel; - QComboBox *colorSpaceCombo; - QLabel *colorSpaceLabel; - -#ifdef HAVE_TLRENDER - // OCIO (ACES) UI controls for tlRender playback - QCheckBox *ocioEnableCheck = nullptr; - QLabel *ocioInputLabel = nullptr; - QComboBox *ocioInputCombo = nullptr; - QLabel *ocioDisplayLabel = nullptr; - QComboBox *ocioDisplayCombo = nullptr; - QLabel *ocioViewLabel = nullptr; - QComboBox *ocioViewCombo = nullptr; - QPushButton *ocioConfigBtn = nullptr; - + // Playback controls QComboBox *loopModeCombo = nullptr; QComboBox *playbackRateCombo = nullptr; - - // Exposure/Gamma controls - QSlider *exposureSlider = nullptr; - QLabel *exposureLabel = nullptr; - QSlider *gammaSlider = nullptr; - QLabel *gammaLabel = nullptr; - - // Playback controls container (for show/hide) - QWidget *playbackControlsGroup = nullptr; -#endif + QCheckBox *alphaCheck; QPlainTextEdit *textView; @@ -519,7 +547,7 @@ private slots: QTableView *tableView; QStandardItemModel *tableModel; - // tlRender media player (with OCIO support) + // tlRender media player TLRenderPlayer *m_player; TLRenderViewport *m_renderWidget; #ifdef HAVE_QT_PDF @@ -542,6 +570,8 @@ private slots: // Seek/step state bool userSeeking = false; bool wasPlayingBeforeSeek = false; + bool controlsPinned = false; + bool controlsHovering = false; double detectedFps = 0.0; qint64 lastKnownPosition = -1; // Store position for display during pause int lastKnownVideoFrame = -1; // Explicitly tracked frame number for annotation accuracy @@ -569,11 +599,6 @@ private slots: SequenceFrameCache *frameCache; bool useCacheForSequences; // Flag to enable/disable cache (disabled by default) - - // Color space for HDR/EXR images - OIIOImageLoader::ColorSpace currentColorSpace; - bool isHDRImage; - // Alpha channel toggle state bool alphaOnlyMode = false; bool previewHasAlpha = false; @@ -602,6 +627,7 @@ private slots: QGraphicsView* annotationOverlayView; QGraphicsScene* annotationOverlayScene; QPushButton* toggleAnnotationBtn; + QPushButton* selectToolBtn; QPushButton* penToolBtn; QPushButton* textToolBtn; QPushButton* rectangleToolBtn; @@ -634,7 +660,7 @@ class SequenceFrameCache : public QObject ~SequenceFrameCache(); // Cache operations - void setSequence(const QStringList &framePaths, OIIOImageLoader::ColorSpace colorSpace); + void setSequence(const QStringList &framePaths); void clearCache(); QPixmap getFrame(int frameIndex); bool hasFrame(int frameIndex) const; @@ -672,7 +698,6 @@ class SequenceFrameCache : public QObject QPixmap loadFrame(int frameIndex); QStringList m_framePaths; - OIIOImageLoader::ColorSpace m_colorSpace; QCache m_cache; mutable QRecursiveMutex m_mutex; // Use recursive mutex to allow same thread to lock multiple times QThreadPool *m_threadPool; @@ -696,7 +721,7 @@ class FrameLoaderWorker : public QObject, public QRunnable public: FrameLoaderWorker(SequenceFrameCache *cache, int frameIndex, const QString &framePath, - OIIOImageLoader::ColorSpace colorSpace, quint64 epoch); + quint64 epoch); void run() override; signals: @@ -706,9 +731,7 @@ class FrameLoaderWorker : public QObject, public QRunnable QPointer m_cache; int m_frameIndex; QString m_framePath; - OIIOImageLoader::ColorSpace m_colorSpace; quint64 m_epoch; }; #endif // PREVIEW_OVERLAY_H - diff --git a/native/qt6/src/project_db.cpp b/native/qt6/src/project_db.cpp index fff6a52b..8bef17a6 100644 --- a/native/qt6/src/project_db.cpp +++ b/native/qt6/src/project_db.cpp @@ -1,4 +1,5 @@ #include "project_db.h" +#include "project_path_utils.h" #include #include #include @@ -729,16 +730,14 @@ int ProjectDB::ensureFolderForPath(int projectId, const QString& absolutePath) { return 0; } - QString watchPath = QDir::cleanPath(proj.watchPath); - QString dirPath = QDir::cleanPath(absolutePath); + QString watchPath = ProjectPathUtils::cleanPath(proj.watchPath); + QString dirPath = ProjectPathUtils::cleanPath(absolutePath); if (dirPath.isEmpty()) { dirPath = watchPath; } // Ensure the target path is inside the project - QString watchLower = watchPath.toLower(); - QString dirLower = dirPath.toLower(); - if (!dirLower.startsWith(watchLower)) { + if (!ProjectPathUtils::isSameOrChildPath(watchPath, dirPath)) { return getProjectRootFolderId(projectId); } @@ -896,11 +895,11 @@ int ProjectDB::resyncAssetFolders(int projectId) { } else { folderPath = watchPath + "/" + pathParts.join("/"); } - folderPath = QDir::cleanPath(folderPath); - pathToFolderId.insert(folderPath.toLower(), fid); + folderPath = ProjectPathUtils::cleanPath(folderPath); + pathToFolderId.insert(ProjectPathUtils::keyForPath(folderPath), fid); } // Also map the watch path itself to project root - pathToFolderId.insert(watchPath.toLower(), projectRootId); + pathToFolderId.insert(ProjectPathUtils::keyForPath(watchPath), projectRootId); qDebug() << "[ProjectDB] resyncAssetFolders: built" << pathToFolderId.size() << "folder path mappings"; @@ -920,7 +919,7 @@ int ProjectDB::resyncAssetFolders(int projectId) { int fixed = 0; int imported = 0; - QSet existingPathsLower; + QSet existingPathKeys; QSet changedFolders; QSqlQuery upd(m_db); upd.prepare("UPDATE assets SET virtual_folder_id = ? WHERE id = ?"); @@ -929,10 +928,10 @@ int ProjectDB::resyncAssetFolders(int projectId) { int assetId = aq.value(0).toInt(); QString filePath = aq.value(1).toString(); int currentFolderId = aq.value(2).toInt(); - existingPathsLower.insert(QDir::cleanPath(filePath).toLower()); + existingPathKeys.insert(ProjectPathUtils::keyForPath(filePath)); // Get the directory containing this file - QString assetDir = QDir::cleanPath(QFileInfo(filePath).absolutePath()).toLower(); + QString assetDir = ProjectPathUtils::keyForPath(QFileInfo(filePath).absolutePath()); // Find matching folder int correctFolderId = pathToFolderId.value(assetDir, 0); @@ -957,9 +956,9 @@ int ProjectDB::resyncAssetFolders(int projectId) { // Scan filesystem for missing files and import them QDirIterator it(watchPath, QDir::Files, QDirIterator::Subdirectories); while (it.hasNext()) { - QString filePath = QDir::cleanPath(it.next()); - QString normalized = filePath.toLower(); - if (existingPathsLower.contains(normalized)) { + QString filePath = ProjectPathUtils::cleanPath(it.next()); + QString normalized = ProjectPathUtils::keyForPath(filePath); + if (existingPathKeys.contains(normalized)) { continue; } @@ -973,7 +972,7 @@ int ProjectDB::resyncAssetFolders(int projectId) { int assetId = insertAssetMetadataFast(filePath, folderId); if (assetId > 0) { imported++; - existingPathsLower.insert(normalized); + existingPathKeys.insert(normalized); changedFolders.insert(folderId); qDebug() << "[ProjectDB] resyncAssetFolders: imported missing file" << filePath; } diff --git a/native/qt6/src/project_import_worker.cpp b/native/qt6/src/project_import_worker.cpp index 81cf1fe9..b6eb3732 100644 --- a/native/qt6/src/project_import_worker.cpp +++ b/native/qt6/src/project_import_worker.cpp @@ -1,5 +1,6 @@ #include "project_import_worker.h" #include "log_manager.h" +#include "project_path_utils.h" #include #include @@ -120,7 +121,7 @@ void ProjectImportWorker::doImport() // Helper to normalize paths auto normalizePath = [](const QString& p) -> QString { - return QDir::cleanPath(p).toLower(); + return ProjectPathUtils::keyForPath(p); }; // Phase 1: Build folder structure diff --git a/native/qt6/src/project_manager_watcher.cpp b/native/qt6/src/project_manager_watcher.cpp index 2acb4069..cea2069f 100644 --- a/native/qt6/src/project_manager_watcher.cpp +++ b/native/qt6/src/project_manager_watcher.cpp @@ -1,5 +1,6 @@ #include "project_manager_watcher.h" #include "project_db.h" +#include "project_path_utils.h" #include "project_version_detector.h" #include "log_manager.h" #include @@ -8,16 +9,6 @@ #include #include -// Supported file extensions for watching -static const QSet s_supportedExtensions = { - // Images - "jpg", "jpeg", "png", "tif", "tiff", "exr", "dpx", "bmp", "gif", - // Videos - "mov", "mp4", "avi", "mkv", "mxf", "r3d", - // Project files - "aep", "aepx", "nk" -}; - ProjectManagerWatcher::ProjectManagerWatcher(QObject* parent) : QObject(parent) , m_watcher(new QFileSystemWatcher(this)) @@ -50,14 +41,15 @@ void ProjectManagerWatcher::watchProject(int projectId, const QString& watchPath unwatchProject(projectId); // Store mapping - m_projectPaths[projectId] = watchPath; - m_pathToProject[watchPath] = projectId; + const QString normalizedWatchPath = ProjectPathUtils::cleanPath(watchPath); + m_projectPaths[projectId] = normalizedWatchPath; + m_pathToProject[ProjectPathUtils::keyForPath(normalizedWatchPath)] = projectId; // Build the list of all directories to watch (recursive) QStringList dirsToWatch; - dirsToWatch.append(watchPath); + dirsToWatch.append(normalizedWatchPath); - QDirIterator it(watchPath, QDir::Dirs | QDir::NoDotAndDotDot, QDirIterator::Subdirectories); + QDirIterator it(normalizedWatchPath, QDir::Dirs | QDir::NoDotAndDotDot, QDirIterator::Subdirectories); while (it.hasNext()) { dirsToWatch.append(it.next()); } @@ -80,11 +72,12 @@ void ProjectManagerWatcher::watchProject(int projectId, const QString& watchPath // Map all watched directories to this project for (const QString& dir : watched) { - m_pathToProject[dir] = projectId; + m_pathToProject[ProjectPathUtils::keyForPath(dir)] = projectId; } + m_projectWatchedDirs[projectId] = watched; // Build initial directory cache (stores mod times and file lists per directory) - buildDirectoryCache(projectId, watchPath); + buildDirectoryCache(projectId, normalizedWatchPath); int totalFiles = 0; const auto& dirFiles = m_dirFiles[projectId]; @@ -112,15 +105,8 @@ void ProjectManagerWatcher::unwatchProject(int projectId) return; } - QString watchPath = m_projectPaths[projectId]; - // Remove all watched paths for this project - QStringList pathsToRemove; - for (auto it = m_pathToProject.begin(); it != m_pathToProject.end(); ++it) { - if (it.value() == projectId) { - pathsToRemove.append(it.key()); - } - } + const QStringList pathsToRemove = m_projectWatchedDirs.value(projectId); if (!pathsToRemove.isEmpty()) { m_watcher->removePaths(pathsToRemove); @@ -128,10 +114,11 @@ void ProjectManagerWatcher::unwatchProject(int projectId) // Clean up mappings for (const QString& path : pathsToRemove) { - m_pathToProject.remove(path); + m_pathToProject.remove(ProjectPathUtils::keyForPath(path)); } m_projectPaths.remove(projectId); + m_projectWatchedDirs.remove(projectId); m_dirFiles.remove(projectId); m_dirModTimes.remove(projectId); m_pendingChangedDirs.remove(projectId); @@ -166,9 +153,7 @@ QStringList ProjectManagerWatcher::scanSingleDirectory(const QString& dirPath) c const QFileInfoList entries = dir.entryInfoList(QDir::Files | QDir::NoDotAndDotDot); for (const QFileInfo& fi : entries) { - if (s_supportedExtensions.contains(fi.suffix().toLower())) { - files.append(fi.absoluteFilePath()); - } + files.append(fi.absoluteFilePath()); } return files; } @@ -184,14 +169,15 @@ void ProjectManagerWatcher::buildDirectoryCache(int projectId, const QString& ro // Process root directory first { QFileInfo rootInfo(rootPath); - m_dirModTimes[projectId][rootPath] = rootInfo.lastModified(); - QStringList rootFiles = scanSingleDirectory(rootPath); - m_dirFiles[projectId][rootPath] = QSet(rootFiles.begin(), rootFiles.end()); + const QString normalizedRootPath = ProjectPathUtils::cleanPath(rootPath); + m_dirModTimes[projectId][normalizedRootPath] = rootInfo.lastModified(); + QStringList rootFiles = scanSingleDirectory(normalizedRootPath); + m_dirFiles[projectId][normalizedRootPath] = QSet(rootFiles.begin(), rootFiles.end()); } // Process subdirectories while (it.hasNext()) { - QString dirPath = it.next(); + QString dirPath = ProjectPathUtils::cleanPath(it.next()); QFileInfo dirInfo(dirPath); // Store modification time @@ -206,16 +192,18 @@ void ProjectManagerWatcher::buildDirectoryCache(int projectId, const QString& ro void ProjectManagerWatcher::onDirectoryChanged(const QString& path) { // Direct lookup since we watch all subdirectories now - int projectId = m_pathToProject.value(path, -1); + const QString normalizedPath = ProjectPathUtils::cleanPath(path); + int projectId = m_pathToProject.value(ProjectPathUtils::keyForPath(normalizedPath), -1); if (projectId < 0) { // Fallback: Try to find parent project by checking if path starts with any watched root for (auto it = m_projectPaths.begin(); it != m_projectPaths.end(); ++it) { - if (path.startsWith(it.value())) { + if (ProjectPathUtils::isSameOrChildPath(it.value(), normalizedPath)) { projectId = it.key(); // Add this new subdirectory to watch list - if (m_watcher->addPath(path)) { - m_pathToProject[path] = projectId; + if (m_watcher->addPath(normalizedPath)) { + m_pathToProject[ProjectPathUtils::keyForPath(normalizedPath)] = projectId; + m_projectWatchedDirs[projectId].append(normalizedPath); } break; } @@ -227,12 +215,12 @@ void ProjectManagerWatcher::onDirectoryChanged(const QString& path) qint64 now = QDateTime::currentMSecsSinceEpoch(); if (now - m_lastLogTime > 5000) { LogManager::instance().addLog( - QString("[ProjectManagerWatcher] Directory changed: %1 (project %2)").arg(path).arg(projectId), "DEBUG"); + QString("[ProjectManagerWatcher] Directory changed: %1 (project %2)").arg(normalizedPath).arg(projectId), "DEBUG"); m_lastLogTime = now; } // Add to pending changed directories (not full rescan) - m_pendingChangedDirs[projectId].insert(path); + m_pendingChangedDirs[projectId].insert(normalizedPath); // Start debounce timer if not running if (!m_debounceTimer.isActive()) { @@ -305,13 +293,14 @@ void ProjectManagerWatcher::processChangedDirectories(int projectId) const QFileInfoList subdirs = dir.entryInfoList(QDir::Dirs | QDir::NoDotAndDotDot); for (const QFileInfo& subdirInfo : subdirs) { - const QString subdirPath = subdirInfo.absoluteFilePath(); + const QString subdirPath = ProjectPathUtils::cleanPath(subdirInfo.absoluteFilePath()); if (m_dirModTimes[projectId].contains(subdirPath)) { continue; } if (m_watcher->addPath(subdirPath)) { - m_pathToProject[subdirPath] = projectId; + m_pathToProject[ProjectPathUtils::keyForPath(subdirPath)] = projectId; + m_projectWatchedDirs[projectId].append(subdirPath); } m_dirModTimes[projectId][subdirPath] = subdirInfo.lastModified(); diff --git a/native/qt6/src/project_manager_watcher.h b/native/qt6/src/project_manager_watcher.h index 129ecaa6..65aae4e3 100644 --- a/native/qt6/src/project_manager_watcher.h +++ b/native/qt6/src/project_manager_watcher.h @@ -85,6 +85,9 @@ private slots: // Project ID -> root watch path QHash m_projectPaths; + + // Project ID -> exact watched directory paths + QHash m_projectWatchedDirs; // Watch path -> project ID (for quick lookup) QHash m_pathToProject; diff --git a/native/qt6/src/project_path_utils.h b/native/qt6/src/project_path_utils.h new file mode 100644 index 00000000..d0b8b6bc --- /dev/null +++ b/native/qt6/src/project_path_utils.h @@ -0,0 +1,54 @@ +#pragma once + +#include +#include +#include + +namespace ProjectPathUtils { + +inline Qt::CaseSensitivity pathCaseSensitivity() +{ +#ifdef Q_OS_WIN + return Qt::CaseInsensitive; +#else + return Qt::CaseSensitive; +#endif +} + +inline QString cleanPath(const QString& path) +{ + return QDir::cleanPath(path); +} + +inline QString keyForPath(const QString& path) +{ + const QString cleaned = cleanPath(path); + return pathCaseSensitivity() == Qt::CaseInsensitive ? cleaned.toLower() : cleaned; +} + +inline bool pathsEqual(const QString& lhs, const QString& rhs) +{ + return cleanPath(lhs).compare(cleanPath(rhs), pathCaseSensitivity()) == 0; +} + +inline bool isSameOrChildPath(const QString& parentPath, const QString& childPath) +{ + const QString parent = cleanPath(parentPath); + const QString child = cleanPath(childPath); + + if (parent.isEmpty() || child.isEmpty()) { + return false; + } + + if (child.compare(parent, pathCaseSensitivity()) == 0) { + return true; + } + + QString prefix = parent; + if (!prefix.endsWith('/')) { + prefix += '/'; + } + return child.startsWith(prefix, pathCaseSensitivity()); +} + +} diff --git a/native/qt6/src/runtime_paths.cpp b/native/qt6/src/runtime_paths.cpp new file mode 100644 index 00000000..03fda2c1 --- /dev/null +++ b/native/qt6/src/runtime_paths.cpp @@ -0,0 +1,125 @@ +#include "runtime_paths.h" + +#include +#include +#include +#include +#include +#include + +namespace { + +bool isAppImageRuntime() +{ + return qEnvironmentVariableIsSet("APPDIR") || qEnvironmentVariableIsSet("APPIMAGE"); +} + +bool isDirectoryWritableOrCreatable(const QString& path) +{ + const QFileInfo info(path); + if (info.exists()) { + return info.isDir() && info.isWritable(); + } + + const QFileInfo parentInfo(QFileInfo(path).dir().absolutePath()); + return parentInfo.exists() && parentInfo.isDir() && parentInfo.isWritable(); +} + +QString ensureDirectory(const QString& path) +{ + QDir().mkpath(path); + return path; +} + +bool copyFileIfMissing(const QString& sourcePath, const QString& targetPath) +{ + if (QFile::exists(targetPath)) { + return true; + } + + QDir().mkpath(QFileInfo(targetPath).absolutePath()); + return QFile::copy(sourcePath, targetPath); +} + +void copyDirectoryContentsIfMissing(const QString& sourceDirPath, const QString& targetDirPath) +{ + const QDir sourceDir(sourceDirPath); + if (!sourceDir.exists()) { + return; + } + + QDir().mkpath(targetDirPath); + + const QFileInfoList entries = sourceDir.entryInfoList(QDir::NoDotAndDotDot | QDir::AllEntries); + for (const QFileInfo& entry : entries) { + const QString sourcePath = entry.absoluteFilePath(); + const QString targetPath = QDir(targetDirPath).filePath(entry.fileName()); + if (entry.isDir()) { + copyDirectoryContentsIfMissing(sourcePath, targetPath); + } else { + copyFileIfMissing(sourcePath, targetPath); + } + } +} + +} // namespace + +namespace RuntimePaths { + +QString portableDataRoot() +{ + return QDir(QCoreApplication::applicationDirPath()).filePath(QStringLiteral("data")); +} + +QString userDataRoot() +{ + QString path = QStandardPaths::writableLocation(QStandardPaths::AppLocalDataLocation); + if (path.isEmpty()) { + path = QStandardPaths::writableLocation(QStandardPaths::AppDataLocation); + } + return path; +} + +bool usingPortableDataRoot() +{ + if (isAppImageRuntime()) { + return false; + } + return isDirectoryWritableOrCreatable(portableDataRoot()); +} + +QString writableDataRoot() +{ + if (usingPortableDataRoot()) { + return ensureDirectory(portableDataRoot()); + } + + const QString perUserRoot = userDataRoot(); + if (!perUserRoot.isEmpty()) { + return ensureDirectory(perUserRoot); + } + + return ensureDirectory(portableDataRoot()); +} + +QString dataPath(const QString& relativePath) +{ + const QString root = writableDataRoot(); + if (relativePath.isEmpty()) { + return root; + } + return QDir(root).filePath(relativePath); +} + +void migrateLegacyDataToWritableRoot() +{ + const QString legacyRoot = portableDataRoot(); + const QString targetRoot = writableDataRoot(); + if (QDir::cleanPath(legacyRoot) == QDir::cleanPath(targetRoot)) { + return; + } + + copyDirectoryContentsIfMissing(legacyRoot, targetRoot); +} + +} // namespace RuntimePaths diff --git a/native/qt6/src/runtime_paths.h b/native/qt6/src/runtime_paths.h new file mode 100644 index 00000000..8ebaaf1f --- /dev/null +++ b/native/qt6/src/runtime_paths.h @@ -0,0 +1,14 @@ +#pragma once + +#include + +namespace RuntimePaths { + +QString portableDataRoot(); +QString userDataRoot(); +QString writableDataRoot(); +QString dataPath(const QString& relativePath = QString()); +bool usingPortableDataRoot(); +void migrateLegacyDataToWritableRoot(); + +} // namespace RuntimePaths diff --git a/native/qt6/src/sequence_grouping_proxy_model.cpp b/native/qt6/src/sequence_grouping_proxy_model.cpp index b628190e..38be048e 100644 --- a/native/qt6/src/sequence_grouping_proxy_model.cpp +++ b/native/qt6/src/sequence_grouping_proxy_model.cpp @@ -25,8 +25,9 @@ SequenceGroupingProxyModel::SequenceGroupingProxyModel(QObject* parent) void SequenceGroupingProxyModel::setGroupingEnabled(bool on) { if (m_enabled == on) return; + beginFilterChange(); m_enabled = on; - invalidateFilter(); + endFilterChange(Direction::Rows); } bool SequenceGroupingProxyModel::groupingEnabled() const { @@ -35,8 +36,9 @@ bool SequenceGroupingProxyModel::groupingEnabled() const { void SequenceGroupingProxyModel::setHideFolders(bool hide) { if (m_hideFolders == hide) return; + beginFilterChange(); m_hideFolders = hide; - invalidateFilter(); + endFilterChange(Direction::Rows); } bool SequenceGroupingProxyModel::hideFolders() const { @@ -45,10 +47,11 @@ bool SequenceGroupingProxyModel::hideFolders() const { void SequenceGroupingProxyModel::rebuildForRoot(const QString& dirPath) { m_requestedDir = dirPath; + beginFilterChange(); m_hidden.clear(); m_infoByRepr.clear(); m_keyByRepr.clear(); - invalidateFilter(); + endFilterChange(Direction::Rows); if (!m_enabled || dirPath.isEmpty()) { m_pendingDir.clear(); @@ -146,10 +149,11 @@ void SequenceGroupingProxyModel::startBuild(const QString& dirPath) { } void SequenceGroupingProxyModel::applyBuildResult(BuildResult&& result) { + beginFilterChange(); m_hidden = std::move(result.hidden); m_infoByRepr = std::move(result.infoByRepr); m_keyByRepr = std::move(result.keyByRepr); - invalidateFilter(); + endFilterChange(Direction::Rows); } SequenceGroupingProxyModel::BuildResult SequenceGroupingProxyModel::buildSequences(const QString& dirPath) { diff --git a/native/qt6/src/settings_dialog.cpp b/native/qt6/src/settings_dialog.cpp index b68555e9..9ecc5f07 100644 --- a/native/qt6/src/settings_dialog.cpp +++ b/native/qt6/src/settings_dialog.cpp @@ -1,5 +1,6 @@ #include "settings_dialog.h" #include "db.h" +#include "image_memory_limits.h" #include "live_preview_manager.h" #include "thumbnail_cache_manager.h" #include "theme_manager.h" @@ -11,45 +12,7 @@ #include #include #include -#include #include -#include - -#ifdef HAVE_OCIO -#include -namespace OCIO = OCIO_NAMESPACE; -#endif - -namespace { -const QString kOcioEnabledSetting = QStringLiteral("OCIO/Enabled"); -const QString kOcioConfigSetting = QStringLiteral("OCIO/ConfigPath"); -const QString kOcioDefault8bitSetting = QStringLiteral("OCIO/DefaultInput8bit"); -const QString kOcioDefault16bitSetting = QStringLiteral("OCIO/DefaultInput16bit"); -const QString kOcioDefault32bitSetting = QStringLiteral("OCIO/DefaultInput32bit"); -const QString kOcioDefaultLogSetting = QStringLiteral("OCIO/DefaultInputLog"); - -QString findBundledAcesConfig() -{ - const QString appDir = QCoreApplication::applicationDirPath(); - const QString relPath = "OpenColorIO-Config-ACES-1.2/aces_1.2/config.ocio"; - const QStringList roots = { - appDir, - QDir(appDir).filePath(".."), - QDir(appDir).filePath("../.."), - QDir(appDir).filePath("../../.."), - QDir::currentPath(), - QDir(QDir::currentPath()).filePath(".."), - QDir(QDir::currentPath()).filePath("../..") - }; - for (const QString& root : roots) { - const QString candidate = QDir(root).filePath(relPath); - if (QFileInfo::exists(candidate)) { - return QDir::cleanPath(candidate); - } - } - return QString(); -} -} // namespace #ifdef Q_OS_WIN #include @@ -68,7 +31,6 @@ SettingsDialog::SettingsDialog(QWidget* parent) setupGeneralTab(); setupCacheTab(); setupViewTab(); - setupColorTab(); setupShortcutsTab(); setupExternalAppsTab(); setupAboutTab(); @@ -160,6 +122,26 @@ void SettingsDialog::setupCacheTab() connect(clearCacheBtn, &QPushButton::clicked, this, &SettingsDialog::onClearCache); cacheLayout->addWidget(clearCacheBtn); + QHBoxLayout* imageMemoryLayout = new QHBoxLayout(); + QLabel* imageMemoryLabel = new QLabel("Image memory limit:", cacheGroup); + imageMemoryLayout->addWidget(imageMemoryLabel); + + imageMemoryLimitSpin = new QSpinBox(cacheGroup); + imageMemoryLimitSpin->setRange(512, 262144); + imageMemoryLimitSpin->setSingleStep(512); + imageMemoryLimitSpin->setSuffix(" MB"); + imageMemoryLimitSpin->setValue(static_cast(ImageMemoryLimits::configuredImageMemoryLimitMb())); + imageMemoryLayout->addWidget(imageMemoryLimitSpin); + imageMemoryLayout->addStretch(); + cacheLayout->addLayout(imageMemoryLayout); + + QLabel* imageMemoryHelp = new QLabel( + QString("Used when loading large source images for previews. Default on this machine: %1 MB.") + .arg(ImageMemoryLimits::defaultImageMemoryLimitMb()), + cacheGroup); + imageMemoryHelp->setWordWrap(true); + cacheLayout->addWidget(imageMemoryHelp); + layout->addWidget(cacheGroup); // Persistent Thumbnail Cache settings @@ -383,101 +365,6 @@ void SettingsDialog::setupViewTab() tabWidget->addTab(viewTab, "View"); } -void SettingsDialog::setupColorTab() -{ - QWidget* colorTab = new QWidget(); - QVBoxLayout* layout = new QVBoxLayout(colorTab); - layout->setContentsMargins(20, 20, 20, 20); - layout->setSpacing(15); - - QGroupBox* ocioGroup = new QGroupBox("OCIO Configuration", colorTab); - QVBoxLayout* ocioLayout = new QVBoxLayout(ocioGroup); - - QHBoxLayout* configLayout = new QHBoxLayout(); - QLabel* configLabel = new QLabel("OCIO config:", ocioGroup); - configLayout->addWidget(configLabel); - - ocioConfigPathEdit = new QLineEdit(ocioGroup); - ocioConfigPathEdit->setPlaceholderText("Path to config.ocio"); - configLayout->addWidget(ocioConfigPathEdit, 1); - - ocioConfigBrowseBtn = new QPushButton("Browse...", ocioGroup); - configLayout->addWidget(ocioConfigBrowseBtn); - - ocioConfigBundledBtn = new QPushButton("Use Bundled ACES 1.2", ocioGroup); - configLayout->addWidget(ocioConfigBundledBtn); - - ocioLayout->addLayout(configLayout); - - ocioEnabledCheck = new QCheckBox("Enable OCIO by default", ocioGroup); - ocioLayout->addWidget(ocioEnabledCheck); - - layout->addWidget(ocioGroup); - - QGroupBox* defaultsGroup = new QGroupBox("Default Input Transforms", colorTab); - QGridLayout* defaultsLayout = new QGridLayout(defaultsGroup); - defaultsLayout->setHorizontalSpacing(12); - defaultsLayout->setVerticalSpacing(10); - - QLabel* bit8Label = new QLabel("8-bit files", defaultsGroup); - ocioDefault8bitCombo = new QComboBox(defaultsGroup); - setSearchableCombo(ocioDefault8bitCombo); - - QLabel* bit16Label = new QLabel("16-bit files", defaultsGroup); - ocioDefault16bitCombo = new QComboBox(defaultsGroup); - setSearchableCombo(ocioDefault16bitCombo); - - QLabel* bit32Label = new QLabel("32-bit files", defaultsGroup); - ocioDefault32bitCombo = new QComboBox(defaultsGroup); - setSearchableCombo(ocioDefault32bitCombo); - - QLabel* logLabel = new QLabel("Log files", defaultsGroup); - ocioDefaultLogCombo = new QComboBox(defaultsGroup); - setSearchableCombo(ocioDefaultLogCombo); - - defaultsLayout->addWidget(bit8Label, 0, 0); - defaultsLayout->addWidget(ocioDefault8bitCombo, 0, 1); - defaultsLayout->addWidget(bit16Label, 1, 0); - defaultsLayout->addWidget(ocioDefault16bitCombo, 1, 1); - defaultsLayout->addWidget(bit32Label, 2, 0); - defaultsLayout->addWidget(ocioDefault32bitCombo, 2, 1); - defaultsLayout->addWidget(logLabel, 3, 0); - defaultsLayout->addWidget(ocioDefaultLogCombo, 3, 1); - - defaultsLayout->setColumnStretch(1, 1); - layout->addWidget(defaultsGroup); - layout->addStretch(); - - connect(ocioConfigBrowseBtn, &QPushButton::clicked, this, [this]() { - const QString filePath = QFileDialog::getOpenFileName( - this, - tr("Select OCIO config"), - ocioConfigPathEdit ? ocioConfigPathEdit->text() : QString(), - tr("OCIO Config (config.ocio);;All Files (*.*)") - ); - if (!filePath.isEmpty() && ocioConfigPathEdit) { - ocioConfigPathEdit->setText(filePath); - refreshOcioDefaults(); - } - }); - - connect(ocioConfigBundledBtn, &QPushButton::clicked, this, [this]() { - const QString bundled = findBundledAcesConfig(); - if (bundled.isEmpty()) { - QMessageBox::warning(this, "OCIO Config", "Bundled ACES config not found."); - return; - } - if (ocioConfigPathEdit) { - ocioConfigPathEdit->setText(bundled); - refreshOcioDefaults(); - } - }); - - connect(ocioConfigPathEdit, &QLineEdit::editingFinished, this, &SettingsDialog::refreshOcioDefaults); - - tabWidget->addTab(colorTab, "Color"); -} - void SettingsDialog::setupShortcutsTab() { QWidget* shortcutsTab = new QWidget(); @@ -728,84 +615,6 @@ void SettingsDialog::setupAboutTab() tabWidget->addTab(aboutTab, "About"); } -void SettingsDialog::setSearchableCombo(QComboBox* combo) const -{ - if (!combo) return; - combo->setEditable(true); - combo->setInsertPolicy(QComboBox::NoInsert); - if (auto *edit = combo->lineEdit()) { - edit->setPlaceholderText("Search..."); - edit->setClearButtonEnabled(true); - } - auto *completer = new QCompleter(combo); - completer->setModel(combo->model()); - completer->setCompletionMode(QCompleter::PopupCompletion); - completer->setFilterMode(Qt::MatchContains); - completer->setCaseSensitivity(Qt::CaseInsensitive); - combo->setCompleter(completer); -} - -QStringList SettingsDialog::loadOcioColorspaces(const QString& configPath) const -{ -#ifdef HAVE_OCIO - try { - OCIO::ConstConfigRcPtr config = OCIO::Config::CreateFromFile(configPath.toStdString().c_str()); - if (!config) { - return {}; - } - QStringList colorspaces; - const int count = config->getNumColorSpaces(); - colorspaces.reserve(count); - for (int i = 0; i < count; ++i) { - colorspaces.append(QString::fromStdString(config->getColorSpaceNameByIndex(i))); - } - return colorspaces; - } catch (const OCIO::Exception&) { - return {}; - } -#else - Q_UNUSED(configPath); - return {}; -#endif -} - -void SettingsDialog::refreshOcioDefaults() -{ - const QString configPath = ocioConfigPathEdit ? ocioConfigPathEdit->text().trimmed() : QString(); - QStringList colorspaces; - if (!configPath.isEmpty() && QFileInfo::exists(configPath)) { - colorspaces = loadOcioColorspaces(configPath); - } - - auto applyList = [&](QComboBox* combo, const QString& key) { - if (!combo) return; - combo->blockSignals(true); - combo->clear(); - combo->addItems(colorspaces); - combo->setEnabled(!colorspaces.isEmpty()); - - if (!colorspaces.isEmpty()) { - QSettings s("AugmentCode", "KAssetManager"); - const QString stored = s.value(key).toString(); - const int idx = stored.isEmpty() ? -1 : combo->findText(stored); - if (idx >= 0) { - combo->setCurrentIndex(idx); - } else { - combo->setCurrentIndex(-1); - if (auto *edit = combo->lineEdit()) { - edit->clear(); - } - } - } - combo->blockSignals(false); - }; - - applyList(ocioDefault8bitCombo, kOcioDefault8bitSetting); - applyList(ocioDefault16bitCombo, kOcioDefault16bitSetting); - applyList(ocioDefault32bitCombo, kOcioDefault32bitSetting); - applyList(ocioDefaultLogCombo, kOcioDefaultLogSetting); -} - void SettingsDialog::onClearCache() { QMessageBox::StandardButton reply = QMessageBox::question( @@ -842,7 +651,7 @@ void SettingsDialog::onExportDatabase() QString fileName = QFileDialog::getSaveFileName( this, "Export Database", - QDir::homePath() + "/kassetmanager_backup.db", + QCoreApplication::applicationDirPath() + "/data/kassetmanager_backup.db", "SQLite Database (*.db)" ); @@ -860,7 +669,7 @@ void SettingsDialog::onImportDatabase() QString fileName = QFileDialog::getOpenFileName( this, "Import Database", - QDir::homePath(), + QCoreApplication::applicationDirPath() + "/data", "SQLite Database (*.db)" ); @@ -892,17 +701,10 @@ void SettingsDialog::loadSettings() themeCombo->setCurrentIndex(themeIndex); } - if (ocioEnabledCheck) { - ocioEnabledCheck->setChecked(s.value(kOcioEnabledSetting, true).toBool()); + if (imageMemoryLimitSpin) { + imageMemoryLimitSpin->setValue(static_cast(ImageMemoryLimits::configuredImageMemoryLimitMb())); } - if (ocioConfigPathEdit) { - QString configPath = s.value(kOcioConfigSetting).toString(); - if (configPath.isEmpty()) { - configPath = findBundledAcesConfig(); - } - ocioConfigPathEdit->setText(configPath); - } - refreshOcioDefaults(); + } void SettingsDialog::saveSettings() @@ -917,43 +719,15 @@ void SettingsDialog::saveSettings() ThemeManager::instance().saveTheme(); } - if (ocioEnabledCheck) { - s.setValue(kOcioEnabledSetting, ocioEnabledCheck->isChecked()); - } - if (ocioConfigPathEdit) { - s.setValue(kOcioConfigSetting, ocioConfigPathEdit->text().trimmed()); - } - if (ocioDefault8bitCombo) { - const QString value = ocioDefault8bitCombo->currentText().trimmed(); - if (!value.isEmpty() && ocioDefault8bitCombo->findText(value) >= 0) { - s.setValue(kOcioDefault8bitSetting, value); - } - } - if (ocioDefault16bitCombo) { - const QString value = ocioDefault16bitCombo->currentText().trimmed(); - if (!value.isEmpty() && ocioDefault16bitCombo->findText(value) >= 0) { - s.setValue(kOcioDefault16bitSetting, value); - } - } - if (ocioDefault32bitCombo) { - const QString value = ocioDefault32bitCombo->currentText().trimmed(); - if (!value.isEmpty() && ocioDefault32bitCombo->findText(value) >= 0) { - s.setValue(kOcioDefault32bitSetting, value); - } - } - if (ocioDefaultLogCombo) { - const QString value = ocioDefaultLogCombo->currentText().trimmed(); - if (!value.isEmpty() && ocioDefaultLogCombo->findText(value) >= 0) { - s.setValue(kOcioDefaultLogSetting, value); - } - } - // Save cache size setting if (maxCacheSizeSpin) { int cacheSize = maxCacheSizeSpin->value(); LivePreviewManager::instance().setMaxCacheEntries(cacheSize); s.setValue("LivePreview/MaxCacheEntries", cacheSize); } + if (imageMemoryLimitSpin) { + s.setValue("Images/MemoryLimitMB", imageMemoryLimitSpin->value()); + } // Save sequence cache settings if (autoSequenceCacheCheck) { @@ -1065,6 +839,3 @@ void SettingsDialog::updateSequenceCacheMemoryLabel() sequenceCacheMemoryLabel->setText(text); } - - - diff --git a/native/qt6/src/settings_dialog.h b/native/qt6/src/settings_dialog.h index 44473569..c7bb48d3 100644 --- a/native/qt6/src/settings_dialog.h +++ b/native/qt6/src/settings_dialog.h @@ -35,14 +35,10 @@ private slots: void setupGeneralTab(); void setupCacheTab(); void setupViewTab(); - void setupColorTab(); void setupShortcutsTab(); void setupExternalAppsTab(); void setupAboutTab(); void loadSettings(); - void refreshOcioDefaults(); - QStringList loadOcioColorspaces(const QString& configPath) const; - void setSearchableCombo(QComboBox* combo) const; QTabWidget* tabWidget; @@ -53,6 +49,7 @@ private slots: QLabel* cacheSizeLabel; QPushButton* clearCacheBtn; QSpinBox* maxCacheSizeSpin; + QSpinBox* imageMemoryLimitSpin; // Sequence cache settings QSpinBox* sequenceCacheSizeSpin; @@ -66,16 +63,6 @@ private slots: QCheckBox* showFileExtensionsCheck; QCheckBox* showSequenceOverlayCheck; - // Color tab - QLineEdit* ocioConfigPathEdit = nullptr; - QPushButton* ocioConfigBrowseBtn = nullptr; - QPushButton* ocioConfigBundledBtn = nullptr; - QCheckBox* ocioEnabledCheck = nullptr; - QComboBox* ocioDefault8bitCombo = nullptr; - QComboBox* ocioDefault16bitCombo = nullptr; - QComboBox* ocioDefault32bitCombo = nullptr; - QComboBox* ocioDefaultLogCombo = nullptr; - // Shortcuts tab (editable) QTableWidget* fmShortcutsTable; QPushButton* fmResetAllBtn; @@ -89,4 +76,3 @@ private slots: QLabel* qtVersionLabel; QTextEdit* licensesText; }; - diff --git a/native/qt6/src/thumbnail_cache_manager.cpp b/native/qt6/src/thumbnail_cache_manager.cpp index f6ea6312..f0b6bcdd 100644 --- a/native/qt6/src/thumbnail_cache_manager.cpp +++ b/native/qt6/src/thumbnail_cache_manager.cpp @@ -1,4 +1,5 @@ #include "thumbnail_cache_manager.h" +#include "runtime_paths.h" #include #include #include @@ -29,9 +30,14 @@ void ThumbnailCacheManager::loadSettings() { QSettings s("AugmentCode", "KAssetManager"); - // Default cache directory: next to database in AppData - QString defaultCacheDir = QStandardPaths::writableLocation(QStandardPaths::AppDataLocation) + "/thumbnail_cache"; + const QString portableCacheDir = QDir(RuntimePaths::portableDataRoot()).filePath("thumbnail_cache"); + const QString defaultCacheDir = RuntimePaths::dataPath("thumbnail_cache"); m_cacheDirectory = s.value("ThumbnailCache/Directory", defaultCacheDir).toString(); + if (m_cacheDirectory.isEmpty() || + (QDir::cleanPath(m_cacheDirectory) == QDir::cleanPath(portableCacheDir) && + QDir::cleanPath(defaultCacheDir) != QDir::cleanPath(portableCacheDir))) { + m_cacheDirectory = defaultCacheDir; + } int width = s.value("ThumbnailCache/Width", 256).toInt(); int height = s.value("ThumbnailCache/Height", 256).toInt(); @@ -339,4 +345,3 @@ void ThumbnailCacheManager::setThumbnailSize(const QSize& size) m_thumbnailSize = size; saveSettings(); } - diff --git a/native/qt6/src/video_metadata.cpp b/native/qt6/src/video_metadata.cpp index a0038590..1530e635 100644 --- a/native/qt6/src/video_metadata.cpp +++ b/native/qt6/src/video_metadata.cpp @@ -26,12 +26,75 @@ bool probeVideoFile(const QString& filePath, VideoMetadata& out, QString* errorM out.videoCodec.clear(); out.videoProfile.clear(); out.audioCodec.clear(); + out.audioChannels = 0; out.width = 0; out.height = 0; out.fps = 0.0; out.bitrate = 0; out.hasTimecode = false; out.timecodeStart.clear(); + out.cameraName.clear(); + out.cameraModel.clear(); + out.lens.clear(); + out.reelName.clear(); + out.scene.clear(); + out.take.clear(); + + // Helper: search metadata dictionaries for camera/production tags. + auto extractMeta = [&](AVDictionary* dict) { + if (!dict) return; + AVDictionaryEntry* entry = nullptr; + static const char* kCameraKeys[] = { + "com.apple.proapps.cameraName", "camera", "device_name", "encoder", + "com.apple.proapps.image.description", "model", "com.apple.quicktime.model", + nullptr + }; + static const char* kLensKeys[] = { + "com.apple.proapps.lens", "lens", "com.apple.proapps.image.lens", + nullptr + }; + static const char* kReelKeys[] = { + "reel_name", "reel", "com.apple.proapps.reel", "album", + nullptr + }; + static const char* kSceneKeys[] = { + "scene", "com.apple.proapps.scene", "chapter", nullptr + }; + static const char* kTakeKeys[] = { + "take", "com.apple.proapps.take", "track", nullptr + }; + + for (int i = 0; kCameraKeys[i]; ++i) { + entry = av_dict_get(dict, kCameraKeys[i], nullptr, 0); + if (entry && entry->value && entry->value[0]) { + if (out.cameraName.isEmpty()) out.cameraName = QString::fromUtf8(entry->value); + } + } + for (int i = 0; kLensKeys[i]; ++i) { + entry = av_dict_get(dict, kLensKeys[i], nullptr, 0); + if (entry && entry->value && entry->value[0]) { + if (out.lens.isEmpty()) out.lens = QString::fromUtf8(entry->value); + } + } + for (int i = 0; kReelKeys[i]; ++i) { + entry = av_dict_get(dict, kReelKeys[i], nullptr, 0); + if (entry && entry->value && entry->value[0]) { + if (out.reelName.isEmpty()) out.reelName = QString::fromUtf8(entry->value); + } + } + for (int i = 0; kSceneKeys[i]; ++i) { + entry = av_dict_get(dict, kSceneKeys[i], nullptr, 0); + if (entry && entry->value && entry->value[0]) { + if (out.scene.isEmpty()) out.scene = QString::fromUtf8(entry->value); + } + } + for (int i = 0; kTakeKeys[i]; ++i) { + entry = av_dict_get(dict, kTakeKeys[i], nullptr, 0); + if (entry && entry->value && entry->value[0]) { + if (out.take.isEmpty()) out.take = QString::fromUtf8(entry->value); + } + } + }; AVFormatContext* fmtCtx = nullptr; QByteArray localPath = QFile::encodeName(filePath); @@ -167,9 +230,21 @@ bool probeVideoFile(const QString& filePath, VideoMetadata& out, QString* errorM if (out.bitrate <= 0 && vp->bit_rate > 0) { out.bitrate = vp->bit_rate; } + extractMeta(vs->metadata); + // Prefer the dedicated model key for camera model if present + AVDictionaryEntry* modelEntry = av_dict_get(vs->metadata, "model", nullptr, 0); + if (!modelEntry) modelEntry = av_dict_get(fmtCtx->metadata, "model", nullptr, 0); + if (!modelEntry) modelEntry = av_dict_get(vs->metadata, "com.apple.quicktime.model", nullptr, 0); + if (!modelEntry) modelEntry = av_dict_get(fmtCtx->metadata, "com.apple.quicktime.model", nullptr, 0); + if (modelEntry && modelEntry->value && modelEntry->value[0]) { + out.cameraModel = QString::fromUtf8(modelEntry->value); + } } } + // Scan container-level metadata for camera/production tags + extractMeta(fmtCtx->metadata); + if (aIdx >= 0) { AVStream* as = fmtCtx->streams[aIdx]; AVCodecParameters* ap = as ? as->codecpar : nullptr; @@ -177,6 +252,11 @@ bool probeVideoFile(const QString& filePath, VideoMetadata& out, QString* errorM const AVCodec* acodec = avcodec_find_decoder(ap->codec_id); const char* aname = acodec && acodec->name ? acodec->name : avcodec_get_name(ap->codec_id); if (aname) out.audioCodec = QString::fromUtf8(aname); +#if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(59, 24, 100) + out.audioChannels = ap->ch_layout.nb_channels; +#else + out.audioChannels = ap->channels; +#endif if (out.bitrate <= 0 && ap->bit_rate > 0) { out.bitrate = ap->bit_rate; // fallback to audio bitrate if only that is present } diff --git a/native/qt6/src/video_metadata.h b/native/qt6/src/video_metadata.h index 29a66bbc..6b2f86d8 100644 --- a/native/qt6/src/video_metadata.h +++ b/native/qt6/src/video_metadata.h @@ -6,12 +6,21 @@ struct VideoMetadata { QString videoCodec; QString videoProfile; // e.g., HIGH, 422 HQ, 4444 XQ, MAIN10 QString audioCodec; + int audioChannels = 0; int width = 0; int height = 0; double fps = 0.0; - qint64 bitrate = 0; + qint64 bitrate = 0; // bits per second (container, video, or audio fallback) bool hasTimecode = false; QString timecodeStart; // e.g., HH:MM:SS:FF or HH:MM:SS;FF + + // Camera / production metadata extracted from container/stream tags + QString cameraName; + QString cameraModel; + QString lens; + QString reelName; + QString scene; + QString take; }; // Probes a media file for video/audio codec, resolution, fps and bitrate. diff --git a/native/qt6/src/virtual_drag.cpp b/native/qt6/src/virtual_drag.cpp index 53a25ece..c2865604 100644 --- a/native/qt6/src/virtual_drag.cpp +++ b/native/qt6/src/virtual_drag.cpp @@ -1,5 +1,5 @@ -#ifdef _WIN32 #include "virtual_drag.h" +#ifdef _WIN32 #include #include #include @@ -11,6 +11,7 @@ #include #include #include +#include static UINT CF_FILEDESCRIPTORW_ID() { static UINT id = RegisterClipboardFormatW(CFSTR_FILEDESCRIPTORW); return id; } static UINT CF_FILECONTENTS_ID() { static UINT id = RegisterClipboardFormatW(CFSTR_FILECONTENTS); return id; } @@ -113,7 +114,8 @@ class VirtualFileDataObject : public IDataObject { FORMATETC m_fmtPrefEffect = makeFormatEtc(CF_PREFERREDDROPEFFECT_ID(), TYMED_HGLOBAL); public: VirtualFileDataObject(const QVector &files) - : m_files(files) {} + : m_tmpDir(QCoreApplication::applicationDirPath() + QStringLiteral("/data/tmp/virtual-drag-XXXXXX")) + , m_files(files) {} // IUnknown HRESULT __stdcall QueryInterface(REFIID riid, void **ppv) override { @@ -485,6 +487,9 @@ bool startRealPathsDrag(const QVector &paths) { #else // Non-Windows stub -namespace VirtualDrag { bool startVirtualDrag(const QVector&) { return false; } } +namespace VirtualDrag { +bool startVirtualDrag(const QVector&) { return false; } +bool startRealPathsDrag(const QVector&) { return false; } +bool startAdaptivePathsDrag(const QVector&, const QVector&) { return false; } +} #endif - diff --git a/native/qt6/tests/CMakeLists.txt b/native/qt6/tests/CMakeLists.txt index 5ef57910..7616e0eb 100644 --- a/native/qt6/tests/CMakeLists.txt +++ b/native/qt6/tests/CMakeLists.txt @@ -1,4 +1,4 @@ -find_package(Qt6 REQUIRED COMPONENTS Test) +find_package(Qt6 REQUIRED COMPONENTS Core Gui Widgets Sql Concurrent Test OpenGL OpenGLWidgets DBus) # Test executable: test_simple add_executable(test_simple @@ -18,6 +18,8 @@ add_executable(test_db ../src/db.h ../src/log_manager.cpp ../src/log_manager.h + ../src/runtime_paths.cpp + ../src/runtime_paths.h ) target_link_libraries(test_db PRIVATE Qt6::Test Qt6::Sql Qt6::Core) @@ -25,6 +27,23 @@ target_include_directories(test_db PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/../src) add_test(NAME test_db COMMAND test_db) +# Test executable: test_project_db +add_executable(test_project_db + test_project_db.cpp + ../src/project_db.cpp + ../src/project_db.h + ../src/project_path_utils.h + ../src/log_manager.cpp + ../src/log_manager.h + ../src/runtime_paths.cpp + ../src/runtime_paths.h +) + +target_link_libraries(test_project_db PRIVATE Qt6::Test Qt6::Sql Qt6::Core) +target_include_directories(test_project_db PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/../src) + +add_test(NAME test_project_db COMMAND test_project_db) + # Test executable: test_models add_executable(test_models test_models.cpp @@ -34,6 +53,8 @@ add_executable(test_models ../src/db.h ../src/log_manager.cpp ../src/log_manager.h + ../src/runtime_paths.cpp + ../src/runtime_paths.h ) target_link_libraries(test_models PRIVATE Qt6::Test Qt6::Sql Qt6::Core Qt6::Widgets) @@ -57,7 +78,7 @@ add_test(NAME test_sequence_detector COMMAND test_sequence_detector) set_tests_properties(test_sequence_detector PROPERTIES WORKING_DIRECTORY "${CMAKE_BINARY_DIR}/install_run/bin") # Install test executables to bin directory -install(TARGETS test_simple test_db test_models test_sequence_detector DESTINATION bin) +install(TARGETS test_simple test_db test_project_db test_models test_sequence_detector DESTINATION bin) # Test executable: test_importer @@ -69,6 +90,8 @@ add_executable(test_importer ../src/db.h ../src/log_manager.cpp ../src/log_manager.h + ../src/runtime_paths.cpp + ../src/runtime_paths.h ../src/sequence_detector.cpp ../src/sequence_detector.h ../src/file_utils.h @@ -105,10 +128,14 @@ add_executable(test_live_preview_manager test_live_preview_manager.cpp ../src/live_preview_manager.cpp ../src/live_preview_manager.h + ../src/image_memory_limits.cpp + ../src/image_memory_limits.h ../src/thumbnail_cache_manager.cpp ../src/thumbnail_cache_manager.h ../src/oiio_image_loader.cpp ../src/oiio_image_loader.h + ../src/runtime_paths.cpp + ../src/runtime_paths.h ../src/utils.cpp ../src/utils.h ) @@ -155,3 +182,193 @@ add_test(NAME test_media_converter_worker COMMAND test_media_converter_worker) set_tests_properties(test_media_converter_worker PROPERTIES WORKING_DIRECTORY "${CMAKE_BINARY_DIR}/install_run/bin") install(TARGETS test_media_converter_worker DESTINATION bin) + +# Test executable: test_virtual_drag +add_executable(test_virtual_drag + test_virtual_drag.cpp + ../src/virtual_drag.cpp + ../src/virtual_drag.h +) + +target_link_libraries(test_virtual_drag PRIVATE Qt6::Test Qt6::Core Qt6::Gui) + +target_include_directories(test_virtual_drag PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/../src) + +add_test(NAME test_virtual_drag COMMAND test_virtual_drag) +set_tests_properties(test_virtual_drag PROPERTIES WORKING_DIRECTORY "${CMAKE_BINARY_DIR}/install_run/bin") + +install(TARGETS test_virtual_drag DESTINATION bin) + +# Test executable: test_drag_utils +add_executable(test_drag_utils + test_drag_utils.cpp + ../src/drag_utils.cpp + ../src/drag_utils.h +) + +target_link_libraries(test_drag_utils PRIVATE Qt6::Test Qt6::Core Qt6::Gui Qt6::Widgets Qt6::DBus) + +target_include_directories(test_drag_utils PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/../src) + +add_test(NAME test_drag_utils COMMAND test_drag_utils) +set_tests_properties(test_drag_utils PROPERTIES WORKING_DIRECTORY "${CMAKE_BINARY_DIR}/install_run/bin") + +install(TARGETS test_drag_utils DESTINATION bin) + +# Test executable: test_everything_search +add_executable(test_everything_search + test_everything_search.cpp + ../src/everything_search.cpp + ../src/everything_search.h +) + +target_link_libraries(test_everything_search PRIVATE Qt6::Test Qt6::Core) + +target_include_directories(test_everything_search PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/../src) + +add_test(NAME test_everything_search COMMAND test_everything_search) +set_tests_properties(test_everything_search PROPERTIES WORKING_DIRECTORY "${CMAKE_BINARY_DIR}/install_run/bin") + +install(TARGETS test_everything_search DESTINATION bin) + +# Test executable: test_icon_utils +add_executable(test_icon_utils + test_icon_utils.cpp + ../src/icon_utils.cpp + ../src/icon_utils.h +) + +set_property(TARGET test_icon_utils PROPERTY AUTOMOC ON) + +target_link_libraries(test_icon_utils PRIVATE Qt6::Test Qt6::Core Qt6::Gui Qt6::Widgets) + +target_include_directories(test_icon_utils PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/../src) + +add_test(NAME test_icon_utils COMMAND test_icon_utils) +set_tests_properties(test_icon_utils PROPERTIES WORKING_DIRECTORY "${CMAKE_BINARY_DIR}/install_run/bin") + +install(TARGETS test_icon_utils DESTINATION bin) + +# Test executable: test_tlrender_playback_harness +add_executable(test_tlrender_playback_harness + test_tlrender_playback_harness.cpp + real_media_test_helper.cpp + ../src/file_utils.cpp + ../src/file_utils.h + ../src/media/ffmpeg_mov_player.cpp + ../src/media/ffmpeg_mov_player.h + ../src/media/ffmpeg_mov_viewport.cpp + ../src/media/ffmpeg_mov_viewport.h + ../src/media/tlrender_player.cpp + ../src/media/tlrender_player.h + ../src/platform_session.h + ../src/media/media_player_types.h + ../src/media/libmpv_headers.h + ../src/media/libmpv_runtime.cpp + ../src/media/libmpv_runtime.h + ../src/media/mpv_player.cpp + ../src/media/mpv_player.h + ../src/media/mpv_viewport.cpp + ../src/media/mpv_viewport.h + ../src/media/tlrender_viewport.cpp + ../src/media/tlrender_viewport.h + ../src/video_metadata.cpp + ../src/video_metadata.h +) + +set_property(TARGET test_tlrender_playback_harness PROPERTY AUTOMOC ON) + +target_link_libraries(test_tlrender_playback_harness PRIVATE + Qt6::Test + Qt6::Core + Qt6::Gui + Qt6::Widgets + Qt6::Multimedia + Qt6::MultimediaWidgets + Qt6::Sql + Qt6::Concurrent + Qt6::Svg + Qt6::SvgWidgets + Qt6::OpenGL + Qt6::OpenGLWidgets + Qt6::Quick + Qt6::QuickWidgets + tlRender::tlTimeline + tlRender::tlGL + tlRender::tlIO + tlRender::tlCore + tlRender::tlUI + tlRender::tlDevice + tlRender::tlQt + tlRender::tlQtWidget + MINIZIP::minizip-ng +) + +target_include_directories(test_tlrender_playback_harness PRIVATE + ${CMAKE_CURRENT_SOURCE_DIR}/../src +) + +target_compile_definitions(test_tlrender_playback_harness PRIVATE + HAVE_TLRENDER=1 + HAVE_OPENIMAGEIO=1 + HAVE_FFMPEG +) + +if(TLRENDER_FOUND) + if(TLRENDER_INCLUDE_DIR) + target_include_directories(test_tlrender_playback_harness PRIVATE ${TLRENDER_INCLUDE_DIR}) + elseif(TLRENDER_ROOT) + target_include_directories(test_tlrender_playback_harness PRIVATE "${TLRENDER_ROOT}/include") + endif() +endif() + +add_test(NAME test_tlrender_playback_harness COMMAND test_tlrender_playback_harness) +set_tests_properties(test_tlrender_playback_harness PROPERTIES WORKING_DIRECTORY "${CMAKE_BINARY_DIR}/install_run/bin") + +install(TARGETS test_tlrender_playback_harness DESTINATION bin) + +# Test executable: test_grid_scrub +add_executable(test_grid_scrub + test_grid_scrub.cpp +) + +target_link_libraries(test_grid_scrub PRIVATE Qt6::Test Qt6::Core Qt6::Widgets) + +target_include_directories(test_grid_scrub PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/../src) + +add_test(NAME test_grid_scrub COMMAND test_grid_scrub) +set_tests_properties(test_grid_scrub PROPERTIES WORKING_DIRECTORY "${CMAKE_BINARY_DIR}/install_run/bin") + +install(TARGETS test_grid_scrub DESTINATION bin) + +# Test executable: test_platform_session +add_executable(test_platform_session + test_platform_session.cpp +) + +target_link_libraries(test_platform_session PRIVATE Qt6::Test Qt6::Core) + +target_include_directories(test_platform_session PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/../src) + +add_test(NAME test_platform_session COMMAND test_platform_session) +set_tests_properties(test_platform_session PROPERTIES WORKING_DIRECTORY "${CMAKE_BINARY_DIR}/install_run/bin") + +install(TARGETS test_platform_session DESTINATION bin) + +# Test executable: test_annotation_items +add_executable(test_annotation_items + test_annotation_items.cpp + ../src/annotation_items.cpp + ../src/annotation_items.h +) + +set_property(TARGET test_annotation_items PROPERTY AUTOMOC ON) + +target_link_libraries(test_annotation_items PRIVATE Qt6::Test Qt6::Core Qt6::Gui Qt6::Widgets) + +target_include_directories(test_annotation_items PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/../src) + +add_test(NAME test_annotation_items COMMAND test_annotation_items) +set_tests_properties(test_annotation_items PROPERTIES WORKING_DIRECTORY "${CMAKE_BINARY_DIR}/install_run/bin") + +install(TARGETS test_annotation_items DESTINATION bin) diff --git a/native/qt6/tests/real_media_test_helper.cpp b/native/qt6/tests/real_media_test_helper.cpp new file mode 100644 index 00000000..10987498 --- /dev/null +++ b/native/qt6/tests/real_media_test_helper.cpp @@ -0,0 +1 @@ +#include "real_media_test_helper.h" diff --git a/native/qt6/tests/real_media_test_helper.h b/native/qt6/tests/real_media_test_helper.h new file mode 100644 index 00000000..b4568dc5 --- /dev/null +++ b/native/qt6/tests/real_media_test_helper.h @@ -0,0 +1,39 @@ +#pragma once + +#include +#include +#include + +namespace RealMediaTestHelper { + +struct ResolvedMediaFile { + QString filePath; + QString skipReason; + + [[nodiscard]] bool isAvailable() const + { + return !filePath.isEmpty(); + } +}; + +inline QString realMediaDir() +{ + return qEnvironmentVariable("KASSETMANAGER_REAL_MEDIA_DIR").trimmed(); +} + +inline ResolvedMediaFile resolve(const QString& fileName, const char* skipMessagePrefix = "Real media file unavailable") +{ + const QString mediaDir = realMediaDir(); + if (mediaDir.isEmpty()) { + return {{}, QStringLiteral("Set KASSETMANAGER_REAL_MEDIA_DIR to run real-media tests")}; + } + + const QString filePath = QDir(mediaDir).filePath(fileName); + if (!QFileInfo::exists(filePath)) { + return {{}, QStringLiteral("%1: %2").arg(QString::fromUtf8(skipMessagePrefix), filePath)}; + } + + return {QFileInfo(filePath).absoluteFilePath(), {}}; +} + +} // namespace RealMediaTestHelper diff --git a/native/qt6/tests/run_tlrender_env_benchmarks.py b/native/qt6/tests/run_tlrender_env_benchmarks.py new file mode 100644 index 00000000..2bc1daa7 --- /dev/null +++ b/native/qt6/tests/run_tlrender_env_benchmarks.py @@ -0,0 +1,187 @@ +#!/usr/bin/env python3 + +from __future__ import annotations + +import argparse +import os +import re +import subprocess +import sys +from dataclasses import dataclass +from fractions import Fraction +from pathlib import Path + + +DEFAULT_VIDEO_DIR = Path("/mnt/ssd2/Tests/Videos") +DEFAULT_HARNESS = Path( + "build-linux-recovery-native-qt6/tests/test_tlrender_playback_harness" +) +FPS_TOLERANCE = 0.6 + +METRICS_RE = re.compile( + r"Playback metrics for (?P.+?): elapsed=(?P[0-9.]+) s, " + r"renderedSignals=(?P\d+) \((?P[0-9.]+) fps\), " + r"distinctRasterFrames=(?P\d+) \((?P[0-9.]+) fps\), " + r"distinctPlayerFrames=(?P\d+) \((?P[0-9.]+) fps\), " + r"playerFrameSignals=(?P\d+), " + r"frameRenderedIntervalMs\(avg/min/max\)=(?P[0-9.]+)/(?P[0-9.]+)/(?P[0-9.]+)" +) + + +@dataclass +class BenchmarkRow: + file_path: str + expected_fps: float + measured_rendered_fps: float + passed: bool + + +def parse_args() -> argparse.Namespace: + parser = argparse.ArgumentParser( + description="Run test_tlrender_playback_harness benchmarkEnvFile for each video in a directory." + ) + parser.add_argument( + "--video-dir", + default=str(DEFAULT_VIDEO_DIR), + help=f"Directory of videos to benchmark (default: {DEFAULT_VIDEO_DIR})", + ) + parser.add_argument( + "--harness", + default=str(DEFAULT_HARNESS), + help=f"Path to test_tlrender_playback_harness (default: {DEFAULT_HARNESS})", + ) + parser.add_argument( + "--tolerance", + type=float, + default=FPS_TOLERANCE, + help=f"Allowed absolute fps delta for pass/fail (default: {FPS_TOLERANCE})", + ) + return parser.parse_args() + + +def probe_expected_fps(file_path: Path) -> float: + command = [ + "ffprobe", + "-v", + "error", + "-select_streams", + "v:0", + "-show_entries", + "stream=avg_frame_rate,r_frame_rate", + "-of", + "default=noprint_wrappers=1:nokey=1", + str(file_path), + ] + result = subprocess.run(command, check=True, capture_output=True, text=True) + lines = [line.strip() for line in result.stdout.splitlines() if line.strip()] + for value in lines: + fps = parse_fractional_rate(value) + if fps > 0: + return fps + raise RuntimeError(f"Could not determine fps for {file_path}") + + +def parse_fractional_rate(value: str) -> float: + try: + return float(Fraction(value)) + except (ValueError, ZeroDivisionError): + return 0.0 + + +def run_harness(harness_path: Path, file_path: Path) -> float: + env = os.environ.copy() + env["KASSETMANAGER_TLRENDER_BENCHMARK_FILE"] = str(file_path) + result = subprocess.run( + [str(harness_path), "benchmarkEnvFile", "-o", "-"], + check=False, + capture_output=True, + text=True, + env=env, + ) + + output = result.stdout + result.stderr + match = METRICS_RE.search(output) + if result.returncode != 0: + raise RuntimeError( + f"Harness failed for {file_path} with exit code {result.returncode}\n{output}" + ) + if not match: + raise RuntimeError( + f"Harness output did not include benchmark metrics for {file_path}\n{output}" + ) + return float(match.group("rendered_fps")) + + +def list_video_files(video_dir: Path) -> list[Path]: + files = [path for path in sorted(video_dir.iterdir()) if path.is_file()] + if not files: + raise RuntimeError(f"No files found in {video_dir}") + return files + + +def format_table(rows: list[BenchmarkRow], tolerance: float) -> str: + headers = ( + "file path", + "expected fps", + "measured rendered fps", + f"pass/fail (tol {tolerance:.2f})", + ) + body = [ + ( + row.file_path, + f"{row.expected_fps:.3f}", + f"{row.measured_rendered_fps:.2f}", + "PASS" if row.passed else "FAIL", + ) + for row in rows + ] + widths = [len(header) for header in headers] + for record in body: + for index, value in enumerate(record): + widths[index] = max(widths[index], len(value)) + + def format_row(values: tuple[str, str, str, str]) -> str: + return " | ".join( + value.ljust(widths[index]) for index, value in enumerate(values) + ) + + separator = "-+-".join("-" * width for width in widths) + lines = [format_row(headers), separator] + lines.extend(format_row(record) for record in body) + return "\n".join(lines) + + +def main() -> int: + args = parse_args() + video_dir = Path(args.video_dir).resolve() + harness_path = Path(args.harness).resolve() + + if not video_dir.is_dir(): + raise RuntimeError(f"Video directory does not exist: {video_dir}") + if not harness_path.is_file(): + raise RuntimeError(f"Harness executable does not exist: {harness_path}") + + rows: list[BenchmarkRow] = [] + for file_path in list_video_files(video_dir): + expected_fps = probe_expected_fps(file_path) + measured_rendered_fps = run_harness(harness_path, file_path) + passed = abs(measured_rendered_fps - expected_fps) <= args.tolerance + rows.append( + BenchmarkRow( + file_path=str(file_path), + expected_fps=expected_fps, + measured_rendered_fps=measured_rendered_fps, + passed=passed, + ) + ) + + print(format_table(rows, args.tolerance)) + return 0 + + +if __name__ == "__main__": + try: + raise SystemExit(main()) + except RuntimeError as error: + print(str(error), file=sys.stderr) + raise SystemExit(1) diff --git a/native/qt6/tests/test_annotation_items.cpp b/native/qt6/tests/test_annotation_items.cpp new file mode 100644 index 00000000..888330a6 --- /dev/null +++ b/native/qt6/tests/test_annotation_items.cpp @@ -0,0 +1,74 @@ +#include + +#include "annotation_items.h" + +class TestAnnotationItems : public QObject { + Q_OBJECT + +private slots: + void serializesMovedTextAtScenePosition(); + void serializesMovedRectangleAtScenePosition(); + void serializesMovedArrowAtScenePosition(); + void roundTripsMovedFreehandPoints(); +}; + +void TestAnnotationItems::serializesMovedTextAtScenePosition() +{ + TextAnnotation item(QStringLiteral("Test"), QPointF(10.0, 20.0)); + item.setPos(QPointF(35.0, 45.0)); + + const QJsonObject json = item.toJson(); + QCOMPARE(json.value(QStringLiteral("x")).toDouble(), 35.0); + QCOMPARE(json.value(QStringLiteral("y")).toDouble(), 45.0); +} + +void TestAnnotationItems::serializesMovedRectangleAtScenePosition() +{ + RectangleAnnotation item(QRectF(5.0, 6.0, 20.0, 30.0)); + item.setPos(QPointF(40.0, 50.0)); + + const QJsonObject json = item.toJson(); + QCOMPARE(json.value(QStringLiteral("x")).toDouble(), 45.0); + QCOMPARE(json.value(QStringLiteral("y")).toDouble(), 56.0); + QCOMPARE(json.value(QStringLiteral("width")).toDouble(), 20.0); + QCOMPARE(json.value(QStringLiteral("height")).toDouble(), 30.0); +} + +void TestAnnotationItems::serializesMovedArrowAtScenePosition() +{ + ArrowAnnotation item(QLineF(1.0, 2.0, 11.0, 12.0)); + item.setPos(QPointF(7.0, 9.0)); + + const QJsonObject json = item.toJson(); + QCOMPARE(json.value(QStringLiteral("x1")).toDouble(), 8.0); + QCOMPARE(json.value(QStringLiteral("y1")).toDouble(), 11.0); + QCOMPARE(json.value(QStringLiteral("x2")).toDouble(), 18.0); + QCOMPARE(json.value(QStringLiteral("y2")).toDouble(), 21.0); +} + +void TestAnnotationItems::roundTripsMovedFreehandPoints() +{ + FreehandAnnotation item; + item.addPoint(QPointF(1.0, 2.0)); + item.addPoint(QPointF(3.0, 4.0)); + item.setPos(QPointF(10.0, 20.0)); + + const QJsonObject json = item.toJson(); + AnnotationItem* restored = AnnotationItem::fromJson(json); + QVERIFY(restored != nullptr); + + auto* freehand = dynamic_cast(restored); + QVERIFY(freehand != nullptr); + + const QPainterPath path = freehand->path(); + QCOMPARE(path.elementCount(), 2); + QCOMPARE(path.elementAt(0).x, 11.0); + QCOMPARE(path.elementAt(0).y, 22.0); + QCOMPARE(path.elementAt(1).x, 13.0); + QCOMPARE(path.elementAt(1).y, 24.0); + + delete restored; +} + +QTEST_MAIN(TestAnnotationItems) +#include "test_annotation_items.moc" diff --git a/native/qt6/tests/test_drag_utils.cpp b/native/qt6/tests/test_drag_utils.cpp new file mode 100644 index 00000000..a2ee298a --- /dev/null +++ b/native/qt6/tests/test_drag_utils.cpp @@ -0,0 +1,19 @@ +#include + +#include "drag_utils.h" + +class TestDragUtils : public QObject { + Q_OBJECT + +private slots: + void emptyFileDragReturnsFalse(); +}; + +void TestDragUtils::emptyFileDragReturnsFalse() +{ + DragUtils dragUtils; + QVERIFY(!dragUtils.startFileDrag({})); +} + +QTEST_MAIN(TestDragUtils) +#include "test_drag_utils.moc" diff --git a/native/qt6/tests/test_everything_search.cpp b/native/qt6/tests/test_everything_search.cpp new file mode 100644 index 00000000..31e62c45 --- /dev/null +++ b/native/qt6/tests/test_everything_search.cpp @@ -0,0 +1,23 @@ +#include + +#include "everything_search.h" + +class TestEverythingSearch : public QObject { + Q_OBJECT + +private slots: + void initializeUnavailableOnNonWindows(); +}; + +void TestEverythingSearch::initializeUnavailableOnNonWindows() +{ +#ifndef _WIN32 + EverythingSearch &search = EverythingSearch::instance(); + QVERIFY(!search.initialize()); + QVERIFY(!search.isAvailable()); + QVERIFY(search.search(QStringLiteral("plate"), 10).isEmpty()); +#endif +} + +QTEST_APPLESS_MAIN(TestEverythingSearch) +#include "test_everything_search.moc" diff --git a/native/qt6/tests/test_grid_scrub.cpp b/native/qt6/tests/test_grid_scrub.cpp new file mode 100644 index 00000000..f7ec626d --- /dev/null +++ b/native/qt6/tests/test_grid_scrub.cpp @@ -0,0 +1,25 @@ +#include + +#include "grid_scrub.h" + +class TestGridScrub : public QObject { + Q_OBJECT + +private slots: + void disablesMouseGrabOnWayland(); + void keepsMouseGrabOnOtherSessions(); +}; + +void TestGridScrub::disablesMouseGrabOnWayland() +{ + QVERIFY(!GridScrubController::shouldGrabMouseForSessionType(QStringLiteral("wayland"))); +} + +void TestGridScrub::keepsMouseGrabOnOtherSessions() +{ + QVERIFY(GridScrubController::shouldGrabMouseForSessionType(QStringLiteral("x11"))); + QVERIFY(GridScrubController::shouldGrabMouseForSessionType(QString())); +} + +QTEST_APPLESS_MAIN(TestGridScrub) +#include "test_grid_scrub.moc" diff --git a/native/qt6/tests/test_icon_utils.cpp b/native/qt6/tests/test_icon_utils.cpp new file mode 100644 index 00000000..d4b2eab8 --- /dev/null +++ b/native/qt6/tests/test_icon_utils.cpp @@ -0,0 +1,35 @@ +#include +#include + +#include "icon_utils.h" + +class TestIconUtils : public QObject { + Q_OBJECT + +private slots: + void findsRepoIconsFromBuildTree(); + void findsAnnotationIconsFromBuildTree(); +}; + +void TestIconUtils::findsRepoIconsFromBuildTree() +{ + const QIcon back = loadPngIcon(QStringLiteral("Back.png")); + QVERIFY(!back.isNull()); + + const QIcon play = loadPngIcon(QStringLiteral("media/Play.png")); + QVERIFY(!play.isNull()); +} + +void TestIconUtils::findsAnnotationIconsFromBuildTree() +{ + QVERIFY(!findIconPath(QStringLiteral("Annotation/Annotate.png")).isEmpty()); + + const QIcon annotate = loadRawPngIcon(QStringLiteral("Annotation/Annotate.png")); + QVERIFY(!annotate.isNull()); + + const QIcon saveAll = loadRawPngIcon(QStringLiteral("Annotation/save all.png")); + QVERIFY(!saveAll.isNull()); +} + +QTEST_MAIN(TestIconUtils) +#include "test_icon_utils.moc" diff --git a/native/qt6/tests/test_media_converter_worker.cpp b/native/qt6/tests/test_media_converter_worker.cpp index 23d42cd4..c6a8cb8a 100644 --- a/native/qt6/tests/test_media_converter_worker.cpp +++ b/native/qt6/tests/test_media_converter_worker.cpp @@ -1,17 +1,84 @@ #include #include #include +#include #include #include #include +#include +#include +#include #include +#include "../src/converter_tool_resolver.h" #include "../src/media_converter_worker.h" +namespace { + +class ScopedEnvVar { +public: + explicit ScopedEnvVar(const QByteArray& name) + : m_name(name), m_hadValue(qEnvironmentVariableIsSet(name.constData())), m_oldValue(qgetenv(name.constData())) {} + + ~ScopedEnvVar() + { + if (m_hadValue) { + qputenv(m_name.constData(), m_oldValue); + } else { + qunsetenv(m_name.constData()); + } + } + +private: + QByteArray m_name; + bool m_hadValue = false; + QByteArray m_oldValue; +}; + +bool createFile(const QString& path) +{ + QDir().mkpath(QFileInfo(path).absolutePath()); + QFile file(path); + if (!file.open(QIODevice::WriteOnly)) { + return false; + } + file.write("stub"); + file.close(); + return true; +} + +QString appToolPath(const QString& toolName) +{ + return QDir(QCoreApplication::applicationDirPath()).filePath(toolName); +} + +bool hasBundledTool(const QString& toolName) +{ + const QFileInfo info(appToolPath(toolName)); + return info.exists() && info.isFile() && info.isExecutable(); +} + +QString firstFileMatching(const QString& dirPath, const QStringList& filters) +{ + const QFileInfoList matches = QDir(dirPath).entryInfoList(filters, QDir::Files, QDir::Name); + if (matches.isEmpty()) { + return QString(); + } + return matches.first().absoluteFilePath(); +} + +} + class TestMediaConverterWorker : public QObject { Q_OBJECT private slots: void testEmptyQueueFinishesImmediately(); + void testResolveFfmpegPrefersBundledRuntimeOnLinux(); + void testResolveMagickSupportsLinuxBundledDevAndEnvCandidates(); + void testResolveSiblingFfprobePrefersResolvedLinuxSibling(); + void testFallbackStateDistinguishesStrictVerificationInputs(); + void testBundledMagickConvertsPngToJpg(); + void testBundledFfmpegConvertsMp4ToJpgSequence(); }; void TestMediaConverterWorker::testEmptyQueueFinishesImmediately() @@ -30,6 +97,207 @@ void TestMediaConverterWorker::testEmptyQueueFinishesImmediately() QVERIFY(args.at(0).toBool()); } +void TestMediaConverterWorker::testResolveFfmpegPrefersBundledRuntimeOnLinux() +{ +#ifdef Q_OS_WIN + QSKIP("Linux-first resolver behavior is covered on non-Windows platforms."); +#endif + + QTemporaryDir tempDir; + QVERIFY(tempDir.isValid()); + + const QString appDir = QDir(tempDir.path()).filePath("app"); + QVERIFY(QDir().mkpath(appDir)); + const QString bundledFfmpeg = QDir(appDir).filePath("ffmpeg"); + QVERIFY(createFile(bundledFfmpeg)); + + const ConverterToolResolution resolution = resolveFfmpegTool(appDir); + QCOMPARE(resolution.toolName, QStringLiteral("ffmpeg")); + QCOMPARE(resolution.source, ConverterToolSource::BundledRuntime); + QVERIFY(resolution.isAbsolute()); + QVERIFY(!resolution.isFallback()); + QCOMPARE(resolution.resolvedPath, QFileInfo(bundledFfmpeg).absoluteFilePath()); +} + +void TestMediaConverterWorker::testResolveMagickSupportsLinuxBundledDevAndEnvCandidates() +{ +#ifdef Q_OS_WIN + QSKIP("Linux-first resolver behavior is covered on non-Windows platforms."); +#endif + + ScopedEnvVar magickRootGuard("MAGICK_ROOT"); + ScopedEnvVar imageMagickRootGuard("IMAGEMAGICK_ROOT"); + qunsetenv("MAGICK_ROOT"); + qunsetenv("IMAGEMAGICK_ROOT"); + + QTemporaryDir tempDir; + QVERIFY(tempDir.isValid()); + + const QString appDir = QDir(tempDir.path()).filePath("build/bin/app"); + QVERIFY(QDir().mkpath(appDir)); + + const QString devMagick = QDir(tempDir.path()).filePath("build/third_party/ImageMagick-test/bin/magick"); + QVERIFY(createFile(devMagick)); + + ConverterToolResolution resolution = resolveMagickTool(appDir); + QCOMPARE(resolution.source, ConverterToolSource::BundledDevCheckout); + QCOMPARE(resolution.resolvedPath, QFileInfo(devMagick).absoluteFilePath()); + QVERIFY(resolution.isAbsolute()); + QVERIFY(!resolution.isFallback()); + + QFile::remove(devMagick); + const QString envRoot = QDir(tempDir.path()).filePath("env/imagemagick"); + const QString envMagick = QDir(envRoot).filePath("bin/magick"); + QVERIFY(createFile(envMagick)); + qputenv("MAGICK_ROOT", QFileInfo(envRoot).absoluteFilePath().toUtf8()); + + resolution = resolveMagickTool(appDir); + QCOMPARE(resolution.source, ConverterToolSource::EnvOverride); + QCOMPARE(resolution.resolvedPath, QFileInfo(envMagick).absoluteFilePath()); + QVERIFY(resolution.isAbsolute()); + QVERIFY(!resolution.isFallback()); +} + +void TestMediaConverterWorker::testResolveSiblingFfprobePrefersResolvedLinuxSibling() +{ +#ifdef Q_OS_WIN + QSKIP("Linux-first resolver behavior is covered on non-Windows platforms."); +#endif + + QTemporaryDir tempDir; + QVERIFY(tempDir.isValid()); + + const QString ffmpegPath = QDir(tempDir.path()).filePath("bundle/ffmpeg"); + const QString ffprobePath = QDir(tempDir.path()).filePath("bundle/ffprobe"); + QVERIFY(createFile(ffmpegPath)); + QVERIFY(createFile(ffprobePath)); + + QCOMPARE(resolveSiblingFfprobePath(ffmpegPath), QFileInfo(ffprobePath).absoluteFilePath()); + + QFile::remove(ffprobePath); + QCOMPARE(resolveSiblingFfprobePath(ffmpegPath), QStringLiteral("ffprobe")); +} + +void TestMediaConverterWorker::testFallbackStateDistinguishesStrictVerificationInputs() +{ + const ConverterToolResolution fallback { + QStringLiteral("ffmpeg"), + QStringLiteral("ffmpeg"), + ConverterToolSource::PathFallback + }; + const ConverterToolResolution bundled { + QStringLiteral("ffmpeg"), + QStringLiteral("/tmp/app/ffmpeg"), + ConverterToolSource::BundledRuntime + }; + const ConverterToolResolution env { + QStringLiteral("magick"), + QStringLiteral("/tmp/tools/bin/magick"), + ConverterToolSource::EnvOverride + }; + + QVERIFY(fallback.isFallback()); + QVERIFY(!fallback.isAbsolute()); + QVERIFY(!bundled.isFallback()); + QVERIFY(bundled.isAbsolute()); + QVERIFY(!env.isFallback()); + QVERIFY(env.isAbsolute()); +} + +void TestMediaConverterWorker::testBundledMagickConvertsPngToJpg() +{ +#ifdef Q_OS_WIN + QSKIP("Linux bundled converter smoke test is only relevant on non-Windows platforms."); +#endif + + if (!hasBundledTool(QStringLiteral("magick"))) { + QSKIP("Bundled magick not present next to the test binary."); + } + + QTemporaryDir tempDir; + QVERIFY(tempDir.isValid()); + + const QString inputPath = QDir(tempDir.path()).filePath(QStringLiteral("input.png")); + const QString outputDir = QDir(tempDir.path()).filePath(QStringLiteral("out")); + QVERIFY(QDir().mkpath(outputDir)); + + QImage image(32, 32, QImage::Format_RGBA8888); + image.fill(QColor(10, 120, 200, 255)); + QVERIFY(image.save(inputPath)); + + MediaConverterWorker worker; + worker.setMagickPath(appToolPath(QStringLiteral("magick"))); + + MediaConverterWorker::Task task; + task.sourcePath = inputPath; + task.outputDir = outputDir; + task.target = MediaConverterWorker::TargetKind::ImageJpg; + task.jpg.quality = 85; + + QSignalSpy spyFinished(&worker, &MediaConverterWorker::queueFinished); + worker.start({task}); + QVERIFY2(spyFinished.wait(10000) || spyFinished.count() > 0, "Timed out waiting for ImageMagick conversion"); + QVERIFY(spyFinished.takeFirst().at(0).toBool()); + + const QString outputPath = QDir(outputDir).filePath(QStringLiteral("input.jpg")); + QVERIFY2(QFileInfo::exists(outputPath), qPrintable(outputPath)); + QImage converted(outputPath); + QVERIFY(!converted.isNull()); +} + +void TestMediaConverterWorker::testBundledFfmpegConvertsMp4ToJpgSequence() +{ +#ifdef Q_OS_WIN + QSKIP("Linux bundled converter smoke test is only relevant on non-Windows platforms."); +#endif + + if (!hasBundledTool(QStringLiteral("ffmpeg")) || !hasBundledTool(QStringLiteral("ffprobe"))) { + QSKIP("Bundled ffmpeg/ffprobe not present next to the test binary."); + } + + QTemporaryDir tempDir; + QVERIFY(tempDir.isValid()); + + const QString inputPath = QDir(tempDir.path()).filePath(QStringLiteral("sample.mp4")); + const QString outputDir = QDir(tempDir.path()).filePath(QStringLiteral("out")); + QVERIFY(QDir().mkpath(outputDir)); + + QProcess generator; + generator.start(appToolPath(QStringLiteral("ffmpeg")), { + QStringLiteral("-y"), + QStringLiteral("-f"), QStringLiteral("lavfi"), + QStringLiteral("-i"), QStringLiteral("testsrc=size=96x54:rate=12"), + QStringLiteral("-t"), QStringLiteral("1"), + inputPath, + }); + QVERIFY2(generator.waitForFinished(10000), "Timed out generating MP4 test input"); + QCOMPARE(generator.exitStatus(), QProcess::NormalExit); + QCOMPARE(generator.exitCode(), 0); + QVERIFY(QFileInfo::exists(inputPath)); + + MediaConverterWorker worker; + worker.setFfmpegPath(appToolPath(QStringLiteral("ffmpeg"))); + + MediaConverterWorker::Task task; + task.sourcePath = inputPath; + task.outputDir = outputDir; + task.target = MediaConverterWorker::TargetKind::JpgSequence; + task.jpgSeq.qscale = 4; + task.jpgSeq.padDigits = 4; + task.jpgSeq.startNumber = 1; + + QSignalSpy spyFinished(&worker, &MediaConverterWorker::queueFinished); + worker.start({task}); + QVERIFY2(spyFinished.wait(15000) || spyFinished.count() > 0, "Timed out waiting for FFmpeg conversion"); + QVERIFY(spyFinished.takeFirst().at(0).toBool()); + + const QString sequenceDir = QDir(outputDir).filePath(QStringLiteral("sample_jpg_seq")); + QVERIFY(QDir(sequenceDir).exists()); + const QString firstFrame = firstFileMatching(sequenceDir, {QStringLiteral("*.jpg")}); + QVERIFY2(!firstFrame.isEmpty(), "No JPG frames were produced"); + QImage converted(firstFrame); + QVERIFY(!converted.isNull()); +} + QTEST_MAIN(TestMediaConverterWorker) #include "test_media_converter_worker.moc" - diff --git a/native/qt6/tests/test_platform_session.cpp b/native/qt6/tests/test_platform_session.cpp new file mode 100644 index 00000000..981a8666 --- /dev/null +++ b/native/qt6/tests/test_platform_session.cpp @@ -0,0 +1,44 @@ +#include + +#include "platform_session.h" + +class TestPlatformSession : public QObject { + Q_OBJECT + +private slots: + void detectsWaylandFromPlatformName(); + void detectsWaylandFromSessionType(); + void ignoresNonWaylandSessions(); + void doesNotForceRasterWidgetsOnWayland(); + void usesRasterPreviewFallbackOnWayland(); +}; + +void TestPlatformSession::detectsWaylandFromPlatformName() +{ + QVERIFY(PlatformSession::isWayland(QStringLiteral("wayland"), QString())); + QVERIFY(PlatformSession::isWayland(QStringLiteral("wayland-egl"), QString())); +} + +void TestPlatformSession::detectsWaylandFromSessionType() +{ + QVERIFY(PlatformSession::isWayland(QString(), QStringLiteral("wayland"))); +} + +void TestPlatformSession::ignoresNonWaylandSessions() +{ + QVERIFY(!PlatformSession::isWayland(QStringLiteral("xcb"), QStringLiteral("x11"))); + QVERIFY(!PlatformSession::isWayland(QString(), QString())); +} + +void TestPlatformSession::doesNotForceRasterWidgetsOnWayland() +{ + QVERIFY(!PlatformSession::shouldForceRasterWidgetsOnWayland()); +} + +void TestPlatformSession::usesRasterPreviewFallbackOnWayland() +{ + QVERIFY(PlatformSession::shouldUseRasterPreviewFallbackOnWayland()); +} + +QTEST_APPLESS_MAIN(TestPlatformSession) +#include "test_platform_session.moc" diff --git a/native/qt6/tests/test_project_db.cpp b/native/qt6/tests/test_project_db.cpp new file mode 100644 index 00000000..86088fae --- /dev/null +++ b/native/qt6/tests/test_project_db.cpp @@ -0,0 +1,116 @@ +#include +#include +#include +#include +#include + +#include "project_db.h" + +class TestProjectDB : public QObject { + Q_OBJECT + + QTemporaryDir m_dbDir; + +private slots: + void initTestCase(); + void testEnsureFolderForNestedPath(); + void testEnsureFolderForCaseDistinctPathOnLinux(); + void testResyncAssetFoldersImportsRegularFiles(); +}; + +void TestProjectDB::initTestCase() +{ + QVERIFY(m_dbDir.isValid()); + + const QString dbPath = m_dbDir.path() + "/projects.db"; + QVERIFY(ProjectDB::instance().init(dbPath)); +} + +void TestProjectDB::testEnsureFolderForNestedPath() +{ + QTemporaryDir projectDir; + QVERIFY(projectDir.isValid()); + + const QString watchPath = QDir::cleanPath(projectDir.path()); + const int projectId = ProjectDB::instance().createProject("Test Project", watchPath); + QVERIFY(projectId > 0); + + QDir rootDir(watchPath); + QVERIFY(rootDir.mkpath("plates/day01")); + + const QString nestedPath = QDir(watchPath).filePath("plates/day01"); + const int nestedFolderId = ProjectDB::instance().ensureFolderForPath(projectId, nestedPath); + QVERIFY(nestedFolderId > 0); + + const int repeatedFolderId = ProjectDB::instance().ensureFolderForPath(projectId, nestedPath); + QCOMPARE(repeatedFolderId, nestedFolderId); + + const int rootFolderId = ProjectDB::instance().getProjectRootFolderId(projectId); + QVERIFY(rootFolderId > 0); + QVERIFY(nestedFolderId != rootFolderId); + + const int outsideFolderId = ProjectDB::instance().ensureFolderForPath(projectId, watchPath + "/../outside"); + QCOMPARE(outsideFolderId, rootFolderId); +} + +void TestProjectDB::testEnsureFolderForCaseDistinctPathOnLinux() +{ +#ifdef Q_OS_WIN + QSKIP("Windows Project Manager matching remains case-insensitive"); +#endif + + QTemporaryDir projectDir; + QVERIFY(projectDir.isValid()); + + const QString watchPath = QDir::cleanPath(projectDir.path()); + const int projectId = ProjectDB::instance().createProject("Case Sensitive Project", watchPath); + QVERIFY(projectId > 0); + + QDir rootDir(watchPath); + QVERIFY(rootDir.mkpath("Shots/PlateA")); + QVERIFY(rootDir.mkpath("shots/plateb")); + + const int upperFolderId = ProjectDB::instance().ensureFolderForPath(projectId, QDir(watchPath).filePath("Shots/PlateA")); + const int lowerFolderId = ProjectDB::instance().ensureFolderForPath(projectId, QDir(watchPath).filePath("shots/plateb")); + + QVERIFY(upperFolderId > 0); + QVERIFY(lowerFolderId > 0); + QVERIFY(upperFolderId != lowerFolderId); +} + +void TestProjectDB::testResyncAssetFoldersImportsRegularFiles() +{ + QTemporaryDir projectDir; + QVERIFY(projectDir.isValid()); + + const QString watchPath = QDir::cleanPath(projectDir.path()); + const int projectId = ProjectDB::instance().createProject("Resync Project", watchPath); + QVERIFY(projectId > 0); + + QDir rootDir(watchPath); + QVERIFY(rootDir.mkpath("docs")); + + QFile notesFile(QDir(watchPath).filePath("docs/notes.txt")); + QVERIFY(notesFile.open(QIODevice::WriteOnly | QIODevice::Text)); + QTextStream(¬esFile) << "hello\n"; + notesFile.close(); + + const int changedCount = ProjectDB::instance().resyncAssetFolders(projectId); + QVERIFY(changedCount > 0); + + QSqlQuery q(ProjectDB::instance().database()); + q.prepare( + "SELECT a.file_path, f.name " + "FROM assets a " + "JOIN virtual_folders f ON a.virtual_folder_id = f.id " + "WHERE a.file_path = ?" + ); + q.addBindValue(QDir::cleanPath(notesFile.fileName())); + QVERIFY(q.exec()); + QVERIFY(q.next()); + QCOMPARE(QDir::cleanPath(q.value(0).toString()), QDir::cleanPath(notesFile.fileName())); + QCOMPARE(q.value(1).toString(), QString("docs")); +} + +#include "test_project_db.moc" +QTEST_MAIN(TestProjectDB) diff --git a/native/qt6/tests/test_tlrender_playback_harness.cpp b/native/qt6/tests/test_tlrender_playback_harness.cpp new file mode 100644 index 00000000..e01966cc --- /dev/null +++ b/native/qt6/tests/test_tlrender_playback_harness.cpp @@ -0,0 +1,860 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "media/tlrender_player.h" +#include "media/tlrender_viewport.h" +#include "platform_session.h" +#include "real_media_test_helper.h" + +namespace { + +constexpr const char* kBenchmarkFileEnvVar = "KASSETMANAGER_TLRENDER_BENCHMARK_FILE"; +constexpr int kWarmupTimeoutMs = 30000; +constexpr int kPlaybackProbeMs = 2000; +constexpr int kMinimumDistinctFps = 24; + +QByteArray fingerprintImage(const QImage& image) +{ + if (image.isNull()) { + return {}; + } + + QImage normalized = image.convertToFormat(QImage::Format_RGBA8888); + return QCryptographicHash::hash( + QByteArray(reinterpret_cast(normalized.constBits()), static_cast(normalized.sizeInBytes())), + QCryptographicHash::Sha256); +} + +struct PlaybackObservation { + int renderedSignals = 0; + int distinctFrames = 0; + int distinctPresentedFrames = 0; + int playerFrameSignals = 0; + int distinctPlayerFrames = 0; + qint64 firstRevision = 0; + qint64 lastRevision = 0; + qint64 lastPlayerFrameNumber = -1; + QByteArray lastFingerprint; + QByteArray lastPresentedFingerprint; + double measuredDistinctFps = 0.0; + double measuredPresentedDistinctFps = 0.0; + double measuredRenderedSignalFps = 0.0; + double measuredPlayerFrameFps = 0.0; + double elapsedSeconds = 0.0; + int renderedIntervals = 0; + double averageRenderedIntervalMs = 0.0; + double minRenderedIntervalMs = 0.0; + double maxRenderedIntervalMs = 0.0; +}; + +QString playbackMetricsSummary(const QString& filePath, const PlaybackObservation& observation) +{ + return QStringLiteral( + "Playback metrics for %1: elapsed=%2 s, renderedSignals=%3 (%4 fps), distinctRasterFrames=%5 (%6 fps), distinctPresentedFrames=%7 (%8 fps), distinctPlayerFrames=%9 (%10 fps), playerFrameSignals=%11, frameRenderedIntervalMs(avg/min/max)=%12/%13/%14") + .arg(QFileInfo(filePath).absoluteFilePath()) + .arg(observation.elapsedSeconds, 0, 'f', 2) + .arg(observation.renderedSignals) + .arg(observation.measuredRenderedSignalFps, 0, 'f', 2) + .arg(observation.distinctFrames) + .arg(observation.measuredDistinctFps, 0, 'f', 2) + .arg(observation.distinctPresentedFrames) + .arg(observation.measuredPresentedDistinctFps, 0, 'f', 2) + .arg(observation.distinctPlayerFrames) + .arg(observation.measuredPlayerFrameFps, 0, 'f', 2) + .arg(observation.playerFrameSignals) + .arg(observation.averageRenderedIntervalMs, 0, 'f', 2) + .arg(observation.minRenderedIntervalMs, 0, 'f', 2) + .arg(observation.maxRenderedIntervalMs, 0, 'f', 2); +} + +bool waitForMediaReadyOrFail(QSignalSpy& mediaSpy, QSignalSpy& errorSpy, int timeoutMs, QString* errorOut); + +bool loadPlayerAndViewport(const QString& filePath, + TLRenderPlayer* player, + TLRenderViewport* viewport, + QSignalSpy* mediaSpy, + QSignalSpy* errorSpy, + QSignalSpy* frameSpy, + QString* loadError) +{ + if (!player || !viewport || !mediaSpy || !errorSpy || !frameSpy) { + return false; + } + + viewport->resize(1280, 720); + viewport->show(); + viewport->setPlayer(player); + + if (!mediaSpy->isValid() || !errorSpy->isValid() || !frameSpy->isValid()) { + return false; + } + + player->loadMedia(filePath); + if (!waitForMediaReadyOrFail(*mediaSpy, *errorSpy, kWarmupTimeoutMs, loadError)) { + return false; + } + + QTest::qWait(20); + QCoreApplication::processEvents(QEventLoop::AllEvents, 20); + return QTest::qWaitFor([viewport]() { + return viewport->rasterPresentationRevisionForTest() > 0 + && !viewport->currentRasterFrameForTest().isNull(); + }, kWarmupTimeoutMs); +} + +void advanceForBackwardTests(TLRenderPlayer* player, QSignalSpy* frameSpy) +{ + player->play(); + QTRY_VERIFY_WITH_TIMEOUT(frameSpy->count() > 10, kWarmupTimeoutMs); + player->pause(); + + // Wait for raster to stabilize after pause + QTest::qWait(200); + QCoreApplication::processEvents(QEventLoop::AllEvents, 200); +} + +bool waitForMediaReadyOrFail(QSignalSpy& mediaSpy, QSignalSpy& errorSpy, int timeoutMs, QString* errorOut) +{ + if (mediaSpy.count() > 0) { + return true; + } + if (errorSpy.count() > 0) { + if (errorOut && !errorSpy.isEmpty() && !errorSpy.first().isEmpty()) { + *errorOut = errorSpy.first().first().toString(); + } + return false; + } + + QElapsedTimer timer; + timer.start(); + while (timer.elapsed() < timeoutMs) { + if (mediaSpy.count() > 0) { + return true; + } + if (errorSpy.count() > 0) { + if (errorOut && !errorSpy.isEmpty() && !errorSpy.first().isEmpty()) { + *errorOut = errorSpy.first().first().toString(); + } + return false; + } + QCoreApplication::processEvents(QEventLoop::AllEvents, 20); + QTest::qWait(10); + } + + if (errorOut) { + *errorOut = QStringLiteral("Timed out waiting for mediaInfoReady"); + } + return false; +} + +PlaybackObservation observePlayback(TLRenderPlayer& player, TLRenderViewport& viewport, int durationMs) +{ + PlaybackObservation result; + qint64 lastRenderedSignalElapsedMs = -1; + qint64 renderedIntervalTotalMs = 0; + qint64 minRenderedIntervalMs = std::numeric_limits::max(); + qint64 maxRenderedIntervalMs = 0; + QElapsedTimer timer; + timer.start(); + + QObject::connect(&viewport, &TLRenderViewport::frameRendered, &viewport, [&]() { + ++result.renderedSignals; + const qint64 nowMs = timer.elapsed(); + if (lastRenderedSignalElapsedMs >= 0) { + const qint64 intervalMs = nowMs - lastRenderedSignalElapsedMs; + ++result.renderedIntervals; + renderedIntervalTotalMs += intervalMs; + minRenderedIntervalMs = qMin(minRenderedIntervalMs, intervalMs); + maxRenderedIntervalMs = qMax(maxRenderedIntervalMs, intervalMs); + } + lastRenderedSignalElapsedMs = nowMs; + result.lastRevision = viewport.rasterPresentationRevisionForTest(); + if (result.firstRevision == 0) { + result.firstRevision = result.lastRevision; + } + + const QByteArray currentFingerprint = fingerprintImage(viewport.currentRasterFrameForTest()); + if (!currentFingerprint.isEmpty() && currentFingerprint != result.lastFingerprint) { + ++result.distinctFrames; + result.lastFingerprint = currentFingerprint; + } + + const QByteArray presentedFingerprint = fingerprintImage(viewport.currentPresentedFrameForTest()); + if (!presentedFingerprint.isEmpty() && presentedFingerprint != result.lastPresentedFingerprint) { + ++result.distinctPresentedFrames; + result.lastPresentedFingerprint = presentedFingerprint; + } + }, Qt::DirectConnection); + QObject::connect(&player, &TLRenderPlayer::currentFrameChanged, &viewport, [&](qint64 frameNumber) { + ++result.playerFrameSignals; + if (frameNumber != result.lastPlayerFrameNumber) { + ++result.distinctPlayerFrames; + result.lastPlayerFrameNumber = frameNumber; + } + }, Qt::DirectConnection); + + while (timer.elapsed() < durationMs) { + QCoreApplication::processEvents(QEventLoop::AllEvents, 20); + QTest::qWait(10); + } + + player.pause(); + + const double seconds = timer.elapsed() / 1000.0; + result.elapsedSeconds = seconds; + result.measuredDistinctFps = (seconds > 0.0) ? (result.distinctFrames / seconds) : 0.0; + result.measuredPresentedDistinctFps = (seconds > 0.0) ? (result.distinctPresentedFrames / seconds) : 0.0; + result.measuredRenderedSignalFps = (seconds > 0.0) ? (result.renderedSignals / seconds) : 0.0; + result.measuredPlayerFrameFps = (seconds > 0.0) ? (result.distinctPlayerFrames / seconds) : 0.0; + if (result.renderedIntervals > 0) { + result.averageRenderedIntervalMs = renderedIntervalTotalMs / static_cast(result.renderedIntervals); + result.minRenderedIntervalMs = minRenderedIntervalMs; + result.maxRenderedIntervalMs = maxRenderedIntervalMs; + } + return result; +} + +} // namespace + +class TestTLRenderPlaybackHarness : public QObject +{ + Q_OBJECT + +private slots: + void initTestCase(); + void sunshine25fpsViewerCadence(); + void atmosphereViewerCadence(); + void megyViewerCadence(); + void bloodHitAlphaViewerProgresses(); + void benchmarkEnvFile(); + void mp4StepBackwardUpdatesRasterFrame(); + void mp4SeekToPreviousFrameUpdatesRasterFrame(); + void mp4ReversePlaybackUpdatesRasterFrame(); + void movStepBackwardUpdatesRasterFrame(); + void movReversePlaybackUpdatesRasterFrame(); + void allMovFilesStepBackwardAndReverse(); +}; + +void TestTLRenderPlaybackHarness::initTestCase() +{ + setlocale(LC_NUMERIC, "C"); + QVERIFY2(PlatformSession::shouldUseRasterPreviewFallbackOnWayland(), + "Playback harness must exercise the real Wayland raster preview path"); +} + +void TestTLRenderPlaybackHarness::sunshine25fpsViewerCadence() +{ + const auto media = RealMediaTestHelper::resolve( + QStringLiteral("ELLIOT_HD_ST_EN_24FPS_20260408.mov"), + "Required real MOV cadence file missing"); + if (!media.isAvailable()) { + QSKIP(qPrintable(media.skipReason)); + } + const QString filePath = media.filePath; + + TLRenderPlayer player; + TLRenderViewport viewport; + viewport.resize(1280, 720); + viewport.show(); + viewport.setPlayer(&player); + + QSignalSpy mediaSpy(&player, &TLRenderPlayer::mediaInfoReady); + QSignalSpy errorSpy(&player, &TLRenderPlayer::error); + QVERIFY(mediaSpy.isValid()); + QVERIFY(errorSpy.isValid()); + + player.loadMedia(filePath); + + QString loadError; + QVERIFY2(waitForMediaReadyOrFail(mediaSpy, errorSpy, kWarmupTimeoutMs, &loadError), + qPrintable(QStringLiteral("25fps MOV fixture failed to become ready: %1 (%2)").arg(filePath, loadError))); + + QTRY_VERIFY_WITH_TIMEOUT(viewport.rasterPresentationRevisionForTest() > 0, kWarmupTimeoutMs); + QVERIFY2(!viewport.currentRasterFrameForTest().isNull(), "Viewport never produced an initial raster frame"); + + player.resetFrameAcquisitionStatsForTest(); + player.play(); + const PlaybackObservation observation = observePlayback(player, viewport, kPlaybackProbeMs); + const TLRenderPlayer::FrameAcquisitionStats frameStats = player.frameAcquisitionStatsForTest(); + + QVERIFY2(observation.renderedSignals > 0, + qPrintable(QStringLiteral("No viewer-side frameRendered signals observed for %1").arg(filePath))); + QVERIFY2(observation.distinctFrames > 0, + qPrintable(QStringLiteral("Viewer never presented a distinct raster frame for %1").arg(filePath))); + QVERIFY2(observation.measuredDistinctFps >= kMinimumDistinctFps, + qPrintable(QStringLiteral( + "Expected >= %1 distinct viewer fps for %2, observed %3 fps (%4 distinct frames, %5 render signals, %6 distinct player frames, %7 fallback extractions, last image type %8, last cached conversion %9 ms, last fallback %10 ms)") + .arg(kMinimumDistinctFps) + .arg(filePath) + .arg(observation.measuredDistinctFps, 0, 'f', 2) + .arg(observation.distinctFrames) + .arg(observation.renderedSignals) + .arg(observation.distinctPlayerFrames) + .arg(frameStats.fallbackExtractions) + .arg(frameStats.lastCachedImageType) + .arg(frameStats.lastCachedConversionNs / 1000000.0, 0, 'f', 2) + .arg(frameStats.lastFallbackExtractionNs / 1000000.0, 0, 'f', 2))); +} + +void TestTLRenderPlaybackHarness::atmosphereViewerCadence() +{ + const auto media = RealMediaTestHelper::resolve( + QStringLiteral("Atmosphere-019.mov"), + "Required real MOV cadence file missing"); + if (!media.isAvailable()) { + QSKIP(qPrintable(media.skipReason)); + } + const QString filePath = media.filePath; + + TLRenderPlayer player; + TLRenderViewport viewport; + viewport.resize(1280, 720); + viewport.show(); + viewport.setPlayer(&player); + + QSignalSpy mediaSpy(&player, &TLRenderPlayer::mediaInfoReady); + QSignalSpy errorSpy(&player, &TLRenderPlayer::error); + QVERIFY(mediaSpy.isValid()); + QVERIFY(errorSpy.isValid()); + + player.loadMedia(filePath); + + QString loadError; + QVERIFY2(waitForMediaReadyOrFail(mediaSpy, errorSpy, kWarmupTimeoutMs, &loadError), + qPrintable(QStringLiteral("Atmosphere MOV fixture failed to become ready: %1 (%2)").arg(filePath, loadError))); + + QTRY_VERIFY_WITH_TIMEOUT(viewport.rasterPresentationRevisionForTest() > 0, kWarmupTimeoutMs); + QVERIFY2(!viewport.currentRasterFrameForTest().isNull(), "Atmosphere MOV never produced an initial raster frame"); + + player.resetFrameAcquisitionStatsForTest(); + player.play(); + const PlaybackObservation observation = observePlayback(player, viewport, kPlaybackProbeMs); + const TLRenderPlayer::FrameAcquisitionStats frameStats = player.frameAcquisitionStatsForTest(); + + QVERIFY2(observation.renderedSignals > 0, + qPrintable(QStringLiteral("No viewer-side frameRendered signals observed for %1").arg(filePath))); + QVERIFY2(observation.distinctFrames > 0, + qPrintable(QStringLiteral("Viewer never presented a distinct raster frame for %1").arg(filePath))); + QVERIFY2(observation.measuredDistinctFps >= 22, + qPrintable(QStringLiteral( + "Expected >= %1 distinct viewer fps for %2, observed %3 fps (%4 distinct frames, %5 render signals, %6 distinct player frames, %7 fallback extractions, last image type %8, last cached conversion %9 ms, last fallback %10 ms)") + .arg(22) + .arg(filePath) + .arg(observation.measuredDistinctFps, 0, 'f', 2) + .arg(observation.distinctFrames) + .arg(observation.renderedSignals) + .arg(observation.distinctPlayerFrames) + .arg(frameStats.fallbackExtractions) + .arg(frameStats.lastCachedImageType) + .arg(frameStats.lastCachedConversionNs / 1000000.0, 0, 'f', 2) + .arg(frameStats.lastFallbackExtractionNs / 1000000.0, 0, 'f', 2))); +} + +void TestTLRenderPlaybackHarness::megyViewerCadence() +{ + const auto media = RealMediaTestHelper::resolve( + QStringLiteral("ELLIOT_HD_ST_EN_24FPS_20260408.mov"), + "Fallback real cadence file missing for megyViewerCadence"); + if (!media.isAvailable()) { + QSKIP(qPrintable(media.skipReason)); + } + const QString filePath = media.filePath; + + TLRenderPlayer player; + TLRenderViewport viewport; + viewport.resize(1280, 720); + viewport.show(); + viewport.setPlayer(&player); + + QSignalSpy mediaSpy(&player, &TLRenderPlayer::mediaInfoReady); + QSignalSpy errorSpy(&player, &TLRenderPlayer::error); + QVERIFY(mediaSpy.isValid()); + QVERIFY(errorSpy.isValid()); + + player.loadMedia(filePath); + + QString loadError; + QVERIFY2(waitForMediaReadyOrFail(mediaSpy, errorSpy, kWarmupTimeoutMs, &loadError), + qPrintable(QStringLiteral("MEGY MOV fixture failed to become ready: %1 (%2)").arg(filePath, loadError))); + + QTRY_VERIFY_WITH_TIMEOUT(viewport.rasterPresentationRevisionForTest() > 0, kWarmupTimeoutMs); + QVERIFY2(!viewport.currentRasterFrameForTest().isNull(), "MEGY MOV never produced an initial raster frame"); + + player.resetFrameAcquisitionStatsForTest(); + player.play(); + const PlaybackObservation observation = observePlayback(player, viewport, kPlaybackProbeMs); + const TLRenderPlayer::FrameAcquisitionStats frameStats = player.frameAcquisitionStatsForTest(); + + QVERIFY2(observation.renderedSignals > 0, + qPrintable(QStringLiteral("No viewer-side frameRendered signals observed for %1").arg(filePath))); + QVERIFY2(observation.distinctFrames > 0, + qPrintable(QStringLiteral("Viewer never presented a distinct raster frame for %1").arg(filePath))); + QVERIFY2(observation.measuredDistinctFps >= 27, + qPrintable(QStringLiteral( + "Expected >= %1 distinct viewer fps for %2, observed %3 fps (%4 distinct frames, %5 render signals, %6 distinct player frames, %7 fallback extractions, last image type %8, last cached conversion %9 ms, last fallback %10 ms)") + .arg(27) + .arg(filePath) + .arg(observation.measuredDistinctFps, 0, 'f', 2) + .arg(observation.distinctFrames) + .arg(observation.renderedSignals) + .arg(observation.distinctPlayerFrames) + .arg(frameStats.fallbackExtractions) + .arg(frameStats.lastCachedImageType) + .arg(frameStats.lastCachedConversionNs / 1000000.0, 0, 'f', 2) + .arg(frameStats.lastFallbackExtractionNs / 1000000.0, 0, 'f', 2))); +} + +void TestTLRenderPlaybackHarness::bloodHitAlphaViewerProgresses() +{ + const auto media = RealMediaTestHelper::resolve( + QStringLiteral("Atmosphere-019.mov"), + "Fallback real media file missing for bloodHitAlphaViewerProgresses"); + if (!media.isAvailable()) { + QSKIP(qPrintable(media.skipReason)); + } + const QString filePath = media.filePath; + + TLRenderPlayer player; + TLRenderViewport viewport; + viewport.resize(1280, 720); + viewport.show(); + viewport.setPlayer(&player); + + QSignalSpy mediaSpy(&player, &TLRenderPlayer::mediaInfoReady); + QSignalSpy errorSpy(&player, &TLRenderPlayer::error); + QVERIFY(mediaSpy.isValid()); + QVERIFY(errorSpy.isValid()); + + player.loadMedia(filePath); + + QString loadError; + QVERIFY2(waitForMediaReadyOrFail(mediaSpy, errorSpy, kWarmupTimeoutMs, &loadError), + qPrintable(QStringLiteral("Alpha MOV fixture failed to become ready: %1 (%2)").arg(filePath, loadError))); + + QTRY_VERIFY_WITH_TIMEOUT(viewport.rasterPresentationRevisionForTest() > 0, kWarmupTimeoutMs); + QVERIFY2(!viewport.currentRasterFrameForTest().isNull(), "Alpha MOV never produced an initial raster frame"); + + player.resetFrameAcquisitionStatsForTest(); + player.play(); + const PlaybackObservation observation = observePlayback(player, viewport, kPlaybackProbeMs); + const TLRenderPlayer::FrameAcquisitionStats frameStats = player.frameAcquisitionStatsForTest(); + + QVERIFY2(observation.renderedSignals > 1, + qPrintable(QStringLiteral("Expected repeated viewer renders for alpha MOV %1, observed %2 signals") + .arg(filePath) + .arg(observation.renderedSignals))); + QVERIFY2(observation.distinctFrames > 1, + qPrintable(QStringLiteral("Expected multiple distinct viewer frames for alpha MOV %1, observed %2 distinct frames (distinct player frames %3, fallback extractions %4, last image type %5)") + .arg(filePath) + .arg(observation.distinctFrames) + .arg(observation.distinctPlayerFrames) + .arg(frameStats.fallbackExtractions) + .arg(frameStats.lastCachedImageType))); +} + +void TestTLRenderPlaybackHarness::benchmarkEnvFile() +{ + const QString configuredPath = qEnvironmentVariable(kBenchmarkFileEnvVar).trimmed(); + if (configuredPath.isEmpty()) { + QSKIP("Set KASSETMANAGER_TLRENDER_BENCHMARK_FILE to benchmark an arbitrary media file"); + } + + const QString filePath = QFileInfo(configuredPath).absoluteFilePath(); + QVERIFY2(QFileInfo::exists(filePath), qPrintable(QStringLiteral("Benchmark file does not exist: %1").arg(filePath))); + + TLRenderPlayer player; + TLRenderViewport viewport; + viewport.resize(1280, 720); + viewport.show(); + viewport.setPlayer(&player); + + QSignalSpy mediaSpy(&player, &TLRenderPlayer::mediaInfoReady); + QSignalSpy errorSpy(&player, &TLRenderPlayer::error); + QVERIFY(mediaSpy.isValid()); + QVERIFY(errorSpy.isValid()); + + player.loadMedia(filePath); + + QString loadError; + QVERIFY2(waitForMediaReadyOrFail(mediaSpy, errorSpy, kWarmupTimeoutMs, &loadError), + qPrintable(QStringLiteral("Benchmark file failed to become ready: %1 (%2)").arg(filePath, loadError))); + + QTRY_VERIFY_WITH_TIMEOUT(viewport.rasterPresentationRevisionForTest() > 0, kWarmupTimeoutMs); + QVERIFY2(!viewport.currentRasterFrameForTest().isNull(), "Benchmark file never produced an initial raster frame"); + + player.resetFrameAcquisitionStatsForTest(); + player.play(); + const PlaybackObservation observation = observePlayback(player, viewport, kPlaybackProbeMs); + qInfo().noquote() << playbackMetricsSummary(filePath, observation); + + QVERIFY2(observation.renderedSignals > 0, + qPrintable(QStringLiteral("No viewer-side frameRendered signals observed for %1").arg(filePath))); + QVERIFY2(observation.distinctFrames > 0, + qPrintable(QStringLiteral("Viewer never presented a distinct raster frame for %1").arg(filePath))); + QVERIFY2(observation.distinctPlayerFrames > 0, + qPrintable(QStringLiteral("Player never reported a distinct frame for %1").arg(filePath))); +} + +void TestTLRenderPlaybackHarness::mp4StepBackwardUpdatesRasterFrame() +{ + const QString filePath = QStringLiteral("/mnt/ssd2/Tests/Videos/Ns Ethereal 1.mp4"); + QVERIFY2(QFileInfo::exists(filePath), qPrintable(QStringLiteral("Required MP4 test file missing: %1").arg(filePath))); + + TLRenderPlayer player; + TLRenderViewport viewport; + viewport.resize(1280, 720); + viewport.show(); + viewport.setPlayer(&player); + + QSignalSpy mediaSpy(&player, &TLRenderPlayer::mediaInfoReady); + QSignalSpy errorSpy(&player, &TLRenderPlayer::error); + QSignalSpy frameSpy(&player, &TLRenderPlayer::currentFrameChanged); + QVERIFY(mediaSpy.isValid()); + QVERIFY(errorSpy.isValid()); + QVERIFY(frameSpy.isValid()); + + player.loadMedia(filePath); + + QString loadError; + QVERIFY2(waitForMediaReadyOrFail(mediaSpy, errorSpy, kWarmupTimeoutMs, &loadError), + qPrintable(QStringLiteral("MP4 file failed to become ready: %1 (%2)").arg(filePath, loadError))); + + QTRY_VERIFY_WITH_TIMEOUT(viewport.rasterPresentationRevisionForTest() > 0, kWarmupTimeoutMs); + QVERIFY2(!viewport.currentRasterFrameForTest().isNull(), "MP4 never produced an initial raster frame"); + + player.play(); + QTRY_VERIFY_WITH_TIMEOUT(frameSpy.count() > 10, kWarmupTimeoutMs); + player.pause(); + + // Wait for raster to stabilize after pause + QTest::qWait(200); + QCoreApplication::processEvents(QEventLoop::AllEvents, 200); + + const qint64 revisionBeforeStep = viewport.rasterPresentationRevisionForTest(); + const QByteArray fingerprintBeforeStep = fingerprintImage(viewport.currentRasterFrameForTest()); + const qint64 frameBeforeStep = player.currentFrame(); + + player.stepBackward(); + + QTRY_VERIFY_WITH_TIMEOUT(player.currentFrame() < frameBeforeStep, 5000); + QTRY_VERIFY_WITH_TIMEOUT(viewport.rasterPresentationRevisionForTest() > revisionBeforeStep, 5000); + + const QByteArray fingerprintAfterStep = fingerprintImage(viewport.currentRasterFrameForTest()); + QVERIFY2(!fingerprintAfterStep.isEmpty(), "Step backward produced an empty raster frame"); + QVERIFY2(fingerprintAfterStep != fingerprintBeforeStep, + "Step backward did not change the raster-presented frame"); + QVERIFY2(player.currentFrame() < frameBeforeStep, + qPrintable(QStringLiteral("Step backward did not move to a previous frame (before=%1 after=%2)") + .arg(frameBeforeStep).arg(player.currentFrame()))); +} + +void TestTLRenderPlaybackHarness::mp4ReversePlaybackUpdatesRasterFrame() +{ + const QString filePath = QStringLiteral("/mnt/ssd2/Tests/Videos/Ns Ethereal 1.mp4"); + QVERIFY2(QFileInfo::exists(filePath), qPrintable(QStringLiteral("Required MP4 test file missing: %1").arg(filePath))); + + TLRenderPlayer player; + TLRenderViewport viewport; + viewport.resize(1280, 720); + viewport.show(); + viewport.setPlayer(&player); + + QSignalSpy mediaSpy(&player, &TLRenderPlayer::mediaInfoReady); + QSignalSpy errorSpy(&player, &TLRenderPlayer::error); + QSignalSpy frameSpy(&player, &TLRenderPlayer::currentFrameChanged); + QVERIFY(mediaSpy.isValid()); + QVERIFY(errorSpy.isValid()); + QVERIFY(frameSpy.isValid()); + + player.loadMedia(filePath); + + QString loadError; + QVERIFY2(waitForMediaReadyOrFail(mediaSpy, errorSpy, kWarmupTimeoutMs, &loadError), + qPrintable(QStringLiteral("MP4 file failed to become ready: %1 (%2)").arg(filePath, loadError))); + + QTRY_VERIFY_WITH_TIMEOUT(viewport.rasterPresentationRevisionForTest() > 0, kWarmupTimeoutMs); + QVERIFY2(!viewport.currentRasterFrameForTest().isNull(), "MP4 never produced an initial raster frame"); + + player.play(); + QTRY_VERIFY_WITH_TIMEOUT(frameSpy.count() > 10, kWarmupTimeoutMs); + player.pause(); + + // Move away from frame zero so reverse playback has room to move. + player.seekToFrame(qMax(5, player.currentFrame())); + player.refreshCurrentFrame(); + const qint64 frameBeforeReverse = player.currentFrame(); + const qint64 revisionBeforeReverse = viewport.rasterPresentationRevisionForTest(); + const QByteArray fingerprintBeforeReverse = fingerprintImage(viewport.currentRasterFrameForTest()); + + player.setPlaybackRate(-1.0); + player.play(); + + // Poll for reverse playback progress instead of QTRY_VERIFY_WITH_TIMEOUT + // to avoid flaky timing with tlRender's asynchronous frame delivery. + bool reversed = false; + for (int i = 0; i < 50; ++i) { + QTest::qWait(100); + if (player.currentFrame() < frameBeforeReverse && + viewport.rasterPresentationRevisionForTest() > revisionBeforeReverse) { + reversed = true; + break; + } + } + QVERIFY2(reversed, + qPrintable(QStringLiteral("Reverse playback did not progress within 5s (before=%1 after=%2 revisionBefore=%3 revisionAfter=%4)") + .arg(frameBeforeReverse) + .arg(player.currentFrame()) + .arg(revisionBeforeReverse) + .arg(viewport.rasterPresentationRevisionForTest()))); + player.pause(); + + const QByteArray fingerprintAfterReverse = fingerprintImage(viewport.currentRasterFrameForTest()); + QVERIFY2(!fingerprintAfterReverse.isEmpty(), "Reverse playback produced an empty raster frame"); + QVERIFY2(fingerprintAfterReverse != fingerprintBeforeReverse, + "Reverse playback did not change the raster-presented frame"); + QVERIFY2(player.currentFrame() < frameBeforeReverse, + qPrintable(QStringLiteral("Reverse playback did not move to a previous frame (before=%1 after=%2)") + .arg(frameBeforeReverse).arg(player.currentFrame()))); +} + +void TestTLRenderPlaybackHarness::mp4SeekToPreviousFrameUpdatesRasterFrame() +{ + const QString filePath = QStringLiteral("/mnt/ssd2/Tests/Videos/Ns Ethereal 1.mp4"); + QVERIFY2(QFileInfo::exists(filePath), qPrintable(QStringLiteral("Required MP4 test file missing: %1").arg(filePath))); + + TLRenderPlayer player; + TLRenderViewport viewport; + viewport.resize(1280, 720); + viewport.show(); + viewport.setPlayer(&player); + + QSignalSpy mediaSpy(&player, &TLRenderPlayer::mediaInfoReady); + QSignalSpy errorSpy(&player, &TLRenderPlayer::error); + QSignalSpy frameSpy(&player, &TLRenderPlayer::currentFrameChanged); + QVERIFY(mediaSpy.isValid()); + QVERIFY(errorSpy.isValid()); + QVERIFY(frameSpy.isValid()); + + player.loadMedia(filePath); + + QString loadError; + QVERIFY2(waitForMediaReadyOrFail(mediaSpy, errorSpy, kWarmupTimeoutMs, &loadError), + qPrintable(QStringLiteral("MP4 file failed to become ready: %1 (%2)").arg(filePath, loadError))); + + QTRY_VERIFY_WITH_TIMEOUT(viewport.rasterPresentationRevisionForTest() > 0, kWarmupTimeoutMs); + QVERIFY2(!viewport.currentRasterFrameForTest().isNull(), "MP4 never produced an initial raster frame"); + + player.play(); + QTRY_VERIFY_WITH_TIMEOUT(frameSpy.count() > 10, kWarmupTimeoutMs); + player.pause(); + + // Wait for raster to stabilize after pause + QTest::qWait(200); + QCoreApplication::processEvents(QEventLoop::AllEvents, 200); + + const qint64 revisionBeforeSeek = viewport.rasterPresentationRevisionForTest(); + const QByteArray fingerprintBeforeSeek = fingerprintImage(viewport.currentRasterFrameForTest()); + const qint64 frameBeforeSeek = player.currentFrame(); + + player.seekToFrame(qMax(0, frameBeforeSeek - 1)); + player.refreshCurrentFrame(); + + QTRY_VERIFY_WITH_TIMEOUT(player.currentFrame() < frameBeforeSeek, 5000); + QTRY_VERIFY_WITH_TIMEOUT(viewport.rasterPresentationRevisionForTest() > revisionBeforeSeek, 5000); + + const QByteArray fingerprintAfterSeek = fingerprintImage(viewport.currentRasterFrameForTest()); + QVERIFY2(!fingerprintAfterSeek.isEmpty(), "Seek to previous frame produced an empty raster frame"); + QVERIFY2(fingerprintAfterSeek != fingerprintBeforeSeek, + "Seek to previous frame did not change the raster-presented frame"); + QVERIFY2(player.currentFrame() < frameBeforeSeek, + qPrintable(QStringLiteral("Seek to previous frame did not move to a previous frame (before=%1 after=%2)") + .arg(frameBeforeSeek).arg(player.currentFrame()))); +} + +void TestTLRenderPlaybackHarness::movStepBackwardUpdatesRasterFrame() +{ + const QString filePath = QStringLiteral("/mnt/ssd2/Tests/Videos/Cut1GRAPHICS.mov"); + QVERIFY2(QFileInfo::exists(filePath), qPrintable(QStringLiteral("Required MOV test file missing: %1").arg(filePath))); + + TLRenderPlayer player; + TLRenderViewport viewport; + viewport.resize(1280, 720); + viewport.show(); + viewport.setPlayer(&player); + + QSignalSpy mediaSpy(&player, &TLRenderPlayer::mediaInfoReady); + QSignalSpy errorSpy(&player, &TLRenderPlayer::error); + QSignalSpy frameSpy(&player, &TLRenderPlayer::currentFrameChanged); + QVERIFY(mediaSpy.isValid()); + QVERIFY(errorSpy.isValid()); + QVERIFY(frameSpy.isValid()); + + player.loadMedia(filePath); + + QString loadError; + QVERIFY2(waitForMediaReadyOrFail(mediaSpy, errorSpy, kWarmupTimeoutMs, &loadError), + qPrintable(QStringLiteral("MOV file failed to become ready: %1 (%2)").arg(filePath, loadError))); + + QTRY_VERIFY_WITH_TIMEOUT(viewport.rasterPresentationRevisionForTest() > 0, kWarmupTimeoutMs); + QVERIFY2(!viewport.currentRasterFrameForTest().isNull(), "MOV never produced an initial raster frame"); + + player.play(); + QTRY_VERIFY_WITH_TIMEOUT(frameSpy.count() > 10, kWarmupTimeoutMs); + player.pause(); + + // Wait for raster to stabilize after pause + QTest::qWait(200); + QCoreApplication::processEvents(QEventLoop::AllEvents, 200); + + const qint64 revisionBeforeStep = viewport.rasterPresentationRevisionForTest(); + const QByteArray fingerprintBeforeStep = fingerprintImage(viewport.currentRasterFrameForTest()); + const qint64 frameBeforeStep = player.currentFrame(); + + player.stepBackward(); + + QTRY_VERIFY_WITH_TIMEOUT(player.currentFrame() < frameBeforeStep, 5000); + QTRY_VERIFY_WITH_TIMEOUT(viewport.rasterPresentationRevisionForTest() > revisionBeforeStep, 5000); + + const QByteArray fingerprintAfterStep = fingerprintImage(viewport.currentRasterFrameForTest()); + QVERIFY2(!fingerprintAfterStep.isEmpty(), "MOV step backward produced an empty raster frame"); + QVERIFY2(fingerprintAfterStep != fingerprintBeforeStep, + "MOV step backward did not change the raster-presented frame"); + QVERIFY2(player.currentFrame() < frameBeforeStep, + qPrintable(QStringLiteral("MOV step backward did not move to a previous frame (before=%1 after=%2)") + .arg(frameBeforeStep).arg(player.currentFrame()))); +} + +void TestTLRenderPlaybackHarness::movReversePlaybackUpdatesRasterFrame() +{ + const QString filePath = QStringLiteral("/mnt/ssd2/Tests/Videos/Cut1GRAPHICS.mov"); + QVERIFY2(QFileInfo::exists(filePath), qPrintable(QStringLiteral("Required MOV test file missing: %1").arg(filePath))); + + TLRenderPlayer player; + TLRenderViewport viewport; + viewport.resize(1280, 720); + viewport.show(); + viewport.setPlayer(&player); + + QSignalSpy mediaSpy(&player, &TLRenderPlayer::mediaInfoReady); + QSignalSpy errorSpy(&player, &TLRenderPlayer::error); + QSignalSpy frameSpy(&player, &TLRenderPlayer::currentFrameChanged); + QVERIFY(mediaSpy.isValid()); + QVERIFY(errorSpy.isValid()); + QVERIFY(frameSpy.isValid()); + + player.loadMedia(filePath); + + QString loadError; + QVERIFY2(waitForMediaReadyOrFail(mediaSpy, errorSpy, kWarmupTimeoutMs, &loadError), + qPrintable(QStringLiteral("MOV file failed to become ready: %1 (%2)").arg(filePath, loadError))); + + QTRY_VERIFY_WITH_TIMEOUT(viewport.rasterPresentationRevisionForTest() > 0, kWarmupTimeoutMs); + QVERIFY2(!viewport.currentRasterFrameForTest().isNull(), "MOV never produced an initial raster frame"); + + player.play(); + QTRY_VERIFY_WITH_TIMEOUT(frameSpy.count() > 10, kWarmupTimeoutMs); + player.pause(); + + // Wait for raster to stabilize after pause + QTest::qWait(200); + QCoreApplication::processEvents(QEventLoop::AllEvents, 200); + + player.seekToFrame(qMax(5, player.currentFrame())); + player.refreshCurrentFrame(); + const qint64 frameBeforeReverse = player.currentFrame(); + const qint64 revisionBeforeReverse = viewport.rasterPresentationRevisionForTest(); + const QByteArray fingerprintBeforeReverse = fingerprintImage(viewport.currentRasterFrameForTest()); + + player.setPlaybackRate(-1.0); + player.play(); + + QTRY_VERIFY_WITH_TIMEOUT(player.currentFrame() < frameBeforeReverse, 5000); + QTRY_VERIFY_WITH_TIMEOUT(viewport.rasterPresentationRevisionForTest() > revisionBeforeReverse, 5000); + player.pause(); + + const QByteArray fingerprintAfterReverse = fingerprintImage(viewport.currentRasterFrameForTest()); + QVERIFY2(!fingerprintAfterReverse.isEmpty(), "MOV reverse playback produced an empty raster frame"); + QVERIFY2(fingerprintAfterReverse != fingerprintBeforeReverse, + "MOV reverse playback did not change the raster-presented frame"); + QVERIFY2(player.currentFrame() < frameBeforeReverse, + qPrintable(QStringLiteral("MOV reverse playback did not move to a previous frame (before=%1 after=%2)") + .arg(frameBeforeReverse).arg(player.currentFrame()))); +} + +void TestTLRenderPlaybackHarness::allMovFilesStepBackwardAndReverse() +{ + const QStringList files = { + QStringLiteral("/mnt/ssd2/Tests/Videos/Atmosphere-019.mov"), + QStringLiteral("/mnt/ssd2/Tests/Videos/Cut1GRAPHICS.mov"), + QStringLiteral("/mnt/ssd2/Tests/Videos/ELLIOT_HD_ST_EN_24FPS_20260408.mov"), + QStringLiteral("/mnt/ssd2/Tests/Videos/Ns Ethereal 1.mov"), + QStringLiteral("/mnt/ssd2/Tests/Videos/Shot_0140_v005.mov") + }; + + for (const QString& filePath : files) { + QVERIFY2(QFileInfo::exists(filePath), qPrintable(QStringLiteral("Required MOV test file missing: %1").arg(filePath))); + + TLRenderPlayer player; + TLRenderViewport viewport; + QSignalSpy mediaSpy(&player, &TLRenderPlayer::mediaInfoReady); + QSignalSpy errorSpy(&player, &TLRenderPlayer::error); + QSignalSpy frameSpy(&player, &TLRenderPlayer::currentFrameChanged); + QString loadError; + + QVERIFY2(loadPlayerAndViewport(filePath, &player, &viewport, &mediaSpy, &errorSpy, &frameSpy, &loadError), + qPrintable(QStringLiteral("MOV file failed to become ready: %1 (%2)").arg(filePath, loadError))); + + advanceForBackwardTests(&player, &frameSpy); + + const qint64 revisionBeforeStep = viewport.rasterPresentationRevisionForTest(); + const QByteArray fingerprintBeforeStep = fingerprintImage(viewport.currentRasterFrameForTest()); + const qint64 frameBeforeStep = player.currentFrame(); + + player.stepBackward(); + + QTRY_VERIFY_WITH_TIMEOUT(player.currentFrame() < frameBeforeStep, 5000); + QTRY_VERIFY_WITH_TIMEOUT(viewport.rasterPresentationRevisionForTest() > revisionBeforeStep, 5000); + + const QByteArray fingerprintAfterStep = fingerprintImage(viewport.currentRasterFrameForTest()); + QVERIFY2(!fingerprintAfterStep.isEmpty(), qPrintable(QStringLiteral("MOV step backward produced an empty raster frame for %1").arg(filePath))); + QVERIFY2(fingerprintAfterStep != fingerprintBeforeStep, + qPrintable(QStringLiteral("MOV step backward did not change the raster-presented frame for %1").arg(filePath))); + QVERIFY2(player.currentFrame() < frameBeforeStep, + qPrintable(QStringLiteral("MOV step backward did not move to a previous frame for %1 (before=%2 after=%3)").arg(filePath).arg(frameBeforeStep).arg(player.currentFrame()))); + + player.seekToFrame(qMax(5, player.currentFrame())); + player.refreshCurrentFrame(); + // Allow tlRender to deliver a frame at the new seek position before starting reverse. + QTest::qWait(500); + QCoreApplication::processEvents(QEventLoop::AllEvents, 500); + const qint64 frameBeforeReverse = player.currentFrame(); + const qint64 revisionBeforeReverse = viewport.rasterPresentationRevisionForTest(); + const QByteArray fingerprintBeforeReverse = fingerprintImage(viewport.currentRasterFrameForTest()); + + player.setPlaybackRate(-1.0); + player.play(); + + QTRY_VERIFY_WITH_TIMEOUT(player.currentFrame() < frameBeforeReverse, 5000); + QTRY_VERIFY_WITH_TIMEOUT(viewport.rasterPresentationRevisionForTest() > revisionBeforeReverse, 5000); + player.pause(); + + const QByteArray fingerprintAfterReverse = fingerprintImage(viewport.currentRasterFrameForTest()); + QVERIFY2(!fingerprintAfterReverse.isEmpty(), qPrintable(QStringLiteral("MOV reverse playback produced an empty raster frame for %1").arg(filePath))); + QVERIFY2(fingerprintAfterReverse != fingerprintBeforeReverse, + qPrintable(QStringLiteral("MOV reverse playback did not change the raster-presented frame for %1").arg(filePath))); + QVERIFY2(player.currentFrame() < frameBeforeReverse, + qPrintable(QStringLiteral("MOV reverse playback did not move to a previous frame for %1 (before=%2 after=%3)").arg(filePath).arg(frameBeforeReverse).arg(player.currentFrame()))); + } +} + +QTEST_MAIN(TestTLRenderPlaybackHarness) +#include "test_tlrender_playback_harness.moc" diff --git a/native/qt6/tests/test_virtual_drag.cpp b/native/qt6/tests/test_virtual_drag.cpp new file mode 100644 index 00000000..9f188224 --- /dev/null +++ b/native/qt6/tests/test_virtual_drag.cpp @@ -0,0 +1,30 @@ +#include + +#include "virtual_drag.h" + +class TestVirtualDrag : public QObject { + Q_OBJECT + +private slots: + void nonWindowsStubsReturnFalse(); +}; + +void TestVirtualDrag::nonWindowsStubsReturnFalse() +{ +#ifdef Q_OS_WIN + QSKIP("Linux/non-Windows stub behavior test"); +#else + const QVector files{ + VirtualDrag::VirtualFile{QStringLiteral("note.txt"), QByteArray("hello")} + }; + + QVERIFY(!VirtualDrag::startVirtualDrag(files)); + QVERIFY(!VirtualDrag::startRealPathsDrag({QStringLiteral("tests/fixtures/file.txt")})); + QVERIFY(!VirtualDrag::startAdaptivePathsDrag( + {QStringLiteral("tests/fixtures/frames/shot.1001.exr")}, + {QStringLiteral("tests/fixtures/frames")})); +#endif +} + +QTEST_MAIN(TestVirtualDrag) +#include "test_virtual_drag.moc" diff --git a/scripts/build-linux-appimage.sh b/scripts/build-linux-appimage.sh new file mode 100755 index 00000000..190da9e2 --- /dev/null +++ b/scripts/build-linux-appimage.sh @@ -0,0 +1,39 @@ +#!/usr/bin/env bash +set -euo pipefail + +repo_root="$(CDPATH= cd -- "$(dirname -- "${BASH_SOURCE[0]}")/.." && pwd)" +src_dir="$repo_root/native/qt6" +build_dir="${BUILD_DIR:-$repo_root/build-linux-appimage}" +install_prefix="${INSTALL_PREFIX:-$build_dir/AppDir/usr}" +generator="${CMAKE_GENERATOR:-Ninja}" +build_type="${CMAKE_BUILD_TYPE:-Release}" + +cmake_args=( + -S "$src_dir" + -B "$build_dir" + -G "$generator" + -DBUILD_APP=ON + -DBUILD_TESTS=OFF +) + +if [[ "$generator" == "Ninja" ]]; then + cmake_args+=("-DCMAKE_BUILD_TYPE=$build_type") +fi + +if [[ -n "${CMAKE_PREFIX_PATH:-}" ]]; then + cmake_args+=("-DCMAKE_PREFIX_PATH=$CMAKE_PREFIX_PATH") +fi + +if [[ -n "${CMAKE_TOOLCHAIN_FILE:-}" ]]; then + cmake_args+=("-DCMAKE_TOOLCHAIN_FILE=$CMAKE_TOOLCHAIN_FILE") +fi + +if [[ -n "${VCPKG_TARGET_TRIPLET:-}" ]]; then + cmake_args+=("-DVCPKG_TARGET_TRIPLET=$VCPKG_TARGET_TRIPLET") +fi + +cmake "${cmake_args[@]}" +cmake --build "$build_dir" -j "${CMAKE_BUILD_PARALLEL_LEVEL:-2}" +cmake --install "$build_dir" --prefix "$install_prefix" + +printf 'Built and installed AppDir staging at %s\n' "$install_prefix" diff --git a/scripts/codemap.md b/scripts/codemap.md new file mode 100644 index 00000000..c6fcaab0 --- /dev/null +++ b/scripts/codemap.md @@ -0,0 +1,19 @@ +# scripts/ + + + +## Responsibility + + + +## Design + + + +## Flow + + + +## Integration + + diff --git a/scripts/package-appimage.sh b/scripts/package-appimage.sh new file mode 100755 index 00000000..5e8e87a5 --- /dev/null +++ b/scripts/package-appimage.sh @@ -0,0 +1,114 @@ +#!/usr/bin/env bash +set -euo pipefail + +repo_root="$(CDPATH= cd -- "$(dirname -- "${BASH_SOURCE[0]}")/.." && pwd)" +build_dir="${BUILD_DIR:-$repo_root/build-linux-appimage}" +appdir_root="${APPDIR:-$build_dir/AppDir}" +usr_dir="$appdir_root/usr" +linux_packaging_dir="$repo_root/native/qt6/packaging/linux" +desktop_file="$linux_packaging_dir/kassetmanager.desktop" +icon_file="$repo_root/icon.png" +appimage_name="${APPIMAGE_NAME:-KAssetManager-$(uname -m).AppImage}" + +prepend_path() { + var_name="$1" + value="$2" + eval "current=\${$var_name-}" + if [[ -n "$current" ]]; then + eval "export $var_name=\"$value:$current\"" + else + eval "export $var_name=\"$value\"" + fi +} + +copy_tree_if_present() { + src="$1" + dst="$2" + if [[ -d "$src" ]]; then + mkdir -p "$dst" + cp -a "$src/." "$dst/" + fi +} + +if [[ ! -d "$usr_dir" ]]; then + printf 'Missing AppDir staging at %s\nRun scripts/build-linux-appimage.sh first.\n' "$usr_dir" >&2 + exit 1 +fi + +if [[ ! -f "$desktop_file" ]]; then + printf 'Missing desktop file: %s\n' "$desktop_file" >&2 + exit 1 +fi + +if [[ ! -f "$icon_file" ]]; then + printf 'Missing icon file: %s\n' "$icon_file" >&2 + exit 1 +fi + +if [[ ! -f "$usr_dir/bin/kassetmanagerqt" ]]; then + printf 'Missing installed executable at %s\n' "$usr_dir/bin/kassetmanagerqt" >&2 + exit 1 +fi + +appimagetool_bin="${APPIMAGETOOL:-$(command -v appimagetool || true)}" +linuxdeploy_bin="${LINUXDEPLOY:-$(command -v linuxdeploy || true)}" +linuxdeploy_plugin_qt_bin="${LINUXDEPLOY_PLUGIN_QT:-$(command -v linuxdeploy-plugin-qt || true)}" + +app_run="$appdir_root/AppRun" +cat > "$app_run" <<'EOF' +#!/bin/sh +set -e + +APPDIR="${APPDIR:-$(CDPATH= cd -- "$(dirname -- "$0")" && pwd)}" +ENV_FILE="$APPDIR/usr/share/kassetmanager/AppRun.env" + +if [ -f "$ENV_FILE" ]; then + # shellcheck disable=SC1090 + . "$ENV_FILE" +fi + +exec "$APPDIR/usr/bin/kassetmanagerqt" "$@" +EOF +chmod +x "$app_run" + +cp "$desktop_file" "$appdir_root/kassetmanager.desktop" +cp "$icon_file" "$appdir_root/kassetmanager.png" + +if [[ -n "$linuxdeploy_bin" && -n "$linuxdeploy_plugin_qt_bin" ]]; then + export QMAKE="${QMAKE:-$(command -v qmake6 || command -v qmake || true)}" + export EXTRA_PLATFORM_PLUGINS="libqwayland-egl.so;libqwayland-generic.so;libqxcb.so" + prepend_path LD_LIBRARY_PATH "$usr_dir/lib" + "$linuxdeploy_bin" \ + --appdir "$appdir_root" \ + --desktop-file "$desktop_file" \ + --icon-file "$icon_file" \ + --plugin qt +else + qtpaths_bin="$(command -v qtpaths6 || command -v qtpaths || true)" + if [[ -n "$qtpaths_bin" ]]; then + qt_plugins_dir="$($qtpaths_bin --query QT_INSTALL_PLUGINS)" + qt_qml_dir="$($qtpaths_bin --query QT_INSTALL_QML 2>/dev/null || true)" + copy_tree_if_present "$qt_plugins_dir/platforms" "$usr_dir/plugins/platforms" + copy_tree_if_present "$qt_plugins_dir/imageformats" "$usr_dir/plugins/imageformats" + copy_tree_if_present "$qt_plugins_dir/iconengines" "$usr_dir/plugins/iconengines" + copy_tree_if_present "$qt_plugins_dir/styles" "$usr_dir/plugins/styles" + copy_tree_if_present "$qt_plugins_dir/sqldrivers" "$usr_dir/plugins/sqldrivers" + copy_tree_if_present "$qt_plugins_dir/wayland-decoration-client" "$usr_dir/plugins/wayland-decoration-client" + copy_tree_if_present "$qt_plugins_dir/wayland-graphics-integration-client" "$usr_dir/plugins/wayland-graphics-integration-client" + copy_tree_if_present "$qt_plugins_dir/wayland-shell-integration" "$usr_dir/plugins/wayland-shell-integration" + copy_tree_if_present "$qt_plugins_dir/multimedia" "$usr_dir/plugins/multimedia" + copy_tree_if_present "$qt_qml_dir" "$usr_dir/qml" + printf 'linuxdeploy not found; copied Qt plugins from %s via qtpaths.\n' "$qt_plugins_dir" >&2 + else + printf 'linuxdeploy and qtpaths not found; leaving Qt plugin harvesting unresolved.\n' >&2 + fi +fi + +output_path="$repo_root/$appimage_name" +if [[ -z "$appimagetool_bin" ]]; then + printf 'appimagetool not found. AppDir is prepared at %s, but final AppImage creation is blocked.\n' "$appdir_root" >&2 + exit 1 +fi + +ARCH="${ARCH:-$(uname -m)}" "$appimagetool_bin" "$appdir_root" "$output_path" +printf 'Created %s\n' "$output_path" diff --git a/third_party/codemap.md b/third_party/codemap.md new file mode 100644 index 00000000..9ccdfb00 --- /dev/null +++ b/third_party/codemap.md @@ -0,0 +1,19 @@ +# third_party/ + + + +## Responsibility + + + +## Design + + + +## Flow + + + +## Integration + + diff --git a/third_party/tlRender-install-Release/bin/cjpeg b/third_party/tlRender-install-Release/bin/cjpeg new file mode 100755 index 00000000..fb66057d Binary files /dev/null and b/third_party/tlRender-install-Release/bin/cjpeg differ diff --git a/third_party/tlRender-install-Release/bin/djpeg b/third_party/tlRender-install-Release/bin/djpeg new file mode 100755 index 00000000..3218a86f Binary files /dev/null and b/third_party/tlRender-install-Release/bin/djpeg differ diff --git a/third_party/tlRender-install-Release/bin/ftk-resource b/third_party/tlRender-install-Release/bin/ftk-resource new file mode 100755 index 00000000..9d84bcb3 Binary files /dev/null and b/third_party/tlRender-install-Release/bin/ftk-resource differ diff --git a/third_party/tlRender-install-Release/bin/jpegtran b/third_party/tlRender-install-Release/bin/jpegtran new file mode 100755 index 00000000..efd1fa77 Binary files /dev/null and b/third_party/tlRender-install-Release/bin/jpegtran differ diff --git a/third_party/tlRender-install-Release/bin/nasm b/third_party/tlRender-install-Release/bin/nasm new file mode 100755 index 00000000..f07fcdae Binary files /dev/null and b/third_party/tlRender-install-Release/bin/nasm differ diff --git a/third_party/tlRender-install-Release/bin/ndisasm b/third_party/tlRender-install-Release/bin/ndisasm new file mode 100755 index 00000000..ed4cccf9 Binary files /dev/null and b/third_party/tlRender-install-Release/bin/ndisasm differ diff --git a/third_party/tlRender-install-Release/bin/rdjpgcom b/third_party/tlRender-install-Release/bin/rdjpgcom new file mode 100755 index 00000000..98c4c34e Binary files /dev/null and b/third_party/tlRender-install-Release/bin/rdjpgcom differ diff --git a/third_party/tlRender-install-Release/bin/sdl2-config b/third_party/tlRender-install-Release/bin/sdl2-config new file mode 100755 index 00000000..7f2c1f01 --- /dev/null +++ b/third_party/tlRender-install-Release/bin/sdl2-config @@ -0,0 +1,65 @@ +#!/bin/sh + +# Get the canonical path of the folder containing this script +bindir=`cd -P -- "\`dirname -- "$0"\`" && printf '%s\n' "\`pwd -P\`"` + +# Calculate the canonical path of the prefix, relative to the folder of this script +prefix=`cd -P -- "$bindir/../" && printf '%s\n' "\`pwd -P\`"` +exec_prefix=${prefix} +exec_prefix_set=no +libdir=${exec_prefix}/lib64 + +#usage="\ +#Usage: $0 [--prefix[=DIR]] [--exec-prefix[=DIR]] [--version] [--cflags] [--libs]" +usage="\ +Usage: $0 [--prefix[=DIR]] [--exec-prefix[=DIR]] [--version] [--cflags] [--libs] [--static-libs]" + +if test $# -eq 0; then + echo "${usage}" 1>&2 + exit 1 +fi + +while test $# -gt 0; do + case "$1" in + -*=*) optarg=`echo "$1" | sed 's/[-_a-zA-Z0-9]*=//'` ;; + *) optarg= ;; + esac + + case $1 in + --prefix=*) + prefix=$optarg + if test $exec_prefix_set = no ; then + exec_prefix=$optarg + fi + ;; + --prefix) + echo $prefix + ;; + --exec-prefix=*) + exec_prefix=$optarg + exec_prefix_set=yes + ;; + --exec-prefix) + echo $exec_prefix + ;; + --version) + echo 2.32.10 + ;; + --cflags) + echo -I${prefix}/include/SDL2 -D_REENTRANT + ;; +# --libs) +# echo -L${exec_prefix}/lib64 -lSDL2 +# ;; +# --static-libs) + --libs|--static-libs) + sdl_static_libs=$(echo " -lSDL2 -pthread -lm" | sed -E "s#-lSDL2[ $]#$libdir/libSDL2.a #g") + echo -L${exec_prefix}/lib64 $sdl_static_libs + ;; + *) + echo "${usage}" 1>&2 + exit 1 + ;; + esac + shift +done diff --git a/third_party/tlRender-install-Release/bin/tjbench b/third_party/tlRender-install-Release/bin/tjbench new file mode 100755 index 00000000..333c551f Binary files /dev/null and b/third_party/tlRender-install-Release/bin/tjbench differ diff --git a/third_party/tlRender-install-Release/bin/tlbake b/third_party/tlRender-install-Release/bin/tlbake new file mode 100755 index 00000000..99294224 Binary files /dev/null and b/third_party/tlRender-install-Release/bin/tlbake differ diff --git a/third_party/tlRender-install-Release/bin/tlplay b/third_party/tlRender-install-Release/bin/tlplay new file mode 100755 index 00000000..793d3164 Binary files /dev/null and b/third_party/tlRender-install-Release/bin/tlplay differ diff --git a/third_party/tlRender-install-Release/bin/wrjpgcom b/third_party/tlRender-install-Release/bin/wrjpgcom new file mode 100755 index 00000000..e48a31d3 Binary files /dev/null and b/third_party/tlRender-install-Release/bin/wrjpgcom differ diff --git a/third_party/tlRender-install-Release/include/Imath/ImathBox.h b/third_party/tlRender-install-Release/include/Imath/ImathBox.h new file mode 100644 index 00000000..6d736465 --- /dev/null +++ b/third_party/tlRender-install-Release/include/Imath/ImathBox.h @@ -0,0 +1,859 @@ +// +// SPDX-License-Identifier: BSD-3-Clause +// Copyright Contributors to the OpenEXR Project. +// + +// +// Axis-aligned bounding box +// + +#ifndef INCLUDED_IMATHBOX_H +#define INCLUDED_IMATHBOX_H + +#include "ImathExport.h" +#include "ImathNamespace.h" + +#include "ImathVec.h" + +IMATH_INTERNAL_NAMESPACE_HEADER_ENTER + +/// +/// The `Box` template represents an axis-aligned bounding box defined by +/// minimum and maximum values of type `V`. The `min` and `max` members are +/// public. +/// +/// The type `V` is typically an Imath vector (i.e. `V2i`, `V3f`, etc) and must +/// implement an index `operator[]` that returns a type (typically as scalar) +/// that supports assignment, comparison, and arithmetic operators. +/// +/// `V` must also provide a constructor that takes a float and/or double for +/// use in initializing the box. +/// +/// `V` must also provide a function `V::dimensions()` which returns the +/// number of dimensions in the class (since its assumed its a vector) -- +/// preferably, this returns a constant expression, typically 2 or 3. +/// + +template class IMATH_EXPORT_TEMPLATE_TYPE Box +{ +public: + /// @{ + /// @name Direct access to bounds + + /// The minimum value of the box. + V min; + + /// The maximum value of the box. + V max; + + /// @} + + /// @{ + /// @name Constructors + + /// Construct an empty bounding box. This initializes the mimimum to + /// std::numeric_limits::max() and the maximum to + /// std::numeric_limits::lowest(). + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 Box () IMATH_NOEXCEPT; + + /// Construct a bounding box that contains a single point. + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 Box (const V& point) IMATH_NOEXCEPT; + + /// Construct a bounding box with the given minimum and maximum values. + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 Box (const V& minV, const V& maxV) + IMATH_NOEXCEPT; + + /// @} + + /// @{ + /// @name Comparison + + /// Equality + IMATH_HOSTDEVICE constexpr bool + operator== (const Box& src) const IMATH_NOEXCEPT; + + /// Inequality + IMATH_HOSTDEVICE constexpr bool + operator!= (const Box& src) const IMATH_NOEXCEPT; + + /// @} + + /// @{ + /// @name Manipulation + + /// Set the box to be empty. A box is empty if the mimimum is greater + /// than the maximum. makeEmpty() sets the mimimum to `V::baseTypeMax()` + /// and the maximum to `V::baseTypeLowest()`. + IMATH_HOSTDEVICE void makeEmpty () IMATH_NOEXCEPT; + + /// Extend the box to include the given point. + IMATH_HOSTDEVICE void extendBy (const V& point) IMATH_NOEXCEPT; + + /// Extend the box to include the given box. + IMATH_HOSTDEVICE void extendBy (const Box& box) IMATH_NOEXCEPT; + + /// Make the box include the entire range of `V`. + IMATH_HOSTDEVICE void makeInfinite () IMATH_NOEXCEPT; + + /// @} + + /// @{ + /// @name Query + + /// Return the size of the box. The size is of type `V`, defined + /// as `(max-min)`. An empty box has a size of `V(0)`, i.e. 0 in + /// each dimension. + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 V size () const IMATH_NOEXCEPT; + + /// Return the center of the box. The center is defined as + /// `(max+min)/2`. The center of an empty box is undefined. + IMATH_HOSTDEVICE constexpr V center () const IMATH_NOEXCEPT; + + /// Return true if the given point is inside the box, false otherwise. + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 bool + intersects (const V& point) const IMATH_NOEXCEPT; + + /// Return true if the given box is inside the box, false otherwise. + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 bool + intersects (const Box& box) const IMATH_NOEXCEPT; + + /// Return the major axis of the box. The major axis is the dimension with + /// the greatest difference between maximum and minimum. + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 unsigned int + majorAxis () const IMATH_NOEXCEPT; + + /// Return true if the box is empty, false otherwise. An empty box's + /// minimum is greater than its maximum. + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 bool isEmpty () const IMATH_NOEXCEPT; + + /// Return true if the box is larger than a single point, false otherwise. + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 bool hasVolume () const IMATH_NOEXCEPT; + + /// Return true if the box contains all points, false otherwise. + /// An infinite box has a mimimum of`V::baseTypeLowest()` + /// and a maximum of `V::baseTypeMax()`. + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 bool isInfinite () const IMATH_NOEXCEPT; + + /// @} +}; + +//-------------------- +// Convenient typedefs +//-------------------- + +/// 2D box of base type `short`. +typedef Box Box2s; + +/// 2D box of base type `int`. +typedef Box Box2i; + +/// 2D box of base type `int64_t`. +typedef Box Box2i64; + +/// 2D box of base type `half`. +typedef Box Box2h; + +/// 2D box of base type `float`. +typedef Box Box2f; + +/// 2D box of base type `double`. +typedef Box Box2d; + +/// 3D box of base type `short`. +typedef Box Box3s; + +/// 3D box of base type `int`. +typedef Box Box3i; + +/// 3D box of base type `int64_t`. +typedef Box Box3i64; + +/// 3D box of base type `half`. +typedef Box Box3h; + +/// 3D box of base type `float`. +typedef Box Box3f; + +/// 3D box of base type `double`. +typedef Box Box3d; + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline Box::Box () IMATH_NOEXCEPT +{ + makeEmpty (); +} + +template +IMATH_HOSTDEVICE + IMATH_CONSTEXPR14 inline Box::Box (const V& point) IMATH_NOEXCEPT +{ + min = point; + max = point; +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline Box::Box ( + const V& minV, const V& maxV) IMATH_NOEXCEPT +{ + min = minV; + max = maxV; +} + +template +IMATH_HOSTDEVICE constexpr inline bool +Box::operator== (const Box& src) const IMATH_NOEXCEPT +{ + return (min == src.min && max == src.max); +} + +template +IMATH_HOSTDEVICE constexpr inline bool +Box::operator!= (const Box& src) const IMATH_NOEXCEPT +{ + return (min != src.min || max != src.max); +} + +template +IMATH_HOSTDEVICE inline void +Box::makeEmpty () IMATH_NOEXCEPT +{ + min = V (V::baseTypeMax ()); + max = V (V::baseTypeLowest ()); +} + +template +IMATH_HOSTDEVICE inline void +Box::makeInfinite () IMATH_NOEXCEPT +{ + min = V (V::baseTypeLowest ()); + max = V (V::baseTypeMax ()); +} + +template +IMATH_HOSTDEVICE inline void +Box::extendBy (const V& point) IMATH_NOEXCEPT +{ + for (unsigned int i = 0; i < min.dimensions (); i++) + { + if (point[i] < min[i]) min[i] = point[i]; + + if (point[i] > max[i]) max[i] = point[i]; + } +} + +template +IMATH_HOSTDEVICE inline void +Box::extendBy (const Box& box) IMATH_NOEXCEPT +{ + for (unsigned int i = 0; i < min.dimensions (); i++) + { + if (box.min[i] < min[i]) min[i] = box.min[i]; + + if (box.max[i] > max[i]) max[i] = box.max[i]; + } +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline bool +Box::intersects (const V& point) const IMATH_NOEXCEPT +{ + for (unsigned int i = 0; i < min.dimensions (); i++) + { + if (point[i] < min[i] || point[i] > max[i]) return false; + } + + return true; +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline bool +Box::intersects (const Box& box) const IMATH_NOEXCEPT +{ + for (unsigned int i = 0; i < min.dimensions (); i++) + { + if (box.max[i] < min[i] || box.min[i] > max[i]) return false; + } + + return true; +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline V +Box::size () const IMATH_NOEXCEPT +{ + if (isEmpty ()) return V (0); + + return max - min; +} + +template +IMATH_HOSTDEVICE constexpr inline V +Box::center () const IMATH_NOEXCEPT +{ + return (max + min) / 2; +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline bool +Box::isEmpty () const IMATH_NOEXCEPT +{ + for (unsigned int i = 0; i < min.dimensions (); i++) + { + if (max[i] < min[i]) return true; + } + + return false; +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline bool +Box::isInfinite () const IMATH_NOEXCEPT +{ + for (unsigned int i = 0; i < min.dimensions (); i++) + { + if (min[i] != V::baseTypeLowest () || max[i] != V::baseTypeMax ()) + return false; + } + + return true; +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline bool +Box::hasVolume () const IMATH_NOEXCEPT +{ + for (unsigned int i = 0; i < min.dimensions (); i++) + { + if (max[i] <= min[i]) return false; + } + + return true; +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline unsigned int +Box::majorAxis () const IMATH_NOEXCEPT +{ + unsigned int major = 0; + V s = size (); + + for (unsigned int i = 1; i < min.dimensions (); i++) + { + if (s[i] > s[major]) major = i; + } + + return major; +} + +//------------------------------------------------------------------- +// +// Partial class specializations for Imath::Vec2 and Imath::Vec3 +// +//------------------------------------------------------------------- + +template class Box; + +/// +/// The Box> template represents a 2D bounding box defined by +/// minimum and maximum values of type Vec2. The min and max members are +/// public. +/// + +template class IMATH_EXPORT_TEMPLATE_TYPE Box> +{ +public: + /// @{ + /// @name Direct access to bounds + + /// The minimum value of the box. + Vec2 min; + + /// The maximum value of the box. + Vec2 max; + + /// @} + + /// @{ + /// @name Constructors and Assignment + + /// Empty by default + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 Box () IMATH_NOEXCEPT; + + /// Construct a bounding box that contains a single point. + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 Box (const Vec2& point) + IMATH_NOEXCEPT; + + /// Construct a bounding box with the given minimum and maximum points + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 + Box (const Vec2& minT, const Vec2& maxT) IMATH_NOEXCEPT; + + /// @} + + /// @{ + /// @name Comparison + + /// Equality + IMATH_HOSTDEVICE constexpr bool + operator== (const Box>& src) const IMATH_NOEXCEPT; + + /// Inequality + IMATH_HOSTDEVICE constexpr bool + operator!= (const Box>& src) const IMATH_NOEXCEPT; + + /// @} + + /// @{ + /// @name Manipulation + + /// Set the Box to be empty. A Box is empty if the mimimum is + /// greater than the maximum. makeEmpty() sets the mimimum to + /// std::numeric_limits::max() and the maximum to + /// std::numeric_limits::lowest(). + IMATH_HOSTDEVICE void makeEmpty () IMATH_NOEXCEPT; + + /// Extend the Box to include the given point. + IMATH_HOSTDEVICE void extendBy (const Vec2& point) IMATH_NOEXCEPT; + + /// Extend the Box to include the given box. + IMATH_HOSTDEVICE void extendBy (const Box>& box) IMATH_NOEXCEPT; + + /// Make the box include the entire range of T. + IMATH_HOSTDEVICE void makeInfinite () IMATH_NOEXCEPT; + + /// @} + + /// @{ + /// @name Query + + /// Return the size of the box. The size is of type `V`, defined as + /// `(max-min)`. An empty box has a size of `V(0)`, i.e. 0 in each dimension. + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 Vec2 size () const IMATH_NOEXCEPT; + + /// Return the center of the box. The center is defined as + /// `(max+min)/2`. The center of an empty box is undefined. + IMATH_HOSTDEVICE constexpr Vec2 center () const IMATH_NOEXCEPT; + + /// Return true if the given point is inside the box, false otherwise. + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 bool + intersects (const Vec2& point) const IMATH_NOEXCEPT; + + /// Return true if the given box is inside the box, false otherwise. + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 bool + intersects (const Box>& box) const IMATH_NOEXCEPT; + + /// Return the major axis of the box. The major axis is the dimension with + /// the greatest difference between maximum and minimum. + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 unsigned int + majorAxis () const IMATH_NOEXCEPT; + + /// Return true if the box is empty, false otherwise. An empty box's + /// minimum is greater than its maximum. + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 bool isEmpty () const IMATH_NOEXCEPT; + + /// Return true if the box is larger than a single point, false otherwise. + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 bool hasVolume () const IMATH_NOEXCEPT; + + /// Return true if the box contains all points, false otherwise. + /// An infinite box has a mimimum of `V::baseTypeMin()` + /// and a maximum of `V::baseTypeMax()`. + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 bool isInfinite () const IMATH_NOEXCEPT; + + /// @} +}; + +//---------------- +// Implementation +//---------------- + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline Box>::Box () IMATH_NOEXCEPT +{ + makeEmpty (); +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline Box>::Box ( + const Vec2& point) IMATH_NOEXCEPT +{ + min = point; + max = point; +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline Box>::Box ( + const Vec2& minT, const Vec2& maxT) IMATH_NOEXCEPT +{ + min = minT; + max = maxT; +} + +template +IMATH_HOSTDEVICE constexpr inline bool +Box>::operator== (const Box>& src) const IMATH_NOEXCEPT +{ + return (min == src.min && max == src.max); +} + +template +IMATH_HOSTDEVICE constexpr inline bool +Box>::operator!= (const Box>& src) const IMATH_NOEXCEPT +{ + return (min != src.min || max != src.max); +} + +template +IMATH_HOSTDEVICE inline void +Box>::makeEmpty () IMATH_NOEXCEPT +{ + min = Vec2 (Vec2::baseTypeMax ()); + max = Vec2 (Vec2::baseTypeLowest ()); +} + +template +IMATH_HOSTDEVICE inline void +Box>::makeInfinite () IMATH_NOEXCEPT +{ + min = Vec2 (Vec2::baseTypeLowest ()); + max = Vec2 (Vec2::baseTypeMax ()); +} + +template +IMATH_HOSTDEVICE inline void +Box>::extendBy (const Vec2& point) IMATH_NOEXCEPT +{ + min.x = std::min (min.x, point.x); + max.x = std::max (max.x, point.x); + min.y = std::min (min.y, point.y); + max.y = std::max (max.y, point.y); +} + +template +IMATH_HOSTDEVICE inline void +Box>::extendBy (const Box>& box) IMATH_NOEXCEPT +{ + min.x = std::min (min.x, box.min.x); + max.x = std::max (max.x, box.max.x); + min.y = std::min (min.y, box.min.y); + max.y = std::max (max.y, box.max.y); +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline bool +Box>::intersects (const Vec2& point) const IMATH_NOEXCEPT +{ + return (point.x >= min.x) && (point.x <= max.x) && + (point.y >= min.y) && (point.y <= max.y); +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline bool +Box>::intersects (const Box>& box) const IMATH_NOEXCEPT +{ + return (box.min.x <= max.x) && (box.max.x >= min.x) && + (box.min.y <= max.y) && (box.max.y >= min.y); +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline Vec2 + Box>::size () const IMATH_NOEXCEPT +{ + if (isEmpty ()) return Vec2 (0); + + return max - min; +} + +template +IMATH_HOSTDEVICE constexpr inline Vec2 +Box>::center () const IMATH_NOEXCEPT +{ + return (max + min) / 2; +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline bool +Box>::isEmpty () const IMATH_NOEXCEPT +{ + return (max.x < min.x || max.y < min.y); +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline bool +Box>::isInfinite () const IMATH_NOEXCEPT +{ + if (min.x != std::numeric_limits::lowest () || + max.x != std::numeric_limits::max () || + min.y != std::numeric_limits::lowest () || + max.y != std::numeric_limits::max ()) + return false; + + return true; +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline bool +Box>::hasVolume () const IMATH_NOEXCEPT +{ + if (max.x <= min.x || max.y <= min.y) return false; + + return true; +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline unsigned int +Box>::majorAxis () const IMATH_NOEXCEPT +{ + Vec2 s = size (); + + return (s.x >= s.y) ? 0 : 1; +} + +/// +/// The Box template represents a 3D bounding box defined by +/// minimum and maximum values of type Vec3. +/// +template class IMATH_EXPORT_TEMPLATE_TYPE Box> +{ +public: + /// @{ + /// @name Direct access to bounds + + /// The minimum value of the box. + Vec3 min; + + /// The maximum value of the box. + Vec3 max; + + /// @} + + /// @{ + /// @name Constructors + + /// Empty by default + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 Box () IMATH_NOEXCEPT; + + /// Construct a bounding box that contains a single point. + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 Box (const Vec3& point) + IMATH_NOEXCEPT; + + /// Construct a bounding box with the given minimum and maximum points + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 + Box (const Vec3& minT, const Vec3& maxT) IMATH_NOEXCEPT; + + /// @} + + /// Equality + IMATH_HOSTDEVICE constexpr bool + operator== (const Box>& src) const IMATH_NOEXCEPT; + + /// Inequality + IMATH_HOSTDEVICE constexpr bool + operator!= (const Box>& src) const IMATH_NOEXCEPT; + + /// Set the Box to be empty. A Box is empty if the mimimum is + /// greater than the maximum. makeEmpty() sets the mimimum to + /// std::numeric_limits::max() and the maximum to + /// std::numeric_limits::lowest(). + IMATH_HOSTDEVICE void makeEmpty () IMATH_NOEXCEPT; + + /// Extend the Box to include the given point. + IMATH_HOSTDEVICE void extendBy (const Vec3& point) IMATH_NOEXCEPT; + /// Extend the Box to include the given box. + + IMATH_HOSTDEVICE void extendBy (const Box>& box) IMATH_NOEXCEPT; + + /// Make the box include the entire range of T. + IMATH_HOSTDEVICE void makeInfinite () IMATH_NOEXCEPT; + + /// Return the size of the box. The size is of type `V`, defined as + /// (max-min). An empty box has a size of V(0), i.e. 0 in each dimension. + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 Vec3 size () const IMATH_NOEXCEPT; + + /// Return the center of the box. The center is defined as + /// (max+min)/2. The center of an empty box is undefined. + IMATH_HOSTDEVICE constexpr Vec3 center () const IMATH_NOEXCEPT; + + /// Return true if the given point is inside the box, false otherwise. + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 bool + intersects (const Vec3& point) const IMATH_NOEXCEPT; + + /// Return true if the given box is inside the box, false otherwise. + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 bool + intersects (const Box>& box) const IMATH_NOEXCEPT; + + /// Return the major axis of the box. The major axis is the dimension with + /// the greatest difference between maximum and minimum. + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 unsigned int + majorAxis () const IMATH_NOEXCEPT; + + /// Return true if the box is empty, false otherwise. An empty box's + /// minimum is greater than its maximum. + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 bool isEmpty () const IMATH_NOEXCEPT; + + /// Return true if the box is larger than a single point, false otherwise. + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 bool hasVolume () const IMATH_NOEXCEPT; + + /// Return true if the box contains all points, false otherwise. + /// An infinite box has a mimimum of`V::baseTypeMin()` + /// and a maximum of `V::baseTypeMax()`. + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 bool isInfinite () const IMATH_NOEXCEPT; +}; + +//---------------- +// Implementation +//---------------- + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline Box>::Box () IMATH_NOEXCEPT +{ + makeEmpty (); +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline Box>::Box ( + const Vec3& point) IMATH_NOEXCEPT +{ + min = point; + max = point; +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline Box>::Box ( + const Vec3& minT, const Vec3& maxT) IMATH_NOEXCEPT +{ + min = minT; + max = maxT; +} + +template +IMATH_HOSTDEVICE constexpr inline bool +Box>::operator== (const Box>& src) const IMATH_NOEXCEPT +{ + return (min == src.min && max == src.max); +} + +template +IMATH_HOSTDEVICE constexpr inline bool +Box>::operator!= (const Box>& src) const IMATH_NOEXCEPT +{ + return (min != src.min || max != src.max); +} + +template +IMATH_HOSTDEVICE inline void +Box>::makeEmpty () IMATH_NOEXCEPT +{ + min = Vec3 (Vec3::baseTypeMax ()); + max = Vec3 (Vec3::baseTypeLowest ()); +} + +template +IMATH_HOSTDEVICE inline void +Box>::makeInfinite () IMATH_NOEXCEPT +{ + min = Vec3 (Vec3::baseTypeLowest ()); + max = Vec3 (Vec3::baseTypeMax ()); +} + +template +IMATH_HOSTDEVICE inline void +Box>::extendBy (const Vec3& point) IMATH_NOEXCEPT +{ + min.x = std::min (min.x, point.x); + min.y = std::min (min.y, point.y); + min.z = std::min (min.z, point.z); + max.x = std::max (max.x, point.x); + max.y = std::max (max.y, point.y); + max.z = std::max (max.z, point.z); +} + +template +IMATH_HOSTDEVICE inline void +Box>::extendBy (const Box>& box) IMATH_NOEXCEPT +{ + min.x = std::min (min.x, box.min.x); + min.y = std::min (min.y, box.min.y); + min.z = std::min (min.z, box.min.z); + max.x = std::max (max.x, box.max.x); + max.y = std::max (max.y, box.max.y); + max.z = std::max (max.z, box.max.z); +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline bool +Box>::intersects (const Vec3& point) const IMATH_NOEXCEPT +{ + return (point.x >= min.x) && (point.x <= max.x) && + (point.y >= min.y) && (point.y <= max.y) && + (point.z >= min.z) && (point.z <= max.z); +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline bool +Box>::intersects (const Box>& box) const IMATH_NOEXCEPT +{ + return (box.min.x <= max.x) && (box.max.x >= min.x) && + (box.min.y <= max.y) && (box.max.y >= min.y) && + (box.min.z <= max.z) && (box.max.z >= min.z); +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline Vec3 + Box>::size () const IMATH_NOEXCEPT +{ + if (isEmpty ()) return Vec3 (0); + + return max - min; +} + +template +IMATH_HOSTDEVICE constexpr inline Vec3 +Box>::center () const IMATH_NOEXCEPT +{ + return (max + min) / 2; +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline bool +Box>::isEmpty () const IMATH_NOEXCEPT +{ + return (max.x < min.x || max.y < min.y || max.z < min.z); +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline bool +Box>::isInfinite () const IMATH_NOEXCEPT +{ + if (min.x != std::numeric_limits::lowest () || + max.x != std::numeric_limits::max () || + min.y != std::numeric_limits::lowest () || + max.y != std::numeric_limits::max () || + min.z != std::numeric_limits::lowest () || + max.z != std::numeric_limits::max ()) + return false; + + return true; +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline bool +Box>::hasVolume () const IMATH_NOEXCEPT +{ + if (max.x <= min.x || max.y <= min.y || max.z <= min.z) return false; + + return true; +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline unsigned int +Box>::majorAxis () const IMATH_NOEXCEPT +{ + Vec3 s = size (); + + if (s.x >= s.y) + return (s.x >= s.z) ? 0 : 2; + return (s.y >= s.z) ? 1 : 2; +} + +IMATH_INTERNAL_NAMESPACE_HEADER_EXIT + +#endif // INCLUDED_IMATHBOX_H diff --git a/third_party/tlRender-install-Release/include/Imath/ImathBoxAlgo.h b/third_party/tlRender-install-Release/include/Imath/ImathBoxAlgo.h new file mode 100644 index 00000000..3ad5e127 --- /dev/null +++ b/third_party/tlRender-install-Release/include/Imath/ImathBoxAlgo.h @@ -0,0 +1,901 @@ +// +// SPDX-License-Identifier: BSD-3-Clause +// Copyright Contributors to the OpenEXR Project. +// + +// +// Axis-aligned bounding box utility functions +// + +#ifndef INCLUDED_IMATHBOXALGO_H +#define INCLUDED_IMATHBOXALGO_H + +#include "ImathNamespace.h" + +#include "ImathBox.h" +#include "ImathLineAlgo.h" +#include "ImathMatrix.h" +#include "ImathPlane.h" + +IMATH_INTERNAL_NAMESPACE_HEADER_ENTER + +/// +/// Clip the coordinates of a point, `p`, against a `Box`, `box`. +/// Return the closest point to `p` that is inside the box. +/// + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline T +clip (const T& p, const Box& box) IMATH_NOEXCEPT +{ + T q; + + for (int i = 0; i < int (box.min.dimensions ()); i++) + { + if (p[i] < box.min[i]) + q[i] = box.min[i]; + else if (p[i] > box.max[i]) + q[i] = box.max[i]; + else + q[i] = p[i]; + } + + return q; +} + +/// +/// Return the point in or on the `Box`, `box`, that is closesest to +/// the point, `p`. +/// + +template +IMATH_HOSTDEVICE constexpr inline T +closestPointInBox (const T& p, const Box& box) IMATH_NOEXCEPT +{ + return clip (p, box); +} + +/// +/// Return the point on the surface of the `Box`, `box`, that is +/// closest to point `p`. +/// +/// If the box is empty, return `p`. +/// + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 Vec3 +closestPointOnBox (const Vec3& p, const Box>& box) IMATH_NOEXCEPT +{ + if (box.isEmpty ()) return p; + + Vec3 q = closestPointInBox (p, box); + + if (q == p) + { + Vec3 d1 = p - box.min; + Vec3 d2 = box.max - p; + + Vec3 d ( + (d1.x < d2.x) ? d1.x : d2.x, + (d1.y < d2.y) ? d1.y : d2.y, + (d1.z < d2.z) ? d1.z : d2.z); + + if (d.x < d.y && d.x < d.z) + { + q.x = (d1.x < d2.x) ? box.min.x : box.max.x; + } + else if (d.y < d.z) + { + q.y = (d1.y < d2.y) ? box.min.y : box.max.y; + } + else + { + q.z = (d1.z < d2.z) ? box.min.z : box.max.z; + } + } + + return q; +} + +/// +/// Transform a 3D box by a matrix, and compute a new box that +/// tightly encloses the transformed box. Return the transformed box. +/// +/// If `m` is an affine transform, then we use James Arvo's fast +/// method as described in "Graphics Gems", Academic Press, 1990, +/// pp. 548-550. +/// +/// A transformed empty box is still empty, and a transformed infinite box +/// is still infinite. +/// + +template +IMATH_HOSTDEVICE Box> +transform (const Box>& box, const Matrix44& m) IMATH_NOEXCEPT +{ + if (box.isEmpty () || box.isInfinite ()) return box; + + // + // If the last column of m is (0 0 0 1) then m is an affine + // transform, and we use the fast Graphics Gems trick. + // + + if (m[0][3] == 0 && m[1][3] == 0 && m[2][3] == 0 && m[3][3] == 1) + { + Box> newBox; + + for (int i = 0; i < 3; i++) + { + newBox.min[i] = newBox.max[i] = (S) m[3][i]; + + for (int j = 0; j < 3; j++) + { + S a, b; + + a = (S) m[j][i] * box.min[j]; + b = (S) m[j][i] * box.max[j]; + + if (a < b) + { + newBox.min[i] += a; + newBox.max[i] += b; + } + else + { + newBox.min[i] += b; + newBox.max[i] += a; + } + } + } + + return newBox; + } + + // + // M is a projection matrix. Do things the naive way: + // Transform the eight corners of the box, and find an + // axis-parallel box that encloses the transformed corners. + // + + Vec3 points[8]; + + points[0][0] = points[1][0] = points[2][0] = points[3][0] = box.min[0]; + points[4][0] = points[5][0] = points[6][0] = points[7][0] = box.max[0]; + + points[0][1] = points[1][1] = points[4][1] = points[5][1] = box.min[1]; + points[2][1] = points[3][1] = points[6][1] = points[7][1] = box.max[1]; + + points[0][2] = points[2][2] = points[4][2] = points[6][2] = box.min[2]; + points[1][2] = points[3][2] = points[5][2] = points[7][2] = box.max[2]; + + Box> newBox; + + for (int i = 0; i < 8; i++) + newBox.extendBy (points[i] * m); + + return newBox; +} + +/// +/// Transform a 3D box by a matrix, and compute a new box that +/// tightly encloses the transformed box. The transformed box is +/// returned in the `result` argument. +/// +/// If m is an affine transform, then we use James Arvo's fast +/// method as described in "Graphics Gems", Academic Press, 1990, +/// pp. 548-550. +/// +/// A transformed empty box is still empty, and a transformed infinite +/// box is still infinite +/// + +template +IMATH_HOSTDEVICE void +transform (const Box>& box, const Matrix44& m, Box>& result) + IMATH_NOEXCEPT +{ + if (box.isEmpty () || box.isInfinite ()) { return; } + + // + // If the last column of m is (0 0 0 1) then m is an affine + // transform, and we use the fast Graphics Gems trick. + // + + if (m[0][3] == 0 && m[1][3] == 0 && m[2][3] == 0 && m[3][3] == 1) + { + for (int i = 0; i < 3; i++) + { + result.min[i] = result.max[i] = (S) m[3][i]; + + for (int j = 0; j < 3; j++) + { + S a, b; + + a = (S) m[j][i] * box.min[j]; + b = (S) m[j][i] * box.max[j]; + + if (a < b) + { + result.min[i] += a; + result.max[i] += b; + } + else + { + result.min[i] += b; + result.max[i] += a; + } + } + } + + return; + } + + // + // M is a projection matrix. Do things the naive way: + // Transform the eight corners of the box, and find an + // axis-parallel box that encloses the transformed corners. + // + + Vec3 points[8]; + + points[0][0] = points[1][0] = points[2][0] = points[3][0] = box.min[0]; + points[4][0] = points[5][0] = points[6][0] = points[7][0] = box.max[0]; + + points[0][1] = points[1][1] = points[4][1] = points[5][1] = box.min[1]; + points[2][1] = points[3][1] = points[6][1] = points[7][1] = box.max[1]; + + points[0][2] = points[2][2] = points[4][2] = points[6][2] = box.min[2]; + points[1][2] = points[3][2] = points[5][2] = points[7][2] = box.max[2]; + + for (int i = 0; i < 8; i++) + result.extendBy (points[i] * m); +} + +/// +/// Transform a 3D box by a matrix whose rightmost column `(0 0 0 1)`, +/// and compute a new box that tightly encloses the transformed +/// box. Return the transformed box. +/// +/// As in the transform() function, use James Arvo's fast method if +/// possible. +/// +/// A transformed empty or infinite box is still empty or infinite. +/// + +template +IMATH_HOSTDEVICE Box> +affineTransform (const Box>& box, const Matrix44& m) IMATH_NOEXCEPT +{ + if (box.isEmpty () || box.isInfinite ()) return box; + + Box> newBox; + + for (int i = 0; i < 3; i++) + { + newBox.min[i] = newBox.max[i] = (S) m[3][i]; + + for (int j = 0; j < 3; j++) + { + S a, b; + + a = (S) m[j][i] * box.min[j]; + b = (S) m[j][i] * box.max[j]; + + if (a < b) + { + newBox.min[i] += a; + newBox.max[i] += b; + } + else + { + newBox.min[i] += b; + newBox.max[i] += a; + } + } + } + + return newBox; +} + +/// +/// Transform a 3D box by a matrix whose rightmost column is +/// `(0 0 0 1)`, and compute a new box that tightly encloses +/// the transformed box. Return the transformed box in the `result` +/// argument. +/// +/// As in the transform() function, use James Arvo's fast method if +/// possible. +/// +/// A transformed empty or infinite box is still empty or infinite. +/// + +template +IMATH_HOSTDEVICE void +affineTransform ( + const Box>& box, + const Matrix44& m, + Box>& result) IMATH_NOEXCEPT +{ + if (box.isEmpty ()) + { + result.makeEmpty (); + return; + } + + if (box.isInfinite ()) + { + result.makeInfinite (); + return; + } + + for (int i = 0; i < 3; i++) + { + result.min[i] = result.max[i] = (S) m[3][i]; + + for (int j = 0; j < 3; j++) + { + S a, b; + + a = (S) m[j][i] * box.min[j]; + b = (S) m[j][i] * box.max[j]; + + if (a < b) + { + result.min[i] += a; + result.max[i] += b; + } + else + { + result.min[i] += b; + result.max[i] += a; + } + } + } +} + +/// +/// Compute the points where a ray, `r`, enters and exits a 3D box, `b`: +/// +/// Return true if the ray starts inside the box or if the ray starts +/// outside and intersects the box, or return false otherwise (that +/// is, if the ray does not intersect the box). +/// +/// The entry and exit points are the points on two of the faces of +/// the box when the function returns true (the entry end exit points +/// may be on either side of the ray's origin), or undefined if the +/// the function returns false. +/// + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 bool +findEntryAndExitPoints ( + const Line3& r, const Box>& b, Vec3& entry, Vec3& exit) + IMATH_NOEXCEPT +{ + if (b.isEmpty ()) + { + // + // No ray intersects an empty box + // + + return false; + } + + // + // The following description assumes that the ray's origin is outside + // the box, but the code below works even if the origin is inside the + // box: + // + // Between one and three "frontfacing" sides of the box are oriented + // towards the ray's origin, and between one and three "backfacing" + // sides are oriented away from the ray's origin. + // We intersect the ray with the planes that contain the sides of the + // box, and compare the distances between the ray's origin and the + // ray-plane intersections. The ray intersects the box if the most + // distant frontfacing intersection is nearer than the nearest + // backfacing intersection. If the ray does intersect the box, then + // the most distant frontfacing ray-plane intersection is the entry + // point and the nearest backfacing ray-plane intersection is the + // exit point. + // + + const T TMAX = std::numeric_limits::max (); + + T tFrontMax = -TMAX; + T tBackMin = TMAX; + + // + // Minimum and maximum X sides. + // + + if (r.dir.x >= 0) + { + T d1 = b.max.x - r.pos.x; + T d2 = b.min.x - r.pos.x; + + if (r.dir.x > 1 || + (abs (d1) < TMAX * r.dir.x && abs (d2) < TMAX * r.dir.x)) + { + T t1 = d1 / r.dir.x; + T t2 = d2 / r.dir.x; + + if (tBackMin > t1) + { + tBackMin = t1; + + exit.x = b.max.x; + exit.y = clamp (r.pos.y + t1 * r.dir.y, b.min.y, b.max.y); + exit.z = clamp (r.pos.z + t1 * r.dir.z, b.min.z, b.max.z); + } + + if (tFrontMax < t2) + { + tFrontMax = t2; + + entry.x = b.min.x; + entry.y = clamp (r.pos.y + t2 * r.dir.y, b.min.y, b.max.y); + entry.z = clamp (r.pos.z + t2 * r.dir.z, b.min.z, b.max.z); + } + } + else if (r.pos.x < b.min.x || r.pos.x > b.max.x) + { + return false; + } + } + else // r.dir.x < 0 + { + T d1 = b.min.x - r.pos.x; + T d2 = b.max.x - r.pos.x; + + if (r.dir.x < -1 || + (abs (d1) < -TMAX * r.dir.x && abs (d2) < -TMAX * r.dir.x)) + { + T t1 = d1 / r.dir.x; + T t2 = d2 / r.dir.x; + + if (tBackMin > t1) + { + tBackMin = t1; + + exit.x = b.min.x; + exit.y = clamp (r.pos.y + t1 * r.dir.y, b.min.y, b.max.y); + exit.z = clamp (r.pos.z + t1 * r.dir.z, b.min.z, b.max.z); + } + + if (tFrontMax < t2) + { + tFrontMax = t2; + + entry.x = b.max.x; + entry.y = clamp (r.pos.y + t2 * r.dir.y, b.min.y, b.max.y); + entry.z = clamp (r.pos.z + t2 * r.dir.z, b.min.z, b.max.z); + } + } + else if (r.pos.x < b.min.x || r.pos.x > b.max.x) + { + return false; + } + } + + // + // Minimum and maximum Y sides. + // + + if (r.dir.y >= 0) + { + T d1 = b.max.y - r.pos.y; + T d2 = b.min.y - r.pos.y; + + if (r.dir.y > 1 || + (abs (d1) < TMAX * r.dir.y && abs (d2) < TMAX * r.dir.y)) + { + T t1 = d1 / r.dir.y; + T t2 = d2 / r.dir.y; + + if (tBackMin > t1) + { + tBackMin = t1; + + exit.x = clamp (r.pos.x + t1 * r.dir.x, b.min.x, b.max.x); + exit.y = b.max.y; + exit.z = clamp (r.pos.z + t1 * r.dir.z, b.min.z, b.max.z); + } + + if (tFrontMax < t2) + { + tFrontMax = t2; + + entry.x = clamp (r.pos.x + t2 * r.dir.x, b.min.x, b.max.x); + entry.y = b.min.y; + entry.z = clamp (r.pos.z + t2 * r.dir.z, b.min.z, b.max.z); + } + } + else if (r.pos.y < b.min.y || r.pos.y > b.max.y) + { + return false; + } + } + else // r.dir.y < 0 + { + T d1 = b.min.y - r.pos.y; + T d2 = b.max.y - r.pos.y; + + if (r.dir.y < -1 || + (abs (d1) < -TMAX * r.dir.y && abs (d2) < -TMAX * r.dir.y)) + { + T t1 = d1 / r.dir.y; + T t2 = d2 / r.dir.y; + + if (tBackMin > t1) + { + tBackMin = t1; + + exit.x = clamp (r.pos.x + t1 * r.dir.x, b.min.x, b.max.x); + exit.y = b.min.y; + exit.z = clamp (r.pos.z + t1 * r.dir.z, b.min.z, b.max.z); + } + + if (tFrontMax < t2) + { + tFrontMax = t2; + + entry.x = clamp (r.pos.x + t2 * r.dir.x, b.min.x, b.max.x); + entry.y = b.max.y; + entry.z = clamp (r.pos.z + t2 * r.dir.z, b.min.z, b.max.z); + } + } + else if (r.pos.y < b.min.y || r.pos.y > b.max.y) + { + return false; + } + } + + // + // Minimum and maximum Z sides. + // + + if (r.dir.z >= 0) + { + T d1 = b.max.z - r.pos.z; + T d2 = b.min.z - r.pos.z; + + if (r.dir.z > 1 || + (abs (d1) < TMAX * r.dir.z && abs (d2) < TMAX * r.dir.z)) + { + T t1 = d1 / r.dir.z; + T t2 = d2 / r.dir.z; + + if (tBackMin > t1) + { + tBackMin = t1; + + exit.x = clamp (r.pos.x + t1 * r.dir.x, b.min.x, b.max.x); + exit.y = clamp (r.pos.y + t1 * r.dir.y, b.min.y, b.max.y); + exit.z = b.max.z; + } + + if (tFrontMax < t2) + { + tFrontMax = t2; + + entry.x = clamp (r.pos.x + t2 * r.dir.x, b.min.x, b.max.x); + entry.y = clamp (r.pos.y + t2 * r.dir.y, b.min.y, b.max.y); + entry.z = b.min.z; + } + } + else if (r.pos.z < b.min.z || r.pos.z > b.max.z) + { + return false; + } + } + else // r.dir.z < 0 + { + T d1 = b.min.z - r.pos.z; + T d2 = b.max.z - r.pos.z; + + if (r.dir.z < -1 || + (abs (d1) < -TMAX * r.dir.z && abs (d2) < -TMAX * r.dir.z)) + { + T t1 = d1 / r.dir.z; + T t2 = d2 / r.dir.z; + + if (tBackMin > t1) + { + tBackMin = t1; + + exit.x = clamp (r.pos.x + t1 * r.dir.x, b.min.x, b.max.x); + exit.y = clamp (r.pos.y + t1 * r.dir.y, b.min.y, b.max.y); + exit.z = b.min.z; + } + + if (tFrontMax < t2) + { + tFrontMax = t2; + + entry.x = clamp (r.pos.x + t2 * r.dir.x, b.min.x, b.max.x); + entry.y = clamp (r.pos.y + t2 * r.dir.y, b.min.y, b.max.y); + entry.z = b.max.z; + } + } + else if (r.pos.z < b.min.z || r.pos.z > b.max.z) + { + return false; + } + } + + return tFrontMax <= tBackMin; +} + +/// +/// Intersect a ray, `r`, with a 3D box, `b, and compute the intersection +/// point, returned in `ip`. +/// +/// The intersection point is +/// - the ray's origin if the ray starts inside the box +/// - a point on one of the faces of the box if the ray +/// starts outside the box +/// - undefined when intersect() returns false +/// +/// @return +/// - true if the ray starts inside the box or if the +/// ray starts outside and intersects the box +/// - false if the ray starts outside the box and intersects it, +/// but the intersection is behind the ray's origin. +/// - false if the ray starts outside and does not intersect it +/// + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 bool +intersects (const Box>& b, const Line3& r, Vec3& ip) + IMATH_NOEXCEPT +{ + if (b.isEmpty ()) + { + // + // No ray intersects an empty box + // + + return false; + } + + if (b.intersects (r.pos)) + { + // + // The ray starts inside the box + // + + ip = r.pos; + return true; + } + + // + // The ray starts outside the box. Between one and three "frontfacing" + // sides of the box are oriented towards the ray, and between one and + // three "backfacing" sides are oriented away from the ray. + // We intersect the ray with the planes that contain the sides of the + // box, and compare the distances between ray's origin and the ray-plane + // intersections. + // The ray intersects the box if the most distant frontfacing intersection + // is nearer than the nearest backfacing intersection. If the ray does + // intersect the box, then the most distant frontfacing ray-plane + // intersection is the ray-box intersection. + // + + const T TMAX = std::numeric_limits::max (); + + T tFrontMax = -1; + T tBackMin = TMAX; + + // + // Minimum and maximum X sides. + // + + if (r.dir.x > 0) + { + if (r.pos.x > b.max.x) return false; + + T d = b.max.x - r.pos.x; + + if (r.dir.x > 1 || d < TMAX * r.dir.x) + { + T t = d / r.dir.x; + + if (tBackMin > t) tBackMin = t; + } + + if (r.pos.x <= b.min.x) + { + T d = b.min.x - r.pos.x; + T t = (r.dir.x > 1 || d < TMAX * r.dir.x) ? d / r.dir.x : TMAX; + + if (tFrontMax < t) + { + tFrontMax = t; + + ip.x = b.min.x; + ip.y = clamp (r.pos.y + t * r.dir.y, b.min.y, b.max.y); + ip.z = clamp (r.pos.z + t * r.dir.z, b.min.z, b.max.z); + } + } + } + else if (r.dir.x < 0) + { + if (r.pos.x < b.min.x) return false; + + T d = b.min.x - r.pos.x; + + if (r.dir.x < -1 || d > TMAX * r.dir.x) + { + T t = d / r.dir.x; + + if (tBackMin > t) tBackMin = t; + } + + if (r.pos.x >= b.max.x) + { + T d = b.max.x - r.pos.x; + T t = (r.dir.x < -1 || d > TMAX * r.dir.x) ? d / r.dir.x : TMAX; + + if (tFrontMax < t) + { + tFrontMax = t; + + ip.x = b.max.x; + ip.y = clamp (r.pos.y + t * r.dir.y, b.min.y, b.max.y); + ip.z = clamp (r.pos.z + t * r.dir.z, b.min.z, b.max.z); + } + } + } + else // r.dir.x == 0 + { + if (r.pos.x < b.min.x || r.pos.x > b.max.x) return false; + } + + // + // Minimum and maximum Y sides. + // + + if (r.dir.y > 0) + { + if (r.pos.y > b.max.y) return false; + + T d = b.max.y - r.pos.y; + + if (r.dir.y > 1 || d < TMAX * r.dir.y) + { + T t = d / r.dir.y; + + if (tBackMin > t) tBackMin = t; + } + + if (r.pos.y <= b.min.y) + { + T d = b.min.y - r.pos.y; + T t = (r.dir.y > 1 || d < TMAX * r.dir.y) ? d / r.dir.y : TMAX; + + if (tFrontMax < t) + { + tFrontMax = t; + + ip.x = clamp (r.pos.x + t * r.dir.x, b.min.x, b.max.x); + ip.y = b.min.y; + ip.z = clamp (r.pos.z + t * r.dir.z, b.min.z, b.max.z); + } + } + } + else if (r.dir.y < 0) + { + if (r.pos.y < b.min.y) return false; + + T d = b.min.y - r.pos.y; + + if (r.dir.y < -1 || d > TMAX * r.dir.y) + { + T t = d / r.dir.y; + + if (tBackMin > t) tBackMin = t; + } + + if (r.pos.y >= b.max.y) + { + T d = b.max.y - r.pos.y; + T t = (r.dir.y < -1 || d > TMAX * r.dir.y) ? d / r.dir.y : TMAX; + + if (tFrontMax < t) + { + tFrontMax = t; + + ip.x = clamp (r.pos.x + t * r.dir.x, b.min.x, b.max.x); + ip.y = b.max.y; + ip.z = clamp (r.pos.z + t * r.dir.z, b.min.z, b.max.z); + } + } + } + else // r.dir.y == 0 + { + if (r.pos.y < b.min.y || r.pos.y > b.max.y) return false; + } + + // + // Minimum and maximum Z sides. + // + + if (r.dir.z > 0) + { + if (r.pos.z > b.max.z) return false; + + T d = b.max.z - r.pos.z; + + if (r.dir.z > 1 || d < TMAX * r.dir.z) + { + T t = d / r.dir.z; + + if (tBackMin > t) tBackMin = t; + } + + if (r.pos.z <= b.min.z) + { + T d = b.min.z - r.pos.z; + T t = (r.dir.z > 1 || d < TMAX * r.dir.z) ? d / r.dir.z : TMAX; + + if (tFrontMax < t) + { + tFrontMax = t; + + ip.x = clamp (r.pos.x + t * r.dir.x, b.min.x, b.max.x); + ip.y = clamp (r.pos.y + t * r.dir.y, b.min.y, b.max.y); + ip.z = b.min.z; + } + } + } + else if (r.dir.z < 0) + { + if (r.pos.z < b.min.z) return false; + + T d = b.min.z - r.pos.z; + + if (r.dir.z < -1 || d > TMAX * r.dir.z) + { + T t = d / r.dir.z; + + if (tBackMin > t) tBackMin = t; + } + + if (r.pos.z >= b.max.z) + { + T d = b.max.z - r.pos.z; + T t = (r.dir.z < -1 || d > TMAX * r.dir.z) ? d / r.dir.z : TMAX; + + if (tFrontMax < t) + { + tFrontMax = t; + + ip.x = clamp (r.pos.x + t * r.dir.x, b.min.x, b.max.x); + ip.y = clamp (r.pos.y + t * r.dir.y, b.min.y, b.max.y); + ip.z = b.max.z; + } + } + } + else // r.dir.z == 0 + { + if (r.pos.z < b.min.z || r.pos.z > b.max.z) return false; + } + + return tFrontMax <= tBackMin; +} + +/// +/// Return whether the the ray `ray` interects the 3D box `box`. +/// + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 bool +intersects (const Box>& box, const Line3& ray) IMATH_NOEXCEPT +{ + Vec3 ignored; + return intersects (box, ray, ignored); +} + +IMATH_INTERNAL_NAMESPACE_HEADER_EXIT + +#endif // INCLUDED_IMATHBOXALGO_H diff --git a/third_party/tlRender-install-Release/include/Imath/ImathColor.h b/third_party/tlRender-install-Release/include/Imath/ImathColor.h new file mode 100644 index 00000000..b3a763d5 --- /dev/null +++ b/third_party/tlRender-install-Release/include/Imath/ImathColor.h @@ -0,0 +1,799 @@ +// +// SPDX-License-Identifier: BSD-3-Clause +// Copyright Contributors to the OpenEXR Project. +// + +// +// 3-channel and 4-channel color representations +// + +#ifndef INCLUDED_IMATHCOLOR_H +#define INCLUDED_IMATHCOLOR_H + +#include "ImathExport.h" +#include "ImathNamespace.h" + +#include "ImathVec.h" +#include "half.h" + +IMATH_INTERNAL_NAMESPACE_HEADER_ENTER + +/// +/// 3-channel color class that inherits from Vec3. +/// +/// This class does not impose interpretation on the channels, which +/// can represent either rgb or hsv color values. +/// +/// Note: because Color3 inherits from Vec3, its member fields are +/// called `x`, `y`, and `z`. + +template class IMATH_EXPORT_TEMPLATE_TYPE Color3 : public Vec3 +{ +public: + /// @{ + /// @name Constructors and Assignemt + + /// No initialization by default + IMATH_HOSTDEVICE Color3 () IMATH_NOEXCEPT; + + /// Initialize to (a a a) + IMATH_HOSTDEVICE constexpr explicit Color3 (T a) IMATH_NOEXCEPT; + + /// Initialize to (a b c) + IMATH_HOSTDEVICE constexpr Color3 (T a, T b, T c) IMATH_NOEXCEPT; + + /// Construct from Color3 + IMATH_HOSTDEVICE constexpr Color3 (const Color3& c) IMATH_NOEXCEPT; + + /// Construct from Vec3 + template + IMATH_HOSTDEVICE constexpr Color3 (const Vec3& v) IMATH_NOEXCEPT; + + /// Destructor + ~Color3() = default; + + /// Component-wise assignment + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 const Color3& + operator= (const Color3& c) IMATH_NOEXCEPT; + + /// @} + + /// @{ + /// @name Arithmetic + + /// Component-wise addition + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 const Color3& + operator+= (const Color3& c) IMATH_NOEXCEPT; + + /// Component-wise addition + IMATH_HOSTDEVICE constexpr Color3 + operator+ (const Color3& c) const IMATH_NOEXCEPT; + + /// Component-wise subtraction + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 const Color3& + operator-= (const Color3& c) IMATH_NOEXCEPT; + + /// Component-wise subtraction + IMATH_HOSTDEVICE constexpr Color3 + operator- (const Color3& c) const IMATH_NOEXCEPT; + + /// Component-wise multiplication by -1 + IMATH_HOSTDEVICE constexpr Color3 operator- () const IMATH_NOEXCEPT; + + /// Component-wise multiplication by -1 + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 const Color3& negate () IMATH_NOEXCEPT; + + /// Component-wise multiplication + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 const Color3& + operator*= (const Color3& c) IMATH_NOEXCEPT; + + /// Component-wise multiplication + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 const Color3& + operator*= (T a) IMATH_NOEXCEPT; + + /// Component-wise multiplication + IMATH_HOSTDEVICE constexpr Color3 + operator* (const Color3& c) const IMATH_NOEXCEPT; + + /// Component-wise multiplication + IMATH_HOSTDEVICE constexpr Color3 operator* (T a) const IMATH_NOEXCEPT; + + /// Component-wise division + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 const Color3& + operator/= (const Color3& c) IMATH_NOEXCEPT; + + /// Component-wise division + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 const Color3& + operator/= (T a) IMATH_NOEXCEPT; + + /// Component-wise division + IMATH_HOSTDEVICE constexpr Color3 + operator/ (const Color3& c) const IMATH_NOEXCEPT; + + /// Component-wise division + IMATH_HOSTDEVICE constexpr Color3 operator/ (T a) const IMATH_NOEXCEPT; + + /// @} +}; + +/// +/// A 4-channel color class: 3 channels plus alpha. +/// +/// For convenience, the fields are named `r`, `g`, and `b`, although +/// this class does not impose interpretation on the channels, which +/// can represent either rgb or hsv color values. +/// + +template class IMATH_EXPORT_TEMPLATE_TYPE Color4 +{ +public: + /// @{ + /// @name Direct access to elements + + T r, g, b, a; + + /// @} + + /// @{ + /// @name Constructors and Assignment + + /// No initialization by default + IMATH_HOSTDEVICE Color4 () IMATH_NOEXCEPT; + + /// Initialize to `(a a a a)` + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 explicit Color4 (T a) IMATH_NOEXCEPT; + + /// Initialize to `(a b c d)` + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 Color4 (T a, T b, T c, T d) + IMATH_NOEXCEPT; + + /// Construct from Color4 + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 Color4 (const Color4& v) IMATH_NOEXCEPT; + + /// Construct from Color4 + template + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 Color4 (const Color4& v) + IMATH_NOEXCEPT; + + /// Destructor + ~Color4() = default; + + /// Assignment + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 const Color4& + operator= (const Color4& v) IMATH_NOEXCEPT; + + /// Component-wise value + IMATH_HOSTDEVICE T& operator[] (int i) IMATH_NOEXCEPT; + + /// Component-wise value + IMATH_HOSTDEVICE const T& operator[] (int i) const IMATH_NOEXCEPT; + + /// @} + + /// @{ + /// @name Arithmetic and Comparison + + /// Equality + template + IMATH_HOSTDEVICE constexpr bool + operator== (const Color4& v) const IMATH_NOEXCEPT; + + /// Inequality + template + IMATH_HOSTDEVICE constexpr bool + operator!= (const Color4& v) const IMATH_NOEXCEPT; + + /// Component-wise addition + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 const Color4& + operator+= (const Color4& v) IMATH_NOEXCEPT; + + /// Component-wise addition + IMATH_HOSTDEVICE constexpr Color4 + operator+ (const Color4& v) const IMATH_NOEXCEPT; + + /// Component-wise subtraction + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 const Color4& + operator-= (const Color4& v) IMATH_NOEXCEPT; + + /// Component-wise subtraction + IMATH_HOSTDEVICE constexpr Color4 + operator- (const Color4& v) const IMATH_NOEXCEPT; + + /// Component-wise multiplication by -1 + IMATH_HOSTDEVICE constexpr Color4 operator- () const IMATH_NOEXCEPT; + + /// Component-wise multiplication by -1 + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 const Color4& negate () IMATH_NOEXCEPT; + + /// Component-wise multiplication + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 const Color4& + operator*= (const Color4& v) IMATH_NOEXCEPT; + + /// Component-wise multiplication + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 const Color4& + operator*= (T a) IMATH_NOEXCEPT; + + /// Component-wise multiplication + IMATH_HOSTDEVICE constexpr Color4 + operator* (const Color4& v) const IMATH_NOEXCEPT; + + /// Component-wise multiplication + IMATH_HOSTDEVICE constexpr Color4 operator* (T a) const IMATH_NOEXCEPT; + + /// Component-wise division + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 const Color4& + operator/= (const Color4& v) IMATH_NOEXCEPT; + + /// Component-wise division + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 const Color4& + operator/= (T a) IMATH_NOEXCEPT; + + /// Component-wise division + IMATH_HOSTDEVICE constexpr Color4 + operator/ (const Color4& v) const IMATH_NOEXCEPT; + + /// Component-wise division + IMATH_HOSTDEVICE constexpr Color4 operator/ (T a) const IMATH_NOEXCEPT; + + /// @} + + /// @{ + /// @name Numeric Limits + + /// Number of dimensions (channels), i.e. 4 for a Color4 + IMATH_HOSTDEVICE constexpr static unsigned int dimensions () IMATH_NOEXCEPT + { + return 4; + } + + /// Largest possible negative value + IMATH_HOSTDEVICE constexpr static T baseTypeLowest () IMATH_NOEXCEPT + { + return std::numeric_limits::lowest (); + } + + /// Largest possible positive value + IMATH_HOSTDEVICE constexpr static T baseTypeMax () IMATH_NOEXCEPT + { + return std::numeric_limits::max (); + } + + /// Smallest possible positive value + IMATH_HOSTDEVICE constexpr static T baseTypeSmallest () IMATH_NOEXCEPT + { + return std::numeric_limits::min (); + } + + /// Smallest possible e for which 1+e != 1 + IMATH_HOSTDEVICE constexpr static T baseTypeEpsilon () IMATH_NOEXCEPT + { + return std::numeric_limits::epsilon (); + } + + /// @} + + /// The base type: In templates that accept a parameter `V` (could + /// be a Color4), you can refer to `T` as `V::BaseType` + typedef T BaseType; + + /// @{ + /// @name Compatibilty with Sb + + /// Set the value + template + IMATH_HOSTDEVICE void setValue (S a, S b, S c, S d) IMATH_NOEXCEPT; + + /// Set the value + template + IMATH_HOSTDEVICE void setValue (const Color4& v) IMATH_NOEXCEPT; + + /// Return the value + template + IMATH_HOSTDEVICE void + getValue (S& a, S& b, S& c, S& d) const IMATH_NOEXCEPT; + + /// Return the value + template + IMATH_HOSTDEVICE void getValue (Color4& v) const IMATH_NOEXCEPT; + + /// Return raw pointer to the value + IMATH_HOSTDEVICE T* getValue () IMATH_NOEXCEPT; + + /// Return raw pointer to the value + IMATH_HOSTDEVICE const T* getValue () const IMATH_NOEXCEPT; + + /// @} +}; + +/// Stream output, as "(r g b a)" +template +std::ostream& operator<< (std::ostream& s, const Color4& v); + +/// Reverse multiplication: S * Color4 +template +IMATH_HOSTDEVICE constexpr Color4 +operator* (S a, const Color4& v) IMATH_NOEXCEPT; + +/// 3 float channels +typedef Color3 Color3f; + +/// 3 half channels +typedef Color3 Color3h; + +/// 3 8-bit integer channels +typedef Color3 Color3c; + +/// 3 half channels +typedef Color3 C3h; + +/// 3 float channels +typedef Color3 C3f; + +/// 3 8-bit integer channels +typedef Color3 C3c; + +/// 4 float channels +typedef Color4 Color4f; + +/// 4 half channels +typedef Color4 Color4h; + +/// 4 8-bit integer channels +typedef Color4 Color4c; + +/// 4 float channels +typedef Color4 C4f; + +/// 4 half channels +typedef Color4 C4h; + +/// 4 8-bit integer channels +typedef Color4 C4c; + +/// Packed 32-bit integer +typedef unsigned int PackedColor; + +// +// Implementation of Color3 +// + +template +IMATH_HOSTDEVICE inline Color3::Color3 () IMATH_NOEXCEPT : Vec3 () +{ + // empty +} + +template +IMATH_HOSTDEVICE constexpr inline Color3::Color3 (T a) IMATH_NOEXCEPT + : Vec3 (a) +{ + // empty +} + +template +IMATH_HOSTDEVICE constexpr inline Color3::Color3 (T a, T b, T c) + IMATH_NOEXCEPT : Vec3 (a, b, c) +{ + // empty +} + +template +IMATH_HOSTDEVICE constexpr inline Color3::Color3 (const Color3& c) + IMATH_NOEXCEPT : Vec3 (c) +{ + // empty +} + +template +template +IMATH_HOSTDEVICE constexpr inline Color3::Color3 (const Vec3& v) + IMATH_NOEXCEPT : Vec3 (v) +{ + //empty +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline const Color3& +Color3::operator= (const Color3& c) IMATH_NOEXCEPT +{ + *((Vec3*) this) = c; + return *this; +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline const Color3& +Color3::operator+= (const Color3& c) IMATH_NOEXCEPT +{ + *((Vec3*) this) += c; + return *this; +} + +template +IMATH_HOSTDEVICE constexpr inline Color3 +Color3::operator+ (const Color3& c) const IMATH_NOEXCEPT +{ + return Color3 (*(Vec3*) this + (const Vec3&) c); +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline const Color3& +Color3::operator-= (const Color3& c) IMATH_NOEXCEPT +{ + *((Vec3*) this) -= c; + return *this; +} + +template +IMATH_HOSTDEVICE constexpr inline Color3 +Color3::operator- (const Color3& c) const IMATH_NOEXCEPT +{ + return Color3 (*(Vec3*) this - (const Vec3&) c); +} + +template +IMATH_HOSTDEVICE constexpr inline Color3 +Color3::operator- () const IMATH_NOEXCEPT +{ + return Color3 (-(*(Vec3*) this)); +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline const Color3& + Color3::negate () IMATH_NOEXCEPT +{ + ((Vec3*) this)->negate (); + return *this; +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline const Color3& +Color3::operator*= (const Color3& c) IMATH_NOEXCEPT +{ + *((Vec3*) this) *= c; + return *this; +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline const Color3& +Color3::operator*= (T a) IMATH_NOEXCEPT +{ + *((Vec3*) this) *= a; + return *this; +} + +template +IMATH_HOSTDEVICE constexpr inline Color3 +Color3::operator* (const Color3& c) const IMATH_NOEXCEPT +{ + return Color3 (*(Vec3*) this * (const Vec3&) c); +} + +template +IMATH_HOSTDEVICE constexpr inline Color3 +Color3::operator* (T a) const IMATH_NOEXCEPT +{ + return Color3 (*(Vec3*) this * a); +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline const Color3& +Color3::operator/= (const Color3& c) IMATH_NOEXCEPT +{ + *((Vec3*) this) /= c; + return *this; +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline const Color3& +Color3::operator/= (T a) IMATH_NOEXCEPT +{ + *((Vec3*) this) /= a; + return *this; +} + +template +IMATH_HOSTDEVICE constexpr inline Color3 +Color3::operator/ (const Color3& c) const IMATH_NOEXCEPT +{ + return Color3 (*(Vec3*) this / (const Vec3&) c); +} + +template +IMATH_HOSTDEVICE constexpr inline Color3 +Color3::operator/ (T a) const IMATH_NOEXCEPT +{ + return Color3 (*(Vec3*) this / a); +} + +// +// Implementation of Color4 +// + +template +IMATH_HOSTDEVICE inline T& +Color4::operator[] (int i) IMATH_NOEXCEPT +{ + return reinterpret_cast (this)[i]; +} + +template +IMATH_HOSTDEVICE inline const T& +Color4::operator[] (int i) const IMATH_NOEXCEPT +{ + return reinterpret_cast (this)[i]; +} + +template IMATH_HOSTDEVICE inline Color4::Color4 () IMATH_NOEXCEPT +{ + // empty +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline Color4::Color4 (T x) IMATH_NOEXCEPT +{ + r = g = b = a = x; +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline Color4::Color4 (T x, T y, T z, T w) + IMATH_NOEXCEPT +{ + r = x; + g = y; + b = z; + a = w; +} + +template +IMATH_HOSTDEVICE + IMATH_CONSTEXPR14 inline Color4::Color4 (const Color4& v) IMATH_NOEXCEPT +{ + r = v.r; + g = v.g; + b = v.b; + a = v.a; +} + +template +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline Color4::Color4 (const Color4& v) + IMATH_NOEXCEPT +{ + r = T (v.r); + g = T (v.g); + b = T (v.b); + a = T (v.a); +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline const Color4& +Color4::operator= (const Color4& v) IMATH_NOEXCEPT +{ + r = v.r; + g = v.g; + b = v.b; + a = v.a; + return *this; +} + +template +template +IMATH_HOSTDEVICE inline void +Color4::setValue (S x, S y, S z, S w) IMATH_NOEXCEPT +{ + r = T (x); + g = T (y); + b = T (z); + a = T (w); +} + +template +template +IMATH_HOSTDEVICE inline void +Color4::setValue (const Color4& v) IMATH_NOEXCEPT +{ + r = T (v.r); + g = T (v.g); + b = T (v.b); + a = T (v.a); +} + +template +template +IMATH_HOSTDEVICE inline void +Color4::getValue (S& x, S& y, S& z, S& w) const IMATH_NOEXCEPT +{ + x = S (r); + y = S (g); + z = S (b); + w = S (a); +} + +template +template +IMATH_HOSTDEVICE inline void +Color4::getValue (Color4& v) const IMATH_NOEXCEPT +{ + v.r = S (r); + v.g = S (g); + v.b = S (b); + v.a = S (a); +} + +template +IMATH_HOSTDEVICE inline T* +Color4::getValue () IMATH_NOEXCEPT +{ + return reinterpret_cast (this); +} + +template +IMATH_HOSTDEVICE inline const T* +Color4::getValue () const IMATH_NOEXCEPT +{ + return reinterpret_cast (this); +} + +template +template +IMATH_HOSTDEVICE constexpr inline bool +Color4::operator== (const Color4& v) const IMATH_NOEXCEPT +{ + return r == v.r && g == v.g && b == v.b && a == v.a; +} + +template +template +IMATH_HOSTDEVICE constexpr inline bool +Color4::operator!= (const Color4& v) const IMATH_NOEXCEPT +{ + return r != v.r || g != v.g || b != v.b || a != v.a; +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline const Color4& +Color4::operator+= (const Color4& v) IMATH_NOEXCEPT +{ + r += v.r; + g += v.g; + b += v.b; + a += v.a; + return *this; +} + +template +IMATH_HOSTDEVICE constexpr inline Color4 +Color4::operator+ (const Color4& v) const IMATH_NOEXCEPT +{ + return Color4 (r + v.r, g + v.g, b + v.b, a + v.a); +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline const Color4& +Color4::operator-= (const Color4& v) IMATH_NOEXCEPT +{ + r -= v.r; + g -= v.g; + b -= v.b; + a -= v.a; + return *this; +} + +template +IMATH_HOSTDEVICE constexpr inline Color4 +Color4::operator- (const Color4& v) const IMATH_NOEXCEPT +{ + return Color4 (r - v.r, g - v.g, b - v.b, a - v.a); +} + +template +IMATH_HOSTDEVICE constexpr inline Color4 +Color4::operator- () const IMATH_NOEXCEPT +{ + return Color4 (-r, -g, -b, -a); +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline const Color4& + Color4::negate () IMATH_NOEXCEPT +{ + r = -r; + g = -g; + b = -b; + a = -a; + return *this; +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline const Color4& +Color4::operator*= (const Color4& v) IMATH_NOEXCEPT +{ + r *= v.r; + g *= v.g; + b *= v.b; + a *= v.a; + return *this; +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline const Color4& +Color4::operator*= (T x) IMATH_NOEXCEPT +{ + r *= x; + g *= x; + b *= x; + a *= x; + return *this; +} + +template +IMATH_HOSTDEVICE constexpr inline Color4 +Color4::operator* (const Color4& v) const IMATH_NOEXCEPT +{ + return Color4 (r * v.r, g * v.g, b * v.b, a * v.a); +} + +template +IMATH_HOSTDEVICE constexpr inline Color4 +Color4::operator* (T x) const IMATH_NOEXCEPT +{ + return Color4 (r * x, g * x, b * x, a * x); +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline const Color4& +Color4::operator/= (const Color4& v) IMATH_NOEXCEPT +{ + r /= v.r; + g /= v.g; + b /= v.b; + a /= v.a; + return *this; +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline const Color4& +Color4::operator/= (T x) IMATH_NOEXCEPT +{ + r /= x; + g /= x; + b /= x; + a /= x; + return *this; +} + +template +IMATH_HOSTDEVICE constexpr inline Color4 +Color4::operator/ (const Color4& v) const IMATH_NOEXCEPT +{ + return Color4 (r / v.r, g / v.g, b / v.b, a / v.a); +} + +template +IMATH_HOSTDEVICE constexpr inline Color4 +Color4::operator/ (T x) const IMATH_NOEXCEPT +{ + return Color4 (r / x, g / x, b / x, a / x); +} + +template +std::ostream& +operator<< (std::ostream& s, const Color4& v) +{ + return s << '(' << v.r << ' ' << v.g << ' ' << v.b << ' ' << v.a << ')'; +} + +// +// Implementation of reverse multiplication +// + +template +IMATH_HOSTDEVICE constexpr inline Color4 +operator* (S x, const Color4& v) IMATH_NOEXCEPT +{ + return Color4 (x * v.r, x * v.g, x * v.b, x * v.a); +} + +IMATH_INTERNAL_NAMESPACE_HEADER_EXIT + +#endif // INCLUDED_IMATHCOLOR_H diff --git a/third_party/tlRender-install-Release/include/Imath/ImathColorAlgo.h b/third_party/tlRender-install-Release/include/Imath/ImathColorAlgo.h new file mode 100644 index 00000000..cb56fff3 --- /dev/null +++ b/third_party/tlRender-install-Release/include/Imath/ImathColorAlgo.h @@ -0,0 +1,266 @@ +// +// SPDX-License-Identifier: BSD-3-Clause +// Copyright Contributors to the OpenEXR Project. +// + +// +// Color conversion functions and general color algorithms +// + +#ifndef INCLUDED_IMATHCOLORALGO_H +#define INCLUDED_IMATHCOLORALGO_H + +#include "ImathExport.h" +#include "ImathNamespace.h" + +#include "ImathColor.h" +#include "ImathMath.h" + +IMATH_INTERNAL_NAMESPACE_HEADER_ENTER + +// +// Non-templated helper routines for color conversion. +// These routines eliminate type warnings under g++. +// + +/// +/// Convert 3-channel hsv to rgb. Non-templated helper routine. +IMATH_EXPORT Vec3 hsv2rgb_d (const Vec3& hsv) IMATH_NOEXCEPT; + +/// +/// Convert 4-channel hsv to rgb (with alpha). Non-templated helper routine. +IMATH_EXPORT Color4 + hsv2rgb_d (const Color4& hsv) IMATH_NOEXCEPT; + +/// +/// Convert 3-channel rgb to hsv. Non-templated helper routine. +IMATH_EXPORT Vec3 rgb2hsv_d (const Vec3& rgb) IMATH_NOEXCEPT; + +/// +/// Convert 4-channel rgb to hsv. Non-templated helper routine. +IMATH_EXPORT Color4 + rgb2hsv_d (const Color4& rgb) IMATH_NOEXCEPT; + +/// +/// Convert 3-channel hsv to rgb. +/// + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 Vec3 + hsv2rgb (const Vec3& hsv) IMATH_NOEXCEPT +{ + if (std::numeric_limits::is_integer) + { + Vec3 v = Vec3 ( + hsv.x / double (std::numeric_limits::max ()), + hsv.y / double (std::numeric_limits::max ()), + hsv.z / double (std::numeric_limits::max ())); + Vec3 c = hsv2rgb_d (v); + return Vec3 ( + (T) (c.x * std::numeric_limits::max ()), + (T) (c.y * std::numeric_limits::max ()), + (T) (c.z * std::numeric_limits::max ())); + } + else + { + Vec3 v = Vec3 (hsv.x, hsv.y, hsv.z); + Vec3 c = hsv2rgb_d (v); + return Vec3 ((T) c.x, (T) c.y, (T) c.z); + } +} + +/// +/// Convert 4-channel hsv to rgb (with alpha). +/// + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 Color4 + hsv2rgb (const Color4& hsv) IMATH_NOEXCEPT +{ + if (std::numeric_limits::is_integer) + { + Color4 v = Color4 ( + hsv.r / float (std::numeric_limits::max ()), + hsv.g / float (std::numeric_limits::max ()), + hsv.b / float (std::numeric_limits::max ()), + hsv.a / float (std::numeric_limits::max ())); + Color4 c = hsv2rgb_d (v); + return Color4 ( + (T) (c.r * std::numeric_limits::max ()), + (T) (c.g * std::numeric_limits::max ()), + (T) (c.b * std::numeric_limits::max ()), + (T) (c.a * std::numeric_limits::max ())); + } + else + { + Color4 v = Color4 (hsv.r, hsv.g, hsv.b, hsv.a); + Color4 c = hsv2rgb_d (v); + return Color4 ((T) c.r, (T) c.g, (T) c.b, (T) c.a); + } +} + +/// +/// Convert 3-channel rgb to hsv. +/// + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 Vec3 + rgb2hsv (const Vec3& rgb) IMATH_NOEXCEPT +{ + if (std::numeric_limits::is_integer) + { + Vec3 v = Vec3 ( + rgb.x / double (std::numeric_limits::max ()), + rgb.y / double (std::numeric_limits::max ()), + rgb.z / double (std::numeric_limits::max ())); + Vec3 c = rgb2hsv_d (v); + return Vec3 ( + (T) (c.x * std::numeric_limits::max ()), + (T) (c.y * std::numeric_limits::max ()), + (T) (c.z * std::numeric_limits::max ())); + } + else + { + Vec3 v = Vec3 (rgb.x, rgb.y, rgb.z); + Vec3 c = rgb2hsv_d (v); + return Vec3 ((T) c.x, (T) c.y, (T) c.z); + } +} + +/// +/// Convert 4-channel rgb to hsv (with alpha). +/// + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 Color4 + rgb2hsv (const Color4& rgb) IMATH_NOEXCEPT +{ + if (std::numeric_limits::is_integer) + { + Color4 v = Color4 ( + rgb.r / float (std::numeric_limits::max ()), + rgb.g / float (std::numeric_limits::max ()), + rgb.b / float (std::numeric_limits::max ()), + rgb.a / float (std::numeric_limits::max ())); + Color4 c = rgb2hsv_d (v); + return Color4 ( + (T) (c.r * std::numeric_limits::max ()), + (T) (c.g * std::numeric_limits::max ()), + (T) (c.b * std::numeric_limits::max ()), + (T) (c.a * std::numeric_limits::max ())); + } + else + { + Color4 v = Color4 (rgb.r, rgb.g, rgb.b, rgb.a); + Color4 c = rgb2hsv_d (v); + return Color4 ((T) c.r, (T) c.g, (T) c.b, (T) c.a); + } +} + +/// +/// Convert 3-channel rgb to PackedColor +/// + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 PackedColor +rgb2packed (const Vec3& c) IMATH_NOEXCEPT +{ + if (std::numeric_limits::is_integer) + { + float x = c.x / float (std::numeric_limits::max ()); + float y = c.y / float (std::numeric_limits::max ()); + float z = c.z / float (std::numeric_limits::max ()); + return rgb2packed (V3f (x, y, z)); + } + else + { + // clang-format off + return ( (PackedColor) (c.x * 255) | + (((PackedColor) (c.y * 255)) << 8) | + (((PackedColor) (c.z * 255)) << 16) | 0xFF000000 ); + // clang-format on + } +} + +/// +/// Convert 4-channel rgb to PackedColor (with alpha) +/// + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 PackedColor +rgb2packed (const Color4& c) IMATH_NOEXCEPT +{ + if (std::numeric_limits::is_integer) + { + float r = c.r / float (std::numeric_limits::max ()); + float g = c.g / float (std::numeric_limits::max ()); + float b = c.b / float (std::numeric_limits::max ()); + float a = c.a / float (std::numeric_limits::max ()); + return rgb2packed (C4f (r, g, b, a)); + } + else + { + // clang-format off + return ( (PackedColor) (c.r * 255) | + (((PackedColor) (c.g * 255)) << 8) | + (((PackedColor) (c.b * 255)) << 16) | + (((PackedColor) (c.a * 255)) << 24)); + // clang-format on + } +} + +/// +/// Convert PackedColor to 3-channel rgb. Return the result in the +/// `out` parameter. +/// + +template +IMATH_HOSTDEVICE void +packed2rgb (PackedColor packed, Vec3& out) IMATH_NOEXCEPT +{ + if (std::numeric_limits::is_integer) + { + T f = std::numeric_limits::max () / ((PackedColor) 0xFF); + out.x = (packed & 0xFF) * f; + out.y = ((packed & 0xFF00) >> 8) * f; + out.z = ((packed & 0xFF0000) >> 16) * f; + } + else + { + T f = T (1) / T (255); + out.x = (packed & 0xFF) * f; + out.y = ((packed & 0xFF00) >> 8) * f; + out.z = ((packed & 0xFF0000) >> 16) * f; + } +} + +/// +/// Convert PackedColor to 4-channel rgb (with alpha). Return the +/// result in the `out` parameter. +/// + +template +IMATH_HOSTDEVICE void +packed2rgb (PackedColor packed, Color4& out) IMATH_NOEXCEPT +{ + if (std::numeric_limits::is_integer) + { + T f = std::numeric_limits::max () / ((PackedColor) 0xFF); + out.r = (packed & 0xFF) * f; + out.g = ((packed & 0xFF00) >> 8) * f; + out.b = ((packed & 0xFF0000) >> 16) * f; + out.a = ((packed & 0xFF000000) >> 24) * f; + } + else + { + T f = T (1) / T (255); + out.r = (packed & 0xFF) * f; + out.g = ((packed & 0xFF00) >> 8) * f; + out.b = ((packed & 0xFF0000) >> 16) * f; + out.a = ((packed & 0xFF000000) >> 24) * f; + } +} + +IMATH_INTERNAL_NAMESPACE_HEADER_EXIT + +#endif // INCLUDED_IMATHCOLORALGO_H diff --git a/third_party/tlRender-install-Release/include/Imath/ImathConfig.h b/third_party/tlRender-install-Release/include/Imath/ImathConfig.h new file mode 100644 index 00000000..a22e5626 --- /dev/null +++ b/third_party/tlRender-install-Release/include/Imath/ImathConfig.h @@ -0,0 +1,178 @@ +// SPDX-License-Identifier: BSD-3-Clause +// Copyright Contributors to the OpenEXR Project. + +// This file is auto-generated by the cmake configure step + +#ifndef INCLUDED_IMATH_CONFIG_H +#define INCLUDED_IMATH_CONFIG_H 1 + +#pragma once + +// +// Options / configuration based on O.S. / compiler +// + +// automated formatting does not handle the cmake tags well +// clang-format off + +// +// Define whether the half-to-float conversion should use the lookup +// table method. Note that this is overriden by F16C compiler +// flags. It is also overrided by the IMATH_HALF_NO_LOOKUP_TABLE +// macro, if defined. +// +#define IMATH_HALF_USE_LOOKUP_TABLE + +// +// Define if the target system has support for large +// stack sizes. +// +/* #undef IMATH_HAVE_LARGE_STACK */ + +////////////////////// +// +// C++ namespace configuration / options + +// Current (internal) library namepace name and corresponding public +// client namespaces. +#define IMATH_INTERNAL_NAMESPACE_CUSTOM 0 +#define IMATH_INTERNAL_NAMESPACE Imath_3_2 + + +#define IMATH_NAMESPACE_CUSTOM 0 +#define IMATH_NAMESPACE Imath + + +// +// Version information +// +#define IMATH_VERSION_STRING "3.2.1" +#define IMATH_PACKAGE_STRING "Imath 3.2.1" + +#define IMATH_VERSION_MAJOR 3 +#define IMATH_VERSION_MINOR 2 +#define IMATH_VERSION_PATCH 1 +#define IMATH_VERSION_RELEASE_TYPE "" + +#define IMATH_VERSION_HEX \ + ((uint32_t (IMATH_VERSION_MAJOR) << 24) | \ + (uint32_t (IMATH_VERSION_MINOR) << 16) | \ + (uint32_t (IMATH_VERSION_PATCH) << 8)) + +// IMATH_LIB_VERSION is the library API version: SOCURRENT.SOAGE.SOREVISION +#define IMATH_LIB_VERSION_STRING "30.3.2.1" + +// clang-format on + +// +// Code that depends on the v2 ExcMath mechanism of signal handlers +// that throw exceptions is incompatible with noexcept, since +// floating-point overflow and underflow can occur in a wide variety +// of computations within Imath functions now marked with +// noexcept. Code that needs to accomodate the exception-handling +// behavior can build with the IMATH_USE_NOEXCEPT off. +// + +#define IMATH_USE_NOEXCEPT 1 +#if IMATH_USE_NOEXCEPT +# define IMATH_NOEXCEPT noexcept +#else +# define IMATH_NOEXCEPT +#endif + +// +// By default, opt into the interoparability constructors and assignments. +// If this causes problems, it can be disabled by defining this symbol to +// be 0 prior to including any Imath headers. +// +// If no such definition is found, we enable automatically unless we are +// using gcc 4.x, which appears to have bugs that prevent the interop +// templates from compiling correctly. +// +#ifndef IMATH_FOREIGN_VECTOR_INTEROP +# if defined(__GNUC__) && __GNUC__ == 4 && !defined(__clang__) +# define IMATH_FOREIGN_VECTOR_INTEROP 0 +# else +# define IMATH_FOREIGN_VECTOR_INTEROP 1 +# endif +#endif + +// +// Decorator that makes a function available for both CPU and GPU, +// when compiling for Cuda or HIP (AMD's Heterogeneous-computing +// Interface for Portability). +// +#if defined(__CUDACC__) || defined(__HIP__) +# define IMATH_HOSTDEVICE __host__ __device__ +#else +# define IMATH_HOSTDEVICE +#endif + +// +// Some compilers define a special intrinsic to use in conditionals that can +// speed up extremely performance-critical spots if the conditional is +// usually (or rarely) is true. You use it by replacing +// if (x) ... +// with +// if (IMATH_LIKELY(x)) ... // if you think x will usually be true +// or +// if (IMATH_UNLIKELY(x)) ... // if you think x will rarely be true +// +// Caveat: Programmers are notoriously bad at guessing this, so it should be +// used only with thorough benchmarking. +// +#if defined(__GNUC__) || defined(__clang__) || defined(__INTEL_COMPILER) +# ifdef __cplusplus +# define IMATH_LIKELY(x) (__builtin_expect (static_cast (x), true)) +# define IMATH_UNLIKELY(x) \ + (__builtin_expect (static_cast (x), false)) +# else +# define IMATH_LIKELY(x) (__builtin_expect ((x), 1)) +# define IMATH_UNLIKELY(x) (__builtin_expect ((x), 0)) +# endif +#else +# define IMATH_LIKELY(x) (x) +# define IMATH_UNLIKELY(x) (x) +#endif + +// On modern versions of gcc & clang, __has_attribute can test support for +// __attribute__((attr)). Make sure it's safe for other compilers. +#ifndef __has_attribute +# define __has_attribute(x) 0 +#endif + +// +// Simple way to mark things as deprecated. +// When we are sure that C++14 is our true minimum, then we can just +// directly use [[deprecated(msg)]]. +// +#if defined(_MSC_VER) +# define IMATH_DEPRECATED(msg) __declspec(deprecated (msg)) +#elif defined(__cplusplus) && __cplusplus >= 201402L +# define IMATH_DEPRECATED(msg) [[deprecated (msg)]] +#elif defined(__GNUC__) || defined(__clang__) +# define IMATH_DEPRECATED(msg) __attribute__ ((deprecated (msg))) +#else +# define IMATH_DEPRECATED(msg) /* unsupported on this platform */ +#endif + +// Whether the user configured the library to have symbol visibility +// tagged +#define IMATH_ENABLE_API_VISIBILITY + +// MSVC does not do the same visibility attributes, and when we are +// compiling a static library we won't be in DLL mode, but just don't +// define these and the export headers will work out +#if !defined(_MSC_VER) && defined(IMATH_ENABLE_API_VISIBILITY) +# define IMATH_PUBLIC_SYMBOL_ATTRIBUTE \ + __attribute__ ((__visibility__ ("default"))) +# define IMATH_PRIVATE_SYMBOL_ATTRIBUTE \ + __attribute__ ((__visibility__ ("hidden"))) +// clang differs from gcc and has type visibility which is needed for enums and templates +# if __has_attribute(__type_visibility__) +# define IMATH_PUBLIC_TYPE_VISIBILITY_ATTRIBUTE \ + __attribute__ ((__type_visibility__ ("default"))) +# endif +#endif + +#endif // INCLUDED_IMATH_CONFIG_H diff --git a/third_party/tlRender-install-Release/include/Imath/ImathEuler.h b/third_party/tlRender-install-Release/include/Imath/ImathEuler.h new file mode 100644 index 00000000..ba1ffbb0 --- /dev/null +++ b/third_party/tlRender-install-Release/include/Imath/ImathEuler.h @@ -0,0 +1,1093 @@ +// +// SPDX-License-Identifier: BSD-3-Clause +// Copyright Contributors to the OpenEXR Project. +// + +// +// Euler angle representation of rotation/orientation +// + +#ifndef INCLUDED_IMATHEULER_H +#define INCLUDED_IMATHEULER_H + +#include "ImathExport.h" +#include "ImathNamespace.h" + +#include "ImathMath.h" +#include "ImathMatrix.h" +#include "ImathQuat.h" +#include "ImathVec.h" + +#include + +IMATH_INTERNAL_NAMESPACE_HEADER_ENTER + +#if (defined _WIN32 || defined _WIN64) && defined _MSC_VER +// Disable MS VC++ warnings about conversion from double to float +# pragma warning(push) +# pragma warning(disable : 4244) +#endif + +/// +/// Template class `Euler` +/// +/// The Euler class represents euler angle orientations. The class +/// inherits from Vec3 to it can be freely cast. The additional +/// information is the euler priorities rep. This class is +/// essentially a rip off of Ken Shoemake's GemsIV code. It has +/// been modified minimally to make it more understandable, but +/// hardly enough to make it easy to grok completely. +/// +/// There are 24 possible combonations of Euler angle +/// representations of which 12 are common in CG and you will +/// probably only use 6 of these which in this scheme are the +/// non-relative-non-repeating types. +/// +/// The representations can be partitioned according to two +/// criteria: +/// +/// 1) Are the angles measured relative to a set of fixed axis +/// or relative to each other (the latter being what happens +/// when rotation matrices are multiplied together and is +/// almost ubiquitous in the cg community) +/// +/// 2) Is one of the rotations repeated (ala XYX rotation) +/// +/// When you construct a given representation from scratch you +/// must order the angles according to their priorities. So, the +/// easiest is a softimage or aerospace (yaw/pitch/roll) ordering +/// of ZYX. +/// +/// float x_rot = 1; +/// float y_rot = 2; +/// float z_rot = 3; +/// +/// Eulerf angles(z_rot, y_rot, x_rot, Eulerf::ZYX); +/// +/// or: +/// +/// Eulerf angles( V3f(z_rot,y_rot,z_rot), Eulerf::ZYX ); +/// +/// +/// If instead, the order was YXZ for instance you would have to +/// do this: +/// +/// float x_rot = 1; +/// float y_rot = 2; +/// float z_rot = 3; +/// +/// Eulerf angles(y_rot, x_rot, z_rot, Eulerf::YXZ); +/// +/// or: +/// +/// +/// Eulerf angles( V3f(y_rot,x_rot,z_rot), Eulerf::YXZ ); +/// +/// Notice how the order you put the angles into the three slots +/// should correspond to the enum (YXZ) ordering. The input angle +/// vector is called the "ijk" vector -- not an "xyz" vector. The +/// ijk vector order is the same as the enum. If you treat the +/// Euler as a Vec3 (which it inherts from) you will find the +/// angles are ordered in the same way, i.e.: +/// +/// V3f v = angles; +/// v.x == y_rot, v.y == x_rot, v.z == z_rot +/// +/// If you just want the x, y, and z angles stored in a vector in +/// that order, you can do this: +/// +/// V3f v = angles.toXYZVector() +/// v.x == x_rot, v.y == y_rot, v.z == z_rot +/// +/// If you want to set the Euler with an XYZVector use the +/// optional layout argument: +/// +/// Eulerf angles(x_rot, y_rot, z_rot, Eulerf::YXZ, Eulerf::XYZLayout); +/// +/// This is the same as: +/// +/// Eulerf angles(y_rot, x_rot, z_rot, Eulerf::YXZ); +/// +/// Note that this won't do anything intelligent if you have a +/// repeated axis in the euler angles (e.g. XYX) +/// +/// If you need to use the "relative" versions of these, you will +/// need to use the "r" enums. +/// +/// The units of the rotation angles are assumed to be radians. +/// + +template class IMATH_EXPORT_TEMPLATE_TYPE Euler : public Vec3 +{ +public: + using Vec3::x; + using Vec3::y; + using Vec3::z; + + /// + /// All 24 possible orderings + /// + enum IMATH_EXPORT_ENUM Order + { + XYZ = 0x0101, // "usual" orderings + XZY = 0x0001, + YZX = 0x1101, + YXZ = 0x1001, + ZXY = 0x2101, + ZYX = 0x2001, + + XZX = 0x0011, // first axis repeated + XYX = 0x0111, + YXY = 0x1011, + YZY = 0x1111, + ZYZ = 0x2011, + ZXZ = 0x2111, + + XYZr = 0x2000, // relative orderings -- not common + XZYr = 0x2100, + YZXr = 0x1000, + YXZr = 0x1100, + ZXYr = 0x0000, + ZYXr = 0x0100, + + XZXr = 0x2110, // relative first axis repeated + XYXr = 0x2010, + YXYr = 0x1110, + YZYr = 0x1010, + ZYZr = 0x0110, + ZXZr = 0x0010, + // |||| + // VVVV + // ABCD + // Legend: + // A -> Initial Axis (0==x, 1==y, 2==z) + // B -> Parity Even (1==true) + // C -> Initial Repeated (1==true) + // D -> Frame Static (1==true) + // + + Legal = XYZ | XZY | YZX | YXZ | ZXY | ZYX | XZX | XYX | YXY | YZY | + ZYZ | ZXZ | XYZr | XZYr | YZXr | YXZr | ZXYr | ZYXr | XZXr | + XYXr | YXYr | YZYr | ZYZr | ZXZr, + + Min = 0x0000, + Max = 0x2111, + Default = XYZ + }; + + /// + /// Axes + /// + enum IMATH_EXPORT_ENUM Axis + { + X = 0, + Y = 1, + Z = 2 + }; + + /// + /// Layout + /// + + enum IMATH_EXPORT_ENUM InputLayout + { + XYZLayout, + IJKLayout + }; + + /// @{ + /// @name Constructors + /// + /// All default to `ZYX` non-relative (ala Softimage 3D/Maya), + /// where there is no argument to specify it. + /// + /// The Euler-from-matrix constructors assume that the matrix does + /// not include shear or non-uniform scaling, but the constructors + /// do not examine the matrix to verify this assumption. If necessary, + /// you can adjust the matrix by calling the removeScalingAndShear() + /// function, defined in ImathMatrixAlgo.h. + + /// No initialization by default + IMATH_HOSTDEVICE constexpr Euler () IMATH_NOEXCEPT; + + /// Copy constructor + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 Euler (const Euler&) IMATH_NOEXCEPT; + + /// Construct from given Order + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 Euler (Order p) IMATH_NOEXCEPT; + + /// Construct from vector, order, layout + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 Euler ( + const Vec3& v, + Order o = Default, + InputLayout l = IJKLayout) IMATH_NOEXCEPT; + /// Construct from explicit axes, order, layout + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 + Euler (T i, T j, T k, Order o = Default, InputLayout l = IJKLayout) + IMATH_NOEXCEPT; + + /// Copy constructor with new Order + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 Euler (const Euler& euler, Order newp) + IMATH_NOEXCEPT; + + /// Construct from Matrix33 + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 + Euler (const Matrix33&, Order o = Default) IMATH_NOEXCEPT; + + /// Construct from Matrix44 + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 + Euler (const Matrix44&, Order o = Default) IMATH_NOEXCEPT; + + /// Destructor + ~Euler () = default; + + /// @} + + /// @{ + /// @name Query + + /// Return whether the given value is a legal Order + IMATH_HOSTDEVICE constexpr static bool legal (Order) IMATH_NOEXCEPT; + + /// Return the order + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 Order order () const IMATH_NOEXCEPT; + + /// Return frameStatic + IMATH_HOSTDEVICE constexpr bool frameStatic () const + { + return _frameStatic; + } + + /// Return intialRepeated + IMATH_HOSTDEVICE constexpr bool initialRepeated () const + { + return _initialRepeated; + } + + /// Return partityEven + IMATH_HOSTDEVICE constexpr bool parityEven () const { return _parityEven; } + + /// Return initialAxis + IMATH_HOSTDEVICE constexpr Axis initialAxis () const + { + return _initialAxis; + } + + /// Unpack angles from ijk form + IMATH_HOSTDEVICE void + angleOrder (int& i, int& j, int& k) const IMATH_NOEXCEPT; + + /// Determine mapping from xyz to ijk (reshuffle the xyz to match the order) + IMATH_HOSTDEVICE void + angleMapping (int& i, int& j, int& k) const IMATH_NOEXCEPT; + + /// @} + + /// @{ + /// @name Set Value + + /// Set the order. This does NOT convert the angles, but it + /// does reorder the input vector. + IMATH_HOSTDEVICE void setOrder (Order) IMATH_NOEXCEPT; + + /// Set the euler value: set the first angle to `v[0]`, the second to + /// `v[1]`, the third to `v[2]`. + IMATH_HOSTDEVICE void setXYZVector (const Vec3&) IMATH_NOEXCEPT; + + /// Set the value. + IMATH_HOSTDEVICE void + set (Axis initial, bool relative, bool parityEven, bool firstRepeats) + IMATH_NOEXCEPT; + + /// @} + + /// @{ + /// @name Assignments and Conversions + /// + + /// Assignment + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 const Euler& + operator= (const Euler&) IMATH_NOEXCEPT; + + /// Assignment + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 const Euler& + operator= (const Vec3&) IMATH_NOEXCEPT; + + /// Assign from Matrix33, assumed to be affine + IMATH_HOSTDEVICE void extract (const Matrix33&) IMATH_NOEXCEPT; + + /// Assign from Matrix44, assumed to be affine + IMATH_HOSTDEVICE void extract (const Matrix44&) IMATH_NOEXCEPT; + + /// Assign from Quaternion + IMATH_HOSTDEVICE void extract (const Quat&) IMATH_NOEXCEPT; + + /// Convert to Matrix33 + IMATH_HOSTDEVICE Matrix33 toMatrix33 () const IMATH_NOEXCEPT; + + /// Convert to Matrix44 + IMATH_HOSTDEVICE Matrix44 toMatrix44 () const IMATH_NOEXCEPT; + + /// Convert to Quat + IMATH_HOSTDEVICE Quat toQuat () const IMATH_NOEXCEPT; + + /// Reorder the angles so that the X rotation comes first, + /// followed by the Y and Z in cases like XYX ordering, the + /// repeated angle will be in the "z" component + IMATH_HOSTDEVICE Vec3 toXYZVector () const IMATH_NOEXCEPT; + + /// @} + + /// @{ + /// @name Comparison + + /// Equality + template + IMATH_HOSTDEVICE constexpr bool + operator== (const Euler& other) const IMATH_NOEXCEPT; + + /// Inequality + template + IMATH_HOSTDEVICE constexpr bool + operator!= (const Euler& other) const IMATH_NOEXCEPT; + + /// @} + + /// @{ + /// @name Utility Methods + /// + /// Utility methods for getting continuous rotations. None of these + /// methods change the orientation given by its inputs (or at least + /// that is the intent). + + /// Convert an angle to its equivalent in [-PI, PI] + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 static float + angleMod (T angle) IMATH_NOEXCEPT; + + /// Adjust xyzRot so that its components differ from targetXyzRot by no more than +/-PI + IMATH_HOSTDEVICE static void simpleXYZRotation ( + Vec3& xyzRot, const Vec3& targetXyzRot) IMATH_NOEXCEPT; + + /// Adjust xyzRot so that its components differ from targetXyzRot by as little as possible. + /// Note that xyz here really means ijk, because the order must be provided. + IMATH_HOSTDEVICE static void nearestRotation ( + Vec3& xyzRot, + const Vec3& targetXyzRot, + Order order = XYZ) IMATH_NOEXCEPT; + + /// Adjusts "this" Euler so that its components differ from target + /// by as little as possible. This method might not make sense for + /// Eulers with different order and it probably doesn't work for + /// repeated axis and relative orderings (TODO). + IMATH_HOSTDEVICE void makeNear (const Euler& target) IMATH_NOEXCEPT; + + /// @} + +protected: + /// relative or static rotations + bool _frameStatic : 1; + + /// init axis repeated as last + bool _initialRepeated : 1; + + /// "parity of axis permutation" + bool _parityEven : 1; + +#if defined _WIN32 || defined _WIN64 + /// First axis of rotation + Axis _initialAxis; +#else + /// First axis of rotation + Axis _initialAxis : 2; +#endif +}; + +// +// Convenient typedefs +// + +/// Euler of type float +typedef Euler Eulerf; +/// Euler of type double +typedef Euler Eulerd; + +// +// Implementation +// + +/// @cond Doxygen_Suppress + +template +IMATH_HOSTDEVICE inline void +Euler::angleOrder (int& i, int& j, int& k) const IMATH_NOEXCEPT +{ + i = _initialAxis; + j = _parityEven ? (i + 1) % 3 : (i > 0 ? i - 1 : 2); + k = _parityEven ? (i > 0 ? i - 1 : 2) : (i + 1) % 3; +} + +template +IMATH_HOSTDEVICE inline void +Euler::angleMapping (int& i, int& j, int& k) const IMATH_NOEXCEPT +{ + int m[3]; + + m[_initialAxis] = 0; + m[(_initialAxis + 1) % 3] = _parityEven ? 1 : 2; + m[(_initialAxis + 2) % 3] = _parityEven ? 2 : 1; + i = m[0]; + j = m[1]; + k = m[2]; +} + +template +IMATH_HOSTDEVICE inline void +Euler::setXYZVector (const Vec3& v) IMATH_NOEXCEPT +{ + int i, j, k; + angleMapping (i, j, k); + (*this)[i] = v.x; + (*this)[j] = v.y; + (*this)[k] = v.z; +} + +template +IMATH_HOSTDEVICE inline Vec3 +Euler::toXYZVector () const IMATH_NOEXCEPT +{ + int i, j, k; + angleMapping (i, j, k); + return Vec3 ((*this)[i], (*this)[j], (*this)[k]); +} + +template +IMATH_HOSTDEVICE constexpr inline Euler::Euler () IMATH_NOEXCEPT + : Vec3 (0, 0, 0), + _frameStatic (true), + _initialRepeated (false), + _parityEven (true), + _initialAxis (X) +{} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline Euler::Euler ( + typename Euler::Order p) IMATH_NOEXCEPT : Vec3 (0, 0, 0), + _frameStatic (true), + _initialRepeated (false), + _parityEven (true), + _initialAxis (X) +{ + setOrder (p); +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline Euler::Euler ( + const Vec3& v, + typename Euler::Order p, + typename Euler::InputLayout l) IMATH_NOEXCEPT +{ + setOrder (p); + if (l == XYZLayout) + setXYZVector (v); + else + { + x = v.x; + y = v.y; + z = v.z; + } +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline Euler::Euler ( + const Euler& euler) IMATH_NOEXCEPT +{ + operator= (euler); +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline Euler::Euler ( + const Euler& euler, Order p) IMATH_NOEXCEPT +{ + setOrder (p); + Matrix33 M = euler.toMatrix33 (); + extract (M); +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline Euler::Euler ( + T xi, + T yi, + T zi, + typename Euler::Order p, + typename Euler::InputLayout l) IMATH_NOEXCEPT +{ + setOrder (p); + if (l == XYZLayout) + setXYZVector (Vec3 (xi, yi, zi)); + else + { + x = xi; + y = yi; + z = zi; + } +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline Euler::Euler ( + const Matrix33& M, typename Euler::Order p) IMATH_NOEXCEPT +{ + setOrder (p); + extract (M); +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline Euler::Euler ( + const Matrix44& M, typename Euler::Order p) IMATH_NOEXCEPT +{ + setOrder (p); + extract (M); +} + +template +IMATH_HOSTDEVICE inline void +Euler::extract (const Quat& q) IMATH_NOEXCEPT +{ + extract (q.toMatrix33 ()); +} + +template +IMATH_HOSTDEVICE void +Euler::extract (const Matrix33& M) IMATH_NOEXCEPT +{ + int i, j, k; + angleOrder (i, j, k); + + if (_initialRepeated) + { + // + // Extract the first angle, x. + // + + x = std::atan2 (M[j][i], M[k][i]); + + // + // Remove the x rotation from M, so that the remaining + // rotation, N, is only around two axes, and gimbal lock + // cannot occur. + // + + Vec3 r (0, 0, 0); + r[i] = (_parityEven ? -x : x); + + Matrix44 N; + N.rotate (r); + + N = N * Matrix44 ( + M[0][0], + M[0][1], + M[0][2], + 0, + M[1][0], + M[1][1], + M[1][2], + 0, + M[2][0], + M[2][1], + M[2][2], + 0, + 0, + 0, + 0, + 1); + // + // Extract the other two angles, y and z, from N. + // + + T sy = std::sqrt (N[j][i] * N[j][i] + N[k][i] * N[k][i]); + y = std::atan2 (sy, N[i][i]); + z = std::atan2 (N[j][k], N[j][j]); + } + else + { + // + // Extract the first angle, x. + // + + x = std::atan2 (M[j][k], M[k][k]); + + // + // Remove the x rotation from M, so that the remaining + // rotation, N, is only around two axes, and gimbal lock + // cannot occur. + // + + Vec3 r (0, 0, 0); + r[i] = (_parityEven ? -x : x); + + Matrix44 N; + N.rotate (r); + + N = N * Matrix44 ( + M[0][0], + M[0][1], + M[0][2], + 0, + M[1][0], + M[1][1], + M[1][2], + 0, + M[2][0], + M[2][1], + M[2][2], + 0, + 0, + 0, + 0, + 1); + // + // Extract the other two angles, y and z, from N. + // + + T cy = std::sqrt (N[i][i] * N[i][i] + N[i][j] * N[i][j]); + y = std::atan2 (-N[i][k], cy); + z = std::atan2 (-N[j][i], N[j][j]); + } + + if (!_parityEven) *this *= -1; + + if (!_frameStatic) + { + T t = x; + x = z; + z = t; + } +} + +template +IMATH_HOSTDEVICE void +Euler::extract (const Matrix44& M) IMATH_NOEXCEPT +{ + int i, j, k; + angleOrder (i, j, k); + + if (_initialRepeated) + { + // + // Extract the first angle, x. + // + + x = std::atan2 (M[j][i], M[k][i]); + + // + // Remove the x rotation from M, so that the remaining + // rotation, N, is only around two axes, and gimbal lock + // cannot occur. + // + + Vec3 r (0, 0, 0); + r[i] = (_parityEven ? -x : x); + + Matrix44 N; + N.rotate (r); + N = N * M; + + // + // Extract the other two angles, y and z, from N. + // + + T sy = std::sqrt (N[j][i] * N[j][i] + N[k][i] * N[k][i]); + y = std::atan2 (sy, N[i][i]); + z = std::atan2 (N[j][k], N[j][j]); + } + else + { + // + // Extract the first angle, x. + // + + x = std::atan2 (M[j][k], M[k][k]); + + // + // Remove the x rotation from M, so that the remaining + // rotation, N, is only around two axes, and gimbal lock + // cannot occur. + // + + Vec3 r (0, 0, 0); + r[i] = (_parityEven ? -x : x); + + Matrix44 N; + N.rotate (r); + N = N * M; + + // + // Extract the other two angles, y and z, from N. + // + + T cy = std::sqrt (N[i][i] * N[i][i] + N[i][j] * N[i][j]); + y = std::atan2 (-N[i][k], cy); + z = std::atan2 (-N[j][i], N[j][j]); + } + + if (!_parityEven) *this *= -1; + + if (!_frameStatic) + { + T t = x; + x = z; + z = t; + } +} + +template +IMATH_HOSTDEVICE Matrix33 + Euler::toMatrix33 () const IMATH_NOEXCEPT +{ + int i, j, k; + angleOrder (i, j, k); + + Vec3 angles; + + if (_frameStatic) + angles = (*this); + else + angles = Vec3 (z, y, x); + + if (!_parityEven) angles *= -1.0; + + T ci = std::cos (angles.x); + T cj = std::cos (angles.y); + T ch = std::cos (angles.z); + T si = std::sin (angles.x); + T sj = std::sin (angles.y); + T sh = std::sin (angles.z); + + T cc = ci * ch; + T cs = ci * sh; + T sc = si * ch; + T ss = si * sh; + + Matrix33 M; + + if (_initialRepeated) + { + M[i][i] = cj; + M[j][i] = sj * si; + M[k][i] = sj * ci; + M[i][j] = sj * sh; + M[j][j] = -cj * ss + cc; + M[k][j] = -cj * cs - sc; + M[i][k] = -sj * ch; + M[j][k] = cj * sc + cs; + M[k][k] = cj * cc - ss; + } + else + { + M[i][i] = cj * ch; + M[j][i] = sj * sc - cs; + M[k][i] = sj * cc + ss; + M[i][j] = cj * sh; + M[j][j] = sj * ss + cc; + M[k][j] = sj * cs - sc; + M[i][k] = -sj; + M[j][k] = cj * si; + M[k][k] = cj * ci; + } + + return M; +} + +template +IMATH_HOSTDEVICE Matrix44 + Euler::toMatrix44 () const IMATH_NOEXCEPT +{ + int i, j, k; + angleOrder (i, j, k); + + Vec3 angles; + + if (_frameStatic) + angles = (*this); + else + angles = Vec3 (z, y, x); + + if (!_parityEven) angles *= -1.0; + + T ci = std::cos (angles.x); + T cj = std::cos (angles.y); + T ch = std::cos (angles.z); + T si = std::sin (angles.x); + T sj = std::sin (angles.y); + T sh = std::sin (angles.z); + + T cc = ci * ch; + T cs = ci * sh; + T sc = si * ch; + T ss = si * sh; + + Matrix44 M; + + if (_initialRepeated) + { + M[i][i] = cj; + M[j][i] = sj * si; + M[k][i] = sj * ci; + M[i][j] = sj * sh; + M[j][j] = -cj * ss + cc; + M[k][j] = -cj * cs - sc; + M[i][k] = -sj * ch; + M[j][k] = cj * sc + cs; + M[k][k] = cj * cc - ss; + } + else + { + M[i][i] = cj * ch; + M[j][i] = sj * sc - cs; + M[k][i] = sj * cc + ss; + M[i][j] = cj * sh; + M[j][j] = sj * ss + cc; + M[k][j] = sj * cs - sc; + M[i][k] = -sj; + M[j][k] = cj * si; + M[k][k] = cj * ci; + } + + return M; +} + +template +IMATH_HOSTDEVICE Quat + Euler::toQuat () const IMATH_NOEXCEPT +{ + Vec3 angles; + int i, j, k; + angleOrder (i, j, k); + + if (_frameStatic) + angles = (*this); + else + angles = Vec3 (z, y, x); + + if (!_parityEven) angles.y = -angles.y; + + T ti = angles.x * 0.5; + T tj = angles.y * 0.5; + T th = angles.z * 0.5; + T ci = std::cos (ti); + T cj = std::cos (tj); + T ch = std::cos (th); + T si = std::sin (ti); + T sj = std::sin (tj); + T sh = std::sin (th); + T cc = ci * ch; + T cs = ci * sh; + T sc = si * ch; + T ss = si * sh; + + T parity = _parityEven ? 1.0 : -1.0; + + Quat q; + Vec3 a; + + if (_initialRepeated) + { + a[i] = cj * (cs + sc); + a[j] = sj * (cc + ss) * parity; + a[k] = sj * (cs - sc); + q.r = cj * (cc - ss); + } + else + { + a[i] = cj * sc - sj * cs; + a[j] = (cj * ss + sj * cc) * parity; + a[k] = cj * cs - sj * sc; + q.r = cj * cc + sj * ss; + } + + q.v = a; + + return q; +} + +template +IMATH_HOSTDEVICE constexpr inline bool +Euler::legal (typename Euler::Order order) IMATH_NOEXCEPT +{ + return (order & ~Legal) ? false : true; +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 typename Euler::Order + Euler::order () const IMATH_NOEXCEPT +{ + int foo = (_initialAxis == Z ? 0x2000 : (_initialAxis == Y ? 0x1000 : 0)); + + if (_parityEven) foo |= 0x0100; + if (_initialRepeated) foo |= 0x0010; + if (_frameStatic) foo++; + + return (Order) foo; +} + +template +IMATH_HOSTDEVICE inline void +Euler::setOrder (typename Euler::Order p) IMATH_NOEXCEPT +{ + set ( + p & 0x2000 ? Z : (p & 0x1000 ? Y : X), // initial axis + !(p & 0x1), // static? + !!(p & 0x100), // permutation even? + !!(p & 0x10)); // initial repeats? +} + +template +IMATH_HOSTDEVICE inline void +Euler::set ( + typename Euler::Axis axis, + bool relative, + bool parityEven, + bool firstRepeats) IMATH_NOEXCEPT +{ + _initialAxis = axis; + _frameStatic = !relative; + _parityEven = parityEven; + _initialRepeated = firstRepeats; +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline const Euler& +Euler::operator= (const Euler& euler) IMATH_NOEXCEPT +{ + x = euler.x; + y = euler.y; + z = euler.z; + _initialAxis = euler._initialAxis; + _frameStatic = euler._frameStatic; + _parityEven = euler._parityEven; + _initialRepeated = euler._initialRepeated; + return *this; +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline const Euler& +Euler::operator= (const Vec3& v) IMATH_NOEXCEPT +{ + x = v.x; + y = v.y; + z = v.z; + return *this; +} + +template +template +IMATH_HOSTDEVICE constexpr inline bool +Euler::operator== (const Euler& other) const IMATH_NOEXCEPT +{ + return Vec3::operator==(other) && order() == other.order(); +} + +template +template +IMATH_HOSTDEVICE constexpr inline bool +Euler::operator!= (const Euler& other) const IMATH_NOEXCEPT +{ + return Vec3::operator!=(other) || order() != other.order(); +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline float +Euler::angleMod (T angle) IMATH_NOEXCEPT +{ + const T pi = static_cast (M_PI); + angle = fmod (T (angle), T (2 * pi)); + + if (angle < -pi) angle += 2 * pi; + if (angle > +pi) angle -= 2 * pi; + + return angle; +} + +template +IMATH_HOSTDEVICE inline void +Euler::simpleXYZRotation (Vec3& xyzRot, const Vec3& targetXyzRot) + IMATH_NOEXCEPT +{ + Vec3 d = xyzRot - targetXyzRot; + xyzRot.x = targetXyzRot.x + angleMod (d.x); + xyzRot.y = targetXyzRot.y + angleMod (d.y); + xyzRot.z = targetXyzRot.z + angleMod (d.z); +} + +template +IMATH_HOSTDEVICE void +Euler::nearestRotation ( + Vec3& xyzRot, const Vec3& targetXyzRot, Order order) IMATH_NOEXCEPT +{ + int i, j, k; + Euler e (0, 0, 0, order); + e.angleOrder (i, j, k); + + simpleXYZRotation (xyzRot, targetXyzRot); + + Vec3 otherXyzRot; + otherXyzRot[i] = M_PI + xyzRot[i]; + otherXyzRot[j] = M_PI - xyzRot[j]; + otherXyzRot[k] = M_PI + xyzRot[k]; + + simpleXYZRotation (otherXyzRot, targetXyzRot); + + Vec3 d = xyzRot - targetXyzRot; + Vec3 od = otherXyzRot - targetXyzRot; + T dMag = d.dot (d); + T odMag = od.dot (od); + + if (odMag < dMag) { xyzRot = otherXyzRot; } +} + +template +IMATH_HOSTDEVICE void +Euler::makeNear (const Euler& target) IMATH_NOEXCEPT +{ + Vec3 xyzRot = toXYZVector (); + Vec3 targetXyz; + if (order () != target.order ()) + { + Euler targetSameOrder = Euler (target, order ()); + targetXyz = targetSameOrder.toXYZVector (); + } + else + { + targetXyz = target.toXYZVector (); + } + + nearestRotation (xyzRot, targetXyz, order ()); + + setXYZVector (xyzRot); +} + +/// @endcond + +/// Stream ouput, as "(x y z i j k)" +template +std::ostream& +operator<< (std::ostream& o, const Euler& euler) +{ + char a[3] = {'X', 'Y', 'Z'}; + + const char* r = euler.frameStatic () ? "" : "r"; + int i, j, k; + euler.angleOrder (i, j, k); + + if (euler.initialRepeated ()) k = i; + + return o << "(" << euler.x << " " << euler.y << " " << euler.z << " " + << a[i] << a[j] << a[k] << r << ")"; +} + +#if (defined _WIN32 || defined _WIN64) && defined _MSC_VER +# pragma warning(pop) +#endif + +IMATH_INTERNAL_NAMESPACE_HEADER_EXIT + +#endif // INCLUDED_IMATHEULER_H diff --git a/third_party/tlRender-install-Release/include/Imath/ImathExport.h b/third_party/tlRender-install-Release/include/Imath/ImathExport.h new file mode 100644 index 00000000..846eb65c --- /dev/null +++ b/third_party/tlRender-install-Release/include/Imath/ImathExport.h @@ -0,0 +1,69 @@ +// +// SPDX-License-Identifier: BSD-3-Clause +// Copyright Contributors to the OpenEXR Project. +// + +#ifndef INCLUDED_IMATHEXPORT_H +#define INCLUDED_IMATHEXPORT_H + +#include "ImathConfig.h" + +/// \defgroup ExportMacros Macros to manage symbol visibility +/// +/// There is more information about the motivation for these macros +/// documented in the OpenEXR source tree +/// (https://github.com/AcademySoftwareFoundation/openexr) under +/// docs/SymbolVisibility.md +/// +/// Imath only needs a couple of the possible macros outlined in the +/// above document, and due to it largely being inline only, does not +/// have much to do. +/// +/// @{ +#if defined(IMATH_DLL) + +// when building Imath as a DLL for Windows, we have to control the +// typical DLL export / import things. Luckily, the typeinfo is all +// automatic there, so only have to deal with symbols, except Windows +// has some weirdness with DLLs and extern const, so we have to +// provide a macro to handle that. + +# if defined(IMATH_EXPORTS) +# define IMATH_EXPORT __declspec(dllexport) +# define IMATH_EXPORT_CONST extern __declspec(dllexport) +# else +# define IMATH_EXPORT __declspec(dllimport) +# define IMATH_EXPORT_CONST extern __declspec(dllimport) +# endif + +// DLLs don't support these types of visibility controls, just leave them as empty +# define IMATH_EXPORT_TYPE +# define IMATH_EXPORT_ENUM +# define IMATH_EXPORT_TEMPLATE_TYPE + +#else + +# ifdef IMATH_PUBLIC_SYMBOL_ATTRIBUTE +# define IMATH_EXPORT IMATH_PUBLIC_SYMBOL_ATTRIBUTE +# define IMATH_EXPORT_CONST extern const IMATH_PUBLIC_SYMBOL_ATTRIBUTE +# else +# define IMATH_EXPORT +# define IMATH_EXPORT_CONST extern const +# endif + +# ifdef IMATH_PUBLIC_TYPE_VISIBILITY_ATTRIBUTE +# define IMATH_EXPORT_ENUM IMATH_PUBLIC_TYPE_VISIBILITY_ATTRIBUTE +# define IMATH_EXPORT_TEMPLATE_TYPE \ + IMATH_PUBLIC_TYPE_VISIBILITY_ATTRIBUTE +# define IMATH_EXPORT_TYPE IMATH_PUBLIC_TYPE_VISIBILITY_ATTRIBUTE +# else +# define IMATH_EXPORT_ENUM +# define IMATH_EXPORT_TEMPLATE_TYPE IMATH_EXPORT +# define IMATH_EXPORT_TYPE IMATH_EXPORT +# endif + +#endif // IMATH_DLL + +/// @} + +#endif // INCLUDED_IMATHEXPORT_H diff --git a/third_party/tlRender-install-Release/include/Imath/ImathForward.h b/third_party/tlRender-install-Release/include/Imath/ImathForward.h new file mode 100644 index 00000000..2ba9e7fc --- /dev/null +++ b/third_party/tlRender-install-Release/include/Imath/ImathForward.h @@ -0,0 +1,80 @@ +// +// SPDX-License-Identifier: BSD-3-Clause +// Copyright Contributors to the OpenEXR Project. +// + +#ifndef INCLUDED_IMATHFORWARD_H +#define INCLUDED_IMATHFORWARD_H + +#include "ImathExport.h" +#include "ImathNamespace.h" + +IMATH_INTERNAL_NAMESPACE_HEADER_ENTER + +/// @cond Doxygen_Suppress + +// +// Basic template type declarations. +// + +// +// Note: declarations with attributes generate warnings with +// -Wattributes or -Wall if the type is already defined, i.e. the +// header is already included. To avoid the warning, only make the +// forward declaration if the header has not yet been included. +// + +#ifndef INCLUDED_IMATHBOX_H +template class IMATH_EXPORT_TEMPLATE_TYPE Box; +#endif +#ifndef INCLUDED_IMATHCOLOR_H +template class IMATH_EXPORT_TEMPLATE_TYPE Color3; +template class IMATH_EXPORT_TEMPLATE_TYPE Color4; +#endif +#ifndef INCLUDED_IMATHEULER_H +template class IMATH_EXPORT_TEMPLATE_TYPE Euler; +#endif +#ifndef INCLUDED_IMATHFRUSTUM_H +template class IMATH_EXPORT_TEMPLATE_TYPE Frustum; +#endif +#ifndef INCLUDED_IMATHFRUSTUMTEST_H +template class IMATH_EXPORT_TEMPLATE_TYPE FrustumTest; +#endif +#ifndef INCLUDED_IMATHINTERVAL_H +template class IMATH_EXPORT_TEMPLATE_TYPE Interval; +#endif +#ifndef INCLUDED_IMATHLINE_H +template class IMATH_EXPORT_TEMPLATE_TYPE Line3; +#endif +#ifndef INCLUDED_IMATHMATRIX_H +template class IMATH_EXPORT_TEMPLATE_TYPE Matrix33; +template class IMATH_EXPORT_TEMPLATE_TYPE Matrix44; +#endif +#ifndef INCLUDED_IMATHPLANE_H +template class IMATH_EXPORT_TEMPLATE_TYPE Plane3; +#endif +#ifndef INCLUDED_IMATHQUAT_H +template class IMATH_EXPORT_TEMPLATE_TYPE Quat; +#endif +#ifndef INCLUDED_IMATHSHEAR_H +template class IMATH_EXPORT_TEMPLATE_TYPE Shear6; +#endif +#ifndef INCLUDED_IMATHSPHERE_H +template class IMATH_EXPORT_TEMPLATE_TYPE Sphere3; +#endif +#ifndef INCLUDED_IMATHVEC_H +template class IMATH_EXPORT_TEMPLATE_TYPE Vec2; +template class IMATH_EXPORT_TEMPLATE_TYPE Vec3; +template class IMATH_EXPORT_TEMPLATE_TYPE Vec4; +#endif + +#ifndef INCLUDED_IMATHRANDOM_H +class IMATH_EXPORT_TYPE Rand32; +class IMATH_EXPORT_TYPE Rand48; +#endif + +/// @endcond + +IMATH_INTERNAL_NAMESPACE_HEADER_EXIT + +#endif // INCLUDED_IMATHFORWARD_H diff --git a/third_party/tlRender-install-Release/include/Imath/ImathFrame.h b/third_party/tlRender-install-Release/include/Imath/ImathFrame.h new file mode 100644 index 00000000..2ea7b0f3 --- /dev/null +++ b/third_party/tlRender-install-Release/include/Imath/ImathFrame.h @@ -0,0 +1,224 @@ +// +// SPDX-License-Identifier: BSD-3-Clause +// Copyright Contributors to the OpenEXR Project. +// + +// +// Functions for computing reference frames. +// + +#ifndef INCLUDED_IMATHFRAME_H +#define INCLUDED_IMATHFRAME_H + +#include "ImathNamespace.h" + +IMATH_INTERNAL_NAMESPACE_HEADER_ENTER + +/// @cond Doxygen_Suppress +template class Vec3; +template class Matrix44; +/// @endcond + +/// +/// @{ +/// @name Functions for computing reference frames +/// +/// These methods compute a set of reference frames, defined by their +/// transformation matrix, along a curve. It is designed so that the +/// array of points and the array of matrices used to fetch these +/// routines don't need to be ordered as the curve. +/// +/// A typical usage would be : +/// +/// m[0] = IMATH_INTERNAL_NAMESPACE::firstFrame( p[0], p[1], p[2] ); +/// for( int i = 1; i < n - 1; i++ ) +/// { +/// m[i] = IMATH_INTERNAL_NAMESPACE::nextFrame( m[i-1], p[i-1], p[i], t[i-1], t[i] ); +/// } +/// m[n-1] = IMATH_INTERNAL_NAMESPACE::lastFrame( m[n-2], p[n-2], p[n-1] ); +/// +/// See Graphics Gems I for the underlying algorithm. + +template +Matrix44 constexpr firstFrame ( + const Vec3&, // First point + const Vec3&, // Second point + const Vec3&) IMATH_NOEXCEPT; // Third point + +template +Matrix44 constexpr nextFrame ( + const Matrix44&, // Previous matrix + const Vec3&, // Previous point + const Vec3&, // Current point + Vec3&, // Previous tangent + Vec3&) IMATH_NOEXCEPT; // Current tangent + +template +Matrix44 constexpr lastFrame ( + const Matrix44&, // Previous matrix + const Vec3&, // Previous point + const Vec3&) IMATH_NOEXCEPT; // Last point + +/// +/// Compute the first reference frame along a curve. +/// +/// This function returns the transformation matrix to the reference +/// frame defined by the three points `pi`, `pj` and `pk`. Note that +/// if the two vectors <`pi`,`pj`> and <`pi`,`pk`> are colinears, an +/// arbitrary twist value will be choosen. +/// +/// Throw `std::domain_error` if `pi` and `pj` are equal. +/// +/// @param pi +/// First point +/// @param pj +/// Second point +/// @param pk +/// Third point +/// +template +Matrix44 constexpr firstFrame ( + const Vec3& pi, // first point + const Vec3& pj, // secont point + const Vec3& pk) IMATH_NOEXCEPT // third point +{ + Vec3 t = pj - pi; + t.normalizeExc (); + + Vec3 n = t.cross (pk - pi); + n.normalize (); + if (n.length () == 0.0f) + { + Vec3 v (0.0, 0.0, 0.0); + + int i = fabs (t.x) < fabs (t.y) ? 0 : 1; + if (fabs (t.z) < fabs (t[i])) i = 2; + + v[i] = 1.0; + n = t.cross (v); + n.normalize (); + } + + Vec3 b = t.cross (n); + + Matrix44 M; + + M[0][0] = t.x; + M[0][1] = t.y; + M[0][2] = t.z; + M[0][3] = 0.0; + M[1][0] = n.x; + M[1][1] = n.y; + M[1][2] = n.z; + M[1][3] = 0.0; + M[2][0] = b.x; + M[2][1] = b.y; + M[2][2] = b.z; + M[2][3] = 0.0; + M[3][0] = pi.x; + M[3][1] = pi.y; + M[3][2] = pi.z; + M[3][3] = 1.0; + + return M; +} + +/// +/// Compute the next reference frame along a curve. +/// +/// This function returns the transformation matrix to the next reference +/// frame defined by the previously computed transformation matrix and the +/// new point and tangent vector along the curve. +/// +/// @param Mi +/// The previous matrix +/// @param pi +/// The previous point +/// @param pj +/// The current point +/// @param ti +/// The previous tangent vector +/// @param tj +/// The current tangent vector + +template +Matrix44 constexpr nextFrame ( + const Matrix44& Mi, // Previous matrix + const Vec3& pi, // Previous point + const Vec3& pj, // Current point + Vec3& ti, // Previous tangent vector + Vec3& tj) IMATH_NOEXCEPT // Current tangent vector +{ + Vec3 a (0.0, 0.0, 0.0); /// Rotation axis. + T r = 0.0; // Rotation angle. + + if (ti.length () != 0.0 && tj.length () != 0.0) + { + ti.normalize (); + tj.normalize (); + T dot = ti.dot (tj); + + // + // This is *really* necessary : + // + + if (dot > 1.0) + dot = 1.0; + else if (dot < -1.0) + dot = -1.0; + + r = acosf (dot); + a = ti.cross (tj); + } + + if (a.length () != 0.0 && r != 0.0) + { + Matrix44 R; + R.setAxisAngle (a, r); + Matrix44 Tj; + Tj.translate (pj); + Matrix44 Ti; + Ti.translate (-pi); + + return Mi * Ti * R * Tj; + } + else + { + Matrix44 Tr; + Tr.translate (pj - pi); + + return Mi * Tr; + } +} + +/// +/// Compute the last reference frame along a curve. +/// +/// This function returns the transformation matrix to the last reference +/// frame defined by the previously computed transformation matrix and the +/// last point along the curve. +/// +/// @param Mi +/// The previous matrix +/// @param pi +/// The previous point +/// @param pj +/// The last point + +template +Matrix44 constexpr lastFrame ( + const Matrix44& Mi, // Previous matrix + const Vec3& pi, // Previous point + const Vec3& pj) IMATH_NOEXCEPT // Last point +{ + Matrix44 Tr; + Tr.translate (pj - pi); + + return Mi * Tr; +} + +/// @} + +IMATH_INTERNAL_NAMESPACE_HEADER_EXIT + +#endif // INCLUDED_IMATHFRAME_H diff --git a/third_party/tlRender-install-Release/include/Imath/ImathFrustum.h b/third_party/tlRender-install-Release/include/Imath/ImathFrustum.h new file mode 100644 index 00000000..5667768a --- /dev/null +++ b/third_party/tlRender-install-Release/include/Imath/ImathFrustum.h @@ -0,0 +1,1061 @@ +// +// SPDX-License-Identifier: BSD-3-Clause +// Copyright Contributors to the OpenEXR Project. +// + +// +// A viewing frustum class +// + +#ifndef INCLUDED_IMATHFRUSTUM_H +#define INCLUDED_IMATHFRUSTUM_H + +#include "ImathExport.h" +#include "ImathNamespace.h" + +#include "ImathFun.h" +#include "ImathLine.h" +#include "ImathMatrix.h" +#include "ImathPlane.h" +#include "ImathVec.h" + +IMATH_INTERNAL_NAMESPACE_HEADER_ENTER + +/// +/// Template class `Frustum` +/// +/// The frustum is always located with the eye point at the origin +/// facing down -Z. This makes the Frustum class compatable with +/// OpenGL (or anything that assumes a camera looks down -Z, hence +/// with a right-handed coordinate system) but not with RenderMan +/// which assumes the camera looks down +Z. Additional functions are +/// provided for conversion from and from various camera coordinate +/// spaces. +/// +/// nearPlane/farPlane: near/far are keywords used by Microsoft's +/// compiler, so we use nearPlane/farPlane instead to avoid +/// issues. + +template class IMATH_EXPORT_TEMPLATE_TYPE Frustum +{ +public: + using BaseType = T; + using value_type = T; + + /// @{ + /// @name Constructors and Assignment + /// + + /// Initialize with default values: + /// near=0.1, far=1000.0, left=-1.0, right=1.0, top=1.0, bottom=-1.0, ortho=false + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 Frustum () IMATH_NOEXCEPT; + + /// Copy constructor + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 Frustum (const Frustum&) IMATH_NOEXCEPT; + + /// Initialize to specific values + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 Frustum ( + T nearPlane, + T farPlane, + T left, + T right, + T top, + T bottom, + bool ortho = false) IMATH_NOEXCEPT; + + /// Initialize with fov and aspect + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 + Frustum (T nearPlane, T farPlane, T fovx, T fovy, T aspect) IMATH_NOEXCEPT; + + /// Destructor + virtual ~Frustum () IMATH_NOEXCEPT; + + /// Component-wise assignment + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 const Frustum& + operator= (const Frustum&) IMATH_NOEXCEPT; + + /// @} + + /// @{ + /// @name Comparison + + /// Equality + IMATH_HOSTDEVICE constexpr bool + operator== (const Frustum& src) const IMATH_NOEXCEPT; + + /// Inequality + IMATH_HOSTDEVICE constexpr bool + operator!= (const Frustum& src) const IMATH_NOEXCEPT; + + /// @} + + /// @{ + /// @name Query + + /// Return true if the frustum is orthographic, false if perspective + IMATH_HOSTDEVICE constexpr bool orthographic () const IMATH_NOEXCEPT + { + return _orthographic; + } + + /// Return the near clipping plane + IMATH_HOSTDEVICE constexpr T nearPlane () const IMATH_NOEXCEPT + { + return _nearPlane; + } + + /// Return the near clipping plane + IMATH_HOSTDEVICE constexpr T hither () const IMATH_NOEXCEPT + { + return _nearPlane; + } + + /// Return the far clipping plane + IMATH_HOSTDEVICE constexpr T farPlane () const IMATH_NOEXCEPT + { + return _farPlane; + } + + /// Return the far clipping plane + IMATH_HOSTDEVICE constexpr T yon () const IMATH_NOEXCEPT + { + return _farPlane; + } + + /// Return the left of the frustum + IMATH_HOSTDEVICE constexpr T left () const IMATH_NOEXCEPT { return _left; } + + /// Return the right of the frustum + IMATH_HOSTDEVICE constexpr T right () const IMATH_NOEXCEPT + { + return _right; + } + + /// Return the bottom of the frustum + IMATH_HOSTDEVICE constexpr T bottom () const IMATH_NOEXCEPT + { + return _bottom; + } + + /// Return the top of the frustum + IMATH_HOSTDEVICE constexpr T top () const IMATH_NOEXCEPT { return _top; } + + /// Return the field of view in X + IMATH_HOSTDEVICE constexpr T fovx () const IMATH_NOEXCEPT; + + /// Return the field of view in Y + IMATH_HOSTDEVICE constexpr T fovy () const IMATH_NOEXCEPT; + + /// Return the aspect ratio + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 T aspect () const IMATH_NOEXCEPT; + + /// Return the aspect ratio. Throw an exception if the aspect + /// ratio is undefined. + IMATH_CONSTEXPR14 T aspectExc () const; + + /// Return the project matrix that the frustum defines + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 Matrix44 + projectionMatrix () const IMATH_NOEXCEPT; + + /// Return the project matrix that the frustum defines. Throw an + /// exception if the frustum is degenerate. + IMATH_CONSTEXPR14 Matrix44 projectionMatrixExc () const; + + /// Return true if the frustum is degenerate. + IMATH_HOSTDEVICE constexpr bool degenerate () const IMATH_NOEXCEPT; + + /// @} + + /// @{ + /// @name Set Value + + /// Set functions change the entire state of the Frustum + IMATH_HOSTDEVICE void set ( + T nearPlane, + T farPlane, + T left, + T right, + T top, + T bottom, + bool ortho = false) IMATH_NOEXCEPT; + + /// Set functions change the entire state of the Frustum using + /// field of view and aspect ratio + IMATH_HOSTDEVICE void + set (T nearPlane, T farPlane, T fovx, T fovy, T aspect) IMATH_NOEXCEPT; + + /// Set functions change the entire state of the Frustum using + /// field of view and aspect ratio. Throw an exception if `fovx` + /// and/or `fovy` are invalid. + void setExc (T nearPlane, T farPlane, T fovx, T fovy, T aspect); + + /// Set the near and far clipping planes + IMATH_HOSTDEVICE void + modifyNearAndFar (T nearPlane, T farPlane) IMATH_NOEXCEPT; + + /// Set the ortographic state + IMATH_HOSTDEVICE void setOrthographic (bool) IMATH_NOEXCEPT; + + /// Set the planes in p to be the six bounding planes of the frustum, in + /// the following order: top, right, bottom, left, near, far. + /// Note that the planes have normals that point out of the frustum. + IMATH_HOSTDEVICE void planes (Plane3 p[6]) const IMATH_NOEXCEPT; + + /// Set the planes in p to be the six bounding planes of the + /// frustum, in the following order: top, right, bottom, left, + /// near, far. Note that the planes have normals that point out + /// of the frustum. Apply the given matrix to transform the + /// frustum before setting the planes. + IMATH_HOSTDEVICE void + planes (Plane3 p[6], const Matrix44& M) const IMATH_NOEXCEPT; + + /// Takes a rectangle in the screen space (i.e., -1 <= left <= right <= 1 + /// and -1 <= bottom <= top <= 1) of this Frustum, and returns a new + /// Frustum whose near clipping-plane window is that rectangle in local + /// space. + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 IMATH_HOSTDEVICE Frustum + window (T left, T right, T top, T bottom) const IMATH_NOEXCEPT; + + /// @} + + /// @{ + /// @name Utility Methods + + /// Project a point in screen spaced to 3d ray + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 Line3 + projectScreenToRay (const Vec2&) const IMATH_NOEXCEPT; + + /// Project a 3D point into screen coordinates + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 Vec2 + projectPointToScreen (const Vec3&) const IMATH_NOEXCEPT; + + /// Project a 3D point into screen coordinates. Throw an + /// exception if the point cannot be projected. + IMATH_CONSTEXPR14 Vec2 projectPointToScreenExc (const Vec3&) const; + + /// Map a z value to its depth in the frustum. + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 T + ZToDepth (long zval, long min, long max) const IMATH_NOEXCEPT; + /// Map a z value to its depth in the frustum. + IMATH_CONSTEXPR14 T ZToDepthExc (long zval, long min, long max) const; + + /// Map a normalized z value to its depth in the frustum. + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 T + normalizedZToDepth (T zval) const IMATH_NOEXCEPT; + + /// Map a normalized z value to its depth in the frustum. Throw an + /// exception on error. + IMATH_CONSTEXPR14 T normalizedZToDepthExc (T zval) const; + + /// Map depth to z value. + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 long + DepthToZ (T depth, long zmin, long zmax) const IMATH_NOEXCEPT; + + /// Map depth to z value. Throw an exception on error. + IMATH_CONSTEXPR14 long DepthToZExc (T depth, long zmin, long zmax) const; + + /// Compute worldRadius + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 T + worldRadius (const Vec3& p, T radius) const IMATH_NOEXCEPT; + + /// Compute worldRadius. Throw an exception on error. + IMATH_CONSTEXPR14 T worldRadiusExc (const Vec3& p, T radius) const; + + /// Compute screen radius + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 T + screenRadius (const Vec3& p, T radius) const IMATH_NOEXCEPT; + + /// Compute screen radius. Throw an exception on error. + IMATH_CONSTEXPR14 T screenRadiusExc (const Vec3& p, T radius) const; + + /// @} + +protected: + /// Map point from screen space to local space + IMATH_HOSTDEVICE constexpr Vec2 + screenToLocal (const Vec2&) const IMATH_NOEXCEPT; + + /// Map point from local space to screen space + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 Vec2 + localToScreen (const Vec2&) const IMATH_NOEXCEPT; + + /// Map point from local space to screen space. Throw an exception + /// on error. + IMATH_CONSTEXPR14 Vec2 localToScreenExc (const Vec2&) const; + +protected: + /// @cond Doxygen_Suppress + + T _nearPlane; + T _farPlane; + T _left; + T _right; + T _top; + T _bottom; + bool _orthographic; + + /// @endcond +}; + +template +IMATH_CONSTEXPR14 inline Frustum::Frustum () IMATH_NOEXCEPT +{ + set (T (0.1), T (1000.0), T (-1.0), T (1.0), T (1.0), T (-1.0), false); +} + +template +IMATH_CONSTEXPR14 inline Frustum::Frustum (const Frustum& f) IMATH_NOEXCEPT +{ + *this = f; +} + +template +IMATH_CONSTEXPR14 inline Frustum::Frustum ( + T n, T f, T l, T r, T t, T b, bool o) IMATH_NOEXCEPT +{ + set (n, f, l, r, t, b, o); +} + +template +IMATH_CONSTEXPR14 inline Frustum::Frustum ( + T nearPlane, T farPlane, T fovx, T fovy, T aspect) IMATH_NOEXCEPT +{ + set (nearPlane, farPlane, fovx, fovy, aspect); +} + +template Frustum::~Frustum () IMATH_NOEXCEPT +{} + +template +IMATH_CONSTEXPR14 inline const Frustum& +Frustum::operator= (const Frustum& f) IMATH_NOEXCEPT +{ + _nearPlane = f._nearPlane; + _farPlane = f._farPlane; + _left = f._left; + _right = f._right; + _top = f._top; + _bottom = f._bottom; + _orthographic = f._orthographic; + + return *this; +} + +template +constexpr inline bool +Frustum::operator== (const Frustum& src) const IMATH_NOEXCEPT +{ + return _nearPlane == src._nearPlane && _farPlane == src._farPlane && + _left == src._left && _right == src._right && _top == src._top && + _bottom == src._bottom && _orthographic == src._orthographic; +} + +template +constexpr inline bool +Frustum::operator!= (const Frustum& src) const IMATH_NOEXCEPT +{ + return !operator== (src); +} + +template +inline void +Frustum::set (T n, T f, T l, T r, T t, T b, bool o) IMATH_NOEXCEPT +{ + _nearPlane = n; + _farPlane = f; + _left = l; + _right = r; + _bottom = b; + _top = t; + _orthographic = o; +} + +template +inline void +Frustum::modifyNearAndFar (T n, T f) IMATH_NOEXCEPT +{ + if (_orthographic) { _nearPlane = n; } + else + { + Line3 lowerLeft ( + Vec3 (0, 0, 0), Vec3 (_left, _bottom, -_nearPlane)); + Line3 upperRight ( + Vec3 (0, 0, 0), Vec3 (_right, _top, -_nearPlane)); + Plane3 nearPlane (Vec3 (0, 0, -1), n); + + Vec3 ll = Vec3 (0, 0, 0); + Vec3 ur = Vec3 (0, 0, 0); + nearPlane.intersect (lowerLeft, ll); + nearPlane.intersect (upperRight, ur); + + _left = ll.x; + _right = ur.x; + _top = ur.y; + _bottom = ll.y; + _nearPlane = n; + _farPlane = f; + } + + _farPlane = f; +} + +template +inline void +Frustum::setOrthographic (bool ortho) IMATH_NOEXCEPT +{ + _orthographic = ortho; +} + +template +inline void +Frustum::setExc (T nearPlane, T farPlane, T fovx, T fovy, T aspect) +{ + if (fovx != T (0) && fovy != T (0)) + throw std::domain_error ("fovx and fovy cannot both be non-zero."); + + const T two = static_cast (2); + + if (fovx != T (0)) + { + _right = nearPlane * std::tan (fovx / two); + _left = -_right; + _top = ((_right - _left) / aspect) / two; + _bottom = -_top; + } + else + { + _top = nearPlane * std::tan (fovy / two); + _bottom = -_top; + _right = (_top - _bottom) * aspect / two; + _left = -_right; + } + _nearPlane = nearPlane; + _farPlane = farPlane; + _orthographic = false; +} + +template +inline void +Frustum::set (T nearPlane, T farPlane, T fovx, T fovy, T aspect) + IMATH_NOEXCEPT +{ + const T two = static_cast (2); + + if (fovx != T (0)) + { + _right = nearPlane * std::tan (fovx / two); + _left = -_right; + _top = ((_right - _left) / aspect) / two; + _bottom = -_top; + } + else + { + _top = nearPlane * std::tan (fovy / two); + _bottom = -_top; + _right = (_top - _bottom) * aspect / two; + _left = -_right; + } + _nearPlane = nearPlane; + _farPlane = farPlane; + _orthographic = false; +} + +template +constexpr inline T +Frustum::fovx () const IMATH_NOEXCEPT +{ + return std::atan2 (_right, _nearPlane) - std::atan2 (_left, _nearPlane); +} + +template +constexpr inline T +Frustum::fovy () const IMATH_NOEXCEPT +{ + return std::atan2 (_top, _nearPlane) - std::atan2 (_bottom, _nearPlane); +} + +template +IMATH_CONSTEXPR14 inline T +Frustum::aspectExc () const +{ + T rightMinusLeft = _right - _left; + T topMinusBottom = _top - _bottom; + + if (abs (topMinusBottom) < T (1) && + abs (rightMinusLeft) > + std::numeric_limits::max () * abs (topMinusBottom)) + { + throw std::domain_error ("Bad viewing frustum: " + "aspect ratio cannot be computed."); + } + + return rightMinusLeft / topMinusBottom; +} + +template +IMATH_CONSTEXPR14 inline T +Frustum::aspect () const IMATH_NOEXCEPT +{ + T rightMinusLeft = _right - _left; + T topMinusBottom = _top - _bottom; + return rightMinusLeft / topMinusBottom; +} + +template +IMATH_CONSTEXPR14 inline Matrix44 +Frustum::projectionMatrixExc () const +{ + T rightPlusLeft = _right + _left; + T rightMinusLeft = _right - _left; + + T topPlusBottom = _top + _bottom; + T topMinusBottom = _top - _bottom; + + T farPlusNear = _farPlane + _nearPlane; + T farMinusNear = _farPlane - _nearPlane; + + if ((abs (rightMinusLeft) < T (1) && + abs (rightPlusLeft) > + std::numeric_limits::max () * abs (rightMinusLeft)) || + (abs (topMinusBottom) < T (1) && + abs (topPlusBottom) > + std::numeric_limits::max () * abs (topMinusBottom)) || + (abs (farMinusNear) < 1 && + abs (farPlusNear) > + std::numeric_limits::max () * abs (farMinusNear))) + { + throw std::domain_error ("Bad viewing frustum: " + "projection matrix cannot be computed."); + } + + if (_orthographic) + { + T tx = -rightPlusLeft / rightMinusLeft; + T ty = -topPlusBottom / topMinusBottom; + T tz = -farPlusNear / farMinusNear; + + if ((abs (rightMinusLeft) < T (1) && + T (2) > std::numeric_limits::max () * abs (rightMinusLeft)) || + (abs (topMinusBottom) < T (1) && + T (2) > std::numeric_limits::max () * abs (topMinusBottom)) || + (abs (farMinusNear) < T (1) && + T (2) > std::numeric_limits::max () * abs (farMinusNear))) + { + throw std::domain_error ("Bad viewing frustum: " + "projection matrix cannot be computed."); + } + + T A = T (2) / rightMinusLeft; + T B = T (2) / topMinusBottom; + T C = T (-2) / farMinusNear; + + return Matrix44 ( + A, 0, 0, 0, 0, B, 0, 0, 0, 0, C, 0, tx, ty, tz, 1.f); + } + else + { + T A = rightPlusLeft / rightMinusLeft; + T B = topPlusBottom / topMinusBottom; + T C = -farPlusNear / farMinusNear; + + T farTimesNear = T (-2) * _farPlane * _nearPlane; + if (abs (farMinusNear) < T (1) && + abs (farTimesNear) > + std::numeric_limits::max () * abs (farMinusNear)) + { + // impossible condition: already tested above + throw std::domain_error ("Bad viewing frustum: " + "projection matrix cannot be computed."); + } + + T D = farTimesNear / farMinusNear; + + T twoTimesNear = T (2) * _nearPlane; + + if ((abs (rightMinusLeft) < T (1) && + abs (twoTimesNear) > + std::numeric_limits::max () * abs (rightMinusLeft)) || + (abs (topMinusBottom) < T (1) && + abs (twoTimesNear) > + std::numeric_limits::max () * abs (topMinusBottom))) + { + // impossible condition: already tested above + throw std::domain_error ("Bad viewing frustum: " + "projection matrix cannot be computed."); + } + + T E = twoTimesNear / rightMinusLeft; + T F = twoTimesNear / topMinusBottom; + + return Matrix44 (E, 0, 0, 0, 0, F, 0, 0, A, B, C, -1, 0, 0, D, 0); + } +} + +template +IMATH_CONSTEXPR14 inline Matrix44 +Frustum::projectionMatrix () const IMATH_NOEXCEPT +{ + T rightPlusLeft = _right + _left; + T rightMinusLeft = _right - _left; + + T topPlusBottom = _top + _bottom; + T topMinusBottom = _top - _bottom; + + T farPlusNear = _farPlane + _nearPlane; + T farMinusNear = _farPlane - _nearPlane; + + if (_orthographic) + { + T tx = -rightPlusLeft / rightMinusLeft; + T ty = -topPlusBottom / topMinusBottom; + T tz = -farPlusNear / farMinusNear; + + T A = T (2) / rightMinusLeft; + T B = T (2) / topMinusBottom; + T C = T (-2) / farMinusNear; + + return Matrix44 ( + A, 0, 0, 0, 0, B, 0, 0, 0, 0, C, 0, tx, ty, tz, 1.f); + } + else + { + T A = rightPlusLeft / rightMinusLeft; + T B = topPlusBottom / topMinusBottom; + T C = -farPlusNear / farMinusNear; + + T farTimesNear = T (-2) * _farPlane * _nearPlane; + + T D = farTimesNear / farMinusNear; + + T twoTimesNear = T (2) * _nearPlane; + + T E = twoTimesNear / rightMinusLeft; + T F = twoTimesNear / topMinusBottom; + + return Matrix44 (E, 0, 0, 0, 0, F, 0, 0, A, B, C, -1, 0, 0, D, 0); + } +} + +template +constexpr inline bool +Frustum::degenerate () const IMATH_NOEXCEPT +{ + return (_nearPlane == _farPlane) || (_left == _right) || (_top == _bottom); +} + +template +IMATH_CONSTEXPR14 inline Frustum +Frustum::window (T l, T r, T t, T b) const IMATH_NOEXCEPT +{ + // move it to 0->1 space + + Vec2 bl = screenToLocal (Vec2 (l, b)); + Vec2 tr = screenToLocal (Vec2 (r, t)); + + return Frustum ( + _nearPlane, _farPlane, bl.x, tr.x, tr.y, bl.y, _orthographic); +} + +template +constexpr inline Vec2 +Frustum::screenToLocal (const Vec2& s) const IMATH_NOEXCEPT +{ + return Vec2 ( + _left + (_right - _left) * (1.f + s.x) / 2.f, + _bottom + (_top - _bottom) * (1.f + s.y) / 2.f); +} + +template +IMATH_CONSTEXPR14 inline Vec2 +Frustum::localToScreenExc (const Vec2& p) const +{ + T leftPlusRight = _left - T (2) * p.x + _right; + T leftMinusRight = _left - _right; + T bottomPlusTop = _bottom - T (2) * p.y + _top; + T bottomMinusTop = _bottom - _top; + + if ((abs (leftMinusRight) < T (1) && + abs (leftPlusRight) > + std::numeric_limits::max () * abs (leftMinusRight)) || + (abs (bottomMinusTop) < T (1) && + abs (bottomPlusTop) > + std::numeric_limits::max () * abs (bottomMinusTop))) + { + throw std::domain_error ( + "Bad viewing frustum: " + "local-to-screen transformation cannot be computed"); + } + + return Vec2 ( + leftPlusRight / leftMinusRight, bottomPlusTop / bottomMinusTop); +} + +template +IMATH_CONSTEXPR14 inline Vec2 +Frustum::localToScreen (const Vec2& p) const IMATH_NOEXCEPT +{ + T leftPlusRight = _left - T (2) * p.x + _right; + T leftMinusRight = _left - _right; + T bottomPlusTop = _bottom - T (2) * p.y + _top; + T bottomMinusTop = _bottom - _top; + + return Vec2 ( + leftPlusRight / leftMinusRight, bottomPlusTop / bottomMinusTop); +} + +template +IMATH_CONSTEXPR14 inline Line3 +Frustum::projectScreenToRay (const Vec2& p) const IMATH_NOEXCEPT +{ + Vec2 point = screenToLocal (p); + if (orthographic ()) + return Line3 ( + Vec3 (point.x, point.y, 0.0), Vec3 (point.x, point.y, -1.0)); + else + return Line3 ( + Vec3 (0, 0, 0), Vec3 (point.x, point.y, -_nearPlane)); +} + +template +IMATH_CONSTEXPR14 Vec2 +Frustum::projectPointToScreenExc (const Vec3& point) const +{ + if (orthographic () || point.z == T (0)) + return localToScreenExc (Vec2 (point.x, point.y)); + else + return localToScreenExc (Vec2 ( + point.x * _nearPlane / -point.z, point.y * _nearPlane / -point.z)); +} + +template +IMATH_CONSTEXPR14 Vec2 +Frustum::projectPointToScreen (const Vec3& point) const IMATH_NOEXCEPT +{ + if (orthographic () || point.z == T (0)) + return localToScreen (Vec2 (point.x, point.y)); + else + return localToScreen (Vec2 ( + point.x * _nearPlane / -point.z, point.y * _nearPlane / -point.z)); +} + +template +IMATH_CONSTEXPR14 T +Frustum::ZToDepthExc (long zval, long zmin, long zmax) const +{ + int zdiff = zmax - zmin; + + if (zdiff == 0) + { + throw std::domain_error ("Bad call to Frustum::ZToDepth: zmax == zmin"); + } + + if (zval > zmax + 1) zval -= zdiff; + + T fzval = (T (zval) - T (zmin)) / T (zdiff); + return normalizedZToDepthExc (fzval); +} + +template +IMATH_CONSTEXPR14 T +Frustum::ZToDepth (long zval, long zmin, long zmax) const IMATH_NOEXCEPT +{ + int zdiff = zmax - zmin; + + if (zval > zmax + 1) zval -= zdiff; + + T fzval = (T (zval) - T (zmin)) / T (zdiff); + return normalizedZToDepth (fzval); +} + +template +IMATH_CONSTEXPR14 T +Frustum::normalizedZToDepthExc (T zval) const +{ + T Zp = zval * T (2) - T (1); + + if (_orthographic) + { + return -(Zp * (_farPlane - _nearPlane) + (_farPlane + _nearPlane)) / + T (2); + } + else + { + T farTimesNear = 2 * _farPlane * _nearPlane; + T farMinusNear = Zp * (_farPlane - _nearPlane) - _farPlane - _nearPlane; + + if (abs (farMinusNear) < 1 && + abs (farTimesNear) > + std::numeric_limits::max () * abs (farMinusNear)) + { + throw std::domain_error ( + "Frustum::normalizedZToDepth cannot be computed: " + "near and far clipping planes of the viewing frustum " + "may be too close to each other"); + } + + return farTimesNear / farMinusNear; + } +} + +template +IMATH_CONSTEXPR14 T +Frustum::normalizedZToDepth (T zval) const IMATH_NOEXCEPT +{ + T Zp = zval * T (2) - T (1); + + if (_orthographic) + { + return -(Zp * (_farPlane - _nearPlane) + (_farPlane + _nearPlane)) / + T (2); + } + else + { + T farTimesNear = 2 * _farPlane * _nearPlane; + T farMinusNear = Zp * (_farPlane - _nearPlane) - _farPlane - _nearPlane; + + return farTimesNear / farMinusNear; + } +} + +template +IMATH_CONSTEXPR14 long +Frustum::DepthToZExc (T depth, long zmin, long zmax) const +{ + long zdiff = zmax - zmin; + T farMinusNear = _farPlane - _nearPlane; + + if (_orthographic) + { + T farPlusNear = T (2) * depth + _farPlane + _nearPlane; + + if (abs (farMinusNear) < T (1) && + abs (farPlusNear) > + std::numeric_limits::max () * abs (farMinusNear)) + { + throw std::domain_error ("Bad viewing frustum: " + "near and far clipping planes " + "are too close to each other"); + } + + T Zp = -farPlusNear / farMinusNear; + return long (0.5 * (Zp + 1) * zdiff) + zmin; + } + else + { + // Perspective + + T farTimesNear = T (2) * _farPlane * _nearPlane; + if (abs (depth) < T (1) && + abs (farTimesNear) > std::numeric_limits::max () * abs (depth)) + { + throw std::domain_error ("Bad call to DepthToZ function: " + "value of `depth' is too small"); + } + + T farPlusNear = farTimesNear / depth + _farPlane + _nearPlane; + if (abs (farMinusNear) < T (1) && + abs (farPlusNear) > + std::numeric_limits::max () * abs (farMinusNear)) + { + throw std::domain_error ("Bad viewing frustum: " + "near and far clipping planes " + "are too close to each other"); + } + + T Zp = farPlusNear / farMinusNear; + return long (0.5 * (Zp + 1) * zdiff) + zmin; + } +} + +template +IMATH_CONSTEXPR14 long +Frustum::DepthToZ (T depth, long zmin, long zmax) const IMATH_NOEXCEPT +{ + long zdiff = zmax - zmin; + T farMinusNear = _farPlane - _nearPlane; + + if (_orthographic) + { + T farPlusNear = T (2) * depth + _farPlane + _nearPlane; + + T Zp = -farPlusNear / farMinusNear; + return long (0.5 * (Zp + 1) * zdiff) + zmin; + } + else + { + // Perspective + + T farTimesNear = T (2) * _farPlane * _nearPlane; + + T farPlusNear = farTimesNear / depth + _farPlane + _nearPlane; + + T Zp = farPlusNear / farMinusNear; + return long (0.5 * (Zp + 1) * zdiff) + zmin; + } +} + +template +IMATH_CONSTEXPR14 T +Frustum::screenRadiusExc (const Vec3& p, T radius) const +{ + // Derivation: + // Consider X-Z plane. + // X coord of projection of p = xp = p.x * (-_nearPlane / p.z) + // Let q be p + (radius, 0, 0). + // X coord of projection of q = xq = (p.x - radius) * (-_nearPlane / p.z) + // X coord of projection of segment from p to q = r = xp - xq + // = radius * (-_nearPlane / p.z) + // A similar analysis holds in the Y-Z plane. + // So r is the quantity we want to return. + + if (abs (p.z) > T (1) || + abs (-_nearPlane) < std::numeric_limits::max () * abs (p.z)) + { + return radius * (-_nearPlane / p.z); + } + else + { + throw std::domain_error ("Bad call to Frustum::screenRadius: " + "magnitude of `p' is too small"); + } + + return radius * (-_nearPlane / p.z); +} + +template +IMATH_CONSTEXPR14 T +Frustum::screenRadius (const Vec3& p, T radius) const IMATH_NOEXCEPT +{ + // Derivation: + // Consider X-Z plane. + // X coord of projection of p = xp = p.x * (-_nearPlane / p.z) + // Let q be p + (radius, 0, 0). + // X coord of projection of q = xq = (p.x - radius) * (-_nearPlane / p.z) + // X coord of projection of segment from p to q = r = xp - xq + // = radius * (-_nearPlane / p.z) + // A similar analysis holds in the Y-Z plane. + // So r is the quantity we want to return. + + return radius * (-_nearPlane / p.z); +} + +template +IMATH_CONSTEXPR14 T +Frustum::worldRadiusExc (const Vec3& p, T radius) const +{ + if (abs (-_nearPlane) > T (1) || + abs (p.z) < std::numeric_limits::max () * abs (-_nearPlane)) + { + return radius * (p.z / -_nearPlane); + } + else + { + throw std::domain_error ("Bad viewing frustum: " + "near clipping plane is too close to zero"); + } +} + +template +IMATH_CONSTEXPR14 T +Frustum::worldRadius (const Vec3& p, T radius) const IMATH_NOEXCEPT +{ + return radius * (p.z / -_nearPlane); +} + +template +void +Frustum::planes (Plane3 p[6]) const IMATH_NOEXCEPT +{ + // + // Plane order: Top, Right, Bottom, Left, Near, Far. + // Normals point outwards. + // + + if (!_orthographic) + { + Vec3 a (_left, _bottom, -_nearPlane); + Vec3 b (_left, _top, -_nearPlane); + Vec3 c (_right, _top, -_nearPlane); + Vec3 d (_right, _bottom, -_nearPlane); + Vec3 o (0, 0, 0); + + p[0].set (o, c, b); + p[1].set (o, d, c); + p[2].set (o, a, d); + p[3].set (o, b, a); + } + else + { + p[0].set (Vec3 (0, 1, 0), _top); + p[1].set (Vec3 (1, 0, 0), _right); + p[2].set (Vec3 (0, -1, 0), -_bottom); + p[3].set (Vec3 (-1, 0, 0), -_left); + } + p[4].set (Vec3 (0, 0, 1), -_nearPlane); + p[5].set (Vec3 (0, 0, -1), _farPlane); +} + +template +void +Frustum::planes (Plane3 p[6], const Matrix44& M) const IMATH_NOEXCEPT +{ + // + // Plane order: Top, Right, Bottom, Left, Near, Far. + // Normals point outwards. + // + + Vec3 a = Vec3 (_left, _bottom, -_nearPlane) * M; + Vec3 b = Vec3 (_left, _top, -_nearPlane) * M; + Vec3 c = Vec3 (_right, _top, -_nearPlane) * M; + Vec3 d = Vec3 (_right, _bottom, -_nearPlane) * M; + if (!_orthographic) + { + double s = _farPlane / double (_nearPlane); + T farLeft = (T) (s * _left); + T farRight = (T) (s * _right); + T farTop = (T) (s * _top); + T farBottom = (T) (s * _bottom); + Vec3 e = Vec3 (farLeft, farBottom, -_farPlane) * M; + Vec3 f = Vec3 (farLeft, farTop, -_farPlane) * M; + Vec3 g = Vec3 (farRight, farTop, -_farPlane) * M; + Vec3 o = Vec3 (0, 0, 0) * M; + p[0].set (o, c, b); + p[1].set (o, d, c); + p[2].set (o, a, d); + p[3].set (o, b, a); + p[4].set (a, d, c); + p[5].set (e, f, g); + } + else + { + Vec3 e = Vec3 (_left, _bottom, -_farPlane) * M; + Vec3 f = Vec3 (_left, _top, -_farPlane) * M; + Vec3 g = Vec3 (_right, _top, -_farPlane) * M; + Vec3 h = Vec3 (_right, _bottom, -_farPlane) * M; + p[0].set (c, g, f); + p[1].set (d, h, g); + p[2].set (a, e, h); + p[3].set (b, f, e); + p[4].set (a, d, c); + p[5].set (e, f, g); + } +} + +/// Frustum of type float +typedef Frustum Frustumf; + +/// Frustum of type double +typedef Frustum Frustumd; + +IMATH_INTERNAL_NAMESPACE_HEADER_EXIT + +#if defined _WIN32 || defined _WIN64 +# ifdef _redef_near +# define near +# endif +# ifdef _redef_far +# define far +# endif +#endif + +#endif // INCLUDED_IMATHFRUSTUM_H diff --git a/third_party/tlRender-install-Release/include/Imath/ImathFrustumTest.h b/third_party/tlRender-install-Release/include/Imath/ImathFrustumTest.h new file mode 100644 index 00000000..c09aab84 --- /dev/null +++ b/third_party/tlRender-install-Release/include/Imath/ImathFrustumTest.h @@ -0,0 +1,355 @@ +// +// SPDX-License-Identifier: BSD-3-Clause +// Copyright Contributors to the OpenEXR Project. +// + +// +// A viewing frustum class +// +// This file contains algorithms applied to or in conjunction with +// Frustum visibility testing (Imath::Frustum). +// +// Methods for frustum-based rejection of primitives are contained here. +// + +#ifndef INCLUDED_IMATHFRUSTUMTEST_H +#define INCLUDED_IMATHFRUSTUMTEST_H + +#include "ImathExport.h" +#include "ImathNamespace.h" + +#include "ImathBox.h" +#include "ImathFrustum.h" +#include "ImathMatrix.h" +#include "ImathSphere.h" +#include "ImathVec.h" + +IMATH_INTERNAL_NAMESPACE_HEADER_ENTER + +/// +/// template class FrustumTest +/// +/// This is a helper class, designed to accelerate the case +/// where many tests are made against the same frustum. +/// That's a really common case. +/// +/// The acceleration is achieved by pre-computing the planes of +/// the frustum, along with the ablsolute values of the plane normals. +/// +/// How to use this +/// +/// Given that you already have: +/// Imath::Frustum myFrustum +/// Imath::Matrix44 myCameraWorldMatrix +/// +/// First, make a frustum test object: +/// FrustumTest myFrustumTest(myFrustum, myCameraWorldMatrix) +/// +/// Whenever the camera or frustum changes, call: +/// myFrustumTest.setFrustum(myFrustum, myCameraWorldMatrix) +/// +/// For each object you want to test for visibility, call: +/// myFrustumTest.isVisible(myBox) +/// myFrustumTest.isVisible(mySphere) +/// myFrustumTest.isVisible(myVec3) +/// myFrustumTest.completelyContains(myBox) +/// myFrustumTest.completelyContains(mySphere) +/// +/// Explanation of how it works +/// +/// We store six world-space Frustum planes (nx, ny, nz, offset) +/// +/// Points: To test a Vec3 for visibility, test it against each plane +/// using the normal (v dot n - offset) method. (the result is exact) +/// +/// BBoxes: To test an axis-aligned bbox, test the center against each plane +/// using the normal (v dot n - offset) method, but offset by the +/// box extents dot the abs of the plane normal. (the result is NOT +/// exact, but will not return false-negatives.) +/// +/// Spheres: To test a sphere, test the center against each plane +/// using the normal (v dot n - offset) method, but offset by the +/// sphere's radius. (the result is NOT exact, but will not return +/// false-negatives.) +/// +/// +/// SPECIAL NOTE: "Where are the dot products?" +/// Actual dot products are currently slow for most SIMD architectures. +/// In order to keep this code optimization-ready, the dot products +/// are all performed using vector adds and multipies. +/// +/// In order to do this, the plane equations are stored in "transpose" +/// form, with the X components grouped into an X vector, etc. +/// + +template class IMATH_EXPORT_TEMPLATE_TYPE FrustumTest +{ +public: + /// @{ + /// @name Constructors + + /// Initialize camera matrix to identity + FrustumTest () IMATH_NOEXCEPT + { + Frustum frust; + Matrix44 cameraMat; + cameraMat.makeIdentity (); + setFrustum (frust, cameraMat); + } + + /// Initialize to a given frustum and camera matrix. + FrustumTest (const Frustum& frustum, const Matrix44& cameraMat) + IMATH_NOEXCEPT + { + setFrustum (frustum, cameraMat); + } + + /// @} + + /// @{ + /// @name Set Value + + /// Update the frustum test with a new frustum and matrix. + /// This should usually be called just once per frame, or however + /// often the camera moves. + void setFrustum (const Frustum& frustum, const Matrix44& cameraMat) + IMATH_NOEXCEPT; + + /// @} + + /// @{ + /// @name Query + + /// Return true if any part of the sphere is inside the frustum. + /// The result MAY return close false-positives, but not false-negatives. + bool isVisible (const Sphere3& sphere) const IMATH_NOEXCEPT; + + /// Return true if any part of the box is inside the frustum. + /// The result MAY return close false-positives, but not false-negatives. + bool isVisible (const Box>& box) const IMATH_NOEXCEPT; + + /// Return true if the point is inside the frustum. + bool isVisible (const Vec3& vec) const IMATH_NOEXCEPT; + + /// Return true if every part of the sphere is inside the frustum. + /// The result MAY return close false-negatives, but not false-positives. + bool completelyContains (const Sphere3& sphere) const IMATH_NOEXCEPT; + + /// Return true if every part of the box is inside the frustum. + /// The result MAY return close false-negatives, but not false-positives. + bool completelyContains (const Box>& box) const IMATH_NOEXCEPT; + + /// Return the camera matrix (primarily for debugging) + IMATH_INTERNAL_NAMESPACE::Matrix44 cameraMat () const IMATH_NOEXCEPT + { + return cameraMatrix; + } + + /// Return the viewing frustum (primarily for debugging) + IMATH_INTERNAL_NAMESPACE::Frustum currentFrustum () const IMATH_NOEXCEPT + { + return currFrustum; + } + + /// @} + + typedef T BaseType; + typedef T value_type; + +protected: + // To understand why the planes are stored this way, see + // the SPECIAL NOTE above. + + /// @cond Doxygen_Suppress + + Vec3 planeNormX[2]; // The X components from 6 plane equations + Vec3 planeNormY[2]; // The Y components from 6 plane equations + Vec3 planeNormZ[2]; // The Z components from 6 plane equations + + Vec3 planeOffsetVec[2]; // The distance offsets from 6 plane equations + + // The absolute values are stored to assist with bounding box tests. + Vec3 planeNormAbsX[2]; // The abs(X) components from 6 plane equations + Vec3 planeNormAbsY[2]; // The abs(X) components from 6 plane equations + Vec3 planeNormAbsZ[2]; // The abs(X) components from 6 plane equations + + // These are kept primarily for debugging tools. + Frustum currFrustum; + Matrix44 cameraMatrix; + /// @endcond +}; + +template +void +FrustumTest::setFrustum ( + const Frustum& frustum, const Matrix44& cameraMat) IMATH_NOEXCEPT +{ + Plane3 frustumPlanes[6]; + frustum.planes (frustumPlanes, cameraMat); + + // Here's where we effectively transpose the plane equations. + // We stuff all six X's into the two planeNormX vectors, etc. + for (int i = 0; i < 2; ++i) + { + int index = i * 3; + + planeNormX[i] = Vec3 ( + frustumPlanes[index + 0].normal.x, + frustumPlanes[index + 1].normal.x, + frustumPlanes[index + 2].normal.x); + planeNormY[i] = Vec3 ( + frustumPlanes[index + 0].normal.y, + frustumPlanes[index + 1].normal.y, + frustumPlanes[index + 2].normal.y); + planeNormZ[i] = Vec3 ( + frustumPlanes[index + 0].normal.z, + frustumPlanes[index + 1].normal.z, + frustumPlanes[index + 2].normal.z); + + planeNormAbsX[i] = Vec3 ( + std::abs (planeNormX[i].x), + std::abs (planeNormX[i].y), + std::abs (planeNormX[i].z)); + planeNormAbsY[i] = Vec3 ( + std::abs (planeNormY[i].x), + std::abs (planeNormY[i].y), + std::abs (planeNormY[i].z)); + planeNormAbsZ[i] = Vec3 ( + std::abs (planeNormZ[i].x), + std::abs (planeNormZ[i].y), + std::abs (planeNormZ[i].z)); + + planeOffsetVec[i] = Vec3 ( + frustumPlanes[index + 0].distance, + frustumPlanes[index + 1].distance, + frustumPlanes[index + 2].distance); + } + currFrustum = frustum; + cameraMatrix = cameraMat; +} + +template +bool +FrustumTest::isVisible (const Sphere3& sphere) const IMATH_NOEXCEPT +{ + Vec3 center = sphere.center; + Vec3 radiusVec = Vec3 (sphere.radius, sphere.radius, sphere.radius); + + // This is a vertical dot-product on three vectors at once. + Vec3 d0 = planeNormX[0] * center.x + planeNormY[0] * center.y + + planeNormZ[0] * center.z - radiusVec - planeOffsetVec[0]; + + if (d0.x >= 0 || d0.y >= 0 || d0.z >= 0) return false; + + Vec3 d1 = planeNormX[1] * center.x + planeNormY[1] * center.y + + planeNormZ[1] * center.z - radiusVec - planeOffsetVec[1]; + + if (d1.x >= 0 || d1.y >= 0 || d1.z >= 0) return false; + + return true; +} + +template +bool +FrustumTest::completelyContains (const Sphere3& sphere) const + IMATH_NOEXCEPT +{ + Vec3 center = sphere.center; + Vec3 radiusVec = Vec3 (sphere.radius, sphere.radius, sphere.radius); + + // This is a vertical dot-product on three vectors at once. + Vec3 d0 = planeNormX[0] * center.x + planeNormY[0] * center.y + + planeNormZ[0] * center.z + radiusVec - planeOffsetVec[0]; + + if (d0.x >= 0 || d0.y >= 0 || d0.z >= 0) return false; + + Vec3 d1 = planeNormX[1] * center.x + planeNormY[1] * center.y + + planeNormZ[1] * center.z + radiusVec - planeOffsetVec[1]; + + if (d1.x >= 0 || d1.y >= 0 || d1.z >= 0) return false; + + return true; +} + +template +bool +FrustumTest::isVisible (const Box>& box) const IMATH_NOEXCEPT +{ + if (box.isEmpty ()) return false; + + Vec3 center = (box.min + box.max) / 2; + Vec3 extent = (box.max - center); + + // This is a vertical dot-product on three vectors at once. + Vec3 d0 = planeNormX[0] * center.x + planeNormY[0] * center.y + + planeNormZ[0] * center.z - planeNormAbsX[0] * extent.x - + planeNormAbsY[0] * extent.y - planeNormAbsZ[0] * extent.z - + planeOffsetVec[0]; + + if (d0.x >= 0 || d0.y >= 0 || d0.z >= 0) return false; + + Vec3 d1 = planeNormX[1] * center.x + planeNormY[1] * center.y + + planeNormZ[1] * center.z - planeNormAbsX[1] * extent.x - + planeNormAbsY[1] * extent.y - planeNormAbsZ[1] * extent.z - + planeOffsetVec[1]; + + if (d1.x >= 0 || d1.y >= 0 || d1.z >= 0) return false; + + return true; +} + +template +bool +FrustumTest::completelyContains (const Box>& box) const + IMATH_NOEXCEPT +{ + if (box.isEmpty ()) return false; + + Vec3 center = (box.min + box.max) / 2; + Vec3 extent = (box.max - center); + + // This is a vertical dot-product on three vectors at once. + Vec3 d0 = planeNormX[0] * center.x + planeNormY[0] * center.y + + planeNormZ[0] * center.z + planeNormAbsX[0] * extent.x + + planeNormAbsY[0] * extent.y + planeNormAbsZ[0] * extent.z - + planeOffsetVec[0]; + + if (d0.x >= 0 || d0.y >= 0 || d0.z >= 0) return false; + + Vec3 d1 = planeNormX[1] * center.x + planeNormY[1] * center.y + + planeNormZ[1] * center.z + planeNormAbsX[1] * extent.x + + planeNormAbsY[1] * extent.y + planeNormAbsZ[1] * extent.z - + planeOffsetVec[1]; + + if (d1.x >= 0 || d1.y >= 0 || d1.z >= 0) return false; + + return true; +} + +template +bool +FrustumTest::isVisible (const Vec3& vec) const IMATH_NOEXCEPT +{ + // This is a vertical dot-product on three vectors at once. + Vec3 d0 = (planeNormX[0] * vec.x) + (planeNormY[0] * vec.y) + + (planeNormZ[0] * vec.z) - planeOffsetVec[0]; + + if (d0.x >= 0 || d0.y >= 0 || d0.z >= 0) return false; + + Vec3 d1 = (planeNormX[1] * vec.x) + (planeNormY[1] * vec.y) + + (planeNormZ[1] * vec.z) - planeOffsetVec[1]; + + if (d1.x >= 0 || d1.y >= 0 || d1.z >= 0) return false; + + return true; +} + +/// FrustymTest of type float +typedef FrustumTest FrustumTestf; + +/// FrustymTest of type double +typedef FrustumTest FrustumTestd; + +IMATH_INTERNAL_NAMESPACE_HEADER_EXIT + +#endif // INCLUDED_IMATHFRUSTUMTEST_H diff --git a/third_party/tlRender-install-Release/include/Imath/ImathFun.h b/third_party/tlRender-install-Release/include/Imath/ImathFun.h new file mode 100644 index 00000000..5004c876 --- /dev/null +++ b/third_party/tlRender-install-Release/include/Imath/ImathFun.h @@ -0,0 +1,233 @@ +// +// SPDX-License-Identifier: BSD-3-Clause +// Copyright Contributors to the OpenEXR Project. +// + +#ifndef INCLUDED_IMATHFUN_H +#define INCLUDED_IMATHFUN_H + +//----------------------------------------------------------------------------- +// +// Miscellaneous utility functions +// +//----------------------------------------------------------------------------- + +#include +#include + +#include "ImathExport.h" +#include "ImathNamespace.h" +#include "ImathPlatform.h" + +IMATH_INTERNAL_NAMESPACE_HEADER_ENTER + +template +IMATH_HOSTDEVICE constexpr inline T +abs (T a) IMATH_NOEXCEPT +{ + return (a > T (0)) ? a : -a; +} + +template +IMATH_HOSTDEVICE constexpr inline int +sign (T a) IMATH_NOEXCEPT +{ + return (a > T (0)) ? 1 : ((a < T (0)) ? -1 : 0); +} + +template +IMATH_HOSTDEVICE constexpr inline T +lerp (T a, T b, Q t) IMATH_NOEXCEPT +{ + return (T) (a * (1 - t) + b * t); +} + +template +IMATH_HOSTDEVICE constexpr inline T +ulerp (T a, T b, Q t) IMATH_NOEXCEPT +{ + return (T) ((a > b) ? (a - (a - b) * t) : (a + (b - a) * t)); +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline T +lerpfactor (T m, T a, T b) IMATH_NOEXCEPT +{ + // + // Return how far m is between a and b, that is return t such that + // if: + // t = lerpfactor(m, a, b); + // then: + // m = lerp(a, b, t); + // + // If a==b, return 0. + // + + T d = b - a; + T n = m - a; + + if (abs (d) > T (1) || abs (n) < std::numeric_limits::max () * abs (d)) + return n / d; + + return T (0); +} + +template +IMATH_HOSTDEVICE constexpr inline T +clamp (T a, T l, T h) IMATH_NOEXCEPT +{ + return (a < l) ? l : ((a > h) ? h : a); +} + +template +IMATH_HOSTDEVICE constexpr inline int +cmp (T a, T b) IMATH_NOEXCEPT +{ + return IMATH_INTERNAL_NAMESPACE::sign (a - b); +} + +template +IMATH_HOSTDEVICE constexpr inline int +cmpt (T a, T b, T t) IMATH_NOEXCEPT +{ + return (IMATH_INTERNAL_NAMESPACE::abs (a - b) <= t) ? 0 : cmp (a, b); +} + +template +IMATH_HOSTDEVICE constexpr inline bool +iszero (T a, T t) IMATH_NOEXCEPT +{ + return (IMATH_INTERNAL_NAMESPACE::abs (a) <= t) ? 1 : 0; +} + +template +IMATH_HOSTDEVICE constexpr inline bool +equal (T1 a, T2 b, T3 t) IMATH_NOEXCEPT +{ + return IMATH_INTERNAL_NAMESPACE::abs (a - b) <= t; +} + +template +IMATH_HOSTDEVICE constexpr inline int +floor (T x) IMATH_NOEXCEPT +{ + return (x >= 0) ? int (x) : -(int (-x) + (-x > int (-x))); +} + +template +IMATH_HOSTDEVICE constexpr inline int +ceil (T x) IMATH_NOEXCEPT +{ + return -floor (-x); +} + +template +IMATH_HOSTDEVICE constexpr inline int +trunc (T x) IMATH_NOEXCEPT +{ + return (x >= 0) ? int (x) : -int (-x); +} + +// +// Integer division and remainder where the +// remainder of x/y has the same sign as x: +// +// divs(x,y) == (abs(x) / abs(y)) * (sign(x) * sign(y)) +// mods(x,y) == x - y * divs(x,y) +// + +IMATH_HOSTDEVICE constexpr inline int +divs (int x, int y) IMATH_NOEXCEPT +{ + return (x >= 0) ? ((y >= 0) ? (x / y) : -(x / -y)) + : ((y >= 0) ? -(-x / y) : (-x / -y)); +} + +IMATH_HOSTDEVICE constexpr inline int +mods (int x, int y) IMATH_NOEXCEPT +{ + return (x >= 0) ? ((y >= 0) ? (x % y) : (x % -y)) + : ((y >= 0) ? -(-x % y) : -(-x % -y)); +} + +// +// Integer division and remainder where the +// remainder of x/y is always positive: +// +// divp(x,y) == floor (double(x) / double (y)) +// modp(x,y) == x - y * divp(x,y) +// + +IMATH_HOSTDEVICE constexpr inline int +divp (int x, int y) IMATH_NOEXCEPT +{ + return (x >= 0) ? ((y >= 0) ? (x / y) : -(x / -y)) + : ((y >= 0) ? -((y - 1 - x) / y) : ((-y - 1 - x) / -y)); +} + +IMATH_HOSTDEVICE constexpr inline int +modp (int x, int y) IMATH_NOEXCEPT +{ + return x - y * divp (x, y); +} + +//---------------------------------------------------------- +// Successor and predecessor for floating-point numbers: +// +// succf(f) returns float(f+e), where e is the smallest +// positive number such that float(f+e) != f. +// +// predf(f) returns float(f-e), where e is the smallest +// positive number such that float(f-e) != f. +// +// succd(d) returns double(d+e), where e is the smallest +// positive number such that double(d+e) != d. +// +// predd(d) returns double(d-e), where e is the smallest +// positive number such that double(d-e) != d. +// +// Exceptions: If the input value is an infinity or a nan, +// succf(), predf(), succd(), and predd() all +// return the input value without changing it. +// +//---------------------------------------------------------- + +IMATH_EXPORT float succf (float f) IMATH_NOEXCEPT; +IMATH_EXPORT float predf (float f) IMATH_NOEXCEPT; + +IMATH_EXPORT double succd (double d) IMATH_NOEXCEPT; +IMATH_EXPORT double predd (double d) IMATH_NOEXCEPT; + +// +// Return true if the number is not a NaN or Infinity. +// + +IMATH_HOSTDEVICE inline bool +finitef (float f) IMATH_NOEXCEPT +{ + union + { + float f; + int i; + } u; + u.f = f; + + return (u.i & 0x7f800000) != 0x7f800000; +} + +IMATH_HOSTDEVICE inline bool +finited (double d) IMATH_NOEXCEPT +{ + union + { + double d; + uint64_t i; + } u; + u.d = d; + + return (u.i & 0x7ff0000000000000LL) != 0x7ff0000000000000LL; +} + +IMATH_INTERNAL_NAMESPACE_HEADER_EXIT + +#endif // INCLUDED_IMATHFUN_H diff --git a/third_party/tlRender-install-Release/include/Imath/ImathGL.h b/third_party/tlRender-install-Release/include/Imath/ImathGL.h new file mode 100644 index 00000000..90884f2a --- /dev/null +++ b/third_party/tlRender-install-Release/include/Imath/ImathGL.h @@ -0,0 +1,178 @@ +// +// SPDX-License-Identifier: BSD-3-Clause +// Copyright Contributors to the OpenEXR Project. +// + +// +// Convenience functions that call GL with Imath types +// + +#ifndef INCLUDED_IMATHGL_H +#define INCLUDED_IMATHGL_H + +#include + +#include "ImathFun.h" +#include "ImathMatrix.h" +#include "ImathNamespace.h" +#include "ImathVec.h" + +/// Call glVertex3f +inline void +glVertex (const IMATH_INTERNAL_NAMESPACE::V3f& v) +{ + glVertex3f (v.x, v.y, v.z); +} + +/// Call glVertex2f +inline void +glVertex (const IMATH_INTERNAL_NAMESPACE::V2f& v) +{ + glVertex2f (v.x, v.y); +} + +/// Call glNormal3f +inline void +glNormal (const IMATH_INTERNAL_NAMESPACE::V3f& n) +{ + glNormal3f (n.x, n.y, n.z); +} + +/// Call glColor3f +inline void +glColor (const IMATH_INTERNAL_NAMESPACE::V3f& c) +{ + glColor3f (c.x, c.y, c.z); +} + +/// Call glTranslatef +inline void +glTranslate (const IMATH_INTERNAL_NAMESPACE::V3f& t) +{ + glTranslatef (t.x, t.y, t.z); +} + +/// Call glTexCoord2f +inline void +glTexCoord (const IMATH_INTERNAL_NAMESPACE::V2f& t) +{ + glTexCoord2f (t.x, t.y); +} + +/// Disable GL textures +inline void +glDisableTexture () +{ + glActiveTexture (GL_TEXTURE1); + glBindTexture (GL_TEXTURE_2D, 0); + glDisable (GL_TEXTURE_2D); + + glActiveTexture (GL_TEXTURE0); +} + +namespace +{ + +const float GL_FLOAT_MAX = 1.8e+19; // sqrt (FLT_MAX) + +inline bool +badFloat (float f) +{ + return !IMATH_INTERNAL_NAMESPACE::finitef (f) || f < -GL_FLOAT_MAX || + f > GL_FLOAT_MAX; +} + +} // namespace + +/// Throw an exception if m is not a valid matrix for GL +inline void +throwBadMatrix (const IMATH_INTERNAL_NAMESPACE::M44f& m) +{ + if (badFloat (m[0][0]) || badFloat (m[0][1]) || badFloat (m[0][2]) || + badFloat (m[0][3]) || badFloat (m[1][0]) || badFloat (m[1][1]) || + badFloat (m[1][2]) || badFloat (m[1][3]) || badFloat (m[2][0]) || + badFloat (m[2][1]) || badFloat (m[2][2]) || badFloat (m[2][3]) || + badFloat (m[3][0]) || badFloat (m[3][1]) || badFloat (m[3][2]) || + badFloat (m[3][3])) + throw std::invalid_argument ("GL matrix overflow"); +} + +/// Call glMultmatrixf. Throw an exception if m is not a valid matrix for GL. +inline void +glMultMatrix (const IMATH_INTERNAL_NAMESPACE::M44f& m) +{ + throwBadMatrix (m); + glMultMatrixf ((GLfloat*) m[0]); +} + +/// Call glMultmatrixf. Throw an exception if m is not a valid matrix for GL. +inline void +glMultMatrix (const IMATH_INTERNAL_NAMESPACE::M44f* m) +{ + throwBadMatrix (*m); + glMultMatrixf ((GLfloat*) (*m)[0]); +} + +/// Call glLoadmatrixf. Throw an exception if m is not a valid matrix for GL. +inline void +glLoadMatrix (const IMATH_INTERNAL_NAMESPACE::M44f& m) +{ + throwBadMatrix (m); + glLoadMatrixf ((GLfloat*) m[0]); +} + +/// Call glLoadmatrixf. Throw an exception if m is not a valid matrix for GL. +inline void +glLoadMatrix (const IMATH_INTERNAL_NAMESPACE::M44f* m) +{ + throwBadMatrix (*m); + glLoadMatrixf ((GLfloat*) (*m)[0]); +} + +IMATH_INTERNAL_NAMESPACE_HEADER_ENTER + +/// +/// A class object that pushes/pops the GL matrix. This object assists with +/// proper cleanup of the state when exceptions are thrown. +/// + +class GLPushMatrix +{ +public: + GLPushMatrix () { glPushMatrix (); } + ~GLPushMatrix () { glPopMatrix (); } +}; + +/// +/// A class object that pushes/pops the current GL attribute state. This object assists with +/// proper cleanup of the state when exceptions are thrown. +/// + +class GLPushAttrib +{ +public: + /// call glPushAttrib() + GLPushAttrib (GLbitfield mask) { glPushAttrib (mask); } + + /// call glPopAttrib() + ~GLPushAttrib () { glPopAttrib (); } +}; + +/// +/// A class object that wraps glBegin/glEnd. The constructor calls +/// glBegin(). The destructor calls glEnd(). +/// + +class GLBegin +{ +public: + /// Call glBegin() + GLBegin (GLenum mode) { glBegin (mode); } + + /// Call glEnd() + ~GLBegin () { glEnd (); } +}; + +IMATH_INTERNAL_NAMESPACE_HEADER_EXIT + +#endif diff --git a/third_party/tlRender-install-Release/include/Imath/ImathGLU.h b/third_party/tlRender-install-Release/include/Imath/ImathGLU.h new file mode 100644 index 00000000..396c21d7 --- /dev/null +++ b/third_party/tlRender-install-Release/include/Imath/ImathGLU.h @@ -0,0 +1,37 @@ +// +// SPDX-License-Identifier: BSD-3-Clause +// Copyright Contributors to the OpenEXR Project. +// + +// +// Convenience functions that call GLU with Imath types +// + +#ifndef INCLUDED_IMATHGLU_H +#define INCLUDED_IMATHGLU_H + +#include +#include + +#include "ImathVec.h" + +/// Call gluLookAt with the given position, interest, and up-vector. +inline void +gluLookAt ( + const IMATH_INTERNAL_NAMESPACE::V3f& pos, + const IMATH_INTERNAL_NAMESPACE::V3f& interest, + const IMATH_INTERNAL_NAMESPACE::V3f& up) +{ + gluLookAt ( + pos.x, + pos.y, + pos.z, + interest.x, + interest.y, + interest.z, + up.x, + up.y, + up.z); +} + +#endif diff --git a/third_party/tlRender-install-Release/include/Imath/ImathInt64.h b/third_party/tlRender-install-Release/include/Imath/ImathInt64.h new file mode 100644 index 00000000..fd123eae --- /dev/null +++ b/third_party/tlRender-install-Release/include/Imath/ImathInt64.h @@ -0,0 +1,45 @@ +// +// SPDX-License-Identifier: BSD-3-Clause +// Copyright Contributors to the OpenEXR Project. +// + +// +// 64-bit integer types +// +// Deprecated, use int64_t/uint64_t instead. +// + +#ifndef INCLUDED_IMATH_INT64_H +#define INCLUDED_IMATH_INT64_H + +#include "ImathNamespace.h" +#include + +IMATH_INTERNAL_NAMESPACE_HEADER_ENTER + +#if (defined _WIN32 || defined _WIN64) && _MSC_VER >= 1300 +/// Int64 - unsigned 64-bit integer +IMATH_DEPRECATED ("use uint64_t") +typedef unsigned __int64 Int64; +/// SInt64 - signed 64-bit integer +IMATH_DEPRECATED ("use sint64_t") +typedef __int64 SInt64; +#elif ULONG_MAX == 18446744073709551615LU +/// Int64 - unsigned 64-bit integer +IMATH_DEPRECATED ("use uint64_t") +typedef long unsigned int Int64; +/// SInt64 - signed 64-bit integer +IMATH_DEPRECATED ("use sint64_t") +typedef long int SInt64; +#else +/// Int64 - unsigned 64-bit integer +IMATH_DEPRECATED ("use uint64_t") +typedef long long unsigned int Int64; +/// SInt64 - signed 64-bit integer +IMATH_DEPRECATED ("use sint64_t") +typedef long long int SInt64; +#endif + +IMATH_INTERNAL_NAMESPACE_HEADER_EXIT + +#endif // INCLUDED_IMATH_INT64_H diff --git a/third_party/tlRender-install-Release/include/Imath/ImathInterval.h b/third_party/tlRender-install-Release/include/Imath/ImathInterval.h new file mode 100644 index 00000000..0e139621 --- /dev/null +++ b/third_party/tlRender-install-Release/include/Imath/ImathInterval.h @@ -0,0 +1,270 @@ +// +// SPDX-License-Identifier: BSD-3-Clause +// Copyright Contributors to the OpenEXR Project. +// + +// +// An interval class +// + +#ifndef INCLUDED_IMATHINTERVAL_H +#define INCLUDED_IMATHINTERVAL_H + +#include "ImathExport.h" +#include "ImathNamespace.h" + +#include "ImathVec.h" + +IMATH_INTERNAL_NAMESPACE_HEADER_ENTER + +/// +/// An Interval has a min and a max and some miscellaneous +/// functions. It is basically a Box that allows T to be a scalar. +/// + +template class IMATH_EXPORT_TEMPLATE_TYPE Interval +{ +public: + /// @{ + /// @name Direct access to bounds + + /// The minimum value of the interval + T min; + + /// The minimum value of the interval + T max; + + /// @} + + /// @{ + /// @name Constructors + + /// Initialize to the empty interval + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 Interval () IMATH_NOEXCEPT; + + /// Intitialize to a single point + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 Interval (const T& point) IMATH_NOEXCEPT; + + /// Intitialize to a given (min,max) + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 Interval (const T& minT, const T& maxT) + IMATH_NOEXCEPT; + + /// @} + + /// @{ + /// @name Comparison + + /// Equality + IMATH_HOSTDEVICE constexpr bool + operator== (const Interval& src) const IMATH_NOEXCEPT; + /// Inequality + IMATH_HOSTDEVICE constexpr bool + operator!= (const Interval& src) const IMATH_NOEXCEPT; + + /// @} + + /// @{ + /// @name Manipulation + + /// Set the interval to be empty. An interval is empty if the + /// minimum is greater than the maximum. + IMATH_HOSTDEVICE void makeEmpty () IMATH_NOEXCEPT; + + /// Extend the interval to include the given point. + IMATH_HOSTDEVICE void extendBy (const T& point) IMATH_NOEXCEPT; + + /// Extend the interval to include the given interval + IMATH_HOSTDEVICE void extendBy (const Interval& interval) IMATH_NOEXCEPT; + + /// Make the interval include the entire range of the base type. + IMATH_HOSTDEVICE void makeInfinite () IMATH_NOEXCEPT; + + /// @} + + /// @{ + /// @name Query + + /// Return the size of the interval. The size is (max-min). An empty box has a size of 0. + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 T size () const IMATH_NOEXCEPT; + + /// Return the center of the interval. The center is defined as + /// (max+min)/2. The center of an empty interval is undefined. + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 T center () const IMATH_NOEXCEPT; + + /// Return true if the given point is inside the interval, false otherwise. + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 bool + intersects (const T& point) const IMATH_NOEXCEPT; + + /// Return true if the given interval is inside the interval, false otherwise. + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 bool + intersects (const Interval& interval) const IMATH_NOEXCEPT; + + /// Return true if the interval is empty, false otherwise. An + /// empty interval's minimum is greater than its maximum. + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 bool isEmpty () const IMATH_NOEXCEPT; + + /// Return true if the interval is larger than a single point, + /// false otherwise. + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 bool hasVolume () const IMATH_NOEXCEPT; + + /// Return true if the interval contains all points, false + /// otherwise. An infinite box has a mimimum of std::numeric_limits::lowest() + /// and a maximum of std::numeric_limits::max() + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 bool isInfinite () const IMATH_NOEXCEPT; + + /// @} +}; + +/// Stream output, as "(min max)" +template +std::ostream& operator<< (std::ostream& s, const Interval& v); + +/// Interval of type float +typedef Interval Intervalf; + +/// Interval of type double +typedef Interval Intervald; + +/// Interval of type short +typedef Interval Intervals; + +/// Interval of type integer +typedef Interval Intervali; + +template +IMATH_HOSTDEVICE inline IMATH_CONSTEXPR14 +Interval::Interval () IMATH_NOEXCEPT +{ + makeEmpty (); +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline Interval::Interval (const T& point) + IMATH_NOEXCEPT +{ + min = point; + max = point; +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline Interval::Interval ( + const T& minV, const T& maxV) IMATH_NOEXCEPT +{ + min = minV; + max = maxV; +} + +template +IMATH_HOSTDEVICE constexpr inline bool +Interval::operator== (const Interval& src) const IMATH_NOEXCEPT +{ + return (min == src.min && max == src.max); +} + +template +IMATH_HOSTDEVICE constexpr inline bool +Interval::operator!= (const Interval& src) const IMATH_NOEXCEPT +{ + return (min != src.min || max != src.max); +} + +template +IMATH_HOSTDEVICE inline void +Interval::makeEmpty () IMATH_NOEXCEPT +{ + min = std::numeric_limits::max (); + max = std::numeric_limits::lowest (); +} + +template +IMATH_HOSTDEVICE inline void +Interval::makeInfinite () IMATH_NOEXCEPT +{ + min = std::numeric_limits::lowest (); + max = std::numeric_limits::max (); +} + +template +IMATH_HOSTDEVICE inline void +Interval::extendBy (const T& point) IMATH_NOEXCEPT +{ + if (point < min) min = point; + + if (point > max) max = point; +} + +template +IMATH_HOSTDEVICE inline void +Interval::extendBy (const Interval& interval) IMATH_NOEXCEPT +{ + if (interval.min < min) min = interval.min; + + if (interval.max > max) max = interval.max; +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline bool +Interval::intersects (const T& point) const IMATH_NOEXCEPT +{ + return point >= min && point <= max; +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline bool +Interval::intersects (const Interval& interval) const IMATH_NOEXCEPT +{ + return interval.max >= min && interval.min <= max; +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline T +Interval::size () const IMATH_NOEXCEPT +{ + if (isEmpty ()) return T (0); + + return max - min; +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline T +Interval::center () const IMATH_NOEXCEPT +{ + return (max + min) / 2; +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline bool +Interval::isEmpty () const IMATH_NOEXCEPT +{ + return max < min; +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline bool +Interval::hasVolume () const IMATH_NOEXCEPT +{ + return max > min; +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline bool +Interval::isInfinite () const IMATH_NOEXCEPT +{ + if (min != std::numeric_limits::lowest () || + max != std::numeric_limits::max ()) + return false; + + return true; +} + +/// Stream output +template +std::ostream& +operator<< (std::ostream& s, const Interval& v) +{ + return s << '(' << v.min << ' ' << v.max << ')'; +} + +IMATH_INTERNAL_NAMESPACE_HEADER_EXIT + +#endif // INCLUDED_IMATHINTERVAL_H diff --git a/third_party/tlRender-install-Release/include/Imath/ImathLine.h b/third_party/tlRender-install-Release/include/Imath/ImathLine.h new file mode 100644 index 00000000..1b99cee5 --- /dev/null +++ b/third_party/tlRender-install-Release/include/Imath/ImathLine.h @@ -0,0 +1,185 @@ +// +// SPDX-License-Identifier: BSD-3-Clause +// Copyright Contributors to the OpenEXR Project. +// + +// +// A 3D line class template +// + +#ifndef INCLUDED_IMATHLINE_H +#define INCLUDED_IMATHLINE_H + +#include "ImathMatrix.h" +#include "ImathNamespace.h" +#include "ImathVec.h" + +IMATH_INTERNAL_NAMESPACE_HEADER_ENTER + +/// +/// The `Line3` class represents a 3D line, defined by a point and a +/// direction vector. +/// + +template class Line3 +{ +public: + /// @{ + /// @name Direct access to member fields + + /// A point on the line + Vec3 pos; + + /// The direction of the line + Vec3 dir; + + /// @} + + /// @{ + /// @name Constructors + + /// Uninitialized by default + IMATH_HOSTDEVICE constexpr Line3 () IMATH_NOEXCEPT {} + + /// Initialize with two points. The direction is the difference + /// between the points. + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 + Line3 (const Vec3& point1, const Vec3& point2) IMATH_NOEXCEPT; + + /// @} + + /// @{ + /// @name Manipulation + + /// Set the line defined by two points. The direction is the difference + /// between the points. + IMATH_HOSTDEVICE void + set (const Vec3& point1, const Vec3& point2) IMATH_NOEXCEPT; + + /// @} + + /// @{ + /// @name Utility Methods + + /// Return the point on the line at the given parameter value, + /// e.g. L(t) + IMATH_HOSTDEVICE constexpr Vec3 + operator() (T parameter) const IMATH_NOEXCEPT; + + /// Return the distance to the given point + IMATH_HOSTDEVICE constexpr T + distanceTo (const Vec3& point) const IMATH_NOEXCEPT; + /// Return the distance to the given line + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 T + distanceTo (const Line3& line) const IMATH_NOEXCEPT; + + /// Return the point on the line closest to the given point + IMATH_HOSTDEVICE constexpr Vec3 + closestPointTo (const Vec3& point) const IMATH_NOEXCEPT; + + /// Return the point on the line closest to the given line + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 Vec3 + closestPointTo (const Line3& line) const IMATH_NOEXCEPT; + + /// @} + + typedef T BaseType; + typedef T value_type; +}; + +/// Line of type float +typedef Line3 Line3f; + +/// Line of type double +typedef Line3 Line3d; + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline Line3::Line3 ( + const Vec3& p0, const Vec3& p1) IMATH_NOEXCEPT +{ + set (p0, p1); +} + +template +IMATH_HOSTDEVICE inline void +Line3::set (const Vec3& p0, const Vec3& p1) IMATH_NOEXCEPT +{ + pos = p0; + dir = p1 - p0; + dir.normalize (); +} + +template +IMATH_HOSTDEVICE constexpr inline Vec3 +Line3::operator() (T parameter) const IMATH_NOEXCEPT +{ + return pos + dir * parameter; +} + +template +IMATH_HOSTDEVICE constexpr inline T +Line3::distanceTo (const Vec3& point) const IMATH_NOEXCEPT +{ + return (closestPointTo (point) - point).length (); +} + +template +IMATH_HOSTDEVICE constexpr inline Vec3 +Line3::closestPointTo (const Vec3& point) const IMATH_NOEXCEPT +{ + return ((point - pos) ^ dir) * dir + pos; +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline T +Line3::distanceTo (const Line3& line) const IMATH_NOEXCEPT +{ + T d = (dir % line.dir) ^ (line.pos - pos); + return (d >= 0) ? d : -d; +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline Vec3 +Line3::closestPointTo (const Line3& line) const IMATH_NOEXCEPT +{ + // Assumes the lines are normalized + + Vec3 posLpos = pos - line.pos; + T c = dir ^ posLpos; + T a = line.dir ^ dir; + T f = line.dir ^ posLpos; + T num = c - a * f; + + T denom = a * a - 1; + + T absDenom = ((denom >= 0) ? denom : -denom); + + if (absDenom < 1) + { + T absNum = ((num >= 0) ? num : -num); + + if (absNum >= absDenom * std::numeric_limits::max ()) return pos; + } + + return pos + dir * (num / denom); +} + +/// Stream output, as "(pos dir)" +template +std::ostream& +operator<< (std::ostream& o, const Line3& line) +{ + return o << "(" << line.pos << ", " << line.dir << ")"; +} + +/// Transform a line by a matrix +template +IMATH_HOSTDEVICE constexpr inline Line3 +operator* (const Line3& line, const Matrix44& M) IMATH_NOEXCEPT +{ + return Line3 (line.pos * M, (line.pos + line.dir) * M); +} + +IMATH_INTERNAL_NAMESPACE_HEADER_EXIT + +#endif // INCLUDED_IMATHLINE_H diff --git a/third_party/tlRender-install-Release/include/Imath/ImathLineAlgo.h b/third_party/tlRender-install-Release/include/Imath/ImathLineAlgo.h new file mode 100644 index 00000000..a5e6add3 --- /dev/null +++ b/third_party/tlRender-install-Release/include/Imath/ImathLineAlgo.h @@ -0,0 +1,224 @@ +// +// SPDX-License-Identifier: BSD-3-Clause +// Copyright Contributors to the OpenEXR Project. +// + +// +// Algorithms applied to or in conjunction with Imath::Line class +// + +#ifndef INCLUDED_IMATHLINEALGO_H +#define INCLUDED_IMATHLINEALGO_H + +#include "ImathFun.h" +#include "ImathLine.h" +#include "ImathNamespace.h" +#include "ImathVecAlgo.h" + +IMATH_INTERNAL_NAMESPACE_HEADER_ENTER + +/// +/// Compute point1 and point2 such that point1 is on line1, point2 +/// is on line2 and the distance between point1 and point2 is minimal. +/// +/// This function returns true if point1 and point2 can be computed, +/// or false if line1 and line2 are parallel or nearly parallel. +/// This function assumes that line1.dir and line2.dir are normalized. +/// + +template +IMATH_CONSTEXPR14 bool +closestPoints ( + const Line3& line1, + const Line3& line2, + Vec3& point1, + Vec3& point2) IMATH_NOEXCEPT +{ + Vec3 w = line1.pos - line2.pos; + T d1w = line1.dir ^ w; + T d2w = line2.dir ^ w; + T d1d2 = line1.dir ^ line2.dir; + T n1 = d1d2 * d2w - d1w; + T n2 = d2w - d1d2 * d1w; + T d = 1 - d1d2 * d1d2; + T absD = abs (d); + + if ((absD > 1) || (abs (n1) < std::numeric_limits::max () * absD && + abs (n2) < std::numeric_limits::max () * absD)) + { + point1 = line1 (n1 / d); + point2 = line2 (n2 / d); + return true; + } + else + { + return false; + } +} + +/// +/// Given a line and a triangle (v0, v1, v2), the intersect() function +/// finds the intersection of the line and the plane that contains the +/// triangle. +/// +/// If the intersection point cannot be computed, either because the +/// line and the triangle's plane are nearly parallel or because the +/// triangle's area is very small, intersect() returns false. +/// +/// If the intersection point is outside the triangle, intersect +/// returns false. +/// +/// If the intersection point, pt, is inside the triangle, intersect() +/// computes a front-facing flag and the barycentric coordinates of +/// the intersection point, and returns true. +/// +/// The front-facing flag is true if the dot product of the triangle's +/// normal, (v2-v1)%(v1-v0), and the line's direction is negative. +/// +/// The barycentric coordinates have the following property: +/// +/// pt = v0 * barycentric.x + v1 * barycentric.y + v2 * barycentric.z +/// + +template +IMATH_CONSTEXPR14 bool +intersect ( + const Line3& line, + const Vec3& v0, + const Vec3& v1, + const Vec3& v2, + Vec3& pt, + Vec3& barycentric, + bool& front) IMATH_NOEXCEPT +{ + Vec3 edge0 = v1 - v0; + Vec3 edge1 = v2 - v1; + Vec3 normal = edge1 % edge0; + + T l = normal.length (); + + if (l != 0) + normal /= l; + else + return false; // zero-area triangle + + // + // d is the distance of line.pos from the plane that contains the triangle. + // The intersection point is at line.pos + (d/nd) * line.dir. + // + + T d = normal ^ (v0 - line.pos); + T nd = normal ^ line.dir; + + if (abs (nd) > 1 || abs (d) < std::numeric_limits::max () * abs (nd)) + pt = line (d / nd); + else + return false; // line and plane are nearly parallel + + // + // Compute the barycentric coordinates of the intersection point. + // The intersection is inside the triangle if all three barycentric + // coordinates are between zero and one. + // + + { + Vec3 en = edge0.normalized (); + Vec3 a = pt - v0; + Vec3 b = v2 - v0; + Vec3 c = (a - en * (en ^ a)); + Vec3 d = (b - en * (en ^ b)); + T e = c ^ d; + T f = d ^ d; + + if (e >= 0 && e <= f) + barycentric.z = e / f; + else + return false; // outside + } + + { + Vec3 en = edge1.normalized (); + Vec3 a = pt - v1; + Vec3 b = v0 - v1; + Vec3 c = (a - en * (en ^ a)); + Vec3 d = (b - en * (en ^ b)); + T e = c ^ d; + T f = d ^ d; + + if (e >= 0 && e <= f) + barycentric.x = e / f; + else + return false; // outside + } + + barycentric.y = 1 - barycentric.x - barycentric.z; + + if (barycentric.y < 0) return false; // outside + + front = ((line.dir ^ normal) < 0); + return true; +} + +/// +/// Return the vertex that is closest to the given line. The returned +/// point is either v0, v1, or v2. +/// + +template +IMATH_CONSTEXPR14 Vec3 + closestVertex ( + const Vec3& v0, const Vec3& v1, const Vec3& v2, const Line3& l) + IMATH_NOEXCEPT +{ + Vec3 nearest = v0; + T neardot = (v0 - l.closestPointTo (v0)).length2 (); + + T tmp = (v1 - l.closestPointTo (v1)).length2 (); + + if (tmp < neardot) + { + neardot = tmp; + nearest = v1; + } + + tmp = (v2 - l.closestPointTo (v2)).length2 (); + if (tmp < neardot) + { + neardot = tmp; + nearest = v2; + } + + return nearest; +} + +/// +/// Rotate the point p around the line l by the given angle. +/// + +template +IMATH_CONSTEXPR14 Vec3 +rotatePoint (const Vec3 p, Line3 l, T angle) IMATH_NOEXCEPT +{ + // + // Form a coordinate frame with . The rotation is the in xy + // plane. + // + + Vec3 q = l.closestPointTo (p); + Vec3 x = p - q; + T radius = x.length (); + + x.normalize (); + Vec3 y = (x % l.dir).normalize (); + + T cosangle = std::cos (angle); + T sinangle = std::sin (angle); + + Vec3 r = q + x * radius * cosangle + y * radius * sinangle; + + return r; +} + +IMATH_INTERNAL_NAMESPACE_HEADER_EXIT + +#endif // INCLUDED_IMATHLINEALGO_H diff --git a/third_party/tlRender-install-Release/include/Imath/ImathMath.h b/third_party/tlRender-install-Release/include/Imath/ImathMath.h new file mode 100644 index 00000000..b3d2845a --- /dev/null +++ b/third_party/tlRender-install-Release/include/Imath/ImathMath.h @@ -0,0 +1,171 @@ +// +// SPDX-License-Identifier: BSD-3-Clause +// Copyright Contributors to the OpenEXR Project. +// + +// +// Obsolete functions provided for compatibility, deprecated in favor +// of std:: functions. +// + +#ifndef INCLUDED_IMATHMATH_H +#define INCLUDED_IMATHMATH_H + +#include "ImathNamespace.h" +#include "ImathPlatform.h" +#include +#include + +IMATH_INTERNAL_NAMESPACE_HEADER_ENTER + +//---------------------------------------------------------------------------- +// +// The deprecated Math methods were intended to allow templated access to +// math functions so that they would automatically choose either the double +// (e.g. sin()) or float (e.g., sinf()) version. +// +// Beginning wth C++11, this is unnecessary, as std:: versions of all these +// functions are available and are templated by type. +// +// We keep these old definitions for backward compatibility but encourage +// users to prefer the std:: versions. Some day we may remove these +// deprecated versions. +// +//---------------------------------------------------------------------------- + +/// @cond Doxygen_Suppress +template struct Math +{ + IMATH_DEPRECATED ("use std::math functions") + IMATH_HOSTDEVICE + static T acos (T x) { return std::acos (x); } + + IMATH_DEPRECATED ("use std::math functions") + IMATH_HOSTDEVICE + static T asin (T x) { return std::asin (x); } + + IMATH_DEPRECATED ("use std::math functions") + IMATH_HOSTDEVICE + static T atan (T x) { return std::atan (x); } + + IMATH_DEPRECATED ("use std::math functions") + IMATH_HOSTDEVICE + static T atan2 (T x, T y) { return std::atan2 (x, y); } + + IMATH_DEPRECATED ("use std::math functions") + IMATH_HOSTDEVICE + static T cos (T x) { return std::cos (x); } + + IMATH_DEPRECATED ("use std::math functions") + IMATH_HOSTDEVICE + static T sin (T x) { return std::sin (x); } + + IMATH_DEPRECATED ("use std::math functions") + IMATH_HOSTDEVICE + static T tan (T x) { return std::tan (x); } + + IMATH_DEPRECATED ("use std::math functions") + IMATH_HOSTDEVICE + static T cosh (T x) { return std::cosh (x); } + + IMATH_DEPRECATED ("use std::math functions") + IMATH_HOSTDEVICE + static T sinh (T x) { return std::sinh (x); } + + IMATH_DEPRECATED ("use std::math functions") + IMATH_HOSTDEVICE + static T tanh (T x) { return std::tanh (x); } + + IMATH_DEPRECATED ("use std::math functions") + IMATH_HOSTDEVICE + static T exp (T x) { return std::exp (x); } + + IMATH_DEPRECATED ("use std::math functions") + IMATH_HOSTDEVICE + static T log (T x) { return std::log (x); } + + IMATH_DEPRECATED ("use std::math functions") + IMATH_HOSTDEVICE + static T log10 (T x) { return std::log10 (x); } + + IMATH_DEPRECATED ("use std::math functions") + IMATH_HOSTDEVICE + static T modf (T x, T* iptr) + { + T ival; + T rval (std::modf (T (x), &ival)); + *iptr = ival; + return rval; + } + + IMATH_DEPRECATED ("use std::math functions") + IMATH_HOSTDEVICE + static T pow (T x, T y) { return std::pow (x, y); } + + IMATH_DEPRECATED ("use std::math functions") + IMATH_HOSTDEVICE + static T sqrt (T x) { return std::sqrt (x); } + + IMATH_DEPRECATED ("use std::math functions") + IMATH_HOSTDEVICE + static T ceil (T x) { return std::ceil (x); } + + IMATH_DEPRECATED ("use std::math functions") + IMATH_HOSTDEVICE + static T fabs (T x) { return std::fabs (x); } + + IMATH_DEPRECATED ("use std::math functions") + IMATH_HOSTDEVICE + static T floor (T x) { return std::floor (x); } + + IMATH_DEPRECATED ("use std::math functions") + IMATH_HOSTDEVICE + static T fmod (T x, T y) { return std::fmod (x, y); } + + IMATH_DEPRECATED ("use std::math functions") + IMATH_HOSTDEVICE + static T hypot (T x, T y) { return std::hypot (x, y); } +}; +/// @endcond + +/// Don Hatch's version of sin(x)/x, which is accurate for very small x. +/// Returns 1 for x == 0. +template +IMATH_HOSTDEVICE inline T +sinx_over_x (T x) +{ + if (x * x < std::numeric_limits::epsilon ()) + return T (1); + else + return std::sin (x) / x; +} + +/// Compare two numbers and test if they are "approximately equal": +/// +/// @return Ttrue if x1 is the same as x2 with an absolute error of +/// no more than e: +/// +/// abs (x1 - x2) <= e +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline bool +equalWithAbsError (T x1, T x2, T e) IMATH_NOEXCEPT +{ + return ((x1 > x2) ? x1 - x2 : x2 - x1) <= e; +} + +/// Compare two numbers and test if they are "approximately equal": +/// +/// @return True if x1 is the same as x2 with an relative error of +/// no more than e, +/// +/// abs (x1 - x2) <= e * x1 +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline bool +equalWithRelError (T x1, T x2, T e) IMATH_NOEXCEPT +{ + return ((x1 > x2) ? x1 - x2 : x2 - x1) <= e * ((x1 > 0) ? x1 : -x1); +} + +IMATH_INTERNAL_NAMESPACE_HEADER_EXIT + +#endif // INCLUDED_IMATHMATH_H diff --git a/third_party/tlRender-install-Release/include/Imath/ImathMatrix.h b/third_party/tlRender-install-Release/include/Imath/ImathMatrix.h new file mode 100644 index 00000000..f261ef1d --- /dev/null +++ b/third_party/tlRender-install-Release/include/Imath/ImathMatrix.h @@ -0,0 +1,5221 @@ +// +// SPDX-License-Identifier: BSD-3-Clause +// Copyright Contributors to the OpenEXR Project. +// + +// +// 2x2, 3x3, and 4x4 transformation matrix templates +// + +#ifndef INCLUDED_IMATHMATRIX_H +#define INCLUDED_IMATHMATRIX_H + +#include "ImathExport.h" +#include "ImathNamespace.h" + +#include "ImathFun.h" +#include "ImathPlatform.h" +#include "ImathShear.h" +#include "ImathVec.h" + +#include +#include +#include +#include +#include + +#if (defined _WIN32 || defined _WIN64) && defined _MSC_VER +// suppress exception specification warnings +# pragma warning(disable : 4290) +#endif + +IMATH_INTERNAL_NAMESPACE_HEADER_ENTER + +/// Enum used to indicate uninitialized construction of Matrix22, +/// Matrix33, Matrix44 +enum IMATH_EXPORT_ENUM Uninitialized +{ + UNINITIALIZED +}; + +/// +/// 2x2 transformation matrix +/// + +template class IMATH_EXPORT_TEMPLATE_TYPE Matrix22 +{ +public: + /// @{ + /// @name Direct access to elements + + /// Matrix elements + T x[2][2]; + + /// @} + + /// Row access + IMATH_HOSTDEVICE T* operator[] (int i) IMATH_NOEXCEPT; + + /// Row access + IMATH_HOSTDEVICE const T* operator[] (int i) const IMATH_NOEXCEPT; + + /// @{ + /// @name Constructors and Assignment + + /// Uninitialized + IMATH_HOSTDEVICE Matrix22 (Uninitialized) IMATH_NOEXCEPT {} + + /// Default constructor: initialize to identity + /// + /// 1 0 + /// 0 1 + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 Matrix22 () IMATH_NOEXCEPT; + + /// Initialize to scalar constant: + /// + /// a a + /// a a + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 Matrix22 (T a) IMATH_NOEXCEPT; + + /// Construct from 2x2 array: + /// + /// a[0][0] a[0][1] + /// a[1][0] a[1][1] + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 Matrix22 (const T a[2][2]) IMATH_NOEXCEPT; + /// Construct from given scalar values: + /// + /// a b + /// c d + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 Matrix22 (T a, T b, T c, T d) + IMATH_NOEXCEPT; + + /// Copy constructor + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 Matrix22 (const Matrix22& v) + IMATH_NOEXCEPT; + + /// Construct from Matrix22 of another base type + template + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 explicit Matrix22 (const Matrix22& v) + IMATH_NOEXCEPT; + + /// Assignment + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 const Matrix22& + operator= (const Matrix22& v) IMATH_NOEXCEPT; + + /// Assignment from scalar + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 const Matrix22& + operator= (T a) IMATH_NOEXCEPT; + + /// Destructor + ~Matrix22 () IMATH_NOEXCEPT = default; + + /// @} + +#if IMATH_FOREIGN_VECTOR_INTEROP + /// @{ + /// @name Interoperability with other matrix types + /// + /// Construction and assignment are allowed from other classes that + /// appear to be equivalent matrix types, provided that they support + /// double-subscript (i.e., `m[j][i]`) giving the same type as the + /// elements of this matrix, and their total size appears to be the + /// right number of matrix elements. + /// + /// This functionality is disabled for gcc 4.x, which seems to have a + /// compiler bug that results in spurious errors. It can also be + /// disabled by defining IMATH_FOREIGN_VECTOR_INTEROP to be 0 prior to + /// including any Imath header files. + /// + template < + typename M, + IMATH_ENABLE_IF (has_double_subscript::value)> + IMATH_HOSTDEVICE explicit Matrix22 (const M& m) + : Matrix22 (T (m[0][0]), T (m[0][1]), T (m[1][0]), T (m[1][1])) + {} + + template < + typename M, + IMATH_ENABLE_IF (has_double_subscript::value)> + IMATH_HOSTDEVICE const Matrix22& operator= (const M& m) + { + *this = Matrix22 (T (m[0][0]), T (m[0][1]), T (m[1][0]), T (m[1][1])); + return *this; + } + /// @} +#endif + + /// @{ + /// @name Compatibility with Sb + + /// Return a raw pointer to the array of values + IMATH_HOSTDEVICE T* getValue () IMATH_NOEXCEPT; + + /// Return a raw pointer to the array of values + IMATH_HOSTDEVICE const T* getValue () const IMATH_NOEXCEPT; + + /// Return the value in `v` + template + IMATH_HOSTDEVICE void getValue (Matrix22& v) const IMATH_NOEXCEPT; + + /// Set the value + template + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 Matrix22& + setValue (const Matrix22& v) IMATH_NOEXCEPT; + + /// Set the value + template + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 Matrix22& + setTheMatrix (const Matrix22& v) IMATH_NOEXCEPT; + + /// @} + + /// @{ + /// @name Arithmetic and Comparison + + /// Equality + IMATH_HOSTDEVICE constexpr bool + operator== (const Matrix22& v) const IMATH_NOEXCEPT; + + /// Inequality + IMATH_HOSTDEVICE constexpr bool + operator!= (const Matrix22& v) const IMATH_NOEXCEPT; + + /// Compare two matrices and test if they are "approximately equal": + /// @return True if the coefficients of this and `m` are the same + /// with an absolute error of no more than e, i.e., for all i, j: + /// + /// abs (this[i][j] - m[i][j]) <= e + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 bool + equalWithAbsError (const Matrix22& v, T e) const IMATH_NOEXCEPT; + + /// Compare two matrices and test if they are "approximately equal": + /// @return True if the coefficients of this and m are the same with + /// a relative error of no more than e, i.e., for all i, j: + /// + /// abs (this[i] - v[i][j]) <= e * abs (this[i][j]) + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 bool + equalWithRelError (const Matrix22& v, T e) const IMATH_NOEXCEPT; + + /// Component-wise addition + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 const Matrix22& + operator+= (const Matrix22& v) IMATH_NOEXCEPT; + + /// Component-wise addition + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 const Matrix22& + operator+= (T a) IMATH_NOEXCEPT; + + /// Component-wise addition + IMATH_HOSTDEVICE constexpr Matrix22 + operator+ (const Matrix22& v) const IMATH_NOEXCEPT; + + /// Component-wise subtraction + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 const Matrix22& + operator-= (const Matrix22& v) IMATH_NOEXCEPT; + + /// Component-wise subtraction + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 const Matrix22& + operator-= (T a) IMATH_NOEXCEPT; + + /// Component-wise subtraction + IMATH_HOSTDEVICE constexpr Matrix22 + operator- (const Matrix22& v) const IMATH_NOEXCEPT; + + /// Component-wise multiplication by -1 + IMATH_HOSTDEVICE constexpr Matrix22 operator- () const IMATH_NOEXCEPT; + + /// Component-wise multiplication by -1 + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 const Matrix22& negate () IMATH_NOEXCEPT; + + /// Component-wise multiplication + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 const Matrix22& + operator*= (T a) IMATH_NOEXCEPT; + + /// Component-wise multiplication + IMATH_HOSTDEVICE constexpr Matrix22 operator* (T a) const IMATH_NOEXCEPT; + + /// Component-wise division + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 const Matrix22& + operator/= (T a) IMATH_NOEXCEPT; + + /// Component-wise division + IMATH_HOSTDEVICE constexpr Matrix22 operator/ (T a) const IMATH_NOEXCEPT; + + /// Matrix-matrix multiplication + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 const Matrix22& + operator*= (const Matrix22& v) IMATH_NOEXCEPT; + + /// Matrix-matrix multiplication + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 Matrix22 + operator* (const Matrix22& v) const IMATH_NOEXCEPT; + + /// Vector * matrix multiplication + /// @param[in] src Input vector + /// @param[out] dst transformed vector + template + IMATH_HOSTDEVICE void + multDirMatrix (const Vec2& src, Vec2& dst) const IMATH_NOEXCEPT; + + /// @} + + /// @{ + /// @name Maniplation + + /// Set to the identity + IMATH_HOSTDEVICE void makeIdentity () IMATH_NOEXCEPT; + + /// Transpose + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 const Matrix22& + transpose () IMATH_NOEXCEPT; + + /// Return the transpose + IMATH_HOSTDEVICE constexpr Matrix22 transposed () const IMATH_NOEXCEPT; + + /// Invert in place + /// @param singExc If true, throw an exception if the matrix cannot be inverted. + /// @return const reference to this + IMATH_CONSTEXPR14 const Matrix22& invert (bool singExc); + + /// Invert in place + /// @return const reference to this + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 const Matrix22& invert () IMATH_NOEXCEPT; + + /// Return the inverse, leaving this unmodified. + /// @param singExc If true, throw an exception if the matrix cannot be inverted. + IMATH_CONSTEXPR14 Matrix22 inverse (bool singExc) const; + + /// Return the inverse, leaving this unmodified. + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 Matrix22 + inverse () const IMATH_NOEXCEPT; + + /// Determinant + IMATH_HOSTDEVICE constexpr T determinant () const IMATH_NOEXCEPT; + + /// Trace + IMATH_HOSTDEVICE constexpr T trace() const IMATH_NOEXCEPT; + + /// Set matrix to rotation by r (in radians) + /// @return const referenced to this + template + IMATH_HOSTDEVICE const Matrix22& setRotation (S r) IMATH_NOEXCEPT; + + /// Rotate the given matrix by r (in radians) + /// @return const referenced to this + template + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 const Matrix22& + rotate (S r) IMATH_NOEXCEPT; + + /// Set matrix to scale by given uniform factor + /// @return const referenced to this + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 const Matrix22& + setScale (T s) IMATH_NOEXCEPT; + + /// Set matrix to scale by given vector + /// @return const referenced to this + template + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 const Matrix22& + setScale (const Vec2& s) IMATH_NOEXCEPT; + + // Scale the matrix by s + /// @return const referenced to this + template + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 const Matrix22& + scale (const Vec2& s) IMATH_NOEXCEPT; + + /// @} + + /// @{ + /// @name Numeric Limits + + /// Largest possible negative value + IMATH_HOSTDEVICE constexpr static T baseTypeLowest () IMATH_NOEXCEPT + { + return std::numeric_limits::lowest (); + } + + /// Largest possible positive value + IMATH_HOSTDEVICE constexpr static T baseTypeMax () IMATH_NOEXCEPT + { + return std::numeric_limits::max (); + } + + /// Smallest possible positive value + IMATH_HOSTDEVICE constexpr static T baseTypeSmallest () IMATH_NOEXCEPT + { + return std::numeric_limits::min (); + } + + /// Smallest possible e for which 1+e != 1 + IMATH_HOSTDEVICE constexpr static T baseTypeEpsilon () IMATH_NOEXCEPT + { + return std::numeric_limits::epsilon (); + } + + /// @} + + /// Return the number of the row and column dimensions, i.e. 2. + IMATH_HOSTDEVICE constexpr static unsigned int dimensions () IMATH_NOEXCEPT + { + return 2; + } + + /// The base type: In templates that accept a parameter `V`, you + /// can refer to `T` as `V::BaseType` + typedef T BaseType; + + /// The base vector type + typedef Vec2 BaseVecType; +}; + +/// +/// 3x3 transformation matrix +/// + +template class IMATH_EXPORT_TEMPLATE_TYPE Matrix33 +{ +public: + /// @{ + /// @name Direct access to elements + + /// Matrix elements + T x[3][3]; + + /// @} + + /// Row access + IMATH_HOSTDEVICE T* operator[] (int i) IMATH_NOEXCEPT; + + /// Row access + IMATH_HOSTDEVICE const T* operator[] (int i) const IMATH_NOEXCEPT; + + /// @{ + /// @name Constructors and Assignment + + /// Uninitialized + IMATH_HOSTDEVICE Matrix33 (Uninitialized) IMATH_NOEXCEPT {} + + /// Default constructor: initialize to identity + /// 1 0 0 + /// 0 1 0 + /// 0 0 1 + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 Matrix33 () IMATH_NOEXCEPT; + + /// Initialize to scalar constant + /// a a a + /// a a a + /// a a a + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 Matrix33 (T a) IMATH_NOEXCEPT; + + /// Construct from 3x3 array + /// a[0][0] a[0][1] a[0][2] + /// a[1][0] a[1][1] a[1][2] + /// a[2][0] a[2][1] a[2][2] + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 Matrix33 (const T a[3][3]) IMATH_NOEXCEPT; + /// Construct from given scalar values + /// a b c + /// d e f + /// g h i + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 + Matrix33 (T a, T b, T c, T d, T e, T f, T g, T h, T i) IMATH_NOEXCEPT; + + /// Copy constructor + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 Matrix33 (const Matrix33& v) + IMATH_NOEXCEPT; + + /// Construct from Matrix33 of another base type + template + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 explicit Matrix33 (const Matrix33& v) + IMATH_NOEXCEPT; + + /// Assignment operator + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 const Matrix33& + operator= (const Matrix33& v) IMATH_NOEXCEPT; + + /// Assignment from scalar + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 const Matrix33& + operator= (T a) IMATH_NOEXCEPT; + + /// Destructor + ~Matrix33 () IMATH_NOEXCEPT = default; + + /// @} + +#if IMATH_FOREIGN_VECTOR_INTEROP + /// @{ + /// @name Interoperability with other matrix types + /// + /// Construction and assignment are allowed from other classes that + /// appear to be equivalent matrix types, provided that they support + /// double-subscript (i.e., `m[j][i]`) giving the same type as the + /// elements of this matrix, and their total size appears to be the + /// right number of matrix elements. + /// + /// This functionality is disabled for gcc 4.x, which seems to have a + /// compiler bug that results in spurious errors. It can also be + /// disabled by defining IMATH_FOREIGN_VECTOR_INTEROP to be 0 prior to + /// including any Imath header files. + /// + template < + typename M, + IMATH_ENABLE_IF (has_double_subscript::value)> + IMATH_HOSTDEVICE explicit Matrix33 (const M& m) + : Matrix33 ( + T (m[0][0]), + T (m[0][1]), + T (m[0][2]), + T (m[1][0]), + T (m[1][1]), + T (m[1][2]), + T (m[2][0]), + T (m[2][1]), + T (m[2][2])) + {} + + /// Interoperability assignment from another type that behaves as if it + /// were an equivalent matrix. + template < + typename M, + IMATH_ENABLE_IF (has_double_subscript::value)> + IMATH_HOSTDEVICE const Matrix33& operator= (const M& m) + { + *this = Matrix33 ( + T (m[0][0]), + T (m[0][1]), + T (m[0][2]), + T (m[1][0]), + T (m[1][1]), + T (m[1][2]), + T (m[2][0]), + T (m[2][1]), + T (m[2][2])); + return *this; + } + /// @} +#endif + + /// @{ + /// @name Compatibility with Sb + + /// Return a raw pointer to the array of values + IMATH_HOSTDEVICE T* getValue () IMATH_NOEXCEPT; + + /// Return a raw pointer to the array of values + IMATH_HOSTDEVICE const T* getValue () const IMATH_NOEXCEPT; + + /// Return the value in `v` + template + IMATH_HOSTDEVICE void getValue (Matrix33& v) const IMATH_NOEXCEPT; + + /// Set the value + template + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 Matrix33& + setValue (const Matrix33& v) IMATH_NOEXCEPT; + + /// Set the value + template + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 Matrix33& + setTheMatrix (const Matrix33& v) IMATH_NOEXCEPT; + + /// @} + + /// @{ + /// @name Arithmetic and Comparison + + /// Equality + IMATH_HOSTDEVICE constexpr bool + operator== (const Matrix33& v) const IMATH_NOEXCEPT; + + /// Inequality + IMATH_HOSTDEVICE constexpr bool + operator!= (const Matrix33& v) const IMATH_NOEXCEPT; + + /// Compare two matrices and test if they are "approximately equal": + /// @return True if the coefficients of this and `m` are the same + /// with an absolute error of no more than e, i.e., for all i, j: + /// + /// abs (this[i][j] - m[i][j]) <= e + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 bool + equalWithAbsError (const Matrix33& v, T e) const IMATH_NOEXCEPT; + + /// Compare two matrices and test if they are "approximately equal": + /// @return True if the coefficients of this and m are the same with + /// a relative error of no more than e, i.e., for all i, j: + /// + /// abs (this[i] - v[i][j]) <= e * abs (this[i][j]) + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 bool + equalWithRelError (const Matrix33& v, T e) const IMATH_NOEXCEPT; + + /// Component-wise addition + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 const Matrix33& + operator+= (const Matrix33& v) IMATH_NOEXCEPT; + + /// Component-wise addition + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 const Matrix33& + operator+= (T a) IMATH_NOEXCEPT; + + /// Component-wise addition + IMATH_HOSTDEVICE constexpr Matrix33 + operator+ (const Matrix33& v) const IMATH_NOEXCEPT; + + /// Component-wise subtraction + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 const Matrix33& + operator-= (const Matrix33& v) IMATH_NOEXCEPT; + + /// Component-wise subtraction + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 const Matrix33& + operator-= (T a) IMATH_NOEXCEPT; + + /// Component-wise subtraction + IMATH_HOSTDEVICE constexpr Matrix33 + operator- (const Matrix33& v) const IMATH_NOEXCEPT; + + /// Component-wise multiplication by -1 + IMATH_HOSTDEVICE constexpr Matrix33 operator- () const IMATH_NOEXCEPT; + + /// Component-wise multiplication by -1 + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 const Matrix33& negate () IMATH_NOEXCEPT; + + /// Component-wise multiplication + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 const Matrix33& + operator*= (T a) IMATH_NOEXCEPT; + + /// Component-wise multiplication + IMATH_HOSTDEVICE constexpr Matrix33 operator* (T a) const IMATH_NOEXCEPT; + + /// Component-wise division + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 const Matrix33& + operator/= (T a) IMATH_NOEXCEPT; + + /// Component-wise division + IMATH_HOSTDEVICE constexpr Matrix33 operator/ (T a) const IMATH_NOEXCEPT; + + /// Matrix-matrix multiplication + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 const Matrix33& + operator*= (const Matrix33& v) IMATH_NOEXCEPT; + + /// Matrix-matrix multiplication + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 Matrix33 + operator* (const Matrix33& v) const IMATH_NOEXCEPT; + + /// Vector-matrix multiplication: a homogeneous transformation + /// by computing Vec3 (src.x, src.y, 1) * m and dividing by the + /// result's third element. + /// @param[in] src The input vector + /// @param[out] dst The output vector + template + IMATH_HOSTDEVICE void + multVecMatrix (const Vec2& src, Vec2& dst) const IMATH_NOEXCEPT; + + /// Vector-matrix multiplication: multiply `src` by the upper left 2x2 + /// submatrix, ignoring the rest of matrix. + /// @param[in] src The input vector + /// @param[out] dst The output vector + template + IMATH_HOSTDEVICE void + multDirMatrix (const Vec2& src, Vec2& dst) const IMATH_NOEXCEPT; + + /// @} + + /// @{ + /// @name Maniplation + + /// Set to the identity matrix + IMATH_HOSTDEVICE void makeIdentity () IMATH_NOEXCEPT; + + /// Transpose + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 const Matrix33& + transpose () IMATH_NOEXCEPT; + + /// Return the transpose + IMATH_HOSTDEVICE constexpr Matrix33 transposed () const IMATH_NOEXCEPT; + + /// Invert in place using the determinant. + /// @param singExc If true, throw an exception if the matrix cannot be inverted. + /// @return const reference to this + IMATH_CONSTEXPR14 const Matrix33& invert (bool singExc); + + /// Invert in place using the determinant. + /// @return const reference to this + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 const Matrix33& invert () IMATH_NOEXCEPT; + + /// Return the inverse using the determinant, leaving this unmodified. + /// @param singExc If true, throw an exception if the matrix cannot be inverted. + IMATH_CONSTEXPR14 Matrix33 inverse (bool singExc) const; + + /// Return the inverse using the determinant, leaving this unmodified. + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 Matrix33 + inverse () const IMATH_NOEXCEPT; + + /// Invert in place using the Gauss-Jordan method. Significantly slower + /// but more accurate than invert(). + /// @param singExc If true, throw an exception if the matrix cannot be inverted. + /// @return const reference to this + const Matrix33& gjInvert (bool singExc); + + /// Invert in place using the Gauss-Jordan method. Significantly slower + /// but more accurate than invert(). + /// @return const reference to this + IMATH_HOSTDEVICE const Matrix33& gjInvert () IMATH_NOEXCEPT; + + /// Return the inverse using the Gauss-Jordan method, leaving this + /// unmodified. Significantly slower but more accurate than inverse(). + Matrix33 gjInverse (bool singExc) const; + + /// Return the inverse using the Gauss-Jordan method. Significantly slower, + /// leaving this unmodified. Slower but more accurate than inverse(). + IMATH_HOSTDEVICE Matrix33 gjInverse () const IMATH_NOEXCEPT; + + /// Calculate the matrix minor of the (r,c) element + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 T + minorOf (const int r, const int c) const IMATH_NOEXCEPT; + + /// Build a minor using the specified rows and columns + IMATH_HOSTDEVICE + constexpr T + fastMinor (const int r0, const int r1, const int c0, const int c1) const + IMATH_NOEXCEPT; + + /// Determinant + IMATH_HOSTDEVICE constexpr T determinant () const IMATH_NOEXCEPT; + + /// Trace + IMATH_HOSTDEVICE constexpr T trace() const IMATH_NOEXCEPT; + + /// Set matrix to rotation by r (in radians, assumed to be a scalar) around (0, 0, 1) + /// @return const referenced to this + template + IMATH_HOSTDEVICE const Matrix33& setRotation (S r) IMATH_NOEXCEPT; + + // Rotate the given matrix by r (in radians) + /// @return const referenced to this + template + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 const Matrix33& + rotate (S r) IMATH_NOEXCEPT; + + /// Set matrix to scale by given uniform factor + /// @return const referenced to this + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 const Matrix33& + setScale (T s) IMATH_NOEXCEPT; + + /// Set matrix to scale by given vector + /// @return const referenced to this + template + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 const Matrix33& + setScale (const Vec2& s) IMATH_NOEXCEPT; + + /// Scale the matrix by s + /// @return const referenced to this + template + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 const Matrix33& + scale (const Vec2& s) IMATH_NOEXCEPT; + + /// Set matrix to translation by given vector + /// @return const referenced to this + template + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 const Matrix33& + setTranslation (const Vec2& t) IMATH_NOEXCEPT; + + /// Return the translation component + IMATH_HOSTDEVICE constexpr Vec2 translation () const IMATH_NOEXCEPT; + + /// Translate the matrix by t + /// @return const referenced to this + template + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 const Matrix33& + translate (const Vec2& t) IMATH_NOEXCEPT; + + /// Set matrix to shear x for each y coord. by given factor xy + /// @return const referenced to this + template + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 const Matrix33& + setShear (const S& h) IMATH_NOEXCEPT; + + /// Set matrix to shear x for each y coord. by given factor h.x + /// and to shear y for each x coord. by given factor h.y + /// @return const referenced to this + template + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 const Matrix33& + setShear (const Vec2& h) IMATH_NOEXCEPT; + + /// Shear the matrix in x for each y coord. by given factor xy + /// @return const referenced to this + template + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 const Matrix33& + shear (const S& xy) IMATH_NOEXCEPT; + + /// Shear the matrix in x for each y coord. by given factor xy + /// and shear y for each x coord. by given factor yx + /// @return const referenced to this + template + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 const Matrix33& + shear (const Vec2& h) IMATH_NOEXCEPT; + + /// @} + + /// @{ + /// @name Numeric Limits + + /// Largest possible negative value + IMATH_HOSTDEVICE constexpr static T baseTypeLowest () IMATH_NOEXCEPT + { + return std::numeric_limits::lowest (); + } + + /// Largest possible positive value + IMATH_HOSTDEVICE constexpr static T baseTypeMax () IMATH_NOEXCEPT + { + return std::numeric_limits::max (); + } + + /// Smallest possible positive value + IMATH_HOSTDEVICE constexpr static T baseTypeSmallest () IMATH_NOEXCEPT + { + return std::numeric_limits::min (); + } + + /// Smallest possible e for which 1+e != 1 + IMATH_HOSTDEVICE constexpr static T baseTypeEpsilon () IMATH_NOEXCEPT + { + return std::numeric_limits::epsilon (); + } + + /// @} + + /// Return the number of the row and column dimensions, i.e. 3. + IMATH_HOSTDEVICE constexpr static unsigned int dimensions () IMATH_NOEXCEPT + { + return 3; + } + + /// The base type: In templates that accept a parameter `V` (could be a Color4), you can refer to `T` as `V::BaseType` + typedef T BaseType; + + /// The base vector type + typedef Vec3 BaseVecType; +}; + +/// +/// 4x4 transformation matrix +/// + +template class IMATH_EXPORT_TEMPLATE_TYPE Matrix44 +{ +public: + using value_type = T; + + /// @{ + /// @name Direct access to elements + + /// Matrix elements + T x[4][4]; + + /// @} + + /// Row access + IMATH_HOSTDEVICE T* operator[] (int i) IMATH_NOEXCEPT; + + /// Row access + IMATH_HOSTDEVICE const T* operator[] (int i) const IMATH_NOEXCEPT; + + /// @{ + /// @name Constructors and Assignment + + /// Uninitialized + IMATH_HOSTDEVICE constexpr Matrix44 (Uninitialized) IMATH_NOEXCEPT {} + + /// Default constructor: initialize to identity + /// 1 0 0 0 + /// 0 1 0 0 + /// 0 0 1 0 + /// 0 0 0 1 + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 Matrix44 () IMATH_NOEXCEPT; + + /// Initialize to scalar constant + /// a a a a + /// a a a a + /// a a a a + /// a a a a + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 Matrix44 (T a) IMATH_NOEXCEPT; + + /// Construct from 4x4 array + /// a[0][0] a[0][1] a[0][2] a[0][3] + /// a[1][0] a[1][1] a[1][2] a[1][3] + /// a[2][0] a[2][1] a[2][2] a[2][3] + /// a[3][0] a[3][1] a[3][2] a[3][3] + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 Matrix44 (const T a[4][4]) IMATH_NOEXCEPT; + /// Construct from given scalar values + /// a b c d + /// e f g h + /// i j k l + /// m n o p + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 Matrix44 ( + T a, + T b, + T c, + T d, + T e, + T f, + T g, + T h, + T i, + T j, + T k, + T l, + T m, + T n, + T o, + T p) IMATH_NOEXCEPT; + + /// Construct from a 3x3 rotation matrix and a translation vector + /// r r r 0 + /// r r r 0 + /// r r r 0 + /// t t t 1 + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 Matrix44 (Matrix33 r, Vec3 t) + IMATH_NOEXCEPT; + + /// Copy constructor + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 Matrix44 (const Matrix44& v) + IMATH_NOEXCEPT; + + /// Construct from Matrix44 of another base type + template + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 explicit Matrix44 (const Matrix44& v) + IMATH_NOEXCEPT; + + /// Assignment operator + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 const Matrix44& + operator= (const Matrix44& v) IMATH_NOEXCEPT; + + /// Assignment from scalar + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 const Matrix44& + operator= (T a) IMATH_NOEXCEPT; + + /// Destructor + ~Matrix44 () IMATH_NOEXCEPT = default; + + /// @} + +#if IMATH_FOREIGN_VECTOR_INTEROP + /// @{ + /// @name Interoperability with other matrix types + /// + /// Construction and assignment are allowed from other classes that + /// appear to be equivalent matrix types, provided that they support + /// double-subscript (i.e., `m[j][i]`) giving the same type as the + /// elements of this matrix, and their total size appears to be the + /// right number of matrix elements. + /// + /// This functionality is disabled for gcc 4.x, which seems to have a + /// compiler bug that results in spurious errors. It can also be + /// disabled by defining IMATH_FOREIGN_VECTOR_INTEROP to be 0 prior to + /// including any Imath header files. + /// + template < + typename M, + IMATH_ENABLE_IF (has_double_subscript::value)> + IMATH_HOSTDEVICE explicit Matrix44 (const M& m) + : Matrix44 ( + T (m[0][0]), + T (m[0][1]), + T (m[0][2]), + T (m[0][3]), + T (m[1][0]), + T (m[1][1]), + T (m[1][2]), + T (m[1][3]), + T (m[2][0]), + T (m[2][1]), + T (m[2][2]), + T (m[2][3]), + T (m[3][0]), + T (m[3][1]), + T (m[3][2]), + T (m[3][3])) + {} + + /// Interoperability assignment from another type that behaves as if it + /// were an equivalent matrix. + template < + typename M, + IMATH_ENABLE_IF (has_double_subscript::value)> + IMATH_HOSTDEVICE const Matrix44& operator= (const M& m) + { + *this = Matrix44 ( + T (m[0][0]), + T (m[0][1]), + T (m[0][2]), + T (m[0][3]), + T (m[1][0]), + T (m[1][1]), + T (m[1][2]), + T (m[1][3]), + T (m[2][0]), + T (m[2][1]), + T (m[2][2]), + T (m[2][3]), + T (m[3][0]), + T (m[3][1]), + T (m[3][2]), + T (m[3][3])); + return *this; + } + /// @} +#endif + + /// @{ + /// @name Compatibility with Sb + + /// Return a raw pointer to the array of values + IMATH_HOSTDEVICE T* getValue () IMATH_NOEXCEPT; + + /// Return a raw pointer to the array of values + IMATH_HOSTDEVICE const T* getValue () const IMATH_NOEXCEPT; + + /// Return the value in `v` + template + IMATH_HOSTDEVICE void getValue (Matrix44& v) const IMATH_NOEXCEPT; + + /// Set the value + template + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 Matrix44& + setValue (const Matrix44& v) IMATH_NOEXCEPT; + + /// Set the value + template + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 Matrix44& + setTheMatrix (const Matrix44& v) IMATH_NOEXCEPT; + + /// @} + + /// @{ + /// @name Arithmetic and Comparison + + /// Equality + IMATH_HOSTDEVICE constexpr bool + operator== (const Matrix44& v) const IMATH_NOEXCEPT; + + /// Inequality + IMATH_HOSTDEVICE constexpr bool + operator!= (const Matrix44& v) const IMATH_NOEXCEPT; + + /// Compare two matrices and test if they are "approximately equal": + /// @return True if the coefficients of this and `m` are the same + /// with an absolute error of no more than e, i.e., for all i, j: + /// + /// abs (this[i][j] - m[i][j]) <= e + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 bool + equalWithAbsError (const Matrix44& v, T e) const IMATH_NOEXCEPT; + + /// Compare two matrices and test if they are "approximately equal": + /// @return True if the coefficients of this and m are the same with + /// a relative error of no more than e, i.e., for all i, j: + /// + /// abs (this[i] - v[i][j]) <= e * abs (this[i][j]) + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 bool + equalWithRelError (const Matrix44& v, T e) const IMATH_NOEXCEPT; + + /// Component-wise addition + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 const Matrix44& + operator+= (const Matrix44& v) IMATH_NOEXCEPT; + + /// Component-wise addition + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 const Matrix44& + operator+= (T a) IMATH_NOEXCEPT; + + /// Component-wise addition + IMATH_HOSTDEVICE constexpr Matrix44 + operator+ (const Matrix44& v) const IMATH_NOEXCEPT; + + /// Component-wise subtraction + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 const Matrix44& + operator-= (const Matrix44& v) IMATH_NOEXCEPT; + + /// Component-wise subtraction + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 const Matrix44& + operator-= (T a) IMATH_NOEXCEPT; + + /// Component-wise subtraction + IMATH_HOSTDEVICE constexpr Matrix44 + operator- (const Matrix44& v) const IMATH_NOEXCEPT; + + /// Component-wise multiplication by -1 + IMATH_HOSTDEVICE constexpr Matrix44 operator- () const IMATH_NOEXCEPT; + + /// Component-wise multiplication by -1 + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 const Matrix44& negate () IMATH_NOEXCEPT; + + /// Component-wise multiplication + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 const Matrix44& + operator*= (T a) IMATH_NOEXCEPT; + + /// Component-wise multiplication + IMATH_HOSTDEVICE constexpr Matrix44 operator* (T a) const IMATH_NOEXCEPT; + + /// Component-wise division + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 const Matrix44& + operator/= (T a) IMATH_NOEXCEPT; + + /// Component-wise division + IMATH_HOSTDEVICE constexpr Matrix44 operator/ (T a) const IMATH_NOEXCEPT; + + /// Matrix-matrix multiplication + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 const Matrix44& + operator*= (const Matrix44& v) IMATH_NOEXCEPT; + + /// Matrix-matrix multiplication + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 Matrix44 + operator* (const Matrix44& v) const IMATH_NOEXCEPT; + + /// Matrix-matrix multiplication: compute c = a * b + IMATH_HOSTDEVICE + static void multiply ( + const Matrix44& a, // assumes that + const Matrix44& b, // &a != &c and + Matrix44& c) IMATH_NOEXCEPT; // &b != &c. + + /// Matrix-matrix multiplication returning a result. + IMATH_HOSTDEVICE + static IMATH_CONSTEXPR14 Matrix44 + multiply (const Matrix44& a, const Matrix44& b) IMATH_NOEXCEPT; + + /// Vector-matrix multiplication: a homogeneous transformation + /// by computing Vec3 (src.x, src.y, src.z, 1) * m and dividing by the + /// result's third element. + /// @param[in] src The input vector + /// @param[out] dst The output vector + template + IMATH_HOSTDEVICE void + multVecMatrix (const Vec3& src, Vec3& dst) const IMATH_NOEXCEPT; + + /// Vector-matrix multiplication: multiply `src` by the upper left 2x2 + /// submatrix, ignoring the rest of matrix. + /// @param[in] src The input vector + /// @param[out] dst The output vector + template + IMATH_HOSTDEVICE void + multDirMatrix (const Vec3& src, Vec3& dst) const IMATH_NOEXCEPT; + + /// @} + + /// @{ + /// @name Maniplation + + /// Set to the identity matrix + IMATH_HOSTDEVICE void makeIdentity () IMATH_NOEXCEPT; + + /// Transpose + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 const Matrix44& + transpose () IMATH_NOEXCEPT; + + /// Return the transpose + IMATH_HOSTDEVICE constexpr Matrix44 transposed () const IMATH_NOEXCEPT; + + /// Invert in place using the determinant. + /// @param singExc If true, throw an exception if the matrix cannot be inverted. + /// @return const reference to this + IMATH_CONSTEXPR14 const Matrix44& invert (bool singExc); + + /// Invert in place using the determinant. + /// @return const reference to this + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 const Matrix44& invert () IMATH_NOEXCEPT; + + /// Return the inverse using the determinant, leaving this unmodified. + /// @param singExc If true, throw an exception if the matrix cannot be inverted. + IMATH_CONSTEXPR14 Matrix44 inverse (bool singExc) const; + + /// Return the inverse using the determinant, leaving this unmodified. + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 Matrix44 + inverse () const IMATH_NOEXCEPT; + + /// Invert in place using the Gauss-Jordan method. Significantly slower + /// but more accurate than invert(). + /// @param singExc If true, throw an exception if the matrix cannot be inverted. + /// @return const reference to this + IMATH_CONSTEXPR14 const Matrix44& gjInvert (bool singExc); + + /// Invert in place using the Gauss-Jordan method. Significantly slower + /// but more accurate than invert(). + /// @return const reference to this + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 const Matrix44& + gjInvert () IMATH_NOEXCEPT; + + /// Return the inverse using the Gauss-Jordan method, leaving this + /// unmodified. Significantly slower but more accurate than inverse(). + Matrix44 gjInverse (bool singExc) const; + + /// Return the inverse using the Gauss-Jordan method, leaving this + /// unmodified Significantly slower but more accurate than inverse(). + IMATH_HOSTDEVICE Matrix44 gjInverse () const IMATH_NOEXCEPT; + + /// Calculate the matrix minor of the (r,c) element + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 T + minorOf (const int r, const int c) const IMATH_NOEXCEPT; + + /// Build a minor using the specified rows and columns + IMATH_HOSTDEVICE + constexpr T fastMinor ( + const int r0, + const int r1, + const int r2, + const int c0, + const int c1, + const int c2) const IMATH_NOEXCEPT; + + /// Determinant + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 T determinant () const IMATH_NOEXCEPT; + + /// Trace + IMATH_HOSTDEVICE constexpr T trace() const IMATH_NOEXCEPT; + + /// Set matrix to rotation by XYZ euler angles (in radians) + /// @return const referenced to this + template + IMATH_HOSTDEVICE const Matrix44& + setEulerAngles (const Vec3& r) IMATH_NOEXCEPT; + + /// Set matrix to rotation around given axis by given angle (in radians) + /// @return const referenced to this + template + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 const Matrix44& + setAxisAngle (const Vec3& ax, S ang) IMATH_NOEXCEPT; + + /// Rotate the matrix by XYZ euler angles in r (in radians) + /// @return const referenced to this + template + IMATH_HOSTDEVICE const Matrix44& rotate (const Vec3& r) IMATH_NOEXCEPT; + + /// Set matrix to scale by given uniform factor + /// @return const referenced to this + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 const Matrix44& + setScale (T s) IMATH_NOEXCEPT; + + /// Set matrix to scale by given vector + /// @return const referenced to this + template + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 const Matrix44& + setScale (const Vec3& s) IMATH_NOEXCEPT; + + /// Scale the matrix by s + /// @return const referenced to this + template + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 const Matrix44& + scale (const Vec3& s) IMATH_NOEXCEPT; + + /// Set matrix to translation by given vector + /// @return const referenced to this + template + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 const Matrix44& + setTranslation (const Vec3& t) IMATH_NOEXCEPT; + + /// Return translation component + IMATH_HOSTDEVICE constexpr const Vec3 + translation () const IMATH_NOEXCEPT; + + /// Translate the matrix by t + /// @return const referenced to this + template + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 const Matrix44& + translate (const Vec3& t) IMATH_NOEXCEPT; + + /// Set matrix to shear by given vector h. The resulting matrix + /// - will shear x for each y coord. by a factor of h[0] ; + /// - will shear x for each z coord. by a factor of h[1] ; + /// - will shear y for each z coord. by a factor of h[2] . + /// @return const referenced to this + template + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 const Matrix44& + setShear (const Vec3& h) IMATH_NOEXCEPT; + + /// Set matrix to shear by given factors. The resulting matrix + /// - will shear x for each y coord. by a factor of h.xy ; + /// - will shear x for each z coord. by a factor of h.xz ; + /// - will shear y for each z coord. by a factor of h.yz ; + /// - will shear y for each x coord. by a factor of h.yx ; + /// - will shear z for each x coord. by a factor of h.zx ; + /// - will shear z for each y coord. by a factor of h.zy . + /// @return const referenced to this + template + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 const Matrix44& + setShear (const Shear6& h) IMATH_NOEXCEPT; + + /// Shear the matrix by given vector. The composed matrix + /// will be `shear` * `this`, where the shear matrix ... + /// - will shear x for each y coord. by a factor of h[0] ; + /// - will shear x for each z coord. by a factor of h[1] ; + /// - will shear y for each z coord. by a factor of h[2] . + /// @return const referenced to this + template + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 const Matrix44& + shear (const Vec3& h) IMATH_NOEXCEPT; + + /// Shear the matrix by the given factors. The composed matrix + /// will be `shear` * `this`, where the shear matrix ... + /// - will shear x for each y coord. by a factor of h.xy ; + /// - will shear x for each z coord. by a factor of h.xz ; + /// - will shear y for each z coord. by a factor of h.yz ; + /// - will shear y for each x coord. by a factor of h.yx ; + /// - will shear z for each x coord. by a factor of h.zx ; + /// - will shear z for each y coord. by a factor of h.zy . + /// @return const referenced to this + template + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 const Matrix44& + shear (const Shear6& h) IMATH_NOEXCEPT; + + /// @} + + /// @{ + /// @name Numeric Limits + + /// Largest possible negative value + IMATH_HOSTDEVICE constexpr static T baseTypeLowest () IMATH_NOEXCEPT + { + return std::numeric_limits::lowest (); + } + + /// Largest possible positive value + IMATH_HOSTDEVICE constexpr static T baseTypeMax () IMATH_NOEXCEPT + { + return std::numeric_limits::max (); + } + + /// Smallest possible positive value + IMATH_HOSTDEVICE constexpr static T baseTypeSmallest () IMATH_NOEXCEPT + { + return std::numeric_limits::min (); + } + + /// Smallest possible e for which 1+e != 1 + IMATH_HOSTDEVICE constexpr static T baseTypeEpsilon () IMATH_NOEXCEPT + { + return std::numeric_limits::epsilon (); + } + + /// @} + + /// Return the number of the row and column dimensions, i.e. 4 + IMATH_HOSTDEVICE constexpr static unsigned int dimensions () IMATH_NOEXCEPT + { + return 4; + } + + /// The base type: In templates that accept a parameter `V` (could be a Color4), you can refer to `T` as `V::BaseType` + typedef T BaseType; + + /// The base vector type + typedef Vec4 BaseVecType; +}; + +/// Stream output, as: +/// (m00 m01 +/// m10 m11) +template +std::ostream& operator<< (std::ostream& s, const Matrix22& m); + +/// Stream output, as: +/// (m00 m01 m02 +/// m10 m11 m12 +/// m20 m21 m22) +template +std::ostream& operator<< (std::ostream& s, const Matrix33& m); + +/// Stream output, as: +/// +/// (m00 m01 m02 m03 +/// m10 m11 m12 m13 +/// m20 m21 m22 m23 +/// m30 m31 m32 m33) +template +std::ostream& operator<< (std::ostream& s, const Matrix44& m); + +//--------------------------------------------- +// Vector-times-matrix multiplication operators +//--------------------------------------------- + +/// Vector-matrix multiplication: v *= m +template +IMATH_HOSTDEVICE inline const Vec2& +operator*= (Vec2& v, const Matrix22& m) IMATH_NOEXCEPT; + +/// Vector-matrix multiplication: r = v * m +template +IMATH_HOSTDEVICE inline Vec2 +operator* (const Vec2& v, const Matrix22& m) IMATH_NOEXCEPT; + +/// Vector-matrix multiplication: v *= m +template +IMATH_HOSTDEVICE inline const Vec2& +operator*= (Vec2& v, const Matrix33& m) IMATH_NOEXCEPT; + +/// Vector-matrix multiplication: r = v * m +template +IMATH_HOSTDEVICE inline Vec2 +operator* (const Vec2& v, const Matrix33& m) IMATH_NOEXCEPT; + +/// Vector-matrix multiplication: v *= m +template +IMATH_HOSTDEVICE inline const Vec3& +operator*= (Vec3& v, const Matrix33& m) IMATH_NOEXCEPT; + +/// Vector-matrix multiplication: r = v * m +template +IMATH_HOSTDEVICE inline Vec3 +operator* (const Vec3& v, const Matrix33& m) IMATH_NOEXCEPT; + +/// Vector-matrix multiplication: v *= m +template +IMATH_HOSTDEVICE inline const Vec3& +operator*= (Vec3& v, const Matrix44& m) IMATH_NOEXCEPT; + +/// Vector-matrix multiplication: r = v * m +template +IMATH_HOSTDEVICE inline Vec3 +operator* (const Vec3& v, const Matrix44& m) IMATH_NOEXCEPT; + +/// Vector-matrix multiplication: v *= m +template +IMATH_HOSTDEVICE inline const Vec4& +operator*= (Vec4& v, const Matrix44& m) IMATH_NOEXCEPT; + +/// Vector-matrix multiplication: r = v * m +template +IMATH_HOSTDEVICE inline Vec4 +operator* (const Vec4& v, const Matrix44& m) IMATH_NOEXCEPT; + +//------------------------- +// Typedefs for convenience +//------------------------- + +/// 2x2 matrix of float +typedef Matrix22 M22f; + +/// 2x2 matrix of double +typedef Matrix22 M22d; + +/// 3x3 matrix of float +typedef Matrix33 M33f; + +/// 3x3 matrix of double +typedef Matrix33 M33d; + +/// 4x4 matrix of float +typedef Matrix44 M44f; + +/// 4x4 matrix of double +typedef Matrix44 M44d; + +//--------------------------- +// Implementation of Matrix22 +//--------------------------- + +template +IMATH_HOSTDEVICE inline T* +Matrix22::operator[] (int i) IMATH_NOEXCEPT +{ + return x[i]; +} + +template +IMATH_HOSTDEVICE inline const T* +Matrix22::operator[] (int i) const IMATH_NOEXCEPT +{ + return x[i]; +} + +template +IMATH_HOSTDEVICE + IMATH_CONSTEXPR14 inline Matrix22::Matrix22 () IMATH_NOEXCEPT +{ + x[0][0] = 1; + x[0][1] = 0; + x[1][0] = 0; + x[1][1] = 1; +} + +template +IMATH_HOSTDEVICE + IMATH_CONSTEXPR14 inline Matrix22::Matrix22 (T a) IMATH_NOEXCEPT +{ + x[0][0] = a; + x[0][1] = a; + x[1][0] = a; + x[1][1] = a; +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline Matrix22::Matrix22 ( + const T a[2][2]) IMATH_NOEXCEPT +{ + // Function calls and aliasing issues can inhibit vectorization versus + // straight assignment of data members, so instead of this: + // memcpy (x, a, sizeof (x)); + // we do this: + x[0][0] = a[0][0]; + x[0][1] = a[0][1]; + x[1][0] = a[1][0]; + x[1][1] = a[1][1]; +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline Matrix22::Matrix22 ( + T a, T b, T c, T d) IMATH_NOEXCEPT +{ + x[0][0] = a; + x[0][1] = b; + x[1][0] = c; + x[1][1] = d; +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline Matrix22::Matrix22 ( + const Matrix22& v) IMATH_NOEXCEPT +{ + // Function calls and aliasing issues can inhibit vectorization versus + // straight assignment of data members, so we don't do this: + // memcpy (x, v.x, sizeof (x)); + // we do this: + x[0][0] = v.x[0][0]; + x[0][1] = v.x[0][1]; + x[1][0] = v.x[1][0]; + x[1][1] = v.x[1][1]; +} + +template +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline Matrix22::Matrix22 ( + const Matrix22& v) IMATH_NOEXCEPT +{ + x[0][0] = T (v.x[0][0]); + x[0][1] = T (v.x[0][1]); + x[1][0] = T (v.x[1][0]); + x[1][1] = T (v.x[1][1]); +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline const Matrix22& +Matrix22::operator= (const Matrix22& v) IMATH_NOEXCEPT +{ + // Function calls and aliasing issues can inhibit vectorization versus + // straight assignment of data members, so we don't do this: + // memcpy (x, v.x, sizeof (x)); + // we do this: + x[0][0] = v.x[0][0]; + x[0][1] = v.x[0][1]; + x[1][0] = v.x[1][0]; + x[1][1] = v.x[1][1]; + return *this; +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline const Matrix22& +Matrix22::operator= (T a) IMATH_NOEXCEPT +{ + x[0][0] = a; + x[0][1] = a; + x[1][0] = a; + x[1][1] = a; + return *this; +} + +template +IMATH_HOSTDEVICE inline T* +Matrix22::getValue () IMATH_NOEXCEPT +{ + return reinterpret_cast (this); +} + +template +IMATH_HOSTDEVICE inline const T* +Matrix22::getValue () const IMATH_NOEXCEPT +{ + return reinterpret_cast (this); +} + +template +template +IMATH_HOSTDEVICE inline void +Matrix22::getValue (Matrix22& v) const IMATH_NOEXCEPT +{ + v.x[0][0] = x[0][0]; + v.x[0][1] = x[0][1]; + v.x[1][0] = x[1][0]; + v.x[1][1] = x[1][1]; +} + +template +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline Matrix22& + Matrix22::setValue (const Matrix22& v) IMATH_NOEXCEPT +{ + x[0][0] = v.x[0][0]; + x[0][1] = v.x[0][1]; + x[1][0] = v.x[1][0]; + x[1][1] = v.x[1][1]; + return *this; +} + +template +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline Matrix22& + Matrix22::setTheMatrix (const Matrix22& v) IMATH_NOEXCEPT +{ + x[0][0] = v.x[0][0]; + x[0][1] = v.x[0][1]; + x[1][0] = v.x[1][0]; + x[1][1] = v.x[1][1]; + return *this; +} + +template +IMATH_HOSTDEVICE inline void +Matrix22::makeIdentity () IMATH_NOEXCEPT +{ + x[0][0] = 1; + x[0][1] = 0; + x[1][0] = 0; + x[1][1] = 1; +} + +template +IMATH_HOSTDEVICE constexpr inline bool +Matrix22::operator== (const Matrix22& v) const IMATH_NOEXCEPT +{ + return x[0][0] == v.x[0][0] && x[0][1] == v.x[0][1] && + x[1][0] == v.x[1][0] && x[1][1] == v.x[1][1]; +} + +template +IMATH_HOSTDEVICE constexpr inline bool +Matrix22::operator!= (const Matrix22& v) const IMATH_NOEXCEPT +{ + return x[0][0] != v.x[0][0] || x[0][1] != v.x[0][1] || + x[1][0] != v.x[1][0] || x[1][1] != v.x[1][1]; +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline bool +Matrix22::equalWithAbsError (const Matrix22& m, T e) const IMATH_NOEXCEPT +{ + for (int i = 0; i < 2; i++) + for (int j = 0; j < 2; j++) + if (!IMATH_INTERNAL_NAMESPACE::equalWithAbsError ( + (*this).x[i][j], m.x[i][j], e)) + return false; + + return true; +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline bool +Matrix22::equalWithRelError (const Matrix22& m, T e) const IMATH_NOEXCEPT +{ + for (int i = 0; i < 2; i++) + for (int j = 0; j < 2; j++) + if (!IMATH_INTERNAL_NAMESPACE::equalWithRelError ( + (*this).x[i][j], m.x[i][j], e)) + return false; + + return true; +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline const Matrix22& +Matrix22::operator+= (const Matrix22& v) IMATH_NOEXCEPT +{ + x[0][0] += v.x[0][0]; + x[0][1] += v.x[0][1]; + x[1][0] += v.x[1][0]; + x[1][1] += v.x[1][1]; + + return *this; +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline const Matrix22& +Matrix22::operator+= (T a) IMATH_NOEXCEPT +{ + x[0][0] += a; + x[0][1] += a; + x[1][0] += a; + x[1][1] += a; + + return *this; +} + +template +IMATH_HOSTDEVICE constexpr inline Matrix22 +Matrix22::operator+ (const Matrix22& v) const IMATH_NOEXCEPT +{ + return Matrix22 ( + x[0][0] + v.x[0][0], + x[0][1] + v.x[0][1], + x[1][0] + v.x[1][0], + x[1][1] + v.x[1][1]); +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline const Matrix22& +Matrix22::operator-= (const Matrix22& v) IMATH_NOEXCEPT +{ + x[0][0] -= v.x[0][0]; + x[0][1] -= v.x[0][1]; + x[1][0] -= v.x[1][0]; + x[1][1] -= v.x[1][1]; + + return *this; +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline const Matrix22& +Matrix22::operator-= (T a) IMATH_NOEXCEPT +{ + x[0][0] -= a; + x[0][1] -= a; + x[1][0] -= a; + x[1][1] -= a; + + return *this; +} + +template +IMATH_HOSTDEVICE constexpr inline Matrix22 +Matrix22::operator- (const Matrix22& v) const IMATH_NOEXCEPT +{ + return Matrix22 ( + x[0][0] - v.x[0][0], + x[0][1] - v.x[0][1], + x[1][0] - v.x[1][0], + x[1][1] - v.x[1][1]); +} + +template +IMATH_HOSTDEVICE constexpr inline Matrix22 +Matrix22::operator- () const IMATH_NOEXCEPT +{ + return Matrix22 (-x[0][0], -x[0][1], -x[1][0], -x[1][1]); +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline const Matrix22& + Matrix22::negate () IMATH_NOEXCEPT +{ + x[0][0] = -x[0][0]; + x[0][1] = -x[0][1]; + x[1][0] = -x[1][0]; + x[1][1] = -x[1][1]; + + return *this; +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline const Matrix22& +Matrix22::operator*= (T a) IMATH_NOEXCEPT +{ + x[0][0] *= a; + x[0][1] *= a; + x[1][0] *= a; + x[1][1] *= a; + + return *this; +} + +template +IMATH_HOSTDEVICE constexpr inline Matrix22 +Matrix22::operator* (T a) const IMATH_NOEXCEPT +{ + return Matrix22 (x[0][0] * a, x[0][1] * a, x[1][0] * a, x[1][1] * a); +} + +/// Matrix-scalar multiplication +template +IMATH_HOSTDEVICE inline Matrix22 +operator* (T a, const Matrix22& v) IMATH_NOEXCEPT +{ + return v * a; +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline const Matrix22& +Matrix22::operator*= (const Matrix22& v) IMATH_NOEXCEPT +{ + Matrix22 tmp (T (0)); + + for (int i = 0; i < 2; i++) + for (int j = 0; j < 2; j++) + for (int k = 0; k < 2; k++) + tmp.x[i][j] += x[i][k] * v.x[k][j]; + + *this = tmp; + return *this; +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline Matrix22 +Matrix22::operator* (const Matrix22& v) const IMATH_NOEXCEPT +{ + Matrix22 tmp (T (0)); + + for (int i = 0; i < 2; i++) + for (int j = 0; j < 2; j++) + for (int k = 0; k < 2; k++) + tmp.x[i][j] += x[i][k] * v.x[k][j]; + + return tmp; +} + +template +template +IMATH_HOSTDEVICE inline void +Matrix22::multDirMatrix (const Vec2& src, Vec2& dst) const + IMATH_NOEXCEPT +{ + S a, b; + + a = src.x * x[0][0] + src.y * x[1][0]; + b = src.x * x[0][1] + src.y * x[1][1]; + + dst.x = a; + dst.y = b; +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline const Matrix22& +Matrix22::operator/= (T a) IMATH_NOEXCEPT +{ + x[0][0] /= a; + x[0][1] /= a; + x[1][0] /= a; + x[1][1] /= a; + + return *this; +} + +template +IMATH_HOSTDEVICE constexpr inline Matrix22 +Matrix22::operator/ (T a) const IMATH_NOEXCEPT +{ + return Matrix22 (x[0][0] / a, x[0][1] / a, x[1][0] / a, x[1][1] / a); +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline const Matrix22& + Matrix22::transpose () IMATH_NOEXCEPT +{ + Matrix22 tmp (x[0][0], x[1][0], x[0][1], x[1][1]); + *this = tmp; + return *this; +} + +template +IMATH_HOSTDEVICE constexpr inline Matrix22 +Matrix22::transposed () const IMATH_NOEXCEPT +{ + return Matrix22 (x[0][0], x[1][0], x[0][1], x[1][1]); +} + +template +IMATH_CONSTEXPR14 inline const Matrix22& +Matrix22::invert (bool singExc) +{ + *this = inverse (singExc); + return *this; +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline const Matrix22& + Matrix22::invert () IMATH_NOEXCEPT +{ + *this = inverse (); + return *this; +} + +template +IMATH_CONSTEXPR14 inline Matrix22 +Matrix22::inverse (bool singExc) const +{ + Matrix22 s (x[1][1], -x[0][1], -x[1][0], x[0][0]); + + T r = x[0][0] * x[1][1] - x[1][0] * x[0][1]; + + if (IMATH_INTERNAL_NAMESPACE::abs (r) >= 1) + { + for (int i = 0; i < 2; ++i) + { + for (int j = 0; j < 2; ++j) + { + s[i][j] /= r; + } + } + } + else + { + T mr = + IMATH_INTERNAL_NAMESPACE::abs (r) / std::numeric_limits::min (); + + for (int i = 0; i < 2; ++i) + { + for (int j = 0; j < 2; ++j) + { + if (mr > IMATH_INTERNAL_NAMESPACE::abs (s[i][j])) + { + s[i][j] /= r; + } + else + { + if (singExc) + throw std::invalid_argument ("Cannot invert " + "singular matrix."); + return Matrix22 (); + } + } + } + } + return s; +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline Matrix22 + Matrix22::inverse () const IMATH_NOEXCEPT +{ + Matrix22 s (x[1][1], -x[0][1], -x[1][0], x[0][0]); + + T r = x[0][0] * x[1][1] - x[1][0] * x[0][1]; + + if (IMATH_INTERNAL_NAMESPACE::abs (r) >= 1) + { + for (int i = 0; i < 2; ++i) + { + for (int j = 0; j < 2; ++j) + { + s[i][j] /= r; + } + } + } + else + { + T mr = + IMATH_INTERNAL_NAMESPACE::abs (r) / std::numeric_limits::min (); + + for (int i = 0; i < 2; ++i) + { + for (int j = 0; j < 2; ++j) + { + if (mr > IMATH_INTERNAL_NAMESPACE::abs (s[i][j])) + { + s[i][j] /= r; + } + else + { + return Matrix22 (); + } + } + } + } + return s; +} + +template +IMATH_HOSTDEVICE constexpr inline T +Matrix22::determinant () const IMATH_NOEXCEPT +{ + return x[0][0] * x[1][1] - x[1][0] * x[0][1]; +} + +template +IMATH_HOSTDEVICE constexpr inline T +Matrix22::trace () const IMATH_NOEXCEPT +{ + return x[0][0] + x[1][1]; +} + +template +template +IMATH_HOSTDEVICE inline const Matrix22& +Matrix22::setRotation (S r) IMATH_NOEXCEPT +{ + S cos_r, sin_r; + + cos_r = cos ((T) r); + sin_r = sin ((T) r); + + x[0][0] = cos_r; + x[0][1] = sin_r; + + x[1][0] = -sin_r; + x[1][1] = cos_r; + + return *this; +} + +template +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline const Matrix22& + Matrix22::rotate (S r) IMATH_NOEXCEPT +{ + *this *= Matrix22 ().setRotation (r); + return *this; +} + +template +IMATH_CONSTEXPR14 inline const Matrix22& +Matrix22::setScale (T s) IMATH_NOEXCEPT +{ + // + // Set the matrix to: + // | s 0 | + // | 0 s | + // + + x[0][0] = s; + x[0][1] = static_cast (0); + x[1][0] = static_cast (0); + x[1][1] = s; + + return *this; +} + +template +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline const Matrix22& + Matrix22::setScale (const Vec2& s) IMATH_NOEXCEPT +{ + // + // Set the matrix to: + // | s.x 0 | + // | 0 s.y | + // + + x[0][0] = s.x; + x[0][1] = static_cast (0); + x[1][0] = static_cast (0); + x[1][1] = s.y; + + return *this; +} + +template +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline const Matrix22& + Matrix22::scale (const Vec2& s) IMATH_NOEXCEPT +{ + x[0][0] *= s.x; + x[0][1] *= s.x; + + x[1][0] *= s.y; + x[1][1] *= s.y; + + return *this; +} + +//--------------------------- +// Implementation of Matrix33 +//--------------------------- + +template +IMATH_HOSTDEVICE inline T* +Matrix33::operator[] (int i) IMATH_NOEXCEPT +{ + return x[i]; +} + +template +IMATH_HOSTDEVICE inline const T* +Matrix33::operator[] (int i) const IMATH_NOEXCEPT +{ + return x[i]; +} + +template +IMATH_HOSTDEVICE inline IMATH_CONSTEXPR14 +Matrix33::Matrix33 () IMATH_NOEXCEPT +{ + x[0][0] = 1; + x[0][1] = 0; + x[0][2] = 0; + x[1][0] = 0; + x[1][1] = 1; + x[1][2] = 0; + x[2][0] = 0; + x[2][1] = 0; + x[2][2] = 1; +} + +template +IMATH_HOSTDEVICE + IMATH_CONSTEXPR14 inline Matrix33::Matrix33 (T a) IMATH_NOEXCEPT +{ + x[0][0] = a; + x[0][1] = a; + x[0][2] = a; + x[1][0] = a; + x[1][1] = a; + x[1][2] = a; + x[2][0] = a; + x[2][1] = a; + x[2][2] = a; +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline Matrix33::Matrix33 ( + const T a[3][3]) IMATH_NOEXCEPT +{ + // Function calls and aliasing issues can inhibit vectorization versus + // straight assignment of data members, so instead of this: + // memcpy (x, a, sizeof (x)); + // we do this: + x[0][0] = a[0][0]; + x[0][1] = a[0][1]; + x[0][2] = a[0][2]; + x[1][0] = a[1][0]; + x[1][1] = a[1][1]; + x[1][2] = a[1][2]; + x[2][0] = a[2][0]; + x[2][1] = a[2][1]; + x[2][2] = a[2][2]; +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline Matrix33::Matrix33 ( + T a, T b, T c, T d, T e, T f, T g, T h, T i) IMATH_NOEXCEPT +{ + x[0][0] = a; + x[0][1] = b; + x[0][2] = c; + x[1][0] = d; + x[1][1] = e; + x[1][2] = f; + x[2][0] = g; + x[2][1] = h; + x[2][2] = i; +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline Matrix33::Matrix33 ( + const Matrix33& v) IMATH_NOEXCEPT +{ + // Function calls and aliasing issues can inhibit vectorization versus + // straight assignment of data members, so instead of this: + // memcpy (x, v.x, sizeof (x)); + // we do this: + x[0][0] = v.x[0][0]; + x[0][1] = v.x[0][1]; + x[0][2] = v.x[0][2]; + x[1][0] = v.x[1][0]; + x[1][1] = v.x[1][1]; + x[1][2] = v.x[1][2]; + x[2][0] = v.x[2][0]; + x[2][1] = v.x[2][1]; + x[2][2] = v.x[2][2]; +} + +template +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline Matrix33::Matrix33 ( + const Matrix33& v) IMATH_NOEXCEPT +{ + x[0][0] = T (v.x[0][0]); + x[0][1] = T (v.x[0][1]); + x[0][2] = T (v.x[0][2]); + x[1][0] = T (v.x[1][0]); + x[1][1] = T (v.x[1][1]); + x[1][2] = T (v.x[1][2]); + x[2][0] = T (v.x[2][0]); + x[2][1] = T (v.x[2][1]); + x[2][2] = T (v.x[2][2]); +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline const Matrix33& +Matrix33::operator= (const Matrix33& v) IMATH_NOEXCEPT +{ + // Function calls and aliasing issues can inhibit vectorization versus + // straight assignment of data members, so instead of this: + // memcpy (x, v.x, sizeof (x)); + // we do this: + x[0][0] = v.x[0][0]; + x[0][1] = v.x[0][1]; + x[0][2] = v.x[0][2]; + x[1][0] = v.x[1][0]; + x[1][1] = v.x[1][1]; + x[1][2] = v.x[1][2]; + x[2][0] = v.x[2][0]; + x[2][1] = v.x[2][1]; + x[2][2] = v.x[2][2]; + return *this; +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline const Matrix33& +Matrix33::operator= (T a) IMATH_NOEXCEPT +{ + x[0][0] = a; + x[0][1] = a; + x[0][2] = a; + x[1][0] = a; + x[1][1] = a; + x[1][2] = a; + x[2][0] = a; + x[2][1] = a; + x[2][2] = a; + return *this; +} + +template +IMATH_HOSTDEVICE inline T* +Matrix33::getValue () IMATH_NOEXCEPT +{ + return reinterpret_cast (this); +} + +template +IMATH_HOSTDEVICE inline const T* +Matrix33::getValue () const IMATH_NOEXCEPT +{ + return reinterpret_cast (this); +} + +template +template +IMATH_HOSTDEVICE inline void +Matrix33::getValue (Matrix33& v) const IMATH_NOEXCEPT +{ + v.x[0][0] = x[0][0]; + v.x[0][1] = x[0][1]; + v.x[0][2] = x[0][2]; + v.x[1][0] = x[1][0]; + v.x[1][1] = x[1][1]; + v.x[1][2] = x[1][2]; + v.x[2][0] = x[2][0]; + v.x[2][1] = x[2][1]; + v.x[2][2] = x[2][2]; +} + +template +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline Matrix33& + Matrix33::setValue (const Matrix33& v) IMATH_NOEXCEPT +{ + x[0][0] = v.x[0][0]; + x[0][1] = v.x[0][1]; + x[0][2] = v.x[0][2]; + x[1][0] = v.x[1][0]; + x[1][1] = v.x[1][1]; + x[1][2] = v.x[1][2]; + x[2][0] = v.x[2][0]; + x[2][1] = v.x[2][1]; + x[2][2] = v.x[2][2]; + return *this; +} + +template +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline Matrix33& + Matrix33::setTheMatrix (const Matrix33& v) IMATH_NOEXCEPT +{ + x[0][0] = v.x[0][0]; + x[0][1] = v.x[0][1]; + x[0][2] = v.x[0][2]; + x[1][0] = v.x[1][0]; + x[1][1] = v.x[1][1]; + x[1][2] = v.x[1][2]; + x[2][0] = v.x[2][0]; + x[2][1] = v.x[2][1]; + x[2][2] = v.x[2][2]; + return *this; +} + +template +IMATH_HOSTDEVICE inline void +Matrix33::makeIdentity () IMATH_NOEXCEPT +{ + x[0][0] = 1; + x[0][1] = 0; + x[0][2] = 0; + x[1][0] = 0; + x[1][1] = 1; + x[1][2] = 0; + x[2][0] = 0; + x[2][1] = 0; + x[2][2] = 1; +} + +template +IMATH_HOSTDEVICE constexpr inline bool +Matrix33::operator== (const Matrix33& v) const IMATH_NOEXCEPT +{ + return x[0][0] == v.x[0][0] && x[0][1] == v.x[0][1] && + x[0][2] == v.x[0][2] && x[1][0] == v.x[1][0] && + x[1][1] == v.x[1][1] && x[1][2] == v.x[1][2] && + x[2][0] == v.x[2][0] && x[2][1] == v.x[2][1] && x[2][2] == v.x[2][2]; +} + +template +IMATH_HOSTDEVICE constexpr inline bool +Matrix33::operator!= (const Matrix33& v) const IMATH_NOEXCEPT +{ + return x[0][0] != v.x[0][0] || x[0][1] != v.x[0][1] || + x[0][2] != v.x[0][2] || x[1][0] != v.x[1][0] || + x[1][1] != v.x[1][1] || x[1][2] != v.x[1][2] || + x[2][0] != v.x[2][0] || x[2][1] != v.x[2][1] || x[2][2] != v.x[2][2]; +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline bool +Matrix33::equalWithAbsError (const Matrix33& m, T e) const IMATH_NOEXCEPT +{ + for (int i = 0; i < 3; i++) + for (int j = 0; j < 3; j++) + if (!IMATH_INTERNAL_NAMESPACE::equalWithAbsError ( + (*this)[i][j], m[i][j], e)) + return false; + + return true; +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline bool +Matrix33::equalWithRelError (const Matrix33& m, T e) const IMATH_NOEXCEPT +{ + for (int i = 0; i < 3; i++) + for (int j = 0; j < 3; j++) + if (!IMATH_INTERNAL_NAMESPACE::equalWithRelError ( + (*this)[i][j], m[i][j], e)) + return false; + + return true; +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline const Matrix33& +Matrix33::operator+= (const Matrix33& v) IMATH_NOEXCEPT +{ + x[0][0] += v.x[0][0]; + x[0][1] += v.x[0][1]; + x[0][2] += v.x[0][2]; + x[1][0] += v.x[1][0]; + x[1][1] += v.x[1][1]; + x[1][2] += v.x[1][2]; + x[2][0] += v.x[2][0]; + x[2][1] += v.x[2][1]; + x[2][2] += v.x[2][2]; + + return *this; +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline const Matrix33& +Matrix33::operator+= (T a) IMATH_NOEXCEPT +{ + x[0][0] += a; + x[0][1] += a; + x[0][2] += a; + x[1][0] += a; + x[1][1] += a; + x[1][2] += a; + x[2][0] += a; + x[2][1] += a; + x[2][2] += a; + + return *this; +} + +template +IMATH_HOSTDEVICE constexpr inline Matrix33 +Matrix33::operator+ (const Matrix33& v) const IMATH_NOEXCEPT +{ + return Matrix33 ( + x[0][0] + v.x[0][0], + x[0][1] + v.x[0][1], + x[0][2] + v.x[0][2], + x[1][0] + v.x[1][0], + x[1][1] + v.x[1][1], + x[1][2] + v.x[1][2], + x[2][0] + v.x[2][0], + x[2][1] + v.x[2][1], + x[2][2] + v.x[2][2]); +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline const Matrix33& +Matrix33::operator-= (const Matrix33& v) IMATH_NOEXCEPT +{ + x[0][0] -= v.x[0][0]; + x[0][1] -= v.x[0][1]; + x[0][2] -= v.x[0][2]; + x[1][0] -= v.x[1][0]; + x[1][1] -= v.x[1][1]; + x[1][2] -= v.x[1][2]; + x[2][0] -= v.x[2][0]; + x[2][1] -= v.x[2][1]; + x[2][2] -= v.x[2][2]; + + return *this; +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline const Matrix33& +Matrix33::operator-= (T a) IMATH_NOEXCEPT +{ + x[0][0] -= a; + x[0][1] -= a; + x[0][2] -= a; + x[1][0] -= a; + x[1][1] -= a; + x[1][2] -= a; + x[2][0] -= a; + x[2][1] -= a; + x[2][2] -= a; + + return *this; +} + +template +IMATH_HOSTDEVICE constexpr inline Matrix33 +Matrix33::operator- (const Matrix33& v) const IMATH_NOEXCEPT +{ + return Matrix33 ( + x[0][0] - v.x[0][0], + x[0][1] - v.x[0][1], + x[0][2] - v.x[0][2], + x[1][0] - v.x[1][0], + x[1][1] - v.x[1][1], + x[1][2] - v.x[1][2], + x[2][0] - v.x[2][0], + x[2][1] - v.x[2][1], + x[2][2] - v.x[2][2]); +} + +template +IMATH_HOSTDEVICE constexpr inline Matrix33 +Matrix33::operator- () const IMATH_NOEXCEPT +{ + return Matrix33 ( + -x[0][0], + -x[0][1], + -x[0][2], + -x[1][0], + -x[1][1], + -x[1][2], + -x[2][0], + -x[2][1], + -x[2][2]); +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline const Matrix33& + Matrix33::negate () IMATH_NOEXCEPT +{ + x[0][0] = -x[0][0]; + x[0][1] = -x[0][1]; + x[0][2] = -x[0][2]; + x[1][0] = -x[1][0]; + x[1][1] = -x[1][1]; + x[1][2] = -x[1][2]; + x[2][0] = -x[2][0]; + x[2][1] = -x[2][1]; + x[2][2] = -x[2][2]; + + return *this; +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline const Matrix33& +Matrix33::operator*= (T a) IMATH_NOEXCEPT +{ + x[0][0] *= a; + x[0][1] *= a; + x[0][2] *= a; + x[1][0] *= a; + x[1][1] *= a; + x[1][2] *= a; + x[2][0] *= a; + x[2][1] *= a; + x[2][2] *= a; + + return *this; +} + +template +IMATH_HOSTDEVICE constexpr inline Matrix33 +Matrix33::operator* (T a) const IMATH_NOEXCEPT +{ + return Matrix33 ( + x[0][0] * a, + x[0][1] * a, + x[0][2] * a, + x[1][0] * a, + x[1][1] * a, + x[1][2] * a, + x[2][0] * a, + x[2][1] * a, + x[2][2] * a); +} + +/// Matrix-scalar multiplication +template +IMATH_HOSTDEVICE inline Matrix33 constexpr +operator* (T a, const Matrix33& v) IMATH_NOEXCEPT +{ + return v * a; +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline const Matrix33& +Matrix33::operator*= (const Matrix33& v) IMATH_NOEXCEPT +{ + // Avoid initializing with 0 values before immediately overwriting them, + // and unroll all loops for the best autovectorization. + Matrix33 tmp (IMATH_INTERNAL_NAMESPACE::UNINITIALIZED); + + tmp.x[0][0] = + x[0][0] * v.x[0][0] + x[0][1] * v.x[1][0] + x[0][2] * v.x[2][0]; + tmp.x[0][1] = + x[0][0] * v.x[0][1] + x[0][1] * v.x[1][1] + x[0][2] * v.x[2][1]; + tmp.x[0][2] = + x[0][0] * v.x[0][2] + x[0][1] * v.x[1][2] + x[0][2] * v.x[2][2]; + + tmp.x[1][0] = + x[1][0] * v.x[0][0] + x[1][1] * v.x[1][0] + x[1][2] * v.x[2][0]; + tmp.x[1][1] = + x[1][0] * v.x[0][1] + x[1][1] * v.x[1][1] + x[1][2] * v.x[2][1]; + tmp.x[1][2] = + x[1][0] * v.x[0][2] + x[1][1] * v.x[1][2] + x[1][2] * v.x[2][2]; + + tmp.x[2][0] = + x[2][0] * v.x[0][0] + x[2][1] * v.x[1][0] + x[2][2] * v.x[2][0]; + tmp.x[2][1] = + x[2][0] * v.x[0][1] + x[2][1] * v.x[1][1] + x[2][2] * v.x[2][1]; + tmp.x[2][2] = + x[2][0] * v.x[0][2] + x[2][1] * v.x[1][2] + x[2][2] * v.x[2][2]; + + *this = tmp; + return *this; +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline Matrix33 +Matrix33::operator* (const Matrix33& v) const IMATH_NOEXCEPT +{ + // Avoid initializing with 0 values before immediately overwriting them, + // and unroll all loops for the best autovectorization. + Matrix33 tmp (IMATH_INTERNAL_NAMESPACE::UNINITIALIZED); + + tmp.x[0][0] = + x[0][0] * v.x[0][0] + x[0][1] * v.x[1][0] + x[0][2] * v.x[2][0]; + tmp.x[0][1] = + x[0][0] * v.x[0][1] + x[0][1] * v.x[1][1] + x[0][2] * v.x[2][1]; + tmp.x[0][2] = + x[0][0] * v.x[0][2] + x[0][1] * v.x[1][2] + x[0][2] * v.x[2][2]; + + tmp.x[1][0] = + x[1][0] * v.x[0][0] + x[1][1] * v.x[1][0] + x[1][2] * v.x[2][0]; + tmp.x[1][1] = + x[1][0] * v.x[0][1] + x[1][1] * v.x[1][1] + x[1][2] * v.x[2][1]; + tmp.x[1][2] = + x[1][0] * v.x[0][2] + x[1][1] * v.x[1][2] + x[1][2] * v.x[2][2]; + + tmp.x[2][0] = + x[2][0] * v.x[0][0] + x[2][1] * v.x[1][0] + x[2][2] * v.x[2][0]; + tmp.x[2][1] = + x[2][0] * v.x[0][1] + x[2][1] * v.x[1][1] + x[2][2] * v.x[2][1]; + tmp.x[2][2] = + x[2][0] * v.x[0][2] + x[2][1] * v.x[1][2] + x[2][2] * v.x[2][2]; + + return tmp; +} + +template +template +IMATH_HOSTDEVICE inline void +Matrix33::multVecMatrix (const Vec2& src, Vec2& dst) const + IMATH_NOEXCEPT +{ + S a, b, w; + + a = src.x * x[0][0] + src.y * x[1][0] + x[2][0]; + b = src.x * x[0][1] + src.y * x[1][1] + x[2][1]; + w = src.x * x[0][2] + src.y * x[1][2] + x[2][2]; + + dst.x = a / w; + dst.y = b / w; +} + +template +template +IMATH_HOSTDEVICE inline void +Matrix33::multDirMatrix (const Vec2& src, Vec2& dst) const + IMATH_NOEXCEPT +{ + S a, b; + + a = src.x * x[0][0] + src.y * x[1][0]; + b = src.x * x[0][1] + src.y * x[1][1]; + + dst.x = a; + dst.y = b; +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline const Matrix33& +Matrix33::operator/= (T a) IMATH_NOEXCEPT +{ + x[0][0] /= a; + x[0][1] /= a; + x[0][2] /= a; + x[1][0] /= a; + x[1][1] /= a; + x[1][2] /= a; + x[2][0] /= a; + x[2][1] /= a; + x[2][2] /= a; + + return *this; +} + +template +IMATH_HOSTDEVICE constexpr inline Matrix33 +Matrix33::operator/ (T a) const IMATH_NOEXCEPT +{ + return Matrix33 ( + x[0][0] / a, + x[0][1] / a, + x[0][2] / a, + x[1][0] / a, + x[1][1] / a, + x[1][2] / a, + x[2][0] / a, + x[2][1] / a, + x[2][2] / a); +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline const Matrix33& + Matrix33::transpose () IMATH_NOEXCEPT +{ + Matrix33 tmp ( + x[0][0], + x[1][0], + x[2][0], + x[0][1], + x[1][1], + x[2][1], + x[0][2], + x[1][2], + x[2][2]); + *this = tmp; + return *this; +} + +template +IMATH_HOSTDEVICE constexpr inline Matrix33 +Matrix33::transposed () const IMATH_NOEXCEPT +{ + return Matrix33 ( + x[0][0], + x[1][0], + x[2][0], + x[0][1], + x[1][1], + x[2][1], + x[0][2], + x[1][2], + x[2][2]); +} + +template +const inline Matrix33& +Matrix33::gjInvert (bool singExc) +{ + *this = gjInverse (singExc); + return *this; +} + +template +IMATH_HOSTDEVICE const inline Matrix33& +Matrix33::gjInvert () IMATH_NOEXCEPT +{ + *this = gjInverse (); + return *this; +} + +template +inline Matrix33 +Matrix33::gjInverse (bool singExc) const +{ + int i, j, k; + Matrix33 s; + Matrix33 t (*this); + + // Forward elimination + + for (i = 0; i < 2; i++) + { + int pivot = i; + + T pivotsize = t.x[i][i]; + + if (pivotsize < 0) pivotsize = -pivotsize; + + for (j = i + 1; j < 3; j++) + { + T tmp = t.x[j][i]; + + if (tmp < 0) tmp = -tmp; + + if (tmp > pivotsize) + { + pivot = j; + pivotsize = tmp; + } + } + + if (pivotsize == 0) + { + if (singExc) + throw std::invalid_argument ("Cannot invert singular matrix."); + + return Matrix33 (); + } + + if (pivot != i) + { + for (j = 0; j < 3; j++) + { + T tmp; + + tmp = t.x[i][j]; + t.x[i][j] = t.x[pivot][j]; + t.x[pivot][j] = tmp; + + tmp = s.x[i][j]; + s.x[i][j] = s.x[pivot][j]; + s.x[pivot][j] = tmp; + } + } + + for (j = i + 1; j < 3; j++) + { + T f = t.x[j][i] / t.x[i][i]; + + for (k = 0; k < 3; k++) + { + t.x[j][k] -= f * t.x[i][k]; + s.x[j][k] -= f * s.x[i][k]; + } + } + } + + // Backward substitution + + for (i = 2; i >= 0; --i) + { + T f; + + if ((f = t[i][i]) == 0) + { + if (singExc) + throw std::invalid_argument ("Cannot invert singular matrix."); + + return Matrix33 (); + } + + for (j = 0; j < 3; j++) + { + t.x[i][j] /= f; + s.x[i][j] /= f; + } + + for (j = 0; j < i; j++) + { + f = t.x[j][i]; + + for (k = 0; k < 3; k++) + { + t.x[j][k] -= f * t.x[i][k]; + s.x[j][k] -= f * s.x[i][k]; + } + } + } + + return s; +} + +template +IMATH_HOSTDEVICE inline Matrix33 +Matrix33::gjInverse () const IMATH_NOEXCEPT +{ + int i, j, k; + Matrix33 s; + Matrix33 t (*this); + + // Forward elimination + + for (i = 0; i < 2; i++) + { + int pivot = i; + + T pivotsize = t.x[i][i]; + + if (pivotsize < 0) pivotsize = -pivotsize; + + for (j = i + 1; j < 3; j++) + { + T tmp = t.x[j][i]; + + if (tmp < 0) tmp = -tmp; + + if (tmp > pivotsize) + { + pivot = j; + pivotsize = tmp; + } + } + + if (pivotsize == 0) { return Matrix33 (); } + + if (pivot != i) + { + for (j = 0; j < 3; j++) + { + T tmp; + + tmp = t.x[i][j]; + t.x[i][j] = t.x[pivot][j]; + t.x[pivot][j] = tmp; + + tmp = s.x[i][j]; + s.x[i][j] = s.x[pivot][j]; + s.x[pivot][j] = tmp; + } + } + + for (j = i + 1; j < 3; j++) + { + T f = t.x[j][i] / t.x[i][i]; + + for (k = 0; k < 3; k++) + { + t.x[j][k] -= f * t.x[i][k]; + s.x[j][k] -= f * s.x[i][k]; + } + } + } + + // Backward substitution + + for (i = 2; i >= 0; --i) + { + T f; + + if ((f = t.x[i][i]) == 0) { return Matrix33 (); } + + for (j = 0; j < 3; j++) + { + t.x[i][j] /= f; + s.x[i][j] /= f; + } + + for (j = 0; j < i; j++) + { + f = t.x[j][i]; + + for (k = 0; k < 3; k++) + { + t.x[j][k] -= f * t.x[i][k]; + s.x[j][k] -= f * s.x[i][k]; + } + } + } + + return s; +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline const Matrix33& +Matrix33::invert (bool singExc) +{ + *this = inverse (singExc); + return *this; +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline const Matrix33& + Matrix33::invert () IMATH_NOEXCEPT +{ + *this = inverse (); + return *this; +} + +template +IMATH_CONSTEXPR14 inline Matrix33 +Matrix33::inverse (bool singExc) const +{ + if (x[0][2] != 0 || x[1][2] != 0 || x[2][2] != 1) + { + Matrix33 s ( + x[1][1] * x[2][2] - x[2][1] * x[1][2], + x[2][1] * x[0][2] - x[0][1] * x[2][2], + x[0][1] * x[1][2] - x[1][1] * x[0][2], + + x[2][0] * x[1][2] - x[1][0] * x[2][2], + x[0][0] * x[2][2] - x[2][0] * x[0][2], + x[1][0] * x[0][2] - x[0][0] * x[1][2], + + x[1][0] * x[2][1] - x[2][0] * x[1][1], + x[2][0] * x[0][1] - x[0][0] * x[2][1], + x[0][0] * x[1][1] - x[1][0] * x[0][1]); + + T r = x[0][0] * s[0][0] + x[0][1] * s[1][0] + x[0][2] * s[2][0]; + + if (IMATH_INTERNAL_NAMESPACE::abs (r) >= 1) + { + for (int i = 0; i < 3; ++i) + { + for (int j = 0; j < 3; ++j) + { + s.x[i][j] /= r; + } + } + } + else + { + T mr = IMATH_INTERNAL_NAMESPACE::abs (r) / + std::numeric_limits::min (); + + for (int i = 0; i < 3; ++i) + { + for (int j = 0; j < 3; ++j) + { + if (mr > IMATH_INTERNAL_NAMESPACE::abs (s.x[i][j])) + { + s.x[i][j] /= r; + } + else + { + if (singExc) + throw std::invalid_argument ("Cannot invert " + "singular matrix."); + return Matrix33 (); + } + } + } + } + + return s; + } + else + { + Matrix33 s ( + x[1][1], + -x[0][1], + 0, + + -x[1][0], + x[0][0], + 0, + + 0, + 0, + 1); + + T r = x[0][0] * x[1][1] - x[1][0] * x[0][1]; + + if (IMATH_INTERNAL_NAMESPACE::abs (r) >= 1) + { + for (int i = 0; i < 2; ++i) + { + for (int j = 0; j < 2; ++j) + { + s.x[i][j] /= r; + } + } + } + else + { + T mr = IMATH_INTERNAL_NAMESPACE::abs (r) / + std::numeric_limits::min (); + + for (int i = 0; i < 2; ++i) + { + for (int j = 0; j < 2; ++j) + { + if (mr > IMATH_INTERNAL_NAMESPACE::abs (s.x[i][j])) + { + s.x[i][j] /= r; + } + else + { + if (singExc) + throw std::invalid_argument ("Cannot invert " + "singular matrix."); + return Matrix33 (); + } + } + } + } + + s.x[2][0] = -x[2][0] * s.x[0][0] - x[2][1] * s.x[1][0]; + s.x[2][1] = -x[2][0] * s.x[0][1] - x[2][1] * s.x[1][1]; + + return s; + } +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline Matrix33 +Matrix33::inverse () const IMATH_NOEXCEPT +{ + if (x[0][2] != 0 || x[1][2] != 0 || x[2][2] != 1) + { + Matrix33 s ( + x[1][1] * x[2][2] - x[2][1] * x[1][2], + x[2][1] * x[0][2] - x[0][1] * x[2][2], + x[0][1] * x[1][2] - x[1][1] * x[0][2], + + x[2][0] * x[1][2] - x[1][0] * x[2][2], + x[0][0] * x[2][2] - x[2][0] * x[0][2], + x[1][0] * x[0][2] - x[0][0] * x[1][2], + + x[1][0] * x[2][1] - x[2][0] * x[1][1], + x[2][0] * x[0][1] - x[0][0] * x[2][1], + x[0][0] * x[1][1] - x[1][0] * x[0][1]); + + T r = x[0][0] * s.x[0][0] + x[0][1] * s.x[1][0] + x[0][2] * s.x[2][0]; + + if (IMATH_INTERNAL_NAMESPACE::abs (r) >= 1) + { + for (int i = 0; i < 3; ++i) + { + for (int j = 0; j < 3; ++j) + { + s.x[i][j] /= r; + } + } + } + else + { + T mr = IMATH_INTERNAL_NAMESPACE::abs (r) / + std::numeric_limits::min (); + + for (int i = 0; i < 3; ++i) + { + for (int j = 0; j < 3; ++j) + { + if (mr > IMATH_INTERNAL_NAMESPACE::abs (s.x[i][j])) + { + s.x[i][j] /= r; + } + else + { + return Matrix33 (); + } + } + } + } + + return s; + } + else + { + Matrix33 s ( + x[1][1], + -x[0][1], + 0, + + -x[1][0], + x[0][0], + 0, + + 0, + 0, + 1); + + T r = x[0][0] * x[1][1] - x[1][0] * x[0][1]; + + if (IMATH_INTERNAL_NAMESPACE::abs (r) >= 1) + { + for (int i = 0; i < 2; ++i) + { + for (int j = 0; j < 2; ++j) + { + s.x[i][j] /= r; + } + } + } + else + { + T mr = IMATH_INTERNAL_NAMESPACE::abs (r) / + std::numeric_limits::min (); + + for (int i = 0; i < 2; ++i) + { + for (int j = 0; j < 2; ++j) + { + if (mr > IMATH_INTERNAL_NAMESPACE::abs (s.x[i][j])) + { + s.x[i][j] /= r; + } + else + { + return Matrix33 (); + } + } + } + } + + s.x[2][0] = -x[2][0] * s.x[0][0] - x[2][1] * s.x[1][0]; + s.x[2][1] = -x[2][0] * s.x[0][1] - x[2][1] * s.x[1][1]; + + return s; + } +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline T +Matrix33::minorOf (const int r, const int c) const IMATH_NOEXCEPT +{ + int r0 = 0 + (r < 1 ? 1 : 0); + int r1 = 1 + (r < 2 ? 1 : 0); + int c0 = 0 + (c < 1 ? 1 : 0); + int c1 = 1 + (c < 2 ? 1 : 0); + + return x[r0][c0] * x[r1][c1] - x[r1][c0] * x[r0][c1]; +} + +template +IMATH_HOSTDEVICE constexpr inline T +Matrix33::fastMinor ( + const int r0, const int r1, const int c0, const int c1) const IMATH_NOEXCEPT +{ + return x[r0][c0] * x[r1][c1] - x[r0][c1] * x[r1][c0]; +} + +template +IMATH_HOSTDEVICE constexpr inline T +Matrix33::determinant () const IMATH_NOEXCEPT +{ + return x[0][0] * (x[1][1] * x[2][2] - x[1][2] * x[2][1]) + + x[0][1] * (x[1][2] * x[2][0] - x[1][0] * x[2][2]) + + x[0][2] * (x[1][0] * x[2][1] - x[1][1] * x[2][0]); +} + +template +IMATH_HOSTDEVICE constexpr inline T +Matrix33::trace () const IMATH_NOEXCEPT +{ + return x[0][0] + x[1][1] + x[2][2]; +} + +template +template +IMATH_HOSTDEVICE inline const Matrix33& +Matrix33::setRotation (S r) IMATH_NOEXCEPT +{ + S cos_r, sin_r; + + cos_r = cos ((T) r); + sin_r = sin ((T) r); + + x[0][0] = cos_r; + x[0][1] = sin_r; + x[0][2] = 0; + + x[1][0] = -sin_r; + x[1][1] = cos_r; + x[1][2] = 0; + + x[2][0] = 0; + x[2][1] = 0; + x[2][2] = 1; + + return *this; +} + +template +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline const Matrix33& + Matrix33::rotate (S r) IMATH_NOEXCEPT +{ + *this *= Matrix33 ().setRotation (r); + return *this; +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline const Matrix33& + Matrix33::setScale (T s) IMATH_NOEXCEPT +{ + // + // Set the matrix to a 2D homogeneous transform scale: + // | s 0 0 | + // | 0 s 0 | + // | 0 0 1 | + // + + x[0][0] = s; + x[0][1] = 0; + x[0][2] = 0; + x[1][0] = 0; + x[1][1] = s; + x[1][2] = 0; + x[2][0] = 0; + x[2][1] = 0; + x[2][2] = 1; + return *this; +} + +template +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline const Matrix33& + Matrix33::setScale (const Vec2& s) IMATH_NOEXCEPT +{ + // + // Set the matrix to a 2D homogeneous transform scale: + // | s.x 0 0 | + // | 0 s.y 0 | + // | 0 0 1 | + // + + x[0][0] = s.x; + x[0][1] = 0; + x[0][2] = 0; + x[1][0] = 0; + x[1][1] = s.y; + x[1][2] = 0; + x[2][0] = 0; + x[2][1] = 0; + x[2][2] = 1; + return *this; +} + +template +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline const Matrix33& + Matrix33::scale (const Vec2& s) IMATH_NOEXCEPT +{ + x[0][0] *= s.x; + x[0][1] *= s.x; + x[0][2] *= s.x; + + x[1][0] *= s.y; + x[1][1] *= s.y; + x[1][2] *= s.y; + + return *this; +} + +template +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline const Matrix33& + Matrix33::setTranslation (const Vec2& t) IMATH_NOEXCEPT +{ + x[0][0] = 1; + x[0][1] = 0; + x[0][2] = 0; + + x[1][0] = 0; + x[1][1] = 1; + x[1][2] = 0; + + x[2][0] = t.x; + x[2][1] = t.y; + x[2][2] = 1; + + return *this; +} + +template +IMATH_HOSTDEVICE constexpr inline Vec2 +Matrix33::translation () const IMATH_NOEXCEPT +{ + return Vec2 (x[2][0], x[2][1]); +} + +template +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline const Matrix33& + Matrix33::translate (const Vec2& t) IMATH_NOEXCEPT +{ + x[2][0] += t.x * x[0][0] + t.y * x[1][0]; + x[2][1] += t.x * x[0][1] + t.y * x[1][1]; + x[2][2] += t.x * x[0][2] + t.y * x[1][2]; + + return *this; +} + +template +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline const Matrix33& + Matrix33::setShear (const S& xy) IMATH_NOEXCEPT +{ + x[0][0] = 1; + x[0][1] = 0; + x[0][2] = 0; + + x[1][0] = xy; + x[1][1] = 1; + x[1][2] = 0; + + x[2][0] = 0; + x[2][1] = 0; + x[2][2] = 1; + + return *this; +} + +template +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline const Matrix33& + Matrix33::setShear (const Vec2& h) IMATH_NOEXCEPT +{ + x[0][0] = 1; + x[0][1] = h.y; + x[0][2] = 0; + + x[1][0] = h.x; + x[1][1] = 1; + x[1][2] = 0; + + x[2][0] = 0; + x[2][1] = 0; + x[2][2] = 1; + + return *this; +} + +template +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline const Matrix33& + Matrix33::shear (const S& xy) IMATH_NOEXCEPT +{ + // + // In this case, we don't need a temp. copy of the matrix + // because we never use a value on the RHS after we've + // changed it on the LHS. + // + + x[1][0] += xy * x[0][0]; + x[1][1] += xy * x[0][1]; + x[1][2] += xy * x[0][2]; + + return *this; +} + +template +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline const Matrix33& + Matrix33::shear (const Vec2& h) IMATH_NOEXCEPT +{ + Matrix33 P (*this); + + x[0][0] = P.x[0][0] + h.y * P.x[1][0]; + x[0][1] = P.x[0][1] + h.y * P.x[1][1]; + x[0][2] = P.x[0][2] + h.y * P.x[1][2]; + + x[1][0] = P.x[1][0] + h.x * P.x[0][0]; + x[1][1] = P.x[1][1] + h.x * P.x[0][1]; + x[1][2] = P.x[1][2] + h.x * P.x[0][2]; + + return *this; +} + +//--------------------------- +// Implementation of Matrix44 +//--------------------------- + +template +IMATH_HOSTDEVICE inline T* +Matrix44::operator[] (int i) IMATH_NOEXCEPT +{ + return x[i]; +} + +template +IMATH_HOSTDEVICE inline const T* +Matrix44::operator[] (int i) const IMATH_NOEXCEPT +{ + return x[i]; +} + +template +IMATH_HOSTDEVICE + IMATH_CONSTEXPR14 inline Matrix44::Matrix44 () IMATH_NOEXCEPT +{ + x[0][0] = 1; + x[0][1] = 0; + x[0][2] = 0; + x[0][3] = 0; + x[1][0] = 0; + x[1][1] = 1; + x[1][2] = 0; + x[1][3] = 0; + x[2][0] = 0; + x[2][1] = 0; + x[2][2] = 1; + x[2][3] = 0; + x[3][0] = 0; + x[3][1] = 0; + x[3][2] = 0; + x[3][3] = 1; +} + +template +IMATH_HOSTDEVICE + IMATH_CONSTEXPR14 inline Matrix44::Matrix44 (T a) IMATH_NOEXCEPT +{ + x[0][0] = a; + x[0][1] = a; + x[0][2] = a; + x[0][3] = a; + x[1][0] = a; + x[1][1] = a; + x[1][2] = a; + x[1][3] = a; + x[2][0] = a; + x[2][1] = a; + x[2][2] = a; + x[2][3] = a; + x[3][0] = a; + x[3][1] = a; + x[3][2] = a; + x[3][3] = a; +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline Matrix44::Matrix44 ( + const T a[4][4]) IMATH_NOEXCEPT +{ + x[0][0] = a[0][0]; + x[0][1] = a[0][1]; + x[0][2] = a[0][2]; + x[0][3] = a[0][3]; + x[1][0] = a[1][0]; + x[1][1] = a[1][1]; + x[1][2] = a[1][2]; + x[1][3] = a[1][3]; + x[2][0] = a[2][0]; + x[2][1] = a[2][1]; + x[2][2] = a[2][2]; + x[2][3] = a[2][3]; + x[3][0] = a[3][0]; + x[3][1] = a[3][1]; + x[3][2] = a[3][2]; + x[3][3] = a[3][3]; +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline Matrix44::Matrix44 ( + T a, + T b, + T c, + T d, + T e, + T f, + T g, + T h, + T i, + T j, + T k, + T l, + T m, + T n, + T o, + T p) IMATH_NOEXCEPT +{ + x[0][0] = a; + x[0][1] = b; + x[0][2] = c; + x[0][3] = d; + x[1][0] = e; + x[1][1] = f; + x[1][2] = g; + x[1][3] = h; + x[2][0] = i; + x[2][1] = j; + x[2][2] = k; + x[2][3] = l; + x[3][0] = m; + x[3][1] = n; + x[3][2] = o; + x[3][3] = p; +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline Matrix44::Matrix44 ( + Matrix33 r, Vec3 t) IMATH_NOEXCEPT +{ + x[0][0] = r.x[0][0]; + x[0][1] = r.x[0][1]; + x[0][2] = r.x[0][2]; + x[0][3] = 0; + x[1][0] = r.x[1][0]; + x[1][1] = r.x[1][1]; + x[1][2] = r.x[1][2]; + x[1][3] = 0; + x[2][0] = r.x[2][0]; + x[2][1] = r.x[2][1]; + x[2][2] = r.x[2][2]; + x[2][3] = 0; + x[3][0] = t.x; + x[3][1] = t.y; + x[3][2] = t.z; + x[3][3] = 1; +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline Matrix44::Matrix44 ( + const Matrix44& v) IMATH_NOEXCEPT +{ + x[0][0] = v.x[0][0]; + x[0][1] = v.x[0][1]; + x[0][2] = v.x[0][2]; + x[0][3] = v.x[0][3]; + x[1][0] = v.x[1][0]; + x[1][1] = v.x[1][1]; + x[1][2] = v.x[1][2]; + x[1][3] = v.x[1][3]; + x[2][0] = v.x[2][0]; + x[2][1] = v.x[2][1]; + x[2][2] = v.x[2][2]; + x[2][3] = v.x[2][3]; + x[3][0] = v.x[3][0]; + x[3][1] = v.x[3][1]; + x[3][2] = v.x[3][2]; + x[3][3] = v.x[3][3]; +} + +template +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline Matrix44::Matrix44 ( + const Matrix44& v) IMATH_NOEXCEPT +{ + x[0][0] = T (v.x[0][0]); + x[0][1] = T (v.x[0][1]); + x[0][2] = T (v.x[0][2]); + x[0][3] = T (v.x[0][3]); + x[1][0] = T (v.x[1][0]); + x[1][1] = T (v.x[1][1]); + x[1][2] = T (v.x[1][2]); + x[1][3] = T (v.x[1][3]); + x[2][0] = T (v.x[2][0]); + x[2][1] = T (v.x[2][1]); + x[2][2] = T (v.x[2][2]); + x[2][3] = T (v.x[2][3]); + x[3][0] = T (v.x[3][0]); + x[3][1] = T (v.x[3][1]); + x[3][2] = T (v.x[3][2]); + x[3][3] = T (v.x[3][3]); +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline const Matrix44& +Matrix44::operator= (const Matrix44& v) IMATH_NOEXCEPT +{ + x[0][0] = v.x[0][0]; + x[0][1] = v.x[0][1]; + x[0][2] = v.x[0][2]; + x[0][3] = v.x[0][3]; + x[1][0] = v.x[1][0]; + x[1][1] = v.x[1][1]; + x[1][2] = v.x[1][2]; + x[1][3] = v.x[1][3]; + x[2][0] = v.x[2][0]; + x[2][1] = v.x[2][1]; + x[2][2] = v.x[2][2]; + x[2][3] = v.x[2][3]; + x[3][0] = v.x[3][0]; + x[3][1] = v.x[3][1]; + x[3][2] = v.x[3][2]; + x[3][3] = v.x[3][3]; + return *this; +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline const Matrix44& +Matrix44::operator= (T a) IMATH_NOEXCEPT +{ + x[0][0] = a; + x[0][1] = a; + x[0][2] = a; + x[0][3] = a; + x[1][0] = a; + x[1][1] = a; + x[1][2] = a; + x[1][3] = a; + x[2][0] = a; + x[2][1] = a; + x[2][2] = a; + x[2][3] = a; + x[3][0] = a; + x[3][1] = a; + x[3][2] = a; + x[3][3] = a; + return *this; +} + +template +IMATH_HOSTDEVICE inline T* +Matrix44::getValue () IMATH_NOEXCEPT +{ + return reinterpret_cast (this); +} + +template +IMATH_HOSTDEVICE inline const T* +Matrix44::getValue () const IMATH_NOEXCEPT +{ + return reinterpret_cast (this); +} + +template +template +IMATH_HOSTDEVICE inline void +Matrix44::getValue (Matrix44& v) const IMATH_NOEXCEPT +{ + v.x[0][0] = x[0][0]; + v.x[0][1] = x[0][1]; + v.x[0][2] = x[0][2]; + v.x[0][3] = x[0][3]; + v.x[1][0] = x[1][0]; + v.x[1][1] = x[1][1]; + v.x[1][2] = x[1][2]; + v.x[1][3] = x[1][3]; + v.x[2][0] = x[2][0]; + v.x[2][1] = x[2][1]; + v.x[2][2] = x[2][2]; + v.x[2][3] = x[2][3]; + v.x[3][0] = x[3][0]; + v.x[3][1] = x[3][1]; + v.x[3][2] = x[3][2]; + v.x[3][3] = x[3][3]; +} + +template +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline Matrix44& + Matrix44::setValue (const Matrix44& v) IMATH_NOEXCEPT +{ + x[0][0] = T(v.x[0][0]); + x[0][1] = T(v.x[0][1]); + x[0][2] = T(v.x[0][2]); + x[0][3] = T(v.x[0][3]); + x[1][0] = T(v.x[1][0]); + x[1][1] = T(v.x[1][1]); + x[1][2] = T(v.x[1][2]); + x[1][3] = T(v.x[1][3]); + x[2][0] = T(v.x[2][0]); + x[2][1] = T(v.x[2][1]); + x[2][2] = T(v.x[2][2]); + x[2][3] = T(v.x[2][3]); + x[3][0] = T(v.x[3][0]); + x[3][1] = T(v.x[3][1]); + x[3][2] = T(v.x[3][2]); + x[3][3] = T(v.x[3][3]); + return *this; +} + +template +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline Matrix44& + Matrix44::setTheMatrix (const Matrix44& v) IMATH_NOEXCEPT +{ + x[0][0] = v.x[0][0]; + x[0][1] = v.x[0][1]; + x[0][2] = v.x[0][2]; + x[0][3] = v.x[0][3]; + x[1][0] = v.x[1][0]; + x[1][1] = v.x[1][1]; + x[1][2] = v.x[1][2]; + x[1][3] = v.x[1][3]; + x[2][0] = v.x[2][0]; + x[2][1] = v.x[2][1]; + x[2][2] = v.x[2][2]; + x[2][3] = v.x[2][3]; + x[3][0] = v.x[3][0]; + x[3][1] = v.x[3][1]; + x[3][2] = v.x[3][2]; + x[3][3] = v.x[3][3]; + return *this; +} + +template +IMATH_HOSTDEVICE inline void +Matrix44::makeIdentity () IMATH_NOEXCEPT +{ + x[0][0] = 1; + x[0][1] = 0; + x[0][2] = 0; + x[0][3] = 0; + x[1][0] = 0; + x[1][1] = 1; + x[1][2] = 0; + x[1][3] = 0; + x[2][0] = 0; + x[2][1] = 0; + x[2][2] = 1; + x[2][3] = 0; + x[3][0] = 0; + x[3][1] = 0; + x[3][2] = 0; + x[3][3] = 1; +} + +template +IMATH_HOSTDEVICE constexpr inline bool +Matrix44::operator== (const Matrix44& v) const IMATH_NOEXCEPT +{ + return x[0][0] == v.x[0][0] && x[0][1] == v.x[0][1] && + x[0][2] == v.x[0][2] && x[0][3] == v.x[0][3] && + x[1][0] == v.x[1][0] && x[1][1] == v.x[1][1] && + x[1][2] == v.x[1][2] && x[1][3] == v.x[1][3] && + x[2][0] == v.x[2][0] && x[2][1] == v.x[2][1] && + x[2][2] == v.x[2][2] && x[2][3] == v.x[2][3] && + x[3][0] == v.x[3][0] && x[3][1] == v.x[3][1] && + x[3][2] == v.x[3][2] && x[3][3] == v.x[3][3]; +} + +template +IMATH_HOSTDEVICE constexpr inline bool +Matrix44::operator!= (const Matrix44& v) const IMATH_NOEXCEPT +{ + return x[0][0] != v.x[0][0] || x[0][1] != v.x[0][1] || + x[0][2] != v.x[0][2] || x[0][3] != v.x[0][3] || + x[1][0] != v.x[1][0] || x[1][1] != v.x[1][1] || + x[1][2] != v.x[1][2] || x[1][3] != v.x[1][3] || + x[2][0] != v.x[2][0] || x[2][1] != v.x[2][1] || + x[2][2] != v.x[2][2] || x[2][3] != v.x[2][3] || + x[3][0] != v.x[3][0] || x[3][1] != v.x[3][1] || + x[3][2] != v.x[3][2] || x[3][3] != v.x[3][3]; +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline bool +Matrix44::equalWithAbsError (const Matrix44& m, T e) const IMATH_NOEXCEPT +{ + for (int i = 0; i < 4; i++) + for (int j = 0; j < 4; j++) + if (!IMATH_INTERNAL_NAMESPACE::equalWithAbsError ( + (*this).x[i][j], m.x[i][j], e)) + return false; + + return true; +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline bool +Matrix44::equalWithRelError (const Matrix44& m, T e) const IMATH_NOEXCEPT +{ + for (int i = 0; i < 4; i++) + for (int j = 0; j < 4; j++) + if (!IMATH_INTERNAL_NAMESPACE::equalWithRelError ( + (*this).x[i][j], m.x[i][j], e)) + return false; + + return true; +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline const Matrix44& +Matrix44::operator+= (const Matrix44& v) IMATH_NOEXCEPT +{ + x[0][0] += v.x[0][0]; + x[0][1] += v.x[0][1]; + x[0][2] += v.x[0][2]; + x[0][3] += v.x[0][3]; + x[1][0] += v.x[1][0]; + x[1][1] += v.x[1][1]; + x[1][2] += v.x[1][2]; + x[1][3] += v.x[1][3]; + x[2][0] += v.x[2][0]; + x[2][1] += v.x[2][1]; + x[2][2] += v.x[2][2]; + x[2][3] += v.x[2][3]; + x[3][0] += v.x[3][0]; + x[3][1] += v.x[3][1]; + x[3][2] += v.x[3][2]; + x[3][3] += v.x[3][3]; + + return *this; +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline const Matrix44& +Matrix44::operator+= (T a) IMATH_NOEXCEPT +{ + x[0][0] += a; + x[0][1] += a; + x[0][2] += a; + x[0][3] += a; + x[1][0] += a; + x[1][1] += a; + x[1][2] += a; + x[1][3] += a; + x[2][0] += a; + x[2][1] += a; + x[2][2] += a; + x[2][3] += a; + x[3][0] += a; + x[3][1] += a; + x[3][2] += a; + x[3][3] += a; + + return *this; +} + +template +IMATH_HOSTDEVICE constexpr inline Matrix44 +Matrix44::operator+ (const Matrix44& v) const IMATH_NOEXCEPT +{ + return Matrix44 ( + x[0][0] + v.x[0][0], + x[0][1] + v.x[0][1], + x[0][2] + v.x[0][2], + x[0][3] + v.x[0][3], + x[1][0] + v.x[1][0], + x[1][1] + v.x[1][1], + x[1][2] + v.x[1][2], + x[1][3] + v.x[1][3], + x[2][0] + v.x[2][0], + x[2][1] + v.x[2][1], + x[2][2] + v.x[2][2], + x[2][3] + v.x[2][3], + x[3][0] + v.x[3][0], + x[3][1] + v.x[3][1], + x[3][2] + v.x[3][2], + x[3][3] + v.x[3][3]); +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline const Matrix44& +Matrix44::operator-= (const Matrix44& v) IMATH_NOEXCEPT +{ + x[0][0] -= v.x[0][0]; + x[0][1] -= v.x[0][1]; + x[0][2] -= v.x[0][2]; + x[0][3] -= v.x[0][3]; + x[1][0] -= v.x[1][0]; + x[1][1] -= v.x[1][1]; + x[1][2] -= v.x[1][2]; + x[1][3] -= v.x[1][3]; + x[2][0] -= v.x[2][0]; + x[2][1] -= v.x[2][1]; + x[2][2] -= v.x[2][2]; + x[2][3] -= v.x[2][3]; + x[3][0] -= v.x[3][0]; + x[3][1] -= v.x[3][1]; + x[3][2] -= v.x[3][2]; + x[3][3] -= v.x[3][3]; + + return *this; +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline const Matrix44& +Matrix44::operator-= (T a) IMATH_NOEXCEPT +{ + x[0][0] -= a; + x[0][1] -= a; + x[0][2] -= a; + x[0][3] -= a; + x[1][0] -= a; + x[1][1] -= a; + x[1][2] -= a; + x[1][3] -= a; + x[2][0] -= a; + x[2][1] -= a; + x[2][2] -= a; + x[2][3] -= a; + x[3][0] -= a; + x[3][1] -= a; + x[3][2] -= a; + x[3][3] -= a; + + return *this; +} + +template +IMATH_HOSTDEVICE constexpr inline Matrix44 +Matrix44::operator- (const Matrix44& v) const IMATH_NOEXCEPT +{ + return Matrix44 ( + x[0][0] - v.x[0][0], + x[0][1] - v.x[0][1], + x[0][2] - v.x[0][2], + x[0][3] - v.x[0][3], + x[1][0] - v.x[1][0], + x[1][1] - v.x[1][1], + x[1][2] - v.x[1][2], + x[1][3] - v.x[1][3], + x[2][0] - v.x[2][0], + x[2][1] - v.x[2][1], + x[2][2] - v.x[2][2], + x[2][3] - v.x[2][3], + x[3][0] - v.x[3][0], + x[3][1] - v.x[3][1], + x[3][2] - v.x[3][2], + x[3][3] - v.x[3][3]); +} + +template +IMATH_HOSTDEVICE constexpr inline Matrix44 +Matrix44::operator- () const IMATH_NOEXCEPT +{ + return Matrix44 ( + -x[0][0], + -x[0][1], + -x[0][2], + -x[0][3], + -x[1][0], + -x[1][1], + -x[1][2], + -x[1][3], + -x[2][0], + -x[2][1], + -x[2][2], + -x[2][3], + -x[3][0], + -x[3][1], + -x[3][2], + -x[3][3]); +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline const Matrix44& + Matrix44::negate () IMATH_NOEXCEPT +{ + x[0][0] = -x[0][0]; + x[0][1] = -x[0][1]; + x[0][2] = -x[0][2]; + x[0][3] = -x[0][3]; + x[1][0] = -x[1][0]; + x[1][1] = -x[1][1]; + x[1][2] = -x[1][2]; + x[1][3] = -x[1][3]; + x[2][0] = -x[2][0]; + x[2][1] = -x[2][1]; + x[2][2] = -x[2][2]; + x[2][3] = -x[2][3]; + x[3][0] = -x[3][0]; + x[3][1] = -x[3][1]; + x[3][2] = -x[3][2]; + x[3][3] = -x[3][3]; + + return *this; +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline const Matrix44& +Matrix44::operator*= (T a) IMATH_NOEXCEPT +{ + x[0][0] *= a; + x[0][1] *= a; + x[0][2] *= a; + x[0][3] *= a; + x[1][0] *= a; + x[1][1] *= a; + x[1][2] *= a; + x[1][3] *= a; + x[2][0] *= a; + x[2][1] *= a; + x[2][2] *= a; + x[2][3] *= a; + x[3][0] *= a; + x[3][1] *= a; + x[3][2] *= a; + x[3][3] *= a; + + return *this; +} + +template +IMATH_HOSTDEVICE constexpr inline Matrix44 +Matrix44::operator* (T a) const IMATH_NOEXCEPT +{ + return Matrix44 ( + x[0][0] * a, + x[0][1] * a, + x[0][2] * a, + x[0][3] * a, + x[1][0] * a, + x[1][1] * a, + x[1][2] * a, + x[1][3] * a, + x[2][0] * a, + x[2][1] * a, + x[2][2] * a, + x[2][3] * a, + x[3][0] * a, + x[3][1] * a, + x[3][2] * a, + x[3][3] * a); +} + +/// Matrix-scalar multiplication +template +IMATH_HOSTDEVICE inline Matrix44 +operator* (T a, const Matrix44& v) IMATH_NOEXCEPT +{ + return v * a; +} + +template +IMATH_HOSTDEVICE inline IMATH_CONSTEXPR14 Matrix44 +Matrix44::multiply (const Matrix44& a, const Matrix44& b) IMATH_NOEXCEPT +{ + const auto a00 = a.x[0][0]; + const auto a01 = a.x[0][1]; + const auto a02 = a.x[0][2]; + const auto a03 = a.x[0][3]; + + const auto c00 = + a00 * b.x[0][0] + a01 * b.x[1][0] + a02 * b.x[2][0] + a03 * b.x[3][0]; + const auto c01 = + a00 * b.x[0][1] + a01 * b.x[1][1] + a02 * b.x[2][1] + a03 * b.x[3][1]; + const auto c02 = + a00 * b.x[0][2] + a01 * b.x[1][2] + a02 * b.x[2][2] + a03 * b.x[3][2]; + const auto c03 = + a00 * b.x[0][3] + a01 * b.x[1][3] + a02 * b.x[2][3] + a03 * b.x[3][3]; + + const auto a10 = a.x[1][0]; + const auto a11 = a.x[1][1]; + const auto a12 = a.x[1][2]; + const auto a13 = a.x[1][3]; + + const auto c10 = + a10 * b.x[0][0] + a11 * b.x[1][0] + a12 * b.x[2][0] + a13 * b.x[3][0]; + const auto c11 = + a10 * b.x[0][1] + a11 * b.x[1][1] + a12 * b.x[2][1] + a13 * b.x[3][1]; + const auto c12 = + a10 * b.x[0][2] + a11 * b.x[1][2] + a12 * b.x[2][2] + a13 * b.x[3][2]; + const auto c13 = + a10 * b.x[0][3] + a11 * b.x[1][3] + a12 * b.x[2][3] + a13 * b.x[3][3]; + + const auto a20 = a.x[2][0]; + const auto a21 = a.x[2][1]; + const auto a22 = a.x[2][2]; + const auto a23 = a.x[2][3]; + + const auto c20 = + a20 * b.x[0][0] + a21 * b.x[1][0] + a22 * b.x[2][0] + a23 * b.x[3][0]; + const auto c21 = + a20 * b.x[0][1] + a21 * b.x[1][1] + a22 * b.x[2][1] + a23 * b.x[3][1]; + const auto c22 = + a20 * b.x[0][2] + a21 * b.x[1][2] + a22 * b.x[2][2] + a23 * b.x[3][2]; + const auto c23 = + a20 * b.x[0][3] + a21 * b.x[1][3] + a22 * b.x[2][3] + a23 * b.x[3][3]; + + const auto a30 = a.x[3][0]; + const auto a31 = a.x[3][1]; + const auto a32 = a.x[3][2]; + const auto a33 = a.x[3][3]; + + const auto c30 = + a30 * b.x[0][0] + a31 * b.x[1][0] + a32 * b.x[2][0] + a33 * b.x[3][0]; + const auto c31 = + a30 * b.x[0][1] + a31 * b.x[1][1] + a32 * b.x[2][1] + a33 * b.x[3][1]; + const auto c32 = + a30 * b.x[0][2] + a31 * b.x[1][2] + a32 * b.x[2][2] + a33 * b.x[3][2]; + const auto c33 = + a30 * b.x[0][3] + a31 * b.x[1][3] + a32 * b.x[2][3] + a33 * b.x[3][3]; + return Matrix44 ( + c00, + c01, + c02, + c03, + c10, + c11, + c12, + c13, + c20, + c21, + c22, + c23, + c30, + c31, + c32, + c33); +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline const Matrix44& +Matrix44::operator*= (const Matrix44& v) IMATH_NOEXCEPT +{ + *this = multiply (*this, v); + return *this; +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline Matrix44 +Matrix44::operator* (const Matrix44& v) const IMATH_NOEXCEPT +{ + return multiply (*this, v); +} + +template +IMATH_HOSTDEVICE inline void +Matrix44::multiply ( + const Matrix44& a, const Matrix44& b, Matrix44& c) IMATH_NOEXCEPT +{ + c = multiply (a, b); +} + +template +template +IMATH_HOSTDEVICE inline void +Matrix44::multVecMatrix (const Vec3& src, Vec3& dst) const + IMATH_NOEXCEPT +{ + S a, b, c, w; + + a = src.x * x[0][0] + src.y * x[1][0] + src.z * x[2][0] + x[3][0]; + b = src.x * x[0][1] + src.y * x[1][1] + src.z * x[2][1] + x[3][1]; + c = src.x * x[0][2] + src.y * x[1][2] + src.z * x[2][2] + x[3][2]; + w = src.x * x[0][3] + src.y * x[1][3] + src.z * x[2][3] + x[3][3]; + + dst.x = a / w; + dst.y = b / w; + dst.z = c / w; +} + +template +template +IMATH_HOSTDEVICE inline void +Matrix44::multDirMatrix (const Vec3& src, Vec3& dst) const + IMATH_NOEXCEPT +{ + S a, b, c; + + a = src.x * x[0][0] + src.y * x[1][0] + src.z * x[2][0]; + b = src.x * x[0][1] + src.y * x[1][1] + src.z * x[2][1]; + c = src.x * x[0][2] + src.y * x[1][2] + src.z * x[2][2]; + + dst.x = a; + dst.y = b; + dst.z = c; +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline const Matrix44& +Matrix44::operator/= (T a) IMATH_NOEXCEPT +{ + x[0][0] /= a; + x[0][1] /= a; + x[0][2] /= a; + x[0][3] /= a; + x[1][0] /= a; + x[1][1] /= a; + x[1][2] /= a; + x[1][3] /= a; + x[2][0] /= a; + x[2][1] /= a; + x[2][2] /= a; + x[2][3] /= a; + x[3][0] /= a; + x[3][1] /= a; + x[3][2] /= a; + x[3][3] /= a; + + return *this; +} + +template +IMATH_HOSTDEVICE constexpr inline Matrix44 +Matrix44::operator/ (T a) const IMATH_NOEXCEPT +{ + return Matrix44 ( + x[0][0] / a, + x[0][1] / a, + x[0][2] / a, + x[0][3] / a, + x[1][0] / a, + x[1][1] / a, + x[1][2] / a, + x[1][3] / a, + x[2][0] / a, + x[2][1] / a, + x[2][2] / a, + x[2][3] / a, + x[3][0] / a, + x[3][1] / a, + x[3][2] / a, + x[3][3] / a); +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline const Matrix44& + Matrix44::transpose () IMATH_NOEXCEPT +{ + Matrix44 tmp ( + x[0][0], + x[1][0], + x[2][0], + x[3][0], + x[0][1], + x[1][1], + x[2][1], + x[3][1], + x[0][2], + x[1][2], + x[2][2], + x[3][2], + x[0][3], + x[1][3], + x[2][3], + x[3][3]); + *this = tmp; + return *this; +} + +template +IMATH_HOSTDEVICE constexpr inline Matrix44 +Matrix44::transposed () const IMATH_NOEXCEPT +{ + return Matrix44 ( + x[0][0], + x[1][0], + x[2][0], + x[3][0], + x[0][1], + x[1][1], + x[2][1], + x[3][1], + x[0][2], + x[1][2], + x[2][2], + x[3][2], + x[0][3], + x[1][3], + x[2][3], + x[3][3]); +} + +template +IMATH_CONSTEXPR14 inline const Matrix44& +Matrix44::gjInvert (bool singExc) +{ + *this = gjInverse (singExc); + return *this; +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline const Matrix44& + Matrix44::gjInvert () IMATH_NOEXCEPT +{ + *this = gjInverse (); + return *this; +} + +template +inline Matrix44 +Matrix44::gjInverse (bool singExc) const +{ + int i, j, k; + Matrix44 s; + Matrix44 t (*this); + + // Forward elimination + + for (i = 0; i < 3; i++) + { + int pivot = i; + + T pivotsize = t.x[i][i]; + + if (pivotsize < 0) pivotsize = -pivotsize; + + for (j = i + 1; j < 4; j++) + { + T tmp = t.x[j][i]; + + if (tmp < 0) tmp = -tmp; + + if (tmp > pivotsize) + { + pivot = j; + pivotsize = tmp; + } + } + + if (pivotsize == 0) + { + if (singExc) + throw std::invalid_argument ("Cannot invert singular matrix."); + + return Matrix44 (); + } + + if (pivot != i) + { + for (j = 0; j < 4; j++) + { + T tmp; + + tmp = t.x[i][j]; + t.x[i][j] = t.x[pivot][j]; + t.x[pivot][j] = tmp; + + tmp = s.x[i][j]; + s.x[i][j] = s.x[pivot][j]; + s.x[pivot][j] = tmp; + } + } + + for (j = i + 1; j < 4; j++) + { + T f = t.x[j][i] / t.x[i][i]; + + for (k = 0; k < 4; k++) + { + t.x[j][k] -= f * t.x[i][k]; + s.x[j][k] -= f * s.x[i][k]; + } + } + } + + // Backward substitution + + for (i = 3; i >= 0; --i) + { + T f; + + if ((f = t.x[i][i]) == 0) + { + if (singExc) + throw std::invalid_argument ("Cannot invert singular matrix."); + + return Matrix44 (); + } + + for (j = 0; j < 4; j++) + { + t.x[i][j] /= f; + s.x[i][j] /= f; + } + + for (j = 0; j < i; j++) + { + f = t.x[j][i]; + + for (k = 0; k < 4; k++) + { + t.x[j][k] -= f * t.x[i][k]; + s.x[j][k] -= f * s.x[i][k]; + } + } + } + + return s; +} + +template +IMATH_HOSTDEVICE inline Matrix44 +Matrix44::gjInverse () const IMATH_NOEXCEPT +{ + int i, j, k; + Matrix44 s; + Matrix44 t (*this); + + // Forward elimination + + for (i = 0; i < 3; i++) + { + int pivot = i; + + T pivotsize = t.x[i][i]; + + if (pivotsize < 0) pivotsize = -pivotsize; + + for (j = i + 1; j < 4; j++) + { + T tmp = t.x[j][i]; + + if (tmp < 0) tmp = -tmp; + + if (tmp > pivotsize) + { + pivot = j; + pivotsize = tmp; + } + } + + if (pivotsize == 0) { return Matrix44 (); } + + if (pivot != i) + { + for (j = 0; j < 4; j++) + { + T tmp; + + tmp = t.x[i][j]; + t.x[i][j] = t.x[pivot][j]; + t.x[pivot][j] = tmp; + + tmp = s.x[i][j]; + s.x[i][j] = s.x[pivot][j]; + s.x[pivot][j] = tmp; + } + } + + for (j = i + 1; j < 4; j++) + { + T f = t.x[j][i] / t.x[i][i]; + + for (k = 0; k < 4; k++) + { + t.x[j][k] -= f * t.x[i][k]; + s.x[j][k] -= f * s.x[i][k]; + } + } + } + + // Backward substitution + + for (i = 3; i >= 0; --i) + { + T f; + + if ((f = t.x[i][i]) == 0) { return Matrix44 (); } + + for (j = 0; j < 4; j++) + { + t.x[i][j] /= f; + s.x[i][j] /= f; + } + + for (j = 0; j < i; j++) + { + f = t.x[j][i]; + + for (k = 0; k < 4; k++) + { + t.x[j][k] -= f * t.x[i][k]; + s.x[j][k] -= f * s.x[i][k]; + } + } + } + + return s; +} + +template +IMATH_CONSTEXPR14 inline const Matrix44& +Matrix44::invert (bool singExc) +{ + *this = inverse (singExc); + return *this; +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline const Matrix44& + Matrix44::invert () IMATH_NOEXCEPT +{ + *this = inverse (); + return *this; +} + +template +IMATH_CONSTEXPR14 inline Matrix44 +Matrix44::inverse (bool singExc) const +{ + if (x[0][3] != 0 || x[1][3] != 0 || x[2][3] != 0 || x[3][3] != 1) + return gjInverse (singExc); + + Matrix44 s ( + x[1][1] * x[2][2] - x[2][1] * x[1][2], + x[2][1] * x[0][2] - x[0][1] * x[2][2], + x[0][1] * x[1][2] - x[1][1] * x[0][2], + 0, + + x[2][0] * x[1][2] - x[1][0] * x[2][2], + x[0][0] * x[2][2] - x[2][0] * x[0][2], + x[1][0] * x[0][2] - x[0][0] * x[1][2], + 0, + + x[1][0] * x[2][1] - x[2][0] * x[1][1], + x[2][0] * x[0][1] - x[0][0] * x[2][1], + x[0][0] * x[1][1] - x[1][0] * x[0][1], + 0, + + 0, + 0, + 0, + 1); + + T r = x[0][0] * s.x[0][0] + x[0][1] * s.x[1][0] + x[0][2] * s.x[2][0]; + + if (IMATH_INTERNAL_NAMESPACE::abs (r) >= 1) + { + for (int i = 0; i < 3; ++i) + { + for (int j = 0; j < 3; ++j) + { + s.x[i][j] /= r; + } + } + } + else + { + T mr = + IMATH_INTERNAL_NAMESPACE::abs (r) / std::numeric_limits::min (); + + for (int i = 0; i < 3; ++i) + { + for (int j = 0; j < 3; ++j) + { + if (mr > IMATH_INTERNAL_NAMESPACE::abs (s.x[i][j])) + { + s.x[i][j] /= r; + } + else + { + if (singExc) + throw std::invalid_argument ( + "Cannot invert singular matrix."); + + return Matrix44 (); + } + } + } + } + + s.x[3][0] = + -x[3][0] * s.x[0][0] - x[3][1] * s.x[1][0] - x[3][2] * s.x[2][0]; + s.x[3][1] = + -x[3][0] * s.x[0][1] - x[3][1] * s.x[1][1] - x[3][2] * s.x[2][1]; + s.x[3][2] = + -x[3][0] * s.x[0][2] - x[3][1] * s.x[1][2] - x[3][2] * s.x[2][2]; + + return s; +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline Matrix44 + Matrix44::inverse () const IMATH_NOEXCEPT +{ + if (x[0][3] != 0 || x[1][3] != 0 || x[2][3] != 0 || x[3][3] != 1) + return gjInverse (); + + Matrix44 s ( + x[1][1] * x[2][2] - x[2][1] * x[1][2], + x[2][1] * x[0][2] - x[0][1] * x[2][2], + x[0][1] * x[1][2] - x[1][1] * x[0][2], + 0, + + x[2][0] * x[1][2] - x[1][0] * x[2][2], + x[0][0] * x[2][2] - x[2][0] * x[0][2], + x[1][0] * x[0][2] - x[0][0] * x[1][2], + 0, + + x[1][0] * x[2][1] - x[2][0] * x[1][1], + x[2][0] * x[0][1] - x[0][0] * x[2][1], + x[0][0] * x[1][1] - x[1][0] * x[0][1], + 0, + + 0, + 0, + 0, + 1); + + T r = x[0][0] * s.x[0][0] + x[0][1] * s.x[1][0] + x[0][2] * s.x[2][0]; + + if (IMATH_INTERNAL_NAMESPACE::abs (r) >= 1) + { + for (int i = 0; i < 3; ++i) + { + for (int j = 0; j < 3; ++j) + { + s.x[i][j] /= r; + } + } + } + else + { + T mr = + IMATH_INTERNAL_NAMESPACE::abs (r) / std::numeric_limits::min (); + + for (int i = 0; i < 3; ++i) + { + for (int j = 0; j < 3; ++j) + { + if (mr > IMATH_INTERNAL_NAMESPACE::abs (s.x[i][j])) + { + s.x[i][j] /= r; + } + else + { + return Matrix44 (); + } + } + } + } + + s.x[3][0] = + -x[3][0] * s.x[0][0] - x[3][1] * s.x[1][0] - x[3][2] * s.x[2][0]; + s.x[3][1] = + -x[3][0] * s.x[0][1] - x[3][1] * s.x[1][1] - x[3][2] * s.x[2][1]; + s.x[3][2] = + -x[3][0] * s.x[0][2] - x[3][1] * s.x[1][2] - x[3][2] * s.x[2][2]; + + return s; +} + +template +IMATH_HOSTDEVICE constexpr inline T +Matrix44::fastMinor ( + const int r0, + const int r1, + const int r2, + const int c0, + const int c1, + const int c2) const IMATH_NOEXCEPT +{ + return x[r0][c0] * (x[r1][c1] * x[r2][c2] - x[r1][c2] * x[r2][c1]) + + x[r0][c1] * (x[r1][c2] * x[r2][c0] - x[r1][c0] * x[r2][c2]) + + x[r0][c2] * (x[r1][c0] * x[r2][c1] - x[r1][c1] * x[r2][c0]); +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline T +Matrix44::minorOf (const int r, const int c) const IMATH_NOEXCEPT +{ + int r0 = 0 + (r < 1 ? 1 : 0); + int r1 = 1 + (r < 2 ? 1 : 0); + int r2 = 2 + (r < 3 ? 1 : 0); + int c0 = 0 + (c < 1 ? 1 : 0); + int c1 = 1 + (c < 2 ? 1 : 0); + int c2 = 2 + (c < 3 ? 1 : 0); + + Matrix33 working ( + x[r0][c0], + x[r1][c0], + x[r2][c0], + x[r0][c1], + x[r1][c1], + x[r2][c1], + x[r0][c2], + x[r1][c2], + x[r2][c2]); + + return working.determinant (); +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline T +Matrix44::determinant () const IMATH_NOEXCEPT +{ + T sum = (T) 0; + + if (x[0][3] != 0.) sum -= x[0][3] * fastMinor (1, 2, 3, 0, 1, 2); + if (x[1][3] != 0.) sum += x[1][3] * fastMinor (0, 2, 3, 0, 1, 2); + if (x[2][3] != 0.) sum -= x[2][3] * fastMinor (0, 1, 3, 0, 1, 2); + if (x[3][3] != 0.) sum += x[3][3] * fastMinor (0, 1, 2, 0, 1, 2); + + return sum; +} + +template +IMATH_HOSTDEVICE constexpr inline T +Matrix44::trace () const IMATH_NOEXCEPT +{ + return x[0][0] + x[1][1] + x[2][2] + x[3][3]; +} + +template +template +IMATH_HOSTDEVICE inline const Matrix44& +Matrix44::setEulerAngles (const Vec3& r) IMATH_NOEXCEPT +{ + S cos_rz, sin_rz, cos_ry, sin_ry, cos_rx, sin_rx; + + cos_rz = cos ((T) r.z); + cos_ry = cos ((T) r.y); + cos_rx = cos ((T) r.x); + + sin_rz = sin ((T) r.z); + sin_ry = sin ((T) r.y); + sin_rx = sin ((T) r.x); + + x[0][0] = cos_rz * cos_ry; + x[0][1] = sin_rz * cos_ry; + x[0][2] = -sin_ry; + x[0][3] = 0; + + x[1][0] = -sin_rz * cos_rx + cos_rz * sin_ry * sin_rx; + x[1][1] = cos_rz * cos_rx + sin_rz * sin_ry * sin_rx; + x[1][2] = cos_ry * sin_rx; + x[1][3] = 0; + + x[2][0] = sin_rz * sin_rx + cos_rz * sin_ry * cos_rx; + x[2][1] = -cos_rz * sin_rx + sin_rz * sin_ry * cos_rx; + x[2][2] = cos_ry * cos_rx; + x[2][3] = 0; + + x[3][0] = 0; + x[3][1] = 0; + x[3][2] = 0; + x[3][3] = 1; + + return *this; +} + +template +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline const Matrix44& +Matrix44::setAxisAngle (const Vec3& axis, S angle) IMATH_NOEXCEPT +{ + Vec3 unit (axis.normalized ()); + S sine = std::sin (angle); + S cosine = std::cos (angle); + + x[0][0] = unit.x * unit.x * (1 - cosine) + cosine; + x[0][1] = unit.x * unit.y * (1 - cosine) + unit.z * sine; + x[0][2] = unit.x * unit.z * (1 - cosine) - unit.y * sine; + x[0][3] = 0; + + x[1][0] = unit.x * unit.y * (1 - cosine) - unit.z * sine; + x[1][1] = unit.y * unit.y * (1 - cosine) + cosine; + x[1][2] = unit.y * unit.z * (1 - cosine) + unit.x * sine; + x[1][3] = 0; + + x[2][0] = unit.x * unit.z * (1 - cosine) + unit.y * sine; + x[2][1] = unit.y * unit.z * (1 - cosine) - unit.x * sine; + x[2][2] = unit.z * unit.z * (1 - cosine) + cosine; + x[2][3] = 0; + + x[3][0] = 0; + x[3][1] = 0; + x[3][2] = 0; + x[3][3] = 1; + + return *this; +} + +template +template +IMATH_HOSTDEVICE inline const Matrix44& +Matrix44::rotate (const Vec3& r) IMATH_NOEXCEPT +{ + S cos_rz, sin_rz, cos_ry, sin_ry, cos_rx, sin_rx; + S m00, m01, m02; + S m10, m11, m12; + S m20, m21, m22; + + cos_rz = cos ((S) r.z); + cos_ry = cos ((S) r.y); + cos_rx = cos ((S) r.x); + + sin_rz = sin ((S) r.z); + sin_ry = sin ((S) r.y); + sin_rx = sin ((S) r.x); + + m00 = cos_rz * cos_ry; + m01 = sin_rz * cos_ry; + m02 = -sin_ry; + m10 = -sin_rz * cos_rx + cos_rz * sin_ry * sin_rx; + m11 = cos_rz * cos_rx + sin_rz * sin_ry * sin_rx; + m12 = cos_ry * sin_rx; + m20 = -sin_rz * -sin_rx + cos_rz * sin_ry * cos_rx; + m21 = cos_rz * -sin_rx + sin_rz * sin_ry * cos_rx; + m22 = cos_ry * cos_rx; + + Matrix44 P (*this); + + x[0][0] = P.x[0][0] * m00 + P.x[1][0] * m01 + P.x[2][0] * m02; + x[0][1] = P.x[0][1] * m00 + P.x[1][1] * m01 + P.x[2][1] * m02; + x[0][2] = P.x[0][2] * m00 + P.x[1][2] * m01 + P.x[2][2] * m02; + x[0][3] = P.x[0][3] * m00 + P.x[1][3] * m01 + P.x[2][3] * m02; + + x[1][0] = P.x[0][0] * m10 + P.x[1][0] * m11 + P.x[2][0] * m12; + x[1][1] = P.x[0][1] * m10 + P.x[1][1] * m11 + P.x[2][1] * m12; + x[1][2] = P.x[0][2] * m10 + P.x[1][2] * m11 + P.x[2][2] * m12; + x[1][3] = P.x[0][3] * m10 + P.x[1][3] * m11 + P.x[2][3] * m12; + + x[2][0] = P.x[0][0] * m20 + P.x[1][0] * m21 + P.x[2][0] * m22; + x[2][1] = P.x[0][1] * m20 + P.x[1][1] * m21 + P.x[2][1] * m22; + x[2][2] = P.x[0][2] * m20 + P.x[1][2] * m21 + P.x[2][2] * m22; + x[2][3] = P.x[0][3] * m20 + P.x[1][3] * m21 + P.x[2][3] * m22; + + return *this; +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline const Matrix44& + Matrix44::setScale (T s) IMATH_NOEXCEPT +{ + // + // Set the matrix to a 3D homogeneous transform scale: + // | s 0 0 0 | + // | 0 s 0 0 | + // | 0 0 s 0 | + // | 0 0 0 1 | + // + + x[0][0] = s; + x[0][1] = 0; + x[0][2] = 0; + x[0][3] = 0; + x[1][0] = 0; + x[1][1] = s; + x[1][2] = 0; + x[1][3] = 0; + x[2][0] = 0; + x[2][1] = 0; + x[2][2] = s; + x[2][3] = 0; + x[3][0] = 0; + x[3][1] = 0; + x[3][2] = 0; + x[3][3] = 1; + return *this; +} + +template +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline const Matrix44& + Matrix44::setScale (const Vec3& s) IMATH_NOEXCEPT +{ + // + // Set the matrix to a 3D homogeneous transform scale: + // | s.x 0 0 0 | + // | 0 s.y 0 0 | + // | 0 0 s.z 0 | + // | 0 0 0 1 | + // + + x[0][0] = s.x; + x[0][1] = 0; + x[0][2] = 0; + x[0][3] = 0; + x[1][0] = 0; + x[1][1] = s.y; + x[1][2] = 0; + x[1][3] = 0; + x[2][0] = 0; + x[2][1] = 0; + x[2][2] = s.z; + x[2][3] = 0; + x[3][0] = 0; + x[3][1] = 0; + x[3][2] = 0; + x[3][3] = 1; + return *this; +} + +template +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline const Matrix44& + Matrix44::scale (const Vec3& s) IMATH_NOEXCEPT +{ + x[0][0] *= s.x; + x[0][1] *= s.x; + x[0][2] *= s.x; + x[0][3] *= s.x; + + x[1][0] *= s.y; + x[1][1] *= s.y; + x[1][2] *= s.y; + x[1][3] *= s.y; + + x[2][0] *= s.z; + x[2][1] *= s.z; + x[2][2] *= s.z; + x[2][3] *= s.z; + + return *this; +} + +template +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline const Matrix44& + Matrix44::setTranslation (const Vec3& t) IMATH_NOEXCEPT +{ + x[0][0] = 1; + x[0][1] = 0; + x[0][2] = 0; + x[0][3] = 0; + + x[1][0] = 0; + x[1][1] = 1; + x[1][2] = 0; + x[1][3] = 0; + + x[2][0] = 0; + x[2][1] = 0; + x[2][2] = 1; + x[2][3] = 0; + + x[3][0] = t.x; + x[3][1] = t.y; + x[3][2] = t.z; + x[3][3] = 1; + + return *this; +} + +template +IMATH_HOSTDEVICE constexpr inline const Vec3 +Matrix44::translation () const IMATH_NOEXCEPT +{ + return Vec3 (x[3][0], x[3][1], x[3][2]); +} + +template +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline const Matrix44& + Matrix44::translate (const Vec3& t) IMATH_NOEXCEPT +{ + x[3][0] += t.x * x[0][0] + t.y * x[1][0] + t.z * x[2][0]; + x[3][1] += t.x * x[0][1] + t.y * x[1][1] + t.z * x[2][1]; + x[3][2] += t.x * x[0][2] + t.y * x[1][2] + t.z * x[2][2]; + x[3][3] += t.x * x[0][3] + t.y * x[1][3] + t.z * x[2][3]; + + return *this; +} + +template +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline const Matrix44& + Matrix44::setShear (const Vec3& h) IMATH_NOEXCEPT +{ + x[0][0] = 1; + x[0][1] = 0; + x[0][2] = 0; + x[0][3] = 0; + + x[1][0] = h.x; + x[1][1] = 1; + x[1][2] = 0; + x[1][3] = 0; + + x[2][0] = h.y; + x[2][1] = h.z; + x[2][2] = 1; + x[2][3] = 0; + + x[3][0] = 0; + x[3][1] = 0; + x[3][2] = 0; + x[3][3] = 1; + + return *this; +} + +template +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline const Matrix44& + Matrix44::setShear (const Shear6& h) IMATH_NOEXCEPT +{ + x[0][0] = 1; + x[0][1] = h.yx; + x[0][2] = h.zx; + x[0][3] = 0; + + x[1][0] = h.xy; + x[1][1] = 1; + x[1][2] = h.zy; + x[1][3] = 0; + + x[2][0] = h.xz; + x[2][1] = h.yz; + x[2][2] = 1; + x[2][3] = 0; + + x[3][0] = 0; + x[3][1] = 0; + x[3][2] = 0; + x[3][3] = 1; + + return *this; +} + +template +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline const Matrix44& + Matrix44::shear (const Vec3& h) IMATH_NOEXCEPT +{ + // + // In this case, we don't need a temp. copy of the matrix + // because we never use a value on the RHS after we've + // changed it on the LHS. + // + + for (int i = 0; i < 4; i++) + { + x[2][i] += h.y * x[0][i] + h.z * x[1][i]; + x[1][i] += h.x * x[0][i]; + } + + return *this; +} + +template +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline const Matrix44& + Matrix44::shear (const Shear6& h) IMATH_NOEXCEPT +{ + Matrix44 P (*this); + + for (int i = 0; i < 4; i++) + { + x[0][i] = P.x[0][i] + h.yx * P.x[1][i] + h.zx * P.x[2][i]; + x[1][i] = h.xy * P.x[0][i] + P.x[1][i] + h.zy * P.x[2][i]; + x[2][i] = h.xz * P.x[0][i] + h.yz * P.x[1][i] + P.x[2][i]; + } + + return *this; +} + +//-------------------------------- +// Implementation of stream output +//-------------------------------- + +template +std::ostream& +operator<< (std::ostream& s, const Matrix22& m) +{ + std::ios_base::fmtflags oldFlags = s.flags (); + int width; + + if (s.flags () & std::ios_base::fixed) + { + s.setf (std::ios_base::showpoint); + width = static_cast (s.precision ()) + 5; + } + else + { + s.setf (std::ios_base::scientific); + s.setf (std::ios_base::showpoint); + width = static_cast (s.precision ()) + 8; + } + + s << "(" << std::setw (width) << m[0][0] << " " << std::setw (width) + << m[0][1] << "\n" + << + + " " << std::setw (width) << m[1][0] << " " << std::setw (width) + << m[1][1] << ")\n"; + + s.flags (oldFlags); + return s; +} + +template +std::ostream& +operator<< (std::ostream& s, const Matrix33& m) +{ + std::ios_base::fmtflags oldFlags = s.flags (); + int width; + + if (s.flags () & std::ios_base::fixed) + { + s.setf (std::ios_base::showpoint); + width = static_cast (s.precision ()) + 5; + } + else + { + s.setf (std::ios_base::scientific); + s.setf (std::ios_base::showpoint); + width = static_cast (s.precision ()) + 8; + } + + s << "(" << std::setw (width) << m[0][0] << " " << std::setw (width) + << m[0][1] << " " << std::setw (width) << m[0][2] << "\n" + << + + " " << std::setw (width) << m[1][0] << " " << std::setw (width) + << m[1][1] << " " << std::setw (width) << m[1][2] << "\n" + << + + " " << std::setw (width) << m[2][0] << " " << std::setw (width) + << m[2][1] << " " << std::setw (width) << m[2][2] << ")\n"; + + s.flags (oldFlags); + return s; +} + +template +std::ostream& +operator<< (std::ostream& s, const Matrix44& m) +{ + std::ios_base::fmtflags oldFlags = s.flags (); + int width; + + if (s.flags () & std::ios_base::fixed) + { + s.setf (std::ios_base::showpoint); + width = static_cast (s.precision ()) + 5; + } + else + { + s.setf (std::ios_base::scientific); + s.setf (std::ios_base::showpoint); + width = static_cast (s.precision ()) + 8; + } + + s << "(" << std::setw (width) << m[0][0] << " " << std::setw (width) + << m[0][1] << " " << std::setw (width) << m[0][2] << " " + << std::setw (width) << m[0][3] << "\n" + << + + " " << std::setw (width) << m[1][0] << " " << std::setw (width) + << m[1][1] << " " << std::setw (width) << m[1][2] << " " + << std::setw (width) << m[1][3] << "\n" + << + + " " << std::setw (width) << m[2][0] << " " << std::setw (width) + << m[2][1] << " " << std::setw (width) << m[2][2] << " " + << std::setw (width) << m[2][3] << "\n" + << + + " " << std::setw (width) << m[3][0] << " " << std::setw (width) + << m[3][1] << " " << std::setw (width) << m[3][2] << " " + << std::setw (width) << m[3][3] << ")\n"; + + s.flags (oldFlags); + return s; +} + +//--------------------------------------------------------------- +// Implementation of vector-times-matrix multiplication operators +//--------------------------------------------------------------- + +template +IMATH_HOSTDEVICE inline const Vec2& +operator*= (Vec2& v, const Matrix22& m) IMATH_NOEXCEPT +{ + S x = S (v.x * m.x[0][0] + v.y * m.x[1][0]); + S y = S (v.x * m.x[0][1] + v.y * m.x[1][1]); + + v.x = x; + v.y = y; + + return v; +} + +template +IMATH_HOSTDEVICE inline Vec2 +operator* (const Vec2& v, const Matrix22& m) IMATH_NOEXCEPT +{ + S x = S (v.x * m.x[0][0] + v.y * m.x[1][0]); + S y = S (v.x * m.x[0][1] + v.y * m.x[1][1]); + + return Vec2 (x, y); +} + +template +IMATH_HOSTDEVICE inline const Vec2& +operator*= (Vec2& v, const Matrix33& m) IMATH_NOEXCEPT +{ + S x = S (v.x * m.x[0][0] + v.y * m.x[1][0] + m.x[2][0]); + S y = S (v.x * m.x[0][1] + v.y * m.x[1][1] + m.x[2][1]); + S w = S (v.x * m.x[0][2] + v.y * m.x[1][2] + m.x[2][2]); + + v.x = x / w; + v.y = y / w; + + return v; +} + +template +IMATH_HOSTDEVICE inline Vec2 +operator* (const Vec2& v, const Matrix33& m) IMATH_NOEXCEPT +{ + S x = S (v.x * m.x[0][0] + v.y * m.x[1][0] + m.x[2][0]); + S y = S (v.x * m.x[0][1] + v.y * m.x[1][1] + m.x[2][1]); + S w = S (v.x * m.x[0][2] + v.y * m.x[1][2] + m.x[2][2]); + + return Vec2 (x / w, y / w); +} + +template +IMATH_HOSTDEVICE inline const Vec3& +operator*= (Vec3& v, const Matrix33& m) IMATH_NOEXCEPT +{ + S x = S (v.x * m.x[0][0] + v.y * m.x[1][0] + v.z * m.x[2][0]); + S y = S (v.x * m.x[0][1] + v.y * m.x[1][1] + v.z * m.x[2][1]); + S z = S (v.x * m.x[0][2] + v.y * m.x[1][2] + v.z * m.x[2][2]); + + v.x = x; + v.y = y; + v.z = z; + + return v; +} + +template +IMATH_HOSTDEVICE inline Vec3 +operator* (const Vec3& v, const Matrix33& m) IMATH_NOEXCEPT +{ + S x = S (v.x * m.x[0][0] + v.y * m.x[1][0] + v.z * m.x[2][0]); + S y = S (v.x * m.x[0][1] + v.y * m.x[1][1] + v.z * m.x[2][1]); + S z = S (v.x * m.x[0][2] + v.y * m.x[1][2] + v.z * m.x[2][2]); + + return Vec3 (x, y, z); +} + +template +IMATH_HOSTDEVICE inline const Vec3& +operator*= (Vec3& v, const Matrix44& m) IMATH_NOEXCEPT +{ + S x = S (v.x * m.x[0][0] + v.y * m.x[1][0] + v.z * m.x[2][0] + m.x[3][0]); + S y = S (v.x * m.x[0][1] + v.y * m.x[1][1] + v.z * m.x[2][1] + m.x[3][1]); + S z = S (v.x * m.x[0][2] + v.y * m.x[1][2] + v.z * m.x[2][2] + m.x[3][2]); + S w = S (v.x * m.x[0][3] + v.y * m.x[1][3] + v.z * m.x[2][3] + m.x[3][3]); + + v.x = x / w; + v.y = y / w; + v.z = z / w; + + return v; +} + +template +IMATH_HOSTDEVICE inline Vec3 +operator* (const Vec3& v, const Matrix44& m) IMATH_NOEXCEPT +{ + S x = S (v.x * m.x[0][0] + v.y * m.x[1][0] + v.z * m.x[2][0] + m.x[3][0]); + S y = S (v.x * m.x[0][1] + v.y * m.x[1][1] + v.z * m.x[2][1] + m.x[3][1]); + S z = S (v.x * m.x[0][2] + v.y * m.x[1][2] + v.z * m.x[2][2] + m.x[3][2]); + S w = S (v.x * m.x[0][3] + v.y * m.x[1][3] + v.z * m.x[2][3] + m.x[3][3]); + + return Vec3 (x / w, y / w, z / w); +} + +template +IMATH_HOSTDEVICE inline const Vec4& +operator*= (Vec4& v, const Matrix44& m) IMATH_NOEXCEPT +{ + S x = S ( + v.x * m.x[0][0] + v.y * m.x[1][0] + v.z * m.x[2][0] + v.w * m.x[3][0]); + S y = S ( + v.x * m.x[0][1] + v.y * m.x[1][1] + v.z * m.x[2][1] + v.w * m.x[3][1]); + S z = S ( + v.x * m.x[0][2] + v.y * m.x[1][2] + v.z * m.x[2][2] + v.w * m.x[3][2]); + S w = S ( + v.x * m.x[0][3] + v.y * m.x[1][3] + v.z * m.x[2][3] + v.w * m.x[3][3]); + + v.x = x; + v.y = y; + v.z = z; + v.w = w; + + return v; +} + +template +IMATH_HOSTDEVICE inline Vec4 +operator* (const Vec4& v, const Matrix44& m) IMATH_NOEXCEPT +{ + S x = S ( + v.x * m.x[0][0] + v.y * m.x[1][0] + v.z * m.x[2][0] + v.w * m.x[3][0]); + S y = S ( + v.x * m.x[0][1] + v.y * m.x[1][1] + v.z * m.x[2][1] + v.w * m.x[3][1]); + S z = S ( + v.x * m.x[0][2] + v.y * m.x[1][2] + v.z * m.x[2][2] + v.w * m.x[3][2]); + S w = S ( + v.x * m.x[0][3] + v.y * m.x[1][3] + v.z * m.x[2][3] + v.w * m.x[3][3]); + + return Vec4 (x, y, z, w); +} + +IMATH_INTERNAL_NAMESPACE_HEADER_EXIT + +#endif // INCLUDED_IMATHMATRIX_H diff --git a/third_party/tlRender-install-Release/include/Imath/ImathMatrixAlgo.h b/third_party/tlRender-install-Release/include/Imath/ImathMatrixAlgo.h new file mode 100644 index 00000000..291aabac --- /dev/null +++ b/third_party/tlRender-install-Release/include/Imath/ImathMatrixAlgo.h @@ -0,0 +1,1579 @@ +// +// SPDX-License-Identifier: BSD-3-Clause +// Copyright Contributors to the OpenEXR Project. +// + +// +// +// Functions operating on Matrix22, Matrix33, and Matrix44 types +// +// This file also defines a few predefined constant matrices. +// + +#ifndef INCLUDED_IMATHMATRIXALGO_H +#define INCLUDED_IMATHMATRIXALGO_H + +#include "ImathEuler.h" +#include "ImathExport.h" +#include "ImathMatrix.h" +#include "ImathNamespace.h" +#include "ImathQuat.h" +#include "ImathVec.h" +#include + +IMATH_INTERNAL_NAMESPACE_HEADER_ENTER + +//------------------ +// Identity matrices +//------------------ + +/// M22f identity matrix +IMATH_EXPORT_CONST M22f identity22f; +/// M33f identity matrix +IMATH_EXPORT_CONST M33f identity33f; +/// M44f identity matrix +IMATH_EXPORT_CONST M44f identity44f; +/// M22d identity matrix +IMATH_EXPORT_CONST M22d identity22d; +/// M33d identity matrix +IMATH_EXPORT_CONST M33d identity33d; +/// M44d identity matrix +IMATH_EXPORT_CONST M44d identity44d; + +//---------------------------------------------------------------------- +// Extract scale, shear, rotation, and translation values from a matrix: +// +// Notes: +// +// This implementation follows the technique described in the paper by +// Spencer W. Thomas in the Graphics Gems II article: "Decomposing a +// Matrix into Simple Transformations", p. 320. +// +// - Some of the functions below have an optional exc parameter +// that determines the functions' behavior when the matrix' +// scaling is very close to zero: +// +// If exc is true, the functions throw a std::domain_error exception. +// +// If exc is false: +// +// extractScaling (m, s) returns false, s is invalid +// sansScaling (m) returns m +// removeScaling (m) returns false, m is unchanged +// sansScalingAndShear (m) returns m +// removeScalingAndShear (m) returns false, m is unchanged +// extractAndRemoveScalingAndShear (m, s, h) +// returns false, m is unchanged, +// (sh) are invalid +// checkForZeroScaleInRow () returns false +// extractSHRT (m, s, h, r, t) returns false, (shrt) are invalid +// +// - Functions extractEuler(), extractEulerXYZ() and extractEulerZYX() +// assume that the matrix does not include shear or non-uniform scaling, +// but they do not examine the matrix to verify this assumption. +// Matrices with shear or non-uniform scaling are likely to produce +// meaningless results. Therefore, you should use the +// removeScalingAndShear() routine, if necessary, prior to calling +// extractEuler...() . +// +// - All functions assume that the matrix does not include perspective +// transformation(s), but they do not examine the matrix to verify +// this assumption. Matrices with perspective transformations are +// likely to produce meaningless results. +// +//---------------------------------------------------------------------- + +// +// Declarations for 4x4 matrix. +// + +/// Extract the scaling component of the given 4x4 matrix. +/// +/// @param[in] mat The input matrix +/// @param[out] scl The extracted scale, i.e. the output value +/// @param[in] exc If true, throw an exception if the scaling in `mat` is very close to zero. +/// @return True if the scale could be extracted, false if the matrix is degenerate. +template +bool extractScaling (const Matrix44& mat, Vec3& scl, bool exc = true); + +/// Return the given 4x4 matrix with scaling removed. +/// +/// @param[in] mat The input matrix +/// @param[in] exc If true, throw an exception if the scaling in `mat` +template +Matrix44 sansScaling (const Matrix44& mat, bool exc = true); + +/// Remove scaling from the given 4x4 matrix in place. Return true if the +/// scale could be successfully extracted, false if the matrix is +/// degenerate. +// +/// @param[in] mat The matrix to operate on +/// @param[in] exc If true, throw an exception if the scaling in `mat` is very close to zero. +/// @return True if the scale could be extracted, false if the matrix is degenerate. +template bool removeScaling (Matrix44& mat, bool exc = true); + +/// Extract the scaling and shear components of the given 4x4 matrix. +/// Return true if the scale could be successfully extracted, false if +/// the matrix is degenerate. +/// +/// @param[in] mat The input matrix +/// @param[out] scl The extracted scale +/// @param[out] shr The extracted shear +/// @param[in] exc If true, throw an exception if the scaling in `mat` is very close to zero. +/// @return True if the scale could be extracted, false if the matrix is degenerate. +template +bool extractScalingAndShear ( + const Matrix44& mat, Vec3& scl, Vec3& shr, bool exc = true); + +/// Return the given 4x4 matrix with scaling and shear removed. +/// +/// @param[in] mat The input matrix +/// @param[in] exc If true, throw an exception if the scaling in `mat` is very close to zero. +template +Matrix44 sansScalingAndShear (const Matrix44& mat, bool exc = true); + +/// Extract scaling and shear from the given 4x4 matrix in-place. +/// +/// @param[in,out] result The output matrix +/// @param[in] mat The return value if `result` is degenerate +/// @param[in] exc If true, throw an exception if the scaling in `mat` is very close to zero. +template +void sansScalingAndShear ( + Matrix44& result, const Matrix44& mat, bool exc = true); + +/// Remove scaling and shear from the given 4x4 matrix in place. +// +/// @param[in,out] mat The matrix to operate on +/// @param[in] exc If true, throw an exception if the scaling in `mat` is very close to zero. +/// @return True if the scale could be extracted, false if the matrix is degenerate. +template +bool removeScalingAndShear (Matrix44& mat, bool exc = true); + +/// Remove scaling and shear from the given 4x4 matrix in place, returning +/// the extracted values. +// +/// @param[in,out] mat The matrix to operate on +/// @param[out] scl The extracted scale +/// @param[out] shr The extracted shear +/// @param[in] exc If true, throw an exception if the scaling in `mat` is very close to zero. +/// @return True if the scale could be extracted, false if the matrix is degenerate. +template +bool extractAndRemoveScalingAndShear ( + Matrix44& mat, Vec3& scl, Vec3& shr, bool exc = true); + +/// Extract the rotation from the given 4x4 matrix in the form of XYZ +/// euler angles. +/// +/// @param[in] mat The input matrix +/// @param[out] rot The extracted XYZ euler angle vector +template void extractEulerXYZ (const Matrix44& mat, Vec3& rot); + +/// Extract the rotation from the given 4x4 matrix in the form of ZYX +/// euler angles. +/// +/// @param[in] mat The input matrix +/// @param[out] rot The extracted ZYX euler angle vector +template void extractEulerZYX (const Matrix44& mat, Vec3& rot); + +/// Extract the rotation from the given 4x4 matrix in the form of a quaternion. +/// +/// @param[in] mat The input matrix +/// @return The extracted quaternion +template Quat extractQuat (const Matrix44& mat); + +/// Extract the scaling, shear, rotation, and translation components +/// of the given 4x4 matrix. The values are such that: +/// +/// M = S * H * R * T +/// +/// @param[in] mat The input matrix +/// @param[out] s The extracted scale +/// @param[out] h The extracted shear +/// @param[out] r The extracted rotation +/// @param[out] t The extracted translation +/// @param[in] exc If true, throw an exception if the scaling in `mat` is very close to zero. +/// @param[in] rOrder The order with which to extract the rotation +/// @return True if the values could be extracted, false if the matrix is degenerate. +template +bool extractSHRT ( + const Matrix44& mat, + Vec3& s, + Vec3& h, + Vec3& r, + Vec3& t, + bool exc /*= true*/, + typename Euler::Order rOrder); + +/// Extract the scaling, shear, rotation, and translation components +/// of the given 4x4 matrix. +/// +/// @param[in] mat The input matrix +/// @param[out] s The extracted scale +/// @param[out] h The extracted shear +/// @param[out] r The extracted rotation, in XYZ euler angles +/// @param[out] t The extracted translation +/// @param[in] exc If true, throw an exception if the scaling in `mat` is very close to zero. +/// @return True if the values could be extracted, false if the matrix is degenerate. +template +bool extractSHRT ( + const Matrix44& mat, + Vec3& s, + Vec3& h, + Vec3& r, + Vec3& t, + bool exc = true); + +/// Extract the scaling, shear, rotation, and translation components +/// of the given 4x4 matrix. +/// +/// @param[in] mat The input matrix +/// @param[out] s The extracted scale +/// @param[out] h The extracted shear +/// @param[out] r The extracted rotation, in Euler angles +/// @param[out] t The extracted translation +/// @param[in] exc If true, throw an exception if the scaling in `mat` is very close to zero. +/// @return True if the values could be extracted, false if the matrix is degenerate. +template +bool extractSHRT ( + const Matrix44& mat, + Vec3& s, + Vec3& h, + Euler& r, + Vec3& t, + bool exc = true); + +/// Return true if the given scale can be removed from the given row +/// matrix, false if `scl` is small enough that the operation would +/// overflow. If `exc` is true, throw an exception on overflow. +template +bool checkForZeroScaleInRow (const T& scl, const Vec3& row, bool exc = true); + +/// Return the 4x4 outer product two 4-vectors +template +Matrix44 outerProduct (const Vec4& a, const Vec4& b); + +/// +/// Return a 4x4 matrix that rotates the vector `fromDirection` to `toDirection` +/// +template +Matrix44 +rotationMatrix (const Vec3& fromDirection, const Vec3& toDirection); + +/// +/// Return a 4x4 matrix that rotates the `fromDir` vector +/// so that it points towards `toDir1. You may also +/// specify that you want the up vector to be pointing +/// in a certain direction 1upDir`. +template +Matrix44 rotationMatrixWithUpDir ( + const Vec3& fromDir, const Vec3& toDir, const Vec3& upDir); + +/// +/// Construct a 4x4 matrix that rotates the z-axis so that it points +/// towards `targetDir`. You must also specify that you want the up +/// vector to be pointing in a certain direction `upDir`. +/// +/// Notes: The following degenerate cases are handled: +/// (a) when the directions given by `toDir` and `upDir` +/// are parallel or opposite (the direction vectors must have a non-zero cross product); +/// (b) when any of the given direction vectors have zero length +/// +/// @param[out] result The output matrix +/// @param[in] targetDir The target direction vector +/// @param[in] upDir The up direction vector +template +void +alignZAxisWithTargetDir (Matrix44& result, Vec3 targetDir, Vec3 upDir); + +/// Compute an orthonormal direct 4x4 frame from a position, an x axis +/// direction and a normal to the y axis. If the x axis and normal are +/// perpendicular, then the normal will have the same direction as the +/// z axis. +/// +/// @param[in] p The position of the frame +/// @param[in] xDir The x axis direction of the frame +/// @param[in] normal A normal to the y axis of the frame +/// @return The orthonormal frame +template +Matrix44 computeLocalFrame ( + const Vec3& p, const Vec3& xDir, const Vec3& normal); + +/// Add a translate/rotate/scale offset to a 4x4 input frame +/// and put it in another frame of reference +/// +/// @param[in] inMat Input frame +/// @param[in] tOffset Translation offset +/// @param[in] rOffset Rotation offset in degrees +/// @param[in] sOffset Scale offset +/// @param[in] ref Frame of reference +/// @return The offsetted frame +template +Matrix44 addOffset ( + const Matrix44& inMat, + const Vec3& tOffset, + const Vec3& rOffset, + const Vec3& sOffset, + const Vec3& ref); + +/// Compute 4x4 translate/rotate/scale matrix from `A` with the +/// rotate/scale of `B`. +/// +/// @param[in] keepRotateA If true, keep rotate from matrix `A`, use `B` otherwise +/// @param[in] keepScaleA If true, keep scale from matrix `A`, use `B` otherwise +/// @param[in] A Matrix A +/// @param[in] B Matrix B +/// @return Matrix `A` with tweaked rotation/scale +template +Matrix44 computeRSMatrix ( + bool keepRotateA, + bool keepScaleA, + const Matrix44& A, + const Matrix44& B); + +// +// Declarations for 3x3 matrix. +// + +/// Extract the scaling component of the given 3x3 matrix. +/// +/// @param[in] mat The input matrix +/// @param[out] scl The extracted scale, i.e. the output value +/// @param[in] exc If true, throw an exception if the scaling in `mat` is very close to zero. +/// @return True if the scale could be extracted, false if the matrix is degenerate. +template +bool extractScaling (const Matrix33& mat, Vec2& scl, bool exc = true); + +/// Return the given 3x3 matrix with scaling removed. +/// +/// @param[in] mat The input matrix +/// @param[in] exc If true, throw an exception if the scaling in `mat` +template +Matrix33 sansScaling (const Matrix33& mat, bool exc = true); + +/// Remove scaling from the given 3x3 matrix in place. Return true if the +/// scale could be successfully extracted, false if the matrix is +/// degenerate. +// +/// @param[in] mat The matrix to operate on +/// @param[in] exc If true, throw an exception if the scaling in `mat` is very close to zero. +/// @return True if the scale could be extracted, false if the matrix is degenerate. +template bool removeScaling (Matrix33& mat, bool exc = true); + +/// Extract the scaling and shear components of the given 3x3 matrix. +/// Return true if the scale could be successfully extracted, false if +/// the matrix is degenerate. +/// +/// @param[in] mat The input matrix +/// @param[out] scl The extracted scale +/// @param[out] shr The extracted shear +/// @param[in] exc If true, throw an exception if the scaling in `mat` is very close to zero. +/// @return True if the scale could be extracted, false if the matrix is degenerate. +template +bool extractScalingAndShear ( + const Matrix33& mat, Vec2& scl, T& shr, bool exc = true); + +/// Return the given 3x3 matrix with scaling and shear removed. +/// +/// @param[in] mat The input matrix +/// @param[in] exc If true, throw an exception if the scaling in `mat` is very close to zero. +template +Matrix33 sansScalingAndShear (const Matrix33& mat, bool exc = true); + +/// Remove scaling and shear from the given 3x3e matrix in place. +// +/// @param[in,out] mat The matrix to operate on +/// @param[in] exc If true, throw an exception if the scaling in `mat` is very close to zero. +/// @return True if the scale could be extracted, false if the matrix is degenerate. +template +bool removeScalingAndShear (Matrix33& mat, bool exc = true); + +/// Remove scaling and shear from the given 3x3 matrix in place, returning +/// the extracted values. +// +/// @param[in,out] mat The matrix to operate on +/// @param[out] scl The extracted scale +/// @param[out] shr The extracted shear +/// @param[in] exc If true, throw an exception if the scaling in `mat` is very close to zero. +/// @return True if the scale could be extracted, false if the matrix is degenerate. +template +bool extractAndRemoveScalingAndShear ( + Matrix33& mat, Vec2& scl, T& shr, bool exc = true); + +/// Extract the rotation from the given 2x2 matrix +/// +/// @param[in] mat The input matrix +/// @param[out] rot The extracted rotation value +template void extractEuler (const Matrix22& mat, T& rot); + +/// Extract the rotation from the given 3x3 matrix +/// +/// @param[in] mat The input matrix +/// @param[out] rot The extracted rotation value +template void extractEuler (const Matrix33& mat, T& rot); + +/// Extract the scaling, shear, rotation, and translation components +/// of the given 3x3 matrix. The values are such that: +/// +/// M = S * H * R * T +/// +/// @param[in] mat The input matrix +/// @param[out] s The extracted scale +/// @param[out] h The extracted shear +/// @param[out] r The extracted rotation +/// @param[out] t The extracted translation +/// @param[in] exc If true, throw an exception if the scaling in `mat` is very close to zero. +/// @return True if the values could be extracted, false if the matrix is degenerate. +template +bool extractSHRT ( + const Matrix33& mat, + Vec2& s, + T& h, + T& r, + Vec2& t, + bool exc = true); + +/// Return true if the given scale can be removed from the given row +/// matrix, false if `scl` is small enough that the operation would +/// overflow. If `exc` is true, throw an exception on overflow. +template +bool checkForZeroScaleInRow (const T& scl, const Vec2& row, bool exc = true); + +/// Return the 3xe outer product two 3-vectors +template +Matrix33 outerProduct (const Vec3& a, const Vec3& b); + +//------------------------------ +// Implementation for 4x4 Matrix +//------------------------------ + +template +bool +extractScaling (const Matrix44& mat, Vec3& scl, bool exc) +{ + Vec3 shr; + Matrix44 M (mat); + + if (!extractAndRemoveScalingAndShear (M, scl, shr, exc)) return false; + + return true; +} + +template +Matrix44 +sansScaling (const Matrix44& mat, bool exc) +{ + Vec3 scl; + Vec3 shr; + Vec3 rot; + Vec3 tran; + + if (!extractSHRT (mat, scl, shr, rot, tran, exc)) return mat; + + Matrix44 M; + + M.translate (tran); + M.rotate (rot); + M.shear (shr); + + return M; +} + +template +bool +removeScaling (Matrix44& mat, bool exc) +{ + Vec3 scl; + Vec3 shr; + Vec3 rot; + Vec3 tran; + + if (!extractSHRT (mat, scl, shr, rot, tran, exc)) return false; + + mat.makeIdentity (); + mat.translate (tran); + mat.rotate (rot); + mat.shear (shr); + + return true; +} + +template +bool +extractScalingAndShear ( + const Matrix44& mat, Vec3& scl, Vec3& shr, bool exc) +{ + Matrix44 M (mat); + + if (!extractAndRemoveScalingAndShear (M, scl, shr, exc)) return false; + + return true; +} + +template +Matrix44 +sansScalingAndShear (const Matrix44& mat, bool exc) +{ + Vec3 scl; + Vec3 shr; + Matrix44 M (mat); + + if (!extractAndRemoveScalingAndShear (M, scl, shr, exc)) return mat; + + return M; +} + +template +void +sansScalingAndShear (Matrix44& result, const Matrix44& mat, bool exc) +{ + Vec3 scl; + Vec3 shr; + + if (!extractAndRemoveScalingAndShear (result, scl, shr, exc)) result = mat; +} + +template +bool +removeScalingAndShear (Matrix44& mat, bool exc) +{ + Vec3 scl; + Vec3 shr; + + if (!extractAndRemoveScalingAndShear (mat, scl, shr, exc)) return false; + + return true; +} + +template +bool +extractAndRemoveScalingAndShear ( + Matrix44& mat, Vec3& scl, Vec3& shr, bool exc) +{ + // + // This implementation follows the technique described in the paper by + // Spencer W. Thomas in the Graphics Gems II article: "Decomposing a + // Matrix into Simple Transformations", p. 320. + // + + Vec3 row[3]; + + row[0] = Vec3 (mat[0][0], mat[0][1], mat[0][2]); + row[1] = Vec3 (mat[1][0], mat[1][1], mat[1][2]); + row[2] = Vec3 (mat[2][0], mat[2][1], mat[2][2]); + + T maxVal = 0; + for (int i = 0; i < 3; i++) + for (int j = 0; j < 3; j++) + if (IMATH_INTERNAL_NAMESPACE::abs (row[i][j]) > maxVal) + maxVal = IMATH_INTERNAL_NAMESPACE::abs (row[i][j]); + + // + // We normalize the 3x3 matrix here. + // It was noticed that this can improve numerical stability significantly, + // especially when many of the upper 3x3 matrix's coefficients are very + // close to zero; we correct for this step at the end by multiplying the + // scaling factors by maxVal at the end (shear and rotation are not + // affected by the normalization). + + if (maxVal != 0) + { + for (int i = 0; i < 3; i++) + if (!checkForZeroScaleInRow (maxVal, row[i], exc)) + return false; + else + row[i] /= maxVal; + } + + // Compute X scale factor. + scl.x = row[0].length (); + if (!checkForZeroScaleInRow (scl.x, row[0], exc)) return false; + + // Normalize first row. + row[0] /= scl.x; + + // An XY shear factor will shear the X coord. as the Y coord. changes. + // There are 6 combinations (XY, XZ, YZ, YX, ZX, ZY), although we only + // extract the first 3 because we can effect the last 3 by shearing in + // XY, XZ, YZ combined rotations and scales. + // + // shear matrix < 1, YX, ZX, 0, + // XY, 1, ZY, 0, + // XZ, YZ, 1, 0, + // 0, 0, 0, 1 > + + // Compute XY shear factor and make 2nd row orthogonal to 1st. + shr[0] = row[0].dot (row[1]); + row[1] -= shr[0] * row[0]; + + // Now, compute Y scale. + scl.y = row[1].length (); + if (!checkForZeroScaleInRow (scl.y, row[1], exc)) return false; + + // Normalize 2nd row and correct the XY shear factor for Y scaling. + row[1] /= scl.y; + shr[0] /= scl.y; + + // Compute XZ and YZ shears, orthogonalize 3rd row. + shr[1] = row[0].dot (row[2]); + row[2] -= shr[1] * row[0]; + shr[2] = row[1].dot (row[2]); + row[2] -= shr[2] * row[1]; + + // Next, get Z scale. + scl.z = row[2].length (); + if (!checkForZeroScaleInRow (scl.z, row[2], exc)) return false; + + // Normalize 3rd row and correct the XZ and YZ shear factors for Z scaling. + row[2] /= scl.z; + shr[1] /= scl.z; + shr[2] /= scl.z; + + // At this point, the upper 3x3 matrix in mat is orthonormal. + // Check for a coordinate system flip. If the determinant + // is less than zero, then negate the matrix and the scaling factors. + if (row[0].dot (row[1].cross (row[2])) < 0) + for (int i = 0; i < 3; i++) + { + scl[i] *= -1; + row[i] *= -1; + } + + // Copy over the orthonormal rows into the returned matrix. + // The upper 3x3 matrix in mat is now a rotation matrix. + for (int i = 0; i < 3; i++) + { + mat[i][0] = row[i][0]; + mat[i][1] = row[i][1]; + mat[i][2] = row[i][2]; + } + + // Correct the scaling factors for the normalization step that we + // performed above; shear and rotation are not affected by the + // normalization. + scl *= maxVal; + + return true; +} + +template +void +extractEulerXYZ (const Matrix44& mat, Vec3& rot) +{ + // + // Normalize the local x, y and z axes to remove scaling. + // + + Vec3 i (mat[0][0], mat[0][1], mat[0][2]); + Vec3 j (mat[1][0], mat[1][1], mat[1][2]); + Vec3 k (mat[2][0], mat[2][1], mat[2][2]); + + i.normalize (); + j.normalize (); + k.normalize (); + + Matrix44 M ( + i[0], + i[1], + i[2], + 0, + j[0], + j[1], + j[2], + 0, + k[0], + k[1], + k[2], + 0, + 0, + 0, + 0, + 1); + + // + // Extract the first angle, rot.x. + // + + rot.x = std::atan2 (M[1][2], M[2][2]); + + // + // Remove the rot.x rotation from M, so that the remaining + // rotation, N, is only around two axes, and gimbal lock + // cannot occur. + // + + Matrix44 N; + N.rotate (Vec3 (-rot.x, 0, 0)); + N = N * M; + + // + // Extract the other two angles, rot.y and rot.z, from N. + // + + T cy = std::sqrt (N[0][0] * N[0][0] + N[0][1] * N[0][1]); + rot.y = std::atan2 (-N[0][2], cy); + rot.z = std::atan2 (-N[1][0], N[1][1]); +} + +template +void +extractEulerZYX (const Matrix44& mat, Vec3& rot) +{ + // + // Normalize the local x, y and z axes to remove scaling. + // + + Vec3 i (mat[0][0], mat[0][1], mat[0][2]); + Vec3 j (mat[1][0], mat[1][1], mat[1][2]); + Vec3 k (mat[2][0], mat[2][1], mat[2][2]); + + i.normalize (); + j.normalize (); + k.normalize (); + + Matrix44 M ( + i[0], + i[1], + i[2], + 0, + j[0], + j[1], + j[2], + 0, + k[0], + k[1], + k[2], + 0, + 0, + 0, + 0, + 1); + + // + // Extract the first angle, rot.x. + // + + rot.x = -std::atan2 (M[1][0], M[0][0]); + + // + // Remove the x rotation from M, so that the remaining + // rotation, N, is only around two axes, and gimbal lock + // cannot occur. + // + + Matrix44 N; + N.rotate (Vec3 (0, 0, -rot.x)); + N = N * M; + + // + // Extract the other two angles, rot.y and rot.z, from N. + // + + T cy = std::sqrt (N[2][2] * N[2][2] + N[2][1] * N[2][1]); + rot.y = -std::atan2 (-N[2][0], cy); + rot.z = -std::atan2 (-N[1][2], N[1][1]); +} + +template +Quat +extractQuat (const Matrix44& mat) +{ + T tr, s; + T q[4]; + int i, j, k; + Quat quat; + + int nxt[3] = {1, 2, 0}; + tr = mat[0][0] + mat[1][1] + mat[2][2]; + + // check the diagonal + if (tr > 0.0) + { + s = std::sqrt (tr + T (1.0)); + quat.r = s / T (2.0); + s = T (0.5) / s; + + quat.v.x = (mat[1][2] - mat[2][1]) * s; + quat.v.y = (mat[2][0] - mat[0][2]) * s; + quat.v.z = (mat[0][1] - mat[1][0]) * s; + } + else + { + // diagonal is negative + i = 0; + if (mat[1][1] > mat[0][0]) i = 1; + if (mat[2][2] > mat[i][i]) i = 2; + + j = nxt[i]; + k = nxt[j]; + s = std::sqrt ((mat[i][i] - (mat[j][j] + mat[k][k])) + T (1.0)); + + q[i] = s * T (0.5); + if (s != T (0.0)) s = T (0.5) / s; + + q[3] = (mat[j][k] - mat[k][j]) * s; + q[j] = (mat[i][j] + mat[j][i]) * s; + q[k] = (mat[i][k] + mat[k][i]) * s; + + quat.v.x = q[0]; + quat.v.y = q[1]; + quat.v.z = q[2]; + quat.r = q[3]; + } + + return quat; +} + +template +bool +extractSHRT ( + const Matrix44& mat, + Vec3& s, + Vec3& h, + Vec3& r, + Vec3& t, + bool exc /* = true */, + typename Euler::Order rOrder /* = Euler::XYZ */) +{ + Matrix44 rot; + + rot = mat; + if (!extractAndRemoveScalingAndShear (rot, s, h, exc)) return false; + + extractEulerXYZ (rot, r); + + t.x = mat[3][0]; + t.y = mat[3][1]; + t.z = mat[3][2]; + + if (rOrder != Euler::XYZ) + { + Euler eXYZ (r, Euler::XYZ); + Euler e (eXYZ, rOrder); + r = e.toXYZVector (); + } + + return true; +} + +template +bool +extractSHRT ( + const Matrix44& mat, + Vec3& s, + Vec3& h, + Vec3& r, + Vec3& t, + bool exc) +{ + return extractSHRT (mat, s, h, r, t, exc, Euler::XYZ); +} + +template +bool +extractSHRT ( + const Matrix44& mat, + Vec3& s, + Vec3& h, + Euler& r, + Vec3& t, + bool exc /* = true */) +{ + return extractSHRT (mat, s, h, r, t, exc, r.order ()); +} + +template +bool +checkForZeroScaleInRow (const T& scl, const Vec3& row, bool exc /* = true */) +{ + for (int i = 0; i < 3; i++) + { + if ((abs (scl) < 1 && + abs (row[i]) >= std::numeric_limits::max () * abs (scl))) + { + if (exc) + throw std::domain_error ("Cannot remove zero scaling " + "from matrix."); + else + return false; + } + } + + return true; +} + +template +Matrix44 +outerProduct (const Vec4& a, const Vec4& b) +{ + return Matrix44 ( + a.x * b.x, + a.x * b.y, + a.x * b.z, + a.x * b.w, + a.y * b.x, + a.y * b.y, + a.y * b.z, + a.x * b.w, + a.z * b.x, + a.z * b.y, + a.z * b.z, + a.x * b.w, + a.w * b.x, + a.w * b.y, + a.w * b.z, + a.w * b.w); +} + +template +Matrix44 +rotationMatrix (const Vec3& from, const Vec3& to) +{ + Quat q; + q.setRotation (from, to); + return q.toMatrix44 (); +} + +template +Matrix44 +rotationMatrixWithUpDir ( + const Vec3& fromDir, const Vec3& toDir, const Vec3& upDir) +{ + // + // The goal is to obtain a rotation matrix that takes + // "fromDir" to "toDir". We do this in two steps and + // compose the resulting rotation matrices; + // (a) rotate "fromDir" into the z-axis + // (b) rotate the z-axis into "toDir" + // + + // The from direction must be non-zero; but we allow zero to and up dirs. + if (fromDir.length () == 0) + return Matrix44 (); + + else + { + Matrix44 zAxis2FromDir (UNINITIALIZED); + alignZAxisWithTargetDir (zAxis2FromDir, fromDir, Vec3 (0, 1, 0)); + + Matrix44 fromDir2zAxis = zAxis2FromDir.transposed (); + + Matrix44 zAxis2ToDir (UNINITIALIZED); + alignZAxisWithTargetDir (zAxis2ToDir, toDir, upDir); + + return fromDir2zAxis * zAxis2ToDir; + } +} + +template +void +alignZAxisWithTargetDir (Matrix44& result, Vec3 targetDir, Vec3 upDir) +{ + // + // Ensure that the target direction is non-zero. + // + + if (targetDir.length () == 0) targetDir = Vec3 (0, 0, 1); + + // + // Ensure that the up direction is non-zero. + // + + if (upDir.length () == 0) upDir = Vec3 (0, 1, 0); + + // + // Check for degeneracies. If the upDir and targetDir are parallel + // or opposite, then compute a new, arbitrary up direction that is + // not parallel or opposite to the targetDir. + // + + if (upDir.cross (targetDir).length () == 0) + { + upDir = targetDir.cross (Vec3 (1, 0, 0)); + if (upDir.length () == 0) upDir = targetDir.cross (Vec3 (0, 0, 1)); + } + + // + // Compute the x-, y-, and z-axis vectors of the new coordinate system. + // + + Vec3 targetPerpDir = upDir.cross (targetDir); + Vec3 targetUpDir = targetDir.cross (targetPerpDir); + + // + // Rotate the x-axis into targetPerpDir (row 0), + // rotate the y-axis into targetUpDir (row 1), + // rotate the z-axis into targetDir (row 2). + // + + Vec3 row[3]; + row[0] = targetPerpDir.normalized (); + row[1] = targetUpDir.normalized (); + row[2] = targetDir.normalized (); + + result.x[0][0] = row[0][0]; + result.x[0][1] = row[0][1]; + result.x[0][2] = row[0][2]; + result.x[0][3] = (T) 0; + + result.x[1][0] = row[1][0]; + result.x[1][1] = row[1][1]; + result.x[1][2] = row[1][2]; + result.x[1][3] = (T) 0; + + result.x[2][0] = row[2][0]; + result.x[2][1] = row[2][1]; + result.x[2][2] = row[2][2]; + result.x[2][3] = (T) 0; + + result.x[3][0] = (T) 0; + result.x[3][1] = (T) 0; + result.x[3][2] = (T) 0; + result.x[3][3] = (T) 1; +} + +// Compute an orthonormal direct frame from : a position, an x axis direction and a normal to the y axis +// If the x axis and normal are perpendicular, then the normal will have the same direction as the z axis. +// Inputs are : +// -the position of the frame +// -the x axis direction of the frame +// -a normal to the y axis of the frame +// Return is the orthonormal frame +template +Matrix44 +computeLocalFrame (const Vec3& p, const Vec3& xDir, const Vec3& normal) +{ + Vec3 _xDir (xDir); + Vec3 x = _xDir.normalize (); + Vec3 y = (normal % x).normalize (); + Vec3 z = (x % y).normalize (); + + Matrix44 L; + L[0][0] = x[0]; + L[0][1] = x[1]; + L[0][2] = x[2]; + L[0][3] = 0.0; + + L[1][0] = y[0]; + L[1][1] = y[1]; + L[1][2] = y[2]; + L[1][3] = 0.0; + + L[2][0] = z[0]; + L[2][1] = z[1]; + L[2][2] = z[2]; + L[2][3] = 0.0; + + L[3][0] = p[0]; + L[3][1] = p[1]; + L[3][2] = p[2]; + L[3][3] = 1.0; + + return L; +} + +/// Add a translate/rotate/scale offset to an input frame and put it +/// in another frame of reference. +/// +/// @param inMat input frame +/// @param tOffset translate offset +/// @param rOffset rotate offset in degrees +/// @param sOffset scale offset +/// @param ref Frame of reference +/// @return The offsetted frame +template +Matrix44 +addOffset ( + const Matrix44& inMat, + const Vec3& tOffset, + const Vec3& rOffset, + const Vec3& sOffset, + const Matrix44& ref) +{ + Matrix44 O; + + Vec3 _rOffset (rOffset); + _rOffset *= T(M_PI / 180.0); + O.rotate (_rOffset); + + O[3][0] = tOffset[0]; + O[3][1] = tOffset[1]; + O[3][2] = tOffset[2]; + + Matrix44 S; + S.scale (sOffset); + + Matrix44 X = S * O * inMat * ref; + + return X; +} + +// Compute Translate/Rotate/Scale matrix from matrix A with the Rotate/Scale of Matrix B +// Inputs are : +// -keepRotateA : if true keep rotate from matrix A, use B otherwise +// -keepScaleA : if true keep scale from matrix A, use B otherwise +// -Matrix A +// -Matrix B +// Return Matrix A with tweaked rotation/scale +template +Matrix44 +computeRSMatrix ( + bool keepRotateA, + bool keepScaleA, + const Matrix44& A, + const Matrix44& B) +{ + Vec3 as, ah, ar, at; + if (!extractSHRT (A, as, ah, ar, at)) + throw std::domain_error ("degenerate A matrix in computeRSMatrix"); + + Vec3 bs, bh, br, bt; + if (!extractSHRT (B, bs, bh, br, bt)) + throw std::domain_error ("degenerate B matrix in computeRSMatrix"); + + if (!keepRotateA) ar = br; + + if (!keepScaleA) as = bs; + + Matrix44 mat; + mat.makeIdentity (); + mat.translate (at); + mat.rotate (ar); + mat.scale (as); + + return mat; +} + +//----------------------------------------------------------------------------- +// Implementation for 3x3 Matrix +//------------------------------ + +template +bool +extractScaling (const Matrix33& mat, Vec2& scl, bool exc) +{ + T shr; + Matrix33 M (mat); + + if (!extractAndRemoveScalingAndShear (M, scl, shr, exc)) return false; + + return true; +} + +template +Matrix33 +sansScaling (const Matrix33& mat, bool exc) +{ + Vec2 scl; + T shr; + T rot; + Vec2 tran; + + if (!extractSHRT (mat, scl, shr, rot, tran, exc)) return mat; + + Matrix33 M; + + M.translate (tran); + M.rotate (rot); + M.shear (shr); + + return M; +} + +template +bool +removeScaling (Matrix33& mat, bool exc) +{ + Vec2 scl; + T shr; + T rot; + Vec2 tran; + + if (!extractSHRT (mat, scl, shr, rot, tran, exc)) return false; + + mat.makeIdentity (); + mat.translate (tran); + mat.rotate (rot); + mat.shear (shr); + + return true; +} + +template +bool +extractScalingAndShear (const Matrix33& mat, Vec2& scl, T& shr, bool exc) +{ + Matrix33 M (mat); + + if (!extractAndRemoveScalingAndShear (M, scl, shr, exc)) return false; + + return true; +} + +template +Matrix33 +sansScalingAndShear (const Matrix33& mat, bool exc) +{ + Vec2 scl; + T shr; + Matrix33 M (mat); + + if (!extractAndRemoveScalingAndShear (M, scl, shr, exc)) return mat; + + return M; +} + +template +bool +removeScalingAndShear (Matrix33& mat, bool exc) +{ + Vec2 scl; + T shr; + + if (!extractAndRemoveScalingAndShear (mat, scl, shr, exc)) return false; + + return true; +} + +template +bool +extractAndRemoveScalingAndShear ( + Matrix33& mat, Vec2& scl, T& shr, bool exc) +{ + Vec2 row[2]; + + row[0] = Vec2 (mat[0][0], mat[0][1]); + row[1] = Vec2 (mat[1][0], mat[1][1]); + + T maxVal = 0; + for (int i = 0; i < 2; i++) + for (int j = 0; j < 2; j++) + if (IMATH_INTERNAL_NAMESPACE::abs (mat[i][j]) > maxVal) + maxVal = IMATH_INTERNAL_NAMESPACE::abs (mat[i][j]); + + // + // We normalize the 2x2 matrix here. + // It was noticed that this can improve numerical stability significantly, + // especially when many of the upper 2x2 matrix's coefficients are very + // close to zero; we correct for this step at the end by multiplying the + // scaling factors by maxVal at the end (shear and rotation are not + // affected by the normalization). + + if (maxVal != 0) + { + for (int i = 0; i < 2; i++) + if (!checkForZeroScaleInRow (maxVal, row[i], exc)) + return false; + else + row[i] /= maxVal; + } + + // Compute X scale factor. + scl.x = row[0].length (); + if (!checkForZeroScaleInRow (scl.x, row[0], exc)) return false; + + // Normalize first row. + row[0] /= scl.x; + + // An XY shear factor will shear the X coord. as the Y coord. changes. + // There are 2 combinations (XY, YX), although we only extract the XY + // shear factor because we can effect the an YX shear factor by + // shearing in XY combined with rotations and scales. + // + // shear matrix < 1, YX, 0, + // XY, 1, 0, + // 0, 0, 1 > + + // Compute XY shear factor and make 2nd row orthogonal to 1st. + shr = row[0].dot (row[1]); + row[1] -= shr * row[0]; + + // Now, compute Y scale. + scl.y = row[1].length (); + if (!checkForZeroScaleInRow (scl.y, row[1], exc)) return false; + + // Normalize 2nd row and correct the XY shear factor for Y scaling. + row[1] /= scl.y; + shr /= scl.y; + + // At this point, the upper 2x2 matrix in mat is orthonormal. + // Check for a coordinate system flip. If the determinant + // is -1, then flip the rotation matrix and adjust the scale(Y) + // and shear(XY) factors to compensate. + if (row[0].x * row[1].y - row[0].y * row[1].x < 0) + { + row[1].x *= -1; + row[1].y *= -1; + scl.y *= -1; + shr *= -1; + } + + // Copy over the orthonormal rows into the returned matrix. + // The upper 2x2 matrix in mat is now a rotation matrix. + for (int i = 0; i < 2; i++) + { + mat[i][0] = row[i].x; + mat[i][1] = row[i].y; + } + + scl *= maxVal; + + return true; +} + +template +void +extractEuler (const Matrix22& mat, T& rot) +{ + // + // Normalize the local x and y axes to remove scaling. + // + + Vec2 i (mat[0][0], mat[0][1]); + Vec2 j (mat[1][0], mat[1][1]); + + i.normalize (); + j.normalize (); + + // + // Extract the angle, rot. + // + + rot = -std::atan2 (j[0], i[0]); +} + +template +void +extractEuler (const Matrix33& mat, T& rot) +{ + // + // Normalize the local x and y axes to remove scaling. + // + + Vec2 i (mat[0][0], mat[0][1]); + Vec2 j (mat[1][0], mat[1][1]); + + i.normalize (); + j.normalize (); + + // + // Extract the angle, rot. + // + + rot = -std::atan2 (j[0], i[0]); +} + +template +bool +extractSHRT ( + const Matrix33& mat, Vec2& s, T& h, T& r, Vec2& t, bool exc) +{ + Matrix33 rot; + + rot = mat; + if (!extractAndRemoveScalingAndShear (rot, s, h, exc)) return false; + + extractEuler (rot, r); + + t.x = mat[2][0]; + t.y = mat[2][1]; + + return true; +} + +/// @cond Doxygen_Suppress +template +bool +checkForZeroScaleInRow (const T& scl, const Vec2& row, bool exc /* = true */) +{ + for (int i = 0; i < 2; i++) + { + if ((abs (scl) < 1 && + abs (row[i]) >= std::numeric_limits::max () * abs (scl))) + { + if (exc) + throw std::domain_error ( + "Cannot remove zero scaling from matrix."); + else + return false; + } + } + + return true; +} +/// @endcond + +template +Matrix33 +outerProduct (const Vec3& a, const Vec3& b) +{ + return Matrix33 ( + a.x * b.x, + a.x * b.y, + a.x * b.z, + a.y * b.x, + a.y * b.y, + a.y * b.z, + a.z * b.x, + a.z * b.y, + a.z * b.z); +} + +/// Computes the translation and rotation that brings the 'from' points +/// as close as possible to the 'to' points under the Frobenius norm. +/// To be more specific, let x be the matrix of 'from' points and y be +/// the matrix of 'to' points, we want to find the matrix A of the form +/// [ R t ] +/// [ 0 1 ] +/// that minimizes +/// || (A*x - y)^T * W * (A*x - y) ||_F +/// If doScaling is true, then a uniform scale is allowed also. +/// @param A From points +/// @param B To points +/// @param weights Per-point weights +/// @param numPoints The number of points in `A`, `B`, and `weights` (must be equal) +/// @param doScaling If true, include a scaling transformation +/// @return The procrustes transformation +template +M44d procrustesRotationAndTranslation ( + const Vec3* A, + const Vec3* B, + const T* weights, + const size_t numPoints, + const bool doScaling = false); + +/// Computes the translation and rotation that brings the 'from' points +/// as close as possible to the 'to' points under the Frobenius norm. +/// To be more specific, let x be the matrix of 'from' points and y be +/// the matrix of 'to' points, we want to find the matrix A of the form +/// [ R t ] +/// [ 0 1 ] +/// that minimizes +/// || (A*x - y)^T * W * (A*x - y) ||_F +/// If doScaling is true, then a uniform scale is allowed also. +/// @param A From points +/// @param B To points +/// @param numPoints The number of points in `A` and `B` (must be equal) +/// @param doScaling If true, include a scaling transformation +/// @return The procrustes transformation +template +M44d procrustesRotationAndTranslation ( + const Vec3* A, + const Vec3* B, + const size_t numPoints, + const bool doScaling = false); + +/// Compute the SVD of a 3x3 matrix using Jacobi transformations. This method +/// should be quite accurate (competitive with LAPACK) even for poorly +/// conditioned matrices, and because it has been written specifically for the +/// 3x3/4x4 case it is much faster than calling out to LAPACK. +/// +/// The SVD of a 3x3/4x4 matrix A is defined as follows: +/// A = U * S * V^T +/// where S is the diagonal matrix of singular values and both U and V are +/// orthonormal. By convention, the entries S are all positive and sorted from +/// the largest to the smallest. However, some uses of this function may +/// require that the matrix U*V^T have positive determinant; in this case, we +/// may make the smallest singular value negative to ensure that this is +/// satisfied. +/// +/// Currently only available for single- and double-precision matrices. +template +void jacobiSVD ( + const Matrix33& A, + Matrix33& U, + Vec3& S, + Matrix33& V, + const T tol = std::numeric_limits::epsilon (), + const bool forcePositiveDeterminant = false); + +/// Compute the SVD of a 3x3 matrix using Jacobi transformations. This method +/// should be quite accurate (competitive with LAPACK) even for poorly +/// conditioned matrices, and because it has been written specifically for the +/// 3x3/4x4 case it is much faster than calling out to LAPACK. +/// +/// The SVD of a 3x3/4x4 matrix A is defined as follows: +/// A = U * S * V^T +/// where S is the diagonal matrix of singular values and both U and V are +/// orthonormal. By convention, the entries S are all positive and sorted from +/// the largest to the smallest. However, some uses of this function may +/// require that the matrix U*V^T have positive determinant; in this case, we +/// may make the smallest singular value negative to ensure that this is +/// satisfied. +/// +/// Currently only available for single- and double-precision matrices. +template +void jacobiSVD ( + const Matrix44& A, + Matrix44& U, + Vec4& S, + Matrix44& V, + const T tol = std::numeric_limits::epsilon (), + const bool forcePositiveDeterminant = false); + +/// Compute the eigenvalues (S) and the eigenvectors (V) of a real +/// symmetric matrix using Jacobi transformation, using a given +/// tolerance `tol`. +/// +/// Jacobi transformation of a 3x3/4x4 matrix A outputs S and V: +/// A = V * S * V^T +/// where V is orthonormal and S is the diagonal matrix of eigenvalues. +/// Input matrix A must be symmetric. A is also modified during +/// the computation so that upper diagonal entries of A become zero. +template +void +jacobiEigenSolver (Matrix33& A, Vec3& S, Matrix33& V, const T tol); + +/// Compute the eigenvalues (S) and the eigenvectors (V) of +/// a real symmetric matrix using Jacobi transformation. +/// +/// Jacobi transformation of a 3x3/4x4 matrix A outputs S and V: +/// A = V * S * V^T +/// where V is orthonormal and S is the diagonal matrix of eigenvalues. +/// Input matrix A must be symmetric. A is also modified during +/// the computation so that upper diagonal entries of A become zero. +template +inline void +jacobiEigenSolver (Matrix33& A, Vec3& S, Matrix33& V) +{ + jacobiEigenSolver (A, S, V, std::numeric_limits::epsilon ()); +} + +/// Compute the eigenvalues (S) and the eigenvectors (V) of a real +/// symmetric matrix using Jacobi transformation, using a given +/// tolerance `tol`. +/// +/// Jacobi transformation of a 3x3/4x4 matrix A outputs S and V: +/// A = V * S * V^T +/// where V is orthonormal and S is the diagonal matrix of eigenvalues. +/// Input matrix A must be symmetric. A is also modified during +/// the computation so that upper diagonal entries of A become zero. +template +void +jacobiEigenSolver (Matrix44& A, Vec4& S, Matrix44& V, const T tol); + +/// Compute the eigenvalues (S) and the eigenvectors (V) of +/// a real symmetric matrix using Jacobi transformation. +/// +/// Jacobi transformation of a 3x3/4x4 matrix A outputs S and V: +/// A = V * S * V^T +/// where V is orthonormal and S is the diagonal matrix of eigenvalues. +/// Input matrix A must be symmetric. A is also modified during +/// the computation so that upper diagonal entries of A become zero. +template +inline void +jacobiEigenSolver (Matrix44& A, Vec4& S, Matrix44& V) +{ + jacobiEigenSolver (A, S, V, std::numeric_limits::epsilon ()); +} + +/// Compute a eigenvector corresponding to the abs max eigenvalue +/// of a real symmetric matrix using Jacobi transformation. +template void maxEigenVector (TM& A, TV& S); + +/// Compute a eigenvector corresponding to the abs min eigenvalue +/// of a real symmetric matrix using Jacobi transformation. +template void minEigenVector (TM& A, TV& S); + +IMATH_INTERNAL_NAMESPACE_HEADER_EXIT + +#endif // INCLUDED_IMATHMATRIXALGO_H diff --git a/third_party/tlRender-install-Release/include/Imath/ImathNamespace.h b/third_party/tlRender-install-Release/include/Imath/ImathNamespace.h new file mode 100644 index 00000000..3b7c801a --- /dev/null +++ b/third_party/tlRender-install-Release/include/Imath/ImathNamespace.h @@ -0,0 +1,96 @@ +// +// SPDX-License-Identifier: BSD-3-Clause +// Copyright Contributors to the OpenEXR Project. +// + +// +// The Imath library namespace +// +// The purpose of this file is to make it possible to specify an +// IMATH_INTERNAL_NAMESPACE as a preprocessor definition and have all of the +// Imath symbols defined within that namespace rather than the standard +// Imath namespace. Those symbols are made available to client code through +// the IMATH_NAMESPACE in addition to the IMATH_INTERNAL_NAMESPACE. +// +// To ensure source code compatibility, the IMATH_NAMESPACE defaults to Imath +// and then "using namespace IMATH_INTERNAL_NAMESPACE;" brings all of the +// declarations from the IMATH_INTERNAL_NAMESPACE into the IMATH_NAMESPACE. +// This means that client code can continue to use syntax like Imath::V3f, +// but at link time it will resolve to a mangled symbol based on the +// IMATH_INTERNAL_NAMESPACE. +// +// As an example, if one needed to build against a newer version of Imath and +// have it run alongside an older version in the same application, it is now +// possible to use an internal namespace to prevent collisions between the +// older versions of Imath symbols and the newer ones. To do this, the +// following could be defined at build time: +// +// IMATH_INTERNAL_NAMESPACE = Imath_v2 +// +// This means that declarations inside Imath headers look like this (after +// the preprocessor has done its work): +// +// namespace Imath_v2 { +// ... +// class declarations +// ... +// } +// +// namespace Imath { +// using namespace Imath_v2; +// } +// + +#ifndef INCLUDED_IMATHNAMESPACE_H +#define INCLUDED_IMATHNAMESPACE_H + +/// @cond Doxygen_Suppress + +#include "ImathConfig.h" + +#ifndef IMATH_NAMESPACE +# define IMATH_NAMESPACE Imath +#endif + +#ifndef IMATH_INTERNAL_NAMESPACE +# define IMATH_INTERNAL_NAMESPACE IMATH_NAMESPACE +#endif + +#ifdef __cplusplus + +// +// We need to be sure that we import the internal namespace into the public one. +// To do this, we use the small bit of code below which initially defines +// IMATH_INTERNAL_NAMESPACE (so it can be referenced) and then defines +// IMATH_NAMESPACE and pulls the internal symbols into the public +// namespace. +// + +namespace IMATH_INTERNAL_NAMESPACE +{} +namespace IMATH_NAMESPACE +{ +using namespace IMATH_INTERNAL_NAMESPACE; +} + +// +// There are identical pairs of HEADER/SOURCE ENTER/EXIT macros so that +// future extension to the namespace mechanism is possible without changing +// project source code. +// + +# define IMATH_INTERNAL_NAMESPACE_HEADER_ENTER \ + namespace IMATH_INTERNAL_NAMESPACE \ + { +# define IMATH_INTERNAL_NAMESPACE_HEADER_EXIT } + +# define IMATH_INTERNAL_NAMESPACE_SOURCE_ENTER \ + namespace IMATH_INTERNAL_NAMESPACE \ + { +# define IMATH_INTERNAL_NAMESPACE_SOURCE_EXIT } + +#endif // __cplusplus + +/// @endcond + +#endif /* INCLUDED_IMATHNAMESPACE_H */ diff --git a/third_party/tlRender-install-Release/include/Imath/ImathPlane.h b/third_party/tlRender-install-Release/include/Imath/ImathPlane.h new file mode 100644 index 00000000..a9cb613a --- /dev/null +++ b/third_party/tlRender-install-Release/include/Imath/ImathPlane.h @@ -0,0 +1,273 @@ +// +// SPDX-License-Identifier: BSD-3-Clause +// Copyright Contributors to the OpenEXR Project. +// + +// +// A 3D plane class template +// + +#ifndef INCLUDED_IMATHPLANE_H +#define INCLUDED_IMATHPLANE_H + +#include "ImathExport.h" +#include "ImathNamespace.h" + +#include "ImathLine.h" +#include "ImathVec.h" + +IMATH_INTERNAL_NAMESPACE_HEADER_ENTER + +/// +/// The `Plane3` class represents a half space in 3D, so the normal +/// may point either towards or away from origin. The plane `P` can +/// be represented by Plane3 as either `p` or `-p` corresponding to +/// the two half-spaces on either side of the plane. Any function +/// which computes a distance will return either negative or positive +/// values for the distance indicating which half-space the point is +/// in. Note that reflection, and intersection functions will operate +/// as expected. + +template class IMATH_EXPORT_TEMPLATE_TYPE Plane3 +{ +public: + /// @{ + /// @name Direct access to member fields + + /// The normal to the plane + Vec3 normal; + + /// The distance from the origin to the plane + T distance; + + /// @} + + /// @{ + /// @name Constructors + + /// Uninitialized by default + IMATH_HOSTDEVICE Plane3 () IMATH_NOEXCEPT {} + + /// Initialize with a normal and distance + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 + Plane3 (const Vec3& normal, T distance) IMATH_NOEXCEPT; + + /// Initialize with a point and a normal + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 + Plane3 (const Vec3& point, const Vec3& normal) IMATH_NOEXCEPT; + + /// Initialize with three points + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 Plane3 ( + const Vec3& point1, + const Vec3& point2, + const Vec3& point3) IMATH_NOEXCEPT; + + /// @} + + /// @{ + /// @name Manipulation + + /// Set via a given normal and distance + IMATH_HOSTDEVICE void + set (const Vec3& normal, T distance) IMATH_NOEXCEPT; + + /// Set via a given point and normal + IMATH_HOSTDEVICE void + set (const Vec3& point, const Vec3& normal) IMATH_NOEXCEPT; + + /// Set via three points + IMATH_HOSTDEVICE void + set (const Vec3& point1, const Vec3& point2, const Vec3& point3) + IMATH_NOEXCEPT; + + /// @} + + /// @{ + /// @name Utility Methods + + /// Determine if a line intersects the plane. + /// @param line The line + /// @param[out] intersection The point of intersection + /// @return True if the line intersects the plane. + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 bool intersect ( + const Line3& line, Vec3& intersection) const IMATH_NOEXCEPT; + + /// Determine if a line intersects the plane. + /// @param line The line + /// @param[out] parameter The parametric value of the point of intersection + /// @return True if the line intersects the plane. + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 bool + intersectT (const Line3& line, T& parameter) const IMATH_NOEXCEPT; + + /// Return the distance from a point to the plane. + IMATH_HOSTDEVICE constexpr T + distanceTo (const Vec3& point) const IMATH_NOEXCEPT; + + /// Reflect the given point around the plane. + IMATH_HOSTDEVICE constexpr Vec3 + reflectPoint (const Vec3& point) const IMATH_NOEXCEPT; + + /// Reflect the direction vector around the plane + IMATH_HOSTDEVICE constexpr Vec3 + reflectVector (const Vec3& vec) const IMATH_NOEXCEPT; + + /// @} + typedef T BaseType; + typedef T value_type; +}; + +/// Plane of type float +typedef Plane3 Plane3f; + +/// Plane of type double +typedef Plane3 Plane3d; + +//--------------- +// Implementation +//--------------- + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline Plane3::Plane3 ( + const Vec3& p0, const Vec3& p1, const Vec3& p2) IMATH_NOEXCEPT +{ + set (p0, p1, p2); +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline Plane3::Plane3 ( + const Vec3& n, T d) IMATH_NOEXCEPT +{ + set (n, d); +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline Plane3::Plane3 ( + const Vec3& p, const Vec3& n) IMATH_NOEXCEPT +{ + set (p, n); +} + +template +IMATH_HOSTDEVICE inline void +Plane3::set ( + const Vec3& point1, + const Vec3& point2, + const Vec3& point3) IMATH_NOEXCEPT +{ + normal = (point2 - point1) % (point3 - point1); + normal.normalize (); + distance = normal ^ point1; +} + +template +IMATH_HOSTDEVICE inline void +Plane3::set (const Vec3& point, const Vec3& n) IMATH_NOEXCEPT +{ + normal = n; + normal.normalize (); + distance = normal ^ point; +} + +template +IMATH_HOSTDEVICE inline void +Plane3::set (const Vec3& n, T d) IMATH_NOEXCEPT +{ + normal = n; + normal.normalize (); + distance = d; +} + +template +IMATH_HOSTDEVICE constexpr inline T +Plane3::distanceTo (const Vec3& point) const IMATH_NOEXCEPT +{ + return (point ^ normal) - distance; +} + +template +IMATH_HOSTDEVICE constexpr inline Vec3 +Plane3::reflectPoint (const Vec3& point) const IMATH_NOEXCEPT +{ + return normal * distanceTo (point) * -2.0 + point; +} + +template +IMATH_HOSTDEVICE constexpr inline Vec3 +Plane3::reflectVector (const Vec3& v) const IMATH_NOEXCEPT +{ + return normal * (normal ^ v) * 2.0 - v; +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline bool +Plane3::intersect (const Line3& line, Vec3& point) const IMATH_NOEXCEPT +{ + T d = normal ^ line.dir; + if (d == 0.0) return false; + T t = -((normal ^ line.pos) - distance) / d; + point = line (t); + return true; +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline bool +Plane3::intersectT (const Line3& line, T& t) const IMATH_NOEXCEPT +{ + T d = normal ^ line.dir; + if (d == 0.0) return false; + t = -((normal ^ line.pos) - distance) / d; + return true; +} + +/// Stream output, as "(normal distance)" +template +std::ostream& +operator<< (std::ostream& o, const Plane3& plane) +{ + return o << "(" << plane.normal << ", " << plane.distance << ")"; +} + +/// Transform a plane by a matrix +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 Plane3 +operator* (const Plane3& plane, const Matrix44& M) IMATH_NOEXCEPT +{ + // T + // -1 + // Could also compute M but that would suck. + // + + Vec3 dir1 = Vec3 (1, 0, 0) % plane.normal; + T dir1Len = dir1 ^ dir1; + + Vec3 tmp = Vec3 (0, 1, 0) % plane.normal; + T tmpLen = tmp ^ tmp; + + if (tmpLen > dir1Len) + { + dir1 = tmp; + dir1Len = tmpLen; + } + + tmp = Vec3 (0, 0, 1) % plane.normal; + tmpLen = tmp ^ tmp; + + if (tmpLen > dir1Len) { dir1 = tmp; } + + Vec3 dir2 = dir1 % plane.normal; + Vec3 point = plane.distance * plane.normal; + + return Plane3 (point * M, (point + dir2) * M, (point + dir1) * M); +} + +/// Reflect the pla +template +IMATH_HOSTDEVICE constexpr inline Plane3 +operator- (const Plane3& plane) IMATH_NOEXCEPT +{ + return Plane3 (-plane.normal, -plane.distance); +} + +IMATH_INTERNAL_NAMESPACE_HEADER_EXIT + +#endif // INCLUDED_IMATHPLANE_H diff --git a/third_party/tlRender-install-Release/include/Imath/ImathPlatform.h b/third_party/tlRender-install-Release/include/Imath/ImathPlatform.h new file mode 100644 index 00000000..9ea79247 --- /dev/null +++ b/third_party/tlRender-install-Release/include/Imath/ImathPlatform.h @@ -0,0 +1,84 @@ +// +// SPDX-License-Identifier: BSD-3-Clause +// Copyright Contributors to the OpenEXR Project. +// + +// +// This file contains functions and constants which aren't +// provided by the system libraries, compilers, or includes on +// certain platforms. +// + +#ifndef INCLUDED_IMATHPLATFORM_H +#define INCLUDED_IMATHPLATFORM_H + +/// @cond Doxygen_Suppress + +#include + +#include "ImathNamespace.h" + +#ifdef __cplusplus + +IMATH_INTERNAL_NAMESPACE_HEADER_ENTER + +// +// Helpful macros for checking which C++ standard we are compiling with. +// +# if (__cplusplus >= 202302L) +# define IMATH_CPLUSPLUS_VERSION 23 +# elif (__cplusplus >= 202002L) +# define IMATH_CPLUSPLUS_VERSION 20 +# elif (__cplusplus >= 201703L) +# define IMATH_CPLUSPLUS_VERSION 17 +# elif (__cplusplus >= 201402L) || (defined(_MSC_VER) && _MSC_VER >= 1914) +# define IMATH_CPLUSPLUS_VERSION 14 +# elif (__cplusplus >= 201103L) || (defined(_MSC_VER) && _MSC_VER >= 1900) +# define IMATH_CPLUSPLUS_VERSION 11 +# else +# error \ + "This version of Imath is meant to work only with C++11 and above" +# endif + +// +// Constexpr C++14 conditional definition +// +# if (IMATH_CPLUSPLUS_VERSION >= 14) +# define IMATH_CONSTEXPR14 constexpr +# else +# define IMATH_CONSTEXPR14 /* can not be constexpr before c++14 */ +# endif + +#endif // __cplusplus + +#ifndef M_PI +# define M_PI 3.14159265358979323846 +#endif + +#ifndef M_PI_2 +# define M_PI_2 1.57079632679489661923 // pi/2 +#endif + +//----------------------------------------------------------------------------- +// +// Some, but not all, C++ compilers support the C99 restrict +// keyword or some variant of it, for example, __restrict. +// +//----------------------------------------------------------------------------- + +#if defined(__GNUC__) || defined(__clang__) || defined(_MSC_VER) || \ + defined(__INTEL_COMPILER) +# define IMATH_RESTRICT __restrict +#else +# define IMATH_RESTRICT +#endif + +#ifdef __cplusplus + +IMATH_INTERNAL_NAMESPACE_HEADER_EXIT + +#endif // __cplusplus + +/// @endcond + +#endif // INCLUDED_IMATHPLATFORM_H diff --git a/third_party/tlRender-install-Release/include/Imath/ImathQuat.h b/third_party/tlRender-install-Release/include/Imath/ImathQuat.h new file mode 100644 index 00000000..a822e036 --- /dev/null +++ b/third_party/tlRender-install-Release/include/Imath/ImathQuat.h @@ -0,0 +1,1014 @@ +// +// SPDX-License-Identifier: BSD-3-Clause +// Copyright Contributors to the OpenEXR Project. +// + +// +// A quaternion +// +// "Quaternions came from Hamilton ... and have been an unmixed +// evil to those who have touched them in any way. Vector is a +// useless survival ... and has never been of the slightest use +// to any creature." +// +// - Lord Kelvin +// + +#ifndef INCLUDED_IMATHQUAT_H +#define INCLUDED_IMATHQUAT_H + +#include "ImathExport.h" +#include "ImathNamespace.h" + +#include "ImathMatrix.h" + +#include + +IMATH_INTERNAL_NAMESPACE_HEADER_ENTER + +#if (defined _WIN32 || defined _WIN64) && defined _MSC_VER +// Disable MS VC++ warnings about conversion from double to float +# pragma warning(push) +# pragma warning(disable : 4244) +#endif + +/// +/// The Quat class implements the quaternion numerical type -- you +/// will probably want to use this class to represent orientations +/// in R3 and to convert between various euler angle reps. You +/// should probably use Imath::Euler<> for that. +/// + +template class IMATH_EXPORT_TEMPLATE_TYPE Quat +{ +public: + using value_type = T; + + /// @{ + /// @name Direct access to elements + + /// The real part + T r; + + /// The imaginary vector + Vec3 v; + + /// @} + + /// Element access: q[0] is the real part, (q[1],q[2],q[3]) is the + /// imaginary part. + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 T& + operator[] (int index) IMATH_NOEXCEPT; // as 4D vector + + /// Element access: q[0] is the real part, (q[1],q[2],q[3]) is the + /// imaginary part. + IMATH_HOSTDEVICE constexpr T operator[] (int index) const IMATH_NOEXCEPT; + + /// @{ + /// @name Constructors + + /// Default constructor is the identity quat + IMATH_HOSTDEVICE constexpr Quat () IMATH_NOEXCEPT; + + /// Copy constructor + IMATH_HOSTDEVICE constexpr Quat (const Quat& q) IMATH_NOEXCEPT; + + /// Construct from a quaternion of a another base type + template + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 Quat (const Quat& q) IMATH_NOEXCEPT; + + /// Initialize with real part `s` and imaginary vector 1(i,j,k)` + IMATH_HOSTDEVICE constexpr Quat (T s, T i, T j, T k) IMATH_NOEXCEPT; + + /// Initialize with real part `s` and imaginary vector `d` + IMATH_HOSTDEVICE constexpr Quat (T s, Vec3 d) IMATH_NOEXCEPT; + + /// The identity quaternion + IMATH_HOSTDEVICE constexpr static Quat identity () IMATH_NOEXCEPT; + + /// Assignment + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 const Quat& + operator= (const Quat& q) IMATH_NOEXCEPT; + + /// Destructor + ~Quat () IMATH_NOEXCEPT = default; + + /// @} + + /// @{ + /// @name Basic Algebra + /// + /// Note that the operator return values are *NOT* normalized + // + + /// Quaternion multiplication + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 const Quat& + operator*= (const Quat& q) IMATH_NOEXCEPT; + + /// Scalar multiplication: multiply both real and imaginary parts + /// by the given scalar. + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 const Quat& + operator*= (T t) IMATH_NOEXCEPT; + + /// Quaterion division, using the inverse() + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 const Quat& + operator/= (const Quat& q) IMATH_NOEXCEPT; + + /// Scalar division: multiply both real and imaginary parts + /// by the given scalar. + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 const Quat& + operator/= (T t) IMATH_NOEXCEPT; + + /// Quaternion addition + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 const Quat& + operator+= (const Quat& q) IMATH_NOEXCEPT; + + /// Quaternion subtraction + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 const Quat& + operator-= (const Quat& q) IMATH_NOEXCEPT; + + /// Equality + template + IMATH_HOSTDEVICE constexpr bool + operator== (const Quat& q) const IMATH_NOEXCEPT; + + /// Inequality + template + IMATH_HOSTDEVICE constexpr bool + operator!= (const Quat& q) const IMATH_NOEXCEPT; + + /// @} + + /// @{ + /// @name Query + + /// Return the R4 length + IMATH_HOSTDEVICE constexpr T length () const IMATH_NOEXCEPT; // in R4 + + /// Return the angle of the axis/angle representation + IMATH_HOSTDEVICE constexpr T angle () const IMATH_NOEXCEPT; + + /// Return the axis of the axis/angle representation + IMATH_HOSTDEVICE constexpr Vec3 axis () const IMATH_NOEXCEPT; + + /// Return a 3x3 rotation matrix + IMATH_HOSTDEVICE constexpr Matrix33 toMatrix33 () const IMATH_NOEXCEPT; + + /// Return a 4x4 rotation matrix + IMATH_HOSTDEVICE constexpr Matrix44 toMatrix44 () const IMATH_NOEXCEPT; + + /// Return the logarithm of the quaterion + IMATH_HOSTDEVICE Quat log () const IMATH_NOEXCEPT; + + /// Return the exponent of the quaterion + IMATH_HOSTDEVICE Quat exp () const IMATH_NOEXCEPT; + + /// @} + + /// @{ + /// @name Utility Methods + + /// Invert in place: this = 1 / this. + /// @return const reference to this. + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 Quat& invert () IMATH_NOEXCEPT; + + /// Return 1/this, leaving this unchanged. + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 Quat inverse () const IMATH_NOEXCEPT; + + /// Normalize in place + /// @return const reference to this. + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 Quat& normalize () IMATH_NOEXCEPT; + + /// Return a normalized quaternion, leaving this unmodified. + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 Quat + normalized () const IMATH_NOEXCEPT; + + /// Rotate the given point by the quaterion. + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 Vec3 + rotateVector (const Vec3& original) const IMATH_NOEXCEPT; + + /// Return the Euclidean inner product. + IMATH_HOSTDEVICE constexpr T + euclideanInnerProduct (const Quat& q) const IMATH_NOEXCEPT; + + /// Set the quaterion to be a rotation around the given axis by the + /// given angle. + /// @return const reference to this. + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 Quat& + setAxisAngle (const Vec3& axis, T radians) IMATH_NOEXCEPT; + + /// Set the quaternion to be a rotation that transforms the + /// direction vector `fromDirection` to `toDirection` + /// @return const reference to this. + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 Quat& + setRotation (const Vec3& fromDirection, const Vec3& toDirection) + IMATH_NOEXCEPT; + + /// @} + + /// The base type: In templates that accept a parameter `V`, you + /// can refer to `T` as `V::BaseType` + typedef T BaseType; + +private: + IMATH_HOSTDEVICE void setRotationInternal ( + const Vec3& f0, const Vec3& t0, Quat& q) IMATH_NOEXCEPT; +}; + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 Quat +slerp (const Quat& q1, const Quat& q2, T t) IMATH_NOEXCEPT; + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 Quat +slerpShortestArc (const Quat& q1, const Quat& q2, T t) IMATH_NOEXCEPT; + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 Quat squad ( + const Quat& q1, + const Quat& q2, + const Quat& qa, + const Quat& qb, + T t) IMATH_NOEXCEPT; + +/// +/// From advanced Animation and Rendering Techniques by Watt and Watt, +/// Page 366: +/// +/// computing the inner quadrangle points (qa and qb) to guarantee +/// tangent continuity. +template +IMATH_HOSTDEVICE void intermediate ( + const Quat& q0, + const Quat& q1, + const Quat& q2, + const Quat& q3, + Quat& qa, + Quat& qb) IMATH_NOEXCEPT; + +template +IMATH_HOSTDEVICE constexpr Matrix33 +operator* (const Matrix33& M, const Quat& q) IMATH_NOEXCEPT; + +template +IMATH_HOSTDEVICE constexpr Matrix33 +operator* (const Quat& q, const Matrix33& M) IMATH_NOEXCEPT; + +template std::ostream& operator<< (std::ostream& o, const Quat& q); + +template +IMATH_HOSTDEVICE constexpr Quat +operator* (const Quat& q1, const Quat& q2) IMATH_NOEXCEPT; + +template +IMATH_HOSTDEVICE constexpr Quat +operator/ (const Quat& q1, const Quat& q2) IMATH_NOEXCEPT; + +template +IMATH_HOSTDEVICE constexpr Quat +operator/ (const Quat& q, T t) IMATH_NOEXCEPT; + +template +IMATH_HOSTDEVICE constexpr Quat +operator* (const Quat& q, T t) IMATH_NOEXCEPT; + +template +IMATH_HOSTDEVICE constexpr Quat +operator* (T t, const Quat& q) IMATH_NOEXCEPT; + +template +IMATH_HOSTDEVICE constexpr Quat +operator+ (const Quat& q1, const Quat& q2) IMATH_NOEXCEPT; + +template +IMATH_HOSTDEVICE constexpr Quat +operator- (const Quat& q1, const Quat& q2) IMATH_NOEXCEPT; + +template +IMATH_HOSTDEVICE constexpr Quat operator~ (const Quat& q) IMATH_NOEXCEPT; + +template +IMATH_HOSTDEVICE constexpr Quat operator- (const Quat& q) IMATH_NOEXCEPT; + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 Vec3 +operator* (const Vec3& v, const Quat& q) IMATH_NOEXCEPT; + +/// Quaternion of type float +typedef Quat Quatf; + +/// Quaternion of type double +typedef Quat Quatd; + +//--------------- +// Implementation +//--------------- + +template +IMATH_HOSTDEVICE constexpr inline Quat::Quat () IMATH_NOEXCEPT : r (1), + v (0, 0, 0) +{ + // empty +} + +template +template +IMATH_HOSTDEVICE + IMATH_CONSTEXPR14 inline Quat::Quat (const Quat& q) IMATH_NOEXCEPT + : r (q.r), + v (q.v) +{ + // empty +} + +template +IMATH_HOSTDEVICE constexpr inline Quat::Quat (T s, T i, T j, T k) + IMATH_NOEXCEPT : r (s), + v (i, j, k) +{ + // empty +} + +template +IMATH_HOSTDEVICE constexpr inline Quat::Quat (T s, Vec3 d) IMATH_NOEXCEPT + : r (s), + v (d) +{ + // empty +} + +template +IMATH_HOSTDEVICE constexpr inline Quat::Quat (const Quat& q) + IMATH_NOEXCEPT : r (q.r), + v (q.v) +{ + // empty +} + +template +IMATH_HOSTDEVICE constexpr inline Quat +Quat::identity () IMATH_NOEXCEPT +{ + return Quat (); +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline const Quat& +Quat::operator= (const Quat& q) IMATH_NOEXCEPT +{ + r = q.r; + v = q.v; + return *this; +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline const Quat& +Quat::operator*= (const Quat& q) IMATH_NOEXCEPT +{ + T rtmp = r * q.r - (v ^ q.v); + v = r * q.v + v * q.r + v % q.v; + r = rtmp; + return *this; +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline const Quat& +Quat::operator*= (T t) IMATH_NOEXCEPT +{ + r *= t; + v *= t; + return *this; +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline const Quat& +Quat::operator/= (const Quat& q) IMATH_NOEXCEPT +{ + *this = *this * q.inverse (); + return *this; +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline const Quat& +Quat::operator/= (T t) IMATH_NOEXCEPT +{ + r /= t; + v /= t; + return *this; +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline const Quat& +Quat::operator+= (const Quat& q) IMATH_NOEXCEPT +{ + r += q.r; + v += q.v; + return *this; +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline const Quat& +Quat::operator-= (const Quat& q) IMATH_NOEXCEPT +{ + r -= q.r; + v -= q.v; + return *this; +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline T& +Quat::operator[] (int index) IMATH_NOEXCEPT +{ + return index ? v[index - 1] : r; +} + +template +IMATH_HOSTDEVICE constexpr inline T +Quat::operator[] (int index) const IMATH_NOEXCEPT +{ + return index ? v[index - 1] : r; +} + +template +template +IMATH_HOSTDEVICE constexpr inline bool +Quat::operator== (const Quat& q) const IMATH_NOEXCEPT +{ + return r == q.r && v == q.v; +} + +template +template +IMATH_HOSTDEVICE constexpr inline bool +Quat::operator!= (const Quat& q) const IMATH_NOEXCEPT +{ + return r != q.r || v != q.v; +} + +/// 4D dot product +template +IMATH_HOSTDEVICE constexpr inline T +operator^ (const Quat& q1, const Quat& q2) IMATH_NOEXCEPT +{ + return q1.r * q2.r + (q1.v ^ q2.v); +} + +template +IMATH_HOSTDEVICE constexpr inline T +Quat::length () const IMATH_NOEXCEPT +{ + return std::sqrt (r * r + (v ^ v)); +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline Quat& + Quat::normalize () IMATH_NOEXCEPT +{ + if (T l = length ()) + { + r /= l; + v /= l; + } + else + { + r = 1; + v = Vec3 (0); + } + + return *this; +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline Quat + Quat::normalized () const IMATH_NOEXCEPT +{ + if (T l = length ()) return Quat (r / l, v / l); + + return Quat (); +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline Quat + Quat::inverse () const IMATH_NOEXCEPT +{ + // + // 1 Q* + // - = ---- where Q* is conjugate (operator~) + // Q Q* Q and (Q* Q) == Q ^ Q (4D dot) + // + + T qdot = *this ^ *this; + return Quat (r / qdot, -v / qdot); +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline Quat& + Quat::invert () IMATH_NOEXCEPT +{ + T qdot = (*this) ^ (*this); + r /= qdot; + v = -v / qdot; + return *this; +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline Vec3 +Quat::rotateVector (const Vec3& original) const IMATH_NOEXCEPT +{ + // + // Given a vector p and a quaternion q (aka this), + // calculate p' = qpq* + // + // Assumes unit quaternions (because non-unit + // quaternions cannot be used to rotate vectors + // anyway). + // + + Quat vec (0, original); // temporarily promote grade of original + Quat inv (*this); + inv.v *= -1; // unit multiplicative inverse + Quat result = *this * vec * inv; + return result.v; +} + +template +IMATH_HOSTDEVICE constexpr inline T +Quat::euclideanInnerProduct (const Quat& q) const IMATH_NOEXCEPT +{ + return r * q.r + v.x * q.v.x + v.y * q.v.y + v.z * q.v.z; +} + +/// +/// Compute the angle between two quaternions, +/// interpreting the quaternions as 4D vectors. +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline T +angle4D (const Quat& q1, const Quat& q2) IMATH_NOEXCEPT +{ + Quat d = q1 - q2; + T lengthD = std::sqrt (d ^ d); + + Quat s = q1 + q2; + T lengthS = std::sqrt (s ^ s); + + return 2 * std::atan2 (lengthD, lengthS); +} + +/// +/// Spherical linear interpolation. +/// Assumes q1 and q2 are normalized and that q1 != -q2. +/// +/// This method does *not* interpolate along the shortest +/// arc between q1 and q2. If you desire interpolation +/// along the shortest arc, and q1^q2 is negative, then +/// consider calling slerpShortestArc(), below, or flipping +/// the second quaternion explicitly. +/// +/// The implementation of squad() depends on a slerp() +/// that interpolates as is, without the automatic +/// flipping. +/// +/// Don Hatch explains the method we use here on his +/// web page, The Right Way to Calculate Stuff, at +/// http://www.plunk.org/~hatch/rightway.php +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline Quat +slerp (const Quat& q1, const Quat& q2, T t) IMATH_NOEXCEPT +{ + T a = angle4D (q1, q2); + T s = 1 - t; + + Quat q = sinx_over_x (s * a) / sinx_over_x (a) * s * q1 + + sinx_over_x (t * a) / sinx_over_x (a) * t * q2; + + return q.normalized (); +} + +/// +/// Spherical linear interpolation along the shortest +/// arc from q1 to either q2 or -q2, whichever is closer. +/// Assumes q1 and q2 are unit quaternions. +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline Quat +slerpShortestArc (const Quat& q1, const Quat& q2, T t) IMATH_NOEXCEPT +{ + if ((q1 ^ q2) >= 0) + return slerp (q1, q2, t); + else + return slerp (q1, -q2, t); +} + +/// +/// Spherical Cubic Spline Interpolation - from Advanced Animation and +/// Rendering Techniques by Watt and Watt, Page 366: +/// +/// A spherical curve is constructed using three spherical linear +/// interpolations of a quadrangle of unit quaternions: q1, qa, qb, +/// q2. Given a set of quaternion keys: q0, q1, q2, q3, this routine +/// does the interpolation between q1 and q2 by constructing two +/// intermediate quaternions: qa and qb. The qa and qb are computed by +/// the intermediate function to guarantee the continuity of tangents +/// across adjacent cubic segments. The qa represents in-tangent for +/// q1 and the qb represents the out-tangent for q2. +/// +/// The q1 q2 is the cubic segment being interpolated. +/// +/// The q0 is from the previous adjacent segment and q3 is from the +/// next adjacent segment. The q0 and q3 are used in computing qa and +/// qb. +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline Quat + spline ( + const Quat& q0, + const Quat& q1, + const Quat& q2, + const Quat& q3, + T t) IMATH_NOEXCEPT +{ + Quat qa = intermediate (q0, q1, q2); + Quat qb = intermediate (q1, q2, q3); + Quat result = squad (q1, qa, qb, q2, t); + + return result; +} + +/// +/// Spherical Quadrangle Interpolation - from Advanced Animation and +/// Rendering Techniques by Watt and Watt, Page 366: +/// +/// It constructs a spherical cubic interpolation as a series of three +/// spherical linear interpolations of a quadrangle of unit +/// quaternions. +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline Quat + squad ( + const Quat& q1, + const Quat& qa, + const Quat& qb, + const Quat& q2, + T t) IMATH_NOEXCEPT +{ + Quat r1 = slerp (q1, q2, t); + Quat r2 = slerp (qa, qb, t); + Quat result = slerp (r1, r2, 2 * t * (1 - t)); + + return result; +} + +/// Compute the intermediate point between three quaternions `q0`, `q1`, +/// and `q2`. +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline Quat +intermediate (const Quat& q0, const Quat& q1, const Quat& q2) + IMATH_NOEXCEPT +{ + Quat q1inv = q1.inverse (); + Quat c1 = q1inv * q2; + Quat c2 = q1inv * q0; + Quat c3 = (T) (-0.25) * (c2.log () + c1.log ()); + Quat qa = q1 * c3.exp (); + qa.normalize (); + return qa; +} + +template +IMATH_HOSTDEVICE inline Quat +Quat::log () const IMATH_NOEXCEPT +{ + // + // For unit quaternion, from Advanced Animation and + // Rendering Techniques by Watt and Watt, Page 366: + // + + T theta = std::acos (std::min (r, (T) 1.0)); + + if (theta == 0) return Quat (0, v); + + T sintheta = std::sin (theta); + + T k; + if (std::abs (sintheta) < 1 && + std::abs (theta) >= + std::numeric_limits::max () * std::abs (sintheta)) + k = 1; + else + k = theta / sintheta; + + return Quat ((T) 0, v.x * k, v.y * k, v.z * k); +} + +template +IMATH_HOSTDEVICE inline Quat +Quat::exp () const IMATH_NOEXCEPT +{ + // + // For pure quaternion (zero scalar part): + // from Advanced Animation and Rendering + // Techniques by Watt and Watt, Page 366: + // + + T theta = v.length (); + T sintheta = std::sin (theta); + + T k; + if (abs (theta) < 1 && + abs (sintheta) >= std::numeric_limits::max () * abs (theta)) + k = 1; + else + k = sintheta / theta; + + T costheta = std::cos (theta); + + return Quat (costheta, v.x * k, v.y * k, v.z * k); +} + +template +IMATH_HOSTDEVICE constexpr inline T +Quat::angle () const IMATH_NOEXCEPT +{ + return 2 * std::atan2 (v.length (), r); +} + +template +IMATH_HOSTDEVICE constexpr inline Vec3 +Quat::axis () const IMATH_NOEXCEPT +{ + return v.normalized (); +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline Quat& +Quat::setAxisAngle (const Vec3& axis, T radians) IMATH_NOEXCEPT +{ + r = std::cos (radians / 2); + v = axis.normalized () * std::sin (radians / 2); + return *this; +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline Quat& +Quat::setRotation (const Vec3& from, const Vec3& to) IMATH_NOEXCEPT +{ + // + // Create a quaternion that rotates vector from into vector to, + // such that the rotation is around an axis that is the cross + // product of from and to. + // + // This function calls function setRotationInternal(), which is + // numerically accurate only for rotation angles that are not much + // greater than pi/2. In order to achieve good accuracy for angles + // greater than pi/2, we split large angles in half, and rotate in + // two steps. + // + + // + // Normalize from and to, yielding f0 and t0. + // + + Vec3 f0 = from.normalized (); + Vec3 t0 = to.normalized (); + + if ((f0 ^ t0) >= 0) + { + // + // The rotation angle is less than or equal to pi/2. + // + + setRotationInternal (f0, t0, *this); + } + else + { + // + // The angle is greater than pi/2. After computing h0, + // which is halfway between f0 and t0, we rotate first + // from f0 to h0, then from h0 to t0. + // + + Vec3 h0 = (f0 + t0).normalized (); + + if ((h0 ^ h0) != 0) + { + setRotationInternal (f0, h0, *this); + + Quat q; + setRotationInternal (h0, t0, q); + + *this *= q; + } + else + { + // + // f0 and t0 point in exactly opposite directions. + // Pick an arbitrary axis that is orthogonal to f0, + // and rotate by pi. + // + + r = T (0); + + Vec3 f02 = f0 * f0; + + if (f02.x <= f02.y && f02.x <= f02.z) + v = (f0 % Vec3 (1, 0, 0)).normalized (); + else if (f02.y <= f02.z) + v = (f0 % Vec3 (0, 1, 0)).normalized (); + else + v = (f0 % Vec3 (0, 0, 1)).normalized (); + } + } + + return *this; +} + +template +IMATH_HOSTDEVICE inline void +Quat::setRotationInternal (const Vec3& f0, const Vec3& t0, Quat& q) + IMATH_NOEXCEPT +{ + // + // The following is equivalent to setAxisAngle(n,2*phi), + // where the rotation axis, n, is orthogonal to the f0 and + // t0 vectors, and 2*phi is the angle between f0 and t0. + // + // This function is called by setRotation(), above; it assumes + // that f0 and t0 are normalized and that the angle between + // them is not much greater than pi/2. This function becomes + // numerically inaccurate if f0 and t0 point into nearly + // opposite directions. + // + + // + // Find a normalized vector, h0, that is halfway between f0 and t0. + // The angle between f0 and h0 is phi. + // + + Vec3 h0 = (f0 + t0).normalized (); + + // + // Store the rotation axis and rotation angle. + // + + q.r = f0 ^ h0; // f0 ^ h0 == cos (phi) + q.v = f0 % h0; // (f0 % h0).length() == sin (phi) +} + +template +IMATH_HOSTDEVICE constexpr inline Matrix33 +Quat::toMatrix33 () const IMATH_NOEXCEPT +{ + return Matrix33 ( + 1 - 2 * (v.y * v.y + v.z * v.z), + 2 * (v.x * v.y + v.z * r), + 2 * (v.z * v.x - v.y * r), + + 2 * (v.x * v.y - v.z * r), + 1 - 2 * (v.z * v.z + v.x * v.x), + 2 * (v.y * v.z + v.x * r), + + 2 * (v.z * v.x + v.y * r), + 2 * (v.y * v.z - v.x * r), + 1 - 2 * (v.y * v.y + v.x * v.x)); +} + +template +IMATH_HOSTDEVICE constexpr inline Matrix44 +Quat::toMatrix44 () const IMATH_NOEXCEPT +{ + return Matrix44 ( + 1 - 2 * (v.y * v.y + v.z * v.z), + 2 * (v.x * v.y + v.z * r), + 2 * (v.z * v.x - v.y * r), + 0, + 2 * (v.x * v.y - v.z * r), + 1 - 2 * (v.z * v.z + v.x * v.x), + 2 * (v.y * v.z + v.x * r), + 0, + 2 * (v.z * v.x + v.y * r), + 2 * (v.y * v.z - v.x * r), + 1 - 2 * (v.y * v.y + v.x * v.x), + 0, + 0, + 0, + 0, + 1); +} + +/// Transform the quaternion by the matrix +/// @return M * q +template +IMATH_HOSTDEVICE constexpr inline Matrix33 +operator* (const Matrix33& M, const Quat& q) IMATH_NOEXCEPT +{ + return M * q.toMatrix33 (); +} + +/// Transform the matrix by the quaterion: +/// @return q * M +template +IMATH_HOSTDEVICE constexpr inline Matrix33 +operator* (const Quat& q, const Matrix33& M) IMATH_NOEXCEPT +{ + return q.toMatrix33 () * M; +} + +/// Stream output as "(r x y z)" +template +std::ostream& +operator<< (std::ostream& o, const Quat& q) +{ + return o << "(" << q.r << " " << q.v.x << " " << q.v.y << " " << q.v.z + << ")"; +} + +/// Quaterion multiplication +template +IMATH_HOSTDEVICE constexpr inline Quat +operator* (const Quat& q1, const Quat& q2) IMATH_NOEXCEPT +{ + return Quat ( + q1.r * q2.r - (q1.v ^ q2.v), q1.r * q2.v + q1.v * q2.r + q1.v % q2.v); +} + +/// Quaterion division +template +IMATH_HOSTDEVICE constexpr inline Quat +operator/ (const Quat& q1, const Quat& q2) IMATH_NOEXCEPT +{ + return q1 * q2.inverse (); +} + +/// Quaterion division +template +IMATH_HOSTDEVICE constexpr inline Quat +operator/ (const Quat& q, T t) IMATH_NOEXCEPT +{ + return Quat (q.r / t, q.v / t); +} + +/// Quaterion*scalar multiplication +/// @return q * t +template +IMATH_HOSTDEVICE constexpr inline Quat +operator* (const Quat& q, T t) IMATH_NOEXCEPT +{ + return Quat (q.r * t, q.v * t); +} + +/// Quaterion*scalar multiplication +/// @return q * t +template +IMATH_HOSTDEVICE constexpr inline Quat +operator* (T t, const Quat& q) IMATH_NOEXCEPT +{ + return Quat (q.r * t, q.v * t); +} + +/// Quaterion addition +template +IMATH_HOSTDEVICE constexpr inline Quat +operator+ (const Quat& q1, const Quat& q2) IMATH_NOEXCEPT +{ + return Quat (q1.r + q2.r, q1.v + q2.v); +} + +/// Quaterion subtraction +template +IMATH_HOSTDEVICE constexpr inline Quat +operator- (const Quat& q1, const Quat& q2) IMATH_NOEXCEPT +{ + return Quat (q1.r - q2.r, q1.v - q2.v); +} + +/// Compute the conjugate +template +IMATH_HOSTDEVICE constexpr inline Quat +operator~ (const Quat& q) IMATH_NOEXCEPT +{ + return Quat (q.r, -q.v); +} + +/// Negate the quaterion +template +IMATH_HOSTDEVICE constexpr inline Quat +operator- (const Quat& q) IMATH_NOEXCEPT +{ + return Quat (-q.r, -q.v); +} + +/// Quaterion*vector multiplcation +/// @return v * q +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline Vec3 + operator* (const Vec3& v, const Quat& q) IMATH_NOEXCEPT +{ + Vec3 a = q.v % v; + Vec3 b = q.v % a; + return v + T (2) * (q.r * a + b); +} + +#if (defined _WIN32 || defined _WIN64) && defined _MSC_VER +# pragma warning(pop) +#endif + +IMATH_INTERNAL_NAMESPACE_HEADER_EXIT + +#endif // INCLUDED_IMATHQUAT_H diff --git a/third_party/tlRender-install-Release/include/Imath/ImathRandom.h b/third_party/tlRender-install-Release/include/Imath/ImathRandom.h new file mode 100644 index 00000000..ff164d52 --- /dev/null +++ b/third_party/tlRender-install-Release/include/Imath/ImathRandom.h @@ -0,0 +1,262 @@ +// +// SPDX-License-Identifier: BSD-3-Clause +// Copyright Contributors to the OpenEXR Project. +// + +// +// Generators for uniformly distributed pseudo-random numbers and +// functions that use those generators to generate numbers with +// non-uniform distributions +// +// Note: class Rand48() calls erand48() and nrand48(), which are not +// available on all operating systems. For compatibility we include +// our own versions of erand48() and nrand48(). Our functions +// have been reverse-engineered from the corresponding Unix/Linux +// man page. +// + +#ifndef INCLUDED_IMATHRANDOM_H +#define INCLUDED_IMATHRANDOM_H + +#include "ImathExport.h" +#include "ImathNamespace.h" + +#include +#include + +IMATH_INTERNAL_NAMESPACE_HEADER_ENTER + +/// Fast random-number generator that generates +/// a uniformly distributed sequence with a period +/// length of 2^32. +class Rand32 +{ +public: + /// Constructor, given a seed + IMATH_HOSTDEVICE Rand32 (unsigned long int seed = 0); + + /// Re-initialize with a given seed + IMATH_HOSTDEVICE void init (unsigned long int seed); + + /// Get the next value in the sequence (range: [false, true]) + IMATH_HOSTDEVICE bool nextb (); + + /// Get the next value in the sequence (range: [0 ... 0xffffffff]) + IMATH_HOSTDEVICE unsigned long int nexti (); + + /// Get the next value in the sequence (range: [0 ... 1[) + IMATH_HOSTDEVICE IMATH_EXPORT float nextf (); + + /// Get the next value in the sequence (range [rangeMin ... rangeMax[) + IMATH_HOSTDEVICE float nextf (float rangeMin, float rangeMax); + +private: + IMATH_HOSTDEVICE void next (); + + unsigned long int _state; +}; + +/// Random-number generator based on the C Standard Library +/// functions erand48(), nrand48() & company; generates a +/// uniformly distributed sequence. +class Rand48 +{ +public: + /// Constructor + IMATH_HOSTDEVICE Rand48 (unsigned long int seed = 0); + + /// Re-initialize with a given seed + IMATH_HOSTDEVICE void init (unsigned long int seed); + + /// Get the next value in the sequence (range: [false, true]) + IMATH_HOSTDEVICE bool nextb (); + + /// Get the next value in the sequence (range: [0 ... 0x7fffffff]) + IMATH_HOSTDEVICE long int nexti (); + + /// Get the next value in the sequence (range: [0 ... 1[) + IMATH_HOSTDEVICE double nextf (); + + /// Get the next value in the sequence (range [rangeMin ... rangeMax[) + IMATH_HOSTDEVICE double nextf (double rangeMin, double rangeMax); + +private: + unsigned short int _state[3]; +}; + +/// Return random points uniformly distributed in a sphere with +/// radius 1 around the origin (distance from origin <= 1). +template +IMATH_HOSTDEVICE Vec solidSphereRand (Rand& rand); + +/// Return random points uniformly distributed on the surface of +/// a sphere with radius 1 around the origin. +template +IMATH_HOSTDEVICE Vec hollowSphereRand (Rand& rand); + +/// Return random numbers with a normal (Gaussian) +/// distribution with zero mean and unit variance. +template IMATH_HOSTDEVICE float gaussRand (Rand& rand); + +/// Return random points whose distance from the origin +/// has a normal (Gaussian) distribution with zero mean +/// and unit variance. +template +IMATH_HOSTDEVICE Vec gaussSphereRand (Rand& rand); + +//--------------------------------- +// erand48(), nrand48() and friends +//--------------------------------- + +/// @cond Doxygen_Suppress +IMATH_HOSTDEVICE IMATH_EXPORT double erand48 (unsigned short state[3]); +IMATH_HOSTDEVICE IMATH_EXPORT double drand48 (); +IMATH_HOSTDEVICE IMATH_EXPORT long int nrand48 (unsigned short state[3]); +IMATH_HOSTDEVICE IMATH_EXPORT long int lrand48 (); +IMATH_HOSTDEVICE IMATH_EXPORT void srand48 (long int seed); +/// @endcond + +//--------------- +// Implementation +//--------------- + +IMATH_HOSTDEVICE inline void +Rand32::init (unsigned long int seed) +{ + _state = (seed * 0xa5a573a5L) ^ 0x5a5a5a5aL; +} + +IMATH_HOSTDEVICE inline Rand32::Rand32 (unsigned long int seed) +{ + init (seed); +} + +IMATH_HOSTDEVICE inline void +Rand32::next () +{ + _state = 1664525L * _state + 1013904223L; +} + +IMATH_HOSTDEVICE inline bool +Rand32::nextb () +{ + next (); + // Return the 31st (most significant) bit, by and-ing with 2 ^ 31. + return !!(_state & 2147483648UL); +} + +IMATH_HOSTDEVICE inline unsigned long int +Rand32::nexti () +{ + next (); + return _state & 0xffffffff; +} + +IMATH_HOSTDEVICE inline float +Rand32::nextf (float rangeMin, float rangeMax) +{ + float f = nextf (); + return rangeMin * (1 - f) + rangeMax * f; +} + +IMATH_HOSTDEVICE inline void +Rand48::init (unsigned long int seed) +{ + seed = (seed * 0xa5a573a5L) ^ 0x5a5a5a5aL; + + _state[0] = (unsigned short int) (seed & 0xFFFF); + _state[1] = (unsigned short int) ((seed >> 16) & 0xFFFF); + _state[2] = (unsigned short int) (seed & 0xFFFF); +} + +IMATH_HOSTDEVICE inline Rand48::Rand48 (unsigned long int seed) +{ + init (seed); +} + +IMATH_HOSTDEVICE inline bool +Rand48::nextb () +{ + return nrand48 (_state) & 1; +} + +IMATH_HOSTDEVICE inline long int +Rand48::nexti () +{ + return nrand48 (_state); +} + +IMATH_HOSTDEVICE inline double +Rand48::nextf () +{ + return erand48 (_state); +} + +IMATH_HOSTDEVICE inline double +Rand48::nextf (double rangeMin, double rangeMax) +{ + double f = nextf (); + return rangeMin * (1 - f) + rangeMax * f; +} + +template +IMATH_HOSTDEVICE Vec +solidSphereRand (Rand& rand) +{ + Vec v; + + do + { + for (unsigned int i = 0; i < Vec::dimensions (); i++) + v[i] = (typename Vec::BaseType) rand.nextf (-1, 1); + } while (v.length2 () > 1); + + return v; +} + +template +IMATH_HOSTDEVICE Vec +hollowSphereRand (Rand& rand) +{ + Vec v; + typename Vec::BaseType length; + + do + { + for (unsigned int i = 0; i < Vec::dimensions (); i++) + v[i] = (typename Vec::BaseType) rand.nextf (-1, 1); + + length = v.length (); + } while (length > 1 || length == 0); + + return v / length; +} + +template +IMATH_HOSTDEVICE float +gaussRand (Rand& rand) +{ + float x; // Note: to avoid numerical problems with very small + float y; // numbers, we make these variables singe-precision + float length2; // floats, but later we call the double-precision log() + // and sqrt() functions instead of logf() and sqrtf(). + do + { + x = float (rand.nextf (-1, 1)); + y = float (rand.nextf (-1, 1)); + length2 = x * x + y * y; + } while (length2 >= 1 || length2 == 0); + + return x * sqrt (-2 * log (double (length2)) / length2); +} + +template +IMATH_HOSTDEVICE Vec +gaussSphereRand (Rand& rand) +{ + return hollowSphereRand (rand) * gaussRand (rand); +} + +IMATH_INTERNAL_NAMESPACE_HEADER_EXIT + +#endif // INCLUDED_IMATHRANDOM_H diff --git a/third_party/tlRender-install-Release/include/Imath/ImathRoots.h b/third_party/tlRender-install-Release/include/Imath/ImathRoots.h new file mode 100644 index 00000000..ceda2d07 --- /dev/null +++ b/third_party/tlRender-install-Release/include/Imath/ImathRoots.h @@ -0,0 +1,214 @@ +// +// SPDX-License-Identifier: BSD-3-Clause +// Copyright Contributors to the OpenEXR Project. +// + +// +// Functions to solve linear, quadratic or cubic equations +// +// Note: It is possible that an equation has real solutions, but that +// the solutions (or some intermediate result) are not representable. +// In this case, either some of the solutions returned are invalid +// (nan or infinity), or, if floating-point exceptions have been +// enabled, an exception is thrown. +// + +#ifndef INCLUDED_IMATHROOTS_H +#define INCLUDED_IMATHROOTS_H + +#include "ImathMath.h" +#include "ImathNamespace.h" +#include + +/// @cond Doxygen_Suppress + +// If CUDA or HIP (AMD's Heterogeneous-computing Interface for +// Portability), use the thrust complex library +#if defined(__CUDACC__) || defined(__HIP__) +# include +# define COMPLEX_NAMESPACE thrust +#else +# define COMPLEX_NAMESPACE std +#endif + +/// @endcond + +IMATH_INTERNAL_NAMESPACE_HEADER_ENTER + +/// +/// Solve for x in the linear equation: +/// +/// a * x + b == 0 +/// +/// @return 1 if the equation has a solution, 0 if there is no +/// solution, and -1 if all real numbers are solutions. +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 int solveLinear (T a, T b, T& x); + +/// +/// Solve for x in the quadratic equation: +/// +/// a * x*x + b * x + c == 0 +/// +/// @return 2 if the equation has two solutions, 1 if the equation has +/// a single solution, 0 if there is no solution, and -1 if all real +/// numbers are solutions. +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 int solveQuadratic (T a, T b, T c, T x[2]); +template + +/// +/// Solve for x in the normalized cubic equation: +/// +/// x*x*x + r * x*x + s * x + t == 0 +/// +/// The equation is solved using Cardano's Formula; even though only +/// real solutions are produced, some intermediate results are complex +/// (std::complex). +/// +/// @return 0 if there is no solution, and -1 if all real +/// numbers are solutions, otherwise return the number of solutions. +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 int +solveNormalizedCubic (T r, T s, T t, T x[3]); + +/// +/// Solve for x in the cubic equation: +/// +/// a * x*x*x + b * x*x + c * x + d == 0 +/// +/// The equation is solved using Cardano's Formula; even though only +/// real solutions are produced, some intermediate results are complex +/// (std::complex). +/// +/// @return 0 if there is no solution, and -1 if all real +/// numbers are solutions, otherwise return the number of solutions. +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 int solveCubic (T a, T b, T c, T d, T x[3]); + +//--------------- +// Implementation +//--------------- + +template +IMATH_CONSTEXPR14 int +solveLinear (T a, T b, T& x) +{ + if (a != 0) + { + x = -b / a; + return 1; + } + else if (b != 0) + { + return 0; + } + else + { + return -1; + } +} + +template +IMATH_CONSTEXPR14 int +solveQuadratic (T a, T b, T c, T x[2]) +{ + if (a == 0) { return solveLinear (b, c, x[0]); } + else + { + T D = b * b - 4 * a * c; + + if (D > 0) + { + T s = std::sqrt (D); + T q = -(b + (b > 0 ? 1 : -1) * s) / T (2); + + x[0] = q / a; + x[1] = c / q; + return 2; + } + if (D == 0) + { + x[0] = -b / (2 * a); + return 1; + } + else + { + return 0; + } + } +} + +template +IMATH_CONSTEXPR14 int +solveNormalizedCubic (T r, T s, T t, T x[3]) +{ + T p = (3 * s - r * r) / 3; + T q = 2 * r * r * r / 27 - r * s / 3 + t; + T p3 = p / 3; + T q2 = q / 2; + T D = p3 * p3 * p3 + q2 * q2; + + if (D == 0 && p3 == 0) + { + x[0] = -r / 3; + x[1] = -r / 3; + x[2] = -r / 3; + return 1; + } + + if (D > 0) + { + auto real_root = [] (T a, T x) -> T { + T sign = std::copysign (T (1), a); + return sign * std::pow (sign * a, T (1) / x); + }; + + T u = real_root (-q / 2 + std::sqrt (D), 3); + T v = -p / (T (3) * u); + + x[0] = u + v - r / 3; + return 1; + } + + namespace CN = COMPLEX_NAMESPACE; + CN::complex u = + CN::pow (-q / 2 + CN::sqrt (CN::complex (D)), T (1) / T (3)); + CN::complex v = -p / (T (3) * u); + + const T sqrt3 = T (1.73205080756887729352744634150587); // enough digits + // for long double + CN::complex y0 (u + v); + CN::complex y1 ( + -(u + v) / T (2) + (u - v) / T (2) * CN::complex (0, sqrt3)); + CN::complex y2 ( + -(u + v) / T (2) - (u - v) / T (2) * CN::complex (0, sqrt3)); + + if (D == 0) + { + x[0] = y0.real () - r / 3; + x[1] = y1.real () - r / 3; + return 2; + } + else + { + x[0] = y0.real () - r / 3; + x[1] = y1.real () - r / 3; + x[2] = y2.real () - r / 3; + return 3; + } +} + +template +IMATH_CONSTEXPR14 int +solveCubic (T a, T b, T c, T d, T x[3]) +{ + if (a == 0) { return solveQuadratic (b, c, d, x); } + else + { + return solveNormalizedCubic (b / a, c / a, d / a, x); + } +} + +IMATH_INTERNAL_NAMESPACE_HEADER_EXIT + +#endif // INCLUDED_IMATHROOTS_H diff --git a/third_party/tlRender-install-Release/include/Imath/ImathShear.h b/third_party/tlRender-install-Release/include/Imath/ImathShear.h new file mode 100644 index 00000000..b99f6cff --- /dev/null +++ b/third_party/tlRender-install-Release/include/Imath/ImathShear.h @@ -0,0 +1,735 @@ +// +// SPDX-License-Identifier: BSD-3-Clause +// Copyright Contributors to the OpenEXR Project. +// + +// +// A representation of a shear transformation +// + +#ifndef INCLUDED_IMATHSHEAR_H +#define INCLUDED_IMATHSHEAR_H + +#include "ImathExport.h" +#include "ImathNamespace.h" + +#include "ImathMath.h" +#include "ImathVec.h" +#include + +IMATH_INTERNAL_NAMESPACE_HEADER_ENTER + +/// +/// Shear6 class template. +/// +/// A shear matrix is technically defined as having a single nonzero +/// off-diagonal element; more generally, a shear transformation is +/// defined by those off-diagonal elements, so in 3D, that means there +/// are 6 possible elements/coefficients: +/// +/// | X' | | 1 YX ZX 0 | | X | +/// | Y' | | XY 1 ZY 0 | | Y | +/// | Z' | = | XZ YZ 1 0 | = | Z | +/// | 1 | | 0 0 0 1 | | 1 | +/// +/// X' = X + YX * Y + ZX * Z +/// Y' = YX * X + Y + ZY * Z +/// Z` = XZ * X + YZ * Y + Z +/// +/// See +/// https://www.cs.drexel.edu/~david/Classes/CS430/Lectures/L-04_3DTransformations.6.pdf +/// +/// Those variable elements correspond to the 6 values in a Shear6. +/// So, looking at those equations, "Shear YX", for example, means +/// that for any point transformed by that matrix, its X values will +/// have some of their Y values added. If you're talking +/// about "Axis A has values from Axis B added to it", there are 6 +/// permutations for A and B (XY, XZ, YX, YZ, ZX, ZY). +/// +/// Not that Maya has only three values, which represent the +/// lower/upper (depending on column/row major) triangle of the +/// matrix. Houdini is the same as Maya (see +/// https://www.sidefx.com/docs/houdini/props/obj.html) in this +/// respect. +/// +/// There's another way to look at it. A general affine transformation +/// in 3D has 12 degrees of freedom - 12 "available" elements in the +/// 4x4 matrix since a single row/column must be (0,0,0,1). If you +/// add up the degrees of freedom from Maya: +/// +/// - 3 translation +/// - 3 rotation +/// - 3 scale +/// - 3 shear +/// +/// You obviously get the full 12. So technically, the Shear6 option +/// of having all 6 shear options is overkill; Imath/Shear6 has 15 +/// values for a 12-degree-of-freedom transformation. This means that +/// any nonzero values in those last 3 shear coefficients can be +/// represented in those standard 12 degrees of freedom. Here's a +/// python example of how to do that: +/// +/// +/// >>> import imath +/// >>> M = imath.M44f() +/// >>> s = imath.V3f() +/// >>> h = imath.V3f() +/// >>> r = imath.V3f() +/// >>> t = imath.V3f() +/// # Use Shear.YX (index 3), which is an "extra" shear value +/// >>> M.setShear((0,0,0,1,0,0)) +/// M44f((1, 1, 0, 0), (0, 1, 0, 0), (0, 0, 1, 0), (0, 0, 0, 1)) +/// >>> M.extractSHRT(s, h, r, t) +/// 1 +/// >>> s +/// V3f(1.41421354, 0.707106769, 1) +/// >>> h +/// V3f(1, 0, 0) +/// >>> r +/// V3f(0, -0, 0.785398185) +/// >>> t +/// V3f(0, 0, 0) +/// +/// That shows how to decompose a transform matrix with one of those +/// "extra" shear coefficients into those standard 12 degrees of +/// freedom. But it's not necessarily intuitive; in this case, a +/// single non-zero shear coefficient resulted in a transform that has +/// non-uniform scale, a single "standard" shear value, and some +/// rotation. +/// +/// So, it would seem that any transform with those extra shear +/// values set could be translated into Maya to produce the exact same +/// transformation matrix; but doing this is probably pretty +/// undesirable, since the result would have some surprising values on +/// the other transformation attributes, despite being technically +/// correct. +/// +/// This usage of "degrees of freedom" is a bit hand-wavey here; +/// having a total of 12 inputs into the construction of a standard +/// transformation matrix doesn't necessarily mean that the matrix has +/// 12 true degrees of freedom, but the standard +/// translation/rotation/scale/shear matrices have the right +/// construction to ensure that. +/// + +template class IMATH_EXPORT_TEMPLATE_TYPE Shear6 +{ +public: + /// @{ + /// @name Direct access to members + + T xy, xz, yz, yx, zx, zy; + + /// @} + + /// Element access + /// + /// NB: This method of access uses dynamic array accesses which + /// can prevent compiler optimizations and force temporaries to be + /// stored to the stack and other missed vectorization + /// opportunities. Use of direct access to xy, xz, etc when + /// possible should be preferred. + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 T& operator[] (int i); + + /// Element access + /// + /// NB: This method of access uses dynamic array accesses which + /// can prevent compiler optimizations and force temporaries to be + /// stored to the stack and other missed vectorization + /// opportunities. Use of direct access to xy, xz, etc when + /// possible should be preferred. + IMATH_HOSTDEVICE constexpr const T& operator[] (int i) const; + + /// @{ + /// @name Constructors and Assignment + + /// Initialize to 0 + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 Shear6 (); + + /// Initialize to the given XY, XZ, YZ values + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 Shear6 (T XY, T XZ, T YZ); + + /// Initialize to the given XY, XZ, YZ values held in (v.x, v.y, v.z) + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 Shear6 (const Vec3& v); + + /// Initialize to the given XY, XZ, YZ values held in (v.x, v.y, v.z) + template + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 Shear6 (const Vec3& v); + + /// Initialize to the given (XY XZ YZ YX ZX ZY) values + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 + Shear6 (T XY, T XZ, T YZ, T YX, T ZX, T ZY); + + /// Copy constructor + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 Shear6 (const Shear6& h); + + /// Construct from a Shear6 object of another base type + template + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 Shear6 (const Shear6& h); + + /// Assignment + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 const Shear6& + operator= (const Shear6& h); + + /// Assignment from vector + template + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 const Shear6& + operator= (const Vec3& v); + + /// Destructor + ~Shear6() = default; + + /// @} + + /// @{ + /// @name Compatibility with Sb + + /// Set the value + template + IMATH_HOSTDEVICE void setValue (S XY, S XZ, S YZ, S YX, S ZX, S ZY); + + /// Set the value + template IMATH_HOSTDEVICE void setValue (const Shear6& h); + + /// Return the values + template + IMATH_HOSTDEVICE void + getValue (S& XY, S& XZ, S& YZ, S& YX, S& ZX, S& ZY) const; + + /// Return the value in `h` + template IMATH_HOSTDEVICE void getValue (Shear6& h) const; + + /// Return a raw pointer to the array of values + IMATH_HOSTDEVICE T* getValue (); + + /// Return a raw pointer to the array of values + IMATH_HOSTDEVICE const T* getValue () const; + + /// @} + + /// @{ + /// @name Arithmetic and Comparison + + /// Equality + template + IMATH_HOSTDEVICE constexpr bool operator== (const Shear6& h) const; + + /// Inequality + template + IMATH_HOSTDEVICE constexpr bool operator!= (const Shear6& h) const; + + /// Compare two shears and test if they are "approximately equal": + /// @return True if the coefficients of this and h are the same with + /// an absolute error of no more than e, i.e., for all i + /// abs (this[i] - h[i]) <= e + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 bool + equalWithAbsError (const Shear6& h, T e) const; + + /// Compare two shears and test if they are "approximately equal": + /// @return True if the coefficients of this and h are the same with + /// a relative error of no more than e, i.e., for all i + /// abs (this[i] - h[i]) <= e * abs (this[i]) + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 bool + equalWithRelError (const Shear6& h, T e) const; + + /// Component-wise addition + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 const Shear6& + operator+= (const Shear6& h); + + /// Component-wise addition + IMATH_HOSTDEVICE constexpr Shear6 operator+ (const Shear6& h) const; + + /// Component-wise subtraction + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 const Shear6& + operator-= (const Shear6& h); + + /// Component-wise subtraction + IMATH_HOSTDEVICE constexpr Shear6 operator- (const Shear6& h) const; + + /// Component-wise multiplication by -1 + IMATH_HOSTDEVICE constexpr Shear6 operator- () const; + + /// Component-wise multiplication by -1 + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 const Shear6& negate (); + + /// Component-wise multiplication + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 const Shear6& + operator*= (const Shear6& h); + /// Scalar multiplication + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 const Shear6& operator*= (T a); + + /// Component-wise multiplication + IMATH_HOSTDEVICE constexpr Shear6 operator* (const Shear6& h) const; + + /// Scalar multiplication + IMATH_HOSTDEVICE constexpr Shear6 operator* (T a) const; + + /// Component-wise division + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 const Shear6& + operator/= (const Shear6& h); + + /// Scalar division + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 const Shear6& operator/= (T a); + + /// Component-wise division + IMATH_HOSTDEVICE constexpr Shear6 operator/ (const Shear6& h) const; + + /// Scalar division + IMATH_HOSTDEVICE constexpr Shear6 operator/ (T a) const; + + /// @} + + /// @{ + /// @name Numerical Limits + + /// Largest possible negative value + IMATH_HOSTDEVICE constexpr static T baseTypeLowest () IMATH_NOEXCEPT + { + return std::numeric_limits::lowest (); + } + + /// Largest possible positive value + IMATH_HOSTDEVICE constexpr static T baseTypeMax () IMATH_NOEXCEPT + { + return std::numeric_limits::max (); + } + + /// Smallest possible positive value + IMATH_HOSTDEVICE constexpr static T baseTypeSmallest () IMATH_NOEXCEPT + { + return std::numeric_limits::min (); + } + + /// Smallest possible e for which 1+e != 1 + IMATH_HOSTDEVICE constexpr static T baseTypeEpsilon () IMATH_NOEXCEPT + { + return std::numeric_limits::epsilon (); + } + + /// @} + + /// Return the number of dimensions, i.e. 6 + IMATH_HOSTDEVICE constexpr static unsigned int dimensions () { return 6; } + + /// The base type: In templates that accept a parameter `V` (could + /// be a Color4), you can refer to `T` as `V::BaseType` + typedef T BaseType; +}; + +/// Stream output, as "(xy xz yz yx zx zy)" +template +std::ostream& operator<< (std::ostream& s, const Shear6& h); + +/// Reverse multiplication: scalar * Shear6 +template +IMATH_HOSTDEVICE constexpr Shear6 operator* (S a, const Shear6& h); + +/// 3D shear of type float +typedef Vec3 Shear3f; + +/// 3D shear of type double +typedef Vec3 Shear3d; + +/// Shear6 of type float +typedef Shear6 Shear6f; + +/// Shear6 of type double +typedef Shear6 Shear6d; + +//----------------------- +// Implementation of Shear6 +//----------------------- + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline T& +Shear6::operator[] (int i) +{ + return reinterpret_cast (this)[i]; +} + +template +IMATH_HOSTDEVICE constexpr inline const T& +Shear6::operator[] (int i) const +{ + return reinterpret_cast (this)[i]; +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline Shear6::Shear6 () +{ + xy = xz = yz = yx = zx = zy = 0; +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline Shear6::Shear6 (T XY, T XZ, T YZ) +{ + xy = XY; + xz = XZ; + yz = YZ; + yx = 0; + zx = 0; + zy = 0; +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline Shear6::Shear6 (const Vec3& v) +{ + xy = v.x; + xz = v.y; + yz = v.z; + yx = 0; + zx = 0; + zy = 0; +} + +template +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline Shear6::Shear6 (const Vec3& v) +{ + xy = T (v.x); + xz = T (v.y); + yz = T (v.z); + yx = 0; + zx = 0; + zy = 0; +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline Shear6::Shear6 ( + T XY, T XZ, T YZ, T YX, T ZX, T ZY) +{ + xy = XY; + xz = XZ; + yz = YZ; + yx = YX; + zx = ZX; + zy = ZY; +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline Shear6::Shear6 (const Shear6& h) +{ + xy = h.xy; + xz = h.xz; + yz = h.yz; + yx = h.yx; + zx = h.zx; + zy = h.zy; +} + +template +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline Shear6::Shear6 (const Shear6& h) +{ + xy = T (h.xy); + xz = T (h.xz); + yz = T (h.yz); + yx = T (h.yx); + zx = T (h.zx); + zy = T (h.zy); +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline const Shear6& +Shear6::operator= (const Shear6& h) +{ + xy = h.xy; + xz = h.xz; + yz = h.yz; + yx = h.yx; + zx = h.zx; + zy = h.zy; + return *this; +} + +template +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline const Shear6& +Shear6::operator= (const Vec3& v) +{ + xy = T (v.x); + xz = T (v.y); + yz = T (v.z); + yx = 0; + zx = 0; + zy = 0; + return *this; +} + +template +template +IMATH_HOSTDEVICE inline void +Shear6::setValue (S XY, S XZ, S YZ, S YX, S ZX, S ZY) +{ + xy = T (XY); + xz = T (XZ); + yz = T (YZ); + yx = T (YX); + zx = T (ZX); + zy = T (ZY); +} + +template +template +IMATH_HOSTDEVICE inline void +Shear6::setValue (const Shear6& h) +{ + xy = T (h.xy); + xz = T (h.xz); + yz = T (h.yz); + yx = T (h.yx); + zx = T (h.zx); + zy = T (h.zy); +} + +template +template +IMATH_HOSTDEVICE inline void +Shear6::getValue (S& XY, S& XZ, S& YZ, S& YX, S& ZX, S& ZY) const +{ + XY = S (xy); + XZ = S (xz); + YZ = S (yz); + YX = S (yx); + ZX = S (zx); + ZY = S (zy); +} + +template +template +IMATH_HOSTDEVICE inline void +Shear6::getValue (Shear6& h) const +{ + h.xy = S (xy); + h.xz = S (xz); + h.yz = S (yz); + h.yx = S (yx); + h.zx = S (zx); + h.zy = S (zy); +} + +template +IMATH_HOSTDEVICE inline T* +Shear6::getValue () +{ + return (T*) &xy; +} + +template +IMATH_HOSTDEVICE inline const T* +Shear6::getValue () const +{ + return (const T*) &xy; +} + +template +template +IMATH_HOSTDEVICE constexpr inline bool +Shear6::operator== (const Shear6& h) const +{ + return xy == h.xy && xz == h.xz && yz == h.yz && yx == h.yx && zx == h.zx && + zy == h.zy; +} + +template +template +IMATH_HOSTDEVICE constexpr inline bool +Shear6::operator!= (const Shear6& h) const +{ + return xy != h.xy || xz != h.xz || yz != h.yz || yx != h.yx || zx != h.zx || + zy != h.zy; +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline bool +Shear6::equalWithAbsError (const Shear6& h, T e) const +{ + for (int i = 0; i < 6; i++) + if (!IMATH_INTERNAL_NAMESPACE::equalWithAbsError ((*this)[i], h[i], e)) + return false; + + return true; +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline bool +Shear6::equalWithRelError (const Shear6& h, T e) const +{ + for (int i = 0; i < 6; i++) + if (!IMATH_INTERNAL_NAMESPACE::equalWithRelError ((*this)[i], h[i], e)) + return false; + + return true; +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline const Shear6& +Shear6::operator+= (const Shear6& h) +{ + xy += h.xy; + xz += h.xz; + yz += h.yz; + yx += h.yx; + zx += h.zx; + zy += h.zy; + return *this; +} + +template +IMATH_HOSTDEVICE constexpr inline Shear6 +Shear6::operator+ (const Shear6& h) const +{ + return Shear6 ( + xy + h.xy, xz + h.xz, yz + h.yz, yx + h.yx, zx + h.zx, zy + h.zy); +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline const Shear6& +Shear6::operator-= (const Shear6& h) +{ + xy -= h.xy; + xz -= h.xz; + yz -= h.yz; + yx -= h.yx; + zx -= h.zx; + zy -= h.zy; + return *this; +} + +template +IMATH_HOSTDEVICE constexpr inline Shear6 +Shear6::operator- (const Shear6& h) const +{ + return Shear6 ( + xy - h.xy, xz - h.xz, yz - h.yz, yx - h.yx, zx - h.zx, zy - h.zy); +} + +template +IMATH_HOSTDEVICE constexpr inline Shear6 +Shear6::operator- () const +{ + return Shear6 (-xy, -xz, -yz, -yx, -zx, -zy); +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline const Shear6& + Shear6::negate () +{ + xy = -xy; + xz = -xz; + yz = -yz; + yx = -yx; + zx = -zx; + zy = -zy; + return *this; +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline const Shear6& +Shear6::operator*= (const Shear6& h) +{ + xy *= h.xy; + xz *= h.xz; + yz *= h.yz; + yx *= h.yx; + zx *= h.zx; + zy *= h.zy; + return *this; +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline const Shear6& +Shear6::operator*= (T a) +{ + xy *= a; + xz *= a; + yz *= a; + yx *= a; + zx *= a; + zy *= a; + return *this; +} + +template +IMATH_HOSTDEVICE constexpr inline Shear6 +Shear6::operator* (const Shear6& h) const +{ + return Shear6 ( + xy * h.xy, xz * h.xz, yz * h.yz, yx * h.yx, zx * h.zx, zy * h.zy); +} + +template +IMATH_HOSTDEVICE constexpr inline Shear6 +Shear6::operator* (T a) const +{ + return Shear6 (xy * a, xz * a, yz * a, yx * a, zx * a, zy * a); +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline const Shear6& +Shear6::operator/= (const Shear6& h) +{ + xy /= h.xy; + xz /= h.xz; + yz /= h.yz; + yx /= h.yx; + zx /= h.zx; + zy /= h.zy; + return *this; +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline const Shear6& +Shear6::operator/= (T a) +{ + xy /= a; + xz /= a; + yz /= a; + yx /= a; + zx /= a; + zy /= a; + return *this; +} + +template +IMATH_HOSTDEVICE constexpr inline Shear6 +Shear6::operator/ (const Shear6& h) const +{ + return Shear6 ( + xy / h.xy, xz / h.xz, yz / h.yz, yx / h.yx, zx / h.zx, zy / h.zy); +} + +template +IMATH_HOSTDEVICE constexpr inline Shear6 +Shear6::operator/ (T a) const +{ + return Shear6 (xy / a, xz / a, yz / a, yx / a, zx / a, zy / a); +} + +//----------------------------- +// Stream output implementation +//----------------------------- + +template +std::ostream& +operator<< (std::ostream& s, const Shear6& h) +{ + return s << '(' << h.xy << ' ' << h.xz << ' ' << h.yz << h.yx << ' ' << h.zx + << ' ' << h.zy << ')'; +} + +//----------------------------------------- +// Implementation of reverse multiplication +//----------------------------------------- + +template +IMATH_HOSTDEVICE constexpr inline Shear6 +operator* (S a, const Shear6& h) +{ + return Shear6 ( + a * h.xy, a * h.xz, a * h.yz, a * h.yx, a * h.zx, a * h.zy); +} + +IMATH_INTERNAL_NAMESPACE_HEADER_EXIT + +#endif // INCLUDED_IMATHSHEAR_H diff --git a/third_party/tlRender-install-Release/include/Imath/ImathSphere.h b/third_party/tlRender-install-Release/include/Imath/ImathSphere.h new file mode 100644 index 00000000..3d5031bb --- /dev/null +++ b/third_party/tlRender-install-Release/include/Imath/ImathSphere.h @@ -0,0 +1,166 @@ +// +// SPDX-License-Identifier: BSD-3-Clause +// Copyright Contributors to the OpenEXR Project. +// + +// +// A 3D sphere class template +// + +#ifndef INCLUDED_IMATHSPHERE_H +#define INCLUDED_IMATHSPHERE_H + +#include "ImathExport.h" +#include "ImathNamespace.h" + +#include "ImathBox.h" +#include "ImathLine.h" +#include "ImathVec.h" + +IMATH_INTERNAL_NAMESPACE_HEADER_ENTER + +/// +/// A 3D sphere +/// + +template class IMATH_EXPORT_TEMPLATE_TYPE Sphere3 +{ +public: + /// @{ + /// @name Direct access to member fields + + /// Center + Vec3 center; + + /// Radius + T radius; + + /// @} + + /// @{ + /// @name Constructors + + /// Default is center at (0,0,0) and radius of 0. + IMATH_HOSTDEVICE constexpr Sphere3 () : center (0, 0, 0), radius (0) {} + + /// Initialize to a given center and radius + IMATH_HOSTDEVICE constexpr Sphere3 (const Vec3& c, T r) + : center (c), radius (r) + {} + + /// @} + + /// @{ + /// @name Manipulation + + /// Set the center and radius of the sphere so that it tightly + /// encloses Box b. + IMATH_HOSTDEVICE void circumscribe (const Box>& box); + + /// @} + + /// @{ + /// @name Utility Methods + + /// If the sphere and line `l` intersect, then compute the + /// smallest `t` with `t>=0` so that `l(t)` is a point on the sphere. + /// + /// @param[in] l The line + /// @param[out] intersection The point of intersection + /// @return True if the sphere and line intersect, false if they + /// do not. + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 bool + intersect (const Line3& l, Vec3& intersection) const; + + /// If the sphere and line `l` intersect, then compute the + /// smallest `t` with `t>=0` so that `l(t)` is a point on the sphere. + /// + /// @param[in] l The line + /// @param[out] t The parameter of the line at the intersection point + /// @return True if the sphere and line intersect, false if they + /// do not. + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 bool + intersectT (const Line3& l, T& t) const; + + /// @} +}; + +/// Sphere of type float +typedef Sphere3 Sphere3f; + +/// Sphere of type double +typedef Sphere3 Sphere3d; + +//--------------- +// Implementation +//--------------- + +template +IMATH_HOSTDEVICE inline void +Sphere3::circumscribe (const Box>& box) +{ + center = T (0.5) * (box.min + box.max); + radius = (box.max - center).length (); +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 bool +Sphere3::intersectT (const Line3& line, T& t) const +{ + bool doesIntersect = true; + + Vec3 v = line.pos - center; + T B = T (2.0) * (line.dir ^ v); + T C = (v ^ v) - (radius * radius); + + // compute discriminant + // if negative, there is no intersection + + T discr = B * B - T (4.0) * C; + + if (discr < 0.0) + { + // line and Sphere3 do not intersect + + doesIntersect = false; + } + else + { + // t0: (-B - sqrt(B^2 - 4AC)) / 2A (A = 1) + + T sqroot = std::sqrt (discr); + t = (-B - sqroot) * T (0.5); + + if (t < 0.0) + { + // no intersection, try t1: (-B + sqrt(B^2 - 4AC)) / 2A (A = 1) + + t = (-B + sqroot) * T (0.5); + } + + if (t < 0.0) doesIntersect = false; + } + + return doesIntersect; +} + +template +IMATH_CONSTEXPR14 bool +Sphere3::intersect (const Line3& line, Vec3& intersection) const +{ + T t (0); + + if (intersectT (line, t)) + { + intersection = line (t); + return true; + } + else + { + return false; + } +} + +IMATH_INTERNAL_NAMESPACE_HEADER_EXIT + +#endif // INCLUDED_IMATHSPHERE_H diff --git a/third_party/tlRender-install-Release/include/Imath/ImathTypeTraits.h b/third_party/tlRender-install-Release/include/Imath/ImathTypeTraits.h new file mode 100644 index 00000000..c3ad212a --- /dev/null +++ b/third_party/tlRender-install-Release/include/Imath/ImathTypeTraits.h @@ -0,0 +1,239 @@ +// +// SPDX-License-Identifier: BSD-3-Clause +// Copyright Contributors to the OpenEXR Project. +// + +// +// This file contains type traits related to or used by the Imath library. +// + +#ifndef INCLUDED_IMATHTYPETRAITS_H +#define INCLUDED_IMATHTYPETRAITS_H + +#include + +#include "ImathPlatform.h" + +IMATH_INTERNAL_NAMESPACE_HEADER_ENTER + +/// Define Imath::enable_if_t to be std for C++14, equivalent for C++11. +#if (IMATH_CPLUSPLUS_VERSION >= 14) +using std::enable_if_t; // Use C++14 std::enable_if_t +#else +// Define enable_if_t for C++11 +template +using enable_if_t = typename std::enable_if::type; +#endif + +/// An enable_if helper to be used in template parameters which results in +/// much shorter symbols. +#define IMATH_ENABLE_IF(...) \ + IMATH_INTERNAL_NAMESPACE::enable_if_t<(__VA_ARGS__), int> = 0 + +#if IMATH_FOREIGN_VECTOR_INTEROP + +/// @{ +/// @name Detecting interoperable types. +/// +/// In order to construct or assign from external "compatible" types without +/// prior knowledge of their definitions, we have a few helper type traits. +/// The intent of these is to allow custom linear algebra types in an +/// application that have seamless conversion to and from Imath types. +/// +/// `has_xy`, `has_xyz`, `has_xyzw` detect if class +/// `T` has elements `.x`, `.y`, and `.z` all of type `Base` and seems to be +/// the right size to hold exactly those members and nothing more. +/// +/// `has_subscript` detects if class `T` can perform `T[int]` +/// to yield a `Base`, and that it seems to be exactly the right size to +/// hold `N` of those elements. +/// +/// This is not exact. It's possible that for a particular user-defined +/// type, this may yield a false negative or false positive. For example: +/// * A class for a 3-vector that contains an extra element of padding +/// so that it will have the right size and alignment to use 4-wide +/// SIMD math ops will appear to be the wrong size. +/// * A `std::vector` is subscriptable and might have N elements at +/// runtime, but the size is dynamic and so would fail this test. +/// * A foreign type may have .x, .y, .z that are not matching our base +/// type but we still want it to work (with appropriate conversions). +/// +/// In these cases, user code may declare an exception -- for example, +/// stating that `mytype` should be considered implicitly convertible to +/// an Imath::V3f by subscripting: +/// +/// template<> +/// struct Imath::has_subscript : public std::true_type { }; +/// +/// And similarly, user code may correct a potential false positive (that +/// is, a `mytype` looks like it should be convertible to a V3f, but you +/// don't want it to ever happen): +/// +/// template +/// struct Imath::has_subscript : public std::false_type { }; +/// + +/// `has_xy::value` will be true if type `T` has member variables +/// `.x` and `.y`, all of type `Base`, and the size of a `T` is exactly big +/// enough to hold 2 Base values. +template struct has_xy +{ +private: + typedef char Yes[1]; + typedef char No[2]; + + // Valid only if .x, .y exist and are the right type: return a Yes. + template < + typename C, + IMATH_ENABLE_IF (std::is_same::value), + IMATH_ENABLE_IF (std::is_same::value)> + static Yes& test (int); + + // Fallback, default to returning a No. + template static No& test (...); + +public: + enum + { + value = + (sizeof (test (0)) == sizeof (Yes) && + sizeof (T) == 2 * sizeof (Base)) + }; +}; + +/// `has_xyz::value` will be true if type `T` has member variables +/// `.x`, `.y`, and `.z`, all of type `Base`, and the size of a `T` is +/// exactly big enough to hold 3 Base values. +template struct has_xyz +{ +private: + typedef char Yes[1]; + typedef char No[2]; + + // Valid only if .x, .y, .z exist and are the right type: return a Yes. + template < + typename C, + IMATH_ENABLE_IF (std::is_same::value), + IMATH_ENABLE_IF (std::is_same::value), + IMATH_ENABLE_IF (std::is_same::value)> + static Yes& test (int); + + // Fallback, default to returning a No. + template static No& test (...); + +public: + enum + { + value = + (sizeof (test (0)) == sizeof (Yes) && + sizeof (T) == 3 * sizeof (Base)) + }; +}; + +/// `has_xyzw::value` will be true if type `T` has member variables +/// `.x`, `.y`, `.z`, and `.w`, all of type `Base`, and the size of a `T` is +/// exactly big enough to hold 4 Base values. +template struct has_xyzw +{ +private: + typedef char Yes[1]; + typedef char No[2]; + + // Valid only if .x, .y, .z, .w exist and are the right type: return a Yes. + template < + typename C, + IMATH_ENABLE_IF (std::is_same::value), + IMATH_ENABLE_IF (std::is_same::value), + IMATH_ENABLE_IF (std::is_same::value), + IMATH_ENABLE_IF (std::is_same::value)> + static Yes& test (int); + + // Fallback, default to returning a No. + template static No& test (...); + +public: + enum + { + value = + (sizeof (test (0)) == sizeof (Yes) && + sizeof (T) == 4 * sizeof (Base)) + }; +}; + +/// `has_subscript::value` will be true if type `T` has +/// subscripting syntax, a `T[int]` returns a `Base`, and the size of a `T` +/// is exactly big enough to hold `Nelem` `Base` values. +template struct has_subscript +{ +private: + typedef char Yes[1]; + typedef char No[2]; + + // Valid only if T[] is possible and is the right type: return a Yes. + template < + typename C, + IMATH_ENABLE_IF (std::is_same< + typename std::decay::type, + Base>::value)> + static Yes& test (int); + + // Fallback, default to returning a No. + template static No& test (...); + +public: + enum + { + value = + (sizeof (test (0)) == sizeof (Yes) && + sizeof (T) == Nelem * sizeof (Base)) + }; +}; + +/// C arrays of just the right length also are qualified for has_subscript. +template +struct has_subscript : public std::true_type +{}; + +/// `has_double_subscript::value` will be true if type `T` +/// has 2-level subscripting syntax, a `T[int][int]` returns a `Base`, and +/// the size of a `T` is exactly big enough to hold `R*C` `Base` values. +template +struct has_double_subscript +{ +private: + typedef char Yes[1]; + typedef char No[2]; + + // Valid only if T[][] is possible and is the right type: return a Yes. + template < + typename C, + IMATH_ENABLE_IF (std::is_same< + typename std::decay::type, + Base>::value)> + static Yes& test (int); + + // Fallback, default to returning a No. + template static No& test (...); + +public: + enum + { + value = + (sizeof (test (0)) == sizeof (Yes) && + sizeof (T) == (Rows * Cols) * sizeof (Base)) + }; +}; + +/// C arrays of just the right length also are qualified for has_double_subscript. +template +struct has_double_subscript + : public std::true_type +{}; + +/// @} + +#endif + +IMATH_INTERNAL_NAMESPACE_HEADER_EXIT + +#endif // INCLUDED_IMATHTYPETRAITS_H diff --git a/third_party/tlRender-install-Release/include/Imath/ImathVec.h b/third_party/tlRender-install-Release/include/Imath/ImathVec.h new file mode 100644 index 00000000..d286aba6 --- /dev/null +++ b/third_party/tlRender-install-Release/include/Imath/ImathVec.h @@ -0,0 +1,2673 @@ +// +// SPDX-License-Identifier: BSD-3-Clause +// Copyright Contributors to the OpenEXR Project. +// + +// +// 2D, 3D and 4D point/vector class templates +// + +#ifndef INCLUDED_IMATHVEC_H +#define INCLUDED_IMATHVEC_H + +#ifdef __has_include +# if __has_include() +# include +# endif +#endif + +#include "ImathExport.h" +#include "ImathNamespace.h" +#include "ImathTypeTraits.h" + +#include "ImathMath.h" +#include "half.h" + +#include +#include +#include +#include + +#if (defined _WIN32 || defined _WIN64) && defined _MSC_VER +// suppress exception specification warnings +# pragma warning(push) +# pragma warning(disable : 4290) +#endif + +IMATH_INTERNAL_NAMESPACE_HEADER_ENTER + +template class Vec2; +template class Vec3; +template class Vec4; + +/// Enum for the Vec4 to Vec3 conversion constructor +enum IMATH_EXPORT_ENUM InfException +{ + INF_EXCEPTION +}; + +/// +/// 2-element vector +/// + +template class IMATH_EXPORT_TEMPLATE_TYPE Vec2 +{ +public: + /// @{ + /// @name Direct access to elements + + T x, y; + + /// @} + + /// Element access by index. + /// + /// NB: This method of access may use dynamic array accesses which + /// can prevent compiler optimizations and force temporaries to be + /// stored to the stack and other missed vectorization + /// opportunities. Use of direct access to x, y when + /// possible should be preferred. + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 T& operator[] (int i) IMATH_NOEXCEPT; + + /// Element access by index. + /// + /// NB: This method of access may use dynamic array accesses which + /// can prevent compiler optimizations and force temporaries to be + /// stored to the stack and other missed vectorization + /// opportunities. Use of direct access to x, y when + /// possible should be preferred. + IMATH_HOSTDEVICE constexpr const T& operator[] (int i) const IMATH_NOEXCEPT; + + /// @{ + /// @name Constructors and Assignment + + /// Uninitialized by default + IMATH_HOSTDEVICE Vec2 () IMATH_NOEXCEPT; + + /// Initialize to a scalar `(a,a)` + IMATH_HOSTDEVICE constexpr explicit Vec2 (T a) IMATH_NOEXCEPT; + + /// Initialize to given elements `(a,b)` + IMATH_HOSTDEVICE constexpr Vec2 (T a, T b) IMATH_NOEXCEPT; + + /// Copy constructor + IMATH_HOSTDEVICE constexpr Vec2 (const Vec2& v) IMATH_NOEXCEPT; + + /// Construct from Vec2 of another base type + template + IMATH_HOSTDEVICE constexpr Vec2 (const Vec2& v) IMATH_NOEXCEPT; + + /// Assignment + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 const Vec2& + operator= (const Vec2& v) IMATH_NOEXCEPT; + + /// Destructor + ~Vec2 () IMATH_NOEXCEPT = default; + + /// @} + +#if IMATH_FOREIGN_VECTOR_INTEROP + /// @{ + /// @name Interoperability with other vector types + /// + /// Construction and assignment are allowed from other classes that + /// appear to be equivalent vector types, provided that they have either + /// a subscripting operator, or data members .x and .y, that are of the + /// same type as the elements of this vector, and their size appears to + /// be the right number of elements. + /// + /// This functionality is disabled for gcc 4.x, which seems to have a + /// compiler bug that results in spurious errors. It can also be + /// disabled by defining IMATH_FOREIGN_VECTOR_INTEROP to be 0 prior to + /// including any Imath header files. + /// + + template ::value)> + IMATH_HOSTDEVICE explicit constexpr Vec2 (const V& v) IMATH_NOEXCEPT + : Vec2 (T (v.x), T (v.y)) + {} + + template < + typename V, + IMATH_ENABLE_IF (has_subscript::value && !has_xy::value)> + IMATH_HOSTDEVICE explicit Vec2 (const V& v) : Vec2 (T (v[0]), T (v[1])) + {} + + template ::value)> + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 const Vec2& + operator= (const V& v) IMATH_NOEXCEPT + { + x = T (v.x); + y = T (v.y); + return *this; + } + + template < + typename V, + IMATH_ENABLE_IF (has_subscript::value && !has_xy::value)> + IMATH_HOSTDEVICE const Vec2& operator= (const V& v) + { + x = T (v[0]); + y = T (v[1]); + return *this; + } +#endif + + /// @{ + /// @name Compatibility with Sb + + /// Set the value + template IMATH_HOSTDEVICE void setValue (S a, S b) IMATH_NOEXCEPT; + + /// Set the value + template + IMATH_HOSTDEVICE void setValue (const Vec2& v) IMATH_NOEXCEPT; + + /// Return the value in `a` and `b` + template + IMATH_HOSTDEVICE void getValue (S& a, S& b) const IMATH_NOEXCEPT; + + /// Return the value in `v` + template + IMATH_HOSTDEVICE void getValue (Vec2& v) const IMATH_NOEXCEPT; + + /// Return a raw pointer to the array of values + IMATH_HOSTDEVICE T* getValue () IMATH_NOEXCEPT; + + /// Return a raw pointer to the array of values + IMATH_HOSTDEVICE const T* getValue () const IMATH_NOEXCEPT; + + /// @} + + /// @{ + /// @name Arithmetic and Comparison + + /// Equality + template + IMATH_HOSTDEVICE constexpr bool + operator== (const Vec2& v) const IMATH_NOEXCEPT; + + /// Inequality + template + IMATH_HOSTDEVICE constexpr bool + operator!= (const Vec2& v) const IMATH_NOEXCEPT; + + /// Compare two matrices and test if they are "approximately equal": + /// @return True if the coefficients of this and `m` are the same + /// with an absolute error of no more than e, i.e., for all i, j: + /// + /// abs (this[i][j] - m[i][j]) <= e + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 bool + equalWithAbsError (const Vec2& v, T e) const IMATH_NOEXCEPT; + + /// Compare two matrices and test if they are "approximately equal": + /// @return True if the coefficients of this and m are the same with + /// a relative error of no more than e, i.e., for all i, j: + /// + /// abs (this[i] - v[i][j]) <= e * abs (this[i][j]) + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 bool + equalWithRelError (const Vec2& v, T e) const IMATH_NOEXCEPT; + + /// Dot product + IMATH_HOSTDEVICE constexpr T dot (const Vec2& v) const IMATH_NOEXCEPT; + + /// Dot product + IMATH_HOSTDEVICE constexpr T operator^ (const Vec2& v) const IMATH_NOEXCEPT; + + /// Right-handed cross product, i.e. z component of + /// Vec3 (this->x, this->y, 0) % Vec3 (v.x, v.y, 0) + IMATH_HOSTDEVICE constexpr T cross (const Vec2& v) const IMATH_NOEXCEPT; + + /// Right-handed cross product, i.e. z component of + /// Vec3 (this->x, this->y, 0) % Vec3 (v.x, v.y, 0) + IMATH_HOSTDEVICE constexpr T operator% (const Vec2& v) const IMATH_NOEXCEPT; + + /// Component-wise addition + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 const Vec2& + operator+= (const Vec2& v) IMATH_NOEXCEPT; + + /// Component-wise addition + IMATH_HOSTDEVICE constexpr Vec2 + operator+ (const Vec2& v) const IMATH_NOEXCEPT; + + /// Component-wise subtraction + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 const Vec2& + operator-= (const Vec2& v) IMATH_NOEXCEPT; + + /// Component-wise subtraction + IMATH_HOSTDEVICE constexpr Vec2 + operator- (const Vec2& v) const IMATH_NOEXCEPT; + + /// Component-wise multiplication by -1 + IMATH_HOSTDEVICE constexpr Vec2 operator- () const IMATH_NOEXCEPT; + + /// Component-wise multiplication by -1 + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 const Vec2& negate () IMATH_NOEXCEPT; + + /// Component-wise multiplication + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 const Vec2& + operator*= (const Vec2& v) IMATH_NOEXCEPT; + + /// Component-wise multiplication + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 const Vec2& + operator*= (T a) IMATH_NOEXCEPT; + + /// Component-wise multiplication + IMATH_HOSTDEVICE constexpr Vec2 + operator* (const Vec2& v) const IMATH_NOEXCEPT; + + /// Component-wise multiplication + IMATH_HOSTDEVICE constexpr Vec2 operator* (T a) const IMATH_NOEXCEPT; + + /// Component-wise division + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 const Vec2& + operator/= (const Vec2& v) IMATH_NOEXCEPT; + + /// Component-wise division + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 const Vec2& + operator/= (T a) IMATH_NOEXCEPT; + + /// Component-wise division + IMATH_HOSTDEVICE constexpr Vec2 + operator/ (const Vec2& v) const IMATH_NOEXCEPT; + + /// Component-wise division + IMATH_HOSTDEVICE constexpr Vec2 operator/ (T a) const IMATH_NOEXCEPT; + + /// @} + + /// @{ + /// @name Query and Manipulation + + /// Return the Euclidean norm + IMATH_HOSTDEVICE T length () const IMATH_NOEXCEPT; + + /// Return the square of the Euclidean norm, i.e. the dot product + /// with itself. + IMATH_HOSTDEVICE constexpr T length2 () const IMATH_NOEXCEPT; + + /// Normalize in place. If length()==0, return a null vector. + IMATH_HOSTDEVICE const Vec2& normalize () IMATH_NOEXCEPT; + + /// Normalize in place. If length()==0, throw an exception. + const Vec2& normalizeExc (); + + /// Normalize without any checks for length()==0. Slightly faster + /// than the other normalization routines, but if v.length() is + /// 0.0, the result is undefined. + IMATH_HOSTDEVICE const Vec2& normalizeNonNull () IMATH_NOEXCEPT; + + /// Return a normalized vector. Does not modify *this. + IMATH_HOSTDEVICE Vec2 normalized () const IMATH_NOEXCEPT; + + /// Return a normalized vector. Does not modify *this. Throw an + /// exception if length()==0. + Vec2 normalizedExc () const; + + /// Return a normalized vector. Does not modify *this, and does + /// not check for length()==0. Slightly faster than the other + /// normalization routines, but if v.length() is 0.0, the result + /// is undefined. + IMATH_HOSTDEVICE Vec2 normalizedNonNull () const IMATH_NOEXCEPT; + + /// @} + + /// @{ + /// @name Numeric Limits + + /// Largest possible negative value + IMATH_HOSTDEVICE constexpr static T baseTypeLowest () IMATH_NOEXCEPT + { + return std::numeric_limits::lowest (); + } + + /// Largest possible positive value + IMATH_HOSTDEVICE constexpr static T baseTypeMax () IMATH_NOEXCEPT + { + return std::numeric_limits::max (); + } + + /// Smallest possible positive value + IMATH_HOSTDEVICE constexpr static T baseTypeSmallest () IMATH_NOEXCEPT + { + return std::numeric_limits::min (); + } + + /// Smallest possible e for which 1+e != 1 + IMATH_HOSTDEVICE constexpr static T baseTypeEpsilon () IMATH_NOEXCEPT + { + return std::numeric_limits::epsilon (); + } + + /// @} + + /// Return the number of dimensions, i.e. 2 + IMATH_HOSTDEVICE constexpr static unsigned int dimensions () IMATH_NOEXCEPT + { + return 2; + } + + /// The base type: In templates that accept a parameter `V`, you + /// can refer to `T` as `V::BaseType` + typedef T BaseType; + +private: + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 T lengthTiny () const IMATH_NOEXCEPT; +}; + +/// +/// 3-element vector +/// + +template class IMATH_EXPORT_TEMPLATE_TYPE Vec3 +{ +public: + /// @{ + /// @name Direct access to elements + + T x, y, z; + + /// @} + + /// Element access by index. + /// + /// NB: This method of access uses dynamic array accesses which + /// can prevent compiler optimizations and force temporaries to be + /// stored to the stack and other missed vectorization + /// opportunities. Use of direct access to x, y, z when + /// possible should be preferred. + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 T& operator[] (int i) IMATH_NOEXCEPT; + + /// Element access by index. + /// + /// NB: This method of access uses dynamic array accesses which + /// can prevent compiler optimizations and force temporaries to be + /// stored to the stack and other missed vectorization + /// opportunities. Use of direct access to x, y, z when + /// possible should be preferred. + IMATH_HOSTDEVICE constexpr const T& operator[] (int i) const IMATH_NOEXCEPT; + + /// @{ + /// @name Constructors and Assignment + + /// Uninitialized by default + IMATH_HOSTDEVICE Vec3 () IMATH_NOEXCEPT; + + /// Initialize to a scalar `(a,a,a)` + IMATH_HOSTDEVICE constexpr explicit Vec3 (T a) IMATH_NOEXCEPT; + + /// Initialize to given elements `(a,b,c)` + IMATH_HOSTDEVICE constexpr Vec3 (T a, T b, T c) IMATH_NOEXCEPT; + + /// Copy constructor + IMATH_HOSTDEVICE constexpr Vec3 (const Vec3& v) IMATH_NOEXCEPT; + + /// Construct from Vec3 of another base type + template + IMATH_HOSTDEVICE constexpr Vec3 (const Vec3& v) IMATH_NOEXCEPT; + + /// Vec4 to Vec3 conversion: divide x, y and z by w, even if w is + /// 0. The result depends on how the environment handles + /// floating-point exceptions. + template + IMATH_HOSTDEVICE explicit constexpr Vec3 (const Vec4& v) IMATH_NOEXCEPT; + + /// Vec4 to Vec3 conversion: divide x, y and z by w. Throws an + /// exception if w is zero or if division by w would overflow. + template + explicit IMATH_HOSTDEVICE IMATH_CONSTEXPR14 + Vec3 (const Vec4& v, InfException); + + /// Assignment + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 const Vec3& + operator= (const Vec3& v) IMATH_NOEXCEPT; + + /// Destructor + ~Vec3 () IMATH_NOEXCEPT = default; + + /// @} + +#if IMATH_FOREIGN_VECTOR_INTEROP + /// @{ + /// @name Interoperability with other vector types + /// + /// Construction and assignment are allowed from other classes that + /// appear to be equivalent vector types, provided that they have either + /// a subscripting operator, or data members .x, .y, .z, that are of the + /// same type as the elements of this vector, and their size appears to + /// be the right number of elements. + /// + /// This functionality is disabled for gcc 4.x, which seems to have a + /// compiler bug that results in spurious errors. It can also be + /// disabled by defining IMATH_FOREIGN_VECTOR_INTEROP to be 0 prior to + /// including any Imath header files. + /// + + template ::value)> + IMATH_HOSTDEVICE explicit constexpr Vec3 (const V& v) IMATH_NOEXCEPT + : Vec3 (T (v.x), T (v.y), T (v.z)) + {} + + template < + typename V, + IMATH_ENABLE_IF ( + has_subscript::value && !has_xyz::value)> + IMATH_HOSTDEVICE explicit Vec3 (const V& v) + : Vec3 (T (v[0]), T (v[1]), T (v[2])) + {} + + /// Interoperability assignment from another type that behaves as if it + /// were an equivalent vector. + template ::value)> + IMATH_HOSTDEVICE const Vec3& operator= (const V& v) IMATH_NOEXCEPT + { + x = T (v.x); + y = T (v.y); + z = T (v.z); + return *this; + } + + template < + typename V, + IMATH_ENABLE_IF ( + has_subscript::value && !has_xyz::value)> + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 const Vec3& operator= (const V& v) + { + x = T (v[0]); + y = T (v[1]); + z = T (v[2]); + return *this; + } + /// @} +#endif + + /// @{ + /// @name Compatibility with Sb + + /// Set the value + template + IMATH_HOSTDEVICE void setValue (S a, S b, S c) IMATH_NOEXCEPT; + + /// Set the value + template + IMATH_HOSTDEVICE void setValue (const Vec3& v) IMATH_NOEXCEPT; + + /// Return the value in `a`, `b`, and `c` + template + IMATH_HOSTDEVICE void getValue (S& a, S& b, S& c) const IMATH_NOEXCEPT; + + /// Return the value in `v` + template + IMATH_HOSTDEVICE void getValue (Vec3& v) const IMATH_NOEXCEPT; + + /// Return a raw pointer to the array of values + IMATH_HOSTDEVICE T* getValue () IMATH_NOEXCEPT; + + /// Return a raw pointer to the array of values + IMATH_HOSTDEVICE const T* getValue () const IMATH_NOEXCEPT; + + /// @} + + /// @{ + /// @name Arithmetic and Comparison + + /// Equality + template + IMATH_HOSTDEVICE constexpr bool + operator== (const Vec3& v) const IMATH_NOEXCEPT; + + /// Inequality + template + IMATH_HOSTDEVICE constexpr bool + operator!= (const Vec3& v) const IMATH_NOEXCEPT; + + /// Compare two matrices and test if they are "approximately equal": + /// @return True if the coefficients of this and `m` are the same + /// with an absolute error of no more than e, i.e., for all i, j: + /// + /// abs (this[i][j] - m[i][j]) <= e + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 bool + equalWithAbsError (const Vec3& v, T e) const IMATH_NOEXCEPT; + + /// Compare two matrices and test if they are "approximately equal": + /// @return True if the coefficients of this and m are the same with + /// a relative error of no more than e, i.e., for all i, j: + /// + /// abs (this[i] - v[i][j]) <= e * abs (this[i][j]) + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 bool + equalWithRelError (const Vec3& v, T e) const IMATH_NOEXCEPT; + + /// Dot product + IMATH_HOSTDEVICE constexpr T dot (const Vec3& v) const IMATH_NOEXCEPT; + + /// Dot product + IMATH_HOSTDEVICE constexpr T operator^ (const Vec3& v) const IMATH_NOEXCEPT; + + /// Right-handed cross product + IMATH_HOSTDEVICE constexpr Vec3 cross (const Vec3& v) const IMATH_NOEXCEPT; + + /// Right-handed cross product + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 const Vec3& + operator%= (const Vec3& v) IMATH_NOEXCEPT; + + /// Right-handed cross product + IMATH_HOSTDEVICE constexpr Vec3 + operator% (const Vec3& v) const IMATH_NOEXCEPT; + + /// Component-wise addition + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 const Vec3& + operator+= (const Vec3& v) IMATH_NOEXCEPT; + + /// Component-wise addition + IMATH_HOSTDEVICE constexpr Vec3 + operator+ (const Vec3& v) const IMATH_NOEXCEPT; + + /// Component-wise subtraction + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 const Vec3& + operator-= (const Vec3& v) IMATH_NOEXCEPT; + + /// Component-wise subtraction + IMATH_HOSTDEVICE constexpr Vec3 + operator- (const Vec3& v) const IMATH_NOEXCEPT; + + /// Component-wise multiplication by -1 + IMATH_HOSTDEVICE constexpr Vec3 operator- () const IMATH_NOEXCEPT; + + /// Component-wise multiplication by -1 + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 const Vec3& negate () IMATH_NOEXCEPT; + + /// Component-wise multiplication + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 const Vec3& + operator*= (const Vec3& v) IMATH_NOEXCEPT; + + /// Component-wise multiplication + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 const Vec3& + operator*= (T a) IMATH_NOEXCEPT; + + /// Component-wise multiplication + IMATH_HOSTDEVICE constexpr Vec3 + operator* (const Vec3& v) const IMATH_NOEXCEPT; + + /// Component-wise multiplication + IMATH_HOSTDEVICE constexpr Vec3 operator* (T a) const IMATH_NOEXCEPT; + + /// Component-wise division + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 const Vec3& + operator/= (const Vec3& v) IMATH_NOEXCEPT; + + /// Component-wise division + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 const Vec3& + operator/= (T a) IMATH_NOEXCEPT; + + /// Component-wise division + IMATH_HOSTDEVICE constexpr Vec3 + operator/ (const Vec3& v) const IMATH_NOEXCEPT; + + /// Component-wise division + IMATH_HOSTDEVICE constexpr Vec3 operator/ (T a) const IMATH_NOEXCEPT; + + /// @} + + /// @{ + /// @name Query and Manipulation + + /// Return the Euclidean norm + IMATH_HOSTDEVICE T length () const IMATH_NOEXCEPT; + + /// Return the square of the Euclidean norm, i.e. the dot product + /// with itself. + IMATH_HOSTDEVICE constexpr T length2 () const IMATH_NOEXCEPT; + + /// Normalize in place. If length()==0, return a null vector. + IMATH_HOSTDEVICE const Vec3& normalize () IMATH_NOEXCEPT; + + /// Normalize in place. If length()==0, throw an exception. + const Vec3& normalizeExc (); + + /// Normalize without any checks for length()==0. Slightly faster + /// than the other normalization routines, but if v.length() is + /// 0.0, the result is undefined. + IMATH_HOSTDEVICE const Vec3& normalizeNonNull () IMATH_NOEXCEPT; + + /// Return a normalized vector. Does not modify *this. + IMATH_HOSTDEVICE Vec3 + normalized () const IMATH_NOEXCEPT; // does not modify *this + + /// Return a normalized vector. Does not modify *this. Throw an + /// exception if length()==0. + Vec3 normalizedExc () const; + + /// Return a normalized vector. Does not modify *this, and does + /// not check for length()==0. Slightly faster than the other + /// normalization routines, but if v.length() is 0.0, the result + /// is undefined. + IMATH_HOSTDEVICE Vec3 normalizedNonNull () const IMATH_NOEXCEPT; + + /// @} + + /// @{ + /// @name Numeric Limits + + /// Largest possible negative value + IMATH_HOSTDEVICE constexpr static T baseTypeLowest () IMATH_NOEXCEPT + { + return std::numeric_limits::lowest (); + } + + /// Largest possible positive value + IMATH_HOSTDEVICE constexpr static T baseTypeMax () IMATH_NOEXCEPT + { + return std::numeric_limits::max (); + } + + /// Smallest possible positive value + IMATH_HOSTDEVICE constexpr static T baseTypeSmallest () IMATH_NOEXCEPT + { + return std::numeric_limits::min (); + } + + /// Smallest possible e for which 1+e != 1 + IMATH_HOSTDEVICE constexpr static T baseTypeEpsilon () IMATH_NOEXCEPT + { + return std::numeric_limits::epsilon (); + } + + /// @} + + /// Return the number of dimensions, i.e. 3 + IMATH_HOSTDEVICE constexpr static unsigned int dimensions () IMATH_NOEXCEPT + { + return 3; + } + + /// The base type: In templates that accept a parameter `V`, you + /// can refer to `T` as `V::BaseType` + typedef T BaseType; + +private: + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 T lengthTiny () const IMATH_NOEXCEPT; +}; + +/// +/// 4-element vector +/// + +template class IMATH_EXPORT_TEMPLATE_TYPE Vec4 +{ +public: + /// @{ + /// @name Direct access to elements + + T x, y, z, w; + + /// @} + + /// Element access by index. + /// + /// NB: This method of access uses dynamic array accesses which + /// can prevent compiler optimizations and force temporaries to be + /// stored to the stack and other missed vectorization + /// opportunities. Use of direct access to x, y, z, w when + /// possible should be preferred. + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 T& operator[] (int i) IMATH_NOEXCEPT; + + /// Element access by index. + /// + /// NB: This method of access uses dynamic array accesses which + /// can prevent compiler optimizations and force temporaries to be + /// stored to the stack and other missed vectorization + /// opportunities. Use of direct access to x, y, z, w when + /// possible should be preferred. + IMATH_HOSTDEVICE constexpr const T& operator[] (int i) const IMATH_NOEXCEPT; + + /// @{ + /// @name Constructors and Assignment + + /// Uninitialized by default + IMATH_HOSTDEVICE Vec4 () IMATH_NOEXCEPT; // no initialization + + /// Initialize to a scalar `(a,a,a,a)` + IMATH_HOSTDEVICE constexpr explicit Vec4 (T a) IMATH_NOEXCEPT; + + /// Initialize to given elements `(a,b,c,d)` + IMATH_HOSTDEVICE constexpr Vec4 (T a, T b, T c, T d) IMATH_NOEXCEPT; + + /// Copy constructor + IMATH_HOSTDEVICE constexpr Vec4 (const Vec4& v) IMATH_NOEXCEPT; + + /// Construct from Vec4 of another base type + template + IMATH_HOSTDEVICE constexpr Vec4 (const Vec4& v) IMATH_NOEXCEPT; + + /// Vec3 to Vec4 conversion, sets w to 1. + template + IMATH_HOSTDEVICE explicit constexpr Vec4 (const Vec3& v) IMATH_NOEXCEPT; + + /// Assignment + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 const Vec4& + operator= (const Vec4& v) IMATH_NOEXCEPT; + + /// Destructor + ~Vec4 () IMATH_NOEXCEPT = default; + + /// @} + +#if IMATH_FOREIGN_VECTOR_INTEROP + /// @{ + /// @name Interoperability with other vector types + /// + /// Construction and assignment are allowed from other classes that + /// appear to be equivalent vector types, provided that they have either + /// a subscripting operator, or data members .x, .y, .z, .w that are of + /// the same type as the elements of this vector, and their size appears + /// to be the right number of elements. + /// + /// This functionality is disabled for gcc 4.x, which seems to have a + /// compiler bug that results in spurious errors. It can also be + /// disabled by defining IMATH_FOREIGN_VECTOR_INTEROP to be 0 prior to + /// including any Imath header files. + /// + + template ::value)> + IMATH_HOSTDEVICE explicit constexpr Vec4 (const V& v) IMATH_NOEXCEPT + : Vec4 (T (v.x), T (v.y), T (v.z), T (v.w)) + {} + + template < + typename V, + IMATH_ENABLE_IF ( + has_subscript::value && !has_xyzw::value)> + IMATH_HOSTDEVICE explicit Vec4 (const V& v) + : Vec4 (T (v[0]), T (v[1]), T (v[2]), T (v[3])) + {} + + template ::value)> + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 const Vec4& + operator= (const V& v) IMATH_NOEXCEPT + { + x = T (v.x); + y = T (v.y); + z = T (v.z); + w = T (v.w); + return *this; + } + + template < + typename V, + IMATH_ENABLE_IF ( + has_subscript::value && !has_xyzw::value)> + IMATH_HOSTDEVICE const Vec4& operator= (const V& v) + { + x = T (v[0]); + y = T (v[1]); + z = T (v[2]); + w = T (v[3]); + return *this; + } + /// @} +#endif + + /// @{ + /// @name Compatibility with Sb + + /// Set the value + template IMATH_HOSTDEVICE void setValue (S a, S b, S c, S d) IMATH_NOEXCEPT; + + /// Set the value + template + IMATH_HOSTDEVICE void setValue (const Vec4& v) IMATH_NOEXCEPT; + + /// Return the value in `a` and `b` + template + IMATH_HOSTDEVICE void getValue (S& a, S& b, S& c, S& d) const IMATH_NOEXCEPT; + + /// Return the value in `v` + template + IMATH_HOSTDEVICE void getValue (Vec4& v) const IMATH_NOEXCEPT; + + /// Return a raw pointer to the array of values + IMATH_HOSTDEVICE T* getValue () IMATH_NOEXCEPT; + + /// Return a raw pointer to the array of values + IMATH_HOSTDEVICE const T* getValue () const IMATH_NOEXCEPT; + + /// @} + + /// @{ + /// @name Arithmetic and Comparison + + /// Equality + template + IMATH_HOSTDEVICE constexpr bool + operator== (const Vec4& v) const IMATH_NOEXCEPT; + + /// Inequality + template + IMATH_HOSTDEVICE constexpr bool + operator!= (const Vec4& v) const IMATH_NOEXCEPT; + + /// Compare two matrices and test if they are "approximately equal": + /// @return True if the coefficients of this and `m` are the same + /// with an absolute error of no more than e, i.e., for all i, j: + /// + /// abs (this[i][j] - m[i][j]) <= e + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 bool + equalWithAbsError (const Vec4& v, T e) const IMATH_NOEXCEPT; + + /// Compare two matrices and test if they are "approximately equal": + /// @return True if the coefficients of this and m are the same with + /// a relative error of no more than e, i.e., for all i, j: + /// + /// abs (this[i] - v[i][j]) <= e * abs (this[i][j]) + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 bool + equalWithRelError (const Vec4& v, T e) const IMATH_NOEXCEPT; + + /// Dot product + IMATH_HOSTDEVICE constexpr T dot (const Vec4& v) const IMATH_NOEXCEPT; + + /// Dot product + IMATH_HOSTDEVICE constexpr T operator^ (const Vec4& v) const IMATH_NOEXCEPT; + + /// Component-wise addition + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 const Vec4& + operator+= (const Vec4& v) IMATH_NOEXCEPT; + + /// Component-wise addition + IMATH_HOSTDEVICE constexpr Vec4 + operator+ (const Vec4& v) const IMATH_NOEXCEPT; + + /// Component-wise subtraction + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 const Vec4& + operator-= (const Vec4& v) IMATH_NOEXCEPT; + + /// Component-wise subtraction + IMATH_HOSTDEVICE constexpr Vec4 + operator- (const Vec4& v) const IMATH_NOEXCEPT; + + /// Component-wise multiplication by -1 + IMATH_HOSTDEVICE constexpr Vec4 operator- () const IMATH_NOEXCEPT; + + /// Component-wise multiplication by -1 + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 const Vec4& negate () IMATH_NOEXCEPT; + + /// Component-wise multiplication + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 const Vec4& + operator*= (const Vec4& v) IMATH_NOEXCEPT; + + /// Component-wise multiplication + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 const Vec4& + operator*= (T a) IMATH_NOEXCEPT; + + /// Component-wise multiplication + IMATH_HOSTDEVICE constexpr Vec4 + operator* (const Vec4& v) const IMATH_NOEXCEPT; + + /// Component-wise multiplication + IMATH_HOSTDEVICE constexpr Vec4 operator* (T a) const IMATH_NOEXCEPT; + + /// Component-wise division + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 const Vec4& + operator/= (const Vec4& v) IMATH_NOEXCEPT; + + /// Component-wise division + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 const Vec4& + operator/= (T a) IMATH_NOEXCEPT; + + /// Component-wise division + IMATH_HOSTDEVICE constexpr Vec4 + operator/ (const Vec4& v) const IMATH_NOEXCEPT; + + /// Component-wise division + IMATH_HOSTDEVICE constexpr Vec4 operator/ (T a) const IMATH_NOEXCEPT; + + /// @} + + /// @{ + /// @name Query and Manipulation + + /// Return the Euclidean norm + IMATH_HOSTDEVICE T length () const IMATH_NOEXCEPT; + + /// Return the square of the Euclidean norm, i.e. the dot product + /// with itself. + IMATH_HOSTDEVICE constexpr T length2 () const IMATH_NOEXCEPT; + + /// Normalize in place. If length()==0, return a null vector. + IMATH_HOSTDEVICE const Vec4& normalize () IMATH_NOEXCEPT; // modifies *this + + /// Normalize in place. If length()==0, throw an exception. + const Vec4& normalizeExc (); + + /// Normalize without any checks for length()==0. Slightly faster + /// than the other normalization routines, but if v.length() is + /// 0.0, the result is undefined. + IMATH_HOSTDEVICE const Vec4& normalizeNonNull () IMATH_NOEXCEPT; + + /// Return a normalized vector. Does not modify *this. + IMATH_HOSTDEVICE Vec4 + normalized () const IMATH_NOEXCEPT; // does not modify *this + + /// Return a normalized vector. Does not modify *this. Throw an + /// exception if length()==0. + Vec4 normalizedExc () const; + + /// Return a normalized vector. Does not modify *this, and does + /// not check for length()==0. Slightly faster than the other + /// normalization routines, but if v.length() is 0.0, the result + /// is undefined. + IMATH_HOSTDEVICE Vec4 normalizedNonNull () const IMATH_NOEXCEPT; + + /// @} + + /// @{ + /// @name Numeric Limits + + /// Largest possible negative value + IMATH_HOSTDEVICE constexpr static T baseTypeLowest () IMATH_NOEXCEPT + { + return std::numeric_limits::lowest (); + } + + /// Largest possible positive value + IMATH_HOSTDEVICE constexpr static T baseTypeMax () IMATH_NOEXCEPT + { + return std::numeric_limits::max (); + } + + /// Smallest possible positive value + IMATH_HOSTDEVICE constexpr static T baseTypeSmallest () IMATH_NOEXCEPT + { + return std::numeric_limits::min (); + } + + /// Smallest possible e for which 1+e != 1 + IMATH_HOSTDEVICE constexpr static T baseTypeEpsilon () IMATH_NOEXCEPT + { + return std::numeric_limits::epsilon (); + } + + /// @} + + /// Return the number of dimensions, i.e. 4 + IMATH_HOSTDEVICE constexpr static unsigned int dimensions () IMATH_NOEXCEPT + { + return 4; + } + + /// The base type: In templates that accept a parameter `V`, you + /// can refer to `T` as `V::BaseType` + typedef T BaseType; + +private: + IMATH_HOSTDEVICE IMATH_CONSTEXPR14 T lengthTiny () const IMATH_NOEXCEPT; +}; + +/// Stream output, as "(x y)" +template std::ostream& operator<< (std::ostream& s, const Vec2& v); + +/// Stream output, as "(x y z)" +template std::ostream& operator<< (std::ostream& s, const Vec3& v); + +/// Stream output, as "(x y z w)" +template std::ostream& operator<< (std::ostream& s, const Vec4& v); + +/// Reverse multiplication: S * Vec2 +template +IMATH_HOSTDEVICE constexpr Vec2 +operator* (T a, const Vec2& v) IMATH_NOEXCEPT; + +/// Reverse multiplication: S * Vec3 +template +IMATH_HOSTDEVICE constexpr Vec3 +operator* (T a, const Vec3& v) IMATH_NOEXCEPT; + +/// Reverse multiplication: S * Vec4 +template +IMATH_HOSTDEVICE constexpr Vec4 +operator* (T a, const Vec4& v) IMATH_NOEXCEPT; + +//------------------------- +// Typedefs for convenience +//------------------------- + +/// Vec2 of half +typedef Vec2 V2h; + +/// Vec2 of short +typedef Vec2 V2s; + +/// Vec2 of integer +typedef Vec2 V2i; + +/// Vec2 of int64_t +typedef Vec2 V2i64; + +/// Vec2 of float +typedef Vec2 V2f; + +/// Vec2 of double +typedef Vec2 V2d; + +/// Vec3 of half +typedef Vec3 V3h; + +/// Vec3 of short +typedef Vec3 V3s; + +/// Vec3 of integer +typedef Vec3 V3i; + +/// Vec3 of int64_t +typedef Vec3 V3i64; + +/// Vec3 of float +typedef Vec3 V3f; + +/// Vec3 of double +typedef Vec3 V3d; + +/// Vec4 of half +typedef Vec4 V4h; + +/// Vec4 of short +typedef Vec4 V4s; + +/// Vec4 of integer +typedef Vec4 V4i; + +/// Vec4 of int64_t +typedef Vec4 V4i64; + +/// Vec4 of float +typedef Vec4 V4f; + +/// Vec4 of double +typedef Vec4 V4d; + +//---------------------------------------------------------------------------- +// Specializations for VecN, VecN +// +// Normalize and length don't make sense for integer vectors, so disable them. +//---------------------------------------------------------------------------- + +/// @cond Doxygen_Suppress + +// Vec2 +template <> +IMATH_HOSTDEVICE short Vec2::length () const IMATH_NOEXCEPT = delete; +template <> +IMATH_HOSTDEVICE const Vec2& + Vec2::normalize () IMATH_NOEXCEPT = delete; +template <> const Vec2& Vec2::normalizeExc () = delete; +template <> +IMATH_HOSTDEVICE const Vec2& + Vec2::normalizeNonNull () IMATH_NOEXCEPT = delete; +template <> +IMATH_HOSTDEVICE Vec2 + Vec2::normalized () const IMATH_NOEXCEPT = delete; +template <> Vec2 Vec2::normalizedExc () const = delete; +template <> +IMATH_HOSTDEVICE Vec2 +Vec2::normalizedNonNull () const IMATH_NOEXCEPT = delete; + +// Vec2 +template <> +IMATH_HOSTDEVICE int Vec2::length () const IMATH_NOEXCEPT = delete; +template <> +IMATH_HOSTDEVICE const Vec2& + Vec2::normalize () IMATH_NOEXCEPT = delete; +template <> const Vec2& Vec2::normalizeExc () = delete; +template <> +IMATH_HOSTDEVICE const Vec2& + Vec2::normalizeNonNull () IMATH_NOEXCEPT = delete; +template <> +IMATH_HOSTDEVICE Vec2 + Vec2::normalized () const IMATH_NOEXCEPT = delete; +template <> Vec2 Vec2::normalizedExc () const = delete; +template <> +IMATH_HOSTDEVICE Vec2 + Vec2::normalizedNonNull () const IMATH_NOEXCEPT = delete; + +// Vec2 +template <> +IMATH_HOSTDEVICE int64_t Vec2::length () const IMATH_NOEXCEPT = delete; +template <> +IMATH_HOSTDEVICE const Vec2& + Vec2::normalize () IMATH_NOEXCEPT = delete; +template <> const Vec2& Vec2::normalizeExc () = delete; +template <> +IMATH_HOSTDEVICE const Vec2& +Vec2::normalizeNonNull () IMATH_NOEXCEPT = delete; +template <> +IMATH_HOSTDEVICE Vec2 + Vec2::normalized () const IMATH_NOEXCEPT = delete; +template <> Vec2 Vec2::normalizedExc () const = delete; +template <> +IMATH_HOSTDEVICE Vec2 +Vec2::normalizedNonNull () const IMATH_NOEXCEPT = delete; + +// Vec3 +template <> +IMATH_HOSTDEVICE short Vec3::length () const IMATH_NOEXCEPT = delete; +template <> +IMATH_HOSTDEVICE const Vec3& + Vec3::normalize () IMATH_NOEXCEPT = delete; +template <> const Vec3& Vec3::normalizeExc () = delete; +template <> +IMATH_HOSTDEVICE const Vec3& + Vec3::normalizeNonNull () IMATH_NOEXCEPT = delete; +template <> +IMATH_HOSTDEVICE Vec3 + Vec3::normalized () const IMATH_NOEXCEPT = delete; +template <> Vec3 Vec3::normalizedExc () const = delete; +template <> +IMATH_HOSTDEVICE Vec3 +Vec3::normalizedNonNull () const IMATH_NOEXCEPT = delete; + +// Vec3 +template <> +IMATH_HOSTDEVICE int Vec3::length () const IMATH_NOEXCEPT = delete; +template <> +IMATH_HOSTDEVICE const Vec3& + Vec3::normalize () IMATH_NOEXCEPT = delete; +template <> const Vec3& Vec3::normalizeExc () = delete; +template <> +IMATH_HOSTDEVICE const Vec3& + Vec3::normalizeNonNull () IMATH_NOEXCEPT = delete; +template <> +IMATH_HOSTDEVICE Vec3 + Vec3::normalized () const IMATH_NOEXCEPT = delete; +template <> Vec3 Vec3::normalizedExc () const = delete; +template <> +IMATH_HOSTDEVICE Vec3 + Vec3::normalizedNonNull () const IMATH_NOEXCEPT = delete; + +// Vec3 +template <> +IMATH_HOSTDEVICE int64_t Vec3::length () const IMATH_NOEXCEPT = delete; +template <> +IMATH_HOSTDEVICE const Vec3& + Vec3::normalize () IMATH_NOEXCEPT = delete; +template <> const Vec3& Vec3::normalizeExc () = delete; +template <> +IMATH_HOSTDEVICE const Vec3& +Vec3::normalizeNonNull () IMATH_NOEXCEPT = delete; +template <> +IMATH_HOSTDEVICE Vec3 + Vec3::normalized () const IMATH_NOEXCEPT = delete; +template <> Vec3 Vec3::normalizedExc () const = delete; +template <> +IMATH_HOSTDEVICE Vec3 +Vec3::normalizedNonNull () const IMATH_NOEXCEPT = delete; + +// Vec4 +template <> +IMATH_HOSTDEVICE short Vec4::length () const IMATH_NOEXCEPT = delete; +template <> +IMATH_HOSTDEVICE const Vec4& + Vec4::normalize () IMATH_NOEXCEPT = delete; +template <> const Vec4& Vec4::normalizeExc () = delete; +template <> +IMATH_HOSTDEVICE const Vec4& + Vec4::normalizeNonNull () IMATH_NOEXCEPT = delete; +template <> +IMATH_HOSTDEVICE Vec4 + Vec4::normalized () const IMATH_NOEXCEPT = delete; +template <> Vec4 Vec4::normalizedExc () const = delete; +template <> +IMATH_HOSTDEVICE Vec4 +Vec4::normalizedNonNull () const IMATH_NOEXCEPT = delete; + +// Vec4 +template <> +IMATH_HOSTDEVICE int Vec4::length () const IMATH_NOEXCEPT = delete; +template <> +IMATH_HOSTDEVICE const Vec4& + Vec4::normalize () IMATH_NOEXCEPT = delete; +template <> const Vec4& Vec4::normalizeExc () = delete; +template <> +IMATH_HOSTDEVICE const Vec4& + Vec4::normalizeNonNull () IMATH_NOEXCEPT = delete; +template <> +IMATH_HOSTDEVICE Vec4 + Vec4::normalized () const IMATH_NOEXCEPT = delete; +template <> Vec4 Vec4::normalizedExc () const = delete; +template <> +IMATH_HOSTDEVICE Vec4 + Vec4::normalizedNonNull () const IMATH_NOEXCEPT = delete; + +// Vec4 +template <> +IMATH_HOSTDEVICE int64_t Vec4::length () const IMATH_NOEXCEPT = delete; +template <> +IMATH_HOSTDEVICE const Vec4& + Vec4::normalize () IMATH_NOEXCEPT = delete; +template <> const Vec4& Vec4::normalizeExc () = delete; +template <> +IMATH_HOSTDEVICE const Vec4& +Vec4::normalizeNonNull () IMATH_NOEXCEPT = delete; +template <> +IMATH_HOSTDEVICE Vec4 + Vec4::normalized () const IMATH_NOEXCEPT = delete; +template <> Vec4 Vec4::normalizedExc () const = delete; +template <> +IMATH_HOSTDEVICE Vec4 +Vec4::normalizedNonNull () const IMATH_NOEXCEPT = delete; + +/// @endcond Doxygen_Suppress + +//------------------------ +// Implementation of Vec2: +//------------------------ + +template +IMATH_CONSTEXPR14 IMATH_HOSTDEVICE inline T& +Vec2::operator[] (int i) IMATH_NOEXCEPT +{ + return reinterpret_cast (this)[i]; +} + +template +constexpr IMATH_HOSTDEVICE inline const T& +Vec2::operator[] (int i) const IMATH_NOEXCEPT +{ +#ifdef __cpp_if_consteval + if consteval + { + return (i == 0) ? x : y; + } + else + { + return reinterpret_cast (this)[i]; + } +#else + return reinterpret_cast (this)[i]; +#endif +} + +template IMATH_HOSTDEVICE inline Vec2::Vec2 () IMATH_NOEXCEPT +{ + // empty, and not constexpr because data is uninitialized. +} + +template +IMATH_HOSTDEVICE constexpr inline Vec2::Vec2 (T a) IMATH_NOEXCEPT : x (a), + y (a) +{} + +template +IMATH_HOSTDEVICE constexpr inline Vec2::Vec2 (T a, T b) IMATH_NOEXCEPT + : x (a), + y (b) +{} + +template +IMATH_HOSTDEVICE constexpr inline Vec2::Vec2 (const Vec2& v) IMATH_NOEXCEPT + : x (v.x), + y (v.y) +{} + +template +template +IMATH_HOSTDEVICE constexpr inline Vec2::Vec2 (const Vec2& v) + IMATH_NOEXCEPT : x (T (v.x)), + y (T (v.y)) +{} + +template +IMATH_CONSTEXPR14 IMATH_HOSTDEVICE inline const Vec2& +Vec2::operator= (const Vec2& v) IMATH_NOEXCEPT +{ + x = v.x; + y = v.y; + return *this; +} + +template +template +IMATH_HOSTDEVICE inline void +Vec2::setValue (S a, S b) IMATH_NOEXCEPT +{ + x = T (a); + y = T (b); +} + +template +template +IMATH_HOSTDEVICE inline void +Vec2::setValue (const Vec2& v) IMATH_NOEXCEPT +{ + x = T (v.x); + y = T (v.y); +} + +template +template +IMATH_HOSTDEVICE inline void +Vec2::getValue (S& a, S& b) const IMATH_NOEXCEPT +{ + a = S (x); + b = S (y); +} + +template +template +IMATH_HOSTDEVICE inline void +Vec2::getValue (Vec2& v) const IMATH_NOEXCEPT +{ + v.x = S (x); + v.y = S (y); +} + +template +IMATH_HOSTDEVICE inline T* +Vec2::getValue () IMATH_NOEXCEPT +{ + return reinterpret_cast (this); +} + +template +IMATH_HOSTDEVICE inline const T* +Vec2::getValue () const IMATH_NOEXCEPT +{ + return reinterpret_cast (this); +} + +template +template +IMATH_HOSTDEVICE constexpr inline bool +Vec2::operator== (const Vec2& v) const IMATH_NOEXCEPT +{ + return x == v.x && y == v.y; +} + +template +template +IMATH_HOSTDEVICE constexpr inline bool +Vec2::operator!= (const Vec2& v) const IMATH_NOEXCEPT +{ + return x != v.x || y != v.y; +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline bool +Vec2::equalWithAbsError (const Vec2& v, T e) const IMATH_NOEXCEPT +{ + if (!IMATH_INTERNAL_NAMESPACE::equalWithAbsError (x, v.x, e)) + return false; + if (!IMATH_INTERNAL_NAMESPACE::equalWithAbsError (y, v.y, e)) + return false; + + return true; +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline bool +Vec2::equalWithRelError (const Vec2& v, T e) const IMATH_NOEXCEPT +{ + if (!IMATH_INTERNAL_NAMESPACE::equalWithRelError (x, v.x, e)) + return false; + if (!IMATH_INTERNAL_NAMESPACE::equalWithRelError (y, v.y, e)) + return false; + + return true; +} + +template +IMATH_HOSTDEVICE constexpr inline T +Vec2::dot (const Vec2& v) const IMATH_NOEXCEPT +{ + return x * v.x + y * v.y; +} + +template +IMATH_HOSTDEVICE constexpr inline T +Vec2::operator^ (const Vec2& v) const IMATH_NOEXCEPT +{ + return dot (v); +} + +template +IMATH_HOSTDEVICE constexpr inline T +Vec2::cross (const Vec2& v) const IMATH_NOEXCEPT +{ + return x * v.y - y * v.x; +} + +template +IMATH_HOSTDEVICE constexpr inline T +Vec2::operator% (const Vec2& v) const IMATH_NOEXCEPT +{ + return x * v.y - y * v.x; +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline const Vec2& +Vec2::operator+= (const Vec2& v) IMATH_NOEXCEPT +{ + x += v.x; + y += v.y; + return *this; +} + +template +IMATH_HOSTDEVICE constexpr inline Vec2 +Vec2::operator+ (const Vec2& v) const IMATH_NOEXCEPT +{ + return Vec2 (x + v.x, y + v.y); +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline const Vec2& +Vec2::operator-= (const Vec2& v) IMATH_NOEXCEPT +{ + x -= v.x; + y -= v.y; + return *this; +} + +template +IMATH_HOSTDEVICE constexpr inline Vec2 +Vec2::operator- (const Vec2& v) const IMATH_NOEXCEPT +{ + return Vec2 (x - v.x, y - v.y); +} + +template +IMATH_HOSTDEVICE constexpr inline Vec2 +Vec2::operator- () const IMATH_NOEXCEPT +{ + return Vec2 (-x, -y); +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline const Vec2& + Vec2::negate () IMATH_NOEXCEPT +{ + x = -x; + y = -y; + return *this; +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline const Vec2& +Vec2::operator*= (const Vec2& v) IMATH_NOEXCEPT +{ + x *= v.x; + y *= v.y; + return *this; +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline const Vec2& +Vec2::operator*= (T a) IMATH_NOEXCEPT +{ + x *= a; + y *= a; + return *this; +} + +template +IMATH_HOSTDEVICE constexpr inline Vec2 +Vec2::operator* (const Vec2& v) const IMATH_NOEXCEPT +{ + return Vec2 (x * v.x, y * v.y); +} + +template +IMATH_HOSTDEVICE constexpr inline Vec2 +Vec2::operator* (T a) const IMATH_NOEXCEPT +{ + return Vec2 (x * a, y * a); +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline const Vec2& +Vec2::operator/= (const Vec2& v) IMATH_NOEXCEPT +{ + x /= v.x; + y /= v.y; + return *this; +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline const Vec2& +Vec2::operator/= (T a) IMATH_NOEXCEPT +{ + x /= a; + y /= a; + return *this; +} + +template +IMATH_HOSTDEVICE constexpr inline Vec2 +Vec2::operator/ (const Vec2& v) const IMATH_NOEXCEPT +{ + return Vec2 (x / v.x, y / v.y); +} + +template +IMATH_HOSTDEVICE constexpr inline Vec2 +Vec2::operator/ (T a) const IMATH_NOEXCEPT +{ + return Vec2 (x / a, y / a); +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline T +Vec2::lengthTiny () const IMATH_NOEXCEPT +{ + T absX = std::abs (x); + T absY = std::abs (y); + + T max = absX; + + if (max < absY) max = absY; + + if (IMATH_UNLIKELY (max == T (0))) return T (0); + + // + // Do not replace the divisions by max with multiplications by 1/max. + // Computing 1/max can overflow but the divisions below will always + // produce results less than or equal to 1. + // + + absX /= max; + absY /= max; + + return max * std::sqrt (absX * absX + absY * absY); +} + +template +IMATH_HOSTDEVICE inline T +Vec2::length () const IMATH_NOEXCEPT +{ + T length2 = dot (*this); + + if (IMATH_UNLIKELY (length2 < T (2) * std::numeric_limits::min ())) + return lengthTiny (); + + return std::sqrt (length2); +} + +template +IMATH_HOSTDEVICE constexpr inline T +Vec2::length2 () const IMATH_NOEXCEPT +{ + return dot (*this); +} + +template +IMATH_HOSTDEVICE inline const Vec2& +Vec2::normalize () IMATH_NOEXCEPT +{ + T l = length (); + + if (IMATH_LIKELY (l != T (0))) + { + // + // Do not replace the divisions by l with multiplications by 1/l. + // Computing 1/l can overflow but the divisions below will always + // produce results less than or equal to 1. + // + + x /= l; + y /= l; + } + + return *this; +} + +template +inline const Vec2& +Vec2::normalizeExc () +{ + T l = length (); + + if (IMATH_UNLIKELY (l == T (0))) + throw std::domain_error ("Cannot normalize null vector."); + + x /= l; + y /= l; + return *this; +} + +template +IMATH_HOSTDEVICE inline const Vec2& +Vec2::normalizeNonNull () IMATH_NOEXCEPT +{ + T l = length (); + x /= l; + y /= l; + return *this; +} + +template +IMATH_HOSTDEVICE inline Vec2 +Vec2::normalized () const IMATH_NOEXCEPT +{ + T l = length (); + + if (IMATH_UNLIKELY (l == T (0))) return Vec2 (T (0)); + + return Vec2 (x / l, y / l); +} + +template +inline Vec2 +Vec2::normalizedExc () const +{ + T l = length (); + + if (IMATH_UNLIKELY (l == T (0))) + throw std::domain_error ("Cannot normalize null vector."); + + return Vec2 (x / l, y / l); +} + +template +IMATH_HOSTDEVICE inline Vec2 +Vec2::normalizedNonNull () const IMATH_NOEXCEPT +{ + T l = length (); + return Vec2 (x / l, y / l); +} + +//----------------------- +// Implementation of Vec3 +//----------------------- + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline T& +Vec3::operator[] (int i) IMATH_NOEXCEPT +{ + return reinterpret_cast (this)[i]; +} + +template +constexpr IMATH_HOSTDEVICE inline const T& +Vec3::operator[] (int i) const IMATH_NOEXCEPT +{ +#ifdef __cpp_if_consteval + if consteval + { + return (i == 0) ? x : ((i == 1) ? y : z); + } + else + { + return reinterpret_cast (this)[i]; + } +#else + return reinterpret_cast (this)[i]; +#endif +} + +template IMATH_HOSTDEVICE inline Vec3::Vec3 () IMATH_NOEXCEPT +{ + // empty, and not constexpr because data is uninitialized. +} + +template +IMATH_HOSTDEVICE constexpr inline Vec3::Vec3 (T a) IMATH_NOEXCEPT : x (a), + y (a), + z (a) +{} + +template +IMATH_HOSTDEVICE constexpr inline Vec3::Vec3 (T a, T b, T c) IMATH_NOEXCEPT + : x (a), + y (b), + z (c) +{} + +template +IMATH_HOSTDEVICE constexpr inline Vec3::Vec3 (const Vec3& v) IMATH_NOEXCEPT + : x (v.x), + y (v.y), + z (v.z) +{} + +template +template +IMATH_HOSTDEVICE constexpr inline Vec3::Vec3 (const Vec3& v) + IMATH_NOEXCEPT : x (T (v.x)), + y (T (v.y)), + z (T (v.z)) +{} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline const Vec3& +Vec3::operator= (const Vec3& v) IMATH_NOEXCEPT +{ + x = v.x; + y = v.y; + z = v.z; + return *this; +} + +template +template +IMATH_HOSTDEVICE constexpr inline Vec3::Vec3 (const Vec4& v) + IMATH_NOEXCEPT : x (T (v.x / v.w)), + y (T (v.y / v.w)), + z (T (v.z / v.w)) +{} + +template +template +IMATH_HOSTDEVICE + IMATH_CONSTEXPR14 inline Vec3::Vec3 (const Vec4& v, InfException) +{ + T vx = T (v.x); + T vy = T (v.y); + T vz = T (v.z); + T vw = T (v.w); + + T absW = (vw >= T (0)) ? vw : -vw; + + if (absW < 1) + { + T m = baseTypeMax () * absW; + + if (vx <= -m || vx >= m || vy <= -m || vy >= m || vz <= -m || vz >= m) + throw std::domain_error ("Cannot normalize point at infinity."); + } + + x = vx / vw; + y = vy / vw; + z = vz / vw; +} + +template +template +IMATH_HOSTDEVICE inline void +Vec3::setValue (S a, S b, S c) IMATH_NOEXCEPT +{ + x = T (a); + y = T (b); + z = T (c); +} + +template +template +IMATH_HOSTDEVICE inline void +Vec3::setValue (const Vec3& v) IMATH_NOEXCEPT +{ + x = T (v.x); + y = T (v.y); + z = T (v.z); +} + +template +template +IMATH_HOSTDEVICE inline void +Vec3::getValue (S& a, S& b, S& c) const IMATH_NOEXCEPT +{ + a = S (x); + b = S (y); + c = S (z); +} + +template +template +IMATH_HOSTDEVICE inline void +Vec3::getValue (Vec3& v) const IMATH_NOEXCEPT +{ + v.x = S (x); + v.y = S (y); + v.z = S (z); +} + +template +IMATH_HOSTDEVICE inline T* +Vec3::getValue () IMATH_NOEXCEPT +{ + return reinterpret_cast (this); +} + +template +IMATH_HOSTDEVICE inline const T* +Vec3::getValue () const IMATH_NOEXCEPT +{ + return reinterpret_cast (this); +} + +template +template +IMATH_HOSTDEVICE constexpr inline bool +Vec3::operator== (const Vec3& v) const IMATH_NOEXCEPT +{ + return x == v.x && y == v.y && z == v.z; +} + +template +template +IMATH_HOSTDEVICE constexpr inline bool +Vec3::operator!= (const Vec3& v) const IMATH_NOEXCEPT +{ + return x != v.x || y != v.y || z != v.z; +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline bool +Vec3::equalWithAbsError (const Vec3& v, T e) const IMATH_NOEXCEPT +{ + for (int i = 0; i < 3; i++) + if (!IMATH_INTERNAL_NAMESPACE::equalWithAbsError ((*this)[i], v[i], e)) + return false; + + return true; +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline bool +Vec3::equalWithRelError (const Vec3& v, T e) const IMATH_NOEXCEPT +{ + for (int i = 0; i < 3; i++) + if (!IMATH_INTERNAL_NAMESPACE::equalWithRelError ((*this)[i], v[i], e)) + return false; + + return true; +} + +template +IMATH_HOSTDEVICE constexpr inline T +Vec3::dot (const Vec3& v) const IMATH_NOEXCEPT +{ + return x * v.x + y * v.y + z * v.z; +} + +template +IMATH_HOSTDEVICE constexpr inline T +Vec3::operator^ (const Vec3& v) const IMATH_NOEXCEPT +{ + return dot (v); +} + +template +IMATH_HOSTDEVICE constexpr inline Vec3 +Vec3::cross (const Vec3& v) const IMATH_NOEXCEPT +{ + return Vec3 (y * v.z - z * v.y, z * v.x - x * v.z, x * v.y - y * v.x); +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline const Vec3& +Vec3::operator%= (const Vec3& v) IMATH_NOEXCEPT +{ + T a = y * v.z - z * v.y; + T b = z * v.x - x * v.z; + T c = x * v.y - y * v.x; + x = a; + y = b; + z = c; + return *this; +} + +template +IMATH_HOSTDEVICE constexpr inline Vec3 +Vec3::operator% (const Vec3& v) const IMATH_NOEXCEPT +{ + return Vec3 (y * v.z - z * v.y, z * v.x - x * v.z, x * v.y - y * v.x); +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline const Vec3& +Vec3::operator+= (const Vec3& v) IMATH_NOEXCEPT +{ + x += v.x; + y += v.y; + z += v.z; + return *this; +} + +template +IMATH_HOSTDEVICE constexpr inline Vec3 +Vec3::operator+ (const Vec3& v) const IMATH_NOEXCEPT +{ + return Vec3 (x + v.x, y + v.y, z + v.z); +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline const Vec3& +Vec3::operator-= (const Vec3& v) IMATH_NOEXCEPT +{ + x -= v.x; + y -= v.y; + z -= v.z; + return *this; +} + +template +IMATH_HOSTDEVICE constexpr inline Vec3 +Vec3::operator- (const Vec3& v) const IMATH_NOEXCEPT +{ + return Vec3 (x - v.x, y - v.y, z - v.z); +} + +template +IMATH_HOSTDEVICE constexpr inline Vec3 +Vec3::operator- () const IMATH_NOEXCEPT +{ + return Vec3 (-x, -y, -z); +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline const Vec3& + Vec3::negate () IMATH_NOEXCEPT +{ + x = -x; + y = -y; + z = -z; + return *this; +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline const Vec3& +Vec3::operator*= (const Vec3& v) IMATH_NOEXCEPT +{ + x *= v.x; + y *= v.y; + z *= v.z; + return *this; +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline const Vec3& +Vec3::operator*= (T a) IMATH_NOEXCEPT +{ + x *= a; + y *= a; + z *= a; + return *this; +} + +template +IMATH_HOSTDEVICE constexpr inline Vec3 +Vec3::operator* (const Vec3& v) const IMATH_NOEXCEPT +{ + return Vec3 (x * v.x, y * v.y, z * v.z); +} + +template +IMATH_HOSTDEVICE constexpr inline Vec3 +Vec3::operator* (T a) const IMATH_NOEXCEPT +{ + return Vec3 (x * a, y * a, z * a); +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline const Vec3& +Vec3::operator/= (const Vec3& v) IMATH_NOEXCEPT +{ + x /= v.x; + y /= v.y; + z /= v.z; + return *this; +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline const Vec3& +Vec3::operator/= (T a) IMATH_NOEXCEPT +{ + x /= a; + y /= a; + z /= a; + return *this; +} + +template +IMATH_HOSTDEVICE constexpr inline Vec3 +Vec3::operator/ (const Vec3& v) const IMATH_NOEXCEPT +{ + return Vec3 (x / v.x, y / v.y, z / v.z); +} + +template +IMATH_HOSTDEVICE constexpr inline Vec3 +Vec3::operator/ (T a) const IMATH_NOEXCEPT +{ + return Vec3 (x / a, y / a, z / a); +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline T +Vec3::lengthTiny () const IMATH_NOEXCEPT +{ + T absX = (x >= T (0)) ? x : -x; + T absY = (y >= T (0)) ? y : -y; + T absZ = (z >= T (0)) ? z : -z; + + T max = absX; + + if (max < absY) max = absY; + + if (max < absZ) max = absZ; + + if (IMATH_UNLIKELY (max == T (0))) return T (0); + + // + // Do not replace the divisions by max with multiplications by 1/max. + // Computing 1/max can overflow but the divisions below will always + // produce results less than or equal to 1. + // + + absX /= max; + absY /= max; + absZ /= max; + + return max * std::sqrt (absX * absX + absY * absY + absZ * absZ); +} + +template +IMATH_HOSTDEVICE inline T +Vec3::length () const IMATH_NOEXCEPT +{ + T length2 = dot (*this); + + if (IMATH_UNLIKELY (length2 < T (2) * std::numeric_limits::min ())) + return lengthTiny (); + + return std::sqrt (length2); +} + +template +IMATH_HOSTDEVICE constexpr inline T +Vec3::length2 () const IMATH_NOEXCEPT +{ + return dot (*this); +} + +template +IMATH_HOSTDEVICE inline const Vec3& +Vec3::normalize () IMATH_NOEXCEPT +{ + T l = length (); + + if (IMATH_LIKELY (l != T (0))) + { + // + // Do not replace the divisions by l with multiplications by 1/l. + // Computing 1/l can overflow but the divisions below will always + // produce results less than or equal to 1. + // + + x /= l; + y /= l; + z /= l; + } + + return *this; +} + +template +inline const Vec3& +Vec3::normalizeExc () +{ + T l = length (); + + if (IMATH_UNLIKELY (l == T (0))) + throw std::domain_error ("Cannot normalize null vector."); + + x /= l; + y /= l; + z /= l; + return *this; +} + +template +IMATH_HOSTDEVICE inline const Vec3& +Vec3::normalizeNonNull () IMATH_NOEXCEPT +{ + T l = length (); + x /= l; + y /= l; + z /= l; + return *this; +} + +template +IMATH_HOSTDEVICE inline Vec3 +Vec3::normalized () const IMATH_NOEXCEPT +{ + T l = length (); + + if (IMATH_UNLIKELY ((l == T (0)))) return Vec3 (T (0)); + + return Vec3 (x / l, y / l, z / l); +} + +template +inline Vec3 +Vec3::normalizedExc () const +{ + T l = length (); + + if (IMATH_UNLIKELY (l == T (0))) + throw std::domain_error ("Cannot normalize null vector."); + + return Vec3 (x / l, y / l, z / l); +} + +template +IMATH_HOSTDEVICE inline Vec3 +Vec3::normalizedNonNull () const IMATH_NOEXCEPT +{ + T l = length (); + return Vec3 (x / l, y / l, z / l); +} + +//----------------------- +// Implementation of Vec4 +//----------------------- + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline T& +Vec4::operator[] (int i) IMATH_NOEXCEPT +{ + return reinterpret_cast (this)[i]; +} + +template +IMATH_HOSTDEVICE constexpr inline const T& +Vec4::operator[] (int i) const IMATH_NOEXCEPT +{ +#ifdef __cpp_if_consteval + if consteval + { + return (i == 0) ? x : ((i == 1) ? y : ((i == 2) ? z : w)); + } + else + { + return reinterpret_cast (this)[i]; + } +#else + return reinterpret_cast (this)[i]; +#endif +} + +template IMATH_HOSTDEVICE inline Vec4::Vec4 () IMATH_NOEXCEPT +{ + // empty, and not constexpr because data is uninitialized. +} + +template +IMATH_HOSTDEVICE constexpr inline Vec4::Vec4 (T a) IMATH_NOEXCEPT : x (a), + y (a), + z (a), + w (a) +{} + +template +IMATH_HOSTDEVICE constexpr inline Vec4::Vec4 (T a, T b, T c, T d) + IMATH_NOEXCEPT : x (a), + y (b), + z (c), + w (d) +{} + +template +IMATH_HOSTDEVICE constexpr inline Vec4::Vec4 (const Vec4& v) IMATH_NOEXCEPT + : x (v.x), + y (v.y), + z (v.z), + w (v.w) +{} + +template +template +IMATH_HOSTDEVICE constexpr inline Vec4::Vec4 (const Vec4& v) + IMATH_NOEXCEPT : x (T (v.x)), + y (T (v.y)), + z (T (v.z)), + w (T (v.w)) +{} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline const Vec4& +Vec4::operator= (const Vec4& v) IMATH_NOEXCEPT +{ + x = v.x; + y = v.y; + z = v.z; + w = v.w; + return *this; +} + +template +template +IMATH_HOSTDEVICE constexpr inline Vec4::Vec4 (const Vec3& v) + IMATH_NOEXCEPT : x (T (v.x)), + y (T (v.y)), + z (T (v.z)), + w (T (1)) +{} + +template +template +IMATH_HOSTDEVICE inline void +Vec4::setValue (S a, S b, S c, S d) IMATH_NOEXCEPT +{ + x = T (a); + y = T (b); + z = T (c); + w = T (d); +} + +template +template +IMATH_HOSTDEVICE inline void +Vec4::setValue (const Vec4& v) IMATH_NOEXCEPT +{ + x = T (v.x); + y = T (v.y); + z = T (v.z); + w = T (v.w); +} + +template +template +IMATH_HOSTDEVICE inline void +Vec4::getValue (S& a, S& b, S& c, S& d) const IMATH_NOEXCEPT +{ + a = S (x); + b = S (y); + c = S (z); + d = S (w); +} + +template +template +IMATH_HOSTDEVICE inline void +Vec4::getValue (Vec4& v) const IMATH_NOEXCEPT +{ + v.x = S (x); + v.y = S (y); + v.z = S (z); + v.w = S (w); +} + +template +IMATH_HOSTDEVICE inline T* +Vec4::getValue () IMATH_NOEXCEPT +{ + return reinterpret_cast (this); +} + +template +IMATH_HOSTDEVICE inline const T* +Vec4::getValue () const IMATH_NOEXCEPT +{ + return reinterpret_cast (this); +} + +template +template +IMATH_HOSTDEVICE constexpr inline bool +Vec4::operator== (const Vec4& v) const IMATH_NOEXCEPT +{ + return x == v.x && y == v.y && z == v.z && w == v.w; +} + +template +template +IMATH_HOSTDEVICE constexpr inline bool +Vec4::operator!= (const Vec4& v) const IMATH_NOEXCEPT +{ + return x != v.x || y != v.y || z != v.z || w != v.w; +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline bool +Vec4::equalWithAbsError (const Vec4& v, T e) const IMATH_NOEXCEPT +{ + for (int i = 0; i < 4; i++) + if (!IMATH_INTERNAL_NAMESPACE::equalWithAbsError ((*this)[i], v[i], e)) + return false; + + return true; +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline bool +Vec4::equalWithRelError (const Vec4& v, T e) const IMATH_NOEXCEPT +{ + for (int i = 0; i < 4; i++) + if (!IMATH_INTERNAL_NAMESPACE::equalWithRelError ((*this)[i], v[i], e)) + return false; + + return true; +} + +template +IMATH_HOSTDEVICE constexpr inline T +Vec4::dot (const Vec4& v) const IMATH_NOEXCEPT +{ + return x * v.x + y * v.y + z * v.z + w * v.w; +} + +template +IMATH_HOSTDEVICE constexpr inline T +Vec4::operator^ (const Vec4& v) const IMATH_NOEXCEPT +{ + return dot (v); +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline const Vec4& +Vec4::operator+= (const Vec4& v) IMATH_NOEXCEPT +{ + x += v.x; + y += v.y; + z += v.z; + w += v.w; + return *this; +} + +template +IMATH_HOSTDEVICE constexpr inline Vec4 +Vec4::operator+ (const Vec4& v) const IMATH_NOEXCEPT +{ + return Vec4 (x + v.x, y + v.y, z + v.z, w + v.w); +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline const Vec4& +Vec4::operator-= (const Vec4& v) IMATH_NOEXCEPT +{ + x -= v.x; + y -= v.y; + z -= v.z; + w -= v.w; + return *this; +} + +template +IMATH_HOSTDEVICE constexpr inline Vec4 +Vec4::operator- (const Vec4& v) const IMATH_NOEXCEPT +{ + return Vec4 (x - v.x, y - v.y, z - v.z, w - v.w); +} + +template +IMATH_HOSTDEVICE constexpr inline Vec4 +Vec4::operator- () const IMATH_NOEXCEPT +{ + return Vec4 (-x, -y, -z, -w); +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline const Vec4& + Vec4::negate () IMATH_NOEXCEPT +{ + x = -x; + y = -y; + z = -z; + w = -w; + return *this; +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline const Vec4& +Vec4::operator*= (const Vec4& v) IMATH_NOEXCEPT +{ + x *= v.x; + y *= v.y; + z *= v.z; + w *= v.w; + return *this; +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline const Vec4& +Vec4::operator*= (T a) IMATH_NOEXCEPT +{ + x *= a; + y *= a; + z *= a; + w *= a; + return *this; +} + +template +IMATH_HOSTDEVICE constexpr inline Vec4 +Vec4::operator* (const Vec4& v) const IMATH_NOEXCEPT +{ + return Vec4 (x * v.x, y * v.y, z * v.z, w * v.w); +} + +template +IMATH_HOSTDEVICE constexpr inline Vec4 +Vec4::operator* (T a) const IMATH_NOEXCEPT +{ + return Vec4 (x * a, y * a, z * a, w * a); +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline const Vec4& +Vec4::operator/= (const Vec4& v) IMATH_NOEXCEPT +{ + x /= v.x; + y /= v.y; + z /= v.z; + w /= v.w; + return *this; +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline const Vec4& +Vec4::operator/= (T a) IMATH_NOEXCEPT +{ + x /= a; + y /= a; + z /= a; + w /= a; + return *this; +} + +template +IMATH_HOSTDEVICE constexpr inline Vec4 +Vec4::operator/ (const Vec4& v) const IMATH_NOEXCEPT +{ + return Vec4 (x / v.x, y / v.y, z / v.z, w / v.w); +} + +template +IMATH_HOSTDEVICE constexpr inline Vec4 +Vec4::operator/ (T a) const IMATH_NOEXCEPT +{ + return Vec4 (x / a, y / a, z / a, w / a); +} + +template +IMATH_HOSTDEVICE IMATH_CONSTEXPR14 inline T +Vec4::lengthTiny () const IMATH_NOEXCEPT +{ + T absX = (x >= T (0)) ? x : -x; + T absY = (y >= T (0)) ? y : -y; + T absZ = (z >= T (0)) ? z : -z; + T absW = (w >= T (0)) ? w : -w; + + T max = absX; + + if (max < absY) max = absY; + + if (max < absZ) max = absZ; + + if (max < absW) max = absW; + + if (IMATH_UNLIKELY (max == T (0))) return T (0); + + // + // Do not replace the divisions by max with multiplications by 1/max. + // Computing 1/max can overflow but the divisions below will always + // produce results less than or equal to 1. + // + + absX /= max; + absY /= max; + absZ /= max; + absW /= max; + + return max * + std::sqrt (absX * absX + absY * absY + absZ * absZ + absW * absW); +} + +template +IMATH_HOSTDEVICE inline T +Vec4::length () const IMATH_NOEXCEPT +{ + T length2 = dot (*this); + + if (IMATH_UNLIKELY (length2 < T (2) * std::numeric_limits::min ())) + return lengthTiny (); + + return std::sqrt (length2); +} + +template +IMATH_HOSTDEVICE constexpr inline T +Vec4::length2 () const IMATH_NOEXCEPT +{ + return dot (*this); +} + +template +IMATH_HOSTDEVICE const inline Vec4& +Vec4::normalize () IMATH_NOEXCEPT +{ + T l = length (); + + if (IMATH_LIKELY (l != T (0))) + { + // + // Do not replace the divisions by l with multiplications by 1/l. + // Computing 1/l can overflow but the divisions below will always + // produce results less than or equal to 1. + // + + x /= l; + y /= l; + z /= l; + w /= l; + } + + return *this; +} + +template +const inline Vec4& +Vec4::normalizeExc () +{ + T l = length (); + + if (IMATH_UNLIKELY (l == T (0))) + throw std::domain_error ("Cannot normalize null vector."); + + x /= l; + y /= l; + z /= l; + w /= l; + return *this; +} + +template +IMATH_HOSTDEVICE inline const Vec4& +Vec4::normalizeNonNull () IMATH_NOEXCEPT +{ + T l = length (); + x /= l; + y /= l; + z /= l; + w /= l; + return *this; +} + +template +IMATH_HOSTDEVICE inline Vec4 +Vec4::normalized () const IMATH_NOEXCEPT +{ + T l = length (); + + if (IMATH_UNLIKELY (l == T (0))) return Vec4 (T (0)); + + return Vec4 (x / l, y / l, z / l, w / l); +} + +template +inline Vec4 +Vec4::normalizedExc () const +{ + T l = length (); + + if (IMATH_UNLIKELY (l == T (0))) + throw std::domain_error ("Cannot normalize null vector."); + + return Vec4 (x / l, y / l, z / l, w / l); +} + +template +IMATH_HOSTDEVICE inline Vec4 +Vec4::normalizedNonNull () const IMATH_NOEXCEPT +{ + T l = length (); + return Vec4 (x / l, y / l, z / l, w / l); +} + +//----------------------------- +// Stream output implementation +//----------------------------- + +template +std::ostream& +operator<< (std::ostream& s, const Vec2& v) +{ + return s << '(' << v.x << ' ' << v.y << ')'; +} + +template +std::ostream& +operator<< (std::ostream& s, const Vec3& v) +{ + return s << '(' << v.x << ' ' << v.y << ' ' << v.z << ')'; +} + +template +std::ostream& +operator<< (std::ostream& s, const Vec4& v) +{ + return s << '(' << v.x << ' ' << v.y << ' ' << v.z << ' ' << v.w << ')'; +} + +//----------------------------------------- +// Implementation of reverse multiplication +//----------------------------------------- + +template +IMATH_HOSTDEVICE constexpr inline Vec2 +operator* (T a, const Vec2& v) IMATH_NOEXCEPT +{ + return Vec2 (a * v.x, a * v.y); +} + +template +IMATH_HOSTDEVICE constexpr inline Vec3 +operator* (T a, const Vec3& v) IMATH_NOEXCEPT +{ + return Vec3 (a * v.x, a * v.y, a * v.z); +} + +template +IMATH_HOSTDEVICE constexpr inline Vec4 +operator* (T a, const Vec4& v) IMATH_NOEXCEPT +{ + return Vec4 (a * v.x, a * v.y, a * v.z, a * v.w); +} + +#if (defined _WIN32 || defined _WIN64) && defined _MSC_VER +# pragma warning(pop) +#endif + +IMATH_INTERNAL_NAMESPACE_HEADER_EXIT + +#endif // INCLUDED_IMATHVEC_H diff --git a/third_party/tlRender-install-Release/include/Imath/ImathVecAlgo.h b/third_party/tlRender-install-Release/include/Imath/ImathVecAlgo.h new file mode 100644 index 00000000..dddde51e --- /dev/null +++ b/third_party/tlRender-install-Release/include/Imath/ImathVecAlgo.h @@ -0,0 +1,100 @@ +// +// SPDX-License-Identifier: BSD-3-Clause +// Copyright Contributors to the OpenEXR Project. +// + +// +// Algorithms applied to or in conjunction with points (Imath::Vec2 +// and Imath::Vec3). +// +// The assumption made is that these functions are called much +// less often than the basic point functions or these functions +// require more support classes. +// + +#ifndef INCLUDED_IMATHVECALGO_H +#define INCLUDED_IMATHVECALGO_H + +#include "ImathNamespace.h" +#include "ImathVec.h" + +IMATH_INTERNAL_NAMESPACE_HEADER_ENTER + +/// @cond Doxygen_Suppress +// +// Note: doxygen doesn't understand these templates, so omit these +// functions from the docs. +// + +/// Find the projection of vector `t` onto vector `s` (`Vec2`, `Vec3`, `Vec4`) +/// +/// Only defined for floating-point types, e.g. `V2f`, `V3d`, etc. +template < + class Vec, + IMATH_ENABLE_IF (!std::is_integral::value)> +IMATH_CONSTEXPR14 inline Vec +project (const Vec& s, const Vec& t) IMATH_NOEXCEPT +{ + Vec sNormalized = s.normalized (); + return sNormalized * (sNormalized ^ t); +} + +/// Find a vector that is perpendicular to `s` and +/// in the same plane as `s` and `t` (`Vec2`, `Vec3`, `Vec4`) +/// +/// Only defined for floating-point types, e.g. `V2f`, `V3d`, etc. +template < + class Vec, + IMATH_ENABLE_IF (!std::is_integral::value)> +constexpr inline Vec +orthogonal (const Vec& s, const Vec& t) IMATH_NOEXCEPT +{ + return t - project (s, t); +} + +/// Find the direction of a ray `s` after reflection +/// off a plane with normal `t` (`Vec2`, `Vec3`, `Vec4`) +/// +/// Only defined for floating-point types, e.g. `V2f`, `V3d`, etc. +template < + class Vec, + IMATH_ENABLE_IF (!std::is_integral::value)> +constexpr inline Vec +reflect (const Vec& s, const Vec& t) IMATH_NOEXCEPT +{ + return s - typename Vec::BaseType (2) * (s - project (t, s)); +} + +/// @endcond + +/// Find the vertex of triangle `(v0, v1, v2)` that is closest to point `p` +/// (`Vec2`, `Vec3`, `Vec4`) +template +IMATH_CONSTEXPR14 Vec +closestVertex (const Vec& v0, const Vec& v1, const Vec& v2, const Vec& p) + IMATH_NOEXCEPT +{ + Vec nearest = v0; + typename Vec::BaseType neardot = (v0 - p).length2 (); + typename Vec::BaseType tmp = (v1 - p).length2 (); + + if (tmp < neardot) + { + neardot = tmp; + nearest = v1; + } + + tmp = (v2 - p).length2 (); + + if (tmp < neardot) + { + neardot = tmp; + nearest = v2; + } + + return nearest; +} + +IMATH_INTERNAL_NAMESPACE_HEADER_EXIT + +#endif // INCLUDED_IMATHVECALGO_H diff --git a/third_party/tlRender-install-Release/include/Imath/half.h b/third_party/tlRender-install-Release/include/Imath/half.h new file mode 100644 index 00000000..cf880686 --- /dev/null +++ b/third_party/tlRender-install-Release/include/Imath/half.h @@ -0,0 +1,998 @@ +// +// SPDX-License-Identifier: BSD-3-Clause +// Copyright Contributors to the OpenEXR Project. +// + +// +// Primary original authors: +// Florian Kainz +// Rod Bogart +// + +#ifndef IMATH_HALF_H_ +#define IMATH_HALF_H_ + +#include "ImathExport.h" +#include "ImathNamespace.h" +#include "ImathPlatform.h" + +/// @file half.h +/// The half type is a 16-bit floating number, compatible with the +/// IEEE 754-2008 binary16 type. +/// +/// **Representation of a 32-bit float:** +/// +/// We assume that a float, f, is an IEEE 754 single-precision +/// floating point number, whose bits are arranged as follows: +/// +/// 31 (msb) +/// | +/// | 30 23 +/// | | | +/// | | | 22 0 (lsb) +/// | | | | | +/// X XXXXXXXX XXXXXXXXXXXXXXXXXXXXXXX +/// +/// s e m +/// +/// S is the sign-bit, e is the exponent and m is the significand. +/// +/// If e is between 1 and 254, f is a normalized number: +/// +/// s e-127 +/// f = (-1) * 2 * 1.m +/// +/// If e is 0, and m is not zero, f is a denormalized number: +/// +/// s -126 +/// f = (-1) * 2 * 0.m +/// +/// If e and m are both zero, f is zero: +/// +/// f = 0.0 +/// +/// If e is 255, f is an "infinity" or "not a number" (NAN), +/// depending on whether m is zero or not. +/// +/// Examples: +/// +/// 0 00000000 00000000000000000000000 = 0.0 +/// 0 01111110 00000000000000000000000 = 0.5 +/// 0 01111111 00000000000000000000000 = 1.0 +/// 0 10000000 00000000000000000000000 = 2.0 +/// 0 10000000 10000000000000000000000 = 3.0 +/// 1 10000101 11110000010000000000000 = -124.0625 +/// 0 11111111 00000000000000000000000 = +infinity +/// 1 11111111 00000000000000000000000 = -infinity +/// 0 11111111 10000000000000000000000 = NAN +/// 1 11111111 11111111111111111111111 = NAN +/// +/// **Representation of a 16-bit half:** +/// +/// Here is the bit-layout for a half number, h: +/// +/// 15 (msb) +/// | +/// | 14 10 +/// | | | +/// | | | 9 0 (lsb) +/// | | | | | +/// X XXXXX XXXXXXXXXX +/// +/// s e m +/// +/// S is the sign-bit, e is the exponent and m is the significand. +/// +/// If e is between 1 and 30, h is a normalized number: +/// +/// s e-15 +/// h = (-1) * 2 * 1.m +/// +/// If e is 0, and m is not zero, h is a denormalized number: +/// +/// S -14 +/// h = (-1) * 2 * 0.m +/// +/// If e and m are both zero, h is zero: +/// +/// h = 0.0 +/// +/// If e is 31, h is an "infinity" or "not a number" (NAN), +/// depending on whether m is zero or not. +/// +/// Examples: +/// +/// 0 00000 0000000000 = 0.0 +/// 0 01110 0000000000 = 0.5 +/// 0 01111 0000000000 = 1.0 +/// 0 10000 0000000000 = 2.0 +/// 0 10000 1000000000 = 3.0 +/// 1 10101 1111000001 = -124.0625 +/// 0 11111 0000000000 = +infinity +/// 1 11111 0000000000 = -infinity +/// 0 11111 1000000000 = NAN +/// 1 11111 1111111111 = NAN +/// +/// **Conversion via Lookup Table:** +/// +/// Converting from half to float is performed by default using a +/// lookup table. There are only 65,536 different half numbers; each +/// of these numbers has been converted and stored in a table pointed +/// to by the ``imath_half_to_float_table`` pointer. +/// +/// Prior to Imath v3.1, conversion from float to half was +/// accomplished with the help of an exponent look table, but this is +/// now replaced with explicit bit shifting. +/// +/// **Conversion via Hardware:** +/// +/// For Imath v3.1, the conversion routines have been extended to use +/// F16C SSE instructions whenever present and enabled by compiler +/// flags. +/// +/// **Conversion via Bit-Shifting** +/// +/// If F16C SSE instructions are not available, conversion can be +/// accomplished by a bit-shifting algorithm. For half-to-float +/// conversion, this is generally slower than the lookup table, but it +/// may be preferable when memory limits preclude storing of the +/// 65,536-entry lookup table. +/// +/// The lookup table symbol is included in the compilation even if +/// ``IMATH_HALF_USE_LOOKUP_TABLE`` is false, because application code +/// using the exported ``half.h`` may choose to enable the use of the table. +/// +/// An implementation can eliminate the table from compilation by +/// defining the ``IMATH_HALF_NO_LOOKUP_TABLE`` preprocessor symbol. +/// Simply add: +/// +/// #define IMATH_HALF_NO_LOOKUP_TABLE +/// +/// before including ``half.h``, or define the symbol on the compile +/// command line. +/// +/// Furthermore, an implementation wishing to receive ``FE_OVERFLOW`` +/// and ``FE_UNDERFLOW`` floating point exceptions when converting +/// float to half by the bit-shift algorithm can define the +/// preprocessor symbol ``IMATH_HALF_ENABLE_FP_EXCEPTIONS`` prior to +/// including ``half.h``: +/// +/// #define IMATH_HALF_ENABLE_FP_EXCEPTIONS +/// +/// **Conversion Performance Comparison:** +/// +/// Testing on a Core i9, the timings are approximately: +/// +/// half to float +/// - table: 0.71 ns / call +/// - no table: 1.06 ns / call +/// - f16c: 0.45 ns / call +/// +/// float-to-half: +/// - original: 5.2 ns / call +/// - no exp table + opt: 1.27 ns / call +/// - f16c: 0.45 ns / call +/// +/// **Note:** the timing above depends on the distribution of the +/// floats in question. +/// + +#ifdef __CUDA_ARCH__ +// do not include intrinsics headers on Cuda +#elif defined(_WIN32) +# include +#elif defined(__x86_64__) +# include +#elif defined(__F16C__) +# include +#endif + +#include +#include + +#ifdef IMATH_HALF_ENABLE_FP_EXCEPTIONS +# include +#endif + +//------------------------------------------------------------------------- +// Limits +// +// Visual C++ will complain if HALF_DENORM_MIN, HALF_NRM_MIN etc. are not float +// constants, but at least one other compiler (gcc 2.96) produces incorrect +// results if they are. +//------------------------------------------------------------------------- + +#if (defined _WIN32 || defined _WIN64) && defined _MSC_VER + +/// Smallest positive denormalized half +# define HALF_DENORM_MIN 5.96046448e-08f +/// Smallest positive normalized half +# define HALF_NRM_MIN 6.10351562e-05f +/// Smallest positive normalized half +# define HALF_MIN 6.10351562e-05f +/// Largest positive half +# define HALF_MAX 65504.0f +/// Smallest positive e for which ``half(1.0 + e) != half(1.0)`` +# define HALF_EPSILON 0.00097656f +#else +/// Smallest positive denormalized half +# define HALF_DENORM_MIN 5.96046448e-08 +/// Smallest positive normalized half +# define HALF_NRM_MIN 6.10351562e-05 +/// Smallest positive normalized half +# define HALF_MIN 6.10351562e-05f +/// Largest positive half +# define HALF_MAX 65504.0 +/// Smallest positive e for which ``half(1.0 + e) != half(1.0)`` +# define HALF_EPSILON 0.00097656 +#endif + +/// Number of digits in mantissa (significand + hidden leading 1) +#define HALF_MANT_DIG 11 +/// Number of base 10 digits that can be represented without change: +/// +/// ``floor( (HALF_MANT_DIG - 1) * log10(2) ) => 3.01... -> 3`` +#define HALF_DIG 3 +/// Number of base-10 digits that are necessary to uniquely represent +/// all distinct values: +/// +/// ``ceil(HALF_MANT_DIG * log10(2) + 1) => 4.31... -> 5`` +#define HALF_DECIMAL_DIG 5 +/// Base of the exponent +#define HALF_RADIX 2 +/// Minimum negative integer such that ``HALF_RADIX`` raised to the power +/// of one less than that integer is a normalized half +#define HALF_DENORM_MIN_EXP -13 +/// Maximum positive integer such that ``HALF_RADIX`` raised to the power +/// of one less than that integer is a normalized half +#define HALF_MAX_EXP 16 +/// Minimum positive integer such that 10 raised to that power is a +/// normalized half +#define HALF_DENORM_MIN_10_EXP -4 +/// Maximum positive integer such that 10 raised to that power is a +/// normalized half +#define HALF_MAX_10_EXP 4 + +/// a type for both C-only programs and C++ to use the same utilities +typedef union imath_half_uif +{ + uint32_t i; + float f; +} imath_half_uif_t; + +/// a type for both C-only programs and C++ to use the same utilities +typedef uint16_t imath_half_bits_t; + +#if !defined(__cplusplus) && !defined(__CUDACC__) +/// if we're in a C-only context, alias the half bits type to half +typedef imath_half_bits_t half; +#endif + +#if !defined(IMATH_HALF_NO_LOOKUP_TABLE) +# if defined(__cplusplus) +extern "C" +# else +extern +# endif + IMATH_EXPORT const imath_half_uif_t* imath_half_to_float_table; +#endif + +/// +/// Convert half to float +/// + +static inline float +imath_half_to_float (imath_half_bits_t h) +{ +#if defined(__F16C__) + // NB: The intel implementation does seem to treat NaN slightly + // different than the original toFloat table does (i.e. where the + // 1 bits are, meaning the signalling or not bits). This seems + // benign, given that the original library didn't really deal with + // signalling vs non-signalling NaNs +# ifdef _MSC_VER + /* msvc does not seem to have cvtsh_ss :( */ + return _mm_cvtss_f32 (_mm_cvtph_ps (_mm_set1_epi16 (h))); +# else + return _cvtsh_ss (h); +# endif +#elif defined(IMATH_HALF_USE_LOOKUP_TABLE) && \ + !defined(IMATH_HALF_NO_LOOKUP_TABLE) + return imath_half_to_float_table[h].f; +#else + imath_half_uif_t v; + // this code would be clearer, although it does appear to be faster + // (1.06 vs 1.08 ns/call) to avoid the constants and just do 4 + // shifts. + // + uint32_t hexpmant = ((uint32_t) (h) << 17) >> 4; + v.i = ((uint32_t) (h >> 15)) << 31; + + // the likely really does help if most of your numbers are "normal" half numbers + if (IMATH_LIKELY ((hexpmant >= 0x00800000))) + { + v.i |= hexpmant; + // either we are a normal number, in which case add in the bias difference + // otherwise make sure all exponent bits are set + if (IMATH_LIKELY ((hexpmant < 0x0f800000))) + v.i += 0x38000000; + else + v.i |= 0x7f800000; + } + else if (hexpmant != 0) + { + // exponent is 0 because we're denormal, don't have to extract + // the mantissa, can just use as is + // + // + // other compilers may provide count-leading-zeros primitives, + // but we need the community to inform us of the variants + uint32_t lc; +# if defined(_MSC_VER) + // The direct intrinsic for this is __lznct, but that is not supported + // on older x86_64 hardware or ARM. Instead uses the bsr instruction + // and one additional subtraction. This assumes hexpmant != 0, for 0 + // bsr and lznct would behave differently. + unsigned long bsr; + _BitScanReverse (&bsr, hexpmant); + lc = (31 - bsr); +# elif defined(__GNUC__) || defined(__clang__) + lc = (uint32_t) __builtin_clz (hexpmant); +# else + lc = 0; + while (0 == ((hexpmant << lc) & 0x80000000)) + ++lc; +# endif + lc -= 8; + // so nominally we want to remove that extra bit we shifted + // up, but we are going to add that bit back in, then subtract + // from it with the 0x38800000 - (lc << 23).... + // + // by combining, this allows us to skip the & operation (and + // remove a constant) + // + // hexpmant &= ~0x00800000; + v.i |= 0x38800000; + // lc is now x, where the desired exponent is then + // -14 - lc + // + 127 -> new exponent + v.i |= (hexpmant << lc); + v.i -= (lc << 23); + } + return v.f; +#endif +} + +/// +/// Convert half to float +/// +/// Note: This only supports the "round to even" rounding mode, which +/// was the only mode supported by the original OpenEXR library +/// + +static inline imath_half_bits_t +imath_float_to_half (float f) +{ +#if defined(__F16C__) +# ifdef _MSC_VER + // msvc does not seem to have cvtsh_ss :( + return _mm_extract_epi16 ( + _mm_cvtps_ph ( + _mm_set_ss (f), (_MM_FROUND_TO_NEAREST_INT)), + 0); +# else + // preserve the fixed rounding mode to nearest + return _cvtss_sh (f, (_MM_FROUND_TO_NEAREST_INT | _MM_FROUND_NO_EXC)); +# endif +#else + imath_half_uif_t v; + imath_half_bits_t ret; + uint32_t e, m, ui, r, shift; + + v.f = f; + + ui = (v.i & ~0x80000000); + ret = ((v.i >> 16) & 0x8000); + + // exponent large enough to result in a normal number, round and return + if (ui >= 0x38800000) + { + // inf or nan + if (IMATH_UNLIKELY (ui >= 0x7f800000)) + { + ret |= 0x7c00; + if (ui == 0x7f800000) return ret; + m = (ui & 0x7fffff) >> 13; + // make sure we have at least one bit after shift to preserve nan-ness + return ret | (uint16_t) m | (uint16_t) (m == 0); + } + + // too large, round to infinity + if (IMATH_UNLIKELY (ui > 0x477fefff)) + { +# ifdef IMATH_HALF_ENABLE_FP_EXCEPTIONS + feraiseexcept (FE_OVERFLOW); +# endif + return ret | 0x7c00; + } + + ui -= 0x38000000; + ui = ((ui + 0x00000fff + ((ui >> 13) & 1)) >> 13); + return ret | (uint16_t) ui; + } + + // zero or flush to 0 + if (ui < 0x33000001) + { +# ifdef IMATH_HALF_ENABLE_FP_EXCEPTIONS + if (ui == 0) return ret; + feraiseexcept (FE_UNDERFLOW); +# endif + return ret; + } + + // produce a denormalized half + e = (ui >> 23); + shift = 0x7e - e; + m = 0x800000 | (ui & 0x7fffff); + r = m << (32 - shift); + ret |= (m >> shift); + if (r > 0x80000000 || (r == 0x80000000 && (ret & 0x1) != 0)) ++ret; + return ret; +#endif +} + +//////////////////////////////////////// + +#ifdef __cplusplus + +# include + +IMATH_INTERNAL_NAMESPACE_HEADER_ENTER + +/// +/// +/// class half represents a 16-bit floating point number +/// +/// Type half can represent positive and negative numbers whose +/// magnitude is between roughly 6.1e-5 and 6.5e+4 with a relative +/// error of 9.8e-4; numbers smaller than 6.1e-5 can be represented +/// with an absolute error of 6.0e-8. All integers from -2048 to +/// +2048 can be represented exactly. +/// +/// Type half behaves (almost) like the built-in C++ floating point +/// types. In arithmetic expressions, half, float and double can be +/// mixed freely. Here are a few examples: +/// +/// half a (3.5); +/// float b (a + sqrt (a)); +/// a += b; +/// b += a; +/// b = a + 7; +/// +/// Conversions from half to float are lossless; all half numbers +/// are exactly representable as floats. +/// +/// Conversions from float to half may not preserve a float's value +/// exactly. If a float is not representable as a half, then the +/// float value is rounded to the nearest representable half. If a +/// float value is exactly in the middle between the two closest +/// representable half values, then the float value is rounded to +/// the closest half whose least significant bit is zero. +/// +/// Overflows during float-to-half conversions cause arithmetic +/// exceptions. An overflow occurs when the float value to be +/// converted is too large to be represented as a half, or if the +/// float value is an infinity or a NAN. +/// +/// The implementation of type half makes the following assumptions +/// about the implementation of the built-in C++ types: +/// +/// * float is an IEEE 754 single-precision number +/// * sizeof (float) == 4 +/// * sizeof (unsigned int) == sizeof (float) +/// * alignof (unsigned int) == alignof (float) +/// * sizeof (uint16_t) == 2 +/// + +class IMATH_EXPORT_TYPE half +{ +public: + /// A special tag that lets us initialize a half from the raw bits. + enum IMATH_EXPORT_ENUM FromBitsTag + { + FromBits + }; + + /// @{ + /// @name Constructors + + /// Default construction provides no initialization (hence it is + /// not constexpr). + half () IMATH_NOEXCEPT = default; + + /// Construct from float + half (float f) IMATH_NOEXCEPT; + + /// Construct from bit-vector + constexpr half (FromBitsTag, uint16_t bits) IMATH_NOEXCEPT; + + /// Copy constructor + constexpr half (const half&) IMATH_NOEXCEPT = default; + + /// Move constructor + constexpr half (half&&) IMATH_NOEXCEPT = default; + + /// Destructor + ~half () IMATH_NOEXCEPT = default; + + /// @} + + /// Conversion to float + operator float () const IMATH_NOEXCEPT; + + /// @{ + /// @name Basic Algebra + + /// Unary minus + constexpr half operator- () const IMATH_NOEXCEPT; + + /// Assignment + half& operator= (const half& h) IMATH_NOEXCEPT = default; + + /// Move assignment + half& operator= (half&& h) IMATH_NOEXCEPT = default; + + /// Assignment from float + half& operator= (float f) IMATH_NOEXCEPT; + + /// Addition assignment + half& operator+= (half h) IMATH_NOEXCEPT; + + /// Addition assignment from float + half& operator+= (float f) IMATH_NOEXCEPT; + + /// Subtraction assignment + half& operator-= (half h) IMATH_NOEXCEPT; + + /// Subtraction assignment from float + half& operator-= (float f) IMATH_NOEXCEPT; + + /// Multiplication assignment + half& operator*= (half h) IMATH_NOEXCEPT; + + /// Multiplication assignment from float + half& operator*= (float f) IMATH_NOEXCEPT; + + /// Division assignment + half& operator/= (half h) IMATH_NOEXCEPT; + + /// Division assignment from float + half& operator/= (float f) IMATH_NOEXCEPT; + + /// @} + + /// Round to n-bit precision (n should be between 0 and 10). + /// After rounding, the significand's 10-n least significant + /// bits will be zero. + IMATH_CONSTEXPR14 half round (unsigned int n) const IMATH_NOEXCEPT; + + /// @{ + /// @name Classification + + /// Return true if a normalized number, a denormalized number, or + /// zero. + constexpr bool isFinite () const IMATH_NOEXCEPT; + + /// Return true if a normalized number. + constexpr bool isNormalized () const IMATH_NOEXCEPT; + + /// Return true if a denormalized number. + constexpr bool isDenormalized () const IMATH_NOEXCEPT; + + /// Return true if zero. + constexpr bool isZero () const IMATH_NOEXCEPT; + + /// Return true if NAN. + constexpr bool isNan () const IMATH_NOEXCEPT; + + /// Return true if a positive or a negative infinity + constexpr bool isInfinity () const IMATH_NOEXCEPT; + + /// Return true if the sign bit is set (negative) + constexpr bool isNegative () const IMATH_NOEXCEPT; + + /// @} + + /// @{ + /// @name Special values + + /// Return +infinity + static constexpr half posInf () IMATH_NOEXCEPT; + + /// Return -infinity + static constexpr half negInf () IMATH_NOEXCEPT; + + /// Returns a NAN with the bit pattern 0111111111111111 + static constexpr half qNan () IMATH_NOEXCEPT; + + /// Return a NAN with the bit pattern 0111110111111111 + static constexpr half sNan () IMATH_NOEXCEPT; + + /// @} + + /// @{ + /// @name Access to the internal representation + + /// Return the bit pattern + constexpr uint16_t bits () const IMATH_NOEXCEPT; + + /// Set the bit pattern + IMATH_CONSTEXPR14 void setBits (uint16_t bits) IMATH_NOEXCEPT; + + /// @} + +public: + static_assert ( + sizeof (float) == sizeof (uint32_t), + "Assumption about the size of floats correct"); + using uif = imath_half_uif; + +private: + constexpr uint16_t mantissa () const IMATH_NOEXCEPT; + constexpr uint16_t exponent () const IMATH_NOEXCEPT; + + uint16_t _h; +}; + +//---------------------------- +// Half-from-float constructor +//---------------------------- + +inline half::half (float f) IMATH_NOEXCEPT : _h (imath_float_to_half (f)) +{} + +//------------------------------------------ +// Half from raw bits constructor +//------------------------------------------ + +inline constexpr half::half (FromBitsTag, uint16_t bits) IMATH_NOEXCEPT + : _h (bits) +{} + +//------------------------- +// Half-to-float conversion +//------------------------- + +inline half::operator float () const IMATH_NOEXCEPT +{ + return imath_half_to_float (_h); +} + +//------------------------- +// Round to n-bit precision +//------------------------- + +inline IMATH_CONSTEXPR14 half +half::round (unsigned int n) const IMATH_NOEXCEPT +{ + // + // Parameter check. + // + + if (n >= 10) return *this; + + // + // Disassemble h into the sign, s, + // and the combined exponent and significand, e. + // + + uint16_t s = _h & 0x8000; + uint16_t e = _h & 0x7fff; + + // + // Round the exponent and significand to the nearest value + // where ones occur only in the (10-n) most significant bits. + // Note that the exponent adjusts automatically if rounding + // up causes the significand to overflow. + // + + e >>= 9 - n; + e += e & 1; + e <<= 9 - n; + + // + // Check for exponent overflow. + // + + if (e >= 0x7c00) + { + // + // Overflow occurred -- truncate instead of rounding. + // + + e = _h; + e >>= 10 - n; + e <<= 10 - n; + } + + // + // Put the original sign bit back. + // + + half h (FromBits, s | e); + + return h; +} + +//----------------------- +// Other inline functions +//----------------------- + +inline constexpr half +half::operator- () const IMATH_NOEXCEPT +{ + return half (FromBits, bits () ^ 0x8000); +} + +inline half& +half::operator= (float f) IMATH_NOEXCEPT +{ + *this = half (f); + return *this; +} + +inline half& +half::operator+= (half h) IMATH_NOEXCEPT +{ + *this = half (float (*this) + float (h)); + return *this; +} + +inline half& +half::operator+= (float f) IMATH_NOEXCEPT +{ + *this = half (float (*this) + f); + return *this; +} + +inline half& +half::operator-= (half h) IMATH_NOEXCEPT +{ + *this = half (float (*this) - float (h)); + return *this; +} + +inline half& +half::operator-= (float f) IMATH_NOEXCEPT +{ + *this = half (float (*this) - f); + return *this; +} + +inline half& +half::operator*= (half h) IMATH_NOEXCEPT +{ + *this = half (float (*this) * float (h)); + return *this; +} + +inline half& +half::operator*= (float f) IMATH_NOEXCEPT +{ + *this = half (float (*this) * f); + return *this; +} + +inline half& +half::operator/= (half h) IMATH_NOEXCEPT +{ + *this = half (float (*this) / float (h)); + return *this; +} + +inline half& +half::operator/= (float f) IMATH_NOEXCEPT +{ + *this = half (float (*this) / f); + return *this; +} + +inline constexpr uint16_t +half::mantissa () const IMATH_NOEXCEPT +{ + return _h & 0x3ff; +} + +inline constexpr uint16_t +half::exponent () const IMATH_NOEXCEPT +{ + return (_h >> 10) & 0x001f; +} + +inline constexpr bool +half::isFinite () const IMATH_NOEXCEPT +{ + return exponent () < 31; +} + +inline constexpr bool +half::isNormalized () const IMATH_NOEXCEPT +{ + return exponent () > 0 && exponent () < 31; +} + +inline constexpr bool +half::isDenormalized () const IMATH_NOEXCEPT +{ + return exponent () == 0 && mantissa () != 0; +} + +inline constexpr bool +half::isZero () const IMATH_NOEXCEPT +{ + return (_h & 0x7fff) == 0; +} + +inline constexpr bool +half::isNan () const IMATH_NOEXCEPT +{ + return exponent () == 31 && mantissa () != 0; +} + +inline constexpr bool +half::isInfinity () const IMATH_NOEXCEPT +{ + return exponent () == 31 && mantissa () == 0; +} + +inline constexpr bool +half::isNegative () const IMATH_NOEXCEPT +{ + return (_h & 0x8000) != 0; +} + +inline constexpr half +half::posInf () IMATH_NOEXCEPT +{ + return half (FromBits, 0x7c00); +} + +inline constexpr half +half::negInf () IMATH_NOEXCEPT +{ + return half (FromBits, 0xfc00); +} + +inline constexpr half +half::qNan () IMATH_NOEXCEPT +{ + return half (FromBits, 0x7fff); +} + +inline constexpr half +half::sNan () IMATH_NOEXCEPT +{ + return half (FromBits, 0x7dff); +} + +inline constexpr uint16_t +half::bits () const IMATH_NOEXCEPT +{ + return _h; +} + +inline IMATH_CONSTEXPR14 void +half::setBits (uint16_t bits) IMATH_NOEXCEPT +{ + _h = bits; +} + +IMATH_INTERNAL_NAMESPACE_HEADER_EXIT + +/// Output h to os, formatted as a float +IMATH_EXPORT std::ostream& + operator<< (std::ostream& os, IMATH_INTERNAL_NAMESPACE::half h); + +/// Input h from is +IMATH_EXPORT std::istream& + operator>> (std::istream& is, IMATH_INTERNAL_NAMESPACE::half& h); + +#include + +namespace std +{ + +template <> class numeric_limits +{ +public: + static const bool is_specialized = true; + + static constexpr IMATH_INTERNAL_NAMESPACE::half min () IMATH_NOEXCEPT + { + return IMATH_INTERNAL_NAMESPACE::half (IMATH_INTERNAL_NAMESPACE::half::FromBits, 0x0400); /*HALF_MIN*/ + } + static constexpr IMATH_INTERNAL_NAMESPACE::half max () IMATH_NOEXCEPT + { + return IMATH_INTERNAL_NAMESPACE::half (IMATH_INTERNAL_NAMESPACE::half::FromBits, 0x7bff); /*HALF_MAX*/ + } + static constexpr IMATH_INTERNAL_NAMESPACE::half lowest () + { + return IMATH_INTERNAL_NAMESPACE::half (IMATH_INTERNAL_NAMESPACE::half::FromBits, 0xfbff); /* -HALF_MAX */ + } + + static constexpr int digits = HALF_MANT_DIG; + static constexpr int digits10 = HALF_DIG; + static constexpr int max_digits10 = HALF_DECIMAL_DIG; + static constexpr bool is_signed = true; + static constexpr bool is_integer = false; + static constexpr bool is_exact = false; + static constexpr int radix = HALF_RADIX; + static constexpr IMATH_INTERNAL_NAMESPACE::half epsilon () IMATH_NOEXCEPT + { + return IMATH_INTERNAL_NAMESPACE::half (IMATH_INTERNAL_NAMESPACE::half::FromBits, 0x1400); /*HALF_EPSILON*/ + } + static constexpr IMATH_INTERNAL_NAMESPACE::half round_error () IMATH_NOEXCEPT + { + return IMATH_INTERNAL_NAMESPACE::half (IMATH_INTERNAL_NAMESPACE::half::FromBits, 0x3800); /*0.5*/ + } + + static constexpr int min_exponent = HALF_DENORM_MIN_EXP; + static constexpr int min_exponent10 = HALF_DENORM_MIN_10_EXP; + static constexpr int max_exponent = HALF_MAX_EXP; + static constexpr int max_exponent10 = HALF_MAX_10_EXP; + + static constexpr bool has_infinity = true; + static constexpr bool has_quiet_NaN = true; + static constexpr bool has_signaling_NaN = true; + static constexpr float_denorm_style has_denorm = denorm_present; + static constexpr bool has_denorm_loss = false; + static constexpr IMATH_INTERNAL_NAMESPACE::half infinity () IMATH_NOEXCEPT + { + return IMATH_INTERNAL_NAMESPACE::half (IMATH_INTERNAL_NAMESPACE::half::FromBits, 0x7c00); /*half::posInf()*/ + } + static constexpr IMATH_INTERNAL_NAMESPACE::half quiet_NaN () IMATH_NOEXCEPT + { + return IMATH_INTERNAL_NAMESPACE::half (IMATH_INTERNAL_NAMESPACE::half::FromBits, 0x7fff); /*half::qNan()*/ + } + static constexpr IMATH_INTERNAL_NAMESPACE::half signaling_NaN () IMATH_NOEXCEPT + { + return IMATH_INTERNAL_NAMESPACE::half (IMATH_INTERNAL_NAMESPACE::half::FromBits, 0x7dff); /*half::sNan()*/ + } + static constexpr IMATH_INTERNAL_NAMESPACE::half denorm_min () IMATH_NOEXCEPT + { + return IMATH_INTERNAL_NAMESPACE::half (IMATH_INTERNAL_NAMESPACE::half::FromBits, 0x0001); /*HALF_DENORM_MIN*/ + } + + static constexpr bool is_iec559 = false; + static constexpr bool is_bounded = false; + static constexpr bool is_modulo = false; + + static constexpr bool traps = true; + static constexpr bool tinyness_before = false; + static constexpr float_round_style round_style = round_to_nearest; +}; + +} // namespace std + +//---------- +// Debugging +//---------- + +IMATH_EXPORT void +printBits (std::ostream& os, IMATH_INTERNAL_NAMESPACE::half h); +IMATH_EXPORT void printBits (std::ostream& os, float f); +IMATH_EXPORT void printBits (char c[19], IMATH_INTERNAL_NAMESPACE::half h); +IMATH_EXPORT void printBits (char c[35], float f); + +#if !defined(__CUDACC__) && !defined(__CUDA_FP16_HPP__) && !defined(__HIP__) +using half = IMATH_INTERNAL_NAMESPACE::half; +#elif defined(__CUDACC__) || defined(__CUDA_FP16_HPP__) +#include +#elif defined(__HIP__) +#include +#endif + +#endif // __cplusplus + +#endif // IMATH_HALF_H_ diff --git a/third_party/tlRender-install-Release/include/Imath/halfFunction.h b/third_party/tlRender-install-Release/include/Imath/halfFunction.h new file mode 100644 index 00000000..ab45198d --- /dev/null +++ b/third_party/tlRender-install-Release/include/Imath/halfFunction.h @@ -0,0 +1,147 @@ +// +// SPDX-License-Identifier: BSD-3-Clause +// Copyright Contributors to the OpenEXR Project. +// + +//--------------------------------------------------------------------------- +// +// halfFunction -- a class for fast evaluation +// of half --> T functions +// +// The constructor for a halfFunction object, +// +// halfFunction (function, +// domainMin, domainMax, +// defaultValue, +// posInfValue, negInfValue, +// nanValue); +// +// evaluates the function for all finite half values in the interval +// [domainMin, domainMax], and stores the results in a lookup table. +// For finite half values that are not in [domainMin, domainMax], the +// constructor stores defaultValue in the table. For positive infinity, +// negative infinity and NANs, posInfValue, negInfValue and nanValue +// are stored in the table. +// +// The tabulated function can then be evaluated quickly for arbitrary +// half values by calling the the halfFunction object's operator() +// method. +// +// Example: +// +// #include +// #include +// +// halfFunction hsin (sin); +// +// halfFunction hsqrt (sqrt, // function +// 0, HALF_MAX, // domain +// half::qNan(), // sqrt(x) for x < 0 +// half::posInf(), // sqrt(+inf) +// half::qNan(), // sqrt(-inf) +// half::qNan()); // sqrt(nan) +// +// half x = hsin (1); +// half y = hsqrt (3.5); +// +//--------------------------------------------------------------------------- + +#ifndef _HALF_FUNCTION_H_ +#define _HALF_FUNCTION_H_ + +/// @cond Doxygen_Suppress + +#include "half.h" + +#include "ImathConfig.h" +#ifndef IMATH_HAVE_LARGE_STACK +# include // need this for memset +#else +#endif + +#include + +template class halfFunction +{ +public: + //------------ + // Constructor + //------------ + + template + halfFunction ( + Function f, + half domainMin = -HALF_MAX, + half domainMax = HALF_MAX, + T defaultValue = 0, + T posInfValue = 0, + T negInfValue = 0, + T nanValue = 0); + +#ifndef IMATH_HAVE_LARGE_STACK + ~halfFunction () { delete[] _lut; } + halfFunction (const halfFunction&) = delete; + halfFunction& operator= (const halfFunction&) = delete; + halfFunction (halfFunction&&) = delete; + halfFunction& operator= (halfFunction&&) = delete; +#endif + + //----------- + // Evaluation + //----------- + + T operator() (half x) const; + +private: +#ifdef IMATH_HAVE_LARGE_STACK + T _lut[1 << 16]; +#else + T* _lut; +#endif +}; + +//--------------- +// Implementation +//--------------- + +template +template +halfFunction::halfFunction ( + Function f, + half domainMin, + half domainMax, + T defaultValue, + T posInfValue, + T negInfValue, + T nanValue) +{ +#ifndef IMATH_HAVE_LARGE_STACK + _lut = new T[1 << 16]; +#endif + + for (int i = 0; i < (1 << 16); i++) + { + half x; + x.setBits (i); + + if (x.isNan ()) + _lut[i] = nanValue; + else if (x.isInfinity ()) + _lut[i] = x.isNegative () ? negInfValue : posInfValue; + else if (x < domainMin || x > domainMax) + _lut[i] = defaultValue; + else + _lut[i] = f (x); + } +} + +template +inline T +halfFunction::operator() (half x) const +{ + return _lut[x.bits ()]; +} + +/// @endcond + +#endif diff --git a/third_party/tlRender-install-Release/include/Imath/halfLimits.h b/third_party/tlRender-install-Release/include/Imath/halfLimits.h new file mode 100644 index 00000000..5e5dd3b4 --- /dev/null +++ b/third_party/tlRender-install-Release/include/Imath/halfLimits.h @@ -0,0 +1,26 @@ +// +// SPDX-License-Identifier: BSD-3-Clause +// Copyright Contributors to the OpenEXR Project. +// + +#ifndef INCLUDED_HALF_LIMITS_H +#define INCLUDED_HALF_LIMITS_H + +// Warn if half.h hasn't being included +#ifndef IMATH_HALF_H_ +// +// This file is now deprecated. It previously included the +// specialization of std::numeric_limits, but those now appear +// directly in half.h, because they should be regarded as inseperable +// from the half class. +// + +#ifdef __GNUC__ +#warning "ImathLimits is deprecated; use #include " +#else +#pragma message("ImathLimits is deprecated; use #include ") +#endif + +#include "half.h" +#endif +#endif diff --git a/third_party/tlRender-install-Release/include/OpenColorIO/OpenColorABI.h b/third_party/tlRender-install-Release/include/OpenColorIO/OpenColorABI.h new file mode 100644 index 00000000..c443855e --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenColorIO/OpenColorABI.h @@ -0,0 +1,71 @@ +// SPDX-License-Identifier: BSD-3-Clause +// Copyright Contributors to the OpenColorIO Project. + +#ifndef INCLUDED_OCIO_OPENCOLORABI_H +#define INCLUDED_OCIO_OPENCOLORABI_H + +// Makefile configuration options +#define OCIO_NAMESPACE OpenColorIO_v2_5 + +#define OCIO_VERSION_STR "2.5.0" +#define OCIO_VERSION_STATUS_STR "" +#define OCIO_VERSION_FULL_STR "2.5.0" + +// Deprecated synonym for downstream projects that expect the 1.x name +#define OCIO_VERSION "2.5.0" + +/* Version as a single 4-byte hex number, e.g. 0x01050200 == 1.5.2 + Use this for numeric comparisons, e.g. #if OCIO_VERSION_HEX >= ... + Note: in the case where SOVERSION is overridden at compile-time, + this will reflect the original API version number. + */ +#define OCIO_VERSION_HEX ((2 << 24) | \ + (5 << 16) | \ + (0 << 8)) + +#define OCIO_VERSION_MAJOR 2 +#define OCIO_VERSION_MINOR 5 + + +// Highlight deprecated methods or classes. +#if defined(_MSC_VER) + #define OCIO_DEPRECATED(msg) __declspec(deprecated(msg)) +#elif __cplusplus >= 201402L + #define OCIO_DEPRECATED(msg) [[deprecated(msg)]] +#elif defined(__GNUC__) || defined(__clang__) + #define OCIO_DEPRECATED(msg) __attribute__((deprecated(msg))) +#else + #define OCIO_DEPRECATED(msg) /* unsupported on this platform */ +#endif + + +// shared_ptr / dynamic_pointer_cast +#include +#define OCIO_SHARED_PTR std::shared_ptr +#define OCIO_DYNAMIC_POINTER_CAST std::dynamic_pointer_cast + + +// If supported, define OCIOEXPORT, OCIOHIDDEN +// (used to choose which symbols to export from OpenColorIO) +#if defined(_WIN32) || defined(__CYGWIN__) + // Windows requires you to export from the main library and then import in any others + // only when compiling a dynamic library (i.e. DLL) + #ifndef OpenColorIO_SKIP_IMPORTS + #if defined OpenColorIO_EXPORTS + #define OCIOEXPORT __declspec(dllexport) + #else + #define OCIOEXPORT __declspec(dllimport) + #endif + #else + #define OCIOEXPORT + #endif + #define OCIOHIDDEN +#elif defined __GNUC__ + #define OCIOEXPORT __attribute__ ((visibility("default"))) + #define OCIOHIDDEN __attribute__ ((visibility("hidden"))) +#else // Others platforms not supported atm + #define OCIOEXPORT + #define OCIOHIDDEN +#endif + +#endif // INCLUDED_OCIO_OPENCOLORABI_H diff --git a/third_party/tlRender-install-Release/include/OpenColorIO/OpenColorAppHelpers.h b/third_party/tlRender-install-Release/include/OpenColorIO/OpenColorAppHelpers.h new file mode 100644 index 00000000..adb7fe5b --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenColorIO/OpenColorAppHelpers.h @@ -0,0 +1,890 @@ +// SPDX-License-Identifier: BSD-3-Clause +// Copyright Contributors to the OpenColorIO Project. + + +#ifndef INCLUDED_OCIO_OPENCOLORAPPHELPERS_H +#define INCLUDED_OCIO_OPENCOLORAPPHELPERS_H + +#include "OpenColorTypes.h" + +#ifndef OCIO_NAMESPACE +#error This header cannot be used directly. Use instead. +#endif + + +namespace OCIO_NAMESPACE +{ + +/** + * Parameters controlling which color spaces appear in menus. + * + * The ColorSpaceMenuHelper class is intended to be used by applications to get the list of items + * to show in color space menus. + * + * The ColorSpaceMenuParameters class is used to configure the behavior as needed for any given + * menu. Here is the algorithm used to produce a list of "items" (or strings) that will appear in + * a menu: + * + * 1) Use setRole to identify a role that controls a given menu. If the config has this role, + * then only that color space is returned. The name is set to the color space name, the UIName + * is presented as " ()". It may be useful for the application to + * then grey-out the menu or otherwise indicate to the user that the value for this menu is not + * user selectable since it was pre-determined by the config. If the config does not have that + * role, the algorithm continues to the remaining steps. + * + * 2) The IncludeColorSpaces, SearchReferenceSpaceType, and IncludeNamedTransforms parameters are + * used to identify a set of items from the config that are potential candidates for use in the + * menu, as follows: + * - IncludeColorSpaces: Set to true to include color spaces in the menu. + * - SearchReferenceSpaceType: Use this to control whether the menu should include all color + * spaces, only display color spaces, or only non-display color spaces. + * - IncludeNamedTransforms: Set to true to include named transforms in the menu. + * + * 3) The set of items from step 2 is then filtered in step 3 using the following parameters: + * - AppCategories: A list of strings specified by the application based on the purpose of + * the menu. For example, if the menu is used to select a color space for importing an + * image, the application might specify the 'file-io' category, whereas if it is to select + * a working color space, it might specify the 'working-space' category. Application + * developers should document what strings they are using for each menu so that config + * authors know what categories to use in their configs. Alternatively, an application + * could let advanced users customize the string to use for a given menu in the + * application. + * - Encodings: A list of strings used to further refine the items selected from the + * AppCategories. For example, an application might specify 'working-space' as the + * category and then specify 'scene-linear' as the encoding to only use items that have + * both of those properties (e.g., only select scene-linear working color spaces). + * - UserCategories: A list of strings specified by the end-user of the application. OCIO + * will check for these strings in an environment variable, or they may be passed in from + * the application. + * - TreatNoCategoryAsAny: By default, color spaces (or named transforms) that have no + * categories are handled as if they had any of the categories. Config authors that want to + * hide color spaces without categories should either put them in the inactiveColorSpaces + * list or add a category that will never be searched for (e.g., "invisible" or "hidden"). + * App developers may set this option to false to hide items without any categories. + * + * Basically the intent is for the filtering to return the intersection of the app categories, + * encoding, and user categories. However, some fall-backs are in place to ensure that the + * filtering does not remove all menu items. Here is the detailed description: + * + * 3a) The items from step 2 are filtered to generate a list of appItems containing only the ones + * that contain at least one of the AppCategories strings in their "categories" property and + * one of the encodings in their "encoding" property. If this list is empty, an attempt is + * made to generate a non-empty appItems list by only filtering by AppCategories. If that is + * empty, an attempt is made to only filter by Encodings. + * + * 3b) The items from step 2 are filtered to generate a list of userItems containing only the ones + * that have at least one of the UserCategories strings in their "categories" property. + * + * 3c) If both appItems and userItems are non-empty, a list of resultItems will be generated as + * the intersection of those two lists. + * + * 3d) If the resultItems list is empty, the appList will be expanded by only filtering by + * AppCategories and not encodings. The resultItems will be formed again as the intersection + * of the appItems and userItems. + * + * 3e) If the resultItems is still empty, it will be set to just the appItems from step 3a. + * + * 3f) If the resultItems is still empty, it will be set to just the userItems. + * + * 3g) If the resultItems is still empty, the items are not filtered and all items from step 2 are + * returned. The rationale is that if step 2 has produced any items, it is not acceptable for + * step 3 to remove all of them. An application usually expects to have a non-zero number of + * items to display in the menu. However, if step 2 produces no items (e.g. the application + * requests only named transforms and the config has no named transform), then no items will + * be returned. + * + * + * 4) If IncludeRoles is true, the items from step 3 are extended by including an item for each + * role. The name is set to the role name, the UIName is presented as " ()", and the family is set to "Roles". + * + * 5) If AddColorSpace has been used to add any additional items, these are appended to the final + * list. + */ +class OCIOEXPORT ColorSpaceMenuParameters +{ +public: + static ColorSpaceMenuParametersRcPtr Create(ConstConfigRcPtr config); + /// Config is required to be able to create a ColorSpaceMenuHelper. + virtual void setConfig(ConstConfigRcPtr config) noexcept = 0; + virtual ConstConfigRcPtr getConfig() const noexcept = 0; + + /// If role is a valid role, other parameters are ignored and menu will contain only that role. + virtual void setRole(const char * role) noexcept = 0; + virtual const char * getRole() const noexcept = 0; + + + /** + * Include all color spaces (or not) to ColorSpaceMenuHelper. Default is to include color + * spaces. + */ + virtual void setIncludeColorSpaces(bool include) noexcept = 0; + virtual bool getIncludeColorSpaces() const noexcept = 0; + + /** + * Can be used to restrict the search using the ReferenceSpaceType of the color spaces. + * It has no effect on roles and named transforms. + */ + virtual SearchReferenceSpaceType getSearchReferenceSpaceType() const noexcept = 0; + virtual void setSearchReferenceSpaceType(SearchReferenceSpaceType colorSpaceType) noexcept = 0; + + /** + * Include all named transforms (or not) to ColorSpaceMenuHelper. Default is not to include + * named transforms. + */ + virtual void setIncludeNamedTransforms(bool include) noexcept = 0; + virtual bool getIncludeNamedTransforms() const noexcept = 0; + + /** + * When searching for color spaces using app or user categories, treat color spaces or + * named transforms that have no categories as if they had any of the categories. + * Default is true. + */ + virtual void setTreatNoCategoryAsAny(bool value) noexcept = 0; + virtual bool getTreatNoCategoryAsAny() const noexcept = 0; + + /** + * App categories is a comma separated list of categories. If appCategories is not NULL and + * not empty, all color spaces that have one of the categories will be part of the menu. + */ + virtual void setAppCategories(const char * appCategories) noexcept = 0; + virtual const char * getAppCategories() const noexcept = 0; + + /** + * Encodings is a comma separated list of encodings. When not empty, is retricting the search + * to color spaces that are using one of the encodings. + */ + virtual void setEncodings(const char * encodings) noexcept = 0; + virtual const char * getEncodings() const noexcept = 0; + + /** + * User categories is a comma separated list of categories. If OCIO_USER_CATEGORIES_ENVVAR + * env. variable is defined and not empty, this parameter is ignored and the value of the + * env. variable is used for user categories. + */ + virtual void setUserCategories(const char * userCategories) noexcept = 0; + virtual const char * getUserCategories() const noexcept = 0; + + + /** + * Include all roles (or not) to ColorSpaceMenuHelper. Default is not to include roles. + * Roles are added after color spaces with an single hierarchy level named "Roles". + */ + virtual void setIncludeRoles(bool include) noexcept = 0; + virtual bool getIncludeRoles() const noexcept = 0; + + /** + * Add an additional color space (or named transform) to the menu. + * + * Note that an additional color space could be: + * * an inactive color space, + * * an active color space not having at least one of the selected categories, + * * a newly created color space. + * Will throw when creating the menu if color space is not part of the config. Nothing is done + * if it is already part of the menu. + * It's ok to call this multiple times with the same color space, it will only be added to the + * menu once. If a role name is passed in, the name in the menu will be the color space name + * the role points to. + */ + virtual void addColorSpace(const char * name) noexcept = 0; + + virtual size_t getNumAddedColorSpaces() const noexcept = 0; + virtual const char * getAddedColorSpace(size_t index) const noexcept = 0; + virtual void clearAddedColorSpaces() noexcept = 0; + + /// Do not use (needed only for pybind11). + virtual ~ColorSpaceMenuParameters() = default; +}; + +extern OCIOEXPORT std::ostream & operator<<(std::ostream &, const ColorSpaceMenuParameters &); + +/** + * Helper class to create menus for the content of a config. + * + * Menu can list color spaces, roles, named transforms. Each entry has a name, a UI name, a + * description, and a family. Family can also be accessed as hierarchy levels; levels are created + * by splitting the family using the 'family separator'. Hierarchy levels are meant to be used as + * sub-menus. + * + * The UI name is what is intended to be put in application menus seen by the end-user. However, + * please note that the UI name is not guaranteed to remain stable between releases and so if + * applications need to save something it should be the 'name' rather than the 'UI name'. + * Currently, the only difference between the 'name' and 'UI name' is for roles. + * + * The overall ordering of items is: color spaces, named transforms, roles, and additional color + * spaces. The display color spaces will either come before or after the other color spaces based + * on where that block of spaces appears in the config. The order of items returned by the menu + * helper preserves the order of items in the config itself for each type of elements, thus + * preserving the intent of the config author. For example, if you call getName at idx + * and idx+1, the name returned at idx+1 will be from farther down in the config than the one at + * idx as long as both are of the same type. (An application may ask for only the items in one + * of those blocks if it wants to handle them separately.) If the application makes use of + * hierarchical menus, that will obviously impose a different order on what the user sees in the + * menu. Though even with hierarchical menus, applications should try to preserve config ordering + * (which is equivalent to index ordering) for items within the same sub-menu. + */ +class OCIOEXPORT ColorSpaceMenuHelper +{ +public: + static ColorSpaceMenuHelperRcPtr Create(ConstColorSpaceMenuParametersRcPtr parameters); + + /// Access to the color spaces (or roles). + virtual size_t getNumColorSpaces() const noexcept = 0; + /** + * Get the color space (or role) name used in the config for this menu item. Will be empty + * if the index is out of range. + */ + virtual const char * getName(size_t idx) const noexcept = 0; + /** + * Get the name to use in the menu UI. This might be different from the config name, for + * example in the case of roles. Will be empty if the index is out of range. + */ + virtual const char * getUIName(size_t idx) const noexcept = 0; + + /** + * Get the index of the element of a given name. Return (size_t)-1 name if NULL or empty, or if + * no element with that name is found. + */ + virtual size_t getIndexFromName(const char * name) const noexcept = 0; + virtual size_t getIndexFromUIName(const char * name) const noexcept = 0; + + virtual const char * getDescription(size_t idx) const noexcept = 0; + virtual const char * getFamily(size_t idx) const noexcept = 0; + + /** + * Hierarchy levels are created from the family string. It is split into levels using the + * 'family separator'. + */ + virtual size_t getNumHierarchyLevels(size_t idx) const noexcept = 0; + virtual const char * getHierarchyLevel(size_t idx, size_t i) const noexcept = 0; + + /// Get the color space name from the UI name. + virtual const char * getNameFromUIName(const char * uiName) const noexcept = 0; + /// Get the color space UI name from the name. + virtual const char * getUINameFromName(const char * name) const noexcept = 0; + + ColorSpaceMenuHelper(const ColorSpaceMenuHelper &) = delete; + ColorSpaceMenuHelper & operator=(const ColorSpaceMenuHelper &) = delete; + + /// Do not use (needed only for pybind11). + virtual ~ColorSpaceMenuHelper() = default; + +protected: + ColorSpaceMenuHelper() = default; +}; + +extern OCIOEXPORT std::ostream & operator<<(std::ostream &, const ColorSpaceMenuHelper &); + +namespace ColorSpaceHelpers +{ +/** + * Add a new color space to the config instance. The output of the userTransform must be in the + * specified connectionColorSpace. + * + * Note: If the config does not already use categories, we do not add them since that would + * make a big change to how existing color spaces show up in menus. + */ +extern OCIOEXPORT void AddColorSpace(ConfigRcPtr & config, + const char * name, + const char * transformFilePath, + const char * categories, // Could be null or empty. + const char * connectionColorSpaceName); + +} // ColorSpaceHelpers + +namespace DisplayViewHelpers +{ + +/** + * Get the processor from the working color space to (display, view) pair (forward) or (display, + * view) pair to working (inverse). The working color space name could be a role name or a color + * space name. ChannelView can be empty. If not already present, each of these functions adds + * ExposureContrastTransforms to enable changing exposure, contrast, and gamma after the processor + * has been created using dynamic properties. + */ +extern OCIOEXPORT ConstProcessorRcPtr GetProcessor(const ConstConfigRcPtr & config, + const ConstContextRcPtr & context, + const char * workingName, + const char * displayName, + const char * viewName, + const ConstMatrixTransformRcPtr & channelView, + TransformDirection direction); + +extern OCIOEXPORT ConstProcessorRcPtr GetProcessor(const ConstConfigRcPtr & config, + const char * workingName, + const char * displayName, + const char * viewName, + const ConstMatrixTransformRcPtr & channelView, + TransformDirection direction); + +/// Get an identity processor containing only the ExposureContrastTransforms. +extern OCIOEXPORT ConstProcessorRcPtr GetIdentityProcessor(const ConstConfigRcPtr & config); + +/** + * Add a new (display, view) pair and the new color space to a configuration instance. + * The input to the userTransform must be in the specified connectionColorSpace. + */ +extern OCIOEXPORT void AddDisplayView(ConfigRcPtr & config, + const char * displayName, + const char * viewName, + const char * lookDefinition, // Could be empty or null + const char * colorSpaceName, // Could be empty or null + const char * colorSpaceFamily, // Could be empty or null + const char * colorSpaceDescription, // Could be empty or null + const char * categories, // Could be empty or null + const char * transformFilePath, + const char * connectionColorSpaceName); + +/** + * Remove a (display, view) pair including the associated color space (only if not used). + * Note that the view is always removed but the display is only removed if empty. + */ +extern OCIOEXPORT void RemoveDisplayView(ConfigRcPtr & config, + const char * displayName, + const char * viewName); + +} // DisplayViewHelpers + + +/** + * Whereas the DisplayViewTransform simply applies a specific view from an OCIO display, the + * LegacyViewingPipeline provides an example of a complete viewing pipeline of the sort that could + * be used to implement a viewport in a typical application. It therefore adds, around the + * DisplayViewTransform, various optional color correction steps and RGBA channel view swizzling. + * The direction of the DisplayViewTranform is used as the direction of the pipeline. + * Note: The LegacyViewingPipeline class provides the same functionality as the OCIO v1 + * DisplayTransform. + * + * Legacy viewing pipeline: + * * Start in display transform input color space. + * * If linearCC is provided: + * * Go to scene_linear colorspace. + * * Apply linearCC transform. + * * If colorTimingCC is provided: + * * Go to color_timing colorspace. + * * Apply colorTimingCC transform. + * * Apply looks (from display transform or from looks override). + * * Go to first look color space. + * * Apply first look transform. + * * Iterate for all looks. + * * Apply channelView transform. + * * Apply display transform (without looks). + * * Apply displayCC. + * Note that looks are applied even if the display transform involves data color spaces. + */ +class OCIOEXPORT LegacyViewingPipeline +{ +public: + static LegacyViewingPipelineRcPtr Create(); + + virtual ConstDisplayViewTransformRcPtr getDisplayViewTransform() const noexcept = 0; + virtual void setDisplayViewTransform(const ConstDisplayViewTransformRcPtr & dt) noexcept = 0; + + virtual ConstTransformRcPtr getLinearCC() const noexcept = 0; + virtual void setLinearCC(const ConstTransformRcPtr & cc) noexcept = 0; + + virtual ConstTransformRcPtr getColorTimingCC() const noexcept = 0; + virtual void setColorTimingCC(const ConstTransformRcPtr & cc) noexcept = 0; + + virtual ConstTransformRcPtr getChannelView() const noexcept = 0; + virtual void setChannelView(const ConstTransformRcPtr & transform) noexcept = 0; + + virtual ConstTransformRcPtr getDisplayCC() const noexcept = 0; + virtual void setDisplayCC(const ConstTransformRcPtr & cc) noexcept = 0; + + /** + * Specify whether the lookOverride should be used, or not. This is a separate flag, as + * it's often useful to override "looks" to an empty string. + */ + virtual void setLooksOverrideEnabled(bool enable) = 0; + virtual bool getLooksOverrideEnabled() const = 0; + + /** + * A user can optionally override the looks that are, by default, used with the expected + * display / view combination. A common use case for this functionality is in an image + * viewing app, where per-shot looks are supported. If for some reason a per-shot look is + * not defined for the current Context, the Config::getProcessor fcn will not succeed by + * default. Thus, with this mechanism the viewing app could override to looks = "", and + * this will allow image display to continue (though hopefully) the interface would reflect + * this fallback option. + * + * Looks is a potentially comma (or colon) delimited list of lookNames, where +/- prefixes + * are optionally allowed to denote forward/inverse look specification (and forward is + * assumed in the absence of either). + */ + virtual void setLooksOverride(const char * looks) = 0; + virtual const char * getLooksOverride() const = 0; + + virtual ConstProcessorRcPtr getProcessor(const ConstConfigRcPtr & config, + const ConstContextRcPtr & context) const = 0; + + virtual ConstProcessorRcPtr getProcessor(const ConstConfigRcPtr & config) const = 0; + + LegacyViewingPipeline(const LegacyViewingPipeline &) = delete; + LegacyViewingPipeline & operator=(const LegacyViewingPipeline &) = delete; + + /// Do not use (needed only for pybind11). + virtual ~LegacyViewingPipeline() = default; + +protected: + LegacyViewingPipeline() = default; +}; + +extern OCIOEXPORT std::ostream & operator<<(std::ostream &, const LegacyViewingPipeline &); + +/** + * The MixingSlider and MixingColorSpaceManager classes are to help applications implement correct + * color pickers. The term "color mixing" is used here to describe what is done in a typical + * application "color picker" user interface. + * + * A user may want to mix colors in different color spaces. The two most common mixing space + * options are a scene-linear working space or the display space. + * + * Since scene-linear color spaces are not perceptually uniform, it is necessary to compensate UI + * widgets such as sliders. For example, it is nice if mid-gray falls near the center of mixing + * controls rather than way over near the black end. This may be done by using a mapping from + * linear into an approximately perceptually uniform space. + * + * Also note that a color picking/mixing UI may want to present a given color space in several + * different encodings. The most common two encodings for color mixing are RGB and HSV. + * + * Note that these helpers anticipate that a user may want to mix colors using values that extend + * outside the typical [0,1] domain. + */ +class OCIOEXPORT MixingSlider +{ +public: + /// Set the minimum edge of a UI slider for conversion to mixing space. + virtual void setSliderMinEdge(float sliderMixingMinEdge) noexcept = 0; + + /// Minimum edge of a UI slider for conversion to mixing space. + virtual float getSliderMinEdge() const noexcept = 0; + + /// Set the maximum edge of a UI slider for conversion to mixing space. + virtual void setSliderMaxEdge(float sliderMixingMaxEdge) noexcept = 0; + + /// Maximum edge of a UI slider for conversion to mixing space. + virtual float getSliderMaxEdge() const noexcept = 0; + + /// Convert from units in distance along the slider to mixing space units. + virtual float sliderToMixing(float sliderUnits) const noexcept = 0; + + /// Convert from mixing space units to distance along the slider. + virtual float mixingToSlider(float mixingUnits) const noexcept = 0; + + MixingSlider(const MixingSlider &) = delete; + MixingSlider & operator=(const MixingSlider &) = delete; + + /// Do not use (needed only for pybind11). + virtual ~MixingSlider() = default; + +protected: + MixingSlider() = default; +}; + +extern OCIOEXPORT std::ostream & operator<<(std::ostream &, const MixingSlider &); + +/** + * Used to mix (or pick/choose) colors. + */ +class OCIOEXPORT MixingColorSpaceManager +{ +public: + + static MixingColorSpaceManagerRcPtr Create(ConstConfigRcPtr & config); + + /// Access to the mixing spaces. + virtual size_t getNumMixingSpaces() const noexcept = 0; + virtual const char * getMixingSpaceUIName(size_t idx) const = 0; + virtual size_t getSelectedMixingSpaceIdx() const noexcept = 0; + virtual void setSelectedMixingSpaceIdx(size_t idx) = 0; + virtual void setSelectedMixingSpace(const char * mixingSpace) = 0; + + virtual bool isPerceptuallyUniform() const noexcept = 0; + + /// Access to the mixing encodings. + virtual size_t getNumMixingEncodings() const noexcept = 0; + virtual const char * getMixingEncodingName(size_t idx) const = 0; + virtual size_t getSelectedMixingEncodingIdx() const noexcept = 0; + virtual void setSelectedMixingEncodingIdx(size_t idx) = 0; + virtual void setSelectedMixingEncoding(const char * mixingEncoding) = 0; + + /// Refresh the instance (i.e. needed following a configuration change for example). + virtual void refresh(ConstConfigRcPtr config) = 0; + + virtual ConstProcessorRcPtr getProcessor(const char * workingName, + const char * displayName, + const char * viewName, + TransformDirection direction) const = 0; + + virtual MixingSlider & getSlider() noexcept = 0; + virtual MixingSlider & getSlider(float sliderMixingMinEdge, + float sliderMixingMaxEdge) noexcept = 0; + + MixingColorSpaceManager(const MixingColorSpaceManager &) = delete; + MixingColorSpaceManager & operator=(const MixingColorSpaceManager &) = delete; + + /// Do not use (needed only for pybind11). + virtual ~MixingColorSpaceManager() = default; + +protected: + MixingColorSpaceManager() = default; +}; + +extern OCIOEXPORT std::ostream & operator<<(std::ostream &, const MixingColorSpaceManager &); + +/** + * The ConfigMergingParameters class holds the options that control how a merge is done. + * + * In terms of OCIOM file, it represent one of the merges in an OCIOM file. + * + */ +class OCIOEXPORT ConfigMergingParameters +{ +public: + + enum MergeStrategies + { + /// Combine elements of the base and input configs, with the input taking priority. + STRATEGY_PREFER_INPUT = 0, + /// Combine elements of the base and input configs, with the base taking priority. + STRATEGY_PREFER_BASE, + /// Use only the input elements for that section of the config. + STRATEGY_INPUT_ONLY, + /// Use only the base elements for that section of the config. + STRATEGY_BASE_ONLY, + /// The elements in the input config are removed from the base config. (If the names + /// match, the item is removed, even if the content is not identical.) + STRATEGY_REMOVE, + /// Strategy has not been set yet. + STRATEGY_UNSPECIFIED + }; + + static ConfigMergingParametersRcPtr Create(); + + ConfigMergingParametersRcPtr createEditableCopy() const; + + /// Set the file name of the base config. This is used along with the search path of + /// the ConfigMerger object. + void setBaseConfigName(const char * baseConfig); + const char * getBaseConfigName() const; + + /// Set the file name of the input config. This is used along with the search path of + /// the ConfigMerger object. + void setInputConfigName(const char * inputConfig); + const char * getInputConfigName() const; + + /// Set a name to use for this merger. This may be used as the input or base config name + /// in subsequent mergers. + void setOutputName(const char * outputName); + const char * getOutputName() const; + + // Options + + /// Set the default strategy. This will be used if the strategy for a given config section + /// is not set, and will be used for basic attributes such as the config description. + /// Default = STRATEGY_PREFER_INPUT. + void setDefaultStrategy(const ConfigMergingParameters::MergeStrategies strategy); + ConfigMergingParameters::MergeStrategies getDefaultStrategy() const; + + /// Set a prefix to add to the family of input config items. (It must use '/' as the + /// separator and will be replaced by the actual family separator of the config.) + void setInputFamilyPrefix(const char * prefix); + const char * getInputFamilyPrefix() const; + + /// Set a prefix to add to the family of base config items. (It must use '/' as the + /// separator and will be replaced by the actual family separator of the config.) + void setBaseFamilyPrefix(const char * prefix); + const char * getBaseFamilyPrefix() const; + + /// If true, items from the input config will be higher in the file than those of the + /// base config. Default = true. + void setInputFirst(bool enabled); + bool isInputFirst() const; + + /// If true, throw an exception rather than log a warning when a conflict is detected. + /// Default = false. + void setErrorOnConflict(bool enabled); + bool isErrorOnConflict() const; + + /// If true, a color space from the input config is compared against those of the base + /// config. If it is mathematically equivalent, it is not added. Instead, its name and + /// aliases are added to the original color space. Default = true. + void setAvoidDuplicates(bool enabled); + bool isAvoidDuplicates() const; + + /// If true, the reference spaces of the base and input config are compared and color + /// spaces from the input config will be adjusted to use the reference space of the base. + /// If the interchange roles are not set, heuristics will be used to try and determine + /// the reference space. Default = true. + void setAdjustInputReferenceSpace(bool enabled); + bool isAdjustInputReferenceSpace() const; + + // Overrides + + /// Override the name of the merged config. + void setName(const char * mergedConfigName); + const char * getName() const; + + /// Override the description of the merged config. + void setDescription(const char * mergedConfigDesc); + const char * getDescription() const; + + /// Override a context variable in the merged config. + void addEnvironmentVar(const char * name, const char * defaultValue); + /// Get the number of context variable overrides. + int getNumEnvironmentVars() const; + const char * getEnvironmentVar(int index) const; + const char * getEnvironmentVarValue(int index) const; + + /// Override the search_path of the merged config. + void setSearchPath(const char * path); + void addSearchPath(const char * path); + const char * getSearchPath() const; + + /// Override the active_displays of the merged config. + void setActiveDisplays(const char * displays); + const char * getActiveDisplays() const; + + /// Override the active_views of the merged config. + void setActiveViews(const char * views); + const char * getActiveViews() const; + + /// Override the inactive_colorspaces of the merged config. + void setInactiveColorSpaces(const char * colorspaces); + const char * getInactiveColorSpaces() const; + + // Config section strategies + + /// Set the merge strategy for the roles section. + void setRoles(MergeStrategies strategy); + MergeStrategies getRoles() const; + + /// Set the merge strategy for the file_rules section. + void setFileRules(MergeStrategies strategy); + MergeStrategies getFileRules() const; + + /// Set the merge strategy for the displays/views section. + /// This includes shared_views, displays, viewing_rules, + /// virtual_display, active_display, and active_views. + void setDisplayViews(MergeStrategies strategy); + MergeStrategies getDisplayViews() const; + + /// Set the merge strategy for the view_transforms section. + /// This includes the view_transforms and default_view_transform. + void setViewTransforms(MergeStrategies strategy); + MergeStrategies getViewTransforms() const; + + /// Set the merge strategy for the looks section. + void setLooks(MergeStrategies strategy); + MergeStrategies getLooks() const; + + /// Set the merge strategy for the color spaces section. + /// This includes colorspaces, display_colorspaces, environment, search_path, + /// family_separator, and inactive_colorspaces. + void setColorspaces(MergeStrategies strategy); + MergeStrategies getColorspaces() const; + + /// Set the merge strategy for the named_transforms section. + void setNamedTransforms(MergeStrategies strategy); + MergeStrategies getNamedTransforms() const; + + ConfigMergingParameters(const ConfigMergingParameters &) = delete; + ConfigMergingParameters& operator= (const ConfigMergingParameters &) = delete; + + /// Do not use (needed only for pybind11). + ~ConfigMergingParameters(); + +private: + ConfigMergingParameters(); + + static void deleter(ConfigMergingParameters * c); + + class Impl; + Impl * m_impl; + Impl * getImpl() { return m_impl; } + const Impl * getImpl() const { return m_impl; } +}; + +extern OCIOEXPORT std::ostream & operator<<(std::ostream &, const ConfigMergingParameters &); + +/** + * The ConfigMerger class is the controller for the merging process. + * + * It may be read from or serialized to an OCIOM file. + * + * It is controlling the search_path to find the base and input config, and the merge parameters. + * + * It contains an instance of ConfigMergingParameters for each merge present under the "merge" + * section. + * + * For example, consider the following OCIOM file contents: + * + * ociom_version: 1.0 + * search_path: + * - /usr/local/configs + * - . + * merge: + * Merge_ADD_THIS: + * [...] + * Merge_ADD_THAT: + * [...] + * + * For this OCIOM, there would be two instances of ConfigMergingParameters. + * One for the merge with output name "Merge_ADD_THIS" and one for "Merge_ADD_THAT". + * + * Where the [...] sections have the following structure: + * + * Merge_ADD_THIS: + * base: base.ocio + * input: input.ocio + * options: + * input_family_prefix: "" + * base_family_prefix: "" + * input_first: true + * error_on_conflict: false + * default_strategy: PreferInput + * avoid_duplicates: true + * adjust_input_reference_space: true + * overrides: + * name: "" + * description: "" + * search_path: "" + * environment: {} + * active_displays: [] + * active_views: [] + * inactive_colorspaces: [] + * params: + * roles: + * strategy: PreferBase + * file_rules: + * strategy: PreferInput + * display-views: + * strategy: InputOnly + * view_transforms: + * strategy: InputOnly + * looks: + * strategy: BaseOnly + * colorspaces: + * strategy: PreferInput + * named_transform: + * strategy: Remove + * + * The indentation is significant and must be as shown. Default items may be omitted. + * + */ +class OCIOEXPORT ConfigMerger +{ +public: + static ConfigMergerRcPtr Create(); + + // Create by parsing an OCIOM file. + static ConstConfigMergerRcPtr CreateFromFile(const char * filepath); + + ConfigMergerRcPtr createEditableCopy() const; + + /// These search paths are used to locate the input and base config. + /// Set the entire search path. The ':' character is used to separate paths. + void setSearchPath(const char * path); + /// Add a single path to the search paths. + void addSearchPath(const char * path); + /// Get the number of search paths. + int getNumSearchPaths() const; + const char * getSearchPath(int index) const; + + /** + * \brief Set the home directory used to resolve relative search paths. + * + * The working directory defaults to the location of the OCIOM file. It is used to convert + * any relative paths to absolute. If no search paths have been set, the working directory + * will be used as the fallback search path. + */ + void setWorkingDir(const char * dirname); + const char * getWorkingDir() const; + + /// Get the parameters for one of the merges. Returns null if index is out of range. + ConfigMergingParametersRcPtr getParams(int index) const; + int getNumConfigMergingParameters() const; + void addParams(ConfigMergingParametersRcPtr params); + + /** + * \brief Execute the merge(s) based on the merger object. + * + * Execute the merge(s) based on the merger object that was previously populated by using + * ConfigMerger::CreateFromFile or created from scratch by using ConfigMerger::Create() and + * programmatically configuring it. + * + * \return a merger object (call getMergedConfig to obtain the result) + */ + ConstConfigMergerRcPtr mergeConfigs() const; + + /// Get the final merged config. + ConstConfigRcPtr getMergedConfig() const; + /// Get one of the merged configs (if there are a series of merges). Returns null + /// if index is out of range. + ConstConfigRcPtr getMergedConfig(int index) const; + int getNumMergedConfigs() const; + + /// Serialize to the OCIOM file format. + void serialize(std::ostream& os) const; + + /// Set the version of the OCIOM file format. + void setVersion(unsigned int major, unsigned int minor); + unsigned int getMajorVersion() const; + unsigned int getMinorVersion() const; + + ConfigMerger(const ConfigMerger &) = delete; + ConfigMerger & operator=(const ConfigMerger &) = delete; + + /// Do not use (needed only for pybind11). + ~ConfigMerger(); + +private: + ConfigMerger(); + + static void deleter(ConfigMerger * c); + + class Impl; + Impl * m_impl; + Impl * getImpl() { return m_impl; } + const Impl * getImpl() const { return m_impl; } +}; + +extern OCIOEXPORT std::ostream & operator<<(std::ostream &, const ConfigMerger &); + +namespace ConfigMergingHelpers +{ + +/** + * \brief Merge the input into the base config, using the supplied merge parameters. + * + * \param params ConfigMergingParameters controlling the merger. + * \param params The base config. + * \param params The input config to merge. + * \return The merged config object. + */ +extern OCIOEXPORT ConfigRcPtr MergeConfigs(const ConfigMergingParametersRcPtr & params, + const ConstConfigRcPtr & baseConfig, + const ConstConfigRcPtr & inputConfig); + +/** + * \brief Merge a single color space into the base config, using the supplied merge parameters. + * + * Note that the AdjustInputReferenceSpace merge parameter will be ignored and set to false. + * To use automatic reference space conversion, add the color space to an input config that + * has the necessary interchange role set. + * + * \param params ConfigMergingParameters controlling the merger. + * \param params The base config. + * \param params The input color space to merge. + * \return The merged config object. + */ +extern OCIOEXPORT ConfigRcPtr MergeColorSpace(const ConfigMergingParametersRcPtr & params, + const ConstConfigRcPtr & baseConfig, + const ConstColorSpaceRcPtr & colorspace); + +} // ConfigMergingHelpers + +} // namespace OCIO_NAMESPACE + +#endif // INCLUDED_OCIO_OPENCOLORAPPHELPERS_H diff --git a/third_party/tlRender-install-Release/include/OpenColorIO/OpenColorIO.h b/third_party/tlRender-install-Release/include/OpenColorIO/OpenColorIO.h new file mode 100644 index 00000000..c02a6c83 --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenColorIO/OpenColorIO.h @@ -0,0 +1,4126 @@ +// SPDX-License-Identifier: BSD-3-Clause +// Copyright Contributors to the OpenColorIO Project. + + +#ifndef INCLUDED_OCIO_OPENCOLORIO_H +#define INCLUDED_OCIO_OPENCOLORIO_H + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "OpenColorABI.h" +#include "OpenColorTypes.h" +#include "OpenColorTransforms.h" +#include "OpenColorAppHelpers.h" + +/* + +C++ API +======= + +**Usage Example:** *Compositing plugin that converts from "log" to "lin"* + +.. code-block:: cpp + + #include + namespace OCIO = OCIO_NAMESPACE; + + try + { + // Get the global OpenColorIO config + // This will auto-initialize (using $OCIO) on first use + OCIO::ConstConfigRcPtr config = OCIO::GetCurrentConfig(); + + // Get the processor corresponding to this transform. + OCIO::ConstProcessorRcPtr processor = config->getProcessor(OCIO::ROLE_COMPOSITING_LOG, + OCIO::ROLE_SCENE_LINEAR); + + // Get the corresponding CPU processor for 32-bit float image processing. + OCIO::ConstCPUProcessorRcPtr cpuProcessor = processor->getDefaultCPUProcessor(); + + // Wrap the image in a light-weight ImageDescription + OCIO::PackedImageDesc img(imageData, w, h, 4); + + // Apply the color transformation (in place) + cpuProcessor->apply(img); + } + catch(OCIO::Exception & exception) + { + std::cerr << "OpenColorIO Error: " << exception.what() << std::endl; + } + +*/ + +namespace OCIO_NAMESPACE +{ +/////////////////////////////////////////////////////////////////////////// +// Exceptions + +// Silence warning C4275 under Visual Studio: +// Exceptions derive from std::runtime_error but STL classes are not exportable. +#ifdef _MSC_VER +#pragma warning( push ) +#pragma warning( disable : 4275 ) +#endif + +/** + * \brief An exception class to throw for errors detected at runtime. + * + * \warning + * All functions in the Config class can potentially throw this exception. + */ +class OCIOEXPORT Exception : public std::runtime_error +{ +public: + Exception() = delete; + /// Constructor that takes a string as the exception message. + explicit Exception(const char *); + /// Constructor that takes an existing exception. + Exception(const Exception &); + Exception & operator= (const Exception &) = delete; + + ~Exception(); +}; + +/** + * \brief An exception class for errors detected at runtime. + * + * Thrown when OCIO cannot find a file that is expected to exist. This is provided as a custom + * type to distinguish cases where one wants to continue looking for missing files, but wants + * to properly fail for other error conditions. + */ +class OCIOEXPORT ExceptionMissingFile : public Exception +{ +public: + ExceptionMissingFile() = delete; + /// Constructor that takes a string as the exception message. + explicit ExceptionMissingFile(const char *); + /// Constructor that takes an existing exception. + ExceptionMissingFile(const ExceptionMissingFile &); + ExceptionMissingFile & operator= (const ExceptionMissingFile &) = delete; + + ~ExceptionMissingFile(); +}; + +// Restore default warning behaviour for Visual Studio. +#ifdef _MSC_VER +#pragma warning( pop ) +#endif + +/////////////////////////////////////////////////////////////////////////// +// Global +// ****** + +/** + * During normal usage, OpenColorIO tends to cache certain global information (such + * as the contents of LUTs on disk, intermediate results, etc.). Calling this function will flush + * all such information. The global information are related to LUT file identifications, loaded LUT + * file content and CDL transforms from loaded CDL files. + * + * Under normal usage, this is not necessary, but it can be helpful in particular instances, + * such as designing OCIO profiles, and wanting to re-read luts without restarting. + * + * \note + * This method does not apply to instance-specific caches such as the Processor cache in + * a Config instance or the GPU and CPU Processor caches in a Processor instance. So in cases + * where you still have a Config instance after calling ClearAllCaches, you should also call + * the Config's clearProcessorCache method. + */ +extern OCIOEXPORT void ClearAllCaches(); + +/** + * \brief Get the version number for the library, as a dot-delimited string + * (e.g., "1.0.0"). + * + * This is also available at compile time as OCIO_VERSION_FULL_STR. + */ +extern OCIOEXPORT const char * GetVersion(); + +/** + * \brief Get the version number for the library, as a + * single 4-byte hex number (e.g., 0x01050200 for "1.5.2"), to be used + * for numeric comparisons. + * + * This is also at compile time as OCIO_VERSION_HEX. + */ +extern OCIOEXPORT int GetVersionHex(); + +/** + * \brief Get the global logging level. + * + * You can override this at runtime using the \ref OCIO_LOGGING_LEVEL + * environment variable. The client application that sets this should use + * \ref SetLoggingLevel, and not the environment variable. The default value is INFO. + */ +extern OCIOEXPORT LoggingLevel GetLoggingLevel(); + +/// Set the global logging level. +extern OCIOEXPORT void SetLoggingLevel(LoggingLevel level); + +/** + * \brief Set the logging function to use; otherwise, use the default + * (i.e. std::cerr). + * + * \note + * The logging mechanism is thread-safe. + */ +extern OCIOEXPORT void SetLoggingFunction(LoggingFunction logFunction); +extern OCIOEXPORT void ResetToDefaultLoggingFunction(); +/// Log a message using the library logging function. +extern OCIOEXPORT void LogMessage(LoggingLevel level, const char * message); + +/** + * \brief Set the Compute Hash Function to use; otherwise, use the default. + * + * This is not used when using CreateFromFile with an OCIOZ archive or CreateFromConfigIOProxy. + * + * \param ComputeHashFunction + */ +extern OCIOEXPORT void SetComputeHashFunction(ComputeHashFunction hashFunction); +extern OCIOEXPORT void ResetComputeHashFunction(); + +// +// Note that the following environment variable access methods are not thread safe. +// + +/** + * Another call modifies the string obtained from a previous call as the method always uses the + * same memory buffer. + */ +extern OCIOEXPORT const char * GetEnvVariable(const char * name); +/// \warning This method is not thread safe. +extern OCIOEXPORT void SetEnvVariable(const char * name, const char * value); +/// \warning This method is not thread safe. +extern OCIOEXPORT void UnsetEnvVariable(const char * name); +//!cpp:function:: +extern OCIOEXPORT bool IsEnvVariablePresent(const char * name); + +/// Get the current configuration. +extern OCIOEXPORT ConstConfigRcPtr GetCurrentConfig(); + +/// Set the current configuration. This will then store a copy of the specified config. +extern OCIOEXPORT void SetCurrentConfig(const ConstConfigRcPtr & config); + +/** + * \brief Make a config path forward-compatible by replacing special built-in config names + * with the current name. + * + * Application developers should call this function on any config path they intend to persist + * (e.g., to include in a file saved from a DCC). + * + * As the built-in config collection evolves, special names such as "ocio://default" and + * "ocio://studio-config-latest" will point to newer versions of those configs. Therefore, it is + * recommended that application developers not save those strings and instead save the string that + * refers to the current version of that config. That way, it's guaranteed that there will be no + * change of behavior in the future. For example, as of OCIO 2.5, "ocio://default" should be saved + * as "ocio://cg-config-v4.0.0_aces-v2.0_ocio-v2.5". + * + * Note that there is no validation done on the path. That is left to the application since + * typically the application will load the config before attempting to save its path + * and therefore catch, for example, a badly formed URI such as "ocio:default". + * + * \return Resolved path if possible. Otherwise, the original path is returned unmodified. + */ +extern OCIOEXPORT const char * ResolveConfigPath(const char * originalPath) noexcept; + +/** + * \brief Extract an OCIO Config archive. + * + * Converts an archived config file (.ocioz file) back to its original form as a config file + * and associated LUT files. This creates destinationDir and then creates a config.ocio file + * at the root of that working directory and then unpacks the LUT files into their relative + * locations relative to that working directory, creating any necessary sub-directories in the + * process. Note that configs which contain LUT files outside the working directory are not + * archivable, and so this function will not create directories outside the working directory. + * + * \param archivePath Absolute path to the .ocioz file. + * \param destinationDir Absolute path of the directory you want to be created to contain the + * contents of the unarchived config. + * \throw Exception If the archive is not found or there is a problem extracting it. + */ +extern OCIOEXPORT void ExtractOCIOZArchive( + const char * archivePath, + const char * destinationDir +); + +/** + * \brief + * A config defines all the color spaces to be available at runtime. + * + * The color configuration (Config) is the main object for interacting with this library. It + * encapsulates all of the information necessary to use customized ColorSpaceTransform and + * DisplayViewTransform operations. + * + * See the \ref user-guide for more information on selecting, creating, and working with custom + * color configurations. + * + * For applications interested in using only one color config at a time (this is the vast majority + * of apps), their API would traditionally get the global configuration and use that, as opposed + * to creating a new one. This simplifies the use case for plugins and bindings, as it alleviates + * the need to pass around configuration handles. + * + * An example of an application where this would not be sufficient would be a multi-threaded image + * proxy server (daemon), which wished to handle multiple show configurations in a single process + * concurrently. This app would need to keep multiple configurations alive, and to manage them + * appropriately. + * + * Roughly speaking, a novice user should select a default configuration that most closely + * approximates the use case (animation, visual effects, etc.), and set the :envvar:`OCIO` + * environment variable to point at the root of that configuration. + * + * \note + * Initialization using environment variables is typically preferable in + * a multi-app ecosystem, as it allows all applications to be + * consistently configured. + * + * See \ref developers-usageexamples + */ +class OCIOEXPORT Config +{ +public: + + // + // Initialization + // + + /** + * \brief Create an empty config of the current version. + * + * Note that an empty config will not pass validation since required elements will be missing. + * \return The Config object. + */ + static ConfigRcPtr Create(); + + /** + * \brief Create a fall-back config. + * + * This may be useful to allow client apps to launch in cases when the + * supplied config path is not loadable. + * \return The Config object. + */ + static ConstConfigRcPtr CreateRaw(); + + /** + * \brief Create a configuration using the OCIO environment variable. + * + * Also supports the OCIO URI format for Built-in configs and supports archived configs. + * See \ref Config::CreateFromFile. + * + * If the variable is missing or empty, returns the same result as + * \ref Config::CreateRaw. + * \return The Config object. + */ + static ConstConfigRcPtr CreateFromEnv(); + + /** + * \brief Create a configuration using a specific config file. + * + * Supports the OCIO URI format for Built-in configs. + * See \ref Config::CreateFromBuiltinConfig. + * + * Supports archived configs (.ocioz files). + * + * \throw Exception If the file may not be read or does not parse. + * \return The Config object. + */ + static ConstConfigRcPtr CreateFromFile(const char * filename); + + /** + * \brief Create a configuration using a stream. + * + * Note that CreateFromStream does not set the working directory so the caller would need to + * set that separately in order to resolve FileTransforms. This function is typically only + * used for self-contained configs (no LUTs). + * + * Configs created from CreateFromStream can not be archived unless the working directory is + * set and contains any necessary LUT files. + * + * \param istream Stream to the config. + * \throw Exception If the stream does not parse. + * \return The Config object. + */ + static ConstConfigRcPtr CreateFromStream(std::istream & istream); + + /** + * \brief Create a config from the supplied ConfigIOProxy object. This allows the calling + * program to directly provide the config and associated LUTs rather than reading them from + * the standard file system. + * + * See the \ref ConfigIOProxy class documentation for more info. + * + * \param ciop ConfigIOProxy object providing access to the config's files. + * \throw Exception If the config may not be read from the proxy, or does not parse. + * \return The Config object. + */ + static ConstConfigRcPtr CreateFromConfigIOProxy(ConfigIOProxyRcPtr ciop); + + /** + * \brief Create a configuration using an OCIO built-in config. + * + * \param configName Built-in config name (with or without the "ocio://" URI prefix). + * + * Also supports the following OCIO URI format for Built-in configs: + * "ocio://default" - Default Built-in config. + * "ocio://cg-config-latest" - Latest Built-in CG config. + * "ocio://studio-config-latest" - Latest Built-in Studio config. + * "ocio://" - A specific Built-in config. + * + * The available configNames are: + * + * ACES Studio config, contains a more complete collection of color spaces and displays: + * "studio-config-v1.0.0_aces-v1.3_ocio-v2.1" + * "studio-config-v2.1.0_aces-v1.3_ocio-v2.3" + * "studio-config-v2.2.0_aces-v1.3_ocio-v2.4" + * "studio-config-v4.0.0_aces-v2.0_ocio-v2.5" + * + * ACES CG config, basic color spaces for computer graphics apps: + * "cg-config-v1.0.0_aces-v1.3_ocio-v2.1" + * "cg-config-v2.1.0_aces-v1.3_ocio-v2.3" + * "cg-config-v2.2.0_aces-v1.3_ocio-v2.4" + * "cg-config-v4.0.0_aces-v2.0_ocio-v2.5" + * + * More information is available at: + * %https://github.com/AcademySoftwareFoundation/OpenColorIO-Config-ACES + * + * Information about the available configs is available from the \ref BuiltinConfigRegistry. + * + * \throw Exception If the configName is not recognized. + * \return One of the configs built into the OCIO library. + */ + static ConstConfigRcPtr CreateFromBuiltinConfig(const char * configName); + + ConfigRcPtr createEditableCopy() const; + + /// Get the configuration major version. + unsigned int getMajorVersion() const; + + /** + * Set the configuration major version. + * + * Throws if it is not supported. Resets minor to the most recent minor for the given major. + */ + void setMajorVersion(unsigned int major); + + /// Get the configuration minor version. + unsigned int getMinorVersion() const; + + /// Set the configuration minor version. Throws if it is not supported for the current major. + void setMinorVersion(unsigned int minor); + + /// Set the configuration major and minor versions. Throws if version is not supported. + void setVersion(unsigned int major, unsigned int minor); + + /// Allows an older config to be serialized as the current version. + void upgradeToLatestVersion() noexcept; + + /** + * \brief Performs a thorough validation for the most common user errors. + * + * This will throw an exception if the config is malformed. The most + * common error occurs when references are made to colorspaces that do not + * exist. + */ + void validate() const; + + /** + * \brief Get/set a name string for the config. + * + * The name string may be used to communicate config update details or similar information + * to workflows external to OCIO in cases where the config path/filename itself does not + * provide adequate information. + */ + const char * getName() const noexcept; + void setName(const char * name) noexcept; + + /** + * \brief Get the family separator + * + * A single character used to separate the family string into tokens for use in hierarchical + * menus. Defaults to '/'. + */ + char getFamilySeparator() const; + /// Get the default family separator i.e. '/' . + static char GetDefaultFamilySeparator() noexcept; + /** + * \brief Set the family separator + * + * Succeeds if the characters is null or a valid character from the ASCII table i.e. from + * value 32 (i.e. space) to 126 (i.e. '~'); otherwise, it throws an exception. + */ + void setFamilySeparator(char separator); + + const char * getDescription() const; + void setDescription(const char * description); + + /** + * \brief Returns the string representation of the Config in YAML text form. + * + * This is typically stored on disk in a file with the extension .ocio. + * NB: This does not validate the config. Applications should validate before serializing. + */ + void serialize(std::ostream & os) const; + + /** + * This will produce a hash of the all colorspace definitions, etc. All external references, + * such as files used in FileTransforms, etc., will be incorporated into the cacheID. While + * the contents of the files are not read, the file system is queried for relevant information + * (mtime, inode) so that the config's cacheID will change when the underlying luts are updated. + * + * If a context is not provided, the current Context will be used. + * + * If a null context is provided, file references will not be taken into + * account (this is essentially a hash of Config::serialize). + */ + const char * getCacheID() const; + const char * getCacheID(const ConstContextRcPtr & context) const; + + // + // Resources + // + + ConstContextRcPtr getCurrentContext() const; + + /// Add (or update) an environment variable with a default value. + /// But it removes it if the default value is null. + void addEnvironmentVar(const char * name, const char * defaultValue); + int getNumEnvironmentVars() const; + const char * getEnvironmentVarNameByIndex(int index) const; + const char * getEnvironmentVarDefault(const char * name) const; + void clearEnvironmentVars(); + + /** + * \brief The EnvironmentMode controls the behavior of loadEnvironment. + * * ENV_ENVIRONMENT_LOAD_PREDEFINED - Only update vars already added to the Context. + * * ENV_ENVIRONMENT_LOAD_ALL - Load all env. vars into the Context. + * + * \note Loading ALL the env. vars may reduce performance and reduce cache efficiency. + * + * Client programs generally will not use these methods because the EnvironmentMode is + * set automatically when a Config is loaded. If the Config has an "environment" + * section, the mode is set to LOAD_PREDEFINED, and otherwise set to LOAD_ALL. + */ + void setEnvironmentMode(EnvironmentMode mode) noexcept; + EnvironmentMode getEnvironmentMode() const noexcept; + /// Initialize the environment/context variables in the Config's Context. + void loadEnvironment() noexcept; + + const char * getSearchPath() const; + /** + * \brief Set all search paths as a concatenated string, use ':' to separate the paths. + * + * See \ref addSearchPath for a more robust and platform-agnostic method of + * setting the search paths. + */ + void setSearchPath(const char * path); + + int getNumSearchPaths() const; + /** + * Get a search path from the list. + * + * The paths are in the order they will be searched (that is, highest to + * lowest priority). + */ + const char * getSearchPath(int index) const; + void clearSearchPaths(); + /** + * \brief Add a single search path to the end of the list. + * + * Paths may be either absolute or relative. Relative paths are + * relative to the working directory. Forward slashes will be + * normalized to reverse for Windows. Environment (context) variables + * may be used in paths. + */ + void addSearchPath(const char * path); + + const char * getWorkingDir() const; + /** + * \brief + * + * The working directory defaults to the location of the + * config file. It is used to convert any relative paths to absolute. + * If no search paths have been set, the working directory will be used + * as the fallback search path. No environment (context) variables may + * be used in the working directory. + */ + void setWorkingDir(const char * dirname); + + // + // ColorSpaces + // + + /** + * \brief Get all active color spaces having a specific category + * in the order they appear in the config file. + * + * \note + * If the category is null or empty, the method returns + * all the active color spaces like \ref Config::getNumColorSpaces + * and \ref Config::getColorSpaceNameByIndex do. + * + * \note + * It's worth noticing that the method returns a copy of the + * selected color spaces decoupling the result from the config. + * Hence, any changes on the config do not affect the existing + * color space sets, and vice-versa. + */ + ColorSpaceSetRcPtr getColorSpaces(const char * category) const; + + /** + * \brief Work on the color spaces selected by the reference color space type + * and visibility. + */ + int getNumColorSpaces(SearchReferenceSpaceType searchReferenceType, + ColorSpaceVisibility visibility) const; + + /** + * \brief Work on the color spaces selected by the reference color space + * type and visibility (active or inactive). + * + * Return empty for invalid index. + */ + const char * getColorSpaceNameByIndex(SearchReferenceSpaceType searchReferenceType, + ColorSpaceVisibility visibility, int index) const; + + /** + * \brief Work on the active color spaces only. + * + * \note + * Only works from the list of active color spaces. + */ + int getNumColorSpaces() const; + + /** + * Work on the active color spaces only and return null for invalid index. + * + * \note + * Only works from the list of active color spaces. + */ + const char * getColorSpaceNameByIndex(int index) const; + + /** + * \brief Get an index from the active color spaces only + * and return -1 if the name is not found. + * + * \note + * The fcn accepts either a color space name, role name, or alias. + * (Color space names take precedence over roles.) + */ + int getIndexForColorSpace(const char * name) const; + + /** + * \brief Get the color space from all the color spaces + * (i.e. active and inactive) and return null if the name is not found. + * + * \note + * The fcn accepts either a color space name, role name, or alias. + * (Color space names take precedence over roles.) + */ + ConstColorSpaceRcPtr getColorSpace(const char * name) const; + + /** + * Accepts an alias, role name, named transform name, or color space name and returns the + * color space name or the named transform name. + */ + const char * getCanonicalName(const char * name) const; + + /** + * \brief Add a color space to the configuration. + * + * \note + * If another color space is already present with the same name, + * this will overwrite it. This stores a copy of the specified + * color space. + * \note + * Adding a color space to a \ref Config does not affect any + * \ref ColorSpaceSet sets that have already been created. + */ + void addColorSpace(const ConstColorSpaceRcPtr & cs); + + /** + * \brief Remove a color space from the configuration. + * + * \note + * It does not throw an exception. Name must be the canonical name. If a role name or + * alias is provided or if the name is not in the config, nothing is done. + * \note + * Removing a color space from a \ref Config does not affect any + * \ref ColorSpaceSet sets that have already been created. + */ + void removeColorSpace(const char * name); + + /** + * Return true if the color space is used by a transform, a role, or a look. + * + * \note + * Name must be the canonical name. + */ + bool isColorSpaceUsed(const char * name) const noexcept; + + /** + * \brief Remove all the color spaces from the configuration. + * + * \note + * Removing color spaces from a \ref Config does not affect + * any \ref ColorSpaceSet sets that have already been created. + */ + void clearColorSpaces(); + + /** + * \brief Set/get a list of inactive color space or named transform names. + * + * Notes: + * * List can contain color space and/or named transform names. + * * The inactive spaces are color spaces that should not appear in application menus. + * * These color spaces will still work in Config::getProcessor calls. + * * The argument is a comma-delimited string. A null or empty string empties the list. + * * The environment variable OCIO_INACTIVE_COLORSPACES may also be used to set the + * inactive color space list. + * * The env. var. takes precedence over the inactive_colorspaces list in the config file. + * * Setting the list via the API takes precedence over either the env. var. or the + * config file list. + */ + void setInactiveColorSpaces(const char * inactiveColorSpaces); + const char * getInactiveColorSpaces() const; + + /// Return true if the color space name is present in the inactive_colorspaces list. + bool isInactiveColorSpace(const char * colorspace) const noexcept; + + /** + * \brief Return true if the specified color space is linear. + * + * The determination of linearity is made with respect to one of the two reference spaces + * (i.e., either the scene-referred one or the display-referred one). If the reference space + * type of the color space is the opposite of the requested reference space type, false is + * returned immediately rather than trying to invoke the default view transform to convert + * between the reference spaces. + * + * Note: This function relies on heuristics that may sometimes give an incorrect result. + * For example, if the encoding attribute is not set appropriately or the sampled values fail + * to detect non-linearity. + * + * The algorithm proceeds as follows: + * -- If the color space isdata attribute is true, return false. + * -- If the reference space type of the color space differs from the requested reference + * space type, return false. + * -- If the color space's encoding attribute is present, return true if it matches the + * expected reference space type (i.e., "scene-linear" for REFERENCE_SPACE_SCENE or + * "display-linear" for REFERENCE_SPACE_DISPLAY) and false otherwise. + * -- If the color space has no to_reference or from_reference transform, return true. + * -- Evaluate several points through the color space's transform and check if the output only + * differs by a scale factor (which may be different per channel, e.g. allowing an arbitrary + * matrix transform, with no offset). + * + * Note that the encoding test happens before the sampled value test to give config authors + * ultimate control over the linearity determination. For example, they could set the encoding + * attribute to indicate linearity if they want to ignore some areas of non-linearity + * (e.g., at extreme values). Or they could set it to indicate that a color space should not + * be considered linear, even if it is, in a mathematical sense. + * + * \param colorSpace Color space to evaluate. + * \param referenceSpaceType Evaluate linearity with respect to the specified reference space + * (either scene-referred or display-referred). + */ + bool isColorSpaceLinear(const char * colorSpace, ReferenceSpaceType referenceSpaceType) const; + + /** + * \brief Find the name of the color space in the source config that is the same as + * a color space in the default built-in config. For example, setting the + * builtinColorSpaceName to "sRGB - Texture" (a color space name from that + * config), would return the name for the corresponding sRGB texture space in + * the current config (or empty if it was not found). Note that this method + * relies on heuristics which may evolve over time and which may not work on + * all configs. + * + * The method only looks at active color spaces. If the interchange roles are + * missing and heuristics are used, only scene-referred color spaces are searched. + * + * \param srcConfig The config to search for the desired color space. + * \param builtinConfig The built-in config to use. See \ref Config::CreateFromBuiltinConfig. + * \param builtinColorSpaceName Color space name in the built-in default config. + * \return Matching color space name from the source config. Empty if not found. + * + * \throw Exception if an interchange space cannot be found or the equivalent space cannot be found. + */ + static const char * IdentifyBuiltinColorSpace(const ConstConfigRcPtr & srcConfig, + const ConstConfigRcPtr & builtinConfig, + const char * builtinColorSpaceName); + + /** + * \brief Identify the two names of a common color space that exists in both the + * given config and the provided built-in config that may be used for converting + * color spaces between the two configs. If both configs have the interchange + * role set, than the color spaces set to that role will be returned. Otherwise, + * heuristics will be used to try and identify a known color space in the source + * config. These are the same heuristics that are used for other methods such as + * identifyBuiltinColorSpace and GetProcessorTo/FromBuiltinColorSpace. + * + * Using this method in connection with GetProcessorFromConfigs is more efficient + * if you need to call GetProcessorTo/FromBuiltinColorSpace multiple times since it + * is only necessary to run the heuristics once (to identify the interchange spaces). + * + * The srcColorSpaceName and builtinColorSpace name are used to decide which + * interchange role to use (scene- or display-referred). However, they are not + * used if the interchange roles are not present and the heuristics are used. + * It is actually only the ReferenceSpaceType of the color spaces that are used, + * so it is not necessary to call this function multiple times if all the spaces + * are of the same type. (These are the same arguments that would also be set if + * you were instead calling GetProcessorTo/FromBuiltinColorSpace.) + * + * \param[out] srcInterchangeName Color space name from the source config. + * \param[out] builtinInterchangeName Corresponding color space name from the built-in config. + * \param srcConfig The config to search for the desired color space. + * \param srcColorSpaceName Color space name in the given config to convert to/from. + * \param builtinConfig The built-in config to use. See \ref Config::CreateFromBuiltinConfig. + * \param builtinColorSpaceName Color space name in the default built-in config. + * + * \throw Exception if either the srcInterchange or builtinInterchange cannot be identified. + */ + static void IdentifyInterchangeSpace(const char ** srcInterchangeName, + const char ** builtinInterchangeName, + const ConstConfigRcPtr & srcConfig, + const char * srcColorSpaceName, + const ConstConfigRcPtr & builtinConfig, + const char * builtinColorSpaceName); + + /** + * Methods related to Roles. + * + * A role allows a config author to indicate that a given color space should be used + * for a particular purpose. + * + * Role names may be passed to most functions that accept color space names, such as + * getColorSpace. So for example, you may find the name of the color space assigned + * to the scene_linear role by getting the color space object for "scene_linear" and + * then calling getName on the color space object. + */ + + /** + * \brief + * + * \note + * Setting the ``colorSpaceName`` name to a null string unsets it. + */ + void setRole(const char * role, const char * colorSpaceName); + int getNumRoles() const; + /// Return true if the role has been defined. + bool hasRole(const char * role) const; + /** + * \brief Get the role name at index, this will return values + * like 'scene_linear', 'compositing_log'. + * + * Return empty string if index is out of range. + */ + const char * getRoleName(int index) const; + /** + * \brief Get the role color space at index. + * + * Return empty string if index is out of range. + */ + const char * getRoleColorSpace(int index) const; + /** + * \brief Get the color space name used for the specified role. + * + * Return an empty string if the role is not present + */ + const char * getRoleColorSpace(const char * roleName) const noexcept; + + /** + * Methods related to displays and views. + * + * The following methods only manipulate active displays and views. Active + * displays and views are defined from an env. variable or from the config file. + * + * Looks is a potentially comma (or colon) delimited list of lookNames, + * Where +/- prefixes are optionally allowed to denote forward/inverse + * look specification. (And forward is assumed in the absence of either) + + * Add shared view (or replace existing one with same name). + * Shared views are defined at config level and can be referenced by several + * displays. Either provide a view transform and a display color space or + * just a color space (and a null view transform). Looks, rule and description + * are optional, they can be null or empty. + * + * Shared views using a view transform may use the token + * for the color space (see :c:var:`OCIO_VIEW_USE_DISPLAY_NAME`). In that + * case, when the view is referenced in a display, the display color space + * that is used will be the one matching the display name. In other words, + * the view will be customized based on the display it is used in. + * \ref Config::validate will throw if the config does not contain + * the matching display color space. + */ + + /// Check if a view within a given display is referencing one of the config's shared views. + bool isViewShared(const char * dispName, const char * viewName) const; + + /// Will throw if view or colorSpaceName are null or empty. + void addSharedView(const char * view, const char * viewTransformName, + const char * colorSpaceName, const char * looks, + const char * ruleName, const char * description); + /// Remove a shared view. Will throw if the view does not exist. + void removeSharedView(const char * view); + + /// Clear all shared views. This will throw if any displays are still using the shared views. + void clearSharedViews(); + + const char * getDefaultDisplay() const; + int getNumDisplays() const; + /// Will return "" if the index is invalid. + const char * getDisplay(int index) const; + + const char * getDefaultView(const char * display) const; + // Get the default view for a given color space using the viewing rules. + // This is the preferred call to use if the color space being viewed is known. + const char * getDefaultView(const char * display, const char * colorspaceName) const; + + /** + * Return the number of active views attached to the display including the number of + * shared views if any. Return 0 if display does not exist. + */ + int getNumViews(const char * display) const; + const char * getView(const char * display, int index) const; + + /** + * If the config has ViewingRules, get the number of active Views for this + * colorspace. (If there are no rules, it returns all of them.) + */ + int getNumViews(const char * display, const char * colorspaceName) const; + const char * getView(const char * display, const char * colorspaceName, int index) const; + + /** + * \brief Compare views in a pair of configs. + * + * Will return false if either of the views does not exist. This will return true even + * if the view is display-defined in one config and a reference to a shared view in the + * other config (both within the same display), as long as the contents match. The + * description text (if any) is ignored, since it is not a functional difference. + * + * Note that the comparison is only on the strings contained in the view definition, + * the function does not attempt to compare that the color spaces or view transforms + * being referenced are identical (only that they have the same name). + */ + static bool AreViewsEqual(const ConstConfigRcPtr & first, + const ConstConfigRcPtr & second, + const char * dispName, + const char * viewName); + + /** + * Returns the view_transform attribute of the (display, view) pair. View can + * be a shared view of the display. If display is null or empty, config shared views are used. + */ + const char * getDisplayViewTransformName(const char * display, const char * view) const; + /** + * Returns the colorspace attribute of the (display, view) pair. + * (Note that this may be either a color space or a display color space.) + */ + const char * getDisplayViewColorSpaceName(const char * display, const char * view) const; + /// Returns the looks attribute of a (display, view) pair. + const char * getDisplayViewLooks(const char * display, const char * view) const; + /// Returns the rule attribute of a (display, view) pair. + const char * getDisplayViewRule(const char * display, const char * view) const noexcept; + /// Returns the description attribute of a (display, view) pair. + const char * getDisplayViewDescription(const char * display, const char * view) const noexcept; + + /** + * \brief Determine if a display and view exist. + * + * This returns false if either the display or view doesn't exist. It works regardless + * of whether the display or view are active, and it works regardless of whether the + * view is display-defined or if the display has this as a shared view. It will only + * check config-level shared views if dispName is null. It will not check config level + * shared views if dispName is not null. + */ + bool hasView(const char * dispName, const char * viewName) const; + + /** + * For the (display, view) pair, specify which color space and look to use. + * If a look is not desired, then just pass a null or empty string. + */ + void addDisplayView(const char * display, const char * view, + const char * colorSpaceName, const char * looks); + + /** + * \brief + * + * For the (display, view) pair, specify the color space or alternatively + * specify the view transform and display color space. The looks, viewing rule, and + * description are optional. Pass a null or empty string for any optional arguments. + * If the view already exists, it is replaced. + * + * Will throw if: + * * Display, view or colorSpace are null or empty. + * * Display already has a shared view with the same name. + */ + void addDisplayView(const char * display, const char * view, const char * viewTransformName, + const char * colorSpaceName, const char * looks, + const char * ruleName, const char * description); + + /** + * \brief Add a (reference to a) shared view to a display. + * + * The shared view must be part of the config. See \ref Config::addSharedView + * + * This will throw if: + * * Display or view are null or empty. + * * Display already has a view (shared or not) with the same name. + */ + void addDisplaySharedView(const char * display, const char * sharedView); + + /** + * \brief Remove the view and the display if no more views. + * + * It does not remove the associated color space. If the view name is a + * shared view, it only removes the reference to the view from the display + * but the shared view, remains in the config. + * + * Will throw if the view does not exist. + */ + void removeDisplayView(const char * display, const char * view); + /// Clear all the displays. + void clearDisplays(); + + /** + * Methods related to the Virtual Display. + * + * ... (See descriptions for the non-virtual methods above.) + * + * The virtual display is the way to incorporate the ICC monitor profile for a user's display + * into OCIO. The views that are defined for the virtual display are the views that are used to + * create a new display for an ICC profile. They serve as a kind of template that lets OCIO + * know how to build the new display. + * + * Typically the views will define a View Transform and set the colorSpaceName to + * "" so that it will use the display color space with the same name as the + * display, in this case corresponding to the ICC profile. + * + */ + + /** + * \brief Determine if a virtual view exists. + * + * This returns false if the virtual view doesn't exist. It works regardless of + * whether the virtual view is active, and it works regardless of whether the virtual + * view is display-defined or if the display has this as a shared virtual view. + */ + bool hasVirtualView(const char * viewName) const; + + /// Check if a given virtual view is referencing one of the config's shared views. + bool isVirtualViewShared(const char * viewName) const; + + void addVirtualDisplayView(const char * view, + const char * viewTransformName, + const char * colorSpaceName, + const char * looks, + const char * ruleName, + const char * description); + + void addVirtualDisplaySharedView(const char * sharedView); + + /// Get the number of views associated to the virtual display. + int getVirtualDisplayNumViews(ViewType type) const noexcept; + /// Get the view name at a specific index. + const char * getVirtualDisplayView(ViewType type, int index) const noexcept; + + /** + * \brief Compare virtual views in a pair of configs. + * + * Will return false if either of the virtual views does not exist. This will return true + * even if the virtual view is display-defined in one config and a reference to a shared + * virtual view in the other config, as long as the contents match. + * + * The description text (if any) is ignored, since it is not a functional difference. + * + * Note that the comparison is only on the strings contained in the view definition, + * the function does not attempt to compare that the color spaces or view transforms + * being referenced are identical (only that they have the same name). + */ + static bool AreVirtualViewsEqual(const ConstConfigRcPtr & first, + const ConstConfigRcPtr & second, + const char * viewName); + + const char * getVirtualDisplayViewTransformName(const char * view) const noexcept; + const char * getVirtualDisplayViewColorSpaceName(const char * view) const noexcept; + const char * getVirtualDisplayViewLooks(const char * view) const noexcept; + const char * getVirtualDisplayViewRule(const char * view) const noexcept; + const char * getVirtualDisplayViewDescription(const char * view) const noexcept; + + /// Remove the view from the virtual display. + void removeVirtualDisplayView(const char * view) noexcept; + + /// Clear the virtual display. + void clearVirtualDisplay() noexcept; + + /** + * \brief Instantiate a new display from a virtual display, using the monitor name. + * + * This method uses the virtual display to create an actual display for the given monitorName. + * The new display will receive the views from the virtual display. + * + * After the ICC profile is read, a display name will be created by combining the description + * text from the profile with the monitorName obtained from the OS. Use the SystemMonitors class + * to obtain the list of monitorName strings for the displays connected to the computer. + * + * A new display color space will also be created using the display name. It will have a + * from_display_reference transform that is a FileTransform pointing to the ICC profile. + * + * Any instantiated display color spaces for a virtual display are intended to be temporary + * (i.e. last as long as the current session). By default, they are not saved when writing a + * config file. If there is a need to make it a permanent color space, it may be desirable to + * copy the ICC profile somewhere under the config search_path. + * + * Will throw if the config does not have a virtual display or if the monitorName does not exist. + * + * If there is already a display or a display color space with the name monitorName, it will be + * replaced/updated. + * + * Returns the index of the display. + */ + int instantiateDisplayFromMonitorName(const char * monitorName); + + /** + * \brief Instantiate a new display from a virtual display, using an ICC profile. + * + * On platforms such as Linux, where the SystemMonitors class is not able to obtain a list of + * ICC profiles from the OS, this method may be used to manually specify a path to an ICC profile. + * + * Will throw if the virtual display definition is missing from the config. + * + * Returns the index of the display. + */ + int instantiateDisplayFromICCProfile(const char * ICCProfileFilepath); + + /** + * \brief + * + * The Active Displays list allows end users, config authors, and client apps to filter and + * reorder of the list of displays available in a user-interface. The list may be left empty + * to indicate all displays are active. + * + * The first active display is the config's Default Display. + * + * If the active list would remove all displays from a config, it is ignored (though the + * config won't validate). + * + * When serialized in the config, commas are used as separators. However, if a display name + * contains a comma, the name will be enclosed in quotes so its comma is not a separator. + * + * The OCIO_ACTIVE_DISPLAYS environment variable will override the active list specified in + * the config file as well as any modifications made by the client app. These functions + * only get and set what is in the config object and do not take into account the override + * and thus may not represent the actual user experience. + */ + /// Set all active displays at once as a comma or colon delimited string. This replaces any + /// previous contents of the list. + void setActiveDisplays(const char * displays); + /// Get a string with all active displays (as it would appear in a config file). + /// Commas are always used as the separator. + const char * getActiveDisplays() const; + /// Get the number of active displays. + int getNumActiveDisplays() const; + /// Get a single active display, by index. Returns nullptr if the index is out of range. + const char * getActiveDisplay(int index) const; + /// Add a single active display to the end of the list. If the display is already present, + /// no action is taken. + void addActiveDisplay(const char * display); + /// Remove a single display. Will throw if the display is not present. + void removeActiveDisplay(const char * display); + /// Clear the active displays list. + void clearActiveDisplays(); + + /** + * \brief + * + * The Active Views list allows end users, config authors, and client apps to filter and + * reorder of the list of views available in a user-interface. The list may be left empty + * to indicate all views are active. + * + * The first active view for a display is its Default View. + * + * If the active list would remove all views from a display, the list is ignored for that + * display and all views are shown for it. + * + * When serialized in the config, commas are used as separators. However, if a view name + * contains a comma, the name will be enclosed in quotes so its comma is not a separator. + * + * The OCIO_ACTIVE_VIEWS environment variable will override the active list specified in + * the config file as well as any modifications made by the client app. These functions + * only get and set what is in the config object and do not take into account the override + * and thus may not represent the actual user experience. + */ + /// Set all active views at once as a comma or colon delimited string. This replaces any + /// previous contents of the list. + void setActiveViews(const char * views); + /// Get a string with all active views (as it would appear in a config file). + /// Commas are always used as the separator. + const char * getActiveViews() const; + /// Get the number of active views. + int getNumActiveViews() const; + /// Get a single active view, by index. Returns nullptr if the index is out of range. + const char * getActiveView(int index) const; + /// Add a single active view to the end of the list. If the view is already present, + /// no action is taken. + void addActiveView(const char * view); + /// Remove a single view. Will throw if the view is not present. + void removeActiveView(const char * view); + /// Clear the active views list. + void clearActiveViews(); + + /// Get all displays in the config, ignoring the active_displays list. + int getNumDisplaysAll() const noexcept; + const char * getDisplayAll(int index) const noexcept; + int getDisplayAllByName(const char *) const noexcept; + /** + * Will be true for a display that was instantiated from a virtual display. These displays are + * intended to be temporary (i.e. for the current session) and are not saved to a config file. + */ + bool isDisplayTemporary(int index) const noexcept; + /** + * Allows setting the flag that controls whether a display is temporary. This may be helpful, + * for example, to share a config with a temporary instantiated display with an OFX plug-in. + */ + void setDisplayTemporary(int index, bool isTemporary) noexcept; + + /** + * Get either the shared or display-defined views for a display. The + * active_views list is ignored. Passing a null or empty display (with type=VIEW_SHARED) + * returns the contents of the shared_views section of the config. Return 0 if display + * does not exist. + */ + int getNumViews(ViewType type, const char * display) const; + const char * getView(ViewType type, const char * display, int index) const; + + // + // Viewing Rules + // + + /// Get read-only version of the viewing rules. + ConstViewingRulesRcPtr getViewingRules() const noexcept; + + /** + * \brief Set viewing rules. + * + * \note + * The argument is cloned. + */ + void setViewingRules(ConstViewingRulesRcPtr viewingRules); + + // + // Luma + // ^^^^ + + /** + * \brief Get the default coefficients for computing luma. + * + * \note + * There is no "1 size fits all" set of luma coefficients. (The + * values are typically different for each colorspace, and the + * application of them may be nonsensical depending on the + * intensity coding anyways). Thus, the 'right' answer is to make + * these functions on the ColorSpace class. However, it's + * often useful to have a config-wide default so here it is. We will + * add the colorspace specific luma call if/when another client is + * interesting in using it. + */ + void getDefaultLumaCoefs(double * rgb) const; + /// These should be normalized (sum to 1.0 exactly). + void setDefaultLumaCoefs(const double * rgb); + + + // + // Look + // + + // Manager per-shot look settings. + + ConstLookRcPtr getLook(const char * name) const; + + int getNumLooks() const; + + const char * getLookNameByIndex(int index) const; + + void addLook(const ConstLookRcPtr & look); + + void clearLooks(); + + + // + // View Transforms + // + + // ViewTransform objects are used with the display reference space. + + int getNumViewTransforms() const noexcept; + + ConstViewTransformRcPtr getViewTransform(const char * name) const noexcept; + + const char * getViewTransformNameByIndex(int i) const noexcept; + + void addViewTransform(const ConstViewTransformRcPtr & viewTransform); + + /** + * \brief + * + * This view transform is the one that will be used by default if a ColorSpaceTransform is + * needed between a scene-referred and display-referred color space. The config author may + * specify a transform to use via the default_view_transform entry in the config. If that is + * not present, or does not return a valid view transform from the scene-referred connection + * space, the fall-back is to use the first valid view transform in the config. Returns a + * null ConstTransformRcPtr if there isn't one. + */ + ConstViewTransformRcPtr getDefaultSceneToDisplayViewTransform() const; + + /** + * Get or set the default_view_transform string from the config. + * + * Note that if this is not the name of a valid view transform from the scene-referred + * connection space, it will be ignored. + */ + const char * getDefaultViewTransformName() const noexcept; + void setDefaultViewTransformName(const char * defaultName) noexcept; + + + void clearViewTransforms(); + + /** + * Methods related to named transforms. + */ + + /** + * \brief Work on the named transforms selected by visibility. + */ + int getNumNamedTransforms(NamedTransformVisibility visibility) const noexcept; + + /** + * \brief Work on the named transforms selected by visibility (active or inactive). + * + * Return an empty string for invalid index. + */ + const char * getNamedTransformNameByIndex(NamedTransformVisibility visibility, + int index) const noexcept; + + /// Work on the active named transforms only. + int getNumNamedTransforms() const noexcept; + + /// Work on the active named transforms only and return an empty string for invalid index. + const char * getNamedTransformNameByIndex(int index) const noexcept; + + /// Get an index from the active named transforms only and return -1 if the name is not found. + int getIndexForNamedTransform(const char * name) const noexcept; + + /** + * \brief Get the named transform from all the named transforms (i.e. active and inactive) and + * return null if the name is not found. + */ + ConstNamedTransformRcPtr getNamedTransform(const char * name) const noexcept; + + /** + * \brief Add or replace named transform. + * + * \note + * Throws if namedTransform is null, name is missing, or no transform is set. Also throws + * if the name or the aliases conflict with names or aliases already in the config. + */ + void addNamedTransform(const ConstNamedTransformRcPtr & namedTransform); + + /** + * \brief Remove a named transform. (Does nothing if name is not found.) + */ + void removeNamedTransform(const char * name); + + /// Clear all named transforms. + void clearNamedTransforms(); + + // + // File Rules + // + + /// Get read-only version of the file rules. + ConstFileRulesRcPtr getFileRules() const noexcept; + + /** + * \brief Set file rules. + * + * \note + * The argument is cloned. + */ + void setFileRules(ConstFileRulesRcPtr fileRules); + + /// Get the color space of the first rule that matched filePath. (For v1 configs, this is + /// equivalent to calling parseColorSpaceFromString with strictparsing set to false.) + const char * getColorSpaceFromFilepath(const char * filePath) const; + + /** + * Most applications will use the preceding method, but this method may be + * used for applications that want to know which was the highest priority rule to match + * filePath. \ref FileRules::getNumCustomKeys and custom keys methods + * may then be used to get additional information about the matching rule. + */ + const char * getColorSpaceFromFilepath(const char * filePath, size_t & ruleIndex) const; + + /** + * \brief + * + * Returns true if the only rule matched by filePath is the default rule. + * This is a convenience method for applications that want to require the user to manually + * choose a color space when strictParsing is true and no other rules match. + */ + bool filepathOnlyMatchesDefaultRule(const char * filePath) const; + + /** + * Given the specified string, get the longest, right-most, colorspace substring that + * appears. + * + * * If strict parsing is enabled, and no color space is found, return + * an empty string. + * * If strict parsing is disabled, return ROLE_DEFAULT (if defined). + * * If the default role is not defined, return an empty string. + */ + OCIO_DEPRECATED("This was marked as deprecated starting in v2.0, please use Config::getColorSpaceFromFilepath().") + const char * parseColorSpaceFromString(const char * str) const; + + bool isStrictParsingEnabled() const; + void setStrictParsingEnabled(bool enabled); + + // + // Processors + // + + // Create a Processor to assemble a transformation between two + // color spaces. It may then be used to create a CPUProcessor + // or GPUProcessor to process/convert pixels. + + /// Get the processor to apply a ColorSpaceTransform from a source to a destination + /// color space. + ConstProcessorRcPtr getProcessor(const ConstContextRcPtr & context, + const ConstColorSpaceRcPtr & srcColorSpace, + const ConstColorSpaceRcPtr & dstColorSpace) const; + ConstProcessorRcPtr getProcessor(const ConstColorSpaceRcPtr & srcColorSpace, + const ConstColorSpaceRcPtr & dstColorSpace) const; + + /** + * \brief + * + * \note + * Names can be colorspace name, role name, or a combination of both. + */ + ConstProcessorRcPtr getProcessor(const char * srcColorSpaceName, + const char * dstColorSpaceName) const; + ConstProcessorRcPtr getProcessor(const ConstContextRcPtr & context, + const char * srcColorSpaceName, + const char * dstColorSpaceName) const; + + /// Get the processor to apply a DisplayViewTransform for a display and view. Refer to the + /// Display/View Registration section above for more info on the display and view arguments. + ConstProcessorRcPtr getProcessor(const char * srcColorSpaceName, + const char * display, + const char * view, + TransformDirection direction) const; + + ConstProcessorRcPtr getProcessor(const ConstContextRcPtr & context, + const char * srcColorSpaceName, + const char * display, + const char * view, + TransformDirection direction) const; + + /// Get the processor to apply a NamedTransform in the specified direction. + ConstProcessorRcPtr getProcessor(const ConstNamedTransformRcPtr & namedTransform, + TransformDirection direction) const; + ConstProcessorRcPtr getProcessor(const ConstContextRcPtr & context, + const ConstNamedTransformRcPtr & namedTransform, + TransformDirection direction) const; + + ConstProcessorRcPtr getProcessor(const char * namedTransformName, + TransformDirection direction) const; + ConstProcessorRcPtr getProcessor(const ConstContextRcPtr & context, + const char * namedTransformName, + TransformDirection direction) const; + + /** + * \brief Get the processor for the specified transform. + * + * Not often needed, but will allow for the re-use of atomic OCIO + * functionality (such as to apply an individual LUT file). + */ + ConstProcessorRcPtr getProcessor(const ConstTransformRcPtr & transform) const; + ConstProcessorRcPtr getProcessor(const ConstTransformRcPtr & transform, + TransformDirection direction) const; + ConstProcessorRcPtr getProcessor(const ConstContextRcPtr & context, + const ConstTransformRcPtr & transform, + TransformDirection direction) const; + + /** + * \brief Get a Processor to or from a known external color space. + * + * These methods provide a way to interface color spaces in a config with known standard + * external color spaces. The set of external color space are those contained in the current + * default Built-in config. This includes common spaces such as "Linear Rec.709 (sRGB)", + * "sRGB - Texture", "ACEScg", and "ACES2065-1". + * + * If the source config defines the necessary Interchange Role (typically "aces_interchange"), + * then the conversion will be well-defined and equivalent to calling GetProcessorFromConfigs + * with the source config and the Built-in config. + * + * However, if the Interchange Roles are not present, heuristics will be used to try and + * identify a common color space in the source config that may be used to allow the conversion + * to proceed. If the heuristics fail to find a suitable space, an exception is thrown. + * The heuristics may evolve, so the results returned by this function for a given source config + * and color space may change in future releases of the library. However, the Interchange Roles + * are required in config versions 2.2 and higher, so it is hoped that the need for the heuristics + * will decrease over time. + * + * \param srcConfig The user's source config. + * \param srcColorSpaceName The name of the color space in the source config. + * \param builtinColorSpaceName The name of the color space in the current default Built-in config. + * + * \throw Exception if either the src or builtin interchange space cannot be identified. + */ + static ConstProcessorRcPtr GetProcessorToBuiltinColorSpace(ConstConfigRcPtr srcConfig, + const char * srcColorSpaceName, + const char * builtinColorSpaceName); + /** + * \brief See description of GetProcessorToBuiltinColorSpace. + * + * \param builtinColorSpaceName The name of the color space in the current default Built-in config. + * \param srcConfig The user's source config. + * \param srcColorSpaceName The name of the color space in the source config. + */ + static ConstProcessorRcPtr GetProcessorFromBuiltinColorSpace(const char * builtinColorSpaceName, + ConstConfigRcPtr srcConfig, + const char * srcColorSpaceName); + + /** + * \brief Get a processor to convert between color spaces in two separate configs. + * + * This relies on both configs having the aces_interchange role (when srcName + * is scene-referred) or the role cie_xyz_d65_interchange (when srcName is + * display-referred) defined. An exception is thrown if that is not the case. + */ + static ConstProcessorRcPtr GetProcessorFromConfigs(const ConstConfigRcPtr & srcConfig, + const char * srcColorSpaceName, + const ConstConfigRcPtr & dstConfig, + const char * dstColorSpaceName); + static ConstProcessorRcPtr GetProcessorFromConfigs(const ConstContextRcPtr & srcContext, + const ConstConfigRcPtr & srcConfig, + const char * srcColorSpaceName, + const ConstContextRcPtr & dstContext, + const ConstConfigRcPtr & dstConfig, + const char * dstColorSpaceName); + + /** + * The srcInterchangeName and dstInterchangeName must refer to a pair of + * color spaces in the two configs that are the same. A role name may also be used. + * + * Note: For all of the two-config GetProcessor functions, if either the source or + * destination color spaces are data spaces, the entire processor will be a no-op. + */ + static ConstProcessorRcPtr GetProcessorFromConfigs(const ConstConfigRcPtr & srcConfig, + const char * srcColorSpaceName, + const char * srcInterchangeName, + const ConstConfigRcPtr & dstConfig, + const char * dstColorSpaceName, + const char * dstInterchangeName); + + static ConstProcessorRcPtr GetProcessorFromConfigs(const ConstContextRcPtr & srcContext, + const ConstConfigRcPtr & srcConfig, + const char * srcColorSpaceName, + const char * srcInterchangeName, + const ConstContextRcPtr & dstContext, + const ConstConfigRcPtr & dstConfig, + const char * dstColorSpaceName, + const char * dstInterchangeName); + + /** + * \brief Get a processor to convert from a color space to a display and view in + * two separate configs. + */ + static ConstProcessorRcPtr GetProcessorFromConfigs(const ConstConfigRcPtr & srcConfig, + const char * srcColorSpaceName, + const ConstConfigRcPtr & dstConfig, + const char * dstDisplay, + const char * dstView, + TransformDirection direction); + + static ConstProcessorRcPtr GetProcessorFromConfigs(const ConstContextRcPtr & srcContext, + const ConstConfigRcPtr & srcConfig, + const char * srcColorSpaceName, + const ConstContextRcPtr & dstContext, + const ConstConfigRcPtr & dstConfig, + const char * dstDisplay, + const char * dstView, + TransformDirection direction); + + /** + * The srcInterchangeName and dstInterchangeName must refer to a pair of + * color spaces in the two configs that are the same. A role name may also be used. + */ + static ConstProcessorRcPtr GetProcessorFromConfigs(const ConstConfigRcPtr & srcConfig, + const char * srcColorSpaceName, + const char * srcInterchangeName, + const ConstConfigRcPtr & dstConfig, + const char * dstDisplay, + const char * dstView, + const char * dstInterchangeName, + TransformDirection direction); + + static ConstProcessorRcPtr GetProcessorFromConfigs(const ConstContextRcPtr & srcContext, + const ConstConfigRcPtr & srcConfig, + const char * srcColorSpaceName, + const char * srcInterchangeName, + const ConstContextRcPtr & dstContext, + const ConstConfigRcPtr & dstConfig, + const char * dstDisplay, + const char * dstView, + const char * dstInterchangeName, + TransformDirection direction); + + /// Get the Processor Cache flags. + ProcessorCacheFlags getProcessorCacheFlags() const noexcept; + + /// Control the caching of processors in the config instance. By default, caching is on. + /// The flags allow turning caching off entirely or only turning it off if dynamic + /// properties are being used by the processor. + void setProcessorCacheFlags(ProcessorCacheFlags flags) const noexcept; + + /** + * \brief Clears this config's cache of Processor, CPUProcessor, and GPUProcessor instances. + * + * This must be done if any of the LUT files used by these Processors have been modified. + * Note that setProcessorCacheFlags(PROCESSOR_CACHE_OFF) turns off caching but does not clear + * any existing cache. + */ + void clearProcessorCache() noexcept; + + /// Set the ConfigIOProxy object used to provision the config and LUTs from somewhere other + /// than the file system. (This is set on the config's embedded Context object.) + void setConfigIOProxy(ConfigIOProxyRcPtr ciop); + ConfigIOProxyRcPtr getConfigIOProxy() const; + + /** + * \brief Verify if the config is archivable. + * + * A config is not archivable if any of the following are true: + * -- The working directory is not set + * -- It contains FileTransforms with a src outside the working directory + * -- The search path contains paths outside the working directory + * -- The search path contains paths that start with a context variable + * + * Context variables are allowed but the intent is that they may only resolve to paths that + * are within or below the working directory. This is because the archiving function will + * only archive files that are within the working directory in order to ensure that if it is + * later expanded, that it will not create any files outside this directory. + * + * For example, a context variable on the search path intended to contain the name of a + * sub-directory under the working directory must have the form "./$DIR_NAME" rather than just + * "$DIR_NAME" to be considered archivable. This is imperfect since there is no way to + * prevent the context variable from creating a path outside the working dir, but it should + * at least draw attention to the fact that the archive would fail if used with context vars + * that try to abuse the intended functionality. + * + * \return bool Archivable if true. + */ + bool isArchivable() const; + + /** + * \brief Archive the config and its LUTs into the specified output stream. + * + * The config is archived by serializing the Config object into a file named "config.ocio" and + * then walking through the current working directory and any sub-directories. Any files that + * have an extension matching a supported LUT file format are added to the archive. Any files + * that do not have an extension (or have some unsupported LUT extension, including .ocio), + * will not be added to the archive. To reiterate, it is the in-memory Config object that is + * archived, and not any .ocio file in the current working directory. The directory structure + * relative to the working directory is preserved. No files outside the working directory are + * archived so that if it is later expanded, no files will be created outside the working dir. + * + * The reason the archive is created using all supported LUT file extensions rather than by + * trying to resolve all the FileTransforms in the Config to specific files is because of the + * goal to allow context variables to continue to work. + * + * If a Config is created with CreateFromStream, CreateFromFile with an OCIOZ archive, or + * CreateFromConfigIOProxy, it cannot be archived unless the working directory is manually set + * to a directory that contains any necessary LUT files. + * + * The provided output stream must be closed by the caller, if necessary (e.g., an ofstream). + * + * \param ostream The output stream to write to. + */ + void archive(std::ostream & ostream) const; + + Config(const Config &) = delete; + Config& operator= (const Config &) = delete; + + /// Do not use (needed only for pybind11). + ~Config(); + +private: + Config(); + + static void deleter(Config* c); + + class Impl; + Impl * m_impl; + Impl * getImpl() { return m_impl; } + const Impl * getImpl() const { return m_impl; } +}; + +extern OCIOEXPORT std::ostream& operator<< (std::ostream&, const Config&); + + +/** + * \brief + * The File Rules are a set of filepath to color space mappings that are evaluated + * from first to last. The first rule to match is what determines which color space is + * returned. There are four types of rules available. Each rule type has a name key that may + * be used by applications to refer to that rule. Name values must be unique i.e. using a + * case insensitive comparison. The other keys depend on the rule type: + * + * * *Basic Rule*: This is the basic rule type that uses Unix glob style pattern matching and + * is thus very easy to use. It contains the keys: + * * name: Name of the rule + * * colorspace: Color space name to be returned. + * * pattern: Glob pattern to be used for the main part of the name/path. + * * extension: Glob pattern to be used for the file extension. Note that if glob tokens + * are not used, the extension will be used in a non-case-sensitive way by default. + * + * * *Regex Rule*: This is similar to the basic rule but allows additional capabilities for + * power-users. It contains the keys: + * * name: Name of the rule + * * colorspace: Color space name to be returned. + * * regex: Regular expression to be evaluated. + * + * * *OCIO v1 style Rule*: This rule allows the use of the OCIO v1 style, where the string + * is searched for color space names from the config. This rule may occur 0 or 1 times + * in the list. The position in the list prioritizes it with respect to the other rules. + * StrictParsing is not used. If no color space is found in the path, the rule will not + * match and the next rule will be considered. + * see \ref insertPathSearchRule. + * It has the key: + * * name: Must be "ColorSpaceNamePathSearch". + * + * * *Default Rule*: The file_rules must always end with this rule. If no prior rules match, + * this rule specifies the color space applications will use. + * see \ref setDefaultRuleColorSpace. + * It has the keys: + * * name: must be "Default". + * * colorspace : Color space name to be returned. + * + * Custom string keys and associated string values may be used to convey app or + * workflow-specific information, e.g. whether the color space should be left as is + * or converted into a working space. + * + * Getters and setters are using the rule position, they will throw if the position is not + * valid. If the rule at the specified position does not implement the requested property + * getter will return NULL and setter will throw. + * + * When loading a v1 config, a set of FileRules are created with ColorSpaceNamePathSearch followed + * by the Default rule pointing to the default role. This allows getColorSpaceFromFilepath to emulate + * OCIO v1 code that used parseColorSpaceFromString with strictparsing set to false. + */ + +class OCIOEXPORT FileRules +{ +public: + + /// Reserved rule name for the default rule. + static const char * DefaultRuleName; + /// Reserved rule name for the file path search rule \see FileRules::insertPathSearchRule. + static const char * FilePathSearchRuleName; + + /** + * Creates FileRules for a Config. File rules will contain the default rule + * using the default role. The default rule cannot be removed. + */ + static FileRulesRcPtr Create(); + + /// The method clones the content decoupling the two instances. + FileRulesRcPtr createEditableCopy() const; + + /// Does include default rule. Result will be at least 1. + size_t getNumEntries() const noexcept; + + /// Get the index from the rule name. Throws if the rule is not found. + size_t getIndexForRule(const char * ruleName) const; + + /// Get name of the rule. + const char * getName(size_t ruleIndex) const; + + /// Setting pattern will erase regex. + const char * getPattern(size_t ruleIndex) const; + void setPattern(size_t ruleIndex, const char * pattern); + + /// Setting extension will erase regex. + const char * getExtension(size_t ruleIndex) const; + void setExtension(size_t ruleIndex, const char * extension); + + /// Setting a regex will erase pattern & extension. + const char * getRegex(size_t ruleIndex) const; + void setRegex(size_t ruleIndex, const char * regex); + + /// Set the rule's color space (may also be a role). + const char * getColorSpace(size_t ruleIndex) const; + void setColorSpace(size_t ruleIndex, const char * colorSpace); + + /// Get number of key/value pairs. + size_t getNumCustomKeys(size_t ruleIndex) const; + /// Get name of key. + const char * getCustomKeyName(size_t ruleIndex, size_t key) const; + /// Get value for the key. + const char * getCustomKeyValue(size_t ruleIndex, size_t key) const; + /** + * Adds a key/value or replace value if key exists. Setting a NULL or an + * empty value will erase the key. + */ + void setCustomKey(size_t ruleIndex, const char * key, const char * value); + + /** + * \brief Insert a rule at a given ruleIndex. + * + * Rule currently at ruleIndex will be pushed to index: ruleIndex + 1. + * Name must be unique. + * - "Default" is a reserved name for the default rule. The default rule is automatically + * added and can't be removed. (see \ref FileRules::setDefaultRuleColorSpace ). + * - "ColorSpaceNamePathSearch" is also a reserved name + * (see \ref FileRules::insertPathSearchRule ). + * + * Will throw if pattern, extension or regex is a null or empty string. + * + * Will throw if ruleIndex is not less than \ref FileRules::getNumEntries . + */ + void insertRule(size_t ruleIndex, const char * name, const char * colorSpace, + const char * pattern, const char * extension); + void insertRule(size_t ruleIndex, const char * name, const char * colorSpace, + const char * regex); + /** + * \brief Helper function to insert a rule. + * + * Uses \ref Config:parseColorSpaceFromString to search the path for any of + * the color spaces named in the config (as per OCIO v1). + */ + void insertPathSearchRule(size_t ruleIndex); + /// Helper function to set the color space for the default rule. + void setDefaultRuleColorSpace(const char * colorSpace); + + /** + * \brief + * + * \note + * Default rule can't be removed. + * Will throw if ruleIndex + 1 is not less than \ref FileRules::getNumEntries . + */ + void removeRule(size_t ruleIndex); + + /// Move a rule closer to the start of the list by one position. + void increaseRulePriority(size_t ruleIndex); + + /// Move a rule closer to the end of the list by one position. + void decreaseRulePriority(size_t ruleIndex); + + /** + * Check if there is only the default rule using default role and no custom key. This is the + * default FileRules state when creating a new config. + */ + bool isDefault() const noexcept; + + FileRules(const FileRules &) = delete; + FileRules & operator= (const FileRules &) = delete; + + /// Do not use (needed only for pybind11). + virtual ~FileRules(); + +private: + FileRules(); + + static void deleter(FileRules* c); + + friend class Config; + + class Impl; + Impl * m_impl; + Impl * getImpl() { return m_impl; } + const Impl * getImpl() const { return m_impl; } +}; + +extern OCIOEXPORT std::ostream & operator<< (std::ostream &, const FileRules &); + + + +/** + * ViewingRules + * + * Viewing Rules allow config authors to filter the list of views an application should offer + * based on the color space of an image. For example, a config may define a large number of + * views but not all of them may be appropriate for use with all color spaces. E.g., some views + * may be intended for use with scene-linear color space encodings and others with video color + * space encodings. + * + * Each rule has a name key for applications to refer to the rule. Name values must be unique + * (using case insensitive comparison). Viewing Rules may also have the following keys: + * + * * colorspaces: Either a single colorspace name or a list of names. + * + * * encodings: One or more strings to be found in the colorspace's encoding attribute. + * Either this attribute or colorspaces must be present, but not both. + * + * * custom : Allows arbitrary key / value string pairs, similar to FileRules. + * + * Getters and setters are using the rule position, they will throw if the position is not + * valid. +*/ +class OCIOEXPORT ViewingRules +{ +public: + /// Creates ViewingRules for a Config. + static ViewingRulesRcPtr Create(); + + /// The method clones the content decoupling the two instances. + ViewingRulesRcPtr createEditableCopy() const; + + size_t getNumEntries() const noexcept; + + /** + * Get the index from the rule name. Will throw if there is no rule named + * ruleName. + */ + size_t getIndexForRule(const char * ruleName) const; + + /// Get name of the rule. Will throw if ruleIndex is invalid. + const char * getName(size_t ruleIndex) const; + + /// Get number of colorspaces. Will throw if ruleIndex is invalid. + size_t getNumColorSpaces(size_t ruleIndex) const; + /// Get colorspace name. Will throw if ruleIndex or colorSpaceIndex is invalid. + const char * getColorSpace(size_t ruleIndex, size_t colorSpaceIndex) const; + /** + * \brief + * + * Add colorspace name. Will throw if: + * * RuleIndex is invalid. + * * \ref ViewingRules::getNumEncodings is not 0. + */ + void addColorSpace(size_t ruleIndex, const char * colorSpace); + /// Remove colorspace. Will throw if ruleIndex or colorSpaceIndex is invalid. + void removeColorSpace(size_t ruleIndex, size_t colorSpaceIndex); + + /// Get number of encodings. Will throw if ruleIndex is invalid. + size_t getNumEncodings(size_t ruleIndex) const; + /// Get encoding name. Will throw if ruleIndex or encodingIndex is invalid. + const char * getEncoding(size_t ruleIndex, size_t encodingIndex) const; + + /** + * \brief + * Add encoding name. Will throw if: + * * RuleIndex is invalid. + * * \ref ViewingRules::getNumColorSpaces is not 0. + */ + void addEncoding(size_t ruleIndex, const char * encoding); + /// Remove encoding. Will throw if ruleIndex or encodingIndex is invalid. + void removeEncoding(size_t ruleIndex, size_t encodingIndex); + + /// Get number of key/value pairs. Will throw if ruleIndex is invalid. + size_t getNumCustomKeys(size_t ruleIndex) const; + /// Get name of key. Will throw if ruleIndex or keyIndex is invalid. + const char * getCustomKeyName(size_t ruleIndex, size_t keyIndex) const; + /// Get value for the key. Will throw if ruleIndex or keyIndex is invalid. + const char * getCustomKeyValue(size_t ruleIndex, size_t keyIndex) const; + /** + * Adds a key/value or replace value if key exists. Setting a NULL or an + * empty value will erase the key. Will throw if ruleIndex is invalid. + */ + void setCustomKey(size_t ruleIndex, const char * key, const char * value); + + /** + * \brief Insert a rule at a given ruleIndex. + * + * Rule currently at ruleIndex will be pushed to index: ruleIndex + 1. If ruleIndex is + * \ref ViewingRules::getNumEntries, a new rule will be added at the end. Will throw if: + * * RuleIndex is invalid (must be less than or equal to + * \ref ViewingRules::getNumEntries). + * * RuleName already exists. + */ + void insertRule(size_t ruleIndex, const char * ruleName); + + /// Remove a rule. Throws if ruleIndex is not valid. + void removeRule(size_t ruleIndex); + + ViewingRules(const ViewingRules &) = delete; + ViewingRules & operator= (const ViewingRules &) = delete; + /// Do not use (needed only for pybind11). + virtual ~ViewingRules(); + +private: + ViewingRules(); + + static void deleter(ViewingRules* c); + + friend class Config; + + class Impl; + Impl * m_impl; + Impl * getImpl() { return m_impl; } + const Impl * getImpl() const { return m_impl; } +}; + +extern OCIOEXPORT std::ostream & operator<< (std::ostream &, const ViewingRules &); + +// +// ColorSpace +// +/** + * The *ColorSpace* is the state of an image with respect to colorimetry + * and color encoding. Transforming images between different + * *ColorSpaces* is the primary motivation for this library. + * + * While a complete discussion of color spaces is beyond the scope of + * header documentation, traditional uses would be to have *ColorSpaces* + * corresponding to: physical capture devices (known cameras, scanners), + * and internal 'convenience' spaces (such as scene linear, logarithmic). + */ +class OCIOEXPORT ColorSpace +{ +public: + static ColorSpaceRcPtr Create(); + + static ColorSpaceRcPtr Create(ReferenceSpaceType referenceSpace); + + ColorSpaceRcPtr createEditableCopy() const; + + const char * getName() const noexcept; + /// If the name is already an alias, that alias is removed. + void setName(const char * name) noexcept; + + size_t getNumAliases() const noexcept; + /// Return empty string if idx is out of range. + const char * getAlias(size_t idx) const noexcept; + /// Return true if alias exists. + bool hasAlias(const char * alias) const noexcept; + /** + * Add an alias for the color space name (the aliases may be used as a synonym for the + * name). Nothing will be added if the alias is already the color space name, one of its + * aliases, or the argument is null. The aliases must not conflict with existing roles, + * color space names, named transform names, or other aliases. This is verified when + * adding the color space to the config. + */ + void addAlias(const char * alias) noexcept; + /// Does nothing if alias is not present. + void removeAlias(const char * alias) noexcept; + void clearAliases() noexcept; + + /** + * Get the family, for use in user interfaces (optional) + * The family string could use a '/' separator to indicate levels to be used + * by hierarchical menus. + */ + const char * getFamily() const noexcept; + /// Set the family, for use in user interfaces (optional) + void setFamily(const char * family); + + /** + * Get the ColorSpace group name (used for equality comparisons) + * This allows no-op transforms between different colorspaces. + * If an equalityGroup is not defined (an empty string), it will be considered + * unique (i.e., it will not compare as equal to other ColorSpaces with an + * empty equality group). + */ + const char * getEqualityGroup() const noexcept; + void setEqualityGroup(const char * equalityGroup); + + const char * getDescription() const noexcept; + void setDescription(const char * description); + + /** + * Get/Set the interop ID for the color space. The interop ID is a + * structured string defined by the Color Interop Forum. It is intended to + * identify color spaces in a way that is portable across different configs, + * making it suitable for use in various file formats. The Color Interop + * Forum publishes ID strings for common color spaces. If you create your + * own IDs, they must be preceded by a namespace string. The setter will + * throw if the string does not follow certain rules (run ociocheck for a + * more complete validation). + */ + const char * getInteropID() const noexcept; + void setInteropID(const char * interopID); + + /** + * Get/Set the interchange attributes. + * + * Currently supported attribute names are "amf_transform_ids" and + * "icc_profile_name". Using any other name will throw. If the attribute is + * not defined, it will return an empty string. Setting the value to an empty + * string will effectively delete the attribute. + * + * The AMF transform IDs are used to identify specific transforms in the + * ACES Metadata File. Multiple transform IDs can be specified in a + * newline-separated string. + * + * The ICC profile name identifies the ICC color profile associated with + * this color space. This can be used to link OCIO color spaces with + * corresponding ICC profiles for applications that need to work with both + * color management systems. + */ + const char *getInterchangeAttribute(const char *attrName) const; + void setInterchangeAttribute(const char* attrName, const char *value); + std::map getInterchangeAttributes() const noexcept; + + BitDepth getBitDepth() const noexcept; + void setBitDepth(BitDepth bitDepth); + + /// A display color space will use the display-referred reference space. + ReferenceSpaceType getReferenceSpaceType() const noexcept; + + // + // Categories + // + + /** + * A category is used to allow applications to filter the list of color spaces + * they display in menus based on what that color space is used for. + * + * Here is an example config entry that could appear under a ColorSpace: + * + * \code{.yaml} + * categories: [ file-io, working-space, basic-3d ] + * \endcode + * + * The example contains three categories: 'file-io', 'working-space' and 'basic-3d'. + * + * \note + * Category strings are not case-sensitive and the order is not significant. + * + * There is no limit imposed on length or number. Although users may add their own categories, + * the strings will typically come from a fixed set listed in the documentation (similar to + * roles). + */ + /// Return true if the category is present. + bool hasCategory(const char * category) const; + /** + * \brief Add a single category. + * + * \note + * Will do nothing if the category already exists. + */ + void addCategory(const char * category); + /** + * \brief Remove a category. + * + * \note + * Will do nothing if the category is missing. + */ + void removeCategory(const char * category); + /// Get the number of categories. + int getNumCategories() const; + /** + * \brief Return the category name using its index + * + * \note + * Will be null if the index is invalid. + */ + const char * getCategory(int index) const; + /// Clear all the categories. + void clearCategories(); + + /** + * *Encodings* + * + * It is sometimes useful for applications to group color spaces based on how the color values + * are digitally encoded. For example, images in scene-linear, logarithmic, video, and data + * color spaces could have different default views. Unlike the Family and EqualityGroup + * attributes of a color space, the list of Encodings is predefined in the OCIO documentation + * (rather than being config-specific) to make it easier for applications to utilize. + * + * Here is an example config entry that could appear under a ColorSpace: + * + * \code{.yaml} + * encoding: scene-linear + * \endcode + * + * Encoding strings are not case-sensitive. Although users may add their own encodings, the + * strings will typically come from a fixed set listed in the documentation (similar to roles). + */ + const char * getEncoding() const noexcept; + void setEncoding(const char * encoding); + + /** + * *Data* + * + * ColorSpaces that are data are treated a bit special. Basically, any colorspace transforms + * you try to apply to them are ignored. (Think of applying a gamut mapping transform to an + * ID pass). However, the setDataBypass method on ColorSpaceTransform and DisplayViewTransform + * allow applications to process data when necessary. (Think of sending mattes to an HDR + * monitor.) + * + * This is traditionally used for pixel data that represents non-color + * pixel data, such as normals, point positions, ID information, etc. + */ + bool isData() const noexcept; + void setIsData(bool isData) noexcept; + + /** + * *Allocation* + * + * If this colorspace needs to be transferred to a limited dynamic + * range coding space (such as during display with a GPU path), use this + * allocation to maximize bit efficiency. + */ + Allocation getAllocation() const noexcept; + void setAllocation(Allocation allocation) noexcept; + + /** + * Specify the optional variable values to configure the allocation. + * If no variables are specified, the defaults are used. + * + * ALLOCATION_UNIFORM:: + * + * 2 vars: [min, max] + * + * ALLOCATION_LG2:: + * + * 2 vars: [lg2min, lg2max] + * 3 vars: [lg2min, lg2max, linear_offset] + */ + int getAllocationNumVars() const; + void getAllocationVars(float * vars) const; + void setAllocationVars(int numvars, const float * vars); + + /** + * *Transform* + * + * If a transform in the specified direction has been specified, + * return it. Otherwise return a null ConstTransformRcPtr + */ + ConstTransformRcPtr getTransform(ColorSpaceDirection dir) const noexcept; + /** + * Specify the transform for the appropriate direction. + * Setting the transform to null will clear it. + */ + void setTransform(const ConstTransformRcPtr & transform, ColorSpaceDirection dir); + + ColorSpace(const ColorSpace &) = delete; + ColorSpace& operator= (const ColorSpace &) = delete; + /// Do not use (needed only for pybind11). + ~ColorSpace(); + +private: + explicit ColorSpace(ReferenceSpaceType referenceSpace); + ColorSpace(); + + static void deleter(ColorSpace* c); + + class Impl; + Impl * m_impl; + Impl * getImpl() { return m_impl; } + const Impl * getImpl() const { return m_impl; } +}; + +extern OCIOEXPORT std::ostream& operator<< (std::ostream&, const ColorSpace&); + + + + +// +// ColorSpaceSet +// + + +/** + * The *ColorSpaceSet* is a set of color spaces (i.e. no color space duplication) + * which could be the result of \ref Config::getColorSpaces + * or built from scratch. + * + * \note + * The color spaces are decoupled from the config ones, i.e., any + * changes to the set itself or to its color spaces do not affect the + * original color spaces from the configuration. If needed, + * use \ref Config::addColorSpace to update the configuration. + */ +class OCIOEXPORT ColorSpaceSet +{ +public: + /// Create an empty set of color spaces. + static ColorSpaceSetRcPtr Create(); + + /// Create a set containing a copy of all the color spaces. + ColorSpaceSetRcPtr createEditableCopy() const; + + /** + * \brief Return true if the two sets are equal. + * + * \note + * The comparison is done on the color space names (not a deep comparison). + */ + bool operator==(const ColorSpaceSet & css) const; + /// Return true if the two sets are different. + bool operator!=(const ColorSpaceSet & css) const; + + /// Return the number of color spaces. + int getNumColorSpaces() const; + /** + * Return the color space name using its index. + * This will be null if an invalid index is specified. + */ + const char * getColorSpaceNameByIndex(int index) const; + /** + * Return the color space using its index. + * This will be empty if an invalid index is specified. + */ + ConstColorSpaceRcPtr getColorSpaceByIndex(int index) const; + + /** + * \brief + * + * \note + * Only accepts color space names (i.e. no role name). + * + * Will return null if the name is not found. + */ + ConstColorSpaceRcPtr getColorSpace(const char * name) const; + /** + * Will return -1 if the name is not found. + * + * \note + * Only accepts color space names (i.e. no role name). + */ + int getColorSpaceIndex(const char * name) const; + /** + * \brief + * + * \note + * Only accepts color space names (i.e. no role name) + * + * \param name + * \return true + * \return false + */ + bool hasColorSpace(const char * name) const; + + /** + * \brief Add color space(s). + * + * \note + * If another color space is already registered with the same name, + * this will overwrite it. This stores a copy of the specified + * color space(s). Throws if one of the aliases is already assigned as + * a name or alias to an existing color space. + */ + void addColorSpace(const ConstColorSpaceRcPtr & cs); + void addColorSpaces(const ConstColorSpaceSetRcPtr & cs); + + /** + * \brief Remove color space(s) using color space names (i.e. no role name). + * + * \note + * The removal of a missing color space does nothing. + */ + void removeColorSpace(const char * name); + void removeColorSpaces(const ConstColorSpaceSetRcPtr & cs); + + /// Clear all color spaces. + void clearColorSpaces(); + + /// Do not use (needed only for pybind11). + ~ColorSpaceSet(); + +private: + ColorSpaceSet(); + + ColorSpaceSet(const ColorSpaceSet &); + ColorSpaceSet & operator= (const ColorSpaceSet &); + + static void deleter(ColorSpaceSet * c); + + class Impl; + Impl * m_impl; + Impl * getImpl() { return m_impl; } + const Impl * getImpl() const { return m_impl; } +}; + +/** ColorSpaceSetOperators + */ + +/** + * \brief Perform the union of two sets. + * + * \note + * This function provides operations on two color space sets + * where the result contains copied color spaces and no duplicates. + * + * \param lcss + * \param rcss + */ +extern OCIOEXPORT ConstColorSpaceSetRcPtr operator||(const ConstColorSpaceSetRcPtr & lcss, + const ConstColorSpaceSetRcPtr & rcss); + /** + * \brief Perform the intersection of two sets. + * + * \note + * This function provides operations on two color space sets + * where the result contains copied color spaces and no duplicates. + * + * \param lcss + * \param rcss + */ +extern OCIOEXPORT ConstColorSpaceSetRcPtr operator&&(const ConstColorSpaceSetRcPtr & lcss, + const ConstColorSpaceSetRcPtr & rcss); +/** + * \brief Perform the difference of two sets. + * + * \note + * This function provides operations on two color space sets + * where the result contains copied color spaces and no duplicates. + * + * \param lcss + * \param rcss + */ +extern OCIOEXPORT ConstColorSpaceSetRcPtr operator-(const ConstColorSpaceSetRcPtr & lcss, + const ConstColorSpaceSetRcPtr & rcss); + + +// +// Look +// + +/** + * The *Look* is an 'artistic' image modification, in a specified image + * state. + * The processSpace defines the ColorSpace the image is required to be + * in, for the math to apply correctly. + */ +class OCIOEXPORT Look +{ +public: + static LookRcPtr Create(); + + LookRcPtr createEditableCopy() const; + + const char * getName() const; + void setName(const char * name); + + const char * getProcessSpace() const; + void setProcessSpace(const char * processSpace); + + ConstTransformRcPtr getTransform() const; + /// Setting a transform to a non-null call makes it allowed. + void setTransform(const ConstTransformRcPtr & transform); + + ConstTransformRcPtr getInverseTransform() const; + /// Setting a transform to a non-null call makes it allowed. + void setInverseTransform(const ConstTransformRcPtr & transform); + + const char * getDescription() const; + void setDescription(const char * description); + + /** + * Get/Set the interchange attributes. + * + * Currently the only supported attribute name is "amf_transform_ids". Using + * any other name will throw. If the attribute is not defined, it will return + * an empty string. Setting the value to an empty string will effectively + * delete the attribute. + * + * The AMF transform IDs are used to identify specific transforms in the ACES + * Metadata File. Multiple transform IDs can be specified in a + * newline-separated string. + */ + const char *getInterchangeAttribute(const char *attrName) const; + void setInterchangeAttribute(const char* attrName, const char *value); + std::map getInterchangeAttributes() const noexcept; + + Look(const Look &) = delete; + Look& operator= (const Look &) = delete; + /// Do not use (needed only for pybind11). + ~Look(); + +private: + Look(); + + static void deleter(Look* c); + + class Impl; + Impl * m_impl; + Impl * getImpl() { return m_impl; } + const Impl * getImpl() const { return m_impl; } +}; + +extern OCIOEXPORT std::ostream& operator<< (std::ostream&, const Look&); + + +/** + * \brief NamedTransform. + * + * A NamedTransform provides a way for config authors to include a set of color + * transforms that are independent of the color space being processed. For example a "utility + * curve" transform where there is no need to convert to or from a reference space. + */ + +class OCIOEXPORT NamedTransform +{ +public: + static NamedTransformRcPtr Create(); + + virtual NamedTransformRcPtr createEditableCopy() const = 0; + + virtual const char * getName() const noexcept = 0; + virtual void setName(const char * name) noexcept = 0; + + /// Aliases can be used instead of the name. They must be unique within the config. + virtual size_t getNumAliases() const noexcept = 0; + /// Return empty string if idx is out of range. + virtual const char * getAlias(size_t idx) const noexcept = 0; + /// Return true if alias exists. + virtual bool hasAlias(const char* alias) const noexcept = 0; + /** + * Nothing is done if alias is NULL or empty, if it is already there, or if it is already + * the named transform name. + */ + virtual void addAlias(const char * alias) noexcept = 0; + /// Does nothing if alias is not present. + virtual void removeAlias(const char * alias) noexcept = 0; + virtual void clearAliases() noexcept = 0; + + /// \see ColorSpace::getFamily + virtual const char * getFamily() const noexcept = 0; + /// \see ColorSpace::setFamily + virtual void setFamily(const char * family) noexcept = 0; + + virtual const char * getDescription() const noexcept = 0; + virtual void setDescription(const char * description) noexcept = 0; + + /// \see ColorSpace::hasCategory + virtual bool hasCategory(const char * category) const noexcept = 0; + /// \see ColorSpace::addCategory + virtual void addCategory(const char * category) noexcept = 0; + /// \see ColorSpace::removeCategory + virtual void removeCategory(const char * category) noexcept = 0; + /// \see ColorSpace::getNumCategories + virtual int getNumCategories() const noexcept = 0; + /// \see ColorSpace::getCategory + virtual const char * getCategory(int index) const noexcept = 0; + /// \see ColorSpace::clearCategories + virtual void clearCategories() noexcept = 0; + + /** + * A NamedTransform is not a color space and does not have an encoding in the same sense. + * However, it may be useful to associate a color space encoding that the transform is intended + * to be used with, for organizational purposes. + */ + virtual const char * getEncoding() const noexcept = 0; + virtual void setEncoding(const char * encoding) noexcept = 0; + + virtual ConstTransformRcPtr getTransform(TransformDirection dir) const = 0; + virtual void setTransform(const ConstTransformRcPtr & transform, TransformDirection dir) = 0; + + /** + * Will create the transform from the inverse direction if the transform for requested + * direction is missing. + */ + static ConstTransformRcPtr GetTransform(const ConstNamedTransformRcPtr & nt, + TransformDirection dir); + + NamedTransform(const NamedTransform &) = delete; + NamedTransform & operator= (const NamedTransform &) = delete; + // Do not use (needed only for pybind11). + virtual ~NamedTransform() = default; + +protected: + NamedTransform() = default; +}; + +extern OCIOEXPORT std::ostream & operator<< (std::ostream &, const NamedTransform &); + + +/** + * A *ViewTransform* provides a conversion from the main (usually scene-referred) reference space + * to the display-referred reference space. This allows splitting the conversion from the main + * reference space to a display into two parts: the ViewTransform plus a display color space. + * + * It is also possible to provide a ViewTransform that converts from the display-referred + * reference space back to that space. This is useful in cases when a ViewTransform is needed + * when converting between displays (such as HDR to SDR). + * + * The ReferenceSpaceType indicates whether the ViewTransform converts from scene-to-display + * reference or display-to-display reference. + * + * The from_reference transform direction is the one that is used when going out towards a display. + */ +class OCIOEXPORT ViewTransform +{ +public: + static ViewTransformRcPtr Create(ReferenceSpaceType referenceSpace); + + ViewTransformRcPtr createEditableCopy() const; + + const char * getName() const noexcept; + void setName(const char * name) noexcept; + + /// \see ColorSpace::getFamily + const char * getFamily() const noexcept; + /// \see ColorSpace::setFamily + void setFamily(const char * family); + + const char * getDescription() const noexcept; + void setDescription(const char * description); + + /** + * Get/Set the interchange attributes. + * + * Currently the only supported attribute name is "amf_transform_ids". Using + * any other name will throw. If the attribute is not defined, it will return + * an empty string. Setting the value to an empty string will effectively + * delete the attribute. + * + * The AMF transform IDs are used to identify specific transforms in the ACES + * Metadata File. Multiple transform IDs can be specified in a + * newline-separated string. + */ + const char *getInterchangeAttribute(const char *attrName) const; + void setInterchangeAttribute(const char* attrName, const char *value); + std::map getInterchangeAttributes() const noexcept; + + /// \see ColorSpace::hasCategory + bool hasCategory(const char * category) const; + /// \see ColorSpace::addCategory + void addCategory(const char * category); + /// \see ColorSpace::removeCategory + void removeCategory(const char * category); + /// \see ColorSpace::getNumCategories + int getNumCategories() const; + /// \see ColorSpace::getCategory + const char * getCategory(int index) const; + /// \see ColorSpace::clearCategories + void clearCategories(); + + ReferenceSpaceType getReferenceSpaceType() const noexcept; + + /** + * If a transform in the specified direction has been specified, return it. + * Otherwise return a null ConstTransformRcPtr + */ + ConstTransformRcPtr getTransform(ViewTransformDirection dir) const noexcept; + + /** + * Specify the transform for the appropriate direction. Setting the transform + * to null will clear it. + */ + void setTransform(const ConstTransformRcPtr & transform, ViewTransformDirection dir); + + ViewTransform(const ViewTransform &) = delete; + ViewTransform & operator= (const ViewTransform &) = delete; + /// Do not use (needed only for pybind11). + ~ViewTransform(); + +private: + ViewTransform(); + explicit ViewTransform(ReferenceSpaceType referenceSpace); + + static void deleter(ViewTransform * c); + + class Impl; + Impl * m_impl; + Impl * getImpl() { return m_impl; } + const Impl * getImpl() const { return m_impl; } +}; + +extern OCIOEXPORT std::ostream& operator<< (std::ostream&, const ViewTransform&); + +// +// Processor +// + + +/** + * The *Processor* represents a specific color transformation which is + * the result of \ref Config::getProcessor. + */ +class OCIOEXPORT Processor +{ +public: + bool isNoOp() const; + + /** + * True if the image transformation is non-separable. + * For example, if a change in red may also cause a change in green or blue. + */ + bool hasChannelCrosstalk() const; + + /** + * Returns a hash string generated by hashing the cachedIDs of the (unoptimized) list of ops + * contained in the Processor. (This forms part of the key used by the config's processor cache.) + */ + const char * getCacheID() const; + + /** + * The ProcessorMetadata contains technical information + * such as the number of files and looks used in the processor. + */ + ConstProcessorMetadataRcPtr getProcessorMetadata() const; + + /** + * Get a FormatMetadata containing the top level metadata + * for the processor. For a processor from a CLF file, this corresponds to + * the ProcessList metadata. + */ + const FormatMetadata & getFormatMetadata() const; + + /** + * Get the number of transforms that comprise the processor. + * Each transform has a (potentially empty) FormatMetadata. + */ + int getNumTransforms() const; + /** + * Get a FormatMetadata containing the metadata for a + * transform within the processor. For a processor from a CLF file, this + * corresponds to the metadata associated with an individual process node. + */ + const FormatMetadata & getTransformFormatMetadata(int index) const; + + /** + * Return a \ref GroupTransform that contains a copy of the transforms that comprise the + * processor. (Changes to it will not modify the original processor.) Note that the + * GroupTransform::write method may be used to serialize a Processor. Serializing to + * CTF format is a useful technique for debugging Processor contents. + */ + GroupTransformRcPtr createGroupTransform() const; + + /** + * The returned pointer may be used to set the default value of any dynamic + * properties of the requested type. Throws if the requested property is not found. Note + * that if the processor contains several ops that support the requested property, only one + * can be dynamic and only this one will be controlled. + * + * \note The dynamic properties are a convenient way to change on-the-fly values without + * generating again and again a CPU or GPU processor instance. Color transformations can + * contain dynamic properties from a ExposureContrastTransform for example. + * So, Processor, CPUProcessor and GpuShaderCreator all have ways to manage dynamic + * properties. However, the transform dynamic properties are decoupled between the types + * of processor instances so that the same Processor can generate several independent CPU + * and/or GPU processor instances i.e. changing the value of the exposure dynamic property + * from a CPU processor instance does not affect the corresponding GPU processor instance. + * Processor creation will log a warning if there are more than one property of a given type. + * There may be more than one property of a given type, but only one will respond to parameter + * updates, the others will use their original parameter values. + */ + DynamicPropertyRcPtr getDynamicProperty(DynamicPropertyType type) const; + /// True if at least one dynamic property of that type exists. + bool hasDynamicProperty(DynamicPropertyType type) const noexcept; + /// True if at least one dynamic property of any type exists and is dynamic. + bool isDynamic() const noexcept; + + /** + * Run the optimizer on a Processor to create a new Processor. + * It is usually not necessary to call this since getting a CPUProcessor or GPUProcessor + * will also optimize. However if you need both, calling this method first makes getting + * a CPU and GPU Processor faster since the optimization is effectively only done once. + */ + ConstProcessorRcPtr getOptimizedProcessor(OptimizationFlags oFlags) const; + + /** + * Create a Processor that is optimized for a specific in and out bit-depth (as CPUProcessor + * would do). This method is provided primarily for diagnostic purposes. + */ + ConstProcessorRcPtr getOptimizedProcessor(BitDepth inBD, BitDepth outBD, + OptimizationFlags oFlags) const; + + // + // GPU Renderer + // + + /// Get an optimized GPUProcessor instance. + ConstGPUProcessorRcPtr getDefaultGPUProcessor() const; + ConstGPUProcessorRcPtr getOptimizedGPUProcessor(OptimizationFlags oFlags) const; + + /** + * Get an optimized GPUProcessor instance that will emulate the OCIO v1 GPU path. This approach + * bakes some of the ops into a single Lut3D and so is less accurate than the current GPU + * processing methods. + */ + ConstGPUProcessorRcPtr getOptimizedLegacyGPUProcessor(OptimizationFlags oFlags, + unsigned edgelen) const; + + // + // CPU Renderer + // + + /** + * Get an optimized CPUProcessor instance. + * + * \note + * This may provide higher fidelity than anticipated due to internal + * optimizations. For example, if the inputColorSpace and the + * outputColorSpace are members of the same equalitygroup, no conversion + * will be applied, even though strictly speaking quantization + * should be added. + * + * \note + * The typical use case to apply color processing to an image is: + * + * \code{.cpp} + * + * OCIO::ConstConfigRcPtr config = OCIO::GetCurrentConfig(); + * + * OCIO::ConstProcessorRcPtr processor + * = config->getProcessor(colorSpace1, colorSpace2); + * + * OCIO::ConstCPUProcessorRcPtr cpuProcessor + * = processor->getDefaultCPUProcessor(); + * + * OCIO::PackedImageDesc img(imgDataPtr, imgWidth, imgHeight, imgChannels); + * cpuProcessor->apply(img); + * + * \endcode + */ + ConstCPUProcessorRcPtr getDefaultCPUProcessor() const; + ConstCPUProcessorRcPtr getOptimizedCPUProcessor(OptimizationFlags oFlags) const; + ConstCPUProcessorRcPtr getOptimizedCPUProcessor(BitDepth inBitDepth, + BitDepth outBitDepth, + OptimizationFlags oFlags) const; + + Processor(const Processor &) = delete; + Processor & operator= (const Processor &) = delete; + /// Do not use (needed only for pybind11). + ~Processor(); + +private: + Processor(); + + static ProcessorRcPtr Create(); + + static void deleter(Processor* c); + + friend class Config; + + class Impl; + Impl * m_impl; + Impl * getImpl() { return m_impl; } + const Impl * getImpl() const { return m_impl; } +}; + + +/////////////////////////////////////////////////////////////////////////// +// CPUProcessor + +class OCIOEXPORT CPUProcessor +{ +public: + /// The in and out bit-depths must be equal for isNoOp to be true. + bool isNoOp() const; + + /** + * Equivalent to isNoOp from the underlying Processor, i.e., it ignores + * in/out bit-depth differences. + */ + bool isIdentity() const; + + bool hasChannelCrosstalk() const; + + const char * getCacheID() const; + + /// Bit-depth of the input pixel buffer. + BitDepth getInputBitDepth() const; + /// Bit-depth of the output pixel buffer. + BitDepth getOutputBitDepth() const; + + /** + * The returned pointer may be used to set the value of any dynamic properties + * of the requested type. Throws if the requested property is not found. Note that if the + * processor contains several ops that support the requested property, only one can be dynamic. + * + * \note The dynamic properties in this object are decoupled from the ones in the + * \ref Processor it was generated from. For each dynamic property in the Processor, + * there is one in the CPU processor. + */ + DynamicPropertyRcPtr getDynamicProperty(DynamicPropertyType type) const; + /// True if at least one dynamic property of that type exists. + bool hasDynamicProperty(DynamicPropertyType type) const noexcept; + /// True if at least one dynamic property of any type exists and is dynamic. + bool isDynamic() const noexcept; + + /** + * \brief Apply to an image with any kind of channel ordering while + * respecting the input and output bit-depths. + */ + void apply(const ImageDesc & imgDesc) const; + void apply(const ImageDesc & srcImgDesc, ImageDesc & dstImgDesc) const; + + /** + * Apply to a single pixel respecting that the input and output bit-depths + * be 32-bit float and the image buffer be packed RGB/RGBA. + * + * \note + * This is not as efficient as applying to an entire image at once. + * If you are processing multiple pixels, and have the flexibility, + * use the above function instead. + */ + void applyRGB(float * pixel) const; + void applyRGBA(float * pixel) const; + + CPUProcessor(const CPUProcessor &) = delete; + CPUProcessor& operator= (const CPUProcessor &) = delete; + /// Do not use (needed only for pybind11). + ~CPUProcessor(); + +private: + CPUProcessor(); + + static void deleter(CPUProcessor * c); + + friend class Processor; + + class Impl; + Impl * m_impl; + Impl * getImpl() { return m_impl; } + const Impl * getImpl() const { return m_impl; } +}; + + +/////////////////////////////////////////////////////////////////////////// +// GPUProcessor + +class OCIOEXPORT GPUProcessor +{ +public: + bool isNoOp() const; + + bool hasChannelCrosstalk() const; + + const char * getCacheID() const; + + /// Extract & Store the shader information to implement the color processing. + void extractGpuShaderInfo(GpuShaderDescRcPtr & shaderDesc) const; + + /// Extract the shader information using a custom GpuShaderCreator class. + void extractGpuShaderInfo(GpuShaderCreatorRcPtr & shaderCreator) const; + + GPUProcessor(const GPUProcessor &) = delete; + GPUProcessor& operator= (const GPUProcessor &) = delete; + /// Do not use (needed only for pybind11). + ~GPUProcessor(); + +private: + GPUProcessor(); + + static void deleter(GPUProcessor * c); + + friend class Processor; + + class Impl; + Impl * m_impl; + Impl * getImpl() { return m_impl; } + const Impl * getImpl() const { return m_impl; } +}; + + +/** + * \brief + * + * This class contains meta information about the process that generated + * this processor. The results of these functions do not + * impact the pixel processing. + */ +class OCIOEXPORT ProcessorMetadata +{ +public: + static ProcessorMetadataRcPtr Create(); + + int getNumFiles() const; + const char * getFile(int index) const; + + int getNumLooks() const; + const char * getLook(int index) const; + + void addFile(const char * fname); + void addLook(const char * look); + + ProcessorMetadata(const ProcessorMetadata &) = delete; + ProcessorMetadata& operator= (const ProcessorMetadata &) = delete; + /// Do not use (needed only for pybind11). + ~ProcessorMetadata(); + +private: + ProcessorMetadata(); + + static void deleter(ProcessorMetadata* c); + + class Impl; + Impl * m_impl; + Impl * getImpl() { return m_impl; } + const Impl * getImpl() const { return m_impl; } +}; + + + +/** + * In certain situations it is necessary to serialize transforms into a variety + * of application specific LUT formats. Note that not all file formats that may + * be read also support baking. + * + * **Usage Example:** *Bake a CSP sRGB viewer LUT* + * + * \code{.cpp} + * + * OCIO::ConstConfigRcPtr config = OCIO::Config::CreateFromEnv(); + * OCIO::BakerRcPtr baker = OCIO::Baker::Create(); + * baker->setConfig(config); + * baker->setFormat("csp"); + * baker->setInputSpace("lnf"); + * baker->setShaperSpace("log"); + * baker->setTargetSpace("sRGB"); + * auto & metadata = baker->getFormatMetadata(); + * metadata.addChildElement(OCIO::METADATA_DESCRIPTION, "A first comment"); + * metadata.addChildElement(OCIO::METADATA_DESCRIPTION, "A second comment"); + * std::ostringstream out; + * baker->bake(out); // fresh bread anyone! + * std::cout << out.str(); + * + * \endcode + */ +class OCIOEXPORT Baker +{ +public: + /// Create a new Baker. + static BakerRcPtr Create(); + + /// Create a copy of this Baker. + BakerRcPtr createEditableCopy() const; + + ConstConfigRcPtr getConfig() const; + /// Set the config to use. + void setConfig(const ConstConfigRcPtr & config); + + const char * getFormat() const; + /// Set the LUT output format. + void setFormat(const char * formatName); + + const FormatMetadata & getFormatMetadata() const; + /** + * Get editable *optional* format metadata. The metadata that will be used + * varies based on the capability of the given file format. Formats such as CSP, + * IridasCube, and ResolveCube will create comments in the file header using the value of + * any first-level children elements of the formatMetadata. The CLF/CTF formats will make + * use of the top-level "id" and "name" attributes and children elements "Description", + * "InputDescriptor", "OutputDescriptor", and "Info". + */ + FormatMetadata & getFormatMetadata(); + + const char * getInputSpace() const; + /// Set the input ColorSpace that the LUT will be applied to. + void setInputSpace(const char * inputSpace); + + const char * getShaperSpace() const; + /** + * Set an *optional* ColorSpace or NamedTransform to shape the incoming + * values of the LUT. When baking 3DLUT, this will correspond to the 1D + * shaper used to normalise incoming values to the unit range. When baking + * 1D LUT, this will be used to determine the input range of the LUT. + */ + void setShaperSpace(const char * shaperSpace); + + const char * getLooks() const; + /** + * Set the looks to be applied during baking. Looks is a potentially comma + * (or colon) delimited list of lookNames, where +/- prefixes are optionally allowed to + * denote forward/inverse look specification. (And forward is assumed in the absence of + * either). + */ + void setLooks(const char * looks); + + const char * getTargetSpace() const; + /// Set the target (i.e., output) color space for the LUT. Must not be used if setDisplayView is used. + void setTargetSpace(const char * targetSpace); + + const char * getDisplay() const; + const char * getView() const; + /// Set the display and view to apply during the baking. Must not be used if setTargetSpace is used. + void setDisplayView(const char * display, const char * view); + + int getShaperSize() const; + /** + * Override the default shaper LUT size. Default value is -1, which allows + * each format to use its own most appropriate size. For the CLF format, the default uses + * a half-domain LUT1D (which is ideal for scene-linear inputs). + */ + void setShaperSize(int shapersize); + + int getCubeSize() const; + /** + * Override the main LUT (3d or 1d) sample size. Default value is -1, which allows + * each format to use its own most appropriate size. + */ + void setCubeSize(int cubesize); + + /// Bake the LUT into the output stream. + void bake(std::ostream & os) const; + + /// Get the number of LUT bakers. + static int getNumFormats(); + + /** + * Get the LUT baker format name at index, return empty string if an invalid + * index is specified. + */ + static const char * getFormatNameByIndex(int index); + /** + * Get the LUT baker format extension at index, return empty string if an + * invalid index is specified. + */ + static const char * getFormatExtensionByIndex(int index); + + Baker(const Baker &) = delete; + Baker& operator= (const Baker &) = delete; + /// Do not use (needed only for pybind11). + ~Baker(); + +private: + Baker(); + + static void deleter(Baker* o); + + class Impl; + Impl * m_impl; + Impl * getImpl() { return m_impl; } + const Impl * getImpl() const { return m_impl; } +}; + + +/////////////////////////////////////////////////////////////////////////// +// ImageDesc + +const ptrdiff_t AutoStride = std::numeric_limits::min(); + +/** + * \brief + * This is a light-weight wrapper around an image, that provides a context + * for pixel access. This does NOT claim ownership of the pixels or copy + * image data. + */ +class OCIOEXPORT ImageDesc +{ +public: + ImageDesc(); + virtual ~ImageDesc(); + + /// Get a pointer to the red channel of the first pixel. + virtual void * getRData() const = 0; + /// Get a pointer to the green channel of the first pixel. + virtual void * getGData() const = 0; + /// Get a pointer to the blue channel of the first pixel. + virtual void * getBData() const = 0; + /** + * Get a pointer to the alpha channel of the first pixel + * or null as alpha channel is optional. + */ + virtual void * getAData() const = 0; + + /// Get the bit-depth. + virtual BitDepth getBitDepth() const = 0; + + /// Get the width to process (where x position starts at 0 and ends at width-1). + virtual long getWidth() const = 0; + /// Get the height to process (where y position starts at 0 and ends at height-1). + virtual long getHeight() const = 0; + + /// Get the step in bytes to find the same color channel of the next pixel. + virtual ptrdiff_t getXStrideBytes() const = 0; + /** + * Get the step in bytes to find the same color channel + * of the pixel at the same position in the next line. + */ + virtual ptrdiff_t getYStrideBytes() const = 0; + + /** + * Is the image buffer in packed mode with the 4 color channels? + * ("Packed" here means that XStrideBytes is 4x the bytes per channel, so it is more specific + * than simply any PackedImageDesc.) + */ + virtual bool isRGBAPacked() const = 0; + /// Is the image buffer 32-bit float? + virtual bool isFloat() const = 0; + +private: + ImageDesc(const ImageDesc &); + ImageDesc & operator= (const ImageDesc &); +}; + +extern OCIOEXPORT std::ostream& operator<< (std::ostream&, const ImageDesc&); + + +/////////////////////////////////////////////////////////////////////////// +// PackedImageDesc + +/** + * All the constructors expect a pointer to packed image data (such as + * rgbrgbrgb or rgbargbargba) starting at the first color channel of + * the first pixel to process (which does not need to be the first pixel + * of the image). The number of channels must be greater than or equal to 3. + * If a 4th channel is specified, it is assumed to be alpha + * information. Channels > 4 will be ignored. + * + * \note + * The methods assume the CPUProcessor bit-depth type for the data pointer. + */ +class OCIOEXPORT PackedImageDesc : public ImageDesc +{ +public: + + /** + * \note + * numChannels must be 3 (RGB) or 4 (RGBA). + */ + PackedImageDesc(void * data, + long width, long height, + long numChannels); + + /** + * \note + * numChannels must be 3 (RGB) or 4 (RGBA). + */ + PackedImageDesc(void * data, + long width, long height, + long numChannels, + BitDepth bitDepth, + ptrdiff_t chanStrideBytes, + ptrdiff_t xStrideBytes, + ptrdiff_t yStrideBytes); + + PackedImageDesc(void * data, + long width, long height, + ChannelOrdering chanOrder); + + PackedImageDesc(void * data, + long width, long height, + ChannelOrdering chanOrder, + BitDepth bitDepth, + ptrdiff_t chanStrideBytes, + ptrdiff_t xStrideBytes, + ptrdiff_t yStrideBytes); + + virtual ~PackedImageDesc(); + + /// Get the channel ordering of all the pixels. + ChannelOrdering getChannelOrder() const; + + /// Get the bit-depth. + BitDepth getBitDepth() const override; + + /// Get a pointer to the first color channel of the first pixel. + void * getData() const; + + void * getRData() const override; + void * getGData() const override; + void * getBData() const override; + void * getAData() const override; + + long getWidth() const override; + long getHeight() const override; + long getNumChannels() const; + + ptrdiff_t getChanStrideBytes() const; + ptrdiff_t getXStrideBytes() const override; + ptrdiff_t getYStrideBytes() const override; + + bool isRGBAPacked() const override; + bool isFloat() const override; + +private: + struct Impl; + Impl * m_impl; + Impl * getImpl() { return m_impl; } + const Impl * getImpl() const { return m_impl; } + + PackedImageDesc(); + PackedImageDesc(const PackedImageDesc &); + PackedImageDesc& operator= (const PackedImageDesc &); +}; + + +/////////////////////////////////////////////////////////////////////////// +// PlanarImageDesc + +/** + * All the constructors expect pointers to the specified image planes + * (i.e. rrrr gggg bbbb) starting at the first color channel of the + * first pixel to process (which need not be the first pixel of the image). + * Pass NULL for aData if no alpha exists (r/g/bData must not be NULL). + * + * \note + * The methods assume the CPUProcessor bit-depth type for the R/G/B/A data pointers. + */ +class OCIOEXPORT PlanarImageDesc : public ImageDesc +{ +public: + + PlanarImageDesc(void * rData, void * gData, void * bData, void * aData, + long width, long height); + + /** + * + * Note that although PlanarImageDesc is powerful enough to also describe + * all PackedImageDesc scenarios, it is recommended to use + * a PackedImageDesc where possible since that allows for additional + * optimizations. + */ + PlanarImageDesc(void * rData, void * gData, void * bData, void * aData, + long width, long height, + BitDepth bitDepth, + ptrdiff_t xStrideBytes, + ptrdiff_t yStrideBytes); + + virtual ~PlanarImageDesc(); + + void * getRData() const override; + void * getGData() const override; + void * getBData() const override; + void * getAData() const override; + + /// Get the bit-depth. + BitDepth getBitDepth() const override; + + long getWidth() const override; + long getHeight() const override; + + ptrdiff_t getXStrideBytes() const override; + ptrdiff_t getYStrideBytes() const override; + + bool isRGBAPacked() const override; + bool isFloat() const override; + +private: + struct Impl; + Impl * m_impl; + Impl * getImpl() { return m_impl; } + const Impl * getImpl() const { return m_impl; } + + PlanarImageDesc(); + PlanarImageDesc(const PlanarImageDesc &); + PlanarImageDesc& operator= (const PlanarImageDesc &); +}; + + +/////////////////////////////////////////////////////////////////////////// +// GpuShaderCreator +/** + * Inherit from the class to fully customize the implementation of a GPU shader program + * from a color transformation. + * + * When no customizations are needed and the intermediate in-memory step is acceptable then the + * \ref GpuShaderDesc is a better choice. + * + * \note + * To better decouple the \ref DynamicProperties from their GPU implementation, the code provides + * several addUniform() methods i.e. one per access function types. For example, an + * \ref ExposureContrastTransform instance owns three \ref DynamicProperties and they are all + * implemented by a double. When creating the GPU fragment shader program, the addUniform() with + * GpuShaderCreator::DoubleGetter is called when property is dynamic, up to three times. + * + * **An OCIO shader program could contain:** + * + * * A declaration part e.g., uniform sampled3D tex3; + * + * * Some helper methods + * + * * The OCIO shader function may be broken down as: + * + * * The function header e.g., void OCIODisplay(in vec4 inColor) { + * * The function body e.g., vec4 outColor.rgb = texture3D(tex3, inColor.rgb).rgb; + * * The function footer e.g., return outColor; } + * + * + * **Usage Example:** + * + * Below is a code snippet to highlight the different parts of the OCIO shader program. + * + * \code{.cpp} + * + * // All global declarations + * uniform sampled3D tex3; + * + * // All helper methods + * vec3 computePosition(vec3 color) + * { + * vec3 coords = color; + * // Some processing... + * return coords; + * } + * + * // The shader function + * vec4 OCIODisplay(in vec4 inColor) // + * { // Function Header + * vec4 outColor = inColor; // + * + * outColor.rgb = texture3D(tex3, computePosition(inColor.rgb)).rgb; + * + * return outColor; // Function Footer + * } // + * + * \endcode + */ +class OCIOEXPORT GpuShaderCreator +{ +public: + + virtual GpuShaderCreatorRcPtr clone() const = 0; + + const char * getUniqueID() const noexcept; + void setUniqueID(const char * uid) noexcept; + + GpuLanguage getLanguage() const noexcept; + /// Set the shader program language. + void setLanguage(GpuLanguage lang) noexcept; + + const char * getFunctionName() const noexcept; + // Set the function name of the shader program. + void setFunctionName(const char * name) noexcept; + + const char * getPixelName() const noexcept; + /// Set the pixel name variable holding the color values. + void setPixelName(const char * name) noexcept; + + /** + * + * \note + * Some applications require that textures, uniforms, + * and helper methods be uniquely named because several + * processor instances could coexist. + */ + const char * getResourcePrefix() const noexcept; + /// Set a prefix to the resource name + void setResourcePrefix(const char * prefix) noexcept; + + /** + * \brief Set the descriptor set index and texture binding start index to use for the shader program. + * + * \note Only supported for shading languages, such as Vulkan, that use descriptor sets and texture bindings. + * + * \param index The descriptor set index to use. + * \param textureBindingStart The texture binding start index to use. The default index starts at 1 + * and is incremented by 1 for each texture. Otherwise, the texture binding starts + * at textureBindingStart and is incremented by 1 for each texture. + * The binding of a texture is equal to the texture index + textureBindingStart. + * The texture binding start index must be greater than 0, as binding 0 is reserved + * for the uniform buffer binding + * */ + void setDescriptorSetIndex(unsigned index, unsigned textureBindingStart = 1); + unsigned getDescriptorSetIndex() const noexcept; + unsigned getTextureBindingStart() const noexcept; + + virtual const char * getCacheID() const noexcept; + + /// Start to collect the shader data. + virtual void begin(const char * uid); + /// End to collect the shader data. + virtual void end(); + + /// Some graphic cards could have 1D & 2D textures with size limitations. + virtual void setTextureMaxWidth(unsigned maxWidth) = 0; + virtual unsigned getTextureMaxWidth() const noexcept = 0; + + /// Allow 1D GPU resource type, otherwise always using 2D resources for 1D LUTs. + virtual void setAllowTexture1D(bool allowed) = 0; + virtual bool getAllowTexture1D() const = 0; + + /** + * To avoid global texture sampler and uniform name clashes always append an increasing index + * to the resource name. + */ + unsigned getNextResourceIndex() noexcept; + + /// Function returning a double, used by uniforms. GPU converts double to float. + typedef std::function DoubleGetter; + /// Function returning a bool, used by uniforms. + typedef std::function BoolGetter; + /// Functions returning a Float3, used by uniforms. + typedef std::function Float3Getter; + /// Function returning an int, used by uniforms. + typedef std::function SizeGetter; + /// Function returning a float *, used by uniforms. + typedef std::function VectorFloatGetter; + /// Function returning an int *, used by uniforms. + typedef std::function VectorIntGetter; + + virtual bool addUniform(const char * name, + const DoubleGetter & getDouble) = 0; + + virtual bool addUniform(const char * name, + const BoolGetter & getBool) = 0; + + virtual bool addUniform(const char * name, + const Float3Getter & getFloat3) = 0; + + /// The size of the vector can be smaller than the size of the corresponding + /// array that is declared in the shader. The parameter maxSize must be used + /// to pass the size of the array declared in the shader. This is important for + /// being able to calculate the correct uniform buffer offset for subsequent uniforms + virtual bool addUniform(const char * name, + const SizeGetter & getSize, + const VectorFloatGetter & getVectorFloat, + const unsigned maxSize) = 0; + + /// The size of the vector can be smaller than the size of the corresponding + /// array that is declared in the shader. The parameter maxSize must be used + /// to pass the size of the array declared in the shader. This is important for + /// being able to calculate the correct uniform buffer offset for subsequent uniforms + virtual bool addUniform(const char * name, + const SizeGetter & getSize, + const VectorIntGetter & getVectorInt, + const unsigned maxSize) = 0; + + /// Adds the property (used internally). + void addDynamicProperty(DynamicPropertyRcPtr & prop); + + /// Dynamic Property related methods. + unsigned getNumDynamicProperties() const noexcept; + DynamicPropertyRcPtr getDynamicProperty(unsigned index) const; + + bool hasDynamicProperty(DynamicPropertyType type) const; + /** + * Dynamic properties allow changes once the fragment shader program has been created. The + * steps are to get the appropriate DynamicProperty instance, and then change its value. + */ + DynamicPropertyRcPtr getDynamicProperty(DynamicPropertyType type) const; + + enum TextureType + { + TEXTURE_RED_CHANNEL, ///< Only need a red channel texture + TEXTURE_RGB_CHANNEL ///< Need a RGB texture + }; + + /** + * Dimension enum used to differentiate between 1D and 2D object/resource types. + */ + enum TextureDimensions : uint8_t { + TEXTURE_1D = 1, + TEXTURE_2D = 2, + }; + + /** + * Add a 1D or 2D texture + * + * \note + * The 'values' parameter contains the LUT data which must be used as-is as the dimensions and + * origin are hard-coded in the fragment shader program. So, it means one GPU texture per entry. + * + * \return Index of the texture. For shading languages using explicit texture bindings, the return + * value is the same as the texture binding index in the generated shader program. + **/ + virtual unsigned addTexture(const char * textureName, + const char * samplerName, + unsigned width, unsigned height, + TextureType channel, + TextureDimensions dimensions, + Interpolation interpolation, + const float * values) = 0; + + /** + * Add a 3D texture with RGB channel type. + * + * \note + * The 'values' parameter contains the 3D LUT data which must be used as-is as the dimension + * and origin are hard-coded in the fragment shader program. So, it means one GPU 3D texture + * per entry. + * + * \return Index of the texture. For shading languages using explicit texture bindings, the return + * value is the same as the texture binding index in the generated shader program. + **/ + virtual unsigned add3DTexture(const char * textureName, + const char * samplerName, + unsigned edgelen, + Interpolation interpolation, + const float * values) = 0; + + // Methods to specialize parts of a OCIO shader program + virtual void addToParameterDeclareShaderCode(const char * shaderCode); + virtual void addToTextureDeclareShaderCode(const char* shaderCode); + virtual void addToHelperShaderCode(const char * shaderCode); + virtual void addToFunctionHeaderShaderCode(const char * shaderCode); + virtual void addToFunctionShaderCode(const char * shaderCode); + virtual void addToFunctionFooterShaderCode(const char * shaderCode); + + /** + * \brief Create the OCIO shader program + * + * \note + * The OCIO shader program is decomposed to allow a specific implementation + * to change some parts. Some product integrations add the color processing + * within a client shader program, imposing constraints requiring this flexibility. + */ + virtual void createShaderText(const char * shaderParameterDeclarations, + const char * shaderTextureDeclarations, + const char * shaderHelperMethods, + const char * shaderFunctionHeader, + const char * shaderFunctionBody, + const char * shaderFunctionFooter); + + virtual void finalize(); + + GpuShaderCreator(const GpuShaderCreator &) = delete; + GpuShaderCreator & operator= (const GpuShaderCreator &) = delete; + /// Do not use (needed only for pybind11). + virtual ~GpuShaderCreator(); + +protected: + GpuShaderCreator(); + + class Impl; + Impl * m_impl; + Impl * getImpl() { return m_impl; } + const Impl * getImpl() const { return m_impl; } +}; + +// GpuShaderDesc +/** + * \brief This class holds the GPU-related information needed to build a shader program + * from a specific processor. + * + * This class defines the interface and there are two implementations provided. + * The "legacy" mode implements the OCIO v1 approach of baking certain ops + * in order to have at most one 3D-LUT. The "generic" mode is the v2 default and + * allows all the ops to be processed as-is, without baking, like the CPU renderer. + * Custom implementations could be written to accommodate the GPU needs of a + * specific client app. + * + * + * The complete fragment shader program is decomposed in two main parts: + * the OCIO shader program for the color processing and the client shader + * program which consumes the pixel color processing. + * + * The OCIO shader program is fully described by the GpuShaderDesc + * independently from the client shader program. The only critical + * point is the agreement on the OCIO function shader name. + * + * To summarize, the complete shader program is: + * + * \code{.cpp} + * + * //////////////////////////////////////////////////////////////////////// + * // // + * // The complete fragment shader program // + * // // + * //////////////////////////////////////////////////////////////////////// + * // // + * // ////////////////////////////////////////////////////////////// // + * // // // // + * // // The OCIO shader program // // + * // // // // + * // ////////////////////////////////////////////////////////////// // + * // // // // + * // // // All global declarations // // + * // // uniform sampled3D tex3; // // + * // // // // + * // // // All helper methods // // + * // // vec3 computePos(vec3 color) // // + * // // { // // + * // // vec3 coords = color; // // + * // // ... // // + * // // return coords; // // + * // // } // // + * // // // // + * // // // The OCIO shader function // // + * // // vec4 OCIODisplay(in vec4 inColor) // // + * // // { // // + * // // vec4 outColor = inColor; // // + * // // ... // // + * // // outColor.rbg // // + * // // = texture3D(tex3, computePos(inColor.rgb)).rgb; // // + * // // ... // // + * // // return outColor; // // + * // // } // // + * // // // // + * // ////////////////////////////////////////////////////////////// // + * // // + * // ////////////////////////////////////////////////////////////// // + * // // // // + * // // The client shader program // // + * // // // // + * // ////////////////////////////////////////////////////////////// // + * // // // // + * // // uniform sampler2D image; // // + * // // // // + * // // void main() // // + * // // { // // + * // // vec4 inColor = texture2D(image, gl_TexCoord[0].st); // // + * // // ... // // + * // // vec4 outColor = OCIODisplay(inColor); // // + * // // ... // // + * // // gl_FragColor = outColor; // // + * // // } // // + * // // // // + * // ////////////////////////////////////////////////////////////// // + * // // + * //////////////////////////////////////////////////////////////////////// + * \endcode + * + * **Usage Example:** *Building a GPU shader* + * + * This example is based on the code in: src/apps/ociodisplay/main.cpp + * + * \code{.cpp} + * + * // Get the processor + * // + * OCIO::ConstConfigRcPtr config = OCIO::Config::CreateFromEnv(); + * OCIO::ConstProcessorRcPtr processor + * = config->getProcessor("ACES - ACEScg", "Output - sRGB"); + * + * // Step 1: Create a GPU shader description + * // + * // The two potential scenarios are: + * // + * // 1. Instantiate the generic shader description. The color processor + * // is used as-is (i.e. without any baking step) and could contain + * // any number of 1D & 3D luts. + * // + * // This is the default OCIO v2 behavior and allows a much better + * // match between the CPU and GPU renderers. + * // + * OCIO::GpuShaderDescRcPtr shaderDesc = OCIO::GpuShaderDesc::Create(); + * // + * // 2. Instantiate a custom shader description. + * // + * // Writing a custom shader description is a way to tailor the shaders + * // to the needs of a given client program. This involves writing a + * // new class inheriting from the pure virtual class GpuShaderDesc. + * // + * // Please refer to the GenericGpuShaderDesc class for an example. + * // + * OCIO::GpuShaderDescRcPtr shaderDesc = MyCustomGpuShader::Create(); + * + * shaderDesc->setLanguage(OCIO::GPU_LANGUAGE_GLSL_1_2); + * shaderDesc->setFunctionName("OCIODisplay"); + * + * // Step 2: Collect the shader program information for a specific processor + * // + * processor->extractGpuShaderInfo(shaderDesc); + * + * // Step 3: Create a helper to build the shader. Here we use a helper for + * // OpenGL but there will also be helpers for other languages. + * // + * OpenGLBuilderRcPtr oglBuilder = OpenGLBuilder::Create(shaderDesc); + * + * // Step 4: Allocate & upload all the LUTs + * // + * oglBuilder->allocateAllTextures(); + * + * // Step 5: Build the complete fragment shader program using + * // g_fragShaderText which is the client shader program. + * // + * g_programId = oglBuilder->buildProgram(g_fragShaderText); + * + * // Step 6: Enable the fragment shader program, and all needed textures + * // + * glUseProgram(g_programId); + * glUniform1i(glGetUniformLocation(g_programId, "tex1"), 1); // image texture + * oglBuilder->useAllTextures(g_programId); // LUT textures + * + * // Step 7: Update uniforms from dynamic property instances. + * m_oglBuilder->useAllUniforms(); + * \endcode + * + */ +class OCIOEXPORT GpuShaderDesc : public GpuShaderCreator +{ +public: + + /// Create the default shader description. + static GpuShaderDescRcPtr CreateShaderDesc(); + + GpuShaderCreatorRcPtr clone() const override; + + /** + * Used to retrieve uniform information. UniformData m_type indicates the type of uniform + * and what member of the structure should be used: + * * UNIFORM_DOUBLE: m_getDouble. + * * UNIFORM_BOOL: m_getBool. + * * UNIFORM_FLOAT3: m_getFloat3. + * * UNIFORM_VECTOR_FLOAT: m_vectorFloat. + * * UNIFORM_VECTOR_INT: m_vectorInt. + * + * The m_bufferOffset is the offset in bytes from the start of the uniform buffer. + * For shading languages that use uniform buffers, the offset can be used to + * determine the location of the uniform in the buffer and fill it with the + * corresponding data. + */ + struct UniformData + { + UniformDataType m_type{ UNIFORM_UNKNOWN }; + std::size_t m_bufferOffset{}; + DoubleGetter m_getDouble{}; + BoolGetter m_getBool{}; + Float3Getter m_getFloat3{}; + struct VectorFloat + { + SizeGetter m_getSize{}; + VectorFloatGetter m_getVector{}; + } m_vectorFloat{}; + struct VectorInt + { + SizeGetter m_getSize{}; + VectorIntGetter m_getVector{}; + } m_vectorInt{}; + }; + virtual unsigned getNumUniforms() const noexcept = 0; + /// Returns name of uniform and data as parameter. + virtual const char * getUniform(unsigned index, UniformData & data) const = 0; + + /** + * For shading languages that use uniform buffers, a uniform buffer + * containing all uniforms is generated in the shader code. This method can + * be used to create a buffer of the same size in the client code that can + * be filled with the corresponding data. + * + * \return Size of the uniform buffer in bytes + **/ + virtual std::size_t getUniformBufferSize() const noexcept = 0; + + // 1D lut related methods + virtual unsigned getNumTextures() const noexcept = 0; + virtual void getTexture(unsigned index, + const char *& textureName, + const char *& samplerName, + unsigned & width, + unsigned & height, + TextureType & channel, + TextureDimensions & dimensions, + Interpolation & interpolation) const = 0; + virtual void getTextureValues(unsigned index, const float *& values) const = 0; + + // 3D lut related methods + virtual unsigned getNum3DTextures() const noexcept = 0; + virtual void get3DTexture(unsigned index, + const char *& textureName, + const char *& samplerName, + unsigned & edgelen, + Interpolation & interpolation) const = 0; + virtual void get3DTextureValues(unsigned index, const float *& values) const = 0; + + /// Get the complete OCIO shader program. + const char * getShaderText() const noexcept; + + GpuShaderDesc(const GpuShaderDesc &) = delete; + GpuShaderDesc& operator= (const GpuShaderDesc &) = delete; + /// Do not use (needed only for pybind11). + virtual ~GpuShaderDesc(); + +protected: + GpuShaderDesc(); +}; + + +/** + * Context + * + * A context defines some overrides to a Config. For example, it can override the + * search path or change the value of a context variable. + * + * \note + * Only some \ref Config::getProcessor methods accept a custom context; otherwise, + * the default context instance is used (see \ref Config::getCurrentContext). + * + * Context Variables + * + * The context variables allow changes at runtime using environment variables. For example, + * a color space name (such as src & dst for the ColorSpaceTransform) or a file + * name (such as LUT file name for the FileTransform) could be defined by context + * variables. The color transformation is then customized based on some environment variables. + * + * In a config the context variables support three syntaxes (i.e. ${VAR}, $VAR and %VAR%) and + * the parsing starts from longest to shortest. So, the resolve works like '$TEST_$TESTING_$TE' + * expands in this order '2 1 3'. + * + * Config authors are recommended to include the "environment" section in their configs. This + * improves performance as well as making the config more readable. When present, this section + * must declare all context variables used in the config. It may also provide a default value, + * in case the variable is not present in the user's environment. + * + * A context variable may only be used in the following places: + * * the \ref `ColorSpaceTransform` to define the source and the destination color space names, + * * the \ref `FileTransform` to define the source file name (e.g. a LUT file name), + * * the search_path, + * * the cccid of the \ref `FileTransform` to only extract one specific transform from + * the CDL & CCC files. + * + * Some specific restrictions are worth calling out: + * * they cannot be used as either the name or value of a role, + * * the context variable characters $ and % are prohibited in a color space name. + */ +class OCIOEXPORT Context +{ +public: + static ContextRcPtr Create(); + + ContextRcPtr createEditableCopy() const; + + const char * getCacheID() const; + + void setSearchPath(const char * path); + const char * getSearchPath() const; + + int getNumSearchPaths() const; + const char * getSearchPath(int index) const; + void clearSearchPaths(); + void addSearchPath(const char * path); + void setWorkingDir(const char * dirname); + const char * getWorkingDir() const; + + /// Add (or update) a context variable. But it removes it if the value argument is null. + /// Note that a Context StringVar is the same thing as a Config EnvironmentVar and these + /// are both often referred to as a "context var". + void setStringVar(const char * name, const char * value) noexcept; + /// Get the context variable value. It returns an empty string if the context + /// variable is null or does not exist. + const char * getStringVar(const char * name) const noexcept; + + int getNumStringVars() const; + const char * getStringVarNameByIndex(int index) const; + + const char * getStringVarByIndex(int index) const; + + void clearStringVars(); + + /// Add to the instance all the context variables from ctx. + void addStringVars(const ConstContextRcPtr & ctx) noexcept; + + /// See \ref Config::setEnvironmentMode. + void setEnvironmentMode(EnvironmentMode mode) noexcept; + EnvironmentMode getEnvironmentMode() const noexcept; + + /// Seed string vars with the current environment, based on the EnvironmentMode setting. + void loadEnvironment() noexcept; + + /// Resolve all the context variables from the string. It could be color space + /// names or file names. Note that it recursively applies the context variable resolution. + /// Returns the string unchanged if it does not contain any context variable. + const char * resolveStringVar(const char * string) const noexcept; + /// Resolve all the context variables from the string and return all the context + /// variables used to resolve the string (empty if no context variables were used). + const char * resolveStringVar(const char * string, ContextRcPtr & usedContextVars) const noexcept; + + /** + * Build the resolved and expanded filepath using the search_path when needed, + * and check if the filepath exists. If it cannot be resolved or found, an exception will be + * thrown. The method argument is directly from the config file so it can be an absolute or + * relative file path or a file name. + * + * \note The filepath existence check could add a performance hit. + * + * \note The context variable resolution is performed using :cpp:func:`resolveStringVar`. + */ + const char * resolveFileLocation(const char * filename) const; + /// Build the resolved and expanded filepath and return all the context variables + /// used to resolve the filename (empty if no context variables were used). + const char * resolveFileLocation(const char * filename, ContextRcPtr & usedContextVars) const; + + /// Set the ConfigIOProxy object used to provision the config and LUTs from somewhere other + /// than the file system. + void setConfigIOProxy(ConfigIOProxyRcPtr ciop); + ConfigIOProxyRcPtr getConfigIOProxy() const; + + Context(const Context &) = delete; + Context& operator= (const Context &) = delete; + /// Do not use (needed only for pybind11). + ~Context(); + +private: + Context(); + + static void deleter(Context* c); + + class Impl; + Impl * m_impl; + Impl * getImpl() { return m_impl; } + const Impl * getImpl() const { return m_impl; } +}; + +extern OCIOEXPORT std::ostream& operator<< (std::ostream&, const Context&); + + +/////////////////////////////////////////////////////////////////////////// +// BuiltinTransformRegistry + +/** + * The built-in transform registry contains all the existing built-in transforms which can + * be used by a configuration (version 2 or higher only). + */ +class OCIOEXPORT BuiltinTransformRegistry +{ +public: + BuiltinTransformRegistry(const BuiltinTransformRegistry &) = delete; + BuiltinTransformRegistry & operator= (const BuiltinTransformRegistry &) = delete; + + /// Get the current built-in transform registry. + static ConstBuiltinTransformRegistryRcPtr Get() noexcept; + + /// Get the number of built-in transforms available. + virtual size_t getNumBuiltins() const noexcept = 0; + /** + * Get the style string for the i-th built-in transform. + * The style is the ID string that identifies a given transform. + */ + virtual const char * getBuiltinStyle(size_t index) const = 0; + /// Get the description string for the i-th built-in transform. + virtual const char * getBuiltinDescription(size_t index) const = 0; + +protected: + BuiltinTransformRegistry() = default; + virtual ~BuiltinTransformRegistry() = default; +}; + +/////////////////////////////////////////////////////////////////////////// +// BuiltinConfigRegistry + +/** + * The built-in configs registry contains information about all the existing built-in configs. + */ +class OCIOEXPORT BuiltinConfigRegistry +{ +public: + BuiltinConfigRegistry(const BuiltinConfigRegistry &) = delete; + BuiltinConfigRegistry & operator= (const BuiltinConfigRegistry &) = delete; + + /// Get the current built-in configs registry. + static const BuiltinConfigRegistry & Get() noexcept; + + /// Get the number of built-in configs available. + virtual size_t getNumBuiltinConfigs() const noexcept = 0; + + /// Get the name of the config at the specified (zero-based) index. + /// Throws for illegal index. + virtual const char * getBuiltinConfigName(size_t configIndex) const = 0; + + // Get a user-friendly name for a built-in config, appropriate for displaying in a user interface. + /// Throws for illegal index. + virtual const char * getBuiltinConfigUIName(size_t configIndex) const = 0; + + /// Get Yaml text of the built-in config at the specified index. + /// Throws for illegal index. + virtual const char * getBuiltinConfig(size_t configIndex) const = 0; + + /// Get the Yaml text of the built-in config with the specified name. + /// Throws if the name is not found. + virtual const char * getBuiltinConfigByName(const char * configName) const = 0; + + /** + * @brief Check if a specific built-in config is recommended. + * + * For backwards compatibility reasons, configs will remain in the registry even if they have + * been superseded. If an app is presenting a list of configs to users, it should not include + * configs that are no longer recommended. + * + * Throws if the name is not found. + * + * @param configIndex Index of built-in config. + * @return true if the config is recommended. + */ + virtual bool isBuiltinConfigRecommended(size_t configIndex) const = 0; + +protected: + BuiltinConfigRegistry() = default; + virtual ~BuiltinConfigRegistry() = default; +}; + + +/////////////////////////////////////////////////////////////////////////// +// SystemMonitors + +/** + * Provides access to the ICC monitor profile provided by the operating system for each active display. + */ +class OCIOEXPORT SystemMonitors +{ +public: + SystemMonitors(const SystemMonitors &) = delete; + SystemMonitors & operator= (const SystemMonitors &) = delete; + + /// Get the existing instance. + static ConstSystemMonitorsRcPtr Get() noexcept; + + /** + * True if the OS is able to provide ICC profiles for the attached monitors (macOS, Windows) + * and false otherwise. + */ + virtual bool isSupported() const noexcept = 0; + + /** + * Methods to access some information of the attached and active monitors. + */ + + /// Get the number of active monitors reported by the operating system. + virtual size_t getNumMonitors() const noexcept = 0; + + /** + * \brief Get the monitor profile name. + * + * Get the string describing the monitor. It is used as an argument to instantiateDisplay. It + * may also be used in a UI to ask a user which of several monitors they want to instantiate a + * display for. + */ + virtual const char * getMonitorName(size_t idx) const = 0; + /// Get the ICC profile path associated to the monitor. + virtual const char * getProfileFilepath(size_t idx) const = 0; + +protected: + SystemMonitors() = default; + virtual ~SystemMonitors() = default; +}; + + +/////////////////////////////////////////////////////////////////////////// +// ConfigIOProxy + +/** + * ConfigIOProxy is a proxy class to allow the calling program to supply the config and any + * associated LUT files directly, without relying on the standard file system. + * + * The OCIOZ archive feature is implemented using this mechanism. + */ +class OCIOEXPORT ConfigIOProxy +{ +public: + ConfigIOProxy() = default; + virtual ~ConfigIOProxy() = default; + + /** + * \brief Provide the contents of a LUT file as a buffer of uint8_t data. + * + * \param filepath Fully resolved path to the "file." + * + * The file path is based on the Config's current working directory and is the same absolute + * path that would have been provided to the file system. + * + * \return Vector of uint8 with the content of the LUT. + */ + virtual std::vector getLutData(const char * filepath) const = 0; + + /** + * \brief Provide the config file Yaml to be parsed. + * + * \return String with the config Yaml. + */ + virtual std::string getConfigData() const = 0; + + /** + * \brief Provide a fast unique ID for a LUT file. + * + * This is intended to supply the string that will be used in OCIO's FileCacheMap. + * This should be highly performant and typically should not require extensive + * computation such as calculating the md5 hash of the file, unless it is pre-computed. + * + * If the "file" does not exist, in other words, if the proxy is unable to supply the requested + * file contents, the function must return an empty string. + * + * \param filepath Fully resolve the path to the "file." + * + * The file path is based on the Config's current working directory and is the same absolute + * path that would have been provided to the file system. + * + * \return The file hash string. + */ + virtual std::string getFastLutFileHash(const char * filepath) const = 0; +}; + +} // namespace OCIO_NAMESPACE + +#endif // INCLUDED_OCIO_OPENCOLORIO_H diff --git a/third_party/tlRender-install-Release/include/OpenColorIO/OpenColorTransforms.h b/third_party/tlRender-install-Release/include/OpenColorIO/OpenColorTransforms.h new file mode 100644 index 00000000..8ef04be8 --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenColorIO/OpenColorTransforms.h @@ -0,0 +1,2195 @@ +// SPDX-License-Identifier: BSD-3-Clause +// Copyright Contributors to the OpenColorIO Project. + + +#ifndef INCLUDED_OCIO_OPENCOLORTRANSFORMS_H +#define INCLUDED_OCIO_OPENCOLORTRANSFORMS_H + +#include +#include + +#include "OpenColorTypes.h" + +#ifndef OCIO_NAMESPACE +#error This header cannot be used directly. Use instead. +#endif + +/** + * C++ Transforms + * ============== + * + * Typically only needed when creating and/or manipulating configurations + */ + +namespace OCIO_NAMESPACE +{ + + + +/** + * The FormatMetadata class is intended to be a generic container to hold metadata from various + * file formats. + * + * This class provides a hierarchical metadata container. A metadata object is similar to an + * element in XML. The top level element is named "ROOT" and can't be renamed. Several transforms + * have a FormatMetadata. + * The root element and all of the sub-elements may contain: + * * A name string (e.g. "ROOT", "Description"...). Name can't be empty. + * * A value string (e.g. "updated viewing LUT"). Value can be empty. + * * A list of attributes (name, value) string pairs (e.g. "version", "1.5"). There are helper + * functions to get and set "id" and "name" attributes. Attribute names are unique. + * * And a list of child sub-elements, which are also objects implementing FormatMetadata. There + * can be several sub-elements with the same name. + */ +class OCIOEXPORT FormatMetadata +{ +public: + virtual const char * getElementName() const noexcept = 0; + /// Name has to be a non-empty string. Top-level element can't be renamed. 'ROOT' is reserved. + virtual void setElementName(const char *) = 0; + + virtual const char * getElementValue() const noexcept = 0; + virtual void setElementValue(const char *) = 0; + + virtual int getNumAttributes() const noexcept = 0; + /// Get the name of a attribute ("" if attribute does not exist). + virtual const char * getAttributeName(int i) const noexcept = 0; + /// Get the value of a attribute ("" if attribute does not exist). + virtual const char * getAttributeValue(int i) const noexcept = 0; + /// Get the value of a attribute of a given name ("" if attribute does not exist). + virtual const char * getAttributeValue(const char * name) const noexcept = 0; + /** + * Add an attribute with a given name and value. If an attribute with the same name already + * exists, its value is replaced. Throw if name is NULL or empty. + */ + virtual void addAttribute(const char * name, const char * value) = 0; + + virtual int getNumChildrenElements() const noexcept = 0; + /** + * Access a child element. + * + * \note + * Adding siblings might cause a reallocation of the container and thus might make the + * reference unusable. + * Index i has to be positive and less than getNumChildrenElements() or the function will + * throw. + */ + virtual const FormatMetadata & getChildElement(int i) const = 0; + virtual FormatMetadata & getChildElement(int i) = 0; + + /** + * Add a child element with a given name and value. + * + * Name has to be non-empty. Value may be empty, particularly if this element will have + * children. Element is added after all existing children. Use + * getChildElement(getNumChildrenElements()-1) to access the added element. + */ + virtual void addChildElement(const char * name, const char * value) = 0; + + /// Remove all children, all attributes and the value. + virtual void clear() noexcept = 0; + + virtual FormatMetadata & operator=(const FormatMetadata & rhs) = 0; + + /** + * Convenience method to easily get/set the 'name' attribute. This corresponds to the + * ProcessNode name attribute from a CLF / CTF file or the name key of a transform in the + * config YAML. + */ + virtual const char * getName() const noexcept = 0; + virtual void setName(const char * name) noexcept = 0; + /** + * Convenience method to easily get/set the 'id' attribute. This corresponds to the + * ProcessNode id attribute from a CLF/CTF file or the ColorCorrection id attribute from a + * CC/CCC/CDL file. + */ + virtual const char * getID() const noexcept = 0; + virtual void setID(const char * id) noexcept = 0; + + FormatMetadata(const FormatMetadata & rhs) = delete; + /// Do not use (needed only for pybind11). + virtual ~FormatMetadata() = default; + +protected: + FormatMetadata() = default; +}; + +extern OCIOEXPORT std::ostream & operator<<(std::ostream &, const FormatMetadata &); + + +/// Base class for all the transform classes +class OCIOEXPORT Transform +{ +public: + virtual TransformRcPtr createEditableCopy() const = 0; + + virtual TransformDirection getDirection() const noexcept = 0; + /// Note that this only affects the evaluation and not the values stored in the object. + virtual void setDirection(TransformDirection dir) noexcept = 0; + + virtual TransformType getTransformType() const noexcept = 0; + + /// Will throw if data is not valid. + virtual void validate() const; + + Transform(const Transform &) = delete; + Transform & operator= (const Transform &) = delete; + /// Do not use (needed only for pybind11). + virtual ~Transform() = default; + +protected: + Transform() = default; +}; + +extern OCIOEXPORT std::ostream& operator<< (std::ostream&, const Transform&); + + + +/** + * Forward direction wraps the 'expanded' range into the + * specified, often compressed, range. + */ +class OCIOEXPORT AllocationTransform : public Transform +{ +public: + static AllocationTransformRcPtr Create(); + + TransformRcPtr createEditableCopy() const override; + + TransformDirection getDirection() const noexcept override; + void setDirection(TransformDirection dir) noexcept override; + + TransformType getTransformType() const noexcept override { return TRANSFORM_TYPE_ALLOCATION; } + + /// Will throw if data is not valid. + void validate() const override; + + Allocation getAllocation() const; + void setAllocation(Allocation allocation); + + int getNumVars() const; + void getVars(float * vars) const; + void setVars(int numvars, const float * vars); + + AllocationTransform & operator= (const AllocationTransform &) = delete; + /// Do not use (needed only for pybind11). + virtual ~AllocationTransform(); + +private: + AllocationTransform(); + AllocationTransform(const AllocationTransform &); + + static void deleter(AllocationTransform * t); + + class Impl; + Impl * m_impl; + Impl * getImpl() { return m_impl; } + const Impl * getImpl() const { return m_impl; } +}; + +extern OCIOEXPORT std::ostream& operator<< (std::ostream&, const AllocationTransform&); + + +/** + * A built-in transform is similar to a FileTransform, but without the file. + * OCIO knows how to build a set of commonly used transforms on-demand, thus avoiding the need + * for external files and simplifying config authoring. + */ +class OCIOEXPORT BuiltinTransform : public Transform +{ +public: + static BuiltinTransformRcPtr Create(); + + TransformType getTransformType() const noexcept override { return TRANSFORM_TYPE_BUILTIN; } + + virtual const char * getStyle() const noexcept = 0; + /** + * Select an existing built-in transform style from the list accessible + * through :cpp:class:`BuiltinTransformRegistry`. The style is the ID string that identifies + * which transform to apply. + */ + virtual void setStyle(const char * style) = 0; + + virtual const char * getDescription() const noexcept = 0; + + /// Do not use (needed only for pybind11). + virtual ~BuiltinTransform() = default; + +protected: + BuiltinTransform() = default; + +private: + BuiltinTransform(const BuiltinTransform &) = delete; + BuiltinTransform & operator= (const BuiltinTransform &) = delete; +}; + +// +extern OCIOEXPORT std::ostream & operator<<(std::ostream &, const BuiltinTransform &) noexcept; + + +/** + * \brief + * An implementation of the ASC Color Decision List (CDL), based on the ASC v1.2 + * specification. + * + * **ASC_SOP** + * + * Slope, offset, power:: + * out = clamp( (in * slope) + offset ) ^ power + * + * \note​ + * If the config version is 1, negative values are clamped if the power is not 1.0. + * For config version 2 and higher, the negative handling is controlled by the CDL style. + */ +class OCIOEXPORT CDLTransform : public Transform +{ +public: + static CDLTransformRcPtr Create(); + + /** + * \brief Load the CDL from the src .cdl, .cc, or .ccc file. + * + * \note + * The cccid can be the ID of a CDL or the index of the CDL (as string). If cccid is NULL or + * empty the first CDL is returned. The cccid is case-sensitive. The src must be an + * absolute path reference, no relative directory or envvar resolution is performed. Throws + * if file does not contain any CDL or if the specified cccid is not found. + */ + static CDLTransformRcPtr CreateFromFile(const char * src, const char * cccid); + + /** + * \brief Load all of the CDLs in a .cdl or .ccc file into a single GroupTransform. + * + * \note + * This may be useful as a quicker way for applications to check the contents of each of + * the CDLs. The src must be an absolute path reference, no relative directory or envvar + * resolution is performed. + */ + static GroupTransformRcPtr CreateGroupFromFile(const char * src); + + TransformType getTransformType() const noexcept override { return TRANSFORM_TYPE_CDL; } + + virtual FormatMetadata & getFormatMetadata() noexcept = 0; + virtual const FormatMetadata & getFormatMetadata() const noexcept = 0; + + virtual bool equals(const CDLTransform & other) const noexcept = 0; + + virtual CDLStyle getStyle() const = 0; + /** + * Use CDL_ASC to clamp values to [0,1] per the ASC spec. Use NO_CLAMP to + * never clamp values (regardless of whether power is 1.0). The NO_CLAMP option passes + * negatives through unchanged (like the NEGATIVE_PASS_THRU style of ExponentTransform). + * The default style is CDL_NO_CLAMP. + */ + virtual void setStyle(CDLStyle style) = 0; + + virtual void getSlope(double * rgb) const = 0; + virtual void setSlope(const double * rgb) = 0; + + virtual void getOffset(double * rgb) const = 0; + virtual void setOffset(const double * rgb) = 0; + + virtual void getPower(double * rgb) const = 0; + virtual void setPower(const double * rgb) = 0; + + virtual void getSOP(double * vec9) const = 0; + virtual void setSOP(const double * vec9) = 0; + + virtual double getSat() const = 0; + virtual void setSat(double sat) = 0; + + /// These are hard-coded, by spec, to r709. + virtual void getSatLumaCoefs(double * rgb) const = 0; + + /** + * The get/setID methods are now deprecated. The preferred way of interacting with the ID is + * now via the transform's formatMetadata. + */ + virtual const char * getID() const = 0; + virtual void setID(const char * id) = 0; + + /* Get/Set the first Description element under the SOPNode. + * Note: These emulate the get/setDescription methods from OCIO v1. + * + * Use the FormatMetadata interface for access to other Description elements in the CDL. + * The Description children of the SOPNode element in the CDL XML are named 'SOPDescription' + * in the FormatMetadata. NULL or empty string removes the first SOPDescription element. + */ + virtual const char * getFirstSOPDescription() const = 0; + virtual void setFirstSOPDescription(const char * description) = 0; + + CDLTransform(const CDLTransform &) = delete; + CDLTransform & operator= (const CDLTransform &) = delete; + /// Do not use (needed only for pybind11). + virtual ~CDLTransform() = default; + +protected: + CDLTransform() = default; +}; + +extern OCIOEXPORT std::ostream & operator<<(std::ostream &, const CDLTransform &); + + +class OCIOEXPORT ColorSpaceTransform : public Transform +{ +public: + static ColorSpaceTransformRcPtr Create(); + + TransformRcPtr createEditableCopy() const override; + + TransformDirection getDirection() const noexcept override; + void setDirection(TransformDirection dir) noexcept override; + + TransformType getTransformType() const noexcept override { return TRANSFORM_TYPE_COLORSPACE; } + + void validate() const override; + + const char * getSrc() const; + void setSrc(const char * src); + + const char * getDst() const; + void setDst(const char * dst); + + /// Data color spaces do not get processed when true (which is the default). + bool getDataBypass() const noexcept; + void setDataBypass(bool enabled) noexcept; + + ColorSpaceTransform & operator=(const ColorSpaceTransform &) = delete; + /// Do not use (needed only for pybind11). + virtual ~ColorSpaceTransform(); + +private: + ColorSpaceTransform(); + ColorSpaceTransform(const ColorSpaceTransform &); + + static void deleter(ColorSpaceTransform * t); + + class Impl; + Impl * m_impl; + Impl * getImpl() { return m_impl; } + const Impl * getImpl() const { return m_impl; } +}; + +extern OCIOEXPORT std::ostream & operator<<(std::ostream &, const ColorSpaceTransform &); + + +class OCIOEXPORT DisplayViewTransform : public Transform +{ +public: + static DisplayViewTransformRcPtr Create(); + + TransformRcPtr createEditableCopy() const override; + + TransformDirection getDirection() const noexcept override; + void setDirection(TransformDirection dir) noexcept override; + + TransformType getTransformType() const noexcept override { return TRANSFORM_TYPE_DISPLAY_VIEW; } + + /// Will throw if data is not valid. + void validate() const override; + + const char * getSrc() const; + /// Specify the incoming color space. + void setSrc(const char * name); + + const char * getDisplay() const; + /// Specify which display to use. + void setDisplay(const char * display); + + const char * getView() const; + /// Specify which view transform to use. + void setView(const char * view); + + bool getLooksBypass() const; + /// Looks will be bypassed when true (the default is false). + void setLooksBypass(bool bypass); + + bool getDataBypass() const noexcept; + /// Data color spaces do not get processed when true (which is the default). + void setDataBypass(bool bypass) noexcept; + + /// Do not use (needed only for pybind11). + virtual ~DisplayViewTransform(); + +private: + DisplayViewTransform(); + DisplayViewTransform(const DisplayViewTransform &) = delete; + DisplayViewTransform & operator=(const DisplayViewTransform &) = delete; + + static void deleter(DisplayViewTransform * t); + + class Impl; + Impl * m_impl; + Impl * getImpl() { return m_impl; } + const Impl * getImpl() const { return m_impl; } +}; + +extern OCIOEXPORT std::ostream & operator<<(std::ostream &, const DisplayViewTransform &); + +/** + * Used by the grading transforms to hold the red, green, blue, and master components + * of a single parameter. The master component affects all three channels (RGB). + */ +struct OCIOEXPORT GradingRGBM +{ + GradingRGBM() = default; + GradingRGBM(double red, double green, double blue, double master) + : m_red(red) + , m_green(green) + , m_blue(blue) + , m_master(master) + { + } + GradingRGBM(const double(&rgbm)[4]) + : m_red(rgbm[0]) + , m_green(rgbm[1]) + , m_blue(rgbm[2]) + , m_master(rgbm[3]) + { + } + double m_red{ 0. }; + double m_green{ 0. }; + double m_blue{ 0. }; + double m_master{ 0. }; +}; + +extern OCIOEXPORT bool operator==(const GradingRGBM & lhs, const GradingRGBM & rhs); +extern OCIOEXPORT bool operator!=(const GradingRGBM & lhs, const GradingRGBM & rhs); +extern OCIOEXPORT std::ostream & operator<<(std::ostream &, const GradingRGBM &); + +/// Grading primary values. +struct OCIOEXPORT GradingPrimary +{ + GradingPrimary() = delete; + explicit GradingPrimary(GradingStyle style) + : m_pivot(style == GRADING_LOG ? -0.2 : 0.18) + , m_clampBlack(NoClampBlack()) + , m_clampWhite(NoClampWhite()) + { + } + + GradingRGBM m_brightness{ 0.0, 0.0, 0.0, 0.0 }; + GradingRGBM m_contrast { 1.0, 1.0, 1.0, 1.0 }; + GradingRGBM m_gamma { 1.0, 1.0, 1.0, 1.0 }; + GradingRGBM m_offset { 0.0, 0.0, 0.0, 0.0 }; + GradingRGBM m_exposure { 0.0, 0.0, 0.0, 0.0 }; + GradingRGBM m_lift { 0.0, 0.0, 0.0, 0.0 }; + GradingRGBM m_gain { 1.0, 1.0, 1.0, 1.0 }; + + double m_saturation{ 1.0 }; + double m_pivot; // For LOG default is -0.2. LIN default is 0.18. + double m_pivotBlack{ 0.0 }; + double m_pivotWhite{ 1.0 }; + double m_clampBlack; + double m_clampWhite; + + /// The valid range for each parameter varies. + void validate(GradingStyle style) const; + + static double NoClampBlack(); + static double NoClampWhite(); +}; + +extern OCIOEXPORT bool operator==(const GradingPrimary & lhs, const GradingPrimary & rhs); +extern OCIOEXPORT bool operator!=(const GradingPrimary & lhs, const GradingPrimary & rhs); +extern OCIOEXPORT std::ostream & operator<<(std::ostream &, const GradingPrimary &); + +/// 2D control point used by \ref GradingBSplineCurve. +struct OCIOEXPORT GradingControlPoint +{ + GradingControlPoint() = default; + GradingControlPoint(float x, float y) : m_x(x), m_y(y) {} + float m_x{ 0.f }; + float m_y{ 0.f }; +}; + +extern OCIOEXPORT bool operator==(const GradingControlPoint & lhs, const GradingControlPoint & rhs); +extern OCIOEXPORT bool operator!=(const GradingControlPoint & lhs, const GradingControlPoint & rhs); +extern OCIOEXPORT std::ostream & operator<<(std::ostream &, const GradingControlPoint &); + +/// A BSpline curve defined with \ref GradingControlPoint. +class OCIOEXPORT GradingBSplineCurve +{ +public: + /// Create a BSpline curve with a specified number of control points. + static GradingBSplineCurveRcPtr Create(size_t size); + static GradingBSplineCurveRcPtr Create(size_t size, BSplineType splineType); + static GradingBSplineCurveRcPtr Create(size_t size, HueCurveType curveType); + /// Create a BSpline curve with a list of control points. + static GradingBSplineCurveRcPtr Create(std::initializer_list values); + static GradingBSplineCurveRcPtr Create(std::initializer_list values, BSplineType splineType); + static GradingBSplineCurveRcPtr Create(std::initializer_list values, HueCurveType curveType); + + virtual GradingBSplineCurveRcPtr createEditableCopy() const = 0; + /// Get the number of ControlPoint objects (and the number of slopes). + virtual size_t getNumControlPoints() const noexcept = 0; + virtual void setNumControlPoints(size_t size) = 0; + virtual const GradingControlPoint & getControlPoint(size_t index) const = 0; + virtual GradingControlPoint & getControlPoint(size_t index) = 0; + virtual float getSlope(size_t index) const = 0; + virtual void setSlope(size_t index, float slope) = 0; + virtual bool slopesAreDefault() const = 0; + virtual void validate() const = 0; + virtual BSplineType getSplineType() const = 0; + virtual void setSplineType(BSplineType splineType) = 0; + + GradingBSplineCurve(const GradingBSplineCurve &) = delete; + GradingBSplineCurve & operator= (const GradingBSplineCurve &) = delete; + + /// Do not use (needed only for pybind11). + virtual ~GradingBSplineCurve() = default; + +protected: + GradingBSplineCurve() = default; +}; + +extern OCIOEXPORT bool operator==(const GradingBSplineCurve & lhs, const GradingBSplineCurve & rhs); +extern OCIOEXPORT bool operator!=(const GradingBSplineCurve & lhs, const GradingBSplineCurve & rhs); +extern OCIOEXPORT std::ostream & operator<<(std::ostream &, const GradingBSplineCurve &); + +/** + * A set of red, green, blue and master curves. It is used by RGBCurveTransform and can be used as + * a dynamic property (see \ref DynamicPropertyGradingRGBCurve). + */ +class OCIOEXPORT GradingRGBCurve +{ +public: + /// Create a GradingRGBCurve. (The style argument is not part of the object, it is simply + /// used to initialize the proper default curves.) + static GradingRGBCurveRcPtr Create(GradingStyle style); + static GradingRGBCurveRcPtr Create(const ConstGradingRGBCurveRcPtr & rhs); + static GradingRGBCurveRcPtr Create(const ConstGradingBSplineCurveRcPtr & red, + const ConstGradingBSplineCurveRcPtr & green, + const ConstGradingBSplineCurveRcPtr & blue, + const ConstGradingBSplineCurveRcPtr & master); + + virtual GradingRGBCurveRcPtr createEditableCopy() const = 0; + virtual void validate() const = 0; + virtual bool isIdentity() const = 0; + virtual ConstGradingBSplineCurveRcPtr getCurve(RGBCurveType c) const = 0; + virtual GradingBSplineCurveRcPtr getCurve(RGBCurveType c) = 0; + + /// Do not use (needed only for pybind11). + virtual ~GradingRGBCurve() = default; + +protected: + GradingRGBCurve() = default; +}; + +extern OCIOEXPORT bool operator==(const GradingRGBCurve & lhs, const GradingRGBCurve & rhs); +extern OCIOEXPORT bool operator!=(const GradingRGBCurve & lhs, const GradingRGBCurve & rhs); +extern OCIOEXPORT std::ostream & operator<<(std::ostream &, const GradingRGBCurve &); + +/** + * A set of HUE/SAT/LUM curves. It is used by GradingHueCurveTransform and can be used as + * a dynamic property (see \ref DynamicPropertyGradingHueCurve). + */ +class OCIOEXPORT GradingHueCurve +{ +public: + /// Create a GradingHueCurve. (The style argument is not part of the object, it is simply + /// used to initialize the proper default curves.) + static GradingHueCurveRcPtr Create(GradingStyle style); + static GradingHueCurveRcPtr Create(const ConstGradingHueCurveRcPtr & rhs); + static GradingHueCurveRcPtr Create( + ConstGradingBSplineCurveRcPtr hueHue, + ConstGradingBSplineCurveRcPtr hueSat, + ConstGradingBSplineCurveRcPtr hueLum, + ConstGradingBSplineCurveRcPtr lumSat, + ConstGradingBSplineCurveRcPtr satSat, + ConstGradingBSplineCurveRcPtr lumLum, + ConstGradingBSplineCurveRcPtr satLum, + ConstGradingBSplineCurveRcPtr hueFx); + + static BSplineType GetBSplineTypeForHueCurveType(HueCurveType curveType); + + virtual GradingHueCurveRcPtr createEditableCopy() const = 0; + virtual void validate() const = 0; + virtual bool isIdentity() const = 0; + /** + * Enable drawCurveOnly mode to return the output value of a spline curve without any of the + * other associated processing of the RGB values. This is useful when the curves need to be + * graphed independently in a user interface. To use this, set the curve parameters on the + * Hue-Sat curve. The R, G, and B values will be sent through that curve with the interpretation + * that they are the input axis to the curve (which would be hue, sat, or luma) rather than RGB. + * This mode does not apply the RGB-to-HSY or Lin-to-Log, so for scene-linear curves the luma + * values are interpreted as already being in the logarithmic (f-stop) space. The forward curve + * evaluation is done regardless of the transform direction. + */ + virtual bool getDrawCurveOnly() const = 0; + virtual void setDrawCurveOnly(bool drawCurveOnly) = 0; + virtual ConstGradingBSplineCurveRcPtr getCurve(HueCurveType c) const = 0; + virtual GradingBSplineCurveRcPtr getCurve(HueCurveType c) = 0; + + /// Do not use (needed only for pybind11). + virtual ~GradingHueCurve() = default; + +protected: + GradingHueCurve() = default; +}; + +extern OCIOEXPORT bool operator==(const GradingHueCurve & lhs, const GradingHueCurve & rhs); +extern OCIOEXPORT bool operator!=(const GradingHueCurve & lhs, const GradingHueCurve & rhs); +extern OCIOEXPORT std::ostream & operator<<(std::ostream &, const GradingHueCurve &); + +/** + * Used by the grading tone transforms to hold the red, green, blue, master, start, + * and width components of a single parameter. The master component affects all three channels + * (RGB). The start and width components control the range of tones affected. Although this + * struct simply uses "start" and "width" for all the range values, the actual user-facing name + * changes based on the parameter. + */ +struct OCIOEXPORT GradingRGBMSW +{ + GradingRGBMSW() = default; + GradingRGBMSW(double red, double green, double blue, double master, double start, double width) + : m_red (red) + , m_green (green) + , m_blue (blue) + , m_master(master) + , m_start (start) + , m_width (width) + { + } + GradingRGBMSW(const double(&rgbmsw)[6]) + : m_red (rgbmsw[0]) + , m_green (rgbmsw[1]) + , m_blue (rgbmsw[2]) + , m_master(rgbmsw[3]) + , m_start (rgbmsw[4]) + , m_width (rgbmsw[5]) + { + } + GradingRGBMSW(double start, double width) + : m_start(start) + , m_width(width) + { + } + double m_red { 1. }; + double m_green { 1. }; + double m_blue { 1. }; + double m_master{ 1. }; + double m_start { 0. }; // Or center for midtones. + double m_width { 1. }; // Or pivot for shadows and highlights. +}; + +extern OCIOEXPORT bool operator==(const GradingRGBMSW & lhs, const GradingRGBMSW & rhs); +extern OCIOEXPORT bool operator!=(const GradingRGBMSW & lhs, const GradingRGBMSW & rhs); +extern OCIOEXPORT std::ostream & operator<<(std::ostream &, const GradingRGBMSW &); + +/// Grading tone values. +struct OCIOEXPORT GradingTone +{ + GradingTone() = delete; + explicit GradingTone(GradingStyle style) + : m_blacks(style == GRADING_LIN ? GradingRGBMSW(0., 4.) : + (style == GRADING_LOG ? GradingRGBMSW(0.4, 0.4) : + GradingRGBMSW(0.4, 0.4))) + , m_shadows(style == GRADING_LIN ? GradingRGBMSW(2., -7.) : + (style == GRADING_LOG ? GradingRGBMSW(0.5, 0.) : + GradingRGBMSW(0.6, 0.))) + , m_midtones(style == GRADING_LIN ? GradingRGBMSW(0., 8.) : + (style == GRADING_LOG ? GradingRGBMSW(0.4, 0.6) : + GradingRGBMSW(0.4, 0.7))) + , m_highlights(style == GRADING_LIN ? GradingRGBMSW(-2., 9.) : + (style == GRADING_LOG ? GradingRGBMSW(0.3, 1.) : + GradingRGBMSW(0.2, 1.))) + , m_whites(style == GRADING_LIN ? GradingRGBMSW(0., 8.) : + (style == GRADING_LOG ? GradingRGBMSW(0.4, 0.5) : + GradingRGBMSW(0.5, 0.5))) + { + } + + /** + * The valid range for each parameter varies. The client is expected to enforce + * these bounds in the UI. + */ + void validate() const; + + GradingRGBMSW m_blacks; + GradingRGBMSW m_shadows; + GradingRGBMSW m_midtones; + GradingRGBMSW m_highlights; + GradingRGBMSW m_whites; + double m_scontrast{ 1.0 }; +}; + +extern OCIOEXPORT bool operator==(const GradingTone & lhs, const GradingTone & rhs); +extern OCIOEXPORT bool operator!=(const GradingTone & lhs, const GradingTone & rhs); +extern OCIOEXPORT std::ostream & operator<<(std::ostream &, const GradingTone &); + +/** + * Allows transform parameter values to be set on-the-fly (after finalization). For + * example, to modify the exposure in a viewport. Dynamic properties can be accessed from the + * `CPUProcessor` or `GpuShaderCreator` to change values between processing. + * + * \code{.cpp} + * + * OCIO::ConstConfigRcPtr config = OCIO::GetCurrentConfig(); + * OCIO::ConstProcessorRcPtr processor = config->getProcessor(colorSpace1, colorSpace2); + * OCIO::ConstCPUProcessorRcPtr cpuProcessor = processor->getDefaultCPUProcessor(); + * + * if (cpuProcessor->hasDynamicProperty(OCIO::DYNAMIC_PROPERTY_EXPOSURE)) + * { + * // Get the in-memory implementation of the dynamic property. + * OCIO::DynamicPropertyRcPtr dynProp = + * cpuProcessor->getDynamicProperty(OCIO::DYNAMIC_PROPERTY_EXPOSURE); + * // Get the interface used to change the double value. + * OCIO::DynamicPropertyDoubleRcPtr exposure = + * OCIO::DynamicPropertyValue::AsDouble(dynProp); + * // Update of the dynamic property instance with the new value. + * exposure->setValue(1.1f); + * } + * if (cpuProcessor->hasDynamicProperty(OCIO::DYNAMIC_PROPERTY_GRADING_PRIMARY)) + * { + * OCIO::DynamicPropertyRcPtr dynProp = + * cpuProcessor->getDynamicProperty(OCIO::DYNAMIC_PROPERTY_GRADING_PRIMARY); + * OCIO::DynamicPropertyGradingPrimaryRcPtr primaryProp = + * OCIO::DynamicPropertyValue::AsGradingPrimary(dynProp); + * OCIO::GradingPrimary primary = primaryProp->getValue(); + * primary.m_saturation += 0.1f; + * primaryProp->setValue(primary); + * } + * if (cpuProcessor->hasDynamicProperty(OCIO::DYNAMIC_PROPERTY_GRADING_RGBCURVE)) + * { + * OCIO::DynamicPropertyRcPtr dynProp = + * cpuProcessor->getDynamicProperty(OCIO::DYNAMIC_PROPERTY_GRADING_RGBCURVE); + * OCIO::DynamicPropertyGradingRGBCurveRcPtr rgbCurveProp = + * OCIO::DynamicPropertyValue::AsGradingRGBCurve(dynProp); + * OCIO::ConstGradingRGBCurveRcPtr rgbCurve = rgbCurveProp->getValue()->createEditableCopy(); + * OCIO::GradingBSplineCurveRcPtr rCurve = rgbCurve->getCurve(OCIO::RGB_RED); + * rCurve->getControlPoint(1).m_y += 0.1f; + * rgbCurveProp->setValue(rgbCurve); + * } + * \endcode + */ +class OCIOEXPORT DynamicProperty +{ +public: + virtual DynamicPropertyType getType() const noexcept = 0; + + DynamicProperty & operator=(const DynamicProperty &) = delete; + DynamicProperty(const DynamicProperty &) = delete; + + /// Do not use (needed only for pybind11). + virtual ~DynamicProperty() = default; + +protected: + DynamicProperty() = default; +}; + +namespace DynamicPropertyValue +{ +/** + * Get the property as DynamicPropertyDoubleRcPtr to access the double value. Will throw if + * property type is not a type that holds a double such as DYNAMIC_PROPERTY_EXPOSURE. + */ +extern OCIOEXPORT DynamicPropertyDoubleRcPtr AsDouble(DynamicPropertyRcPtr & prop); +/** + * Get the property as DynamicPropertyGradingPrimaryRcPtr to access the GradingPrimary value. Will + * throw if property type is not DYNAMIC_PROPERTY_GRADING_PRIMARY. + */ +extern OCIOEXPORT DynamicPropertyGradingPrimaryRcPtr AsGradingPrimary(DynamicPropertyRcPtr & prop); +/** + * Get the property as DynamicPropertyGradingRGBCurveRcPtr to access the GradingRGBCurveRcPtr + * value. Will throw if property type is not DYNAMIC_PROPERTY_GRADING_RGBCURVE. + */ +extern OCIOEXPORT DynamicPropertyGradingRGBCurveRcPtr AsGradingRGBCurve(DynamicPropertyRcPtr & prop); +/** + * Get the property as DynamicPropertyGradingHueCurveRcPtr to access the GradingHueCurveRcPtr + * value. Will throw if property type is not DYNAMIC_PROPERTY_GRADING_HUECURVE. + */ +extern OCIOEXPORT DynamicPropertyGradingHueCurveRcPtr AsGradingHueCurve(DynamicPropertyRcPtr & prop); +/** + * Get the property as DynamicPropertyGradingToneRcPtr to access the GradingTone value. Will throw + * if property type is not DYNAMIC_PROPERTY_GRADING_TONE. + */ +extern OCIOEXPORT DynamicPropertyGradingToneRcPtr AsGradingTone(DynamicPropertyRcPtr & prop); +} + +/// Interface used to access dynamic property double value. +class OCIOEXPORT DynamicPropertyDouble +{ +public: + virtual double getValue() const = 0; + virtual void setValue(double value) = 0; + + DynamicPropertyDouble(const DynamicPropertyDouble &) = delete; + DynamicPropertyDouble & operator=(const DynamicPropertyDouble &) = delete; + /// Do not use (needed only for pybind11). + virtual ~DynamicPropertyDouble() = default; + +protected: + DynamicPropertyDouble() = default; +}; + +/// Interface used to access dynamic property GradingPrimary value. +class OCIOEXPORT DynamicPropertyGradingPrimary +{ +public: + virtual const GradingPrimary & getValue() const = 0; + /// Will throw if value is not valid. + virtual void setValue(const GradingPrimary & value) = 0; + + DynamicPropertyGradingPrimary(const DynamicPropertyGradingPrimary &) = delete; + DynamicPropertyGradingPrimary & operator=(const DynamicPropertyGradingPrimary &) = delete; + /// Do not use (needed only for pybind11). + virtual ~DynamicPropertyGradingPrimary() = default; + +protected: + DynamicPropertyGradingPrimary() = default; +}; + +/// Interface used to access dynamic property ConstGradingRGBCurveRcPtr value. +class OCIOEXPORT DynamicPropertyGradingRGBCurve +{ +public: + virtual const ConstGradingRGBCurveRcPtr & getValue() const = 0; + /// Will throw if value is not valid. + virtual void setValue(const ConstGradingRGBCurveRcPtr & value) = 0; + + DynamicPropertyGradingRGBCurve(const DynamicPropertyGradingRGBCurve &) = delete; + DynamicPropertyGradingRGBCurve & operator=(const DynamicPropertyGradingRGBCurve &) = delete; + /// Do not use (needed only for pybind11). + virtual ~DynamicPropertyGradingRGBCurve() = default; + +protected: + DynamicPropertyGradingRGBCurve() = default; +}; + +/// Interface used to access dynamic property ConstGradingHueCurveRcPtr value. +class OCIOEXPORT DynamicPropertyGradingHueCurve +{ +public: + virtual const ConstGradingHueCurveRcPtr & getValue() const = 0; + /// Will throw if value is not valid. + virtual void setValue(const ConstGradingHueCurveRcPtr & value) = 0; + + DynamicPropertyGradingHueCurve(const DynamicPropertyGradingHueCurve &) = delete; + DynamicPropertyGradingHueCurve & operator=(const DynamicPropertyGradingHueCurve &) = delete; + /// Do not use (needed only for pybind11). + virtual ~DynamicPropertyGradingHueCurve() = default; + +protected: + DynamicPropertyGradingHueCurve() = default; +}; + +/// Interface used to access dynamic property GradingTone value. +class OCIOEXPORT DynamicPropertyGradingTone +{ +public: + virtual const GradingTone & getValue() const = 0; + /// Will throw if value is not valid. + virtual void setValue(const GradingTone & value) = 0; + + DynamicPropertyGradingTone(const DynamicPropertyGradingTone &) = delete; + DynamicPropertyGradingTone & operator=(const DynamicPropertyGradingTone &) = delete; + /// Do not use (needed only for pybind11). + virtual ~DynamicPropertyGradingTone() = default; + +protected: + DynamicPropertyGradingTone() = default; +}; + + +/** + * \brief Represents exponent transform: pow( clamp(color), value ). + * + * \note For configs with version == 1: Negative style is ignored and if the exponent is 1.0, + * this will not clamp. Otherwise, the input color will be clamped between [0.0, inf]. + * For configs with version > 1: Negative value handling may be specified via setNegativeStyle. + */ +class OCIOEXPORT ExponentTransform : public Transform +{ +public: + static ExponentTransformRcPtr Create(); + + TransformType getTransformType() const noexcept override { return TRANSFORM_TYPE_EXPONENT; } + + virtual const FormatMetadata & getFormatMetadata() const noexcept = 0; + virtual FormatMetadata & getFormatMetadata() noexcept = 0; + + /// Checks if this exactly equals other. + virtual bool equals(const ExponentTransform & other) const noexcept = 0; + + virtual void getValue(double(&vec4)[4]) const noexcept = 0; + virtual void setValue(const double(&vec4)[4]) noexcept = 0; + + /** + * Specifies how negative values are handled. Legal values: + * + * * NEGATIVE_CLAMP -- Clamp negative values (default). + * * NEGATIVE_MIRROR -- Positive curve is rotated 180 degrees around the origin to + * handle negatives. + * * NEGATIVE_PASS_THRU -- Negative values are passed through unchanged. + */ + virtual NegativeStyle getNegativeStyle() const = 0; + virtual void setNegativeStyle(NegativeStyle style) = 0; + + ExponentTransform(const ExponentTransform &) = delete; + ExponentTransform & operator= (const ExponentTransform &) = delete; + /// Do not use (needed only for pybind11). + virtual ~ExponentTransform() = default; + +protected: + ExponentTransform() = default; +}; + +extern OCIOEXPORT std::ostream & operator<<(std::ostream &, const ExponentTransform &); + + +/** + * Represents power functions with a linear section in the shadows + * such as sRGB and L*. + * + * The basic formula is:: + * + * pow( (x + offset)/(1 + offset), gamma ) + * with the breakpoint at offset/(gamma - 1). + * + * Negative values are never clamped. + */ +class OCIOEXPORT ExponentWithLinearTransform : public Transform +{ +public: + static ExponentWithLinearTransformRcPtr Create(); + + TransformType getTransformType() const noexcept override { return TRANSFORM_TYPE_EXPONENT_WITH_LINEAR; } + + virtual const FormatMetadata & getFormatMetadata() const noexcept = 0; + virtual FormatMetadata & getFormatMetadata() noexcept = 0; + + /// Checks if this exactly equals other. + virtual bool equals(const ExponentWithLinearTransform & other) const noexcept = 0; + + virtual void getGamma(double(&values)[4]) const noexcept = 0; + /** + * Set the exponent value for the power function for R, G, B, A. + * + * \note + * The gamma values must be in the range of [1, 10]. Set the transform direction + * to inverse to obtain the effect of values less than 1. + */ + virtual void setGamma(const double(&values)[4]) noexcept = 0; + + virtual void getOffset(double(&values)[4]) const noexcept = 0; + /** + * Set the offset value for the power function for R, G, B, A. + * + * \note + * The offset values must be in the range [0, 0.9]. + */ + virtual void setOffset(const double(&values)[4]) noexcept = 0; + + /** + * Specifies how negative values are handled. Legal values: + * + * * NEGATIVE_LINEAR -- Linear segment continues into negatives (default). + * * NEGATIVE_MIRROR -- Positive curve is rotated 180 degrees around the origin to + * handle negatives. + */ + virtual NegativeStyle getNegativeStyle() const = 0; + virtual void setNegativeStyle(NegativeStyle style) = 0; + + ExponentWithLinearTransform(const ExponentWithLinearTransform &) = delete; + ExponentWithLinearTransform & operator= (const ExponentWithLinearTransform &) = delete; + /// Do not use (needed only for pybind11). + virtual ~ExponentWithLinearTransform() = default; + +protected: + ExponentWithLinearTransform() = default; +}; + +extern OCIOEXPORT std::ostream & operator<<(std::ostream &, const ExponentWithLinearTransform &); + +/** + * Applies exposure, gamma, and pivoted contrast adjustments. + * Adjusts the math to be appropriate for linear, logarithmic, or video + * color spaces. + */ +class OCIOEXPORT ExposureContrastTransform : public Transform +{ +public: + static ExposureContrastTransformRcPtr Create(); + + TransformType getTransformType() const noexcept override { return TRANSFORM_TYPE_EXPOSURE_CONTRAST; } + + virtual const FormatMetadata & getFormatMetadata() const noexcept = 0; + virtual FormatMetadata & getFormatMetadata() noexcept = 0; + + /// Checks if this exactly equals other. + virtual bool equals(const ExposureContrastTransform & other) const noexcept = 0; + + virtual ExposureContrastStyle getStyle() const = 0; + /// Select the algorithm for linear, video or log color spaces. + virtual void setStyle(ExposureContrastStyle style) = 0; + + virtual double getExposure() const = 0; + /** + * Applies an exposure adjustment. The value is in units of stops (regardless of style), for + * example, a value of -1 would be equivalent to reducing the lighting by one half. + */ + virtual void setExposure(double exposure) = 0; + /** + * Exposure can be made dynamic so the value can be changed through the CPU or GPU processor, + * but if there are several ExposureContrastTransform only one can have a dynamic exposure. + */ + virtual bool isExposureDynamic() const = 0; + virtual void makeExposureDynamic() = 0; + virtual void makeExposureNonDynamic() = 0; + + virtual double getContrast() const = 0; + /** + * Applies a contrast/gamma adjustment around a pivot point. The contrast and gamma are + * mathematically the same, but two controls are provided to enable the use of separate + * dynamic parameters. Contrast is usually a scene-referred adjustment that pivots around + * gray whereas gamma is usually a display-referred adjustment that pivots around white. + */ + virtual void setContrast(double contrast) = 0; + /** + * Contrast can be made dynamic so the value can be changed through the CPU or GPU processor, + * but if there are several ExposureContrastTransform only one can have a dynamic contrast. + */ + virtual bool isContrastDynamic() const = 0; + virtual void makeContrastDynamic() = 0; + virtual void makeContrastNonDynamic() = 0; + + virtual double getGamma() const = 0; + virtual void setGamma(double gamma) = 0; + /** + * Gamma can be made dynamic so the value can be changed through the CPU or GPU processor, + * but if there are several ExposureContrastTransform only one can have a dynamic gamma. + */ + virtual bool isGammaDynamic() const = 0; + virtual void makeGammaDynamic() = 0; + virtual void makeGammaNonDynamic() = 0; + + virtual double getPivot() const = 0; + /** + * Set the pivot point around which the contrast + * and gamma controls will work. Regardless of whether + * linear/video/log-style is being used, the pivot is always expressed + * in linear. In other words, a pivot of 0.18 is always mid-gray. + */ + virtual void setPivot(double pivot) = 0; + + virtual double getLogExposureStep() const = 0; + /** + * Set the increment needed to move one stop for + * the log-style algorithm. For example, ACEScct is 0.057, LogC is + * roughly 0.074, and Cineon is roughly 90/1023 = 0.088. + * The default value is 0.088. + */ + virtual void setLogExposureStep(double logExposureStep) = 0; + + virtual double getLogMidGray() const = 0; + /** + * Set the position of 18% gray for use by the + * log-style algorithm. For example, ACEScct is about 0.41, LogC is + * about 0.39, and ADX10 is 445/1023 = 0.435. + * The default value is 0.435. + */ + virtual void setLogMidGray(double logMidGray) = 0; + + /// Do not use (needed only for pybind11). + virtual ~ExposureContrastTransform() = default; + +protected: + ExposureContrastTransform() = default; + +private: + ExposureContrastTransform(const ExposureContrastTransform &) = delete; + ExposureContrastTransform & operator= (const ExposureContrastTransform &) = delete; +}; + +extern OCIOEXPORT std::ostream & operator<<(std::ostream &, + const ExposureContrastTransform &); + + +class OCIOEXPORT FileTransform : public Transform +{ +public: + static FileTransformRcPtr Create(); + + TransformRcPtr createEditableCopy() const override; + + TransformDirection getDirection() const noexcept override; + void setDirection(TransformDirection dir) noexcept override; + + TransformType getTransformType() const noexcept override { return TRANSFORM_TYPE_FILE; } + + /// Will throw if data is not valid. + void validate() const override; + + const char * getSrc() const; + void setSrc(const char * src); + + /** + * The cccid can be the ID of a CDL or the index of the CDL (as string). If cccid is NULL or + * empty the first CDL is returned. The cccid is case-sensitive. + */ + const char * getCCCId() const; + void setCCCId(const char * id); + + CDLStyle getCDLStyle() const; + /** + * Can be used with CDL, CC & CCC formats to specify the clamping behavior of + * the CDLTransform. Default is CDL_NO_CLAMP. + */ + void setCDLStyle(CDLStyle); + + /** + * The file parsers that care about interpolation (LUTs) will try to make use of the requested + * interpolation method when loading the file. In these cases, if the requested method could + * not be used, a warning is logged. If no method is provided, or a method cannot be used, + * INTERP_DEFAULT is used. + */ + Interpolation getInterpolation() const; + void setInterpolation(Interpolation interp); + + /// Get the number of LUT readers. + static int GetNumFormats(); + /// Get the LUT readers at index, return empty string if an invalid index is specified. + static const char * GetFormatNameByIndex(int index); + /// Get the LUT reader extension at index, return empty string if an invalid index is specified. + static const char * GetFormatExtensionByIndex(int index); + /// Returns true if the extension corresponds to a format supported by FileTransform. + /// The argument is case-insensitive, and a leading dot, if present, is ignored. + /// Note that FileTransform will attempt all format readers on a given file until it is + /// successful, even files that contain an unsupported extension or no extension. + /// However, this function is useful for applications that want to know which files are likely + /// to be LUT files, based on their extension. + static bool IsFormatExtensionSupported(const char * extension); + + FileTransform & operator=(const FileTransform &) = delete; + /// Do not use (needed only for pybind11). + virtual ~FileTransform(); + +private: + FileTransform(); + FileTransform(const FileTransform &); + + static void deleter(FileTransform * t); + + class Impl; + Impl * m_impl; + Impl * getImpl() { return m_impl; } + const Impl * getImpl() const { return m_impl; } +}; + +extern OCIOEXPORT std::ostream & operator<<(std::ostream &, const FileTransform &); + + +/** + * Provides a set of hard-coded algorithmic building blocks + * that are needed to accurately implement various common color transformations. + */ +class OCIOEXPORT FixedFunctionTransform : public Transform +{ +public: + static FixedFunctionTransformRcPtr Create(FixedFunctionStyle style); + static FixedFunctionTransformRcPtr Create(FixedFunctionStyle style, + const double * params, + size_t num); + + TransformType getTransformType() const noexcept override { return TRANSFORM_TYPE_FIXED_FUNCTION; } + + virtual const FormatMetadata & getFormatMetadata() const noexcept = 0; + virtual FormatMetadata & getFormatMetadata() noexcept = 0; + + /// Checks if this exactly equals other. + virtual bool equals(const FixedFunctionTransform & other) const noexcept = 0; + + virtual FixedFunctionStyle getStyle() const = 0; + /// Select which algorithm to use. + virtual void setStyle(FixedFunctionStyle style) = 0; + + virtual size_t getNumParams() const = 0; + virtual void getParams(double * params) const = 0; + /// Set the parameters (for functions that require them). + virtual void setParams(const double * params, size_t num) = 0; + + FixedFunctionTransform(const FixedFunctionTransform &) = delete; + FixedFunctionTransform & operator= (const FixedFunctionTransform &) = delete; + /// Do not use (needed only for pybind11). + virtual ~FixedFunctionTransform() = default; + +protected: + FixedFunctionTransform() = default; +}; + +extern OCIOEXPORT std::ostream & operator<<(std::ostream &, const FixedFunctionTransform &); + + +/** + * Primary color correction controls. + * + * This transform is for making basic color correction adjustments to an image such as brightness, + * contrast, or saturation. + * + * The controls are customized for linear, logarithmic, and video color encodings. + * * Linear controls: Exposure, Contrast, Pivot, Offset, Saturation, Black Clip, White Clip. + * * Log controls: Brightness, Contrast, Pivot, Log Gamma, Saturation, Black Clip, White Clip, + * Black Pivot White Pivot. + * * Video controls : Lift, Gamma, Gain, Offset, Saturation, Black Clip, White Clip, + * Black Pivot White Pivot. + * + * The controls are dynamic, so they may be adjusted even after the Transform has been included + * in a Processor. + */ +class OCIOEXPORT GradingPrimaryTransform : public Transform +{ +public: + /// Creates an instance of GradingPrimaryTransform. + static GradingPrimaryTransformRcPtr Create(GradingStyle style); + + TransformType getTransformType() const noexcept override { return TRANSFORM_TYPE_GRADING_PRIMARY; } + + virtual const FormatMetadata & getFormatMetadata() const noexcept = 0; + virtual FormatMetadata & getFormatMetadata() noexcept = 0; + + /// Checks if this equals other. + virtual bool equals(const GradingPrimaryTransform & other) const noexcept = 0; + + /// Adjusts the behavior of the transform for log, linear, or video color space encodings. + virtual GradingStyle getStyle() const noexcept = 0; + /// Will reset value to style's defaults if style is not the current style. + virtual void setStyle(GradingStyle style) noexcept = 0; + + virtual const GradingPrimary & getValue() const = 0; + /// Throws if value is not valid. + virtual void setValue(const GradingPrimary & values) = 0; + + /** + * Parameters can be made dynamic so the values can be changed through the CPU or GPU processor, + * but if there are several GradingPrimaryTransform only one can have dynamic parameters. + */ + virtual bool isDynamic() const noexcept = 0; + virtual void makeDynamic() noexcept = 0; + virtual void makeNonDynamic() noexcept = 0; + + GradingPrimaryTransform(const GradingPrimaryTransform &) = delete; + GradingPrimaryTransform & operator= (const GradingPrimaryTransform &) = delete; + /// Do not use (needed only for pybind11). + virtual ~GradingPrimaryTransform() = default; + +protected: + GradingPrimaryTransform() = default; +}; + +extern OCIOEXPORT std::ostream & operator<<(std::ostream &, const GradingPrimaryTransform &) noexcept; + +/** + * Hue curve color correction controls. + * + * This transform provides eight spline curves to make the following adjustments: + * + * - Hue-Hue: Map input hue to output hue (where a diagonal line is the identity). + * - Hue-Sat: Adjust saturation as a function of hue (a value of 1.0 is the identity). + * - Hue-Lum: Adjust luma as a function of hue (a value of 1.0 is the identity). + * - Lum-Sat: Adjust saturation as a function of luma (a value of 1.0 is the identity). + * - Sat-Sat: Adjust saturation as a function of saturation (a diagonal is the identity). + * - Lum-Lum: Adjust luma as a function of luma, maintaining hue & sat (diagonal is identity). + * - Sat-Lum: Adjust luma as a function of saturation (a value of 1.0 is the identity). + * - Hue-FX : Map input hue to delta output hue (a value of 0.0 is the identity). + * + * The algorithm is different for scene-linear, logarithmic, and video color spaces, so + * initialize the style argument appropriately before setting the curves. + * + * An RGB-to-HSY FixedFunction is used to convert RGB into a hue, saturation, luma color + * space. However, there is an option to bypass that conversion to use an outboard transform. + * + * Like the GradingRGBCurveTransform, the curves are defined by the x and y coordinates of a + * set of control points. A spline will be fit to the control points. Monotonicity is preserved + * for curves where the diagonal is the identity. For curves that take luma as input, if the + * style is scene-linear, the units are in photographic stops relative to 0.18. For log and + * video, the luma is scaled the same as the input RGB. + * + * The hue variable is [0,1] and is periodic. For example, -0.2, 0.8, and 1.8 are equivalent. + * The domain of the curves is [0,1] and control points outside that domain are mapped into it. + * A hue of 0 or 1 corresponds to a magenta hue. + * + * The control points are dynamic, so they may be adjusted even after the Transform is included + * in a Processor. However, creating a curve or setting the parameters will call the + * GradingBSplineCurveImpl::validate function, which will throw an exception if the control + * points do not meet certain requirements, for example that the X-coordinates are non-decreasing + * Please review that function for details on the validation. Applications that provide a UI to + * edit curves must ensure that they prevent users from creating control points that are not valid. + * + * The transform is invertible as long as the curves allow it. For example, if saturation is + * mapped to zero, obviously that cannot be resaturated. Care should be taken with the Hue-FX + * curve because it is possible to fold hues over on themselves, which also cannot be inverted. + * In most cases the Hue-FX curve is not necessary since the Hue-Hue curve provides similar + * functionality with the added benefit of being strictly invertible. + */ +class OCIOEXPORT GradingHueCurveTransform : public Transform +{ +public: + /// Creates an instance of GradingHueCurveTransform. + static GradingHueCurveTransformRcPtr Create(GradingStyle style); + + TransformType getTransformType() const noexcept override { return TRANSFORM_TYPE_GRADING_HUE_CURVE; } + + virtual const FormatMetadata & getFormatMetadata() const noexcept = 0; + virtual FormatMetadata & getFormatMetadata() noexcept = 0; + + /// Checks if this equals other. + virtual bool equals(const GradingHueCurveTransform & other) const noexcept = 0; + + /// Adjusts the behavior of the transform for log, linear, or video color space encodings. + virtual GradingStyle getStyle() const noexcept = 0; + + /// Will reset value to style's defaults if style is not the current style. + virtual void setStyle(GradingStyle style) noexcept = 0; + + virtual const ConstGradingHueCurveRcPtr getValue() const = 0; + + /// Throws if value is not valid. + virtual void setValue(const ConstGradingHueCurveRcPtr & value) = 0; + + /** + * It is possible to provide a desired slope value for each control point. The number of slopes is + * always the same as the number of control points and so the control points must be set before + * setting the slopes. The slopes are primarily intended for use by config authors looking to match + * a specific shape with as few control points as possible, they are not intended to be exposed to + * a user interface for direct manipulation. When a curve is being generated for creative purposes + * it is better to let OCIO calculate the slopes automatically. + */ + virtual float getSlope(HueCurveType c, size_t index) const = 0; + virtual void setSlope(HueCurveType c, size_t index, float slope) = 0; + virtual bool slopesAreDefault(HueCurveType c) const = 0; + + /** + * By default, the input is transformed into HSY space to apply the hue curves and then the result is + * transformed back to RGB. However, this may be set to HSY_TRANSFORM_NONE to bypass this in order to + * use other hue/sat/luma type transforms applied separately before and after this transform. + */ + virtual HSYTransformStyle getRGBToHSY() const = 0; + virtual void setRGBToHSY(HSYTransformStyle style) = 0; + + ///** + // * Parameters can be made dynamic so the values can be changed through the CPU or GPU processor, + // * but if there are several GradingHueCurveTransform only one can have dynamic parameters. + // */ + virtual bool isDynamic() const noexcept = 0; + virtual void makeDynamic() noexcept = 0; + virtual void makeNonDynamic() noexcept = 0; + + GradingHueCurveTransform(const GradingHueCurveTransform &) = delete; + GradingHueCurveTransform & operator= (const GradingHueCurveTransform &) = delete; + + /// Do not use (needed only for pybind11). + virtual ~GradingHueCurveTransform() = default; + +protected: + GradingHueCurveTransform() = default; +}; + +extern OCIOEXPORT std::ostream & operator<<(std::ostream &, const GradingHueCurveTransform &) noexcept; + +/** + * RGB curve color correction controls. + * + * This transform allows for modifying tone reproduction via B-spline curves. + * + * There is an R, G, and B curve followed by a Master curve (that applies to R, G, and B). Each + * curve is specified via the x and y coordinates of its control points. A monotonic spline is + * fit to the control points. The x coordinates must be non-decreasing. When the grading style + * is linear, the units for the control points are photographic stops relative to 0.18. + * + * The control points are dynamic, so they may be adjusted even after the Transform is included + * in a Processor. + */ +class OCIOEXPORT GradingRGBCurveTransform : public Transform +{ +public: + /// Creates an instance of GradingPrimaryTransform. + static GradingRGBCurveTransformRcPtr Create(GradingStyle style); + + TransformType getTransformType() const noexcept override { return TRANSFORM_TYPE_GRADING_RGB_CURVE; } + + virtual const FormatMetadata & getFormatMetadata() const noexcept = 0; + virtual FormatMetadata & getFormatMetadata() noexcept = 0; + + /// Checks if this equals other. + virtual bool equals(const GradingRGBCurveTransform & other) const noexcept = 0; + + /// Adjusts the behavior of the transform for log, linear, or video color space encodings. + virtual GradingStyle getStyle() const noexcept = 0; + /// Will reset value to style's defaults if style is not the current style. + virtual void setStyle(GradingStyle style) noexcept = 0; + + virtual const ConstGradingRGBCurveRcPtr getValue() const = 0; + /// Throws if value is not valid. + virtual void setValue(const ConstGradingRGBCurveRcPtr & values) = 0; + + /** + * It is possible to provide a desired slope value for each control point. The number of slopes is + * always the same as the number of control points and so the control points must be set before + * setting the slopes. The slopes are primarily intended for use by config authors looking to match + * a specific shape with as few control points as possible, they are not intended to be exposed to + * a user interface for direct manipulation. When a curve is being generated for creative purposes + * it is better to let OCIO calculate the slopes automatically. + */ + virtual float getSlope(RGBCurveType c, size_t index) const = 0; + virtual void setSlope(RGBCurveType c, size_t index, float slope) = 0; + virtual bool slopesAreDefault(RGBCurveType c) const = 0; + + /** + * The scene-linear grading style applies a lin-to-log transform to the pixel + * values before going through the curve. However, in some cases (e.g. drawing curves in a UI) + * it may be useful to bypass the lin-to-log. Default value is false. + */ + virtual bool getBypassLinToLog() const = 0; + virtual void setBypassLinToLog(bool bypass) = 0; + + /** + * Parameters can be made dynamic so the values can be changed through the CPU or GPU processor, + * but if there are several GradingRGBCurveTransform only one can have dynamic parameters. + */ + virtual bool isDynamic() const noexcept = 0; + virtual void makeDynamic() noexcept = 0; + virtual void makeNonDynamic() noexcept = 0; + + GradingRGBCurveTransform(const GradingRGBCurveTransform &) = delete; + GradingRGBCurveTransform & operator= (const GradingRGBCurveTransform &) = delete; + /// Do not use (needed only for pybind11). + virtual ~GradingRGBCurveTransform() = default; + +protected: + GradingRGBCurveTransform() = default; +}; + +extern OCIOEXPORT std::ostream & operator<<(std::ostream &, const GradingRGBCurveTransform &) noexcept; + + +/** + * Tonal color correction controls. + * + * This transform is for making fine adjustments to tone reproduction in specific tonal ranges. + * + * There are five tonal controls and each one has two parameters to control its range: + * * Blacks (start, width) + * * Shadows(start, pivot) + * * Midtones(center, width) + * * Highlights(start, pivot) + * * Whites(start, width) + * + * The transform has three styles that adjust the response and default ranges for linear, + * logarithimic, and video color encodings. The defaults vary based on the style. When the + * style is linear, the units for start/width/etc. are photographic stops relative to 0.18. + * + * Each control allows R, G, B adjustments and a Master adjustment. + * + * There is also an S-contrast control for imparting an S-shape curve. + * + * The controls are dynamic, so they may be adjusted even after the Transform has been included + * in a Processor. + */ +class OCIOEXPORT GradingToneTransform : public Transform +{ +public: + /// Creates an instance of GradingToneTransform. + static GradingToneTransformRcPtr Create(GradingStyle style); + + TransformType getTransformType() const noexcept override { return TRANSFORM_TYPE_GRADING_TONE; } + + virtual const FormatMetadata & getFormatMetadata() const noexcept = 0; + virtual FormatMetadata & getFormatMetadata() noexcept = 0; + + virtual bool equals(const GradingToneTransform & other) const noexcept = 0; + + /// Adjusts the behavior of the transform for log, linear, or video color space encodings. + virtual GradingStyle getStyle() const noexcept = 0; + /// Will reset value to style's defaults if style is not the current style. + virtual void setStyle(GradingStyle style) noexcept = 0; + + virtual const GradingTone & getValue() const = 0; + virtual void setValue(const GradingTone & values) = 0; + + /** + * Parameters can be made dynamic so the values can be changed through the CPU or GPU processor, + * but if there are several GradingToneTransform only one can have dynamic parameters. + */ + virtual bool isDynamic() const noexcept = 0; + virtual void makeDynamic() noexcept = 0; + virtual void makeNonDynamic() noexcept = 0; + + GradingToneTransform(const GradingToneTransform &) = delete; + GradingToneTransform & operator= (const GradingToneTransform &) = delete; + /// Do not use (needed only for pybind11). + virtual ~GradingToneTransform() = default; + +protected: + GradingToneTransform() = default; +}; + +extern OCIOEXPORT std::ostream & operator<<(std::ostream &, const GradingToneTransform &) noexcept; + + +class OCIOEXPORT GroupTransform : public Transform +{ +public: + static GroupTransformRcPtr Create(); + + virtual const FormatMetadata & getFormatMetadata() const noexcept = 0; + virtual FormatMetadata & getFormatMetadata() noexcept = 0; + + /// Throws if index is not allowed. + virtual ConstTransformRcPtr getTransform(int index) const = 0; + + /// Throws if index is not allowed. + virtual TransformRcPtr & getTransform(int index) = 0; + + /// Return number of transforms. + virtual int getNumTransforms() const noexcept = 0; + /// Adds a transform to the end of the group. + virtual void appendTransform(TransformRcPtr transform) noexcept = 0; + /// Add a transform at the beginning of the group. + virtual void prependTransform(TransformRcPtr transform) noexcept = 0; + + /** + * \brief Write the transforms comprising the group to the stream. + * + * Writing (as opposed to Baking) is a lossless process. An exception is thrown if the + * processor cannot be losslessly written to the specified file format. Transforms such as + * FileTransform or ColorSpaceTransform are resolved into write-able simple transforms using + * the config and context. Supported formats include CTF, CLF, and CDL. All available formats + * can be listed with the following: + * \code{.cpp} + * // What are the allowed writing output formats? + * std::ostringstream formats; + * formats << "Formats to write to: "; + * for (int i = 0; i < GroupTransform::GetNumWriteFormats(); ++i) + * { + * if (i != 0) formats << ", "; + * formats << GroupTransform::GetFormatNameByIndex(i); + * formats << " (." << GroupTransform::GetFormatExtensionByIndex(i) << ")"; + * } + * \endcode + */ + virtual void write(const ConstConfigRcPtr & config, + const char * formatName, + std::ostream & os) const = 0; + + /// Get the number of writers. + static int GetNumWriteFormats() noexcept; + + /// Get the writer at index, return empty string if an invalid index is specified. + static const char * GetFormatNameByIndex(int index) noexcept; + static const char * GetFormatExtensionByIndex(int index) noexcept; + + GroupTransform(const GroupTransform &) = delete; + GroupTransform & operator=(const GroupTransform &) = delete; + /// Do not use (needed only for pybind11). + virtual ~GroupTransform() = default; + +protected: + GroupTransform() = default; +}; + +extern OCIOEXPORT std::ostream & operator<<(std::ostream &, const GroupTransform &); + + + +/** + * Applies a logarithm with an affine transform before and after. + * Represents the Cineon lin-to-log type transforms:: + * + * logSideSlope * log( linSideSlope * color + linSideOffset, base) + logSideOffset + * + * * Default values are: 1. * log( 1. * color + 0., 2.) + 0. + * * The alpha channel is not affected. + */ +class OCIOEXPORT LogAffineTransform : public Transform +{ +public: + static LogAffineTransformRcPtr Create(); + + TransformType getTransformType() const noexcept override { return TRANSFORM_TYPE_LOG_AFFINE; } + + virtual const FormatMetadata & getFormatMetadata() const noexcept = 0; + virtual FormatMetadata & getFormatMetadata() noexcept = 0; + + /// Checks if this exactly equals other. + virtual bool equals(const LogAffineTransform & other) const noexcept = 0; + + virtual double getBase() const noexcept = 0; + virtual void setBase(double base) noexcept = 0; + + // !rst:: **Get/Set values for the R, G, B components** + + virtual void getLogSideSlopeValue(double(&values)[3]) const noexcept = 0; + virtual void setLogSideSlopeValue(const double(&values)[3]) noexcept = 0; + virtual void getLogSideOffsetValue(double(&values)[3]) const noexcept = 0; + virtual void setLogSideOffsetValue(const double(&values)[3]) noexcept = 0; + virtual void getLinSideSlopeValue(double(&values)[3]) const noexcept = 0; + virtual void setLinSideSlopeValue(const double(&values)[3]) noexcept = 0; + virtual void getLinSideOffsetValue(double(&values)[3]) const noexcept = 0; + virtual void setLinSideOffsetValue(const double(&values)[3]) noexcept = 0; + + LogAffineTransform(const LogAffineTransform &) = delete; + LogAffineTransform & operator= (const LogAffineTransform &) = delete; + /// Do not use (needed only for pybind11). + virtual ~LogAffineTransform() = default; + +protected: + LogAffineTransform() = default; +}; + +extern OCIOEXPORT std::ostream & operator<<(std::ostream &, const LogAffineTransform &); + + +/** + * Same as LogAffineTransform but with the addition of a linear segment near black. This formula + * is used for many camera logs (e.g., LogC) as well as ACEScct. + * + * * The linSideBreak specifies the point on the linear axis where the log and linear + * segments meet. It must be set (there is no default). + * * The linearSlope specifies the slope of the linear segment of the forward (linToLog) + * transform. By default it is set equal to the slope of the log curve at the break point. + */ +class OCIOEXPORT LogCameraTransform : public Transform +{ +public: + /// LinSideBreak must be set for the transform to be valid (there is no default). + static LogCameraTransformRcPtr Create(const double(&linSideBreakValues)[3]); + + TransformType getTransformType() const noexcept override { return TRANSFORM_TYPE_LOG_CAMERA; } + + virtual const FormatMetadata & getFormatMetadata() const noexcept = 0; + virtual FormatMetadata & getFormatMetadata() noexcept = 0; + + /// Checks if this exactly equals other. + virtual bool equals(const LogCameraTransform & other) const noexcept = 0; + + virtual double getBase() const noexcept = 0; + virtual void setBase(double base) noexcept = 0; + + /// Get/Set values for the R, G, B components. + virtual void getLogSideSlopeValue(double(&values)[3]) const noexcept = 0; + virtual void setLogSideSlopeValue(const double(&values)[3]) noexcept = 0; + virtual void getLogSideOffsetValue(double(&values)[3]) const noexcept = 0; + virtual void setLogSideOffsetValue(const double(&values)[3]) noexcept = 0; + virtual void getLinSideSlopeValue(double(&values)[3]) const noexcept = 0; + virtual void setLinSideSlopeValue(const double(&values)[3]) noexcept = 0; + virtual void getLinSideOffsetValue(double(&values)[3]) const noexcept = 0; + virtual void setLinSideOffsetValue(const double(&values)[3]) noexcept = 0; + virtual void getLinSideBreakValue(double(&values)[3]) const noexcept = 0; + virtual void setLinSideBreakValue(const double(&values)[3]) noexcept = 0; + + /// Return true if LinearSlope values were set, false if they were not. + virtual bool getLinearSlopeValue(double(&values)[3]) const = 0; + /** + * \brief Set LinearSlope value. + * + * \note + * You must call setLinSideBreakValue before calling this. + */ + virtual void setLinearSlopeValue(const double(&values)[3]) = 0; + /// Remove LinearSlope values so that default values are used. + virtual void unsetLinearSlopeValue() = 0; + + LogCameraTransform(const LogCameraTransform &) = delete; + LogCameraTransform & operator= (const LogCameraTransform &) = delete; + /// Do not use (needed only for pybind11). + virtual ~LogCameraTransform() = default; + +protected: + LogCameraTransform() = default; +}; + +extern OCIOEXPORT std::ostream & operator<<(std::ostream &, const LogCameraTransform &); + + +/** + * Represents log transform: log(color, base) + * + * * The input will be clamped for negative numbers. + * * Default base is 2.0. + * * The alpha channel is not affected. + */ +class OCIOEXPORT LogTransform : public Transform +{ +public: + static LogTransformRcPtr Create(); + + TransformType getTransformType() const noexcept override { return TRANSFORM_TYPE_LOG; } + + virtual const FormatMetadata & getFormatMetadata() const noexcept = 0; + virtual FormatMetadata & getFormatMetadata() noexcept = 0; + + /// Checks if this exactly equals other. + virtual bool equals(const LogTransform & other) const noexcept = 0; + + virtual double getBase() const noexcept = 0; + virtual void setBase(double val) noexcept = 0; + + LogTransform(const LogTransform &) = delete; + LogTransform & operator= (const LogTransform &) = delete; + /// Do not use (needed only for pybind11). + virtual ~LogTransform() = default; + +protected: + LogTransform() = default; +}; + +extern OCIOEXPORT std::ostream & operator<<(std::ostream &, const LogTransform &); + + +class OCIOEXPORT LookTransform : public Transform +{ +public: + static LookTransformRcPtr Create(); + + TransformRcPtr createEditableCopy() const override; + + TransformDirection getDirection() const noexcept override; + void setDirection(TransformDirection dir) noexcept override; + + TransformType getTransformType() const noexcept override { return TRANSFORM_TYPE_LOOK; } + + /// Will throw if data is not valid. + void validate() const override; + + const char * getSrc() const; + void setSrc(const char * src); + + const char * getDst() const; + void setDst(const char * dst); + + const char * getLooks() const; + /** + * Specify looks to apply. + * Looks is a potentially comma (or colon) delimited list of look names, + * Where +/- prefixes are optionally allowed to denote forward/inverse + * look specification. (And forward is assumed in the absence of either) + */ + void setLooks(const char * looks); + + bool getSkipColorSpaceConversion() const; + void setSkipColorSpaceConversion(bool skip); + + /** + * Return the name of the color space after applying looks in the forward + * direction but without converting to the destination color space. This is equivalent + * to the process space of the last look in the look sequence (and takes into account that + * a look fall-back may be used). + */ + static const char * GetLooksResultColorSpace(const ConstConfigRcPtr & config, + const ConstContextRcPtr & context, + const char * looks); + + LookTransform & operator=(const LookTransform &) = delete; + /// Do not use (needed only for pybind11). + virtual ~LookTransform(); + +private: + LookTransform(); + LookTransform(const LookTransform &); + + static void deleter(LookTransform * t); + + class Impl; + Impl * m_impl; + Impl * getImpl() { return m_impl; } + const Impl * getImpl() const { return m_impl; } +}; + +extern OCIOEXPORT std::ostream & operator<<(std::ostream &, const LookTransform &); + + +/// Represents a 1D-LUT transform. +class OCIOEXPORT Lut1DTransform : public Transform +{ +public: + /// Create an identity 1D-LUT of length two. + static Lut1DTransformRcPtr Create(); + + /** + * Create an identity 1D-LUT with specific length and + * half-domain setting. Will throw for lengths longer than 1024x1024. + */ + static Lut1DTransformRcPtr Create(unsigned long length, + bool isHalfDomain); + + TransformType getTransformType() const noexcept override { return TRANSFORM_TYPE_LUT1D; } + + virtual BitDepth getFileOutputBitDepth() const noexcept = 0; + /** + * Get the bit-depth associated with the LUT values read + * from a file or set the bit-depth of values to be written to a file + * (for file formats such as CLF that support multiple bit-depths). + * However, note that the values stored in the object are always + * normalized. + */ + virtual void setFileOutputBitDepth(BitDepth bitDepth) noexcept = 0; + + virtual const FormatMetadata & getFormatMetadata() const noexcept = 0; + virtual FormatMetadata & getFormatMetadata() noexcept = 0; + + /// Checks if this exactly equals other. + virtual bool equals(const Lut1DTransform & other) const noexcept = 0; + + virtual unsigned long getLength() const = 0; + /** + * Changing the length will reset the LUT to identity. + * Will throw for lengths longer than 1024x1024. + */ + virtual void setLength(unsigned long length) = 0; + + virtual void getValue(unsigned long index, float & r, float & g, float & b) const = 0; + /** + * Set the values of a LUT1D. Will throw if the index + * is outside of the range from 0 to (length-1). + * + * The LUT values are always for the "forward" LUT, regardless of how + * the transform direction is set. + * + * These values are normalized relative to what may be stored in any + * given LUT files. For example in a CLF file using a "10i" output + * depth, a value of 1023 in the file is normalized to 1.0. The + * values here are unclamped and may extend outside [0,1]. + * + * LUTs in various file formats may only provide values for one + * channel where R, G, B are the same. Even in that case, you should + * provide three equal values to the setter. + */ + virtual void setValue(unsigned long index, float r, float g, float b) = 0; + + virtual bool getInputHalfDomain() const noexcept = 0; + /** + * In a half-domain LUT, the contents of the LUT specify + * the desired value of the function for each half-float value. + * Therefore, the length of the LUT must be 65536 entries or else + * validate() will throw. + */ + virtual void setInputHalfDomain(bool isHalfDomain) noexcept = 0; + + virtual bool getOutputRawHalfs() const noexcept = 0; + /** + * Set OutputRawHalfs to true if you want to output the + * LUT contents as 16-bit floating point values expressed as unsigned + * 16-bit integers representing the equivalent bit pattern. + * For example, the value 1.0 would be written as the integer 15360 + * because it has the same bit-pattern. Note that this implies the + * values will be quantized to a 16-bit float. Note that this setting + * only controls the output formatting (where supported) and not the + * values for getValue/setValue. The only file formats that currently + * support this are CLF and CTF. + */ + virtual void setOutputRawHalfs(bool isRawHalfs) noexcept = 0; + + virtual Lut1DHueAdjust getHueAdjust() const noexcept = 0; + /** + * The 1D-LUT transform optionally supports a hue adjustment + * feature that was used in some versions of ACES. This adjusts the hue + * of the result to approximately match the input. + */ + virtual void setHueAdjust(Lut1DHueAdjust algo) = 0; + + virtual Interpolation getInterpolation() const = 0; + virtual void setInterpolation(Interpolation algo) = 0; + + Lut1DTransform(const Lut1DTransform &) = delete; + Lut1DTransform & operator= (const Lut1DTransform &) = delete; + /// Do not use (needed only for pybind11). + virtual ~Lut1DTransform() = default; + +protected: + Lut1DTransform() = default; +}; + +extern OCIOEXPORT std::ostream& operator<< (std::ostream&, const Lut1DTransform&); + + +/// Represents a 3D-LUT transform. +class OCIOEXPORT Lut3DTransform : public Transform +{ +public: + /// Create an identity 3D-LUT of size 2x2x2. + static Lut3DTransformRcPtr Create(); + + /** + * Create an identity 3D-LUT with specific grid size. + * Will throw for grid size larger than 129. + */ + static Lut3DTransformRcPtr Create(unsigned long gridSize); + + TransformType getTransformType() const noexcept override { return TRANSFORM_TYPE_LUT3D; } + + virtual BitDepth getFileOutputBitDepth() const noexcept = 0; + /** + * Get the bit-depth associated with the LUT values read + * from a file or set the bit-depth of values to be written to a file + * (for file formats such as CLF that support multiple bit-depths). + * However, note that the values stored in the object are always + * normalized. + */ + virtual void setFileOutputBitDepth(BitDepth bitDepth) noexcept = 0; + + virtual const FormatMetadata & getFormatMetadata() const noexcept = 0; + virtual FormatMetadata & getFormatMetadata() noexcept = 0; + + /// Checks if this exactly equals other. + virtual bool equals(const Lut3DTransform & other) const noexcept = 0; + + virtual unsigned long getGridSize() const = 0; + /** + * Changing the grid size will reset the LUT to identity. + * Will throw for grid sizes larger than 129. + */ + virtual void setGridSize(unsigned long gridSize) = 0; + + virtual void getValue(unsigned long indexR, + unsigned long indexG, + unsigned long indexB, + float & r, float & g, float & b) const = 0; + /** + * Set the values of a 3D-LUT. Will throw if an index is + * outside of the range from 0 to (gridSize-1). + * + * The LUT values are always for the "forward" LUT, regardless of how the + * transform direction is set. + * + * These values are normalized relative to what may be stored in any + * given LUT files. For example in a CLF file using a "10i" output + * depth, a value of 1023 in the file is normalized to 1.0. The values + * here are unclamped and may extend outside [0,1]. + */ + virtual void setValue(unsigned long indexR, + unsigned long indexG, + unsigned long indexB, + float r, float g, float b) = 0; + + virtual Interpolation getInterpolation() const = 0; + virtual void setInterpolation(Interpolation algo) = 0; + + Lut3DTransform(const Lut3DTransform &) = delete; + Lut3DTransform & operator= (const Lut3DTransform &) = delete; + /// Do not use (needed only for pybind11). + virtual ~Lut3DTransform() = default; + +protected: + Lut3DTransform() = default; +}; + +extern OCIOEXPORT std::ostream& operator<< (std::ostream&, const Lut3DTransform&); + +/** + * Represents an MX+B Matrix transform. + * + * \note + * For singular matrices, an inverse direction will throw an exception during finalization. + */ +class OCIOEXPORT MatrixTransform : public Transform +{ +public: + static MatrixTransformRcPtr Create(); + + TransformType getTransformType() const noexcept override { return TRANSFORM_TYPE_MATRIX; } + + virtual const FormatMetadata & getFormatMetadata() const noexcept = 0; + virtual FormatMetadata & getFormatMetadata() noexcept = 0; + + /// Checks if this exactly equals other. + virtual bool equals(const MatrixTransform & other) const noexcept = 0; + + virtual void getMatrix(double * m44) const = 0; + /** + * Get or set the values of a Matrix. Expects 16 values, + * where the first four are the coefficients to generate the R output + * channel from R, G, B, A input channels. + * + * The Matrix values are always for the "forward" Matrix, regardless of + * how the transform direction is set. + * + * These values are normalized relative to what may be stored in + * file formats such as CLF. For example in a CLF file using a "32f" + * input depth and "10i" output depth, a value of 1023 in the file + * is normalized to 1.0. The values here are unclamped and may + * extend outside [0,1]. + */ + virtual void setMatrix(const double * m44) = 0; + + virtual void getOffset(double * offset4) const = 0; + /** + * Get or set the R, G, B, A offsets to be applied + * after the matrix. + * + * These values are normalized relative to what may be stored in + * file formats such as CLF. For example, in a CLF file using a + * "10i" output depth, a value of 1023 in the file is normalized + * to 1.0. The values here are unclamped and may extend + * outside [0,1]. + */ + virtual void setOffset(const double * offset4) = 0; + + /** + * Get the bit-depths associated with the matrix values read from a + * file or set the bit-depths of values to be written to a file + * (for file formats such as CLF that support multiple bit-depths). + * + * In a format such as CLF, the matrix values are scaled to take + * pixels at the specified inBitDepth to pixels at the specified + * outBitDepth. This complicates the interpretation of the matrix + * values and so this object always holds normalized values and + * scaling is done on the way from or to file formats such as CLF. + */ + virtual BitDepth getFileInputBitDepth() const noexcept = 0; + virtual void setFileInputBitDepth(BitDepth bitDepth) noexcept = 0; + virtual BitDepth getFileOutputBitDepth() const noexcept = 0; + virtual void setFileOutputBitDepth(BitDepth bitDepth) noexcept = 0; + + + /// **Convenience functions** + /// + /// Build the matrix and offset corresponding to higher-level concepts. + /// + /// \note + /// These can throw an exception if for any component + /// ``oldmin == oldmax. (divide by 0)`` + static void Fit(double * m44, double* offset4, + const double * oldmin4, const double * oldmax4, + const double * newmin4, const double * newmax4); + + static void Identity(double * m44, double * offset4); + + static void Sat(double * m44, double * offset4, + double sat, const double * lumaCoef3); + + static void Scale(double * m44, double * offset4, + const double * scale4); + + static void View(double * m44, double * offset4, + int * channelHot4, + const double * lumaCoef3); + + MatrixTransform(const MatrixTransform &) = delete; + MatrixTransform & operator= (const MatrixTransform &) = delete; + /// Do not use (needed only for pybind11). + virtual ~MatrixTransform() = default; + +protected: + MatrixTransform() = default; +}; + +extern OCIOEXPORT std::ostream & operator<<(std::ostream &, const MatrixTransform &) noexcept; + + +/** + * Represents a range transform + * + * The Range is used to apply an affine transform (scale & offset) and + * clamps values to min/max bounds on all color components except the alpha. + * The scale and offset values are computed from the input and output bounds. + * + * Refer to section 7.2.4 in specification S-2014-006 "A Common File Format + * for Look-Up Tables" from the Academy of Motion Picture Arts and Sciences + * and the American Society of Cinematographers. + * + * \note + * The "noClamp" style described in the specification S-2014-006 becomes a + * MatrixOp at the processor level. + * + * \note + * Changing the transform direction does not modify the in/out values -- + * they are always specified with respect to the "forward" direction. + */ +class OCIOEXPORT RangeTransform : public Transform +{ +public: + /// Creates an instance of RangeTransform. + static RangeTransformRcPtr Create(); + + TransformType getTransformType() const noexcept override { return TRANSFORM_TYPE_RANGE; } + + virtual RangeStyle getStyle() const noexcept = 0; + /// Set the Range style to clamp or not input values. + virtual void setStyle(RangeStyle style) noexcept = 0; + + virtual const FormatMetadata & getFormatMetadata() const noexcept = 0; + virtual FormatMetadata & getFormatMetadata() noexcept = 0; + + /// Checks if this equals other. + virtual bool equals(const RangeTransform & other) const noexcept = 0; + + /** + * **File bit-depth** + * + * In a format such as CLF, the range values are scaled to take + * pixels at the specified inBitDepth to pixels at the specified + * outBitDepth. This complicates the interpretation of the range + * values and so this object always holds normalized values and + * scaling is done on the way from or to file formats such as CLF. + */ + + /// Get the bit-depths associated with the range values read from a file + /// or set the bit-depths of values to be written to a file (for file + /// formats such as CLF that support multiple bit-depths). + virtual BitDepth getFileInputBitDepth() const noexcept = 0; + virtual void setFileInputBitDepth(BitDepth bitDepth) noexcept = 0; + virtual BitDepth getFileOutputBitDepth() const noexcept = 0; + virtual void setFileOutputBitDepth(BitDepth bitDepth) noexcept = 0; + + /** + * **Range values** + * + * These values are normalized relative to what may be stored in file + * formats such as CLF. For example in a CLF file using a "10i" input + * depth, a MaxInValue of 1023 in the file is normalized to 1.0. + * Likewise, for an output depth of "12i", a MaxOutValue of 4095 in the + * file is normalized to 1.0. The values here are unclamped and may + * extend outside [0,1]. + */ + + /// Get the minimum value for the input. + virtual double getMinInValue() const noexcept = 0; + /// Set the minimum value for the input. + virtual void setMinInValue(double val) noexcept = 0; + /// Is the minimum value for the input set? + virtual bool hasMinInValue() const noexcept = 0; + /// Unset the minimum value for the input + virtual void unsetMinInValue() noexcept = 0; + + /// Set the maximum value for the input. + virtual void setMaxInValue(double val) noexcept = 0; + /// Get the maximum value for the input. + virtual double getMaxInValue() const noexcept = 0; + /// Is the maximum value for the input set? + virtual bool hasMaxInValue() const noexcept = 0; + /// Unset the maximum value for the input. + virtual void unsetMaxInValue() noexcept = 0; + + /// Set the minimum value for the output. + virtual void setMinOutValue(double val) noexcept = 0; + /// Get the minimum value for the output. + virtual double getMinOutValue() const noexcept = 0; + /// Is the minimum value for the output set? + virtual bool hasMinOutValue() const noexcept = 0; + /// Unset the minimum value for the output. + virtual void unsetMinOutValue() noexcept = 0; + + /// Set the maximum value for the output. + virtual void setMaxOutValue(double val) noexcept = 0; + /// Get the maximum value for the output. + virtual double getMaxOutValue() const noexcept = 0; + /// Is the maximum value for the output set? + virtual bool hasMaxOutValue() const noexcept = 0; + /// Unset the maximum value for the output. + virtual void unsetMaxOutValue() noexcept = 0; + + RangeTransform(const RangeTransform &) = delete; + RangeTransform & operator= (const RangeTransform &) = delete; + /// Do not use (needed only for pybind11). + virtual ~RangeTransform() = default; + +protected: + RangeTransform() = default; +}; + +extern OCIOEXPORT std::ostream & operator<<(std::ostream &, const RangeTransform &) noexcept; + +} // namespace OCIO_NAMESPACE + +#endif diff --git a/third_party/tlRender-install-Release/include/OpenColorIO/OpenColorTypes.h b/third_party/tlRender-install-Release/include/OpenColorIO/OpenColorTypes.h new file mode 100644 index 00000000..8fa58337 --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenColorIO/OpenColorTypes.h @@ -0,0 +1,1021 @@ +// SPDX-License-Identifier: BSD-3-Clause +// Copyright Contributors to the OpenColorIO Project. + + +#ifndef INCLUDED_OCIO_OPENCOLORTYPES_H +#define INCLUDED_OCIO_OPENCOLORTYPES_H + +#include "OpenColorABI.h" + +#ifndef OCIO_NAMESPACE +#error This header cannot be used directly. Use instead. +#endif + +#include +#include +#include +#include + + +/*!rst:: +C++ Types +========= +*/ + +namespace OCIO_NAMESPACE +{ +// Predeclare all class ptr definitions + +// Core + +class OCIOEXPORT Config; +typedef OCIO_SHARED_PTR ConstConfigRcPtr; +typedef OCIO_SHARED_PTR ConfigRcPtr; + +class OCIOEXPORT FileRules; +typedef OCIO_SHARED_PTR ConstFileRulesRcPtr; +typedef OCIO_SHARED_PTR FileRulesRcPtr; + +class OCIOEXPORT ViewingRules; +typedef OCIO_SHARED_PTR ConstViewingRulesRcPtr; +typedef OCIO_SHARED_PTR ViewingRulesRcPtr; + +class OCIOEXPORT ColorSpace; +typedef OCIO_SHARED_PTR ConstColorSpaceRcPtr; +typedef OCIO_SHARED_PTR ColorSpaceRcPtr; + +class OCIOEXPORT ColorSpaceSet; +typedef OCIO_SHARED_PTR ConstColorSpaceSetRcPtr; +typedef OCIO_SHARED_PTR ColorSpaceSetRcPtr; + +class OCIOEXPORT Look; +typedef OCIO_SHARED_PTR ConstLookRcPtr; +typedef OCIO_SHARED_PTR LookRcPtr; + +class OCIOEXPORT NamedTransform; +typedef OCIO_SHARED_PTR ConstNamedTransformRcPtr; +typedef OCIO_SHARED_PTR NamedTransformRcPtr; + +class OCIOEXPORT ViewTransform; +typedef OCIO_SHARED_PTR ConstViewTransformRcPtr; +typedef OCIO_SHARED_PTR ViewTransformRcPtr; + +class OCIOEXPORT Context; +typedef OCIO_SHARED_PTR ConstContextRcPtr; +typedef OCIO_SHARED_PTR ContextRcPtr; + +class OCIOEXPORT Processor; +typedef OCIO_SHARED_PTR ConstProcessorRcPtr; +typedef OCIO_SHARED_PTR ProcessorRcPtr; + +class OCIOEXPORT CPUProcessor; +typedef OCIO_SHARED_PTR ConstCPUProcessorRcPtr; +typedef OCIO_SHARED_PTR CPUProcessorRcPtr; + +class OCIOEXPORT GPUProcessor; +typedef OCIO_SHARED_PTR ConstGPUProcessorRcPtr; +typedef OCIO_SHARED_PTR GPUProcessorRcPtr; + +class OCIOEXPORT ProcessorMetadata; +typedef OCIO_SHARED_PTR ConstProcessorMetadataRcPtr; +typedef OCIO_SHARED_PTR ProcessorMetadataRcPtr; + +class OCIOEXPORT Baker; +typedef OCIO_SHARED_PTR ConstBakerRcPtr; +typedef OCIO_SHARED_PTR BakerRcPtr; + +class OCIOEXPORT ImageDesc; +typedef OCIO_SHARED_PTR ImageDescRcPtr; +typedef OCIO_SHARED_PTR ConstImageDescRcPtr; + +class OCIOEXPORT Exception; + +class OCIOEXPORT GpuShaderCreator; +typedef OCIO_SHARED_PTR GpuShaderCreatorRcPtr; +typedef OCIO_SHARED_PTR ConstGpuShaderCreatorRcPtr; + +class OCIOEXPORT GpuShaderDesc; +typedef OCIO_SHARED_PTR GpuShaderDescRcPtr; +typedef OCIO_SHARED_PTR ConstGpuShaderDescRcPtr; + +class OCIOEXPORT BuiltinTransformRegistry; +typedef OCIO_SHARED_PTR BuiltinTransformRegistryRcPtr; +typedef OCIO_SHARED_PTR ConstBuiltinTransformRegistryRcPtr; + +class OCIOEXPORT SystemMonitors; +typedef OCIO_SHARED_PTR SystemMonitorsRcPtr; +typedef OCIO_SHARED_PTR ConstSystemMonitorsRcPtr; + +class OCIOEXPORT GradingBSplineCurve; +typedef OCIO_SHARED_PTR ConstGradingBSplineCurveRcPtr; +typedef OCIO_SHARED_PTR GradingBSplineCurveRcPtr; + +class OCIOEXPORT GradingRGBCurve; +typedef OCIO_SHARED_PTR ConstGradingRGBCurveRcPtr; +typedef OCIO_SHARED_PTR GradingRGBCurveRcPtr; + +class OCIOEXPORT GradingHueCurve; +typedef OCIO_SHARED_PTR ConstGradingHueCurveRcPtr; +typedef OCIO_SHARED_PTR GradingHueCurveRcPtr; + +class OCIOEXPORT ConfigIOProxy; +typedef OCIO_SHARED_PTR ConstConfigIOProxyRcPtr; +typedef OCIO_SHARED_PTR ConfigIOProxyRcPtr; + +typedef std::array Float3; + + +// Transforms + +class OCIOEXPORT Transform; +typedef OCIO_SHARED_PTR ConstTransformRcPtr; +typedef OCIO_SHARED_PTR TransformRcPtr; + +class OCIOEXPORT AllocationTransform; +typedef OCIO_SHARED_PTR ConstAllocationTransformRcPtr; +typedef OCIO_SHARED_PTR AllocationTransformRcPtr; + +class OCIOEXPORT BuiltinTransform; +typedef OCIO_SHARED_PTR ConstBuiltinTransformRcPtr; +typedef OCIO_SHARED_PTR BuiltinTransformRcPtr; + +class OCIOEXPORT CDLTransform; +typedef OCIO_SHARED_PTR ConstCDLTransformRcPtr; +typedef OCIO_SHARED_PTR CDLTransformRcPtr; + +class OCIOEXPORT ColorSpaceTransform; +typedef OCIO_SHARED_PTR ConstColorSpaceTransformRcPtr; +typedef OCIO_SHARED_PTR ColorSpaceTransformRcPtr; + +class OCIOEXPORT DisplayViewTransform; +typedef OCIO_SHARED_PTR ConstDisplayViewTransformRcPtr; +typedef OCIO_SHARED_PTR DisplayViewTransformRcPtr; + +class OCIOEXPORT DynamicProperty; +typedef OCIO_SHARED_PTR ConstDynamicPropertyRcPtr; +typedef OCIO_SHARED_PTR DynamicPropertyRcPtr; + +class OCIOEXPORT DynamicPropertyDouble; +typedef OCIO_SHARED_PTR ConstDynamicPropertyDoubleRcPtr; +typedef OCIO_SHARED_PTR DynamicPropertyDoubleRcPtr; + +class OCIOEXPORT DynamicPropertyGradingPrimary; +typedef OCIO_SHARED_PTR ConstDynamicPropertyGradingPrimaryRcPtr; +typedef OCIO_SHARED_PTR DynamicPropertyGradingPrimaryRcPtr; + +class OCIOEXPORT DynamicPropertyGradingRGBCurve; +typedef OCIO_SHARED_PTR ConstDynamicPropertyGradingRGBCurveRcPtr; +typedef OCIO_SHARED_PTR DynamicPropertyGradingRGBCurveRcPtr; + +class OCIOEXPORT DynamicPropertyGradingHueCurve; +typedef OCIO_SHARED_PTR ConstDynamicPropertyGradingHueCurveRcPtr; +typedef OCIO_SHARED_PTR DynamicPropertyGradingHueCurveRcPtr; + +class OCIOEXPORT DynamicPropertyGradingTone; +typedef OCIO_SHARED_PTR ConstDynamicPropertyGradingToneRcPtr; +typedef OCIO_SHARED_PTR DynamicPropertyGradingToneRcPtr; + +class OCIOEXPORT ExponentTransform; +typedef OCIO_SHARED_PTR ConstExponentTransformRcPtr; +typedef OCIO_SHARED_PTR ExponentTransformRcPtr; + +class OCIOEXPORT ExponentWithLinearTransform; +typedef OCIO_SHARED_PTR ConstExponentWithLinearTransformRcPtr; +typedef OCIO_SHARED_PTR ExponentWithLinearTransformRcPtr; + +class OCIOEXPORT ExposureContrastTransform; +typedef OCIO_SHARED_PTR ConstExposureContrastTransformRcPtr; +typedef OCIO_SHARED_PTR ExposureContrastTransformRcPtr; + +class OCIOEXPORT FileTransform; +typedef OCIO_SHARED_PTR ConstFileTransformRcPtr; +typedef OCIO_SHARED_PTR FileTransformRcPtr; + +class OCIOEXPORT FixedFunctionTransform; +typedef OCIO_SHARED_PTR ConstFixedFunctionTransformRcPtr; +typedef OCIO_SHARED_PTR FixedFunctionTransformRcPtr; + +class OCIOEXPORT GradingPrimaryTransform; +typedef OCIO_SHARED_PTR ConstGradingPrimaryTransformRcPtr; +typedef OCIO_SHARED_PTR GradingPrimaryTransformRcPtr; + +class OCIOEXPORT GradingHueCurveTransform; +typedef OCIO_SHARED_PTR ConstGradingHueCurveTransformRcPtr; +typedef OCIO_SHARED_PTR GradingHueCurveTransformRcPtr; + +class OCIOEXPORT GradingRGBCurveTransform; +typedef OCIO_SHARED_PTR ConstGradingRGBCurveTransformRcPtr; +typedef OCIO_SHARED_PTR GradingRGBCurveTransformRcPtr; + +class OCIOEXPORT GradingToneTransform; +typedef OCIO_SHARED_PTR ConstGradingToneTransformRcPtr; +typedef OCIO_SHARED_PTR GradingToneTransformRcPtr; + +class OCIOEXPORT GroupTransform; +typedef OCIO_SHARED_PTR ConstGroupTransformRcPtr; +typedef OCIO_SHARED_PTR GroupTransformRcPtr; + +class OCIOEXPORT LogAffineTransform; +typedef OCIO_SHARED_PTR ConstLogAffineTransformRcPtr; +typedef OCIO_SHARED_PTR LogAffineTransformRcPtr; + +class OCIOEXPORT LogCameraTransform; +typedef OCIO_SHARED_PTR ConstLogCameraTransformRcPtr; +typedef OCIO_SHARED_PTR LogCameraTransformRcPtr; + +class OCIOEXPORT LookTransform; +typedef OCIO_SHARED_PTR ConstLookTransformRcPtr; +typedef OCIO_SHARED_PTR LookTransformRcPtr; + +class OCIOEXPORT LogTransform; +typedef OCIO_SHARED_PTR ConstLogTransformRcPtr; +typedef OCIO_SHARED_PTR LogTransformRcPtr; + +class OCIOEXPORT Lut1DTransform; +typedef OCIO_SHARED_PTR ConstLut1DTransformRcPtr; +typedef OCIO_SHARED_PTR Lut1DTransformRcPtr; + +class OCIOEXPORT Lut3DTransform; +typedef OCIO_SHARED_PTR ConstLut3DTransformRcPtr; +typedef OCIO_SHARED_PTR Lut3DTransformRcPtr; + +class OCIOEXPORT MatrixTransform; +typedef OCIO_SHARED_PTR ConstMatrixTransformRcPtr; +typedef OCIO_SHARED_PTR MatrixTransformRcPtr; + +class OCIOEXPORT RangeTransform; +typedef OCIO_SHARED_PTR ConstRangeTransformRcPtr; +typedef OCIO_SHARED_PTR RangeTransformRcPtr; + + +// Application Helpers + +class ColorSpaceMenuHelper; +typedef OCIO_SHARED_PTR ColorSpaceMenuHelperRcPtr; +typedef OCIO_SHARED_PTR ConstColorSpaceMenuHelperRcPtr; + +class ColorSpaceMenuParameters; +typedef OCIO_SHARED_PTR ColorSpaceMenuParametersRcPtr; +typedef OCIO_SHARED_PTR ConstColorSpaceMenuParametersRcPtr; + +class MixingColorSpaceManager; +typedef OCIO_SHARED_PTR MixingColorSpaceManagerRcPtr; +typedef OCIO_SHARED_PTR ConstMixingColorSpaceManagerRcPtr; + +class LegacyViewingPipeline; +typedef OCIO_SHARED_PTR LegacyViewingPipelineRcPtr; +typedef OCIO_SHARED_PTR ConstLegacyViewingPipelineRcPtr; + +class ConfigMergingParameters; +typedef OCIO_SHARED_PTR ConfigMergingParametersRcPtr; +typedef OCIO_SHARED_PTR ConstConfigMergingParametersRcPtr; + +class ConfigMerger; +typedef OCIO_SHARED_PTR ConfigMergerRcPtr; +typedef OCIO_SHARED_PTR ConstConfigMergerRcPtr; + +template +inline OCIO_SHARED_PTR DynamicPtrCast(OCIO_SHARED_PTR const & ptr) +{ + return OCIO_DYNAMIC_POINTER_CAST(ptr); +} + +/// Define the logging function signature. +using LoggingFunction = std::function; + +// Enums + +enum LoggingLevel +{ + LOGGING_LEVEL_NONE = 0, + LOGGING_LEVEL_WARNING = 1, + LOGGING_LEVEL_INFO = 2, + LOGGING_LEVEL_DEBUG = 3, + LOGGING_LEVEL_UNKNOWN = 255, + + LOGGING_LEVEL_DEFAULT = LOGGING_LEVEL_INFO +}; + +/// Define Compute Hash function signature. +using ComputeHashFunction = std::function; + +/** + * OCIO does not mandate the image state of the main reference space and it is not + * required to be scene-referred. This enum is used in connection with the display color space + * and view transform features which do assume that the main reference space is scene-referred + * and the display reference space is display-referred. If a config used a non-scene-referred + * reference space, presumably it would not use either display color spaces or view transforms, + * so this enum becomes irrelevant. + */ +enum ReferenceSpaceType +{ + REFERENCE_SPACE_SCENE = 0, ///< the main scene reference space + REFERENCE_SPACE_DISPLAY ///< the reference space for display color spaces +}; + +enum SearchReferenceSpaceType +{ + SEARCH_REFERENCE_SPACE_SCENE = 0, + SEARCH_REFERENCE_SPACE_DISPLAY, + SEARCH_REFERENCE_SPACE_ALL +}; + +enum ColorSpaceVisibility +{ + COLORSPACE_ACTIVE = 0, + COLORSPACE_INACTIVE, + COLORSPACE_ALL +}; + +enum NamedTransformVisibility +{ + NAMEDTRANSFORM_ACTIVE = 0, + NAMEDTRANSFORM_INACTIVE, + NAMEDTRANSFORM_ALL +}; + +enum ViewType +{ + VIEW_SHARED = 0, + VIEW_DISPLAY_DEFINED +}; + +enum ColorSpaceDirection +{ + COLORSPACE_DIR_TO_REFERENCE = 0, + COLORSPACE_DIR_FROM_REFERENCE +}; + +enum ViewTransformDirection +{ + VIEWTRANSFORM_DIR_TO_REFERENCE = 0, + VIEWTRANSFORM_DIR_FROM_REFERENCE +}; + +enum TransformDirection +{ + TRANSFORM_DIR_FORWARD = 0, + TRANSFORM_DIR_INVERSE +}; + +enum TransformType +{ + TRANSFORM_TYPE_ALLOCATION = 0, + TRANSFORM_TYPE_BUILTIN, + TRANSFORM_TYPE_CDL, + TRANSFORM_TYPE_COLORSPACE, + TRANSFORM_TYPE_DISPLAY_VIEW, + TRANSFORM_TYPE_EXPONENT, + TRANSFORM_TYPE_EXPONENT_WITH_LINEAR, + TRANSFORM_TYPE_EXPOSURE_CONTRAST, + TRANSFORM_TYPE_FILE, + TRANSFORM_TYPE_FIXED_FUNCTION, + TRANSFORM_TYPE_GRADING_HUE_CURVE, + TRANSFORM_TYPE_GRADING_PRIMARY, + TRANSFORM_TYPE_GRADING_RGB_CURVE, + TRANSFORM_TYPE_GRADING_TONE, + TRANSFORM_TYPE_GROUP, + TRANSFORM_TYPE_LOG_AFFINE, + TRANSFORM_TYPE_LOG_CAMERA, + TRANSFORM_TYPE_LOG, + TRANSFORM_TYPE_LOOK, + TRANSFORM_TYPE_LUT1D, + TRANSFORM_TYPE_LUT3D, + TRANSFORM_TYPE_MATRIX, + TRANSFORM_TYPE_RANGE +}; + +/** + * Specify the interpolation type to use + * If the specified interpolation type is not supported in the requested + * context (for example, using tetrahedral interpolationon 1D LUTs) + * an exception will be thrown. + * + * INTERP_DEFAULT will choose the default interpolation type for the requested + * context: + * + * 1D LUT INTERP_DEFAULT: LINEAR + * 3D LUT INTERP_DEFAULT: LINEAR + * + * INTERP_BEST will choose the best interpolation type for the requested + * context: + * + * 1D LUT INTERP_BEST: LINEAR + * 3D LUT INTERP_BEST: TETRAHEDRAL + * + * Note: INTERP_BEST and INTERP_DEFAULT are subject to change in minor + * releases, so if you care about locking off on a specific interpolation + * type, we'd recommend directly specifying it. + */ +enum Interpolation +{ + INTERP_UNKNOWN = 0, + INTERP_NEAREST = 1, ///< nearest neighbor + INTERP_LINEAR = 2, ///< linear interpolation (trilinear for Lut3D) + INTERP_TETRAHEDRAL = 3, ///< tetrahedral interpolation (Lut3D only) + INTERP_CUBIC = 4, ///< cubic interpolation (not supported) + + INTERP_DEFAULT = 254, ///< the default interpolation type + INTERP_BEST = 255 ///< the 'best' suitable interpolation type +}; + +/** + * Used in a configuration file to indicate the bit-depth of a color space, + * and by the \ref Processor to specify the input and output bit-depths of + * images to process. + * Note that \ref Processor only supports: UINT8, UINT10, UINT12, UINT16, F16 and F32. + */ +enum BitDepth +{ + BIT_DEPTH_UNKNOWN = 0, + BIT_DEPTH_UINT8, + BIT_DEPTH_UINT10, + BIT_DEPTH_UINT12, + BIT_DEPTH_UINT14, + BIT_DEPTH_UINT16, + BIT_DEPTH_UINT32, ///< Here for historical reason but that's not supported. + BIT_DEPTH_F16, + BIT_DEPTH_F32 +}; + +/// Used by :cpp:class`Lut1DTransform` to control optional hue restoration algorithm. +enum Lut1DHueAdjust +{ + HUE_NONE = 0, ///< No adjustment. + HUE_DW3, ///< Algorithm used in ACES Output Transforms through v0.7. + HUE_WYPN ///< Weighted Yellow Power Norm -- NOT IMPLEMENTED YET +}; + +/// Used by \ref PackedImageDesc to indicate the channel ordering of the image to process. +enum ChannelOrdering +{ + CHANNEL_ORDERING_RGBA = 0, + CHANNEL_ORDERING_BGRA, + CHANNEL_ORDERING_ABGR, + CHANNEL_ORDERING_RGB, + CHANNEL_ORDERING_BGR +}; + +enum Allocation { + ALLOCATION_UNKNOWN = 0, + ALLOCATION_UNIFORM, + ALLOCATION_LG2 +}; + +/// Used when there is a choice of hardware shader language. +enum GpuLanguage +{ + GPU_LANGUAGE_CG = 0, ///< Nvidia Cg shader + GPU_LANGUAGE_GLSL_1_2, ///< OpenGL Shading Language + GPU_LANGUAGE_GLSL_1_3, ///< OpenGL Shading Language + GPU_LANGUAGE_GLSL_4_0, ///< OpenGL Shading Language + GPU_LANGUAGE_GLSL_VK_4_6, ///< OpenGL Shading Language for Vulkan + GPU_LANGUAGE_HLSL_SM_5_0, ///< DirectX High Level Shading Language + LANGUAGE_OSL_1, ///< Open Shading Language + GPU_LANGUAGE_GLSL_ES_1_0, ///< OpenGL ES Shading Language + GPU_LANGUAGE_GLSL_ES_3_0, ///< OpenGL ES Shading Language + GPU_LANGUAGE_MSL_2_0, ///< Metal Shading Language + + // Deprecated enum(s) + GPU_LANGUAGE_HLSL_DX11 = GPU_LANGUAGE_HLSL_SM_5_0 +}; + +/// Controls which environment variables are loaded into a Context object. +enum EnvironmentMode +{ + ENV_ENVIRONMENT_UNKNOWN = 0, + ENV_ENVIRONMENT_LOAD_PREDEFINED, ///< Only load vars in the config's environment section + ENV_ENVIRONMENT_LOAD_ALL ///< Load all env. vars (note: may reduce performance) +}; + +/// A RangeTransform may be set to clamp the values, or not. +enum RangeStyle +{ + RANGE_NO_CLAMP = 0, + RANGE_CLAMP +}; + +/// Enumeration of the :cpp:class:`FixedFunctionTransform` transform algorithms. +enum FixedFunctionStyle +{ + FIXED_FUNCTION_ACES_RED_MOD_03 = 0, ///< Red modifier (ACES 0.3/0.7) + FIXED_FUNCTION_ACES_RED_MOD_10, ///< Red modifier (ACES 1.0) + FIXED_FUNCTION_ACES_GLOW_03, ///< Glow function (ACES 0.3/0.7) + FIXED_FUNCTION_ACES_GLOW_10, ///< Glow function (ACES 1.0) + FIXED_FUNCTION_ACES_DARK_TO_DIM_10, ///< Dark to dim surround correction (ACES 1.0) + FIXED_FUNCTION_REC2100_SURROUND, ///< Rec.2100 surround correction (takes one double for the gamma param) + FIXED_FUNCTION_RGB_TO_HSV, ///< Classic RGB to HSV function + FIXED_FUNCTION_XYZ_TO_xyY, ///< CIE XYZ to 1931 xy chromaticity coordinates + FIXED_FUNCTION_XYZ_TO_uvY, ///< CIE XYZ to 1976 u'v' chromaticity coordinates + FIXED_FUNCTION_XYZ_TO_LUV, ///< CIE XYZ to 1976 CIELUV colour space (D65 white) + FIXED_FUNCTION_ACES_GAMUTMAP_02, ///< ACES 0.2 Gamut clamping algorithm -- NOT IMPLEMENTED YET + FIXED_FUNCTION_ACES_GAMUTMAP_07, ///< ACES 0.7 Gamut clamping algorithm -- NOT IMPLEMENTED YET + FIXED_FUNCTION_ACES_GAMUT_COMP_13, ///< ACES 1.3 Parametric Gamut Compression (expects ACEScg values) + FIXED_FUNCTION_LIN_TO_PQ, ///< SMPTE ST-2084 OETF, scaled with 100 nits at 1.0 (neg vals mirrored) + FIXED_FUNCTION_LIN_TO_GAMMA_LOG, ///< Parametrized gamma and log segments with mirroring + FIXED_FUNCTION_LIN_TO_DOUBLE_LOG, ///< Two parameterized LogAffineTransforms with a middle linear segment + FIXED_FUNCTION_ACES_OUTPUT_TRANSFORM_20, ///< ACES 2.0 Display Rendering -- EXPERIMENTAL + FIXED_FUNCTION_ACES_RGB_TO_JMH_20, ///< ACES 2.0 RGB to JMh -- EXPERIMENTAL + FIXED_FUNCTION_ACES_TONESCALE_COMPRESS_20, ///< ACES 2.0 Tonescale and chroma compression -- EXPERIMENTAL + FIXED_FUNCTION_ACES_GAMUT_COMPRESS_20, ///< ACES 2.0 Gamut compression -- EXPERIMENTAL + FIXED_FUNCTION_RGB_TO_HSY_LIN, ///< RGB to HSY (Hue, Saturation, Luminance) for linear spaces + FIXED_FUNCTION_RGB_TO_HSY_LOG, ///< RGB to HSY (Hue, Saturation, Luma) for log spaces + FIXED_FUNCTION_RGB_TO_HSY_VID, ///< RGB to HSY (Hue, Saturation, Luma) for video spaces +}; + +/// Enumeration of the :cpp:class:`ExposureContrastTransform` transform algorithms. +enum ExposureContrastStyle +{ + EXPOSURE_CONTRAST_LINEAR = 0, ///< E/C to be applied to a linear space image + EXPOSURE_CONTRAST_VIDEO, ///< E/C to be applied to a video space image + EXPOSURE_CONTRAST_LOGARITHMIC ///< E/C to be applied to a log space image +}; + +/** + * Enumeration of the :cpp:class:`CDLTransform` transform algorithms. + * + * \note + * The default for reading .cc/.ccc/.cdl files, config file YAML, and CDLTransform is no-clamp, + * since that is what is primarily desired in VFX. However, the CLF format default is ASC. + */ +enum CDLStyle +{ + CDL_ASC = 0, ///< ASC CDL specification v1.2 + CDL_NO_CLAMP, ///< CDL that does not clamp + CDL_TRANSFORM_DEFAULT = CDL_NO_CLAMP +}; + +/** + * Negative values handling style for \ref ExponentTransform and + * \ref ExponentWithLinearTransform transform algorithms. + */ +enum NegativeStyle +{ + NEGATIVE_CLAMP = 0, ///< Clamp negative values + NEGATIVE_MIRROR, ///< Positive curve is rotated 180 degrees around the origin to handle negatives. + NEGATIVE_PASS_THRU, ///< Negative values are passed through unchanged. + NEGATIVE_LINEAR ///< Linearly extrapolate the curve for negative values. +}; + +/// Styles for grading transforms. +enum GradingStyle +{ + GRADING_LOG = 0, ///< Algorithms for Logarithmic color spaces. + GRADING_LIN, ///< Algorithms for Scene Linear color spaces. + GRADING_VIDEO ///< Algorithms for Video color spaces. +}; + +/// Types for dynamic properties. +enum DynamicPropertyType +{ + DYNAMIC_PROPERTY_EXPOSURE = 0, ///< Image exposure value (double floating point value) + DYNAMIC_PROPERTY_CONTRAST, ///< Image contrast value (double floating point value) + DYNAMIC_PROPERTY_GAMMA, ///< Image gamma value (double floating point value) + DYNAMIC_PROPERTY_GRADING_PRIMARY, ///< Used by GradingPrimaryTransform + DYNAMIC_PROPERTY_GRADING_RGBCURVE, ///< Used by GradingRGBCurveTransform + DYNAMIC_PROPERTY_GRADING_TONE, ///< Used by GradingToneTransform + DYNAMIC_PROPERTY_GRADING_HUECURVE ///< Used by GradingHueCurveTransform +}; + +/// Types for GradingRGBCurve. +enum RGBCurveType +{ + RGB_RED = 0, + RGB_GREEN, + RGB_BLUE, + RGB_MASTER, + RGB_NUM_CURVES +}; + +/// Types for GradingHueCurve. +enum HueCurveType +{ + HUE_HUE = 0, //!< Map input hue to output hue (where a diagonal line is the identity). + HUE_SAT, //!< Adjust saturation as a function of hue (a value of 1.0 is the identity). + HUE_LUM, //!< Adjust luma as a function of hue (a value of 1.0 is the identity). + LUM_SAT, //!< Adjust saturation as a function of luma (a value of 1.0 is the identity). + SAT_SAT, //!< Adjust saturation as a function of saturation (a diagonal is the identity). + LUM_LUM, //!< Adjust luma as a function of luma, maintaining hue & sat (diagonal is identity). + SAT_LUM, //!< Adjust luma as a function of saturation (a value of 1.0 is the identity). + HUE_FX, //!< Map input hue to delta output hue (a value of 0.0 is the identity). + HUE_NUM_CURVES +}; + +/// Types for GradingHueCurve. +enum HSYTransformStyle +{ + HSY_TRANSFORM_NONE = 0, //!< No RGB to HSY conversion (use an outboard conversion). + HSY_TRANSFORM_1 //!< Default RGB to Hue, Saturation, Luma conversion. +}; + +/// Types for GradingBSplineCurve. +enum BSplineType +{ + B_SPLINE = 0, //!< Monotonic quadratic B-spline used for the RGBM curves. + DIAGONAL_B_SPLINE, //!< Monotonic quadratic B-spline for the sat-sat and lum-lum curves. + HUE_HUE_B_SPLINE, //!< Monotonic and periodic B-spline used for the hue-hue curve. + PERIODIC_1_B_SPLINE, //!< Periodic, horizontal (at 1) B-spline for hue-sat and hue-lum curves. + PERIODIC_0_B_SPLINE, //!< Periodic, horizontal (at 0) B-spline used for the hue-fx curve. + HORIZONTAL1_B_SPLINE, //!< Horizontal (at 1) B-spline used for the lum-sat and sat-lum curves. +}; + +/// Types for uniform data. +enum UniformDataType +{ + UNIFORM_DOUBLE = 0, + UNIFORM_BOOL, + UNIFORM_FLOAT3, ///< Array of 3 floats. + UNIFORM_VECTOR_FLOAT, ///< Vector of floats (size is set by uniform). + UNIFORM_VECTOR_INT, ///< Vector of int pairs (size is set by uniform). + UNIFORM_UNKNOWN +}; + +/// Provides control over how the ops in a Processor are combined in order to improve performance. +enum OptimizationFlags : unsigned long +{ + // Below are listed all the optimization types. + + /// Do not optimize. + OPTIMIZATION_NONE = 0x00000000, + + /// Replace identity ops (other than gamma). + OPTIMIZATION_IDENTITY = 0x00000001, + /// Replace identity gamma ops. + OPTIMIZATION_IDENTITY_GAMMA = 0x00000002, + + /// Replace a pair of ops where one is the inverse of the other. + OPTIMIZATION_PAIR_IDENTITY_CDL = 0x00000040, + OPTIMIZATION_PAIR_IDENTITY_EXPOSURE_CONTRAST = 0x00000080, + OPTIMIZATION_PAIR_IDENTITY_FIXED_FUNCTION = 0x00000100, + OPTIMIZATION_PAIR_IDENTITY_GAMMA = 0x00000200, + OPTIMIZATION_PAIR_IDENTITY_LUT1D = 0x00000400, + OPTIMIZATION_PAIR_IDENTITY_LUT3D = 0x00000800, + OPTIMIZATION_PAIR_IDENTITY_LOG = 0x00001000, + OPTIMIZATION_PAIR_IDENTITY_GRADING = 0x00002000, + + /// Compose a pair of ops into a single op. + OPTIMIZATION_COMP_EXPONENT = 0x00040000, + OPTIMIZATION_COMP_GAMMA = 0x00080000, + OPTIMIZATION_COMP_MATRIX = 0x00100000, + OPTIMIZATION_COMP_LUT1D = 0x00200000, + OPTIMIZATION_COMP_LUT3D = 0x00400000, + OPTIMIZATION_COMP_RANGE = 0x00800000, + + /** + * For integer and half bit-depths only, replace separable ops (i.e. no channel crosstalk + * ops) by a single 1D LUT of input bit-depth domain. + */ + OPTIMIZATION_COMP_SEPARABLE_PREFIX = 0x01000000, + + /** + * Implement inverse Lut1D and Lut3D evaluations using a a forward LUT (faster but less + * accurate). Note that GPU evals always do FAST. + */ + OPTIMIZATION_LUT_INV_FAST = 0x02000000, + + // For CPU processor, in SSE mode, use a faster approximation for log, exp, and pow. + OPTIMIZATION_FAST_LOG_EXP_POW = 0x04000000, + + // Break down certain ops into simpler components where possible. For example, convert a CDL + // to a matrix when possible. + OPTIMIZATION_SIMPLIFY_OPS = 0x08000000, + + /** + * Turn off dynamic control of any ops that offer adjustment of parameter values after + * finalization (e.g. ExposureContrast). + */ + OPTIMIZATION_NO_DYNAMIC_PROPERTIES = 0x10000000, + + /// Apply all possible optimizations. + OPTIMIZATION_ALL = 0xFFFFFFFF, + + // The following groupings of flags are provided as a convenient way to select an overall + // optimization level. + + OPTIMIZATION_LOSSLESS = (OPTIMIZATION_IDENTITY | + OPTIMIZATION_IDENTITY_GAMMA | + OPTIMIZATION_PAIR_IDENTITY_CDL | + OPTIMIZATION_PAIR_IDENTITY_EXPOSURE_CONTRAST | + OPTIMIZATION_PAIR_IDENTITY_FIXED_FUNCTION | + OPTIMIZATION_PAIR_IDENTITY_GAMMA | + OPTIMIZATION_PAIR_IDENTITY_GRADING | + OPTIMIZATION_PAIR_IDENTITY_LOG | + OPTIMIZATION_PAIR_IDENTITY_LUT1D | + OPTIMIZATION_PAIR_IDENTITY_LUT3D | + OPTIMIZATION_COMP_EXPONENT | + OPTIMIZATION_COMP_GAMMA | + OPTIMIZATION_COMP_MATRIX | + OPTIMIZATION_COMP_RANGE | + OPTIMIZATION_SIMPLIFY_OPS), + + OPTIMIZATION_VERY_GOOD = (OPTIMIZATION_LOSSLESS | + OPTIMIZATION_COMP_LUT1D | + OPTIMIZATION_LUT_INV_FAST | + OPTIMIZATION_FAST_LOG_EXP_POW | + OPTIMIZATION_COMP_SEPARABLE_PREFIX), + + OPTIMIZATION_GOOD = OPTIMIZATION_VERY_GOOD | OPTIMIZATION_COMP_LUT3D, + + /// For quite lossy optimizations. + OPTIMIZATION_DRAFT = OPTIMIZATION_ALL, + + OPTIMIZATION_DEFAULT = OPTIMIZATION_VERY_GOOD +}; + +//!cpp:type:: Enum to control the behavior of the internal caches e.g. the processor cache in +// :cpp:class:`Config` and :cpp:class:`Processor` instances. When debugging problems, it be useful +// to disable all the internal caches for example. +// +// The PROCESSOR_CACHE_SHARE_DYN_PROPERTIES flag allows the reuse of existing processor instances +// even if it contains some dynamic properties i.e. it speeds up the processor retrieval. That's the +// default behavior to avoid the processor creation hit. However, the caller app must then always +// set the dynamic property values prior to any color processing call (in CPU and GPU modes) as the +// same processor instance can now be used between several viewports for example. +enum ProcessorCacheFlags : unsigned int +{ + PROCESSOR_CACHE_OFF = 0x00, + PROCESSOR_CACHE_ENABLED = 0x01, // Enable the cache. + PROCESSOR_CACHE_SHARE_DYN_PROPERTIES = 0x02, // i.e. When the cache is enabled processor instances + // are shared even if they contain some dynamic + // properties. + + PROCESSOR_CACHE_DEFAULT = (PROCESSOR_CACHE_ENABLED | PROCESSOR_CACHE_SHARE_DYN_PROPERTIES) +}; + +// Conversion + +extern OCIOEXPORT const char * BoolToString(bool val); +extern OCIOEXPORT bool BoolFromString(const char * s); + +extern OCIOEXPORT const char * LoggingLevelToString(LoggingLevel level); +extern OCIOEXPORT LoggingLevel LoggingLevelFromString(const char * s); + +extern OCIOEXPORT const char * TransformDirectionToString(TransformDirection dir); +/// Will throw if string is not recognized. +extern OCIOEXPORT TransformDirection TransformDirectionFromString(const char * s); + +extern OCIOEXPORT TransformDirection GetInverseTransformDirection(TransformDirection dir); +extern OCIOEXPORT TransformDirection CombineTransformDirections(TransformDirection d1, + TransformDirection d2); + +extern OCIOEXPORT const char * BitDepthToString(BitDepth bitDepth); +extern OCIOEXPORT BitDepth BitDepthFromString(const char * s); +extern OCIOEXPORT bool BitDepthIsFloat(BitDepth bitDepth); +extern OCIOEXPORT int BitDepthToInt(BitDepth bitDepth); + +extern OCIOEXPORT const char * AllocationToString(Allocation allocation); +extern OCIOEXPORT Allocation AllocationFromString(const char * s); + +extern OCIOEXPORT const char * InterpolationToString(Interpolation interp); +extern OCIOEXPORT Interpolation InterpolationFromString(const char * s); + +extern OCIOEXPORT const char * GpuLanguageToString(GpuLanguage language); +extern OCIOEXPORT GpuLanguage GpuLanguageFromString(const char * s); + +extern OCIOEXPORT const char * EnvironmentModeToString(EnvironmentMode mode); +extern OCIOEXPORT EnvironmentMode EnvironmentModeFromString(const char * s); + +extern OCIOEXPORT const char * CDLStyleToString(CDLStyle style); +extern OCIOEXPORT CDLStyle CDLStyleFromString(const char * style); + +extern OCIOEXPORT const char * RangeStyleToString(RangeStyle style); +extern OCIOEXPORT RangeStyle RangeStyleFromString(const char * style); + +extern OCIOEXPORT const char * FixedFunctionStyleToString(FixedFunctionStyle style); +extern OCIOEXPORT FixedFunctionStyle FixedFunctionStyleFromString(const char * style); + +extern OCIOEXPORT const char * GradingStyleToString(GradingStyle style); +extern OCIOEXPORT GradingStyle GradingStyleFromString(const char * s); + +extern OCIOEXPORT const char * ExposureContrastStyleToString(ExposureContrastStyle style); +extern OCIOEXPORT ExposureContrastStyle ExposureContrastStyleFromString(const char * style); + +extern OCIOEXPORT const char * NegativeStyleToString(NegativeStyle style); +extern OCIOEXPORT NegativeStyle NegativeStyleFromString(const char * style); + +/** Env. variables. + * + * These environmental variables are used by the OpenColorIO library. + * For variables that allow specifying more than one token, they should be separated by commas. + */ + +// These variables are defined in src/OpenColorIO/Config.cpp. + + +/// The envvar 'OCIO' provides a path to the config file used by \ref Config::CreateFromEnv +extern OCIOEXPORT const char * OCIO_CONFIG_ENVVAR; + +/** + * The envvar 'OCIO_ACTIVE_DISPLAYS' provides a list of displays overriding the 'active_displays' + * list from the config file. + */ +extern OCIOEXPORT const char * OCIO_ACTIVE_DISPLAYS_ENVVAR; + +/** + * The envvar 'OCIO_ACTIVE_VIEWS' provides a list of views overriding the 'active_views' + * list from the config file. + */ +extern OCIOEXPORT const char * OCIO_ACTIVE_VIEWS_ENVVAR; + +/** + * The envvar 'OCIO_INACTIVE_COLORSPACES' provides a list of inactive color spaces + * overriding the 'inactive_color_spaces' list from the config file. + */ +extern OCIOEXPORT const char * OCIO_INACTIVE_COLORSPACES_ENVVAR; + +/** + * The envvar 'OCIO_OPTIMIZATION_FLAGS' provides a way to force a given optimization level. + * Remove the variable or set the value to empty to not use it. Set the value of the variable + * to the desired optimization level as either an integer or hexadecimal value. + * Ex: OCIO_OPTIMIZATION_FLAGS="144457667" or "0x89c3fc3" for OPTIMIZATION_LOSSLESS. + */ +extern OCIOEXPORT const char * OCIO_OPTIMIZATION_FLAGS_ENVVAR; + +/** + * The envvar 'OCIO_USER_CATEGORIES' allows the end-user to filter color spaces shown by + * applications. Only color spaces that include at least one of the supplied categories will be + * shown in application menus. Note that applications may also impose their own category filtering + * in addition to the user-supplied categories. For example, an application may filter by + * 'working-space' for a menu to select a working space while the user may also filter by + * '3d-basic' to only show spaces intended for 3d artists who should see the basic set of color + * spaces. The categories will be ignored if they would result in no color spaces being found. + */ +extern OCIOEXPORT const char * OCIO_USER_CATEGORIES_ENVVAR; + +// TODO: Move to .rst +/*!rst:: +Roles +***** + +ColorSpace Roles are used so that plugins, in addition to this API can have +abstract ways of asking for common colorspaces, without referring to them +by hardcoded names. + +Internal:: + Extracting color space from file path - (ROLE_DEFAULT) + Interchange color spaces between configs - (ROLE_EXCHANGE_SCENE, ROLE_EXCHANGE_DISPLAY) + +App Helpers:: + LegacyViewingPipeline - (ROLE_SCENE_LINEAR (LinearCC for exposure)) + (ROLE_COLOR_TIMING (ColorTimingCC)) + MixingColorSpaceManager - (ROLE_COLOR_PICKING) + +External Plugins (currently known):: + + Colorpicker UIs - (ROLE_COLOR_PICKING) + Compositor LogConvert - (ROLE_SCENE_LINEAR, ROLE_COMPOSITING_LOG) + +*/ + +/// "default" +extern OCIOEXPORT const char * ROLE_DEFAULT; +/// "reference" +extern OCIOEXPORT const char * ROLE_REFERENCE; +/// "data" +extern OCIOEXPORT const char * ROLE_DATA; +/// "color_picking" +extern OCIOEXPORT const char * ROLE_COLOR_PICKING; +/// "scene_linear" +extern OCIOEXPORT const char * ROLE_SCENE_LINEAR; +/// "compositing_log" +extern OCIOEXPORT const char * ROLE_COMPOSITING_LOG; +/// "color_timing" +extern OCIOEXPORT const char * ROLE_COLOR_TIMING; +/** + * This role defines the transform for painting textures. In some + * workflows this is just a inverse display gamma with some limits + */ +extern OCIOEXPORT const char * ROLE_TEXTURE_PAINT; +/** + * This role defines the transform for matte painting. In some workflows + * this is a 1D HDR to LDR allocation. It is normally combined with + * another display transform in the host app for preview. + */ +extern OCIOEXPORT const char * ROLE_MATTE_PAINT; + +/** + * The rendering role may be used to identify a specific color space to be used by CGI renderers. + * This is typically a scene-linear space but the primaries also matter since they influence the + * resulting color, especially in areas of indirect illumination. + */ +extern OCIOEXPORT const char * ROLE_RENDERING; +/** + * The aces_interchange role is used to specify which color space in the config implements the + * standard ACES2065-1 color space (SMPTE ST2065-1). This may be used when converting + * scene-referred colors from one config to another. + */ +extern OCIOEXPORT const char * ROLE_INTERCHANGE_SCENE; +/** + * The cie_xyz_d65_interchange role is used to specify which color space in the config implements + * CIE XYZ colorimetry with the neutral axis at D65. This may be used when converting + * display-referred colors from one config to another. + */ +extern OCIOEXPORT const char * ROLE_INTERCHANGE_DISPLAY; + +/*!rst:: +Shared View +*********** + +*/ + +/** + * A shared view using this for the color space name will use a display color space that + * has the same name as the display the shared view is used by. + */ +extern OCIOEXPORT const char * OCIO_VIEW_USE_DISPLAY_NAME; + +// TODO: Move to .rst +/*!rst:: +FormatMetadata +************** + +These constants describe various types of rich metadata. They are used with FormatMetadata +objects as the "name" part of a (name, value) pair. All of these types of metadata are +supported in the CLF/CTF file formats whereas other formats support some or none of them. + +Although the string constants used here match those used in the CLF/CTF formats, the concepts +are generic, so the goal is for other file formats to reuse the same constants within a +FormatMetadata object (even if the syntax used in a given format is somewhat different). + +*/ + +/** + * A description string -- used as the "Description" element in CLF/CTF and CDL, and to + * hold comments for other LUT formats when baking. + */ +extern OCIOEXPORT const char * METADATA_DESCRIPTION; + +/** + * A block of informative metadata such as the "Info" element in CLF/CTF. + * Usually contains child elements. + */ +extern OCIOEXPORT const char * METADATA_INFO; + +/** + * A string describing the expected input color space -- used as the "InputDescriptor" + * element in CLF/CTF and the "InputDescription" in CDL. + */ +extern OCIOEXPORT const char * METADATA_INPUT_DESCRIPTOR; + +/** + * A string describing the output color space -- used as the "OutputDescriptor" element + * in CLF/CTF and the "OutputDescription" in CDL. + */ +extern OCIOEXPORT const char * METADATA_OUTPUT_DESCRIPTOR; + +/** + * A name string -- used as a "name" attribute in CLF/CTF elements. Use on a GroupTransform + * to get/set the name for the CLF/CTF ProcessList. Use on an individual Transform + * (i.e. MatrixTransform, etc.) to get/set the name of the corresponding process node. + */ +extern OCIOEXPORT const char * METADATA_NAME; + +/** + * An ID string -- used as an "id" attribute in CLF/CTF elements. Use on a GroupTransform + * to get/set the id for the CLF/CTF ProcessList. Use on an individual Transform + * (i.e. MatrixTransform, etc.) to get/set the id of the corresponding process node. + */ +extern OCIOEXPORT const char * METADATA_ID; + +/*!rst:: +Caches +****** + +*/ + +//!rst:: +// .. c:var:: const char * OCIO_DISABLE_ALL_CACHES +// +// Disable all caches, including for FileTransforms and Optimized/CPU/GPU Processors. (Provided only +// to facilitate developer investigations.) +extern OCIOEXPORT const char * OCIO_DISABLE_ALL_CACHES; + +//!rst:: +// .. c:var:: const char * OCIO_DISABLE_PROCESSOR_CACHES +// +// Disable only the Optimized, CPU, and GPU Processor caches. (Provided only to facilitate developer +// investigations.) +extern OCIOEXPORT const char * OCIO_DISABLE_PROCESSOR_CACHES; + +//!rst:: +// .. c:var:: const char * OCIO_DISABLE_CACHE_FALLBACK +// +// By default the processor caches check for identical color transformations when cache keys do +// not match. That fallback introduces a major performance hit in some cases so there is an env. +// variable to disable the fallback. +extern OCIOEXPORT const char * OCIO_DISABLE_CACHE_FALLBACK; + + +// Archive config feature +// Default filename (with extension) of an config. +extern OCIOEXPORT const char * OCIO_CONFIG_DEFAULT_NAME; +extern OCIOEXPORT const char * OCIO_CONFIG_DEFAULT_FILE_EXT; +extern OCIOEXPORT const char * OCIO_CONFIG_ARCHIVE_FILE_EXT; + +// Built-in config feature +// URI Prefix +extern OCIOEXPORT const char * OCIO_BUILTIN_URI_PREFIX; + +} // namespace OCIO_NAMESPACE + +#endif diff --git a/third_party/tlRender-install-Release/include/OpenEXR/Iex.h b/third_party/tlRender-install-Release/include/OpenEXR/Iex.h new file mode 100644 index 00000000..efbabfd9 --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenEXR/Iex.h @@ -0,0 +1,26 @@ +// +// SPDX-License-Identifier: BSD-3-Clause +// Copyright (c) Contributors to the OpenEXR Project. +// + +#ifndef INCLUDED_IEX_H +#define INCLUDED_IEX_H + +//-------------------------------- +// +// Exception handling +// +//-------------------------------- + +#include "IexBaseExc.h" +#include "IexMacros.h" +#include "IexMathExc.h" +#include "IexThrowErrnoExc.h" + +// Note that we do not include file IexErrnoExc.h here. That file +// defines over 150 classes and significantly slows down compilation. +// If you throw ErrnoExc exceptions using the throwErrnoExc() function, +// you don't need IexErrnoExc.h. You have to include IexErrnoExc.h +// only if you want to catch specific subclasses of ErrnoExc. + +#endif diff --git a/third_party/tlRender-install-Release/include/OpenEXR/IexBaseExc.h b/third_party/tlRender-install-Release/include/OpenEXR/IexBaseExc.h new file mode 100644 index 00000000..96d63164 --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenEXR/IexBaseExc.h @@ -0,0 +1,222 @@ +// +// SPDX-License-Identifier: BSD-3-Clause +// Copyright (c) Contributors to the OpenEXR Project. +// + +#ifndef INCLUDED_IEXBASEEXC_H +#define INCLUDED_IEXBASEEXC_H + +#include "IexExport.h" +#include "IexNamespace.h" + +//---------------------------------------------------------- +// +// A general exception base class, and a few +// useful exceptions derived from the base class. +// +//---------------------------------------------------------- + +#include +#include +#include + +IEX_INTERNAL_NAMESPACE_HEADER_ENTER + +//------------------------------- +// Our most basic exception class +//------------------------------- + +class IEX_EXPORT_TYPE BaseExc : public std::exception +{ +public: + //---------------------------- + // Constructors and destructor + //---------------------------- + + IEX_EXPORT BaseExc (const char* s = nullptr); + IEX_EXPORT BaseExc (const std::string& s); + IEX_EXPORT BaseExc (std::string&& s); // not noexcept because of stacktrace + IEX_EXPORT BaseExc (std::stringstream& s); + + IEX_EXPORT BaseExc (const BaseExc& be); + IEX_EXPORT BaseExc (BaseExc&& be) noexcept; + IEX_EXPORT virtual ~BaseExc () noexcept; + + IEX_EXPORT BaseExc& operator= (const BaseExc& be); + IEX_EXPORT BaseExc& operator= (BaseExc&& be) noexcept; + + //--------------------------------------------------- + // what() method -- e.what() returns _message.c_str() + //--------------------------------------------------- + + IEX_EXPORT virtual const char* what () const noexcept; + + //-------------------------------------------------- + // Convenient methods to change the exception's text + //-------------------------------------------------- + + IEX_EXPORT BaseExc& assign (std::stringstream& s); // assign (s.str()) + IEX_EXPORT BaseExc& operator= (std::stringstream& s); + + IEX_EXPORT BaseExc& append (std::stringstream& s); // append (s.str()) + IEX_EXPORT BaseExc& operator+= (std::stringstream& s); + + //-------------------------------------------------- + // These methods from the base class get obscured by + // the definitions above. + //-------------------------------------------------- + + IEX_EXPORT BaseExc& assign (const char* s); + IEX_EXPORT BaseExc& operator= (const char* s); + + IEX_EXPORT BaseExc& append (const char* s); + IEX_EXPORT BaseExc& operator+= (const char* s); + + //--------------------------------------------------- + // Access to the string representation of the message + //--------------------------------------------------- + + IEX_EXPORT const std::string& message () const noexcept; + + //-------------------------------------------------- + // Stack trace for the point at which the exception + // was thrown. The stack trace will be an empty + // string unless a working stack-tracing routine + // has been installed (see below, setStackTracer()). + //-------------------------------------------------- + + IEX_EXPORT const std::string& stackTrace () const noexcept; + +private: + std::string _message; + std::string _stackTrace; +}; + +//----------------------------------------------------- +// A macro to save typing when declararing an exception +// class derived directly or indirectly from BaseExc: +//----------------------------------------------------- + +#define DEFINE_EXC_EXP(exp, name, base) \ + class IEX_EXPORT_TYPE name : public base \ + { \ + public: \ + exp name (); \ + exp name (const char* text); \ + exp name (const std::string& text); \ + exp name (std::string&& text); \ + exp name (std::stringstream& text); \ + exp name (const name& other); \ + exp name (name&& other) noexcept; \ + exp name& operator= (name& other); \ + exp name& operator= (name&& other) noexcept; \ + exp ~name () noexcept; \ + }; + +#define DEFINE_EXC_EXP_IMPL(exp, name, base) \ + exp name::name () : base () \ + {} \ + exp name::name (const char* text) : base (text) \ + {} \ + exp name::name (const std::string& text) : base (text) \ + {} \ + exp name::name (std::string&& text) : base (std::move (text)) \ + {} \ + exp name::name (std::stringstream& text) : base (text) \ + {} \ + exp name::name (const name& other) : base (other) \ + {} \ + exp name::name (name&& other) noexcept : base (other) \ + {} \ + exp name& name::operator= (name& other) \ + { \ + base::operator= (other); \ + return *this; \ + } \ + exp name& name::operator= (name&& other) noexcept \ + { \ + base::operator= (other); \ + return *this; \ + } \ + exp name::~name () noexcept \ + {} + +// For backward compatibility. +#define DEFINE_EXC(name, base) DEFINE_EXC_EXP (, name, base) + +//-------------------------------------------------------- +// Some exceptions which should be useful in most programs +//-------------------------------------------------------- +DEFINE_EXC_EXP ( + IEX_EXPORT, ArgExc, BaseExc) // Invalid arguments to a function call + +DEFINE_EXC_EXP ( + IEX_EXPORT, LogicExc, BaseExc) // General error in a program's logic, + // for example, a function was called + // in a context where the call does + // not make sense. + +DEFINE_EXC_EXP ( + IEX_EXPORT, InputExc, BaseExc) // Invalid input data, e.g. from a file + +DEFINE_EXC_EXP (IEX_EXPORT, IoExc, BaseExc) // Input or output operation failed + +DEFINE_EXC_EXP ( + IEX_EXPORT, MathExc, BaseExc) // Arithmetic exception; more specific + // exceptions derived from this class + // are defined in ExcMath.h + +DEFINE_EXC_EXP ( + IEX_EXPORT, ErrnoExc, BaseExc) // Base class for exceptions corresponding + // to errno values (see errno.h); more + // specific exceptions derived from this + // class are defined in ExcErrno.h + +DEFINE_EXC_EXP ( + IEX_EXPORT, NoImplExc, BaseExc) // Missing method exception e.g. from a + // call to a method that is only partially + // or not at all implemented. A reminder + // to lazy software people to get back + // to work. + +DEFINE_EXC_EXP ( + IEX_EXPORT, NullExc, BaseExc) // A pointer is inappropriately null. + +DEFINE_EXC_EXP ( + IEX_EXPORT, TypeExc, BaseExc) // An object is an inappropriate type, + // i.e. a dynamnic_cast failed. + +//---------------------------------------------------------------------- +// Stack-tracing support: +// +// setStackTracer(st) +// +// installs a stack-tracing routine, st, which will be called from +// class BaseExc's constructor every time an exception derived from +// BaseExc is thrown. The stack-tracing routine should return a +// string that contains a printable representation of the program's +// current call stack. This string will be stored in the BaseExc +// object; the string is accessible via the BaseExc::stackTrace() +// method. +// +// setStackTracer(0) +// +// removes the current stack tracing routine. When an exception +// derived from BaseExc is thrown, the stack trace string stored +// in the BaseExc object will be empty. +// +// stackTracer() +// +// returns a pointer to the current stack-tracing routine, or 0 +// if there is no current stack stack-tracing routine. +// +//---------------------------------------------------------------------- + +typedef std::string (*StackTracer) (); + +IEX_EXPORT void setStackTracer (StackTracer stackTracer); +IEX_EXPORT StackTracer stackTracer (); + +IEX_INTERNAL_NAMESPACE_HEADER_EXIT + +#endif // INCLUDED_IEXBASEEXC_H diff --git a/third_party/tlRender-install-Release/include/OpenEXR/IexConfig.h b/third_party/tlRender-install-Release/include/OpenEXR/IexConfig.h new file mode 100644 index 00000000..e2a4d1f5 --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenEXR/IexConfig.h @@ -0,0 +1,33 @@ +// SPDX-License-Identifier: BSD-3-Clause +// Copyright (c) Contributors to the OpenEXR Project. + +// This file is auto-generated by the cmake configure step + +#ifndef INCLUDED_IEX_CONFIG_H +#define INCLUDED_IEX_CONFIG_H 1 + +#pragma once + +// +// +// C++ namespace configuration / options + +// automated formatting does not handle the cmake tags well +// clang-format off + +// +// Current internal library namespace name +// +#define IEX_INTERNAL_NAMESPACE_CUSTOM 0 +#define IEX_INTERNAL_NAMESPACE Iex_3_3 + +// +// Current public user namespace name +// + +#define IEX_NAMESPACE_CUSTOM 0 +#define IEX_NAMESPACE Iex + +// clang-format on + +#endif // INCLUDED_IEX_CONFIG_H diff --git a/third_party/tlRender-install-Release/include/OpenEXR/IexErrnoExc.h b/third_party/tlRender-install-Release/include/OpenEXR/IexErrnoExc.h new file mode 100644 index 00000000..ac27ded6 --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenEXR/IexErrnoExc.h @@ -0,0 +1,177 @@ +// +// SPDX-License-Identifier: BSD-3-Clause +// Copyright (c) Contributors to the OpenEXR Project. +// + +#ifndef INCLUDED_IEXERRNOEXC_H +#define INCLUDED_IEXERRNOEXC_H + +//---------------------------------------------------------------- +// +// Exceptions which correspond to "errno" error codes. +// +//---------------------------------------------------------------- + +#include "IexBaseExc.h" + +IEX_INTERNAL_NAMESPACE_HEADER_ENTER + +DEFINE_EXC_EXP (IEX_EXPORT, EpermExc, ErrnoExc) +DEFINE_EXC_EXP (IEX_EXPORT, EnoentExc, ErrnoExc) +DEFINE_EXC_EXP (IEX_EXPORT, EsrchExc, ErrnoExc) +DEFINE_EXC_EXP (IEX_EXPORT, EintrExc, ErrnoExc) +DEFINE_EXC_EXP (IEX_EXPORT, EioExc, ErrnoExc) +DEFINE_EXC_EXP (IEX_EXPORT, EnxioExc, ErrnoExc) +DEFINE_EXC_EXP (IEX_EXPORT, E2bigExc, ErrnoExc) +DEFINE_EXC_EXP (IEX_EXPORT, EnoexecExc, ErrnoExc) +DEFINE_EXC_EXP (IEX_EXPORT, EbadfExc, ErrnoExc) +DEFINE_EXC_EXP (IEX_EXPORT, EchildExc, ErrnoExc) +DEFINE_EXC_EXP (IEX_EXPORT, EagainExc, ErrnoExc) +DEFINE_EXC_EXP (IEX_EXPORT, EnomemExc, ErrnoExc) +DEFINE_EXC_EXP (IEX_EXPORT, EaccesExc, ErrnoExc) +DEFINE_EXC_EXP (IEX_EXPORT, EfaultExc, ErrnoExc) +DEFINE_EXC_EXP (IEX_EXPORT, EnotblkExc, ErrnoExc) +DEFINE_EXC_EXP (IEX_EXPORT, EbusyExc, ErrnoExc) +DEFINE_EXC_EXP (IEX_EXPORT, EexistExc, ErrnoExc) +DEFINE_EXC_EXP (IEX_EXPORT, ExdevExc, ErrnoExc) +DEFINE_EXC_EXP (IEX_EXPORT, EnodevExc, ErrnoExc) +DEFINE_EXC_EXP (IEX_EXPORT, EnotdirExc, ErrnoExc) +DEFINE_EXC_EXP (IEX_EXPORT, EisdirExc, ErrnoExc) +DEFINE_EXC_EXP (IEX_EXPORT, EinvalExc, ErrnoExc) +DEFINE_EXC_EXP (IEX_EXPORT, EnfileExc, ErrnoExc) +DEFINE_EXC_EXP (IEX_EXPORT, EmfileExc, ErrnoExc) +DEFINE_EXC_EXP (IEX_EXPORT, EnottyExc, ErrnoExc) +DEFINE_EXC_EXP (IEX_EXPORT, EtxtbsyExc, ErrnoExc) +DEFINE_EXC_EXP (IEX_EXPORT, EfbigExc, ErrnoExc) +DEFINE_EXC_EXP (IEX_EXPORT, EnospcExc, ErrnoExc) +DEFINE_EXC_EXP (IEX_EXPORT, EspipeExc, ErrnoExc) +DEFINE_EXC_EXP (IEX_EXPORT, ErofsExc, ErrnoExc) +DEFINE_EXC_EXP (IEX_EXPORT, EmlinkExc, ErrnoExc) +DEFINE_EXC_EXP (IEX_EXPORT, EpipeExc, ErrnoExc) +DEFINE_EXC_EXP (IEX_EXPORT, EdomExc, ErrnoExc) +DEFINE_EXC_EXP (IEX_EXPORT, ErangeExc, ErrnoExc) +DEFINE_EXC_EXP (IEX_EXPORT, EnomsgExc, ErrnoExc) +DEFINE_EXC_EXP (IEX_EXPORT, EidrmExc, ErrnoExc) +DEFINE_EXC_EXP (IEX_EXPORT, EchrngExc, ErrnoExc) +DEFINE_EXC_EXP (IEX_EXPORT, El2nsyncExc, ErrnoExc) +DEFINE_EXC_EXP (IEX_EXPORT, El3hltExc, ErrnoExc) +DEFINE_EXC_EXP (IEX_EXPORT, El3rstExc, ErrnoExc) +DEFINE_EXC_EXP (IEX_EXPORT, ElnrngExc, ErrnoExc) +DEFINE_EXC_EXP (IEX_EXPORT, EunatchExc, ErrnoExc) +DEFINE_EXC_EXP (IEX_EXPORT, EnocsiExc, ErrnoExc) +DEFINE_EXC_EXP (IEX_EXPORT, El2hltExc, ErrnoExc) +DEFINE_EXC_EXP (IEX_EXPORT, EdeadlkExc, ErrnoExc) +DEFINE_EXC_EXP (IEX_EXPORT, EnolckExc, ErrnoExc) +DEFINE_EXC_EXP (IEX_EXPORT, EbadeExc, ErrnoExc) +DEFINE_EXC_EXP (IEX_EXPORT, EbadrExc, ErrnoExc) +DEFINE_EXC_EXP (IEX_EXPORT, ExfullExc, ErrnoExc) +DEFINE_EXC_EXP (IEX_EXPORT, EnoanoExc, ErrnoExc) +DEFINE_EXC_EXP (IEX_EXPORT, EbadrqcExc, ErrnoExc) +DEFINE_EXC_EXP (IEX_EXPORT, EbadsltExc, ErrnoExc) +DEFINE_EXC_EXP (IEX_EXPORT, EdeadlockExc, ErrnoExc) +DEFINE_EXC_EXP (IEX_EXPORT, EbfontExc, ErrnoExc) +DEFINE_EXC_EXP (IEX_EXPORT, EnostrExc, ErrnoExc) +DEFINE_EXC_EXP (IEX_EXPORT, EnodataExc, ErrnoExc) +DEFINE_EXC_EXP (IEX_EXPORT, EtimeExc, ErrnoExc) +DEFINE_EXC_EXP (IEX_EXPORT, EnosrExc, ErrnoExc) +DEFINE_EXC_EXP (IEX_EXPORT, EnonetExc, ErrnoExc) +DEFINE_EXC_EXP (IEX_EXPORT, EnopkgExc, ErrnoExc) +DEFINE_EXC_EXP (IEX_EXPORT, EremoteExc, ErrnoExc) +DEFINE_EXC_EXP (IEX_EXPORT, EnolinkExc, ErrnoExc) +DEFINE_EXC_EXP (IEX_EXPORT, EadvExc, ErrnoExc) +DEFINE_EXC_EXP (IEX_EXPORT, EsrmntExc, ErrnoExc) +DEFINE_EXC_EXP (IEX_EXPORT, EcommExc, ErrnoExc) +DEFINE_EXC_EXP (IEX_EXPORT, EprotoExc, ErrnoExc) +DEFINE_EXC_EXP (IEX_EXPORT, EmultihopExc, ErrnoExc) +DEFINE_EXC_EXP (IEX_EXPORT, EbadmsgExc, ErrnoExc) +DEFINE_EXC_EXP (IEX_EXPORT, EnametoolongExc, ErrnoExc) +DEFINE_EXC_EXP (IEX_EXPORT, EoverflowExc, ErrnoExc) +DEFINE_EXC_EXP (IEX_EXPORT, EnotuniqExc, ErrnoExc) +DEFINE_EXC_EXP (IEX_EXPORT, EbadfdExc, ErrnoExc) +DEFINE_EXC_EXP (IEX_EXPORT, EremchgExc, ErrnoExc) +DEFINE_EXC_EXP (IEX_EXPORT, ElibaccExc, ErrnoExc) +DEFINE_EXC_EXP (IEX_EXPORT, ElibbadExc, ErrnoExc) +DEFINE_EXC_EXP (IEX_EXPORT, ElibscnExc, ErrnoExc) +DEFINE_EXC_EXP (IEX_EXPORT, ElibmaxExc, ErrnoExc) +DEFINE_EXC_EXP (IEX_EXPORT, ElibexecExc, ErrnoExc) +DEFINE_EXC_EXP (IEX_EXPORT, EilseqExc, ErrnoExc) +DEFINE_EXC_EXP (IEX_EXPORT, EnosysExc, ErrnoExc) +DEFINE_EXC_EXP (IEX_EXPORT, EloopExc, ErrnoExc) +DEFINE_EXC_EXP (IEX_EXPORT, ErestartExc, ErrnoExc) +DEFINE_EXC_EXP (IEX_EXPORT, EstrpipeExc, ErrnoExc) +DEFINE_EXC_EXP (IEX_EXPORT, EnotemptyExc, ErrnoExc) +DEFINE_EXC_EXP (IEX_EXPORT, EusersExc, ErrnoExc) +DEFINE_EXC_EXP (IEX_EXPORT, EnotsockExc, ErrnoExc) +DEFINE_EXC_EXP (IEX_EXPORT, EdestaddrreqExc, ErrnoExc) +DEFINE_EXC_EXP (IEX_EXPORT, EmsgsizeExc, ErrnoExc) +DEFINE_EXC_EXP (IEX_EXPORT, EprototypeExc, ErrnoExc) +DEFINE_EXC_EXP (IEX_EXPORT, EnoprotooptExc, ErrnoExc) +DEFINE_EXC_EXP (IEX_EXPORT, EprotonosupportExc, ErrnoExc) +DEFINE_EXC_EXP (IEX_EXPORT, EsocktnosupportExc, ErrnoExc) +DEFINE_EXC_EXP (IEX_EXPORT, EopnotsuppExc, ErrnoExc) +DEFINE_EXC_EXP (IEX_EXPORT, EpfnosupportExc, ErrnoExc) +DEFINE_EXC_EXP (IEX_EXPORT, EafnosupportExc, ErrnoExc) +DEFINE_EXC_EXP (IEX_EXPORT, EaddrinuseExc, ErrnoExc) +DEFINE_EXC_EXP (IEX_EXPORT, EaddrnotavailExc, ErrnoExc) +DEFINE_EXC_EXP (IEX_EXPORT, EnetdownExc, ErrnoExc) +DEFINE_EXC_EXP (IEX_EXPORT, EnetunreachExc, ErrnoExc) +DEFINE_EXC_EXP (IEX_EXPORT, EnetresetExc, ErrnoExc) +DEFINE_EXC_EXP (IEX_EXPORT, EconnabortedExc, ErrnoExc) +DEFINE_EXC_EXP (IEX_EXPORT, EconnresetExc, ErrnoExc) +DEFINE_EXC_EXP (IEX_EXPORT, EnobufsExc, ErrnoExc) +DEFINE_EXC_EXP (IEX_EXPORT, EisconnExc, ErrnoExc) +DEFINE_EXC_EXP (IEX_EXPORT, EnotconnExc, ErrnoExc) +DEFINE_EXC_EXP (IEX_EXPORT, EshutdownExc, ErrnoExc) +DEFINE_EXC_EXP (IEX_EXPORT, EtoomanyrefsExc, ErrnoExc) +DEFINE_EXC_EXP (IEX_EXPORT, EtimedoutExc, ErrnoExc) +DEFINE_EXC_EXP (IEX_EXPORT, EconnrefusedExc, ErrnoExc) +DEFINE_EXC_EXP (IEX_EXPORT, EhostdownExc, ErrnoExc) +DEFINE_EXC_EXP (IEX_EXPORT, EhostunreachExc, ErrnoExc) +DEFINE_EXC_EXP (IEX_EXPORT, EalreadyExc, ErrnoExc) +DEFINE_EXC_EXP (IEX_EXPORT, EinprogressExc, ErrnoExc) +DEFINE_EXC_EXP (IEX_EXPORT, EstaleExc, ErrnoExc) +DEFINE_EXC_EXP (IEX_EXPORT, EioresidExc, ErrnoExc) +DEFINE_EXC_EXP (IEX_EXPORT, EucleanExc, ErrnoExc) +DEFINE_EXC_EXP (IEX_EXPORT, EnotnamExc, ErrnoExc) +DEFINE_EXC_EXP (IEX_EXPORT, EnavailExc, ErrnoExc) +DEFINE_EXC_EXP (IEX_EXPORT, EisnamExc, ErrnoExc) +DEFINE_EXC_EXP (IEX_EXPORT, EremoteioExc, ErrnoExc) +DEFINE_EXC_EXP (IEX_EXPORT, EinitExc, ErrnoExc) +DEFINE_EXC_EXP (IEX_EXPORT, EremdevExc, ErrnoExc) +DEFINE_EXC_EXP (IEX_EXPORT, EcanceledExc, ErrnoExc) +DEFINE_EXC_EXP (IEX_EXPORT, EnolimfileExc, ErrnoExc) +DEFINE_EXC_EXP (IEX_EXPORT, EproclimExc, ErrnoExc) +DEFINE_EXC_EXP (IEX_EXPORT, EdisjointExc, ErrnoExc) +DEFINE_EXC_EXP (IEX_EXPORT, EnologinExc, ErrnoExc) +DEFINE_EXC_EXP (IEX_EXPORT, EloginlimExc, ErrnoExc) +DEFINE_EXC_EXP (IEX_EXPORT, EgrouploopExc, ErrnoExc) +DEFINE_EXC_EXP (IEX_EXPORT, EnoattachExc, ErrnoExc) +DEFINE_EXC_EXP (IEX_EXPORT, EnotsupExc, ErrnoExc) +DEFINE_EXC_EXP (IEX_EXPORT, EnoattrExc, ErrnoExc) +DEFINE_EXC_EXP (IEX_EXPORT, EdircorruptedExc, ErrnoExc) +DEFINE_EXC_EXP (IEX_EXPORT, EdquotExc, ErrnoExc) +DEFINE_EXC_EXP (IEX_EXPORT, EnfsremoteExc, ErrnoExc) +DEFINE_EXC_EXP (IEX_EXPORT, EcontrollerExc, ErrnoExc) +DEFINE_EXC_EXP (IEX_EXPORT, EnotcontrollerExc, ErrnoExc) +DEFINE_EXC_EXP (IEX_EXPORT, EenqueuedExc, ErrnoExc) +DEFINE_EXC_EXP (IEX_EXPORT, EnotenqueuedExc, ErrnoExc) +DEFINE_EXC_EXP (IEX_EXPORT, EjoinedExc, ErrnoExc) +DEFINE_EXC_EXP (IEX_EXPORT, EnotjoinedExc, ErrnoExc) +DEFINE_EXC_EXP (IEX_EXPORT, EnoprocExc, ErrnoExc) +DEFINE_EXC_EXP (IEX_EXPORT, EmustrunExc, ErrnoExc) +DEFINE_EXC_EXP (IEX_EXPORT, EnotstoppedExc, ErrnoExc) +DEFINE_EXC_EXP (IEX_EXPORT, EclockcpuExc, ErrnoExc) +DEFINE_EXC_EXP (IEX_EXPORT, EinvalstateExc, ErrnoExc) +DEFINE_EXC_EXP (IEX_EXPORT, EnoexistExc, ErrnoExc) +DEFINE_EXC_EXP (IEX_EXPORT, EendofminorExc, ErrnoExc) +DEFINE_EXC_EXP (IEX_EXPORT, EbufsizeExc, ErrnoExc) +DEFINE_EXC_EXP (IEX_EXPORT, EemptyExc, ErrnoExc) +DEFINE_EXC_EXP (IEX_EXPORT, EnointrgroupExc, ErrnoExc) +DEFINE_EXC_EXP (IEX_EXPORT, EinvalmodeExc, ErrnoExc) +DEFINE_EXC_EXP (IEX_EXPORT, EcantextentExc, ErrnoExc) +DEFINE_EXC_EXP (IEX_EXPORT, EinvaltimeExc, ErrnoExc) +DEFINE_EXC_EXP (IEX_EXPORT, EdestroyedExc, ErrnoExc) + +IEX_INTERNAL_NAMESPACE_HEADER_EXIT + +#endif diff --git a/third_party/tlRender-install-Release/include/OpenEXR/IexExport.h b/third_party/tlRender-install-Release/include/OpenEXR/IexExport.h new file mode 100644 index 00000000..f33a2aa0 --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenEXR/IexExport.h @@ -0,0 +1,36 @@ +// +// SPDX-License-Identifier: BSD-3-Clause +// Copyright (c) Contributors to the OpenEXR Project. +// + +#ifndef INCLUDED_IEXEXPORT_H +#define INCLUDED_IEXEXPORT_H + +#include "OpenEXRConfig.h" + +#if defined(OPENEXR_DLL) + +// when building as a DLL for windows, typical dllexport / import case +// where we need to switch depending on whether we are compiling +// internally or not + +# if defined(IEX_EXPORTS) +# define IEX_EXPORT __declspec (dllexport) +# else +# define IEX_EXPORT __declspec (dllimport) +# endif + +// DLLs don't support these types of visibility controls, just leave them as empty +# define IEX_EXPORT_TYPE +# define IEX_EXPORT_ENUM + +#else // OPENEXR_DLL + +// just pass these through from the top level config +# define IEX_EXPORT OPENEXR_EXPORT +# define IEX_EXPORT_TYPE OPENEXR_EXPORT_TYPE +# define IEX_EXPORT_ENUM OPENEXR_EXPORT_ENUM + +#endif // OPENEXR_DLL + +#endif // #ifndef INCLUDED_IEXEXPORT_H diff --git a/third_party/tlRender-install-Release/include/OpenEXR/IexForward.h b/third_party/tlRender-install-Release/include/OpenEXR/IexForward.h new file mode 100644 index 00000000..719af50b --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenEXR/IexForward.h @@ -0,0 +1,200 @@ +// +// SPDX-License-Identifier: BSD-3-Clause +// Copyright (c) Contributors to the OpenEXR Project. +// + +#ifndef INCLUDED_IEXFORWARD_H +#define INCLUDED_IEXFORWARD_H + +#include "IexNamespace.h" + +IEX_INTERNAL_NAMESPACE_HEADER_ENTER + +// +// Base exceptions. +// + +class BaseExc; +class ArgExc; +class LogicExc; +class InputExc; +class IoExc; +class MathExc; +class ErrnoExc; +class NoImplExc; +class NullExc; +class TypeExc; + +// +// Math exceptions. +// + +class OverflowExc; +class UnderflowExc; +class DivzeroExc; +class InexactExc; +class InvalidFpOpExc; + +// +// Errno exceptions. +// + +class EpermExc; +class EnoentExc; +class EsrchExc; +class EintrExc; +class EioExc; +class EnxioExc; +class E2bigExc; +class EnoexecExc; +class EbadfExc; +class EchildExc; +class EagainExc; +class EnomemExc; +class EaccesExc; +class EfaultExc; +class EnotblkExc; +class EbusyExc; +class EexistExc; +class ExdevExc; +class EnodevExc; +class EnotdirExc; +class EisdirExc; +class EinvalExc; +class EnfileExc; +class EmfileExc; +class EnottyExc; +class EtxtbsyExc; +class EfbigExc; +class EnospcExc; +class EspipeExc; +class ErofsExc; +class EmlinkExc; +class EpipeExc; +class EdomExc; +class ErangeExc; +class EnomsgExc; +class EidrmExc; +class EchrngExc; +class El2nsyncExc; +class El3hltExc; +class El3rstExc; +class ElnrngExc; +class EunatchExc; +class EnocsiExc; +class El2hltExc; +class EdeadlkExc; +class EnolckExc; +class EbadeExc; +class EbadrExc; +class ExfullExc; +class EnoanoExc; +class EbadrqcExc; +class EbadsltExc; +class EdeadlockExc; +class EbfontExc; +class EnostrExc; +class EnodataExc; +class EtimeExc; +class EnosrExc; +class EnonetExc; +class EnopkgExc; +class EremoteExc; +class EnolinkExc; +class EadvExc; +class EsrmntExc; +class EcommExc; +class EprotoExc; +class EmultihopExc; +class EbadmsgExc; +class EnametoolongExc; +class EoverflowExc; +class EnotuniqExc; +class EbadfdExc; +class EremchgExc; +class ElibaccExc; +class ElibbadExc; +class ElibscnExc; +class ElibmaxExc; +class ElibexecExc; +class EilseqExc; +class EnosysExc; +class EloopExc; +class ErestartExc; +class EstrpipeExc; +class EnotemptyExc; +class EusersExc; +class EnotsockExc; +class EdestaddrreqExc; +class EmsgsizeExc; +class EprototypeExc; +class EnoprotooptExc; +class EprotonosupportExc; +class EsocktnosupportExc; +class EopnotsuppExc; +class EpfnosupportExc; +class EafnosupportExc; +class EaddrinuseExc; +class EaddrnotavailExc; +class EnetdownExc; +class EnetunreachExc; +class EnetresetExc; +class EconnabortedExc; +class EconnresetExc; +class EnobufsExc; +class EisconnExc; +class EnotconnExc; +class EshutdownExc; +class EtoomanyrefsExc; +class EtimedoutExc; +class EconnrefusedExc; +class EhostdownExc; +class EhostunreachExc; +class EalreadyExc; +class EinprogressExc; +class EstaleExc; +class EioresidExc; +class EucleanExc; +class EnotnamExc; +class EnavailExc; +class EisnamExc; +class EremoteioExc; +class EinitExc; +class EremdevExc; +class EcanceledExc; +class EnolimfileExc; +class EproclimExc; +class EdisjointExc; +class EnologinExc; +class EloginlimExc; +class EgrouploopExc; +class EnoattachExc; +class EnotsupExc; +class EnoattrExc; +class EdircorruptedExc; +class EdquotExc; +class EnfsremoteExc; +class EcontrollerExc; +class EnotcontrollerExc; +class EenqueuedExc; +class EnotenqueuedExc; +class EjoinedExc; +class EnotjoinedExc; +class EnoprocExc; +class EmustrunExc; +class EnotstoppedExc; +class EclockcpuExc; +class EinvalstateExc; +class EnoexistExc; +class EendofminorExc; +class EbufsizeExc; +class EemptyExc; +class EnointrgroupExc; +class EinvalmodeExc; +class EcantextentExc; +class EinvaltimeExc; +class EdestroyedExc; + +IEX_INTERNAL_NAMESPACE_HEADER_EXIT + +#endif // INCLUDED_IEXFORWARD_H diff --git a/third_party/tlRender-install-Release/include/OpenEXR/IexMacros.h b/third_party/tlRender-install-Release/include/OpenEXR/IexMacros.h new file mode 100644 index 00000000..5831e626 --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenEXR/IexMacros.h @@ -0,0 +1,129 @@ +// +// SPDX-License-Identifier: BSD-3-Clause +// Copyright (c) Contributors to the OpenEXR Project. +// + +#ifndef INCLUDED_IEXMACROS_H +#define INCLUDED_IEXMACROS_H + +//-------------------------------------------------------------------- +// +// Macros which make throwing exceptions more convenient +// +//-------------------------------------------------------------------- + +#include + +//---------------------------------------------------------------------------- +// A macro to throw exceptions whose text is assembled using stringstreams. +// +// Example: +// +// THROW (InputExc, "Syntax error in line " << line ", " << file << "."); +// +//---------------------------------------------------------------------------- + +#include "IexExport.h" +#include "IexForward.h" + +IEX_EXPORT void iex_debugTrap (); + +#define THROW(type, text) \ + do \ + { \ + iex_debugTrap (); \ + std::stringstream _iex_throw_s; \ + _iex_throw_s << text; \ + throw type (_iex_throw_s); \ + } while (0) + +//---------------------------------------------------------------------------- +// Macros to add to or to replace the text of an exception. +// The new text is assembled using stringstreams. +// +// Examples: +// +// Append to end of an exception's text: +// +// catch (BaseExc &e) +// { +// APPEND_EXC (e, " Directory " << name << " does not exist."); +// throw; +// } +// +// Replace an exception's text: +// +// catch (BaseExc &e) +// { +// REPLACE_EXC (e, "Directory " << name << " does not exist. " << e); +// throw; +// } +//---------------------------------------------------------------------------- + +#define APPEND_EXC(exc, text) \ + do \ + { \ + std::stringstream _iex_append_s; \ + _iex_append_s << text; \ + exc.append (_iex_append_s); \ + } while (0) + +#define REPLACE_EXC(exc, text) \ + do \ + { \ + std::stringstream _iex_replace_s; \ + _iex_replace_s << text; \ + exc.assign (_iex_replace_s); \ + } while (0) + +//------------------------------------------------------------- +// A macro to throw ErrnoExc exceptions whose text is assembled +// using stringstreams: +// +// Example: +// +// THROW_ERRNO ("Cannot open file " << name << " (%T)."); +// +//------------------------------------------------------------- + +#define THROW_ERRNO(text) \ + do \ + { \ + std::stringstream _iex_throw_errno_s; \ + _iex_throw_errno_s << text; \ + ::IEX_NAMESPACE::throwErrnoExc (_iex_throw_errno_s.str ()); \ + } while (0) + +//------------------------------------------------------------- +// A macro to throw exceptions if an assertion is false. +// +// Example: +// +// ASSERT (ptr != 0, NullExc, "Null pointer" ); +// +//------------------------------------------------------------- + +#define ASSERT(assertion, type, text) \ + do \ + { \ + if (bool (assertion) == false) { THROW (type, text); } \ + } while (0) + +//------------------------------------------------------------- +// A macro to throw an IEX_NAMESPACE::LogicExc if an assertion is false, +// with the text composed from the source code file, line number, +// and assertion argument text. +// +// Example: +// +// LOGIC_ASSERT (i < n); +// +//------------------------------------------------------------- +#define LOGIC_ASSERT(assertion) \ + ASSERT ( \ + assertion, \ + IEX_NAMESPACE::LogicExc, \ + __FILE__ << "(" << __LINE__ \ + << "): logical assertion failed: " << #assertion) + +#endif diff --git a/third_party/tlRender-install-Release/include/OpenEXR/IexMathExc.h b/third_party/tlRender-install-Release/include/OpenEXR/IexMathExc.h new file mode 100644 index 00000000..7ddaaccc --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenEXR/IexMathExc.h @@ -0,0 +1,26 @@ +// +// SPDX-License-Identifier: BSD-3-Clause +// Copyright (c) Contributors to the OpenEXR Project. +// + +#ifndef INCLUDED_IEXMATHEXC_H +#define INCLUDED_IEXMATHEXC_H + +#include "IexBaseExc.h" + +IEX_INTERNAL_NAMESPACE_HEADER_ENTER + +//-------------------------------------------------------- +// Exception classes which correspond to specific floating +// point exceptions. +//-------------------------------------------------------- + +DEFINE_EXC_EXP (IEX_EXPORT, OverflowExc, MathExc) // Overflow +DEFINE_EXC_EXP (IEX_EXPORT, UnderflowExc, MathExc) // Underflow +DEFINE_EXC_EXP (IEX_EXPORT, DivzeroExc, MathExc) // Division by zero +DEFINE_EXC_EXP (IEX_EXPORT, InexactExc, MathExc) // Inexact result +DEFINE_EXC_EXP (IEX_EXPORT, InvalidFpOpExc, MathExc) // Invalid operation + +IEX_INTERNAL_NAMESPACE_HEADER_EXIT + +#endif // INCLUDED_IEXMATHEXC_H diff --git a/third_party/tlRender-install-Release/include/OpenEXR/IexMathFloatExc.h b/third_party/tlRender-install-Release/include/OpenEXR/IexMathFloatExc.h new file mode 100644 index 00000000..1a61ffdb --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenEXR/IexMathFloatExc.h @@ -0,0 +1,80 @@ +// +// SPDX-License-Identifier: BSD-3-Clause +// Copyright (c) Contributors to the OpenEXR Project. +// + +#ifndef INCLUDED_IEXMATHFLOATEXC_H +#define INCLUDED_IEXMATHFLOATEXC_H + +#include "IexExport.h" +#include "IexNamespace.h" + +#include "IexMathIeeeExc.h" + +IEX_INTERNAL_NAMESPACE_HEADER_ENTER + +//------------------------------------------------------------- +// Function mathExcOn() defines which floating point exceptions +// will be trapped and converted to C++ exceptions. +//------------------------------------------------------------- + +IEX_EXPORT +void mathExcOn (int when = (IEEE_OVERFLOW | IEEE_DIVZERO | IEEE_INVALID)); + +//---------------------------------------------------------------------- +// Function getMathExcOn() tells you for which floating point exceptions +// trapping and conversion to C++ exceptions is currently enabled. +//---------------------------------------------------------------------- + +IEX_EXPORT +int getMathExcOn (); + +//------------------------------------------------------------------------ +// A class that temporarily sets floating point exception trapping +// and conversion, and later restores the previous settings. +// +// Example: +// +// float +// trickyComputation (float x) +// { +// MathExcOn meo (0); // temporarily disable floating +// // point exception trapping +// +// float result = ...; // computation which may cause +// // floating point exceptions +// +// return result; // destruction of meo restores +// } // the program's previous floating +// // point exception settings +//------------------------------------------------------------------------ + +class IEX_EXPORT_TYPE MathExcOn +{ +public: + IEX_EXPORT MathExcOn (int when); + IEX_EXPORT ~MathExcOn (); + MathExcOn (const MathExcOn&) = delete; + MathExcOn& operator= (const MathExcOn&) = delete; + MathExcOn (MathExcOn&&) = delete; + MathExcOn& operator= (MathExcOn&&) = delete; + + // It is possible for functions to set the exception registers + // yet not trigger a SIGFPE. Specifically, the implementation + // of pow(x, y) we're using can generates a NaN from a negative x + // and fractional y but a SIGFPE is not generated. + // This function examimes the exception registers and calls the + // fpHandler if those registers modulo the exception mask are set. + // It should be called wherever this class is commonly used where it has + // been found that certain floating point exceptions are not being thrown. + + IEX_EXPORT void handleOutstandingExceptions (); + +private: + bool _changed; + int _saved; +}; + +IEX_INTERNAL_NAMESPACE_HEADER_EXIT + +#endif diff --git a/third_party/tlRender-install-Release/include/OpenEXR/IexMathIeeeExc.h b/third_party/tlRender-install-Release/include/OpenEXR/IexMathIeeeExc.h new file mode 100644 index 00000000..04abb1ba --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenEXR/IexMathIeeeExc.h @@ -0,0 +1,31 @@ +// +// SPDX-License-Identifier: BSD-3-Clause +// Copyright (c) Contributors to the OpenEXR Project. +// + +#ifndef INCLUDED_IEXMATHIEEE_EXC_H +#define INCLUDED_IEXMATHIEEE_EXC_H + +//--------------------------------------------------------------------------- +// +// Names for the loating point exceptions defined by IEEE standard 754 +// +//--------------------------------------------------------------------------- + +#include "IexExport.h" +#include "IexNamespace.h" + +IEX_INTERNAL_NAMESPACE_HEADER_ENTER + +enum IEX_EXPORT_ENUM IeeeExcType +{ + IEEE_OVERFLOW = 1, + IEEE_UNDERFLOW = 2, + IEEE_DIVZERO = 4, + IEEE_INEXACT = 8, + IEEE_INVALID = 16 +}; + +IEX_INTERNAL_NAMESPACE_HEADER_EXIT + +#endif diff --git a/third_party/tlRender-install-Release/include/OpenEXR/IexNamespace.h b/third_party/tlRender-install-Release/include/OpenEXR/IexNamespace.h new file mode 100644 index 00000000..381ea915 --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenEXR/IexNamespace.h @@ -0,0 +1,89 @@ +// +// SPDX-License-Identifier: BSD-3-Clause +// Copyright (c) Contributors to the OpenEXR Project. +// + +#ifndef INCLUDED_IEXNAMESPACE_H +#define INCLUDED_IEXNAMESPACE_H + +// +// The purpose of this file is to make it possible to specify an +// IEX_INTERNAL_NAMESPACE as a preprocessor definition and have all of the +// Iex symbols defined within that namespace rather than the standard +// Iex namespace. Those symbols are made available to client code through +// the IEX_NAMESPACE in addition to the IEX_INTERNAL_NAMESPACE. +// +// To ensure source code compatibility, the IEX_NAMESPACE defaults to Iex +// and then "using namespace IEX_INTERNAL_NAMESPACE;" brings all of the +// declarations from the IEX_INTERNAL_NAMESPACE into the IEX_NAMESPACE. This +// means that client code can continue to use syntax like Iex::BaseExc, but +// at link time it will resolve to a mangled symbol based on the +// IEX_INTERNAL_NAMESPACE. +// +// As an example, if one needed to build against a newer version of Iex and +// have it run alongside an older version in the same application, it is now +// possible to use an internal namespace to prevent collisions between the +// older versions of Iex symbols and the newer ones. To do this, the +// following could be defined at build time: +// +// IEX_INTERNAL_NAMESPACE = Iex_v2 +// +// This means that declarations inside Iex headers look like this (after the +// preprocessor has done its work): +// +// namespace Iex_v2 { +// ... +// class declarations +// ... +// } +// +// namespace Iex { +// using namespace Iex_v2; +// } +// + +// +// Open Source version of this file pulls in the IexConfig.h file +// for the configure time options. +// +#include "IexConfig.h" + +#ifndef IEX_NAMESPACE +# define IEX_NAMESPACE Iex +#endif + +#ifndef IEX_INTERNAL_NAMESPACE +# define IEX_INTERNAL_NAMESPACE IEX_NAMESPACE +#endif + +// +// We need to be sure that we import the internal namespace into the public one. +// To do this, we use the small bit of code below which initially defines +// IEX_INTERNAL_NAMESPACE (so it can be referenced) and then defines +// IEX_NAMESPACE and pulls the internal symbols into the public namespace. +// + +namespace IEX_INTERNAL_NAMESPACE +{} +namespace IEX_NAMESPACE +{ +using namespace IEX_INTERNAL_NAMESPACE; +} + +// +// There are identical pairs of HEADER/SOURCE ENTER/EXIT macros so that +// future extension to the namespace mechanism is possible without changing +// project source code. +// + +#define IEX_INTERNAL_NAMESPACE_HEADER_ENTER \ + namespace IEX_INTERNAL_NAMESPACE \ + { +#define IEX_INTERNAL_NAMESPACE_HEADER_EXIT } + +#define IEX_INTERNAL_NAMESPACE_SOURCE_ENTER \ + namespace IEX_INTERNAL_NAMESPACE \ + { +#define IEX_INTERNAL_NAMESPACE_SOURCE_EXIT } + +#endif // INCLUDED_IEXNAMESPACE_H diff --git a/third_party/tlRender-install-Release/include/OpenEXR/IexThrowErrnoExc.h b/third_party/tlRender-install-Release/include/OpenEXR/IexThrowErrnoExc.h new file mode 100644 index 00000000..c1497a85 --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenEXR/IexThrowErrnoExc.h @@ -0,0 +1,65 @@ +// +// SPDX-License-Identifier: BSD-3-Clause +// Copyright (c) Contributors to the OpenEXR Project. +// + +#ifndef INCLUDED_IEXTHROWERRNOEXC_H +#define INCLUDED_IEXTHROWERRNOEXC_H + +//---------------------------------------------------------- +// +// A function which throws ExcErrno exceptions +// +//---------------------------------------------------------- + +#include "IexBaseExc.h" +#include "IexExport.h" + +IEX_INTERNAL_NAMESPACE_HEADER_ENTER + +//-------------------------------------------------------------------------- +// +// Function throwErrnoExc() throws an exception which corresponds to +// error code errnum. The exception text is initialized with a copy +// of the string passed to throwErrnoExc(), where all occurrences of +// "%T" have been replaced with the output of strerror(oserror()). +// +// Example: +// +// If opening file /tmp/output failed with an ENOENT error code, +// calling +// +// throwErrnoExc (); +// +// or +// +// throwErrnoExc ("%T."); +// +// will throw an EnoentExc whose text reads +// +// No such file or directory. +// +// More detailed messages can be assembled using stringstreams: +// +// std::stringstream s; +// s << "Cannot open file " << name << " (%T)."; +// throwErrnoExc (s); +// +// The resulting exception contains the following text: +// +// Cannot open file /tmp/output (No such file or directory). +// +// Alternatively, you may want to use the THROW_ERRNO macro defined +// in IexMacros.h: +// +// THROW_ERRNO ("Cannot open file " << name << " (%T).") +// +//-------------------------------------------------------------------------- + +IEX_EXPORT void throwErrnoExc (const std::string& txt, int errnum); +IEX_EXPORT void throwErrnoExc (const std::string& txt); +IEX_EXPORT void throwErrnoExc (); + +IEX_INTERNAL_NAMESPACE_HEADER_EXIT + +#endif // INCLUDED_IEXTHROWERRNOEXC_H diff --git a/third_party/tlRender-install-Release/include/OpenEXR/IlmThread.h b/third_party/tlRender-install-Release/include/OpenEXR/IlmThread.h new file mode 100644 index 00000000..ce060e0d --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenEXR/IlmThread.h @@ -0,0 +1,110 @@ +// +// SPDX-License-Identifier: BSD-3-Clause +// Copyright (c) Contributors to the OpenEXR Project. +// + +#ifndef INCLUDED_ILM_THREAD_H +#define INCLUDED_ILM_THREAD_H + +//----------------------------------------------------------------------------- +// +// class Thread +// +// Class Thread is a portable interface to a system-dependent thread +// primitive. In order to make a thread actually do something useful, +// you must derive a subclass from class Thread and implement the +// run() function. If the operating system supports threading then +// the run() function will be executed int a new thread. +// +// The actual creation of the thread is done by the start() routine +// which then calls the run() function. In general the start() +// routine should be called from the constructor of the derived class. +// +// The base-class thread destructor will join/destroy the thread. +// +// IMPORTANT: Due to the mechanisms that encapsulate the low-level +// threading primitives in a C++ class there is a race condition +// with code resembling the following: +// +// { +// WorkerThread myThread; +// } // myThread goes out of scope, is destroyed +// // and the thread is joined +// +// The race is between the parent thread joining the child thread +// in the destructor of myThread, and the run() function in the +// child thread. If the destructor gets executed first then run() +// will be called with an invalid "this" pointer. +// +// This issue can be fixed by using a Semaphore to keep track of +// whether the run() function has already been called. You can +// include a Semaphore member variable within your derived class +// which you post() on in the run() function, and wait() on in the +// destructor before the thread is joined. Alternatively you could +// do something like this: +// +// Semaphore runStarted; +// +// void WorkerThread::run () +// { +// runStarted.post() +// // do some work +// ... +// } +// +// { +// WorkerThread myThread; +// runStarted.wait (); // ensure that we have started +// // the run function +// } // myThread goes out of scope, is destroyed +// // and the thread is joined +// +//----------------------------------------------------------------------------- + +#include "IlmThreadConfig.h" +#include "IlmThreadExport.h" +#include "IlmThreadNamespace.h" + +#if ILMTHREAD_THREADING_ENABLED +# include +#endif + +ILMTHREAD_INTERNAL_NAMESPACE_HEADER_ENTER + +// +// Query function to determine if the current platform supports +// threads AND this library was compiled with threading enabled. +// + +ILMTHREAD_EXPORT bool supportsThreads (); + +class ILMTHREAD_EXPORT_TYPE Thread +{ +public: + ILMTHREAD_EXPORT Thread (); + ILMTHREAD_EXPORT virtual ~Thread (); + + ILMTHREAD_EXPORT void start (); + + virtual void run () = 0; + + // + // wait for thread to exit - must be called before deleting thread + // + ILMTHREAD_EXPORT void join (); + ILMTHREAD_EXPORT bool joinable () const; + +private: +#if ILMTHREAD_THREADING_ENABLED + std::thread _thread; +#endif + + Thread& operator= (const Thread& t) = delete; + Thread& operator= (Thread&& t) = delete; + Thread (const Thread& t) = delete; + Thread (Thread&& t) = delete; +}; + +ILMTHREAD_INTERNAL_NAMESPACE_HEADER_EXIT + +#endif // INCLUDED_ILM_THREAD_H diff --git a/third_party/tlRender-install-Release/include/OpenEXR/IlmThreadConfig.h b/third_party/tlRender-install-Release/include/OpenEXR/IlmThreadConfig.h new file mode 100644 index 00000000..56c83931 --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenEXR/IlmThreadConfig.h @@ -0,0 +1,48 @@ +// SPDX-License-Identifier: BSD-3-Clause +// Copyright (c) Contributors to the OpenEXR Project. + +// This file is auto-generated by the cmake configure step + +#ifndef INCLUDED_ILMTHREAD_CONFIG_H +#define INCLUDED_ILMTHREAD_CONFIG_H 1 + +#pragma once + +// +// +// C++ namespace configuration / options + +// automated formatting does not handle the cmake tags well +// clang-format off + +#define ILMTHREAD_THREADING_ENABLED 1 +#define ILMTHREAD_HAVE_POSIX_SEMAPHORES 1 + +// +// Current internal library namespace name +// +#define ILMTHREAD_INTERNAL_NAMESPACE_CUSTOM 0 +#define ILMTHREAD_INTERNAL_NAMESPACE IlmThread_3_3 + +// +// Current public user namespace name +// + +#define ILMTHREAD_NAMESPACE_CUSTOM 0 +#define ILMTHREAD_NAMESPACE IlmThread + +// clang-format on + +#if defined(__cplusplus) && (__cplusplus >= 201402L) +# define ILMTHREAD_DEPRECATED(msg) [[deprecated (msg)]] +#endif + +#ifndef ILMTHREAD_DEPRECATED +# ifdef _MSC_VER +# define ILMTHREAD_DEPRECATED(msg) __declspec(deprecated (msg)) +# else +# define ILMTHREAD_DEPRECATED(msg) __attribute__ ((deprecated (msg))) +# endif +#endif + +#endif // INCLUDED_ILMTHREAD_CONFIG_H diff --git a/third_party/tlRender-install-Release/include/OpenEXR/IlmThreadExport.h b/third_party/tlRender-install-Release/include/OpenEXR/IlmThreadExport.h new file mode 100644 index 00000000..e880217a --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenEXR/IlmThreadExport.h @@ -0,0 +1,43 @@ +// +// SPDX-License-Identifier: BSD-3-Clause +// Copyright (c) Contributors to the OpenEXR Project. +// + +#ifndef INCLUDED_ILMTHREADEXPORT_H +#define INCLUDED_ILMTHREADEXPORT_H + +#include "OpenEXRConfig.h" + +// See website/SymbolVisibility.rst for more discussion + +/// \addtogroup ExportMacros +/// @{ + +// are we making a DLL under windows (might be msvc or mingw or others) +#if defined(OPENEXR_DLL) + +// when building as a DLL for windows, typical dllexport / import case +// where we need to switch depending on whether we are compiling +// internally or not +# if defined(ILMTHREAD_EXPORTS) +# define ILMTHREAD_EXPORT __declspec (dllexport) +# else +# define ILMTHREAD_EXPORT __declspec (dllimport) +# endif + +// DLLs don't support these types of visibility controls, just leave them as empty +# define ILMTHREAD_EXPORT_TYPE +# define ILMTHREAD_HIDDEN + +#else // OPENEXR_DLL + +// just pass these through from the top level config +# define ILMTHREAD_EXPORT OPENEXR_EXPORT +# define ILMTHREAD_HIDDEN OPENEXR_HIDDEN +# define ILMTHREAD_EXPORT_TYPE OPENEXR_EXPORT_TYPE + +#endif // OPENEXR_DLL + +/// @} + +#endif // INCLUDED_ILMTHREADEXPORT_H diff --git a/third_party/tlRender-install-Release/include/OpenEXR/IlmThreadForward.h b/third_party/tlRender-install-Release/include/OpenEXR/IlmThreadForward.h new file mode 100644 index 00000000..a357453e --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenEXR/IlmThreadForward.h @@ -0,0 +1,35 @@ +// +// SPDX-License-Identifier: BSD-3-Clause +// Copyright (c) Contributors to the OpenEXR Project. +// + +#ifndef INCLUDED_ILMTHREADFORWARD_H +#define INCLUDED_ILMTHREADFORWARD_H + +#include "IlmThreadConfig.h" +#include "IlmThreadNamespace.h" + +#if ILMTHREAD_THREADING_ENABLED +namespace std +{ +class mutex; +} +#endif + +ILMTHREAD_INTERNAL_NAMESPACE_HEADER_ENTER + +class Thread; +#if ILMTHREAD_THREADING_ENABLED +using Mutex = std::mutex; +#else +class Mutex; +#endif +class Lock; +class ThreadPool; +class Task; +class TaskGroup; +class Semaphore; + +ILMTHREAD_INTERNAL_NAMESPACE_HEADER_EXIT + +#endif // INCLUDED_ILMTHREADFORWARD_H diff --git a/third_party/tlRender-install-Release/include/OpenEXR/IlmThreadMutex.h b/third_party/tlRender-install-Release/include/OpenEXR/IlmThreadMutex.h new file mode 100644 index 00000000..451200c0 --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenEXR/IlmThreadMutex.h @@ -0,0 +1,77 @@ +// +// SPDX-License-Identifier: BSD-3-Clause +// Copyright (c) Contributors to the OpenEXR Project. +// + +#ifndef INCLUDED_ILM_THREAD_MUTEX_H +#define INCLUDED_ILM_THREAD_MUTEX_H + +//----------------------------------------------------------------------------- +// +// NB: Maintained for backward compatibility with header files only. This +// has been entirely replaced by c++11 and the std::mutex layer +// +//----------------------------------------------------------------------------- + +#include "IlmThreadConfig.h" +#include "IlmThreadExport.h" +#include "IlmThreadNamespace.h" + +#if ILMTHREAD_THREADING_ENABLED +# include +#endif + +ILMTHREAD_INTERNAL_NAMESPACE_HEADER_ENTER + +#if ILMTHREAD_THREADING_ENABLED +using Mutex ILMTHREAD_DEPRECATED ("replace with std::mutex") = std::mutex; + +// unfortunately we can't use std::unique_lock as a replacement for Lock since +// they have different API. Let us deprecate for now and give people a chance +// to clean up their code. +class Lock +{ +public: + ILMTHREAD_DEPRECATED ("replace with std::lock_guard or std::unique_lock") + Lock (const Mutex& m, bool autoLock = true) + : _mutex (const_cast (m)), _locked (false) + { + if (autoLock) + { + _mutex.lock (); + _locked = true; + } + } + + ~Lock () + { + if (_locked) _mutex.unlock (); + } + Lock (const Lock&) = delete; + Lock& operator= (const Lock&) = delete; + Lock (Lock&&) = delete; + Lock& operator= (Lock&&) = delete; + + void acquire () + { + _mutex.lock (); + _locked = true; + } + + void release () + { + _locked = false; + _mutex.unlock (); + } + + bool locked () { return _locked; } + +private: + Mutex& _mutex; + bool _locked; +}; +#endif + +ILMTHREAD_INTERNAL_NAMESPACE_HEADER_EXIT + +#endif // INCLUDED_ILM_THREAD_MUTEX_H diff --git a/third_party/tlRender-install-Release/include/OpenEXR/IlmThreadNamespace.h b/third_party/tlRender-install-Release/include/OpenEXR/IlmThreadNamespace.h new file mode 100644 index 00000000..030ca064 --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenEXR/IlmThreadNamespace.h @@ -0,0 +1,91 @@ +// +// SPDX-License-Identifier: BSD-3-Clause +// Copyright (c) Contributors to the OpenEXR Project. +// + +#ifndef INCLUDED_ILMTHREADNAMESPACE_H +#define INCLUDED_ILMTHREADNAMESPACE_H + +// +// The purpose of this file is to make it possible to specify an +// ILMTHREAD_INTERNAL_NAMESPACE as a preprocessor definition and have all of +// the IlmThread symbols defined within that namespace rather than the +// standard IlmThread namespace. Those symbols are made available to client +// code through the ILMTHREAD_NAMESPACE in addition to the +// ILMTHREAD_INTERNAL_NAMESPACE. +// +// To ensure source code compatibility, the ILMTHREAD_NAMESPACE defaults to +// IlmThread and then "using namespace ILMTHREAD_INTERNAL_NAMESPACE;" brings +// all of the declarations from the ILMTHREAD_INTERNAL_NAMESPACE into the +// ILMTHREAD_NAMESPACE. This means that client code can continue to use +// syntax like IlmThread::Thread, but at link time it will resolve to a +// mangled symbol based on the ILMTHREAD_INTERNAL_NAMESPACE. +// +// As an example, if one needed to build against a newer version of IlmThread +// and have it run alongside an older version in the same application, it is +// now possible to use an internal namespace to prevent collisions between +// the older versions of IlmThread symbols and the newer ones. To do this, +// the following could be defined at build time: +// +// ILMTHREAD_INTERNAL_NAMESPACE = IlmThread_v2 +// +// This means that declarations inside IlmThread headers look like this +// (after the preprocessor has done its work): +// +// namespace IlmThread_v2 { +// ... +// class declarations +// ... +// } +// +// namespace IlmThread { +// using namespace IlmThread_v2; +// } +// + +// +// Open Source version of this file pulls in the IlmThreadConfig.h file +// for the configure time options. +// +#include "IlmThreadConfig.h" + +#ifndef ILMTHREAD_NAMESPACE +# define ILMTHREAD_NAMESPACE IlmThread +#endif + +#ifndef ILMTHREAD_INTERNAL_NAMESPACE +# define ILMTHREAD_INTERNAL_NAMESPACE ILMTHREAD_NAMESPACE +#endif + +// +// We need to be sure that we import the internal namespace into the public one. +// To do this, we use the small bit of code below which initially defines +// ILMTHREAD_INTERNAL_NAMESPACE (so it can be referenced) and then defines +// ILMTHREAD_NAMESPACE and pulls the internal symbols into the public +// namespace. +// + +namespace ILMTHREAD_INTERNAL_NAMESPACE +{} +namespace ILMTHREAD_NAMESPACE +{ +using namespace ILMTHREAD_INTERNAL_NAMESPACE; +} + +// +// There are identical pairs of HEADER/SOURCE ENTER/EXIT macros so that +// future extension to the namespace mechanism is possible without changing +// project source code. +// + +#define ILMTHREAD_INTERNAL_NAMESPACE_HEADER_ENTER \ + namespace ILMTHREAD_INTERNAL_NAMESPACE \ + { +#define ILMTHREAD_INTERNAL_NAMESPACE_HEADER_EXIT } + +#define ILMTHREAD_INTERNAL_NAMESPACE_SOURCE_ENTER \ + namespace ILMTHREAD_INTERNAL_NAMESPACE \ + { +#define ILMTHREAD_INTERNAL_NAMESPACE_SOURCE_EXIT } + +#endif // INCLUDED_ILMTHREADNAMESPACE_H diff --git a/third_party/tlRender-install-Release/include/OpenEXR/IlmThreadPool.h b/third_party/tlRender-install-Release/include/OpenEXR/IlmThreadPool.h new file mode 100644 index 00000000..0d89742d --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenEXR/IlmThreadPool.h @@ -0,0 +1,195 @@ +// +// SPDX-License-Identifier: BSD-3-Clause +// Copyright (c) Contributors to the OpenEXR Project. +// + +#ifndef INCLUDED_ILM_THREAD_POOL_H +#define INCLUDED_ILM_THREAD_POOL_H + +//----------------------------------------------------------------------------- +// +// class Task, class ThreadPool, class TaskGroup +// +// Class ThreadPool manages a set of worker threads and accepts +// tasks for processing. Tasks added to the thread pool are +// executed concurrently by the worker threads. +// +// Class Task provides an abstract interface for a task which +// a ThreadPool works on. Derived classes need to implement the +// execute() function which performs the actual task. +// +// Class TaskGroup allows synchronization on the completion of a set +// of tasks. Every task that is added to a ThreadPool belongs to a +// single TaskGroup. The destructor of the TaskGroup waits for all +// tasks in the group to finish. +// +// Note: if you plan to use the ThreadPool interface in your own +// applications note that the implementation of the ThreadPool calls +// operator delete on tasks as they complete. If you define a custom +// operator new for your tasks, for instance to use a custom heap, +// then you must also write an appropriate operator delete. +// +//----------------------------------------------------------------------------- + +#include "IlmThreadConfig.h" +#include "IlmThreadExport.h" +#include "IlmThreadNamespace.h" + +ILMTHREAD_INTERNAL_NAMESPACE_HEADER_ENTER + +class TaskGroup; +class Task; + +//------------------------------------------------------- +// ThreadPoolProvider -- this is a pure virtual interface +// enabling custom overloading of the threads used and how +// the implementation of the processing of tasks +// is implemented +//------------------------------------------------------- +class ILMTHREAD_EXPORT_TYPE ThreadPoolProvider +{ +public: + ILMTHREAD_EXPORT ThreadPoolProvider (); + ILMTHREAD_EXPORT virtual ~ThreadPoolProvider (); + + // as in ThreadPool below + virtual int numThreads () const = 0; + // as in ThreadPool below + virtual void setNumThreads (int count) = 0; + // as in ThreadPool below + virtual void addTask (Task* task) = 0; + + // Ensure that all tasks in this set are finished + // and threads shutdown + virtual void finish () = 0; + + // Make the provider non-copyable + ThreadPoolProvider (const ThreadPoolProvider&) = delete; + ThreadPoolProvider& operator= (const ThreadPoolProvider&) = delete; + ThreadPoolProvider (ThreadPoolProvider&&) = delete; + ThreadPoolProvider& operator= (ThreadPoolProvider&&) = delete; +}; + +class ILMTHREAD_EXPORT_TYPE ThreadPool +{ +public: + //------------------------------------------------------- + // static routine to query how many processors should be + // used for processing exr files. The user of ThreadPool + // is free to use std::thread::hardware_concurrency or + // whatever number of threads is appropriate based on the + // application. However, this routine exists such that + // in the future, if core counts expand faster than + // memory bandwidth, or higher order NUMA machines are built + // that we can query, this routine gives a place where we + // can centralize that logic + //------------------------------------------------------- + ILMTHREAD_EXPORT + static unsigned estimateThreadCountForFileIO (); + + //------------------------------------------------------- + // Constructor -- creates numThreads worker threads which + // wait until a task is available, + // using a default ThreadPoolProvider + //------------------------------------------------------- + + ILMTHREAD_EXPORT ThreadPool (unsigned numThreads = 0); + + //----------------------------------------------------------- + // Destructor -- waits for all tasks to complete, joins all + // the threads to the calling thread, and then destroys them. + //----------------------------------------------------------- + + ILMTHREAD_EXPORT virtual ~ThreadPool (); + ThreadPool (const ThreadPool&) = delete; + ThreadPool& operator= (const ThreadPool&) = delete; + ThreadPool (ThreadPool&&) = delete; + ThreadPool& operator= (ThreadPool&&) = delete; + + //-------------------------------------------------------- + // Query and set the number of worker threads in the pool. + // + // Warning: never call setNumThreads from within a worker + // thread as this will almost certainly cause a deadlock + // or crash. + //-------------------------------------------------------- + + ILMTHREAD_EXPORT int numThreads () const; + ILMTHREAD_EXPORT void setNumThreads (int count); + + //-------------------------------------------------------- + // Set the thread provider for the pool. + // + // The ThreadPool takes ownership of the ThreadPoolProvider + // and will call delete on it when it is finished or when + // it is changed + // + // Warning: never call setThreadProvider from within a worker + // thread as this will almost certainly cause a deadlock + // or crash. + //-------------------------------------------------------- + ILMTHREAD_EXPORT void setThreadProvider (ThreadPoolProvider* provider); + + //------------------------------------------------------------ + // Add a task for processing. The ThreadPool can handle any + // number of tasks regardless of the number of worker threads. + // The tasks are first added onto a queue, and are executed + // by threads as they become available, in FIFO order. + //------------------------------------------------------------ + + ILMTHREAD_EXPORT void addTask (Task* task); + + //------------------------------------------- + // Access functions for the global threadpool + //------------------------------------------- + + ILMTHREAD_EXPORT static ThreadPool& globalThreadPool (); + ILMTHREAD_EXPORT static void addGlobalTask (Task* task); + + struct ILMTHREAD_HIDDEN Data; + +protected: + Data* _data; +}; + +class ILMTHREAD_EXPORT_TYPE Task +{ +public: + ILMTHREAD_EXPORT Task (TaskGroup* g); + ILMTHREAD_EXPORT virtual ~Task (); + Task (const Task&) = delete; + Task& operator= (const Task&) = delete; + Task (Task&&) = delete; + Task& operator= (Task&&) = delete; + + virtual void execute () = 0; + ILMTHREAD_EXPORT + TaskGroup* group (); + +protected: + TaskGroup* _group; +}; + +class ILMTHREAD_EXPORT_TYPE TaskGroup +{ +public: + ILMTHREAD_EXPORT TaskGroup (); + ILMTHREAD_EXPORT ~TaskGroup (); + + TaskGroup (const TaskGroup& other) = delete; + TaskGroup& operator= (const TaskGroup& other) = delete; + TaskGroup (TaskGroup&& other) = delete; + TaskGroup& operator= (TaskGroup&& other) = delete; + + // marks one task as finished + // should be used by the thread pool provider to notify + // as it finishes tasks + ILMTHREAD_EXPORT void finishOneTask (); + + struct ILMTHREAD_HIDDEN Data; + Data* const _data; +}; + +ILMTHREAD_INTERNAL_NAMESPACE_HEADER_EXIT + +#endif // INCLUDED_ILM_THREAD_POOL_H diff --git a/third_party/tlRender-install-Release/include/OpenEXR/IlmThreadProcessGroup.h b/third_party/tlRender-install-Release/include/OpenEXR/IlmThreadProcessGroup.h new file mode 100644 index 00000000..8ef677a6 --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenEXR/IlmThreadProcessGroup.h @@ -0,0 +1,154 @@ +// +// SPDX-License-Identifier: BSD-3-Clause +// Copyright (c) Contributors to the OpenEXR Project. +// + +#ifndef INCLUDED_ILM_THREAD_PROCESS_GROUP_H +#define INCLUDED_ILM_THREAD_PROCESS_GROUP_H + +//----------------------------------------------------------------------------- +// +// Class ProcessGroup is a templated inline helper for constraining +// task contexts to a number of threads. It maintains a list of +// contexts and then can hand them out one at a time, waiting for a +// previous thread request to finish before handing out more, +// preventing over-subscription / allocation of contexts. +// +//----------------------------------------------------------------------------- + +#include "IlmThreadConfig.h" +#include "IlmThreadExport.h" +#include "IlmThreadNamespace.h" +#include "IlmThreadSemaphore.h" + +#include "Iex.h" + +#include +#include +#include +#include + +ILMTHREAD_INTERNAL_NAMESPACE_HEADER_ENTER + +template ::value && + std::is_same ::value, bool> = true> +class ProcessGroup +{ +public: + using Process = P; + + ProcessGroup (unsigned int numThreads) + : _sem (numThreads) + , _avail_head (nullptr) + , _first_failure (nullptr) + { + _fixed_pool.resize (numThreads); + for ( unsigned int i = 0; i < numThreads; ++i ) + { + if (i == (numThreads - 1)) + _fixed_pool[i].next = nullptr; + else + _fixed_pool[i].next = &(_fixed_pool[i+1]); + } + _avail_head = &(_fixed_pool[0]); + } + + ProcessGroup (const ProcessGroup&) = delete; + ProcessGroup& operator= (const ProcessGroup&) = delete; + ProcessGroup (ProcessGroup&&) = default; + ProcessGroup& operator= (ProcessGroup&&) = delete; + ~ProcessGroup() + { + std::string *cur = _first_failure.load (); + delete cur; + } + + void push (Process *p) + { + Process* oldhead = _avail_head.load (std::memory_order_relaxed); + + do + { + p->next = oldhead; + } while (!_avail_head.compare_exchange_weak ( + oldhead, p, + std::memory_order_release, + std::memory_order_relaxed)); + + // notify someone else there's one available + _sem.post (); + } + + // called by the thread dispatching work units, may block + Process* pop () + { + Process* ret = nullptr; + + // we do not have to worry about ABA problems as + // we have a static pool of items we own, we're just + // putting them here and popping them off. + + // used for honoring the numThreads, as pop + // should only be called by the one thread + // waiting to submit thread calls + _sem.wait (); + + ret = _avail_head.load (std::memory_order_acquire); + + Process* newhead; + do + { + if (!ret) + std::cerr << "GACK: serious failure case???" << std::endl; + + newhead = ret->next; + } while ( !_avail_head.compare_exchange_weak( + ret, newhead, std::memory_order_acquire)); + + return ret; + } + + void record_failure (const char *e) + { + // should we construct a list of failures if there are + // more than one? seems less confusing to just report + // the first we happened to record + + std::string *cur = _first_failure.load (); + if (!cur) + { + std::string *msg = new std::string (e); + if (! _first_failure.compare_exchange_strong (cur, msg)) + delete msg; + } + } + + void throw_on_failure () + { + std::string *cur = _first_failure.load (); + _first_failure.store (nullptr); + + if (cur) + { + std::string msg (*cur); + delete cur; + + throw IEX_NAMESPACE::IoExc (msg); + } + } +private: + Semaphore _sem; + + std::vector _fixed_pool; + + std::atomic _avail_head; + + std::atomic _first_failure; +}; + + +ILMTHREAD_INTERNAL_NAMESPACE_HEADER_EXIT + +#endif // INCLUDED_ILM_THREAD_POOL_H diff --git a/third_party/tlRender-install-Release/include/OpenEXR/IlmThreadSemaphore.h b/third_party/tlRender-install-Release/include/OpenEXR/IlmThreadSemaphore.h new file mode 100644 index 00000000..18638615 --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenEXR/IlmThreadSemaphore.h @@ -0,0 +1,111 @@ +// +// SPDX-License-Identifier: BSD-3-Clause +// Copyright (c) Contributors to the OpenEXR Project. +// + +#ifndef INCLUDED_ILM_THREAD_SEMAPHORE_H +#define INCLUDED_ILM_THREAD_SEMAPHORE_H + +//----------------------------------------------------------------------------- +// +// class Semaphore -- a wrapper class for +// system-dependent counting semaphores +// +//----------------------------------------------------------------------------- + +#include "IlmThreadExport.h" + +#include "IlmThreadConfig.h" +#include "IlmThreadNamespace.h" + +// +// Decipher the platform-specific threading support. +// Set the ILMTHREAD_SEMAPHORE_* defines to indicate the corresponding +// implementation of the Semaphore class. Only one of these should be +// defined. +// + +#if ILMTHREAD_THREADING_ENABLED +# if ILMTHREAD_HAVE_POSIX_SEMAPHORES +# include +# define ILMTHREAD_SEMAPHORE_POSIX 1 +# elif defined(__APPLE__) +# include +# if MAC_OS_X_VERSION_MIN_REQUIRED > 1050 && !defined(__ppc__) +# include +# define ILMTHREAD_SEMAPHORE_OSX 1 +# else +# include +# include +# define ILMTHREAD_SEMAPHORE_OTHER 1 +# endif +# elif (defined(_WIN32) || defined(_WIN64)) +# ifdef NOMINMAX +# undef NOMINMAX +# endif +# define NOMINMAX +# include +# define ILMTHREAD_SEMAPHORE_WINDOWS 1 +# else +# include +# include +# define ILMTHREAD_SEMAPHORE_OTHER 1 +# endif +#else +# define ILMTHREAD_SEMAPHORE_DISABLED 1 +#endif + +ILMTHREAD_INTERNAL_NAMESPACE_HEADER_ENTER + +class ILMTHREAD_EXPORT_TYPE Semaphore +{ +public: + ILMTHREAD_EXPORT Semaphore (unsigned int value = 0); + ILMTHREAD_EXPORT virtual ~Semaphore (); + + ILMTHREAD_EXPORT void wait (); + ILMTHREAD_EXPORT bool tryWait (); + ILMTHREAD_EXPORT void post (); + ILMTHREAD_EXPORT int value () const; + +private: +#if ILMTHREAD_SEMAPHORE_POSIX + + mutable sem_t _semaphore; + +#elif ILMTHREAD_SEMAPHORE_OSX + + mutable dispatch_semaphore_t _semaphore; + +#elif ILMTHREAD_SEMAPHORE_WINDOWS + + mutable HANDLE _semaphore; + +#elif ILMTHREAD_SEMAPHORE_OTHER + + // + // If the platform has threads but no semaphores, + // then we implement them ourselves using condition variables + // + + struct sema_t + { + unsigned int count; + unsigned long numWaiting; + std::mutex mutex; + std::condition_variable nonZero; + }; + + mutable sema_t _semaphore; + +#endif + + void operator= (const Semaphore& s) = delete; + Semaphore (const Semaphore& s) = delete; + void operator= (Semaphore&& s) = delete; + Semaphore (Semaphore&& s) = delete; +}; + +ILMTHREAD_INTERNAL_NAMESPACE_HEADER_EXIT + +#endif // INCLUDED_ILM_THREAD_SEMAPHORE_H diff --git a/third_party/tlRender-install-Release/include/OpenEXR/ImfAcesFile.h b/third_party/tlRender-install-Release/include/OpenEXR/ImfAcesFile.h new file mode 100644 index 00000000..c2d5ed1d --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenEXR/ImfAcesFile.h @@ -0,0 +1,309 @@ +// +// SPDX-License-Identifier: BSD-3-Clause +// Copyright (c) Contributors to the OpenEXR Project. +// + +#ifndef INCLUDED_IMF_ACES_FILE_H +#define INCLUDED_IMF_ACES_FILE_H + +//----------------------------------------------------------------------------- +// +// ACES image file I/O. +// +// This header file declares two classes that directly support +// image file input and output according to the Academy Image +// Interchange Framework. +// +// The Academy Image Interchange file format is a subset of OpenEXR: +// +// - Images are stored as scanlines. Tiles are not allowed. +// +// - Images contain three color channels, either +// R, G, B (red, green, blue) or +// Y, RY, BY (luminance, sub-sampled chroma) +// +// - Images may optionally contain an alpha channel. +// +// - Only three compression types are allowed: +// - NO_COMPRESSION (file is not compressed) +// - PIZ_COMPRESSION (lossless) +// - B44A_COMPRESSION (lossy) +// +// - The "chromaticities" header attribute must specify +// the ACES RGB primaries and white point. +// +// class AcesOutputFile writes an OpenEXR file, enforcing the +// restrictions listed above. Pixel data supplied by application +// software must already be in the ACES RGB space. +// +// class AcesInputFile reads an OpenEXR file. Pixel data delivered +// to application software is guaranteed to be in the ACES RGB space. +// If the RGB space of the file is not the same as the ACES space, +// then the pixels are automatically converted: the pixels are +// converted to CIE XYZ, a color adaptation transform shifts the +// white point, and the result is converted to ACES RGB. +// +//----------------------------------------------------------------------------- + +#include "ImathBox.h" +#include "ImathVec.h" +#include "ImfExport.h" +#include "ImfForward.h" +#include "ImfHeader.h" +#include "ImfNamespace.h" +#include "ImfRgba.h" +#include "ImfThreading.h" + +#include + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER + +// +// ACES red, green, blue and white-point chromaticities. +// + +const Chromaticities& acesChromaticities (); + +// +// ACES output file. +// + +class IMF_EXPORT_TYPE AcesOutputFile +{ +public: + //--------------------------------------------------- + // Constructor -- header is constructed by the caller + //--------------------------------------------------- + + IMF_EXPORT + AcesOutputFile ( + const std::string& name, + const Header& header, + RgbaChannels rgbaChannels = WRITE_RGBA, + int numThreads = globalThreadCount ()); + + //---------------------------------------------------- + // Constructor -- header is constructed by the caller, + // file is opened by the caller, destructor will not + // automatically close the file. + //---------------------------------------------------- + + IMF_EXPORT + AcesOutputFile ( + OPENEXR_IMF_INTERNAL_NAMESPACE::OStream& os, + const Header& header, + RgbaChannels rgbaChannels = WRITE_RGBA, + int numThreads = globalThreadCount ()); + + //---------------------------------------------------------------- + // Constructor -- header data are explicitly specified as function + // call arguments (empty dataWindow means "same as displayWindow") + //---------------------------------------------------------------- + + IMF_EXPORT + AcesOutputFile ( + const std::string& name, + const IMATH_NAMESPACE::Box2i& displayWindow, + const IMATH_NAMESPACE::Box2i& dataWindow = IMATH_NAMESPACE::Box2i (), + RgbaChannels rgbaChannels = WRITE_RGBA, + float pixelAspectRatio = 1, + const IMATH_NAMESPACE::V2f screenWindowCenter = + IMATH_NAMESPACE::V2f (0, 0), + float screenWindowWidth = 1, + LineOrder lineOrder = INCREASING_Y, + Compression compression = PIZ_COMPRESSION, + int numThreads = globalThreadCount ()); + + //----------------------------------------------- + // Constructor -- like the previous one, but both + // the display window and the data window are + // Box2i (V2i (0, 0), V2i (width - 1, height -1)) + //----------------------------------------------- + + IMF_EXPORT + AcesOutputFile ( + const std::string& name, + int width, + int height, + RgbaChannels rgbaChannels = WRITE_RGBA, + float pixelAspectRatio = 1, + const IMATH_NAMESPACE::V2f screenWindowCenter = + IMATH_NAMESPACE::V2f (0, 0), + float screenWindowWidth = 1, + LineOrder lineOrder = INCREASING_Y, + Compression compression = PIZ_COMPRESSION, + int numThreads = globalThreadCount ()); + + //----------- + // Destructor + //----------- + + IMF_EXPORT + virtual ~AcesOutputFile (); + + //------------------------------------------------ + // Define a frame buffer as the pixel data source: + // Pixel (x, y) is at address + // + // base + x * xStride + y * yStride + // + //------------------------------------------------ + + IMF_EXPORT + void setFrameBuffer (const Rgba* base, size_t xStride, size_t yStride); + + //------------------------------------------------- + // Write pixel data (see class Imf::OutputFile) + // The pixels are assumed to contain ACES RGB data. + //------------------------------------------------- + + IMF_EXPORT + void writePixels (int numScanLines = 1); + IMF_EXPORT + int currentScanLine () const; + + //-------------------------- + // Access to the file header + //-------------------------- + + IMF_EXPORT + const Header& header () const; + IMF_EXPORT + const IMATH_NAMESPACE::Box2i& displayWindow () const; + IMF_EXPORT + const IMATH_NAMESPACE::Box2i& dataWindow () const; + IMF_EXPORT + float pixelAspectRatio () const; + IMF_EXPORT + const IMATH_NAMESPACE::V2f screenWindowCenter () const; + IMF_EXPORT + float screenWindowWidth () const; + IMF_EXPORT + LineOrder lineOrder () const; + IMF_EXPORT + Compression compression () const; + IMF_EXPORT + RgbaChannels channels () const; + + // -------------------------------------------------------------------- + // Update the preview image (see Imf::OutputFile::updatePreviewImage()) + // -------------------------------------------------------------------- + + IMF_EXPORT + void updatePreviewImage (const PreviewRgba[]); + +private: + AcesOutputFile (const AcesOutputFile&) = delete; + AcesOutputFile& operator= (const AcesOutputFile&) = delete; + AcesOutputFile (AcesOutputFile&&) = delete; + AcesOutputFile& operator= (AcesOutputFile&&) = delete; + + class IMF_HIDDEN Data; + + Data* _data; +}; + +// +// ACES input file +// + +class IMF_EXPORT_TYPE AcesInputFile +{ +public: + //------------------------------------------------------- + // Constructor -- opens the file with the specified name, + // destructor will automatically close the file. + //------------------------------------------------------- + + IMF_EXPORT + AcesInputFile ( + const std::string& name, int numThreads = globalThreadCount ()); + + //----------------------------------------------------------- + // Constructor -- attaches the new AcesInputFile object to a + // file that has already been opened by the caller. + // Destroying the AcesInputFile object will not automatically + // close the file. + //----------------------------------------------------------- + + IMF_EXPORT + AcesInputFile ( + OPENEXR_IMF_INTERNAL_NAMESPACE::IStream& is, + int numThreads = globalThreadCount ()); + + //----------- + // Destructor + //----------- + + IMF_EXPORT + virtual ~AcesInputFile (); + + //----------------------------------------------------- + // Define a frame buffer as the pixel data destination: + // Pixel (x, y) is at address + // + // base + x * xStride + y * yStride + // + //----------------------------------------------------- + + IMF_EXPORT + void setFrameBuffer (Rgba* base, size_t xStride, size_t yStride); + + //-------------------------------------------- + // Read pixel data (see class Imf::InputFile) + // Pixels returned will contain ACES RGB data. + //-------------------------------------------- + + IMF_EXPORT + void readPixels (int scanLine1, int scanLine2); + IMF_EXPORT + void readPixels (int scanLine); + + //-------------------------- + // Access to the file header + //-------------------------- + + IMF_EXPORT + const Header& header () const; + IMF_EXPORT + const IMATH_NAMESPACE::Box2i& displayWindow () const; + IMF_EXPORT + const IMATH_NAMESPACE::Box2i& dataWindow () const; + IMF_EXPORT + float pixelAspectRatio () const; + IMF_EXPORT + const IMATH_NAMESPACE::V2f screenWindowCenter () const; + IMF_EXPORT + float screenWindowWidth () const; + IMF_EXPORT + LineOrder lineOrder () const; + IMF_EXPORT + Compression compression () const; + IMF_EXPORT + RgbaChannels channels () const; + IMF_EXPORT + const char* fileName () const; + IMF_EXPORT + bool isComplete () const; + + //---------------------------------- + // Access to the file format version + //---------------------------------- + + IMF_EXPORT + int version () const; + +private: + AcesInputFile (const AcesInputFile&) = delete; + AcesInputFile& operator= (const AcesInputFile&) = delete; + AcesInputFile (AcesInputFile&&) = delete; + AcesInputFile& operator= (AcesInputFile&&) = delete; + + class IMF_HIDDEN Data; + + Data* _data; +}; + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT + +#endif diff --git a/third_party/tlRender-install-Release/include/OpenEXR/ImfArray.h b/third_party/tlRender-install-Release/include/OpenEXR/ImfArray.h new file mode 100644 index 00000000..211d818e --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenEXR/ImfArray.h @@ -0,0 +1,236 @@ +// +// SPDX-License-Identifier: BSD-3-Clause +// Copyright (c) Contributors to the OpenEXR Project. +// + +#ifndef INCLUDED_IMF_ARRAY_H +#define INCLUDED_IMF_ARRAY_H + +#include "ImfForward.h" + +//------------------------------------------------------------------------- +// +// class Array +// class Array2D +// +// "Arrays of T" whose sizes are not known at compile time. +// When an array goes out of scope, its elements are automatically +// deleted. +// +// Usage example: +// +// struct C +// { +// C () {std::cout << "C::C (" << this << ")\n";}; +// virtual ~C () {std::cout << "C::~C (" << this << ")\n";}; +// }; +// +// int +// main () +// { +// Array a(3); +// +// C &b = a[1]; +// const C &c = a[1]; +// C *d = a + 2; +// const C *e = a; +// +// return 0; +// } +// +//------------------------------------------------------------------------- + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER + +template class IMF_EXPORT_TEMPLATE_TYPE Array +{ +public: + //----------------------------- + // Constructors and destructors + //----------------------------- + + Array () + { + _data = 0; + _size = 0; + } + Array (long size) + { + _data = new T[size]; + _size = size; + } + ~Array () { delete[] _data; } + + //----------------------------- + // Access to the array elements + //----------------------------- + + operator T* () { return _data; } + operator const T* () const { return _data; } + + //------------------------------------------------------ + // Resize and clear the array (the contents of the array + // are not preserved across the resize operation). + // + // resizeEraseUnsafe() is more memory efficient than + // resizeErase() because it deletes the old memory block + // before allocating a new one, but if allocating the + // new block throws an exception, resizeEraseUnsafe() + // leaves the array in an unusable state. + // + //------------------------------------------------------ + + void resizeErase (long size); + void resizeEraseUnsafe (long size); + + //------------------------------- + // Return the size of this array. + //------------------------------- + + long size () const { return _size; } + +private: + Array (const Array&) = delete; + Array& operator= (const Array&) = delete; + Array (Array&&) = delete; + Array& operator= (Array&&) = delete; + + long _size; + T* _data; +}; + +template class IMF_EXPORT_TEMPLATE_TYPE Array2D +{ +public: + //----------------------------- + // Constructors and destructors + //----------------------------- + + Array2D (); // empty array, 0 by 0 elements + Array2D (long sizeX, long sizeY); // sizeX by sizeY elements + ~Array2D (); + + //----------------------------- + // Access to the array elements + //----------------------------- + + T* operator[] (long x); + const T* operator[] (long x) const; + + //------------------------------------------------------ + // Resize and clear the array (the contents of the array + // are not preserved across the resize operation). + // + // resizeEraseUnsafe() is more memory efficient than + // resizeErase() because it deletes the old memory block + // before allocating a new one, but if allocating the + // new block throws an exception, resizeEraseUnsafe() + // leaves the array in an unusable state. + // + //------------------------------------------------------ + + void resizeErase (long sizeX, long sizeY); + void resizeEraseUnsafe (long sizeX, long sizeY); + + //------------------------------- + // Return the size of this array. + //------------------------------- + + long height () const { return _sizeX; } + long width () const { return _sizeY; } + +private: + Array2D (const Array2D&) = delete; + Array2D& operator= (const Array2D&) = delete; + Array2D (Array2D&&) = delete; + Array2D& operator= (Array2D&&) = delete; + + long _sizeX; + long _sizeY; + T* _data; +}; + +//--------------- +// Implementation +//--------------- + +template +inline void +Array::resizeErase (long size) +{ + T* tmp = new T[size]; + delete[] _data; + _size = size; + _data = tmp; +} + +template +inline void +Array::resizeEraseUnsafe (long size) +{ + delete[] _data; + _data = 0; + _size = 0; + _data = new T[size]; + _size = size; +} + +template +inline Array2D::Array2D () : _sizeX (0), _sizeY (0), _data (0) +{ + // empty +} + +template +inline Array2D::Array2D (long sizeX, long sizeY) + : _sizeX (sizeX), _sizeY (sizeY), _data (new T[sizeX * sizeY]) +{ + // empty +} + +template inline Array2D::~Array2D () +{ + delete[] _data; +} + +template +inline T* +Array2D::operator[] (long x) +{ + return _data + x * _sizeY; +} + +template +inline const T* +Array2D::operator[] (long x) const +{ + return _data + x * _sizeY; +} + +template +inline void +Array2D::resizeErase (long sizeX, long sizeY) +{ + T* tmp = new T[sizeX * sizeY]; + delete[] _data; + _sizeX = sizeX; + _sizeY = sizeY; + _data = tmp; +} + +template +inline void +Array2D::resizeEraseUnsafe (long sizeX, long sizeY) +{ + delete[] _data; + _data = 0; + _sizeX = 0; + _sizeY = 0; + _data = new T[sizeX * sizeY]; + _sizeX = sizeX; + _sizeY = sizeY; +} + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT + +#endif diff --git a/third_party/tlRender-install-Release/include/OpenEXR/ImfAttribute.h b/third_party/tlRender-install-Release/include/OpenEXR/ImfAttribute.h new file mode 100644 index 00000000..d0232d91 --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenEXR/ImfAttribute.h @@ -0,0 +1,336 @@ +// +// SPDX-License-Identifier: BSD-3-Clause +// Copyright (c) Contributors to the OpenEXR Project. +// + +#ifndef INCLUDED_IMF_ATTRIBUTE_H +#define INCLUDED_IMF_ATTRIBUTE_H + +//----------------------------------------------------------------------------- +// +// class Attribute +// +//----------------------------------------------------------------------------- + +#include "ImfForward.h" + +#include "ImfIO.h" +#include "ImfXdr.h" + +#include "IexBaseExc.h" + +#include +#include + +#if defined(_MSC_VER) +// suppress warning about non-exported base classes +# pragma warning(push) +# pragma warning(disable : 4251) +# pragma warning(disable : 4275) +#endif + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER + +class IMF_EXPORT_TYPE Attribute +{ +public: + //--------------------------- + // Constructor and destructor + //--------------------------- + + IMF_EXPORT Attribute (); + IMF_EXPORT virtual ~Attribute (); + + //------------------------------- + // Get this attribute's type name + //------------------------------- + + virtual const char* typeName () const = 0; + + //------------------------------ + // Make a copy of this attribute + //------------------------------ + + virtual Attribute* copy () const = 0; + + //---------------------------------------- + // Type-specific attribute I/O and copying + //---------------------------------------- + + virtual void writeValueTo ( + OPENEXR_IMF_INTERNAL_NAMESPACE::OStream& os, int version) const = 0; + + virtual void readValueFrom ( + OPENEXR_IMF_INTERNAL_NAMESPACE::IStream& is, int size, int version) = 0; + + virtual void copyValueFrom (const Attribute& other) = 0; + + //------------------ + // Attribute factory + //------------------ + + IMF_EXPORT static Attribute* newAttribute (const char typeName[]); + + //----------------------------------------------------------- + // Test if a given attribute type has already been registered + //----------------------------------------------------------- + + IMF_EXPORT static bool knownType (const char typeName[]); + +protected: + //-------------------------------------------------- + // Register an attribute type so that newAttribute() + // knows how to make objects of this type. + //-------------------------------------------------- + IMF_EXPORT + static void registerAttributeType ( + const char typeName[], Attribute* (*newAttribute) ()); + + //------------------------------------------------------ + // Un-register an attribute type so that newAttribute() + // no longer knows how to make objects of this type (for + // debugging only). + //------------------------------------------------------ + IMF_EXPORT + static void unRegisterAttributeType (const char typeName[]); +}; + +//------------------------------------------------- +// Class template for attributes of a specific type +//------------------------------------------------- + +template +class IMF_EXPORT_TEMPLATE_TYPE TypedAttribute : public Attribute +{ +public: + //------------------------------------------------------------ + // Constructors and destructor: default behavior. This assumes + // that the type T is copyable/assignable/moveable. + //------------------------------------------------------------ + + TypedAttribute () = default; + TypedAttribute (const T& value); + TypedAttribute (const TypedAttribute& other) = default; + TypedAttribute (TypedAttribute&& other) = default; + //NB: if we use a default destructor, it wreaks havoc with where the vtable and such end up + //at least under mingw+windows, and since we are providing extern template instantiations + //this will be pretty trim and should reduce code bloat + virtual ~TypedAttribute (); + + TypedAttribute& operator= (const TypedAttribute& other) = default; + TypedAttribute& operator= (TypedAttribute&& other) = default; + + //-------------------------------- + // Access to the attribute's value + //-------------------------------- + + T& value (); + const T& value () const; + + //-------------------------------- + // Get this attribute's type name. + //-------------------------------- + + virtual const char* typeName () const; + + //--------------------------------------------------------- + // Static version of typeName() + // This function must be specialized for each value type T. + //--------------------------------------------------------- + + static const char* staticTypeName (); + + //--------------------- + // Make a new attribute + //--------------------- + + static Attribute* makeNewAttribute (); + + //------------------------------ + // Make a copy of this attribute + //------------------------------ + + virtual Attribute* copy () const; + + //----------------------------------------------------------------- + // Type-specific attribute I/O and copying. + // Depending on type T, these functions may have to be specialized. + //----------------------------------------------------------------- + + virtual void writeValueTo ( + OPENEXR_IMF_INTERNAL_NAMESPACE::OStream& os, int version) const; + + virtual void readValueFrom ( + OPENEXR_IMF_INTERNAL_NAMESPACE::IStream& is, int size, int version); + + virtual void copyValueFrom (const Attribute& other); + + //------------------------------------------------------------ + // Dynamic casts that throw exceptions instead of returning 0. + //------------------------------------------------------------ + + static TypedAttribute* cast (Attribute* attribute); + static const TypedAttribute* cast (const Attribute* attribute); + static TypedAttribute& cast (Attribute& attribute); + static const TypedAttribute& cast (const Attribute& attribute); + + //--------------------------------------------------------------- + // Register this attribute type so that Attribute::newAttribute() + // knows how to make objects of this type. + // + // Note that this function is not thread-safe because it modifies + // a global variable in the IlmIlm library. A thread in a multi- + // threaded program may call registerAttributeType() only when no + // other thread is accessing any functions or classes in the + // OpenEXR library. + // + //--------------------------------------------------------------- + + static void registerAttributeType (); + + //----------------------------------------------------- + // Un-register this attribute type (for debugging only) + //----------------------------------------------------- + + static void unRegisterAttributeType (); + +private: + T _value; +}; + +//------------------------------------ +// Implementation of TypedAttribute +//------------------------------------ + +template +TypedAttribute::TypedAttribute (const T& value) + : Attribute (), _value (value) +{ + // empty +} + +template TypedAttribute::~TypedAttribute () +{ + // empty +} + +template +inline T& +TypedAttribute::value () +{ + return _value; +} + +template +inline const T& +TypedAttribute::value () const +{ + return _value; +} + +template +const char* +TypedAttribute::typeName () const +{ + return staticTypeName (); +} + +template +Attribute* +TypedAttribute::makeNewAttribute () +{ + return new TypedAttribute (); +} + +template +Attribute* +TypedAttribute::copy () const +{ + Attribute* attribute = new TypedAttribute (); + attribute->copyValueFrom (*this); + return attribute; +} + +template +void +TypedAttribute::writeValueTo ( + OPENEXR_IMF_INTERNAL_NAMESPACE::OStream& os, int version) const +{ + OPENEXR_IMF_INTERNAL_NAMESPACE::Xdr::write< + OPENEXR_IMF_INTERNAL_NAMESPACE::StreamIO> (os, _value); +} + +template +void +TypedAttribute::readValueFrom ( + OPENEXR_IMF_INTERNAL_NAMESPACE::IStream& is, int size, int version) +{ + OPENEXR_IMF_INTERNAL_NAMESPACE::Xdr::read< + OPENEXR_IMF_INTERNAL_NAMESPACE::StreamIO> (is, _value); +} + +template +void +TypedAttribute::copyValueFrom (const Attribute& other) +{ + _value = cast (other)._value; +} + +template +TypedAttribute* +TypedAttribute::cast (Attribute* attribute) +{ + TypedAttribute* t = dynamic_cast*> (attribute); + + if (t == 0) throw IEX_NAMESPACE::TypeExc ("Unexpected attribute type."); + + return t; +} + +template +const TypedAttribute* +TypedAttribute::cast (const Attribute* attribute) +{ + const TypedAttribute* t = + dynamic_cast*> (attribute); + + if (t == 0) throw IEX_NAMESPACE::TypeExc ("Unexpected attribute type."); + + return t; +} + +template +inline TypedAttribute& +TypedAttribute::cast (Attribute& attribute) +{ + return *cast (&attribute); +} + +template +inline const TypedAttribute& +TypedAttribute::cast (const Attribute& attribute) +{ + return *cast (&attribute); +} + +template +inline void +TypedAttribute::registerAttributeType () +{ + Attribute::registerAttributeType (staticTypeName (), makeNewAttribute); +} + +template +inline void +TypedAttribute::unRegisterAttributeType () +{ + Attribute::unRegisterAttributeType (staticTypeName ()); +} + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT + +#if defined(_MSC_VER) +# pragma warning(pop) +#endif + +#endif diff --git a/third_party/tlRender-install-Release/include/OpenEXR/ImfBoxAttribute.h b/third_party/tlRender-install-Release/include/OpenEXR/ImfBoxAttribute.h new file mode 100644 index 00000000..786b9d70 --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenEXR/ImfBoxAttribute.h @@ -0,0 +1,36 @@ +// +// SPDX-License-Identifier: BSD-3-Clause +// Copyright (c) Contributors to the OpenEXR Project. +// + +#ifndef INCLUDED_IMF_BOX_ATTRIBUTE_H +#define INCLUDED_IMF_BOX_ATTRIBUTE_H + +//----------------------------------------------------------------------------- +// +// class Box2iAttribute +// class Box2fAttribute +// +//----------------------------------------------------------------------------- + +#include "ImfExport.h" +#include "ImfNamespace.h" + +#include "ImfAttribute.h" +#include + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER + +using Box2iAttribute = TypedAttribute; +using Box2fAttribute = TypedAttribute; + +#ifndef COMPILING_IMF_BOX_ATTRIBUTE +extern template class IMF_EXPORT_EXTERN_TEMPLATE + TypedAttribute; +extern template class IMF_EXPORT_EXTERN_TEMPLATE + TypedAttribute; +#endif + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT + +#endif diff --git a/third_party/tlRender-install-Release/include/OpenEXR/ImfCRgbaFile.h b/third_party/tlRender-install-Release/include/OpenEXR/ImfCRgbaFile.h new file mode 100644 index 00000000..062f2f70 --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenEXR/ImfCRgbaFile.h @@ -0,0 +1,484 @@ +// +// SPDX-License-Identifier: BSD-3-Clause +// Copyright (c) Contributors to the OpenEXR Project. +// + +#ifndef INCLUDED_IMF_C_RGBA_FILE_H +#define INCLUDED_IMF_C_RGBA_FILE_H + +#include "ImfExport.h" + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* +** Interpreting unsigned shorts as 16-bit floating point numbers +*/ + +typedef unsigned short ImfHalf; + +IMF_EXPORT +void ImfFloatToHalf (float f, ImfHalf* h); + +IMF_EXPORT +void ImfFloatToHalfArray (int n, const float f[/*n*/], ImfHalf h[/*n*/]); + +IMF_EXPORT +float ImfHalfToFloat (ImfHalf h); + +IMF_EXPORT +void ImfHalfToFloatArray (int n, const ImfHalf h[/*n*/], float f[/*n*/]); + +/* +** RGBA pixel; memory layout must be the same as struct Imf::Rgba. +*/ + +struct ImfRgba +{ + ImfHalf r; + ImfHalf g; + ImfHalf b; + ImfHalf a; +}; + +typedef struct ImfRgba ImfRgba; + +/* +** Magic number; this must be the same as Imf::MAGIC +*/ + +#define IMF_MAGIC 20000630 + +/* +** Version number; this must be the same as Imf::EXR_VERSION +*/ + +#define IMF_VERSION_NUMBER 2 + +/* +** Line order; values must be the same as in Imf::LineOrder. +*/ + +#define IMF_INCREASING_Y 0 +#define IMF_DECREASING_Y 1 +#define IMF_RANDOM_Y 2 + +/* +** Compression types; values must be the same as in Imf::Compression. +*/ + +#define IMF_NO_COMPRESSION 0 +#define IMF_RLE_COMPRESSION 1 +#define IMF_ZIPS_COMPRESSION 2 +#define IMF_ZIP_COMPRESSION 3 +#define IMF_PIZ_COMPRESSION 4 +#define IMF_PXR24_COMPRESSION 5 +#define IMF_B44_COMPRESSION 6 +#define IMF_B44A_COMPRESSION 7 +#define IMF_DWAA_COMPRESSION 8 +#define IMF_DWAB_COMPRESSION 9 +#define IMF_NUM_COMPRESSION_METHODS 10 + +/* +** Channels; values must be the same as in Imf::RgbaChannels. +*/ + +#define IMF_WRITE_R 0x01 +#define IMF_WRITE_G 0x02 +#define IMF_WRITE_B 0x04 +#define IMF_WRITE_A 0x08 +#define IMF_WRITE_Y 0x10 +#define IMF_WRITE_C 0x20 +#define IMF_WRITE_RGB 0x07 +#define IMF_WRITE_RGBA 0x0f +#define IMF_WRITE_YC 0x30 +#define IMF_WRITE_YA 0x18 +#define IMF_WRITE_YCA 0x38 + +/* +** Level modes; values must be the same as in Imf::LevelMode +*/ + +#define IMF_ONE_LEVEL 0 +#define IMF_MIPMAP_LEVELS 1 +#define IMF_RIPMAP_LEVELS 2 + +/* +** Level rounding modes; values must be the same as in Imf::LevelRoundingMode +*/ + +#define IMF_ROUND_DOWN 0 +#define IMF_ROUND_UP 1 + +/* +** RGBA file header +*/ + +struct ImfHeader; +typedef struct ImfHeader ImfHeader; + +IMF_EXPORT +ImfHeader* ImfNewHeader (void); + +IMF_EXPORT +void ImfDeleteHeader (ImfHeader* hdr); + +IMF_EXPORT +ImfHeader* ImfCopyHeader (const ImfHeader* hdr); + +IMF_EXPORT +void ImfHeaderSetDisplayWindow ( + ImfHeader* hdr, int xMin, int yMin, int xMax, int yMax); + +IMF_EXPORT +void ImfHeaderDisplayWindow ( + const ImfHeader* hdr, int* xMin, int* yMin, int* xMax, int* yMax); + +IMF_EXPORT +void +ImfHeaderSetDataWindow (ImfHeader* hdr, int xMin, int yMin, int xMax, int yMax); + +IMF_EXPORT +void ImfHeaderDataWindow ( + const ImfHeader* hdr, int* xMin, int* yMin, int* xMax, int* yMax); + +IMF_EXPORT +void ImfHeaderSetPixelAspectRatio (ImfHeader* hdr, float pixelAspectRatio); + +IMF_EXPORT +float ImfHeaderPixelAspectRatio (const ImfHeader* hdr); + +IMF_EXPORT +void ImfHeaderSetScreenWindowCenter (ImfHeader* hdr, float x, float y); + +IMF_EXPORT +void ImfHeaderScreenWindowCenter (const ImfHeader* hdr, float* x, float* y); + +IMF_EXPORT +void ImfHeaderSetScreenWindowWidth (ImfHeader* hdr, float width); + +IMF_EXPORT +float ImfHeaderScreenWindowWidth (const ImfHeader* hdr); + +IMF_EXPORT +void ImfHeaderSetLineOrder (ImfHeader* hdr, int lineOrder); + +IMF_EXPORT +int ImfHeaderLineOrder (const ImfHeader* hdr); + +IMF_EXPORT +void ImfHeaderSetCompression (ImfHeader* hdr, int compression); + +IMF_EXPORT +int ImfHeaderCompression (const ImfHeader* hdr); + +IMF_EXPORT +int ImfHeaderSetIntAttribute (ImfHeader* hdr, const char name[], int value); + +IMF_EXPORT +int ImfHeaderIntAttribute (const ImfHeader* hdr, const char name[], int* value); + +IMF_EXPORT +int ImfHeaderSetFloatAttribute (ImfHeader* hdr, const char name[], float value); + +IMF_EXPORT +int +ImfHeaderSetDoubleAttribute (ImfHeader* hdr, const char name[], double value); + +IMF_EXPORT +int +ImfHeaderFloatAttribute (const ImfHeader* hdr, const char name[], float* value); + +IMF_EXPORT +int ImfHeaderDoubleAttribute ( + const ImfHeader* hdr, const char name[], double* value); + +IMF_EXPORT +int ImfHeaderSetStringAttribute ( + ImfHeader* hdr, const char name[], const char value[]); + +IMF_EXPORT +int ImfHeaderStringAttribute ( + const ImfHeader* hdr, const char name[], const char** value); + +IMF_EXPORT +int ImfHeaderSetBox2iAttribute ( + ImfHeader* hdr, const char name[], int xMin, int yMin, int xMax, int yMax); + +IMF_EXPORT +int ImfHeaderBox2iAttribute ( + const ImfHeader* hdr, + const char name[], + int* xMin, + int* yMin, + int* xMax, + int* yMax); + +IMF_EXPORT +int ImfHeaderSetBox2fAttribute ( + ImfHeader* hdr, + const char name[], + float xMin, + float yMin, + float xMax, + float yMax); + +IMF_EXPORT +int ImfHeaderBox2fAttribute ( + const ImfHeader* hdr, + const char name[], + float* xMin, + float* yMin, + float* xMax, + float* yMax); + +IMF_EXPORT +int ImfHeaderSetV2iAttribute (ImfHeader* hdr, const char name[], int x, int y); + +IMF_EXPORT +int +ImfHeaderV2iAttribute (const ImfHeader* hdr, const char name[], int* x, int* y); + +IMF_EXPORT +int +ImfHeaderSetV2fAttribute (ImfHeader* hdr, const char name[], float x, float y); + +IMF_EXPORT +int ImfHeaderV2fAttribute ( + const ImfHeader* hdr, const char name[], float* x, float* y); + +IMF_EXPORT +int ImfHeaderSetV3iAttribute ( + ImfHeader* hdr, const char name[], int x, int y, int z); + +IMF_EXPORT +int ImfHeaderV3iAttribute ( + const ImfHeader* hdr, const char name[], int* x, int* y, int* z); + +IMF_EXPORT +int ImfHeaderSetV3fAttribute ( + ImfHeader* hdr, const char name[], float x, float y, float z); + +IMF_EXPORT +int ImfHeaderV3fAttribute ( + const ImfHeader* hdr, const char name[], float* x, float* y, float* z); + +IMF_EXPORT +int ImfHeaderSetM33fAttribute ( + ImfHeader* hdr, const char name[], const float m[3][3]); + +IMF_EXPORT +int +ImfHeaderM33fAttribute (const ImfHeader* hdr, const char name[], float m[3][3]); + +IMF_EXPORT +int ImfHeaderSetM44fAttribute ( + ImfHeader* hdr, const char name[], const float m[4][4]); + +IMF_EXPORT +int +ImfHeaderM44fAttribute (const ImfHeader* hdr, const char name[], float m[4][4]); + +/* +** RGBA output file +*/ + +struct ImfOutputFile; +typedef struct ImfOutputFile ImfOutputFile; + +IMF_EXPORT +ImfOutputFile* +ImfOpenOutputFile (const char name[], const ImfHeader* hdr, int channels); + +IMF_EXPORT +int ImfCloseOutputFile (ImfOutputFile* out); + +IMF_EXPORT +int ImfOutputSetFrameBuffer ( + ImfOutputFile* out, const ImfRgba* base, size_t xStride, size_t yStride); + +IMF_EXPORT +int ImfOutputWritePixels (ImfOutputFile* out, int numScanLines); + +IMF_EXPORT +int ImfOutputCurrentScanLine (const ImfOutputFile* out); + +IMF_EXPORT +const ImfHeader* ImfOutputHeader (const ImfOutputFile* out); + +IMF_EXPORT +int ImfOutputChannels (const ImfOutputFile* out); + +/* +** Tiled RGBA output file +*/ + +struct ImfTiledOutputFile; +typedef struct ImfTiledOutputFile ImfTiledOutputFile; + +IMF_EXPORT +ImfTiledOutputFile* ImfOpenTiledOutputFile ( + const char name[], + const ImfHeader* hdr, + int channels, + int xSize, + int ySize, + int mode, + int rmode); + +IMF_EXPORT +int ImfCloseTiledOutputFile (ImfTiledOutputFile* out); + +IMF_EXPORT +int ImfTiledOutputSetFrameBuffer ( + ImfTiledOutputFile* out, + const ImfRgba* base, + size_t xStride, + size_t yStride); + +IMF_EXPORT +int ImfTiledOutputWriteTile ( + ImfTiledOutputFile* out, int dx, int dy, int lx, int ly); + +IMF_EXPORT +int ImfTiledOutputWriteTiles ( + ImfTiledOutputFile* out, + int dxMin, + int dxMax, + int dyMin, + int dyMax, + int lx, + int ly); + +IMF_EXPORT +const ImfHeader* ImfTiledOutputHeader (const ImfTiledOutputFile* out); + +IMF_EXPORT +int ImfTiledOutputChannels (const ImfTiledOutputFile* out); + +IMF_EXPORT +int ImfTiledOutputTileXSize (const ImfTiledOutputFile* out); + +IMF_EXPORT +int ImfTiledOutputTileYSize (const ImfTiledOutputFile* out); + +IMF_EXPORT +int ImfTiledOutputLevelMode (const ImfTiledOutputFile* out); + +IMF_EXPORT +int ImfTiledOutputLevelRoundingMode (const ImfTiledOutputFile* out); + +/* +** RGBA input file +*/ + +struct ImfInputFile; +typedef struct ImfInputFile ImfInputFile; + +IMF_EXPORT +ImfInputFile* ImfOpenInputFile (const char name[]); + +IMF_EXPORT +int ImfCloseInputFile (ImfInputFile* in); + +IMF_EXPORT +int ImfInputSetFrameBuffer ( + ImfInputFile* in, ImfRgba* base, size_t xStride, size_t yStride); + +IMF_EXPORT +int ImfInputReadPixels (ImfInputFile* in, int scanLine1, int scanLine2); + +IMF_EXPORT +const ImfHeader* ImfInputHeader (const ImfInputFile* in); + +IMF_EXPORT +int ImfInputChannels (const ImfInputFile* in); + +IMF_EXPORT +const char* ImfInputFileName (const ImfInputFile* in); + +/* +** Tiled RGBA input file +*/ + +struct ImfTiledInputFile; +typedef struct ImfTiledInputFile ImfTiledInputFile; + +IMF_EXPORT +ImfTiledInputFile* ImfOpenTiledInputFile (const char name[]); + +IMF_EXPORT +int ImfCloseTiledInputFile (ImfTiledInputFile* in); + +IMF_EXPORT +int ImfTiledInputSetFrameBuffer ( + ImfTiledInputFile* in, ImfRgba* base, size_t xStride, size_t yStride); + +IMF_EXPORT +int +ImfTiledInputReadTile (ImfTiledInputFile* in, int dx, int dy, int lx, int ly); + +IMF_EXPORT +int ImfTiledInputReadTiles ( + ImfTiledInputFile* in, + int dxMin, + int dxMax, + int dyMin, + int dyMax, + int lx, + int ly); + +IMF_EXPORT +const ImfHeader* ImfTiledInputHeader (const ImfTiledInputFile* in); + +IMF_EXPORT +int ImfTiledInputChannels (const ImfTiledInputFile* in); + +IMF_EXPORT +const char* ImfTiledInputFileName (const ImfTiledInputFile* in); + +IMF_EXPORT +int ImfTiledInputTileXSize (const ImfTiledInputFile* in); + +IMF_EXPORT +int ImfTiledInputTileYSize (const ImfTiledInputFile* in); + +IMF_EXPORT +int ImfTiledInputLevelMode (const ImfTiledInputFile* in); + +IMF_EXPORT +int ImfTiledInputLevelRoundingMode (const ImfTiledInputFile* in); + +/* +** Lookup tables +*/ + +struct ImfLut; +typedef struct ImfLut ImfLut; + +IMF_EXPORT +ImfLut* ImfNewRound12logLut (int channels); + +IMF_EXPORT +ImfLut* ImfNewRoundNBitLut (unsigned int n, int channels); + +IMF_EXPORT +void ImfDeleteLut (ImfLut* lut); + +IMF_EXPORT +void ImfApplyLut (ImfLut* lut, ImfRgba* data, int nData, int stride); +/* +** Most recent error message +*/ + +IMF_EXPORT +const char* ImfErrorMessage (void); + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +#endif diff --git a/third_party/tlRender-install-Release/include/OpenEXR/ImfChannelList.h b/third_party/tlRender-install-Release/include/OpenEXR/ImfChannelList.h new file mode 100644 index 00000000..61757461 --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenEXR/ImfChannelList.h @@ -0,0 +1,410 @@ +// +// SPDX-License-Identifier: BSD-3-Clause +// Copyright (c) Contributors to the OpenEXR Project. +// + +#ifndef INCLUDED_IMF_CHANNEL_LIST_H +#define INCLUDED_IMF_CHANNEL_LIST_H + +//----------------------------------------------------------------------------- +// +// class Channel +// class ChannelList +// +//----------------------------------------------------------------------------- + +#include "ImfForward.h" + +#include "ImfName.h" +#include "ImfPixelType.h" + +#include +#include +#include + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER + +struct IMF_EXPORT_TYPE Channel +{ + //------------------------------ + // Data type; see ImfPixelType.h + //------------------------------ + + PixelType type; + + //-------------------------------------------- + // Subsampling: pixel (x, y) is present in the + // channel only if + // + // x % xSampling == 0 && y % ySampling == 0 + // + //-------------------------------------------- + + int xSampling; + int ySampling; + + //-------------------------------------------------------------- + // Hint to lossy compression methods that indicates whether + // human perception of the quantity represented by this channel + // is closer to linear or closer to logarithmic. Compression + // methods may optimize image quality by adjusting pixel data + // quantization according to this hint. + // For example, perception of red, green, blue and luminance is + // approximately logarithmic; the difference between 0.1 and 0.2 + // is perceived to be roughly the same as the difference between + // 1.0 and 2.0. Perception of chroma coordinates tends to be + // closer to linear than logarithmic; the difference between 0.1 + // and 0.2 is perceived to be roughly the same as the difference + // between 1.0 and 1.1. + //-------------------------------------------------------------- + + bool pLinear; + + //------------ + // Constructor + //------------ + + IMF_EXPORT + Channel ( + PixelType type = HALF, + int xSampling = 1, + int ySampling = 1, + bool pLinear = false); + + //------------ + // Operator == + //------------ + + IMF_EXPORT + bool operator== (const Channel& other) const; +}; + +class IMF_EXPORT_TYPE ChannelList +{ +public: + //-------------- + // Add a channel + //-------------- + + IMF_EXPORT + void insert (const char name[], const Channel& channel); + + IMF_EXPORT + void insert (const std::string& name, const Channel& channel); + + //------------------------------------------------------------------ + // Access to existing channels: + // + // [n] Returns a reference to the channel with name n. + // If no channel with name n exists, an IEX_NAMESPACE::ArgExc + // is thrown. + // + // findChannel(n) Returns a pointer to the channel with name n, + // or 0 if no channel with name n exists. + // + //------------------------------------------------------------------ + + IMF_EXPORT + Channel& operator[] (const char name[]); + IMF_EXPORT + const Channel& operator[] (const char name[]) const; + + IMF_EXPORT + Channel& operator[] (const std::string& name); + IMF_EXPORT + const Channel& operator[] (const std::string& name) const; + + IMF_EXPORT + Channel* findChannel (const char name[]); + IMF_EXPORT + const Channel* findChannel (const char name[]) const; + + IMF_EXPORT + Channel* findChannel (const std::string& name); + IMF_EXPORT + const Channel* findChannel (const std::string& name) const; + + //------------------------------------------- + // Iterator-style access to existing channels + //------------------------------------------- + + typedef std::map ChannelMap; + + class Iterator; + class ConstIterator; + + IMF_EXPORT + Iterator begin (); + IMF_EXPORT + ConstIterator begin () const; + + IMF_EXPORT + Iterator end (); + IMF_EXPORT + ConstIterator end () const; + + IMF_EXPORT + Iterator find (const char name[]); + IMF_EXPORT + ConstIterator find (const char name[]) const; + + IMF_EXPORT + Iterator find (const std::string& name); + IMF_EXPORT + ConstIterator find (const std::string& name) const; + + //----------------------------------------------------------------- + // Support for image layers: + // + // In an image file with many channels it is sometimes useful to + // group the channels into "layers", that is, into sets of channels + // that logically belong together. Grouping channels into layers + // is done using a naming convention: channel C in layer L is + // called "L.C". + // + // For example, a computer graphic image may contain separate + // R, G and B channels for light that originated at each of + // several different virtual light sources. The channels in + // this image might be called "light1.R", "light1.G", "light1.B", + // "light2.R", "light2.G", "light2.B", etc. + // + // Note that this naming convention allows layers to be nested; + // for example, "light1.specular.R" identifies the "R" channel + // in the "specular" sub-layer of layer "light1". + // + // Channel names that don't contain a "." or that contain a + // "." only at the beginning or at the end are not considered + // to be part of any layer. + // + // layers(lns) sorts the channels in this ChannelList + // into layers and stores the names of + // all layers, sorted alphabetically, + // into string set lns. + // + // channelsInLayer(ln,f,l) stores a pair of iterators in f and l + // such that the loop + // + // for (ConstIterator i = f; i != l; ++i) + // ... + // + // iterates over all channels in layer ln. + // channelsInLayer (ln, l, p) calls + // channelsWithPrefix (ln + ".", l, p). + // + //----------------------------------------------------------------- + + IMF_EXPORT + void layers (std::set& layerNames) const; + + IMF_EXPORT + void channelsInLayer ( + const std::string& layerName, Iterator& first, Iterator& last); + + IMF_EXPORT + void channelsInLayer ( + const std::string& layerName, + ConstIterator& first, + ConstIterator& last) const; + + //------------------------------------------------------------------- + // Find all channels whose name begins with a given prefix: + // + // channelsWithPrefix(p,f,l) stores a pair of iterators in f and l + // such that the following loop iterates over all channels whose name + // begins with string p: + // + // for (ConstIterator i = f; i != l; ++i) + // ... + // + //------------------------------------------------------------------- + + IMF_EXPORT + void + channelsWithPrefix (const char prefix[], Iterator& first, Iterator& last); + + IMF_EXPORT + void channelsWithPrefix ( + const char prefix[], ConstIterator& first, ConstIterator& last) const; + + IMF_EXPORT + void channelsWithPrefix ( + const std::string& prefix, Iterator& first, Iterator& last); + + IMF_EXPORT + void channelsWithPrefix ( + const std::string& prefix, + ConstIterator& first, + ConstIterator& last) const; + + //------------ + // Operator == + //------------ + + IMF_EXPORT + bool operator== (const ChannelList& other) const; + +private: + ChannelMap _map; +}; + +//---------- +// Iterators +//---------- + +class IMF_EXPORT_TYPE ChannelList::Iterator +{ +public: + IMF_EXPORT + Iterator (); + IMF_EXPORT + Iterator (const ChannelList::ChannelMap::iterator& i); + + IMF_EXPORT + Iterator& operator++ (); + IMF_EXPORT + Iterator operator++ (int); + + IMF_EXPORT + const char* name () const; + IMF_EXPORT + Channel& channel () const; + +private: + friend class ChannelList::ConstIterator; + + ChannelList::ChannelMap::iterator _i; +}; + +class IMF_EXPORT_TYPE ChannelList::ConstIterator +{ +public: + IMF_EXPORT + ConstIterator (); + IMF_EXPORT + ConstIterator (const ChannelList::ChannelMap::const_iterator& i); + IMF_EXPORT + ConstIterator (const ChannelList::Iterator& other); + + IMF_EXPORT + ConstIterator& operator++ (); + IMF_EXPORT + ConstIterator operator++ (int); + + IMF_EXPORT + const char* name () const; + IMF_EXPORT + const Channel& channel () const; + +private: + friend bool operator== (const ConstIterator&, const ConstIterator&); + friend bool operator!= (const ConstIterator&, const ConstIterator&); + + ChannelList::ChannelMap::const_iterator _i; +}; + +//----------------- +// Inline Functions +//----------------- + +inline ChannelList::Iterator::Iterator () : _i () +{ + // empty +} + +inline ChannelList::Iterator::Iterator ( + const ChannelList::ChannelMap::iterator& i) + : _i (i) +{ + // empty +} + +inline ChannelList::Iterator& +ChannelList::Iterator::operator++ () +{ + ++_i; + return *this; +} + +inline ChannelList::Iterator +ChannelList::Iterator::operator++ (int) +{ + Iterator tmp = *this; + ++_i; + return tmp; +} + +inline const char* +ChannelList::Iterator::name () const +{ + return *_i->first; +} + +inline Channel& +ChannelList::Iterator::channel () const +{ + return _i->second; +} + +inline ChannelList::ConstIterator::ConstIterator () : _i () +{ + // empty +} + +inline ChannelList::ConstIterator::ConstIterator ( + const ChannelList::ChannelMap::const_iterator& i) + : _i (i) +{ + // empty +} + +inline ChannelList::ConstIterator::ConstIterator ( + const ChannelList::Iterator& other) + : _i (other._i) +{ + // empty +} + +inline ChannelList::ConstIterator& +ChannelList::ConstIterator::operator++ () +{ + ++_i; + return *this; +} + +inline ChannelList::ConstIterator +ChannelList::ConstIterator::operator++ (int) +{ + ConstIterator tmp = *this; + ++_i; + return tmp; +} + +inline const char* +ChannelList::ConstIterator::name () const +{ + return *_i->first; +} + +inline const Channel& +ChannelList::ConstIterator::channel () const +{ + return _i->second; +} + +inline bool +operator== ( + const ChannelList::ConstIterator& x, const ChannelList::ConstIterator& y) +{ + return x._i == y._i; +} + +inline bool +operator!= ( + const ChannelList::ConstIterator& x, const ChannelList::ConstIterator& y) +{ + return !(x == y); +} + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT + +#endif diff --git a/third_party/tlRender-install-Release/include/OpenEXR/ImfChannelListAttribute.h b/third_party/tlRender-install-Release/include/OpenEXR/ImfChannelListAttribute.h new file mode 100644 index 00000000..98a8054d --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenEXR/ImfChannelListAttribute.h @@ -0,0 +1,33 @@ +// +// SPDX-License-Identifier: BSD-3-Clause +// Copyright (c) Contributors to the OpenEXR Project. +// + +#ifndef INCLUDED_IMF_CHANNEL_LIST_ATTRIBUTE_H +#define INCLUDED_IMF_CHANNEL_LIST_ATTRIBUTE_H + +//----------------------------------------------------------------------------- +// +// class ChannelListAttribute +// +//----------------------------------------------------------------------------- + +#include "ImfExport.h" +#include "ImfNamespace.h" + +#include "ImfAttribute.h" +#include "ImfChannelList.h" + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER + +typedef TypedAttribute + ChannelListAttribute; + +#ifndef COMPILING_IMF_CHANNEL_LIST_ATTRIBUTE +extern template class IMF_EXPORT_EXTERN_TEMPLATE + TypedAttribute; +#endif + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT + +#endif diff --git a/third_party/tlRender-install-Release/include/OpenEXR/ImfCheckFile.h b/third_party/tlRender-install-Release/include/OpenEXR/ImfCheckFile.h new file mode 100644 index 00000000..57afa299 --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenEXR/ImfCheckFile.h @@ -0,0 +1,50 @@ +// SPDX-License-Identifier: BSD-3-Clause +// Copyright (c) Contributors to the OpenEXR Project. + +#ifndef INCLUDED_IMF_CHECKFILE_H +#define INCLUDED_IMF_CHECKFILE_H + +#include "ImfNamespace.h" +#include "ImfUtilExport.h" + +#include + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER + +// +// attempt to read the given file as an OpenEXR, using various OpenEXR read paths. +// This can be used to validate correctness of the library, when running the library +// with a sanitizer or memory checker, as well as checking that a file is a correct OpenEXR +// +// returns true if the file reads correctly using expected API calls, or false +// if an exception was thrown that indicates the file is invalid +// +// if reduceMemory is true, will avoid tests or inputs that are known to +// take large amounts of memory. This may hide errors within the file or library. +// +// if reduceTime is true and an error is found within the file, then future tests are reduced for speed. +// This may hide errors within the library. +// +// if runCoreCheck is true, only uses the OpenEXRCore (C) API, otherwise uses the OpenEXR (C++) API +// + +IMFUTIL_EXPORT bool checkOpenEXRFile ( + const char* fileName, + bool reduceMemory = false, + bool reduceTime = false, + bool runCoreCheck = false); + +// +// overloaded version of checkOpenEXRFile that takes a pointer to in-memory data +// + +IMFUTIL_EXPORT bool checkOpenEXRFile ( + const char* data, + size_t numBytes, + bool reduceMemory = false, + bool reduceTime = false, + bool runCoreCheck = false); + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT + +#endif diff --git a/third_party/tlRender-install-Release/include/OpenEXR/ImfChromaticities.h b/third_party/tlRender-install-Release/include/OpenEXR/ImfChromaticities.h new file mode 100644 index 00000000..ddea3e47 --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenEXR/ImfChromaticities.h @@ -0,0 +1,107 @@ +// +// SPDX-License-Identifier: BSD-3-Clause +// Copyright (c) Contributors to the OpenEXR Project. +// + +#ifndef INCLUDED_IMF_CHROMATICITIES_H +#define INCLUDED_IMF_CHROMATICITIES_H + +//----------------------------------------------------------------------------- +// +// CIE (x,y) chromaticities, and conversions between +// RGB triples and CIE XYZ tristimulus values. +// +//----------------------------------------------------------------------------- + +#include "ImfExport.h" +#include "ImfNamespace.h" + +#include "ImathMatrix.h" +#include "ImathVec.h" + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER + +struct IMF_EXPORT_TYPE Chromaticities +{ + //----------------------------------------------- + // The CIE x and y coordinates of the RGB triples + // (1,0,0), (0,1,0), (0,0,1) and (1,1,1). + //----------------------------------------------- + + IMATH_NAMESPACE::V2f red; + IMATH_NAMESPACE::V2f green; + IMATH_NAMESPACE::V2f blue; + IMATH_NAMESPACE::V2f white; + + //-------------------------------------------- + // Default constructor produces chromaticities + // according to Rec. ITU-R BT.709-3 + //-------------------------------------------- + + IMF_EXPORT + Chromaticities ( + const IMATH_NAMESPACE::V2f& red = + IMATH_NAMESPACE::V2f (0.6400f, 0.3300f), + const IMATH_NAMESPACE::V2f& green = + IMATH_NAMESPACE::V2f (0.3000f, 0.6000f), + const IMATH_NAMESPACE::V2f& blue = + IMATH_NAMESPACE::V2f (0.1500f, 0.0600f), + const IMATH_NAMESPACE::V2f& white = + IMATH_NAMESPACE::V2f (0.3127f, 0.3290f)); + + //--------- + // Equality + //--------- + + IMF_EXPORT + bool operator== (const Chromaticities& v) const; + IMF_EXPORT + bool operator!= (const Chromaticities& v) const; +}; + +// +// Conversions between RGB and CIE XYZ +// +// RGB to XYZ: +// +// Given a set of chromaticities, c, and the luminance, Y, of the RGB +// triple (1,1,1), or "white", RGBtoXYZ(c,Y) computes a matrix, M, so +// that multiplying an RGB value, v, with M produces an equivalent +// XYZ value, w. (w == v * M) +// +// If we define that +// +// (Xr, Yr, Zr) == (1, 0, 0) * M +// (Xg, Yg, Zg) == (0, 1, 0) * M +// (Xb, Yb, Zb) == (0, 0, 1) * M +// (Xw, Yw, Zw) == (1, 1, 1) * M, +// +// then the following statements are true: +// +// Xr / (Xr + Yr + Zr) == c.red.x +// Yr / (Xr + Yr + Zr) == c.red.y +// +// Xg / (Xg + Yg + Zg) == c.green.x +// Yg / (Xg + Yg + Zg) == c.green.y +// +// Xb / (Xb + Yb + Zb) == c.blue.x +// Yb / (Xb + Yb + Zb) == c.blue.y +// +// Xw / (Xw + Yw + Zw) == c.white.x +// Yw / (Xw + Yw + Zw) == c.white.y +// +// Yw == Y. +// +// XYZ to RGB: +// +// XYZtoRGB(c,Y) returns RGBtoXYZ(c,Y).inverse(). +// + +IMF_EXPORT IMATH_NAMESPACE::M44f + RGBtoXYZ (const Chromaticities& chroma, float Y); +IMF_EXPORT IMATH_NAMESPACE::M44f + XYZtoRGB (const Chromaticities& chroma, float Y); + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT + +#endif diff --git a/third_party/tlRender-install-Release/include/OpenEXR/ImfChromaticitiesAttribute.h b/third_party/tlRender-install-Release/include/OpenEXR/ImfChromaticitiesAttribute.h new file mode 100644 index 00000000..78d16797 --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenEXR/ImfChromaticitiesAttribute.h @@ -0,0 +1,30 @@ +// +// SPDX-License-Identifier: BSD-3-Clause +// Copyright (c) Contributors to the OpenEXR Project. +// + +#ifndef INCLUDED_IMF_CHROMATICITIES_ATTRIBUTE_H +#define INCLUDED_IMF_CHROMATICITIES_ATTRIBUTE_H + +//----------------------------------------------------------------------------- +// +// class ChromaticitiesAttribute +// +//----------------------------------------------------------------------------- + +#include "ImfAttribute.h" +#include "ImfChromaticities.h" + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER + +typedef TypedAttribute + ChromaticitiesAttribute; + +#ifndef COMPILING_IMF_CHROMATICITIES_ATTRIBUTE +extern template class IMF_EXPORT_EXTERN_TEMPLATE + TypedAttribute; +#endif + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT + +#endif diff --git a/third_party/tlRender-install-Release/include/OpenEXR/ImfCompositeDeepScanLine.h b/third_party/tlRender-install-Release/include/OpenEXR/ImfCompositeDeepScanLine.h new file mode 100644 index 00000000..fa5a1647 --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenEXR/ImfCompositeDeepScanLine.h @@ -0,0 +1,135 @@ +// +// SPDX-License-Identifier: BSD-3-Clause +// Copyright (c) Weta Digital, Ltd and Contributors to the OpenEXR Project. +// + +#ifndef INCLUDED_IMF_COMPOSITEDEEPSCANLINE_H +#define INCLUDED_IMF_COMPOSITEDEEPSCANLINE_H + +//----------------------------------------------------------------------------- +// +// Class to composite deep samples into a frame buffer +// Initialise with a deep input part or deep inputfile +// (also supports multiple files and parts, and will +// composite them together, as long as their sizes and channelmaps agree) +// +// Then call setFrameBuffer, and readPixels, exactly as for reading +// regular scanline images. +// +// Restrictions - source file(s) must contain at least Z and alpha channels +// - if multiple files/parts are provided, sizes must match +// - all requested channels will be composited as premultiplied +// - only half and float channels can be requested +// +// This object should not be considered threadsafe +// +// The default compositing engine will give spurious results with overlapping +// volumetric samples - you may derive from DeepCompositing class, override the +// sort_pixel() and composite_pixel() functions, and pass an instance to +// setCompositing(). +// +//----------------------------------------------------------------------------- + +#include "ImfForward.h" + +#include + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER + +class IMF_EXPORT_TYPE CompositeDeepScanLine +{ +public: + IMF_EXPORT + CompositeDeepScanLine (); + IMF_EXPORT + virtual ~CompositeDeepScanLine (); + + /// set the source data as a part + ///@note all parts must remain valid until after last interaction with DeepComp + IMF_EXPORT + void addSource (DeepScanLineInputPart* part); + + /// set the source data as a file + ///@note all file must remain valid until after last interaction with DeepComp + IMF_EXPORT + void addSource (DeepScanLineInputFile* file); + + ///////////////////////////////////////// + // + // set the frame buffer for output values + // the buffers specified must be large enough + // to handle the dataWindow() + // + ///////////////////////////////////////// + IMF_EXPORT + void setFrameBuffer (const FrameBuffer& fr); + + ///////////////////////////////////////// + // + // retrieve frameBuffer + // + //////////////////////////////////////// + IMF_EXPORT + const FrameBuffer& frameBuffer () const; + + ////////////////////////////////////////////////// + // + // read scanlines start to end from the source(s) + // storing the result in the frame buffer provided + // + ////////////////////////////////////////////////// + + IMF_EXPORT + void readPixels (int start, int end); + + IMF_EXPORT + int sources () const; // return number of sources + + ///////////////////////////////////////////////// + // + // retrieve the datawindow + // If multiple parts are specified, this will + // be the union of the dataWindow of all parts + // + //////////////////////////////////////////////// + + IMF_EXPORT + const IMATH_NAMESPACE::Box2i& dataWindow () const; + + // + // override default sorting/compositing operation + // (otherwise an instance of the base class will be used) + // + + IMF_EXPORT + void setCompositing (DeepCompositing*); + + struct IMF_HIDDEN Data; + + // + // set the maximum number of samples that will be composited. + // If a single scanline has more samples, readPixels will throw + // an exception. This mechanism prevents the library allocating + // excessive memory to composite deep scanline images. + // A value of 0 will cause deep compositing to be disabled entirely + // A negative value disables the limit, allowing images with + // arbitrarily large sample counts to be composited + // + IMF_EXPORT + static void setMaximumSampleCount (int64_t sampleCount); + + IMF_EXPORT + static int64_t getMaximumSampleCount (); + +private: + struct Data* _Data; + + CompositeDeepScanLine (const CompositeDeepScanLine&) = delete; + CompositeDeepScanLine& operator= (const CompositeDeepScanLine&) = delete; + CompositeDeepScanLine (CompositeDeepScanLine&&) = delete; + CompositeDeepScanLine& operator= (CompositeDeepScanLine&&) = delete; +}; + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT + +#endif diff --git a/third_party/tlRender-install-Release/include/OpenEXR/ImfCompression.h b/third_party/tlRender-install-Release/include/OpenEXR/ImfCompression.h new file mode 100644 index 00000000..2e148ff6 --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenEXR/ImfCompression.h @@ -0,0 +1,93 @@ +// +// SPDX-License-Identifier: BSD-3-Clause +// Copyright (c) Contributors to the OpenEXR Project. +// + +#ifndef INCLUDED_IMF_COMPRESSION_H +#define INCLUDED_IMF_COMPRESSION_H + +//----------------------------------------------------------------------------- +// +// enum Compression +// +// This file enumerates available compression methods and defines a simple API +// to query them. +// +// ---------------------------------------------------------------------------- + +#include "ImfForward.h" +#include + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER + +// All available compression methods. +// NOTE: Must be extended to add a new codec. Ids must be continuous. +enum IMF_EXPORT_ENUM Compression +{ + NO_COMPRESSION = 0, // no compression. + + RLE_COMPRESSION = 1, // run length encoding. + + ZIPS_COMPRESSION = 2, // zlib compression, one scan line at a time. + + ZIP_COMPRESSION = 3, // zlib compression, in blocks of 16 scan lines. + + PIZ_COMPRESSION = 4, // piz-based wavelet compression. + + PXR24_COMPRESSION = 5, // lossy 24-bit float compression + + B44_COMPRESSION = 6, // lossy 4-by-4 pixel block compression, + // fixed compression rate. + + B44A_COMPRESSION = 7, // lossy 4-by-4 pixel block compression, + // flat fields are compressed more. + + DWAA_COMPRESSION = 8, // lossy DCT based compression, in blocks + // of 32 scanlines. More efficient for partial + // buffer access. + + DWAB_COMPRESSION = 9, // lossy DCT based compression, in blocks + // of 256 scanlines. More efficient space + // wise and faster to decode full frames + // than DWAA_COMPRESSION. + + NUM_COMPRESSION_METHODS // number of different compression methods. +}; + +/// Returns a codec ID's short name (lowercase). +IMF_EXPORT void getCompressionNameFromId (Compression id, std::string& name); + +/// Returns a codec ID's short description (lowercase). +IMF_EXPORT void +getCompressionDescriptionFromId (Compression id, std::string& desc); + +/// Returns the codec name's ID, NUM_COMPRESSION_METHODS if not found. +IMF_EXPORT void +getCompressionIdFromName (const std::string& name, Compression& id); + +/// Return true if a compression id exists. +IMF_EXPORT bool isValidCompression (int id); + +/// Return a string enumerating all compression names, with a custom separator. +IMF_EXPORT void +getCompressionNamesString (const std::string& separator, std::string& in); + +/// Return the number of scan lines expected by a given compression method. +IMF_EXPORT int getCompressionNumScanlines (Compression id); + +/// Return true is the compression method exists and doesn't preserves data integrity. +IMF_EXPORT bool isLossyCompression (Compression id); + +/// Return true is the compression method exists and supports deep data. +IMF_EXPORT bool isValidDeepCompression (Compression id); + +/// Controls the default zip compression level used. Zip is used for +/// the 2 zip levels as well as some modes of the DWAA/B compression. +IMF_EXPORT void setDefaultZipCompressionLevel (int level); + +/// Controls the default quality level for the DWA lossy compression +IMF_EXPORT void setDefaultDwaCompressionLevel (float level); + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT + +#endif diff --git a/third_party/tlRender-install-Release/include/OpenEXR/ImfCompressionAttribute.h b/third_party/tlRender-install-Release/include/OpenEXR/ImfCompressionAttribute.h new file mode 100644 index 00000000..c637050c --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenEXR/ImfCompressionAttribute.h @@ -0,0 +1,30 @@ +// +// SPDX-License-Identifier: BSD-3-Clause +// Copyright (c) Contributors to the OpenEXR Project. +// + +#ifndef INCLUDED_IMF_COMPRESSION_ATTRIBUTE_H +#define INCLUDED_IMF_COMPRESSION_ATTRIBUTE_H + +//----------------------------------------------------------------------------- +// +// class CompressionAttribute +// +//----------------------------------------------------------------------------- + +#include "ImfAttribute.h" +#include "ImfCompression.h" + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER + +typedef TypedAttribute + CompressionAttribute; + +#ifndef COMPILING_IMF_COMPRESSION_ATTRIBUTE +extern template class IMF_EXPORT_EXTERN_TEMPLATE + TypedAttribute; +#endif + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT + +#endif diff --git a/third_party/tlRender-install-Release/include/OpenEXR/ImfCompressor.h b/third_party/tlRender-install-Release/include/OpenEXR/ImfCompressor.h new file mode 100644 index 00000000..5080f839 --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenEXR/ImfCompressor.h @@ -0,0 +1,264 @@ +// +// SPDX-License-Identifier: BSD-3-Clause +// Copyright (c) Contributors to the OpenEXR Project. +// + +#ifndef INCLUDED_IMF_COMPRESSOR_H +#define INCLUDED_IMF_COMPRESSOR_H + +//----------------------------------------------------------------------------- +// +// class Compressor +// +//----------------------------------------------------------------------------- + +#include "ImfForward.h" + +#include "ImfCompression.h" + +#include "ImfContext.h" + +#include "openexr_compression.h" + +#include + +#include +#include + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER + +class IMF_EXPORT_TYPE Compressor +{ +public: + //--------------------------------------------- + // Constructor -- hdr is the header of the file + // that will be compressed or uncompressed + //--------------------------------------------- + + IMF_EXPORT + Compressor (const Header& hdr, + exr_compression_t compression_type, + size_t maxScanLineSize, + int scanlines = -1); + + //----------- + // Destructor + //----------- + + IMF_EXPORT + virtual ~Compressor (); + + Compressor (const Compressor& other) = delete; + Compressor& operator= (const Compressor& other) = delete; + Compressor (Compressor&& other) = delete; + Compressor& operator= (Compressor&& other) = delete; + + //---------------------------------------------- + // Maximum number of scan lines processed by + // a single call to compress() and uncompress(). + //---------------------------------------------- + + IMF_EXPORT + virtual int numScanLines () const; + + //-------------------------------------------- + // Format of the pixel data read and written + // by the compress() and uncompress() methods. + // The default implementation of format() + // returns XDR. + //-------------------------------------------- + + enum IMF_EXPORT_ENUM Format + { + NATIVE, // the machine's native format + XDR // Xdr format + }; + + IMF_EXPORT + virtual Format format () const; + + //---------------------------- + // Access to the file's header + //---------------------------- + + const Header& header () const { return _header; } + + //------------------------------------------------------------------------- + // Compress an array of bytes that represents the contents of up to + // numScanLines() scan lines: + // + // inPtr Input buffer (uncompressed data). + // + // inSize Number of bytes in the input buffer + // + // minY Minimum y coordinate of the scan lines to + // be compressed + // + // outPtr Pointer to output buffer + // + // return value Size of compressed data in output buffer + // + // Arrangement of uncompressed pixel data in the input buffer: + // + // Before calling + // + // compress (buf, size, minY, ...); + // + // the InputFile::writePixels() method gathers pixel data from the + // frame buffer, fb, and places them in buffer buf, like this: + // + // char *endOfBuf = buf; + // + // for (int y = minY; + // y <= min (minY + numScanLines() - 1, header().dataWindow().max.y); + // ++y) + // { + // for (ChannelList::ConstIterator c = header().channels().begin(); + // c != header().channels().end(); + // ++c) + // { + // if (modp (y, c.channel().ySampling) != 0) + // continue; + // + // for (int x = header().dataWindow().min.x; + // x <= header().dataWindow().max.x; + // ++x) + // { + // if (modp (x, c.channel().xSampling) != 0) + // continue; + // + // Xdr::write (endOfBuf, fb.pixel (c, x, y)); + // } + // } + // } + // + // int size = endOfBuf - buf; + // + //------------------------------------------------------------------------- + + virtual int + compress (const char* inPtr, int inSize, int minY, const char*& outPtr); + + IMF_EXPORT + virtual int compressTile ( + const char* inPtr, + int inSize, + IMATH_NAMESPACE::Box2i range, + const char*& outPtr); + + //------------------------------------------------------------------------- + // Uncompress an array of bytes that has been compressed by compress(): + // + // inPtr Input buffer (compressed data). + // + // inSize Number of bytes in the input buffer + // + // minY Minimum y coordinate of the scan lines to + // be uncompressed + // + // outPtr Pointer to output buffer + // + // return value Size of uncompressed data in output buffer + // + //------------------------------------------------------------------------- + + virtual int uncompress ( + const char* inPtr, int inSize, int minY, const char*& outPtr); + + IMF_EXPORT + virtual int uncompressTile ( + const char* inPtr, + int inSize, + IMATH_NAMESPACE::Box2i range, + const char*& outPtr); + + void setExpectedSize (size_t sz) { _expectedSize = sz; } + void setTileLevel (int lx, int ly) { _levelX = lx; _levelY = ly; } + + exr_storage_t storageType () const { return _store_type; } + void setStorageType (exr_storage_t st) { _store_type = st; } + +protected: + Context _ctxt; + const Header& _header; + + size_t _maxScanLineSize = 0; + int _numScanLines = -1; + + exr_compression_t _comp_type; + exr_storage_t _store_type; + + exr_decode_pipeline_t _decoder = EXR_DECODE_PIPELINE_INITIALIZER; + exr_encode_pipeline_t _encoder = EXR_ENCODE_PIPELINE_INITIALIZER; + bool _decoder_init = false; + bool _encoder_init = false; + std::unique_ptr _memory_buffer; + uint64_t _buf_sz = 0; + size_t _expectedSize = 0; + + int _levelX = 0; + int _levelY = 0; + + uint64_t runEncodeStep ( + const char* inPtr, + int inSize, + IMATH_NAMESPACE::Box2i range, + const char*& outPtr); + uint64_t runDecodeStep ( + const char* inPtr, + int inSize, + IMATH_NAMESPACE::Box2i range, + const char*& outPtr); +}; + +//----------------------------------------------------------------- +// Construct a Compressor for compression type c: +// +// maxScanLineSize Maximum number of bytes per uncompressed +// scan line. +// +// header Header of the input or output file whose +// pixels will be compressed or uncompressed. +// +// return value A pointer to a new Compressor object (it +// is the caller's responsibility to delete +// the object), or 0 (if c is NO_COMPRESSION). +// +//----------------------------------------------------------------- + +IMF_EXPORT +Compressor* +newCompressor (Compression c, size_t maxScanLineSize, const Header& hdr); + +//----------------------------------------------------------------- +// Construct a Compressor for compression type c for a tiled image: +// +// tileLineSize Maximum number of bytes per uncompressed +// line in a tile. +// +// numTileLines Maximum number of lines in a tile. +// +// header Header of the input or output file whose +// pixels will be compressed or uncompressed. +// +// return value A pointer to a new Compressor object (it +// is the caller's responsibility to delete +// the object), or 0 (if c is NO_COMPRESSION). +// +//----------------------------------------------------------------- + +IMF_EXPORT +Compressor* newTileCompressor ( + Compression c, size_t tileLineSize, size_t numTileLines, const Header& hdr); + +//----------------------------------------------------------------- +// Return the maximum number of scanlines in each chunk +// of a scanline image using the given compression scheme +//----------------------------------------------------------------- + +IMF_EXPORT +int numLinesInBuffer (Compression comp); + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT + +#endif diff --git a/third_party/tlRender-install-Release/include/OpenEXR/ImfContext.h b/third_party/tlRender-install-Release/include/OpenEXR/ImfContext.h new file mode 100644 index 00000000..b9d18660 --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenEXR/ImfContext.h @@ -0,0 +1,98 @@ +// +// SPDX-License-Identifier: BSD-3-Clause +// Copyright (c) Contributors to the OpenEXR Project. +// + +#ifndef INCLUDED_IMF_CONTEXT_H +#define INCLUDED_IMF_CONTEXT_H + +#include "ImfContextInit.h" + +#include "ImfHeader.h" + +#include + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER + +/// \brief Context provides a wrapper around the Core library context +/// object +/// +/// This is the main vehicle by which the core library provides +/// concurrent behavior, avoiding globals, and allowing each part of +/// any application to use its own custom allocators or any other +/// feature they prefer. +/// +/// The context is logically comprised of referencing a file plus the +/// additional helper utilities needed for doing so, and so should be +/// the main entrypoint for querying any of the metadata for all the +/// component parts of the file, along with the global header +/// information. +class IMF_EXPORT_TYPE Context +{ +public: + struct read_mode_t { explicit read_mode_t() = default; }; + struct temp_mode_t { explicit temp_mode_t() = default; }; + struct write_mode_t { explicit write_mode_t() = default; }; + + Context (); + + Context (const char* filename, + const ContextInitializer& ctxtinit, + read_mode_t t); + + Context (const char* filename, + const ContextInitializer& ctxtinit, + temp_mode_t t); + + Context (const char* filename, + const ContextInitializer& ctxtinit, + write_mode_t t); + + operator exr_context_t () const noexcept { return *(_ctxt); } + + IMF_EXPORT void setLongNameSupport (bool onoff); + + // generic file values + + IMF_EXPORT const char* fileName () const; + + IMF_EXPORT int version () const; + + IMF_EXPORT int partCount () const; + + IMF_EXPORT exr_storage_t storage (int partidx) const; + + // access to commonly used attributes + + IMF_EXPORT exr_attr_box2i_t dataWindow (int partidx) const; + + IMF_EXPORT const exr_attr_chlist_t* channels (int partidx) const; + IMF_EXPORT bool hasChannel (int partidx, const char* name) const; + IMF_EXPORT const exr_attr_chlist_entry_t* findChannel (int partidx, const char* name) const; + + IMF_EXPORT exr_lineorder_t lineOrder (int partidx) const; + + // access to generic attributes + + IMF_EXPORT int attrCount (int partidx) const; + + IMF_EXPORT const exr_attribute_t* getAttr (int partidx, int attridx) const; + IMF_EXPORT const exr_attribute_t* + getAttr (int partidx, const char* name) const; + + // C++ header interface support + + IMF_EXPORT Header header (int partnum) const; + IMF_EXPORT void addHeader (int partnum, const Header &h); + + // validation and things + + IMF_EXPORT bool chunkTableValid (int partidx) const; + +private: + std::shared_ptr _ctxt; +}; // class Context + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT + +#endif // INCLUDED_IMF_CONTEXT_H diff --git a/third_party/tlRender-install-Release/include/OpenEXR/ImfContextInit.h b/third_party/tlRender-install-Release/include/OpenEXR/ImfContextInit.h new file mode 100644 index 00000000..ba7abff4 --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenEXR/ImfContextInit.h @@ -0,0 +1,148 @@ +// +// SPDX-License-Identifier: BSD-3-Clause +// Copyright (c) Contributors to the OpenEXR Project. +// + +#ifndef INCLUDED_IMF_CONTEXT_INIT_H +#define INCLUDED_IMF_CONTEXT_INIT_H + +#include "ImfForward.h" + +#include "openexr.h" + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER + +/// @brief ContextInitializer provides a basic type +/// to initialize a Context with. +/// +/// A context fundamentally represents an EXR file of some sort +/// (reading a file, reading a stream, etc.) +class IMF_EXPORT_TYPE ContextInitializer +{ + enum class ContextFileType + { + READ, + WRITE, + READ_WRITE, + TEMP + }; + +public: + ContextInitializer& setErrorHandler (exr_error_handler_cb_t errfn) noexcept + { + _initializer.error_handler_fn = errfn; + return *this; + } + + ContextInitializer& setAllocationFunctions ( + exr_memory_allocation_func_t allocfn, + exr_memory_free_func_t freefn) noexcept + { + _initializer.alloc_fn = allocfn; + _initializer.free_fn = freefn; + return *this; + } + + IMF_EXPORT + ContextInitializer& setInputStream (IStream* istr); + IMF_EXPORT + ContextInitializer& setOutputStream (OStream* ostr); + + ContextInitializer& setCustomInputIO ( + void* user, + exr_read_func_ptr_t readfn, + exr_query_size_func_ptr_t sizefn, + exr_destroy_stream_func_ptr_t destroyfn) noexcept + { + _initializer.user_data = user; + _initializer.read_fn = readfn; + _initializer.size_fn = sizefn; + _initializer.destroy_fn = destroyfn; + _ctxt_type = ContextFileType::READ; + return *this; + } + + ContextInitializer& setCustomOutputIO ( + void* user, + exr_write_func_ptr_t writefn, + exr_destroy_stream_func_ptr_t destroyfn, + exr_read_func_ptr_t readfn = nullptr, + exr_query_size_func_ptr_t sizefn = nullptr) noexcept + { + _initializer.user_data = user; + _initializer.read_fn = readfn; + _initializer.size_fn = sizefn; + _initializer.write_fn = writefn; + _initializer.destroy_fn = destroyfn; + _ctxt_type = (readfn) ? ContextFileType::READ_WRITE + : ContextFileType::WRITE; + return *this; + } + + ContextInitializer& setMaxImageSize (int w, int h) noexcept + { + _initializer.max_image_width = w; + _initializer.max_image_height = h; + return *this; + } + + ContextInitializer& setMaxTileSize (int w, int h) noexcept + { + _initializer.max_tile_width = w; + _initializer.max_tile_height = h; + return *this; + } + + ContextInitializer& setZipLevel (int zl) noexcept + { + _initializer.zip_level = zl; + return *this; + } + + ContextInitializer& setDWAQuality (float dq) noexcept + { + _initializer.dwa_quality = dq; + return *this; + } + + ContextInitializer& strictHeaderValidation (bool onoff) noexcept + { + setFlag (EXR_CONTEXT_FLAG_STRICT_HEADER, onoff); + return *this; + } + + ContextInitializer& silentHeaderParse (bool onoff) noexcept + { + setFlag (EXR_CONTEXT_FLAG_SILENT_HEADER_PARSE, onoff); + return *this; + } + + ContextInitializer& disableChunkReconstruction (bool onoff) noexcept + { + setFlag (EXR_CONTEXT_FLAG_DISABLE_CHUNK_RECONSTRUCTION, onoff); + return *this; + } + + ContextInitializer& writeLegacyHeader (bool onoff) noexcept + { + setFlag (EXR_CONTEXT_FLAG_WRITE_LEGACY_HEADER, onoff); + return *this; + } + +private: + void setFlag (const int flag, bool onoff) + { + _initializer.flags = + (_initializer.flags & ~(flag)) | (onoff ? flag : 0); + } + + friend class Context; + + exr_context_initializer_t _initializer = EXR_DEFAULT_CONTEXT_INITIALIZER; + ContextFileType _ctxt_type = ContextFileType::TEMP; + IStream* _prov_stream = nullptr; +}; // class ContextInitializer + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT + +#endif // INCLUDED_IMF_CONTEXT_INIT_H diff --git a/third_party/tlRender-install-Release/include/OpenEXR/ImfConvert.h b/third_party/tlRender-install-Release/include/OpenEXR/ImfConvert.h new file mode 100644 index 00000000..0829fd90 --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenEXR/ImfConvert.h @@ -0,0 +1,74 @@ +// +// SPDX-License-Identifier: BSD-3-Clause +// Copyright (c) Contributors to the OpenEXR Project. +// + +#ifndef INCLUDED_IMF_CONVERT_H +#define INCLUDED_IMF_CONVERT_H + +//----------------------------------------------------------------------------- +// +// Routines for converting between pixel data types, +// with well-defined behavior for exceptional cases, +// without depending on how hardware and operating +// system handle integer overflows and floating-point +// exceptions. +// +//----------------------------------------------------------------------------- + +#include "ImfExport.h" +#include "ImfNamespace.h" + +#include + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER + +//--------------------------------------------------------- +// Conversion from half or float to unsigned int: +// +// input result +// --------------------------------------------------- +// +// finite, >= 0 input, cast to unsigned int +// (rounds towards zero) +// +// finite, < 0 0 +// +// NaN 0 +// +// +infinity UINT_MAX +// +// -infinity 0 +// +//--------------------------------------------------------- + +IMF_EXPORT unsigned int halfToUint (half h); +IMF_EXPORT unsigned int floatToUint (float f); + +//--------------------------------------------------------- +// Conversion from unsigned int or float to half: +// +// input result +// --------------------------------------------------- +// +// finite, closest possible half +// magnitude <= HALF_MAX +// +// finite, > HALF_MAX +infinity +// +// finite, < -HALF_MAX -infinity +// +// NaN NaN +// +// +infinity +infinity +// +// -infinity -infinity +// +//--------------------------------------------------------- + +IMF_EXPORT half uintToHalf (unsigned int ui); +IMF_EXPORT half floatToHalf (float f); + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT + +#endif diff --git a/third_party/tlRender-install-Release/include/OpenEXR/ImfDeepCompositing.h b/third_party/tlRender-install-Release/include/OpenEXR/ImfDeepCompositing.h new file mode 100644 index 00000000..58265b66 --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenEXR/ImfDeepCompositing.h @@ -0,0 +1,103 @@ +// +// SPDX-License-Identifier: BSD-3-Clause +// Copyright (c) Weta Digital, Ltd and Contributors to the OpenEXR Project. +// + +#ifndef INCLUDED_IMF_DEEPCOMPOSITING_H +#define INCLUDED_IMF_DEEPCOMPOSITING_H + +//----------------------------------------------------------------------------- +// +// Class to sort and composite deep samples into a frame buffer +// You may derive from this class to change the way that CompositeDeepScanLine +// and CompositeDeepTile combine samples together - pass an instance of your derived +// class to the compositing engine +// +//----------------------------------------------------------------------------- + +#include "ImfForward.h" + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER + +class IMF_EXPORT_TYPE DeepCompositing +{ +public: + IMF_EXPORT + DeepCompositing (); + IMF_EXPORT + virtual ~DeepCompositing (); + + ////////////////////////////////////////////// + /// + /// composite together the given channels + /// + /// @param outputs - return array of pixel values - + /// @param inputs - arrays of input sample + /// @param channel_names - array of channel names for corresponding channels + /// @param num_channels - number of active channels (3 or greater) + /// @param num_samples - number of values in all input arrays + /// @param sources - number of different sources + /// + /// each array input has num_channels entries: outputs[n] should be the composited + /// values in array inputs[n], whose name will be given by channel_names[n] + /// + /// The channel ordering shall be as follows: + /// Position Channel + /// 0 Z + /// 1 ZBack (if no ZBack, then inputs[1]==inputs[0] and channel_names[1]==channel_names[0]) + /// 2 A (alpha channel) + /// 3-n other channels - only channels in the frame buffer will appear here + /// + /// since a Z and Alpha channel is required, and channel[1] is ZBack or another copy of Z + /// there will always be 3 or more channels. + /// + /// The default implementation calls sort() if and only if more than one source is active, + /// composites all samples together using the Over operator from front to back, + /// stopping as soon as a sample with alpha=1 is found + /// It also blanks all outputs if num_samples==0 + /// + /// note - multiple threads may call composite_pixel simultaneously for different pixels + /// + /// + ////////////////////////////////////////////// + IMF_EXPORT + virtual void composite_pixel ( + float outputs[], + const float* inputs[], + const char* channel_names[], + int num_channels, + int num_samples, + int sources); + + //////////////////////////////////////////////////////////////// + /// + /// find the depth order for samples with given channel values + /// does not sort the values in-place. Instead it populates + /// array 'order' with the desired sorting order + /// + /// the default operation sorts samples from front to back according to their Z channel + /// + /// @param order - required output order. order[n] shall be the nth closest sample + /// @param inputs - arrays of input samples, one array per channel_name + /// @param channel_names - array of channel names for corresponding channels + /// @param num_channels - number of channels (3 or greater) + /// @param num_samples - number of samples in each array + /// @param sources - number of different sources the data arises from + /// + /// the channel layout is identical to composite_pixel() + /// + /////////////////////////////////////////////////////////////// + + IMF_EXPORT + virtual void sort ( + int order[], + const float* inputs[], + const char* channel_names[], + int num_channels, + int num_samples, + int sources); +}; + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT + +#endif diff --git a/third_party/tlRender-install-Release/include/OpenEXR/ImfDeepFrameBuffer.h b/third_party/tlRender-install-Release/include/OpenEXR/ImfDeepFrameBuffer.h new file mode 100644 index 00000000..38767968 --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenEXR/ImfDeepFrameBuffer.h @@ -0,0 +1,316 @@ +// +// SPDX-License-Identifier: BSD-3-Clause +// Copyright (c) Contributors to the OpenEXR Project. +// + +#ifndef IMFDEEPFRAMEBUFFER_H_ +#define IMFDEEPFRAMEBUFFER_H_ + +#include "ImfForward.h" + +#include "ImfFrameBuffer.h" + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER + +//-------------------------------------------------------- +// Description of a single deep slice of the frame buffer: +//-------------------------------------------------------- + +struct IMF_EXPORT_TYPE DeepSlice : public Slice +{ + //--------------------------------------------------------------------- + // The stride for each sample in this slice. + // + // Memory layout: The address of sample i in pixel (x, y) is + // + // base + (xp / xSampling) * xStride + (yp / ySampling) * yStride + // + i * sampleStride + // + // where xp and yp are computed as follows: + // + // * If we are reading or writing a scanline-based file: + // + // xp = x + // yp = y + // + // * If we are reading a tile whose upper left coorner is at (xt, yt): + // + // if xTileCoords is true then xp = x - xt, else xp = x + // if yTileCoords is true then yp = y - yt, else yp = y + // + //--------------------------------------------------------------------- + + int sampleStride; + + //------------ + // Constructor + //------------ + IMF_EXPORT + DeepSlice ( + PixelType type = HALF, + char* base = 0, + size_t xStride = 0, + size_t yStride = 0, + size_t sampleStride = 0, + int xSampling = 1, + int ySampling = 1, + double fillValue = 0.0, + bool xTileCoords = false, + bool yTileCoords = false); +}; + +//----------------- +// DeepFrameBuffer. +//----------------- + +class IMF_EXPORT_TYPE DeepFrameBuffer +{ +public: + //------------ + // Add a slice + //------------ + + IMF_EXPORT + void insert (const char name[], const DeepSlice& slice); + + IMF_EXPORT + void insert (const std::string& name, const DeepSlice& slice); + + //---------------------------------------------------------------- + // Access to existing slices: + // + // [n] Returns a reference to the slice with name n. + // If no slice with name n exists, an IEX_NAMESPACE::ArgExc + // is thrown. + // + // findSlice(n) Returns a pointer to the slice with name n, + // or 0 if no slice with name n exists. + // + //---------------------------------------------------------------- + + IMF_EXPORT + DeepSlice& operator[] (const char name[]); + IMF_EXPORT + const DeepSlice& operator[] (const char name[]) const; + + IMF_EXPORT + DeepSlice& operator[] (const std::string& name); + IMF_EXPORT + const DeepSlice& operator[] (const std::string& name) const; + + IMF_EXPORT + DeepSlice* findSlice (const char name[]); + IMF_EXPORT + const DeepSlice* findSlice (const char name[]) const; + + IMF_EXPORT + DeepSlice* findSlice (const std::string& name); + IMF_EXPORT + const DeepSlice* findSlice (const std::string& name) const; + + //----------------------------------------- + // Iterator-style access to existing slices + //----------------------------------------- + + typedef std::map SliceMap; + + class Iterator; + class ConstIterator; + + IMF_EXPORT + Iterator begin (); + IMF_EXPORT + ConstIterator begin () const; + + IMF_EXPORT + Iterator end (); + IMF_EXPORT + ConstIterator end () const; + + IMF_EXPORT + Iterator find (const char name[]); + IMF_EXPORT + ConstIterator find (const char name[]) const; + + IMF_EXPORT + Iterator find (const std::string& name); + IMF_EXPORT + ConstIterator find (const std::string& name) const; + + //---------------------------------------------------- + // Public function for accessing a sample count slice. + //---------------------------------------------------- + + IMF_EXPORT + void insertSampleCountSlice (const Slice& slice); + IMF_EXPORT + const Slice& getSampleCountSlice () const; + +private: + SliceMap _map; + Slice _sampleCounts; +}; + +//---------- +// Iterators +//---------- + +class IMF_EXPORT_TYPE DeepFrameBuffer::Iterator +{ +public: + IMF_EXPORT + Iterator (); + IMF_EXPORT + Iterator (const DeepFrameBuffer::SliceMap::iterator& i); + + IMF_EXPORT + Iterator& operator++ (); + IMF_EXPORT + Iterator operator++ (int); + + IMF_EXPORT + const char* name () const; + IMF_EXPORT + DeepSlice& slice () const; + +private: + friend class DeepFrameBuffer::ConstIterator; + + DeepFrameBuffer::SliceMap::iterator _i; +}; + +class IMF_EXPORT_TYPE DeepFrameBuffer::ConstIterator +{ +public: + IMF_EXPORT + ConstIterator (); + IMF_EXPORT + ConstIterator (const DeepFrameBuffer::SliceMap::const_iterator& i); + IMF_EXPORT + ConstIterator (const DeepFrameBuffer::Iterator& other); + + IMF_EXPORT + ConstIterator& operator++ (); + IMF_EXPORT + ConstIterator operator++ (int); + + IMF_EXPORT + const char* name () const; + IMF_EXPORT + const DeepSlice& slice () const; + +private: + friend bool operator== (const ConstIterator&, const ConstIterator&); + friend bool operator!= (const ConstIterator&, const ConstIterator&); + + DeepFrameBuffer::SliceMap::const_iterator _i; +}; + +//----------------- +// Inline Functions +//----------------- + +inline DeepFrameBuffer::Iterator::Iterator () : _i () +{ + // empty +} + +inline DeepFrameBuffer::Iterator::Iterator ( + const DeepFrameBuffer::SliceMap::iterator& i) + : _i (i) +{ + // empty +} + +inline DeepFrameBuffer::Iterator& +DeepFrameBuffer::Iterator::operator++ () +{ + ++_i; + return *this; +} + +inline DeepFrameBuffer::Iterator +DeepFrameBuffer::Iterator::operator++ (int) +{ + Iterator tmp = *this; + ++_i; + return tmp; +} + +inline const char* +DeepFrameBuffer::Iterator::name () const +{ + return *_i->first; +} + +inline DeepSlice& +DeepFrameBuffer::Iterator::slice () const +{ + return _i->second; +} + +inline DeepFrameBuffer::ConstIterator::ConstIterator () : _i () +{ + // empty +} + +inline DeepFrameBuffer::ConstIterator::ConstIterator ( + const DeepFrameBuffer::SliceMap::const_iterator& i) + : _i (i) +{ + // empty +} + +inline DeepFrameBuffer::ConstIterator::ConstIterator ( + const DeepFrameBuffer::Iterator& other) + : _i (other._i) +{ + // empty +} + +inline DeepFrameBuffer::ConstIterator& +DeepFrameBuffer::ConstIterator::operator++ () +{ + ++_i; + return *this; +} + +inline DeepFrameBuffer::ConstIterator +DeepFrameBuffer::ConstIterator::operator++ (int) +{ + ConstIterator tmp = *this; + ++_i; + return tmp; +} + +inline const char* +DeepFrameBuffer::ConstIterator::name () const +{ + return *_i->first; +} + +inline const DeepSlice& +DeepFrameBuffer::ConstIterator::slice () const +{ + return _i->second; +} + +inline bool +operator== ( + const DeepFrameBuffer::ConstIterator& x, + const DeepFrameBuffer::ConstIterator& y) +{ + return x._i == y._i; +} + +inline bool +operator!= ( + const DeepFrameBuffer::ConstIterator& x, + const DeepFrameBuffer::ConstIterator& y) +{ + return !(x == y); +} + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT + +#endif /* IMFDEEPFRAMEBUFFER_H_ */ diff --git a/third_party/tlRender-install-Release/include/OpenEXR/ImfDeepImage.h b/third_party/tlRender-install-Release/include/OpenEXR/ImfDeepImage.h new file mode 100644 index 00000000..f939c428 --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenEXR/ImfDeepImage.h @@ -0,0 +1,63 @@ +// +// SPDX-License-Identifier: BSD-3-Clause +// Copyright (c) Contributors to the OpenEXR Project. +// + +#ifndef INCLUDED_IMF_DEEP_IMAGE_H +#define INCLUDED_IMF_DEEP_IMAGE_H + +//---------------------------------------------------------------------------- +// +// class DeepImage +// +// For an explanation of images, levels and channels, +// see the comments in header file Image.h. +// +//---------------------------------------------------------------------------- + +#include "ImfDeepImageLevel.h" +#include "ImfImage.h" +#include "ImfUtilExport.h" + +#include "ImfTileDescription.h" + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER + +class IMFUTIL_EXPORT_TYPE DeepImage : public Image +{ +public: + // + // Constructors and destructor. + // The default constructor constructs an image with an empty data + // window level mode ONE_LEVEL and level rounding mode ROUND_DOWN. + // + + IMFUTIL_EXPORT DeepImage (); + + IMFUTIL_EXPORT + DeepImage ( + const IMATH_NAMESPACE::Box2i& dataWindow, + LevelMode levelMode = ONE_LEVEL, + LevelRoundingMode levelRoundingMode = ROUND_DOWN); + + IMFUTIL_EXPORT virtual ~DeepImage (); + + // + // Accessing image levels by level number + // + + IMFUTIL_EXPORT virtual DeepImageLevel& level (int l = 0); + IMFUTIL_EXPORT virtual const DeepImageLevel& level (int l = 0) const; + + IMFUTIL_EXPORT virtual DeepImageLevel& level (int lx, int ly); + IMFUTIL_EXPORT virtual const DeepImageLevel& level (int lx, int ly) const; + +protected: + IMFUTIL_EXPORT + virtual DeepImageLevel* + newLevel (int lx, int ly, const IMATH_NAMESPACE::Box2i& dataWindow); +}; + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT + +#endif diff --git a/third_party/tlRender-install-Release/include/OpenEXR/ImfDeepImageChannel.h b/third_party/tlRender-install-Release/include/OpenEXR/ImfDeepImageChannel.h new file mode 100644 index 00000000..9096cfeb --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenEXR/ImfDeepImageChannel.h @@ -0,0 +1,272 @@ +// +// SPDX-License-Identifier: BSD-3-Clause +// Copyright (c) Contributors to the OpenEXR Project. +// + +#ifndef INCLUDED_IMF_DEEP_IMAGE_CHANNEL_H +#define INCLUDED_IMF_DEEP_IMAGE_CHANNEL_H + +//---------------------------------------------------------------------------- +// +// class DeepImageChannel, +// template class TypedDeepImageChannel +// +// For an explanation of images, levels and channels, +// see the comments in header file Image.h. +// +//---------------------------------------------------------------------------- + +#include "ImfNamespace.h" +#include "ImfUtilExport.h" + +#include "ImfImageChannel.h" +#include "ImfImageLevel.h" +#include "ImfSampleCountChannel.h" + +#include "ImfDeepFrameBuffer.h" + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER + +class DeepImageLevel; +class SampleCountChannel; + +// +// Image channels: +// +// A TypedDeepImageChannel holds the pixel data for a single channel +// of one level of a deep image. Each pixel in the channel contains an +// array of n samples of type T, where T is either half, float or +// unsigned int, and n is stored in a separate sample count channel. +// Sample storage is allocated only for pixels within the data window +// of the level. +// + +class IMFUTIL_EXPORT_TYPE DeepImageChannel : public ImageChannel +{ +public: + // + // Construct an OpenEXR frame buffer slice for this channel. + // This function is needed reading an image from an OpenEXR + // file and for saving an image in an OpenEXR file. + // + + virtual DeepSlice slice () const = 0; + + // + // Access to the image level to which this channel belongs. + // + + IMFUTIL_EXPORT DeepImageLevel& deepLevel (); + IMFUTIL_EXPORT const DeepImageLevel& deepLevel () const; + + // + // Access to the sample count channel for this deep channel. + // + + IMFUTIL_EXPORT SampleCountChannel& sampleCounts (); + IMFUTIL_EXPORT const SampleCountChannel& sampleCounts () const; + +protected: + friend class DeepImageLevel; + + IMFUTIL_EXPORT DeepImageChannel (DeepImageLevel& level, bool pLinear); + IMFUTIL_EXPORT virtual ~DeepImageChannel (); + + DeepImageChannel (const DeepImageChannel& other) = delete; + DeepImageChannel& operator= (const DeepImageChannel& other) = delete; + DeepImageChannel (DeepImageChannel&& other) = delete; + DeepImageChannel& operator= (DeepImageChannel&& other) = delete; + + virtual void setSamplesToZero ( + size_t i, unsigned int oldNumSamples, unsigned int newNumSamples) = 0; + + virtual void moveSampleList ( + size_t i, + unsigned int oldNumSamples, + unsigned int newNumSamples, + size_t newSampleListPosition) = 0; + + virtual void moveSamplesToNewBuffer ( + const unsigned int* oldNumSamples, + const unsigned int* newNumSamples, + const size_t* newSampleListPositions) = 0; + + virtual void initializeSampleLists () = 0; + + IMFUTIL_EXPORT virtual void resize (); + + virtual void resetBasePointer () = 0; +}; + +template +class IMFUTIL_EXPORT_TEMPLATE_TYPE TypedDeepImageChannel + : public DeepImageChannel +{ +public: + // + // The OpenEXR pixel type of this channel (HALF, FLOAT or UINT). + // + + virtual PixelType pixelType () const; + + // + // Construct an OpenEXR frame buffer slice for this channel. + // This function is needed reading an image from an OpenEXR + // file and for saving an image in an OpenEXR file. + // + + virtual DeepSlice slice () const; + + // + // Access to the pixel at pixel space location (x, y), without bounds + // checking. Accessing a location outside the data window of the image + // level results in undefined behavior. + // + // The pixel contains a pointer to an array of samples to type T. The + // number of samples in this array is sampleCounts().at(x,y). + // + + T* operator() (int x, int y); + const T* operator() (int x, int y) const; + + // + // Access to the pixel at pixel space location (x, y), with bounds + // checking. Accessing a location outside the data window of the + // image level throws an Iex::ArgExc exception. + // + + T* at (int x, int y); + const T* at (int x, int y) const; + + // + // Faster access to all pixels in a single horizontal row of the + // channel. Access is not bounds checked; accessing out of bounds + // rows or pixels results in undefined behavior. + // + // Rows are numbered from 0 to pixelsPerColumn()-1, and each row + // contains pixelsPerRow() values. The number of samples in + // row(r)[i] is sampleCounts().row(r)[i]. + // + + T* const* row (int r); + const T* const* row (int r) const; + +private: + friend class DeepImageLevel; + + IMFUTIL_HIDDEN + TypedDeepImageChannel (DeepImageLevel& level, bool pLinear); + IMFUTIL_HIDDEN + virtual ~TypedDeepImageChannel (); + + TypedDeepImageChannel (const TypedDeepImageChannel& other) = delete; + TypedDeepImageChannel& + operator= (const TypedDeepImageChannel& other) = delete; + TypedDeepImageChannel (TypedDeepImageChannel&& other) = delete; + TypedDeepImageChannel& operator= (TypedDeepImageChannel&& other) = delete; + + IMFUTIL_HIDDEN + virtual void setSamplesToZero ( + size_t i, unsigned int oldNumSamples, unsigned int newNumSamples); + + IMFUTIL_HIDDEN + virtual void moveSampleList ( + size_t i, + unsigned int oldNumSamples, + unsigned int newNumSamples, + size_t newSampleListPosition); + + IMFUTIL_HIDDEN + virtual void moveSamplesToNewBuffer ( + const unsigned int* oldNumSamples, + const unsigned int* newNumSamples, + const size_t* newSampleListPositions); + + IMFUTIL_HIDDEN + virtual void initializeSampleLists (); + + IMFUTIL_HIDDEN + virtual void resize (); + + IMFUTIL_HIDDEN + virtual void resetBasePointer (); + + T** _sampleListPointers; // Array of pointers to per-pixel + //sample lists + + T** _base; // Base pointer for faster access + // to entries in _sampleListPointers + + T* _sampleBuffer; // Contiguous memory block that + // contains all sample lists for + // this channel +}; + +// +// Channel typedefs for the pixel data types supported by OpenEXR. +// + +typedef TypedDeepImageChannel DeepHalfChannel; +typedef TypedDeepImageChannel DeepFloatChannel; +typedef TypedDeepImageChannel DeepUIntChannel; + +//----------------------------------------------------------------------------- +// Implementation of templates and inline functions +//----------------------------------------------------------------------------- + +template +inline T* +TypedDeepImageChannel::operator() (int x, int y) +{ + return _base[y * pixelsPerRow () + x]; +} + +template +inline const T* +TypedDeepImageChannel::operator() (int x, int y) const +{ + return _base[y * pixelsPerRow () + x]; +} + +template +inline T* +TypedDeepImageChannel::at (int x, int y) +{ + boundsCheck (x, y); + return _base[y * pixelsPerRow () + x]; +} + +template +inline const T* +TypedDeepImageChannel::at (int x, int y) const +{ + boundsCheck (x, y); + return _base[y * pixelsPerRow () + x]; +} + +template +inline T* const* +TypedDeepImageChannel::row (int r) +{ + return _base + r * pixelsPerRow (); +} + +template +inline const T* const* +TypedDeepImageChannel::row (int r) const +{ + return _base + r * pixelsPerRow (); +} + +#ifndef COMPILING_IMF_DEEP_IMAGE_CHANNEL +extern template class IMFUTIL_EXPORT_EXTERN_TEMPLATE + TypedDeepImageChannel; +extern template class IMFUTIL_EXPORT_EXTERN_TEMPLATE + TypedDeepImageChannel; +extern template class IMFUTIL_EXPORT_EXTERN_TEMPLATE + TypedDeepImageChannel; +#endif + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT + +#endif diff --git a/third_party/tlRender-install-Release/include/OpenEXR/ImfDeepImageIO.h b/third_party/tlRender-install-Release/include/OpenEXR/ImfDeepImageIO.h new file mode 100644 index 00000000..c96720f6 --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenEXR/ImfDeepImageIO.h @@ -0,0 +1,158 @@ +// +// SPDX-License-Identifier: BSD-3-Clause +// Copyright (c) Contributors to the OpenEXR Project. +// + +#ifndef INCLUDED_IMF_DEEP_IMAGE_IO_H +#define INCLUDED_IMF_DEEP_IMAGE_IO_H + +//---------------------------------------------------------------------------- +// +// Functions to load deep images from OpenEXR files +// and to save deep images in OpenEXR files. +// +//---------------------------------------------------------------------------- + +#include "ImfNamespace.h" +#include "ImfUtilExport.h" + +#include "ImfDeepImage.h" +#include "ImfImageDataWindow.h" + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER + +// +// saveDeepImage (n, h, i,d) or +// saveDeepImage (n, i) +// +// Saves image i in an OpenEXR file with name n. The file will be +// tiled if the image has more than one level, or if a header, h, is +// given and contains a tile description attribute; otherwise the +// file will be scan-line based. +// +// If header h is given, then the channel list in h is replaced with +// the channel list in i, and the levelMode and the levelRounding mode +// fields of the tile description are replaced with the level mode +// and the levelRounding mode of i. In addition, if the data window +// source flag, d, is set to USE_IMAGE_DATA_WINDOW, then the data +// window in the image is copied into the header; if d is set to +// USE_HEADER_DATA_WINDOW, then the data window in the header is +// replaced with the intersection of the original data window in the +// header and the data window in the image. The modified header then +// becomes the header of the image file. +// + +IMFUTIL_EXPORT +void saveDeepImage ( + const std::string& fileName, + const Header& hdr, + const DeepImage& img, + DataWindowSource dws = USE_IMAGE_DATA_WINDOW); + +IMFUTIL_EXPORT +void saveDeepImage (const std::string& fileName, const DeepImage& img); + +// +// loadDeepImage (n, h, i) or +// loadDeepImage (n, i) +// +// Loads deep image i from the OpenEXR file with name n. +// +// If header h is given, then the header of the file is copied into h. +// + +IMFUTIL_EXPORT +void loadDeepImage (const std::string& fileName, Header& hdr, DeepImage& img); + +IMFUTIL_EXPORT +void loadDeepImage (const std::string& fileName, DeepImage& img); + +// +// saveDeepScanLineImage (n, h, i, d) or +// saveDeepScanLineImage (n, i) +// +// Saves image i in a scan-line based deep OpenEXR file with file name n. +// +// If header h is given, then the channel list in h is replaced with +// the channel list in i. In addition, if the data window source flag, d, +// is set to USE_IMAGE_DATA_WINDOW, then the data window in the image is +// copied into the header; if d is set to USE_HEADER_DATA_WINDOW, then +// the data window in the header is replaced with the intersection of +// the original data window in the header and the data window in the +// image. The modified header then becomes the header of the image file. +// + +IMFUTIL_EXPORT +void saveDeepScanLineImage ( + const std::string& fileName, + const Header& hdr, + const DeepImage& img, + DataWindowSource dws = USE_IMAGE_DATA_WINDOW); + +IMFUTIL_EXPORT +void saveDeepScanLineImage (const std::string& fileName, const DeepImage& img); + +// +// loadDeepScanLineImage (n, h, i) or +// loadDeepScanLineImage (n, i) +// +// Loads image i from a scan-line based deep OpenEXR file with file name n. +// If header h is given, then the header of the file is copied into h. +// + +IMFUTIL_EXPORT +void loadDeepScanLineImage ( + const std::string& fileName, Header& hdr, DeepImage& img); + +IMFUTIL_EXPORT +void loadDeepScanLineImage (const std::string& fileName, DeepImage& img); + +// +// saveDeepTiledImage (n, h, i, d) or +// saveDeepTiledImage (n, i) +// +// Saves image i in a tiled deep OpenEXR file with file name n. +// +// If header h is given, then the channel list in h is replaced with +// the channel list i, and the levelMode and the levelRounding mode +// fields of the tile description are replaced with the level mode +// and the levelRounding mode of i. In addition, if the data window +// source flag, d, is set to USE_IMAGE_DATA_WINDOW, then the data +// window in the image is copied into the header; if d is set to +// USE_HEADER_DATA_WINDOW, then the data window in the header is +// replaced with the intersection of the original data window in the +// header and the data window in the image. The modified header then +// becomes the header of the image file. +// +// Note: USE_HEADER_DATA_WINDOW can only be used for images with +// level mode ONE_LEVEL. +// + +IMFUTIL_EXPORT +void saveDeepTiledImage ( + const std::string& fileName, + const Header& hdr, + const DeepImage& img, + DataWindowSource dws = USE_IMAGE_DATA_WINDOW); + +IMFUTIL_EXPORT +void saveDeepTiledImage (const std::string& fileName, const DeepImage& img); + +// +// loadDeepTiledImage (n, h, i) or +// loadDeepTiledImage (n, i) +// +// Loads image i from a tiled deep OpenEXR file with file name n. +// If header h is given, then the header of the file is copied into h. +// + +IMFUTIL_EXPORT +void +loadDeepTiledImage (const std::string& fileName, Header& hdr, DeepImage& img); + +IMFUTIL_EXPORT +void loadDeepTiledImage (const std::string& fileName, DeepImage& img); + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT + +#endif diff --git a/third_party/tlRender-install-Release/include/OpenEXR/ImfDeepImageLevel.h b/third_party/tlRender-install-Release/include/OpenEXR/ImfDeepImageLevel.h new file mode 100644 index 00000000..3416ac07 --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenEXR/ImfDeepImageLevel.h @@ -0,0 +1,411 @@ +// +// SPDX-License-Identifier: BSD-3-Clause +// Copyright (c) Contributors to the OpenEXR Project. +// + +#ifndef INCLUDED_IMF_DEEP_IMAGE_LEVEL_H +#define INCLUDED_IMF_DEEP_IMAGE_LEVEL_H + +//---------------------------------------------------------------------------- +// +// class DeepImageLevel +// class DeepImageLevel::Iterator +// class DeepImageLevel::ConstIterator +// +// For an explanation of images, levels and channels, +// see the comments in header file Image.h. +// +//---------------------------------------------------------------------------- + +#include "ImfNamespace.h" +#include "ImfUtilExport.h" + +#include "ImfDeepImageChannel.h" +#include "ImfImageLevel.h" +#include "ImfSampleCountChannel.h" + +#include +#include + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER + +class DeepImage; + +class IMFUTIL_EXPORT_TYPE DeepImageLevel : public ImageLevel +{ +public: + // + // Access to the image to which the level belongs. + // + + IMFUTIL_EXPORT + DeepImage& deepImage (); + IMFUTIL_EXPORT + const DeepImage& deepImage () const; + + // + // Access to deep channels by name: + // + // findChannel(n) returns a pointer to the image channel with + // name n, or 0 if no such channel exists. + // + // channel(n) returns a reference to the image channel with + // name n, or throws an Iex::ArgExc exception if + // no such channel exists. + // + // findTypedChannel(n) returns a pointer to the image channel with + // name n and type T, or 0 if no such channel + // exists. + // + // typedChannel(n) returns a reference to the image channel with + // name n and type T, or throws an Iex::ArgExc + // exception if no such channel exists. + // + + IMFUTIL_EXPORT + DeepImageChannel* findChannel (const std::string& name); + IMFUTIL_EXPORT + const DeepImageChannel* findChannel (const std::string& name) const; + + IMFUTIL_EXPORT + DeepImageChannel& channel (const std::string& name); + IMFUTIL_EXPORT + const DeepImageChannel& channel (const std::string& name) const; + + template + TypedDeepImageChannel* findTypedChannel (const std::string& name); + + template + const TypedDeepImageChannel* + findTypedChannel (const std::string& name) const; + + template + TypedDeepImageChannel& typedChannel (const std::string& name); + + template + const TypedDeepImageChannel& + typedChannel (const std::string& name) const; + + // + // Iterator-style access to deep channels + // + + typedef std::map ChannelMap; + + class Iterator; + class ConstIterator; + + IMFUTIL_EXPORT + Iterator begin (); + IMFUTIL_EXPORT + ConstIterator begin () const; + + IMFUTIL_EXPORT + Iterator end (); + IMFUTIL_EXPORT + ConstIterator end () const; + + // + // Access to the sample count channel + // + + IMFUTIL_EXPORT + SampleCountChannel& sampleCounts (); + IMFUTIL_EXPORT + const SampleCountChannel& sampleCounts () const; + +private: + friend class DeepImage; + friend class SampleCountChannel; + + // + // The constructor and destructor are private. + // Deep image levels exist only as part of a deep image. + // + IMF_HIDDEN + DeepImageLevel ( + DeepImage& image, + int xLevelNumber, + int yLevelNumber, + const IMATH_NAMESPACE::Box2i& dataWindow); + + IMF_HIDDEN + ~DeepImageLevel (); + + IMF_HIDDEN + void setSamplesToZero ( + size_t i, unsigned int oldNumSamples, unsigned int newNumSamples); + + IMF_HIDDEN + void moveSampleList ( + size_t i, + unsigned int oldNumSamples, + unsigned int newNumSamples, + size_t newSampleListPosition); + + IMF_HIDDEN + void moveSamplesToNewBuffer ( + const unsigned int* oldNumSamples, + const unsigned int* newNumSamples, + const size_t* newSampleListPositions); + + IMF_HIDDEN + void initializeSampleLists (); + + IMF_HIDDEN + virtual void resize (const IMATH_NAMESPACE::Box2i& dataWindow); + + IMF_HIDDEN + virtual void shiftPixels (int dx, int dy); + + IMF_HIDDEN + virtual void insertChannel ( + const std::string& name, + PixelType type, + int xSampling, + int ySampling, + bool pLinear); + + IMF_HIDDEN + virtual void eraseChannel (const std::string& name); + + IMF_HIDDEN + virtual void clearChannels (); + + IMF_HIDDEN + virtual void + renameChannel (const std::string& oldName, const std::string& newName); + + IMF_HIDDEN + virtual void renameChannels (const RenamingMap& oldToNewNames); + + ChannelMap _channels; + SampleCountChannel _sampleCounts; +}; + +class IMFUTIL_EXPORT_TYPE DeepImageLevel::Iterator +{ +public: + IMFUTIL_EXPORT + Iterator (); + IMFUTIL_EXPORT + Iterator (const DeepImageLevel::ChannelMap::iterator& i); + + // + // Advance the iterator + // + + IMFUTIL_EXPORT + Iterator& operator++ (); + IMFUTIL_EXPORT + Iterator operator++ (int); + + // + // Access to the channel to which the iterator points, + // and to the name of that channel. + // + + IMFUTIL_EXPORT + const std::string& name () const; + IMFUTIL_EXPORT + DeepImageChannel& channel () const; + +private: + friend class DeepImageLevel::ConstIterator; + + DeepImageLevel::ChannelMap::iterator _i; +}; + +class IMFUTIL_EXPORT_TYPE DeepImageLevel::ConstIterator +{ +public: + IMFUTIL_EXPORT + ConstIterator (); + IMFUTIL_EXPORT + ConstIterator (const DeepImageLevel::ChannelMap::const_iterator& i); + IMFUTIL_EXPORT + ConstIterator (const DeepImageLevel::Iterator& other); + + // + // Advance the iterator + // + + IMFUTIL_EXPORT + ConstIterator& operator++ (); + IMFUTIL_EXPORT + ConstIterator operator++ (int); + + // + // Access to the channel to which the iterator points, + // and to the name of that channel. + // + + IMFUTIL_EXPORT + const std::string& name () const; + IMFUTIL_EXPORT + const DeepImageChannel& channel () const; + +private: + friend bool operator== (const ConstIterator&, const ConstIterator&); + + friend bool operator!= (const ConstIterator&, const ConstIterator&); + + DeepImageLevel::ChannelMap::const_iterator _i; +}; + +//----------------------------------------------------------------------------- +// Implementation of inline functions +//----------------------------------------------------------------------------- + +template +TypedDeepImageChannel* +DeepImageLevel::findTypedChannel (const std::string& name) +{ + return dynamic_cast*> (findChannel (name)); +} + +template +const TypedDeepImageChannel* +DeepImageLevel::findTypedChannel (const std::string& name) const +{ + return dynamic_cast*> (findChannel (name)); +} + +template +TypedDeepImageChannel& +DeepImageLevel::typedChannel (const std::string& name) +{ + TypedDeepImageChannel* ptr = findTypedChannel (name); + + if (ptr == 0) throwBadChannelNameOrType (name); + + return *ptr; +} + +template +const TypedDeepImageChannel& +DeepImageLevel::typedChannel (const std::string& name) const +{ + const TypedDeepImageChannel* ptr = findTypedChannel (name); + + if (ptr == 0) throwBadChannelNameOrType (name); + + return *ptr; +} + +inline SampleCountChannel& +DeepImageLevel::sampleCounts () +{ + return _sampleCounts; +} + +inline const SampleCountChannel& +DeepImageLevel::sampleCounts () const +{ + return _sampleCounts; +} + +inline DeepImageLevel::Iterator::Iterator () : _i () +{ + // empty +} + +inline DeepImageLevel::Iterator::Iterator ( + const DeepImageLevel::ChannelMap::iterator& i) + : _i (i) +{ + // empty +} + +inline DeepImageLevel::Iterator& +DeepImageLevel::Iterator::operator++ () +{ + ++_i; + return *this; +} + +inline DeepImageLevel::Iterator +DeepImageLevel::Iterator::operator++ (int) +{ + Iterator tmp = *this; + ++_i; + return tmp; +} + +inline const std::string& +DeepImageLevel::Iterator::name () const +{ + return _i->first; +} + +inline DeepImageChannel& +DeepImageLevel::Iterator::channel () const +{ + return *_i->second; +} + +inline DeepImageLevel::ConstIterator::ConstIterator () : _i () +{ + // empty +} + +inline DeepImageLevel::ConstIterator::ConstIterator ( + const DeepImageLevel::ChannelMap::const_iterator& i) + : _i (i) +{ + // empty +} + +inline DeepImageLevel::ConstIterator::ConstIterator ( + const DeepImageLevel::Iterator& other) + : _i (other._i) +{ + // empty +} + +inline DeepImageLevel::ConstIterator& +DeepImageLevel::ConstIterator::operator++ () +{ + ++_i; + return *this; +} + +inline DeepImageLevel::ConstIterator +DeepImageLevel::ConstIterator::operator++ (int) +{ + ConstIterator tmp = *this; + ++_i; + return tmp; +} + +inline const std::string& +DeepImageLevel::ConstIterator::name () const +{ + return _i->first; +} + +inline const DeepImageChannel& +DeepImageLevel::ConstIterator::channel () const +{ + return *_i->second; +} + +inline bool +operator== ( + const DeepImageLevel::ConstIterator& x, + const DeepImageLevel::ConstIterator& y) +{ + return x._i == y._i; +} + +inline bool +operator!= ( + const DeepImageLevel::ConstIterator& x, + const DeepImageLevel::ConstIterator& y) +{ + return !(x == y); +} + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT + +#endif diff --git a/third_party/tlRender-install-Release/include/OpenEXR/ImfDeepImageState.h b/third_party/tlRender-install-Release/include/OpenEXR/ImfDeepImageState.h new file mode 100644 index 00000000..c85dd273 --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenEXR/ImfDeepImageState.h @@ -0,0 +1,64 @@ +// +// SPDX-License-Identifier: BSD-3-Clause +// Copyright (c) Contributors to the OpenEXR Project. +// + +#ifndef INCLUDED_IMF_DEEPIMAGESTATE_H +#define INCLUDED_IMF_DEEPIMAGESTATE_H + +//----------------------------------------------------------------------------- +// +// enum DeepImageState -- describes how orderly the pixel data +// in a deep image are +// +// The samples in a deep image pixel may be sorted according to +// depth, and the sample depths or depth ranges may or may not +// overlap each other. A pixel is +// +// - SORTED if for every i and j with i < j +// +// (Z[i] < Z[j]) || (Z[i] == Z[j] && ZBack[i] < ZBack[j]), +// +// - NON_OVERLAPPING if for every i and j with i != j +// +// (Z[i] < Z[j] && ZBack[i] <= Z[j]) || +// (Z[j] < Z[i] && ZBack[j] <= Z[i]) || +// (Z[i] == Z[j] && ZBack[i] <= Z[i] & ZBack[j] > Z[j]) || +// (Z[i] == Z[j] && ZBack[j] <= Z[j] & ZBack[i] > Z[i]), +// +// - TIDY if it is SORTED and NON_OVERLAPPING, +// +// - MESSY if it is neither SORTED nor NON_OVERLAPPING. +// +// A deep image is +// +// - MESSY if at least one of its pixels is MESSY, +// - SORTED if all of its pixels are SORTED, +// - NON_OVERLAPPING if all of its pixels are NON_OVERLAPPING, +// - TIDY if all of its pixels are TIDY. +// +// Note: the rather complicated definition of NON_OVERLAPPING prohibits +// overlapping volume samples, coincident point samples and point samples +// in the middle of a volume sample, but it does allow point samples at +// the front or back of a volume sample. +// +//----------------------------------------------------------------------------- + +#include "ImfExport.h" +#include "ImfNamespace.h" + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER + +enum IMF_EXPORT_ENUM DeepImageState : int +{ + DIS_MESSY = 0, + DIS_SORTED = 1, + DIS_NON_OVERLAPPING = 2, + DIS_TIDY = 3, + + DIS_NUMSTATES // Number of different image states +}; + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT + +#endif diff --git a/third_party/tlRender-install-Release/include/OpenEXR/ImfDeepImageStateAttribute.h b/third_party/tlRender-install-Release/include/OpenEXR/ImfDeepImageStateAttribute.h new file mode 100644 index 00000000..3d67126e --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenEXR/ImfDeepImageStateAttribute.h @@ -0,0 +1,31 @@ +// +// SPDX-License-Identifier: BSD-3-Clause +// Copyright (c) Contributors to the OpenEXR Project. +// + +#ifndef INCLUDED_IMF_DEEPIMAGESTATE_ATTRIBUTE_H +#define INCLUDED_IMF_DEEPIMAGESTATE_ATTRIBUTE_H + +//----------------------------------------------------------------------------- +// +// class DeepImageStateAttribute +// +//----------------------------------------------------------------------------- + +#include "ImfAttribute.h" +#include "ImfDeepImageState.h" +#include "ImfExport.h" + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER + +typedef TypedAttribute + DeepImageStateAttribute; + +#ifndef COMPILING_IMF_DEEP_IMAGE_STATE_ATTRIBUTE +extern template class IMF_EXPORT_EXTERN_TEMPLATE + TypedAttribute; +#endif + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT + +#endif diff --git a/third_party/tlRender-install-Release/include/OpenEXR/ImfDeepScanLineInputFile.h b/third_party/tlRender-install-Release/include/OpenEXR/ImfDeepScanLineInputFile.h new file mode 100644 index 00000000..5bf690b8 --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenEXR/ImfDeepScanLineInputFile.h @@ -0,0 +1,251 @@ +// +// SPDX-License-Identifier: BSD-3-Clause +// Copyright (c) Contributors to the OpenEXR Project. +// + +#ifndef INCLUDED_IMF_DEEP_SCAN_LINE_INPUT_FILE_H +#define INCLUDED_IMF_DEEP_SCAN_LINE_INPUT_FILE_H + +//----------------------------------------------------------------------------- +// +// class DeepScanLineInputFile +// +//----------------------------------------------------------------------------- + +#include "ImfForward.h" + +#include "ImfContext.h" + +#include "ImfDeepScanLineOutputFile.h" + +#include "ImfThreading.h" + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER + +class IMF_EXPORT_TYPE DeepScanLineInputFile +{ +public: + //------------ + // Constructor + //------------ + + IMF_EXPORT + DeepScanLineInputFile ( + const char* filename, + const ContextInitializer& ctxtinit, + int numThreads = globalThreadCount ()); + + IMF_EXPORT + DeepScanLineInputFile ( + const char fileName[], int numThreads = globalThreadCount ()); + + IMF_EXPORT + DeepScanLineInputFile ( + OPENEXR_IMF_INTERNAL_NAMESPACE::IStream& is, + int numThreads = globalThreadCount ()); + + IMF_EXPORT + DeepScanLineInputFile ( + const Header& header, + OPENEXR_IMF_INTERNAL_NAMESPACE::IStream* is, + int version, /*version field from file*/ + int numThreads = globalThreadCount ()); + + //------------------------ + // Access to the file name + //------------------------ + + IMF_EXPORT + const char* fileName () const; + + //-------------------------- + // Access to the file header + //-------------------------- + + IMF_EXPORT + const Header& header () const; + + //---------------------------------- + // Access to the file format version + //---------------------------------- + + IMF_EXPORT + int version () const; + + //----------------------------------------------------------- + // Set the current frame buffer -- copies the FrameBuffer + // object into the InputFile object. + // + // The current frame buffer is the destination for the pixel + // data read from the file. The current frame buffer must be + // set at least once before readPixels() is called. + // The current frame buffer can be changed after each call + // to readPixels(). + //----------------------------------------------------------- + + IMF_EXPORT + void setFrameBuffer (const DeepFrameBuffer& frameBuffer); + + //----------------------------------- + // Access to the current frame buffer + //----------------------------------- + + IMF_EXPORT + const DeepFrameBuffer& frameBuffer () const; + + //--------------------------------------------------------------- + // Check if the file is complete: + // + // isComplete() returns true if all pixels in the data window are + // present in the input file, or false if any pixels are missing. + // (Another program may still be busy writing the file, or file + // writing may have been aborted prematurely.) + //--------------------------------------------------------------- + + IMF_EXPORT + bool isComplete () const; + + //--------------------------------------------------------------- + // Read pixel data: + // + // readPixels(s1,s2) reads all scan lines with y coordinates + // in the interval [min (s1, s2), max (s1, s2)] from the file, + // and stores them in the current frame buffer. + // + // Both s1 and s2 must be within the interval + // [header().dataWindow().min.y, header.dataWindow().max.y] + // + // The scan lines can be read from the file in random order, and + // individual scan lines may be skipped or read multiple times. + // For maximum efficiency, the scan lines should be read in the + // order in which they were written to the file. + // + // readPixels(s) calls readPixels(s,s). + // + // If threading is enabled, readPixels (s1, s2) tries to perform + // decopmression of multiple scanlines in parallel. + // + //--------------------------------------------------------------- + + IMF_EXPORT + void readPixels (int scanLine1, int scanLine2); + IMF_EXPORT + void readPixels (int scanLine); + + //--------------------------------------------------------------- + // Extract pixel data from pre-read block + // + // readPixels(rawPixelData,frameBuffer,s1,s2) reads all scan lines with y coordinates + // in the interval [min (s1, s2), max (s1, s2)] from the data provided and + // stores them in the provided frameBuffer. + // the data can be obtained from a call to rawPixelData() + // + // + // Both s1 and s2 must be within the data specified + // + // you must provide a frameBuffer with a samplecountslice, which must have been read + // and the data valid - readPixels uses your sample count buffer to compute + // offsets to the data it needs + // + // This call does not block, and is thread safe for clients with an existing + // threading model. The InputFile's frameBuffer is not used in this call. + // + // This call is only provided for clients which have an existing threading model in place + // and unpredictable access patterns to the data. + // The fastest way to read an entire image is to enable threading,use setFrameBuffer then + // readPixels(header().dataWindow().min.y, header.dataWindow().max.y) + // + //--------------------------------------------------------------- + + IMF_EXPORT + void readPixels ( + const char* rawPixelData, + const DeepFrameBuffer& frameBuffer, + int scanLine1, + int scanLine2) const; + + //---------------------------------------------- + // Read a block of raw pixel data from the file, + // without uncompressing it (this function is + // used to implement OutputFile::copyPixels()). + // note: returns the entire payload of the relevant chunk of data, not including part number + // including compressed and uncompressed sizes + // on entry, if pixelDataSize is insufficiently large, no bytes are read (pixelData can safely be NULL) + // on exit, pixelDataSize is the number of bytes required to read the chunk + // + //---------------------------------------------- + + IMF_EXPORT + void + rawPixelData (int firstScanLine, char* pixelData, uint64_t& pixelDataSize); + + //------------------------------------------------- + // firstScanLineInChunk() returns the row number of the first row that's stored in the + // same chunk as scanline y. Depending on the compression mode, this may not be the same as y + // + // lastScanLineInChunk() returns the row number of the last row that's stored in the same + // chunk as scanline y. Depending on the compression mode, this may not be the same as y. + // The last chunk in the file may be smaller than all the others + // + //------------------------------------------------ + IMF_EXPORT + int firstScanLineInChunk (int y) const; + IMF_EXPORT + int lastScanLineInChunk (int y) const; + + //----------------------------------------------------------- + // Read pixel sample counts into a slice in the frame buffer. + // + // readPixelSampleCounts(s1, s2) reads all the counts of + // pixel samples with y coordinates in the interval + // [min (s1, s2), max (s1, s2)] from the file, and stores + // them in the slice naming "sample count". + // + // Both s1 and s2 must be within the interval + // [header().dataWindow().min.y, header.dataWindow().max.y] + // + // readPixelSampleCounts(s) calls readPixelSampleCounts(s,s). + // + //----------------------------------------------------------- + + IMF_EXPORT + void readPixelSampleCounts (int scanline1, int scanline2); + IMF_EXPORT + void readPixelSampleCounts (int scanline); + + //---------------------------------------------------------- + // Read pixel sample counts into the provided frameBuffer + // using a block read of data read by rawPixelData + // for multi-scanline compression schemes, you must decode the entire block + // so scanline1=firstScanLineInChunk(y) and scanline2=lastScanLineInChunk(y) + // + // This call does not block, and is thread safe for clients with an existing + // threading model. The InputFile's frameBuffer is not used in this call. + // + // The fastest way to read an entire image is to enable threading in OpenEXR, use setFrameBuffer then + // readPixelSampleCounts(header().dataWindow().min.y, header.dataWindow().max.y) + // + //---------------------------------------------------------- + IMF_EXPORT + void readPixelSampleCounts ( + const char* rawdata, + const DeepFrameBuffer& frameBuffer, + int scanLine1, + int scanLine2) const; + +private: + Context _ctxt; + struct IMF_HIDDEN Data; + std::shared_ptr _data; + + IMF_HIDDEN DeepScanLineInputFile (InputPartData* part); + + friend class MultiPartInputFile; + friend class InputFile; + + friend void DeepScanLineOutputFile::copyPixels (DeepScanLineInputFile&); +}; + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT + +#endif diff --git a/third_party/tlRender-install-Release/include/OpenEXR/ImfDeepScanLineInputPart.h b/third_party/tlRender-install-Release/include/OpenEXR/ImfDeepScanLineInputPart.h new file mode 100644 index 00000000..3490fd2c --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenEXR/ImfDeepScanLineInputPart.h @@ -0,0 +1,158 @@ +// +// SPDX-License-Identifier: BSD-3-Clause +// Copyright (c) Contributors to the OpenEXR Project. +// + +#ifndef IMFDEEPSCANLINEINPUTPART_H_ +#define IMFDEEPSCANLINEINPUTPART_H_ + +#include "ImfForward.h" + +#include + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER + +class IMF_EXPORT_TYPE DeepScanLineInputPart +{ +public: + IMF_EXPORT + DeepScanLineInputPart (MultiPartInputFile& file, int partNumber); + + //------------------------ + // Access to the file name + //------------------------ + + IMF_EXPORT + const char* fileName () const; + + //-------------------------- + // Access to the file header + //-------------------------- + + IMF_EXPORT + const Header& header () const; + + //---------------------------------- + // Access to the file format version + //---------------------------------- + + IMF_EXPORT + int version () const; + + //----------------------------------------------------------- + // Set the current frame buffer -- copies the FrameBuffer + // object into the InputFile object. + // + // The current frame buffer is the destination for the pixel + // data read from the file. The current frame buffer must be + // set at least once before readPixels() is called. + // The current frame buffer can be changed after each call + // to readPixels(). + //----------------------------------------------------------- + + IMF_EXPORT + void setFrameBuffer (const DeepFrameBuffer& frameBuffer); + + //----------------------------------- + // Access to the current frame buffer + //----------------------------------- + + IMF_EXPORT + const DeepFrameBuffer& frameBuffer () const; + + //--------------------------------------------------------------- + // Check if the file is complete: + // + // isComplete() returns true if all pixels in the data window are + // present in the input file, or false if any pixels are missing. + // (Another program may still be busy writing the file, or file + // writing may have been aborted prematurely.) + //--------------------------------------------------------------- + + IMF_EXPORT + bool isComplete () const; + + //--------------------------------------------------------------- + // Read pixel data: + // + // readPixels(s1,s2) reads all scan lines with y coordinates + // in the interval [min (s1, s2), max (s1, s2)] from the file, + // and stores them in the current frame buffer. + // + // Both s1 and s2 must be within the interval + // [header().dataWindow().min.y, header.dataWindow().max.y] + // + // The scan lines can be read from the file in random order, and + // individual scan lines may be skipped or read multiple times. + // For maximum efficiency, the scan lines should be read in the + // order in which they were written to the file. + // + // readPixels(s) calls readPixels(s,s). + // + // If threading is enabled, readPixels (s1, s2) tries to perform + // decopmression of multiple scanlines in parallel. + // + //--------------------------------------------------------------- + + IMF_EXPORT + void readPixels (int scanLine1, int scanLine2); + IMF_EXPORT + void readPixels (int scanLine); + IMF_EXPORT + void readPixels ( + const char* rawPixelData, + const DeepFrameBuffer& frameBuffer, + int scanLine1, + int scanLine2) const; + + //---------------------------------------------- + // Read a block of raw pixel data from the file, + // without uncompressing it (this function is + // used to implement OutputFile::copyPixels()). + //---------------------------------------------- + + IMF_EXPORT + void + rawPixelData (int firstScanLine, char* pixelData, uint64_t& pixelDataSize); + + //----------------------------------------------------------- + // Read pixel sample counts into a slice in the frame buffer. + // + // readPixelSampleCounts(s1, s2) reads all the counts of + // pixel samples with y coordinates in the interval + // [min (s1, s2), max (s1, s2)] from the file, and stores + // them in the slice naming "sample count". + // + // Both s1 and s2 must be within the interval + // [header().dataWindow().min.y, header.dataWindow().max.y] + // + // readPixelSampleCounts(s) calls readPixelSampleCounts(s,s). + //----------------------------------------------------------- + + IMF_EXPORT + void readPixelSampleCounts (int scanline1, int scanline2); + IMF_EXPORT + void readPixelSampleCounts (int scanline); + + IMF_EXPORT + void readPixelSampleCounts ( + const char* rawdata, + const DeepFrameBuffer& frameBuffer, + int scanLine1, + int scanLine2) const; + + IMF_EXPORT + int firstScanLineInChunk (int y) const; + IMF_EXPORT + int lastScanLineInChunk (int y) const; + +private: + DeepScanLineInputFile* file; + + // needed for copyPixels + friend class DeepScanLineOutputFile; +}; + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT + +#endif /* IMFDEEPSCANLINEINPUTPART_H_ */ diff --git a/third_party/tlRender-install-Release/include/OpenEXR/ImfDeepScanLineOutputFile.h b/third_party/tlRender-install-Release/include/OpenEXR/ImfDeepScanLineOutputFile.h new file mode 100644 index 00000000..064eae66 --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenEXR/ImfDeepScanLineOutputFile.h @@ -0,0 +1,215 @@ +// +// SPDX-License-Identifier: BSD-3-Clause +// Copyright (c) Contributors to the OpenEXR Project. +// + +#ifndef INCLUDED_IMF_DEEP_SCAN_LINE_OUTPUT_FILE_H +#define INCLUDED_IMF_DEEP_SCAN_LINE_OUTPUT_FILE_H + +//----------------------------------------------------------------------------- +// +// class DeepScanLineOutputFile +// +//----------------------------------------------------------------------------- + +#include "ImfExport.h" +#include "ImfForward.h" +#include "ImfFrameBuffer.h" +#include "ImfGenericOutputFile.h" +#include "ImfHeader.h" +#include "ImfNamespace.h" +#include "ImfThreading.h" + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER + +struct PreviewRgba; + +class DeepScanLineOutputFile : public GenericOutputFile +{ +public: + //----------------------------------------------------------- + // Constructor -- opens the file and writes the file header. + // The file header is also copied into the DeepScanLineOutputFile + // object, and can later be accessed via the header() method. + // Destroying this DeepScanLineOutputFile object automatically closes + // the file. + // + // numThreads determines the number of threads that will be + // used to write the file (see ImfThreading.h). + //----------------------------------------------------------- + + IMF_EXPORT + DeepScanLineOutputFile ( + const char fileName[], + const Header& header, + int numThreads = globalThreadCount ()); + + //------------------------------------------------------------ + // Constructor -- attaches the new DeepScanLineOutputFile object + // to a file that has already been opened, and writes the file header. + // The file header is also copied into the DeepScanLineOutputFile + // object, and can later be accessed via the header() method. + // Destroying this DeepScanLineOutputFile object does not automatically + // close the file. + // + // numThreads determines the number of threads that will be + // used to write the file (see ImfThreading.h). + //------------------------------------------------------------ + + IMF_EXPORT + DeepScanLineOutputFile ( + OPENEXR_IMF_INTERNAL_NAMESPACE::OStream& os, + const Header& header, + int numThreads = globalThreadCount ()); + + //------------------------------------------------- + // Destructor + // + // Destroying the DeepScanLineOutputFile object + // before writing all scan lines within the data + // window results in an incomplete file. + //------------------------------------------------- + + IMF_EXPORT + virtual ~DeepScanLineOutputFile (); + + //------------------------ + // Access to the file name + //------------------------ + + IMF_EXPORT + const char* fileName () const; + + //-------------------------- + // Access to the file header + //-------------------------- + + IMF_EXPORT + const Header& header () const; + + //------------------------------------------------------- + // Set the current frame buffer -- copies the FrameBuffer + // object into the OutputFile object. + // + // The current frame buffer is the source of the pixel + // data written to the file. The current frame buffer + // must be set at least once before writePixels() is + // called. The current frame buffer can be changed + // after each call to writePixels. + //------------------------------------------------------- + + IMF_EXPORT + void setFrameBuffer (const DeepFrameBuffer& frameBuffer); + + //----------------------------------- + // Access to the current frame buffer + //----------------------------------- + + IMF_EXPORT + const DeepFrameBuffer& frameBuffer () const; + + //------------------------------------------------------------------- + // Write pixel data: + // + // writePixels(n) retrieves the next n scan lines worth of data from + // the current frame buffer, starting with the scan line indicated by + // currentScanLine(), and stores the data in the output file, and + // progressing in the direction indicated by header.lineOrder(). + // + // To produce a complete and correct file, exactly m scan lines must + // be written, where m is equal to + // header().dataWindow().max.y - header().dataWindow().min.y + 1. + //------------------------------------------------------------------- + + IMF_EXPORT + void writePixels (int numScanLines = 1); + + //------------------------------------------------------------------ + // Access to the current scan line: + // + // currentScanLine() returns the y coordinate of the first scan line + // that will be read from the current frame buffer during the next + // call to writePixels(). + // + // If header.lineOrder() == INCREASING_Y: + // + // The current scan line before the first call to writePixels() + // is header().dataWindow().min.y. After writing each scan line, + // the current scan line is incremented by 1. + // + // If header.lineOrder() == DECREASING_Y: + // + // The current scan line before the first call to writePixels() + // is header().dataWindow().max.y. After writing each scan line, + // the current scan line is decremented by 1. + // + //------------------------------------------------------------------ + + IMF_EXPORT + int currentScanLine () const; + + //-------------------------------------------------------------- + // Shortcut to copy all pixels from an InputFile into this file, + // without uncompressing and then recompressing the pixel data. + // This file's header must be compatible with the InputFile's + // header: The two header's "dataWindow", "compression", + // "lineOrder" and "channels" attributes must be the same. + //-------------------------------------------------------------- + + IMF_EXPORT + void copyPixels (DeepScanLineInputFile& in); + + // -------------------------------------------------------------- + // Shortcut to copy pixels from a given part of a multipart file + // -------------------------------------------------------------- + IMF_EXPORT + void copyPixels (DeepScanLineInputPart& in); + + //-------------------------------------------------------------- + // Updating the preview image: + // + // updatePreviewImage() supplies a new set of pixels for the + // preview image attribute in the file's header. If the header + // does not contain a preview image, updatePreviewImage() throws + // an IEX_NAMESPACE::LogicExc. + // + // Note: updatePreviewImage() is necessary because images are + // often stored in a file incrementally, a few scan lines at a + // time, while the image is being generated. Since the preview + // image is an attribute in the file's header, it gets stored in + // the file as soon as the file is opened, but we may not know + // what the preview image should look like until we have written + // the last scan line of the main image. + // + //-------------------------------------------------------------- + + IMF_EXPORT + void updatePreviewImage (const PreviewRgba newPixels[]); + + struct Data; + +private: + //------------------------------------------------------------ + // Constructor -- attaches the OutputStreamMutex to the + // given one from MultiPartOutputFile. Set the previewPosition + // and lineOffsetsPosition which have been acquired from + // the constructor of MultiPartOutputFile as well. + //------------------------------------------------------------ + DeepScanLineOutputFile (const OutputPartData* part); + + DeepScanLineOutputFile (const DeepScanLineOutputFile&) = delete; + DeepScanLineOutputFile& operator= (const DeepScanLineOutputFile&) = delete; + DeepScanLineOutputFile (DeepScanLineOutputFile&&) = delete; + DeepScanLineOutputFile& operator= (DeepScanLineOutputFile&&) = delete; + + void initialize (const Header& header); + void initializeLineBuffer (); + + Data* _data; + + friend class MultiPartOutputFile; +}; + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT + +#endif diff --git a/third_party/tlRender-install-Release/include/OpenEXR/ImfDeepScanLineOutputPart.h b/third_party/tlRender-install-Release/include/OpenEXR/ImfDeepScanLineOutputPart.h new file mode 100644 index 00000000..abaebaa4 --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenEXR/ImfDeepScanLineOutputPart.h @@ -0,0 +1,137 @@ +// +// SPDX-License-Identifier: BSD-3-Clause +// Copyright (c) Contributors to the OpenEXR Project. +// + +#ifndef IMFDEEPSCANLINEOUTPUTPART_H_ +#define IMFDEEPSCANLINEOUTPUTPART_H_ + +#include "ImfDeepScanLineOutputFile.h" +#include "ImfExport.h" +#include "ImfMultiPartOutputFile.h" +#include "ImfNamespace.h" + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER + +class DeepScanLineOutputPart +{ +public: + IMF_EXPORT + DeepScanLineOutputPart (MultiPartOutputFile& multiPartFile, int partNumber); + + //------------------------ + // Access to the file name + //------------------------ + + IMF_EXPORT + const char* fileName () const; + + //-------------------------- + // Access to the file header + //-------------------------- + + IMF_EXPORT + const Header& header () const; + + //------------------------------------------------------- + // Set the current frame buffer -- copies the FrameBuffer + // object into the OutputFile object. + // + // The current frame buffer is the source of the pixel + // data written to the file. The current frame buffer + // must be set at least once before writePixels() is + // called. The current frame buffer can be changed + // after each call to writePixels. + //------------------------------------------------------- + + IMF_EXPORT + void setFrameBuffer (const DeepFrameBuffer& frameBuffer); + + //----------------------------------- + // Access to the current frame buffer + //----------------------------------- + + IMF_EXPORT + const DeepFrameBuffer& frameBuffer () const; + + //------------------------------------------------------------------- + // Write pixel data: + // + // writePixels(n) retrieves the next n scan lines worth of data from + // the current frame buffer, starting with the scan line indicated by + // currentScanLine(), and stores the data in the output file, and + // progressing in the direction indicated by header.lineOrder(). + // + // To produce a complete and correct file, exactly m scan lines must + // be written, where m is equal to + // header().dataWindow().max.y - header().dataWindow().min.y + 1. + //------------------------------------------------------------------- + + IMF_EXPORT + void writePixels (int numScanLines = 1); + + //------------------------------------------------------------------ + // Access to the current scan line: + // + // currentScanLine() returns the y coordinate of the first scan line + // that will be read from the current frame buffer during the next + // call to writePixels(). + // + // If header.lineOrder() == INCREASING_Y: + // + // The current scan line before the first call to writePixels() + // is header().dataWindow().min.y. After writing each scan line, + // the current scan line is incremented by 1. + // + // If header.lineOrder() == DECREASING_Y: + // + // The current scan line before the first call to writePixels() + // is header().dataWindow().max.y. After writing each scan line, + // the current scan line is decremented by 1. + // + //------------------------------------------------------------------ + + IMF_EXPORT + int currentScanLine () const; + + //-------------------------------------------------------------- + // Shortcut to copy all pixels from an InputFile into this file, + // without uncompressing and then recompressing the pixel data. + // This file's header must be compatible with the InputFile's + // header: The two header's "dataWindow", "compression", + // "lineOrder" and "channels" attributes must be the same. + //-------------------------------------------------------------- + + IMF_EXPORT + void copyPixels (DeepScanLineInputFile& in); + IMF_EXPORT + void copyPixels (DeepScanLineInputPart& in); + + //-------------------------------------------------------------- + // Updating the preview image: + // + // updatePreviewImage() supplies a new set of pixels for the + // preview image attribute in the file's header. If the header + // does not contain a preview image, updatePreviewImage() throws + // an IEX_NAMESPACE::LogicExc. + // + // Note: updatePreviewImage() is necessary because images are + // often stored in a file incrementally, a few scan lines at a + // time, while the image is being generated. Since the preview + // image is an attribute in the file's header, it gets stored in + // the file as soon as the file is opened, but we may not know + // what the preview image should look like until we have written + // the last scan line of the main image. + // + //-------------------------------------------------------------- + + IMF_EXPORT + void updatePreviewImage (const PreviewRgba newPixels[]); + +private: + DeepScanLineOutputFile* file; +}; + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT + +#endif /* IMFDEEPSCANLINEOUTPUTPART_H_ */ diff --git a/third_party/tlRender-install-Release/include/OpenEXR/ImfDeepTiledInputFile.h b/third_party/tlRender-install-Release/include/OpenEXR/ImfDeepTiledInputFile.h new file mode 100644 index 00000000..a3c3d88e --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenEXR/ImfDeepTiledInputFile.h @@ -0,0 +1,403 @@ +// +// SPDX-License-Identifier: BSD-3-Clause +// Copyright (c) Contributors to the OpenEXR Project. +// + +#ifndef INCLUDED_IMF_DEEP_TILED_INPUT_FILE_H +#define INCLUDED_IMF_DEEP_TILED_INPUT_FILE_H + +//----------------------------------------------------------------------------- +// +// class DeepTiledInputFile +// +//----------------------------------------------------------------------------- + +#include "ImfForward.h" + +#include "ImfContext.h" + +#include "ImfThreading.h" + +#include "ImfTileDescription.h" + +#include + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER + +class IMF_EXPORT_TYPE DeepTiledInputFile +{ +public: + //-------------------------------------------------------------------- + // A constructor that opens the file with the specified name, and + // reads the file header. The constructor throws an IEX_NAMESPACE::ArgExc + // exception if the file is not tiled. + // The numThreads parameter specifies how many worker threads this + // file will try to keep busy when decompressing individual tiles. + // Destroying TiledInputFile objects constructed with this constructor + // automatically closes the corresponding files. + //-------------------------------------------------------------------- + + IMF_EXPORT + DeepTiledInputFile ( + const char fileName[], int numThreads = globalThreadCount ()); + + // ---------------------------------------------------------- + // A constructor that attaches the new TiledInputFile object + // to a file that has already been opened. + // Destroying TiledInputFile objects constructed with this + // constructor does not automatically close the corresponding + // files. + // ---------------------------------------------------------- + + IMF_EXPORT + DeepTiledInputFile ( + OPENEXR_IMF_INTERNAL_NAMESPACE::IStream& is, + int numThreads = globalThreadCount ()); + + IMF_EXPORT + DeepTiledInputFile ( + const char* filename, + const ContextInitializer& ctxtinit, + int numThreads = globalThreadCount ()); + + //------------------------ + // Access to the file name + //------------------------ + + IMF_EXPORT + const char* fileName () const; + + //-------------------------- + // Access to the file header + //-------------------------- + + IMF_EXPORT + const Header& header () const; + + //---------------------------------- + // Access to the file format version + //---------------------------------- + + IMF_EXPORT + int version () const; + + //----------------------------------------------------------- + // Set the current frame buffer -- copies the FrameBuffer + // object into the TiledInputFile object. + // + // The current frame buffer is the destination for the pixel + // data read from the file. The current frame buffer must be + // set at least once before readTile() is called. + // The current frame buffer can be changed after each call + // to readTile(). + //----------------------------------------------------------- + + IMF_EXPORT + void setFrameBuffer (const DeepFrameBuffer& frameBuffer); + + //----------------------------------- + // Access to the current frame buffer + //----------------------------------- + + IMF_EXPORT + const DeepFrameBuffer& frameBuffer () const; + + //------------------------------------------------------------ + // Check if the file is complete: + // + // isComplete() returns true if all pixels in the data window + // (in all levels) are present in the input file, or false if + // any pixels are missing. (Another program may still be busy + // writing the file, or file writing may have been aborted + // prematurely.) + //------------------------------------------------------------ + + IMF_EXPORT + bool isComplete () const; + + //-------------------------------------------------- + // Utility functions: + //-------------------------------------------------- + + //--------------------------------------------------------- + // Multiresolution mode and tile size: + // The following functions return the xSize, ySize and mode + // fields of the file header's TileDescriptionAttribute. + //--------------------------------------------------------- + + IMF_EXPORT + unsigned int tileXSize () const; + IMF_EXPORT + unsigned int tileYSize () const; + IMF_EXPORT + LevelMode levelMode () const; + IMF_EXPORT + LevelRoundingMode levelRoundingMode () const; + + //-------------------------------------------------------------------- + // Number of levels: + // + // numXLevels() returns the file's number of levels in x direction. + // + // if levelMode() == ONE_LEVEL: + // return value is: 1 + // + // if levelMode() == MIPMAP_LEVELS: + // return value is: rfunc (log (max (w, h)) / log (2)) + 1 + // + // if levelMode() == RIPMAP_LEVELS: + // return value is: rfunc (log (w) / log (2)) + 1 + // + // where + // w is the width of the image's data window, max.x - min.x + 1, + // y is the height of the image's data window, max.y - min.y + 1, + // and rfunc(x) is either floor(x), or ceil(x), depending on + // whether levelRoundingMode() returns ROUND_DOWN or ROUND_UP. + // + // numYLevels() returns the file's number of levels in y direction. + // + // if levelMode() == ONE_LEVEL or levelMode() == MIPMAP_LEVELS: + // return value is the same as for numXLevels() + // + // if levelMode() == RIPMAP_LEVELS: + // return value is: rfunc (log (h) / log (2)) + 1 + // + // + // numLevels() is a convenience function for use with + // MIPMAP_LEVELS files. + // + // if levelMode() == ONE_LEVEL or levelMode() == MIPMAP_LEVELS: + // return value is the same as for numXLevels() + // + // if levelMode() == RIPMAP_LEVELS: + // an IEX_NAMESPACE::LogicExc exception is thrown + // + // isValidLevel(lx, ly) returns true if the file contains + // a level with level number (lx, ly), false if not. + // + // totalTiles() returns the total number of tiles in the image + // + //-------------------------------------------------------------------- + + IMF_EXPORT + int numLevels () const; + IMF_EXPORT + int numXLevels () const; + IMF_EXPORT + int numYLevels () const; + IMF_EXPORT + bool isValidLevel (int lx, int ly) const; + IMF_EXPORT + size_t totalTiles () const; + + //---------------------------------------------------------- + // Dimensions of a level: + // + // levelWidth(lx) returns the width of a level with level + // number (lx, *), where * is any number. + // + // return value is: + // max (1, rfunc (w / pow (2, lx))) + // + // + // levelHeight(ly) returns the height of a level with level + // number (*, ly), where * is any number. + // + // return value is: + // max (1, rfunc (h / pow (2, ly))) + // + //---------------------------------------------------------- + + IMF_EXPORT + int levelWidth (int lx) const; + IMF_EXPORT + int levelHeight (int ly) const; + + //-------------------------------------------------------------- + // Number of tiles: + // + // numXTiles(lx) returns the number of tiles in x direction + // that cover a level with level number (lx, *), where * is + // any number. + // + // return value is: + // (levelWidth(lx) + tileXSize() - 1) / tileXSize() + // + // + // numYTiles(ly) returns the number of tiles in y direction + // that cover a level with level number (*, ly), where * is + // any number. + // + // return value is: + // (levelHeight(ly) + tileXSize() - 1) / tileXSize() + // + //-------------------------------------------------------------- + + IMF_EXPORT + int numXTiles (int lx = 0) const; + IMF_EXPORT + int numYTiles (int ly = 0) const; + + //--------------------------------------------------------------- + // Level pixel ranges: + // + // dataWindowForLevel(lx, ly) returns a 2-dimensional region of + // valid pixel coordinates for a level with level number (lx, ly) + // + // return value is a Box2i with min value: + // (dataWindow.min.x, dataWindow.min.y) + // + // and max value: + // (dataWindow.min.x + levelWidth(lx) - 1, + // dataWindow.min.y + levelHeight(ly) - 1) + // + // dataWindowForLevel(level) is a convenience function used + // for ONE_LEVEL and MIPMAP_LEVELS files. It returns + // dataWindowForLevel(level, level). + // + //--------------------------------------------------------------- + + IMF_EXPORT + IMATH_NAMESPACE::Box2i dataWindowForLevel (int l = 0) const; + IMF_EXPORT + IMATH_NAMESPACE::Box2i dataWindowForLevel (int lx, int ly) const; + + //------------------------------------------------------------------- + // Tile pixel ranges: + // + // dataWindowForTile(dx, dy, lx, ly) returns a 2-dimensional + // region of valid pixel coordinates for a tile with tile coordinates + // (dx,dy) and level number (lx, ly). + // + // return value is a Box2i with min value: + // (dataWindow.min.x + dx * tileXSize(), + // dataWindow.min.y + dy * tileYSize()) + // + // and max value: + // (dataWindow.min.x + (dx + 1) * tileXSize() - 1, + // dataWindow.min.y + (dy + 1) * tileYSize() - 1) + // + // dataWindowForTile(dx, dy, level) is a convenience function + // used for ONE_LEVEL and MIPMAP_LEVELS files. It returns + // dataWindowForTile(dx, dy, level, level). + // + //------------------------------------------------------------------- + + IMF_EXPORT + IMATH_NAMESPACE::Box2i dataWindowForTile (int dx, int dy, int l = 0) const; + + IMF_EXPORT + IMATH_NAMESPACE::Box2i + dataWindowForTile (int dx, int dy, int lx, int ly) const; + + //------------------------------------------------------------ + // Read pixel data: + // + // readTile(dx, dy, lx, ly) reads the tile with tile + // coordinates (dx, dy), and level number (lx, ly), + // and stores it in the current frame buffer. + // + // dx must lie in the interval [0, numXTiles(lx)-1] + // dy must lie in the interval [0, numYTiles(ly)-1] + // + // lx must lie in the interval [0, numXLevels()-1] + // ly must lie in the interval [0, numYLevels()-1] + // + // readTile(dx, dy, level) is a convenience function used + // for ONE_LEVEL and MIPMAP_LEVELS files. It calls + // readTile(dx, dy, level, level). + // + // The two readTiles(dx1, dx2, dy1, dy2, ...) functions allow + // reading multiple tiles at once. If multi-threading is used + // the multiple tiles are read concurrently. + // + // Pixels that are outside the pixel coordinate range for the + // tile's level, are never accessed by readTile(). + // + // Attempting to access a tile that is not present in the file + // throws an InputExc exception. + // + //------------------------------------------------------------ + + IMF_EXPORT + void readTile (int dx, int dy, int l = 0); + IMF_EXPORT + void readTile (int dx, int dy, int lx, int ly); + + IMF_EXPORT + void readTiles (int dx1, int dx2, int dy1, int dy2, int lx, int ly); + + IMF_EXPORT + void readTiles (int dx1, int dx2, int dy1, int dy2, int l = 0); + + //-------------------------------------------------- + // Read a tile of raw pixel data from the file, + // without uncompressing it (this function is + // used to implement TiledOutputFile::copyPixels()). + //-------------------------------------------------- + + IMF_EXPORT + void rawTileData ( + int& dx, int& dy, int& lx, int& ly, char* pixelData, uint64_t& dataSize) + const; + + //------------------------------------------------------------------ + // Read pixel sample counts into a slice in the frame buffer. + // + // readPixelSampleCount(dx, dy, lx, ly) reads the sample counts + // for tile (dx, dy) in level (lx, ly). + // + // readPixelSampleCount(dx, dy, l) calls + // readPixelSampleCount(dx, dy, lx = l, ly = l) + // + // dx must lie in the interval [0, numXTiles(lx)-1] + // dy must lie in the interval [0, numYTiles(ly)-1] + // + // lx must lie in the interval [0, numXLevels()-1] + // ly must lie in the interval [0, numYLevels()-1] + // + // readPixelSampleCounts(dx1, dx2, dy1, dy2, lx, ly) reads all + // the sample counts for tiles within range + // [(min(dx1, dx2), min(dy1, dy2))...(max(dx1, dx2), max(dy1, dy2)], + // and on level (lx, ly) + // + // readPixelSampleCounts(dx1, dx2, dy1, dy2, l) calls + // readPixelSampleCounts(dx1, dx2, dy1, dy2, lx = l, ly = l). + //------------------------------------------------------------------ + + IMF_EXPORT + void readPixelSampleCount (int dx, int dy, int l = 0); + IMF_EXPORT + void readPixelSampleCount (int dx, int dy, int lx, int ly); + + IMF_EXPORT + void + readPixelSampleCounts (int dx1, int dx2, int dy1, int dy2, int lx, int ly); + + IMF_EXPORT + void readPixelSampleCounts (int dx1, int dx2, int dy1, int dy2, int l = 0); + +private: + Context _ctxt; + struct IMF_HIDDEN Data; + std::shared_ptr _data; + + IMF_HIDDEN + DeepTiledInputFile (InputPartData* part); + + bool isValidTile (int dx, int dy, int lx, int ly) const; + + size_t bytesPerLineForTile (int dx, int dy, int lx, int ly) const; + + void getTileOrder (int dx[], int dy[], int lx[], int ly[]) const; + + friend class InputFile; + friend class MultiPartInputFile; + + // needed for copyPixels + friend class DeepTiledOutputFile; +}; + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT + +#endif diff --git a/third_party/tlRender-install-Release/include/OpenEXR/ImfDeepTiledInputPart.h b/third_party/tlRender-install-Release/include/OpenEXR/ImfDeepTiledInputPart.h new file mode 100644 index 00000000..7106cfb5 --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenEXR/ImfDeepTiledInputPart.h @@ -0,0 +1,345 @@ +// +// SPDX-License-Identifier: BSD-3-Clause +// Copyright (c) Contributors to the OpenEXR Project. +// + +#ifndef IMFDEEPTILEDINPUTPART_H_ +#define IMFDEEPTILEDINPUTPART_H_ + +#include "ImfForward.h" + +#include "ImfTileDescription.h" + +#include +#include + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER + +class IMF_EXPORT_TYPE DeepTiledInputPart +{ +public: + IMF_EXPORT + DeepTiledInputPart (MultiPartInputFile& multiPartFile, int partNumber); + + //------------------------ + // Access to the file name + //------------------------ + + IMF_EXPORT + const char* fileName () const; + + //-------------------------- + // Access to the file header + //-------------------------- + + IMF_EXPORT + const Header& header () const; + + //---------------------------------- + // Access to the file format version + //---------------------------------- + + IMF_EXPORT + int version () const; + + //----------------------------------------------------------- + // Set the current frame buffer -- copies the FrameBuffer + // object into the TiledInputFile object. + // + // The current frame buffer is the destination for the pixel + // data read from the file. The current frame buffer must be + // set at least once before readTile() is called. + // The current frame buffer can be changed after each call + // to readTile(). + //----------------------------------------------------------- + + IMF_EXPORT + void setFrameBuffer (const DeepFrameBuffer& frameBuffer); + + //----------------------------------- + // Access to the current frame buffer + //----------------------------------- + + IMF_EXPORT + const DeepFrameBuffer& frameBuffer () const; + + //------------------------------------------------------------ + // Check if the file is complete: + // + // isComplete() returns true if all pixels in the data window + // (in all levels) are present in the input file, or false if + // any pixels are missing. (Another program may still be busy + // writing the file, or file writing may have been aborted + // prematurely.) + //------------------------------------------------------------ + + IMF_EXPORT + bool isComplete () const; + + //-------------------------------------------------- + // Utility functions: + //-------------------------------------------------- + + //--------------------------------------------------------- + // Multiresolution mode and tile size: + // The following functions return the xSize, ySize and mode + // fields of the file header's TileDescriptionAttribute. + //--------------------------------------------------------- + + IMF_EXPORT + unsigned int tileXSize () const; + IMF_EXPORT + unsigned int tileYSize () const; + IMF_EXPORT + LevelMode levelMode () const; + IMF_EXPORT + LevelRoundingMode levelRoundingMode () const; + + //-------------------------------------------------------------------- + // Number of levels: + // + // numXLevels() returns the file's number of levels in x direction. + // + // if levelMode() == ONE_LEVEL: + // return value is: 1 + // + // if levelMode() == MIPMAP_LEVELS: + // return value is: rfunc (log (max (w, h)) / log (2)) + 1 + // + // if levelMode() == RIPMAP_LEVELS: + // return value is: rfunc (log (w) / log (2)) + 1 + // + // where + // w is the width of the image's data window, max.x - min.x + 1, + // y is the height of the image's data window, max.y - min.y + 1, + // and rfunc(x) is either floor(x), or ceil(x), depending on + // whether levelRoundingMode() returns ROUND_DOWN or ROUND_UP. + // + // numYLevels() returns the file's number of levels in y direction. + // + // if levelMode() == ONE_LEVEL or levelMode() == MIPMAP_LEVELS: + // return value is the same as for numXLevels() + // + // if levelMode() == RIPMAP_LEVELS: + // return value is: rfunc (log (h) / log (2)) + 1 + // + // + // numLevels() is a convenience function for use with + // MIPMAP_LEVELS files. + // + // if levelMode() == ONE_LEVEL or levelMode() == MIPMAP_LEVELS: + // return value is the same as for numXLevels() + // + // if levelMode() == RIPMAP_LEVELS: + // an IEX_NAMESPACE::LogicExc exception is thrown + // + // isValidLevel(lx, ly) returns true if the file contains + // a level with level number (lx, ly), false if not. + // + //-------------------------------------------------------------------- + + IMF_EXPORT + int numLevels () const; + IMF_EXPORT + int numXLevels () const; + IMF_EXPORT + int numYLevels () const; + IMF_EXPORT + bool isValidLevel (int lx, int ly) const; + + //---------------------------------------------------------- + // Dimensions of a level: + // + // levelWidth(lx) returns the width of a level with level + // number (lx, *), where * is any number. + // + // return value is: + // max (1, rfunc (w / pow (2, lx))) + // + // + // levelHeight(ly) returns the height of a level with level + // number (*, ly), where * is any number. + // + // return value is: + // max (1, rfunc (h / pow (2, ly))) + // + //---------------------------------------------------------- + + IMF_EXPORT + int levelWidth (int lx) const; + IMF_EXPORT + int levelHeight (int ly) const; + + //-------------------------------------------------------------- + // Number of tiles: + // + // numXTiles(lx) returns the number of tiles in x direction + // that cover a level with level number (lx, *), where * is + // any number. + // + // return value is: + // (levelWidth(lx) + tileXSize() - 1) / tileXSize() + // + // + // numYTiles(ly) returns the number of tiles in y direction + // that cover a level with level number (*, ly), where * is + // any number. + // + // return value is: + // (levelHeight(ly) + tileXSize() - 1) / tileXSize() + // + //-------------------------------------------------------------- + + IMF_EXPORT + int numXTiles (int lx = 0) const; + IMF_EXPORT + int numYTiles (int ly = 0) const; + + //--------------------------------------------------------------- + // Level pixel ranges: + // + // dataWindowForLevel(lx, ly) returns a 2-dimensional region of + // valid pixel coordinates for a level with level number (lx, ly) + // + // return value is a Box2i with min value: + // (dataWindow.min.x, dataWindow.min.y) + // + // and max value: + // (dataWindow.min.x + levelWidth(lx) - 1, + // dataWindow.min.y + levelHeight(ly) - 1) + // + // dataWindowForLevel(level) is a convenience function used + // for ONE_LEVEL and MIPMAP_LEVELS files. It returns + // dataWindowForLevel(level, level). + // + //--------------------------------------------------------------- + + IMF_EXPORT + IMATH_NAMESPACE::Box2i dataWindowForLevel (int l = 0) const; + IMF_EXPORT + IMATH_NAMESPACE::Box2i dataWindowForLevel (int lx, int ly) const; + + //------------------------------------------------------------------- + // Tile pixel ranges: + // + // dataWindowForTile(dx, dy, lx, ly) returns a 2-dimensional + // region of valid pixel coordinates for a tile with tile coordinates + // (dx,dy) and level number (lx, ly). + // + // return value is a Box2i with min value: + // (dataWindow.min.x + dx * tileXSize(), + // dataWindow.min.y + dy * tileYSize()) + // + // and max value: + // (dataWindow.min.x + (dx + 1) * tileXSize() - 1, + // dataWindow.min.y + (dy + 1) * tileYSize() - 1) + // + // dataWindowForTile(dx, dy, level) is a convenience function + // used for ONE_LEVEL and MIPMAP_LEVELS files. It returns + // dataWindowForTile(dx, dy, level, level). + // + //------------------------------------------------------------------- + + IMF_EXPORT + IMATH_NAMESPACE::Box2i dataWindowForTile (int dx, int dy, int l = 0) const; + + IMF_EXPORT + IMATH_NAMESPACE::Box2i + dataWindowForTile (int dx, int dy, int lx, int ly) const; + + //------------------------------------------------------------ + // Read pixel data: + // + // readTile(dx, dy, lx, ly) reads the tile with tile + // coordinates (dx, dy), and level number (lx, ly), + // and stores it in the current frame buffer. + // + // dx must lie in the interval [0, numXTiles(lx)-1] + // dy must lie in the interval [0, numYTiles(ly)-1] + // + // lx must lie in the interval [0, numXLevels()-1] + // ly must lie in the interval [0, numYLevels()-1] + // + // readTile(dx, dy, level) is a convenience function used + // for ONE_LEVEL and MIPMAP_LEVELS files. It calls + // readTile(dx, dy, level, level). + // + // The two readTiles(dx1, dx2, dy1, dy2, ...) functions allow + // reading multiple tiles at once. If multi-threading is used + // the multiple tiles are read concurrently. + // + // Pixels that are outside the pixel coordinate range for the + // tile's level, are never accessed by readTile(). + // + // Attempting to access a tile that is not present in the file + // throws an InputExc exception. + // + //------------------------------------------------------------ + + IMF_EXPORT + void readTile (int dx, int dy, int l = 0); + IMF_EXPORT + void readTile (int dx, int dy, int lx, int ly); + + IMF_EXPORT + void readTiles (int dx1, int dx2, int dy1, int dy2, int lx, int ly); + + IMF_EXPORT + void readTiles (int dx1, int dx2, int dy1, int dy2, int l = 0); + + //-------------------------------------------------- + // Read a tile of raw pixel data from the file, + // without uncompressing it (this function is + // used to implement TiledOutputFile::copyPixels()). + //-------------------------------------------------- + + IMF_EXPORT + void rawTileData ( + int& dx, int& dy, int& lx, int& ly, char* data, uint64_t& dataSize) + const; + + //------------------------------------------------------------------ + // Read pixel sample counts into a slice in the frame buffer. + // + // readPixelSampleCount(dx, dy, lx, ly) reads the sample counts + // for tile (dx, dy) in level (lx, ly). + // + // readPixelSampleCount(dx, dy, l) calls + // readPixelSampleCount(dx, dy, lx = l, ly = l) + // + // dx must lie in the interval [0, numXTiles(lx)-1] + // dy must lie in the interval [0, numYTiles(ly)-1] + // + // lx must lie in the interval [0, numXLevels()-1] + // ly must lie in the interval [0, numYLevels()-1] + // + // readPixelSampleCounts(dx1, dx2, dy1, dy2, lx, ly) reads all + // the sample counts for tiles within range + // [(min(dx1, dx2), min(dy1, dy2))...(max(dx1, dx2), max(dy1, dy2)], + // and on level (lx, ly) + // + // readPixelSampleCounts(dx1, dx2, dy1, dy2, l) calls + // readPixelSampleCounts(dx1, dx2, dy1, dy2, lx = l, ly = l). + //------------------------------------------------------------------ + + IMF_EXPORT + void readPixelSampleCount (int dx, int dy, int l = 0); + IMF_EXPORT + void readPixelSampleCount (int dx, int dy, int lx, int ly); + + IMF_EXPORT + void + readPixelSampleCounts (int dx1, int dx2, int dy1, int dy2, int lx, int ly); + + IMF_EXPORT + void readPixelSampleCounts (int dx1, int dx2, int dy1, int dy2, int l = 0); + +private: + DeepTiledInputFile* file; + + friend class DeepTiledOutputFile; +}; + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT + +#endif /* IMFDEEPTILEDINPUTPART_H_ */ diff --git a/third_party/tlRender-install-Release/include/OpenEXR/ImfDeepTiledOutputFile.h b/third_party/tlRender-install-Release/include/OpenEXR/ImfDeepTiledOutputFile.h new file mode 100644 index 00000000..7354b7b5 --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenEXR/ImfDeepTiledOutputFile.h @@ -0,0 +1,450 @@ +// +// SPDX-License-Identifier: BSD-3-Clause +// Copyright (c) Contributors to the OpenEXR Project. +// + +#ifndef INCLUDED_IMF_DEEP_TILED_OUTPUT_FILE_H +#define INCLUDED_IMF_DEEP_TILED_OUTPUT_FILE_H + +//----------------------------------------------------------------------------- +// +// class DeepTiledOutputFile +// +//----------------------------------------------------------------------------- + +#include "ImfForward.h" + +#include "ImfGenericOutputFile.h" +#include "ImfThreading.h" + +#include "ImfTileDescription.h" + +#include + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER + +class IMF_EXPORT_TYPE DeepTiledOutputFile : public GenericOutputFile +{ +public: + //------------------------------------------------------------------- + // A constructor that opens the file with the specified name, and + // writes the file header. The file header is also copied into the + // TiledOutputFile object, and can later be accessed via the header() + // method. + // + // Destroying TiledOutputFile constructed with this constructor + // automatically closes the corresponding files. + // + // The header must contain a TileDescriptionAttribute called "tiles". + // + // The x and y subsampling factors for all image channels must be 1; + // subsampling is not supported. + // + // Tiles can be written to the file in arbitrary order. The line + // order attribute can be used to cause the tiles to be sorted in + // the file. When the file is read later, reading the tiles in the + // same order as they are in the file tends to be significantly + // faster than reading the tiles in random order (see writeTile, + // below). + //------------------------------------------------------------------- + + IMF_EXPORT + DeepTiledOutputFile ( + const char fileName[], + const Header& header, + int numThreads = globalThreadCount ()); + + // ---------------------------------------------------------------- + // A constructor that attaches the new TiledOutputFile object to + // a file that has already been opened. Destroying TiledOutputFile + // objects constructed with this constructor does not automatically + // close the corresponding files. + // ---------------------------------------------------------------- + + IMF_EXPORT + DeepTiledOutputFile ( + OPENEXR_IMF_INTERNAL_NAMESPACE::OStream& os, + const Header& header, + int numThreads = globalThreadCount ()); + + //----------------------------------------------------- + // Destructor + // + // Destroying a TiledOutputFile object before all tiles + // have been written results in an incomplete file. + //----------------------------------------------------- + + IMF_EXPORT + virtual ~DeepTiledOutputFile (); + + //------------------------ + // Access to the file name + //------------------------ + + IMF_EXPORT + const char* fileName () const; + + //-------------------------- + // Access to the file header + //-------------------------- + + IMF_EXPORT + const Header& header () const; + + //------------------------------------------------------- + // Set the current frame buffer -- copies the FrameBuffer + // object into the TiledOutputFile object. + // + // The current frame buffer is the source of the pixel + // data written to the file. The current frame buffer + // must be set at least once before writeTile() is + // called. The current frame buffer can be changed + // after each call to writeTile(). + //------------------------------------------------------- + + IMF_EXPORT + void setFrameBuffer (const DeepFrameBuffer& frameBuffer); + + //----------------------------------- + // Access to the current frame buffer + //----------------------------------- + + IMF_EXPORT + const DeepFrameBuffer& frameBuffer () const; + + //------------------- + // Utility functions: + //------------------- + + //--------------------------------------------------------- + // Multiresolution mode and tile size: + // The following functions return the xSize, ySize and mode + // fields of the file header's TileDescriptionAttribute. + //--------------------------------------------------------- + + IMF_EXPORT + unsigned int tileXSize () const; + IMF_EXPORT + unsigned int tileYSize () const; + IMF_EXPORT + LevelMode levelMode () const; + IMF_EXPORT + LevelRoundingMode levelRoundingMode () const; + + //-------------------------------------------------------------------- + // Number of levels: + // + // numXLevels() returns the file's number of levels in x direction. + // + // if levelMode() == ONE_LEVEL: + // return value is: 1 + // + // if levelMode() == MIPMAP_LEVELS: + // return value is: rfunc (log (max (w, h)) / log (2)) + 1 + // + // if levelMode() == RIPMAP_LEVELS: + // return value is: rfunc (log (w) / log (2)) + 1 + // + // where + // w is the width of the image's data window, max.x - min.x + 1, + // y is the height of the image's data window, max.y - min.y + 1, + // and rfunc(x) is either floor(x), or ceil(x), depending on + // whether levelRoundingMode() returns ROUND_DOWN or ROUND_UP. + // + // numYLevels() returns the file's number of levels in y direction. + // + // if levelMode() == ONE_LEVEL or levelMode() == MIPMAP_LEVELS: + // return value is the same as for numXLevels() + // + // if levelMode() == RIPMAP_LEVELS: + // return value is: rfunc (log (h) / log (2)) + 1 + // + // + // numLevels() is a convenience function for use with MIPMAP_LEVELS + // files. + // + // if levelMode() == ONE_LEVEL or levelMode() == MIPMAP_LEVELS: + // return value is the same as for numXLevels() + // + // if levelMode() == RIPMAP_LEVELS: + // an IEX_NAMESPACE::LogicExc exception is thrown + // + // isValidLevel(lx, ly) returns true if the file contains + // a level with level number (lx, ly), false if not. + // + //-------------------------------------------------------------------- + + IMF_EXPORT + int numLevels () const; + IMF_EXPORT + int numXLevels () const; + IMF_EXPORT + int numYLevels () const; + IMF_EXPORT + bool isValidLevel (int lx, int ly) const; + + //--------------------------------------------------------- + // Dimensions of a level: + // + // levelWidth(lx) returns the width of a level with level + // number (lx, *), where * is any number. + // + // return value is: + // max (1, rfunc (w / pow (2, lx))) + // + // + // levelHeight(ly) returns the height of a level with level + // number (*, ly), where * is any number. + // + // return value is: + // max (1, rfunc (h / pow (2, ly))) + // + //--------------------------------------------------------- + + IMF_EXPORT + int levelWidth (int lx) const; + IMF_EXPORT + int levelHeight (int ly) const; + + //---------------------------------------------------------- + // Number of tiles: + // + // numXTiles(lx) returns the number of tiles in x direction + // that cover a level with level number (lx, *), where * is + // any number. + // + // return value is: + // (levelWidth(lx) + tileXSize() - 1) / tileXSize() + // + // + // numYTiles(ly) returns the number of tiles in y direction + // that cover a level with level number (*, ly), where * is + // any number. + // + // return value is: + // (levelHeight(ly) + tileXSize() - 1) / tileXSize() + // + //---------------------------------------------------------- + + IMF_EXPORT + int numXTiles (int lx = 0) const; + IMF_EXPORT + int numYTiles (int ly = 0) const; + + //--------------------------------------------------------- + // Level pixel ranges: + // + // dataWindowForLevel(lx, ly) returns a 2-dimensional + // region of valid pixel coordinates for a level with + // level number (lx, ly) + // + // return value is a Box2i with min value: + // (dataWindow.min.x, dataWindow.min.y) + // + // and max value: + // (dataWindow.min.x + levelWidth(lx) - 1, + // dataWindow.min.y + levelHeight(ly) - 1) + // + // dataWindowForLevel(level) is a convenience function used + // for ONE_LEVEL and MIPMAP_LEVELS files. It returns + // dataWindowForLevel(level, level). + // + //--------------------------------------------------------- + + IMF_EXPORT + IMATH_NAMESPACE::Box2i dataWindowForLevel (int l = 0) const; + IMF_EXPORT + IMATH_NAMESPACE::Box2i dataWindowForLevel (int lx, int ly) const; + + //------------------------------------------------------------------- + // Tile pixel ranges: + // + // dataWindowForTile(dx, dy, lx, ly) returns a 2-dimensional + // region of valid pixel coordinates for a tile with tile coordinates + // (dx,dy) and level number (lx, ly). + // + // return value is a Box2i with min value: + // (dataWindow.min.x + dx * tileXSize(), + // dataWindow.min.y + dy * tileYSize()) + // + // and max value: + // (dataWindow.min.x + (dx + 1) * tileXSize() - 1, + // dataWindow.min.y + (dy + 1) * tileYSize() - 1) + // + // dataWindowForTile(dx, dy, level) is a convenience function + // used for ONE_LEVEL and MIPMAP_LEVELS files. It returns + // dataWindowForTile(dx, dy, level, level). + // + //------------------------------------------------------------------- + + IMF_EXPORT + IMATH_NAMESPACE::Box2i dataWindowForTile (int dx, int dy, int l = 0) const; + + IMF_EXPORT + IMATH_NAMESPACE::Box2i + dataWindowForTile (int dx, int dy, int lx, int ly) const; + + //------------------------------------------------------------------ + // Write pixel data: + // + // writeTile(dx, dy, lx, ly) writes the tile with tile + // coordinates (dx, dy), and level number (lx, ly) to + // the file. + // + // dx must lie in the interval [0, numXTiles(lx) - 1] + // dy must lie in the interval [0, numYTiles(ly) - 1] + // + // lx must lie in the interval [0, numXLevels() - 1] + // ly must lie in the interval [0, numYLevels() - 1] + // + // writeTile(dx, dy, level) is a convenience function + // used for ONE_LEVEL and MIPMAP_LEVEL files. It calls + // writeTile(dx, dy, level, level). + // + // The two writeTiles(dx1, dx2, dy1, dy2, ...) functions allow + // writing multiple tiles at once. If multi-threading is used + // multiple tiles are written concurrently. The tile coordinates, + // dx1, dx2 and dy1, dy2, specify inclusive ranges of tile + // coordinates. It is valid for dx1 < dx2 or dy1 < dy2; the + // tiles are always written in the order specified by the line + // order attribute. Hence, it is not possible to specify an + // "invalid" or empty tile range. + // + // Pixels that are outside the pixel coordinate range for the tile's + // level, are never accessed by writeTile(). + // + // Each tile in the file must be written exactly once. + // + // The file's line order attribute determines the order of the tiles + // in the file: + // + // INCREASING_Y In the file, the tiles for each level are stored + // in a contiguous block. The levels are ordered + // like this: + // + // (0, 0) (1, 0) ... (nx-1, 0) + // (0, 1) (1, 1) ... (nx-1, 1) + // ... + // (0,ny-1) (1,ny-1) ... (nx-1,ny-1) + // + // where nx = numXLevels(), and ny = numYLevels(). + // In an individual level, (lx, ly), the tiles + // are stored in the following order: + // + // (0, 0) (1, 0) ... (tx-1, 0) + // (0, 1) (1, 1) ... (tx-1, 1) + // ... + // (0,ty-1) (1,ty-1) ... (tx-1,ty-1) + // + // where tx = numXTiles(lx), + // and ty = numYTiles(ly). + // + // DECREASING_Y As for INCREASING_Y, the tiles for each level + // are stored in a contiguous block. The levels + // are ordered the same way as for INCREASING_Y, + // but within an individual level, the tiles + // are stored in this order: + // + // (0,ty-1) (1,ty-1) ... (tx-1,ty-1) + // ... + // (0, 1) (1, 1) ... (tx-1, 1) + // (0, 0) (1, 0) ... (tx-1, 0) + // + // + // RANDOM_Y The order of the calls to writeTile() determines + // the order of the tiles in the file. + // + //------------------------------------------------------------------ + + IMF_EXPORT + void writeTile (int dx, int dy, int l = 0); + IMF_EXPORT + void writeTile (int dx, int dy, int lx, int ly); + + IMF_EXPORT + void writeTiles (int dx1, int dx2, int dy1, int dy2, int lx, int ly); + + IMF_EXPORT + void writeTiles (int dx1, int dx2, int dy1, int dy2, int l = 0); + + //------------------------------------------------------------------ + // Shortcut to copy all pixels from a TiledInputFile into this file, + // without uncompressing and then recompressing the pixel data. + // This file's header must be compatible with the TiledInputFile's + // header: The two header's "dataWindow", "compression", + // "lineOrder", "channels", and "tiles" attributes must be the same. + //------------------------------------------------------------------ + + IMF_EXPORT + void copyPixels (DeepTiledInputFile& in); + IMF_EXPORT + void copyPixels (DeepTiledInputPart& in); + + //-------------------------------------------------------------- + // Updating the preview image: + // + // updatePreviewImage() supplies a new set of pixels for the + // preview image attribute in the file's header. If the header + // does not contain a preview image, updatePreviewImage() throws + // an IEX_NAMESPACE::LogicExc. + // + // Note: updatePreviewImage() is necessary because images are + // often stored in a file incrementally, a few tiles at a time, + // while the image is being generated. Since the preview image + // is an attribute in the file's header, it gets stored in the + // file as soon as the file is opened, but we may not know what + // the preview image should look like until we have written the + // last tile of the main image. + // + //-------------------------------------------------------------- + + IMF_EXPORT + void updatePreviewImage (const PreviewRgba newPixels[]); + + //------------------------------------------------------------- + // Break a tile -- for testing and debugging only: + // + // breakTile(dx,dy,lx,ly,p,n,c) introduces an error into the + // output file by writing n copies of character c, starting + // p bytes from the beginning of the tile with tile coordinates + // (dx, dy) and level number (lx, ly). + // + // Warning: Calling this function usually results in a broken + // image file. The file or parts of it may not be readable, + // or the file may contain bad data. + // + //------------------------------------------------------------- + + IMF_EXPORT + void + breakTile (int dx, int dy, int lx, int ly, int offset, int length, char c); + struct Data; + +private: + // ---------------------------------------------------------------- + // A constructor attaches the OutputStreamMutex to the + // given one from MultiPartOutputFile. Set the previewPosition + // and lineOffsetsPosition which have been acquired from + // the constructor of MultiPartOutputFile as well. + // ---------------------------------------------------------------- + DeepTiledOutputFile (const OutputPartData* part); + + DeepTiledOutputFile (const DeepTiledOutputFile&) = delete; + DeepTiledOutputFile& operator= (const DeepTiledOutputFile&) = delete; + DeepTiledOutputFile (DeepTiledOutputFile&&) = delete; + DeepTiledOutputFile& operator= (DeepTiledOutputFile&&) = delete; + + void initialize (const Header& header); + + bool isValidTile (int dx, int dy, int lx, int ly) const; + + size_t bytesPerLineForTile (int dx, int dy, int lx, int ly) const; + + Data* _data; + + friend class MultiPartOutputFile; +}; + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT + +#endif diff --git a/third_party/tlRender-install-Release/include/OpenEXR/ImfDeepTiledOutputPart.h b/third_party/tlRender-install-Release/include/OpenEXR/ImfDeepTiledOutputPart.h new file mode 100644 index 00000000..fd4d2d11 --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenEXR/ImfDeepTiledOutputPart.h @@ -0,0 +1,371 @@ +// +// SPDX-License-Identifier: BSD-3-Clause +// Copyright (c) Contributors to the OpenEXR Project. +// + +#ifndef IMFDEEPTILEDOUTPUTPART_H_ +#define IMFDEEPTILEDOUTPUTPART_H_ + +#include "ImfForward.h" + +#include "ImfTileDescription.h" + +#include + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER + +class IMF_EXPORT_TYPE DeepTiledOutputPart +{ +public: + IMF_EXPORT + DeepTiledOutputPart (MultiPartOutputFile& multiPartFile, int partNumber); + + //------------------------ + // Access to the file name + //------------------------ + + IMF_EXPORT + const char* fileName () const; + + //-------------------------- + // Access to the file header + //-------------------------- + + IMF_EXPORT + const Header& header () const; + + //------------------------------------------------------- + // Set the current frame buffer -- copies the FrameBuffer + // object into the TiledOutputFile object. + // + // The current frame buffer is the source of the pixel + // data written to the file. The current frame buffer + // must be set at least once before writeTile() is + // called. The current frame buffer can be changed + // after each call to writeTile(). + //------------------------------------------------------- + + IMF_EXPORT + void setFrameBuffer (const DeepFrameBuffer& frameBuffer); + + //----------------------------------- + // Access to the current frame buffer + //----------------------------------- + + IMF_EXPORT + const DeepFrameBuffer& frameBuffer () const; + + //------------------- + // Utility functions: + //------------------- + + //--------------------------------------------------------- + // Multiresolution mode and tile size: + // The following functions return the xSize, ySize and mode + // fields of the file header's TileDescriptionAttribute. + //--------------------------------------------------------- + + IMF_EXPORT + unsigned int tileXSize () const; + IMF_EXPORT + unsigned int tileYSize () const; + IMF_EXPORT + LevelMode levelMode () const; + IMF_EXPORT + LevelRoundingMode levelRoundingMode () const; + + //-------------------------------------------------------------------- + // Number of levels: + // + // numXLevels() returns the file's number of levels in x direction. + // + // if levelMode() == ONE_LEVEL: + // return value is: 1 + // + // if levelMode() == MIPMAP_LEVELS: + // return value is: rfunc (log (max (w, h)) / log (2)) + 1 + // + // if levelMode() == RIPMAP_LEVELS: + // return value is: rfunc (log (w) / log (2)) + 1 + // + // where + // w is the width of the image's data window, max.x - min.x + 1, + // y is the height of the image's data window, max.y - min.y + 1, + // and rfunc(x) is either floor(x), or ceil(x), depending on + // whether levelRoundingMode() returns ROUND_DOWN or ROUND_UP. + // + // numYLevels() returns the file's number of levels in y direction. + // + // if levelMode() == ONE_LEVEL or levelMode() == MIPMAP_LEVELS: + // return value is the same as for numXLevels() + // + // if levelMode() == RIPMAP_LEVELS: + // return value is: rfunc (log (h) / log (2)) + 1 + // + // + // numLevels() is a convenience function for use with MIPMAP_LEVELS + // files. + // + // if levelMode() == ONE_LEVEL or levelMode() == MIPMAP_LEVELS: + // return value is the same as for numXLevels() + // + // if levelMode() == RIPMAP_LEVELS: + // an IEX_NAMESPACE::LogicExc exception is thrown + // + // isValidLevel(lx, ly) returns true if the file contains + // a level with level number (lx, ly), false if not. + // + //-------------------------------------------------------------------- + + IMF_EXPORT + int numLevels () const; + IMF_EXPORT + int numXLevels () const; + IMF_EXPORT + int numYLevels () const; + IMF_EXPORT + bool isValidLevel (int lx, int ly) const; + + //--------------------------------------------------------- + // Dimensions of a level: + // + // levelWidth(lx) returns the width of a level with level + // number (lx, *), where * is any number. + // + // return value is: + // max (1, rfunc (w / pow (2, lx))) + // + // + // levelHeight(ly) returns the height of a level with level + // number (*, ly), where * is any number. + // + // return value is: + // max (1, rfunc (h / pow (2, ly))) + // + //--------------------------------------------------------- + + IMF_EXPORT + int levelWidth (int lx) const; + IMF_EXPORT + int levelHeight (int ly) const; + + //---------------------------------------------------------- + // Number of tiles: + // + // numXTiles(lx) returns the number of tiles in x direction + // that cover a level with level number (lx, *), where * is + // any number. + // + // return value is: + // (levelWidth(lx) + tileXSize() - 1) / tileXSize() + // + // + // numYTiles(ly) returns the number of tiles in y direction + // that cover a level with level number (*, ly), where * is + // any number. + // + // return value is: + // (levelHeight(ly) + tileXSize() - 1) / tileXSize() + // + //---------------------------------------------------------- + + IMF_EXPORT + int numXTiles (int lx = 0) const; + IMF_EXPORT + int numYTiles (int ly = 0) const; + + //--------------------------------------------------------- + // Level pixel ranges: + // + // dataWindowForLevel(lx, ly) returns a 2-dimensional + // region of valid pixel coordinates for a level with + // level number (lx, ly) + // + // return value is a Box2i with min value: + // (dataWindow.min.x, dataWindow.min.y) + // + // and max value: + // (dataWindow.min.x + levelWidth(lx) - 1, + // dataWindow.min.y + levelHeight(ly) - 1) + // + // dataWindowForLevel(level) is a convenience function used + // for ONE_LEVEL and MIPMAP_LEVELS files. It returns + // dataWindowForLevel(level, level). + // + //--------------------------------------------------------- + + IMF_EXPORT + IMATH_NAMESPACE::Box2i dataWindowForLevel (int l = 0) const; + IMF_EXPORT + IMATH_NAMESPACE::Box2i dataWindowForLevel (int lx, int ly) const; + + //------------------------------------------------------------------- + // Tile pixel ranges: + // + // dataWindowForTile(dx, dy, lx, ly) returns a 2-dimensional + // region of valid pixel coordinates for a tile with tile coordinates + // (dx,dy) and level number (lx, ly). + // + // return value is a Box2i with min value: + // (dataWindow.min.x + dx * tileXSize(), + // dataWindow.min.y + dy * tileYSize()) + // + // and max value: + // (dataWindow.min.x + (dx + 1) * tileXSize() - 1, + // dataWindow.min.y + (dy + 1) * tileYSize() - 1) + // + // dataWindowForTile(dx, dy, level) is a convenience function + // used for ONE_LEVEL and MIPMAP_LEVELS files. It returns + // dataWindowForTile(dx, dy, level, level). + // + //------------------------------------------------------------------- + + IMF_EXPORT + IMATH_NAMESPACE::Box2i dataWindowForTile (int dx, int dy, int l = 0) const; + + IMF_EXPORT + IMATH_NAMESPACE::Box2i + dataWindowForTile (int dx, int dy, int lx, int ly) const; + + //------------------------------------------------------------------ + // Write pixel data: + // + // writeTile(dx, dy, lx, ly) writes the tile with tile + // coordinates (dx, dy), and level number (lx, ly) to + // the file. + // + // dx must lie in the interval [0, numXTiles(lx) - 1] + // dy must lie in the interval [0, numYTiles(ly) - 1] + // + // lx must lie in the interval [0, numXLevels() - 1] + // ly must lie in the interval [0, numYLevels() - 1] + // + // writeTile(dx, dy, level) is a convenience function + // used for ONE_LEVEL and MIPMAP_LEVEL files. It calls + // writeTile(dx, dy, level, level). + // + // The two writeTiles(dx1, dx2, dy1, dy2, ...) functions allow + // writing multiple tiles at once. If multi-threading is used + // multiple tiles are written concurrently. The tile coordinates, + // dx1, dx2 and dy1, dy2, specify inclusive ranges of tile + // coordinates. It is valid for dx1 < dx2 or dy1 < dy2; the + // tiles are always written in the order specified by the line + // order attribute. Hence, it is not possible to specify an + // "invalid" or empty tile range. + // + // Pixels that are outside the pixel coordinate range for the tile's + // level, are never accessed by writeTile(). + // + // Each tile in the file must be written exactly once. + // + // The file's line order attribute determines the order of the tiles + // in the file: + // + // INCREASING_Y In the file, the tiles for each level are stored + // in a contiguous block. The levels are ordered + // like this: + // + // (0, 0) (1, 0) ... (nx-1, 0) + // (0, 1) (1, 1) ... (nx-1, 1) + // ... + // (0,ny-1) (1,ny-1) ... (nx-1,ny-1) + // + // where nx = numXLevels(), and ny = numYLevels(). + // In an individual level, (lx, ly), the tiles + // are stored in the following order: + // + // (0, 0) (1, 0) ... (tx-1, 0) + // (0, 1) (1, 1) ... (tx-1, 1) + // ... + // (0,ty-1) (1,ty-1) ... (tx-1,ty-1) + // + // where tx = numXTiles(lx), + // and ty = numYTiles(ly). + // + // DECREASING_Y As for INCREASING_Y, the tiles for each level + // are stored in a contiguous block. The levels + // are ordered the same way as for INCREASING_Y, + // but within an individual level, the tiles + // are stored in this order: + // + // (0,ty-1) (1,ty-1) ... (tx-1,ty-1) + // ... + // (0, 1) (1, 1) ... (tx-1, 1) + // (0, 0) (1, 0) ... (tx-1, 0) + // + // + // RANDOM_Y The order of the calls to writeTile() determines + // the order of the tiles in the file. + // + //------------------------------------------------------------------ + + IMF_EXPORT + void writeTile (int dx, int dy, int l = 0); + IMF_EXPORT + void writeTile (int dx, int dy, int lx, int ly); + + IMF_EXPORT + void writeTiles (int dx1, int dx2, int dy1, int dy2, int lx, int ly); + + IMF_EXPORT + void writeTiles (int dx1, int dx2, int dy1, int dy2, int l = 0); + + //------------------------------------------------------------------ + // Shortcut to copy all pixels from a TiledInputFile into this file, + // without uncompressing and then recompressing the pixel data. + // This file's header must be compatible with the TiledInputFile's + // header: The two header's "dataWindow", "compression", + // "lineOrder", "channels", and "tiles" attributes must be the same. + //------------------------------------------------------------------ + + IMF_EXPORT + void copyPixels (DeepTiledInputFile& in); + IMF_EXPORT + void copyPixels (DeepTiledInputPart& in); + + //-------------------------------------------------------------- + // Updating the preview image: + // + // updatePreviewImage() supplies a new set of pixels for the + // preview image attribute in the file's header. If the header + // does not contain a preview image, updatePreviewImage() throws + // an IEX_NAMESPACE::LogicExc. + // + // Note: updatePreviewImage() is necessary because images are + // often stored in a file incrementally, a few tiles at a time, + // while the image is being generated. Since the preview image + // is an attribute in the file's header, it gets stored in the + // file as soon as the file is opened, but we may not know what + // the preview image should look like until we have written the + // last tile of the main image. + // + //-------------------------------------------------------------- + + IMF_EXPORT + void updatePreviewImage (const PreviewRgba newPixels[]); + + //------------------------------------------------------------- + // Break a tile -- for testing and debugging only: + // + // breakTile(dx,dy,lx,ly,p,n,c) introduces an error into the + // output file by writing n copies of character c, starting + // p bytes from the beginning of the tile with tile coordinates + // (dx, dy) and level number (lx, ly). + // + // Warning: Calling this function usually results in a broken + // image file. The file or parts of it may not be readable, + // or the file may contain bad data. + // + //------------------------------------------------------------- + + IMF_EXPORT + void + breakTile (int dx, int dy, int lx, int ly, int offset, int length, char c); + +private: + DeepTiledOutputFile* file; +}; + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT + +#endif /* IMFDEEPTILEDOUTPUTPART_H_ */ diff --git a/third_party/tlRender-install-Release/include/OpenEXR/ImfDoubleAttribute.h b/third_party/tlRender-install-Release/include/OpenEXR/ImfDoubleAttribute.h new file mode 100644 index 00000000..3819262f --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenEXR/ImfDoubleAttribute.h @@ -0,0 +1,28 @@ +// +// SPDX-License-Identifier: BSD-3-Clause +// Copyright (c) Contributors to the OpenEXR Project. +// + +#ifndef INCLUDED_IMF_DOUBLE_ATTRIBUTE_H +#define INCLUDED_IMF_DOUBLE_ATTRIBUTE_H + +//----------------------------------------------------------------------------- +// +// class DoubleAttribute +// +//----------------------------------------------------------------------------- + +#include "ImfAttribute.h" +#include "ImfExport.h" + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER + +typedef TypedAttribute DoubleAttribute; + +#ifndef COMPILING_IMF_DOUBLE_ATTRIBUTE +extern template class IMF_EXPORT_EXTERN_TEMPLATE TypedAttribute; +#endif + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT + +#endif diff --git a/third_party/tlRender-install-Release/include/OpenEXR/ImfEnvmap.h b/third_party/tlRender-install-Release/include/OpenEXR/ImfEnvmap.h new file mode 100644 index 00000000..4a59ac9f --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenEXR/ImfEnvmap.h @@ -0,0 +1,301 @@ +// +// SPDX-License-Identifier: BSD-3-Clause +// Copyright (c) Contributors to the OpenEXR Project. +// + +#ifndef INCLUDED_IMF_ENVMAP_H +#define INCLUDED_IMF_ENVMAP_H + +//----------------------------------------------------------------------------- +// +// Environment maps +// +// Environment maps define a mapping from 3D directions to 2D +// pixel space locations. Environment maps are typically used +// in 3D rendering, for effects such as quickly approximating +// how shiny surfaces reflect their environment. +// +// Environment maps can be stored in scanline-based or in tiled +// OpenEXR files. The fact that an image is an environment map +// is indicated by the presence of an EnvmapAttribute whose name +// is "envmap". (Convenience functions to access this attribute +// are defined in header file ImfStandardAttributes.h.) +// The attribute's value defines the mapping from 3D directions +// to 2D pixel space locations. +// +// This header file defines the set of possible EnvmapAttribute +// values. +// +// For each possible EnvmapAttribute value, this header file also +// defines a set of convenience functions to convert between 3D +// directions and 2D pixel locations. +// +// Most of the convenience functions defined below require a +// dataWindow parameter. For scanline-based images, and for +// tiled images with level mode ONE_LEVEL, the dataWindow +// parameter should be set to the image's data window, as +// defined in the image header. For tiled images with level +// mode MIPMAP_LEVELS or RIPMAP_LEVELS, the data window of the +// image level that is being accessed should be used instead. +// (See the dataWindowForLevel() methods in ImfTiledInputFile.h +// and ImfTiledOutputFile.h.) +// +//----------------------------------------------------------------------------- + +#include "ImfExport.h" +#include "ImfNamespace.h" + +#include + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER + +//-------------------------------- +// Supported environment map types +//-------------------------------- + +enum IMF_EXPORT_ENUM Envmap : int +{ + ENVMAP_LATLONG = 0, // Latitude-longitude environment map + ENVMAP_CUBE = 1, // Cube map + + NUM_ENVMAPTYPES // Number of different environment map types +}; + +//------------------------------------------------------------------------- +// Latitude-Longitude Map: +// +// The environment is projected onto the image using polar coordinates +// (latitude and longitude). A pixel's x coordinate corresponds to +// its longitude, and the y coordinate corresponds to its latitude. +// Pixel (dataWindow.min.x, dataWindow.min.y) has latitude +pi/2 and +// longitude +pi; pixel (dataWindow.max.x, dataWindow.max.y) has +// latitude -pi/2 and longitude -pi. +// +// In 3D space, latitudes -pi/2 and +pi/2 correspond to the negative and +// positive y direction. Latitude 0, longitude 0 points into positive +// z direction; and latitude 0, longitude pi/2 points into positive x +// direction. +// +// The size of the data window should be 2*N by N pixels (width by height), +// where N can be any integer greater than 0. +//------------------------------------------------------------------------- + +namespace LatLongMap +{ +//---------------------------------------------------- +// Convert a 3D direction to a 2D vector whose x and y +// components represent the corresponding latitude +// and longitude. +//---------------------------------------------------- + +IMF_EXPORT +IMATH_NAMESPACE::V2f latLong (const IMATH_NAMESPACE::V3f& direction); + +//-------------------------------------------------------- +// Convert the position of a pixel to a 2D vector whose +// x and y components represent the corresponding latitude +// and longitude. +//-------------------------------------------------------- + +IMF_EXPORT +IMATH_NAMESPACE::V2f latLong ( + const IMATH_NAMESPACE::Box2i& dataWindow, + const IMATH_NAMESPACE::V2f& pixelPosition); + +//------------------------------------------------------------- +// Convert a 2D vector, whose x and y components represent +// longitude and latitude, into a corresponding pixel position. +//------------------------------------------------------------- + +IMF_EXPORT +IMATH_NAMESPACE::V2f pixelPosition ( + const IMATH_NAMESPACE::Box2i& dataWindow, + const IMATH_NAMESPACE::V2f& latLong); + +//----------------------------------------------------- +// Convert a 3D direction vector into a corresponding +// pixel position. pixelPosition(dw,dir) is equivalent +// to pixelPosition(dw,latLong(dw,dir)). +//----------------------------------------------------- + +IMF_EXPORT +IMATH_NAMESPACE::V2f pixelPosition ( + const IMATH_NAMESPACE::Box2i& dataWindow, + const IMATH_NAMESPACE::V3f& direction); + +//-------------------------------------------------------- +// Convert the position of a pixel in a latitude-longitude +// map into a corresponding 3D direction. +//-------------------------------------------------------- + +IMF_EXPORT +IMATH_NAMESPACE::V3f direction ( + const IMATH_NAMESPACE::Box2i& dataWindow, + const IMATH_NAMESPACE::V2f& pixelPosition); +} // namespace LatLongMap + +//-------------------------------------------------------------- +// Cube Map: +// +// The environment is projected onto the six faces of an +// axis-aligned cube. The cube's faces are then arranged +// in a 2D image as shown below. +// +// 2-----------3 +// / /| +// / / | Y +// / / | | +// 6-----------7 | | +// | | | | +// | | | | +// | 0 | 1 *------- X +// | | / / +// | | / / +// | |/ / +// 4-----------5 Z +// +// dataWindow.min +// / +// / +// +-----------+ +// |3 Y 7| +// | | | +// | | | +// | ---+---Z | +X face +// | | | +// | | | +// |1 5| +// +-----------+ +// |6 Y 2| +// | | | +// | | | +// | Z---+--- | -X face +// | | | +// | | | +// |4 0| +// +-----------+ +// |6 Z 7| +// | | | +// | | | +// | ---+---X | +Y face +// | | | +// | | | +// |2 3| +// +-----------+ +// |0 1| +// | | | +// | | | +// | ---+---X | -Y face +// | | | +// | | | +// |4 Z 5| +// +-----------+ +// |7 Y 6| +// | | | +// | | | +// | X---+--- | +Z face +// | | | +// | | | +// |5 4| +// +-----------+ +// |2 Y 3| +// | | | +// | | | +// | ---+---X | -Z face +// | | | +// | | | +// |0 1| +// +-----------+ +// / +// / +// dataWindow.max +// +// The size of the data window should be N by 6*N pixels +// (width by height), where N can be any integer greater +// than 0. +// +//-------------------------------------------------------------- + +//------------------------------------ +// Names for the six faces of the cube +//------------------------------------ + +enum IMF_EXPORT_ENUM CubeMapFace +{ + CUBEFACE_POS_X, // +X face + CUBEFACE_NEG_X, // -X face + CUBEFACE_POS_Y, // +Y face + CUBEFACE_NEG_Y, // -Y face + CUBEFACE_POS_Z, // +Z face + CUBEFACE_NEG_Z // -Z face +}; + +namespace CubeMap +{ +//--------------------------------------------- +// Width and height of a cube's face, in pixels +//--------------------------------------------- + +IMF_EXPORT +int sizeOfFace (const IMATH_NAMESPACE::Box2i& dataWindow); + +//------------------------------------------ +// Compute the region in the environment map +// that is covered by the specified face. +//------------------------------------------ + +IMF_EXPORT +IMATH_NAMESPACE::Box2i +dataWindowForFace (CubeMapFace face, const IMATH_NAMESPACE::Box2i& dataWindow); + +//---------------------------------------------------- +// Convert the coordinates of a pixel within a face +// [in the range from (0,0) to (s-1,s-1), where +// s == sizeOfFace(dataWindow)] to pixel coordinates +// in the environment map. +//---------------------------------------------------- + +IMF_EXPORT +IMATH_NAMESPACE::V2f pixelPosition ( + CubeMapFace face, + const IMATH_NAMESPACE::Box2i& dataWindow, + IMATH_NAMESPACE::V2f positionInFace); + +//-------------------------------------------------------------- +// Convert a 3D direction into a cube face, and a pixel position +// within that face. +// +// If you have a 3D direction, dir, the following code fragment +// finds the position, pos, of the corresponding pixel in an +// environment map with data window dw: +// +// CubeMapFace f; +// V2f pif, pos; +// +// faceAndPixelPosition (dir, dw, f, pif); +// pos = pixelPosition (f, dw, pif); +// +//-------------------------------------------------------------- + +IMF_EXPORT +void faceAndPixelPosition ( + const IMATH_NAMESPACE::V3f& direction, + const IMATH_NAMESPACE::Box2i& dataWindow, + CubeMapFace& face, + IMATH_NAMESPACE::V2f& positionInFace); + +// -------------------------------------------------------- +// Given a cube face and a pixel position within that face, +// compute the corresponding 3D direction. +// -------------------------------------------------------- + +IMF_EXPORT +IMATH_NAMESPACE::V3f direction ( + CubeMapFace face, + const IMATH_NAMESPACE::Box2i& dataWindow, + const IMATH_NAMESPACE::V2f& positionInFace); +} // namespace CubeMap + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT + +#endif diff --git a/third_party/tlRender-install-Release/include/OpenEXR/ImfEnvmapAttribute.h b/third_party/tlRender-install-Release/include/OpenEXR/ImfEnvmapAttribute.h new file mode 100644 index 00000000..9e3c13a3 --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenEXR/ImfEnvmapAttribute.h @@ -0,0 +1,30 @@ +// +// SPDX-License-Identifier: BSD-3-Clause +// Copyright (c) Contributors to the OpenEXR Project. +// + +#ifndef INCLUDED_IMF_ENVMAP_ATTRIBUTE_H +#define INCLUDED_IMF_ENVMAP_ATTRIBUTE_H + +//----------------------------------------------------------------------------- +// +// class EnvmapAttribute +// +//----------------------------------------------------------------------------- + +#include "ImfAttribute.h" +#include "ImfEnvmap.h" +#include "ImfExport.h" + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER + +typedef TypedAttribute EnvmapAttribute; + +#ifndef COMPILING_IMF_ENVMAP_ATTRIBUTE +extern template class IMF_EXPORT_EXTERN_TEMPLATE + TypedAttribute; +#endif + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT + +#endif diff --git a/third_party/tlRender-install-Release/include/OpenEXR/ImfExport.h b/third_party/tlRender-install-Release/include/OpenEXR/ImfExport.h new file mode 100644 index 00000000..2b270229 --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenEXR/ImfExport.h @@ -0,0 +1,66 @@ +// +// SPDX-License-Identifier: BSD-3-Clause +// Copyright (c) Contributors to the OpenEXR Project. +// + +#ifndef INCLUDED_IMFEXPORT_H +#define INCLUDED_IMFEXPORT_H + +#include "OpenEXRConfig.h" + +/// \addtogroup ExportMacros +/// @{ + +// are we making a DLL under windows (might be msvc or mingw or others) +#if defined(OPENEXR_DLL) + +// when building as a DLL for windows, typical dllexport / import case +// where we need to switch depending on whether we are compiling +// internally or not +# if defined(OPENEXR_EXPORTS) +# define IMF_EXPORT __declspec (dllexport) + +// mingw needs the export when the extern is defined +# if defined(__MINGW32__) +# define IMF_EXPORT_EXTERN_TEMPLATE IMF_EXPORT +# define IMF_EXPORT_TEMPLATE_INSTANCE +// for mingw windows, we need to cause this to export the +// typeinfo tables (but you don't need to have the +// complementary import, because might be a local template too!) +# define IMF_EXPORT_TEMPLATE_TYPE IMF_EXPORT +# else +// for normal msvc, need to export the actual instantiation in +// the cpp code, and none of the others +# define IMF_EXPORT_EXTERN_TEMPLATE +# define IMF_EXPORT_TEMPLATE_INSTANCE IMF_EXPORT +# define IMF_EXPORT_TEMPLATE_TYPE +# endif + +# else // OPENEXR_EXPORTS +# define IMF_EXPORT __declspec (dllimport) +# define IMF_EXPORT_EXTERN_TEMPLATE IMF_EXPORT +# define IMF_EXPORT_TEMPLATE_INSTANCE +# define IMF_EXPORT_TEMPLATE_TYPE +# endif + +// DLLs don't support these types of visibility controls, just leave them as empty +# define IMF_EXPORT_TYPE +# define IMF_EXPORT_ENUM +# define IMF_HIDDEN + +#else // not an OPENEXR_DLL + +// just pass these through from the top level config +# define IMF_EXPORT OPENEXR_EXPORT +# define IMF_HIDDEN OPENEXR_HIDDEN +# define IMF_EXPORT_ENUM OPENEXR_EXPORT_ENUM +# define IMF_EXPORT_TYPE OPENEXR_EXPORT_TYPE +# define IMF_EXPORT_TEMPLATE_TYPE OPENEXR_EXPORT_TEMPLATE_TYPE +# define IMF_EXPORT_EXTERN_TEMPLATE OPENEXR_EXPORT_EXTERN_TEMPLATE +# define IMF_EXPORT_TEMPLATE_INSTANCE OPENEXR_EXPORT_TEMPLATE_INSTANCE + +#endif // OPENEXR_DLL + +/// @} + +#endif // INCLUDED_IMFEXPORT_H diff --git a/third_party/tlRender-install-Release/include/OpenEXR/ImfFlatImage.h b/third_party/tlRender-install-Release/include/OpenEXR/ImfFlatImage.h new file mode 100644 index 00000000..23e783c7 --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenEXR/ImfFlatImage.h @@ -0,0 +1,62 @@ +// +// SPDX-License-Identifier: BSD-3-Clause +// Copyright (c) Contributors to the OpenEXR Project. +// + +#ifndef INCLUDED_IMF_FLAT_IMAGE_H +#define INCLUDED_IMF_FLAT_IMAGE_H + +//---------------------------------------------------------------------------- +// +// class FlatImage +// +// For an explanation of images, levels and channels, +// see the comments in header file Image.h. +// +//---------------------------------------------------------------------------- + +#include "ImfFlatImageLevel.h" +#include "ImfImage.h" +#include "ImfUtilExport.h" + +#include "ImfTileDescription.h" + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER + +class IMFUTIL_EXPORT_TYPE FlatImage : public Image +{ +public: + // + // Constructors and destructor. + // The default constructor constructs an image with an empty data + // window level mode ONE_LEVEL and level rounding mode ROUND_DOWN. + // + + IMFUTIL_EXPORT FlatImage (); + + IMFUTIL_EXPORT + FlatImage ( + const IMATH_NAMESPACE::Box2i& dataWindow, + LevelMode levelMode = ONE_LEVEL, + LevelRoundingMode levelRoundingMode = ROUND_DOWN); + + IMFUTIL_EXPORT virtual ~FlatImage (); + + // + // Accessing image levels by level number + // + + IMFUTIL_EXPORT virtual FlatImageLevel& level (int l = 0); + IMFUTIL_EXPORT virtual const FlatImageLevel& level (int l = 0) const; + + IMFUTIL_EXPORT virtual FlatImageLevel& level (int lx, int ly); + IMFUTIL_EXPORT virtual const FlatImageLevel& level (int lx, int ly) const; + +protected: + IMFUTIL_EXPORT virtual FlatImageLevel* + newLevel (int lx, int ly, const IMATH_NAMESPACE::Box2i& dataWindow); +}; + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT + +#endif diff --git a/third_party/tlRender-install-Release/include/OpenEXR/ImfFlatImageChannel.h b/third_party/tlRender-install-Release/include/OpenEXR/ImfFlatImageChannel.h new file mode 100644 index 00000000..ac22f653 --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenEXR/ImfFlatImageChannel.h @@ -0,0 +1,223 @@ +// +// SPDX-License-Identifier: BSD-3-Clause +// Copyright (c) Contributors to the OpenEXR Project. +// + +#ifndef INCLUDED_IMF_FLAT_IMAGE_CHANNEL_H +#define INCLUDED_IMF_FLAT_IMAGE_CHANNEL_H + +//---------------------------------------------------------------------------- +// +// class FlatImageChannel, +// template class TypedFlatImageChannel +// +// For an explanation of images, levels and channels, +// see the comments in header file Image.h. +// +//---------------------------------------------------------------------------- + +#include "ImfImageChannel.h" +#include "ImfImageLevel.h" +#include "ImfUtilExport.h" + +#include "ImfFrameBuffer.h" +#include "ImfPixelType.h" +#include +#include + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER + +class FlatImageLevel; + +// +// Image channels: +// +// A TypedFlatImageChannel holds the pixel data for a single channel +// of one level of a flat image. The pixels in the channel are of type T, +// where T is either half, float or unsigned int. Storage is allocated +// only for pixels within the data window of the level. +// + +class IMFUTIL_EXPORT_TYPE FlatImageChannel : public ImageChannel +{ +public: + // + // Construct an OpenEXR frame buffer slice for this channel. + // This function is needed reading an image from an OpenEXR + // file and for saving an image in an OpenEXR file. + // + + virtual Slice slice () const = 0; + + // + // Access to the flat image level to which this channel belongs. + // + + IMFUTIL_EXPORT FlatImageLevel& flatLevel (); + IMFUTIL_EXPORT const FlatImageLevel& flatLevel () const; + +protected: + friend class FlatImageLevel; + + IMFUTIL_EXPORT + FlatImageChannel ( + FlatImageLevel& level, int xSampling, int ySampling, bool pLinear); + + IMFUTIL_EXPORT virtual ~FlatImageChannel (); + + FlatImageChannel (const FlatImageChannel& other) = delete; + FlatImageChannel& operator= (const FlatImageChannel& other) = delete; + FlatImageChannel (FlatImageChannel&& other) = delete; + FlatImageChannel& operator= (FlatImageChannel&& other) = delete; + + IMFUTIL_EXPORT + virtual void resize (); + + virtual void resetBasePointer () = 0; +}; + +template +class IMFUTIL_EXPORT_TEMPLATE_TYPE TypedFlatImageChannel + : public FlatImageChannel +{ +public: + // + // The OpenEXR pixel type of this channel (HALF, FLOAT or UINT). + // + + virtual PixelType pixelType () const; + + // + // Construct an OpenEXR frame buffer slice for this channel. + // + + virtual Slice slice () const; + + // + // Access to the pixel at pixel space location (x, y), without + // bounds checking. Accessing a location outside the data window + // of the image level results in undefined behavior. + // + + T& operator() (int x, int y); + const T& operator() (int x, int y) const; + + // + // Access to the pixel at pixel space location (x, y), with bounds + // checking. Accessing a location outside the data window of the + // image level throws an Iex::ArgExc exception. + // + + T& at (int x, int y); + const T& at (int x, int y) const; + + // + // Faster access to all pixels in a single horizontal row of the + // channel. Rows are numbered from 0 to pixelsPerColumn()-1, and + // each row contains pixelsPerRow() values. + // Access is not bounds checked; accessing out of bounds rows or + // pixels results in undefined behavior. + // + + T* row (int r); + const T* row (int r) const; + +private: + friend class FlatImageLevel; + + // + // The constructor and destructor are not public because flat + // image channels exist only as parts of a flat image level. + // + + IMFUTIL_HIDDEN + TypedFlatImageChannel ( + FlatImageLevel& level, int xSampling, int ySampling, bool pLinear); + + IMFUTIL_HIDDEN + virtual ~TypedFlatImageChannel (); + + TypedFlatImageChannel (const TypedFlatImageChannel& other) = delete; + TypedFlatImageChannel& + operator= (const TypedFlatImageChannel& other) = delete; + TypedFlatImageChannel (TypedFlatImageChannel&& other) = delete; + TypedFlatImageChannel& operator= (TypedFlatImageChannel&& other) = delete; + + IMFUTIL_HIDDEN + virtual void resize (); + + IMFUTIL_HIDDEN + virtual void resetBasePointer (); + + T* _pixels; // Pointer to allocated storage + T* _base; // Base pointer for faster pixel access +}; + +// +// Channel typedefs for the pixel data types supported by OpenEXR. +// + +typedef TypedFlatImageChannel FlatHalfChannel; +typedef TypedFlatImageChannel FlatFloatChannel; +typedef TypedFlatImageChannel FlatUIntChannel; + +//----------------------------------------------------------------------------- +// Implementation of templates and inline functions +//----------------------------------------------------------------------------- + +template +inline T& +TypedFlatImageChannel::operator() (int x, int y) +{ + return _base[(y / ySampling ()) * pixelsPerRow () + (x / xSampling ())]; +} + +template +inline const T& +TypedFlatImageChannel::operator() (int x, int y) const +{ + return _base[(y / ySampling ()) * pixelsPerRow () + (x / xSampling ())]; +} + +template +inline T& +TypedFlatImageChannel::at (int x, int y) +{ + boundsCheck (x, y); + return _base[(y / ySampling ()) * pixelsPerRow () + (x / xSampling ())]; +} + +template +inline const T& +TypedFlatImageChannel::at (int x, int y) const +{ + boundsCheck (x, y); + return _base[(y / ySampling ()) * pixelsPerRow () + (x / xSampling ())]; +} + +template +inline T* +TypedFlatImageChannel::row (int r) +{ + return _base + r * pixelsPerRow (); +} + +template +inline const T* +TypedFlatImageChannel::row (int n) const +{ + return _base + n * pixelsPerRow (); +} + +#ifndef COMPILING_IMF_FLAT_IMAGE_CHANNEL +extern template class IMFUTIL_EXPORT_EXTERN_TEMPLATE + TypedFlatImageChannel; +extern template class IMFUTIL_EXPORT_EXTERN_TEMPLATE + TypedFlatImageChannel; +extern template class IMFUTIL_EXPORT_EXTERN_TEMPLATE + TypedFlatImageChannel; +#endif + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT + +#endif diff --git a/third_party/tlRender-install-Release/include/OpenEXR/ImfFlatImageIO.h b/third_party/tlRender-install-Release/include/OpenEXR/ImfFlatImageIO.h new file mode 100644 index 00000000..48dd5769 --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenEXR/ImfFlatImageIO.h @@ -0,0 +1,156 @@ +// +// SPDX-License-Identifier: BSD-3-Clause +// Copyright (c) Contributors to the OpenEXR Project. +// + +#ifndef INCLUDED_IMF_FLAT_IMAGE_IO_H +#define INCLUDED_IMF_FLAT_IMAGE_IO_H + +//---------------------------------------------------------------------------- +// +// Functions to load flat images from OpenEXR files +// and to save flat images in OpenEXR files. +// +//---------------------------------------------------------------------------- + +#include "ImfFlatImage.h" +#include "ImfImageDataWindow.h" +#include "ImfUtilExport.h" + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER + +// +// saveFlatImage (n, h, i, d) or +// saveFlatImage (n, i) +// +// Saves image i in an OpenEXR file with name n. The file will be +// tiled if the image has more than one level, or if a header, h, is +// given and contains a tile description attribute; otherwise the +// file will be scan-line based. +// +// If header h is given, then the channel list in h is replaced with +// the channel list in i, and the levelMode and the levelRounding mode +// fields of the tile description are replaced with the level mode +// and the levelRounding mode of i. In addition, if the data window +// source flag, d, is set to USE_IMAGE_DATA_WINDOW, then the data +// window in the image is copied into the header; if d is set to +// USE_HEADER_DATA_WINDOW, then the data window in the header is +// replaced with the intersection of the original data window in the +// header and the data window in the image. The modified header then +// becomes the header of the image file. +// + +IMFUTIL_EXPORT +void saveFlatImage ( + const std::string& fileName, + const Header& hdr, + const FlatImage& img, + DataWindowSource dws = USE_IMAGE_DATA_WINDOW); + +IMFUTIL_EXPORT +void saveFlatImage (const std::string& fileName, const FlatImage& img); + +// +// loadFlatImage (n, h, i) or +// loadFlatImage (n, i) +// +// Loads flat image i from the OpenEXR file with name n. +// +// If header h is given, then the header of the file is copied into h. +// + +IMFUTIL_EXPORT +void loadFlatImage (const std::string& fileName, Header& hdr, FlatImage& img); + +IMFUTIL_EXPORT +void loadFlatImage (const std::string& fileName, FlatImage& img); + +// +// saveFlatScanLineImage (n, h, i, d) or +// saveFlatScanLineImage (n, i) +// +// Saves image i in a scan-line based flat OpenEXR file with file name n. +// +// If header h is given, then the channel list in h is replaced with +// the channel list in i. In addition, if the data window source flag, d, +// is set to USE_IMAGE_DATA_WINDOW, then the data window in the image is +// copied into the header; if d is set to USE_HEADER_DATA_WINDOW, then +// the data window in the header is replaced with the intersection of +// the original data window in the header and the data window in the +// image. The modified header then becomes the header of the image file. +// + +IMFUTIL_EXPORT +void saveFlatScanLineImage ( + const std::string& fileName, + const Header& hdr, + const FlatImage& img, + DataWindowSource dws = USE_IMAGE_DATA_WINDOW); + +IMFUTIL_EXPORT +void saveFlatScanLineImage (const std::string& fileName, const FlatImage& img); + +// +// loadFlatScanLineImage (n, h, i) or +// loadFlatScanLineImage (n, i) +// +// Loads image i from a scan-line based flat OpenEXR file with file name n. +// If header h is given, then the header of the file is copied into h. +// + +IMFUTIL_EXPORT +void loadFlatScanLineImage ( + const std::string& fileName, Header& hdr, FlatImage& img); + +IMFUTIL_EXPORT +void loadFlatScanLineImage (const std::string& fileName, FlatImage& img); + +// +// saveFlatTiledImage (n, h, i, d) or +// saveFlatTiledImage (n, i) +// +// Saves image i in a tiled flat OpenEXR file with file name n. +// +// If header h is given, then the channel list in h is replaced with +// the channel list i, and the levelMode and the levelRounding mode +// fields of the tile description are replaced with the level mode +// and the levelRounding mode of i. In addition, if the data window +// source flag, d, is set to USE_IMAGE_DATA_WINDOW, then the data +// window in the image is copied into the header; if d is set to +// USE_HEADER_DATA_WINDOW, then the data window in the header is +// replaced with the intersection of the original data window in the +// header and the data window in the image. The modified header then +// becomes the header of the image file. +// +// Note: USE_HEADER_DATA_WINDOW can only be used for images with +// level mode ONE_LEVEL. +// + +IMFUTIL_EXPORT +void saveFlatTiledImage ( + const std::string& fileName, + const Header& hdr, + const FlatImage& img, + DataWindowSource dws = USE_IMAGE_DATA_WINDOW); + +IMFUTIL_EXPORT +void saveFlatTiledImage (const std::string& fileName, const FlatImage& img); + +// +// loadFlatTiledImage (n, h, i) or +// loadFlatTiledImage (n, i) +// +// Loads image i from a tiled flat OpenEXR file with file name n. +// If header h is given, then the header of the file is copied into h. +// + +IMFUTIL_EXPORT +void +loadFlatTiledImage (const std::string& fileName, Header& hdr, FlatImage& img); + +IMFUTIL_EXPORT +void loadFlatTiledImage (const std::string& fileName, FlatImage& img); + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT + +#endif diff --git a/third_party/tlRender-install-Release/include/OpenEXR/ImfFlatImageLevel.h b/third_party/tlRender-install-Release/include/OpenEXR/ImfFlatImageLevel.h new file mode 100644 index 00000000..86610893 --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenEXR/ImfFlatImageLevel.h @@ -0,0 +1,365 @@ +// +// SPDX-License-Identifier: BSD-3-Clause +// Copyright (c) Contributors to the OpenEXR Project. +// + +#ifndef INCLUDED_IMF_FLAT_IMAGE_LEVEL_H +#define INCLUDED_IMF_FLAT_IMAGE_LEVEL_H + +//---------------------------------------------------------------------------- +// +// class FlatImageLevel +// class FlatImageLevel::Iterator +// class FlatImageLevel::ConstIterator +// +// For an explanation of images, levels and channels, +// see the comments in header file Image.h. +// +//---------------------------------------------------------------------------- + +#include "ImfFlatImageChannel.h" +#include "ImfImageLevel.h" +#include "ImfUtilExport.h" +#include +#include +#include + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER + +class FlatImage; + +class IMFUTIL_EXPORT_TYPE FlatImageLevel : public ImageLevel +{ +public: + // + // Access to the flat image to which the level belongs. + // + + IMFUTIL_EXPORT + FlatImage& flatImage (); + IMFUTIL_EXPORT + const FlatImage& flatImage () const; + + // + // Accessing channels by name: + // + // findChannel(n) returns a pointer to the image channel with + // name n, or 0 if no such channel exists. + // + // channel(n) returns a reference to the image channel with + // name n, or throws an Iex::ArgExc exception if + // no such channel exists. + // + // findTypedChannel(n) returns a pointer to the image channel with + // name n and type T, or 0 if no such channel + // exists. + // + // typedChannel(n) returns a reference to the image channel with + // name n and type T, or throws an Iex::ArgExc + // exception if no such channel exists. + // + + IMFUTIL_EXPORT + FlatImageChannel* findChannel (const std::string& name); + IMFUTIL_EXPORT + const FlatImageChannel* findChannel (const std::string& name) const; + + IMFUTIL_EXPORT + FlatImageChannel& channel (const std::string& name); + IMFUTIL_EXPORT + const FlatImageChannel& channel (const std::string& name) const; + + template + TypedFlatImageChannel* findTypedChannel (const std::string& name); + + template + const TypedFlatImageChannel* + findTypedChannel (const std::string& name) const; + + template + TypedFlatImageChannel& typedChannel (const std::string& name); + + template + const TypedFlatImageChannel& + typedChannel (const std::string& name) const; + + // + // Iterator-style access to channels + // + + typedef std::map ChannelMap; + + class Iterator; + class ConstIterator; + + IMFUTIL_EXPORT + Iterator begin (); + IMFUTIL_EXPORT + ConstIterator begin () const; + + IMFUTIL_EXPORT + Iterator end (); + IMFUTIL_EXPORT + ConstIterator end () const; + +private: + friend class FlatImage; + + // + // The constructor and destructor are private. + // Image levels exist only as part of an image. + // + IMFUTIL_HIDDEN + FlatImageLevel ( + FlatImage& image, + int xLevelNumber, + int yLevelNumber, + const IMATH_NAMESPACE::Box2i& dataWindow); + + IMFUTIL_HIDDEN + virtual ~FlatImageLevel (); + + IMFUTIL_HIDDEN + virtual void resize (const IMATH_NAMESPACE::Box2i& dataWindow); + + IMFUTIL_HIDDEN + virtual void shiftPixels (int dx, int dy); + + IMFUTIL_HIDDEN + virtual void insertChannel ( + const std::string& name, + PixelType type, + int xSampling, + int ySampling, + bool pLinear); + + IMFUTIL_HIDDEN + virtual void eraseChannel (const std::string& name); + + IMFUTIL_HIDDEN + virtual void clearChannels (); + + IMFUTIL_HIDDEN + virtual void + renameChannel (const std::string& oldName, const std::string& newName); + + IMFUTIL_HIDDEN + virtual void renameChannels (const RenamingMap& oldToNewNames); + + ChannelMap _channels; +}; + +class IMFUTIL_EXPORT_TYPE FlatImageLevel::Iterator +{ +public: + IMFUTIL_EXPORT + Iterator (); + IMFUTIL_EXPORT + Iterator (const FlatImageLevel::ChannelMap::iterator& i); + + // + // Advance the iterator + // + + IMFUTIL_EXPORT + Iterator& operator++ (); + IMFUTIL_EXPORT + Iterator operator++ (int); + + // + // Access to the channel to which the iterator points, + // and to the name of that channel. + // + + IMFUTIL_EXPORT + const std::string& name () const; + IMFUTIL_EXPORT + FlatImageChannel& channel () const; + +private: + friend class FlatImageLevel::ConstIterator; + + FlatImageLevel::ChannelMap::iterator _i; +}; + +class IMFUTIL_EXPORT_TYPE FlatImageLevel::ConstIterator +{ +public: + IMFUTIL_EXPORT + ConstIterator (); + IMFUTIL_EXPORT + ConstIterator (const FlatImageLevel::ChannelMap::const_iterator& i); + IMFUTIL_EXPORT + ConstIterator (const FlatImageLevel::Iterator& other); + + // + // Advance the iterator + // + + IMFUTIL_EXPORT + ConstIterator& operator++ (); + IMFUTIL_EXPORT + ConstIterator operator++ (int); + + // + // Access to the channel to which the iterator points, + // and to the name of that channel. + // + + IMFUTIL_EXPORT + const std::string& name () const; + IMFUTIL_EXPORT + const FlatImageChannel& channel () const; + +private: + friend bool operator== (const ConstIterator&, const ConstIterator&); + + friend bool operator!= (const ConstIterator&, const ConstIterator&); + + FlatImageLevel::ChannelMap::const_iterator _i; +}; + +//----------------------------------------------------------------------------- +// Implementation of templates and inline functions +//----------------------------------------------------------------------------- + +template +TypedFlatImageChannel* +FlatImageLevel::findTypedChannel (const std::string& name) +{ + return dynamic_cast*> (findChannel (name)); +} + +template +const TypedFlatImageChannel* +FlatImageLevel::findTypedChannel (const std::string& name) const +{ + return dynamic_cast*> (findChannel (name)); +} + +template +TypedFlatImageChannel& +FlatImageLevel::typedChannel (const std::string& name) +{ + TypedFlatImageChannel* ptr = findTypedChannel (name); + + if (ptr == 0) throwBadChannelNameOrType (name); + + return *ptr; +} + +template +const TypedFlatImageChannel& +FlatImageLevel::typedChannel (const std::string& name) const +{ + const TypedFlatImageChannel* ptr = findTypedChannel (name); + + if (ptr == 0) throwBadChannelNameOrType (name); + + return *ptr; +} + +inline FlatImageLevel::Iterator::Iterator () : _i () +{ + // empty +} + +inline FlatImageLevel::Iterator::Iterator ( + const FlatImageLevel::ChannelMap::iterator& i) + : _i (i) +{ + // empty +} + +inline FlatImageLevel::Iterator& +FlatImageLevel::Iterator::operator++ () +{ + ++_i; + return *this; +} + +inline FlatImageLevel::Iterator +FlatImageLevel::Iterator::operator++ (int) +{ + Iterator tmp = *this; + ++_i; + return tmp; +} + +inline const std::string& +FlatImageLevel::Iterator::name () const +{ + return _i->first; +} + +inline FlatImageChannel& +FlatImageLevel::Iterator::channel () const +{ + return *_i->second; +} + +inline FlatImageLevel::ConstIterator::ConstIterator () : _i () +{ + // empty +} + +inline FlatImageLevel::ConstIterator::ConstIterator ( + const FlatImageLevel::ChannelMap::const_iterator& i) + : _i (i) +{ + // empty +} + +inline FlatImageLevel::ConstIterator::ConstIterator ( + const FlatImageLevel::Iterator& other) + : _i (other._i) +{ + // empty +} + +inline FlatImageLevel::ConstIterator& +FlatImageLevel::ConstIterator::operator++ () +{ + ++_i; + return *this; +} + +inline FlatImageLevel::ConstIterator +FlatImageLevel::ConstIterator::operator++ (int) +{ + ConstIterator tmp = *this; + ++_i; + return tmp; +} + +inline const std::string& +FlatImageLevel::ConstIterator::name () const +{ + return _i->first; +} + +inline const FlatImageChannel& +FlatImageLevel::ConstIterator::channel () const +{ + return *_i->second; +} + +inline bool +operator== ( + const FlatImageLevel::ConstIterator& x, + const FlatImageLevel::ConstIterator& y) +{ + return x._i == y._i; +} + +inline bool +operator!= ( + const FlatImageLevel::ConstIterator& x, + const FlatImageLevel::ConstIterator& y) +{ + return !(x == y); +} + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT + +#endif diff --git a/third_party/tlRender-install-Release/include/OpenEXR/ImfFloatAttribute.h b/third_party/tlRender-install-Release/include/OpenEXR/ImfFloatAttribute.h new file mode 100644 index 00000000..ce5ae597 --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenEXR/ImfFloatAttribute.h @@ -0,0 +1,30 @@ +// +// SPDX-License-Identifier: BSD-3-Clause +// Copyright (c) Contributors to the OpenEXR Project. +// + +#ifndef INCLUDED_IMF_FLOAT_ATTRIBUTE_H +#define INCLUDED_IMF_FLOAT_ATTRIBUTE_H + +//----------------------------------------------------------------------------- +// +// class FloatAttribute +// +//----------------------------------------------------------------------------- + +#include "ImfExport.h" +#include "ImfNamespace.h" + +#include "ImfAttribute.h" + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER + +typedef TypedAttribute FloatAttribute; + +#ifndef COMPILING_IMF_FLOAT_ATTRIBUTE +extern template class IMF_EXPORT_EXTERN_TEMPLATE TypedAttribute; +#endif + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT + +#endif diff --git a/third_party/tlRender-install-Release/include/OpenEXR/ImfFloatVectorAttribute.h b/third_party/tlRender-install-Release/include/OpenEXR/ImfFloatVectorAttribute.h new file mode 100644 index 00000000..e365eea2 --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenEXR/ImfFloatVectorAttribute.h @@ -0,0 +1,35 @@ +// +// SPDX-License-Identifier: BSD-3-Clause +// Copyright (c) Weta Digital, Ltd and Contributors to the OpenEXR Project. +// + +#ifndef INCLUDED_IMF_FLOATVECTOR_ATTRIBUTE_H +#define INCLUDED_IMF_FLOATVECTOR_ATTRIBUTE_H + +//----------------------------------------------------------------------------- +// +// class FloatVectorAttribute +// +//----------------------------------------------------------------------------- + +#include "ImfExport.h" +#include "ImfNamespace.h" + +#include "ImfAttribute.h" + +#include + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER + +typedef std::vector FloatVector; + +typedef TypedAttribute + FloatVectorAttribute; + +#ifndef COMPILING_IMF_FLOAT_VECTOR_ATTRIBUTE +extern template class IMF_EXPORT_EXTERN_TEMPLATE TypedAttribute; +#endif + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT + +#endif diff --git a/third_party/tlRender-install-Release/include/OpenEXR/ImfForward.h b/third_party/tlRender-install-Release/include/OpenEXR/ImfForward.h new file mode 100644 index 00000000..96db40eb --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenEXR/ImfForward.h @@ -0,0 +1,94 @@ +// +// SPDX-License-Identifier: BSD-3-Clause +// Copyright (c) Contributors to the OpenEXR Project. +// + +#ifndef INCLUDED_IMF_FORWARD_H +#define INCLUDED_IMF_FORWARD_H + +//////////////////////////////////////////////////////////////////// +// +// Forward declarations for OpenEXR - correctly declares namespace +// +//////////////////////////////////////////////////////////////////// + +#include "ImfExport.h" +#include "ImfNamespace.h" + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER + +// classes for basic types; +template class IMF_EXPORT_TEMPLATE_TYPE Array; +template class IMF_EXPORT_TEMPLATE_TYPE Array2D; +struct IMF_EXPORT_TYPE Channel; +class IMF_EXPORT_TYPE ChannelList; +struct IMF_EXPORT_TYPE Chromaticities; + +// attributes used in headers are TypedAttributes +class IMF_EXPORT_TYPE Attribute; + +class IMF_EXPORT_TYPE Header; + +// file handling classes +class IMF_EXPORT_TYPE OutputFile; +class IMF_EXPORT_TYPE TiledInputFile; +class IMF_EXPORT_TYPE ScanLineInputFile; +class IMF_EXPORT_TYPE InputFile; +class IMF_EXPORT_TYPE TiledOutputFile; +class IMF_EXPORT_TYPE DeepScanLineInputFile; +class IMF_EXPORT_TYPE DeepScanLineOutputFile; +class IMF_EXPORT_TYPE DeepTiledInputFile; +class IMF_EXPORT_TYPE DeepTiledOutputFile; +class IMF_EXPORT_TYPE AcesInputFile; +class IMF_EXPORT_TYPE AcesOutputFile; +class IMF_EXPORT_TYPE TiledInputPart; +class IMF_EXPORT_TYPE TiledInputFile; +class IMF_EXPORT_TYPE TileOffsets; + +// multipart file handling +class IMF_EXPORT_TYPE GenericInputFile; +class IMF_EXPORT_TYPE GenericOutputFile; +class IMF_EXPORT_TYPE MultiPartInputFile; +class IMF_EXPORT_TYPE MultiPartOutputFile; + +class IMF_EXPORT_TYPE InputPart; +class IMF_EXPORT_TYPE TiledInputPart; +class IMF_EXPORT_TYPE DeepScanLineInputPart; +class IMF_EXPORT_TYPE DeepTiledInputPart; + +class IMF_EXPORT_TYPE OutputPart; +class IMF_EXPORT_TYPE ScanLineOutputPart; +class IMF_EXPORT_TYPE TiledOutputPart; +class IMF_EXPORT_TYPE DeepScanLineOutputPart; +class IMF_EXPORT_TYPE DeepTiledOutputPart; + +// internal use only +struct InputPartData; +struct OutputStreamMutex; +struct OutputPartData; +struct InputStreamMutex; + +// frame buffers + +class IMF_EXPORT_TYPE FrameBuffer; +class IMF_EXPORT_TYPE DeepFrameBuffer; +struct IMF_EXPORT_TYPE DeepSlice; + +// compositing +class IMF_EXPORT_TYPE DeepCompositing; +class IMF_EXPORT_TYPE CompositeDeepScanLine; + +// preview image +class IMF_EXPORT_TYPE PreviewImage; +struct IMF_EXPORT_TYPE PreviewRgba; + +// streams +class IMF_EXPORT_TYPE OStream; +class IMF_EXPORT_TYPE IStream; + +class IMF_EXPORT_TYPE IDManifest; +class IMF_EXPORT_TYPE CompressedIDManifest; + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT + +#endif // include guard diff --git a/third_party/tlRender-install-Release/include/OpenEXR/ImfFrameBuffer.h b/third_party/tlRender-install-Release/include/OpenEXR/ImfFrameBuffer.h new file mode 100644 index 00000000..229ec4df --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenEXR/ImfFrameBuffer.h @@ -0,0 +1,391 @@ +// +// SPDX-License-Identifier: BSD-3-Clause +// Copyright (c) Contributors to the OpenEXR Project. +// + +#ifndef INCLUDED_IMF_FRAME_BUFFER_H +#define INCLUDED_IMF_FRAME_BUFFER_H + +//----------------------------------------------------------------------------- +// +// class Slice +// class FrameBuffer +// +//----------------------------------------------------------------------------- + +#include "ImfForward.h" + +#include "ImfName.h" +#include "ImfPixelType.h" + +#include + +#include +#include +#include + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER + +//------------------------------------------------------- +// Description of a single slice of the frame buffer: +// +// Note -- terminology: as part of a file, a component of +// an image (e.g. red, green, blue, depth etc.) is called +// a "channel". As part of a frame buffer, an image +// component is called a "slice". +//------------------------------------------------------- + +struct IMF_EXPORT_TYPE Slice +{ + //------------------------------ + // Data type; see ImfPixelType.h + //------------------------------ + + PixelType type; + + //--------------------------------------------------------------------- + // Memory layout: The address of pixel (x, y) is + // + // base + (xp / xSampling) * xStride + (yp / ySampling) * yStride + // + // where xp and yp are computed as follows: + // + // * If we are reading or writing a scanline-based file: + // + // xp = x + // yp = y + // + // * If we are reading a tile whose upper left coorner is at (xt, yt): + // + // if xTileCoords is true then xp = x - xt, else xp = x + // if yTileCoords is true then yp = y - yt, else yp = y + // + //--------------------------------------------------------------------- + + char* base; + size_t xStride; + size_t yStride; + + //-------------------------------------------- + // Subsampling: pixel (x, y) is present in the + // slice only if + // + // x % xSampling == 0 && y % ySampling == 0 + // + //-------------------------------------------- + + int xSampling; + int ySampling; + + //---------------------------------------------------------- + // Default value, used to fill the slice when a file without + // a channel that corresponds to this slice is read. + //---------------------------------------------------------- + + double fillValue; + + //------------------------------------------------------- + // For tiled files, the xTileCoords and yTileCoords flags + // determine whether pixel addressing is performed using + // absolute coordinates or coordinates relative to a + // tile's upper left corner. (See the comment on base, + // xStride and yStride, above.) + // + // For scanline-based files these flags have no effect; + // pixel addressing is always done using absolute + // coordinates. + //------------------------------------------------------- + + bool xTileCoords; + bool yTileCoords; + + //------------ + // Constructor + //------------ + + IMF_EXPORT + Slice ( + PixelType type = HALF, + char* base = 0, + size_t xStride = 0, + size_t yStride = 0, + int xSampling = 1, + int ySampling = 1, + double fillValue = 0.0, + bool xTileCoords = false, + bool yTileCoords = false); + + // Does the heavy lifting of computing the base pointer for a slice, + // avoiding overflow issues with large origin offsets + // + // if xStride == 0, assumes sizeof(pixeltype) + // if yStride == 0, assumes xStride * ( w / xSampling ) + IMF_EXPORT + static Slice Make ( + PixelType type, + const void* ptr, + const IMATH_NAMESPACE::V2i& origin, + int64_t w, + int64_t h, + size_t xStride = 0, + size_t yStride = 0, + int xSampling = 1, + int ySampling = 1, + double fillValue = 0.0, + bool xTileCoords = false, + bool yTileCoords = false); + // same as above, just computes w and h for you + // from a data window + IMF_EXPORT + static Slice Make ( + PixelType type, + const void* ptr, + const IMATH_NAMESPACE::Box2i& dataWindow, + size_t xStride = 0, + size_t yStride = 0, + int xSampling = 1, + int ySampling = 1, + double fillValue = 0.0, + bool xTileCoords = false, + bool yTileCoords = false); +}; + +class IMF_EXPORT_TYPE FrameBuffer +{ +public: + //------------ + // Add a slice + //------------ + + IMF_EXPORT + void insert (const char name[], const Slice& slice); + + IMF_EXPORT + void insert (const std::string& name, const Slice& slice); + + //---------------------------------------------------------------- + // Access to existing slices: + // + // [n] Returns a reference to the slice with name n. + // If no slice with name n exists, an IEX_NAMESPACE::ArgExc + // is thrown. + // + // findSlice(n) Returns a pointer to the slice with name n, + // or 0 if no slice with name n exists. + // + //---------------------------------------------------------------- + + IMF_EXPORT + Slice& operator[] (const char name[]); + IMF_EXPORT + const Slice& operator[] (const char name[]) const; + + IMF_EXPORT + Slice& operator[] (const std::string& name); + IMF_EXPORT + const Slice& operator[] (const std::string& name) const; + + IMF_EXPORT + Slice* findSlice (const char name[]); + IMF_EXPORT + const Slice* findSlice (const char name[]) const; + + IMF_EXPORT + Slice* findSlice (const std::string& name); + IMF_EXPORT + const Slice* findSlice (const std::string& name) const; + + //----------------------------------------- + // Iterator-style access to existing slices + //----------------------------------------- + + typedef std::map SliceMap; + + class Iterator; + class ConstIterator; + + IMF_EXPORT + Iterator begin (); + IMF_EXPORT + ConstIterator begin () const; + + IMF_EXPORT + Iterator end (); + IMF_EXPORT + ConstIterator end () const; + + IMF_EXPORT + Iterator find (const char name[]); + IMF_EXPORT + ConstIterator find (const char name[]) const; + + IMF_EXPORT + Iterator find (const std::string& name); + IMF_EXPORT + ConstIterator find (const std::string& name) const; + +private: + SliceMap _map; +}; + +//---------- +// Iterators +//---------- + +class IMF_EXPORT_TYPE FrameBuffer::Iterator +{ +public: + IMF_EXPORT + Iterator (); + IMF_EXPORT + Iterator (const FrameBuffer::SliceMap::iterator& i); + + IMF_EXPORT + Iterator& operator++ (); + IMF_EXPORT + Iterator operator++ (int); + + IMF_EXPORT + const char* name () const; + IMF_EXPORT + Slice& slice () const; + +private: + friend class FrameBuffer::ConstIterator; + + FrameBuffer::SliceMap::iterator _i; +}; + +class IMF_EXPORT_TYPE FrameBuffer::ConstIterator +{ +public: + IMF_EXPORT + ConstIterator (); + IMF_EXPORT + ConstIterator (const FrameBuffer::SliceMap::const_iterator& i); + IMF_EXPORT + ConstIterator (const FrameBuffer::Iterator& other); + + IMF_EXPORT + ConstIterator& operator++ (); + IMF_EXPORT + ConstIterator operator++ (int); + + IMF_EXPORT + const char* name () const; + IMF_EXPORT + const Slice& slice () const; + +private: + friend bool operator== (const ConstIterator&, const ConstIterator&); + friend bool operator!= (const ConstIterator&, const ConstIterator&); + + FrameBuffer::SliceMap::const_iterator _i; +}; + +//----------------- +// Inline Functions +//----------------- + +inline FrameBuffer::Iterator::Iterator () : _i () +{ + // empty +} + +inline FrameBuffer::Iterator::Iterator ( + const FrameBuffer::SliceMap::iterator& i) + : _i (i) +{ + // empty +} + +inline FrameBuffer::Iterator& +FrameBuffer::Iterator::operator++ () +{ + ++_i; + return *this; +} + +inline FrameBuffer::Iterator +FrameBuffer::Iterator::operator++ (int) +{ + Iterator tmp = *this; + ++_i; + return tmp; +} + +inline const char* +FrameBuffer::Iterator::name () const +{ + return *_i->first; +} + +inline Slice& +FrameBuffer::Iterator::slice () const +{ + return _i->second; +} + +inline FrameBuffer::ConstIterator::ConstIterator () : _i () +{ + // empty +} + +inline FrameBuffer::ConstIterator::ConstIterator ( + const FrameBuffer::SliceMap::const_iterator& i) + : _i (i) +{ + // empty +} + +inline FrameBuffer::ConstIterator::ConstIterator ( + const FrameBuffer::Iterator& other) + : _i (other._i) +{ + // empty +} + +inline FrameBuffer::ConstIterator& +FrameBuffer::ConstIterator::operator++ () +{ + ++_i; + return *this; +} + +inline FrameBuffer::ConstIterator +FrameBuffer::ConstIterator::operator++ (int) +{ + ConstIterator tmp = *this; + ++_i; + return tmp; +} + +inline const char* +FrameBuffer::ConstIterator::name () const +{ + return *_i->first; +} + +inline const Slice& +FrameBuffer::ConstIterator::slice () const +{ + return _i->second; +} + +inline bool +operator== ( + const FrameBuffer::ConstIterator& x, const FrameBuffer::ConstIterator& y) +{ + return x._i == y._i; +} + +inline bool +operator!= ( + const FrameBuffer::ConstIterator& x, const FrameBuffer::ConstIterator& y) +{ + return !(x == y); +} + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT + +#endif diff --git a/third_party/tlRender-install-Release/include/OpenEXR/ImfFramesPerSecond.h b/third_party/tlRender-install-Release/include/OpenEXR/ImfFramesPerSecond.h new file mode 100644 index 00000000..63caf713 --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenEXR/ImfFramesPerSecond.h @@ -0,0 +1,101 @@ +// +// SPDX-License-Identifier: BSD-3-Clause +// Copyright (c) Contributors to the OpenEXR Project. +// + +#ifndef INCLUDED_IMF_FRAMES_PER_SECOND_H +#define INCLUDED_IMF_FRAMES_PER_SECOND_H + +//----------------------------------------------------------------------------- +// +// Convenience functions related to the framesPerSecond attribute +// +// Functions that return the exact values for commonly used frame rates: +// +// name frames per second +// +// fps_23_976() 23.976023... +// fps_24() 24.0 35mm film frames +// fps_25() 25.0 PAL video frames +// fps_29_97() 29.970029... NTSC video frames +// fps_30() 30.0 60Hz HDTV frames +// fps_47_952() 47.952047... +// fps_48() 48.0 +// fps_50() 50.0 PAL video fields +// fps_59_94() 59.940059... NTSC video fields +// fps_60() 60.0 60Hz HDTV fields +// +// Functions that try to convert inexact frame rates into exact ones: +// +// Given a frame rate, fps, that is close to one of the pre-defined +// frame rates fps_23_976(), fps_29_97(), fps_47_952() or fps_59_94(), +// guessExactFps(fps) returns the corresponding pre-defined frame +// rate. If fps is not close to one of the pre-defined frame rates, +// then guessExactFps(fps) returns Rational(fps). +// +//----------------------------------------------------------------------------- + +#include "ImfExport.h" +#include "ImfNamespace.h" + +#include "ImfRational.h" + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER + +inline Rational +fps_23_976 () +{ + return Rational (24000, 1001); +} +inline Rational +fps_24 () +{ + return Rational (24, 1); +} +inline Rational +fps_25 () +{ + return Rational (25, 1); +} +inline Rational +fps_29_97 () +{ + return Rational (30000, 1001); +} +inline Rational +fps_30 () +{ + return Rational (30, 1); +} +inline Rational +fps_47_952 () +{ + return Rational (48000, 1001); +} +inline Rational +fps_48 () +{ + return Rational (48, 1); +} +inline Rational +fps_50 () +{ + return Rational (50, 1); +} +inline Rational +fps_59_94 () +{ + return Rational (60000, 1001); +} +inline Rational +fps_60 () +{ + return Rational (60, 1); +} + +IMF_EXPORT Rational guessExactFps (double fps); +IMF_EXPORT Rational guessExactFps (const Rational& fps); + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT + +#endif diff --git a/third_party/tlRender-install-Release/include/OpenEXR/ImfGenericInputFile.h b/third_party/tlRender-install-Release/include/OpenEXR/ImfGenericInputFile.h new file mode 100644 index 00000000..4151bfbd --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenEXR/ImfGenericInputFile.h @@ -0,0 +1,29 @@ +// +// SPDX-License-Identifier: BSD-3-Clause +// Copyright (c) Contributors to the OpenEXR Project. +// + +#ifndef IMFGENERICINPUTFILE_H_ +#define IMFGENERICINPUTFILE_H_ + +#include "ImfForward.h" + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER + +class IMF_EXPORT_TYPE GenericInputFile +{ +public: + IMF_EXPORT + virtual ~GenericInputFile (); + +protected: + IMF_EXPORT + GenericInputFile (); + IMF_EXPORT + void readMagicNumberAndVersionField ( + OPENEXR_IMF_INTERNAL_NAMESPACE::IStream& is, int& version); +}; + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT + +#endif /* IMFGENERICINPUTFILE_H_ */ diff --git a/third_party/tlRender-install-Release/include/OpenEXR/ImfGenericOutputFile.h b/third_party/tlRender-install-Release/include/OpenEXR/ImfGenericOutputFile.h new file mode 100644 index 00000000..e057bbba --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenEXR/ImfGenericOutputFile.h @@ -0,0 +1,34 @@ +// +// SPDX-License-Identifier: BSD-3-Clause +// Copyright (c) Contributors to the OpenEXR Project. +// + +#ifndef IMFGENERICOUTPUTFILE_H_ +#define IMFGENERICOUTPUTFILE_H_ + +#include "ImfForward.h" + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER + +class IMF_EXPORT_TYPE GenericOutputFile +{ +public: + IMF_EXPORT + virtual ~GenericOutputFile (); + +protected: + IMF_EXPORT + GenericOutputFile (); + IMF_EXPORT + void writeMagicNumberAndVersionField ( + OPENEXR_IMF_INTERNAL_NAMESPACE::OStream& os, const Header& header); + IMF_EXPORT + void writeMagicNumberAndVersionField ( + OPENEXR_IMF_INTERNAL_NAMESPACE::OStream& os, + const Header* headers, + int parts); +}; + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT + +#endif /* GENERICOUTPUTFILE_H_ */ diff --git a/third_party/tlRender-install-Release/include/OpenEXR/ImfHeader.h b/third_party/tlRender-install-Release/include/OpenEXR/ImfHeader.h new file mode 100644 index 00000000..e965bffb --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenEXR/ImfHeader.h @@ -0,0 +1,728 @@ +// +// SPDX-License-Identifier: BSD-3-Clause +// Copyright (c) Contributors to the OpenEXR Project. +// + +#ifndef INCLUDED_IMF_HEADER_H +#define INCLUDED_IMF_HEADER_H + +//----------------------------------------------------------------------------- +// +// class Header +// +//----------------------------------------------------------------------------- + +#include "ImfForward.h" + +#include "IexBaseExc.h" +#include "ImathBox.h" +#include "ImathVec.h" +#include "ImfCompression.h" +#include "ImfLineOrder.h" +#include "ImfName.h" +#include "ImfTileDescription.h" + +#include "ImfAttribute.h" + +#include +#include +#include +#include + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER + +using std::string; + +class IMF_EXPORT_TYPE Header +{ +public: + //---------------------------------------------------------------- + // Default constructor -- the display window and the data window + // are both set to Box2i (V2i (0, 0), V2i (width-1, height-1). + //---------------------------------------------------------------- + + IMF_EXPORT + Header ( + int width = 64, + int height = 64, + float pixelAspectRatio = 1, + const IMATH_NAMESPACE::V2f& screenWindowCenter = + IMATH_NAMESPACE::V2f (0, 0), + float screenWindowWidth = 1, + LineOrder lineOrder = INCREASING_Y, + Compression = ZIP_COMPRESSION); + + //-------------------------------------------------------------------- + // Constructor -- the data window is specified explicitly; the display + // window is set to Box2i (V2i (0, 0), V2i (width-1, height-1). + //-------------------------------------------------------------------- + + IMF_EXPORT + Header ( + int width, + int height, + const IMATH_NAMESPACE::Box2i& dataWindow, + float pixelAspectRatio = 1, + const IMATH_NAMESPACE::V2f& screenWindowCenter = + IMATH_NAMESPACE::V2f (0, 0), + float screenWindowWidth = 1, + LineOrder lineOrder = INCREASING_Y, + Compression = ZIP_COMPRESSION); + + //---------------------------------------------------------- + // Constructor -- the display window and the data window are + // both specified explicitly. + //---------------------------------------------------------- + + IMF_EXPORT + Header ( + const IMATH_NAMESPACE::Box2i& displayWindow, + const IMATH_NAMESPACE::Box2i& dataWindow, + float pixelAspectRatio = 1, + const IMATH_NAMESPACE::V2f& screenWindowCenter = + IMATH_NAMESPACE::V2f (0, 0), + float screenWindowWidth = 1, + LineOrder lineOrder = INCREASING_Y, + Compression = ZIP_COMPRESSION); + + //----------------- + // Copy constructor + //----------------- + + IMF_EXPORT + Header (const Header& other); + IMF_EXPORT + Header (Header&& other); + + //----------- + // Destructor + //----------- + + IMF_EXPORT + ~Header (); + + //----------- + // Assignment + //----------- + + IMF_EXPORT + Header& operator= (const Header& other); + IMF_EXPORT + Header& operator= (Header&& other); + + //--------------------------------------------------------------- + // Add an attribute: + // + // insert(n,attr) If no attribute with name n exists, a new + // attribute with name n, and the same type as + // attr, is added, and the value of attr is + // copied into the new attribute. + // + // If an attribute with name n exists, and its + // type is the same as attr, the value of attr + // is copied into this attribute. + // + // If an attribute with name n exists, and its + // type is different from attr, an IEX_NAMESPACE::TypeExc + // is thrown. + // + //--------------------------------------------------------------- + + IMF_EXPORT + void insert (const char name[], const Attribute& attribute); + + IMF_EXPORT + void insert (const std::string& name, const Attribute& attribute); + + //--------------------------------------------------------------- + // Remove an attribute: + // + // remove(n) If an attribute with name n exists, then it + // is removed from the map of present attributes. + // + // If no attribute with name n exists, then this + // functions becomes a 'no-op' + // + //--------------------------------------------------------------- + + IMF_EXPORT + void erase (const char name[]); + IMF_EXPORT + void erase (const std::string& name); + + //------------------------------------------------------------------ + // Access to existing attributes: + // + // [n] Returns a reference to the attribute + // with name n. If no attribute with + // name n exists, an IEX_NAMESPACE::ArgExc is thrown. + // + // typedAttribute(n) Returns a reference to the attribute + // with name n and type T. If no attribute + // with name n exists, an IEX_NAMESPACE::ArgExc is + // thrown. If an attribute with name n + // exists, but its type is not T, an + // IEX_NAMESPACE::TypeExc is thrown. + // + // findTypedAttribute(n) Returns a pointer to the attribute with + // name n and type T, or 0 if no attribute + // with name n and type T exists. + // + //------------------------------------------------------------------ + + IMF_EXPORT + Attribute& operator[] (const char name[]); + IMF_EXPORT + const Attribute& operator[] (const char name[]) const; + + IMF_EXPORT + Attribute& operator[] (const std::string& name); + IMF_EXPORT + const Attribute& operator[] (const std::string& name) const; + + template T& typedAttribute (const char name[]); + template const T& typedAttribute (const char name[]) const; + + template T& typedAttribute (const std::string& name); + template const T& typedAttribute (const std::string& name) const; + + template T* findTypedAttribute (const char name[]); + template const T* findTypedAttribute (const char name[]) const; + + template T* findTypedAttribute (const std::string& name); + template + const T* findTypedAttribute (const std::string& name) const; + + //--------------------------------------------- + // Iterator-style access to existing attributes + //--------------------------------------------- + + typedef std::map AttributeMap; + + class Iterator; + class ConstIterator; + + IMF_EXPORT + Iterator begin (); + IMF_EXPORT + ConstIterator begin () const; + + IMF_EXPORT + Iterator end (); + IMF_EXPORT + ConstIterator end () const; + + IMF_EXPORT + Iterator find (const char name[]); + IMF_EXPORT + ConstIterator find (const char name[]) const; + + IMF_EXPORT + Iterator find (const std::string& name); + IMF_EXPORT + ConstIterator find (const std::string& name) const; + + //-------------------------------- + // Access to predefined attributes + //-------------------------------- + + IMF_EXPORT + IMATH_NAMESPACE::Box2i& displayWindow (); + IMF_EXPORT + const IMATH_NAMESPACE::Box2i& displayWindow () const; + + IMF_EXPORT + IMATH_NAMESPACE::Box2i& dataWindow (); + IMF_EXPORT + const IMATH_NAMESPACE::Box2i& dataWindow () const; + + IMF_EXPORT + float& pixelAspectRatio (); + IMF_EXPORT + const float& pixelAspectRatio () const; + + IMF_EXPORT + IMATH_NAMESPACE::V2f& screenWindowCenter (); + IMF_EXPORT + const IMATH_NAMESPACE::V2f& screenWindowCenter () const; + + IMF_EXPORT + float& screenWindowWidth (); + IMF_EXPORT + const float& screenWindowWidth () const; + + IMF_EXPORT + ChannelList& channels (); + IMF_EXPORT + const ChannelList& channels () const; + + IMF_EXPORT + LineOrder& lineOrder (); + IMF_EXPORT + const LineOrder& lineOrder () const; + + IMF_EXPORT + Compression& compression (); + IMF_EXPORT + const Compression& compression () const; + + //----------------------------------------------------- + // The header object allows one to store a compression level to be + // used when writing a file. + // + // NB: These are NOT attributes, and will not be written to the + // file, but are instead ephemeral settings to be used for this + // instance of the header object. + // + // ----------------------------------------------------- + IMF_EXPORT + void resetDefaultCompressionLevels (); + IMF_EXPORT + int& zipCompressionLevel (); + IMF_EXPORT + int zipCompressionLevel () const; + IMF_EXPORT + float& dwaCompressionLevel (); + IMF_EXPORT + float dwaCompressionLevel () const; + + //----------------------------------------------------- + // Access to required attributes for multipart files + // They are optional to non-multipart files and mandatory + // for multipart files. + //----------------------------------------------------- + IMF_EXPORT + void setName (const string& name); + + IMF_EXPORT + string& name (); + IMF_EXPORT + const string& name () const; + + IMF_EXPORT + bool hasName () const; + + IMF_EXPORT + void setType (const string& Type); + + IMF_EXPORT + string& type (); + IMF_EXPORT + const string& type () const; + + IMF_EXPORT + bool hasType () const; + + IMF_EXPORT + void setVersion (const int version); + + IMF_EXPORT + int& version (); + IMF_EXPORT + const int& version () const; + + IMF_EXPORT + bool hasVersion () const; + + // + // the chunkCount attribute is set automatically when a file is written. + // There is no need to set it manually + // + IMF_EXPORT + void setChunkCount (int chunks); + IMF_EXPORT + bool hasChunkCount () const; + IMF_EXPORT + const int& chunkCount () const; + IMF_EXPORT + int& chunkCount (); + + // + // for multipart files, return whether the file has a view string attribute + // (for the deprecated single part multiview format EXR, see ImfMultiView.h) + // + IMF_EXPORT + void setView (const string& view); + IMF_EXPORT + bool hasView () const; + IMF_EXPORT + string& view (); + IMF_EXPORT + const string& view () const; + + //---------------------------------------------------------------------- + // Tile Description: + // + // The tile description is a TileDescriptionAttribute whose name + // is "tiles". The "tiles" attribute must be present in any tiled + // image file. When present, it describes various properties of the + // tiles that make up the file. + // + // Convenience functions: + // + // setTileDescription(td) + // calls insert ("tiles", TileDescriptionAttribute (td)) + // + // tileDescription() + // returns typedAttribute("tiles").value() + // + // hasTileDescription() + // return findTypedAttribute("tiles") != 0 + // + //---------------------------------------------------------------------- + + IMF_EXPORT + void setTileDescription (const TileDescription& td); + + IMF_EXPORT + TileDescription& tileDescription (); + IMF_EXPORT + const TileDescription& tileDescription () const; + + IMF_EXPORT + bool hasTileDescription () const; + + //---------------------------------------------------------------------- + // Preview image: + // + // The preview image is a PreviewImageAttribute whose name is "preview". + // This attribute is special -- while an image file is being written, + // the pixels of the preview image can be changed repeatedly by calling + // OutputFile::updatePreviewImage(). + // + // Convenience functions: + // + // setPreviewImage(p) + // calls insert ("preview", PreviewImageAttribute (p)) + // + // previewImage() + // returns typedAttribute("preview").value() + // + // hasPreviewImage() + // return findTypedAttribute("preview") != 0 + // + //---------------------------------------------------------------------- + + IMF_EXPORT + void setPreviewImage (const PreviewImage& p); + + IMF_EXPORT + PreviewImage& previewImage (); + IMF_EXPORT + const PreviewImage& previewImage () const; + + IMF_EXPORT + bool hasPreviewImage () const; + + //------------------------------------------------------------- + // Sanity check -- examines the header, and throws an exception + // if it finds something wrong (empty display window, negative + // pixel aspect ratio, unknown compression scheme etc...) + // + // set isTiled to true if you are checking a tiled/multi-res + // header + //------------------------------------------------------------- + + IMF_EXPORT + void sanityCheck (bool isTiled = false, bool isMultipartFile = false) const; + + //---------------------------------------------------------------- + // Maximum image size and maximum tile size: + // + // sanityCheck() will throw an exception if the width or height of + // the data window exceeds the maximum image width or height, or + // if the size of a tile exceeds the maximum tile width or height. + // + // At program startup the maximum image and tile width and height + // are set to zero, meaning that width and height are unlimited. + // + // Limiting image and tile width and height limits how much memory + // will be allocated when a file is opened. This can help protect + // applications from running out of memory while trying to read + // a damaged image file. + //---------------------------------------------------------------- + + IMF_EXPORT + static void setMaxImageSize (int maxWidth, int maxHeight); + IMF_EXPORT + static void setMaxTileSize (int maxWidth, int maxHeight); + IMF_EXPORT + static void getMaxImageSize (int& maxWidth, int& maxHeight); + IMF_EXPORT + static void getMaxTileSize (int& maxWidth, int& maxHeight); + + // + // Check if the header reads nothing. + // + IMF_EXPORT + bool readsNothing (); + + //------------------------------------------------------------------ + // Input and output: + // + // If the header contains a preview image attribute, then writeTo() + // returns the position of that attribute in the output stream; this + // information is used by OutputFile::updatePreviewImage(). + // If the header contains no preview image attribute, then writeTo() + // returns 0. + //------------------------------------------------------------------ + + IMF_EXPORT + uint64_t writeTo ( + OPENEXR_IMF_INTERNAL_NAMESPACE::OStream& os, + bool isTiled = false) const; + + IMF_EXPORT + void readFrom (OPENEXR_IMF_INTERNAL_NAMESPACE::IStream& is, int& version); + +private: + AttributeMap _map; + + bool _readsNothing; +}; + +//---------- +// Iterators +//---------- + +class IMF_EXPORT_TYPE Header::Iterator +{ +public: + IMF_EXPORT + Iterator (); + IMF_EXPORT + Iterator (const Header::AttributeMap::iterator& i); + + IMF_EXPORT + Iterator& operator++ (); + IMF_EXPORT + Iterator operator++ (int); + + IMF_EXPORT + const char* name () const; + IMF_EXPORT + Attribute& attribute () const; + +private: + friend class Header::ConstIterator; + + Header::AttributeMap::iterator _i; +}; + +class IMF_EXPORT_TYPE Header::ConstIterator +{ +public: + IMF_EXPORT + ConstIterator (); + IMF_EXPORT + ConstIterator (const Header::AttributeMap::const_iterator& i); + IMF_EXPORT + ConstIterator (const Header::Iterator& other); + + IMF_EXPORT + ConstIterator& operator++ (); + IMF_EXPORT + ConstIterator operator++ (int); + + IMF_EXPORT + const char* name () const; + IMF_EXPORT + const Attribute& attribute () const; + +private: + friend bool operator== (const ConstIterator&, const ConstIterator&); + friend bool operator!= (const ConstIterator&, const ConstIterator&); + + Header::AttributeMap::const_iterator _i; +}; + +//------------------------------------------------------------------------ +// Library initialization: +// +// In a multithreaded program, staticInitialize() must be called once +// during startup, before the program accesses any other functions or +// classes in the OpenEXR library. Calling staticInitialize() in this +// way avoids races during initialization of the library's global +// variables. +// +// Single-threaded programs are not required to call staticInitialize(); +// initialization of the library's global variables happens automatically. +// +//------------------------------------------------------------------------ + +IMF_EXPORT void staticInitialize (); + +//----------------- +// Inline Functions +//----------------- + +inline Header::Iterator::Iterator () : _i () +{ + // empty +} + +inline Header::Iterator::Iterator (const Header::AttributeMap::iterator& i) + : _i (i) +{ + // empty +} + +inline Header::Iterator& +Header::Iterator::operator++ () +{ + ++_i; + return *this; +} + +inline Header::Iterator +Header::Iterator::operator++ (int) +{ + Iterator tmp = *this; + ++_i; + return tmp; +} + +inline const char* +Header::Iterator::name () const +{ + return *_i->first; +} + +inline Attribute& +Header::Iterator::attribute () const +{ + return *_i->second; +} + +inline Header::ConstIterator::ConstIterator () : _i () +{ + // empty +} + +inline Header::ConstIterator::ConstIterator ( + const Header::AttributeMap::const_iterator& i) + : _i (i) +{ + // empty +} + +inline Header::ConstIterator::ConstIterator (const Header::Iterator& other) + : _i (other._i) +{ + // empty +} + +inline Header::ConstIterator& +Header::ConstIterator::operator++ () +{ + ++_i; + return *this; +} + +inline Header::ConstIterator +Header::ConstIterator::operator++ (int) +{ + ConstIterator tmp = *this; + ++_i; + return tmp; +} + +inline const char* +Header::ConstIterator::name () const +{ + return *_i->first; +} + +inline const Attribute& +Header::ConstIterator::attribute () const +{ + return *_i->second; +} + +inline bool +operator== (const Header::ConstIterator& x, const Header::ConstIterator& y) +{ + return x._i == y._i; +} + +inline bool +operator!= (const Header::ConstIterator& x, const Header::ConstIterator& y) +{ + return !(x == y); +} + +//--------------------- +// Template definitions +//--------------------- + +template +T& +Header::typedAttribute (const char name[]) +{ + Attribute* attr = &(*this)[name]; + T* tattr = dynamic_cast (attr); + + if (tattr == 0) throw IEX_NAMESPACE::TypeExc ("Unexpected attribute type."); + + return *tattr; +} + +template +const T& +Header::typedAttribute (const char name[]) const +{ + const Attribute* attr = &(*this)[name]; + const T* tattr = dynamic_cast (attr); + + if (tattr == 0) throw IEX_NAMESPACE::TypeExc ("Unexpected attribute type."); + + return *tattr; +} + +template +T& +Header::typedAttribute (const std::string& name) +{ + return typedAttribute (name.c_str ()); +} + +template +const T& +Header::typedAttribute (const std::string& name) const +{ + return typedAttribute (name.c_str ()); +} + +template +T* +Header::findTypedAttribute (const char name[]) +{ + AttributeMap::iterator i = _map.find (name); + return (i == _map.end ()) ? 0 : dynamic_cast (i->second); +} + +template +const T* +Header::findTypedAttribute (const char name[]) const +{ + AttributeMap::const_iterator i = _map.find (name); + return (i == _map.end ()) ? 0 : dynamic_cast (i->second); +} + +template +T* +Header::findTypedAttribute (const std::string& name) +{ + return findTypedAttribute (name.c_str ()); +} + +template +const T* +Header::findTypedAttribute (const std::string& name) const +{ + return findTypedAttribute (name.c_str ()); +} + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT + +#endif diff --git a/third_party/tlRender-install-Release/include/OpenEXR/ImfHuf.h b/third_party/tlRender-install-Release/include/OpenEXR/ImfHuf.h new file mode 100644 index 00000000..27118d00 --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenEXR/ImfHuf.h @@ -0,0 +1,49 @@ +// +// SPDX-License-Identifier: BSD-3-Clause +// Copyright (c) Contributors to the OpenEXR Project. +// + +#ifndef INCLUDED_IMF_HUF_H +#define INCLUDED_IMF_HUF_H + +#include "ImfExport.h" +#include "ImfNamespace.h" + +//----------------------------------------------------------------------------- +// +// 16-bit Huffman compression and decompression: +// +// hufCompress (r, nr, c) +// +// Compresses the contents of array r (of length nr), +// stores the compressed data in array c, and returns +// the size of the compressed data (in bytes). +// +// To avoid buffer overflows, the size of array c should +// be at least 2 * nr + 65536. +// +// hufUncompress (c, nc, r, nr) +// +// Uncompresses the data in array c (with length nc), +// and stores the results in array r (with length nr). +// +//----------------------------------------------------------------------------- + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER + +IMF_EXPORT +int hufCompress ( + const unsigned short raw[/*nRaw*/], + int nRaw, + char compressed[/*2 * nRaw + 65536*/]); + +IMF_EXPORT +void hufUncompress ( + const char compressed[/*nCompressed*/], + int nCompressed, + unsigned short raw[/*nRaw*/], + int nRaw); + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT + +#endif diff --git a/third_party/tlRender-install-Release/include/OpenEXR/ImfIDManifest.h b/third_party/tlRender-install-Release/include/OpenEXR/ImfIDManifest.h new file mode 100644 index 00000000..29f7e6bb --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenEXR/ImfIDManifest.h @@ -0,0 +1,462 @@ +// SPDX-License-Identifier: BSD-3-Clause +// Copyright (c) Contributors to the OpenEXR Project. + +#ifndef INCLUDED_IMF_ID_MANIFEST_H +#define INCLUDED_IMF_ID_MANIFEST_H + +//----------------------------------------------------------------------------- +// +// class IDManifest, to store a table mapping ID numbers to text +// +//----------------------------------------------------------------------------- +#include "ImfForward.h" + +#include +#include +#include +#include +#include + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER + +class IMF_EXPORT_TYPE IDManifest +{ +public: + // indication of how long a mapping between an ID number and the text holds for + enum IMF_EXPORT_ENUM IdLifetime + { + LIFETIME_FRAME, // The mapping may change every frame: + LIFETIME_SHOT, // The mapping is consistent for every frame of a shot + LIFETIME_STABLE // The mapping is consistent for all time. + }; + + // + // hashing scheme is stored as a string rather than an enum, to allow + // proprietary schemes to be encoded with less danger of collision + // proprietary schemes should be encoded in a reverse-URL syntax + // + + IMF_EXPORT + static const std::string + UNKNOWN; // = "unknown" : default value for encoding scheme and hash scheme - should be changed + IMF_EXPORT + static const std::string + NOTHASHED; // = "none" : no relationship between text and ID + IMF_EXPORT + static const std::string + CUSTOMHASH; // = "custom" : text is hashed using defined scheme + IMF_EXPORT + static const std::string + MURMURHASH3_32; // = "MurmurHash3_32" : MurmurHash3 32 bit is used + IMF_EXPORT + static const std::string + MURMURHASH3_64; // = "MurmurHash3_64" : bottom 8 bytes of MurmarHash3_128 (64 bit architecture version) is used + + IMF_EXPORT + static const std::string + ID_SCHEME; // ="id" : 32 bit ID stored directly in a UINT channel + IMF_EXPORT + static const std::string + ID2_SCHEME; // ="id2" : 64 bit ID stored in two channels, specified by the ChannelGroup + + IMF_EXPORT + IDManifest (); + + friend class CompressedIDManifest; + + // + // decompress a compressed IDManifest into IDManifest for reading + // + IMF_EXPORT + IDManifest (const CompressedIDManifest&); + + // + // construct manifest from serialized representation stored at 'data' + // + IMF_EXPORT + IDManifest (const char* data, const char* end); + +private: + // internal helper function called by constructors + IMF_HIDDEN void init (const char* data, const char* end); + +public: + // + // Description of the information represented by a single group of channels + // + class IMF_EXPORT_TYPE ChannelGroupManifest + { + private: + std::set + _channels; // group of channels this manifest represents + std::vector + _components; // ordered list of components represented by this channel group + IdLifetime _lifeTime; + std::string + _hashScheme; //one of above strings or custom value e.g "nz.co.wetafx.cleverhash2" + std::string + _encodingScheme; //string identifying scheme to encode ID numbers within the image + + typedef std::map> IDTable; + IDTable _table; + + // used for << operator to work: tracks the last item inserted into the Manifest + IDTable::iterator _insertionIterator; + bool + _insertingEntry; // true if << has been called but not enough strings yet set + + public: + IMF_EXPORT + ChannelGroupManifest (); + + IMF_EXPORT + const std::set& getChannels () const; + + IMF_EXPORT + std::set& getChannels (); + + IMF_EXPORT + void setChannels (const std::set& channels); + IMF_EXPORT + void setChannel (const std::string& channel); + + // get list of components for this channel group + IMF_EXPORT + const std::vector& getComponents () const; + + // set components: throws an exception if there are already entries in the table + // and the component length changes + IMF_EXPORT + void setComponents (const std::vector& components); + + // set name of single component: throws an exception if there are already entries in the table + // unless there was previously one component + IMF_EXPORT + void setComponent (const std::string& component); + + IdLifetime getLifetime () const { return _lifeTime; } + + void setLifetime (const IdLifetime& lifeTime) { _lifeTime = lifeTime; } + + const std::string& getHashScheme () const { return _hashScheme; } + void setHashScheme (const std::string& hashScheme) + { + _hashScheme = hashScheme; + } + + const std::string& getEncodingScheme () const + { + return _encodingScheme; + } + void setEncodingScheme (const std::string& encodingScheme) + { + _encodingScheme = encodingScheme; + } + + class Iterator; // iterator which allows modification of the text + class ConstIterator; // iterator which does not allow modification + + IMF_EXPORT + Iterator begin (); + IMF_EXPORT + ConstIterator begin () const; + IMF_EXPORT + Iterator end (); + IMF_EXPORT + ConstIterator end () const; + + // return number of entries in manifest - could be 0 + IMF_EXPORT + size_t size () const; + + // insert a new entry - text must contain same number of items as getComponents + IMF_EXPORT + Iterator + insert (uint64_t idValue, const std::vector& text); + + // insert a new entry - getComponents must be a single entry + IMF_EXPORT + Iterator insert (uint64_t idValue, const std::string& text); + + // compute hash of given entry, insert into manifest, and return + // the computed hash. Exception will be thrown if hash scheme isn't recognised + IMF_EXPORT + uint64_t insert (const std::vector& text); + IMF_EXPORT + uint64_t insert (const std::string& text); + + IMF_EXPORT + Iterator find (uint64_t idValue); + + IMF_EXPORT + ConstIterator find (uint64_t idValue) const; + + IMF_EXPORT + void erase (uint64_t idValue); + + // return reference to idName for given idValue. Adds the mapping to the vector if it doesn't exist + IMF_EXPORT + std::vector& operator[] (uint64_t idValue); + + // add a new entry to the manifest as an insertion operator: << + // the component strings must also be inserted using << + // throws an exception if the previous insert operation didn't insert the correct number of string components + IMF_EXPORT + ChannelGroupManifest& operator<< (uint64_t idValue); + + // insert a string as the next component of a previously inserted attribute + IMF_EXPORT + ChannelGroupManifest& operator<< (const std::string& text); + + IMF_EXPORT + bool operator== (const ChannelGroupManifest& other) const; + + bool operator!= (const ChannelGroupManifest& other) const + { + return !(*this == other); + } + + friend class IDManifest; + }; + +private: + std::vector _manifest; + +public: + // add a new channel group definition to the table, presumably populated with mappings + // 'table' will be copied to the internal manifest; to further modify use the return value + IMF_EXPORT + ChannelGroupManifest& add (const ChannelGroupManifest& table); + + //insert an empty table definition for the given channel / group of channels + IMF_EXPORT + ChannelGroupManifest& add (const std::set& group); + IMF_EXPORT + ChannelGroupManifest& add (const std::string& channel); + + // return number of items in manifest + IMF_EXPORT + size_t size () const; + + // find the first manifest ChannelGroupManifest that defines the given channel + // if channel not find, returns a value equal to size() + IMF_EXPORT + size_t find (const std::string& channel) const; + + IMF_EXPORT + const ChannelGroupManifest& operator[] (size_t index) const; + IMF_EXPORT + ChannelGroupManifest& operator[] (size_t index); + + // + // serialize manifest into data array. Array will be resized to the required size + // + IMF_EXPORT + void serialize (std::vector& data) const; + + IMF_EXPORT + bool operator== (const IDManifest& other) const; + IMF_EXPORT + bool operator!= (const IDManifest& other) const; + + // + // add entries from 'other' into this manifest if possible + // * all ChannelGroupsManifests for different ChannelGroups + // will be appended. + // * Where 'other' contains a manifest for the same + // ChannelGroup: + // * If _components differs, the entire ChannelGroupManifest is skipped + // * Otherwise, entries not present in 'this' will be inserted + // * _hashScheme, _lifeTime and _encodingScheme will be unchanged + // + // returns 'false' if the same ChannelGroupManifest appears in both 'other' and 'this', + // but with different _components, _hashScheme, _lifeTime or _encodingScheme + // or if any idValue maps to different strings in 'other' and 'this' + // + IMF_EXPORT + bool merge (const IDManifest& other); + + // + // static has generation functions + // + IMF_EXPORT + static unsigned int MurmurHash32 (const std::string& idString); + IMF_EXPORT + static unsigned int MurmurHash32 (const std::vector& idString); + + IMF_EXPORT + static uint64_t MurmurHash64 (const std::string& idString); + IMF_EXPORT + static uint64_t MurmurHash64 (const std::vector& idString); +}; + +// +// zlip compressed version of IDManifest - the IDManifestAttribute encodes this format +// This should be transparent to the user, since there is implicit casting between the two types +// +class CompressedIDManifest +{ +public: + IMF_EXPORT + CompressedIDManifest (); + IMF_EXPORT + CompressedIDManifest (const CompressedIDManifest& other); + + IMF_EXPORT + CompressedIDManifest& operator= (const CompressedIDManifest& other); + + // + // construct a compressed version of the given manifest - to decompress it cast to an IDManifest + // + IMF_EXPORT + CompressedIDManifest (const IDManifest& manifest); + + IMF_EXPORT + ~CompressedIDManifest (); + + int _compressedDataSize; + size_t _uncompressedDataSize; + unsigned char* _data; +}; + +// +// Read/Write Iterator object to access individual entries within a manifest +// + +class IDManifest::ChannelGroupManifest::Iterator +{ +public: + IMF_EXPORT + Iterator (); + + IMF_EXPORT + explicit Iterator ( + const IDManifest::ChannelGroupManifest::IDTable::iterator& i); + + friend class IDManifest::ChannelGroupManifest::ConstIterator; + IMF_EXPORT + Iterator& operator++ (); + + IMF_EXPORT + uint64_t id () const; + IMF_EXPORT + std::vector& text (); + +private: + std::map>::iterator _i; +}; + +// +// Read-only Iterator object to access individual entries within a manifest +// + +class IDManifest::ChannelGroupManifest::ConstIterator +{ +public: + IMF_EXPORT + ConstIterator (); + + // explicit cast from internal map operator (for internal use only) + IMF_EXPORT + explicit ConstIterator ( + const IDManifest::ChannelGroupManifest::IDTable::const_iterator& i); + // cast from non-const to const iterator + IMF_EXPORT + ConstIterator (const IDManifest::ChannelGroupManifest::Iterator& other); + IMF_EXPORT + ConstIterator& operator++ (); + + IMF_EXPORT + uint64_t id () const; + IMF_EXPORT + const std::vector& text () const; + +private: + std::map>::const_iterator _i; + + friend bool operator== (const ConstIterator&, const ConstIterator&); + friend bool operator!= (const ConstIterator&, const ConstIterator&); +}; + +// +// ChannelGroupManifest::Iterator implementation: all inline +// + +inline IDManifest::ChannelGroupManifest::Iterator::Iterator () +{} +inline IDManifest::ChannelGroupManifest::Iterator::Iterator ( + const IDManifest::ChannelGroupManifest::IDTable::iterator& i) + : _i (i) +{} + +inline uint64_t +IDManifest::ChannelGroupManifest::Iterator::id () const +{ + return _i->first; +} + +inline std::vector& +IDManifest::ChannelGroupManifest::Iterator::text () +{ + return _i->second; +} + +inline IDManifest::ChannelGroupManifest::Iterator& +IDManifest::ChannelGroupManifest::Iterator::operator++ () +{ + ++_i; + return *this; +} + +// +// ChannelGroupManifest::ConstIterator implementation: all inline +// + +inline IDManifest::ChannelGroupManifest::ConstIterator::ConstIterator () +{} +inline IDManifest::ChannelGroupManifest::ConstIterator::ConstIterator ( + const IDManifest::ChannelGroupManifest::Iterator& other) + : _i (other._i) +{} +inline IDManifest::ChannelGroupManifest::ConstIterator::ConstIterator ( + const IDManifest::ChannelGroupManifest::IDTable::const_iterator& i) + : _i (i) +{} + +inline uint64_t +IDManifest::ChannelGroupManifest::ConstIterator::id () const +{ + return _i->first; +} + +inline const std::vector& +IDManifest::ChannelGroupManifest::ConstIterator::text () const +{ + return _i->second; +} + +inline IDManifest::ChannelGroupManifest::ConstIterator& +IDManifest::ChannelGroupManifest::ConstIterator::operator++ () +{ + ++_i; + return *this; +} + +inline bool +operator== ( + const IDManifest::ChannelGroupManifest::ConstIterator& a, + const IDManifest::ChannelGroupManifest::ConstIterator& b) +{ + return a._i == b._i; +} + +inline bool +operator!= ( + const IDManifest::ChannelGroupManifest::ConstIterator& a, + const IDManifest::ChannelGroupManifest::ConstIterator& b) +{ + return a._i != b._i; +} + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT +#endif diff --git a/third_party/tlRender-install-Release/include/OpenEXR/ImfIDManifestAttribute.h b/third_party/tlRender-install-Release/include/OpenEXR/ImfIDManifestAttribute.h new file mode 100644 index 00000000..75a05f4e --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenEXR/ImfIDManifestAttribute.h @@ -0,0 +1,31 @@ +// SPDX-License-Identifier: BSD-3-Clause +// Copyright (c) Contributors to the OpenEXR Project. + +#ifndef INCLUDED_IMF_IDMANIFEST_ATTRIBUTE_H +#define INCLUDED_IMF_IDMANIFEST_ATTRIBUTE_H + +#include "ImfExport.h" +#include "ImfNamespace.h" + +#include "ImfAttribute.h" +#include "ImfIDManifest.h" + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER + +#if defined(_MSC_VER) +// suppress warning about non-exported base classes +# pragma warning(disable : 4251) +# pragma warning(disable : 4275) +#endif + +typedef TypedAttribute + IDManifestAttribute; + +#ifndef COMPILING_IMF_IDMANIFEST_ATTRIBUTE +extern template class IMF_EXPORT_EXTERN_TEMPLATE + TypedAttribute; +#endif + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT + +#endif diff --git a/third_party/tlRender-install-Release/include/OpenEXR/ImfIO.h b/third_party/tlRender-install-Release/include/OpenEXR/ImfIO.h new file mode 100644 index 00000000..c1540c9a --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenEXR/ImfIO.h @@ -0,0 +1,251 @@ +// +// SPDX-License-Identifier: BSD-3-Clause +// Copyright (c) Contributors to the OpenEXR Project. +// + +#ifndef INCLUDED_IMF_IO_H +#define INCLUDED_IMF_IO_H + +//----------------------------------------------------------------------------- +// +// Low-level file input and output for OpenEXR. +// +//----------------------------------------------------------------------------- + +#include "ImfForward.h" + +#include +#include + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER + +//----------------------------------------------------------- +// class IStream -- an abstract base class for input streams. +//----------------------------------------------------------- + +class IMF_EXPORT_TYPE IStream +{ +public: + //----------- + // Destructor + //----------- + + IMF_EXPORT virtual ~IStream (); + + //------------------------------------------------- + // Does this input stream support memory-mapped IO? + // + // Memory-mapped streams can avoid an extra copy; + // memory-mapped read operations return a pointer + // to an internal buffer instead of copying data + // into a buffer supplied by the caller. + //------------------------------------------------- + + IMF_EXPORT virtual bool isMemoryMapped () const; + + //------------------------------------------------------ + // Read from the stream: + // + // read(c,n) reads n bytes from the stream, and stores + // them in array c. If the stream contains less than n + // bytes, or if an I/O error occurs, read(c,n) throws + // an exception. If read(c,n) reads the last byte from + // the file it returns false, otherwise it returns true. + //------------------------------------------------------ + + virtual bool read (char c[/*n*/], int n) = 0; + + //--------------------------------------------------- + // Read from a memory-mapped stream: + // + // readMemoryMapped(n) reads n bytes from the stream + // and returns a pointer to the first byte. The + // returned pointer remains valid until the stream + // is closed. If there are less than n byte left to + // read in the stream or if the stream is not memory- + // mapped, readMemoryMapped(n) throws an exception. + //--------------------------------------------------- + + IMF_EXPORT virtual char* readMemoryMapped (int n); + + //-------------------------------------------------------- + // Get the current reading position, in bytes from the + // beginning of the file. If the next call to read() will + // read the first byte in the file, tellg() returns 0. + //-------------------------------------------------------- + + virtual uint64_t tellg () = 0; + + //------------------------------------------- + // Set the current reading position. + // After calling seekg(i), tellg() returns i. + //------------------------------------------- + + virtual void seekg (uint64_t pos) = 0; + + //------------------------------------------------------ + // Clear error conditions after an operation has failed. + //------------------------------------------------------ + + IMF_EXPORT virtual void clear (); + + //------------------------------------------------------ + // Get the name of the file associated with this stream. + //------------------------------------------------------ + + IMF_EXPORT const char* fileName () const; + + //------------------------------------------------------ + // Get the size of the file (or buffer) associated with + // this stream. + // + // by default, this will return -1. That value will skip a few + // safety checks. However, if you provide the size, it will apply + // a number of file consistency checks as the file is read. + // ------------------------------------------------------ + + IMF_EXPORT virtual int64_t size (); + + //------------------------------------------------- + // Does this input stream support stateless reading? + // + // Stateless reading allows multiple threads to + // read from the stream concurrently from different + // locations in the file + //------------------------------------------------- + + IMF_EXPORT virtual bool isStatelessRead () const; + + //------------------------------------------------------ + // Read from the stream with an offset: + // + // read(b,s,o) should read up to sz bytes from the + // stream using something like pread or ReadFileEx with + // overlapped data at the provided offset in the stream. + // + // for this function, the buffer size requested may be + // either larger than the file or request a read past + // the end of the file. This should NOT be treated as + // an error - the library will handle whether that is + // an error (if the offset is past the end, it should + // read 0) + // + // If there is an error, it should either return -1 + // or throw an exception (an exception could provide + // a message). + // + // This will only be used if isStatelessRead returns true. + // + // NB: It is expected that this is thread safe such + // that multiple threads can be reading from the stream + // at the same time + //------------------------------------------------------ + + IMF_EXPORT virtual int64_t read (void *buf, uint64_t sz, uint64_t offset); + +protected: + IMF_EXPORT IStream (const char fileName[]); + +private: + IStream (const IStream&) = delete; + IStream& operator= (const IStream&) = delete; + IStream (IStream&&) = delete; + IStream& operator= (IStream&&) = delete; + + std::string _fileName; +}; + +//----------------------------------------------------------- +// class OStream -- an abstract base class for output streams +//----------------------------------------------------------- + +class IMF_EXPORT_TYPE OStream +{ +public: + //----------- + // Destructor + //----------- + + IMF_EXPORT virtual ~OStream (); + + //---------------------------------------------------------- + // Write to the stream: + // + // write(c,n) takes n bytes from array c, and stores them + // in the stream. If an I/O error occurs, write(c,n) throws + // an exception. + //---------------------------------------------------------- + + virtual void write (const char c[/*n*/], int n) = 0; + + //--------------------------------------------------------- + // Get the current writing position, in bytes from the + // beginning of the file. If the next call to write() will + // start writing at the beginning of the file, tellp() + // returns 0. + //--------------------------------------------------------- + + virtual uint64_t tellp () = 0; + + //------------------------------------------- + // Set the current writing position. + // After calling seekp(i), tellp() returns i. + //------------------------------------------- + + virtual void seekp (uint64_t pos) = 0; + + //------------------------------------------------------ + // Get the name of the file associated with this stream. + //------------------------------------------------------ + + IMF_EXPORT const char* fileName () const; + +protected: + IMF_EXPORT OStream (const char fileName[]); + +private: + OStream (const OStream&) = delete; + OStream& operator= (const OStream&) = delete; + OStream (OStream&&) = delete; + OStream& operator= (OStream&&) = delete; + + std::string _fileName; +}; + +//----------------------- +// Helper classes for Xdr +//----------------------- + +struct StreamIO +{ + static inline void writeChars (OStream& os, const char c[/*n*/], int n) + { + os.write (c, n); + } + + static inline bool readChars (IStream& is, char c[/*n*/], int n) + { + return is.read (c, n); + } +}; + +struct CharPtrIO +{ + static inline void writeChars (char*& op, const char c[/*n*/], int n) + { + while (n--) + *op++ = *c++; + } + + static inline bool readChars (const char*& ip, char c[/*n*/], int n) + { + while (n--) + *c++ = *ip++; + + return true; + } +}; + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT + +#endif diff --git a/third_party/tlRender-install-Release/include/OpenEXR/ImfImage.h b/third_party/tlRender-install-Release/include/OpenEXR/ImfImage.h new file mode 100644 index 00000000..715624df --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenEXR/ImfImage.h @@ -0,0 +1,339 @@ +// +// SPDX-License-Identifier: BSD-3-Clause +// Copyright (c) Contributors to the OpenEXR Project. +// + +#ifndef INCLUDED_IMF_IMAGE_H +#define INCLUDED_IMF_IMAGE_H + +//---------------------------------------------------------------------------- +// +// class Image -- an in-memory data structure that can hold an arbitrary +// OpenEXR image, flat or deep, with one or multiple resolution levels, +// and with an arbitrary set of channels. +// +// An image is a container for a set of image levels, and an image level +// is a container for a set of image channels. An image channel contains +// an array of pixel values of type half, float or unsigned int. +// +// For example: +// +// image --+-- level 0 --+-- channel "R" --- pixel data +// | | +// | +-- channel "G" --- pixel data +// | | +// | +-- channel "B" --- pixel data +// | +// +-- level 1 --+-- channel "R" --- pixel data +// | | +// | +-- channel "G" --- pixel data +// | | +// | +-- channel "B" --- pixel data +// | +// +-- level 2 --+-- channel "R" --- pixel data +// | +// +-- channel "G" --- pixel data +// | +// +-- channel "B" --- pixel data +// +// An image has a level mode, which can be ONE_LEVEL, MIPMAP_LEVELS or +// RIPMAP_LEVELS, and a level rounding mode, which can be ROUND_UP or +// ROUND_DOWN. Together, the level mode and the level rounding mode +// determine how many levels an image contains, and how large the data +// window for each level is. All levels in an image have the same set +// of channels. +// +// An image channel has a name (e.g. "R", "Z", or "xVelocity"), a type +// (HALF, FLOAT or UINT) and x and y sampling rates. A channel stores +// samples for a pixel if the pixel is inside the data window of the +// level to which the channel belongs, and the x and y coordinates of +// the pixel are divisible by the x and y sampling rates of the channel. +// +// An image can be either flat or deep. In a flat image each channel +// in each level stores at most one value per pixel. In a deep image +// each channel in each level stores an arbitrary number of values per +// pixel. As an exception, each level of a deep image has a sample count +// channel with a single value per pixel; this value determines how many +// values each of the other channels in the same level has at the same +// pixel location. +// +// The classes Image, ImageLevel and ImageChannel are abstract base +// classes. Two sets of concrete classes, one for flat and one for +// deep images, are derived from the base classes. +// +//---------------------------------------------------------------------------- + +#include "ImfNamespace.h" +#include "ImfUtilExport.h" + +#include "ImfArray.h" +#include "ImfImageLevel.h" +#include "ImfTileDescription.h" + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER + +struct Channel; + +class IMFUTIL_EXPORT_TYPE Image +{ +public: + // + // Constructor and destructor + // + + IMFUTIL_EXPORT Image (); + IMFUTIL_EXPORT virtual ~Image (); + + // + // Access to the image's level mode and level rounding mode. + // + + IMFUTIL_EXPORT LevelMode levelMode () const; + IMFUTIL_EXPORT LevelRoundingMode levelRoundingMode () const; + + // + // Number of levels: + // + // numXLevels() returns the image's number of levels in the x direction. + // + // if levelMode() == ONE_LEVEL: + // return value is: 1 + // + // if levelMode() == MIPMAP_LEVELS: + // return value is: rfunc (log (max (w, h)) / log (2)) + 1 + // + // if levelMode() == RIPMAP_LEVELS: + // return value is: rfunc (log (w) / log (2)) + 1 + // + // where + // w is the width of the image's data window, max.x - min.x + 1, + // h is the height of the image's data window, max.y - min.y + 1, + // and rfunc(x) is either floor(x), or ceil(x), depending on + // whether levelRoundingMode() returns ROUND_DOWN or ROUND_UP. + // + // numYLevels() returns the image's number of levels in the y direction. + // + // if levelMode() == ONE_LEVEL or levelMode() == MIPMAP_LEVELS: + // return value is the same as for numXLevels() + // + // if levelMode() == RIPMAP_LEVELS: + // return value is: rfunc (log (h) / log (2)) + 1 + // + // + // numLevels() is a convenience function for use with MIPMAP_LEVELS images. + // + // if levelMode() == ONE_LEVEL or levelMode() == MIPMAP_LEVELS: + // return value is the same as for numXLevels() + // + // if levelMode() == RIPMAP_LEVELS: + // a LogicExc exception is thrown + // + + IMFUTIL_EXPORT int numLevels () const; + IMFUTIL_EXPORT int numXLevels () const; + IMFUTIL_EXPORT int numYLevels () const; + + // + // Per-level data windows + // + // dataWindow() returns the data window for the image; this is the + // same as the data window for the level with level number (0, 0). + // + // dataWindowForLevel(lx, ly) returns the data window for level x, + // that is, the window for which the image level with level number + // (lx, ly) has allocated pixel storage. + // + // return value is a Box2i with min value: + // (dataWindow().min.x, + // dataWindow().min.y) + // + // and max value: + // (dataWindow().min.x + levelWidth(lx) - 1, + // dataWindow().min.y + levelHeight(ly) - 1) + // + // dataWindowForLevel(l) is a convenience function used for ONE_LEVEL + // and MIPMAP_LEVELS files. It returns dataWindowForLevel(l,l)). + // + IMFUTIL_EXPORT + const IMATH_NAMESPACE::Box2i& dataWindow () const; + IMFUTIL_EXPORT + const IMATH_NAMESPACE::Box2i& dataWindowForLevel (int l) const; + IMFUTIL_EXPORT + const IMATH_NAMESPACE::Box2i& dataWindowForLevel (int lx, int ly) const; + + // + // Size of a level: + // + // levelWidth(lx) returns the width of a level with level + // number (lx, *), where * is any number. + // + // return value is: + // max (1, rfunc (w / pow (2, lx))) + // + // + // levelHeight(ly) returns the height of a level with level + // number (*, ly), where * is any number. + // + // return value is: + // max (1, rfunc (h / pow (2, ly))) + // + + IMFUTIL_EXPORT + int levelWidth (int lx) const; + IMFUTIL_EXPORT + int levelHeight (int ly) const; + + // + // Resize the image: + // + // resize(dw,lm,lrm) sets the data window of the image to dw, + // sets the level mode to lm and the level rounding mode to lrm, + // and allocates new storage for image levels and image channels. + // The set of channels in the image does not change. + // + // The contents of the image are lost; pixel data are not preserved + // across the resize operation. If resizing fails, then the image + // will be left with an empty data window and no image levels. + // + // resize(dw) is the same as resize(dw,levelMode(),levelRoundingMode()) + // + IMFUTIL_EXPORT + void resize (const IMATH_NAMESPACE::Box2i& dataWindow); + IMFUTIL_EXPORT + virtual void resize ( + const IMATH_NAMESPACE::Box2i& dataWindow, + LevelMode levelMode, + LevelRoundingMode levelRoundingMode); + + // + // Shift the pixels and the data window of an image: + // + // shiftPixels(dx,dy) shifts the image by dx pixels horizontally and + // dy pixels vertically. A pixel at location (x,y) moves to position + // (x+dx, y+dy). The data window of the image is shifted along with + // the pixels. No pixel data are lost. + // + // The horizontal and vertical shift distances must be multiples of + // the x and y sampling rates of all image channels. If they are not, + // shiftPixels() throws an ArgExc exception. + // + IMFUTIL_EXPORT + void shiftPixels (int dx, int dy); + + // + // Insert a new channel into the image. + // + // The arguments to this function are the same as for adding a + // a channel to an OpenEXR file: channel name, x and y sampling + // rates, and a "perceptually approximately linear" flag. + // + // If the image already contains a channel with the same name + // as the new name then the existing channel is deleted before + // the new channel is added. + // + IMFUTIL_EXPORT + void insertChannel ( + const std::string& name, + PixelType type, + int xSampling = 1, + int ySampling = 1, + bool pLinear = false); + IMFUTIL_EXPORT + void insertChannel (const std::string& name, const Channel& channel); + + // + // Erase channels from an image: + // + // eraseChannel(n) erases the channel with name n. + // clearChannels() erases all channels. + // + IMFUTIL_EXPORT + void eraseChannel (const std::string& name); + IMFUTIL_EXPORT + void clearChannels (); + + // + // Rename an image channel: + // + // renameChannel(nOld,nNew) changes the name of the image channel + // with name nOld to nNew. + // + // If the image already contains a channel called nNew, or if the + // image does not contain a channel called nOld, then renameChannel() + // throws an ArgExc exception. + // + // In the (unlikely) event that renaming the image channel causes + // the program to run out of memory, renameChannel() erases the + // channel that is being renamed, and throws an exception. + // + IMFUTIL_EXPORT + void renameChannel (const std::string& oldName, const std::string& newName); + + // + // Rename multiple image channels at the same time: + // + // Given a map, m, from old to new channel names, renameChannels(m) + // assigns new names to the channels in the image. If m has an entry + // for a channel named c, then the channel will be renamed to m[c]. + // If m has no entry for c, then the channel keeps its old name. + // + // If the same name would be assigned to more than one channel, then + // renameChannels() does not rename any channels but throws an ArgExc + // exception instead. + // + // In the (unlikely) event that renaming the image channel causes the + // program to run out of memory, renameChannels() erases all channels + // in the image and throws an exception. + // + IMFUTIL_EXPORT + void renameChannels (const RenamingMap& oldToNewNames); + + // + // Accessing image levels by level number. + // + // level(lx,ly) returns a reference to the image level + // with level number (lx,ly). + // + // level(l) returns level(l,l). + // + + IMFUTIL_EXPORT virtual ImageLevel& level (int l = 0); + IMFUTIL_EXPORT virtual const ImageLevel& level (int l = 0) const; + + IMFUTIL_EXPORT virtual ImageLevel& level (int lx, int ly); + IMFUTIL_EXPORT virtual const ImageLevel& level (int lx, int ly) const; + +protected: + virtual ImageLevel* + newLevel (int lx, int ly, const IMATH_NAMESPACE::Box2i& dataWindow) = 0; + +private: + IMFUTIL_HIDDEN bool levelNumberIsValid (int lx, int ly) const; + IMFUTIL_HIDDEN void clearLevels (); + + struct IMFUTIL_HIDDEN ChannelInfo + { + ChannelInfo ( + PixelType type = HALF, + int xSampling = 1, + int ySampling = 1, + bool pLinear = false); + + PixelType type; + int xSampling; + int ySampling; + bool pLinear; + }; + + typedef std::map ChannelMap; + + IMATH_NAMESPACE::Box2i _dataWindow; + LevelMode _levelMode; + LevelRoundingMode _levelRoundingMode; + ChannelMap _channels; + Array2D _levels; +}; + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT + +#endif diff --git a/third_party/tlRender-install-Release/include/OpenEXR/ImfImageChannel.h b/third_party/tlRender-install-Release/include/OpenEXR/ImfImageChannel.h new file mode 100644 index 00000000..ef7e147b --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenEXR/ImfImageChannel.h @@ -0,0 +1,110 @@ +// +// SPDX-License-Identifier: BSD-3-Clause +// Copyright (c) Contributors to the OpenEXR Project. +// + +#ifndef INCLUDED_IMF_IMAGE_CHANNEL_H +#define INCLUDED_IMF_IMAGE_CHANNEL_H + +//---------------------------------------------------------------------------- +// +// class ImageChannel +// +// For an explanation of images, levels and channels, +// see the comments in header file Image.h. +// +//---------------------------------------------------------------------------- + +#include "ImfUtilExport.h" + +#include "IexBaseExc.h" +#include "ImfChannelList.h" +#include "ImfFrameBuffer.h" +#include "ImfPixelType.h" +#include +#include + +#include +#include + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER + +class ImageLevel; + +// +// Image channels: +// +// An image channel holds the pixel data for a single channel of one level +// of an image. Separate classes for flat and deep channels are derived +// from the ImageChannel base class. +// + +class ImageLevel; + +class IMFUTIL_EXPORT_TYPE ImageChannel +{ +public: + // + // The OpenEXR pixel type of this channel (HALF, FLOAT or UINT). + // + + virtual PixelType pixelType () const = 0; + + // + // Generate an OpenEXR channel for this image channel. + // + + IMFUTIL_EXPORT + Channel channel () const; + + // + // Access to x and y sampling rates, "perceptually linear" flag, + // and the number of pixels that are stored in this channel. + // + + int xSampling () const { return _xSampling; } + int ySampling () const { return _ySampling; } + bool pLinear () const { return _pLinear; } + int pixelsPerRow () const { return _pixelsPerRow; } + int pixelsPerColumn () const { return _pixelsPerColumn; } + size_t numPixels () const { return _numPixels; } + + // + // Access to the image level to which this channel belongs. + // + + ImageLevel& level () { return _level; } + const ImageLevel& level () const { return _level; } + +protected: + IMFUTIL_EXPORT + ImageChannel ( + ImageLevel& level, int xSampling, int ySampling, bool pLinear); + + IMFUTIL_EXPORT + virtual ~ImageChannel (); + + IMFUTIL_EXPORT + virtual void resize (); + + IMFUTIL_EXPORT + void boundsCheck (int x, int y) const; + +private: + ImageChannel (const ImageChannel&) = delete; + ImageChannel& operator= (const ImageChannel&) = delete; + ImageChannel (ImageChannel&&) = delete; + ImageChannel& operator= (ImageChannel&&) = delete; + + ImageLevel& _level; + int _xSampling; + int _ySampling; + bool _pLinear; + int _pixelsPerRow; + int _pixelsPerColumn; + size_t _numPixels; +}; + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT + +#endif diff --git a/third_party/tlRender-install-Release/include/OpenEXR/ImfImageChannelRenaming.h b/third_party/tlRender-install-Release/include/OpenEXR/ImfImageChannelRenaming.h new file mode 100644 index 00000000..7376828f --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenEXR/ImfImageChannelRenaming.h @@ -0,0 +1,52 @@ +// +// SPDX-License-Identifier: BSD-3-Clause +// Copyright (c) Contributors to the OpenEXR Project. +// + +#ifndef INCLUDED_IMF_IMAGE_CHANNEL_RENAMING_H +#define INCLUDED_IMF_IMAGE_CHANNEL_RENAMING_H + +//---------------------------------------------------------------------------- +// +// typedef RenamingMap, +// helper functions for image channel renaming. +// +//---------------------------------------------------------------------------- + +#include "ImfNamespace.h" +#include +#include + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER + +// +// Given a map from old channel names to new channel names, +// rename the channels in an image or image level. +// This function assumes that the channel old-to-new-names +// map has already been checked for collisions. +// + +typedef std::map RenamingMap; + +template +inline void +renameChannelsInMap (const RenamingMap& oldToNewNames, ChannelMap& channels) +{ + ChannelMap renamedChannels; + + for (typename ChannelMap::const_iterator i = channels.begin (); + i != channels.end (); + ++i) + { + RenamingMap::const_iterator j = oldToNewNames.find (i->first); + std::string newName = (j == oldToNewNames.end ()) ? i->first + : j->second; + renamedChannels[newName] = i->second; + } + + channels = renamedChannels; +} + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT + +#endif diff --git a/third_party/tlRender-install-Release/include/OpenEXR/ImfImageDataWindow.h b/third_party/tlRender-install-Release/include/OpenEXR/ImfImageDataWindow.h new file mode 100644 index 00000000..bde25e2d --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenEXR/ImfImageDataWindow.h @@ -0,0 +1,44 @@ +// +// SPDX-License-Identifier: BSD-3-Clause +// Copyright (c) Contributors to the OpenEXR Project. +// + +#ifndef INCLUDED_IMF_IMAGE_DATA_WINDOW_H +#define INCLUDED_IMF_IMAGE_DATA_WINDOW_H + +//---------------------------------------------------------------------------- +// +// enum DataWindowSource, +// function dataWindowForFile() +// +//---------------------------------------------------------------------------- + +#include "ImfNamespace.h" +#include "ImfUtilExport.h" +#include + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER + +enum IMFUTIL_EXPORT_ENUM DataWindowSource +{ + USE_IMAGE_DATA_WINDOW, + USE_HEADER_DATA_WINDOW +}; + +// +// Given the an image, i, an OpenEXR file header, h, and a data window +// source flag, d, dataWindowForFile(i,h,d) returns i.dataWindow() if d +// is USE_IMAGE_DATA_WINDOW, or the intersection of i.dataWindow() and +// h.dataWindow() if d is USE_HEADER_DATA_WINDOW. +// + +class Image; +class Header; + +IMFUTIL_EXPORT +IMATH_NAMESPACE::Box2i +dataWindowForFile (const Header& hdr, const Image& img, DataWindowSource dws); + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT + +#endif diff --git a/third_party/tlRender-install-Release/include/OpenEXR/ImfImageIO.h b/third_party/tlRender-install-Release/include/OpenEXR/ImfImageIO.h new file mode 100644 index 00000000..13d1134b --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenEXR/ImfImageIO.h @@ -0,0 +1,77 @@ +// +// SPDX-License-Identifier: BSD-3-Clause +// Copyright (c) Contributors to the OpenEXR Project. +// + +#ifndef INCLUDED_IMF_IMAGE_IO_H +#define INCLUDED_IMF_IMAGE_IO_H + +//---------------------------------------------------------------------------- +// +// Functions to load flat or deep images from OpenEXR files +// and to save flat or deep images in OpenEXR files. +// +//---------------------------------------------------------------------------- + +#include "ImfUtilExport.h" + +#include "ImfImage.h" +#include "ImfImageDataWindow.h" + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER + +// +// saveImage (n, h, i, d) or +// saveImage (n, i) +// +// Saves image i in an OpenEXR file with name n. The file will be +// tiled if the image has more than one level, or if a header, h, is +// given and contains a tile description attribute; otherwise the +// file will be scan-line based. The file will be deep if the image +// is deep; otherwise the file will be flat. +// +// If header h is given, then the channel list in h is replaced with +// the channel list in i, and the levelMode and the levelRounding mode +// fields of the tile description are replaced with the level mode +// and the levelRounding mode of i. In addition, if the data window +// source flag, d, is set to USE_IMAGE_DATA_WINDOW, then the data +// window in the image is copied into the header; if d is set to +// USE_HEADER_DATA_WINDOW, then the data window in the header is +// replaced with the intersection of the original data window in the +// header and the data window in the image. The modified header then +// becomes the header of the image file. +// +// Note: USE_HEADER_DATA_WINDOW can only be used for images with +// level mode ONE_LEVEL. +// + +IMFUTIL_EXPORT +void saveImage ( + const std::string& fileName, + const Header& hdr, + const Image& img, + DataWindowSource dws = USE_IMAGE_DATA_WINDOW); + +IMFUTIL_EXPORT +void saveImage (const std::string& fileName, const Image& img); + +// +// loadImage (n, h) or +// loadImage (n) +// +// Loads deep an image from the OpenEXR file with name n, and returns +// a pointer to the image. The caller owns the image and is responsible +// for deleting it. +// +// If header h is given, then the header of the file is copied into h. +// + +IMFUTIL_EXPORT +Image* loadImage (const std::string& fileName, Header& hdr); + +IMFUTIL_EXPORT +Image* loadImage (const std::string& fileName); + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT + +#endif diff --git a/third_party/tlRender-install-Release/include/OpenEXR/ImfImageLevel.h b/third_party/tlRender-install-Release/include/OpenEXR/ImfImageLevel.h new file mode 100644 index 00000000..49be40ba --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenEXR/ImfImageLevel.h @@ -0,0 +1,97 @@ +// +// SPDX-License-Identifier: BSD-3-Clause +// Copyright (c) Contributors to the OpenEXR Project. +// + +#ifndef INCLUDED_IMF_IMAGE_LEVEL_H +#define INCLUDED_IMF_IMAGE_LEVEL_H + +//---------------------------------------------------------------------------- +// +// class ImageLevel +// +// For an explanation of images, levels and channels, +// see the comments in header file Image.h. +// +//---------------------------------------------------------------------------- + +#include "ImfImageChannel.h" +#include "ImfImageChannelRenaming.h" +#include "ImfUtilExport.h" +#include +#include + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER + +class Image; + +class IMFUTIL_EXPORT_TYPE ImageLevel +{ +public: + // + // Access to the image to which the level belongs. + // + + Image& image () { return _image; } + const Image& image () const { return _image; } + + // + // Access to the level number and the data window of this level. + // + + int xLevelNumber () const { return _xLevelNumber; } + int yLevelNumber () const { return _yLevelNumber; } + + const IMATH_NAMESPACE::Box2i& dataWindow () const { return _dataWindow; } + +protected: + friend class Image; + + IMFUTIL_EXPORT + ImageLevel (Image& image, int xLevelNumber, int yLevelNumber); + + IMFUTIL_EXPORT + virtual ~ImageLevel (); + + IMFUTIL_EXPORT + virtual void resize (const IMATH_NAMESPACE::Box2i& dataWindow); + + IMFUTIL_EXPORT + virtual void shiftPixels (int dx, int dy); + + virtual void insertChannel ( + const std::string& name, + PixelType type, + int xSampling, + int ySampling, + bool pLinear) = 0; + + virtual void eraseChannel (const std::string& name) = 0; + + virtual void clearChannels () = 0; + + virtual void + renameChannel (const std::string& oldName, const std::string& newName) = 0; + + virtual void renameChannels (const RenamingMap& oldToNewNames) = 0; + + IMFUTIL_EXPORT + void throwChannelExists (const std::string& name) const; + IMFUTIL_EXPORT + void throwBadChannelName (const std::string& name) const; + IMFUTIL_EXPORT + void throwBadChannelNameOrType (const std::string& name) const; + +private: + ImageLevel (const ImageLevel&); // not implemented + ImageLevel& operator= (const ImageLevel&); // not implemented + + Image& _image; + int _xLevelNumber; + int _yLevelNumber; + IMATH_NAMESPACE::Box2i _dataWindow; +}; + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT + +#endif diff --git a/third_party/tlRender-install-Release/include/OpenEXR/ImfInputFile.h b/third_party/tlRender-install-Release/include/OpenEXR/ImfInputFile.h new file mode 100644 index 00000000..f71f2ef8 --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenEXR/ImfInputFile.h @@ -0,0 +1,287 @@ +// +// SPDX-License-Identifier: BSD-3-Clause +// Copyright (c) Contributors to the OpenEXR Project. +// + +#ifndef INCLUDED_IMF_INPUT_FILE_H +#define INCLUDED_IMF_INPUT_FILE_H + +//----------------------------------------------------------------------------- +// +// class InputFile -- a scanline-based interface that can be used +// to read both scanline-based and tiled OpenEXR image files. +// +//----------------------------------------------------------------------------- + +#include "ImfForward.h" + +#include "ImfThreading.h" + +#include "ImfContext.h" + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER + +class TiledInputFile; + +/// \brief Provides generic access to read an image from an EXR file +/// +/// There are a suite of classes for accessing image data, depending +/// on the level of complexity your application demands. This one is +/// perhaps a good starting point. There is a simpler one in \sa +/// RgbaInputFile, but that has very noted limitations of only being +/// for a 16-bit half, RGBA image. This class gives access to +/// arbitrary channels and data type outputs. It also will convert a +/// tiled image into a "normal" image, and simplify access if you only +/// want the first part, first image of a file. +/// +/// If you will be accessing tiles (say for a renderer), working with +/// multi-part images, or reading deep data there are other classes +/// which provide API for handling that complexity more efficiently: +/// +/// MultiPartInputFile +/// can be constructed but not directly accessible +/// - InputPart (the part-based class corresponding to this class) +/// - TiledInputPart +/// - DeepTiledInputPart +/// - DeepScanlineInputPart +/// - ScanlineInputPart [[[ NEW, but for consistency ]]] +/// TiledInputFile +/// DeepScanLineInputFile +/// DeepTiledInputFile +/// ScanLineInputFile +/// +/// Of these, InputFile provide somewhat of a barrier to knowing what +/// the file actually contains, such that it allows you to read a file +/// as if it is scanlines, even if it is actually tiled under the +/// covers. Similar, a deep file is automatically composited for the +/// user. If a multi-part file is opened, the first part will be +/// provided. +/// +/// For most code, it is suggested to use MultiPartInputFile and the +/// API provided by the relevant part classes, but if only a simple +/// API is needed, InputFile will certainly hide much of the +/// complexity. +class IMF_EXPORT_TYPE InputFile +{ +public: + //------------------------------------------------------------- + // A constructor that attaches the new InputFile object to a + // file that has already been opened. Destroying the InputFile + // object will not close the file. + // + // numThreads determines the number of threads that will be + // used to read the file (see ImfThreading.h). + //------------------------------------------------------------- + + IMF_EXPORT + InputFile ( + OPENEXR_IMF_INTERNAL_NAMESPACE::IStream& is, + int numThreads = globalThreadCount ()); + + //----------------------------------------------------------- + // A constructor that opens the file with the specified name. + // Destroying the InputFile object will close the file. + // + // numThreads determines the number of threads that will be + // used to read the file (see ImfThreading.h). + //----------------------------------------------------------- + IMF_EXPORT + InputFile (const char filename[], int numThreads = globalThreadCount ()); + + //----------------------------------------------------------- + // A constructor that opens the file with the specified name + // and context initialization routines + // Destroying the InputFile object will close the file. + //----------------------------------------------------------- + IMF_EXPORT + InputFile ( + const char* filename, + const ContextInitializer& ctxtinit, + int numThreads = globalThreadCount ()); + + //------------------------ + // Access to the file name + //------------------------ + + IMF_EXPORT + const char* fileName () const; + + //-------------------------- + // Access to the file header + //-------------------------- + + IMF_EXPORT + const Header& header () const; + + //---------------------------------- + // Access to the file format version + //---------------------------------- + + IMF_EXPORT + int version () const; + + //----------------------------------------------------------- + // Set the current frame buffer -- copies the FrameBuffer + // object into the InputFile object. + // + // The current frame buffer is the destination for the pixel + // data read from the file. The current frame buffer must be + // set at least once before readPixels() is called. + // The current frame buffer can be changed after each call + // to readPixels(). + //----------------------------------------------------------- + + IMF_EXPORT + void setFrameBuffer (const FrameBuffer& frameBuffer); + + //----------------------------------- + // Access to the current frame buffer + //----------------------------------- + + IMF_EXPORT + const FrameBuffer& frameBuffer () const; + + //--------------------------------------------------------------- + // Check if the file is complete: + // + // isComplete() returns true if all pixels in the data window are + // present in the input file, or false if any pixels are missing. + // (Another program may still be busy writing the file, or file + // writing may have been aborted prematurely.) + //--------------------------------------------------------------- + + IMF_EXPORT + bool isComplete () const; + + //--------------------------------------------------------------- + // Check if SSE optimization is enabled + // + // Call after setFrameBuffer() to query whether optimized file decoding + // is available - decode times will be faster if returns true + // + // Optimization depends on: + // the file type (only scanline data is supported), + // the framebuffer channels (RGB/RGBA mono or stereo) + // the framebuffer channel types (all channels half-float format only) + // the file channels (RGB/RGBA mono or stereo) + // the file channel types (all channel half-float format only) + // whether SSE2 instruction support was detected at compile time + // + // Calling isOptimizationEnabled before setFrameBuffer will throw an exception + // + //--------------------------------------------------------------- + + OPENEXR_DEPRECATED ("No longer meaningful") + IMF_EXPORT + bool isOptimizationEnabled () const; + + //--------------------------------------------------------------- + // Read pixel data: + // + // readPixels(s1,s2) reads all scan lines with y coordinates + // in the interval [min (s1, s2), max (s1, s2)] from the file, + // and stores them in the current frame buffer. + // + // Both s1 and s2 must be within the interval + // [header().dataWindow().min.y, header().dataWindow().max.y] + // + // The scan lines can be read from the file in random order, and + // individual scan lines may be skipped or read multiple times. + // For maximum efficiency, the scan lines should be read in the + // order in which they were written to the file. + // + // readPixels(s) calls readPixels(s,s). + // + //--------------------------------------------------------------- + + IMF_EXPORT + void readPixels (int scanLine1, int scanLine2); + + IMF_EXPORT + void readPixels (int scanLine); + + //---------------------------------------------- + // Combines the setFrameBuffer and readPixels into a singular + // call. This does more than that in that it can, with the right + // conditions, not require a lock on the file, such that multiple + // (external to OpenEXR) threads can read at the same time on + // different framebuffers + // + // NB: if the underlying file is deep or tiled, that requires + // translation, so will not do the pass through, but will behave + // in a threadsafe manner (where the only way that was possible + // before was to have a larger framebuffer, set the framebuffer + // once, then call readPixels by the external threads, although + // that occurred with a mutex and so the reads were serialized. + // There are reasons why that might still be serialized, such as a + // non-threadable stream. + //---------------------------------------------- + + IMF_EXPORT + void readPixels ( + const FrameBuffer& frameBuffer, int scanLine1, int scanLine2); + + //---------------------------------------------- + // Read a block of raw pixel data from the file, + // without uncompressing it (this function is + // used to implement OutputFile::copyPixels()). + //---------------------------------------------- + + IMF_EXPORT + void rawPixelData ( + int firstScanLine, const char*& pixelData, int& pixelDataSize); + + //---------------------------------------------- + // Read a scanline's worth of raw pixel data + // from the file, without uncompressing it, and + // store in an external buffer, pixelData. + // pixelData should be pre-allocated with space + // for pixelDataSize chars. + // + // This function can be used to separate the + // reading of a raw scan line from the + // decompression of that scan line, for + // example to allow multiple scan lines to be + // decompressed in parallel by an application's + // own threads, where it is not convenient to + // use the threading within the library. + //---------------------------------------------- + + IMF_EXPORT + void rawPixelDataToBuffer ( + int scanLine, char* pixelData, int& pixelDataSize) const; + + //-------------------------------------------------- + // Read a tile of raw pixel data from the file, + // without uncompressing it (this function is + // used to implement TiledOutputFile::copyPixels()). + //-------------------------------------------------- + + IMF_EXPORT + void rawTileData ( + int& dx, + int& dy, + int& lx, + int& ly, + const char*& pixelData, + int& pixelDataSize); + +private: + IMF_HIDDEN void initialize (void); + + // TODO: Remove these once MultiPartInputFile is converted + IMF_HIDDEN InputFile (InputPartData* part); + friend class MultiPartInputFile; + + // TODO: Remove these once TiledOutputFile is converted + IMF_HIDDEN TiledInputFile& asTiledInput (void) const; + friend class TiledOutputFile; + + Context _ctxt; + struct Data; + std::shared_ptr _data; +}; + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT + +#endif diff --git a/third_party/tlRender-install-Release/include/OpenEXR/ImfInputPart.h b/third_party/tlRender-install-Release/include/OpenEXR/ImfInputPart.h new file mode 100644 index 00000000..c25a4fa6 --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenEXR/ImfInputPart.h @@ -0,0 +1,72 @@ +// +// SPDX-License-Identifier: BSD-3-Clause +// Copyright (c) Contributors to the OpenEXR Project. +// + +#ifndef IMFINPUTPART_H_ +#define IMFINPUTPART_H_ + +#include "ImfForward.h" + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER + +//------------------------------------------------------------------- +// class InputPart: +// +// Same interface as InputFile. Please refer to InputFile. +//------------------------------------------------------------------- + +class IMF_EXPORT_TYPE InputPart +{ +public: + IMF_EXPORT + InputPart (MultiPartInputFile& multiPartFile, int partNumber); + + IMF_EXPORT + const char* fileName () const; + IMF_EXPORT + const Header& header () const; + IMF_EXPORT + int version () const; + IMF_EXPORT + void setFrameBuffer (const FrameBuffer& frameBuffer); + IMF_EXPORT + const FrameBuffer& frameBuffer () const; + IMF_EXPORT + bool isComplete () const; + IMF_EXPORT + bool isOptimizationEnabled () const; + IMF_EXPORT + void readPixels (int scanLine1, int scanLine2); + IMF_EXPORT + void readPixels (int scanLine); + IMF_EXPORT + void readPixels ( + const FrameBuffer& frameBuffer, int scanLine1, int scanLine2); + IMF_EXPORT + void rawPixelData ( + int firstScanLine, const char*& pixelData, int& pixelDataSize); + + IMF_EXPORT + void rawPixelDataToBuffer ( + int scanLine, char* pixelData, int& pixelDataSize) const; + + IMF_EXPORT + void rawTileData ( + int& dx, + int& dy, + int& lx, + int& ly, + const char*& pixelData, + int& pixelDataSize); + +private: + InputFile* file; + // for internal use - give OutputFile and TiledOutputFile access to file for copyPixels + friend class OutputFile; + friend class TiledOutputFile; +}; + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT + +#endif /* IMFINPUTPART_H_ */ diff --git a/third_party/tlRender-install-Release/include/OpenEXR/ImfInt64.h b/third_party/tlRender-install-Release/include/OpenEXR/ImfInt64.h new file mode 100644 index 00000000..6443e444 --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenEXR/ImfInt64.h @@ -0,0 +1,30 @@ +// +// SPDX-License-Identifier: BSD-3-Clause +// Copyright (c) Contributors to the OpenEXR Project. +// + +#ifndef INCLUDED_IMF_INT64_H +#define INCLUDED_IMF_INT64_H + +//---------------------------------------------------------------------------- +// +// Deprecated Int64/SInt64 unsigned 64-bit integer type. +// Use int64_t and uint64_t instead. +// +//---------------------------------------------------------------------------- + +#include "ImathInt64.h" +#include "ImfNamespace.h" +#include + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER + +IMATH_DEPRECATED ("use uint64_t") +typedef IMATH_NAMESPACE::Int64 Int64; + +IMATH_DEPRECATED ("use int64_t") +typedef IMATH_NAMESPACE::SInt64 SInt64; + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT + +#endif // INCLUDED_IMF_INT64_H diff --git a/third_party/tlRender-install-Release/include/OpenEXR/ImfIntAttribute.h b/third_party/tlRender-install-Release/include/OpenEXR/ImfIntAttribute.h new file mode 100644 index 00000000..dcf0fd3e --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenEXR/ImfIntAttribute.h @@ -0,0 +1,30 @@ +// +// SPDX-License-Identifier: BSD-3-Clause +// Copyright (c) Contributors to the OpenEXR Project. +// + +#ifndef INCLUDED_IMF_INT_ATTRIBUTE_H +#define INCLUDED_IMF_INT_ATTRIBUTE_H + +//----------------------------------------------------------------------------- +// +// class IntAttribute +// +//----------------------------------------------------------------------------- + +#include "ImfExport.h" +#include "ImfNamespace.h" + +#include "ImfAttribute.h" + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER + +typedef TypedAttribute IntAttribute; + +#ifndef COMPILING_IMF_INT_ATTRIBUTE +extern template class IMF_EXPORT_EXTERN_TEMPLATE TypedAttribute; +#endif + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT + +#endif diff --git a/third_party/tlRender-install-Release/include/OpenEXR/ImfKeyCode.h b/third_party/tlRender-install-Release/include/OpenEXR/ImfKeyCode.h new file mode 100644 index 00000000..9fca7b4f --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenEXR/ImfKeyCode.h @@ -0,0 +1,149 @@ +// +// SPDX-License-Identifier: BSD-3-Clause +// Copyright (c) Contributors to the OpenEXR Project. +// + +#ifndef INCLUDED_IMF_KEY_CODE_H +#define INCLUDED_IMF_KEY_CODE_H + +//----------------------------------------------------------------------------- +// +// class KeyCode +// +// A KeyCode object uniquely identifies a motion picture film frame. +// The following fields specify film manufacturer, film type, film +// roll and the frame's position within the roll: +// +// filmMfcCode film manufacturer code +// range: 0 - 99 +// +// filmType film type code +// range: 0 - 99 +// +// prefix prefix to identify film roll +// range: 0 - 999999 +// +// count count, increments once every perfsPerCount +// perforations (see below) +// range: 0 - 9999 +// +// perfOffset offset of frame, in perforations from +// zero-frame reference mark +// range: 0 - 119 +// +// perfsPerFrame number of perforations per frame +// range: 1 - 15 +// +// typical values: +// +// 1 for 16mm film +// 3, 4, or 8 for 35mm film +// 5, 8 or 15 for 65mm film +// +// perfsPerCount number of perforations per count +// range: 20 - 120 +// +// typical values: +// +// 20 for 16mm film +// 64 for 35mm film +// 80 or 120 for 65mm film +// +// For more information about the interpretation of those fields see +// the following standards and recommended practice publications: +// +// SMPTE 254 Motion-Picture Film (35-mm) - Manufacturer-Printed +// Latent Image Identification Information +// +// SMPTE 268M File Format for Digital Moving-Picture Exchange (DPX) +// (section 6.1) +// +// SMPTE 270 Motion-Picture Film (65-mm) - Manufacturer- Printed +// Latent Image Identification Information +// +// SMPTE 271 Motion-Picture Film (16-mm) - Manufacturer- Printed +// Latent Image Identification Information +// +//----------------------------------------------------------------------------- +#include "ImfExport.h" +#include "ImfNamespace.h" + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER + +class IMF_EXPORT_TYPE KeyCode +{ +public: + //------------------------------------- + // Constructors and assignment operator + //------------------------------------- + + IMF_EXPORT + KeyCode ( + int filmMfcCode = 0, + int filmType = 0, + int prefix = 0, + int count = 0, + int perfOffset = 0, + int perfsPerFrame = 4, + int perfsPerCount = 64); + + IMF_EXPORT + KeyCode (const KeyCode& other); + ~KeyCode () = default; + IMF_EXPORT + KeyCode& operator= (const KeyCode& other); + + bool operator== (const KeyCode& other) const; + + //---------------------------- + // Access to individual fields + //---------------------------- + + IMF_EXPORT + int filmMfcCode () const; + IMF_EXPORT + void setFilmMfcCode (int filmMfcCode); + + IMF_EXPORT + int filmType () const; + IMF_EXPORT + void setFilmType (int filmType); + + IMF_EXPORT + int prefix () const; + IMF_EXPORT + void setPrefix (int prefix); + + IMF_EXPORT + int count () const; + IMF_EXPORT + void setCount (int count); + + IMF_EXPORT + int perfOffset () const; + IMF_EXPORT + void setPerfOffset (int perfOffset); + + IMF_EXPORT + int perfsPerFrame () const; + IMF_EXPORT + void setPerfsPerFrame (int perfsPerFrame); + + IMF_EXPORT + int perfsPerCount () const; + IMF_EXPORT + void setPerfsPerCount (int perfsPerCount); + +private: + int _filmMfcCode; + int _filmType; + int _prefix; + int _count; + int _perfOffset; + int _perfsPerFrame; + int _perfsPerCount; +}; + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT + +#endif diff --git a/third_party/tlRender-install-Release/include/OpenEXR/ImfKeyCodeAttribute.h b/third_party/tlRender-install-Release/include/OpenEXR/ImfKeyCodeAttribute.h new file mode 100644 index 00000000..04b0fb37 --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenEXR/ImfKeyCodeAttribute.h @@ -0,0 +1,34 @@ +// +// SPDX-License-Identifier: BSD-3-Clause +// Copyright (c) Contributors to the OpenEXR Project. +// + +#ifndef INCLUDED_IMF_KEY_CODE_ATTRIBUTE_H +#define INCLUDED_IMF_KEY_CODE_ATTRIBUTE_H + +//----------------------------------------------------------------------------- +// +// class KeyCodeAttribute +// +//----------------------------------------------------------------------------- + +#include "ImfExport.h" +#include "ImfNamespace.h" + +#include "ImfAttribute.h" + +#include "ImfKeyCode.h" + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER + +typedef TypedAttribute + KeyCodeAttribute; + +#ifndef COMPILING_IMF_KEYCODE_ATTRIBUTE +extern template class IMF_EXPORT_EXTERN_TEMPLATE + TypedAttribute; +#endif + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT + +#endif diff --git a/third_party/tlRender-install-Release/include/OpenEXR/ImfLineOrder.h b/third_party/tlRender-install-Release/include/OpenEXR/ImfLineOrder.h new file mode 100644 index 00000000..57f52904 --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenEXR/ImfLineOrder.h @@ -0,0 +1,33 @@ +// +// SPDX-License-Identifier: BSD-3-Clause +// Copyright (c) Contributors to the OpenEXR Project. +// + +#ifndef INCLUDED_IMF_LINE_ORDER_H +#define INCLUDED_IMF_LINE_ORDER_H + +//----------------------------------------------------------------------------- +// +// enum LineOrder +// +//----------------------------------------------------------------------------- +#include "ImfExport.h" +#include "ImfNamespace.h" + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER + +enum IMF_EXPORT_ENUM LineOrder +{ + INCREASING_Y = 0, // first scan line has lowest y coordinate + + DECREASING_Y = 1, // first scan line has highest y coordinate + + RANDOM_Y = 2, // only for tiled files; tiles are written + // in random order + + NUM_LINEORDERS // number of different line orders +}; + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT + +#endif diff --git a/third_party/tlRender-install-Release/include/OpenEXR/ImfLineOrderAttribute.h b/third_party/tlRender-install-Release/include/OpenEXR/ImfLineOrderAttribute.h new file mode 100644 index 00000000..89a8eb5d --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenEXR/ImfLineOrderAttribute.h @@ -0,0 +1,33 @@ +// +// SPDX-License-Identifier: BSD-3-Clause +// Copyright (c) Contributors to the OpenEXR Project. +// + +#ifndef INCLUDED_IMF_LINE_ORDER_ATTRIBUTE_H +#define INCLUDED_IMF_LINE_ORDER_ATTRIBUTE_H + +//----------------------------------------------------------------------------- +// +// class LineOrderAttribute +// +//----------------------------------------------------------------------------- + +#include "ImfExport.h" +#include "ImfNamespace.h" + +#include "ImfAttribute.h" +#include "ImfLineOrder.h" + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER + +using LineOrderAttribute = + TypedAttribute; + +#ifndef COMPILING_IMF_LINE_ORDER_ATTRIBUTE +extern template class IMF_EXPORT_EXTERN_TEMPLATE + TypedAttribute; +#endif + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT + +#endif diff --git a/third_party/tlRender-install-Release/include/OpenEXR/ImfLut.h b/third_party/tlRender-install-Release/include/OpenEXR/ImfLut.h new file mode 100644 index 00000000..4497eda3 --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenEXR/ImfLut.h @@ -0,0 +1,155 @@ +// +// SPDX-License-Identifier: BSD-3-Clause +// Copyright (c) Contributors to the OpenEXR Project. +// + +#ifndef INCLUDED_IMF_LUT_H +#define INCLUDED_IMF_LUT_H + +//----------------------------------------------------------------------------- +// +// Lookup tables for efficient application +// of half --> half functions to pixel data, +// and some commonly applied functions. +// +//----------------------------------------------------------------------------- + +#include "ImfExport.h" +#include "ImfNamespace.h" + +#include "ImfRgbaFile.h" + +#include +#include + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER + +// +// Lookup table for individual half channels. +// + +class HalfLut +{ +public: + //------------ + // Constructor + //------------ + + template HalfLut (Function f); + + //---------------------------------------------------------------------- + // Apply the table to data[0], data[stride] ... data[(nData-1) * stride] + //---------------------------------------------------------------------- + + IMF_EXPORT + void apply (half* data, int nData, int stride = 1) const; + + //--------------------------------------------------------------- + // Apply the table to a frame buffer slice (see ImfFrameBuffer.h) + //--------------------------------------------------------------- + + IMF_EXPORT + void + apply (const Slice& data, const IMATH_NAMESPACE::Box2i& dataWindow) const; + +private: + halfFunction _lut; +}; + +// +// Lookup table for combined RGBA data. +// + +class RgbaLut +{ +public: + //------------ + // Constructor + //------------ + + template + RgbaLut (Function f, RgbaChannels chn = WRITE_RGB); + + //---------------------------------------------------------------------- + // Apply the table to data[0], data[stride] ... data[(nData-1) * stride] + //---------------------------------------------------------------------- + + IMF_EXPORT + void apply (Rgba* data, int nData, int stride = 1) const; + + //----------------------------------------------------------------------- + // Apply the table to a frame buffer (see RgbaOutpuFile.setFrameBuffer()) + //----------------------------------------------------------------------- + + IMF_EXPORT + void apply ( + Rgba* base, + int xStride, + int yStride, + const IMATH_NAMESPACE::Box2i& dataWindow) const; + +private: + halfFunction _lut; + RgbaChannels _chn; +}; + +// +// 12bit log rounding reduces data to 20 stops with 200 steps per stop. +// That makes 4000 numbers. An extra 96 just come along for the ride. +// Zero explicitly remains zero. The first non-zero half will map to 1 +// in the 0-4095 12log space. A nice power of two number is placed at +// the center [2000] and that number is near 0.18. +// + +IMF_EXPORT +half round12log (half x); + +// +// Round to n-bit precision (n should be between 0 and 10). +// After rounding, the significand's 10-n least significant +// bits will be zero. +// + +struct roundNBit +{ + roundNBit (int n) : n (n) {} + half operator() (half x) { return x.round (n); } + int n; +}; + +// +// Template definitions +// + +template +HalfLut::HalfLut (Function f) + : _lut ( + f, + -HALF_MAX, + HALF_MAX, + half (0), + half::posInf (), + half::negInf (), + half::qNan ()) +{ + // empty +} + +template +RgbaLut::RgbaLut (Function f, RgbaChannels chn) + : _lut ( + f, + -HALF_MAX, + HALF_MAX, + half (0), + half::posInf (), + half::negInf (), + half::qNan ()) + , _chn (chn) +{ + // empty +} + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT + +#endif diff --git a/third_party/tlRender-install-Release/include/OpenEXR/ImfMatrixAttribute.h b/third_party/tlRender-install-Release/include/OpenEXR/ImfMatrixAttribute.h new file mode 100644 index 00000000..667e9ae3 --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenEXR/ImfMatrixAttribute.h @@ -0,0 +1,55 @@ +// +// SPDX-License-Identifier: BSD-3-Clause +// Copyright (c) Contributors to the OpenEXR Project. +// + +#ifndef INCLUDED_IMF_MATRIX_ATTRIBUTE_H +#define INCLUDED_IMF_MATRIX_ATTRIBUTE_H + +//----------------------------------------------------------------------------- +// +// class M33fAttribute +// class M33dAttribute +// class M44fAttribute +// class M44dAttribute +// +//----------------------------------------------------------------------------- + +#include "ImfExport.h" +#include "ImfNamespace.h" + +#include "ImfAttribute.h" +#include + +#if defined(_MSC_VER) +// suppress warning about non-exported base classes +# pragma warning(push) +# pragma warning(disable : 4251) +# pragma warning(disable : 4275) +#endif + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER + +typedef TypedAttribute M33fAttribute; +typedef TypedAttribute M33dAttribute; +typedef TypedAttribute M44fAttribute; +typedef TypedAttribute M44dAttribute; + +#ifndef COMPILING_IMF_MATRIX_ATTRIBUTE +extern template class IMF_EXPORT_EXTERN_TEMPLATE + TypedAttribute; +extern template class IMF_EXPORT_EXTERN_TEMPLATE + TypedAttribute; +extern template class IMF_EXPORT_EXTERN_TEMPLATE + TypedAttribute; +extern template class IMF_EXPORT_EXTERN_TEMPLATE + TypedAttribute; +#endif + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT + +#if defined(_MSC_VER) +# pragma warning(pop) +#endif + +#endif diff --git a/third_party/tlRender-install-Release/include/OpenEXR/ImfMisc.h b/third_party/tlRender-install-Release/include/OpenEXR/ImfMisc.h new file mode 100644 index 00000000..b7e9d1a2 --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenEXR/ImfMisc.h @@ -0,0 +1,453 @@ +// +// SPDX-License-Identifier: BSD-3-Clause +// Copyright (c) Contributors to the OpenEXR Project. +// + +#ifndef INCLUDED_IMF_MISC_H +#define INCLUDED_IMF_MISC_H + +//----------------------------------------------------------------------------- +// +// Miscellaneous helper functions for OpenEXR image file I/O +// +//----------------------------------------------------------------------------- + +#include "ImfForward.h" + +#include "ImfArray.h" +#include "ImfCompressor.h" +#include "ImfPixelType.h" + +#include +#include + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER + +// +// Return the size of a single value of the indicated type, +// in the machine's native format. +// + +IMF_EXPORT +int pixelTypeSize (PixelType type); + +// +// Return the number of samples a channel with subsampling rate +// s has in the interval [a, b]. For example, a channel with +// subsampling rate 2 (and samples at 0, 2, 4, 6, 8, etc.) has +// 2 samples in the interval [1, 5] and three samples in the +// interval [2, 6]. +// + +IMF_EXPORT +int numSamples (int s, int a, int b); + +// +// Build a table that lists, for each scanline in a file's +// data window, how many bytes are required to store all +// pixels in all channels in that scanline (assuming that +// the pixel data are tightly packed). +// + +IMF_EXPORT +size_t +bytesPerLineTable (const Header& header, std::vector& bytesPerLine); + +// +// Get the sample count for pixel (x, y) using the array base +// pointer, xStride and yStride. +// + +inline int& +sampleCount (char* base, int xStride, int yStride, int x, int y) +{ + char* ptr = base + y * ptrdiff_t (yStride) + x * ptrdiff_t (xStride); + int* intPtr = (int*) ptr; + + return *intPtr; +} + +inline const int& +sampleCount (const char* base, int xStride, int yStride, int x, int y) +{ + const char* ptr = base + y * ptrdiff_t (yStride) + x * ptrdiff_t (xStride); + int* intPtr = (int*) ptr; + + return *intPtr; +} + +// +// Build a table that lists, for each scanline in a DEEP file's +// data window, how many bytes are required to store all +// pixels in all channels in scanlines ranged in [minY, maxY] +// (assuming that the pixel data are tightly packed). +// + +IMF_EXPORT +size_t bytesPerDeepLineTable ( + const Header& header, + int minY, + int maxY, + const char* base, + int xStride, + int yStride, + std::vector& bytesPerLine); + +// +// Build a table that lists, for each scanline in a DEEP file's +// data window, how many bytes are required to store all +// pixels in all channels in every scanline (assuming that +// the pixel data are tightly packed). +// + +IMF_EXPORT +size_t bytesPerDeepLineTable ( + const Header& header, + char* base, + int xStride, + int yStride, + std::vector& bytesPerLine); + +// +// For scanline-based files, pixels are read or written in +// in multi-scanline blocks. Internally, class OutputFile +// and class ScanLineInputFile store a block of scan lines +// in a "line buffer". Function offsetInLineBufferTable() +// builds a table that lists, scanlines within range +// [scanline1, scanline2], the location of the pixel data +// for the scanline relative to the beginning of the line buffer, +// where scanline1 = 0 represents the first line in the DATA WINDOW. +// The one without specifying the range will make scanline1 = 0 +// and scanline2 = bytesPerLine.size(). +// + +IMF_EXPORT +void offsetInLineBufferTable ( + const std::vector& bytesPerLine, + int scanline1, + int scanline2, + int linesInLineBuffer, + std::vector& offsetInLineBuffer); + +IMF_EXPORT +void offsetInLineBufferTable ( + const std::vector& bytesPerLine, + int linesInLineBuffer, + std::vector& offsetInLineBuffer); + +// +// For a scanline-based file, compute the range of scanlines +// that occupy the same line buffer as a given scanline, y. +// (minY is the minimum y coordinate of the file's data window.) +// + +IMF_EXPORT int lineBufferMinY (int y, int minY, int linesInLineBuffer); +IMF_EXPORT int lineBufferMaxY (int y, int minY, int linesInLineBuffer); + +// +// Return a compressor's data format (Compressor::NATIVE or Compressor::XDR). +// If compressor is 0, return Compressor::XDR. +// + +IMF_EXPORT +Compressor::Format defaultFormat (Compressor* compressor); + +// +// Return the number of scan lines a compressor wants to compress +// or uncompress at once. If compressor is 0, return 1. +// + +IMF_EXPORT +int numLinesInBuffer (Compressor* compressor); + +// +// Copy a single channel of a horizontal row of pixels from an +// input file's internal line buffer or tile buffer into a +// frame buffer slice. If necessary, perform on-the-fly data +// type conversion. +// +// readPtr initially points to the beginning of the +// data in the line or tile buffer. readPtr +// is advanced as the pixel data are copied; +// when copyIntoFrameBuffer() returns, +// readPtr points just past the end of the +// copied data. +// +// writePtr, endPtr point to the lefmost and rightmost pixels +// in the frame buffer slice +// +// xStride the xStride for the frame buffer slice +// +// format indicates if the line or tile buffer is +// in NATIVE or XDR format. +// +// typeInFrameBuffer the pixel data type of the frame buffer slice +// +// typeInFile the pixel data type in the input file's channel +// + +IMF_EXPORT +void copyIntoFrameBuffer ( + const char*& readPtr, + char* writePtr, + char* endPtr, + size_t xStride, + bool fill, + double fillValue, + Compressor::Format format, + PixelType typeInFrameBuffer, + PixelType typeInFile); + +// +// Copy a single channel of a horizontal row of pixels from an +// input file's internal line buffer or tile buffer into a +// frame buffer slice. If necessary, perform on-the-fly data +// type conversion. +// +// readPtr initially points to the beginning of the +// data in the line or tile buffer. readPtr +// is advanced as the pixel data are copied; +// when copyIntoFrameBuffer() returns, +// readPtr points just past the end of the +// copied data. +// +// base point to each pixel in the framebuffer +// +// sampleCountBase, provide the number of samples in each pixel +// sampleCountXStride, +// sampleCountYStride +// +// y the scanline to copy. The coordinate is +// relative to the datawindow.min.y. +// +// minX, maxX used to indicate which pixels in the scanline +// will be copied. +// +// xOffsetForSampleCount, used to offset the sample count array +// yOffsetForSampleCount, and the base array. +// xOffsetForData, +// yOffsetForData +// +// xStride the xStride for the frame buffer slice +// +// format indicates if the line or tile buffer is +// in NATIVE or XDR format. +// +// typeInFrameBuffer the pixel data type of the frame buffer slice +// +// typeInFile the pixel data type in the input file's channel +// + +IMF_EXPORT +void copyIntoDeepFrameBuffer ( + const char*& readPtr, + char* base, + const char* sampleCountBase, + ptrdiff_t sampleCountXStride, + ptrdiff_t sampleCountYStride, + int y, + int minX, + int maxX, + int xOffsetForSampleCount, + int yOffsetForSampleCount, + int xOffsetForData, + int yOffsetForData, + ptrdiff_t xStride, + ptrdiff_t xPointerStride, + ptrdiff_t yPointerStride, + bool fill, + double fillValue, + Compressor::Format format, + PixelType typeInFrameBuffer, + PixelType typeInFile); + +// +// Given a pointer into a an input file's line buffer or tile buffer, +// skip over the data for xSize pixels of type typeInFile. +// readPtr initially points to the beginning of the data to be skipped; +// when skipChannel() returns, readPtr points just past the end of the +// skipped data. +// + +IMF_EXPORT +void skipChannel (const char*& readPtr, PixelType typeInFile, size_t xSize); + +// +// Convert an array of pixel data from the machine's native +// representation to XDR format. +// +// toPtr, fromPtr initially point to the beginning of the input +// and output pixel data arrays; when convertInPlace() +// returns, toPtr and fromPtr point just past the +// end of the input and output arrays. +// If the native representation of the data has the +// same size as the XDR data, then the conversion +// can take in place, without an intermediate +// temporary buffer (toPtr and fromPtr can point +// to the same location). +// +// type the pixel data type +// +// numPixels number of pixels in the input and output arrays +// + +IMF_EXPORT +void convertInPlace ( + char*& toPtr, const char*& fromPtr, PixelType type, size_t numPixels); + +// +// Copy a single channel of a horizontal row of pixels from a +// a frame buffer into an output file's internal line buffer or +// tile buffer. +// +// writePtr initially points to the beginning of the +// data in the line or tile buffer. writePtr +// is advanced as the pixel data are copied; +// when copyFromFrameBuffer() returns, +// writePtr points just past the end of the +// copied data. +// +// readPtr, endPtr point to the lefmost and rightmost pixels +// in the frame buffer slice +// +// xStride the xStride for the frame buffer slice +// +// format indicates if the line or tile buffer is +// in NATIVE or XDR format. +// +// type the pixel data type in the frame buffer +// and in the output file's channel (function +// copyFromFrameBuffer() doesn't do on-the-fly +// data type conversion) +// + +IMF_EXPORT +void copyFromFrameBuffer ( + char*& writePtr, + const char*& readPtr, + const char* endPtr, + size_t xStride, + Compressor::Format format, + PixelType type); + +// +// Copy a single channel of a horizontal row of pixels from a +// a frame buffer in a deep data file into an output file's +// internal line buffer or tile buffer. +// +// writePtr initially points to the beginning of the +// data in the line or tile buffer. writePtr +// is advanced as the pixel data are copied; +// when copyFromDeepFrameBuffer() returns, +// writePtr points just past the end of the +// copied data. +// +// base the start pointer of each pixel in this channel. +// It points to the real data in FrameBuffer. +// It is different for different channels. +// dataWindowMinX and dataWindowMinY are involved in +// locating for base. +// +// sampleCountBase, used to locate the position to get +// sampleCountXStride, the number of samples for each pixel. +// sampleCountYStride Used to determine how far we should +// read based on the pointer provided by base. +// +// y the scanline to copy. If we are dealing +// with a tiled deep file, then probably a portion +// of the scanline is copied. +// +// xMin, xMax used to indicate which pixels in the scanline +// will be copied. +// +// xOffsetForSampleCount, used to offset the sample count array +// yOffsetForSampleCount, and the base array. +// xOffsetForData, +// yOffsetForData +// +// xStride the xStride for the frame buffer slice +// +// format indicates if the line or tile buffer is +// in NATIVE or XDR format. +// +// type the pixel data type in the frame buffer +// and in the output file's channel (function +// copyFromFrameBuffer() doesn't do on-the-fly +// data type conversion) +// + +IMF_EXPORT +void copyFromDeepFrameBuffer ( + char*& writePtr, + const char* base, + char* sampleCountBase, + ptrdiff_t sampleCountXStride, + ptrdiff_t sampleCountYStride, + int y, + int xMin, + int xMax, + int xOffsetForSampleCount, + int yOffsetForSampleCount, + int xOffsetForData, + int yOffsetForData, + ptrdiff_t sampleStride, + ptrdiff_t xStrideForData, + ptrdiff_t yStrideForData, + Compressor::Format format, + PixelType type); + +// +// Fill part of an output file's line buffer or tile buffer with +// zeroes. This routine is called when an output file contains +// a channel for which the frame buffer contains no corresponding +// slice. +// +// writePtr initially points to the beginning of the +// data in the line or tile buffer. When +// fillChannelWithZeroes() returns, writePtr +// points just past the end of the zeroed +// data. +// +// format indicates if the line or tile buffer is +// in NATIVE or XDR format. +// +// type the pixel data type in the line or frame buffer. +// +// xSize number of pixels to be filled with zeroes. +// + +IMF_EXPORT +void fillChannelWithZeroes ( + char*& writePtr, Compressor::Format format, PixelType type, size_t xSize); + +IMF_EXPORT +bool usesLongNames (const Header& header); + +// +// compute size of chunk offset table - for existing types, computes +// the chunk size from the image size, compression type, and tile +// description (for tiled types). If the type is not supported, uses +// the chunkCount attribute if present, or throws an exception +// otherwise +// + +IMF_EXPORT +int getChunkOffsetTableSize (const Header& header); + +// +// Convert a filename to a wide string. This is useful for working with +// filenames on Windows. +// + +IMF_EXPORT +std::wstring WidenFilename (const char* filename); + +// +// Return the string that describes the major.minor.patch release version +// + +IMF_EXPORT const char* getLibraryVersion (); + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT + +#endif diff --git a/third_party/tlRender-install-Release/include/OpenEXR/ImfMultiPartInputFile.h b/third_party/tlRender-install-Release/include/OpenEXR/ImfMultiPartInputFile.h new file mode 100644 index 00000000..0b1fc07a --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenEXR/ImfMultiPartInputFile.h @@ -0,0 +1,127 @@ +// +// SPDX-License-Identifier: BSD-3-Clause +// Copyright (c) Contributors to the OpenEXR Project. +// + +#ifndef IMFMULTIPARTINPUTFILE_H_ +#define IMFMULTIPARTINPUTFILE_H_ + +#include "ImfForward.h" + +#include "ImfThreading.h" + +#include "ImfContext.h" + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER + +/// \brief +/// +/// TODO: Document this +class IMF_EXPORT_TYPE MultiPartInputFile +{ +public: + IMF_EXPORT + MultiPartInputFile ( + const char fileName[], + int numThreads = globalThreadCount (), + bool reconstructChunkOffsetTable = true); + + IMF_EXPORT + MultiPartInputFile ( + IStream& is, + int numThreads = globalThreadCount (), + bool reconstructChunkOffsetTable = true); + + //----------------------------------------------------------- + // A constructor that opens the file with the specified name + // and context initialization routines + // Destroying the InputFile object will close the file. + //----------------------------------------------------------- + IMF_EXPORT + MultiPartInputFile ( + const char* filename, + const ContextInitializer& ctxtinit, + int numThreads = globalThreadCount (), + bool autoAddType = true); + + //------------------------ + // Access to the file name + //------------------------ + + IMF_EXPORT + const char* fileName () const; + + //---------------------------------- + // Access to the file format version + //---------------------------------- + + IMF_EXPORT + int version () const; + + // ---------------------- + // Count of number of parts in file + // --------------------- + IMF_EXPORT + int parts () const; + + //---------------------- + // Access to the headers + //---------------------- + + IMF_EXPORT + const Header& header (int partNumber) const; + + // =---------------------------------------- + // Check whether the entire chunk offset + // table for the part is written correctly + // ----------------------------------------- + IMF_EXPORT + bool partComplete (int partNumber) const; + + // ---------------------------------------- + // Flush internal part cache + // Invalidates all 'Part' types previously + // constructed from this file + // Intended for test purposes, but can be + // used to temporarily reduce memory overhead, + // or to switch between types (e.g. TiledInputPart + // or DeepScanLineInputPart to InputPart) + // ---------------------------------------- + + IMF_EXPORT + void flushPartCache (); + +private: + Context _ctxt; + struct Data; + std::shared_ptr _data; + + // + // used internally by 'Part' types to access individual parts of the multipart file + // + // TODO: change these to value / reference semantics (smart ptr) + template IMF_HIDDEN T* getInputPart (int partNumber); + IMF_HIDDEN InputPartData* getPart (int) const; + + IMF_HIDDEN void initialize (); + + friend class InputPart; + friend class ScanLineInputPart; + friend class TiledInputPart; + friend class DeepScanLineInputPart; + friend class DeepTiledInputPart; + + // + // For backward compatibility. + // + + friend class InputFile; + friend class TiledInputFile; + friend class ScanLineInputFile; + friend class DeepScanLineInputFile; + friend class DeepTiledInputFile; +}; + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT + +#endif /* IMFMULTIPARTINPUTFILE_H_ */ diff --git a/third_party/tlRender-install-Release/include/OpenEXR/ImfMultiPartOutputFile.h b/third_party/tlRender-install-Release/include/OpenEXR/ImfMultiPartOutputFile.h new file mode 100644 index 00000000..8d19f36d --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenEXR/ImfMultiPartOutputFile.h @@ -0,0 +1,91 @@ +// +// SPDX-License-Identifier: BSD-3-Clause +// Copyright (c) Contributors to the OpenEXR Project. +// + +#ifndef MULTIPARTOUTPUTFILE_H_ +#define MULTIPARTOUTPUTFILE_H_ + +#include "ImfForward.h" + +#include "ImfGenericOutputFile.h" +#include "ImfThreading.h" + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER + +// +// Class responsible for handling the writing of multipart images. +// +// Note: Certain attributes are 'common' to all parts. Notably: +// * Display Window +// * Pixel Aspect Ratio +// * Time Code +// * Chromaticities +// The first header forms the basis for the set of attributes that are shared +// across the constituent parts. +// +// Parameters +// headers - pointer to array of headers; one for each part of the image file +// parts - count of number of parts +// overrideSharedAttributes - toggle for the handling of shared attributes. +// set false to check for inconsistencies, true +// to copy the values over from the first header. +// numThreads - number of threads that should be used in encoding the data. +// + +class IMF_EXPORT_TYPE MultiPartOutputFile : public GenericOutputFile +{ +public: + IMF_EXPORT + MultiPartOutputFile ( + const char fileName[], + const Header* headers, + int parts, + bool overrideSharedAttributes = false, + int numThreads = globalThreadCount ()); + + IMF_EXPORT + MultiPartOutputFile ( + OStream& os, + const Header* headers, + int parts, + bool overrideSharedAttributes = false, + int numThreads = globalThreadCount ()); + + // + // return number of parts in file + // + IMF_EXPORT + int parts () const; + + // + // return header for part n + // (note: may have additional attributes compared to that passed to constructor) + // + IMF_EXPORT + const Header& header (int n) const; + + IMF_EXPORT + ~MultiPartOutputFile (); + + MultiPartOutputFile (const MultiPartOutputFile& other) = delete; + MultiPartOutputFile& operator= (const MultiPartOutputFile& other) = delete; + MultiPartOutputFile (MultiPartOutputFile&& other) = delete; + MultiPartOutputFile& operator= (MultiPartOutputFile&& other) = delete; + + struct IMF_HIDDEN Data; + +private: + Data* _data; + + template IMF_HIDDEN T* getOutputPart (int partNumber); + + friend class OutputPart; + friend class TiledOutputPart; + friend class DeepScanLineOutputPart; + friend class DeepTiledOutputPart; +}; + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT + +#endif /* MULTIPARTOUTPUTFILE_H_ */ diff --git a/third_party/tlRender-install-Release/include/OpenEXR/ImfMultiView.h b/third_party/tlRender-install-Release/include/OpenEXR/ImfMultiView.h new file mode 100644 index 00000000..7b4c8ccf --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenEXR/ImfMultiView.h @@ -0,0 +1,159 @@ +// +// SPDX-License-Identifier: BSD-3-Clause +// Copyright (c) Weta Digital, Ltd and Contributors to the OpenEXR Project. +// + +#ifndef INCLUDED_IMF_MULTIVIEW_H +#define INCLUDED_IMF_MULTIVIEW_H + +#include "ImfExport.h" +#include "ImfNamespace.h" + +#include "ImfChannelList.h" +#include "ImfStringVectorAttribute.h" + +//----------------------------------------------------------------------------- +// +// Functions related to accessing channels and views in multi-view +// OpenEXR files. +// +// A multi-view image file contains two or more views of the same +// scene, as seen from different viewpoints, for example, a left-eye +// and a right-eye view for stereo displays. Each view has its own +// set of image channels. A naming convention identifies the channels +// that belong to a given view. +// +// A "multiView" attribute in the file header lists the names of the +// views in an image (see ImfStandardAttributes.h), and channel names +// of the form +// +// layer.view.channel +// +// allow channels to be matched with views. +// +// For compatibility with singe-view images, the first view listed in +// the multiView attribute is the "default view", and channels that +// have no periods in their names are considered part of the default +// view. +// +// For example, if a file's multiView attribute lists the views +// "left" and "right", in that order, then "left" is the default +// view. Channels +// +// "R", "left.Z", "diffuse.left.R" +// +// are part of the "left" view; channels +// +// "right.R", "right.Z", "diffuse.right.R" +// +// are part of the "right" view; and channels +// +// "tmp.R", "right.diffuse.R", "diffuse.tmp.R" +// +// belong to no view at all. +// +//----------------------------------------------------------------------------- + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER + +// +// Return the name of the default view given a multi-view string vector, +// that is, return the first element of the string vector. If the string +// vector is empty, return "". +// + +IMF_EXPORT +std::string defaultViewName (const StringVector& multiView); + +// +// Given the name of a channel, return the name of the view to +// which it belongs. Returns the empty string ("") if the channel +// is not a member of any named view. +// + +IMF_EXPORT +std::string +viewFromChannelName (const std::string& channel, const StringVector& multiView); + +// +// Return whether channel1 and channel2 are the same channel but +// viewed in different views. (Return false if either channel +// belongs to no view or if both channels belong to the same view.) +// + +IMF_EXPORT +bool areCounterparts ( + const std::string& channel1, + const std::string& channel2, + const StringVector& multiView); + +// +// Return a list of all channels belonging to view viewName. +// + +IMF_EXPORT +ChannelList channelsInView ( + const std::string& viewName, + const ChannelList& channelList, + const StringVector& multiView); + +// +// Return a list of channels not associated with any view. +// + +IMF_EXPORT +ChannelList channelsInNoView ( + const ChannelList& channelList, const StringVector& multiView); + +// +// Given the name of a channel, return a list of the same channel +// in all views (for example, given X.left.Y return X.left.Y, +// X.right.Y, X.centre.Y, etc.). +// + +IMF_EXPORT +ChannelList channelInAllViews ( + const std::string& channame, + const ChannelList& channelList, + const StringVector& multiView); + +// +// Given the name of a channel in one view, return the corresponding +// channel name for view otherViewName. Return "" if no corresponding +// channel exists in view otherViewName, or if view otherViewName doesn't +// exist. +// + +IMF_EXPORT +std::string channelInOtherView ( + const std::string& channel, + const ChannelList& channelList, + const StringVector& multiView, + const std::string& otherViewName); + +// +// Given a channel name that does not include a view name, insert +// multiView[i] into the channel name at the appropriate location. +// If i is zero and the channel name contains no periods, then do +// not insert the view name. +// + +IMF_EXPORT +std::string insertViewName ( + const std::string& channel, const StringVector& multiView, int i); + +// +// Given a channel name that does may include a view name, return +// string without the view name. If the string does not contain +// the view name, return the string unaltered. +// (Will only remove the viewname if it is in the correct position +// in the string) +// + +IMF_EXPORT +std::string +removeViewName (const std::string& channel, const std::string& view); + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT + +#endif diff --git a/third_party/tlRender-install-Release/include/OpenEXR/ImfName.h b/third_party/tlRender-install-Release/include/OpenEXR/ImfName.h new file mode 100644 index 00000000..5d905c0d --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenEXR/ImfName.h @@ -0,0 +1,149 @@ +// +// SPDX-License-Identifier: BSD-3-Clause +// Copyright (c) Contributors to the OpenEXR Project. +// + +#ifndef INCLUDED_IMF_NAME_H +#define INCLUDED_IMF_NAME_H + +//----------------------------------------------------------------------------- +// +// class ImfName -- a zero-terminated string +// with a fixed, small maximum length +// +//----------------------------------------------------------------------------- + +#include "ImfExport.h" +#include "ImfNamespace.h" + +#include + +#if defined(_MSC_VER) +# pragma warning(push, 0) +# pragma warning(disable : 4996) +#endif + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER + +class IMF_EXPORT_TYPE Name +{ +public: + //------------- + // Constructors + //------------- + + Name (); + Name (const char text[]); + Name (const Name&) = default; + Name (Name&&) = default; + ~Name () = default; + + //-------------------- + // Assignment operator + //-------------------- + + Name& operator= (const Name&) = default; + Name& operator= (Name&&) = default; + Name& operator= (const char text[]); + + //--------------------- + // Access to the string + //--------------------- + + inline const char* text () const { return _text; } + inline const char* operator* () const { return _text; } + + //--------------- + // Maximum length + //--------------- + + static const int SIZE = 256; + static const int MAX_LENGTH = SIZE - 1; + +private: + char _text[SIZE]; +}; + +//----------------- +// Inline functions +//----------------- + +inline Name& +Name::operator= (const char text[]) +{ + strncpy (_text, text, MAX_LENGTH); + return *this; +} + +inline Name::Name () +{ + _text[0] = 0; +} + +inline Name::Name (const char text[]) +{ + *this = text; + _text[MAX_LENGTH] = 0; +} + +inline bool +operator== (const Name& x, const Name& y) +{ + return strcmp (*x, *y) == 0; +} + +inline bool +operator== (const Name& x, const char text[]) +{ + return strcmp (*x, text) == 0; +} + +inline bool +operator== (const char text[], const Name& y) +{ + return strcmp (text, *y) == 0; +} + +inline bool +operator!= (const Name& x, const Name& y) +{ + return !(x == y); +} + +inline bool +operator!= (const Name& x, const char text[]) +{ + return !(x == text); +} + +inline bool +operator!= (const char text[], const Name& y) +{ + return !(text == y); +} + +inline bool +operator< (const Name& x, const Name& y) +{ + return strcmp (*x, *y) < 0; +} + +inline bool +operator< (const Name& x, const char text[]) +{ + return strcmp (*x, text) < 0; +} + +inline bool +operator< (const char text[], const Name& y) +{ + return strcmp (text, *y) < 0; +} + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT + +#if defined(_MSC_VER) +# pragma warning(pop) +#endif + +#endif diff --git a/third_party/tlRender-install-Release/include/OpenEXR/ImfNamespace.h b/third_party/tlRender-install-Release/include/OpenEXR/ImfNamespace.h new file mode 100644 index 00000000..dc2f4e80 --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenEXR/ImfNamespace.h @@ -0,0 +1,90 @@ +// +// SPDX-License-Identifier: BSD-3-Clause +// Copyright (c) Contributors to the OpenEXR Project. +// + +#ifndef INCLUDED_IMFNAMESPACE_H +#define INCLUDED_IMFNAMESPACE_H + +// +// The purpose of this file is to have all of the Imath symbols defined within +// the OPENEXR_IMF_INTERNAL_NAMESPACE namespace rather than the standard Imath +// namespace. Those symbols are made available to client code through the +// OPENEXR_IMF_NAMESPACE in addition to the OPENEXR_IMF_INTERNAL_NAMESPACE. +// +// To ensure source code compatibility, the OPENEXR_IMF_NAMESPACE defaults to +// Imath and then "using namespace OPENEXR_IMF_INTERNAL_NAMESPACE;" brings all +// of the declarations from the OPENEXR_IMF_INTERNAL_NAMESPACE into the +// OPENEXR_IMF_NAMESPACE. +// This means that client code can continue to use syntax like +// Imf::Header, but at link time it will resolve to a +// mangled symbol based on the OPENEXR_IMF_INTERNAL_NAMESPACE. +// +// As an example, if one needed to build against a newer version of Imath and +// have it run alongside an older version in the same application, it is now +// possible to use an internal namespace to prevent collisions between the +// older versions of Imath symbols and the newer ones. To do this, the +// following could be defined at build time: +// +// OPENEXR_IMF_INTERNAL_NAMESPACE = Imf_v2 +// +// This means that declarations inside Imath headers look like this (after +// the preprocessor has done its work): +// +// namespace Imf_v2 { +// ... +// class declarations +// ... +// } +// +// namespace Imf { +// using namespace IMF_NAMESPACE_v2; +// } +// + +// +// Open Source version of this file pulls in the OpenEXRConfig.h file +// for the configure time options. +// +#include "OpenEXRConfig.h" + +#ifndef OPENEXR_IMF_NAMESPACE +# define OPENEXR_IMF_NAMESPACE Imf +#endif + +#ifndef OPENEXR_IMF_INTERNAL_NAMESPACE +# define OPENEXR_IMF_INTERNAL_NAMESPACE OPENEXR_IMF_NAMESPACE +#endif + +// +// We need to be sure that we import the internal namespace into the public one. +// To do this, we use the small bit of code below which initially defines +// OPENEXR_IMF_INTERNAL_NAMESPACE (so it can be referenced) and then defines +// OPENEXR_IMF_NAMESPACE and pulls the internal symbols into the public +// namespace. +// + +namespace OPENEXR_IMF_INTERNAL_NAMESPACE +{} +namespace OPENEXR_IMF_NAMESPACE +{ +using namespace OPENEXR_IMF_INTERNAL_NAMESPACE; +} + +// +// There are identical pairs of HEADER/SOURCE ENTER/EXIT macros so that +// future extension to the namespace mechanism is possible without changing +// project source code. +// + +#define OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER \ + namespace OPENEXR_IMF_INTERNAL_NAMESPACE \ + { +#define OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT } + +#define OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_ENTER \ + namespace OPENEXR_IMF_INTERNAL_NAMESPACE \ + { +#define OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_EXIT } + +#endif /* INCLUDED_IMFNAMESPACE_H */ diff --git a/third_party/tlRender-install-Release/include/OpenEXR/ImfOpaqueAttribute.h b/third_party/tlRender-install-Release/include/OpenEXR/ImfOpaqueAttribute.h new file mode 100644 index 00000000..c24277dd --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenEXR/ImfOpaqueAttribute.h @@ -0,0 +1,78 @@ +// +// SPDX-License-Identifier: BSD-3-Clause +// Copyright (c) Contributors to the OpenEXR Project. +// + +#ifndef INCLUDED_IMF_OPAQUE_ATTRIBUTE_H +#define INCLUDED_IMF_OPAQUE_ATTRIBUTE_H + +//----------------------------------------------------------------------------- +// +// class OpaqueAttribute +// +// When an image file is read, OpqaqueAttribute objects are used +// to hold the values of attributes whose types are not recognized +// by the reading program. OpaqueAttribute objects can be read +// from an image file, copied, and written back to to another image +// file, but their values are inaccessible. +// +//----------------------------------------------------------------------------- + +#include "ImfExport.h" +#include "ImfNamespace.h" + +#include "ImfArray.h" +#include "ImfAttribute.h" + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER + +class IMF_EXPORT_TYPE OpaqueAttribute : public Attribute +{ +public: + //---------------------------- + // Constructors and destructor + //---------------------------- + + IMF_EXPORT OpaqueAttribute (const char typeName[]); + IMF_EXPORT OpaqueAttribute (const char typeName[], + long dataSize, + const void* data); + IMF_EXPORT OpaqueAttribute (const OpaqueAttribute& other); + IMF_EXPORT virtual ~OpaqueAttribute (); + + //------------------------------- + // Get this attribute's type name + //------------------------------- + + IMF_EXPORT virtual const char* typeName () const; + + //------------------------------ + // Make a copy of this attribute + //------------------------------ + + IMF_EXPORT virtual Attribute* copy () const; + + //---------------- + // I/O and copying + //---------------- + + IMF_EXPORT virtual void writeValueTo ( + OPENEXR_IMF_INTERNAL_NAMESPACE::OStream& os, int version) const; + + IMF_EXPORT virtual void readValueFrom ( + OPENEXR_IMF_INTERNAL_NAMESPACE::IStream& is, int size, int version); + + IMF_EXPORT virtual void copyValueFrom (const Attribute& other); + + int dataSize () const { return _dataSize; } + const Array& data () const { return _data; } + +private: + std::string _typeName; + long _dataSize; + Array _data; +}; + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT + +#endif diff --git a/third_party/tlRender-install-Release/include/OpenEXR/ImfOutputFile.h b/third_party/tlRender-install-Release/include/OpenEXR/ImfOutputFile.h new file mode 100644 index 00000000..631483b5 --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenEXR/ImfOutputFile.h @@ -0,0 +1,228 @@ +// +// SPDX-License-Identifier: BSD-3-Clause +// Copyright (c) Contributors to the OpenEXR Project. +// + +#ifndef INCLUDED_IMF_OUTPUT_FILE_H +#define INCLUDED_IMF_OUTPUT_FILE_H + +//----------------------------------------------------------------------------- +// +// class OutputFile +// +//----------------------------------------------------------------------------- + +#include "ImfForward.h" + +#include "ImfGenericOutputFile.h" +#include "ImfThreading.h" + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER + +class IMF_EXPORT_TYPE OutputFile : public GenericOutputFile +{ +public: + //----------------------------------------------------------- + // Constructor -- opens the file and writes the file header. + // The file header is also copied into the OutputFile object, + // and can later be accessed via the header() method. + // Destroying this OutputFile object automatically closes + // the file. + // + // numThreads determines the number of threads that will be + // used to write the file (see ImfThreading.h). + //----------------------------------------------------------- + + IMF_EXPORT + OutputFile ( + const char fileName[], + const Header& header, + int numThreads = globalThreadCount ()); + + //------------------------------------------------------------ + // Constructor -- attaches the new OutputFile object to a file + // that has already been opened, and writes the file header. + // The file header is also copied into the OutputFile object, + // and can later be accessed via the header() method. + // Destroying this OutputFile object does not automatically + // close the file. + // + // numThreads determines the number of threads that will be + // used to write the file (see ImfThreading.h). + //------------------------------------------------------------ + + IMF_EXPORT + OutputFile ( + OPENEXR_IMF_INTERNAL_NAMESPACE::OStream& os, + const Header& header, + int numThreads = globalThreadCount ()); + + //------------------------------------------------- + // Destructor + // + // Destroying the OutputFile object before writing + // all scan lines within the data window results in + // an incomplete file. + //------------------------------------------------- + + IMF_EXPORT + virtual ~OutputFile (); + + //------------------------ + // Access to the file name + //------------------------ + + IMF_EXPORT + const char* fileName () const; + + //-------------------------- + // Access to the file header + //-------------------------- + + IMF_EXPORT + const Header& header () const; + + //------------------------------------------------------- + // Set the current frame buffer -- copies the FrameBuffer + // object into the OutputFile object. + // + // The current frame buffer is the source of the pixel + // data written to the file. The current frame buffer + // must be set at least once before writePixels() is + // called. The current frame buffer can be changed + // after each call to writePixels. + //------------------------------------------------------- + + IMF_EXPORT + void setFrameBuffer (const FrameBuffer& frameBuffer); + + //----------------------------------- + // Access to the current frame buffer + //----------------------------------- + + IMF_EXPORT + const FrameBuffer& frameBuffer () const; + + //------------------------------------------------------------------- + // Write pixel data: + // + // writePixels(n) retrieves the next n scan lines worth of data from + // the current frame buffer, starting with the scan line indicated by + // currentScanLine(), and stores the data in the output file, and + // progressing in the direction indicated by header.lineOrder(). + // + // To produce a complete and correct file, exactly m scan lines must + // be written, where m is equal to + // header().dataWindow().max.y - header().dataWindow().min.y + 1. + //------------------------------------------------------------------- + + IMF_EXPORT + void writePixels (int numScanLines = 1); + + //------------------------------------------------------------------ + // Access to the current scan line: + // + // currentScanLine() returns the y coordinate of the first scan line + // that will be read from the current frame buffer during the next + // call to writePixels(). + // + // If header.lineOrder() == INCREASING_Y: + // + // The current scan line before the first call to writePixels() + // is header().dataWindow().min.y. After writing each scan line, + // the current scan line is incremented by 1. + // + // If header.lineOrder() == DECREASING_Y: + // + // The current scan line before the first call to writePixels() + // is header().dataWindow().max.y. After writing each scan line, + // the current scan line is decremented by 1. + // + //------------------------------------------------------------------ + + IMF_EXPORT + int currentScanLine () const; + + //-------------------------------------------------------------- + // Shortcut to copy all pixels from an InputFile into this file, + // without uncompressing and then recompressing the pixel data. + // This file's header must be compatible with the InputFile's + // header: The two header's "dataWindow", "compression", + // "lineOrder" and "channels" attributes must be the same. + //-------------------------------------------------------------- + + IMF_EXPORT + void copyPixels (InputFile& in); + + //------------------------------------------------------------- + // Shortcut to copy all pixels from an InputPart into this file + // - equivalent to copyPixel(InputFile &in) but for multipart files + //--------------------------------------------------------------- + + IMF_EXPORT + void copyPixels (InputPart& in); + + //-------------------------------------------------------------- + // Updating the preview image: + // + // updatePreviewImage() supplies a new set of pixels for the + // preview image attribute in the file's header. If the header + // does not contain a preview image, updatePreviewImage() throws + // an IEX_NAMESPACE::LogicExc. + // + // Note: updatePreviewImage() is necessary because images are + // often stored in a file incrementally, a few scan lines at a + // time, while the image is being generated. Since the preview + // image is an attribute in the file's header, it gets stored in + // the file as soon as the file is opened, but we may not know + // what the preview image should look like until we have written + // the last scan line of the main image. + // + //-------------------------------------------------------------- + + IMF_EXPORT + void updatePreviewImage (const PreviewRgba newPixels[]); + + //--------------------------------------------------------- + // Break a scan line -- for testing and debugging only: + // + // breakScanLine(y,p,n,c) introduces an error into the + // output file by writing n copies of character c, starting + // p bytes from the beginning of the pixel data block that + // contains scan line y. + // + // Warning: Calling this function usually results in a + // broken image file. The file or parts of it may not + // be readable, or the file may contain bad data. + // + //--------------------------------------------------------- + + IMF_EXPORT + void breakScanLine (int y, int offset, int length, char c); + + struct IMF_HIDDEN Data; + +private: + //------------------------------------------------------------ + // Constructor -- attaches the OutputStreamMutex to the + // given one from MultiPartOutputFile. Set the previewPosition + // and lineOffsetsPosition which have been acquired from + // the constructor of MultiPartOutputFile as well. + //------------------------------------------------------------ + IMF_HIDDEN OutputFile (const OutputPartData* part); + + OutputFile (const OutputFile&) = delete; + OutputFile& operator= (const OutputFile&) = delete; + OutputFile (OutputFile&&) = delete; + OutputFile& operator= (OutputFile&&) = delete; + + void initialize (const Header& header); + + Data* _data; + + friend class MultiPartOutputFile; +}; + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT + +#endif diff --git a/third_party/tlRender-install-Release/include/OpenEXR/ImfOutputPart.h b/third_party/tlRender-install-Release/include/OpenEXR/ImfOutputPart.h new file mode 100644 index 00000000..e02e73c1 --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenEXR/ImfOutputPart.h @@ -0,0 +1,53 @@ +// +// SPDX-License-Identifier: BSD-3-Clause +// Copyright (c) Contributors to the OpenEXR Project. +// + +#ifndef IMFOUTPUTPART_H_ +#define IMFOUTPUTPART_H_ + +#include "ImfForward.h" + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER + +//--------------------------------------------------------------------- +// class OutputPart: +// +// Same interface as OutputFile. Please refer to OutputFile. +//--------------------------------------------------------------------- + +class IMF_EXPORT_TYPE OutputPart +{ +public: + IMF_EXPORT + OutputPart (MultiPartOutputFile& multiPartFile, int partNumber); + + IMF_EXPORT + const char* fileName () const; + IMF_EXPORT + const Header& header () const; + IMF_EXPORT + void setFrameBuffer (const FrameBuffer& frameBuffer); + IMF_EXPORT + const FrameBuffer& frameBuffer () const; + IMF_EXPORT + void writePixels (int numScanLines = 1); + IMF_EXPORT + int currentScanLine () const; + IMF_EXPORT + void copyPixels (InputFile& in); + IMF_EXPORT + void copyPixels (InputPart& in); + + IMF_EXPORT + void updatePreviewImage (const PreviewRgba newPixels[]); + IMF_EXPORT + void breakScanLine (int y, int offset, int length, char c); + +private: + OutputFile* file; +}; + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT + +#endif /* IMFOUTPUTPART_H_ */ diff --git a/third_party/tlRender-install-Release/include/OpenEXR/ImfPartHelper.h b/third_party/tlRender-install-Release/include/OpenEXR/ImfPartHelper.h new file mode 100644 index 00000000..641ca8c9 --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenEXR/ImfPartHelper.h @@ -0,0 +1,227 @@ +// +// SPDX-License-Identifier: BSD-3-Clause +// Copyright (c) Weta Digital, Ltd and Contributors to the OpenEXR Project. +// + +#ifndef INCLUDED_IMF_PARTHELPER_H +#define INCLUDED_IMF_PARTHELPER_H + +//----------------------------------------------------------------------------- +// +// Functions to help split channels into separate parts: provide a list of +// channels, with desired views. call SplitChannels to assign a part to each +// layer, or correct the name of the channel. +// Also can enumerate the parts in a file and list which parts channels are in +// +// This is a good way to offer a 'create Multipart file' checkbox to the user in a +// write dialog box: Populate a list of MultiViewChannelName objects, +// call SplitChannels with whether single or multipart files are required. +// Then write the number of parts it specifies, using internal_name for the channel +// names in the ChannelList and FrameBuffer objects. There should be no need +// for different codepaths for single part and multipart files +// +// Similarly, on reading a file as a MultiPartInputFile, use GetChannelsInMultiPartFile to +// enumerate all channels in the file, using internal_name in FrameBuffer objects +// to read the channel +// +// +//----------------------------------------------------------------------------- + +#include "ImfChannelList.h" +#include "ImfExport.h" +#include "ImfForward.h" +#include "ImfMultiPartInputFile.h" +#include "ImfMultiView.h" +#include "ImfNamespace.h" +#include "ImfStandardAttributes.h" +#include "ImfStringVectorAttribute.h" + +#include +#include +#include + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER + +struct MultiViewChannelName +{ + +public: + std::string name; ///< name of channel + std::string view; ///< view for channel + + int part_number; ///< part number: updated by SplitChannels + std::string + internal_name; ///< name used in headers: in singlepart mode, may contain viewname + + //return layer for this channel, or "" if no layer + std::string getLayer () const + { + std::size_t q = name.rfind ('.'); + if (q == name.npos) { return ""; } + return name.substr (0, q); + } + + std::string getSuffix () const + { + std::size_t q = name.rfind ('.'); + if (q == name.npos) { return name; } + return name.substr (q + 1); + } +}; + +// +///\brief assigns individual channels to different parts based on their layer and view name +/// input is an array, list, vector etc of MultiViewChannelName objects +/// on entry, each MultiViewChannelName name/view must be set (view can be empty if not multiview) +/// +/// if singlepart set, then on exit part_number will be zero, and internal_name will have view name inserted +/// otherwise, each channel will be assigned to a different part based on its layer name and view name +/// +/// @param begin pointer to first MultiViewChannelName item +/// @param end pointer to end of MultiViewChannelName item array +/// @return total number of parts required +// + +template +inline int +SplitChannels ( + const T& begin, + const T& end, + bool multipart = true, + const std::string& heroView = std::string ()) +{ + if (!multipart) + { + for (T i = begin; i != end; i++) + { + i->part_number = 0; + + //does this have a view name set? + if (i->view == "") { i->internal_name = i->name; } + else + { + + std::string lname = i->getLayer (); + + // no layer, only non-hero views get view name in layer name + + if (lname == "") + { + if (i->view == heroView) { i->internal_name = i->name; } + else { i->internal_name = i->view + "." + i->name; } + } + else + { + i->internal_name = + lname + "." + i->view + "." + i->getSuffix (); + } + } + } + // single part created + return 1; + } + else + { + // step 1: extract individual layers and parts + // for each layer, enumerate which views are active + + std::map> viewsInLayers; + for (T i = begin; i != end; i++) + { + viewsInLayers[i->getLayer ()].insert (i->view); + } + + // step 2: assign a part number to each layer/view + + std::map, int> layerToPart; + + int partCount = 0; + + for (std::map>::const_iterator + layer = viewsInLayers.begin (); + layer != viewsInLayers.end (); + layer++) + { + // if this layer has a heroView, insert that first + bool layer_has_hero = + layer->second.find (heroView) != layer->second.end (); + if (layer_has_hero) + { + layerToPart[std::make_pair (layer->first, heroView)] = + partCount++; + } + + // insert other layers which aren't the hero view + for (std::set::const_iterator view = + layer->second.begin (); + view != layer->second.end (); + view++) + { + if (*view != heroView) + { + layerToPart[std::make_pair (layer->first, *view)] = + partCount++; + } + } + } + + // step 3: update part number of each provided channel + + for (T i = begin; i != end; i++) + { + i->internal_name = i->name; + i->part_number = + layerToPart[std::make_pair (i->getLayer (), i->view)]; + } + + // return number of parts created + return partCount; + } +} + +// +// populate the chans vector with a list of channels in the file +// and their corresponding part number +// +template +inline void +GetChannelsInMultiPartFile (const MultiPartInputFile& file, T& chans) +{ + bool has_multiview = false; + StringVector mview; + if (file.parts () == 1) + { + if (hasMultiView (file.header (0))) + { + mview = multiView (file.header (0)); + has_multiview = true; + } + } + + for (int p = 0; p < file.parts (); p++) + { + const ChannelList& c = file.header (p).channels (); + + std::string view = ""; + if (file.header (p).hasView ()) { view = file.header (p).view (); } + for (ChannelList::ConstIterator i = c.begin (); i != c.end (); i++) + { + MultiViewChannelName m; + m.name = std::string (i.name ()); + m.internal_name = m.name; + + if (has_multiview) + { + m.view = viewFromChannelName (m.name, mview); + m.name = removeViewName (m.internal_name, m.view); + } + else { m.view = view; } + m.part_number = p; + chans.push_back (m); + } + } +} + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT + +#endif diff --git a/third_party/tlRender-install-Release/include/OpenEXR/ImfPartType.h b/third_party/tlRender-install-Release/include/OpenEXR/ImfPartType.h new file mode 100644 index 00000000..6e1ee84e --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenEXR/ImfPartType.h @@ -0,0 +1,31 @@ +// +// SPDX-License-Identifier: BSD-3-Clause +// Copyright (c) Contributors to the OpenEXR Project. +// + +#ifndef IMFPARTTYPE_H_ +#define IMFPARTTYPE_H_ + +#include "ImfExport.h" +#include "ImfNamespace.h" + +#include + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER + +static const std::string SCANLINEIMAGE = "scanlineimage"; +static const std::string TILEDIMAGE = "tiledimage"; +static const std::string DEEPSCANLINE = "deepscanline"; +static const std::string DEEPTILE = "deeptile"; + +IMF_EXPORT bool isImage (const std::string& name); + +IMF_EXPORT bool isTiled (const std::string& name); + +IMF_EXPORT bool isDeepData (const std::string& name); + +IMF_EXPORT bool isSupportedType (const std::string& name); + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT + +#endif /* IMFPARTTYPE_H_ */ diff --git a/third_party/tlRender-install-Release/include/OpenEXR/ImfPixelType.h b/third_party/tlRender-install-Release/include/OpenEXR/ImfPixelType.h new file mode 100644 index 00000000..96a2f25c --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenEXR/ImfPixelType.h @@ -0,0 +1,31 @@ +// +// SPDX-License-Identifier: BSD-3-Clause +// Copyright (c) Contributors to the OpenEXR Project. +// + +#ifndef INCLUDED_IMF_PIXEL_TYPE_H +#define INCLUDED_IMF_PIXEL_TYPE_H + +//----------------------------------------------------------------------------- +// +// enum PixelType +// +//----------------------------------------------------------------------------- + +#include "ImfExport.h" +#include "ImfNamespace.h" + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER + +enum IMF_EXPORT_ENUM PixelType +{ + UINT = 0, // unsigned int (32 bit) + HALF = 1, // half (16 bit floating point) + FLOAT = 2, // float (32 bit floating point) + + NUM_PIXELTYPES // number of different pixel types +}; + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT + +#endif diff --git a/third_party/tlRender-install-Release/include/OpenEXR/ImfPreviewImage.h b/third_party/tlRender-install-Release/include/OpenEXR/ImfPreviewImage.h new file mode 100644 index 00000000..d470c923 --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenEXR/ImfPreviewImage.h @@ -0,0 +1,112 @@ +// +// SPDX-License-Identifier: BSD-3-Clause +// Copyright (c) Contributors to the OpenEXR Project. +// + +#ifndef INCLUDED_IMF_PREVIEW_IMAGE_H +#define INCLUDED_IMF_PREVIEW_IMAGE_H + +#include "ImfForward.h" + +//----------------------------------------------------------------------------- +// +// class PreviewImage -- a usually small, low-dynamic range image, +// that is intended to be stored in an image file's header. +// +// struct PreviewRgba -- holds the value of a PreviewImage pixel. +// +//----------------------------------------------------------------------------- + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER + +struct IMF_EXPORT_TYPE PreviewRgba +{ + unsigned char r; // Red, green and blue components of + unsigned char g; // the pixel's color; intensity is + unsigned char b; // proportional to pow (x/255, 2.2), + // where x is r, g, or b. + + unsigned char a; // The pixel's alpha; 0 == transparent, + // 255 == opaque. + + PreviewRgba ( + unsigned char r = 0, + unsigned char g = 0, + unsigned char b = 0, + unsigned char a = 255) + : r (r), g (g), b (b), a (a) + {} + + bool operator==(const PreviewRgba& other) const + { + return r == other.r && g == other.g && b == other.b && a == other.a; + } +}; + +class IMF_EXPORT_TYPE PreviewImage +{ +public: + //-------------------------------------------------------------------- + // Constructor: + // + // PreviewImage(w,h,p) constructs a preview image with w by h pixels + // whose initial values are specified in pixel array p. The x and y + // coordinates of the pixels in p go from 0 to w-1, and from 0 to h-1. + // The pixel with coordinates (x, y) is at address p + y*w + x. + // Pixel (0, 0) is in the upper left corner of the preview image. + // If p is zero, the pixels in the preview image are initialized with + // (r = 0, b = 0, g = 0, a = 255). + // + //-------------------------------------------------------------------- + + IMF_EXPORT + PreviewImage ( + unsigned int width = 0, + unsigned int height = 0, + const PreviewRgba pixels[] = 0); + + //----------------------------------------------------- + // Copy constructor, destructor and assignment operator + //----------------------------------------------------- + + IMF_EXPORT + PreviewImage (const PreviewImage& other); + IMF_EXPORT + ~PreviewImage (); + + IMF_EXPORT + PreviewImage& operator= (const PreviewImage& other); + + //----------------------------------------------- + // Access to width, height and to the pixel array + //----------------------------------------------- + + inline unsigned int width () const { return _width; } + inline unsigned int height () const { return _height; } + + inline PreviewRgba* pixels () { return _pixels; } + inline const PreviewRgba* pixels () const { return _pixels; } + + //---------------------------- + // Access to individual pixels + //---------------------------- + + inline PreviewRgba& pixel (unsigned int x, unsigned int y) + { + return _pixels[y * _width + x]; + } + + inline const PreviewRgba& pixel (unsigned int x, unsigned int y) const + { + return _pixels[y * _width + x]; + } + +private: + unsigned int _width; + unsigned int _height; + PreviewRgba* _pixels; +}; + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT + +#endif diff --git a/third_party/tlRender-install-Release/include/OpenEXR/ImfPreviewImageAttribute.h b/third_party/tlRender-install-Release/include/OpenEXR/ImfPreviewImageAttribute.h new file mode 100644 index 00000000..bc29418a --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenEXR/ImfPreviewImageAttribute.h @@ -0,0 +1,33 @@ +// +// SPDX-License-Identifier: BSD-3-Clause +// Copyright (c) Contributors to the OpenEXR Project. +// + +#ifndef INCLUDED_IMF_PREVIEW_IMAGE_ATTRIBUTE_H +#define INCLUDED_IMF_PREVIEW_IMAGE_ATTRIBUTE_H + +//----------------------------------------------------------------------------- +// +// class PreviewImageAttribute +// +//----------------------------------------------------------------------------- + +#include "ImfExport.h" +#include "ImfNamespace.h" + +#include "ImfAttribute.h" +#include "ImfPreviewImage.h" + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER + +typedef TypedAttribute + PreviewImageAttribute; + +#ifndef COMPILING_IMF_PREVIEW_IMAGE_ATTRIBUTE +extern template class IMF_EXPORT_EXTERN_TEMPLATE + TypedAttribute; +#endif + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT + +#endif diff --git a/third_party/tlRender-install-Release/include/OpenEXR/ImfRational.h b/third_party/tlRender-install-Release/include/OpenEXR/ImfRational.h new file mode 100644 index 00000000..098788f3 --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenEXR/ImfRational.h @@ -0,0 +1,62 @@ +// +// SPDX-License-Identifier: BSD-3-Clause +// Copyright (c) Contributors to the OpenEXR Project. +// + +#ifndef INCLUDED_IMF_RATIONAL_H +#define INCLUDED_IMF_RATIONAL_H + +#include "ImfExport.h" +#include "ImfNamespace.h" + +//----------------------------------------------------------------------------- +// +// Rational numbers +// +// A rational number is represented as pair of integers, n and d. +// The value of of the rational number is +// +// n/d for d > 0 +// positive infinity for n > 0, d == 0 +// negative infinity for n < 0, d == 0 +// not a number (NaN) for n == 0, d == 0 +// +//----------------------------------------------------------------------------- + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER + +class IMF_EXPORT_TYPE Rational +{ +public: + int n; // numerator + unsigned int d; // denominator + + //---------------------------------------- + // Default constructor, sets value to zero + //---------------------------------------- + + Rational () : n (0), d (1) {} + + //------------------------------------- + // Constructor, explicitly sets n and d + //------------------------------------- + + Rational (int n, int d) : n (n), d (d) {} + + //---------------------------- + // Constructor, approximates x + //---------------------------- + + IMF_EXPORT + explicit Rational (double x); + + //--------------------------------- + // Approximate conversion to double + //--------------------------------- + + operator double () const { return double (n) / double (d); } +}; + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT + +#endif diff --git a/third_party/tlRender-install-Release/include/OpenEXR/ImfRationalAttribute.h b/third_party/tlRender-install-Release/include/OpenEXR/ImfRationalAttribute.h new file mode 100644 index 00000000..f2103c65 --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenEXR/ImfRationalAttribute.h @@ -0,0 +1,30 @@ +// +// SPDX-License-Identifier: BSD-3-Clause +// Copyright (c) Contributors to the OpenEXR Project. +// + +#ifndef INCLUDED_IMF_RATIONAL_ATTRIBUTE_H +#define INCLUDED_IMF_RATIONAL_ATTRIBUTE_H + +//----------------------------------------------------------------------------- +// +// class RationalAttribute +// +//----------------------------------------------------------------------------- + +#include "ImfAttribute.h" +#include "ImfRational.h" + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER + +typedef TypedAttribute + RationalAttribute; + +#ifndef COMPILING_IMF_RATIONAL_ATTRIBUTE +extern template class IMF_EXPORT_EXTERN_TEMPLATE + TypedAttribute; +#endif + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT + +#endif diff --git a/third_party/tlRender-install-Release/include/OpenEXR/ImfRgba.h b/third_party/tlRender-install-Release/include/OpenEXR/ImfRgba.h new file mode 100644 index 00000000..3ecb1630 --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenEXR/ImfRgba.h @@ -0,0 +1,64 @@ +// +// SPDX-License-Identifier: BSD-3-Clause +// Copyright (c) Contributors to the OpenEXR Project. +// + +#ifndef INCLUDED_IMF_RGBA_H +#define INCLUDED_IMF_RGBA_H + +//----------------------------------------------------------------------------- +// +// class Rgba +// +//----------------------------------------------------------------------------- + +#include "ImfExport.h" +#include "ImfNamespace.h" + +#include + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER + +// +// RGBA pixel +// + +struct Rgba +{ + half r; + half g; + half b; + half a; + + Rgba () {} + Rgba (half r, half g, half b, half a = 1.f) : r (r), g (g), b (b), a (a) {} +}; + +// +// Channels in an RGBA file +// + +enum IMF_EXPORT_ENUM RgbaChannels +{ + WRITE_R = 0x01, // Red + WRITE_G = 0x02, // Green + WRITE_B = 0x04, // Blue + WRITE_A = 0x08, // Alpha + + WRITE_Y = 0x10, // Luminance, for black-and-white images, + // or in combination with chroma + + WRITE_C = 0x20, // Chroma (two subsampled channels, RY and BY, + // supported only for scanline-based files) + + WRITE_RGB = 0x07, // Red, green, blue + WRITE_RGBA = 0x0f, // Red, green, blue, alpha + + WRITE_YC = 0x30, // Luminance, chroma + WRITE_YA = 0x18, // Luminance, alpha + WRITE_YCA = 0x38 // Luminance, chroma, alpha +}; + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT + +#endif diff --git a/third_party/tlRender-install-Release/include/OpenEXR/ImfRgbaFile.h b/third_party/tlRender-install-Release/include/OpenEXR/ImfRgbaFile.h new file mode 100644 index 00000000..c5e620c1 --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenEXR/ImfRgbaFile.h @@ -0,0 +1,454 @@ +// +// SPDX-License-Identifier: BSD-3-Clause +// Copyright (c) Contributors to the OpenEXR Project. +// + +#ifndef INCLUDED_IMF_RGBA_FILE_H +#define INCLUDED_IMF_RGBA_FILE_H + +//----------------------------------------------------------------------------- +// +// Simplified RGBA image I/O +// +// class RgbaOutputFile +// class RgbaInputFile +// +//----------------------------------------------------------------------------- + +#include "ImfExport.h" +#include "ImfNamespace.h" + +#include "ImfFrameBuffer.h" +#include "ImfHeader.h" +#include "ImfRgba.h" + +#include "ImfThreading.h" +#include +#include +#include +#include + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER + +//------------------------------------------------------- +// Utility to compute the origin-based pointer address +// +// With large offsets for the data window, the naive code +// can wrap around, especially on 32-bit machines. +// This can be used to avoid that +//------------------------------------------------------- + +inline const Rgba* +ComputeBasePointer ( + const Rgba* ptr, + const IMATH_NAMESPACE::V2i& origin, + int64_t w, + size_t xStride = 1, + size_t yStride = 0) +{ + if (yStride == 0) yStride = w; + int64_t offx = static_cast (origin.x); + offx *= xStride; + int64_t offy = static_cast (origin.y); + offy *= yStride; + return ptr - offx - offy; +} + +inline const Rgba* +ComputeBasePointer (const Rgba* ptr, const IMATH_NAMESPACE::Box2i& dataWindow) +{ + return ComputeBasePointer ( + ptr, + dataWindow.min, + static_cast (dataWindow.max.x) - + static_cast (dataWindow.min.x) + 1); +} + +inline Rgba* +ComputeBasePointer ( + Rgba* ptr, + const IMATH_NAMESPACE::V2i& origin, + int64_t w, + size_t xStride = 1, + size_t yStride = 0) +{ + if (yStride == 0) yStride = w; + int64_t offx = static_cast (origin.x); + offx *= xStride; + int64_t offy = static_cast (origin.y); + offy *= yStride; + return ptr - offx - offy; +} + +inline Rgba* +ComputeBasePointer (Rgba* ptr, const IMATH_NAMESPACE::Box2i& dataWindow) +{ + return ComputeBasePointer ( + ptr, + dataWindow.min, + static_cast (dataWindow.max.x) - + static_cast (dataWindow.min.x) + 1); +} + +// +// RGBA output file. +// + +class IMF_EXPORT_TYPE RgbaOutputFile +{ +public: + //--------------------------------------------------- + // Constructor -- header is constructed by the caller + //--------------------------------------------------- + + IMF_EXPORT + RgbaOutputFile ( + const char name[], + const Header& header, + RgbaChannels rgbaChannels = WRITE_RGBA, + int numThreads = globalThreadCount ()); + + //---------------------------------------------------- + // Constructor -- header is constructed by the caller, + // file is opened by the caller, destructor will not + // automatically close the file. + //---------------------------------------------------- + + IMF_EXPORT + RgbaOutputFile ( + OPENEXR_IMF_INTERNAL_NAMESPACE::OStream& os, + const Header& header, + RgbaChannels rgbaChannels = WRITE_RGBA, + int numThreads = globalThreadCount ()); + + //---------------------------------------------------------------- + // Constructor -- header data are explicitly specified as function + // call arguments (empty dataWindow means "same as displayWindow") + //---------------------------------------------------------------- + + IMF_EXPORT + RgbaOutputFile ( + const char name[], + const IMATH_NAMESPACE::Box2i& displayWindow, + const IMATH_NAMESPACE::Box2i& dataWindow = IMATH_NAMESPACE::Box2i (), + RgbaChannels rgbaChannels = WRITE_RGBA, + float pixelAspectRatio = 1, + const IMATH_NAMESPACE::V2f screenWindowCenter = + IMATH_NAMESPACE::V2f (0, 0), + float screenWindowWidth = 1, + LineOrder lineOrder = INCREASING_Y, + Compression compression = PIZ_COMPRESSION, + int numThreads = globalThreadCount ()); + + //----------------------------------------------- + // Constructor -- like the previous one, but both + // the display window and the data window are + // Box2i (V2i (0, 0), V2i (width - 1, height -1)) + //----------------------------------------------- + + IMF_EXPORT + RgbaOutputFile ( + const char name[], + int width, + int height, + RgbaChannels rgbaChannels = WRITE_RGBA, + float pixelAspectRatio = 1, + const IMATH_NAMESPACE::V2f screenWindowCenter = + IMATH_NAMESPACE::V2f (0, 0), + float screenWindowWidth = 1, + LineOrder lineOrder = INCREASING_Y, + Compression compression = PIZ_COMPRESSION, + int numThreads = globalThreadCount ()); + + //----------- + // Destructor + //----------- + + IMF_EXPORT + virtual ~RgbaOutputFile (); + + //------------------------------------------------ + // Define a frame buffer as the pixel data source: + // Pixel (x, y) is at address + // + // base + x * xStride + y * yStride + // + //------------------------------------------------ + + IMF_EXPORT + void setFrameBuffer (const Rgba* base, size_t xStride, size_t yStride); + + //--------------------------------------------- + // Write pixel data (see class Imf::OutputFile) + //--------------------------------------------- + + IMF_EXPORT + void writePixels (int numScanLines = 1); + IMF_EXPORT + int currentScanLine () const; + + //-------------------------- + // Access to the file header + //-------------------------- + + IMF_EXPORT + const Header& header () const; + IMF_EXPORT + const FrameBuffer& frameBuffer () const; + IMF_EXPORT + const IMATH_NAMESPACE::Box2i& displayWindow () const; + IMF_EXPORT + const IMATH_NAMESPACE::Box2i& dataWindow () const; + IMF_EXPORT + float pixelAspectRatio () const; + IMF_EXPORT + const IMATH_NAMESPACE::V2f screenWindowCenter () const; + IMF_EXPORT + float screenWindowWidth () const; + IMF_EXPORT + LineOrder lineOrder () const; + IMF_EXPORT + Compression compression () const; + IMF_EXPORT + RgbaChannels channels () const; + + // -------------------------------------------------------------------- + // Update the preview image (see Imf::OutputFile::updatePreviewImage()) + // -------------------------------------------------------------------- + + IMF_EXPORT + void updatePreviewImage (const PreviewRgba[]); + + //----------------------------------------------------------------------- + // Rounding control for luminance/chroma images: + // + // If the output file contains luminance and chroma channels (WRITE_YC + // or WRITE_YCA), then the significands of the luminance and + // chroma values are rounded to roundY and roundC bits respectively (see + // function half::round()). Rounding improves compression with minimal + // image degradation, usually much less than the degradation caused by + // chroma subsampling. By default, roundY is 7, and roundC is 5. + // + // If the output file contains RGB channels or a luminance channel, + // without chroma, then no rounding is performed. + //----------------------------------------------------------------------- + + IMF_EXPORT + void setYCRounding (unsigned int roundY, unsigned int roundC); + + //---------------------------------------------------- + // Break a scan line -- for testing and debugging only + // (see Imf::OutputFile::updatePreviewImage() + // + // Warning: Calling this function usually results in a + // broken image file. The file or parts of it may not + // be readable, or the file may contain bad data. + // + //---------------------------------------------------- + + IMF_EXPORT + void breakScanLine (int y, int offset, int length, char c); + +private: + RgbaOutputFile (const RgbaOutputFile&) = delete; + RgbaOutputFile& operator= (const RgbaOutputFile&) = delete; + RgbaOutputFile (RgbaOutputFile&&) = delete; + RgbaOutputFile& operator= (RgbaOutputFile&&) = delete; + + class IMF_HIDDEN ToYca; + + OutputFile* _outputFile; + ToYca* _toYca; +}; + +// +// RGBA input file +// + +class IMF_EXPORT_TYPE RgbaInputFile +{ +public: + //------------------------------------------------------- + // Constructor -- opens the file with the specified name, + // destructor will automatically close the file. + //------------------------------------------------------- + + IMF_EXPORT + RgbaInputFile (const char name[], int numThreads = globalThreadCount ()); + + //----------------------------------------------------------- + // Constructor -- attaches the new RgbaInputFile object to a + // file that has already been opened by the caller. + // Destroying the RgbaInputFile object will not automatically + // close the file. + //----------------------------------------------------------- + + IMF_EXPORT + RgbaInputFile ( + OPENEXR_IMF_INTERNAL_NAMESPACE::IStream& is, + int numThreads = globalThreadCount ()); + + //-------------------------------------------------------------- + // Constructors -- the same as the previous two, but the names + // of the red, green, blue, alpha, luminance and chroma channels + // are expected to be layerName.R, layerName.G, etc. + //-------------------------------------------------------------- + + IMF_EXPORT + RgbaInputFile ( + const char name[], + const std::string& layerName, + int numThreads = globalThreadCount ()); + + IMF_EXPORT + RgbaInputFile ( + OPENEXR_IMF_INTERNAL_NAMESPACE::IStream& is, + const std::string& layerName, + int numThreads = globalThreadCount ()); + + //-------------------------------------------------------------- + // Constructors -- the same as the previous, but the specified + // part is opened instead of the first (or only) part within the file + //-------------------------------------------------------------- + + IMF_EXPORT + RgbaInputFile ( + int partNumber, + const char name[], + int numThreads = globalThreadCount ()); + + IMF_EXPORT + RgbaInputFile ( + int partNumber, + const char name[], + const std::string& layerName, + int numThreads = globalThreadCount ()); + + IMF_EXPORT + RgbaInputFile ( + int partNumber, + OPENEXR_IMF_INTERNAL_NAMESPACE::IStream& is, + int numThreads = globalThreadCount ()); + + IMF_EXPORT + RgbaInputFile ( + int partNumber, + OPENEXR_IMF_INTERNAL_NAMESPACE::IStream& is, + const std::string& layerName, + int numThreads = globalThreadCount ()); + + //----------- + // Destructor + //----------- + + IMF_EXPORT + virtual ~RgbaInputFile (); + + //----------------------------------------------------- + // Define a frame buffer as the pixel data destination: + // Pixel (x, y) is at address + // + // base + x * xStride + y * yStride + // + //----------------------------------------------------- + + IMF_EXPORT + void setFrameBuffer (Rgba* base, size_t xStride, size_t yStride); + + //---------------------------------------------------------------- + // Switch to a different layer within the current part + // + // subsequent calls to readPixels() + // will read channels layerName.R, layerName.G, etc. + // After each call to setLayerName(), setFrameBuffer() must be + // called at least once before the next call to readPixels(). + //---------------------------------------------------------------- + + IMF_EXPORT + void setLayerName (const std::string& layerName); + + //------------------------------- + // Return number of parts in file + //------------------------------- + IMF_EXPORT + int parts () const; + + //---------------------------------------------------------------- + // Switch to a different part -- subsequent calls to readPixels() + // will read channels from given part + // After each call to setPart() or setPartAndLayer(), setFrameBuffer() must be + // called at least once before the next call to readPixels(). + //---------------------------------------------------------------- + + IMF_EXPORT + void setPart (int part); + + //-------------------------- + // Equivalent to 'setPart(part) ; setLayerName(layerName);' + //---------------------------- + IMF_EXPORT + void setPartAndLayer (int part, const std::string& layerName); + + //------------------------------------------- + // Read pixel data (see class Imf::InputFile) + //------------------------------------------- + + IMF_EXPORT + void readPixels (int scanLine1, int scanLine2); + + IMF_EXPORT + void readPixels (int scanLine); + + //-------------------------- + // Access to the file header + //-------------------------- + + IMF_EXPORT + const Header& header () const; + IMF_EXPORT + const FrameBuffer& frameBuffer () const; + IMF_EXPORT + const IMATH_NAMESPACE::Box2i& displayWindow () const; + IMF_EXPORT + const IMATH_NAMESPACE::Box2i& dataWindow () const; + IMF_EXPORT + float pixelAspectRatio () const; + IMF_EXPORT + const IMATH_NAMESPACE::V2f screenWindowCenter () const; + IMF_EXPORT + float screenWindowWidth () const; + IMF_EXPORT + LineOrder lineOrder () const; + IMF_EXPORT + Compression compression () const; + IMF_EXPORT + RgbaChannels channels () const; + IMF_EXPORT + const char* fileName () const; + IMF_EXPORT + bool isComplete () const; + + //---------------------------------- + // Access to the file format version + //---------------------------------- + + IMF_EXPORT + int version () const; + +private: + RgbaInputFile (const RgbaInputFile&) = delete; + RgbaInputFile& operator= (const RgbaInputFile&) = delete; + RgbaInputFile (RgbaInputFile&&) = delete; + RgbaInputFile& operator= (RgbaInputFile&&) = delete; + + class IMF_HIDDEN FromYca; + + MultiPartInputFile* _multiPartFile; + InputPart* _inputPart; + FromYca* _fromYca; + std::string _channelNamePrefix; +}; + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT + +#endif diff --git a/third_party/tlRender-install-Release/include/OpenEXR/ImfRgbaYca.h b/third_party/tlRender-install-Release/include/OpenEXR/ImfRgbaYca.h new file mode 100644 index 00000000..f40efa08 --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenEXR/ImfRgbaYca.h @@ -0,0 +1,225 @@ +// +// SPDX-License-Identifier: BSD-3-Clause +// Copyright (c) Contributors to the OpenEXR Project. +// + +#ifndef INCLUDED_IMF_RGBA_YCA_H +#define INCLUDED_IMF_RGBA_YCA_H + +//----------------------------------------------------------------------------- +// +// Conversion between RGBA (red, green, blue alpha) +// and YCA (luminance, subsampled chroma, alpha) data: +// +// Luminance, Y, is computed as a weighted sum of R, G, and B: +// +// Y = yw.x * R + yw.y * G + yw.z * B +// +// Function computeYw() computes a set of RGB-to-Y weights, yw, +// from a set of primary and white point chromaticities. +// +// Chroma, C, consists of two components, RY and BY: +// +// RY = (R - Y) / Y +// BY = (B - Y) / Y +// +// For efficiency, the x and y subsampling rates for chroma are +// hardwired to 2, and the chroma subsampling and reconstruction +// filters are fixed 27-pixel wide windowed sinc functions. +// +// Starting with an image that has RGBA data for all pixels, +// +// RGBA RGBA RGBA RGBA ... RGBA RGBA +// RGBA RGBA RGBA RGBA ... RGBA RGBA +// RGBA RGBA RGBA RGBA ... RGBA RGBA +// RGBA RGBA RGBA RGBA ... RGBA RGBA +// ... +// RGBA RGBA RGBA RGBA ... RGBA RGBA +// RGBA RGBA RGBA RGBA ... RGBA RGBA +// +// function RGBAtoYCA() converts the pixels to YCA format: +// +// YCA YCA YCA YCA ... YCA YCA +// YCA YCA YCA YCA ... YCA YCA +// YCA YCA YCA YCA ... YCA YCA +// YCA YCA YCA YCA ... YCA YCA +// ... +// YCA YCA YCA YCA ... YCA YCA +// YCA YCA YCA YCA ... YCA YCA +// +// Next, decimateChromaHoriz() eliminates the chroma values from +// the odd-numbered pixels in every scan line: +// +// YCA YA YCA YA ... YCA YA +// YCA YA YCA YA ... YCA YA +// YCA YA YCA YA ... YCA YA +// YCA YA YCA YA ... YCA YA +// ... +// YCA YA YCA YA ... YCA YA +// YCA YA YCA YA ... YCA YA +// +// decimateChromaVert() eliminates all chroma values from the +// odd-numbered scan lines: +// +// YCA YA YCA YA ... YCA YA +// YA YA YA YA ... YA YA +// YCA YA YCA YA ... YCA YA +// YA YA YA YA ... YA YA +// ... +// YCA YA YCA YA ... YCA YA +// YA YA YA YA ... YA YA +// +// Finally, roundYCA() reduces the precision of the luminance +// and chroma values so that the pixel data shrink more when +// they are saved in a compressed file. +// +// The output of roundYCA() can be converted back to a set +// of RGBA pixel data that is visually very similar to the +// original RGBA image, by calling reconstructChromaHoriz(), +// reconstructChromaVert(), YCAtoRGBA(), and finally +// fixSaturation(). +// +//----------------------------------------------------------------------------- + +#include "ImfExport.h" +#include "ImfNamespace.h" + +#include "ImfChromaticities.h" +#include "ImfRgba.h" + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER + +namespace RgbaYca +{ + +// +// Width of the chroma subsampling and reconstruction filters +// + +static const int N = 27; +static const int N2 = N / 2; + +// +// Convert a set of primary chromaticities into a set of weighting +// factors for computing a pixels's luminance, Y, from R, G and B +// + +IMF_EXPORT +IMATH_NAMESPACE::V3f computeYw (const Chromaticities& cr); + +// +// Convert an array of n RGBA pixels, rgbaIn, to YCA (luminance/chroma/alpha): +// +// ycaOut[i].g = Y (rgbaIn[i]); +// ycaOut[i].r = RY (rgbaIn[i]); +// ycaOut[i].b = BY (rgbaIn[i]); +// ycaOut[i].a = aIsValid? rgbaIn[i].a: 1 +// +// yw is a set of RGB-to-Y weighting factors, as computed by computeYw(). +// + +IMF_EXPORT +void RGBAtoYCA ( + const IMATH_NAMESPACE::V3f& yw, + int n, + bool aIsValid, + const Rgba rgbaIn[/*n*/], + Rgba ycaOut[/*n*/]); + +// +// Perform horizontal low-pass filtering and subsampling of +// the chroma channels of an array of n pixels. In order +// to avoid indexing off the ends of the input array during +// low-pass filtering, ycaIn must have N2 extra pixels at +// both ends. Before calling decimateChromaHoriz(), the extra +// pixels should be filled with copies of the first and last +// "real" input pixel. +// + +IMF_EXPORT +void +decimateChromaHoriz (int n, const Rgba ycaIn[/*n+N-1*/], Rgba ycaOut[/*n*/]); + +// +// Perform vertical chroma channel low-pass filtering and subsampling. +// N scan lines of input pixels are combined into a single scan line +// of output pixels. +// + +IMF_EXPORT +void decimateChromaVert (int n, const Rgba* const ycaIn[N], Rgba ycaOut[/*n*/]); + +// +// Round the luminance and chroma channels of an array of YCA +// pixels that has already been filtered and subsampled. +// The significands of the pixels' luminance and chroma values +// are rounded to roundY and roundC bits respectively. +// + +IMF_EXPORT +void roundYCA ( + int n, + unsigned int roundY, + unsigned int roundC, + const Rgba ycaIn[/*n*/], + Rgba ycaOut[/*n*/]); + +// +// For a scan line that has valid chroma data only for every other pixel, +// reconstruct the missing chroma values. +// + +IMF_EXPORT +void +reconstructChromaHoriz (int n, const Rgba ycaIn[/*n+N-1*/], Rgba ycaOut[/*n*/]); + +// +// For a scan line that has only luminance and no valid chroma data, +// reconstruct chroma from the surrounding N scan lines. +// + +IMF_EXPORT +void +reconstructChromaVert (int n, const Rgba* const ycaIn[N], Rgba ycaOut[/*n*/]); + +// +// Convert an array of n YCA (luminance/chroma/alpha) pixels to RGBA. +// This function is the inverse of RGBAtoYCA(). +// yw is a set of RGB-to-Y weighting factors, as computed by computeYw(). +// + +IMF_EXPORT +void YCAtoRGBA ( + const IMATH_NAMESPACE::V3f& yw, + int n, + const Rgba ycaIn[/*n*/], + Rgba rgbaOut[/*n*/]); + +// +// Eliminate super-saturated pixels: +// +// Converting an image from RGBA to YCA, low-pass filtering chroma, +// and converting the result back to RGBA can produce pixels with +// super-saturated colors, where one or two of the RGB components +// become zero or negative. (The low-pass and reconstruction filters +// introduce some amount of ringing into the chroma components. +// This can lead to negative RGB values near high-contrast edges.) +// +// The fixSaturation() function finds super-saturated pixels and +// corrects them by desaturating their colors while maintaining +// their luminance. fixSaturation() takes three adjacent input +// scan lines, rgbaIn[0], rgbaIn[1], rgbaIn[2], adjusts the +// saturation of rgbaIn[1], and stores the result in rgbaOut. +// + +IMF_EXPORT +void fixSaturation ( + const IMATH_NAMESPACE::V3f& yw, + int n, + const Rgba* const rgbaIn[3], + Rgba rgbaOut[/*n*/]); + +} // namespace RgbaYca +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT + +#endif diff --git a/third_party/tlRender-install-Release/include/OpenEXR/ImfSampleCountChannel.h b/third_party/tlRender-install-Release/include/OpenEXR/ImfSampleCountChannel.h new file mode 100644 index 00000000..d070b3e8 --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenEXR/ImfSampleCountChannel.h @@ -0,0 +1,324 @@ +// +// SPDX-License-Identifier: BSD-3-Clause +// Copyright (c) Contributors to the OpenEXR Project. +// + +#ifndef INCLUDED_IMF_SAMPLE_COUNT_CHANNEL_H +#define INCLUDED_IMF_SAMPLE_COUNT_CHANNEL_H + +//---------------------------------------------------------------------------- +// +// class SampleCountChannel +// +// For an explanation of images, levels and channels, +// see the comments in header file Image.h. +// +//---------------------------------------------------------------------------- + +#include "ImfImageChannel.h" +#include "ImfUtilExport.h" + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER + +class DeepImageLevel; + +// +// Sample count channel for a deep image level: +// +// Each deep image level has a number of samples channel. For each +// pixel location (x,y) within the data window of the level, the sample +// count channel stores a single integer, n(x,y). A deep channel, c, +// in the level as the sample count channel stores n(x,y) samples at +// location (x,y) if +// +// x % c.xSampling() == 0 and y % c.ySampling() == 0. +// +// The deep channel stores no samples at location (x,y) if +// +// x % c.xSampling() != 0 or y % c.ySampling() != 0, +// + +class IMFUTIL_EXPORT_TYPE SampleCountChannel : public ImageChannel +{ +public: + // + // The OpenEXR pixel type of this channel (HALF, FLOAT or UINT). + // + + IMFUTIL_EXPORT + virtual PixelType pixelType () const; + + // + // Construct an OpenEXR frame buffer slice for this channel. + // This function is needed reading an image from an OpenEXR + // file and for saving an image in an OpenEXR file. + // + + IMFUTIL_EXPORT + Slice slice () const; + + // + // Access to the image level to which this channel belongs. + // + + IMFUTIL_EXPORT + DeepImageLevel& deepLevel (); + IMFUTIL_EXPORT + const DeepImageLevel& deepLevel () const; + + // + // Access to n(x,y), without bounds checking. Accessing a location + // outside the data window of the image level results in undefined + // behavior. + // + + IMFUTIL_EXPORT + const unsigned int& operator() (int x, int y) const; + + // + // Access to n(x,y), with bounds checking. Accessing a location outside + // the data window of the image level throws an Iex::ArgExc exception. + // + + IMFUTIL_EXPORT + const unsigned int& at (int x, int y) const; + + // + // Faster access to n(x,y) for all pixels in a single horizontal row of + // the channel. Rows are numbered from 0 to pixelsPerColumn()-1, and + // each row contains pixelsPerRow() values. + // Access is not bounds checked; accessing out of bounds rows or pixels + // results in undefined behavior. + // + + IMFUTIL_EXPORT + const unsigned int* row (int r) const; + + // + // Change the sample counts in one or more pixels: + // + // set(x,y,m) sets n(x,y) to m. + // + // set(r,m) sets n(x,y) for all pixels in row r according to the + // values in array m. The array must contain pixelsPerRow() + // entries, and the row number must be in the range from 0 + // to pixelsPerColumn()-1. + // + // clear() sets n(x,y) to 0 for all pixels within the data window + // of the level. + // + // If the sample count for a pixel is increased, then new samples are + // appended at the end of the sample list of each deep channel. The + // new samples are initialized to zero. If the sample count in a pixel + // is decreased, then sample list of each deep channel is truncated by + // discarding samples at the end of the list. + // + // Access is bounds-checked; attempting to set the number of samples of + // a pixel outside the data window throws an Iex::ArgExc exception. + // + // Memory allocation for the sample lists is not particularly clever; + // repeatedly increasing and decreasing the number of samples in the + // pixels of a level is likely to result in serious memory fragmentation. + // + // Setting the number of samples for one or more pixels may cause the + // program to run out of memory. If this happens, the image is resized + // to zero by zero pixels and an exception is thrown. Note that the + // resizing operation deletes this sample count channel and the image + // level to which it belongs. + // + + IMFUTIL_EXPORT + void set (int x, int y, unsigned int newNumSamples); + IMFUTIL_EXPORT + void set (int r, unsigned int newNumSamples[]); + IMFUTIL_EXPORT + void clear (); + + // + // OpenEXR file reading support / make sample counts editable: + // + // beginEdit() frees all memory that has been allocated for samples + // in the deep channels, and returns a pointer to an + // array of pixelsPerRow() by pixelsPerColumn() sample + // counts in row-major order. + // + // After beginEdit() returns, application code is + // free to change the values in the sample count array. + // In particular, the application can fill the array by + // reading the sample counts from an OpenEXR file. + // + // However, since memory for the samples in the deep + // channels has been freed, attempting to access any + // sample in a deep channel results in undefined + // behavior, most likely a program crash. + // + // endEdit() allocates new memory for all samples in the deep + // channels of the layer, according to the current + // sample counts, and sets the samples to zero. + // + // Application code must take make sure that each call to beginEdit() + // is followed by a corresponding endEdit() call, even if an + // exception occurs while the sample counts are accessed. In order to + // do that, application code may want to create a temporary Edit + // object instead of calling beginEdit() and endEdit() directly. + // + // Setting the number of samples for all pixels in the image may + // cause the program to run out of memory. If this happens, the image + // is resized to zero by zero pixels and an exception is thrown. + // Note that the resizing operation deletes this sample count channel + // and the image level to which it belongs. + // + + IMFUTIL_EXPORT + unsigned int* beginEdit (); + IMFUTIL_EXPORT + void endEdit (); + + class Edit + { + public: + // + // Constructor calls level->beginEdit(), + // destructor calls level->endEdit(). + // + + IMFUTIL_EXPORT + Edit (SampleCountChannel& level); + IMFUTIL_EXPORT + ~Edit (); + + Edit (const Edit& other) = delete; + Edit& operator= (const Edit& other) = delete; + Edit (Edit&& other) = delete; + Edit& operator= (Edit&& other) = delete; + + // + // Access to the writable sample count array. + // + + IMFUTIL_EXPORT + unsigned int* sampleCounts () const; + + private: + SampleCountChannel& _channel; + unsigned int* _sampleCounts; + }; + + // + // Functions that support the implementation of deep image channels. + // + + IMFUTIL_EXPORT + const unsigned int* numSamples () const; + IMFUTIL_EXPORT + const unsigned int* sampleListSizes () const; + IMFUTIL_EXPORT + const size_t* sampleListPositions () const; + IMFUTIL_EXPORT + size_t sampleBufferSize () const; + +private: + friend class DeepImageLevel; + + // + // The constructor and destructor are not public because + // image channels exist only as parts of a deep image level. + // + + SampleCountChannel (DeepImageLevel& level); + virtual ~SampleCountChannel (); + + virtual void resize (); + + void resetBasePointer (); + + unsigned int* _numSamples; // Array of per-pixel sample counts + + unsigned int* _base; // Base pointer for faster access + // to entries in _numSamples + + unsigned int* _sampleListSizes; // Array of allocated sizes of + // per-pixel sample lists + + size_t* _sampleListPositions; // Array of positions of per-pixel + // sample lists within sample list + // buffer + + size_t _totalNumSamples; // Sum of all entries in the + // _numSamples array + + size_t _totalSamplesOccupied; // Total number of samples within + // sample list buffer that have + // either been allocated for sample + // lists or lost to fragmentation + + size_t _sampleBufferSize; // Size of the sample list buffer. +}; + +//----------------------------------------------------------------------------- +// Implementation of templates and inline functions +//----------------------------------------------------------------------------- + +inline SampleCountChannel::Edit::Edit (SampleCountChannel& channel) + : _channel (channel), _sampleCounts (channel.beginEdit ()) +{ + // empty +} + +inline SampleCountChannel::Edit::~Edit () +{ + _channel.endEdit (); +} + +inline unsigned int* +SampleCountChannel::Edit::sampleCounts () const +{ + return _sampleCounts; +} + +inline const unsigned int* +SampleCountChannel::numSamples () const +{ + return _numSamples; +} + +inline const unsigned int* +SampleCountChannel::sampleListSizes () const +{ + return _sampleListSizes; +} + +inline const size_t* +SampleCountChannel::sampleListPositions () const +{ + return _sampleListPositions; +} + +inline size_t +SampleCountChannel::sampleBufferSize () const +{ + return _sampleBufferSize; +} + +inline const unsigned int& +SampleCountChannel::operator() (int x, int y) const +{ + return _base[y * pixelsPerRow () + x]; +} + +inline const unsigned int& +SampleCountChannel::at (int x, int y) const +{ + boundsCheck (x, y); + return _base[y * pixelsPerRow () + x]; +} + +inline const unsigned int* +SampleCountChannel::row (int n) const +{ + return _base + n * pixelsPerRow (); +} + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT + +#endif diff --git a/third_party/tlRender-install-Release/include/OpenEXR/ImfStandardAttributes.h b/third_party/tlRender-install-Release/include/OpenEXR/ImfStandardAttributes.h new file mode 100644 index 00000000..f9db4956 --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenEXR/ImfStandardAttributes.h @@ -0,0 +1,727 @@ +// +// SPDX-License-Identifier: BSD-3-Clause +// Copyright (c) Contributors to the OpenEXR Project. +// + +#ifndef INCLUDED_IMF_STANDARD_ATTRIBUTES_H +#define INCLUDED_IMF_STANDARD_ATTRIBUTES_H + +//----------------------------------------------------------------------------- +// +// Optional Standard Attributes -- these attributes are "optional" +// because not every image file header has them, but they define a +// "standard" way to represent commonly used data in the file header. +// +// For each attribute, with name "foo", and type "T", the following +// functions are automatically generated via macros: +// +// void addFoo (Header &header, const T &value); +// bool hasFoo (const Header &header); +// const TypedAttribute & fooAttribute (const Header &header); +// TypedAttribute & fooAttribute (Header &header); +// const T & foo (const Header &Header); +// T & foo (Header &Header); +// +//----------------------------------------------------------------------------- + +#include "ImfBoxAttribute.h" +#include "ImfChromaticitiesAttribute.h" +#include "ImfDeepImageStateAttribute.h" +#include "ImfEnvmapAttribute.h" +#include "ImfExport.h" +#include "ImfFloatAttribute.h" +#include "ImfHeader.h" +#include "ImfIDManifestAttribute.h" +#include "ImfIntAttribute.h" +#include "ImfKeyCodeAttribute.h" +#include "ImfMatrixAttribute.h" +#include "ImfNamespace.h" +#include "ImfRationalAttribute.h" +#include "ImfStringAttribute.h" +#include "ImfStringVectorAttribute.h" +#include "ImfTimeCodeAttribute.h" +#include "ImfVecAttribute.h" + +#define IMF_ADD_SUFFIX(suffix) add##suffix +#define IMF_HAS_SUFFIX(suffix) has##suffix +#define IMF_NAME_ATTRIBUTE(name) name##Attribute + +#define IMF_STD_ATTRIBUTE_DEF(name, suffix, object) \ + \ + OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER \ + IMF_EXPORT void IMF_ADD_SUFFIX (suffix) ( \ + Header & header, const object& v); \ + IMF_EXPORT bool IMF_HAS_SUFFIX (suffix) (const Header& header); \ + IMF_EXPORT const TypedAttribute& IMF_NAME_ATTRIBUTE (name) ( \ + const Header& header); \ + IMF_EXPORT TypedAttribute& IMF_NAME_ATTRIBUTE (name) ( \ + Header & header); \ + IMF_EXPORT const object& name (const Header& header); \ + IMF_EXPORT object& name (Header& header); \ + OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT + +#define IMF_STD_ATTRIBUTE_DEF_DEPRECATED(name, suffix, object, msg) \ + \ + OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER \ + OPENEXR_DEPRECATED (msg) \ + IMF_EXPORT void IMF_ADD_SUFFIX (suffix) ( \ + Header & header, const object& v); \ + OPENEXR_DEPRECATED (msg) \ + IMF_EXPORT bool IMF_HAS_SUFFIX (suffix) (const Header& header); \ + OPENEXR_DEPRECATED (msg) \ + IMF_EXPORT const TypedAttribute& IMF_NAME_ATTRIBUTE (name) ( \ + const Header& header); \ + OPENEXR_DEPRECATED (msg) \ + IMF_EXPORT TypedAttribute& IMF_NAME_ATTRIBUTE (name) ( \ + Header & header); \ + OPENEXR_DEPRECATED (msg) \ + IMF_EXPORT const object& name (const Header& header); \ + OPENEXR_DEPRECATED (msg) IMF_EXPORT object& name (Header& header); \ + OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT + +// +// In attribute definition comments below, 'UTF-8-encoded' signifies +// a sequence of zero or more characters encoded using Unicode UTF-8 encoding +// in NFC normal form, as defined in the Unicode standard. + +// +// originalDataWindow -- if application software crops an image, then it +// should save the data window of the original, un-cropped image in the +// originalDataWindow attribute. +// + +IMF_STD_ATTRIBUTE_DEF ( + originalDataWindow, OriginalDataWindow, IMATH_NAMESPACE::Box2i) + +// +// worldToCamera -- for images generated by 3D computer graphics rendering, +// a matrix that transforms 3D points from the world to the camera coordinate +// space of the renderer. +// +// The camera coordinate space is left-handed. Its origin indicates the +// location of the camera. The positive x and y axes correspond to the +// "right" and "up" directions in the rendered image. The positive z +// axis indicates the camera's viewing direction. (Objects in front of +// the camera have positive z coordinates.) +// +// Camera coordinate space in OpenEXR is the same as in Pixar's Renderman. +// + +IMF_STD_ATTRIBUTE_DEF (worldToCamera, WorldToCamera, IMATH_NAMESPACE::M44f) + +// +// worldToNDC -- for images generated by 3D computer graphics rendering, a +// matrix that transforms 3D points from the world to the Normalized Device +// Coordinate (NDC) space of the renderer. +// +// NDC is a 2D coordinate space that corresponds to the image plane, with +// positive x and pointing to the right and y positive pointing down. The +// coordinates (0, 0) and (1, 1) correspond to the upper left and lower right +// corners of the OpenEXR display window. +// +// To transform a 3D point in word space into a 2D point in NDC space, +// multiply the 3D point by the worldToNDC matrix and discard the z +// coordinate. +// +// NDC space in OpenEXR is the same as in Pixar's Renderman. +// + +IMF_STD_ATTRIBUTE_DEF (worldToNDC, WorldToNDC, IMATH_NAMESPACE::M44f) + +// +// sensorCenterOffset -- horizontal and vertical distances, in microns, of +// the center of the light-sensitive area of the camera's sensor from a point +// on that sensor where a sensor surface normal would intersect the center +// of the lens mount. When compared to an image captured with a perfectly +// centered sensor, an image where both horizontal and vertical distances +// were positive would contain more content holding what was at the right +// and what was at the bottom of the scene being captured. +// + +IMF_STD_ATTRIBUTE_DEF ( + sensorCenterOffset, SensorCenterOffset, IMATH_NAMESPACE::V2f) + +// +// sensorOverallDimensions -- dimensions of the light-sensitive area of the +// sensor, in millimeters, independent of the subset of that region from +// which image data are obtained. + +IMF_STD_ATTRIBUTE_DEF ( + sensorOverallDimensions, SensorOverallDimensions, IMATH_NAMESPACE::V2f) + +// +// sensorPhotositePitch -- distance between centers of sensor photosites, +// in microns. + +IMF_STD_ATTRIBUTE_DEF (sensorPhotositePitch, SensorPhotositePitch, float) + +// +// sensorAcquisitionRectangle -- the rectangular area of the sensor containing +// photosites the contents of which are in one-to-one correspondence with the +// captured sensels, for a monochrome sensor, or with the reconstructed pixels, +// for a sensor covered with color filter array material in a Bayer or a +// similar pattern. +// + +IMF_STD_ATTRIBUTE_DEF ( + sensorAcquisitionRectangle, + SensorAcquisitionRectangle, + IMATH_NAMESPACE::Box2i) + +// +// ascFramingDecisionList -- JSON-encoded description of framing decisions +// associated with the captured image, in a format termed 'ASC-FDL', designed +// and documented by the American Society of Cinematographers (ASC). +// +// If present, the value should be UTF-8-encoded and have a nonzero length. +// + +IMF_STD_ATTRIBUTE_DEF ( + ascFramingDecisionList, AscFramingDecisionList, std::string) + +// +// xDensity -- horizontal output density, in pixels per inch. +// The image's vertical output density is xDensity * pixelAspectRatio. +// + +IMF_STD_ATTRIBUTE_DEF (xDensity, XDensity, float) + +// +// longitude, latitude, altitude -- for images of real objects, the +// location where the image was recorded. Longitude and latitude are +// in degrees east of Greenwich and north of the equator. Altitude +// is in meters above sea level. For example, Kathmandu, Nepal is +// at longitude 85.317, latitude 27.717, altitude 1305. +// + +IMF_STD_ATTRIBUTE_DEF (longitude, Longitude, float) +IMF_STD_ATTRIBUTE_DEF (latitude, Latitude, float) +IMF_STD_ATTRIBUTE_DEF (altitude, Altitude, float) + +// +// cameraMake -- manufacturer or vendor of the camera +// +// If present, the value should be UTF-8-encoded and have a nonzero length. +// + +IMF_STD_ATTRIBUTE_DEF (cameraMake, CameraMake, std::string) + +// +// cameraModel -- model name or model number of the camera +// +// If present, the value should be UTF-8-encoded and have a nonzero length. +// + +IMF_STD_ATTRIBUTE_DEF (cameraModel, CameraModel, std::string) + +// +// cameraSerialNumber -- serial number of the camera +// +// If present, the value should be UTF-8-encoded and have a nonzero length. +// +// Note that despite the name, the value can include non-digits +// as well as digits. +// + +IMF_STD_ATTRIBUTE_DEF (cameraSerialNumber, CameraSerialNumber, std::string) + +// +// cameraFirmwareVersion -- the firmware version of the camera +// +// If present, the value should be UTF-8-encoded and have a nonzero length. +// + +IMF_STD_ATTRIBUTE_DEF ( + cameraFirmwareVersion, CameraFirmwareVersion, std::string) + +// +// cameraUuid -- identifies this camera uniquely among all +// cameras from all vendors +// +// Uniqueness could be accomplished with, e.g., a MAC address, a +// concatenation of cameraMake, cameraModel, cameraSerialNumber, etc. +// +// If present, the value should be UTF-8-encoded and have a nonzero length. +// + +IMF_STD_ATTRIBUTE_DEF (cameraUuid, CameraUuid, std::string) + +// +// cameraLabel -- text label identifying how the camera was used or +// assigned, e.g. "Camera 1 Left", "B Camera", "POV", etc +// +// If present, the value should be UTF-8-encoded and have a nonzero length. +// + +IMF_STD_ATTRIBUTE_DEF (cameraLabel, CameraLabel, std::string) + +// +// cameraCCTSetting -- color temperature, in Kelvin, configured +// for the physical or virtual camera creating or capturing the image. +// +// The cameraCCTSetting is primarily forensic, and indicates the +// stated color balance of a film stock, the color temperature setting +// on a physical digital camera or the nominal color temperature of the +// scene adopted white as passed to a virtual camera's API. +// +// A professional digital cinema cameras is not constrained to map every +// supplied correlated color temperature to a point on the curve of a +// Planckian radiator, or map every supplied color temperature to a +// chromaticity corresponding to a combination of the three principal +// components forming a basis for the CIE D series of illuminants. +// +// Often, lower color temperatures are on the Planckian locus, higher +// color temperatures are on a locus of CIE D series chromaticities, and +// the camera performs a crossfade (typically a linear crossfade) between +// the two for intermediate temperatures. That the start and end of the +// crossfade could differ for every camera vendor -- or even across cameras +// offered by the same vendor -- means that no universal algorithm can map +// a camera color temperature setting (combined with a tint setting, +// see below) into a scene adopted white chromaticity. +// +// The most common use for the cameraCCTSetting attribute is to feed its +// value into a camera-vendor-provided application or API, along with +// a cameraTintSetting attribute value, to reproduce the color processing +// done in-camera on set. +// +// If a cameraCCTSetting attribute is provided, and no cameraTintSetting +// is provided, then a value of zero should be passed to any application +// or API using the cameraCCTSetting and cameraTintSetting. +// + +IMF_STD_ATTRIBUTE_DEF (cameraCCTSetting, CameraCCTSetting, float) + +// +// cameraTintSetting -- green / magenta tint configured for the physical +// or virtual camera creating or capturing the image. +// +// The cameraTintSetting is primarily forensic. There is no vendor- +// independent mapping from a unit of tint to a distance on a chromaticity +// diagram. One camera vendor might choose a color space (e.g. the +// CIE 1960 UCS) and have a unit amount of tint represent some delta uv +// distance from the point by the cammeraCCTSetting and a tint value of 0. +// Another might choose to express the effect of tint by analogy to a +// traditional unit from a film workflow, e.g. a Kodak or Rosco color +// correction filter. About the only guaranteed commonality is that all +// camera vendor tint schemes have positive values shift the adopted +// scene white towards green, and negative values toward magenta. +// +// If the camera vendor maps cameraCCTSetting to a point defined by +// a linear crossfade between a Planckian blackbody locus and loci of +// CIE D Series illuminants, the slope of the tint isotherm at the +// exact points where the linear crossfade starts and ends can be +// indeterminate and an inverse mapping from chromaticity to a pair +// of CCT and tint can be one-to-many. +// +// The most common use for the cameraTintSetting attribute is to feed its +// value into a camera-vendor-provided application or API, along with +// a cameraCCTSetting attribute value, to reproduce the color processing +// done in-camera on set. +// + +IMF_STD_ATTRIBUTE_DEF (cameraTintSetting, CameraTintSetting, float) + +// +// cameraColorBalance -- chromaticity in CIE 1960 UCS coordinates +// indicating a color the user of the camera would like the camera +// to treat as neutral, and corresponding to a particular camera +// configuration of make, model, camera firmware version, CCT setting +// and tint setting. +// +// Note that this is not necessarily (or even probably) the same +// chromaticity as that of the scene adopted white stored in an +// adoptedNeutral attribute (if present). +// +// For example, if a physical digital cinema camera was configured with +// a CCT of 3200K and a tint of -3 (in some camera vendor dependent unit), +// and the camera output had been processed such that the image containing +// this attribute was encoded as per SMPTE ST 2065-4:2023, then +// the adoptedNeutral attribute would have the value corresponding to +// the ACES neutral chromaticity, very near that of CIE Illuminant D60, +// whereas the cameraColorBalance would have a chromaticity much, much +// warmer than that of the adoptedNeutral attribute. +// + +IMF_STD_ATTRIBUTE_DEF ( + cameraColorBalance, CameraColorBalance, IMATH_NAMESPACE::V2f) + +// +// isoSpeed -- the ISO speed of the film or the ISO setting of the camera +// that was used to record the image +// + +IMF_STD_ATTRIBUTE_DEF (isoSpeed, IsoSpeed, float) + +// +// exposure -- exposure time, in seconds +// + +IMF_STD_ATTRIBUTE_DEF (expTime, ExpTime, float) + +// +// shutterAngle -- shutter angle, in degrees +// +// For a physical film or digital camera, changing the shutter angle +// inexorably affects both motion blur and exposure. For a CG camera, +// the parameters to the renderer control whether or not changing the +// shutter angle affects simulation of either or both of these phenomena. +// + +IMF_STD_ATTRIBUTE_DEF (shutterAngle, ShutterAngle, float) + +// +// captureRate -- capture rate, in frames per second, of the image +// sequence to which the image belongs, represented as a rational +// number +// +// For variable frame rates, time-lapse photography, etc. the capture +// rate r is calculated as +// +// r = 1 / (tN - tNm1) +// +// where tn is the time, in seconds, of the center of frame N's +// exposure interval, and tNm1 is the time, in seconds, of the center +// of frame N-1's exposure interval. +// +// Both the numerator and denominator of r must be strictly positive. +// + +IMF_STD_ATTRIBUTE_DEF (captureRate, CaptureRate, Rational) + +// +// lensMake -- manufacturer or vendor of the lens +// +// If present, the value should be UTF-8-encoded and have a nonzero length. +// + +IMF_STD_ATTRIBUTE_DEF (lensMake, LensMake, std::string) + +// +// lensModel -- model name or model number of the lens +// +// If present, the value should be UTF-8-e coded and have a nonzero length. +// + +IMF_STD_ATTRIBUTE_DEF (lensModel, LensModel, std::string) + +// +// lensSerialNumber -- serial number of the lens +// +// Note that despite the name, the value can include non-digits +// as well as digits. +// +// If present, the value should be UTF-8-encoded and have a nonzero length. +// + +IMF_STD_ATTRIBUTE_DEF (lensSerialNumber, LensSerialNumber, std::string) + +// +// lensFirmwareVersion -- firmware version of the lens +// + +// If present, the value should be UTF-8-encoded and have a nonzero length. +// + +IMF_STD_ATTRIBUTE_DEF (lensFirmwareVersion, LensFirmwareVersion, std::string) + +// +// nominalFocalLength -- number printed on barrel of a prime lens, or +// number next to index mark on a zoom lens, in units of millimeters. +// +// Nominal focal length is appropriate for asset tracking of lenses (e.g. +// a camera rental house catalogs its lens stock by nominal focal length). +// + +IMF_STD_ATTRIBUTE_DEF (nominalFocalLength, NominalFocalLength, float) + +// +// pinholeFocalLength -- in the simplest model of image formation, the +// distance between the pinhole and the image plane, in units of millimeters. +// +// When a CGI application supplies a method for an artist to provide focal +// length to some calculation, pinhole focal length is almost always the +// appropriate number to convey to the application. +// + +IMF_STD_ATTRIBUTE_DEF (pinholeFocalLength, PinholeFocalLength, float) + +// +// effectiveFocalLength -- in the thick lens model, the effective focal +// length is the distance between the front focal point and the front +// nodal point, or equivalently the back focal point and the back nodal +// point, in units of millimeters. +// +// The effective focal length is an abstraction used in lens design and, +// unless a CGI application is sophisticated enough to be using the thick +// lens model, should not be supplied to the application; for normal +// CGI applications, pinhole focal length should be used. +// +// Note that the forward and back lens nodal points mentioned above are +// distinct in meaning and in position from the forward and back lens +// entrance pupils. A 'no-parallax' rotation is rotation around the +// forward lens entrance pupil. +// + +IMF_STD_ATTRIBUTE_DEF (effectiveFocalLength, EffectiveFocalLength, float) + +// +// entrancePupilOffset -- the axial distance from the image plane +// to the entrance pupil, in units of millimeters. A larger entrance +// pupil offset means the entrance pupil is closer to the object. +// +// Note that in some lens configurations, the entrance pupil offset can +// be negative. +// + +IMF_STD_ATTRIBUTE_DEF (entrancePupilOffset, EntrancePupilOffset, float) + +// +// aperture -- the f-number of the lens, computed as the ratio of +// lens effective focal length to the diameter of lens entrance pupil +// at the time the image was created or captured. +// + +IMF_STD_ATTRIBUTE_DEF (aperture, Aperture, float) + +// +// tStop -- ratio of lens effective focal length to diameter of +// entrance pupil divided by the square root of the transmittance +// the lens presents to a paraxial ray. +// +// Note that tStop, like aperture, must be strictly positive; +// and that tStop will always be a larger number than aperture. +// + +IMF_STD_ATTRIBUTE_DEF (tStop, TStop, float) + +// +// focus -- the camera's focus distance, in meters +// + +IMF_STD_ATTRIBUTE_DEF (focus, Focus, float) + +// +// owner -- name of the owner of the image +// + +IMF_STD_ATTRIBUTE_DEF (owner, Owner, std::string) + +// +// comments -- additional image information in human-readable +// form, for example a verbal description of the image. +// + +IMF_STD_ATTRIBUTE_DEF (comments, Comments, std::string) + +// +// capDate -- the date when the image was created or captured, +// in local time, and formatted as +// +// YYYY:MM:DD hh:mm:ss +// +// where YYYY is the year (4 digits, e.g. 2003), MM is the month +// (2 digits, 01, 02, ... 12), DD is the day of the month (2 digits, +// 01, 02, ... 31), hh is the hour (2 digits, 00, 01, ... 23), mm +// is the minute, and ss is the second (2 digits, 00, 01, ... 59). +// + +IMF_STD_ATTRIBUTE_DEF (capDate, CapDate, std::string) + +// +// utcOffset -- offset of local time at capDate from +// Universal Coordinated Time (UTC), in seconds: +// +// UTC == local time + utcOffset +// + +IMF_STD_ATTRIBUTE_DEF (utcOffset, UtcOffset, float) + +// +// keyCode -- for motion picture film frames. Identifies film +// manufacturer, film type, film roll and frame position within +// the roll. +// + +IMF_STD_ATTRIBUTE_DEF (keyCode, KeyCode, KeyCode) + +// +// timeCode -- time and control code +// + +IMF_STD_ATTRIBUTE_DEF (timeCode, TimeCode, TimeCode) + +// +// framesPerSecond -- defines the nominal playback frame rate for image +// sequences, in frames per second. Every image in a sequence should +// have a framesPerSecond attribute, and the attribute value should be +// the same for all images in the sequence. If an image sequence has +// no framesPerSecond attribute, playback software should assume that +// the frame rate for the sequence is 24 frames per second. +// +// In order to allow exact representation of NTSC frame and field rates, +// framesPerSecond is stored as a rational number. A rational number is +// a pair of integers, n and d, that represents the value n/d. +// +// For the exact values of commonly used frame rates, please see header +// file ImfFramesPerSecond.h. +// + +IMF_STD_ATTRIBUTE_DEF (framesPerSecond, FramesPerSecond, Rational) + +// +// imageCounter -- an image number +// +// For a sequence of images, the image number increases +// when the images are accessed in the intended play order. +// imageCounter can be used to order frames when more standard +// ordering systems are inapplicable, including but not limited +// to uniquely identifying frames of high-speed photography that +// would have identical time codes, ordering sequences of frames +// where some frames may have been captured and discarded due to +// real-time constraints, or ordering frames in a sequence that +// is intermittently accumulated from devices such as security +// cameras triggered by motion in an environment. +// + +IMF_STD_ATTRIBUTE_DEF (imageCounter, ImageCounter, int) + +// +// reelName -- name for a sequence of unique images. +// +// If present, the value should be UTF-8-encoded and have a nonzero length. +// + +IMF_STD_ATTRIBUTE_DEF (reelName, ReelName, std::string) + +// +// chromaticities -- for RGB images, specifies the CIE (x,y) +// chromaticities of the primaries and the white point +// + +IMF_STD_ATTRIBUTE_DEF (chromaticities, Chromaticities, Chromaticities) + +// +// whiteLuminance -- for RGB images, defines the luminance, in Nits +// (candelas per square meter) of the RGB value (1.0, 1.0, 1.0). +// +// If the chromaticities and the whiteLuminance of an RGB image are +// known, then it is possible to convert the image's pixels from RGB +// to CIE XYZ tristimulus values (see function RGBtoXYZ() in header +// file ImfChromaticities.h). +// + +IMF_STD_ATTRIBUTE_DEF (whiteLuminance, WhiteLuminance, float) + +// +// adoptedNeutral -- specifies the CIE (x,y) coordinates that should +// be considered neutral during color rendering. Pixels in the image +// file whose (x,y) coordinates match the adoptedNeutral value should +// be mapped to neutral values on the display. +// + +IMF_STD_ATTRIBUTE_DEF (adoptedNeutral, AdoptedNeutral, IMATH_NAMESPACE::V2f) + +// +// renderingTransform, lookModTransform -- specify the names of the +// CTL functions that implements the intended color rendering and look +// modification transforms for this image. +// +// If present, values should be UTF-8-encoded and have nonzero length. +// + +IMF_STD_ATTRIBUTE_DEF_DEPRECATED ( + renderingTransform, + RenderingTransform, + std::string, + "this attribute is obsolete as of OpenEXR v3.2") +IMF_STD_ATTRIBUTE_DEF_DEPRECATED ( + lookModTransform, + LookModTransform, + std::string, + "this attribute is obsolete as of OpenEXR v3.2") + +// +// envmap -- if this attribute is present, the image represents +// an environment map. The attribute's value defines how 3D +// directions are mapped to 2D pixel locations. For details +// see header file ImfEnvmap.h +// + +IMF_STD_ATTRIBUTE_DEF (envmap, Envmap, Envmap) + +// +// wrapmodes -- determines how texture map images are extrapolated. +// If an OpenEXR file is used as a texture map for 3D rendering, +// texture coordinates (0.0, 0.0) and (1.0, 1.0) correspond to +// the upper left and lower right corners of the data window. +// If the image is mapped onto a surface with texture coordinates +// outside the zero-to-one range, then the image must be extrapolated. +// This attribute tells the renderer how to do this extrapolation. +// The attribute contains either a pair of comma-separated keywords, +// to specify separate extrapolation modes for the horizontal and +// vertical directions; or a single keyword, to specify extrapolation +// in both directions (e.g. "clamp,periodic" or "clamp"). Extra white +// space surrounding the keywords is allowed, but should be ignored +// by the renderer ("clamp, black " is equivalent to "clamp,black"). +// The keywords listed below are predefined; some renderers may support +// additional extrapolation modes: +// +// black pixels outside the zero-to-one range are black +// +// clamp texture coordinates less than 0.0 and greater +// than 1.0 are clamped to 0.0 and 1.0 respectively +// +// periodic the texture image repeats periodically +// +// mirror the texture image repeats periodically, but +// every other instance is mirrored +// + +IMF_STD_ATTRIBUTE_DEF (wrapmodes, Wrapmodes, std::string) + +// +// multiView -- defines the view names for multi-view image files. +// A multi-view image contains two or more views of the same scene, +// as seen from different viewpoints, for example a left-eye and +// a right-eye view for stereo displays. The multiView attribute +// lists the names of the views in an image, and a naming convention +// identifies the channels that belong to each view. +// +// For details, please see header file ImfMultiView.h +// + +IMF_STD_ATTRIBUTE_DEF (multiView, MultiView, StringVector) + +// +// deepImageState -- specifies whether the pixels in a deep image are +// sorted and non-overlapping. +// +// Note: this attribute can be set by application code that writes a file +// in order to tell applications that read the file whether the pixel data +// must be cleaned up prior to image processing operations such as flattening. +// The OpenEXR library does not verify that the attribute is consistent with +// the actual state of the pixels. Application software may assume that the +// attribute is valid, as long as the software will not crash or lock up if +// any pixels are inconsistent with the deepImageState attribute. +// + +IMF_STD_ATTRIBUTE_DEF (deepImageState, DeepImageState, DeepImageState) + +// +// dwaCompressionLevel -- sets the quality level for images compressed +// with the DWAA or DWAB method. +// +// DEPRECATED: use the methods directly in the header +IMF_STD_ATTRIBUTE_DEF_DEPRECATED ( + dwaCompressionLevel, + DwaCompressionLevel, + float, + "use compression method in ImfHeader") + +// +// ID Manifest +// + +IMF_STD_ATTRIBUTE_DEF (idManifest, IDManifest, CompressedIDManifest) + +#endif diff --git a/third_party/tlRender-install-Release/include/OpenEXR/ImfStdIO.h b/third_party/tlRender-install-Release/include/OpenEXR/ImfStdIO.h new file mode 100644 index 00000000..10a02477 --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenEXR/ImfStdIO.h @@ -0,0 +1,162 @@ +// +// SPDX-License-Identifier: BSD-3-Clause +// Copyright (c) Contributors to the OpenEXR Project. +// + +#ifndef INCLUDED_IMF_STD_IO_H +#define INCLUDED_IMF_STD_IO_H + +//----------------------------------------------------------------------------- +// +// Low-level file input and output for OpenEXR +// based on C++ standard iostreams. +// +//----------------------------------------------------------------------------- + +#include "ImfExport.h" +#include "ImfNamespace.h" + +#include "ImfIO.h" + +#include +#include + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER + +//------------------------------------------- +// class StdIFStream -- an implementation of +// class OPENEXR_IMF_INTERNAL_NAMESPACE::IStream based on class std::ifstream +//------------------------------------------- + +class IMF_EXPORT_TYPE StdIFStream + : public OPENEXR_IMF_INTERNAL_NAMESPACE::IStream +{ +public: + //------------------------------------------------------- + // A constructor that opens the file with the given name. + // The destructor will close the file. + //------------------------------------------------------- + + IMF_EXPORT StdIFStream (const char fileName[]); + + //--------------------------------------------------------- + // A constructor that uses a std::ifstream that has already + // been opened by the caller. The StdIFStream's destructor + // will not close the std::ifstream. + //--------------------------------------------------------- + + IMF_EXPORT StdIFStream (std::ifstream& is, const char fileName[]); + + IMF_EXPORT virtual ~StdIFStream (); + StdIFStream (const StdIFStream&) = delete; + StdIFStream (StdIFStream&&) = delete; + StdIFStream& operator= (const StdIFStream&) = delete; + StdIFStream& operator= (StdIFStream&&) = delete; + + IMF_EXPORT virtual bool read (char c[/*n*/], int n); + IMF_EXPORT virtual uint64_t tellg (); + IMF_EXPORT virtual void seekg (uint64_t pos); + IMF_EXPORT virtual void clear (); + +private: + std::ifstream* _is; + bool _deleteStream; +}; + +//------------------------------------------------ +// class StdISStream -- an implementation of class +// OPENEXR_IMF_INTERNAL_NAMESPACE::IStream, based on class std::istringstream +//------------------------------------------------ + +class IMF_EXPORT_TYPE StdISStream + : public OPENEXR_IMF_INTERNAL_NAMESPACE::IStream +{ +public: + IMF_EXPORT StdISStream (); + IMF_EXPORT ~StdISStream (); + StdISStream (const StdISStream&) = delete; + StdISStream (StdISStream&&) = delete; + StdISStream& operator= (const StdISStream&) = delete; + StdISStream& operator= (StdISStream&&) = delete; + + IMF_EXPORT virtual bool read (char c[/*n*/], int n); + IMF_EXPORT virtual uint64_t tellg (); + IMF_EXPORT virtual void seekg (uint64_t pos); + IMF_EXPORT virtual void clear (); + + IMF_EXPORT std::string str () const; + + IMF_EXPORT void str (const std::string& s); + +private: + std::istringstream _is; +}; + +//------------------------------------------- +// class StdOFStream -- an implementation of +// class OPENEXR_IMF_INTERNAL_NAMESPACE::OStream based on class std::ofstream +//------------------------------------------- + +class IMF_EXPORT_TYPE StdOFStream + : public OPENEXR_IMF_INTERNAL_NAMESPACE::OStream +{ +public: + //------------------------------------------------------- + // A constructor that opens the file with the given name. + // The destructor will close the file. + //------------------------------------------------------- + + IMF_EXPORT StdOFStream (const char fileName[]); + + //--------------------------------------------------------- + // A constructor that uses a std::ofstream that has already + // been opened by the caller. The StdOFStream's destructor + // will not close the std::ofstream. + //--------------------------------------------------------- + + IMF_EXPORT StdOFStream (std::ofstream& os, const char fileName[]); + + IMF_EXPORT virtual ~StdOFStream (); + StdOFStream (const StdOFStream&) = delete; + StdOFStream (StdOFStream&&) = delete; + StdOFStream& operator= (const StdOFStream&) = delete; + StdOFStream& operator= (StdOFStream&&) = delete; + + IMF_EXPORT virtual void write (const char c[/*n*/], int n); + IMF_EXPORT virtual uint64_t tellp (); + IMF_EXPORT virtual void seekp (uint64_t pos); + +private: + std::ofstream* _os; + bool _deleteStream; +}; + +//------------------------------------------------ +// class StdOSStream -- an implementation of class +// OPENEXR_IMF_INTERNAL_NAMESPACE::OStream, based on class std::ostringstream +//------------------------------------------------ + +class IMF_EXPORT_TYPE StdOSStream + : public OPENEXR_IMF_INTERNAL_NAMESPACE::OStream +{ +public: + IMF_EXPORT StdOSStream (); + IMF_EXPORT ~StdOSStream (); + StdOSStream (const StdOSStream&) = delete; + StdOSStream (StdOSStream&&) = delete; + StdOSStream& operator= (const StdOSStream&) = delete; + StdOSStream& operator= (StdOSStream&&) = delete; + + IMF_EXPORT virtual void write (const char c[/*n*/], int n); + IMF_EXPORT virtual uint64_t tellp (); + IMF_EXPORT virtual void seekp (uint64_t pos); + + IMF_EXPORT std::string str () const; + +private: + std::ostringstream _os; +}; + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT + +#endif diff --git a/third_party/tlRender-install-Release/include/OpenEXR/ImfStringAttribute.h b/third_party/tlRender-install-Release/include/OpenEXR/ImfStringAttribute.h new file mode 100644 index 00000000..c105ce38 --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenEXR/ImfStringAttribute.h @@ -0,0 +1,32 @@ +// +// SPDX-License-Identifier: BSD-3-Clause +// Copyright (c) Contributors to the OpenEXR Project. +// + +#ifndef INCLUDED_IMF_STRING_ATTRIBUTE_H +#define INCLUDED_IMF_STRING_ATTRIBUTE_H + +//----------------------------------------------------------------------------- +// +// class StringAttribute +// +//----------------------------------------------------------------------------- + +#include "ImfExport.h" +#include "ImfNamespace.h" + +#include "ImfAttribute.h" + +#include + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER + +typedef TypedAttribute StringAttribute; + +#ifndef COMPILING_IMF_STRING_ATTRIBUTE +extern template class IMF_EXPORT_EXTERN_TEMPLATE TypedAttribute; +#endif + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT + +#endif diff --git a/third_party/tlRender-install-Release/include/OpenEXR/ImfStringVectorAttribute.h b/third_party/tlRender-install-Release/include/OpenEXR/ImfStringVectorAttribute.h new file mode 100644 index 00000000..76bc428b --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenEXR/ImfStringVectorAttribute.h @@ -0,0 +1,36 @@ +// +// SPDX-License-Identifier: BSD-3-Clause +// Copyright (c) Weta Digital, Ltd and Contributors to the OpenEXR Project. +// + +#ifndef INCLUDED_IMF_STRINGVECTOR_ATTRIBUTE_H +#define INCLUDED_IMF_STRINGVECTOR_ATTRIBUTE_H + +//----------------------------------------------------------------------------- +// +// class StringVectorAttribute +// +//----------------------------------------------------------------------------- + +#include "ImfExport.h" +#include "ImfNamespace.h" + +#include "ImfAttribute.h" + +#include +#include + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER + +typedef std::vector StringVector; +typedef TypedAttribute + StringVectorAttribute; + +#ifndef COMPILING_IMF_STRING_VECTOR_ATTRIBUTE +extern template class IMF_EXPORT_EXTERN_TEMPLATE + TypedAttribute; +#endif + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT + +#endif diff --git a/third_party/tlRender-install-Release/include/OpenEXR/ImfTestFile.h b/third_party/tlRender-install-Release/include/OpenEXR/ImfTestFile.h new file mode 100644 index 00000000..cce3a339 --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenEXR/ImfTestFile.h @@ -0,0 +1,54 @@ +// +// SPDX-License-Identifier: BSD-3-Clause +// Copyright (c) Contributors to the OpenEXR Project. +// + +#ifndef INCLUDED_IMF_TEST_FILE_H +#define INCLUDED_IMF_TEST_FILE_H + +//----------------------------------------------------------------------------- +// +// Utility routines to test quickly if a given +// file is an OpenEXR file, and whether the +// file is scanline-based or tiled. +// +//----------------------------------------------------------------------------- + +#include "ImfForward.h" + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER + +IMF_EXPORT bool isOpenExrFile (const char fileName[]); + +IMF_EXPORT bool isOpenExrFile (const char fileName[], bool& isTiled); + +IMF_EXPORT bool +isOpenExrFile (const char fileName[], bool& isTiled, bool& isDeep); + +IMF_EXPORT bool isOpenExrFile ( + const char fileName[], bool& isTiled, bool& isDeep, bool& isMultiPart); + +IMF_EXPORT bool isTiledOpenExrFile (const char fileName[]); + +IMF_EXPORT bool isDeepOpenExrFile (const char fileName[]); + +IMF_EXPORT bool isMultiPartOpenExrFile (const char fileName[]); + +IMF_EXPORT bool isOpenExrFile (IStream& is); + +IMF_EXPORT bool isOpenExrFile (IStream& is, bool& isTiled); + +IMF_EXPORT bool isOpenExrFile (IStream& is, bool& isTiled, bool& isDeep); + +IMF_EXPORT bool +isOpenExrFile (IStream& is, bool& isTiled, bool& isDeep, bool& isMultiPart); + +IMF_EXPORT bool isTiledOpenExrFile (IStream& is); + +IMF_EXPORT bool isDeepOpenExrFile (IStream& is); + +IMF_EXPORT bool isMultiPartOpenExrFile (IStream& is); + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT + +#endif diff --git a/third_party/tlRender-install-Release/include/OpenEXR/ImfThreading.h b/third_party/tlRender-install-Release/include/OpenEXR/ImfThreading.h new file mode 100644 index 00000000..f9f2fd78 --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenEXR/ImfThreading.h @@ -0,0 +1,63 @@ +// +// SPDX-License-Identifier: BSD-3-Clause +// Copyright (c) Contributors to the OpenEXR Project. +// + +#ifndef INCLUDED_IMF_THREADING_H +#define INCLUDED_IMF_THREADING_H + +#include "ImfExport.h" +#include "ImfNamespace.h" + +//----------------------------------------------------------------------------- +// +// Threading support for the OpenEXR library +// +// The OpenEXR library uses threads to perform reading and writing +// of OpenEXR files in parallel. The thread that calls the library +// always performs the actual file IO (this is usually the main +// application thread) whereas a several worker threads perform +// data compression and decompression. The number of worker +// threads can be any non-negative value (a value of zero reverts +// to single-threaded operation). As long as there is at least +// one worker thread, file IO and compression can potentially be +// done concurrently through pinelining. If there are two or more +// worker threads, then pipelining as well as concurrent compression +// of multiple blocks can be performed. +// +// Threading in the EXR library is controllable at two granularities: +// +// * The functions in this file query and control the total number +// of worker threads, which will be created globally for the whole +// library. Regardless of how many input or output files are +// opened simultaneously, the library will use at most this number +// of worker threads to perform all work. The default number of +// global worker threads is zero (i.e. single-threaded operation; +// everything happens in the thread that calls the library). +// +// * Furthermore, it is possible to set the number of threads that +// each input or output file should keep busy. This number can +// be explicitly set for each file. The default behavior is for +// each file to try to occupy all worker threads in the library's +// thread pool. +// +//----------------------------------------------------------------------------- + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER + +//----------------------------------------------------------------------------- +// Return the number of Imf-global worker threads used for parallel +// compression and decompression of OpenEXR files. +//----------------------------------------------------------------------------- + +IMF_EXPORT int globalThreadCount (); + +//----------------------------------------------------------------------------- +// Change the number of Imf-global worker threads +//----------------------------------------------------------------------------- + +IMF_EXPORT void setGlobalThreadCount (int count); + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT + +#endif diff --git a/third_party/tlRender-install-Release/include/OpenEXR/ImfTileDescription.h b/third_party/tlRender-install-Release/include/OpenEXR/ImfTileDescription.h new file mode 100644 index 00000000..4878d920 --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenEXR/ImfTileDescription.h @@ -0,0 +1,63 @@ +// +// SPDX-License-Identifier: BSD-3-Clause +// Copyright (c) Contributors to the OpenEXR Project. +// + +#ifndef INCLUDED_IMF_TILE_DESCRIPTION_H +#define INCLUDED_IMF_TILE_DESCRIPTION_H + +//----------------------------------------------------------------------------- +// +// class TileDescription and enum LevelMode +// +//----------------------------------------------------------------------------- +#include "ImfExport.h" +#include "ImfNamespace.h" + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER + +enum IMF_EXPORT_ENUM LevelMode +{ + ONE_LEVEL = 0, + MIPMAP_LEVELS = 1, + RIPMAP_LEVELS = 2, + + NUM_LEVELMODES // number of different level modes +}; + +enum IMF_EXPORT_ENUM LevelRoundingMode +{ + ROUND_DOWN = 0, + ROUND_UP = 1, + + NUM_ROUNDINGMODES // number of different rounding modes +}; + +class IMF_EXPORT_TYPE TileDescription +{ +public: + unsigned int xSize; // size of a tile in the x dimension + unsigned int ySize; // size of a tile in the y dimension + LevelMode mode; + LevelRoundingMode roundingMode; + + TileDescription ( + unsigned int xs = 32, + unsigned int ys = 32, + LevelMode m = ONE_LEVEL, + LevelRoundingMode r = ROUND_DOWN) + : xSize (xs), ySize (ys), mode (m), roundingMode (r) + { + // empty + } + + bool operator== (const TileDescription& other) const + { + return xSize == other.xSize && ySize == other.ySize && + mode == other.mode && roundingMode == other.roundingMode; + } +}; + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT + +#endif diff --git a/third_party/tlRender-install-Release/include/OpenEXR/ImfTileDescriptionAttribute.h b/third_party/tlRender-install-Release/include/OpenEXR/ImfTileDescriptionAttribute.h new file mode 100644 index 00000000..997a5476 --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenEXR/ImfTileDescriptionAttribute.h @@ -0,0 +1,33 @@ +// +// SPDX-License-Identifier: BSD-3-Clause +// Copyright (c) Contributors to the OpenEXR Project. +// + +#ifndef INCLUDED_IMF_TILE_DESCRIPTION_ATTRIBUTE_H +#define INCLUDED_IMF_TILE_DESCRIPTION_ATTRIBUTE_H + +//----------------------------------------------------------------------------- +// +// class TileDescriptionAttribute +// +//----------------------------------------------------------------------------- + +#include "ImfExport.h" +#include "ImfNamespace.h" + +#include "ImfAttribute.h" +#include "ImfTileDescription.h" + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER + +typedef TypedAttribute + TileDescriptionAttribute; + +#ifndef COMPILING_IMF_STRING_VECTOR_ATTRIBUTE +extern template class IMF_EXPORT_EXTERN_TEMPLATE + TypedAttribute; +#endif + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT + +#endif diff --git a/third_party/tlRender-install-Release/include/OpenEXR/ImfTiledInputFile.h b/third_party/tlRender-install-Release/include/OpenEXR/ImfTiledInputFile.h new file mode 100644 index 00000000..9ab1232d --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenEXR/ImfTiledInputFile.h @@ -0,0 +1,372 @@ +// +// SPDX-License-Identifier: BSD-3-Clause +// Copyright (c) Contributors to the OpenEXR Project. +// + +#ifndef INCLUDED_IMF_TILED_INPUT_FILE_H +#define INCLUDED_IMF_TILED_INPUT_FILE_H + +//----------------------------------------------------------------------------- +// +// class TiledInputFile +// +//----------------------------------------------------------------------------- + +#include "ImfForward.h" + +#include "ImfContext.h" + +#include "ImfThreading.h" + +#include "ImfTileDescription.h" +#include + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER + +class IMF_EXPORT_TYPE TiledInputFile +{ +public: + //-------------------------------------------------------------------- + // A constructor that opens the file with the specified name, and + // reads the file header. The constructor throws an IEX_NAMESPACE::ArgExc + // exception if the file is not tiled. + // The numThreads parameter specifies how many worker threads this + // file will try to keep busy when decompressing individual tiles. + // Destroying TiledInputFile objects constructed with this constructor + // automatically closes the corresponding files. + //-------------------------------------------------------------------- + + IMF_EXPORT + TiledInputFile ( + const char fileName[], int numThreads = globalThreadCount ()); + + // ---------------------------------------------------------- + // A constructor that attaches the new TiledInputFile object + // to a file that has already been opened. + // Destroying TiledInputFile objects constructed with this + // constructor does not automatically close the corresponding + // files. + // ---------------------------------------------------------- + + IMF_EXPORT + TiledInputFile ( + OPENEXR_IMF_INTERNAL_NAMESPACE::IStream& is, + int numThreads = globalThreadCount ()); + + IMF_EXPORT + TiledInputFile ( + const char* filename, + const ContextInitializer& ctxtinit, + int numThreads = globalThreadCount ()); + + //------------------------ + // Access to the file name + //------------------------ + + IMF_EXPORT + const char* fileName () const; + + //-------------------------- + // Access to the file header + //-------------------------- + + IMF_EXPORT + const Header& header () const; + + //---------------------------------- + // Access to the file format version + //---------------------------------- + + IMF_EXPORT + int version () const; + + //----------------------------------------------------------- + // Set the current frame buffer -- copies the FrameBuffer + // object into the TiledInputFile object. + // + // The current frame buffer is the destination for the pixel + // data read from the file. The current frame buffer must be + // set at least once before readTile() is called. + // The current frame buffer can be changed after each call + // to readTile(). + //----------------------------------------------------------- + + IMF_EXPORT + void setFrameBuffer (const FrameBuffer& frameBuffer); + + //----------------------------------- + // Access to the current frame buffer + //----------------------------------- + + IMF_EXPORT + const FrameBuffer& frameBuffer () const; + + //------------------------------------------------------------ + // Check if the file is complete: + // + // isComplete() returns true if all pixels in the data window + // (in all levels) are present in the input file, or false if + // any pixels are missing. (Another program may still be busy + // writing the file, or file writing may have been aborted + // prematurely.) + //------------------------------------------------------------ + + IMF_EXPORT + bool isComplete () const; + + //-------------------------------------------------- + // Utility functions: + //-------------------------------------------------- + + //--------------------------------------------------------- + // Multiresolution mode and tile size: + // The following functions return the xSize, ySize and mode + // fields of the file header's TileDescriptionAttribute. + //--------------------------------------------------------- + + IMF_EXPORT + unsigned int tileXSize () const; + IMF_EXPORT + unsigned int tileYSize () const; + IMF_EXPORT + LevelMode levelMode () const; + IMF_EXPORT + LevelRoundingMode levelRoundingMode () const; + + //-------------------------------------------------------------------- + // Number of levels: + // + // numXLevels() returns the file's number of levels in x direction. + // + // if levelMode() == ONE_LEVEL: + // return value is: 1 + // + // if levelMode() == MIPMAP_LEVELS: + // return value is: rfunc (log (max (w, h)) / log (2)) + 1 + // + // if levelMode() == RIPMAP_LEVELS: + // return value is: rfunc (log (w) / log (2)) + 1 + // + // where + // w is the width of the image's data window, max.x - min.x + 1, + // y is the height of the image's data window, max.y - min.y + 1, + // and rfunc(x) is either floor(x), or ceil(x), depending on + // whether levelRoundingMode() returns ROUND_DOWN or ROUND_UP. + // + // numYLevels() returns the file's number of levels in y direction. + // + // if levelMode() == ONE_LEVEL or levelMode() == MIPMAP_LEVELS: + // return value is the same as for numXLevels() + // + // if levelMode() == RIPMAP_LEVELS: + // return value is: rfunc (log (h) / log (2)) + 1 + // + // + // numLevels() is a convenience function for use with + // MIPMAP_LEVELS files. + // + // if levelMode() == ONE_LEVEL or levelMode() == MIPMAP_LEVELS: + // return value is the same as for numXLevels() + // + // if levelMode() == RIPMAP_LEVELS: + // an IEX_NAMESPACE::LogicExc exception is thrown + // + // isValidLevel(lx, ly) returns true if the file contains + // a level with level number (lx, ly), false if not. + // + //-------------------------------------------------------------------- + + IMF_EXPORT + int numLevels () const; + IMF_EXPORT + int numXLevels () const; + IMF_EXPORT + int numYLevels () const; + IMF_EXPORT + bool isValidLevel (int lx, int ly) const; + + //---------------------------------------------------------- + // Dimensions of a level: + // + // levelWidth(lx) returns the width of a level with level + // number (lx, *), where * is any number. + // + // return value is: + // max (1, rfunc (w / pow (2, lx))) + // + // + // levelHeight(ly) returns the height of a level with level + // number (*, ly), where * is any number. + // + // return value is: + // max (1, rfunc (h / pow (2, ly))) + // + //---------------------------------------------------------- + + IMF_EXPORT + int levelWidth (int lx) const; + IMF_EXPORT + int levelHeight (int ly) const; + + //-------------------------------------------------------------- + // Number of tiles: + // + // numXTiles(lx) returns the number of tiles in x direction + // that cover a level with level number (lx, *), where * is + // any number. + // + // return value is: + // (levelWidth(lx) + tileXSize() - 1) / tileXSize() + // + // + // numYTiles(ly) returns the number of tiles in y direction + // that cover a level with level number (*, ly), where * is + // any number. + // + // return value is: + // (levelHeight(ly) + tileXSize() - 1) / tileXSize() + // + //-------------------------------------------------------------- + + IMF_EXPORT + int numXTiles (int lx = 0) const; + IMF_EXPORT + int numYTiles (int ly = 0) const; + + //--------------------------------------------------------------- + // Level pixel ranges: + // + // dataWindowForLevel(lx, ly) returns a 2-dimensional region of + // valid pixel coordinates for a level with level number (lx, ly) + // + // return value is a Box2i with min value: + // (dataWindow.min.x, dataWindow.min.y) + // + // and max value: + // (dataWindow.min.x + levelWidth(lx) - 1, + // dataWindow.min.y + levelHeight(ly) - 1) + // + // dataWindowForLevel(level) is a convenience function used + // for ONE_LEVEL and MIPMAP_LEVELS files. It returns + // dataWindowForLevel(level, level). + // + //--------------------------------------------------------------- + + IMF_EXPORT + IMATH_NAMESPACE::Box2i dataWindowForLevel (int l = 0) const; + IMF_EXPORT + IMATH_NAMESPACE::Box2i dataWindowForLevel (int lx, int ly) const; + + //------------------------------------------------------------------- + // Tile pixel ranges: + // + // dataWindowForTile(dx, dy, lx, ly) returns a 2-dimensional + // region of valid pixel coordinates for a tile with tile coordinates + // (dx,dy) and level number (lx, ly). + // + // return value is a Box2i with min value: + // (dataWindow.min.x + dx * tileXSize(), + // dataWindow.min.y + dy * tileYSize()) + // + // and max value: + // (dataWindow.min.x + (dx + 1) * tileXSize() - 1, + // dataWindow.min.y + (dy + 1) * tileYSize() - 1) + // + // dataWindowForTile(dx, dy, level) is a convenience function + // used for ONE_LEVEL and MIPMAP_LEVELS files. It returns + // dataWindowForTile(dx, dy, level, level). + // + //------------------------------------------------------------------- + + IMF_EXPORT + IMATH_NAMESPACE::Box2i dataWindowForTile (int dx, int dy, int l = 0) const; + + IMF_EXPORT + IMATH_NAMESPACE::Box2i + dataWindowForTile (int dx, int dy, int lx, int ly) const; + + //------------------------------------------------------------ + // Read pixel data: + // + // readTile(dx, dy, lx, ly) reads the tile with tile + // coordinates (dx, dy), and level number (lx, ly), + // and stores it in the current frame buffer. + // + // dx must lie in the interval [0, numXTiles(lx)-1] + // dy must lie in the interval [0, numYTiles(ly)-1] + // + // lx must lie in the interval [0, numXLevels()-1] + // ly must lie in the interval [0, numYLevels()-1] + // + // readTile(dx, dy, level) is a convenience function used + // for ONE_LEVEL and MIPMAP_LEVELS files. It calls + // readTile(dx, dy, level, level). + // + // The two readTiles(dx1, dx2, dy1, dy2, ...) functions allow + // reading multiple tiles at once. If multi-threading is used + // the multiple tiles are read concurrently. + // + // Pixels that are outside the pixel coordinate range for the + // tile's level, are never accessed by readTile(). + // + // Attempting to access a tile that is not present in the file + // throws an InputExc exception. + // + //------------------------------------------------------------ + + IMF_EXPORT + void readTile (int dx, int dy, int l = 0); + IMF_EXPORT + void readTile (int dx, int dy, int lx, int ly); + + IMF_EXPORT + void readTiles (int dx1, int dx2, int dy1, int dy2, int lx, int ly); + + IMF_EXPORT + void readTiles (int dx1, int dx2, int dy1, int dy2, int l = 0); + + //-------------------------------------------------- + // Read a tile of raw pixel data from the file, + // without uncompressing it (this function is + // used to implement TiledOutputFile::copyPixels()). + // + // for single part files, reads the next tile in the file + // for multipart files, reads the tile specified by dx,dy,lx,ly + // + //-------------------------------------------------- + + IMF_EXPORT + void rawTileData ( + int& dx, + int& dy, + int& lx, + int& ly, + const char*& pixelData, + int& pixelDataSize); + +private: + Context _ctxt; + struct IMF_HIDDEN Data; + std::shared_ptr _data; + + friend class InputFile; + friend class MultiPartInputFile; + + IMF_HIDDEN + TiledInputFile (InputPartData* part); + + IMF_HIDDEN + bool isValidTile (int dx, int dy, int lx, int ly) const; + + IMF_HIDDEN + size_t bytesPerLineForTile (int dx, int dy, int lx, int ly) const; + + IMF_HIDDEN + void tileOrder (int dx[], int dy[], int lx[], int ly[]) const; + + friend class TiledOutputFile; +}; + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT + +#endif diff --git a/third_party/tlRender-install-Release/include/OpenEXR/ImfTiledInputPart.h b/third_party/tlRender-install-Release/include/OpenEXR/ImfTiledInputPart.h new file mode 100644 index 00000000..fafe7353 --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenEXR/ImfTiledInputPart.h @@ -0,0 +1,98 @@ +// +// SPDX-License-Identifier: BSD-3-Clause +// Copyright (c) Contributors to the OpenEXR Project. +// + +#ifndef IMFTILEDINPUTPART_H_ +#define IMFTILEDINPUTPART_H_ + +#include "ImfForward.h" + +#include "ImfTileDescription.h" +#include + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER + +//----------------------------------------------------------------------------- +// class TiledInputPart: +// +// Same interface as TiledInputFile. Please have a reference to TiledInputFile. +//----------------------------------------------------------------------------- + +class IMF_EXPORT_TYPE TiledInputPart +{ +public: + IMF_EXPORT + TiledInputPart (MultiPartInputFile& multiPartFile, int partNumber); + + IMF_EXPORT + const char* fileName () const; + IMF_EXPORT + const Header& header () const; + IMF_EXPORT + int version () const; + IMF_EXPORT + void setFrameBuffer (const FrameBuffer& frameBuffer); + IMF_EXPORT + const FrameBuffer& frameBuffer () const; + IMF_EXPORT + bool isComplete () const; + IMF_EXPORT + unsigned int tileXSize () const; + IMF_EXPORT + unsigned int tileYSize () const; + IMF_EXPORT + LevelMode levelMode () const; + IMF_EXPORT + LevelRoundingMode levelRoundingMode () const; + IMF_EXPORT + int numLevels () const; + IMF_EXPORT + int numXLevels () const; + IMF_EXPORT + int numYLevels () const; + IMF_EXPORT + bool isValidLevel (int lx, int ly) const; + IMF_EXPORT + int levelWidth (int lx) const; + IMF_EXPORT + int levelHeight (int ly) const; + IMF_EXPORT + int numXTiles (int lx = 0) const; + IMF_EXPORT + int numYTiles (int ly = 0) const; + IMF_EXPORT + IMATH_NAMESPACE::Box2i dataWindowForLevel (int l = 0) const; + IMF_EXPORT + IMATH_NAMESPACE::Box2i dataWindowForLevel (int lx, int ly) const; + IMF_EXPORT + IMATH_NAMESPACE::Box2i dataWindowForTile (int dx, int dy, int l = 0) const; + IMF_EXPORT + IMATH_NAMESPACE::Box2i + dataWindowForTile (int dx, int dy, int lx, int ly) const; + IMF_EXPORT + void readTile (int dx, int dy, int l = 0); + IMF_EXPORT + void readTile (int dx, int dy, int lx, int ly); + IMF_EXPORT + void readTiles (int dx1, int dx2, int dy1, int dy2, int lx, int ly); + IMF_EXPORT + void readTiles (int dx1, int dx2, int dy1, int dy2, int l = 0); + IMF_EXPORT + void rawTileData ( + int& dx, + int& dy, + int& lx, + int& ly, + const char*& pixelData, + int& pixelDataSize); + +private: + TiledInputFile* file; + // for internal use - allow TiledOutputFile access to file for copyPixels + friend class TiledOutputFile; +}; + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT + +#endif /* IMFTILEDINPUTPART_H_ */ diff --git a/third_party/tlRender-install-Release/include/OpenEXR/ImfTiledOutputFile.h b/third_party/tlRender-install-Release/include/OpenEXR/ImfTiledOutputFile.h new file mode 100644 index 00000000..201f09cc --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenEXR/ImfTiledOutputFile.h @@ -0,0 +1,473 @@ +// +// SPDX-License-Identifier: BSD-3-Clause +// Copyright (c) Contributors to the OpenEXR Project. +// + +#ifndef INCLUDED_IMF_TILED_OUTPUT_FILE_H +#define INCLUDED_IMF_TILED_OUTPUT_FILE_H + +//----------------------------------------------------------------------------- +// +// class TiledOutputFile +// +//----------------------------------------------------------------------------- + +#include "ImfForward.h" + +#include "ImfGenericOutputFile.h" +#include "ImfThreading.h" +#include "ImfTileDescription.h" + +#include + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER + +struct PreviewRgba; + +class IMF_EXPORT_TYPE TiledOutputFile : public GenericOutputFile +{ +public: + //------------------------------------------------------------------- + // A constructor that opens the file with the specified name, and + // writes the file header. The file header is also copied into the + // TiledOutputFile object, and can later be accessed via the header() + // method. + // + // Destroying TiledOutputFile constructed with this constructor + // automatically closes the corresponding files. + // + // The header must contain a TileDescriptionAttribute called "tiles". + // + // The x and y subsampling factors for all image channels must be 1; + // subsampling is not supported. + // + // Tiles can be written to the file in arbitrary order. The line + // order attribute can be used to cause the tiles to be sorted in + // the file. When the file is read later, reading the tiles in the + // same order as they are in the file tends to be significantly + // faster than reading the tiles in random order (see writeTile, + // below). + //------------------------------------------------------------------- + + IMF_EXPORT + TiledOutputFile ( + const char fileName[], + const Header& header, + int numThreads = globalThreadCount ()); + + // ---------------------------------------------------------------- + // A constructor that attaches the new TiledOutputFile object to + // a file that has already been opened. Destroying TiledOutputFile + // objects constructed with this constructor does not automatically + // close the corresponding files. + // ---------------------------------------------------------------- + + IMF_EXPORT + TiledOutputFile ( + OPENEXR_IMF_INTERNAL_NAMESPACE::OStream& os, + const Header& header, + int numThreads = globalThreadCount ()); + + //----------------------------------------------------- + // Destructor + // + // Destroying a TiledOutputFile object before all tiles + // have been written results in an incomplete file. + //----------------------------------------------------- + + IMF_EXPORT + virtual ~TiledOutputFile (); + + //------------------------ + // Access to the file name + //------------------------ + + IMF_EXPORT + const char* fileName () const; + + //-------------------------- + // Access to the file header + //-------------------------- + + IMF_EXPORT + const Header& header () const; + + //------------------------------------------------------- + // Set the current frame buffer -- copies the FrameBuffer + // object into the TiledOutputFile object. + // + // The current frame buffer is the source of the pixel + // data written to the file. The current frame buffer + // must be set at least once before writeTile() is + // called. The current frame buffer can be changed + // after each call to writeTile(). + //------------------------------------------------------- + + IMF_EXPORT + void setFrameBuffer (const FrameBuffer& frameBuffer); + + //----------------------------------- + // Access to the current frame buffer + //----------------------------------- + + IMF_EXPORT + const FrameBuffer& frameBuffer () const; + + //------------------- + // Utility functions: + //------------------- + + //--------------------------------------------------------- + // Multiresolution mode and tile size: + // The following functions return the xSize, ySize and mode + // fields of the file header's TileDescriptionAttribute. + //--------------------------------------------------------- + + IMF_EXPORT + unsigned int tileXSize () const; + IMF_EXPORT + unsigned int tileYSize () const; + IMF_EXPORT + LevelMode levelMode () const; + IMF_EXPORT + LevelRoundingMode levelRoundingMode () const; + + //-------------------------------------------------------------------- + // Number of levels: + // + // numXLevels() returns the file's number of levels in x direction. + // + // if levelMode() == ONE_LEVEL: + // return value is: 1 + // + // if levelMode() == MIPMAP_LEVELS: + // return value is: rfunc (log (max (w, h)) / log (2)) + 1 + // + // if levelMode() == RIPMAP_LEVELS: + // return value is: rfunc (log (w) / log (2)) + 1 + // + // where + // w is the width of the image's data window, max.x - min.x + 1, + // y is the height of the image's data window, max.y - min.y + 1, + // and rfunc(x) is either floor(x), or ceil(x), depending on + // whether levelRoundingMode() returns ROUND_DOWN or ROUND_UP. + // + // numYLevels() returns the file's number of levels in y direction. + // + // if levelMode() == ONE_LEVEL or levelMode() == MIPMAP_LEVELS: + // return value is the same as for numXLevels() + // + // if levelMode() == RIPMAP_LEVELS: + // return value is: rfunc (log (h) / log (2)) + 1 + // + // + // numLevels() is a convenience function for use with MIPMAP_LEVELS + // files. + // + // if levelMode() == ONE_LEVEL or levelMode() == MIPMAP_LEVELS: + // return value is the same as for numXLevels() + // + // if levelMode() == RIPMAP_LEVELS: + // an IEX_NAMESPACE::LogicExc exception is thrown + // + // isValidLevel(lx, ly) returns true if the file contains + // a level with level number (lx, ly), false if not. + // + //-------------------------------------------------------------------- + + IMF_EXPORT + int numLevels () const; + IMF_EXPORT + int numXLevels () const; + IMF_EXPORT + int numYLevels () const; + IMF_EXPORT + bool isValidLevel (int lx, int ly) const; + + //--------------------------------------------------------- + // Dimensions of a level: + // + // levelWidth(lx) returns the width of a level with level + // number (lx, *), where * is any number. + // + // return value is: + // max (1, rfunc (w / pow (2, lx))) + // + // + // levelHeight(ly) returns the height of a level with level + // number (*, ly), where * is any number. + // + // return value is: + // max (1, rfunc (h / pow (2, ly))) + // + //--------------------------------------------------------- + + IMF_EXPORT + int levelWidth (int lx) const; + IMF_EXPORT + int levelHeight (int ly) const; + + //---------------------------------------------------------- + // Number of tiles: + // + // numXTiles(lx) returns the number of tiles in x direction + // that cover a level with level number (lx, *), where * is + // any number. + // + // return value is: + // (levelWidth(lx) + tileXSize() - 1) / tileXSize() + // + // + // numYTiles(ly) returns the number of tiles in y direction + // that cover a level with level number (*, ly), where * is + // any number. + // + // return value is: + // (levelHeight(ly) + tileXSize() - 1) / tileXSize() + // + //---------------------------------------------------------- + + IMF_EXPORT + int numXTiles (int lx = 0) const; + IMF_EXPORT + int numYTiles (int ly = 0) const; + + //--------------------------------------------------------- + // Level pixel ranges: + // + // dataWindowForLevel(lx, ly) returns a 2-dimensional + // region of valid pixel coordinates for a level with + // level number (lx, ly) + // + // return value is a Box2i with min value: + // (dataWindow.min.x, dataWindow.min.y) + // + // and max value: + // (dataWindow.min.x + levelWidth(lx) - 1, + // dataWindow.min.y + levelHeight(ly) - 1) + // + // dataWindowForLevel(level) is a convenience function used + // for ONE_LEVEL and MIPMAP_LEVELS files. It returns + // dataWindowForLevel(level, level). + // + //--------------------------------------------------------- + + IMF_EXPORT + IMATH_NAMESPACE::Box2i dataWindowForLevel (int l = 0) const; + IMF_EXPORT + IMATH_NAMESPACE::Box2i dataWindowForLevel (int lx, int ly) const; + + //------------------------------------------------------------------- + // Tile pixel ranges: + // + // dataWindowForTile(dx, dy, lx, ly) returns a 2-dimensional + // region of valid pixel coordinates for a tile with tile coordinates + // (dx,dy) and level number (lx, ly). + // + // return value is a Box2i with min value: + // (dataWindow.min.x + dx * tileXSize(), + // dataWindow.min.y + dy * tileYSize()) + // + // and max value: + // (dataWindow.min.x + (dx + 1) * tileXSize() - 1, + // dataWindow.min.y + (dy + 1) * tileYSize() - 1) + // + // dataWindowForTile(dx, dy, level) is a convenience function + // used for ONE_LEVEL and MIPMAP_LEVELS files. It returns + // dataWindowForTile(dx, dy, level, level). + // + //------------------------------------------------------------------- + + IMF_EXPORT + IMATH_NAMESPACE::Box2i dataWindowForTile (int dx, int dy, int l = 0) const; + + IMF_EXPORT + IMATH_NAMESPACE::Box2i + dataWindowForTile (int dx, int dy, int lx, int ly) const; + + //------------------------------------------------------------------ + // Write pixel data: + // + // writeTile(dx, dy, lx, ly) writes the tile with tile + // coordinates (dx, dy), and level number (lx, ly) to + // the file. + // + // dx must lie in the interval [0, numXTiles(lx) - 1] + // dy must lie in the interval [0, numYTiles(ly) - 1] + // + // lx must lie in the interval [0, numXLevels() - 1] + // ly must lie in the interval [0, numYLevels() - 1] + // + // writeTile(dx, dy, level) is a convenience function + // used for ONE_LEVEL and MIPMAP_LEVEL files. It calls + // writeTile(dx, dy, level, level). + // + // The two writeTiles(dx1, dx2, dy1, dy2, ...) functions allow + // writing multiple tiles at once. If multi-threading is used + // multiple tiles are written concurrently. The tile coordinates, + // dx1, dx2 and dy1, dy2, specify inclusive ranges of tile + // coordinates. It is valid for dx1 < dx2 or dy1 < dy2; the + // tiles are always written in the order specified by the line + // order attribute. Hence, it is not possible to specify an + // "invalid" or empty tile range. + // + // Pixels that are outside the pixel coordinate range for the tile's + // level, are never accessed by writeTile(). + // + // Each tile in the file must be written exactly once. + // + // The file's line order attribute determines the order of the tiles + // in the file: + // + // INCREASING_Y In the file, the tiles for each level are stored + // in a contiguous block. The levels are ordered + // like this: + // + // (0, 0) (1, 0) ... (nx-1, 0) + // (0, 1) (1, 1) ... (nx-1, 1) + // ... + // (0,ny-1) (1,ny-1) ... (nx-1,ny-1) + // + // where nx = numXLevels(), and ny = numYLevels(). + // In an individual level, (lx, ly), the tiles + // are stored in the following order: + // + // (0, 0) (1, 0) ... (tx-1, 0) + // (0, 1) (1, 1) ... (tx-1, 1) + // ... + // (0,ty-1) (1,ty-1) ... (tx-1,ty-1) + // + // where tx = numXTiles(lx), + // and ty = numYTiles(ly). + // + // DECREASING_Y As for INCREASING_Y, the tiles for each level + // are stored in a contiguous block. The levels + // are ordered the same way as for INCREASING_Y, + // but within an individual level, the tiles + // are stored in this order: + // + // (0,ty-1) (1,ty-1) ... (tx-1,ty-1) + // ... + // (0, 1) (1, 1) ... (tx-1, 1) + // (0, 0) (1, 0) ... (tx-1, 0) + // + // + // RANDOM_Y The order of the calls to writeTile() determines + // the order of the tiles in the file. + // + //------------------------------------------------------------------ + + IMF_EXPORT + void writeTile (int dx, int dy, int l = 0); + IMF_EXPORT + void writeTile (int dx, int dy, int lx, int ly); + + IMF_EXPORT + void writeTiles (int dx1, int dx2, int dy1, int dy2, int lx, int ly); + + IMF_EXPORT + void writeTiles (int dx1, int dx2, int dy1, int dy2, int l = 0); + + //------------------------------------------------------------------ + // Shortcut to copy all pixels from a TiledInputFile into this file, + // without uncompressing and then recompressing the pixel data. + // This file's header must be compatible with the TiledInputFile's + // header: The two header's "dataWindow", "compression", + // "lineOrder", "channels", and "tiles" attributes must be the same. + //------------------------------------------------------------------ + + IMF_EXPORT + void copyPixels (TiledInputFile& in); + IMF_EXPORT + void copyPixels (TiledInputPart& in); + + //------------------------------------------------------------------ + // Shortcut to copy all pixels from an InputFile into this file, + // without uncompressing and then recompressing the pixel data. + // This file's header must be compatible with the InputFile's + // header: The two header's "dataWindow", "compression", + // "lineOrder", "channels", and "tiles" attributes must be the same. + // + // To use this function, the InputFile must be tiled. + //------------------------------------------------------------------ + + IMF_EXPORT + void copyPixels (InputFile& in); + IMF_EXPORT + void copyPixels (InputPart& in); + + //-------------------------------------------------------------- + // Updating the preview image: + // + // updatePreviewImage() supplies a new set of pixels for the + // preview image attribute in the file's header. If the header + // does not contain a preview image, updatePreviewImage() throws + // an IEX_NAMESPACE::LogicExc. + // + // Note: updatePreviewImage() is necessary because images are + // often stored in a file incrementally, a few tiles at a time, + // while the image is being generated. Since the preview image + // is an attribute in the file's header, it gets stored in the + // file as soon as the file is opened, but we may not know what + // the preview image should look like until we have written the + // last tile of the main image. + // + //-------------------------------------------------------------- + + IMF_EXPORT + void updatePreviewImage (const PreviewRgba newPixels[]); + + //------------------------------------------------------------- + // Break a tile -- for testing and debugging only: + // + // breakTile(dx,dy,lx,ly,p,n,c) introduces an error into the + // output file by writing n copies of character c, starting + // p bytes from the beginning of the tile with tile coordinates + // (dx, dy) and level number (lx, ly). + // + // Warning: Calling this function usually results in a broken + // image file. The file or parts of it may not be readable, + // or the file may contain bad data. + // + //------------------------------------------------------------- + + IMF_EXPORT + void + breakTile (int dx, int dy, int lx, int ly, int offset, int length, char c); + struct IMF_HIDDEN Data; + +private: + // ---------------------------------------------------------------- + // A constructor attaches the OutputStreamMutex to the + // given one from MultiPartOutputFile. Set the previewPosition + // and lineOffsetsPosition which have been acquired from + // the constructor of MultiPartOutputFile as well. + // ---------------------------------------------------------------- + IMF_HIDDEN + TiledOutputFile (const OutputPartData* part); + + TiledOutputFile (const TiledOutputFile&) = delete; + TiledOutputFile& operator= (const TiledOutputFile&) = delete; + TiledOutputFile (TiledOutputFile&&) = delete; + TiledOutputFile& operator= (TiledOutputFile&&) = delete; + + IMF_HIDDEN + void initialize (const Header& header); + + IMF_HIDDEN + bool isValidTile (int dx, int dy, int lx, int ly) const; + + IMF_HIDDEN + size_t bytesPerLineForTile (int dx, int dy, int lx, int ly) const; + + Data* _data; + + OutputStreamMutex* _streamData; + bool _deleteStream; + + friend class MultiPartOutputFile; +}; + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT + +#endif diff --git a/third_party/tlRender-install-Release/include/OpenEXR/ImfTiledOutputPart.h b/third_party/tlRender-install-Release/include/OpenEXR/ImfTiledOutputPart.h new file mode 100644 index 00000000..60b44cc6 --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenEXR/ImfTiledOutputPart.h @@ -0,0 +1,98 @@ +// +// SPDX-License-Identifier: BSD-3-Clause +// Copyright (c) Contributors to the OpenEXR Project. +// + +#ifndef IMFTILEDOUTPUTPART_H_ +#define IMFTILEDOUTPUTPART_H_ + +#include "ImfForward.h" + +#include "ImfTileDescription.h" +#include + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER + +//------------------------------------------------------------------------------- +// class TiledOutputPart: +// +// Same interface as TiledOutputFile. Please have a reference to TiledOutputFile. +//------------------------------------------------------------------------------- + +class TiledOutputPart +{ +public: + IMF_EXPORT + TiledOutputPart (MultiPartOutputFile& multiPartFile, int partNumber); + + IMF_EXPORT + const char* fileName () const; + IMF_EXPORT + const Header& header () const; + IMF_EXPORT + void setFrameBuffer (const FrameBuffer& frameBuffer); + IMF_EXPORT + const FrameBuffer& frameBuffer () const; + IMF_EXPORT + unsigned int tileXSize () const; + IMF_EXPORT + unsigned int tileYSize () const; + IMF_EXPORT + LevelMode levelMode () const; + IMF_EXPORT + LevelRoundingMode levelRoundingMode () const; + IMF_EXPORT + int numLevels () const; + IMF_EXPORT + int numXLevels () const; + IMF_EXPORT + int numYLevels () const; + IMF_EXPORT + bool isValidLevel (int lx, int ly) const; + IMF_EXPORT + int levelWidth (int lx) const; + IMF_EXPORT + int levelHeight (int ly) const; + IMF_EXPORT + int numXTiles (int lx = 0) const; + IMF_EXPORT + int numYTiles (int ly = 0) const; + IMF_EXPORT + IMATH_NAMESPACE::Box2i dataWindowForLevel (int l = 0) const; + IMF_EXPORT + IMATH_NAMESPACE::Box2i dataWindowForLevel (int lx, int ly) const; + IMF_EXPORT + IMATH_NAMESPACE::Box2i dataWindowForTile (int dx, int dy, int l = 0) const; + IMF_EXPORT + IMATH_NAMESPACE::Box2i + dataWindowForTile (int dx, int dy, int lx, int ly) const; + IMF_EXPORT + void writeTile (int dx, int dy, int l = 0); + IMF_EXPORT + void writeTile (int dx, int dy, int lx, int ly); + IMF_EXPORT + void writeTiles (int dx1, int dx2, int dy1, int dy2, int lx, int ly); + IMF_EXPORT + void writeTiles (int dx1, int dx2, int dy1, int dy2, int l = 0); + IMF_EXPORT + void copyPixels (TiledInputFile& in); + IMF_EXPORT + void copyPixels (InputFile& in); + IMF_EXPORT + void copyPixels (TiledInputPart& in); + IMF_EXPORT + void copyPixels (InputPart& in); + + IMF_EXPORT + void updatePreviewImage (const PreviewRgba newPixels[]); + IMF_EXPORT + void + breakTile (int dx, int dy, int lx, int ly, int offset, int length, char c); + +private: + TiledOutputFile* file; +}; + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT + +#endif /* IMFTILEDOUTPUTPART_H_ */ diff --git a/third_party/tlRender-install-Release/include/OpenEXR/ImfTiledRgbaFile.h b/third_party/tlRender-install-Release/include/OpenEXR/ImfTiledRgbaFile.h new file mode 100644 index 00000000..054a7e7b --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenEXR/ImfTiledRgbaFile.h @@ -0,0 +1,522 @@ +// +// SPDX-License-Identifier: BSD-3-Clause +// Copyright (c) Contributors to the OpenEXR Project. +// + +#ifndef INCLUDED_IMF_TILED_RGBA_FILE_H +#define INCLUDED_IMF_TILED_RGBA_FILE_H + +//----------------------------------------------------------------------------- +// +// Simplified RGBA image I/O for tiled files +// +// class TiledRgbaOutputFile +// class TiledRgbaInputFile +// +//----------------------------------------------------------------------------- + +#include "ImfForward.h" + +#include "ImfCompression.h" +#include "ImfLineOrder.h" +#include "ImfRgba.h" +#include "ImfThreading.h" +#include "ImfTileDescription.h" + +#include "ImfContextInit.h" + +#include +#include +#include + +#include + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER + +// +// Tiled RGBA output file. +// + +class IMF_EXPORT_TYPE TiledRgbaOutputFile +{ +public: + //--------------------------------------------------- + // Constructor -- rgbaChannels, tileXSize, tileYSize, + // levelMode, and levelRoundingMode overwrite the + // channel list and tile description attribute in the + // header that is passed as an argument to the + // constructor. + //--------------------------------------------------- + + IMF_EXPORT + TiledRgbaOutputFile ( + const char name[], + const Header& header, + RgbaChannels rgbaChannels, + int tileXSize, + int tileYSize, + LevelMode mode, + LevelRoundingMode rmode = ROUND_DOWN, + int numThreads = globalThreadCount ()); + + //--------------------------------------------------- + // Constructor -- like the previous one, but the new + // TiledRgbaOutputFile is attached to a file that has + // already been opened by the caller. Destroying + // TiledRgbaOutputFileObjects constructed with this + // constructor does not automatically close the + // corresponding files. + //--------------------------------------------------- + + IMF_EXPORT + TiledRgbaOutputFile ( + OPENEXR_IMF_INTERNAL_NAMESPACE::OStream& os, + const Header& header, + RgbaChannels rgbaChannels, + int tileXSize, + int tileYSize, + LevelMode mode, + LevelRoundingMode rmode = ROUND_DOWN, + int numThreads = globalThreadCount ()); + + //------------------------------------------------------ + // Constructor -- header data are explicitly specified + // as function call arguments (an empty dataWindow means + // "same as displayWindow") + //------------------------------------------------------ + + IMF_EXPORT + TiledRgbaOutputFile ( + const char name[], + int tileXSize, + int tileYSize, + LevelMode mode, + LevelRoundingMode rmode, + const IMATH_NAMESPACE::Box2i& displayWindow, + const IMATH_NAMESPACE::Box2i& dataWindow = IMATH_NAMESPACE::Box2i (), + RgbaChannels rgbaChannels = WRITE_RGBA, + float pixelAspectRatio = 1, + const IMATH_NAMESPACE::V2f screenWindowCenter = + IMATH_NAMESPACE::V2f (0, 0), + float screenWindowWidth = 1, + LineOrder lineOrder = INCREASING_Y, + Compression compression = ZIP_COMPRESSION, + int numThreads = globalThreadCount ()); + + //----------------------------------------------- + // Constructor -- like the previous one, but both + // the display window and the data window are + // Box2i (V2i (0, 0), V2i (width - 1, height -1)) + //----------------------------------------------- + + IMF_EXPORT + TiledRgbaOutputFile ( + const char name[], + int width, + int height, + int tileXSize, + int tileYSize, + LevelMode mode, + LevelRoundingMode rmode = ROUND_DOWN, + RgbaChannels rgbaChannels = WRITE_RGBA, + float pixelAspectRatio = 1, + const IMATH_NAMESPACE::V2f screenWindowCenter = + IMATH_NAMESPACE::V2f (0, 0), + float screenWindowWidth = 1, + LineOrder lineOrder = INCREASING_Y, + Compression compression = ZIP_COMPRESSION, + int numThreads = globalThreadCount ()); + + IMF_EXPORT + virtual ~TiledRgbaOutputFile (); + + //------------------------------------------------ + // Define a frame buffer as the pixel data source: + // Pixel (x, y) is at address + // + // base + x * xStride + y * yStride + // + //------------------------------------------------ + + IMF_EXPORT + void setFrameBuffer (const Rgba* base, size_t xStride, size_t yStride); + + //-------------------------- + // Access to the file header + //-------------------------- + + IMF_EXPORT + const Header& header () const; + IMF_EXPORT + const FrameBuffer& frameBuffer () const; + IMF_EXPORT + const IMATH_NAMESPACE::Box2i& displayWindow () const; + IMF_EXPORT + const IMATH_NAMESPACE::Box2i& dataWindow () const; + IMF_EXPORT + float pixelAspectRatio () const; + IMF_EXPORT + const IMATH_NAMESPACE::V2f screenWindowCenter () const; + IMF_EXPORT + float screenWindowWidth () const; + IMF_EXPORT + LineOrder lineOrder () const; + IMF_EXPORT + Compression compression () const; + IMF_EXPORT + RgbaChannels channels () const; + + //---------------------------------------------------- + // Utility functions (same as in Imf::TiledOutputFile) + //---------------------------------------------------- + + IMF_EXPORT + unsigned int tileXSize () const; + IMF_EXPORT + unsigned int tileYSize () const; + IMF_EXPORT + LevelMode levelMode () const; + IMF_EXPORT + LevelRoundingMode levelRoundingMode () const; + + IMF_EXPORT + int numLevels () const; + IMF_EXPORT + int numXLevels () const; + IMF_EXPORT + int numYLevels () const; + IMF_EXPORT + bool isValidLevel (int lx, int ly) const; + + IMF_EXPORT + int levelWidth (int lx) const; + IMF_EXPORT + int levelHeight (int ly) const; + + IMF_EXPORT + int numXTiles (int lx = 0) const; + IMF_EXPORT + int numYTiles (int ly = 0) const; + + IMF_EXPORT + IMATH_NAMESPACE::Box2i dataWindowForLevel (int l = 0) const; + IMF_EXPORT + IMATH_NAMESPACE::Box2i dataWindowForLevel (int lx, int ly) const; + + IMF_EXPORT + IMATH_NAMESPACE::Box2i dataWindowForTile (int dx, int dy, int l = 0) const; + + IMF_EXPORT + IMATH_NAMESPACE::Box2i + dataWindowForTile (int dx, int dy, int lx, int ly) const; + + //------------------------------------------------------------------ + // Write pixel data: + // + // writeTile(dx, dy, lx, ly) writes the tile with tile + // coordinates (dx, dy), and level number (lx, ly) to + // the file. + // + // dx must lie in the interval [0, numXTiles(lx)-1] + // dy must lie in the interval [0, numYTiles(ly)-1] + // + // lx must lie in the interval [0, numXLevels()-1] + // ly must lie in the interval [0, numYLevels()-1] + // + // writeTile(dx, dy, level) is a convenience function + // used for ONE_LEVEL and MIPMAP_LEVEL files. It calls + // writeTile(dx, dy, level, level). + // + // The two writeTiles(dx1, dx2, dy1, dy2, ...) functions allow + // writing multiple tiles at once. If multi-threading is used + // multiple tiles are written concurrently. + // + // Pixels that are outside the pixel coordinate range for the tile's + // level, are never accessed by writeTile(). + // + // Each tile in the file must be written exactly once. + // + //------------------------------------------------------------------ + + IMF_EXPORT + void writeTile (int dx, int dy, int l = 0); + IMF_EXPORT + void writeTile (int dx, int dy, int lx, int ly); + + IMF_EXPORT + void + writeTiles (int dxMin, int dxMax, int dyMin, int dyMax, int lx, int ly); + + IMF_EXPORT + void writeTiles (int dxMin, int dxMax, int dyMin, int dyMax, int l = 0); + + // ------------------------------------------------------------------------- + // Update the preview image (see Imf::TiledOutputFile::updatePreviewImage()) + // ------------------------------------------------------------------------- + + IMF_EXPORT + void updatePreviewImage (const PreviewRgba[]); + + //------------------------------------------------ + // Break a tile -- for testing and debugging only + // (see Imf::TiledOutputFile::breakTile()) + // + // Warning: Calling this function usually results + // in a broken image file. The file or parts of + // it may not be readable, or the file may contain + // bad data. + // + //------------------------------------------------ + + IMF_EXPORT + void + breakTile (int dx, int dy, int lx, int ly, int offset, int length, char c); + +private: + // + // Copy constructor and assignment are not implemented + // + + TiledRgbaOutputFile (const TiledRgbaOutputFile&) = delete; + TiledRgbaOutputFile& operator= (const TiledRgbaOutputFile&) = delete; + TiledRgbaOutputFile (TiledRgbaOutputFile&&) = delete; + TiledRgbaOutputFile& operator= (TiledRgbaOutputFile&&) = delete; + + class IMF_HIDDEN ToYa; + + TiledOutputFile* _outputFile; + ToYa* _toYa; +}; + +// +// Tiled RGBA input file +// + +class IMF_EXPORT_TYPE TiledRgbaInputFile +{ +public: + //-------------------------------------------------------- + // Constructor -- opens the file with the specified name. + // Destroying TiledRgbaInputFile objects constructed with + // this constructor automatically closes the corresponding + // files. + //-------------------------------------------------------- + + IMF_EXPORT + TiledRgbaInputFile ( + const char name[], + const ContextInitializer &ctxt, + const std::string& layerName, + int numThreads = globalThreadCount ()); + + //-------------------------------------------------------- + // Constructor -- opens the file with the specified name. + // Destroying TiledRgbaInputFile objects constructed with + // this constructor automatically closes the corresponding + // files. + //-------------------------------------------------------- + + IMF_EXPORT + TiledRgbaInputFile ( + const char name[], int numThreads = globalThreadCount ()); + + //------------------------------------------------------- + // Constructor -- attaches the new TiledRgbaInputFile + // object to a file that has already been opened by the + // caller. + // Destroying TiledRgbaInputFile objects constructed with + // this constructor does not automatically close the + // corresponding files. + //------------------------------------------------------- + + IMF_EXPORT + TiledRgbaInputFile ( + OPENEXR_IMF_INTERNAL_NAMESPACE::IStream& is, + int numThreads = globalThreadCount ()); + + //------------------------------------------------------------ + // Constructors -- the same as the previous two, but the names + // of the red, green, blue, alpha, and luminance channels are + // expected to be layerName.R, layerName.G, etc. + //------------------------------------------------------------ + + IMF_EXPORT + TiledRgbaInputFile ( + const char name[], + const std::string& layerName, + int numThreads = globalThreadCount ()); + + IMF_EXPORT + TiledRgbaInputFile ( + OPENEXR_IMF_INTERNAL_NAMESPACE::IStream& is, + const std::string& layerName, + int numThreads = globalThreadCount ()); + + //----------- + // Destructor + //----------- + + IMF_EXPORT + virtual ~TiledRgbaInputFile (); + + //----------------------------------------------------- + // Define a frame buffer as the pixel data destination: + // Pixel (x, y) is at address + // + // base + x * xStride + y * yStride + // + //----------------------------------------------------- + + IMF_EXPORT + void setFrameBuffer (Rgba* base, size_t xStride, size_t yStride); + + //------------------------------------------------------------------- + // Switch to a different layer -- subsequent calls to readTile() + // and readTiles() will read channels layerName.R, layerName.G, etc. + // After each call to setLayerName(), setFrameBuffer() must be called + // at least once before the next call to readTile() or readTiles(). + //------------------------------------------------------------------- + + IMF_EXPORT + void setLayerName (const std::string& layerName); + + //-------------------------- + // Access to the file header + //-------------------------- + + IMF_EXPORT + const Header& header () const; + IMF_EXPORT + const FrameBuffer& frameBuffer () const; + IMF_EXPORT + const IMATH_NAMESPACE::Box2i& displayWindow () const; + IMF_EXPORT + const IMATH_NAMESPACE::Box2i& dataWindow () const; + IMF_EXPORT + float pixelAspectRatio () const; + IMF_EXPORT + const IMATH_NAMESPACE::V2f screenWindowCenter () const; + IMF_EXPORT + float screenWindowWidth () const; + IMF_EXPORT + LineOrder lineOrder () const; + IMF_EXPORT + Compression compression () const; + IMF_EXPORT + RgbaChannels channels () const; + IMF_EXPORT + const char* fileName () const; + IMF_EXPORT + bool isComplete () const; + + //---------------------------------- + // Access to the file format version + //---------------------------------- + + IMF_EXPORT + int version () const; + + //--------------------------------------------------- + // Utility functions (same as in Imf::TiledInputFile) + //--------------------------------------------------- + + IMF_EXPORT + unsigned int tileXSize () const; + IMF_EXPORT + unsigned int tileYSize () const; + IMF_EXPORT + LevelMode levelMode () const; + IMF_EXPORT + LevelRoundingMode levelRoundingMode () const; + + IMF_EXPORT + int numLevels () const; + IMF_EXPORT + int numXLevels () const; + IMF_EXPORT + int numYLevels () const; + IMF_EXPORT + bool isValidLevel (int lx, int ly) const; + + IMF_EXPORT + int levelWidth (int lx) const; + IMF_EXPORT + int levelHeight (int ly) const; + + IMF_EXPORT + int numXTiles (int lx = 0) const; + IMF_EXPORT + int numYTiles (int ly = 0) const; + + IMF_EXPORT + IMATH_NAMESPACE::Box2i dataWindowForLevel (int l = 0) const; + IMF_EXPORT + IMATH_NAMESPACE::Box2i dataWindowForLevel (int lx, int ly) const; + + IMF_EXPORT + IMATH_NAMESPACE::Box2i dataWindowForTile (int dx, int dy, int l = 0) const; + + IMF_EXPORT + IMATH_NAMESPACE::Box2i + dataWindowForTile (int dx, int dy, int lx, int ly) const; + + //---------------------------------------------------------------- + // Read pixel data: + // + // readTile(dx, dy, lx, ly) reads the tile with tile + // coordinates (dx, dy), and level number (lx, ly), + // and stores it in the current frame buffer. + // + // dx must lie in the interval [0, numXTiles(lx)-1] + // dy must lie in the interval [0, numYTiles(ly)-1] + // + // lx must lie in the interval [0, numXLevels()-1] + // ly must lie in the interval [0, numYLevels()-1] + // + // readTile(dx, dy, level) is a convenience function used + // for ONE_LEVEL and MIPMAP_LEVELS files. It calls + // readTile(dx, dy, level, level). + // + // The two readTiles(dx1, dx2, dy1, dy2, ...) functions allow + // reading multiple tiles at once. If multi-threading is used + // multiple tiles are read concurrently. + // + // Pixels that are outside the pixel coordinate range for the + // tile's level, are never accessed by readTile(). + // + // Attempting to access a tile that is not present in the file + // throws an InputExc exception. + // + //---------------------------------------------------------------- + + IMF_EXPORT + void readTile (int dx, int dy, int l = 0); + IMF_EXPORT + void readTile (int dx, int dy, int lx, int ly); + + IMF_EXPORT + void readTiles (int dxMin, int dxMax, int dyMin, int dyMax, int lx, int ly); + + IMF_EXPORT + void readTiles (int dxMin, int dxMax, int dyMin, int dyMax, int l = 0); + +private: + // + // Copy constructor and assignment are not implemented + // + + TiledRgbaInputFile (const TiledRgbaInputFile&) = delete; + TiledRgbaInputFile& operator= (const TiledRgbaInputFile&) = delete; + TiledRgbaInputFile (TiledRgbaInputFile&&) = delete; + TiledRgbaInputFile& operator= (TiledRgbaInputFile&&) = delete; + + class FromYa; + + TiledInputFile* _inputFile; + FromYa* _fromYa; + std::string _channelNamePrefix; +}; + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT + +#endif diff --git a/third_party/tlRender-install-Release/include/OpenEXR/ImfTimeCode.h b/third_party/tlRender-install-Release/include/OpenEXR/ImfTimeCode.h new file mode 100644 index 00000000..7ad84454 --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenEXR/ImfTimeCode.h @@ -0,0 +1,235 @@ +// +// SPDX-License-Identifier: BSD-3-Clause +// Copyright (c) Contributors to the OpenEXR Project. +// + +#ifndef INCLUDED_IMF_TIME_CODE_H +#define INCLUDED_IMF_TIME_CODE_H + +#include "ImfExport.h" +#include "ImfNamespace.h" + +//----------------------------------------------------------------------------- +// +// class TimeCode +// +// A TimeCode object stores time and control codes as described +// in SMPTE standard 12M-1999. A TimeCode object contains the +// following fields: +// +// Time Address: +// +// hours integer, range 0 - 23 +// minutes integer, range 0 - 59 +// seconds integer, range 0 - 59 +// frame integer, range 0 - 29 +// +// Flags: +// +// drop frame flag boolean +// color frame flag boolean +// field/phase flag boolean +// bgf0 boolean +// bgf1 boolean +// bgf2 boolean +// +// Binary groups for user-defined data and control codes: +// +// binary group 1 integer, range 0 - 15 +// binary group 2 integer, range 0 - 15 +// ... +// binary group 8 integer, range 0 - 15 +// +// Class TimeCode contains methods to convert between the fields +// listed above and a more compact representation where the fields +// are packed into two unsigned 32-bit integers. In the packed +// integer representations, bit 0 is the least significant bit, +// and bit 31 is the most significant bit of the integer value. +// +// The time address and flags fields can be packed in three +// different ways: +// +// bits packing for packing for packing for +// 24-frame 60-field 50-field +// film television television +// +// 0 - 3 frame units frame units frame units +// 4 - 5 frame tens frame tens frame tens +// 6 unused, set to 0 drop frame flag unused, set to 0 +// 7 unused, set to 0 color frame flag color frame flag +// 8 - 11 seconds units seconds units seconds units +// 12 - 14 seconds tens seconds tens seconds tens +// 15 phase flag field/phase flag bgf0 +// 16 - 19 minutes units minutes units minutes units +// 20 - 22 minutes tens minutes tens minutes tens +// 23 bgf0 bgf0 bgf2 +// 24 - 27 hours units hours units hours units +// 28 - 29 hours tens hours tens hours tens +// 30 bgf1 bgf1 bgf1 +// 31 bgf2 bgf2 field/phase flag +// +// User-defined data and control codes are packed as follows: +// +// bits field +// +// 0 - 3 binary group 1 +// 4 - 7 binary group 2 +// 8 - 11 binary group 3 +// 12 - 15 binary group 4 +// 16 - 19 binary group 5 +// 20 - 23 binary group 6 +// 24 - 27 binary group 7 +// 28 - 31 binary group 8 +// +//----------------------------------------------------------------------------- + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER + +class IMF_EXPORT_TYPE TimeCode +{ +public: + //--------------------- + // Bit packing variants + //--------------------- + + enum IMF_EXPORT_ENUM Packing + { + TV60_PACKING, // packing for 60-field television + TV50_PACKING, // packing for 50-field television + FILM24_PACKING // packing for 24-frame film + }; + + //------------------------------------- + // Constructors and assignment operator + //------------------------------------- + + IMF_EXPORT + TimeCode (); // all fields set to 0 or false + + IMF_EXPORT + TimeCode ( + int hours, + int minutes, + int seconds, + int frame, + bool dropFrame = false, + bool colorFrame = false, + bool fieldPhase = false, + bool bgf0 = false, + bool bgf1 = false, + bool bgf2 = false, + int binaryGroup1 = 0, + int binaryGroup2 = 0, + int binaryGroup3 = 0, + int binaryGroup4 = 0, + int binaryGroup5 = 0, + int binaryGroup6 = 0, + int binaryGroup7 = 0, + int binaryGroup8 = 0); + + IMF_EXPORT + TimeCode ( + unsigned int timeAndFlags, + unsigned int userData = 0, + Packing packing = TV60_PACKING); + + IMF_EXPORT + TimeCode (const TimeCode& other); + + ~TimeCode () = default; + + IMF_EXPORT + TimeCode& operator= (const TimeCode& other); + + //---------------------------- + // Access to individual fields + //---------------------------- + + IMF_EXPORT + int hours () const; + IMF_EXPORT + void setHours (int value); + + IMF_EXPORT + int minutes () const; + IMF_EXPORT + void setMinutes (int value); + + IMF_EXPORT + int seconds () const; + IMF_EXPORT + void setSeconds (int value); + + IMF_EXPORT + int frame () const; + IMF_EXPORT + void setFrame (int value); + + IMF_EXPORT + bool dropFrame () const; + IMF_EXPORT + void setDropFrame (bool value); + + IMF_EXPORT + bool colorFrame () const; + IMF_EXPORT + void setColorFrame (bool value); + + IMF_EXPORT + bool fieldPhase () const; + IMF_EXPORT + void setFieldPhase (bool value); + + IMF_EXPORT + bool bgf0 () const; + IMF_EXPORT + void setBgf0 (bool value); + + IMF_EXPORT + bool bgf1 () const; + IMF_EXPORT + void setBgf1 (bool value); + + IMF_EXPORT + bool bgf2 () const; + IMF_EXPORT + void setBgf2 (bool value); + + IMF_EXPORT + int binaryGroup (int group) const; // group must be between 1 and 8 + IMF_EXPORT + void setBinaryGroup (int group, int value); + + //--------------------------------- + // Access to packed representations + //--------------------------------- + + IMF_EXPORT + unsigned int timeAndFlags (Packing packing = TV60_PACKING) const; + + IMF_EXPORT + void setTimeAndFlags (unsigned int value, Packing packing = TV60_PACKING); + + IMF_EXPORT + unsigned int userData () const; + + IMF_EXPORT + void setUserData (unsigned int value); + + //--------- + // Equality + //--------- + + IMF_EXPORT + bool operator== (const TimeCode& v) const; + IMF_EXPORT + bool operator!= (const TimeCode& v) const; + +private: + unsigned int _time; + unsigned int _user; +}; + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT + +#endif diff --git a/third_party/tlRender-install-Release/include/OpenEXR/ImfTimeCodeAttribute.h b/third_party/tlRender-install-Release/include/OpenEXR/ImfTimeCodeAttribute.h new file mode 100644 index 00000000..7da3abd9 --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenEXR/ImfTimeCodeAttribute.h @@ -0,0 +1,33 @@ +// +// SPDX-License-Identifier: BSD-3-Clause +// Copyright (c) Contributors to the OpenEXR Project. +// + +#ifndef INCLUDED_IMF_TIME_CODE_ATTRIBUTE_H +#define INCLUDED_IMF_TIME_CODE_ATTRIBUTE_H + +//----------------------------------------------------------------------------- +// +// class TimeCodeAttribute +// +//----------------------------------------------------------------------------- + +#include "ImfExport.h" +#include "ImfNamespace.h" + +#include "ImfAttribute.h" +#include "ImfTimeCode.h" + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER + +typedef TypedAttribute + TimeCodeAttribute; + +#ifndef COMPILING_IMF_TIMECODE_ATTRIBUTE +extern template class IMF_EXPORT_EXTERN_TEMPLATE + TypedAttribute; +#endif + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT + +#endif diff --git a/third_party/tlRender-install-Release/include/OpenEXR/ImfUtilExport.h b/third_party/tlRender-install-Release/include/OpenEXR/ImfUtilExport.h new file mode 100644 index 00000000..94e639e6 --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenEXR/ImfUtilExport.h @@ -0,0 +1,63 @@ +// +// SPDX-License-Identifier: BSD-3-Clause +// Copyright (c) Contributors to the OpenEXR Project. +// + +#ifndef INCLUDED_IMFUTILEXPORT_H +#define INCLUDED_IMFUTILEXPORT_H + +#include "OpenEXRConfig.h" + +/// \addtogroup ExportMacros +/// @{ + +// are we making a DLL under windows (might be msvc or mingw or others) +#if defined(OPENEXR_DLL) + +# if defined(OPENEXRUTIL_EXPORTS) +# define IMFUTIL_EXPORT __declspec (dllexport) + +// mingw needs the export when the extern is defined +# if defined(__MINGW32__) +# define IMFUTIL_EXPORT_EXTERN_TEMPLATE IMFUTIL_EXPORT +# define IMFUTIL_EXPORT_TEMPLATE_INSTANCE +// for mingw windows, we need to cause this to export the +// typeinfo tables (but you don't need to have the +// complementary import, because might be a local template too!) +# define IMFUTIL_EXPORT_TEMPLATE_TYPE IMFUTIL_EXPORT +# else +// for normal msvc, need to export the actual instantiation in +// the cpp code, and none of the others +# define IMFUTIL_EXPORT_EXTERN_TEMPLATE +# define IMFUTIL_EXPORT_TEMPLATE_INSTANCE IMFUTIL_EXPORT +# define IMFUTIL_EXPORT_TEMPLATE_TYPE +# endif + +# else // OPENEXRUTIL_EXPORTS +# define IMFUTIL_EXPORT __declspec (dllimport) +# define IMFUTIL_EXPORT_EXTERN_TEMPLATE IMFUTIL_EXPORT +# define IMFUTIL_EXPORT_TEMPLATE_INSTANCE +# define IMFUTIL_EXPORT_TEMPLATE_TYPE +# endif + +// DLLs don't support these types of visibility controls, just leave them as empty +# define IMFUTIL_EXPORT_TYPE +# define IMFUTIL_EXPORT_ENUM +# define IMFUTIL_HIDDEN + +#else // not an OPENEXR_DLL + +// just pass these through from the top level config +# define IMFUTIL_EXPORT OPENEXR_EXPORT +# define IMFUTIL_HIDDEN OPENEXR_HIDDEN +# define IMFUTIL_EXPORT_ENUM OPENEXR_EXPORT_ENUM +# define IMFUTIL_EXPORT_TYPE OPENEXR_EXPORT_TYPE +# define IMFUTIL_EXPORT_TEMPLATE_TYPE OPENEXR_EXPORT_TEMPLATE_TYPE +# define IMFUTIL_EXPORT_EXTERN_TEMPLATE OPENEXR_EXPORT_EXTERN_TEMPLATE +# define IMFUTIL_EXPORT_TEMPLATE_INSTANCE OPENEXR_EXPORT_TEMPLATE_INSTANCE + +#endif // OPENEXR_DLL + +/// @} + +#endif // INCLUDED_IMFUTILEXPORT_H diff --git a/third_party/tlRender-install-Release/include/OpenEXR/ImfVecAttribute.h b/third_party/tlRender-install-Release/include/OpenEXR/ImfVecAttribute.h new file mode 100644 index 00000000..51efebe2 --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenEXR/ImfVecAttribute.h @@ -0,0 +1,64 @@ +// +// SPDX-License-Identifier: BSD-3-Clause +// Copyright (c) Contributors to the OpenEXR Project. +// + +#ifndef INCLUDED_IMF_VEC_ATTRIBUTE_H +#define INCLUDED_IMF_VEC_ATTRIBUTE_H + +//----------------------------------------------------------------------------- +// +// class V2iAttribute +// class V2fAttribute +// class V2dAttribute +// class V3iAttribute +// class V3fAttribute +// class V3dAttribute +// +//----------------------------------------------------------------------------- + +#include "ImfExport.h" +#include "ImfNamespace.h" + +#include "ImfAttribute.h" +#include + +#if defined(_MSC_VER) +// suppress warning about non-exported base classes +# pragma warning(push) +# pragma warning(disable : 4251) +# pragma warning(disable : 4275) +#endif + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER + +typedef TypedAttribute V2iAttribute; +typedef TypedAttribute V2fAttribute; +typedef TypedAttribute V2dAttribute; +typedef TypedAttribute V3iAttribute; +typedef TypedAttribute V3fAttribute; +typedef TypedAttribute V3dAttribute; + +#ifndef COMPILING_IMF_VECTOR_ATTRIBUTE +extern template class IMF_EXPORT_EXTERN_TEMPLATE + TypedAttribute; +extern template class IMF_EXPORT_EXTERN_TEMPLATE + TypedAttribute; +extern template class IMF_EXPORT_EXTERN_TEMPLATE + TypedAttribute; +extern template class IMF_EXPORT_EXTERN_TEMPLATE + TypedAttribute; +extern template class IMF_EXPORT_EXTERN_TEMPLATE + TypedAttribute; +extern template class IMF_EXPORT_EXTERN_TEMPLATE + TypedAttribute; +#endif + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT + +#if defined(_MSC_VER) +// suppress warning about non-exported base classes +# pragma warning(pop) +#endif + +#endif diff --git a/third_party/tlRender-install-Release/include/OpenEXR/ImfVersion.h b/third_party/tlRender-install-Release/include/OpenEXR/ImfVersion.h new file mode 100644 index 00000000..d2a3ca87 --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenEXR/ImfVersion.h @@ -0,0 +1,124 @@ +// +// SPDX-License-Identifier: BSD-3-Clause +// Copyright (c) Contributors to the OpenEXR Project. +// + +#ifndef INCLUDED_IMF_VERSION_H +#define INCLUDED_IMF_VERSION_H + +//----------------------------------------------------------------------------- +// +// Magic and version number. +// +//----------------------------------------------------------------------------- + +#include "ImfExport.h" +#include "ImfNamespace.h" + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER + +// +// The MAGIC number is stored in the first four bytes of every +// OpenEXR image file. This can be used to quickly test whether +// a given file is an OpenEXR image file (see isImfMagic(), below). +// + +static const int MAGIC = 20000630; + +// +// The second item in each OpenEXR image file, right after the +// magic number, is a four-byte file version identifier. Depending +// on a file's version identifier, a file reader can enable various +// backwards-compatibility switches, or it can quickly reject files +// that it cannot read. +// +// The version identifier is split into an 8-bit version number, +// and a 24-bit flags field. +// + +static const int VERSION_NUMBER_FIELD = 0x000000ff; +static const int VERSION_FLAGS_FIELD = 0xffffff00; + +// +// Value that goes into VERSION_NUMBER_FIELD. +// + +static const int EXR_VERSION = 2; + +// +// Flags that can go into VERSION_FLAGS_FIELD. +// Flags can only occupy the 1 bits in VERSION_FLAGS_FIELD. +// + +static const int TILED_FLAG = 0x00000200; // File is tiled +static const int LONG_NAMES_FLAG = 0x00000400; // File contains long + // attribute or channel + // names +static const int NON_IMAGE_FLAG = 0x00000800; // File has at least one part + // which is not a regular +// scanline image or regular tiled image +// (that is, it is a deep format) +static const int MULTI_PART_FILE_FLAG = 0x00001000; // File has multiple parts + +// +// Bitwise OR of all known flags. +// +static const int ALL_FLAGS = + TILED_FLAG | LONG_NAMES_FLAG | NON_IMAGE_FLAG | MULTI_PART_FILE_FLAG; + +// +// Utility functions +// + +inline bool +isTiled (int version) +{ + return !!(version & TILED_FLAG); +} +inline bool +isMultiPart (int version) +{ + return !!(version & MULTI_PART_FILE_FLAG); +} +inline bool +isNonImage (int version) +{ + return !!(version & NON_IMAGE_FLAG); +} +inline int +makeTiled (int version) +{ + return version | TILED_FLAG; +} +inline int +makeNotTiled (int version) +{ + return version & ~TILED_FLAG; +} +inline int +getVersion (int version) +{ + return version & VERSION_NUMBER_FIELD; +} +inline int +getFlags (int version) +{ + return version & VERSION_FLAGS_FIELD; +} +inline bool +supportsFlags (int flags) +{ + return !(flags & ~ALL_FLAGS); +} + +// +// Given the first four bytes of a file, returns true if the +// file is probably an OpenEXR image file, false if not. +// + +IMF_EXPORT +bool isImfMagic (const char bytes[4]); + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT + +#endif diff --git a/third_party/tlRender-install-Release/include/OpenEXR/ImfWav.h b/third_party/tlRender-install-Release/include/OpenEXR/ImfWav.h new file mode 100644 index 00000000..b8ba28db --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenEXR/ImfWav.h @@ -0,0 +1,39 @@ +// +// SPDX-License-Identifier: BSD-3-Clause +// Copyright (c) Contributors to the OpenEXR Project. +// + +#ifndef INCLUDED_IMF_WAV_H +#define INCLUDED_IMF_WAV_H + +//----------------------------------------------------------------------------- +// +// 16-bit Haar Wavelet encoding and decoding +// +//----------------------------------------------------------------------------- +#include "ImfExport.h" +#include "ImfNamespace.h" + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER + +IMF_EXPORT +void wav2Encode ( + unsigned short* in, // io: values in[y][x] are transformed in place + int nx, // i : x size + int ox, // i : x offset + int ny, // i : y size + int oy, // i : y offset + unsigned short mx); // i : maximum in[x][y] value + +IMF_EXPORT +void wav2Decode ( + unsigned short* in, // io: values in[y][x] are transformed in place + int nx, // i : x size + int ox, // i : x offset + int ny, // i : y size + int oy, // i : y offset + unsigned short mx); // i : maximum in[x][y] value + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT + +#endif diff --git a/third_party/tlRender-install-Release/include/OpenEXR/ImfXdr.h b/third_party/tlRender-install-Release/include/OpenEXR/ImfXdr.h new file mode 100644 index 00000000..f6f65213 --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenEXR/ImfXdr.h @@ -0,0 +1,722 @@ +// +// SPDX-License-Identifier: BSD-3-Clause +// Copyright (c) Contributors to the OpenEXR Project. +// + +#ifndef INCLUDED_IMF_XDR_H +#define INCLUDED_IMF_XDR_H + +//---------------------------------------------------------------------------- +// +// Xdr -- routines to convert data between the machine's native +// format and a machine-independent external data representation: +// +// write (T &o, S v); converts a value, v, of type S +// into a machine-independent +// representation and stores the +// result in an output buffer, o. +// +// read (T &i, S &v); reads the machine-independent +// representation of a value of type +// S from input buffer i, converts +// the value into the machine's native +// representation, and stores the result +// in v. +// +// size(); returns the size, in bytes, of the +// machine-independent representation +// of an object of type S. +// +// The write() and read() routines are templates; data can be written +// to and read from any output or input buffer type T for which a helper +// class, R, exits. Class R must define a method to store a char array +// in a T, and a method to read a char array from a T: +// +// struct R +// { +// static void +// writeChars (T &o, const char c[/*n*/], int n) +// { +// ... // Write c[0], c[1] ... c[n-1] to output buffer o. +// } +// +// static void +// readChars (T &i, char c[/*n*/], int n) +// { +// ... // Read n characters from input buffer i +// // and copy them to c[0], c[1] ... c[n-1]. +// } +// }; +// +// Example - writing to and reading from iostreams: +// +// struct CharStreamIO +// { +// static void +// writeChars (ostream &os, const char c[], int n) +// { +// os.write (c, n); +// } +// +// static void +// readChars (istream &is, char c[], int n) +// { +// is.read (c, n); +// } +// }; +// +// ... +// +// Xdr::write (os, 3); +// Xdr::write (os, 5.0); +// +//---------------------------------------------------------------------------- + +#include "ImfNamespace.h" + +#include "IexMathExc.h" +#include +#include +#include + +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_ENTER + +namespace Xdr +{ + +//------------------------------- +// Write data to an output stream +//------------------------------- + +template void write (T& out, bool v); + +template void write (T& out, char v); + +template void write (T& out, signed char v); + +template void write (T& out, unsigned char v); + +template void write (T& out, signed short v); + +template void write (T& out, unsigned short v); + +template void write (T& out, signed int v); + +template void write (T& out, unsigned int v); + +template void write (T& out, int64_t v); + +template void write (T& out, uint64_t v); + +template void write (T& out, float v); + +template void write (T& out, double v); + +template void write (T& out, half v); + +template +void write (T& out, const char v[/*n*/], int n); // fixed-size char array + +template +void write (T& out, const char v[]); // zero-terminated string + +//----------------------------------------- +// Append padding bytes to an output stream +//----------------------------------------- + +template void pad (T& out, int n); // write n padding bytes + +//------------------------------- +// Read data from an input stream +//------------------------------- + +template void read (T& in, bool& v); + +template void read (T& in, char& v); + +template void read (T& in, signed char& v); + +template void read (T& in, unsigned char& v); + +template void read (T& in, signed short& v); + +template void read (T& in, unsigned short& v); + +template void read (T& in, signed int& v); + +template void read (T& in, unsigned int& v); + +template void read (T& in, int64_t& v); + +template void read (T& in, uint64_t& v); + +template void read (T& in, float& v); + +template void read (T& in, double& v); + +template void read (T& in, half& v); + +template +void read (T& in, char v[/*n*/], int n); // fixed-size char array + +template +void read (T& in, int n, char v[/*n*/]); // zero-terminated string + +//------------------------------------------- +// Skip over padding bytes in an input stream +//------------------------------------------- + +template void skip (T& in, int n); // skip n padding bytes + +//-------------------------------------- +// Size of the machine-independent +// representation of an object of type S +//-------------------------------------- + +template int size (); + +//--------------- +// Implementation +//--------------- + +template +inline void +writeSignedChars (T& out, const signed char c[], int n) +{ + S::writeChars (out, (const char*) c, n); +} + +template +inline void +writeUnsignedChars (T& out, const unsigned char c[], int n) +{ + S::writeChars (out, (const char*) c, n); +} + +template +inline void +readSignedChars (T& in, signed char c[], int n) +{ + S::readChars (in, (char*) c, n); +} + +template +inline void +readUnsignedChars (T& in, unsigned char c[], int n) +{ + S::readChars (in, (char*) c, n); +} + +template +inline void +write (T& out, bool v) +{ + char c = !!v; + S::writeChars (out, &c, 1); +} + +template +inline void +write (T& out, char v) +{ + S::writeChars (out, &v, 1); +} + +template +inline void +write (T& out, signed char v) +{ + writeSignedChars (out, &v, 1); +} + +template +inline void +write (T& out, unsigned char v) +{ + writeUnsignedChars (out, &v, 1); +} + +template +void +write (T& out, signed short v) +{ + signed char b[2]; + + b[0] = (signed char) (v); + b[1] = (signed char) (v >> 8); + + writeSignedChars (out, b, 2); +} + +template +void +write (T& out, unsigned short v) +{ + unsigned char b[2]; + + b[0] = (unsigned char) (v); + b[1] = (unsigned char) (v >> 8); + + writeUnsignedChars (out, b, 2); +} + +template +void +write (T& out, signed int v) +{ + signed char b[4]; + + b[0] = (signed char) (v); + b[1] = (signed char) (v >> 8); + b[2] = (signed char) (v >> 16); + b[3] = (signed char) (v >> 24); + + writeSignedChars (out, b, 4); +} + +template +void +write (T& out, unsigned int v) +{ + unsigned char b[4]; + + b[0] = (unsigned char) (v); + b[1] = (unsigned char) (v >> 8); + b[2] = (unsigned char) (v >> 16); + b[3] = (unsigned char) (v >> 24); + + writeUnsignedChars (out, b, 4); +} + +template +void +write (T& out, int64_t v) +{ + signed char b[8]; + + b[0] = (signed char) (v); + b[1] = (signed char) (v >> 8); + b[2] = (signed char) (v >> 16); + b[3] = (signed char) (v >> 24); + b[4] = (signed char) (v >> 32); + b[5] = (signed char) (v >> 40); + b[6] = (signed char) (v >> 48); + b[7] = (signed char) (v >> 56); + + writeSignedChars (out, b, 8); +} + +template +void +write (T& out, uint64_t v) +{ + unsigned char b[8]; + + b[0] = (unsigned char) (v); + b[1] = (unsigned char) (v >> 8); + b[2] = (unsigned char) (v >> 16); + b[3] = (unsigned char) (v >> 24); + b[4] = (unsigned char) (v >> 32); + b[5] = (unsigned char) (v >> 40); + b[6] = (unsigned char) (v >> 48); + b[7] = (unsigned char) (v >> 56); + + writeUnsignedChars (out, b, 8); +} + +template +void +write (T& out, float v) +{ + union + { + unsigned int i; + float f; + } u; + u.f = v; + + unsigned char b[4]; + + b[0] = (unsigned char) (u.i); + b[1] = (unsigned char) (u.i >> 8); + b[2] = (unsigned char) (u.i >> 16); + b[3] = (unsigned char) (u.i >> 24); + + writeUnsignedChars (out, b, 4); +} + +template +void +write (T& out, double v) +{ + union + { + uint64_t i; + double d; + } u; + u.d = v; + + unsigned char b[8]; + + b[0] = (unsigned char) (u.i); + b[1] = (unsigned char) (u.i >> 8); + b[2] = (unsigned char) (u.i >> 16); + b[3] = (unsigned char) (u.i >> 24); + b[4] = (unsigned char) (u.i >> 32); + b[5] = (unsigned char) (u.i >> 40); + b[6] = (unsigned char) (u.i >> 48); + b[7] = (unsigned char) (u.i >> 56); + + writeUnsignedChars (out, b, 8); +} + +template +inline void +write (T& out, half v) +{ + unsigned char b[2]; + + b[0] = (unsigned char) (v.bits ()); + b[1] = (unsigned char) (v.bits () >> 8); + + writeUnsignedChars (out, b, 2); +} + +template +inline void +write (T& out, const char v[], int n) // fixed-size char array +{ + S::writeChars (out, v, n); +} + +template +void +write (T& out, const char v[]) // zero-terminated string +{ + while (*v) + { + S::writeChars (out, v, 1); + ++v; + } + + S::writeChars (out, v, 1); +} + +template +void +pad (T& out, int n) // add n padding bytes +{ + for (int i = 0; i < n; i++) + { + const char c = 0; + S::writeChars (out, &c, 1); + } +} + +template +inline void +read (T& in, bool& v) +{ + char c; + + S::readChars (in, &c, 1); + v = !!c; +} + +template +inline void +read (T& in, char& v) +{ + S::readChars (in, &v, 1); +} + +template +inline void +read (T& in, signed char& v) +{ + readSignedChars (in, &v, 1); +} + +template +inline void +read (T& in, unsigned char& v) +{ + readUnsignedChars (in, &v, 1); +} + +template +void +read (T& in, signed short& v) +{ + signed char b[2]; + + readSignedChars (in, b, 2); + + v = (static_cast (b[0]) & 0x00ff) | + (static_cast (b[1]) << 8); +} + +template +void +read (T& in, unsigned short& v) +{ + unsigned char b[2]; + + readUnsignedChars (in, b, 2); + + v = (b[0] & 0x00ff) | (b[1] << 8); +} + +template +void +read (T& in, signed int& v) +{ + signed char b[4]; + + readSignedChars (in, b, 4); + + v = (static_cast (b[0]) & 0x000000ff) | + ((static_cast (b[1]) << 8) & 0x0000ff00) | + ((static_cast (b[2]) << 16) & 0x00ff0000) | + (static_cast (b[3]) << 24); +} + +template +void +read (T& in, unsigned int& v) +{ + unsigned char b[4]; + + readUnsignedChars (in, b, 4); + + v = (b[0] & 0x000000ff) | ((b[1] << 8) & 0x0000ff00) | + ((b[2] << 16) & 0x00ff0000) | (b[3] << 24); +} + +template +void +read (T& in, int64_t& v) +{ + signed char b[8]; + + readSignedChars (in, b, 8); + + v = (static_cast (b[0]) & 0x00000000000000ff) | + ((static_cast (b[1]) << 8) & 0x000000000000ff00) | + ((static_cast (b[2]) << 16) & 0x0000000000ff0000) | + ((static_cast (b[3]) << 24) & 0x00000000ff000000) | + ((static_cast (b[4]) << 32) & 0x000000ff00000000) | + ((static_cast (b[5]) << 40) & 0x0000ff0000000000) | + ((static_cast (b[6]) << 48) & 0x00ff000000000000) | + (static_cast (b[7]) << 56); +} + +template +void +read (T& in, uint64_t& v) +{ + unsigned char b[8]; + + readUnsignedChars (in, b, 8); + + v = ((uint64_t) b[0] & 0x00000000000000ffLL) | + (((uint64_t) b[1] << 8) & 0x000000000000ff00LL) | + (((uint64_t) b[2] << 16) & 0x0000000000ff0000LL) | + (((uint64_t) b[3] << 24) & 0x00000000ff000000LL) | + (((uint64_t) b[4] << 32) & 0x000000ff00000000LL) | + (((uint64_t) b[5] << 40) & 0x0000ff0000000000LL) | + (((uint64_t) b[6] << 48) & 0x00ff000000000000LL) | + ((uint64_t) b[7] << 56); +} + +template +void +read (T& in, float& v) +{ + unsigned char b[4]; + + readUnsignedChars (in, b, 4); + + union + { + unsigned int i; + float f; + } u; + + u.i = (b[0] & 0x000000ff) | ((b[1] << 8) & 0x0000ff00) | + ((b[2] << 16) & 0x00ff0000) | (b[3] << 24); + + v = u.f; +} + +template +void +read (T& in, double& v) +{ + unsigned char b[8]; + + readUnsignedChars (in, b, 8); + + union + { + uint64_t i; + double d; + } u; + + u.i = ((uint64_t) b[0] & 0x00000000000000ffULL) | + (((uint64_t) b[1] << 8) & 0x000000000000ff00ULL) | + (((uint64_t) b[2] << 16) & 0x0000000000ff0000ULL) | + (((uint64_t) b[3] << 24) & 0x00000000ff000000ULL) | + (((uint64_t) b[4] << 32) & 0x000000ff00000000ULL) | + (((uint64_t) b[5] << 40) & 0x0000ff0000000000ULL) | + (((uint64_t) b[6] << 48) & 0x00ff000000000000ULL) | + ((uint64_t) b[7] << 56); + + v = u.d; +} + +template +inline void +read (T& in, half& v) +{ + unsigned char b[2]; + + readUnsignedChars (in, b, 2); + + v.setBits ((b[0] & 0x00ff) | (b[1] << 8)); +} + +template +inline void +read (T& in, char v[], int n) // fixed-size char array +{ + S::readChars (in, v, n); +} + +template +void +read (T& in, int n, char v[]) // zero-terminated string +{ + while (n >= 0) + { + S::readChars (in, v, 1); + + if (*v == 0) break; + + --n; + ++v; + } +} + +template +void +skip (T& in, int n) // skip n padding bytes +{ + char c[1024]; + + while (n >= (int) sizeof (c)) + { + if (!S::readChars (in, c, sizeof (c))) return; + + n -= sizeof (c); + } + + if (n >= 1) S::readChars (in, c, n); +} + +template <> +inline int +size () +{ + return 1; +} +template <> +inline int +size () +{ + return 1; +} +template <> +inline int +size () +{ + return 1; +} +template <> +inline int +size () +{ + return 1; +} +template <> +inline int +size () +{ + return 2; +} +template <> +inline int +size () +{ + return 2; +} +template <> +inline int +size () +{ + return 4; +} +template <> +inline int +size () +{ + return 4; +} +template <> +inline int +size () +{ + return 8; +} +template <> +inline int +size () +{ + return 8; +} +template <> +inline int +size () +{ + return 8; +} +template <> +inline int +size () +{ + return 4; +} +template <> +inline int +size () +{ + return 8; +} +template <> +inline int +size () +{ + return 2; +} + +} // namespace Xdr +OPENEXR_IMF_INTERNAL_NAMESPACE_HEADER_EXIT + +#if defined(OPENEXR_IMF_INTERNAL_NAMESPACE_AUTO_EXPOSE) +namespace Imf +{ +using namespace OPENEXR_IMF_INTERNAL_NAMESPACE; +} +#endif + +#endif diff --git a/third_party/tlRender-install-Release/include/OpenEXR/OpenEXRConfig.h b/third_party/tlRender-install-Release/include/OpenEXR/OpenEXRConfig.h new file mode 100644 index 00000000..5b236e5d --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenEXR/OpenEXRConfig.h @@ -0,0 +1,182 @@ +// SPDX-License-Identifier: BSD-3-Clause +// Copyright (c) Contributors to the OpenEXR Project. + +// This file is auto-generated by the configure step + +#ifndef INCLUDED_OPENEXR_CONFIG_H +#define INCLUDED_OPENEXR_CONFIG_H 1 + +#pragma once + +// +// The OpenEXR release version is defined officially in +// src/lib/OpenEXRCore/openexr_version.h, but CMake doesn't readily allow +// that to be included here, so duplicate the settings for +// backwards-compatibility with applications that may expect to get the +// defines from this include. +// + +#ifndef INCLUDED_OPENEXR_VERSION_H +#define OPENEXR_VERSION_MAJOR 3 +#define OPENEXR_VERSION_MINOR 3 +#define OPENEXR_VERSION_PATCH 6 +#endif + +// +// Options / configuration based on O.S. / compiler +///////////////////// + +// automated formatting does not handle the cmake tags well +// clang-format off + +// +// Define and set to 1 if the target system has support for large +// stack sizes. +// +/* #undef OPENEXR_HAVE_LARGE_STACK */ + +////////////////////// +// +// C++ namespace configuration / options + +// +// Current internal library namespace name +// +#define OPENEXR_IMF_INTERNAL_NAMESPACE_CUSTOM 0 +#define OPENEXR_IMF_INTERNAL_NAMESPACE Imf_3_3 + +// +// Current public user namespace name +// + +#define OPENEXR_IMF_NAMESPACE_CUSTOM 0 +#define OPENEXR_IMF_NAMESPACE Imf + +// +// Version string for runtime access +// + +#define OPENEXR_VERSION_STRING "3.3.6" +#define OPENEXR_PACKAGE_STRING "OpenEXR 3.3.6-dev" + +#define OPENEXR_VERSION_RELEASE_TYPE "-dev" +// Deprecated, for back compatibility: +#define OPENEXR_VERSION_EXTRA "-dev" + +#define OPENEXR_LIB_VERSION_STRING "32.3.3.6" + +// clang-format on + +// Version as a single hex number, e.g. 0x01000300 == 1.0.3 +#define OPENEXR_VERSION_HEX \ + (((OPENEXR_VERSION_MAJOR) << 24) | \ + ((OPENEXR_VERSION_MINOR) << 16) | \ + ((OPENEXR_VERSION_PATCH) << 8)) + +// On modern versions of gcc & clang, __has_attribute can test support for +// __attribute__((attr)). Make sure it's safe for other compilers. +#ifndef __has_attribute +# define __has_attribute(x) 0 +#endif + +// Whether the user configured the library to have symbol visibility +// tagged +#define OPENEXR_ENABLE_API_VISIBILITY + +/// \defgroup ExportMacros Macros to manage symbol visibility +/// +/// See website/SymbolVisibility.rst for more discussion about the +/// motivation for these macros +/// +/// If we are compiling a DLL for Windows, there needs to be custom +/// rules for each library such that the macro swaps between doing a +/// dllexport and a dllimport, so the defines here are less +/// useful. Further, MSVC does not have this concept at all currently, +/// so is elided. +/// +/// The top level macros which start with OPENEXR can act as simple +/// ways to combine the logic however for non-DLL or non-windows +/// platforms, but until the current patterns change, one should check +/// the specific library export.h (i.e. @sa IexExport.h, +/// @sa IlmThreadExport.h, @sa ImfExport.h, @sa ImfUtilExport.h ) +/// +/// These per-library exports define a subset which are used by that +/// library. +/// +/// Iex is simple and does not need to do more than expose class types +/// and functions, and does not have any private members to hide, so +/// only provides a couple of the possible macros. +/// +/// Similarly, IlmThread is also reasonably simple. +/// +/// OpenEXR and OpenEXRUtil have much more logic and have to deal with +/// templates and template instantiation, and so define more of the +/// macros. +/// +/// @{ + +#if defined(OPENEXR_ENABLE_API_VISIBILITY) && \ + !(defined(OPENEXR_DLL) || defined(_MSC_VER)) +# define OPENEXR_PUBLIC_SYMBOL_ATTRIBUTE \ + __attribute__ ((__visibility__ ("default"))) +# define OPENEXR_PRIVATE_SYMBOL_ATTRIBUTE \ + __attribute__ ((__visibility__ ("hidden"))) +// clang differs from gcc and has type visibility which is needed +// for enums and templates, and isn't well documented, but causes +// the vtable and typeinfo to be made visible, but not necessarily +// all the members +# if __has_attribute(__type_visibility__) +# define OPENEXR_PUBLIC_TYPE_VISIBILITY_ATTRIBUTE \ + __attribute__ ((__type_visibility__ ("default"))) +# endif + +// these are always the same, at least in current compilers +# define OPENEXR_EXPORT OPENEXR_PUBLIC_SYMBOL_ATTRIBUTE +# define OPENEXR_HIDDEN OPENEXR_PRIVATE_SYMBOL_ATTRIBUTE +// currently define this as the same between compilers to export +// things like default copy ctors etc, and do not use the type +// visibility which only exports the typeinfo / vtable +# define OPENEXR_EXPORT_TYPE OPENEXR_EXPORT +# define OPENEXR_EXPORT_EXTERN_TEMPLATE OPENEXR_EXPORT + +# ifdef OPENEXR_PUBLIC_TYPE_VISIBILITY_ATTRIBUTE +# define OPENEXR_EXPORT_ENUM OPENEXR_PUBLIC_TYPE_VISIBILITY_ATTRIBUTE +# define OPENEXR_EXPORT_TEMPLATE_TYPE \ + OPENEXR_PUBLIC_TYPE_VISIBILITY_ATTRIBUTE +// clang (well, type_visibility) seems empirically need the +// default/public symbol tag when specifying explicit template +// instantiations, where gcc (no type_visibility) complains if +// you set that +# define OPENEXR_EXPORT_TEMPLATE_INSTANCE OPENEXR_EXPORT +# else +# define OPENEXR_EXPORT_ENUM +# define OPENEXR_EXPORT_TEMPLATE_TYPE OPENEXR_EXPORT +# define OPENEXR_EXPORT_TEMPLATE_INSTANCE +# endif + +#else // msvc or api visibility disabled, just clear all this out (DLLs will define a set anyway) + +# define OPENEXR_EXPORT +# define OPENEXR_HIDDEN +# define OPENEXR_EXPORT_TYPE +# define OPENEXR_EXPORT_EXTERN_TEMPLATE +# define OPENEXR_EXPORT_ENUM +# define OPENEXR_EXPORT_TEMPLATE_TYPE +# define OPENEXR_EXPORT_TYPE +# define OPENEXR_EXPORT_TEMPLATE_INSTANCE + +#endif + +#if defined(__cplusplus) && (__cplusplus >= 201402L) +# define OPENEXR_DEPRECATED(msg) [[deprecated (msg)]] +#endif + +#ifndef OPENEXR_DEPRECATED +# ifdef _MSC_VER +# define OPENEXR_DEPRECATED(msg) __declspec(deprecated (msg)) +# else +# define OPENEXR_DEPRECATED(msg) __attribute__ ((deprecated (msg))) +# endif +#endif + +#endif // INCLUDED_OPENEXR_CONFIG_H diff --git a/third_party/tlRender-install-Release/include/OpenEXR/openexr.h b/third_party/tlRender-install-Release/include/OpenEXR/openexr.h new file mode 100644 index 00000000..cbea1e17 --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenEXR/openexr.h @@ -0,0 +1,30 @@ +/* +** SPDX-License-Identifier: BSD-3-Clause +** Copyright Contributors to the OpenEXR Project. +*/ + +#ifndef OPENEXR_CORE_H +#define OPENEXR_CORE_H + +#include "openexr_config.h" + +#include "openexr_base.h" +#include "openexr_errors.h" + +#include "openexr_attr.h" +#include "openexr_context.h" + +#include "openexr_part.h" + +#include "openexr_std_attr.h" + +#include "openexr_chunkio.h" + +#include "openexr_compression.h" + +#include "openexr_decode.h" +#include "openexr_encode.h" + +#include "openexr_debug.h" + +#endif /* OPENEXR_CORE_H */ diff --git a/third_party/tlRender-install-Release/include/OpenEXR/openexr_attr.h b/third_party/tlRender-install-Release/include/OpenEXR/openexr_attr.h new file mode 100644 index 00000000..cca53d00 --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenEXR/openexr_attr.h @@ -0,0 +1,506 @@ +/* +** SPDX-License-Identifier: BSD-3-Clause +** Copyright Contributors to the OpenEXR Project. +*/ + +#ifndef OPENEXR_ATTR_H +#define OPENEXR_ATTR_H + +#include "openexr_context.h" + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/** @file */ + +/** + * @defgroup AttributeTypes Attribute/metadata value types and struct declarations + * + * @brief These are a group of enum values defining valid values for + * some attributes and then associated structs for other types. + * + * Some of these types will be directly representable/storable in + * the file, some not. There is some overlap here with Imath, and they + * should be kept in the same order for compatibility. However do note + * that these are just the raw data, and no useful functions are + * declared at this layer, that is what Imath is for. + * + * @{ + */ + +/** Enum declaring allowed values for \c uint8_t value stored in built-in compression type. */ +typedef enum +{ + EXR_COMPRESSION_NONE = 0, + EXR_COMPRESSION_RLE = 1, + EXR_COMPRESSION_ZIPS = 2, + EXR_COMPRESSION_ZIP = 3, + EXR_COMPRESSION_PIZ = 4, + EXR_COMPRESSION_PXR24 = 5, + EXR_COMPRESSION_B44 = 6, + EXR_COMPRESSION_B44A = 7, + EXR_COMPRESSION_DWAA = 8, + EXR_COMPRESSION_DWAB = 9, + EXR_COMPRESSION_LAST_TYPE /**< Invalid value, provided for range checking. */ +} exr_compression_t; + +/** Enum declaring allowed values for \c uint8_t value stored in built-in env map type. */ +typedef enum +{ + EXR_ENVMAP_LATLONG = 0, + EXR_ENVMAP_CUBE = 1, + EXR_ENVMAP_LAST_TYPE /**< Invalid value, provided for range checking. */ +} exr_envmap_t; + +/** Enum declaring allowed values for \c uint8_t value stored in \c lineOrder type. */ +typedef enum +{ + EXR_LINEORDER_INCREASING_Y = 0, + EXR_LINEORDER_DECREASING_Y = 1, + EXR_LINEORDER_RANDOM_Y = 2, + EXR_LINEORDER_LAST_TYPE /**< Invalid value, provided for range checking. */ +} exr_lineorder_t; + +/** Enum declaring allowed values for part type. */ +typedef enum +{ + EXR_STORAGE_SCANLINE = 0, /**< Corresponds to type of \c scanlineimage. */ + EXR_STORAGE_TILED, /**< Corresponds to type of \c tiledimage. */ + EXR_STORAGE_DEEP_SCANLINE, /**< Corresponds to type of \c deepscanline. */ + EXR_STORAGE_DEEP_TILED, /**< Corresponds to type of \c deeptile. */ + EXR_STORAGE_LAST_TYPE, /**< Invalid value, provided for range checking. */ + EXR_STORAGE_UNKNOWN /**< An unknown type, provided for future proofing. */ +} exr_storage_t; + +/** @brief Enum representing what type of tile information is contained. */ +typedef enum +{ + EXR_TILE_ONE_LEVEL = 0, /**< Single level of image data. */ + EXR_TILE_MIPMAP_LEVELS = 1, /**< Mipmapped image data. */ + EXR_TILE_RIPMAP_LEVELS = 2, /**< Ripmapped image data. */ + EXR_TILE_LAST_TYPE /**< Invalid value, provided for range checking. */ +} exr_tile_level_mode_t; + +/** @brief Enum representing how to scale positions between levels. */ +typedef enum +{ + EXR_TILE_ROUND_DOWN = 0, + EXR_TILE_ROUND_UP = 1, + EXR_TILE_ROUND_LAST_TYPE +} exr_tile_round_mode_t; + +/** @brief Enum capturing the underlying data type on a channel. */ +typedef enum +{ + EXR_PIXEL_UINT = 0, + EXR_PIXEL_HALF = 1, + EXR_PIXEL_FLOAT = 2, + EXR_PIXEL_LAST_TYPE +} exr_pixel_type_t; + +/** Enum declaring allowed values for \c uint8_t value stored in \c deepImageState type. */ +typedef enum +{ + EXR_DIS_MESSY = 0, + EXR_DIS_SORTED = 1, + EXR_DIS_NON_OVERLAPPING = 2, + EXR_DIS_TIDY = 3, + EXR_DIS_LAST_TYPE /**< Invalid value, provided for range checking. */ +} exr_deep_image_state_t; + +/* /////////////////////////////////////// */ +/* First set of structs are data where we can read directly with no allocation needed... */ + +/* Most are naturally aligned, but force some of these + * structs to be tightly packed + */ +#pragma pack(push, 1) + +/** @brief Struct to hold color chromaticities to interpret the tristimulus color values in the image data. */ +typedef struct +{ + float red_x; + float red_y; + float green_x; + float green_y; + float blue_x; + float blue_y; + float white_x; + float white_y; +} exr_attr_chromaticities_t; + +/** @brief Struct to hold keycode information. */ +typedef struct +{ + int32_t film_mfc_code; + int32_t film_type; + int32_t prefix; + int32_t count; + int32_t perf_offset; + int32_t perfs_per_frame; + int32_t perfs_per_count; +} exr_attr_keycode_t; + +/** @brief struct to hold a 32-bit floating-point 3x3 matrix. */ +typedef struct +{ + float m[9]; +} exr_attr_m33f_t; + +/** @brief struct to hold a 64-bit floating-point 3x3 matrix. */ +typedef struct +{ + double m[9]; +} exr_attr_m33d_t; + +/** @brief Struct to hold a 32-bit floating-point 4x4 matrix. */ +typedef struct +{ + float m[16]; +} exr_attr_m44f_t; + +/** @brief Struct to hold a 64-bit floating-point 4x4 matrix. */ +typedef struct +{ + double m[16]; +} exr_attr_m44d_t; + +/** @brief Struct to hold an integer ratio value. */ +typedef struct +{ + int32_t num; + uint32_t denom; +} exr_attr_rational_t; + +/** @brief Struct to hold timecode information. */ +typedef struct +{ + uint32_t time_and_flags; + uint32_t user_data; +} exr_attr_timecode_t; + +/** @brief Struct to hold a 2-element integer vector. */ +typedef struct +{ + int32_t x, y; +} exr_attr_v2i_t; + +/** @brief Struct to hold a 2-element 32-bit float vector. */ +typedef struct +{ + float x, y; +} exr_attr_v2f_t; + +/** @brief Struct to hold a 2-element 64-bit float vector. */ +typedef struct +{ + double x, y; +} exr_attr_v2d_t; + +/** @brief Struct to hold a 3-element integer vector. */ +typedef struct +{ + int32_t x, y, z; +} exr_attr_v3i_t; + +/** @brief Struct to hold a 3-element 32-bit float vector. */ +typedef struct +{ + float x, y, z; +} exr_attr_v3f_t; + +/** @brief Struct to hold a 3-element 64-bit float vector. */ +typedef struct +{ + double x, y, z; +} exr_attr_v3d_t; + +/** @brief Struct to hold an integer box/region definition. */ +typedef struct +{ + exr_attr_v2i_t min; + exr_attr_v2i_t max; +} exr_attr_box2i_t; + +/** @brief Struct to hold a floating-point box/region definition. */ +typedef struct +{ + exr_attr_v2f_t min; + exr_attr_v2f_t max; +} exr_attr_box2f_t; + +/** @brief Struct holding base tiledesc attribute type defined in spec + * + * NB: This is in a tightly packed area so it can be read directly, be + * careful it doesn't become padded to the next \c uint32_t boundary. + */ +typedef struct +{ + uint32_t x_size; + uint32_t y_size; + uint8_t level_and_round; +} exr_attr_tiledesc_t; + +/** @brief Macro to access type of tiling from packed structure. */ +#define EXR_GET_TILE_LEVEL_MODE(tiledesc) \ + ((exr_tile_level_mode_t) (((tiledesc).level_and_round) & 0xF)) +/** @brief Macro to access the rounding mode of tiling from packed structure. */ +#define EXR_GET_TILE_ROUND_MODE(tiledesc) \ + ((exr_tile_round_mode_t) ((((tiledesc).level_and_round) >> 4) & 0xF)) +/** @brief Macro to pack the tiling type and rounding mode into packed structure. */ +#define EXR_PACK_TILE_LEVEL_ROUND(lvl, mode) \ + ((uint8_t) ((((uint8_t) ((mode) & 0xF) << 4)) | ((uint8_t) ((lvl) & 0xF)))) + +#pragma pack(pop) + +/* /////////////////////////////////////// */ +/* Now structs that involve heap allocation to store data. */ + +/** Storage for a string. */ +typedef struct +{ + int32_t length; + /** If this is non-zero, the string owns the data, if 0, is a const ref to a static string. */ + int32_t alloc_size; + + const char* str; +} exr_attr_string_t; + +/** Storage for a string vector. */ +typedef struct +{ + int32_t n_strings; + /** If this is non-zero, the string vector owns the data, if 0, is a const ref. */ + int32_t alloc_size; + + const exr_attr_string_t* strings; +} exr_attr_string_vector_t; + +/** Float vector storage struct. */ +typedef struct +{ + int32_t length; + /** If this is non-zero, the float vector owns the data, if 0, is a const ref. */ + int32_t alloc_size; + + const float* arr; +} exr_attr_float_vector_t; + +/** Hint for lossy compression methods about how to treat values + * (logarithmic or linear), meaning a human sees values like R, G, B, + * luminance difference between 0.1 and 0.2 as about the same as 1.0 + * to 2.0 (logarithmic), where chroma coordinates are closer to linear + * (0.1 and 0.2 is about the same difference as 1.0 and 1.1). + */ +typedef enum +{ + EXR_PERCEPTUALLY_LOGARITHMIC = 0, + EXR_PERCEPTUALLY_LINEAR = 1 +} exr_perceptual_treatment_t; + +/** Individual channel information. */ +typedef struct +{ + exr_attr_string_t name; + /** Data representation for these pixels: uint, half, float. */ + exr_pixel_type_t pixel_type; + /** Possible values are 0 and 1 per docs exr_perceptual_treatment_t. */ + uint8_t p_linear; + uint8_t reserved[3]; + int32_t x_sampling; + int32_t y_sampling; +} exr_attr_chlist_entry_t; + +/** List of channel information (sorted alphabetically). */ +typedef struct +{ + int num_channels; + int num_alloced; + + const exr_attr_chlist_entry_t* entries; +} exr_attr_chlist_t; + +/** @brief Struct to define attributes of an embedded preview image. */ +typedef struct +{ + uint32_t width; + uint32_t height; + /** If this is non-zero, the preview owns the data, if 0, is a const ref. */ + size_t alloc_size; + + const uint8_t* rgba; +} exr_attr_preview_t; + +/** Custom storage structure for opaque data. + * + * Handlers for opaque types can be registered, then when a + * non-builtin type is encountered with a registered handler, the + * function pointers to unpack/pack it will be set up. + * + * @sa exr_register_attr_type_handler + */ +typedef struct +{ + int32_t size; + int32_t unpacked_size; + /** If this is non-zero, the struct owns the data, if 0, is a const ref. */ + int32_t packed_alloc_size; + uint8_t pad[4]; + + void* packed_data; + + /** When an application wants to have custom data, they can store + * an unpacked form here which will be requested to be destroyed + * upon destruction of the attribute. + */ + void* unpacked_data; + + /** An application can register an attribute handler which then + * fills in these function pointers. This allows a user to delay + * the expansion of the custom type until access is desired, and + * similarly, to delay the packing of the data until write time. + */ + exr_result_t (*unpack_func_ptr) ( + exr_context_t ctxt, + const void* data, + int32_t attrsize, + int32_t* outsize, + void** outbuffer); + exr_result_t (*pack_func_ptr) ( + exr_context_t ctxt, + const void* data, + int32_t datasize, + int32_t* outsize, + void* outbuffer); + void (*destroy_unpacked_func_ptr) ( + exr_context_t ctxt, void* data, int32_t attrsize); +} exr_attr_opaquedata_t; + +/* /////////////////////////////////////// */ + +/** @brief Built-in/native attribute type enum. + * + * This will enable us to do a tagged type struct to generically store + * attributes. + */ +typedef enum +{ + EXR_ATTR_UNKNOWN = + 0, /**< Type indicating an error or uninitialized attribute. */ + EXR_ATTR_BOX2I, /**< Integer region definition. @see exr_attr_box2i_t. */ + EXR_ATTR_BOX2F, /**< Float region definition. @see exr_attr_box2f_t. */ + EXR_ATTR_CHLIST, /**< Definition of channels in file @see exr_chlist_entry. */ + EXR_ATTR_CHROMATICITIES, /**< Values to specify color space of colors in file @see exr_attr_chromaticities_t. */ + EXR_ATTR_COMPRESSION, /**< ``uint8_t`` declaring compression present. */ + EXR_ATTR_DOUBLE, /**< Double precision floating point number. */ + EXR_ATTR_ENVMAP, /**< ``uint8_t`` declaring environment map type. */ + EXR_ATTR_FLOAT, /**< Normal (4 byte) precision floating point number. */ + EXR_ATTR_FLOAT_VECTOR, /**< List of normal (4 byte) precision floating point numbers. */ + EXR_ATTR_INT, /**< 32-bit signed integer value. */ + EXR_ATTR_KEYCODE, /**< Struct recording keycode @see exr_attr_keycode_t. */ + EXR_ATTR_LINEORDER, /**< ``uint8_t`` declaring scanline ordering. */ + EXR_ATTR_M33F, /**< 9 32-bit floats representing a 3x3 matrix. */ + EXR_ATTR_M33D, /**< 9 64-bit floats representing a 3x3 matrix. */ + EXR_ATTR_M44F, /**< 16 32-bit floats representing a 4x4 matrix. */ + EXR_ATTR_M44D, /**< 16 64-bit floats representing a 4x4 matrix. */ + EXR_ATTR_PREVIEW, /**< 2 ``unsigned ints`` followed by 4 x w x h ``uint8_t`` image. */ + EXR_ATTR_RATIONAL, /**< \c int followed by ``unsigned int`` */ + EXR_ATTR_STRING, /**< ``int`` (length) followed by char string data. */ + EXR_ATTR_STRING_VECTOR, /**< 0 or more text strings (int + string). number is based on attribute size. */ + EXR_ATTR_TILEDESC, /**< 2 ``unsigned ints`` ``xSize``, ``ySize`` followed by mode. */ + EXR_ATTR_TIMECODE, /**< 2 ``unsigned ints`` time and flags, user data. */ + EXR_ATTR_V2I, /**< Pair of 32-bit integers. */ + EXR_ATTR_V2F, /**< Pair of 32-bit floats. */ + EXR_ATTR_V2D, /**< Pair of 64-bit floats. */ + EXR_ATTR_V3I, /**< Set of 3 32-bit integers. */ + EXR_ATTR_V3F, /**< Set of 3 32-bit floats. */ + EXR_ATTR_V3D, /**< Set of 3 64-bit floats. */ + EXR_ATTR_DEEP_IMAGE_STATE, /**< ``uint8_t`` declaring deep image state. */ + EXR_ATTR_OPAQUE, /**< User/unknown provided type. */ + EXR_ATTR_LAST_KNOWN_TYPE +} exr_attribute_type_t; + +/** @brief Storage, name and type information for an attribute. + * + * Attributes (metadata) for the file cause a surprising amount of + * overhead. It is not uncommon for a production-grade EXR to have + * many attributes. As such, the attribute struct is designed in a + * slightly more complicated manner. It is optimized to have the + * storage for that attribute: the struct itself, the name, the type, + * and the data all allocated as one block. Further, the type and + * standard names may use a static string to avoid allocating space + * for those as necessary with the pointers pointing to static strings + * (not to be freed). Finally, small values are optimized for. + */ +typedef struct +{ + /** Name of the attribute. */ + const char* name; + /** String type name of the attribute. */ + const char* type_name; + /** Length of name string (short flag is 31 max, long allows 255). */ + uint8_t name_length; + /** Length of type string (short flag is 31 max, long allows 255). */ + uint8_t type_name_length; + + uint8_t pad[2]; + + /** Enum of the attribute type. */ + exr_attribute_type_t type; + + /** Union of pointers of different types that can be used to type + * pun to an appropriate type for builtins. Do note that while + * this looks like a big thing, it is only the size of a single + * pointer. These are all pointers into some other data block + * storing the value you want, with the exception of the pod types + * which are just put in place (i.e. small value optimization). + * + * The attribute type \c type should directly correlate to one + * of these entries. + */ + union + { + // NB: not pointers for POD types + uint8_t uc; + double d; + float f; + int32_t i; + + exr_attr_box2i_t* box2i; + exr_attr_box2f_t* box2f; + exr_attr_chlist_t* chlist; + exr_attr_chromaticities_t* chromaticities; + exr_attr_keycode_t* keycode; + exr_attr_float_vector_t* floatvector; + exr_attr_m33f_t* m33f; + exr_attr_m33d_t* m33d; + exr_attr_m44f_t* m44f; + exr_attr_m44d_t* m44d; + exr_attr_preview_t* preview; + exr_attr_rational_t* rational; + exr_attr_string_t* string; + exr_attr_string_vector_t* stringvector; + exr_attr_tiledesc_t* tiledesc; + exr_attr_timecode_t* timecode; + exr_attr_v2i_t* v2i; + exr_attr_v2f_t* v2f; + exr_attr_v2d_t* v2d; + exr_attr_v3i_t* v3i; + exr_attr_v3f_t* v3f; + exr_attr_v3d_t* v3d; + exr_attr_opaquedata_t* opaque; + uint8_t* rawptr; + }; +} exr_attribute_t; + +/** @} */ + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +#endif /* OPENEXR_ATTR_H */ diff --git a/third_party/tlRender-install-Release/include/OpenEXR/openexr_base.h b/third_party/tlRender-install-Release/include/OpenEXR/openexr_base.h new file mode 100644 index 00000000..8df30423 --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenEXR/openexr_base.h @@ -0,0 +1,201 @@ +/* +** SPDX-License-Identifier: BSD-3-Clause +** Copyright Contributors to the OpenEXR Project. +*/ + +#ifndef OPENEXR_BASE_H +#define OPENEXR_BASE_H + +#include "openexr_config.h" + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/** @file */ + +/** @brief Retrieve the current library version. The @p extra string is for + * custom installs, and is a static string, do not free the returned + * pointer. + */ +EXR_EXPORT void +exr_get_library_version (int* maj, int* min, int* patch, const char** extra); + +/** + * @defgroup SafetyChecks Controls for internal safety checks + * @{ + */ + +/** @brief Limit the size of image allowed to be parsed or created by + * the library. + * + * This is used as a safety check against corrupt files, but can also + * serve to avoid potential issues on machines which have very + * constrained RAM. + * + * These values are among the only globals in the core layer of + * OpenEXR. The intended use is for applications to define a global + * default, which will be combined with the values provided to the + * individual context creation routine. The values are used to check + * against parsed header values. This adds some level of safety from + * memory overruns where a corrupt file given to the system may cause + * a large allocation to happen, enabling buffer overruns or other + * potential security issue. + * + * These global values are combined with the values in + * \ref exr_context_initializer_t using the following rules: + * + * 1. negative values are ignored. + * + * 2. if either value has a positive (non-zero) value, and the other + * has 0, the positive value is preferred. + * + * 3. If both are positive (non-zero), the minimum value is used. + * + * 4. If both values are 0, this disables the constrained size checks. + * + * This function does not fail. + */ +EXR_EXPORT void exr_set_default_maximum_image_size (int w, int h); + +/** @brief Retrieve the global default maximum image size. + * + * This function does not fail. + */ +EXR_EXPORT void exr_get_default_maximum_image_size (int* w, int* h); + +/** @brief Limit the size of an image tile allowed to be parsed or + * created by the library. + * + * Similar to image size, this places constraints on the maximum tile + * size as a safety check against bad file data + * + * This is used as a safety check against corrupt files, but can also + * serve to avoid potential issues on machines which have very + * constrained RAM + * + * These values are among the only globals in the core layer of + * OpenEXR. The intended use is for applications to define a global + * default, which will be combined with the values provided to the + * individual context creation routine. The values are used to check + * against parsed header values. This adds some level of safety from + * memory overruns where a corrupt file given to the system may cause + * a large allocation to happen, enabling buffer overruns or other + * potential security issue. + * + * These global values are combined with the values in + * \ref exr_context_initializer_t using the following rules: + * + * 1. negative values are ignored. + * + * 2. if either value has a positive (non-zero) value, and the other + * has 0, the positive value is preferred. + * + * 3. If both are positive (non-zero), the minimum value is used. + * + * 4. If both values are 0, this disables the constrained size checks. + * + * This function does not fail. + */ +EXR_EXPORT void exr_set_default_maximum_tile_size (int w, int h); + +/** @brief Retrieve the global maximum tile size. + * + * This function does not fail. + */ +EXR_EXPORT void exr_get_default_maximum_tile_size (int* w, int* h); + +/** @} */ + +/** + * @defgroup CompressionDefaults Provides default compression settings + * @{ + */ + +/** @brief Assigns a default zip compression level. + * + * This value may be controlled separately on each part, but this + * global control determines the initial value. + */ +EXR_EXPORT void exr_set_default_zip_compression_level (int l); + +/** @brief Retrieve the global default zip compression value + */ +EXR_EXPORT void exr_get_default_zip_compression_level (int* l); + +/** @brief Assigns a default DWA compression quality level. + * + * This value may be controlled separately on each part, but this + * global control determines the initial value. + */ +EXR_EXPORT void exr_set_default_dwa_compression_quality (float q); + +/** @brief Retrieve the global default dwa compression quality + */ +EXR_EXPORT void exr_get_default_dwa_compression_quality (float* q); + +/** @} */ + +/** + * @defgroup MemoryAllocators Provides global control over memory allocators + * @{ + */ + +/** @brief Function pointer used to hold a malloc-like routine. + * + * Providing these to a context will override what memory is used to + * allocate the context itself, as well as any allocations which + * happen during processing of a file or stream. This can be used by + * systems which provide rich malloc tracking routines to override the + * internal allocations performed by the library. + * + * This function is expected to allocate and return a new memory + * handle, or `NULL` if allocation failed (which the library will then + * handle and return an out-of-memory error). + * + * If one is provided, both should be provided. + * @sa exr_memory_free_func_t + */ +typedef void* (*exr_memory_allocation_func_t) (size_t bytes); + +/** @brief Function pointer used to hold a free-like routine. + * + * Providing these to a context will override what memory is used to + * allocate the context itself, as well as any allocations which + * happen during processing of a file or stream. This can be used by + * systems which provide rich malloc tracking routines to override the + * internal allocations performed by the library. + * + * This function is expected to return memory to the system, ala free + * from the C library. + * + * If providing one, probably need to provide both routines. + * @sa exr_memory_allocation_func_t + */ +typedef void (*exr_memory_free_func_t) (void* ptr); + +/** @brief Allow the user to override default allocator used internal + * allocations necessary for files, attributes, and other temporary + * memory. + * + * These routines may be overridden when creating a specific context, + * however this provides global defaults such that the default can be + * applied. + * + * If either pointer is 0, the appropriate malloc/free routine will be + * substituted. + * + * This function does not fail. + */ +EXR_EXPORT void exr_set_default_memory_routines ( + exr_memory_allocation_func_t alloc_func, exr_memory_free_func_t free_func); + +/** @} */ + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +#endif /* OPENEXR_BASE_H */ diff --git a/third_party/tlRender-install-Release/include/OpenEXR/openexr_chunkio.h b/third_party/tlRender-install-Release/include/OpenEXR/openexr_chunkio.h new file mode 100644 index 00000000..def83925 --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenEXR/openexr_chunkio.h @@ -0,0 +1,195 @@ +/* +** SPDX-License-Identifier: BSD-3-Clause +** Copyright Contributors to the OpenEXR Project. +*/ + +#ifndef OPENEXR_CORE_CHUNKIO_H +#define OPENEXR_CORE_CHUNKIO_H + +#include "openexr_part.h" + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/** @file */ + +/** @brief Retrieve the chunk table offset for the part in question. + */ +EXR_EXPORT exr_result_t exr_get_chunk_table_offset ( + exr_const_context_t ctxt, int part_index, uint64_t* chunk_offset_out); + +/** + * Struct describing raw data information about a chunk. + * + * A chunk is the generic term for a pixel data block in an EXR file, + * as described in the OpenEXR File Layout documentation. This is + * common between all different forms of data that can be stored. + */ +typedef struct +{ + int32_t idx; + + /** For tiles, this is the tilex; for scans it is the x. */ + int32_t start_x; + /** For tiles, this is the tiley; for scans it is the scanline y. */ + int32_t start_y; + int32_t height; /**< For this chunk. */ + int32_t width; /**< For this chunk. */ + + uint8_t level_x; /**< For tiled files. */ + uint8_t level_y; /**< For tiled files. */ + + uint8_t type; + uint8_t compression; + + uint64_t data_offset; + uint64_t packed_size; + uint64_t unpacked_size; + + uint64_t sample_count_data_offset; + uint64_t sample_count_table_size; +} exr_chunk_info_t; + +/**************************************/ + +/** initialize chunk info with the default values from the specified part + * + * The 'x' and 'y' parameters are used to indicate the starting position + * of the chunk being initialized. This does not perform any I/O to validate + * and so the values are only indicative. (but can be used to do things + * like compress / decompress a chunk without having a file to actually + * read + */ +EXR_EXPORT +exr_result_t exr_chunk_default_initialize ( + exr_context_t ctxt, int part_index, + const exr_attr_box2i_t *box, + int levelx, int levely, + exr_chunk_info_t* cinfo); + +/**************************************/ + +EXR_EXPORT +exr_result_t exr_read_scanline_chunk_info ( + exr_const_context_t ctxt, int part_index, int y, exr_chunk_info_t* cinfo); + +EXR_EXPORT +exr_result_t exr_read_tile_chunk_info ( + exr_const_context_t ctxt, + int part_index, + int tilex, + int tiley, + int levelx, + int levely, + exr_chunk_info_t* cinfo); + +/** Read the packed data block for a chunk. + * + * This assumes that the buffer pointed to by @p packed_data is + * large enough to hold the chunk block info packed_size bytes. + */ +EXR_EXPORT +exr_result_t exr_read_chunk ( + exr_const_context_t ctxt, + int part_index, + const exr_chunk_info_t* cinfo, + void* packed_data); + +/** + * Read chunk for deep data. + * + * This allows one to read the packed data, the sample count data, or both. + * \c exr_read_chunk also works to read deep data packed data, + * but this is a routine to get the sample count table and the packed + * data in one go, or if you want to pre-read the sample count data, + * you can get just that buffer. + */ +EXR_EXPORT +exr_result_t exr_read_deep_chunk ( + exr_const_context_t ctxt, + int part_index, + const exr_chunk_info_t* cinfo, + void* packed_data, + void* sample_data); + +/**************************************/ + +/** Initialize a \c exr_chunk_info_t structure when encoding scanline + * data (similar to read but does not do anything with a chunk + * table). + */ +EXR_EXPORT +exr_result_t exr_write_scanline_chunk_info ( + exr_context_t ctxt, int part_index, int y, exr_chunk_info_t* cinfo); + +/** Initialize a \c exr_chunk_info_t structure when encoding tiled data + * (similar to read but does not do anything with a chunk table). + */ +EXR_EXPORT +exr_result_t exr_write_tile_chunk_info ( + exr_context_t ctxt, + int part_index, + int tilex, + int tiley, + int levelx, + int levely, + exr_chunk_info_t* cinfo); + +/** + * @p y must the appropriate starting y for the specified chunk. + */ +EXR_EXPORT +exr_result_t exr_write_scanline_chunk ( + exr_context_t ctxt, + int part_index, + int y, + const void* packed_data, + uint64_t packed_size); + +/** + * @p y must the appropriate starting y for the specified chunk. + */ +EXR_EXPORT +exr_result_t exr_write_deep_scanline_chunk ( + exr_context_t ctxt, + int part_index, + int y, + const void* packed_data, + uint64_t packed_size, + uint64_t unpacked_size, + const void* sample_data, + uint64_t sample_data_size); + +EXR_EXPORT +exr_result_t exr_write_tile_chunk ( + exr_context_t ctxt, + int part_index, + int tilex, + int tiley, + int levelx, + int levely, + const void* packed_data, + uint64_t packed_size); + +EXR_EXPORT +exr_result_t exr_write_deep_tile_chunk ( + exr_context_t ctxt, + int part_index, + int tilex, + int tiley, + int levelx, + int levely, + const void* packed_data, + uint64_t packed_size, + uint64_t unpacked_size, + const void* sample_data, + uint64_t sample_data_size); + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +#endif /* OPENEXR_CORE_CHUNKIO_H */ diff --git a/third_party/tlRender-install-Release/include/OpenEXR/openexr_coding.h b/third_party/tlRender-install-Release/include/OpenEXR/openexr_coding.h new file mode 100644 index 00000000..10c9e9a3 --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenEXR/openexr_coding.h @@ -0,0 +1,141 @@ +/* +** SPDX-License-Identifier: BSD-3-Clause +** Copyright Contributors to the OpenEXR Project. +*/ + +#ifndef OPENEXR_CORE_CODING_H +#define OPENEXR_CORE_CODING_H + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/** @file */ + +/** + * Enum for use in a custom allocator in the encode/decode pipelines + * (that is, so the implementor knows whether to allocate on which + * device based on the buffer disposition). + */ +typedef enum exr_transcoding_pipeline_buffer_id +{ + EXR_TRANSCODE_BUFFER_PACKED, + EXR_TRANSCODE_BUFFER_UNPACKED, + EXR_TRANSCODE_BUFFER_COMPRESSED, + EXR_TRANSCODE_BUFFER_SCRATCH1, + EXR_TRANSCODE_BUFFER_SCRATCH2, + EXR_TRANSCODE_BUFFER_PACKED_SAMPLES, + EXR_TRANSCODE_BUFFER_SAMPLES +} exr_transcoding_pipeline_buffer_id_t; + +/** @brief Struct for negotiating buffers when decoding/encoding + * chunks of data. + * + * This is generic and meant to negotiate exr data bi-directionally, + * in that the same structure is used for both decoding and encoding + * chunks for read and write, respectively. + * + * The first half of the structure will be filled by the library, and + * the caller is expected to fill the second half appropriately. + */ +typedef struct +{ + /************************************************** + * Elements below are populated by the library when + * decoding is initialized/updated and must be left + * untouched when using the default decoder routines. + **************************************************/ + + /** Channel name. + * + * This is provided as a convenient reference. Do not free, this + * refers to the internal data structure in the context. + */ + const char* channel_name; + + /** Number of lines for this channel in this chunk. + * + * May be 0 or less than overall image height based on sampling + * (i.e. when in 4:2:0 type sampling) + */ + int32_t height; + + /** Width in pixel count. + * + * May be 0 or less than overall image width based on sampling + * (i.e. 4:2:2 will have some channels have fewer values). + */ + int32_t width; + + /** Horizontal subsampling information. */ + int32_t x_samples; + /** Vertical subsampling information. */ + int32_t y_samples; + + /** Linear flag from channel definition (used by b44). */ + uint8_t p_linear; + + /** How many bytes per pixel this channel consumes (2 for float16, + * 4 for float32/uint32). + */ + int8_t bytes_per_element; + + /** Small form of exr_pixel_type_t enum (EXR_PIXEL_UINT/HALF/FLOAT). */ + uint16_t data_type; + + /************************************************** + * Elements below must be edited by the caller + * to control encoding/decoding. + **************************************************/ + + /** How many bytes per pixel the input is or output should be + * (2 for float16, 4 for float32/uint32). Defaults to same + * size as input. + */ + int16_t user_bytes_per_element; + + /** Small form of exr_pixel_type_t enum + * (EXR_PIXEL_UINT/HALF/FLOAT). Defaults to same type as input. + */ + uint16_t user_data_type; + + /** Increment to get to next pixel. + * + * This is in bytes. Must be specified when the decode pointer is + * specified (and always for encode). + * + * This is useful for implementing transcoding generically of + * planar or interleaved data. For planar data, where the layout + * is RRRRRGGGGGBBBBB, you can pass in 1 * bytes per component. + */ + + int32_t user_pixel_stride; + + /** When \c lines > 1 for a chunk, this is the increment used to get + * from beginning of line to beginning of next line. + * + * This is in bytes. Must be specified when the decode pointer is + * specified (and always for encode). + */ + int32_t user_line_stride; + + /** This data member has different requirements reading vs + * writing. When reading, if this is left as `NULL`, the channel + * will be skipped during read and not filled in. During a write + * operation, this pointer is considered const and not + * modified. To make this more clear, a union is used here. + */ + union + { + uint8_t* decode_to_ptr; + const uint8_t* encode_from_ptr; + }; +} exr_coding_channel_info_t; + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +#endif /* OPENEXR_CORE_CODING_H */ diff --git a/third_party/tlRender-install-Release/include/OpenEXR/openexr_compression.h b/third_party/tlRender-install-Release/include/OpenEXR/openexr_compression.h new file mode 100644 index 00000000..990f21f0 --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenEXR/openexr_compression.h @@ -0,0 +1,111 @@ +/* +** SPDX-License-Identifier: BSD-3-Clause +** Copyright Contributors to the OpenEXR Project. +*/ + +#ifndef OPENEXR_CORE_COMPRESSION_H +#define OPENEXR_CORE_COMPRESSION_H + +#include "openexr_context.h" + +#include "openexr_encode.h" +#include "openexr_decode.h" + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/** @file */ + +/** Computes a buffer that will be large enough to hold the compressed + * data. This may include some extra padding for headers / scratch */ +EXR_EXPORT +size_t exr_compress_max_buffer_size (size_t in_bytes); + +/** Compresses a buffer using a zlib style compression. + * + * If the level is -1, will use the default compression set to the library + * \ref exr_set_default_zip_compression_level + * data. This may include some extra padding for headers / scratch */ +EXR_EXPORT +exr_result_t exr_compress_buffer ( + exr_const_context_t ctxt, + int level, + const void* in, + size_t in_bytes, + void* out, + size_t out_bytes_avail, + size_t* actual_out); + +/** Decompresses a buffer using a zlib style compression. */ +EXR_EXPORT +exr_result_t exr_uncompress_buffer ( + exr_const_context_t ctxt, + const void* in, + size_t in_bytes, + void* out, + size_t out_bytes_avail, + size_t* actual_out); + +/** Apply simple run length encoding and put in the output buffer. */ +EXR_EXPORT +size_t exr_rle_compress_buffer ( + size_t in_bytes, + const void* in, + void* out, + size_t out_bytes_avail); + +/** Decode run length encoding and put in the output buffer. */ +EXR_EXPORT +size_t exr_rle_uncompress_buffer ( + size_t in_bytes, + size_t max_len, + const void* in, + void* out); + + +/** Routine to query the lines required per chunk to compress with the + * specified method. + * + * This is only meaningful for scanline encodings, tiled + * representations have a different interpretation of this. + * + * These are constant values, this function returns -1 if the compression + * type is unknown. + */ +EXR_EXPORT +int exr_compression_lines_per_chunk (exr_compression_t comptype); + +/** Exposes a method to apply compression to a chunk of data. + * + * This can be useful for inheriting default behavior of the + * compression stage of an encoding pipeline, or other helper classes + * to expose compression. + * + * NB: As implied, this function will be used during a normal encode + * and write operation but can be used directly with a temporary + * context (i.e. not running the full encode pipeline). + */ +EXR_EXPORT +exr_result_t exr_compress_chunk (exr_encode_pipeline_t *encode_state); + +/** Exposes a method to decompress a chunk of data. + * + * This can be useful for inheriting default behavior of the + * uncompression stage of an decoding pipeline, or other helper classes + * to expose compress / uncompress operations. + * + * NB: This function will be used during a normal read and decode + * operation but can be used directly with a temporary context (i.e. + * not running the full decode pipeline). + */ +EXR_EXPORT +exr_result_t exr_uncompress_chunk (exr_decode_pipeline_t *decode_state); + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +#endif /* OPENEXR_CORE_COMPRESSION_H */ diff --git a/third_party/tlRender-install-Release/include/OpenEXR/openexr_config.h b/third_party/tlRender-install-Release/include/OpenEXR/openexr_config.h new file mode 100644 index 00000000..f16edbb6 --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenEXR/openexr_config.h @@ -0,0 +1,47 @@ +/* +** SPDX-License-Identifier: BSD-3-Clause +** Copyright Contributors to the OpenEXR Project. +*/ + +#ifndef OPENEXR_CONF_H +#define OPENEXR_CONF_H +#pragma once + +#include "OpenEXRConfig.h" +#include +#include + +/// \addtogroup ExportMacros +/// @{ + +// are we making a DLL under windows (might be msvc or mingw or others) +#if defined(OPENEXR_DLL) + +// when building as a DLL for windows, typical dllexport/import case +// where we need to switch depending on whether we are compiling +// internally or not +# if defined(OPENEXRCORE_EXPORTS) +# define EXR_EXPORT __declspec (dllexport) +# else +# define EXR_EXPORT __declspec (dllimport) +# endif + +#else + +# define EXR_EXPORT OPENEXR_EXPORT + +#endif + +/* + * MSVC does have printf format checks, but it is not in the form of a + * function attribute, so just skip for non-GCC/clang builds + */ +#if defined(__GNUC__) || defined(__clang__) +# define EXR_PRINTF_FUNC_ATTRIBUTE __attribute__ ((format (printf, 3, 4))) +#else +# define EXR_PRINTF_FUNC_ATTRIBUTE +#endif + +/// @} + +#endif /* OPENEXR_CONF_H */ diff --git a/third_party/tlRender-install-Release/include/OpenEXR/openexr_context.h b/third_party/tlRender-install-Release/include/OpenEXR/openexr_context.h new file mode 100644 index 00000000..d2dcdf0c --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenEXR/openexr_context.h @@ -0,0 +1,588 @@ +/* +** SPDX-License-Identifier: BSD-3-Clause +** Copyright Contributors to the OpenEXR Project. +*/ + +#ifndef OPENEXR_CONTEXT_H +#define OPENEXR_CONTEXT_H + +#include "openexr_errors.h" + +#include "openexr_base.h" + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/** @file */ + +/** + * @defgroup Context Context related definitions + * + * A context is a single instance of an OpenEXR file or stream. Beyond + * a particular file or stream handle, it also has separate controls + * for error handling and memory allocation. This is done to enable + * encoding or decoding on mixed hardware. + * + * @{ + */ + +/** Opaque context handle + * + * The implementation of this is partly opaque to provide better + * version portability, and all accesses to relevant data should + * happen using provided functions. This handle serves as a container + * and identifier for all the metadata and parts associated with a + * file and/or stream. + */ + +typedef struct _priv_exr_context_t* exr_context_t; +typedef const struct _priv_exr_context_t* exr_const_context_t; + +/** + * @defgroup ContextFunctions OpenEXR Context Stream/File Functions + * + * @brief These are a group of function interfaces used to customize + * the error handling, memory allocations, or I/O behavior of an + * OpenEXR context. + * + * @{ + */ + +/** @brief Stream error notifier + * + * This function pointer is provided to the stream functions by the + * library such that they can provide a nice error message to the + * user during stream operations. + */ +typedef exr_result_t (*exr_stream_error_func_ptr_t) ( + exr_const_context_t ctxt, exr_result_t code, const char* fmt, ...) + EXR_PRINTF_FUNC_ATTRIBUTE; + +/** @brief Error callback function + * + * Because a file can be read from using many threads at once, it is + * difficult to store an error message for later retrieval. As such, + * when a file is constructed, a callback function can be provided + * which delivers an error message for the calling application to + * handle. This will then be delivered on the same thread causing the + * error. + */ +typedef void (*exr_error_handler_cb_t) ( + exr_const_context_t ctxt, exr_result_t code, const char* msg); + +/** Destroy custom stream function pointer + * + * Generic callback to clean up user data for custom streams. + * This is called when the file is closed and expected not to + * error. + * + * @param failed Indicates the write operation failed, the + * implementor may wish to cleanup temporary files + * @param ctxt The context + * @param userdata The userdata + */ +typedef void (*exr_destroy_stream_func_ptr_t) ( + exr_const_context_t ctxt, void* userdata, int failed); + +/** Query stream size function pointer + * + * Used to query the size of the file, or amount of data representing + * the openexr file in the data stream. + * + * This is used to validate requests against the file. If the size is + * unavailable, return -1, which will disable these validation steps + * for this file, although appropriate memory safeguards must be in + * place in the calling application. + */ +typedef int64_t (*exr_query_size_func_ptr_t) ( + exr_const_context_t ctxt, void* userdata); + +/** @brief Read custom function pointer + * + * Used to read data from a custom output. Expects similar semantics to + * pread or ReadFile with overlapped data under win32. + * + * It is required that this provides thread-safe concurrent access to + * the same file. If the stream/input layer you are providing does + * not have this guarantee, your are responsible for providing + * appropriate serialization of requests. + * + * A file should be expected to be accessed in the following pattern: + * - upon open, the header and part information attributes will be read + * - upon the first image read request, the offset tables will be read + * multiple threads accessing this concurrently may actually read + * these values at the same time + * - chunks can then be read in any order as preferred by the + * application + * + * While this should mean that the header will be read in 'stream' + * order (no seeks required), no guarantee is made beyond that to + * retrieve image/deep data in order. So if the backing file is + * truly a stream, it is up to the provider to implement appropriate + * caching of data to give the appearance of being able to seek/read + * atomically. + * + * TODO: This does not handle the ability to mmap a file and get to + * zero copy + */ +typedef int64_t (*exr_read_func_ptr_t) ( + exr_const_context_t ctxt, + void* userdata, + void* buffer, + uint64_t sz, + uint64_t offset, + exr_stream_error_func_ptr_t error_cb); + +/** Write custom function pointer + * + * Used to write data to a custom output. Expects similar semantics to + * pwrite or WriteFile with overlapped data under win32. + * + * It is required that this provides thread-safe concurrent access to + * the same file. While it is unlikely that multiple threads will + * be used to write data for compressed forms, it is possible. + * + * A file should be expected to be accessed in the following pattern: + * - upon open, the header and part information attributes is constructed. + * + * - when the write_header routine is called, the header becomes immutable + * and is written to the file. This computes the space to store the chunk + * offsets, but does not yet write the values. + * + * - Image chunks are written to the file, and appear in the order + * they are written, not in the ordering that is required by the + * chunk offset table (unless written in that order). This may vary + * slightly if the size of the chunks is not directly known and + * tight packing of data is necessary. + * + * - at file close, the chunk offset tables are written to the file. + */ +typedef int64_t (*exr_write_func_ptr_t) ( + exr_const_context_t ctxt, + void* userdata, + const void* buffer, + uint64_t sz, + uint64_t offset, + exr_stream_error_func_ptr_t error_cb); + +/** @brief Struct used to pass function pointers into the context + * initialization routines. + * + * This partly exists to avoid the chicken and egg issue around + * creating the storage needed for the context on systems which want + * to override the malloc/free routines. + * + * However, it also serves to make a tidier/simpler set of functions + * to create and start processing exr files. + * + * The size member is required for version portability. + * + * It can be initialized using \c EXR_DEFAULT_CONTEXT_INITIALIZER. + * + * \code{.c} + * exr_context_initializer_t myctxtinit = DEFAULT_CONTEXT_INITIALIZER; + * myctxtinit.error_cb = &my_super_cool_error_callback_function; + * ... + * \endcode + * + */ +typedef struct _exr_context_initializer_v3 +{ + /** @brief Size member to tag initializer for version stability. + * + * This should be initialized to the size of the current + * structure. This allows EXR to add functions or other + * initializers in the future, and retain version compatibility + */ + size_t size; + + /** @brief Error callback function pointer + * + * The error callback is allowed to be `NULL`, and will use a + * default print which outputs to \c stderr. + * + * @sa exr_error_handler_cb_t + */ + exr_error_handler_cb_t error_handler_fn; + + /** Custom allocator, if `NULL`, will use malloc. @sa exr_memory_allocation_func_t */ + exr_memory_allocation_func_t alloc_fn; + + /** Custom deallocator, if `NULL`, will use free. @sa exr_memory_free_func_t */ + exr_memory_free_func_t free_fn; + + /** Blind data passed to custom read, size, write, destroy + * functions below. Up to user to manage this pointer. + */ + void* user_data; + + /** @brief Custom read routine. + * + * This is only used during read or update contexts. If this is + * provided, it is expected that the caller has previously made + * the stream available, and placed whatever stream/file data + * into \c user_data above. + * + * If this is `NULL`, and the context requested is for reading an + * exr file, an internal implementation is provided for reading + * from normal filesystem files, and the filename provided is + * attempted to be opened as such. + * + * Expected to be `NULL` for a write-only operation, but is ignored + * if it is provided. + * + * For update contexts, both read and write functions must be + * provided if either is. + * + * @sa exr_read_func_ptr_t + */ + exr_read_func_ptr_t read_fn; + + /** @brief Custom size query routine. + * + * Used to provide validation when reading header values. If this + * is not provided, but a custom read routine is provided, this + * will disable some of the validation checks when parsing the + * image header. + * + * Expected to be `NULL` for a write-only operation, but is ignored + * if it is provided. + * + * @sa exr_query_size_func_ptr_t + */ + exr_query_size_func_ptr_t size_fn; + + /** @brief Custom write routine. + * + * This is only used during write or update contexts. If this is + * provided, it is expected that the caller has previously made + * the stream available, and placed whatever stream/file data + * into \c user_data above. + * + * If this is `NULL`, and the context requested is for writing an + * exr file, an internal implementation is provided for reading + * from normal filesystem files, and the filename provided is + * attempted to be opened as such. + * + * For update contexts, both read and write functions must be + * provided if either is. + * + * @sa exr_write_func_ptr_t + */ + exr_write_func_ptr_t write_fn; + + /** @brief Optional function to destroy the user data block of a custom stream. + * + * Allows one to free any user allocated data, and close any handles. + * + * @sa exr_destroy_stream_func_ptr_t + * */ + exr_destroy_stream_func_ptr_t destroy_fn; + + /** Initialize a field specifying what the maximum image width + * allowed by the context is. See exr_set_default_maximum_image_size() to + * understand how this interacts with global defaults. + */ + int max_image_width; + + /** Initialize a field specifying what the maximum image height + * allowed by the context is. See exr_set_default_maximum_image_size() to + * understand how this interacts with global defaults. + */ + int max_image_height; + + /** Initialize a field specifying what the maximum tile width + * allowed by the context is. See exr_set_default_maximum_tile_size() to + * understand how this interacts with global defaults. + */ + int max_tile_width; + + /** Initialize a field specifying what the maximum tile height + * allowed by the context is. See exr_set_default_maximum_tile_size() to + * understand how this interacts with global defaults. + */ + int max_tile_height; + + /** Initialize a field specifying what the default zip compression level should be + * for this context. See exr_set_default_zip_compresion_level() to + * set it for all contexts. + */ + int zip_level; + + /** Initialize the default dwa compression quality. See + * exr_set_default_dwa_compression_quality() to set the default + * for all contexts. + */ + float dwa_quality; + + /** Initialize with a bitwise or of the various context flags + */ + int flags; + + uint8_t pad[4]; +} exr_context_initializer_t; + +/** @brief context flag which will enforce strict header validation + * checks and may prevent reading of files which could otherwise be + * processed. + */ +#define EXR_CONTEXT_FLAG_STRICT_HEADER (1 << 0) + +/** @brief Disables error messages while parsing headers + * + * The return values will remain the same, but error reporting will be + * skipped. This is only valid for reading contexts + */ +#define EXR_CONTEXT_FLAG_SILENT_HEADER_PARSE (1 << 1) + +/** @brief Disables reconstruction logic upon corrupt / missing data chunks + * + * This will disable the reconstruction logic that searches through an + * incomplete file, and will instead just return errors at read + * time. This is only valid for reading contexts + */ +#define EXR_CONTEXT_FLAG_DISABLE_CHUNK_RECONSTRUCTION (1 << 2) + +/** @brief Writes an old-style, sorted header with minimal information */ +#define EXR_CONTEXT_FLAG_WRITE_LEGACY_HEADER (1 << 3) + +/* clang-format off */ +/** @brief Simple macro to initialize the context initializer with default values. */ +#define EXR_DEFAULT_CONTEXT_INITIALIZER \ + { sizeof (exr_context_initializer_t), 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -2, -1.f, 0, { 0, 0, 0, 0 } } +/* clang-format on */ + +/** @} */ /* context function pointer declarations */ + +/** @brief Check the magic number of the file and report + * `EXR_ERR_SUCCESS` if the file appears to be a valid file (or at least + * has the correct magic number and can be read). + * + * The filename is assumed to be a UTF-8 encoded + * filename, as is standard on current Unix filesystems. Under + * windows, this will be widened to be a wchar_t. If the user provides + * custom I/O routines, the responsibility passes to the user for that + * behavior. + * + */ +EXR_EXPORT exr_result_t exr_test_file_header ( + const char* filename, const exr_context_initializer_t* ctxtdata); + +/** @brief Close and free any internally allocated memory, + * calling any provided destroy function for custom streams. + * + * If the file was opened for write, first save the chunk offsets + * or any other unwritten data. + */ +EXR_EXPORT exr_result_t exr_finish (exr_context_t* ctxt); + +/** @brief Create and initialize a read-only exr read context. + * + * If a custom read function is provided, the filename is for + * informational purposes only, the system assumes the user has + * previously opened a stream, file, or whatever and placed relevant + * data in userdata to access that. + * + * In the default case, the filename is assumed to be a UTF-8 encoded + * filename, as is standard on current Unix filesystems. Under + * windows, this will be widened to be a wchar_t. If the user provides + * custom I/O routines, the responsibility passes to the user for that + * behavior. + * + * One notable attribute of the context is that once it has been + * created and returned a successful code, it has parsed all the + * header data. This is done as one step such that it is easier to + * provide a safe context for multiple threads to request data from + * the same context concurrently. + * + * Once finished reading data, use exr_finish() to clean up + * the context. + * + * If you have custom I/O requirements, see the initializer context + * documentation \ref exr_context_initializer_t. The @p ctxtdata parameter + * is optional, if `NULL`, default values will be used. + */ +EXR_EXPORT exr_result_t exr_start_read ( + exr_context_t* ctxt, + const char* filename, + const exr_context_initializer_t* ctxtdata); + +/** @brief Enum describing how default files are handled during write. */ +typedef enum exr_default_write_mode +{ + EXR_WRITE_FILE_DIRECTLY = + 0, /**< Overwrite filename provided directly, deleted upon error. */ + EXR_INTERMEDIATE_TEMP_FILE = + 1 /**< Create a temporary file, renaming it upon successful write, leaving original upon error */ +} exr_default_write_mode_t; + +/** @brief Create and initialize a write-only context. + * + * If a custom write function is provided, the filename is for + * informational purposes only, and the @p default_mode parameter will be + * ignored. As such, the system assumes the user has previously opened + * a stream, file, or whatever and placed relevant data in userdata to + * access that. + * + * In the default case, the filename is assumed to be a UTF-8 encoded + * filename, as is standard on current Unix filesystems. Under + * windows, this will be widened to be a wchar_t. If the user provides + * custom I/O routines, the responsibility passes to the user for that + * behavior. + * + * Multi-Threading: To avoid issues with creating multi-part EXR + * files, the library approaches writing as a multi-step process, so + * the same concurrent guarantees can not be made for writing a + * file. The steps are: + * + * 1. Context creation (this function) + * + * 2. Part definition (required attributes and additional metadata) + * + * 3. Transition to writing data (this "commits" the part definitions, + * any changes requested after will result in an error) + * + * 4. Write part data in sequential order of parts (part0 + * -> partN-1). + * + * 5. Within each part, multiple threads can be encoding and writing + * data concurrently. For some EXR part definitions, this may be able + * to write data concurrently when it can predict the chunk sizes, or + * data is allowed to be padded. For others, it may need to + * temporarily cache chunks until the data is received to flush in + * order. The concurrency around this is handled by the library + * + * 6. Once finished writing data, use exr_finish() to clean + * up the context, which will flush any unwritten data such as the + * final chunk offset tables, and handle the temporary file flags. + * + * If you have custom I/O requirements, see the initializer context + * documentation \ref exr_context_initializer_t. The @p ctxtdata + * parameter is optional, if `NULL`, default values will be used. + */ +EXR_EXPORT exr_result_t exr_start_write ( + exr_context_t* ctxt, + const char* filename, + exr_default_write_mode_t default_mode, + const exr_context_initializer_t* ctxtdata); + +/** @brief Create a new context for updating an exr file in place. + * + * This is a custom mode that allows one to modify the value of a + * metadata entry, although not to change the size of the header, or + * any of the image data. + * + * If you have custom I/O requirements, see the initializer context + * documentation \ref exr_context_initializer_t. The @p ctxtdata parameter + * is optional, if `NULL`, default values will be used. + */ +EXR_EXPORT exr_result_t exr_start_inplace_header_update ( + exr_context_t* ctxt, + const char* filename, + const exr_context_initializer_t* ctxtdata); + +/** @brief Create a new context for temporary use in memory. + * + * This is a custom mode that does not supporting writing actual image + * data, but one can create one of these, manipulate attributes, + * define additional parts, run validation, etc. without any + * requirement of actual file i/o. + * + * Note that this creates an defines an initial part for use, so one + * can immediately start defining attributes into part index 0. + * + * See the initializer context documentation \ref + * exr_context_initializer_t to be able to provide allocation + * overrides or other controls. The @p ctxtdata parameter is optional, + * if `NULL`, default values will be used. + */ +EXR_EXPORT exr_result_t exr_start_temporary_context ( + exr_context_t* ctxt, + const char* context_name, + const exr_context_initializer_t* ctxtdata); + +/** @brief Retrieve the file name the context is for as provided + * during the start routine. + * + * Do not free the resulting string. + */ +EXR_EXPORT exr_result_t +exr_get_file_name (exr_const_context_t ctxt, const char** name); + +/** @brief Retrieve the file version and flags the context is for as + * parsed during the start routine. + */ +EXR_EXPORT exr_result_t +exr_get_file_version_and_flags (exr_const_context_t ctxt, uint32_t* ver); + +/** @brief Query the user data the context was constructed with. This + * is perhaps useful in the error handler callback to jump back into + * an object the user controls. + */ +EXR_EXPORT exr_result_t +exr_get_user_data (exr_const_context_t ctxt, void** userdata); + +/** Any opaque attribute data entry of the specified type is tagged + * with these functions enabling downstream users to unpack (or pack) + * the data. + * + * The library handles the memory packed data internally, but the + * handler is expected to allocate and manage memory for the + * *unpacked* buffer (the library will call the destroy function). + * + * NB: the pack function will be called twice (unless there is a + * memory failure), the first with a `NULL` buffer, requesting the + * maximum size (or exact size if known) for the packed buffer, then + * the second to fill the output packed buffer, at which point the + * size can be re-updated to have the final, precise size to put into + * the file. + */ +EXR_EXPORT exr_result_t exr_register_attr_type_handler ( + exr_context_t ctxt, + const char* type, + exr_result_t (*unpack_func_ptr) ( + exr_context_t ctxt, + const void* data, + int32_t attrsize, + int32_t* outsize, + void** outbuffer), + exr_result_t (*pack_func_ptr) ( + exr_context_t ctxt, + const void* data, + int32_t datasize, + int32_t* outsize, + void* outbuffer), + void (*destroy_unpacked_func_ptr) ( + exr_context_t ctxt, void* data, int32_t datasize)); + +/** @brief Enable long name support in the output context */ +EXR_EXPORT exr_result_t +exr_set_longname_support (exr_context_t ctxt, int onoff); + +/** @brief Write the header data. + * + * Opening a new output file has a small initialization state problem + * compared to opening for read/update: we need to enable the user + * to specify an arbitrary set of metadata across an arbitrary number + * of parts. To avoid having to create the list of parts and entire + * metadata up front, prior to calling the above exr_start_write(), + * allow the data to be set, then once this is called, it switches + * into a mode where the library assumes the data is now valid. + * + * It will recompute the number of chunks that will be written, and + * reset the chunk offsets. If you modify file attributes or part + * information after a call to this, it will error. + */ +EXR_EXPORT exr_result_t exr_write_header (exr_context_t ctxt); + +/** @} */ + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +#endif /* OPENEXR_CONTEXT_H */ diff --git a/third_party/tlRender-install-Release/include/OpenEXR/openexr_debug.h b/third_party/tlRender-install-Release/include/OpenEXR/openexr_debug.h new file mode 100644 index 00000000..20473503 --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenEXR/openexr_debug.h @@ -0,0 +1,27 @@ +/* +** SPDX-License-Identifier: BSD-3-Clause +** Copyright Contributors to the OpenEXR Project. +*/ + +#ifndef OPENEXR_DEBUG_H +#define OPENEXR_DEBUG_H + +#include "openexr_context.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** @file */ + +/** Debug function: print to stdout the parts and attributes of the + * context @p c + */ +EXR_EXPORT exr_result_t +exr_print_context_info (exr_const_context_t c, int verbose); + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +#endif /* OPENEXR_DEBUG_H */ diff --git a/third_party/tlRender-install-Release/include/OpenEXR/openexr_decode.h b/third_party/tlRender-install-Release/include/OpenEXR/openexr_decode.h new file mode 100644 index 00000000..ba53c795 --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenEXR/openexr_decode.h @@ -0,0 +1,334 @@ +/* +** SPDX-License-Identifier: BSD-3-Clause +** Copyright Contributors to the OpenEXR Project. +*/ + +#ifndef OPENEXR_CORE_DECODE_H +#define OPENEXR_CORE_DECODE_H + +#include "openexr_chunkio.h" +#include "openexr_coding.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** @file */ + +/** Can be bit-wise or'ed into the decode_flags in the decode pipeline. + * + * Indicates that the sample count table should be decoded to a an + * individual sample count list (n, m, o, ...), with an extra int at + * the end containing the total samples. + * + * Without this (i.e. a value of 0 in that bit), indicates the sample + * count table should be decoded to a cumulative list (n, n+m, n+m+o, + * ...), which is the on-disk representation. + */ +#define EXR_DECODE_SAMPLE_COUNTS_AS_INDIVIDUAL ((uint16_t) (1 << 0)) + +/** Can be bit-wise or'ed into the decode_flags in the decode pipeline. + * + * Indicates that the data in the channel pointers to decode to is not + * a direct pointer, but instead is a pointer-to-pointers. In this + * mode, the user_pixel_stride and user_line_stride are used to + * advance the pointer offsets for each pixel in the output, but the + * user_bytes_per_element and user_data_type are used to put + * (successive) entries into each destination pointer (if not `NULL`). + * + * So each channel pointer must then point to an array of + * chunk.width * chunk.height pointers. + * + * With this, you can only extract desired pixels (although all the + * pixels must be initially decompressed) to handle such operations + * like proxying where you might want to read every other pixel. + * + * If this is NOT set (0), the default unpacking routine assumes the + * data will be planar and contiguous (each channel is a separate + * memory block), ignoring user_line_stride and user_pixel_stride. + */ +#define EXR_DECODE_NON_IMAGE_DATA_AS_POINTERS ((uint16_t) (1 << 1)) + +/** + * When reading non-image data (i.e. deep), only read the sample table. + */ +#define EXR_DECODE_SAMPLE_DATA_ONLY ((uint16_t) (1 << 2)) + +/** + * Struct meant to be used on a per-thread basis for reading exr data + * + * As should be obvious, this structure is NOT thread safe, but rather + * meant to be used by separate threads, which can all be accessing + * the same context concurrently. + */ +typedef struct _exr_decode_pipeline +{ + /** Used for versioning the decode pipeline in the future. + * + * \ref EXR_DECODE_PIPELINE_INITIALIZER + */ + size_t pipe_size; + + /** The output channel information for this chunk. + * + * User is expected to fill the channel pointers for the desired + * output channels (any that are `NULL` will be skipped) if you are + * going to use exr_decoding_choose_default_routines(). If all that is + * desired is to read and decompress the data, this can be left + * uninitialized. + * + * Describes the channel information. This information is + * allocated dynamically during exr_decoding_initialize(). + */ + exr_coding_channel_info_t* channels; + int16_t channel_count; + + /** Decode flags to control the behavior. */ + uint16_t decode_flags; + + /** Copy of the parameters given to the initialize/update for + * convenience. + */ + int part_index; + exr_const_context_t context; + exr_chunk_info_t chunk; + + /** How many lines of the chunk to skip filling, assumes the + * pointer is at the beginning of data (i.e. includes this + * skip so does not need to be adjusted + */ + int32_t user_line_begin_skip; + + /** How many lines of the chunk to ignore at the end, assumes the + * output is meant to be N lines smaller + */ + int32_t user_line_end_ignore; + + /** How many bytes were actually decoded when items compressed */ + uint64_t bytes_decompressed; + + /** Can be used by the user to pass custom context data through + * the decode pipeline. + */ + void* decoding_user_data; + + /** The (compressed) buffer. + * + * If `NULL`, will be allocated during the run of the pipeline. + * + * If the caller wishes to take control of the buffer, simple + * adopt the pointer and set it to `NULL` here. Be cognizant of any + * custom allocators. + */ + void* packed_buffer; + + /** Used when re-using the same decode pipeline struct to know if + * chunk is changed size whether current buffer is large enough. + */ + size_t packed_alloc_size; + + /** The decompressed buffer (unpacked_size from the chunk block + * info), but still packed into storage order, only needed for + * compressed files. + * + * If `NULL`, will be allocated during the run of the pipeline when + * needed. + * + * If the caller wishes to take control of the buffer, simple + * adopt the pointer and set it to `NULL` here. Be cognizant of any + * custom allocators. + */ + void* unpacked_buffer; + + /** Used when re-using the same decode pipeline struct to know if + * chunk is changed size whether current buffer is large enough. + */ + size_t unpacked_alloc_size; + + /** For deep or other non-image data: packed sample table + * (compressed, raw on disk representation). + */ + void* packed_sample_count_table; + size_t packed_sample_count_alloc_size; + + /** Usable, native sample count table. Depending on the flag set + * above, will be decoded to either a cumulative list (n, n+m, + * n+m+o, ...), or an individual table (n, m, o, ...). As an + * optimization, if the latter individual count table is chosen, + * an extra int32_t will be allocated at the end of the table to + * contain the total count of samples, so the table will be n+1 + * samples in size. + */ + int32_t* sample_count_table; + size_t sample_count_alloc_size; + + /** A scratch buffer of unpacked_size for intermediate results. + * + * If `NULL`, will be allocated during the run of the pipeline when + * needed. + * + * If the caller wishes to take control of the buffer, simple + * adopt the pointer and set it to `NULL` here. Be cognizant of any + * custom allocators. + */ + void* scratch_buffer_1; + + /** Used when re-using the same decode pipeline struct to know if + * chunk is changed size whether current buffer is large enough. + */ + size_t scratch_alloc_size_1; + + /** Some decompression routines may need a second scratch buffer (zlib). + * + * If `NULL`, will be allocated during the run of the pipeline when + * needed. + * + * If the caller wishes to take control of the buffer, simple + * adopt the pointer and set it to `NULL` here. Be cognizant of any + * custom allocators. + */ + void* scratch_buffer_2; + + /** Used when re-using the same decode pipeline struct to know if + * chunk is changed size whether current buffer is large enough. + */ + size_t scratch_alloc_size_2; + + /** Enable a custom allocator for the different buffers (if + * decoding on a GPU). If `NULL`, will use the allocator from the + * context. + */ + void* (*alloc_fn) (exr_transcoding_pipeline_buffer_id_t, size_t); + + /** Enable a custom allocator for the different buffers (if + * decoding on a GPU). If `NULL`, will use the allocator from the + * context. + */ + void (*free_fn) (exr_transcoding_pipeline_buffer_id_t, void*); + + /** Function chosen to read chunk data from the context. + * + * Initialized to a default generic read routine, may be updated + * based on channel information when + * exr_decoding_choose_default_routines() is called. This is done such that + * if the file is uncompressed and the output channel data is + * planar and the same type, the read function can read straight + * into the output channels, getting closer to a zero-copy + * operation. Otherwise a more traditional read, decompress, then + * unpack pipeline will be used with a default reader. + * + * This is allowed to be overridden, but probably is not necessary + * in most scenarios. + */ + exr_result_t (*read_fn) (struct _exr_decode_pipeline* pipeline); + + /** Function chosen based on the compression type of the part to + * decompress data. + * + * If the user has a custom decompression method for the + * compression on this part, this can be changed after + * initialization. + * + * If only compressed data is desired, then assign this to `NULL` + * after initialization. + */ + exr_result_t (*decompress_fn) (struct _exr_decode_pipeline* pipeline); + + /** Function which can be provided if you have bespoke handling for + * non-image data and need to re-allocate the data to handle the + * about-to-be unpacked data. + * + * If left `NULL`, will assume the memory pointed to by the channel + * pointers is sufficient. + */ + exr_result_t (*realloc_nonimage_data_fn) ( + struct _exr_decode_pipeline* pipeline); + + /** Function chosen based on the output layout of the channels of the part to + * decompress data. + * + * This will be `NULL` after initialization, until the user + * specifies a custom routine, or initializes the channel data and + * calls exr_decoding_choose_default_routines(). + * + * If only compressed data is desired, then leave or assign this + * to `NULL` after initialization. + */ + exr_result_t (*unpack_and_convert_fn) ( + struct _exr_decode_pipeline* pipeline); + + /** Small stash of channel info values. This is faster than calling + * malloc when the channel count in the part is small (RGBAZ), + * which is super common, however if there are a large number of + * channels, it will allocate space for that, so do not rely on + * this being used. + */ + exr_coding_channel_info_t _quick_chan_store[5]; +} exr_decode_pipeline_t; + +/** @brief Simple macro to initialize an empty decode pipeline. */ +#define EXR_DECODE_PIPELINE_INITIALIZER \ + { \ + sizeof(exr_decode_pipeline_t), 0 \ + } + +/** Initialize the decoding pipeline structure with the channel info + * for the specified part, and the first block to be read. + * + * NB: The decode->unpack_and_convert_fn field will be `NULL` after this. If that + * stage is desired, initialize the channel output information and + * call exr_decoding_choose_default_routines(). + */ +EXR_EXPORT +exr_result_t exr_decoding_initialize ( + exr_const_context_t ctxt, + int part_index, + const exr_chunk_info_t* cinfo, + exr_decode_pipeline_t* decode); + +/** Given an initialized decode pipeline, find appropriate functions + * to read and shuffle/convert data into the defined channel outputs. + * + * Calling this is not required if custom routines will be used, or if + * just the raw compressed data is desired. Although in that scenario, + * it is probably easier to just read the chunk directly using + * exr_read_chunk(). + */ +EXR_EXPORT +exr_result_t exr_decoding_choose_default_routines ( + exr_const_context_t ctxt, int part_index, exr_decode_pipeline_t* decode); + +/** Given a decode pipeline previously initialized, update it for the + * new chunk to be read. + * + * In this manner, memory buffers can be re-used to avoid continual + * malloc/free calls. Further, it allows the previous choices for + * the various functions to be quickly re-used. + */ +EXR_EXPORT +exr_result_t exr_decoding_update ( + exr_const_context_t ctxt, + int part_index, + const exr_chunk_info_t* cinfo, + exr_decode_pipeline_t* decode); + +/** Execute the decoding pipeline. */ +EXR_EXPORT +exr_result_t exr_decoding_run ( + exr_const_context_t ctxt, int part_index, exr_decode_pipeline_t* decode); + +/** Free any intermediate memory in the decoding pipeline. + * + * This does *not* free any pointers referred to in the channel info + * areas, but rather only the intermediate buffers and memory needed + * for the structure itself. + */ +EXR_EXPORT +exr_result_t +exr_decoding_destroy (exr_const_context_t ctxt, exr_decode_pipeline_t* decode); + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +#endif /* OPENEXR_CORE_DECODE_H */ diff --git a/third_party/tlRender-install-Release/include/OpenEXR/openexr_encode.h b/third_party/tlRender-install-Release/include/OpenEXR/openexr_encode.h new file mode 100644 index 00000000..b5d79b2f --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenEXR/openexr_encode.h @@ -0,0 +1,350 @@ +/* +** SPDX-License-Identifier: BSD-3-Clause +** Copyright Contributors to the OpenEXR Project. +*/ + +#ifndef OPENEXR_CORE_ENCODE_H +#define OPENEXR_CORE_ENCODE_H + +#include "openexr_chunkio.h" +#include "openexr_coding.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** @file */ + +/** Can be bit-wise or'ed into the decode_flags in the decode pipeline. + * + * Indicates that the sample count table should be encoded from an + * individual sample count list (n, m, o, ...), meaning it will have + * to compute the cumulative counts on the fly. + * + * Without this (i.e. a value of 0 in that bit), indicates the sample + * count table is already a cumulative list (n, n+m, n+m+o, ...), + * which is the on-disk representation. + */ +#define EXR_ENCODE_DATA_SAMPLE_COUNTS_ARE_INDIVIDUAL ((uint16_t) (1 << 0)) + +/** Can be bit-wise or'ed into the decode_flags in the decode pipeline. + * + * Indicates that the data in the channel pointers to encode from is not + * a direct pointer, but instead is a pointer-to-pointers. In this + * mode, the user_pixel_stride and user_line_stride are used to + * advance the pointer offsets for each pixel in the output, but the + * user_bytes_per_element and user_data_type are used to put + * (successive) entries into each destination. + * + * So each channel pointer must then point to an array of + * chunk.width * chunk.height pointers. If an entry is + * `NULL`, 0 samples will be placed in the output. + * + * If this is NOT set (0), the default packing routine assumes the + * data will be planar and contiguous (each channel is a separate + * memory block), ignoring user_line_stride and user_pixel_stride and + * advancing only by the sample counts and bytes per element. + */ +#define EXR_ENCODE_NON_IMAGE_DATA_AS_POINTERS ((uint16_t) (1 << 1)) + +/** Struct meant to be used on a per-thread basis for writing exr data. + * + * As should be obvious, this structure is NOT thread safe, but rather + * meant to be used by separate threads, which can all be accessing + * the same context concurrently. + */ +typedef struct _exr_encode_pipeline +{ + /** Used for versioning the decode pipeline in the future + * + * \ref EXR_ENCODE_PIPELINE_INITIALIZER + */ + size_t pipe_size; + + /** The output channel information for this chunk. + * + * User is expected to fill the channel pointers for the input + * channels. For writing, all channels must be initialized prior + * to using exr_encoding_choose_default_routines(). If a custom pack routine + * is written, that is up to the implementor. + * + * Describes the channel information. This information is + * allocated dynamically during exr_encoding_initialize(). + */ + exr_coding_channel_info_t* channels; + int16_t channel_count; + + /** Encode flags to control the behavior. */ + uint16_t encode_flags; + + /** Copy of the parameters given to the initialize/update for convenience. */ + int part_index; + exr_const_context_t context; + exr_chunk_info_t chunk; + + /** Can be used by the user to pass custom context data through + * the encode pipeline. + */ + void* encoding_user_data; + + /** The packed buffer where individual channels have been put into here. + * + * If `NULL`, will be allocated during the run of the pipeline. + * + * If the caller wishes to take control of the buffer, simple + * adopt the pointer and set it to `NULL` here. Be cognizant of any + * custom allocators. + */ + void* packed_buffer; + + /** Differing from the allocation size, the number of actual bytes */ + uint64_t packed_bytes; + + /** Used when re-using the same encode pipeline struct to know if + * chunk is changed size whether current buffer is large enough + * + * If `NULL`, will be allocated during the run of the pipeline. + * + * If the caller wishes to take control of the buffer, simple + * adopt the pointer and set it to `NULL` here. Be cognizant of any + * custom allocators. + */ + size_t packed_alloc_size; + + /** For deep data. NB: the members NOT const because we need to + * temporarily swap it to xdr order and restore it (to avoid a + * duplicate buffer allocation). + * + * Depending on the flag set above, will be treated either as a + * cumulative list (n, n+m, n+m+o, ...), or an individual table + * (n, m, o, ...). */ + int32_t* sample_count_table; + + /** Allocated table size (to avoid re-allocations). Number of + * samples must always be width * height for the chunk. + */ + size_t sample_count_alloc_size; + + /** Packed sample table (compressed, raw on disk representation) + * for deep or other non-image data. + */ + void* packed_sample_count_table; + + /** Number of bytes to write (actual size) for the + * packed_sample_count_table. + */ + size_t packed_sample_count_bytes; + + /** Allocated size (to avoid re-allocations) for the + * packed_sample_count_table. + */ + size_t packed_sample_count_alloc_size; + + /** The compressed buffer, only needed for compressed files. + * + * If `NULL`, will be allocated during the run of the pipeline when + * needed. + * + * If the caller wishes to take control of the buffer, simple + * adopt the pointer and set it to `NULL` here. Be cognizant of any + * custom allocators. + */ + void* compressed_buffer; + + /** Must be filled in as the pipeline runs to inform the writing + * software about the compressed size of the chunk (if it is an + * uncompressed file or the compression would make the file + * larger, it is expected to be the packed_buffer) + * + * If the caller wishes to take control of the buffer, simple + * adopt the pointer and set it to zero here. Be cognizant of any + * custom allocators. + */ + size_t compressed_bytes; + + /** Used when re-using the same encode pipeline struct to know if + * chunk is changed size whether current buffer is large enough. + * + * If `NULL`, will be allocated during the run of the pipeline when + * needed. + * + * If the caller wishes to take control of the buffer, simple + * adopt the pointer and set it to zero here. Be cognizant of any + * custom allocators. + */ + size_t compressed_alloc_size; + + /** A scratch buffer for intermediate results. + * + * If `NULL`, will be allocated during the run of the pipeline when + * needed. + * + * If the caller wishes to take control of the buffer, simple + * adopt the pointer and set it to `NULL` here. Be cognizant of any + * custom allocators. + */ + void* scratch_buffer_1; + + /** Used when re-using the same encode pipeline struct to know if + * chunk is changed size whether current buffer is large enough. + * + * If `NULL`, will be allocated during the run of the pipeline when + * needed. + * + * If the caller wishes to take control of the buffer, simple + * adopt the pointer and set it to `NULL` here. Be cognizant of any + * custom allocators. + */ + size_t scratch_alloc_size_1; + + /** Some compression routines may need a second scratch buffer. + * + * If `NULL`, will be allocated during the run of the pipeline when + * needed. + * + * If the caller wishes to take control of the buffer, simple + * adopt the pointer and set it to `NULL` here. Be cognizant of any + * custom allocators. + */ + void* scratch_buffer_2; + + /** Used when re-using the same encode pipeline struct to know if + * chunk is changed size whether current buffer is large enough. + */ + size_t scratch_alloc_size_2; + + /** Enable a custom allocator for the different buffers (if + * encoding on a GPU). If `NULL`, will use the allocator from the + * context. + */ + void* (*alloc_fn) (exr_transcoding_pipeline_buffer_id_t, size_t); + + /** Enable a custom allocator for the different buffers (if + * encoding on a GPU). If `NULL`, will use the allocator from the + * context. + */ + void (*free_fn) (exr_transcoding_pipeline_buffer_id_t, void*); + + /** Function chosen based on the output layout of the channels of the part to + * decompress data. + * + * If the user has a custom method for the + * compression on this part, this can be changed after + * initialization. + */ + exr_result_t (*convert_and_pack_fn) (struct _exr_encode_pipeline* pipeline); + + /** Function chosen based on the compression type of the part to + * compress data. + * + * If the user has a custom compression method for the compression + * type on this part, this can be changed after initialization. + */ + exr_result_t (*compress_fn) (struct _exr_encode_pipeline* pipeline); + + /** This routine is used when waiting for other threads to finish + * writing previous chunks such that this thread can write this + * chunk. This is used for parts which have a specified chunk + * ordering (increasing/decreasing y) and the chunks can not be + * written randomly (as could be true for uncompressed). + * + * This enables the calling application to contribute thread time + * to other computation as needed, or just use something like + * pthread_yield(). + * + * By default, this routine will be assigned to a function which + * returns an error, failing the encode immediately. In this way, + * it assumes that there is only one thread being used for + * writing. + * + * It is up to the user to provide an appropriate routine if + * performing multi-threaded writing. + */ + exr_result_t (*yield_until_ready_fn) ( + struct _exr_encode_pipeline* pipeline); + + /** Function chosen to write chunk data to the context. + * + * This is allowed to be overridden, but probably is not necessary + * in most scenarios. + */ + exr_result_t (*write_fn) (struct _exr_encode_pipeline* pipeline); + + /** Small stash of channel info values. This is faster than calling + * malloc when the channel count in the part is small (RGBAZ), + * which is super common, however if there are a large number of + * channels, it will allocate space for that, so do not rely on + * this being used. + */ + exr_coding_channel_info_t _quick_chan_store[5]; +} exr_encode_pipeline_t; + +/** @brief Simple macro to initialize an empty decode pipeline. */ +#define EXR_ENCODE_PIPELINE_INITIALIZER \ + { \ + sizeof(exr_encode_pipeline_t), 0 \ + } + +/** Initialize the encoding pipeline structure with the channel info + * for the specified part based on the chunk to be written. + * + * NB: The encode_pipe->pack_and_convert_fn field will be `NULL` after this. If that + * stage is desired, initialize the channel output information and + * call exr_encoding_choose_default_routines(). + */ +EXR_EXPORT +exr_result_t exr_encoding_initialize ( + exr_const_context_t ctxt, + int part_index, + const exr_chunk_info_t* cinfo, + exr_encode_pipeline_t* encode_pipe); + +/** Given an initialized encode pipeline, find an appropriate + * function to shuffle and convert data into the defined channel + * outputs. + * + * Calling this is not required if a custom routine will be used, or + * if just the raw decompressed data is desired. + */ +EXR_EXPORT +exr_result_t exr_encoding_choose_default_routines ( + exr_const_context_t ctxt, + int part_index, + exr_encode_pipeline_t* encode_pipe); + +/** Given a encode pipeline previously initialized, update it for the + * new chunk to be written. + * + * In this manner, memory buffers can be re-used to avoid continual + * malloc/free calls. Further, it allows the previous choices for + * the various functions to be quickly re-used. + */ +EXR_EXPORT +exr_result_t exr_encoding_update ( + exr_const_context_t ctxt, + int part_index, + const exr_chunk_info_t* cinfo, + exr_encode_pipeline_t* encode_pipe); + +/** Execute the encoding pipeline. */ +EXR_EXPORT +exr_result_t exr_encoding_run ( + exr_const_context_t ctxt, + int part_index, + exr_encode_pipeline_t* encode_pipe); + +/** Free any intermediate memory in the encoding pipeline. + * + * This does NOT free any pointers referred to in the channel info + * areas, but rather only the intermediate buffers and memory needed + * for the structure itself. + */ +EXR_EXPORT +exr_result_t exr_encoding_destroy ( + exr_const_context_t ctxt, exr_encode_pipeline_t* encode_pipe); + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +#endif /* OPENEXR_CORE_ENCODE_H */ diff --git a/third_party/tlRender-install-Release/include/OpenEXR/openexr_errors.h b/third_party/tlRender-install-Release/include/OpenEXR/openexr_errors.h new file mode 100644 index 00000000..5d74b01f --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenEXR/openexr_errors.h @@ -0,0 +1,90 @@ +/* +** SPDX-License-Identifier: BSD-3-Clause +** Copyright Contributors to the OpenEXR Project. +*/ + +#ifndef OPENEXR_ERRORS_H +#define OPENEXR_ERRORS_H + +#include "openexr_config.h" + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/** @file */ + +/** + * @defgroup ErrorCodes Error Handling + * @brief These are a group of definitions related to error handling. + * + * All functions in the C layer will return a result, which will + * correspond to one of these codes. To ensure binary stability, the + * return type is separate from the error code, and is a fixed size. + * + * @{ + */ + +/** Error codes that may be returned by various functions. */ +typedef enum +{ + EXR_ERR_SUCCESS = 0, + EXR_ERR_OUT_OF_MEMORY, + EXR_ERR_MISSING_CONTEXT_ARG, + EXR_ERR_INVALID_ARGUMENT, + EXR_ERR_ARGUMENT_OUT_OF_RANGE, + EXR_ERR_FILE_ACCESS, + EXR_ERR_FILE_BAD_HEADER, + EXR_ERR_NOT_OPEN_READ, + EXR_ERR_NOT_OPEN_WRITE, + EXR_ERR_HEADER_NOT_WRITTEN, + EXR_ERR_READ_IO, + EXR_ERR_WRITE_IO, + EXR_ERR_NAME_TOO_LONG, + EXR_ERR_MISSING_REQ_ATTR, + EXR_ERR_INVALID_ATTR, + EXR_ERR_NO_ATTR_BY_NAME, + EXR_ERR_ATTR_TYPE_MISMATCH, + EXR_ERR_ATTR_SIZE_MISMATCH, + EXR_ERR_SCAN_TILE_MIXEDAPI, + EXR_ERR_TILE_SCAN_MIXEDAPI, + EXR_ERR_MODIFY_SIZE_CHANGE, + EXR_ERR_ALREADY_WROTE_ATTRS, + EXR_ERR_BAD_CHUNK_LEADER, + EXR_ERR_CORRUPT_CHUNK, + EXR_ERR_INCOMPLETE_CHUNK_TABLE, + EXR_ERR_INCORRECT_PART, + EXR_ERR_INCORRECT_CHUNK, + EXR_ERR_USE_SCAN_DEEP_WRITE, + EXR_ERR_USE_TILE_DEEP_WRITE, + EXR_ERR_USE_SCAN_NONDEEP_WRITE, + EXR_ERR_USE_TILE_NONDEEP_WRITE, + EXR_ERR_INVALID_SAMPLE_DATA, + EXR_ERR_FEATURE_NOT_IMPLEMENTED, + EXR_ERR_UNKNOWN +} exr_error_code_t; + +/** Return type for all functions. */ +typedef int32_t exr_result_t; + +/** @brief Return a static string corresponding to the specified error code. + * + * The string should not be freed (it is compiled into the binary). + */ +EXR_EXPORT const char* exr_get_default_error_message (exr_result_t code); + +/** @brief Return a static string corresponding to the specified error code. + * + * The string should not be freed (it is compiled into the binary). + */ +EXR_EXPORT const char* exr_get_error_code_as_string (exr_result_t code); + +/** @} */ + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +#endif /* OPENEXR_ERRORS_H */ diff --git a/third_party/tlRender-install-Release/include/OpenEXR/openexr_part.h b/third_party/tlRender-install-Release/include/OpenEXR/openexr_part.h new file mode 100644 index 00000000..479131f2 --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenEXR/openexr_part.h @@ -0,0 +1,851 @@ +/* +** SPDX-License-Identifier: BSD-3-Clause +** Copyright Contributors to the OpenEXR Project. +*/ + +#ifndef OPENEXR_PART_H +#define OPENEXR_PART_H + +#include "openexr_context.h" + +#include "openexr_attr.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** @file */ + +/** + * @defgroup PartInfo Part related definitions. + * + * A part is a separate entity in the OpenEXR file. This was + * formalized in the OpenEXR 2.0 timeframe to allow there to be a + * clear set of eyes for stereo, or just a simple list of AOVs within + * a single OpenEXR file. Prior, it was managed by name convention, + * but with a multi-part file, they are clearly separate types, and + * can have separate behavior. + * + * This is a set of functions to query, or set up when writing, that + * set of parts within a file. This remains backward compatible to + * OpenEXR files from before this change, in that a file with a single + * part is a subset of a multi-part file. As a special case, creating + * a file with a single part will write out as if it is a file which + * is not multi-part aware, so as to be compatible with those old + * libraries. + * + * @{ + */ + +/** @brief Query how many parts are in the file. */ +EXR_EXPORT exr_result_t exr_get_count (exr_const_context_t ctxt, int* count); + +/** @brief Query the part name for the specified part. + * + * NB: If this file is a single part file and name has not been set, this + * will return `NULL`. + */ +EXR_EXPORT exr_result_t +exr_get_name (exr_const_context_t ctxt, int part_index, const char** out); + +/** @brief Query the storage type for the specified part. */ +EXR_EXPORT exr_result_t +exr_get_storage (exr_const_context_t ctxt, int part_index, exr_storage_t* out); + +/** @brief Define a new part in the file. */ +EXR_EXPORT exr_result_t exr_add_part ( + exr_context_t ctxt, + const char* partname, + exr_storage_t type, + int* new_index); + +/** @brief Query how many levels are in the specified part. + * + * If the part is a tiled part, fill in how many tile levels are present. + * + * Return `ERR_SUCCESS` on success, an error otherwise (i.e. if the part + * is not tiled). + * + * It is valid to pass `NULL` to either of the @p levelsx or @p levelsy + * arguments, which enables testing if this part is a tiled part, or + * if you don't need both (i.e. in the case of a mip-level tiled + * image) + */ +EXR_EXPORT exr_result_t exr_get_tile_levels ( + exr_const_context_t ctxt, + int part_index, + int32_t* levelsx, + int32_t* levelsy); + +/** @brief Query the tile size for a particular level in the specified part. + * + * If the part is a tiled part, fill in the tile size for the + * specified part/level. + * + * Return `ERR_SUCCESS` on success, an error otherwise (i.e. if the + * part is not tiled). + * + * It is valid to pass `NULL` to either of the @p tilew or @p tileh + * arguments, which enables testing if this part is a tiled part, or + * if you don't need both (i.e. in the case of a mip-level tiled + * image) + */ +EXR_EXPORT exr_result_t exr_get_tile_sizes ( + exr_const_context_t ctxt, + int part_index, + int levelx, + int levely, + int32_t* tilew, + int32_t* tileh); + +/** @brief Query the tile count for a particular level in the specified part. + * + * If the part is a tiled part, fills in the count for the + * specified levels. + * + * Return `ERR_SUCCESS` on success, an error otherwise (i.e. if the part + * is not tiled). + * + * It is valid to pass `NULL` to either of the @p countx or @p county + * arguments, which enables testing if this part is a tiled part, or + * if you don't need both for some reason. + */ +EXR_EXPORT exr_result_t exr_get_tile_counts ( + exr_const_context_t ctxt, + int part_index, + int levelx, + int levely, + int32_t* countx, + int32_t* county); + +/** @brief Query the data sizes for a particular level in the specified part. + * + * If the part is a tiled part, fill in the width/height for the + * specified levels. + * + * Return `ERR_SUCCESS` on success, an error otherwise (i.e. if the part + * is not tiled). + * + * It is valid to pass `NULL` to either of the @p levw or @p levh + * arguments, which enables testing if this part is a tiled part, or + * if you don't need both for some reason. + */ +EXR_EXPORT exr_result_t exr_get_level_sizes ( + exr_const_context_t ctxt, + int part_index, + int levelx, + int levely, + int32_t* levw, + int32_t* levh); + +/** Return the number of chunks contained in this part of the file. + * + * As in the technical documentation for OpenEXR, the chunk is the + * generic term for a pixel data block. This is the atomic unit that + * this library uses to negotiate data to and from a context. + * + * This should be used as a basis for splitting up how a file is + * processed. Depending on the compression, a different number of + * scanlines are encoded in each chunk, and since those need to be + * encoded/decoded as a block, the chunk should be the basis for I/O + * as well. + */ +EXR_EXPORT exr_result_t +exr_get_chunk_count (exr_const_context_t ctxt, int part_index, int32_t* out); + +/** Return a pointer to the chunk table and the count + * + * TODO: consider removing this prior to release once C++ fully converted + */ +EXR_EXPORT exr_result_t +exr_get_chunk_table (exr_const_context_t ctxt, int part_index, uint64_t **table, int32_t* count); + +/** Return whether the chunk table for this part is completely written. + * + * This only validates that all the offsets are valid. + * + * return EXR_ERR_INCOMPLETE_CHUNK_TABLE when incomplete, EXR_ERR_SUCCESS + * if it appears ok, or another error if otherwise problematic + */ +EXR_EXPORT exr_result_t +exr_validate_chunk_table (exr_context_t ctxt, int part_index); + +/** Return the number of scanlines chunks for this file part. + * + * When iterating over a scanline file, this may be an easier metric + * for multi-threading or other access than only negotiating chunk + * counts, and so is provided as a utility. + */ +EXR_EXPORT exr_result_t exr_get_scanlines_per_chunk ( + exr_const_context_t ctxt, int part_index, int32_t* out); + +/** Return the maximum unpacked size of a chunk for the file part. + * + * This may be used ahead of any actual reading of data, so can be + * used to pre-allocate buffers for multiple threads in one block or + * whatever your application may require. + */ +EXR_EXPORT exr_result_t exr_get_chunk_unpacked_size ( + exr_const_context_t ctxt, int part_index, uint64_t* out); + +/** @brief Retrieve the zip compression level used for the specified part. + * + * This only applies when the compression method involves using zip + * compression (zip, zips, some modes of DWAA/DWAB). + * + * This value is NOT persisted in the file, and only exists for the + * lifetime of the context, so will be at the default value when just + * reading a file. + */ +EXR_EXPORT exr_result_t exr_get_zip_compression_level ( + exr_const_context_t ctxt, int part_index, int* level); + +/** @brief Set the zip compression method used for the specified part. + * + * This only applies when the compression method involves using zip + * compression (zip, zips, some modes of DWAA/DWAB). + * + * This value is NOT persisted in the file, and only exists for the + * lifetime of the context, so this value will be ignored when + * reading a file. + */ +EXR_EXPORT exr_result_t +exr_set_zip_compression_level (exr_context_t ctxt, int part_index, int level); + +/** @brief Retrieve the dwa compression level used for the specified part. + * + * This only applies when the compression method is DWAA/DWAB. + * + * This value is NOT persisted in the file, and only exists for the + * lifetime of the context, so will be at the default value when just + * reading a file. + */ +EXR_EXPORT exr_result_t exr_get_dwa_compression_level ( + exr_const_context_t ctxt, int part_index, float* level); + +/** @brief Set the dwa compression method used for the specified part. + * + * This only applies when the compression method is DWAA/DWAB. + * + * This value is NOT persisted in the file, and only exists for the + * lifetime of the context, so this value will be ignored when + * reading a file. + */ +EXR_EXPORT exr_result_t +exr_set_dwa_compression_level (exr_context_t ctxt, int part_index, float level); + +/**************************************/ + +/** @defgroup PartMetadata Functions to get and set metadata for a particular part. + * @{ + * + */ + +/** @brief Query the count of attributes in a part. */ +EXR_EXPORT exr_result_t exr_get_attribute_count ( + exr_const_context_t ctxt, int part_index, int32_t* count); + +typedef enum exr_attr_list_access_mode +{ + EXR_ATTR_LIST_FILE_ORDER, /**< Order they appear in the file */ + EXR_ATTR_LIST_SORTED_ORDER /**< Alphabetically sorted */ +} exr_attr_list_access_mode_t; + +/** @brief Query a particular attribute by index. */ +EXR_EXPORT exr_result_t exr_get_attribute_by_index ( + exr_const_context_t ctxt, + int part_index, + exr_attr_list_access_mode_t mode, + int32_t idx, + const exr_attribute_t** outattr); + +/** @brief Query a particular attribute by name. */ +EXR_EXPORT exr_result_t exr_get_attribute_by_name ( + exr_const_context_t ctxt, + int part_index, + const char* name, + const exr_attribute_t** outattr); + +/** @brief Query the list of attributes in a part. + * + * This retrieves a list of attributes currently defined in a part. + * + * If outlist is `NULL`, this function still succeeds, filling only the + * count. In this manner, the user can allocate memory for the list of + * attributes, then re-call this function to get the full list. + */ +EXR_EXPORT exr_result_t exr_get_attribute_list ( + exr_const_context_t ctxt, + int part_index, + exr_attr_list_access_mode_t mode, + int32_t* count, + const exr_attribute_t** outlist); + +/** Declare an attribute within the specified part. + * + * Only valid when a file is opened for write. + */ +EXR_EXPORT exr_result_t exr_attr_declare_by_type ( + exr_context_t ctxt, + int part_index, + const char* name, + const char* type, + exr_attribute_t** newattr); + +/** @brief Declare an attribute within the specified part. + * + * Only valid when a file is opened for write. + */ +EXR_EXPORT exr_result_t exr_attr_declare ( + exr_context_t ctxt, + int part_index, + const char* name, + exr_attribute_type_t type, + exr_attribute_t** newattr); + +/** + * @defgroup RequiredAttributeHelpers Required Attribute Utililities + * + * @brief These are a group of functions for attributes that are + * required to be in every part of every file. + * + * @{ + */ + +/** @brief Initialize all required attributes for all files. + * + * NB: other file types do require other attributes, such as the tile + * description for a tiled file. + */ +EXR_EXPORT exr_result_t exr_initialize_required_attr ( + exr_context_t ctxt, + int part_index, + const exr_attr_box2i_t* displayWindow, + const exr_attr_box2i_t* dataWindow, + float pixelaspectratio, + const exr_attr_v2f_t* screenWindowCenter, + float screenWindowWidth, + exr_lineorder_t lineorder, + exr_compression_t ctype); + +/** @brief Initialize all required attributes to default values: + * + * - `displayWindow` is set to (0, 0 -> @p width - 1, @p height - 1) + * - `dataWindow` is set to (0, 0 -> @p width - 1, @p height - 1) + * - `pixelAspectRatio` is set to 1.0 + * - `screenWindowCenter` is set to 0.f, 0.f + * - `screenWindowWidth` is set to 1.f + * - `lineorder` is set to `INCREASING_Y` + * - `compression` is set to @p ctype + */ +EXR_EXPORT exr_result_t exr_initialize_required_attr_simple ( + exr_context_t ctxt, + int part_index, + int32_t width, + int32_t height, + exr_compression_t ctype); + +/** @brief Copy the attributes from one part to another. + * + * This allows one to quickly unassigned attributes from one source to another. + * + * If an attribute in the source part has not been yet set in the + * destination part, the item will be copied over. + * + * For example, when you add a part, the storage type and name + * attributes are required arguments to the definition of a new part, + * but channels has not yet been assigned. So by calling this with an + * input file as the source, you can copy the channel definitions (and + * any other unassigned attributes from the source). + */ +EXR_EXPORT exr_result_t exr_copy_unset_attributes ( + exr_context_t ctxt, + int part_index, + exr_const_context_t source, + int src_part_index); + +/** @brief Retrieve the list of channels. */ +EXR_EXPORT exr_result_t exr_get_channels ( + exr_const_context_t ctxt, int part_index, const exr_attr_chlist_t** chlist); + +/** @brief Define a new channel to the output file part. + * + * The @p percept parameter is used for lossy compression techniques + * to indicate that the value represented is closer to linear (1) or + * closer to logarithmic (0). For r, g, b, luminance, this is normally + * 0. + */ +EXR_EXPORT exr_result_t exr_add_channel ( + exr_context_t ctxt, + int part_index, + const char* name, + exr_pixel_type_t ptype, + exr_perceptual_treatment_t percept, + int32_t xsamp, + int32_t ysamp); + +/** @brief Copy the channels from another source. + * + * Useful if you are manually constructing the list or simply copying + * from an input file. + */ +EXR_EXPORT exr_result_t exr_set_channels ( + exr_context_t ctxt, int part_index, const exr_attr_chlist_t* channels); + +/** @brief Retrieve the compression method used for the specified part. */ +EXR_EXPORT exr_result_t exr_get_compression ( + exr_const_context_t ctxt, int part_index, exr_compression_t* compression); +/** @brief Set the compression method used for the specified part. */ +EXR_EXPORT exr_result_t exr_set_compression ( + exr_context_t ctxt, int part_index, exr_compression_t ctype); + +/** @brief Retrieve the data window for the specified part. */ +EXR_EXPORT exr_result_t exr_get_data_window ( + exr_const_context_t ctxt, int part_index, exr_attr_box2i_t* out); +/** @brief Set the data window for the specified part. */ +EXR_EXPORT int exr_set_data_window ( + exr_context_t ctxt, int part_index, const exr_attr_box2i_t* dw); + +/** @brief Retrieve the display window for the specified part. */ +EXR_EXPORT exr_result_t exr_get_display_window ( + exr_const_context_t ctxt, int part_index, exr_attr_box2i_t* out); +/** @brief Set the display window for the specified part. */ +EXR_EXPORT int exr_set_display_window ( + exr_context_t ctxt, int part_index, const exr_attr_box2i_t* dw); + +/** @brief Retrieve the line order for storing data in the specified part (use 0 for single part images). */ +EXR_EXPORT exr_result_t exr_get_lineorder ( + exr_const_context_t ctxt, int part_index, exr_lineorder_t* out); +/** @brief Set the line order for storing data in the specified part (use 0 for single part images). */ +EXR_EXPORT exr_result_t +exr_set_lineorder (exr_context_t ctxt, int part_index, exr_lineorder_t lo); + +/** @brief Retrieve the pixel aspect ratio for the specified part (use 0 for single part images). */ +EXR_EXPORT exr_result_t exr_get_pixel_aspect_ratio ( + exr_const_context_t ctxt, int part_index, float* par); +/** @brief Set the pixel aspect ratio for the specified part (use 0 for single part images). */ +EXR_EXPORT exr_result_t +exr_set_pixel_aspect_ratio (exr_context_t ctxt, int part_index, float par); + +/** @brief Retrieve the screen oriented window center for the specified part (use 0 for single part images). */ +EXR_EXPORT exr_result_t exr_get_screen_window_center ( + exr_const_context_t ctxt, int part_index, exr_attr_v2f_t* wc); +/** @brief Set the screen oriented window center for the specified part (use 0 for single part images). */ +EXR_EXPORT int exr_set_screen_window_center ( + exr_context_t ctxt, int part_index, const exr_attr_v2f_t* wc); + +/** @brief Retrieve the screen oriented window width for the specified part (use 0 for single part images). */ +EXR_EXPORT exr_result_t exr_get_screen_window_width ( + exr_const_context_t ctxt, int part_index, float* out); +/** @brief Set the screen oriented window width for the specified part (use 0 for single part images). */ +EXR_EXPORT exr_result_t +exr_set_screen_window_width (exr_context_t ctxt, int part_index, float ssw); + +/** @brief Retrieve the tiling info for a tiled part (use 0 for single part images). */ +EXR_EXPORT exr_result_t exr_get_tile_descriptor ( + exr_const_context_t ctxt, + int part_index, + uint32_t* xsize, + uint32_t* ysize, + exr_tile_level_mode_t* level, + exr_tile_round_mode_t* round); + +/** @brief Set the tiling info for a tiled part (use 0 for single part images). */ +EXR_EXPORT exr_result_t exr_set_tile_descriptor ( + exr_context_t ctxt, + int part_index, + uint32_t x_size, + uint32_t y_size, + exr_tile_level_mode_t level_mode, + exr_tile_round_mode_t round_mode); + +EXR_EXPORT exr_result_t +exr_set_name (exr_context_t ctxt, int part_index, const char* val); + +EXR_EXPORT exr_result_t +exr_get_version (exr_const_context_t ctxt, int part_index, int32_t* out); + +EXR_EXPORT exr_result_t +exr_set_version (exr_context_t ctxt, int part_index, int32_t val); + +EXR_EXPORT exr_result_t +exr_set_chunk_count (exr_context_t ctxt, int part_index, int32_t val); + +/** @} */ /* required attr group. */ + +/** + * @defgroup BuiltinAttributeHelpers Attribute utilities for builtin types + * + * @brief These are a group of functions for attributes that use the builtin types. + * + * @{ + */ + +EXR_EXPORT exr_result_t exr_attr_get_box2i ( + exr_const_context_t ctxt, + int part_index, + const char* name, + exr_attr_box2i_t* outval); + +EXR_EXPORT exr_result_t exr_attr_set_box2i ( + exr_context_t ctxt, + int part_index, + const char* name, + const exr_attr_box2i_t* val); + +EXR_EXPORT exr_result_t exr_attr_get_box2f ( + exr_const_context_t ctxt, + int part_index, + const char* name, + exr_attr_box2f_t* outval); + +EXR_EXPORT exr_result_t exr_attr_set_box2f ( + exr_context_t ctxt, + int part_index, + const char* name, + const exr_attr_box2f_t* val); + +/** @brief Zero-copy query of channel data. + * + * Do not free or manipulate the @p chlist data, or use + * after the lifetime of the context. + */ +EXR_EXPORT exr_result_t exr_attr_get_channels ( + exr_const_context_t ctxt, + int part_index, + const char* name, + const exr_attr_chlist_t** chlist); + +/** @brief This allows one to quickly copy the channels from one file + * to another. + */ +EXR_EXPORT exr_result_t exr_attr_set_channels ( + exr_context_t ctxt, + int part_index, + const char* name, + const exr_attr_chlist_t* channels); + +EXR_EXPORT exr_result_t exr_attr_get_chromaticities ( + exr_const_context_t ctxt, + int part_index, + const char* name, + exr_attr_chromaticities_t* chroma); + +EXR_EXPORT exr_result_t exr_attr_set_chromaticities ( + exr_context_t ctxt, + int part_index, + const char* name, + const exr_attr_chromaticities_t* chroma); + +EXR_EXPORT exr_result_t exr_attr_get_compression ( + exr_const_context_t ctxt, + int part_index, + const char* name, + exr_compression_t* out); + +EXR_EXPORT exr_result_t exr_attr_set_compression ( + exr_context_t ctxt, + int part_index, + const char* name, + exr_compression_t comp); + +EXR_EXPORT exr_result_t exr_attr_get_double ( + exr_const_context_t ctxt, int part_index, const char* name, double* out); + +EXR_EXPORT exr_result_t exr_attr_set_double ( + exr_context_t ctxt, int part_index, const char* name, double val); + +EXR_EXPORT exr_result_t exr_attr_get_envmap ( + exr_const_context_t ctxt, + int part_index, + const char* name, + exr_envmap_t* out); + +EXR_EXPORT exr_result_t exr_attr_set_envmap ( + exr_context_t ctxt, int part_index, const char* name, exr_envmap_t emap); + +EXR_EXPORT exr_result_t exr_attr_get_float ( + exr_const_context_t ctxt, int part_index, const char* name, float* out); + +EXR_EXPORT exr_result_t exr_attr_set_float ( + exr_context_t ctxt, int part_index, const char* name, float val); + +/** @brief Zero-copy query of float data. + * + * Do not free or manipulate the @p out data, or use after the + * lifetime of the context. + */ +EXR_EXPORT exr_result_t exr_attr_get_float_vector ( + exr_const_context_t ctxt, + int part_index, + const char* name, + int32_t* sz, + const float** out); + +EXR_EXPORT exr_result_t exr_attr_set_float_vector ( + exr_context_t ctxt, + int part_index, + const char* name, + int32_t sz, + const float* vals); + +EXR_EXPORT exr_result_t exr_attr_get_int ( + exr_const_context_t ctxt, int part_index, const char* name, int32_t* out); + +EXR_EXPORT exr_result_t exr_attr_set_int ( + exr_context_t ctxt, int part_index, const char* name, int32_t val); + +EXR_EXPORT exr_result_t exr_attr_get_keycode ( + exr_const_context_t ctxt, + int part_index, + const char* name, + exr_attr_keycode_t* out); + +EXR_EXPORT exr_result_t exr_attr_set_keycode ( + exr_context_t ctxt, + int part_index, + const char* name, + const exr_attr_keycode_t* kc); + +EXR_EXPORT exr_result_t exr_attr_get_lineorder ( + exr_const_context_t ctxt, + int part_index, + const char* name, + exr_lineorder_t* out); + +EXR_EXPORT exr_result_t exr_attr_set_lineorder ( + exr_context_t ctxt, int part_index, const char* name, exr_lineorder_t lo); + +EXR_EXPORT exr_result_t exr_attr_get_m33f ( + exr_const_context_t ctxt, + int part_index, + const char* name, + exr_attr_m33f_t* out); + +EXR_EXPORT exr_result_t exr_attr_set_m33f ( + exr_context_t ctxt, + int part_index, + const char* name, + const exr_attr_m33f_t* m); + +EXR_EXPORT exr_result_t exr_attr_get_m33d ( + exr_const_context_t ctxt, + int part_index, + const char* name, + exr_attr_m33d_t* out); + +EXR_EXPORT exr_result_t exr_attr_set_m33d ( + exr_context_t ctxt, + int part_index, + const char* name, + const exr_attr_m33d_t* m); + +EXR_EXPORT exr_result_t exr_attr_get_m44f ( + exr_const_context_t ctxt, + int part_index, + const char* name, + exr_attr_m44f_t* out); + +EXR_EXPORT exr_result_t exr_attr_set_m44f ( + exr_context_t ctxt, + int part_index, + const char* name, + const exr_attr_m44f_t* m); + +EXR_EXPORT exr_result_t exr_attr_get_m44d ( + exr_const_context_t ctxt, + int part_index, + const char* name, + exr_attr_m44d_t* out); + +EXR_EXPORT exr_result_t exr_attr_set_m44d ( + exr_context_t ctxt, + int part_index, + const char* name, + const exr_attr_m44d_t* m); + +EXR_EXPORT exr_result_t exr_attr_get_preview ( + exr_const_context_t ctxt, + int part_index, + const char* name, + exr_attr_preview_t* out); + +EXR_EXPORT exr_result_t exr_attr_set_preview ( + exr_context_t ctxt, + int part_index, + const char* name, + const exr_attr_preview_t* p); + +EXR_EXPORT exr_result_t exr_attr_get_rational ( + exr_const_context_t ctxt, + int part_index, + const char* name, + exr_attr_rational_t* out); + +EXR_EXPORT exr_result_t exr_attr_set_rational ( + exr_context_t ctxt, + int part_index, + const char* name, + const exr_attr_rational_t* r); + +/** @brief Zero-copy query of string value. + * + * Do not modify the string pointed to by @p out, and do not use + * after the lifetime of the context. + */ +EXR_EXPORT exr_result_t exr_attr_get_string ( + exr_const_context_t ctxt, + int part_index, + const char* name, + int32_t* length, + const char** out); + +EXR_EXPORT exr_result_t exr_attr_set_string ( + exr_context_t ctxt, int part_index, const char* name, const char* s); + +/** @brief Zero-copy query of string data. + * + * Do not free the strings pointed to by the array. + * + * Must provide @p size. + * + * \p out must be a ``const char**`` array large enough to hold + * the string pointers for the string vector when provided. + */ +EXR_EXPORT exr_result_t exr_attr_get_string_vector ( + exr_const_context_t ctxt, + int part_index, + const char* name, + int32_t* size, + const char** out); + +EXR_EXPORT exr_result_t exr_attr_set_string_vector ( + exr_context_t ctxt, + int part_index, + const char* name, + int32_t size, + const char** sv); + +EXR_EXPORT exr_result_t exr_attr_get_tiledesc ( + exr_const_context_t ctxt, + int part_index, + const char* name, + exr_attr_tiledesc_t* out); + +EXR_EXPORT exr_result_t exr_attr_set_tiledesc ( + exr_context_t ctxt, + int part_index, + const char* name, + const exr_attr_tiledesc_t* td); + +EXR_EXPORT exr_result_t exr_attr_get_timecode ( + exr_const_context_t ctxt, + int part_index, + const char* name, + exr_attr_timecode_t* out); + +EXR_EXPORT exr_result_t exr_attr_set_timecode ( + exr_context_t ctxt, + int part_index, + const char* name, + const exr_attr_timecode_t* tc); + +EXR_EXPORT exr_result_t exr_attr_get_v2i ( + exr_const_context_t ctxt, + int part_index, + const char* name, + exr_attr_v2i_t* out); + +EXR_EXPORT exr_result_t exr_attr_set_v2i ( + exr_context_t ctxt, + int part_index, + const char* name, + const exr_attr_v2i_t* v); + +EXR_EXPORT exr_result_t exr_attr_get_v2f ( + exr_const_context_t ctxt, + int part_index, + const char* name, + exr_attr_v2f_t* out); + +EXR_EXPORT exr_result_t exr_attr_set_v2f ( + exr_context_t ctxt, + int part_index, + const char* name, + const exr_attr_v2f_t* v); + +EXR_EXPORT exr_result_t exr_attr_get_v2d ( + exr_const_context_t ctxt, + int part_index, + const char* name, + exr_attr_v2d_t* out); + +EXR_EXPORT exr_result_t exr_attr_set_v2d ( + exr_context_t ctxt, + int part_index, + const char* name, + const exr_attr_v2d_t* v); + +EXR_EXPORT exr_result_t exr_attr_get_v3i ( + exr_const_context_t ctxt, + int part_index, + const char* name, + exr_attr_v3i_t* out); + +EXR_EXPORT exr_result_t exr_attr_set_v3i ( + exr_context_t ctxt, + int part_index, + const char* name, + const exr_attr_v3i_t* v); + +EXR_EXPORT exr_result_t exr_attr_get_v3f ( + exr_const_context_t ctxt, + int part_index, + const char* name, + exr_attr_v3f_t* out); + +EXR_EXPORT exr_result_t exr_attr_set_v3f ( + exr_context_t ctxt, + int part_index, + const char* name, + const exr_attr_v3f_t* v); + +EXR_EXPORT exr_result_t exr_attr_get_v3d ( + exr_const_context_t ctxt, + int part_index, + const char* name, + exr_attr_v3d_t* out); + +EXR_EXPORT exr_result_t exr_attr_set_v3d ( + exr_context_t ctxt, + int part_index, + const char* name, + const exr_attr_v3d_t* v); + +EXR_EXPORT exr_result_t exr_attr_get_user ( + exr_const_context_t ctxt, + int part_index, + const char* name, + const char** type, + int32_t* size, + const void** out); + +EXR_EXPORT exr_result_t exr_attr_set_user ( + exr_context_t ctxt, + int part_index, + const char* name, + const char* type, + int32_t size, + const void* out); + +/** @} */ /* built-in attr group */ + +/** @} */ /* metadata group */ + +/** @} */ /* part group */ + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +#endif /* OPENEXR_PART_H */ diff --git a/third_party/tlRender-install-Release/include/OpenEXR/openexr_std_attr.h b/third_party/tlRender-install-Release/include/OpenEXR/openexr_std_attr.h new file mode 100644 index 00000000..2fb7ff38 --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenEXR/openexr_std_attr.h @@ -0,0 +1,59 @@ +/* +** SPDX-License-Identifier: BSD-3-Clause +** Copyright Contributors to the OpenEXR Project. +*/ + +#ifndef OPENEXR_CORE_STD_ATTR_H +#define OPENEXR_CORE_STD_ATTR_H + +#include "openexr_attr.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** @file */ + +/** + * @defgroup Standard attributes + * @brief These are a group of attributes which are not strictly required, + * but have common definitions and should be preferred for representing + * the information they describe. + * @{ + */ + +/* +chromaticities +whiteLuminance +adoptedNeutral +xDensity +owner +comments +capDate +utcOffset +longitude +latitude +altitude +focus +expTime +aperture +isoSpeed +envmap +keyCode +timeCode +wrapmodes +framesPerSecond +multiView +worldToCamera +worldToNDC +deepImageState +originalDataWindow +*/ + +/** @} */ + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +#endif /* OPENEXR_CORE_STD_ATTR_H */ diff --git a/third_party/tlRender-install-Release/include/OpenEXR/openexr_version.h b/third_party/tlRender-install-Release/include/OpenEXR/openexr_version.h new file mode 100644 index 00000000..721f6e13 --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenEXR/openexr_version.h @@ -0,0 +1,15 @@ +// +// SPDX-License-Identifier: BSD-3-Clause +// Copyright (c) Contributors to the OpenEXR Project. +// +// This is the OpenEXR library version information. +// ImfVersion.h contains version information about the file format. +#pragma once +#ifndef INCLUDED_OPENEXR_VERSION_H +# define INCLUDED_OPENEXR_VERSION_H + +# define OPENEXR_VERSION_MAJOR 3 +# define OPENEXR_VERSION_MINOR 3 +# define OPENEXR_VERSION_PATCH 6 + +#endif diff --git a/third_party/tlRender-install-Release/include/OpenImageIO/Imath.h b/third_party/tlRender-install-Release/include/OpenImageIO/Imath.h new file mode 100644 index 00000000..9665a502 --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenImageIO/Imath.h @@ -0,0 +1,41 @@ +// Copyright Contributors to the OpenImageIO project. +// SPDX-License-Identifier: Apache-2.0 +// https://github.com/AcademySoftwareFoundation/OpenImageIO/ + +// clang-format off + +#pragma once + +#include + +#include + +#ifndef OIIO_IMATH_H_INCLUDED +#define OIIO_IMATH_H_INCLUDED 1 + +// DEPRECATED(3.0) +#define OIIO_USING_IMATH 3 + +#include +#include +#include + + +/// Custom fmtlib formatters for Imath types. + +FMT_BEGIN_NAMESPACE +template<> struct formatter + : OIIO::pvt::array_formatter {}; +template<> struct formatter + : OIIO::pvt::array_formatter {}; +template<> struct formatter + : OIIO::pvt::array_formatter {}; +template<> struct formatter + : OIIO::pvt::array_formatter {}; +template<> struct formatter + : OIIO::pvt::array_formatter {}; +template<> struct formatter + : OIIO::pvt::array_formatter {}; +FMT_END_NAMESPACE + +#endif // !defined(OIIO_IMATH_H_INCLUDED) diff --git a/third_party/tlRender-install-Release/include/OpenImageIO/argparse.h b/third_party/tlRender-install-Release/include/OpenImageIO/argparse.h new file mode 100644 index 00000000..4b598fdf --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenImageIO/argparse.h @@ -0,0 +1,789 @@ +// Copyright Contributors to the OpenImageIO project. +// SPDX-License-Identifier: BSD-3-Clause and Apache-2.0 +// https://github.com/AcademySoftwareFoundation/OpenImageIO + + +#pragma once + +#if defined(_MSC_VER) +// Ignore warnings about DLL exported classes with member variables that are template classes. +// This happens with the std::string m_errmessage member of ArgParse below. +# pragma warning(disable : 4251) +#endif + +#include +#include +#include + +#include +#include +#include +#include + +// Define symbols that let client applications determine if newly added +// features are supported. +#define OIIO_ARGPARSE_SUPPORTS_BRIEFUSAGE 1 +#define OIIO_ARGPARSE_SUPPORTS_HUMAN_PARAMNAME 1 + +OIIO_NAMESPACE_3_1_BEGIN + + +///////////////////////////////////////////////////////////////////////////// +/// +/// \class ArgParse +/// +/// Argument Parsing. Kind of resembles Python argparse library. +/// +/// Set up argument parser: +/// +/// ArgParse ap; +/// ap.intro("myapp does good things") +/// .usage("myapp [options] filename..."); +/// ap.arg("filename") +/// .hidden() +/// .action([&](cspan argv){ filenames.emplace_back(argv[0]); }); +/// +/// Declare arguments. Some examples of common idioms: +/// +/// // Boolean option (no arguments) +/// ap.arg("-v") +/// .help("verbose mode") +/// .action(ArgParse::store_true()); +/// +/// // integer option +/// ap.arg("-passes NPASSES") +/// .help("number of passes") +/// .defaultval(1) +/// .action(ArgParse::store); +/// +/// // An option that takes 3 float arguments, like a V3f +/// ap.arg("-camera X Y Z") +/// .help("set the camera position") +/// .defaultval(Imath::V3f(0.0f, 0.0f, -1.0f)) +/// .action(ArgParse::store()); +/// +/// // Positional argument -- append strings +/// ap.arg("filename") +/// .action(ArgParse::append()) +/// .hidden(); +/// +/// Parse the command line: +/// +/// ap.parse_args(argc, argv); +/// +/// Extract the values like they are attributes in a ParamValueList: +/// +/// int passes = ap["passes"].get(); +/// bool verbose = ap["verbose"].get(); +/// Imath::V3f camera = ap["camera"].get(); +/// +// +// ------------------------------------------------------------------ +// +// Old syntax +// ---------- +// +// We still support this old syntax as well, but only internally: +// +// The parse function takes a list of options and variables or functions +// for storing option values and return <0 on failure: +// +// static int parse_files (int argc, const char *argv[]) +// { +// for (int i = 0; i < argc; i++) +// filenames.push_back (argv[i]); +// return 0; +// } +// +// static int blah_callback (int argc, const char *argv[]) +// { +// std::cout << "blah argument was " << argv[1] << "\n"; +// return 0; +// } +// +// ... +// +// ArgParse ap; +// +// ap.options ("Usage: myapp [options] filename...", +// "%*", parse_objects, "", +// "-camera %f %f %f", &camera[0], &camera[1], &camera[2], +// "set the camera position", +// "-lookat %f %f %f", &lx, &ly, &lz, +// "set the position of interest", +// "-oversampling %d", &oversampling, "oversampling rate", +// "-passes %d", &passes, "number of passes", +// "-lens %f %f %f", &aperture, &focalDistance, &focalLength, +// "set aperture, focal distance, focal length", +// "-format %d %d %f", &width, &height, &aspect, +// "set width, height, aspect ratio", +// "-v", &verbose, "verbose output", +// "-q %!", &verbose, "quiet mode", +// "--blah %@ %s", blahcallback, "Make the callback", +// NULL); +// +// if (ap.parse (argc, argv) < 0) { +// std::cerr << ap.geterror() << std::endl; +// ap.usage (); +// return EXIT_FAILURE; +// } +// +// The available argument types are: +// - no \% argument - bool flag +// - \%! - a bool flag, but set it to false if the option is set +// - \%d - 32bit integer +// - \%f - 32bit float +// - \%F - 64bit float (double) +// - \%s - std::string +// - \%L - std::vector (takes 1 arg, appends to list) +// - \%@ - a function pointer for a callback function will be invoked +// immediately. The prototype for the callback is +// int callback (int argc, char *argv[]) +// - \%* - catch all non-options and pass individually as an (argc,argv) +// sublist to a callback, each immediately after it's found +// - \%1 - catch all non-options that occur before any option is +// encountered (like %*, but only for those prior to the first +// real option. +// +// The argument type specifier may be followed by an optional colon (:) and +// then a human-readable parameter that will be printed in the help +// message. For example, +// +// "--foo %d:WIDTH %d:HEIGHT", ... +// +// indicates that `--foo` takes two integer arguments, and the help message +// will be rendered as: +// +// --foo WIDTH HEIGHT Set the foo size +// +// There are several special format tokens: +// - "" - not an option at all, just a description to print +// in the usage output. +// +// Notes: +// - If an option doesn't have any arguments, a bool flag argument is +// assumed. +// - No argument destinations are initialized. +// - The empty string, "", is used as a global sublist (ie. "%*"). +// - Sublist functions are all of the form "int func(int argc, char **argv)". +// - If a sublist function returns -1, parse() will terminate early. +// - It is perfectly legal for the user to append ':' and more characters +// to the end of an option name, it will match only the portion before +// the semicolon (but a callback can detect the full string, this is +// useful for making arguments: myprog --flag:myopt=1 foobar +// +///////////////////////////////////////////////////////////////////////////// + + +class OIIO_UTIL_API ArgParse { +public: + class Arg; // Forward declaration of Arg + + // ------------------------------------------------------------------ + /// @defgroup Setting up an ArgParse + /// @{ + + /// Construct an ArgParse. + ArgParse(); + + /// Destroy an ArgParse. + ~ArgParse(); + + // Old ctr. Don't use this. Instead, pass argc/argv to parse_args(). + ArgParse(int argc, const char** argv); + + // Disallow copy ctr and assignment + ArgParse(const ArgParse&) = delete; + const ArgParse& operator=(const ArgParse&) = delete; + + /// Move constructor + ArgParse(ArgParse&& other) + : m_impl(std::move(other.m_impl)) + { + } + + /// Set an optional "intro" message, printed first when --help is used + /// or an error is found in the program arguments. + ArgParse& intro(string_view str); + + /// Set the "usage" string, which will be printed after the intro, and + /// preceded by the message "Usage: ". + ArgParse& usage(string_view str); + + /// Set an optional description of the program, to be printed after the + /// usage but before the detailed argument help. + ArgParse& description(string_view str); + + /// Set an optional epilog to be printed after the detailed argument + /// help. + ArgParse& epilog(string_view str); + + /// Optionally override the name of the program, as understood by + /// ArgParse. If not supplied, it will be derived from the original + /// command line. + ArgParse& prog(string_view str); + + /// If true, this will cause the detailed help message to print the + /// default value of all options for which it was supplied (the default + /// is false). + ArgParse& print_defaults(bool print); + + /// By default, every ArgParse automatically adds a `--help` argument + /// that, if invoked, prints the full explanatory help message (i.e., + /// calls `print_help()`) and then exits the application with a success + /// return code of 0. + /// + /// Calling `add_help(false)` disable the automatic `--help` argument. + /// If you do this but want a help option (for example, you want to call + /// it something different, or not exit the application, or have some + /// other behavior), it's up to the user to add it and its behavior just + /// like any other argument. + ArgParse& add_help(bool add_help); + + /// Calling `add_version()` adds a `--version` argument, which will print + /// the version string supplied. + ArgParse& add_version(string_view version_string); + + /// By default, if the command line arguments do not conform to what is + /// declared to ArgParse (for example, if unknown commands are + /// encountered, required arguments are not found, etc.), the ArgParse + /// (during `parse_args()` will print an error message, the full help + /// guide, and then exit the application with a failure return code. + /// + /// Calling `exit_on_error(false)` disables this behavior. In this case, + /// the application is responsible for checking the return code of + /// `parse_args()` and responding appropriately. + ArgParse& exit_on_error(bool exit_on_error); + + /// If called by an argument's action, halts the rest of the command + /// line from continuing to be processed. Call with `aborted = false` to + /// unabort and restore operations. + void abort(bool aborted = true); + + /// Reveal whether the current state is aborted. + bool aborted() const; + + /// Set whether current actions should run. + void running(bool run); + + /// Reveal whether current actions should run. + bool running() const; + + /// Reveal the current argument that is being parsed. + int current_arg() const; + + /// Set the next argument to be processed. Use with extreme caution! + void set_next_arg(int nextarg); + + /// @} + + // ------------------------------------------------------------------ + /// @defgroup Parsing arguments + /// @{ + + /// With the options already set up, parse the command line. Return 0 if + /// ok, -1 if it's a malformed command line. + int parse_args(int argc, const char** argv); + + /// Is there a pending error message waiting to be retrieved? + bool has_error() const; + + /// Return any error messages generated during the course of parse() + /// (and by default, clear any error flags). If no error has occurred + /// since the last time geterror() was called, it will return an empty + /// string. + std::string geterror(bool clear = true) const; + + /// Return the name of the program. This will be either derived from the + /// original command line that launched this application, or else + /// overridden by a prior call to `prog()`. + std::string prog_name() const; + + /// Print the full help message to stdout. The usage message is + /// generated and formatted automatically based on the arguments + /// declared. + void print_help() const; + + /// Print a brief usage message to stdout. The usage message is + /// generated and formatted automatically based on the arguments + /// declared. + void briefusage() const; + + /// Return the entire command-line as one string. + std::string command_line() const; + + /// @} + + // ------------------------------------------------------------------ + /// @defgroup Declaring arguments + /// @{ + + /// Add an argument declaration. Ordinary arguments start with a leading + /// `-` character (or `--`, either will be accepted). Positional + /// arguments lack a leading `-`. + /// + /// The argname consists of any of these options: + /// + /// * "name" : a positional argument. + /// + /// * "-name" or "--name" : an ordinary flag argument. If this argument + /// should be followed by parameters, they will later be declared + /// using some combination of `Arg::nargs()` and `Arg::metavar()`. + /// + /// * "--name A B C" : including the names of parameters following the + /// flag itself implicitly means the same thing as calling `nargs()` + /// and `metavar()`, and there is no need to call them separately. + /// + /// This method returns an `Arg&`, so it is permissible to chain Arg + /// method calls. Those chained calls are what communicates the number + /// of parameters, help message, action, etc. See the `Arg` class for + /// all the possible Arg methods. + /// + Arg& add_argument(const char* argname); + + /// Alternate way to add an argument, specifying external storage + /// destinations for the parameters. This is more reminiscent of the + /// older, pre-2.2 API, and also can be convenient as an alternative to + /// extracting every parameter and putting them into variables. + /// + /// Flags with no parameters are followed by a `bool*`. Args with + /// parameters must declare them as "%T:NAME", where the "%T" part + /// corresponds to the storage type, `%d` for int, `%f` for float, `%s` + /// for std::string, and `%L` for `std::vector`. + /// + /// Examples: + /// + /// ArgParse ap; + /// bool verbose = false; + /// ap.add_argument("-v", &verbose) + /// .help("verbose mode"); + /// + /// float r = 0, g = 0, b = 0; + /// ap.add_argument("--color %f:R %f:G %f:B", &r, &g, &b) + /// .help("diffuse color") + /// .action(ArgParse::store()); + /// + template Arg& add_argument(const char* argname, T... args) + { + return argx(argname, args...); + } + + /// Shorter synonym for add_argument(). + Arg& arg(const char* argname) { return add_argument(argname); } + + /// Shorter synonym for add_argument(). + template Arg& arg(const char* argname, T... args) + { + return argx(argname, args...); + } + + /// Add a separator with a text message. This can be used to group + /// arguments with section headings. + /// + /// Example: + /// + /// ArgParse ap; + /// ap.separator("Basic arguments:"); + /// ap.add_argument("-v"); + /// ap.add_argument("-a"); + /// ap.separator("Advanced arguments:"); + /// ap.add_argument("-b"); + /// ap.add_argument("-c"); + /// + /// Will print the help section like: + /// + /// Basic arguments: + /// -v + /// -a + /// Advanced arguments: + /// -b + /// -c + /// + Arg& separator(string_view text); + + + /// Holder for a callback that takes a span of C strings as arguments. + // typedef std::function myargs)> Action; + using Action = std::function myargs)>; + + /// Holder for a callback that takes an Arg ref and a span of C strings + /// as arguments. + using ArgAction = std::function myargs)>; + + + /// A call to `ArgParse::arg()` returns an `Arg&`. There are lots of + /// things you can do to that reference to modify it. Nearly all + /// Arg methods return an `Arg&` so you can chain the calls, like this: + /// + /// ArgParse ap; + /// ... + /// ap.add_argument("-v") + /// .help("Verbose mode") + /// .action(Arg::store_true()); + /// + class OIIO_UTIL_API Arg { + public: + // Arg constructor. This should only be called by + // ArgParse::add_argument(). + Arg(ArgParse& ap) + : m_argparse(ap) + { + } + // Disallow copy ctr and assignment + Arg(const Arg&) = delete; + const Arg& operator=(const Arg&) = delete; + + /// Set the help / description of this command line argument. + Arg& help(string_view help); + + /// Set the number of subsequent parameters to this argument. + /// Setting `nargs(0)` means it is a flag only, with no parameters. + Arg& nargs(int n); + + // TODO: + // Set the number of subsequent parameters to this arguments. "?" + // means a single optional value, "*" means any number of optional + // values (and implies action(append)), "+" means one or more + // optional values (just like "*", but will be an error if none are + // supplied at all). + // Arg& nargs(string_view n); + + + /// Set the name(s) of any argument parameters as they are printed + /// in the help message. For arguments that take multiple + /// parameters, just put spaces between them. Note that the number + /// of arguments is inferred by the number of metavar names, so + /// there is no need to set nargs separately if metavar() is called + /// properly. + /// + /// Examples: + /// + /// ArgParse ap; + /// ap.add_argument("--aa") + /// .help("set sampling rate (per pixel)") + /// .metavar("SAMPLES"); + /// ap.add_argument("--color") + /// .help("set the diffuse color") + /// .metavar("R G B"); + /// + /// Will print help like: + /// + /// --aa SAMPLES set sampling rate (per pixel) + /// --color R G B set the diffuse color + /// + Arg& metavar(string_view name); + + /// Override the destination attribute name (versus the default + /// which is simply the name of the command line option with the + /// leading dashes stripped away). The main use case is if you want + /// two differently named command line options to both store values + /// into the same attribute. It is very important that if you use + /// dest(), you call it before setting the action. + /// + /// Example: + /// + /// // Add -v argument, but store its result in `ap["verbose"]` + /// // rather than the default `ap["v"]`. + /// ap.add_argument("-v") + /// .help("verbose mode") + /// .dest("verbose") + /// .action(ArgParse::store_true()); + /// + Arg& dest(string_view dest); + + /// Initialize the destination attribute with a default value. Do + /// not call `.dest("name")` on the argument after calling + /// defaultval, of it will end up with the default value in the + /// wrong attribute. + template Arg& defaultval(const T& val) + { + m_argparse.params()[dest()] = val; + return *this; + } + + /// Mark the argument as hidden from the help message. + Arg& hidden(); + + /// Always run, even when ArgParse.running() is false. + Arg& always_run(); + + /// Set the action for this argument to store 1 in the destination + /// attribute. Initialize the destination attribute to 0 now. Do not + /// call `.dest("name")` on the argument after calling store_true, + /// you must override the destination first! + Arg& store_true() + { + m_argparse.params()[dest()] = 0; + action(ArgParse::store_true()); + return *this; + } + + /// Set the action for this argument to store 0 in the destination + /// attribute. Initialize the destination attribute to 1 now. Do not + /// call `.dest("name")` on the argument after calling store_false, + /// you must override the destination first! + Arg& store_false() + { + m_argparse.params()[dest()] = 1; + action(ArgParse::store_false()); + return *this; + } + + /// Add an arbitrary action: `func(Arg&, cspan)` + Arg& action(ArgAction&& func); + + /// Add an arbitrary action: `func(cspan)` + Arg& action(Action&& func) + { + // Implemented with a lambda that applies a wrapper to turn + // it into func(Arg&,cspan). + return action([=](Arg&, cspan a) { func(a); }); + } +#if OIIO_MSVS_BEFORE_2017 + // MSVS 2015 seems to need this, fixed in later versions. + Arg& action(void (*func)(cspan myargs)) + { + return action([=](Arg&, cspan a) { func(a); }); + } +#endif + + /// Add an arbitrary action: `func()` + Arg& action(void (*func)()) + { + return action([=](Arg&, cspan) { func(); }); + } + + // Old style action for compatibility + Arg& action(int (*func)(int, const char**)) + { + return action([=](Arg&, cspan a) { + func(int(a.size()), (const char**)a.data()); + }); + } + + /// Return the name of the argument. + string_view name() const; + + /// Return the "destination", the name of the attribute in which + /// the argument value will be stored. + string_view dest() const; + + /// Get a reference to the ArgParse that owns this Arg. + ArgParse& argparse() { return m_argparse; } + + protected: + ArgParse& m_argparse; + }; + + /// @} + + // ------------------------------------------------------------------ + /// @defgroup Action library + /// @{ + /// + /// These are actions provided for convenience. + /// Examples of their use: + /// + /// ArgParse ap; + /// ... + /// + /// // Flag, just store 1 if set (default to 0) + /// ap.add_argument("-v") + /// .action(ArgParse::store_true()); + /// + /// // Store 42 if the flag is encountered (default is 1) + /// ap.add_argument("--foo") + /// .defaultval(1) + /// .action(ArgParse::store_const(42)); + /// + /// // Take an integer argument and store it + /// ap.add_argument("--bar") + /// .action(ArgParse::store()); + /// + /// // Take 3 floating point arguments, pass default as Color3f. + /// ap.add_argument("--color") + /// .nargs(3) + /// .metavar("R G B") + /// .action(ArgParse::store) + /// .defaultval(Imath::Color3f(0.5f, 0.5f, 0.5f)); + /// + /// // Take a single string argument, but *append* it, so if the + /// // option appears multiple time, you get a list of strings. + /// ap.add_argument("-o") + /// .action(ArgParse::append()); + /// + /// // Another string appending example, but using a positional + /// // argument. + /// ap.add_argument("filename") + /// .action(ArgParse::append()); + /// + + /// Return an action that stores 1 into its destination attribute. + static ArgAction store_true(); + + /// Return an action that stores 0 into its destination attribute. + static ArgAction store_false(); + + /// Return an action that stores a constant value into its destination + /// attribute. + template static ArgAction store_const(const T& value) + { + return [&, value](Arg& arg, cspan myarg) { + arg.argparse().params()[arg.dest()] = value; + }; + } + + static ArgAction store_const(const char* value) + { + return [&, value](Arg& arg, cspan myarg) { + arg.argparse().params()[arg.dest()] = string_view(value); + }; + } + + /// Return an action that stores into its destination attribute the + /// following `n` command line arguments (where `n` is the number of + /// additional command line arguments that this option requires). + template static ArgAction store() + { + return [&](Arg& arg, cspan myarg) { + if (myarg[0][0] == '-') // Skip command itself + myarg = myarg.subspan(1); + ParamValueList& pl(arg.argparse().params()); + int n = int(myarg.size()); + T* vals = OIIO_ALLOCA(T, n); + for (int i = 0; i < n; ++i) + vals[i] = Strutil::from_string(myarg[i]); + if (n == 1) { + pl[arg.dest()] = vals[0]; + } else { // array case -- always store as strings + pl.attribute(arg.dest(), TypeDesc(BaseTypeFromC::value, n), + vals); + } + }; + } + + /// Return an action that appends into its destination attribute the + /// following `n` command line arguments (where `n` is the number of + /// additional command line arguments that this option requires). + template static ArgAction append() + { + return [&](Arg& arg, cspan myarg) { + if (myarg[0][0] == '-') // Skip command itself + myarg = myarg.subspan(1); + ParamValueList& pl(arg.argparse().params()); + ParamValue* pv = pl.find_pv(arg.dest()); + // TypeDesc t = pv ? pv->type() : TypeUnknown; + int nold = pv ? pv->type().basevalues() : 0; + int nnew = int(myarg.size()); + int n = nold + nnew; + T* vals = OIIO_ALLOCA(T, n); + for (int i = 0; i < nold; ++i) + vals[i] = Strutil::from_string(pv->get_string_indexed(i)); + for (int i = 0; i < nnew; ++i) + vals[i + nold] = Strutil::from_string(myarg[i]); + if (n == 1) { + pl[arg.dest()] = vals[0]; + } else { // array case -- always store as strings + pl.attribute(arg.dest(), TypeDesc(BaseTypeFromC::value, n), + vals); + } + }; + } + + /// Return an action that does nothing. I guess you could use use this + /// for an argument that is obsolete and is still accepted, but no + /// longer has any function. + static Action do_nothing(); + + /// @} + + + // ------------------------------------------------------------------ + /// @defgroup Retrieving values of parsed arguments + /// @{ + /// + /// Retrieve arguments in the same manner that you would access them + /// from a OIIO::ParamValueList. + /// + /// Examples: + /// + /// // Please see the code example in the "Action library" section above + /// // for the argument declarations. + /// + /// // retrieve whether -v flag was set + /// bool verbose = ap["v"].get(); + /// + /// // Retrieve the parameter passed to --bar, defaulting to 13 if + /// // never set on the command line: + /// int bar = ap["bar"].get(13); + /// + /// // Retrieve the color, which had 3 float parameters. Extract + /// // it as an Imath::Color3f. + /// Imath::Color3f diffuse = ap["color"].get(); + /// + /// // Retrieve the filename list as a vector: + /// auto filenames = ap["filename"].as_vec(); + /// for (auto& f : filenames) + /// Strutil::printf(" file: \"%s\"\n", f); + /// + + /// Access a single argument result by name. + AttrDelegate operator[](string_view name) const + { + return { &cparams(), name }; + } + /// Access a single argument result by name. + AttrDelegate operator[](string_view name) + { + return { ¶ms(), name }; + } + + /// Directly access the ParamValueList that holds the argument results. + ParamValueList& params(); + /// Directly access the ParamValueList that holds the argument results + /// (const version). + const ParamValueList& cparams() const; + + /// @} + + +private: + class Impl; + std::shared_ptr m_impl; // PIMPL pattern + Arg& argx(const char* argname, ...); + friend class ArgOption; + +public: + // ------------------------------------------------------------------ + // Old API. DEPRECATED(2.2) + + // Declare the command line options. After the introductory message, + // parameters are a set of format strings and variable pointers. Each + // string contains an option name and a scanf-like format string to + // enumerate the arguments of that option (eg. `"-option %d %f %s"`). + // The format string is followed by a list of pointers to the argument + // variables, just like scanf. A NULL terminates the list. Multiple + // calls to options() will append additional options. + OIIO_DEPRECATED_EXTERNAL("(2.2)") + int options(const char* intro, ...); + + // old name + OIIO_DEPRECATED_EXTERNAL("Use parse_args() instead. (2.2)") + int parse(int argc, const char** argv) { return parse_args(argc, argv); } + + // Type for a callback that writes something to the output stream. + OIIO_DEPRECATED_EXTERNAL("(2.2)") + typedef std::function callback_t; + // Set callbacks to run that will print any matter you want as part + // of the verbose usage, before and after the options are detailed. + OIIO_DEPRECATED_EXTERNAL("(2.2)") + void set_preoption_help(callback_t callback); + OIIO_DEPRECATED_EXTERNAL("(2.2)") + void set_postoption_help(callback_t callback); + + // DEPRECATED(2.2) synonym for `print_help()`. + OIIO_DEPRECATED_EXTERNAL("Use print_help() instead. (2.2)") + void usage() const { print_help(); } +}; + +OIIO_NAMESPACE_3_1_END diff --git a/third_party/tlRender-install-Release/include/OpenImageIO/atomic.h b/third_party/tlRender-install-Release/include/OpenImageIO/atomic.h new file mode 100644 index 00000000..b06389c3 --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenImageIO/atomic.h @@ -0,0 +1,82 @@ +// Copyright Contributors to the OpenImageIO project. +// SPDX-License-Identifier: Apache-2.0 +// https://github.com/AcademySoftwareFoundation/OpenImageIO + + +///////////////////////////////////////////////////////////////////////// +/// @file atomic.h +/// +/// @brief Wrappers and utilities for atomics. +///////////////////////////////////////////////////////////////////////// + +#pragma once + +#include +#include + +#include +#define OIIO_USE_STDATOMIC 1 + + + +OIIO_NAMESPACE_3_1_BEGIN + +using std::atomic; +using atomic_int = atomic; +using atomic_ll = atomic; + + + +/// Atomically set avar to the minimum of its current value and bval. +template +OIIO_FORCEINLINE void +atomic_min(atomic& avar, const T& bval) +{ + do { + T a = avar.load(); + if (a <= bval || avar.compare_exchange_weak(a, bval)) + break; + } while (true); +} + + +/// Atomically set avar to the maximum of its current value and bval. +template +OIIO_FORCEINLINE void +atomic_max(atomic& avar, const T& bval) +{ + do { + T a = avar.load(); + if (a >= bval || avar.compare_exchange_weak(a, bval)) + break; + } while (true); +} + + + +// Add atomically to a float and return the original value. +OIIO_FORCEINLINE float +atomic_fetch_add(atomic& a, float f) +{ + do { + float oldval = a.load(); + float newval = oldval + f; + if (a.compare_exchange_weak(oldval, newval)) + return oldval; + } while (true); +} + + +// Add atomically to a double and return the original value. +OIIO_FORCEINLINE double +atomic_fetch_add(atomic& a, double f) +{ + do { + double oldval = a.load(); + double newval = oldval + f; + if (a.compare_exchange_weak(oldval, newval)) + return oldval; + } while (true); +} + +OIIO_NAMESPACE_3_1_END diff --git a/third_party/tlRender-install-Release/include/OpenImageIO/attrdelegate.h b/third_party/tlRender-install-Release/include/OpenImageIO/attrdelegate.h new file mode 100644 index 00000000..b33224b9 --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenImageIO/attrdelegate.h @@ -0,0 +1,232 @@ +// Copyright Contributors to the OpenImageIO project. +// SPDX-License-Identifier: Apache-2.0 +// https://github.com/AcademySoftwareFoundation/OpenImageIO + + +#pragma once + +#include +#include + +#include +#include +#include +#include + + +OIIO_NAMESPACE_3_1_BEGIN + + +namespace pvt { + +// Helper template to detect if a type is one if the string types that +// OIIO tends to use. +// clang-format off +template struct is_string : std::false_type {}; +template<> struct is_string : std::true_type {}; +template<> struct is_string : std::true_type {}; +template<> struct is_string : std::true_type {}; +// clang-format on + +} // namespace pvt + + + +// AttrDelegate should not be used directly in user code! +// +// This is a helper template that allows the notation +// Class object; +// object["name"] = value; +// to work as a shorthand for +// object.attribute ("name", TypeDesc_of_value, &value); +// and for +// value = object["name"].get(); +// to work as a shorthand for extracting the named attribute via +// object.getattribute() and assigning it to the result. +// +// Basically, the class in question needs to possess these three methods, +// working in the usual idiomatic way for OIIO: +// +// void attribute (string_view name, TypeDesc type, void* data); +// bool getattribute (string_view name, TypeDesc type, void *data); +// TypeDesc getattributetype (string_view name); +// +// Then the array access notation can be added with the following members +// of the class C: +// +// AttrDelegate operator[](string_view name) const +// { +// return { this, name }; +// } +// AttrDelegate operator[](string_view name) { +// return { this, name }; +// } +// +// This allows the following convenient notation: +// +// 1. Adding attributes, type implied by the C++ type of what's assigned: +// C obj; +// obj["foo"] = 42; // adds integer +// obj["bar"] = 39.8f; // adds float +// obj["baz"] = "hello"; // adds string +// 2. Retrieving attributes: +// int i = obj["foo"].get(); +// float f = obj["bar"].get(); +// std::string s = obj["baz"].get(); +// If the object does not possess an attribute of that name (and/or of +// that type), it will instead return the default value for that type. +// A specific default value override may be provided as an argument to +// the get() method: +// float aspect = obj["aspectratio"].get(1.0f); +// + +template class AttrDelegate { +public: + AttrDelegate(C* obj, string_view name) + : m_obj(obj) + , m_name(name) + , m_readonly(std::is_const::value) + { + } + + // Assignment to a delegate should copy the value into an attribute, + // calling attribute(name,typedesc,&data). Except for strings, which are + // handled separately. + template::value, int>::type = 0> + inline const T& operator=(const T& val) + { + if (!m_readonly) + const_cast(m_obj)->attribute(m_name, TypeDescFromC::value(), + &val); + return val; + } + + // String types are a special case because we don't directly copy their + // data, instead call the attribute(name,string_view) variant. + template::value, int>::type = 1> + inline const T& operator=(const T& val) + { + if (!m_readonly) + const_cast(m_obj)->attribute(m_name, string_view(val)); + return val; + } + // char arrays are special + inline const char* operator=(const char* val) + { + if (!m_readonly) + const_cast(m_obj)->attribute(m_name, string_view(val)); + return val; + } + + + // `Delegate->type()` returns the TypeDesc describing the data, or + // TypeUnknown if no such attribute exists. + TypeDesc type() const { return m_obj->getattributetype(m_name); } + + // `Delegate->get(defaultval=T())` retrieves the data as type T, + // or the defaultval if no such named data exists or is not the + // designated type. + template::value, int>::type = 0> + inline T get(const T& defaultval = T()) const + { + T result; + if (!m_obj->getattribute(m_name, TypeDescFromC::value(), &result)) + result = defaultval; + return result; + } + + // Using enable_if, make a slightly different version of get<> for + // strings, which need to do some ustring magic because we can't + // directly store in a std::string or string_view. + template::value, int>::type = 1> + inline T get(const T& defaultval = T()) const + { + ustring s; + return m_obj->getattribute(m_name, TypeString, &s) ? T(s) : defaultval; + } + + // `Delegate->get_indexed(int index, defaultval=T())` retrieves the + // index-th base value in the data as type T, or the defaultval if no + // such named data exists or is not the designated type. + template::value, int>::type = 0> + inline T get_indexed(int index, const T& defaultval = T()) const + { + T result; + if (!m_obj->getattribute_indexed(m_name, index, + TypeDescFromC::value(), &result)) + result = defaultval; + return result; + } + + // Using enable_if, make a slightly different version of get_indexed<> + // for strings, which need to do some ustring magic because we can't + // directly store in a std::string or string_view. + template::value, int>::type = 1> + inline T get_indexed(int index, const T& defaultval = T()) const + { + ustring s; + return m_obj->getattribute_indexed(m_name, index, TypeString, &s) + ? T(s) + : defaultval; + } + + // `Delegate->as_string(defaultval="")` returns the data, no matter its + // type, as a string. Returns the defaultval if no such data exists at + // all. + inline std::string as_string(const std::string& defaultval = std::string()) + { + std::string s; + TypeDesc t = m_obj->getattributetype(m_name); + if (t == TypeString) { // Attrib is a string? Return it. + s = get(); + } else if (t != TypeUnknown) { // Non-string attrib? Convert. + const int localsize = 64; // Small types copy to stack, avoid new + char localbuffer[localsize]; + char* buffer = localbuffer; + std::unique_ptr allocbuffer; + if (t.size() > localsize) { + allocbuffer.reset(new char[t.size()]); + buffer = allocbuffer.get(); + } + if (m_obj->getattribute(m_name, t, buffer)) + s = tostring(t, buffer); + else + s = defaultval; + } else { // No attrib? Return default. + s = defaultval; + } + return s; + } + + // Return the entire attribute (even if an array or aggregate) as a + // `std::vector`, calling `get_indexed` on each base element. + template> + inline std::vector as_vec() const + { + TypeDesc t = m_obj->getattributetype(m_name); + size_t basevals = t.basevalues(); + using Vec = std::vector; + Vec result; + result.reserve(basevals); + for (size_t i = 0; i < basevals; ++i) + result.push_back(get_indexed(int(i))); + return result; + } + + // Allow direct assignment to string, equivalent to calling as_string(). + inline operator std::string() { return as_string(); } + +protected: + C* m_obj; + string_view m_name; + bool m_readonly = false; +}; + + +OIIO_NAMESPACE_3_1_END diff --git a/third_party/tlRender-install-Release/include/OpenImageIO/benchmark.h b/third_party/tlRender-install-Release/include/OpenImageIO/benchmark.h new file mode 100644 index 00000000..ae7aafbd --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenImageIO/benchmark.h @@ -0,0 +1,476 @@ +// Copyright Contributors to the OpenImageIO project. +// SPDX-License-Identifier: Apache-2.0 +// https://github.com/AcademySoftwareFoundation/OpenImageIO + +// clang-format off + +#pragma once + +#include +#include + +#include +#include +#include +#include + + +#if (((OIIO_GNUC_VERSION && NDEBUG) || OIIO_CLANG_VERSION >= 30500 || OIIO_APPLE_CLANG_VERSION >= 70000 || defined(__INTEL_COMPILER) || defined(__INTEL_LLVM_COMPILER)) \ + && (defined(__x86_64__) || defined(__i386__))) \ + || defined(_MSC_VER) +#define OIIO_DONOTOPT_FORECINLINE OIIO_FORCEINLINE +#else +#define OIIO_DONOTOPT_FORECINLINE inline +#endif + + +OIIO_NAMESPACE_3_1_BEGIN + +/// DoNotOptimize(val) is a helper function for timing benchmarks that fools +/// the compiler into thinking the the location 'val' is used and will not +/// optimize it away. For benchmarks only, do not use in production code! +/// May not work on all platforms. References: +/// * Chandler Carruth's CppCon 2015 talk +/// * Folly https://github.com/facebook/folly/blob/master/folly/Benchmark.h +/// * Google Benchmark https://github.com/google/benchmark/blob/main/include/benchmark/benchmark.h + +template +OIIO_DONOTOPT_FORECINLINE T const& DoNotOptimize (T const &val); + + +/// clobber_all_memory() is a helper function for timing benchmarks that +/// fools the compiler into thinking that potentially any part of memory +/// has been modified, and thus serves as a barrier where the optimizer +/// won't assume anything about the state of memory preceding it. + +OIIO_FORCEINLINE void clobber_all_memory(); + + + +/// A call to clobber(p) fools the compiler into thinking that p (or *p, for +/// the pointer version) might potentially have its memory altered. The +/// implementation actually does nothing, but it's in another module, so the +/// compiler won't know this and will be conservative about any assumptions +/// of what's in p. This is helpful for benchmarking, to help erase any +/// preconceptions the optimizer has about what might be in a variable. + +void OIIO_UTIL_API clobber (void* p); +OIIO_FORCEINLINE void clobber (const void* p) { clobber ((void*)p); } + +template +OIIO_FORCEINLINE T& clobber (T& p) { clobber(&p); return p; } + +// Multi-argument clobber, added in OIIO 2.2.2 +template +OIIO_FORCEINLINE void clobber (T& p, Ts&... ps) +{ + clobber(&p); + if (sizeof...(Ts) > 0) + clobber(ps...); +} + + + + +/// Benchmarker is a class to assist with "micro-benchmarking". +/// The goal is to discern how long it takes to run a snippet of code +/// (function, lambda, etc). The code will be run in some number of trials, +/// each consisting of many iterations, yielding statistics about the run +/// time of the code. +/// +/// Tne number of trials is user-selectable, with a reasonable default of 10 +/// trials. The number of iterations per trial may be set explicitly, but +/// the default is to automatically compute a reasonable number of +/// iterations based on their timing. For most use cases, it's fire and +/// forget. +/// +/// Generally, the most and least expensive trials will be discarded (all +/// sorts of things can happen to give you a few spurious results) and then +/// the remainder of trials will be used to compute the average, standard +/// deviation, range, and median value, in ns per iteration as well as +/// millions of executions per second. The default behavior it just to echo +/// the relevant statistics to the console. +/// +/// The basic use illustrated by this example in which we try to assess +/// the difference in speed between acos() and fast_acos(): +/// +/// Benchmarker bench; +/// float val = 0.5f; +/// clobber (val); // Scrub compiler's knowledge of the value +/// bench ("acos", [&](){ DoNotOptimize(std::acos(val)); }); +/// bench ("fast_acos", [&](){ // alternate indentation style +/// DoNotOptimize(OIIO::fast_acos(val)); +/// }); +/// +/// Which produces output like this: +/// acos : 4.3 ns, 230.5 M/s (10x2097152, sdev=0.4ns rng=31.2%, med=4.6) +/// fast_acos : 3.4 ns, 291.2 M/s (10x2097152, sdev=0.4ns rng=33.0%, med=3.4) +/// +/// Some important details: +/// +/// After declaring the Benchmarker, a number of options can be set: number +/// of trials to run, iterations per trial (0 means automatic detection), +/// verbosity, whether (or how many) outliers to exclude. You can chain them +/// together if you want: +/// bench.iterations(10000).trials(10); +/// +/// It can be VERY hard to get valid benchmarks without the compiler messing +/// up your results. Some tips: +/// +/// * Code that is too fast will not be reliable. Anything that appears +/// to take less than 1 ns actually prints "unreliable" instead of full +/// stats, figuring that it is likely that it has been inadvertently +/// optimized away. +/// +/// * Use the DoNotOptimize() call on any final results computed by your +/// benchmarked code, or else the compiler is likely to remove the code +/// that leads to any values it thinks will never be used. +/// +/// * Beware of the compiler constant folding operations in your code -- +/// do not pass constants unless you want to benchmark its performance on +/// known constants, and it is probably smart to ensure that all variables +/// accessed by your code should be passed to clobber() before running +/// the benchmark, to confuse the compiler into not assuming its value. + +class OIIO_UTIL_API Benchmarker { +public: + Benchmarker() {} + + // Calling Benchmarker like a function (operator()) executes the + // benchmark. This process runs func(args...), several trials, each + // trial with many iterations. The value returned is the best estimate + // of the average time per iteration that it takes to run func. + template + double operator()(string_view name, FUNC func, ARGS&&... args) + { + m_name = name; + run(func, args...); + if (verbose()) + std::cout << (*this) << std::endl; + return avg(); + } + + // Return the average, sample standard deviation, median, and range + // of per-iteration time. + double avg() const { return m_avg; } + double stddev() const { return m_stddev; } + double range() const { return m_range; } + double median() const { return m_median; } + + // Control the number of iterations per trial. The special value 0 means + // to determine automatically a reasonable number of iterations. That is + // also the default behavior. + Benchmarker& iterations(size_t val) + { + m_user_iterations = val; + return *this; + } + size_t iterations() const { return m_iterations; } + + // Control the number of trials to perform. + Benchmarker& trials(size_t val) + { + m_trials = val; + return *this; + } + size_t trials() const { return m_trials; } + + // Control the number of values of work that each iteration represents. + // Usually you will leave this at the default of 1, but for some cases, + // it may be helpful. An example of where you might use this is if you + // are benchmarking SIMD operations. A scalar sqrt and an SIMD sqrt may + // run in the same amount of time, but the SIMD version is operating on + // 4 (or 8, etc.) times as many values. You can use the 'work' size to + // make the calls report Mvals/s, showing more accurately than the SIMD + // call is faster than the scalar call. + Benchmarker& work(size_t val) + { + m_work = val; + return *this; + } + size_t work() const { return m_work; } + + // Control the exclusion of outliers. This number (default 1) of fastest + // and slowest trials will be excluded from the statistics, to remove + // the effects of spurious things happening on the system. Setting + // outliers to 0 will compute statistics on all trials, without any + // outlier exclusion. + Benchmarker& exclude_outliers(int e) + { + m_exclude_outliers = e; + return *this; + } + int exclude_outliers() const { return m_exclude_outliers; } + + // Control the verbosity of the printing for each benchmark. The default + // is 1, which prints basic statistics. Verbosity 0 is silent and leaves + // it up to the app to retrieve results. + Benchmarker& verbose(int v) + { + m_verbose = v; + return *this; + } + int verbose() const { return m_verbose; } + + // Control indentation in the printout -- this number of spaces will + // be printed before the statistics. + Benchmarker& indent(int spaces) + { + m_indent = spaces; + return *this; + } + int indent() const { return m_indent; } + + // Choices of unit to report results. + enum class Unit : int { autounit, ns, us, ms, s }; + + // Control the units for reporting results. By default, an appropriate + // unit will be chosen for nice printing of each benchmark individually. + // But the user may also wish to request specific units like ns or ux in + // order to ensure that all benchmark resutls are using the same units. + Benchmarker& units(Unit s) + { + m_units = s; + return *this; + } + Unit units() const { return m_units; } + + const std::string& name() const { return m_name; } + +private: + size_t m_iterations = 0; + size_t m_user_iterations = 0; + size_t m_trials = 10; + size_t m_work = 1; + std::string m_name; + std::vector m_times; // times for each trial + double m_avg = 0.0; // average time per iteration + double m_stddev = 0.0; // standard deviation per iteration + double m_range = 0.0; // range per iteration + double m_median = 0.0; // median per-iteration time + int m_exclude_outliers = 1; + int m_verbose = 1; + int m_indent = 0; + Unit m_units = Unit::autounit; + + template + double run(FUNC func, ARGS&&... args) + { + if (m_user_iterations) + m_iterations = m_user_iterations; + else + m_iterations = determine_iterations(func, args...); + m_times.resize(m_trials); + + double overhead = iteration_overhead() * iterations(); + for (auto& t : m_times) + t = std::max(0.0, do_trial(m_iterations, func, args...) - overhead); + compute_stats(); + return avg(); + } + + template + size_t determine_iterations(FUNC func, ARGS&&... args) + { + // We're shooting for a trial around 1/100s + const double target_time = 0.01; + size_t i = 1; + while (1) { + double t = do_trial (i, func, args...); + // std::cout << "Trying " << i << " iters = " << t << "\n"; + if (t > target_time * 1.5 && i > 2) + return i / 2; + if (t > target_time * 0.75 || i > (size_t(1) << 30)) + return i; + if (t < target_time / 16) + i *= 8; + else + i *= 2; + } + } + + template + double do_trial(size_t iterations, FUNC func, ARGS&&... args) + { + Timer timer; + while (iterations--) { + clobber_all_memory(); + func(args...); + } + return timer(); + } + + void compute_stats() { compute_stats(m_times, m_iterations); } + void compute_stats(std::vector& times, size_t iterations); + double iteration_overhead(); + + friend OIIO_UTIL_API std::ostream& operator<<(std::ostream& out, + const Benchmarker& bench); +}; + + + +/// Helper template that runs a function (or functor) n times, using a +/// Timer to benchmark the results, and returning the fastest trial. If +/// 'range' is non-NULL, the range (max-min) of the various time trials +/// will be stored there. +/// +/// DEPRECATED(1.8): This may be considered obsolete, probably the +/// Benchmarker class is a better solution. +template +#ifndef OIIO_INTERNAL +OIIO_DEPRECATED("use Benchmarker instead") +#endif +double +time_trial(FUNC func, int ntrials = 1, int nrepeats = 1, double* range = NULL) +{ + double mintime = 1.0e30, maxtime = 0.0; + while (ntrials-- > 0) { + Timer timer; + for (int i = 0; i < nrepeats; ++i) { + // Be sure that the repeated calls to func aren't optimized away: + clobber_all_memory(); + func(); + } + double t = timer(); + if (t < mintime) + mintime = t; + if (t > maxtime) + maxtime = t; + } + if (range) + *range = maxtime - mintime; + return mintime; +} + + + +// Benchmarking helper function: Time a function with various thread counts. +// Inputs: +// task(int iterations) : The function to run (which understands an +// iteration count or work load). +// pretask() : Code to run before the task threads start. +// posttask() : Code to run after the task threads complete. +// out : Stream to print results (or NULL to not print anything). +// maxthreads : Don't do any trials greater than this thread count, +// even if it's in the threadcounts[]. +// total_iterations : Total amount of work to do. The func() will be +// called with total_iterations/nthreads, so that the +// total work for all threads stays close to constant. +// ntrials : The number of runs for each thread count (more will take +// longer, but be more accurate timing). The best case +// run is the one that will be reported. +// threadcounts[] : An span giving the set of thread counts +// to try. +// Return value: +// A vector containing the best time (of the trials) for each +// thread count. This can be discarded. +OIIO_UTIL_API std::vector +timed_thread_wedge (function_view task, + function_view pretask, + function_view posttask, + std::ostream *out, + int maxthreads, + int total_iterations, int ntrials, + cspan threadcounts = {1,2,4,8,12,16,24,32,48,64,128}); + +// Simplified timed_thread_wedge without pre- and post-tasks, using +// std::out for output, with a default set of thread counts, and not needing +// to return the vector of times. +OIIO_UTIL_API void +timed_thread_wedge (function_view task, + int maxthreads, int total_iterations, int ntrials, + cspan threadcounts = {1,2,4,8,12,16,24,32,48,64,128}); + + + + +////////////////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////// +// Implementation details... +// + + +namespace pvt { +void OIIO_UTIL_API use_char_ptr (char const volatile *); +} + + +#if ((OIIO_GNUC_VERSION && NDEBUG) || OIIO_CLANG_VERSION >= 30500 || OIIO_APPLE_CLANG_VERSION >= 70000 || defined(__INTEL_COMPILER) || defined(__INTEL_LLVM_COMPILER)) \ + && (defined(__x86_64__) || defined(__i386__)) + +// Major non-MS compilers on x86/x86_64: use asm trick to indicate that +// the value is needed. +template +OIIO_FORCEINLINE T const& +DoNotOptimize (T const &val) { +#if defined(__clang__) + // asm volatile("" : "+rm" (const_cast(val))); + // Clang doesn't like the 'X' constraint on `val` and certain GCC versions + // don't like the 'g' constraint. Attempt to placate them both. + asm volatile("" : : "g"(val) : "memory"); +#else + asm volatile("" : : "i,r,m"(val) : "memory"); +#endif + return val; +} + +#elif _MSC_VER + +// Microsoft of course has its own way of turning off optimizations. +#pragma optimize("", off) +template +OIIO_FORCEINLINE T const & DoNotOptimize (T const &val) { + pvt::use_char_ptr(&reinterpret_cast(val)); + _ReadWriteBarrier (); + return val; +} +#pragma optimize("", on) + +#elif __has_attribute(__optnone__) + +// If __optnone__ attribute is available: make a null function with no +// optimization, that's all we need. +template +inline T const & __attribute__((__optnone__)) +DoNotOptimize (T const &val) { + return val; +} + +#else + +// Otherwise, it won't work, just make a stub. +template +OIIO_FORCEINLINE T const & DoNotOptimize (T const &val) { + pvt::use_char_ptr(&reinterpret_cast(val)); + return val; +} + +#endif + + + +#if ((OIIO_GNUC_VERSION && NDEBUG) || OIIO_CLANG_VERSION >= 30500 || OIIO_APPLE_CLANG_VERSION >= 70000 || defined(__INTEL_COMPILER)) && (defined(__x86_64__) || defined(__i386__)) + +// Special trick for x86/x86_64 and gcc-like compilers +OIIO_FORCEINLINE void clobber_all_memory() { + asm volatile ("" : : : "memory"); +} + +#elif _MSC_VER + +OIIO_FORCEINLINE void clobber_all_memory() { + _ReadWriteBarrier (); +} + +#else + +// No fallback for other CPUs or compilers. Suggestions? +OIIO_FORCEINLINE void clobber_all_memory() { } + +#endif + +OIIO_UTIL_API std::ostream& operator<<(std::ostream& out, + const Benchmarker& bench); + +OIIO_NAMESPACE_3_1_END diff --git a/third_party/tlRender-install-Release/include/OpenImageIO/bit.h b/third_party/tlRender-install-Release/include/OpenImageIO/bit.h new file mode 100644 index 00000000..71f713d9 --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenImageIO/bit.h @@ -0,0 +1,276 @@ +// Copyright Contributors to the OpenImageIO project. +// SPDX-License-Identifier: Apache-2.0 +// https://github.com/AcademySoftwareFoundation/OpenImageIO + + +#pragma once + +#include +#include +#include + + +OIIO_NAMESPACE_3_1_BEGIN + + +/// Standards-compliant bit cast of two equally sized types. This is used +/// equivalently to C++20 std::bit_cast, but it works prior to C++20 and +/// it has the right decorators to work with Cuda. +/// @version 2.4.1 +template +OIIO_NODISCARD OIIO_FORCEINLINE OIIO_HOSTDEVICE To +bitcast(const From& from) noexcept +{ + static_assert(sizeof(From) == sizeof(To), + "bit_cast must be between objects of the same size"); + // NOTE: this is the only standards compliant way of doing this type of + // casting. This seems to generate optimal code for gcc, clang, MSVS, and + // icx, for both scalar code and vectorized loops, but icc fails to + // vectorize without the intrinsics overrides below. + // + // If we ever find the memcpy isn't doing the job, we should try + // gcc/clang's __builtin_bit_cast and see if that's any better. Some day + // this may all be replaced with C++20 std::bit_cast, but we should not do + // so without checking that it works ok for vectorized loops. + To result; + memcpy((void*)&result, &from, sizeof(From)); + return result; +} + +#if defined(__INTEL_COMPILER) +// For Intel icc, using the memcpy implementation above will cause a loop with +// a bitcast to fail to vectorize, but using the intrinsics below will allow +// it to vectorize. For icx, as well as gcc and clang, the same optimal code +// is generated (even in a vectorized loop) for memcpy. We can probably remove +// these intrinsics once we drop support for icc. +template<> +OIIO_NODISCARD OIIO_FORCEINLINE uint32_t +bitcast(const float& val) noexcept +{ + return static_cast(_castf32_u32(val)); +} + +template<> +OIIO_NODISCARD OIIO_FORCEINLINE int32_t +bitcast(const float& val) noexcept +{ + return static_cast(_castf32_u32(val)); +} + +template<> +OIIO_NODISCARD OIIO_FORCEINLINE float +bitcast(const uint32_t& val) noexcept +{ + return _castu32_f32(val); +} + +template<> +OIIO_NODISCARD OIIO_FORCEINLINE float +bitcast(const int32_t& val) noexcept +{ + return _castu32_f32(val); +} +#endif + + +OIIO_NODISCARD OIIO_FORCEINLINE OIIO_HOSTDEVICE int +bitcast_to_int(float x) +{ + return bitcast(x); +} + +OIIO_NODISCARD OIIO_FORCEINLINE OIIO_HOSTDEVICE float +bitcast_to_float(int x) +{ + return bitcast(x); +} + + + +/// Change endian-ness of a 16, 32, or 64 bit value by reversing the bytes. +/// This is a pre-C++23 (and Cuda-capable) version of std::byteswap. This +/// should work for any of short, unsigned short, int, unsigned int, float, +/// long long, pointers. +template +OIIO_NODISCARD inline OIIO_HOSTDEVICE T +byteswap(T n) +{ + unsigned char* c = reinterpret_cast(&n); + if (sizeof(T) == 2) { + std::swap(c[0], c[1]); + } else if (sizeof(T) == 4) { + std::swap(c[0], c[3]); + std::swap(c[1], c[2]); + } else if (sizeof(T) == 8) { + std::swap(c[0], c[7]); + std::swap(c[1], c[6]); + std::swap(c[2], c[5]); + std::swap(c[3], c[4]); + } + return n; +} + + + +#if (OIIO_GNUC_VERSION || OIIO_ANY_CLANG \ + || OIIO_INTEL_CLASSIC_COMPILER_VERSION) \ + && !defined(__CUDACC__) +// CPU gcc and compatible can use these intrinsics, 8-15x faster + +template<> +OIIO_NODISCARD inline uint16_t +byteswap(uint16_t f) +{ + return __builtin_bswap16(f); +} + +template<> +OIIO_NODISCARD inline uint32_t +byteswap(uint32_t f) +{ + return __builtin_bswap32(f); +} + +template<> +OIIO_NODISCARD inline uint64_t +byteswap(uint64_t f) +{ + return __builtin_bswap64(f); +} + +template<> +OIIO_NODISCARD inline int16_t +byteswap(int16_t f) +{ + return __builtin_bswap16(f); +} + +template<> +OIIO_NODISCARD inline int32_t +byteswap(int32_t f) +{ + return __builtin_bswap32(f); +} + +template<> +OIIO_NODISCARD inline int64_t +byteswap(int64_t f) +{ + return __builtin_bswap64(f); +} + +template<> +OIIO_NODISCARD inline float +byteswap(float f) +{ + return bitcast(byteswap(bitcast(f))); +} + +template<> +OIIO_NODISCARD inline double +byteswap(double f) +{ + return bitcast(byteswap(bitcast(f))); +} + +#elif defined(_MSC_VER) && !defined(__CUDACC__) +// CPU MSVS can use these intrinsics + +template<> +OIIO_NODISCARD inline uint16_t +byteswap(uint16_t f) +{ + return _byteswap_ushort(f); +} + +template<> +OIIO_NODISCARD inline uint32_t +byteswap(uint32_t f) +{ + return _byteswap_ulong(f); +} + +template<> +OIIO_NODISCARD inline uint64_t +byteswap(uint64_t f) +{ + return _byteswap_uint64(f); +} + +template<> +OIIO_NODISCARD inline int16_t +byteswap(int16_t f) +{ + return _byteswap_ushort(f); +} + +template<> +OIIO_NODISCARD inline int32_t +byteswap(int32_t f) +{ + return _byteswap_ulong(f); +} + +template<> +OIIO_NODISCARD inline int64_t +byteswap(int64_t f) +{ + return _byteswap_uint64(f); +} +#endif + + + +/// Bitwise circular rotation left by `s` bits (for any unsigned integer +/// type). For info on the C++20 std::rotl(), see +/// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p0553r4.html +// FIXME: this should be constexpr, but we're leaving that out for now +// because the Cuda specialization uses an intrinsic that isn't constexpr. +// Come back to this later when more of the Cuda library is properly +// constexpr. +template +OIIO_NODISCARD OIIO_FORCEINLINE OIIO_HOSTDEVICE T +rotl(T x, int s) noexcept +{ + static_assert(std::is_unsigned::value && std::is_integral::value, + "rotl only works for unsigned integer types"); + return (x << s) | (x >> ((sizeof(T) * 8) - s)); +} + + +#if defined(__CUDA_ARCH__) && __CUDA_ARCH__ >= 320 +// Cuda has an intrinsic for 32 bit unsigned int rotation +// FIXME: This should be constexpr, but __funnelshift_lc seems not to be +// marked as such. +template<> +OIIO_NODISCARD OIIO_FORCEINLINE OIIO_HOSTDEVICE uint32_t +rotl(uint32_t x, int s) noexcept +{ + return __funnelshift_lc(x, x, s); +} +#endif + + + +// Old names -- DEPRECATED(2.1) +OIIO_DEPRECATED("use rotl() instead (2.1)") +OIIO_FORCEINLINE OIIO_HOSTDEVICE uint32_t +rotl32(uint32_t x, int k) +{ +#if defined(__CUDA_ARCH__) && __CUDA_ARCH__ >= 320 + return __funnelshift_lc(x, x, k); +#else + return (x << k) | (x >> (32 - k)); +#endif +} + +OIIO_DEPRECATED("use rotl() instead (2.1)") +OIIO_FORCEINLINE OIIO_HOSTDEVICE uint64_t +rotl64(uint64_t x, int k) +{ + return (x << k) | (x >> (64 - k)); +} + + + +OIIO_NAMESPACE_3_1_END diff --git a/third_party/tlRender-install-Release/include/OpenImageIO/color.h b/third_party/tlRender-install-Release/include/OpenImageIO/color.h new file mode 100644 index 00000000..3e44c73a --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenImageIO/color.h @@ -0,0 +1,518 @@ +// Copyright Contributors to the OpenImageIO project. +// SPDX-License-Identifier: Apache-2.0 +// https://github.com/AcademySoftwareFoundation/OpenImageIO + +#pragma once + +#include + +#include +#include +#include +#include +#include + +// Preprocessor symbol to allow conditional compilation depending on +// whether the ColorProcessor class is exposed (it was not prior to OIIO 1.9). +#define OIIO_HAS_COLORPROCESSOR 1 + +// +// Some general color management information materials to have handy: +// - CIF recommendations for scene referred color spaces for rendering and +// textures: +// https://github.com/AcademySoftwareFoundation/ColorInterop/blob/main/Recommendations/01_TextureAssetColorSpaces/TextureAssetColorSpaces.md +// - CIF recommendations for display referred color spaces: +// https://docs.google.com/document/d/1MmBG4a3Dr6S6EO781WjK-xZW7QdHpuo-zd7wtMvG1Rs +// + + +// Preprocessor symbol to allow conditional compilation depending on +// whether the ColorConfig returns ColorProcessor shared pointers or raw. +#define OIIO_COLORCONFIG_USES_SHARED_PTR 1 + + +OIIO_NAMESPACE_3_1_BEGIN + +/// The ColorProcessor encapsulates a baked color transformation, suitable for +/// application to raw pixels, or ImageBuf(s). These are generated using +/// ColorConfig::createColorProcessor, and referenced in ImageBufAlgo +/// (amongst other places) +class OIIO_API ColorProcessor { +public: + ColorProcessor() {}; + virtual ~ColorProcessor(void) {}; + virtual bool isNoOp() const { return false; } + virtual bool hasChannelCrosstalk() const { return false; } + + // Convert an array/image of color values. The strides are the distance, + // in bytes, between subsequent color channels, pixels, and scanlines. + virtual void apply(float* data, int width, int height, int channels, + stride_t chanstride, stride_t xstride, + stride_t ystride) const + = 0; + // Convert a single 3-color + void apply(float* data) + { + apply((float*)data, 1, 1, 3, sizeof(float), 3 * sizeof(float), + 3 * sizeof(float)); + } +}; + + + +using ColorProcessorHandle = std::shared_ptr; + + + +/// Represents the set of all color transformations that are allowed. +/// If OpenColorIO is enabled at build time, this configuration is loaded +/// at runtime, allowing the user to have complete control of all color +/// transformation math. ($OCIO) (See opencolorio.org for details). +/// If OpenColorIO is not enabled at build time, a generic color configuration +/// is provided for minimal color support. +/// +/// NOTE: ColorConfig(s) and ColorProcessor(s) are potentially heavy-weight. +/// Their construction / destruction should be kept to a minimum. + +class OIIO_API ColorConfig { +public: + /// Construct a ColorConfig using the named OCIO configuration file, + /// or if filename is empty, to the current color configuration + /// specified by env variable $OCIO. + /// + /// Multiple calls to this are potentially expensive. A ColorConfig + /// should usually be shared by an app for its entire runtime. + ColorConfig(string_view filename = ""); + + ~ColorConfig(); + + /// Reset the config to the named OCIO configuration file, or if + /// filename is empty, to the current color configuration specified + /// by env variable $OCIO. Return true for success, false if there + /// was an error. + /// + /// Multiple calls to this are potentially expensive. A ColorConfig + /// should usually be shared by an app for its entire runtime. + bool reset(string_view filename = ""); + + /// Has an error string occurred? + /// (This will not affect the error state.) + bool has_error() const; + + /// DEPRECATED(2.4), old name for has_error(). + OIIO_DEPRECATED("Use has_error()") + bool error() const { return has_error(); } + + /// This routine will return the error string (and by default, clear any + /// error flags). If no error has occurred since the last time + /// geterror() was called, it will return an empty string. + std::string geterror(bool clear = true) const; + + /// Get the number of ColorSpace(s) defined in this configuration + int getNumColorSpaces() const; + + /// Query the name of the specified ColorSpace. + const char* getColorSpaceNameByIndex(int index) const; + + /// Given a color space name, return the index of an equivalent color + /// space, or -1 if not found. It will first look for an exact match of + /// the name, but if not found, will match a color space that is + /// "equivalent" to the named color space. + int getColorSpaceIndex(string_view name) const; + + /// Get the name of the color space representing the named role, + /// or NULL if none could be identified. + const char* getColorSpaceNameByRole(string_view role) const; + + /// Get the data type that OCIO thinks this color space is. The name + /// may be either a color space name or a role. + OIIO::TypeDesc getColorSpaceDataType(string_view name, int* bits) const; + + /// Retrieve the full list of known color space names, as a vector + /// of strings. + std::vector getColorSpaceNames() const; + + /// Get the name of the color space family of the named color space, + /// or NULL if none could be identified. + const char* getColorSpaceFamilyByName(string_view name) const; + + // Get the number of Roles defined in this configuration + int getNumRoles() const; + + /// Query the name of the specified Role. + const char* getRoleByIndex(int index) const; + + /// Retrieve the full list of known Roles, as a vector of strings. + std::vector getRoles() const; + + /// Get the number of Looks defined in this configuration + int getNumLooks() const; + + /// Query the name of the specified Look. + const char* getLookNameByIndex(int index) const; + + /// Retrieve the full list of known look names, as a vector of strings. + std::vector getLookNames() const; + + /// Get the number of NamedTransforms defined in this configuration + int getNumNamedTransforms() const; + + /// Query the name of the specified NamedTransform. + const char* getNamedTransformNameByIndex(int index) const; + + /// Retrieve the full list of known NamedTransforms, as a vector of strings + std::vector getNamedTransformNames() const; + + /// Retrieve the full list of aliases for the named NamedTransform. + std::vector + getNamedTransformAliases(string_view named_transform) const; + + /// Is the color space known to be linear? This is very conservative, and + /// will return false if it's not sure. + bool isColorSpaceLinear(string_view name) const; + + /// Retrieve the full list of aliases for the named color space. + std::vector getAliases(string_view color_space) const; + + /// Given the specified input and output ColorSpace, request a handle to + /// a ColorProcessor. It is possible that this will return an empty + /// handle, if the inputColorSpace doesn't exist, the outputColorSpace + /// doesn't exist, or if the specified transformation is illegal (for + /// example, it may require the inversion of a 3D-LUT, etc). + /// + /// The handle is actually a shared_ptr, so when you're done with a + /// ColorProcess, just discard it. ColorProcessor(s) remain valid even + /// if the ColorConfig that created them no longer exists. + /// + /// Created ColorProcessors are cached, so asking for the same color + /// space transformation multiple times shouldn't be very expensive. + ColorProcessorHandle createColorProcessor( + string_view inputColorSpace, string_view outputColorSpace, + string_view context_key = "", string_view context_value = "") const; + ColorProcessorHandle + createColorProcessor(ustring inputColorSpace, ustring outputColorSpace, + ustring context_key = ustring(), + ustring context_value = ustring()) const; + + /// Given the named look(s), input and output color spaces, request a + /// color processor that applies an OCIO look transformation. If + /// inverse==true, request the inverse transformation. The + /// context_key and context_value can optionally be used to establish + /// extra key/value pairs in the OCIO context if they are comma- + /// separated lists of context keys and values, respectively. + /// + /// The handle is actually a shared_ptr, so when you're done with a + /// ColorProcess, just discard it. ColorProcessor(s) remain valid even + /// if the ColorConfig that created them no longer exists. + /// + /// Created ColorProcessors are cached, so asking for the same color + /// space transformation multiple times shouldn't be very expensive. + ColorProcessorHandle + createLookTransform(string_view looks, string_view inputColorSpace, + string_view outputColorSpace, bool inverse = false, + string_view context_key = "", + string_view context_value = "") const; + ColorProcessorHandle + createLookTransform(ustring looks, ustring inputColorSpace, + ustring outputColorSpace, bool inverse = false, + ustring context_key = ustring(), + ustring context_value = ustring()) const; + + /// Get the number of displays defined in this configuration + int getNumDisplays() const; + + /// Query the name of the specified display. + const char* getDisplayNameByIndex(int index) const; + + /// Retrieve the full list of known display names, as a vector of + /// strings. + std::vector getDisplayNames() const; + + /// Get the name of the default display. + const char* getDefaultDisplayName() const; + + /// Get the number of views for a given display defined in this + /// configuration. If the display is empty or not specified, the default + /// display will be used. + int getNumViews(string_view display = "") const; + + /// Query the name of the specified view for the specified display + const char* getViewNameByIndex(string_view display, int index) const; + + /// Retrieve the full list of known view names for the display, as a + /// vector of strings. If the display is empty or not specified, the + /// default display will be used. + std::vector getViewNames(string_view display = "") const; + + /// Query the name of the default view for the specified display. If the + /// display is empty or not specified, the default display will be used. + /// This version does not consider the input color space. + const char* getDefaultViewName(string_view display = "") const; + + /// Query the name of the default view for the specified display, given + /// the input color space. If `display` is "default" or an empty string, + /// the default display will be used. The input color space is used to + /// determine the most appropriate default view for the given display. + const char* getDefaultViewName(string_view display, + string_view inputColorSpace) const; + + /// Returns the colorspace attribute of the (display, view) pair. (Note + /// that this may be either a color space or a display color space.) + /// Returns nullptr for failure. + const char* getDisplayViewColorSpaceName(const std::string& display, + const std::string& view) const; + + /// Returns the looks attribute of a (display, view) pair. Returns nullptr + /// for failure. + const char* getDisplayViewLooks(const std::string& display, + const std::string& view) const; + + /// Construct a processor to transform from the given color space + /// to the color space of the given display and view. You may optionally + /// override the looks that are, by default, used with the display/view + /// combination. Looks is a potentially comma (or colon) delimited list + /// of lookNames, where +/- prefixes are optionally allowed to denote + /// forward/inverse transformation (and forward is assumed in the + /// absence of either). It is possible to remove all looks from the + /// display by passing an empty string. The context_key and context_value + /// can optionally be used to establish extra key/value pair in the OCIO + /// context if they are comma-separated lists of context keys and + /// values, respectively. + /// + /// It is possible that this will return an empty handle if one of the + /// color spaces or the display or view doesn't exist or is not allowed. + /// + /// The handle is actually a shared_ptr, so when you're done with a + /// ColorProcess, just discard it. ColorProcessor(s) remain valid even + /// if the ColorConfig that created them no longer exists. + /// + /// Created ColorProcessors are cached, so asking for the same color + /// space transformation multiple times shouldn't be very expensive. + ColorProcessorHandle + createDisplayTransform(string_view display, string_view view, + string_view inputColorSpace, string_view looks = "", + bool inverse = false, string_view context_key = "", + string_view context_value = "") const; + ColorProcessorHandle + createDisplayTransform(ustring display, ustring view, + ustring inputColorSpace, ustring looks = ustring(), + bool inverse = false, + ustring context_key = ustring(), + ustring context_value = ustring()) const; + + OIIO_DEPRECATED("prefer the kind that takes an `inverse` parameter (2.5)") + ColorProcessorHandle + createDisplayTransform(string_view display, string_view view, + string_view inputColorSpace, string_view looks, + string_view context_key, + string_view context_value = "") const + { + return createDisplayTransform(ustring(display), ustring(view), + ustring(inputColorSpace), ustring(looks), + false, ustring(context_key), + ustring(context_value)); + } + OIIO_DEPRECATED("prefer the kind that takes an `inverse` parameter (2.5)") + ColorProcessorHandle createDisplayTransform( + ustring display, ustring view, ustring inputColorSpace, ustring looks, + ustring context_key, ustring context_value = ustring()) const + { + return createDisplayTransform(display, view, inputColorSpace, looks, + false, context_key, context_value); + } + + /// Construct a processor to perform color transforms determined by an + /// OpenColorIO FileTransform. It is possible that this will return an + /// empty handle if the FileTransform doesn't exist or is not allowed. + /// + /// The handle is actually a shared_ptr, so when you're done with a + /// ColorProcess, just discard it. ColorProcessor(s) remain valid even + /// if the ColorConfig that created them no longer exists. + /// + /// Created ColorProcessors are cached, so asking for the same color + /// space transformation multiple times shouldn't be very expensive. + ColorProcessorHandle createFileTransform(string_view name, + bool inverse = false) const; + ColorProcessorHandle createFileTransform(ustring name, + bool inverse = false) const; + + /// Construct a processor to perform color transforms determined by an + /// OpenColorIO NamedTransform. It is possible that this will return an + /// empty handle if the NamedTransform doesn't exist or is not allowed. + /// + /// The handle is actually a shared_ptr, so when you're done with a + /// ColorProcess, just discard it. ColorProcessor(s) remain valid even + /// if the ColorConfig that created them no longer exists. + /// + /// Created ColorProcessors are cached, so asking for the same color + /// space transformation multiple times shouldn't be very expensive. + ColorProcessorHandle + createNamedTransform(string_view name, bool inverse = false, + string_view context_key = "", + string_view context_value = "") const; + ColorProcessorHandle + createNamedTransform(ustring name, bool inverse = false, + ustring context_key = ustring(), + ustring context_value = ustring()) const; + + /// Construct a processor to perform color transforms specified by a + /// 4x4 matrix. + /// + /// The handle is actually a shared_ptr, so when you're done with a + /// ColorProcess, just discard it. + /// + /// Created ColorProcessors are cached, so asking for the same color + /// space transformation multiple times shouldn't be very expensive. + ColorProcessorHandle createMatrixTransform(M44fParam M, + bool inverse = false) const; + + /// Given a filepath, ask OCIO what color space it thinks the file + /// should be, based on how the name matches file naming rules in the + /// OCIO config. (This is mostly a wrapper around OCIO's + /// ColorConfig::getColorSpaceFromFilepath.) + string_view getColorSpaceFromFilepath(string_view str) const; + + /// Given a filepath, ask OCIO what color space it thinks the file + /// should be, based on how the name matches file naming rules in the + /// OCIO config. If no match is found, return `default_cs` instead of + /// the OCIO config's default color space. If `cs_name_match` is + /// true, additionally attempt to match the color space name in the + /// filename, if the OCIO config heuristics fail to find a match. + string_view getColorSpaceFromFilepath(string_view str, + string_view default_cs, + bool cs_name_match = false) const; + + /// Given a filepath, returns whether the result of + /// getColorSpaceFromFilepath() is the failover condition, due + /// to the OCIO config's file rules not otherwise finding a match + /// for the filepath. + bool filepathOnlyMatchesDefaultRule(string_view str) const; + + /// Given a string (like a filename), look for the longest, right-most + /// colorspace substring that appears. Returns "" if no such color space + /// is found. + string_view parseColorSpaceFromString(string_view str) const; + + /// Turn the name, which could be a color space, an alias, a role, or + /// an OIIO-understood universal name (like "sRGB") into a canonical + /// color space name. If the name is not recognized, return "". + string_view resolve(string_view name) const; + + /// Are the two color space names/aliases/roles equivalent? + bool equivalent(string_view color_space, + string_view other_color_space) const; + + /// Return a filename or other identifier for the config we're using. + std::string configname() const; + + /// Set the spec's metadata to presume that color space is `name` (or to + /// assume nothing about the color space if `name` is empty). The core + /// operation is to set the "oiio:ColorSpace" attribute, but it also removes + /// or alters several other attributes that may hint color space in ways that + /// might be contradictory or no longer true. + /// + /// @version 3.0 + void set_colorspace(ImageSpec& spec, string_view name) const; + + /// Set the spec's metadata to reflect Rec709 color primaries and the given + /// gamma. The core operation is to set the "oiio:ColorSpace" attribute, but + /// it also removes or alters several other attributes that may hint color + /// space in ways that might be contradictory or no longer true. + /// + /// @version 3.0 + void set_colorspace_rec709_gamma(ImageSpec& spec, float gamma) const; + + /// Return if OpenImageIO was built with OCIO support + static bool supportsOpenColorIO(); + + /// Return the hex OCIO version (maj<<24 + min<<16 + patch), or 0 if no + /// OCIO support is available. + static int OpenColorIO_version_hex(); + + /// Return a default ColorConfig, which is a singleton that will be + /// created the first time it is needed. It will be initialized with the + /// OCIO environment variable, if it exists, or the OCIO built-in config + /// (for OCIO >= 2.2). If neither of those is possible, it will be + /// initialized with a built-in minimal config. + static const ColorConfig& default_colorconfig(); + +private: + ColorConfig(const ColorConfig&) = delete; + ColorConfig& operator=(const ColorConfig&) = delete; + + class Impl; + std::unique_ptr m_impl; + Impl* getImpl() const { return m_impl.get(); } +}; + + + +/// Utility -- convert sRGB value to linear transfer function, without +/// any change in color primaries. +/// http://en.wikipedia.org/wiki/SRGB +inline float +sRGB_to_linear(float x) +{ + return (x <= 0.04045f) ? (x * (1.0f / 12.92f)) + : powf((x + 0.055f) * (1.0f / 1.055f), 2.4f); +} + + +#ifndef __CUDA_ARCH__ +inline simd::vfloat4 +sRGB_to_linear(const simd::vfloat4& x) +{ + return simd::select( + x <= 0.04045f, x * (1.0f / 12.92f), + fast_pow_pos(madd(x, (1.0f / 1.055f), 0.055f * (1.0f / 1.055f)), 2.4f)); +} +#endif + +/// Utility -- convert linear value to sRGB transfer function, without +/// any change in color primaries. +inline float +linear_to_sRGB(float x) +{ + return (x <= 0.0031308f) ? (12.92f * x) + : (1.055f * powf(x, 1.f / 2.4f) - 0.055f); +} + + +#ifndef __CUDA_ARCH__ +/// Utility -- convert linear value to sRGB transfer function, without +/// any change in color primaries. +inline simd::vfloat4 +linear_to_sRGB(const simd::vfloat4& x) +{ + // x = simd::max (x, simd::vfloat4::Zero()); + return simd::select(x <= 0.0031308f, 12.92f * x, + madd(1.055f, fast_pow_pos(x, 1.f / 2.4f), -0.055f)); +} +#endif + + +/// Utility -- convert Rec709 value to linear transfer function, without +/// any change in color primaries. +/// http://en.wikipedia.org/wiki/Rec._709 +inline float +Rec709_to_linear(float x) +{ + if (x < 0.081f) + return x * (1.0f / 4.5f); + else + return powf((x + 0.099f) * (1.0f / 1.099f), (1.0f / 0.45f)); +} + +/// Utility -- convert linear value to Rec709 transfer function, without +/// any change in color primaries. +inline float +linear_to_Rec709(float x) +{ + if (x < 0.018f) + return x * 4.5f; + else + return 1.099f * powf(x, 0.45f) - 0.099f; +} + + +OIIO_NAMESPACE_3_1_END diff --git a/third_party/tlRender-install-Release/include/OpenImageIO/dassert.h b/third_party/tlRender-install-Release/include/OpenImageIO/dassert.h new file mode 100644 index 00000000..db7cf659 --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenImageIO/dassert.h @@ -0,0 +1,72 @@ +// Copyright Contributors to the OpenImageIO project. +// SPDX-License-Identifier: Apache-2.0 +// https://github.com/AcademySoftwareFoundation/OpenImageIO + + +#pragma once + +#include +#include +#include + +#include + + +/// OIIO_ABORT_IF_DEBUG is a call to abort() for debug builds, but does +/// nothing for release builds. +#ifndef NDEBUG +# define OIIO_ABORT_IF_DEBUG abort() +#else +# define OIIO_ABORT_IF_DEBUG (void)0 +#endif + + +/// OIIO_ASSERT(condition) checks if the condition is met, and if not, +/// prints an error message indicating the module and line where the error +/// occurred, and additionally aborts if in debug mode. When in release +/// mode, it prints the error message if the condition fails, but does not +/// abort. +/// +/// OIIO_ASSERT_MSG(condition,msg,...) lets you add formatted output (a la +/// printf) to the failure message. +#define OIIO_ASSERT(x) \ + (OIIO_LIKELY(x) \ + ? ((void)0) \ + : (std::fprintf(stderr, "%s:%u: %s: Assertion '%s' failed.\n", \ + __FILE__, __LINE__, OIIO_PRETTY_FUNCTION, #x), \ + OIIO_ABORT_IF_DEBUG)) +#define OIIO_ASSERT_MSG(x, msg, ...) \ + (OIIO_LIKELY(x) \ + ? ((void)0) \ + : (std::fprintf(stderr, "%s:%u: %s: Assertion '%s' failed: " msg "\n", \ + __FILE__, __LINE__, OIIO_PRETTY_FUNCTION, #x, \ + __VA_ARGS__), \ + OIIO_ABORT_IF_DEBUG)) + + +/// OIIO_DASSERT and OIIO_DASSERT_MSG are the same as OIIO_ASSERT for debug +/// builds (test, print error, abort), but do nothing at all in release +/// builds (not even perform the test). This is similar to C/C++ assert(), +/// but gives us flexibility in improving our error messages. It is also ok +/// to use regular assert() for this purpose if you need to eliminate the +/// dependency on this header from a particular place (and don't mind that +/// assert won't format identically on all platforms). +#ifndef NDEBUG +# define OIIO_DASSERT OIIO_ASSERT +# define OIIO_DASSERT_MSG OIIO_ASSERT_MSG +#else +# define OIIO_DASSERT(x) ((void)sizeof(x)) /*NOLINT*/ +# define OIIO_DASSERT_MSG(x, ...) ((void)sizeof(x)) /*NOLINT*/ +#endif + + +/// Define OIIO_STATIC_ASSERT(cond) as a wrapper around static_assert(cond), +/// with appropriate fallbacks for older C++ standards. +#if (__cplusplus >= 201700L) /* FIXME - guess the token, fix when C++17 */ +# define OIIO_STATIC_ASSERT(cond) static_assert(cond) +#else +# define OIIO_STATIC_ASSERT(cond) static_assert(cond, "") +#endif + +/// Deprecated synonym: +#define OIIO_STATIC_ASSERT_MSG(cond, msg) static_assert(cond, msg) diff --git a/third_party/tlRender-install-Release/include/OpenImageIO/deepdata.h b/third_party/tlRender-install-Release/include/OpenImageIO/deepdata.h new file mode 100644 index 00000000..deec7beb --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenImageIO/deepdata.h @@ -0,0 +1,207 @@ +// Copyright Contributors to the OpenImageIO project. +// SPDX-License-Identifier: Apache-2.0 +// https://github.com/AcademySoftwareFoundation/OpenImageIO + + +#pragma once + +#include +#include +#include +#include + +OIIO_NAMESPACE_3_1_BEGIN + + +/// A `DeepData` holds the contents of an image of ``deep'' pixels (multiple +/// depth samples per pixel). + +class OIIO_API DeepData { +public: + /// Construct an empty DeepData. + DeepData(); + + /// Construct and init from an ImageSpec. + DeepData(const ImageSpec& spec); + + /// Copy constructor + DeepData(const DeepData& src); + + /// Copy constructor with change of channel types + DeepData(const DeepData& src, cspan channeltypes); + + /// Move constructor + DeepData(DeepData&& src); + + ~DeepData(); + + /// Copy assignment + const DeepData& operator=(const DeepData& d); + + /// Reset the `DeepData` to be equivalent to its empty initial state. + void clear(); + /// In addition to performing the tasks of `clear()`, also ensure that + /// all allocated memory has been truly freed. + void free(); + + /// Initialize the `DeepData` with the specified number of pixels, + /// channels, channel types, and channel names, and allocate memory for + /// all the data. + void init(int64_t npix, int nchan, cspan channeltypes, + cspan channelnames); + + /// Initialize the `DeepData` based on the `ImageSpec`'s total number of + /// pixels, number and types of channels. At this stage, all pixels are + /// assumed to have 0 samples, and no sample data is allocated. + void init(const ImageSpec& spec); + + /// Is the DeepData initialized? + bool initialized() const; + + /// Has the DeepData fully allocated? If no, it is still very + /// inexpensive to call set_capacity(). + bool allocated() const; + + /// Retrieve the total number of pixels. + int64_t pixels() const; + /// Retrieve the number of channels. + int channels() const; + + // Retrieve the index of the Z channel. + int Z_channel() const; + // Retrieve the index of the Zback channel, which will return the + // Z channel if no Zback exists. + int Zback_channel() const; + // Retrieve the index of the A (alpha) channel. + int A_channel() const; + // Retrieve the index of the AR channel. If it does not exist, the A + // channel (which always exists) will be returned. + int AR_channel() const; + // Retrieve the index of the AG channel. If it does not exist, the A + // channel (which always exists) will be returned. + int AG_channel() const; + // Retrieve the index of the AB channel. If it does not exist, the A + // channel (which always exists) will be returned. + int AB_channel() const; + + /// Return the name of channel c. + string_view channelname(int c) const; + + /// Retrieve the data type of channel `c`. + TypeDesc channeltype(int c) const; + /// Return the size (in bytes) of one sample datum of channel `c`. + size_t channelsize(int c) const; + /// Return the size (in bytes) for all channels of one sample. + size_t samplesize() const; + + /// Does this DeepData have the same channel types as `other`? + bool same_channeltypes(const DeepData& other) const; + + /// Retrieve the number of samples for the given pixel index. + int samples(int64_t pixel) const; + + /// Set the number of samples for the given pixel. This must be called + /// after init(). + void set_samples(int64_t pixel, int samps); + + /// Set the number of samples for all pixels. The samples.size() is + /// required to match pixels(). + void set_all_samples(cspan samples); + + /// Set the capacity of samples for the given pixel. This must be called + /// after init(). + void set_capacity(int64_t pixel, int samps); + + /// Retrieve the capacity (number of allocated samples) for the given + /// pixel index. + int capacity(int64_t pixel) const; + + /// Insert `n` samples of the specified pixel, betinning at the sample + /// position index. After insertion, the new samples will have + /// uninitialized values. + void insert_samples(int64_t pixel, int samplepos, int n = 1); + + /// Erase `n` samples of the specified pixel, betinning at the sample + /// position index. + void erase_samples(int64_t pixel, int samplepos, int n = 1); + + /// Retrieve the value of the given pixel, channel, and sample index, + /// cast to a `float`. + float deep_value(int64_t pixel, int channel, int sample) const; + /// Retrieve the value of the given pixel, channel, and sample index, + /// cast to a `uint32`. + uint32_t deep_value_uint(int64_t pixel, int channel, int sample) const; + + /// Set the value of the given pixel, channel, and sample index, for + /// floating-point channels. + void set_deep_value(int64_t pixel, int channel, int sample, float value); + + /// Set the value of the given pixel, channel, and sample index, for + /// integer channels. + void set_deep_value(int64_t pixel, int channel, int sample, uint32_t value); + + /// Retrieve the pointer to a given pixel/channel/sample, or NULL if + /// there are no samples for that pixel. Use with care, and note that + /// calls to insert_samples and erase_samples can invalidate pointers + /// returned by prior calls to data_ptr. + void* data_ptr(int64_t pixel, int channel, int sample); + const void* data_ptr(int64_t pixel, int channel, int sample) const; + + cspan all_channeltypes() const; + cspan all_samples() const; + cspan all_data() const; + + /// Fill in the vector with pointers to the start of the first + /// channel for each pixel. + void get_pointers(std::vector& pointers) const; + + /// Copy a deep sample from `src` to this `DeepData`. They must have the + /// same channel layout. Return `true` if ok, `false` if the operation + /// could not be performed. + bool copy_deep_sample(int64_t pixel, int sample, const DeepData& src, + int64_t srcpixel, int srcsample); + + /// Copy an entire deep pixel from `src` to this `DeepData`, completely + /// replacing any pixel data for that pixel. They must have the same + /// channel layout. Return `true` if ok, `false` if the operation could + /// not be performed. + bool copy_deep_pixel(int64_t pixel, const DeepData& src, int64_t srcpixel); + + /// Split all samples of that pixel at the given depth zsplit. Samples + /// that span z (i.e. z < zsplit < zback) will be split into two samples + /// with depth ranges [z,zsplit] and [zsplit,zback] with appropriate + /// changes to their color and alpha values. Samples not spanning zsplit + /// will remain intact. This operation will have no effect if there are + /// not Z and Zback channels present. Return true if any splits + /// occurred, false if the pixel was not modified. + bool split(int64_t pixel, float depth); + + /// Sort the samples of the pixel by their `Z` depth. + void sort(int64_t pixel); + + /// Merge any adjacent samples in the pixel that exactly overlap in z + /// range. This is only useful if the pixel has previously been split at + /// all sample starts and ends, and sorted by Z. Note that this may + /// change the number of samples in the pixel. + void merge_overlaps(int64_t pixel); + + /// Merge the samples of `src`'s pixel into this `DeepData`'s pixel. + /// Return `true` if ok, `false` if the operation could not be + /// performed. + void merge_deep_pixels(int64_t pixel, const DeepData& src, int srcpixel); + + /// Return the z depth at which the pixel reaches full opacity. + float opaque_z(int64_t pixel) const; + + /// Remove any samples hidden behind opaque samples. + void occlusion_cull(int64_t pixel); + +private: + class Impl; + Impl* m_impl = nullptr; // holds all the nontrivial stuff + int64_t m_npixels = 0; + int m_nchannels = 0; +}; + + +OIIO_NAMESPACE_3_1_END diff --git a/third_party/tlRender-install-Release/include/OpenImageIO/detail/farmhash.h b/third_party/tlRender-install-Release/include/OpenImageIO/detail/farmhash.h new file mode 100644 index 00000000..ba8baa4f --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenImageIO/detail/farmhash.h @@ -0,0 +1,2192 @@ +// Copyright (c) 2014 Google, Inc. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// +// FarmHash, by Geoff Pike + +// Additional modifications for OpenImageIO: +// Copyright Contributors to the OpenImageIO project. +// SPDX-License-Identifier: Apache-2.0 +// https://github.com/AcademySoftwareFoundation/OpenImageIO + +// clang-format off + +// https://github.com/google/farmhash + +#pragma once + +#include + +#define NAMESPACE_FOR_HASH_FUNCTIONS OIIO::farmhash + +#ifdef _MSC_VER +// Disable pointless windows warning +#pragma warning( disable : 4319 ) +#endif + + +// FARMHASH ASSUMPTIONS: Modify as needed, or use -DFARMHASH_ASSUME_SSE42 etc. +// Note that if you use -DFARMHASH_ASSUME_SSE42 you likely need -msse42 +// (or its equivalent for your compiler); if you use -DFARMHASH_ASSUME_AESNI +// you likely need -maes (or its equivalent for your compiler). + +#ifdef FARMHASH_ASSUME_SSSE3 +#undef FARMHASH_ASSUME_SSSE3 +#define FARMHASH_ASSUME_SSSE3 1 +#endif + +#ifdef FARMHASH_ASSUME_SSE41 +#undef FARMHASH_ASSUME_SSE41 +#define FARMHASH_ASSUME_SSE41 1 +#endif + +#ifdef FARMHASH_ASSUME_SSE42 +#undef FARMHASH_ASSUME_SSE42 +#define FARMHASH_ASSUME_SSE42 1 +#endif + +#ifdef FARMHASH_ASSUME_AESNI +#undef FARMHASH_ASSUME_AESNI +#define FARMHASH_ASSUME_AESNI 1 +#endif + +#ifdef FARMHASH_ASSUME_AVX +#undef FARMHASH_ASSUME_AVX +#define FARMHASH_ASSUME_AVX 1 +#endif + +#if !defined(FARMHASH_CAN_USE_CXX11) && defined(LANG_CXX11) +#define FARMHASH_CAN_USE_CXX11 1 +#else +#undef FARMHASH_CAN_USE_CXX11 +#define FARMHASH_CAN_USE_CXX11 0 +#endif + +// FARMHASH PORTABILITY LAYER: "static inline" or similar + +// Make static inline 'const expr, if possible. Also, try to make CUDA friendly +// for device code. +#undef STATIC_INLINE +#define HASH_CAN_USE_CONSTEXPR 1 +#define STATIC_INLINE OIIO_HOSTDEVICE inline constexpr + +// FARMHASH PORTABILITY LAYER: Runtime error if misconfigured + +#ifndef FARMHASH_DIE_IF_MISCONFIGURED +#define FARMHASH_DIE_IF_MISCONFIGURED +#endif + +// FARMHASH PORTABILITY LAYER: endianness and byteswapping functions + +#ifdef WORDS_BIGENDIAN +#undef FARMHASH_BIG_ENDIAN +#define FARMHASH_BIG_ENDIAN 1 +#endif + +#if defined(FARMHASH_LITTLE_ENDIAN) && defined(FARMHASH_BIG_ENDIAN) +#error +#endif + +#if !defined(FARMHASH_LITTLE_ENDIAN) && !defined(FARMHASH_BIG_ENDIAN) +#define FARMHASH_UNKNOWN_ENDIAN 1 +#endif + +#if !defined(bswap_32) || !defined(bswap_64) +#undef bswap_32 +#undef bswap_64 + +#if defined(HAVE_BUILTIN_BSWAP) || defined(__clang__) || \ + (defined(__GNUC__) && ((__GNUC__ == 4 && __GNUC_MINOR__ >= 8) || \ + __GNUC__ >= 5)) +// Easy case for bswap: no header file needed. +#define bswap_32(x) __builtin_bswap32(x) +#define bswap_64(x) __builtin_bswap64(x) +#endif + +#endif + +#if defined(FARMHASH_UNKNOWN_ENDIAN) || !defined(bswap_64) + +#ifdef _WIN32 + +#undef bswap_32 +#undef bswap_64 +#define bswap_32(x) _byteswap_ulong(x) +#define bswap_64(x) _byteswap_uint64(x) + +#elif defined(__APPLE__) + +// Mac OS X / Darwin features +#include +#undef bswap_32 +#undef bswap_64 +#define bswap_32(x) OSSwapInt32(x) +#define bswap_64(x) OSSwapInt64(x) + +#elif defined(__sun) || defined(sun) + +#include +#undef bswap_32 +#undef bswap_64 +#define bswap_32(x) BSWAP_32(x) +#define bswap_64(x) BSWAP_64(x) + +#elif defined(__FreeBSD__) + +#include +#undef bswap_32 +#undef bswap_64 +#define bswap_32(x) bswap32(x) +#define bswap_64(x) bswap64(x) + +#elif defined(__OpenBSD__) + +#include +#undef bswap_32 +#undef bswap_64 +#define bswap_32(x) swap32(x) +#define bswap_64(x) swap64(x) + +#elif defined(__NetBSD__) + +#include +#include +#if defined(__BSWAP_RENAME) && !defined(__bswap_32) +#undef bswap_32 +#undef bswap_64 +#define bswap_32(x) bswap32(x) +#define bswap_64(x) bswap64(x) +#endif + +#else + +#undef bswap_32 +#undef bswap_64 +#include + +#endif + +#ifdef WORDS_BIGENDIAN +#define FARMHASH_BIG_ENDIAN 1 +#endif + +#endif + + +#ifdef FARMHASH_BIG_ENDIAN +#define uint32_in_expected_order(x) (bswap_32(x)) +#define uint64_in_expected_order(x) (bswap_64(x)) +#else +#define uint32_in_expected_order(x) (x) +#define uint64_in_expected_order(x) (x) +#endif + +#if !defined(FARMHASH_UINT128_T_DEFINED) +#define uint128_t OIIO::farmhash::uint128_t +#endif + +// Simple GPU-friendly swap function +template +STATIC_INLINE void simpleSwap(T &a, T &b) { + T c = a; + a = b; + b = c; +} + +#define Uint128 OIIO::farmhash::Uint128 +#define CopyUint128 OIIO::farmhash::CopyUint128 +#define Uint128Low64 OIIO::farmhash::Uint128Low64 +#define Uint128High64 OIIO::farmhash::Uint128High64 +#define Hash128to64 OIIO::farmhash::Hash128to64 + +// namespace NAMESPACE_FOR_HASH_FUNCTIONS { +OIIO_NAMESPACE_3_1_BEGIN + +namespace farmhash { +namespace inlined { + + +#if !defined(HASH_CAN_USE_CONSTEXPR) || HASH_CAN_USE_CONSTEXPR == 0 + +STATIC_INLINE uint64_t Fetch64(const char *p) { + uint64_t result = 0; + memcpy(&result, p, sizeof(result)); + return uint64_in_expected_order(result); +} + +STATIC_INLINE uint32_t Fetch32(const char *p) { + uint32_t result; + memcpy(&result, p, sizeof(result)); + return uint32_in_expected_order(result); +} + +#else + +#if defined(__cpp_lib_bit_cast) && __cpp_lib_bit_cast >= 201806L +// C++20 compiler with constexpr support std::bitcast +STATIC_INLINE uint64_t Fetch64(const char *p) { + struct BlockOfBytes { + char bytes[8]; + }; + BlockOfBytes bob{p[0],p[1],p[2],p[3],p[4],p[5],p[6],p[7]}; + return std::bit_cast(bob); +} +STATIC_INLINE uint32_t Fetch32(const char *p) { + struct BlockOfBytes { + char bytes[4]; + }; + BlockOfBytes bob{p[0],p[1],p[2],p[3]}; + return std::bit_cast(bob); +} + +#else + +// constexpr supported for C++14,17 versions that manually load bytes and +// bitshift into proper order for the unsigned integer. +// NOTE: bigendian untested +STATIC_INLINE uint64_t Fetch64(const char *p) { + // Favor letting uint8_t construction to handle + // signed to unsigned conversion vs. uint64_t(p[0]&0xff) + uint8_t b0 = p[0]; + uint8_t b1 = p[1]; + uint8_t b2 = p[2]; + uint8_t b3 = p[3]; + uint8_t b4 = p[4]; + uint8_t b5 = p[5]; + uint8_t b6 = p[6]; + uint8_t b7 = p[7]; + return littleendian() ? + (uint64_t(b0)) | // LSB + (uint64_t(b1) << 8) | + (uint64_t(b2) << 16) | + (uint64_t(b3) << 24) | + (uint64_t(b4) << 32) | + (uint64_t(b5) << 40) | + (uint64_t(b6) << 48) | + (uint64_t(b7) << 56) // MSB + : // Big Endian byte order + (uint64_t(b0) << 56) | // MSB + (uint64_t(b1) << 48) | + (uint64_t(b2) << 40) | + (uint64_t(b3) << 32) | + (uint64_t(b4) << 24) | + (uint64_t(b5) << 16) | + (uint64_t(b6) << 8) | + (uint64_t(b7)) ; // LSB +} + +STATIC_INLINE uint32_t Fetch32(const char *p) { + uint8_t b0 = p[0]; + uint8_t b1 = p[1]; + uint8_t b2 = p[2]; + uint8_t b3 = p[3]; + return littleendian() ? + (uint32_t(b0)) | // LSB + (uint32_t(b1) << 8) | + (uint32_t(b2) << 16) | + (uint32_t(b3) << 24) // MSB + : // Big Endian byte order + (uint32_t(b0) << 24) | // MSB + (uint32_t(b1) << 16) | + (uint32_t(b2) << 8) | + (uint32_t(b3)); // LSB +} +#endif + + +// devices don't seem to have bswap_64() or bswap_32() +template +STATIC_INLINE T bswap(T v) { + const int S = sizeof(T); + T result = 0; + + const T mask = 0xff; + for (int i = 0; i < S/2; i++) { + int hi = 8 * (7 - i); + int lo = 8 * i; + int shift = 8 * (S - (2*i + 1)); + T lo_mask = mask << lo; + T hi_mask = mask << hi; + T new_lo = (v & hi_mask) >> shift; + T new_hi = (v & lo_mask) << shift; + result |= (new_lo | new_hi); + } + return result; +} +#undef bswap_32 +#undef bswap_64 + +#define bswap_32(x) bswap(x) +#define bswap_64(x) bswap(x) + +#endif + +STATIC_INLINE uint32_t Bswap32(uint32_t val) { return bswap_32(val); } +STATIC_INLINE uint64_t Bswap64(uint64_t val) { return bswap_64(val); } + +// FARMHASH PORTABILITY LAYER: bitwise rot + +STATIC_INLINE uint32_t BasicRotate32(uint32_t val, int shift) { + // Avoid shifting by 32: doing so yields an undefined result. + return shift == 0 ? val : ((val >> shift) | (val << (32 - shift))); +} + +STATIC_INLINE uint64_t BasicRotate64(uint64_t val, int shift) { + // Avoid shifting by 64: doing so yields an undefined result. + return shift == 0 ? val : ((val >> shift) | (val << (64 - shift))); +} + +#if defined(_MSC_VER) && defined(FARMHASH_ROTR) + +STATIC_INLINE uint32_t Rotate32(uint32_t val, int shift) { + return sizeof(unsigned long) == sizeof(val) ? + _lrotr(val, shift) : + BasicRotate32(val, shift); +} + +STATIC_INLINE uint64_t Rotate64(uint64_t val, int shift) { + return sizeof(unsigned long) == sizeof(val) ? + _lrotr(val, shift) : + BasicRotate64(val, shift); +} + +#else + +STATIC_INLINE uint32_t Rotate32(uint32_t val, int shift) { + return BasicRotate32(val, shift); +} +STATIC_INLINE uint64_t Rotate64(uint64_t val, int shift) { + return BasicRotate64(val, shift); +} + +#endif + +// } // namespace NAMESPACE_FOR_HASH_FUNCTIONS +} /*end namespace inlined */ +} /*end namespace farmhash*/ +OIIO_NAMESPACE_3_1_END + +// FARMHASH PORTABILITY LAYER: debug mode or max speed? +// One may use -DFARMHASH_DEBUG=1 or -DFARMHASH_DEBUG=0 to force the issue. + +#define FARMHASH_DEBUG 0 /*OIIO addition to ensure no debug vs opt differences*/ + +#if !defined(FARMHASH_DEBUG) && (!defined(NDEBUG) || defined(_DEBUG)) +#define FARMHASH_DEBUG 1 +#endif + +#undef debug_mode +#if FARMHASH_DEBUG +#define debug_mode 1 +#else +#define debug_mode 0 +#endif + +// PLATFORM-SPECIFIC FUNCTIONS AND MACROS + +#undef x86_64 +#if defined (__x86_64) || defined (__x86_64__) +#define x86_64 1 +#else +#define x86_64 0 +#endif + +#undef x86 +#if defined(__i386__) || defined(__i386) || defined(__X86__) +#define x86 1 +#else +#define x86 x86_64 +#endif + +#if !defined(is_64bit) +#define is_64bit (x86_64 || (sizeof(void*) == 8)) +#endif + +#undef can_use_ssse3 +#if defined(__SSSE3__) || defined(FARMHASH_ASSUME_SSSE3) + +#include +#define can_use_ssse3 1 +// Now we can use _mm_hsub_epi16 and so on. + +#else +#define can_use_ssse3 0 +#endif + +#undef can_use_sse41 +#if defined(__SSE4_1__) || defined(FARMHASH_ASSUME_SSE41) + +#include +#define can_use_sse41 1 +// Now we can use _mm_insert_epi64 and so on. + +#else +#define can_use_sse41 0 +#endif + +#undef can_use_sse42 +#if defined(__SSE4_2__) || defined(FARMHASH_ASSUME_SSE42) + +#include +#define can_use_sse42 1 +// Now we can use _mm_crc32_u{32,16,8}. And on 64-bit platforms, _mm_crc32_u64. + +#else +#define can_use_sse42 0 +#endif + +#undef can_use_aesni +#if defined(__AES__) || defined(FARMHASH_ASSUME_AESNI) + +#include +#define can_use_aesni 1 +// Now we can use _mm_aesimc_si128 and so on. + +#else +#define can_use_aesni 0 +#endif + +#undef can_use_avx +#if defined(__AVX__) || defined(FARMHASH_ASSUME_AVX) + +#include +#define can_use_avx 1 + +#else +#define can_use_avx 0 +#endif + +// clang seems to define __x86_64 flags etc. even if you're compiling for gpu-device +#ifdef __CUDA_ARCH__ +# undef _x86_64 +# define _x86_64 0 +# undef x86 +# define x86 x86_64 +#endif + +// skip non-constexpr code-path +#ifdef HASH_CAN_USE_CONSTEXPR +# undef can_use_ssse3 +# define can_use_ssse3 0 +# undef can_use_sse41 +# define can_use_sse41 0 +# undef can_use_sse42 +# define can_use_sse42 0 +# undef can_use_aesni +# define can_use_aesni 0 +# undef can_use_avx +# define can_use_avx 0 +#endif + + +// Building blocks for hash functions + +// std::swap() was in but is in from C++11 on. +#if !FARMHASH_CAN_USE_CXX11 +#include +#endif + +#undef PERMUTE3 +#define PERMUTE3(a, b, c) do { simpleSwap(a, b); simpleSwap(a, c); } while (0) + + +// namespace NAMESPACE_FOR_HASH_FUNCTIONS { +OIIO_NAMESPACE_3_1_BEGIN +//using namespace OIIO::farmhash; + namespace farmhash { + namespace inlined { + +#ifndef __CUDA_ARCH__ +#if can_use_ssse3 || can_use_sse41 || can_use_sse42 || can_use_aesni || can_use_avx +STATIC_INLINE __m128i Fetch128(const char* s) { + return _mm_loadu_si128(reinterpret_cast(s)); +} +#endif +#endif + +// Some primes between 2^63 and 2^64 for various uses. +static const uint64_t k0 = 0xc3a5c85c97cb3127ULL; +static const uint64_t k1 = 0xb492b66fbe98f273ULL; +static const uint64_t k2 = 0x9ae16a3b2f90404fULL; + +// Magic numbers for 32-bit hashing. Copied from Murmur3. +static const uint32_t c1 = 0xcc9e2d51; +static const uint32_t c2 = 0x1b873593; + +// A 32-bit to 32-bit integer hash copied from Murmur3. +STATIC_INLINE uint32_t fmix(uint32_t h) +{ + h ^= h >> 16; + h *= 0x85ebca6b; + h ^= h >> 13; + h *= 0xc2b2ae35; + h ^= h >> 16; + return h; +} + +STATIC_INLINE uint32_t Mur(uint32_t a, uint32_t h) { + // Helper from Murmur3 for combining two 32-bit values. + a *= inlined::c1; + a = Rotate32(a, 17); + a *= inlined::c2; + h ^= a; + h = Rotate32(h, 19); + return h * 5 + 0xe6546b64; +} + +template STATIC_INLINE T DebugTweak(T x) { + if (debug_mode) { + if (sizeof(x) == 4) { + x = ~Bswap32(x * inlined::c1); + } else { + x = ~Bswap64(x * inlined::k1); + } + } + return x; +} + +template <> STATIC_INLINE uint128_t DebugTweak(uint128_t x) { + if (debug_mode) { + uint64_t y = DebugTweak(Uint128Low64(x)); + uint64_t z = DebugTweak(Uint128High64(x)); + y += z; + z += y; + CopyUint128(x, Uint128(y, z * inlined::k1)); + } + return x; +} + +// } // namespace NAMESPACE_FOR_HASH_FUNCTIONS +} /*end namespace inlined*/ + +using namespace std; +// using namespace NAMESPACE_FOR_HASH_FUNCTIONS; +namespace farmhashna { +#undef Fetch +#define Fetch farmhash::inlined::Fetch64 + +#undef Rotate +#define Rotate farmhash::inlined::Rotate64 + +#undef Bswap +#define Bswap farmhash::inlined::Bswap64 + +STATIC_INLINE uint64_t ShiftMix(uint64_t val) { + return val ^ (val >> 47); +} + +STATIC_INLINE uint64_t HashLen16(uint64_t u, uint64_t v) { + return Hash128to64(Uint128(u, v)); +} + +STATIC_INLINE uint64_t HashLen16(uint64_t u, uint64_t v, uint64_t mul) { + // Murmur-inspired hashing. + uint64_t a = (u ^ v) * mul; + a ^= (a >> 47); + uint64_t b = (v ^ a) * mul; + b ^= (b >> 47); + b *= mul; + return b; +} + +STATIC_INLINE uint64_t HashLen0to16(const char *s, size_t len) { + if (len >= 8) { + uint64_t mul = inlined::k2 + len * 2; + uint64_t a = Fetch(s) + inlined::k2; + uint64_t b = Fetch(s + len - 8); + uint64_t c = Rotate(b, 37) * mul + a; + uint64_t d = (Rotate(a, 25) + b) * mul; + return HashLen16(c, d, mul); + } + if (len >= 4) { + uint64_t mul = inlined::k2 + len * 2; + uint64_t a = inlined::Fetch32(s); + return HashLen16(len + (a << 3), inlined::Fetch32(s + len - 4), mul); + } + if (len > 0) { + uint8_t a = s[0]; + uint8_t b = s[len >> 1]; + uint8_t c = s[len - 1]; + uint32_t y = static_cast(a) + (static_cast(b) << 8); + uint32_t z = len + (static_cast(c) << 2); + return ShiftMix(y * inlined::k2 ^ z * inlined::k0) * inlined::k2; + } + return inlined::k2; +} + +// This probably works well for 16-byte strings as well, but it may be overkill +// in that case. +STATIC_INLINE uint64_t HashLen17to32(const char *s, size_t len) { + uint64_t mul = inlined::k2 + len * 2; + uint64_t a = Fetch(s) * inlined::k1; + uint64_t b = Fetch(s + 8); + uint64_t c = Fetch(s + len - 8) * mul; + uint64_t d = Fetch(s + len - 16) * inlined::k2; + return HashLen16(Rotate(a + b, 43) + Rotate(c, 30) + d, + a + Rotate(b + inlined::k2, 18) + c, mul); +} + +// Return a 16-byte hash for 48 bytes. Quick and dirty. +// Callers do best to use "random-looking" values for a and b. +STATIC_INLINE pair WeakHashLen32WithSeeds( + uint64_t w, uint64_t x, uint64_t y, uint64_t z, uint64_t a, uint64_t b) { + a += w; + b = Rotate(b + a + z, 21); + uint64_t c = a; + a += x; + a += y; + b += Rotate(a, 44); + return make_pair(a + z, b + c); +} + +// Return a 16-byte hash for s[0] ... s[31], a, and b. Quick and dirty. +STATIC_INLINE pair WeakHashLen32WithSeeds( + const char* s, uint64_t a, uint64_t b) { + return WeakHashLen32WithSeeds(Fetch(s), + Fetch(s + 8), + Fetch(s + 16), + Fetch(s + 24), + a, + b); +} + +// Return an 8-byte hash for 33 to 64 bytes. +STATIC_INLINE uint64_t HashLen33to64(const char *s, size_t len) { + uint64_t mul = inlined::k2 + len * 2; + uint64_t a = Fetch(s) * inlined::k2; + uint64_t b = Fetch(s + 8); + uint64_t c = Fetch(s + len - 8) * mul; + uint64_t d = Fetch(s + len - 16) * inlined::k2; + uint64_t y = Rotate(a + b, 43) + Rotate(c, 30) + d; + uint64_t z = HashLen16(y, a + Rotate(b + inlined::k2, 18) + c, mul); + uint64_t e = Fetch(s + 16) * mul; + uint64_t f = Fetch(s + 24); + uint64_t g = (y + Fetch(s + len - 32)) * mul; + uint64_t h = (z + Fetch(s + len - 24)) * mul; + return HashLen16(Rotate(e + f, 43) + Rotate(g, 30) + h, + e + Rotate(f + a, 18) + g, mul); +} + +STATIC_INLINE uint64_t Hash64(const char *s, size_t len) { + const uint64_t seed = 81; + if (len <= 32) { + if (len <= 16) { + return HashLen0to16(s, len); + } else { + return HashLen17to32(s, len); + } + } else if (len <= 64) { + return HashLen33to64(s, len); + } + + // For strings over 64 bytes we loop. Internal state consists of + // 56 bytes: v, w, x, y, and z. + uint64_t x = seed; + uint64_t y = seed * inlined::k1 + 113; + uint64_t z = ShiftMix(y * inlined::k2 + 113) * inlined::k2; + pair v = make_pair(0, 0); + pair w = make_pair(0, 0); + x = x * inlined::k2 + Fetch(s); + + // Set end so that after the loop we have 1 to 64 bytes left to process. + const char* end = s + ((len - 1) / 64) * 64; + const char* last64 = end + ((len - 1) & 63) - 63; + assert(s + len - 64 == last64); + do { + x = Rotate(x + y + v.first + Fetch(s + 8), 37) * inlined::k1; + y = Rotate(y + v.second + Fetch(s + 48), 42) * inlined::k1; + x ^= w.second; + y += v.first + Fetch(s + 40); + z = Rotate(z + w.first, 33) * inlined::k1; + CopyUint128(v, WeakHashLen32WithSeeds(s, v.second * inlined::k1, x + w.first)); + CopyUint128(w, WeakHashLen32WithSeeds(s + 32, z + w.second, y + Fetch(s + 16))); + simpleSwap(z, x); + s += 64; + } while (s != end); + uint64_t mul = inlined::k1 + ((z & 0xff) << 1); + // Make s point to the last 64 bytes of input. + s = last64; + w.first += ((len - 1) & 63); + v.first += w.first; + w.first += v.first; + x = Rotate(x + y + v.first + Fetch(s + 8), 37) * mul; + y = Rotate(y + v.second + Fetch(s + 48), 42) * mul; + x ^= w.second * 9; + y += v.first * 9 + Fetch(s + 40); + z = Rotate(z + w.first, 33) * mul; + CopyUint128(v, WeakHashLen32WithSeeds(s, v.second * mul, x + w.first)); + CopyUint128(w, WeakHashLen32WithSeeds(s + 32, z + w.second, y + Fetch(s + 16))); + simpleSwap(z, x); + return HashLen16(HashLen16(v.first, w.first, mul) + ShiftMix(y) * inlined::k0 + z, + HashLen16(v.second, w.second, mul) + x, + mul); +} + +STATIC_INLINE uint64_t Hash64WithSeeds(const char *s, size_t len, uint64_t seed0, uint64_t seed1) { + return HashLen16(Hash64(s, len) - seed0, seed1); +} + +STATIC_INLINE uint64_t Hash64WithSeed(const char *s, size_t len, uint64_t seed) { + return Hash64WithSeeds(s, len, inlined::k2, seed); +} + +} // namespace farmhashna +namespace farmhashuo { +#undef Fetch +#define Fetch inlined::Fetch64 + +#undef Rotate +#define Rotate inlined::Rotate64 + +STATIC_INLINE uint64_t H(uint64_t x, uint64_t y, uint64_t mul, int r) { + uint64_t a = (x ^ y) * mul; + a ^= (a >> 47); + uint64_t b = (y ^ a) * mul; + return Rotate(b, r) * mul; +} + +STATIC_INLINE uint64_t Hash64WithSeeds(const char *s, size_t len, + uint64_t seed0, uint64_t seed1) { + if (len <= 64) { + return farmhashna::Hash64WithSeeds(s, len, seed0, seed1); + } + + // For strings over 64 bytes we loop. Internal state consists of + // 64 bytes: u, v, w, x, y, and z. + uint64_t x = seed0; + uint64_t y = seed1 * inlined::k2 + 113; + uint64_t z = farmhashna::ShiftMix(y * inlined::k2) * inlined::k2; + pair v = make_pair(seed0, seed1); + pair w = make_pair(0, 0); + uint64_t u = x - z; + x *= inlined::k2; + uint64_t mul = inlined::k2 + (u & 0x82); + + // Set end so that after the loop we have 1 to 64 bytes left to process. + const char* end = s + ((len - 1) / 64) * 64; + const char* last64 = end + ((len - 1) & 63) - 63; + assert(s + len - 64 == last64); + do { + uint64_t a0 = Fetch(s); + uint64_t a1 = Fetch(s + 8); + uint64_t a2 = Fetch(s + 16); + uint64_t a3 = Fetch(s + 24); + uint64_t a4 = Fetch(s + 32); + uint64_t a5 = Fetch(s + 40); + uint64_t a6 = Fetch(s + 48); + uint64_t a7 = Fetch(s + 56); + x += a0 + a1; + y += a2; + z += a3; + v.first += a4; + v.second += a5 + a1; + w.first += a6; + w.second += a7; + + x = Rotate(x, 26); + x *= 9; + y = Rotate(y, 29); + z *= mul; + v.first = Rotate(v.first, 33); + v.second = Rotate(v.second, 30); + w.first ^= x; + w.first *= 9; + z = Rotate(z, 32); + z += w.second; + w.second += z; + z *= 9; + simpleSwap(u, y); + + z += a0 + a6; + v.first += a2; + v.second += a3; + w.first += a4; + w.second += a5 + a6; + x += a1; + y += a7; + + y += v.first; + v.first += x - y; + v.second += w.first; + w.first += v.second; + w.second += x - y; + x += w.second; + w.second = Rotate(w.second, 34); + simpleSwap(u, z); + s += 64; + } while (s != end); + // Make s point to the last 64 bytes of input. + s = last64; + u *= 9; + v.second = Rotate(v.second, 28); + v.first = Rotate(v.first, 20); + w.first += ((len - 1) & 63); + u += y; + y += u; + x = Rotate(y - x + v.first + Fetch(s + 8), 37) * mul; + y = Rotate(y ^ v.second ^ Fetch(s + 48), 42) * mul; + x ^= w.second * 9; + y += v.first + Fetch(s + 40); + z = Rotate(z + w.first, 33) * mul; + CopyUint128(v, farmhashna::WeakHashLen32WithSeeds(s, v.second * mul, x + w.first)); + CopyUint128(w, farmhashna::WeakHashLen32WithSeeds(s + 32, z + w.second, y + Fetch(s + 16))); + return H(farmhashna::HashLen16(v.first + x, w.first ^ y, mul) + z - u, + H(v.second + y, w.second + z, inlined::k2, 30) ^ x, + inlined::k2, + 31); +} + +STATIC_INLINE uint64_t Hash64WithSeed(const char *s, size_t len, uint64_t seed) { + return len <= 64 ? farmhashna::Hash64WithSeed(s, len, seed) : + Hash64WithSeeds(s, len, 0, seed); +} + +STATIC_INLINE uint64_t Hash64(const char *s, size_t len) { + return len <= 64 ? farmhashna::Hash64(s, len) : + Hash64WithSeeds(s, len, 81, 0); +} +} // namespace farmhashuo +namespace farmhashxo { +#undef Fetch +#define Fetch inlined::Fetch64 + +#undef Rotate +#define Rotate inlined::Rotate64 + +STATIC_INLINE uint64_t H32(const char *s, size_t len, uint64_t mul, + uint64_t seed0 = 0, uint64_t seed1 = 0) { + uint64_t a = Fetch(s) * inlined::k1; + uint64_t b = Fetch(s + 8); + uint64_t c = Fetch(s + len - 8) * mul; + uint64_t d = Fetch(s + len - 16) * inlined::k2; + uint64_t u = Rotate(a + b, 43) + Rotate(c, 30) + d + seed0; + uint64_t v = a + Rotate(b + inlined::k2, 18) + c + seed1; + a = farmhashna::ShiftMix((u ^ v) * mul); + b = farmhashna::ShiftMix((v ^ a) * mul); + return b; +} + +// Return an 8-byte hash for 33 to 64 bytes. +STATIC_INLINE uint64_t HashLen33to64(const char *s, size_t len) { + uint64_t mul0 = inlined::k2 - 30; + uint64_t mul1 = inlined::k2 - 30 + 2 * len; + uint64_t h0 = H32(s, 32, mul0); + uint64_t h1 = H32(s + len - 32, 32, mul1); + return ((h1 * mul1) + h0) * mul1; +} + +// Return an 8-byte hash for 65 to 96 bytes. +STATIC_INLINE uint64_t HashLen65to96(const char *s, size_t len) { + uint64_t mul0 = inlined::k2 - 114; + uint64_t mul1 = inlined::k2 - 114 + 2 * len; + uint64_t h0 = H32(s, 32, mul0); + uint64_t h1 = H32(s + 32, 32, mul1); + uint64_t h2 = H32(s + len - 32, 32, mul1, h0, h1); + return (h2 * 9 + (h0 >> 17) + (h1 >> 21)) * mul1; +} + +STATIC_INLINE uint64_t Hash64(const char *s, size_t len) { + if (len <= 32) { + if (len <= 16) { + return farmhashna::HashLen0to16(s, len); + } else { + return farmhashna::HashLen17to32(s, len); + } + } else if (len <= 64) { + return HashLen33to64(s, len); + } else if (len <= 96) { + return HashLen65to96(s, len); + } else if (len <= 256) { + return farmhashna::Hash64(s, len); + } else { + return farmhashuo::Hash64(s, len); + } +} + +STATIC_INLINE uint64_t Hash64WithSeeds(const char *s, size_t len, uint64_t seed0, uint64_t seed1) { + return farmhashuo::Hash64WithSeeds(s, len, seed0, seed1); +} + +STATIC_INLINE uint64_t Hash64WithSeed(const char *s, size_t len, uint64_t seed) { + return farmhashuo::Hash64WithSeed(s, len, seed); +} +} // namespace farmhashxo +namespace farmhashte { +#if !can_use_sse41 || !x86_64 + +STATIC_INLINE uint64_t Hash64(const char *s, size_t len) { + FARMHASH_DIE_IF_MISCONFIGURED; + return s == NULL ? 0 : len; +} + +STATIC_INLINE uint64_t Hash64WithSeed(const char *s, size_t len, uint64_t seed) { + FARMHASH_DIE_IF_MISCONFIGURED; + return seed + Hash64(s, len); +} + +STATIC_INLINE uint64_t Hash64WithSeeds(const char *s, size_t len, + uint64_t seed0, uint64_t seed1) { + FARMHASH_DIE_IF_MISCONFIGURED; + return seed0 + seed1 + Hash64(s, len); +} + +#else + +#undef Fetch +#define Fetch inlined::Fetch64 + +#undef Rotate +#define Rotate inlined::Rotate64 + +#undef Bswap +#define Bswap inlined::Bswap64 + +// Helpers for data-parallel operations (1x 128 bits or 2x 64 or 4x 32). +STATIC_INLINE __m128i Add(__m128i x, __m128i y) { return _mm_add_epi64(x, y); } +STATIC_INLINE __m128i Xor(__m128i x, __m128i y) { return _mm_xor_si128(x, y); } +STATIC_INLINE __m128i Mul(__m128i x, __m128i y) { return _mm_mullo_epi32(x, y); } +STATIC_INLINE __m128i Shuf(__m128i x, __m128i y) { return _mm_shuffle_epi8(y, x); } + +// Requires n >= 256. Requires SSE4.1. Should be slightly faster if the +// compiler uses AVX instructions (e.g., use the -mavx flag with GCC). +STATIC_INLINE uint64_t Hash64Long(const char* s, size_t n, + uint64_t seed0, uint64_t seed1) { + const __m128i kShuf = + _mm_set_epi8(4, 11, 10, 5, 8, 15, 6, 9, 12, 2, 14, 13, 0, 7, 3, 1); + const __m128i kMult = + _mm_set_epi8(0xbd, 0xd6, 0x33, 0x39, 0x45, 0x54, 0xfa, 0x03, + 0x34, 0x3e, 0x33, 0xed, 0xcc, 0x9e, 0x2d, 0x51); + uint64_t seed2 = (seed0 + 113) * (seed1 + 9); + uint64_t seed3 = (Rotate(seed0, 23) + 27) * (Rotate(seed1, 30) + 111); + __m128i d0 = _mm_cvtsi64_si128(seed0); + __m128i d1 = _mm_cvtsi64_si128(seed1); + __m128i d2 = Shuf(kShuf, d0); + __m128i d3 = Shuf(kShuf, d1); + __m128i d4 = Xor(d0, d1); + __m128i d5 = Xor(d1, d2); + __m128i d6 = Xor(d2, d4); + __m128i d7 = _mm_set1_epi32(seed2 >> 32); + __m128i d8 = Mul(kMult, d2); + __m128i d9 = _mm_set1_epi32(seed3 >> 32); + __m128i d10 = _mm_set1_epi32(seed3); + __m128i d11 = Add(d2, _mm_set1_epi32(seed2)); + const char* end = s + (n & ~static_cast(255)); + do { + __m128i z; + z = inlined::Fetch128(s); + d0 = Add(d0, z); + d1 = Shuf(kShuf, d1); + d2 = Xor(d2, d0); + d4 = Xor(d4, z); + d4 = Xor(d4, d1); + simpleSwap(d0, d6); + z = inlined::Fetch128(s + 16); + d5 = Add(d5, z); + d6 = Shuf(kShuf, d6); + d8 = Shuf(kShuf, d8); + d7 = Xor(d7, d5); + d0 = Xor(d0, z); + d0 = Xor(d0, d6); + simpleSwap(d5, d11); + z = inlined::Fetch128(s + 32); + d1 = Add(d1, z); + d2 = Shuf(kShuf, d2); + d4 = Shuf(kShuf, d4); + d5 = Xor(d5, z); + d5 = Xor(d5, d2); + simpleSwap(d10, d4); + z = inlined::Fetch128(s + 48); + d6 = Add(d6, z); + d7 = Shuf(kShuf, d7); + d0 = Shuf(kShuf, d0); + d8 = Xor(d8, d6); + d1 = Xor(d1, z); + d1 = Add(d1, d7); + z = inlined::Fetch128(s + 64); + d2 = Add(d2, z); + d5 = Shuf(kShuf, d5); + d4 = Add(d4, d2); + d6 = Xor(d6, z); + d6 = Xor(d6, d11); + simpleSwap(d8, d2); + z = inlined::Fetch128(s + 80); + d7 = Xor(d7, z); + d8 = Shuf(kShuf, d8); + d1 = Shuf(kShuf, d1); + d0 = Add(d0, d7); + d2 = Add(d2, z); + d2 = Add(d2, d8); + simpleSwap(d1, d7); + z = inlined::Fetch128(s + 96); + d4 = Shuf(kShuf, d4); + d6 = Shuf(kShuf, d6); + d8 = Mul(kMult, d8); + d5 = Xor(d5, d11); + d7 = Xor(d7, z); + d7 = Add(d7, d4); + simpleSwap(d6, d0); + z = inlined::Fetch128(s + 112); + d8 = Add(d8, z); + d0 = Shuf(kShuf, d0); + d2 = Shuf(kShuf, d2); + d1 = Xor(d1, d8); + d10 = Xor(d10, z); + d10 = Xor(d10, d0); + simpleSwap(d11, d5); + z = inlined::Fetch128(s + 128); + d4 = Add(d4, z); + d5 = Shuf(kShuf, d5); + d7 = Shuf(kShuf, d7); + d6 = Add(d6, d4); + d8 = Xor(d8, z); + d8 = Xor(d8, d5); + simpleSwap(d4, d10); + z = inlined::Fetch128(s + 144); + d0 = Add(d0, z); + d1 = Shuf(kShuf, d1); + d2 = Add(d2, d0); + d4 = Xor(d4, z); + d4 = Xor(d4, d1); + z = inlined::Fetch128(s + 160); + d5 = Add(d5, z); + d6 = Shuf(kShuf, d6); + d8 = Shuf(kShuf, d8); + d7 = Xor(d7, d5); + d0 = Xor(d0, z); + d0 = Xor(d0, d6); + simpleSwap(d2, d8); + z = inlined::Fetch128(s + 176); + d1 = Add(d1, z); + d2 = Shuf(kShuf, d2); + d4 = Shuf(kShuf, d4); + d5 = Mul(kMult, d5); + d5 = Xor(d5, z); + d5 = Xor(d5, d2); + simpleSwap(d7, d1); + z = inlined::Fetch128(s + 192); + d6 = Add(d6, z); + d7 = Shuf(kShuf, d7); + d0 = Shuf(kShuf, d0); + d8 = Add(d8, d6); + d1 = Xor(d1, z); + d1 = Xor(d1, d7); + simpleSwap(d0, d6); + z = inlined::Fetch128(s + 208); + d2 = Add(d2, z); + d5 = Shuf(kShuf, d5); + d4 = Xor(d4, d2); + d6 = Xor(d6, z); + d6 = Xor(d6, d9); + simpleSwap(d5, d11); + z = inlined::Fetch128(s + 224); + d7 = Add(d7, z); + d8 = Shuf(kShuf, d8); + d1 = Shuf(kShuf, d1); + d0 = Xor(d0, d7); + d2 = Xor(d2, z); + d2 = Xor(d2, d8); + simpleSwap(d10, d4); + z = inlined::Fetch128(s + 240); + d3 = Add(d3, z); + d4 = Shuf(kShuf, d4); + d6 = Shuf(kShuf, d6); + d7 = Mul(kMult, d7); + d5 = Add(d5, d3); + d7 = Xor(d7, z); + d7 = Xor(d7, d4); + simpleSwap(d3, d9); + s += 256; + } while (s != end); + d6 = Add(Mul(kMult, d6), _mm_cvtsi64_si128(n)); + if (n % 256 != 0) { + d7 = Add(_mm_shuffle_epi32(d8, (0 << 6) + (3 << 4) + (2 << 2) + (1 << 0)), d7); + d8 = Add(Mul(kMult, d8), _mm_cvtsi64_si128(farmhashxo::Hash64(s, n % 256))); + } + __m128i t[8]; + d0 = Mul(kMult, Shuf(kShuf, Mul(kMult, d0))); + d3 = Mul(kMult, Shuf(kShuf, Mul(kMult, d3))); + d9 = Mul(kMult, Shuf(kShuf, Mul(kMult, d9))); + d1 = Mul(kMult, Shuf(kShuf, Mul(kMult, d1))); + d0 = Add(d11, d0); + d3 = Xor(d7, d3); + d9 = Add(d8, d9); + d1 = Add(d10, d1); + d4 = Add(d3, d4); + d5 = Add(d9, d5); + d6 = Xor(d1, d6); + d2 = Add(d0, d2); + t[0] = d0; + t[1] = d3; + t[2] = d9; + t[3] = d1; + t[4] = d4; + t[5] = d5; + t[6] = d6; + t[7] = d2; + return farmhashxo::Hash64(reinterpret_cast(t), sizeof(t)); +} + +STATIC_INLINE uint64_t Hash64(const char *s, size_t len) { + // Empirically, farmhashxo seems faster until length 512. + return len >= 512 ? Hash64Long(s, len, inlined::k2, inlined::k1) : farmhashxo::Hash64(s, len); +} + +STATIC_INLINE uint64_t Hash64WithSeed(const char *s, size_t len, uint64_t seed) { + return len >= 512 ? Hash64Long(s, len, inlined::k1, seed) : + farmhashxo::Hash64WithSeed(s, len, seed); +} + +STATIC_INLINE uint64_t Hash64WithSeeds(const char *s, size_t len, uint64_t seed0, uint64_t seed1) { + return len >= 512 ? Hash64Long(s, len, seed0, seed1) : + farmhashxo::Hash64WithSeeds(s, len, seed0, seed1); +} + +#endif +} // namespace farmhashte +namespace farmhashnt { +#if !can_use_sse41 || !x86_64 + +STATIC_INLINE uint32_t Hash32(const char *s, size_t len) { + FARMHASH_DIE_IF_MISCONFIGURED; + return s == NULL ? 0 : len; +} + +STATIC_INLINE uint32_t Hash32WithSeed(const char *s, size_t len, uint32_t seed) { + FARMHASH_DIE_IF_MISCONFIGURED; + return seed + Hash32(s, len); +} + +#else + +STATIC_INLINE uint32_t Hash32(const char *s, size_t len) { + return static_cast(farmhashte::Hash64(s, len)); +} + +STATIC_INLINE uint32_t Hash32WithSeed(const char *s, size_t len, uint32_t seed) { + return static_cast(farmhashte::Hash64WithSeed(s, len, seed)); +} + +#endif +} // namespace farmhashnt +namespace farmhashmk { +#undef Fetch +#define Fetch inlined::Fetch32 + +#undef Rotate +#define Rotate inlined::Rotate32 + +#undef Bswap +#define Bswap inlined::Bswap32 + +#undef fmix +#define fmix farmhash::inlined::fmix + + +STATIC_INLINE uint32_t Hash32Len13to24(const char *s, size_t len, uint32_t seed = 0) { + uint32_t a = Fetch(s - 4 + (len >> 1)); + uint32_t b = Fetch(s + 4); + uint32_t c = Fetch(s + len - 8); + uint32_t d = Fetch(s + (len >> 1)); + uint32_t e = Fetch(s); + uint32_t f = Fetch(s + len - 4); + uint32_t h = d * inlined::c1 + len + seed; + a = Rotate(a, 12) + f; + h = inlined::Mur(c, h) + a; + a = Rotate(a, 3) + c; + h = inlined::Mur(e, h) + a; + a = Rotate(a + f, 12) + d; + h = inlined::Mur(b ^ seed, h) + a; + return fmix(h); +} + +STATIC_INLINE uint32_t Hash32Len0to4(const char *s, size_t len, uint32_t seed = 0) { + uint32_t b = seed; + uint32_t c = 9; + for (size_t i = 0; i < len; i++) { + signed char v = s[i]; + b = b * inlined::c1 + v; + c ^= b; + } + return fmix(inlined::Mur(b, inlined::Mur(len, c))); +} + +STATIC_INLINE uint32_t Hash32Len5to12(const char *s, size_t len, uint32_t seed = 0) { + uint32_t a = len, b = len * 5, c = 9, d = b + seed; + a += Fetch(s); + b += Fetch(s + len - 4); + c += Fetch(s + ((len >> 1) & 4)); + return fmix(seed ^ inlined::Mur(c, inlined::Mur(b, inlined::Mur(a, d)))); +} + +STATIC_INLINE uint32_t Hash32(const char *s, size_t len) { + if (len <= 24) { + return len <= 12 ? + (len <= 4 ? Hash32Len0to4(s, len) : Hash32Len5to12(s, len)) : + Hash32Len13to24(s, len); + } + + // len > 24 + uint32_t h = len, g = inlined::c1 * len, f = g; + uint32_t a0 = Rotate(Fetch(s + len - 4) * inlined::c1, 17) * inlined::c2; + uint32_t a1 = Rotate(Fetch(s + len - 8) * inlined::c1, 17) * inlined::c2; + uint32_t a2 = Rotate(Fetch(s + len - 16) * inlined::c1, 17) * inlined::c2; + uint32_t a3 = Rotate(Fetch(s + len - 12) * inlined::c1, 17) * inlined::c2; + uint32_t a4 = Rotate(Fetch(s + len - 20) * inlined::c1, 17) * inlined::c2; + h ^= a0; + h = Rotate(h, 19); + h = h * 5 + 0xe6546b64; + h ^= a2; + h = Rotate(h, 19); + h = h * 5 + 0xe6546b64; + g ^= a1; + g = Rotate(g, 19); + g = g * 5 + 0xe6546b64; + g ^= a3; + g = Rotate(g, 19); + g = g * 5 + 0xe6546b64; + f += a4; + f = Rotate(f, 19) + 113; + size_t iters = (len - 1) / 20; + do { + uint32_t a = Fetch(s); + uint32_t b = Fetch(s + 4); + uint32_t c = Fetch(s + 8); + uint32_t d = Fetch(s + 12); + uint32_t e = Fetch(s + 16); + h += a; + g += b; + f += c; + h = inlined::Mur(d, h) + e; + g = inlined::Mur(c, g) + a; + f = inlined::Mur(b + e * inlined::c1, f) + d; + f += g; + g += f; + s += 20; + } while (--iters != 0); + g = Rotate(g, 11) * inlined::c1; + g = Rotate(g, 17) * inlined::c1; + f = Rotate(f, 11) * inlined::c1; + f = Rotate(f, 17) * inlined::c1; + h = Rotate(h + g, 19); + h = h * 5 + 0xe6546b64; + h = Rotate(h, 17) * inlined::c1; + h = Rotate(h + f, 19); + h = h * 5 + 0xe6546b64; + h = Rotate(h, 17) * inlined::c1; + return h; +} + +STATIC_INLINE uint32_t Hash32WithSeed(const char *s, size_t len, uint32_t seed) { + if (len <= 24) { + if (len >= 13) return Hash32Len13to24(s, len, seed * inlined::c1); + else if (len >= 5) return Hash32Len5to12(s, len, seed); + else return Hash32Len0to4(s, len, seed); + } + uint32_t h = Hash32Len13to24(s, 24, seed ^ len); + return inlined::Mur(Hash32(s + 24, len - 24) + seed, h); +} +} // namespace farmhashmk +namespace farmhashsu { +#if !can_use_sse42 || !can_use_aesni + +STATIC_INLINE uint32_t Hash32(const char *s, size_t len) { + FARMHASH_DIE_IF_MISCONFIGURED; + return s == NULL ? 0 : len; +} + +STATIC_INLINE uint32_t Hash32WithSeed(const char *s, size_t len, uint32_t seed) { + FARMHASH_DIE_IF_MISCONFIGURED; + return seed + Hash32(s, len); +} + +#else + +#undef Fetch +#define Fetch inlined::Fetch32 + +#undef Rotate +#define Rotate inlined::Rotate32 + +#undef Bswap +#define Bswap inlined::Bswap32 + +// Helpers for data-parallel operations (4x 32-bits). +STATIC_INLINE __m128i Add(__m128i x, __m128i y) { return _mm_add_epi32(x, y); } +STATIC_INLINE __m128i Xor(__m128i x, __m128i y) { return _mm_xor_si128(x, y); } +STATIC_INLINE __m128i Or(__m128i x, __m128i y) { return _mm_or_si128(x, y); } +STATIC_INLINE __m128i Mul(__m128i x, __m128i y) { return _mm_mullo_epi32(x, y); } +STATIC_INLINE __m128i Mul5(__m128i x) { return Add(x, _mm_slli_epi32(x, 2)); } +STATIC_INLINE __m128i RotateLeft(__m128i x, int c) { + return Or(_mm_slli_epi32(x, c), + _mm_srli_epi32(x, 32 - c)); +} +STATIC_INLINE __m128i Rol17(__m128i x) { return RotateLeft(x, 17); } +STATIC_INLINE __m128i Rol19(__m128i x) { return RotateLeft(x, 19); } +STATIC_INLINE __m128i Shuffle0321(__m128i x) { + return _mm_shuffle_epi32(x, (0 << 6) + (3 << 4) + (2 << 2) + (1 << 0)); +} + +STATIC_INLINE uint32_t Hash32(const char *s, size_t len) { + const uint32_t seed = 81; + if (len <= 24) { + return len <= 12 ? + (len <= 4 ? + farmhashmk::Hash32Len0to4(s, len) : + farmhashmk::Hash32Len5to12(s, len)) : + farmhashmk::Hash32Len13to24(s, len); + } + + if (len < 40) { + uint32_t a = len, b = seed * inlined::c2, c = a + b; + a += Fetch(s + len - 4); + b += Fetch(s + len - 20); + c += Fetch(s + len - 16); + uint32_t d = a; + a = inlined::Rotate32(a, 21); + a = inlined::Mur(a, inlined::Mur(b, _mm_crc32_u32(c, d))); + a += Fetch(s + len - 12); + b += Fetch(s + len - 8); + d += a; + a += d; + b = inlined::Mur(b, d) * inlined::c2; + a = _mm_crc32_u32(a, b + c); + return farmhashmk::Hash32Len13to24(s, (len + 1) / 2, a) + b; + } + +#undef Mulc1 +#define Mulc1(x) Mul((x), cc1) + +#undef Mulc2 +#define Mulc2(x) Mul((x), cc2) + +#undef Murk +#define Murk(a, h) \ + Add(k, \ + Mul5( \ + Rol19( \ + Xor( \ + Mulc2( \ + Rol17( \ + Mulc1(a))), \ + (h))))) + + const __m128i cc1 = _mm_set1_epi32(inlined::c1); + const __m128i cc2 = _mm_set1_epi32(inlined::c2); + __m128i h = _mm_set1_epi32(seed); + __m128i g = _mm_set1_epi32(inlined::c1 * seed); + __m128i f = g; + __m128i k = _mm_set1_epi32(0xe6546b64); + __m128i q; + if (len < 80) { + __m128i a = inlined::Fetch128(s); + __m128i b = inlined::Fetch128(s + 16); + __m128i c = inlined::Fetch128(s + (len - 15) / 2); + __m128i d = inlined::Fetch128(s + len - 32); + __m128i e = inlined::Fetch128(s + len - 16); + h = Add(h, a); + g = Add(g, b); + q = g; + g = Shuffle0321(g); + f = Add(f, c); + __m128i be = Add(b, Mulc1(e)); + h = Add(h, f); + f = Add(f, h); + h = Add(Murk(d, h), e); + k = Xor(k, _mm_shuffle_epi8(g, f)); + g = Add(Xor(c, g), a); + f = Add(Xor(be, f), d); + k = Add(k, be); + k = Add(k, _mm_shuffle_epi8(f, h)); + f = Add(f, g); + g = Add(g, f); + g = Add(_mm_set1_epi32(len), Mulc1(g)); + } else { + // len >= 80 + // The following is loosely modelled after farmhashmk::Hash32. + size_t iters = (len - 1) / 80; + len -= iters * 80; + +#undef Chunk +#define Chunk() do { \ + __m128i a = inlined::Fetch128(s); \ + __m128i b = inlined::Fetch128(s + 16); \ + __m128i c = inlined::Fetch128(s + 32); \ + __m128i d = inlined::Fetch128(s + 48); \ + __m128i e = inlined::Fetch128(s + 64); \ + h = Add(h, a); \ + g = Add(g, b); \ + g = Shuffle0321(g); \ + f = Add(f, c); \ + __m128i be = Add(b, Mulc1(e)); \ + h = Add(h, f); \ + f = Add(f, h); \ + h = Add(h, d); \ + q = Add(q, e); \ + h = Rol17(h); \ + h = Mulc1(h); \ + k = Xor(k, _mm_shuffle_epi8(g, f)); \ + g = Add(Xor(c, g), a); \ + f = Add(Xor(be, f), d); \ + simpleSwap(f, q); \ + q = _mm_aesimc_si128(q); \ + k = Add(k, be); \ + k = Add(k, _mm_shuffle_epi8(f, h)); \ + f = Add(f, g); \ + g = Add(g, f); \ + f = Mulc1(f); \ +} while (0) + + q = g; + while (iters-- != 0) { + Chunk(); + s += 80; + } + + if (len != 0) { + h = Add(h, _mm_set1_epi32(len)); + s = s + len - 80; + Chunk(); + } + } + + g = Shuffle0321(g); + k = Xor(k, g); + k = Xor(k, q); + h = Xor(h, q); + f = Mulc1(f); + k = Mulc2(k); + g = Mulc1(g); + h = Mulc2(h); + k = Add(k, _mm_shuffle_epi8(g, f)); + h = Add(h, f); + f = Add(f, h); + g = Add(g, k); + k = Add(k, g); + k = Xor(k, _mm_shuffle_epi8(f, h)); + __m128i buf[4]; + buf[0] = f; + buf[1] = g; + buf[2] = k; + buf[3] = h; + s = reinterpret_cast(buf); + uint32_t x = Fetch(s); + uint32_t y = Fetch(s+4); + uint32_t z = Fetch(s+8); + x = _mm_crc32_u32(x, Fetch(s+12)); + y = _mm_crc32_u32(y, Fetch(s+16)); + z = _mm_crc32_u32(z * inlined::c1, Fetch(s+20)); + x = _mm_crc32_u32(x, Fetch(s+24)); + y = _mm_crc32_u32(y * inlined::c1, Fetch(s+28)); + uint32_t o = y; + z = _mm_crc32_u32(z, Fetch(s+32)); + x = _mm_crc32_u32(x * inlined::c1, Fetch(s+36)); + y = _mm_crc32_u32(y, Fetch(s+40)); + z = _mm_crc32_u32(z * inlined::c1, Fetch(s+44)); + x = _mm_crc32_u32(x, Fetch(s+48)); + y = _mm_crc32_u32(y * inlined::c1, Fetch(s+52)); + z = _mm_crc32_u32(z, Fetch(s+56)); + x = _mm_crc32_u32(x, Fetch(s+60)); + return (o - x + y - z) * inlined::c1; +} + +#undef Chunk +#undef Murk +#undef Mulc2 +#undef Mulc1 + +STATIC_INLINE uint32_t Hash32WithSeed(const char *s, size_t len, uint32_t seed) { + if (len <= 24) { + if (len >= 13) return farmhashmk::Hash32Len13to24(s, len, seed * inlined::c1); + else if (len >= 5) return farmhashmk::Hash32Len5to12(s, len, seed); + else return farmhashmk::Hash32Len0to4(s, len, seed); + } + uint32_t h = farmhashmk::Hash32Len13to24(s, 24, seed ^ len); + return _mm_crc32_u32(Hash32(s + 24, len - 24) + seed, h); +} + +#endif +} // namespace farmhashsu +namespace farmhashsa { +#if !can_use_sse42 + +STATIC_INLINE uint32_t Hash32(const char *s, size_t len) { + FARMHASH_DIE_IF_MISCONFIGURED; + return s == NULL ? 0 : len; +} + +STATIC_INLINE uint32_t Hash32WithSeed(const char *s, size_t len, uint32_t seed) { + FARMHASH_DIE_IF_MISCONFIGURED; + return seed + Hash32(s, len); +} + +#else + +#undef Fetch +#define Fetch inlined::Fetch32 + +#undef Rotate +#define Rotate inlined::Rotate32 + +#undef Bswap +#define Bswap inlined::Bswap32 + +// Helpers for data-parallel operations (4x 32-bits). +STATIC_INLINE __m128i Add(__m128i x, __m128i y) { return _mm_add_epi32(x, y); } +STATIC_INLINE __m128i Xor(__m128i x, __m128i y) { return _mm_xor_si128(x, y); } +STATIC_INLINE __m128i Or(__m128i x, __m128i y) { return _mm_or_si128(x, y); } +STATIC_INLINE __m128i Mul(__m128i x, __m128i y) { return _mm_mullo_epi32(x, y); } +STATIC_INLINE __m128i Mul5(__m128i x) { return Add(x, _mm_slli_epi32(x, 2)); } +STATIC_INLINE __m128i Rotatesse(__m128i x, int c) { + return Or(_mm_slli_epi32(x, c), + _mm_srli_epi32(x, 32 - c)); +} +STATIC_INLINE __m128i Rot17(__m128i x) { return Rotatesse(x, 17); } +STATIC_INLINE __m128i Rot19(__m128i x) { return Rotatesse(x, 19); } +STATIC_INLINE __m128i Shuffle0321(__m128i x) { + return _mm_shuffle_epi32(x, (0 << 6) + (3 << 4) + (2 << 2) + (1 << 0)); +} + +STATIC_INLINE uint32_t Hash32(const char *s, size_t len) { + const uint32_t seed = 81; + if (len <= 24) { + return len <= 12 ? + (len <= 4 ? + farmhashmk::Hash32Len0to4(s, len) : + farmhashmk::Hash32Len5to12(s, len)) : + farmhashmk::Hash32Len13to24(s, len); + } + + if (len < 40) { + uint32_t a = len, b = seed * inlined::c2, c = a + b; + a += Fetch(s + len - 4); + b += Fetch(s + len - 20); + c += Fetch(s + len - 16); + uint32_t d = a; + a = inlined::Rotate32(a, 21); + a = inlined::Mur(a, inlined::Mur(b, inlined::Mur(c, d))); + a += Fetch(s + len - 12); + b += Fetch(s + len - 8); + d += a; + a += d; + b = inlined::Mur(b, d) * inlined::c2; + a = _mm_crc32_u32(a, b + c); + return farmhashmk::Hash32Len13to24(s, (len + 1) / 2, a) + b; + } + +#undef Mulc1 +#define Mulc1(x) Mul((x), cc1) + +#undef Mulc2 +#define Mulc2(x) Mul((x), cc2) + +#undef Murk +#define Murk(a, h) \ + Add(k, \ + Mul5( \ + Rot19( \ + Xor( \ + Mulc2( \ + Rot17( \ + Mulc1(a))), \ + (h))))) + + const __m128i cc1 = _mm_set1_epi32(inlined::c1); + const __m128i cc2 = _mm_set1_epi32(inlined::c2); + __m128i h = _mm_set1_epi32(seed); + __m128i g = _mm_set1_epi32(inlined::c1 * seed); + __m128i f = g; + __m128i k = _mm_set1_epi32(0xe6546b64); + if (len < 80) { + __m128i a = inlined::Fetch128(s); + __m128i b = inlined::Fetch128(s + 16); + __m128i c = inlined::Fetch128(s + (len - 15) / 2); + __m128i d = inlined::Fetch128(s + len - 32); + __m128i e = inlined::Fetch128(s + len - 16); + h = Add(h, a); + g = Add(g, b); + g = Shuffle0321(g); + f = Add(f, c); + __m128i be = Add(b, Mulc1(e)); + h = Add(h, f); + f = Add(f, h); + h = Add(Murk(d, h), e); + k = Xor(k, _mm_shuffle_epi8(g, f)); + g = Add(Xor(c, g), a); + f = Add(Xor(be, f), d); + k = Add(k, be); + k = Add(k, _mm_shuffle_epi8(f, h)); + f = Add(f, g); + g = Add(g, f); + g = Add(_mm_set1_epi32(len), Mulc1(g)); + } else { + // len >= 80 + // The following is loosely modelled after farmhashmk::Hash32. + size_t iters = (len - 1) / 80; + len -= iters * 80; + +#undef Chunk +#define Chunk() do { \ + __m128i a = inlined::Fetch128(s); \ + __m128i b = inlined::Fetch128(s + 16); \ + __m128i c = inlined::Fetch128(s + 32); \ + __m128i d = inlined::Fetch128(s + 48); \ + __m128i e = inlined::Fetch128(s + 64); \ + h = Add(h, a); \ + g = Add(g, b); \ + g = Shuffle0321(g); \ + f = Add(f, c); \ + __m128i be = Add(b, Mulc1(e)); \ + h = Add(h, f); \ + f = Add(f, h); \ + h = Add(Murk(d, h), e); \ + k = Xor(k, _mm_shuffle_epi8(g, f)); \ + g = Add(Xor(c, g), a); \ + f = Add(Xor(be, f), d); \ + k = Add(k, be); \ + k = Add(k, _mm_shuffle_epi8(f, h)); \ + f = Add(f, g); \ + g = Add(g, f); \ + f = Mulc1(f); \ +} while (0) + + while (iters-- != 0) { + Chunk(); + s += 80; + } + + if (len != 0) { + h = Add(h, _mm_set1_epi32(len)); + s = s + len - 80; + Chunk(); + } + } + + g = Shuffle0321(g); + k = Xor(k, g); + f = Mulc1(f); + k = Mulc2(k); + g = Mulc1(g); + h = Mulc2(h); + k = Add(k, _mm_shuffle_epi8(g, f)); + h = Add(h, f); + f = Add(f, h); + g = Add(g, k); + k = Add(k, g); + k = Xor(k, _mm_shuffle_epi8(f, h)); + __m128i buf[4]; + buf[0] = f; + buf[1] = g; + buf[2] = k; + buf[3] = h; + s = reinterpret_cast(buf); + uint32_t x = Fetch(s); + uint32_t y = Fetch(s+4); + uint32_t z = Fetch(s+8); + x = _mm_crc32_u32(x, Fetch(s+12)); + y = _mm_crc32_u32(y, Fetch(s+16)); + z = _mm_crc32_u32(z * inlined::c1, Fetch(s+20)); + x = _mm_crc32_u32(x, Fetch(s+24)); + y = _mm_crc32_u32(y * inlined::c1, Fetch(s+28)); + uint32_t o = y; + z = _mm_crc32_u32(z, Fetch(s+32)); + x = _mm_crc32_u32(x * inlined::c1, Fetch(s+36)); + y = _mm_crc32_u32(y, Fetch(s+40)); + z = _mm_crc32_u32(z * inlined::c1, Fetch(s+44)); + x = _mm_crc32_u32(x, Fetch(s+48)); + y = _mm_crc32_u32(y * inlined::c1, Fetch(s+52)); + z = _mm_crc32_u32(z, Fetch(s+56)); + x = _mm_crc32_u32(x, Fetch(s+60)); + return (o - x + y - z) * inlined::c1; +} + +#undef Chunk +#undef Murk +#undef Mulc2 +#undef Mulc1 + +STATIC_INLINE uint32_t Hash32WithSeed(const char *s, size_t len, uint32_t seed) { + if (len <= 24) { + if (len >= 13) return farmhashmk::Hash32Len13to24(s, len, seed * inlined::c1); + else if (len >= 5) return farmhashmk::Hash32Len5to12(s, len, seed); + else return farmhashmk::Hash32Len0to4(s, len, seed); + } + uint32_t h = farmhashmk::Hash32Len13to24(s, 24, seed ^ len); + return _mm_crc32_u32(Hash32(s + 24, len - 24) + seed, h); +} + +#endif +} // namespace farmhashsa +namespace farmhashcc { +// This file provides a 32-bit hash equivalent to CityHash32 (v1.1.1) +// and a 128-bit hash equivalent to CityHash128 (v1.1.1). It also provides +// a seeded 32-bit hash function similar to CityHash32. + +#undef Fetch +#define Fetch inlined::Fetch32 + +#undef Rotate +#define Rotate inlined::Rotate32 + +#undef Bswap +#define Bswap inlined::Bswap32 + +#undef fmix +#define fmix farmhash::inlined::fmix + +STATIC_INLINE uint32_t Hash32Len13to24(const char *s, size_t len) { + uint32_t a = Fetch(s - 4 + (len >> 1)); + uint32_t b = Fetch(s + 4); + uint32_t c = Fetch(s + len - 8); + uint32_t d = Fetch(s + (len >> 1)); + uint32_t e = Fetch(s); + uint32_t f = Fetch(s + len - 4); + uint32_t h = len; + + return fmix(inlined::Mur(f, inlined::Mur(e, inlined::Mur(d, inlined::Mur(c, inlined::Mur(b, inlined::Mur(a, h))))))); +} + +STATIC_INLINE uint32_t Hash32Len0to4(const char *s, size_t len) { + uint32_t b = 0; + uint32_t c = 9; + for (size_t i = 0; i < len; i++) { + signed char v = s[i]; + b = b * inlined::c1 + v; + c ^= b; + } + return fmix(inlined::Mur(b, inlined::Mur(len, c))); +} + +STATIC_INLINE uint32_t Hash32Len5to12(const char *s, size_t len) { + uint32_t a = len, b = len * 5, c = 9, d = b; + a += Fetch(s); + b += Fetch(s + len - 4); + c += Fetch(s + ((len >> 1) & 4)); + return fmix(inlined::Mur(c, inlined::Mur(b, inlined::Mur(a, d)))); +} + +STATIC_INLINE uint32_t Hash32(const char *s, size_t len) { + if (len <= 24) { + return len <= 12 ? + (len <= 4 ? Hash32Len0to4(s, len) : Hash32Len5to12(s, len)) : + Hash32Len13to24(s, len); + } + + // len > 24 + uint32_t h = len, g = inlined::c1 * len, f = g; + uint32_t a0 = Rotate(Fetch(s + len - 4) * inlined::c1, 17) * inlined::c2; + uint32_t a1 = Rotate(Fetch(s + len - 8) * inlined::c1, 17) * inlined::c2; + uint32_t a2 = Rotate(Fetch(s + len - 16) * inlined::c1, 17) * inlined::c2; + uint32_t a3 = Rotate(Fetch(s + len - 12) * inlined::c1, 17) * inlined::c2; + uint32_t a4 = Rotate(Fetch(s + len - 20) * inlined::c1, 17) * inlined::c2; + h ^= a0; + h = Rotate(h, 19); + h = h * 5 + 0xe6546b64; + h ^= a2; + h = Rotate(h, 19); + h = h * 5 + 0xe6546b64; + g ^= a1; + g = Rotate(g, 19); + g = g * 5 + 0xe6546b64; + g ^= a3; + g = Rotate(g, 19); + g = g * 5 + 0xe6546b64; + f += a4; + f = Rotate(f, 19); + f = f * 5 + 0xe6546b64; + size_t iters = (len - 1) / 20; + do { + uint32_t a0 = Rotate(Fetch(s) * inlined::c1, 17) * inlined::c2; + uint32_t a1 = Fetch(s + 4); + uint32_t a2 = Rotate(Fetch(s + 8) * inlined::c1, 17) * inlined::c2; + uint32_t a3 = Rotate(Fetch(s + 12) * inlined::c1, 17) * inlined::c2; + uint32_t a4 = Fetch(s + 16); + h ^= a0; + h = Rotate(h, 18); + h = h * 5 + 0xe6546b64; + f += a1; + f = Rotate(f, 19); + f = f * inlined::c1; + g += a2; + g = Rotate(g, 18); + g = g * 5 + 0xe6546b64; + h ^= a3 + a1; + h = Rotate(h, 19); + h = h * 5 + 0xe6546b64; + g ^= a4; + g = Bswap(g) * 5; + h += a4 * 5; + h = Bswap(h); + f += a0; + PERMUTE3(f, h, g); + s += 20; + } while (--iters != 0); + g = Rotate(g, 11) * inlined::c1; + g = Rotate(g, 17) * inlined::c1; + f = Rotate(f, 11) * inlined::c1; + f = Rotate(f, 17) * inlined::c1; + h = Rotate(h + g, 19); + h = h * 5 + 0xe6546b64; + h = Rotate(h, 17) * inlined::c1; + h = Rotate(h + f, 19); + h = h * 5 + 0xe6546b64; + h = Rotate(h, 17) * inlined::c1; + return h; +} + +STATIC_INLINE uint32_t Hash32WithSeed(const char *s, size_t len, uint32_t seed) { + if (len <= 24) { + if (len >= 13) return farmhashmk::Hash32Len13to24(s, len, seed * inlined::c1); + else if (len >= 5) return farmhashmk::Hash32Len5to12(s, len, seed); + else return farmhashmk::Hash32Len0to4(s, len, seed); + } + uint32_t h = farmhashmk::Hash32Len13to24(s, 24, seed ^ len); + return inlined::Mur(Hash32(s + 24, len - 24) + seed, h); +} + +#undef Fetch +#define Fetch farmhash::inlined::Fetch64 + +#undef Rotate +#define Rotate inlined::Rotate64 + +#undef Bswap +#define Bswap inlined::Bswap64 + +#undef DebugTweak +#define DebugTweak farmhash::inlined::DebugTweak + +STATIC_INLINE uint64_t ShiftMix(uint64_t val) { + return val ^ (val >> 47); +} + +STATIC_INLINE uint64_t HashLen16(uint64_t u, uint64_t v) { + return Hash128to64(Uint128(u, v)); +} + +STATIC_INLINE uint64_t HashLen16(uint64_t u, uint64_t v, uint64_t mul) { + // Murmur-inspired hashing. + uint64_t a = (u ^ v) * mul; + a ^= (a >> 47); + uint64_t b = (v ^ a) * mul; + b ^= (b >> 47); + b *= mul; + return b; +} + +STATIC_INLINE uint64_t HashLen0to16(const char *s, size_t len) { + if (len >= 8) { + uint64_t mul = inlined::k2 + len * 2; + uint64_t a = Fetch(s) + inlined::k2; + uint64_t b = Fetch(s + len - 8); + uint64_t c = Rotate(b, 37) * mul + a; + uint64_t d = (Rotate(a, 25) + b) * mul; + return HashLen16(c, d, mul); + } + if (len >= 4) { + uint64_t mul = inlined::k2 + len * 2; + uint64_t a = inlined::Fetch32(s); + return HashLen16(len + (a << 3), inlined::Fetch32(s + len - 4), mul); + } + if (len > 0) { + uint8_t a = s[0]; + uint8_t b = s[len >> 1]; + uint8_t c = s[len - 1]; + uint32_t y = static_cast(a) + (static_cast(b) << 8); + uint32_t z = len + (static_cast(c) << 2); + return ShiftMix(y * inlined::k2 ^ z * inlined::k0) * inlined::k2; + } + return inlined::k2; +} + +// Return a 16-byte hash for 48 bytes. Quick and dirty. +// Callers do best to use "random-looking" values for a and b. +STATIC_INLINE pair WeakHashLen32WithSeeds( + uint64_t w, uint64_t x, uint64_t y, uint64_t z, uint64_t a, uint64_t b) { + a += w; + b = Rotate(b + a + z, 21); + uint64_t c = a; + a += x; + a += y; + b += Rotate(a, 44); + return make_pair(a + z, b + c); +} + +// Return a 16-byte hash for s[0] ... s[31], a, and b. Quick and dirty. +STATIC_INLINE pair WeakHashLen32WithSeeds( + const char* s, uint64_t a, uint64_t b) { + return WeakHashLen32WithSeeds(Fetch(s), + Fetch(s + 8), + Fetch(s + 16), + Fetch(s + 24), + a, + b); +} + + + +// A subroutine for CityHash128(). Returns a decent 128-bit hash for strings +// of any length representable in signed long. Based on City and Murmur. +STATIC_INLINE uint128_t CityMurmur(const char *s, size_t len, uint128_t seed) { + uint64_t a = Uint128Low64(seed); + uint64_t b = Uint128High64(seed); + uint64_t c = 0; + uint64_t d = 0; + signed long l = len - 16; + if (l <= 0) { // len <= 16 + a = ShiftMix(a * inlined::k1) * inlined::k1; + c = b * inlined::k1 + HashLen0to16(s, len); + d = ShiftMix(a + (len >= 8 ? Fetch(s) : c)); + } else { // len > 16 + c = HashLen16(Fetch(s + len - 8) + inlined::k1, a); + d = HashLen16(b + len, c + Fetch(s + len - 16)); + a += d; + do { + a ^= ShiftMix(Fetch(s) * inlined::k1) * inlined::k1; + a *= inlined::k1; + b ^= a; + c ^= ShiftMix(Fetch(s + 8) * inlined::k1) * inlined::k1; + c *= inlined::k1; + d ^= c; + s += 16; + l -= 16; + } while (l > 0); + } + a = HashLen16(a, c); + b = HashLen16(d, b); + return uint128_t(a ^ b, HashLen16(b, a)); +} + +STATIC_INLINE uint128_t CityHash128WithSeed(const char *s, size_t len, uint128_t seed) { + if (len < 128) { + return CityMurmur(s, len, seed); + } + + // We expect len >= 128 to be the common case. Keep 56 bytes of state: + // v, w, x, y, and z. + pair v, w; + uint64_t x = Uint128Low64(seed); + uint64_t y = Uint128High64(seed); + uint64_t z = len * inlined::k1; + v.first = Rotate(y ^ inlined::k1, 49) * inlined::k1 + Fetch(s); + v.second = Rotate(v.first, 42) * inlined::k1 + Fetch(s + 8); + w.first = Rotate(y + z, 35) * inlined::k1 + x; + w.second = Rotate(x + Fetch(s + 88), 53) * inlined::k1; + + // This is the same inner loop as CityHash64(), manually unrolled. + do { + x = Rotate(x + y + v.first + Fetch(s + 8), 37) * inlined::k1; + y = Rotate(y + v.second + Fetch(s + 48), 42) * inlined::k1; + x ^= w.second; + y += v.first + Fetch(s + 40); + z = Rotate(z + w.first, 33) * inlined::k1; + CopyUint128(v, WeakHashLen32WithSeeds(s, v.second * inlined::k1, x + w.first)); + CopyUint128(w, WeakHashLen32WithSeeds(s + 32, z + w.second, y + Fetch(s + 16))); + simpleSwap(z, x); + s += 64; + x = Rotate(x + y + v.first + Fetch(s + 8), 37) * inlined::k1; + y = Rotate(y + v.second + Fetch(s + 48), 42) * inlined::k1; + x ^= w.second; + y += v.first + Fetch(s + 40); + z = Rotate(z + w.first, 33) * inlined::k1; + CopyUint128(v, WeakHashLen32WithSeeds(s, v.second * inlined::k1, x + w.first)); + CopyUint128(w, WeakHashLen32WithSeeds(s + 32, z + w.second, y + Fetch(s + 16))); + simpleSwap(z, x); + s += 64; + len -= 128; + } while (OIIO_LIKELY(len >= 128)); + x += Rotate(v.first + z, 49) * inlined::k0; + y = y * inlined::k0 + Rotate(w.second, 37); + z = z * inlined::k0 + Rotate(w.first, 27); + w.first *= 9; + v.first *= inlined::k0; + // If 0 < len < 128, hash up to 4 chunks of 32 bytes each from the end of s. + for (size_t tail_done = 0; tail_done < len; ) { + tail_done += 32; + y = Rotate(x + y, 42) * inlined::k0 + v.second; + w.first += Fetch(s + len - tail_done + 16); + x = x * inlined::k0 + w.first; + z += w.second + Fetch(s + len - tail_done); + w.second += v.first; + CopyUint128(v, WeakHashLen32WithSeeds(s + len - tail_done, v.first + z, v.second)); + v.first *= inlined::k0; + } + // At this point our 56 bytes of state should contain more than + // enough information for a strong 128-bit hash. We use two + // different 56-byte-to-8-byte hashes to get a 16-byte final result. + x = HashLen16(x, v.first); + y = HashLen16(y + z, w.first); + return uint128_t(HashLen16(x + v.second, w.second) + y, + HashLen16(x + w.second, y + v.second)); +} + +STATIC_INLINE uint128_t CityHash128(const char *s, size_t len) { + return len >= 16 ? + CityHash128WithSeed(s + 16, len - 16, + uint128_t(Fetch(s), Fetch(s + 8) + inlined::k0)) : + CityHash128WithSeed(s, len, uint128_t(inlined::k0, inlined::k1)); +} + +uint128_t STATIC_INLINE Fingerprint128(const char* s, size_t len) { + return CityHash128(s, len); +} +} // namespace farmhashcc + + +// namespace NAMESPACE_FOR_HASH_FUNCTIONS { +namespace inlined { + + +// BASIC STRING HASHING + +// Hash function for a byte array. See also Hash(), below. +// May change from time to time, may differ on different platforms, may differ +// depending on NDEBUG. +STATIC_INLINE uint32_t Hash32(const char* s, size_t len) { + return DebugTweak( + (can_use_sse41 & x86_64) ? farmhashnt::Hash32(s, len) : + (can_use_sse42 & can_use_aesni) ? farmhashsu::Hash32(s, len) : + can_use_sse42 ? farmhashsa::Hash32(s, len) : + farmhashmk::Hash32(s, len)); +} + +// Hash function for a byte array. For convenience, a 32-bit seed is also +// hashed into the result. +// May change from time to time, may differ on different platforms, may differ +// depending on NDEBUG. +STATIC_INLINE uint32_t Hash32WithSeed(const char* s, size_t len, uint32_t seed) { + return DebugTweak( + (can_use_sse41 & x86_64) ? farmhashnt::Hash32WithSeed(s, len, seed) : + (can_use_sse42 & can_use_aesni) ? farmhashsu::Hash32WithSeed(s, len, seed) : + can_use_sse42 ? farmhashsa::Hash32WithSeed(s, len, seed) : + farmhashmk::Hash32WithSeed(s, len, seed)); +} + +// Hash function for a byte array. For convenience, a 64-bit seed is also +// hashed into the result. See also Hash(), below. +// May change from time to time, may differ on different platforms, may differ +// depending on NDEBUG. +STATIC_INLINE uint64_t Hash64(const char* s, size_t len) { + return DebugTweak( + (can_use_sse42 & x86_64) ? + farmhashte::Hash64(s, len) : + farmhashxo::Hash64(s, len)); +} + +// Hash function for a byte array. +// May change from time to time, may differ on different platforms, may differ +// depending on NDEBUG. +STATIC_INLINE size_t Hash(const char* s, size_t len) { + return sizeof(size_t) == 8 ? size_t(Hash64(s, len)) : size_t(Hash32(s, len)); +} + +// Hash function for a byte array. For convenience, a 64-bit seed is also +// hashed into the result. +// May change from time to time, may differ on different platforms, may differ +// depending on NDEBUG. +STATIC_INLINE uint64_t Hash64WithSeed(const char* s, size_t len, uint64_t seed) { + return DebugTweak(farmhashna::Hash64WithSeed(s, len, seed)); +} + +// Hash function for a byte array. For convenience, two seeds are also +// hashed into the result. +// May change from time to time, may differ on different platforms, may differ +// depending on NDEBUG. +STATIC_INLINE uint64_t Hash64WithSeeds(const char* s, size_t len, uint64_t seed0, uint64_t seed1) { + return DebugTweak(farmhashna::Hash64WithSeeds(s, len, seed0, seed1)); +} + +// Hash function for a byte array. +// May change from time to time, may differ on different platforms, may differ +// depending on NDEBUG. +STATIC_INLINE uint128_t Hash128(const char* s, size_t len) { + return DebugTweak(farmhashcc::Fingerprint128(s, len)); +} + +// Hash function for a byte array. For convenience, a 128-bit seed is also +// hashed into the result. +// May change from time to time, may differ on different platforms, may differ +// depending on NDEBUG. +STATIC_INLINE uint128_t Hash128WithSeed(const char* s, size_t len, uint128_t seed) { + return DebugTweak(farmhashcc::CityHash128WithSeed(s, len, seed)); +} + +// BASIC NON-STRING HASHING + +// FINGERPRINTING (i.e., good, portable, forever-fixed hash functions) + +// Fingerprint function for a byte array. Most useful in 32-bit binaries. +STATIC_INLINE uint32_t Fingerprint32(const char* s, size_t len) { + return farmhashmk::Hash32(s, len); +} + +// Fingerprint function for a byte array. +STATIC_INLINE uint64_t Fingerprint64(const char* s, size_t len) { + return farmhashna::Hash64(s, len); +} + +// Fingerprint function for a byte array. +STATIC_INLINE uint128_t Fingerprint128(const char* s, size_t len) { + return farmhashcc::Fingerprint128(s, len); +} + +// Older and still available but perhaps not as fast as the above: +// farmhashns::Hash32{,WithSeed}() + +} /*end namespace inlined*/ +// } // namespace NAMESPACE_FOR_HASH_FUNCTIONS +} /*end namespace farmhash*/ + +// Undefine any of the poorly namespaced things +#undef Fetch +#undef Rotate +#undef Bswap +#undef fmix +#undef DebugTweak +#undef uint128_t +#undef Uint128 +#undef CopyUint128 +#undef Uint128Low64 +#undef Uint128High64 +#undef Hash128to64 +#undef Hash64WithSeeds +#undef x86 +#undef x86_64 +#undef is_64bit +#undef can_use_ssse3 +#undef can_use_sse41 +#undef can_use_sse42 +#undef can_use_aesni +#undef can_use_avx +#undef bswap_32 +#undef bswap_64 +#undef STATIC_INLINE +#undef uint32_in_expected_order +#undef uint64_in_expected_order +#undef debug_mode +#undef PERMUTE3 +#undef Mulc1 +#undef Mulc2 +#undef Murk +#undef Chunk + +#undef STATIC_INLINE + +OIIO_NAMESPACE_3_1_END + + diff --git a/third_party/tlRender-install-Release/include/OpenImageIO/detail/fmt.h b/third_party/tlRender-install-Release/include/OpenImageIO/detail/fmt.h new file mode 100644 index 00000000..a0b63c80 --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenImageIO/detail/fmt.h @@ -0,0 +1,200 @@ +// Copyright Contributors to the OpenImageIO project. +// SPDX-License-Identifier: Apache-2.0 +// https://github.com/AcademySoftwareFoundation/OpenImageIO + +#pragma once +#define OIIO_FMT_H + +#include +#include +#include + +// We want the header-only implementation of fmt +#ifndef FMT_HEADER_ONLY +# define FMT_HEADER_ONLY +#endif + +// Disable fmt exceptions +#ifndef FMT_EXCEPTIONS +# define FMT_EXCEPTIONS 0 +#endif + +#if OIIO_VERSION_LESS(3, 1, 2) +/* DEPRECATED -- remove at next ABI compatibility boundary */ +OIIO_NAMESPACE_3_1_BEGIN +namespace pvt { +OIIO_UTIL_API void +log_fmt_error(const char* message); +}; +OIIO_NAMESPACE_3_1_END +#endif + +// Use the grisu fast floating point formatting for old fmt versions +// (irrelevant for >= 7.1). +#ifndef FMT_USE_GRISU +# define FMT_USE_GRISU 1 +#endif + +// fmt 8.1 stopped automatically enabling formatting of anything that supports +// ostream output. This breaks a lot! Re-enable this old behavior. +// NOTE: fmt 10.0 removed this support entirely. +#ifndef FMT_DEPRECATED_OSTREAM +# define FMT_DEPRECATED_OSTREAM 1 +#endif + +// fmt 9 started using the __float128 type, which is not supported by the +// nvptx backend for llvm, so we disable its usage on this target, which +// can be identified by the combination of __CUDA_ARCH__ and __clang__ +#if defined(__CUDA_ARCH__) && defined(__clang__) && !defined(FMT_USE_FLOAT128) +# define FMT_USE_FLOAT128 0 +#endif + +// Suppress certain warnings generated in the fmt headers themselves +OIIO_PRAGMA_WARNING_PUSH +#if OIIO_GNUC_VERSION >= 70000 +# pragma GCC diagnostic ignored "-Wmaybe-uninitialized" +#endif +#if OIIO_GNUC_VERSION >= 130000 +# pragma GCC diagnostic ignored "-Wdangling-reference" +#endif +#if OIIO_INTEL_LLVM_COMPILER +# pragma GCC diagnostic ignored "-Wtautological-constant-compare" +#endif +#if OIIO_CLANG_VERSION >= 180000 +# pragma clang diagnostic ignored "-Wdeprecated-declarations" +#endif + +#include +#include +#include + +OIIO_PRAGMA_WARNING_POP + +// At some point a method signature changed +#if FMT_VERSION >= 90000 +# define OIIO_FMT_CUSTOM_FORMATTER_CONST const +#else +# define OIIO_FMT_CUSTOM_FORMATTER_CONST +#endif + + +OIIO_NAMESPACE_3_1_BEGIN +namespace pvt { + + +// Custom inheritable parse() method used by fmt formatters. In addition to +// saving the formatting spec, it also checks for a (nonstandard) optional +// leading ',' and records it as a separator flag. +struct format_parser_with_separator { + FMT_CONSTEXPR auto parse(fmt::format_parse_context& ctx) + { + auto beg = ctx.begin(), end = ctx.end(); + if (beg != end && *beg == ',') + sep = *beg++; + auto it = beg; // where's the close brace? + for (; it != end && *it != '}'; ++it) + ; + elem_fmt = fmt::string_view(beg, it - beg); + return it; + } + +protected: + fmt::string_view elem_fmt; + char sep = 0; +}; + + + +// fmtlib custom formatter that formats a type `T` that has array-like +// semantics (must have a valid operator[] and size() method) by printing each +// element according to the format spec. For example, if the object has 3 +// float elements and the spec is "{:.3f}", then the output might be "1.234 +// 2.345 3.456". +// +// In addition to the usual formatting spec, we also recognize the following +// special extension: If the first character of the format spec is ',' +// (comma), then the array elements will be separated by ", " rather than the +// default " ". +// +// For example, `format("[{:,.3f}]")` will format the array as `[1.234, 2.345, +// 3.456]`. +// +// Now then, the way this class is helpful is to inherit from it for a custom +// formatter. For example, this will make this formatter be used for +// Imath::V3f: +// +// // in global namespace: +// template<> struct fmt::formatter +// : OIIO::array_formatter {}; +// +template::value&& has_size_method::value)> +struct index_formatter : format_parser_with_separator { + // inherits parse() from format_parser_with_separator + template + auto format(const T& v, FormatContext& ctx) OIIO_FMT_CUSTOM_FORMATTER_CONST + { + std::string vspec = elem_fmt.size() ? fmt::format("{{:{}}}", elem_fmt) + : std::string("{}"); + for (size_t i = 0; i < size_t(v.size()); ++i) { + if (i) + fmt::format_to(ctx.out(), "{}", sep == ',' ? ", " : " "); +#if FMT_VERSION >= 80000 + fmt::format_to(ctx.out(), fmt::runtime(vspec), v[i]); +#else + fmt::format_to(ctx.out(), vspec, v[i]); +#endif + } + return ctx.out(); + } +}; + + + +// fmtlib custom formatter that formats a type `T` as if it were an array +// `Elem[Size]` (and it must be laid out that way in memory). The formatting +// spec will apply to each element. For example, if the object has 3 float +// elements and the spec is "{:.3f}", then the output might be "1.234 2.345 +// 3.456". +// +// In addition to the usual formatting spec, we also recognize the following +// special extension: If the first character of the format spec is ',' +// (comma), then the array elements will be separated by ", " rather than the +// default " ". +// +// For example, `format("[{:,.3f}]")` will format the array as `[1.234, 2.345, +// 3.456]`. +// +// Now then, the way this class is helpful is to inherit from it for a custom +// formatter. For example, this will make this formatter be used for +// Imath::V3f: +// +// // in global namespace: +// template<> struct fmt::formatter +// : OIIO::array_formatter {}; +// +template +struct array_formatter : format_parser_with_separator { + // inherits parse() from format_parser_with_separator + template + auto format(const T& v, FormatContext& ctx) OIIO_FMT_CUSTOM_FORMATTER_CONST + { + std::string vspec = elem_fmt.size() ? fmt::format("{{:{}}}", elem_fmt) + : std::string("{}"); + for (int i = 0; i < Size; ++i) { + if (i) + fmt::format_to(ctx.out(), "{}", sep == ',' ? ", " : " "); +#if FMT_VERSION >= 80000 + fmt::format_to(ctx.out(), fmt::runtime(vspec), + ((const Elem*)&v)[i]); +#else + fmt::format_to(ctx.out(), vspec, ((const Elem*)&v)[i]); +#endif + } + return ctx.out(); + } +}; + + +} // namespace pvt +OIIO_NAMESPACE_3_1_END diff --git a/third_party/tlRender-install-Release/include/OpenImageIO/detail/fmt/chrono.h b/third_party/tlRender-install-Release/include/OpenImageIO/detail/fmt/chrono.h new file mode 100644 index 00000000..9d54574e --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenImageIO/detail/fmt/chrono.h @@ -0,0 +1,2240 @@ +// Formatting library for C++ - chrono support +// +// Copyright (c) 2012 - present, Victor Zverovich +// All rights reserved. +// +// For the license information refer to format.h. + +#ifndef FMT_CHRONO_H_ +#define FMT_CHRONO_H_ + +#include +#include +#include // std::isfinite +#include // std::memcpy +#include +#include +#include +#include +#include + +#include "ostream.h" // formatbuf + +FMT_BEGIN_NAMESPACE + +// Check if std::chrono::local_t is available. +#ifndef FMT_USE_LOCAL_TIME +# ifdef __cpp_lib_chrono +# define FMT_USE_LOCAL_TIME (__cpp_lib_chrono >= 201907L) +# else +# define FMT_USE_LOCAL_TIME 0 +# endif +#endif + +// Check if std::chrono::utc_timestamp is available. +#ifndef FMT_USE_UTC_TIME +# ifdef __cpp_lib_chrono +# define FMT_USE_UTC_TIME (__cpp_lib_chrono >= 201907L) +# else +# define FMT_USE_UTC_TIME 0 +# endif +#endif + +// Enable tzset. +#ifndef FMT_USE_TZSET +// UWP doesn't provide _tzset. +# if FMT_HAS_INCLUDE("winapifamily.h") +# include +# endif +# if defined(_WIN32) && (!defined(WINAPI_FAMILY) || \ + (WINAPI_FAMILY == WINAPI_FAMILY_DESKTOP_APP)) +# define FMT_USE_TZSET 1 +# else +# define FMT_USE_TZSET 0 +# endif +#endif + +// Enable safe chrono durations, unless explicitly disabled. +#ifndef FMT_SAFE_DURATION_CAST +# define FMT_SAFE_DURATION_CAST 1 +#endif +#if FMT_SAFE_DURATION_CAST + +// For conversion between std::chrono::durations without undefined +// behaviour or erroneous results. +// This is a stripped down version of duration_cast, for inclusion in fmt. +// See https://github.com/pauldreik/safe_duration_cast +// +// Copyright Paul Dreik 2019 +namespace safe_duration_cast { + +template ::value && + std::numeric_limits::is_signed == + std::numeric_limits::is_signed)> +FMT_CONSTEXPR auto lossless_integral_conversion(const From from, int& ec) + -> To { + ec = 0; + using F = std::numeric_limits; + using T = std::numeric_limits; + static_assert(F::is_integer, "From must be integral"); + static_assert(T::is_integer, "To must be integral"); + + // A and B are both signed, or both unsigned. + if (detail::const_check(F::digits <= T::digits)) { + // From fits in To without any problem. + } else { + // From does not always fit in To, resort to a dynamic check. + if (from < (T::min)() || from > (T::max)()) { + // outside range. + ec = 1; + return {}; + } + } + return static_cast(from); +} + +/** + * converts From to To, without loss. If the dynamic value of from + * can't be converted to To without loss, ec is set. + */ +template ::value && + std::numeric_limits::is_signed != + std::numeric_limits::is_signed)> +FMT_CONSTEXPR auto lossless_integral_conversion(const From from, int& ec) + -> To { + ec = 0; + using F = std::numeric_limits; + using T = std::numeric_limits; + static_assert(F::is_integer, "From must be integral"); + static_assert(T::is_integer, "To must be integral"); + + if (detail::const_check(F::is_signed && !T::is_signed)) { + // From may be negative, not allowed! + if (fmt::detail::is_negative(from)) { + ec = 1; + return {}; + } + // From is positive. Can it always fit in To? + if (detail::const_check(F::digits > T::digits) && + from > static_cast(detail::max_value())) { + ec = 1; + return {}; + } + } + + if (detail::const_check(!F::is_signed && T::is_signed && + F::digits >= T::digits) && + from > static_cast(detail::max_value())) { + ec = 1; + return {}; + } + return static_cast(from); // Lossless conversion. +} + +template ::value)> +FMT_CONSTEXPR auto lossless_integral_conversion(const From from, int& ec) + -> To { + ec = 0; + return from; +} // function + +// clang-format off +/** + * converts From to To if possible, otherwise ec is set. + * + * input | output + * ---------------------------------|--------------- + * NaN | NaN + * Inf | Inf + * normal, fits in output | converted (possibly lossy) + * normal, does not fit in output | ec is set + * subnormal | best effort + * -Inf | -Inf + */ +// clang-format on +template ::value)> +FMT_CONSTEXPR auto safe_float_conversion(const From from, int& ec) -> To { + ec = 0; + using T = std::numeric_limits; + static_assert(std::is_floating_point::value, "From must be floating"); + static_assert(std::is_floating_point::value, "To must be floating"); + + // catch the only happy case + if (std::isfinite(from)) { + if (from >= T::lowest() && from <= (T::max)()) { + return static_cast(from); + } + // not within range. + ec = 1; + return {}; + } + + // nan and inf will be preserved + return static_cast(from); +} // function + +template ::value)> +FMT_CONSTEXPR auto safe_float_conversion(const From from, int& ec) -> To { + ec = 0; + static_assert(std::is_floating_point::value, "From must be floating"); + return from; +} + +/** + * safe duration cast between integral durations + */ +template ::value), + FMT_ENABLE_IF(std::is_integral::value)> +auto safe_duration_cast(std::chrono::duration from, + int& ec) -> To { + using From = std::chrono::duration; + ec = 0; + // the basic idea is that we need to convert from count() in the from type + // to count() in the To type, by multiplying it with this: + struct Factor + : std::ratio_divide {}; + + static_assert(Factor::num > 0, "num must be positive"); + static_assert(Factor::den > 0, "den must be positive"); + + // the conversion is like this: multiply from.count() with Factor::num + // /Factor::den and convert it to To::rep, all this without + // overflow/underflow. let's start by finding a suitable type that can hold + // both To, From and Factor::num + using IntermediateRep = + typename std::common_type::type; + + // safe conversion to IntermediateRep + IntermediateRep count = + lossless_integral_conversion(from.count(), ec); + if (ec) return {}; + // multiply with Factor::num without overflow or underflow + if (detail::const_check(Factor::num != 1)) { + const auto max1 = detail::max_value() / Factor::num; + if (count > max1) { + ec = 1; + return {}; + } + const auto min1 = + (std::numeric_limits::min)() / Factor::num; + if (detail::const_check(!std::is_unsigned::value) && + count < min1) { + ec = 1; + return {}; + } + count *= Factor::num; + } + + if (detail::const_check(Factor::den != 1)) count /= Factor::den; + auto tocount = lossless_integral_conversion(count, ec); + return ec ? To() : To(tocount); +} + +/** + * safe duration_cast between floating point durations + */ +template ::value), + FMT_ENABLE_IF(std::is_floating_point::value)> +auto safe_duration_cast(std::chrono::duration from, + int& ec) -> To { + using From = std::chrono::duration; + ec = 0; + if (std::isnan(from.count())) { + // nan in, gives nan out. easy. + return To{std::numeric_limits::quiet_NaN()}; + } + // maybe we should also check if from is denormal, and decide what to do about + // it. + + // +-inf should be preserved. + if (std::isinf(from.count())) { + return To{from.count()}; + } + + // the basic idea is that we need to convert from count() in the from type + // to count() in the To type, by multiplying it with this: + struct Factor + : std::ratio_divide {}; + + static_assert(Factor::num > 0, "num must be positive"); + static_assert(Factor::den > 0, "den must be positive"); + + // the conversion is like this: multiply from.count() with Factor::num + // /Factor::den and convert it to To::rep, all this without + // overflow/underflow. let's start by finding a suitable type that can hold + // both To, From and Factor::num + using IntermediateRep = + typename std::common_type::type; + + // force conversion of From::rep -> IntermediateRep to be safe, + // even if it will never happen be narrowing in this context. + IntermediateRep count = + safe_float_conversion(from.count(), ec); + if (ec) { + return {}; + } + + // multiply with Factor::num without overflow or underflow + if (detail::const_check(Factor::num != 1)) { + constexpr auto max1 = detail::max_value() / + static_cast(Factor::num); + if (count > max1) { + ec = 1; + return {}; + } + constexpr auto min1 = std::numeric_limits::lowest() / + static_cast(Factor::num); + if (count < min1) { + ec = 1; + return {}; + } + count *= static_cast(Factor::num); + } + + // this can't go wrong, right? den>0 is checked earlier. + if (detail::const_check(Factor::den != 1)) { + using common_t = typename std::common_type::type; + count /= static_cast(Factor::den); + } + + // convert to the to type, safely + using ToRep = typename To::rep; + + const ToRep tocount = safe_float_conversion(count, ec); + if (ec) { + return {}; + } + return To{tocount}; +} +} // namespace safe_duration_cast +#endif + +// Prevents expansion of a preceding token as a function-style macro. +// Usage: f FMT_NOMACRO() +#define FMT_NOMACRO + +namespace detail { +template struct null {}; +inline auto localtime_r FMT_NOMACRO(...) -> null<> { return null<>(); } +inline auto localtime_s(...) -> null<> { return null<>(); } +inline auto gmtime_r(...) -> null<> { return null<>(); } +inline auto gmtime_s(...) -> null<> { return null<>(); } + +inline auto get_classic_locale() -> const std::locale& { + static const auto& locale = std::locale::classic(); + return locale; +} + +template struct codecvt_result { + static constexpr const size_t max_size = 32; + CodeUnit buf[max_size]; + CodeUnit* end; +}; + +template +void write_codecvt(codecvt_result& out, string_view in_buf, + const std::locale& loc) { +#if FMT_CLANG_VERSION +# pragma clang diagnostic push +# pragma clang diagnostic ignored "-Wdeprecated" + auto& f = std::use_facet>(loc); +# pragma clang diagnostic pop +#else + auto& f = std::use_facet>(loc); +#endif + auto mb = std::mbstate_t(); + const char* from_next = nullptr; + auto result = f.in(mb, in_buf.begin(), in_buf.end(), from_next, + std::begin(out.buf), std::end(out.buf), out.end); + if (result != std::codecvt_base::ok) + FMT_THROW(format_error("failed to format time")); +} + +template +auto write_encoded_tm_str(OutputIt out, string_view in, const std::locale& loc) + -> OutputIt { + if (detail::is_utf8() && loc != get_classic_locale()) { + // char16_t and char32_t codecvts are broken in MSVC (linkage errors) and + // gcc-4. +#if FMT_MSC_VERSION != 0 || \ + (defined(__GLIBCXX__) && !defined(_GLIBCXX_USE_DUAL_ABI)) + // The _GLIBCXX_USE_DUAL_ABI macro is always defined in libstdc++ from gcc-5 + // and newer. + using code_unit = wchar_t; +#else + using code_unit = char32_t; +#endif + + using unit_t = codecvt_result; + unit_t unit; + write_codecvt(unit, in, loc); + // In UTF-8 is used one to four one-byte code units. + auto u = + to_utf8>(); + if (!u.convert({unit.buf, to_unsigned(unit.end - unit.buf)})) + FMT_THROW(format_error("failed to format time")); + return copy_str(u.c_str(), u.c_str() + u.size(), out); + } + return copy_str(in.data(), in.data() + in.size(), out); +} + +template ::value)> +auto write_tm_str(OutputIt out, string_view sv, const std::locale& loc) + -> OutputIt { + codecvt_result unit; + write_codecvt(unit, sv, loc); + return copy_str(unit.buf, unit.end, out); +} + +template ::value)> +auto write_tm_str(OutputIt out, string_view sv, const std::locale& loc) + -> OutputIt { + return write_encoded_tm_str(out, sv, loc); +} + +template +inline void do_write(buffer& buf, const std::tm& time, + const std::locale& loc, char format, char modifier) { + auto&& format_buf = formatbuf>(buf); + auto&& os = std::basic_ostream(&format_buf); + os.imbue(loc); + const auto& facet = std::use_facet>(loc); + auto end = facet.put(os, os, Char(' '), &time, format, modifier); + if (end.failed()) FMT_THROW(format_error("failed to format time")); +} + +template ::value)> +auto write(OutputIt out, const std::tm& time, const std::locale& loc, + char format, char modifier = 0) -> OutputIt { + auto&& buf = get_buffer(out); + do_write(buf, time, loc, format, modifier); + return get_iterator(buf, out); +} + +template ::value)> +auto write(OutputIt out, const std::tm& time, const std::locale& loc, + char format, char modifier = 0) -> OutputIt { + auto&& buf = basic_memory_buffer(); + do_write(buf, time, loc, format, modifier); + return write_encoded_tm_str(out, string_view(buf.data(), buf.size()), loc); +} + +template +struct is_same_arithmetic_type + : public std::integral_constant::value && + std::is_integral::value) || + (std::is_floating_point::value && + std::is_floating_point::value)> { +}; + +template < + typename To, typename FromRep, typename FromPeriod, + FMT_ENABLE_IF(is_same_arithmetic_type::value)> +auto fmt_duration_cast(std::chrono::duration from) -> To { +#if FMT_SAFE_DURATION_CAST + // Throwing version of safe_duration_cast is only available for + // integer to integer or float to float casts. + int ec; + To to = safe_duration_cast::safe_duration_cast(from, ec); + if (ec) FMT_THROW(format_error("cannot format duration")); + return to; +#else + // Standard duration cast, may overflow. + return std::chrono::duration_cast(from); +#endif +} + +template < + typename To, typename FromRep, typename FromPeriod, + FMT_ENABLE_IF(!is_same_arithmetic_type::value)> +auto fmt_duration_cast(std::chrono::duration from) -> To { + // Mixed integer <-> float cast is not supported by safe_duration_cast. + return std::chrono::duration_cast(from); +} + +template +auto to_time_t( + std::chrono::time_point time_point) + -> std::time_t { + // Cannot use std::chrono::system_clock::to_time_t since this would first + // require a cast to std::chrono::system_clock::time_point, which could + // overflow. + return fmt_duration_cast>( + time_point.time_since_epoch()) + .count(); +} +} // namespace detail + +FMT_BEGIN_EXPORT + +/** + Converts given time since epoch as ``std::time_t`` value into calendar time, + expressed in local time. Unlike ``std::localtime``, this function is + thread-safe on most platforms. + */ +inline auto localtime(std::time_t time) -> std::tm { + struct dispatcher { + std::time_t time_; + std::tm tm_; + + dispatcher(std::time_t t) : time_(t) {} + + auto run() -> bool { + using namespace fmt::detail; + return handle(localtime_r(&time_, &tm_)); + } + + auto handle(std::tm* tm) -> bool { return tm != nullptr; } + + auto handle(detail::null<>) -> bool { + using namespace fmt::detail; + return fallback(localtime_s(&tm_, &time_)); + } + + auto fallback(int res) -> bool { return res == 0; } + +#if !FMT_MSC_VERSION + auto fallback(detail::null<>) -> bool { + using namespace fmt::detail; + std::tm* tm = std::localtime(&time_); + if (tm) tm_ = *tm; + return tm != nullptr; + } +#endif + }; + dispatcher lt(time); + // Too big time values may be unsupported. + if (!lt.run()) FMT_THROW(format_error("time_t value out of range")); + return lt.tm_; +} + +#if FMT_USE_LOCAL_TIME +template +inline auto localtime(std::chrono::local_time time) -> std::tm { + return localtime( + detail::to_time_t(std::chrono::current_zone()->to_sys(time))); +} +#endif + +/** + Converts given time since epoch as ``std::time_t`` value into calendar time, + expressed in Coordinated Universal Time (UTC). Unlike ``std::gmtime``, this + function is thread-safe on most platforms. + */ +inline auto gmtime(std::time_t time) -> std::tm { + struct dispatcher { + std::time_t time_; + std::tm tm_; + + dispatcher(std::time_t t) : time_(t) {} + + auto run() -> bool { + using namespace fmt::detail; + return handle(gmtime_r(&time_, &tm_)); + } + + auto handle(std::tm* tm) -> bool { return tm != nullptr; } + + auto handle(detail::null<>) -> bool { + using namespace fmt::detail; + return fallback(gmtime_s(&tm_, &time_)); + } + + auto fallback(int res) -> bool { return res == 0; } + +#if !FMT_MSC_VERSION + auto fallback(detail::null<>) -> bool { + std::tm* tm = std::gmtime(&time_); + if (tm) tm_ = *tm; + return tm != nullptr; + } +#endif + }; + auto gt = dispatcher(time); + // Too big time values may be unsupported. + if (!gt.run()) FMT_THROW(format_error("time_t value out of range")); + return gt.tm_; +} + +template +inline auto gmtime( + std::chrono::time_point time_point) + -> std::tm { + return gmtime(detail::to_time_t(time_point)); +} + +namespace detail { + +// Writes two-digit numbers a, b and c separated by sep to buf. +// The method by Pavel Novikov based on +// https://johnnylee-sde.github.io/Fast-unsigned-integer-to-time-string/. +inline void write_digit2_separated(char* buf, unsigned a, unsigned b, + unsigned c, char sep) { + unsigned long long digits = + a | (b << 24) | (static_cast(c) << 48); + // Convert each value to BCD. + // We have x = a * 10 + b and we want to convert it to BCD y = a * 16 + b. + // The difference is + // y - x = a * 6 + // a can be found from x: + // a = floor(x / 10) + // then + // y = x + a * 6 = x + floor(x / 10) * 6 + // floor(x / 10) is (x * 205) >> 11 (needs 16 bits). + digits += (((digits * 205) >> 11) & 0x000f00000f00000f) * 6; + // Put low nibbles to high bytes and high nibbles to low bytes. + digits = ((digits & 0x00f00000f00000f0) >> 4) | + ((digits & 0x000f00000f00000f) << 8); + auto usep = static_cast(sep); + // Add ASCII '0' to each digit byte and insert separators. + digits |= 0x3030003030003030 | (usep << 16) | (usep << 40); + + constexpr const size_t len = 8; + if (const_check(is_big_endian())) { + char tmp[len]; + std::memcpy(tmp, &digits, len); + std::reverse_copy(tmp, tmp + len, buf); + } else { + std::memcpy(buf, &digits, len); + } +} + +template +FMT_CONSTEXPR inline auto get_units() -> const char* { + if (std::is_same::value) return "as"; + if (std::is_same::value) return "fs"; + if (std::is_same::value) return "ps"; + if (std::is_same::value) return "ns"; + if (std::is_same::value) return "µs"; + if (std::is_same::value) return "ms"; + if (std::is_same::value) return "cs"; + if (std::is_same::value) return "ds"; + if (std::is_same>::value) return "s"; + if (std::is_same::value) return "das"; + if (std::is_same::value) return "hs"; + if (std::is_same::value) return "ks"; + if (std::is_same::value) return "Ms"; + if (std::is_same::value) return "Gs"; + if (std::is_same::value) return "Ts"; + if (std::is_same::value) return "Ps"; + if (std::is_same::value) return "Es"; + if (std::is_same>::value) return "min"; + if (std::is_same>::value) return "h"; + if (std::is_same>::value) return "d"; + return nullptr; +} + +enum class numeric_system { + standard, + // Alternative numeric system, e.g. 十二 instead of 12 in ja_JP locale. + alternative +}; + +// Glibc extensions for formatting numeric values. +enum class pad_type { + unspecified, + // Do not pad a numeric result string. + none, + // Pad a numeric result string with zeros even if the conversion specifier + // character uses space-padding by default. + zero, + // Pad a numeric result string with spaces. + space, +}; + +template +auto write_padding(OutputIt out, pad_type pad, int width) -> OutputIt { + if (pad == pad_type::none) return out; + return std::fill_n(out, width, pad == pad_type::space ? ' ' : '0'); +} + +template +auto write_padding(OutputIt out, pad_type pad) -> OutputIt { + if (pad != pad_type::none) *out++ = pad == pad_type::space ? ' ' : '0'; + return out; +} + +// Parses a put_time-like format string and invokes handler actions. +template +FMT_CONSTEXPR auto parse_chrono_format(const Char* begin, const Char* end, + Handler&& handler) -> const Char* { + if (begin == end || *begin == '}') return begin; + if (*begin != '%') FMT_THROW(format_error("invalid format")); + auto ptr = begin; + pad_type pad = pad_type::unspecified; + while (ptr != end) { + auto c = *ptr; + if (c == '}') break; + if (c != '%') { + ++ptr; + continue; + } + if (begin != ptr) handler.on_text(begin, ptr); + ++ptr; // consume '%' + if (ptr == end) FMT_THROW(format_error("invalid format")); + c = *ptr; + switch (c) { + case '_': + pad = pad_type::space; + ++ptr; + break; + case '-': + pad = pad_type::none; + ++ptr; + break; + case '0': + pad = pad_type::zero; + ++ptr; + break; + } + if (ptr == end) FMT_THROW(format_error("invalid format")); + c = *ptr++; + switch (c) { + case '%': + handler.on_text(ptr - 1, ptr); + break; + case 'n': { + const Char newline[] = {'\n'}; + handler.on_text(newline, newline + 1); + break; + } + case 't': { + const Char tab[] = {'\t'}; + handler.on_text(tab, tab + 1); + break; + } + // Year: + case 'Y': + handler.on_year(numeric_system::standard); + break; + case 'y': + handler.on_short_year(numeric_system::standard); + break; + case 'C': + handler.on_century(numeric_system::standard); + break; + case 'G': + handler.on_iso_week_based_year(); + break; + case 'g': + handler.on_iso_week_based_short_year(); + break; + // Day of the week: + case 'a': + handler.on_abbr_weekday(); + break; + case 'A': + handler.on_full_weekday(); + break; + case 'w': + handler.on_dec0_weekday(numeric_system::standard); + break; + case 'u': + handler.on_dec1_weekday(numeric_system::standard); + break; + // Month: + case 'b': + case 'h': + handler.on_abbr_month(); + break; + case 'B': + handler.on_full_month(); + break; + case 'm': + handler.on_dec_month(numeric_system::standard); + break; + // Day of the year/month: + case 'U': + handler.on_dec0_week_of_year(numeric_system::standard); + break; + case 'W': + handler.on_dec1_week_of_year(numeric_system::standard); + break; + case 'V': + handler.on_iso_week_of_year(numeric_system::standard); + break; + case 'j': + handler.on_day_of_year(); + break; + case 'd': + handler.on_day_of_month(numeric_system::standard); + break; + case 'e': + handler.on_day_of_month_space(numeric_system::standard); + break; + // Hour, minute, second: + case 'H': + handler.on_24_hour(numeric_system::standard, pad); + break; + case 'I': + handler.on_12_hour(numeric_system::standard, pad); + break; + case 'M': + handler.on_minute(numeric_system::standard, pad); + break; + case 'S': + handler.on_second(numeric_system::standard, pad); + break; + // Other: + case 'c': + handler.on_datetime(numeric_system::standard); + break; + case 'x': + handler.on_loc_date(numeric_system::standard); + break; + case 'X': + handler.on_loc_time(numeric_system::standard); + break; + case 'D': + handler.on_us_date(); + break; + case 'F': + handler.on_iso_date(); + break; + case 'r': + handler.on_12_hour_time(); + break; + case 'R': + handler.on_24_hour_time(); + break; + case 'T': + handler.on_iso_time(); + break; + case 'p': + handler.on_am_pm(); + break; + case 'Q': + handler.on_duration_value(); + break; + case 'q': + handler.on_duration_unit(); + break; + case 'z': + handler.on_utc_offset(numeric_system::standard); + break; + case 'Z': + handler.on_tz_name(); + break; + // Alternative representation: + case 'E': { + if (ptr == end) FMT_THROW(format_error("invalid format")); + c = *ptr++; + switch (c) { + case 'Y': + handler.on_year(numeric_system::alternative); + break; + case 'y': + handler.on_offset_year(); + break; + case 'C': + handler.on_century(numeric_system::alternative); + break; + case 'c': + handler.on_datetime(numeric_system::alternative); + break; + case 'x': + handler.on_loc_date(numeric_system::alternative); + break; + case 'X': + handler.on_loc_time(numeric_system::alternative); + break; + case 'z': + handler.on_utc_offset(numeric_system::alternative); + break; + default: + FMT_THROW(format_error("invalid format")); + } + break; + } + case 'O': + if (ptr == end) FMT_THROW(format_error("invalid format")); + c = *ptr++; + switch (c) { + case 'y': + handler.on_short_year(numeric_system::alternative); + break; + case 'm': + handler.on_dec_month(numeric_system::alternative); + break; + case 'U': + handler.on_dec0_week_of_year(numeric_system::alternative); + break; + case 'W': + handler.on_dec1_week_of_year(numeric_system::alternative); + break; + case 'V': + handler.on_iso_week_of_year(numeric_system::alternative); + break; + case 'd': + handler.on_day_of_month(numeric_system::alternative); + break; + case 'e': + handler.on_day_of_month_space(numeric_system::alternative); + break; + case 'w': + handler.on_dec0_weekday(numeric_system::alternative); + break; + case 'u': + handler.on_dec1_weekday(numeric_system::alternative); + break; + case 'H': + handler.on_24_hour(numeric_system::alternative, pad); + break; + case 'I': + handler.on_12_hour(numeric_system::alternative, pad); + break; + case 'M': + handler.on_minute(numeric_system::alternative, pad); + break; + case 'S': + handler.on_second(numeric_system::alternative, pad); + break; + case 'z': + handler.on_utc_offset(numeric_system::alternative); + break; + default: + FMT_THROW(format_error("invalid format")); + } + break; + default: + FMT_THROW(format_error("invalid format")); + } + begin = ptr; + } + if (begin != ptr) handler.on_text(begin, ptr); + return ptr; +} + +template struct null_chrono_spec_handler { + FMT_CONSTEXPR void unsupported() { + static_cast(this)->unsupported(); + } + FMT_CONSTEXPR void on_year(numeric_system) { unsupported(); } + FMT_CONSTEXPR void on_short_year(numeric_system) { unsupported(); } + FMT_CONSTEXPR void on_offset_year() { unsupported(); } + FMT_CONSTEXPR void on_century(numeric_system) { unsupported(); } + FMT_CONSTEXPR void on_iso_week_based_year() { unsupported(); } + FMT_CONSTEXPR void on_iso_week_based_short_year() { unsupported(); } + FMT_CONSTEXPR void on_abbr_weekday() { unsupported(); } + FMT_CONSTEXPR void on_full_weekday() { unsupported(); } + FMT_CONSTEXPR void on_dec0_weekday(numeric_system) { unsupported(); } + FMT_CONSTEXPR void on_dec1_weekday(numeric_system) { unsupported(); } + FMT_CONSTEXPR void on_abbr_month() { unsupported(); } + FMT_CONSTEXPR void on_full_month() { unsupported(); } + FMT_CONSTEXPR void on_dec_month(numeric_system) { unsupported(); } + FMT_CONSTEXPR void on_dec0_week_of_year(numeric_system) { unsupported(); } + FMT_CONSTEXPR void on_dec1_week_of_year(numeric_system) { unsupported(); } + FMT_CONSTEXPR void on_iso_week_of_year(numeric_system) { unsupported(); } + FMT_CONSTEXPR void on_day_of_year() { unsupported(); } + FMT_CONSTEXPR void on_day_of_month(numeric_system) { unsupported(); } + FMT_CONSTEXPR void on_day_of_month_space(numeric_system) { unsupported(); } + FMT_CONSTEXPR void on_24_hour(numeric_system) { unsupported(); } + FMT_CONSTEXPR void on_12_hour(numeric_system) { unsupported(); } + FMT_CONSTEXPR void on_minute(numeric_system) { unsupported(); } + FMT_CONSTEXPR void on_second(numeric_system) { unsupported(); } + FMT_CONSTEXPR void on_datetime(numeric_system) { unsupported(); } + FMT_CONSTEXPR void on_loc_date(numeric_system) { unsupported(); } + FMT_CONSTEXPR void on_loc_time(numeric_system) { unsupported(); } + FMT_CONSTEXPR void on_us_date() { unsupported(); } + FMT_CONSTEXPR void on_iso_date() { unsupported(); } + FMT_CONSTEXPR void on_12_hour_time() { unsupported(); } + FMT_CONSTEXPR void on_24_hour_time() { unsupported(); } + FMT_CONSTEXPR void on_iso_time() { unsupported(); } + FMT_CONSTEXPR void on_am_pm() { unsupported(); } + FMT_CONSTEXPR void on_duration_value() { unsupported(); } + FMT_CONSTEXPR void on_duration_unit() { unsupported(); } + FMT_CONSTEXPR void on_utc_offset(numeric_system) { unsupported(); } + FMT_CONSTEXPR void on_tz_name() { unsupported(); } +}; + +struct tm_format_checker : null_chrono_spec_handler { + FMT_NORETURN void unsupported() { FMT_THROW(format_error("no format")); } + + template + FMT_CONSTEXPR void on_text(const Char*, const Char*) {} + FMT_CONSTEXPR void on_year(numeric_system) {} + FMT_CONSTEXPR void on_short_year(numeric_system) {} + FMT_CONSTEXPR void on_offset_year() {} + FMT_CONSTEXPR void on_century(numeric_system) {} + FMT_CONSTEXPR void on_iso_week_based_year() {} + FMT_CONSTEXPR void on_iso_week_based_short_year() {} + FMT_CONSTEXPR void on_abbr_weekday() {} + FMT_CONSTEXPR void on_full_weekday() {} + FMT_CONSTEXPR void on_dec0_weekday(numeric_system) {} + FMT_CONSTEXPR void on_dec1_weekday(numeric_system) {} + FMT_CONSTEXPR void on_abbr_month() {} + FMT_CONSTEXPR void on_full_month() {} + FMT_CONSTEXPR void on_dec_month(numeric_system) {} + FMT_CONSTEXPR void on_dec0_week_of_year(numeric_system) {} + FMT_CONSTEXPR void on_dec1_week_of_year(numeric_system) {} + FMT_CONSTEXPR void on_iso_week_of_year(numeric_system) {} + FMT_CONSTEXPR void on_day_of_year() {} + FMT_CONSTEXPR void on_day_of_month(numeric_system) {} + FMT_CONSTEXPR void on_day_of_month_space(numeric_system) {} + FMT_CONSTEXPR void on_24_hour(numeric_system, pad_type) {} + FMT_CONSTEXPR void on_12_hour(numeric_system, pad_type) {} + FMT_CONSTEXPR void on_minute(numeric_system, pad_type) {} + FMT_CONSTEXPR void on_second(numeric_system, pad_type) {} + FMT_CONSTEXPR void on_datetime(numeric_system) {} + FMT_CONSTEXPR void on_loc_date(numeric_system) {} + FMT_CONSTEXPR void on_loc_time(numeric_system) {} + FMT_CONSTEXPR void on_us_date() {} + FMT_CONSTEXPR void on_iso_date() {} + FMT_CONSTEXPR void on_12_hour_time() {} + FMT_CONSTEXPR void on_24_hour_time() {} + FMT_CONSTEXPR void on_iso_time() {} + FMT_CONSTEXPR void on_am_pm() {} + FMT_CONSTEXPR void on_utc_offset(numeric_system) {} + FMT_CONSTEXPR void on_tz_name() {} +}; + +inline auto tm_wday_full_name(int wday) -> const char* { + static constexpr const char* full_name_list[] = { + "Sunday", "Monday", "Tuesday", "Wednesday", + "Thursday", "Friday", "Saturday"}; + return wday >= 0 && wday <= 6 ? full_name_list[wday] : "?"; +} +inline auto tm_wday_short_name(int wday) -> const char* { + static constexpr const char* short_name_list[] = {"Sun", "Mon", "Tue", "Wed", + "Thu", "Fri", "Sat"}; + return wday >= 0 && wday <= 6 ? short_name_list[wday] : "???"; +} + +inline auto tm_mon_full_name(int mon) -> const char* { + static constexpr const char* full_name_list[] = { + "January", "February", "March", "April", "May", "June", + "July", "August", "September", "October", "November", "December"}; + return mon >= 0 && mon <= 11 ? full_name_list[mon] : "?"; +} +inline auto tm_mon_short_name(int mon) -> const char* { + static constexpr const char* short_name_list[] = { + "Jan", "Feb", "Mar", "Apr", "May", "Jun", + "Jul", "Aug", "Sep", "Oct", "Nov", "Dec", + }; + return mon >= 0 && mon <= 11 ? short_name_list[mon] : "???"; +} + +template +struct has_member_data_tm_gmtoff : std::false_type {}; +template +struct has_member_data_tm_gmtoff> + : std::true_type {}; + +template +struct has_member_data_tm_zone : std::false_type {}; +template +struct has_member_data_tm_zone> + : std::true_type {}; + +#if FMT_USE_TZSET +inline void tzset_once() { + static bool init = []() -> bool { + _tzset(); + return true; + }(); + ignore_unused(init); +} +#endif + +// Converts value to Int and checks that it's in the range [0, upper). +template ::value)> +inline auto to_nonnegative_int(T value, Int upper) -> Int { + if (!std::is_unsigned::value && + (value < 0 || to_unsigned(value) > to_unsigned(upper))) { + FMT_THROW(fmt::format_error("chrono value is out of range")); + } + return static_cast(value); +} +template ::value)> +inline auto to_nonnegative_int(T value, Int upper) -> Int { + if (value < 0 || value > static_cast(upper)) + FMT_THROW(format_error("invalid value")); + return static_cast(value); +} + +constexpr auto pow10(std::uint32_t n) -> long long { + return n == 0 ? 1 : 10 * pow10(n - 1); +} + +// Counts the number of fractional digits in the range [0, 18] according to the +// C++20 spec. If more than 18 fractional digits are required then returns 6 for +// microseconds precision. +template () / 10)> +struct count_fractional_digits { + static constexpr int value = + Num % Den == 0 ? N : count_fractional_digits::value; +}; + +// Base case that doesn't instantiate any more templates +// in order to avoid overflow. +template +struct count_fractional_digits { + static constexpr int value = (Num % Den == 0) ? N : 6; +}; + +// Format subseconds which are given as an integer type with an appropriate +// number of digits. +template +void write_fractional_seconds(OutputIt& out, Duration d, int precision = -1) { + constexpr auto num_fractional_digits = + count_fractional_digits::value; + + using subsecond_precision = std::chrono::duration< + typename std::common_type::type, + std::ratio<1, detail::pow10(num_fractional_digits)>>; + + const auto fractional = d - fmt_duration_cast(d); + const auto subseconds = + std::chrono::treat_as_floating_point< + typename subsecond_precision::rep>::value + ? fractional.count() + : fmt_duration_cast(fractional).count(); + auto n = static_cast>(subseconds); + const int num_digits = detail::count_digits(n); + + int leading_zeroes = (std::max)(0, num_fractional_digits - num_digits); + if (precision < 0) { + FMT_ASSERT(!std::is_floating_point::value, ""); + if (std::ratio_less::value) { + *out++ = '.'; + out = std::fill_n(out, leading_zeroes, '0'); + out = format_decimal(out, n, num_digits).end; + } + } else { + *out++ = '.'; + leading_zeroes = (std::min)(leading_zeroes, precision); + out = std::fill_n(out, leading_zeroes, '0'); + int remaining = precision - leading_zeroes; + if (remaining != 0 && remaining < num_digits) { + n /= to_unsigned(detail::pow10(to_unsigned(num_digits - remaining))); + out = format_decimal(out, n, remaining).end; + return; + } + out = format_decimal(out, n, num_digits).end; + remaining -= num_digits; + out = std::fill_n(out, remaining, '0'); + } +} + +// Format subseconds which are given as a floating point type with an +// appropriate number of digits. We cannot pass the Duration here, as we +// explicitly need to pass the Rep value in the chrono_formatter. +template +void write_floating_seconds(memory_buffer& buf, Duration duration, + int num_fractional_digits = -1) { + using rep = typename Duration::rep; + FMT_ASSERT(std::is_floating_point::value, ""); + + auto val = duration.count(); + + if (num_fractional_digits < 0) { + // For `std::round` with fallback to `round`: + // On some toolchains `std::round` is not available (e.g. GCC 6). + using namespace std; + num_fractional_digits = + count_fractional_digits::value; + if (num_fractional_digits < 6 && static_cast(round(val)) != val) + num_fractional_digits = 6; + } + + fmt::format_to(std::back_inserter(buf), FMT_STRING("{:.{}f}"), + std::fmod(val * static_cast(Duration::period::num) / + static_cast(Duration::period::den), + static_cast(60)), + num_fractional_digits); +} + +template +class tm_writer { + private: + static constexpr int days_per_week = 7; + + const std::locale& loc_; + const bool is_classic_; + OutputIt out_; + const Duration* subsecs_; + const std::tm& tm_; + + auto tm_sec() const noexcept -> int { + FMT_ASSERT(tm_.tm_sec >= 0 && tm_.tm_sec <= 61, ""); + return tm_.tm_sec; + } + auto tm_min() const noexcept -> int { + FMT_ASSERT(tm_.tm_min >= 0 && tm_.tm_min <= 59, ""); + return tm_.tm_min; + } + auto tm_hour() const noexcept -> int { + FMT_ASSERT(tm_.tm_hour >= 0 && tm_.tm_hour <= 23, ""); + return tm_.tm_hour; + } + auto tm_mday() const noexcept -> int { + FMT_ASSERT(tm_.tm_mday >= 1 && tm_.tm_mday <= 31, ""); + return tm_.tm_mday; + } + auto tm_mon() const noexcept -> int { + FMT_ASSERT(tm_.tm_mon >= 0 && tm_.tm_mon <= 11, ""); + return tm_.tm_mon; + } + auto tm_year() const noexcept -> long long { return 1900ll + tm_.tm_year; } + auto tm_wday() const noexcept -> int { + FMT_ASSERT(tm_.tm_wday >= 0 && tm_.tm_wday <= 6, ""); + return tm_.tm_wday; + } + auto tm_yday() const noexcept -> int { + FMT_ASSERT(tm_.tm_yday >= 0 && tm_.tm_yday <= 365, ""); + return tm_.tm_yday; + } + + auto tm_hour12() const noexcept -> int { + const auto h = tm_hour(); + const auto z = h < 12 ? h : h - 12; + return z == 0 ? 12 : z; + } + + // POSIX and the C Standard are unclear or inconsistent about what %C and %y + // do if the year is negative or exceeds 9999. Use the convention that %C + // concatenated with %y yields the same output as %Y, and that %Y contains at + // least 4 characters, with more only if necessary. + auto split_year_lower(long long year) const noexcept -> int { + auto l = year % 100; + if (l < 0) l = -l; // l in [0, 99] + return static_cast(l); + } + + // Algorithm: https://en.wikipedia.org/wiki/ISO_week_date. + auto iso_year_weeks(long long curr_year) const noexcept -> int { + const auto prev_year = curr_year - 1; + const auto curr_p = + (curr_year + curr_year / 4 - curr_year / 100 + curr_year / 400) % + days_per_week; + const auto prev_p = + (prev_year + prev_year / 4 - prev_year / 100 + prev_year / 400) % + days_per_week; + return 52 + ((curr_p == 4 || prev_p == 3) ? 1 : 0); + } + auto iso_week_num(int tm_yday, int tm_wday) const noexcept -> int { + return (tm_yday + 11 - (tm_wday == 0 ? days_per_week : tm_wday)) / + days_per_week; + } + auto tm_iso_week_year() const noexcept -> long long { + const auto year = tm_year(); + const auto w = iso_week_num(tm_yday(), tm_wday()); + if (w < 1) return year - 1; + if (w > iso_year_weeks(year)) return year + 1; + return year; + } + auto tm_iso_week_of_year() const noexcept -> int { + const auto year = tm_year(); + const auto w = iso_week_num(tm_yday(), tm_wday()); + if (w < 1) return iso_year_weeks(year - 1); + if (w > iso_year_weeks(year)) return 1; + return w; + } + + void write1(int value) { + *out_++ = static_cast('0' + to_unsigned(value) % 10); + } + void write2(int value) { + const char* d = digits2(to_unsigned(value) % 100); + *out_++ = *d++; + *out_++ = *d; + } + void write2(int value, pad_type pad) { + unsigned int v = to_unsigned(value) % 100; + if (v >= 10) { + const char* d = digits2(v); + *out_++ = *d++; + *out_++ = *d; + } else { + out_ = detail::write_padding(out_, pad); + *out_++ = static_cast('0' + v); + } + } + + void write_year_extended(long long year) { + // At least 4 characters. + int width = 4; + if (year < 0) { + *out_++ = '-'; + year = 0 - year; + --width; + } + uint32_or_64_or_128_t n = to_unsigned(year); + const int num_digits = count_digits(n); + if (width > num_digits) out_ = std::fill_n(out_, width - num_digits, '0'); + out_ = format_decimal(out_, n, num_digits).end; + } + void write_year(long long year) { + if (year >= 0 && year < 10000) { + write2(static_cast(year / 100)); + write2(static_cast(year % 100)); + } else { + write_year_extended(year); + } + } + + void write_utc_offset(long offset, numeric_system ns) { + if (offset < 0) { + *out_++ = '-'; + offset = -offset; + } else { + *out_++ = '+'; + } + offset /= 60; + write2(static_cast(offset / 60)); + if (ns != numeric_system::standard) *out_++ = ':'; + write2(static_cast(offset % 60)); + } + template ::value)> + void format_utc_offset_impl(const T& tm, numeric_system ns) { + write_utc_offset(tm.tm_gmtoff, ns); + } + template ::value)> + void format_utc_offset_impl(const T& tm, numeric_system ns) { +#if defined(_WIN32) && defined(_UCRT) +# if FMT_USE_TZSET + tzset_once(); +# endif + long offset = 0; + _get_timezone(&offset); + if (tm.tm_isdst) { + long dstbias = 0; + _get_dstbias(&dstbias); + offset += dstbias; + } + write_utc_offset(-offset, ns); +#else + if (ns == numeric_system::standard) return format_localized('z'); + + // Extract timezone offset from timezone conversion functions. + std::tm gtm = tm; + std::time_t gt = std::mktime(>m); + std::tm ltm = gmtime(gt); + std::time_t lt = std::mktime(<m); + long offset = gt - lt; + write_utc_offset(offset, ns); +#endif + } + + template ::value)> + void format_tz_name_impl(const T& tm) { + if (is_classic_) + out_ = write_tm_str(out_, tm.tm_zone, loc_); + else + format_localized('Z'); + } + template ::value)> + void format_tz_name_impl(const T&) { + format_localized('Z'); + } + + void format_localized(char format, char modifier = 0) { + out_ = write(out_, tm_, loc_, format, modifier); + } + + public: + tm_writer(const std::locale& loc, OutputIt out, const std::tm& tm, + const Duration* subsecs = nullptr) + : loc_(loc), + is_classic_(loc_ == get_classic_locale()), + out_(out), + subsecs_(subsecs), + tm_(tm) {} + + auto out() const -> OutputIt { return out_; } + + FMT_CONSTEXPR void on_text(const Char* begin, const Char* end) { + out_ = copy_str(begin, end, out_); + } + + void on_abbr_weekday() { + if (is_classic_) + out_ = write(out_, tm_wday_short_name(tm_wday())); + else + format_localized('a'); + } + void on_full_weekday() { + if (is_classic_) + out_ = write(out_, tm_wday_full_name(tm_wday())); + else + format_localized('A'); + } + void on_dec0_weekday(numeric_system ns) { + if (is_classic_ || ns == numeric_system::standard) return write1(tm_wday()); + format_localized('w', 'O'); + } + void on_dec1_weekday(numeric_system ns) { + if (is_classic_ || ns == numeric_system::standard) { + auto wday = tm_wday(); + write1(wday == 0 ? days_per_week : wday); + } else { + format_localized('u', 'O'); + } + } + + void on_abbr_month() { + if (is_classic_) + out_ = write(out_, tm_mon_short_name(tm_mon())); + else + format_localized('b'); + } + void on_full_month() { + if (is_classic_) + out_ = write(out_, tm_mon_full_name(tm_mon())); + else + format_localized('B'); + } + + void on_datetime(numeric_system ns) { + if (is_classic_) { + on_abbr_weekday(); + *out_++ = ' '; + on_abbr_month(); + *out_++ = ' '; + on_day_of_month_space(numeric_system::standard); + *out_++ = ' '; + on_iso_time(); + *out_++ = ' '; + on_year(numeric_system::standard); + } else { + format_localized('c', ns == numeric_system::standard ? '\0' : 'E'); + } + } + void on_loc_date(numeric_system ns) { + if (is_classic_) + on_us_date(); + else + format_localized('x', ns == numeric_system::standard ? '\0' : 'E'); + } + void on_loc_time(numeric_system ns) { + if (is_classic_) + on_iso_time(); + else + format_localized('X', ns == numeric_system::standard ? '\0' : 'E'); + } + void on_us_date() { + char buf[8]; + write_digit2_separated(buf, to_unsigned(tm_mon() + 1), + to_unsigned(tm_mday()), + to_unsigned(split_year_lower(tm_year())), '/'); + out_ = copy_str(std::begin(buf), std::end(buf), out_); + } + void on_iso_date() { + auto year = tm_year(); + char buf[10]; + size_t offset = 0; + if (year >= 0 && year < 10000) { + copy2(buf, digits2(static_cast(year / 100))); + } else { + offset = 4; + write_year_extended(year); + year = 0; + } + write_digit2_separated(buf + 2, static_cast(year % 100), + to_unsigned(tm_mon() + 1), to_unsigned(tm_mday()), + '-'); + out_ = copy_str(std::begin(buf) + offset, std::end(buf), out_); + } + + void on_utc_offset(numeric_system ns) { format_utc_offset_impl(tm_, ns); } + void on_tz_name() { format_tz_name_impl(tm_); } + + void on_year(numeric_system ns) { + if (is_classic_ || ns == numeric_system::standard) + return write_year(tm_year()); + format_localized('Y', 'E'); + } + void on_short_year(numeric_system ns) { + if (is_classic_ || ns == numeric_system::standard) + return write2(split_year_lower(tm_year())); + format_localized('y', 'O'); + } + void on_offset_year() { + if (is_classic_) return write2(split_year_lower(tm_year())); + format_localized('y', 'E'); + } + + void on_century(numeric_system ns) { + if (is_classic_ || ns == numeric_system::standard) { + auto year = tm_year(); + auto upper = year / 100; + if (year >= -99 && year < 0) { + // Zero upper on negative year. + *out_++ = '-'; + *out_++ = '0'; + } else if (upper >= 0 && upper < 100) { + write2(static_cast(upper)); + } else { + out_ = write(out_, upper); + } + } else { + format_localized('C', 'E'); + } + } + + void on_dec_month(numeric_system ns) { + if (is_classic_ || ns == numeric_system::standard) + return write2(tm_mon() + 1); + format_localized('m', 'O'); + } + + void on_dec0_week_of_year(numeric_system ns) { + if (is_classic_ || ns == numeric_system::standard) + return write2((tm_yday() + days_per_week - tm_wday()) / days_per_week); + format_localized('U', 'O'); + } + void on_dec1_week_of_year(numeric_system ns) { + if (is_classic_ || ns == numeric_system::standard) { + auto wday = tm_wday(); + write2((tm_yday() + days_per_week - + (wday == 0 ? (days_per_week - 1) : (wday - 1))) / + days_per_week); + } else { + format_localized('W', 'O'); + } + } + void on_iso_week_of_year(numeric_system ns) { + if (is_classic_ || ns == numeric_system::standard) + return write2(tm_iso_week_of_year()); + format_localized('V', 'O'); + } + + void on_iso_week_based_year() { write_year(tm_iso_week_year()); } + void on_iso_week_based_short_year() { + write2(split_year_lower(tm_iso_week_year())); + } + + void on_day_of_year() { + auto yday = tm_yday() + 1; + write1(yday / 100); + write2(yday % 100); + } + void on_day_of_month(numeric_system ns) { + if (is_classic_ || ns == numeric_system::standard) return write2(tm_mday()); + format_localized('d', 'O'); + } + void on_day_of_month_space(numeric_system ns) { + if (is_classic_ || ns == numeric_system::standard) { + auto mday = to_unsigned(tm_mday()) % 100; + const char* d2 = digits2(mday); + *out_++ = mday < 10 ? ' ' : d2[0]; + *out_++ = d2[1]; + } else { + format_localized('e', 'O'); + } + } + + void on_24_hour(numeric_system ns, pad_type pad) { + if (is_classic_ || ns == numeric_system::standard) + return write2(tm_hour(), pad); + format_localized('H', 'O'); + } + void on_12_hour(numeric_system ns, pad_type pad) { + if (is_classic_ || ns == numeric_system::standard) + return write2(tm_hour12(), pad); + format_localized('I', 'O'); + } + void on_minute(numeric_system ns, pad_type pad) { + if (is_classic_ || ns == numeric_system::standard) + return write2(tm_min(), pad); + format_localized('M', 'O'); + } + + void on_second(numeric_system ns, pad_type pad) { + if (is_classic_ || ns == numeric_system::standard) { + write2(tm_sec(), pad); + if (subsecs_) { + if (std::is_floating_point::value) { + auto buf = memory_buffer(); + write_floating_seconds(buf, *subsecs_); + if (buf.size() > 1) { + // Remove the leading "0", write something like ".123". + out_ = std::copy(buf.begin() + 1, buf.end(), out_); + } + } else { + write_fractional_seconds(out_, *subsecs_); + } + } + } else { + // Currently no formatting of subseconds when a locale is set. + format_localized('S', 'O'); + } + } + + void on_12_hour_time() { + if (is_classic_) { + char buf[8]; + write_digit2_separated(buf, to_unsigned(tm_hour12()), + to_unsigned(tm_min()), to_unsigned(tm_sec()), ':'); + out_ = copy_str(std::begin(buf), std::end(buf), out_); + *out_++ = ' '; + on_am_pm(); + } else { + format_localized('r'); + } + } + void on_24_hour_time() { + write2(tm_hour()); + *out_++ = ':'; + write2(tm_min()); + } + void on_iso_time() { + on_24_hour_time(); + *out_++ = ':'; + on_second(numeric_system::standard, pad_type::unspecified); + } + + void on_am_pm() { + if (is_classic_) { + *out_++ = tm_hour() < 12 ? 'A' : 'P'; + *out_++ = 'M'; + } else { + format_localized('p'); + } + } + + // These apply to chrono durations but not tm. + void on_duration_value() {} + void on_duration_unit() {} +}; + +struct chrono_format_checker : null_chrono_spec_handler { + bool has_precision_integral = false; + + FMT_NORETURN void unsupported() { FMT_THROW(format_error("no date")); } + + template + FMT_CONSTEXPR void on_text(const Char*, const Char*) {} + FMT_CONSTEXPR void on_day_of_year() {} + FMT_CONSTEXPR void on_24_hour(numeric_system, pad_type) {} + FMT_CONSTEXPR void on_12_hour(numeric_system, pad_type) {} + FMT_CONSTEXPR void on_minute(numeric_system, pad_type) {} + FMT_CONSTEXPR void on_second(numeric_system, pad_type) {} + FMT_CONSTEXPR void on_12_hour_time() {} + FMT_CONSTEXPR void on_24_hour_time() {} + FMT_CONSTEXPR void on_iso_time() {} + FMT_CONSTEXPR void on_am_pm() {} + FMT_CONSTEXPR void on_duration_value() const { + if (has_precision_integral) { + FMT_THROW(format_error("precision not allowed for this argument type")); + } + } + FMT_CONSTEXPR void on_duration_unit() {} +}; + +template ::value&& has_isfinite::value)> +inline auto isfinite(T) -> bool { + return true; +} + +template ::value)> +inline auto mod(T x, int y) -> T { + return x % static_cast(y); +} +template ::value)> +inline auto mod(T x, int y) -> T { + return std::fmod(x, static_cast(y)); +} + +// If T is an integral type, maps T to its unsigned counterpart, otherwise +// leaves it unchanged (unlike std::make_unsigned). +template ::value> +struct make_unsigned_or_unchanged { + using type = T; +}; + +template struct make_unsigned_or_unchanged { + using type = typename std::make_unsigned::type; +}; + +template ::value)> +inline auto get_milliseconds(std::chrono::duration d) + -> std::chrono::duration { + // this may overflow and/or the result may not fit in the + // target type. +#if FMT_SAFE_DURATION_CAST + using CommonSecondsType = + typename std::common_type::type; + const auto d_as_common = fmt_duration_cast(d); + const auto d_as_whole_seconds = + fmt_duration_cast(d_as_common); + // this conversion should be nonproblematic + const auto diff = d_as_common - d_as_whole_seconds; + const auto ms = + fmt_duration_cast>(diff); + return ms; +#else + auto s = fmt_duration_cast(d); + return fmt_duration_cast(d - s); +#endif +} + +template ::value)> +auto format_duration_value(OutputIt out, Rep val, int) -> OutputIt { + return write(out, val); +} + +template ::value)> +auto format_duration_value(OutputIt out, Rep val, int precision) -> OutputIt { + auto specs = format_specs(); + specs.precision = precision; + specs.type = precision >= 0 ? presentation_type::fixed_lower + : presentation_type::general_lower; + return write(out, val, specs); +} + +template +auto copy_unit(string_view unit, OutputIt out, Char) -> OutputIt { + return std::copy(unit.begin(), unit.end(), out); +} + +template +auto copy_unit(string_view unit, OutputIt out, wchar_t) -> OutputIt { + // This works when wchar_t is UTF-32 because units only contain characters + // that have the same representation in UTF-16 and UTF-32. + utf8_to_utf16 u(unit); + return std::copy(u.c_str(), u.c_str() + u.size(), out); +} + +template +auto format_duration_unit(OutputIt out) -> OutputIt { + if (const char* unit = get_units()) + return copy_unit(string_view(unit), out, Char()); + *out++ = '['; + out = write(out, Period::num); + if (const_check(Period::den != 1)) { + *out++ = '/'; + out = write(out, Period::den); + } + *out++ = ']'; + *out++ = 's'; + return out; +} + +class get_locale { + private: + union { + std::locale locale_; + }; + bool has_locale_ = false; + + public: + get_locale(bool localized, locale_ref loc) : has_locale_(localized) { + if (localized) + ::new (&locale_) std::locale(loc.template get()); + } + ~get_locale() { + if (has_locale_) locale_.~locale(); + } + operator const std::locale&() const { + return has_locale_ ? locale_ : get_classic_locale(); + } +}; + +template +struct chrono_formatter { + FormatContext& context; + OutputIt out; + int precision; + bool localized = false; + // rep is unsigned to avoid overflow. + using rep = + conditional_t::value && sizeof(Rep) < sizeof(int), + unsigned, typename make_unsigned_or_unchanged::type>; + rep val; + using seconds = std::chrono::duration; + seconds s; + using milliseconds = std::chrono::duration; + bool negative; + + using char_type = typename FormatContext::char_type; + using tm_writer_type = tm_writer; + + chrono_formatter(FormatContext& ctx, OutputIt o, + std::chrono::duration d) + : context(ctx), + out(o), + val(static_cast(d.count())), + negative(false) { + if (d.count() < 0) { + val = 0 - val; + negative = true; + } + + // this may overflow and/or the result may not fit in the + // target type. + // might need checked conversion (rep!=Rep) + s = fmt_duration_cast(std::chrono::duration(val)); + } + + // returns true if nan or inf, writes to out. + auto handle_nan_inf() -> bool { + if (isfinite(val)) { + return false; + } + if (isnan(val)) { + write_nan(); + return true; + } + // must be +-inf + if (val > 0) { + write_pinf(); + } else { + write_ninf(); + } + return true; + } + + auto days() const -> Rep { return static_cast(s.count() / 86400); } + auto hour() const -> Rep { + return static_cast(mod((s.count() / 3600), 24)); + } + + auto hour12() const -> Rep { + Rep hour = static_cast(mod((s.count() / 3600), 12)); + return hour <= 0 ? 12 : hour; + } + + auto minute() const -> Rep { + return static_cast(mod((s.count() / 60), 60)); + } + auto second() const -> Rep { return static_cast(mod(s.count(), 60)); } + + auto time() const -> std::tm { + auto time = std::tm(); + time.tm_hour = to_nonnegative_int(hour(), 24); + time.tm_min = to_nonnegative_int(minute(), 60); + time.tm_sec = to_nonnegative_int(second(), 60); + return time; + } + + void write_sign() { + if (negative) { + *out++ = '-'; + negative = false; + } + } + + void write(Rep value, int width, pad_type pad = pad_type::unspecified) { + write_sign(); + if (isnan(value)) return write_nan(); + uint32_or_64_or_128_t n = + to_unsigned(to_nonnegative_int(value, max_value())); + int num_digits = detail::count_digits(n); + if (width > num_digits) { + out = detail::write_padding(out, pad, width - num_digits); + } + out = format_decimal(out, n, num_digits).end; + } + + void write_nan() { std::copy_n("nan", 3, out); } + void write_pinf() { std::copy_n("inf", 3, out); } + void write_ninf() { std::copy_n("-inf", 4, out); } + + template + void format_tm(const tm& time, Callback cb, Args... args) { + if (isnan(val)) return write_nan(); + get_locale loc(localized, context.locale()); + auto w = tm_writer_type(loc, out, time); + (w.*cb)(args...); + out = w.out(); + } + + void on_text(const char_type* begin, const char_type* end) { + std::copy(begin, end, out); + } + + // These are not implemented because durations don't have date information. + void on_abbr_weekday() {} + void on_full_weekday() {} + void on_dec0_weekday(numeric_system) {} + void on_dec1_weekday(numeric_system) {} + void on_abbr_month() {} + void on_full_month() {} + void on_datetime(numeric_system) {} + void on_loc_date(numeric_system) {} + void on_loc_time(numeric_system) {} + void on_us_date() {} + void on_iso_date() {} + void on_utc_offset(numeric_system) {} + void on_tz_name() {} + void on_year(numeric_system) {} + void on_short_year(numeric_system) {} + void on_offset_year() {} + void on_century(numeric_system) {} + void on_iso_week_based_year() {} + void on_iso_week_based_short_year() {} + void on_dec_month(numeric_system) {} + void on_dec0_week_of_year(numeric_system) {} + void on_dec1_week_of_year(numeric_system) {} + void on_iso_week_of_year(numeric_system) {} + void on_day_of_month(numeric_system) {} + void on_day_of_month_space(numeric_system) {} + + void on_day_of_year() { + if (handle_nan_inf()) return; + write(days(), 0); + } + + void on_24_hour(numeric_system ns, pad_type pad) { + if (handle_nan_inf()) return; + + if (ns == numeric_system::standard) return write(hour(), 2, pad); + auto time = tm(); + time.tm_hour = to_nonnegative_int(hour(), 24); + format_tm(time, &tm_writer_type::on_24_hour, ns, pad); + } + + void on_12_hour(numeric_system ns, pad_type pad) { + if (handle_nan_inf()) return; + + if (ns == numeric_system::standard) return write(hour12(), 2, pad); + auto time = tm(); + time.tm_hour = to_nonnegative_int(hour12(), 12); + format_tm(time, &tm_writer_type::on_12_hour, ns, pad); + } + + void on_minute(numeric_system ns, pad_type pad) { + if (handle_nan_inf()) return; + + if (ns == numeric_system::standard) return write(minute(), 2, pad); + auto time = tm(); + time.tm_min = to_nonnegative_int(minute(), 60); + format_tm(time, &tm_writer_type::on_minute, ns, pad); + } + + void on_second(numeric_system ns, pad_type pad) { + if (handle_nan_inf()) return; + + if (ns == numeric_system::standard) { + if (std::is_floating_point::value) { + auto buf = memory_buffer(); + write_floating_seconds(buf, std::chrono::duration(val), + precision); + if (negative) *out++ = '-'; + if (buf.size() < 2 || buf[1] == '.') { + out = detail::write_padding(out, pad); + } + out = std::copy(buf.begin(), buf.end(), out); + } else { + write(second(), 2, pad); + write_fractional_seconds( + out, std::chrono::duration(val), precision); + } + return; + } + auto time = tm(); + time.tm_sec = to_nonnegative_int(second(), 60); + format_tm(time, &tm_writer_type::on_second, ns, pad); + } + + void on_12_hour_time() { + if (handle_nan_inf()) return; + format_tm(time(), &tm_writer_type::on_12_hour_time); + } + + void on_24_hour_time() { + if (handle_nan_inf()) { + *out++ = ':'; + handle_nan_inf(); + return; + } + + write(hour(), 2); + *out++ = ':'; + write(minute(), 2); + } + + void on_iso_time() { + on_24_hour_time(); + *out++ = ':'; + if (handle_nan_inf()) return; + on_second(numeric_system::standard, pad_type::unspecified); + } + + void on_am_pm() { + if (handle_nan_inf()) return; + format_tm(time(), &tm_writer_type::on_am_pm); + } + + void on_duration_value() { + if (handle_nan_inf()) return; + write_sign(); + out = format_duration_value(out, val, precision); + } + + void on_duration_unit() { + out = format_duration_unit(out); + } +}; + +} // namespace detail + +#if defined(__cpp_lib_chrono) && __cpp_lib_chrono >= 201907 +using weekday = std::chrono::weekday; +#else +// A fallback version of weekday. +class weekday { + private: + unsigned char value; + + public: + weekday() = default; + explicit constexpr weekday(unsigned wd) noexcept + : value(static_cast(wd != 7 ? wd : 0)) {} + constexpr auto c_encoding() const noexcept -> unsigned { return value; } +}; + +class year_month_day {}; +#endif + +// A rudimentary weekday formatter. +template struct formatter { + private: + bool localized = false; + + public: + FMT_CONSTEXPR auto parse(basic_format_parse_context& ctx) + -> decltype(ctx.begin()) { + auto begin = ctx.begin(), end = ctx.end(); + if (begin != end && *begin == 'L') { + ++begin; + localized = true; + } + return begin; + } + + template + auto format(weekday wd, FormatContext& ctx) const -> decltype(ctx.out()) { + auto time = std::tm(); + time.tm_wday = static_cast(wd.c_encoding()); + detail::get_locale loc(localized, ctx.locale()); + auto w = detail::tm_writer(loc, ctx.out(), time); + w.on_abbr_weekday(); + return w.out(); + } +}; + +template +struct formatter, Char> { + private: + format_specs specs_; + detail::arg_ref width_ref_; + detail::arg_ref precision_ref_; + bool localized_ = false; + basic_string_view format_str_; + + public: + FMT_CONSTEXPR auto parse(basic_format_parse_context& ctx) + -> decltype(ctx.begin()) { + auto it = ctx.begin(), end = ctx.end(); + if (it == end || *it == '}') return it; + + it = detail::parse_align(it, end, specs_); + if (it == end) return it; + + it = detail::parse_dynamic_spec(it, end, specs_.width, width_ref_, ctx); + if (it == end) return it; + + auto checker = detail::chrono_format_checker(); + if (*it == '.') { + checker.has_precision_integral = !std::is_floating_point::value; + it = detail::parse_precision(it, end, specs_.precision, precision_ref_, + ctx); + } + if (it != end && *it == 'L') { + localized_ = true; + ++it; + } + end = detail::parse_chrono_format(it, end, checker); + format_str_ = {it, detail::to_unsigned(end - it)}; + return end; + } + + template + auto format(std::chrono::duration d, FormatContext& ctx) const + -> decltype(ctx.out()) { + auto specs = specs_; + auto precision = specs.precision; + specs.precision = -1; + auto begin = format_str_.begin(), end = format_str_.end(); + // As a possible future optimization, we could avoid extra copying if width + // is not specified. + auto buf = basic_memory_buffer(); + auto out = std::back_inserter(buf); + detail::handle_dynamic_spec(specs.width, width_ref_, + ctx); + detail::handle_dynamic_spec(precision, + precision_ref_, ctx); + if (begin == end || *begin == '}') { + out = detail::format_duration_value(out, d.count(), precision); + detail::format_duration_unit(out); + } else { + using chrono_formatter = + detail::chrono_formatter; + auto f = chrono_formatter(ctx, out, d); + f.precision = precision; + f.localized = localized_; + detail::parse_chrono_format(begin, end, f); + } + return detail::write( + ctx.out(), basic_string_view(buf.data(), buf.size()), specs); + } +}; + +template +struct formatter, + Char> : formatter { + FMT_CONSTEXPR formatter() { + this->format_str_ = detail::string_literal{}; + } + + template + auto format(std::chrono::time_point val, + FormatContext& ctx) const -> decltype(ctx.out()) { + using period = typename Duration::period; + if (detail::const_check( + period::num != 1 || period::den != 1 || + std::is_floating_point::value)) { + const auto epoch = val.time_since_epoch(); + auto subsecs = detail::fmt_duration_cast( + epoch - detail::fmt_duration_cast(epoch)); + + if (subsecs.count() < 0) { + auto second = + detail::fmt_duration_cast(std::chrono::seconds(1)); + if (epoch.count() < ((Duration::min)() + second).count()) + FMT_THROW(format_error("duration is too small")); + subsecs += second; + val -= second; + } + + return formatter::do_format(gmtime(val), ctx, &subsecs); + } + + return formatter::format(gmtime(val), ctx); + } +}; + +#if FMT_USE_LOCAL_TIME +template +struct formatter, Char> + : formatter { + FMT_CONSTEXPR formatter() { + this->format_str_ = detail::string_literal{}; + } + + template + auto format(std::chrono::local_time val, FormatContext& ctx) const + -> decltype(ctx.out()) { + using period = typename Duration::period; + if (period::num != 1 || period::den != 1 || + std::is_floating_point::value) { + const auto epoch = val.time_since_epoch(); + const auto subsecs = detail::fmt_duration_cast( + epoch - detail::fmt_duration_cast(epoch)); + + return formatter::do_format(localtime(val), ctx, &subsecs); + } + + return formatter::format(localtime(val), ctx); + } +}; +#endif + +#if FMT_USE_UTC_TIME +template +struct formatter, + Char> + : formatter, + Char> { + template + auto format(std::chrono::time_point val, + FormatContext& ctx) const -> decltype(ctx.out()) { + return formatter< + std::chrono::time_point, + Char>::format(std::chrono::utc_clock::to_sys(val), ctx); + } +}; +#endif + +template struct formatter { + private: + format_specs specs_; + detail::arg_ref width_ref_; + + protected: + basic_string_view format_str_; + + template + auto do_format(const std::tm& tm, FormatContext& ctx, + const Duration* subsecs) const -> decltype(ctx.out()) { + auto specs = specs_; + auto buf = basic_memory_buffer(); + auto out = std::back_inserter(buf); + detail::handle_dynamic_spec(specs.width, width_ref_, + ctx); + + auto loc_ref = ctx.locale(); + detail::get_locale loc(static_cast(loc_ref), loc_ref); + auto w = + detail::tm_writer(loc, out, tm, subsecs); + detail::parse_chrono_format(format_str_.begin(), format_str_.end(), w); + return detail::write( + ctx.out(), basic_string_view(buf.data(), buf.size()), specs); + } + + public: + FMT_CONSTEXPR auto parse(basic_format_parse_context& ctx) + -> decltype(ctx.begin()) { + auto it = ctx.begin(), end = ctx.end(); + if (it == end || *it == '}') return it; + + it = detail::parse_align(it, end, specs_); + if (it == end) return it; + + it = detail::parse_dynamic_spec(it, end, specs_.width, width_ref_, ctx); + if (it == end) return it; + + end = detail::parse_chrono_format(it, end, detail::tm_format_checker()); + // Replace the default format_str only if the new spec is not empty. + if (end != it) format_str_ = {it, detail::to_unsigned(end - it)}; + return end; + } + + template + auto format(const std::tm& tm, FormatContext& ctx) const + -> decltype(ctx.out()) { + return do_format(tm, ctx, nullptr); + } +}; + +FMT_END_EXPORT +FMT_END_NAMESPACE + +#endif // FMT_CHRONO_H_ diff --git a/third_party/tlRender-install-Release/include/OpenImageIO/detail/fmt/core.h b/third_party/tlRender-install-Release/include/OpenImageIO/detail/fmt/core.h new file mode 100644 index 00000000..b51c1406 --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenImageIO/detail/fmt/core.h @@ -0,0 +1,2969 @@ +// Formatting library for C++ - the core API for char/UTF-8 +// +// Copyright (c) 2012 - present, Victor Zverovich +// All rights reserved. +// +// For the license information refer to format.h. + +#ifndef FMT_CORE_H_ +#define FMT_CORE_H_ + +#include // std::byte +#include // std::FILE +#include // std::strlen +#include +#include +#include // std::addressof +#include +#include + +// The fmt library version in the form major * 10000 + minor * 100 + patch. +#define FMT_VERSION 100201 + +#if defined(__clang__) && !defined(__ibmxl__) +# define FMT_CLANG_VERSION (__clang_major__ * 100 + __clang_minor__) +#else +# define FMT_CLANG_VERSION 0 +#endif + +#if defined(__GNUC__) && !defined(__clang__) && !defined(__INTEL_COMPILER) && \ + !defined(__NVCOMPILER) +# define FMT_GCC_VERSION (__GNUC__ * 100 + __GNUC_MINOR__) +#else +# define FMT_GCC_VERSION 0 +#endif + +#ifndef FMT_GCC_PRAGMA +// Workaround _Pragma bug https://gcc.gnu.org/bugzilla/show_bug.cgi?id=59884. +# if FMT_GCC_VERSION >= 504 +# define FMT_GCC_PRAGMA(arg) _Pragma(arg) +# else +# define FMT_GCC_PRAGMA(arg) +# endif +#endif + +#ifdef __ICL +# define FMT_ICC_VERSION __ICL +#elif defined(__INTEL_COMPILER) +# define FMT_ICC_VERSION __INTEL_COMPILER +#else +# define FMT_ICC_VERSION 0 +#endif + +#ifdef _MSC_VER +# define FMT_MSC_VERSION _MSC_VER +# define FMT_MSC_WARNING(...) __pragma(warning(__VA_ARGS__)) +#else +# define FMT_MSC_VERSION 0 +# define FMT_MSC_WARNING(...) +#endif + +#ifdef _MSVC_LANG +# define FMT_CPLUSPLUS _MSVC_LANG +#else +# define FMT_CPLUSPLUS __cplusplus +#endif + +#ifdef __has_feature +# define FMT_HAS_FEATURE(x) __has_feature(x) +#else +# define FMT_HAS_FEATURE(x) 0 +#endif + +#if defined(__has_include) || FMT_ICC_VERSION >= 1600 || FMT_MSC_VERSION > 1900 +# define FMT_HAS_INCLUDE(x) __has_include(x) +#else +# define FMT_HAS_INCLUDE(x) 0 +#endif + +#ifdef __has_cpp_attribute +# define FMT_HAS_CPP_ATTRIBUTE(x) __has_cpp_attribute(x) +#else +# define FMT_HAS_CPP_ATTRIBUTE(x) 0 +#endif + +#define FMT_HAS_CPP14_ATTRIBUTE(attribute) \ + (FMT_CPLUSPLUS >= 201402L && FMT_HAS_CPP_ATTRIBUTE(attribute)) + +#define FMT_HAS_CPP17_ATTRIBUTE(attribute) \ + (FMT_CPLUSPLUS >= 201703L && FMT_HAS_CPP_ATTRIBUTE(attribute)) + +// Check if relaxed C++14 constexpr is supported. +// GCC doesn't allow throw in constexpr until version 6 (bug 67371). +#ifndef FMT_USE_CONSTEXPR +# if (FMT_HAS_FEATURE(cxx_relaxed_constexpr) || FMT_MSC_VERSION >= 1912 || \ + (FMT_GCC_VERSION >= 600 && FMT_CPLUSPLUS >= 201402L)) && \ + !FMT_ICC_VERSION && (!defined(__NVCC__) || FMT_CPLUSPLUS >= 202002L) +# define FMT_USE_CONSTEXPR 1 +# else +# define FMT_USE_CONSTEXPR 0 +# endif +#endif +#if FMT_USE_CONSTEXPR +# define FMT_CONSTEXPR constexpr +#else +# define FMT_CONSTEXPR +#endif + +#if (FMT_CPLUSPLUS >= 202002L || \ + (FMT_CPLUSPLUS >= 201709L && FMT_GCC_VERSION >= 1002)) && \ + ((!defined(_GLIBCXX_RELEASE) || _GLIBCXX_RELEASE >= 10) && \ + (!defined(_LIBCPP_VERSION) || _LIBCPP_VERSION >= 10000) && \ + (!FMT_MSC_VERSION || FMT_MSC_VERSION >= 1928)) && \ + defined(__cpp_lib_is_constant_evaluated) +# define FMT_CONSTEXPR20 constexpr +#else +# define FMT_CONSTEXPR20 +#endif + +// Check if constexpr std::char_traits<>::{compare,length} are supported. +#if defined(__GLIBCXX__) +# if FMT_CPLUSPLUS >= 201703L && defined(_GLIBCXX_RELEASE) && \ + _GLIBCXX_RELEASE >= 7 // GCC 7+ libstdc++ has _GLIBCXX_RELEASE. +# define FMT_CONSTEXPR_CHAR_TRAITS constexpr +# endif +#elif defined(_LIBCPP_VERSION) && FMT_CPLUSPLUS >= 201703L && \ + _LIBCPP_VERSION >= 4000 +# define FMT_CONSTEXPR_CHAR_TRAITS constexpr +#elif FMT_MSC_VERSION >= 1914 && FMT_CPLUSPLUS >= 201703L +# define FMT_CONSTEXPR_CHAR_TRAITS constexpr +#endif +#ifndef FMT_CONSTEXPR_CHAR_TRAITS +# define FMT_CONSTEXPR_CHAR_TRAITS +#endif + +// Check if exceptions are disabled. +#ifndef FMT_EXCEPTIONS +# if (defined(__GNUC__) && !defined(__EXCEPTIONS)) || \ + (FMT_MSC_VERSION && !_HAS_EXCEPTIONS) +# define FMT_EXCEPTIONS 0 +# else +# define FMT_EXCEPTIONS 1 +# endif +#endif + +// Disable [[noreturn]] on MSVC/NVCC because of bogus unreachable code warnings. +#if FMT_EXCEPTIONS && FMT_HAS_CPP_ATTRIBUTE(noreturn) && !FMT_MSC_VERSION && \ + !defined(__NVCC__) +# define FMT_NORETURN [[noreturn]] +#else +# define FMT_NORETURN +#endif + +#ifndef FMT_NODISCARD +# if FMT_HAS_CPP17_ATTRIBUTE(nodiscard) +# define FMT_NODISCARD [[nodiscard]] +# else +# define FMT_NODISCARD +# endif +#endif + +#ifndef FMT_INLINE +# if FMT_GCC_VERSION || FMT_CLANG_VERSION +# define FMT_INLINE inline __attribute__((always_inline)) +# else +# define FMT_INLINE inline +# endif +#endif + +#ifdef _MSC_VER +# define FMT_UNCHECKED_ITERATOR(It) \ + using _Unchecked_type = It // Mark iterator as checked. +#else +# define FMT_UNCHECKED_ITERATOR(It) using unchecked_type = It +#endif + +#ifndef FMT_BEGIN_NAMESPACE +# define FMT_BEGIN_NAMESPACE \ + namespace fmt { \ + inline namespace v10 { +# define FMT_END_NAMESPACE \ + } \ + } +#endif + +#ifndef FMT_EXPORT +# define FMT_EXPORT +# define FMT_BEGIN_EXPORT +# define FMT_END_EXPORT +#endif + +#if FMT_GCC_VERSION || FMT_CLANG_VERSION +# define FMT_VISIBILITY(value) __attribute__((visibility(value))) +#else +# define FMT_VISIBILITY(value) +#endif + +#if !defined(FMT_HEADER_ONLY) && defined(_WIN32) +# if defined(FMT_LIB_EXPORT) +# define FMT_API __declspec(dllexport) +# elif defined(FMT_SHARED) +# define FMT_API __declspec(dllimport) +# endif +#elif defined(FMT_LIB_EXPORT) || defined(FMT_SHARED) +# define FMT_API FMT_VISIBILITY("default") +#endif +#ifndef FMT_API +# define FMT_API +#endif + +// libc++ supports string_view in pre-c++17. +#if FMT_HAS_INCLUDE() && \ + (FMT_CPLUSPLUS >= 201703L || defined(_LIBCPP_VERSION)) +# include +# define FMT_USE_STRING_VIEW +#elif FMT_HAS_INCLUDE("experimental/string_view") && FMT_CPLUSPLUS >= 201402L +# include +# define FMT_USE_EXPERIMENTAL_STRING_VIEW +#endif + +#ifndef FMT_UNICODE +# define FMT_UNICODE !FMT_MSC_VERSION +#endif + +#ifndef FMT_CONSTEVAL +# if ((FMT_GCC_VERSION >= 1000 || FMT_CLANG_VERSION >= 1101) && \ + (!defined(__apple_build_version__) || \ + __apple_build_version__ >= 14000029L) && \ + FMT_CPLUSPLUS >= 202002L) || \ + (defined(__cpp_consteval) && \ + (!FMT_MSC_VERSION || FMT_MSC_VERSION >= 1929)) +// consteval is broken in MSVC before VS2019 version 16.10 and Apple clang +// before 14. +# define FMT_CONSTEVAL consteval +# define FMT_HAS_CONSTEVAL +# else +# define FMT_CONSTEVAL +# endif +#endif + +#ifndef FMT_USE_NONTYPE_TEMPLATE_ARGS +# if defined(__cpp_nontype_template_args) && \ + ((FMT_GCC_VERSION >= 903 && FMT_CPLUSPLUS >= 201709L) || \ + __cpp_nontype_template_args >= 201911L) && \ + !defined(__NVCOMPILER) && !defined(__LCC__) +# define FMT_USE_NONTYPE_TEMPLATE_ARGS 1 +# else +# define FMT_USE_NONTYPE_TEMPLATE_ARGS 0 +# endif +#endif + +// GCC < 5 requires this-> in decltype +#ifndef FMT_DECLTYPE_THIS +# if FMT_GCC_VERSION && FMT_GCC_VERSION < 500 +# define FMT_DECLTYPE_THIS this-> +# else +# define FMT_DECLTYPE_THIS +# endif +#endif + +// Enable minimal optimizations for more compact code in debug mode. +FMT_GCC_PRAGMA("GCC push_options") +#if !defined(__OPTIMIZE__) && !defined(__NVCOMPILER) && !defined(__LCC__) && \ + !defined(__CUDACC__) +FMT_GCC_PRAGMA("GCC optimize(\"Og\")") +#endif + +FMT_BEGIN_NAMESPACE + +// Implementations of enable_if_t and other metafunctions for older systems. +template +using enable_if_t = typename std::enable_if::type; +template +using conditional_t = typename std::conditional::type; +template using bool_constant = std::integral_constant; +template +using remove_reference_t = typename std::remove_reference::type; +template +using remove_const_t = typename std::remove_const::type; +template +using remove_cvref_t = typename std::remove_cv>::type; +template struct type_identity { + using type = T; +}; +template using type_identity_t = typename type_identity::type; +template +using underlying_t = typename std::underlying_type::type; + +// Checks whether T is a container with contiguous storage. +template struct is_contiguous : std::false_type {}; +template +struct is_contiguous> : std::true_type {}; + +struct monostate { + constexpr monostate() {} +}; + +// An enable_if helper to be used in template parameters which results in much +// shorter symbols: https://godbolt.org/z/sWw4vP. Extra parentheses are needed +// to workaround a bug in MSVC 2019 (see #1140 and #1186). +#ifdef FMT_DOC +# define FMT_ENABLE_IF(...) +#else +# define FMT_ENABLE_IF(...) fmt::enable_if_t<(__VA_ARGS__), int> = 0 +#endif + +// This is defined in core.h instead of format.h to avoid injecting in std. +// It is a template to avoid undesirable implicit conversions to std::byte. +#ifdef __cpp_lib_byte +template ::value)> +inline auto format_as(T b) -> unsigned char { + return static_cast(b); +} +#endif + +namespace detail { +// Suppresses "unused variable" warnings with the method described in +// https://herbsutter.com/2009/10/18/mailbag-shutting-up-compiler-warnings/. +// (void)var does not work on many Intel compilers. +template FMT_CONSTEXPR void ignore_unused(const T&...) {} + +constexpr FMT_INLINE auto is_constant_evaluated( + bool default_value = false) noexcept -> bool { +// Workaround for incompatibility between libstdc++ consteval-based +// std::is_constant_evaluated() implementation and clang-14. +// https://github.com/fmtlib/fmt/issues/3247 +#if FMT_CPLUSPLUS >= 202002L && defined(_GLIBCXX_RELEASE) && \ + _GLIBCXX_RELEASE >= 12 && \ + (FMT_CLANG_VERSION >= 1400 && FMT_CLANG_VERSION < 1500) + ignore_unused(default_value); + return __builtin_is_constant_evaluated(); +#elif defined(__cpp_lib_is_constant_evaluated) + ignore_unused(default_value); + return std::is_constant_evaluated(); +#else + return default_value; +#endif +} + +// Suppresses "conditional expression is constant" warnings. +template constexpr FMT_INLINE auto const_check(T value) -> T { + return value; +} + +FMT_NORETURN FMT_API void assert_fail(const char* file, int line, + const char* message); + +#ifndef FMT_ASSERT +# ifdef NDEBUG +// FMT_ASSERT is not empty to avoid -Wempty-body. +# define FMT_ASSERT(condition, message) \ + fmt::detail::ignore_unused((condition), (message)) +# else +# define FMT_ASSERT(condition, message) \ + ((condition) /* void() fails with -Winvalid-constexpr on clang 4.0.1 */ \ + ? (void)0 \ + : fmt::detail::assert_fail(__FILE__, __LINE__, (message))) +# endif +#endif + +#if defined(FMT_USE_STRING_VIEW) +template using std_string_view = std::basic_string_view; +#elif defined(FMT_USE_EXPERIMENTAL_STRING_VIEW) +template +using std_string_view = std::experimental::basic_string_view; +#else +template struct std_string_view {}; +#endif + +#ifdef FMT_USE_INT128 +// Do nothing. +#elif defined(__SIZEOF_INT128__) && !defined(__NVCC__) && \ + !(FMT_CLANG_VERSION && FMT_MSC_VERSION) +# define FMT_USE_INT128 1 +using int128_opt = __int128_t; // An optional native 128-bit integer. +using uint128_opt = __uint128_t; +template inline auto convert_for_visit(T value) -> T { + return value; +} +#else +# define FMT_USE_INT128 0 +#endif +#if !FMT_USE_INT128 +enum class int128_opt {}; +enum class uint128_opt {}; +// Reduce template instantiations. +template auto convert_for_visit(T) -> monostate { return {}; } +#endif + +// Casts a nonnegative integer to unsigned. +template +FMT_CONSTEXPR auto to_unsigned(Int value) -> + typename std::make_unsigned::type { + FMT_ASSERT(std::is_unsigned::value || value >= 0, "negative value"); + return static_cast::type>(value); +} + +FMT_CONSTEXPR inline auto is_utf8() -> bool { + FMT_MSC_WARNING(suppress : 4566) constexpr unsigned char section[] = "\u00A7"; + + // Avoid buggy sign extensions in MSVC's constant evaluation mode (#2297). + using uchar = unsigned char; + return FMT_UNICODE || (sizeof(section) == 3 && uchar(section[0]) == 0xC2 && + uchar(section[1]) == 0xA7); +} +} // namespace detail + +/** + An implementation of ``std::basic_string_view`` for pre-C++17. It provides a + subset of the API. ``fmt::basic_string_view`` is used for format strings even + if ``std::string_view`` is available to prevent issues when a library is + compiled with a different ``-std`` option than the client code (which is not + recommended). + */ +FMT_EXPORT +template class basic_string_view { + private: + const Char* data_; + size_t size_; + + public: + using value_type = Char; + using iterator = const Char*; + + constexpr basic_string_view() noexcept : data_(nullptr), size_(0) {} + + /** Constructs a string reference object from a C string and a size. */ + constexpr basic_string_view(const Char* s, size_t count) noexcept + : data_(s), size_(count) {} + + /** + \rst + Constructs a string reference object from a C string computing + the size with ``std::char_traits::length``. + \endrst + */ + FMT_CONSTEXPR_CHAR_TRAITS + FMT_INLINE + basic_string_view(const Char* s) + : data_(s), + size_(detail::const_check(std::is_same::value && + !detail::is_constant_evaluated(true)) + ? std::strlen(reinterpret_cast(s)) + : std::char_traits::length(s)) {} + + /** Constructs a string reference from a ``std::basic_string`` object. */ + template + FMT_CONSTEXPR basic_string_view( + const std::basic_string& s) noexcept + : data_(s.data()), size_(s.size()) {} + + template >::value)> + FMT_CONSTEXPR basic_string_view(S s) noexcept + : data_(s.data()), size_(s.size()) {} + + /** Returns a pointer to the string data. */ + constexpr auto data() const noexcept -> const Char* { return data_; } + + /** Returns the string size. */ + constexpr auto size() const noexcept -> size_t { return size_; } + + constexpr auto begin() const noexcept -> iterator { return data_; } + constexpr auto end() const noexcept -> iterator { return data_ + size_; } + + constexpr auto operator[](size_t pos) const noexcept -> const Char& { + return data_[pos]; + } + + FMT_CONSTEXPR void remove_prefix(size_t n) noexcept { + data_ += n; + size_ -= n; + } + + FMT_CONSTEXPR_CHAR_TRAITS auto starts_with( + basic_string_view sv) const noexcept -> bool { + return size_ >= sv.size_ && + std::char_traits::compare(data_, sv.data_, sv.size_) == 0; + } + FMT_CONSTEXPR_CHAR_TRAITS auto starts_with(Char c) const noexcept -> bool { + return size_ >= 1 && std::char_traits::eq(*data_, c); + } + FMT_CONSTEXPR_CHAR_TRAITS auto starts_with(const Char* s) const -> bool { + return starts_with(basic_string_view(s)); + } + + // Lexicographically compare this string reference to other. + FMT_CONSTEXPR_CHAR_TRAITS auto compare(basic_string_view other) const -> int { + size_t str_size = size_ < other.size_ ? size_ : other.size_; + int result = std::char_traits::compare(data_, other.data_, str_size); + if (result == 0) + result = size_ == other.size_ ? 0 : (size_ < other.size_ ? -1 : 1); + return result; + } + + FMT_CONSTEXPR_CHAR_TRAITS friend auto operator==(basic_string_view lhs, + basic_string_view rhs) + -> bool { + return lhs.compare(rhs) == 0; + } + friend auto operator!=(basic_string_view lhs, basic_string_view rhs) -> bool { + return lhs.compare(rhs) != 0; + } + friend auto operator<(basic_string_view lhs, basic_string_view rhs) -> bool { + return lhs.compare(rhs) < 0; + } + friend auto operator<=(basic_string_view lhs, basic_string_view rhs) -> bool { + return lhs.compare(rhs) <= 0; + } + friend auto operator>(basic_string_view lhs, basic_string_view rhs) -> bool { + return lhs.compare(rhs) > 0; + } + friend auto operator>=(basic_string_view lhs, basic_string_view rhs) -> bool { + return lhs.compare(rhs) >= 0; + } +}; + +FMT_EXPORT +using string_view = basic_string_view; + +/** Specifies if ``T`` is a character type. Can be specialized by users. */ +FMT_EXPORT +template struct is_char : std::false_type {}; +template <> struct is_char : std::true_type {}; + +namespace detail { + +// A base class for compile-time strings. +struct compile_string {}; + +template +struct is_compile_string : std::is_base_of {}; + +template ::value)> +FMT_INLINE auto to_string_view(const Char* s) -> basic_string_view { + return s; +} +template +inline auto to_string_view(const std::basic_string& s) + -> basic_string_view { + return s; +} +template +constexpr auto to_string_view(basic_string_view s) + -> basic_string_view { + return s; +} +template >::value)> +inline auto to_string_view(std_string_view s) -> basic_string_view { + return s; +} +template ::value)> +constexpr auto to_string_view(const S& s) + -> basic_string_view { + return basic_string_view(s); +} +void to_string_view(...); + +// Specifies whether S is a string type convertible to fmt::basic_string_view. +// It should be a constexpr function but MSVC 2017 fails to compile it in +// enable_if and MSVC 2015 fails to compile it as an alias template. +// ADL is intentionally disabled as to_string_view is not an extension point. +template +struct is_string + : std::is_class()))> {}; + +template struct char_t_impl {}; +template struct char_t_impl::value>> { + using result = decltype(to_string_view(std::declval())); + using type = typename result::value_type; +}; + +enum class type { + none_type, + // Integer types should go first, + int_type, + uint_type, + long_long_type, + ulong_long_type, + int128_type, + uint128_type, + bool_type, + char_type, + last_integer_type = char_type, + // followed by floating-point types. + float_type, + double_type, + long_double_type, + last_numeric_type = long_double_type, + cstring_type, + string_type, + pointer_type, + custom_type +}; + +// Maps core type T to the corresponding type enum constant. +template +struct type_constant : std::integral_constant {}; + +#define FMT_TYPE_CONSTANT(Type, constant) \ + template \ + struct type_constant \ + : std::integral_constant {} + +FMT_TYPE_CONSTANT(int, int_type); +FMT_TYPE_CONSTANT(unsigned, uint_type); +FMT_TYPE_CONSTANT(long long, long_long_type); +FMT_TYPE_CONSTANT(unsigned long long, ulong_long_type); +FMT_TYPE_CONSTANT(int128_opt, int128_type); +FMT_TYPE_CONSTANT(uint128_opt, uint128_type); +FMT_TYPE_CONSTANT(bool, bool_type); +FMT_TYPE_CONSTANT(Char, char_type); +FMT_TYPE_CONSTANT(float, float_type); +FMT_TYPE_CONSTANT(double, double_type); +FMT_TYPE_CONSTANT(long double, long_double_type); +FMT_TYPE_CONSTANT(const Char*, cstring_type); +FMT_TYPE_CONSTANT(basic_string_view, string_type); +FMT_TYPE_CONSTANT(const void*, pointer_type); + +constexpr auto is_integral_type(type t) -> bool { + return t > type::none_type && t <= type::last_integer_type; +} +constexpr auto is_arithmetic_type(type t) -> bool { + return t > type::none_type && t <= type::last_numeric_type; +} + +constexpr auto set(type rhs) -> int { return 1 << static_cast(rhs); } +constexpr auto in(type t, int set) -> bool { + return ((set >> static_cast(t)) & 1) != 0; +} + +// Bitsets of types. +enum { + sint_set = + set(type::int_type) | set(type::long_long_type) | set(type::int128_type), + uint_set = set(type::uint_type) | set(type::ulong_long_type) | + set(type::uint128_type), + bool_set = set(type::bool_type), + char_set = set(type::char_type), + float_set = set(type::float_type) | set(type::double_type) | + set(type::long_double_type), + string_set = set(type::string_type), + cstring_set = set(type::cstring_type), + pointer_set = set(type::pointer_type) +}; + +// DEPRECATED! +FMT_NORETURN FMT_API void throw_format_error(const char* message); + +struct error_handler { + constexpr error_handler() = default; + + // This function is intentionally not constexpr to give a compile-time error. + FMT_NORETURN void on_error(const char* message) { + throw_format_error(message); + } +}; +} // namespace detail + +/** Throws ``format_error`` with a given message. */ +using detail::throw_format_error; + +/** String's character type. */ +template using char_t = typename detail::char_t_impl::type; + +/** + \rst + Parsing context consisting of a format string range being parsed and an + argument counter for automatic indexing. + You can use the ``format_parse_context`` type alias for ``char`` instead. + \endrst + */ +FMT_EXPORT +template class basic_format_parse_context { + private: + basic_string_view format_str_; + int next_arg_id_; + + FMT_CONSTEXPR void do_check_arg_id(int id); + + public: + using char_type = Char; + using iterator = const Char*; + + explicit constexpr basic_format_parse_context( + basic_string_view format_str, int next_arg_id = 0) + : format_str_(format_str), next_arg_id_(next_arg_id) {} + + /** + Returns an iterator to the beginning of the format string range being + parsed. + */ + constexpr auto begin() const noexcept -> iterator { + return format_str_.begin(); + } + + /** + Returns an iterator past the end of the format string range being parsed. + */ + constexpr auto end() const noexcept -> iterator { return format_str_.end(); } + + /** Advances the begin iterator to ``it``. */ + FMT_CONSTEXPR void advance_to(iterator it) { + format_str_.remove_prefix(detail::to_unsigned(it - begin())); + } + + /** + Reports an error if using the manual argument indexing; otherwise returns + the next argument index and switches to the automatic indexing. + */ + FMT_CONSTEXPR auto next_arg_id() -> int { + if (next_arg_id_ < 0) { + detail::throw_format_error( + "cannot switch from manual to automatic argument indexing"); + return 0; + } + int id = next_arg_id_++; + do_check_arg_id(id); + return id; + } + + /** + Reports an error if using the automatic argument indexing; otherwise + switches to the manual indexing. + */ + FMT_CONSTEXPR void check_arg_id(int id) { + if (next_arg_id_ > 0) { + detail::throw_format_error( + "cannot switch from automatic to manual argument indexing"); + return; + } + next_arg_id_ = -1; + do_check_arg_id(id); + } + FMT_CONSTEXPR void check_arg_id(basic_string_view) {} + FMT_CONSTEXPR void check_dynamic_spec(int arg_id); +}; + +FMT_EXPORT +using format_parse_context = basic_format_parse_context; + +namespace detail { +// A parse context with extra data used only in compile-time checks. +template +class compile_parse_context : public basic_format_parse_context { + private: + int num_args_; + const type* types_; + using base = basic_format_parse_context; + + public: + explicit FMT_CONSTEXPR compile_parse_context( + basic_string_view format_str, int num_args, const type* types, + int next_arg_id = 0) + : base(format_str, next_arg_id), num_args_(num_args), types_(types) {} + + constexpr auto num_args() const -> int { return num_args_; } + constexpr auto arg_type(int id) const -> type { return types_[id]; } + + FMT_CONSTEXPR auto next_arg_id() -> int { + int id = base::next_arg_id(); + if (id >= num_args_) throw_format_error("argument not found"); + return id; + } + + FMT_CONSTEXPR void check_arg_id(int id) { + base::check_arg_id(id); + if (id >= num_args_) throw_format_error("argument not found"); + } + using base::check_arg_id; + + FMT_CONSTEXPR void check_dynamic_spec(int arg_id) { + detail::ignore_unused(arg_id); +#if !defined(__LCC__) + if (arg_id < num_args_ && types_ && !is_integral_type(types_[arg_id])) + throw_format_error("width/precision is not integer"); +#endif + } +}; + +// Extracts a reference to the container from back_insert_iterator. +template +inline auto get_container(std::back_insert_iterator it) + -> Container& { + using base = std::back_insert_iterator; + struct accessor : base { + accessor(base b) : base(b) {} + using base::container; + }; + return *accessor(it).container; +} + +template +FMT_CONSTEXPR auto copy_str(InputIt begin, InputIt end, OutputIt out) + -> OutputIt { + while (begin != end) *out++ = static_cast(*begin++); + return out; +} + +template , U>::value&& is_char::value)> +FMT_CONSTEXPR auto copy_str(T* begin, T* end, U* out) -> U* { + if (is_constant_evaluated()) return copy_str(begin, end, out); + auto size = to_unsigned(end - begin); + if (size > 0) memcpy(out, begin, size * sizeof(U)); + return out + size; +} + +/** + \rst + A contiguous memory buffer with an optional growing ability. It is an internal + class and shouldn't be used directly, only via `~fmt::basic_memory_buffer`. + \endrst + */ +template class buffer { + private: + T* ptr_; + size_t size_; + size_t capacity_; + + protected: + // Don't initialize ptr_ since it is not accessed to save a few cycles. + FMT_MSC_WARNING(suppress : 26495) + FMT_CONSTEXPR buffer(size_t sz) noexcept : size_(sz), capacity_(sz) {} + + FMT_CONSTEXPR20 buffer(T* p = nullptr, size_t sz = 0, size_t cap = 0) noexcept + : ptr_(p), size_(sz), capacity_(cap) {} + + FMT_CONSTEXPR20 ~buffer() = default; + buffer(buffer&&) = default; + + /** Sets the buffer data and capacity. */ + FMT_CONSTEXPR void set(T* buf_data, size_t buf_capacity) noexcept { + ptr_ = buf_data; + capacity_ = buf_capacity; + } + + /** Increases the buffer capacity to hold at least *capacity* elements. */ + // DEPRECATED! + virtual FMT_CONSTEXPR20 void grow(size_t capacity) = 0; + + public: + using value_type = T; + using const_reference = const T&; + + buffer(const buffer&) = delete; + void operator=(const buffer&) = delete; + + FMT_INLINE auto begin() noexcept -> T* { return ptr_; } + FMT_INLINE auto end() noexcept -> T* { return ptr_ + size_; } + + FMT_INLINE auto begin() const noexcept -> const T* { return ptr_; } + FMT_INLINE auto end() const noexcept -> const T* { return ptr_ + size_; } + + /** Returns the size of this buffer. */ + constexpr auto size() const noexcept -> size_t { return size_; } + + /** Returns the capacity of this buffer. */ + constexpr auto capacity() const noexcept -> size_t { return capacity_; } + + /** Returns a pointer to the buffer data (not null-terminated). */ + FMT_CONSTEXPR auto data() noexcept -> T* { return ptr_; } + FMT_CONSTEXPR auto data() const noexcept -> const T* { return ptr_; } + + /** Clears this buffer. */ + void clear() { size_ = 0; } + + // Tries resizing the buffer to contain *count* elements. If T is a POD type + // the new elements may not be initialized. + FMT_CONSTEXPR20 void try_resize(size_t count) { + try_reserve(count); + size_ = count <= capacity_ ? count : capacity_; + } + + // Tries increasing the buffer capacity to *new_capacity*. It can increase the + // capacity by a smaller amount than requested but guarantees there is space + // for at least one additional element either by increasing the capacity or by + // flushing the buffer if it is full. + FMT_CONSTEXPR20 void try_reserve(size_t new_capacity) { + if (new_capacity > capacity_) grow(new_capacity); + } + + FMT_CONSTEXPR20 void push_back(const T& value) { + try_reserve(size_ + 1); + ptr_[size_++] = value; + } + + /** Appends data to the end of the buffer. */ + template void append(const U* begin, const U* end); + + template FMT_CONSTEXPR auto operator[](Idx index) -> T& { + return ptr_[index]; + } + template + FMT_CONSTEXPR auto operator[](Idx index) const -> const T& { + return ptr_[index]; + } +}; + +struct buffer_traits { + explicit buffer_traits(size_t) {} + auto count() const -> size_t { return 0; } + auto limit(size_t size) -> size_t { return size; } +}; + +class fixed_buffer_traits { + private: + size_t count_ = 0; + size_t limit_; + + public: + explicit fixed_buffer_traits(size_t limit) : limit_(limit) {} + auto count() const -> size_t { return count_; } + auto limit(size_t size) -> size_t { + size_t n = limit_ > count_ ? limit_ - count_ : 0; + count_ += size; + return size < n ? size : n; + } +}; + +// A buffer that writes to an output iterator when flushed. +template +class iterator_buffer final : public Traits, public buffer { + private: + OutputIt out_; + enum { buffer_size = 256 }; + T data_[buffer_size]; + + protected: + FMT_CONSTEXPR20 void grow(size_t) override { + if (this->size() == buffer_size) flush(); + } + + void flush() { + auto size = this->size(); + this->clear(); + out_ = copy_str(data_, data_ + this->limit(size), out_); + } + + public: + explicit iterator_buffer(OutputIt out, size_t n = buffer_size) + : Traits(n), buffer(data_, 0, buffer_size), out_(out) {} + iterator_buffer(iterator_buffer&& other) + : Traits(other), buffer(data_, 0, buffer_size), out_(other.out_) {} + ~iterator_buffer() { flush(); } + + auto out() -> OutputIt { + flush(); + return out_; + } + auto count() const -> size_t { return Traits::count() + this->size(); } +}; + +template +class iterator_buffer final + : public fixed_buffer_traits, + public buffer { + private: + T* out_; + enum { buffer_size = 256 }; + T data_[buffer_size]; + + protected: + FMT_CONSTEXPR20 void grow(size_t) override { + if (this->size() == this->capacity()) flush(); + } + + void flush() { + size_t n = this->limit(this->size()); + if (this->data() == out_) { + out_ += n; + this->set(data_, buffer_size); + } + this->clear(); + } + + public: + explicit iterator_buffer(T* out, size_t n = buffer_size) + : fixed_buffer_traits(n), buffer(out, 0, n), out_(out) {} + iterator_buffer(iterator_buffer&& other) + : fixed_buffer_traits(other), + buffer(std::move(other)), + out_(other.out_) { + if (this->data() != out_) { + this->set(data_, buffer_size); + this->clear(); + } + } + ~iterator_buffer() { flush(); } + + auto out() -> T* { + flush(); + return out_; + } + auto count() const -> size_t { + return fixed_buffer_traits::count() + this->size(); + } +}; + +template class iterator_buffer final : public buffer { + protected: + FMT_CONSTEXPR20 void grow(size_t) override {} + + public: + explicit iterator_buffer(T* out, size_t = 0) : buffer(out, 0, ~size_t()) {} + + auto out() -> T* { return &*this->end(); } +}; + +// A buffer that writes to a container with the contiguous storage. +template +class iterator_buffer, + enable_if_t::value, + typename Container::value_type>> + final : public buffer { + private: + Container& container_; + + protected: + FMT_CONSTEXPR20 void grow(size_t capacity) override { + container_.resize(capacity); + this->set(&container_[0], capacity); + } + + public: + explicit iterator_buffer(Container& c) + : buffer(c.size()), container_(c) {} + explicit iterator_buffer(std::back_insert_iterator out, size_t = 0) + : iterator_buffer(get_container(out)) {} + + auto out() -> std::back_insert_iterator { + return std::back_inserter(container_); + } +}; + +// A buffer that counts the number of code units written discarding the output. +template class counting_buffer final : public buffer { + private: + enum { buffer_size = 256 }; + T data_[buffer_size]; + size_t count_ = 0; + + protected: + FMT_CONSTEXPR20 void grow(size_t) override { + if (this->size() != buffer_size) return; + count_ += this->size(); + this->clear(); + } + + public: + counting_buffer() : buffer(data_, 0, buffer_size) {} + + auto count() -> size_t { return count_ + this->size(); } +}; +} // namespace detail + +template +FMT_CONSTEXPR void basic_format_parse_context::do_check_arg_id(int id) { + // Argument id is only checked at compile-time during parsing because + // formatting has its own validation. + if (detail::is_constant_evaluated() && + (!FMT_GCC_VERSION || FMT_GCC_VERSION >= 1200)) { + using context = detail::compile_parse_context; + if (id >= static_cast(this)->num_args()) + detail::throw_format_error("argument not found"); + } +} + +template +FMT_CONSTEXPR void basic_format_parse_context::check_dynamic_spec( + int arg_id) { + if (detail::is_constant_evaluated() && + (!FMT_GCC_VERSION || FMT_GCC_VERSION >= 1200)) { + using context = detail::compile_parse_context; + static_cast(this)->check_dynamic_spec(arg_id); + } +} + +FMT_EXPORT template class basic_format_arg; +FMT_EXPORT template class basic_format_args; +FMT_EXPORT template class dynamic_format_arg_store; + +// A formatter for objects of type T. +FMT_EXPORT +template +struct formatter { + // A deleted default constructor indicates a disabled formatter. + formatter() = delete; +}; + +// Specifies if T has an enabled formatter specialization. A type can be +// formattable even if it doesn't have a formatter e.g. via a conversion. +template +using has_formatter = + std::is_constructible>; + +// An output iterator that appends to a buffer. +// It is used to reduce symbol sizes for the common case. +class appender : public std::back_insert_iterator> { + using base = std::back_insert_iterator>; + + public: + using std::back_insert_iterator>::back_insert_iterator; + appender(base it) noexcept : base(it) {} + FMT_UNCHECKED_ITERATOR(appender); + + auto operator++() noexcept -> appender& { return *this; } + auto operator++(int) noexcept -> appender { return *this; } +}; + +namespace detail { + +template +constexpr auto has_const_formatter_impl(T*) + -> decltype(typename Context::template formatter_type().format( + std::declval(), std::declval()), + true) { + return true; +} +template +constexpr auto has_const_formatter_impl(...) -> bool { + return false; +} +template +constexpr auto has_const_formatter() -> bool { + return has_const_formatter_impl(static_cast(nullptr)); +} + +template +using buffer_appender = conditional_t::value, appender, + std::back_insert_iterator>>; + +// Maps an output iterator to a buffer. +template +auto get_buffer(OutputIt out) -> iterator_buffer { + return iterator_buffer(out); +} +template , Buf>::value)> +auto get_buffer(std::back_insert_iterator out) -> buffer& { + return get_container(out); +} + +template +FMT_INLINE auto get_iterator(Buf& buf, OutputIt) -> decltype(buf.out()) { + return buf.out(); +} +template +auto get_iterator(buffer&, OutputIt out) -> OutputIt { + return out; +} + +struct view {}; + +template struct named_arg : view { + const Char* name; + const T& value; + named_arg(const Char* n, const T& v) : name(n), value(v) {} +}; + +template struct named_arg_info { + const Char* name; + int id; +}; + +template +struct arg_data { + // args_[0].named_args points to named_args_ to avoid bloating format_args. + // +1 to workaround a bug in gcc 7.5 that causes duplicated-branches warning. + T args_[1 + (NUM_ARGS != 0 ? NUM_ARGS : +1)]; + named_arg_info named_args_[NUM_NAMED_ARGS]; + + template + arg_data(const U&... init) : args_{T(named_args_, NUM_NAMED_ARGS), init...} {} + arg_data(const arg_data& other) = delete; + auto args() const -> const T* { return args_ + 1; } + auto named_args() -> named_arg_info* { return named_args_; } +}; + +template +struct arg_data { + // +1 to workaround a bug in gcc 7.5 that causes duplicated-branches warning. + T args_[NUM_ARGS != 0 ? NUM_ARGS : +1]; + + template + FMT_CONSTEXPR FMT_INLINE arg_data(const U&... init) : args_{init...} {} + FMT_CONSTEXPR FMT_INLINE auto args() const -> const T* { return args_; } + FMT_CONSTEXPR FMT_INLINE auto named_args() -> std::nullptr_t { + return nullptr; + } +}; + +template +inline void init_named_args(named_arg_info*, int, int) {} + +template struct is_named_arg : std::false_type {}; +template struct is_statically_named_arg : std::false_type {}; + +template +struct is_named_arg> : std::true_type {}; + +template ::value)> +void init_named_args(named_arg_info* named_args, int arg_count, + int named_arg_count, const T&, const Tail&... args) { + init_named_args(named_args, arg_count + 1, named_arg_count, args...); +} + +template ::value)> +void init_named_args(named_arg_info* named_args, int arg_count, + int named_arg_count, const T& arg, const Tail&... args) { + named_args[named_arg_count++] = {arg.name, arg_count}; + init_named_args(named_args, arg_count + 1, named_arg_count, args...); +} + +template +FMT_CONSTEXPR FMT_INLINE void init_named_args(std::nullptr_t, int, int, + const Args&...) {} + +template constexpr auto count() -> size_t { return B ? 1 : 0; } +template constexpr auto count() -> size_t { + return (B1 ? 1 : 0) + count(); +} + +template constexpr auto count_named_args() -> size_t { + return count::value...>(); +} + +template +constexpr auto count_statically_named_args() -> size_t { + return count::value...>(); +} + +struct unformattable {}; +struct unformattable_char : unformattable {}; +struct unformattable_pointer : unformattable {}; + +template struct string_value { + const Char* data; + size_t size; +}; + +template struct named_arg_value { + const named_arg_info* data; + size_t size; +}; + +template struct custom_value { + using parse_context = typename Context::parse_context_type; + void* value; + void (*format)(void* arg, parse_context& parse_ctx, Context& ctx); +}; + +// A formatting argument value. +template class value { + public: + using char_type = typename Context::char_type; + + union { + monostate no_value; + int int_value; + unsigned uint_value; + long long long_long_value; + unsigned long long ulong_long_value; + int128_opt int128_value; + uint128_opt uint128_value; + bool bool_value; + char_type char_value; + float float_value; + double double_value; + long double long_double_value; + const void* pointer; + string_value string; + custom_value custom; + named_arg_value named_args; + }; + + constexpr FMT_INLINE value() : no_value() {} + constexpr FMT_INLINE value(int val) : int_value(val) {} + constexpr FMT_INLINE value(unsigned val) : uint_value(val) {} + constexpr FMT_INLINE value(long long val) : long_long_value(val) {} + constexpr FMT_INLINE value(unsigned long long val) : ulong_long_value(val) {} + FMT_INLINE value(int128_opt val) : int128_value(val) {} + FMT_INLINE value(uint128_opt val) : uint128_value(val) {} + constexpr FMT_INLINE value(float val) : float_value(val) {} + constexpr FMT_INLINE value(double val) : double_value(val) {} + FMT_INLINE value(long double val) : long_double_value(val) {} + constexpr FMT_INLINE value(bool val) : bool_value(val) {} + constexpr FMT_INLINE value(char_type val) : char_value(val) {} + FMT_CONSTEXPR FMT_INLINE value(const char_type* val) { + string.data = val; + if (is_constant_evaluated()) string.size = {}; + } + FMT_CONSTEXPR FMT_INLINE value(basic_string_view val) { + string.data = val.data(); + string.size = val.size(); + } + FMT_INLINE value(const void* val) : pointer(val) {} + FMT_INLINE value(const named_arg_info* args, size_t size) + : named_args{args, size} {} + + template FMT_CONSTEXPR20 FMT_INLINE value(T& val) { + using value_type = remove_const_t; + custom.value = const_cast(std::addressof(val)); + // Get the formatter type through the context to allow different contexts + // have different extension points, e.g. `formatter` for `format` and + // `printf_formatter` for `printf`. + custom.format = format_custom_arg< + value_type, typename Context::template formatter_type>; + } + value(unformattable); + value(unformattable_char); + value(unformattable_pointer); + + private: + // Formats an argument of a custom type, such as a user-defined class. + template + static void format_custom_arg(void* arg, + typename Context::parse_context_type& parse_ctx, + Context& ctx) { + auto f = Formatter(); + parse_ctx.advance_to(f.parse(parse_ctx)); + using qualified_type = + conditional_t(), const T, T>; + // Calling format through a mutable reference is deprecated. + ctx.advance_to(f.format(*static_cast(arg), ctx)); + } +}; + +// To minimize the number of types we need to deal with, long is translated +// either to int or to long long depending on its size. +enum { long_short = sizeof(long) == sizeof(int) }; +using long_type = conditional_t; +using ulong_type = conditional_t; + +template struct format_as_result { + template ::value || std::is_class::value)> + static auto map(U*) -> remove_cvref_t()))>; + static auto map(...) -> void; + + using type = decltype(map(static_cast(nullptr))); +}; +template using format_as_t = typename format_as_result::type; + +template +struct has_format_as + : bool_constant, void>::value> {}; + +// Maps formatting arguments to core types. +// arg_mapper reports errors by returning unformattable instead of using +// static_assert because it's used in the is_formattable trait. +template struct arg_mapper { + using char_type = typename Context::char_type; + + FMT_CONSTEXPR FMT_INLINE auto map(signed char val) -> int { return val; } + FMT_CONSTEXPR FMT_INLINE auto map(unsigned char val) -> unsigned { + return val; + } + FMT_CONSTEXPR FMT_INLINE auto map(short val) -> int { return val; } + FMT_CONSTEXPR FMT_INLINE auto map(unsigned short val) -> unsigned { + return val; + } + FMT_CONSTEXPR FMT_INLINE auto map(int val) -> int { return val; } + FMT_CONSTEXPR FMT_INLINE auto map(unsigned val) -> unsigned { return val; } + FMT_CONSTEXPR FMT_INLINE auto map(long val) -> long_type { return val; } + FMT_CONSTEXPR FMT_INLINE auto map(unsigned long val) -> ulong_type { + return val; + } + FMT_CONSTEXPR FMT_INLINE auto map(long long val) -> long long { return val; } + FMT_CONSTEXPR FMT_INLINE auto map(unsigned long long val) + -> unsigned long long { + return val; + } + FMT_CONSTEXPR FMT_INLINE auto map(int128_opt val) -> int128_opt { + return val; + } + FMT_CONSTEXPR FMT_INLINE auto map(uint128_opt val) -> uint128_opt { + return val; + } + FMT_CONSTEXPR FMT_INLINE auto map(bool val) -> bool { return val; } + + template ::value || + std::is_same::value)> + FMT_CONSTEXPR FMT_INLINE auto map(T val) -> char_type { + return val; + } + template ::value || +#ifdef __cpp_char8_t + std::is_same::value || +#endif + std::is_same::value || + std::is_same::value) && + !std::is_same::value, + int> = 0> + FMT_CONSTEXPR FMT_INLINE auto map(T) -> unformattable_char { + return {}; + } + + FMT_CONSTEXPR FMT_INLINE auto map(float val) -> float { return val; } + FMT_CONSTEXPR FMT_INLINE auto map(double val) -> double { return val; } + FMT_CONSTEXPR FMT_INLINE auto map(long double val) -> long double { + return val; + } + + FMT_CONSTEXPR FMT_INLINE auto map(char_type* val) -> const char_type* { + return val; + } + FMT_CONSTEXPR FMT_INLINE auto map(const char_type* val) -> const char_type* { + return val; + } + template ::value && !std::is_pointer::value && + std::is_same>::value)> + FMT_CONSTEXPR FMT_INLINE auto map(const T& val) + -> basic_string_view { + return to_string_view(val); + } + template ::value && !std::is_pointer::value && + !std::is_same>::value)> + FMT_CONSTEXPR FMT_INLINE auto map(const T&) -> unformattable_char { + return {}; + } + + FMT_CONSTEXPR FMT_INLINE auto map(void* val) -> const void* { return val; } + FMT_CONSTEXPR FMT_INLINE auto map(const void* val) -> const void* { + return val; + } + FMT_CONSTEXPR FMT_INLINE auto map(std::nullptr_t val) -> const void* { + return val; + } + + // Use SFINAE instead of a const T* parameter to avoid a conflict with the + // array overload. + template < + typename T, + FMT_ENABLE_IF( + std::is_pointer::value || std::is_member_pointer::value || + std::is_function::type>::value || + (std::is_array::value && + !std::is_convertible::value))> + FMT_CONSTEXPR auto map(const T&) -> unformattable_pointer { + return {}; + } + + template ::value)> + FMT_CONSTEXPR FMT_INLINE auto map(const T (&values)[N]) -> const T (&)[N] { + return values; + } + + // Only map owning types because mapping views can be unsafe. + template , + FMT_ENABLE_IF(std::is_arithmetic::value)> + FMT_CONSTEXPR FMT_INLINE auto map(const T& val) + -> decltype(FMT_DECLTYPE_THIS map(U())) { + return map(format_as(val)); + } + + template > + struct formattable : bool_constant() || + (has_formatter::value && + !std::is_const::value)> {}; + + template ::value)> + FMT_CONSTEXPR FMT_INLINE auto do_map(T& val) -> T& { + return val; + } + template ::value)> + FMT_CONSTEXPR FMT_INLINE auto do_map(T&) -> unformattable { + return {}; + } + + template , + FMT_ENABLE_IF((std::is_class::value || std::is_enum::value || + std::is_union::value) && + !is_string::value && !is_char::value && + !is_named_arg::value && + !std::is_arithmetic>::value)> + FMT_CONSTEXPR FMT_INLINE auto map(T& val) + -> decltype(FMT_DECLTYPE_THIS do_map(val)) { + return do_map(val); + } + + template ::value)> + FMT_CONSTEXPR FMT_INLINE auto map(const T& named_arg) + -> decltype(FMT_DECLTYPE_THIS map(named_arg.value)) { + return map(named_arg.value); + } + + auto map(...) -> unformattable { return {}; } +}; + +// A type constant after applying arg_mapper. +template +using mapped_type_constant = + type_constant().map(std::declval())), + typename Context::char_type>; + +enum { packed_arg_bits = 4 }; +// Maximum number of arguments with packed types. +enum { max_packed_args = 62 / packed_arg_bits }; +enum : unsigned long long { is_unpacked_bit = 1ULL << 63 }; +enum : unsigned long long { has_named_args_bit = 1ULL << 62 }; + +template +auto copy_str(InputIt begin, InputIt end, appender out) -> appender { + get_container(out).append(begin, end); + return out; +} +template +auto copy_str(InputIt begin, InputIt end, + std::back_insert_iterator out) + -> std::back_insert_iterator { + get_container(out).append(begin, end); + return out; +} + +template +FMT_CONSTEXPR auto copy_str(R&& rng, OutputIt out) -> OutputIt { + return detail::copy_str(rng.begin(), rng.end(), out); +} + +#if FMT_GCC_VERSION && FMT_GCC_VERSION < 500 +// A workaround for gcc 4.8 to make void_t work in a SFINAE context. +template struct void_t_impl { + using type = void; +}; +template using void_t = typename void_t_impl::type; +#else +template using void_t = void; +#endif + +template +struct is_output_iterator : std::false_type {}; + +template +struct is_output_iterator< + It, T, + void_t::iterator_category, + decltype(*std::declval() = std::declval())>> + : std::true_type {}; + +template struct is_back_insert_iterator : std::false_type {}; +template +struct is_back_insert_iterator> + : std::true_type {}; + +// A type-erased reference to an std::locale to avoid a heavy include. +class locale_ref { + private: + const void* locale_; // A type-erased pointer to std::locale. + + public: + constexpr FMT_INLINE locale_ref() : locale_(nullptr) {} + template explicit locale_ref(const Locale& loc); + + explicit operator bool() const noexcept { return locale_ != nullptr; } + + template auto get() const -> Locale; +}; + +template constexpr auto encode_types() -> unsigned long long { + return 0; +} + +template +constexpr auto encode_types() -> unsigned long long { + return static_cast(mapped_type_constant::value) | + (encode_types() << packed_arg_bits); +} + +#if defined(__cpp_if_constexpr) +// This type is intentionally undefined, only used for errors +template struct type_is_unformattable_for; +#endif + +template +FMT_CONSTEXPR FMT_INLINE auto make_arg(T& val) -> value { + using arg_type = remove_cvref_t().map(val))>; + + constexpr bool formattable_char = + !std::is_same::value; + static_assert(formattable_char, "Mixing character types is disallowed."); + + // Formatting of arbitrary pointers is disallowed. If you want to format a + // pointer cast it to `void*` or `const void*`. In particular, this forbids + // formatting of `[const] volatile char*` printed as bool by iostreams. + constexpr bool formattable_pointer = + !std::is_same::value; + static_assert(formattable_pointer, + "Formatting of non-void pointers is disallowed."); + + constexpr bool formattable = !std::is_same::value; +#if defined(__cpp_if_constexpr) + if constexpr (!formattable) { + type_is_unformattable_for _; + } +#endif + static_assert( + formattable, + "Cannot format an argument. To make type T formattable provide a " + "formatter specialization: https://fmt.dev/latest/api.html#udt"); + return {arg_mapper().map(val)}; +} + +template +FMT_CONSTEXPR auto make_arg(T& val) -> basic_format_arg { + auto arg = basic_format_arg(); + arg.type_ = mapped_type_constant::value; + arg.value_ = make_arg(val); + return arg; +} + +template +FMT_CONSTEXPR inline auto make_arg(T& val) -> basic_format_arg { + return make_arg(val); +} +} // namespace detail +FMT_BEGIN_EXPORT + +// A formatting argument. Context is a template parameter for the compiled API +// where output can be unbuffered. +template class basic_format_arg { + private: + detail::value value_; + detail::type type_; + + template + friend FMT_CONSTEXPR auto detail::make_arg(T& value) + -> basic_format_arg; + + template + friend FMT_CONSTEXPR auto visit_format_arg(Visitor&& vis, + const basic_format_arg& arg) + -> decltype(vis(0)); + + friend class basic_format_args; + friend class dynamic_format_arg_store; + + using char_type = typename Context::char_type; + + template + friend struct detail::arg_data; + + basic_format_arg(const detail::named_arg_info* args, size_t size) + : value_(args, size) {} + + public: + class handle { + public: + explicit handle(detail::custom_value custom) : custom_(custom) {} + + void format(typename Context::parse_context_type& parse_ctx, + Context& ctx) const { + custom_.format(custom_.value, parse_ctx, ctx); + } + + private: + detail::custom_value custom_; + }; + + constexpr basic_format_arg() : type_(detail::type::none_type) {} + + constexpr explicit operator bool() const noexcept { + return type_ != detail::type::none_type; + } + + auto type() const -> detail::type { return type_; } + + auto is_integral() const -> bool { return detail::is_integral_type(type_); } + auto is_arithmetic() const -> bool { + return detail::is_arithmetic_type(type_); + } + + FMT_INLINE auto format_custom(const char_type* parse_begin, + typename Context::parse_context_type& parse_ctx, + Context& ctx) -> bool { + if (type_ != detail::type::custom_type) return false; + parse_ctx.advance_to(parse_begin); + value_.custom.format(value_.custom.value, parse_ctx, ctx); + return true; + } +}; + +/** + \rst + Visits an argument dispatching to the appropriate visit method based on + the argument type. For example, if the argument type is ``double`` then + ``vis(value)`` will be called with the value of type ``double``. + \endrst + */ +// DEPRECATED! +template +FMT_CONSTEXPR FMT_INLINE auto visit_format_arg( + Visitor&& vis, const basic_format_arg& arg) -> decltype(vis(0)) { + switch (arg.type_) { + case detail::type::none_type: + break; + case detail::type::int_type: + return vis(arg.value_.int_value); + case detail::type::uint_type: + return vis(arg.value_.uint_value); + case detail::type::long_long_type: + return vis(arg.value_.long_long_value); + case detail::type::ulong_long_type: + return vis(arg.value_.ulong_long_value); + case detail::type::int128_type: + return vis(detail::convert_for_visit(arg.value_.int128_value)); + case detail::type::uint128_type: + return vis(detail::convert_for_visit(arg.value_.uint128_value)); + case detail::type::bool_type: + return vis(arg.value_.bool_value); + case detail::type::char_type: + return vis(arg.value_.char_value); + case detail::type::float_type: + return vis(arg.value_.float_value); + case detail::type::double_type: + return vis(arg.value_.double_value); + case detail::type::long_double_type: + return vis(arg.value_.long_double_value); + case detail::type::cstring_type: + return vis(arg.value_.string.data); + case detail::type::string_type: + using sv = basic_string_view; + return vis(sv(arg.value_.string.data, arg.value_.string.size)); + case detail::type::pointer_type: + return vis(arg.value_.pointer); + case detail::type::custom_type: + return vis(typename basic_format_arg::handle(arg.value_.custom)); + } + return vis(monostate()); +} + +// Formatting context. +template class basic_format_context { + private: + OutputIt out_; + basic_format_args args_; + detail::locale_ref loc_; + + public: + using iterator = OutputIt; + using format_arg = basic_format_arg; + using format_args = basic_format_args; + using parse_context_type = basic_format_parse_context; + template using formatter_type = formatter; + + /** The character type for the output. */ + using char_type = Char; + + basic_format_context(basic_format_context&&) = default; + basic_format_context(const basic_format_context&) = delete; + void operator=(const basic_format_context&) = delete; + /** + Constructs a ``basic_format_context`` object. References to the arguments + are stored in the object so make sure they have appropriate lifetimes. + */ + constexpr basic_format_context(OutputIt out, format_args ctx_args, + detail::locale_ref loc = {}) + : out_(out), args_(ctx_args), loc_(loc) {} + + constexpr auto arg(int id) const -> format_arg { return args_.get(id); } + FMT_CONSTEXPR auto arg(basic_string_view name) -> format_arg { + return args_.get(name); + } + FMT_CONSTEXPR auto arg_id(basic_string_view name) -> int { + return args_.get_id(name); + } + auto args() const -> const format_args& { return args_; } + + // DEPRECATED! + FMT_CONSTEXPR auto error_handler() -> detail::error_handler { return {}; } + void on_error(const char* message) { error_handler().on_error(message); } + + // Returns an iterator to the beginning of the output range. + FMT_CONSTEXPR auto out() -> iterator { return out_; } + + // Advances the begin iterator to ``it``. + void advance_to(iterator it) { + if (!detail::is_back_insert_iterator()) out_ = it; + } + + FMT_CONSTEXPR auto locale() -> detail::locale_ref { return loc_; } +}; + +template +using buffer_context = + basic_format_context, Char>; +using format_context = buffer_context; + +template +using is_formattable = bool_constant>() + .map(std::declval()))>::value>; + +/** + \rst + An array of references to arguments. It can be implicitly converted into + `~fmt::basic_format_args` for passing into type-erased formatting functions + such as `~fmt::vformat`. + \endrst + */ +template +class format_arg_store +#if FMT_GCC_VERSION && FMT_GCC_VERSION < 409 + // Workaround a GCC template argument substitution bug. + : public basic_format_args +#endif +{ + private: + static const size_t num_args = sizeof...(Args); + static constexpr size_t num_named_args = detail::count_named_args(); + static const bool is_packed = num_args <= detail::max_packed_args; + + using value_type = conditional_t, + basic_format_arg>; + + detail::arg_data + data_; + + friend class basic_format_args; + + static constexpr unsigned long long desc = + (is_packed ? detail::encode_types() + : detail::is_unpacked_bit | num_args) | + (num_named_args != 0 + ? static_cast(detail::has_named_args_bit) + : 0); + + public: + template + FMT_CONSTEXPR FMT_INLINE format_arg_store(T&... args) + : +#if FMT_GCC_VERSION && FMT_GCC_VERSION < 409 + basic_format_args(*this), +#endif + data_{detail::make_arg(args)...} { + if (detail::const_check(num_named_args != 0)) + detail::init_named_args(data_.named_args(), 0, 0, args...); + } +}; + +/** + \rst + Constructs a `~fmt::format_arg_store` object that contains references to + arguments and can be implicitly converted to `~fmt::format_args`. `Context` + can be omitted in which case it defaults to `~fmt::format_context`. + See `~fmt::arg` for lifetime considerations. + \endrst + */ +// Arguments are taken by lvalue references to avoid some lifetime issues. +template +constexpr auto make_format_args(T&... args) + -> format_arg_store...> { + return {args...}; +} + +/** + \rst + Returns a named argument to be used in a formatting function. + It should only be used in a call to a formatting function or + `dynamic_format_arg_store::push_back`. + + **Example**:: + + fmt::print("Elapsed time: {s:.2f} seconds", fmt::arg("s", 1.23)); + \endrst + */ +template +inline auto arg(const Char* name, const T& arg) -> detail::named_arg { + static_assert(!detail::is_named_arg(), "nested named arguments"); + return {name, arg}; +} +FMT_END_EXPORT + +/** + \rst + A view of a collection of formatting arguments. To avoid lifetime issues it + should only be used as a parameter type in type-erased functions such as + ``vformat``:: + + void vlog(string_view format_str, format_args args); // OK + format_args args = make_format_args(); // Error: dangling reference + \endrst + */ +template class basic_format_args { + public: + using size_type = int; + using format_arg = basic_format_arg; + + private: + // A descriptor that contains information about formatting arguments. + // If the number of arguments is less or equal to max_packed_args then + // argument types are passed in the descriptor. This reduces binary code size + // per formatting function call. + unsigned long long desc_; + union { + // If is_packed() returns true then argument values are stored in values_; + // otherwise they are stored in args_. This is done to improve cache + // locality and reduce compiled code size since storing larger objects + // may require more code (at least on x86-64) even if the same amount of + // data is actually copied to stack. It saves ~10% on the bloat test. + const detail::value* values_; + const format_arg* args_; + }; + + constexpr auto is_packed() const -> bool { + return (desc_ & detail::is_unpacked_bit) == 0; + } + auto has_named_args() const -> bool { + return (desc_ & detail::has_named_args_bit) != 0; + } + + FMT_CONSTEXPR auto type(int index) const -> detail::type { + int shift = index * detail::packed_arg_bits; + unsigned int mask = (1 << detail::packed_arg_bits) - 1; + return static_cast((desc_ >> shift) & mask); + } + + constexpr FMT_INLINE basic_format_args(unsigned long long desc, + const detail::value* values) + : desc_(desc), values_(values) {} + constexpr basic_format_args(unsigned long long desc, const format_arg* args) + : desc_(desc), args_(args) {} + + public: + constexpr basic_format_args() : desc_(0), args_(nullptr) {} + + /** + \rst + Constructs a `basic_format_args` object from `~fmt::format_arg_store`. + \endrst + */ + template + constexpr FMT_INLINE basic_format_args( + const format_arg_store& store) + : basic_format_args(format_arg_store::desc, + store.data_.args()) {} + + /** + \rst + Constructs a `basic_format_args` object from + `~fmt::dynamic_format_arg_store`. + \endrst + */ + constexpr FMT_INLINE basic_format_args( + const dynamic_format_arg_store& store) + : basic_format_args(store.get_types(), store.data()) {} + + /** + \rst + Constructs a `basic_format_args` object from a dynamic set of arguments. + \endrst + */ + constexpr basic_format_args(const format_arg* args, int count) + : basic_format_args(detail::is_unpacked_bit | detail::to_unsigned(count), + args) {} + + /** Returns the argument with the specified id. */ + FMT_CONSTEXPR auto get(int id) const -> format_arg { + format_arg arg; + if (!is_packed()) { + if (id < max_size()) arg = args_[id]; + return arg; + } + if (id >= detail::max_packed_args) return arg; + arg.type_ = type(id); + if (arg.type_ == detail::type::none_type) return arg; + arg.value_ = values_[id]; + return arg; + } + + template + auto get(basic_string_view name) const -> format_arg { + int id = get_id(name); + return id >= 0 ? get(id) : format_arg(); + } + + template + auto get_id(basic_string_view name) const -> int { + if (!has_named_args()) return -1; + const auto& named_args = + (is_packed() ? values_[-1] : args_[-1].value_).named_args; + for (size_t i = 0; i < named_args.size; ++i) { + if (named_args.data[i].name == name) return named_args.data[i].id; + } + return -1; + } + + auto max_size() const -> int { + unsigned long long max_packed = detail::max_packed_args; + return static_cast(is_packed() ? max_packed + : desc_ & ~detail::is_unpacked_bit); + } +}; + +/** An alias to ``basic_format_args``. */ +// A separate type would result in shorter symbols but break ABI compatibility +// between clang and gcc on ARM (#1919). +FMT_EXPORT using format_args = basic_format_args; + +// We cannot use enum classes as bit fields because of a gcc bug, so we put them +// in namespaces instead (https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61414). +// Additionally, if an underlying type is specified, older gcc incorrectly warns +// that the type is too small. Both bugs are fixed in gcc 9.3. +#if FMT_GCC_VERSION && FMT_GCC_VERSION < 903 +# define FMT_ENUM_UNDERLYING_TYPE(type) +#else +# define FMT_ENUM_UNDERLYING_TYPE(type) : type +#endif +namespace align { +enum type FMT_ENUM_UNDERLYING_TYPE(unsigned char){none, left, right, center, + numeric}; +} +using align_t = align::type; +namespace sign { +enum type FMT_ENUM_UNDERLYING_TYPE(unsigned char){none, minus, plus, space}; +} +using sign_t = sign::type; + +namespace detail { + +// Workaround an array initialization issue in gcc 4.8. +template struct fill_t { + private: + enum { max_size = 4 }; + Char data_[max_size] = {Char(' '), Char(0), Char(0), Char(0)}; + unsigned char size_ = 1; + + public: + FMT_CONSTEXPR void operator=(basic_string_view s) { + auto size = s.size(); + FMT_ASSERT(size <= max_size, "invalid fill"); + for (size_t i = 0; i < size; ++i) data_[i] = s[i]; + size_ = static_cast(size); + } + + constexpr auto size() const -> size_t { return size_; } + constexpr auto data() const -> const Char* { return data_; } + + FMT_CONSTEXPR auto operator[](size_t index) -> Char& { return data_[index]; } + FMT_CONSTEXPR auto operator[](size_t index) const -> const Char& { + return data_[index]; + } +}; +} // namespace detail + +enum class presentation_type : unsigned char { + none, + dec, // 'd' + oct, // 'o' + hex_lower, // 'x' + hex_upper, // 'X' + bin_lower, // 'b' + bin_upper, // 'B' + hexfloat_lower, // 'a' + hexfloat_upper, // 'A' + exp_lower, // 'e' + exp_upper, // 'E' + fixed_lower, // 'f' + fixed_upper, // 'F' + general_lower, // 'g' + general_upper, // 'G' + chr, // 'c' + string, // 's' + pointer, // 'p' + debug // '?' +}; + +// Format specifiers for built-in and string types. +template struct format_specs { + int width; + int precision; + presentation_type type; + align_t align : 4; + sign_t sign : 3; + bool alt : 1; // Alternate form ('#'). + bool localized : 1; + detail::fill_t fill; + + constexpr format_specs() + : width(0), + precision(-1), + type(presentation_type::none), + align(align::none), + sign(sign::none), + alt(false), + localized(false) {} +}; + +namespace detail { + +enum class arg_id_kind { none, index, name }; + +// An argument reference. +template struct arg_ref { + FMT_CONSTEXPR arg_ref() : kind(arg_id_kind::none), val() {} + + FMT_CONSTEXPR explicit arg_ref(int index) + : kind(arg_id_kind::index), val(index) {} + FMT_CONSTEXPR explicit arg_ref(basic_string_view name) + : kind(arg_id_kind::name), val(name) {} + + FMT_CONSTEXPR auto operator=(int idx) -> arg_ref& { + kind = arg_id_kind::index; + val.index = idx; + return *this; + } + + arg_id_kind kind; + union value { + FMT_CONSTEXPR value(int idx = 0) : index(idx) {} + FMT_CONSTEXPR value(basic_string_view n) : name(n) {} + + int index; + basic_string_view name; + } val; +}; + +// Format specifiers with width and precision resolved at formatting rather +// than parsing time to allow reusing the same parsed specifiers with +// different sets of arguments (precompilation of format strings). +template +struct dynamic_format_specs : format_specs { + arg_ref width_ref; + arg_ref precision_ref; +}; + +// Converts a character to ASCII. Returns '\0' on conversion failure. +template ::value)> +constexpr auto to_ascii(Char c) -> char { + return c <= 0xff ? static_cast(c) : '\0'; +} +template ::value)> +constexpr auto to_ascii(Char c) -> char { + return c <= 0xff ? static_cast(c) : '\0'; +} + +// Returns the number of code units in a code point or 1 on error. +template +FMT_CONSTEXPR auto code_point_length(const Char* begin) -> int { + if (const_check(sizeof(Char) != 1)) return 1; + auto c = static_cast(*begin); + return static_cast((0x3a55000000000000ull >> (2 * (c >> 3))) & 0x3) + 1; +} + +// Return the result via the out param to workaround gcc bug 77539. +template +FMT_CONSTEXPR auto find(Ptr first, Ptr last, T value, Ptr& out) -> bool { + for (out = first; out != last; ++out) { + if (*out == value) return true; + } + return false; +} + +template <> +inline auto find(const char* first, const char* last, char value, + const char*& out) -> bool { + out = static_cast( + std::memchr(first, value, to_unsigned(last - first))); + return out != nullptr; +} + +// Parses the range [begin, end) as an unsigned integer. This function assumes +// that the range is non-empty and the first character is a digit. +template +FMT_CONSTEXPR auto parse_nonnegative_int(const Char*& begin, const Char* end, + int error_value) noexcept -> int { + FMT_ASSERT(begin != end && '0' <= *begin && *begin <= '9', ""); + unsigned value = 0, prev = 0; + auto p = begin; + do { + prev = value; + value = value * 10 + unsigned(*p - '0'); + ++p; + } while (p != end && '0' <= *p && *p <= '9'); + auto num_digits = p - begin; + begin = p; + if (num_digits <= std::numeric_limits::digits10) + return static_cast(value); + // Check for overflow. + const unsigned max = to_unsigned((std::numeric_limits::max)()); + return num_digits == std::numeric_limits::digits10 + 1 && + prev * 10ull + unsigned(p[-1] - '0') <= max + ? static_cast(value) + : error_value; +} + +FMT_CONSTEXPR inline auto parse_align(char c) -> align_t { + switch (c) { + case '<': + return align::left; + case '>': + return align::right; + case '^': + return align::center; + } + return align::none; +} + +template constexpr auto is_name_start(Char c) -> bool { + return ('a' <= c && c <= 'z') || ('A' <= c && c <= 'Z') || c == '_'; +} + +template +FMT_CONSTEXPR auto do_parse_arg_id(const Char* begin, const Char* end, + Handler&& handler) -> const Char* { + Char c = *begin; + if (c >= '0' && c <= '9') { + int index = 0; + constexpr int max = (std::numeric_limits::max)(); + if (c != '0') + index = parse_nonnegative_int(begin, end, max); + else + ++begin; + if (begin == end || (*begin != '}' && *begin != ':')) + throw_format_error("invalid format string"); + else + handler.on_index(index); + return begin; + } + if (!is_name_start(c)) { + throw_format_error("invalid format string"); + return begin; + } + auto it = begin; + do { + ++it; + } while (it != end && (is_name_start(*it) || ('0' <= *it && *it <= '9'))); + handler.on_name({begin, to_unsigned(it - begin)}); + return it; +} + +template +FMT_CONSTEXPR FMT_INLINE auto parse_arg_id(const Char* begin, const Char* end, + Handler&& handler) -> const Char* { + FMT_ASSERT(begin != end, ""); + Char c = *begin; + if (c != '}' && c != ':') return do_parse_arg_id(begin, end, handler); + handler.on_auto(); + return begin; +} + +template struct dynamic_spec_id_handler { + basic_format_parse_context& ctx; + arg_ref& ref; + + FMT_CONSTEXPR void on_auto() { + int id = ctx.next_arg_id(); + ref = arg_ref(id); + ctx.check_dynamic_spec(id); + } + FMT_CONSTEXPR void on_index(int id) { + ref = arg_ref(id); + ctx.check_arg_id(id); + ctx.check_dynamic_spec(id); + } + FMT_CONSTEXPR void on_name(basic_string_view id) { + ref = arg_ref(id); + ctx.check_arg_id(id); + } +}; + +// Parses [integer | "{" [arg_id] "}"]. +template +FMT_CONSTEXPR auto parse_dynamic_spec(const Char* begin, const Char* end, + int& value, arg_ref& ref, + basic_format_parse_context& ctx) + -> const Char* { + FMT_ASSERT(begin != end, ""); + if ('0' <= *begin && *begin <= '9') { + int val = parse_nonnegative_int(begin, end, -1); + if (val != -1) + value = val; + else + throw_format_error("number is too big"); + } else if (*begin == '{') { + ++begin; + auto handler = dynamic_spec_id_handler{ctx, ref}; + if (begin != end) begin = parse_arg_id(begin, end, handler); + if (begin != end && *begin == '}') return ++begin; + throw_format_error("invalid format string"); + } + return begin; +} + +template +FMT_CONSTEXPR auto parse_precision(const Char* begin, const Char* end, + int& value, arg_ref& ref, + basic_format_parse_context& ctx) + -> const Char* { + ++begin; + if (begin == end || *begin == '}') { + throw_format_error("invalid precision"); + return begin; + } + return parse_dynamic_spec(begin, end, value, ref, ctx); +} + +enum class state { start, align, sign, hash, zero, width, precision, locale }; + +// Parses standard format specifiers. +template +FMT_CONSTEXPR FMT_INLINE auto parse_format_specs( + const Char* begin, const Char* end, dynamic_format_specs& specs, + basic_format_parse_context& ctx, type arg_type) -> const Char* { + auto c = '\0'; + if (end - begin > 1) { + auto next = to_ascii(begin[1]); + c = parse_align(next) == align::none ? to_ascii(*begin) : '\0'; + } else { + if (begin == end) return begin; + c = to_ascii(*begin); + } + + struct { + state current_state = state::start; + FMT_CONSTEXPR void operator()(state s, bool valid = true) { + if (current_state >= s || !valid) + throw_format_error("invalid format specifier"); + current_state = s; + } + } enter_state; + + using pres = presentation_type; + constexpr auto integral_set = sint_set | uint_set | bool_set | char_set; + struct { + const Char*& begin; + dynamic_format_specs& specs; + type arg_type; + + FMT_CONSTEXPR auto operator()(pres pres_type, int set) -> const Char* { + if (!in(arg_type, set)) { + if (arg_type == type::none_type) return begin; + throw_format_error("invalid format specifier"); + } + specs.type = pres_type; + return begin + 1; + } + } parse_presentation_type{begin, specs, arg_type}; + + for (;;) { + switch (c) { + case '<': + case '>': + case '^': + enter_state(state::align); + specs.align = parse_align(c); + ++begin; + break; + case '+': + case '-': + case ' ': + if (arg_type == type::none_type) return begin; + enter_state(state::sign, in(arg_type, sint_set | float_set)); + switch (c) { + case '+': + specs.sign = sign::plus; + break; + case '-': + specs.sign = sign::minus; + break; + case ' ': + specs.sign = sign::space; + break; + } + ++begin; + break; + case '#': + if (arg_type == type::none_type) return begin; + enter_state(state::hash, is_arithmetic_type(arg_type)); + specs.alt = true; + ++begin; + break; + case '0': + enter_state(state::zero); + if (!is_arithmetic_type(arg_type)) { + if (arg_type == type::none_type) return begin; + throw_format_error("format specifier requires numeric argument"); + } + if (specs.align == align::none) { + // Ignore 0 if align is specified for compatibility with std::format. + specs.align = align::numeric; + specs.fill[0] = Char('0'); + } + ++begin; + break; + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + case '{': + enter_state(state::width); + begin = parse_dynamic_spec(begin, end, specs.width, specs.width_ref, ctx); + break; + case '.': + if (arg_type == type::none_type) return begin; + enter_state(state::precision, + in(arg_type, float_set | string_set | cstring_set)); + begin = parse_precision(begin, end, specs.precision, specs.precision_ref, + ctx); + break; + case 'L': + if (arg_type == type::none_type) return begin; + enter_state(state::locale, is_arithmetic_type(arg_type)); + specs.localized = true; + ++begin; + break; + case 'd': + return parse_presentation_type(pres::dec, integral_set); + case 'o': + return parse_presentation_type(pres::oct, integral_set); + case 'x': + return parse_presentation_type(pres::hex_lower, integral_set); + case 'X': + return parse_presentation_type(pres::hex_upper, integral_set); + case 'b': + return parse_presentation_type(pres::bin_lower, integral_set); + case 'B': + return parse_presentation_type(pres::bin_upper, integral_set); + case 'a': + return parse_presentation_type(pres::hexfloat_lower, float_set); + case 'A': + return parse_presentation_type(pres::hexfloat_upper, float_set); + case 'e': + return parse_presentation_type(pres::exp_lower, float_set); + case 'E': + return parse_presentation_type(pres::exp_upper, float_set); + case 'f': + return parse_presentation_type(pres::fixed_lower, float_set); + case 'F': + return parse_presentation_type(pres::fixed_upper, float_set); + case 'g': + return parse_presentation_type(pres::general_lower, float_set); + case 'G': + return parse_presentation_type(pres::general_upper, float_set); + case 'c': + if (arg_type == type::bool_type) + throw_format_error("invalid format specifier"); + return parse_presentation_type(pres::chr, integral_set); + case 's': + return parse_presentation_type(pres::string, + bool_set | string_set | cstring_set); + case 'p': + return parse_presentation_type(pres::pointer, pointer_set | cstring_set); + case '?': + return parse_presentation_type(pres::debug, + char_set | string_set | cstring_set); + case '}': + return begin; + default: { + if (*begin == '}') return begin; + // Parse fill and alignment. + auto fill_end = begin + code_point_length(begin); + if (end - fill_end <= 0) { + throw_format_error("invalid format specifier"); + return begin; + } + if (*begin == '{') { + throw_format_error("invalid fill character '{'"); + return begin; + } + auto align = parse_align(to_ascii(*fill_end)); + enter_state(state::align, align != align::none); + specs.fill = {begin, to_unsigned(fill_end - begin)}; + specs.align = align; + begin = fill_end + 1; + } + } + if (begin == end) return begin; + c = to_ascii(*begin); + } +} + +template +FMT_CONSTEXPR auto parse_replacement_field(const Char* begin, const Char* end, + Handler&& handler) -> const Char* { + struct id_adapter { + Handler& handler; + int arg_id; + + FMT_CONSTEXPR void on_auto() { arg_id = handler.on_arg_id(); } + FMT_CONSTEXPR void on_index(int id) { arg_id = handler.on_arg_id(id); } + FMT_CONSTEXPR void on_name(basic_string_view id) { + arg_id = handler.on_arg_id(id); + } + }; + + ++begin; + if (begin == end) return handler.on_error("invalid format string"), end; + if (*begin == '}') { + handler.on_replacement_field(handler.on_arg_id(), begin); + } else if (*begin == '{') { + handler.on_text(begin, begin + 1); + } else { + auto adapter = id_adapter{handler, 0}; + begin = parse_arg_id(begin, end, adapter); + Char c = begin != end ? *begin : Char(); + if (c == '}') { + handler.on_replacement_field(adapter.arg_id, begin); + } else if (c == ':') { + begin = handler.on_format_specs(adapter.arg_id, begin + 1, end); + if (begin == end || *begin != '}') + return handler.on_error("unknown format specifier"), end; + } else { + return handler.on_error("missing '}' in format string"), end; + } + } + return begin + 1; +} + +template +FMT_CONSTEXPR FMT_INLINE void parse_format_string( + basic_string_view format_str, Handler&& handler) { + auto begin = format_str.data(); + auto end = begin + format_str.size(); + if (end - begin < 32) { + // Use a simple loop instead of memchr for small strings. + const Char* p = begin; + while (p != end) { + auto c = *p++; + if (c == '{') { + handler.on_text(begin, p - 1); + begin = p = parse_replacement_field(p - 1, end, handler); + } else if (c == '}') { + if (p == end || *p != '}') + return handler.on_error("unmatched '}' in format string"); + handler.on_text(begin, p); + begin = ++p; + } + } + handler.on_text(begin, end); + return; + } + struct writer { + FMT_CONSTEXPR void operator()(const Char* from, const Char* to) { + if (from == to) return; + for (;;) { + const Char* p = nullptr; + if (!find(from, to, Char('}'), p)) + return handler_.on_text(from, to); + ++p; + if (p == to || *p != '}') + return handler_.on_error("unmatched '}' in format string"); + handler_.on_text(from, p); + from = p + 1; + } + } + Handler& handler_; + } write = {handler}; + while (begin != end) { + // Doing two passes with memchr (one for '{' and another for '}') is up to + // 2.5x faster than the naive one-pass implementation on big format strings. + const Char* p = begin; + if (*begin != '{' && !find(begin + 1, end, Char('{'), p)) + return write(begin, end); + write(begin, p); + begin = parse_replacement_field(p, end, handler); + } +} + +template ::value> struct strip_named_arg { + using type = T; +}; +template struct strip_named_arg { + using type = remove_cvref_t; +}; + +template +FMT_CONSTEXPR auto parse_format_specs(ParseContext& ctx) + -> decltype(ctx.begin()) { + using char_type = typename ParseContext::char_type; + using context = buffer_context; + using mapped_type = conditional_t< + mapped_type_constant::value != type::custom_type, + decltype(arg_mapper().map(std::declval())), + typename strip_named_arg::type>; +#if defined(__cpp_if_constexpr) + if constexpr (std::is_default_constructible< + formatter>::value) { + return formatter().parse(ctx); + } else { + type_is_unformattable_for _; + return ctx.begin(); + } +#else + return formatter().parse(ctx); +#endif +} + +// Checks char specs and returns true iff the presentation type is char-like. +template +FMT_CONSTEXPR auto check_char_specs(const format_specs& specs) -> bool { + if (specs.type != presentation_type::none && + specs.type != presentation_type::chr && + specs.type != presentation_type::debug) { + return false; + } + if (specs.align == align::numeric || specs.sign != sign::none || specs.alt) + throw_format_error("invalid format specifier for char"); + return true; +} + +#if FMT_USE_NONTYPE_TEMPLATE_ARGS +template +constexpr auto get_arg_index_by_name(basic_string_view name) -> int { + if constexpr (is_statically_named_arg()) { + if (name == T::name) return N; + } + if constexpr (sizeof...(Args) > 0) + return get_arg_index_by_name(name); + (void)name; // Workaround an MSVC bug about "unused" parameter. + return -1; +} +#endif + +template +FMT_CONSTEXPR auto get_arg_index_by_name(basic_string_view name) -> int { +#if FMT_USE_NONTYPE_TEMPLATE_ARGS + if constexpr (sizeof...(Args) > 0) + return get_arg_index_by_name<0, Args...>(name); +#endif + (void)name; + return -1; +} + +template class format_string_checker { + private: + using parse_context_type = compile_parse_context; + static constexpr int num_args = sizeof...(Args); + + // Format specifier parsing function. + // In the future basic_format_parse_context will replace compile_parse_context + // here and will use is_constant_evaluated and downcasting to access the data + // needed for compile-time checks: https://godbolt.org/z/GvWzcTjh1. + using parse_func = const Char* (*)(parse_context_type&); + + type types_[num_args > 0 ? static_cast(num_args) : 1]; + parse_context_type context_; + parse_func parse_funcs_[num_args > 0 ? static_cast(num_args) : 1]; + + public: + explicit FMT_CONSTEXPR format_string_checker(basic_string_view fmt) + : types_{mapped_type_constant>::value...}, + context_(fmt, num_args, types_), + parse_funcs_{&parse_format_specs...} {} + + FMT_CONSTEXPR void on_text(const Char*, const Char*) {} + + FMT_CONSTEXPR auto on_arg_id() -> int { return context_.next_arg_id(); } + FMT_CONSTEXPR auto on_arg_id(int id) -> int { + return context_.check_arg_id(id), id; + } + FMT_CONSTEXPR auto on_arg_id(basic_string_view id) -> int { +#if FMT_USE_NONTYPE_TEMPLATE_ARGS + auto index = get_arg_index_by_name(id); + if (index < 0) on_error("named argument is not found"); + return index; +#else + (void)id; + on_error("compile-time checks for named arguments require C++20 support"); + return 0; +#endif + } + + FMT_CONSTEXPR void on_replacement_field(int id, const Char* begin) { + on_format_specs(id, begin, begin); // Call parse() on empty specs. + } + + FMT_CONSTEXPR auto on_format_specs(int id, const Char* begin, const Char*) + -> const Char* { + context_.advance_to(begin); + // id >= 0 check is a workaround for gcc 10 bug (#2065). + return id >= 0 && id < num_args ? parse_funcs_[id](context_) : begin; + } + + FMT_CONSTEXPR void on_error(const char* message) { + throw_format_error(message); + } +}; + +// Reports a compile-time error if S is not a valid format string. +template ::value)> +FMT_INLINE void check_format_string(const S&) { +#ifdef FMT_ENFORCE_COMPILE_STRING + static_assert(is_compile_string::value, + "FMT_ENFORCE_COMPILE_STRING requires all format strings to use " + "FMT_STRING."); +#endif +} +template ::value)> +void check_format_string(S format_str) { + using char_t = typename S::char_type; + FMT_CONSTEXPR auto s = basic_string_view(format_str); + using checker = format_string_checker...>; + FMT_CONSTEXPR bool error = (parse_format_string(s, checker(s)), true); + ignore_unused(error); +} + +template struct vformat_args { + using type = basic_format_args< + basic_format_context>, Char>>; +}; +template <> struct vformat_args { + using type = format_args; +}; + +// Use vformat_args and avoid type_identity to keep symbols short. +template +void vformat_to(buffer& buf, basic_string_view fmt, + typename vformat_args::type args, locale_ref loc = {}); + +FMT_API void vprint_mojibake(std::FILE*, string_view, format_args); +#ifndef _WIN32 +inline void vprint_mojibake(std::FILE*, string_view, format_args) {} +#endif +} // namespace detail + +FMT_BEGIN_EXPORT + +// A formatter specialization for natively supported types. +template +struct formatter::value != + detail::type::custom_type>> { + private: + detail::dynamic_format_specs specs_; + + public: + template + FMT_CONSTEXPR auto parse(ParseContext& ctx) -> const Char* { + auto type = detail::type_constant::value; + auto end = + detail::parse_format_specs(ctx.begin(), ctx.end(), specs_, ctx, type); + if (type == detail::type::char_type) detail::check_char_specs(specs_); + return end; + } + + template ::value, + FMT_ENABLE_IF(U == detail::type::string_type || + U == detail::type::cstring_type || + U == detail::type::char_type)> + FMT_CONSTEXPR void set_debug_format(bool set = true) { + specs_.type = set ? presentation_type::debug : presentation_type::none; + } + + template + FMT_CONSTEXPR auto format(const T& val, FormatContext& ctx) const + -> decltype(ctx.out()); +}; + +template struct runtime_format_string { + basic_string_view str; +}; + +/** A compile-time format string. */ +template class basic_format_string { + private: + basic_string_view str_; + + public: + template >::value)> + FMT_CONSTEVAL FMT_INLINE basic_format_string(const S& s) : str_(s) { + static_assert( + detail::count< + (std::is_base_of>::value && + std::is_reference::value)...>() == 0, + "passing views as lvalues is disallowed"); +#ifdef FMT_HAS_CONSTEVAL + if constexpr (detail::count_named_args() == + detail::count_statically_named_args()) { + using checker = + detail::format_string_checker...>; + detail::parse_format_string(str_, checker(s)); + } +#else + detail::check_format_string(s); +#endif + } + basic_format_string(runtime_format_string fmt) : str_(fmt.str) {} + + FMT_INLINE operator basic_string_view() const { return str_; } + FMT_INLINE auto get() const -> basic_string_view { return str_; } +}; + +#if FMT_GCC_VERSION && FMT_GCC_VERSION < 409 +// Workaround broken conversion on older gcc. +template using format_string = string_view; +inline auto runtime(string_view s) -> string_view { return s; } +#else +template +using format_string = basic_format_string...>; +/** + \rst + Creates a runtime format string. + + **Example**:: + + // Check format string at runtime instead of compile-time. + fmt::print(fmt::runtime("{:d}"), "I am not a number"); + \endrst + */ +inline auto runtime(string_view s) -> runtime_format_string<> { return {{s}}; } +#endif + +FMT_API auto vformat(string_view fmt, format_args args) -> std::string; + +/** + \rst + Formats ``args`` according to specifications in ``fmt`` and returns the result + as a string. + + **Example**:: + + #include + std::string message = fmt::format("The answer is {}.", 42); + \endrst +*/ +template +FMT_NODISCARD FMT_INLINE auto format(format_string fmt, T&&... args) + -> std::string { + return vformat(fmt, fmt::make_format_args(args...)); +} + +/** Formats a string and writes the output to ``out``. */ +template ::value)> +auto vformat_to(OutputIt out, string_view fmt, format_args args) -> OutputIt { + auto&& buf = detail::get_buffer(out); + detail::vformat_to(buf, fmt, args, {}); + return detail::get_iterator(buf, out); +} + +/** + \rst + Formats ``args`` according to specifications in ``fmt``, writes the result to + the output iterator ``out`` and returns the iterator past the end of the output + range. `format_to` does not append a terminating null character. + + **Example**:: + + auto out = std::vector(); + fmt::format_to(std::back_inserter(out), "{}", 42); + \endrst + */ +template ::value)> +FMT_INLINE auto format_to(OutputIt out, format_string fmt, T&&... args) + -> OutputIt { + return vformat_to(out, fmt, fmt::make_format_args(args...)); +} + +template struct format_to_n_result { + /** Iterator past the end of the output range. */ + OutputIt out; + /** Total (not truncated) output size. */ + size_t size; +}; + +template ::value)> +auto vformat_to_n(OutputIt out, size_t n, string_view fmt, format_args args) + -> format_to_n_result { + using traits = detail::fixed_buffer_traits; + auto buf = detail::iterator_buffer(out, n); + detail::vformat_to(buf, fmt, args, {}); + return {buf.out(), buf.count()}; +} + +/** + \rst + Formats ``args`` according to specifications in ``fmt``, writes up to ``n`` + characters of the result to the output iterator ``out`` and returns the total + (not truncated) output size and the iterator past the end of the output range. + `format_to_n` does not append a terminating null character. + \endrst + */ +template ::value)> +FMT_INLINE auto format_to_n(OutputIt out, size_t n, format_string fmt, + T&&... args) -> format_to_n_result { + return vformat_to_n(out, n, fmt, fmt::make_format_args(args...)); +} + +/** Returns the number of chars in the output of ``format(fmt, args...)``. */ +template +FMT_NODISCARD FMT_INLINE auto formatted_size(format_string fmt, + T&&... args) -> size_t { + auto buf = detail::counting_buffer<>(); + detail::vformat_to(buf, fmt, fmt::make_format_args(args...), {}); + return buf.count(); +} + +FMT_API void vprint(string_view fmt, format_args args); +FMT_API void vprint(std::FILE* f, string_view fmt, format_args args); + +/** + \rst + Formats ``args`` according to specifications in ``fmt`` and writes the output + to ``stdout``. + + **Example**:: + + fmt::print("Elapsed time: {0:.2f} seconds", 1.23); + \endrst + */ +template +FMT_INLINE void print(format_string fmt, T&&... args) { + const auto& vargs = fmt::make_format_args(args...); + return detail::is_utf8() ? vprint(fmt, vargs) + : detail::vprint_mojibake(stdout, fmt, vargs); +} + +/** + \rst + Formats ``args`` according to specifications in ``fmt`` and writes the + output to the file ``f``. + + **Example**:: + + fmt::print(stderr, "Don't {}!", "panic"); + \endrst + */ +template +FMT_INLINE void print(std::FILE* f, format_string fmt, T&&... args) { + const auto& vargs = fmt::make_format_args(args...); + return detail::is_utf8() ? vprint(f, fmt, vargs) + : detail::vprint_mojibake(f, fmt, vargs); +} + +/** + Formats ``args`` according to specifications in ``fmt`` and writes the + output to the file ``f`` followed by a newline. + */ +template +FMT_INLINE void println(std::FILE* f, format_string fmt, T&&... args) { + return fmt::print(f, "{}\n", fmt::format(fmt, std::forward(args)...)); +} + +/** + Formats ``args`` according to specifications in ``fmt`` and writes the output + to ``stdout`` followed by a newline. + */ +template +FMT_INLINE void println(format_string fmt, T&&... args) { + return fmt::println(stdout, fmt, std::forward(args)...); +} + +FMT_END_EXPORT +FMT_GCC_PRAGMA("GCC pop_options") +FMT_END_NAMESPACE + +#ifdef FMT_HEADER_ONLY +# include "format.h" +#endif +#endif // FMT_CORE_H_ diff --git a/third_party/tlRender-install-Release/include/OpenImageIO/detail/fmt/format-inl.h b/third_party/tlRender-install-Release/include/OpenImageIO/detail/fmt/format-inl.h new file mode 100644 index 00000000..efac5d1f --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenImageIO/detail/fmt/format-inl.h @@ -0,0 +1,1678 @@ +// Formatting library for C++ - implementation +// +// Copyright (c) 2012 - 2016, Victor Zverovich +// All rights reserved. +// +// For the license information refer to format.h. + +#ifndef FMT_FORMAT_INL_H_ +#define FMT_FORMAT_INL_H_ + +#include +#include // errno +#include +#include +#include + +#ifndef FMT_STATIC_THOUSANDS_SEPARATOR +# include +#endif + +#if defined(_WIN32) && !defined(FMT_WINDOWS_NO_WCHAR) +# include // _isatty +#endif + +#include "format.h" + +FMT_BEGIN_NAMESPACE +namespace detail { + +FMT_FUNC void assert_fail(const char* file, int line, const char* message) { + // Use unchecked std::fprintf to avoid triggering another assertion when + // writing to stderr fails + std::fprintf(stderr, "%s:%d: assertion failed: %s", file, line, message); + // Chosen instead of std::abort to satisfy Clang in CUDA mode during device + // code pass. + std::terminate(); +} + +FMT_FUNC void throw_format_error(const char* message) { + FMT_THROW(format_error(message)); +} + +FMT_FUNC void format_error_code(detail::buffer& out, int error_code, + string_view message) noexcept { + // Report error code making sure that the output fits into + // inline_buffer_size to avoid dynamic memory allocation and potential + // bad_alloc. + out.try_resize(0); + static const char SEP[] = ": "; + static const char ERROR_STR[] = "error "; + // Subtract 2 to account for terminating null characters in SEP and ERROR_STR. + size_t error_code_size = sizeof(SEP) + sizeof(ERROR_STR) - 2; + auto abs_value = static_cast>(error_code); + if (detail::is_negative(error_code)) { + abs_value = 0 - abs_value; + ++error_code_size; + } + error_code_size += detail::to_unsigned(detail::count_digits(abs_value)); + auto it = buffer_appender(out); + if (message.size() <= inline_buffer_size - error_code_size) + fmt::format_to(it, FMT_STRING("{}{}"), message, SEP); + fmt::format_to(it, FMT_STRING("{}{}"), ERROR_STR, error_code); + FMT_ASSERT(out.size() <= inline_buffer_size, ""); +} + +FMT_FUNC void report_error(format_func func, int error_code, + const char* message) noexcept { + memory_buffer full_message; + func(full_message, error_code, message); + // Don't use fwrite_fully because the latter may throw. + if (std::fwrite(full_message.data(), full_message.size(), 1, stderr) > 0) + std::fputc('\n', stderr); +} + +// A wrapper around fwrite that throws on error. +inline void fwrite_fully(const void* ptr, size_t count, FILE* stream) { + size_t written = std::fwrite(ptr, 1, count, stream); + if (written < count) + FMT_THROW(system_error(errno, FMT_STRING("cannot write to file"))); +} + +#ifndef FMT_STATIC_THOUSANDS_SEPARATOR +template +locale_ref::locale_ref(const Locale& loc) : locale_(&loc) { + static_assert(std::is_same::value, ""); +} + +template auto locale_ref::get() const -> Locale { + static_assert(std::is_same::value, ""); + return locale_ ? *static_cast(locale_) : std::locale(); +} + +template +FMT_FUNC auto thousands_sep_impl(locale_ref loc) -> thousands_sep_result { + auto& facet = std::use_facet>(loc.get()); + auto grouping = facet.grouping(); + auto thousands_sep = grouping.empty() ? Char() : facet.thousands_sep(); + return {std::move(grouping), thousands_sep}; +} +template +FMT_FUNC auto decimal_point_impl(locale_ref loc) -> Char { + return std::use_facet>(loc.get()) + .decimal_point(); +} +#else +template +FMT_FUNC auto thousands_sep_impl(locale_ref) -> thousands_sep_result { + return {"\03", FMT_STATIC_THOUSANDS_SEPARATOR}; +} +template FMT_FUNC Char decimal_point_impl(locale_ref) { + return '.'; +} +#endif + +FMT_FUNC auto write_loc(appender out, loc_value value, + const format_specs<>& specs, locale_ref loc) -> bool { +#ifndef FMT_STATIC_THOUSANDS_SEPARATOR + auto locale = loc.get(); + // We cannot use the num_put facet because it may produce output in + // a wrong encoding. + using facet = format_facet; + if (std::has_facet(locale)) + return std::use_facet(locale).put(out, value, specs); + return facet(locale).put(out, value, specs); +#endif + return false; +} +} // namespace detail + +template typename Locale::id format_facet::id; + +#ifndef FMT_STATIC_THOUSANDS_SEPARATOR +template format_facet::format_facet(Locale& loc) { + auto& numpunct = std::use_facet>(loc); + grouping_ = numpunct.grouping(); + if (!grouping_.empty()) separator_ = std::string(1, numpunct.thousands_sep()); +} + +template <> +FMT_API FMT_FUNC auto format_facet::do_put( + appender out, loc_value val, const format_specs<>& specs) const -> bool { + return val.visit( + detail::loc_writer<>{out, specs, separator_, grouping_, decimal_point_}); +} +#endif + +FMT_FUNC auto vsystem_error(int error_code, string_view fmt, format_args args) + -> std::system_error { + auto ec = std::error_code(error_code, std::generic_category()); + return std::system_error(ec, vformat(fmt, args)); +} + +namespace detail { + +template +inline auto operator==(basic_fp x, basic_fp y) -> bool { + return x.f == y.f && x.e == y.e; +} + +// Compilers should be able to optimize this into the ror instruction. +FMT_CONSTEXPR inline auto rotr(uint32_t n, uint32_t r) noexcept -> uint32_t { + r &= 31; + return (n >> r) | (n << (32 - r)); +} +FMT_CONSTEXPR inline auto rotr(uint64_t n, uint32_t r) noexcept -> uint64_t { + r &= 63; + return (n >> r) | (n << (64 - r)); +} + +// Implementation of Dragonbox algorithm: https://github.com/jk-jeon/dragonbox. +namespace dragonbox { +// Computes upper 64 bits of multiplication of a 32-bit unsigned integer and a +// 64-bit unsigned integer. +inline auto umul96_upper64(uint32_t x, uint64_t y) noexcept -> uint64_t { + return umul128_upper64(static_cast(x) << 32, y); +} + +// Computes lower 128 bits of multiplication of a 64-bit unsigned integer and a +// 128-bit unsigned integer. +inline auto umul192_lower128(uint64_t x, uint128_fallback y) noexcept + -> uint128_fallback { + uint64_t high = x * y.high(); + uint128_fallback high_low = umul128(x, y.low()); + return {high + high_low.high(), high_low.low()}; +} + +// Computes lower 64 bits of multiplication of a 32-bit unsigned integer and a +// 64-bit unsigned integer. +inline auto umul96_lower64(uint32_t x, uint64_t y) noexcept -> uint64_t { + return x * y; +} + +// Various fast log computations. +inline auto floor_log10_pow2_minus_log10_4_over_3(int e) noexcept -> int { + FMT_ASSERT(e <= 2936 && e >= -2985, "too large exponent"); + return (e * 631305 - 261663) >> 21; +} + +FMT_INLINE_VARIABLE constexpr struct { + uint32_t divisor; + int shift_amount; +} div_small_pow10_infos[] = {{10, 16}, {100, 16}}; + +// Replaces n by floor(n / pow(10, N)) returning true if and only if n is +// divisible by pow(10, N). +// Precondition: n <= pow(10, N + 1). +template +auto check_divisibility_and_divide_by_pow10(uint32_t& n) noexcept -> bool { + // The numbers below are chosen such that: + // 1. floor(n/d) = floor(nm / 2^k) where d=10 or d=100, + // 2. nm mod 2^k < m if and only if n is divisible by d, + // where m is magic_number, k is shift_amount + // and d is divisor. + // + // Item 1 is a common technique of replacing division by a constant with + // multiplication, see e.g. "Division by Invariant Integers Using + // Multiplication" by Granlund and Montgomery (1994). magic_number (m) is set + // to ceil(2^k/d) for large enough k. + // The idea for item 2 originates from Schubfach. + constexpr auto info = div_small_pow10_infos[N - 1]; + FMT_ASSERT(n <= info.divisor * 10, "n is too large"); + constexpr uint32_t magic_number = + (1u << info.shift_amount) / info.divisor + 1; + n *= magic_number; + const uint32_t comparison_mask = (1u << info.shift_amount) - 1; + bool result = (n & comparison_mask) < magic_number; + n >>= info.shift_amount; + return result; +} + +// Computes floor(n / pow(10, N)) for small n and N. +// Precondition: n <= pow(10, N + 1). +template auto small_division_by_pow10(uint32_t n) noexcept -> uint32_t { + constexpr auto info = div_small_pow10_infos[N - 1]; + FMT_ASSERT(n <= info.divisor * 10, "n is too large"); + constexpr uint32_t magic_number = + (1u << info.shift_amount) / info.divisor + 1; + return (n * magic_number) >> info.shift_amount; +} + +// Computes floor(n / 10^(kappa + 1)) (float) +inline auto divide_by_10_to_kappa_plus_1(uint32_t n) noexcept -> uint32_t { + // 1374389535 = ceil(2^37/100) + return static_cast((static_cast(n) * 1374389535) >> 37); +} +// Computes floor(n / 10^(kappa + 1)) (double) +inline auto divide_by_10_to_kappa_plus_1(uint64_t n) noexcept -> uint64_t { + // 2361183241434822607 = ceil(2^(64+7)/1000) + return umul128_upper64(n, 2361183241434822607ull) >> 7; +} + +// Various subroutines using pow10 cache +template struct cache_accessor; + +template <> struct cache_accessor { + using carrier_uint = float_info::carrier_uint; + using cache_entry_type = uint64_t; + + static auto get_cached_power(int k) noexcept -> uint64_t { + FMT_ASSERT(k >= float_info::min_k && k <= float_info::max_k, + "k is out of range"); + static constexpr const uint64_t pow10_significands[] = { + 0x81ceb32c4b43fcf5, 0xa2425ff75e14fc32, 0xcad2f7f5359a3b3f, + 0xfd87b5f28300ca0e, 0x9e74d1b791e07e49, 0xc612062576589ddb, + 0xf79687aed3eec552, 0x9abe14cd44753b53, 0xc16d9a0095928a28, + 0xf1c90080baf72cb2, 0x971da05074da7bef, 0xbce5086492111aeb, + 0xec1e4a7db69561a6, 0x9392ee8e921d5d08, 0xb877aa3236a4b44a, + 0xe69594bec44de15c, 0x901d7cf73ab0acda, 0xb424dc35095cd810, + 0xe12e13424bb40e14, 0x8cbccc096f5088cc, 0xafebff0bcb24aaff, + 0xdbe6fecebdedd5bf, 0x89705f4136b4a598, 0xabcc77118461cefd, + 0xd6bf94d5e57a42bd, 0x8637bd05af6c69b6, 0xa7c5ac471b478424, + 0xd1b71758e219652c, 0x83126e978d4fdf3c, 0xa3d70a3d70a3d70b, + 0xcccccccccccccccd, 0x8000000000000000, 0xa000000000000000, + 0xc800000000000000, 0xfa00000000000000, 0x9c40000000000000, + 0xc350000000000000, 0xf424000000000000, 0x9896800000000000, + 0xbebc200000000000, 0xee6b280000000000, 0x9502f90000000000, + 0xba43b74000000000, 0xe8d4a51000000000, 0x9184e72a00000000, + 0xb5e620f480000000, 0xe35fa931a0000000, 0x8e1bc9bf04000000, + 0xb1a2bc2ec5000000, 0xde0b6b3a76400000, 0x8ac7230489e80000, + 0xad78ebc5ac620000, 0xd8d726b7177a8000, 0x878678326eac9000, + 0xa968163f0a57b400, 0xd3c21bcecceda100, 0x84595161401484a0, + 0xa56fa5b99019a5c8, 0xcecb8f27f4200f3a, 0x813f3978f8940985, + 0xa18f07d736b90be6, 0xc9f2c9cd04674edf, 0xfc6f7c4045812297, + 0x9dc5ada82b70b59e, 0xc5371912364ce306, 0xf684df56c3e01bc7, + 0x9a130b963a6c115d, 0xc097ce7bc90715b4, 0xf0bdc21abb48db21, + 0x96769950b50d88f5, 0xbc143fa4e250eb32, 0xeb194f8e1ae525fe, + 0x92efd1b8d0cf37bf, 0xb7abc627050305ae, 0xe596b7b0c643c71a, + 0x8f7e32ce7bea5c70, 0xb35dbf821ae4f38c, 0xe0352f62a19e306f}; + return pow10_significands[k - float_info::min_k]; + } + + struct compute_mul_result { + carrier_uint result; + bool is_integer; + }; + struct compute_mul_parity_result { + bool parity; + bool is_integer; + }; + + static auto compute_mul(carrier_uint u, + const cache_entry_type& cache) noexcept + -> compute_mul_result { + auto r = umul96_upper64(u, cache); + return {static_cast(r >> 32), + static_cast(r) == 0}; + } + + static auto compute_delta(const cache_entry_type& cache, int beta) noexcept + -> uint32_t { + return static_cast(cache >> (64 - 1 - beta)); + } + + static auto compute_mul_parity(carrier_uint two_f, + const cache_entry_type& cache, + int beta) noexcept + -> compute_mul_parity_result { + FMT_ASSERT(beta >= 1, ""); + FMT_ASSERT(beta < 64, ""); + + auto r = umul96_lower64(two_f, cache); + return {((r >> (64 - beta)) & 1) != 0, + static_cast(r >> (32 - beta)) == 0}; + } + + static auto compute_left_endpoint_for_shorter_interval_case( + const cache_entry_type& cache, int beta) noexcept -> carrier_uint { + return static_cast( + (cache - (cache >> (num_significand_bits() + 2))) >> + (64 - num_significand_bits() - 1 - beta)); + } + + static auto compute_right_endpoint_for_shorter_interval_case( + const cache_entry_type& cache, int beta) noexcept -> carrier_uint { + return static_cast( + (cache + (cache >> (num_significand_bits() + 1))) >> + (64 - num_significand_bits() - 1 - beta)); + } + + static auto compute_round_up_for_shorter_interval_case( + const cache_entry_type& cache, int beta) noexcept -> carrier_uint { + return (static_cast( + cache >> (64 - num_significand_bits() - 2 - beta)) + + 1) / + 2; + } +}; + +template <> struct cache_accessor { + using carrier_uint = float_info::carrier_uint; + using cache_entry_type = uint128_fallback; + + static auto get_cached_power(int k) noexcept -> uint128_fallback { + FMT_ASSERT(k >= float_info::min_k && k <= float_info::max_k, + "k is out of range"); + + static constexpr const uint128_fallback pow10_significands[] = { +#if FMT_USE_FULL_CACHE_DRAGONBOX + {0xff77b1fcbebcdc4f, 0x25e8e89c13bb0f7b}, + {0x9faacf3df73609b1, 0x77b191618c54e9ad}, + {0xc795830d75038c1d, 0xd59df5b9ef6a2418}, + {0xf97ae3d0d2446f25, 0x4b0573286b44ad1e}, + {0x9becce62836ac577, 0x4ee367f9430aec33}, + {0xc2e801fb244576d5, 0x229c41f793cda740}, + {0xf3a20279ed56d48a, 0x6b43527578c11110}, + {0x9845418c345644d6, 0x830a13896b78aaaa}, + {0xbe5691ef416bd60c, 0x23cc986bc656d554}, + {0xedec366b11c6cb8f, 0x2cbfbe86b7ec8aa9}, + {0x94b3a202eb1c3f39, 0x7bf7d71432f3d6aa}, + {0xb9e08a83a5e34f07, 0xdaf5ccd93fb0cc54}, + {0xe858ad248f5c22c9, 0xd1b3400f8f9cff69}, + {0x91376c36d99995be, 0x23100809b9c21fa2}, + {0xb58547448ffffb2d, 0xabd40a0c2832a78b}, + {0xe2e69915b3fff9f9, 0x16c90c8f323f516d}, + {0x8dd01fad907ffc3b, 0xae3da7d97f6792e4}, + {0xb1442798f49ffb4a, 0x99cd11cfdf41779d}, + {0xdd95317f31c7fa1d, 0x40405643d711d584}, + {0x8a7d3eef7f1cfc52, 0x482835ea666b2573}, + {0xad1c8eab5ee43b66, 0xda3243650005eed0}, + {0xd863b256369d4a40, 0x90bed43e40076a83}, + {0x873e4f75e2224e68, 0x5a7744a6e804a292}, + {0xa90de3535aaae202, 0x711515d0a205cb37}, + {0xd3515c2831559a83, 0x0d5a5b44ca873e04}, + {0x8412d9991ed58091, 0xe858790afe9486c3}, + {0xa5178fff668ae0b6, 0x626e974dbe39a873}, + {0xce5d73ff402d98e3, 0xfb0a3d212dc81290}, + {0x80fa687f881c7f8e, 0x7ce66634bc9d0b9a}, + {0xa139029f6a239f72, 0x1c1fffc1ebc44e81}, + {0xc987434744ac874e, 0xa327ffb266b56221}, + {0xfbe9141915d7a922, 0x4bf1ff9f0062baa9}, + {0x9d71ac8fada6c9b5, 0x6f773fc3603db4aa}, + {0xc4ce17b399107c22, 0xcb550fb4384d21d4}, + {0xf6019da07f549b2b, 0x7e2a53a146606a49}, + {0x99c102844f94e0fb, 0x2eda7444cbfc426e}, + {0xc0314325637a1939, 0xfa911155fefb5309}, + {0xf03d93eebc589f88, 0x793555ab7eba27cb}, + {0x96267c7535b763b5, 0x4bc1558b2f3458df}, + {0xbbb01b9283253ca2, 0x9eb1aaedfb016f17}, + {0xea9c227723ee8bcb, 0x465e15a979c1cadd}, + {0x92a1958a7675175f, 0x0bfacd89ec191eca}, + {0xb749faed14125d36, 0xcef980ec671f667c}, + {0xe51c79a85916f484, 0x82b7e12780e7401b}, + {0x8f31cc0937ae58d2, 0xd1b2ecb8b0908811}, + {0xb2fe3f0b8599ef07, 0x861fa7e6dcb4aa16}, + {0xdfbdcece67006ac9, 0x67a791e093e1d49b}, + {0x8bd6a141006042bd, 0xe0c8bb2c5c6d24e1}, + {0xaecc49914078536d, 0x58fae9f773886e19}, + {0xda7f5bf590966848, 0xaf39a475506a899f}, + {0x888f99797a5e012d, 0x6d8406c952429604}, + {0xaab37fd7d8f58178, 0xc8e5087ba6d33b84}, + {0xd5605fcdcf32e1d6, 0xfb1e4a9a90880a65}, + {0x855c3be0a17fcd26, 0x5cf2eea09a550680}, + {0xa6b34ad8c9dfc06f, 0xf42faa48c0ea481f}, + {0xd0601d8efc57b08b, 0xf13b94daf124da27}, + {0x823c12795db6ce57, 0x76c53d08d6b70859}, + {0xa2cb1717b52481ed, 0x54768c4b0c64ca6f}, + {0xcb7ddcdda26da268, 0xa9942f5dcf7dfd0a}, + {0xfe5d54150b090b02, 0xd3f93b35435d7c4d}, + {0x9efa548d26e5a6e1, 0xc47bc5014a1a6db0}, + {0xc6b8e9b0709f109a, 0x359ab6419ca1091c}, + {0xf867241c8cc6d4c0, 0xc30163d203c94b63}, + {0x9b407691d7fc44f8, 0x79e0de63425dcf1e}, + {0xc21094364dfb5636, 0x985915fc12f542e5}, + {0xf294b943e17a2bc4, 0x3e6f5b7b17b2939e}, + {0x979cf3ca6cec5b5a, 0xa705992ceecf9c43}, + {0xbd8430bd08277231, 0x50c6ff782a838354}, + {0xece53cec4a314ebd, 0xa4f8bf5635246429}, + {0x940f4613ae5ed136, 0x871b7795e136be9a}, + {0xb913179899f68584, 0x28e2557b59846e40}, + {0xe757dd7ec07426e5, 0x331aeada2fe589d0}, + {0x9096ea6f3848984f, 0x3ff0d2c85def7622}, + {0xb4bca50b065abe63, 0x0fed077a756b53aa}, + {0xe1ebce4dc7f16dfb, 0xd3e8495912c62895}, + {0x8d3360f09cf6e4bd, 0x64712dd7abbbd95d}, + {0xb080392cc4349dec, 0xbd8d794d96aacfb4}, + {0xdca04777f541c567, 0xecf0d7a0fc5583a1}, + {0x89e42caaf9491b60, 0xf41686c49db57245}, + {0xac5d37d5b79b6239, 0x311c2875c522ced6}, + {0xd77485cb25823ac7, 0x7d633293366b828c}, + {0x86a8d39ef77164bc, 0xae5dff9c02033198}, + {0xa8530886b54dbdeb, 0xd9f57f830283fdfd}, + {0xd267caa862a12d66, 0xd072df63c324fd7c}, + {0x8380dea93da4bc60, 0x4247cb9e59f71e6e}, + {0xa46116538d0deb78, 0x52d9be85f074e609}, + {0xcd795be870516656, 0x67902e276c921f8c}, + {0x806bd9714632dff6, 0x00ba1cd8a3db53b7}, + {0xa086cfcd97bf97f3, 0x80e8a40eccd228a5}, + {0xc8a883c0fdaf7df0, 0x6122cd128006b2ce}, + {0xfad2a4b13d1b5d6c, 0x796b805720085f82}, + {0x9cc3a6eec6311a63, 0xcbe3303674053bb1}, + {0xc3f490aa77bd60fc, 0xbedbfc4411068a9d}, + {0xf4f1b4d515acb93b, 0xee92fb5515482d45}, + {0x991711052d8bf3c5, 0x751bdd152d4d1c4b}, + {0xbf5cd54678eef0b6, 0xd262d45a78a0635e}, + {0xef340a98172aace4, 0x86fb897116c87c35}, + {0x9580869f0e7aac0e, 0xd45d35e6ae3d4da1}, + {0xbae0a846d2195712, 0x8974836059cca10a}, + {0xe998d258869facd7, 0x2bd1a438703fc94c}, + {0x91ff83775423cc06, 0x7b6306a34627ddd0}, + {0xb67f6455292cbf08, 0x1a3bc84c17b1d543}, + {0xe41f3d6a7377eeca, 0x20caba5f1d9e4a94}, + {0x8e938662882af53e, 0x547eb47b7282ee9d}, + {0xb23867fb2a35b28d, 0xe99e619a4f23aa44}, + {0xdec681f9f4c31f31, 0x6405fa00e2ec94d5}, + {0x8b3c113c38f9f37e, 0xde83bc408dd3dd05}, + {0xae0b158b4738705e, 0x9624ab50b148d446}, + {0xd98ddaee19068c76, 0x3badd624dd9b0958}, + {0x87f8a8d4cfa417c9, 0xe54ca5d70a80e5d7}, + {0xa9f6d30a038d1dbc, 0x5e9fcf4ccd211f4d}, + {0xd47487cc8470652b, 0x7647c32000696720}, + {0x84c8d4dfd2c63f3b, 0x29ecd9f40041e074}, + {0xa5fb0a17c777cf09, 0xf468107100525891}, + {0xcf79cc9db955c2cc, 0x7182148d4066eeb5}, + {0x81ac1fe293d599bf, 0xc6f14cd848405531}, + {0xa21727db38cb002f, 0xb8ada00e5a506a7d}, + {0xca9cf1d206fdc03b, 0xa6d90811f0e4851d}, + {0xfd442e4688bd304a, 0x908f4a166d1da664}, + {0x9e4a9cec15763e2e, 0x9a598e4e043287ff}, + {0xc5dd44271ad3cdba, 0x40eff1e1853f29fe}, + {0xf7549530e188c128, 0xd12bee59e68ef47d}, + {0x9a94dd3e8cf578b9, 0x82bb74f8301958cf}, + {0xc13a148e3032d6e7, 0xe36a52363c1faf02}, + {0xf18899b1bc3f8ca1, 0xdc44e6c3cb279ac2}, + {0x96f5600f15a7b7e5, 0x29ab103a5ef8c0ba}, + {0xbcb2b812db11a5de, 0x7415d448f6b6f0e8}, + {0xebdf661791d60f56, 0x111b495b3464ad22}, + {0x936b9fcebb25c995, 0xcab10dd900beec35}, + {0xb84687c269ef3bfb, 0x3d5d514f40eea743}, + {0xe65829b3046b0afa, 0x0cb4a5a3112a5113}, + {0x8ff71a0fe2c2e6dc, 0x47f0e785eaba72ac}, + {0xb3f4e093db73a093, 0x59ed216765690f57}, + {0xe0f218b8d25088b8, 0x306869c13ec3532d}, + {0x8c974f7383725573, 0x1e414218c73a13fc}, + {0xafbd2350644eeacf, 0xe5d1929ef90898fb}, + {0xdbac6c247d62a583, 0xdf45f746b74abf3a}, + {0x894bc396ce5da772, 0x6b8bba8c328eb784}, + {0xab9eb47c81f5114f, 0x066ea92f3f326565}, + {0xd686619ba27255a2, 0xc80a537b0efefebe}, + {0x8613fd0145877585, 0xbd06742ce95f5f37}, + {0xa798fc4196e952e7, 0x2c48113823b73705}, + {0xd17f3b51fca3a7a0, 0xf75a15862ca504c6}, + {0x82ef85133de648c4, 0x9a984d73dbe722fc}, + {0xa3ab66580d5fdaf5, 0xc13e60d0d2e0ebbb}, + {0xcc963fee10b7d1b3, 0x318df905079926a9}, + {0xffbbcfe994e5c61f, 0xfdf17746497f7053}, + {0x9fd561f1fd0f9bd3, 0xfeb6ea8bedefa634}, + {0xc7caba6e7c5382c8, 0xfe64a52ee96b8fc1}, + {0xf9bd690a1b68637b, 0x3dfdce7aa3c673b1}, + {0x9c1661a651213e2d, 0x06bea10ca65c084f}, + {0xc31bfa0fe5698db8, 0x486e494fcff30a63}, + {0xf3e2f893dec3f126, 0x5a89dba3c3efccfb}, + {0x986ddb5c6b3a76b7, 0xf89629465a75e01d}, + {0xbe89523386091465, 0xf6bbb397f1135824}, + {0xee2ba6c0678b597f, 0x746aa07ded582e2d}, + {0x94db483840b717ef, 0xa8c2a44eb4571cdd}, + {0xba121a4650e4ddeb, 0x92f34d62616ce414}, + {0xe896a0d7e51e1566, 0x77b020baf9c81d18}, + {0x915e2486ef32cd60, 0x0ace1474dc1d122f}, + {0xb5b5ada8aaff80b8, 0x0d819992132456bb}, + {0xe3231912d5bf60e6, 0x10e1fff697ed6c6a}, + {0x8df5efabc5979c8f, 0xca8d3ffa1ef463c2}, + {0xb1736b96b6fd83b3, 0xbd308ff8a6b17cb3}, + {0xddd0467c64bce4a0, 0xac7cb3f6d05ddbdf}, + {0x8aa22c0dbef60ee4, 0x6bcdf07a423aa96c}, + {0xad4ab7112eb3929d, 0x86c16c98d2c953c7}, + {0xd89d64d57a607744, 0xe871c7bf077ba8b8}, + {0x87625f056c7c4a8b, 0x11471cd764ad4973}, + {0xa93af6c6c79b5d2d, 0xd598e40d3dd89bd0}, + {0xd389b47879823479, 0x4aff1d108d4ec2c4}, + {0x843610cb4bf160cb, 0xcedf722a585139bb}, + {0xa54394fe1eedb8fe, 0xc2974eb4ee658829}, + {0xce947a3da6a9273e, 0x733d226229feea33}, + {0x811ccc668829b887, 0x0806357d5a3f5260}, + {0xa163ff802a3426a8, 0xca07c2dcb0cf26f8}, + {0xc9bcff6034c13052, 0xfc89b393dd02f0b6}, + {0xfc2c3f3841f17c67, 0xbbac2078d443ace3}, + {0x9d9ba7832936edc0, 0xd54b944b84aa4c0e}, + {0xc5029163f384a931, 0x0a9e795e65d4df12}, + {0xf64335bcf065d37d, 0x4d4617b5ff4a16d6}, + {0x99ea0196163fa42e, 0x504bced1bf8e4e46}, + {0xc06481fb9bcf8d39, 0xe45ec2862f71e1d7}, + {0xf07da27a82c37088, 0x5d767327bb4e5a4d}, + {0x964e858c91ba2655, 0x3a6a07f8d510f870}, + {0xbbe226efb628afea, 0x890489f70a55368c}, + {0xeadab0aba3b2dbe5, 0x2b45ac74ccea842f}, + {0x92c8ae6b464fc96f, 0x3b0b8bc90012929e}, + {0xb77ada0617e3bbcb, 0x09ce6ebb40173745}, + {0xe55990879ddcaabd, 0xcc420a6a101d0516}, + {0x8f57fa54c2a9eab6, 0x9fa946824a12232e}, + {0xb32df8e9f3546564, 0x47939822dc96abfa}, + {0xdff9772470297ebd, 0x59787e2b93bc56f8}, + {0x8bfbea76c619ef36, 0x57eb4edb3c55b65b}, + {0xaefae51477a06b03, 0xede622920b6b23f2}, + {0xdab99e59958885c4, 0xe95fab368e45ecee}, + {0x88b402f7fd75539b, 0x11dbcb0218ebb415}, + {0xaae103b5fcd2a881, 0xd652bdc29f26a11a}, + {0xd59944a37c0752a2, 0x4be76d3346f04960}, + {0x857fcae62d8493a5, 0x6f70a4400c562ddc}, + {0xa6dfbd9fb8e5b88e, 0xcb4ccd500f6bb953}, + {0xd097ad07a71f26b2, 0x7e2000a41346a7a8}, + {0x825ecc24c873782f, 0x8ed400668c0c28c9}, + {0xa2f67f2dfa90563b, 0x728900802f0f32fb}, + {0xcbb41ef979346bca, 0x4f2b40a03ad2ffba}, + {0xfea126b7d78186bc, 0xe2f610c84987bfa9}, + {0x9f24b832e6b0f436, 0x0dd9ca7d2df4d7ca}, + {0xc6ede63fa05d3143, 0x91503d1c79720dbc}, + {0xf8a95fcf88747d94, 0x75a44c6397ce912b}, + {0x9b69dbe1b548ce7c, 0xc986afbe3ee11abb}, + {0xc24452da229b021b, 0xfbe85badce996169}, + {0xf2d56790ab41c2a2, 0xfae27299423fb9c4}, + {0x97c560ba6b0919a5, 0xdccd879fc967d41b}, + {0xbdb6b8e905cb600f, 0x5400e987bbc1c921}, + {0xed246723473e3813, 0x290123e9aab23b69}, + {0x9436c0760c86e30b, 0xf9a0b6720aaf6522}, + {0xb94470938fa89bce, 0xf808e40e8d5b3e6a}, + {0xe7958cb87392c2c2, 0xb60b1d1230b20e05}, + {0x90bd77f3483bb9b9, 0xb1c6f22b5e6f48c3}, + {0xb4ecd5f01a4aa828, 0x1e38aeb6360b1af4}, + {0xe2280b6c20dd5232, 0x25c6da63c38de1b1}, + {0x8d590723948a535f, 0x579c487e5a38ad0f}, + {0xb0af48ec79ace837, 0x2d835a9df0c6d852}, + {0xdcdb1b2798182244, 0xf8e431456cf88e66}, + {0x8a08f0f8bf0f156b, 0x1b8e9ecb641b5900}, + {0xac8b2d36eed2dac5, 0xe272467e3d222f40}, + {0xd7adf884aa879177, 0x5b0ed81dcc6abb10}, + {0x86ccbb52ea94baea, 0x98e947129fc2b4ea}, + {0xa87fea27a539e9a5, 0x3f2398d747b36225}, + {0xd29fe4b18e88640e, 0x8eec7f0d19a03aae}, + {0x83a3eeeef9153e89, 0x1953cf68300424ad}, + {0xa48ceaaab75a8e2b, 0x5fa8c3423c052dd8}, + {0xcdb02555653131b6, 0x3792f412cb06794e}, + {0x808e17555f3ebf11, 0xe2bbd88bbee40bd1}, + {0xa0b19d2ab70e6ed6, 0x5b6aceaeae9d0ec5}, + {0xc8de047564d20a8b, 0xf245825a5a445276}, + {0xfb158592be068d2e, 0xeed6e2f0f0d56713}, + {0x9ced737bb6c4183d, 0x55464dd69685606c}, + {0xc428d05aa4751e4c, 0xaa97e14c3c26b887}, + {0xf53304714d9265df, 0xd53dd99f4b3066a9}, + {0x993fe2c6d07b7fab, 0xe546a8038efe402a}, + {0xbf8fdb78849a5f96, 0xde98520472bdd034}, + {0xef73d256a5c0f77c, 0x963e66858f6d4441}, + {0x95a8637627989aad, 0xdde7001379a44aa9}, + {0xbb127c53b17ec159, 0x5560c018580d5d53}, + {0xe9d71b689dde71af, 0xaab8f01e6e10b4a7}, + {0x9226712162ab070d, 0xcab3961304ca70e9}, + {0xb6b00d69bb55c8d1, 0x3d607b97c5fd0d23}, + {0xe45c10c42a2b3b05, 0x8cb89a7db77c506b}, + {0x8eb98a7a9a5b04e3, 0x77f3608e92adb243}, + {0xb267ed1940f1c61c, 0x55f038b237591ed4}, + {0xdf01e85f912e37a3, 0x6b6c46dec52f6689}, + {0x8b61313bbabce2c6, 0x2323ac4b3b3da016}, + {0xae397d8aa96c1b77, 0xabec975e0a0d081b}, + {0xd9c7dced53c72255, 0x96e7bd358c904a22}, + {0x881cea14545c7575, 0x7e50d64177da2e55}, + {0xaa242499697392d2, 0xdde50bd1d5d0b9ea}, + {0xd4ad2dbfc3d07787, 0x955e4ec64b44e865}, + {0x84ec3c97da624ab4, 0xbd5af13bef0b113f}, + {0xa6274bbdd0fadd61, 0xecb1ad8aeacdd58f}, + {0xcfb11ead453994ba, 0x67de18eda5814af3}, + {0x81ceb32c4b43fcf4, 0x80eacf948770ced8}, + {0xa2425ff75e14fc31, 0xa1258379a94d028e}, + {0xcad2f7f5359a3b3e, 0x096ee45813a04331}, + {0xfd87b5f28300ca0d, 0x8bca9d6e188853fd}, + {0x9e74d1b791e07e48, 0x775ea264cf55347e}, + {0xc612062576589dda, 0x95364afe032a819e}, + {0xf79687aed3eec551, 0x3a83ddbd83f52205}, + {0x9abe14cd44753b52, 0xc4926a9672793543}, + {0xc16d9a0095928a27, 0x75b7053c0f178294}, + {0xf1c90080baf72cb1, 0x5324c68b12dd6339}, + {0x971da05074da7bee, 0xd3f6fc16ebca5e04}, + {0xbce5086492111aea, 0x88f4bb1ca6bcf585}, + {0xec1e4a7db69561a5, 0x2b31e9e3d06c32e6}, + {0x9392ee8e921d5d07, 0x3aff322e62439fd0}, + {0xb877aa3236a4b449, 0x09befeb9fad487c3}, + {0xe69594bec44de15b, 0x4c2ebe687989a9b4}, + {0x901d7cf73ab0acd9, 0x0f9d37014bf60a11}, + {0xb424dc35095cd80f, 0x538484c19ef38c95}, + {0xe12e13424bb40e13, 0x2865a5f206b06fba}, + {0x8cbccc096f5088cb, 0xf93f87b7442e45d4}, + {0xafebff0bcb24aafe, 0xf78f69a51539d749}, + {0xdbe6fecebdedd5be, 0xb573440e5a884d1c}, + {0x89705f4136b4a597, 0x31680a88f8953031}, + {0xabcc77118461cefc, 0xfdc20d2b36ba7c3e}, + {0xd6bf94d5e57a42bc, 0x3d32907604691b4d}, + {0x8637bd05af6c69b5, 0xa63f9a49c2c1b110}, + {0xa7c5ac471b478423, 0x0fcf80dc33721d54}, + {0xd1b71758e219652b, 0xd3c36113404ea4a9}, + {0x83126e978d4fdf3b, 0x645a1cac083126ea}, + {0xa3d70a3d70a3d70a, 0x3d70a3d70a3d70a4}, + {0xcccccccccccccccc, 0xcccccccccccccccd}, + {0x8000000000000000, 0x0000000000000000}, + {0xa000000000000000, 0x0000000000000000}, + {0xc800000000000000, 0x0000000000000000}, + {0xfa00000000000000, 0x0000000000000000}, + {0x9c40000000000000, 0x0000000000000000}, + {0xc350000000000000, 0x0000000000000000}, + {0xf424000000000000, 0x0000000000000000}, + {0x9896800000000000, 0x0000000000000000}, + {0xbebc200000000000, 0x0000000000000000}, + {0xee6b280000000000, 0x0000000000000000}, + {0x9502f90000000000, 0x0000000000000000}, + {0xba43b74000000000, 0x0000000000000000}, + {0xe8d4a51000000000, 0x0000000000000000}, + {0x9184e72a00000000, 0x0000000000000000}, + {0xb5e620f480000000, 0x0000000000000000}, + {0xe35fa931a0000000, 0x0000000000000000}, + {0x8e1bc9bf04000000, 0x0000000000000000}, + {0xb1a2bc2ec5000000, 0x0000000000000000}, + {0xde0b6b3a76400000, 0x0000000000000000}, + {0x8ac7230489e80000, 0x0000000000000000}, + {0xad78ebc5ac620000, 0x0000000000000000}, + {0xd8d726b7177a8000, 0x0000000000000000}, + {0x878678326eac9000, 0x0000000000000000}, + {0xa968163f0a57b400, 0x0000000000000000}, + {0xd3c21bcecceda100, 0x0000000000000000}, + {0x84595161401484a0, 0x0000000000000000}, + {0xa56fa5b99019a5c8, 0x0000000000000000}, + {0xcecb8f27f4200f3a, 0x0000000000000000}, + {0x813f3978f8940984, 0x4000000000000000}, + {0xa18f07d736b90be5, 0x5000000000000000}, + {0xc9f2c9cd04674ede, 0xa400000000000000}, + {0xfc6f7c4045812296, 0x4d00000000000000}, + {0x9dc5ada82b70b59d, 0xf020000000000000}, + {0xc5371912364ce305, 0x6c28000000000000}, + {0xf684df56c3e01bc6, 0xc732000000000000}, + {0x9a130b963a6c115c, 0x3c7f400000000000}, + {0xc097ce7bc90715b3, 0x4b9f100000000000}, + {0xf0bdc21abb48db20, 0x1e86d40000000000}, + {0x96769950b50d88f4, 0x1314448000000000}, + {0xbc143fa4e250eb31, 0x17d955a000000000}, + {0xeb194f8e1ae525fd, 0x5dcfab0800000000}, + {0x92efd1b8d0cf37be, 0x5aa1cae500000000}, + {0xb7abc627050305ad, 0xf14a3d9e40000000}, + {0xe596b7b0c643c719, 0x6d9ccd05d0000000}, + {0x8f7e32ce7bea5c6f, 0xe4820023a2000000}, + {0xb35dbf821ae4f38b, 0xdda2802c8a800000}, + {0xe0352f62a19e306e, 0xd50b2037ad200000}, + {0x8c213d9da502de45, 0x4526f422cc340000}, + {0xaf298d050e4395d6, 0x9670b12b7f410000}, + {0xdaf3f04651d47b4c, 0x3c0cdd765f114000}, + {0x88d8762bf324cd0f, 0xa5880a69fb6ac800}, + {0xab0e93b6efee0053, 0x8eea0d047a457a00}, + {0xd5d238a4abe98068, 0x72a4904598d6d880}, + {0x85a36366eb71f041, 0x47a6da2b7f864750}, + {0xa70c3c40a64e6c51, 0x999090b65f67d924}, + {0xd0cf4b50cfe20765, 0xfff4b4e3f741cf6d}, + {0x82818f1281ed449f, 0xbff8f10e7a8921a5}, + {0xa321f2d7226895c7, 0xaff72d52192b6a0e}, + {0xcbea6f8ceb02bb39, 0x9bf4f8a69f764491}, + {0xfee50b7025c36a08, 0x02f236d04753d5b5}, + {0x9f4f2726179a2245, 0x01d762422c946591}, + {0xc722f0ef9d80aad6, 0x424d3ad2b7b97ef6}, + {0xf8ebad2b84e0d58b, 0xd2e0898765a7deb3}, + {0x9b934c3b330c8577, 0x63cc55f49f88eb30}, + {0xc2781f49ffcfa6d5, 0x3cbf6b71c76b25fc}, + {0xf316271c7fc3908a, 0x8bef464e3945ef7b}, + {0x97edd871cfda3a56, 0x97758bf0e3cbb5ad}, + {0xbde94e8e43d0c8ec, 0x3d52eeed1cbea318}, + {0xed63a231d4c4fb27, 0x4ca7aaa863ee4bde}, + {0x945e455f24fb1cf8, 0x8fe8caa93e74ef6b}, + {0xb975d6b6ee39e436, 0xb3e2fd538e122b45}, + {0xe7d34c64a9c85d44, 0x60dbbca87196b617}, + {0x90e40fbeea1d3a4a, 0xbc8955e946fe31ce}, + {0xb51d13aea4a488dd, 0x6babab6398bdbe42}, + {0xe264589a4dcdab14, 0xc696963c7eed2dd2}, + {0x8d7eb76070a08aec, 0xfc1e1de5cf543ca3}, + {0xb0de65388cc8ada8, 0x3b25a55f43294bcc}, + {0xdd15fe86affad912, 0x49ef0eb713f39ebf}, + {0x8a2dbf142dfcc7ab, 0x6e3569326c784338}, + {0xacb92ed9397bf996, 0x49c2c37f07965405}, + {0xd7e77a8f87daf7fb, 0xdc33745ec97be907}, + {0x86f0ac99b4e8dafd, 0x69a028bb3ded71a4}, + {0xa8acd7c0222311bc, 0xc40832ea0d68ce0d}, + {0xd2d80db02aabd62b, 0xf50a3fa490c30191}, + {0x83c7088e1aab65db, 0x792667c6da79e0fb}, + {0xa4b8cab1a1563f52, 0x577001b891185939}, + {0xcde6fd5e09abcf26, 0xed4c0226b55e6f87}, + {0x80b05e5ac60b6178, 0x544f8158315b05b5}, + {0xa0dc75f1778e39d6, 0x696361ae3db1c722}, + {0xc913936dd571c84c, 0x03bc3a19cd1e38ea}, + {0xfb5878494ace3a5f, 0x04ab48a04065c724}, + {0x9d174b2dcec0e47b, 0x62eb0d64283f9c77}, + {0xc45d1df942711d9a, 0x3ba5d0bd324f8395}, + {0xf5746577930d6500, 0xca8f44ec7ee3647a}, + {0x9968bf6abbe85f20, 0x7e998b13cf4e1ecc}, + {0xbfc2ef456ae276e8, 0x9e3fedd8c321a67f}, + {0xefb3ab16c59b14a2, 0xc5cfe94ef3ea101f}, + {0x95d04aee3b80ece5, 0xbba1f1d158724a13}, + {0xbb445da9ca61281f, 0x2a8a6e45ae8edc98}, + {0xea1575143cf97226, 0xf52d09d71a3293be}, + {0x924d692ca61be758, 0x593c2626705f9c57}, + {0xb6e0c377cfa2e12e, 0x6f8b2fb00c77836d}, + {0xe498f455c38b997a, 0x0b6dfb9c0f956448}, + {0x8edf98b59a373fec, 0x4724bd4189bd5ead}, + {0xb2977ee300c50fe7, 0x58edec91ec2cb658}, + {0xdf3d5e9bc0f653e1, 0x2f2967b66737e3ee}, + {0x8b865b215899f46c, 0xbd79e0d20082ee75}, + {0xae67f1e9aec07187, 0xecd8590680a3aa12}, + {0xda01ee641a708de9, 0xe80e6f4820cc9496}, + {0x884134fe908658b2, 0x3109058d147fdcde}, + {0xaa51823e34a7eede, 0xbd4b46f0599fd416}, + {0xd4e5e2cdc1d1ea96, 0x6c9e18ac7007c91b}, + {0x850fadc09923329e, 0x03e2cf6bc604ddb1}, + {0xa6539930bf6bff45, 0x84db8346b786151d}, + {0xcfe87f7cef46ff16, 0xe612641865679a64}, + {0x81f14fae158c5f6e, 0x4fcb7e8f3f60c07f}, + {0xa26da3999aef7749, 0xe3be5e330f38f09e}, + {0xcb090c8001ab551c, 0x5cadf5bfd3072cc6}, + {0xfdcb4fa002162a63, 0x73d9732fc7c8f7f7}, + {0x9e9f11c4014dda7e, 0x2867e7fddcdd9afb}, + {0xc646d63501a1511d, 0xb281e1fd541501b9}, + {0xf7d88bc24209a565, 0x1f225a7ca91a4227}, + {0x9ae757596946075f, 0x3375788de9b06959}, + {0xc1a12d2fc3978937, 0x0052d6b1641c83af}, + {0xf209787bb47d6b84, 0xc0678c5dbd23a49b}, + {0x9745eb4d50ce6332, 0xf840b7ba963646e1}, + {0xbd176620a501fbff, 0xb650e5a93bc3d899}, + {0xec5d3fa8ce427aff, 0xa3e51f138ab4cebf}, + {0x93ba47c980e98cdf, 0xc66f336c36b10138}, + {0xb8a8d9bbe123f017, 0xb80b0047445d4185}, + {0xe6d3102ad96cec1d, 0xa60dc059157491e6}, + {0x9043ea1ac7e41392, 0x87c89837ad68db30}, + {0xb454e4a179dd1877, 0x29babe4598c311fc}, + {0xe16a1dc9d8545e94, 0xf4296dd6fef3d67b}, + {0x8ce2529e2734bb1d, 0x1899e4a65f58660d}, + {0xb01ae745b101e9e4, 0x5ec05dcff72e7f90}, + {0xdc21a1171d42645d, 0x76707543f4fa1f74}, + {0x899504ae72497eba, 0x6a06494a791c53a9}, + {0xabfa45da0edbde69, 0x0487db9d17636893}, + {0xd6f8d7509292d603, 0x45a9d2845d3c42b7}, + {0x865b86925b9bc5c2, 0x0b8a2392ba45a9b3}, + {0xa7f26836f282b732, 0x8e6cac7768d7141f}, + {0xd1ef0244af2364ff, 0x3207d795430cd927}, + {0x8335616aed761f1f, 0x7f44e6bd49e807b9}, + {0xa402b9c5a8d3a6e7, 0x5f16206c9c6209a7}, + {0xcd036837130890a1, 0x36dba887c37a8c10}, + {0x802221226be55a64, 0xc2494954da2c978a}, + {0xa02aa96b06deb0fd, 0xf2db9baa10b7bd6d}, + {0xc83553c5c8965d3d, 0x6f92829494e5acc8}, + {0xfa42a8b73abbf48c, 0xcb772339ba1f17fa}, + {0x9c69a97284b578d7, 0xff2a760414536efc}, + {0xc38413cf25e2d70d, 0xfef5138519684abb}, + {0xf46518c2ef5b8cd1, 0x7eb258665fc25d6a}, + {0x98bf2f79d5993802, 0xef2f773ffbd97a62}, + {0xbeeefb584aff8603, 0xaafb550ffacfd8fb}, + {0xeeaaba2e5dbf6784, 0x95ba2a53f983cf39}, + {0x952ab45cfa97a0b2, 0xdd945a747bf26184}, + {0xba756174393d88df, 0x94f971119aeef9e5}, + {0xe912b9d1478ceb17, 0x7a37cd5601aab85e}, + {0x91abb422ccb812ee, 0xac62e055c10ab33b}, + {0xb616a12b7fe617aa, 0x577b986b314d600a}, + {0xe39c49765fdf9d94, 0xed5a7e85fda0b80c}, + {0x8e41ade9fbebc27d, 0x14588f13be847308}, + {0xb1d219647ae6b31c, 0x596eb2d8ae258fc9}, + {0xde469fbd99a05fe3, 0x6fca5f8ed9aef3bc}, + {0x8aec23d680043bee, 0x25de7bb9480d5855}, + {0xada72ccc20054ae9, 0xaf561aa79a10ae6b}, + {0xd910f7ff28069da4, 0x1b2ba1518094da05}, + {0x87aa9aff79042286, 0x90fb44d2f05d0843}, + {0xa99541bf57452b28, 0x353a1607ac744a54}, + {0xd3fa922f2d1675f2, 0x42889b8997915ce9}, + {0x847c9b5d7c2e09b7, 0x69956135febada12}, + {0xa59bc234db398c25, 0x43fab9837e699096}, + {0xcf02b2c21207ef2e, 0x94f967e45e03f4bc}, + {0x8161afb94b44f57d, 0x1d1be0eebac278f6}, + {0xa1ba1ba79e1632dc, 0x6462d92a69731733}, + {0xca28a291859bbf93, 0x7d7b8f7503cfdcff}, + {0xfcb2cb35e702af78, 0x5cda735244c3d43f}, + {0x9defbf01b061adab, 0x3a0888136afa64a8}, + {0xc56baec21c7a1916, 0x088aaa1845b8fdd1}, + {0xf6c69a72a3989f5b, 0x8aad549e57273d46}, + {0x9a3c2087a63f6399, 0x36ac54e2f678864c}, + {0xc0cb28a98fcf3c7f, 0x84576a1bb416a7de}, + {0xf0fdf2d3f3c30b9f, 0x656d44a2a11c51d6}, + {0x969eb7c47859e743, 0x9f644ae5a4b1b326}, + {0xbc4665b596706114, 0x873d5d9f0dde1fef}, + {0xeb57ff22fc0c7959, 0xa90cb506d155a7eb}, + {0x9316ff75dd87cbd8, 0x09a7f12442d588f3}, + {0xb7dcbf5354e9bece, 0x0c11ed6d538aeb30}, + {0xe5d3ef282a242e81, 0x8f1668c8a86da5fb}, + {0x8fa475791a569d10, 0xf96e017d694487bd}, + {0xb38d92d760ec4455, 0x37c981dcc395a9ad}, + {0xe070f78d3927556a, 0x85bbe253f47b1418}, + {0x8c469ab843b89562, 0x93956d7478ccec8f}, + {0xaf58416654a6babb, 0x387ac8d1970027b3}, + {0xdb2e51bfe9d0696a, 0x06997b05fcc0319f}, + {0x88fcf317f22241e2, 0x441fece3bdf81f04}, + {0xab3c2fddeeaad25a, 0xd527e81cad7626c4}, + {0xd60b3bd56a5586f1, 0x8a71e223d8d3b075}, + {0x85c7056562757456, 0xf6872d5667844e4a}, + {0xa738c6bebb12d16c, 0xb428f8ac016561dc}, + {0xd106f86e69d785c7, 0xe13336d701beba53}, + {0x82a45b450226b39c, 0xecc0024661173474}, + {0xa34d721642b06084, 0x27f002d7f95d0191}, + {0xcc20ce9bd35c78a5, 0x31ec038df7b441f5}, + {0xff290242c83396ce, 0x7e67047175a15272}, + {0x9f79a169bd203e41, 0x0f0062c6e984d387}, + {0xc75809c42c684dd1, 0x52c07b78a3e60869}, + {0xf92e0c3537826145, 0xa7709a56ccdf8a83}, + {0x9bbcc7a142b17ccb, 0x88a66076400bb692}, + {0xc2abf989935ddbfe, 0x6acff893d00ea436}, + {0xf356f7ebf83552fe, 0x0583f6b8c4124d44}, + {0x98165af37b2153de, 0xc3727a337a8b704b}, + {0xbe1bf1b059e9a8d6, 0x744f18c0592e4c5d}, + {0xeda2ee1c7064130c, 0x1162def06f79df74}, + {0x9485d4d1c63e8be7, 0x8addcb5645ac2ba9}, + {0xb9a74a0637ce2ee1, 0x6d953e2bd7173693}, + {0xe8111c87c5c1ba99, 0xc8fa8db6ccdd0438}, + {0x910ab1d4db9914a0, 0x1d9c9892400a22a3}, + {0xb54d5e4a127f59c8, 0x2503beb6d00cab4c}, + {0xe2a0b5dc971f303a, 0x2e44ae64840fd61e}, + {0x8da471a9de737e24, 0x5ceaecfed289e5d3}, + {0xb10d8e1456105dad, 0x7425a83e872c5f48}, + {0xdd50f1996b947518, 0xd12f124e28f7771a}, + {0x8a5296ffe33cc92f, 0x82bd6b70d99aaa70}, + {0xace73cbfdc0bfb7b, 0x636cc64d1001550c}, + {0xd8210befd30efa5a, 0x3c47f7e05401aa4f}, + {0x8714a775e3e95c78, 0x65acfaec34810a72}, + {0xa8d9d1535ce3b396, 0x7f1839a741a14d0e}, + {0xd31045a8341ca07c, 0x1ede48111209a051}, + {0x83ea2b892091e44d, 0x934aed0aab460433}, + {0xa4e4b66b68b65d60, 0xf81da84d56178540}, + {0xce1de40642e3f4b9, 0x36251260ab9d668f}, + {0x80d2ae83e9ce78f3, 0xc1d72b7c6b42601a}, + {0xa1075a24e4421730, 0xb24cf65b8612f820}, + {0xc94930ae1d529cfc, 0xdee033f26797b628}, + {0xfb9b7cd9a4a7443c, 0x169840ef017da3b2}, + {0x9d412e0806e88aa5, 0x8e1f289560ee864f}, + {0xc491798a08a2ad4e, 0xf1a6f2bab92a27e3}, + {0xf5b5d7ec8acb58a2, 0xae10af696774b1dc}, + {0x9991a6f3d6bf1765, 0xacca6da1e0a8ef2a}, + {0xbff610b0cc6edd3f, 0x17fd090a58d32af4}, + {0xeff394dcff8a948e, 0xddfc4b4cef07f5b1}, + {0x95f83d0a1fb69cd9, 0x4abdaf101564f98f}, + {0xbb764c4ca7a4440f, 0x9d6d1ad41abe37f2}, + {0xea53df5fd18d5513, 0x84c86189216dc5ee}, + {0x92746b9be2f8552c, 0x32fd3cf5b4e49bb5}, + {0xb7118682dbb66a77, 0x3fbc8c33221dc2a2}, + {0xe4d5e82392a40515, 0x0fabaf3feaa5334b}, + {0x8f05b1163ba6832d, 0x29cb4d87f2a7400f}, + {0xb2c71d5bca9023f8, 0x743e20e9ef511013}, + {0xdf78e4b2bd342cf6, 0x914da9246b255417}, + {0x8bab8eefb6409c1a, 0x1ad089b6c2f7548f}, + {0xae9672aba3d0c320, 0xa184ac2473b529b2}, + {0xda3c0f568cc4f3e8, 0xc9e5d72d90a2741f}, + {0x8865899617fb1871, 0x7e2fa67c7a658893}, + {0xaa7eebfb9df9de8d, 0xddbb901b98feeab8}, + {0xd51ea6fa85785631, 0x552a74227f3ea566}, + {0x8533285c936b35de, 0xd53a88958f872760}, + {0xa67ff273b8460356, 0x8a892abaf368f138}, + {0xd01fef10a657842c, 0x2d2b7569b0432d86}, + {0x8213f56a67f6b29b, 0x9c3b29620e29fc74}, + {0xa298f2c501f45f42, 0x8349f3ba91b47b90}, + {0xcb3f2f7642717713, 0x241c70a936219a74}, + {0xfe0efb53d30dd4d7, 0xed238cd383aa0111}, + {0x9ec95d1463e8a506, 0xf4363804324a40ab}, + {0xc67bb4597ce2ce48, 0xb143c6053edcd0d6}, + {0xf81aa16fdc1b81da, 0xdd94b7868e94050b}, + {0x9b10a4e5e9913128, 0xca7cf2b4191c8327}, + {0xc1d4ce1f63f57d72, 0xfd1c2f611f63a3f1}, + {0xf24a01a73cf2dccf, 0xbc633b39673c8ced}, + {0x976e41088617ca01, 0xd5be0503e085d814}, + {0xbd49d14aa79dbc82, 0x4b2d8644d8a74e19}, + {0xec9c459d51852ba2, 0xddf8e7d60ed1219f}, + {0x93e1ab8252f33b45, 0xcabb90e5c942b504}, + {0xb8da1662e7b00a17, 0x3d6a751f3b936244}, + {0xe7109bfba19c0c9d, 0x0cc512670a783ad5}, + {0x906a617d450187e2, 0x27fb2b80668b24c6}, + {0xb484f9dc9641e9da, 0xb1f9f660802dedf7}, + {0xe1a63853bbd26451, 0x5e7873f8a0396974}, + {0x8d07e33455637eb2, 0xdb0b487b6423e1e9}, + {0xb049dc016abc5e5f, 0x91ce1a9a3d2cda63}, + {0xdc5c5301c56b75f7, 0x7641a140cc7810fc}, + {0x89b9b3e11b6329ba, 0xa9e904c87fcb0a9e}, + {0xac2820d9623bf429, 0x546345fa9fbdcd45}, + {0xd732290fbacaf133, 0xa97c177947ad4096}, + {0x867f59a9d4bed6c0, 0x49ed8eabcccc485e}, + {0xa81f301449ee8c70, 0x5c68f256bfff5a75}, + {0xd226fc195c6a2f8c, 0x73832eec6fff3112}, + {0x83585d8fd9c25db7, 0xc831fd53c5ff7eac}, + {0xa42e74f3d032f525, 0xba3e7ca8b77f5e56}, + {0xcd3a1230c43fb26f, 0x28ce1bd2e55f35ec}, + {0x80444b5e7aa7cf85, 0x7980d163cf5b81b4}, + {0xa0555e361951c366, 0xd7e105bcc3326220}, + {0xc86ab5c39fa63440, 0x8dd9472bf3fefaa8}, + {0xfa856334878fc150, 0xb14f98f6f0feb952}, + {0x9c935e00d4b9d8d2, 0x6ed1bf9a569f33d4}, + {0xc3b8358109e84f07, 0x0a862f80ec4700c9}, + {0xf4a642e14c6262c8, 0xcd27bb612758c0fb}, + {0x98e7e9cccfbd7dbd, 0x8038d51cb897789d}, + {0xbf21e44003acdd2c, 0xe0470a63e6bd56c4}, + {0xeeea5d5004981478, 0x1858ccfce06cac75}, + {0x95527a5202df0ccb, 0x0f37801e0c43ebc9}, + {0xbaa718e68396cffd, 0xd30560258f54e6bb}, + {0xe950df20247c83fd, 0x47c6b82ef32a206a}, + {0x91d28b7416cdd27e, 0x4cdc331d57fa5442}, + {0xb6472e511c81471d, 0xe0133fe4adf8e953}, + {0xe3d8f9e563a198e5, 0x58180fddd97723a7}, + {0x8e679c2f5e44ff8f, 0x570f09eaa7ea7649}, + {0xb201833b35d63f73, 0x2cd2cc6551e513db}, + {0xde81e40a034bcf4f, 0xf8077f7ea65e58d2}, + {0x8b112e86420f6191, 0xfb04afaf27faf783}, + {0xadd57a27d29339f6, 0x79c5db9af1f9b564}, + {0xd94ad8b1c7380874, 0x18375281ae7822bd}, + {0x87cec76f1c830548, 0x8f2293910d0b15b6}, + {0xa9c2794ae3a3c69a, 0xb2eb3875504ddb23}, + {0xd433179d9c8cb841, 0x5fa60692a46151ec}, + {0x849feec281d7f328, 0xdbc7c41ba6bcd334}, + {0xa5c7ea73224deff3, 0x12b9b522906c0801}, + {0xcf39e50feae16bef, 0xd768226b34870a01}, + {0x81842f29f2cce375, 0xe6a1158300d46641}, + {0xa1e53af46f801c53, 0x60495ae3c1097fd1}, + {0xca5e89b18b602368, 0x385bb19cb14bdfc5}, + {0xfcf62c1dee382c42, 0x46729e03dd9ed7b6}, + {0x9e19db92b4e31ba9, 0x6c07a2c26a8346d2}, + {0xc5a05277621be293, 0xc7098b7305241886}, + {0xf70867153aa2db38, 0xb8cbee4fc66d1ea8}, + {0x9a65406d44a5c903, 0x737f74f1dc043329}, + {0xc0fe908895cf3b44, 0x505f522e53053ff3}, + {0xf13e34aabb430a15, 0x647726b9e7c68ff0}, + {0x96c6e0eab509e64d, 0x5eca783430dc19f6}, + {0xbc789925624c5fe0, 0xb67d16413d132073}, + {0xeb96bf6ebadf77d8, 0xe41c5bd18c57e890}, + {0x933e37a534cbaae7, 0x8e91b962f7b6f15a}, + {0xb80dc58e81fe95a1, 0x723627bbb5a4adb1}, + {0xe61136f2227e3b09, 0xcec3b1aaa30dd91d}, + {0x8fcac257558ee4e6, 0x213a4f0aa5e8a7b2}, + {0xb3bd72ed2af29e1f, 0xa988e2cd4f62d19e}, + {0xe0accfa875af45a7, 0x93eb1b80a33b8606}, + {0x8c6c01c9498d8b88, 0xbc72f130660533c4}, + {0xaf87023b9bf0ee6a, 0xeb8fad7c7f8680b5}, + {0xdb68c2ca82ed2a05, 0xa67398db9f6820e2}, +#else + {0xff77b1fcbebcdc4f, 0x25e8e89c13bb0f7b}, + {0xce5d73ff402d98e3, 0xfb0a3d212dc81290}, + {0xa6b34ad8c9dfc06f, 0xf42faa48c0ea481f}, + {0x86a8d39ef77164bc, 0xae5dff9c02033198}, + {0xd98ddaee19068c76, 0x3badd624dd9b0958}, + {0xafbd2350644eeacf, 0xe5d1929ef90898fb}, + {0x8df5efabc5979c8f, 0xca8d3ffa1ef463c2}, + {0xe55990879ddcaabd, 0xcc420a6a101d0516}, + {0xb94470938fa89bce, 0xf808e40e8d5b3e6a}, + {0x95a8637627989aad, 0xdde7001379a44aa9}, + {0xf1c90080baf72cb1, 0x5324c68b12dd6339}, + {0xc350000000000000, 0x0000000000000000}, + {0x9dc5ada82b70b59d, 0xf020000000000000}, + {0xfee50b7025c36a08, 0x02f236d04753d5b5}, + {0xcde6fd5e09abcf26, 0xed4c0226b55e6f87}, + {0xa6539930bf6bff45, 0x84db8346b786151d}, + {0x865b86925b9bc5c2, 0x0b8a2392ba45a9b3}, + {0xd910f7ff28069da4, 0x1b2ba1518094da05}, + {0xaf58416654a6babb, 0x387ac8d1970027b3}, + {0x8da471a9de737e24, 0x5ceaecfed289e5d3}, + {0xe4d5e82392a40515, 0x0fabaf3feaa5334b}, + {0xb8da1662e7b00a17, 0x3d6a751f3b936244}, + {0x95527a5202df0ccb, 0x0f37801e0c43ebc9}, + {0xf13e34aabb430a15, 0x647726b9e7c68ff0} +#endif + }; + +#if FMT_USE_FULL_CACHE_DRAGONBOX + return pow10_significands[k - float_info::min_k]; +#else + static constexpr const uint64_t powers_of_5_64[] = { + 0x0000000000000001, 0x0000000000000005, 0x0000000000000019, + 0x000000000000007d, 0x0000000000000271, 0x0000000000000c35, + 0x0000000000003d09, 0x000000000001312d, 0x000000000005f5e1, + 0x00000000001dcd65, 0x00000000009502f9, 0x0000000002e90edd, + 0x000000000e8d4a51, 0x0000000048c27395, 0x000000016bcc41e9, + 0x000000071afd498d, 0x0000002386f26fc1, 0x000000b1a2bc2ec5, + 0x000003782dace9d9, 0x00001158e460913d, 0x000056bc75e2d631, + 0x0001b1ae4d6e2ef5, 0x000878678326eac9, 0x002a5a058fc295ed, + 0x00d3c21bcecceda1, 0x0422ca8b0a00a425, 0x14adf4b7320334b9}; + + static const int compression_ratio = 27; + + // Compute base index. + int cache_index = (k - float_info::min_k) / compression_ratio; + int kb = cache_index * compression_ratio + float_info::min_k; + int offset = k - kb; + + // Get base cache. + uint128_fallback base_cache = pow10_significands[cache_index]; + if (offset == 0) return base_cache; + + // Compute the required amount of bit-shift. + int alpha = floor_log2_pow10(kb + offset) - floor_log2_pow10(kb) - offset; + FMT_ASSERT(alpha > 0 && alpha < 64, "shifting error detected"); + + // Try to recover the real cache. + uint64_t pow5 = powers_of_5_64[offset]; + uint128_fallback recovered_cache = umul128(base_cache.high(), pow5); + uint128_fallback middle_low = umul128(base_cache.low(), pow5); + + recovered_cache += middle_low.high(); + + uint64_t high_to_middle = recovered_cache.high() << (64 - alpha); + uint64_t middle_to_low = recovered_cache.low() << (64 - alpha); + + recovered_cache = + uint128_fallback{(recovered_cache.low() >> alpha) | high_to_middle, + ((middle_low.low() >> alpha) | middle_to_low)}; + FMT_ASSERT(recovered_cache.low() + 1 != 0, ""); + return {recovered_cache.high(), recovered_cache.low() + 1}; +#endif + } + + struct compute_mul_result { + carrier_uint result; + bool is_integer; + }; + struct compute_mul_parity_result { + bool parity; + bool is_integer; + }; + + static auto compute_mul(carrier_uint u, + const cache_entry_type& cache) noexcept + -> compute_mul_result { + auto r = umul192_upper128(u, cache); + return {r.high(), r.low() == 0}; + } + + static auto compute_delta(cache_entry_type const& cache, int beta) noexcept + -> uint32_t { + return static_cast(cache.high() >> (64 - 1 - beta)); + } + + static auto compute_mul_parity(carrier_uint two_f, + const cache_entry_type& cache, + int beta) noexcept + -> compute_mul_parity_result { + FMT_ASSERT(beta >= 1, ""); + FMT_ASSERT(beta < 64, ""); + + auto r = umul192_lower128(two_f, cache); + return {((r.high() >> (64 - beta)) & 1) != 0, + ((r.high() << beta) | (r.low() >> (64 - beta))) == 0}; + } + + static auto compute_left_endpoint_for_shorter_interval_case( + const cache_entry_type& cache, int beta) noexcept -> carrier_uint { + return (cache.high() - + (cache.high() >> (num_significand_bits() + 2))) >> + (64 - num_significand_bits() - 1 - beta); + } + + static auto compute_right_endpoint_for_shorter_interval_case( + const cache_entry_type& cache, int beta) noexcept -> carrier_uint { + return (cache.high() + + (cache.high() >> (num_significand_bits() + 1))) >> + (64 - num_significand_bits() - 1 - beta); + } + + static auto compute_round_up_for_shorter_interval_case( + const cache_entry_type& cache, int beta) noexcept -> carrier_uint { + return ((cache.high() >> (64 - num_significand_bits() - 2 - beta)) + + 1) / + 2; + } +}; + +FMT_FUNC auto get_cached_power(int k) noexcept -> uint128_fallback { + return cache_accessor::get_cached_power(k); +} + +// Various integer checks +template +auto is_left_endpoint_integer_shorter_interval(int exponent) noexcept -> bool { + const int case_shorter_interval_left_endpoint_lower_threshold = 2; + const int case_shorter_interval_left_endpoint_upper_threshold = 3; + return exponent >= case_shorter_interval_left_endpoint_lower_threshold && + exponent <= case_shorter_interval_left_endpoint_upper_threshold; +} + +// Remove trailing zeros from n and return the number of zeros removed (float) +FMT_INLINE int remove_trailing_zeros(uint32_t& n, int s = 0) noexcept { + FMT_ASSERT(n != 0, ""); + // Modular inverse of 5 (mod 2^32): (mod_inv_5 * 5) mod 2^32 = 1. + constexpr uint32_t mod_inv_5 = 0xcccccccd; + constexpr uint32_t mod_inv_25 = 0xc28f5c29; // = mod_inv_5 * mod_inv_5 + + while (true) { + auto q = rotr(n * mod_inv_25, 2); + if (q > max_value() / 100) break; + n = q; + s += 2; + } + auto q = rotr(n * mod_inv_5, 1); + if (q <= max_value() / 10) { + n = q; + s |= 1; + } + return s; +} + +// Removes trailing zeros and returns the number of zeros removed (double) +FMT_INLINE int remove_trailing_zeros(uint64_t& n) noexcept { + FMT_ASSERT(n != 0, ""); + + // This magic number is ceil(2^90 / 10^8). + constexpr uint64_t magic_number = 12379400392853802749ull; + auto nm = umul128(n, magic_number); + + // Is n is divisible by 10^8? + if ((nm.high() & ((1ull << (90 - 64)) - 1)) == 0 && nm.low() < magic_number) { + // If yes, work with the quotient... + auto n32 = static_cast(nm.high() >> (90 - 64)); + // ... and use the 32 bit variant of the function + int s = remove_trailing_zeros(n32, 8); + n = n32; + return s; + } + + // If n is not divisible by 10^8, work with n itself. + constexpr uint64_t mod_inv_5 = 0xcccccccccccccccd; + constexpr uint64_t mod_inv_25 = 0x8f5c28f5c28f5c29; // mod_inv_5 * mod_inv_5 + + int s = 0; + while (true) { + auto q = rotr(n * mod_inv_25, 2); + if (q > max_value() / 100) break; + n = q; + s += 2; + } + auto q = rotr(n * mod_inv_5, 1); + if (q <= max_value() / 10) { + n = q; + s |= 1; + } + + return s; +} + +// The main algorithm for shorter interval case +template +FMT_INLINE decimal_fp shorter_interval_case(int exponent) noexcept { + decimal_fp ret_value; + // Compute k and beta + const int minus_k = floor_log10_pow2_minus_log10_4_over_3(exponent); + const int beta = exponent + floor_log2_pow10(-minus_k); + + // Compute xi and zi + using cache_entry_type = typename cache_accessor::cache_entry_type; + const cache_entry_type cache = cache_accessor::get_cached_power(-minus_k); + + auto xi = cache_accessor::compute_left_endpoint_for_shorter_interval_case( + cache, beta); + auto zi = cache_accessor::compute_right_endpoint_for_shorter_interval_case( + cache, beta); + + // If the left endpoint is not an integer, increase it + if (!is_left_endpoint_integer_shorter_interval(exponent)) ++xi; + + // Try bigger divisor + ret_value.significand = zi / 10; + + // If succeed, remove trailing zeros if necessary and return + if (ret_value.significand * 10 >= xi) { + ret_value.exponent = minus_k + 1; + ret_value.exponent += remove_trailing_zeros(ret_value.significand); + return ret_value; + } + + // Otherwise, compute the round-up of y + ret_value.significand = + cache_accessor::compute_round_up_for_shorter_interval_case(cache, + beta); + ret_value.exponent = minus_k; + + // When tie occurs, choose one of them according to the rule + if (exponent >= float_info::shorter_interval_tie_lower_threshold && + exponent <= float_info::shorter_interval_tie_upper_threshold) { + ret_value.significand = ret_value.significand % 2 == 0 + ? ret_value.significand + : ret_value.significand - 1; + } else if (ret_value.significand < xi) { + ++ret_value.significand; + } + return ret_value; +} + +template auto to_decimal(T x) noexcept -> decimal_fp { + // Step 1: integer promotion & Schubfach multiplier calculation. + + using carrier_uint = typename float_info::carrier_uint; + using cache_entry_type = typename cache_accessor::cache_entry_type; + auto br = bit_cast(x); + + // Extract significand bits and exponent bits. + const carrier_uint significand_mask = + (static_cast(1) << num_significand_bits()) - 1; + carrier_uint significand = (br & significand_mask); + int exponent = + static_cast((br & exponent_mask()) >> num_significand_bits()); + + if (exponent != 0) { // Check if normal. + exponent -= exponent_bias() + num_significand_bits(); + + // Shorter interval case; proceed like Schubfach. + // In fact, when exponent == 1 and significand == 0, the interval is + // regular. However, it can be shown that the end-results are anyway same. + if (significand == 0) return shorter_interval_case(exponent); + + significand |= (static_cast(1) << num_significand_bits()); + } else { + // Subnormal case; the interval is always regular. + if (significand == 0) return {0, 0}; + exponent = + std::numeric_limits::min_exponent - num_significand_bits() - 1; + } + + const bool include_left_endpoint = (significand % 2 == 0); + const bool include_right_endpoint = include_left_endpoint; + + // Compute k and beta. + const int minus_k = floor_log10_pow2(exponent) - float_info::kappa; + const cache_entry_type cache = cache_accessor::get_cached_power(-minus_k); + const int beta = exponent + floor_log2_pow10(-minus_k); + + // Compute zi and deltai. + // 10^kappa <= deltai < 10^(kappa + 1) + const uint32_t deltai = cache_accessor::compute_delta(cache, beta); + const carrier_uint two_fc = significand << 1; + + // For the case of binary32, the result of integer check is not correct for + // 29711844 * 2^-82 + // = 6.1442653300000000008655037797566933477355632930994033813476... * 10^-18 + // and 29711844 * 2^-81 + // = 1.2288530660000000001731007559513386695471126586198806762695... * 10^-17, + // and they are the unique counterexamples. However, since 29711844 is even, + // this does not cause any problem for the endpoints calculations; it can only + // cause a problem when we need to perform integer check for the center. + // Fortunately, with these inputs, that branch is never executed, so we are + // fine. + const typename cache_accessor::compute_mul_result z_mul = + cache_accessor::compute_mul((two_fc | 1) << beta, cache); + + // Step 2: Try larger divisor; remove trailing zeros if necessary. + + // Using an upper bound on zi, we might be able to optimize the division + // better than the compiler; we are computing zi / big_divisor here. + decimal_fp ret_value; + ret_value.significand = divide_by_10_to_kappa_plus_1(z_mul.result); + uint32_t r = static_cast(z_mul.result - float_info::big_divisor * + ret_value.significand); + + if (r < deltai) { + // Exclude the right endpoint if necessary. + if (r == 0 && (z_mul.is_integer & !include_right_endpoint)) { + --ret_value.significand; + r = float_info::big_divisor; + goto small_divisor_case_label; + } + } else if (r > deltai) { + goto small_divisor_case_label; + } else { + // r == deltai; compare fractional parts. + const typename cache_accessor::compute_mul_parity_result x_mul = + cache_accessor::compute_mul_parity(two_fc - 1, cache, beta); + + if (!(x_mul.parity | (x_mul.is_integer & include_left_endpoint))) + goto small_divisor_case_label; + } + ret_value.exponent = minus_k + float_info::kappa + 1; + + // We may need to remove trailing zeros. + ret_value.exponent += remove_trailing_zeros(ret_value.significand); + return ret_value; + + // Step 3: Find the significand with the smaller divisor. + +small_divisor_case_label: + ret_value.significand *= 10; + ret_value.exponent = minus_k + float_info::kappa; + + uint32_t dist = r - (deltai / 2) + (float_info::small_divisor / 2); + const bool approx_y_parity = + ((dist ^ (float_info::small_divisor / 2)) & 1) != 0; + + // Is dist divisible by 10^kappa? + const bool divisible_by_small_divisor = + check_divisibility_and_divide_by_pow10::kappa>(dist); + + // Add dist / 10^kappa to the significand. + ret_value.significand += dist; + + if (!divisible_by_small_divisor) return ret_value; + + // Check z^(f) >= epsilon^(f). + // We have either yi == zi - epsiloni or yi == (zi - epsiloni) - 1, + // where yi == zi - epsiloni if and only if z^(f) >= epsilon^(f). + // Since there are only 2 possibilities, we only need to care about the + // parity. Also, zi and r should have the same parity since the divisor + // is an even number. + const auto y_mul = cache_accessor::compute_mul_parity(two_fc, cache, beta); + + // If z^(f) >= epsilon^(f), we might have a tie when z^(f) == epsilon^(f), + // or equivalently, when y is an integer. + if (y_mul.parity != approx_y_parity) + --ret_value.significand; + else if (y_mul.is_integer & (ret_value.significand % 2 != 0)) + --ret_value.significand; + return ret_value; +} +} // namespace dragonbox +} // namespace detail + +template <> struct formatter { + FMT_CONSTEXPR auto parse(format_parse_context& ctx) + -> format_parse_context::iterator { + return ctx.begin(); + } + + auto format(const detail::bigint& n, format_context& ctx) const + -> format_context::iterator { + auto out = ctx.out(); + bool first = true; + for (auto i = n.bigits_.size(); i > 0; --i) { + auto value = n.bigits_[i - 1u]; + if (first) { + out = fmt::format_to(out, FMT_STRING("{:x}"), value); + first = false; + continue; + } + out = fmt::format_to(out, FMT_STRING("{:08x}"), value); + } + if (n.exp_ > 0) + out = fmt::format_to(out, FMT_STRING("p{}"), + n.exp_ * detail::bigint::bigit_bits); + return out; + } +}; + +FMT_FUNC detail::utf8_to_utf16::utf8_to_utf16(string_view s) { + for_each_codepoint(s, [this](uint32_t cp, string_view) { + if (cp == invalid_code_point) FMT_THROW(std::runtime_error("invalid utf8")); + if (cp <= 0xFFFF) { + buffer_.push_back(static_cast(cp)); + } else { + cp -= 0x10000; + buffer_.push_back(static_cast(0xD800 + (cp >> 10))); + buffer_.push_back(static_cast(0xDC00 + (cp & 0x3FF))); + } + return true; + }); + buffer_.push_back(0); +} + +FMT_FUNC void format_system_error(detail::buffer& out, int error_code, + const char* message) noexcept { + FMT_TRY { + auto ec = std::error_code(error_code, std::generic_category()); + write(std::back_inserter(out), std::system_error(ec, message).what()); + return; + } + FMT_CATCH(...) {} + format_error_code(out, error_code, message); +} + +FMT_FUNC void report_system_error(int error_code, + const char* message) noexcept { + report_error(format_system_error, error_code, message); +} + +FMT_FUNC auto vformat(string_view fmt, format_args args) -> std::string { + // Don't optimize the "{}" case to keep the binary size small and because it + // can be better optimized in fmt::format anyway. + auto buffer = memory_buffer(); + detail::vformat_to(buffer, fmt, args); + return to_string(buffer); +} + +namespace detail { +#if !defined(_WIN32) || defined(FMT_WINDOWS_NO_WCHAR) +FMT_FUNC auto write_console(int, string_view) -> bool { return false; } +FMT_FUNC auto write_console(std::FILE*, string_view) -> bool { return false; } +#else +using dword = conditional_t; +extern "C" __declspec(dllimport) int __stdcall WriteConsoleW( // + void*, const void*, dword, dword*, void*); + +FMT_FUNC bool write_console(int fd, string_view text) { + auto u16 = utf8_to_utf16(text); + return WriteConsoleW(reinterpret_cast(_get_osfhandle(fd)), u16.c_str(), + static_cast(u16.size()), nullptr, nullptr) != 0; +} + +FMT_FUNC auto write_console(std::FILE* f, string_view text) -> bool { + return write_console(_fileno(f), text); +} +#endif + +#ifdef _WIN32 +// Print assuming legacy (non-Unicode) encoding. +FMT_FUNC void vprint_mojibake(std::FILE* f, string_view fmt, format_args args) { + auto buffer = memory_buffer(); + detail::vformat_to(buffer, fmt, args); + fwrite_fully(buffer.data(), buffer.size(), f); +} +#endif + +FMT_FUNC void print(std::FILE* f, string_view text) { +#ifdef _WIN32 + int fd = _fileno(f); + if (_isatty(fd)) { + std::fflush(f); + if (write_console(fd, text)) return; + } +#endif + fwrite_fully(text.data(), text.size(), f); +} +} // namespace detail + +FMT_FUNC void vprint(std::FILE* f, string_view fmt, format_args args) { + auto buffer = memory_buffer(); + detail::vformat_to(buffer, fmt, args); + detail::print(f, {buffer.data(), buffer.size()}); +} + +FMT_FUNC void vprint(string_view fmt, format_args args) { + vprint(stdout, fmt, args); +} + +namespace detail { + +struct singleton { + unsigned char upper; + unsigned char lower_count; +}; + +inline auto is_printable(uint16_t x, const singleton* singletons, + size_t singletons_size, + const unsigned char* singleton_lowers, + const unsigned char* normal, size_t normal_size) + -> bool { + auto upper = x >> 8; + auto lower_start = 0; + for (size_t i = 0; i < singletons_size; ++i) { + auto s = singletons[i]; + auto lower_end = lower_start + s.lower_count; + if (upper < s.upper) break; + if (upper == s.upper) { + for (auto j = lower_start; j < lower_end; ++j) { + if (singleton_lowers[j] == (x & 0xff)) return false; + } + } + lower_start = lower_end; + } + + auto xsigned = static_cast(x); + auto current = true; + for (size_t i = 0; i < normal_size; ++i) { + auto v = static_cast(normal[i]); + auto len = (v & 0x80) != 0 ? (v & 0x7f) << 8 | normal[++i] : v; + xsigned -= len; + if (xsigned < 0) break; + current = !current; + } + return current; +} + +// This code is generated by support/printable.py. +FMT_FUNC auto is_printable(uint32_t cp) -> bool { + static constexpr singleton singletons0[] = { + {0x00, 1}, {0x03, 5}, {0x05, 6}, {0x06, 3}, {0x07, 6}, {0x08, 8}, + {0x09, 17}, {0x0a, 28}, {0x0b, 25}, {0x0c, 20}, {0x0d, 16}, {0x0e, 13}, + {0x0f, 4}, {0x10, 3}, {0x12, 18}, {0x13, 9}, {0x16, 1}, {0x17, 5}, + {0x18, 2}, {0x19, 3}, {0x1a, 7}, {0x1c, 2}, {0x1d, 1}, {0x1f, 22}, + {0x20, 3}, {0x2b, 3}, {0x2c, 2}, {0x2d, 11}, {0x2e, 1}, {0x30, 3}, + {0x31, 2}, {0x32, 1}, {0xa7, 2}, {0xa9, 2}, {0xaa, 4}, {0xab, 8}, + {0xfa, 2}, {0xfb, 5}, {0xfd, 4}, {0xfe, 3}, {0xff, 9}, + }; + static constexpr unsigned char singletons0_lower[] = { + 0xad, 0x78, 0x79, 0x8b, 0x8d, 0xa2, 0x30, 0x57, 0x58, 0x8b, 0x8c, 0x90, + 0x1c, 0x1d, 0xdd, 0x0e, 0x0f, 0x4b, 0x4c, 0xfb, 0xfc, 0x2e, 0x2f, 0x3f, + 0x5c, 0x5d, 0x5f, 0xb5, 0xe2, 0x84, 0x8d, 0x8e, 0x91, 0x92, 0xa9, 0xb1, + 0xba, 0xbb, 0xc5, 0xc6, 0xc9, 0xca, 0xde, 0xe4, 0xe5, 0xff, 0x00, 0x04, + 0x11, 0x12, 0x29, 0x31, 0x34, 0x37, 0x3a, 0x3b, 0x3d, 0x49, 0x4a, 0x5d, + 0x84, 0x8e, 0x92, 0xa9, 0xb1, 0xb4, 0xba, 0xbb, 0xc6, 0xca, 0xce, 0xcf, + 0xe4, 0xe5, 0x00, 0x04, 0x0d, 0x0e, 0x11, 0x12, 0x29, 0x31, 0x34, 0x3a, + 0x3b, 0x45, 0x46, 0x49, 0x4a, 0x5e, 0x64, 0x65, 0x84, 0x91, 0x9b, 0x9d, + 0xc9, 0xce, 0xcf, 0x0d, 0x11, 0x29, 0x45, 0x49, 0x57, 0x64, 0x65, 0x8d, + 0x91, 0xa9, 0xb4, 0xba, 0xbb, 0xc5, 0xc9, 0xdf, 0xe4, 0xe5, 0xf0, 0x0d, + 0x11, 0x45, 0x49, 0x64, 0x65, 0x80, 0x84, 0xb2, 0xbc, 0xbe, 0xbf, 0xd5, + 0xd7, 0xf0, 0xf1, 0x83, 0x85, 0x8b, 0xa4, 0xa6, 0xbe, 0xbf, 0xc5, 0xc7, + 0xce, 0xcf, 0xda, 0xdb, 0x48, 0x98, 0xbd, 0xcd, 0xc6, 0xce, 0xcf, 0x49, + 0x4e, 0x4f, 0x57, 0x59, 0x5e, 0x5f, 0x89, 0x8e, 0x8f, 0xb1, 0xb6, 0xb7, + 0xbf, 0xc1, 0xc6, 0xc7, 0xd7, 0x11, 0x16, 0x17, 0x5b, 0x5c, 0xf6, 0xf7, + 0xfe, 0xff, 0x80, 0x0d, 0x6d, 0x71, 0xde, 0xdf, 0x0e, 0x0f, 0x1f, 0x6e, + 0x6f, 0x1c, 0x1d, 0x5f, 0x7d, 0x7e, 0xae, 0xaf, 0xbb, 0xbc, 0xfa, 0x16, + 0x17, 0x1e, 0x1f, 0x46, 0x47, 0x4e, 0x4f, 0x58, 0x5a, 0x5c, 0x5e, 0x7e, + 0x7f, 0xb5, 0xc5, 0xd4, 0xd5, 0xdc, 0xf0, 0xf1, 0xf5, 0x72, 0x73, 0x8f, + 0x74, 0x75, 0x96, 0x2f, 0x5f, 0x26, 0x2e, 0x2f, 0xa7, 0xaf, 0xb7, 0xbf, + 0xc7, 0xcf, 0xd7, 0xdf, 0x9a, 0x40, 0x97, 0x98, 0x30, 0x8f, 0x1f, 0xc0, + 0xc1, 0xce, 0xff, 0x4e, 0x4f, 0x5a, 0x5b, 0x07, 0x08, 0x0f, 0x10, 0x27, + 0x2f, 0xee, 0xef, 0x6e, 0x6f, 0x37, 0x3d, 0x3f, 0x42, 0x45, 0x90, 0x91, + 0xfe, 0xff, 0x53, 0x67, 0x75, 0xc8, 0xc9, 0xd0, 0xd1, 0xd8, 0xd9, 0xe7, + 0xfe, 0xff, + }; + static constexpr singleton singletons1[] = { + {0x00, 6}, {0x01, 1}, {0x03, 1}, {0x04, 2}, {0x08, 8}, {0x09, 2}, + {0x0a, 5}, {0x0b, 2}, {0x0e, 4}, {0x10, 1}, {0x11, 2}, {0x12, 5}, + {0x13, 17}, {0x14, 1}, {0x15, 2}, {0x17, 2}, {0x19, 13}, {0x1c, 5}, + {0x1d, 8}, {0x24, 1}, {0x6a, 3}, {0x6b, 2}, {0xbc, 2}, {0xd1, 2}, + {0xd4, 12}, {0xd5, 9}, {0xd6, 2}, {0xd7, 2}, {0xda, 1}, {0xe0, 5}, + {0xe1, 2}, {0xe8, 2}, {0xee, 32}, {0xf0, 4}, {0xf8, 2}, {0xf9, 2}, + {0xfa, 2}, {0xfb, 1}, + }; + static constexpr unsigned char singletons1_lower[] = { + 0x0c, 0x27, 0x3b, 0x3e, 0x4e, 0x4f, 0x8f, 0x9e, 0x9e, 0x9f, 0x06, 0x07, + 0x09, 0x36, 0x3d, 0x3e, 0x56, 0xf3, 0xd0, 0xd1, 0x04, 0x14, 0x18, 0x36, + 0x37, 0x56, 0x57, 0x7f, 0xaa, 0xae, 0xaf, 0xbd, 0x35, 0xe0, 0x12, 0x87, + 0x89, 0x8e, 0x9e, 0x04, 0x0d, 0x0e, 0x11, 0x12, 0x29, 0x31, 0x34, 0x3a, + 0x45, 0x46, 0x49, 0x4a, 0x4e, 0x4f, 0x64, 0x65, 0x5c, 0xb6, 0xb7, 0x1b, + 0x1c, 0x07, 0x08, 0x0a, 0x0b, 0x14, 0x17, 0x36, 0x39, 0x3a, 0xa8, 0xa9, + 0xd8, 0xd9, 0x09, 0x37, 0x90, 0x91, 0xa8, 0x07, 0x0a, 0x3b, 0x3e, 0x66, + 0x69, 0x8f, 0x92, 0x6f, 0x5f, 0xee, 0xef, 0x5a, 0x62, 0x9a, 0x9b, 0x27, + 0x28, 0x55, 0x9d, 0xa0, 0xa1, 0xa3, 0xa4, 0xa7, 0xa8, 0xad, 0xba, 0xbc, + 0xc4, 0x06, 0x0b, 0x0c, 0x15, 0x1d, 0x3a, 0x3f, 0x45, 0x51, 0xa6, 0xa7, + 0xcc, 0xcd, 0xa0, 0x07, 0x19, 0x1a, 0x22, 0x25, 0x3e, 0x3f, 0xc5, 0xc6, + 0x04, 0x20, 0x23, 0x25, 0x26, 0x28, 0x33, 0x38, 0x3a, 0x48, 0x4a, 0x4c, + 0x50, 0x53, 0x55, 0x56, 0x58, 0x5a, 0x5c, 0x5e, 0x60, 0x63, 0x65, 0x66, + 0x6b, 0x73, 0x78, 0x7d, 0x7f, 0x8a, 0xa4, 0xaa, 0xaf, 0xb0, 0xc0, 0xd0, + 0xae, 0xaf, 0x79, 0xcc, 0x6e, 0x6f, 0x93, + }; + static constexpr unsigned char normal0[] = { + 0x00, 0x20, 0x5f, 0x22, 0x82, 0xdf, 0x04, 0x82, 0x44, 0x08, 0x1b, 0x04, + 0x06, 0x11, 0x81, 0xac, 0x0e, 0x80, 0xab, 0x35, 0x28, 0x0b, 0x80, 0xe0, + 0x03, 0x19, 0x08, 0x01, 0x04, 0x2f, 0x04, 0x34, 0x04, 0x07, 0x03, 0x01, + 0x07, 0x06, 0x07, 0x11, 0x0a, 0x50, 0x0f, 0x12, 0x07, 0x55, 0x07, 0x03, + 0x04, 0x1c, 0x0a, 0x09, 0x03, 0x08, 0x03, 0x07, 0x03, 0x02, 0x03, 0x03, + 0x03, 0x0c, 0x04, 0x05, 0x03, 0x0b, 0x06, 0x01, 0x0e, 0x15, 0x05, 0x3a, + 0x03, 0x11, 0x07, 0x06, 0x05, 0x10, 0x07, 0x57, 0x07, 0x02, 0x07, 0x15, + 0x0d, 0x50, 0x04, 0x43, 0x03, 0x2d, 0x03, 0x01, 0x04, 0x11, 0x06, 0x0f, + 0x0c, 0x3a, 0x04, 0x1d, 0x25, 0x5f, 0x20, 0x6d, 0x04, 0x6a, 0x25, 0x80, + 0xc8, 0x05, 0x82, 0xb0, 0x03, 0x1a, 0x06, 0x82, 0xfd, 0x03, 0x59, 0x07, + 0x15, 0x0b, 0x17, 0x09, 0x14, 0x0c, 0x14, 0x0c, 0x6a, 0x06, 0x0a, 0x06, + 0x1a, 0x06, 0x59, 0x07, 0x2b, 0x05, 0x46, 0x0a, 0x2c, 0x04, 0x0c, 0x04, + 0x01, 0x03, 0x31, 0x0b, 0x2c, 0x04, 0x1a, 0x06, 0x0b, 0x03, 0x80, 0xac, + 0x06, 0x0a, 0x06, 0x21, 0x3f, 0x4c, 0x04, 0x2d, 0x03, 0x74, 0x08, 0x3c, + 0x03, 0x0f, 0x03, 0x3c, 0x07, 0x38, 0x08, 0x2b, 0x05, 0x82, 0xff, 0x11, + 0x18, 0x08, 0x2f, 0x11, 0x2d, 0x03, 0x20, 0x10, 0x21, 0x0f, 0x80, 0x8c, + 0x04, 0x82, 0x97, 0x19, 0x0b, 0x15, 0x88, 0x94, 0x05, 0x2f, 0x05, 0x3b, + 0x07, 0x02, 0x0e, 0x18, 0x09, 0x80, 0xb3, 0x2d, 0x74, 0x0c, 0x80, 0xd6, + 0x1a, 0x0c, 0x05, 0x80, 0xff, 0x05, 0x80, 0xdf, 0x0c, 0xee, 0x0d, 0x03, + 0x84, 0x8d, 0x03, 0x37, 0x09, 0x81, 0x5c, 0x14, 0x80, 0xb8, 0x08, 0x80, + 0xcb, 0x2a, 0x38, 0x03, 0x0a, 0x06, 0x38, 0x08, 0x46, 0x08, 0x0c, 0x06, + 0x74, 0x0b, 0x1e, 0x03, 0x5a, 0x04, 0x59, 0x09, 0x80, 0x83, 0x18, 0x1c, + 0x0a, 0x16, 0x09, 0x4c, 0x04, 0x80, 0x8a, 0x06, 0xab, 0xa4, 0x0c, 0x17, + 0x04, 0x31, 0xa1, 0x04, 0x81, 0xda, 0x26, 0x07, 0x0c, 0x05, 0x05, 0x80, + 0xa5, 0x11, 0x81, 0x6d, 0x10, 0x78, 0x28, 0x2a, 0x06, 0x4c, 0x04, 0x80, + 0x8d, 0x04, 0x80, 0xbe, 0x03, 0x1b, 0x03, 0x0f, 0x0d, + }; + static constexpr unsigned char normal1[] = { + 0x5e, 0x22, 0x7b, 0x05, 0x03, 0x04, 0x2d, 0x03, 0x66, 0x03, 0x01, 0x2f, + 0x2e, 0x80, 0x82, 0x1d, 0x03, 0x31, 0x0f, 0x1c, 0x04, 0x24, 0x09, 0x1e, + 0x05, 0x2b, 0x05, 0x44, 0x04, 0x0e, 0x2a, 0x80, 0xaa, 0x06, 0x24, 0x04, + 0x24, 0x04, 0x28, 0x08, 0x34, 0x0b, 0x01, 0x80, 0x90, 0x81, 0x37, 0x09, + 0x16, 0x0a, 0x08, 0x80, 0x98, 0x39, 0x03, 0x63, 0x08, 0x09, 0x30, 0x16, + 0x05, 0x21, 0x03, 0x1b, 0x05, 0x01, 0x40, 0x38, 0x04, 0x4b, 0x05, 0x2f, + 0x04, 0x0a, 0x07, 0x09, 0x07, 0x40, 0x20, 0x27, 0x04, 0x0c, 0x09, 0x36, + 0x03, 0x3a, 0x05, 0x1a, 0x07, 0x04, 0x0c, 0x07, 0x50, 0x49, 0x37, 0x33, + 0x0d, 0x33, 0x07, 0x2e, 0x08, 0x0a, 0x81, 0x26, 0x52, 0x4e, 0x28, 0x08, + 0x2a, 0x56, 0x1c, 0x14, 0x17, 0x09, 0x4e, 0x04, 0x1e, 0x0f, 0x43, 0x0e, + 0x19, 0x07, 0x0a, 0x06, 0x48, 0x08, 0x27, 0x09, 0x75, 0x0b, 0x3f, 0x41, + 0x2a, 0x06, 0x3b, 0x05, 0x0a, 0x06, 0x51, 0x06, 0x01, 0x05, 0x10, 0x03, + 0x05, 0x80, 0x8b, 0x62, 0x1e, 0x48, 0x08, 0x0a, 0x80, 0xa6, 0x5e, 0x22, + 0x45, 0x0b, 0x0a, 0x06, 0x0d, 0x13, 0x39, 0x07, 0x0a, 0x36, 0x2c, 0x04, + 0x10, 0x80, 0xc0, 0x3c, 0x64, 0x53, 0x0c, 0x48, 0x09, 0x0a, 0x46, 0x45, + 0x1b, 0x48, 0x08, 0x53, 0x1d, 0x39, 0x81, 0x07, 0x46, 0x0a, 0x1d, 0x03, + 0x47, 0x49, 0x37, 0x03, 0x0e, 0x08, 0x0a, 0x06, 0x39, 0x07, 0x0a, 0x81, + 0x36, 0x19, 0x80, 0xb7, 0x01, 0x0f, 0x32, 0x0d, 0x83, 0x9b, 0x66, 0x75, + 0x0b, 0x80, 0xc4, 0x8a, 0xbc, 0x84, 0x2f, 0x8f, 0xd1, 0x82, 0x47, 0xa1, + 0xb9, 0x82, 0x39, 0x07, 0x2a, 0x04, 0x02, 0x60, 0x26, 0x0a, 0x46, 0x0a, + 0x28, 0x05, 0x13, 0x82, 0xb0, 0x5b, 0x65, 0x4b, 0x04, 0x39, 0x07, 0x11, + 0x40, 0x05, 0x0b, 0x02, 0x0e, 0x97, 0xf8, 0x08, 0x84, 0xd6, 0x2a, 0x09, + 0xa2, 0xf7, 0x81, 0x1f, 0x31, 0x03, 0x11, 0x04, 0x08, 0x81, 0x8c, 0x89, + 0x04, 0x6b, 0x05, 0x0d, 0x03, 0x09, 0x07, 0x10, 0x93, 0x60, 0x80, 0xf6, + 0x0a, 0x73, 0x08, 0x6e, 0x17, 0x46, 0x80, 0x9a, 0x14, 0x0c, 0x57, 0x09, + 0x19, 0x80, 0x87, 0x81, 0x47, 0x03, 0x85, 0x42, 0x0f, 0x15, 0x85, 0x50, + 0x2b, 0x80, 0xd5, 0x2d, 0x03, 0x1a, 0x04, 0x02, 0x81, 0x70, 0x3a, 0x05, + 0x01, 0x85, 0x00, 0x80, 0xd7, 0x29, 0x4c, 0x04, 0x0a, 0x04, 0x02, 0x83, + 0x11, 0x44, 0x4c, 0x3d, 0x80, 0xc2, 0x3c, 0x06, 0x01, 0x04, 0x55, 0x05, + 0x1b, 0x34, 0x02, 0x81, 0x0e, 0x2c, 0x04, 0x64, 0x0c, 0x56, 0x0a, 0x80, + 0xae, 0x38, 0x1d, 0x0d, 0x2c, 0x04, 0x09, 0x07, 0x02, 0x0e, 0x06, 0x80, + 0x9a, 0x83, 0xd8, 0x08, 0x0d, 0x03, 0x0d, 0x03, 0x74, 0x0c, 0x59, 0x07, + 0x0c, 0x14, 0x0c, 0x04, 0x38, 0x08, 0x0a, 0x06, 0x28, 0x08, 0x22, 0x4e, + 0x81, 0x54, 0x0c, 0x15, 0x03, 0x03, 0x05, 0x07, 0x09, 0x19, 0x07, 0x07, + 0x09, 0x03, 0x0d, 0x07, 0x29, 0x80, 0xcb, 0x25, 0x0a, 0x84, 0x06, + }; + auto lower = static_cast(cp); + if (cp < 0x10000) { + return is_printable(lower, singletons0, + sizeof(singletons0) / sizeof(*singletons0), + singletons0_lower, normal0, sizeof(normal0)); + } + if (cp < 0x20000) { + return is_printable(lower, singletons1, + sizeof(singletons1) / sizeof(*singletons1), + singletons1_lower, normal1, sizeof(normal1)); + } + if (0x2a6de <= cp && cp < 0x2a700) return false; + if (0x2b735 <= cp && cp < 0x2b740) return false; + if (0x2b81e <= cp && cp < 0x2b820) return false; + if (0x2cea2 <= cp && cp < 0x2ceb0) return false; + if (0x2ebe1 <= cp && cp < 0x2f800) return false; + if (0x2fa1e <= cp && cp < 0x30000) return false; + if (0x3134b <= cp && cp < 0xe0100) return false; + if (0xe01f0 <= cp && cp < 0x110000) return false; + return cp < 0x110000; +} + +} // namespace detail + +FMT_END_NAMESPACE + +#endif // FMT_FORMAT_INL_H_ diff --git a/third_party/tlRender-install-Release/include/OpenImageIO/detail/fmt/format.h b/third_party/tlRender-install-Release/include/OpenImageIO/detail/fmt/format.h new file mode 100644 index 00000000..7637c8a0 --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenImageIO/detail/fmt/format.h @@ -0,0 +1,4535 @@ +/* + Formatting library for C++ + + Copyright (c) 2012 - present, Victor Zverovich + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + "Software"), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be + included in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + --- Optional exception to the license --- + + As an exception, if, as a result of your compiling your source code, portions + of this Software are embedded into a machine-executable object form of such + source code, you may redistribute such embedded portions in such object form + without including the above copyright and permission notices. + */ + +#ifndef FMT_FORMAT_H_ +#define FMT_FORMAT_H_ + +#include // std::signbit +#include // uint32_t +#include // std::memcpy +#include // std::initializer_list +#include // std::numeric_limits +#include // std::uninitialized_copy +#include // std::runtime_error +#include // std::system_error + +#ifdef __cpp_lib_bit_cast +# include // std::bit_cast +#endif + +#include "core.h" + +#if defined __cpp_inline_variables && __cpp_inline_variables >= 201606L +# define FMT_INLINE_VARIABLE inline +#else +# define FMT_INLINE_VARIABLE +#endif + +#if FMT_HAS_CPP17_ATTRIBUTE(fallthrough) +# define FMT_FALLTHROUGH [[fallthrough]] +#elif defined(__clang__) +# define FMT_FALLTHROUGH [[clang::fallthrough]] +#elif FMT_GCC_VERSION >= 700 && \ + (!defined(__EDG_VERSION__) || __EDG_VERSION__ >= 520) +# define FMT_FALLTHROUGH [[gnu::fallthrough]] +#else +# define FMT_FALLTHROUGH +#endif + +#ifndef FMT_DEPRECATED +# if FMT_HAS_CPP14_ATTRIBUTE(deprecated) || FMT_MSC_VERSION >= 1900 +# define FMT_DEPRECATED [[deprecated]] +# else +# if (defined(__GNUC__) && !defined(__LCC__)) || defined(__clang__) +# define FMT_DEPRECATED __attribute__((deprecated)) +# elif FMT_MSC_VERSION +# define FMT_DEPRECATED __declspec(deprecated) +# else +# define FMT_DEPRECATED /* deprecated */ +# endif +# endif +#endif + +#ifndef FMT_NO_UNIQUE_ADDRESS +# if FMT_CPLUSPLUS >= 202002L +# if FMT_HAS_CPP_ATTRIBUTE(no_unique_address) +# define FMT_NO_UNIQUE_ADDRESS [[no_unique_address]] +// VS2019 v16.10 and later except clang-cl (https://reviews.llvm.org/D110485) +# elif (FMT_MSC_VERSION >= 1929) && !FMT_CLANG_VERSION +# define FMT_NO_UNIQUE_ADDRESS [[msvc::no_unique_address]] +# endif +# endif +#endif +#ifndef FMT_NO_UNIQUE_ADDRESS +# define FMT_NO_UNIQUE_ADDRESS +#endif + +// Visibility when compiled as a shared library/object. +#if defined(FMT_LIB_EXPORT) || defined(FMT_SHARED) +# define FMT_SO_VISIBILITY(value) FMT_VISIBILITY(value) +#else +# define FMT_SO_VISIBILITY(value) +#endif + +#ifdef __has_builtin +# define FMT_HAS_BUILTIN(x) __has_builtin(x) +#else +# define FMT_HAS_BUILTIN(x) 0 +#endif + +#if FMT_GCC_VERSION || FMT_CLANG_VERSION +# define FMT_NOINLINE __attribute__((noinline)) +#else +# define FMT_NOINLINE +#endif + +#ifndef FMT_THROW +# if FMT_EXCEPTIONS +# if FMT_MSC_VERSION || defined(__NVCC__) +FMT_BEGIN_NAMESPACE +namespace detail { +template inline void do_throw(const Exception& x) { + // Silence unreachable code warnings in MSVC and NVCC because these + // are nearly impossible to fix in a generic code. + volatile bool b = true; + if (b) throw x; +} +} // namespace detail +FMT_END_NAMESPACE +# define FMT_THROW(x) detail::do_throw(x) +# else +# define FMT_THROW(x) throw x +# endif +# else +# define FMT_THROW(x) \ + ::fmt::detail::assert_fail(__FILE__, __LINE__, (x).what()) +# endif +#endif + +#if FMT_EXCEPTIONS +# define FMT_TRY try +# define FMT_CATCH(x) catch (x) +#else +# define FMT_TRY if (true) +# define FMT_CATCH(x) if (false) +#endif + +#ifndef FMT_MAYBE_UNUSED +# if FMT_HAS_CPP17_ATTRIBUTE(maybe_unused) +# define FMT_MAYBE_UNUSED [[maybe_unused]] +# else +# define FMT_MAYBE_UNUSED +# endif +#endif + +#ifndef FMT_USE_USER_DEFINED_LITERALS +// EDG based compilers (Intel, NVIDIA, Elbrus, etc), GCC and MSVC support UDLs. +// +// GCC before 4.9 requires a space in `operator"" _a` which is invalid in later +// compiler versions. +# if (FMT_HAS_FEATURE(cxx_user_literals) || FMT_GCC_VERSION >= 409 || \ + FMT_MSC_VERSION >= 1900) && \ + (!defined(__EDG_VERSION__) || __EDG_VERSION__ >= /* UDL feature */ 480) +# define FMT_USE_USER_DEFINED_LITERALS 1 +# else +# define FMT_USE_USER_DEFINED_LITERALS 0 +# endif +#endif + +// Defining FMT_REDUCE_INT_INSTANTIATIONS to 1, will reduce the number of +// integer formatter template instantiations to just one by only using the +// largest integer type. This results in a reduction in binary size but will +// cause a decrease in integer formatting performance. +#if !defined(FMT_REDUCE_INT_INSTANTIATIONS) +# define FMT_REDUCE_INT_INSTANTIATIONS 0 +#endif + +// __builtin_clz is broken in clang with Microsoft CodeGen: +// https://github.com/fmtlib/fmt/issues/519. +#if !FMT_MSC_VERSION +# if FMT_HAS_BUILTIN(__builtin_clz) || FMT_GCC_VERSION || FMT_ICC_VERSION +# define FMT_BUILTIN_CLZ(n) __builtin_clz(n) +# endif +# if FMT_HAS_BUILTIN(__builtin_clzll) || FMT_GCC_VERSION || FMT_ICC_VERSION +# define FMT_BUILTIN_CLZLL(n) __builtin_clzll(n) +# endif +#endif + +// __builtin_ctz is broken in Intel Compiler Classic on Windows: +// https://github.com/fmtlib/fmt/issues/2510. +#ifndef __ICL +# if FMT_HAS_BUILTIN(__builtin_ctz) || FMT_GCC_VERSION || FMT_ICC_VERSION || \ + defined(__NVCOMPILER) +# define FMT_BUILTIN_CTZ(n) __builtin_ctz(n) +# endif +# if FMT_HAS_BUILTIN(__builtin_ctzll) || FMT_GCC_VERSION || \ + FMT_ICC_VERSION || defined(__NVCOMPILER) +# define FMT_BUILTIN_CTZLL(n) __builtin_ctzll(n) +# endif +#endif + +#if FMT_MSC_VERSION +# include // _BitScanReverse[64], _BitScanForward[64], _umul128 +#endif + +// Some compilers masquerade as both MSVC and GCC-likes or otherwise support +// __builtin_clz and __builtin_clzll, so only define FMT_BUILTIN_CLZ using the +// MSVC intrinsics if the clz and clzll builtins are not available. +#if FMT_MSC_VERSION && !defined(FMT_BUILTIN_CLZLL) && \ + !defined(FMT_BUILTIN_CTZLL) +FMT_BEGIN_NAMESPACE +namespace detail { +// Avoid Clang with Microsoft CodeGen's -Wunknown-pragmas warning. +# if !defined(__clang__) +# pragma intrinsic(_BitScanForward) +# pragma intrinsic(_BitScanReverse) +# if defined(_WIN64) +# pragma intrinsic(_BitScanForward64) +# pragma intrinsic(_BitScanReverse64) +# endif +# endif + +inline auto clz(uint32_t x) -> int { + unsigned long r = 0; + _BitScanReverse(&r, x); + FMT_ASSERT(x != 0, ""); + // Static analysis complains about using uninitialized data + // "r", but the only way that can happen is if "x" is 0, + // which the callers guarantee to not happen. + FMT_MSC_WARNING(suppress : 6102) + return 31 ^ static_cast(r); +} +# define FMT_BUILTIN_CLZ(n) detail::clz(n) + +inline auto clzll(uint64_t x) -> int { + unsigned long r = 0; +# ifdef _WIN64 + _BitScanReverse64(&r, x); +# else + // Scan the high 32 bits. + if (_BitScanReverse(&r, static_cast(x >> 32))) + return 63 ^ static_cast(r + 32); + // Scan the low 32 bits. + _BitScanReverse(&r, static_cast(x)); +# endif + FMT_ASSERT(x != 0, ""); + FMT_MSC_WARNING(suppress : 6102) // Suppress a bogus static analysis warning. + return 63 ^ static_cast(r); +} +# define FMT_BUILTIN_CLZLL(n) detail::clzll(n) + +inline auto ctz(uint32_t x) -> int { + unsigned long r = 0; + _BitScanForward(&r, x); + FMT_ASSERT(x != 0, ""); + FMT_MSC_WARNING(suppress : 6102) // Suppress a bogus static analysis warning. + return static_cast(r); +} +# define FMT_BUILTIN_CTZ(n) detail::ctz(n) + +inline auto ctzll(uint64_t x) -> int { + unsigned long r = 0; + FMT_ASSERT(x != 0, ""); + FMT_MSC_WARNING(suppress : 6102) // Suppress a bogus static analysis warning. +# ifdef _WIN64 + _BitScanForward64(&r, x); +# else + // Scan the low 32 bits. + if (_BitScanForward(&r, static_cast(x))) return static_cast(r); + // Scan the high 32 bits. + _BitScanForward(&r, static_cast(x >> 32)); + r += 32; +# endif + return static_cast(r); +} +# define FMT_BUILTIN_CTZLL(n) detail::ctzll(n) +} // namespace detail +FMT_END_NAMESPACE +#endif + +FMT_BEGIN_NAMESPACE +namespace detail { + +FMT_CONSTEXPR inline void abort_fuzzing_if(bool condition) { + ignore_unused(condition); +#ifdef FMT_FUZZ + if (condition) throw std::runtime_error("fuzzing limit reached"); +#endif +} + +template struct string_literal { + static constexpr CharT value[sizeof...(C)] = {C...}; + constexpr operator basic_string_view() const { + return {value, sizeof...(C)}; + } +}; + +#if FMT_CPLUSPLUS < 201703L +template +constexpr CharT string_literal::value[sizeof...(C)]; +#endif + +// Implementation of std::bit_cast for pre-C++20. +template +FMT_CONSTEXPR20 auto bit_cast(const From& from) -> To { +#ifdef __cpp_lib_bit_cast + if (is_constant_evaluated()) return std::bit_cast(from); +#endif + auto to = To(); + // The cast suppresses a bogus -Wclass-memaccess on GCC. + std::memcpy(static_cast(&to), &from, sizeof(to)); + return to; +} + +inline auto is_big_endian() -> bool { +#ifdef _WIN32 + return false; +#elif defined(__BIG_ENDIAN__) + return true; +#elif defined(__BYTE_ORDER__) && defined(__ORDER_BIG_ENDIAN__) + return __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__; +#else + struct bytes { + char data[sizeof(int)]; + }; + return bit_cast(1).data[0] == 0; +#endif +} + +class uint128_fallback { + private: + uint64_t lo_, hi_; + + public: + constexpr uint128_fallback(uint64_t hi, uint64_t lo) : lo_(lo), hi_(hi) {} + constexpr uint128_fallback(uint64_t value = 0) : lo_(value), hi_(0) {} + + constexpr auto high() const noexcept -> uint64_t { return hi_; } + constexpr auto low() const noexcept -> uint64_t { return lo_; } + + template ::value)> + constexpr explicit operator T() const { + return static_cast(lo_); + } + + friend constexpr auto operator==(const uint128_fallback& lhs, + const uint128_fallback& rhs) -> bool { + return lhs.hi_ == rhs.hi_ && lhs.lo_ == rhs.lo_; + } + friend constexpr auto operator!=(const uint128_fallback& lhs, + const uint128_fallback& rhs) -> bool { + return !(lhs == rhs); + } + friend constexpr auto operator>(const uint128_fallback& lhs, + const uint128_fallback& rhs) -> bool { + return lhs.hi_ != rhs.hi_ ? lhs.hi_ > rhs.hi_ : lhs.lo_ > rhs.lo_; + } + friend constexpr auto operator|(const uint128_fallback& lhs, + const uint128_fallback& rhs) + -> uint128_fallback { + return {lhs.hi_ | rhs.hi_, lhs.lo_ | rhs.lo_}; + } + friend constexpr auto operator&(const uint128_fallback& lhs, + const uint128_fallback& rhs) + -> uint128_fallback { + return {lhs.hi_ & rhs.hi_, lhs.lo_ & rhs.lo_}; + } + friend constexpr auto operator~(const uint128_fallback& n) + -> uint128_fallback { + return {~n.hi_, ~n.lo_}; + } + friend auto operator+(const uint128_fallback& lhs, + const uint128_fallback& rhs) -> uint128_fallback { + auto result = uint128_fallback(lhs); + result += rhs; + return result; + } + friend auto operator*(const uint128_fallback& lhs, uint32_t rhs) + -> uint128_fallback { + FMT_ASSERT(lhs.hi_ == 0, ""); + uint64_t hi = (lhs.lo_ >> 32) * rhs; + uint64_t lo = (lhs.lo_ & ~uint32_t()) * rhs; + uint64_t new_lo = (hi << 32) + lo; + return {(hi >> 32) + (new_lo < lo ? 1 : 0), new_lo}; + } + friend auto operator-(const uint128_fallback& lhs, uint64_t rhs) + -> uint128_fallback { + return {lhs.hi_ - (lhs.lo_ < rhs ? 1 : 0), lhs.lo_ - rhs}; + } + FMT_CONSTEXPR auto operator>>(int shift) const -> uint128_fallback { + if (shift == 64) return {0, hi_}; + if (shift > 64) return uint128_fallback(0, hi_) >> (shift - 64); + return {hi_ >> shift, (hi_ << (64 - shift)) | (lo_ >> shift)}; + } + FMT_CONSTEXPR auto operator<<(int shift) const -> uint128_fallback { + if (shift == 64) return {lo_, 0}; + if (shift > 64) return uint128_fallback(lo_, 0) << (shift - 64); + return {hi_ << shift | (lo_ >> (64 - shift)), (lo_ << shift)}; + } + FMT_CONSTEXPR auto operator>>=(int shift) -> uint128_fallback& { + return *this = *this >> shift; + } + FMT_CONSTEXPR void operator+=(uint128_fallback n) { + uint64_t new_lo = lo_ + n.lo_; + uint64_t new_hi = hi_ + n.hi_ + (new_lo < lo_ ? 1 : 0); + FMT_ASSERT(new_hi >= hi_, ""); + lo_ = new_lo; + hi_ = new_hi; + } + FMT_CONSTEXPR void operator&=(uint128_fallback n) { + lo_ &= n.lo_; + hi_ &= n.hi_; + } + + FMT_CONSTEXPR20 auto operator+=(uint64_t n) noexcept -> uint128_fallback& { + if (is_constant_evaluated()) { + lo_ += n; + hi_ += (lo_ < n ? 1 : 0); + return *this; + } +#if FMT_HAS_BUILTIN(__builtin_addcll) && !defined(__ibmxl__) + unsigned long long carry; + lo_ = __builtin_addcll(lo_, n, 0, &carry); + hi_ += carry; +#elif FMT_HAS_BUILTIN(__builtin_ia32_addcarryx_u64) && !defined(__ibmxl__) + unsigned long long result; + auto carry = __builtin_ia32_addcarryx_u64(0, lo_, n, &result); + lo_ = result; + hi_ += carry; +#elif defined(_MSC_VER) && defined(_M_X64) + auto carry = _addcarry_u64(0, lo_, n, &lo_); + _addcarry_u64(carry, hi_, 0, &hi_); +#else + lo_ += n; + hi_ += (lo_ < n ? 1 : 0); +#endif + return *this; + } +}; + +using uint128_t = conditional_t; + +#ifdef UINTPTR_MAX +using uintptr_t = ::uintptr_t; +#else +using uintptr_t = uint128_t; +#endif + +// Returns the largest possible value for type T. Same as +// std::numeric_limits::max() but shorter and not affected by the max macro. +template constexpr auto max_value() -> T { + return (std::numeric_limits::max)(); +} +template constexpr auto num_bits() -> int { + return std::numeric_limits::digits; +} +// std::numeric_limits::digits may return 0 for 128-bit ints. +template <> constexpr auto num_bits() -> int { return 128; } +template <> constexpr auto num_bits() -> int { return 128; } + +// A heterogeneous bit_cast used for converting 96-bit long double to uint128_t +// and 128-bit pointers to uint128_fallback. +template sizeof(From))> +inline auto bit_cast(const From& from) -> To { + constexpr auto size = static_cast(sizeof(From) / sizeof(unsigned)); + struct data_t { + unsigned value[static_cast(size)]; + } data = bit_cast(from); + auto result = To(); + if (const_check(is_big_endian())) { + for (int i = 0; i < size; ++i) + result = (result << num_bits()) | data.value[i]; + } else { + for (int i = size - 1; i >= 0; --i) + result = (result << num_bits()) | data.value[i]; + } + return result; +} + +template +FMT_CONSTEXPR20 inline auto countl_zero_fallback(UInt n) -> int { + int lz = 0; + constexpr UInt msb_mask = static_cast(1) << (num_bits() - 1); + for (; (n & msb_mask) == 0; n <<= 1) lz++; + return lz; +} + +FMT_CONSTEXPR20 inline auto countl_zero(uint32_t n) -> int { +#ifdef FMT_BUILTIN_CLZ + if (!is_constant_evaluated()) return FMT_BUILTIN_CLZ(n); +#endif + return countl_zero_fallback(n); +} + +FMT_CONSTEXPR20 inline auto countl_zero(uint64_t n) -> int { +#ifdef FMT_BUILTIN_CLZLL + if (!is_constant_evaluated()) return FMT_BUILTIN_CLZLL(n); +#endif + return countl_zero_fallback(n); +} + +FMT_INLINE void assume(bool condition) { + (void)condition; +#if FMT_HAS_BUILTIN(__builtin_assume) && !FMT_ICC_VERSION + __builtin_assume(condition); +#elif FMT_GCC_VERSION + if (!condition) __builtin_unreachable(); +#endif +} + +// An approximation of iterator_t for pre-C++20 systems. +template +using iterator_t = decltype(std::begin(std::declval())); +template using sentinel_t = decltype(std::end(std::declval())); + +// A workaround for std::string not having mutable data() until C++17. +template +inline auto get_data(std::basic_string& s) -> Char* { + return &s[0]; +} +template +inline auto get_data(Container& c) -> typename Container::value_type* { + return c.data(); +} + +// Attempts to reserve space for n extra characters in the output range. +// Returns a pointer to the reserved range or a reference to it. +template ::value)> +#if FMT_CLANG_VERSION >= 307 && !FMT_ICC_VERSION +__attribute__((no_sanitize("undefined"))) +#endif +inline auto +reserve(std::back_insert_iterator it, size_t n) -> + typename Container::value_type* { + Container& c = get_container(it); + size_t size = c.size(); + c.resize(size + n); + return get_data(c) + size; +} + +template +inline auto reserve(buffer_appender it, size_t n) -> buffer_appender { + buffer& buf = get_container(it); + buf.try_reserve(buf.size() + n); + return it; +} + +template +constexpr auto reserve(Iterator& it, size_t) -> Iterator& { + return it; +} + +template +using reserve_iterator = + remove_reference_t(), 0))>; + +template +constexpr auto to_pointer(OutputIt, size_t) -> T* { + return nullptr; +} +template auto to_pointer(buffer_appender it, size_t n) -> T* { + buffer& buf = get_container(it); + auto size = buf.size(); + if (buf.capacity() < size + n) return nullptr; + buf.try_resize(size + n); + return buf.data() + size; +} + +template ::value)> +inline auto base_iterator(std::back_insert_iterator it, + typename Container::value_type*) + -> std::back_insert_iterator { + return it; +} + +template +constexpr auto base_iterator(Iterator, Iterator it) -> Iterator { + return it; +} + +// is spectacularly slow to compile in C++20 so use a simple fill_n +// instead (#1998). +template +FMT_CONSTEXPR auto fill_n(OutputIt out, Size count, const T& value) + -> OutputIt { + for (Size i = 0; i < count; ++i) *out++ = value; + return out; +} +template +FMT_CONSTEXPR20 auto fill_n(T* out, Size count, char value) -> T* { + if (is_constant_evaluated()) { + return fill_n(out, count, value); + } + std::memset(out, value, to_unsigned(count)); + return out + count; +} + +#ifdef __cpp_char8_t +using char8_type = char8_t; +#else +enum char8_type : unsigned char {}; +#endif + +template +FMT_CONSTEXPR FMT_NOINLINE auto copy_str_noinline(InputIt begin, InputIt end, + OutputIt out) -> OutputIt { + return copy_str(begin, end, out); +} + +// A public domain branchless UTF-8 decoder by Christopher Wellons: +// https://github.com/skeeto/branchless-utf8 +/* Decode the next character, c, from s, reporting errors in e. + * + * Since this is a branchless decoder, four bytes will be read from the + * buffer regardless of the actual length of the next character. This + * means the buffer _must_ have at least three bytes of zero padding + * following the end of the data stream. + * + * Errors are reported in e, which will be non-zero if the parsed + * character was somehow invalid: invalid byte sequence, non-canonical + * encoding, or a surrogate half. + * + * The function returns a pointer to the next character. When an error + * occurs, this pointer will be a guess that depends on the particular + * error, but it will always advance at least one byte. + */ +FMT_CONSTEXPR inline auto utf8_decode(const char* s, uint32_t* c, int* e) + -> const char* { + constexpr const int masks[] = {0x00, 0x7f, 0x1f, 0x0f, 0x07}; + constexpr const uint32_t mins[] = {4194304, 0, 128, 2048, 65536}; + constexpr const int shiftc[] = {0, 18, 12, 6, 0}; + constexpr const int shifte[] = {0, 6, 4, 2, 0}; + + int len = "\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\0\0\0\0\0\0\0\0\2\2\2\2\3\3\4" + [static_cast(*s) >> 3]; + // Compute the pointer to the next character early so that the next + // iteration can start working on the next character. Neither Clang + // nor GCC figure out this reordering on their own. + const char* next = s + len + !len; + + using uchar = unsigned char; + + // Assume a four-byte character and load four bytes. Unused bits are + // shifted out. + *c = uint32_t(uchar(s[0]) & masks[len]) << 18; + *c |= uint32_t(uchar(s[1]) & 0x3f) << 12; + *c |= uint32_t(uchar(s[2]) & 0x3f) << 6; + *c |= uint32_t(uchar(s[3]) & 0x3f) << 0; + *c >>= shiftc[len]; + + // Accumulate the various error conditions. + *e = (*c < mins[len]) << 6; // non-canonical encoding + *e |= ((*c >> 11) == 0x1b) << 7; // surrogate half? + *e |= (*c > 0x10FFFF) << 8; // out of range? + *e |= (uchar(s[1]) & 0xc0) >> 2; + *e |= (uchar(s[2]) & 0xc0) >> 4; + *e |= uchar(s[3]) >> 6; + *e ^= 0x2a; // top two bits of each tail byte correct? + *e >>= shifte[len]; + + return next; +} + +constexpr FMT_INLINE_VARIABLE uint32_t invalid_code_point = ~uint32_t(); + +// Invokes f(cp, sv) for every code point cp in s with sv being the string view +// corresponding to the code point. cp is invalid_code_point on error. +template +FMT_CONSTEXPR void for_each_codepoint(string_view s, F f) { + auto decode = [f](const char* buf_ptr, const char* ptr) { + auto cp = uint32_t(); + auto error = 0; + auto end = utf8_decode(buf_ptr, &cp, &error); + bool result = f(error ? invalid_code_point : cp, + string_view(ptr, error ? 1 : to_unsigned(end - buf_ptr))); + return result ? (error ? buf_ptr + 1 : end) : nullptr; + }; + auto p = s.data(); + const size_t block_size = 4; // utf8_decode always reads blocks of 4 chars. + if (s.size() >= block_size) { + for (auto end = p + s.size() - block_size + 1; p < end;) { + p = decode(p, p); + if (!p) return; + } + } + if (auto num_chars_left = s.data() + s.size() - p) { + char buf[2 * block_size - 1] = {}; + copy_str(p, p + num_chars_left, buf); + const char* buf_ptr = buf; + do { + auto end = decode(buf_ptr, p); + if (!end) return; + p += end - buf_ptr; + buf_ptr = end; + } while (buf_ptr - buf < num_chars_left); + } +} + +template +inline auto compute_width(basic_string_view s) -> size_t { + return s.size(); +} + +// Computes approximate display width of a UTF-8 string. +FMT_CONSTEXPR inline auto compute_width(string_view s) -> size_t { + size_t num_code_points = 0; + // It is not a lambda for compatibility with C++14. + struct count_code_points { + size_t* count; + FMT_CONSTEXPR auto operator()(uint32_t cp, string_view) const -> bool { + *count += detail::to_unsigned( + 1 + + (cp >= 0x1100 && + (cp <= 0x115f || // Hangul Jamo init. consonants + cp == 0x2329 || // LEFT-POINTING ANGLE BRACKET + cp == 0x232a || // RIGHT-POINTING ANGLE BRACKET + // CJK ... Yi except IDEOGRAPHIC HALF FILL SPACE: + (cp >= 0x2e80 && cp <= 0xa4cf && cp != 0x303f) || + (cp >= 0xac00 && cp <= 0xd7a3) || // Hangul Syllables + (cp >= 0xf900 && cp <= 0xfaff) || // CJK Compatibility Ideographs + (cp >= 0xfe10 && cp <= 0xfe19) || // Vertical Forms + (cp >= 0xfe30 && cp <= 0xfe6f) || // CJK Compatibility Forms + (cp >= 0xff00 && cp <= 0xff60) || // Fullwidth Forms + (cp >= 0xffe0 && cp <= 0xffe6) || // Fullwidth Forms + (cp >= 0x20000 && cp <= 0x2fffd) || // CJK + (cp >= 0x30000 && cp <= 0x3fffd) || + // Miscellaneous Symbols and Pictographs + Emoticons: + (cp >= 0x1f300 && cp <= 0x1f64f) || + // Supplemental Symbols and Pictographs: + (cp >= 0x1f900 && cp <= 0x1f9ff)))); + return true; + } + }; + // We could avoid branches by using utf8_decode directly. + for_each_codepoint(s, count_code_points{&num_code_points}); + return num_code_points; +} + +inline auto compute_width(basic_string_view s) -> size_t { + return compute_width( + string_view(reinterpret_cast(s.data()), s.size())); +} + +template +inline auto code_point_index(basic_string_view s, size_t n) -> size_t { + size_t size = s.size(); + return n < size ? n : size; +} + +// Calculates the index of the nth code point in a UTF-8 string. +inline auto code_point_index(string_view s, size_t n) -> size_t { + size_t result = s.size(); + const char* begin = s.begin(); + for_each_codepoint(s, [begin, &n, &result](uint32_t, string_view sv) { + if (n != 0) { + --n; + return true; + } + result = to_unsigned(sv.begin() - begin); + return false; + }); + return result; +} + +inline auto code_point_index(basic_string_view s, size_t n) + -> size_t { + return code_point_index( + string_view(reinterpret_cast(s.data()), s.size()), n); +} + +template struct is_integral : std::is_integral {}; +template <> struct is_integral : std::true_type {}; +template <> struct is_integral : std::true_type {}; + +template +using is_signed = + std::integral_constant::is_signed || + std::is_same::value>; + +template +using is_integer = + bool_constant::value && !std::is_same::value && + !std::is_same::value && + !std::is_same::value>; + +#ifndef FMT_USE_FLOAT +# define FMT_USE_FLOAT 1 +#endif +#ifndef FMT_USE_DOUBLE +# define FMT_USE_DOUBLE 1 +#endif +#ifndef FMT_USE_LONG_DOUBLE +# define FMT_USE_LONG_DOUBLE 1 +#endif + +#ifndef FMT_USE_FLOAT128 +# ifdef __clang__ +// Clang emulates GCC, so it has to appear early. +# if FMT_HAS_INCLUDE() +# define FMT_USE_FLOAT128 1 +# endif +# elif defined(__GNUC__) +// GNU C++: +# if defined(_GLIBCXX_USE_FLOAT128) && !defined(__STRICT_ANSI__) +# define FMT_USE_FLOAT128 1 +# endif +# endif +# ifndef FMT_USE_FLOAT128 +# define FMT_USE_FLOAT128 0 +# endif +#endif + +#if FMT_USE_FLOAT128 +using float128 = __float128; +#else +using float128 = void; +#endif +template using is_float128 = std::is_same; + +template +using is_floating_point = + bool_constant::value || is_float128::value>; + +template ::value> +struct is_fast_float : bool_constant::is_iec559 && + sizeof(T) <= sizeof(double)> {}; +template struct is_fast_float : std::false_type {}; + +template +using is_double_double = bool_constant::digits == 106>; + +#ifndef FMT_USE_FULL_CACHE_DRAGONBOX +# define FMT_USE_FULL_CACHE_DRAGONBOX 0 +#endif + +template +template +void buffer::append(const U* begin, const U* end) { + while (begin != end) { + auto count = to_unsigned(end - begin); + try_reserve(size_ + count); + auto free_cap = capacity_ - size_; + if (free_cap < count) count = free_cap; + std::uninitialized_copy_n(begin, count, ptr_ + size_); + size_ += count; + begin += count; + } +} + +template +struct is_locale : std::false_type {}; +template +struct is_locale> : std::true_type {}; +} // namespace detail + +FMT_BEGIN_EXPORT + +// The number of characters to store in the basic_memory_buffer object itself +// to avoid dynamic memory allocation. +enum { inline_buffer_size = 500 }; + +/** + \rst + A dynamically growing memory buffer for trivially copyable/constructible types + with the first ``SIZE`` elements stored in the object itself. + + You can use the ``memory_buffer`` type alias for ``char`` instead. + + **Example**:: + + auto out = fmt::memory_buffer(); + fmt::format_to(std::back_inserter(out), "The answer is {}.", 42); + + This will append the following output to the ``out`` object: + + .. code-block:: none + + The answer is 42. + + The output can be converted to an ``std::string`` with ``to_string(out)``. + \endrst + */ +template > +class basic_memory_buffer final : public detail::buffer { + private: + T store_[SIZE]; + + // Don't inherit from Allocator to avoid generating type_info for it. + FMT_NO_UNIQUE_ADDRESS Allocator alloc_; + + // Deallocate memory allocated by the buffer. + FMT_CONSTEXPR20 void deallocate() { + T* data = this->data(); + if (data != store_) alloc_.deallocate(data, this->capacity()); + } + + protected: + FMT_CONSTEXPR20 void grow(size_t size) override { + detail::abort_fuzzing_if(size > 5000); + const size_t max_size = std::allocator_traits::max_size(alloc_); + size_t old_capacity = this->capacity(); + size_t new_capacity = old_capacity + old_capacity / 2; + if (size > new_capacity) + new_capacity = size; + else if (new_capacity > max_size) + new_capacity = size > max_size ? size : max_size; + T* old_data = this->data(); + T* new_data = + std::allocator_traits::allocate(alloc_, new_capacity); + // Suppress a bogus -Wstringop-overflow in gcc 13.1 (#3481). + detail::assume(this->size() <= new_capacity); + // The following code doesn't throw, so the raw pointer above doesn't leak. + std::uninitialized_copy_n(old_data, this->size(), new_data); + this->set(new_data, new_capacity); + // deallocate must not throw according to the standard, but even if it does, + // the buffer already uses the new storage and will deallocate it in + // destructor. + if (old_data != store_) alloc_.deallocate(old_data, old_capacity); + } + + public: + using value_type = T; + using const_reference = const T&; + + FMT_CONSTEXPR20 explicit basic_memory_buffer( + const Allocator& alloc = Allocator()) + : alloc_(alloc) { + this->set(store_, SIZE); + if (detail::is_constant_evaluated()) detail::fill_n(store_, SIZE, T()); + } + FMT_CONSTEXPR20 ~basic_memory_buffer() { deallocate(); } + + private: + // Move data from other to this buffer. + FMT_CONSTEXPR20 void move(basic_memory_buffer& other) { + alloc_ = std::move(other.alloc_); + T* data = other.data(); + size_t size = other.size(), capacity = other.capacity(); + if (data == other.store_) { + this->set(store_, capacity); + detail::copy_str(other.store_, other.store_ + size, store_); + } else { + this->set(data, capacity); + // Set pointer to the inline array so that delete is not called + // when deallocating. + other.set(other.store_, 0); + other.clear(); + } + this->resize(size); + } + + public: + /** + \rst + Constructs a :class:`fmt::basic_memory_buffer` object moving the content + of the other object to it. + \endrst + */ + FMT_CONSTEXPR20 basic_memory_buffer(basic_memory_buffer&& other) noexcept { + move(other); + } + + /** + \rst + Moves the content of the other ``basic_memory_buffer`` object to this one. + \endrst + */ + auto operator=(basic_memory_buffer&& other) noexcept -> basic_memory_buffer& { + FMT_ASSERT(this != &other, ""); + deallocate(); + move(other); + return *this; + } + + // Returns a copy of the allocator associated with this buffer. + auto get_allocator() const -> Allocator { return alloc_; } + + /** + Resizes the buffer to contain *count* elements. If T is a POD type new + elements may not be initialized. + */ + FMT_CONSTEXPR20 void resize(size_t count) { this->try_resize(count); } + + /** Increases the buffer capacity to *new_capacity*. */ + void reserve(size_t new_capacity) { this->try_reserve(new_capacity); } + + using detail::buffer::append; + template + void append(const ContiguousRange& range) { + append(range.data(), range.data() + range.size()); + } +}; + +using memory_buffer = basic_memory_buffer; + +template +struct is_contiguous> : std::true_type { +}; + +FMT_END_EXPORT +namespace detail { +FMT_API auto write_console(int fd, string_view text) -> bool; +FMT_API auto write_console(std::FILE* f, string_view text) -> bool; +FMT_API void print(std::FILE*, string_view); +} // namespace detail + +FMT_BEGIN_EXPORT + +// Suppress a misleading warning in older versions of clang. +#if FMT_CLANG_VERSION +# pragma clang diagnostic ignored "-Wweak-vtables" +#endif + +/** An error reported from a formatting function. */ +class FMT_SO_VISIBILITY("default") format_error : public std::runtime_error { + public: + using std::runtime_error::runtime_error; +}; + +namespace detail_exported { +#if FMT_USE_NONTYPE_TEMPLATE_ARGS +template struct fixed_string { + constexpr fixed_string(const Char (&str)[N]) { + detail::copy_str(static_cast(str), + str + N, data); + } + Char data[N] = {}; +}; +#endif + +// Converts a compile-time string to basic_string_view. +template +constexpr auto compile_string_to_view(const Char (&s)[N]) + -> basic_string_view { + // Remove trailing NUL character if needed. Won't be present if this is used + // with a raw character array (i.e. not defined as a string). + return {s, N - (std::char_traits::to_int_type(s[N - 1]) == 0 ? 1 : 0)}; +} +template +constexpr auto compile_string_to_view(detail::std_string_view s) + -> basic_string_view { + return {s.data(), s.size()}; +} +} // namespace detail_exported + +class loc_value { + private: + basic_format_arg value_; + + public: + template ::value)> + loc_value(T value) : value_(detail::make_arg(value)) {} + + template ::value)> + loc_value(T) {} + + template auto visit(Visitor&& vis) -> decltype(vis(0)) { + return visit_format_arg(vis, value_); + } +}; + +// A locale facet that formats values in UTF-8. +// It is parameterized on the locale to avoid the heavy include. +template class format_facet : public Locale::facet { + private: + std::string separator_; + std::string grouping_; + std::string decimal_point_; + + protected: + virtual auto do_put(appender out, loc_value val, + const format_specs<>& specs) const -> bool; + + public: + static FMT_API typename Locale::id id; + + explicit format_facet(Locale& loc); + explicit format_facet(string_view sep = "", + std::initializer_list g = {3}, + std::string decimal_point = ".") + : separator_(sep.data(), sep.size()), + grouping_(g.begin(), g.end()), + decimal_point_(decimal_point) {} + + auto put(appender out, loc_value val, const format_specs<>& specs) const + -> bool { + return do_put(out, val, specs); + } +}; + +namespace detail { + +// Returns true if value is negative, false otherwise. +// Same as `value < 0` but doesn't produce warnings if T is an unsigned type. +template ::value)> +constexpr auto is_negative(T value) -> bool { + return value < 0; +} +template ::value)> +constexpr auto is_negative(T) -> bool { + return false; +} + +template +FMT_CONSTEXPR auto is_supported_floating_point(T) -> bool { + if (std::is_same()) return FMT_USE_FLOAT; + if (std::is_same()) return FMT_USE_DOUBLE; + if (std::is_same()) return FMT_USE_LONG_DOUBLE; + return true; +} + +// Smallest of uint32_t, uint64_t, uint128_t that is large enough to +// represent all values of an integral type T. +template +using uint32_or_64_or_128_t = + conditional_t() <= 32 && !FMT_REDUCE_INT_INSTANTIATIONS, + uint32_t, + conditional_t() <= 64, uint64_t, uint128_t>>; +template +using uint64_or_128_t = conditional_t() <= 64, uint64_t, uint128_t>; + +#define FMT_POWERS_OF_10(factor) \ + factor * 10, (factor) * 100, (factor) * 1000, (factor) * 10000, \ + (factor) * 100000, (factor) * 1000000, (factor) * 10000000, \ + (factor) * 100000000, (factor) * 1000000000 + +// Converts value in the range [0, 100) to a string. +constexpr auto digits2(size_t value) -> const char* { + // GCC generates slightly better code when value is pointer-size. + return &"0001020304050607080910111213141516171819" + "2021222324252627282930313233343536373839" + "4041424344454647484950515253545556575859" + "6061626364656667686970717273747576777879" + "8081828384858687888990919293949596979899"[value * 2]; +} + +// Sign is a template parameter to workaround a bug in gcc 4.8. +template constexpr auto sign(Sign s) -> Char { +#if !FMT_GCC_VERSION || FMT_GCC_VERSION >= 604 + static_assert(std::is_same::value, ""); +#endif + return static_cast("\0-+ "[s]); +} + +template FMT_CONSTEXPR auto count_digits_fallback(T n) -> int { + int count = 1; + for (;;) { + // Integer division is slow so do it for a group of four digits instead + // of for every digit. The idea comes from the talk by Alexandrescu + // "Three Optimization Tips for C++". See speed-test for a comparison. + if (n < 10) return count; + if (n < 100) return count + 1; + if (n < 1000) return count + 2; + if (n < 10000) return count + 3; + n /= 10000u; + count += 4; + } +} +#if FMT_USE_INT128 +FMT_CONSTEXPR inline auto count_digits(uint128_opt n) -> int { + return count_digits_fallback(n); +} +#endif + +#ifdef FMT_BUILTIN_CLZLL +// It is a separate function rather than a part of count_digits to workaround +// the lack of static constexpr in constexpr functions. +inline auto do_count_digits(uint64_t n) -> int { + // This has comparable performance to the version by Kendall Willets + // (https://github.com/fmtlib/format-benchmark/blob/master/digits10) + // but uses smaller tables. + // Maps bsr(n) to ceil(log10(pow(2, bsr(n) + 1) - 1)). + static constexpr uint8_t bsr2log10[] = { + 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, + 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 9, 9, 9, 10, 10, 10, + 10, 11, 11, 11, 12, 12, 12, 13, 13, 13, 13, 14, 14, 14, 15, 15, + 15, 16, 16, 16, 16, 17, 17, 17, 18, 18, 18, 19, 19, 19, 19, 20}; + auto t = bsr2log10[FMT_BUILTIN_CLZLL(n | 1) ^ 63]; + static constexpr const uint64_t zero_or_powers_of_10[] = { + 0, 0, FMT_POWERS_OF_10(1U), FMT_POWERS_OF_10(1000000000ULL), + 10000000000000000000ULL}; + return t - (n < zero_or_powers_of_10[t]); +} +#endif + +// Returns the number of decimal digits in n. Leading zeros are not counted +// except for n == 0 in which case count_digits returns 1. +FMT_CONSTEXPR20 inline auto count_digits(uint64_t n) -> int { +#ifdef FMT_BUILTIN_CLZLL + if (!is_constant_evaluated()) { + return do_count_digits(n); + } +#endif + return count_digits_fallback(n); +} + +// Counts the number of digits in n. BITS = log2(radix). +template +FMT_CONSTEXPR auto count_digits(UInt n) -> int { +#ifdef FMT_BUILTIN_CLZ + if (!is_constant_evaluated() && num_bits() == 32) + return (FMT_BUILTIN_CLZ(static_cast(n) | 1) ^ 31) / BITS + 1; +#endif + // Lambda avoids unreachable code warnings from NVHPC. + return [](UInt m) { + int num_digits = 0; + do { + ++num_digits; + } while ((m >>= BITS) != 0); + return num_digits; + }(n); +} + +#ifdef FMT_BUILTIN_CLZ +// It is a separate function rather than a part of count_digits to workaround +// the lack of static constexpr in constexpr functions. +FMT_INLINE auto do_count_digits(uint32_t n) -> int { +// An optimization by Kendall Willets from https://bit.ly/3uOIQrB. +// This increments the upper 32 bits (log10(T) - 1) when >= T is added. +# define FMT_INC(T) (((sizeof(#T) - 1ull) << 32) - T) + static constexpr uint64_t table[] = { + FMT_INC(0), FMT_INC(0), FMT_INC(0), // 8 + FMT_INC(10), FMT_INC(10), FMT_INC(10), // 64 + FMT_INC(100), FMT_INC(100), FMT_INC(100), // 512 + FMT_INC(1000), FMT_INC(1000), FMT_INC(1000), // 4096 + FMT_INC(10000), FMT_INC(10000), FMT_INC(10000), // 32k + FMT_INC(100000), FMT_INC(100000), FMT_INC(100000), // 256k + FMT_INC(1000000), FMT_INC(1000000), FMT_INC(1000000), // 2048k + FMT_INC(10000000), FMT_INC(10000000), FMT_INC(10000000), // 16M + FMT_INC(100000000), FMT_INC(100000000), FMT_INC(100000000), // 128M + FMT_INC(1000000000), FMT_INC(1000000000), FMT_INC(1000000000), // 1024M + FMT_INC(1000000000), FMT_INC(1000000000) // 4B + }; + auto inc = table[FMT_BUILTIN_CLZ(n | 1) ^ 31]; + return static_cast((n + inc) >> 32); +} +#endif + +// Optional version of count_digits for better performance on 32-bit platforms. +FMT_CONSTEXPR20 inline auto count_digits(uint32_t n) -> int { +#ifdef FMT_BUILTIN_CLZ + if (!is_constant_evaluated()) { + return do_count_digits(n); + } +#endif + return count_digits_fallback(n); +} + +template constexpr auto digits10() noexcept -> int { + return std::numeric_limits::digits10; +} +template <> constexpr auto digits10() noexcept -> int { return 38; } +template <> constexpr auto digits10() noexcept -> int { return 38; } + +template struct thousands_sep_result { + std::string grouping; + Char thousands_sep; +}; + +template +FMT_API auto thousands_sep_impl(locale_ref loc) -> thousands_sep_result; +template +inline auto thousands_sep(locale_ref loc) -> thousands_sep_result { + auto result = thousands_sep_impl(loc); + return {result.grouping, Char(result.thousands_sep)}; +} +template <> +inline auto thousands_sep(locale_ref loc) -> thousands_sep_result { + return thousands_sep_impl(loc); +} + +template +FMT_API auto decimal_point_impl(locale_ref loc) -> Char; +template inline auto decimal_point(locale_ref loc) -> Char { + return Char(decimal_point_impl(loc)); +} +template <> inline auto decimal_point(locale_ref loc) -> wchar_t { + return decimal_point_impl(loc); +} + +// Compares two characters for equality. +template auto equal2(const Char* lhs, const char* rhs) -> bool { + return lhs[0] == Char(rhs[0]) && lhs[1] == Char(rhs[1]); +} +inline auto equal2(const char* lhs, const char* rhs) -> bool { + return memcmp(lhs, rhs, 2) == 0; +} + +// Copies two characters from src to dst. +template +FMT_CONSTEXPR20 FMT_INLINE void copy2(Char* dst, const char* src) { + if (!is_constant_evaluated() && sizeof(Char) == sizeof(char)) { + memcpy(dst, src, 2); + return; + } + *dst++ = static_cast(*src++); + *dst = static_cast(*src); +} + +template struct format_decimal_result { + Iterator begin; + Iterator end; +}; + +// Formats a decimal unsigned integer value writing into out pointing to a +// buffer of specified size. The caller must ensure that the buffer is large +// enough. +template +FMT_CONSTEXPR20 auto format_decimal(Char* out, UInt value, int size) + -> format_decimal_result { + FMT_ASSERT(size >= count_digits(value), "invalid digit count"); + out += size; + Char* end = out; + while (value >= 100) { + // Integer division is slow so do it for a group of two digits instead + // of for every digit. The idea comes from the talk by Alexandrescu + // "Three Optimization Tips for C++". See speed-test for a comparison. + out -= 2; + copy2(out, digits2(static_cast(value % 100))); + value /= 100; + } + if (value < 10) { + *--out = static_cast('0' + value); + return {out, end}; + } + out -= 2; + copy2(out, digits2(static_cast(value))); + return {out, end}; +} + +template >::value)> +FMT_CONSTEXPR inline auto format_decimal(Iterator out, UInt value, int size) + -> format_decimal_result { + // Buffer is large enough to hold all digits (digits10 + 1). + Char buffer[digits10() + 1] = {}; + auto end = format_decimal(buffer, value, size).end; + return {out, detail::copy_str_noinline(buffer, end, out)}; +} + +template +FMT_CONSTEXPR auto format_uint(Char* buffer, UInt value, int num_digits, + bool upper = false) -> Char* { + buffer += num_digits; + Char* end = buffer; + do { + const char* digits = upper ? "0123456789ABCDEF" : "0123456789abcdef"; + unsigned digit = static_cast(value & ((1 << BASE_BITS) - 1)); + *--buffer = static_cast(BASE_BITS < 4 ? static_cast('0' + digit) + : digits[digit]); + } while ((value >>= BASE_BITS) != 0); + return end; +} + +template +FMT_CONSTEXPR inline auto format_uint(It out, UInt value, int num_digits, + bool upper = false) -> It { + if (auto ptr = to_pointer(out, to_unsigned(num_digits))) { + format_uint(ptr, value, num_digits, upper); + return out; + } + // Buffer should be large enough to hold all digits (digits / BASE_BITS + 1). + char buffer[num_bits() / BASE_BITS + 1] = {}; + format_uint(buffer, value, num_digits, upper); + return detail::copy_str_noinline(buffer, buffer + num_digits, out); +} + +// A converter from UTF-8 to UTF-16. +class utf8_to_utf16 { + private: + basic_memory_buffer buffer_; + + public: + FMT_API explicit utf8_to_utf16(string_view s); + operator basic_string_view() const { return {&buffer_[0], size()}; } + auto size() const -> size_t { return buffer_.size() - 1; } + auto c_str() const -> const wchar_t* { return &buffer_[0]; } + auto str() const -> std::wstring { return {&buffer_[0], size()}; } +}; + +enum class to_utf8_error_policy { abort, replace }; + +// A converter from UTF-16/UTF-32 (host endian) to UTF-8. +template class to_utf8 { + private: + Buffer buffer_; + + public: + to_utf8() {} + explicit to_utf8(basic_string_view s, + to_utf8_error_policy policy = to_utf8_error_policy::abort) { + static_assert(sizeof(WChar) == 2 || sizeof(WChar) == 4, + "Expect utf16 or utf32"); + if (!convert(s, policy)) + FMT_THROW(std::runtime_error(sizeof(WChar) == 2 ? "invalid utf16" + : "invalid utf32")); + } + operator string_view() const { return string_view(&buffer_[0], size()); } + auto size() const -> size_t { return buffer_.size() - 1; } + auto c_str() const -> const char* { return &buffer_[0]; } + auto str() const -> std::string { return std::string(&buffer_[0], size()); } + + // Performs conversion returning a bool instead of throwing exception on + // conversion error. This method may still throw in case of memory allocation + // error. + auto convert(basic_string_view s, + to_utf8_error_policy policy = to_utf8_error_policy::abort) + -> bool { + if (!convert(buffer_, s, policy)) return false; + buffer_.push_back(0); + return true; + } + static auto convert(Buffer& buf, basic_string_view s, + to_utf8_error_policy policy = to_utf8_error_policy::abort) + -> bool { + for (auto p = s.begin(); p != s.end(); ++p) { + uint32_t c = static_cast(*p); + if (sizeof(WChar) == 2 && c >= 0xd800 && c <= 0xdfff) { + // Handle a surrogate pair. + ++p; + if (p == s.end() || (c & 0xfc00) != 0xd800 || (*p & 0xfc00) != 0xdc00) { + if (policy == to_utf8_error_policy::abort) return false; + buf.append(string_view("\xEF\xBF\xBD")); + --p; + } else { + c = (c << 10) + static_cast(*p) - 0x35fdc00; + } + } else if (c < 0x80) { + buf.push_back(static_cast(c)); + } else if (c < 0x800) { + buf.push_back(static_cast(0xc0 | (c >> 6))); + buf.push_back(static_cast(0x80 | (c & 0x3f))); + } else if ((c >= 0x800 && c <= 0xd7ff) || (c >= 0xe000 && c <= 0xffff)) { + buf.push_back(static_cast(0xe0 | (c >> 12))); + buf.push_back(static_cast(0x80 | ((c & 0xfff) >> 6))); + buf.push_back(static_cast(0x80 | (c & 0x3f))); + } else if (c >= 0x10000 && c <= 0x10ffff) { + buf.push_back(static_cast(0xf0 | (c >> 18))); + buf.push_back(static_cast(0x80 | ((c & 0x3ffff) >> 12))); + buf.push_back(static_cast(0x80 | ((c & 0xfff) >> 6))); + buf.push_back(static_cast(0x80 | (c & 0x3f))); + } else { + return false; + } + } + return true; + } +}; + +// Computes 128-bit result of multiplication of two 64-bit unsigned integers. +inline auto umul128(uint64_t x, uint64_t y) noexcept -> uint128_fallback { +#if FMT_USE_INT128 + auto p = static_cast(x) * static_cast(y); + return {static_cast(p >> 64), static_cast(p)}; +#elif defined(_MSC_VER) && defined(_M_X64) + auto hi = uint64_t(); + auto lo = _umul128(x, y, &hi); + return {hi, lo}; +#else + const uint64_t mask = static_cast(max_value()); + + uint64_t a = x >> 32; + uint64_t b = x & mask; + uint64_t c = y >> 32; + uint64_t d = y & mask; + + uint64_t ac = a * c; + uint64_t bc = b * c; + uint64_t ad = a * d; + uint64_t bd = b * d; + + uint64_t intermediate = (bd >> 32) + (ad & mask) + (bc & mask); + + return {ac + (intermediate >> 32) + (ad >> 32) + (bc >> 32), + (intermediate << 32) + (bd & mask)}; +#endif +} + +namespace dragonbox { +// Computes floor(log10(pow(2, e))) for e in [-2620, 2620] using the method from +// https://fmt.dev/papers/Dragonbox.pdf#page=28, section 6.1. +inline auto floor_log10_pow2(int e) noexcept -> int { + FMT_ASSERT(e <= 2620 && e >= -2620, "too large exponent"); + static_assert((-1 >> 1) == -1, "right shift is not arithmetic"); + return (e * 315653) >> 20; +} + +inline auto floor_log2_pow10(int e) noexcept -> int { + FMT_ASSERT(e <= 1233 && e >= -1233, "too large exponent"); + return (e * 1741647) >> 19; +} + +// Computes upper 64 bits of multiplication of two 64-bit unsigned integers. +inline auto umul128_upper64(uint64_t x, uint64_t y) noexcept -> uint64_t { +#if FMT_USE_INT128 + auto p = static_cast(x) * static_cast(y); + return static_cast(p >> 64); +#elif defined(_MSC_VER) && defined(_M_X64) + return __umulh(x, y); +#else + return umul128(x, y).high(); +#endif +} + +// Computes upper 128 bits of multiplication of a 64-bit unsigned integer and a +// 128-bit unsigned integer. +inline auto umul192_upper128(uint64_t x, uint128_fallback y) noexcept + -> uint128_fallback { + uint128_fallback r = umul128(x, y.high()); + r += umul128_upper64(x, y.low()); + return r; +} + +FMT_API auto get_cached_power(int k) noexcept -> uint128_fallback; + +// Type-specific information that Dragonbox uses. +template struct float_info; + +template <> struct float_info { + using carrier_uint = uint32_t; + static const int exponent_bits = 8; + static const int kappa = 1; + static const int big_divisor = 100; + static const int small_divisor = 10; + static const int min_k = -31; + static const int max_k = 46; + static const int shorter_interval_tie_lower_threshold = -35; + static const int shorter_interval_tie_upper_threshold = -35; +}; + +template <> struct float_info { + using carrier_uint = uint64_t; + static const int exponent_bits = 11; + static const int kappa = 2; + static const int big_divisor = 1000; + static const int small_divisor = 100; + static const int min_k = -292; + static const int max_k = 341; + static const int shorter_interval_tie_lower_threshold = -77; + static const int shorter_interval_tie_upper_threshold = -77; +}; + +// An 80- or 128-bit floating point number. +template +struct float_info::digits == 64 || + std::numeric_limits::digits == 113 || + is_float128::value>> { + using carrier_uint = detail::uint128_t; + static const int exponent_bits = 15; +}; + +// A double-double floating point number. +template +struct float_info::value>> { + using carrier_uint = detail::uint128_t; +}; + +template struct decimal_fp { + using significand_type = typename float_info::carrier_uint; + significand_type significand; + int exponent; +}; + +template FMT_API auto to_decimal(T x) noexcept -> decimal_fp; +} // namespace dragonbox + +// Returns true iff Float has the implicit bit which is not stored. +template constexpr auto has_implicit_bit() -> bool { + // An 80-bit FP number has a 64-bit significand an no implicit bit. + return std::numeric_limits::digits != 64; +} + +// Returns the number of significand bits stored in Float. The implicit bit is +// not counted since it is not stored. +template constexpr auto num_significand_bits() -> int { + // std::numeric_limits may not support __float128. + return is_float128() ? 112 + : (std::numeric_limits::digits - + (has_implicit_bit() ? 1 : 0)); +} + +template +constexpr auto exponent_mask() -> + typename dragonbox::float_info::carrier_uint { + using float_uint = typename dragonbox::float_info::carrier_uint; + return ((float_uint(1) << dragonbox::float_info::exponent_bits) - 1) + << num_significand_bits(); +} +template constexpr auto exponent_bias() -> int { + // std::numeric_limits may not support __float128. + return is_float128() ? 16383 + : std::numeric_limits::max_exponent - 1; +} + +// Writes the exponent exp in the form "[+-]d{2,3}" to buffer. +template +FMT_CONSTEXPR auto write_exponent(int exp, It it) -> It { + FMT_ASSERT(-10000 < exp && exp < 10000, "exponent out of range"); + if (exp < 0) { + *it++ = static_cast('-'); + exp = -exp; + } else { + *it++ = static_cast('+'); + } + if (exp >= 100) { + const char* top = digits2(to_unsigned(exp / 100)); + if (exp >= 1000) *it++ = static_cast(top[0]); + *it++ = static_cast(top[1]); + exp %= 100; + } + const char* d = digits2(to_unsigned(exp)); + *it++ = static_cast(d[0]); + *it++ = static_cast(d[1]); + return it; +} + +// A floating-point number f * pow(2, e) where F is an unsigned type. +template struct basic_fp { + F f; + int e; + + static constexpr const int num_significand_bits = + static_cast(sizeof(F) * num_bits()); + + constexpr basic_fp() : f(0), e(0) {} + constexpr basic_fp(uint64_t f_val, int e_val) : f(f_val), e(e_val) {} + + // Constructs fp from an IEEE754 floating-point number. + template FMT_CONSTEXPR basic_fp(Float n) { assign(n); } + + // Assigns n to this and return true iff predecessor is closer than successor. + template ::value)> + FMT_CONSTEXPR auto assign(Float n) -> bool { + static_assert(std::numeric_limits::digits <= 113, "unsupported FP"); + // Assume Float is in the format [sign][exponent][significand]. + using carrier_uint = typename dragonbox::float_info::carrier_uint; + const auto num_float_significand_bits = + detail::num_significand_bits(); + const auto implicit_bit = carrier_uint(1) << num_float_significand_bits; + const auto significand_mask = implicit_bit - 1; + auto u = bit_cast(n); + f = static_cast(u & significand_mask); + auto biased_e = static_cast((u & exponent_mask()) >> + num_float_significand_bits); + // The predecessor is closer if n is a normalized power of 2 (f == 0) + // other than the smallest normalized number (biased_e > 1). + auto is_predecessor_closer = f == 0 && biased_e > 1; + if (biased_e == 0) + biased_e = 1; // Subnormals use biased exponent 1 (min exponent). + else if (has_implicit_bit()) + f += static_cast(implicit_bit); + e = biased_e - exponent_bias() - num_float_significand_bits; + if (!has_implicit_bit()) ++e; + return is_predecessor_closer; + } + + template ::value)> + FMT_CONSTEXPR auto assign(Float n) -> bool { + static_assert(std::numeric_limits::is_iec559, "unsupported FP"); + return assign(static_cast(n)); + } +}; + +using fp = basic_fp; + +// Normalizes the value converted from double and multiplied by (1 << SHIFT). +template +FMT_CONSTEXPR auto normalize(basic_fp value) -> basic_fp { + // Handle subnormals. + const auto implicit_bit = F(1) << num_significand_bits(); + const auto shifted_implicit_bit = implicit_bit << SHIFT; + while ((value.f & shifted_implicit_bit) == 0) { + value.f <<= 1; + --value.e; + } + // Subtract 1 to account for hidden bit. + const auto offset = basic_fp::num_significand_bits - + num_significand_bits() - SHIFT - 1; + value.f <<= offset; + value.e -= offset; + return value; +} + +// Computes lhs * rhs / pow(2, 64) rounded to nearest with half-up tie breaking. +FMT_CONSTEXPR inline auto multiply(uint64_t lhs, uint64_t rhs) -> uint64_t { +#if FMT_USE_INT128 + auto product = static_cast<__uint128_t>(lhs) * rhs; + auto f = static_cast(product >> 64); + return (static_cast(product) & (1ULL << 63)) != 0 ? f + 1 : f; +#else + // Multiply 32-bit parts of significands. + uint64_t mask = (1ULL << 32) - 1; + uint64_t a = lhs >> 32, b = lhs & mask; + uint64_t c = rhs >> 32, d = rhs & mask; + uint64_t ac = a * c, bc = b * c, ad = a * d, bd = b * d; + // Compute mid 64-bit of result and round. + uint64_t mid = (bd >> 32) + (ad & mask) + (bc & mask) + (1U << 31); + return ac + (ad >> 32) + (bc >> 32) + (mid >> 32); +#endif +} + +FMT_CONSTEXPR inline auto operator*(fp x, fp y) -> fp { + return {multiply(x.f, y.f), x.e + y.e + 64}; +} + +template () == num_bits()> +using convert_float_result = + conditional_t::value || doublish, double, T>; + +template +constexpr auto convert_float(T value) -> convert_float_result { + return static_cast>(value); +} + +template +FMT_NOINLINE FMT_CONSTEXPR auto fill(OutputIt it, size_t n, + const fill_t& fill) -> OutputIt { + auto fill_size = fill.size(); + if (fill_size == 1) return detail::fill_n(it, n, fill[0]); + auto data = fill.data(); + for (size_t i = 0; i < n; ++i) + it = copy_str(data, data + fill_size, it); + return it; +} + +// Writes the output of f, padded according to format specifications in specs. +// size: output size in code units. +// width: output display width in (terminal) column positions. +template +FMT_CONSTEXPR auto write_padded(OutputIt out, const format_specs& specs, + size_t size, size_t width, F&& f) -> OutputIt { + static_assert(align == align::left || align == align::right, ""); + unsigned spec_width = to_unsigned(specs.width); + size_t padding = spec_width > width ? spec_width - width : 0; + // Shifts are encoded as string literals because static constexpr is not + // supported in constexpr functions. + auto* shifts = align == align::left ? "\x1f\x1f\x00\x01" : "\x00\x1f\x00\x01"; + size_t left_padding = padding >> shifts[specs.align]; + size_t right_padding = padding - left_padding; + auto it = reserve(out, size + padding * specs.fill.size()); + if (left_padding != 0) it = fill(it, left_padding, specs.fill); + it = f(it); + if (right_padding != 0) it = fill(it, right_padding, specs.fill); + return base_iterator(out, it); +} + +template +constexpr auto write_padded(OutputIt out, const format_specs& specs, + size_t size, F&& f) -> OutputIt { + return write_padded(out, specs, size, size, f); +} + +template +FMT_CONSTEXPR auto write_bytes(OutputIt out, string_view bytes, + const format_specs& specs) -> OutputIt { + return write_padded( + out, specs, bytes.size(), [bytes](reserve_iterator it) { + const char* data = bytes.data(); + return copy_str(data, data + bytes.size(), it); + }); +} + +template +auto write_ptr(OutputIt out, UIntPtr value, const format_specs* specs) + -> OutputIt { + int num_digits = count_digits<4>(value); + auto size = to_unsigned(num_digits) + size_t(2); + auto write = [=](reserve_iterator it) { + *it++ = static_cast('0'); + *it++ = static_cast('x'); + return format_uint<4, Char>(it, value, num_digits); + }; + return specs ? write_padded(out, *specs, size, write) + : base_iterator(out, write(reserve(out, size))); +} + +// Returns true iff the code point cp is printable. +FMT_API auto is_printable(uint32_t cp) -> bool; + +inline auto needs_escape(uint32_t cp) -> bool { + return cp < 0x20 || cp == 0x7f || cp == '"' || cp == '\\' || + !is_printable(cp); +} + +template struct find_escape_result { + const Char* begin; + const Char* end; + uint32_t cp; +}; + +template +using make_unsigned_char = + typename conditional_t::value, + std::make_unsigned, + type_identity>::type; + +template +auto find_escape(const Char* begin, const Char* end) + -> find_escape_result { + for (; begin != end; ++begin) { + uint32_t cp = static_cast>(*begin); + if (const_check(sizeof(Char) == 1) && cp >= 0x80) continue; + if (needs_escape(cp)) return {begin, begin + 1, cp}; + } + return {begin, nullptr, 0}; +} + +inline auto find_escape(const char* begin, const char* end) + -> find_escape_result { + if (!is_utf8()) return find_escape(begin, end); + auto result = find_escape_result{end, nullptr, 0}; + for_each_codepoint(string_view(begin, to_unsigned(end - begin)), + [&](uint32_t cp, string_view sv) { + if (needs_escape(cp)) { + result = {sv.begin(), sv.end(), cp}; + return false; + } + return true; + }); + return result; +} + +#define FMT_STRING_IMPL(s, base, explicit) \ + [] { \ + /* Use the hidden visibility as a workaround for a GCC bug (#1973). */ \ + /* Use a macro-like name to avoid shadowing warnings. */ \ + struct FMT_VISIBILITY("hidden") FMT_COMPILE_STRING : base { \ + using char_type FMT_MAYBE_UNUSED = fmt::remove_cvref_t; \ + FMT_MAYBE_UNUSED FMT_CONSTEXPR explicit \ + operator fmt::basic_string_view() const { \ + return fmt::detail_exported::compile_string_to_view(s); \ + } \ + }; \ + return FMT_COMPILE_STRING(); \ + }() + +/** + \rst + Constructs a compile-time format string from a string literal *s*. + + **Example**:: + + // A compile-time error because 'd' is an invalid specifier for strings. + std::string s = fmt::format(FMT_STRING("{:d}"), "foo"); + \endrst + */ +#define FMT_STRING(s) FMT_STRING_IMPL(s, fmt::detail::compile_string, ) + +template +auto write_codepoint(OutputIt out, char prefix, uint32_t cp) -> OutputIt { + *out++ = static_cast('\\'); + *out++ = static_cast(prefix); + Char buf[width]; + fill_n(buf, width, static_cast('0')); + format_uint<4>(buf, cp, width); + return copy_str(buf, buf + width, out); +} + +template +auto write_escaped_cp(OutputIt out, const find_escape_result& escape) + -> OutputIt { + auto c = static_cast(escape.cp); + switch (escape.cp) { + case '\n': + *out++ = static_cast('\\'); + c = static_cast('n'); + break; + case '\r': + *out++ = static_cast('\\'); + c = static_cast('r'); + break; + case '\t': + *out++ = static_cast('\\'); + c = static_cast('t'); + break; + case '"': + FMT_FALLTHROUGH; + case '\'': + FMT_FALLTHROUGH; + case '\\': + *out++ = static_cast('\\'); + break; + default: + if (escape.cp < 0x100) { + return write_codepoint<2, Char>(out, 'x', escape.cp); + } + if (escape.cp < 0x10000) { + return write_codepoint<4, Char>(out, 'u', escape.cp); + } + if (escape.cp < 0x110000) { + return write_codepoint<8, Char>(out, 'U', escape.cp); + } + for (Char escape_char : basic_string_view( + escape.begin, to_unsigned(escape.end - escape.begin))) { + out = write_codepoint<2, Char>(out, 'x', + static_cast(escape_char) & 0xFF); + } + return out; + } + *out++ = c; + return out; +} + +template +auto write_escaped_string(OutputIt out, basic_string_view str) + -> OutputIt { + *out++ = static_cast('"'); + auto begin = str.begin(), end = str.end(); + do { + auto escape = find_escape(begin, end); + out = copy_str(begin, escape.begin, out); + begin = escape.end; + if (!begin) break; + out = write_escaped_cp(out, escape); + } while (begin != end); + *out++ = static_cast('"'); + return out; +} + +template +auto write_escaped_char(OutputIt out, Char v) -> OutputIt { + Char v_array[1] = {v}; + *out++ = static_cast('\''); + if ((needs_escape(static_cast(v)) && v != static_cast('"')) || + v == static_cast('\'')) { + out = write_escaped_cp(out, + find_escape_result{v_array, v_array + 1, + static_cast(v)}); + } else { + *out++ = v; + } + *out++ = static_cast('\''); + return out; +} + +template +FMT_CONSTEXPR auto write_char(OutputIt out, Char value, + const format_specs& specs) -> OutputIt { + bool is_debug = specs.type == presentation_type::debug; + return write_padded(out, specs, 1, [=](reserve_iterator it) { + if (is_debug) return write_escaped_char(it, value); + *it++ = value; + return it; + }); +} +template +FMT_CONSTEXPR auto write(OutputIt out, Char value, + const format_specs& specs, locale_ref loc = {}) + -> OutputIt { + // char is formatted as unsigned char for consistency across platforms. + using unsigned_type = + conditional_t::value, unsigned char, unsigned>; + return check_char_specs(specs) + ? write_char(out, value, specs) + : write(out, static_cast(value), specs, loc); +} + +// Data for write_int that doesn't depend on output iterator type. It is used to +// avoid template code bloat. +template struct write_int_data { + size_t size; + size_t padding; + + FMT_CONSTEXPR write_int_data(int num_digits, unsigned prefix, + const format_specs& specs) + : size((prefix >> 24) + to_unsigned(num_digits)), padding(0) { + if (specs.align == align::numeric) { + auto width = to_unsigned(specs.width); + if (width > size) { + padding = width - size; + size = width; + } + } else if (specs.precision > num_digits) { + size = (prefix >> 24) + to_unsigned(specs.precision); + padding = to_unsigned(specs.precision - num_digits); + } + } +}; + +// Writes an integer in the format +// +// where are written by write_digits(it). +// prefix contains chars in three lower bytes and the size in the fourth byte. +template +FMT_CONSTEXPR FMT_INLINE auto write_int(OutputIt out, int num_digits, + unsigned prefix, + const format_specs& specs, + W write_digits) -> OutputIt { + // Slightly faster check for specs.width == 0 && specs.precision == -1. + if ((specs.width | (specs.precision + 1)) == 0) { + auto it = reserve(out, to_unsigned(num_digits) + (prefix >> 24)); + if (prefix != 0) { + for (unsigned p = prefix & 0xffffff; p != 0; p >>= 8) + *it++ = static_cast(p & 0xff); + } + return base_iterator(out, write_digits(it)); + } + auto data = write_int_data(num_digits, prefix, specs); + return write_padded( + out, specs, data.size, [=](reserve_iterator it) { + for (unsigned p = prefix & 0xffffff; p != 0; p >>= 8) + *it++ = static_cast(p & 0xff); + it = detail::fill_n(it, data.padding, static_cast('0')); + return write_digits(it); + }); +} + +template class digit_grouping { + private: + std::string grouping_; + std::basic_string thousands_sep_; + + struct next_state { + std::string::const_iterator group; + int pos; + }; + auto initial_state() const -> next_state { return {grouping_.begin(), 0}; } + + // Returns the next digit group separator position. + auto next(next_state& state) const -> int { + if (thousands_sep_.empty()) return max_value(); + if (state.group == grouping_.end()) return state.pos += grouping_.back(); + if (*state.group <= 0 || *state.group == max_value()) + return max_value(); + state.pos += *state.group++; + return state.pos; + } + + public: + explicit digit_grouping(locale_ref loc, bool localized = true) { + if (!localized) return; + auto sep = thousands_sep(loc); + grouping_ = sep.grouping; + if (sep.thousands_sep) thousands_sep_.assign(1, sep.thousands_sep); + } + digit_grouping(std::string grouping, std::basic_string sep) + : grouping_(std::move(grouping)), thousands_sep_(std::move(sep)) {} + + auto has_separator() const -> bool { return !thousands_sep_.empty(); } + + auto count_separators(int num_digits) const -> int { + int count = 0; + auto state = initial_state(); + while (num_digits > next(state)) ++count; + return count; + } + + // Applies grouping to digits and write the output to out. + template + auto apply(Out out, basic_string_view digits) const -> Out { + auto num_digits = static_cast(digits.size()); + auto separators = basic_memory_buffer(); + separators.push_back(0); + auto state = initial_state(); + while (int i = next(state)) { + if (i >= num_digits) break; + separators.push_back(i); + } + for (int i = 0, sep_index = static_cast(separators.size() - 1); + i < num_digits; ++i) { + if (num_digits - i == separators[sep_index]) { + out = + copy_str(thousands_sep_.data(), + thousands_sep_.data() + thousands_sep_.size(), out); + --sep_index; + } + *out++ = static_cast(digits[to_unsigned(i)]); + } + return out; + } +}; + +FMT_CONSTEXPR inline void prefix_append(unsigned& prefix, unsigned value) { + prefix |= prefix != 0 ? value << 8 : value; + prefix += (1u + (value > 0xff ? 1 : 0)) << 24; +} + +// Writes a decimal integer with digit grouping. +template +auto write_int(OutputIt out, UInt value, unsigned prefix, + const format_specs& specs, + const digit_grouping& grouping) -> OutputIt { + static_assert(std::is_same, UInt>::value, ""); + int num_digits = 0; + auto buffer = memory_buffer(); + switch (specs.type) { + case presentation_type::none: + case presentation_type::dec: { + num_digits = count_digits(value); + format_decimal(appender(buffer), value, num_digits); + break; + } + case presentation_type::hex_lower: + case presentation_type::hex_upper: { + bool upper = specs.type == presentation_type::hex_upper; + if (specs.alt) + prefix_append(prefix, unsigned(upper ? 'X' : 'x') << 8 | '0'); + num_digits = count_digits<4>(value); + format_uint<4, char>(appender(buffer), value, num_digits, upper); + break; + } + case presentation_type::bin_lower: + case presentation_type::bin_upper: { + bool upper = specs.type == presentation_type::bin_upper; + if (specs.alt) + prefix_append(prefix, unsigned(upper ? 'B' : 'b') << 8 | '0'); + num_digits = count_digits<1>(value); + format_uint<1, char>(appender(buffer), value, num_digits); + break; + } + case presentation_type::oct: { + num_digits = count_digits<3>(value); + // Octal prefix '0' is counted as a digit, so only add it if precision + // is not greater than the number of digits. + if (specs.alt && specs.precision <= num_digits && value != 0) + prefix_append(prefix, '0'); + format_uint<3, char>(appender(buffer), value, num_digits); + break; + } + case presentation_type::chr: + return write_char(out, static_cast(value), specs); + default: + throw_format_error("invalid format specifier"); + } + + unsigned size = (prefix != 0 ? prefix >> 24 : 0) + to_unsigned(num_digits) + + to_unsigned(grouping.count_separators(num_digits)); + return write_padded( + out, specs, size, size, [&](reserve_iterator it) { + for (unsigned p = prefix & 0xffffff; p != 0; p >>= 8) + *it++ = static_cast(p & 0xff); + return grouping.apply(it, string_view(buffer.data(), buffer.size())); + }); +} + +// Writes a localized value. +FMT_API auto write_loc(appender out, loc_value value, + const format_specs<>& specs, locale_ref loc) -> bool; +template +inline auto write_loc(OutputIt, loc_value, const format_specs&, + locale_ref) -> bool { + return false; +} + +template struct write_int_arg { + UInt abs_value; + unsigned prefix; +}; + +template +FMT_CONSTEXPR auto make_write_int_arg(T value, sign_t sign) + -> write_int_arg> { + auto prefix = 0u; + auto abs_value = static_cast>(value); + if (is_negative(value)) { + prefix = 0x01000000 | '-'; + abs_value = 0 - abs_value; + } else { + constexpr const unsigned prefixes[4] = {0, 0, 0x1000000u | '+', + 0x1000000u | ' '}; + prefix = prefixes[sign]; + } + return {abs_value, prefix}; +} + +template struct loc_writer { + buffer_appender out; + const format_specs& specs; + std::basic_string sep; + std::string grouping; + std::basic_string decimal_point; + + template ::value)> + auto operator()(T value) -> bool { + auto arg = make_write_int_arg(value, specs.sign); + write_int(out, static_cast>(arg.abs_value), arg.prefix, + specs, digit_grouping(grouping, sep)); + return true; + } + + template ::value)> + auto operator()(T) -> bool { + return false; + } +}; + +template +FMT_CONSTEXPR FMT_INLINE auto write_int(OutputIt out, write_int_arg arg, + const format_specs& specs, + locale_ref) -> OutputIt { + static_assert(std::is_same>::value, ""); + auto abs_value = arg.abs_value; + auto prefix = arg.prefix; + switch (specs.type) { + case presentation_type::none: + case presentation_type::dec: { + auto num_digits = count_digits(abs_value); + return write_int( + out, num_digits, prefix, specs, [=](reserve_iterator it) { + return format_decimal(it, abs_value, num_digits).end; + }); + } + case presentation_type::hex_lower: + case presentation_type::hex_upper: { + bool upper = specs.type == presentation_type::hex_upper; + if (specs.alt) + prefix_append(prefix, unsigned(upper ? 'X' : 'x') << 8 | '0'); + int num_digits = count_digits<4>(abs_value); + return write_int( + out, num_digits, prefix, specs, [=](reserve_iterator it) { + return format_uint<4, Char>(it, abs_value, num_digits, upper); + }); + } + case presentation_type::bin_lower: + case presentation_type::bin_upper: { + bool upper = specs.type == presentation_type::bin_upper; + if (specs.alt) + prefix_append(prefix, unsigned(upper ? 'B' : 'b') << 8 | '0'); + int num_digits = count_digits<1>(abs_value); + return write_int(out, num_digits, prefix, specs, + [=](reserve_iterator it) { + return format_uint<1, Char>(it, abs_value, num_digits); + }); + } + case presentation_type::oct: { + int num_digits = count_digits<3>(abs_value); + // Octal prefix '0' is counted as a digit, so only add it if precision + // is not greater than the number of digits. + if (specs.alt && specs.precision <= num_digits && abs_value != 0) + prefix_append(prefix, '0'); + return write_int(out, num_digits, prefix, specs, + [=](reserve_iterator it) { + return format_uint<3, Char>(it, abs_value, num_digits); + }); + } + case presentation_type::chr: + return write_char(out, static_cast(abs_value), specs); + default: + throw_format_error("invalid format specifier"); + } + return out; +} +template +FMT_CONSTEXPR FMT_NOINLINE auto write_int_noinline( + OutputIt out, write_int_arg arg, const format_specs& specs, + locale_ref loc) -> OutputIt { + return write_int(out, arg, specs, loc); +} +template ::value && + !std::is_same::value && + std::is_same>::value)> +FMT_CONSTEXPR FMT_INLINE auto write(OutputIt out, T value, + const format_specs& specs, + locale_ref loc) -> OutputIt { + if (specs.localized && write_loc(out, value, specs, loc)) return out; + return write_int_noinline(out, make_write_int_arg(value, specs.sign), specs, + loc); +} +// An inlined version of write used in format string compilation. +template ::value && + !std::is_same::value && + !std::is_same>::value)> +FMT_CONSTEXPR FMT_INLINE auto write(OutputIt out, T value, + const format_specs& specs, + locale_ref loc) -> OutputIt { + if (specs.localized && write_loc(out, value, specs, loc)) return out; + return write_int(out, make_write_int_arg(value, specs.sign), specs, loc); +} + +// An output iterator that counts the number of objects written to it and +// discards them. +class counting_iterator { + private: + size_t count_; + + public: + using iterator_category = std::output_iterator_tag; + using difference_type = std::ptrdiff_t; + using pointer = void; + using reference = void; + FMT_UNCHECKED_ITERATOR(counting_iterator); + + struct value_type { + template FMT_CONSTEXPR void operator=(const T&) {} + }; + + FMT_CONSTEXPR counting_iterator() : count_(0) {} + + FMT_CONSTEXPR auto count() const -> size_t { return count_; } + + FMT_CONSTEXPR auto operator++() -> counting_iterator& { + ++count_; + return *this; + } + FMT_CONSTEXPR auto operator++(int) -> counting_iterator { + auto it = *this; + ++*this; + return it; + } + + FMT_CONSTEXPR friend auto operator+(counting_iterator it, difference_type n) + -> counting_iterator { + it.count_ += static_cast(n); + return it; + } + + FMT_CONSTEXPR auto operator*() const -> value_type { return {}; } +}; + +template +FMT_CONSTEXPR auto write(OutputIt out, basic_string_view s, + const format_specs& specs) -> OutputIt { + auto data = s.data(); + auto size = s.size(); + if (specs.precision >= 0 && to_unsigned(specs.precision) < size) + size = code_point_index(s, to_unsigned(specs.precision)); + bool is_debug = specs.type == presentation_type::debug; + size_t width = 0; + if (specs.width != 0) { + if (is_debug) + width = write_escaped_string(counting_iterator{}, s).count(); + else + width = compute_width(basic_string_view(data, size)); + } + return write_padded(out, specs, size, width, + [=](reserve_iterator it) { + if (is_debug) return write_escaped_string(it, s); + return copy_str(data, data + size, it); + }); +} +template +FMT_CONSTEXPR auto write(OutputIt out, + basic_string_view> s, + const format_specs& specs, locale_ref) + -> OutputIt { + return write(out, s, specs); +} +template +FMT_CONSTEXPR auto write(OutputIt out, const Char* s, + const format_specs& specs, locale_ref) + -> OutputIt { + if (specs.type == presentation_type::pointer) + return write_ptr(out, bit_cast(s), &specs); + if (!s) throw_format_error("string pointer is null"); + return write(out, basic_string_view(s), specs, {}); +} + +template ::value && + !std::is_same::value && + !std::is_same::value)> +FMT_CONSTEXPR auto write(OutputIt out, T value) -> OutputIt { + auto abs_value = static_cast>(value); + bool negative = is_negative(value); + // Don't do -abs_value since it trips unsigned-integer-overflow sanitizer. + if (negative) abs_value = ~abs_value + 1; + int num_digits = count_digits(abs_value); + auto size = (negative ? 1 : 0) + static_cast(num_digits); + auto it = reserve(out, size); + if (auto ptr = to_pointer(it, size)) { + if (negative) *ptr++ = static_cast('-'); + format_decimal(ptr, abs_value, num_digits); + return out; + } + if (negative) *it++ = static_cast('-'); + it = format_decimal(it, abs_value, num_digits).end; + return base_iterator(out, it); +} + +// DEPRECATED! +template +FMT_CONSTEXPR auto parse_align(const Char* begin, const Char* end, + format_specs& specs) -> const Char* { + FMT_ASSERT(begin != end, ""); + auto align = align::none; + auto p = begin + code_point_length(begin); + if (end - p <= 0) p = begin; + for (;;) { + switch (to_ascii(*p)) { + case '<': + align = align::left; + break; + case '>': + align = align::right; + break; + case '^': + align = align::center; + break; + } + if (align != align::none) { + if (p != begin) { + auto c = *begin; + if (c == '}') return begin; + if (c == '{') { + throw_format_error("invalid fill character '{'"); + return begin; + } + specs.fill = {begin, to_unsigned(p - begin)}; + begin = p + 1; + } else { + ++begin; + } + break; + } else if (p == begin) { + break; + } + p = begin; + } + specs.align = align; + return begin; +} + +// A floating-point presentation format. +enum class float_format : unsigned char { + general, // General: exponent notation or fixed point based on magnitude. + exp, // Exponent notation with the default precision of 6, e.g. 1.2e-3. + fixed, // Fixed point with the default precision of 6, e.g. 0.0012. + hex +}; + +struct float_specs { + int precision; + float_format format : 8; + sign_t sign : 8; + bool upper : 1; + bool locale : 1; + bool binary32 : 1; + bool showpoint : 1; +}; + +template +FMT_CONSTEXPR auto parse_float_type_spec(const format_specs& specs) + -> float_specs { + auto result = float_specs(); + result.showpoint = specs.alt; + result.locale = specs.localized; + switch (specs.type) { + case presentation_type::none: + result.format = float_format::general; + break; + case presentation_type::general_upper: + result.upper = true; + FMT_FALLTHROUGH; + case presentation_type::general_lower: + result.format = float_format::general; + break; + case presentation_type::exp_upper: + result.upper = true; + FMT_FALLTHROUGH; + case presentation_type::exp_lower: + result.format = float_format::exp; + result.showpoint |= specs.precision != 0; + break; + case presentation_type::fixed_upper: + result.upper = true; + FMT_FALLTHROUGH; + case presentation_type::fixed_lower: + result.format = float_format::fixed; + result.showpoint |= specs.precision != 0; + break; + case presentation_type::hexfloat_upper: + result.upper = true; + FMT_FALLTHROUGH; + case presentation_type::hexfloat_lower: + result.format = float_format::hex; + break; + default: + throw_format_error("invalid format specifier"); + break; + } + return result; +} + +template +FMT_CONSTEXPR20 auto write_nonfinite(OutputIt out, bool isnan, + format_specs specs, + const float_specs& fspecs) -> OutputIt { + auto str = + isnan ? (fspecs.upper ? "NAN" : "nan") : (fspecs.upper ? "INF" : "inf"); + constexpr size_t str_size = 3; + auto sign = fspecs.sign; + auto size = str_size + (sign ? 1 : 0); + // Replace '0'-padding with space for non-finite values. + const bool is_zero_fill = + specs.fill.size() == 1 && *specs.fill.data() == static_cast('0'); + if (is_zero_fill) specs.fill[0] = static_cast(' '); + return write_padded(out, specs, size, [=](reserve_iterator it) { + if (sign) *it++ = detail::sign(sign); + return copy_str(str, str + str_size, it); + }); +} + +// A decimal floating-point number significand * pow(10, exp). +struct big_decimal_fp { + const char* significand; + int significand_size; + int exponent; +}; + +constexpr auto get_significand_size(const big_decimal_fp& f) -> int { + return f.significand_size; +} +template +inline auto get_significand_size(const dragonbox::decimal_fp& f) -> int { + return count_digits(f.significand); +} + +template +constexpr auto write_significand(OutputIt out, const char* significand, + int significand_size) -> OutputIt { + return copy_str(significand, significand + significand_size, out); +} +template +inline auto write_significand(OutputIt out, UInt significand, + int significand_size) -> OutputIt { + return format_decimal(out, significand, significand_size).end; +} +template +FMT_CONSTEXPR20 auto write_significand(OutputIt out, T significand, + int significand_size, int exponent, + const Grouping& grouping) -> OutputIt { + if (!grouping.has_separator()) { + out = write_significand(out, significand, significand_size); + return detail::fill_n(out, exponent, static_cast('0')); + } + auto buffer = memory_buffer(); + write_significand(appender(buffer), significand, significand_size); + detail::fill_n(appender(buffer), exponent, '0'); + return grouping.apply(out, string_view(buffer.data(), buffer.size())); +} + +template ::value)> +inline auto write_significand(Char* out, UInt significand, int significand_size, + int integral_size, Char decimal_point) -> Char* { + if (!decimal_point) + return format_decimal(out, significand, significand_size).end; + out += significand_size + 1; + Char* end = out; + int floating_size = significand_size - integral_size; + for (int i = floating_size / 2; i > 0; --i) { + out -= 2; + copy2(out, digits2(static_cast(significand % 100))); + significand /= 100; + } + if (floating_size % 2 != 0) { + *--out = static_cast('0' + significand % 10); + significand /= 10; + } + *--out = decimal_point; + format_decimal(out - integral_size, significand, integral_size); + return end; +} + +template >::value)> +inline auto write_significand(OutputIt out, UInt significand, + int significand_size, int integral_size, + Char decimal_point) -> OutputIt { + // Buffer is large enough to hold digits (digits10 + 1) and a decimal point. + Char buffer[digits10() + 2]; + auto end = write_significand(buffer, significand, significand_size, + integral_size, decimal_point); + return detail::copy_str_noinline(buffer, end, out); +} + +template +FMT_CONSTEXPR auto write_significand(OutputIt out, const char* significand, + int significand_size, int integral_size, + Char decimal_point) -> OutputIt { + out = detail::copy_str_noinline(significand, + significand + integral_size, out); + if (!decimal_point) return out; + *out++ = decimal_point; + return detail::copy_str_noinline(significand + integral_size, + significand + significand_size, out); +} + +template +FMT_CONSTEXPR20 auto write_significand(OutputIt out, T significand, + int significand_size, int integral_size, + Char decimal_point, + const Grouping& grouping) -> OutputIt { + if (!grouping.has_separator()) { + return write_significand(out, significand, significand_size, integral_size, + decimal_point); + } + auto buffer = basic_memory_buffer(); + write_significand(buffer_appender(buffer), significand, + significand_size, integral_size, decimal_point); + grouping.apply( + out, basic_string_view(buffer.data(), to_unsigned(integral_size))); + return detail::copy_str_noinline(buffer.data() + integral_size, + buffer.end(), out); +} + +template > +FMT_CONSTEXPR20 auto do_write_float(OutputIt out, const DecimalFP& f, + const format_specs& specs, + float_specs fspecs, locale_ref loc) + -> OutputIt { + auto significand = f.significand; + int significand_size = get_significand_size(f); + const Char zero = static_cast('0'); + auto sign = fspecs.sign; + size_t size = to_unsigned(significand_size) + (sign ? 1 : 0); + using iterator = reserve_iterator; + + Char decimal_point = + fspecs.locale ? detail::decimal_point(loc) : static_cast('.'); + + int output_exp = f.exponent + significand_size - 1; + auto use_exp_format = [=]() { + if (fspecs.format == float_format::exp) return true; + if (fspecs.format != float_format::general) return false; + // Use the fixed notation if the exponent is in [exp_lower, exp_upper), + // e.g. 0.0001 instead of 1e-04. Otherwise use the exponent notation. + const int exp_lower = -4, exp_upper = 16; + return output_exp < exp_lower || + output_exp >= (fspecs.precision > 0 ? fspecs.precision : exp_upper); + }; + if (use_exp_format()) { + int num_zeros = 0; + if (fspecs.showpoint) { + num_zeros = fspecs.precision - significand_size; + if (num_zeros < 0) num_zeros = 0; + size += to_unsigned(num_zeros); + } else if (significand_size == 1) { + decimal_point = Char(); + } + auto abs_output_exp = output_exp >= 0 ? output_exp : -output_exp; + int exp_digits = 2; + if (abs_output_exp >= 100) exp_digits = abs_output_exp >= 1000 ? 4 : 3; + + size += to_unsigned((decimal_point ? 1 : 0) + 2 + exp_digits); + char exp_char = fspecs.upper ? 'E' : 'e'; + auto write = [=](iterator it) { + if (sign) *it++ = detail::sign(sign); + // Insert a decimal point after the first digit and add an exponent. + it = write_significand(it, significand, significand_size, 1, + decimal_point); + if (num_zeros > 0) it = detail::fill_n(it, num_zeros, zero); + *it++ = static_cast(exp_char); + return write_exponent(output_exp, it); + }; + return specs.width > 0 ? write_padded(out, specs, size, write) + : base_iterator(out, write(reserve(out, size))); + } + + int exp = f.exponent + significand_size; + if (f.exponent >= 0) { + // 1234e5 -> 123400000[.0+] + size += to_unsigned(f.exponent); + int num_zeros = fspecs.precision - exp; + abort_fuzzing_if(num_zeros > 5000); + if (fspecs.showpoint) { + ++size; + if (num_zeros <= 0 && fspecs.format != float_format::fixed) num_zeros = 0; + if (num_zeros > 0) size += to_unsigned(num_zeros); + } + auto grouping = Grouping(loc, fspecs.locale); + size += to_unsigned(grouping.count_separators(exp)); + return write_padded(out, specs, size, [&](iterator it) { + if (sign) *it++ = detail::sign(sign); + it = write_significand(it, significand, significand_size, + f.exponent, grouping); + if (!fspecs.showpoint) return it; + *it++ = decimal_point; + return num_zeros > 0 ? detail::fill_n(it, num_zeros, zero) : it; + }); + } else if (exp > 0) { + // 1234e-2 -> 12.34[0+] + int num_zeros = fspecs.showpoint ? fspecs.precision - significand_size : 0; + size += 1 + to_unsigned(num_zeros > 0 ? num_zeros : 0); + auto grouping = Grouping(loc, fspecs.locale); + size += to_unsigned(grouping.count_separators(exp)); + return write_padded(out, specs, size, [&](iterator it) { + if (sign) *it++ = detail::sign(sign); + it = write_significand(it, significand, significand_size, exp, + decimal_point, grouping); + return num_zeros > 0 ? detail::fill_n(it, num_zeros, zero) : it; + }); + } + // 1234e-6 -> 0.001234 + int num_zeros = -exp; + if (significand_size == 0 && fspecs.precision >= 0 && + fspecs.precision < num_zeros) { + num_zeros = fspecs.precision; + } + bool pointy = num_zeros != 0 || significand_size != 0 || fspecs.showpoint; + size += 1 + (pointy ? 1 : 0) + to_unsigned(num_zeros); + return write_padded(out, specs, size, [&](iterator it) { + if (sign) *it++ = detail::sign(sign); + *it++ = zero; + if (!pointy) return it; + *it++ = decimal_point; + it = detail::fill_n(it, num_zeros, zero); + return write_significand(it, significand, significand_size); + }); +} + +template class fallback_digit_grouping { + public: + constexpr fallback_digit_grouping(locale_ref, bool) {} + + constexpr auto has_separator() const -> bool { return false; } + + constexpr auto count_separators(int) const -> int { return 0; } + + template + constexpr auto apply(Out out, basic_string_view) const -> Out { + return out; + } +}; + +template +FMT_CONSTEXPR20 auto write_float(OutputIt out, const DecimalFP& f, + const format_specs& specs, + float_specs fspecs, locale_ref loc) + -> OutputIt { + if (is_constant_evaluated()) { + return do_write_float>(out, f, specs, fspecs, + loc); + } else { + return do_write_float(out, f, specs, fspecs, loc); + } +} + +template constexpr auto isnan(T value) -> bool { + return !(value >= value); // std::isnan doesn't support __float128. +} + +template +struct has_isfinite : std::false_type {}; + +template +struct has_isfinite> + : std::true_type {}; + +template ::value&& + has_isfinite::value)> +FMT_CONSTEXPR20 auto isfinite(T value) -> bool { + constexpr T inf = T(std::numeric_limits::infinity()); + if (is_constant_evaluated()) + return !detail::isnan(value) && value < inf && value > -inf; + return std::isfinite(value); +} +template ::value)> +FMT_CONSTEXPR auto isfinite(T value) -> bool { + T inf = T(std::numeric_limits::infinity()); + // std::isfinite doesn't support __float128. + return !detail::isnan(value) && value < inf && value > -inf; +} + +template ::value)> +FMT_INLINE FMT_CONSTEXPR bool signbit(T value) { + if (is_constant_evaluated()) { +#ifdef __cpp_if_constexpr + if constexpr (std::numeric_limits::is_iec559) { + auto bits = detail::bit_cast(static_cast(value)); + return (bits >> (num_bits() - 1)) != 0; + } +#endif + } + return std::signbit(static_cast(value)); +} + +inline FMT_CONSTEXPR20 void adjust_precision(int& precision, int exp10) { + // Adjust fixed precision by exponent because it is relative to decimal + // point. + if (exp10 > 0 && precision > max_value() - exp10) + FMT_THROW(format_error("number is too big")); + precision += exp10; +} + +class bigint { + private: + // A bigint is stored as an array of bigits (big digits), with bigit at index + // 0 being the least significant one. + using bigit = uint32_t; + using double_bigit = uint64_t; + enum { bigits_capacity = 32 }; + basic_memory_buffer bigits_; + int exp_; + + FMT_CONSTEXPR20 auto operator[](int index) const -> bigit { + return bigits_[to_unsigned(index)]; + } + FMT_CONSTEXPR20 auto operator[](int index) -> bigit& { + return bigits_[to_unsigned(index)]; + } + + static constexpr const int bigit_bits = num_bits(); + + friend struct formatter; + + FMT_CONSTEXPR20 void subtract_bigits(int index, bigit other, bigit& borrow) { + auto result = static_cast((*this)[index]) - other - borrow; + (*this)[index] = static_cast(result); + borrow = static_cast(result >> (bigit_bits * 2 - 1)); + } + + FMT_CONSTEXPR20 void remove_leading_zeros() { + int num_bigits = static_cast(bigits_.size()) - 1; + while (num_bigits > 0 && (*this)[num_bigits] == 0) --num_bigits; + bigits_.resize(to_unsigned(num_bigits + 1)); + } + + // Computes *this -= other assuming aligned bigints and *this >= other. + FMT_CONSTEXPR20 void subtract_aligned(const bigint& other) { + FMT_ASSERT(other.exp_ >= exp_, "unaligned bigints"); + FMT_ASSERT(compare(*this, other) >= 0, ""); + bigit borrow = 0; + int i = other.exp_ - exp_; + for (size_t j = 0, n = other.bigits_.size(); j != n; ++i, ++j) + subtract_bigits(i, other.bigits_[j], borrow); + while (borrow > 0) subtract_bigits(i, 0, borrow); + remove_leading_zeros(); + } + + FMT_CONSTEXPR20 void multiply(uint32_t value) { + const double_bigit wide_value = value; + bigit carry = 0; + for (size_t i = 0, n = bigits_.size(); i < n; ++i) { + double_bigit result = bigits_[i] * wide_value + carry; + bigits_[i] = static_cast(result); + carry = static_cast(result >> bigit_bits); + } + if (carry != 0) bigits_.push_back(carry); + } + + template ::value || + std::is_same::value)> + FMT_CONSTEXPR20 void multiply(UInt value) { + using half_uint = + conditional_t::value, uint64_t, uint32_t>; + const int shift = num_bits() - bigit_bits; + const UInt lower = static_cast(value); + const UInt upper = value >> num_bits(); + UInt carry = 0; + for (size_t i = 0, n = bigits_.size(); i < n; ++i) { + UInt result = lower * bigits_[i] + static_cast(carry); + carry = (upper * bigits_[i] << shift) + (result >> bigit_bits) + + (carry >> bigit_bits); + bigits_[i] = static_cast(result); + } + while (carry != 0) { + bigits_.push_back(static_cast(carry)); + carry >>= bigit_bits; + } + } + + template ::value || + std::is_same::value)> + FMT_CONSTEXPR20 void assign(UInt n) { + size_t num_bigits = 0; + do { + bigits_[num_bigits++] = static_cast(n); + n >>= bigit_bits; + } while (n != 0); + bigits_.resize(num_bigits); + exp_ = 0; + } + + public: + FMT_CONSTEXPR20 bigint() : exp_(0) {} + explicit bigint(uint64_t n) { assign(n); } + + bigint(const bigint&) = delete; + void operator=(const bigint&) = delete; + + FMT_CONSTEXPR20 void assign(const bigint& other) { + auto size = other.bigits_.size(); + bigits_.resize(size); + auto data = other.bigits_.data(); + copy_str(data, data + size, bigits_.data()); + exp_ = other.exp_; + } + + template FMT_CONSTEXPR20 void operator=(Int n) { + FMT_ASSERT(n > 0, ""); + assign(uint64_or_128_t(n)); + } + + FMT_CONSTEXPR20 auto num_bigits() const -> int { + return static_cast(bigits_.size()) + exp_; + } + + FMT_NOINLINE FMT_CONSTEXPR20 auto operator<<=(int shift) -> bigint& { + FMT_ASSERT(shift >= 0, ""); + exp_ += shift / bigit_bits; + shift %= bigit_bits; + if (shift == 0) return *this; + bigit carry = 0; + for (size_t i = 0, n = bigits_.size(); i < n; ++i) { + bigit c = bigits_[i] >> (bigit_bits - shift); + bigits_[i] = (bigits_[i] << shift) + carry; + carry = c; + } + if (carry != 0) bigits_.push_back(carry); + return *this; + } + + template + FMT_CONSTEXPR20 auto operator*=(Int value) -> bigint& { + FMT_ASSERT(value > 0, ""); + multiply(uint32_or_64_or_128_t(value)); + return *this; + } + + friend FMT_CONSTEXPR20 auto compare(const bigint& lhs, const bigint& rhs) + -> int { + int num_lhs_bigits = lhs.num_bigits(), num_rhs_bigits = rhs.num_bigits(); + if (num_lhs_bigits != num_rhs_bigits) + return num_lhs_bigits > num_rhs_bigits ? 1 : -1; + int i = static_cast(lhs.bigits_.size()) - 1; + int j = static_cast(rhs.bigits_.size()) - 1; + int end = i - j; + if (end < 0) end = 0; + for (; i >= end; --i, --j) { + bigit lhs_bigit = lhs[i], rhs_bigit = rhs[j]; + if (lhs_bigit != rhs_bigit) return lhs_bigit > rhs_bigit ? 1 : -1; + } + if (i != j) return i > j ? 1 : -1; + return 0; + } + + // Returns compare(lhs1 + lhs2, rhs). + friend FMT_CONSTEXPR20 auto add_compare(const bigint& lhs1, + const bigint& lhs2, const bigint& rhs) + -> int { + auto minimum = [](int a, int b) { return a < b ? a : b; }; + auto maximum = [](int a, int b) { return a > b ? a : b; }; + int max_lhs_bigits = maximum(lhs1.num_bigits(), lhs2.num_bigits()); + int num_rhs_bigits = rhs.num_bigits(); + if (max_lhs_bigits + 1 < num_rhs_bigits) return -1; + if (max_lhs_bigits > num_rhs_bigits) return 1; + auto get_bigit = [](const bigint& n, int i) -> bigit { + return i >= n.exp_ && i < n.num_bigits() ? n[i - n.exp_] : 0; + }; + double_bigit borrow = 0; + int min_exp = minimum(minimum(lhs1.exp_, lhs2.exp_), rhs.exp_); + for (int i = num_rhs_bigits - 1; i >= min_exp; --i) { + double_bigit sum = + static_cast(get_bigit(lhs1, i)) + get_bigit(lhs2, i); + bigit rhs_bigit = get_bigit(rhs, i); + if (sum > rhs_bigit + borrow) return 1; + borrow = rhs_bigit + borrow - sum; + if (borrow > 1) return -1; + borrow <<= bigit_bits; + } + return borrow != 0 ? -1 : 0; + } + + // Assigns pow(10, exp) to this bigint. + FMT_CONSTEXPR20 void assign_pow10(int exp) { + FMT_ASSERT(exp >= 0, ""); + if (exp == 0) return *this = 1; + // Find the top bit. + int bitmask = 1; + while (exp >= bitmask) bitmask <<= 1; + bitmask >>= 1; + // pow(10, exp) = pow(5, exp) * pow(2, exp). First compute pow(5, exp) by + // repeated squaring and multiplication. + *this = 5; + bitmask >>= 1; + while (bitmask != 0) { + square(); + if ((exp & bitmask) != 0) *this *= 5; + bitmask >>= 1; + } + *this <<= exp; // Multiply by pow(2, exp) by shifting. + } + + FMT_CONSTEXPR20 void square() { + int num_bigits = static_cast(bigits_.size()); + int num_result_bigits = 2 * num_bigits; + basic_memory_buffer n(std::move(bigits_)); + bigits_.resize(to_unsigned(num_result_bigits)); + auto sum = uint128_t(); + for (int bigit_index = 0; bigit_index < num_bigits; ++bigit_index) { + // Compute bigit at position bigit_index of the result by adding + // cross-product terms n[i] * n[j] such that i + j == bigit_index. + for (int i = 0, j = bigit_index; j >= 0; ++i, --j) { + // Most terms are multiplied twice which can be optimized in the future. + sum += static_cast(n[i]) * n[j]; + } + (*this)[bigit_index] = static_cast(sum); + sum >>= num_bits(); // Compute the carry. + } + // Do the same for the top half. + for (int bigit_index = num_bigits; bigit_index < num_result_bigits; + ++bigit_index) { + for (int j = num_bigits - 1, i = bigit_index - j; i < num_bigits;) + sum += static_cast(n[i++]) * n[j--]; + (*this)[bigit_index] = static_cast(sum); + sum >>= num_bits(); + } + remove_leading_zeros(); + exp_ *= 2; + } + + // If this bigint has a bigger exponent than other, adds trailing zero to make + // exponents equal. This simplifies some operations such as subtraction. + FMT_CONSTEXPR20 void align(const bigint& other) { + int exp_difference = exp_ - other.exp_; + if (exp_difference <= 0) return; + int num_bigits = static_cast(bigits_.size()); + bigits_.resize(to_unsigned(num_bigits + exp_difference)); + for (int i = num_bigits - 1, j = i + exp_difference; i >= 0; --i, --j) + bigits_[j] = bigits_[i]; + std::uninitialized_fill_n(bigits_.data(), exp_difference, 0u); + exp_ -= exp_difference; + } + + // Divides this bignum by divisor, assigning the remainder to this and + // returning the quotient. + FMT_CONSTEXPR20 auto divmod_assign(const bigint& divisor) -> int { + FMT_ASSERT(this != &divisor, ""); + if (compare(*this, divisor) < 0) return 0; + FMT_ASSERT(divisor.bigits_[divisor.bigits_.size() - 1u] != 0, ""); + align(divisor); + int quotient = 0; + do { + subtract_aligned(divisor); + ++quotient; + } while (compare(*this, divisor) >= 0); + return quotient; + } +}; + +// format_dragon flags. +enum dragon { + predecessor_closer = 1, + fixup = 2, // Run fixup to correct exp10 which can be off by one. + fixed = 4, +}; + +// Formats a floating-point number using a variation of the Fixed-Precision +// Positive Floating-Point Printout ((FPP)^2) algorithm by Steele & White: +// https://fmt.dev/papers/p372-steele.pdf. +FMT_CONSTEXPR20 inline void format_dragon(basic_fp value, + unsigned flags, int num_digits, + buffer& buf, int& exp10) { + bigint numerator; // 2 * R in (FPP)^2. + bigint denominator; // 2 * S in (FPP)^2. + // lower and upper are differences between value and corresponding boundaries. + bigint lower; // (M^- in (FPP)^2). + bigint upper_store; // upper's value if different from lower. + bigint* upper = nullptr; // (M^+ in (FPP)^2). + // Shift numerator and denominator by an extra bit or two (if lower boundary + // is closer) to make lower and upper integers. This eliminates multiplication + // by 2 during later computations. + bool is_predecessor_closer = (flags & dragon::predecessor_closer) != 0; + int shift = is_predecessor_closer ? 2 : 1; + if (value.e >= 0) { + numerator = value.f; + numerator <<= value.e + shift; + lower = 1; + lower <<= value.e; + if (is_predecessor_closer) { + upper_store = 1; + upper_store <<= value.e + 1; + upper = &upper_store; + } + denominator.assign_pow10(exp10); + denominator <<= shift; + } else if (exp10 < 0) { + numerator.assign_pow10(-exp10); + lower.assign(numerator); + if (is_predecessor_closer) { + upper_store.assign(numerator); + upper_store <<= 1; + upper = &upper_store; + } + numerator *= value.f; + numerator <<= shift; + denominator = 1; + denominator <<= shift - value.e; + } else { + numerator = value.f; + numerator <<= shift; + denominator.assign_pow10(exp10); + denominator <<= shift - value.e; + lower = 1; + if (is_predecessor_closer) { + upper_store = 1ULL << 1; + upper = &upper_store; + } + } + int even = static_cast((value.f & 1) == 0); + if (!upper) upper = &lower; + bool shortest = num_digits < 0; + if ((flags & dragon::fixup) != 0) { + if (add_compare(numerator, *upper, denominator) + even <= 0) { + --exp10; + numerator *= 10; + if (num_digits < 0) { + lower *= 10; + if (upper != &lower) *upper *= 10; + } + } + if ((flags & dragon::fixed) != 0) adjust_precision(num_digits, exp10 + 1); + } + // Invariant: value == (numerator / denominator) * pow(10, exp10). + if (shortest) { + // Generate the shortest representation. + num_digits = 0; + char* data = buf.data(); + for (;;) { + int digit = numerator.divmod_assign(denominator); + bool low = compare(numerator, lower) - even < 0; // numerator <[=] lower. + // numerator + upper >[=] pow10: + bool high = add_compare(numerator, *upper, denominator) + even > 0; + data[num_digits++] = static_cast('0' + digit); + if (low || high) { + if (!low) { + ++data[num_digits - 1]; + } else if (high) { + int result = add_compare(numerator, numerator, denominator); + // Round half to even. + if (result > 0 || (result == 0 && (digit % 2) != 0)) + ++data[num_digits - 1]; + } + buf.try_resize(to_unsigned(num_digits)); + exp10 -= num_digits - 1; + return; + } + numerator *= 10; + lower *= 10; + if (upper != &lower) *upper *= 10; + } + } + // Generate the given number of digits. + exp10 -= num_digits - 1; + if (num_digits <= 0) { + denominator *= 10; + auto digit = add_compare(numerator, numerator, denominator) > 0 ? '1' : '0'; + buf.push_back(digit); + return; + } + buf.try_resize(to_unsigned(num_digits)); + for (int i = 0; i < num_digits - 1; ++i) { + int digit = numerator.divmod_assign(denominator); + buf[i] = static_cast('0' + digit); + numerator *= 10; + } + int digit = numerator.divmod_assign(denominator); + auto result = add_compare(numerator, numerator, denominator); + if (result > 0 || (result == 0 && (digit % 2) != 0)) { + if (digit == 9) { + const auto overflow = '0' + 10; + buf[num_digits - 1] = overflow; + // Propagate the carry. + for (int i = num_digits - 1; i > 0 && buf[i] == overflow; --i) { + buf[i] = '0'; + ++buf[i - 1]; + } + if (buf[0] == overflow) { + buf[0] = '1'; + if ((flags & dragon::fixed) != 0) + buf.push_back('0'); + else + ++exp10; + } + return; + } + ++digit; + } + buf[num_digits - 1] = static_cast('0' + digit); +} + +// Formats a floating-point number using the hexfloat format. +template ::value)> +FMT_CONSTEXPR20 void format_hexfloat(Float value, int precision, + float_specs specs, buffer& buf) { + // float is passed as double to reduce the number of instantiations and to + // simplify implementation. + static_assert(!std::is_same::value, ""); + + using info = dragonbox::float_info; + + // Assume Float is in the format [sign][exponent][significand]. + using carrier_uint = typename info::carrier_uint; + + constexpr auto num_float_significand_bits = + detail::num_significand_bits(); + + basic_fp f(value); + f.e += num_float_significand_bits; + if (!has_implicit_bit()) --f.e; + + constexpr auto num_fraction_bits = + num_float_significand_bits + (has_implicit_bit() ? 1 : 0); + constexpr auto num_xdigits = (num_fraction_bits + 3) / 4; + + constexpr auto leading_shift = ((num_xdigits - 1) * 4); + const auto leading_mask = carrier_uint(0xF) << leading_shift; + const auto leading_xdigit = + static_cast((f.f & leading_mask) >> leading_shift); + if (leading_xdigit > 1) f.e -= (32 - countl_zero(leading_xdigit) - 1); + + int print_xdigits = num_xdigits - 1; + if (precision >= 0 && print_xdigits > precision) { + const int shift = ((print_xdigits - precision - 1) * 4); + const auto mask = carrier_uint(0xF) << shift; + const auto v = static_cast((f.f & mask) >> shift); + + if (v >= 8) { + const auto inc = carrier_uint(1) << (shift + 4); + f.f += inc; + f.f &= ~(inc - 1); + } + + // Check long double overflow + if (!has_implicit_bit()) { + const auto implicit_bit = carrier_uint(1) << num_float_significand_bits; + if ((f.f & implicit_bit) == implicit_bit) { + f.f >>= 4; + f.e += 4; + } + } + + print_xdigits = precision; + } + + char xdigits[num_bits() / 4]; + detail::fill_n(xdigits, sizeof(xdigits), '0'); + format_uint<4>(xdigits, f.f, num_xdigits, specs.upper); + + // Remove zero tail + while (print_xdigits > 0 && xdigits[print_xdigits] == '0') --print_xdigits; + + buf.push_back('0'); + buf.push_back(specs.upper ? 'X' : 'x'); + buf.push_back(xdigits[0]); + if (specs.showpoint || print_xdigits > 0 || print_xdigits < precision) + buf.push_back('.'); + buf.append(xdigits + 1, xdigits + 1 + print_xdigits); + for (; print_xdigits < precision; ++print_xdigits) buf.push_back('0'); + + buf.push_back(specs.upper ? 'P' : 'p'); + + uint32_t abs_e; + if (f.e < 0) { + buf.push_back('-'); + abs_e = static_cast(-f.e); + } else { + buf.push_back('+'); + abs_e = static_cast(f.e); + } + format_decimal(appender(buf), abs_e, detail::count_digits(abs_e)); +} + +template ::value)> +FMT_CONSTEXPR20 void format_hexfloat(Float value, int precision, + float_specs specs, buffer& buf) { + format_hexfloat(static_cast(value), precision, specs, buf); +} + +constexpr auto fractional_part_rounding_thresholds(int index) -> uint32_t { + // For checking rounding thresholds. + // The kth entry is chosen to be the smallest integer such that the + // upper 32-bits of 10^(k+1) times it is strictly bigger than 5 * 10^k. + // It is equal to ceil(2^31 + 2^32/10^(k + 1)). + // These are stored in a string literal because we cannot have static arrays + // in constexpr functions and non-static ones are poorly optimized. + return U"\x9999999a\x828f5c29\x80418938\x80068db9\x8000a7c6\x800010c7" + U"\x800001ae\x8000002b"[index]; +} + +template +FMT_CONSTEXPR20 auto format_float(Float value, int precision, float_specs specs, + buffer& buf) -> int { + // float is passed as double to reduce the number of instantiations. + static_assert(!std::is_same::value, ""); + FMT_ASSERT(value >= 0, "value is negative"); + auto converted_value = convert_float(value); + + const bool fixed = specs.format == float_format::fixed; + if (value <= 0) { // <= instead of == to silence a warning. + if (precision <= 0 || !fixed) { + buf.push_back('0'); + return 0; + } + buf.try_resize(to_unsigned(precision)); + fill_n(buf.data(), precision, '0'); + return -precision; + } + + int exp = 0; + bool use_dragon = true; + unsigned dragon_flags = 0; + if (!is_fast_float() || is_constant_evaluated()) { + const auto inv_log2_10 = 0.3010299956639812; // 1 / log2(10) + using info = dragonbox::float_info; + const auto f = basic_fp(converted_value); + // Compute exp, an approximate power of 10, such that + // 10^(exp - 1) <= value < 10^exp or 10^exp <= value < 10^(exp + 1). + // This is based on log10(value) == log2(value) / log2(10) and approximation + // of log2(value) by e + num_fraction_bits idea from double-conversion. + auto e = (f.e + count_digits<1>(f.f) - 1) * inv_log2_10 - 1e-10; + exp = static_cast(e); + if (e > exp) ++exp; // Compute ceil. + dragon_flags = dragon::fixup; + } else if (precision < 0) { + // Use Dragonbox for the shortest format. + if (specs.binary32) { + auto dec = dragonbox::to_decimal(static_cast(value)); + write(buffer_appender(buf), dec.significand); + return dec.exponent; + } + auto dec = dragonbox::to_decimal(static_cast(value)); + write(buffer_appender(buf), dec.significand); + return dec.exponent; + } else { + // Extract significand bits and exponent bits. + using info = dragonbox::float_info; + auto br = bit_cast(static_cast(value)); + + const uint64_t significand_mask = + (static_cast(1) << num_significand_bits()) - 1; + uint64_t significand = (br & significand_mask); + int exponent = static_cast((br & exponent_mask()) >> + num_significand_bits()); + + if (exponent != 0) { // Check if normal. + exponent -= exponent_bias() + num_significand_bits(); + significand |= + (static_cast(1) << num_significand_bits()); + significand <<= 1; + } else { + // Normalize subnormal inputs. + FMT_ASSERT(significand != 0, "zeros should not appear here"); + int shift = countl_zero(significand); + FMT_ASSERT(shift >= num_bits() - num_significand_bits(), + ""); + shift -= (num_bits() - num_significand_bits() - 2); + exponent = (std::numeric_limits::min_exponent - + num_significand_bits()) - + shift; + significand <<= shift; + } + + // Compute the first several nonzero decimal significand digits. + // We call the number we get the first segment. + const int k = info::kappa - dragonbox::floor_log10_pow2(exponent); + exp = -k; + const int beta = exponent + dragonbox::floor_log2_pow10(k); + uint64_t first_segment; + bool has_more_segments; + int digits_in_the_first_segment; + { + const auto r = dragonbox::umul192_upper128( + significand << beta, dragonbox::get_cached_power(k)); + first_segment = r.high(); + has_more_segments = r.low() != 0; + + // The first segment can have 18 ~ 19 digits. + if (first_segment >= 1000000000000000000ULL) { + digits_in_the_first_segment = 19; + } else { + // When it is of 18-digits, we align it to 19-digits by adding a bogus + // zero at the end. + digits_in_the_first_segment = 18; + first_segment *= 10; + } + } + + // Compute the actual number of decimal digits to print. + if (fixed) adjust_precision(precision, exp + digits_in_the_first_segment); + + // Use Dragon4 only when there might be not enough digits in the first + // segment. + if (digits_in_the_first_segment > precision) { + use_dragon = false; + + if (precision <= 0) { + exp += digits_in_the_first_segment; + + if (precision < 0) { + // Nothing to do, since all we have are just leading zeros. + buf.try_resize(0); + } else { + // We may need to round-up. + buf.try_resize(1); + if ((first_segment | static_cast(has_more_segments)) > + 5000000000000000000ULL) { + buf[0] = '1'; + } else { + buf[0] = '0'; + } + } + } // precision <= 0 + else { + exp += digits_in_the_first_segment - precision; + + // When precision > 0, we divide the first segment into three + // subsegments, each with 9, 9, and 0 ~ 1 digits so that each fits + // in 32-bits which usually allows faster calculation than in + // 64-bits. Since some compiler (e.g. MSVC) doesn't know how to optimize + // division-by-constant for large 64-bit divisors, we do it here + // manually. The magic number 7922816251426433760 below is equal to + // ceil(2^(64+32) / 10^10). + const uint32_t first_subsegment = static_cast( + dragonbox::umul128_upper64(first_segment, 7922816251426433760ULL) >> + 32); + const uint64_t second_third_subsegments = + first_segment - first_subsegment * 10000000000ULL; + + uint64_t prod; + uint32_t digits; + bool should_round_up; + int number_of_digits_to_print = precision > 9 ? 9 : precision; + + // Print a 9-digits subsegment, either the first or the second. + auto print_subsegment = [&](uint32_t subsegment, char* buffer) { + int number_of_digits_printed = 0; + + // If we want to print an odd number of digits from the subsegment, + if ((number_of_digits_to_print & 1) != 0) { + // Convert to 64-bit fixed-point fractional form with 1-digit + // integer part. The magic number 720575941 is a good enough + // approximation of 2^(32 + 24) / 10^8; see + // https://jk-jeon.github.io/posts/2022/12/fixed-precision-formatting/#fixed-length-case + // for details. + prod = ((subsegment * static_cast(720575941)) >> 24) + 1; + digits = static_cast(prod >> 32); + *buffer = static_cast('0' + digits); + number_of_digits_printed++; + } + // If we want to print an even number of digits from the + // first_subsegment, + else { + // Convert to 64-bit fixed-point fractional form with 2-digits + // integer part. The magic number 450359963 is a good enough + // approximation of 2^(32 + 20) / 10^7; see + // https://jk-jeon.github.io/posts/2022/12/fixed-precision-formatting/#fixed-length-case + // for details. + prod = ((subsegment * static_cast(450359963)) >> 20) + 1; + digits = static_cast(prod >> 32); + copy2(buffer, digits2(digits)); + number_of_digits_printed += 2; + } + + // Print all digit pairs. + while (number_of_digits_printed < number_of_digits_to_print) { + prod = static_cast(prod) * static_cast(100); + digits = static_cast(prod >> 32); + copy2(buffer + number_of_digits_printed, digits2(digits)); + number_of_digits_printed += 2; + } + }; + + // Print first subsegment. + print_subsegment(first_subsegment, buf.data()); + + // Perform rounding if the first subsegment is the last subsegment to + // print. + if (precision <= 9) { + // Rounding inside the subsegment. + // We round-up if: + // - either the fractional part is strictly larger than 1/2, or + // - the fractional part is exactly 1/2 and the last digit is odd. + // We rely on the following observations: + // - If fractional_part >= threshold, then the fractional part is + // strictly larger than 1/2. + // - If the MSB of fractional_part is set, then the fractional part + // must be at least 1/2. + // - When the MSB of fractional_part is set, either + // second_third_subsegments being nonzero or has_more_segments + // being true means there are further digits not printed, so the + // fractional part is strictly larger than 1/2. + if (precision < 9) { + uint32_t fractional_part = static_cast(prod); + should_round_up = + fractional_part >= fractional_part_rounding_thresholds( + 8 - number_of_digits_to_print) || + ((fractional_part >> 31) & + ((digits & 1) | (second_third_subsegments != 0) | + has_more_segments)) != 0; + } + // Rounding at the subsegment boundary. + // In this case, the fractional part is at least 1/2 if and only if + // second_third_subsegments >= 5000000000ULL, and is strictly larger + // than 1/2 if we further have either second_third_subsegments > + // 5000000000ULL or has_more_segments == true. + else { + should_round_up = second_third_subsegments > 5000000000ULL || + (second_third_subsegments == 5000000000ULL && + ((digits & 1) != 0 || has_more_segments)); + } + } + // Otherwise, print the second subsegment. + else { + // Compilers are not aware of how to leverage the maximum value of + // second_third_subsegments to find out a better magic number which + // allows us to eliminate an additional shift. 1844674407370955162 = + // ceil(2^64/10) < ceil(2^64*(10^9/(10^10 - 1))). + const uint32_t second_subsegment = + static_cast(dragonbox::umul128_upper64( + second_third_subsegments, 1844674407370955162ULL)); + const uint32_t third_subsegment = + static_cast(second_third_subsegments) - + second_subsegment * 10; + + number_of_digits_to_print = precision - 9; + print_subsegment(second_subsegment, buf.data() + 9); + + // Rounding inside the subsegment. + if (precision < 18) { + // The condition third_subsegment != 0 implies that the segment was + // of 19 digits, so in this case the third segment should be + // consisting of a genuine digit from the input. + uint32_t fractional_part = static_cast(prod); + should_round_up = + fractional_part >= fractional_part_rounding_thresholds( + 8 - number_of_digits_to_print) || + ((fractional_part >> 31) & + ((digits & 1) | (third_subsegment != 0) | + has_more_segments)) != 0; + } + // Rounding at the subsegment boundary. + else { + // In this case, the segment must be of 19 digits, thus + // the third subsegment should be consisting of a genuine digit from + // the input. + should_round_up = third_subsegment > 5 || + (third_subsegment == 5 && + ((digits & 1) != 0 || has_more_segments)); + } + } + + // Round-up if necessary. + if (should_round_up) { + ++buf[precision - 1]; + for (int i = precision - 1; i > 0 && buf[i] > '9'; --i) { + buf[i] = '0'; + ++buf[i - 1]; + } + if (buf[0] > '9') { + buf[0] = '1'; + if (fixed) + buf[precision++] = '0'; + else + ++exp; + } + } + buf.try_resize(to_unsigned(precision)); + } + } // if (digits_in_the_first_segment > precision) + else { + // Adjust the exponent for its use in Dragon4. + exp += digits_in_the_first_segment - 1; + } + } + if (use_dragon) { + auto f = basic_fp(); + bool is_predecessor_closer = specs.binary32 + ? f.assign(static_cast(value)) + : f.assign(converted_value); + if (is_predecessor_closer) dragon_flags |= dragon::predecessor_closer; + if (fixed) dragon_flags |= dragon::fixed; + // Limit precision to the maximum possible number of significant digits in + // an IEEE754 double because we don't need to generate zeros. + const int max_double_digits = 767; + if (precision > max_double_digits) precision = max_double_digits; + format_dragon(f, dragon_flags, precision, buf, exp); + } + if (!fixed && !specs.showpoint) { + // Remove trailing zeros. + auto num_digits = buf.size(); + while (num_digits > 0 && buf[num_digits - 1] == '0') { + --num_digits; + ++exp; + } + buf.try_resize(num_digits); + } + return exp; +} +template +FMT_CONSTEXPR20 auto write_float(OutputIt out, T value, + format_specs specs, locale_ref loc) + -> OutputIt { + float_specs fspecs = parse_float_type_spec(specs); + fspecs.sign = specs.sign; + if (detail::signbit(value)) { // value < 0 is false for NaN so use signbit. + fspecs.sign = sign::minus; + value = -value; + } else if (fspecs.sign == sign::minus) { + fspecs.sign = sign::none; + } + + if (!detail::isfinite(value)) + return write_nonfinite(out, detail::isnan(value), specs, fspecs); + + if (specs.align == align::numeric && fspecs.sign) { + auto it = reserve(out, 1); + *it++ = detail::sign(fspecs.sign); + out = base_iterator(out, it); + fspecs.sign = sign::none; + if (specs.width != 0) --specs.width; + } + + memory_buffer buffer; + if (fspecs.format == float_format::hex) { + if (fspecs.sign) buffer.push_back(detail::sign(fspecs.sign)); + format_hexfloat(convert_float(value), specs.precision, fspecs, buffer); + return write_bytes(out, {buffer.data(), buffer.size()}, + specs); + } + int precision = specs.precision >= 0 || specs.type == presentation_type::none + ? specs.precision + : 6; + if (fspecs.format == float_format::exp) { + if (precision == max_value()) + throw_format_error("number is too big"); + else + ++precision; + } else if (fspecs.format != float_format::fixed && precision == 0) { + precision = 1; + } + if (const_check(std::is_same())) fspecs.binary32 = true; + int exp = format_float(convert_float(value), precision, fspecs, buffer); + fspecs.precision = precision; + auto f = big_decimal_fp{buffer.data(), static_cast(buffer.size()), exp}; + return write_float(out, f, specs, fspecs, loc); +} + +template ::value)> +FMT_CONSTEXPR20 auto write(OutputIt out, T value, format_specs specs, + locale_ref loc = {}) -> OutputIt { + if (const_check(!is_supported_floating_point(value))) return out; + return specs.localized && write_loc(out, value, specs, loc) + ? out + : write_float(out, value, specs, loc); +} + +template ::value)> +FMT_CONSTEXPR20 auto write(OutputIt out, T value) -> OutputIt { + if (is_constant_evaluated()) return write(out, value, format_specs()); + if (const_check(!is_supported_floating_point(value))) return out; + + auto fspecs = float_specs(); + if (detail::signbit(value)) { + fspecs.sign = sign::minus; + value = -value; + } + + constexpr auto specs = format_specs(); + using floaty = conditional_t::value, double, T>; + using floaty_uint = typename dragonbox::float_info::carrier_uint; + floaty_uint mask = exponent_mask(); + if ((bit_cast(value) & mask) == mask) + return write_nonfinite(out, std::isnan(value), specs, fspecs); + + auto dec = dragonbox::to_decimal(static_cast(value)); + return write_float(out, dec, specs, fspecs, {}); +} + +template ::value && + !is_fast_float::value)> +inline auto write(OutputIt out, T value) -> OutputIt { + return write(out, value, format_specs()); +} + +template +auto write(OutputIt out, monostate, format_specs = {}, locale_ref = {}) + -> OutputIt { + FMT_ASSERT(false, ""); + return out; +} + +template +FMT_CONSTEXPR auto write(OutputIt out, basic_string_view value) + -> OutputIt { + auto it = reserve(out, value.size()); + it = copy_str_noinline(value.begin(), value.end(), it); + return base_iterator(out, it); +} + +template ::value)> +constexpr auto write(OutputIt out, const T& value) -> OutputIt { + return write(out, to_string_view(value)); +} + +// FMT_ENABLE_IF() condition separated to workaround an MSVC bug. +template < + typename Char, typename OutputIt, typename T, + bool check = + std::is_enum::value && !std::is_same::value && + mapped_type_constant>::value != + type::custom_type, + FMT_ENABLE_IF(check)> +FMT_CONSTEXPR auto write(OutputIt out, T value) -> OutputIt { + return write(out, static_cast>(value)); +} + +template ::value)> +FMT_CONSTEXPR auto write(OutputIt out, T value, + const format_specs& specs = {}, locale_ref = {}) + -> OutputIt { + return specs.type != presentation_type::none && + specs.type != presentation_type::string + ? write(out, value ? 1 : 0, specs, {}) + : write_bytes(out, value ? "true" : "false", specs); +} + +template +FMT_CONSTEXPR auto write(OutputIt out, Char value) -> OutputIt { + auto it = reserve(out, 1); + *it++ = value; + return base_iterator(out, it); +} + +template +FMT_CONSTEXPR_CHAR_TRAITS auto write(OutputIt out, const Char* value) + -> OutputIt { + if (value) return write(out, basic_string_view(value)); + throw_format_error("string pointer is null"); + return out; +} + +template ::value)> +auto write(OutputIt out, const T* value, const format_specs& specs = {}, + locale_ref = {}) -> OutputIt { + return write_ptr(out, bit_cast(value), &specs); +} + +// A write overload that handles implicit conversions. +template > +FMT_CONSTEXPR auto write(OutputIt out, const T& value) -> enable_if_t< + std::is_class::value && !is_string::value && + !is_floating_point::value && !std::is_same::value && + !std::is_same().map( + value))>>::value, + OutputIt> { + return write(out, arg_mapper().map(value)); +} + +template > +FMT_CONSTEXPR auto write(OutputIt out, const T& value) + -> enable_if_t::value == type::custom_type, + OutputIt> { + auto formatter = typename Context::template formatter_type(); + auto parse_ctx = typename Context::parse_context_type({}); + formatter.parse(parse_ctx); + auto ctx = Context(out, {}, {}); + return formatter.format(value, ctx); +} + +// An argument visitor that formats the argument and writes it via the output +// iterator. It's a class and not a generic lambda for compatibility with C++11. +template struct default_arg_formatter { + using iterator = buffer_appender; + using context = buffer_context; + + iterator out; + basic_format_args args; + locale_ref loc; + + template auto operator()(T value) -> iterator { + return write(out, value); + } + auto operator()(typename basic_format_arg::handle h) -> iterator { + basic_format_parse_context parse_ctx({}); + context format_ctx(out, args, loc); + h.format(parse_ctx, format_ctx); + return format_ctx.out(); + } +}; + +template struct arg_formatter { + using iterator = buffer_appender; + using context = buffer_context; + + iterator out; + const format_specs& specs; + locale_ref locale; + + template + FMT_CONSTEXPR FMT_INLINE auto operator()(T value) -> iterator { + return detail::write(out, value, specs, locale); + } + auto operator()(typename basic_format_arg::handle) -> iterator { + // User-defined types are handled separately because they require access + // to the parse context. + return out; + } +}; + +struct width_checker { + template ::value)> + FMT_CONSTEXPR auto operator()(T value) -> unsigned long long { + if (is_negative(value)) throw_format_error("negative width"); + return static_cast(value); + } + + template ::value)> + FMT_CONSTEXPR auto operator()(T) -> unsigned long long { + throw_format_error("width is not integer"); + return 0; + } +}; + +struct precision_checker { + template ::value)> + FMT_CONSTEXPR auto operator()(T value) -> unsigned long long { + if (is_negative(value)) throw_format_error("negative precision"); + return static_cast(value); + } + + template ::value)> + FMT_CONSTEXPR auto operator()(T) -> unsigned long long { + throw_format_error("precision is not integer"); + return 0; + } +}; + +template +FMT_CONSTEXPR auto get_dynamic_spec(FormatArg arg) -> int { + unsigned long long value = visit_format_arg(Handler(), arg); + if (value > to_unsigned(max_value())) + throw_format_error("number is too big"); + return static_cast(value); +} + +template +FMT_CONSTEXPR auto get_arg(Context& ctx, ID id) -> decltype(ctx.arg(id)) { + auto arg = ctx.arg(id); + if (!arg) ctx.on_error("argument not found"); + return arg; +} + +template +FMT_CONSTEXPR void handle_dynamic_spec(int& value, + arg_ref ref, + Context& ctx) { + switch (ref.kind) { + case arg_id_kind::none: + break; + case arg_id_kind::index: + value = detail::get_dynamic_spec(get_arg(ctx, ref.val.index)); + break; + case arg_id_kind::name: + value = detail::get_dynamic_spec(get_arg(ctx, ref.val.name)); + break; + } +} + +#if FMT_USE_USER_DEFINED_LITERALS +# if FMT_USE_NONTYPE_TEMPLATE_ARGS +template Str> +struct statically_named_arg : view { + static constexpr auto name = Str.data; + + const T& value; + statically_named_arg(const T& v) : value(v) {} +}; + +template Str> +struct is_named_arg> : std::true_type {}; + +template Str> +struct is_statically_named_arg> + : std::true_type {}; + +template Str> +struct udl_arg { + template auto operator=(T&& value) const { + return statically_named_arg(std::forward(value)); + } +}; +# else +template struct udl_arg { + const Char* str; + + template auto operator=(T&& value) const -> named_arg { + return {str, std::forward(value)}; + } +}; +# endif +#endif // FMT_USE_USER_DEFINED_LITERALS + +template +auto vformat(const Locale& loc, basic_string_view fmt, + basic_format_args>> args) + -> std::basic_string { + auto buf = basic_memory_buffer(); + detail::vformat_to(buf, fmt, args, detail::locale_ref(loc)); + return {buf.data(), buf.size()}; +} + +using format_func = void (*)(detail::buffer&, int, const char*); + +FMT_API void format_error_code(buffer& out, int error_code, + string_view message) noexcept; + +FMT_API void report_error(format_func func, int error_code, + const char* message) noexcept; +} // namespace detail + +FMT_API auto vsystem_error(int error_code, string_view format_str, + format_args args) -> std::system_error; + +/** + \rst + Constructs :class:`std::system_error` with a message formatted with + ``fmt::format(fmt, args...)``. + *error_code* is a system error code as given by ``errno``. + + **Example**:: + + // This throws std::system_error with the description + // cannot open file 'madeup': No such file or directory + // or similar (system message may vary). + const char* filename = "madeup"; + std::FILE* file = std::fopen(filename, "r"); + if (!file) + throw fmt::system_error(errno, "cannot open file '{}'", filename); + \endrst + */ +template +auto system_error(int error_code, format_string fmt, T&&... args) + -> std::system_error { + return vsystem_error(error_code, fmt, fmt::make_format_args(args...)); +} + +/** + \rst + Formats an error message for an error returned by an operating system or a + language runtime, for example a file opening error, and writes it to *out*. + The format is the same as the one used by ``std::system_error(ec, message)`` + where ``ec`` is ``std::error_code(error_code, std::generic_category()})``. + It is implementation-defined but normally looks like: + + .. parsed-literal:: + **: ** + + where ** is the passed message and ** is the system + message corresponding to the error code. + *error_code* is a system error code as given by ``errno``. + \endrst + */ +FMT_API void format_system_error(detail::buffer& out, int error_code, + const char* message) noexcept; + +// Reports a system error without throwing an exception. +// Can be used to report errors from destructors. +FMT_API void report_system_error(int error_code, const char* message) noexcept; + +/** Fast integer formatter. */ +class format_int { + private: + // Buffer should be large enough to hold all digits (digits10 + 1), + // a sign and a null character. + enum { buffer_size = std::numeric_limits::digits10 + 3 }; + mutable char buffer_[buffer_size]; + char* str_; + + template auto format_unsigned(UInt value) -> char* { + auto n = static_cast>(value); + return detail::format_decimal(buffer_, n, buffer_size - 1).begin; + } + + template auto format_signed(Int value) -> char* { + auto abs_value = static_cast>(value); + bool negative = value < 0; + if (negative) abs_value = 0 - abs_value; + auto begin = format_unsigned(abs_value); + if (negative) *--begin = '-'; + return begin; + } + + public: + explicit format_int(int value) : str_(format_signed(value)) {} + explicit format_int(long value) : str_(format_signed(value)) {} + explicit format_int(long long value) : str_(format_signed(value)) {} + explicit format_int(unsigned value) : str_(format_unsigned(value)) {} + explicit format_int(unsigned long value) : str_(format_unsigned(value)) {} + explicit format_int(unsigned long long value) + : str_(format_unsigned(value)) {} + + /** Returns the number of characters written to the output buffer. */ + auto size() const -> size_t { + return detail::to_unsigned(buffer_ - str_ + buffer_size - 1); + } + + /** + Returns a pointer to the output buffer content. No terminating null + character is appended. + */ + auto data() const -> const char* { return str_; } + + /** + Returns a pointer to the output buffer content with terminating null + character appended. + */ + auto c_str() const -> const char* { + buffer_[buffer_size - 1] = '\0'; + return str_; + } + + /** + \rst + Returns the content of the output buffer as an ``std::string``. + \endrst + */ + auto str() const -> std::string { return std::string(str_, size()); } +}; + +template +struct formatter::value>> + : formatter, Char> { + template + auto format(const T& value, FormatContext& ctx) const -> decltype(ctx.out()) { + using base = formatter, Char>; + return base::format(format_as(value), ctx); + } +}; + +#define FMT_FORMAT_AS(Type, Base) \ + template \ + struct formatter : formatter {} + +FMT_FORMAT_AS(signed char, int); +FMT_FORMAT_AS(unsigned char, unsigned); +FMT_FORMAT_AS(short, int); +FMT_FORMAT_AS(unsigned short, unsigned); +FMT_FORMAT_AS(long, detail::long_type); +FMT_FORMAT_AS(unsigned long, detail::ulong_type); +FMT_FORMAT_AS(Char*, const Char*); +FMT_FORMAT_AS(std::basic_string, basic_string_view); +FMT_FORMAT_AS(std::nullptr_t, const void*); +FMT_FORMAT_AS(detail::std_string_view, basic_string_view); +FMT_FORMAT_AS(void*, const void*); + +template +struct formatter : formatter, Char> {}; + +/** + \rst + Converts ``p`` to ``const void*`` for pointer formatting. + + **Example**:: + + auto s = fmt::format("{}", fmt::ptr(p)); + \endrst + */ +template auto ptr(T p) -> const void* { + static_assert(std::is_pointer::value, ""); + return detail::bit_cast(p); +} +template +auto ptr(const std::unique_ptr& p) -> const void* { + return p.get(); +} +template auto ptr(const std::shared_ptr& p) -> const void* { + return p.get(); +} + +/** + \rst + Converts ``e`` to the underlying type. + + **Example**:: + + enum class color { red, green, blue }; + auto s = fmt::format("{}", fmt::underlying(color::red)); + \endrst + */ +template +constexpr auto underlying(Enum e) noexcept -> underlying_t { + return static_cast>(e); +} + +namespace enums { +template ::value)> +constexpr auto format_as(Enum e) noexcept -> underlying_t { + return static_cast>(e); +} +} // namespace enums + +class bytes { + private: + string_view data_; + friend struct formatter; + + public: + explicit bytes(string_view data) : data_(data) {} +}; + +template <> struct formatter { + private: + detail::dynamic_format_specs<> specs_; + + public: + template + FMT_CONSTEXPR auto parse(ParseContext& ctx) -> const char* { + return parse_format_specs(ctx.begin(), ctx.end(), specs_, ctx, + detail::type::string_type); + } + + template + auto format(bytes b, FormatContext& ctx) -> decltype(ctx.out()) { + detail::handle_dynamic_spec(specs_.width, + specs_.width_ref, ctx); + detail::handle_dynamic_spec( + specs_.precision, specs_.precision_ref, ctx); + return detail::write_bytes(ctx.out(), b.data_, specs_); + } +}; + +// group_digits_view is not derived from view because it copies the argument. +template struct group_digits_view { + T value; +}; + +/** + \rst + Returns a view that formats an integer value using ',' as a locale-independent + thousands separator. + + **Example**:: + + fmt::print("{}", fmt::group_digits(12345)); + // Output: "12,345" + \endrst + */ +template auto group_digits(T value) -> group_digits_view { + return {value}; +} + +template struct formatter> : formatter { + private: + detail::dynamic_format_specs<> specs_; + + public: + template + FMT_CONSTEXPR auto parse(ParseContext& ctx) -> const char* { + return parse_format_specs(ctx.begin(), ctx.end(), specs_, ctx, + detail::type::int_type); + } + + template + auto format(group_digits_view t, FormatContext& ctx) + -> decltype(ctx.out()) { + detail::handle_dynamic_spec(specs_.width, + specs_.width_ref, ctx); + detail::handle_dynamic_spec( + specs_.precision, specs_.precision_ref, ctx); + return detail::write_int( + ctx.out(), static_cast>(t.value), 0, specs_, + detail::digit_grouping("\3", ",")); + } +}; + +template struct nested_view { + const formatter* fmt; + const T* value; +}; + +template struct formatter> { + FMT_CONSTEXPR auto parse(format_parse_context& ctx) -> const char* { + return ctx.begin(); + } + auto format(nested_view view, format_context& ctx) const + -> decltype(ctx.out()) { + return view.fmt->format(*view.value, ctx); + } +}; + +template struct nested_formatter { + private: + int width_; + detail::fill_t fill_; + align_t align_ : 4; + formatter formatter_; + + public: + constexpr nested_formatter() : width_(0), align_(align_t::none) {} + + FMT_CONSTEXPR auto parse(format_parse_context& ctx) -> const char* { + auto specs = detail::dynamic_format_specs(); + auto it = parse_format_specs(ctx.begin(), ctx.end(), specs, ctx, + detail::type::none_type); + width_ = specs.width; + fill_ = specs.fill; + align_ = specs.align; + ctx.advance_to(it); + return formatter_.parse(ctx); + } + + template + auto write_padded(format_context& ctx, F write) const -> decltype(ctx.out()) { + if (width_ == 0) return write(ctx.out()); + auto buf = memory_buffer(); + write(std::back_inserter(buf)); + auto specs = format_specs<>(); + specs.width = width_; + specs.fill = fill_; + specs.align = align_; + return detail::write(ctx.out(), string_view(buf.data(), buf.size()), specs); + } + + auto nested(const T& value) const -> nested_view { + return nested_view{&formatter_, &value}; + } +}; + +// DEPRECATED! join_view will be moved to ranges.h. +template +struct join_view : detail::view { + It begin; + Sentinel end; + basic_string_view sep; + + join_view(It b, Sentinel e, basic_string_view s) + : begin(b), end(e), sep(s) {} +}; + +template +struct formatter, Char> { + private: + using value_type = +#ifdef __cpp_lib_ranges + std::iter_value_t; +#else + typename std::iterator_traits::value_type; +#endif + formatter, Char> value_formatter_; + + public: + template + FMT_CONSTEXPR auto parse(ParseContext& ctx) -> const Char* { + return value_formatter_.parse(ctx); + } + + template + auto format(const join_view& value, + FormatContext& ctx) const -> decltype(ctx.out()) { + auto it = value.begin; + auto out = ctx.out(); + if (it != value.end) { + out = value_formatter_.format(*it, ctx); + ++it; + while (it != value.end) { + out = detail::copy_str(value.sep.begin(), value.sep.end(), out); + ctx.advance_to(out); + out = value_formatter_.format(*it, ctx); + ++it; + } + } + return out; + } +}; + +/** + Returns a view that formats the iterator range `[begin, end)` with elements + separated by `sep`. + */ +template +auto join(It begin, Sentinel end, string_view sep) -> join_view { + return {begin, end, sep}; +} + +/** + \rst + Returns a view that formats `range` with elements separated by `sep`. + + **Example**:: + + std::vector v = {1, 2, 3}; + fmt::print("{}", fmt::join(v, ", ")); + // Output: "1, 2, 3" + + ``fmt::join`` applies passed format specifiers to the range elements:: + + fmt::print("{:02}", fmt::join(v, ", ")); + // Output: "01, 02, 03" + \endrst + */ +template +auto join(Range&& range, string_view sep) + -> join_view, detail::sentinel_t> { + return join(std::begin(range), std::end(range), sep); +} + +/** + \rst + Converts *value* to ``std::string`` using the default format for type *T*. + + **Example**:: + + #include + + std::string answer = fmt::to_string(42); + \endrst + */ +template ::value && + !detail::has_format_as::value)> +inline auto to_string(const T& value) -> std::string { + auto buffer = memory_buffer(); + detail::write(appender(buffer), value); + return {buffer.data(), buffer.size()}; +} + +template ::value)> +FMT_NODISCARD inline auto to_string(T value) -> std::string { + // The buffer should be large enough to store the number including the sign + // or "false" for bool. + constexpr int max_size = detail::digits10() + 2; + char buffer[max_size > 5 ? static_cast(max_size) : 5]; + char* begin = buffer; + return std::string(begin, detail::write(begin, value)); +} + +template +FMT_NODISCARD auto to_string(const basic_memory_buffer& buf) + -> std::basic_string { + auto size = buf.size(); + detail::assume(size < std::basic_string().max_size()); + return std::basic_string(buf.data(), size); +} + +template ::value && + detail::has_format_as::value)> +inline auto to_string(const T& value) -> std::string { + return to_string(format_as(value)); +} + +FMT_END_EXPORT + +namespace detail { + +template +void vformat_to(buffer& buf, basic_string_view fmt, + typename vformat_args::type args, locale_ref loc) { + auto out = buffer_appender(buf); + if (fmt.size() == 2 && equal2(fmt.data(), "{}")) { + auto arg = args.get(0); + if (!arg) throw_format_error("argument not found"); + visit_format_arg(default_arg_formatter{out, args, loc}, arg); + return; + } + + struct format_handler : error_handler { + basic_format_parse_context parse_context; + buffer_context context; + + format_handler(buffer_appender p_out, basic_string_view str, + basic_format_args> p_args, + locale_ref p_loc) + : parse_context(str), context(p_out, p_args, p_loc) {} + + void on_text(const Char* begin, const Char* end) { + auto text = basic_string_view(begin, to_unsigned(end - begin)); + context.advance_to(write(context.out(), text)); + } + + FMT_CONSTEXPR auto on_arg_id() -> int { + return parse_context.next_arg_id(); + } + FMT_CONSTEXPR auto on_arg_id(int id) -> int { + return parse_context.check_arg_id(id), id; + } + FMT_CONSTEXPR auto on_arg_id(basic_string_view id) -> int { + int arg_id = context.arg_id(id); + if (arg_id < 0) throw_format_error("argument not found"); + return arg_id; + } + + FMT_INLINE void on_replacement_field(int id, const Char*) { + auto arg = get_arg(context, id); + context.advance_to(visit_format_arg( + default_arg_formatter{context.out(), context.args(), + context.locale()}, + arg)); + } + + auto on_format_specs(int id, const Char* begin, const Char* end) + -> const Char* { + auto arg = get_arg(context, id); + // Not using a visitor for custom types gives better codegen. + if (arg.format_custom(begin, parse_context, context)) + return parse_context.begin(); + auto specs = detail::dynamic_format_specs(); + begin = parse_format_specs(begin, end, specs, parse_context, arg.type()); + detail::handle_dynamic_spec( + specs.width, specs.width_ref, context); + detail::handle_dynamic_spec( + specs.precision, specs.precision_ref, context); + if (begin == end || *begin != '}') + throw_format_error("missing '}' in format string"); + auto f = arg_formatter{context.out(), specs, context.locale()}; + context.advance_to(visit_format_arg(f, arg)); + return begin; + } + }; + detail::parse_format_string(fmt, format_handler(out, fmt, args, loc)); +} + +FMT_BEGIN_EXPORT + +#ifndef FMT_HEADER_ONLY +extern template FMT_API void vformat_to(buffer&, string_view, + typename vformat_args<>::type, + locale_ref); +extern template FMT_API auto thousands_sep_impl(locale_ref) + -> thousands_sep_result; +extern template FMT_API auto thousands_sep_impl(locale_ref) + -> thousands_sep_result; +extern template FMT_API auto decimal_point_impl(locale_ref) -> char; +extern template FMT_API auto decimal_point_impl(locale_ref) -> wchar_t; +#endif // FMT_HEADER_ONLY + +} // namespace detail + +#if FMT_USE_USER_DEFINED_LITERALS +inline namespace literals { +/** + \rst + User-defined literal equivalent of :func:`fmt::arg`. + + **Example**:: + + using namespace fmt::literals; + fmt::print("Elapsed time: {s:.2f} seconds", "s"_a=1.23); + \endrst + */ +# if FMT_USE_NONTYPE_TEMPLATE_ARGS +template constexpr auto operator""_a() { + using char_t = remove_cvref_t; + return detail::udl_arg(); +} +# else +constexpr auto operator""_a(const char* s, size_t) -> detail::udl_arg { + return {s}; +} +# endif +} // namespace literals +#endif // FMT_USE_USER_DEFINED_LITERALS + +template ::value)> +inline auto vformat(const Locale& loc, string_view fmt, format_args args) + -> std::string { + return detail::vformat(loc, fmt, args); +} + +template ::value)> +inline auto format(const Locale& loc, format_string fmt, T&&... args) + -> std::string { + return fmt::vformat(loc, string_view(fmt), fmt::make_format_args(args...)); +} + +template ::value&& + detail::is_locale::value)> +auto vformat_to(OutputIt out, const Locale& loc, string_view fmt, + format_args args) -> OutputIt { + using detail::get_buffer; + auto&& buf = get_buffer(out); + detail::vformat_to(buf, fmt, args, detail::locale_ref(loc)); + return detail::get_iterator(buf, out); +} + +template ::value&& + detail::is_locale::value)> +FMT_INLINE auto format_to(OutputIt out, const Locale& loc, + format_string fmt, T&&... args) -> OutputIt { + return vformat_to(out, loc, fmt, fmt::make_format_args(args...)); +} + +template ::value)> +FMT_NODISCARD FMT_INLINE auto formatted_size(const Locale& loc, + format_string fmt, + T&&... args) -> size_t { + auto buf = detail::counting_buffer<>(); + detail::vformat_to(buf, fmt, fmt::make_format_args(args...), + detail::locale_ref(loc)); + return buf.count(); +} + +FMT_END_EXPORT + +template +template +FMT_CONSTEXPR FMT_INLINE auto +formatter::value != + detail::type::custom_type>>::format(const T& val, + FormatContext& ctx) + const -> decltype(ctx.out()) { + if (specs_.width_ref.kind == detail::arg_id_kind::none && + specs_.precision_ref.kind == detail::arg_id_kind::none) { + return detail::write(ctx.out(), val, specs_, ctx.locale()); + } + auto specs = specs_; + detail::handle_dynamic_spec(specs.width, + specs.width_ref, ctx); + detail::handle_dynamic_spec( + specs.precision, specs.precision_ref, ctx); + return detail::write(ctx.out(), val, specs, ctx.locale()); +} + +FMT_END_NAMESPACE + +#ifdef FMT_HEADER_ONLY +# define FMT_FUNC inline +# include "format-inl.h" +#else +# define FMT_FUNC +#endif + +#endif // FMT_FORMAT_H_ diff --git a/third_party/tlRender-install-Release/include/OpenImageIO/detail/fmt/ostream.h b/third_party/tlRender-install-Release/include/OpenImageIO/detail/fmt/ostream.h new file mode 100644 index 00000000..26fb3b5a --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenImageIO/detail/fmt/ostream.h @@ -0,0 +1,245 @@ +// Formatting library for C++ - std::ostream support +// +// Copyright (c) 2012 - present, Victor Zverovich +// All rights reserved. +// +// For the license information refer to format.h. + +#ifndef FMT_OSTREAM_H_ +#define FMT_OSTREAM_H_ + +#include // std::filebuf + +#ifdef _WIN32 +# ifdef __GLIBCXX__ +# include +# include +# endif +# include +#endif + +#include "format.h" + +FMT_BEGIN_NAMESPACE +namespace detail { + +template class formatbuf : public Streambuf { + private: + using char_type = typename Streambuf::char_type; + using streamsize = decltype(std::declval().sputn(nullptr, 0)); + using int_type = typename Streambuf::int_type; + using traits_type = typename Streambuf::traits_type; + + buffer& buffer_; + + public: + explicit formatbuf(buffer& buf) : buffer_(buf) {} + + protected: + // The put area is always empty. This makes the implementation simpler and has + // the advantage that the streambuf and the buffer are always in sync and + // sputc never writes into uninitialized memory. A disadvantage is that each + // call to sputc always results in a (virtual) call to overflow. There is no + // disadvantage here for sputn since this always results in a call to xsputn. + + auto overflow(int_type ch) -> int_type override { + if (!traits_type::eq_int_type(ch, traits_type::eof())) + buffer_.push_back(static_cast(ch)); + return ch; + } + + auto xsputn(const char_type* s, streamsize count) -> streamsize override { + buffer_.append(s, s + count); + return count; + } +}; + +// Generate a unique explicit instantion in every translation unit using a tag +// type in an anonymous namespace. +namespace { +struct file_access_tag {}; +} // namespace +template +class file_access { + friend auto get_file(BufType& obj) -> FILE* { return obj.*FileMemberPtr; } +}; + +#if FMT_MSC_VERSION +template class file_access; +auto get_file(std::filebuf&) -> FILE*; +#endif + +inline auto write_ostream_unicode(std::ostream& os, fmt::string_view data) + -> bool { + FILE* f = nullptr; +#if FMT_MSC_VERSION + if (auto* buf = dynamic_cast(os.rdbuf())) + f = get_file(*buf); + else + return false; +#elif defined(_WIN32) && defined(__GLIBCXX__) + auto* rdbuf = os.rdbuf(); + if (auto* sfbuf = dynamic_cast<__gnu_cxx::stdio_sync_filebuf*>(rdbuf)) + f = sfbuf->file(); + else if (auto* fbuf = dynamic_cast<__gnu_cxx::stdio_filebuf*>(rdbuf)) + f = fbuf->file(); + else + return false; +#else + ignore_unused(os, data, f); +#endif +#ifdef _WIN32 + if (f) { + int fd = _fileno(f); + if (_isatty(fd)) { + os.flush(); + return write_console(fd, data); + } + } +#endif + return false; +} +inline auto write_ostream_unicode(std::wostream&, + fmt::basic_string_view) -> bool { + return false; +} + +// Write the content of buf to os. +// It is a separate function rather than a part of vprint to simplify testing. +template +void write_buffer(std::basic_ostream& os, buffer& buf) { + const Char* buf_data = buf.data(); + using unsigned_streamsize = std::make_unsigned::type; + unsigned_streamsize size = buf.size(); + unsigned_streamsize max_size = to_unsigned(max_value()); + do { + unsigned_streamsize n = size <= max_size ? size : max_size; + os.write(buf_data, static_cast(n)); + buf_data += n; + size -= n; + } while (size != 0); +} + +template +void format_value(buffer& buf, const T& value) { + auto&& format_buf = formatbuf>(buf); + auto&& output = std::basic_ostream(&format_buf); +#if !defined(FMT_STATIC_THOUSANDS_SEPARATOR) + output.imbue(std::locale::classic()); // The default is always unlocalized. +#endif + output << value; + output.exceptions(std::ios_base::failbit | std::ios_base::badbit); +} + +template struct streamed_view { + const T& value; +}; + +} // namespace detail + +// Formats an object of type T that has an overloaded ostream operator<<. +template +struct basic_ostream_formatter : formatter, Char> { + void set_debug_format() = delete; + + template + auto format(const T& value, basic_format_context& ctx) const + -> OutputIt { + auto buffer = basic_memory_buffer(); + detail::format_value(buffer, value); + return formatter, Char>::format( + {buffer.data(), buffer.size()}, ctx); + } +}; + +using ostream_formatter = basic_ostream_formatter; + +template +struct formatter, Char> + : basic_ostream_formatter { + template + auto format(detail::streamed_view view, + basic_format_context& ctx) const -> OutputIt { + return basic_ostream_formatter::format(view.value, ctx); + } +}; + +/** + \rst + Returns a view that formats `value` via an ostream ``operator<<``. + + **Example**:: + + fmt::print("Current thread id: {}\n", + fmt::streamed(std::this_thread::get_id())); + \endrst + */ +template +constexpr auto streamed(const T& value) -> detail::streamed_view { + return {value}; +} + +namespace detail { + +inline void vprint_directly(std::ostream& os, string_view format_str, + format_args args) { + auto buffer = memory_buffer(); + detail::vformat_to(buffer, format_str, args); + detail::write_buffer(os, buffer); +} + +} // namespace detail + +FMT_EXPORT template +void vprint(std::basic_ostream& os, + basic_string_view> format_str, + basic_format_args>> args) { + auto buffer = basic_memory_buffer(); + detail::vformat_to(buffer, format_str, args); + if (detail::write_ostream_unicode(os, {buffer.data(), buffer.size()})) return; + detail::write_buffer(os, buffer); +} + +/** + \rst + Prints formatted data to the stream *os*. + + **Example**:: + + fmt::print(cerr, "Don't {}!", "panic"); + \endrst + */ +FMT_EXPORT template +void print(std::ostream& os, format_string fmt, T&&... args) { + const auto& vargs = fmt::make_format_args(args...); + if (detail::is_utf8()) + vprint(os, fmt, vargs); + else + detail::vprint_directly(os, fmt, vargs); +} + +FMT_EXPORT +template +void print(std::wostream& os, + basic_format_string...> fmt, + Args&&... args) { + vprint(os, fmt, fmt::make_format_args>(args...)); +} + +FMT_EXPORT template +void println(std::ostream& os, format_string fmt, T&&... args) { + fmt::print(os, "{}\n", fmt::format(fmt, std::forward(args)...)); +} + +FMT_EXPORT +template +void println(std::wostream& os, + basic_format_string...> fmt, + Args&&... args) { + print(os, L"{}\n", fmt::format(fmt, std::forward(args)...)); +} + +FMT_END_NAMESPACE + +#endif // FMT_OSTREAM_H_ diff --git a/third_party/tlRender-install-Release/include/OpenImageIO/detail/fmt/printf.h b/third_party/tlRender-install-Release/include/OpenImageIO/detail/fmt/printf.h new file mode 100644 index 00000000..07e81577 --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenImageIO/detail/fmt/printf.h @@ -0,0 +1,675 @@ +// Formatting library for C++ - legacy printf implementation +// +// Copyright (c) 2012 - 2016, Victor Zverovich +// All rights reserved. +// +// For the license information refer to format.h. + +#ifndef FMT_PRINTF_H_ +#define FMT_PRINTF_H_ + +#include // std::max +#include // std::numeric_limits + +#include "format.h" + +FMT_BEGIN_NAMESPACE +FMT_BEGIN_EXPORT + +template struct printf_formatter { + printf_formatter() = delete; +}; + +template class basic_printf_context { + private: + detail::buffer_appender out_; + basic_format_args args_; + + static_assert(std::is_same::value || + std::is_same::value, + "Unsupported code unit type."); + + public: + using char_type = Char; + using parse_context_type = basic_format_parse_context; + template using formatter_type = printf_formatter; + + /** + \rst + Constructs a ``printf_context`` object. References to the arguments are + stored in the context object so make sure they have appropriate lifetimes. + \endrst + */ + basic_printf_context(detail::buffer_appender out, + basic_format_args args) + : out_(out), args_(args) {} + + auto out() -> detail::buffer_appender { return out_; } + void advance_to(detail::buffer_appender) {} + + auto locale() -> detail::locale_ref { return {}; } + + auto arg(int id) const -> basic_format_arg { + return args_.get(id); + } + + FMT_CONSTEXPR void on_error(const char* message) { + detail::error_handler().on_error(message); + } +}; + +namespace detail { + +// Checks if a value fits in int - used to avoid warnings about comparing +// signed and unsigned integers. +template struct int_checker { + template static auto fits_in_int(T value) -> bool { + unsigned max = max_value(); + return value <= max; + } + static auto fits_in_int(bool) -> bool { return true; } +}; + +template <> struct int_checker { + template static auto fits_in_int(T value) -> bool { + return value >= (std::numeric_limits::min)() && + value <= max_value(); + } + static auto fits_in_int(int) -> bool { return true; } +}; + +struct printf_precision_handler { + template ::value)> + auto operator()(T value) -> int { + if (!int_checker::is_signed>::fits_in_int(value)) + throw_format_error("number is too big"); + return (std::max)(static_cast(value), 0); + } + + template ::value)> + auto operator()(T) -> int { + throw_format_error("precision is not integer"); + return 0; + } +}; + +// An argument visitor that returns true iff arg is a zero integer. +struct is_zero_int { + template ::value)> + auto operator()(T value) -> bool { + return value == 0; + } + + template ::value)> + auto operator()(T) -> bool { + return false; + } +}; + +template struct make_unsigned_or_bool : std::make_unsigned {}; + +template <> struct make_unsigned_or_bool { + using type = bool; +}; + +template class arg_converter { + private: + using char_type = typename Context::char_type; + + basic_format_arg& arg_; + char_type type_; + + public: + arg_converter(basic_format_arg& arg, char_type type) + : arg_(arg), type_(type) {} + + void operator()(bool value) { + if (type_ != 's') operator()(value); + } + + template ::value)> + void operator()(U value) { + bool is_signed = type_ == 'd' || type_ == 'i'; + using target_type = conditional_t::value, U, T>; + if (const_check(sizeof(target_type) <= sizeof(int))) { + // Extra casts are used to silence warnings. + if (is_signed) { + auto n = static_cast(static_cast(value)); + arg_ = detail::make_arg(n); + } else { + using unsigned_type = typename make_unsigned_or_bool::type; + auto n = static_cast(static_cast(value)); + arg_ = detail::make_arg(n); + } + } else { + if (is_signed) { + // glibc's printf doesn't sign extend arguments of smaller types: + // std::printf("%lld", -42); // prints "4294967254" + // but we don't have to do the same because it's a UB. + auto n = static_cast(value); + arg_ = detail::make_arg(n); + } else { + auto n = static_cast::type>(value); + arg_ = detail::make_arg(n); + } + } + } + + template ::value)> + void operator()(U) {} // No conversion needed for non-integral types. +}; + +// Converts an integer argument to T for printf, if T is an integral type. +// If T is void, the argument is converted to corresponding signed or unsigned +// type depending on the type specifier: 'd' and 'i' - signed, other - +// unsigned). +template +void convert_arg(basic_format_arg& arg, Char type) { + visit_format_arg(arg_converter(arg, type), arg); +} + +// Converts an integer argument to char for printf. +template class char_converter { + private: + basic_format_arg& arg_; + + public: + explicit char_converter(basic_format_arg& arg) : arg_(arg) {} + + template ::value)> + void operator()(T value) { + auto c = static_cast(value); + arg_ = detail::make_arg(c); + } + + template ::value)> + void operator()(T) {} // No conversion needed for non-integral types. +}; + +// An argument visitor that return a pointer to a C string if argument is a +// string or null otherwise. +template struct get_cstring { + template auto operator()(T) -> const Char* { return nullptr; } + auto operator()(const Char* s) -> const Char* { return s; } +}; + +// Checks if an argument is a valid printf width specifier and sets +// left alignment if it is negative. +template class printf_width_handler { + private: + format_specs& specs_; + + public: + explicit printf_width_handler(format_specs& specs) : specs_(specs) {} + + template ::value)> + auto operator()(T value) -> unsigned { + auto width = static_cast>(value); + if (detail::is_negative(value)) { + specs_.align = align::left; + width = 0 - width; + } + unsigned int_max = max_value(); + if (width > int_max) throw_format_error("number is too big"); + return static_cast(width); + } + + template ::value)> + auto operator()(T) -> unsigned { + throw_format_error("width is not integer"); + return 0; + } +}; + +// Workaround for a bug with the XL compiler when initializing +// printf_arg_formatter's base class. +template +auto make_arg_formatter(buffer_appender iter, format_specs& s) + -> arg_formatter { + return {iter, s, locale_ref()}; +} + +// The ``printf`` argument formatter. +template +class printf_arg_formatter : public arg_formatter { + private: + using base = arg_formatter; + using context_type = basic_printf_context; + + context_type& context_; + + void write_null_pointer(bool is_string = false) { + auto s = this->specs; + s.type = presentation_type::none; + write_bytes(this->out, is_string ? "(null)" : "(nil)", s); + } + + public: + printf_arg_formatter(buffer_appender iter, format_specs& s, + context_type& ctx) + : base(make_arg_formatter(iter, s)), context_(ctx) {} + + void operator()(monostate value) { base::operator()(value); } + + template ::value)> + void operator()(T value) { + // MSVC2013 fails to compile separate overloads for bool and Char so use + // std::is_same instead. + if (!std::is_same::value) { + base::operator()(value); + return; + } + format_specs fmt_specs = this->specs; + if (fmt_specs.type != presentation_type::none && + fmt_specs.type != presentation_type::chr) { + return (*this)(static_cast(value)); + } + fmt_specs.sign = sign::none; + fmt_specs.alt = false; + fmt_specs.fill[0] = ' '; // Ignore '0' flag for char types. + // align::numeric needs to be overwritten here since the '0' flag is + // ignored for non-numeric types + if (fmt_specs.align == align::none || fmt_specs.align == align::numeric) + fmt_specs.align = align::right; + write(this->out, static_cast(value), fmt_specs); + } + + template ::value)> + void operator()(T value) { + base::operator()(value); + } + + /** Formats a null-terminated C string. */ + void operator()(const char* value) { + if (value) + base::operator()(value); + else + write_null_pointer(this->specs.type != presentation_type::pointer); + } + + /** Formats a null-terminated wide C string. */ + void operator()(const wchar_t* value) { + if (value) + base::operator()(value); + else + write_null_pointer(this->specs.type != presentation_type::pointer); + } + + void operator()(basic_string_view value) { base::operator()(value); } + + /** Formats a pointer. */ + void operator()(const void* value) { + if (value) + base::operator()(value); + else + write_null_pointer(); + } + + /** Formats an argument of a custom (user-defined) type. */ + void operator()(typename basic_format_arg::handle handle) { + auto parse_ctx = basic_format_parse_context({}); + handle.format(parse_ctx, context_); + } +}; + +template +void parse_flags(format_specs& specs, const Char*& it, const Char* end) { + for (; it != end; ++it) { + switch (*it) { + case '-': + specs.align = align::left; + break; + case '+': + specs.sign = sign::plus; + break; + case '0': + specs.fill[0] = '0'; + break; + case ' ': + if (specs.sign != sign::plus) specs.sign = sign::space; + break; + case '#': + specs.alt = true; + break; + default: + return; + } + } +} + +template +auto parse_header(const Char*& it, const Char* end, format_specs& specs, + GetArg get_arg) -> int { + int arg_index = -1; + Char c = *it; + if (c >= '0' && c <= '9') { + // Parse an argument index (if followed by '$') or a width possibly + // preceded with '0' flag(s). + int value = parse_nonnegative_int(it, end, -1); + if (it != end && *it == '$') { // value is an argument index + ++it; + arg_index = value != -1 ? value : max_value(); + } else { + if (c == '0') specs.fill[0] = '0'; + if (value != 0) { + // Nonzero value means that we parsed width and don't need to + // parse it or flags again, so return now. + if (value == -1) throw_format_error("number is too big"); + specs.width = value; + return arg_index; + } + } + } + parse_flags(specs, it, end); + // Parse width. + if (it != end) { + if (*it >= '0' && *it <= '9') { + specs.width = parse_nonnegative_int(it, end, -1); + if (specs.width == -1) throw_format_error("number is too big"); + } else if (*it == '*') { + ++it; + specs.width = static_cast(visit_format_arg( + detail::printf_width_handler(specs), get_arg(-1))); + } + } + return arg_index; +} + +inline auto parse_printf_presentation_type(char c, type t) + -> presentation_type { + using pt = presentation_type; + constexpr auto integral_set = sint_set | uint_set | bool_set | char_set; + switch (c) { + case 'd': + return in(t, integral_set) ? pt::dec : pt::none; + case 'o': + return in(t, integral_set) ? pt::oct : pt::none; + case 'x': + return in(t, integral_set) ? pt::hex_lower : pt::none; + case 'X': + return in(t, integral_set) ? pt::hex_upper : pt::none; + case 'a': + return in(t, float_set) ? pt::hexfloat_lower : pt::none; + case 'A': + return in(t, float_set) ? pt::hexfloat_upper : pt::none; + case 'e': + return in(t, float_set) ? pt::exp_lower : pt::none; + case 'E': + return in(t, float_set) ? pt::exp_upper : pt::none; + case 'f': + return in(t, float_set) ? pt::fixed_lower : pt::none; + case 'F': + return in(t, float_set) ? pt::fixed_upper : pt::none; + case 'g': + return in(t, float_set) ? pt::general_lower : pt::none; + case 'G': + return in(t, float_set) ? pt::general_upper : pt::none; + case 'c': + return in(t, integral_set) ? pt::chr : pt::none; + case 's': + return in(t, string_set | cstring_set) ? pt::string : pt::none; + case 'p': + return in(t, pointer_set | cstring_set) ? pt::pointer : pt::none; + default: + return pt::none; + } +} + +template +void vprintf(buffer& buf, basic_string_view format, + basic_format_args args) { + using iterator = buffer_appender; + auto out = iterator(buf); + auto context = basic_printf_context(out, args); + auto parse_ctx = basic_format_parse_context(format); + + // Returns the argument with specified index or, if arg_index is -1, the next + // argument. + auto get_arg = [&](int arg_index) { + if (arg_index < 0) + arg_index = parse_ctx.next_arg_id(); + else + parse_ctx.check_arg_id(--arg_index); + return detail::get_arg(context, arg_index); + }; + + const Char* start = parse_ctx.begin(); + const Char* end = parse_ctx.end(); + auto it = start; + while (it != end) { + if (!find(it, end, '%', it)) { + it = end; // find leaves it == nullptr if it doesn't find '%'. + break; + } + Char c = *it++; + if (it != end && *it == c) { + write(out, basic_string_view(start, to_unsigned(it - start))); + start = ++it; + continue; + } + write(out, basic_string_view(start, to_unsigned(it - 1 - start))); + + auto specs = format_specs(); + specs.align = align::right; + + // Parse argument index, flags and width. + int arg_index = parse_header(it, end, specs, get_arg); + if (arg_index == 0) throw_format_error("argument not found"); + + // Parse precision. + if (it != end && *it == '.') { + ++it; + c = it != end ? *it : 0; + if ('0' <= c && c <= '9') { + specs.precision = parse_nonnegative_int(it, end, 0); + } else if (c == '*') { + ++it; + specs.precision = static_cast( + visit_format_arg(printf_precision_handler(), get_arg(-1))); + } else { + specs.precision = 0; + } + } + + auto arg = get_arg(arg_index); + // For d, i, o, u, x, and X conversion specifiers, if a precision is + // specified, the '0' flag is ignored + if (specs.precision >= 0 && arg.is_integral()) { + // Ignore '0' for non-numeric types or if '-' present. + specs.fill[0] = ' '; + } + if (specs.precision >= 0 && arg.type() == type::cstring_type) { + auto str = visit_format_arg(get_cstring(), arg); + auto str_end = str + specs.precision; + auto nul = std::find(str, str_end, Char()); + auto sv = basic_string_view( + str, to_unsigned(nul != str_end ? nul - str : specs.precision)); + arg = make_arg>(sv); + } + if (specs.alt && visit_format_arg(is_zero_int(), arg)) specs.alt = false; + if (specs.fill[0] == '0') { + if (arg.is_arithmetic() && specs.align != align::left) + specs.align = align::numeric; + else + specs.fill[0] = ' '; // Ignore '0' flag for non-numeric types or if '-' + // flag is also present. + } + + // Parse length and convert the argument to the required type. + c = it != end ? *it++ : 0; + Char t = it != end ? *it : 0; + switch (c) { + case 'h': + if (t == 'h') { + ++it; + t = it != end ? *it : 0; + convert_arg(arg, t); + } else { + convert_arg(arg, t); + } + break; + case 'l': + if (t == 'l') { + ++it; + t = it != end ? *it : 0; + convert_arg(arg, t); + } else { + convert_arg(arg, t); + } + break; + case 'j': + convert_arg(arg, t); + break; + case 'z': + convert_arg(arg, t); + break; + case 't': + convert_arg(arg, t); + break; + case 'L': + // printf produces garbage when 'L' is omitted for long double, no + // need to do the same. + break; + default: + --it; + convert_arg(arg, c); + } + + // Parse type. + if (it == end) throw_format_error("invalid format string"); + char type = static_cast(*it++); + if (arg.is_integral()) { + // Normalize type. + switch (type) { + case 'i': + case 'u': + type = 'd'; + break; + case 'c': + visit_format_arg(char_converter>(arg), arg); + break; + } + } + specs.type = parse_printf_presentation_type(type, arg.type()); + if (specs.type == presentation_type::none) + throw_format_error("invalid format specifier"); + + start = it; + + // Format argument. + visit_format_arg(printf_arg_formatter(out, specs, context), arg); + } + write(out, basic_string_view(start, to_unsigned(it - start))); +} +} // namespace detail + +using printf_context = basic_printf_context; +using wprintf_context = basic_printf_context; + +using printf_args = basic_format_args; +using wprintf_args = basic_format_args; + +/** + \rst + Constructs an `~fmt::format_arg_store` object that contains references to + arguments and can be implicitly converted to `~fmt::printf_args`. + \endrst + */ +template +inline auto make_printf_args(const T&... args) + -> format_arg_store { + return {args...}; +} + +// DEPRECATED! +template +inline auto make_wprintf_args(const T&... args) + -> format_arg_store { + return {args...}; +} + +template +inline auto vsprintf( + basic_string_view fmt, + basic_format_args>> args) + -> std::basic_string { + auto buf = basic_memory_buffer(); + detail::vprintf(buf, fmt, args); + return to_string(buf); +} + +/** + \rst + Formats arguments and returns the result as a string. + + **Example**:: + + std::string message = fmt::sprintf("The answer is %d", 42); + \endrst +*/ +template ::value, char_t>> +inline auto sprintf(const S& fmt, const T&... args) -> std::basic_string { + return vsprintf(detail::to_string_view(fmt), + fmt::make_format_args>(args...)); +} + +template +inline auto vfprintf( + std::FILE* f, basic_string_view fmt, + basic_format_args>> args) + -> int { + auto buf = basic_memory_buffer(); + detail::vprintf(buf, fmt, args); + size_t size = buf.size(); + return std::fwrite(buf.data(), sizeof(Char), size, f) < size + ? -1 + : static_cast(size); +} + +/** + \rst + Prints formatted data to the file *f*. + + **Example**:: + + fmt::fprintf(stderr, "Don't %s!", "panic"); + \endrst + */ +template > +inline auto fprintf(std::FILE* f, const S& fmt, const T&... args) -> int { + return vfprintf(f, detail::to_string_view(fmt), + fmt::make_format_args>(args...)); +} + +template +FMT_DEPRECATED inline auto vprintf( + basic_string_view fmt, + basic_format_args>> args) + -> int { + return vfprintf(stdout, fmt, args); +} + +/** + \rst + Prints formatted data to ``stdout``. + + **Example**:: + + fmt::printf("Elapsed time: %.2f seconds", 1.23); + \endrst + */ +template +inline auto printf(string_view fmt, const T&... args) -> int { + return vfprintf(stdout, fmt, make_printf_args(args...)); +} +template +FMT_DEPRECATED inline auto printf(basic_string_view fmt, + const T&... args) -> int { + return vfprintf(stdout, fmt, make_wprintf_args(args...)); +} + +FMT_END_EXPORT +FMT_END_NAMESPACE + +#endif // FMT_PRINTF_H_ diff --git a/third_party/tlRender-install-Release/include/OpenImageIO/detail/fmt/std.h b/third_party/tlRender-install-Release/include/OpenImageIO/detail/fmt/std.h new file mode 100644 index 00000000..7cff1159 --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenImageIO/detail/fmt/std.h @@ -0,0 +1,537 @@ +// Formatting library for C++ - formatters for standard library types +// +// Copyright (c) 2012 - present, Victor Zverovich +// All rights reserved. +// +// For the license information refer to format.h. + +#ifndef FMT_STD_H_ +#define FMT_STD_H_ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "format.h" +#include "ostream.h" + +#if FMT_HAS_INCLUDE() +# include +#endif +// Checking FMT_CPLUSPLUS for warning suppression in MSVC. +#if FMT_CPLUSPLUS >= 201703L +# if FMT_HAS_INCLUDE() +# include +# endif +# if FMT_HAS_INCLUDE() +# include +# endif +# if FMT_HAS_INCLUDE() +# include +# endif +#endif + +#if FMT_CPLUSPLUS > 201703L && FMT_HAS_INCLUDE() +# include +#endif + +// GCC 4 does not support FMT_HAS_INCLUDE. +#if FMT_HAS_INCLUDE() || defined(__GLIBCXX__) +# include +// Android NDK with gabi++ library on some architectures does not implement +// abi::__cxa_demangle(). +# ifndef __GABIXX_CXXABI_H__ +# define FMT_HAS_ABI_CXA_DEMANGLE +# endif +#endif + +// Check if typeid is available. +#ifndef FMT_USE_TYPEID +// __RTTI is for EDG compilers. In MSVC typeid is available without RTTI. +# if defined(__GXX_RTTI) || FMT_HAS_FEATURE(cxx_rtti) || FMT_MSC_VERSION || \ + defined(__INTEL_RTTI__) || defined(__RTTI) +# define FMT_USE_TYPEID 1 +# else +# define FMT_USE_TYPEID 0 +# endif +#endif + +// For older Xcode versions, __cpp_lib_xxx flags are inaccurately defined. +#ifndef FMT_CPP_LIB_FILESYSTEM +# ifdef __cpp_lib_filesystem +# define FMT_CPP_LIB_FILESYSTEM __cpp_lib_filesystem +# else +# define FMT_CPP_LIB_FILESYSTEM 0 +# endif +#endif + +#ifndef FMT_CPP_LIB_VARIANT +# ifdef __cpp_lib_variant +# define FMT_CPP_LIB_VARIANT __cpp_lib_variant +# else +# define FMT_CPP_LIB_VARIANT 0 +# endif +#endif + +#if FMT_CPP_LIB_FILESYSTEM +FMT_BEGIN_NAMESPACE + +namespace detail { + +template +auto get_path_string(const std::filesystem::path& p, + const std::basic_string& native) { + if constexpr (std::is_same_v && std::is_same_v) + return to_utf8(native, to_utf8_error_policy::replace); + else + return p.string(); +} + +template +void write_escaped_path(basic_memory_buffer& quoted, + const std::filesystem::path& p, + const std::basic_string& native) { + if constexpr (std::is_same_v && + std::is_same_v) { + auto buf = basic_memory_buffer(); + write_escaped_string(std::back_inserter(buf), native); + bool valid = to_utf8::convert(quoted, {buf.data(), buf.size()}); + FMT_ASSERT(valid, "invalid utf16"); + } else if constexpr (std::is_same_v) { + write_escaped_string( + std::back_inserter(quoted), native); + } else { + write_escaped_string(std::back_inserter(quoted), p.string()); + } +} + +} // namespace detail + +FMT_EXPORT +template struct formatter { + private: + format_specs specs_; + detail::arg_ref width_ref_; + bool debug_ = false; + char path_type_ = 0; + + public: + FMT_CONSTEXPR void set_debug_format(bool set = true) { debug_ = set; } + + template FMT_CONSTEXPR auto parse(ParseContext& ctx) { + auto it = ctx.begin(), end = ctx.end(); + if (it == end) return it; + + it = detail::parse_align(it, end, specs_); + if (it == end) return it; + + it = detail::parse_dynamic_spec(it, end, specs_.width, width_ref_, ctx); + if (it != end && *it == '?') { + debug_ = true; + ++it; + } + if (it != end && (*it == 'g')) path_type_ = *it++; + return it; + } + + template + auto format(const std::filesystem::path& p, FormatContext& ctx) const { + auto specs = specs_; +# ifdef _WIN32 + auto path_string = !path_type_ ? p.native() : p.generic_wstring(); +# else + auto path_string = !path_type_ ? p.native() : p.generic_string(); +# endif + + detail::handle_dynamic_spec(specs.width, width_ref_, + ctx); + if (!debug_) { + auto s = detail::get_path_string(p, path_string); + return detail::write(ctx.out(), basic_string_view(s), specs); + } + auto quoted = basic_memory_buffer(); + detail::write_escaped_path(quoted, p, path_string); + return detail::write(ctx.out(), + basic_string_view(quoted.data(), quoted.size()), + specs); + } +}; +FMT_END_NAMESPACE +#endif // FMT_CPP_LIB_FILESYSTEM + +FMT_BEGIN_NAMESPACE +FMT_EXPORT +template +struct formatter, Char> : nested_formatter { + private: + // Functor because C++11 doesn't support generic lambdas. + struct writer { + const std::bitset& bs; + + template + FMT_CONSTEXPR auto operator()(OutputIt out) -> OutputIt { + for (auto pos = N; pos > 0; --pos) { + out = detail::write(out, bs[pos - 1] ? Char('1') : Char('0')); + } + + return out; + } + }; + + public: + template + auto format(const std::bitset& bs, FormatContext& ctx) const + -> decltype(ctx.out()) { + return write_padded(ctx, writer{bs}); + } +}; + +FMT_EXPORT +template +struct formatter : basic_ostream_formatter {}; +FMT_END_NAMESPACE + +#ifdef __cpp_lib_optional +FMT_BEGIN_NAMESPACE +FMT_EXPORT +template +struct formatter, Char, + std::enable_if_t::value>> { + private: + formatter underlying_; + static constexpr basic_string_view optional = + detail::string_literal{}; + static constexpr basic_string_view none = + detail::string_literal{}; + + template + FMT_CONSTEXPR static auto maybe_set_debug_format(U& u, bool set) + -> decltype(u.set_debug_format(set)) { + u.set_debug_format(set); + } + + template + FMT_CONSTEXPR static void maybe_set_debug_format(U&, ...) {} + + public: + template FMT_CONSTEXPR auto parse(ParseContext& ctx) { + maybe_set_debug_format(underlying_, true); + return underlying_.parse(ctx); + } + + template + auto format(const std::optional& opt, FormatContext& ctx) const + -> decltype(ctx.out()) { + if (!opt) return detail::write(ctx.out(), none); + + auto out = ctx.out(); + out = detail::write(out, optional); + ctx.advance_to(out); + out = underlying_.format(*opt, ctx); + return detail::write(out, ')'); + } +}; +FMT_END_NAMESPACE +#endif // __cpp_lib_optional + +#ifdef __cpp_lib_source_location +FMT_BEGIN_NAMESPACE +FMT_EXPORT +template <> struct formatter { + template FMT_CONSTEXPR auto parse(ParseContext& ctx) { + return ctx.begin(); + } + + template + auto format(const std::source_location& loc, FormatContext& ctx) const + -> decltype(ctx.out()) { + auto out = ctx.out(); + out = detail::write(out, loc.file_name()); + out = detail::write(out, ':'); + out = detail::write(out, loc.line()); + out = detail::write(out, ':'); + out = detail::write(out, loc.column()); + out = detail::write(out, ": "); + out = detail::write(out, loc.function_name()); + return out; + } +}; +FMT_END_NAMESPACE +#endif + +#if FMT_CPP_LIB_VARIANT +FMT_BEGIN_NAMESPACE +namespace detail { + +template +using variant_index_sequence = + std::make_index_sequence::value>; + +template struct is_variant_like_ : std::false_type {}; +template +struct is_variant_like_> : std::true_type {}; + +// formattable element check. +template class is_variant_formattable_ { + template + static std::conjunction< + is_formattable, C>...> + check(std::index_sequence); + + public: + static constexpr const bool value = + decltype(check(variant_index_sequence{}))::value; +}; + +template +auto write_variant_alternative(OutputIt out, const T& v) -> OutputIt { + if constexpr (is_string::value) + return write_escaped_string(out, detail::to_string_view(v)); + else if constexpr (std::is_same_v) + return write_escaped_char(out, v); + else + return write(out, v); +} + +} // namespace detail + +template struct is_variant_like { + static constexpr const bool value = detail::is_variant_like_::value; +}; + +template struct is_variant_formattable { + static constexpr const bool value = + detail::is_variant_formattable_::value; +}; + +FMT_EXPORT +template struct formatter { + template + FMT_CONSTEXPR auto parse(ParseContext& ctx) -> decltype(ctx.begin()) { + return ctx.begin(); + } + + template + auto format(const std::monostate&, FormatContext& ctx) const + -> decltype(ctx.out()) { + return detail::write(ctx.out(), "monostate"); + } +}; + +FMT_EXPORT +template +struct formatter< + Variant, Char, + std::enable_if_t, is_variant_formattable>>> { + template + FMT_CONSTEXPR auto parse(ParseContext& ctx) -> decltype(ctx.begin()) { + return ctx.begin(); + } + + template + auto format(const Variant& value, FormatContext& ctx) const + -> decltype(ctx.out()) { + auto out = ctx.out(); + + out = detail::write(out, "variant("); + FMT_TRY { + std::visit( + [&](const auto& v) { + out = detail::write_variant_alternative(out, v); + }, + value); + } + FMT_CATCH(const std::bad_variant_access&) { + detail::write(out, "valueless by exception"); + } + *out++ = ')'; + return out; + } +}; +FMT_END_NAMESPACE +#endif // FMT_CPP_LIB_VARIANT + +FMT_BEGIN_NAMESPACE +FMT_EXPORT +template struct formatter { + template + FMT_CONSTEXPR auto parse(ParseContext& ctx) -> decltype(ctx.begin()) { + return ctx.begin(); + } + + template + FMT_CONSTEXPR auto format(const std::error_code& ec, FormatContext& ctx) const + -> decltype(ctx.out()) { + auto out = ctx.out(); + out = detail::write_bytes(out, ec.category().name(), format_specs()); + out = detail::write(out, Char(':')); + out = detail::write(out, ec.value()); + return out; + } +}; + +FMT_EXPORT +template +struct formatter< + T, Char, // DEPRECATED! Mixing code unit types. + typename std::enable_if::value>::type> { + private: + bool with_typename_ = false; + + public: + FMT_CONSTEXPR auto parse(basic_format_parse_context& ctx) + -> decltype(ctx.begin()) { + auto it = ctx.begin(); + auto end = ctx.end(); + if (it == end || *it == '}') return it; + if (*it == 't') { + ++it; + with_typename_ = FMT_USE_TYPEID != 0; + } + return it; + } + + template + auto format(const std::exception& ex, + basic_format_context& ctx) const -> OutputIt { + format_specs spec; + auto out = ctx.out(); + if (!with_typename_) + return detail::write_bytes(out, string_view(ex.what()), spec); + +#if FMT_USE_TYPEID + const std::type_info& ti = typeid(ex); +# ifdef FMT_HAS_ABI_CXA_DEMANGLE + int status = 0; + std::size_t size = 0; + std::unique_ptr demangled_name_ptr( + abi::__cxa_demangle(ti.name(), nullptr, &size, &status), &std::free); + + string_view demangled_name_view; + if (demangled_name_ptr) { + demangled_name_view = demangled_name_ptr.get(); + + // Normalization of stdlib inline namespace names. + // libc++ inline namespaces. + // std::__1::* -> std::* + // std::__1::__fs::* -> std::* + // libstdc++ inline namespaces. + // std::__cxx11::* -> std::* + // std::filesystem::__cxx11::* -> std::filesystem::* + if (demangled_name_view.starts_with("std::")) { + char* begin = demangled_name_ptr.get(); + char* to = begin + 5; // std:: + for (char *from = to, *end = begin + demangled_name_view.size(); + from < end;) { + // This is safe, because demangled_name is NUL-terminated. + if (from[0] == '_' && from[1] == '_') { + char* next = from + 1; + while (next < end && *next != ':') next++; + if (next[0] == ':' && next[1] == ':') { + from = next + 2; + continue; + } + } + *to++ = *from++; + } + demangled_name_view = {begin, detail::to_unsigned(to - begin)}; + } + } else { + demangled_name_view = string_view(ti.name()); + } + out = detail::write_bytes(out, demangled_name_view, spec); +# elif FMT_MSC_VERSION + string_view demangled_name_view(ti.name()); + if (demangled_name_view.starts_with("class ")) + demangled_name_view.remove_prefix(6); + else if (demangled_name_view.starts_with("struct ")) + demangled_name_view.remove_prefix(7); + out = detail::write_bytes(out, demangled_name_view, spec); +# else + out = detail::write_bytes(out, string_view(ti.name()), spec); +# endif + *out++ = ':'; + *out++ = ' '; + return detail::write_bytes(out, string_view(ex.what()), spec); +#endif + } +}; + +namespace detail { + +template +struct has_flip : std::false_type {}; + +template +struct has_flip().flip())>> + : std::true_type {}; + +template struct is_bit_reference_like { + static constexpr const bool value = + std::is_convertible::value && + std::is_nothrow_assignable::value && has_flip::value; +}; + +#ifdef _LIBCPP_VERSION + +// Workaround for libc++ incompatibility with C++ standard. +// According to the Standard, `bitset::operator[] const` returns bool. +template +struct is_bit_reference_like> { + static constexpr const bool value = true; +}; + +#endif + +} // namespace detail + +// We can't use std::vector::reference and +// std::bitset::reference because the compiler can't deduce Allocator and N +// in partial specialization. +FMT_EXPORT +template +struct formatter::value>> + : formatter { + template + FMT_CONSTEXPR auto format(const BitRef& v, FormatContext& ctx) const + -> decltype(ctx.out()) { + return formatter::format(v, ctx); + } +}; + +FMT_EXPORT +template +struct formatter, Char, + enable_if_t::value>> + : formatter { + template + auto format(const std::atomic& v, FormatContext& ctx) const + -> decltype(ctx.out()) { + return formatter::format(v.load(), ctx); + } +}; + +#ifdef __cpp_lib_atomic_flag_test +FMT_EXPORT +template +struct formatter : formatter { + template + auto format(const std::atomic_flag& v, FormatContext& ctx) const + -> decltype(ctx.out()) { + return formatter::format(v.test(), ctx); + } +}; +#endif // __cpp_lib_atomic_flag_test + +FMT_END_NAMESPACE +#endif // FMT_STD_H_ diff --git a/third_party/tlRender-install-Release/include/OpenImageIO/detail/pugixml/pugiconfig.hpp b/third_party/tlRender-install-Release/include/OpenImageIO/detail/pugixml/pugiconfig.hpp new file mode 100644 index 00000000..2358ffe0 --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenImageIO/detail/pugixml/pugiconfig.hpp @@ -0,0 +1,82 @@ +/** + * pugixml parser - version 1.12 + * -------------------------------------------------------- + * Copyright (C) 2006-2022, by Arseny Kapoulkine (arseny.kapoulkine@gmail.com) + * Report bugs and download new versions at https://pugixml.org/ + * + * This library is distributed under the MIT License. See notice at the end + * of this file. + * + * This work is based on the pugxml parser, which is: + * Copyright (C) 2003, by Kristen Wegner (kristen@tima.net) + */ +// clang-format off + +#ifndef HEADER_PUGICONFIG_HPP +#define HEADER_PUGICONFIG_HPP + +// Uncomment this to enable wchar_t mode +// #define PUGIXML_WCHAR_MODE + +// Uncomment this to enable compact mode +// #define PUGIXML_COMPACT + +// Uncomment this to disable XPath +// #define PUGIXML_NO_XPATH + +// Uncomment this to disable STL +// #define PUGIXML_NO_STL + +// Uncomment this to disable exceptions +// #define PUGIXML_NO_EXCEPTIONS + +// Set this to control attributes for public classes/functions, i.e.: +// #define PUGIXML_API __declspec(dllexport) // to export all public symbols from DLL +// #define PUGIXML_CLASS __declspec(dllimport) // to import all classes from DLL +// #define PUGIXML_FUNCTION __fastcall // to set calling conventions to all public functions to fastcall +// In absence of PUGIXML_CLASS/PUGIXML_FUNCTION definitions PUGIXML_API is used instead + +// OIIO: use already defined OIIO_API +#include +#define PUGIXML_API OIIO_API + +// Tune these constants to adjust memory-related behavior +// #define PUGIXML_MEMORY_PAGE_SIZE 32768 +// #define PUGIXML_MEMORY_OUTPUT_STACK 10240 +// #define PUGIXML_MEMORY_XPATH_PAGE_SIZE 4096 + +// Tune this constant to adjust max nesting for XPath queries +// #define PUGIXML_XPATH_DEPTH_LIMIT 1024 + +// Uncomment this to switch to header-only version +#define PUGIXML_HEADER_ONLY + +// Uncomment this to enable long long support +// #define PUGIXML_HAS_LONG_LONG + +#endif + +/** + * Copyright (c) 2006-2022 Arseny Kapoulkine + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + */ diff --git a/third_party/tlRender-install-Release/include/OpenImageIO/detail/pugixml/pugixml.cpp b/third_party/tlRender-install-Release/include/OpenImageIO/detail/pugixml/pugixml.cpp new file mode 100644 index 00000000..d764c28f --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenImageIO/detail/pugixml/pugixml.cpp @@ -0,0 +1,13030 @@ +/** + * pugixml parser - version 1.12 + * -------------------------------------------------------- + * Copyright (C) 2006-2022, by Arseny Kapoulkine (arseny.kapoulkine@gmail.com) + * Report bugs and download new versions at https://pugixml.org/ + * + * This library is distributed under the MIT License. See notice at the end + * of this file. + * + * This work is based on the pugxml parser, which is: + * Copyright (C) 2003, by Kristen Wegner (kristen@tima.net) + */ +// clang-format off + +#ifndef SOURCE_PUGIXML_CPP +#define SOURCE_PUGIXML_CPP + +#include "pugixml.hpp" + +#include +#include +#include +#include +#include + +#ifdef PUGIXML_WCHAR_MODE +# include +#endif + +#ifndef PUGIXML_NO_XPATH +# include +# include +#endif + +#ifndef PUGIXML_NO_STL +# include +# include +# include +#endif + +// For placement new +#include + +#ifdef _MSC_VER +# pragma warning(push) +# pragma warning(disable: 4127) // conditional expression is constant +# pragma warning(disable: 4324) // structure was padded due to __declspec(align()) +# pragma warning(disable: 4702) // unreachable code +# pragma warning(disable: 4996) // this function or variable may be unsafe +#endif + +#if defined(_MSC_VER) && defined(__c2__) +# pragma clang diagnostic push +# pragma clang diagnostic ignored "-Wdeprecated" // this function or variable may be unsafe +#endif + +#ifdef __INTEL_COMPILER +# pragma warning(disable: 177) // function was declared but never referenced +# pragma warning(disable: 279) // controlling expression is constant +# pragma warning(disable: 1478 1786) // function was declared "deprecated" +# pragma warning(disable: 1684) // conversion from pointer to same-sized integral type +#endif + +#if defined(__BORLANDC__) && defined(PUGIXML_HEADER_ONLY) +# pragma warn -8080 // symbol is declared but never used; disabling this inside push/pop bracket does not make the warning go away +#endif + +#ifdef __BORLANDC__ +# pragma option push +# pragma warn -8008 // condition is always false +# pragma warn -8066 // unreachable code +#endif + +#ifdef __SNC__ +// Using diag_push/diag_pop does not disable the warnings inside templates due to a compiler bug +# pragma diag_suppress=178 // function was declared but never referenced +# pragma diag_suppress=237 // controlling expression is constant +#endif + +#ifdef __TI_COMPILER_VERSION__ +# pragma diag_suppress 179 // function was declared but never referenced +#endif + +// Inlining controls +#if defined(_MSC_VER) && _MSC_VER >= 1300 +# define PUGI__NO_INLINE __declspec(noinline) +#elif defined(__GNUC__) +# define PUGI__NO_INLINE __attribute__((noinline)) +#else +# define PUGI__NO_INLINE +#endif + +// Branch weight controls +#if defined(__GNUC__) && !defined(__c2__) +# define PUGI__UNLIKELY(cond) __builtin_expect(cond, 0) +#else +# define PUGI__UNLIKELY(cond) (cond) +#endif + +// Simple static assertion +#define PUGI__STATIC_ASSERT(cond) { static const char condition_failed[(cond) ? 1 : -1] = {0}; (void)condition_failed[0]; } + +// Digital Mars C++ bug workaround for passing char loaded from memory via stack +#ifdef __DMC__ +# define PUGI__DMC_VOLATILE volatile +#else +# define PUGI__DMC_VOLATILE +#endif + +// Integer sanitizer workaround; we only apply this for clang since gcc8 has no_sanitize but not unsigned-integer-overflow and produces "attribute directive ignored" warnings +#if defined(__clang__) && defined(__has_attribute) +# if __has_attribute(no_sanitize) +# define PUGI__UNSIGNED_OVERFLOW __attribute__((no_sanitize("unsigned-integer-overflow"))) +# else +# define PUGI__UNSIGNED_OVERFLOW +# endif +#else +# define PUGI__UNSIGNED_OVERFLOW +#endif + +// Borland C++ bug workaround for not defining ::memcpy depending on header include order (can't always use std::memcpy because some compilers don't have it at all) +#if defined(__BORLANDC__) && !defined(__MEM_H_USING_LIST) +using std::memcpy; +using std::memmove; +using std::memset; +#endif + +// Some MinGW/GCC versions have headers that erroneously omit LLONG_MIN/LLONG_MAX/ULLONG_MAX definitions from limits.h in some configurations +#if defined(PUGIXML_HAS_LONG_LONG) && defined(__GNUC__) && !defined(LLONG_MAX) && !defined(LLONG_MIN) && !defined(ULLONG_MAX) +# define LLONG_MIN (-LLONG_MAX - 1LL) +# define LLONG_MAX __LONG_LONG_MAX__ +# define ULLONG_MAX (LLONG_MAX * 2ULL + 1ULL) +#endif + +// In some environments MSVC is a compiler but the CRT lacks certain MSVC-specific features +#if defined(_MSC_VER) && !defined(__S3E__) && !defined(_WIN32_WCE) +# define PUGI__MSVC_CRT_VERSION _MSC_VER +#elif defined(_WIN32_WCE) +# define PUGI__MSVC_CRT_VERSION 1310 // MSVC7.1 +#endif + +// Not all platforms have snprintf; we define a wrapper that uses snprintf if possible. This only works with buffers with a known size. +#if __cplusplus >= 201103 +# define PUGI__SNPRINTF(buf, ...) snprintf(buf, sizeof(buf), __VA_ARGS__) +#elif defined(PUGI__MSVC_CRT_VERSION) && PUGI__MSVC_CRT_VERSION >= 1400 +# define PUGI__SNPRINTF(buf, ...) _snprintf_s(buf, _countof(buf), _TRUNCATE, __VA_ARGS__) +#else +# define PUGI__SNPRINTF sprintf +#endif + +// We put implementation details into an anonymous namespace in source mode, but have to keep it in non-anonymous namespace in header-only mode to prevent binary bloat. +#ifdef PUGIXML_HEADER_ONLY +# define PUGI__NS_BEGIN OIIO_NAMESPACE_3_1_BEGIN namespace pugi { namespace impl { +# define PUGI__NS_END } } OIIO_NAMESPACE_3_1_END +# define PUGI__FN inline +# define PUGI__FN_NO_INLINE inline +#else +# if defined(_MSC_VER) && _MSC_VER < 1300 // MSVC6 seems to have an amusing bug with anonymous namespaces inside namespaces +# define PUGI__NS_BEGIN OIIO_NAMESPACE_3_1_BEGIN namespace pugi { namespace impl { +# define PUGI__NS_END } } OIIO_NAMESPACE_3_1_END +# else +# define PUGI__NS_BEGIN OIIO_NAMESPACE_3_1_BEGIN namespace pugi { namespace impl { namespace { +# define PUGI__NS_END } } } OIIO_NAMESPACE_3_1_END +# endif +# define PUGI__FN +# define PUGI__FN_NO_INLINE PUGI__NO_INLINE +#endif + +// uintptr_t +#if (defined(_MSC_VER) && _MSC_VER < 1600) || (defined(__BORLANDC__) && __BORLANDC__ < 0x561) +OIIO_NAMESPACE_3_1_BEGIN namespace pugi +{ +# ifndef _UINTPTR_T_DEFINED + typedef size_t uintptr_t; +# endif + + typedef unsigned __int8 uint8_t; + typedef unsigned __int16 uint16_t; + typedef unsigned __int32 uint32_t; +} OIIO_NAMESPACE_3_1_END +#else +# include +#endif + +// Memory allocation +PUGI__NS_BEGIN + PUGI__FN void* default_allocate(size_t size) + { + return malloc(size); + } + + PUGI__FN void default_deallocate(void* ptr) + { + free(ptr); + } + + template + struct xml_memory_management_function_storage + { + static allocation_function allocate; + static deallocation_function deallocate; + }; + + // Global allocation functions are stored in class statics so that in header mode linker deduplicates them + // Without a template<> we'll get multiple definitions of the same static + template allocation_function xml_memory_management_function_storage::allocate = default_allocate; + template deallocation_function xml_memory_management_function_storage::deallocate = default_deallocate; + + typedef xml_memory_management_function_storage xml_memory; +PUGI__NS_END + +// String utilities +PUGI__NS_BEGIN + // Get string length + PUGI__FN size_t strlength(const char_t* s) + { + assert(s); + + #ifdef PUGIXML_WCHAR_MODE + return wcslen(s); + #else + return strlen(s); + #endif + } + + // Compare two strings + PUGI__FN bool strequal(const char_t* src, const char_t* dst) + { + assert(src && dst); + + #ifdef PUGIXML_WCHAR_MODE + return wcscmp(src, dst) == 0; + #else + return strcmp(src, dst) == 0; + #endif + } + + // Compare lhs with [rhs_begin, rhs_end) + PUGI__FN bool strequalrange(const char_t* lhs, const char_t* rhs, size_t count) + { + for (size_t i = 0; i < count; ++i) + if (lhs[i] != rhs[i]) + return false; + + return lhs[count] == 0; + } + + // Get length of wide string, even if CRT lacks wide character support + PUGI__FN size_t strlength_wide(const wchar_t* s) + { + assert(s); + + #ifdef PUGIXML_WCHAR_MODE + return wcslen(s); + #else + const wchar_t* end = s; + while (*end) end++; + return static_cast(end - s); + #endif + } +PUGI__NS_END + +// auto_ptr-like object for exception recovery +PUGI__NS_BEGIN + template struct auto_deleter + { + typedef void (*D)(T*); + + T* data; + D deleter; + + auto_deleter(T* data_, D deleter_): data(data_), deleter(deleter_) + { + } + + ~auto_deleter() + { + if (data) deleter(data); + } + + T* release() + { + T* result = data; + data = 0; + return result; + } + }; +PUGI__NS_END + +#ifdef PUGIXML_COMPACT +PUGI__NS_BEGIN + class compact_hash_table + { + public: + compact_hash_table(): _items(0), _capacity(0), _count(0) + { + } + + void clear() + { + if (_items) + { + xml_memory::deallocate(_items); + _items = 0; + _capacity = 0; + _count = 0; + } + } + + void* find(const void* key) + { + if (_capacity == 0) return 0; + + item_t* item = get_item(key); + assert(item); + assert(item->key == key || (item->key == 0 && item->value == 0)); + + return item->value; + } + + void insert(const void* key, void* value) + { + assert(_capacity != 0 && _count < _capacity - _capacity / 4); + + item_t* item = get_item(key); + assert(item); + + if (item->key == 0) + { + _count++; + item->key = key; + } + + item->value = value; + } + + bool reserve(size_t extra = 16) + { + if (_count + extra >= _capacity - _capacity / 4) + return rehash(_count + extra); + + return true; + } + + private: + struct item_t + { + const void* key; + void* value; + }; + + item_t* _items; + size_t _capacity; + + size_t _count; + + bool rehash(size_t count); + + item_t* get_item(const void* key) + { + assert(key); + assert(_capacity > 0); + + size_t hashmod = _capacity - 1; + size_t bucket = hash(key) & hashmod; + + for (size_t probe = 0; probe <= hashmod; ++probe) + { + item_t& probe_item = _items[bucket]; + + if (probe_item.key == key || probe_item.key == 0) + return &probe_item; + + // hash collision, quadratic probing + bucket = (bucket + probe + 1) & hashmod; + } + + assert(false && "Hash table is full"); // unreachable + return 0; + } + + static PUGI__UNSIGNED_OVERFLOW unsigned int hash(const void* key) + { + unsigned int h = static_cast(reinterpret_cast(key) & 0xffffffff); + + // MurmurHash3 32-bit finalizer + h ^= h >> 16; + h *= 0x85ebca6bu; + h ^= h >> 13; + h *= 0xc2b2ae35u; + h ^= h >> 16; + + return h; + } + }; + + PUGI__FN_NO_INLINE bool compact_hash_table::rehash(size_t count) + { + size_t capacity = 32; + while (count >= capacity - capacity / 4) + capacity *= 2; + + compact_hash_table rt; + rt._capacity = capacity; + rt._items = static_cast(xml_memory::allocate(sizeof(item_t) * capacity)); + + if (!rt._items) + return false; + + memset(rt._items, 0, sizeof(item_t) * capacity); + + for (size_t i = 0; i < _capacity; ++i) + if (_items[i].key) + rt.insert(_items[i].key, _items[i].value); + + if (_items) + xml_memory::deallocate(_items); + + _capacity = capacity; + _items = rt._items; + + assert(_count == rt._count); + + return true; + } + +PUGI__NS_END +#endif + +PUGI__NS_BEGIN +#ifdef PUGIXML_COMPACT + static const uintptr_t xml_memory_block_alignment = 4; +#else + static const uintptr_t xml_memory_block_alignment = sizeof(void*); +#endif + + // extra metadata bits + static const uintptr_t xml_memory_page_contents_shared_mask = 64; + static const uintptr_t xml_memory_page_name_allocated_mask = 32; + static const uintptr_t xml_memory_page_value_allocated_mask = 16; + static const uintptr_t xml_memory_page_type_mask = 15; + + // combined masks for string uniqueness + static const uintptr_t xml_memory_page_name_allocated_or_shared_mask = xml_memory_page_name_allocated_mask | xml_memory_page_contents_shared_mask; + static const uintptr_t xml_memory_page_value_allocated_or_shared_mask = xml_memory_page_value_allocated_mask | xml_memory_page_contents_shared_mask; + +#ifdef PUGIXML_COMPACT + #define PUGI__GETHEADER_IMPL(object, page, flags) // unused + #define PUGI__GETPAGE_IMPL(header) (header).get_page() +#else + #define PUGI__GETHEADER_IMPL(object, page, flags) (((reinterpret_cast(object) - reinterpret_cast(page)) << 8) | (flags)) + // this macro casts pointers through void* to avoid 'cast increases required alignment of target type' warnings + #define PUGI__GETPAGE_IMPL(header) static_cast(const_cast(static_cast(reinterpret_cast(&header) - (header >> 8)))) +#endif + + #define PUGI__GETPAGE(n) PUGI__GETPAGE_IMPL((n)->header) + #define PUGI__NODETYPE(n) static_cast((n)->header & impl::xml_memory_page_type_mask) + + struct xml_allocator; + + struct xml_memory_page + { + static xml_memory_page* construct(void* memory) + { + xml_memory_page* result = static_cast(memory); + + result->allocator = 0; + result->prev = 0; + result->next = 0; + result->busy_size = 0; + result->freed_size = 0; + + #ifdef PUGIXML_COMPACT + result->compact_string_base = 0; + result->compact_shared_parent = 0; + result->compact_page_marker = 0; + #endif + + return result; + } + + xml_allocator* allocator; + + xml_memory_page* prev; + xml_memory_page* next; + + size_t busy_size; + size_t freed_size; + + #ifdef PUGIXML_COMPACT + char_t* compact_string_base; + void* compact_shared_parent; + uint32_t* compact_page_marker; + #endif + }; + + static const size_t xml_memory_page_size = + #ifdef PUGIXML_MEMORY_PAGE_SIZE + (PUGIXML_MEMORY_PAGE_SIZE) + #else + 32768 + #endif + - sizeof(xml_memory_page); + + struct xml_memory_string_header + { + uint16_t page_offset; // offset from page->data + uint16_t full_size; // 0 if string occupies whole page + }; + + struct xml_allocator + { + xml_allocator(xml_memory_page* root): _root(root), _busy_size(root->busy_size) + { + #ifdef PUGIXML_COMPACT + _hash = 0; + #endif + } + + xml_memory_page* allocate_page(size_t data_size) + { + size_t size = sizeof(xml_memory_page) + data_size; + + // allocate block with some alignment, leaving memory for worst-case padding + void* memory = xml_memory::allocate(size); + if (!memory) return 0; + + // prepare page structure + xml_memory_page* page = xml_memory_page::construct(memory); + assert(page); + + assert(this == _root->allocator); + page->allocator = this; + + return page; + } + + static void deallocate_page(xml_memory_page* page) + { + xml_memory::deallocate(page); + } + + void* allocate_memory_oob(size_t size, xml_memory_page*& out_page); + + void* allocate_memory(size_t size, xml_memory_page*& out_page) + { + if (PUGI__UNLIKELY(_busy_size + size > xml_memory_page_size)) + return allocate_memory_oob(size, out_page); + + void* buf = reinterpret_cast(_root) + sizeof(xml_memory_page) + _busy_size; + + _busy_size += size; + + out_page = _root; + + return buf; + } + + #ifdef PUGIXML_COMPACT + void* allocate_object(size_t size, xml_memory_page*& out_page) + { + void* result = allocate_memory(size + sizeof(uint32_t), out_page); + if (!result) return 0; + + // adjust for marker + ptrdiff_t offset = static_cast(result) - reinterpret_cast(out_page->compact_page_marker); + + if (PUGI__UNLIKELY(static_cast(offset) >= 256 * xml_memory_block_alignment)) + { + // insert new marker + uint32_t* marker = static_cast(result); + + *marker = static_cast(reinterpret_cast(marker) - reinterpret_cast(out_page)); + out_page->compact_page_marker = marker; + + // since we don't reuse the page space until we reallocate it, we can just pretend that we freed the marker block + // this will make sure deallocate_memory correctly tracks the size + out_page->freed_size += sizeof(uint32_t); + + return marker + 1; + } + else + { + // roll back uint32_t part + _busy_size -= sizeof(uint32_t); + + return result; + } + } + #else + void* allocate_object(size_t size, xml_memory_page*& out_page) + { + return allocate_memory(size, out_page); + } + #endif + + void deallocate_memory(void* ptr, size_t size, xml_memory_page* page) + { + if (page == _root) page->busy_size = _busy_size; + + assert(ptr >= reinterpret_cast(page) + sizeof(xml_memory_page) && ptr < reinterpret_cast(page) + sizeof(xml_memory_page) + page->busy_size); + (void)!ptr; + + page->freed_size += size; + assert(page->freed_size <= page->busy_size); + + if (page->freed_size == page->busy_size) + { + if (page->next == 0) + { + assert(_root == page); + + // top page freed, just reset sizes + page->busy_size = 0; + page->freed_size = 0; + + #ifdef PUGIXML_COMPACT + // reset compact state to maximize efficiency + page->compact_string_base = 0; + page->compact_shared_parent = 0; + page->compact_page_marker = 0; + #endif + + _busy_size = 0; + } + else + { + assert(_root != page); + assert(page->prev); + + // remove from the list + page->prev->next = page->next; + page->next->prev = page->prev; + + // deallocate + deallocate_page(page); + } + } + } + + char_t* allocate_string(size_t length) + { + static const size_t max_encoded_offset = (1 << 16) * xml_memory_block_alignment; + + PUGI__STATIC_ASSERT(xml_memory_page_size <= max_encoded_offset); + + // allocate memory for string and header block + size_t size = sizeof(xml_memory_string_header) + length * sizeof(char_t); + + // round size up to block alignment boundary + size_t full_size = (size + (xml_memory_block_alignment - 1)) & ~(xml_memory_block_alignment - 1); + + xml_memory_page* page; + xml_memory_string_header* header = static_cast(allocate_memory(full_size, page)); + + if (!header) return 0; + + // setup header + ptrdiff_t page_offset = reinterpret_cast(header) - reinterpret_cast(page) - sizeof(xml_memory_page); + + assert(page_offset % xml_memory_block_alignment == 0); + assert(page_offset >= 0 && static_cast(page_offset) < max_encoded_offset); + header->page_offset = static_cast(static_cast(page_offset) / xml_memory_block_alignment); + + // full_size == 0 for large strings that occupy the whole page + assert(full_size % xml_memory_block_alignment == 0); + assert(full_size < max_encoded_offset || (page->busy_size == full_size && page_offset == 0)); + header->full_size = static_cast(full_size < max_encoded_offset ? full_size / xml_memory_block_alignment : 0); + + // round-trip through void* to avoid 'cast increases required alignment of target type' warning + // header is guaranteed a pointer-sized alignment, which should be enough for char_t + return static_cast(static_cast(header + 1)); + } + + void deallocate_string(char_t* string) + { + // this function casts pointers through void* to avoid 'cast increases required alignment of target type' warnings + // we're guaranteed the proper (pointer-sized) alignment on the input string if it was allocated via allocate_string + + // get header + xml_memory_string_header* header = static_cast(static_cast(string)) - 1; + assert(header); + + // deallocate + size_t page_offset = sizeof(xml_memory_page) + header->page_offset * xml_memory_block_alignment; + xml_memory_page* page = reinterpret_cast(static_cast(reinterpret_cast(header) - page_offset)); + + // if full_size == 0 then this string occupies the whole page + size_t full_size = header->full_size == 0 ? page->busy_size : header->full_size * xml_memory_block_alignment; + + deallocate_memory(header, full_size, page); + } + + bool reserve() + { + #ifdef PUGIXML_COMPACT + return _hash->reserve(); + #else + return true; + #endif + } + + xml_memory_page* _root; + size_t _busy_size; + + #ifdef PUGIXML_COMPACT + compact_hash_table* _hash; + #endif + }; + + PUGI__FN_NO_INLINE void* xml_allocator::allocate_memory_oob(size_t size, xml_memory_page*& out_page) + { + const size_t large_allocation_threshold = xml_memory_page_size / 4; + + xml_memory_page* page = allocate_page(size <= large_allocation_threshold ? xml_memory_page_size : size); + out_page = page; + + if (!page) return 0; + + if (size <= large_allocation_threshold) + { + _root->busy_size = _busy_size; + + // insert page at the end of linked list + page->prev = _root; + _root->next = page; + _root = page; + + _busy_size = size; + } + else + { + // insert page before the end of linked list, so that it is deleted as soon as possible + // the last page is not deleted even if it's empty (see deallocate_memory) + assert(_root->prev); + + page->prev = _root->prev; + page->next = _root; + + _root->prev->next = page; + _root->prev = page; + + page->busy_size = size; + } + + return reinterpret_cast(page) + sizeof(xml_memory_page); + } +PUGI__NS_END + +#ifdef PUGIXML_COMPACT +PUGI__NS_BEGIN + static const uintptr_t compact_alignment_log2 = 2; + static const uintptr_t compact_alignment = 1 << compact_alignment_log2; + + class compact_header + { + public: + compact_header(xml_memory_page* page, unsigned int flags) + { + PUGI__STATIC_ASSERT(xml_memory_block_alignment == compact_alignment); + + ptrdiff_t offset = (reinterpret_cast(this) - reinterpret_cast(page->compact_page_marker)); + assert(offset % compact_alignment == 0 && static_cast(offset) < 256 * compact_alignment); + + _page = static_cast(offset >> compact_alignment_log2); + _flags = static_cast(flags); + } + + void operator&=(uintptr_t mod) + { + _flags &= static_cast(mod); + } + + void operator|=(uintptr_t mod) + { + _flags |= static_cast(mod); + } + + uintptr_t operator&(uintptr_t mod) const + { + return _flags & mod; + } + + xml_memory_page* get_page() const + { + // round-trip through void* to silence 'cast increases required alignment of target type' warnings + const char* page_marker = reinterpret_cast(this) - (_page << compact_alignment_log2); + const char* page = page_marker - *reinterpret_cast(static_cast(page_marker)); + + return const_cast(reinterpret_cast(static_cast(page))); + } + + private: + unsigned char _page; + unsigned char _flags; + }; + + PUGI__FN xml_memory_page* compact_get_page(const void* object, int header_offset) + { + const compact_header* header = reinterpret_cast(static_cast(object) - header_offset); + + return header->get_page(); + } + + template PUGI__FN_NO_INLINE T* compact_get_value(const void* object) + { + return static_cast(compact_get_page(object, header_offset)->allocator->_hash->find(object)); + } + + template PUGI__FN_NO_INLINE void compact_set_value(const void* object, T* value) + { + compact_get_page(object, header_offset)->allocator->_hash->insert(object, value); + } + + template class compact_pointer + { + public: + compact_pointer(): _data(0) + { + } + + void operator=(const compact_pointer& rhs) + { + *this = rhs + 0; + } + + void operator=(T* value) + { + if (value) + { + // value is guaranteed to be compact-aligned; 'this' is not + // our decoding is based on 'this' aligned to compact alignment downwards (see operator T*) + // so for negative offsets (e.g. -3) we need to adjust the diff by compact_alignment - 1 to + // compensate for arithmetic shift rounding for negative values + ptrdiff_t diff = reinterpret_cast(value) - reinterpret_cast(this); + ptrdiff_t offset = ((diff + int(compact_alignment - 1)) >> compact_alignment_log2) - start; + + if (static_cast(offset) <= 253) + _data = static_cast(offset + 1); + else + { + compact_set_value(this, value); + + _data = 255; + } + } + else + _data = 0; + } + + operator T*() const + { + if (_data) + { + if (_data < 255) + { + uintptr_t base = reinterpret_cast(this) & ~(compact_alignment - 1); + + return reinterpret_cast(base + (_data - 1 + start) * compact_alignment); + } + else + return compact_get_value(this); + } + else + return 0; + } + + T* operator->() const + { + return *this; + } + + private: + unsigned char _data; + }; + + template class compact_pointer_parent + { + public: + compact_pointer_parent(): _data(0) + { + } + + void operator=(const compact_pointer_parent& rhs) + { + *this = rhs + 0; + } + + void operator=(T* value) + { + if (value) + { + // value is guaranteed to be compact-aligned; 'this' is not + // our decoding is based on 'this' aligned to compact alignment downwards (see operator T*) + // so for negative offsets (e.g. -3) we need to adjust the diff by compact_alignment - 1 to + // compensate for arithmetic shift behavior for negative values + ptrdiff_t diff = reinterpret_cast(value) - reinterpret_cast(this); + ptrdiff_t offset = ((diff + int(compact_alignment - 1)) >> compact_alignment_log2) + 65533; + + if (static_cast(offset) <= 65533) + { + _data = static_cast(offset + 1); + } + else + { + xml_memory_page* page = compact_get_page(this, header_offset); + + if (PUGI__UNLIKELY(page->compact_shared_parent == 0)) + page->compact_shared_parent = value; + + if (page->compact_shared_parent == value) + { + _data = 65534; + } + else + { + compact_set_value(this, value); + + _data = 65535; + } + } + } + else + { + _data = 0; + } + } + + operator T*() const + { + if (_data) + { + if (_data < 65534) + { + uintptr_t base = reinterpret_cast(this) & ~(compact_alignment - 1); + + return reinterpret_cast(base + (_data - 1 - 65533) * compact_alignment); + } + else if (_data == 65534) + return static_cast(compact_get_page(this, header_offset)->compact_shared_parent); + else + return compact_get_value(this); + } + else + return 0; + } + + T* operator->() const + { + return *this; + } + + private: + uint16_t _data; + }; + + template class compact_string + { + public: + compact_string(): _data(0) + { + } + + void operator=(const compact_string& rhs) + { + *this = rhs + 0; + } + + void operator=(char_t* value) + { + if (value) + { + xml_memory_page* page = compact_get_page(this, header_offset); + + if (PUGI__UNLIKELY(page->compact_string_base == 0)) + page->compact_string_base = value; + + ptrdiff_t offset = value - page->compact_string_base; + + if (static_cast(offset) < (65535 << 7)) + { + // round-trip through void* to silence 'cast increases required alignment of target type' warnings + uint16_t* base = reinterpret_cast(static_cast(reinterpret_cast(this) - base_offset)); + + if (*base == 0) + { + *base = static_cast((offset >> 7) + 1); + _data = static_cast((offset & 127) + 1); + } + else + { + ptrdiff_t remainder = offset - ((*base - 1) << 7); + + if (static_cast(remainder) <= 253) + { + _data = static_cast(remainder + 1); + } + else + { + compact_set_value(this, value); + + _data = 255; + } + } + } + else + { + compact_set_value(this, value); + + _data = 255; + } + } + else + { + _data = 0; + } + } + + operator char_t*() const + { + if (_data) + { + if (_data < 255) + { + xml_memory_page* page = compact_get_page(this, header_offset); + + // round-trip through void* to silence 'cast increases required alignment of target type' warnings + const uint16_t* base = reinterpret_cast(static_cast(reinterpret_cast(this) - base_offset)); + assert(*base); + + ptrdiff_t offset = ((*base - 1) << 7) + (_data - 1); + + return page->compact_string_base + offset; + } + else + { + return compact_get_value(this); + } + } + else + return 0; + } + + private: + unsigned char _data; + }; +PUGI__NS_END +#endif + +#ifdef PUGIXML_COMPACT +OIIO_NAMESPACE_3_1_BEGIN namespace pugi +{ + struct xml_attribute_struct + { + xml_attribute_struct(impl::xml_memory_page* page): header(page, 0), namevalue_base(0) + { + PUGI__STATIC_ASSERT(sizeof(xml_attribute_struct) == 8); + } + + impl::compact_header header; + + uint16_t namevalue_base; + + impl::compact_string<4, 2> name; + impl::compact_string<5, 3> value; + + impl::compact_pointer prev_attribute_c; + impl::compact_pointer next_attribute; + }; + + struct xml_node_struct + { + xml_node_struct(impl::xml_memory_page* page, xml_node_type type): header(page, type), namevalue_base(0) + { + PUGI__STATIC_ASSERT(sizeof(xml_node_struct) == 12); + } + + impl::compact_header header; + + uint16_t namevalue_base; + + impl::compact_string<4, 2> name; + impl::compact_string<5, 3> value; + + impl::compact_pointer_parent parent; + + impl::compact_pointer first_child; + + impl::compact_pointer prev_sibling_c; + impl::compact_pointer next_sibling; + + impl::compact_pointer first_attribute; + }; +} OIIO_NAMESPACE_3_1_END +#else +OIIO_NAMESPACE_3_1_BEGIN namespace pugi +{ + struct xml_attribute_struct + { + xml_attribute_struct(impl::xml_memory_page* page): name(0), value(0), prev_attribute_c(0), next_attribute(0) + { + header = PUGI__GETHEADER_IMPL(this, page, 0); + } + + uintptr_t header; + + char_t* name; + char_t* value; + + xml_attribute_struct* prev_attribute_c; + xml_attribute_struct* next_attribute; + }; + + struct xml_node_struct + { + xml_node_struct(impl::xml_memory_page* page, xml_node_type type): name(0), value(0), parent(0), first_child(0), prev_sibling_c(0), next_sibling(0), first_attribute(0) + { + header = PUGI__GETHEADER_IMPL(this, page, type); + } + + uintptr_t header; + + char_t* name; + char_t* value; + + xml_node_struct* parent; + + xml_node_struct* first_child; + + xml_node_struct* prev_sibling_c; + xml_node_struct* next_sibling; + + xml_attribute_struct* first_attribute; + }; +} OIIO_NAMESPACE_3_1_END +#endif + +PUGI__NS_BEGIN + struct xml_extra_buffer + { + char_t* buffer; + xml_extra_buffer* next; + }; + + struct xml_document_struct: public xml_node_struct, public xml_allocator + { + xml_document_struct(xml_memory_page* page): xml_node_struct(page, node_document), xml_allocator(page), buffer(0), extra_buffers(0) + { + } + + const char_t* buffer; + + xml_extra_buffer* extra_buffers; + + #ifdef PUGIXML_COMPACT + compact_hash_table hash; + #endif + }; + + template inline xml_allocator& get_allocator(const Object* object) + { + assert(object); + + return *PUGI__GETPAGE(object)->allocator; + } + + template inline xml_document_struct& get_document(const Object* object) + { + assert(object); + + return *static_cast(PUGI__GETPAGE(object)->allocator); + } +PUGI__NS_END + +// Low-level DOM operations +PUGI__NS_BEGIN + inline xml_attribute_struct* allocate_attribute(xml_allocator& alloc) + { + xml_memory_page* page; + void* memory = alloc.allocate_object(sizeof(xml_attribute_struct), page); + if (!memory) return 0; + + return new (memory) xml_attribute_struct(page); + } + + inline xml_node_struct* allocate_node(xml_allocator& alloc, xml_node_type type) + { + xml_memory_page* page; + void* memory = alloc.allocate_object(sizeof(xml_node_struct), page); + if (!memory) return 0; + + return new (memory) xml_node_struct(page, type); + } + + inline void destroy_attribute(xml_attribute_struct* a, xml_allocator& alloc) + { + if (a->header & impl::xml_memory_page_name_allocated_mask) + alloc.deallocate_string(a->name); + + if (a->header & impl::xml_memory_page_value_allocated_mask) + alloc.deallocate_string(a->value); + + alloc.deallocate_memory(a, sizeof(xml_attribute_struct), PUGI__GETPAGE(a)); + } + + inline void destroy_node(xml_node_struct* n, xml_allocator& alloc) + { + if (n->header & impl::xml_memory_page_name_allocated_mask) + alloc.deallocate_string(n->name); + + if (n->header & impl::xml_memory_page_value_allocated_mask) + alloc.deallocate_string(n->value); + + for (xml_attribute_struct* attr = n->first_attribute; attr; ) + { + xml_attribute_struct* next = attr->next_attribute; + + destroy_attribute(attr, alloc); + + attr = next; + } + + for (xml_node_struct* child = n->first_child; child; ) + { + xml_node_struct* next = child->next_sibling; + + destroy_node(child, alloc); + + child = next; + } + + alloc.deallocate_memory(n, sizeof(xml_node_struct), PUGI__GETPAGE(n)); + } + + inline void append_node(xml_node_struct* child, xml_node_struct* node) + { + child->parent = node; + + xml_node_struct* head = node->first_child; + + if (head) + { + xml_node_struct* tail = head->prev_sibling_c; + + tail->next_sibling = child; + child->prev_sibling_c = tail; + head->prev_sibling_c = child; + } + else + { + node->first_child = child; + child->prev_sibling_c = child; + } + } + + inline void prepend_node(xml_node_struct* child, xml_node_struct* node) + { + child->parent = node; + + xml_node_struct* head = node->first_child; + + if (head) + { + child->prev_sibling_c = head->prev_sibling_c; + head->prev_sibling_c = child; + } + else + child->prev_sibling_c = child; + + child->next_sibling = head; + node->first_child = child; + } + + inline void insert_node_after(xml_node_struct* child, xml_node_struct* node) + { + xml_node_struct* parent = node->parent; + + child->parent = parent; + + if (node->next_sibling) + node->next_sibling->prev_sibling_c = child; + else + parent->first_child->prev_sibling_c = child; + + child->next_sibling = node->next_sibling; + child->prev_sibling_c = node; + + node->next_sibling = child; + } + + inline void insert_node_before(xml_node_struct* child, xml_node_struct* node) + { + xml_node_struct* parent = node->parent; + + child->parent = parent; + + if (node->prev_sibling_c->next_sibling) + node->prev_sibling_c->next_sibling = child; + else + parent->first_child = child; + + child->prev_sibling_c = node->prev_sibling_c; + child->next_sibling = node; + + node->prev_sibling_c = child; + } + + inline void remove_node(xml_node_struct* node) + { + xml_node_struct* parent = node->parent; + + if (node->next_sibling) + node->next_sibling->prev_sibling_c = node->prev_sibling_c; + else + parent->first_child->prev_sibling_c = node->prev_sibling_c; + + if (node->prev_sibling_c->next_sibling) + node->prev_sibling_c->next_sibling = node->next_sibling; + else + parent->first_child = node->next_sibling; + + node->parent = 0; + node->prev_sibling_c = 0; + node->next_sibling = 0; + } + + inline void append_attribute(xml_attribute_struct* attr, xml_node_struct* node) + { + xml_attribute_struct* head = node->first_attribute; + + if (head) + { + xml_attribute_struct* tail = head->prev_attribute_c; + + tail->next_attribute = attr; + attr->prev_attribute_c = tail; + head->prev_attribute_c = attr; + } + else + { + node->first_attribute = attr; + attr->prev_attribute_c = attr; + } + } + + inline void prepend_attribute(xml_attribute_struct* attr, xml_node_struct* node) + { + xml_attribute_struct* head = node->first_attribute; + + if (head) + { + attr->prev_attribute_c = head->prev_attribute_c; + head->prev_attribute_c = attr; + } + else + attr->prev_attribute_c = attr; + + attr->next_attribute = head; + node->first_attribute = attr; + } + + inline void insert_attribute_after(xml_attribute_struct* attr, xml_attribute_struct* place, xml_node_struct* node) + { + if (place->next_attribute) + place->next_attribute->prev_attribute_c = attr; + else + node->first_attribute->prev_attribute_c = attr; + + attr->next_attribute = place->next_attribute; + attr->prev_attribute_c = place; + place->next_attribute = attr; + } + + inline void insert_attribute_before(xml_attribute_struct* attr, xml_attribute_struct* place, xml_node_struct* node) + { + if (place->prev_attribute_c->next_attribute) + place->prev_attribute_c->next_attribute = attr; + else + node->first_attribute = attr; + + attr->prev_attribute_c = place->prev_attribute_c; + attr->next_attribute = place; + place->prev_attribute_c = attr; + } + + inline void remove_attribute(xml_attribute_struct* attr, xml_node_struct* node) + { + if (attr->next_attribute) + attr->next_attribute->prev_attribute_c = attr->prev_attribute_c; + else + node->first_attribute->prev_attribute_c = attr->prev_attribute_c; + + if (attr->prev_attribute_c->next_attribute) + attr->prev_attribute_c->next_attribute = attr->next_attribute; + else + node->first_attribute = attr->next_attribute; + + attr->prev_attribute_c = 0; + attr->next_attribute = 0; + } + + PUGI__FN_NO_INLINE xml_node_struct* append_new_node(xml_node_struct* node, xml_allocator& alloc, xml_node_type type = node_element) + { + if (!alloc.reserve()) return 0; + + xml_node_struct* child = allocate_node(alloc, type); + if (!child) return 0; + + append_node(child, node); + + return child; + } + + PUGI__FN_NO_INLINE xml_attribute_struct* append_new_attribute(xml_node_struct* node, xml_allocator& alloc) + { + if (!alloc.reserve()) return 0; + + xml_attribute_struct* attr = allocate_attribute(alloc); + if (!attr) return 0; + + append_attribute(attr, node); + + return attr; + } +PUGI__NS_END + +// Helper classes for code generation +PUGI__NS_BEGIN + struct opt_false + { + enum { value = 0 }; + }; + + struct opt_true + { + enum { value = 1 }; + }; +PUGI__NS_END + +// Unicode utilities +PUGI__NS_BEGIN + inline uint16_t endian_swap(uint16_t value) + { + return static_cast(((value & 0xff) << 8) | (value >> 8)); + } + + inline uint32_t endian_swap(uint32_t value) + { + return ((value & 0xff) << 24) | ((value & 0xff00) << 8) | ((value & 0xff0000) >> 8) | (value >> 24); + } + + struct utf8_counter + { + typedef size_t value_type; + + static value_type low(value_type result, uint32_t ch) + { + // U+0000..U+007F + if (ch < 0x80) return result + 1; + // U+0080..U+07FF + else if (ch < 0x800) return result + 2; + // U+0800..U+FFFF + else return result + 3; + } + + static value_type high(value_type result, uint32_t) + { + // U+10000..U+10FFFF + return result + 4; + } + }; + + struct utf8_writer + { + typedef uint8_t* value_type; + + static value_type low(value_type result, uint32_t ch) + { + // U+0000..U+007F + if (ch < 0x80) + { + *result = static_cast(ch); + return result + 1; + } + // U+0080..U+07FF + else if (ch < 0x800) + { + result[0] = static_cast(0xC0 | (ch >> 6)); + result[1] = static_cast(0x80 | (ch & 0x3F)); + return result + 2; + } + // U+0800..U+FFFF + else + { + result[0] = static_cast(0xE0 | (ch >> 12)); + result[1] = static_cast(0x80 | ((ch >> 6) & 0x3F)); + result[2] = static_cast(0x80 | (ch & 0x3F)); + return result + 3; + } + } + + static value_type high(value_type result, uint32_t ch) + { + // U+10000..U+10FFFF + result[0] = static_cast(0xF0 | (ch >> 18)); + result[1] = static_cast(0x80 | ((ch >> 12) & 0x3F)); + result[2] = static_cast(0x80 | ((ch >> 6) & 0x3F)); + result[3] = static_cast(0x80 | (ch & 0x3F)); + return result + 4; + } + + static value_type any(value_type result, uint32_t ch) + { + return (ch < 0x10000) ? low(result, ch) : high(result, ch); + } + }; + + struct utf16_counter + { + typedef size_t value_type; + + static value_type low(value_type result, uint32_t) + { + return result + 1; + } + + static value_type high(value_type result, uint32_t) + { + return result + 2; + } + }; + + struct utf16_writer + { + typedef uint16_t* value_type; + + static value_type low(value_type result, uint32_t ch) + { + *result = static_cast(ch); + + return result + 1; + } + + static value_type high(value_type result, uint32_t ch) + { + uint32_t msh = static_cast(ch - 0x10000) >> 10; + uint32_t lsh = static_cast(ch - 0x10000) & 0x3ff; + + result[0] = static_cast(0xD800 + msh); + result[1] = static_cast(0xDC00 + lsh); + + return result + 2; + } + + static value_type any(value_type result, uint32_t ch) + { + return (ch < 0x10000) ? low(result, ch) : high(result, ch); + } + }; + + struct utf32_counter + { + typedef size_t value_type; + + static value_type low(value_type result, uint32_t) + { + return result + 1; + } + + static value_type high(value_type result, uint32_t) + { + return result + 1; + } + }; + + struct utf32_writer + { + typedef uint32_t* value_type; + + static value_type low(value_type result, uint32_t ch) + { + *result = ch; + + return result + 1; + } + + static value_type high(value_type result, uint32_t ch) + { + *result = ch; + + return result + 1; + } + + static value_type any(value_type result, uint32_t ch) + { + *result = ch; + + return result + 1; + } + }; + + struct latin1_writer + { + typedef uint8_t* value_type; + + static value_type low(value_type result, uint32_t ch) + { + *result = static_cast(ch > 255 ? '?' : ch); + + return result + 1; + } + + static value_type high(value_type result, uint32_t ch) + { + (void)ch; + + *result = '?'; + + return result + 1; + } + }; + + struct utf8_decoder + { + typedef uint8_t type; + + template static inline typename Traits::value_type process(const uint8_t* data, size_t size, typename Traits::value_type result, Traits) + { + const uint8_t utf8_byte_mask = 0x3f; + + while (size) + { + uint8_t lead = *data; + + // 0xxxxxxx -> U+0000..U+007F + if (lead < 0x80) + { + result = Traits::low(result, lead); + data += 1; + size -= 1; + + // process aligned single-byte (ascii) blocks + if ((reinterpret_cast(data) & 3) == 0) + { + // round-trip through void* to silence 'cast increases required alignment of target type' warnings + while (size >= 4 && (*static_cast(static_cast(data)) & 0x80808080) == 0) + { + result = Traits::low(result, data[0]); + result = Traits::low(result, data[1]); + result = Traits::low(result, data[2]); + result = Traits::low(result, data[3]); + data += 4; + size -= 4; + } + } + } + // 110xxxxx -> U+0080..U+07FF + else if (static_cast(lead - 0xC0) < 0x20 && size >= 2 && (data[1] & 0xc0) == 0x80) + { + result = Traits::low(result, ((lead & ~0xC0) << 6) | (data[1] & utf8_byte_mask)); + data += 2; + size -= 2; + } + // 1110xxxx -> U+0800-U+FFFF + else if (static_cast(lead - 0xE0) < 0x10 && size >= 3 && (data[1] & 0xc0) == 0x80 && (data[2] & 0xc0) == 0x80) + { + result = Traits::low(result, ((lead & ~0xE0) << 12) | ((data[1] & utf8_byte_mask) << 6) | (data[2] & utf8_byte_mask)); + data += 3; + size -= 3; + } + // 11110xxx -> U+10000..U+10FFFF + else if (static_cast(lead - 0xF0) < 0x08 && size >= 4 && (data[1] & 0xc0) == 0x80 && (data[2] & 0xc0) == 0x80 && (data[3] & 0xc0) == 0x80) + { + result = Traits::high(result, ((lead & ~0xF0) << 18) | ((data[1] & utf8_byte_mask) << 12) | ((data[2] & utf8_byte_mask) << 6) | (data[3] & utf8_byte_mask)); + data += 4; + size -= 4; + } + // 10xxxxxx or 11111xxx -> invalid + else + { + data += 1; + size -= 1; + } + } + + return result; + } + }; + + template struct utf16_decoder + { + typedef uint16_t type; + + template static inline typename Traits::value_type process(const uint16_t* data, size_t size, typename Traits::value_type result, Traits) + { + while (size) + { + uint16_t lead = opt_swap::value ? endian_swap(*data) : *data; + + // U+0000..U+D7FF + if (lead < 0xD800) + { + result = Traits::low(result, lead); + data += 1; + size -= 1; + } + // U+E000..U+FFFF + else if (static_cast(lead - 0xE000) < 0x2000) + { + result = Traits::low(result, lead); + data += 1; + size -= 1; + } + // surrogate pair lead + else if (static_cast(lead - 0xD800) < 0x400 && size >= 2) + { + uint16_t next = opt_swap::value ? endian_swap(data[1]) : data[1]; + + if (static_cast(next - 0xDC00) < 0x400) + { + result = Traits::high(result, 0x10000 + ((lead & 0x3ff) << 10) + (next & 0x3ff)); + data += 2; + size -= 2; + } + else + { + data += 1; + size -= 1; + } + } + else + { + data += 1; + size -= 1; + } + } + + return result; + } + }; + + template struct utf32_decoder + { + typedef uint32_t type; + + template static inline typename Traits::value_type process(const uint32_t* data, size_t size, typename Traits::value_type result, Traits) + { + while (size) + { + uint32_t lead = opt_swap::value ? endian_swap(*data) : *data; + + // U+0000..U+FFFF + if (lead < 0x10000) + { + result = Traits::low(result, lead); + data += 1; + size -= 1; + } + // U+10000..U+10FFFF + else + { + result = Traits::high(result, lead); + data += 1; + size -= 1; + } + } + + return result; + } + }; + + struct latin1_decoder + { + typedef uint8_t type; + + template static inline typename Traits::value_type process(const uint8_t* data, size_t size, typename Traits::value_type result, Traits) + { + while (size) + { + result = Traits::low(result, *data); + data += 1; + size -= 1; + } + + return result; + } + }; + + template struct wchar_selector; + + template <> struct wchar_selector<2> + { + typedef uint16_t type; + typedef utf16_counter counter; + typedef utf16_writer writer; + typedef utf16_decoder decoder; + }; + + template <> struct wchar_selector<4> + { + typedef uint32_t type; + typedef utf32_counter counter; + typedef utf32_writer writer; + typedef utf32_decoder decoder; + }; + + typedef wchar_selector::counter wchar_counter; + typedef wchar_selector::writer wchar_writer; + + struct wchar_decoder + { + typedef wchar_t type; + + template static inline typename Traits::value_type process(const wchar_t* data, size_t size, typename Traits::value_type result, Traits traits) + { + typedef wchar_selector::decoder decoder; + + return decoder::process(reinterpret_cast(data), size, result, traits); + } + }; + +#ifdef PUGIXML_WCHAR_MODE + PUGI__FN void convert_wchar_endian_swap(wchar_t* result, const wchar_t* data, size_t length) + { + for (size_t i = 0; i < length; ++i) + result[i] = static_cast(endian_swap(static_cast::type>(data[i]))); + } +#endif +PUGI__NS_END + +PUGI__NS_BEGIN + enum chartype_t + { + ct_parse_pcdata = 1, // \0, &, \r, < + ct_parse_attr = 2, // \0, &, \r, ', " + ct_parse_attr_ws = 4, // \0, &, \r, ', ", \n, tab + ct_space = 8, // \r, \n, space, tab + ct_parse_cdata = 16, // \0, ], >, \r + ct_parse_comment = 32, // \0, -, >, \r + ct_symbol = 64, // Any symbol > 127, a-z, A-Z, 0-9, _, :, -, . + ct_start_symbol = 128 // Any symbol > 127, a-z, A-Z, _, : + }; + + static const unsigned char chartype_table[256] = + { + 55, 0, 0, 0, 0, 0, 0, 0, 0, 12, 12, 0, 0, 63, 0, 0, // 0-15 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 16-31 + 8, 0, 6, 0, 0, 0, 7, 6, 0, 0, 0, 0, 0, 96, 64, 0, // 32-47 + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 192, 0, 1, 0, 48, 0, // 48-63 + 0, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, // 64-79 + 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 0, 0, 16, 0, 192, // 80-95 + 0, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, // 96-111 + 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 0, 0, 0, 0, 0, // 112-127 + + 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, // 128+ + 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, + 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, + 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, + 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, + 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, + 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, + 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, 192 + }; + + enum chartypex_t + { + ctx_special_pcdata = 1, // Any symbol >= 0 and < 32 (except \t, \r, \n), &, <, > + ctx_special_attr = 2, // Any symbol >= 0 and < 32, &, <, ", ' + ctx_start_symbol = 4, // Any symbol > 127, a-z, A-Z, _ + ctx_digit = 8, // 0-9 + ctx_symbol = 16 // Any symbol > 127, a-z, A-Z, 0-9, _, -, . + }; + + static const unsigned char chartypex_table[256] = + { + 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 3, 3, 2, 3, 3, // 0-15 + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, // 16-31 + 0, 0, 2, 0, 0, 0, 3, 2, 0, 0, 0, 0, 0, 16, 16, 0, // 32-47 + 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 0, 0, 3, 0, 1, 0, // 48-63 + + 0, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, // 64-79 + 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 0, 0, 0, 0, 20, // 80-95 + 0, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, // 96-111 + 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 0, 0, 0, 0, 0, // 112-127 + + 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, // 128+ + 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, + 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, + 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, + 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, + 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, + 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, + 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20 + }; + +#ifdef PUGIXML_WCHAR_MODE + #define PUGI__IS_CHARTYPE_IMPL(c, ct, table) ((static_cast(c) < 128 ? table[static_cast(c)] : table[128]) & (ct)) +#else + #define PUGI__IS_CHARTYPE_IMPL(c, ct, table) (table[static_cast(c)] & (ct)) +#endif + + #define PUGI__IS_CHARTYPE(c, ct) PUGI__IS_CHARTYPE_IMPL(c, ct, chartype_table) + #define PUGI__IS_CHARTYPEX(c, ct) PUGI__IS_CHARTYPE_IMPL(c, ct, chartypex_table) + + PUGI__FN bool is_little_endian() + { + unsigned int ui = 1; + + return *reinterpret_cast(&ui) == 1; + } + + PUGI__FN xml_encoding get_wchar_encoding() + { + PUGI__STATIC_ASSERT(sizeof(wchar_t) == 2 || sizeof(wchar_t) == 4); + + if (sizeof(wchar_t) == 2) + return is_little_endian() ? encoding_utf16_le : encoding_utf16_be; + else + return is_little_endian() ? encoding_utf32_le : encoding_utf32_be; + } + + PUGI__FN bool parse_declaration_encoding(const uint8_t* data, size_t size, const uint8_t*& out_encoding, size_t& out_length) + { + #define PUGI__SCANCHAR(ch) { if (offset >= size || data[offset] != ch) return false; offset++; } + #define PUGI__SCANCHARTYPE(ct) { while (offset < size && PUGI__IS_CHARTYPE(data[offset], ct)) offset++; } + + // check if we have a non-empty XML declaration + if (size < 6 || !((data[0] == '<') & (data[1] == '?') & (data[2] == 'x') & (data[3] == 'm') & (data[4] == 'l') && PUGI__IS_CHARTYPE(data[5], ct_space))) + return false; + + // scan XML declaration until the encoding field + for (size_t i = 6; i + 1 < size; ++i) + { + // declaration can not contain ? in quoted values + if (data[i] == '?') + return false; + + if (data[i] == 'e' && data[i + 1] == 'n') + { + size_t offset = i; + + // encoding follows the version field which can't contain 'en' so this has to be the encoding if XML is well formed + PUGI__SCANCHAR('e'); PUGI__SCANCHAR('n'); PUGI__SCANCHAR('c'); PUGI__SCANCHAR('o'); + PUGI__SCANCHAR('d'); PUGI__SCANCHAR('i'); PUGI__SCANCHAR('n'); PUGI__SCANCHAR('g'); + + // S? = S? + PUGI__SCANCHARTYPE(ct_space); + PUGI__SCANCHAR('='); + PUGI__SCANCHARTYPE(ct_space); + + // the only two valid delimiters are ' and " + uint8_t delimiter = (offset < size && data[offset] == '"') ? '"' : '\''; + + PUGI__SCANCHAR(delimiter); + + size_t start = offset; + + out_encoding = data + offset; + + PUGI__SCANCHARTYPE(ct_symbol); + + out_length = offset - start; + + PUGI__SCANCHAR(delimiter); + + return true; + } + } + + return false; + + #undef PUGI__SCANCHAR + #undef PUGI__SCANCHARTYPE + } + + PUGI__FN xml_encoding guess_buffer_encoding(const uint8_t* data, size_t size) + { + // skip encoding autodetection if input buffer is too small + if (size < 4) return encoding_utf8; + + uint8_t d0 = data[0], d1 = data[1], d2 = data[2], d3 = data[3]; + + // look for BOM in first few bytes + if (d0 == 0 && d1 == 0 && d2 == 0xfe && d3 == 0xff) return encoding_utf32_be; + if (d0 == 0xff && d1 == 0xfe && d2 == 0 && d3 == 0) return encoding_utf32_le; + if (d0 == 0xfe && d1 == 0xff) return encoding_utf16_be; + if (d0 == 0xff && d1 == 0xfe) return encoding_utf16_le; + if (d0 == 0xef && d1 == 0xbb && d2 == 0xbf) return encoding_utf8; + + // look for <, (contents); + + return guess_buffer_encoding(data, size); + } + + PUGI__FN bool get_mutable_buffer(char_t*& out_buffer, size_t& out_length, const void* contents, size_t size, bool is_mutable) + { + size_t length = size / sizeof(char_t); + + if (is_mutable) + { + out_buffer = static_cast(const_cast(contents)); + out_length = length; + } + else + { + char_t* buffer = static_cast(xml_memory::allocate((length + 1) * sizeof(char_t))); + if (!buffer) return false; + + if (contents) + memcpy(buffer, contents, length * sizeof(char_t)); + else + assert(length == 0); + + buffer[length] = 0; + + out_buffer = buffer; + out_length = length + 1; + } + + return true; + } + +#ifdef PUGIXML_WCHAR_MODE + PUGI__FN bool need_endian_swap_utf(xml_encoding le, xml_encoding re) + { + return (le == encoding_utf16_be && re == encoding_utf16_le) || (le == encoding_utf16_le && re == encoding_utf16_be) || + (le == encoding_utf32_be && re == encoding_utf32_le) || (le == encoding_utf32_le && re == encoding_utf32_be); + } + + PUGI__FN bool convert_buffer_endian_swap(char_t*& out_buffer, size_t& out_length, const void* contents, size_t size, bool is_mutable) + { + const char_t* data = static_cast(contents); + size_t length = size / sizeof(char_t); + + if (is_mutable) + { + char_t* buffer = const_cast(data); + + convert_wchar_endian_swap(buffer, data, length); + + out_buffer = buffer; + out_length = length; + } + else + { + char_t* buffer = static_cast(xml_memory::allocate((length + 1) * sizeof(char_t))); + if (!buffer) return false; + + convert_wchar_endian_swap(buffer, data, length); + buffer[length] = 0; + + out_buffer = buffer; + out_length = length + 1; + } + + return true; + } + + template PUGI__FN bool convert_buffer_generic(char_t*& out_buffer, size_t& out_length, const void* contents, size_t size, D) + { + const typename D::type* data = static_cast(contents); + size_t data_length = size / sizeof(typename D::type); + + // first pass: get length in wchar_t units + size_t length = D::process(data, data_length, 0, wchar_counter()); + + // allocate buffer of suitable length + char_t* buffer = static_cast(xml_memory::allocate((length + 1) * sizeof(char_t))); + if (!buffer) return false; + + // second pass: convert utf16 input to wchar_t + wchar_writer::value_type obegin = reinterpret_cast(buffer); + wchar_writer::value_type oend = D::process(data, data_length, obegin, wchar_writer()); + + assert(oend == obegin + length); + *oend = 0; + + out_buffer = buffer; + out_length = length + 1; + + return true; + } + + PUGI__FN bool convert_buffer(char_t*& out_buffer, size_t& out_length, xml_encoding encoding, const void* contents, size_t size, bool is_mutable) + { + // get native encoding + xml_encoding wchar_encoding = get_wchar_encoding(); + + // fast path: no conversion required + if (encoding == wchar_encoding) + return get_mutable_buffer(out_buffer, out_length, contents, size, is_mutable); + + // only endian-swapping is required + if (need_endian_swap_utf(encoding, wchar_encoding)) + return convert_buffer_endian_swap(out_buffer, out_length, contents, size, is_mutable); + + // source encoding is utf8 + if (encoding == encoding_utf8) + return convert_buffer_generic(out_buffer, out_length, contents, size, utf8_decoder()); + + // source encoding is utf16 + if (encoding == encoding_utf16_be || encoding == encoding_utf16_le) + { + xml_encoding native_encoding = is_little_endian() ? encoding_utf16_le : encoding_utf16_be; + + return (native_encoding == encoding) ? + convert_buffer_generic(out_buffer, out_length, contents, size, utf16_decoder()) : + convert_buffer_generic(out_buffer, out_length, contents, size, utf16_decoder()); + } + + // source encoding is utf32 + if (encoding == encoding_utf32_be || encoding == encoding_utf32_le) + { + xml_encoding native_encoding = is_little_endian() ? encoding_utf32_le : encoding_utf32_be; + + return (native_encoding == encoding) ? + convert_buffer_generic(out_buffer, out_length, contents, size, utf32_decoder()) : + convert_buffer_generic(out_buffer, out_length, contents, size, utf32_decoder()); + } + + // source encoding is latin1 + if (encoding == encoding_latin1) + return convert_buffer_generic(out_buffer, out_length, contents, size, latin1_decoder()); + + assert(false && "Invalid encoding"); // unreachable + return false; + } +#else + template PUGI__FN bool convert_buffer_generic(char_t*& out_buffer, size_t& out_length, const void* contents, size_t size, D) + { + const typename D::type* data = static_cast(contents); + size_t data_length = size / sizeof(typename D::type); + + // first pass: get length in utf8 units + size_t length = D::process(data, data_length, 0, utf8_counter()); + + // allocate buffer of suitable length + char_t* buffer = static_cast(xml_memory::allocate((length + 1) * sizeof(char_t))); + if (!buffer) return false; + + // second pass: convert utf16 input to utf8 + uint8_t* obegin = reinterpret_cast(buffer); + uint8_t* oend = D::process(data, data_length, obegin, utf8_writer()); + + assert(oend == obegin + length); + *oend = 0; + + out_buffer = buffer; + out_length = length + 1; + + return true; + } + + PUGI__FN size_t get_latin1_7bit_prefix_length(const uint8_t* data, size_t size) + { + for (size_t i = 0; i < size; ++i) + if (data[i] > 127) + return i; + + return size; + } + + PUGI__FN bool convert_buffer_latin1(char_t*& out_buffer, size_t& out_length, const void* contents, size_t size, bool is_mutable) + { + const uint8_t* data = static_cast(contents); + size_t data_length = size; + + // get size of prefix that does not need utf8 conversion + size_t prefix_length = get_latin1_7bit_prefix_length(data, data_length); + assert(prefix_length <= data_length); + + const uint8_t* postfix = data + prefix_length; + size_t postfix_length = data_length - prefix_length; + + // if no conversion is needed, just return the original buffer + if (postfix_length == 0) return get_mutable_buffer(out_buffer, out_length, contents, size, is_mutable); + + // first pass: get length in utf8 units + size_t length = prefix_length + latin1_decoder::process(postfix, postfix_length, 0, utf8_counter()); + + // allocate buffer of suitable length + char_t* buffer = static_cast(xml_memory::allocate((length + 1) * sizeof(char_t))); + if (!buffer) return false; + + // second pass: convert latin1 input to utf8 + memcpy(buffer, data, prefix_length); + + uint8_t* obegin = reinterpret_cast(buffer); + uint8_t* oend = latin1_decoder::process(postfix, postfix_length, obegin + prefix_length, utf8_writer()); + + assert(oend == obegin + length); + *oend = 0; + + out_buffer = buffer; + out_length = length + 1; + + return true; + } + + PUGI__FN bool convert_buffer(char_t*& out_buffer, size_t& out_length, xml_encoding encoding, const void* contents, size_t size, bool is_mutable) + { + // fast path: no conversion required + if (encoding == encoding_utf8) + return get_mutable_buffer(out_buffer, out_length, contents, size, is_mutable); + + // source encoding is utf16 + if (encoding == encoding_utf16_be || encoding == encoding_utf16_le) + { + xml_encoding native_encoding = is_little_endian() ? encoding_utf16_le : encoding_utf16_be; + + return (native_encoding == encoding) ? + convert_buffer_generic(out_buffer, out_length, contents, size, utf16_decoder()) : + convert_buffer_generic(out_buffer, out_length, contents, size, utf16_decoder()); + } + + // source encoding is utf32 + if (encoding == encoding_utf32_be || encoding == encoding_utf32_le) + { + xml_encoding native_encoding = is_little_endian() ? encoding_utf32_le : encoding_utf32_be; + + return (native_encoding == encoding) ? + convert_buffer_generic(out_buffer, out_length, contents, size, utf32_decoder()) : + convert_buffer_generic(out_buffer, out_length, contents, size, utf32_decoder()); + } + + // source encoding is latin1 + if (encoding == encoding_latin1) + return convert_buffer_latin1(out_buffer, out_length, contents, size, is_mutable); + + assert(false && "Invalid encoding"); // unreachable + return false; + } +#endif + + PUGI__FN size_t as_utf8_begin(const wchar_t* str, size_t length) + { + // get length in utf8 characters + return wchar_decoder::process(str, length, 0, utf8_counter()); + } + + PUGI__FN void as_utf8_end(char* buffer, size_t size, const wchar_t* str, size_t length) + { + // convert to utf8 + uint8_t* begin = reinterpret_cast(buffer); + uint8_t* end = wchar_decoder::process(str, length, begin, utf8_writer()); + + assert(begin + size == end); + (void)!end; + (void)!size; + } + +#ifndef PUGIXML_NO_STL + PUGI__FN std::string as_utf8_impl(const wchar_t* str, size_t length) + { + // first pass: get length in utf8 characters + size_t size = as_utf8_begin(str, length); + + // allocate resulting string + std::string result; + result.resize(size); + + // second pass: convert to utf8 + if (size > 0) as_utf8_end(&result[0], size, str, length); + + return result; + } + + PUGI__FN std::basic_string as_wide_impl(const char* str, size_t size) + { + const uint8_t* data = reinterpret_cast(str); + + // first pass: get length in wchar_t units + size_t length = utf8_decoder::process(data, size, 0, wchar_counter()); + + // allocate resulting string + std::basic_string result; + result.resize(length); + + // second pass: convert to wchar_t + if (length > 0) + { + wchar_writer::value_type begin = reinterpret_cast(&result[0]); + wchar_writer::value_type end = utf8_decoder::process(data, size, begin, wchar_writer()); + + assert(begin + length == end); + (void)!end; + } + + return result; + } +#endif + + template + inline bool strcpy_insitu_allow(size_t length, const Header& header, uintptr_t header_mask, char_t* target) + { + // never reuse shared memory + if (header & xml_memory_page_contents_shared_mask) return false; + + size_t target_length = strlength(target); + + // always reuse document buffer memory if possible + if ((header & header_mask) == 0) return target_length >= length; + + // reuse heap memory if waste is not too great + const size_t reuse_threshold = 32; + + return target_length >= length && (target_length < reuse_threshold || target_length - length < target_length / 2); + } + + template + PUGI__FN bool strcpy_insitu(String& dest, Header& header, uintptr_t header_mask, const char_t* source, size_t source_length) + { + if (source_length == 0) + { + // empty string and null pointer are equivalent, so just deallocate old memory + xml_allocator* alloc = PUGI__GETPAGE_IMPL(header)->allocator; + + if (header & header_mask) alloc->deallocate_string(dest); + + // mark the string as not allocated + dest = 0; + header &= ~header_mask; + + return true; + } + else if (dest && strcpy_insitu_allow(source_length, header, header_mask, dest)) + { + // we can reuse old buffer, so just copy the new data (including zero terminator) + memcpy(dest, source, source_length * sizeof(char_t)); + dest[source_length] = 0; + + return true; + } + else + { + xml_allocator* alloc = PUGI__GETPAGE_IMPL(header)->allocator; + + if (!alloc->reserve()) return false; + + // allocate new buffer + char_t* buf = alloc->allocate_string(source_length + 1); + if (!buf) return false; + + // copy the string (including zero terminator) + memcpy(buf, source, source_length * sizeof(char_t)); + buf[source_length] = 0; + + // deallocate old buffer (*after* the above to protect against overlapping memory and/or allocation failures) + if (header & header_mask) alloc->deallocate_string(dest); + + // the string is now allocated, so set the flag + dest = buf; + header |= header_mask; + + return true; + } + } + + struct gap + { + char_t* end; + size_t size; + + gap(): end(0), size(0) + { + } + + // Push new gap, move s count bytes further (skipping the gap). + // Collapse previous gap. + void push(char_t*& s, size_t count) + { + if (end) // there was a gap already; collapse it + { + // Move [old_gap_end, new_gap_start) to [old_gap_start, ...) + assert(s >= end); + memmove(end - size, end, reinterpret_cast(s) - reinterpret_cast(end)); + } + + s += count; // end of current gap + + // "merge" two gaps + end = s; + size += count; + } + + // Collapse all gaps, return past-the-end pointer + char_t* flush(char_t* s) + { + if (end) + { + // Move [old_gap_end, current_pos) to [old_gap_start, ...) + assert(s >= end); + memmove(end - size, end, reinterpret_cast(s) - reinterpret_cast(end)); + + return s - size; + } + else return s; + } + }; + + PUGI__FN char_t* strconv_escape(char_t* s, gap& g) + { + char_t* stre = s + 1; + + switch (*stre) + { + case '#': // &#... + { + unsigned int ucsc = 0; + + if (stre[1] == 'x') // &#x... (hex code) + { + stre += 2; + + char_t ch = *stre; + + if (ch == ';') return stre; + + for (;;) + { + if (static_cast(ch - '0') <= 9) + ucsc = 16 * ucsc + (ch - '0'); + else if (static_cast((ch | ' ') - 'a') <= 5) + ucsc = 16 * ucsc + ((ch | ' ') - 'a' + 10); + else if (ch == ';') + break; + else // cancel + return stre; + + ch = *++stre; + } + + ++stre; + } + else // &#... (dec code) + { + char_t ch = *++stre; + + if (ch == ';') return stre; + + for (;;) + { + if (static_cast(ch - '0') <= 9) + ucsc = 10 * ucsc + (ch - '0'); + else if (ch == ';') + break; + else // cancel + return stre; + + ch = *++stre; + } + + ++stre; + } + + #ifdef PUGIXML_WCHAR_MODE + s = reinterpret_cast(wchar_writer::any(reinterpret_cast(s), ucsc)); + #else + s = reinterpret_cast(utf8_writer::any(reinterpret_cast(s), ucsc)); + #endif + + g.push(s, stre - s); + return stre; + } + + case 'a': // &a + { + ++stre; + + if (*stre == 'm') // &am + { + if (*++stre == 'p' && *++stre == ';') // & + { + *s++ = '&'; + ++stre; + + g.push(s, stre - s); + return stre; + } + } + else if (*stre == 'p') // &ap + { + if (*++stre == 'o' && *++stre == 's' && *++stre == ';') // ' + { + *s++ = '\''; + ++stre; + + g.push(s, stre - s); + return stre; + } + } + break; + } + + case 'g': // &g + { + if (*++stre == 't' && *++stre == ';') // > + { + *s++ = '>'; + ++stre; + + g.push(s, stre - s); + return stre; + } + break; + } + + case 'l': // &l + { + if (*++stre == 't' && *++stre == ';') // < + { + *s++ = '<'; + ++stre; + + g.push(s, stre - s); + return stre; + } + break; + } + + case 'q': // &q + { + if (*++stre == 'u' && *++stre == 'o' && *++stre == 't' && *++stre == ';') // " + { + *s++ = '"'; + ++stre; + + g.push(s, stre - s); + return stre; + } + break; + } + + default: + break; + } + + return stre; + } + + // Parser utilities + #define PUGI__ENDSWITH(c, e) ((c) == (e) || ((c) == 0 && endch == (e))) + #define PUGI__SKIPWS() { while (PUGI__IS_CHARTYPE(*s, ct_space)) ++s; } + #define PUGI__OPTSET(OPT) ( optmsk & (OPT) ) + #define PUGI__PUSHNODE(TYPE) { cursor = append_new_node(cursor, *alloc, TYPE); if (!cursor) PUGI__THROW_ERROR(status_out_of_memory, s); } + #define PUGI__POPNODE() { cursor = cursor->parent; } + #define PUGI__SCANFOR(X) { while (*s != 0 && !(X)) ++s; } + #define PUGI__SCANWHILE(X) { while (X) ++s; } + #define PUGI__SCANWHILE_UNROLL(X) { for (;;) { char_t ss = s[0]; if (PUGI__UNLIKELY(!(X))) { break; } ss = s[1]; if (PUGI__UNLIKELY(!(X))) { s += 1; break; } ss = s[2]; if (PUGI__UNLIKELY(!(X))) { s += 2; break; } ss = s[3]; if (PUGI__UNLIKELY(!(X))) { s += 3; break; } s += 4; } } + #define PUGI__ENDSEG() { ch = *s; *s = 0; ++s; } + #define PUGI__THROW_ERROR(err, m) return error_offset = m, error_status = err, static_cast(0) + #define PUGI__CHECK_ERROR(err, m) { if (*s == 0) PUGI__THROW_ERROR(err, m); } + + PUGI__FN char_t* strconv_comment(char_t* s, char_t endch) + { + gap g; + + while (true) + { + PUGI__SCANWHILE_UNROLL(!PUGI__IS_CHARTYPE(ss, ct_parse_comment)); + + if (*s == '\r') // Either a single 0x0d or 0x0d 0x0a pair + { + *s++ = '\n'; // replace first one with 0x0a + + if (*s == '\n') g.push(s, 1); + } + else if (s[0] == '-' && s[1] == '-' && PUGI__ENDSWITH(s[2], '>')) // comment ends here + { + *g.flush(s) = 0; + + return s + (s[2] == '>' ? 3 : 2); + } + else if (*s == 0) + { + return 0; + } + else ++s; + } + } + + PUGI__FN char_t* strconv_cdata(char_t* s, char_t endch) + { + gap g; + + while (true) + { + PUGI__SCANWHILE_UNROLL(!PUGI__IS_CHARTYPE(ss, ct_parse_cdata)); + + if (*s == '\r') // Either a single 0x0d or 0x0d 0x0a pair + { + *s++ = '\n'; // replace first one with 0x0a + + if (*s == '\n') g.push(s, 1); + } + else if (s[0] == ']' && s[1] == ']' && PUGI__ENDSWITH(s[2], '>')) // CDATA ends here + { + *g.flush(s) = 0; + + return s + 1; + } + else if (*s == 0) + { + return 0; + } + else ++s; + } + } + + typedef char_t* (*strconv_pcdata_t)(char_t*); + + template struct strconv_pcdata_impl + { + static char_t* parse(char_t* s) + { + gap g; + + char_t* begin = s; + + while (true) + { + PUGI__SCANWHILE_UNROLL(!PUGI__IS_CHARTYPE(ss, ct_parse_pcdata)); + + if (*s == '<') // PCDATA ends here + { + char_t* end = g.flush(s); + + if (opt_trim::value) + while (end > begin && PUGI__IS_CHARTYPE(end[-1], ct_space)) + --end; + + *end = 0; + + return s + 1; + } + else if (opt_eol::value && *s == '\r') // Either a single 0x0d or 0x0d 0x0a pair + { + *s++ = '\n'; // replace first one with 0x0a + + if (*s == '\n') g.push(s, 1); + } + else if (opt_escape::value && *s == '&') + { + s = strconv_escape(s, g); + } + else if (*s == 0) + { + char_t* end = g.flush(s); + + if (opt_trim::value) + while (end > begin && PUGI__IS_CHARTYPE(end[-1], ct_space)) + --end; + + *end = 0; + + return s; + } + else ++s; + } + } + }; + + PUGI__FN strconv_pcdata_t get_strconv_pcdata(unsigned int optmask) + { + PUGI__STATIC_ASSERT(parse_escapes == 0x10 && parse_eol == 0x20 && parse_trim_pcdata == 0x0800); + + switch (((optmask >> 4) & 3) | ((optmask >> 9) & 4)) // get bitmask for flags (trim eol escapes); this simultaneously checks 3 options from assertion above + { + case 0: return strconv_pcdata_impl::parse; + case 1: return strconv_pcdata_impl::parse; + case 2: return strconv_pcdata_impl::parse; + case 3: return strconv_pcdata_impl::parse; + case 4: return strconv_pcdata_impl::parse; + case 5: return strconv_pcdata_impl::parse; + case 6: return strconv_pcdata_impl::parse; + case 7: return strconv_pcdata_impl::parse; + default: assert(false); return 0; // unreachable + } + } + + typedef char_t* (*strconv_attribute_t)(char_t*, char_t); + + template struct strconv_attribute_impl + { + static char_t* parse_wnorm(char_t* s, char_t end_quote) + { + gap g; + + // trim leading whitespaces + if (PUGI__IS_CHARTYPE(*s, ct_space)) + { + char_t* str = s; + + do ++str; + while (PUGI__IS_CHARTYPE(*str, ct_space)); + + g.push(s, str - s); + } + + while (true) + { + PUGI__SCANWHILE_UNROLL(!PUGI__IS_CHARTYPE(ss, ct_parse_attr_ws | ct_space)); + + if (*s == end_quote) + { + char_t* str = g.flush(s); + + do *str-- = 0; + while (PUGI__IS_CHARTYPE(*str, ct_space)); + + return s + 1; + } + else if (PUGI__IS_CHARTYPE(*s, ct_space)) + { + *s++ = ' '; + + if (PUGI__IS_CHARTYPE(*s, ct_space)) + { + char_t* str = s + 1; + while (PUGI__IS_CHARTYPE(*str, ct_space)) ++str; + + g.push(s, str - s); + } + } + else if (opt_escape::value && *s == '&') + { + s = strconv_escape(s, g); + } + else if (!*s) + { + return 0; + } + else ++s; + } + } + + static char_t* parse_wconv(char_t* s, char_t end_quote) + { + gap g; + + while (true) + { + PUGI__SCANWHILE_UNROLL(!PUGI__IS_CHARTYPE(ss, ct_parse_attr_ws)); + + if (*s == end_quote) + { + *g.flush(s) = 0; + + return s + 1; + } + else if (PUGI__IS_CHARTYPE(*s, ct_space)) + { + if (*s == '\r') + { + *s++ = ' '; + + if (*s == '\n') g.push(s, 1); + } + else *s++ = ' '; + } + else if (opt_escape::value && *s == '&') + { + s = strconv_escape(s, g); + } + else if (!*s) + { + return 0; + } + else ++s; + } + } + + static char_t* parse_eol(char_t* s, char_t end_quote) + { + gap g; + + while (true) + { + PUGI__SCANWHILE_UNROLL(!PUGI__IS_CHARTYPE(ss, ct_parse_attr)); + + if (*s == end_quote) + { + *g.flush(s) = 0; + + return s + 1; + } + else if (*s == '\r') + { + *s++ = '\n'; + + if (*s == '\n') g.push(s, 1); + } + else if (opt_escape::value && *s == '&') + { + s = strconv_escape(s, g); + } + else if (!*s) + { + return 0; + } + else ++s; + } + } + + static char_t* parse_simple(char_t* s, char_t end_quote) + { + gap g; + + while (true) + { + PUGI__SCANWHILE_UNROLL(!PUGI__IS_CHARTYPE(ss, ct_parse_attr)); + + if (*s == end_quote) + { + *g.flush(s) = 0; + + return s + 1; + } + else if (opt_escape::value && *s == '&') + { + s = strconv_escape(s, g); + } + else if (!*s) + { + return 0; + } + else ++s; + } + } + }; + + PUGI__FN strconv_attribute_t get_strconv_attribute(unsigned int optmask) + { + PUGI__STATIC_ASSERT(parse_escapes == 0x10 && parse_eol == 0x20 && parse_wconv_attribute == 0x40 && parse_wnorm_attribute == 0x80); + + switch ((optmask >> 4) & 15) // get bitmask for flags (wnorm wconv eol escapes); this simultaneously checks 4 options from assertion above + { + case 0: return strconv_attribute_impl::parse_simple; + case 1: return strconv_attribute_impl::parse_simple; + case 2: return strconv_attribute_impl::parse_eol; + case 3: return strconv_attribute_impl::parse_eol; + case 4: return strconv_attribute_impl::parse_wconv; + case 5: return strconv_attribute_impl::parse_wconv; + case 6: return strconv_attribute_impl::parse_wconv; + case 7: return strconv_attribute_impl::parse_wconv; + case 8: return strconv_attribute_impl::parse_wnorm; + case 9: return strconv_attribute_impl::parse_wnorm; + case 10: return strconv_attribute_impl::parse_wnorm; + case 11: return strconv_attribute_impl::parse_wnorm; + case 12: return strconv_attribute_impl::parse_wnorm; + case 13: return strconv_attribute_impl::parse_wnorm; + case 14: return strconv_attribute_impl::parse_wnorm; + case 15: return strconv_attribute_impl::parse_wnorm; + default: assert(false); return 0; // unreachable + } + } + + inline xml_parse_result make_parse_result(xml_parse_status status, ptrdiff_t offset = 0) + { + xml_parse_result result; + result.status = status; + result.offset = offset; + + return result; + } + + struct xml_parser + { + xml_allocator* alloc; + char_t* error_offset; + xml_parse_status error_status; + + xml_parser(xml_allocator* alloc_): alloc(alloc_), error_offset(0), error_status(status_ok) + { + } + + // DOCTYPE consists of nested sections of the following possible types: + // , , "...", '...' + // + // + // First group can not contain nested groups + // Second group can contain nested groups of the same type + // Third group can contain all other groups + char_t* parse_doctype_primitive(char_t* s) + { + if (*s == '"' || *s == '\'') + { + // quoted string + char_t ch = *s++; + PUGI__SCANFOR(*s == ch); + if (!*s) PUGI__THROW_ERROR(status_bad_doctype, s); + + s++; + } + else if (s[0] == '<' && s[1] == '?') + { + // + s += 2; + PUGI__SCANFOR(s[0] == '?' && s[1] == '>'); // no need for ENDSWITH because ?> can't terminate proper doctype + if (!*s) PUGI__THROW_ERROR(status_bad_doctype, s); + + s += 2; + } + else if (s[0] == '<' && s[1] == '!' && s[2] == '-' && s[3] == '-') + { + s += 4; + PUGI__SCANFOR(s[0] == '-' && s[1] == '-' && s[2] == '>'); // no need for ENDSWITH because --> can't terminate proper doctype + if (!*s) PUGI__THROW_ERROR(status_bad_doctype, s); + + s += 3; + } + else PUGI__THROW_ERROR(status_bad_doctype, s); + + return s; + } + + char_t* parse_doctype_ignore(char_t* s) + { + size_t depth = 0; + + assert(s[0] == '<' && s[1] == '!' && s[2] == '['); + s += 3; + + while (*s) + { + if (s[0] == '<' && s[1] == '!' && s[2] == '[') + { + // nested ignore section + s += 3; + depth++; + } + else if (s[0] == ']' && s[1] == ']' && s[2] == '>') + { + // ignore section end + s += 3; + + if (depth == 0) + return s; + + depth--; + } + else s++; + } + + PUGI__THROW_ERROR(status_bad_doctype, s); + } + + char_t* parse_doctype_group(char_t* s, char_t endch) + { + size_t depth = 0; + + assert((s[0] == '<' || s[0] == 0) && s[1] == '!'); + s += 2; + + while (*s) + { + if (s[0] == '<' && s[1] == '!' && s[2] != '-') + { + if (s[2] == '[') + { + // ignore + s = parse_doctype_ignore(s); + if (!s) return s; + } + else + { + // some control group + s += 2; + depth++; + } + } + else if (s[0] == '<' || s[0] == '"' || s[0] == '\'') + { + // unknown tag (forbidden), or some primitive group + s = parse_doctype_primitive(s); + if (!s) return s; + } + else if (*s == '>') + { + if (depth == 0) + return s; + + depth--; + s++; + } + else s++; + } + + if (depth != 0 || endch != '>') PUGI__THROW_ERROR(status_bad_doctype, s); + + return s; + } + + char_t* parse_exclamation(char_t* s, xml_node_struct* cursor, unsigned int optmsk, char_t endch) + { + // parse node contents, starting with exclamation mark + ++s; + + if (*s == '-') // 'value = s; // Save the offset. + } + + if (PUGI__OPTSET(parse_eol) && PUGI__OPTSET(parse_comments)) + { + s = strconv_comment(s, endch); + + if (!s) PUGI__THROW_ERROR(status_bad_comment, cursor->value); + } + else + { + // Scan for terminating '-->'. + PUGI__SCANFOR(s[0] == '-' && s[1] == '-' && PUGI__ENDSWITH(s[2], '>')); + PUGI__CHECK_ERROR(status_bad_comment, s); + + if (PUGI__OPTSET(parse_comments)) + *s = 0; // Zero-terminate this segment at the first terminating '-'. + + s += (s[2] == '>' ? 3 : 2); // Step over the '\0->'. + } + } + else PUGI__THROW_ERROR(status_bad_comment, s); + } + else if (*s == '[') + { + // 'value = s; // Save the offset. + + if (PUGI__OPTSET(parse_eol)) + { + s = strconv_cdata(s, endch); + + if (!s) PUGI__THROW_ERROR(status_bad_cdata, cursor->value); + } + else + { + // Scan for terminating ']]>'. + PUGI__SCANFOR(s[0] == ']' && s[1] == ']' && PUGI__ENDSWITH(s[2], '>')); + PUGI__CHECK_ERROR(status_bad_cdata, s); + + *s++ = 0; // Zero-terminate this segment. + } + } + else // Flagged for discard, but we still have to scan for the terminator. + { + // Scan for terminating ']]>'. + PUGI__SCANFOR(s[0] == ']' && s[1] == ']' && PUGI__ENDSWITH(s[2], '>')); + PUGI__CHECK_ERROR(status_bad_cdata, s); + + ++s; + } + + s += (s[1] == '>' ? 2 : 1); // Step over the last ']>'. + } + else PUGI__THROW_ERROR(status_bad_cdata, s); + } + else if (s[0] == 'D' && s[1] == 'O' && s[2] == 'C' && s[3] == 'T' && s[4] == 'Y' && s[5] == 'P' && PUGI__ENDSWITH(s[6], 'E')) + { + s -= 2; + + if (cursor->parent) PUGI__THROW_ERROR(status_bad_doctype, s); + + char_t* mark = s + 9; + + s = parse_doctype_group(s, endch); + if (!s) return s; + + assert((*s == 0 && endch == '>') || *s == '>'); + if (*s) *s++ = 0; + + if (PUGI__OPTSET(parse_doctype)) + { + while (PUGI__IS_CHARTYPE(*mark, ct_space)) ++mark; + + PUGI__PUSHNODE(node_doctype); + + cursor->value = mark; + } + } + else if (*s == 0 && endch == '-') PUGI__THROW_ERROR(status_bad_comment, s); + else if (*s == 0 && endch == '[') PUGI__THROW_ERROR(status_bad_cdata, s); + else PUGI__THROW_ERROR(status_unrecognized_tag, s); + + return s; + } + + char_t* parse_question(char_t* s, xml_node_struct*& ref_cursor, unsigned int optmsk, char_t endch) + { + // load into registers + xml_node_struct* cursor = ref_cursor; + char_t ch = 0; + + // parse node contents, starting with question mark + ++s; + + // read PI target + char_t* target = s; + + if (!PUGI__IS_CHARTYPE(*s, ct_start_symbol)) PUGI__THROW_ERROR(status_bad_pi, s); + + PUGI__SCANWHILE(PUGI__IS_CHARTYPE(*s, ct_symbol)); + PUGI__CHECK_ERROR(status_bad_pi, s); + + // determine node type; stricmp / strcasecmp is not portable + bool declaration = (target[0] | ' ') == 'x' && (target[1] | ' ') == 'm' && (target[2] | ' ') == 'l' && target + 3 == s; + + if (declaration ? PUGI__OPTSET(parse_declaration) : PUGI__OPTSET(parse_pi)) + { + if (declaration) + { + // disallow non top-level declarations + if (cursor->parent) PUGI__THROW_ERROR(status_bad_pi, s); + + PUGI__PUSHNODE(node_declaration); + } + else + { + PUGI__PUSHNODE(node_pi); + } + + cursor->name = target; + + PUGI__ENDSEG(); + + // parse value/attributes + if (ch == '?') + { + // empty node + if (!PUGI__ENDSWITH(*s, '>')) PUGI__THROW_ERROR(status_bad_pi, s); + s += (*s == '>'); + + PUGI__POPNODE(); + } + else if (PUGI__IS_CHARTYPE(ch, ct_space)) + { + PUGI__SKIPWS(); + + // scan for tag end + char_t* value = s; + + PUGI__SCANFOR(s[0] == '?' && PUGI__ENDSWITH(s[1], '>')); + PUGI__CHECK_ERROR(status_bad_pi, s); + + if (declaration) + { + // replace ending ? with / so that 'element' terminates properly + *s = '/'; + + // we exit from this function with cursor at node_declaration, which is a signal to parse() to go to LOC_ATTRIBUTES + s = value; + } + else + { + // store value and step over > + cursor->value = value; + + PUGI__POPNODE(); + + PUGI__ENDSEG(); + + s += (*s == '>'); + } + } + else PUGI__THROW_ERROR(status_bad_pi, s); + } + else + { + // scan for tag end + PUGI__SCANFOR(s[0] == '?' && PUGI__ENDSWITH(s[1], '>')); + PUGI__CHECK_ERROR(status_bad_pi, s); + + s += (s[1] == '>' ? 2 : 1); + } + + // store from registers + ref_cursor = cursor; + + return s; + } + + char_t* parse_tree(char_t* s, xml_node_struct* root, unsigned int optmsk, char_t endch) + { + strconv_attribute_t strconv_attribute = get_strconv_attribute(optmsk); + strconv_pcdata_t strconv_pcdata = get_strconv_pcdata(optmsk); + + char_t ch = 0; + xml_node_struct* cursor = root; + char_t* mark = s; + + while (*s != 0) + { + if (*s == '<') + { + ++s; + + LOC_TAG: + if (PUGI__IS_CHARTYPE(*s, ct_start_symbol)) // '<#...' + { + PUGI__PUSHNODE(node_element); // Append a new node to the tree. + + cursor->name = s; + + PUGI__SCANWHILE_UNROLL(PUGI__IS_CHARTYPE(ss, ct_symbol)); // Scan for a terminator. + PUGI__ENDSEG(); // Save char in 'ch', terminate & step over. + + if (ch == '>') + { + // end of tag + } + else if (PUGI__IS_CHARTYPE(ch, ct_space)) + { + LOC_ATTRIBUTES: + while (true) + { + PUGI__SKIPWS(); // Eat any whitespace. + + if (PUGI__IS_CHARTYPE(*s, ct_start_symbol)) // <... #... + { + xml_attribute_struct* a = append_new_attribute(cursor, *alloc); // Make space for this attribute. + if (!a) PUGI__THROW_ERROR(status_out_of_memory, s); + + a->name = s; // Save the offset. + + PUGI__SCANWHILE_UNROLL(PUGI__IS_CHARTYPE(ss, ct_symbol)); // Scan for a terminator. + PUGI__ENDSEG(); // Save char in 'ch', terminate & step over. + + if (PUGI__IS_CHARTYPE(ch, ct_space)) + { + PUGI__SKIPWS(); // Eat any whitespace. + + ch = *s; + ++s; + } + + if (ch == '=') // '<... #=...' + { + PUGI__SKIPWS(); // Eat any whitespace. + + if (*s == '"' || *s == '\'') // '<... #="...' + { + ch = *s; // Save quote char to avoid breaking on "''" -or- '""'. + ++s; // Step over the quote. + a->value = s; // Save the offset. + + s = strconv_attribute(s, ch); + + if (!s) PUGI__THROW_ERROR(status_bad_attribute, a->value); + + // After this line the loop continues from the start; + // Whitespaces, / and > are ok, symbols and EOF are wrong, + // everything else will be detected + if (PUGI__IS_CHARTYPE(*s, ct_start_symbol)) PUGI__THROW_ERROR(status_bad_attribute, s); + } + else PUGI__THROW_ERROR(status_bad_attribute, s); + } + else PUGI__THROW_ERROR(status_bad_attribute, s); + } + else if (*s == '/') + { + ++s; + + if (*s == '>') + { + PUGI__POPNODE(); + s++; + break; + } + else if (*s == 0 && endch == '>') + { + PUGI__POPNODE(); + break; + } + else PUGI__THROW_ERROR(status_bad_start_element, s); + } + else if (*s == '>') + { + ++s; + + break; + } + else if (*s == 0 && endch == '>') + { + break; + } + else PUGI__THROW_ERROR(status_bad_start_element, s); + } + + // !!! + } + else if (ch == '/') // '<#.../' + { + if (!PUGI__ENDSWITH(*s, '>')) PUGI__THROW_ERROR(status_bad_start_element, s); + + PUGI__POPNODE(); // Pop. + + s += (*s == '>'); + } + else if (ch == 0) + { + // we stepped over null terminator, backtrack & handle closing tag + --s; + + if (endch != '>') PUGI__THROW_ERROR(status_bad_start_element, s); + } + else PUGI__THROW_ERROR(status_bad_start_element, s); + } + else if (*s == '/') + { + ++s; + + mark = s; + + char_t* name = cursor->name; + if (!name) PUGI__THROW_ERROR(status_end_element_mismatch, mark); + + while (PUGI__IS_CHARTYPE(*s, ct_symbol)) + { + if (*s++ != *name++) PUGI__THROW_ERROR(status_end_element_mismatch, mark); + } + + if (*name) + { + if (*s == 0 && name[0] == endch && name[1] == 0) PUGI__THROW_ERROR(status_bad_end_element, s); + else PUGI__THROW_ERROR(status_end_element_mismatch, mark); + } + + PUGI__POPNODE(); // Pop. + + PUGI__SKIPWS(); + + if (*s == 0) + { + if (endch != '>') PUGI__THROW_ERROR(status_bad_end_element, s); + } + else + { + if (*s != '>') PUGI__THROW_ERROR(status_bad_end_element, s); + ++s; + } + } + else if (*s == '?') // 'first_child) continue; + } + } + + if (!PUGI__OPTSET(parse_trim_pcdata)) + s = mark; + + if (cursor->parent || PUGI__OPTSET(parse_fragment)) + { + if (PUGI__OPTSET(parse_embed_pcdata) && cursor->parent && !cursor->first_child && !cursor->value) + { + cursor->value = s; // Save the offset. + } + else + { + PUGI__PUSHNODE(node_pcdata); // Append a new node on the tree. + + cursor->value = s; // Save the offset. + + PUGI__POPNODE(); // Pop since this is a standalone. + } + + s = strconv_pcdata(s); + + if (!*s) break; + } + else + { + PUGI__SCANFOR(*s == '<'); // '...<' + if (!*s) break; + + ++s; + } + + // We're after '<' + goto LOC_TAG; + } + } + + // check that last tag is closed + if (cursor != root) PUGI__THROW_ERROR(status_end_element_mismatch, s); + + return s; + } + + #ifdef PUGIXML_WCHAR_MODE + static char_t* parse_skip_bom(char_t* s) + { + unsigned int bom = 0xfeff; + return (s[0] == static_cast(bom)) ? s + 1 : s; + } + #else + static char_t* parse_skip_bom(char_t* s) + { + return (s[0] == '\xef' && s[1] == '\xbb' && s[2] == '\xbf') ? s + 3 : s; + } + #endif + + static bool has_element_node_siblings(xml_node_struct* node) + { + while (node) + { + if (PUGI__NODETYPE(node) == node_element) return true; + + node = node->next_sibling; + } + + return false; + } + + static xml_parse_result parse(char_t* buffer, size_t length, xml_document_struct* xmldoc, xml_node_struct* root, unsigned int optmsk) + { + // early-out for empty documents + if (length == 0) + return make_parse_result(PUGI__OPTSET(parse_fragment) ? status_ok : status_no_document_element); + + // get last child of the root before parsing + xml_node_struct* last_root_child = root->first_child ? root->first_child->prev_sibling_c + 0 : 0; + + // create parser on stack + xml_parser parser(static_cast(xmldoc)); + + // save last character and make buffer zero-terminated (speeds up parsing) + char_t endch = buffer[length - 1]; + buffer[length - 1] = 0; + + // skip BOM to make sure it does not end up as part of parse output + char_t* buffer_data = parse_skip_bom(buffer); + + // perform actual parsing + parser.parse_tree(buffer_data, root, optmsk, endch); + + xml_parse_result result = make_parse_result(parser.error_status, parser.error_offset ? parser.error_offset - buffer : 0); + assert(result.offset >= 0 && static_cast(result.offset) <= length); + + if (result) + { + // since we removed last character, we have to handle the only possible false positive (stray <) + if (endch == '<') + return make_parse_result(status_unrecognized_tag, length - 1); + + // check if there are any element nodes parsed + xml_node_struct* first_root_child_parsed = last_root_child ? last_root_child->next_sibling + 0 : root->first_child+ 0; + + if (!PUGI__OPTSET(parse_fragment) && !has_element_node_siblings(first_root_child_parsed)) + return make_parse_result(status_no_document_element, length - 1); + } + else + { + // roll back offset if it occurs on a null terminator in the source buffer + if (result.offset > 0 && static_cast(result.offset) == length - 1 && endch == 0) + result.offset--; + } + + return result; + } + }; + + // Output facilities + PUGI__FN xml_encoding get_write_native_encoding() + { + #ifdef PUGIXML_WCHAR_MODE + return get_wchar_encoding(); + #else + return encoding_utf8; + #endif + } + + PUGI__FN xml_encoding get_write_encoding(xml_encoding encoding) + { + // replace wchar encoding with utf implementation + if (encoding == encoding_wchar) return get_wchar_encoding(); + + // replace utf16 encoding with utf16 with specific endianness + if (encoding == encoding_utf16) return is_little_endian() ? encoding_utf16_le : encoding_utf16_be; + + // replace utf32 encoding with utf32 with specific endianness + if (encoding == encoding_utf32) return is_little_endian() ? encoding_utf32_le : encoding_utf32_be; + + // only do autodetection if no explicit encoding is requested + if (encoding != encoding_auto) return encoding; + + // assume utf8 encoding + return encoding_utf8; + } + + template PUGI__FN size_t convert_buffer_output_generic(typename T::value_type dest, const char_t* data, size_t length, D, T) + { + PUGI__STATIC_ASSERT(sizeof(char_t) == sizeof(typename D::type)); + + typename T::value_type end = D::process(reinterpret_cast(data), length, dest, T()); + + return static_cast(end - dest) * sizeof(*dest); + } + + template PUGI__FN size_t convert_buffer_output_generic(typename T::value_type dest, const char_t* data, size_t length, D, T, bool opt_swap) + { + PUGI__STATIC_ASSERT(sizeof(char_t) == sizeof(typename D::type)); + + typename T::value_type end = D::process(reinterpret_cast(data), length, dest, T()); + + if (opt_swap) + { + for (typename T::value_type i = dest; i != end; ++i) + *i = endian_swap(*i); + } + + return static_cast(end - dest) * sizeof(*dest); + } + +#ifdef PUGIXML_WCHAR_MODE + PUGI__FN size_t get_valid_length(const char_t* data, size_t length) + { + if (length < 1) return 0; + + // discard last character if it's the lead of a surrogate pair + return (sizeof(wchar_t) == 2 && static_cast(static_cast(data[length - 1]) - 0xD800) < 0x400) ? length - 1 : length; + } + + PUGI__FN size_t convert_buffer_output(char_t* r_char, uint8_t* r_u8, uint16_t* r_u16, uint32_t* r_u32, const char_t* data, size_t length, xml_encoding encoding) + { + // only endian-swapping is required + if (need_endian_swap_utf(encoding, get_wchar_encoding())) + { + convert_wchar_endian_swap(r_char, data, length); + + return length * sizeof(char_t); + } + + // convert to utf8 + if (encoding == encoding_utf8) + return convert_buffer_output_generic(r_u8, data, length, wchar_decoder(), utf8_writer()); + + // convert to utf16 + if (encoding == encoding_utf16_be || encoding == encoding_utf16_le) + { + xml_encoding native_encoding = is_little_endian() ? encoding_utf16_le : encoding_utf16_be; + + return convert_buffer_output_generic(r_u16, data, length, wchar_decoder(), utf16_writer(), native_encoding != encoding); + } + + // convert to utf32 + if (encoding == encoding_utf32_be || encoding == encoding_utf32_le) + { + xml_encoding native_encoding = is_little_endian() ? encoding_utf32_le : encoding_utf32_be; + + return convert_buffer_output_generic(r_u32, data, length, wchar_decoder(), utf32_writer(), native_encoding != encoding); + } + + // convert to latin1 + if (encoding == encoding_latin1) + return convert_buffer_output_generic(r_u8, data, length, wchar_decoder(), latin1_writer()); + + assert(false && "Invalid encoding"); // unreachable + return 0; + } +#else + PUGI__FN size_t get_valid_length(const char_t* data, size_t length) + { + if (length < 5) return 0; + + for (size_t i = 1; i <= 4; ++i) + { + uint8_t ch = static_cast(data[length - i]); + + // either a standalone character or a leading one + if ((ch & 0xc0) != 0x80) return length - i; + } + + // there are four non-leading characters at the end, sequence tail is broken so might as well process the whole chunk + return length; + } + + PUGI__FN size_t convert_buffer_output(char_t* /* r_char */, uint8_t* r_u8, uint16_t* r_u16, uint32_t* r_u32, const char_t* data, size_t length, xml_encoding encoding) + { + if (encoding == encoding_utf16_be || encoding == encoding_utf16_le) + { + xml_encoding native_encoding = is_little_endian() ? encoding_utf16_le : encoding_utf16_be; + + return convert_buffer_output_generic(r_u16, data, length, utf8_decoder(), utf16_writer(), native_encoding != encoding); + } + + if (encoding == encoding_utf32_be || encoding == encoding_utf32_le) + { + xml_encoding native_encoding = is_little_endian() ? encoding_utf32_le : encoding_utf32_be; + + return convert_buffer_output_generic(r_u32, data, length, utf8_decoder(), utf32_writer(), native_encoding != encoding); + } + + if (encoding == encoding_latin1) + return convert_buffer_output_generic(r_u8, data, length, utf8_decoder(), latin1_writer()); + + assert(false && "Invalid encoding"); // unreachable + return 0; + } +#endif + + class xml_buffered_writer + { + xml_buffered_writer(const xml_buffered_writer&); + xml_buffered_writer& operator=(const xml_buffered_writer&); + + public: + xml_buffered_writer(xml_writer& writer_, xml_encoding user_encoding): writer(writer_), bufsize(0), encoding(get_write_encoding(user_encoding)) + { + PUGI__STATIC_ASSERT(bufcapacity >= 8); + } + + size_t flush() + { + flush(buffer, bufsize); + bufsize = 0; + return 0; + } + + void flush(const char_t* data, size_t size) + { + if (size == 0) return; + + // fast path, just write data + if (encoding == get_write_native_encoding()) + writer.write(data, size * sizeof(char_t)); + else + { + // convert chunk + size_t result = convert_buffer_output(scratch.data_char, scratch.data_u8, scratch.data_u16, scratch.data_u32, data, size, encoding); + assert(result <= sizeof(scratch)); + + // write data + writer.write(scratch.data_u8, result); + } + } + + void write_direct(const char_t* data, size_t length) + { + // flush the remaining buffer contents + flush(); + + // handle large chunks + if (length > bufcapacity) + { + if (encoding == get_write_native_encoding()) + { + // fast path, can just write data chunk + writer.write(data, length * sizeof(char_t)); + return; + } + + // need to convert in suitable chunks + while (length > bufcapacity) + { + // get chunk size by selecting such number of characters that are guaranteed to fit into scratch buffer + // and form a complete codepoint sequence (i.e. discard start of last codepoint if necessary) + size_t chunk_size = get_valid_length(data, bufcapacity); + assert(chunk_size); + + // convert chunk and write + flush(data, chunk_size); + + // iterate + data += chunk_size; + length -= chunk_size; + } + + // small tail is copied below + bufsize = 0; + } + + memcpy(buffer + bufsize, data, length * sizeof(char_t)); + bufsize += length; + } + + void write_buffer(const char_t* data, size_t length) + { + size_t offset = bufsize; + + if (offset + length <= bufcapacity) + { + memcpy(buffer + offset, data, length * sizeof(char_t)); + bufsize = offset + length; + } + else + { + write_direct(data, length); + } + } + + void write_string(const char_t* data) + { + // write the part of the string that fits in the buffer + size_t offset = bufsize; + + while (*data && offset < bufcapacity) + buffer[offset++] = *data++; + + // write the rest + if (offset < bufcapacity) + { + bufsize = offset; + } + else + { + // backtrack a bit if we have split the codepoint + size_t length = offset - bufsize; + size_t extra = length - get_valid_length(data - length, length); + + bufsize = offset - extra; + + write_direct(data - extra, strlength(data) + extra); + } + } + + void write(char_t d0) + { + size_t offset = bufsize; + if (offset > bufcapacity - 1) offset = flush(); + + buffer[offset + 0] = d0; + bufsize = offset + 1; + } + + void write(char_t d0, char_t d1) + { + size_t offset = bufsize; + if (offset > bufcapacity - 2) offset = flush(); + + buffer[offset + 0] = d0; + buffer[offset + 1] = d1; + bufsize = offset + 2; + } + + void write(char_t d0, char_t d1, char_t d2) + { + size_t offset = bufsize; + if (offset > bufcapacity - 3) offset = flush(); + + buffer[offset + 0] = d0; + buffer[offset + 1] = d1; + buffer[offset + 2] = d2; + bufsize = offset + 3; + } + + void write(char_t d0, char_t d1, char_t d2, char_t d3) + { + size_t offset = bufsize; + if (offset > bufcapacity - 4) offset = flush(); + + buffer[offset + 0] = d0; + buffer[offset + 1] = d1; + buffer[offset + 2] = d2; + buffer[offset + 3] = d3; + bufsize = offset + 4; + } + + void write(char_t d0, char_t d1, char_t d2, char_t d3, char_t d4) + { + size_t offset = bufsize; + if (offset > bufcapacity - 5) offset = flush(); + + buffer[offset + 0] = d0; + buffer[offset + 1] = d1; + buffer[offset + 2] = d2; + buffer[offset + 3] = d3; + buffer[offset + 4] = d4; + bufsize = offset + 5; + } + + void write(char_t d0, char_t d1, char_t d2, char_t d3, char_t d4, char_t d5) + { + size_t offset = bufsize; + if (offset > bufcapacity - 6) offset = flush(); + + buffer[offset + 0] = d0; + buffer[offset + 1] = d1; + buffer[offset + 2] = d2; + buffer[offset + 3] = d3; + buffer[offset + 4] = d4; + buffer[offset + 5] = d5; + bufsize = offset + 6; + } + + // utf8 maximum expansion: x4 (-> utf32) + // utf16 maximum expansion: x2 (-> utf32) + // utf32 maximum expansion: x1 + enum + { + bufcapacitybytes = + #ifdef PUGIXML_MEMORY_OUTPUT_STACK + PUGIXML_MEMORY_OUTPUT_STACK + #else + 10240 + #endif + , + bufcapacity = bufcapacitybytes / (sizeof(char_t) + 4) + }; + + char_t buffer[bufcapacity]; + + union + { + uint8_t data_u8[4 * bufcapacity]; + uint16_t data_u16[2 * bufcapacity]; + uint32_t data_u32[bufcapacity]; + char_t data_char[bufcapacity]; + } scratch; + + xml_writer& writer; + size_t bufsize; + xml_encoding encoding; + }; + + PUGI__FN void text_output_escaped(xml_buffered_writer& writer, const char_t* s, chartypex_t type, unsigned int flags) + { + while (*s) + { + const char_t* prev = s; + + // While *s is a usual symbol + PUGI__SCANWHILE_UNROLL(!PUGI__IS_CHARTYPEX(ss, type)); + + writer.write_buffer(prev, static_cast(s - prev)); + + switch (*s) + { + case 0: break; + case '&': + writer.write('&', 'a', 'm', 'p', ';'); + ++s; + break; + case '<': + writer.write('&', 'l', 't', ';'); + ++s; + break; + case '>': + writer.write('&', 'g', 't', ';'); + ++s; + break; + case '"': + if (flags & format_attribute_single_quote) + writer.write('"'); + else + writer.write('&', 'q', 'u', 'o', 't', ';'); + ++s; + break; + case '\'': + if (flags & format_attribute_single_quote) + writer.write('&', 'a', 'p', 'o', 's', ';'); + else + writer.write('\''); + ++s; + break; + default: // s is not a usual symbol + { + unsigned int ch = static_cast(*s++); + assert(ch < 32); + + if (!(flags & format_skip_control_chars)) + writer.write('&', '#', static_cast((ch / 10) + '0'), static_cast((ch % 10) + '0'), ';'); + } + } + } + } + + PUGI__FN void text_output(xml_buffered_writer& writer, const char_t* s, chartypex_t type, unsigned int flags) + { + if (flags & format_no_escapes) + writer.write_string(s); + else + text_output_escaped(writer, s, type, flags); + } + + PUGI__FN void text_output_cdata(xml_buffered_writer& writer, const char_t* s) + { + do + { + writer.write('<', '!', '[', 'C', 'D'); + writer.write('A', 'T', 'A', '['); + + const char_t* prev = s; + + // look for ]]> sequence - we can't output it as is since it terminates CDATA + while (*s && !(s[0] == ']' && s[1] == ']' && s[2] == '>')) ++s; + + // skip ]] if we stopped at ]]>, > will go to the next CDATA section + if (*s) s += 2; + + writer.write_buffer(prev, static_cast(s - prev)); + + writer.write(']', ']', '>'); + } + while (*s); + } + + PUGI__FN void text_output_indent(xml_buffered_writer& writer, const char_t* indent, size_t indent_length, unsigned int depth) + { + switch (indent_length) + { + case 1: + { + for (unsigned int i = 0; i < depth; ++i) + writer.write(indent[0]); + break; + } + + case 2: + { + for (unsigned int i = 0; i < depth; ++i) + writer.write(indent[0], indent[1]); + break; + } + + case 3: + { + for (unsigned int i = 0; i < depth; ++i) + writer.write(indent[0], indent[1], indent[2]); + break; + } + + case 4: + { + for (unsigned int i = 0; i < depth; ++i) + writer.write(indent[0], indent[1], indent[2], indent[3]); + break; + } + + default: + { + for (unsigned int i = 0; i < depth; ++i) + writer.write_buffer(indent, indent_length); + } + } + } + + PUGI__FN void node_output_comment(xml_buffered_writer& writer, const char_t* s) + { + writer.write('<', '!', '-', '-'); + + while (*s) + { + const char_t* prev = s; + + // look for -\0 or -- sequence - we can't output it since -- is illegal in comment body + while (*s && !(s[0] == '-' && (s[1] == '-' || s[1] == 0))) ++s; + + writer.write_buffer(prev, static_cast(s - prev)); + + if (*s) + { + assert(*s == '-'); + + writer.write('-', ' '); + ++s; + } + } + + writer.write('-', '-', '>'); + } + + PUGI__FN void node_output_pi_value(xml_buffered_writer& writer, const char_t* s) + { + while (*s) + { + const char_t* prev = s; + + // look for ?> sequence - we can't output it since ?> terminates PI + while (*s && !(s[0] == '?' && s[1] == '>')) ++s; + + writer.write_buffer(prev, static_cast(s - prev)); + + if (*s) + { + assert(s[0] == '?' && s[1] == '>'); + + writer.write('?', ' ', '>'); + s += 2; + } + } + } + + PUGI__FN void node_output_attributes(xml_buffered_writer& writer, xml_node_struct* node, const char_t* indent, size_t indent_length, unsigned int flags, unsigned int depth) + { + const char_t* default_name = PUGIXML_TEXT(":anonymous"); + const char_t enquotation_char = (flags & format_attribute_single_quote) ? '\'' : '"'; + + for (xml_attribute_struct* a = node->first_attribute; a; a = a->next_attribute) + { + if ((flags & (format_indent_attributes | format_raw)) == format_indent_attributes) + { + writer.write('\n'); + + text_output_indent(writer, indent, indent_length, depth + 1); + } + else + { + writer.write(' '); + } + + writer.write_string(a->name ? a->name + 0 : default_name); + writer.write('=', enquotation_char); + + if (a->value) + text_output(writer, a->value, ctx_special_attr, flags); + + writer.write(enquotation_char); + } + } + + PUGI__FN bool node_output_start(xml_buffered_writer& writer, xml_node_struct* node, const char_t* indent, size_t indent_length, unsigned int flags, unsigned int depth) + { + const char_t* default_name = PUGIXML_TEXT(":anonymous"); + const char_t* name = node->name ? node->name + 0 : default_name; + + writer.write('<'); + writer.write_string(name); + + if (node->first_attribute) + node_output_attributes(writer, node, indent, indent_length, flags, depth); + + // element nodes can have value if parse_embed_pcdata was used + if (!node->value) + { + if (!node->first_child) + { + if (flags & format_no_empty_element_tags) + { + writer.write('>', '<', '/'); + writer.write_string(name); + writer.write('>'); + + return false; + } + else + { + if ((flags & format_raw) == 0) + writer.write(' '); + + writer.write('/', '>'); + + return false; + } + } + else + { + writer.write('>'); + + return true; + } + } + else + { + writer.write('>'); + + text_output(writer, node->value, ctx_special_pcdata, flags); + + if (!node->first_child) + { + writer.write('<', '/'); + writer.write_string(name); + writer.write('>'); + + return false; + } + else + { + return true; + } + } + } + + PUGI__FN void node_output_end(xml_buffered_writer& writer, xml_node_struct* node) + { + const char_t* default_name = PUGIXML_TEXT(":anonymous"); + const char_t* name = node->name ? node->name + 0 : default_name; + + writer.write('<', '/'); + writer.write_string(name); + writer.write('>'); + } + + PUGI__FN void node_output_simple(xml_buffered_writer& writer, xml_node_struct* node, unsigned int flags) + { + const char_t* default_name = PUGIXML_TEXT(":anonymous"); + + switch (PUGI__NODETYPE(node)) + { + case node_pcdata: + text_output(writer, node->value ? node->value + 0 : PUGIXML_TEXT(""), ctx_special_pcdata, flags); + break; + + case node_cdata: + text_output_cdata(writer, node->value ? node->value + 0 : PUGIXML_TEXT("")); + break; + + case node_comment: + node_output_comment(writer, node->value ? node->value + 0 : PUGIXML_TEXT("")); + break; + + case node_pi: + writer.write('<', '?'); + writer.write_string(node->name ? node->name + 0 : default_name); + + if (node->value) + { + writer.write(' '); + node_output_pi_value(writer, node->value); + } + + writer.write('?', '>'); + break; + + case node_declaration: + writer.write('<', '?'); + writer.write_string(node->name ? node->name + 0 : default_name); + node_output_attributes(writer, node, PUGIXML_TEXT(""), 0, flags | format_raw, 0); + writer.write('?', '>'); + break; + + case node_doctype: + writer.write('<', '!', 'D', 'O', 'C'); + writer.write('T', 'Y', 'P', 'E'); + + if (node->value) + { + writer.write(' '); + writer.write_string(node->value); + } + + writer.write('>'); + break; + + default: + assert(false && "Invalid node type"); // unreachable + } + } + + enum indent_flags_t + { + indent_newline = 1, + indent_indent = 2 + }; + + PUGI__FN void node_output(xml_buffered_writer& writer, xml_node_struct* root, const char_t* indent, unsigned int flags, unsigned int depth) + { + size_t indent_length = ((flags & (format_indent | format_indent_attributes)) && (flags & format_raw) == 0) ? strlength(indent) : 0; + unsigned int indent_flags = indent_indent; + + xml_node_struct* node = root; + + do + { + assert(node); + + // begin writing current node + if (PUGI__NODETYPE(node) == node_pcdata || PUGI__NODETYPE(node) == node_cdata) + { + node_output_simple(writer, node, flags); + + indent_flags = 0; + } + else + { + if ((indent_flags & indent_newline) && (flags & format_raw) == 0) + writer.write('\n'); + + if ((indent_flags & indent_indent) && indent_length) + text_output_indent(writer, indent, indent_length, depth); + + if (PUGI__NODETYPE(node) == node_element) + { + indent_flags = indent_newline | indent_indent; + + if (node_output_start(writer, node, indent, indent_length, flags, depth)) + { + // element nodes can have value if parse_embed_pcdata was used + if (node->value) + indent_flags = 0; + + node = node->first_child; + depth++; + continue; + } + } + else if (PUGI__NODETYPE(node) == node_document) + { + indent_flags = indent_indent; + + if (node->first_child) + { + node = node->first_child; + continue; + } + } + else + { + node_output_simple(writer, node, flags); + + indent_flags = indent_newline | indent_indent; + } + } + + // continue to the next node + while (node != root) + { + if (node->next_sibling) + { + node = node->next_sibling; + break; + } + + node = node->parent; + + // write closing node + if (PUGI__NODETYPE(node) == node_element) + { + depth--; + + if ((indent_flags & indent_newline) && (flags & format_raw) == 0) + writer.write('\n'); + + if ((indent_flags & indent_indent) && indent_length) + text_output_indent(writer, indent, indent_length, depth); + + node_output_end(writer, node); + + indent_flags = indent_newline | indent_indent; + } + } + } + while (node != root); + + if ((indent_flags & indent_newline) && (flags & format_raw) == 0) + writer.write('\n'); + } + + PUGI__FN bool has_declaration(xml_node_struct* node) + { + for (xml_node_struct* child = node->first_child; child; child = child->next_sibling) + { + xml_node_type type = PUGI__NODETYPE(child); + + if (type == node_declaration) return true; + if (type == node_element) return false; + } + + return false; + } + + PUGI__FN bool is_attribute_of(xml_attribute_struct* attr, xml_node_struct* node) + { + for (xml_attribute_struct* a = node->first_attribute; a; a = a->next_attribute) + if (a == attr) + return true; + + return false; + } + + PUGI__FN bool allow_insert_attribute(xml_node_type parent) + { + return parent == node_element || parent == node_declaration; + } + + PUGI__FN bool allow_insert_child(xml_node_type parent, xml_node_type child) + { + if (parent != node_document && parent != node_element) return false; + if (child == node_document || child == node_null) return false; + if (parent != node_document && (child == node_declaration || child == node_doctype)) return false; + + return true; + } + + PUGI__FN bool allow_move(xml_node parent, xml_node child) + { + // check that child can be a child of parent + if (!allow_insert_child(parent.type(), child.type())) + return false; + + // check that node is not moved between documents + if (parent.root() != child.root()) + return false; + + // check that new parent is not in the child subtree + xml_node cur = parent; + + while (cur) + { + if (cur == child) + return false; + + cur = cur.parent(); + } + + return true; + } + + template + PUGI__FN void node_copy_string(String& dest, Header& header, uintptr_t header_mask, char_t* source, Header& source_header, xml_allocator* alloc) + { + assert(!dest && (header & header_mask) == 0); + + if (source) + { + if (alloc && (source_header & header_mask) == 0) + { + dest = source; + + // since strcpy_insitu can reuse document buffer memory we need to mark both source and dest as shared + header |= xml_memory_page_contents_shared_mask; + source_header |= xml_memory_page_contents_shared_mask; + } + else + strcpy_insitu(dest, header, header_mask, source, strlength(source)); + } + } + + PUGI__FN void node_copy_contents(xml_node_struct* dn, xml_node_struct* sn, xml_allocator* shared_alloc) + { + node_copy_string(dn->name, dn->header, xml_memory_page_name_allocated_mask, sn->name, sn->header, shared_alloc); + node_copy_string(dn->value, dn->header, xml_memory_page_value_allocated_mask, sn->value, sn->header, shared_alloc); + + for (xml_attribute_struct* sa = sn->first_attribute; sa; sa = sa->next_attribute) + { + xml_attribute_struct* da = append_new_attribute(dn, get_allocator(dn)); + + if (da) + { + node_copy_string(da->name, da->header, xml_memory_page_name_allocated_mask, sa->name, sa->header, shared_alloc); + node_copy_string(da->value, da->header, xml_memory_page_value_allocated_mask, sa->value, sa->header, shared_alloc); + } + } + } + + PUGI__FN void node_copy_tree(xml_node_struct* dn, xml_node_struct* sn) + { + xml_allocator& alloc = get_allocator(dn); + xml_allocator* shared_alloc = (&alloc == &get_allocator(sn)) ? &alloc : 0; + + node_copy_contents(dn, sn, shared_alloc); + + xml_node_struct* dit = dn; + xml_node_struct* sit = sn->first_child; + + while (sit && sit != sn) + { + // loop invariant: dit is inside the subtree rooted at dn + assert(dit); + + // when a tree is copied into one of the descendants, we need to skip that subtree to avoid an infinite loop + if (sit != dn) + { + xml_node_struct* copy = append_new_node(dit, alloc, PUGI__NODETYPE(sit)); + + if (copy) + { + node_copy_contents(copy, sit, shared_alloc); + + if (sit->first_child) + { + dit = copy; + sit = sit->first_child; + continue; + } + } + } + + // continue to the next node + do + { + if (sit->next_sibling) + { + sit = sit->next_sibling; + break; + } + + sit = sit->parent; + dit = dit->parent; + + // loop invariant: dit is inside the subtree rooted at dn while sit is inside sn + assert(sit == sn || dit); + } + while (sit != sn); + } + + assert(!sit || dit == dn->parent); + } + + PUGI__FN void node_copy_attribute(xml_attribute_struct* da, xml_attribute_struct* sa) + { + xml_allocator& alloc = get_allocator(da); + xml_allocator* shared_alloc = (&alloc == &get_allocator(sa)) ? &alloc : 0; + + node_copy_string(da->name, da->header, xml_memory_page_name_allocated_mask, sa->name, sa->header, shared_alloc); + node_copy_string(da->value, da->header, xml_memory_page_value_allocated_mask, sa->value, sa->header, shared_alloc); + } + + inline bool is_text_node(xml_node_struct* node) + { + xml_node_type type = PUGI__NODETYPE(node); + + return type == node_pcdata || type == node_cdata; + } + + // get value with conversion functions + template PUGI__FN PUGI__UNSIGNED_OVERFLOW U string_to_integer(const char_t* value, U minv, U maxv) + { + U result = 0; + const char_t* s = value; + + while (PUGI__IS_CHARTYPE(*s, ct_space)) + s++; + + bool negative = (*s == '-'); + + s += (*s == '+' || *s == '-'); + + bool overflow = false; + + if (s[0] == '0' && (s[1] | ' ') == 'x') + { + s += 2; + + // since overflow detection relies on length of the sequence skip leading zeros + while (*s == '0') + s++; + + const char_t* start = s; + + for (;;) + { + if (static_cast(*s - '0') < 10) + result = result * 16 + (*s - '0'); + else if (static_cast((*s | ' ') - 'a') < 6) + result = result * 16 + ((*s | ' ') - 'a' + 10); + else + break; + + s++; + } + + size_t digits = static_cast(s - start); + + overflow = digits > sizeof(U) * 2; + } + else + { + // since overflow detection relies on length of the sequence skip leading zeros + while (*s == '0') + s++; + + const char_t* start = s; + + for (;;) + { + if (static_cast(*s - '0') < 10) + result = result * 10 + (*s - '0'); + else + break; + + s++; + } + + size_t digits = static_cast(s - start); + + PUGI__STATIC_ASSERT(sizeof(U) == 8 || sizeof(U) == 4 || sizeof(U) == 2); + + const size_t max_digits10 = sizeof(U) == 8 ? 20 : sizeof(U) == 4 ? 10 : 5; + const char_t max_lead = sizeof(U) == 8 ? '1' : sizeof(U) == 4 ? '4' : '6'; + const size_t high_bit = sizeof(U) * 8 - 1; + + overflow = digits >= max_digits10 && !(digits == max_digits10 && (*start < max_lead || (*start == max_lead && result >> high_bit))); + } + + if (negative) + { + // Workaround for crayc++ CC-3059: Expected no overflow in routine. + #ifdef _CRAYC + return (overflow || result > ~minv + 1) ? minv : ~result + 1; + #else + return (overflow || result > 0 - minv) ? minv : 0 - result; + #endif + } + else + return (overflow || result > maxv) ? maxv : result; + } + + PUGI__FN int get_value_int(const char_t* value) + { + return string_to_integer(value, static_cast(INT_MIN), INT_MAX); + } + + PUGI__FN unsigned int get_value_uint(const char_t* value) + { + return string_to_integer(value, 0, UINT_MAX); + } + + PUGI__FN double get_value_double(const char_t* value) + { + #ifdef PUGIXML_WCHAR_MODE + return wcstod(value, 0); + #else + return strtod(value, 0); + #endif + } + + PUGI__FN float get_value_float(const char_t* value) + { + #ifdef PUGIXML_WCHAR_MODE + return static_cast(wcstod(value, 0)); + #else + return static_cast(strtod(value, 0)); + #endif + } + + PUGI__FN bool get_value_bool(const char_t* value) + { + // only look at first char + char_t first = *value; + + // 1*, t* (true), T* (True), y* (yes), Y* (YES) + return (first == '1' || first == 't' || first == 'T' || first == 'y' || first == 'Y'); + } + +#ifdef PUGIXML_HAS_LONG_LONG + PUGI__FN long long get_value_llong(const char_t* value) + { + return string_to_integer(value, static_cast(LLONG_MIN), LLONG_MAX); + } + + PUGI__FN unsigned long long get_value_ullong(const char_t* value) + { + return string_to_integer(value, 0, ULLONG_MAX); + } +#endif + + template PUGI__FN PUGI__UNSIGNED_OVERFLOW char_t* integer_to_string(char_t* begin, char_t* end, U value, bool negative) + { + char_t* result = end - 1; + U rest = negative ? 0 - value : value; + + do + { + *result-- = static_cast('0' + (rest % 10)); + rest /= 10; + } + while (rest); + + assert(result >= begin); + (void)begin; + + *result = '-'; + + return result + !negative; + } + + // set value with conversion functions + template + PUGI__FN bool set_value_ascii(String& dest, Header& header, uintptr_t header_mask, char* buf) + { + #ifdef PUGIXML_WCHAR_MODE + char_t wbuf[128]; + assert(strlen(buf) < sizeof(wbuf) / sizeof(wbuf[0])); + + size_t offset = 0; + for (; buf[offset]; ++offset) wbuf[offset] = buf[offset]; + + return strcpy_insitu(dest, header, header_mask, wbuf, offset); + #else + return strcpy_insitu(dest, header, header_mask, buf, strlen(buf)); + #endif + } + + template + PUGI__FN bool set_value_integer(String& dest, Header& header, uintptr_t header_mask, U value, bool negative) + { + char_t buf[64]; + char_t* end = buf + sizeof(buf) / sizeof(buf[0]); + char_t* begin = integer_to_string(buf, end, value, negative); + + return strcpy_insitu(dest, header, header_mask, begin, end - begin); + } + + template + PUGI__FN bool set_value_convert(String& dest, Header& header, uintptr_t header_mask, float value, int precision) + { + char buf[128]; + PUGI__SNPRINTF(buf, "%.*g", precision, double(value)); + + return set_value_ascii(dest, header, header_mask, buf); + } + + template + PUGI__FN bool set_value_convert(String& dest, Header& header, uintptr_t header_mask, double value, int precision) + { + char buf[128]; + PUGI__SNPRINTF(buf, "%.*g", precision, value); + + return set_value_ascii(dest, header, header_mask, buf); + } + + template + PUGI__FN bool set_value_bool(String& dest, Header& header, uintptr_t header_mask, bool value) + { + return strcpy_insitu(dest, header, header_mask, value ? PUGIXML_TEXT("true") : PUGIXML_TEXT("false"), value ? 4 : 5); + } + + PUGI__FN xml_parse_result load_buffer_impl(xml_document_struct* doc, xml_node_struct* root, void* contents, size_t size, unsigned int options, xml_encoding encoding, bool is_mutable, bool own, char_t** out_buffer) + { + // check input buffer + if (!contents && size) return make_parse_result(status_io_error); + + // get actual encoding + xml_encoding buffer_encoding = impl::get_buffer_encoding(encoding, contents, size); + + // get private buffer + char_t* buffer = 0; + size_t length = 0; + + // coverity[var_deref_model] + if (!impl::convert_buffer(buffer, length, buffer_encoding, contents, size, is_mutable)) return impl::make_parse_result(status_out_of_memory); + + // delete original buffer if we performed a conversion + if (own && buffer != contents && contents) impl::xml_memory::deallocate(contents); + + // grab onto buffer if it's our buffer, user is responsible for deallocating contents himself + if (own || buffer != contents) *out_buffer = buffer; + + // store buffer for offset_debug + doc->buffer = buffer; + + // parse + xml_parse_result res = impl::xml_parser::parse(buffer, length, doc, root, options); + + // remember encoding + res.encoding = buffer_encoding; + + return res; + } + + // we need to get length of entire file to load it in memory; the only (relatively) sane way to do it is via seek/tell trick + PUGI__FN xml_parse_status get_file_size(FILE* file, size_t& out_result) + { + #if defined(PUGI__MSVC_CRT_VERSION) && PUGI__MSVC_CRT_VERSION >= 1400 + // there are 64-bit versions of fseek/ftell, let's use them + typedef __int64 length_type; + + _fseeki64(file, 0, SEEK_END); + length_type length = _ftelli64(file); + _fseeki64(file, 0, SEEK_SET); + #elif defined(__MINGW32__) && !defined(__NO_MINGW_LFS) && (!defined(__STRICT_ANSI__) || defined(__MINGW64_VERSION_MAJOR)) + // there are 64-bit versions of fseek/ftell, let's use them + typedef off64_t length_type; + + fseeko64(file, 0, SEEK_END); + length_type length = ftello64(file); + fseeko64(file, 0, SEEK_SET); + #else + // if this is a 32-bit OS, long is enough; if this is a unix system, long is 64-bit, which is enough; otherwise we can't do anything anyway. + typedef long length_type; + + fseek(file, 0, SEEK_END); + length_type length = ftell(file); + fseek(file, 0, SEEK_SET); + #endif + + // check for I/O errors + if (length < 0) return status_io_error; + + // check for overflow + size_t result = static_cast(length); + + if (static_cast(result) != length) return status_out_of_memory; + + // finalize + out_result = result; + + return status_ok; + } + + // This function assumes that buffer has extra sizeof(char_t) writable bytes after size + PUGI__FN size_t zero_terminate_buffer(void* buffer, size_t size, xml_encoding encoding) + { + // We only need to zero-terminate if encoding conversion does not do it for us + #ifdef PUGIXML_WCHAR_MODE + xml_encoding wchar_encoding = get_wchar_encoding(); + + if (encoding == wchar_encoding || need_endian_swap_utf(encoding, wchar_encoding)) + { + size_t length = size / sizeof(char_t); + + static_cast(buffer)[length] = 0; + return (length + 1) * sizeof(char_t); + } + #else + if (encoding == encoding_utf8) + { + static_cast(buffer)[size] = 0; + return size + 1; + } + #endif + + return size; + } + + PUGI__FN xml_parse_result load_file_impl(xml_document_struct* doc, FILE* file, unsigned int options, xml_encoding encoding, char_t** out_buffer) + { + if (!file) return make_parse_result(status_file_not_found); + + // get file size (can result in I/O errors) + size_t size = 0; + xml_parse_status size_status = get_file_size(file, size); + if (size_status != status_ok) return make_parse_result(size_status); + + size_t max_suffix_size = sizeof(char_t); + + // allocate buffer for the whole file + char* contents = static_cast(xml_memory::allocate(size + max_suffix_size)); + if (!contents) return make_parse_result(status_out_of_memory); + + // read file in memory + size_t read_size = fread(contents, 1, size, file); + + if (read_size != size) + { + xml_memory::deallocate(contents); + return make_parse_result(status_io_error); + } + + xml_encoding real_encoding = get_buffer_encoding(encoding, contents, size); + + return load_buffer_impl(doc, doc, contents, zero_terminate_buffer(contents, size, real_encoding), options, real_encoding, true, true, out_buffer); + } + + PUGI__FN void close_file(FILE* file) + { + fclose(file); + } + +#ifndef PUGIXML_NO_STL + template struct xml_stream_chunk + { + static xml_stream_chunk* create() + { + void* memory = xml_memory::allocate(sizeof(xml_stream_chunk)); + if (!memory) return 0; + + return new (memory) xml_stream_chunk(); + } + + static void destroy(xml_stream_chunk* chunk) + { + // free chunk chain + while (chunk) + { + xml_stream_chunk* next_ = chunk->next; + + xml_memory::deallocate(chunk); + + chunk = next_; + } + } + + xml_stream_chunk(): next(0), size(0) + { + } + + xml_stream_chunk* next; + size_t size; + + T data[xml_memory_page_size / sizeof(T)]; + }; + + template PUGI__FN xml_parse_status load_stream_data_noseek(std::basic_istream& stream, void** out_buffer, size_t* out_size) + { + auto_deleter > chunks(0, xml_stream_chunk::destroy); + + // read file to a chunk list + size_t total = 0; + xml_stream_chunk* last = 0; + + while (!stream.eof()) + { + // allocate new chunk + xml_stream_chunk* chunk = xml_stream_chunk::create(); + if (!chunk) return status_out_of_memory; + + // append chunk to list + if (last) last = last->next = chunk; + else chunks.data = last = chunk; + + // read data to chunk + stream.read(chunk->data, static_cast(sizeof(chunk->data) / sizeof(T))); + chunk->size = static_cast(stream.gcount()) * sizeof(T); + + // read may set failbit | eofbit in case gcount() is less than read length, so check for other I/O errors + if (stream.bad() || (!stream.eof() && stream.fail())) return status_io_error; + + // guard against huge files (chunk size is small enough to make this overflow check work) + if (total + chunk->size < total) return status_out_of_memory; + total += chunk->size; + } + + size_t max_suffix_size = sizeof(char_t); + + // copy chunk list to a contiguous buffer + char* buffer = static_cast(xml_memory::allocate(total + max_suffix_size)); + if (!buffer) return status_out_of_memory; + + char* write = buffer; + + for (xml_stream_chunk* chunk = chunks.data; chunk; chunk = chunk->next) + { + assert(write + chunk->size <= buffer + total); + memcpy(write, chunk->data, chunk->size); + write += chunk->size; + } + + assert(write == buffer + total); + + // return buffer + *out_buffer = buffer; + *out_size = total; + + return status_ok; + } + + template PUGI__FN xml_parse_status load_stream_data_seek(std::basic_istream& stream, void** out_buffer, size_t* out_size) + { + // get length of remaining data in stream + typename std::basic_istream::pos_type pos = stream.tellg(); + stream.seekg(0, std::ios::end); + std::streamoff length = stream.tellg() - pos; + stream.seekg(pos); + + if (stream.fail() || pos < 0) return status_io_error; + + // guard against huge files + size_t read_length = static_cast(length); + + if (static_cast(read_length) != length || length < 0) return status_out_of_memory; + + size_t max_suffix_size = sizeof(char_t); + + // read stream data into memory (guard against stream exceptions with buffer holder) + auto_deleter buffer(xml_memory::allocate(read_length * sizeof(T) + max_suffix_size), xml_memory::deallocate); + if (!buffer.data) return status_out_of_memory; + + stream.read(static_cast(buffer.data), static_cast(read_length)); + + // read may set failbit | eofbit in case gcount() is less than read_length (i.e. line ending conversion), so check for other I/O errors + if (stream.bad() || (!stream.eof() && stream.fail())) return status_io_error; + + // return buffer + size_t actual_length = static_cast(stream.gcount()); + assert(actual_length <= read_length); + + *out_buffer = buffer.release(); + *out_size = actual_length * sizeof(T); + + return status_ok; + } + + template PUGI__FN xml_parse_result load_stream_impl(xml_document_struct* doc, std::basic_istream& stream, unsigned int options, xml_encoding encoding, char_t** out_buffer) + { + void* buffer = 0; + size_t size = 0; + xml_parse_status status = status_ok; + + // if stream has an error bit set, bail out (otherwise tellg() can fail and we'll clear error bits) + if (stream.fail()) return make_parse_result(status_io_error); + + // load stream to memory (using seek-based implementation if possible, since it's faster and takes less memory) + if (stream.tellg() < 0) + { + stream.clear(); // clear error flags that could be set by a failing tellg + status = load_stream_data_noseek(stream, &buffer, &size); + } + else + status = load_stream_data_seek(stream, &buffer, &size); + + if (status != status_ok) return make_parse_result(status); + + xml_encoding real_encoding = get_buffer_encoding(encoding, buffer, size); + + return load_buffer_impl(doc, doc, buffer, zero_terminate_buffer(buffer, size, real_encoding), options, real_encoding, true, true, out_buffer); + } +#endif + +#if defined(PUGI__MSVC_CRT_VERSION) || defined(__BORLANDC__) || (defined(__MINGW32__) && (!defined(__STRICT_ANSI__) || defined(__MINGW64_VERSION_MAJOR))) + PUGI__FN FILE* open_file_wide(const wchar_t* path, const wchar_t* mode) + { +#if defined(PUGI__MSVC_CRT_VERSION) && PUGI__MSVC_CRT_VERSION >= 1400 + FILE* file = 0; + return _wfopen_s(&file, path, mode) == 0 ? file : 0; +#else + return _wfopen(path, mode); +#endif + } +#else + PUGI__FN char* convert_path_heap(const wchar_t* str) + { + assert(str); + + // first pass: get length in utf8 characters + size_t length = strlength_wide(str); + size_t size = as_utf8_begin(str, length); + + // allocate resulting string + char* result = static_cast(xml_memory::allocate(size + 1)); + if (!result) return 0; + + // second pass: convert to utf8 + as_utf8_end(result, size, str, length); + + // zero-terminate + result[size] = 0; + + return result; + } + + PUGI__FN FILE* open_file_wide(const wchar_t* path, const wchar_t* mode) + { + // there is no standard function to open wide paths, so our best bet is to try utf8 path + char* path_utf8 = convert_path_heap(path); + if (!path_utf8) return 0; + + // convert mode to ASCII (we mirror _wfopen interface) + char mode_ascii[4] = {0}; + for (size_t i = 0; mode[i]; ++i) mode_ascii[i] = static_cast(mode[i]); + + // try to open the utf8 path + FILE* result = fopen(path_utf8, mode_ascii); + + // free dummy buffer + xml_memory::deallocate(path_utf8); + + return result; + } +#endif + + PUGI__FN FILE* open_file(const char* path, const char* mode) + { +#if defined(PUGI__MSVC_CRT_VERSION) && PUGI__MSVC_CRT_VERSION >= 1400 + FILE* file = 0; + return fopen_s(&file, path, mode) == 0 ? file : 0; +#else + return fopen(path, mode); +#endif + } + + PUGI__FN bool save_file_impl(const xml_document& doc, FILE* file, const char_t* indent, unsigned int flags, xml_encoding encoding) + { + if (!file) return false; + + xml_writer_file writer(file); + doc.save(writer, indent, flags, encoding); + + return ferror(file) == 0; + } + + struct name_null_sentry + { + xml_node_struct* node; + char_t* name; + + name_null_sentry(xml_node_struct* node_): node(node_), name(node_->name) + { + node->name = 0; + } + + ~name_null_sentry() + { + node->name = name; + } + }; +PUGI__NS_END + +OIIO_NAMESPACE_3_1_BEGIN namespace pugi +{ + PUGI__FN xml_writer_file::xml_writer_file(void* file_): file(file_) + { + } + + PUGI__FN void xml_writer_file::write(const void* data, size_t size) + { + size_t result = fwrite(data, 1, size, static_cast(file)); + (void)!result; // unfortunately we can't do proper error handling here + } + +#ifndef PUGIXML_NO_STL + PUGI__FN xml_writer_stream::xml_writer_stream(std::basic_ostream >& stream): narrow_stream(&stream), wide_stream(0) + { + } + + PUGI__FN xml_writer_stream::xml_writer_stream(std::basic_ostream >& stream): narrow_stream(0), wide_stream(&stream) + { + } + + PUGI__FN void xml_writer_stream::write(const void* data, size_t size) + { + if (narrow_stream) + { + assert(!wide_stream); + narrow_stream->write(reinterpret_cast(data), static_cast(size)); + } + else + { + assert(wide_stream); + assert(size % sizeof(wchar_t) == 0); + + wide_stream->write(reinterpret_cast(data), static_cast(size / sizeof(wchar_t))); + } + } +#endif + + PUGI__FN xml_tree_walker::xml_tree_walker(): _depth(0) + { + } + + PUGI__FN xml_tree_walker::~xml_tree_walker() + { + } + + PUGI__FN int xml_tree_walker::depth() const + { + return _depth; + } + + PUGI__FN bool xml_tree_walker::begin(xml_node&) + { + return true; + } + + PUGI__FN bool xml_tree_walker::end(xml_node&) + { + return true; + } + + PUGI__FN xml_attribute::xml_attribute(): _attr(0) + { + } + + PUGI__FN xml_attribute::xml_attribute(xml_attribute_struct* attr): _attr(attr) + { + } + + PUGI__FN static void unspecified_bool_xml_attribute(xml_attribute***) + { + } + + PUGI__FN xml_attribute::operator xml_attribute::unspecified_bool_type() const + { + return _attr ? unspecified_bool_xml_attribute : 0; + } + + PUGI__FN bool xml_attribute::operator!() const + { + return !_attr; + } + + PUGI__FN bool xml_attribute::operator==(const xml_attribute& r) const + { + return (_attr == r._attr); + } + + PUGI__FN bool xml_attribute::operator!=(const xml_attribute& r) const + { + return (_attr != r._attr); + } + + PUGI__FN bool xml_attribute::operator<(const xml_attribute& r) const + { + return (_attr < r._attr); + } + + PUGI__FN bool xml_attribute::operator>(const xml_attribute& r) const + { + return (_attr > r._attr); + } + + PUGI__FN bool xml_attribute::operator<=(const xml_attribute& r) const + { + return (_attr <= r._attr); + } + + PUGI__FN bool xml_attribute::operator>=(const xml_attribute& r) const + { + return (_attr >= r._attr); + } + + PUGI__FN xml_attribute xml_attribute::next_attribute() const + { + return _attr ? xml_attribute(_attr->next_attribute) : xml_attribute(); + } + + PUGI__FN xml_attribute xml_attribute::previous_attribute() const + { + return _attr && _attr->prev_attribute_c->next_attribute ? xml_attribute(_attr->prev_attribute_c) : xml_attribute(); + } + + PUGI__FN const char_t* xml_attribute::as_string(const char_t* def) const + { + return (_attr && _attr->value) ? _attr->value + 0 : def; + } + + PUGI__FN int xml_attribute::as_int(int def) const + { + return (_attr && _attr->value) ? impl::get_value_int(_attr->value) : def; + } + + PUGI__FN unsigned int xml_attribute::as_uint(unsigned int def) const + { + return (_attr && _attr->value) ? impl::get_value_uint(_attr->value) : def; + } + + PUGI__FN double xml_attribute::as_double(double def) const + { + return (_attr && _attr->value) ? impl::get_value_double(_attr->value) : def; + } + + PUGI__FN float xml_attribute::as_float(float def) const + { + return (_attr && _attr->value) ? impl::get_value_float(_attr->value) : def; + } + + PUGI__FN bool xml_attribute::as_bool(bool def) const + { + return (_attr && _attr->value) ? impl::get_value_bool(_attr->value) : def; + } + +#ifdef PUGIXML_HAS_LONG_LONG + PUGI__FN long long xml_attribute::as_llong(long long def) const + { + return (_attr && _attr->value) ? impl::get_value_llong(_attr->value) : def; + } + + PUGI__FN unsigned long long xml_attribute::as_ullong(unsigned long long def) const + { + return (_attr && _attr->value) ? impl::get_value_ullong(_attr->value) : def; + } +#endif + + PUGI__FN bool xml_attribute::empty() const + { + return !_attr; + } + + PUGI__FN const char_t* xml_attribute::name() const + { + return (_attr && _attr->name) ? _attr->name + 0 : PUGIXML_TEXT(""); + } + + PUGI__FN const char_t* xml_attribute::value() const + { + return (_attr && _attr->value) ? _attr->value + 0 : PUGIXML_TEXT(""); + } + + PUGI__FN size_t xml_attribute::hash_value() const + { + return static_cast(reinterpret_cast(_attr) / sizeof(xml_attribute_struct)); + } + + PUGI__FN xml_attribute_struct* xml_attribute::internal_object() const + { + return _attr; + } + + PUGI__FN xml_attribute& xml_attribute::operator=(const char_t* rhs) + { + set_value(rhs); + return *this; + } + + PUGI__FN xml_attribute& xml_attribute::operator=(int rhs) + { + set_value(rhs); + return *this; + } + + PUGI__FN xml_attribute& xml_attribute::operator=(unsigned int rhs) + { + set_value(rhs); + return *this; + } + + PUGI__FN xml_attribute& xml_attribute::operator=(long rhs) + { + set_value(rhs); + return *this; + } + + PUGI__FN xml_attribute& xml_attribute::operator=(unsigned long rhs) + { + set_value(rhs); + return *this; + } + + PUGI__FN xml_attribute& xml_attribute::operator=(double rhs) + { + set_value(rhs); + return *this; + } + + PUGI__FN xml_attribute& xml_attribute::operator=(float rhs) + { + set_value(rhs); + return *this; + } + + PUGI__FN xml_attribute& xml_attribute::operator=(bool rhs) + { + set_value(rhs); + return *this; + } + +#ifdef PUGIXML_HAS_LONG_LONG + PUGI__FN xml_attribute& xml_attribute::operator=(long long rhs) + { + set_value(rhs); + return *this; + } + + PUGI__FN xml_attribute& xml_attribute::operator=(unsigned long long rhs) + { + set_value(rhs); + return *this; + } +#endif + + PUGI__FN bool xml_attribute::set_name(const char_t* rhs) + { + if (!_attr) return false; + + return impl::strcpy_insitu(_attr->name, _attr->header, impl::xml_memory_page_name_allocated_mask, rhs, impl::strlength(rhs)); + } + + PUGI__FN bool xml_attribute::set_value(const char_t* rhs) + { + if (!_attr) return false; + + return impl::strcpy_insitu(_attr->value, _attr->header, impl::xml_memory_page_value_allocated_mask, rhs, impl::strlength(rhs)); + } + + PUGI__FN bool xml_attribute::set_value(int rhs) + { + if (!_attr) return false; + + return impl::set_value_integer(_attr->value, _attr->header, impl::xml_memory_page_value_allocated_mask, rhs, rhs < 0); + } + + PUGI__FN bool xml_attribute::set_value(unsigned int rhs) + { + if (!_attr) return false; + + return impl::set_value_integer(_attr->value, _attr->header, impl::xml_memory_page_value_allocated_mask, rhs, false); + } + + PUGI__FN bool xml_attribute::set_value(long rhs) + { + if (!_attr) return false; + + return impl::set_value_integer(_attr->value, _attr->header, impl::xml_memory_page_value_allocated_mask, rhs, rhs < 0); + } + + PUGI__FN bool xml_attribute::set_value(unsigned long rhs) + { + if (!_attr) return false; + + return impl::set_value_integer(_attr->value, _attr->header, impl::xml_memory_page_value_allocated_mask, rhs, false); + } + + PUGI__FN bool xml_attribute::set_value(double rhs) + { + if (!_attr) return false; + + return impl::set_value_convert(_attr->value, _attr->header, impl::xml_memory_page_value_allocated_mask, rhs, default_double_precision); + } + + PUGI__FN bool xml_attribute::set_value(double rhs, int precision) + { + if (!_attr) return false; + + return impl::set_value_convert(_attr->value, _attr->header, impl::xml_memory_page_value_allocated_mask, rhs, precision); + } + + PUGI__FN bool xml_attribute::set_value(float rhs) + { + if (!_attr) return false; + + return impl::set_value_convert(_attr->value, _attr->header, impl::xml_memory_page_value_allocated_mask, rhs, default_float_precision); + } + + PUGI__FN bool xml_attribute::set_value(float rhs, int precision) + { + if (!_attr) return false; + + return impl::set_value_convert(_attr->value, _attr->header, impl::xml_memory_page_value_allocated_mask, rhs, precision); + } + + PUGI__FN bool xml_attribute::set_value(bool rhs) + { + if (!_attr) return false; + + return impl::set_value_bool(_attr->value, _attr->header, impl::xml_memory_page_value_allocated_mask, rhs); + } + +#ifdef PUGIXML_HAS_LONG_LONG + PUGI__FN bool xml_attribute::set_value(long long rhs) + { + if (!_attr) return false; + + return impl::set_value_integer(_attr->value, _attr->header, impl::xml_memory_page_value_allocated_mask, rhs, rhs < 0); + } + + PUGI__FN bool xml_attribute::set_value(unsigned long long rhs) + { + if (!_attr) return false; + + return impl::set_value_integer(_attr->value, _attr->header, impl::xml_memory_page_value_allocated_mask, rhs, false); + } +#endif + +#ifdef __BORLANDC__ + PUGI__FN bool operator&&(const xml_attribute& lhs, bool rhs) + { + return (bool)lhs && rhs; + } + + PUGI__FN bool operator||(const xml_attribute& lhs, bool rhs) + { + return (bool)lhs || rhs; + } +#endif + + PUGI__FN xml_node::xml_node(): _root(0) + { + } + + PUGI__FN xml_node::xml_node(xml_node_struct* p): _root(p) + { + } + + PUGI__FN static void unspecified_bool_xml_node(xml_node***) + { + } + + PUGI__FN xml_node::operator xml_node::unspecified_bool_type() const + { + return _root ? unspecified_bool_xml_node : 0; + } + + PUGI__FN bool xml_node::operator!() const + { + return !_root; + } + + PUGI__FN xml_node::iterator xml_node::begin() const + { + return iterator(_root ? _root->first_child + 0 : 0, _root); + } + + PUGI__FN xml_node::iterator xml_node::end() const + { + return iterator(0, _root); + } + + PUGI__FN xml_node::attribute_iterator xml_node::attributes_begin() const + { + return attribute_iterator(_root ? _root->first_attribute + 0 : 0, _root); + } + + PUGI__FN xml_node::attribute_iterator xml_node::attributes_end() const + { + return attribute_iterator(0, _root); + } + + PUGI__FN xml_object_range xml_node::children() const + { + return xml_object_range(begin(), end()); + } + + PUGI__FN xml_object_range xml_node::children(const char_t* name_) const + { + return xml_object_range(xml_named_node_iterator(child(name_)._root, _root, name_), xml_named_node_iterator(0, _root, name_)); + } + + PUGI__FN xml_object_range xml_node::attributes() const + { + return xml_object_range(attributes_begin(), attributes_end()); + } + + PUGI__FN bool xml_node::operator==(const xml_node& r) const + { + return (_root == r._root); + } + + PUGI__FN bool xml_node::operator!=(const xml_node& r) const + { + return (_root != r._root); + } + + PUGI__FN bool xml_node::operator<(const xml_node& r) const + { + return (_root < r._root); + } + + PUGI__FN bool xml_node::operator>(const xml_node& r) const + { + return (_root > r._root); + } + + PUGI__FN bool xml_node::operator<=(const xml_node& r) const + { + return (_root <= r._root); + } + + PUGI__FN bool xml_node::operator>=(const xml_node& r) const + { + return (_root >= r._root); + } + + PUGI__FN bool xml_node::empty() const + { + return !_root; + } + + PUGI__FN const char_t* xml_node::name() const + { + return (_root && _root->name) ? _root->name + 0 : PUGIXML_TEXT(""); + } + + PUGI__FN xml_node_type xml_node::type() const + { + return _root ? PUGI__NODETYPE(_root) : node_null; + } + + PUGI__FN const char_t* xml_node::value() const + { + return (_root && _root->value) ? _root->value + 0 : PUGIXML_TEXT(""); + } + + PUGI__FN xml_node xml_node::child(const char_t* name_) const + { + if (!_root) return xml_node(); + + for (xml_node_struct* i = _root->first_child; i; i = i->next_sibling) + if (i->name && impl::strequal(name_, i->name)) return xml_node(i); + + return xml_node(); + } + + PUGI__FN xml_attribute xml_node::attribute(const char_t* name_) const + { + if (!_root) return xml_attribute(); + + for (xml_attribute_struct* i = _root->first_attribute; i; i = i->next_attribute) + if (i->name && impl::strequal(name_, i->name)) + return xml_attribute(i); + + return xml_attribute(); + } + + PUGI__FN xml_node xml_node::next_sibling(const char_t* name_) const + { + if (!_root) return xml_node(); + + for (xml_node_struct* i = _root->next_sibling; i; i = i->next_sibling) + if (i->name && impl::strequal(name_, i->name)) return xml_node(i); + + return xml_node(); + } + + PUGI__FN xml_node xml_node::next_sibling() const + { + return _root ? xml_node(_root->next_sibling) : xml_node(); + } + + PUGI__FN xml_node xml_node::previous_sibling(const char_t* name_) const + { + if (!_root) return xml_node(); + + for (xml_node_struct* i = _root->prev_sibling_c; i->next_sibling; i = i->prev_sibling_c) + if (i->name && impl::strequal(name_, i->name)) return xml_node(i); + + return xml_node(); + } + + PUGI__FN xml_attribute xml_node::attribute(const char_t* name_, xml_attribute& hint_) const + { + xml_attribute_struct* hint = hint_._attr; + + // if hint is not an attribute of node, behavior is not defined + assert(!hint || (_root && impl::is_attribute_of(hint, _root))); + + if (!_root) return xml_attribute(); + + // optimistically search from hint up until the end + for (xml_attribute_struct* i = hint; i; i = i->next_attribute) + if (i->name && impl::strequal(name_, i->name)) + { + // update hint to maximize efficiency of searching for consecutive attributes + hint_._attr = i->next_attribute; + + return xml_attribute(i); + } + + // wrap around and search from the first attribute until the hint + // 'j' null pointer check is technically redundant, but it prevents a crash in case the assertion above fails + for (xml_attribute_struct* j = _root->first_attribute; j && j != hint; j = j->next_attribute) + if (j->name && impl::strequal(name_, j->name)) + { + // update hint to maximize efficiency of searching for consecutive attributes + hint_._attr = j->next_attribute; + + return xml_attribute(j); + } + + return xml_attribute(); + } + + PUGI__FN xml_node xml_node::previous_sibling() const + { + if (!_root) return xml_node(); + + if (_root->prev_sibling_c->next_sibling) return xml_node(_root->prev_sibling_c); + else return xml_node(); + } + + PUGI__FN xml_node xml_node::parent() const + { + return _root ? xml_node(_root->parent) : xml_node(); + } + + PUGI__FN xml_node xml_node::root() const + { + return _root ? xml_node(&impl::get_document(_root)) : xml_node(); + } + + PUGI__FN xml_text xml_node::text() const + { + return xml_text(_root); + } + + PUGI__FN const char_t* xml_node::child_value() const + { + if (!_root) return PUGIXML_TEXT(""); + + // element nodes can have value if parse_embed_pcdata was used + if (PUGI__NODETYPE(_root) == node_element && _root->value) + return _root->value; + + for (xml_node_struct* i = _root->first_child; i; i = i->next_sibling) + if (impl::is_text_node(i) && i->value) + return i->value; + + return PUGIXML_TEXT(""); + } + + PUGI__FN const char_t* xml_node::child_value(const char_t* name_) const + { + return child(name_).child_value(); + } + + PUGI__FN xml_attribute xml_node::first_attribute() const + { + return _root ? xml_attribute(_root->first_attribute) : xml_attribute(); + } + + PUGI__FN xml_attribute xml_node::last_attribute() const + { + return _root && _root->first_attribute ? xml_attribute(_root->first_attribute->prev_attribute_c) : xml_attribute(); + } + + PUGI__FN xml_node xml_node::first_child() const + { + return _root ? xml_node(_root->first_child) : xml_node(); + } + + PUGI__FN xml_node xml_node::last_child() const + { + return _root && _root->first_child ? xml_node(_root->first_child->prev_sibling_c) : xml_node(); + } + + PUGI__FN bool xml_node::set_name(const char_t* rhs) + { + xml_node_type type_ = _root ? PUGI__NODETYPE(_root) : node_null; + + if (type_ != node_element && type_ != node_pi && type_ != node_declaration) + return false; + + return impl::strcpy_insitu(_root->name, _root->header, impl::xml_memory_page_name_allocated_mask, rhs, impl::strlength(rhs)); + } + + PUGI__FN bool xml_node::set_value(const char_t* rhs) + { + xml_node_type type_ = _root ? PUGI__NODETYPE(_root) : node_null; + + if (type_ != node_pcdata && type_ != node_cdata && type_ != node_comment && type_ != node_pi && type_ != node_doctype) + return false; + + return impl::strcpy_insitu(_root->value, _root->header, impl::xml_memory_page_value_allocated_mask, rhs, impl::strlength(rhs)); + } + + PUGI__FN xml_attribute xml_node::append_attribute(const char_t* name_) + { + if (!impl::allow_insert_attribute(type())) return xml_attribute(); + + impl::xml_allocator& alloc = impl::get_allocator(_root); + if (!alloc.reserve()) return xml_attribute(); + + xml_attribute a(impl::allocate_attribute(alloc)); + if (!a) return xml_attribute(); + + impl::append_attribute(a._attr, _root); + + a.set_name(name_); + + return a; + } + + PUGI__FN xml_attribute xml_node::prepend_attribute(const char_t* name_) + { + if (!impl::allow_insert_attribute(type())) return xml_attribute(); + + impl::xml_allocator& alloc = impl::get_allocator(_root); + if (!alloc.reserve()) return xml_attribute(); + + xml_attribute a(impl::allocate_attribute(alloc)); + if (!a) return xml_attribute(); + + impl::prepend_attribute(a._attr, _root); + + a.set_name(name_); + + return a; + } + + PUGI__FN xml_attribute xml_node::insert_attribute_after(const char_t* name_, const xml_attribute& attr) + { + if (!impl::allow_insert_attribute(type())) return xml_attribute(); + if (!attr || !impl::is_attribute_of(attr._attr, _root)) return xml_attribute(); + + impl::xml_allocator& alloc = impl::get_allocator(_root); + if (!alloc.reserve()) return xml_attribute(); + + xml_attribute a(impl::allocate_attribute(alloc)); + if (!a) return xml_attribute(); + + impl::insert_attribute_after(a._attr, attr._attr, _root); + + a.set_name(name_); + + return a; + } + + PUGI__FN xml_attribute xml_node::insert_attribute_before(const char_t* name_, const xml_attribute& attr) + { + if (!impl::allow_insert_attribute(type())) return xml_attribute(); + if (!attr || !impl::is_attribute_of(attr._attr, _root)) return xml_attribute(); + + impl::xml_allocator& alloc = impl::get_allocator(_root); + if (!alloc.reserve()) return xml_attribute(); + + xml_attribute a(impl::allocate_attribute(alloc)); + if (!a) return xml_attribute(); + + impl::insert_attribute_before(a._attr, attr._attr, _root); + + a.set_name(name_); + + return a; + } + + PUGI__FN xml_attribute xml_node::append_copy(const xml_attribute& proto) + { + if (!proto) return xml_attribute(); + if (!impl::allow_insert_attribute(type())) return xml_attribute(); + + impl::xml_allocator& alloc = impl::get_allocator(_root); + if (!alloc.reserve()) return xml_attribute(); + + xml_attribute a(impl::allocate_attribute(alloc)); + if (!a) return xml_attribute(); + + impl::append_attribute(a._attr, _root); + impl::node_copy_attribute(a._attr, proto._attr); + + return a; + } + + PUGI__FN xml_attribute xml_node::prepend_copy(const xml_attribute& proto) + { + if (!proto) return xml_attribute(); + if (!impl::allow_insert_attribute(type())) return xml_attribute(); + + impl::xml_allocator& alloc = impl::get_allocator(_root); + if (!alloc.reserve()) return xml_attribute(); + + xml_attribute a(impl::allocate_attribute(alloc)); + if (!a) return xml_attribute(); + + impl::prepend_attribute(a._attr, _root); + impl::node_copy_attribute(a._attr, proto._attr); + + return a; + } + + PUGI__FN xml_attribute xml_node::insert_copy_after(const xml_attribute& proto, const xml_attribute& attr) + { + if (!proto) return xml_attribute(); + if (!impl::allow_insert_attribute(type())) return xml_attribute(); + if (!attr || !impl::is_attribute_of(attr._attr, _root)) return xml_attribute(); + + impl::xml_allocator& alloc = impl::get_allocator(_root); + if (!alloc.reserve()) return xml_attribute(); + + xml_attribute a(impl::allocate_attribute(alloc)); + if (!a) return xml_attribute(); + + impl::insert_attribute_after(a._attr, attr._attr, _root); + impl::node_copy_attribute(a._attr, proto._attr); + + return a; + } + + PUGI__FN xml_attribute xml_node::insert_copy_before(const xml_attribute& proto, const xml_attribute& attr) + { + if (!proto) return xml_attribute(); + if (!impl::allow_insert_attribute(type())) return xml_attribute(); + if (!attr || !impl::is_attribute_of(attr._attr, _root)) return xml_attribute(); + + impl::xml_allocator& alloc = impl::get_allocator(_root); + if (!alloc.reserve()) return xml_attribute(); + + xml_attribute a(impl::allocate_attribute(alloc)); + if (!a) return xml_attribute(); + + impl::insert_attribute_before(a._attr, attr._attr, _root); + impl::node_copy_attribute(a._attr, proto._attr); + + return a; + } + + PUGI__FN xml_node xml_node::append_child(xml_node_type type_) + { + if (!impl::allow_insert_child(type(), type_)) return xml_node(); + + impl::xml_allocator& alloc = impl::get_allocator(_root); + if (!alloc.reserve()) return xml_node(); + + xml_node n(impl::allocate_node(alloc, type_)); + if (!n) return xml_node(); + + impl::append_node(n._root, _root); + + if (type_ == node_declaration) n.set_name(PUGIXML_TEXT("xml")); + + return n; + } + + PUGI__FN xml_node xml_node::prepend_child(xml_node_type type_) + { + if (!impl::allow_insert_child(type(), type_)) return xml_node(); + + impl::xml_allocator& alloc = impl::get_allocator(_root); + if (!alloc.reserve()) return xml_node(); + + xml_node n(impl::allocate_node(alloc, type_)); + if (!n) return xml_node(); + + impl::prepend_node(n._root, _root); + + if (type_ == node_declaration) n.set_name(PUGIXML_TEXT("xml")); + + return n; + } + + PUGI__FN xml_node xml_node::insert_child_before(xml_node_type type_, const xml_node& node) + { + if (!impl::allow_insert_child(type(), type_)) return xml_node(); + if (!node._root || node._root->parent != _root) return xml_node(); + + impl::xml_allocator& alloc = impl::get_allocator(_root); + if (!alloc.reserve()) return xml_node(); + + xml_node n(impl::allocate_node(alloc, type_)); + if (!n) return xml_node(); + + impl::insert_node_before(n._root, node._root); + + if (type_ == node_declaration) n.set_name(PUGIXML_TEXT("xml")); + + return n; + } + + PUGI__FN xml_node xml_node::insert_child_after(xml_node_type type_, const xml_node& node) + { + if (!impl::allow_insert_child(type(), type_)) return xml_node(); + if (!node._root || node._root->parent != _root) return xml_node(); + + impl::xml_allocator& alloc = impl::get_allocator(_root); + if (!alloc.reserve()) return xml_node(); + + xml_node n(impl::allocate_node(alloc, type_)); + if (!n) return xml_node(); + + impl::insert_node_after(n._root, node._root); + + if (type_ == node_declaration) n.set_name(PUGIXML_TEXT("xml")); + + return n; + } + + PUGI__FN xml_node xml_node::append_child(const char_t* name_) + { + xml_node result = append_child(node_element); + + result.set_name(name_); + + return result; + } + + PUGI__FN xml_node xml_node::prepend_child(const char_t* name_) + { + xml_node result = prepend_child(node_element); + + result.set_name(name_); + + return result; + } + + PUGI__FN xml_node xml_node::insert_child_after(const char_t* name_, const xml_node& node) + { + xml_node result = insert_child_after(node_element, node); + + result.set_name(name_); + + return result; + } + + PUGI__FN xml_node xml_node::insert_child_before(const char_t* name_, const xml_node& node) + { + xml_node result = insert_child_before(node_element, node); + + result.set_name(name_); + + return result; + } + + PUGI__FN xml_node xml_node::append_copy(const xml_node& proto) + { + xml_node_type type_ = proto.type(); + if (!impl::allow_insert_child(type(), type_)) return xml_node(); + + impl::xml_allocator& alloc = impl::get_allocator(_root); + if (!alloc.reserve()) return xml_node(); + + xml_node n(impl::allocate_node(alloc, type_)); + if (!n) return xml_node(); + + impl::append_node(n._root, _root); + impl::node_copy_tree(n._root, proto._root); + + return n; + } + + PUGI__FN xml_node xml_node::prepend_copy(const xml_node& proto) + { + xml_node_type type_ = proto.type(); + if (!impl::allow_insert_child(type(), type_)) return xml_node(); + + impl::xml_allocator& alloc = impl::get_allocator(_root); + if (!alloc.reserve()) return xml_node(); + + xml_node n(impl::allocate_node(alloc, type_)); + if (!n) return xml_node(); + + impl::prepend_node(n._root, _root); + impl::node_copy_tree(n._root, proto._root); + + return n; + } + + PUGI__FN xml_node xml_node::insert_copy_after(const xml_node& proto, const xml_node& node) + { + xml_node_type type_ = proto.type(); + if (!impl::allow_insert_child(type(), type_)) return xml_node(); + if (!node._root || node._root->parent != _root) return xml_node(); + + impl::xml_allocator& alloc = impl::get_allocator(_root); + if (!alloc.reserve()) return xml_node(); + + xml_node n(impl::allocate_node(alloc, type_)); + if (!n) return xml_node(); + + impl::insert_node_after(n._root, node._root); + impl::node_copy_tree(n._root, proto._root); + + return n; + } + + PUGI__FN xml_node xml_node::insert_copy_before(const xml_node& proto, const xml_node& node) + { + xml_node_type type_ = proto.type(); + if (!impl::allow_insert_child(type(), type_)) return xml_node(); + if (!node._root || node._root->parent != _root) return xml_node(); + + impl::xml_allocator& alloc = impl::get_allocator(_root); + if (!alloc.reserve()) return xml_node(); + + xml_node n(impl::allocate_node(alloc, type_)); + if (!n) return xml_node(); + + impl::insert_node_before(n._root, node._root); + impl::node_copy_tree(n._root, proto._root); + + return n; + } + + PUGI__FN xml_node xml_node::append_move(const xml_node& moved) + { + if (!impl::allow_move(*this, moved)) return xml_node(); + + impl::xml_allocator& alloc = impl::get_allocator(_root); + if (!alloc.reserve()) return xml_node(); + + // disable document_buffer_order optimization since moving nodes around changes document order without changing buffer pointers + impl::get_document(_root).header |= impl::xml_memory_page_contents_shared_mask; + + impl::remove_node(moved._root); + impl::append_node(moved._root, _root); + + return moved; + } + + PUGI__FN xml_node xml_node::prepend_move(const xml_node& moved) + { + if (!impl::allow_move(*this, moved)) return xml_node(); + + impl::xml_allocator& alloc = impl::get_allocator(_root); + if (!alloc.reserve()) return xml_node(); + + // disable document_buffer_order optimization since moving nodes around changes document order without changing buffer pointers + impl::get_document(_root).header |= impl::xml_memory_page_contents_shared_mask; + + impl::remove_node(moved._root); + impl::prepend_node(moved._root, _root); + + return moved; + } + + PUGI__FN xml_node xml_node::insert_move_after(const xml_node& moved, const xml_node& node) + { + if (!impl::allow_move(*this, moved)) return xml_node(); + if (!node._root || node._root->parent != _root) return xml_node(); + if (moved._root == node._root) return xml_node(); + + impl::xml_allocator& alloc = impl::get_allocator(_root); + if (!alloc.reserve()) return xml_node(); + + // disable document_buffer_order optimization since moving nodes around changes document order without changing buffer pointers + impl::get_document(_root).header |= impl::xml_memory_page_contents_shared_mask; + + impl::remove_node(moved._root); + impl::insert_node_after(moved._root, node._root); + + return moved; + } + + PUGI__FN xml_node xml_node::insert_move_before(const xml_node& moved, const xml_node& node) + { + if (!impl::allow_move(*this, moved)) return xml_node(); + if (!node._root || node._root->parent != _root) return xml_node(); + if (moved._root == node._root) return xml_node(); + + impl::xml_allocator& alloc = impl::get_allocator(_root); + if (!alloc.reserve()) return xml_node(); + + // disable document_buffer_order optimization since moving nodes around changes document order without changing buffer pointers + impl::get_document(_root).header |= impl::xml_memory_page_contents_shared_mask; + + impl::remove_node(moved._root); + impl::insert_node_before(moved._root, node._root); + + return moved; + } + + PUGI__FN bool xml_node::remove_attribute(const char_t* name_) + { + return remove_attribute(attribute(name_)); + } + + PUGI__FN bool xml_node::remove_attribute(const xml_attribute& a) + { + if (!_root || !a._attr) return false; + if (!impl::is_attribute_of(a._attr, _root)) return false; + + impl::xml_allocator& alloc = impl::get_allocator(_root); + if (!alloc.reserve()) return false; + + impl::remove_attribute(a._attr, _root); + impl::destroy_attribute(a._attr, alloc); + + return true; + } + + PUGI__FN bool xml_node::remove_attributes() + { + if (!_root) return false; + + impl::xml_allocator& alloc = impl::get_allocator(_root); + if (!alloc.reserve()) return false; + + for (xml_attribute_struct* attr = _root->first_attribute; attr; ) + { + xml_attribute_struct* next = attr->next_attribute; + + impl::destroy_attribute(attr, alloc); + + attr = next; + } + + _root->first_attribute = 0; + + return true; + } + + PUGI__FN bool xml_node::remove_child(const char_t* name_) + { + return remove_child(child(name_)); + } + + PUGI__FN bool xml_node::remove_child(const xml_node& n) + { + if (!_root || !n._root || n._root->parent != _root) return false; + + impl::xml_allocator& alloc = impl::get_allocator(_root); + if (!alloc.reserve()) return false; + + impl::remove_node(n._root); + impl::destroy_node(n._root, alloc); + + return true; + } + + PUGI__FN bool xml_node::remove_children() + { + if (!_root) return false; + + impl::xml_allocator& alloc = impl::get_allocator(_root); + if (!alloc.reserve()) return false; + + for (xml_node_struct* cur = _root->first_child; cur; ) + { + xml_node_struct* next = cur->next_sibling; + + impl::destroy_node(cur, alloc); + + cur = next; + } + + _root->first_child = 0; + + return true; + } + + PUGI__FN xml_parse_result xml_node::append_buffer(const void* contents, size_t size, unsigned int options, xml_encoding encoding) + { + // append_buffer is only valid for elements/documents + if (!impl::allow_insert_child(type(), node_element)) return impl::make_parse_result(status_append_invalid_root); + + // get document node + impl::xml_document_struct* doc = &impl::get_document(_root); + + // disable document_buffer_order optimization since in a document with multiple buffers comparing buffer pointers does not make sense + doc->header |= impl::xml_memory_page_contents_shared_mask; + + // get extra buffer element (we'll store the document fragment buffer there so that we can deallocate it later) + impl::xml_memory_page* page = 0; + impl::xml_extra_buffer* extra = static_cast(doc->allocate_memory(sizeof(impl::xml_extra_buffer) + sizeof(void*), page)); + (void)page; + + if (!extra) return impl::make_parse_result(status_out_of_memory); + + #ifdef PUGIXML_COMPACT + // align the memory block to a pointer boundary; this is required for compact mode where memory allocations are only 4b aligned + // note that this requires up to sizeof(void*)-1 additional memory, which the allocation above takes into account + extra = reinterpret_cast((reinterpret_cast(extra) + (sizeof(void*) - 1)) & ~(sizeof(void*) - 1)); + #endif + + // add extra buffer to the list + extra->buffer = 0; + extra->next = doc->extra_buffers; + doc->extra_buffers = extra; + + // name of the root has to be NULL before parsing - otherwise closing node mismatches will not be detected at the top level + impl::name_null_sentry sentry(_root); + + return impl::load_buffer_impl(doc, _root, const_cast(contents), size, options, encoding, false, false, &extra->buffer); + } + + PUGI__FN xml_node xml_node::find_child_by_attribute(const char_t* name_, const char_t* attr_name, const char_t* attr_value) const + { + if (!_root) return xml_node(); + + for (xml_node_struct* i = _root->first_child; i; i = i->next_sibling) + if (i->name && impl::strequal(name_, i->name)) + { + for (xml_attribute_struct* a = i->first_attribute; a; a = a->next_attribute) + if (a->name && impl::strequal(attr_name, a->name) && impl::strequal(attr_value, a->value ? a->value + 0 : PUGIXML_TEXT(""))) + return xml_node(i); + } + + return xml_node(); + } + + PUGI__FN xml_node xml_node::find_child_by_attribute(const char_t* attr_name, const char_t* attr_value) const + { + if (!_root) return xml_node(); + + for (xml_node_struct* i = _root->first_child; i; i = i->next_sibling) + for (xml_attribute_struct* a = i->first_attribute; a; a = a->next_attribute) + if (a->name && impl::strequal(attr_name, a->name) && impl::strequal(attr_value, a->value ? a->value + 0 : PUGIXML_TEXT(""))) + return xml_node(i); + + return xml_node(); + } + +#ifndef PUGIXML_NO_STL + PUGI__FN string_t xml_node::path(char_t delimiter) const + { + if (!_root) return string_t(); + + size_t offset = 0; + + for (xml_node_struct* i = _root; i; i = i->parent) + { + offset += (i != _root); + offset += i->name ? impl::strlength(i->name) : 0; + } + + string_t result; + result.resize(offset); + + for (xml_node_struct* j = _root; j; j = j->parent) + { + if (j != _root) + result[--offset] = delimiter; + + if (j->name) + { + size_t length = impl::strlength(j->name); + + offset -= length; + memcpy(&result[offset], j->name, length * sizeof(char_t)); + } + } + + assert(offset == 0); + + return result; + } +#endif + + PUGI__FN xml_node xml_node::first_element_by_path(const char_t* path_, char_t delimiter) const + { + xml_node context = path_[0] == delimiter ? root() : *this; + + if (!context._root) return xml_node(); + + const char_t* path_segment = path_; + + while (*path_segment == delimiter) ++path_segment; + + const char_t* path_segment_end = path_segment; + + while (*path_segment_end && *path_segment_end != delimiter) ++path_segment_end; + + if (path_segment == path_segment_end) return context; + + const char_t* next_segment = path_segment_end; + + while (*next_segment == delimiter) ++next_segment; + + if (*path_segment == '.' && path_segment + 1 == path_segment_end) + return context.first_element_by_path(next_segment, delimiter); + else if (*path_segment == '.' && *(path_segment+1) == '.' && path_segment + 2 == path_segment_end) + return context.parent().first_element_by_path(next_segment, delimiter); + else + { + for (xml_node_struct* j = context._root->first_child; j; j = j->next_sibling) + { + if (j->name && impl::strequalrange(j->name, path_segment, static_cast(path_segment_end - path_segment))) + { + xml_node subsearch = xml_node(j).first_element_by_path(next_segment, delimiter); + + if (subsearch) return subsearch; + } + } + + return xml_node(); + } + } + + PUGI__FN bool xml_node::traverse(xml_tree_walker& walker) + { + walker._depth = -1; + + xml_node arg_begin(_root); + if (!walker.begin(arg_begin)) return false; + + xml_node_struct* cur = _root ? _root->first_child + 0 : 0; + + if (cur) + { + ++walker._depth; + + do + { + xml_node arg_for_each(cur); + if (!walker.for_each(arg_for_each)) + return false; + + if (cur->first_child) + { + ++walker._depth; + cur = cur->first_child; + } + else if (cur->next_sibling) + cur = cur->next_sibling; + else + { + while (!cur->next_sibling && cur != _root && cur->parent) + { + --walker._depth; + cur = cur->parent; + } + + if (cur != _root) + cur = cur->next_sibling; + } + } + while (cur && cur != _root); + } + + assert(walker._depth == -1); + + xml_node arg_end(_root); + return walker.end(arg_end); + } + + PUGI__FN size_t xml_node::hash_value() const + { + return static_cast(reinterpret_cast(_root) / sizeof(xml_node_struct)); + } + + PUGI__FN xml_node_struct* xml_node::internal_object() const + { + return _root; + } + + PUGI__FN void xml_node::print(xml_writer& writer, const char_t* indent, unsigned int flags, xml_encoding encoding, unsigned int depth) const + { + if (!_root) return; + + impl::xml_buffered_writer buffered_writer(writer, encoding); + + impl::node_output(buffered_writer, _root, indent, flags, depth); + + buffered_writer.flush(); + } + +#ifndef PUGIXML_NO_STL + PUGI__FN void xml_node::print(std::basic_ostream >& stream, const char_t* indent, unsigned int flags, xml_encoding encoding, unsigned int depth) const + { + xml_writer_stream writer(stream); + + print(writer, indent, flags, encoding, depth); + } + + PUGI__FN void xml_node::print(std::basic_ostream >& stream, const char_t* indent, unsigned int flags, unsigned int depth) const + { + xml_writer_stream writer(stream); + + print(writer, indent, flags, encoding_wchar, depth); + } +#endif + + PUGI__FN ptrdiff_t xml_node::offset_debug() const + { + if (!_root) return -1; + + impl::xml_document_struct& doc = impl::get_document(_root); + + // we can determine the offset reliably only if there is exactly once parse buffer + if (!doc.buffer || doc.extra_buffers) return -1; + + switch (type()) + { + case node_document: + return 0; + + case node_element: + case node_declaration: + case node_pi: + return _root->name && (_root->header & impl::xml_memory_page_name_allocated_or_shared_mask) == 0 ? _root->name - doc.buffer : -1; + + case node_pcdata: + case node_cdata: + case node_comment: + case node_doctype: + return _root->value && (_root->header & impl::xml_memory_page_value_allocated_or_shared_mask) == 0 ? _root->value - doc.buffer : -1; + + default: + assert(false && "Invalid node type"); // unreachable + return -1; + } + } + +#ifdef __BORLANDC__ + PUGI__FN bool operator&&(const xml_node& lhs, bool rhs) + { + return (bool)lhs && rhs; + } + + PUGI__FN bool operator||(const xml_node& lhs, bool rhs) + { + return (bool)lhs || rhs; + } +#endif + + PUGI__FN xml_text::xml_text(xml_node_struct* root): _root(root) + { + } + + PUGI__FN xml_node_struct* xml_text::_data() const + { + if (!_root || impl::is_text_node(_root)) return _root; + + // element nodes can have value if parse_embed_pcdata was used + if (PUGI__NODETYPE(_root) == node_element && _root->value) + return _root; + + for (xml_node_struct* node = _root->first_child; node; node = node->next_sibling) + if (impl::is_text_node(node)) + return node; + + return 0; + } + + PUGI__FN xml_node_struct* xml_text::_data_new() + { + xml_node_struct* d = _data(); + if (d) return d; + + return xml_node(_root).append_child(node_pcdata).internal_object(); + } + + PUGI__FN xml_text::xml_text(): _root(0) + { + } + + PUGI__FN static void unspecified_bool_xml_text(xml_text***) + { + } + + PUGI__FN xml_text::operator xml_text::unspecified_bool_type() const + { + return _data() ? unspecified_bool_xml_text : 0; + } + + PUGI__FN bool xml_text::operator!() const + { + return !_data(); + } + + PUGI__FN bool xml_text::empty() const + { + return _data() == 0; + } + + PUGI__FN const char_t* xml_text::get() const + { + xml_node_struct* d = _data(); + + return (d && d->value) ? d->value + 0 : PUGIXML_TEXT(""); + } + + PUGI__FN const char_t* xml_text::as_string(const char_t* def) const + { + xml_node_struct* d = _data(); + + return (d && d->value) ? d->value + 0 : def; + } + + PUGI__FN int xml_text::as_int(int def) const + { + xml_node_struct* d = _data(); + + return (d && d->value) ? impl::get_value_int(d->value) : def; + } + + PUGI__FN unsigned int xml_text::as_uint(unsigned int def) const + { + xml_node_struct* d = _data(); + + return (d && d->value) ? impl::get_value_uint(d->value) : def; + } + + PUGI__FN double xml_text::as_double(double def) const + { + xml_node_struct* d = _data(); + + return (d && d->value) ? impl::get_value_double(d->value) : def; + } + + PUGI__FN float xml_text::as_float(float def) const + { + xml_node_struct* d = _data(); + + return (d && d->value) ? impl::get_value_float(d->value) : def; + } + + PUGI__FN bool xml_text::as_bool(bool def) const + { + xml_node_struct* d = _data(); + + return (d && d->value) ? impl::get_value_bool(d->value) : def; + } + +#ifdef PUGIXML_HAS_LONG_LONG + PUGI__FN long long xml_text::as_llong(long long def) const + { + xml_node_struct* d = _data(); + + return (d && d->value) ? impl::get_value_llong(d->value) : def; + } + + PUGI__FN unsigned long long xml_text::as_ullong(unsigned long long def) const + { + xml_node_struct* d = _data(); + + return (d && d->value) ? impl::get_value_ullong(d->value) : def; + } +#endif + + PUGI__FN bool xml_text::set(const char_t* rhs) + { + xml_node_struct* dn = _data_new(); + + return dn ? impl::strcpy_insitu(dn->value, dn->header, impl::xml_memory_page_value_allocated_mask, rhs, impl::strlength(rhs)) : false; + } + + PUGI__FN bool xml_text::set(int rhs) + { + xml_node_struct* dn = _data_new(); + + return dn ? impl::set_value_integer(dn->value, dn->header, impl::xml_memory_page_value_allocated_mask, rhs, rhs < 0) : false; + } + + PUGI__FN bool xml_text::set(unsigned int rhs) + { + xml_node_struct* dn = _data_new(); + + return dn ? impl::set_value_integer(dn->value, dn->header, impl::xml_memory_page_value_allocated_mask, rhs, false) : false; + } + + PUGI__FN bool xml_text::set(long rhs) + { + xml_node_struct* dn = _data_new(); + + return dn ? impl::set_value_integer(dn->value, dn->header, impl::xml_memory_page_value_allocated_mask, rhs, rhs < 0) : false; + } + + PUGI__FN bool xml_text::set(unsigned long rhs) + { + xml_node_struct* dn = _data_new(); + + return dn ? impl::set_value_integer(dn->value, dn->header, impl::xml_memory_page_value_allocated_mask, rhs, false) : false; + } + + PUGI__FN bool xml_text::set(float rhs) + { + xml_node_struct* dn = _data_new(); + + return dn ? impl::set_value_convert(dn->value, dn->header, impl::xml_memory_page_value_allocated_mask, rhs, default_float_precision) : false; + } + + PUGI__FN bool xml_text::set(float rhs, int precision) + { + xml_node_struct* dn = _data_new(); + + return dn ? impl::set_value_convert(dn->value, dn->header, impl::xml_memory_page_value_allocated_mask, rhs, precision) : false; + } + + PUGI__FN bool xml_text::set(double rhs) + { + xml_node_struct* dn = _data_new(); + + return dn ? impl::set_value_convert(dn->value, dn->header, impl::xml_memory_page_value_allocated_mask, rhs, default_double_precision) : false; + } + + PUGI__FN bool xml_text::set(double rhs, int precision) + { + xml_node_struct* dn = _data_new(); + + return dn ? impl::set_value_convert(dn->value, dn->header, impl::xml_memory_page_value_allocated_mask, rhs, precision) : false; + } + + PUGI__FN bool xml_text::set(bool rhs) + { + xml_node_struct* dn = _data_new(); + + return dn ? impl::set_value_bool(dn->value, dn->header, impl::xml_memory_page_value_allocated_mask, rhs) : false; + } + +#ifdef PUGIXML_HAS_LONG_LONG + PUGI__FN bool xml_text::set(long long rhs) + { + xml_node_struct* dn = _data_new(); + + return dn ? impl::set_value_integer(dn->value, dn->header, impl::xml_memory_page_value_allocated_mask, rhs, rhs < 0) : false; + } + + PUGI__FN bool xml_text::set(unsigned long long rhs) + { + xml_node_struct* dn = _data_new(); + + return dn ? impl::set_value_integer(dn->value, dn->header, impl::xml_memory_page_value_allocated_mask, rhs, false) : false; + } +#endif + + PUGI__FN xml_text& xml_text::operator=(const char_t* rhs) + { + set(rhs); + return *this; + } + + PUGI__FN xml_text& xml_text::operator=(int rhs) + { + set(rhs); + return *this; + } + + PUGI__FN xml_text& xml_text::operator=(unsigned int rhs) + { + set(rhs); + return *this; + } + + PUGI__FN xml_text& xml_text::operator=(long rhs) + { + set(rhs); + return *this; + } + + PUGI__FN xml_text& xml_text::operator=(unsigned long rhs) + { + set(rhs); + return *this; + } + + PUGI__FN xml_text& xml_text::operator=(double rhs) + { + set(rhs); + return *this; + } + + PUGI__FN xml_text& xml_text::operator=(float rhs) + { + set(rhs); + return *this; + } + + PUGI__FN xml_text& xml_text::operator=(bool rhs) + { + set(rhs); + return *this; + } + +#ifdef PUGIXML_HAS_LONG_LONG + PUGI__FN xml_text& xml_text::operator=(long long rhs) + { + set(rhs); + return *this; + } + + PUGI__FN xml_text& xml_text::operator=(unsigned long long rhs) + { + set(rhs); + return *this; + } +#endif + + PUGI__FN xml_node xml_text::data() const + { + return xml_node(_data()); + } + +#ifdef __BORLANDC__ + PUGI__FN bool operator&&(const xml_text& lhs, bool rhs) + { + return (bool)lhs && rhs; + } + + PUGI__FN bool operator||(const xml_text& lhs, bool rhs) + { + return (bool)lhs || rhs; + } +#endif + + PUGI__FN xml_node_iterator::xml_node_iterator() + { + } + + PUGI__FN xml_node_iterator::xml_node_iterator(const xml_node& node): _wrap(node), _parent(node.parent()) + { + } + + PUGI__FN xml_node_iterator::xml_node_iterator(xml_node_struct* ref, xml_node_struct* parent): _wrap(ref), _parent(parent) + { + } + + PUGI__FN bool xml_node_iterator::operator==(const xml_node_iterator& rhs) const + { + return _wrap._root == rhs._wrap._root && _parent._root == rhs._parent._root; + } + + PUGI__FN bool xml_node_iterator::operator!=(const xml_node_iterator& rhs) const + { + return _wrap._root != rhs._wrap._root || _parent._root != rhs._parent._root; + } + + PUGI__FN xml_node& xml_node_iterator::operator*() const + { + assert(_wrap._root); + return _wrap; + } + + PUGI__FN xml_node* xml_node_iterator::operator->() const + { + assert(_wrap._root); + return const_cast(&_wrap); // BCC5 workaround + } + + PUGI__FN xml_node_iterator& xml_node_iterator::operator++() + { + assert(_wrap._root); + _wrap._root = _wrap._root->next_sibling; + return *this; + } + + PUGI__FN xml_node_iterator xml_node_iterator::operator++(int) + { + xml_node_iterator temp = *this; + ++*this; + return temp; + } + + PUGI__FN xml_node_iterator& xml_node_iterator::operator--() + { + _wrap = _wrap._root ? _wrap.previous_sibling() : _parent.last_child(); + return *this; + } + + PUGI__FN xml_node_iterator xml_node_iterator::operator--(int) + { + xml_node_iterator temp = *this; + --*this; + return temp; + } + + PUGI__FN xml_attribute_iterator::xml_attribute_iterator() + { + } + + PUGI__FN xml_attribute_iterator::xml_attribute_iterator(const xml_attribute& attr, const xml_node& parent): _wrap(attr), _parent(parent) + { + } + + PUGI__FN xml_attribute_iterator::xml_attribute_iterator(xml_attribute_struct* ref, xml_node_struct* parent): _wrap(ref), _parent(parent) + { + } + + PUGI__FN bool xml_attribute_iterator::operator==(const xml_attribute_iterator& rhs) const + { + return _wrap._attr == rhs._wrap._attr && _parent._root == rhs._parent._root; + } + + PUGI__FN bool xml_attribute_iterator::operator!=(const xml_attribute_iterator& rhs) const + { + return _wrap._attr != rhs._wrap._attr || _parent._root != rhs._parent._root; + } + + PUGI__FN xml_attribute& xml_attribute_iterator::operator*() const + { + assert(_wrap._attr); + return _wrap; + } + + PUGI__FN xml_attribute* xml_attribute_iterator::operator->() const + { + assert(_wrap._attr); + return const_cast(&_wrap); // BCC5 workaround + } + + PUGI__FN xml_attribute_iterator& xml_attribute_iterator::operator++() + { + assert(_wrap._attr); + _wrap._attr = _wrap._attr->next_attribute; + return *this; + } + + PUGI__FN xml_attribute_iterator xml_attribute_iterator::operator++(int) + { + xml_attribute_iterator temp = *this; + ++*this; + return temp; + } + + PUGI__FN xml_attribute_iterator& xml_attribute_iterator::operator--() + { + _wrap = _wrap._attr ? _wrap.previous_attribute() : _parent.last_attribute(); + return *this; + } + + PUGI__FN xml_attribute_iterator xml_attribute_iterator::operator--(int) + { + xml_attribute_iterator temp = *this; + --*this; + return temp; + } + + PUGI__FN xml_named_node_iterator::xml_named_node_iterator(): _name(0) + { + } + + PUGI__FN xml_named_node_iterator::xml_named_node_iterator(const xml_node& node, const char_t* name): _wrap(node), _parent(node.parent()), _name(name) + { + } + + PUGI__FN xml_named_node_iterator::xml_named_node_iterator(xml_node_struct* ref, xml_node_struct* parent, const char_t* name): _wrap(ref), _parent(parent), _name(name) + { + } + + PUGI__FN bool xml_named_node_iterator::operator==(const xml_named_node_iterator& rhs) const + { + return _wrap._root == rhs._wrap._root && _parent._root == rhs._parent._root; + } + + PUGI__FN bool xml_named_node_iterator::operator!=(const xml_named_node_iterator& rhs) const + { + return _wrap._root != rhs._wrap._root || _parent._root != rhs._parent._root; + } + + PUGI__FN xml_node& xml_named_node_iterator::operator*() const + { + assert(_wrap._root); + return _wrap; + } + + PUGI__FN xml_node* xml_named_node_iterator::operator->() const + { + assert(_wrap._root); + return const_cast(&_wrap); // BCC5 workaround + } + + PUGI__FN xml_named_node_iterator& xml_named_node_iterator::operator++() + { + assert(_wrap._root); + _wrap = _wrap.next_sibling(_name); + return *this; + } + + PUGI__FN xml_named_node_iterator xml_named_node_iterator::operator++(int) + { + xml_named_node_iterator temp = *this; + ++*this; + return temp; + } + + PUGI__FN xml_named_node_iterator& xml_named_node_iterator::operator--() + { + if (_wrap._root) + _wrap = _wrap.previous_sibling(_name); + else + { + _wrap = _parent.last_child(); + + if (!impl::strequal(_wrap.name(), _name)) + _wrap = _wrap.previous_sibling(_name); + } + + return *this; + } + + PUGI__FN xml_named_node_iterator xml_named_node_iterator::operator--(int) + { + xml_named_node_iterator temp = *this; + --*this; + return temp; + } + + PUGI__FN xml_parse_result::xml_parse_result(): status(status_internal_error), offset(0), encoding(encoding_auto) + { + } + + PUGI__FN xml_parse_result::operator bool() const + { + return status == status_ok; + } + + PUGI__FN const char* xml_parse_result::description() const + { + switch (status) + { + case status_ok: return "No error"; + + case status_file_not_found: return "File was not found"; + case status_io_error: return "Error reading from file/stream"; + case status_out_of_memory: return "Could not allocate memory"; + case status_internal_error: return "Internal error occurred"; + + case status_unrecognized_tag: return "Could not determine tag type"; + + case status_bad_pi: return "Error parsing document declaration/processing instruction"; + case status_bad_comment: return "Error parsing comment"; + case status_bad_cdata: return "Error parsing CDATA section"; + case status_bad_doctype: return "Error parsing document type declaration"; + case status_bad_pcdata: return "Error parsing PCDATA section"; + case status_bad_start_element: return "Error parsing start element tag"; + case status_bad_attribute: return "Error parsing element attribute"; + case status_bad_end_element: return "Error parsing end element tag"; + case status_end_element_mismatch: return "Start-end tags mismatch"; + + case status_append_invalid_root: return "Unable to append nodes: root is not an element or document"; + + case status_no_document_element: return "No document element found"; + + default: return "Unknown error"; + } + } + + PUGI__FN xml_document::xml_document(): _buffer(0) + { + _create(); + } + + PUGI__FN xml_document::~xml_document() + { + _destroy(); + } + +#ifdef PUGIXML_HAS_MOVE + PUGI__FN xml_document::xml_document(xml_document&& rhs) PUGIXML_NOEXCEPT_IF_NOT_COMPACT: _buffer(0) + { + _create(); + _move(rhs); + } + + PUGI__FN xml_document& xml_document::operator=(xml_document&& rhs) PUGIXML_NOEXCEPT_IF_NOT_COMPACT + { + if (this == &rhs) return *this; + + _destroy(); + _create(); + _move(rhs); + + return *this; + } +#endif + + PUGI__FN void xml_document::reset() + { + _destroy(); + _create(); + } + + PUGI__FN void xml_document::reset(const xml_document& proto) + { + reset(); + + impl::node_copy_tree(_root, proto._root); + } + + PUGI__FN void xml_document::_create() + { + assert(!_root); + + #ifdef PUGIXML_COMPACT + // space for page marker for the first page (uint32_t), rounded up to pointer size; assumes pointers are at least 32-bit + const size_t page_offset = sizeof(void*); + #else + const size_t page_offset = 0; + #endif + + // initialize sentinel page + PUGI__STATIC_ASSERT(sizeof(impl::xml_memory_page) + sizeof(impl::xml_document_struct) + page_offset <= sizeof(_memory)); + + // prepare page structure + impl::xml_memory_page* page = impl::xml_memory_page::construct(_memory); + assert(page); + + page->busy_size = impl::xml_memory_page_size; + + // setup first page marker + #ifdef PUGIXML_COMPACT + // round-trip through void* to avoid 'cast increases required alignment of target type' warning + page->compact_page_marker = reinterpret_cast(static_cast(reinterpret_cast(page) + sizeof(impl::xml_memory_page))); + *page->compact_page_marker = sizeof(impl::xml_memory_page); + #endif + + // allocate new root + _root = new (reinterpret_cast(page) + sizeof(impl::xml_memory_page) + page_offset) impl::xml_document_struct(page); + _root->prev_sibling_c = _root; + + // setup sentinel page + page->allocator = static_cast(_root); + + // setup hash table pointer in allocator + #ifdef PUGIXML_COMPACT + page->allocator->_hash = &static_cast(_root)->hash; + #endif + + // verify the document allocation + assert(reinterpret_cast(_root) + sizeof(impl::xml_document_struct) <= _memory + sizeof(_memory)); + } + + PUGI__FN void xml_document::_destroy() + { + assert(_root); + + // destroy static storage + if (_buffer) + { + impl::xml_memory::deallocate(_buffer); + _buffer = 0; + } + + // destroy extra buffers (note: no need to destroy linked list nodes, they're allocated using document allocator) + for (impl::xml_extra_buffer* extra = static_cast(_root)->extra_buffers; extra; extra = extra->next) + { + if (extra->buffer) impl::xml_memory::deallocate(extra->buffer); + } + + // destroy dynamic storage, leave sentinel page (it's in static memory) + impl::xml_memory_page* root_page = PUGI__GETPAGE(_root); + assert(root_page && !root_page->prev); + assert(reinterpret_cast(root_page) >= _memory && reinterpret_cast(root_page) < _memory + sizeof(_memory)); + + for (impl::xml_memory_page* page = root_page->next; page; ) + { + impl::xml_memory_page* next = page->next; + + impl::xml_allocator::deallocate_page(page); + + page = next; + } + + #ifdef PUGIXML_COMPACT + // destroy hash table + static_cast(_root)->hash.clear(); + #endif + + _root = 0; + } + +#ifdef PUGIXML_HAS_MOVE + PUGI__FN void xml_document::_move(xml_document& rhs) PUGIXML_NOEXCEPT_IF_NOT_COMPACT + { + impl::xml_document_struct* doc = static_cast(_root); + impl::xml_document_struct* other = static_cast(rhs._root); + + // save first child pointer for later; this needs hash access + xml_node_struct* other_first_child = other->first_child; + + #ifdef PUGIXML_COMPACT + // reserve space for the hash table up front; this is the only operation that can fail + // if it does, we have no choice but to throw (if we have exceptions) + if (other_first_child) + { + size_t other_children = 0; + for (xml_node_struct* node = other_first_child; node; node = node->next_sibling) + other_children++; + + // in compact mode, each pointer assignment could result in a hash table request + // during move, we have to relocate document first_child and parents of all children + // normally there's just one child and its parent has a pointerless encoding but + // we assume the worst here + if (!other->_hash->reserve(other_children + 1)) + { + #ifdef PUGIXML_NO_EXCEPTIONS + return; + #else + throw std::bad_alloc(); + #endif + } + } + #endif + + // move allocation state + // note that other->_root may point to the embedded document page, in which case we should keep original (empty) state + if (other->_root != PUGI__GETPAGE(other)) + { + doc->_root = other->_root; + doc->_busy_size = other->_busy_size; + } + + // move buffer state + doc->buffer = other->buffer; + doc->extra_buffers = other->extra_buffers; + _buffer = rhs._buffer; + + #ifdef PUGIXML_COMPACT + // move compact hash; note that the hash table can have pointers to other but they will be "inactive", similarly to nodes removed with remove_child + doc->hash = other->hash; + doc->_hash = &doc->hash; + + // make sure we don't access other hash up until the end when we reinitialize other document + other->_hash = 0; + #endif + + // move page structure + impl::xml_memory_page* doc_page = PUGI__GETPAGE(doc); + assert(doc_page && !doc_page->prev && !doc_page->next); + + impl::xml_memory_page* other_page = PUGI__GETPAGE(other); + assert(other_page && !other_page->prev); + + // relink pages since root page is embedded into xml_document + if (impl::xml_memory_page* page = other_page->next) + { + assert(page->prev == other_page); + + page->prev = doc_page; + + doc_page->next = page; + other_page->next = 0; + } + + // make sure pages point to the correct document state + for (impl::xml_memory_page* page = doc_page->next; page; page = page->next) + { + assert(page->allocator == other); + + page->allocator = doc; + + #ifdef PUGIXML_COMPACT + // this automatically migrates most children between documents and prevents ->parent assignment from allocating + if (page->compact_shared_parent == other) + page->compact_shared_parent = doc; + #endif + } + + // move tree structure + assert(!doc->first_child); + + doc->first_child = other_first_child; + + for (xml_node_struct* node = other_first_child; node; node = node->next_sibling) + { + #ifdef PUGIXML_COMPACT + // most children will have migrated when we reassigned compact_shared_parent + assert(node->parent == other || node->parent == doc); + + node->parent = doc; + #else + assert(node->parent == other); + node->parent = doc; + #endif + } + + // reset other document + new (other) impl::xml_document_struct(PUGI__GETPAGE(other)); + rhs._buffer = 0; + } +#endif + +#ifndef PUGIXML_NO_STL + PUGI__FN xml_parse_result xml_document::load(std::basic_istream >& stream, unsigned int options, xml_encoding encoding) + { + reset(); + + return impl::load_stream_impl(static_cast(_root), stream, options, encoding, &_buffer); + } + + PUGI__FN xml_parse_result xml_document::load(std::basic_istream >& stream, unsigned int options) + { + reset(); + + return impl::load_stream_impl(static_cast(_root), stream, options, encoding_wchar, &_buffer); + } +#endif + + PUGI__FN xml_parse_result xml_document::load_string(const char_t* contents, unsigned int options) + { + // Force native encoding (skip autodetection) + #ifdef PUGIXML_WCHAR_MODE + xml_encoding encoding = encoding_wchar; + #else + xml_encoding encoding = encoding_utf8; + #endif + + return load_buffer(contents, impl::strlength(contents) * sizeof(char_t), options, encoding); + } + + PUGI__FN xml_parse_result xml_document::load(const char_t* contents, unsigned int options) + { + return load_string(contents, options); + } + + PUGI__FN xml_parse_result xml_document::load_file(const char* path_, unsigned int options, xml_encoding encoding) + { + reset(); + + using impl::auto_deleter; // MSVC7 workaround + auto_deleter file(impl::open_file(path_, "rb"), impl::close_file); + + return impl::load_file_impl(static_cast(_root), file.data, options, encoding, &_buffer); + } + + PUGI__FN xml_parse_result xml_document::load_file(const wchar_t* path_, unsigned int options, xml_encoding encoding) + { + reset(); + + using impl::auto_deleter; // MSVC7 workaround + auto_deleter file(impl::open_file_wide(path_, L"rb"), impl::close_file); + + return impl::load_file_impl(static_cast(_root), file.data, options, encoding, &_buffer); + } + + PUGI__FN xml_parse_result xml_document::load_buffer(const void* contents, size_t size, unsigned int options, xml_encoding encoding) + { + reset(); + + return impl::load_buffer_impl(static_cast(_root), _root, const_cast(contents), size, options, encoding, false, false, &_buffer); + } + + PUGI__FN xml_parse_result xml_document::load_buffer_inplace(void* contents, size_t size, unsigned int options, xml_encoding encoding) + { + reset(); + + return impl::load_buffer_impl(static_cast(_root), _root, contents, size, options, encoding, true, false, &_buffer); + } + + PUGI__FN xml_parse_result xml_document::load_buffer_inplace_own(void* contents, size_t size, unsigned int options, xml_encoding encoding) + { + reset(); + + return impl::load_buffer_impl(static_cast(_root), _root, contents, size, options, encoding, true, true, &_buffer); + } + + PUGI__FN void xml_document::save(xml_writer& writer, const char_t* indent, unsigned int flags, xml_encoding encoding) const + { + impl::xml_buffered_writer buffered_writer(writer, encoding); + + if ((flags & format_write_bom) && encoding != encoding_latin1) + { + // BOM always represents the codepoint U+FEFF, so just write it in native encoding + #ifdef PUGIXML_WCHAR_MODE + unsigned int bom = 0xfeff; + buffered_writer.write(static_cast(bom)); + #else + buffered_writer.write('\xef', '\xbb', '\xbf'); + #endif + } + + if (!(flags & format_no_declaration) && !impl::has_declaration(_root)) + { + buffered_writer.write_string(PUGIXML_TEXT("'); + if (!(flags & format_raw)) buffered_writer.write('\n'); + } + + impl::node_output(buffered_writer, _root, indent, flags, 0); + + buffered_writer.flush(); + } + +#ifndef PUGIXML_NO_STL + PUGI__FN void xml_document::save(std::basic_ostream >& stream, const char_t* indent, unsigned int flags, xml_encoding encoding) const + { + xml_writer_stream writer(stream); + + save(writer, indent, flags, encoding); + } + + PUGI__FN void xml_document::save(std::basic_ostream >& stream, const char_t* indent, unsigned int flags) const + { + xml_writer_stream writer(stream); + + save(writer, indent, flags, encoding_wchar); + } +#endif + + PUGI__FN bool xml_document::save_file(const char* path_, const char_t* indent, unsigned int flags, xml_encoding encoding) const + { + using impl::auto_deleter; // MSVC7 workaround + auto_deleter file(impl::open_file(path_, (flags & format_save_file_text) ? "w" : "wb"), impl::close_file); + + return impl::save_file_impl(*this, file.data, indent, flags, encoding); + } + + PUGI__FN bool xml_document::save_file(const wchar_t* path_, const char_t* indent, unsigned int flags, xml_encoding encoding) const + { + using impl::auto_deleter; // MSVC7 workaround + auto_deleter file(impl::open_file_wide(path_, (flags & format_save_file_text) ? L"w" : L"wb"), impl::close_file); + + return impl::save_file_impl(*this, file.data, indent, flags, encoding); + } + + PUGI__FN xml_node xml_document::document_element() const + { + assert(_root); + + for (xml_node_struct* i = _root->first_child; i; i = i->next_sibling) + if (PUGI__NODETYPE(i) == node_element) + return xml_node(i); + + return xml_node(); + } + +#ifndef PUGIXML_NO_STL + PUGI__FN std::string PUGIXML_FUNCTION as_utf8(const wchar_t* str) + { + assert(str); + + return impl::as_utf8_impl(str, impl::strlength_wide(str)); + } + + PUGI__FN std::string PUGIXML_FUNCTION as_utf8(const std::basic_string& str) + { + return impl::as_utf8_impl(str.c_str(), str.size()); + } + + PUGI__FN std::basic_string PUGIXML_FUNCTION as_wide(const char* str) + { + assert(str); + + return impl::as_wide_impl(str, strlen(str)); + } + + PUGI__FN std::basic_string PUGIXML_FUNCTION as_wide(const std::string& str) + { + return impl::as_wide_impl(str.c_str(), str.size()); + } +#endif + + PUGI__FN void PUGIXML_FUNCTION set_memory_management_functions(allocation_function allocate, deallocation_function deallocate) + { + impl::xml_memory::allocate = allocate; + impl::xml_memory::deallocate = deallocate; + } + + PUGI__FN allocation_function PUGIXML_FUNCTION get_memory_allocation_function() + { + return impl::xml_memory::allocate; + } + + PUGI__FN deallocation_function PUGIXML_FUNCTION get_memory_deallocation_function() + { + return impl::xml_memory::deallocate; + } +} OIIO_NAMESPACE_3_1_END + +#if !defined(PUGIXML_NO_STL) && (defined(_MSC_VER) || defined(__ICC)) +namespace std +{ + // Workarounds for (non-standard) iterator category detection for older versions (MSVC7/IC8 and earlier) + PUGI__FN std::bidirectional_iterator_tag _Iter_cat(const pugi::xml_node_iterator&) + { + return std::bidirectional_iterator_tag(); + } + + PUGI__FN std::bidirectional_iterator_tag _Iter_cat(const pugi::xml_attribute_iterator&) + { + return std::bidirectional_iterator_tag(); + } + + PUGI__FN std::bidirectional_iterator_tag _Iter_cat(const pugi::xml_named_node_iterator&) + { + return std::bidirectional_iterator_tag(); + } +} +#endif + +#if !defined(PUGIXML_NO_STL) && defined(__SUNPRO_CC) +namespace std +{ + // Workarounds for (non-standard) iterator category detection + PUGI__FN std::bidirectional_iterator_tag __iterator_category(const pugi::xml_node_iterator&) + { + return std::bidirectional_iterator_tag(); + } + + PUGI__FN std::bidirectional_iterator_tag __iterator_category(const pugi::xml_attribute_iterator&) + { + return std::bidirectional_iterator_tag(); + } + + PUGI__FN std::bidirectional_iterator_tag __iterator_category(const pugi::xml_named_node_iterator&) + { + return std::bidirectional_iterator_tag(); + } +} +#endif + +#ifndef PUGIXML_NO_XPATH +// STL replacements +PUGI__NS_BEGIN + struct equal_to + { + template bool operator()(const T& lhs, const T& rhs) const + { + return lhs == rhs; + } + }; + + struct not_equal_to + { + template bool operator()(const T& lhs, const T& rhs) const + { + return lhs != rhs; + } + }; + + struct less + { + template bool operator()(const T& lhs, const T& rhs) const + { + return lhs < rhs; + } + }; + + struct less_equal + { + template bool operator()(const T& lhs, const T& rhs) const + { + return lhs <= rhs; + } + }; + + template inline void swap(T& lhs, T& rhs) + { + T temp = lhs; + lhs = rhs; + rhs = temp; + } + + template PUGI__FN I min_element(I begin, I end, const Pred& pred) + { + I result = begin; + + for (I it = begin + 1; it != end; ++it) + if (pred(*it, *result)) + result = it; + + return result; + } + + template PUGI__FN void reverse(I begin, I end) + { + while (end - begin > 1) + swap(*begin++, *--end); + } + + template PUGI__FN I unique(I begin, I end) + { + // fast skip head + while (end - begin > 1 && *begin != *(begin + 1)) + begin++; + + if (begin == end) + return begin; + + // last written element + I write = begin++; + + // merge unique elements + while (begin != end) + { + if (*begin != *write) + *++write = *begin++; + else + begin++; + } + + // past-the-end (write points to live element) + return write + 1; + } + + template PUGI__FN void insertion_sort(T* begin, T* end, const Pred& pred) + { + if (begin == end) + return; + + for (T* it = begin + 1; it != end; ++it) + { + T val = *it; + T* hole = it; + + // move hole backwards + while (hole > begin && pred(val, *(hole - 1))) + { + *hole = *(hole - 1); + hole--; + } + + // fill hole with element + *hole = val; + } + } + + template inline I median3(I first, I middle, I last, const Pred& pred) + { + if (pred(*middle, *first)) + swap(middle, first); + if (pred(*last, *middle)) + swap(last, middle); + if (pred(*middle, *first)) + swap(middle, first); + + return middle; + } + + template PUGI__FN void partition3(T* begin, T* end, T pivot, const Pred& pred, T** out_eqbeg, T** out_eqend) + { + // invariant: array is split into 4 groups: = < ? > (each variable denotes the boundary between the groups) + T* eq = begin; + T* lt = begin; + T* gt = end; + + while (lt < gt) + { + if (pred(*lt, pivot)) + lt++; + else if (*lt == pivot) + swap(*eq++, *lt++); + else + swap(*lt, *--gt); + } + + // we now have just 4 groups: = < >; move equal elements to the middle + T* eqbeg = gt; + + for (T* it = begin; it != eq; ++it) + swap(*it, *--eqbeg); + + *out_eqbeg = eqbeg; + *out_eqend = gt; + } + + template PUGI__FN void sort(I begin, I end, const Pred& pred) + { + // sort large chunks + while (end - begin > 16) + { + // find median element + I middle = begin + (end - begin) / 2; + I median = median3(begin, middle, end - 1, pred); + + // partition in three chunks (< = >) + I eqbeg, eqend; + partition3(begin, end, *median, pred, &eqbeg, &eqend); + + // loop on larger half + if (eqbeg - begin > end - eqend) + { + sort(eqend, end, pred); + end = eqbeg; + } + else + { + sort(begin, eqbeg, pred); + begin = eqend; + } + } + + // insertion sort small chunk + insertion_sort(begin, end, pred); + } + + PUGI__FN bool hash_insert(const void** table, size_t size, const void* key) + { + assert(key); + + unsigned int h = static_cast(reinterpret_cast(key)); + + // MurmurHash3 32-bit finalizer + h ^= h >> 16; + h *= 0x85ebca6bu; + h ^= h >> 13; + h *= 0xc2b2ae35u; + h ^= h >> 16; + + size_t hashmod = size - 1; + size_t bucket = h & hashmod; + + for (size_t probe = 0; probe <= hashmod; ++probe) + { + if (table[bucket] == 0) + { + table[bucket] = key; + return true; + } + + if (table[bucket] == key) + return false; + + // hash collision, quadratic probing + bucket = (bucket + probe + 1) & hashmod; + } + + assert(false && "Hash table is full"); // unreachable + return false; + } +PUGI__NS_END + +// Allocator used for AST and evaluation stacks +PUGI__NS_BEGIN + static const size_t xpath_memory_page_size = + #ifdef PUGIXML_MEMORY_XPATH_PAGE_SIZE + PUGIXML_MEMORY_XPATH_PAGE_SIZE + #else + 4096 + #endif + ; + + static const uintptr_t xpath_memory_block_alignment = sizeof(double) > sizeof(void*) ? sizeof(double) : sizeof(void*); + + struct xpath_memory_block + { + xpath_memory_block* next; + size_t capacity; + + union + { + char data[xpath_memory_page_size]; + double alignment; + }; + }; + + struct xpath_allocator + { + xpath_memory_block* _root; + size_t _root_size; + bool* _error; + + xpath_allocator(xpath_memory_block* root, bool* error = 0): _root(root), _root_size(0), _error(error) + { + } + + void* allocate(size_t size) + { + // round size up to block alignment boundary + size = (size + xpath_memory_block_alignment - 1) & ~(xpath_memory_block_alignment - 1); + + if (_root_size + size <= _root->capacity) + { + void* buf = &_root->data[0] + _root_size; + _root_size += size; + return buf; + } + else + { + // make sure we have at least 1/4th of the page free after allocation to satisfy subsequent allocation requests + size_t block_capacity_base = sizeof(_root->data); + size_t block_capacity_req = size + block_capacity_base / 4; + size_t block_capacity = (block_capacity_base > block_capacity_req) ? block_capacity_base : block_capacity_req; + + size_t block_size = block_capacity + offsetof(xpath_memory_block, data); + + xpath_memory_block* block = static_cast(xml_memory::allocate(block_size)); + if (!block) + { + if (_error) *_error = true; + return 0; + } + + block->next = _root; + block->capacity = block_capacity; + + _root = block; + _root_size = size; + + return block->data; + } + } + + void* reallocate(void* ptr, size_t old_size, size_t new_size) + { + // round size up to block alignment boundary + old_size = (old_size + xpath_memory_block_alignment - 1) & ~(xpath_memory_block_alignment - 1); + new_size = (new_size + xpath_memory_block_alignment - 1) & ~(xpath_memory_block_alignment - 1); + + // we can only reallocate the last object + assert(ptr == 0 || static_cast(ptr) + old_size == &_root->data[0] + _root_size); + + // try to reallocate the object inplace + if (ptr && _root_size - old_size + new_size <= _root->capacity) + { + _root_size = _root_size - old_size + new_size; + return ptr; + } + + // allocate a new block + void* result = allocate(new_size); + if (!result) return 0; + + // we have a new block + if (ptr) + { + // copy old data (we only support growing) + assert(new_size >= old_size); + memcpy(result, ptr, old_size); + + // free the previous page if it had no other objects + assert(_root->data == result); + assert(_root->next); + + if (_root->next->data == ptr) + { + // deallocate the whole page, unless it was the first one + xpath_memory_block* next = _root->next->next; + + if (next) + { + xml_memory::deallocate(_root->next); + _root->next = next; + } + } + } + + return result; + } + + void revert(const xpath_allocator& state) + { + // free all new pages + xpath_memory_block* cur = _root; + + while (cur != state._root) + { + xpath_memory_block* next = cur->next; + + xml_memory::deallocate(cur); + + cur = next; + } + + // restore state + _root = state._root; + _root_size = state._root_size; + } + + void release() + { + xpath_memory_block* cur = _root; + assert(cur); + + while (cur->next) + { + xpath_memory_block* next = cur->next; + + xml_memory::deallocate(cur); + + cur = next; + } + } + }; + + struct xpath_allocator_capture + { + xpath_allocator_capture(xpath_allocator* alloc): _target(alloc), _state(*alloc) + { + } + + ~xpath_allocator_capture() + { + _target->revert(_state); + } + + xpath_allocator* _target; + xpath_allocator _state; + }; + + struct xpath_stack + { + xpath_allocator* result; + xpath_allocator* temp; + }; + + struct xpath_stack_data + { + xpath_memory_block blocks[2]; + xpath_allocator result; + xpath_allocator temp; + xpath_stack stack; + bool oom; + + xpath_stack_data(): result(blocks + 0, &oom), temp(blocks + 1, &oom), oom(false) + { + blocks[0].next = blocks[1].next = 0; + blocks[0].capacity = blocks[1].capacity = sizeof(blocks[0].data); + + stack.result = &result; + stack.temp = &temp; + } + + ~xpath_stack_data() + { + result.release(); + temp.release(); + } + }; +PUGI__NS_END + +// String class +PUGI__NS_BEGIN + class xpath_string + { + const char_t* _buffer; + bool _uses_heap; + size_t _length_heap; + + static char_t* duplicate_string(const char_t* string, size_t length, xpath_allocator* alloc) + { + char_t* result = static_cast(alloc->allocate((length + 1) * sizeof(char_t))); + if (!result) return 0; + + memcpy(result, string, length * sizeof(char_t)); + result[length] = 0; + + return result; + } + + xpath_string(const char_t* buffer, bool uses_heap_, size_t length_heap): _buffer(buffer), _uses_heap(uses_heap_), _length_heap(length_heap) + { + } + + public: + static xpath_string from_const(const char_t* str) + { + return xpath_string(str, false, 0); + } + + static xpath_string from_heap_preallocated(const char_t* begin, const char_t* end) + { + assert(begin <= end && *end == 0); + + return xpath_string(begin, true, static_cast(end - begin)); + } + + static xpath_string from_heap(const char_t* begin, const char_t* end, xpath_allocator* alloc) + { + assert(begin <= end); + + if (begin == end) + return xpath_string(); + + size_t length = static_cast(end - begin); + const char_t* data = duplicate_string(begin, length, alloc); + + return data ? xpath_string(data, true, length) : xpath_string(); + } + + xpath_string(): _buffer(PUGIXML_TEXT("")), _uses_heap(false), _length_heap(0) + { + } + + void append(const xpath_string& o, xpath_allocator* alloc) + { + // skip empty sources + if (!*o._buffer) return; + + // fast append for constant empty target and constant source + if (!*_buffer && !_uses_heap && !o._uses_heap) + { + _buffer = o._buffer; + } + else + { + // need to make heap copy + size_t target_length = length(); + size_t source_length = o.length(); + size_t result_length = target_length + source_length; + + // allocate new buffer + char_t* result = static_cast(alloc->reallocate(_uses_heap ? const_cast(_buffer) : 0, (target_length + 1) * sizeof(char_t), (result_length + 1) * sizeof(char_t))); + if (!result) return; + + // append first string to the new buffer in case there was no reallocation + if (!_uses_heap) memcpy(result, _buffer, target_length * sizeof(char_t)); + + // append second string to the new buffer + memcpy(result + target_length, o._buffer, source_length * sizeof(char_t)); + result[result_length] = 0; + + // finalize + _buffer = result; + _uses_heap = true; + _length_heap = result_length; + } + } + + const char_t* c_str() const + { + return _buffer; + } + + size_t length() const + { + return _uses_heap ? _length_heap : strlength(_buffer); + } + + char_t* data(xpath_allocator* alloc) + { + // make private heap copy + if (!_uses_heap) + { + size_t length_ = strlength(_buffer); + const char_t* data_ = duplicate_string(_buffer, length_, alloc); + + if (!data_) return 0; + + _buffer = data_; + _uses_heap = true; + _length_heap = length_; + } + + return const_cast(_buffer); + } + + bool empty() const + { + return *_buffer == 0; + } + + bool operator==(const xpath_string& o) const + { + return strequal(_buffer, o._buffer); + } + + bool operator!=(const xpath_string& o) const + { + return !strequal(_buffer, o._buffer); + } + + bool uses_heap() const + { + return _uses_heap; + } + }; +PUGI__NS_END + +PUGI__NS_BEGIN + PUGI__FN bool starts_with(const char_t* string, const char_t* pattern) + { + while (*pattern && *string == *pattern) + { + string++; + pattern++; + } + + return *pattern == 0; + } + + PUGI__FN const char_t* find_char(const char_t* s, char_t c) + { + #ifdef PUGIXML_WCHAR_MODE + return wcschr(s, c); + #else + return strchr(s, c); + #endif + } + + PUGI__FN const char_t* find_substring(const char_t* s, const char_t* p) + { + #ifdef PUGIXML_WCHAR_MODE + // MSVC6 wcsstr bug workaround (if s is empty it always returns 0) + return (*p == 0) ? s : wcsstr(s, p); + #else + return strstr(s, p); + #endif + } + + // Converts symbol to lower case, if it is an ASCII one + PUGI__FN char_t tolower_ascii(char_t ch) + { + return static_cast(ch - 'A') < 26 ? static_cast(ch | ' ') : ch; + } + + PUGI__FN xpath_string string_value(const xpath_node& na, xpath_allocator* alloc) + { + if (na.attribute()) + return xpath_string::from_const(na.attribute().value()); + else + { + xml_node n = na.node(); + + switch (n.type()) + { + case node_pcdata: + case node_cdata: + case node_comment: + case node_pi: + return xpath_string::from_const(n.value()); + + case node_document: + case node_element: + { + xpath_string result; + + // element nodes can have value if parse_embed_pcdata was used + if (n.value()[0]) + result.append(xpath_string::from_const(n.value()), alloc); + + xml_node cur = n.first_child(); + + while (cur && cur != n) + { + if (cur.type() == node_pcdata || cur.type() == node_cdata) + result.append(xpath_string::from_const(cur.value()), alloc); + + if (cur.first_child()) + cur = cur.first_child(); + else if (cur.next_sibling()) + cur = cur.next_sibling(); + else + { + while (!cur.next_sibling() && cur != n) + cur = cur.parent(); + + if (cur != n) cur = cur.next_sibling(); + } + } + + return result; + } + + default: + return xpath_string(); + } + } + } + + PUGI__FN bool node_is_before_sibling(xml_node_struct* ln, xml_node_struct* rn) + { + assert(ln->parent == rn->parent); + + // there is no common ancestor (the shared parent is null), nodes are from different documents + if (!ln->parent) return ln < rn; + + // determine sibling order + xml_node_struct* ls = ln; + xml_node_struct* rs = rn; + + while (ls && rs) + { + if (ls == rn) return true; + if (rs == ln) return false; + + ls = ls->next_sibling; + rs = rs->next_sibling; + } + + // if rn sibling chain ended ln must be before rn + return !rs; + } + + PUGI__FN bool node_is_before(xml_node_struct* ln, xml_node_struct* rn) + { + // find common ancestor at the same depth, if any + xml_node_struct* lp = ln; + xml_node_struct* rp = rn; + + while (lp && rp && lp->parent != rp->parent) + { + lp = lp->parent; + rp = rp->parent; + } + + // parents are the same! + if (lp && rp) return node_is_before_sibling(lp, rp); + + // nodes are at different depths, need to normalize heights + bool left_higher = !lp; + + while (lp) + { + lp = lp->parent; + ln = ln->parent; + } + + while (rp) + { + rp = rp->parent; + rn = rn->parent; + } + + // one node is the ancestor of the other + if (ln == rn) return left_higher; + + // find common ancestor... again + while (ln->parent != rn->parent) + { + ln = ln->parent; + rn = rn->parent; + } + + return node_is_before_sibling(ln, rn); + } + + PUGI__FN bool node_is_ancestor(xml_node_struct* parent, xml_node_struct* node) + { + while (node && node != parent) node = node->parent; + + return parent && node == parent; + } + + PUGI__FN const void* document_buffer_order(const xpath_node& xnode) + { + xml_node_struct* node = xnode.node().internal_object(); + + if (node) + { + if ((get_document(node).header & xml_memory_page_contents_shared_mask) == 0) + { + if (node->name && (node->header & impl::xml_memory_page_name_allocated_or_shared_mask) == 0) return node->name; + if (node->value && (node->header & impl::xml_memory_page_value_allocated_or_shared_mask) == 0) return node->value; + } + + return 0; + } + + xml_attribute_struct* attr = xnode.attribute().internal_object(); + + if (attr) + { + if ((get_document(attr).header & xml_memory_page_contents_shared_mask) == 0) + { + if ((attr->header & impl::xml_memory_page_name_allocated_or_shared_mask) == 0) return attr->name; + if ((attr->header & impl::xml_memory_page_value_allocated_or_shared_mask) == 0) return attr->value; + } + + return 0; + } + + return 0; + } + + struct document_order_comparator + { + bool operator()(const xpath_node& lhs, const xpath_node& rhs) const + { + // optimized document order based check + const void* lo = document_buffer_order(lhs); + const void* ro = document_buffer_order(rhs); + + if (lo && ro) return lo < ro; + + // slow comparison + xml_node ln = lhs.node(), rn = rhs.node(); + + // compare attributes + if (lhs.attribute() && rhs.attribute()) + { + // shared parent + if (lhs.parent() == rhs.parent()) + { + // determine sibling order + for (xml_attribute a = lhs.attribute(); a; a = a.next_attribute()) + if (a == rhs.attribute()) + return true; + + return false; + } + + // compare attribute parents + ln = lhs.parent(); + rn = rhs.parent(); + } + else if (lhs.attribute()) + { + // attributes go after the parent element + if (lhs.parent() == rhs.node()) return false; + + ln = lhs.parent(); + } + else if (rhs.attribute()) + { + // attributes go after the parent element + if (rhs.parent() == lhs.node()) return true; + + rn = rhs.parent(); + } + + if (ln == rn) return false; + + if (!ln || !rn) return ln < rn; + + return node_is_before(ln.internal_object(), rn.internal_object()); + } + }; + + PUGI__FN double gen_nan() + { + #if defined(__STDC_IEC_559__) || ((FLT_RADIX - 0 == 2) && (FLT_MAX_EXP - 0 == 128) && (FLT_MANT_DIG - 0 == 24)) + PUGI__STATIC_ASSERT(sizeof(float) == sizeof(uint32_t)); + typedef uint32_t UI; // BCC5 workaround + union { float f; UI i; } u; + u.i = 0x7fc00000; + return double(u.f); + #else + // fallback + const volatile double zero = 0.0; + return zero / zero; + #endif + } + + PUGI__FN bool is_nan(double value) + { + #if defined(PUGI__MSVC_CRT_VERSION) || defined(__BORLANDC__) + return !!_isnan(value); + #elif defined(fpclassify) && defined(FP_NAN) + return fpclassify(value) == FP_NAN; + #else + // fallback + const volatile double v = value; + return v != v; + #endif + } + + PUGI__FN const char_t* convert_number_to_string_special(double value) + { + #if defined(PUGI__MSVC_CRT_VERSION) || defined(__BORLANDC__) + if (_finite(value)) return (value == 0) ? PUGIXML_TEXT("0") : 0; + if (_isnan(value)) return PUGIXML_TEXT("NaN"); + return value > 0 ? PUGIXML_TEXT("Infinity") : PUGIXML_TEXT("-Infinity"); + #elif defined(fpclassify) && defined(FP_NAN) && defined(FP_INFINITE) && defined(FP_ZERO) + switch (fpclassify(value)) + { + case FP_NAN: + return PUGIXML_TEXT("NaN"); + + case FP_INFINITE: + return value > 0 ? PUGIXML_TEXT("Infinity") : PUGIXML_TEXT("-Infinity"); + + case FP_ZERO: + return PUGIXML_TEXT("0"); + + default: + return 0; + } + #else + // fallback + const volatile double v = value; + + if (v == 0) return PUGIXML_TEXT("0"); + if (v != v) return PUGIXML_TEXT("NaN"); + if (v * 2 == v) return value > 0 ? PUGIXML_TEXT("Infinity") : PUGIXML_TEXT("-Infinity"); + return 0; + #endif + } + + PUGI__FN bool convert_number_to_boolean(double value) + { + return (value != 0 && !is_nan(value)); + } + + PUGI__FN void truncate_zeros(char* begin, char* end) + { + while (begin != end && end[-1] == '0') end--; + + *end = 0; + } + + // gets mantissa digits in the form of 0.xxxxx with 0. implied and the exponent +#if defined(PUGI__MSVC_CRT_VERSION) && PUGI__MSVC_CRT_VERSION >= 1400 + PUGI__FN void convert_number_to_mantissa_exponent(double value, char (&buffer)[32], char** out_mantissa, int* out_exponent) + { + // get base values + int sign, exponent; + _ecvt_s(buffer, sizeof(buffer), value, DBL_DIG + 1, &exponent, &sign); + + // truncate redundant zeros + truncate_zeros(buffer, buffer + strlen(buffer)); + + // fill results + *out_mantissa = buffer; + *out_exponent = exponent; + } +#else + PUGI__FN void convert_number_to_mantissa_exponent(double value, char (&buffer)[32], char** out_mantissa, int* out_exponent) + { + // get a scientific notation value with IEEE DBL_DIG decimals + PUGI__SNPRINTF(buffer, "%.*e", DBL_DIG, value); + + // get the exponent (possibly negative) + char* exponent_string = strchr(buffer, 'e'); + assert(exponent_string); + + int exponent = atoi(exponent_string + 1); + + // extract mantissa string: skip sign + char* mantissa = buffer[0] == '-' ? buffer + 1 : buffer; + assert(mantissa[0] != '0' && mantissa[1] == '.'); + + // divide mantissa by 10 to eliminate integer part + mantissa[1] = mantissa[0]; + mantissa++; + exponent++; + + // remove extra mantissa digits and zero-terminate mantissa + truncate_zeros(mantissa, exponent_string); + + // fill results + *out_mantissa = mantissa; + *out_exponent = exponent; + } +#endif + + PUGI__FN xpath_string convert_number_to_string(double value, xpath_allocator* alloc) + { + // try special number conversion + const char_t* special = convert_number_to_string_special(value); + if (special) return xpath_string::from_const(special); + + // get mantissa + exponent form + char mantissa_buffer[32]; + + char* mantissa; + int exponent; + convert_number_to_mantissa_exponent(value, mantissa_buffer, &mantissa, &exponent); + + // allocate a buffer of suitable length for the number + size_t result_size = strlen(mantissa_buffer) + (exponent > 0 ? exponent : -exponent) + 4; + char_t* result = static_cast(alloc->allocate(sizeof(char_t) * result_size)); + if (!result) return xpath_string(); + + // make the number! + char_t* s = result; + + // sign + if (value < 0) *s++ = '-'; + + // integer part + if (exponent <= 0) + { + *s++ = '0'; + } + else + { + while (exponent > 0) + { + assert(*mantissa == 0 || static_cast(*mantissa - '0') <= 9); + *s++ = *mantissa ? *mantissa++ : '0'; + exponent--; + } + } + + // fractional part + if (*mantissa) + { + // decimal point + *s++ = '.'; + + // extra zeroes from negative exponent + while (exponent < 0) + { + *s++ = '0'; + exponent++; + } + + // extra mantissa digits + while (*mantissa) + { + assert(static_cast(*mantissa - '0') <= 9); + *s++ = *mantissa++; + } + } + + // zero-terminate + assert(s < result + result_size); + *s = 0; + + return xpath_string::from_heap_preallocated(result, s); + } + + PUGI__FN bool check_string_to_number_format(const char_t* string) + { + // parse leading whitespace + while (PUGI__IS_CHARTYPE(*string, ct_space)) ++string; + + // parse sign + if (*string == '-') ++string; + + if (!*string) return false; + + // if there is no integer part, there should be a decimal part with at least one digit + if (!PUGI__IS_CHARTYPEX(string[0], ctx_digit) && (string[0] != '.' || !PUGI__IS_CHARTYPEX(string[1], ctx_digit))) return false; + + // parse integer part + while (PUGI__IS_CHARTYPEX(*string, ctx_digit)) ++string; + + // parse decimal part + if (*string == '.') + { + ++string; + + while (PUGI__IS_CHARTYPEX(*string, ctx_digit)) ++string; + } + + // parse trailing whitespace + while (PUGI__IS_CHARTYPE(*string, ct_space)) ++string; + + return *string == 0; + } + + PUGI__FN double convert_string_to_number(const char_t* string) + { + // check string format + if (!check_string_to_number_format(string)) return gen_nan(); + + // parse string + #ifdef PUGIXML_WCHAR_MODE + return wcstod(string, 0); + #else + return strtod(string, 0); + #endif + } + + PUGI__FN bool convert_string_to_number_scratch(char_t (&buffer)[32], const char_t* begin, const char_t* end, double* out_result) + { + size_t length = static_cast(end - begin); + char_t* scratch = buffer; + + if (length >= sizeof(buffer) / sizeof(buffer[0])) + { + // need to make dummy on-heap copy + scratch = static_cast(xml_memory::allocate((length + 1) * sizeof(char_t))); + if (!scratch) return false; + } + + // copy string to zero-terminated buffer and perform conversion + memcpy(scratch, begin, length * sizeof(char_t)); + scratch[length] = 0; + + *out_result = convert_string_to_number(scratch); + + // free dummy buffer + if (scratch != buffer) xml_memory::deallocate(scratch); + + return true; + } + + PUGI__FN double round_nearest(double value) + { + return floor(value + 0.5); + } + + PUGI__FN double round_nearest_nzero(double value) + { + // same as round_nearest, but returns -0 for [-0.5, -0] + // ceil is used to differentiate between +0 and -0 (we return -0 for [-0.5, -0] and +0 for +0) + return (value >= -0.5 && value <= 0) ? ceil(value) : floor(value + 0.5); + } + + PUGI__FN const char_t* qualified_name(const xpath_node& node) + { + return node.attribute() ? node.attribute().name() : node.node().name(); + } + + PUGI__FN const char_t* local_name(const xpath_node& node) + { + const char_t* name = qualified_name(node); + const char_t* p = find_char(name, ':'); + + return p ? p + 1 : name; + } + + struct namespace_uri_predicate + { + const char_t* prefix; + size_t prefix_length; + + namespace_uri_predicate(const char_t* name) + { + const char_t* pos = find_char(name, ':'); + + prefix = pos ? name : 0; + prefix_length = pos ? static_cast(pos - name) : 0; + } + + bool operator()(xml_attribute a) const + { + const char_t* name = a.name(); + + if (!starts_with(name, PUGIXML_TEXT("xmlns"))) return false; + + return prefix ? name[5] == ':' && strequalrange(name + 6, prefix, prefix_length) : name[5] == 0; + } + }; + + PUGI__FN const char_t* namespace_uri(xml_node node) + { + namespace_uri_predicate pred = node.name(); + + xml_node p = node; + + while (p) + { + xml_attribute a = p.find_attribute(pred); + + if (a) return a.value(); + + p = p.parent(); + } + + return PUGIXML_TEXT(""); + } + + PUGI__FN const char_t* namespace_uri(xml_attribute attr, xml_node parent) + { + namespace_uri_predicate pred = attr.name(); + + // Default namespace does not apply to attributes + if (!pred.prefix) return PUGIXML_TEXT(""); + + xml_node p = parent; + + while (p) + { + xml_attribute a = p.find_attribute(pred); + + if (a) return a.value(); + + p = p.parent(); + } + + return PUGIXML_TEXT(""); + } + + PUGI__FN const char_t* namespace_uri(const xpath_node& node) + { + return node.attribute() ? namespace_uri(node.attribute(), node.parent()) : namespace_uri(node.node()); + } + + PUGI__FN char_t* normalize_space(char_t* buffer) + { + char_t* write = buffer; + + for (char_t* it = buffer; *it; ) + { + char_t ch = *it++; + + if (PUGI__IS_CHARTYPE(ch, ct_space)) + { + // replace whitespace sequence with single space + while (PUGI__IS_CHARTYPE(*it, ct_space)) it++; + + // avoid leading spaces + if (write != buffer) *write++ = ' '; + } + else *write++ = ch; + } + + // remove trailing space + if (write != buffer && PUGI__IS_CHARTYPE(write[-1], ct_space)) write--; + + // zero-terminate + *write = 0; + + return write; + } + + PUGI__FN char_t* translate(char_t* buffer, const char_t* from, const char_t* to, size_t to_length) + { + char_t* write = buffer; + + while (*buffer) + { + PUGI__DMC_VOLATILE char_t ch = *buffer++; + + const char_t* pos = find_char(from, ch); + + if (!pos) + *write++ = ch; // do not process + else if (static_cast(pos - from) < to_length) + *write++ = to[pos - from]; // replace + } + + // zero-terminate + *write = 0; + + return write; + } + + PUGI__FN unsigned char* translate_table_generate(xpath_allocator* alloc, const char_t* from, const char_t* to) + { + unsigned char table[128] = {0}; + + while (*from) + { + unsigned int fc = static_cast(*from); + unsigned int tc = static_cast(*to); + + if (fc >= 128 || tc >= 128) + return 0; + + // code=128 means "skip character" + if (!table[fc]) + table[fc] = static_cast(tc ? tc : 128); + + from++; + if (tc) to++; + } + + for (int i = 0; i < 128; ++i) + if (!table[i]) + table[i] = static_cast(i); + + void* result = alloc->allocate(sizeof(table)); + if (!result) return 0; + + memcpy(result, table, sizeof(table)); + + return static_cast(result); + } + + PUGI__FN char_t* translate_table(char_t* buffer, const unsigned char* table) + { + char_t* write = buffer; + + while (*buffer) + { + char_t ch = *buffer++; + unsigned int index = static_cast(ch); + + if (index < 128) + { + unsigned char code = table[index]; + + // code=128 means "skip character" (table size is 128 so 128 can be a special value) + // this code skips these characters without extra branches + *write = static_cast(code); + write += 1 - (code >> 7); + } + else + { + *write++ = ch; + } + } + + // zero-terminate + *write = 0; + + return write; + } + + inline bool is_xpath_attribute(const char_t* name) + { + return !(starts_with(name, PUGIXML_TEXT("xmlns")) && (name[5] == 0 || name[5] == ':')); + } + + struct xpath_variable_boolean: xpath_variable + { + xpath_variable_boolean(): xpath_variable(xpath_type_boolean), value(false) + { + } + + bool value; + char_t name[1]; + }; + + struct xpath_variable_number: xpath_variable + { + xpath_variable_number(): xpath_variable(xpath_type_number), value(0) + { + } + + double value; + char_t name[1]; + }; + + struct xpath_variable_string: xpath_variable + { + xpath_variable_string(): xpath_variable(xpath_type_string), value(0) + { + } + + ~xpath_variable_string() + { + if (value) xml_memory::deallocate(value); + } + + char_t* value; + char_t name[1]; + }; + + struct xpath_variable_node_set: xpath_variable + { + xpath_variable_node_set(): xpath_variable(xpath_type_node_set) + { + } + + xpath_node_set value; + char_t name[1]; + }; + + static const xpath_node_set dummy_node_set; + + PUGI__FN PUGI__UNSIGNED_OVERFLOW unsigned int hash_string(const char_t* str) + { + // Jenkins one-at-a-time hash (http://en.wikipedia.org/wiki/Jenkins_hash_function#one-at-a-time) + unsigned int result = 0; + + while (*str) + { + result += static_cast(*str++); + result += result << 10; + result ^= result >> 6; + } + + result += result << 3; + result ^= result >> 11; + result += result << 15; + + return result; + } + + template PUGI__FN T* new_xpath_variable(const char_t* name) + { + size_t length = strlength(name); + if (length == 0) return 0; // empty variable names are invalid + + // $$ we can't use offsetof(T, name) because T is non-POD, so we just allocate additional length characters + void* memory = xml_memory::allocate(sizeof(T) + length * sizeof(char_t)); + if (!memory) return 0; + + T* result = new (memory) T(); + + memcpy(result->name, name, (length + 1) * sizeof(char_t)); + + return result; + } + + PUGI__FN xpath_variable* new_xpath_variable(xpath_value_type type, const char_t* name) + { + switch (type) + { + case xpath_type_node_set: + return new_xpath_variable(name); + + case xpath_type_number: + return new_xpath_variable(name); + + case xpath_type_string: + return new_xpath_variable(name); + + case xpath_type_boolean: + return new_xpath_variable(name); + + default: + return 0; + } + } + + template PUGI__FN void delete_xpath_variable(T* var) + { + var->~T(); + xml_memory::deallocate(var); + } + + PUGI__FN void delete_xpath_variable(xpath_value_type type, xpath_variable* var) + { + switch (type) + { + case xpath_type_node_set: + delete_xpath_variable(static_cast(var)); + break; + + case xpath_type_number: + delete_xpath_variable(static_cast(var)); + break; + + case xpath_type_string: + delete_xpath_variable(static_cast(var)); + break; + + case xpath_type_boolean: + delete_xpath_variable(static_cast(var)); + break; + + default: + assert(false && "Invalid variable type"); // unreachable + } + } + + PUGI__FN bool copy_xpath_variable(xpath_variable* lhs, const xpath_variable* rhs) + { + switch (rhs->type()) + { + case xpath_type_node_set: + return lhs->set(static_cast(rhs)->value); + + case xpath_type_number: + return lhs->set(static_cast(rhs)->value); + + case xpath_type_string: + return lhs->set(static_cast(rhs)->value); + + case xpath_type_boolean: + return lhs->set(static_cast(rhs)->value); + + default: + assert(false && "Invalid variable type"); // unreachable + return false; + } + } + + PUGI__FN bool get_variable_scratch(char_t (&buffer)[32], xpath_variable_set* set, const char_t* begin, const char_t* end, xpath_variable** out_result) + { + size_t length = static_cast(end - begin); + char_t* scratch = buffer; + + if (length >= sizeof(buffer) / sizeof(buffer[0])) + { + // need to make dummy on-heap copy + scratch = static_cast(xml_memory::allocate((length + 1) * sizeof(char_t))); + if (!scratch) return false; + } + + // copy string to zero-terminated buffer and perform lookup + memcpy(scratch, begin, length * sizeof(char_t)); + scratch[length] = 0; + + *out_result = set->get(scratch); + + // free dummy buffer + if (scratch != buffer) xml_memory::deallocate(scratch); + + return true; + } +PUGI__NS_END + +// Internal node set class +PUGI__NS_BEGIN + PUGI__FN xpath_node_set::type_t xpath_get_order(const xpath_node* begin, const xpath_node* end) + { + if (end - begin < 2) + return xpath_node_set::type_sorted; + + document_order_comparator cmp; + + bool first = cmp(begin[0], begin[1]); + + for (const xpath_node* it = begin + 1; it + 1 < end; ++it) + if (cmp(it[0], it[1]) != first) + return xpath_node_set::type_unsorted; + + return first ? xpath_node_set::type_sorted : xpath_node_set::type_sorted_reverse; + } + + PUGI__FN xpath_node_set::type_t xpath_sort(xpath_node* begin, xpath_node* end, xpath_node_set::type_t type, bool rev) + { + xpath_node_set::type_t order = rev ? xpath_node_set::type_sorted_reverse : xpath_node_set::type_sorted; + + if (type == xpath_node_set::type_unsorted) + { + xpath_node_set::type_t sorted = xpath_get_order(begin, end); + + if (sorted == xpath_node_set::type_unsorted) + { + sort(begin, end, document_order_comparator()); + + type = xpath_node_set::type_sorted; + } + else + type = sorted; + } + + if (type != order) reverse(begin, end); + + return order; + } + + PUGI__FN xpath_node xpath_first(const xpath_node* begin, const xpath_node* end, xpath_node_set::type_t type) + { + if (begin == end) return xpath_node(); + + switch (type) + { + case xpath_node_set::type_sorted: + return *begin; + + case xpath_node_set::type_sorted_reverse: + return *(end - 1); + + case xpath_node_set::type_unsorted: + return *min_element(begin, end, document_order_comparator()); + + default: + assert(false && "Invalid node set type"); // unreachable + return xpath_node(); + } + } + + class xpath_node_set_raw + { + xpath_node_set::type_t _type; + + xpath_node* _begin; + xpath_node* _end; + xpath_node* _eos; + + public: + xpath_node_set_raw(): _type(xpath_node_set::type_unsorted), _begin(0), _end(0), _eos(0) + { + } + + xpath_node* begin() const + { + return _begin; + } + + xpath_node* end() const + { + return _end; + } + + bool empty() const + { + return _begin == _end; + } + + size_t size() const + { + return static_cast(_end - _begin); + } + + xpath_node first() const + { + return xpath_first(_begin, _end, _type); + } + + void push_back_grow(const xpath_node& node, xpath_allocator* alloc); + + void push_back(const xpath_node& node, xpath_allocator* alloc) + { + if (_end != _eos) + *_end++ = node; + else + push_back_grow(node, alloc); + } + + void append(const xpath_node* begin_, const xpath_node* end_, xpath_allocator* alloc) + { + if (begin_ == end_) return; + + size_t size_ = static_cast(_end - _begin); + size_t capacity = static_cast(_eos - _begin); + size_t count = static_cast(end_ - begin_); + + if (size_ + count > capacity) + { + // reallocate the old array or allocate a new one + xpath_node* data = static_cast(alloc->reallocate(_begin, capacity * sizeof(xpath_node), (size_ + count) * sizeof(xpath_node))); + if (!data) return; + + // finalize + _begin = data; + _end = data + size_; + _eos = data + size_ + count; + } + + memcpy(_end, begin_, count * sizeof(xpath_node)); + _end += count; + } + + void sort_do() + { + _type = xpath_sort(_begin, _end, _type, false); + } + + void truncate(xpath_node* pos) + { + assert(_begin <= pos && pos <= _end); + + _end = pos; + } + + void remove_duplicates(xpath_allocator* alloc) + { + if (_type == xpath_node_set::type_unsorted && _end - _begin > 2) + { + xpath_allocator_capture cr(alloc); + + size_t size_ = static_cast(_end - _begin); + + size_t hash_size = 1; + while (hash_size < size_ + size_ / 2) hash_size *= 2; + + const void** hash_data = static_cast(alloc->allocate(hash_size * sizeof(void**))); + if (!hash_data) return; + + memset(hash_data, 0, hash_size * sizeof(const void**)); + + xpath_node* write = _begin; + + for (xpath_node* it = _begin; it != _end; ++it) + { + const void* attr = it->attribute().internal_object(); + const void* node = it->node().internal_object(); + const void* key = attr ? attr : node; + + if (key && hash_insert(hash_data, hash_size, key)) + { + *write++ = *it; + } + } + + _end = write; + } + else + { + _end = unique(_begin, _end); + } + } + + xpath_node_set::type_t type() const + { + return _type; + } + + void set_type(xpath_node_set::type_t value) + { + _type = value; + } + }; + + PUGI__FN_NO_INLINE void xpath_node_set_raw::push_back_grow(const xpath_node& node, xpath_allocator* alloc) + { + size_t capacity = static_cast(_eos - _begin); + + // get new capacity (1.5x rule) + size_t new_capacity = capacity + capacity / 2 + 1; + + // reallocate the old array or allocate a new one + xpath_node* data = static_cast(alloc->reallocate(_begin, capacity * sizeof(xpath_node), new_capacity * sizeof(xpath_node))); + if (!data) return; + + // finalize + _begin = data; + _end = data + capacity; + _eos = data + new_capacity; + + // push + *_end++ = node; + } +PUGI__NS_END + +PUGI__NS_BEGIN + struct xpath_context + { + xpath_node n; + size_t position, size; + + xpath_context(const xpath_node& n_, size_t position_, size_t size_): n(n_), position(position_), size(size_) + { + } + }; + + enum lexeme_t + { + lex_none = 0, + lex_equal, + lex_not_equal, + lex_less, + lex_greater, + lex_less_or_equal, + lex_greater_or_equal, + lex_plus, + lex_minus, + lex_multiply, + lex_union, + lex_var_ref, + lex_open_brace, + lex_close_brace, + lex_quoted_string, + lex_number, + lex_slash, + lex_double_slash, + lex_open_square_brace, + lex_close_square_brace, + lex_string, + lex_comma, + lex_axis_attribute, + lex_dot, + lex_double_dot, + lex_double_colon, + lex_eof + }; + + struct xpath_lexer_string + { + const char_t* begin; + const char_t* end; + + xpath_lexer_string(): begin(0), end(0) + { + } + + bool operator==(const char_t* other) const + { + size_t length = static_cast(end - begin); + + return strequalrange(other, begin, length); + } + }; + + class xpath_lexer + { + const char_t* _cur; + const char_t* _cur_lexeme_pos; + xpath_lexer_string _cur_lexeme_contents; + + lexeme_t _cur_lexeme; + + public: + explicit xpath_lexer(const char_t* query): _cur(query) + { + next(); + } + + const char_t* state() const + { + return _cur; + } + + void next() + { + const char_t* cur = _cur; + + while (PUGI__IS_CHARTYPE(*cur, ct_space)) ++cur; + + // save lexeme position for error reporting + _cur_lexeme_pos = cur; + + switch (*cur) + { + case 0: + _cur_lexeme = lex_eof; + break; + + case '>': + if (*(cur+1) == '=') + { + cur += 2; + _cur_lexeme = lex_greater_or_equal; + } + else + { + cur += 1; + _cur_lexeme = lex_greater; + } + break; + + case '<': + if (*(cur+1) == '=') + { + cur += 2; + _cur_lexeme = lex_less_or_equal; + } + else + { + cur += 1; + _cur_lexeme = lex_less; + } + break; + + case '!': + if (*(cur+1) == '=') + { + cur += 2; + _cur_lexeme = lex_not_equal; + } + else + { + _cur_lexeme = lex_none; + } + break; + + case '=': + cur += 1; + _cur_lexeme = lex_equal; + + break; + + case '+': + cur += 1; + _cur_lexeme = lex_plus; + + break; + + case '-': + cur += 1; + _cur_lexeme = lex_minus; + + break; + + case '*': + cur += 1; + _cur_lexeme = lex_multiply; + + break; + + case '|': + cur += 1; + _cur_lexeme = lex_union; + + break; + + case '$': + cur += 1; + + if (PUGI__IS_CHARTYPEX(*cur, ctx_start_symbol)) + { + _cur_lexeme_contents.begin = cur; + + while (PUGI__IS_CHARTYPEX(*cur, ctx_symbol)) cur++; + + if (cur[0] == ':' && PUGI__IS_CHARTYPEX(cur[1], ctx_symbol)) // qname + { + cur++; // : + + while (PUGI__IS_CHARTYPEX(*cur, ctx_symbol)) cur++; + } + + _cur_lexeme_contents.end = cur; + + _cur_lexeme = lex_var_ref; + } + else + { + _cur_lexeme = lex_none; + } + + break; + + case '(': + cur += 1; + _cur_lexeme = lex_open_brace; + + break; + + case ')': + cur += 1; + _cur_lexeme = lex_close_brace; + + break; + + case '[': + cur += 1; + _cur_lexeme = lex_open_square_brace; + + break; + + case ']': + cur += 1; + _cur_lexeme = lex_close_square_brace; + + break; + + case ',': + cur += 1; + _cur_lexeme = lex_comma; + + break; + + case '/': + if (*(cur+1) == '/') + { + cur += 2; + _cur_lexeme = lex_double_slash; + } + else + { + cur += 1; + _cur_lexeme = lex_slash; + } + break; + + case '.': + if (*(cur+1) == '.') + { + cur += 2; + _cur_lexeme = lex_double_dot; + } + else if (PUGI__IS_CHARTYPEX(*(cur+1), ctx_digit)) + { + _cur_lexeme_contents.begin = cur; // . + + ++cur; + + while (PUGI__IS_CHARTYPEX(*cur, ctx_digit)) cur++; + + _cur_lexeme_contents.end = cur; + + _cur_lexeme = lex_number; + } + else + { + cur += 1; + _cur_lexeme = lex_dot; + } + break; + + case '@': + cur += 1; + _cur_lexeme = lex_axis_attribute; + + break; + + case '"': + case '\'': + { + char_t terminator = *cur; + + ++cur; + + _cur_lexeme_contents.begin = cur; + while (*cur && *cur != terminator) cur++; + _cur_lexeme_contents.end = cur; + + if (!*cur) + _cur_lexeme = lex_none; + else + { + cur += 1; + _cur_lexeme = lex_quoted_string; + } + + break; + } + + case ':': + if (*(cur+1) == ':') + { + cur += 2; + _cur_lexeme = lex_double_colon; + } + else + { + _cur_lexeme = lex_none; + } + break; + + default: + if (PUGI__IS_CHARTYPEX(*cur, ctx_digit)) + { + _cur_lexeme_contents.begin = cur; + + while (PUGI__IS_CHARTYPEX(*cur, ctx_digit)) cur++; + + if (*cur == '.') + { + cur++; + + while (PUGI__IS_CHARTYPEX(*cur, ctx_digit)) cur++; + } + + _cur_lexeme_contents.end = cur; + + _cur_lexeme = lex_number; + } + else if (PUGI__IS_CHARTYPEX(*cur, ctx_start_symbol)) + { + _cur_lexeme_contents.begin = cur; + + while (PUGI__IS_CHARTYPEX(*cur, ctx_symbol)) cur++; + + if (cur[0] == ':') + { + if (cur[1] == '*') // namespace test ncname:* + { + cur += 2; // :* + } + else if (PUGI__IS_CHARTYPEX(cur[1], ctx_symbol)) // namespace test qname + { + cur++; // : + + while (PUGI__IS_CHARTYPEX(*cur, ctx_symbol)) cur++; + } + } + + _cur_lexeme_contents.end = cur; + + _cur_lexeme = lex_string; + } + else + { + _cur_lexeme = lex_none; + } + } + + _cur = cur; + } + + lexeme_t current() const + { + return _cur_lexeme; + } + + const char_t* current_pos() const + { + return _cur_lexeme_pos; + } + + const xpath_lexer_string& contents() const + { + assert(_cur_lexeme == lex_var_ref || _cur_lexeme == lex_number || _cur_lexeme == lex_string || _cur_lexeme == lex_quoted_string); + + return _cur_lexeme_contents; + } + }; + + enum ast_type_t + { + ast_unknown, + ast_op_or, // left or right + ast_op_and, // left and right + ast_op_equal, // left = right + ast_op_not_equal, // left != right + ast_op_less, // left < right + ast_op_greater, // left > right + ast_op_less_or_equal, // left <= right + ast_op_greater_or_equal, // left >= right + ast_op_add, // left + right + ast_op_subtract, // left - right + ast_op_multiply, // left * right + ast_op_divide, // left / right + ast_op_mod, // left % right + ast_op_negate, // left - right + ast_op_union, // left | right + ast_predicate, // apply predicate to set; next points to next predicate + ast_filter, // select * from left where right + ast_string_constant, // string constant + ast_number_constant, // number constant + ast_variable, // variable + ast_func_last, // last() + ast_func_position, // position() + ast_func_count, // count(left) + ast_func_id, // id(left) + ast_func_local_name_0, // local-name() + ast_func_local_name_1, // local-name(left) + ast_func_namespace_uri_0, // namespace-uri() + ast_func_namespace_uri_1, // namespace-uri(left) + ast_func_name_0, // name() + ast_func_name_1, // name(left) + ast_func_string_0, // string() + ast_func_string_1, // string(left) + ast_func_concat, // concat(left, right, siblings) + ast_func_starts_with, // starts_with(left, right) + ast_func_contains, // contains(left, right) + ast_func_substring_before, // substring-before(left, right) + ast_func_substring_after, // substring-after(left, right) + ast_func_substring_2, // substring(left, right) + ast_func_substring_3, // substring(left, right, third) + ast_func_string_length_0, // string-length() + ast_func_string_length_1, // string-length(left) + ast_func_normalize_space_0, // normalize-space() + ast_func_normalize_space_1, // normalize-space(left) + ast_func_translate, // translate(left, right, third) + ast_func_boolean, // boolean(left) + ast_func_not, // not(left) + ast_func_true, // true() + ast_func_false, // false() + ast_func_lang, // lang(left) + ast_func_number_0, // number() + ast_func_number_1, // number(left) + ast_func_sum, // sum(left) + ast_func_floor, // floor(left) + ast_func_ceiling, // ceiling(left) + ast_func_round, // round(left) + ast_step, // process set left with step + ast_step_root, // select root node + + ast_opt_translate_table, // translate(left, right, third) where right/third are constants + ast_opt_compare_attribute // @name = 'string' + }; + + enum axis_t + { + axis_ancestor, + axis_ancestor_or_self, + axis_attribute, + axis_child, + axis_descendant, + axis_descendant_or_self, + axis_following, + axis_following_sibling, + axis_namespace, + axis_parent, + axis_preceding, + axis_preceding_sibling, + axis_self + }; + + enum nodetest_t + { + nodetest_none, + nodetest_name, + nodetest_type_node, + nodetest_type_comment, + nodetest_type_pi, + nodetest_type_text, + nodetest_pi, + nodetest_all, + nodetest_all_in_namespace + }; + + enum predicate_t + { + predicate_default, + predicate_posinv, + predicate_constant, + predicate_constant_one + }; + + enum nodeset_eval_t + { + nodeset_eval_all, + nodeset_eval_any, + nodeset_eval_first + }; + + template struct axis_to_type + { + static const axis_t axis; + }; + + template const axis_t axis_to_type::axis = N; + + class xpath_ast_node + { + private: + // node type + char _type; + char _rettype; + + // for ast_step + char _axis; + + // for ast_step/ast_predicate/ast_filter + char _test; + + // tree node structure + xpath_ast_node* _left; + xpath_ast_node* _right; + xpath_ast_node* _next; + + union + { + // value for ast_string_constant + const char_t* string; + // value for ast_number_constant + double number; + // variable for ast_variable + xpath_variable* variable; + // node test for ast_step (node name/namespace/node type/pi target) + const char_t* nodetest; + // table for ast_opt_translate_table + const unsigned char* table; + } _data; + + xpath_ast_node(const xpath_ast_node&); + xpath_ast_node& operator=(const xpath_ast_node&); + + template static bool compare_eq(xpath_ast_node* lhs, xpath_ast_node* rhs, const xpath_context& c, const xpath_stack& stack, const Comp& comp) + { + xpath_value_type lt = lhs->rettype(), rt = rhs->rettype(); + + if (lt != xpath_type_node_set && rt != xpath_type_node_set) + { + if (lt == xpath_type_boolean || rt == xpath_type_boolean) + return comp(lhs->eval_boolean(c, stack), rhs->eval_boolean(c, stack)); + else if (lt == xpath_type_number || rt == xpath_type_number) + return comp(lhs->eval_number(c, stack), rhs->eval_number(c, stack)); + else if (lt == xpath_type_string || rt == xpath_type_string) + { + xpath_allocator_capture cr(stack.result); + + xpath_string ls = lhs->eval_string(c, stack); + xpath_string rs = rhs->eval_string(c, stack); + + return comp(ls, rs); + } + } + else if (lt == xpath_type_node_set && rt == xpath_type_node_set) + { + xpath_allocator_capture cr(stack.result); + + xpath_node_set_raw ls = lhs->eval_node_set(c, stack, nodeset_eval_all); + xpath_node_set_raw rs = rhs->eval_node_set(c, stack, nodeset_eval_all); + + for (const xpath_node* li = ls.begin(); li != ls.end(); ++li) + for (const xpath_node* ri = rs.begin(); ri != rs.end(); ++ri) + { + xpath_allocator_capture cri(stack.result); + + if (comp(string_value(*li, stack.result), string_value(*ri, stack.result))) + return true; + } + + return false; + } + else + { + if (lt == xpath_type_node_set) + { + swap(lhs, rhs); + swap(lt, rt); + } + + if (lt == xpath_type_boolean) + return comp(lhs->eval_boolean(c, stack), rhs->eval_boolean(c, stack)); + else if (lt == xpath_type_number) + { + xpath_allocator_capture cr(stack.result); + + double l = lhs->eval_number(c, stack); + xpath_node_set_raw rs = rhs->eval_node_set(c, stack, nodeset_eval_all); + + for (const xpath_node* ri = rs.begin(); ri != rs.end(); ++ri) + { + xpath_allocator_capture cri(stack.result); + + if (comp(l, convert_string_to_number(string_value(*ri, stack.result).c_str()))) + return true; + } + + return false; + } + else if (lt == xpath_type_string) + { + xpath_allocator_capture cr(stack.result); + + xpath_string l = lhs->eval_string(c, stack); + xpath_node_set_raw rs = rhs->eval_node_set(c, stack, nodeset_eval_all); + + for (const xpath_node* ri = rs.begin(); ri != rs.end(); ++ri) + { + xpath_allocator_capture cri(stack.result); + + if (comp(l, string_value(*ri, stack.result))) + return true; + } + + return false; + } + } + + assert(false && "Wrong types"); // unreachable + return false; + } + + static bool eval_once(xpath_node_set::type_t type, nodeset_eval_t eval) + { + return type == xpath_node_set::type_sorted ? eval != nodeset_eval_all : eval == nodeset_eval_any; + } + + template static bool compare_rel(xpath_ast_node* lhs, xpath_ast_node* rhs, const xpath_context& c, const xpath_stack& stack, const Comp& comp) + { + xpath_value_type lt = lhs->rettype(), rt = rhs->rettype(); + + if (lt != xpath_type_node_set && rt != xpath_type_node_set) + return comp(lhs->eval_number(c, stack), rhs->eval_number(c, stack)); + else if (lt == xpath_type_node_set && rt == xpath_type_node_set) + { + xpath_allocator_capture cr(stack.result); + + xpath_node_set_raw ls = lhs->eval_node_set(c, stack, nodeset_eval_all); + xpath_node_set_raw rs = rhs->eval_node_set(c, stack, nodeset_eval_all); + + for (const xpath_node* li = ls.begin(); li != ls.end(); ++li) + { + xpath_allocator_capture cri(stack.result); + + double l = convert_string_to_number(string_value(*li, stack.result).c_str()); + + for (const xpath_node* ri = rs.begin(); ri != rs.end(); ++ri) + { + xpath_allocator_capture crii(stack.result); + + if (comp(l, convert_string_to_number(string_value(*ri, stack.result).c_str()))) + return true; + } + } + + return false; + } + else if (lt != xpath_type_node_set && rt == xpath_type_node_set) + { + xpath_allocator_capture cr(stack.result); + + double l = lhs->eval_number(c, stack); + xpath_node_set_raw rs = rhs->eval_node_set(c, stack, nodeset_eval_all); + + for (const xpath_node* ri = rs.begin(); ri != rs.end(); ++ri) + { + xpath_allocator_capture cri(stack.result); + + if (comp(l, convert_string_to_number(string_value(*ri, stack.result).c_str()))) + return true; + } + + return false; + } + else if (lt == xpath_type_node_set && rt != xpath_type_node_set) + { + xpath_allocator_capture cr(stack.result); + + xpath_node_set_raw ls = lhs->eval_node_set(c, stack, nodeset_eval_all); + double r = rhs->eval_number(c, stack); + + for (const xpath_node* li = ls.begin(); li != ls.end(); ++li) + { + xpath_allocator_capture cri(stack.result); + + if (comp(convert_string_to_number(string_value(*li, stack.result).c_str()), r)) + return true; + } + + return false; + } + else + { + assert(false && "Wrong types"); // unreachable + return false; + } + } + + static void apply_predicate_boolean(xpath_node_set_raw& ns, size_t first, xpath_ast_node* expr, const xpath_stack& stack, bool once) + { + assert(ns.size() >= first); + assert(expr->rettype() != xpath_type_number); + + size_t i = 1; + size_t size = ns.size() - first; + + xpath_node* last = ns.begin() + first; + + // remove_if... or well, sort of + for (xpath_node* it = last; it != ns.end(); ++it, ++i) + { + xpath_context c(*it, i, size); + + if (expr->eval_boolean(c, stack)) + { + *last++ = *it; + + if (once) break; + } + } + + ns.truncate(last); + } + + static void apply_predicate_number(xpath_node_set_raw& ns, size_t first, xpath_ast_node* expr, const xpath_stack& stack, bool once) + { + assert(ns.size() >= first); + assert(expr->rettype() == xpath_type_number); + + size_t i = 1; + size_t size = ns.size() - first; + + xpath_node* last = ns.begin() + first; + + // remove_if... or well, sort of + for (xpath_node* it = last; it != ns.end(); ++it, ++i) + { + xpath_context c(*it, i, size); + + if (expr->eval_number(c, stack) == static_cast(i)) + { + *last++ = *it; + + if (once) break; + } + } + + ns.truncate(last); + } + + static void apply_predicate_number_const(xpath_node_set_raw& ns, size_t first, xpath_ast_node* expr, const xpath_stack& stack) + { + assert(ns.size() >= first); + assert(expr->rettype() == xpath_type_number); + + size_t size = ns.size() - first; + + xpath_node* last = ns.begin() + first; + + xpath_context c(xpath_node(), 1, size); + + double er = expr->eval_number(c, stack); + + if (er >= 1.0 && er <= static_cast(size)) + { + size_t eri = static_cast(er); + + if (er == static_cast(eri)) + { + xpath_node r = last[eri - 1]; + + *last++ = r; + } + } + + ns.truncate(last); + } + + void apply_predicate(xpath_node_set_raw& ns, size_t first, const xpath_stack& stack, bool once) + { + if (ns.size() == first) return; + + assert(_type == ast_filter || _type == ast_predicate); + + if (_test == predicate_constant || _test == predicate_constant_one) + apply_predicate_number_const(ns, first, _right, stack); + else if (_right->rettype() == xpath_type_number) + apply_predicate_number(ns, first, _right, stack, once); + else + apply_predicate_boolean(ns, first, _right, stack, once); + } + + void apply_predicates(xpath_node_set_raw& ns, size_t first, const xpath_stack& stack, nodeset_eval_t eval) + { + if (ns.size() == first) return; + + bool last_once = eval_once(ns.type(), eval); + + for (xpath_ast_node* pred = _right; pred; pred = pred->_next) + pred->apply_predicate(ns, first, stack, !pred->_next && last_once); + } + + bool step_push(xpath_node_set_raw& ns, xml_attribute_struct* a, xml_node_struct* parent, xpath_allocator* alloc) + { + assert(a); + + const char_t* name = a->name ? a->name + 0 : PUGIXML_TEXT(""); + + switch (_test) + { + case nodetest_name: + if (strequal(name, _data.nodetest) && is_xpath_attribute(name)) + { + ns.push_back(xpath_node(xml_attribute(a), xml_node(parent)), alloc); + return true; + } + break; + + case nodetest_type_node: + case nodetest_all: + if (is_xpath_attribute(name)) + { + ns.push_back(xpath_node(xml_attribute(a), xml_node(parent)), alloc); + return true; + } + break; + + case nodetest_all_in_namespace: + if (starts_with(name, _data.nodetest) && is_xpath_attribute(name)) + { + ns.push_back(xpath_node(xml_attribute(a), xml_node(parent)), alloc); + return true; + } + break; + + default: + ; + } + + return false; + } + + bool step_push(xpath_node_set_raw& ns, xml_node_struct* n, xpath_allocator* alloc) + { + assert(n); + + xml_node_type type = PUGI__NODETYPE(n); + + switch (_test) + { + case nodetest_name: + if (type == node_element && n->name && strequal(n->name, _data.nodetest)) + { + ns.push_back(xml_node(n), alloc); + return true; + } + break; + + case nodetest_type_node: + ns.push_back(xml_node(n), alloc); + return true; + + case nodetest_type_comment: + if (type == node_comment) + { + ns.push_back(xml_node(n), alloc); + return true; + } + break; + + case nodetest_type_text: + if (type == node_pcdata || type == node_cdata) + { + ns.push_back(xml_node(n), alloc); + return true; + } + break; + + case nodetest_type_pi: + if (type == node_pi) + { + ns.push_back(xml_node(n), alloc); + return true; + } + break; + + case nodetest_pi: + if (type == node_pi && n->name && strequal(n->name, _data.nodetest)) + { + ns.push_back(xml_node(n), alloc); + return true; + } + break; + + case nodetest_all: + if (type == node_element) + { + ns.push_back(xml_node(n), alloc); + return true; + } + break; + + case nodetest_all_in_namespace: + if (type == node_element && n->name && starts_with(n->name, _data.nodetest)) + { + ns.push_back(xml_node(n), alloc); + return true; + } + break; + + default: + assert(false && "Unknown axis"); // unreachable + } + + return false; + } + + template void step_fill(xpath_node_set_raw& ns, xml_node_struct* n, xpath_allocator* alloc, bool once, T) + { + const axis_t axis = T::axis; + + switch (axis) + { + case axis_attribute: + { + for (xml_attribute_struct* a = n->first_attribute; a; a = a->next_attribute) + if (step_push(ns, a, n, alloc) & once) + return; + + break; + } + + case axis_child: + { + for (xml_node_struct* c = n->first_child; c; c = c->next_sibling) + if (step_push(ns, c, alloc) & once) + return; + + break; + } + + case axis_descendant: + case axis_descendant_or_self: + { + if (axis == axis_descendant_or_self) + if (step_push(ns, n, alloc) & once) + return; + + xml_node_struct* cur = n->first_child; + + while (cur) + { + if (step_push(ns, cur, alloc) & once) + return; + + if (cur->first_child) + cur = cur->first_child; + else + { + while (!cur->next_sibling) + { + cur = cur->parent; + + if (cur == n) return; + } + + cur = cur->next_sibling; + } + } + + break; + } + + case axis_following_sibling: + { + for (xml_node_struct* c = n->next_sibling; c; c = c->next_sibling) + if (step_push(ns, c, alloc) & once) + return; + + break; + } + + case axis_preceding_sibling: + { + for (xml_node_struct* c = n->prev_sibling_c; c->next_sibling; c = c->prev_sibling_c) + if (step_push(ns, c, alloc) & once) + return; + + break; + } + + case axis_following: + { + xml_node_struct* cur = n; + + // exit from this node so that we don't include descendants + while (!cur->next_sibling) + { + cur = cur->parent; + + if (!cur) return; + } + + cur = cur->next_sibling; + + while (cur) + { + if (step_push(ns, cur, alloc) & once) + return; + + if (cur->first_child) + cur = cur->first_child; + else + { + while (!cur->next_sibling) + { + cur = cur->parent; + + if (!cur) return; + } + + cur = cur->next_sibling; + } + } + + break; + } + + case axis_preceding: + { + xml_node_struct* cur = n; + + // exit from this node so that we don't include descendants + while (!cur->prev_sibling_c->next_sibling) + { + cur = cur->parent; + + if (!cur) return; + } + + cur = cur->prev_sibling_c; + + while (cur) + { + if (cur->first_child) + cur = cur->first_child->prev_sibling_c; + else + { + // leaf node, can't be ancestor + if (step_push(ns, cur, alloc) & once) + return; + + while (!cur->prev_sibling_c->next_sibling) + { + cur = cur->parent; + + if (!cur) return; + + if (!node_is_ancestor(cur, n)) + if (step_push(ns, cur, alloc) & once) + return; + } + + cur = cur->prev_sibling_c; + } + } + + break; + } + + case axis_ancestor: + case axis_ancestor_or_self: + { + if (axis == axis_ancestor_or_self) + if (step_push(ns, n, alloc) & once) + return; + + xml_node_struct* cur = n->parent; + + while (cur) + { + if (step_push(ns, cur, alloc) & once) + return; + + cur = cur->parent; + } + + break; + } + + case axis_self: + { + step_push(ns, n, alloc); + + break; + } + + case axis_parent: + { + if (n->parent) + step_push(ns, n->parent, alloc); + + break; + } + + default: + assert(false && "Unimplemented axis"); // unreachable + } + } + + template void step_fill(xpath_node_set_raw& ns, xml_attribute_struct* a, xml_node_struct* p, xpath_allocator* alloc, bool once, T v) + { + const axis_t axis = T::axis; + + switch (axis) + { + case axis_ancestor: + case axis_ancestor_or_self: + { + if (axis == axis_ancestor_or_self && _test == nodetest_type_node) // reject attributes based on principal node type test + if (step_push(ns, a, p, alloc) & once) + return; + + xml_node_struct* cur = p; + + while (cur) + { + if (step_push(ns, cur, alloc) & once) + return; + + cur = cur->parent; + } + + break; + } + + case axis_descendant_or_self: + case axis_self: + { + if (_test == nodetest_type_node) // reject attributes based on principal node type test + step_push(ns, a, p, alloc); + + break; + } + + case axis_following: + { + xml_node_struct* cur = p; + + while (cur) + { + if (cur->first_child) + cur = cur->first_child; + else + { + while (!cur->next_sibling) + { + cur = cur->parent; + + if (!cur) return; + } + + cur = cur->next_sibling; + } + + if (step_push(ns, cur, alloc) & once) + return; + } + + break; + } + + case axis_parent: + { + step_push(ns, p, alloc); + + break; + } + + case axis_preceding: + { + // preceding:: axis does not include attribute nodes and attribute ancestors (they are the same as parent's ancestors), so we can reuse node preceding + step_fill(ns, p, alloc, once, v); + break; + } + + default: + assert(false && "Unimplemented axis"); // unreachable + } + } + + template void step_fill(xpath_node_set_raw& ns, const xpath_node& xn, xpath_allocator* alloc, bool once, T v) + { + const axis_t axis = T::axis; + const bool axis_has_attributes = (axis == axis_ancestor || axis == axis_ancestor_or_self || axis == axis_descendant_or_self || axis == axis_following || axis == axis_parent || axis == axis_preceding || axis == axis_self); + + if (xn.node()) + step_fill(ns, xn.node().internal_object(), alloc, once, v); + else if (axis_has_attributes && xn.attribute() && xn.parent()) + step_fill(ns, xn.attribute().internal_object(), xn.parent().internal_object(), alloc, once, v); + } + + template xpath_node_set_raw step_do(const xpath_context& c, const xpath_stack& stack, nodeset_eval_t eval, T v) + { + const axis_t axis = T::axis; + const bool axis_reverse = (axis == axis_ancestor || axis == axis_ancestor_or_self || axis == axis_preceding || axis == axis_preceding_sibling); + const xpath_node_set::type_t axis_type = axis_reverse ? xpath_node_set::type_sorted_reverse : xpath_node_set::type_sorted; + + bool once = + (axis == axis_attribute && _test == nodetest_name) || + (!_right && eval_once(axis_type, eval)) || + // coverity[mixed_enums] + (_right && !_right->_next && _right->_test == predicate_constant_one); + + xpath_node_set_raw ns; + ns.set_type(axis_type); + + if (_left) + { + xpath_node_set_raw s = _left->eval_node_set(c, stack, nodeset_eval_all); + + // self axis preserves the original order + if (axis == axis_self) ns.set_type(s.type()); + + for (const xpath_node* it = s.begin(); it != s.end(); ++it) + { + size_t size = ns.size(); + + // in general, all axes generate elements in a particular order, but there is no order guarantee if axis is applied to two nodes + if (axis != axis_self && size != 0) ns.set_type(xpath_node_set::type_unsorted); + + step_fill(ns, *it, stack.result, once, v); + if (_right) apply_predicates(ns, size, stack, eval); + } + } + else + { + step_fill(ns, c.n, stack.result, once, v); + if (_right) apply_predicates(ns, 0, stack, eval); + } + + // child, attribute and self axes always generate unique set of nodes + // for other axis, if the set stayed sorted, it stayed unique because the traversal algorithms do not visit the same node twice + if (axis != axis_child && axis != axis_attribute && axis != axis_self && ns.type() == xpath_node_set::type_unsorted) + ns.remove_duplicates(stack.temp); + + return ns; + } + + public: + xpath_ast_node(ast_type_t type, xpath_value_type rettype_, const char_t* value): + _type(static_cast(type)), _rettype(static_cast(rettype_)), _axis(0), _test(0), _left(0), _right(0), _next(0) + { + assert(type == ast_string_constant); + _data.string = value; + } + + xpath_ast_node(ast_type_t type, xpath_value_type rettype_, double value): + _type(static_cast(type)), _rettype(static_cast(rettype_)), _axis(0), _test(0), _left(0), _right(0), _next(0) + { + assert(type == ast_number_constant); + _data.number = value; + } + + xpath_ast_node(ast_type_t type, xpath_value_type rettype_, xpath_variable* value): + _type(static_cast(type)), _rettype(static_cast(rettype_)), _axis(0), _test(0), _left(0), _right(0), _next(0) + { + assert(type == ast_variable); + _data.variable = value; + } + + xpath_ast_node(ast_type_t type, xpath_value_type rettype_, xpath_ast_node* left = 0, xpath_ast_node* right = 0): + _type(static_cast(type)), _rettype(static_cast(rettype_)), _axis(0), _test(0), _left(left), _right(right), _next(0) + { + } + + xpath_ast_node(ast_type_t type, xpath_ast_node* left, axis_t axis, nodetest_t test, const char_t* contents): + _type(static_cast(type)), _rettype(xpath_type_node_set), _axis(static_cast(axis)), _test(static_cast(test)), _left(left), _right(0), _next(0) + { + assert(type == ast_step); + _data.nodetest = contents; + } + + xpath_ast_node(ast_type_t type, xpath_ast_node* left, xpath_ast_node* right, predicate_t test): + _type(static_cast(type)), _rettype(xpath_type_node_set), _axis(0), _test(static_cast(test)), _left(left), _right(right), _next(0) + { + assert(type == ast_filter || type == ast_predicate); + } + + void set_next(xpath_ast_node* value) + { + _next = value; + } + + void set_right(xpath_ast_node* value) + { + _right = value; + } + + bool eval_boolean(const xpath_context& c, const xpath_stack& stack) + { + switch (_type) + { + case ast_op_or: + return _left->eval_boolean(c, stack) || _right->eval_boolean(c, stack); + + case ast_op_and: + return _left->eval_boolean(c, stack) && _right->eval_boolean(c, stack); + + case ast_op_equal: + return compare_eq(_left, _right, c, stack, equal_to()); + + case ast_op_not_equal: + return compare_eq(_left, _right, c, stack, not_equal_to()); + + case ast_op_less: + return compare_rel(_left, _right, c, stack, less()); + + case ast_op_greater: + return compare_rel(_right, _left, c, stack, less()); + + case ast_op_less_or_equal: + return compare_rel(_left, _right, c, stack, less_equal()); + + case ast_op_greater_or_equal: + return compare_rel(_right, _left, c, stack, less_equal()); + + case ast_func_starts_with: + { + xpath_allocator_capture cr(stack.result); + + xpath_string lr = _left->eval_string(c, stack); + xpath_string rr = _right->eval_string(c, stack); + + return starts_with(lr.c_str(), rr.c_str()); + } + + case ast_func_contains: + { + xpath_allocator_capture cr(stack.result); + + xpath_string lr = _left->eval_string(c, stack); + xpath_string rr = _right->eval_string(c, stack); + + return find_substring(lr.c_str(), rr.c_str()) != 0; + } + + case ast_func_boolean: + return _left->eval_boolean(c, stack); + + case ast_func_not: + return !_left->eval_boolean(c, stack); + + case ast_func_true: + return true; + + case ast_func_false: + return false; + + case ast_func_lang: + { + if (c.n.attribute()) return false; + + xpath_allocator_capture cr(stack.result); + + xpath_string lang = _left->eval_string(c, stack); + + for (xml_node n = c.n.node(); n; n = n.parent()) + { + xml_attribute a = n.attribute(PUGIXML_TEXT("xml:lang")); + + if (a) + { + const char_t* value = a.value(); + + // strnicmp / strncasecmp is not portable + for (const char_t* lit = lang.c_str(); *lit; ++lit) + { + if (tolower_ascii(*lit) != tolower_ascii(*value)) return false; + ++value; + } + + return *value == 0 || *value == '-'; + } + } + + return false; + } + + case ast_opt_compare_attribute: + { + const char_t* value = (_right->_type == ast_string_constant) ? _right->_data.string : _right->_data.variable->get_string(); + + xml_attribute attr = c.n.node().attribute(_left->_data.nodetest); + + return attr && strequal(attr.value(), value) && is_xpath_attribute(attr.name()); + } + + case ast_variable: + { + assert(_rettype == _data.variable->type()); + + if (_rettype == xpath_type_boolean) + return _data.variable->get_boolean(); + + // variable needs to be converted to the correct type, this is handled by the fallthrough block below + break; + } + + default: + ; + } + + // none of the ast types that return the value directly matched, we need to perform type conversion + switch (_rettype) + { + case xpath_type_number: + return convert_number_to_boolean(eval_number(c, stack)); + + case xpath_type_string: + { + xpath_allocator_capture cr(stack.result); + + return !eval_string(c, stack).empty(); + } + + case xpath_type_node_set: + { + xpath_allocator_capture cr(stack.result); + + return !eval_node_set(c, stack, nodeset_eval_any).empty(); + } + + default: + assert(false && "Wrong expression for return type boolean"); // unreachable + return false; + } + } + + double eval_number(const xpath_context& c, const xpath_stack& stack) + { + switch (_type) + { + case ast_op_add: + return _left->eval_number(c, stack) + _right->eval_number(c, stack); + + case ast_op_subtract: + return _left->eval_number(c, stack) - _right->eval_number(c, stack); + + case ast_op_multiply: + return _left->eval_number(c, stack) * _right->eval_number(c, stack); + + case ast_op_divide: + return _left->eval_number(c, stack) / _right->eval_number(c, stack); + + case ast_op_mod: + return fmod(_left->eval_number(c, stack), _right->eval_number(c, stack)); + + case ast_op_negate: + return -_left->eval_number(c, stack); + + case ast_number_constant: + return _data.number; + + case ast_func_last: + return static_cast(c.size); + + case ast_func_position: + return static_cast(c.position); + + case ast_func_count: + { + xpath_allocator_capture cr(stack.result); + + return static_cast(_left->eval_node_set(c, stack, nodeset_eval_all).size()); + } + + case ast_func_string_length_0: + { + xpath_allocator_capture cr(stack.result); + + return static_cast(string_value(c.n, stack.result).length()); + } + + case ast_func_string_length_1: + { + xpath_allocator_capture cr(stack.result); + + return static_cast(_left->eval_string(c, stack).length()); + } + + case ast_func_number_0: + { + xpath_allocator_capture cr(stack.result); + + return convert_string_to_number(string_value(c.n, stack.result).c_str()); + } + + case ast_func_number_1: + return _left->eval_number(c, stack); + + case ast_func_sum: + { + xpath_allocator_capture cr(stack.result); + + double r = 0; + + xpath_node_set_raw ns = _left->eval_node_set(c, stack, nodeset_eval_all); + + for (const xpath_node* it = ns.begin(); it != ns.end(); ++it) + { + xpath_allocator_capture cri(stack.result); + + r += convert_string_to_number(string_value(*it, stack.result).c_str()); + } + + return r; + } + + case ast_func_floor: + { + double r = _left->eval_number(c, stack); + + return r == r ? floor(r) : r; + } + + case ast_func_ceiling: + { + double r = _left->eval_number(c, stack); + + return r == r ? ceil(r) : r; + } + + case ast_func_round: + return round_nearest_nzero(_left->eval_number(c, stack)); + + case ast_variable: + { + assert(_rettype == _data.variable->type()); + + if (_rettype == xpath_type_number) + return _data.variable->get_number(); + + // variable needs to be converted to the correct type, this is handled by the fallthrough block below + break; + } + + default: + ; + } + + // none of the ast types that return the value directly matched, we need to perform type conversion + switch (_rettype) + { + case xpath_type_boolean: + return eval_boolean(c, stack) ? 1 : 0; + + case xpath_type_string: + { + xpath_allocator_capture cr(stack.result); + + return convert_string_to_number(eval_string(c, stack).c_str()); + } + + case xpath_type_node_set: + { + xpath_allocator_capture cr(stack.result); + + return convert_string_to_number(eval_string(c, stack).c_str()); + } + + default: + assert(false && "Wrong expression for return type number"); // unreachable + return 0; + } + } + + xpath_string eval_string_concat(const xpath_context& c, const xpath_stack& stack) + { + assert(_type == ast_func_concat); + + xpath_allocator_capture ct(stack.temp); + + // count the string number + size_t count = 1; + for (xpath_ast_node* nc = _right; nc; nc = nc->_next) count++; + + // allocate a buffer for temporary string objects + xpath_string* buffer = static_cast(stack.temp->allocate(count * sizeof(xpath_string))); + if (!buffer) return xpath_string(); + + // evaluate all strings to temporary stack + xpath_stack swapped_stack = {stack.temp, stack.result}; + + buffer[0] = _left->eval_string(c, swapped_stack); + + size_t pos = 1; + for (xpath_ast_node* n = _right; n; n = n->_next, ++pos) buffer[pos] = n->eval_string(c, swapped_stack); + assert(pos == count); + + // get total length + size_t length = 0; + for (size_t i = 0; i < count; ++i) length += buffer[i].length(); + + // create final string + char_t* result = static_cast(stack.result->allocate((length + 1) * sizeof(char_t))); + if (!result) return xpath_string(); + + char_t* ri = result; + + for (size_t j = 0; j < count; ++j) + for (const char_t* bi = buffer[j].c_str(); *bi; ++bi) + *ri++ = *bi; + + *ri = 0; + + return xpath_string::from_heap_preallocated(result, ri); + } + + xpath_string eval_string(const xpath_context& c, const xpath_stack& stack) + { + switch (_type) + { + case ast_string_constant: + return xpath_string::from_const(_data.string); + + case ast_func_local_name_0: + { + xpath_node na = c.n; + + return xpath_string::from_const(local_name(na)); + } + + case ast_func_local_name_1: + { + xpath_allocator_capture cr(stack.result); + + xpath_node_set_raw ns = _left->eval_node_set(c, stack, nodeset_eval_first); + xpath_node na = ns.first(); + + return xpath_string::from_const(local_name(na)); + } + + case ast_func_name_0: + { + xpath_node na = c.n; + + return xpath_string::from_const(qualified_name(na)); + } + + case ast_func_name_1: + { + xpath_allocator_capture cr(stack.result); + + xpath_node_set_raw ns = _left->eval_node_set(c, stack, nodeset_eval_first); + xpath_node na = ns.first(); + + return xpath_string::from_const(qualified_name(na)); + } + + case ast_func_namespace_uri_0: + { + xpath_node na = c.n; + + return xpath_string::from_const(namespace_uri(na)); + } + + case ast_func_namespace_uri_1: + { + xpath_allocator_capture cr(stack.result); + + xpath_node_set_raw ns = _left->eval_node_set(c, stack, nodeset_eval_first); + xpath_node na = ns.first(); + + return xpath_string::from_const(namespace_uri(na)); + } + + case ast_func_string_0: + return string_value(c.n, stack.result); + + case ast_func_string_1: + return _left->eval_string(c, stack); + + case ast_func_concat: + return eval_string_concat(c, stack); + + case ast_func_substring_before: + { + xpath_allocator_capture cr(stack.temp); + + xpath_stack swapped_stack = {stack.temp, stack.result}; + + xpath_string s = _left->eval_string(c, swapped_stack); + xpath_string p = _right->eval_string(c, swapped_stack); + + const char_t* pos = find_substring(s.c_str(), p.c_str()); + + return pos ? xpath_string::from_heap(s.c_str(), pos, stack.result) : xpath_string(); + } + + case ast_func_substring_after: + { + xpath_allocator_capture cr(stack.temp); + + xpath_stack swapped_stack = {stack.temp, stack.result}; + + xpath_string s = _left->eval_string(c, swapped_stack); + xpath_string p = _right->eval_string(c, swapped_stack); + + const char_t* pos = find_substring(s.c_str(), p.c_str()); + if (!pos) return xpath_string(); + + const char_t* rbegin = pos + p.length(); + const char_t* rend = s.c_str() + s.length(); + + return s.uses_heap() ? xpath_string::from_heap(rbegin, rend, stack.result) : xpath_string::from_const(rbegin); + } + + case ast_func_substring_2: + { + xpath_allocator_capture cr(stack.temp); + + xpath_stack swapped_stack = {stack.temp, stack.result}; + + xpath_string s = _left->eval_string(c, swapped_stack); + size_t s_length = s.length(); + + double first = round_nearest(_right->eval_number(c, stack)); + + if (is_nan(first)) return xpath_string(); // NaN + else if (first >= static_cast(s_length + 1)) return xpath_string(); + + size_t pos = first < 1 ? 1 : static_cast(first); + assert(1 <= pos && pos <= s_length + 1); + + const char_t* rbegin = s.c_str() + (pos - 1); + const char_t* rend = s.c_str() + s.length(); + + return s.uses_heap() ? xpath_string::from_heap(rbegin, rend, stack.result) : xpath_string::from_const(rbegin); + } + + case ast_func_substring_3: + { + xpath_allocator_capture cr(stack.temp); + + xpath_stack swapped_stack = {stack.temp, stack.result}; + + xpath_string s = _left->eval_string(c, swapped_stack); + size_t s_length = s.length(); + + double first = round_nearest(_right->eval_number(c, stack)); + double last = first + round_nearest(_right->_next->eval_number(c, stack)); + + if (is_nan(first) || is_nan(last)) return xpath_string(); + else if (first >= static_cast(s_length + 1)) return xpath_string(); + else if (first >= last) return xpath_string(); + else if (last < 1) return xpath_string(); + + size_t pos = first < 1 ? 1 : static_cast(first); + size_t end = last >= static_cast(s_length + 1) ? s_length + 1 : static_cast(last); + + assert(1 <= pos && pos <= end && end <= s_length + 1); + const char_t* rbegin = s.c_str() + (pos - 1); + const char_t* rend = s.c_str() + (end - 1); + + return (end == s_length + 1 && !s.uses_heap()) ? xpath_string::from_const(rbegin) : xpath_string::from_heap(rbegin, rend, stack.result); + } + + case ast_func_normalize_space_0: + { + xpath_string s = string_value(c.n, stack.result); + + char_t* begin = s.data(stack.result); + if (!begin) return xpath_string(); + + char_t* end = normalize_space(begin); + + return xpath_string::from_heap_preallocated(begin, end); + } + + case ast_func_normalize_space_1: + { + xpath_string s = _left->eval_string(c, stack); + + char_t* begin = s.data(stack.result); + if (!begin) return xpath_string(); + + char_t* end = normalize_space(begin); + + return xpath_string::from_heap_preallocated(begin, end); + } + + case ast_func_translate: + { + xpath_allocator_capture cr(stack.temp); + + xpath_stack swapped_stack = {stack.temp, stack.result}; + + xpath_string s = _left->eval_string(c, stack); + xpath_string from = _right->eval_string(c, swapped_stack); + xpath_string to = _right->_next->eval_string(c, swapped_stack); + + char_t* begin = s.data(stack.result); + if (!begin) return xpath_string(); + + char_t* end = translate(begin, from.c_str(), to.c_str(), to.length()); + + return xpath_string::from_heap_preallocated(begin, end); + } + + case ast_opt_translate_table: + { + xpath_string s = _left->eval_string(c, stack); + + char_t* begin = s.data(stack.result); + if (!begin) return xpath_string(); + + char_t* end = translate_table(begin, _data.table); + + return xpath_string::from_heap_preallocated(begin, end); + } + + case ast_variable: + { + assert(_rettype == _data.variable->type()); + + if (_rettype == xpath_type_string) + return xpath_string::from_const(_data.variable->get_string()); + + // variable needs to be converted to the correct type, this is handled by the fallthrough block below + break; + } + + default: + ; + } + + // none of the ast types that return the value directly matched, we need to perform type conversion + switch (_rettype) + { + case xpath_type_boolean: + return xpath_string::from_const(eval_boolean(c, stack) ? PUGIXML_TEXT("true") : PUGIXML_TEXT("false")); + + case xpath_type_number: + return convert_number_to_string(eval_number(c, stack), stack.result); + + case xpath_type_node_set: + { + xpath_allocator_capture cr(stack.temp); + + xpath_stack swapped_stack = {stack.temp, stack.result}; + + xpath_node_set_raw ns = eval_node_set(c, swapped_stack, nodeset_eval_first); + return ns.empty() ? xpath_string() : string_value(ns.first(), stack.result); + } + + default: + assert(false && "Wrong expression for return type string"); // unreachable + return xpath_string(); + } + } + + xpath_node_set_raw eval_node_set(const xpath_context& c, const xpath_stack& stack, nodeset_eval_t eval) + { + switch (_type) + { + case ast_op_union: + { + xpath_allocator_capture cr(stack.temp); + + xpath_stack swapped_stack = {stack.temp, stack.result}; + + xpath_node_set_raw ls = _left->eval_node_set(c, stack, eval); + xpath_node_set_raw rs = _right->eval_node_set(c, swapped_stack, eval); + + // we can optimize merging two sorted sets, but this is a very rare operation, so don't bother + ls.set_type(xpath_node_set::type_unsorted); + + ls.append(rs.begin(), rs.end(), stack.result); + ls.remove_duplicates(stack.temp); + + return ls; + } + + case ast_filter: + { + xpath_node_set_raw set = _left->eval_node_set(c, stack, _test == predicate_constant_one ? nodeset_eval_first : nodeset_eval_all); + + // either expression is a number or it contains position() call; sort by document order + if (_test != predicate_posinv) set.sort_do(); + + bool once = eval_once(set.type(), eval); + + apply_predicate(set, 0, stack, once); + + return set; + } + + case ast_func_id: + return xpath_node_set_raw(); + + case ast_step: + { + switch (_axis) + { + case axis_ancestor: + return step_do(c, stack, eval, axis_to_type()); + + case axis_ancestor_or_self: + return step_do(c, stack, eval, axis_to_type()); + + case axis_attribute: + return step_do(c, stack, eval, axis_to_type()); + + case axis_child: + return step_do(c, stack, eval, axis_to_type()); + + case axis_descendant: + return step_do(c, stack, eval, axis_to_type()); + + case axis_descendant_or_self: + return step_do(c, stack, eval, axis_to_type()); + + case axis_following: + return step_do(c, stack, eval, axis_to_type()); + + case axis_following_sibling: + return step_do(c, stack, eval, axis_to_type()); + + case axis_namespace: + // namespaced axis is not supported + return xpath_node_set_raw(); + + case axis_parent: + return step_do(c, stack, eval, axis_to_type()); + + case axis_preceding: + return step_do(c, stack, eval, axis_to_type()); + + case axis_preceding_sibling: + return step_do(c, stack, eval, axis_to_type()); + + case axis_self: + return step_do(c, stack, eval, axis_to_type()); + + default: + assert(false && "Unknown axis"); // unreachable + return xpath_node_set_raw(); + } + } + + case ast_step_root: + { + assert(!_right); // root step can't have any predicates + + xpath_node_set_raw ns; + + ns.set_type(xpath_node_set::type_sorted); + + if (c.n.node()) ns.push_back(c.n.node().root(), stack.result); + else if (c.n.attribute()) ns.push_back(c.n.parent().root(), stack.result); + + return ns; + } + + case ast_variable: + { + assert(_rettype == _data.variable->type()); + + if (_rettype == xpath_type_node_set) + { + const xpath_node_set& s = _data.variable->get_node_set(); + + xpath_node_set_raw ns; + + ns.set_type(s.type()); + ns.append(s.begin(), s.end(), stack.result); + + return ns; + } + + // variable needs to be converted to the correct type, this is handled by the fallthrough block below + break; + } + + default: + ; + } + + // none of the ast types that return the value directly matched, but conversions to node set are invalid + assert(false && "Wrong expression for return type node set"); // unreachable + return xpath_node_set_raw(); + } + + void optimize(xpath_allocator* alloc) + { + if (_left) + _left->optimize(alloc); + + if (_right) + _right->optimize(alloc); + + if (_next) + _next->optimize(alloc); + + // coverity[var_deref_model] + optimize_self(alloc); + } + + void optimize_self(xpath_allocator* alloc) + { + // Rewrite [position()=expr] with [expr] + // Note that this step has to go before classification to recognize [position()=1] + if ((_type == ast_filter || _type == ast_predicate) && + _right && // workaround for clang static analyzer (_right is never null for ast_filter/ast_predicate) + _right->_type == ast_op_equal && _right->_left->_type == ast_func_position && _right->_right->_rettype == xpath_type_number) + { + _right = _right->_right; + } + + // Classify filter/predicate ops to perform various optimizations during evaluation + if ((_type == ast_filter || _type == ast_predicate) && _right) // workaround for clang static analyzer (_right is never null for ast_filter/ast_predicate) + { + assert(_test == predicate_default); + + if (_right->_type == ast_number_constant && _right->_data.number == 1.0) + _test = predicate_constant_one; + else if (_right->_rettype == xpath_type_number && (_right->_type == ast_number_constant || _right->_type == ast_variable || _right->_type == ast_func_last)) + _test = predicate_constant; + else if (_right->_rettype != xpath_type_number && _right->is_posinv_expr()) + _test = predicate_posinv; + } + + // Rewrite descendant-or-self::node()/child::foo with descendant::foo + // The former is a full form of //foo, the latter is much faster since it executes the node test immediately + // Do a similar kind of rewrite for self/descendant/descendant-or-self axes + // Note that we only rewrite positionally invariant steps (//foo[1] != /descendant::foo[1]) + if (_type == ast_step && (_axis == axis_child || _axis == axis_self || _axis == axis_descendant || _axis == axis_descendant_or_self) && + _left && _left->_type == ast_step && _left->_axis == axis_descendant_or_self && _left->_test == nodetest_type_node && !_left->_right && + is_posinv_step()) + { + if (_axis == axis_child || _axis == axis_descendant) + _axis = axis_descendant; + else + _axis = axis_descendant_or_self; + + _left = _left->_left; + } + + // Use optimized lookup table implementation for translate() with constant arguments + if (_type == ast_func_translate && + _right && // workaround for clang static analyzer (_right is never null for ast_func_translate) + _right->_type == ast_string_constant && _right->_next->_type == ast_string_constant) + { + unsigned char* table = translate_table_generate(alloc, _right->_data.string, _right->_next->_data.string); + + if (table) + { + _type = ast_opt_translate_table; + _data.table = table; + } + } + + // Use optimized path for @attr = 'value' or @attr = $value + if (_type == ast_op_equal && + _left && _right && // workaround for clang static analyzer and Coverity (_left and _right are never null for ast_op_equal) + // coverity[mixed_enums] + _left->_type == ast_step && _left->_axis == axis_attribute && _left->_test == nodetest_name && !_left->_left && !_left->_right && + (_right->_type == ast_string_constant || (_right->_type == ast_variable && _right->_rettype == xpath_type_string))) + { + _type = ast_opt_compare_attribute; + } + } + + bool is_posinv_expr() const + { + switch (_type) + { + case ast_func_position: + case ast_func_last: + return false; + + case ast_string_constant: + case ast_number_constant: + case ast_variable: + return true; + + case ast_step: + case ast_step_root: + return true; + + case ast_predicate: + case ast_filter: + return true; + + default: + if (_left && !_left->is_posinv_expr()) return false; + + for (xpath_ast_node* n = _right; n; n = n->_next) + if (!n->is_posinv_expr()) return false; + + return true; + } + } + + bool is_posinv_step() const + { + assert(_type == ast_step); + + for (xpath_ast_node* n = _right; n; n = n->_next) + { + assert(n->_type == ast_predicate); + + if (n->_test != predicate_posinv) + return false; + } + + return true; + } + + xpath_value_type rettype() const + { + return static_cast(_rettype); + } + }; + + static const size_t xpath_ast_depth_limit = + #ifdef PUGIXML_XPATH_DEPTH_LIMIT + PUGIXML_XPATH_DEPTH_LIMIT + #else + 1024 + #endif + ; + + struct xpath_parser + { + xpath_allocator* _alloc; + xpath_lexer _lexer; + + const char_t* _query; + xpath_variable_set* _variables; + + xpath_parse_result* _result; + + char_t _scratch[32]; + + size_t _depth; + + xpath_ast_node* error(const char* message) + { + _result->error = message; + _result->offset = _lexer.current_pos() - _query; + + return 0; + } + + xpath_ast_node* error_oom() + { + assert(_alloc->_error); + *_alloc->_error = true; + + return 0; + } + + xpath_ast_node* error_rec() + { + return error("Exceeded maximum allowed query depth"); + } + + void* alloc_node() + { + return _alloc->allocate(sizeof(xpath_ast_node)); + } + + xpath_ast_node* alloc_node(ast_type_t type, xpath_value_type rettype, const char_t* value) + { + void* memory = alloc_node(); + return memory ? new (memory) xpath_ast_node(type, rettype, value) : 0; + } + + xpath_ast_node* alloc_node(ast_type_t type, xpath_value_type rettype, double value) + { + void* memory = alloc_node(); + return memory ? new (memory) xpath_ast_node(type, rettype, value) : 0; + } + + xpath_ast_node* alloc_node(ast_type_t type, xpath_value_type rettype, xpath_variable* value) + { + void* memory = alloc_node(); + return memory ? new (memory) xpath_ast_node(type, rettype, value) : 0; + } + + xpath_ast_node* alloc_node(ast_type_t type, xpath_value_type rettype, xpath_ast_node* left = 0, xpath_ast_node* right = 0) + { + void* memory = alloc_node(); + return memory ? new (memory) xpath_ast_node(type, rettype, left, right) : 0; + } + + xpath_ast_node* alloc_node(ast_type_t type, xpath_ast_node* left, axis_t axis, nodetest_t test, const char_t* contents) + { + void* memory = alloc_node(); + return memory ? new (memory) xpath_ast_node(type, left, axis, test, contents) : 0; + } + + xpath_ast_node* alloc_node(ast_type_t type, xpath_ast_node* left, xpath_ast_node* right, predicate_t test) + { + void* memory = alloc_node(); + return memory ? new (memory) xpath_ast_node(type, left, right, test) : 0; + } + + const char_t* alloc_string(const xpath_lexer_string& value) + { + if (!value.begin) + return PUGIXML_TEXT(""); + + size_t length = static_cast(value.end - value.begin); + + char_t* c = static_cast(_alloc->allocate((length + 1) * sizeof(char_t))); + if (!c) return 0; + + memcpy(c, value.begin, length * sizeof(char_t)); + c[length] = 0; + + return c; + } + + xpath_ast_node* parse_function(const xpath_lexer_string& name, size_t argc, xpath_ast_node* args[2]) + { + switch (name.begin[0]) + { + case 'b': + if (name == PUGIXML_TEXT("boolean") && argc == 1) + return alloc_node(ast_func_boolean, xpath_type_boolean, args[0]); + + break; + + case 'c': + if (name == PUGIXML_TEXT("count") && argc == 1) + { + if (args[0]->rettype() != xpath_type_node_set) return error("Function has to be applied to node set"); + return alloc_node(ast_func_count, xpath_type_number, args[0]); + } + else if (name == PUGIXML_TEXT("contains") && argc == 2) + return alloc_node(ast_func_contains, xpath_type_boolean, args[0], args[1]); + else if (name == PUGIXML_TEXT("concat") && argc >= 2) + return alloc_node(ast_func_concat, xpath_type_string, args[0], args[1]); + else if (name == PUGIXML_TEXT("ceiling") && argc == 1) + return alloc_node(ast_func_ceiling, xpath_type_number, args[0]); + + break; + + case 'f': + if (name == PUGIXML_TEXT("false") && argc == 0) + return alloc_node(ast_func_false, xpath_type_boolean); + else if (name == PUGIXML_TEXT("floor") && argc == 1) + return alloc_node(ast_func_floor, xpath_type_number, args[0]); + + break; + + case 'i': + if (name == PUGIXML_TEXT("id") && argc == 1) + return alloc_node(ast_func_id, xpath_type_node_set, args[0]); + + break; + + case 'l': + if (name == PUGIXML_TEXT("last") && argc == 0) + return alloc_node(ast_func_last, xpath_type_number); + else if (name == PUGIXML_TEXT("lang") && argc == 1) + return alloc_node(ast_func_lang, xpath_type_boolean, args[0]); + else if (name == PUGIXML_TEXT("local-name") && argc <= 1) + { + if (argc == 1 && args[0]->rettype() != xpath_type_node_set) return error("Function has to be applied to node set"); + return alloc_node(argc == 0 ? ast_func_local_name_0 : ast_func_local_name_1, xpath_type_string, args[0]); + } + + break; + + case 'n': + if (name == PUGIXML_TEXT("name") && argc <= 1) + { + if (argc == 1 && args[0]->rettype() != xpath_type_node_set) return error("Function has to be applied to node set"); + return alloc_node(argc == 0 ? ast_func_name_0 : ast_func_name_1, xpath_type_string, args[0]); + } + else if (name == PUGIXML_TEXT("namespace-uri") && argc <= 1) + { + if (argc == 1 && args[0]->rettype() != xpath_type_node_set) return error("Function has to be applied to node set"); + return alloc_node(argc == 0 ? ast_func_namespace_uri_0 : ast_func_namespace_uri_1, xpath_type_string, args[0]); + } + else if (name == PUGIXML_TEXT("normalize-space") && argc <= 1) + return alloc_node(argc == 0 ? ast_func_normalize_space_0 : ast_func_normalize_space_1, xpath_type_string, args[0], args[1]); + else if (name == PUGIXML_TEXT("not") && argc == 1) + return alloc_node(ast_func_not, xpath_type_boolean, args[0]); + else if (name == PUGIXML_TEXT("number") && argc <= 1) + return alloc_node(argc == 0 ? ast_func_number_0 : ast_func_number_1, xpath_type_number, args[0]); + + break; + + case 'p': + if (name == PUGIXML_TEXT("position") && argc == 0) + return alloc_node(ast_func_position, xpath_type_number); + + break; + + case 'r': + if (name == PUGIXML_TEXT("round") && argc == 1) + return alloc_node(ast_func_round, xpath_type_number, args[0]); + + break; + + case 's': + if (name == PUGIXML_TEXT("string") && argc <= 1) + return alloc_node(argc == 0 ? ast_func_string_0 : ast_func_string_1, xpath_type_string, args[0]); + else if (name == PUGIXML_TEXT("string-length") && argc <= 1) + return alloc_node(argc == 0 ? ast_func_string_length_0 : ast_func_string_length_1, xpath_type_number, args[0]); + else if (name == PUGIXML_TEXT("starts-with") && argc == 2) + return alloc_node(ast_func_starts_with, xpath_type_boolean, args[0], args[1]); + else if (name == PUGIXML_TEXT("substring-before") && argc == 2) + return alloc_node(ast_func_substring_before, xpath_type_string, args[0], args[1]); + else if (name == PUGIXML_TEXT("substring-after") && argc == 2) + return alloc_node(ast_func_substring_after, xpath_type_string, args[0], args[1]); + else if (name == PUGIXML_TEXT("substring") && (argc == 2 || argc == 3)) + return alloc_node(argc == 2 ? ast_func_substring_2 : ast_func_substring_3, xpath_type_string, args[0], args[1]); + else if (name == PUGIXML_TEXT("sum") && argc == 1) + { + if (args[0]->rettype() != xpath_type_node_set) return error("Function has to be applied to node set"); + return alloc_node(ast_func_sum, xpath_type_number, args[0]); + } + + break; + + case 't': + if (name == PUGIXML_TEXT("translate") && argc == 3) + return alloc_node(ast_func_translate, xpath_type_string, args[0], args[1]); + else if (name == PUGIXML_TEXT("true") && argc == 0) + return alloc_node(ast_func_true, xpath_type_boolean); + + break; + + default: + break; + } + + return error("Unrecognized function or wrong parameter count"); + } + + axis_t parse_axis_name(const xpath_lexer_string& name, bool& specified) + { + specified = true; + + switch (name.begin[0]) + { + case 'a': + if (name == PUGIXML_TEXT("ancestor")) + return axis_ancestor; + else if (name == PUGIXML_TEXT("ancestor-or-self")) + return axis_ancestor_or_self; + else if (name == PUGIXML_TEXT("attribute")) + return axis_attribute; + + break; + + case 'c': + if (name == PUGIXML_TEXT("child")) + return axis_child; + + break; + + case 'd': + if (name == PUGIXML_TEXT("descendant")) + return axis_descendant; + else if (name == PUGIXML_TEXT("descendant-or-self")) + return axis_descendant_or_self; + + break; + + case 'f': + if (name == PUGIXML_TEXT("following")) + return axis_following; + else if (name == PUGIXML_TEXT("following-sibling")) + return axis_following_sibling; + + break; + + case 'n': + if (name == PUGIXML_TEXT("namespace")) + return axis_namespace; + + break; + + case 'p': + if (name == PUGIXML_TEXT("parent")) + return axis_parent; + else if (name == PUGIXML_TEXT("preceding")) + return axis_preceding; + else if (name == PUGIXML_TEXT("preceding-sibling")) + return axis_preceding_sibling; + + break; + + case 's': + if (name == PUGIXML_TEXT("self")) + return axis_self; + + break; + + default: + break; + } + + specified = false; + return axis_child; + } + + nodetest_t parse_node_test_type(const xpath_lexer_string& name) + { + switch (name.begin[0]) + { + case 'c': + if (name == PUGIXML_TEXT("comment")) + return nodetest_type_comment; + + break; + + case 'n': + if (name == PUGIXML_TEXT("node")) + return nodetest_type_node; + + break; + + case 'p': + if (name == PUGIXML_TEXT("processing-instruction")) + return nodetest_type_pi; + + break; + + case 't': + if (name == PUGIXML_TEXT("text")) + return nodetest_type_text; + + break; + + default: + break; + } + + return nodetest_none; + } + + // PrimaryExpr ::= VariableReference | '(' Expr ')' | Literal | Number | FunctionCall + xpath_ast_node* parse_primary_expression() + { + switch (_lexer.current()) + { + case lex_var_ref: + { + xpath_lexer_string name = _lexer.contents(); + + if (!_variables) + return error("Unknown variable: variable set is not provided"); + + xpath_variable* var = 0; + if (!get_variable_scratch(_scratch, _variables, name.begin, name.end, &var)) + return error_oom(); + + if (!var) + return error("Unknown variable: variable set does not contain the given name"); + + _lexer.next(); + + return alloc_node(ast_variable, var->type(), var); + } + + case lex_open_brace: + { + _lexer.next(); + + xpath_ast_node* n = parse_expression(); + if (!n) return 0; + + if (_lexer.current() != lex_close_brace) + return error("Expected ')' to match an opening '('"); + + _lexer.next(); + + return n; + } + + case lex_quoted_string: + { + const char_t* value = alloc_string(_lexer.contents()); + if (!value) return 0; + + _lexer.next(); + + return alloc_node(ast_string_constant, xpath_type_string, value); + } + + case lex_number: + { + double value = 0; + + if (!convert_string_to_number_scratch(_scratch, _lexer.contents().begin, _lexer.contents().end, &value)) + return error_oom(); + + _lexer.next(); + + return alloc_node(ast_number_constant, xpath_type_number, value); + } + + case lex_string: + { + xpath_ast_node* args[2] = {0}; + size_t argc = 0; + + xpath_lexer_string function = _lexer.contents(); + _lexer.next(); + + xpath_ast_node* last_arg = 0; + + if (_lexer.current() != lex_open_brace) + return error("Unrecognized function call"); + _lexer.next(); + + size_t old_depth = _depth; + + while (_lexer.current() != lex_close_brace) + { + if (argc > 0) + { + if (_lexer.current() != lex_comma) + return error("No comma between function arguments"); + _lexer.next(); + } + + if (++_depth > xpath_ast_depth_limit) + return error_rec(); + + xpath_ast_node* n = parse_expression(); + if (!n) return 0; + + if (argc < 2) args[argc] = n; + else last_arg->set_next(n); + + argc++; + last_arg = n; + } + + _lexer.next(); + + _depth = old_depth; + + return parse_function(function, argc, args); + } + + default: + return error("Unrecognizable primary expression"); + } + } + + // FilterExpr ::= PrimaryExpr | FilterExpr Predicate + // Predicate ::= '[' PredicateExpr ']' + // PredicateExpr ::= Expr + xpath_ast_node* parse_filter_expression() + { + xpath_ast_node* n = parse_primary_expression(); + if (!n) return 0; + + size_t old_depth = _depth; + + while (_lexer.current() == lex_open_square_brace) + { + _lexer.next(); + + if (++_depth > xpath_ast_depth_limit) + return error_rec(); + + if (n->rettype() != xpath_type_node_set) + return error("Predicate has to be applied to node set"); + + xpath_ast_node* expr = parse_expression(); + if (!expr) return 0; + + n = alloc_node(ast_filter, n, expr, predicate_default); + if (!n) return 0; + + if (_lexer.current() != lex_close_square_brace) + return error("Expected ']' to match an opening '['"); + + _lexer.next(); + } + + _depth = old_depth; + + return n; + } + + // Step ::= AxisSpecifier NodeTest Predicate* | AbbreviatedStep + // AxisSpecifier ::= AxisName '::' | '@'? + // NodeTest ::= NameTest | NodeType '(' ')' | 'processing-instruction' '(' Literal ')' + // NameTest ::= '*' | NCName ':' '*' | QName + // AbbreviatedStep ::= '.' | '..' + xpath_ast_node* parse_step(xpath_ast_node* set) + { + if (set && set->rettype() != xpath_type_node_set) + return error("Step has to be applied to node set"); + + bool axis_specified = false; + axis_t axis = axis_child; // implied child axis + + if (_lexer.current() == lex_axis_attribute) + { + axis = axis_attribute; + axis_specified = true; + + _lexer.next(); + } + else if (_lexer.current() == lex_dot) + { + _lexer.next(); + + if (_lexer.current() == lex_open_square_brace) + return error("Predicates are not allowed after an abbreviated step"); + + return alloc_node(ast_step, set, axis_self, nodetest_type_node, 0); + } + else if (_lexer.current() == lex_double_dot) + { + _lexer.next(); + + if (_lexer.current() == lex_open_square_brace) + return error("Predicates are not allowed after an abbreviated step"); + + return alloc_node(ast_step, set, axis_parent, nodetest_type_node, 0); + } + + nodetest_t nt_type = nodetest_none; + xpath_lexer_string nt_name; + + if (_lexer.current() == lex_string) + { + // node name test + nt_name = _lexer.contents(); + _lexer.next(); + + // was it an axis name? + if (_lexer.current() == lex_double_colon) + { + // parse axis name + if (axis_specified) + return error("Two axis specifiers in one step"); + + axis = parse_axis_name(nt_name, axis_specified); + + if (!axis_specified) + return error("Unknown axis"); + + // read actual node test + _lexer.next(); + + if (_lexer.current() == lex_multiply) + { + nt_type = nodetest_all; + nt_name = xpath_lexer_string(); + _lexer.next(); + } + else if (_lexer.current() == lex_string) + { + nt_name = _lexer.contents(); + _lexer.next(); + } + else + { + return error("Unrecognized node test"); + } + } + + if (nt_type == nodetest_none) + { + // node type test or processing-instruction + if (_lexer.current() == lex_open_brace) + { + _lexer.next(); + + if (_lexer.current() == lex_close_brace) + { + _lexer.next(); + + nt_type = parse_node_test_type(nt_name); + + if (nt_type == nodetest_none) + return error("Unrecognized node type"); + + nt_name = xpath_lexer_string(); + } + else if (nt_name == PUGIXML_TEXT("processing-instruction")) + { + if (_lexer.current() != lex_quoted_string) + return error("Only literals are allowed as arguments to processing-instruction()"); + + nt_type = nodetest_pi; + nt_name = _lexer.contents(); + _lexer.next(); + + if (_lexer.current() != lex_close_brace) + return error("Unmatched brace near processing-instruction()"); + _lexer.next(); + } + else + { + return error("Unmatched brace near node type test"); + } + } + // QName or NCName:* + else + { + if (nt_name.end - nt_name.begin > 2 && nt_name.end[-2] == ':' && nt_name.end[-1] == '*') // NCName:* + { + nt_name.end--; // erase * + + nt_type = nodetest_all_in_namespace; + } + else + { + nt_type = nodetest_name; + } + } + } + } + else if (_lexer.current() == lex_multiply) + { + nt_type = nodetest_all; + _lexer.next(); + } + else + { + return error("Unrecognized node test"); + } + + const char_t* nt_name_copy = alloc_string(nt_name); + if (!nt_name_copy) return 0; + + xpath_ast_node* n = alloc_node(ast_step, set, axis, nt_type, nt_name_copy); + if (!n) return 0; + + size_t old_depth = _depth; + + xpath_ast_node* last = 0; + + while (_lexer.current() == lex_open_square_brace) + { + _lexer.next(); + + if (++_depth > xpath_ast_depth_limit) + return error_rec(); + + xpath_ast_node* expr = parse_expression(); + if (!expr) return 0; + + xpath_ast_node* pred = alloc_node(ast_predicate, 0, expr, predicate_default); + if (!pred) return 0; + + if (_lexer.current() != lex_close_square_brace) + return error("Expected ']' to match an opening '['"); + _lexer.next(); + + if (last) last->set_next(pred); + else n->set_right(pred); + + last = pred; + } + + _depth = old_depth; + + return n; + } + + // RelativeLocationPath ::= Step | RelativeLocationPath '/' Step | RelativeLocationPath '//' Step + xpath_ast_node* parse_relative_location_path(xpath_ast_node* set) + { + xpath_ast_node* n = parse_step(set); + if (!n) return 0; + + size_t old_depth = _depth; + + while (_lexer.current() == lex_slash || _lexer.current() == lex_double_slash) + { + lexeme_t l = _lexer.current(); + _lexer.next(); + + if (l == lex_double_slash) + { + n = alloc_node(ast_step, n, axis_descendant_or_self, nodetest_type_node, 0); + if (!n) return 0; + + ++_depth; + } + + if (++_depth > xpath_ast_depth_limit) + return error_rec(); + + n = parse_step(n); + if (!n) return 0; + } + + _depth = old_depth; + + return n; + } + + // LocationPath ::= RelativeLocationPath | AbsoluteLocationPath + // AbsoluteLocationPath ::= '/' RelativeLocationPath? | '//' RelativeLocationPath + xpath_ast_node* parse_location_path() + { + if (_lexer.current() == lex_slash) + { + _lexer.next(); + + xpath_ast_node* n = alloc_node(ast_step_root, xpath_type_node_set); + if (!n) return 0; + + // relative location path can start from axis_attribute, dot, double_dot, multiply and string lexemes; any other lexeme means standalone root path + lexeme_t l = _lexer.current(); + + if (l == lex_string || l == lex_axis_attribute || l == lex_dot || l == lex_double_dot || l == lex_multiply) + return parse_relative_location_path(n); + else + return n; + } + else if (_lexer.current() == lex_double_slash) + { + _lexer.next(); + + xpath_ast_node* n = alloc_node(ast_step_root, xpath_type_node_set); + if (!n) return 0; + + n = alloc_node(ast_step, n, axis_descendant_or_self, nodetest_type_node, 0); + if (!n) return 0; + + return parse_relative_location_path(n); + } + + // else clause moved outside of if because of bogus warning 'control may reach end of non-void function being inlined' in gcc 4.0.1 + return parse_relative_location_path(0); + } + + // PathExpr ::= LocationPath + // | FilterExpr + // | FilterExpr '/' RelativeLocationPath + // | FilterExpr '//' RelativeLocationPath + // UnionExpr ::= PathExpr | UnionExpr '|' PathExpr + // UnaryExpr ::= UnionExpr | '-' UnaryExpr + xpath_ast_node* parse_path_or_unary_expression() + { + // Clarification. + // PathExpr begins with either LocationPath or FilterExpr. + // FilterExpr begins with PrimaryExpr + // PrimaryExpr begins with '$' in case of it being a variable reference, + // '(' in case of it being an expression, string literal, number constant or + // function call. + if (_lexer.current() == lex_var_ref || _lexer.current() == lex_open_brace || + _lexer.current() == lex_quoted_string || _lexer.current() == lex_number || + _lexer.current() == lex_string) + { + if (_lexer.current() == lex_string) + { + // This is either a function call, or not - if not, we shall proceed with location path + const char_t* state = _lexer.state(); + + while (PUGI__IS_CHARTYPE(*state, ct_space)) ++state; + + if (*state != '(') + return parse_location_path(); + + // This looks like a function call; however this still can be a node-test. Check it. + if (parse_node_test_type(_lexer.contents()) != nodetest_none) + return parse_location_path(); + } + + xpath_ast_node* n = parse_filter_expression(); + if (!n) return 0; + + if (_lexer.current() == lex_slash || _lexer.current() == lex_double_slash) + { + lexeme_t l = _lexer.current(); + _lexer.next(); + + if (l == lex_double_slash) + { + if (n->rettype() != xpath_type_node_set) + return error("Step has to be applied to node set"); + + n = alloc_node(ast_step, n, axis_descendant_or_self, nodetest_type_node, 0); + if (!n) return 0; + } + + // select from location path + return parse_relative_location_path(n); + } + + return n; + } + else if (_lexer.current() == lex_minus) + { + _lexer.next(); + + // precedence 7+ - only parses union expressions + xpath_ast_node* n = parse_expression(7); + if (!n) return 0; + + return alloc_node(ast_op_negate, xpath_type_number, n); + } + else + { + return parse_location_path(); + } + } + + struct binary_op_t + { + ast_type_t asttype; + xpath_value_type rettype; + int precedence; + + binary_op_t(): asttype(ast_unknown), rettype(xpath_type_none), precedence(0) + { + } + + binary_op_t(ast_type_t asttype_, xpath_value_type rettype_, int precedence_): asttype(asttype_), rettype(rettype_), precedence(precedence_) + { + } + + static binary_op_t parse(xpath_lexer& lexer) + { + switch (lexer.current()) + { + case lex_string: + if (lexer.contents() == PUGIXML_TEXT("or")) + return binary_op_t(ast_op_or, xpath_type_boolean, 1); + else if (lexer.contents() == PUGIXML_TEXT("and")) + return binary_op_t(ast_op_and, xpath_type_boolean, 2); + else if (lexer.contents() == PUGIXML_TEXT("div")) + return binary_op_t(ast_op_divide, xpath_type_number, 6); + else if (lexer.contents() == PUGIXML_TEXT("mod")) + return binary_op_t(ast_op_mod, xpath_type_number, 6); + else + return binary_op_t(); + + case lex_equal: + return binary_op_t(ast_op_equal, xpath_type_boolean, 3); + + case lex_not_equal: + return binary_op_t(ast_op_not_equal, xpath_type_boolean, 3); + + case lex_less: + return binary_op_t(ast_op_less, xpath_type_boolean, 4); + + case lex_greater: + return binary_op_t(ast_op_greater, xpath_type_boolean, 4); + + case lex_less_or_equal: + return binary_op_t(ast_op_less_or_equal, xpath_type_boolean, 4); + + case lex_greater_or_equal: + return binary_op_t(ast_op_greater_or_equal, xpath_type_boolean, 4); + + case lex_plus: + return binary_op_t(ast_op_add, xpath_type_number, 5); + + case lex_minus: + return binary_op_t(ast_op_subtract, xpath_type_number, 5); + + case lex_multiply: + return binary_op_t(ast_op_multiply, xpath_type_number, 6); + + case lex_union: + return binary_op_t(ast_op_union, xpath_type_node_set, 7); + + default: + return binary_op_t(); + } + } + }; + + xpath_ast_node* parse_expression_rec(xpath_ast_node* lhs, int limit) + { + binary_op_t op = binary_op_t::parse(_lexer); + + while (op.asttype != ast_unknown && op.precedence >= limit) + { + _lexer.next(); + + if (++_depth > xpath_ast_depth_limit) + return error_rec(); + + xpath_ast_node* rhs = parse_path_or_unary_expression(); + if (!rhs) return 0; + + binary_op_t nextop = binary_op_t::parse(_lexer); + + while (nextop.asttype != ast_unknown && nextop.precedence > op.precedence) + { + rhs = parse_expression_rec(rhs, nextop.precedence); + if (!rhs) return 0; + + nextop = binary_op_t::parse(_lexer); + } + + if (op.asttype == ast_op_union && (lhs->rettype() != xpath_type_node_set || rhs->rettype() != xpath_type_node_set)) + return error("Union operator has to be applied to node sets"); + + lhs = alloc_node(op.asttype, op.rettype, lhs, rhs); + if (!lhs) return 0; + + op = binary_op_t::parse(_lexer); + } + + return lhs; + } + + // Expr ::= OrExpr + // OrExpr ::= AndExpr | OrExpr 'or' AndExpr + // AndExpr ::= EqualityExpr | AndExpr 'and' EqualityExpr + // EqualityExpr ::= RelationalExpr + // | EqualityExpr '=' RelationalExpr + // | EqualityExpr '!=' RelationalExpr + // RelationalExpr ::= AdditiveExpr + // | RelationalExpr '<' AdditiveExpr + // | RelationalExpr '>' AdditiveExpr + // | RelationalExpr '<=' AdditiveExpr + // | RelationalExpr '>=' AdditiveExpr + // AdditiveExpr ::= MultiplicativeExpr + // | AdditiveExpr '+' MultiplicativeExpr + // | AdditiveExpr '-' MultiplicativeExpr + // MultiplicativeExpr ::= UnaryExpr + // | MultiplicativeExpr '*' UnaryExpr + // | MultiplicativeExpr 'div' UnaryExpr + // | MultiplicativeExpr 'mod' UnaryExpr + xpath_ast_node* parse_expression(int limit = 0) + { + size_t old_depth = _depth; + + if (++_depth > xpath_ast_depth_limit) + return error_rec(); + + xpath_ast_node* n = parse_path_or_unary_expression(); + if (!n) return 0; + + n = parse_expression_rec(n, limit); + + _depth = old_depth; + + return n; + } + + xpath_parser(const char_t* query, xpath_variable_set* variables, xpath_allocator* alloc, xpath_parse_result* result): _alloc(alloc), _lexer(query), _query(query), _variables(variables), _result(result), _depth(0) + { + } + + xpath_ast_node* parse() + { + xpath_ast_node* n = parse_expression(); + if (!n) return 0; + + assert(_depth == 0); + + // check if there are unparsed tokens left + if (_lexer.current() != lex_eof) + return error("Incorrect query"); + + return n; + } + + static xpath_ast_node* parse(const char_t* query, xpath_variable_set* variables, xpath_allocator* alloc, xpath_parse_result* result) + { + xpath_parser parser(query, variables, alloc, result); + + return parser.parse(); + } + }; + + struct xpath_query_impl + { + static xpath_query_impl* create() + { + void* memory = xml_memory::allocate(sizeof(xpath_query_impl)); + if (!memory) return 0; + + return new (memory) xpath_query_impl(); + } + + static void destroy(xpath_query_impl* impl) + { + // free all allocated pages + impl->alloc.release(); + + // free allocator memory (with the first page) + xml_memory::deallocate(impl); + } + + xpath_query_impl(): root(0), alloc(&block, &oom), oom(false) + { + block.next = 0; + block.capacity = sizeof(block.data); + } + + xpath_ast_node* root; + xpath_allocator alloc; + xpath_memory_block block; + bool oom; + }; + + PUGI__FN impl::xpath_ast_node* evaluate_node_set_prepare(xpath_query_impl* impl) + { + if (!impl) return 0; + + if (impl->root->rettype() != xpath_type_node_set) + { + #ifdef PUGIXML_NO_EXCEPTIONS + return 0; + #else + xpath_parse_result res; + res.error = "Expression does not evaluate to node set"; + + throw xpath_exception(res); + #endif + } + + return impl->root; + } +PUGI__NS_END + +OIIO_NAMESPACE_3_1_BEGIN namespace pugi +{ +#ifndef PUGIXML_NO_EXCEPTIONS + PUGI__FN xpath_exception::xpath_exception(const xpath_parse_result& result_): _result(result_) + { + assert(_result.error); + } + + PUGI__FN const char* xpath_exception::what() const throw() + { + return _result.error; + } + + PUGI__FN const xpath_parse_result& xpath_exception::result() const + { + return _result; + } +#endif + + PUGI__FN xpath_node::xpath_node() + { + } + + PUGI__FN xpath_node::xpath_node(const xml_node& node_): _node(node_) + { + } + + PUGI__FN xpath_node::xpath_node(const xml_attribute& attribute_, const xml_node& parent_): _node(attribute_ ? parent_ : xml_node()), _attribute(attribute_) + { + } + + PUGI__FN xml_node xpath_node::node() const + { + return _attribute ? xml_node() : _node; + } + + PUGI__FN xml_attribute xpath_node::attribute() const + { + return _attribute; + } + + PUGI__FN xml_node xpath_node::parent() const + { + return _attribute ? _node : _node.parent(); + } + + PUGI__FN static void unspecified_bool_xpath_node(xpath_node***) + { + } + + PUGI__FN xpath_node::operator xpath_node::unspecified_bool_type() const + { + return (_node || _attribute) ? unspecified_bool_xpath_node : 0; + } + + PUGI__FN bool xpath_node::operator!() const + { + return !(_node || _attribute); + } + + PUGI__FN bool xpath_node::operator==(const xpath_node& n) const + { + return _node == n._node && _attribute == n._attribute; + } + + PUGI__FN bool xpath_node::operator!=(const xpath_node& n) const + { + return _node != n._node || _attribute != n._attribute; + } + +#ifdef __BORLANDC__ + PUGI__FN bool operator&&(const xpath_node& lhs, bool rhs) + { + return (bool)lhs && rhs; + } + + PUGI__FN bool operator||(const xpath_node& lhs, bool rhs) + { + return (bool)lhs || rhs; + } +#endif + + PUGI__FN void xpath_node_set::_assign(const_iterator begin_, const_iterator end_, type_t type_) + { + assert(begin_ <= end_); + + size_t size_ = static_cast(end_ - begin_); + + // use internal buffer for 0 or 1 elements, heap buffer otherwise + xpath_node* storage = (size_ <= 1) ? _storage : static_cast(impl::xml_memory::allocate(size_ * sizeof(xpath_node))); + + if (!storage) + { + #ifdef PUGIXML_NO_EXCEPTIONS + return; + #else + throw std::bad_alloc(); + #endif + } + + // deallocate old buffer + if (_begin != _storage) + impl::xml_memory::deallocate(_begin); + + // size check is necessary because for begin_ = end_ = nullptr, memcpy is UB + if (size_) + memcpy(storage, begin_, size_ * sizeof(xpath_node)); + + _begin = storage; + _end = storage + size_; + _type = type_; + } + +#ifdef PUGIXML_HAS_MOVE + PUGI__FN void xpath_node_set::_move(xpath_node_set& rhs) PUGIXML_NOEXCEPT + { + _type = rhs._type; + _storage[0] = rhs._storage[0]; + _begin = (rhs._begin == rhs._storage) ? _storage : rhs._begin; + _end = _begin + (rhs._end - rhs._begin); + + rhs._type = type_unsorted; + rhs._begin = rhs._storage; + rhs._end = rhs._storage; + } +#endif + + PUGI__FN xpath_node_set::xpath_node_set(): _type(type_unsorted), _begin(_storage), _end(_storage) + { + } + + PUGI__FN xpath_node_set::xpath_node_set(const_iterator begin_, const_iterator end_, type_t type_): _type(type_unsorted), _begin(_storage), _end(_storage) + { + _assign(begin_, end_, type_); + } + + PUGI__FN xpath_node_set::~xpath_node_set() + { + if (_begin != _storage) + impl::xml_memory::deallocate(_begin); + } + + PUGI__FN xpath_node_set::xpath_node_set(const xpath_node_set& ns): _type(type_unsorted), _begin(_storage), _end(_storage) + { + _assign(ns._begin, ns._end, ns._type); + } + + PUGI__FN xpath_node_set& xpath_node_set::operator=(const xpath_node_set& ns) + { + if (this == &ns) return *this; + + _assign(ns._begin, ns._end, ns._type); + + return *this; + } + +#ifdef PUGIXML_HAS_MOVE + PUGI__FN xpath_node_set::xpath_node_set(xpath_node_set&& rhs) PUGIXML_NOEXCEPT: _type(type_unsorted), _begin(_storage), _end(_storage) + { + _move(rhs); + } + + PUGI__FN xpath_node_set& xpath_node_set::operator=(xpath_node_set&& rhs) PUGIXML_NOEXCEPT + { + if (this == &rhs) return *this; + + if (_begin != _storage) + impl::xml_memory::deallocate(_begin); + + _move(rhs); + + return *this; + } +#endif + + PUGI__FN xpath_node_set::type_t xpath_node_set::type() const + { + return _type; + } + + PUGI__FN size_t xpath_node_set::size() const + { + return _end - _begin; + } + + PUGI__FN bool xpath_node_set::empty() const + { + return _begin == _end; + } + + PUGI__FN const xpath_node& xpath_node_set::operator[](size_t index) const + { + assert(index < size()); + return _begin[index]; + } + + PUGI__FN xpath_node_set::const_iterator xpath_node_set::begin() const + { + return _begin; + } + + PUGI__FN xpath_node_set::const_iterator xpath_node_set::end() const + { + return _end; + } + + PUGI__FN void xpath_node_set::sort(bool reverse) + { + _type = impl::xpath_sort(_begin, _end, _type, reverse); + } + + PUGI__FN xpath_node xpath_node_set::first() const + { + return impl::xpath_first(_begin, _end, _type); + } + + PUGI__FN xpath_parse_result::xpath_parse_result(): error("Internal error"), offset(0) + { + } + + PUGI__FN xpath_parse_result::operator bool() const + { + return error == 0; + } + + PUGI__FN const char* xpath_parse_result::description() const + { + return error ? error : "No error"; + } + + PUGI__FN xpath_variable::xpath_variable(xpath_value_type type_): _type(type_), _next(0) + { + } + + PUGI__FN const char_t* xpath_variable::name() const + { + switch (_type) + { + case xpath_type_node_set: + return static_cast(this)->name; + + case xpath_type_number: + return static_cast(this)->name; + + case xpath_type_string: + return static_cast(this)->name; + + case xpath_type_boolean: + return static_cast(this)->name; + + default: + assert(false && "Invalid variable type"); // unreachable + return 0; + } + } + + PUGI__FN xpath_value_type xpath_variable::type() const + { + return _type; + } + + PUGI__FN bool xpath_variable::get_boolean() const + { + return (_type == xpath_type_boolean) ? static_cast(this)->value : false; + } + + PUGI__FN double xpath_variable::get_number() const + { + return (_type == xpath_type_number) ? static_cast(this)->value : impl::gen_nan(); + } + + PUGI__FN const char_t* xpath_variable::get_string() const + { + const char_t* value = (_type == xpath_type_string) ? static_cast(this)->value : 0; + return value ? value : PUGIXML_TEXT(""); + } + + PUGI__FN const xpath_node_set& xpath_variable::get_node_set() const + { + return (_type == xpath_type_node_set) ? static_cast(this)->value : impl::dummy_node_set; + } + + PUGI__FN bool xpath_variable::set(bool value) + { + if (_type != xpath_type_boolean) return false; + + static_cast(this)->value = value; + return true; + } + + PUGI__FN bool xpath_variable::set(double value) + { + if (_type != xpath_type_number) return false; + + static_cast(this)->value = value; + return true; + } + + PUGI__FN bool xpath_variable::set(const char_t* value) + { + if (_type != xpath_type_string) return false; + + impl::xpath_variable_string* var = static_cast(this); + + // duplicate string + size_t size = (impl::strlength(value) + 1) * sizeof(char_t); + + char_t* copy = static_cast(impl::xml_memory::allocate(size)); + if (!copy) return false; + + memcpy(copy, value, size); + + // replace old string + if (var->value) impl::xml_memory::deallocate(var->value); + var->value = copy; + + return true; + } + + PUGI__FN bool xpath_variable::set(const xpath_node_set& value) + { + if (_type != xpath_type_node_set) return false; + + static_cast(this)->value = value; + return true; + } + + PUGI__FN xpath_variable_set::xpath_variable_set() + { + for (size_t i = 0; i < sizeof(_data) / sizeof(_data[0]); ++i) + _data[i] = 0; + } + + PUGI__FN xpath_variable_set::~xpath_variable_set() + { + for (size_t i = 0; i < sizeof(_data) / sizeof(_data[0]); ++i) + _destroy(_data[i]); + } + + PUGI__FN xpath_variable_set::xpath_variable_set(const xpath_variable_set& rhs) + { + for (size_t i = 0; i < sizeof(_data) / sizeof(_data[0]); ++i) + _data[i] = 0; + + _assign(rhs); + } + + PUGI__FN xpath_variable_set& xpath_variable_set::operator=(const xpath_variable_set& rhs) + { + if (this == &rhs) return *this; + + _assign(rhs); + + return *this; + } + +#ifdef PUGIXML_HAS_MOVE + PUGI__FN xpath_variable_set::xpath_variable_set(xpath_variable_set&& rhs) PUGIXML_NOEXCEPT + { + for (size_t i = 0; i < sizeof(_data) / sizeof(_data[0]); ++i) + { + _data[i] = rhs._data[i]; + rhs._data[i] = 0; + } + } + + PUGI__FN xpath_variable_set& xpath_variable_set::operator=(xpath_variable_set&& rhs) PUGIXML_NOEXCEPT + { + for (size_t i = 0; i < sizeof(_data) / sizeof(_data[0]); ++i) + { + _destroy(_data[i]); + + _data[i] = rhs._data[i]; + rhs._data[i] = 0; + } + + return *this; + } +#endif + + PUGI__FN void xpath_variable_set::_assign(const xpath_variable_set& rhs) + { + xpath_variable_set temp; + + for (size_t i = 0; i < sizeof(_data) / sizeof(_data[0]); ++i) + if (rhs._data[i] && !_clone(rhs._data[i], &temp._data[i])) + return; + + _swap(temp); + } + + PUGI__FN void xpath_variable_set::_swap(xpath_variable_set& rhs) + { + for (size_t i = 0; i < sizeof(_data) / sizeof(_data[0]); ++i) + { + xpath_variable* chain = _data[i]; + + _data[i] = rhs._data[i]; + rhs._data[i] = chain; + } + } + + PUGI__FN xpath_variable* xpath_variable_set::_find(const char_t* name) const + { + const size_t hash_size = sizeof(_data) / sizeof(_data[0]); + size_t hash = impl::hash_string(name) % hash_size; + + // look for existing variable + for (xpath_variable* var = _data[hash]; var; var = var->_next) + if (impl::strequal(var->name(), name)) + return var; + + return 0; + } + + PUGI__FN bool xpath_variable_set::_clone(xpath_variable* var, xpath_variable** out_result) + { + xpath_variable* last = 0; + + while (var) + { + // allocate storage for new variable + xpath_variable* nvar = impl::new_xpath_variable(var->_type, var->name()); + if (!nvar) return false; + + // link the variable to the result immediately to handle failures gracefully + if (last) + last->_next = nvar; + else + *out_result = nvar; + + last = nvar; + + // copy the value; this can fail due to out-of-memory conditions + if (!impl::copy_xpath_variable(nvar, var)) return false; + + var = var->_next; + } + + return true; + } + + PUGI__FN void xpath_variable_set::_destroy(xpath_variable* var) + { + while (var) + { + xpath_variable* next = var->_next; + + impl::delete_xpath_variable(var->_type, var); + + var = next; + } + } + + PUGI__FN xpath_variable* xpath_variable_set::add(const char_t* name, xpath_value_type type) + { + const size_t hash_size = sizeof(_data) / sizeof(_data[0]); + size_t hash = impl::hash_string(name) % hash_size; + + // look for existing variable + for (xpath_variable* var = _data[hash]; var; var = var->_next) + if (impl::strequal(var->name(), name)) + return var->type() == type ? var : 0; + + // add new variable + xpath_variable* result = impl::new_xpath_variable(type, name); + + if (result) + { + result->_next = _data[hash]; + + _data[hash] = result; + } + + return result; + } + + PUGI__FN bool xpath_variable_set::set(const char_t* name, bool value) + { + xpath_variable* var = add(name, xpath_type_boolean); + return var ? var->set(value) : false; + } + + PUGI__FN bool xpath_variable_set::set(const char_t* name, double value) + { + xpath_variable* var = add(name, xpath_type_number); + return var ? var->set(value) : false; + } + + PUGI__FN bool xpath_variable_set::set(const char_t* name, const char_t* value) + { + xpath_variable* var = add(name, xpath_type_string); + return var ? var->set(value) : false; + } + + PUGI__FN bool xpath_variable_set::set(const char_t* name, const xpath_node_set& value) + { + xpath_variable* var = add(name, xpath_type_node_set); + return var ? var->set(value) : false; + } + + PUGI__FN xpath_variable* xpath_variable_set::get(const char_t* name) + { + return _find(name); + } + + PUGI__FN const xpath_variable* xpath_variable_set::get(const char_t* name) const + { + return _find(name); + } + + PUGI__FN xpath_query::xpath_query(const char_t* query, xpath_variable_set* variables): _impl(0) + { + impl::xpath_query_impl* qimpl = impl::xpath_query_impl::create(); + + if (!qimpl) + { + #ifdef PUGIXML_NO_EXCEPTIONS + _result.error = "Out of memory"; + #else + throw std::bad_alloc(); + #endif + } + else + { + using impl::auto_deleter; // MSVC7 workaround + auto_deleter impl(qimpl, impl::xpath_query_impl::destroy); + + qimpl->root = impl::xpath_parser::parse(query, variables, &qimpl->alloc, &_result); + + if (qimpl->root) + { + qimpl->root->optimize(&qimpl->alloc); + + _impl = impl.release(); + _result.error = 0; + } + else + { + #ifdef PUGIXML_NO_EXCEPTIONS + if (qimpl->oom) _result.error = "Out of memory"; + #else + if (qimpl->oom) throw std::bad_alloc(); + throw xpath_exception(_result); + #endif + } + } + } + + PUGI__FN xpath_query::xpath_query(): _impl(0) + { + } + + PUGI__FN xpath_query::~xpath_query() + { + if (_impl) + impl::xpath_query_impl::destroy(static_cast(_impl)); + } + +#ifdef PUGIXML_HAS_MOVE + PUGI__FN xpath_query::xpath_query(xpath_query&& rhs) PUGIXML_NOEXCEPT + { + _impl = rhs._impl; + _result = rhs._result; + rhs._impl = 0; + rhs._result = xpath_parse_result(); + } + + PUGI__FN xpath_query& xpath_query::operator=(xpath_query&& rhs) PUGIXML_NOEXCEPT + { + if (this == &rhs) return *this; + + if (_impl) + impl::xpath_query_impl::destroy(static_cast(_impl)); + + _impl = rhs._impl; + _result = rhs._result; + rhs._impl = 0; + rhs._result = xpath_parse_result(); + + return *this; + } +#endif + + PUGI__FN xpath_value_type xpath_query::return_type() const + { + if (!_impl) return xpath_type_none; + + return static_cast(_impl)->root->rettype(); + } + + PUGI__FN bool xpath_query::evaluate_boolean(const xpath_node& n) const + { + if (!_impl) return false; + + impl::xpath_context c(n, 1, 1); + impl::xpath_stack_data sd; + + bool r = static_cast(_impl)->root->eval_boolean(c, sd.stack); + + if (sd.oom) + { + #ifdef PUGIXML_NO_EXCEPTIONS + return false; + #else + throw std::bad_alloc(); + #endif + } + + return r; + } + + PUGI__FN double xpath_query::evaluate_number(const xpath_node& n) const + { + if (!_impl) return impl::gen_nan(); + + impl::xpath_context c(n, 1, 1); + impl::xpath_stack_data sd; + + double r = static_cast(_impl)->root->eval_number(c, sd.stack); + + if (sd.oom) + { + #ifdef PUGIXML_NO_EXCEPTIONS + return impl::gen_nan(); + #else + throw std::bad_alloc(); + #endif + } + + return r; + } + +#ifndef PUGIXML_NO_STL + PUGI__FN string_t xpath_query::evaluate_string(const xpath_node& n) const + { + if (!_impl) return string_t(); + + impl::xpath_context c(n, 1, 1); + impl::xpath_stack_data sd; + + impl::xpath_string r = static_cast(_impl)->root->eval_string(c, sd.stack); + + if (sd.oom) + { + #ifdef PUGIXML_NO_EXCEPTIONS + return string_t(); + #else + throw std::bad_alloc(); + #endif + } + + return string_t(r.c_str(), r.length()); + } +#endif + + PUGI__FN size_t xpath_query::evaluate_string(char_t* buffer, size_t capacity, const xpath_node& n) const + { + impl::xpath_context c(n, 1, 1); + impl::xpath_stack_data sd; + + impl::xpath_string r = _impl ? static_cast(_impl)->root->eval_string(c, sd.stack) : impl::xpath_string(); + + if (sd.oom) + { + #ifdef PUGIXML_NO_EXCEPTIONS + r = impl::xpath_string(); + #else + throw std::bad_alloc(); + #endif + } + + size_t full_size = r.length() + 1; + + if (capacity > 0) + { + size_t size = (full_size < capacity) ? full_size : capacity; + assert(size > 0); + + memcpy(buffer, r.c_str(), (size - 1) * sizeof(char_t)); + buffer[size - 1] = 0; + } + + return full_size; + } + + PUGI__FN xpath_node_set xpath_query::evaluate_node_set(const xpath_node& n) const + { + impl::xpath_ast_node* root = impl::evaluate_node_set_prepare(static_cast(_impl)); + if (!root) return xpath_node_set(); + + impl::xpath_context c(n, 1, 1); + impl::xpath_stack_data sd; + + impl::xpath_node_set_raw r = root->eval_node_set(c, sd.stack, impl::nodeset_eval_all); + + if (sd.oom) + { + #ifdef PUGIXML_NO_EXCEPTIONS + return xpath_node_set(); + #else + throw std::bad_alloc(); + #endif + } + + return xpath_node_set(r.begin(), r.end(), r.type()); + } + + PUGI__FN xpath_node xpath_query::evaluate_node(const xpath_node& n) const + { + impl::xpath_ast_node* root = impl::evaluate_node_set_prepare(static_cast(_impl)); + if (!root) return xpath_node(); + + impl::xpath_context c(n, 1, 1); + impl::xpath_stack_data sd; + + impl::xpath_node_set_raw r = root->eval_node_set(c, sd.stack, impl::nodeset_eval_first); + + if (sd.oom) + { + #ifdef PUGIXML_NO_EXCEPTIONS + return xpath_node(); + #else + throw std::bad_alloc(); + #endif + } + + return r.first(); + } + + PUGI__FN const xpath_parse_result& xpath_query::result() const + { + return _result; + } + + PUGI__FN static void unspecified_bool_xpath_query(xpath_query***) + { + } + + PUGI__FN xpath_query::operator xpath_query::unspecified_bool_type() const + { + return _impl ? unspecified_bool_xpath_query : 0; + } + + PUGI__FN bool xpath_query::operator!() const + { + return !_impl; + } + + PUGI__FN xpath_node xml_node::select_node(const char_t* query, xpath_variable_set* variables) const + { + xpath_query q(query, variables); + return q.evaluate_node(*this); + } + + PUGI__FN xpath_node xml_node::select_node(const xpath_query& query) const + { + return query.evaluate_node(*this); + } + + PUGI__FN xpath_node_set xml_node::select_nodes(const char_t* query, xpath_variable_set* variables) const + { + xpath_query q(query, variables); + return q.evaluate_node_set(*this); + } + + PUGI__FN xpath_node_set xml_node::select_nodes(const xpath_query& query) const + { + return query.evaluate_node_set(*this); + } + + PUGI__FN xpath_node xml_node::select_single_node(const char_t* query, xpath_variable_set* variables) const + { + xpath_query q(query, variables); + return q.evaluate_node(*this); + } + + PUGI__FN xpath_node xml_node::select_single_node(const xpath_query& query) const + { + return query.evaluate_node(*this); + } +} OIIO_NAMESPACE_3_1_END + +#endif + +#ifdef __BORLANDC__ +# pragma option pop +#endif + +// Intel C++ does not properly keep warning state for function templates, +// so popping warning state at the end of translation unit leads to warnings in the middle. +#if defined(_MSC_VER) && !defined(__INTEL_COMPILER) +# pragma warning(pop) +#endif + +#if defined(_MSC_VER) && defined(__c2__) +# pragma clang diagnostic pop +#endif + +// Undefine all local macros (makes sure we're not leaking macros in header-only mode) +#undef PUGI__NO_INLINE +#undef PUGI__UNLIKELY +#undef PUGI__STATIC_ASSERT +#undef PUGI__DMC_VOLATILE +#undef PUGI__UNSIGNED_OVERFLOW +#undef PUGI__MSVC_CRT_VERSION +#undef PUGI__SNPRINTF +#undef PUGI__NS_BEGIN +#undef PUGI__NS_END +#undef PUGI__FN +#undef PUGI__FN_NO_INLINE +#undef PUGI__GETHEADER_IMPL +#undef PUGI__GETPAGE_IMPL +#undef PUGI__GETPAGE +#undef PUGI__NODETYPE +#undef PUGI__IS_CHARTYPE_IMPL +#undef PUGI__IS_CHARTYPE +#undef PUGI__IS_CHARTYPEX +#undef PUGI__ENDSWITH +#undef PUGI__SKIPWS +#undef PUGI__OPTSET +#undef PUGI__PUSHNODE +#undef PUGI__POPNODE +#undef PUGI__SCANFOR +#undef PUGI__SCANWHILE +#undef PUGI__SCANWHILE_UNROLL +#undef PUGI__ENDSEG +#undef PUGI__THROW_ERROR +#undef PUGI__CHECK_ERROR + +#endif + +/** + * Copyright (c) 2006-2022 Arseny Kapoulkine + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + */ diff --git a/third_party/tlRender-install-Release/include/OpenImageIO/detail/pugixml/pugixml.hpp b/third_party/tlRender-install-Release/include/OpenImageIO/detail/pugixml/pugixml.hpp new file mode 100644 index 00000000..b39fa832 --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenImageIO/detail/pugixml/pugixml.hpp @@ -0,0 +1,1514 @@ +/** + * pugixml parser - version 1.12 + * -------------------------------------------------------- + * Copyright (C) 2006-2022, by Arseny Kapoulkine (arseny.kapoulkine@gmail.com) + * Report bugs and download new versions at https://pugixml.org/ + * + * This library is distributed under the MIT License. See notice at the end + * of this file. + * + * This work is based on the pugxml parser, which is: + * Copyright (C) 2003, by Kristen Wegner (kristen@tima.net) + */ +// clang-format off + +// Define version macro; evaluates to major * 1000 + minor * 10 + patch so that it's safe to use in less-than comparisons +// Note: pugixml used major * 100 + minor * 10 + patch format up until 1.9 (which had version identifier 190); starting from pugixml 1.10, the minor version number is two digits +#ifndef PUGIXML_VERSION +# define PUGIXML_VERSION 1120 // 1.12 +#endif + +// Include user configuration file (this can define various configuration macros) +#include "pugiconfig.hpp" + +#ifndef HEADER_PUGIXML_HPP +#define HEADER_PUGIXML_HPP + +#include +#define USING_OIIO_PUGI 1 + +// Include stddef.h for size_t and ptrdiff_t +#include + +// Include exception header for XPath +#if !defined(PUGIXML_NO_XPATH) && !defined(PUGIXML_NO_EXCEPTIONS) +# include +#endif + +// Include STL headers +#ifndef PUGIXML_NO_STL +# include +# include +# include +#endif + +// Macro for deprecated features +#ifndef PUGIXML_DEPRECATED +# if defined(__GNUC__) +# define PUGIXML_DEPRECATED __attribute__((deprecated)) +# elif defined(_MSC_VER) && _MSC_VER >= 1300 +# define PUGIXML_DEPRECATED __declspec(deprecated) +# else +# define PUGIXML_DEPRECATED +# endif +#endif + +// If no API is defined, assume default +#ifndef PUGIXML_API +# define PUGIXML_API +#endif + +// If no API for classes is defined, assume default +#ifndef PUGIXML_CLASS +# define PUGIXML_CLASS PUGIXML_API +#endif + +// If no API for functions is defined, assume default +#ifndef PUGIXML_FUNCTION +# define PUGIXML_FUNCTION PUGIXML_API +#endif + +// If the platform is known to have long long support, enable long long functions +#ifndef PUGIXML_HAS_LONG_LONG +# if __cplusplus >= 201103 +# define PUGIXML_HAS_LONG_LONG +# elif defined(_MSC_VER) && _MSC_VER >= 1400 +# define PUGIXML_HAS_LONG_LONG +# endif +#endif + +// If the platform is known to have move semantics support, compile move ctor/operator implementation +#ifndef PUGIXML_HAS_MOVE +# if __cplusplus >= 201103 +# define PUGIXML_HAS_MOVE +# elif defined(_MSC_VER) && _MSC_VER >= 1600 +# define PUGIXML_HAS_MOVE +# endif +#endif + +// If C++ is 2011 or higher, add 'noexcept' specifiers +#ifndef PUGIXML_NOEXCEPT +# if __cplusplus >= 201103 +# define PUGIXML_NOEXCEPT noexcept +# elif defined(_MSC_VER) && _MSC_VER >= 1900 +# define PUGIXML_NOEXCEPT noexcept +# else +# define PUGIXML_NOEXCEPT +# endif +#endif + +// Some functions can not be noexcept in compact mode +#ifdef PUGIXML_COMPACT +# define PUGIXML_NOEXCEPT_IF_NOT_COMPACT +#else +# define PUGIXML_NOEXCEPT_IF_NOT_COMPACT PUGIXML_NOEXCEPT +#endif + +// If C++ is 2011 or higher, add 'override' qualifiers +#ifndef PUGIXML_OVERRIDE +# if __cplusplus >= 201103 +# define PUGIXML_OVERRIDE override +# elif defined(_MSC_VER) && _MSC_VER >= 1700 +# define PUGIXML_OVERRIDE override +# else +# define PUGIXML_OVERRIDE +# endif +#endif + +// If C++ is 2011 or higher, use 'nullptr' +#ifndef PUGIXML_NULL +# if __cplusplus >= 201103 +# define PUGIXML_NULL nullptr +# else +# define PUGIXML_NULL 0 +# endif +#endif + +// Character interface macros +#ifdef PUGIXML_WCHAR_MODE +# define PUGIXML_TEXT(t) L ## t +# define PUGIXML_CHAR wchar_t +#else +# define PUGIXML_TEXT(t) t +# define PUGIXML_CHAR char +#endif + + +OIIO_NAMESPACE_3_1_BEGIN +namespace pugi {} +OIIO_NAMESPACE_3_1_END +namespace pugi = OIIO::v3_1::pugi; + + +OIIO_NAMESPACE_3_1_BEGIN +namespace pugi +{ + // Character type used for all internal storage and operations; depends on PUGIXML_WCHAR_MODE + typedef PUGIXML_CHAR char_t; + +#ifndef PUGIXML_NO_STL + // String type used for operations that work with STL string; depends on PUGIXML_WCHAR_MODE + typedef std::basic_string, std::allocator > string_t; +#endif +} + +// The PugiXML namespace +namespace pugi +{ + // Tree node types + enum xml_node_type + { + node_null, // Empty (null) node handle + node_document, // A document tree's absolute root + node_element, // Element tag, i.e. '' + node_pcdata, // Plain character data, i.e. 'text' + node_cdata, // Character data, i.e. '' + node_comment, // Comment tag, i.e. '' + node_pi, // Processing instruction, i.e. '' + node_declaration, // Document declaration, i.e. '' + node_doctype // Document type declaration, i.e. '' + }; + + // Parsing options + + // Minimal parsing mode (equivalent to turning all other flags off). + // Only elements and PCDATA sections are added to the DOM tree, no text conversions are performed. + const unsigned int parse_minimal = 0x0000; + + // This flag determines if processing instructions (node_pi) are added to the DOM tree. This flag is off by default. + const unsigned int parse_pi = 0x0001; + + // This flag determines if comments (node_comment) are added to the DOM tree. This flag is off by default. + const unsigned int parse_comments = 0x0002; + + // This flag determines if CDATA sections (node_cdata) are added to the DOM tree. This flag is on by default. + const unsigned int parse_cdata = 0x0004; + + // This flag determines if plain character data (node_pcdata) that consist only of whitespace are added to the DOM tree. + // This flag is off by default; turning it on usually results in slower parsing and more memory consumption. + const unsigned int parse_ws_pcdata = 0x0008; + + // This flag determines if character and entity references are expanded during parsing. This flag is on by default. + const unsigned int parse_escapes = 0x0010; + + // This flag determines if EOL characters are normalized (converted to #xA) during parsing. This flag is on by default. + const unsigned int parse_eol = 0x0020; + + // This flag determines if attribute values are normalized using CDATA normalization rules during parsing. This flag is on by default. + const unsigned int parse_wconv_attribute = 0x0040; + + // This flag determines if attribute values are normalized using NMTOKENS normalization rules during parsing. This flag is off by default. + const unsigned int parse_wnorm_attribute = 0x0080; + + // This flag determines if document declaration (node_declaration) is added to the DOM tree. This flag is off by default. + const unsigned int parse_declaration = 0x0100; + + // This flag determines if document type declaration (node_doctype) is added to the DOM tree. This flag is off by default. + const unsigned int parse_doctype = 0x0200; + + // This flag determines if plain character data (node_pcdata) that is the only child of the parent node and that consists only + // of whitespace is added to the DOM tree. + // This flag is off by default; turning it on may result in slower parsing and more memory consumption. + const unsigned int parse_ws_pcdata_single = 0x0400; + + // This flag determines if leading and trailing whitespace is to be removed from plain character data. This flag is off by default. + const unsigned int parse_trim_pcdata = 0x0800; + + // This flag determines if plain character data that does not have a parent node is added to the DOM tree, and if an empty document + // is a valid document. This flag is off by default. + const unsigned int parse_fragment = 0x1000; + + // This flag determines if plain character data is be stored in the parent element's value. This significantly changes the structure of + // the document; this flag is only recommended for parsing documents with many PCDATA nodes in memory-constrained environments. + // This flag is off by default. + const unsigned int parse_embed_pcdata = 0x2000; + + // The default parsing mode. + // Elements, PCDATA and CDATA sections are added to the DOM tree, character/reference entities are expanded, + // End-of-Line characters are normalized, attribute values are normalized using CDATA normalization rules. + const unsigned int parse_default = parse_cdata | parse_escapes | parse_wconv_attribute | parse_eol; + + // The full parsing mode. + // Nodes of all types are added to the DOM tree, character/reference entities are expanded, + // End-of-Line characters are normalized, attribute values are normalized using CDATA normalization rules. + const unsigned int parse_full = parse_default | parse_pi | parse_comments | parse_declaration | parse_doctype; + + // These flags determine the encoding of input data for XML document + enum xml_encoding + { + encoding_auto, // Auto-detect input encoding using BOM or < / class xml_object_range + { + public: + typedef It const_iterator; + typedef It iterator; + + xml_object_range(It b, It e): _begin(b), _end(e) + { + } + + It begin() const { return _begin; } + It end() const { return _end; } + + bool empty() const { return _begin == _end; } + + private: + It _begin, _end; + }; + + // Writer interface for node printing (see xml_node::print) + class PUGIXML_CLASS xml_writer + { + public: + virtual ~xml_writer() {} + + // Write memory chunk into stream/file/whatever + virtual void write(const void* data, size_t size) = 0; + }; + + // xml_writer implementation for FILE* + class PUGIXML_CLASS xml_writer_file: public xml_writer + { + public: + // Construct writer from a FILE* object; void* is used to avoid header dependencies on stdio + xml_writer_file(void* file); + + virtual void write(const void* data, size_t size) PUGIXML_OVERRIDE; + + private: + void* file; + }; + + #ifndef PUGIXML_NO_STL + // xml_writer implementation for streams + class PUGIXML_CLASS xml_writer_stream: public xml_writer + { + public: + // Construct writer from an output stream object + xml_writer_stream(std::basic_ostream >& stream); + xml_writer_stream(std::basic_ostream >& stream); + + virtual void write(const void* data, size_t size) PUGIXML_OVERRIDE; + + private: + std::basic_ostream >* narrow_stream; + std::basic_ostream >* wide_stream; + }; + #endif + + // A light-weight handle for manipulating attributes in DOM tree + class PUGIXML_CLASS xml_attribute + { + friend class xml_attribute_iterator; + friend class xml_node; + + private: + xml_attribute_struct* _attr; + + typedef void (*unspecified_bool_type)(xml_attribute***); + + public: + // Default constructor. Constructs an empty attribute. + xml_attribute(); + + // Constructs attribute from internal pointer + explicit xml_attribute(xml_attribute_struct* attr); + + // Safe bool conversion operator + operator unspecified_bool_type() const; + + // Borland C++ workaround + bool operator!() const; + + // Comparison operators (compares wrapped attribute pointers) + bool operator==(const xml_attribute& r) const; + bool operator!=(const xml_attribute& r) const; + bool operator<(const xml_attribute& r) const; + bool operator>(const xml_attribute& r) const; + bool operator<=(const xml_attribute& r) const; + bool operator>=(const xml_attribute& r) const; + + // Check if attribute is empty + bool empty() const; + + // Get attribute name/value, or "" if attribute is empty + const char_t* name() const; + const char_t* value() const; + + // Get attribute value, or the default value if attribute is empty + const char_t* as_string(const char_t* def = PUGIXML_TEXT("")) const; + + // Get attribute value as a number, or the default value if conversion did not succeed or attribute is empty + int as_int(int def = 0) const; + unsigned int as_uint(unsigned int def = 0) const; + double as_double(double def = 0) const; + float as_float(float def = 0) const; + + #ifdef PUGIXML_HAS_LONG_LONG + long long as_llong(long long def = 0) const; + unsigned long long as_ullong(unsigned long long def = 0) const; + #endif + + // Get attribute value as bool (returns true if first character is in '1tTyY' set), or the default value if attribute is empty + bool as_bool(bool def = false) const; + + // Set attribute name/value (returns false if attribute is empty or there is not enough memory) + bool set_name(const char_t* rhs); + bool set_value(const char_t* rhs); + + // Set attribute value with type conversion (numbers are converted to strings, boolean is converted to "true"/"false") + bool set_value(int rhs); + bool set_value(unsigned int rhs); + bool set_value(long rhs); + bool set_value(unsigned long rhs); + bool set_value(double rhs); + bool set_value(double rhs, int precision); + bool set_value(float rhs); + bool set_value(float rhs, int precision); + bool set_value(bool rhs); + + #ifdef PUGIXML_HAS_LONG_LONG + bool set_value(long long rhs); + bool set_value(unsigned long long rhs); + #endif + + // Set attribute value (equivalent to set_value without error checking) + xml_attribute& operator=(const char_t* rhs); + xml_attribute& operator=(int rhs); + xml_attribute& operator=(unsigned int rhs); + xml_attribute& operator=(long rhs); + xml_attribute& operator=(unsigned long rhs); + xml_attribute& operator=(double rhs); + xml_attribute& operator=(float rhs); + xml_attribute& operator=(bool rhs); + + #ifdef PUGIXML_HAS_LONG_LONG + xml_attribute& operator=(long long rhs); + xml_attribute& operator=(unsigned long long rhs); + #endif + + // Get next/previous attribute in the attribute list of the parent node + xml_attribute next_attribute() const; + xml_attribute previous_attribute() const; + + // Get hash value (unique for handles to the same object) + size_t hash_value() const; + + // Get internal pointer + xml_attribute_struct* internal_object() const; + }; + +#ifdef __BORLANDC__ + // Borland C++ workaround + bool PUGIXML_FUNCTION operator&&(const xml_attribute& lhs, bool rhs); + bool PUGIXML_FUNCTION operator||(const xml_attribute& lhs, bool rhs); +#endif + + // A light-weight handle for manipulating nodes in DOM tree + class PUGIXML_CLASS xml_node + { + friend class xml_attribute_iterator; + friend class xml_node_iterator; + friend class xml_named_node_iterator; + + protected: + xml_node_struct* _root; + + typedef void (*unspecified_bool_type)(xml_node***); + + public: + // Default constructor. Constructs an empty node. + xml_node(); + + // Constructs node from internal pointer + explicit xml_node(xml_node_struct* p); + + // Safe bool conversion operator + operator unspecified_bool_type() const; + + // Borland C++ workaround + bool operator!() const; + + // Comparison operators (compares wrapped node pointers) + bool operator==(const xml_node& r) const; + bool operator!=(const xml_node& r) const; + bool operator<(const xml_node& r) const; + bool operator>(const xml_node& r) const; + bool operator<=(const xml_node& r) const; + bool operator>=(const xml_node& r) const; + + // Check if node is empty. + bool empty() const; + + // Get node type + xml_node_type type() const; + + // Get node name, or "" if node is empty or it has no name + const char_t* name() const; + + // Get node value, or "" if node is empty or it has no value + // Note: For text node.value() does not return "text"! Use child_value() or text() methods to access text inside nodes. + const char_t* value() const; + + // Get attribute list + xml_attribute first_attribute() const; + xml_attribute last_attribute() const; + + // Get children list + xml_node first_child() const; + xml_node last_child() const; + + // Get next/previous sibling in the children list of the parent node + xml_node next_sibling() const; + xml_node previous_sibling() const; + + // Get parent node + xml_node parent() const; + + // Get root of DOM tree this node belongs to + xml_node root() const; + + // Get text object for the current node + xml_text text() const; + + // Get child, attribute or next/previous sibling with the specified name + xml_node child(const char_t* name) const; + xml_attribute attribute(const char_t* name) const; + xml_node next_sibling(const char_t* name) const; + xml_node previous_sibling(const char_t* name) const; + + // Get attribute, starting the search from a hint (and updating hint so that searching for a sequence of attributes is fast) + xml_attribute attribute(const char_t* name, xml_attribute& hint) const; + + // Get child value of current node; that is, value of the first child node of type PCDATA/CDATA + const char_t* child_value() const; + + // Get child value of child with specified name. Equivalent to child(name).child_value(). + const char_t* child_value(const char_t* name) const; + + // Set node name/value (returns false if node is empty, there is not enough memory, or node can not have name/value) + bool set_name(const char_t* rhs); + bool set_value(const char_t* rhs); + + // Add attribute with specified name. Returns added attribute, or empty attribute on errors. + xml_attribute append_attribute(const char_t* name); + xml_attribute prepend_attribute(const char_t* name); + xml_attribute insert_attribute_after(const char_t* name, const xml_attribute& attr); + xml_attribute insert_attribute_before(const char_t* name, const xml_attribute& attr); + + // Add a copy of the specified attribute. Returns added attribute, or empty attribute on errors. + xml_attribute append_copy(const xml_attribute& proto); + xml_attribute prepend_copy(const xml_attribute& proto); + xml_attribute insert_copy_after(const xml_attribute& proto, const xml_attribute& attr); + xml_attribute insert_copy_before(const xml_attribute& proto, const xml_attribute& attr); + + // Add child node with specified type. Returns added node, or empty node on errors. + xml_node append_child(xml_node_type type = node_element); + xml_node prepend_child(xml_node_type type = node_element); + xml_node insert_child_after(xml_node_type type, const xml_node& node); + xml_node insert_child_before(xml_node_type type, const xml_node& node); + + // Add child element with specified name. Returns added node, or empty node on errors. + xml_node append_child(const char_t* name); + xml_node prepend_child(const char_t* name); + xml_node insert_child_after(const char_t* name, const xml_node& node); + xml_node insert_child_before(const char_t* name, const xml_node& node); + + // Add a copy of the specified node as a child. Returns added node, or empty node on errors. + xml_node append_copy(const xml_node& proto); + xml_node prepend_copy(const xml_node& proto); + xml_node insert_copy_after(const xml_node& proto, const xml_node& node); + xml_node insert_copy_before(const xml_node& proto, const xml_node& node); + + // Move the specified node to become a child of this node. Returns moved node, or empty node on errors. + xml_node append_move(const xml_node& moved); + xml_node prepend_move(const xml_node& moved); + xml_node insert_move_after(const xml_node& moved, const xml_node& node); + xml_node insert_move_before(const xml_node& moved, const xml_node& node); + + // Remove specified attribute + bool remove_attribute(const xml_attribute& a); + bool remove_attribute(const char_t* name); + + // Remove all attributes + bool remove_attributes(); + + // Remove specified child + bool remove_child(const xml_node& n); + bool remove_child(const char_t* name); + + // Remove all children + bool remove_children(); + + // Parses buffer as an XML document fragment and appends all nodes as children of the current node. + // Copies/converts the buffer, so it may be deleted or changed after the function returns. + // Note: append_buffer allocates memory that has the lifetime of the owning document; removing the appended nodes does not immediately reclaim that memory. + xml_parse_result append_buffer(const void* contents, size_t size, unsigned int options = parse_default, xml_encoding encoding = encoding_auto); + + // Find attribute using predicate. Returns first attribute for which predicate returned true. + template xml_attribute find_attribute(Predicate pred) const + { + if (!_root) return xml_attribute(); + + for (xml_attribute attrib = first_attribute(); attrib; attrib = attrib.next_attribute()) + if (pred(attrib)) + return attrib; + + return xml_attribute(); + } + + // Find child node using predicate. Returns first child for which predicate returned true. + template xml_node find_child(Predicate pred) const + { + if (!_root) return xml_node(); + + for (xml_node node = first_child(); node; node = node.next_sibling()) + if (pred(node)) + return node; + + return xml_node(); + } + + // Find node from subtree using predicate. Returns first node from subtree (depth-first), for which predicate returned true. + template xml_node find_node(Predicate pred) const + { + if (!_root) return xml_node(); + + xml_node cur = first_child(); + + while (cur._root && cur._root != _root) + { + if (pred(cur)) return cur; + + if (cur.first_child()) cur = cur.first_child(); + else if (cur.next_sibling()) cur = cur.next_sibling(); + else + { + while (!cur.next_sibling() && cur._root != _root) cur = cur.parent(); + + if (cur._root != _root) cur = cur.next_sibling(); + } + } + + return xml_node(); + } + + // Find child node by attribute name/value + xml_node find_child_by_attribute(const char_t* name, const char_t* attr_name, const char_t* attr_value) const; + xml_node find_child_by_attribute(const char_t* attr_name, const char_t* attr_value) const; + + #ifndef PUGIXML_NO_STL + // Get the absolute node path from root as a text string. + string_t path(char_t delimiter = '/') const; + #endif + + // Search for a node by path consisting of node names and . or .. elements. + xml_node first_element_by_path(const char_t* path, char_t delimiter = '/') const; + + // Recursively traverse subtree with xml_tree_walker + bool traverse(xml_tree_walker& walker); + + #ifndef PUGIXML_NO_XPATH + // Select single node by evaluating XPath query. Returns first node from the resulting node set. + xpath_node select_node(const char_t* query, xpath_variable_set* variables = PUGIXML_NULL) const; + xpath_node select_node(const xpath_query& query) const; + + // Select node set by evaluating XPath query + xpath_node_set select_nodes(const char_t* query, xpath_variable_set* variables = PUGIXML_NULL) const; + xpath_node_set select_nodes(const xpath_query& query) const; + + // (deprecated: use select_node instead) Select single node by evaluating XPath query. + PUGIXML_DEPRECATED xpath_node select_single_node(const char_t* query, xpath_variable_set* variables = PUGIXML_NULL) const; + PUGIXML_DEPRECATED xpath_node select_single_node(const xpath_query& query) const; + + #endif + + // Print subtree using a writer object + void print(xml_writer& writer, const char_t* indent = PUGIXML_TEXT("\t"), unsigned int flags = format_default, xml_encoding encoding = encoding_auto, unsigned int depth = 0) const; + + #ifndef PUGIXML_NO_STL + // Print subtree to stream + void print(std::basic_ostream >& os, const char_t* indent = PUGIXML_TEXT("\t"), unsigned int flags = format_default, xml_encoding encoding = encoding_auto, unsigned int depth = 0) const; + void print(std::basic_ostream >& os, const char_t* indent = PUGIXML_TEXT("\t"), unsigned int flags = format_default, unsigned int depth = 0) const; + #endif + + // Child nodes iterators + typedef xml_node_iterator iterator; + + iterator begin() const; + iterator end() const; + + // Attribute iterators + typedef xml_attribute_iterator attribute_iterator; + + attribute_iterator attributes_begin() const; + attribute_iterator attributes_end() const; + + // Range-based for support + xml_object_range children() const; + xml_object_range children(const char_t* name) const; + xml_object_range attributes() const; + + // Get node offset in parsed file/string (in char_t units) for debugging purposes + ptrdiff_t offset_debug() const; + + // Get hash value (unique for handles to the same object) + size_t hash_value() const; + + // Get internal pointer + xml_node_struct* internal_object() const; + }; + +#ifdef __BORLANDC__ + // Borland C++ workaround + bool PUGIXML_FUNCTION operator&&(const xml_node& lhs, bool rhs); + bool PUGIXML_FUNCTION operator||(const xml_node& lhs, bool rhs); +#endif + + // A helper for working with text inside PCDATA nodes + class PUGIXML_CLASS xml_text + { + friend class xml_node; + + xml_node_struct* _root; + + typedef void (*unspecified_bool_type)(xml_text***); + + explicit xml_text(xml_node_struct* root); + + xml_node_struct* _data_new(); + xml_node_struct* _data() const; + + public: + // Default constructor. Constructs an empty object. + xml_text(); + + // Safe bool conversion operator + operator unspecified_bool_type() const; + + // Borland C++ workaround + bool operator!() const; + + // Check if text object is empty + bool empty() const; + + // Get text, or "" if object is empty + const char_t* get() const; + + // Get text, or the default value if object is empty + const char_t* as_string(const char_t* def = PUGIXML_TEXT("")) const; + + // Get text as a number, or the default value if conversion did not succeed or object is empty + int as_int(int def = 0) const; + unsigned int as_uint(unsigned int def = 0) const; + double as_double(double def = 0) const; + float as_float(float def = 0) const; + + #ifdef PUGIXML_HAS_LONG_LONG + long long as_llong(long long def = 0) const; + unsigned long long as_ullong(unsigned long long def = 0) const; + #endif + + // Get text as bool (returns true if first character is in '1tTyY' set), or the default value if object is empty + bool as_bool(bool def = false) const; + + // Set text (returns false if object is empty or there is not enough memory) + bool set(const char_t* rhs); + + // Set text with type conversion (numbers are converted to strings, boolean is converted to "true"/"false") + bool set(int rhs); + bool set(unsigned int rhs); + bool set(long rhs); + bool set(unsigned long rhs); + bool set(double rhs); + bool set(double rhs, int precision); + bool set(float rhs); + bool set(float rhs, int precision); + bool set(bool rhs); + + #ifdef PUGIXML_HAS_LONG_LONG + bool set(long long rhs); + bool set(unsigned long long rhs); + #endif + + // Set text (equivalent to set without error checking) + xml_text& operator=(const char_t* rhs); + xml_text& operator=(int rhs); + xml_text& operator=(unsigned int rhs); + xml_text& operator=(long rhs); + xml_text& operator=(unsigned long rhs); + xml_text& operator=(double rhs); + xml_text& operator=(float rhs); + xml_text& operator=(bool rhs); + + #ifdef PUGIXML_HAS_LONG_LONG + xml_text& operator=(long long rhs); + xml_text& operator=(unsigned long long rhs); + #endif + + // Get the data node (node_pcdata or node_cdata) for this object + xml_node data() const; + }; + +#ifdef __BORLANDC__ + // Borland C++ workaround + bool PUGIXML_FUNCTION operator&&(const xml_text& lhs, bool rhs); + bool PUGIXML_FUNCTION operator||(const xml_text& lhs, bool rhs); +#endif + + // Child node iterator (a bidirectional iterator over a collection of xml_node) + class PUGIXML_CLASS xml_node_iterator + { + friend class xml_node; + + private: + mutable xml_node _wrap; + xml_node _parent; + + xml_node_iterator(xml_node_struct* ref, xml_node_struct* parent); + + public: + // Iterator traits + typedef ptrdiff_t difference_type; + typedef xml_node value_type; + typedef xml_node* pointer; + typedef xml_node& reference; + + #ifndef PUGIXML_NO_STL + typedef std::bidirectional_iterator_tag iterator_category; + #endif + + // Default constructor + xml_node_iterator(); + + // Construct an iterator which points to the specified node + xml_node_iterator(const xml_node& node); + + // Iterator operators + bool operator==(const xml_node_iterator& rhs) const; + bool operator!=(const xml_node_iterator& rhs) const; + + xml_node& operator*() const; + xml_node* operator->() const; + + xml_node_iterator& operator++(); + xml_node_iterator operator++(int); + + xml_node_iterator& operator--(); + xml_node_iterator operator--(int); + }; + + // Attribute iterator (a bidirectional iterator over a collection of xml_attribute) + class PUGIXML_CLASS xml_attribute_iterator + { + friend class xml_node; + + private: + mutable xml_attribute _wrap; + xml_node _parent; + + xml_attribute_iterator(xml_attribute_struct* ref, xml_node_struct* parent); + + public: + // Iterator traits + typedef ptrdiff_t difference_type; + typedef xml_attribute value_type; + typedef xml_attribute* pointer; + typedef xml_attribute& reference; + + #ifndef PUGIXML_NO_STL + typedef std::bidirectional_iterator_tag iterator_category; + #endif + + // Default constructor + xml_attribute_iterator(); + + // Construct an iterator which points to the specified attribute + xml_attribute_iterator(const xml_attribute& attr, const xml_node& parent); + + // Iterator operators + bool operator==(const xml_attribute_iterator& rhs) const; + bool operator!=(const xml_attribute_iterator& rhs) const; + + xml_attribute& operator*() const; + xml_attribute* operator->() const; + + xml_attribute_iterator& operator++(); + xml_attribute_iterator operator++(int); + + xml_attribute_iterator& operator--(); + xml_attribute_iterator operator--(int); + }; + + // Named node range helper + class PUGIXML_CLASS xml_named_node_iterator + { + friend class xml_node; + + public: + // Iterator traits + typedef ptrdiff_t difference_type; + typedef xml_node value_type; + typedef xml_node* pointer; + typedef xml_node& reference; + + #ifndef PUGIXML_NO_STL + typedef std::bidirectional_iterator_tag iterator_category; + #endif + + // Default constructor + xml_named_node_iterator(); + + // Construct an iterator which points to the specified node + xml_named_node_iterator(const xml_node& node, const char_t* name); + + // Iterator operators + bool operator==(const xml_named_node_iterator& rhs) const; + bool operator!=(const xml_named_node_iterator& rhs) const; + + xml_node& operator*() const; + xml_node* operator->() const; + + xml_named_node_iterator& operator++(); + xml_named_node_iterator operator++(int); + + xml_named_node_iterator& operator--(); + xml_named_node_iterator operator--(int); + + private: + mutable xml_node _wrap; + xml_node _parent; + const char_t* _name; + + xml_named_node_iterator(xml_node_struct* ref, xml_node_struct* parent, const char_t* name); + }; + + // Abstract tree walker class (see xml_node::traverse) + class PUGIXML_CLASS xml_tree_walker + { + friend class xml_node; + + private: + int _depth; + + protected: + // Get current traversal depth + int depth() const; + + public: + xml_tree_walker(); + virtual ~xml_tree_walker(); + + // Callback that is called when traversal begins + virtual bool begin(xml_node& node); + + // Callback that is called for each node traversed + virtual bool for_each(xml_node& node) = 0; + + // Callback that is called when traversal ends + virtual bool end(xml_node& node); + }; + + // Parsing status, returned as part of xml_parse_result object + enum xml_parse_status + { + status_ok = 0, // No error + + status_file_not_found, // File was not found during load_file() + status_io_error, // Error reading from file/stream + status_out_of_memory, // Could not allocate memory + status_internal_error, // Internal error occurred + + status_unrecognized_tag, // Parser could not determine tag type + + status_bad_pi, // Parsing error occurred while parsing document declaration/processing instruction + status_bad_comment, // Parsing error occurred while parsing comment + status_bad_cdata, // Parsing error occurred while parsing CDATA section + status_bad_doctype, // Parsing error occurred while parsing document type declaration + status_bad_pcdata, // Parsing error occurred while parsing PCDATA section + status_bad_start_element, // Parsing error occurred while parsing start element tag + status_bad_attribute, // Parsing error occurred while parsing element attribute + status_bad_end_element, // Parsing error occurred while parsing end element tag + status_end_element_mismatch,// There was a mismatch of start-end tags (closing tag had incorrect name, some tag was not closed or there was an excessive closing tag) + + status_append_invalid_root, // Unable to append nodes since root type is not node_element or node_document (exclusive to xml_node::append_buffer) + + status_no_document_element // Parsing resulted in a document without element nodes + }; + + // Parsing result + struct PUGIXML_CLASS xml_parse_result + { + // Parsing status (see xml_parse_status) + xml_parse_status status; + + // Last parsed offset (in char_t units from start of input data) + ptrdiff_t offset; + + // Source document encoding + xml_encoding encoding; + + // Default constructor, initializes object to failed state + xml_parse_result(); + + // Cast to bool operator + operator bool() const; + + // Get error description + const char* description() const; + }; + + // Document class (DOM tree root) + class PUGIXML_CLASS xml_document: public xml_node + { + private: + char_t* _buffer; + + char _memory[192]; + + // Non-copyable semantics + xml_document(const xml_document&); + xml_document& operator=(const xml_document&); + + void _create(); + void _destroy(); + void _move(xml_document& rhs) PUGIXML_NOEXCEPT_IF_NOT_COMPACT; + + public: + // Default constructor, makes empty document + xml_document(); + + // Destructor, invalidates all node/attribute handles to this document + ~xml_document(); + + #ifdef PUGIXML_HAS_MOVE + // Move semantics support + xml_document(xml_document&& rhs) PUGIXML_NOEXCEPT_IF_NOT_COMPACT; + xml_document& operator=(xml_document&& rhs) PUGIXML_NOEXCEPT_IF_NOT_COMPACT; + #endif + + // Removes all nodes, leaving the empty document + void reset(); + + // Removes all nodes, then copies the entire contents of the specified document + void reset(const xml_document& proto); + + #ifndef PUGIXML_NO_STL + // Load document from stream. + xml_parse_result load(std::basic_istream >& stream, unsigned int options = parse_default, xml_encoding encoding = encoding_auto); + xml_parse_result load(std::basic_istream >& stream, unsigned int options = parse_default); + #endif + + // (deprecated: use load_string instead) Load document from zero-terminated string. No encoding conversions are applied. + PUGIXML_DEPRECATED xml_parse_result load(const char_t* contents, unsigned int options = parse_default); + + // Load document from zero-terminated string. No encoding conversions are applied. + xml_parse_result load_string(const char_t* contents, unsigned int options = parse_default); + + // Load document from file + xml_parse_result load_file(const char* path, unsigned int options = parse_default, xml_encoding encoding = encoding_auto); + xml_parse_result load_file(const wchar_t* path, unsigned int options = parse_default, xml_encoding encoding = encoding_auto); + + // Load document from buffer. Copies/converts the buffer, so it may be deleted or changed after the function returns. + xml_parse_result load_buffer(const void* contents, size_t size, unsigned int options = parse_default, xml_encoding encoding = encoding_auto); + + // Load document from buffer, using the buffer for in-place parsing (the buffer is modified and used for storage of document data). + // You should ensure that buffer data will persist throughout the document's lifetime, and free the buffer memory manually once document is destroyed. + xml_parse_result load_buffer_inplace(void* contents, size_t size, unsigned int options = parse_default, xml_encoding encoding = encoding_auto); + + // Load document from buffer, using the buffer for in-place parsing (the buffer is modified and used for storage of document data). + // You should allocate the buffer with pugixml allocation function; document will free the buffer when it is no longer needed (you can't use it anymore). + xml_parse_result load_buffer_inplace_own(void* contents, size_t size, unsigned int options = parse_default, xml_encoding encoding = encoding_auto); + + // Save XML document to writer (semantics is slightly different from xml_node::print, see documentation for details). + void save(xml_writer& writer, const char_t* indent = PUGIXML_TEXT("\t"), unsigned int flags = format_default, xml_encoding encoding = encoding_auto) const; + + #ifndef PUGIXML_NO_STL + // Save XML document to stream (semantics is slightly different from xml_node::print, see documentation for details). + void save(std::basic_ostream >& stream, const char_t* indent = PUGIXML_TEXT("\t"), unsigned int flags = format_default, xml_encoding encoding = encoding_auto) const; + void save(std::basic_ostream >& stream, const char_t* indent = PUGIXML_TEXT("\t"), unsigned int flags = format_default) const; + #endif + + // Save XML to file + bool save_file(const char* path, const char_t* indent = PUGIXML_TEXT("\t"), unsigned int flags = format_default, xml_encoding encoding = encoding_auto) const; + bool save_file(const wchar_t* path, const char_t* indent = PUGIXML_TEXT("\t"), unsigned int flags = format_default, xml_encoding encoding = encoding_auto) const; + + // Get document element + xml_node document_element() const; + }; + +#ifndef PUGIXML_NO_XPATH + // XPath query return type + enum xpath_value_type + { + xpath_type_none, // Unknown type (query failed to compile) + xpath_type_node_set, // Node set (xpath_node_set) + xpath_type_number, // Number + xpath_type_string, // String + xpath_type_boolean // Boolean + }; + + // XPath parsing result + struct PUGIXML_CLASS xpath_parse_result + { + // Error message (0 if no error) + const char* error; + + // Last parsed offset (in char_t units from string start) + ptrdiff_t offset; + + // Default constructor, initializes object to failed state + xpath_parse_result(); + + // Cast to bool operator + operator bool() const; + + // Get error description + const char* description() const; + }; + + // A single XPath variable + class PUGIXML_CLASS xpath_variable + { + friend class xpath_variable_set; + + protected: + xpath_value_type _type; + xpath_variable* _next; + + xpath_variable(xpath_value_type type); + + // Non-copyable semantics + xpath_variable(const xpath_variable&); + xpath_variable& operator=(const xpath_variable&); + + public: + // Get variable name + const char_t* name() const; + + // Get variable type + xpath_value_type type() const; + + // Get variable value; no type conversion is performed, default value (false, NaN, empty string, empty node set) is returned on type mismatch error + bool get_boolean() const; + double get_number() const; + const char_t* get_string() const; + const xpath_node_set& get_node_set() const; + + // Set variable value; no type conversion is performed, false is returned on type mismatch error + bool set(bool value); + bool set(double value); + bool set(const char_t* value); + bool set(const xpath_node_set& value); + }; + + // A set of XPath variables + class PUGIXML_CLASS xpath_variable_set + { + private: + xpath_variable* _data[64]; + + void _assign(const xpath_variable_set& rhs); + void _swap(xpath_variable_set& rhs); + + xpath_variable* _find(const char_t* name) const; + + static bool _clone(xpath_variable* var, xpath_variable** out_result); + static void _destroy(xpath_variable* var); + + public: + // Default constructor/destructor + xpath_variable_set(); + ~xpath_variable_set(); + + // Copy constructor/assignment operator + xpath_variable_set(const xpath_variable_set& rhs); + xpath_variable_set& operator=(const xpath_variable_set& rhs); + + #ifdef PUGIXML_HAS_MOVE + // Move semantics support + xpath_variable_set(xpath_variable_set&& rhs) PUGIXML_NOEXCEPT; + xpath_variable_set& operator=(xpath_variable_set&& rhs) PUGIXML_NOEXCEPT; + #endif + + // Add a new variable or get the existing one, if the types match + xpath_variable* add(const char_t* name, xpath_value_type type); + + // Set value of an existing variable; no type conversion is performed, false is returned if there is no such variable or if types mismatch + bool set(const char_t* name, bool value); + bool set(const char_t* name, double value); + bool set(const char_t* name, const char_t* value); + bool set(const char_t* name, const xpath_node_set& value); + + // Get existing variable by name + xpath_variable* get(const char_t* name); + const xpath_variable* get(const char_t* name) const; + }; + + // A compiled XPath query object + class PUGIXML_CLASS xpath_query + { + private: + void* _impl; + xpath_parse_result _result; + + typedef void (*unspecified_bool_type)(xpath_query***); + + // Non-copyable semantics + xpath_query(const xpath_query&); + xpath_query& operator=(const xpath_query&); + + public: + // Construct a compiled object from XPath expression. + // If PUGIXML_NO_EXCEPTIONS is not defined, throws xpath_exception on compilation errors. + explicit xpath_query(const char_t* query, xpath_variable_set* variables = PUGIXML_NULL); + + // Constructor + xpath_query(); + + // Destructor + ~xpath_query(); + + #ifdef PUGIXML_HAS_MOVE + // Move semantics support + xpath_query(xpath_query&& rhs) PUGIXML_NOEXCEPT; + xpath_query& operator=(xpath_query&& rhs) PUGIXML_NOEXCEPT; + #endif + + // Get query expression return type + xpath_value_type return_type() const; + + // Evaluate expression as boolean value in the specified context; performs type conversion if necessary. + // If PUGIXML_NO_EXCEPTIONS is not defined, throws std::bad_alloc on out of memory errors. + bool evaluate_boolean(const xpath_node& n) const; + + // Evaluate expression as double value in the specified context; performs type conversion if necessary. + // If PUGIXML_NO_EXCEPTIONS is not defined, throws std::bad_alloc on out of memory errors. + double evaluate_number(const xpath_node& n) const; + + #ifndef PUGIXML_NO_STL + // Evaluate expression as string value in the specified context; performs type conversion if necessary. + // If PUGIXML_NO_EXCEPTIONS is not defined, throws std::bad_alloc on out of memory errors. + string_t evaluate_string(const xpath_node& n) const; + #endif + + // Evaluate expression as string value in the specified context; performs type conversion if necessary. + // At most capacity characters are written to the destination buffer, full result size is returned (includes terminating zero). + // If PUGIXML_NO_EXCEPTIONS is not defined, throws std::bad_alloc on out of memory errors. + // If PUGIXML_NO_EXCEPTIONS is defined, returns empty set instead. + size_t evaluate_string(char_t* buffer, size_t capacity, const xpath_node& n) const; + + // Evaluate expression as node set in the specified context. + // If PUGIXML_NO_EXCEPTIONS is not defined, throws xpath_exception on type mismatch and std::bad_alloc on out of memory errors. + // If PUGIXML_NO_EXCEPTIONS is defined, returns empty node set instead. + xpath_node_set evaluate_node_set(const xpath_node& n) const; + + // Evaluate expression as node set in the specified context. + // Return first node in document order, or empty node if node set is empty. + // If PUGIXML_NO_EXCEPTIONS is not defined, throws xpath_exception on type mismatch and std::bad_alloc on out of memory errors. + // If PUGIXML_NO_EXCEPTIONS is defined, returns empty node instead. + xpath_node evaluate_node(const xpath_node& n) const; + + // Get parsing result (used to get compilation errors in PUGIXML_NO_EXCEPTIONS mode) + const xpath_parse_result& result() const; + + // Safe bool conversion operator + operator unspecified_bool_type() const; + + // Borland C++ workaround + bool operator!() const; + }; + + #ifndef PUGIXML_NO_EXCEPTIONS + #if defined(_MSC_VER) + // C4275 can be ignored in Visual C++ if you are deriving + // from a type in the Standard C++ Library + #pragma warning(push) + #pragma warning(disable: 4275) + #endif + // XPath exception class + class PUGIXML_CLASS xpath_exception: public std::exception + { + private: + xpath_parse_result _result; + + public: + // Construct exception from parse result + explicit xpath_exception(const xpath_parse_result& result); + + // Get error message + virtual const char* what() const throw() PUGIXML_OVERRIDE; + + // Get parse result + const xpath_parse_result& result() const; + }; + #if defined(_MSC_VER) + #pragma warning(pop) + #endif + #endif + + // XPath node class (either xml_node or xml_attribute) + class PUGIXML_CLASS xpath_node + { + private: + xml_node _node; + xml_attribute _attribute; + + typedef void (*unspecified_bool_type)(xpath_node***); + + public: + // Default constructor; constructs empty XPath node + xpath_node(); + + // Construct XPath node from XML node/attribute + xpath_node(const xml_node& node); + xpath_node(const xml_attribute& attribute, const xml_node& parent); + + // Get node/attribute, if any + xml_node node() const; + xml_attribute attribute() const; + + // Get parent of contained node/attribute + xml_node parent() const; + + // Safe bool conversion operator + operator unspecified_bool_type() const; + + // Borland C++ workaround + bool operator!() const; + + // Comparison operators + bool operator==(const xpath_node& n) const; + bool operator!=(const xpath_node& n) const; + }; + +#ifdef __BORLANDC__ + // Borland C++ workaround + bool PUGIXML_FUNCTION operator&&(const xpath_node& lhs, bool rhs); + bool PUGIXML_FUNCTION operator||(const xpath_node& lhs, bool rhs); +#endif + + // A fixed-size collection of XPath nodes + class PUGIXML_CLASS xpath_node_set + { + public: + // Collection type + enum type_t + { + type_unsorted, // Not ordered + type_sorted, // Sorted by document order (ascending) + type_sorted_reverse // Sorted by document order (descending) + }; + + // Constant iterator type + typedef const xpath_node* const_iterator; + + // We define non-constant iterator to be the same as constant iterator so that various generic algorithms (i.e. boost foreach) work + typedef const xpath_node* iterator; + + // Default constructor. Constructs empty set. + xpath_node_set(); + + // Constructs a set from iterator range; data is not checked for duplicates and is not sorted according to provided type, so be careful + xpath_node_set(const_iterator begin, const_iterator end, type_t type = type_unsorted); + + // Destructor + ~xpath_node_set(); + + // Copy constructor/assignment operator + xpath_node_set(const xpath_node_set& ns); + xpath_node_set& operator=(const xpath_node_set& ns); + + #ifdef PUGIXML_HAS_MOVE + // Move semantics support + xpath_node_set(xpath_node_set&& rhs) PUGIXML_NOEXCEPT; + xpath_node_set& operator=(xpath_node_set&& rhs) PUGIXML_NOEXCEPT; + #endif + + // Get collection type + type_t type() const; + + // Get collection size + size_t size() const; + + // Indexing operator + const xpath_node& operator[](size_t index) const; + + // Collection iterators + const_iterator begin() const; + const_iterator end() const; + + // Sort the collection in ascending/descending order by document order + void sort(bool reverse = false); + + // Get first node in the collection by document order + xpath_node first() const; + + // Check if collection is empty + bool empty() const; + + private: + type_t _type; + + xpath_node _storage[1]; + + xpath_node* _begin; + xpath_node* _end; + + void _assign(const_iterator begin, const_iterator end, type_t type); + void _move(xpath_node_set& rhs) PUGIXML_NOEXCEPT; + }; +#endif + +#ifndef PUGIXML_NO_STL + // Convert wide string to UTF8 + std::basic_string, std::allocator > PUGIXML_FUNCTION as_utf8(const wchar_t* str); + std::basic_string, std::allocator > PUGIXML_FUNCTION as_utf8(const std::basic_string, std::allocator >& str); + + // Convert UTF8 to wide string + std::basic_string, std::allocator > PUGIXML_FUNCTION as_wide(const char* str); + std::basic_string, std::allocator > PUGIXML_FUNCTION as_wide(const std::basic_string, std::allocator >& str); +#endif + + // Memory allocation function interface; returns pointer to allocated memory or NULL on failure + typedef void* (*allocation_function)(size_t size); + + // Memory deallocation function interface + typedef void (*deallocation_function)(void* ptr); + + // Override default memory management functions. All subsequent allocations/deallocations will be performed via supplied functions. + void PUGIXML_FUNCTION set_memory_management_functions(allocation_function allocate, deallocation_function deallocate); + + // Get current memory management functions + allocation_function PUGIXML_FUNCTION get_memory_allocation_function(); + deallocation_function PUGIXML_FUNCTION get_memory_deallocation_function(); +} +OIIO_NAMESPACE_3_1_END + +#if !defined(PUGIXML_NO_STL) && (defined(_MSC_VER) || defined(__ICC)) +namespace std +{ + // Workarounds for (non-standard) iterator category detection for older versions (MSVC7/IC8 and earlier) + std::bidirectional_iterator_tag PUGIXML_FUNCTION _Iter_cat(const pugi::xml_node_iterator&); + std::bidirectional_iterator_tag PUGIXML_FUNCTION _Iter_cat(const pugi::xml_attribute_iterator&); + std::bidirectional_iterator_tag PUGIXML_FUNCTION _Iter_cat(const pugi::xml_named_node_iterator&); +} +#endif + +#if !defined(PUGIXML_NO_STL) && defined(__SUNPRO_CC) +namespace std +{ + // Workarounds for (non-standard) iterator category detection + std::bidirectional_iterator_tag PUGIXML_FUNCTION __iterator_category(const pugi::xml_node_iterator&); + std::bidirectional_iterator_tag PUGIXML_FUNCTION __iterator_category(const pugi::xml_attribute_iterator&); + std::bidirectional_iterator_tag PUGIXML_FUNCTION __iterator_category(const pugi::xml_named_node_iterator&); +} +#endif + +#endif + +// Make sure implementation is included in header-only mode +// Use macro expansion in #include to work around QMake (QTBUG-11923) +#if defined(PUGIXML_HEADER_ONLY) && !defined(PUGIXML_SOURCE) +# define PUGIXML_SOURCE "pugixml.cpp" +# include PUGIXML_SOURCE +#endif + +/** + * Copyright (c) 2006-2022 Arseny Kapoulkine + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + */ diff --git a/third_party/tlRender-install-Release/include/OpenImageIO/errorhandler.h b/third_party/tlRender-install-Release/include/OpenImageIO/errorhandler.h new file mode 100644 index 00000000..ac96204b --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenImageIO/errorhandler.h @@ -0,0 +1,139 @@ +// Copyright Contributors to the OpenImageIO project. +// SPDX-License-Identifier: Apache-2.0 +// https://github.com/AcademySoftwareFoundation/OpenImageIO + + +#pragma once + +#include +#include +#include + + +OIIO_NAMESPACE_3_1_BEGIN + +/// ErrorHandler is a simple class that accepts error messages +/// (classified as errors, severe errors, warnings, info, messages, or +/// debug output) and handles them somehow. By default it just prints +/// the messages to stdout and/or stderr (and suppresses some based on a +/// "verbosity" level). +/// +/// The basic idea is that your library code has no idea whether some +/// application that will use it someday will want errors or other +/// output to be sent to the console, go to a log file, be intercepted +/// by the calling application, or something else. So you punt, by +/// having your library take a pointer to an ErrorHandler, passed in +/// from the calling app (and possibly subclassed to have arbitrarily +/// different behavior from the default console output) and make all +/// error-like output via the ErrorHandler*. +/// +class OIIO_UTIL_API ErrorHandler { +public: + /// Error categories. We use broad categories in the high order bits. + /// A library may just use these categories, or may create individual + /// error codes as long as they have the right high bits to designate + /// their category (file not found = ERROR + 1, etc.). + enum ErrCode { + EH_NO_ERROR = 0, // never sent to handler + EH_MESSAGE = 0 << 16, + EH_INFO = 1 << 16, + EH_WARNING = 2 << 16, + EH_ERROR = 3 << 16, + EH_SEVERE = 4 << 16, + EH_DEBUG = 5 << 16 + }; + + /// VerbosityLevel controls how much detail the calling app wants. + /// + enum VerbosityLevel { + QUIET = 0, ///< Show MESSAGE, SEVERE, ERROR only + NORMAL = 1, ///< Show MESSAGE, SEVERE, ERROR, WARNING + VERBOSE = 2 ///< Like NORMAL, but also show INFO + }; + + ErrorHandler() noexcept + : m_verbosity(NORMAL) + { + } + virtual ~ErrorHandler() {} + + /// Set desired verbosity level. + void verbosity(int v) noexcept { m_verbosity = v; } + + /// Return the current verbosity level. + int verbosity() const noexcept { return m_verbosity; } + + /// The main (or "full detail") method -- takes a code (with high + /// bits being an ErrCode) and writes the message, with a prefix + /// indicating the error category (no prefix for "MESSAGE") and + /// error string. + virtual void operator()(int errcode, const std::string& msg); + + // Base cases -- take a single string + void info(const std::string& msg) { (*this)(EH_INFO, msg); } + void warning(const std::string& msg) { (*this)(EH_WARNING, msg); } + void error(const std::string& msg) { (*this)(EH_ERROR, msg); } + void severe(const std::string& msg) { (*this)(EH_SEVERE, msg); } + void message(const std::string& msg) { (*this)(EH_MESSAGE, msg); } +#ifndef NDEBUG + void debug(const std::string& msg) { (*this)(EH_DEBUG, msg); } +#else + void debug(const std::string&) {} +#endif + + // + // Formatted output with std::format notation. Use these if you + // specifically want std::format-notation, even before format() changes + // to the new notation in some future OIIO release. + // + template + void infofmt(const char* format, const Args&... args) + { + if (verbosity() >= VERBOSE) + info(Strutil::fmt::format(format, args...)); + } + + template + void warningfmt(const char* format, const Args&... args) + { + if (verbosity() >= NORMAL) + warning(Strutil::fmt::format(format, args...)); + } + + template + void errorfmt(const char* format, const Args&... args) + { + error(Strutil::fmt::format(format, args...)); + } + + template + void severefmt(const char* format, const Args&... args) + { + severe(Strutil::fmt::format(format, args...)); + } + + template + void messagefmt(const char* format, const Args&... args) + { + if (verbosity() > QUIET) + message(Strutil::fmt::format(format, args...)); + } + + template + void debugfmt(const char* format, const Args&... args) + { +#ifndef NDEBUG + debug(Strutil::fmt::format(format, args...)); +#endif + } + + /// One built-in handler that can always be counted on to be present + /// and just echoes the error messages to the console (stdout or + /// stderr, depending on the error category). + static ErrorHandler& default_handler(); + +private: + int m_verbosity; +}; + +OIIO_NAMESPACE_3_1_END diff --git a/third_party/tlRender-install-Release/include/OpenImageIO/export.h b/third_party/tlRender-install-Release/include/OpenImageIO/export.h new file mode 100644 index 00000000..3c1d7705 --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenImageIO/export.h @@ -0,0 +1,78 @@ +// Copyright Contributors to the OpenImageIO project. +// SPDX-License-Identifier: Apache-2.0 +// https://github.com/AcademySoftwareFoundation/OpenImageIO + + +#pragma once + + +/// \file +/// Macros necessary for proper symbol export from dynamic libraries. + + +/// +/// On Windows, when compiling code that will end up in a DLL, symbols +/// must be marked as 'exported' (i.e. __declspec(dllexport)) or they +/// won't be visible to programs linking against the DLL. +/// +/// In addition, when compiling the application code that calls the DLL, +/// if a routine is marked as 'imported' (i.e. __declspec(dllimport)), +/// the compiler can be smart about eliminating a level of calling +/// indirection. But you DON'T want to use __declspec(dllimport) when +/// calling a function from within its own DLL (it will still compile +/// correctly, just not with maximal efficiency). Which is quite the +/// dilemma since the same header file is used by both the library and +/// its clients. Sheesh! +/// +/// But on Linux/OSX as well, we want to only have the DSO export the +/// symbols we designate as the public interface. So we link with +/// -fvisibility=hidden to default to hiding the symbols. See +/// http://gcc.gnu.org/wiki/Visibility +/// +/// We solve this awful mess by defining these macros: +/// +/// OIIO_API - used for the OpenImageIO public API. Normally, assumes +/// that it's being seen by a client of the library, and +/// therefore declare as 'imported'. But if +/// OpenImageIO_EXPORT is defined (as is done by CMake +/// when compiling the library itself), change the +/// declaration to 'exported'. +/// OIIO_EXPORT - explicitly exports a symbol that isn't part of the +/// public API but still needs to be visible. +/// OIIO_LOCAL - explicitly hides a symbol that might otherwise be +/// exported +/// +/// + +#if defined(_WIN32) || defined(__CYGWIN__) +# ifdef OIIO_STATIC_DEFINE +# define OIIO_IMPORT +# define OIIO_EXPORT +# else +# define OIIO_IMPORT __declspec(dllimport) +# define OIIO_EXPORT __declspec(dllexport) +# endif +# define OIIO_LOCAL +#else +# define OIIO_IMPORT __attribute__((visibility("default"))) +# define OIIO_EXPORT __attribute__((visibility("default"))) +# define OIIO_LOCAL __attribute__((visibility("hidden"))) +#endif + +#if defined(OpenImageIO_EXPORTS) +# define OIIO_API OIIO_EXPORT +#else +# define OIIO_API OIIO_IMPORT +#endif + +#if defined(OpenImageIO_Util_EXPORTS) +# define OIIO_UTIL_API OIIO_EXPORT +#else +# define OIIO_UTIL_API OIIO_IMPORT +#endif + +#if defined(OpenImageIO_C_EXPORTS) +# define OIIOC_API OIIO_EXPORT +#else +# define OIIOC_API OIIO_IMPORT +#endif diff --git a/third_party/tlRender-install-Release/include/OpenImageIO/filesystem.h b/third_party/tlRender-install-Release/include/OpenImageIO/filesystem.h new file mode 100644 index 00000000..3982ea46 --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenImageIO/filesystem.h @@ -0,0 +1,589 @@ +// Copyright Contributors to the OpenImageIO project. +// SPDX-License-Identifier: Apache-2.0 +// https://github.com/AcademySoftwareFoundation/OpenImageIO + +// clang-format off + +/// @file filesystem.h +/// +/// @brief Utilities for dealing with file names and files portably. +/// +/// Some helpful nomenclature: +/// - "filename" - a file or directory name, relative or absolute +/// - "searchpath" - a list of directories separated by ':' or ';'. +/// + + +#pragma once + +#define OIIO_FILESYSTEM_H + +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +#if defined(_WIN32) && defined(__GLIBCXX__) +# define OIIO_FILESYSTEM_USE_STDIO_FILEBUF 1 +# include +#endif + + +// Define symbols that let client applications determine if newly added +// features are supported. +#define OIIO_FILESYSTEM_SUPPORTS_IOPROXY 1 + + + +OIIO_NAMESPACE_3_1_BEGIN + +#if OIIO_FILESYSTEM_USE_STDIO_FILEBUF +// MingW uses GCC to build, but does not support having a wchar_t* passed as argument +// of ifstream::open or ofstream::open. To properly support UTF-8 encoding on MingW we must +// use the __gnu_cxx::stdio_filebuf GNU extension that can be used with _wfsopen and returned +// into a istream which share the same API as ifsteam. The same reasoning holds for ofstream. +using ifstream = basic_ifstream; +using ofstream = basic_ofstream; +#else +using ifstream = std::ifstream; +using ofstream = std::ofstream; +#endif + + + +/// @namespace Filesystem +/// +/// @brief Platform-independent utilities for manipulating file names, +/// files, directories, and other file system miscellany. + +namespace Filesystem { + +/// Return the filename (excluding any directories, but including the +/// file extension, if any) of a UTF-8 encoded filepath. +OIIO_UTIL_API std::string filename (string_view filepath) noexcept; + +/// Return the file extension (including the last '.' if +/// include_dot=true) of a UTF-8 encoded filename or filepath. +OIIO_UTIL_API std::string extension (string_view filepath, + bool include_dot=true) noexcept; + +/// Return all but the last part of the UTF-8 encoded path, for example, +/// parent_path("foo/bar") returns "foo", and parent_path("foo") +/// returns "". +OIIO_UTIL_API std::string parent_path (string_view filepath) noexcept; + +/// Replace the file extension of a UTF-8 encoded filename or filepath. Does +/// not alter filepath, just returns a new string. Note that the +/// new_extension should contain a leading '.' dot. +OIIO_UTIL_API std::string replace_extension (const std::string &filepath, + const std::string &new_extension) noexcept; + +/// Return the filepath in generic format, not any OS-specific conventions. +/// Input and output are both UTF-8 encoded. +OIIO_UTIL_API std::string generic_filepath (string_view filepath) noexcept; + +/// Turn a searchpath (multiple UTF-8 encoded directory paths separated by ':' +/// or ';') into a vector containing the name of each individual +/// directory. If validonly is true, only existing and readable directories +/// will end up in the list. N.B., the directory names will not have trailing +/// slashes. +OIIO_UTIL_API std::vector +searchpath_split(string_view searchpath, bool validonly = false); + +inline void searchpath_split (string_view searchpath, + std::vector &dirs, + bool validonly = false) +{ + dirs = searchpath_split(searchpath, validonly); +} + +/// Find the first instance of a filename existing in a vector of +/// directories, returning the full path as a string. If the file is +/// not found in any of the listed directories, return an empty string. +/// If the filename is absolute, the directory list will not be used. +/// If testcwd is true, "." will be tested before the searchpath; +/// otherwise, "." will only be tested if it's explicitly in dirs. If +/// recursive is true, the directories will be searched recursively, +/// finding a matching file in any subdirectory of the directories +/// listed in dirs; otherwise. All file and directory names are presumed +/// to be UTF-8 encoded. +OIIO_UTIL_API std::string searchpath_find (const std::string &filename, + const std::vector &dirs, + bool testcwd = true, + bool recursive = false); + +/// Find the given program in the `$PATH` searchpath and return its full path. +/// If the program is not found, return an empty string. +OIIO_UTIL_API std::string find_program(string_view program); + +/// Fill a vector-of-strings with the names of all files contained by +/// directory dirname. If recursive is true, it will return all files below +/// the directory (even in subdirectories). If filter_regex is supplied and +/// non-empty, only filenames matching the regular expression will be +/// returned. Return true if ok, false if there was an error (such as +/// dirname not being found or not actually being a directory). All file +/// and directory names are presumed to be UTF-8 encoded. +OIIO_UTIL_API bool get_directory_entries (const std::string &dirname, + std::vector &filenames, + bool recursive = false, + const std::string &filter_regex=std::string()); + +/// Return true if the UTF-8 encoded path is an "absolute" (not relative) +/// path. If 'dot_is_absolute' is true, consider "./foo" absolute. +OIIO_UTIL_API bool path_is_absolute (string_view path, + bool dot_is_absolute=false); + +/// Return true if the UTF-8 encoded path exists. +/// +OIIO_UTIL_API bool exists (string_view path) noexcept; + + +/// Return true if the UTF-8 encoded path exists and is a directory. +/// +OIIO_UTIL_API bool is_directory (string_view path) noexcept; + +/// Return true if the UTF-8 encoded path exists and is a regular file. +/// +OIIO_UTIL_API bool is_regular (string_view path) noexcept; + +/// Return true if the UTF-8 encoded path is an executable file (by any of +/// user, group, or owner). +OIIO_UTIL_API bool is_executable(string_view path) noexcept; + +/// Create the directory, whose name is UTF-8 encoded. Return true for +/// success, false for failure and place an error message in err. +OIIO_UTIL_API bool create_directory (string_view path, std::string &err); +inline bool create_directory (string_view path) { + std::string err; + return create_directory (path, err); +} + +/// Create directory for every element in `path` that does not already exist. +/// Return true for success, false for failure and place an error message in err. +OIIO_UTIL_API bool create_directories(string_view path, std::string& err) noexcept; + +/// Copy a file, directory, or link. It is an error if 'to' already exists. +/// The file names are all UTF-8 encoded. Return true upon success, false upon +/// failure and place an error message in err. +OIIO_UTIL_API bool copy (string_view from, string_view to, std::string &err); +inline bool copy (string_view from, string_view to) { + std::string err; + return copy (from, to, err); +} + +/// Rename (or move) a file, directory, or link. The file names are all UTF-8 +/// encoded. Return true upon success, false upon failure and place an error +/// message in err. +OIIO_UTIL_API bool rename (string_view from, string_view to, std::string &err); +inline bool rename (string_view from, string_view to) { + std::string err; + return rename (from, to, err); +} + +/// Remove the file or directory. The file names are all UTF-8 encoded. Return +/// true for success, false for failure and place an error message in err. +OIIO_UTIL_API bool remove (string_view path, std::string &err); +inline bool remove (string_view path) { + std::string err; + return remove (path, err); +} + +/// Remove the file or directory, including any children (recursively). The +/// file names are all UTF-8 encoded. Return the number of files removed. +/// Place an error message (if applicable in err. +OIIO_UTIL_API unsigned long long remove_all (string_view path, std::string &err); +inline unsigned long long remove_all (string_view path) { + std::string err; + return remove_all (path, err); +} + +/// Return a directory path (UTF-8 encoded) where temporary files can be made. +/// +OIIO_UTIL_API std::string temp_directory_path (); + +/// Return a unique filename suitable for making a temporary file or +/// directory. The file names are all UTF-8 encoded. +/// NOTE: this function is not recommended, because it's a known security +/// and stability issue, since another process *could* create a file of the +/// same name after the path is retrieved but before it is created. So in +/// the long run, we want to wean ourselves off this. But in practice, it's +/// not an emergency. We'll replace this with something else eventually. +OIIO_UTIL_API std::string unique_path (string_view model="%%%%-%%%%-%%%%-%%%%"); + +/// Version of fopen that can handle UTF-8 paths even on Windows. +OIIO_UTIL_API FILE *fopen (string_view path, string_view mode); + +/// Version of fseek that works with 64 bit offsets on all systems. +/// Like std::fseek, returns zero on success, nonzero on failure. +OIIO_UTIL_API int fseek (FILE *file, int64_t offset, int whence); + +/// Version of ftell that works with 64 bit offsets on all systems. +OIIO_UTIL_API int64_t ftell (FILE *file); + +/// Read one line of text from an open text file file until the hitting a +/// newline, reaching `maxlen` characters without encountering a newline, or +/// reaching the end of the file, and return the characters read as a +/// std::string. The newline will be included in the returned string, unless +/// the line was too long, in which case the string returned will be the +/// partial result with no newline at the end. If an error occurs or if the +/// end of the file is encountered before either a newline is reached or +/// maxlen characters are read, an empty string will be returned. +OIIO_UTIL_API std::string getline(FILE* file, size_t maxlen = 4096); + +/// Return the current (".") directory path. +/// +OIIO_UTIL_API std::string current_path (); + +/// Version of std::ifstream.open that can handle UTF-8 paths +/// +OIIO_UTIL_API void open (ifstream &stream, string_view path, + std::ios_base::openmode mode = std::ios_base::in); + +/// Version of std::ofstream.open that can handle UTF-8 paths +/// +OIIO_UTIL_API void open (ofstream &stream, string_view path, + std::ios_base::openmode mode = std::ios_base::out); + +/// Version of C open() that can handle UTF-8 paths, returning an integer +/// file descriptor. Note that the flags are passed to underlying calls to +/// open()/_open() and therefore may be OS specific -- use with caution! If +/// you want more OS-agnostic file opening, prefer the FILE or stream +/// methods of IO. (N.B.: use of this function requires the caller to +/// `#include ` in order to get the definitions of the flags.) +OIIO_UTIL_API int open (string_view path, int flags); + +/// Read the entire contents of the named text file (as a UTF-8 encoded +/// filename) and place it in str, returning true on success, false on +/// failure. The optional size parameter gives the maximum amount to read +/// (for memory safety) and defaults to 16MB. Set size to 0 for no limit +/// (use at your own risk). +OIIO_UTIL_API bool read_text_file(string_view filename, std::string &str, + size_t size = (1UL << 24)); + +/// Run a command line process and capture its console output in `str`, +/// returning true on success, false on failure. The optional size parameter +/// gives the maximum amount to read (for memory safety) and defaults to 16MB. +/// Set size to 0 for no limit (use at your own risk). +OIIO_UTIL_API bool read_text_from_command(string_view command, + std::string &str, + size_t size = (1UL << 24)); + +/// Write the entire contents of the string `str` to the named file (UTF-8 +/// encoded), overwriting any prior contents of the file (if it existed), +/// returning true on success, false on failure. +OIIO_UTIL_API bool write_text_file (string_view filename, string_view str); + +/// Write the entire contents of the span `data` to the file (UTF-8 encoded) +/// as a binary blob, overwriting any prior contents of the file (if it +/// existed), returning true on success, false on failure. +template +bool write_binary_file (string_view filename, cspan data) +{ + ofstream out; + Filesystem::open(out, filename, std::ios::out | std::ios::binary); + out.write((const char*)data.data(), data.size() * sizeof(T)); + return out.good(); +} + +template +bool write_binary_file (string_view filename, const std::vector& data) +{ + return write_binary_file(filename, cspan(data)); +} + +/// Read a maximum of n bytes from the named file, starting at position pos +/// (which defaults to the start of the file), storing results in +/// buffer[0..n-1]. Return the number of bytes read, which will be n for +/// full success, less than n if the file was fewer than n+pos bytes long, +/// or 0 if the file did not exist or could not be read. +OIIO_UTIL_API size_t read_bytes (string_view path, void *buffer, size_t n, + size_t pos=0); + +/// Get last modified time of the file named by `path` (UTF-8 encoded). +/// +OIIO_UTIL_API std::time_t last_write_time (string_view path) noexcept; + +/// Set last modified time on the file named by `path` (UTF-8 encoded). +/// +OIIO_UTIL_API void last_write_time (string_view path, std::time_t time) noexcept; + +/// Return the size of the file (in bytes), or uint64_t(-1) if there is any +/// error. The file name is UTF-8 encoded. +OIIO_UTIL_API uint64_t file_size (string_view path) noexcept; + +/// Ensure command line arguments are UTF-8 everywhere. +OIIO_UTIL_API void convert_native_arguments (int argc, const char *argv[]); + +/// Turn a sequence description string into a vector of integers. +/// The sequence description can be any of the following +/// * A value (e.g., "3") +/// * A value range ("1-10", "10-1", "1-10x3", "1-10y3"): +/// START-FINISH A range, inclusive of start & finish +/// START-FINISHxSTEP A range with step size +/// START-FINISHySTEP The complement of a stepped range, that is, +/// all numbers within the range that would +/// NOT have been selected by 'x'. +/// Note that START may be > FINISH, or STEP may be negative. +/// * Multiple values or ranges, separated by a comma (e.g., "3,4,10-20x2") +/// Return true upon success, false if the description was too malformed +/// to generate a sequence. +OIIO_UTIL_API bool enumerate_sequence (string_view desc, + std::vector &numbers); + +/// Given a pattern (such as "foo.#.tif" or "bar.1-10#.exr"), return a +/// normalized pattern in printf format (such as "foo.%04d.tif") and a +/// framespec (such as "1-10"). +/// +/// If framepadding_override is > 0, it overrides any specific padding amount +/// in the original pattern. +/// +/// Return true upon success, false if the description was too malformed +/// to generate a sequence. +OIIO_UTIL_API bool parse_pattern (const char *pattern, + int framepadding_override, + std::string &normalized_pattern, + std::string &framespec); + + +/// Given a normalized pattern (such as "foo.%04d.tif") and a list of frame +/// numbers, generate a list of filenames. All the filename strings will be +/// presumed to be UTF-8 encoded. +/// +/// Return true upon success, false if the description was too malformed +/// to generate a sequence. +OIIO_UTIL_API bool enumerate_file_sequence (const std::string &pattern, + const std::vector &numbers, + std::vector &filenames); + +/// Given a normalized pattern (such as "foo_%V.%04d.tif") and a list of frame +/// numbers, generate a list of filenames. "views" is list of per-frame views, +/// or empty. In each frame filename, "%V" is replaced with the view, and "%v" +/// is replaced with the first character of the view. All the filename strings +/// will be presumed to be UTF-8 encoded. +/// +/// Return true upon success, false if the description was too malformed to +/// generate a sequence. +OIIO_UTIL_API bool enumerate_file_sequence (const std::string &pattern, + const std::vector &numbers, + const std::vector &views, + std::vector &filenames); + +/// Given a normalized pattern (such as "/path/to/foo.%04d.tif") scan the +/// containing directory (/path/to) for matching frame numbers, views and +/// files. "%V" in the pattern matches views, while "%v" matches the first +/// character of each entry in views. All the filename strings will be +/// presumed to be UTF-8 encoded. +/// +/// Return true upon success, false if the directory doesn't exist or the +/// pattern can't be parsed. +OIIO_UTIL_API bool scan_for_matching_filenames (const std::string &pattern, + const std::vector &views, + std::vector &frame_numbers, + std::vector &frame_views, + std::vector &filenames); + +/// Given a normalized pattern (such as "/path/to/foo.%04d.tif") scan the +/// containing directory (/path/to) for matching frame numbers and files. All +/// the filename strings will be presumed to be UTF-8 encoded. +/// +/// Return true upon success, false if the directory doesn't exist or the +/// pattern can't be parsed. +OIIO_UTIL_API bool scan_for_matching_filenames (const std::string &pattern, + std::vector &numbers, + std::vector &filenames); + +/// Convert a UTF-8 encoded filename into a regex-safe pattern -- any special +/// regex characters `.`, `(`, `)`, `[`, `]`, `{`, `}` are backslashed. If +/// `simple_glob` is also true, then replace `?` with `.?` and `*` with `.*`. +/// This doesn't support full Unix command line glob syntax (no char sets +/// `[abc]` or string sets `{ab,cd,ef}`), but it does handle simple globbing +/// of `?` to mean any single character and `*` to mean any sequence of 0 or +/// more characters. +OIIO_UTIL_API std::string filename_to_regex(string_view pattern, + bool simple_glob = true); + + + +/// Proxy class for I/O. This provides a simplified interface for file I/O +/// that can have custom overrides. All char-based filenames are assumed to be +/// UTF-8 encoded. +class OIIO_UTIL_API IOProxy { +public: + enum Mode { Closed = 0, Read = 'r', Write = 'w' }; + IOProxy () {} + IOProxy (string_view filename, Mode mode) + : m_filename(filename), m_mode(mode) {} + IOProxy(const std::wstring& filename, Mode mode) + : IOProxy(Strutil::utf16_to_utf8(filename), mode) {} + virtual ~IOProxy () { } + virtual const char* proxytype () const = 0; + virtual void close () { } + virtual bool opened () const { return mode() != Closed; } + virtual int64_t tell() const { return m_pos; } + // Seek to the position, returning true on success, false on failure. + // Note the difference between this and std::fseek() which returns 0 on + // success, and -1 on failure. + virtual bool seek (int64_t offset) { m_pos = offset; return true; } + // Read `size` bytes at the current position into `buf[]`, returning the + // number of bytes successfully read. + virtual size_t read (void *buf, size_t size); + // Write `size` bytes from `buf[]` at the current position, returning the + // number of bytes successfully written. + virtual size_t write (const void *buf, size_t size); + + /// Read `size` bytes starting at the `offset` position into `buf[]`, + /// returning the number of bytes successfully read. This function does + /// not alter the current file position. This function is thread-safe against + /// all other concurrent calls to pread() and pwrite(), but not against any + /// other function of IOProxy. + virtual size_t pread (void *buf, size_t size, int64_t offset); + + /// Write `size` bytes from `buf[]` to file starting at the `offset` position, + /// returning the number of bytes successfully written. This function does + /// not alter the current file position. This function is thread-safe against + /// all other concurrent calls to pread() and pwrite(), but not against any + /// other function of IOProxy. + virtual size_t pwrite (const void *buf, size_t size, int64_t offset); + + // Return the total size of the proxy data, in bytes. + virtual size_t size () const { return 0; } + virtual void flush() { } + + Mode mode () const { return m_mode; } + const std::string& filename () const { return m_filename; } + template size_t read (span buf) { + return read (buf.data(), buf.size()*sizeof(T)); + } + template size_t write (span buf) { + return write (buf.data(), buf.size()*sizeof(T)); + } + size_t write (string_view buf) { + return write (buf.data(), buf.size()); + } + bool seek (int64_t offset, int origin) { + return seek ((origin == SEEK_SET ? offset : 0) + + (origin == SEEK_CUR ? offset+tell() : 0) + + (origin == SEEK_END ? offset+int64_t(size()) : 0)); + } + + #define OIIO_IOPROXY_HAS_ERROR 1 + std::string error() const; + void error(string_view e); + +protected: + std::string m_filename; + int64_t m_pos = 0; + Mode m_mode = Closed; + std::string m_error; +}; + + +/// IOProxy subclass for reading or writing (plus re-reading) that wraps C +/// stdio 'FILE'. +class OIIO_UTIL_API IOFile : public IOProxy { +public: + // Construct from a filename, open, own the FILE*. + IOFile(string_view filename, Mode mode); + IOFile(const std::wstring& filename, Mode mode) + : IOFile(Strutil::utf16_to_utf8(filename), mode) {} + // Construct from an already-open FILE* that is owned by the caller. + // Caller is responsible for closing the FILE* after the proxy is gone. + IOFile(FILE* file, Mode mode); + ~IOFile() override; + const char* proxytype() const override { return "file"; } + void close() override; + bool seek(int64_t offset) override; + size_t read(void* buf, size_t size) override; + size_t write(const void* buf, size_t size) override; + size_t pread(void* buf, size_t size, int64_t offset) override; + size_t pwrite(const void* buf, size_t size, int64_t offset) override; + size_t size() const override; + void flush() override; + + // Access the FILE* + FILE* handle() const { return m_file; } + +protected: + FILE* m_file = nullptr; + size_t m_size = 0; + bool m_auto_close = false; + std::mutex m_mutex; +}; + + +/// IOProxy subclass for writing that wraps a std::vector that will +/// grow as we write. +class OIIO_UTIL_API IOVecOutput : public IOProxy { +public: + // Construct, IOVecOutput owns its own vector. + IOVecOutput() + : IOProxy("", IOProxy::Write) + , m_buf(m_local_buf) + { + } + // Construct to wrap an existing vector. + IOVecOutput(std::vector& buf) + : IOProxy("", Write) + , m_buf(buf) + { + } + const char* proxytype() const override { return "vecoutput"; } + size_t read(void* buf, size_t size) override; + size_t write(const void* buf, size_t size) override; + size_t pread(void* buf, size_t size, int64_t offset) override; + size_t pwrite(const void* buf, size_t size, int64_t offset) override; + size_t size() const override { return m_buf.size(); } + + // Access the buffer + std::vector& buffer() const { return m_buf; } + +protected: + std::vector& m_buf; // reference to buffer + std::vector m_local_buf; // our own buffer + std::mutex m_mutex; // protect the buffer +}; + + + +/// IOProxy subclass for reading that wraps an cspan. +class OIIO_UTIL_API IOMemReader : public IOProxy { +public: + IOMemReader(const void* buf, size_t size) + : IOProxy("", Read) + , m_buf((const unsigned char*)buf, size) + { + } + IOMemReader(cspan buf) + : IOProxy("", Read) + , m_buf(buf.data(), buf.size()) + { + } + const char* proxytype() const override { return "memreader"; } + bool seek(int64_t offset) override + { + m_pos = offset; + return true; + } + size_t read(void* buf, size_t size) override; + size_t pread(void* buf, size_t size, int64_t offset) override; + size_t size() const override { return m_buf.size(); } + + // Access the buffer (caveat emptor) + cspan buffer() const noexcept { return m_buf; } + +protected: + cspan m_buf; +}; + +}; // namespace Filesystem + +OIIO_NAMESPACE_3_1_END diff --git a/third_party/tlRender-install-Release/include/OpenImageIO/filter.h b/third_party/tlRender-install-Release/include/OpenImageIO/filter.h new file mode 100644 index 00000000..5bc00f0e --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenImageIO/filter.h @@ -0,0 +1,159 @@ +// Copyright Contributors to the OpenImageIO project. +// SPDX-License-Identifier: Apache-2.0 +// https://github.com/AcademySoftwareFoundation/OpenImageIO + + +#pragma once + +#include + +#include +#include +#include + + +OIIO_NAMESPACE_3_1_BEGIN + +/// Quick structure that describes a filter. +/// +class OIIO_UTIL_API FilterDesc { +public: + const char* name; ///< name of the filter + int dim; ///< dimensionality: 1 or 2 + float width; ///< Recommended width or window + bool fixedwidth; ///< Is the width the only one that makes sense? + bool scalable; ///< Is it scalable (otherwise, the width is a window)? + bool separable; ///< Is it separable? (only matters if dim==2) +}; + + + +/// Filter1D is the abstract data type for a 1D filter. +/// The filters are NOT expected to have their results normalized. +class OIIO_UTIL_API Filter1D { +public: + /// Alias for a shared pointer to a filter + using ref = std::shared_ptr; + + Filter1D(float width) + : m_w(width) + { + } + virtual ~Filter1D(void) {}; + + /// Get the width of the filter + float width(void) const { return m_w; } + + /// Evaluate the filter at an x position (relative to filter center) + virtual float operator()(float x) const = 0; + + /// Return the name of the filter, e.g., "box", "gaussian" + virtual string_view name(void) const = 0; + + /// This static function allocates specific filter implementation for the + /// name you provide and returns it as a shared_ptr. It will be + /// automatically deleted when the last reference to it is released. + /// Example use: + /// auto myfilt = Filter1D::create_shared("box", 1.0f); + /// If the name is not recognized, return an empty shared_ptr. + static ref create_shared(string_view filtername, float width); + + /// This static function allocates and returns an instance of the + /// specific filter implementation for the name you provide. + /// Example use: + /// Filter1D *myfilt = Filter1D::create ("box", 1.0f); + /// The caller is responsible for deleting it when it's done. + /// If the name is not recognized, return NULL. + /// + /// Note that the create_shared method is preferred over create(). + static Filter1D* create(string_view filtername, float width); + + /// Destroy a filter that was created with create(). + static void destroy(Filter1D* filt); + + /// Get the number of filters supported. + static int num_filters(); + /// Get the info for a particular index (0..num_filters()-1). + static void get_filterdesc(int filternum, FilterDesc* filterdesc); + static const FilterDesc& get_filterdesc(int filternum); + +protected: + const float m_w; +}; + + + +/// Filter2D is the abstract data type for a 2D filter. +/// The filters are NOT expected to have their results normalized. +class OIIO_UTIL_API Filter2D { +public: + /// Alias for a shared pointer to a filter + using ref = std::shared_ptr; + + Filter2D(float width, float height) + : m_w(width) + , m_h(height) + { + } + virtual ~Filter2D(void) {}; + + /// Get the width of the filter + float width(void) const { return m_w; } + /// Get the height of the filter + float height(void) const { return m_h; } + + /// Is the filter separable? + /// + virtual bool separable() const { return false; } + + /// Evaluate the filter at an x and y position (relative to filter + /// center). + virtual float operator()(float x, float y) const = 0; + + /// Evaluate just the horizontal filter (if separable; for non-separable + /// it just evaluates at (x,0). + virtual float xfilt(float x) const { return (*this)(x, 0.0f); } + + /// Evaluate just the vertical filter (if separable; for non-separable + /// it just evaluates at (0,y). + virtual float yfilt(float y) const { return (*this)(0.0f, y); } + + /// Return the name of the filter, e.g., "box", "gaussian" + virtual string_view name(void) const = 0; + + /// This static function allocates specific filter implementation for the + /// name you provide and returns it as a shared_ptr. It will be + /// automatically deleted when the last reference do it is released. + /// Example use: + /// auto myfilt = Filter2D::create_shared("box", 1.0f, 1.0f); + /// If the name is not recognized, return an empty shared_ptr. + static ref create_shared(string_view filtername, float width, float height); + + /// This static function allocates and returns an instance of the + /// specific filter implementation for the name you provide. + /// Example use: + /// Filter2D *myfilt = Filter2D::create ("box", 1.0f, 1.0f); + /// The caller is responsible for deleting it when it's done. + /// If the name is not recognized, return NULL. + /// + /// Note that the create_shared method is preferred over create(). + static Filter2D* create(string_view filtername, float width, float height); + + /// Destroy a filter that was created with create(). + static void destroy(Filter2D* filt); + + /// Don't destroy a filter -- used for non-owning shared_ptr. + static void no_destroy(const Filter2D*) {} + + /// Get the number of filters supported. + static int num_filters(); + /// Get the info for a particular index (0..num_filters()-1). + static void get_filterdesc(int filternum, FilterDesc* filterdesc); + static const FilterDesc& get_filterdesc(int filternum); + +protected: + const float m_w, m_h; +}; + + +OIIO_NAMESPACE_3_1_END diff --git a/third_party/tlRender-install-Release/include/OpenImageIO/fmath.h b/third_party/tlRender-install-Release/include/OpenImageIO/fmath.h new file mode 100644 index 00000000..d78d85cd --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenImageIO/fmath.h @@ -0,0 +1,2289 @@ +// Copyright Contributors to the OpenImageIO project. +// SPDX-License-Identifier: BSD-3-Clause and Apache-2.0 +// https://github.com/AcademySoftwareFoundation/OpenImageIO + +/* + A few bits here are based upon code from NVIDIA that was also released + under the same 3-Clause BSD license, and marked as: + Copyright 2004 NVIDIA Corporation. All Rights Reserved. + + Some parts of this file were first open-sourced in Open Shading Language, + also 3-Clause BSD license, then later moved here. The original copyright + notice was: + Copyright (c) 2009-2014 Sony Pictures Imageworks Inc., et al. + + Many of the math functions were copied from or inspired by other + public domain sources or open source packages with compatible licenses. + The individual functions give references were applicable. +*/ + + +// clang-format off + +/// \file +/// +/// A variety of floating-point math helper routines (and, slight +/// misnomer, some int stuff as well). +/// + + +#pragma once +#define OIIO_FMATH_H 1 + +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include + + +OIIO_NAMESPACE_BEGIN +// NOTE: Almost everything in fmath.h is either inline or templated, and +// therefore can be left in the "current" OIIO namespace, they are never +// visible between translation units. But if this ever comes up as a problem, +// we can just move them into an older v3_1 namespace and appropriate `using` +// directives to alias it into other namespaces. + + +/// If the caller defines OIIO_FMATH_HEADER_ONLY to nonzero, then 100% of the +/// implementation of fmath functions will be defined directly in this header +/// file. If it is not defined, or set to 0, then there are a few functions +/// for which this header will only provide the definition. +#ifndef OIIO_FMATH_HEADER_ONLY +# define OIIO_FMATH_HEADER_ONLY 0 +#endif + + +/// Occasionally there may be a tradeoff where the best/fastest +/// implementation of a math function in an ordinary scalar context does +/// things that prevent autovectorization (or OMP pragma vectorization) of a +/// loop containing that operation, and the only way to make it SIMD +/// friendly slows it down as a scalar op. +/// +/// By default, we always prefer doing it as correctly and quickly as +/// possible in scalar mode, but if OIIO_FMATH_SIMD_FRIENDLY is defined to +/// be nonzero, we prefer ensuring that the SIMD loops are as efficient as +/// possible, even at the expense of scalar performance. +/// +/// Because everything here consists of inline functions, and it doesn't +/// really matter for OIIO internals themselves, this is primarily intended +/// for the sake of 3rd party apps that happen to have OIIO as a dependency +/// and use the fmath.h functions. Such a downstream dependency just needs +/// to ensure that OIIO_FMATH_SIMD_FRIENDLY is defined to 1 prior to +/// including fmath.h. +/// +#ifndef OIIO_FMATH_SIMD_FRIENDLY +# define OIIO_FMATH_SIMD_FRIENDLY 0 +#endif + + +// Define math constants just in case they aren't included (Windows is a +// little finicky about this, only defining these if _USE_MATH_DEFINES is +// defined before is included, which is hard to control). +#ifndef M_PI +# define M_PI 3.14159265358979323846264338327950288 +#endif +#ifndef M_PI_2 +# define M_PI_2 1.57079632679489661923132169163975144 +#endif +#ifndef M_PI_4 +# define M_PI_4 0.785398163397448309615660845819875721 +#endif +#ifndef M_TWO_PI +# define M_TWO_PI (M_PI * 2.0) +#endif +#ifndef M_1_PI +# define M_1_PI 0.318309886183790671537767526745028724 +#endif +#ifndef M_2_PI +# define M_2_PI 0.636619772367581343075535053490057448 +#endif +#ifndef M_SQRT2 +# define M_SQRT2 1.41421356237309504880168872420969808 +#endif +#ifndef M_SQRT1_2 +# define M_SQRT1_2 0.707106781186547524400844362104849039 +#endif +#ifndef M_LN2 +# define M_LN2 0.69314718055994530941723212145817656 +#endif +#ifndef M_LN10 +# define M_LN10 2.30258509299404568401799145468436421 +#endif +#ifndef M_E +# define M_E 2.71828182845904523536028747135266250 +#endif +#ifndef M_LOG2E +# define M_LOG2E 1.44269504088896340735992468100189214 +#endif + + + +//////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////// +// +// INTEGER HELPER FUNCTIONS +// +// A variety of handy functions that operate on integers. +// + +/// Quick test for whether an integer is a power of 2. +/// +template +inline OIIO_HOSTDEVICE constexpr bool +ispow2(T x) noexcept +{ + // Numerous references for this bit trick are on the web. The + // principle is that x is a power of 2 <=> x == 1< x-1 is + // all 1 bits for bits < b. + return (x & (x - 1)) == 0 && (x >= 0); +} + + + +/// Round up to next higher power of 2 (return x if it's already a power +/// of 2). +inline OIIO_HOSTDEVICE constexpr int +ceil2(int x) noexcept +{ + // Here's a version with no loops. + if (x < 0) + return 0; + // Subtract 1, then round up to a power of 2, that way if we are + // already a power of 2, we end up with the same number. + --x; + // Make all bits past the first 1 also be 1, i.e. 0001xxxx -> 00011111 + x |= x >> 1; + x |= x >> 2; + x |= x >> 4; + x |= x >> 8; + x |= x >> 16; + // Now we have 2^n-1, by adding 1, we make it a power of 2 again + return x + 1; +} + + + +/// Round down to next lower power of 2 (return x if it's already a power +/// of 2). +inline OIIO_HOSTDEVICE constexpr int +floor2(int x) noexcept +{ + // Make all bits past the first 1 also be 1, i.e. 0001xxxx -> 00011111 + x |= x >> 1; + x |= x >> 2; + x |= x >> 4; + x |= x >> 8; + x |= x >> 16; + // Strip off all but the high bit, i.e. 00011111 -> 00010000 + // That's the power of two <= the original x + return x & ~(x >> 1); +} + + + +/// Round value up to the next whole multiple. For example, +/// `round_to_multiple(10,10) == 10`, `round_to_multiple(17,10) == 20`, and +/// `round_to_multiple(-17,10) == -10`. +template +inline OIIO_HOSTDEVICE V round_to_multiple (V value, M multiple) +{ + if (value >= 0) + value += V(multiple) - 1; + return value - (value % V(multiple)); +} + + + +/// Round up to the next whole multiple of m, for the special case where +/// m is definitely a power of 2 (somewhat simpler than the more general +/// round_to_multiple). This is a template that should work for any +/// integer type. +template +inline OIIO_HOSTDEVICE T +round_to_multiple_of_pow2(T x, T m) +{ + OIIO_DASSERT(ispow2(m)); + return (x + m - 1) & (~(m - 1)); +} + + + +/// Round `value` down to a whole multiple of `multiple`. For example, +/// `round_down_to_multiple(10,10) == 10`, +/// `round_down_to_multiple(17,10) == 10`, and +/// `round_down_to_multiple(-17,10) == -20`. +template +inline OIIO_HOSTDEVICE V round_down_to_multiple (V value, M multiple) +{ + if (value < 0) + value -= V(multiple - 1); + return value - (value % V(multiple)); +} + + + +/// Multiply two unsigned 32-bit ints safely, carefully checking for +/// overflow, and clamping to uint32_t's maximum value. +inline OIIO_HOSTDEVICE uint32_t +clamped_mult32(uint32_t a, uint32_t b) +{ + const uint32_t Err = std::numeric_limits::max(); + uint64_t r = (uint64_t)a * (uint64_t)b; // Multiply into a bigger int + return r < Err ? (uint32_t)r : Err; +} + + + +/// Multiply two unsigned 64-bit ints safely, carefully checking for +/// overflow, and clamping to uint64_t's maximum value. +inline OIIO_HOSTDEVICE uint64_t +clamped_mult64(uint64_t a, uint64_t b) +{ + uint64_t ab = a * b; + if (b && ab / b != a) + return std::numeric_limits::max(); + else + return ab; +} + + + +// safe_mod is like integer a%b, but safely returns 0 when b==0. +template +OIIO_FORCEINLINE OIIO_HOSTDEVICE T +safe_mod(T a, T b) +{ + return b ? (a % b) : T(0); +} + +// (end of integer helper functions) +//////////////////////////////////////////////////////////////////////////// + + + +//////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////// +// +// FLOAT UTILITY FUNCTIONS +// +// Helper/utility functions: clamps, blends, interpolations... +// + + +/// clamp a to bounds [low,high]. +template +OIIO_FORCEINLINE OIIO_HOSTDEVICE T +clamp (const T& a, const T& low, const T& high) +{ +#if 1 + // This looks clunky, but it generates minimal code. For float, it + // should result in just a max and min instruction, that's it. + // This implementation is courtesy of Alex Wells, Intel, via OSL. + T val = a; + if (!(low <= val)) // Forces clamp(NaN,low,high) to return low + val = low; + if (val > high) + val = high; + return val; +#else + // The naive implementation we originally had, below, only does the 2nd + // comparison in the else block, which will generate extra code in a + // SIMD masking scenario. I (LG) can confirm that benchmarks show that + // the above implementation is indeed faster than the one below, even + // for non-SIMD use. + return (a >= low) ? ((a <= high) ? a : high) : low; +#endif +} + + +#ifndef __CUDA_ARCH__ +// Specialization of clamp for vfloat4 +template<> OIIO_FORCEINLINE simd::vfloat4 +clamp (const simd::vfloat4& a, const simd::vfloat4& low, const simd::vfloat4& high) +{ + return simd::min (high, simd::max (low, a)); +} + +template<> OIIO_FORCEINLINE simd::vfloat8 +clamp (const simd::vfloat8& a, const simd::vfloat8& low, const simd::vfloat8& high) +{ + return simd::min (high, simd::max (low, a)); +} + +template<> OIIO_FORCEINLINE simd::vfloat16 +clamp (const simd::vfloat16& a, const simd::vfloat16& low, const simd::vfloat16& high) +{ + return simd::min (high, simd::max (low, a)); +} + +// Specialization of clamp for vint4 +template<> OIIO_FORCEINLINE simd::vint4 +clamp (const simd::vint4& a, const simd::vint4& low, const simd::vint4& high) +{ + return simd::min (high, simd::max (low, a)); +} + +template<> OIIO_FORCEINLINE simd::vint8 +clamp (const simd::vint8& a, const simd::vint8& low, const simd::vint8& high) +{ + return simd::min (high, simd::max (low, a)); +} + +template<> OIIO_FORCEINLINE simd::vint16 +clamp (const simd::vint16& a, const simd::vint16& low, const simd::vint16& high) +{ + return simd::min (high, simd::max (low, a)); +} +#endif + + + +// For the multiply+add (or sub) operations below, note that the results may +// differ slightly on different hardware, depending on whether true fused +// multiply and add is available or if the code generated just does an old +// fashioned multiply followed by a separate add. So please interpret these +// as "do a multiply and add as fast as possible for this hardware, with at +// least as much precision as a multiply followed by a separate add." + +/// Fused multiply and add: (a*b + c) +OIIO_FORCEINLINE OIIO_HOSTDEVICE float madd (float a, float b, float c) { + // NOTE: GCC/ICC will turn this (for float) into a FMA unless + // explicitly asked not to, clang will do so if -ffp-contract=fast. + OIIO_CLANG_PRAGMA(clang fp contract(fast)) + return a * b + c; +} + + +/// Fused multiply and subtract: (a*b - c) +OIIO_FORCEINLINE OIIO_HOSTDEVICE float msub (float a, float b, float c) { + OIIO_CLANG_PRAGMA(clang fp contract(fast)) + return a * b - c; +} + + + +/// Fused negative multiply and add: -(a*b) + c +OIIO_FORCEINLINE OIIO_HOSTDEVICE float nmadd (float a, float b, float c) { + OIIO_CLANG_PRAGMA(clang fp contract(fast)) + return c - (a * b); +} + + + +/// Negative fused multiply and subtract: -(a*b) - c +OIIO_FORCEINLINE OIIO_HOSTDEVICE float nmsub (float a, float b, float c) { + OIIO_CLANG_PRAGMA(clang fp contract(fast)) + return -(a * b) - c; +} + + + +/// Linearly interpolate values v0-v1 at x: v0*(1-x) + v1*x. +/// This is a template, and so should work for any types. +template +OIIO_FORCEINLINE OIIO_HOSTDEVICE T +lerp (const T& v0, const T& v1, const Q& x) +{ + // NOTE: a*(1-x) + b*x is much more numerically stable than a+x*(b-a) + return v0*(Q(1)-x) + v1*x; +} + + + +/// Bilinearly interoplate values v0-v3 (v0 upper left, v1 upper right, +/// v2 lower left, v3 lower right) at coordinates (s,t) and return the +/// result. This is a template, and so should work for any types. +template +OIIO_FORCEINLINE OIIO_HOSTDEVICE T +bilerp(const T& v0, const T& v1, const T& v2, const T& v3, const Q& s, const Q& t) +{ + // NOTE: a*(t-1) + b*t is much more numerically stable than a+t*(b-a) + Q s1 = Q(1) - s; + return T ((Q(1)-t)*(v0*s1 + v1*s) + t*(v2*s1 + v3*s)); +} + + + +/// Bilinearly interoplate arrays of values v0-v3 (v0 upper left, v1 +/// upper right, v2 lower left, v3 lower right) at coordinates (s,t), +/// storing the results in 'result'. These are all vectors, so do it +/// for each of 'n' contiguous values (using the same s,t interpolants). +template +inline OIIO_HOSTDEVICE void +bilerp (const T *v0, const T *v1, + const T *v2, const T *v3, + Q s, Q t, int n, T *result) +{ + Q s1 = Q(1) - s; + Q t1 = Q(1) - t; + for (int i = 0; i < n; ++i) + result[i] = T (t1*(v0[i]*s1 + v1[i]*s) + t*(v2[i]*s1 + v3[i]*s)); +} + + + +/// Bilinearly interoplate arrays of values v0-v3 (v0 upper left, v1 +/// upper right, v2 lower left, v3 lower right) at coordinates (s,t), +/// SCALING the interpolated value by 'scale' and then ADDING to +/// 'result'. These are all vectors, so do it for each of 'n' +/// contiguous values (using the same s,t interpolants). +template +inline OIIO_HOSTDEVICE void +bilerp_mad (const T *v0, const T *v1, + const T *v2, const T *v3, + Q s, Q t, Q scale, int n, T *result) +{ + Q s1 = Q(1) - s; + Q t1 = Q(1) - t; + for (int i = 0; i < n; ++i) + result[i] += T (scale * (t1*(v0[i]*s1 + v1[i]*s) + + t*(v2[i]*s1 + v3[i]*s))); +} + + + +/// Trilinearly interoplate arrays of values v0-v7 (v0 upper left top, v1 +/// upper right top, ...) at coordinates (s,t,r), and return the +/// result. This is a template, and so should work for any types. +template +OIIO_FORCEINLINE OIIO_HOSTDEVICE T +trilerp (T v0, T v1, T v2, T v3, T v4, T v5, T v6, T v7, Q s, Q t, Q r) +{ + // NOTE: a*(t-1) + b*t is much more numerically stable than a+t*(b-a) + Q s1 = Q(1) - s; + Q t1 = Q(1) - t; + Q r1 = Q(1) - r; + return T (r1*(t1*(v0*s1 + v1*s) + t*(v2*s1 + v3*s)) + + r*(t1*(v4*s1 + v5*s) + t*(v6*s1 + v7*s))); +} + + + +/// Trilinearly interoplate arrays of values v0-v7 (v0 upper left top, v1 +/// upper right top, ...) at coordinates (s,t,r), +/// storing the results in 'result'. These are all vectors, so do it +/// for each of 'n' contiguous values (using the same s,t,r interpolants). +template +inline OIIO_HOSTDEVICE void +trilerp (const T *v0, const T *v1, const T *v2, const T *v3, + const T *v4, const T *v5, const T *v6, const T *v7, + Q s, Q t, Q r, int n, T *result) +{ + Q s1 = Q(1) - s; + Q t1 = Q(1) - t; + Q r1 = Q(1) - r; + for (int i = 0; i < n; ++i) + result[i] = T (r1*(t1*(v0[i]*s1 + v1[i]*s) + t*(v2[i]*s1 + v3[i]*s)) + + r*(t1*(v4[i]*s1 + v5[i]*s) + t*(v6[i]*s1 + v7[i]*s))); +} + + + +/// Trilinearly interoplate arrays of values v0-v7 (v0 upper left top, v1 +/// upper right top, ...) at coordinates (s,t,r), +/// SCALING the interpolated value by 'scale' and then ADDING to +/// 'result'. These are all vectors, so do it for each of 'n' +/// contiguous values (using the same s,t,r interpolants). +template +inline OIIO_HOSTDEVICE void +trilerp_mad (const T *v0, const T *v1, const T *v2, const T *v3, + const T *v4, const T *v5, const T *v6, const T *v7, + Q s, Q t, Q r, Q scale, int n, T *result) +{ + Q r1 = Q(1) - r; + bilerp_mad (v0, v1, v2, v3, s, t, scale*r1, n, result); + bilerp_mad (v4, v5, v6, v7, s, t, scale*r, n, result); +} + + + +/// Evaluate B-spline weights in w[0..3] for the given fraction. This +/// is an important component of performing a cubic interpolation. +template +inline OIIO_HOSTDEVICE void evalBSplineWeights (T w[4], T fraction) +{ + T one_frac = 1 - fraction; + w[0] = T(1.0 / 6.0) * one_frac * one_frac * one_frac; + w[1] = T(2.0 / 3.0) - T(0.5) * fraction * fraction * (2 - fraction); + w[2] = T(2.0 / 3.0) - T(0.5) * one_frac * one_frac * (2 - one_frac); + w[3] = T(1.0 / 6.0) * fraction * fraction * fraction; +} + + +/// Evaluate B-spline derivative weights in w[0..3] for the given +/// fraction. This is an important component of performing a cubic +/// interpolation with derivatives. +template +inline OIIO_HOSTDEVICE void evalBSplineWeightDerivs (T dw[4], T fraction) +{ + T one_frac = 1 - fraction; + dw[0] = -T(0.5) * one_frac * one_frac; + dw[1] = T(0.5) * fraction * (3 * fraction - 4); + dw[2] = -T(0.5) * one_frac * (3 * one_frac - 4); + dw[3] = T(0.5) * fraction * fraction; +} + + + +/// Bicubically interoplate arrays of pointers arranged in a 4x4 pattern +/// with val[0] pointing to the data in the upper left corner, val[15] +/// pointing to the lower right) at coordinates (s,t), storing the +/// results in 'result'. These are all vectors, so do it for each of +/// 'n' contiguous values (using the same s,t interpolants). +template +inline OIIO_HOSTDEVICE void +bicubic_interp (const T **val, T s, T t, int n, T *result) +{ + for (int c = 0; c < n; ++c) + result[c] = T(0); + T wx[4]; evalBSplineWeights (wx, s); + T wy[4]; evalBSplineWeights (wy, t); + for (int j = 0; j < 4; ++j) { + for (int i = 0; i < 4; ++i) { + T w = wx[i] * wy[j]; + for (int c = 0; c < n; ++c) + result[c] += w * val[j*4+i][c]; + } + } +} + + + +/// Return floor(x) cast to an int. +OIIO_FORCEINLINE OIIO_HOSTDEVICE int +ifloor (float x) +{ + return (int)floorf(x); +} + + + +/// Return (x-floor(x)) and put (int)floor(x) in *xint. This is similar +/// to the built-in modf, but returns a true int, always rounds down +/// (compared to modf which rounds toward 0), and always returns +/// frac >= 0 (comapred to modf which can return <0 if x<0). +inline OIIO_HOSTDEVICE float +floorfrac (float x, int *xint) +{ +#if 1 + float f = std::floor(x); + *xint = int(f); + return x - f; +#else /* vvv This idiom is slower */ + int i = ifloor(x); + *xint = i; + return x - static_cast(i); // Return the fraction left over +#endif +} + + +#ifndef __CUDA_ARCH__ +inline simd::vfloat4 floorfrac (const simd::vfloat4& x, simd::vint4 *xint) { + simd::vfloat4 f = simd::floor(x); + *xint = simd::vint4(f); + return x - f; +} + +inline simd::vfloat8 floorfrac (const simd::vfloat8& x, simd::vint8 *xint) { + simd::vfloat8 f = simd::floor(x); + *xint = simd::vint8(f); + return x - f; +} + +inline simd::vfloat16 floorfrac (const simd::vfloat16& x, simd::vint16 *xint) { + simd::vfloat16 f = simd::floor(x); + *xint = simd::vint16(f); + return x - f; +} +#endif + + + + +/// Convert degrees to radians. +template +OIIO_FORCEINLINE OIIO_HOSTDEVICE T radians (T deg) { return deg * T(M_PI / 180.0); } + +/// Convert radians to degrees +template +OIIO_FORCEINLINE OIIO_HOSTDEVICE T degrees (T rad) { return rad * T(180.0 / M_PI); } + + +/// Faster floating point negation, in cases where you aren't too picky +/// about the difference between +0 and -0. (Courtesy of Alex Wells, Intel, +/// via code in OSL.) +/// +/// Beware: fast_neg(0.0f) returns 0.0f, NOT -0.0f. All other values, +/// including -0.0 and +/- Inf, work identically to `-x`. For many use +/// cases, that's fine. (When was the last time you wanted a -0.0f anyway?) +/// +/// The reason it's faster is that `-x` (for float x) is implemented by +/// compilers by xor'ing x against a bitmask that flips the sign bit, and +/// that bitmask had to come from somewhere -- memory! -- which can be +/// expensive, depending on whether/where it is in cache. But `0 - x` +/// generates a zero in a register (with xor, no memory access needed) and +/// then subtracts, so that's sometimes faster because there is no memory +/// read. This works for SIMD types as well! +/// +/// It's also safe (though pointless) to use fast_neg for integer types, +/// where both `-x` and `0-x` are implemented as a `neg` instruction. +template +OIIO_FORCEINLINE OIIO_HOSTDEVICE T +fast_neg(const T &x) { + return T(0) - x; +} + + + +inline OIIO_HOSTDEVICE void +sincos (float x, float* sine, float* cosine) +{ +#if defined(__GNUC__) && defined(__linux__) && !defined(__clang__) + __builtin_sincosf(x, sine, cosine); +#elif defined(__CUDA_ARCH__) + // Explicitly select the single-precision CUDA library function + sincosf(x, sine, cosine); +#else + *sine = std::sin(x); + *cosine = std::cos(x); +#endif +} + +inline OIIO_HOSTDEVICE void +sincos (double x, double* sine, double* cosine) +{ +#if defined(__GNUC__) && defined(__linux__) && !defined(__clang__) + __builtin_sincos(x, sine, cosine); +#elif defined(__CUDA_ARCH__) + // Use of anonymous namespace resolves to the CUDA library function and + // avoids infinite recursion + ::sincos(x, sine, cosine); +#else + *sine = std::sin(x); + *cosine = std::cos(x); +#endif +} + + + +/// Return -1 if x<0, 0 if x==0, 1 if x>0. For floating point types, this is +/// not friendly to NaN inputs! +template +inline OIIO_HOSTDEVICE T sign(T x) +{ + return x < T(0) ? T(-1) : (x == T(0) ? T(0) : T(1)); +} + + + + +// (end of float helper functions) +//////////////////////////////////////////////////////////////////////////// + + + +//////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////// +// +// CONVERSION +// +// Type and range conversion helper functions and classes. + + +/// Old name, raw pointer and length. Prefer the span-based byteswap. +template +inline OIIO_HOSTDEVICE void +swap_endian(T* vals, int len = 1) +{ + for (int i = 0; i < len; ++i) + vals[i] = byteswap(vals[i]); +} + + + +/// Byteswap a span of values. This should work for any of short, unsigned +/// short, int, unsigned int, float, long long, pointers. It's just calling +/// byteswap on each element. +template +inline OIIO_HOSTDEVICE void +byteswap_span(span vals) +{ + for (size_t i = 0, len = vals.size(); i < len; ++i) + vals[i] = byteswap(vals[i]); +} + + + +// big_enough_float::float_t is a floating-point type big enough to +// handle the range and precision of a . It's a float, unless T is big. +template struct big_enough_float { typedef float float_t; }; +template<> struct big_enough_float { typedef double float_t; }; +template<> struct big_enough_float { typedef double float_t; }; +template<> struct big_enough_float { typedef double float_t; }; +template<> struct big_enough_float { typedef double float_t; }; +template<> struct big_enough_float { typedef double float_t; }; + + +/// Multiply src by scale, clamp to [min,max], and round to the nearest D +/// (presumed to be integer). This is just a helper for the convert_type +/// templates, it probably has no other use. +template +inline OIIO_HOSTDEVICE D +scaled_conversion(const S& src, F scale, F min, F max) +{ + if (std::numeric_limits::is_signed) { + F s = src * scale; //NOSONAR + s += (s < 0 ? (F)-0.5 : (F)0.5); + return (D)clamp(s, min, max); + } else { + return (D)clamp((F)src * scale + (F)0.5, min, max); + } +} + +OIIO_NAMESPACE_END + + +OIIO_NAMESPACE_3_1_BEGIN + +/// Convert n consecutive values from the type of S to the type of D. +/// The conversion is not a simple cast, but correctly remaps the +/// 0.0->1.0 range from and to the full positive range of integral +/// types. Take a memcpy shortcut if both types are the same and no +/// conversion is necessary. Optional arguments can give nonstandard +/// quantizations. +// +// FIXME: make table-based specializations for common types with only a +// few possible src values (like unsigned char -> float). +template +void convert_type (const S *src, D *dst, size_t n, D _min, D _max) +{ + if constexpr (std::is_same::value) { + // They must be the same type. Just memcpy. + memcpy (dst, src, n*sizeof(D)); + return; + } + typedef typename big_enough_float::float_t F; + F scale = std::numeric_limits::is_integer ? + (F(1)) / F(std::numeric_limits::max()) : F(1); + if (std::numeric_limits::is_integer) { + // Converting to an integer-like type. + F min = (F)_min; // std::numeric_limits::min(); + F max = (F)_max; // std::numeric_limits::max(); + scale *= _max; + // Unroll loop for speed + for ( ; n >= 16; n -= 16) { + *dst++ = scaled_conversion (*src++, scale, min, max); + *dst++ = scaled_conversion (*src++, scale, min, max); + *dst++ = scaled_conversion (*src++, scale, min, max); + *dst++ = scaled_conversion (*src++, scale, min, max); + *dst++ = scaled_conversion (*src++, scale, min, max); + *dst++ = scaled_conversion (*src++, scale, min, max); + *dst++ = scaled_conversion (*src++, scale, min, max); + *dst++ = scaled_conversion (*src++, scale, min, max); + *dst++ = scaled_conversion (*src++, scale, min, max); + *dst++ = scaled_conversion (*src++, scale, min, max); + *dst++ = scaled_conversion (*src++, scale, min, max); + *dst++ = scaled_conversion (*src++, scale, min, max); + *dst++ = scaled_conversion (*src++, scale, min, max); + *dst++ = scaled_conversion (*src++, scale, min, max); + *dst++ = scaled_conversion (*src++, scale, min, max); + *dst++ = scaled_conversion (*src++, scale, min, max); + } + while (n--) + *dst++ = scaled_conversion (*src++, scale, min, max); + } else { + // Converting to a float-like type, so we don't need to remap + // the range + // Unroll loop for speed + for ( ; n >= 16; n -= 16) { + *dst++ = (D)((*src++) * scale); + *dst++ = (D)((*src++) * scale); + *dst++ = (D)((*src++) * scale); + *dst++ = (D)((*src++) * scale); + *dst++ = (D)((*src++) * scale); + *dst++ = (D)((*src++) * scale); + *dst++ = (D)((*src++) * scale); + *dst++ = (D)((*src++) * scale); + *dst++ = (D)((*src++) * scale); + *dst++ = (D)((*src++) * scale); + *dst++ = (D)((*src++) * scale); + *dst++ = (D)((*src++) * scale); + *dst++ = (D)((*src++) * scale); + *dst++ = (D)((*src++) * scale); + *dst++ = (D)((*src++) * scale); + *dst++ = (D)((*src++) * scale); + } + while (n--) + *dst++ = (D)((*src++) * scale); + } +} + + +#ifndef __CUDA_ARCH__ +template<> +inline void convert_type (const uint8_t *src, + float *dst, size_t n, + float /*_min*/, float /*_max*/) +{ + float scale (1.0f/std::numeric_limits::max()); + simd::vfloat4 scale_simd (scale); + for ( ; n >= 4; n -= 4, src += 4, dst += 4) { + simd::vfloat4 s_simd (src); + simd::vfloat4 d_simd = s_simd * scale_simd; + d_simd.store (dst); + } + while (n--) + *dst++ = (*src++) * scale; +} + + + +template<> +inline void convert_type (const uint16_t *src, + float *dst, size_t n, + float /*_min*/, float /*_max*/) +{ + float scale (1.0f/std::numeric_limits::max()); + simd::vfloat4 scale_simd (scale); + for ( ; n >= 4; n -= 4, src += 4, dst += 4) { + simd::vfloat4 s_simd (src); + simd::vfloat4 d_simd = s_simd * scale_simd; + d_simd.store (dst); + } + while (n--) + *dst++ = (*src++) * scale; +} + + +template<> +inline void +convert_type (const float *src, uint16_t *dst, size_t n, + uint16_t /*_min*/, uint16_t /*_max*/) +{ + float min = std::numeric_limits::min(); + float max = std::numeric_limits::max(); + float scale = max; + simd::vfloat4 max_simd (max); + simd::vfloat4 zero_simd (0.0f); + for ( ; n >= 4; n -= 4, src += 4, dst += 4) { + simd::vfloat4 scaled = simd::round (simd::vfloat4(src) * max_simd); + simd::vfloat4 clamped = clamp (scaled, zero_simd, max_simd); + simd::vint4 i (clamped); + i.store (dst); + } + while (n--) + *dst++ = scaled_conversion (*src++, scale, min, max); +} + + +template<> +inline void +convert_type (const float *src, uint8_t *dst, size_t n, + uint8_t /*_min*/, uint8_t /*_max*/) +{ + float min = std::numeric_limits::min(); + float max = std::numeric_limits::max(); + float scale = max; + simd::vfloat4 max_simd (max); + simd::vfloat4 zero_simd (0.0f); + for ( ; n >= 4; n -= 4, src += 4, dst += 4) { + simd::vfloat4 scaled = simd::round (simd::vfloat4(src) * max_simd); + simd::vfloat4 clamped = clamp (scaled, zero_simd, max_simd); + simd::vint4 i (clamped); + i.store (dst); + } + while (n--) + *dst++ = scaled_conversion (*src++, scale, min, max); +} + + +#if defined(_HALF_H_) || defined(IMATH_HALF_H_) +template<> +OIIO_UTIL_API +void convert_type (const half *src, float *dst, size_t n, + float /*_min*/, float /*_max*/); +template<> +OIIO_UTIL_API +void convert_type (const float *src, half *dst, size_t n, + half /*_min*/, half /*_max*/); + +#if OIIO_FMATH_HEADER_ONLY +// Not just the declarations, give the definitions here. +template<> +void convert_type (const half *src, float *dst, size_t n, + float /*_min*/, float /*_max*/) +{ +#if OIIO_SIMD >= 8 && OIIO_F16C_ENABLED + // If f16c ops are enabled, it's worth doing this by 8's + for ( ; n >= 8; n -= 8, src += 8, dst += 8) { + simd::vfloat8 s_simd (src); + s_simd.store (dst); + } +#endif +#if OIIO_SIMD >= 4 + for ( ; n >= 4; n -= 4, src += 4, dst += 4) { + simd::vfloat4 s_simd (src); + s_simd.store (dst); + } +#endif + while (n--) + *dst++ = (*src++); +} + +template<> +void +convert_type (const float *src, half *dst, size_t n, + half /*_min*/, half /*_max*/) +{ +#if OIIO_SIMD >= 8 && OIIO_F16C_ENABLED + // If f16c ops are enabled, it's worth doing this by 8's + for ( ; n >= 8; n -= 8, src += 8, dst += 8) { + simd::vfloat8 s (src); + s.store (dst); + } +#endif +#if OIIO_SIMD >= 4 + for ( ; n >= 4; n -= 4, src += 4, dst += 4) { + simd::vfloat4 s (src); + s.store (dst); + } +#endif + while (n--) + *dst++ = *src++; +} +#endif /* if OIIO_FMATH_HEADER_ONLY */ +#endif /* if defined(IMATH_HALF_H_) */ + +#endif /* ifndef __CUDA_ARCH__ */ + + + +template +inline void convert_type (const S *src, D *dst, size_t n) +{ + convert_type (src, dst, n, + std::numeric_limits::min(), + std::numeric_limits::max()); +} + + + +/// Copy (type convert) consecutive values from the cspan `src` holding data +/// of type S into the span `dst` holding the same number of elements of data +/// of type D. +/// +/// The conversion is not a simple cast, but correctly remaps the 0.0->1.0 +/// range from and to the full positive range of integral types. It's just a +/// straight copy if both types are identical. Optional arguments `min` and +/// `max` can give nonstandard quantizations. +template +void convert_type (cspan src, span dst, + D min = std::numeric_limits::min(), + D max = std::numeric_limits::min()) +{ + OIIO_DASSERT(src.size() == dst.size()); + convert_type(src.data(), dst.data(), std::min(src.size(), dst.size()), + min, max); +} + + + +/// Convert a single value from the type of S to the type of D. +/// The conversion is not a simple cast, but correctly remaps the +/// 0.0->1.0 range from and to the full positive range of integral +/// types. Take a copy shortcut if both types are the same and no +/// conversion is necessary. +template +inline D +convert_type (const S &src) +{ + if constexpr (std::is_same::value) { + // They must be the same type. Just return it. + return (D)src; + } + typedef typename big_enough_float::float_t F; + F scale = std::numeric_limits::is_integer ? + F(1) / F(std::numeric_limits::max()) : F(1); + if (std::numeric_limits::is_integer) { + // Converting to an integer-like type. + F min = (F) std::numeric_limits::min(); + F max = (F) std::numeric_limits::max(); + scale *= max; + return scaled_conversion (src, scale, min, max); + } else { + // Converting to a float-like type, so we don't need to remap + // the range + return (D)((F)src * scale); + } +} + +OIIO_NAMESPACE_3_1_END + + +OIIO_NAMESPACE_BEGIN +using v3_1::convert_type; + + +/// Helper function to convert channel values between different bit depths. +/// Roughly equivalent to: +/// +/// out = round (in * (pow (2, TO_BITS) - 1) / (pow (2, FROM_BITS) - 1)); +/// +/// but utilizes an integer math trick for speed. It can be proven that the +/// absolute error of this method is less or equal to 1, with an average error +/// (with respect to the entire domain) below 0.2. +/// +/// It is assumed that the original value is a valid FROM_BITS integer, i.e. +/// shifted fully to the right. +template +inline OIIO_HOSTDEVICE unsigned int bit_range_convert(unsigned int in) { + static_assert(FROM_BITS > 0, "FROM_BITS cannot be 0"); + unsigned int out = 0; + int shift = TO_BITS - FROM_BITS; + for (; shift > 0; shift -= FROM_BITS) + out |= in << shift; + out |= in >> -shift; + return out; +} + + + +// non-templated version. Slow but general +inline OIIO_HOSTDEVICE unsigned int +bit_range_convert(unsigned int in, unsigned int FROM_BITS, unsigned int TO_BITS) +{ + unsigned int out = 0; + if (FROM_BITS) { + int shift = TO_BITS - FROM_BITS; + for (; shift > 0; shift -= FROM_BITS) + out |= in << shift; + out |= in >> -shift; + } + return out; +} + + + +/// Append the `n` LSB bits of `val` into a bit string `T out[]`, where the +/// `filled` MSB bits of `*out` are already filled in. Increment `out` and +/// adjust `filled` as required. Type `T` should be uint8_t, uint16_t, or +/// uint32_t. +template +inline void +bitstring_add_n_bits (T* &out, int& filled, uint32_t val, int n) +{ + static_assert(std::is_same::value || + std::is_same::value || + std::is_same::value, + "bitstring_add_n_bits must be unsigned int 8/16/32"); + const int Tbits = sizeof(T) * 8; + // val: | don't care | copy me | + // <- n bits -> + // + // *out: | don't touch | fill in here | + // <- filled -> <- (Tbits - filled) -> + while (n > 0) { + // Make sure val doesn't have any cruft in bits > n + val &= ~(0xffffffff << n); + // Initialize any new byte we're filling in + if (filled == 0) + *out = 0; + // How many bits can we fill in `*out` without having to increment + // to the next byte? + int bits_left_in_out = Tbits - filled; + int b = 0; // bit pattern to 'or' with *out + int nb = 0; // number of bits to add + if (n <= bits_left_in_out) { // can fit completely in this byte + b = val << (bits_left_in_out - n); + nb = n; + } else { // n > bits_left_in_out, will spill to next byte + b = val >> (n - bits_left_in_out); + nb = bits_left_in_out; + } + *out |= b; + filled += nb; + OIIO_DASSERT (filled <= Tbits); + n -= nb; + if (filled == Tbits) { + ++out; + filled = 0; + } + } +} + + + +/// Pack values from `T in[0..n-1]` (where `T` is expected to be a uint8, +/// uint16, or uint32, into successive raw outbits-bit pieces of `out[]`, +/// where outbits is expected to be less than the number of bits in a `T`. +template +inline void +bit_pack(cspan data, void* out, int outbits) +{ + static_assert(std::is_same::value || + std::is_same::value || + std::is_same::value, + "bit_pack must be unsigned int 8/16/32"); + unsigned char* outbuffer = (unsigned char*)out; + int filled = 0; + for (size_t i = 0, e = data.size(); i < e; ++i) + bitstring_add_n_bits (outbuffer, filled, data[i], outbits); +} + + + +/// Decode n packed inbits-bits values from in[...] into normal uint8, +/// uint16, or uint32 representation of `T out[0..n-1]`. In other words, +/// each successive `inbits` of `in` (allowing spanning of byte boundaries) +/// will be stored in a successive out[i]. +template +inline void +bit_unpack(cspan in, int inbits, span out) +{ + static_assert(std::is_same::value || + std::is_same::value || + std::is_same::value, + "bit_unpack must be unsigned int 8/16/32"); + OIIO_DASSERT(in.size() * 8 >= inbits * out.size()); + OIIO_DASSERT(inbits >= 1 && inbits < 32); // surely bugs if not + // int highest = (1 << inbits) - 1; + size_t n = out.size(); + int B = 0, b = 0; + // Invariant: + // So far, we have used in[0..B-1] and the high b bits of in[B]. + for (size_t i = 0; i < n; ++i) { + long long val = 0; + int valbits = 0; // bits so far we've accumulated in val + while (valbits < inbits) { + // Invariant: we have already accumulated valbits of the next + // needed value (of a total of inbits), living in the valbits + // low bits of val. + int out_left = inbits - valbits; // How much more we still need + int in_left = 8 - b; // Bits still available in in[B]. + if (in_left <= out_left) { + // Eat the rest of this byte: + // |---------|--------| + // b in_left + val <<= in_left; + val |= in[B] & ~(0xffffffff << in_left); + ++B; + b = 0; + valbits += in_left; + } else { + // Eat just the bits we need: + // |--|---------|-----| + // b out_left extra + val <<= out_left; + int extra = 8 - b - out_left; + val |= (in[B] >> extra) & ~(0xffffffff << out_left); + b += out_left; + valbits = inbits; + } + } + out[i] = val; //T((val * 0xff) / highest); + } +} + + + +/// Decode n packed inbits-bits values from in[...] into normal uint8, +/// uint16, or uint32 representation of `T out[0..n-1]`. In other words, +/// each successive `inbits` of `in` (allowing spanning of byte boundaries) +/// will be stored in a successive out[i]. +/// Note that this is the "unsafe" raw pointer version, and we recommend +/// instead using the span-based version. +template +OIIO_DEPRECATED("Use span-based version") +inline void +bit_unpack(int n, const unsigned char* in, int inbits, T* out) +{ + return bit_unpack(cspan(in, (n * inbits + 7) / 8), + inbits, span(out, n)); +} + + + +/// A DataProxy looks like an (E &), but it really holds an (I &) +/// and does conversions (via convert_type) as it reads in and out. +/// (I and E are for INTERNAL and EXTERNAL data types, respectively). +template +struct DataProxy { + DataProxy (I &data) : m_data(data) { } + E operator= (E newval) { m_data = convert_type(newval); return newval; } + operator E () const { return convert_type(m_data); } +private: + DataProxy& operator = (const DataProxy&); // Do not implement + I &m_data; +}; + + + +/// A ConstDataProxy looks like a (const E &), but it really holds +/// a (const I &) and does conversions (via convert_type) as it reads. +/// (I and E are for INTERNAL and EXTERNAL data types, respectively). +template +struct ConstDataProxy { + ConstDataProxy (const I &data) : m_data(data) { } + operator E () const { return convert_type(*m_data); } +private: + const I &m_data; +}; + + + +/// A DataArrayProxy looks like an (E *), but it really holds an (I *) +/// and does conversions (via convert_type) as it reads in and out. +/// (I and E are for INTERNAL and EXTERNAL data types, respectively). +template +struct DataArrayProxy { + DataArrayProxy (I *data=NULL) : m_data(data) { } + E operator* () const { return convert_type(*m_data); } + E operator[] (int i) const { return convert_type(m_data[i]); } + DataProxy operator[] (int i) { return DataProxy (m_data[i]); } + void set (I *data) { m_data = data; } + I * get () const { return m_data; } + const DataArrayProxy & operator+= (int i) { + m_data += i; return *this; + } +private: + I *m_data; +}; + + + +/// A ConstDataArrayProxy looks like an (E *), but it really holds an +/// (I *) and does conversions (via convert_type) as it reads in and out. +/// (I and E are for INTERNAL and EXTERNAL data types, respectively). +template +struct ConstDataArrayProxy { + ConstDataArrayProxy (const I *data=NULL) : m_data(data) { } + E operator* () const { return convert_type(*m_data); } + E operator[] (int i) const { return convert_type(m_data[i]); } + void set (const I *data) { m_data = data; } + const I * get () const { return m_data; } + const ConstDataArrayProxy & operator+= (int i) { + m_data += i; return *this; + } +private: + const I *m_data; +}; + + + +/// Fast table-based conversion of 8-bit to other types. Declare this +/// as static to avoid the expensive ctr being called all the time. +template +class EightBitConverter { +public: + EightBitConverter () noexcept { init(); } + T operator() (unsigned char c) const noexcept { return val[c]; } +private: + T val[256]; + void init () noexcept { + float scale = 1.0f / 255.0f; + if (std::numeric_limits::is_integer) + scale *= (float)std::numeric_limits::max(); + for (int i = 0; i < 256; ++i) + val[i] = (T)(i * scale); + } +}; + + + +/// Simple conversion of a (presumably non-negative) float into a +/// rational. This does not attempt to find the simplest fraction +/// that approximates the float, for example 52.83 will simply +/// return 5283/100. This does not attempt to gracefully handle +/// floats that are out of range that could be easily int/int. +inline OIIO_HOSTDEVICE void +float_to_rational (float f, unsigned int &num, unsigned int &den) +{ + if (f <= 0) { // Trivial case of zero, and handle all negative values + num = 0; + den = 1; + } else if ((int)(1.0/f) == (1.0/f)) { // Exact results for perfect inverses + num = 1; + den = (int)f; + } else { + num = (int)f; + den = 1; + while (fabsf(f-static_cast(num)) > 0.00001f && den < 1000000) { + den *= 10; + f *= 10; + num = (int)f; + } + } +} + + + +/// Simple conversion of a float into a rational. This does not attempt +/// to find the simplest fraction that approximates the float, for +/// example 52.83 will simply return 5283/100. This does not attempt to +/// gracefully handle floats that are out of range that could be easily +/// int/int. +inline OIIO_HOSTDEVICE void +float_to_rational (float f, int &num, int &den) +{ + unsigned int n, d; + float_to_rational (fabsf(f), n, d); + num = (f >= 0) ? (int)n : -(int)n; + den = (int) d; +} + + +// (end of conversion helpers) +//////////////////////////////////////////////////////////////////////////// + + + + +//////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////// +// +// SAFE MATH +// +// The functions named "safe_*" are versions with various internal clamps +// or other deviations from IEEE standards with the specific intent of +// never producing NaN or Inf values or throwing exceptions. But within the +// valid range, they should be full precision and match IEEE standards. +// + + +/// Safe (clamping) sqrt: safe_sqrt(x<0) returns 0, not NaN. +template +OIIO_FORCEINLINE OIIO_HOSTDEVICE T safe_sqrt (T x) { + return x >= T(0) ? std::sqrt(x) : T(0); +} + +/// Safe (clamping) inverse sqrt: safe_inversesqrt(x<=0) returns 0. +template +OIIO_FORCEINLINE OIIO_HOSTDEVICE T safe_inversesqrt (T x) { + return x > T(0) ? T(1) / std::sqrt(x) : T(0); +} + + +/// Safe (clamping) arcsine: clamp to the valid domain. +template +OIIO_FORCEINLINE OIIO_HOSTDEVICE T safe_asin (T x) { + if (x <= T(-1)) return T(-M_PI_2); + if (x >= T(+1)) return T(+M_PI_2); + return std::asin(x); +} + +/// Safe (clamping) arccosine: clamp to the valid domain. +template +OIIO_FORCEINLINE OIIO_HOSTDEVICE T safe_acos (T x) { + if (x <= T(-1)) return T(M_PI); + if (x >= T(+1)) return T(0); + return std::acos(x); +} + + +/// Safe log2: clamp to valid domain. +template +OIIO_FORCEINLINE OIIO_HOSTDEVICE T safe_log2 (T x) { + // match clamping from fast version + if (x < std::numeric_limits::min()) x = std::numeric_limits::min(); + if (x > std::numeric_limits::max()) x = std::numeric_limits::max(); + return std::log2(x); +} + +/// Safe log: clamp to valid domain. +template +OIIO_FORCEINLINE OIIO_HOSTDEVICE T safe_log (T x) { + // slightly different than fast version since clamping happens before scaling + if (x < std::numeric_limits::min()) x = std::numeric_limits::min(); + if (x > std::numeric_limits::max()) x = std::numeric_limits::max(); + return std::log(x); +} + +/// Safe log10: clamp to valid domain. +template +OIIO_FORCEINLINE OIIO_HOSTDEVICE T safe_log10 (T x) { + // slightly different than fast version since clamping happens before scaling + if (x < std::numeric_limits::min()) x = std::numeric_limits::min(); + if (x > std::numeric_limits::max()) x = std::numeric_limits::max(); + return log10f(x); +} + +/// Safe logb: clamp to valid domain. +template +OIIO_FORCEINLINE OIIO_HOSTDEVICE T safe_logb (T x) { + return (x != T(0)) ? std::logb(x) : -std::numeric_limits::max(); +} + +/// Safe pow: clamp the domain so it never returns Inf or NaN or has divide +/// by zero error. +template +OIIO_FORCEINLINE OIIO_HOSTDEVICE T safe_pow (T x, T y) { + if (y == T(0)) return T(1); + if (x == T(0)) return T(0); + // if x is negative, only deal with integer powers + if ((x < T(0)) && (y != floor(y))) return T(0); + // FIXME: this does not match "fast" variant because clamping limits are different + T r = std::pow(x, y); + // Clamp to avoid returning Inf. + const T big = std::numeric_limits::max(); + return clamp (r, -big, big); +} + + +/// Safe fmod: guard against b==0.0 (in which case, return 0.0). Also, it +/// seems that this is much faster than std::fmod! +OIIO_FORCEINLINE OIIO_HOSTDEVICE float safe_fmod (float a, float b) +{ + if (OIIO_LIKELY(b != 0.0f)) { +#if 0 + return std::fmod (a,b); + // std::fmod was getting called serially instead of vectorizing, so + // we will just do the calculation ourselves. +#else + // This formulation is equivalent but much faster in our benchmarks, + // also vectorizes better. + // The floating-point remainder of the division operation + // a/b is a - N*b, where N = a/b with its fractional part truncated. + int N = static_cast(a/b); + return a - N*b; +#endif + } + return 0.0f; +} + +#define OIIO_FMATH_HAS_SAFE_FMOD 1 + +// (end of safe_* functions) +//////////////////////////////////////////////////////////////////////////// + + + +//////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////// +// +// FAST & APPROXIMATE MATH +// +// The functions named "fast_*" provide a set of replacements to libm that +// are much faster at the expense of some accuracy and robust handling of +// extreme values. One design goal for these approximation was to avoid +// branches as much as possible and operate on single precision values only +// so that SIMD versions should be straightforward ports. We also try to +// implement "safe" semantics (ie: clamp to valid range where possible) +// natively since wrapping these inline calls in another layer would be +// wasteful. +// +// The "fast_*" functions are not only possibly differing in value +// (slightly) from the std versions of these functions, but also we do not +// guarantee that the results of "fast" will exactly match from platform to +// platform. This is because if a particular platform (HW, library, or +// compiler) provides an intrinsic that is even faster than our usual "fast" +// implementation, we may substitute it. +// +// Some functions are fast_safe_*, which is both a faster approximation as +// well as clamped input domain to ensure no NaN, Inf, or divide by zero. +// +// NB: When compiling for CUDA devices, selection of the 'fast' intrinsics +// is influenced by compiler options (-ffast-math for clang/gcc, +// --use-fast-math for NVCC). +// +// TODO: Quantify the performance and accuracy of the CUDA Math functions +// relative to the definitions in this file. It may be better in some +// cases to use the approximate versions defined below. + + +/// Round to nearest integer, returning as an int. +/// Note that this differs from std::rint, which returns a float; it's more +/// akin to std::lrint, which returns a long (int). Sorry for the naming +/// confusion. +OIIO_FORCEINLINE OIIO_HOSTDEVICE int fast_rint (float x) { + // used by sin/cos/tan range reduction +#if OIIO_SIMD_SSE >= 4 + // single roundps instruction on SSE4.1+ (for gcc/clang at least) + return static_cast(std::rint(x)); +#else + // emulate rounding by adding/subtracting 0.5 + return static_cast(x + copysignf(0.5f, x)); +#endif +} + +#ifndef __CUDA_ARCH__ +OIIO_FORCEINLINE simd::vint4 fast_rint (const simd::vfloat4& x) { + return simd::rint (x); +} +#endif + + +OIIO_FORCEINLINE OIIO_HOSTDEVICE float fast_sin (float x) { +#ifndef __CUDA_ARCH__ + // very accurate argument reduction from SLEEF + // starts failing around x=262000 + // Results on: [-2pi,2pi] + // Examined 2173837240 values of sin: 0.00662760244 avg ulp diff, 2 max ulp, 1.19209e-07 max error + int q = fast_rint (x * float(M_1_PI)); + float qf = float(q); + x = madd(qf, -0.78515625f*4, x); + x = madd(qf, -0.00024187564849853515625f*4, x); + x = madd(qf, -3.7747668102383613586e-08f*4, x); + x = madd(qf, -1.2816720341285448015e-12f*4, x); + x = float(M_PI_2) - (float(M_PI_2) - x); // crush denormals + float s = x * x; + if ((q & 1) != 0) x = -x; + // this polynomial approximation has very low error on [-pi/2,+pi/2] + // 1.19209e-07 max error in total over [-2pi,+2pi] + float u = 2.6083159809786593541503e-06f; + u = madd(u, s, -0.0001981069071916863322258f); + u = madd(u, s, +0.00833307858556509017944336f); + u = madd(u, s, -0.166666597127914428710938f); + u = madd(s, u * x, x); + // For large x, the argument reduction can fail and the polynomial can + // be evaluated with arguments outside the valid internal. Just clamp + // the bad values away. + return clamp(u, -1.0f, 1.0f); +#else + return __sinf(x); +#endif +} + + +OIIO_FORCEINLINE OIIO_HOSTDEVICE float fast_cos (float x) { +#ifndef __CUDA_ARCH__ + // same argument reduction as fast_sin + int q = fast_rint (x * float(M_1_PI)); + float qf = float(q); + x = madd(qf, -0.78515625f*4, x); + x = madd(qf, -0.00024187564849853515625f*4, x); + x = madd(qf, -3.7747668102383613586e-08f*4, x); + x = madd(qf, -1.2816720341285448015e-12f*4, x); + x = float(M_PI_2) - (float(M_PI_2) - x); // crush denormals + float s = x * x; + // polynomial from SLEEF's sincosf, max error is + // 4.33127e-07 over [-2pi,2pi] (98% of values are "exact") + float u = -2.71811842367242206819355e-07f; + u = madd(u, s, +2.47990446951007470488548e-05f); + u = madd(u, s, -0.00138888787478208541870117f); + u = madd(u, s, +0.0416666641831398010253906f); + u = madd(u, s, -0.5f); + u = madd(u, s, +1.0f); + if ((q & 1) != 0) u = -u; + return clamp(u, -1.0f, 1.0f); +#else + return __cosf(x); +#endif +} + + +OIIO_FORCEINLINE OIIO_HOSTDEVICE void fast_sincos (float x, float* sine, float* cosine) { +#ifndef __CUDA_ARCH__ + // same argument reduction as fast_sin + int q = fast_rint (x * float(M_1_PI)); + float qf = float(q); + x = madd(qf, -0.78515625f*4, x); + x = madd(qf, -0.00024187564849853515625f*4, x); + x = madd(qf, -3.7747668102383613586e-08f*4, x); + x = madd(qf, -1.2816720341285448015e-12f*4, x); + x = float(M_PI_2) - (float(M_PI_2) - x); // crush denormals + float s = x * x; + // NOTE: same exact polynomials as fast_sin and fast_cos above + if ((q & 1) != 0) x = -x; + float su = 2.6083159809786593541503e-06f; + su = madd(su, s, -0.0001981069071916863322258f); + su = madd(su, s, +0.00833307858556509017944336f); + su = madd(su, s, -0.166666597127914428710938f); + su = madd(s, su * x, x); + float cu = -2.71811842367242206819355e-07f; + cu = madd(cu, s, +2.47990446951007470488548e-05f); + cu = madd(cu, s, -0.00138888787478208541870117f); + cu = madd(cu, s, +0.0416666641831398010253906f); + cu = madd(cu, s, -0.5f); + cu = madd(cu, s, +1.0f); + if ((q & 1) != 0) cu = -cu; + *sine = clamp(su, -1.0f, 1.0f);; + *cosine = clamp(cu, -1.0f, 1.0f);; +#else + __sincosf(x, sine, cosine); +#endif +} + +// NOTE: this approximation is only valid on [-8192.0,+8192.0], it starts becoming +// really poor outside of this range because the reciprocal amplifies errors +OIIO_FORCEINLINE OIIO_HOSTDEVICE float fast_tan (float x) { +#ifndef __CUDA_ARCH__ + // derived from SLEEF implementation + // note that we cannot apply the "denormal crush" trick everywhere because + // we sometimes need to take the reciprocal of the polynomial + int q = fast_rint (x * float(2 * M_1_PI)); + float qf = float(q); + x = madd(qf, -0.78515625f*2, x); + x = madd(qf, -0.00024187564849853515625f*2, x); + x = madd(qf, -3.7747668102383613586e-08f*2, x); + x = madd(qf, -1.2816720341285448015e-12f*2, x); + if ((q & 1) == 0) + x = float(M_PI_4) - (float(M_PI_4) - x); // crush denormals (only if we aren't inverting the result later) + float s = x * x; + float u = 0.00927245803177356719970703f; + u = madd(u, s, 0.00331984995864331722259521f); + u = madd(u, s, 0.0242998078465461730957031f); + u = madd(u, s, 0.0534495301544666290283203f); + u = madd(u, s, 0.133383005857467651367188f); + u = madd(u, s, 0.333331853151321411132812f); + u = madd(s, u * x, x); + if ((q & 1) != 0) + u = -1.0f / u; + return u; +#else + return __tanf(x); +#endif +} + +/// Fast, approximate sin(x*M_PI) with maximum absolute error of 0.000918954611. +/// Adapted from http://devmaster.net/posts/9648/fast-and-accurate-sine-cosine#comment-76773 +/// Note that this is MUCH faster, but much less accurate than fast_sin. +OIIO_FORCEINLINE OIIO_HOSTDEVICE float fast_sinpi (float x) +{ +#ifndef __CUDA_ARCH__ + // Fast trick to strip the integral part off, so our domain is [-1,1] + const float z = x - ((x + 25165824.0f) - 25165824.0f); + const float y = z - z * fabsf(z); + const float Q = 3.10396624f; + const float P = 3.584135056f; // P = 16-4*Q + return y * (Q + P * fabsf(y)); + /* The original article used used inferior constants for Q and P and + * so had max error 1.091e-3. + * + * The optimal value for Q was determined by exhaustive search, minimizing + * the absolute numerical error relative to float(std::sin(double(phi*M_PI))) + * over the interval [0,2] (which is where most of the invocations happen). + * + * The basic idea of this approximation starts with the coarse approximation: + * sin(pi*x) ~= f(x) = 4 * (x - x * abs(x)) + * + * This approximation always _over_ estimates the target. On the otherhand, the + * curve: + * sin(pi*x) ~= f(x) * abs(f(x)) / 4 + * + * always lies _under_ the target. Thus we can simply numerically search for the + * optimal constant to LERP these curves into a more precise approximation. + * After folding the constants together and simplifying the resulting math, we + * end up with the compact implementation below. + * + * NOTE: this function actually computes sin(x * pi) which avoids one or two + * mults in many cases and guarantees exact values at integer periods. + */ +#else + return sinpif(x); +#endif +} + +/// Fast approximate cos(x*M_PI) with ~0.1% absolute error. +/// Note that this is MUCH faster, but much less accurate than fast_cos. +OIIO_FORCEINLINE OIIO_HOSTDEVICE float fast_cospi (float x) +{ +#ifndef __CUDA_ARCH__ + return fast_sinpi (x+0.5f); +#else + return cospif(x); +#endif +} + +OIIO_FORCEINLINE OIIO_HOSTDEVICE float fast_acos (float x) { +#ifndef __CUDA_ARCH__ + const float f = fabsf(x); + const float m = (f < 1.0f) ? 1.0f - (1.0f - f) : 1.0f; // clamp and crush denormals + // based on http://www.pouet.net/topic.php?which=9132&page=2 + // 85% accurate (ulp 0) + // Examined 2130706434 values of acos: 15.2000597 avg ulp diff, 4492 max ulp, 4.51803e-05 max error // without "denormal crush" + // Examined 2130706434 values of acos: 15.2007108 avg ulp diff, 4492 max ulp, 4.51803e-05 max error // with "denormal crush" + const float a = sqrtf(1.0f - m) * (1.5707963267f + m * (-0.213300989f + m * (0.077980478f + m * -0.02164095f))); + return x < 0 ? float(M_PI) - a : a; +#else + return acosf(x); +#endif +} + +OIIO_FORCEINLINE OIIO_HOSTDEVICE float fast_asin (float x) { +#ifndef __CUDA_ARCH__ + // based on acosf approximation above + // max error is 4.51133e-05 (ulps are higher because we are consistently off by a little amount) + const float f = fabsf(x); + const float m = (f < 1.0f) ? 1.0f - (1.0f - f) : 1.0f; // clamp and crush denormals + const float a = float(M_PI_2) - sqrtf(1.0f - m) * (1.5707963267f + m * (-0.213300989f + m * (0.077980478f + m * -0.02164095f))); + return copysignf(a, x); +#else + return asinf(x); +#endif +} + +OIIO_FORCEINLINE OIIO_HOSTDEVICE float fast_atan (float x) { +#ifndef __CUDA_ARCH__ + const float a = fabsf(x); + const float k = a > 1.0f ? 1 / a : a; + const float s = 1.0f - (1.0f - k); // crush denormals + const float t = s * s; + // http://mathforum.org/library/drmath/view/62672.html + // the coefficients were tuned in mathematica with the assumption that we want atan(1)=pi/4 + // (slightly higher error but no discontinuities) + // Examined 4278190080 values of atan: 2.53989068 avg ulp diff, 315 max ulp, 9.17912e-06 max error // (with denormals) + // Examined 4278190080 values of atan: 171160502 avg ulp diff, 855638016 max ulp, 9.17912e-06 max error // (crush denormals) + float r = s * madd(0.430165678f, t, 1.0f) / madd(madd(0.0579354987f, t, 0.763007998f), t, 1.0f); + if (a > 1.0f) r = 1.570796326794896557998982f - r; + return copysignf(r, x); +#else + return atanf(x); +#endif +} + +OIIO_FORCEINLINE OIIO_HOSTDEVICE float fast_atan2 (float y, float x) { +#ifndef __CUDA_ARCH__ + // based on atan approximation above + // the special cases around 0 and infinity were tested explicitly + // the only case not handled correctly is x=NaN,y=0 which returns 0 instead of nan + const float a = fabsf(x); + const float b = fabsf(y); + bool b_is_greater_than_a = b > a; + +#if OIIO_FMATH_SIMD_FRIENDLY + // When applying to all lanes in SIMD, we end up doing extra masking and + // 2 divides. So lets just do 1 divide and swap the parameters instead. + // And if we are going to do a doing a divide anyway, when a == b it + // should be 1.0f anyway so lets not bother special casing it. + float sa = b_is_greater_than_a ? b : a; + float sb = b_is_greater_than_a ? a : b; + const float k = (b == 0) ? 0.0f : sb/sa; +#else + const float k = (b == 0) ? 0.0f : ((a == b) ? 1.0f : (b > a ? a / b : b / a)); +#endif + + const float s = 1.0f - (1.0f - k); // crush denormals + const float t = s * s; + + float r = s * madd(0.430165678f, t, 1.0f) / madd(madd(0.0579354987f, t, 0.763007998f), t, 1.0f); + + if (b_is_greater_than_a) + r = 1.570796326794896557998982f - r; // account for arg reduction + // TODO: investigate if testing x < 0.0f is more efficient + if (bitcast(x) & 0x80000000u) // test sign bit of x + r = float(M_PI) - r; + return copysignf(r, y); +#else + return atan2f(y, x); +#endif +} + + +template +OIIO_FORCEINLINE OIIO_HOSTDEVICE T fast_log2 (const T& xval) { + using namespace simd; + typedef typename T::vint_t intN; + // See float fast_log2 for explanations + T x = clamp (xval, T(std::numeric_limits::min()), T(std::numeric_limits::max())); + intN bits = bitcast_to_int(x); + intN exponent = srl (bits, 23) - intN(127); + T f = bitcast_to_float ((bits & intN(0x007FFFFF)) | intN(0x3f800000)) - T(1.0f); + T f2 = f * f; + T f4 = f2 * f2; + T hi = madd(f, T(-0.00931049621349f), T( 0.05206469089414f)); + T lo = madd(f, T( 0.47868480909345f), T(-0.72116591947498f)); + hi = madd(f, hi, T(-0.13753123777116f)); + hi = madd(f, hi, T( 0.24187369696082f)); + hi = madd(f, hi, T(-0.34730547155299f)); + lo = madd(f, lo, T( 1.442689881667200f)); + return ((f4 * hi) + (f * lo)) + T(exponent); +} + + +template<> +OIIO_FORCEINLINE OIIO_HOSTDEVICE float fast_log2 (const float& xval) { +#ifndef __CUDA_ARCH__ + // NOTE: clamp to avoid special cases and make result "safe" from large negative values/nans + float x = clamp (xval, std::numeric_limits::min(), std::numeric_limits::max()); + // based on https://github.com/LiraNuna/glsl-sse2/blob/master/source/vec4.h + unsigned int bits = bitcast(x); + int exponent = int(bits >> 23) - 127; + float f = bitcast((bits & 0x007FFFFF) | 0x3f800000) - 1.0f; + // Examined 2130706432 values of log2 on [1.17549435e-38,3.40282347e+38]: 0.0797524457 avg ulp diff, 3713596 max ulp, 7.62939e-06 max error + // ulp histogram: + // 0 = 97.46% + // 1 = 2.29% + // 2 = 0.11% + float f2 = f * f; + float f4 = f2 * f2; + float hi = madd(f, -0.00931049621349f, 0.05206469089414f); + float lo = madd(f, 0.47868480909345f, -0.72116591947498f); + hi = madd(f, hi, -0.13753123777116f); + hi = madd(f, hi, 0.24187369696082f); + hi = madd(f, hi, -0.34730547155299f); + lo = madd(f, lo, 1.442689881667200f); + return ((f4 * hi) + (f * lo)) + exponent; +#else + return __log2f(xval); +#endif +} + + + +template +OIIO_FORCEINLINE OIIO_HOSTDEVICE T fast_log (const T& x) { + // Examined 2130706432 values of logf on [1.17549435e-38,3.40282347e+38]: 0.313865375 avg ulp diff, 5148137 max ulp, 7.62939e-06 max error + return fast_log2(x) * T(M_LN2); +} + +#ifdef __CUDA_ARCH__ +template<> +OIIO_FORCEINLINE OIIO_HOSTDEVICE float fast_log(const float& x) +{ + return __logf(x); +} +#endif + + +template +OIIO_FORCEINLINE OIIO_HOSTDEVICE T fast_log10 (const T& x) { + // Examined 2130706432 values of log10f on [1.17549435e-38,3.40282347e+38]: 0.631237033 avg ulp diff, 4471615 max ulp, 3.8147e-06 max error + return fast_log2(x) * T(M_LN2 / M_LN10); +} + +#ifdef __CUDA_ARCH__ +template<> +OIIO_FORCEINLINE OIIO_HOSTDEVICE float fast_log10(const float& x) +{ + return __log10f(x); +} +#endif + +OIIO_FORCEINLINE OIIO_HOSTDEVICE float fast_logb (float x) { +#ifndef __CUDA_ARCH__ + // don't bother with denormals + x = fabsf(x); + if (x < std::numeric_limits::min()) x = std::numeric_limits::min(); + if (x > std::numeric_limits::max()) x = std::numeric_limits::max(); + unsigned int bits = bitcast(x); + return float (int(bits >> 23) - 127); +#else + return logbf(x); +#endif +} + +OIIO_FORCEINLINE OIIO_HOSTDEVICE float fast_log1p (float x) { +#ifndef __CUDA_ARCH__ + if (fabsf(x) < 0.01f) { + float y = 1.0f - (1.0f - x); // crush denormals + return copysignf(madd(-0.5f, y * y, y), x); + } else { + return fast_log(x + 1); + } +#else + return log1pf(x); +#endif +} + + + +template +OIIO_FORCEINLINE OIIO_HOSTDEVICE T fast_exp2 (const T& xval) { + using namespace simd; + typedef typename T::vint_t intN; +#if (OIIO_SIMD_SSE || OIIO_SIMD_NEON) && !OIIO_MSVS_BEFORE_2022 + // See float specialization for explanations + T x = clamp (xval, T(-126.0f), T(126.0f)); + intN m (x); x -= T(m); + T one (1.0f); + x = one - (one - x); // crush denormals (does not affect max ulps!) + const T kA (1.33336498402e-3f); + const T kB (9.810352697968e-3f); + const T kC (5.551834031939e-2f); + const T kD (0.2401793301105f); + const T kE (0.693144857883f); + T r (kA); + r = madd(x, r, kB); + r = madd(x, r, kC); + r = madd(x, r, kD); + r = madd(x, r, kE); + r = madd(x, r, one); + + // Original code was: + // return bitcast_to_float (bitcast_to_int(r) + (m << 23)); + // This was producing the wrong results when called via `sRGB_to_linear()` + // and `linear_to_sRGB()` on some Windows MSVC builds. + // We found that it was fixed by using a temporary intN, as below. + // Presumed to be an optimizer bug in MSVC versions 16.11.x + // and earlier. + // See PR #3804 + + intN i = bitcast_to_int(r); + T f = bitcast_to_float(i + (m << 23)); + return f; +#else + T r; + for (int i = 0; i < r.elements; ++i) + r[i] = fast_exp2(xval[i]); + for (int i = r.elements; i < r.paddedelements; ++i) + r[i] = 0.0f; + return r; +#endif +} + + +template<> +OIIO_FORCEINLINE OIIO_HOSTDEVICE float fast_exp2 (const float& xval) { +#if OIIO_ANY_CLANG && !OIIO_INTEL_LLVM_COMPILER && OIIO_FMATH_SIMD_FRIENDLY + // Clang was unhappy using the bitcast/memcpy/reinter_cast/union inside + // an explicit SIMD loop, so revert to calling the standard version. + return std::exp2(xval); +#elif !defined(__CUDA_ARCH__) + // clamp to safe range for final addition + float x = clamp (xval, -126.0f, 126.0f); + // range reduction + int m = int(x); x -= m; + x = 1.0f - (1.0f - x); // crush denormals (does not affect max ulps!) + // 5th degree polynomial generated with sollya + // Examined 2247622658 values of exp2 on [-126,126]: 2.75764912 avg ulp diff, 232 max ulp + // ulp histogram: + // 0 = 87.81% + // 1 = 4.18% + float r = 1.33336498402e-3f; + r = madd(x, r, 9.810352697968e-3f); + r = madd(x, r, 5.551834031939e-2f); + r = madd(x, r, 0.2401793301105f); + r = madd(x, r, 0.693144857883f); + r = madd(x, r, 1.0f); + // multiply by 2 ^ m by adding in the exponent + // NOTE: left-shift of negative number is undefined behavior + return bitcast(bitcast(r) + (unsigned(m) << 23)); + // Clang: loop not vectorized: unsafe dependent memory operations in loop. + // This is why we special case the OIIO_FMATH_SIMD_FRIENDLY above. + // FIXME: as clang releases continue to improve, periodically check if + // this is still the case. +#else + return exp2f(xval); +#endif +} + + + + +template +OIIO_FORCEINLINE OIIO_HOSTDEVICE T fast_exp (const T& x) { + // Examined 2237485550 values of exp on [-87.3300018,87.3300018]: 2.6666452 avg ulp diff, 230 max ulp + return fast_exp2(x * T(1 / M_LN2)); +} + +#ifdef __CUDA_ARCH__ +template<> +OIIO_FORCEINLINE OIIO_HOSTDEVICE float fast_exp (const float& x) { + return __expf(x); +} +#endif + + + +/// Faster float exp than is in libm, but still 100% accurate +OIIO_FORCEINLINE OIIO_HOSTDEVICE float fast_correct_exp (float x) +{ +#if defined(__x86_64__) && defined(__GNU_LIBRARY__) && defined(__GLIBC__ ) && defined(__GLIBC_MINOR__) && __GLIBC__ <= 2 && __GLIBC_MINOR__ < 16 + // On x86_64, versions of glibc < 2.16 have an issue where expf is + // much slower than the double version. This was fixed in glibc 2.16. + return static_cast(std::exp(static_cast(x))); +#else + return std::exp(x); +#endif +} + + +OIIO_FORCEINLINE OIIO_HOSTDEVICE float fast_exp10 (float x) { +#ifndef __CUDA_ARCH__ + // Examined 2217701018 values of exp10 on [-37.9290009,37.9290009]: 2.71732409 avg ulp diff, 232 max ulp + return fast_exp2(x * float(M_LN10 / M_LN2)); +#else + return __exp10f(x); +#endif +} + +OIIO_FORCEINLINE OIIO_HOSTDEVICE float fast_expm1 (float x) { +#ifndef __CUDA_ARCH__ + if (fabsf(x) < 0.03f) { + float y = 1.0f - (1.0f - x); // crush denormals + return copysignf(madd(0.5f, y * y, y), x); + } else + return fast_exp(x) - 1.0f; +#else + return expm1f(x); +#endif +} + +OIIO_FORCEINLINE OIIO_HOSTDEVICE float fast_sinh (float x) { +#ifndef __CUDA_ARCH__ + float a = fabsf(x); + if (a > 1.0f) { + // Examined 53389559 values of sinh on [1,87.3300018]: 33.6886442 avg ulp diff, 178 max ulp + float e = fast_exp(a); + return copysignf(0.5f * e - 0.5f / e, x); + } else { + a = 1.0f - (1.0f - a); // crush denorms + float a2 = a * a; + // degree 7 polynomial generated with sollya + // Examined 2130706434 values of sinh on [-1,1]: 1.19209e-07 max error + float r = 2.03945513931e-4f; + r = madd(r, a2, 8.32990277558e-3f); + r = madd(r, a2, 0.1666673421859f); + r = madd(r * a, a2, a); + return copysignf(r, x); + } +#else + return sinhf(x); +#endif +} + +OIIO_FORCEINLINE OIIO_HOSTDEVICE float fast_cosh (float x) { +#ifndef __CUDA_ARCH__ + // Examined 2237485550 values of cosh on [-87.3300018,87.3300018]: 1.78256726 avg ulp diff, 178 max ulp + float e = fast_exp(fabsf(x)); + return 0.5f * e + 0.5f / e; +#else + return coshf(x); +#endif +} + +OIIO_FORCEINLINE OIIO_HOSTDEVICE float fast_tanh (float x) { +#ifndef __CUDA_ARCH__ + // Examined 4278190080 values of tanh on [-3.40282347e+38,3.40282347e+38]: 3.12924e-06 max error + // NOTE: ulp error is high because of sub-optimal handling around the origin + float e = fast_exp(2.0f * fabsf(x)); + return copysignf(1 - 2 / (1 + e), x); +#else + return tanhf(x); +#endif +} + +OIIO_FORCEINLINE OIIO_HOSTDEVICE float fast_safe_pow (float x, float y) { + if (y == 0) return 1.0f; // x^0=1 + if (x == 0) return 0.0f; // 0^y=0 + // be cheap & exact for special case of squaring and identity + if (y == 1.0f) + return x; + if (y == 2.0f) { +#ifndef __CUDA_ARCH__ + return std::min (x*x, std::numeric_limits::max()); +#else + return fminf (x*x, std::numeric_limits::max()); +#endif + } + float sign = 1.0f; + if (OIIO_UNLIKELY(x < 0.0f)) { + // if x is negative, only deal with integer powers + // powf returns NaN for non-integers, we will return 0 instead + int ybits = bitcast(y) & 0x7fffffff; + if (ybits >= 0x4b800000) { + // always even int, keep positive + } else if (ybits >= 0x3f800000) { + // bigger than 1, check + int k = (ybits >> 23) - 127; // get exponent + int j = ybits >> (23 - k); // shift out possible fractional bits + if ((j << (23 - k)) == ybits) // rebuild number and check for a match + sign = bitcast(0x3f800000 | (j << 31)); // +1 for even, -1 for odd + else + return 0.0f; // not integer + } else { + return 0.0f; // not integer + } + } + return sign * fast_exp2(y * fast_log2(fabsf(x))); +} + + +// Fast simd pow that only needs to work for positive x +template +OIIO_FORCEINLINE OIIO_HOSTDEVICE T fast_pow_pos (const T& x, const U& y) { + return fast_exp2(y * fast_log2(x)); +} + + +// Fast cube root (performs better that using fast_pow's above with y=1/3) +OIIO_FORCEINLINE OIIO_HOSTDEVICE float fast_cbrt (float x) { +#ifndef __CUDA_ARCH__ + float x0 = fabsf(x); + // from hacker's delight + float a = bitcast(0x2a5137a0 + bitcast(x0) / 3); // Initial guess. + // Examined 14272478 values of cbrt on [-9.99999935e-39,9.99999935e-39]: 8.14687e-14 max error + // Examined 2131958802 values of cbrt on [9.99999935e-39,3.40282347e+38]: 2.46930719 avg ulp diff, 12 max ulp + a = 0.333333333f * (2.0f * a + x0 / (a * a)); // Newton step. + a = 0.333333333f * (2.0f * a + x0 / (a * a)); // Newton step again. + a = (x0 == 0) ? 0 : a; // Fix 0 case + return copysignf(a, x); +#else + return cbrtf(x); +#endif +} + + +OIIO_FORCEINLINE OIIO_HOSTDEVICE float fast_erf (float x) +{ +#ifndef __CUDA_ARCH__ + // Examined 1082130433 values of erff on [0,4]: 1.93715e-06 max error + // Abramowitz and Stegun, 7.1.28 + const float a1 = 0.0705230784f; + const float a2 = 0.0422820123f; + const float a3 = 0.0092705272f; + const float a4 = 0.0001520143f; + const float a5 = 0.0002765672f; + const float a6 = 0.0000430638f; + const float a = fabsf(x); + const float b = 1.0f - (1.0f - a); // crush denormals + const float r = madd(madd(madd(madd(madd(madd(a6, b, a5), b, a4), b, a3), b, a2), b, a1), b, 1.0f); + const float s = r * r; // ^2 + const float t = s * s; // ^4 + const float u = t * t; // ^8 + const float v = u * u; // ^16 + return copysignf(1.0f - 1.0f / v, x); +#else + return erff(x); +#endif +} + +OIIO_FORCEINLINE OIIO_HOSTDEVICE float fast_erfc (float x) +{ +#ifndef __CUDA_ARCH__ + // Examined 2164260866 values of erfcf on [-4,4]: 1.90735e-06 max error + // ulp histogram: + // 0 = 80.30% + return 1.0f - fast_erf(x); +#else + return erfcf(x); +#endif +} + +OIIO_FORCEINLINE OIIO_HOSTDEVICE float fast_ierf (float x) +{ + // from: Approximating the erfinv function by Mike Giles + // to avoid trouble at the limit, clamp input to 1-eps + float a = fabsf(x); if (a > 0.99999994f) a = 0.99999994f; + float w = -fast_log((1.0f - a) * (1.0f + a)), p; + if (w < 5.0f) { + w = w - 2.5f; + p = 2.81022636e-08f; + p = madd(p, w, 3.43273939e-07f); + p = madd(p, w, -3.5233877e-06f ); + p = madd(p, w, -4.39150654e-06f); + p = madd(p, w, 0.00021858087f ); + p = madd(p, w, -0.00125372503f ); + p = madd(p, w, -0.00417768164f ); + p = madd(p, w, 0.246640727f ); + p = madd(p, w, 1.50140941f ); + } else { + w = sqrtf(w) - 3.0f; + p = -0.000200214257f; + p = madd(p, w, 0.000100950558f); + p = madd(p, w, 0.00134934322f ); + p = madd(p, w, -0.00367342844f ); + p = madd(p, w, 0.00573950773f ); + p = madd(p, w, -0.0076224613f ); + p = madd(p, w, 0.00943887047f ); + p = madd(p, w, 1.00167406f ); + p = madd(p, w, 2.83297682f ); + } + return p * x; +} + +// (end of fast* functions) +//////////////////////////////////////////////////////////////////////////// + + + + +//////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////// +// +// MISCELLANEOUS NUMERICAL METHODS +// + + +/// Solve for the x for which func(x) == y on the interval [xmin,xmax]. +/// Use a maximum of maxiter iterations, and stop any time the remaining +/// search interval or the function evaluations <= eps. If brack is +/// non-NULL, set it to true if y is in [f(xmin), f(xmax)], otherwise +/// false (in which case the caller should know that the results may be +/// unreliable. Results are undefined if the function is not monotonic +/// on that interval or if there are multiple roots in the interval (it +/// may not converge, or may converge to any of the roots without +/// telling you that there are more than one). +template OIIO_HOSTDEVICE +T invert (Func &func, T y, T xmin=0.0, T xmax=1.0, + int maxiters=32, T eps=1.0e-6, bool *brack=0) +{ + // Use the Regula Falsi method, falling back to bisection if it + // hasn't converged after 3/4 of the maximum number of iterations. + // See, e.g., Numerical Recipes for the basic ideas behind both + // methods. + T v0 = func(xmin), v1 = func(xmax); + T x = xmin, v = v0; + bool increasing = (v0 < v1); + T vmin = increasing ? v0 : v1; + T vmax = increasing ? v1 : v0; + bool bracketed = (y >= vmin && y <= vmax); + if (brack) + *brack = bracketed; + if (! bracketed) { + // If our bounds don't bracket the zero, just give up, and + // return the appropriate "edge" of the interval + return ((y < vmin) == increasing) ? xmin : xmax; + } + if (fabs(v0-v1) < eps) // already close enough + return x; + int rfiters = (3*maxiters)/4; // how many times to try regula falsi + for (int iters = 0; iters < maxiters; ++iters) { + T t; // interpolation factor + if (iters < rfiters) { + // Regula falsi + t = (y-v0)/(v1-v0); + if (t <= T(0) || t >= T(1)) + t = T(0.5); // RF convergence failure -- bisect instead + } else { + t = T(0.5); // bisection + } + x = lerp (xmin, xmax, t); + v = func(x); + if ((v < y) == increasing) { + xmin = x; v0 = v; + } else { + xmax = x; v1 = v; + } + if (fabs(xmax-xmin) < eps || fabs(v-y) < eps) + return x; // converged + } + return x; +} + + + +/// Linearly interpolate a list of evenly-spaced knots y[0..len-1] with +/// y[0] corresponding to the value at x==0.0 and y[len-1] corresponding to +/// x==1.0. +inline OIIO_HOSTDEVICE float +interpolate_linear (float x, span_strided y) +{ +#ifndef __CUDA_ARCH__ + OIIO_DASSERT_MSG (y.size() >= 2, "interpolate_linear needs at least 2 knot values (has %d)", int(y.size())); +#endif + x = clamp (x, float(0.0), float(1.0)); + int nsegs = int(y.size()) - 1; + int segnum; + x = floorfrac (x*nsegs, &segnum); +#ifndef __CUDA_ARCH__ + int nextseg = std::min (segnum+1, nsegs); +#else + int nextseg = min (segnum+1, nsegs); +#endif + return lerp (y[segnum], y[nextseg], x); +} + +// (end miscellaneous numerical methods) +//////////////////////////////////////////////////////////////////////////// + +OIIO_NAMESPACE_END diff --git a/third_party/tlRender-install-Release/include/OpenImageIO/fstream_mingw.h b/third_party/tlRender-install-Release/include/OpenImageIO/fstream_mingw.h new file mode 100644 index 00000000..c8e52ac2 --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenImageIO/fstream_mingw.h @@ -0,0 +1,316 @@ +// Copyright Contributors to the OpenImageIO project. +// SPDX-License-Identifier: Apache-2.0 +// https://github.com/AcademySoftwareFoundation/OpenImageIO + + +/// @file fstream_mingw.h +/// +/// @brief Utilities for dealing with fstream on MingW. +/// Basically accepting wchar_t* filenames in the std::ifstream::open function +/// is a Windows MSVC extension and does not work on MingW. This file implements +/// ifstream and ofstream so that they work with UTF-16 filenames. + + +#pragma once + +#include +#include +#include + +#if defined(_WIN32) && defined(__GLIBCXX__) +# include // __gnu_cxx::stdio_filebuf +# include +# include +# include + + +OIIO_NAMESPACE_3_1_BEGIN + + +template> +class basic_ifstream : public std::basic_istream<_CharT, _Traits> { +public: + typedef _CharT char_type; + typedef _Traits traits_type; + typedef typename traits_type::int_type int_type; + typedef typename traits_type::pos_type pos_type; + typedef typename traits_type::off_type off_type; + + typedef typename __gnu_cxx::stdio_filebuf + stdio_filebuf; + + + basic_ifstream(); + explicit basic_ifstream(const std::wstring& path, + std::ios_base::openmode __mode = std::ios_base::in); + + virtual ~basic_ifstream(); + + stdio_filebuf* rdbuf() const; + bool is_open() const; + void open(const std::wstring& path, + std::ios_base::openmode __mode = std::ios_base::in); + void close(); + +private: + void open_internal(const std::wstring& path, std::ios_base::openmode mode); + + stdio_filebuf* __sb_; +}; + +template +inline basic_ifstream<_CharT, _Traits>::basic_ifstream() + : std::basic_istream(0) + , __sb_(0) +{ +} + + +template +inline basic_ifstream<_CharT, _Traits>::basic_ifstream( + const std::wstring& path, std::ios_base::openmode __mode) + : std::basic_istream(0) + , __sb_(0) +{ + open_internal(path, __mode | std::ios_base::in); +} + +template +inline basic_ifstream<_CharT, _Traits>::~basic_ifstream() +{ + delete __sb_; +} + + +inline int +ios_open_mode_to_oflag(std::ios_base::openmode mode) +{ + int f = 0; + if (mode & std::ios_base::in) { + f |= _O_RDONLY; + } + if (mode & std::ios_base::out) { + f |= _O_WRONLY; + f |= _O_CREAT; + if (mode & std::ios_base::app) { + f |= _O_APPEND; + } + if (mode & std::ios_base::trunc) { + f |= _O_TRUNC; + } + } + if (mode & std::ios_base::binary) { + f |= _O_BINARY; + } else { + f |= _O_TEXT; + } + return f; +} + +template +inline void +basic_ifstream<_CharT, _Traits>::open_internal(const std::wstring& path, + std::ios_base::openmode mode) +{ + if (is_open()) { + // if the stream is already associated with a file (i.e., it is already open), calling this function fails. + this->setstate(std::ios_base::failbit); + return; + } + int fd; + int oflag = ios_open_mode_to_oflag(mode); + errno_t errcode = _wsopen_s(&fd, path.c_str(), oflag, _SH_DENYNO, + _S_IREAD | _S_IWRITE); + if (errcode != 0) { + this->setstate(std::ios_base::failbit); + return; + } + __sb_ = new stdio_filebuf(fd, mode, 1); + if (__sb_ == 0) { + this->setstate(std::ios_base::failbit); + return; + } + // 409. Closing an fstream should clear error state + this->clear(); + assert(__sb_); + + // In init() the rdstate() is set to badbit if __sb_ is NULL and + // goodbit otherwise. The assert afterwards ensures this. + this->init(__sb_); + assert(this->good() && !this->fail()); +} + +template +inline typename basic_ifstream<_CharT, _Traits>::stdio_filebuf* +basic_ifstream<_CharT, _Traits>::rdbuf() const +{ + return const_cast(__sb_); +} + + +template +inline bool +basic_ifstream<_CharT, _Traits>::is_open() const +{ + return __sb_ && __sb_->is_open(); +} + + +template +void +basic_ifstream<_CharT, _Traits>::open(const std::wstring& path, + std::ios_base::openmode __mode) +{ + open_internal(path, __mode | std::ios_base::in); +} + +template +inline void +basic_ifstream<_CharT, _Traits>::close() +{ + if (!__sb_) { + return; + } + if (__sb_->close() == 0) + this->setstate(std::ios_base::failbit); + + delete __sb_; + __sb_ = 0; +} + + + +template> +class basic_ofstream : public std::basic_ostream<_CharT, _Traits> { +public: + typedef _CharT char_type; + typedef _Traits traits_type; + typedef typename traits_type::int_type int_type; + typedef typename traits_type::pos_type pos_type; + typedef typename traits_type::off_type off_type; + + typedef typename __gnu_cxx::stdio_filebuf + stdio_filebuf; + + + basic_ofstream(); + explicit basic_ofstream(const std::wstring& path, + std::ios_base::openmode __mode = std::ios_base::out); + + virtual ~basic_ofstream(); + + stdio_filebuf* rdbuf() const; + bool is_open() const; + void open(const std::wstring& path, + std::ios_base::openmode __mode = std::ios_base::out); + void close(); + +private: + void open_internal(const std::wstring& path, std::ios_base::openmode mode); + + stdio_filebuf* __sb_; +}; + +template +inline basic_ofstream<_CharT, _Traits>::basic_ofstream() + : std::basic_ostream(0) + , __sb_(0) +{ +} + + +template +inline basic_ofstream<_CharT, _Traits>::basic_ofstream( + const std::wstring& path, std::ios_base::openmode __mode) + : std::basic_ostream(0) + , __sb_(0) +{ + open_internal(path, __mode | std::ios_base::out); +} + +template +inline basic_ofstream<_CharT, _Traits>::~basic_ofstream() +{ + delete __sb_; +} + + +template +inline void +basic_ofstream<_CharT, _Traits>::open_internal(const std::wstring& path, + std::ios_base::openmode mode) +{ + if (is_open()) { + // if the stream is already associated with a file (i.e., it is already open), calling this function fails. + this->setstate(std::ios_base::failbit); + return; + } + int fd; + int oflag = ios_open_mode_to_oflag(mode); + errno_t errcode = _wsopen_s(&fd, path.c_str(), oflag, _SH_DENYNO, + _S_IREAD | _S_IWRITE); + if (errcode != 0) { + this->setstate(std::ios_base::failbit); + return; + } + __sb_ = new stdio_filebuf(fd, mode, 1); + if (__sb_ == 0) { + this->setstate(std::ios_base::failbit); + return; + } + // 409. Closing an fstream should clear error state + this->clear(); + assert(__sb_); + + // In init() the rdstate() is set to badbit if __sb_ is NULL and + // goodbit otherwise. The assert afterwards ensures this. + this->init(__sb_); + assert(this->good() && !this->fail()); +} + + +template +inline typename basic_ofstream<_CharT, _Traits>::stdio_filebuf* +basic_ofstream<_CharT, _Traits>::rdbuf() const +{ + return const_cast(__sb_); +} + + + +template +inline bool +basic_ofstream<_CharT, _Traits>::is_open() const +{ + return __sb_ && __sb_->is_open(); +} + + +template +void +basic_ofstream<_CharT, _Traits>::open(const std::wstring& path, + std::ios_base::openmode __mode) +{ + open_internal(path, __mode | std::ios_base::out); +} + +template +inline void +basic_ofstream<_CharT, _Traits>::close() +{ + if (!__sb_) { + return; + } + if (__sb_->close() == 0) + this->setstate(std::ios_base::failbit); + + delete __sb_; + __sb_ = 0; +} +// basic_fstream + +OIIO_NAMESPACE_3_1_END + + + +#endif // #if defined(_WIN32) && defined(__GLIBCXX__) diff --git a/third_party/tlRender-install-Release/include/OpenImageIO/function_view.h b/third_party/tlRender-install-Release/include/OpenImageIO/function_view.h new file mode 100644 index 00000000..48bc0477 --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenImageIO/function_view.h @@ -0,0 +1,108 @@ +// Copyright Contributors to the OpenImageIO project. +// SPDX-License-Identifier: Apache-2.0 +// https://github.com/AcademySoftwareFoundation/OpenImageIO + +// Portions of the code in this file is a derived work based on the +// FunctionRef class in LLVM: +// +// University of Illinois/NCSA Open Source License +// +// Copyright (c) 2003-2018 University of Illinois at Urbana-Champaign. +// All rights reserved. +// +// Developed by: +// LLVM Team, University of Illinois at Urbana-Champaign, http://llvm.org +// +// Permission is hereby granted, free of charge, to any person obtaining a copy of +// this software and associated documentation files (the "Software"), to deal with +// the Software without restriction, including without limitation the rights to +// use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +// of the Software, and to permit persons to whom the Software is furnished to do +// so, subject to the following conditions: +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimers. +// * Redistributions in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimers in the +// documentation and/or other materials provided with the distribution. +// * Neither the names of the LLVM Team, University of Illinois at +// Urbana-Champaign, nor the names of its contributors may be used to +// endorse or promote products derived from this Software without specific +// prior written permission. +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +// FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE +// SOFTWARE. + + +#pragma once + +#include +#include + +#include +#include +#include + + +OIIO_NAMESPACE_3_1_BEGIN + + +/// function_view is a lightweight non-owning generic callable +/// object view, similar to a std::function, but with much less +/// overhead. +/// +/// A function_view invocation should have the same cost as a function +/// pointer (which it basically is underneath). Similar in spirit to a +/// string_view or span, the function-like object that the function_view +/// refers to MUST have a lifetime that outlasts any use of the +/// function_view. +/// +/// In contrast, a full std::function<> is an owning container for a +/// callable object. It's more robust, especially with respect to object +/// lifetimes, but the call overhead is quite high. So use a function_view +/// when you can. +/// +/// This implementation comes from LLVM: +/// https://github.com/llvm-mirror/llvm/blob/master/include/llvm/ADT/STLExtras.h + +template class function_view; + +template class function_view { + Ret (*callback)(intptr_t callable, Params... params) = nullptr; + intptr_t callable; + + template + static Ret callback_fn(intptr_t callable, Params... params) + { + return (*reinterpret_cast(callable))( + std::forward(params)...); + } + +public: + function_view() = default; + function_view(std::nullptr_t) {} + + template + function_view( + Callable&& callable, + typename std::enable_if< + !std::is_same::type, + function_view>::value>::type* = nullptr) + : callback(callback_fn::type>) + , callable(reinterpret_cast(&callable)) + { + } + + Ret operator()(Params... params) const + { + return callback(callable, std::forward(params)...); + } + + operator bool() const { return callback; } +}; + + +OIIO_NAMESPACE_3_1_END diff --git a/third_party/tlRender-install-Release/include/OpenImageIO/half.h b/third_party/tlRender-install-Release/include/OpenImageIO/half.h new file mode 100644 index 00000000..65d700da --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenImageIO/half.h @@ -0,0 +1,25 @@ +// Copyright Contributors to the OpenImageIO project. +// SPDX-License-Identifier: Apache-2.0 +// https://github.com/AcademySoftwareFoundation/OpenImageIO/ + + +#pragma once + +// Define IMATH_HALF_NO_LOOKUP_TABLE to ensure we convert float<->half without +// using the lookup table (and thus eliminating the need to link against +// libImath just for half conversion). +#ifndef IMATH_HALF_NO_LOOKUP_TABLE +# define IMATH_HALF_NO_LOOKUP_TABLE +#endif + +#include + + +#if defined(FMT_VERSION) && !defined(OIIO_HALF_FORMATTER) +# if FMT_VERSION >= 100000 +# define OIIO_HALF_FORMATTER +FMT_BEGIN_NAMESPACE +template<> struct formatter : ostream_formatter {}; +FMT_END_NAMESPACE +# endif +#endif diff --git a/third_party/tlRender-install-Release/include/OpenImageIO/hash.h b/third_party/tlRender-install-Release/include/OpenImageIO/hash.h new file mode 100644 index 00000000..1d8030fd --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenImageIO/hash.h @@ -0,0 +1,619 @@ +// Copyright Contributors to the OpenImageIO project. +// SPDX-License-Identifier: Apache-2.0 +// https://github.com/AcademySoftwareFoundation/OpenImageIO + +// clang-format off + +/// \file +/// +/// Wrapper so that hash_map and hash_set mean what we want regardless +/// of the compiler. +/// + +#pragma once + +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +#include + + +OIIO_NAMESPACE_3_1_BEGIN + +using std::hash; +using std::unordered_map; + +namespace fasthash { + +/* The MIT License + Copyright (C) 2012 Zilong Tan (eric.zltan@gmail.com) + Permission is hereby granted, free of charge, to any person + obtaining a copy of this software and associated documentation + files (the "Software"), to deal in the Software without + restriction, including without limitation the rights to use, copy, + modify, merge, publish, distribute, sublicense, and/or sell copies + of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + The above copyright notice and this permission notice shall be + included in all copies or substantial portions of the Software. + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS + BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN + ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE. +*/ + +// Compression function for Merkle-Damgard construction. +// This function is generated using the framework provided. +static inline uint64_t mix(uint64_t h) { + h ^= h >> 23; + h *= 0x2127599bf4325c37ULL; + h ^= h >> 47; + return h; +} + +inline uint64_t fasthash64(const void *buf, size_t len, uint64_t seed=1771) +{ + const uint64_t m = 0x880355f21e6d1965ULL; + const uint64_t *pos = (const uint64_t *)buf; + const uint64_t *end = pos + (len / 8); + const unsigned char *pos2; + uint64_t h = seed ^ (len * m); + uint64_t v; + + while (pos != end) { + // This appears to be a false positive which only affects GCC. + // https://godbolt.org/z/5q7Y7ndfb + OIIO_PRAGMA_WARNING_PUSH + OIIO_GCC_ONLY_PRAGMA(GCC diagnostic ignored "-Wmaybe-uninitialized") + v = *pos++; + OIIO_PRAGMA_WARNING_POP + h ^= mix(v); + h *= m; + } + + pos2 = (const unsigned char*)pos; + v = 0; + + switch (len & 7) { + case 7: v ^= (uint64_t)pos2[6] << 48; + case 6: v ^= (uint64_t)pos2[5] << 40; + case 5: v ^= (uint64_t)pos2[4] << 32; + case 4: v ^= (uint64_t)pos2[3] << 24; + case 3: v ^= (uint64_t)pos2[2] << 16; + case 2: v ^= (uint64_t)pos2[1] << 8; + case 1: v ^= (uint64_t)pos2[0]; + h ^= mix(v); + h *= m; + } + + return mix(h); +} + +// simplified version for hashing just a few ints +inline uint64_t fasthash64(const std::initializer_list buf) { + const uint64_t m = 0x880355f21e6d1965ULL; + uint64_t h = (buf.size() * sizeof(uint64_t)) * m; + for (const uint64_t v : buf) { + h ^= mix(v); + h *= m; + } + return mix(h); +} + +} // namespace fasthash + + +namespace xxhash { + +// xxhash: https://github.com/Cyan4973/xxHash +// BSD 2-clause license + +unsigned int OIIO_API XXH32 (const void* input, size_t length, + unsigned seed=1771); +unsigned long long OIIO_API XXH64 (const void* input, size_t length, + unsigned long long seed=1771); + +inline size_t xxhash (const void* input, size_t length, size_t seed=1771) +{ + return size_t (XXH64 (input, length, (unsigned long long)seed)); +} + +template +inline size_t xxhash (const Str& s, size_t seed=1771) { + assert(sizeof(s[0]) == 1); + return xxhash (s.data(), s.length(), seed); +} + +} // end namespace xxhash + + + + +namespace bjhash { + +// Bob Jenkins "lookup3" hashes: http://burtleburtle.net/bob/c/lookup3.c +// It's in the public domain. + +OIIO_FORCEINLINE OIIO_HOSTDEVICE uint32_t +rotl32(uint32_t x, int k) +{ +#if defined(__CUDA_ARCH__) && __CUDA_ARCH__ >= 320 + return __funnelshift_lc(x, x, k); +#else + return (x << k) | (x >> (32 - k)); +#endif +} + +OIIO_FORCEINLINE OIIO_HOSTDEVICE uint64_t +rotl64(uint64_t x, int k) +{ + return (x << k) | (x >> (64 - k)); +} + +// Mix up the bits of a, b, and c (changing their values in place). +inline OIIO_HOSTDEVICE void bjmix (uint32_t &a, uint32_t &b, uint32_t &c) +{ + a -= c; a ^= rotl32(c, 4); c += b; + b -= a; b ^= rotl32(a, 6); a += c; + c -= b; c ^= rotl32(b, 8); b += a; + a -= c; a ^= rotl32(c,16); c += b; + b -= a; b ^= rotl32(a,19); a += c; + c -= b; c ^= rotl32(b, 4); b += a; +} + +// Mix up and combine the bits of a, b, and c (doesn't change them, but +// returns a hash of those three original values). 21 ops +inline OIIO_HOSTDEVICE uint32_t bjfinal (uint32_t a, uint32_t b, uint32_t c=0xdeadbeef) +{ + c ^= b; c -= rotl32(b,14); + a ^= c; a -= rotl32(c,11); + b ^= a; b -= rotl32(a,25); + c ^= b; c -= rotl32(b,16); + a ^= c; a -= rotl32(c,4); + b ^= a; b -= rotl32(a,14); + c ^= b; c -= rotl32(b,24); + return c; +} + +// Mix up 4 64-bit inputs (non-destructively), and return a 64 bit hash. +// Adapted from http://burtleburtle.net/bob/c/SpookyV2.h 33 ops +inline uint64_t bjfinal64 (uint64_t h0, uint64_t h1, uint64_t h2, uint64_t h3) +{ + h3 ^= h2; h2 = rotl64(h2,15); h3 += h2; + h0 ^= h3; h3 = rotl64(h3,52); h0 += h3; + h1 ^= h0; h0 = rotl64(h0,26); h1 += h0; + h2 ^= h1; h1 = rotl64(h1,51); h2 += h1; + h3 ^= h2; h2 = rotl64(h2,28); h3 += h2; + h0 ^= h3; h3 = rotl64(h3,9); h0 += h3; + h1 ^= h0; h0 = rotl64(h0,47); h1 += h0; + h2 ^= h1; h1 = rotl64(h1,54); h2 += h1; + h3 ^= h2; h2 = rotl64(h2,32); h3 += h2; + h0 ^= h3; h3 = rotl64(h3,25); h0 += h3; + h1 ^= h0; h0 = rotl64(h0,63); h1 += h0; + return h1; +} + +// Standard "lookup3" hash, arbitrary length in bytes. +uint32_t OIIO_API hashlittle (const void *key, size_t length, + uint32_t seed=1771); + +// Hash an array of 32 bit words -- faster than hashlittle if you know +// it's a whole number of 4-byte words. +uint32_t OIIO_API hashword (const uint32_t *key, size_t nwords, + uint32_t seed=1771); + +// Hash a string without pre-known length. We use the Jenkins +// one-at-a-time hash (http://en.wikipedia.org/wiki/Jenkins_hash_function), +// which seems to be a good speed/quality/requirements compromise. +// Note that this is only returning a 32 bit hash space. +inline size_t +strhash (const char *s) +{ + if (! s) return 0; + unsigned int h = 0; + while (*s) { + h += (unsigned char)(*s); + h += h << 10; + h ^= h >> 6; + ++s; + } + h += h << 3; + h ^= h >> 11; + h += h << 15; + return h; +} + + +// Hash a string_view. We use the Jenkins +// one-at-a-time hash (http://en.wikipedia.org/wiki/Jenkins_hash_function), +// which seems to be a good speed/quality/requirements compromise. +// Note that this is only returning a 32 bit hash space. +inline size_t +strhash (string_view s) +{ + size_t len = s.length(); + if (! len) return 0; + unsigned int h = 0; + for (size_t i = 0; i < len; ++i) { + h += (unsigned char)(s[i]); + h += h << 10; + h ^= h >> 6; + } + h += h << 3; + h ^= h >> 11; + h += h << 15; + return h; +} + +} // end namespace bjhash + + +namespace murmur { + +// These functions were lifted from the public domain Murmurhash3. We +// don't bother using Murmurhash -- in my tests, it was slower than +// xxhash in all cases, and comparable to bjhash. But these two fmix +// functions are useful for scrambling the bits of a single 32 or 64 bit +// value. + +inline uint32_t fmix (uint32_t h) +{ + h ^= h >> 16; + h *= 0x85ebca6b; + h ^= h >> 13; + h *= 0xc2b2ae35; + h ^= h >> 16; + return h; +} + +inline uint64_t fmix (uint64_t k) +{ + k ^= k >> 33; + k *= 0xff51afd7ed558ccdULL; + k ^= k >> 33; + k *= 0xc4ceb9fe1a85ec53ULL; + k ^= k >> 33; + return k; +} + +} // end namespace murmur + + + +namespace farmhash { + +// Copyright (c) 2014 Google, Inc. +// https://github.com/google/farmhash +// See OpenImageIO's hashes.cpp for the MIT license for this code. + + +#if defined(FARMHASH_UINT128_T_DEFINED) + +OIIO_HOSTDEVICE inline constexpr uint64_t Uint128Low64(const uint128_t x) { + return static_cast(x); +} + +OIIO_HOSTDEVICE inline constexpr uint64_t Uint128High64(const uint128_t x) { + return static_cast(x >> 64); +} + +OIIO_HOSTDEVICE inline constexpr uint128_t Uint128(uint64_t lo, uint64_t hi) { + return lo + (((uint128_t)hi) << 64); +} + +OIIO_HOSTDEVICE inline constexpr void +CopyUint128(uint128_t &dst, const uint128_t src) { + dst = src; +} + +#else + +typedef std::pair uint128_t; +OIIO_HOSTDEVICE inline constexpr uint64_t Uint128Low64(const uint128_t x) { + return x.first; +} + +OIIO_HOSTDEVICE inline constexpr uint64_t Uint128High64(const uint128_t x) { + return x.second; +} + +OIIO_HOSTDEVICE inline constexpr uint128_t Uint128(uint64_t lo, uint64_t hi) { + return uint128_t(lo, hi); +} + +OIIO_HOSTDEVICE inline constexpr void +CopyUint128(uint128_t &dst, const uint128_t src) { + dst.first = src.first; + dst.second = src.second; + +} +#endif + + +// BASIC STRING HASHING + +// Hash function for a byte array. +// May change from time to time, may differ on different platforms, may differ +// depending on NDEBUG. +size_t OIIO_API Hash(const char* s, size_t len); + +// Hash function for a byte array. Most useful in 32-bit binaries. +// May change from time to time, may differ on different platforms, may differ +// depending on NDEBUG. +uint32_t OIIO_API Hash32(const char* s, size_t len); + +// Hash function for a byte array. For convenience, a 32-bit seed is also +// hashed into the result. +// May change from time to time, may differ on different platforms, may differ +// depending on NDEBUG. +uint32_t OIIO_API Hash32WithSeed(const char* s, size_t len, uint32_t seed); + +// Hash 128 input bits down to 64 bits of output. +// Hash function for a byte array. +// May change from time to time, may differ on different platforms, may differ +// depending on NDEBUG. +uint64_t OIIO_API Hash64(const char* s, size_t len); + +// Hash function for a byte array. For convenience, a 64-bit seed is also +// hashed into the result. +// May change from time to time, may differ on different platforms, may differ +// depending on NDEBUG. +uint64_t OIIO_API Hash64WithSeed(const char* s, size_t len, uint64_t seed); + +// Hash function for a byte array. For convenience, two seeds are also +// hashed into the result. +// May change from time to time, may differ on different platforms, may differ +// depending on NDEBUG. +uint64_t OIIO_API Hash64WithSeeds(const char* s, size_t len, + uint64_t seed0, uint64_t seed1); + +// Hash function for a byte array. +// May change from time to time, may differ on different platforms, may differ +// depending on NDEBUG. +uint128_t OIIO_API Hash128(const char* s, size_t len); + +// Hash function for a byte array. For convenience, a 128-bit seed is also +// hashed into the result. +// May change from time to time, may differ on different platforms, may differ +// depending on NDEBUG. +uint128_t OIIO_API Hash128WithSeed(const char* s, size_t len, uint128_t seed); + +// BASIC NON-STRING HASHING + +// This is intended to be a reasonably good hash function. +// May change from time to time, may differ on different platforms, may differ +// depending on NDEBUG. +OIIO_HOSTDEVICE inline constexpr uint64_t Hash128to64(uint128_t x) { + // Murmur-inspired hashing. + const uint64_t kMul = 0x9ddfea08eb382d69ULL; + uint64_t a = (Uint128Low64(x) ^ Uint128High64(x)) * kMul; + a ^= (a >> 47); + uint64_t b = (Uint128High64(x) ^ a) * kMul; + b ^= (b >> 47); + b *= kMul; + return b; +} + +// FINGERPRINTING (i.e., good, portable, forever-fixed hash functions) + +// Fingerprint function for a byte array. Most useful in 32-bit binaries. +uint32_t OIIO_API Fingerprint32(const char* s, size_t len); + +// Fingerprint function for a byte array. +uint64_t OIIO_API Fingerprint64(const char* s, size_t len); + +// Fingerprint function for a byte array. +uint128_t OIIO_API Fingerprint128(const char* s, size_t len); + +// This is intended to be a good fingerprinting primitive. +// See below for more overloads. +OIIO_HOSTDEVICE inline constexpr uint64_t Fingerprint(uint128_t x) { + // Murmur-inspired hashing. + const uint64_t kMul = 0x9ddfea08eb382d69ULL; + uint64_t a = (Uint128Low64(x) ^ Uint128High64(x)) * kMul; + a ^= (a >> 47); + uint64_t b = (Uint128High64(x) ^ a) * kMul; + b ^= (b >> 44); + b *= kMul; + b ^= (b >> 41); + b *= kMul; + return b; +} + +// This is intended to be a good fingerprinting primitive. +OIIO_HOSTDEVICE inline constexpr uint64_t Fingerprint(uint64_t x) { + // Murmur-inspired hashing. + const uint64_t kMul = 0x9ddfea08eb382d69ULL; + uint64_t b = x * kMul; + b ^= (b >> 44); + b *= kMul; + b ^= (b >> 41); + b *= kMul; + return b; +} + +#ifndef FARMHASH_NO_CXX_STRING + +// Convenience functions to hash or fingerprint C++ strings. +// These require that Str::data() return a pointer to the first char +// (as a const char*) and that Str::length() return the string's length; +// they work with std::string, for example. + +// Hash function for a byte array. +// May change from time to time, may differ on different platforms, may differ +// depending on NDEBUG. +template +inline size_t Hash(const Str& s) { + assert(sizeof(s[0]) == 1); + return Hash(s.data(), s.length()); +} + +// Hash function for a byte array. Most useful in 32-bit binaries. +// May change from time to time, may differ on different platforms, may differ +// depending on NDEBUG. +template +inline uint32_t Hash32(const Str& s) { + assert(sizeof(s[0]) == 1); + return Hash32(s.data(), s.length()); +} + +// Hash function for a byte array. For convenience, a 32-bit seed is also +// hashed into the result. +// May change from time to time, may differ on different platforms, may differ +// depending on NDEBUG. +template +inline uint32_t Hash32WithSeed(const Str& s, uint32_t seed) { + assert(sizeof(s[0]) == 1); + return Hash32WithSeed(s.data(), s.length(), seed); +} + +// Hash 128 input bits down to 64 bits of output. +// Hash function for a byte array. +// May change from time to time, may differ on different platforms, may differ +// depending on NDEBUG. +template +inline uint64_t Hash64(const Str& s) { + assert(sizeof(s[0]) == 1); + return Hash64(s.data(), s.length()); +} + +// Hash function for a byte array. For convenience, a 64-bit seed is also +// hashed into the result. +// May change from time to time, may differ on different platforms, may differ +// depending on NDEBUG. +template +inline uint64_t Hash64WithSeed(const Str& s, uint64_t seed) { + assert(sizeof(s[0]) == 1); + return Hash64WithSeed(s.data(), s.length(), seed); +} + +// Hash function for a byte array. For convenience, two seeds are also +// hashed into the result. +// May change from time to time, may differ on different platforms, may differ +// depending on NDEBUG. +template +inline uint64_t Hash64WithSeeds(const Str& s, uint64_t seed0, uint64_t seed1) { + assert(sizeof(s[0]) == 1); + return Hash64WithSeeds(s.data(), s.length(), seed0, seed1); +} + +// Hash function for a byte array. +// May change from time to time, may differ on different platforms, may differ +// depending on NDEBUG. +template +inline uint128_t Hash128(const Str& s) { + assert(sizeof(s[0]) == 1); + return Hash128(s.data(), s.length()); +} + +// Hash function for a byte array. For convenience, a 128-bit seed is also +// hashed into the result. +// May change from time to time, may differ on different platforms, may differ +// depending on NDEBUG. +template +inline uint128_t Hash128WithSeed(const Str& s, uint128_t seed) { + assert(sizeof(s[0]) == 1); + return Hash128(s.data(), s.length(), seed); +} + +// FINGERPRINTING (i.e., good, portable, forever-fixed hash functions) + +// Fingerprint function for a byte array. Most useful in 32-bit binaries. +template +inline uint32_t Fingerprint32(const Str& s) { + assert(sizeof(s[0]) == 1); + return Fingerprint32(s.data(), s.length()); +} + +// Fingerprint 128 input bits down to 64 bits of output. +// Fingerprint function for a byte array. +template +inline uint64_t Fingerprint64(const Str& s) { + assert(sizeof(s[0]) == 1); + return Fingerprint64(s.data(), s.length()); +} + +// Fingerprint function for a byte array. +template +inline uint128_t Fingerprint128(const Str& s) { + assert(sizeof(s[0]) == 1); + return Fingerprint128(s.data(), s.length()); +} + +#endif + +} // namespace farmhash + + + + +class CSHA1; // opaque forward declaration + + +/// Class that encapsulates SHA-1 hashing, a cryptographic-strength +/// 160-bit hash function. It's not as fast as our other hashing +/// methods, but has an extremely low chance of having collisions. +class OIIO_API SHA1 { +public: + /// Create SHA1, optionally read data + SHA1 (const void *data=NULL, size_t size=0); + ~SHA1 (); + + SHA1 (string_view str) : SHA1(str.data(), str.size()) { } + + template + SHA1 (span v) : SHA1(v.data(), v.size()) { } + + /// Append more data + void append (const void *data, size_t size); + + /// Append more data from a string_view + void append (string_view s) { + append(s.data(), s.size()); + } + + /// Append more data from a span, without thinking about sizes. + template void append (span v) { + append (v.data(), v.size()*sizeof(T)); + } + + /// Type for storing the raw bits of the hash + struct Hash { + unsigned char hash[20]; + }; + + /// Get the digest and store it in Hash h. + void gethash (Hash &h); + + /// Get the digest and store it in h (must point to enough storage + /// to accommodate 20 bytes). + void gethash (void *h) { gethash (*(Hash *)h); } + + /// Return the digest as a hex string + std::string digest (); + + /// Roll the whole thing into one functor, return the string digest. + static std::string digest (const void *data, size_t size) { + SHA1 s (data, size); return s.digest(); + } + +private: + CSHA1 *m_csha1; + bool m_final; +}; + + +OIIO_NAMESPACE_3_1_END diff --git a/third_party/tlRender-install-Release/include/OpenImageIO/image_span.h b/third_party/tlRender-install-Release/include/OpenImageIO/image_span.h new file mode 100644 index 00000000..ba94ccbd --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenImageIO/image_span.h @@ -0,0 +1,393 @@ +// Copyright Contributors to the OpenImageIO project. +// SPDX-License-Identifier: Apache-2.0 +// https://github.com/AcademySoftwareFoundation/OpenImageIO + + +#pragma once + +#include +#include +#include +#include + + + +OIIO_NAMESPACE_3_1_BEGIN + +/// image_span : a non-owning reference to an image-like n-D array having +/// between 2 and 4 dimensions representing channel, x, y, z with each +/// dimension having known size and optionally non-default strides (expressed +/// in bytes) through the data. An `image_span` is mutable (the values in +/// the image may be modified), whereas an `image_span` is not +/// mutable. +/// +/// Note that the optional template parameter `Rank` includes the channels as +/// the first dimension. When no Rank template parameter is provided, it +/// defaults to 4, meaning it's an image span that can describe any choice of +/// a scanline (Rank 2), 2D image (Rank 3), or volume (Rank 4). +template class image_span { + static_assert(Rank >= 2 && Rank <= 4, "Rank must be between 2 and 4"); + +public: + using value_type = T; + using reference = T&; + using const_reference = const T&; + using stride_t = int64_t; + using stride_type = int64_t; + using size_type = uint32_t; + + static constexpr stride_t AutoStride = std::numeric_limits::min(); + + /// Default ctr -- points to nothing + image_span() = default; + + /// Copy constructor + image_span(const image_span& copy) = default; + + /// Construct from T*, dimensions, and (possibly default) strides (in + /// bytes). + image_span(T* data, uint32_t nchannels, uint32_t width, uint32_t height, + uint32_t depth = 1, stride_t chanstride = AutoStride, + stride_t xstride = AutoStride, stride_t ystride = AutoStride, + stride_t zstride = AutoStride, uint32_t chansize = sizeof(T)) + : m_data(data) + , m_chansize(chansize) + { + // Validations: + // - an image_span can have any chansize, but any other T must + // have the chansize equal to the data type size. + OIIO_DASSERT((std::is_same, std::byte>::value) + || chansize == sizeof(T)); + + m_sizes[0] = nchannels; + m_sizes[1] = width; + if constexpr (Rank >= 3) + m_sizes[2] = height; + if constexpr (Rank >= 4) + m_sizes[3] = depth; + + chanstride = chanstride != AutoStride ? chanstride : chansize; + xstride = xstride != AutoStride ? xstride : nchannels * chanstride; + m_strides[0] = chanstride; + m_strides[1] = xstride; + if constexpr (Rank >= 3) { + ystride = ystride != AutoStride ? ystride : width * xstride; + m_strides[2] = ystride; + } + if constexpr (Rank >= 4) { + zstride = zstride != AutoStride ? zstride : height * ystride; + m_strides[3] = zstride; + } + } + + // clang-format off + /* clang_format gets confused by this */ + + /// Copy constructor from `image_span` to `image_span`. + template, U>) + && std::is_const_v && !std::is_const_v + && R <= Rank)> + image_span(const image_span& other) + : image_span(other.data(), other.nchannels(), other.width(), + other.height(), other.depth(), other.chanstride(), + other.xstride(), other.ystride(), other.zstride(), + other.chansize()) + { + } + // clang-format on + + /// Construct from `span` and dimensions, assume contiguous strides. + image_span(span data, uint32_t nchannels, uint32_t width, + uint32_t height, uint32_t depth = 1) + : image_span(data.data(), nchannels, width, height, depth) + { + // Validations: + // - The full layout must fit within the original span size. + OIIO_DASSERT(nvalues() <= data.size()); + } + + /// assignments -- not a deep copy, just make this image_span point to the + /// same strided data as the operand. + image_span& operator=(const image_span& copy) = default; + + /// image_span(x,y,z) returns a `strided_ptr` for the pixel (x,y,z). + /// The z can be omitted for 2D images. Note that the resulting + /// strided_ptr can then have individual channels accessed with + /// operator[]. This particular strided pointer has stride multiplier 1, + /// because this class uses bytes as strides, not sizeof(T). + strided_ptr operator()(uint32_t x, uint32_t y, uint32_t z = 0) + { + return strided_ptr(getptr(0, x, y, z), chanstride()); + } + + /// Return the number of dimensions of the image_span. Remember that a + /// Rank 2 image_span is one scanline, a Rank 3 image_span can be a 2D + /// image, and a Rank 4 image_span can be a volume. + static constexpr size_t rank() noexcept { return Rank; } + + /// Return the number of channels. + constexpr size_type nchannels() const { return m_sizes[0]; } + /// Return the stride, in bytes, between channels within a pixel. + constexpr stride_type chanstride() const { return m_strides[0]; } + + /// Return the width -- the number of pixels in the x dimension. + constexpr size_type width() const { return m_sizes[1]; } + /// Return the stride, in bytes, between pixels in the x dimension. + constexpr stride_type xstride() const { return m_strides[1]; } + + /// Return the height -- the number of pixels in the y dimension. This + /// will be 1 for a Rank 2 (single scanline) `image_span`. + constexpr size_type height() const + { + if constexpr (Rank >= 3) + return m_sizes[2]; + else + return 1; + } + /// Return the stride, in bytes, between pixels in the y dimension. This + /// will be 0 for a Rank 2 (single scanline) `image_span`. + constexpr stride_type ystride() const + { + if constexpr (Rank >= 3) + return m_strides[2]; + else + return 0; + } + + /// Return the depth -- the number of pixels in the z dimension. This will + /// be 1 if there are fewer than 3 spatial dimensions (i.e. a scanline + /// `image_span` or 2D image `image_span`). + constexpr size_type depth() const + { + if constexpr (Rank >= 4) + return m_sizes[3]; + return 1; + } + /// Return the stride, in bytes, between pixels in the z dimension. This + /// will be 0 if there are fewer than 3 spatial dimensions (i.e. a + /// scanline `image_span` or 2D image `image_span`). + constexpr stride_type zstride() const + { + if constexpr (Rank >= 4) + return m_strides[3]; + return 0; + } + + /// Return the size of a channel, in bytes. For all element types except + /// for std::byte, this should always be the same as sizeof(T). For + /// std::byte, this may be different if the channels are another data type + /// but for the sake of this span, we are treating it as untyped memory. + /// The channel size is set by the constructor. + constexpr size_type chansize() const { return m_chansize; } + + /// Return a raw pointer to the start of the data: channel=0, x=0, y=0, + /// z=0. + T* data() const { return m_data; } + + /// Convert an `image_span` to an `image_span` + /// representing the same sized and strided memory pattern represented + /// un-typed memory. + image_span as_bytes_image_span() const noexcept + { + return image_span(reinterpret_cast( + m_data), + nchannels(), width(), height(), + depth(), chanstride(), xstride(), + ystride(), zstride(), m_chansize); + } + + /// Convert an `image_span` to an image_span representing + /// the same sized and strided memory pattern represented un-typed memory. + /// Note that this will not work (be a compiler error) if T a const type. + image_span as_writable_bytes_image_span() const noexcept + { + return image_span(reinterpret_cast(m_data), + nchannels(), width(), height(), depth(), + chanstride(), xstride(), ystride(), + zstride(), m_chansize); + } + + /// Does this image_span represent contiguous pixels -- i.e. within each + /// pixel, the channels directly follow each other in memory? + constexpr bool is_contiguous_pixel() const noexcept + { + return chanstride() == m_chansize; + } + + /// Does this image_span represent contiguous scanlines -- i.e. channels + /// contiguous within each pixel and pixels contiguous within each + /// scanline? + constexpr bool is_contiguous_scanline() const noexcept + { + return is_contiguous_pixel() && xstride() == chanstride() * nchannels(); + } + + /// Does this image_span represent contiguous 2D image planes -- i.e. + /// channels contiguous within each pixel, pixels contiguous within each + /// scanline, scanlines contiguous within each 2D image plane? + constexpr bool is_contiguous_plane() const noexcept + { + return is_contiguous_scanline() + && (Rank < 3 || ystride() == xstride() * width()); + } + + /// Does this image_span represent fully contiguous data in all + /// dimensions, i.e., each channel, pixel, scanline, and image plane + /// directly abuts its neighbour, with no gaps? + constexpr bool is_contiguous() const noexcept + { + return is_contiguous_scanline() + /* image plane is contiguous scanlines */ + && (Rank < 3 || ystride() == xstride() * width()) + /* volume is contiguous planes */ + && (Rank < 4 || zstride() == ystride() * height()); + } + + /// Return the total number of pixels in the span: `w * h * d`. + constexpr size_t npixels() const + { + return size_t(width()) * size_t(height()) * size_t(depth()); + } + + /// Return the total number of values in the span: `c * w * h * d`. + constexpr size_t nvalues() const + { + return size_t(nchannels()) * size_t(width()) * size_t(height()) + * size_t(depth()); + } + + /// Return the total number of bytes of (c*w*h*d) values of the given type + /// (but not counting space in any gaps). + constexpr size_t size_bytes() const { return nvalues() * chansize(); } + + /// Return a reference to the value at channel c, pixel (x,y,z). + inline T& get(int c, int x, int y = 0, int z = 0) const + { + // Bounds check in done in getptr + return *getptr(c, x, y, z); + } + + /// Return a pointer to the value at channel c, pixel (x,y,z). + inline T* getptr(int c, int x, int y, int z = 0) const + { + // Bounds check in debug mode + OIIO_DASSERT(unsigned(c) < unsigned(nchannels()) + && unsigned(x) < unsigned(width()) + && unsigned(y) < unsigned(height()) + && unsigned(z) < unsigned(depth())); + if constexpr (Rank == 2) { + OIIO_DASSERT(y == 0 && z == 0); + } else if constexpr (Rank == 3) { + OIIO_DASSERT(z == 0); + } + return (T*)((char*)data() + c * chanstride() + x * xstride() + + y * ystride() + z * zstride()); + } + + /// Return a pointer to the value at channel 0, pixel (x,y,z). + inline T* getpixelptr(int x, int y = 0, int z = 0) const + { + return getptr(0, x, y, z); + } + + /// Return a subspan in x, y, and z (but assume all channels are + /// included). + image_span subspan(uint32_t xbegin, uint32_t xend, uint32_t ybegin, + uint32_t yend, uint32_t zbegin = 0, + uint32_t zend = 1) const + { + // Bounds check in debug mode + OIIO_DASSERT(xbegin <= xend && xend <= width() && ybegin <= yend + && yend <= height() && zbegin <= zend && zend <= depth()); + return image_span(data() + xbegin * xstride() + ybegin * ystride() + + zbegin * zstride(), + nchannels(), xend - xbegin, yend - ybegin, + zend - zbegin, chanstride(), xstride(), ystride(), + zstride(), chansize()); + } + + /// Return a subspan in all dimensions: channel, x, y, and z. + image_span chansubspan(uint32_t chbegin, uint32_t chend, uint32_t xbegin, + uint32_t xend, uint32_t ybegin, uint32_t yend, + uint32_t zbegin = 0, uint32_t zend = 1) const + { + // Bounds check in debug mode + OIIO_DASSERT(chbegin <= chend && chend <= nchannels() && xbegin <= xend + && xend <= width() && ybegin <= yend && yend <= height() + && zbegin <= zend && zend <= depth()); + return image_span(data() + chbegin * chanstride() + xbegin * xstride() + + ybegin * ystride() + zbegin * zstride(), + chend - chbegin, xend - xbegin, yend - ybegin, + zend - zbegin, chanstride(), xstride(), ystride(), + zstride(), chansize()); + } + +private: + T* m_data { nullptr }; // pointer to the start of the data + std::array m_strides; // byte strides for each dim + std::array m_sizes; // size for each dim + uint32_t m_chansize { sizeof(T) }; // size of a channel value, in bytes +}; + + + +/// Type alias for an image_span that can describe a 3D volumetric image with +/// channels. +template using image3d_span = image_span; + +/// Type alias for an image_span that can describe a 2D image with channels, +/// but cannot describe a 3D volume. +template using image2d_span = image_span; + +/// Type alias for an image_span that can describe a single scanline with +/// channels, but cannot describe a full 2D image or a 3D volume. +template using image1d_span = image_span; + + + +/// Convert an image_span of any type to a non-mutable span of const bytes +/// covering the same range of memory. +template +image_span +as_image_span_bytes(const image_span& src) noexcept +{ + return image_span( + reinterpret_cast(src.data()), src.nchannels(), + src.width(), src.height(), src.depth(), src.chanstride(), src.xstride(), + src.ystride(), src.zstride(), src.chansize()); +} + + +/// Convert an image_span of any nonconst type to a mutable span of bytes +/// covering the same range of memory. +template +image_span +as_image_span_writable_bytes(const image_span& src) noexcept +{ + return image_span(reinterpret_cast(src.data()), + src.nchannels(), src.width(), src.height(), + src.depth(), src.chanstride(), src.xstride(), + src.ystride(), src.zstride(), src.chansize()); +} + + + +/// Verify that the image_span has all its contents lying within the +/// contiguous span. +OIIO_API bool +image_span_within_span(const image_span& ispan, + span contiguous) noexcept; + +/// image_span_within_span() for generic span types. Just reduce to +/// const byte versions. +template +bool +image_span_within_span(const image_span& ispan, + span contiguous) noexcept +{ + return image_span_within_span(as_image_span_bytes(ispan), + as_bytes(contiguous)); +} + +OIIO_NAMESPACE_3_1_END diff --git a/third_party/tlRender-install-Release/include/OpenImageIO/image_view.h b/third_party/tlRender-install-Release/include/OpenImageIO/image_view.h new file mode 100644 index 00000000..6811bac5 --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenImageIO/image_view.h @@ -0,0 +1,126 @@ +// Copyright Contributors to the OpenImageIO project. +// SPDX-License-Identifier: Apache-2.0 +// https://github.com/AcademySoftwareFoundation/OpenImageIO + + +#pragma once + +#include +#include + +#include +#include + + +OIIO_NAMESPACE_3_1_BEGIN + + +/// image_view : a non-owning reference to an image-like array (indexed by +/// x, y, z, and channel) with known dimensions and optionally non-default +/// strides (expressed in bytes) through the data. An image_view is +/// mutable (the values in the image may be modified), whereas an +/// image_view is not mutable. +template +class OIIO_DEPRECATED("image_view is deprecated. Consider image_span.") + image_view { +public: + typedef T value_type; + typedef T& reference; + typedef const T& const_reference; + typedef int64_t stride_t; +#ifdef INT64_MIN + static const stride_t AutoStride = INT64_MIN; +#else + // Some systems don't have INT64_MIN defined. Sheesh. + static const stride_t AutoStride = (-9223372036854775807LL - 1); +#endif + + /// Default ctr -- points to nothing + image_view() { init(); } + + /// Copy constructor + image_view(const image_view& copy) + { + init(copy.m_data, copy.m_nchannels, copy.m_width, copy.m_height, + copy.m_depth, copy.m_chanstride, copy.m_xstride, copy.m_ystride, + copy.m_zstride); + } + + /// Construct from T*, dimensions, and (possibly default) strides (in + /// bytes). + image_view(T* data, int nchannels, int width, int height, int depth = 1, + stride_t chanstride = AutoStride, stride_t xstride = AutoStride, + stride_t ystride = AutoStride, stride_t zstride = AutoStride) + { + init(data, nchannels, width, height, depth, chanstride, xstride, + ystride, zstride); + } + + /// assignments -- not a deep copy, just make this image_view + /// point to the same data as the operand. + image_view& operator=(const image_view& copy) + { + init(copy.m_data, copy.m_nchannels, copy.m_width, copy.m_height, + copy.m_depth, copy.m_chanstride, copy.m_xstride, copy.m_ystride, + copy.m_zstride); + return *this; + } + + /// iav(x,y,z)returns a strided_ptr for the pixel (x,y,z). The z + /// can be omitted for 2D images. Note than the resulting + /// strided_ptr can then have individual channels accessed with + /// operator[]. This particular strided pointer has stride multiplier + /// 1, because this class uses bytes as strides, not sizeof(T). + strided_ptr operator()(int x, int y, int z = 0) + { + return strided_ptr(getptr(0, x, y, z), m_chanstride); + } + + int nchannels() const { return m_nchannels; } + int width() const { return m_width; } + int height() const { return m_height; } + int depth() const { return m_depth; } + + stride_t chanstride() const { return m_chanstride; } + stride_t xstride() const { return m_xstride; } + stride_t ystride() const { return m_ystride; } + stride_t zstride() const { return m_zstride; } + + const T* data() const { return m_data; } + + void clear() { init(); } + +private: + const T* m_data; + int m_nchannels, m_width, m_height, m_depth; + stride_t m_chanstride, m_xstride, m_ystride, m_zstride; + + void init(T* data, int nchannels, int width, int height, int depth = 1, + stride_t chanstride = AutoStride, stride_t xstride = AutoStride, + stride_t ystride = AutoStride, stride_t zstride = AutoStride) + { + m_data = data; + m_nchannels = nchannels; + m_width = width; + m_height = height; + m_depth = depth; + m_chanstride = chanstride != AutoStride ? chanstride : sizeof(T); + m_xstride = xstride != AutoStride ? xstride + : m_nchannels * m_chanstride; + m_ystride = ystride != AutoStride ? ystride : m_width * m_xstride; + m_zstride = zstride != AutoStride ? zstride : m_height * m_ystride; + } + + inline T* getptr(int c, int x, int y, int z = 0) const + { + return (T*)((char*)m_data + c * m_chanstride + x * m_xstride + + y * m_ystride + z * m_zstride); + } + inline T& get(int c, int x, int y, int z = 0) const + { + return *getptr(c, x, y, z); + } +}; + + +OIIO_NAMESPACE_3_1_END diff --git a/third_party/tlRender-install-Release/include/OpenImageIO/imagebuf.h b/third_party/tlRender-install-Release/include/OpenImageIO/imagebuf.h new file mode 100644 index 00000000..947d1b65 --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenImageIO/imagebuf.h @@ -0,0 +1,2039 @@ +// Copyright Contributors to the OpenImageIO project. +// SPDX-License-Identifier: Apache-2.0 +// https://github.com/AcademySoftwareFoundation/OpenImageIO + + +#pragma once +#define OPENIMAGEIO_IMAGEBUF_H + +#if defined(_MSC_VER) +// Ignore warnings about DLL exported classes with member variables that are template classes. +// This happens with the std::vector and std::string protected members of ImageBuf below. +# pragma warning(disable : 4251) +#endif + +#include +#include +#include + +#include +#include + + +// Signal that this version of ImageBuf has constructors from spans +#define OIIO_IMAGEBUF_SPAN_CTR 1 + +// If before this header is included, OIIO_IMAGEBUF_DEPRECATE_RAW_PTR is +// defined, then we will deprecate the methods taking raw pointers. This is +// helpful for downstream apps aiming to transition to the new span-based API +// and want to ensure they are not using the old raw pointer API. +// #define OIIO_IMAGEBUF_DEPRECATE_RAW_PTR +#ifdef OIIO_IMAGEBUF_DEPRECATE_RAW_PTR +# define OIIO_IB_DEPRECATE_RAW_PTR \ + [[deprecated("Prefer the version that takes a span")]] +#else +# define OIIO_IB_DEPRECATE_RAW_PTR +#endif + + + +OIIO_NAMESPACE_3_1_BEGIN + + +/// Return pixel data window for this ImageSpec as a ROI. +OIIO_API ROI +get_roi(const ImageSpec& spec); + +/// Return full/display window for this ImageSpec as a ROI. +OIIO_API ROI +get_roi_full(const ImageSpec& spec); + +/// Set pixel data window for this ImageSpec to a ROI. +/// Does NOT change the channels of the spec, regardless of newroi. +OIIO_API void +set_roi(ImageSpec& spec, const ROI& newroi); + +/// Set full/display window for this ImageSpec to a ROI. +/// Does NOT change the channels of the spec, regardless of newroi. +OIIO_API void +set_roi_full(ImageSpec& spec, const ROI& newroi); + + +enum class InitializePixels { No = 0, Yes = 1 }; + + + +/// An ImageBuf is a simple in-memory representation of a 2D image. It uses +/// ImageInput and ImageOutput underneath for its file I/O, and has simple +/// routines for setting and getting individual pixels, that hides most of +/// the details of memory layout and data representation (translating +/// to/from float automatically). +/// +/// ImageBuf makes an important simplification: all channels are the same +/// data type. For example, if an image file on disk has a mix of `half` and +/// `float` channels, the in-memory ImageBuf representation will be entirely +/// `float` (for mixed data types, it will try to pick one that can best +/// represent all channels without a loss of precision or range). However, +/// by using the `set_write_format()` method, it is still possible to write +/// an ImageBuf to a file with mixed channel types. +/// +/// Most of the time, ImageBuf data is read lazily (I/O only happens when +/// you first call methods that actually need metadata or pixel data). +/// Explicit calls to `read()` are therefore optional and are only needed +/// if you want to specify non-default arguments (such as choosing something +/// other than the first subimage of the file, or forcing the read to +/// translate into a different data format than appears in the file). +/// +/// ImageBuf data coming from disk files may optionally be backed by +/// ImageCache, by explicitly passing an ImageCache to the ImageBuf +/// constructor or `reset()` method (pass `ImageCache::create()` to get a +/// pointer to the default global ImageCache), or by having previously set the +/// global OIIO attribute `"imagebuf:use_imagecache"` to a nonzero value. When +/// an ImageBuf is backed by ImageCache in this way, specific regions of the +/// image will only be read if and when they are needed, and if there are many +/// large ImageBuf's, memory holding pixels not recently accessed will be +/// automatically freed if the cache size limit is reached. +/// +/// Writable ImageBufs are always stored entirely in memory, and do not use +/// the ImageCache or any other clever schemes to limit memory. If you have +/// enough simultaneous writeable large ImageBuf's, you can run out of RAM. +/// Note that if an ImageBuf starts as readable (backed by ImageCache), any +/// alterations to its pixels (for example, via `setpixel()` or traversing +/// it with a non-const `Iterator`) will cause it to be read entirely into +/// memory and remain in memory thereafter for the rest of the life of that +/// ImageBuf. +/// +/// Notes about ImageBuf thread safety: +/// +/// * The various read-only methods for accessing the spec or the pixels, +/// including `init_spec()`, `read()`, `spec()`, all the getpixel flavors +/// and `ConstIterator` over the pixels, and other informational methods +/// such as `roi()`, all are thread-safe and may be called concurrently +/// with any of the other thread-safe methods. +/// * Methods that alter pixel values, such as all the setpixel flavors, +/// and (non-const) `Iterator` over the pixels, and the `write()` method +/// are "thread safe" in the sense that you won't crash your app by doing +/// these concurrently with each other or with the reading functionality, +/// but on the other hand, if two threads are changing the same pixels +/// simultaneously or one is writing while others are reading, you may end +/// up with an inconsistent resulting image. +/// * Construction and destruction, `reset()`, and anything that alters +/// image metadata (such as writes through `specmod()`) are NOT THREAD +/// SAFE and you should ensure that you are not doing any of these calls +/// simultaneously with any other operations on the same ImageBuf. +/// +class OIIO_API ImageBuf { +public: + /// An ImageBuf can store its pixels in one of several ways (each + /// identified by an `IBStorage` enumerated value): + enum IBStorage { + // clang-format off + UNINITIALIZED, + ///< An ImageBuf that doesn't represent any image at all + /// (either because it is newly constructed with the default + /// constructor, or had an error during construction). + LOCALBUFFER, + ///< "Local storage" is allocated to hold the image pixels + /// internal to the ImageBuf. This memory will be freed when + /// the ImageBuf is destroyed. + APPBUFFER, + ///< The ImageBuf "wraps" pixel memory already allocated and + /// owned by the calling application. The caller will continue + /// to own that memory and be responsible for freeing it after + /// the ImageBuf is destroyed. + IMAGECACHE + ///< The ImageBuf is "backed" by an ImageCache, which will + /// automatically be used to retrieve pixels when requested, but + /// the ImageBuf will not allocate separate storage for it. + /// This brings all the advantages of the ImageCache, but can + /// only be used for read-only ImageBuf's that reference a + /// stored image file. + // clang-format on + }; + + /// @{ + /// @name Constructing and destructing an ImageBuf. + + /// Default constructor makes an empty/uninitialized ImageBuf. There + /// isn't much you can do with an uninitialized buffer until you call + /// `reset()`. The storage type of a default-constructed ImageBuf is + /// `IBStorage::UNINITIALIZED`. + ImageBuf(); + + /// Destructor for an ImageBuf. + ~ImageBuf(); + + /// Construct a read-only ImageBuf that will be used to read the named + /// file (at the given subimage and MIP-level, defaulting to the first + /// in the file). But don't read it yet! The image will actually be + /// read lazily, only when other methods need to access the spec and/or + /// pixels, or when an explicit call to `init_spec()` or `read()` is + /// made, whichever comes first. + /// + /// The implementation may end up either reading the entire image + /// internally owned memory (if so, the storage will be `LOCALBUFFER`), + /// or it may rely on being backed by an ImageCache (in this case, the + /// storage will be `IMAGECACHE`) -- depending on the image size and + /// other factors. + /// + /// @param name + /// The image to read. + /// @param subimage/miplevel + /// The subimage and MIP level to read (defaults to the + /// first subimage of the file, highest-res MIP level). + /// @param imagecache + /// Optionally, an ImageCache to use, if possible, rather + /// than reading the entire image file into memory. + /// @param config + /// Optionally, a pointer to an ImageSpec whose metadata + /// contains configuration hints that set options related + /// to the opening and reading of the file. + /// @param ioproxy + /// Optional pointer to an IOProxy to use when reading from the + /// file. The caller retains ownership of the proxy, and must + /// ensure that it remains valid for the lifetime of the ImageBuf. + /// + explicit ImageBuf(string_view name, int subimage = 0, int miplevel = 0, + std::shared_ptr imagecache = {}, + const ImageSpec* config = nullptr, + Filesystem::IOProxy* ioproxy = nullptr); + + /// Construct a writable ImageBuf with the given specification + /// (including resolution, data type, metadata, etc.). The ImageBuf will + /// allocate and own its own pixel memory and will free that memory + /// automatically upon destruction, clear(), or reset(). Upon successful + /// initialization, the storage will be reported as `LOCALBUFFER`. + /// + /// @param spec + /// An ImageSpec describing the image and its metadata. If + /// not enough information is given to know how much memory + /// to allocate (width, height, depth, channels, and data + /// format), the ImageBuf will remain in an UNINITIALIZED + /// state and will have no local pixel storage. + /// @param zero + /// After a successful allocation of the local pixel + /// storage, this parameter controls whether the pixels + /// will be initialized to hold zero (black) values + /// (`InitializePixels::Yes`) or if the pixel memory will + /// remain uninitialized (`InitializePixels::No`) and thus + /// may hold nonsensical values. Choosing `No` may save the + /// time of writing to the pixel memory if you know for sure + /// that you are about to overwrite it completely before you + /// will need to read any pixel values. + /// + explicit ImageBuf(const ImageSpec& spec, + InitializePixels zero = InitializePixels::Yes); + + // Synonym for `ImageBuf(spec,zero)` but also gives it an internal name + // that will be used if write() is called with an empty filename. + ImageBuf(string_view name, const ImageSpec& spec, + InitializePixels zero = InitializePixels::Yes) + : ImageBuf(spec, zero) + { + set_name(name); + } + + /// Construct a writable ImageBuf that "wraps" existing pixel memory + /// owned by the calling application. The ImageBuf does not own the + /// pixel storage and will not free/delete that memory, even when + /// the ImageBuf is destroyed. Upon successful initialization, the + /// storage will be reported as `APPBUFFER`. + /// + /// @param spec + /// An ImageSpec describing the image and its metadata. If + /// not enough information is given to know the "shape" of + /// the image (width, height, depth, channels, and data + /// format), the ImageBuf will remain in an UNINITIALIZED + /// state. + /// @param buffer + /// A span delineating the extent of the safely accessible + /// memory comprising the pixel data. + /// @param buforigin + /// A pointer to the first pixel of the buffer. If null, it + /// will be assumed to be the beginning of the buffer. (This + /// parameter is useful if any negative strides are used to + /// give an unusual layout of pixels within the buffer.) + /// @param xstride/ystride/zstride + /// The distance in bytes between successive pixels, + /// scanlines, and image planes in the buffer (or + /// `AutoStride` to indicate "contiguous" data in any of + /// those dimensions). + /// + template + ImageBuf(const ImageSpec& spec, span buffer, void* buforigin = nullptr, + stride_t xstride = AutoStride, stride_t ystride = AutoStride, + stride_t zstride = AutoStride) + : ImageBuf(spec, as_bytes(buffer), buforigin, xstride, ystride, zstride) + { + } + // Special base case for read-only byte spans, this one does the hard work. + ImageBuf(const ImageSpec& spec, cspan buffer, + void* buforigin = nullptr, stride_t xstride = AutoStride, + stride_t ystride = AutoStride, stride_t zstride = AutoStride); + // Special base case for mutable byte spans, this one does the hard work. + ImageBuf(const ImageSpec& spec, span buffer, + void* buforigin = nullptr, stride_t xstride = AutoStride, + stride_t ystride = AutoStride, stride_t zstride = AutoStride); + + /// Construct an ImageBuf that "wraps" existing pixel memory owned by the + /// calling application. The ImageBuf does not own the pixel storage and + /// will not free/delete that memory, even when the ImageBuf is destroyed. + /// Upon successful initialization, the storage will be reported as + /// `APPBUFFER`. Note that the ImageBuf will be writable if passed an + /// `image_span` with a mutable type `T`, but it will be "read-only" if + /// passed an `image_span`. + /// + /// @param spec + /// An ImageSpec describing the image and its metadata. If + /// not enough information is given to know the "shape" of + /// the image (width, height, depth, channels, and data + /// format), the ImageBuf will remain in an UNINITIALIZED + /// state. + /// @param buffer + /// An image_span delineating the extent and striding of the + /// safely accessible memory comprising the pixel data. + template + ImageBuf(const ImageSpec& spec, const image_span& buffer) + : ImageBuf(spec, as_image_span_writable_bytes(buffer)) + { + } + template + ImageBuf(const ImageSpec& spec, const image_span& buffer) + : ImageBuf(spec, as_image_span_bytes(buffer)) + { + } + // Special base case for read-only byte image_spans, this one does the + // hard work. + ImageBuf(const ImageSpec& spec, const image_span& buffer); + // Special base case for mutable byte image_spans, this one does the hard + // work. + ImageBuf(const ImageSpec& spec, const image_span& buffer); + + // Unsafe constructor of an ImageBuf that wraps an existing buffer, where + // only the origin pointer and the strides are given. Use with caution! + OIIO_IB_DEPRECATE_RAW_PTR + ImageBuf(const ImageSpec& spec, void* buffer, stride_t xstride = AutoStride, + stride_t ystride = AutoStride, stride_t zstride = AutoStride); + + /// Construct a copy of an ImageBuf. + ImageBuf(const ImageBuf& src); + + /// Move the contents of an ImageBuf to another ImageBuf. + ImageBuf(ImageBuf&& src); + + // Old name for reset(). + void clear(); + + /// Destroy any previous contents of the ImageBuf and re-initialize it + /// to resemble a freshly constructed ImageBuf using the default + /// constructor (holding no image, with storage + /// `IBStorage::UNINITIALIZED`). + void reset() { clear(); } + + /// Destroy any previous contents of the ImageBuf and re-initialize it + /// as if newly constructed with the same arguments, as a read-only + /// representation of an existing image file. + void reset(string_view name, int subimage = 0, int miplevel = 0, + std::shared_ptr imagecache = {}, + const ImageSpec* config = nullptr, + Filesystem::IOProxy* ioproxy = nullptr); + + /// Destroy any previous contents of the ImageBuf and re-initialize it + /// as if newly constructed with the same arguments, as a read/write + /// image with locally allocated storage that can hold an image as + /// described by `spec`. The optional `zero` parameter controls whether + /// the pixel values are filled with black/empty, or are left + /// uninitialized after being allocated. + /// + /// Note that if the ImageSpec does not contain enough information to + /// specify how much memory to allocate (width, height, channels, and + /// data format), the ImageBuf will remain uninitialized (regardless of + /// how `zero` is set). + void reset(const ImageSpec& spec, + InitializePixels zero = InitializePixels::Yes); + + /// Synonym for `reset(spec, zero)` and also give it an internal name. + void reset(string_view name, const ImageSpec& spec, + InitializePixels zero = InitializePixels::Yes) + { + reset(spec, zero); + set_name(name); + } + + /// Destroy any previous contents of the ImageBuf and re-initialize it as + /// if newly constructed with the same arguments, to "wrap" existing pixel + /// memory owned by the calling application. See the ImageBuf constructor + /// from an image_span for more details. + template + void reset(const ImageSpec& spec, const image_span& buffer) + { + // The general case for non-byte data types just converts to bytes and + // calls the byte version. + if constexpr (std::is_const_v) + reset(spec, as_image_span_bytes(buffer)); + else + reset(spec, as_image_span_writable_bytes(buffer)); + } + // Special base case for read-only byte spans, this one does the hard work. + void reset(const ImageSpec& spec, + const image_span& buffer); + // Special base case for mutable byte spans, this one does the hard work. + void reset(const ImageSpec& spec, const image_span& buffer); + + /// Slated for deprecation in favor of the image_span-based version. + /// + /// Destroy any previous contents of the ImageBuf and re-initialize it as + /// if newly constructed with the same arguments, to "wrap" existing pixel + /// memory owned by the calling application. + /// + /// @param spec + /// An ImageSpec describing the image and its metadata. + /// @param buffer + /// A span delineating the extent of the safely accessible + /// memory comprising the pixel data. + /// @param buforigin + /// A pointer to the first pixel of the buffer. If null, it + /// will be assumed to be the beginning of the buffer. (This + /// parameter is useful if any negative strides are used to + /// give an unusual layout of pixels within the buffer.) + /// @param xstride/ystride/zstride + /// The distance in bytes between successive pixels, + /// scanlines, and image planes in the buffer (or + /// `AutoStride` to indicate "contiguous" data in any of + /// those dimensions). + template + void reset(const ImageSpec& spec, span buffer, + const void* buforigin = nullptr, stride_t xstride = AutoStride, + stride_t ystride = AutoStride, stride_t zstride = AutoStride) + { + // The general case for non-byte data types just converts to bytes and + // calls the byte version. + reset(spec, as_writable_bytes(buffer), buforigin, xstride, ystride, + zstride); + } + // Special base case for read-only byte spans, this one does the hard work. + void reset(const ImageSpec& spec, cspan buffer, + const void* buforigin = nullptr, stride_t xstride = AutoStride, + stride_t ystride = AutoStride, stride_t zstride = AutoStride); + // Special base case for mutable byte spans, this one does the hard work. + void reset(const ImageSpec& spec, span buffer, + const void* buforigin = nullptr, stride_t xstride = AutoStride, + stride_t ystride = AutoStride, stride_t zstride = AutoStride); + + /// Unsafe reset of a "wrapped" buffer, mostly for backward compatibility. + /// This version does not pass a span that explicitly delineates the + /// memory bounds, but only passes a raw pointer and assumes that the + /// caller has ensured that the buffer pointed to is big enough to + /// accommodate accessing any valid pixel as describes by the spec and the + /// strides. Use with caution! + OIIO_IB_DEPRECATE_RAW_PTR + void reset(const ImageSpec& spec, void* buffer, + stride_t xstride = AutoStride, stride_t ystride = AutoStride, + stride_t zstride = AutoStride); + + /// Make the ImageBuf be writable. That means that if it was previously + /// backed by an ImageCache (storage was `IMAGECACHE`), it will force a + /// full read so that the whole image is in local memory. This will + /// invalidate any current iterators on the image. It has no effect if + /// the image storage is not `IMAGECACHE`. + /// + /// @param keep_cache_type + /// If true, preserve any ImageCache-forced data types (you + /// might want to do this if it is critical that the + /// apparent data type doesn't change, for example if you + /// are calling `make_writable()` from within a + /// type-specialized function). + /// @returns + /// Return `true` if it works (including if no read was + /// necessary), `false` if something went horribly wrong. + bool make_writable(bool keep_cache_type = false); + + /// @} + + + /// Wrap mode describes what happens when an iterator points to + /// a value outside the usual data range of an image. + enum WrapMode { + WrapDefault, + WrapBlack, + WrapClamp, + WrapPeriodic, + WrapMirror, + _WrapLast + }; + + + /// @{ + /// @name Reading and Writing disk images + + /// Read the particular subimage and MIP level of the image, if it has not + /// already been read. It will clear and re-allocate memory if the + /// previously allocated space was not appropriate for the size or data + /// type of the image being read. + /// + /// In general, calling `read()` should be unnecessary for most uses of + /// ImageBuf. When an ImageBuf is created (or when `reset()` is called), + /// usually the opening of the file and reading of the header is deferred + /// until the spec is accessed or needed, and the reading of the pixel + /// values is usually deferred until pixel values are needed, at which + /// point these things happen automatically. That is, every ImageBuf + /// method that needs pixel values will call `read()` itself if it has + /// not previously been called. + /// + /// There are a few situations where you want to call read() explicitly, + /// after the ImageBuf is constructed but before any other methods have + /// been called that would implicitly read the file: + /// + /// 1. If you want to request that the internal buffer be a specific + /// pixel data type that might differ from the pixel data type in + /// the file itself (conveyed by the `convert` parameter). + /// 2. You want the ImageBuf to read and contain only a subset of the + /// channels in the file (conveyed by the `chmin` and `chmax` + /// parameters on the version of `read()` that accepts them). + /// 3. The ImageBuf has been set up to be backed by ImageCache, but you + /// want to force it to read the whole file into memory now (conveyed + /// by the `force` parameter, or if the `convert` parameter specifies + /// a type that is not the native file type and also cannot be + /// accommodated directly by the cache). + /// 4. For whatever reason, you want to force a full read of the pixels + /// to occur at this point in program execution, rather than at some + /// undetermined future time when you first need to access those + /// pixels. + /// + /// The `read()` function should not be used to *change* an already + /// established subimage, MIP level, pixel data type, or channel range + /// of a file that has already read its pixels. You should use the + /// `reset()` method for that purpose. + /// + /// @param subimage/miplevel + /// The subimage and MIP level to read. + /// @param force + /// If `true`, will force an immediate full read into + /// ImageBuf-owned local pixel memory (yielding a + /// `LOCALPIXELS` storage buffer). Otherwise, it is up to + /// the implementation whether to immediately read or have + /// the image backed by an ImageCache (storage + /// `IMAGECACHE`, if the ImageBuf was originally constructed + /// or reset with an ImageCache specified). + /// @param convert + /// If set to a specific type (not `UNKNOWN`), the ImageBuf + /// memory will be allocated for that type specifically and + /// converted upon read. + /// @param progress_callback/progress_callback_data + /// If `progress_callback` is non-NULL, the underlying + /// read, if expensive, may make several calls to + /// `progress_callback(progress_callback_data, portion_done)` + /// which allows you to implement some sort of progress + /// meter. Note that if the ImageBuf is backed by an + /// ImageCache, the progress callback will never be called, + /// since no actual file I/O will occur at this time + /// (ImageCache will load tiles or scanlines on demand, as + /// individual pixel values are needed). + /// + /// @returns + /// `true` upon success, or `false` if the read failed (in + /// which case, you should be able to retrieve an error + /// message via `geterror()`). + /// + bool read(int subimage = 0, int miplevel = 0, bool force = false, + TypeDesc convert = TypeUnknown, + ProgressCallback progress_callback = nullptr, + void* progress_callback_data = nullptr); + + /// Read the file, if possible only allocating and reading a subset of + /// channels, `[chbegin..chend-1]`. This can be a performance and memory + /// improvement for some image file formats, if you know that any use of + /// the ImageBuf will only access a subset of channels from a + /// many-channel file. + /// + /// Additional parameters: + /// + /// @param chbegin/chend + /// The subset (a range with "exclusive end") of channels to + /// read, if the implementation is able to read only a + /// subset of channels and have a performance advantage by + /// doing so. If `chbegin` is 0 and `chend` is either + /// negative or greater than the number of channels in the + /// file, all channels will be read. Please note that it is + /// "advisory" and not guaranteed to be honored by the + /// underlying implementation. + bool read(int subimage, int miplevel, int chbegin, int chend, bool force, + TypeDesc convert, ProgressCallback progress_callback = nullptr, + void* progress_callback_data = nullptr); + + /// Read the ImageSpec for the given file, subimage, and MIP level into + /// the ImageBuf, but will not read the pixels or allocate any local + /// storage (until a subsequent call to `read()`). This is helpful if + /// you have an ImageBuf and you need to know information about the + /// image, but don't want to do a full read yet, and maybe won't need to + /// do the full read, depending on what's found in the spec. + /// + /// Note that `init_spec()` is not strictly necessary. If you are happy + /// with the filename, subimage and MIP level specified by the ImageBuf + /// constructor (or the last call to `reset()`), then the spec will be + /// automatically read the first time you make any other ImageBuf API + /// call that requires it. The only reason to call `read()` yourself is + /// if you are changing the filename, subimage, or MIP level, or if you + /// want to use `force=true` or a specific `convert` value to force + /// data format conversion. + /// + /// @param filename + /// The filename to read from (should be the same as the + /// filename used when the ImageBuf was constructed or + /// reset.) + /// @param subimage/miplevel + /// The subimage and MIP level to read. + /// + /// @returns + /// `true` upon success, or `false` if the read failed (in + /// which case, you should be able to retrieve an error + /// message via `geterror()`). + /// + bool init_spec(string_view filename, int subimage, int miplevel); + + /// Write the image to the named file, converted to the specified pixel + /// data type `dtype` (`TypeUnknown` signifies to use the data type of + /// the buffer), and file format (an empty `fileformat` means to infer + /// the type from the filename extension). + /// + /// By default, it will always try to write a scanline-oriented file, + /// unless the `set_write_tiles()` method has been used to override + /// this. + /// + /// @param filename + /// The filename to write to. + /// @param dtype + /// Optional override of the pixel data format to use in the + /// file being written. The default (`UNKNOWN`) means to try + /// writing the same data format that as pixels are stored + /// within the ImageBuf memory (or whatever type was + /// specified by a prior call to `set_write_format()`). In + /// either case, if the file format does not support that + /// data type, another will be automatically chosen that is + /// supported by the file type and loses as little precision + /// as possible. + /// @param fileformat + /// Optional override of the file format to write. The + /// default (empty string) means to infer the file format + /// from the extension of the `filename` (for + /// example, "foo.tif" will write a TIFF file). + /// @param progress_callback/progress_callback_data + /// If `progress_callback` is non-NULL, the underlying + /// write, if expensive, may make several calls to + /// `progress_callback(progress_callback_data, portion_done)` + /// which allows you to implement some sort of progress + /// meter. + /// + /// @returns + /// `true` upon success, or `false` if the write failed (in + /// which case, you should be able to retrieve an error + /// message via `geterror()`). + /// + + bool write(string_view filename, TypeDesc dtype = TypeUnknown, + string_view fileformat = string_view(), + ProgressCallback progress_callback = nullptr, + void* progress_callback_data = nullptr) const; + + /// Set the pixel data format that will be used for subsequent `write()` + /// calls that do not themselves request a specific data type request. + /// + /// Note that this does not affect the variety of `write()` that takes + /// an open `ImageOutput*` as a parameter. + /// + /// @param format + /// The data type to be used for all channels. + void set_write_format(TypeDesc format); + + /// Set the per-channel pixel data format that will be used for + /// subsequent `write()` calls that do not themselves request a specific + /// data type request. + /// + /// @param format + /// The type of each channel (in order). Any channel's + /// format specified as `TypeUnknown` will default to be + /// whatever type is described in the ImageSpec of the + /// buffer. + void set_write_format(cspan format); + + /// Override the tile sizing for subsequent calls to the `write()` + /// method (the variety that does not take an open `ImageOutput*`). + /// Setting all three dimensions to 0 indicates that the output should + /// be a scanline-oriented file. + /// + /// This lets you write a tiled file from an ImageBuf that may have been + /// read originally from a scanline file, or change the dimensions of a + /// tiled file, or to force the file written to be scanline even if it + /// was originally read from a tiled file. + /// + /// In all cases, if the file format ultimately written does not support + /// tiling, or the tile dimensions requested, a suitable supported + /// tiling choice will be made automatically. + void set_write_tiles(int width = 0, int height = 0, int depth = 0); + + /// Supply an IOProxy to use for a subsequent call to `write()`. + /// + /// If a proxy is set but it later turns out that the file format + /// selected does not support write proxies, then `write()` will fail + /// with an error. + void set_write_ioproxy(Filesystem::IOProxy* ioproxy); + + /// Write the pixels of the ImageBuf to an open ImageOutput. The + /// ImageOutput must have already been opened with a spec that indicates + /// a resolution identical to that of this ImageBuf (but it may have + /// specified a different pixel data type, in which case data + /// conversions will happen automatically). This method does NOT close + /// the file when it's done (and so may be called in a loop to write a + /// multi-image file). + /// + /// Note that since this uses an already-opened `ImageOutput`, which is + /// too late to change how it was opened, it does not honor any prior + /// calls to `set_write_format` or `set_write_tiles`. + /// + /// The main application of this method is to allow an ImageBuf (which + /// by design may hold only a *single* image) to be used for the output + /// of one image of a multi-subimage and/or MIP-mapped image file. + /// + /// @param out + /// A pointer to an already-opened `ImageOutput` to which + /// the pixels of the ImageBuf will be written. + /// @param progress_callback/progress_callback_data + /// If `progress_callback` is non-NULL, the underlying + /// write, if expensive, may make several calls to + /// `progress_callback(progress_callback_data, portion_done)` + /// which allows you to implement some sort of progress + /// meter. + /// @returns `true` if all went ok, `false` if there were errors + /// writing. + bool write(ImageOutput* out, ProgressCallback progress_callback = nullptr, + void* progress_callback_data = nullptr) const; + + /// @} + + /// @{ + /// @name Copying ImageBuf's and blocks of pixels + + /// Copy assignment. + const ImageBuf& operator=(const ImageBuf& src); + + /// Move assignment. + const ImageBuf& operator=(ImageBuf&& src); + + /// Copy all the metadata from `src` to `*this`, replacing all named + /// metadata that was previously in `*this`. The "full" size and desired + /// tile size will also be replaced by the corresponding values from + /// `src`, but the pixel data resolution, channel types and names, and + /// data format of `*this` will not be altered. + void copy_metadata(const ImageBuf& src); + + /// Merge metadata from `src` into the metadata of `*this` (except for the + /// data format and pixel data window size). Metadata in `*this` that is + /// not in `src` will not be altered. Metadata in `*this` that also is in + /// `src` will be replaced only if `override` is True. If `pattern` is not + /// empty, only metadata having a substring that matches the regex pattern + /// will be merged. + /// + /// @param src + /// The source ImageBuf supplying the metadata (but not pixel + /// values). + /// @param override + /// If true, `src` attributes will replace any identically-named + /// attributes already in `*this`. If false (the default), only + /// attributes whose names are not already in this list will be + /// appended. + /// @param pattern + /// If not empty, only copy metadata from `src` whose name contains + /// a substring matching the regex `pattern`. + /// + /// @version 3.0.5+ + void merge_metadata(const ImageBuf& src, bool override = false, + string_view pattern = {}); + + /// Copy the pixel data from `src` to `*this`, automatically converting + /// to the existing data format of `*this`. It only copies pixels in + /// the overlap regions (and channels) of the two images; pixel data in + /// `*this` that do exist in `src` will be set to 0, and pixel data in + /// `src` that do not exist in `*this` will not be copied. + bool copy_pixels(const ImageBuf& src); + + /// Try to copy the pixels and metadata from `src` to `*this` + /// (optionally with an explicit data format conversion). + /// + /// If the previous state of `*this` was uninitialized, owning its own + /// local pixel memory, or referring to a read-only image backed by + /// ImageCache, then local pixel memory will be allocated to hold the + /// new pixels and the call always succeeds unless the memory cannot be + /// allocated. In this case, the `format` parameter may request a pixel + /// data type that is different from that of the source buffer. + /// + /// If `*this` previously referred to an app-owned memory buffer, the + /// memory cannot be re-allocated, so the call will only succeed if the + /// app-owned buffer is already the correct resolution and number of + /// channels. The data type of the pixels will be converted + /// automatically to the data type of the app buffer. + /// + /// @param src + /// Another ImageBuf from which to copy the pixels and + /// metadata. + /// @param format + /// Optionally request the pixel data type to be used. The + /// default of `TypeUnknown` means to use whatever data type + /// is used by the `src`. If `*this` is already initialized + /// and has `APPBUFFER` storage ("wrapping" an application + /// buffer), this parameter is ignored. + /// @returns + /// `true` upon success or `false` upon error/failure. + bool copy(const ImageBuf& src, TypeDesc format = TypeUnknown); + + /// Return a full copy of `this` ImageBuf (optionally with an explicit + /// data format conversion). + ImageBuf copy(TypeDesc format /*= TypeDesc::UNKNOWN*/) const; + + /// Swap the entire contents with another ImageBuf. + void swap(ImageBuf& other) { std::swap(m_impl, other.m_impl); } + + /// @} + + + /// @{ + /// @name Getting and setting pixel values + + /// Retrieve a single channel of one pixel. + /// + /// @param x/y/z + /// The pixel coordinates. + /// @param c + /// The channel index to retrieve. If `c` is not in the + /// valid channel range 0..nchannels-1, then `getchannel()` + /// will return 0. + /// @param wrap + /// WrapMode that determines the behavior if the pixel + /// coordinates are outside the data window: `WrapBlack`, + /// `WrapClamp`, `WrapPeriodic`, `WrapMirror`. + /// @returns + /// The data value, converted to a `float`. + float getchannel(int x, int y, int z, int c, + WrapMode wrap = WrapBlack) const; + + /// Retrieve the pixel value by x, y, z pixel indices, placing its + /// contents in `pixel[0..n-1]` where *n* is the smaller of the span's + /// size and the actual number of channels stored in the buffer. + /// + /// @param x/y/z + /// The pixel coordinates. + /// @param pixel + /// A span giving the location where results will be stored. + /// @param wrap + /// WrapMode that determines the behavior if the pixel + /// coordinates are outside the data window: `WrapBlack`, + /// `WrapClamp`, `WrapPeriodic`, `WrapMirror`. + void getpixel(int x, int y, int z, span pixel, + WrapMode wrap = WrapBlack) const; + + /// Simplified version of getpixel(): 2D, black wrap. + void getpixel(int x, int y, span pixel) const + { + getpixel(x, y, 0, pixel); + } + + /// Unsafe version of getpixel using raw pointer. Avoid if possible. + OIIO_IB_DEPRECATE_RAW_PTR + void getpixel(int x, int y, int z, float* pixel, int maxchannels = 1000, + WrapMode wrap = WrapBlack) const + { + getpixel(x, y, z, make_span(pixel, size_t(maxchannels)), wrap); + } + + /// Unsafe version of getpixel using raw pointer. Avoid if possible. + OIIO_IB_DEPRECATE_RAW_PTR + void getpixel(int x, int y, float* pixel, int maxchannels = 1000) const + { + getpixel(x, y, 0, pixel, maxchannels); + } + + /// Sample the image plane at pixel coordinates (x,y), using linear + /// interpolation between pixels, placing the result in `pixel[0..n-1]` + /// where *n* is the smaller of the span's size and the actual number of + /// channels stored in the buffer. + /// + /// @param x/y + /// The pixel coordinates. Note that pixel data values + /// themselves are at the pixel centers, so pixel (i,j) is + /// at image plane coordinate (i+0.5, j+0.5). + /// @param pixel + /// A span giving the location where results will be stored. + /// @param wrap + /// WrapMode that determines the behavior if the pixel + /// coordinates are outside the data window: `WrapBlack`, + /// `WrapClamp`, `WrapPeriodic`, `WrapMirror`. + void interppixel(float x, float y, span pixel, + WrapMode wrap = WrapBlack) const; + + /// Unsafe version of interppixel using raw pointer. Avoid if possible. + OIIO_IB_DEPRECATE_RAW_PTR + void interppixel(float x, float y, float* pixel, + WrapMode wrap = WrapBlack) const + { + interppixel(x, y, make_span(pixel, size_t(nchannels())), wrap); + } + + /// Linearly interpolate at NDC coordinates (s,t), where (0,0) is + /// the upper left corner of the display window, (1,1) the lower + /// right corner of the display window. + /// + /// @note `interppixel()` uses pixel coordinates (ranging 0..resolution) + /// whereas `interppixel_NDC()` uses NDC coordinates (ranging 0..1). + void interppixel_NDC(float s, float t, span pixel, + WrapMode wrap = WrapBlack) const; + + /// Unsafe version of interppixel_NDC using raw pointer. Avoid if + /// possible. + OIIO_IB_DEPRECATE_RAW_PTR + void interppixel_NDC(float s, float t, float* pixel, + WrapMode wrap = WrapBlack) const + { + interppixel_NDC(s, t, make_span(pixel, size_t(nchannels())), wrap); + } + + /// Bicubic interpolation at pixel coordinates (x,y). + void interppixel_bicubic(float x, float y, span pixel, + WrapMode wrap = WrapBlack) const; + + /// Unsafe version of interppixel_bicubic_NDC using raw pointer. + /// Avoid if possible. + OIIO_IB_DEPRECATE_RAW_PTR + void interppixel_bicubic(float x, float y, float* pixel, + WrapMode wrap = WrapBlack) const + { + interppixel_bicubic(x, y, make_span(pixel, size_t(nchannels())), wrap); + } + + /// Bicubic interpolation at NDC space coordinates (s,t), where (0,0) + /// is the upper left corner of the display (a.k.a. "full") window, + /// (1,1) the lower right corner of the display window. + void interppixel_bicubic_NDC(float s, float t, span pixel, + WrapMode wrap = WrapBlack) const; + + /// Unsafe version of interppixel_bicubic_NDC using raw pointer. + /// Avoid if possible. + OIIO_IB_DEPRECATE_RAW_PTR + void interppixel_bicubic_NDC(float s, float t, float* pixel, + WrapMode wrap = WrapBlack) const + { + interppixel_bicubic_NDC(s, t, make_span(pixel, size_t(nchannels())), + wrap); + } + + + /// Set the pixel with coordinates (x,y,0) to have the values in span + /// `pixel[]`. The number of channels copied is the minimum of the span + /// length and the actual number of channels in the image. + void setpixel(int x, int y, cspan pixel) + { + setpixel(x, y, 0, pixel); + } + + /// Set the pixel with coordinates (x,y,z) to have the values in span + /// `pixel[]`. The number of channels copied is the minimum of the span + /// length and the actual number of channels in the image. + void setpixel(int x, int y, int z, cspan pixel); + + /// Set the `i`-th pixel value of the image (out of width*height*depth), + /// from floating-point values in span `pixel[]`. The number of + /// channels copied is the minimum of the span length and the actual + /// number of channels in the image. + void setpixel(int i, cspan pixel) + { + setpixel(spec().x + (i % spec().width), spec().y + (i / spec().width), + pixel); + } + + /// Set the pixel with coordinates (x,y,0) to have the values in + /// pixel[0..n-1]. The number of channels copied, n, is the minimum + /// of maxchannels and the actual number of channels in the image. + OIIO_IB_DEPRECATE_RAW_PTR + void setpixel(int x, int y, const float* pixel, int maxchannels = 1000) + { + int n = std::min(spec().nchannels, maxchannels); + setpixel(x, y, 0, make_cspan(pixel, size_t(n))); + } + + /// Set the pixel with coordinates (x,y,z) to have the values in + /// `pixel[0..n-1]`. The number of channels copied, n, is the minimum + /// of `maxchannels` and the actual number of channels in the image. + OIIO_IB_DEPRECATE_RAW_PTR + void setpixel(int x, int y, int z, const float* pixel, + int maxchannels = 1000) + { + int n = std::min(spec().nchannels, maxchannels); + setpixel(x, y, z, make_cspan(pixel, size_t(n))); + } + + /// Set the `i`-th pixel value of the image (out of width*height*depth), + /// from floating-point values in `pixel[]`. Set at most + /// `maxchannels` (will be clamped to the actual number of channels). + OIIO_IB_DEPRECATE_RAW_PTR + void setpixel(int i, const float* pixel, int maxchannels = 1000) + { + int n = std::min(spec().nchannels, maxchannels); + setpixel(i, make_cspan(pixel, size_t(n))); + } + + /// Retrieve the rectangle of pixels spanning the ROI (including + /// channels) at the current subimage and MIP-map level, storing the + /// pixel values into the `buffer`. + /// + /// @param roi + /// The region of interest to copy into. A default + /// uninitialized ROI means the entire image. + /// @param buffer + /// An image_span delineating the extent of the safely + /// accessible memory where the results should be stored. + /// @returns + /// Return true if the operation could be completed, + /// otherwise return false. + /// + template + bool get_pixels(ROI roi, const image_span& buffer) const + { + static_assert(!std::is_const_v); + return get_pixels(roi, TypeDescFromC::value(), + as_image_span_writable_bytes(buffer)); + } + + /// Base case of get_pixels: read into an image_span of generic bytes. The + /// requested data type is supplied by `format`. + bool get_pixels(ROI roi, TypeDesc format, + const image_span& buffer) const; + + /// Retrieve the rectangle of pixels spanning the ROI (including + /// channels) at the current subimage and MIP-map level, storing the + /// pixel values into the `buffer`. + /// + /// @param roi + /// The region of interest to copy into. A default + /// uninitialized ROI means the entire image. + /// @param buffer + /// A span delineating the extent of the safely accessible + /// memory where the results should be stored. + /// @param xstride/ystride/zstride + /// The distance in bytes between successive pixels, + /// scanlines, and image planes in the buffer (or + /// `AutoStride` to indicate "contiguous" data in any of + /// those dimensions). + /// @returns + /// Return true if the operation could be completed, + /// otherwise return false. + /// + template + bool get_pixels(ROI roi, span buffer, stride_t xstride = AutoStride, + stride_t ystride = AutoStride, + stride_t zstride = AutoStride) const + { + static_assert(!std::is_const_v); + return get_pixels(roi, TypeDescFromC::value(), + as_writable_bytes(buffer), buffer.data(), xstride, + ystride, zstride); + } + + /// get_pixels() with an extra parameter: + /// + /// @param buforigin + /// A pointer to the first pixel of the buffer. If null, + /// it will be assumed to be the beginning of the buffer. + /// This is useful if any negative strides are used to + /// give an unusual layout of pixels within the buffer. + /// + template + bool get_pixels(ROI roi, span buffer, T* buforigin, + stride_t xstride = AutoStride, + stride_t ystride = AutoStride, + stride_t zstride = AutoStride) const + { + static_assert(!std::is_const_v); + return get_pixels(roi, TypeDescFromC::value(), + as_writable_bytes(buffer), buforigin, xstride, + ystride, zstride); + } + +#ifndef OIIO_DOXYGEN + /// Base case of get_pixels: read into a span of generic bytes. The + /// requested data type is supplied by `format`. + bool get_pixels(ROI roi, TypeDesc format, span buffer, + void* buforigin = nullptr, stride_t xstride = AutoStride, + stride_t ystride = AutoStride, + stride_t zstride = AutoStride) const; + + /// Potentially unsafe get_pixels() using raw pointers. Use with caution! + OIIO_IB_DEPRECATE_RAW_PTR + bool get_pixels(ROI roi, TypeDesc format, void* result, + stride_t xstride = AutoStride, + stride_t ystride = AutoStride, + stride_t zstride = AutoStride) const; +#endif + + /// Copy the data into the given ROI of the ImageBuf. The data points to + /// values specified by `format`, with layout detailed by the stride + /// values (in bytes, with AutoStride indicating "contiguous" layout). It + /// is up to the caller to ensure that data points to an area of memory + /// big enough to account for the ROI. If `roi` is set to `ROI::all()`, + /// the data buffer is assumed to have the same resolution as the ImageBuf + /// itself. Return true if the operation could be completed, otherwise + /// return false. + + /// Set the rectangle of pixels within the ROI to the values in the + /// `buffer`. + /// + /// @param roi + /// The region of interest to copy into. A default + /// uninitialized ROI means the entire image. + /// @param buffer + /// An `image_span` delineating the extent of the safely + /// accessible memory where the results should be copied from. + /// @returns + /// Return true if the operation could be completed, + /// otherwise return false. + /// + template bool set_pixels(ROI roi, const image_span& buffer) + { + return set_pixels(roi, TypeDescFromC::value(), + as_image_span_bytes(buffer)); + } + + /// Base case of set_pixels: copy from an image_span of generic bytes. + /// The requested data type is supplied by `format`. + bool set_pixels(ROI roi, TypeDesc format, + const image_span& buffer); + + /// Set the rectangle of pixels within the ROI to the values in the + /// `buffer`. + /// + /// @param roi + /// The region of interest to copy into. A default + /// uninitialized ROI means the entire image. + /// @param buffer + /// A span delineating the extent of the safely accessible + /// memory where the results should be copied from. + /// @param xstride/ystride/zstride + /// The distance in bytes between successive pixels, + /// scanlines, and image planes in the buffer (or + /// `AutoStride` to indicate "contiguous" data in any of + /// those dimensions). + /// @returns + /// Return true if the operation could be completed, + /// otherwise return false. + /// + template + bool set_pixels(ROI roi, span buffer, stride_t xstride = AutoStride, + stride_t ystride = AutoStride, + stride_t zstride = AutoStride) + { + return set_pixels(roi, TypeDescFromC>::value(), + as_bytes(buffer), buffer.data(), xstride, ystride, + zstride); + } + + /// set_pixels() with an extra parameter: + /// + /// @param buforigin + /// A pointer to the first pixel of the buffer. If null, + /// it will be assumed to be the beginning of the buffer. + /// This is useful if any negative strides are used to + /// give an unusual layout of pixels within the buffer. + /// + template + bool set_pixels(ROI roi, span buffer, const T* buforigin, + stride_t xstride = AutoStride, + stride_t ystride = AutoStride, + stride_t zstride = AutoStride) + { + return set_pixels(roi, TypeDescFromC>::value(), + as_bytes(buffer), buforigin, xstride, ystride, + zstride); + } + +#ifndef OIIO_DOXYGEN + /// Base case of get_pixels: read into a span of generic bytes. The + /// requested data type is supplied by `format`. + bool set_pixels(ROI roi, TypeDesc format, cspan buffer, + const void* buforigin = nullptr, + stride_t xstride = AutoStride, + stride_t ystride = AutoStride, + stride_t zstride = AutoStride); + + /// Potentially unsafe set_pixels() using raw pointers. Use with catution! + OIIO_IB_DEPRECATE_RAW_PTR + bool set_pixels(ROI roi, TypeDesc format, const void* data, + stride_t xstride = AutoStride, + stride_t ystride = AutoStride, + stride_t zstride = AutoStride); +#endif + + /// @} + + /// @{ + /// @name Getting and setting information about an ImageBuf + + /// Returns `true` if the ImageBuf is initialized, `false` if not yet + /// initialized. + bool initialized() const; + + /// Which type of storage is being used for the pixels? Returns an + /// enumerated type describing the type of storage currently employed by + /// the ImageBuf: `UNINITIALIZED` (no storage), `LOCALBUFFER` (the + /// ImageBuf has allocated and owns the pixel memory), `APPBUFFER` (the + /// ImageBuf "wraps" memory owned by the calling application), or + /// `IMAGECACHE` (the image is backed by an ImageCache). + IBStorage storage() const; + + /// Return a read-only (const) reference to the image spec that + /// describes the buffer. + const ImageSpec& spec() const; + + /// Return a writable reference to the ImageSpec that describes the + /// buffer. It's ok to modify most of the metadata, but if you modify + /// the spec's `format`, `width`, `height`, or `depth` fields, you get + /// the pain you deserve, as the ImageBuf will no longer have correct + /// knowledge of its pixel memory layout. USE WITH EXTREME CAUTION. + ImageSpec& specmod(); + + /// Return a read-only (const) reference to the "native" image spec + /// (that describes the file, which may be slightly different than + /// the spec of the ImageBuf, particularly if the IB is backed by an + /// ImageCache that is imposing some particular data format or tile + /// size). + /// + /// This may differ from `spec()` --- for example, if a data format + /// conversion was requested, if the buffer is backed by an ImageCache + /// which stores the pixels internally in a different data format than + /// that of the file, or if the file had differing per-channel data + /// formats (ImageBuf must contain a single data format for all + /// channels). + const ImageSpec& nativespec() const; + + /// Does this ImageBuf have an associated thumbnail? + bool has_thumbnail() const; + + /// Return a shared pointer to an ImageBuf containing a thumbnail of the + /// image (if it existed in the file), which may be empty if there is no + /// thumbnail. + std::shared_ptr get_thumbnail() const; + + /// Reset the thumbnail image associated with this ImageBuf to `thumb`. + /// This call will invalidate any references previously returned by + /// `thumbnail()`. + void set_thumbnail(const ImageBuf& thumb); + + /// Clear any thumbnail associated with this ImageBuf. This call will + /// invalidate any references previously returned by `thumbnail()`. + void clear_thumbnail(); + + /// Returns the name of the buffer (name of the file, for an ImageBuf + /// read from disk). + string_view name(void) const; + + /// Return the name of the buffer as a ustring. + ustring uname(void) const; + + /// Set the name of the ImageBuf, will be used later as default + /// filename if write() is called with an empty filename. + void set_name(string_view name); + + /// Return the name of the image file format of the file this ImageBuf + /// refers to (for example `"openexr"`). Returns an empty string for an + /// ImageBuf that was not constructed as a direct reference to a file. + string_view file_format_name(void) const; + + /// Return the index of the subimage within the file that the ImageBuf + /// refers to. This will always be 0 for an ImageBuf that was not + /// constructed as a direct reference to a file, or if the file + /// contained only one image. + int subimage() const; + + /// Return the number of subimages in the file this ImageBuf refers to, if + /// it can be determined efficiently. This will always be 1 for an + /// ImageBuf that was not constructed as a direct reference to a file, or + /// for an ImageBuf that refers to a file type that is not capable of + /// containing multiple subimages. + /// + /// Note that a return value of 0 indicates that the number of subimages + /// cannot easily be known without reading the entire image file to + /// discover the total. To compute this yourself, you would need check + /// every subimage successively until you get an error. + int nsubimages() const; + + /// Return the index of the miplevel with a file's subimage that the + /// ImageBuf is currently holding. This will always be 0 for an ImageBuf + /// that was not constructed as a direct reference to a file, or if the + /// subimage within that file was not MIP-mapped. + int miplevel() const; + + /// Return the number of MIP levels of the current subimage within the + /// file this ImageBuf refers to. This will always be 1 for an ImageBuf + /// that was not constructed as a direct reference to a file, or if this + /// subimage within the file was not MIP-mapped. + int nmiplevels() const; + + /// Return the number of color channels in the image. This is equivalent + /// to `spec().nchannels`. + int nchannels() const; + + /// Return the beginning (minimum) x coordinate of the defined image. + int xbegin() const; + /// Return the end (one past maximum) x coordinate of the defined image. + int xend() const; + /// Return the beginning (minimum) y coordinate of the defined image. + int ybegin() const; + /// Return the end (one past maximum) y coordinate of the defined image. + int yend() const; + /// Return the beginning (minimum) z coordinate of the defined image. + int zbegin() const; + /// Return the end (one past maximum) z coordinate of the defined image. + int zend() const; + /// Return the minimum x coordinate of the defined image. + int xmin() const; + /// Return the maximum x coordinate of the defined image. + int xmax() const; + /// Return the minimum y coordinate of the defined image. + int ymin() const; + /// Return the maximum y coordinate of the defined image. + int ymax() const; + /// Return the minimum z coordinate of the defined image. + int zmin() const; + /// Return the maximum z coordinate of the defined image. + int zmax() const; + + /// Return the current `"Orientation"` metadata for the image, per the + /// table in `sec-metadata-orientation`_ + int orientation() const; + + /// Set the `"Orientation"` metadata for the image. + void set_orientation(int orient); + + // Return the width, height, or full versions, if the image were + // positioned for display in its designated orientation. + int oriented_width() const; + int oriented_height() const; + int oriented_x() const; + int oriented_y() const; + int oriented_full_width() const; + int oriented_full_height() const; + int oriented_full_x() const; + int oriented_full_y() const; + + /// Alters the metadata of the spec in the ImageBuf to reset the + /// "origin" of the pixel data window to be the specified coordinates. + /// This does not affect the size of the pixel data window, only its + /// position. + void set_origin(int x, int y, int z = 0); + + /// Set the "full" (a.k.a. display) window to Alters the metadata of the + /// spec in the ImageBuf to reset the "full" image size (a.k.a. + /// "display window") to + /// + /// `[xbegin,xend) x [ybegin,yend) x [zbegin,zend)` + /// + /// This does not affect the size of the pixel data window. + void set_full(int xbegin, int xend, int ybegin, int yend, int zbegin, + int zend); + + /// Return pixel data window for this ImageBuf as a ROI. + ROI roi() const; + + /// Return full/display window for this ImageBuf as a ROI. + ROI roi_full() const; + + /// Set full/display window for this ImageBuf to a ROI. + /// Does NOT change the channels of the spec, regardless of `newroi`. + void set_roi_full(const ROI& newroi); + + /// Is the specified roi completely contained in the data window of + /// this ImageBuf? + bool contains_roi(const ROI& roi) const; + + bool pixels_valid(void) const; + bool pixels_read(void) const; + + /// The data type of the pixels stored in the buffer (equivalent to + /// `spec().format`). + TypeDesc pixeltype() const; + + /// Return a raw pointer to "local" pixel memory, if they are fully in + /// RAM and not backed by an ImageCache, or `nullptr` otherwise. You + /// can also test it like a bool to find out if pixels are local. + /// + /// Note that the data are not necessarily contiguous; use the + /// `pixel_stride()`, `scanline_stride()`, and `z_stride()` methods + /// to find out the spacing between pixels, scanlines, and volumetric + /// planes, respectively. + void* localpixels(); + const void* localpixels() const; + + /// Pixel-to-pixel stride within the localpixels memory. + stride_t pixel_stride() const; + /// Scanline-to-scanline stride within the localpixels memory. + stride_t scanline_stride() const; + /// Z plane stride within the localpixels memory. + stride_t z_stride() const; + + /// Is this an in-memory buffer with the data layout "contiguous", i.e., + /// ``` + /// pixel_stride == nchannels * pixeltype().size() + /// scanline_stride == pixel_stride * spec().width + /// z_stride == scanline_stride * spec().height + /// ``` + bool contiguous() const; + + /// Are the pixels backed by an ImageCache, rather than the whole + /// image being in RAM somewhere? + bool cachedpixels() const; + + /// A shared pointer to the underlying ImageCache, or empty if this + /// ImageBuf is not backed by an ImageCache. + std::shared_ptr imagecache() const; + + /// Return the address where pixel `(x,y,z)`, channel `ch`, is stored in + /// the image buffer. Use with extreme caution! Will return `nullptr` + /// if the pixel values aren't local in RAM. + const void* pixeladdr(int x, int y, int z = 0, int ch = 0) const; + void* pixeladdr(int x, int y, int z = 0, int ch = 0); + + /// Return the index of pixel (x,y,z). If check_range is true, return + /// -1 for an invalid coordinate that is not within the data window. + int pixelindex(int x, int y, int z, bool check_range = false) const; + + /// Set the threading policy for this ImageBuf, controlling the maximum + /// amount of parallelizing thread "fan-out" that might occur during + /// expensive operations. The default of 0 means that the global + /// `attribute("threads")` value should be used (which itself defaults + /// to using as many threads as cores). + /// + /// The main reason to change this value is to set it to 1 to indicate + /// that the calling thread should do all the work rather than spawning + /// new threads. That is probably the desired behavior in situations + /// where the calling application has already spawned multiple worker + /// threads. + void threads(int n) const; + + /// Retrieve the current thread-spawning policy of this ImageBuf. + int threads() const; + + /// @} + + /// @{ + /// @name Error handling + + /// Add simple string to the error message list for this IB. It is not + /// necessary to have the error message contain a trailing newline. + void error(string_view message) const; + + /// Error reporting for ImageBuf: call this with std::format style + /// formatting specification. It is not necessary to have the error + /// message contain a trailing newline. + template + void errorfmt(const Str& fmt, Args&&... args) const + { + error(Strutil::fmt::format(fmt, args...)); + } + + /// Returns `true` if the ImageBuf has had an error and has an error + /// message ready to retrieve via `geterror()`. + bool has_error(void) const; + + /// Return the text of all pending error messages issued against this + /// ImageBuf, and clear the pending error message unless `clear` is + /// false. If no error message is pending, it will return an empty + /// string. + std::string geterror(bool clear = true) const; + + /// @} + + /// @{ + /// @name Deep data in an ImageBuf + + /// Does this ImageBuf store deep data? Returns `true` if the ImageBuf + /// holds a "deep" image, `false` if the ImageBuf holds an ordinary + /// pixel-based image. + bool deep() const; + + /// Retrieve the number of deep data samples corresponding to pixel + /// (x,y,z). Return 0 if not a deep image, or if the pixel is outside + /// of the data window, or if the designated pixel has no deep samples. + int deep_samples(int x, int y, int z = 0) const; + + /// Return a pointer to the raw data of pixel `(x,y,z)`, channel `c`, + /// sample `s`. Return `nullptr` if the pixel coordinates or channel + /// number are out of range, if the pixel/channel has no deep samples, + /// or if the image is not deep. Use with caution --- these pointers may + /// be invalidated by calls that adjust the number of samples in any + /// pixel. + const void* deep_pixel_ptr(int x, int y, int z, int c, int s = 0) const; + + /// Return the value (as a `float`) of sample `s` of channel `c` of + /// pixel `(x,y,z)`. Return 0 if not a deep image or if the pixel + /// coordinates or channel number are out of range or if that pixel has + /// no deep samples. + float deep_value(int x, int y, int z, int c, int s) const; + + /// Return the value (as a `uint32_t`) of sample `s` of channel `c` of + /// pixel `(x,y,z)`. Return 0 if not a deep image or if the pixel + /// coordinates or channel number are out of range or if that pixel has + /// no deep samples. + uint32_t deep_value_uint(int x, int y, int z, int c, int s) const; + + /// Set the number of deep samples for pixel (x,y,z). If data has + /// already been allocated, this is equivalent to inserting or erasing + /// samples. + void set_deep_samples(int x, int y, int z, int nsamples); + + /// Insert `nsamples` new samples, starting at position `samplepos` of + /// pixel (x,y,z). + void deep_insert_samples(int x, int y, int z, int samplepos, int nsamples); + + /// Remove `nsamples` samples, starting at position `samplepos` of pixel + /// (x,y,z). + void deep_erase_samples(int x, int y, int z, int samplepos, int nsamples); + + /// Set the value of sample `s` of channel `c` of pixel `(x,y,z)` to a + /// `float` value (it is expected that channel `c` is a floating point + /// type). + void set_deep_value(int x, int y, int z, int c, int s, float value); + + /// Set the value of sample `s` of channel `c` of pixel `(x,y,z)` to a + /// `uint32_t` value (it is expected that channel `c` is an integer + /// type). + void set_deep_value(int x, int y, int z, int c, int s, uint32_t value); + + /// Copy a deep pixel from another ImageBuf -- it is required to have + /// the same channels. + bool copy_deep_pixel(int x, int y, int z, const ImageBuf& src, int srcx, + int srcy, int srcz); + + /// Retrieve the "deep" data. + DeepData* deepdata(); + const DeepData* deepdata() const; + + /// @} + + /// @{ + /// @name Locking the internal mutex + + void lock() const; + void unlock() const; + /// @} + + /// Return the `WrapMode` corresponding to the name (`"default"`, + /// `"black"`, `"clamp"`, `"periodic"`, `"mirror"`). For an unknown + /// name, this will return `WrapDefault`. + static WrapMode WrapMode_from_string(string_view name); + + /// Return the name corresponding to the wrap mode. + static ustring wrapmode_name(WrapMode wrap); + +#if !defined(OIIO_DOXYGEN) && !defined(OIIO_INTERNAL) + // Deprecated things -- might be removed at any time + + OIIO_DEPRECATED("Use `ImageBuf(name, 0, 0, imagecache, nullptr)` (2.2)") + ImageBuf(string_view name, std::shared_ptr imagecache) + : ImageBuf(name, 0, 0, imagecache) + { + } + + OIIO_DEPRECATED( + "The name parameter is not used, use `ImageBuf(spec,buffer)` (2.2)") + ImageBuf(string_view name, const ImageSpec& spec, void* buffer) + : ImageBuf(spec, buffer) + { + } + + OIIO_DEPRECATED("Use `reset(name, 0, 0, imagecache)` (2.2)") + void reset(string_view name, std::shared_ptr imagecache) + { + reset(name, 0, 0, imagecache); + } + + OIIO_DEPRECATED("Use make_writable (2.2)") + bool make_writeable(bool keep_cache_type = false) + { + return make_writable(keep_cache_type); + } + + OIIO_DEPRECATED("use interppixel_NDC (1.5)") + void interppixel_NDC_full(float s, float t, float* pixel, + WrapMode wrap = WrapBlack) const + { + const ImageSpec& spec(this->spec()); + interppixel(static_cast(spec.full_x) + + s * static_cast(spec.full_width), + static_cast(spec.full_y) + + t * static_cast(spec.full_height), + pixel, wrap); + } + + template + OIIO_DEPRECATED("Use errorfmt") + void error(const char* fmt, const Args&... args) const + { + error(Strutil::old::format(fmt, args...)); + } +#endif + + friend class IteratorBase; + + /// Base class for Iterator and ConstIterator -- this contains all the + /// common functionality. + class IteratorBase { + protected: + OIIO_API IteratorBase(const ImageBuf& ib, WrapMode wrap, + bool write = false); + + OIIO_API IteratorBase(const ImageBuf& ib, int x, int y, int z, + WrapMode wrap, bool write = false); + + /// Construct valid iteration region from ImageBuf and ROI. + OIIO_API IteratorBase(const ImageBuf& ib, const ROI& roi, WrapMode wrap, + bool write = false); + + /// Construct from an ImageBuf and designated region -- iterate + /// over region, starting with the upper left pixel. + OIIO_API IteratorBase(const ImageBuf& ib, int xbegin, int xend, + int ybegin, int yend, int zbegin, int zend, + WrapMode wrap, bool write = false); + + /// Copy constructor + OIIO_API IteratorBase(const IteratorBase& i); + + /// Assign one IteratorBase to another + OIIO_API const IteratorBase& operator=(const IteratorBase& i); + + ~IteratorBase() + { + if (m_tile) + release_tile(); + } + + public: + /// Retrieve the current x location of the iterator. + int x() const { return m_x; } + /// Retrieve the current y location of the iterator. + int y() const { return m_y; } + /// Retrieve the current z location of the iterator. + int z() const { return m_z; } + + /// Is the current location within the designated iteration range? + bool valid() const { return m_valid; } + + /// Is the location (x,y[,z]) within the designated iteration + /// range? + bool valid(int x_, int y_, int z_ = 0) const + { + return (x_ >= m_rng_xbegin && x_ < m_rng_xend && y_ >= m_rng_ybegin + && y_ < m_rng_yend && z_ >= m_rng_zbegin + && z_ < m_rng_zend); + } + + /// Is the location (x,y[,z]) within the region of the ImageBuf + /// that contains pixel values (sometimes called the "data window")? + bool exists(int x_, int y_, int z_ = 0) const + { + return (x_ >= m_img_xbegin && x_ < m_img_xend && y_ >= m_img_ybegin + && y_ < m_img_yend && z_ >= m_img_zbegin + && z_ < m_img_zend); + } + /// Does the current location exist within the ImageBuf's + /// data window? + bool exists() const { return m_exists; } + + /// Are we finished iterating over the region? + bool done() const + { + // We're "done" if we are both invalid and in exactly the + // spot that we would end up after iterating off of the last + // pixel in the range. (The m_valid test is just a quick + // early-out for when we're in the correct pixel range.) + return (m_valid == false && m_x == m_rng_xbegin + && m_y == m_rng_ybegin && m_z == m_rng_zend); + } + + /// Retrieve the number of deep data samples at this pixel. + int deep_samples() const { return m_ib->deep_samples(m_x, m_y, m_z); } + + /// Return the wrap mode + WrapMode wrap() const { return m_wrap; } + + /// Explicitly point the iterator. This results in an invalid + /// iterator if outside the previously-designated region. + void OIIO_API pos(int x_, int y_, int z_ = 0); + + /// Increment to the next pixel in the region. + /// + inline void operator++() + { + if (++m_x < m_rng_xend) { + // Special case: we only incremented x, didn't change y + // or z, and the previous position was within the data + // window. Call a shortcut version of pos. + if (m_exists) { + pos_xincr(); + return; + } + } else { + // Wrap to the next scanline + m_x = m_rng_xbegin; + if (++m_y >= m_rng_yend) { + m_y = m_rng_ybegin; + if (++m_z >= m_rng_zend) { + m_valid = false; // shortcut -- finished iterating + return; + } + } + } + pos(m_x, m_y, m_z); + } + /// Increment to the next pixel in the region. + void operator++(int) { ++(*this); } + + /// Return the iteration range + ROI range() const + { + return ROI(m_rng_xbegin, m_rng_xend, m_rng_ybegin, m_rng_yend, + m_rng_zbegin, m_rng_zend, 0, m_nchannels); + } + + /// Reset the iteration range for this iterator and reposition to + /// the beginning of the range, but keep referring to the same + /// image. + void OIIO_API rerange(int xbegin, int xend, int ybegin, int yend, + int zbegin, int zend, + WrapMode wrap = WrapDefault); + + const void* rawptr() const { return m_proxydata; } + + /// Retrieve the deep data value of sample s of channel c. + float deep_value(int c, int s) const + { + return m_ib->deep_value(m_x, m_y, m_z, c, s); + } + + uint32_t deep_value_uint(int c, int s) const + { + return m_ib->deep_value_uint(m_x, m_y, m_z, c, s); + } + + bool localpixels() const { return m_localpixels; } + + // Did we encounter an error while we iterated? + bool has_error() const { return m_readerror; } + + // Clear the error flag + void clear_error() { m_readerror = false; } + + // Store into `span dest` the channel values of the pixel the + // iterator points to. + template void store(span dest) const + { + OIIO_DASSERT(dest.size() >= oiio_span_size_type(m_nchannels)); + convert_pixel_values(TypeDesc::BASETYPE(m_pixeltype), m_proxydata, + TypeDescFromC::value(), dest.data(), + m_nchannels); + } + + /// Set the number of deep data samples at this pixel. (Only use + /// this if deep_alloc() has not yet been called on the buffer.) + void set_deep_samples(int n) + { + ensure_writable(); + return const_cast(m_ib)->set_deep_samples(m_x, m_y, m_z, + n); + } + + /// Set the deep data value of sample s of channel c. (Only use this + /// if deep_alloc() has been called.) + void set_deep_value(int c, int s, float value) + { + ensure_writable(); + return const_cast(m_ib)->set_deep_value(m_x, m_y, m_z, c, + s, value); + } + void set_deep_value(int c, int s, uint32_t value) + { + ensure_writable(); + return const_cast(m_ib)->set_deep_value(m_x, m_y, m_z, c, + s, value); + } + + protected: + friend class ImageBuf; + friend class ImageBufImpl; + const ImageBuf* m_ib = nullptr; + bool m_valid = false, m_exists = false; + bool m_deep = false; + bool m_localpixels = false; + // Image boundaries + int m_img_xbegin, m_img_xend, m_img_ybegin, m_img_yend, m_img_zbegin, + m_img_zend; + // Iteration range + int m_rng_xbegin, m_rng_xend, m_rng_ybegin, m_rng_yend, m_rng_zbegin, + m_rng_zend; + int m_x, m_y, m_z; + ImageCacheTile* m_tile = nullptr; + int m_tilexbegin, m_tileybegin, m_tilezbegin; + int m_tilexend; + int m_nchannels; + stride_t m_pixel_stride; + char* m_proxydata = nullptr; + WrapMode m_wrap = WrapBlack; + bool m_readerror = false; + unsigned char m_pixeltype; + + // Helper called by ctrs -- set up some locally cached values + // that are copied or derived from the ImageBuf. + void OIIO_API init_ib(WrapMode wrap, bool write); + + // Helper called by ctrs -- make the iteration range the full + // image data window. + void OIIO_API range_is_image(); + + // Helper called by pos(), but ONLY for the case where we are + // moving from an existing pixel to the next spot in +x. + // Note: called *after* m_x was incremented! + inline void pos_xincr() + { + OIIO_DASSERT(m_exists && m_valid); // precondition + OIIO_DASSERT(valid(m_x, m_y, m_z)); // should be true by definition + if (m_localpixels) { + OIIO_DASSERT(m_proxydata != nullptr); + m_proxydata += m_pixel_stride; + if (OIIO_UNLIKELY(m_x >= m_img_xend)) + pos_xincr_local_past_end(); + } else if (!m_deep) { + // Cached image + m_proxydata += m_pixel_stride; + bool e = m_x < m_img_xend; + if (OIIO_UNLIKELY(!(e && m_x < m_tilexend && m_tile))) { + // Crossed a tile boundary + m_proxydata = (char*)m_ib->retile(m_x, m_y, m_z, m_tile, + m_tilexbegin, + m_tileybegin, + m_tilezbegin, m_tilexend, + m_readerror, e, m_wrap); + m_exists = e; + } + } + } + + // Helper for pos_xincr for when we go off the end of the row + void OIIO_API pos_xincr_local_past_end(); + + // Set to the "done" position + void OIIO_API pos_done(); + + // Helper to release the IC tile held by m_tile. This is implemented + // elsewhere to prevent imagebuf.h needing to know anything more + // about ImageCache. + void OIIO_API release_tile(); + + // Check if the IB is writable, make it so if it isn't. + OIIO_FORCEINLINE void ensure_writable() + { + if (OIIO_UNLIKELY(m_ib->storage() == IMAGECACHE)) + make_writable(); + } + // Do the dirty work of making the IB writable. + void OIIO_API make_writable(); + }; + + /// Templated class for referring to an individual pixel in an + /// ImageBuf, iterating over the pixels of an ImageBuf, or iterating + /// over the pixels of a specified region of the ImageBuf + /// [xbegin..xend) X [ybegin..yend). It is templated on BUFT, the + /// type known to be in the internal representation of the ImageBuf, + /// and USERT, the type that the user wants to retrieve or set the + /// data (defaulting to float). The whole idea is to allow this: + /// \code + /// ImageBuf img (...); + /// ImageBuf::Iterator pixel (img, 0, 512, 0, 512); + /// for ( ; ! pixel.done(); ++pixel) { + /// for (int c = 0; c < img.nchannels(); ++c) { + /// float x = pixel[c]; + /// pixel[c] = ...; + /// } + /// } + /// \endcode + /// + template + class Iterator : public IteratorBase { + public: + /// Construct from just an ImageBuf -- iterate over the whole + /// region, starting with the upper left pixel of the region. + Iterator(ImageBuf& ib, WrapMode wrap = WrapDefault) + : IteratorBase(ib, wrap, true) + { + } + /// Construct from an ImageBuf and a specific pixel index. + /// The iteration range is the full image. + Iterator(ImageBuf& ib, int x, int y, int z = 0, + WrapMode wrap = WrapDefault) + : IteratorBase(ib, x, y, z, wrap, true) + { + } + /// Construct read-write iteration region from ImageBuf and ROI. + Iterator(ImageBuf& ib, const ROI& roi, WrapMode wrap = WrapDefault) + : IteratorBase(ib, roi, wrap, true) + { + } + /// Construct from an ImageBuf and designated region -- iterate + /// over region, starting with the upper left pixel. + Iterator(ImageBuf& ib, int xbegin, int xend, int ybegin, int yend, + int zbegin = 0, int zend = 1, WrapMode wrap = WrapDefault) + : IteratorBase(ib, xbegin, xend, ybegin, yend, zbegin, zend, wrap, + true) + { + } + /// Copy constructor. + /// + Iterator(Iterator& i) + : IteratorBase(i.m_ib, i.m_wrap, true) + { + } + + ~Iterator() {} + + private: + // Private helper struct that encapsulates an Interator& and an index, + // awaiting a later read or write (which will call the iterator's + // get() or set(), respectively). + struct IteratorValRef { + Iterator& it; + int index; + IteratorValRef(Iterator& it, int index) + : it(it) + , index(index) + { + } + operator USERT() const { return it.get(index); } + void operator=(USERT val) { it.set(index, val); } + }; + + public: + /// Dereferencing the iterator gives us a proxy for the pixel, + /// which we can index for reading or assignment. + DataArrayProxy& operator*() + { + ensure_writable(); + return *(DataArrayProxy*)(void*)&m_proxydata; + } + + /// Retrieve the value of channel i at the current iterator. + USERT get(int i) const + { + ConstDataArrayProxy proxy((const BUFT*)m_proxydata); + return proxy[i]; + } + + /// Set the value of channel i at the current iterator. If the buffer + /// is not writable (for example, it is backed by an ImageCache), it + /// will be made writable by copying into a henceforth-local buffer. + void set(int i, USERT val) + { + ensure_writable(); + DataArrayProxy proxy((BUFT*)m_proxydata); + proxy[i] = val; + } + + /// Array indexing retrieves the value of the i-th channel of + /// the current pixel. + IteratorValRef operator[](int i) { return IteratorValRef(*this, i); } + + void* rawptr() const { return m_proxydata; } + + // Load values from `span src` into the pixel the iterator refers + // to, doing any conversions necessary. + template void load(cspan src) + { + OIIO_DASSERT(src.size() >= oiio_span_size_type(m_nchannels)); + ensure_writable(); + convert_pixel_values(TypeDescFromC::value(), src.data(), + TypeDesc::BASETYPE(m_pixeltype), m_proxydata, + m_nchannels); + } + }; + + + /// Just like an ImageBuf::Iterator, except that it refers to a + /// const ImageBuf. + template + class ConstIterator : public IteratorBase { + public: + /// Construct from just an ImageBuf -- iterate over the whole + /// region, starting with the upper left pixel of the region. + ConstIterator(const ImageBuf& ib, WrapMode wrap = WrapDefault) + : IteratorBase(ib, wrap) + { + } + /// Construct from an ImageBuf and a specific pixel index. + /// The iteration range is the full image. + ConstIterator(const ImageBuf& ib, int x_, int y_, int z_ = 0, + WrapMode wrap = WrapDefault) + : IteratorBase(ib, x_, y_, z_, wrap) + { + } + /// Construct read-only iteration region from ImageBuf and ROI. + ConstIterator(const ImageBuf& ib, const ROI& roi, + WrapMode wrap = WrapDefault) + : IteratorBase(ib, roi, wrap) + { + } + /// Construct from an ImageBuf and designated region -- iterate + /// over region, starting with the upper left pixel. + ConstIterator(const ImageBuf& ib, int xbegin, int xend, int ybegin, + int yend, int zbegin = 0, int zend = 1, + WrapMode wrap = WrapDefault) + : IteratorBase(ib, xbegin, xend, ybegin, yend, zbegin, zend, wrap) + { + } + + ~ConstIterator() {} + + /// Dereferencing the iterator gives us a proxy for the pixel, + /// which we can index for reading or assignment. + ConstDataArrayProxy& operator*() const + { + return *(ConstDataArrayProxy*)&m_proxydata; + } + + /// Array indexing retrieves the value of the i-th channel of + /// the current pixel. + USERT operator[](int i) const + { + ConstDataArrayProxy proxy((BUFT*)m_proxydata); + return proxy[i]; + } + }; + + +protected: + // PIMPL idiom + static void impl_deleter(ImageBufImpl*); + std::unique_ptr m_impl; + + // Reset the ImageCacheTile* to reserve and point to the correct + // tile for the given pixel, and return the ptr to the actual pixel + // within the tile. If any read errors occur, set haderror=true (but + // if there are no errors, do not modify haderror). + const void* retile(int x, int y, int z, ImageCacheTile*& tile, + int& tilexbegin, int& tileybegin, int& tilezbegin, + int& tilexend, bool& haderr, bool exists, + WrapMode wrap) const; + + const void* blackpixel() const; + + // Given x,y,z known to be outside the pixel data range, and a wrap + // mode, alter xyz to implement the wrap. Return true if the resulting + // x,y,z is within the valid pixel data window, false if it still is + // not. + bool do_wrap(int& x, int& y, int& z, WrapMode wrap) const; +}; + + +OIIO_NAMESPACE_3_1_END diff --git a/third_party/tlRender-install-Release/include/OpenImageIO/imagebufalgo.h b/third_party/tlRender-install-Release/include/OpenImageIO/imagebufalgo.h new file mode 100644 index 00000000..a8a9d3c7 --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenImageIO/imagebufalgo.h @@ -0,0 +1,2705 @@ +// Copyright Contributors to the OpenImageIO project. +// SPDX-License-Identifier: Apache-2.0 +// https://github.com/AcademySoftwareFoundation/OpenImageIO + + +// clang-format off + +#pragma once +#define OPENIMAGEIO_IMAGEBUFALGO_H + +#if defined(_MSC_VER) +// Ignore warnings about DLL exported classes with member variables that are template classes. +// This happens with the std::vector members of PixelStats below. +# pragma warning (disable : 4251) +#endif + +#include +#include +#include +#include +#include +#include +#include + +#include + + +OIIO_NAMESPACE_3_1_BEGIN + + +/// @defgroup ImageBufAlgo_intro (ImageBufAlgo common principles) +/// @{ +/// +/// This section explains the general rules common to all ImageBufAlgo +/// functions. Only exceptions to these rules will be explained in the +/// subsequent listings of all the individual ImageBufAlgo functions. +/// +/// +/// **Return values and error messages** +/// +/// Most ImageBufAlgo functions that produce image data come in two forms: +/// +/// 1. Return an ImageBuf. +/// +/// The return value is a new ImageBuf containing the result image. In +/// this case, an entirely new image will be created to hold the result. +/// In case of error, the result image returned can have any error +/// conditions checked with `has_error()` and `geterror()`. +/// +/// // Method 1: Return an image result +/// ImageBuf fg ("fg.exr"), bg ("bg.exr"); +/// ImageBuf dst = ImageBufAlgo::over (fg, bg); +/// if (dst.has_error()) +/// std::cout << "error: " << dst.geterror() << "\n"; +/// +/// 2. Pass a destination ImageBuf reference as the first parameter. +/// +/// The function is passed a *destination* ImageBuf where the results +/// will be stored, and the return value is a `bool` that is `true` if +/// the function succeeds or `false` if the function fails. Upon failure, +/// the destination ImageBuf (the one that is being altered) will have an +/// error message set. +/// +/// // Method 2: Write into an existing image +/// ImageBuf fg ("fg.exr"), bg ("bg.exr"); +/// ImageBuf dst; // will be the output image +/// bool ok = ImageBufAlgo::over (dst, fg, bg); +/// if (! ok) +/// std::cout << "error: " << dst.geterror() << "\n"; +/// +/// The first option (return an ImageBuf) is a more compact and intuitive +/// notation that is natural for most simple uses. But the second option +/// (pass an ImageBuf& referring to an existing destination) offers +/// additional flexibility, including more careful control over allocations, +/// the ability to partially overwrite regions of an existing image, and the +/// ability for the destination image to also be one of the input images +/// (for example, add(A,A,B) adds B into existing image A, with no third +/// image allocated at all). +/// +/// **Region of interest** +/// +/// Most ImageBufAlgo functions take an optional ROI parameter that +/// restricts the operation to a range in x, y, z, and channels. The default +/// ROI (also known as `ROI::All()`) means no region restriction -- the +/// whole image will be copied or altered. +/// +/// For ImageBufAlgo functions that write into a destination ImageBuf +/// parameter and it is already initialized (i.e. allocated with a +/// particular size and data type), the operation will be performed on the +/// pixels in the destination that overlap the ROI, leaving pixels in the +/// destination which are outside the ROI unaltered. +/// +/// For ImageBufAlgo functions that return an ImageBuf directly, or their +/// `dst` parameter that is an uninitialized ImageBuf, the ROI (if set) +/// determines the size of the result image. If the ROI is the default +/// `All`, the result image size will be the union of the pixel data windows +/// of the input images and have a data type determined by the data types of +/// the input images. +/// +/// Most ImageBufAlgo functions also respect the `chbegin` and `chend` +/// members of the ROI, thus restricting the channel range on which the +/// operation is performed. The default ROI constructor sets up the ROI +/// to specify that the operation should be performed on all channels of +/// the input image(s). +/// +/// **Constant and per-channel values** +/// +/// Many ImageBufAlgo functions take per-channel constant-valued arguments +/// (for example, a fill color). These parameters are passed as +/// `cspan`. These are generally expected to have length equal to the +/// number of channels. But you may also pass a single float which will be +/// used as the value for all channels. (More generally, what is happening +/// is that the last value supplied is replicated for any missing channel.) +/// +/// Some ImageBufAlgo functions have parameters of type `Image_or_Const`, +/// which may take either an ImageBuf reference, or a per-channel constant, +/// or a single constant to be used for all channels. +/// +/// **Multithreading** +/// +/// All ImageBufAlgo functions take an optional `nthreads` parameter that +/// signifies the maximum number of threads to use to parallelize the +/// operation. The default value for `nthreads` is 0, which signifies that +/// the number of thread should be the OIIO global default set by +/// `OIIO::attribute()`, which itself defaults to be the detected level of +/// hardware concurrency (number of cores available). +/// +/// Generally you can ignore this parameter (or pass 0), meaning to use all +/// the cores available in order to perform the computation as quickly as +/// possible. The main reason to explicitly pass a different number +/// (generally 1) is if the application is multithreaded at a high level, +/// and the thread calling the ImageBufAlgo function just wants to continue +/// doing the computation without spawning additional threads, which might +/// tend to crowd out the other application threads. +/// +///@} + + + +/// Image_or_Const: Parameter-passing helper that is a non-owning reference +/// to either an `ImageBuf&`, `ImageBuf*`, per-channel float constant, or a +/// single float constant. This lets us tame the combinatorics of functions +/// where each of several input parameters may be either images or constant +/// values. +class Image_or_Const { +public: + struct None {}; + Image_or_Const (None) : m_type(NONE) {} + Image_or_Const (const ImageBuf &img) : m_type(IMG), m_img(&img) {} + Image_or_Const (const ImageBuf *img) : m_type(IMG), m_img(img) {} + Image_or_Const (cspan val) : m_type(VAL), m_val(val) {} + Image_or_Const (const float& val) : m_type(VAL), m_val(val) {} + Image_or_Const (const std::vector& val) : m_type(VAL), m_val(val) {} + Image_or_Const (std::initializer_list val) : m_type(VAL), m_val(val) {} + Image_or_Const (const float *v, size_t s) : m_type(VAL), m_val(v,s) {} + Image_or_Const (const float *v, int s) : m_type(VAL), m_val(v,s) {} + + template + Image_or_Const(const float (&array)[N]) : Image_or_Const(cspan(array)) {} + + bool is_img () const { return m_type == IMG; } + bool is_val () const { return m_type == VAL; } + bool is_empty () const { return m_type == NONE; } + const ImageBuf& img () const { return *m_img; } + const ImageBuf* imgptr () const { return m_img; } + cspan val () const { return m_val; } + + void swap (Image_or_Const &other) { + std::swap (m_type, other.m_type); + std::swap (m_img, other.m_img); + std::swap (m_val, other.m_val); + } +private: + enum Contents { NONE, VAL, IMG }; + Contents m_type; + const ImageBuf * m_img = nullptr; + cspan m_val; +}; + + + +namespace ImageBufAlgo { + + +/// IBA::KWArgs is a span of ParamValue, used to pass keyword/value optional +/// arguments to IBA functions. +using KWArgs = ParamValueSpan; + + +/// Create an all-black `float` image of size and channels as described by +/// the ROI. +ImageBuf OIIO_API zero (ROI roi, int nthreads=0); +/// Write to an existing image `dst` (allocating if it is uninitialized). +bool OIIO_API zero (ImageBuf &dst, ROI roi={}, int nthreads=0); + + +/// @defgroup fill (ImageBufAlgo::fill -- fill a region) +/// @{ +/// +/// Fill an image region with given channel values, either returning a new +/// image or altering the existing `dst` image within the ROI. Note that the +/// values arrays start with channel 0, even if the ROI indicates that a +/// later channel is the first to be changed. +/// +/// Three varieties of fill() exist: (a) a single set of channel values that +/// will apply to the whole ROI, (b) two sets of values that will create a +/// linearly interpolated gradient from top to bottom of the ROI, (c) four +/// sets of values that will be bilinearly interpolated across all four +/// corners of the ROI. + +ImageBuf OIIO_API fill (cspan values, ROI roi, int nthreads=0); +ImageBuf OIIO_API fill (cspan top, cspan bottom, + ROI roi, int nthreads=0); +ImageBuf OIIO_API fill (cspan topleft, cspan topright, + cspan bottomleft, cspan bottomright, + ROI roi, int nthreads=0); +bool OIIO_API fill (ImageBuf &dst, cspan values, + ROI roi={}, int nthreads=0); +bool OIIO_API fill (ImageBuf &dst, cspan top, cspan bottom, + ROI roi={}, int nthreads=0); +bool OIIO_API fill (ImageBuf &dst, cspan topleft, cspan topright, + cspan bottomleft, cspan bottomright, + ROI roi={}, int nthreads=0); +/// @} + + +/// Create a checkerboard pattern of size given by `roi`, with origin given +/// by the `offset` values, checker size given by the `width`, `height`, +/// `depth` values, and alternating between `color1[]` and `color2[]`. The +/// pattern is defined in abstract "image space" independently of the pixel +/// data window of `dst` or the ROI. +ImageBuf OIIO_API checker (int width, int height, int depth, + cspan color1, cspan color2, + int xoffset, int yoffset, int zoffset, + ROI roi, int nthreads=0); +/// Write to an existing image `dst` (allocating if it is uninitialized). +bool OIIO_API checker (ImageBuf &dst, int width, int height, int depth, + cspan color1, cspan color2, + int xoffset=0, int yoffset=0, int zoffset=0, + ROI roi={}, int nthreads=0); + + +/// Return an image of "noise" in every pixel and channel specified by the +/// roi. There are several noise types to choose from, and each behaves +/// differently and has a different interpretation of the `A` and `B` +/// parameters: +/// +/// - "gaussian" adds Gaussian (normal distribution) noise values with +/// mean value A and standard deviation B. +/// - "white" adds independent uniformly distributed values on range +/// [A,B). +/// - "uniform" (synonym for "white") +/// - "blue" adds "blue noise" uniformly distributed on range [A,B) but +/// not independent; rather, they are chosen for good spectral +/// properties for sampling and dither. +/// - "salt" changes to value A a portion of pixels given by B. +/// +/// If the `mono` flag is true, a single noise value will be applied to all +/// channels specified by `roi`, but if `mono` is false, a separate noise +/// value will be computed for each channel in the region. +/// +/// The random number generator is actually driven by a hash on the "image +/// space" coordinates and channel, independently of the pixel data window +/// of `dst` or the ROI. Choosing different seed values will result in a +/// different pattern, but for the same seed value, the noise at a given +/// pixel coordinate (x,y,z) channel c will is completely deterministic and +/// repeatable. +ImageBuf OIIO_API noise (string_view noisetype, + float A = 0.0f, float B = 0.1f, bool mono = false, + int seed = 0, ROI roi={}, int nthreads=0); +/// Write to an existing image `dst` (allocating if it is uninitialized). +bool OIIO_API noise (ImageBuf &dst, string_view noisetype, + float A = 0.0f, float B = 0.1f, bool mono = false, + int seed = 0, ROI roi={}, int nthreads=0); + + +/// Return a const reference to a periodic bluenoise texture with float data +/// in 4 channels that are uncorrelated to each other. Note that unlike most +/// other ImageBufAlgo functions, it does not return an ImageBuf by value, but +/// by const reference. +OIIO_API const ImageBuf& bluenoise_image(); + + +/// Render a single point at (x,y) of the given color "over" the existing +/// image `dst`. If there is no alpha channel, the color will be written +/// unconditionally (as if the alpha is 1.0). +bool OIIO_API render_point (ImageBuf &dst, int x, int y, + cspan color=1.0f, + ROI roi={}, int nthreads=0); + +/// Render a line from pixel (`x1`,`y1`) to (`x2`,`y2`) into `dst`, doing an +/// "over" of the color (if it includes an alpha channel) onto the existing +/// data in `dst`. The `color` should include as many values as +/// `roi.chend-1`. The ROI can be used to limit the pixel area or channels +/// that are modified, and default to the entirety of `dst`. If +/// `skip_first_point` is `true`, the first point (`x1`, `y1`) will not be +/// drawn (this can be helpful when drawing poly-lines, to avoid +/// double-rendering of the vertex positions). +bool OIIO_API render_line (ImageBuf &dst, int x1, int y1, int x2, int y2, + cspan color=1.0f, + bool skip_first_point = false, + ROI roi={}, int nthreads=0); + +/// Render a filled or unfilled box with corners at pixels (`x1`,`y1`) and +/// (`x2`,`y2`) into `dst`, doing an "over" of the color (if it includes an +/// alpha channel) onto the existing data in `dst`. The `color` must include +/// as many values as `roi.chend-1`. The ROI can be used to limit the pixel +/// area or channels that are modified, and default to the entirety of +/// `dst`. If `fill` is `true`, the box will be completely filled in, +/// otherwise only its outline will be drawn. +bool OIIO_API render_box (ImageBuf &dst, int x1, int y1, int x2, int y2, + cspan color=1.0f, bool fill = false, + ROI roi={}, int nthreads=0); + + +enum class TextAlignX { Left, Right, Center }; +enum class TextAlignY { Baseline, Top, Bottom, Center }; + +/// Render a text string (encoded as UTF-8) into image `dst`. If the `dst` +/// image is not yet initialized, it will be initialized to be a black +/// background exactly large enough to contain the rasterized text. If +/// `dst` is already initialized, the text will be rendered into the +/// existing image by essentially doing an "over" of the character into the +/// existing pixel data. +/// +/// @param dst +/// Destination ImageBuf -- text is rendered into this image. +/// @param x/y +/// The position to place the text. +/// @param text +/// The text to draw. Linefeed (`\n`) characters are respected +/// as indications that the text spans multiple rows. +/// @param fontsize/fontname +/// Size and name of the font. If the name is not a full +/// pathname to a font file, it will search for a matching font, +/// defaulting to some reasonable system font if not supplied at +/// all), and with a nominal height of fontsize (in pixels). +/// @param textcolor +/// Color for drawing the text, defaulting to opaque white +/// (1.0,1.0,...) in all channels if not supplied. If provided, +/// it is expected to point to a float array of length at least +/// equal to `R.spec().nchannels`, or defaults will be chosen +/// for you). +/// @param alignx/aligny +/// The default behavior is to align the left edge of the +/// character baseline to (`x`,`y`). Optionally, `alignx` and +/// `aligny` can override the alignment behavior, with +/// horizontal alignment choices of TextAlignX::Left, Right, and +/// Center, and vertical alignment choices of Baseline, Top, +/// Bottom, or Center. +/// @param shadow +/// If nonzero, a "drop shadow" of this radius will be used to +/// make the text look more clear by dilating the alpha channel +/// of the composite (makes a black halo around the characters). +/// +/// Note that any named fonts (if not a full pathname) will search for the +/// fonts in the following places: (a) any directories named in the global +/// "font_searchpath" attribute or the `$OPENIMAGEIO_FONTS` environment +/// variable; (b) any font-related subdirectories (`fonts`, `Fonts`, +/// `share/fonts`, or `Library/Fonts`) underneath the directories in +/// environment variables `$HOME`, `$SystemRoot`, `$OpenImageIO_ROOT`; (c) a +/// number of common system font areas, including `/usr/share/fonts`, +/// `/Library/fonts`, and `C:/Windows/fonts`; (d) in fonts directories one +/// level up from the place where the currently running binary lives. +bool OIIO_API render_text (ImageBuf &dst, int x, int y, string_view text, + int fontsize=16, string_view fontname="", + cspan textcolor = 1.0f, + TextAlignX alignx = TextAlignX::Left, + TextAlignY aligny = TextAlignY::Baseline, + int shadow = 0, ROI roi={}, int nthreads=0); + + +/// The helper function `text_size()` merely computes the dimensions of the +/// text, returning it as an ROI relative to the left side of the baseline +/// of the first character. Only the `x` and `y` dimensions of the ROI will +/// be used. The x dimension runs from left to right, and y runs from top to +/// bottom (image coordinates). For a failure (such as an invalid font +/// name), the ROI will return `false` if you call its `defined()` method. +/// The `text` may contain linefeed characters to designate multiple lines +/// of text. +ROI OIIO_API text_size (string_view text, int fontsize=16, + string_view fontname=""); + + +/// Generic channel shuffling: return (or store in `dst`) a copy of `src`, +/// but with channels in the order `channelorder[0..nchannels-1]` (or set to +/// a constant value, designated by `channelorder[i] = -1` and having the +/// fill value in `channelvalues[i]`. In-place operation is allowed (i.e., +/// `dst` and `src` the same image, but an extra copy will occur). +/// +/// @param nchannels +/// The total number of channels that will be set up in the +/// `dst` image. +/// @param channelorder +/// For each channel in `dst`, the index of the `src` channel +/// from which to copy. Any `channelorder[i]` < 0 indicates that +/// the channel `i` should be filled with constant value +/// `channelvalues[i]` rather than copy any channel from `src`. +/// If `channelorder` itself is empty, the implied channel order +/// will be `{0, 1, ..., nchannels-1}`, meaning that it's only +/// renaming, truncating, or extending channels, not reordering +/// the channels that are already present. +/// @param channelvalues Fill values for color channels in which +/// `channelorder[i]` < 0. This can be empty if no channels are +/// to be filled with constant values. +/// @param newchannelnames +/// An array of new channel names. Channels for which this +/// specifies an empty string will have their name taken from +/// the `src` channel that was copied. If `newchannelnames` is +/// entirely empty, all channel names will simply be copied from +/// `src`. +/// @param shuffle_channel_names +/// If true, the channel names will be taken from the +/// corresponding channels of the source image -- be careful with +/// this, shuffling both channel ordering and their names could +/// result in no semantic change at all, if you catch the drift. +/// If false (the default), the resulting `dst` image will have +/// default channel names in the usual order ("R", "G", etc.). +/// +ImageBuf OIIO_API channels (const ImageBuf &src, + int nchannels, cspan channelorder, + cspan channelvalues={}, + cspan newchannelnames={}, + bool shuffle_channel_names=false, int nthreads=0); +/// Write to an existing image `dst` (allocating if it is uninitialized). +bool OIIO_API channels (ImageBuf &dst, const ImageBuf &src, + int nchannels, cspan channelorder, + cspan channelvalues={}, + cspan newchannelnames={}, + bool shuffle_channel_names=false, int nthreads=0); + + +/// Append the channels of `A` and `B` together into `dst` over the region +/// of interest. If the region passed is uninitialized (the default), it +/// will be interpreted as being the union of the pixel windows of `A` and `B` +/// (and all channels of both images). If `dst` is not already initialized, +/// it will be resized to be big enough for the region. +ImageBuf OIIO_API channel_append (const ImageBuf &A, const ImageBuf &B, + ROI roi={}, int nthreads=0); +/// Write to an existing image `dst` (allocating if it is uninitialized). +bool OIIO_API channel_append (ImageBuf &dst, const ImageBuf &A, + const ImageBuf &B, ROI roi={}, int nthreads=0); + + +/// Return the specified region of pixels of `src` as specified by `roi` +/// (which will default to the whole of `src`, optionally with the pixel +/// type overridden by convert (if it is not `TypeUnknown`). +ImageBuf OIIO_API copy (const ImageBuf &src, TypeDesc convert=TypeUnknown, + ROI roi={}, int nthreads=0); +/// Write to an existing image `dst` (allocating if it is uninitialized). +/// If `dst` is not already initialized, it will be set to the same size as +/// `roi` (defaulting to all of `src`) +bool OIIO_API copy (ImageBuf &dst, const ImageBuf &src, TypeDesc convert=TypeUnknown, + ROI roi={}, int nthreads=0); + + +/// Return the specified region of `src` as an image, without altering its +/// position in the image plane. +/// +/// Pixels from `src` which are outside `roi` will not be copied, and new +/// black pixels will be added for regions of `roi` which were outside the +/// data window of `src`. +/// +/// Note that the `crop` operation does not actually move the pixels on the +/// image plane or adjust the full/display window; it merely restricts which +/// pixels are copied from `src` to `dst`. (Note the difference compared to +/// `cut()`). +ImageBuf OIIO_API crop (const ImageBuf &src, ROI roi={}, int nthreads=0); +/// Write to an existing image `dst` (allocating if it is uninitialized). +bool OIIO_API crop (ImageBuf &dst, const ImageBuf &src, ROI roi={}, int nthreads=0); + + +/// Return the designated region of `src`, but repositioned to the image +/// origin and with the full/display window set to exactly cover the new +/// pixel data window. (Note the difference compared to `crop()`). +ImageBuf OIIO_API cut (const ImageBuf &src, ROI roi={}, int nthreads=0); +/// Write to an existing image `dst` (allocating if it is uninitialized). +bool OIIO_API cut (ImageBuf &dst, const ImageBuf &src, ROI roi={}, int nthreads=0); + + +/// Copy `src` pixels within `srcroi` into the `dst` image, offset so that +/// source location (0,0,0) will be copied to destination location +/// (`xbegin`,`ybegin`,`zbegin`). If the `srcroi` is `ROI::All()`, the +/// entirety of the data window of `src` will be used. It will copy into +/// `channels[chbegin...]`, as many channels as are described by srcroi. +/// Pixels or channels of `src` inside `srcroi` will replace the +/// corresponding destination pixels entirely, whereas `src` pixels outside +/// of `srcroi` will not be copied and the corresponding offset pixels of +/// `dst` will not be altered. +bool OIIO_API paste (ImageBuf &dst, int xbegin, int ybegin, + int zbegin, int chbegin, const ImageBuf &src, + ROI srcroi={}, int nthreads=0); + + +/// @defgroup rotateN (rotate in 90 degree increments) +/// @{ +/// +/// Return (or copy into `dst`) a rotated copy of the image pixels of `src`, +/// in 90 degree increments. Pictorially: +/// +/// rotate90 rotate180 rotate270 +/// ----------- ----------- ----------- +/// AB --> CA AB --> DC AB --> BD +/// CD DB CD BA CD AC +/// + +ImageBuf OIIO_API rotate90 (const ImageBuf &src, ROI roi={}, int nthreads=0); +ImageBuf OIIO_API rotate180 (const ImageBuf &src, ROI roi={}, int nthreads=0); +ImageBuf OIIO_API rotate270 (const ImageBuf &src, ROI roi={}, int nthreads=0); +bool OIIO_API rotate90 (ImageBuf &dst, const ImageBuf &src, + ROI roi={}, int nthreads=0); +bool OIIO_API rotate180 (ImageBuf &dst, const ImageBuf &src, + ROI roi={}, int nthreads=0); +bool OIIO_API rotate270 (ImageBuf &dst, const ImageBuf &src, + ROI roi={}, int nthreads=0); +/// @} + + +/// @defgroup flip-flop-transpose (flip/flop/transpose: mirroring) +/// @{ +/// +/// Return (or copy into `dst`) a subregion of `src`, but with the scanlines +/// exchanged vertically (flip), or columns exchanged horizontally (flop), +/// or transposed across the diagonal by swapping rows for columns +/// (transpose) within the display/full window. In other words, +/// +/// flip flop transpose +/// ----------- ----------- ----------- +/// AB --> CD AB --> BA AB --> AC +/// CD AB CD DC CD BD +/// + +ImageBuf OIIO_API flip (const ImageBuf &src, ROI roi={}, int nthreads=0); +ImageBuf OIIO_API flop (const ImageBuf &src, ROI roi={}, int nthreads=0); +ImageBuf OIIO_API transpose (const ImageBuf &src, ROI roi={}, int nthreads=0); +bool OIIO_API flip (ImageBuf &dst, const ImageBuf &src, + ROI roi={}, int nthreads=0); +bool OIIO_API flop (ImageBuf &dst, const ImageBuf &src, + ROI roi={}, int nthreads=0); +bool OIIO_API transpose (ImageBuf &dst, const ImageBuf &src, + ROI roi={}, int nthreads=0); +/// @} + + +/// Return (or store into `dst`) a copy of `src`, but with whatever series +/// of rotations, flips, or flops are necessary to transform the pixels into +/// the configuration suggested by the "Orientation" metadata of the image +/// (and the "Orientation" metadata is then set to 1, ordinary orientation). +ImageBuf OIIO_API reorient (const ImageBuf &src, int nthreads=0); +/// Write to an existing image `dst` (allocating if it is uninitialized). +bool OIIO_API reorient (ImageBuf &dst, const ImageBuf &src, int nthreads=0); + + +/// Return a subregion of `src`, but circularly shifting by the given +/// amount. To clarify, the circular shift of [0,1,2,3,4,5] by +2 is +/// [4,5,0,1,2,3]. +ImageBuf OIIO_API circular_shift (const ImageBuf &src, + int xshift, int yshift, int zshift=0, + ROI roi={}, int nthreads=0); +/// Write to an existing image `dst` (allocating if it is uninitialized). +bool OIIO_API circular_shift (ImageBuf &dst, const ImageBuf &src, + int xshift, int yshift, int zshift=0, + ROI roi={}, int nthreads=0); + + +/// @defgroup rotate (rotate: arbitrary rotation) +/// @{ +/// +/// Rotate the `src` image by the `angle` (in radians, with positive angles +/// clockwise). When `center_x` and `center_y` are supplied, they denote the +/// center of rotation, in pixel coordinates; in their absence, the rotation +/// will be about the center of the image's display window. +/// +/// Only the pixels (and channels) of `dst` that are specified by `roi` will +/// be copied from the rotated `src`; the default `roi` is to alter all the +/// pixels in `dst`. If `dst` is uninitialized, it will be resized to be an +/// ImageBuf large enough to hold the rotated image if recompute_roi is +/// true, or will have the same ROI as `src` if `recompute_roi` is `false`. +/// It is an error to pass both an uninitialized `dst` and an undefined +/// `roi`. +/// +/// The filter is used to weight the `src` pixels falling underneath it for +/// each `dst` pixel. The caller may specify a reconstruction filter by +/// name and width (expressed in pixels units of the `dst` image), or +/// `rotate()` will choose a reasonable default high-quality default filter +/// (lanczos3) if the empty string is passed, and a reasonable filter width +/// if `filterwidth` is 0. (Note that some filter choices only make sense +/// with particular width, in which case this filterwidth parameter may be +/// ignored.) + +ImageBuf OIIO_API rotate (const ImageBuf &src, float angle, + string_view filtername = string_view(), + float filterwidth = 0.0f, bool recompute_roi = false, + ROI roi={}, int nthreads=0); +ImageBuf OIIO_API rotate (const ImageBuf &src, float angle, + Filter2D *filter, bool recompute_roi = false, + ROI roi={}, int nthreads=0); +ImageBuf OIIO_API rotate (const ImageBuf &src, + float angle, float center_x, float center_y, + string_view filtername = string_view(), + float filterwidth = 0.0f, bool recompute_roi = false, + ROI roi={}, int nthreads=0); +ImageBuf OIIO_API rotate (const ImageBuf &src, + float angle, float center_x, float center_y, + Filter2D *filter, bool recompute_roi = false, + ROI roi={}, int nthreads=0); +bool OIIO_API rotate (ImageBuf &dst, const ImageBuf &src, float angle, + string_view filtername = string_view(), + float filterwidth = 0.0f, bool recompute_roi = false, + ROI roi={}, int nthreads=0); +bool OIIO_API rotate (ImageBuf &dst, const ImageBuf &src, float angle, + Filter2D *filter, bool recompute_roi = false, + ROI roi={}, int nthreads=0); +bool OIIO_API rotate (ImageBuf &dst, const ImageBuf &src, + float angle, float center_x, float center_y, + string_view filtername = string_view(), + float filterwidth = 0.0f, bool recompute_roi = false, + ROI roi={}, int nthreads=0); +bool OIIO_API rotate (ImageBuf &dst, const ImageBuf &src, + float angle, float center_x, float center_y, + Filter2D *filter, bool recompute_roi = false, + ROI roi={}, int nthreads=0); +/// @} + + +/// @defgroup resize (resize: resize the image with nicely filtered results) +/// @{ +/// +/// Set `dst`, over the region of interest, to be a resized version of the +/// corresponding portion of `src` (mapping such that the "full" image +/// window of each correspond to each other, regardless of resolution). +/// If `dst` is not yet initialized, it will be sized according to `roi`. +/// +/// The `options` list contains optional ParamValue's that control the +/// resizing behavior. The following options are recognized: +/// +/// - "filtername" : string (default: "") +/// +/// The type of reconstruction filter used to weight the `src` pixels +/// falling underneath it for each `dst` pixel. If the value is the +/// empty string or not supplied, a reasonable high-quality filter will +/// be chosen automatically (blackman-harris when upsizing, lanczos3 +/// when downsizing). +/// +/// - "filterwidth" : float (default: 0) +/// +/// The width of the reconstruction filter, expressed in pixel units of +/// the `dst` image. If 0 or not supplied, the default width of the +/// named filter will be used. +/// +/// - "filterptr" : pointer to a Filter2D (default: nullptr) +/// +/// Advanced use: It is also possible to pass a custom reconstruction +/// filter as a `Filter2D*`, overriding any filtername and filterwidth +/// that may also be passed. The easiest way to pass it is as: +/// `make_pv("filterptr", raw_filter_ptr)`. +/// Use with caution! +/// +/// The caller may either (a) explicitly pass a reconstruction `filter`, or +/// (b) specify one by `filtername` and `filterwidth`. If `filter` is +/// `nullptr` or if `filtername` is the empty string `resize()` will choose +/// a reasonable high-quality default (blackman-harris when upsizing, +/// lanczos3 when downsizing). The filter is used to weight the `src` +/// pixels falling underneath it for each `dst` pixel; the filter's size is +/// expressed in pixel units of the `dst` image. + +ImageBuf OIIO_API resize(const ImageBuf &src, KWArgs options = {}, + ROI roi = {}, int nthreads = 0); +bool OIIO_API resize(ImageBuf &dst, const ImageBuf &src, KWArgs options = {}, + ROI roi = {}, int nthreads=0); + +/// @} + + +/// Set `dst`, over the region of interest, to be a resized version of the +/// corresponding portion of `src` (mapping such that the "full" image +/// window of each correspond to each other, regardless of resolution). If +/// `dst` is not yet initialized, it will be sized according to `roi`. +/// +/// Unlike `ImageBufAlgo::resize()`, `resample()` does not take a filter; it +/// just samples either with a bilinear interpolation (if `interpolate` is +/// `true`, the default) or uses the single "closest" pixel (if +/// `interpolate` is `false`). This makes it a lot faster than a proper +/// `resize()`, though obviously with lower quality (aliasing when +/// downsizing, pixel replication when upsizing). +/// +/// For "deep" images, this function returns copies the closest source pixel +/// needed, rather than attempting to interpolate deep pixels (regardless of +/// the value of `interpolate`). +/// +/// @see ImageBufAlgo::resize() + +ImageBuf OIIO_API resample (const ImageBuf &src, bool interpolate = true, + ROI roi={}, int nthreads=0); +/// Write to an existing image `dst` (allocating if it is uninitialized). +bool OIIO_API resample (ImageBuf &dst, const ImageBuf &src, + bool interpolate = true, ROI roi={}, int nthreads=0); + + +/// @defgroup fit (fit: resize the image with filtering, into a fixed size) +/// @{ +/// +/// Resize `src` to fit into `dst` (to a size specified by `roi`, if `dst` is +/// not initialized), preserving its original aspect ratio. Thus, it will +/// resize to be the largest size with the same aspect ratio that can fit +/// inside the region, but will not necessarily completely fill it in both +/// dimensions if the source and destination image buffers do not have the +/// same aspect ratio. +/// +/// The `options` list contains optional ParamValue's that control the +/// resizing behavior. The following options are recognized: +/// +/// - "filtername" : string (default: "") +/// +/// The type of reconstruction filter used to weight the `src` pixels +/// falling underneath it for each `dst` pixel. If the value is the +/// empty string or not supplied, a reasonable high-quality filter will +/// be chosen automatically (blackman-harris when upsizing, lanczos3 +/// when downsizing). +/// +/// - "filterwidth" : float (default: 0) +/// +/// The width of the reconstruction filter, expressed in pixel units of +/// the `dst` image. If 0 or not supplied, the default width of the +/// named filter will be used. +/// +/// - "filterptr" : pointer to a Filter2D (default: nullptr) +/// +/// Advanced use: It is also possible to pass a custom reconstruction +/// filter as a `Filter2D*`, overriding any filtername and filterwidth +/// that may also be passed. The easiest way to pass it is as: +/// `make_pv("filterptr", raw_filter_ptr)`. +/// Use with caution! +/// +/// - "fillmode" : string (default: "letterbox") +/// +/// The `fillmode` determines which of several methods will be used to +/// determine how the image will fill the new frame, if its aspect ratio +/// does not precisely match the original source aspect ratio: +/// +/// - "width" exactly fills the width of the new frame, either cropping +/// or letterboxing the height if it isn't precisely the right size +/// to preserve the original aspect ratio. +/// - "height" exactly fills the height of the new frame, either +/// cropping or letterboxing the width if it isn't precisely the +/// right size to preserve the original aspect ratio. +/// - "letterbox" (the default) chooses whichever of "width" or +/// "height" will maximally fill the new frame with no image data +/// lost (it will only letterbox, never crop). +/// +/// - "exact" : int (default: 0) +/// +/// If nonzero, will result in an exact match on aspect ratio and +/// centering (partial pixel shift if necessary), whereas exact=false +/// will only preserve aspect ratio and centering to the precision of a +/// whole pixel. +/// + +ImageBuf OIIO_API fit(const ImageBuf &src, KWArgs options = {}, + ROI roi={}, int nthreads=0); +bool OIIO_API fit(ImageBuf &dst, const ImageBuf &src, KWArgs options = {}, + ROI roi={}, int nthreads=0); + +/// @} + + +/// @defgroup warp (warp: arbitrary warp by a 3x3 matrix) +/// @{ +/// +/// Warp the `src` image using the supplied 3x3 transformation matrix. +/// +/// Only the pixels (and channels) of `dst` that are specified by `roi` will +/// be copied from the warped `src`; the default is to alter all the pixels in +/// `dst`. If `dst` is uninitialized, it will be sized to be an ImageBuf large +/// enough to hold the warped image if recompute_roi is true, or will have the +/// same ROI as src if recompute_roi is false. It is an error to pass both an +/// uninitialized `dst` and an undefined `roi`. +/// +/// @param dst +/// The output ImageBuf. If not already initialized, it will be sized +/// based on `roi` (which itself will default to the size of `src`, +/// if not specified). +/// @param src +/// The source ImageBuf. +/// @param M +/// A 3x3 matrix describing the desired spatial transformation +/// of destination pixel coordinates to source pixel coordinates. +/// @param roi +/// The region of `dst` that will receive transformed pixels. If +/// not specified, it will be all the pixels of `dst`. +/// @param options +/// Optional ParamValue's that may control the filtering and +/// reconstruction. +/// +/// The `options` list contains optional ParamValue's that may control the +/// filtering and reconstruction. The following options are recognized: +/// +/// - "filtername" : string (default: "") +/// +/// The type of reconstruction filter used to weight the `src` pixels +/// falling underneath it for each `dst` pixel. If the value is the +/// empty string or not supplied, a reasonable high-quality filter will +/// be chosen automatically. +/// +/// - "filterwidth" : float (default: 0) +/// +/// The width of the reconstruction filter, expressed in pixel units of +/// the `dst` image. If 0 or not supplied, the default width of the +/// named filter will be used. +/// +/// - "wrap" : string (default: "black") +/// +/// The wrap mode controlling the value of pixel lookups that need to +/// occur beyond the boundary of the `src` image. (Could be one of: +/// black, clamp, periodic, mirror.) +/// +/// - "edgeclamp" : int (default: 0) +/// +/// If nonzero, will enable special edge clamp behavior to reduce +/// artifacts at the image edges (experimental). +/// +/// - "recompute_roi" : int (default: 0) +/// +/// If nonzero and `dst` is not yet initialized, the result image +/// will be sized to be large enough to hold the warped image. If +/// zero (the default), the `dst` image will have the same ROI as +/// `src`. If the `dst` image already is initialized, its size will +/// not be changed and this option will be ignored. +/// +/// - "filterptr" : pointer to a Filter2D (default: nullptr) +/// +/// Advanced use: It is also possible to pass a custom reconstruction +/// filter as a `Filter2D*`, overriding any filtername and filterwidth +/// that may also be passed. The easiest way to pass it is as: +/// `make_pv("filterptr", raw_filter_ptr)`. +/// Use with caution! +/// + +ImageBuf OIIO_API warp(const ImageBuf &src, M33fParam M, + KWArgs options = {}, ROI roi = {}, int nthreads = 0); +bool OIIO_API warp(ImageBuf &dst, const ImageBuf &src, M33fParam M, + KWArgs options = {}, ROI roi = {}, int nthreads = 0); + +/// @} + + +/// @defgroup st_warp (st_warp: warp an image using per-pixel st coordinates) +/// @{ +/// +/// Warp the `src` image using "st" coordinates from a secondary `stbuf` image. +/// +/// Each pixel in the `stbuf` image is used as a normalized image-space +/// coordinate in the `src` image, which is then sampled at that position using +/// the given reconstruction filter to produce an output pixel. +/// +/// The transform is only defined over the area of the `stbuf` image, and thus +/// the given `roi` argument will be intersected with its geometry. +/// +/// \b NOTE: The current behavior of this transform is modeled to match Nuke's +/// STMap node. +/// +/// @param dst +/// The output ImageBuf. If an initialized buffer is provided, its +/// full-size dimensions must match those of `stbuf`. +/// @param src +/// The source ImageBuf to warp. +/// @param stbuf +/// The ImageBuf holding the st coordinates. This must be holding +/// a floating-point pixel data type. +/// @param chan_s +/// The index of the "s" channel in the `stbuf` image. This defaults +/// to its first channel. +/// @param chan_t +/// The index of the "t" channel in the `stbuf` image. This defaults +/// to its second channel. +/// @param flip_s +/// Whether to mirror the "s" coordinate along the horizontal axis +/// when computing source pixel positions. This is useful if the +/// coordinates are defined in terms of a different image origin +/// than OpenImageIO's. +/// @param flip_t +/// Whether to mirror the "t" coordinate along the vertical axis +/// when computing source pixel positions. This is useful if the +/// coordinates are defined in terms of a different image origin +/// than OpenImageIO's. + +ImageBuf OIIO_API st_warp (const ImageBuf &src, const ImageBuf& stbuf, + string_view filtername=string_view(), + float filterwidth=0.0f, int chan_s=0, int chan_t=1, + bool flip_s=false, bool flip_t=false, ROI roi={}, + int nthreads=0); +ImageBuf OIIO_API st_warp (const ImageBuf &src, const ImageBuf& stbuf, + const Filter2D *filter, int chan_s=0, int chan_t=1, + bool flip_s=false, bool flip_t=false, ROI roi={}, + int nthreads=0); +bool OIIO_API st_warp (ImageBuf &dst, const ImageBuf &src, + const ImageBuf& stbuf, + string_view filtername=string_view(), + float filterwidth=0.0f, int chan_s=0, int chan_t=1, + bool flip_s=false, bool flip_t=false, ROI roi={}, + int nthreads=0); +bool OIIO_API st_warp (ImageBuf &dst, const ImageBuf &src, + const ImageBuf& stbuf, const Filter2D *filter, + int chan_s=0, int chan_t=1, bool flip_s=false, + bool flip_t=false, ROI roi={}, int nthreads=0); +/// @} + + +/// Compute per-pixel sum `A + B`, returning the result image. +/// +/// `A` and `B` may each either be an `ImageBuf&`, or a `cspan` +/// giving a per- channel constant, or a single constant used for all +/// channels. (But at least one must be an image.) +ImageBuf OIIO_API add (Image_or_Const A, Image_or_Const B, + ROI roi={}, int nthreads=0); +/// Write to an existing image `dst` (allocating if it is uninitialized). +bool OIIO_API add (ImageBuf &dst, Image_or_Const A, Image_or_Const B, + ROI roi={}, int nthreads=0); + + +/// Compute per-pixel signed difference `A - B`, returning the result image. +/// +/// `A` and `B` may each either be an `ImageBuf&`, or a `cspan` +/// giving a per-channel constant, or a single constant used for all +/// channels. (But at least one must be an image.) +ImageBuf OIIO_API sub (Image_or_Const A, Image_or_Const B, + ROI roi={}, int nthreads=0); +/// Write to an existing image `dst` (allocating if it is uninitialized). +bool OIIO_API sub (ImageBuf &dst, Image_or_Const A, Image_or_Const B, + ROI roi={}, int nthreads=0); + + +/// Compute per-pixel absolute difference `abs(A - B)`, returning the result +/// image. +/// +/// `A` and `B` may each either be an `ImageBuf&`, or a `cspan` +/// giving a per- channel constant, or a single constant used for all +/// channels. (But at least one must be an image.) +ImageBuf OIIO_API absdiff (Image_or_Const A, Image_or_Const B, + ROI roi={}, int nthreads=0); +/// Write to an existing image `dst` (allocating if it is uninitialized). +bool OIIO_API absdiff (ImageBuf &dst, Image_or_Const A, Image_or_Const B, + ROI roi={}, int nthreads=0); + + +/// Compute per-pixel absolute value `abs(A)`, returning the result image. +ImageBuf OIIO_API abs (const ImageBuf &A, ROI roi={}, int nthreads=0); +/// Write to an existing image `dst` (allocating if it is uninitialized). +bool OIIO_API abs (ImageBuf &dst, const ImageBuf &A, ROI roi={}, int nthreads=0); + + +/// Compute per-pixel product `A * B`, returning the result image. At least +/// one of `A` and `B` must be a single channel image, whose value is used to +/// scale all channels of the other image. +/// +/// @param options +/// Optional ParamValue's that may control the reconstruction. +/// (Reserved for future expansion.) +/// +ImageBuf OIIO_API scale (const ImageBuf &A, const ImageBuf &B, + KWArgs options = {}, ROI roi={}, int nthreads=0); +/// Write to an existing image `dst` (allocating if it is uninitialized). +bool OIIO_API scale (ImageBuf &dst, const ImageBuf &A, const ImageBuf &B, + KWArgs options = {}, ROI roi={}, int nthreads=0); + + +/// Compute per-pixel product `A * B`, returning the result image. +/// +/// Either both `A` and `B` are images, or one is an image and the other is +/// a `cspan` giving a per-channel constant or a single constant +/// used for all channels. +ImageBuf OIIO_API mul (Image_or_Const A, Image_or_Const B, + ROI roi={}, int nthreads=0); +/// Write to an existing image `dst` (allocating if it is uninitialized). +bool OIIO_API mul (ImageBuf &dst, Image_or_Const A, Image_or_Const B, + ROI roi={}, int nthreads=0); + + +/// Compute per-pixel division `A / B`, returning the result image. +/// Division by zero is defined to result in zero. +/// +/// `A` is always an image, and `B` is either an image or a `cspan` +/// giving a per-channel constant or a single constant used for all +/// channels. +ImageBuf OIIO_API div (Image_or_Const A, Image_or_Const B, + ROI roi={}, int nthreads=0); +/// Write to an existing image `dst` (allocating if it is uninitialized). +bool OIIO_API div (ImageBuf &dst, Image_or_Const A, Image_or_Const B, + ROI roi={}, int nthreads=0); + + +/// Compute per-pixel multiply-and-add `A * B + C`, returning the result +/// image. +/// +/// `A`, `B`, and `C` are each either an image, or a `cspan` giving a +/// per-channel constant or a single constant used for all channels. (Note: +/// at least one must be an image.) +ImageBuf OIIO_API mad (Image_or_Const A, Image_or_Const B, + Image_or_Const C, ROI roi={}, int nthreads=0); +/// Write to an existing image `dst` (allocating if it is uninitialized). +bool OIIO_API mad (ImageBuf &dst, Image_or_Const A, Image_or_Const B, + Image_or_Const C, ROI roi={}, int nthreads=0); + + +/// Return the composite of `A` over `B` using the Porter/Duff definition of +/// "over", returning true upon success and false for any of a variety of +/// failures (as described below). +/// +/// `A` and `B` (and dst, if already defined/allocated) must have valid +/// alpha channels identified by their ImageSpec `alpha_channel` field. If` +/// A` or `B` do not have alpha channels (as determined by those rules) or +/// if the number of non-alpha channels do not match between `A` and `B`, +/// `over()` will fail, returning false. +/// +/// If `dst` is not already an initialized ImageBuf, it will be sized to +/// encompass the minimal rectangular pixel region containing the union of +/// the defined pixels of `A` and `B`, and with a number of channels equal +/// to the number of non-alpha channels of `A` and `B`, plus an alpha +/// channel. However, if `dst` is already initialized, it will not be +/// resized, and the "over" operation will apply to its existing pixel data +/// window. In this case, dst must have an alpha channel designated and +/// must have the same number of non-alpha channels as `A` and `B`, +/// otherwise it will fail, returning false. +/// +/// `A`, `B`, and `dst` need not perfectly overlap in their pixel data +/// windows; pixel values of `A` or `B` that are outside their respective +/// pixel data window will be treated as having "zero" (0,0,0...) value. +ImageBuf OIIO_API over (const ImageBuf &A, const ImageBuf &B, + ROI roi={}, int nthreads=0); +/// Write to an existing image `dst` (allocating if it is uninitialized). +bool OIIO_API over (ImageBuf &dst, const ImageBuf &A, const ImageBuf &B, + ROI roi={}, int nthreads=0); + + +/// Just like `ImageBufAlgo::over()`, but inputs `A` and `B` must have +/// designated 'z' channels, and on a pixel-by-pixel basis, the z values +/// will determine which of `A` or `B` will be considered the foreground or +/// background (lower z is foreground). If `z_zeroisinf` is true, then z=0 +/// values will be treated as if they are infinitely far away. +ImageBuf OIIO_API zover (const ImageBuf &A, const ImageBuf &B, + bool z_zeroisinf=false, ROI roi={}, int nthreads=0); +/// Write to an existing image `dst` (allocating if it is uninitialized). +bool OIIO_API zover (ImageBuf &dst, const ImageBuf &A, const ImageBuf &B, + bool z_zeroisinf=false, ROI roi={}, int nthreads=0); + + + +/// Compute per-pixel value inverse `1.0 - A` (which you can think of as +/// roughly meaning switching white and black), returning the result image. +/// +/// Tips for callers: (1) You probably want to set `roi` to restrict the +/// operation to only the color channels, and not accidentally include +/// alpha, z, or others. (2) There may be situations where you want to +/// `unpremult()` before the invert, then `premult()` the result, so that +/// you are computing the inverse of the unmasked color. +ImageBuf OIIO_API invert (const ImageBuf &A, ROI roi={}, int nthreads=0); +/// Write to an existing image `dst` (allocating if it is uninitialized). +bool OIIO_API invert (ImageBuf &dst, const ImageBuf &A, ROI roi={}, int nthreads=0); + + +/// Compute per-pixel raise-to-power `A ^ B`. returning the result image. It +/// is permitted for `dst` and `A` to be the same image. +/// +/// `A` is always an image, and `B` is either an image or a `cspan` +/// giving a per-channel constant or a single constant used for all +/// channels. +ImageBuf OIIO_API pow (const ImageBuf &A, cspan B, + ROI roi={}, int nthreads=0); +/// Write to an existing image `dst` (allocating if it is uninitialized). +bool OIIO_API pow (ImageBuf &dst, const ImageBuf &A, cspan B, + ROI roi={}, int nthreads=0); + +/// Normalize a 3D vector texture (i.e., divide each pixel by its length). +/// This function assumes a 3-channel image that represents a 3-vector, or a +/// 4-channel image that represents a 3-vector plus an alpha value. If an +/// alpha channel is present, its value is merely copied, and is not part of +/// the normalization computation. If the destination has no alpha channel but +/// the sources do, the alpha channel will be dropped. +/// +/// `inCenter` and `outCenter` define the pixel value that corresponds to a +/// 0.0 vector value for input and output, respectively. `scale` defines the +/// scale factor to apply to the normalized vectors. +/// +/// Thus, if the input image encodes vector components into [0,1] range pixel +/// values so that a pixel value 0.5 indicates a 0-length vector, then you +/// should use `inCenter=0.5`, whereas if they are already using the full +/// range (0.0 is encoded as 0.0), then you want `inCenter=0.0`. Similarly, if +/// you want the output normalized vectors to be in the range [0,1], use +/// `outCenter=0.5` and `scale=0.5`, but if you want them to be in the range +/// [-1,1], use `outCenter=0.0` and `scale=1.0` (this probably will only work +/// if you intend to write the results in `float` or `half` format). +/// +/// Expressed another way, the computation is conceptually: +/// +/// out = outCenter + scale * (in - inCenter) / length(in - inCenter) +/// +bool OIIO_API normalize(ImageBuf& dst, const ImageBuf& A, float inCenter=0.0f, + float outCenter=0.0f, float scale=1.0f, + ROI roi={}, int nthreads=0); + +ImageBuf OIIO_API normalize(const ImageBuf& A, float inCenter=0.0f, + float outCenter=0.0, float scale=1.0f, + ROI roi={}, int nthreads=0); + + +/// Converts a multi-channel image into a one-channel image via a weighted +/// sum of channels: +/// +/// (channel[0]*weight[0] + channel[1]*weight[1] + ...) +/// +/// returning the resulting one-channel image. The `weights`, if not +/// supplied, default to `{ 1, 1, 1, ... }`). +ImageBuf OIIO_API channel_sum (const ImageBuf &src, cspan weights=1.0f, + ROI roi={}, int nthreads=0); +/// Write to an existing image `dst` (allocating if it is uninitialized). +bool OIIO_API channel_sum (ImageBuf &dst, const ImageBuf &src, + cspan weights=1.0f, + ROI roi={}, int nthreads=0); + + +/// @defgroup maxminclamp (Maximum, minimum, clamping) +/// @{ +/// +/// `max()` and `min()` take the pixel-by-pixel, channel-by-channel +/// maximum and minimum of two images, or of an image and a constant. +/// +/// `clamp()` restricts values of an image to the range between per-channel +/// minimum and maximum constant values. + + +/// Compute per-pixel `max(A, B)`, returning the result image. +/// +/// Either both `A` and `B` are images, or one is an image and the other is +/// a `cspan` giving a per-channel constant or a single constant +/// used for all channels. +ImageBuf OIIO_API max (Image_or_Const A, Image_or_Const B, + ROI roi={}, int nthreads=0); +/// Write to an existing image `dst` (allocating if it is uninitialized). +bool OIIO_API max (ImageBuf &dst, Image_or_Const A, Image_or_Const B, + ROI roi={}, int nthreads=0); + +/// Compute per-pixel `min(A, B)`, returning the result image. +/// +/// Either both `A` and `B` are images, or one is an image and the other is +/// a `cspan` giving a per-channel constant or a single constant +/// used for all channels. +ImageBuf OIIO_API min (Image_or_Const A, Image_or_Const B, + ROI roi={}, int nthreads=0); +/// Write to an existing image `dst` (allocating if it is uninitialized). +bool OIIO_API min (ImageBuf &dst, Image_or_Const A, Image_or_Const B, + ROI roi={}, int nthreads=0); + + + +/// Return pixels of `src` with pixel values clamped as follows: +/// @param min +/// The minimum clamp value for each channel. If `min` is +/// empty, no minimum clamping is performed. +/// @param max +/// The maximum clamp value for each channel. If `max` is +/// empty, no maximum clamping is performed. +/// @param clampalpha01 +/// If true, then additionally any alpha channel is clamped +/// to the 0-1 range. +ImageBuf OIIO_API clamp (const ImageBuf &src, + cspan min=-std::numeric_limits::max(), + cspan max=std::numeric_limits::max(), + bool clampalpha01 = false, ROI roi={}, int nthreads=0); +/// Write to an existing image `dst` (allocating if it is uninitialized). +bool OIIO_API clamp (ImageBuf &dst, const ImageBuf &src, + cspan min=-std::numeric_limits::max(), + cspan max=std::numeric_limits::max(), + bool clampalpha01 = false, ROI roi={}, int nthreads=0); + +/// @} + + +/// @defgroup maxminchan (Maximum / minimum of channels) +/// @{ +/// +/// `maxchan()` computes a one-channel image that for each pixel, contains the +/// maximum value of all channels of corresponding pixel of the source image. +/// `minchan()` similarly computes the minimum value of all channels. +/// +/// @version 2.3.10 + +ImageBuf OIIO_API maxchan (const ImageBuf& A, ROI roi={}, int nthreads=0); +bool OIIO_API maxchan (ImageBuf &dst, const ImageBuf& A, + ROI roi={}, int nthreads=0); + +ImageBuf OIIO_API minchan (const ImageBuf& src, ROI roi={}, int nthreads=0); +bool OIIO_API minchan (ImageBuf &dst, const ImageBuf& src, + ROI roi={}, int nthreads=0); +/// @} + + +/// Return pixel values that are a contrast-remap of the corresponding +/// values of the `src` image, transforming pixel value domain [black, +/// white] to range [min, max], either linearly or with optional application +/// of a smooth sigmoidal remapping (if `scontrast` != 1.0). +/// +/// The following steps are performed, in order: +/// +/// 1. Linearly rescale values [`black`, `white`] to [0, 1]. +/// 2. If `scontrast` != 1, apply a sigmoidal remapping where a larger +/// `scontrast` value makes a steeper slope, and the steepest part is at +/// value `sthresh` (relative to the new remapped value after steps 1 & +/// 2; the default is 0.5). +/// 3. Rescale the range of that result: 0.0 -> `min` and 1.0 -> `max`. +/// +/// Values outside of the [black,white] range will be extrapolated to +/// outside [min,max], so it may be prudent to apply a clamp() to the +/// results. +/// +/// The black, white, min, max, scontrast, sthresh parameters may each +/// either be a single float value for all channels, or a span giving +/// per-channel values. +/// +/// You can use this function for a simple linear contrast remapping of +/// [black, white] to [min, max] if you use the default values for sthresh. +/// Or just a simple sigmoidal contrast stretch within the [0,1] range if +/// you leave all other parameters at their defaults, or a combination of +/// these effects. Note that if `black` == `white`, the result will be a +/// simple binary thresholding where values < `black` map to `min` and +/// values >= `black` map to `max`. + +OIIO_API ImageBuf contrast_remap (const ImageBuf &src, + cspan black=0.0f, cspan white=1.0f, + cspan min=0.0f, cspan max=1.0f, + cspan scontrast=1.0f, cspan sthresh=0.5f, + ROI={}, int nthreads=0); +/// Write to an existing image `dst` (allocating if it is uninitialized). +OIIO_API bool contrast_remap (ImageBuf &dst, const ImageBuf &src, + cspan black=0.0f, cspan white=1.0f, + cspan min=0.0f, cspan max=1.0f, + cspan scontrast=1.0f, cspan sthresh=0.5f, + ROI={}, int nthreads=0); + + +/// @defgroup saturate (Adjust saturation of color channels) +/// @{ +/// +/// Increase or decrease color saturation of the image. +/// +/// The `saturate` operation returns (or copies into `dst`) the pixels of +/// `src` within the ROI, and in the process adjusts the color saturation of +/// the three consecutive channels starting with `firstchannel` based on the +/// `scale` parameter: 0.0 fully desaturates to a greyscale image of +/// perceptually equivalent luminance, 1.0 leaves the colors unchanged, +/// `scale` values inside this range interpolate between them, and `scale` > 1 +/// would increase apparent color saturation. +/// +/// Channels that are within the range of `roi.chbegin` to `roi.chend-1`, but +/// outside the range of `firstchannel` to `firstchannel+2` are simply copied +/// unaltered. Only three channels at a time can be desaturated, by default +/// the first three channels, though `firstchannel` may be used to specify a +/// different subset of channels. It is allowed for `src` and `dst` to be the +/// same image. +/// +/// @version 2.4+ + +ImageBuf OIIO_API saturate (const ImageBuf &src, float scale = 0.0f, + int firstchannel = 0, ROI roi={}, int nthreads=0); +bool OIIO_API saturate (ImageBuf &dst, const ImageBuf &src, float scale = 0.0f, + int firstchannel = 0, ROI roi={}, int nthreads=0); +/// @} + + + +/// @defgroup color_map (Remap value range by spline or name) +/// @{ +/// +/// Remap value range by spline or name +/// +/// Return (or copy into `dst`) pixel values determined by looking up a +/// color map using values of the source image, using either the channel +/// specified by `srcchannel`, or the luminance of `src`'s RGB if +/// `srcchannel` is -1. This happens for all pixels within the ROI (which +/// defaults to all of `src`), and if `dst` is not already initialized, it +/// will be initialized to the ROI and with color channels equal to +/// `channels`. +/// +/// In the variant that takes a `knots` parameter, this specifies the values +/// of a linearly-interpolated color map given by `knots[nknots*channels]`. +/// An input value of 0.0 is mapped to `knots[0..channels-1]` (one value for +/// each color channel), and an input value of 1.0 is mapped to +/// `knots[(nknots-1)*channels..knots.size()-1]`. +/// +/// In the variant that takes a `mapname` parameter, this is the name of a +/// color map. Recognized map names include: "inferno", "viridis", "magma", +/// "plasma", all of which are perceptually uniform, strictly increasing in +/// luminance, look good when converted to grayscale, and work for people +/// with all types of colorblindness. Also "turbo" has most of these +/// properties (except for being strictly increasing in luminance) and +/// is a nice rainbow-like pattern. Also supported are the following color +/// maps that do not have those desirable qualities (and are thus not +/// recommended, but are present for back-compatibility or for use by +/// clueless people): "blue-red", "spectrum", and "heat". In all cases, the +/// implied `channels` is 3. + +ImageBuf OIIO_API color_map (const ImageBuf &src, int srcchannel, + int nknots, int channels, cspan knots, + ROI roi={}, int nthreads=0); +ImageBuf OIIO_API color_map (const ImageBuf &src, int srcchannel, + string_view mapname, ROI roi={}, int nthreads=0); +bool OIIO_API color_map (ImageBuf &dst, const ImageBuf &src, int srcchannel, + int nknots, int channels, cspan knots, + ROI roi={}, int nthreads=0); +bool OIIO_API color_map (ImageBuf &dst, const ImageBuf &src, int srcchannel, + string_view mapname, ROI roi={}, int nthreads=0); +/// @} + + +/// @defgroup range (Nonlinear range remapping for contrast preservation) +/// @{ +/// +/// Nonlinear range remapping for contrast preservation +/// +/// `rangecompress()` returns (or copy into `dst`) all pixels and color +/// channels of `src` within region `roi` (defaulting to all the defined +/// pixels of `dst`), rescaling their range with a logarithmic +/// transformation. Alpha and z channels are not transformed. +/// +/// `rangeexpand()` performs the inverse transformation (logarithmic back +/// into linear). +/// +/// If `useluma` is true, the luma of channels [roi.chbegin..roi.chbegin+2] +/// (presumed to be R, G, and B) are used to compute a single scale factor +/// for all color channels, rather than scaling all channels individually +/// (which could result in a color shift). +/// +/// The purpose of these function is as follows: Some image operations (such +/// as resizing with a "good" filter that contains negative lobes) can have +/// objectionable artifacts when applied to images with very high-contrast +/// regions involving extra bright pixels (such as highlights in HDR +/// captured or rendered images). By compressing the range pixel values, +/// then performing the operation, then expanding the range of the result +/// again, the result can be much more pleasing (even if not exactly +/// correct). + +ImageBuf OIIO_API rangecompress (const ImageBuf &src, bool useluma = false, + ROI roi={}, int nthreads=0); +ImageBuf OIIO_API rangeexpand (const ImageBuf &src, bool useluma = false, + ROI roi={}, int nthreads=0); +bool OIIO_API rangecompress (ImageBuf &dst, const ImageBuf &src, + bool useluma = false, ROI roi={}, int nthreads=0); +bool OIIO_API rangeexpand (ImageBuf &dst, const ImageBuf &src, + bool useluma = false, ROI roi={}, int nthreads=0); +/// @} + + +struct OIIO_API PixelStats { + std::vector min; + std::vector max; + std::vector avg; + std::vector stddev; + std::vector nancount; + std::vector infcount; + std::vector finitecount; + std::vector sum, sum2; // for intermediate calculation + + PixelStats () {} + PixelStats (PixelStats&& other) = default; + PixelStats (int nchannels) { reset(nchannels); } + void reset (int nchannels); + void merge (const PixelStats &p); + const PixelStats& operator= (PixelStats&& other); // Move assignment +}; + + +/// Compute statistics about the ROI of the `src` image, returning a +/// PixelStats structure. Upon success, the returned vectors in the result +/// structure will have size == src.nchannels(). If there is a failure, the +/// vector sizes will be 0 and an error will be set in src. +PixelStats OIIO_API computePixelStats (const ImageBuf &src, + ROI roi={}, int nthreads=0); + +// Struct holding all the results computed by ImageBufAlgo::compare(). +// (maxx,maxy,maxz,maxc) gives the pixel coordinates (x,y,z) and color +// channel of the pixel that differed maximally between the two images. +// nwarn and nfail are the number of "warnings" and "failures", +// respectively. +struct CompareResults { + double meanerror, rms_error, PSNR, maxerror; + int maxx, maxy, maxz, maxc; + imagesize_t nwarn, nfail; + bool error; +}; + +/// Numerically compare two images. The difference threshold (for any +/// individual color channel in any pixel) for a "failure" is `failthresh`, +/// and for a "warning" is `warnthresh`. If nonzero, then `failrelative` and +/// `warnrelative` are alternate thresholds as a portion the mean of the +/// absolute values of the two images. It only warns or fails if both criteria +/// are met. More formally, a value comparison will fail if +/// +/// abs(A-B) > failthresh && abs(A-B)/((abs(A)+abs(B))/2) > failrelative +/// +/// and analogously for warning. +/// +/// The results are stored in `result`. If `roi` is defined, pixels will be +/// compared for the pixel and channel range that is specified. If `roi` is +/// not defined, the comparison will be for all channels, on the union of the +/// defined pixel windows of the two images (for either image, undefined +/// pixels will be assumed to be black). +CompareResults OIIO_API compare (const ImageBuf &A, const ImageBuf &B, + float failthresh, float warnthresh, + float failrelative, float warnrelative, + ROI roi={}, int nthreads=0); + +/// Numerically compare two images. The difference threshold (for any +/// individual color channel in any pixel) for a "failure" is +/// failthresh, and for a "warning" is warnthresh. The results are +/// stored in result. If roi is defined, pixels will be compared for +/// the pixel and channel range that is specified. If roi is not +/// defined, the comparison will be for all channels, on the union of +/// the defined pixel windows of the two images (for either image, +/// undefined pixels will be assumed to be black). +CompareResults OIIO_API compare (const ImageBuf &A, const ImageBuf &B, + float failthresh, float warnthresh, + ROI roi={}, int nthreads=0); + +/// Compare two images using Hector Yee's perceptual metric, returning +/// the number of pixels that fail the comparison. Only the first three +/// channels (or first three channels specified by `roi`) are compared. +/// Free parameters are the ambient luminance in the room and the field +/// of view of the image display; our defaults are probably reasonable +/// guesses for an office environment. The 'result' structure will +/// store the maxerror, and the maxx, maxy, maxz of the pixel that +/// failed most severely. (The other fields of the CompareResults +/// are not used for Yee comparison.) +/// +/// Works for all pixel types. But it's basically meaningless if the +/// first three channels aren't RGB in a linear color space that sort +/// of resembles AdobeRGB. +/// +/// Return true on success, false on error. +int OIIO_API compare_Yee (const ImageBuf &A, const ImageBuf &B, + CompareResults &result, + float luminance = 100, float fov = 45, + ROI roi={}, int nthreads=0); + + +/// Do all pixels within the ROI have the same values for channels +/// `[roi.chbegin..roi.chend-1]`, within a tolerance of +/- `threshold`? If +/// so, return `true` and store that color in `color[chbegin...chend-1]` (if +/// `color` is not empty); otherwise return `false`. If `roi` is not +/// defined (the default), it will be understood to be all of the defined +/// pixels and channels of source. +OIIO_API bool isConstantColor (const ImageBuf &src, float threshold=0.0f, + span color = {}, + ROI roi={}, int nthreads=0); + + +/// Does the requested channel have a given value (within a tolerance of +/- +/// `threshold`) for every channel within the ROI? (For this function, the +/// ROI's chbegin/chend are ignored.) Return `true` if so, otherwise return +/// `false`. If `roi` is not defined (the default), it will be understood +/// to be all of the defined pixels and channels of source. +OIIO_API bool isConstantChannel (const ImageBuf &src, int channel, + float val, float threshold=0.0f, + ROI roi={}, int nthreads=0); + + +/// Is the image monochrome within the ROI, i.e., for every pixel within the +/// region, do all channels [roi.chbegin, roi.chend) have the same value +/// (within a tolerance of +/- threshold)? If roi is not defined (the +/// default), it will be understood to be all of the defined pixels and +/// channels of source. +OIIO_API bool isMonochrome (const ImageBuf &src, float threshold=0.0f, + ROI roi={}, int nthreads=0); + + +/// Count how many pixels in the ROI match a list of colors. The colors to +/// match are in: +/// +/// colors[0 ... nchans-1] +/// colors[nchans ... 2*nchans-1] +/// ... +/// colors[(ncolors-1)*nchans ... (ncolors*nchans)-1] +/// +/// and so on, a total of `ncolors` consecutively stored colors of `nchans` +/// channels each (`nchans` is the number of channels in the image, itself, +/// it is not passed as a parameter). +/// +/// `eps[0..nchans-1]` are the error tolerances for a match, for each +/// channel. Setting `eps[c]` = `numeric_limits::max()` will +/// effectively make it ignore the channel. The default `eps` is 0.001 for +/// all channels (this value is chosen because it requires exact matches for +/// 8 bit images, but allows a wee bit of imprecision for float images. +/// +/// Upon success, return `true` and store the number of pixels that matched +/// each color `count[0..ncolors-1]`. If there is an error, returns `false` +/// and sets an appropriate error message set in `src`. +bool OIIO_API color_count (const ImageBuf &src, imagesize_t *count, + int ncolors, cspan color, + cspan eps = 0.001f, + ROI roi={}, int nthreads=0); + + +/// Count how many pixels in the image (within the ROI) are outside the +/// value range described by `low[roi.chbegin..roi.chend-1]` and +/// `high[roi.chbegin..roi.chend-1]` as the low and high acceptable values +/// for each color channel. +/// +/// The number of pixels containing values that fall below the lower bound +/// will be stored in `*lowcount`, the number of pixels containing +/// values that fall above the upper bound will be stored in +/// `*highcount`, and the number of pixels for which all channels fell +/// within the bounds will be stored in `*inrangecount`. Any of these +/// may be NULL, which simply means that the counts need not be collected or +/// stored. +bool OIIO_API color_range_check (const ImageBuf &src, + imagesize_t *lowcount, + imagesize_t *highcount, + imagesize_t *inrangecount, + cspan low, cspan high, + ROI roi={}, int nthreads=0); + +/// Find the minimal rectangular region within `roi` (which defaults to the +/// entire pixel data window of `src`) that consists of nonzero pixel +/// values. In other words, gives the region that is a "shrink-wraps" of +/// `src` to exclude black border pixels. Note that if the entire image was +/// black, the ROI returned will contain no pixels. +/// +/// For "deep" images, this function returns the smallest ROI that contains +/// all pixels that contain depth samples, and excludes the border pixels +/// that contain no depth samples at all. +OIIO_API ROI nonzero_region (const ImageBuf &src, ROI roi={}, int nthreads=0); + + +/// Compute the SHA-1 byte hash for all the pixels in the specified region of +/// the image. If `blocksize` > 0, the function will compute separate SHA-1 +/// hashes of each `blocksize` batch of scanlines, then return a hash of the +/// individual hashes. This is just as strong a hash, but will NOT match a +/// single hash of the entire image (`blocksize==0`). But by breaking up +/// the hash into independent blocks, we can parallelize across multiple +/// threads, given by `nthreads` (if `nthreads` is 0, it will use the global +/// OIIO thread count). The `extrainfo` provides additional text that will +/// be incorporated into the hash. +std::string OIIO_API computePixelHashSHA1 (const ImageBuf &src, + string_view extrainfo = "", + ROI roi={}, + int blocksize = 0, int nthreads=0); + + +/// Compute a histogram of `src`, for the given channel and ROI. Return a +/// vector of length `bins` that contains the counts of how many pixel +/// values were in each of `bins` equally spaced bins covering the range of +/// values `[min,max]`. Values < `min` count for bin 0, values > `max` count +/// for bin `nbins-1`. If `ignore_empty` is `true`, no counts will be +/// incremented for any pixels whose value is 0 in all channels. +/// +/// If there was an error, the returned vector will be empty, and an error +/// message will be retrievable from src.geterror(). +OIIO_API +std::vector histogram (const ImageBuf &src, int channel=0, + int bins=256, float min=0.0f, float max=1.0f, + bool ignore_empty=false, + ROI roi={}, int nthreads=0); + + +/// Make a 1-channel `float` image of the named kernel. The size of the +/// image will be big enough to contain the kernel given its size (`width` x +/// `height`) and rounded up to odd resolution so that the center of the +/// kernel can be at the center of the middle pixel. If width and height +/// are 0, the natural size of the named filter will be chosen. The kernel +/// image will be offset so that its center is at the (0,0) coordinate. If +/// `normalize` is true, the values will be normalized so that they sum to +/// 1.0. If `depth` > 1, a volumetric kernel will be created. Use with +/// caution! +/// +/// Kernel names can be: "gaussian", "sharp-gaussian", "box", +/// "triangle", "blackman-harris", "mitchell", "b-spline", "catmull-rom", +/// "lanczos3", "disk", "binomial", "laplacian". +/// +/// Note that "catmull-rom" and "lanczos3" are fixed-size kernels that +/// don't scale with the width, and are therefore probably less useful +/// in most cases. +/// +/// The ImageBuf that is returned indicates if there was an error, in which +/// case return.has_error() will be true and return.geterror() can be used +/// to retrieve an error message. +ImageBuf OIIO_API make_kernel (string_view name, float width, float height, + float depth = 1.0f, bool normalize = true); + + +/// Return the convolution of `src` and a `kernel`. If `roi` is not defined, +/// it defaults to the full size `src`. If `normalized` is true, the kernel will +/// be normalized for the convolution, otherwise the original values will +/// be used. +ImageBuf OIIO_API convolve (const ImageBuf &src, const ImageBuf &kernel, + bool normalize = true, ROI roi={}, int nthreads=0); +/// Write to an existing image `dst` (allocating if it is uninitialized). +/// If `roi` is not defined, it defaults to the full size of `dst` (or +/// `src`, if `dst` was uninitialized). If `dst` is uninitialized, it will +/// be allocated to be the size specified by `roi`. +bool OIIO_API convolve (ImageBuf &dst, const ImageBuf &src, const ImageBuf &kernel, + bool normalize = true, ROI roi={}, int nthreads=0); + + +/// Return the Laplacian of the corresponding region of `src`. The +/// Laplacian is the generalized second derivative of the image +/// \f[ +/// \frac{\partial^2 s}{\partial x^2} + \frac{\partial^2 s}{\partial y^2} +/// \f] +/// which is approximated by convolving the image with a discrete 3x3 +/// Laplacian kernel, +/// +/// [ 0 1 0 ] +/// [ 1 -4 1 ] +/// [ 0 1 0 ] +/// +ImageBuf OIIO_API laplacian (const ImageBuf &src, ROI roi={}, int nthreads=0); +/// Write to an existing image `dst` (allocating if it is uninitialized). +bool OIIO_API laplacian (ImageBuf &dst, const ImageBuf &src, + ROI roi={}, int nthreads=0); + + +/// @defgroup fft-ifft (Fast Fourier Transform and inverse) +/// @{ +/// +/// Fast Fourier Transform and inverse +/// +/// Return (or copy into `dst`) the discrete Fourier transform (DFT), or its +/// inverse, of the section of `src` denoted by roi, If roi is not defined, +/// it will be all of `src`'s pixels. +/// +/// `fft()` takes the discrete Fourier transform (DFT) of the section of +/// `src` denoted by `roi`, returning it or storing it in `dst`. If `roi` is +/// not defined, it will be all of `src`'s pixels. Only one channel of `src` +/// may be transformed at a time, so it will be the first channel described +/// by `roi` (or, again, channel 0 if `roi` is undefined). If not already +/// in the correct format, `dst` will be re-allocated to be a 2-channel +/// `float` buffer of size `roi.width()` x `roi.height`, with channel 0 +/// being the "real" part and channel 1 being the the "imaginary" part. The +/// values returned are actually the unitary DFT, meaning that it is scaled +/// by 1/sqrt(npixels). +/// +/// `ifft()` takes the inverse discrete Fourier transform, transforming a +/// 2-channel complex (real and imaginary) frequency domain image and into a +/// single-channel spatial domain image. `src` must be a 2-channel float +/// image, and is assumed to be a complex frequency-domain signal with the +/// "real" component in channel 0 and the "imaginary" component in channel 1. +/// `dst` will end up being a float image of one channel (the real component +/// is kept, the imaginary component of the spatial-domain will be +/// discarded). Just as with `fft()`, the `ifft()` function is dealing with +/// the unitary DFT, so it is scaled by 1/sqrt(npixels). +ImageBuf OIIO_API fft (const ImageBuf &src, ROI roi={}, int nthreads=0); +ImageBuf OIIO_API ifft (const ImageBuf &src, ROI roi={}, int nthreads=0); +bool OIIO_API fft (ImageBuf &dst, const ImageBuf &src, ROI roi={}, int nthreads=0); +bool OIIO_API ifft (ImageBuf &dst, const ImageBuf &src, ROI roi={}, int nthreads=0); +/// @} + + +/// @defgroup complex-polar (Converting complex to polar and back) +/// @{ +/// +/// Converting complex to polar and back +/// +/// The `polar_to_complex()` function transforms a 2-channel image whose +/// channels are interpreted as complex values (real and imaginary +/// components) into the equivalent values expressed in polar form of +/// amplitude and phase (with phase between 0 and \f$ 2\pi \f$. +/// +/// The `complex_to_polar()` function performs the reverse transformation, +/// converting from polar values (amplitude and phase) to complex (real and +/// imaginary). +/// +/// In either case, the section of `src` denoted by `roi` is transformed, +/// storing the result in `dst`. If `roi` is not defined, it will be all of +/// `src`'s pixels. Only the first two channels of `src` will be +/// transformed. +/// +/// The transformation between the two representations are: +/// +/// real = amplitude * cos(phase); +/// imag = amplitude * sin(phase); +/// +/// amplitude = hypot (real, imag); +/// phase = atan2 (imag, real); + +ImageBuf OIIO_API complex_to_polar (const ImageBuf &src, + ROI roi={}, int nthreads=0); +bool OIIO_API complex_to_polar (ImageBuf &dst, const ImageBuf &src, + ROI roi={}, int nthreads=0); +ImageBuf OIIO_API polar_to_complex (const ImageBuf &src, + ROI roi={}, int nthreads=0); +bool OIIO_API polar_to_complex (ImageBuf &dst, const ImageBuf &src, + ROI roi={}, int nthreads=0); +/// @} + + + +enum NonFiniteFixMode +{ + NONFINITE_NONE = 0, ///< Do not alter the pixels (but do count the + ///< number of nonfinite pixels in *pixelsFixed, + ///< if non-null). + NONFINITE_BLACK = 1, ///< Replace non-finite values with 0.0. + NONFINITE_BOX3 = 2, ///< Replace non-finite values with the average + ///< value of any finite pixels in a 3x3 window. + NONFINITE_ERROR = 100, ///< Return false (error), but don't change any + ///< values, if any nonfinite values are found. +}; + +/// `fixNonFinite()` returns an image containing the values of `src` (within +/// the ROI), while repairing any non-finite (NaN/Inf) pixels. If +/// `pixelsFixed` is not nullptr, store in it the number of pixels that +/// contained non-finite value. It is permissible to operate in-place (with +/// `src` and `dst` referring to the same image). +/// +/// How the non-finite values are repaired is specified by one of the `mode` +/// parameter, which is an enum of `NonFiniteFixMode`. +/// +/// This function works on all pixel data types, though it's just a copy for +/// images with pixel data types that cannot represent NaN or Inf values. +ImageBuf OIIO_API fixNonFinite (const ImageBuf &src, + NonFiniteFixMode mode=NONFINITE_BOX3, + int *pixelsFixed = nullptr, + ROI roi={}, int nthreads=0); + +/// Write to an existing image `dst` (allocating if it is uninitialized). +bool OIIO_API fixNonFinite (ImageBuf &dst, const ImageBuf &src, + NonFiniteFixMode mode=NONFINITE_BOX3, + int *pixelsFixed = nullptr, + ROI roi={}, int nthreads=0); + + +/// Copy the specified ROI of `src` and fill any holes (pixels where alpha < +/// 1) with plausible values using a push-pull technique. The `src` image +/// must have an alpha channel. The `dst` image will end up with a copy of +/// `src`, but will have an alpha of 1.0 everywhere within `roi`, and any +/// place where the alpha of `src` was < 1, `dst` will have a pixel color +/// that is a plausible "filling" of the original alpha hole. +ImageBuf OIIO_API fillholes_pushpull (const ImageBuf &src, + ROI roi={}, int nthreads=0); +/// Write to an existing image `dst` (allocating if it is uninitialized). +bool OIIO_API fillholes_pushpull (ImageBuf &dst, const ImageBuf &src, + ROI roi={}, int nthreads=0); + + +/// Return a median-filtered version of the corresponding region of `src`. +/// The median filter replaces each pixel with the median value underneath +/// the `width` x `height` window surrounding it. If `height` <= 0, it will +/// be set to `width`, making a square window. +/// +/// Median filters are good for removing high-frequency detail smaller than +/// the window size (including noise), without blurring edges that are +/// larger than the window size. +ImageBuf OIIO_API median_filter (const ImageBuf &src, + int width = 3, int height = -1, + ROI roi={}, int nthreads=0); +/// Write to an existing image `dst` (allocating if it is uninitialized). +bool OIIO_API median_filter (ImageBuf &dst, const ImageBuf &src, + int width = 3, int height = -1, + ROI roi={}, int nthreads=0); + + +/// Return a sharpened version of the corresponding region of `src` using +/// the "unsharp mask" technique. Unsharp masking basically works by first +/// blurring the image (low pass filter), subtracting this from the original +/// image, then adding the residual back to the original to emphasize the +/// edges. Roughly speaking, +/// +/// dst = src + contrast * thresh(src - blur(src)) +/// +/// The specific blur can be selected by kernel name and width (for example, +/// "gaussian" is typical). As a special case, "median" is also accepted as +/// the kernel name, in which case a median filter is performed rather than +/// a blurring convolution (Gaussian and other blurs sometimes over-sharpen +/// edges, whereas using the median filter will sharpen compact +/// high-frequency details while not over-sharpening long edges). +/// +/// The `contrast` is a multiplier on the overall sharpening effect. The +/// thresholding step causes all differences less than `threshold` to be +/// squashed to zero, which can be useful for suppressing sharpening of +/// low-contrast details (like noise) but allow sharpening of +/// higher-contrast edges. +ImageBuf OIIO_API unsharp_mask (const ImageBuf &src, + string_view kernel="gaussian", float width = 3.0f, + float contrast = 1.0f, float threshold = 0.0f, + ROI roi={}, int nthreads=0); +/// Write to an existing image `dst` (allocating if it is uninitialized). +bool OIIO_API unsharp_mask (ImageBuf &dst, const ImageBuf &src, + string_view kernel="gaussian", float width = 3.0f, + float contrast = 1.0f, float threshold = 0.0f, + ROI roi={}, int nthreads=0); + + +/// Return a dilated version of the corresponding region of `src`. Dilation +/// is defined as the maximum value of all pixels under nonzero values of +/// the structuring element (which is taken to be a width x height square). +/// If height is not set, it will default to be the same as width. Dilation +/// makes bright features wider and more prominent, dark features thinner, +/// and removes small isolated dark spots. +ImageBuf OIIO_API dilate (const ImageBuf &src, int width=3, int height=-1, + ROI roi={}, int nthreads=0); +/// Write to an existing image `dst` (allocating if it is uninitialized). +bool OIIO_API dilate (ImageBuf &dst, const ImageBuf &src, + int width=3, int height=-1, ROI roi={}, int nthreads=0); + + +/// Return an eroded version of the corresponding region of `src`. Erosion +/// is defined as the minimum value of all pixels under nonzero values of +/// the structuring element (which is taken to be a width x height square). +/// If height is not set, it will default to be the same as width. Erosion +/// makes dark features wider, bright features thinner, and removes small +/// isolated bright spots. +ImageBuf OIIO_API erode (const ImageBuf &src, int width=3, int height=-1, + ROI roi={}, int nthreads=0); +/// Write to an existing image `dst` (allocating if it is uninitialized). +bool OIIO_API erode (ImageBuf &dst, const ImageBuf &src, + int width=3, int height=-1, ROI roi={}, int nthreads=0); + + + +/// @defgroup colorconvert (Color space conversions) +/// @{ +/// +/// Convert between color spaces +/// +/// Return (or copy into `dst`) the pixels of `src` within the ROI, applying +/// a color space transformation. In-place operations (`dst` == `src`) are +/// supported. +/// +/// The first three channels are presumed to be the color to be +/// transformed, and the fourth channel (if it exists) is presumed to be +/// alpha. Any additional channels will be simply copied unaltered. +/// +/// The transformation may be between any two spaces supported by the active +/// OCIO configuration, or may be a "look" transformation created by +/// `ColorConfig::createLookTransform`. +/// +/// @param fromspace/tospace +/// For the varieties of `colorconvert()` that use named color +/// spaces, these specify the color spaces by name. +/// @param context_key/context_value +/// For the varieties of `colorconvert()` that use named color +/// spaces, these optionally specify a "key" name/value pair to +/// establish a context (for example, a shot-specific transform). +/// @param processor +/// For the varieties of `colorconvert()` that have a +/// `processor` parameter, it is a raw `ColorProcessor*` object +/// that implements the color transformation. This is a special +/// object created by a `ColorConfig` (see `OpenImageIO/color.h` +/// for details). +/// @param unpremult +/// If true, unpremultiply the image (divide the RGB channels by +/// alpha if it exists and is nonzero) before color conversion, +/// then repremult after the after the color conversion. Passing +/// unpremult=false skips this step, which may be desirable if +/// you know that the image is "unassociated alpha" (a.k.a., +/// "not pre-multiplied colors"). +/// @param colorconfig +/// An optional `ColorConfig*` specifying an OpenColorIO +/// configuration. If not supplied, the default OpenColorIO +/// color configuration found by examining the `$OCIO` +/// environment variable will be used instead. +/// + +/// Transform between named color spaces, returning an ImageBuf result. +ImageBuf OIIO_API colorconvert (const ImageBuf &src, + string_view fromspace, string_view tospace, bool unpremult=true, + string_view context_key="", string_view context_value="", + const ColorConfig* colorconfig = nullptr, + ROI roi={}, int nthreads=0); + +/// Transform using a ColorProcessor, returning an ImageBuf result. +ImageBuf OIIO_API colorconvert (const ImageBuf &src, + const ColorProcessor *processor, + bool unpremult, ROI roi={}, int nthreads=0); +/// Transform between named color spaces, storing reults into an existing ImageBuf. +bool OIIO_API colorconvert (ImageBuf &dst, const ImageBuf &src, + string_view fromspace, string_view tospace, bool unpremult=true, + string_view context_key="", string_view context_value="", + const ColorConfig* colorconfig = nullptr, + ROI roi={}, int nthreads=0); + +/// Transform using a ColorProcessor, storing reults into an existing ImageBuf. +bool OIIO_API colorconvert (ImageBuf &dst, const ImageBuf &src, + const ColorProcessor *processor, + bool unpremult, ROI roi={}, int nthreads=0); + +/// Apply a color transform in-place to just one color: +/// `color[0..nchannels-1]`. `nchannels` should either be 3 or 4 (if 4, the +/// last channel is alpha). +bool OIIO_API colorconvert (span color, + const ColorProcessor *processor, bool unpremult); + +/// @} + + +/// Return a copy of the pixels of `src` within the ROI, applying a color +/// transform specified by a 4x4 matrix. In-place operations +/// (`dst` == `src`) are supported. +/// +/// The first three channels are presumed to be the color to be +/// transformed, and the fourth channel (if it exists) is presumed to be +/// alpha. Any additional channels will be simply copied unaltered. +/// +/// @param M +/// A 4x4 matrix. Following Imath conventions, the color is a +/// row vector and the matrix has the "translation" part in +/// elements [12..14] (matching the memory layout of OpenGL or +/// RenderMan), so the math is `color * Matrix` (NOT `M*c`). +/// @param unpremult +/// If true, unpremultiply the image (divide the RGB channels by +/// alpha if it exists and is nonzero) before color conversion, +/// then repremult after the after the color conversion. Passing +/// unpremult=false skips this step, which may be desirable if +/// you know that the image is "unassociated alpha" (a.k.a., +/// "not pre-multiplied colors"). +/// +/// @version 2.1+ +/// +ImageBuf OIIO_API colormatrixtransform (const ImageBuf &src, + M44fParam M, bool unpremult=true, + ROI roi={}, int nthreads=0); +/// Write to an existing image `dst` (allocating if it is uninitialized). +bool OIIO_API colormatrixtransform (ImageBuf &dst, const ImageBuf &src, + M44fParam M, bool unpremult=true, + ROI roi={}, int nthreads=0); + + +/// Return a copy of the pixels of `src` within the ROI, applying an +/// OpenColorIO "look" transform to the pixel values. In-place operations +/// (`dst` == `src`) are supported. +/// +/// The first three channels are presumed to be the color to be +/// transformed, and the fourth channel (if it exists) is presumed to be +/// alpha. Any additional channels will be simply copied unaltered. +/// +/// @param looks +/// The looks to apply (comma-separated). +/// @param fromspace/tospace +/// For the varieties of `colorconvert()` that use named color +/// spaces, these specify the color spaces by name. If either +/// is the empty string, it will use `"scene_linear"`. +/// @param unpremult +/// If true, unpremultiply the image (divide the RGB channels by +/// alpha if it exists and is nonzero) before color conversion, +/// then repremult after the after the color conversion. Passing +/// unpremult=false skips this step, which may be desirable if +/// you know that the image is "unassociated alpha" (a.k.a., +/// "not pre-multiplied colors"). +/// @param inverse +/// If `true`, it will reverse the color transformation and look +/// application. +/// @param context_key/context_value +/// Optional key/value to establish a context (for example, a +/// shot-specific transform). +/// @param colorconfig +/// An optional `ColorConfig*` specifying an OpenColorIO +/// configuration. If not supplied, the default OpenColorIO +/// color configuration found by examining the `$OCIO` +/// environment variable will be used instead. +ImageBuf OIIO_API ociolook (const ImageBuf &src, string_view looks, + string_view fromspace, string_view tospace, + bool unpremult=true, bool inverse=false, + string_view context_key="", string_view context_value="", + const ColorConfig* colorconfig = nullptr, + ROI roi={}, int nthreads=0); +/// Write to an existing image `dst` (allocating if it is uninitialized). +bool OIIO_API ociolook (ImageBuf &dst, const ImageBuf &src, string_view looks, + string_view fromspace, string_view tospace, + bool unpremult=true, bool inverse=false, + string_view context_key="", string_view context_value="", + const ColorConfig* colorconfig = nullptr, + ROI roi={}, int nthreads=0); + + +/// Return the pixels of `src` within the ROI, applying an OpenColorIO +/// "display" transform to the pixel values. In-place operations +/// (`dst` == `src`) are supported. +/// +/// The first three channels are presumed to be the color to be +/// transformed, and the fourth channel (if it exists) is presumed to be +/// alpha. Any additional channels will be simply copied unaltered. +/// +/// @param display +/// The OCIO "display" to apply. If this is `"default"` or the +/// empty string `""`, the default display will be used. +/// @param view +/// The OCIO "view" to use. If this is `"default"` or the empty +/// string `""`, the default view for this display will be used. +/// @param fromspace +/// If `fromspace` is not supplied, it will assume that the +/// source color space is whatever is indicated by the source +/// image's metadata or filename, and if that cannot be deduced, +/// it will be assumed to be `"scene_linear"`. +/// @param looks +/// The looks to apply (comma-separated). This may be empty, +/// in which case no "look" is used. Note: this parameter value +/// is not used when building against OpenColorIO 2.x. +/// @param unpremult +/// If true, unpremultiply the image (divide the RGB channels by +/// alpha if it exists and is nonzero) before color conversion, +/// then repremult after the after the color conversion. Passing +/// unpremult=false skips this step, which may be desirable if +/// you know that the image is "unassociated alpha" (a.k.a., +/// "not pre-multiplied colors"). +/// @param inverse +/// If `true`, it will reverse the color transformation and +/// display application. +/// @param context_key/context_value +/// Optional key/value to establish a context (for example, a +/// shot-specific transform). +/// @param colorconfig +/// An optional `ColorConfig*` specifying an OpenColorIO +/// configuration. If not supplied, the default OpenColorIO +/// color configuration found by examining the `$OCIO` +/// environment variable will be used instead. +ImageBuf OIIO_API ociodisplay (const ImageBuf &src, + string_view display, string_view view, + string_view fromspace="", string_view looks="", + bool unpremult=true, bool inverse=false, + string_view context_key="", string_view context_value="", + const ColorConfig* colorconfig = nullptr, + ROI roi={}, int nthreads=0); +/// Write to an existing image `dst` (allocating if it is uninitialized). +bool OIIO_API ociodisplay (ImageBuf &dst, const ImageBuf &src, + string_view display, string_view view, + string_view fromspace="", string_view looks="", + bool unpremult=true, bool inverse=false, + string_view context_key="", string_view context_value="", + const ColorConfig* colorconfig = nullptr, + ROI roi={}, int nthreads=0); + + +/// Return the pixels of `src` within the ROI, applying an OpenColorIO +/// "file" transform. In-place operations (`dst` == `src`) are supported. +/// +/// The first three channels are presumed to be the color to be +/// transformed, and the fourth channel (if it exists) is presumed to be +/// alpha. Any additional channels will be simply copied unaltered. +/// +/// @param name +/// The name of the file containing the transform information. +/// @param unpremult +/// If true, unpremultiply the image (divide the RGB channels by +/// alpha if it exists and is nonzero) before color conversion, +/// then repremult after the after the color conversion. Passing +/// unpremult=false skips this step, which may be desirable if +/// you know that the image is "unassociated alpha" (a.k.a., +/// "not pre-multiplied colors"). +/// @param inverse +/// If `true`, it will reverse the color transformation. +/// @param colorconfig +/// An optional `ColorConfig*` specifying an OpenColorIO +/// configuration. If not supplied, the default OpenColorIO +/// color configuration found by examining the `$OCIO` +/// environment variable will be used instead. +ImageBuf OIIO_API ociofiletransform (const ImageBuf &src, + string_view name, + bool unpremult=true, bool inverse=false, + const ColorConfig* colorconfig = nullptr, + ROI roi={}, int nthreads=0); +/// Write to an existing image `dst` (allocating if it is uninitialized). +bool OIIO_API ociofiletransform (ImageBuf &dst, const ImageBuf &src, + string_view name, + bool unpremult=true, bool inverse=false, + const ColorConfig* colorconfig = nullptr, + ROI roi={}, int nthreads=0); + + +/// Return the pixels of `src` within the ROI, applying an OpenColorIO +/// "named" transform to the pixel values. In-place operations +/// (`dst` == `src`) are supported. +/// +/// The first three channels are presumed to be the color to be +/// transformed, and the fourth channel (if it exists) is presumed to be +/// alpha. Any additional channels will be simply copied unaltered. +/// +/// @param name +/// The name of the OCIO NamedTransform to apply. +/// @param unpremult +/// If true, unpremultiply the image (divide the RGB channels by +/// alpha if it exists and is nonzero) before color conversion, +/// then repremult after the after the color conversion. Passing +/// unpremult=false skips this step, which may be desirable if +/// you know that the image is "unassociated alpha" (a.k.a., +/// "not pre-multiplied colors"). +/// @param inverse +/// If `true`, it will apply the NamedTransform in the inverse +/// direction. +/// @param context_key/context_value +/// Optional key/value to establish a context (for example, a +/// shot-specific transform). +/// @param colorconfig +/// An optional `ColorConfig*` specifying an OpenColorIO +/// configuration. If not supplied, the default OpenColorIO +/// color configuration found by examining the `$OCIO` +/// environment variable will be used instead. +ImageBuf OIIO_API ocionamedtransform (const ImageBuf &src, string_view name, + bool unpremult=true, bool inverse=false, + string_view context_key="", + string_view context_value="", + const ColorConfig* colorconfig = nullptr, + ROI roi={}, int nthreads=0); +/// Write to an existing image `dst` (allocating if it is uninitialized). +bool OIIO_API ocionamedtransform (ImageBuf &dst, const ImageBuf &src, + string_view name, bool unpremult=true, + bool inverse=false, + string_view context_key="", + string_view context_value="", + const ColorConfig* colorconfig = nullptr, + ROI roi={}, int nthreads=0); + + +/// @defgroup premult (Premultiply or un-premultiply color by alpha) +/// @{ +/// +/// Premultiply or un-premultiply color by alpha +/// +/// The `unpremult` operation returns (or copies into `dst`) the pixels of +/// `src` within the ROI, and in the process divides all color channels +/// (those not alpha or z) by the alpha value, to "un-premultiply" them. +/// This presumes that the image starts of as "associated alpha" a.k.a. +/// "premultiplied," and you are converting to "unassociated alpha." For +/// pixels with alpha == 0, the color values are not modified. +/// +/// The `premult` operation returns (or copies into `dst`) the pixels of +/// `src` within the ROI, and in the process multiplies all color channels +/// (those not alpha or z) by the alpha value, to "premultiply" them. This +/// presumes that the image starts of as "unassociated alpha" a.k.a. +/// "non-premultiplied" and converts it to "associated alpha / premultiplied." +/// +/// The `repremult` operation is like `premult`, but preserves the color +/// values of pixels whose alpha is 0. This is intended for cases where you +/// unpremult, do an operation (such as color transforms), then want to +/// return to associated/premultiplied alpha -- in that case, you want to +/// make sure that "glow" pixels (those with alpha=0 but RGB > 0) are +/// preserved for the round trip, and not crushed to black. This use case is +/// distinct from a simple `premult` that is a one-time conversion from +/// unassociated to associated alpha. +/// +/// All three operations are simply a copy if there is no identified alpha +/// channel (and a no-op if `dst` and `src` are the same image). + +ImageBuf OIIO_API unpremult (const ImageBuf &src, ROI roi={}, int nthreads=0); +bool OIIO_API unpremult (ImageBuf &dst, const ImageBuf &src, + ROI roi={}, int nthreads=0); +ImageBuf OIIO_API premult (const ImageBuf &src, ROI roi={}, int nthreads=0); +bool OIIO_API premult (ImageBuf &dst, const ImageBuf &src, + ROI roi={}, int nthreads=0); +ImageBuf OIIO_API repremult (const ImageBuf &src, ROI roi={}, int nthreads=0); +bool OIIO_API repremult (ImageBuf &dst, const ImageBuf &src, + ROI roi={}, int nthreads=0); +/// @} + +/// Performs demosaicing of a raw digital camera image. Expects the `src` to be a single channel image. +/// Returns a three channel RGB image with the color channels reconstructed using the selected algorithm. +/// +/// @param options +/// Optional ParamValue's that may control the reconstruction. +/// +/// The `options` list contains optional ParamValue's that may control the reconstruction. +/// The following options are recognized: +/// +/// - "pattern" : string (default: "auto") +/// +/// The type of image sensor color filter array. Currently suported patterns: +/// - `bayer` - Bayer-pattern image. +/// - `xtrans` - X-Trans-pattern image. +/// - `auto` - the pattern is deducted from the "raw:FilterPattern" attribute of the source image buffer. +/// +/// - "algorithm" : string (default: "auto") +/// +/// The demosaicing algorithm, pattern-specific. +/// The following algorithms are supported for Bayer-pattern images: +/// - `linear` - simple bilinear demosaicing. Fast, but can produce artefacts along sharp edges. +/// - `MHC` - Malvar-He-Cutler linear demosaicing algorithm. Slower than `linear`, but produces +/// significantly better results. +/// - `auto` - same as "MHC" +/// +/// The following algorithms are supported for X-Trans-pattern images: +/// - `linear` - simple linear demosaicing. Fast, but can produce artefacts along sharp edges. +/// - `auto` - same as "linear" +/// +/// - "layout" : string (default: "auto") +/// +/// The order the color filter array elements are arranged in, pattern-specific. The Bayer pattern sensors +/// usually have 4 values in the layout string, describing the 2x2 pixels region. The X-Trans pattern +/// sensors have 36 values in the layout string, describing the 6x6 pixels region (with optional +/// whitespaces separating the rows). When set to "auto", OIIO will try to fetch the layout from the +/// "raw:FilterPattern" attribute of the source image buffer, falling back to "RGGB" for Bayer, +/// "GRBGBR BGGRGG RGGBGG GBRGRB RGGBGG BGGRGG" for X-Trans if absent. +/// +/// - "white_balance_mode" : string (default: "auto") +/// +/// White-balancing mode. The following modes are supported: +/// - `auto` - OIIO will try to fetch the white balancing weights from the "raw:WhiteBalance" +/// attribute of the source image buffer, falling back to {1.0, 1.0, 1.0, 1.0} if absent. +/// - `manual` - The white balancing weights will be taken from the attribute `white_balance` (see below) +/// if present, falling back to {1.0, 1.0, 1.0, 1.0} if absent. +/// - `none` - no white balancing will be performed. +/// +/// - "white_balance" : float[3] or float[4] +/// +/// Optional white-balancing weights. Can contain either three (R,G,B), or four (R,G1,B,G2) values. +/// The order of the white balance multipliers does not depend on the matrix layout. + +ImageBuf OIIO_API demosaic (const ImageBuf& src, KWArgs options = {}, + ROI roi = {}, int nthreads = 0); + +/// Write to an existing image `dst` (allocating if it is uninitialized). +bool OIIO_API demosaic (ImageBuf& dst, const ImageBuf& src, KWArgs options = {}, + ROI roi = {}, int nthreads = 0); + +enum MakeTextureMode { + MakeTxTexture, MakeTxShadow, MakeTxEnvLatl, + MakeTxEnvLatlFromLightProbe, + MakeTxBumpWithSlopes, + _MakeTxLast +}; + +/// @defgroup make_texture (make_texture -- Turn an image into a texture) +/// @{ +/// +/// The `make_texture()` function turns an image into a tiled, MIP-mapped, +/// texture file and write it to disk (outputfilename). +/// +/// The return value is `true` for success, `false` if an error occurred. If +/// there was an error, any error message will be retrievable via the global +/// `OIIO::geterror()` call (since there is no destination `ImageBuf` in +/// which to store it). +/// +/// Named fields in config: +/// +/// - format : Data format of the texture file (default: UNKNOWN = same +/// format as the input) +/// - tile_width/tile_height/tile_depth : +/// Preferred tile size (default: 64x64x1) +/// +/// Metadata in `config.extra_attribs` +/// +/// - `compression` (string) : Default: "zip" +/// - `fovcot` (float) : Default: aspect ratio of the image +/// resolution. +/// - `planarconfig` (string) : Default: "separate" +/// - `worldtocamera` (matrix) : World-to-camera matrix of the view. +/// - `worldtoscreen` (matrix) : World-to-screen space matrix of the view. +/// - `worldtoNDC` (matrix) : World-to-NDC space matrix of the view. +/// - `wrapmodes` (string) : Default: "black,black" +/// - `handed` (string) : "left" or "right" reveals the handedness of +/// the coordinates for normal maps. ("") +/// - `maketx:verbose` (int) : How much detail should go to outstream (0). +/// - `maketx:runstats` (int) : If nonzero, print run stats to outstream (0). +/// - `maketx:resize` (int) : If nonzero, resize to power of 2. (0) +/// - `maketx:keepaspect` (int): If nonzero, save aspect ratio to metadata. (0) +/// - `maketx:nomipmap` (int) : If nonzero, only output the top MIP level (0). +/// - `maketx:updatemode` (int) : If nonzero, write new output only if the +/// output file doesn't already exist, or is +/// older than the input file, or was created +/// with different command-line arguments. (0) +/// - `maketx:constant_color_detect` (int) : +/// If nonzero, detect images that are entirely +/// one color, and change them to be low +/// resolution (default: 0). +/// - `maketx:monochrome_detect` (int) : +/// If nonzero, change RGB images which have +/// R==G==B everywhere to single-channel +/// grayscale (default: 0). +/// - `maketx:opaque_detect` (int) : +/// If nonzero, drop the alpha channel if alpha +/// is 1.0 in all pixels (default: 0). +/// - `maketx:compute_average` (int) : +/// If nonzero, compute and store the average +/// color of the texture (default: 1). +/// - `maketx:unpremult` (int) : If nonzero, unpremultiply color by alpha +/// before color conversion, then multiply by +/// alpha after color conversion (default: 0). +/// - `maketx:incolorspace`, `maketx:outcolorspace` (string) : +/// These two together will apply a color conversion +/// (with OpenColorIO, if compiled). Default: "" +/// - `maketx:colorconfig` (string) : +/// Specifies a custom OpenColorIO color config +/// file. Default: "" +/// - `maketx:checknan` (int) : If nonzero, will consider it an error if the +/// input image has any NaN pixels. (0) +/// - `maketx:fixnan` (string) : If set to "black" or "box3", will attempt +/// to repair any NaN pixels found in the +/// input image (default: "none"). +/// - `maketx:set_full_to_pixels` (int) : +/// If nonzero, doctors the full/display window +/// of the texture to be identical to the +/// pixel/data window and reset the origin +/// to 0,0 (default: 0). +/// - `maketx:filtername` (string) : +/// If set, will specify the name of a high-quality +/// filter to use when resampling for MIPmap +/// levels. Default: "", use bilinear resampling. +/// - `maketx:highlightcomp` (int) : +/// If nonzero, performs highlight compensation -- +/// range compression and expansion around +/// the resize, plus clamping negative pixel +/// values to zero. This reduces ringing when +/// using filters with negative lobes on HDR +/// images. +/// - `maketx:sharpen` (float) : If nonzero, sharpens details when creating +/// MIPmap levels. The amount is the contrast +/// metric. The default is 0, meaning no +/// sharpening. +/// - `maketx:nchannels` (int) : If nonzero, will specify how many channels +/// the output texture should have, padding with +/// 0 values or dropping channels, if it doesn't +/// the number of channels in the input. +/// (default: 0, meaning keep all input channels) +/// - `maketx:channelnames` (string) : +/// If set, overrides the channel names of the +/// output image (comma-separated). +/// - `maketx:fileformatname` (string) : +/// If set, will specify the output file format. +/// (default: "", meaning infer the format from +/// the output filename) +/// - `maketx:oiio_options` (int) : +/// (Deprecated; all are handled by default) +/// - `maketx:prman_options` (int) : +/// If nonzero, override a whole bunch of settings +/// as needed to make textures that are +/// compatible with PRMan. This also enables +/// prman_metadata. (0) +/// - `maketx:prman_metadata` (int) : +/// If set, output some metadata that PRMan will +/// need for its textures. (0) +/// - `maketx:mipimages` (string) : +/// Semicolon-separated list of alternate images +/// to be used for individual MIPmap levels, +/// rather than simply downsizing. (default: "") +/// - `maketx:mipmap_metadata` (int) : +/// If nonzero, will propagate metadata to every MIP +/// level. The default (0) only writes metadata to +/// the highest-resolution level. (0) +/// - `maketx:full_command_line` (string) : +/// The command or program used to generate this +/// call, will be embedded in the metadata. +/// (default: "") +/// - `maketx:ignore_unassoc` (int) : +/// If nonzero, will disbelieve any evidence that +/// the input image is unassociated alpha. (0) +/// - `maketx:read_local_MB` (int) : +/// If nonzero, will read the full input file +/// locally if it is smaller than this +/// threshold. Zero causes the system to make a +/// good guess at a reasonable threshold (e.g. 1 +/// GB). (0) +/// - `maketx:forcefloat` (int) : +/// Forces a conversion through float data for +/// the sake of ImageBuf math. (1) +/// - `maketx:hash` (int) : +/// Compute the sha1 hash of the file in parallel. (1) +/// - `maketx:allow_pixel_shift` (int) : +/// Allow up to a half pixel shift per mipmap level. +/// The fastest path may result in a slight shift +/// in the image, accumulated for each mip level +/// with an odd resolution. (0) +/// - `maketx:bumpformat` (string) : +/// For the MakeTxBumpWithSlopes mode, chooses +/// whether to assume the map is a height map +/// ("height"), a normal map ("normal"), or +/// automatically determine it from the number +/// of channels ("auto", the default). +/// - `maketx:uvslopes_scale` (float) : +/// If nonzero, when used in MakeTxBumpWithSlopes +/// mode, this computes derivatives for the +/// bumpslopes data in UV space rather than in +/// texel space, and divides them by this scale +/// factor. The default is 0, disabling the +/// feature. If you use this feature, a suggested +/// value is 256. +/// - `maketx:slopefilter` (string) : +/// When used in MakeTxBumpWithSlopes mode, this +/// sets the filter for computing the slopes when +/// `--bumpformat` is set to "height". The default +/// value is "sobel". The option "centraldiff" +/// matches the behavior of `txmake` and is less +/// prone to ring-shaped artifacting. (sobel) +/// - `maketx:bumpinverts` (int) : +/// When used in MakeTxBumpWithSlopes mode, a +/// non-zero value inverts the computed slopes on the +/// s/u/x direction. (0) +/// - `maketx:bumpinvertt` (int) : +/// When used in MakeTxBumpWithSlopes mode, a +/// non-zero value inverts the computed slopes on the +/// t/v/y direction. (0) +/// - `maketx:bumpscale` (float) : +/// When used in MakeTxBumpWithSlopes mode, this +/// scales the strength of the resulting bumpslopes +/// map. (1.0) +/// - `maketx:bumprange` (string) : +/// When used in MakeTxBumpWithSlopes mode, this +/// sets the convention used for normal map data when +/// `--bumpformat` is set to "normal". When set to +/// "centered", the normals data is assumed to exist +/// on the range [-1,1]. When set to "positive", the +/// normals data is assumed to exist on the range +/// [0,1]. When set to "auto", the default value, the +/// range is inferred based on whether or not +/// negative values are present in the input image. +/// (auto) +/// - `maketx:cdf` (int) : +/// If nonzero, will write a Gaussian CDF and +/// Inverse Gaussian CDF as per-channel metadata +/// in the texture, which can be used by shaders +/// to implement Histogram-Preserving Blending. +/// This is only useful when the texture being +/// created is written to an image format that +/// supports arbitrary metadata (e.g. OpenEXR). +/// (See Burley, "On Histogram-Preserving Blending +/// for Randomized Texture Tiling," JCGT 8(4), 2019, +/// and Heitz/Neyret, "High-Performance By-Example +/// Noise using a Histogram-Preserving Blending +/// Operator," ACM SIGGRAPH / Eurographics Symposium +/// on High-Performance Graphics 2018.) (default: 0) +/// - `maketx:cdfsigma` (float) : +/// When `maketx:cdf` is active, determines the +/// CDF sigma (default: 1.0/6). +/// - `maketx:cdfbits` (int) : +/// When `maketx:cdf` is active, determines the +/// number of bits to use for the size of the CDF +/// table. (default: 8, meaning 256 bins) +/// +/// @param mode +/// Describes what type of texture file we are creating and may +/// be one of: +/// - `MakeTxTexture` : Ordinary 2D texture. +/// - `MakeTxEnvLatl` : Latitude-longitude environment map +/// - `MakeTxEnvLatlFromLightProbe` : Latitude-longitude environment map +/// constructed from a "light probe" +/// image. +/// - `MakeTxBumpWithSlopes` : Bump/displacement map with extra slope +/// data channels (6 channels total, +/// containing both the height and 1st and +/// 2nd moments of slope distributions) for +/// bump-to-roughness conversion in shaders. +/// @param outputfilename +/// Name of the file in which to save the resulting texture. +/// @param config An ImageSpec that contains all the information and +/// special instructions for making the texture. Anything set in config +/// (format, tile size, or named metadata) will take precedence over +/// whatever is specified by the input file itself. Additionally, named +/// metadata that starts with "maketx:" will not be output to the file +/// itself, but may contain instructions controlling how the texture is +/// created. The full list of supported configuration options is listed +/// below. +/// @param outstream +/// If not `nullptr`, it should point to a stream (for example, +/// `&std::out`, or a pointer to a local `std::stringstream` to capture +/// output), which is where console output and errors will be +/// deposited. Note that error messages will also be retrievable from +/// OIIO::geterror(). +/// +/// + +/// Version of make_texture that starts with an ImageBuf. +bool OIIO_API make_texture (MakeTextureMode mode, + const ImageBuf &input, + string_view outputfilename, + const ImageSpec &config, + std::ostream *outstream = nullptr); + +/// Version of make_texture that starts with a filename and reads the input +/// from that file, rather than being given an ImageBuf directly. +bool OIIO_API make_texture (MakeTextureMode mode, + string_view filename, + string_view outputfilename, + const ImageSpec &config, + std::ostream *outstream = nullptr); + +/// Version of make_texture that takes multiple filenames (reserved for +/// future expansion, such as assembling several faces into a cube map). +bool OIIO_API make_texture (MakeTextureMode mode, + const std::vector &filenames, + string_view outputfilename, + const ImageSpec &config, + std::ostream *outstream = nullptr); +/// @} + + +/// Return the "deep" equivalent of the "flat" input `src`. Turning a flat +/// image into a deep one means: +/// +/// * If the `src` image has a "Z" channel: if the source pixel's Z channel +/// value is not infinite, the corresponding pixel of `dst` will get a +/// single depth sample that copies the data from the source pixel; +/// otherwise, dst will get an empty pixel. In other words, infinitely far +/// pixels will not turn into deep samples. +/// +/// * If the `src` image lacks a "Z" channel: if any of the source pixel's +/// channel values are nonzero, the corresponding pixel of `dst` will get +/// a single depth sample that copies the data from the source pixel and +/// uses the zvalue parameter for the depth; otherwise, if all source +/// channels in that pixel are zero, the destination pixel will get no +/// depth samples. +/// +/// If `src` is already a deep image, it will just copy pixel values from +/// `src`. +ImageBuf OIIO_API deepen (const ImageBuf &src, float zvalue = 1.0f, + ROI roi={}, int nthreads=0); +/// Write to an existing image `dst` (allocating if it is uninitialized). +bool OIIO_API deepen (ImageBuf &dst, const ImageBuf &src, float zvalue = 1.0f, + ROI roi={}, int nthreads=0); + + +/// Return the "flattened" composite of deep image `src`. That is, it +/// converts a deep image to a simple flat image by front-to- back +/// compositing the samples within each pixel. If `src` is already a +/// non-deep/flat image, it will just copy pixel values from `src` to `dst`. +/// If `dst` is not already an initialized ImageBuf, it will be sized to +/// match `src` (but made non-deep). +ImageBuf OIIO_API flatten (const ImageBuf &src, ROI roi={}, int nthreads=0); +/// Write to an existing image `dst` (allocating if it is uninitialized). +bool OIIO_API flatten (ImageBuf &dst, const ImageBuf &src, + ROI roi={}, int nthreads=0); + + +/// Return the deep merge of the samples of deep images `A` and `B`, +/// overwriting any existing samples of `dst` in the ROI. If +/// `occlusion_cull` is true, any samples occluded by an opaque sample will +/// be deleted. +ImageBuf OIIO_API deep_merge (const ImageBuf &A, const ImageBuf &B, + bool occlusion_cull = true, + ROI roi={}, int nthreads=0); +/// Write to an existing image `dst` (allocating if it is uninitialized). +bool OIIO_API deep_merge (ImageBuf &dst, const ImageBuf &A, + const ImageBuf &B, bool occlusion_cull = true, + ROI roi={}, int nthreads=0); + + +/// Return the samples of deep image `src` that are closer than the opaque +/// frontier of deep image holdout, returning true upon success and false +/// for any failures. Samples of `src` that are farther than the first +/// opaque sample of holdout (for the corresponding pixel) will not be copied +/// to `dst`. Image holdout is only used as the depth threshold; no sample +/// values from holdout are themselves copied to `dst`. +ImageBuf OIIO_API deep_holdout (const ImageBuf &src, const ImageBuf &holdout, + ROI roi={}, int nthreads=0); +/// Write to an existing image `dst` (allocating if it is uninitialized). +bool OIIO_API deep_holdout (ImageBuf &dst, const ImageBuf &src, + const ImageBuf &holdout, + ROI roi={}, int nthreads=0); + + + + +/////////////////////////////////////////////////////////////////////// +// DEPRECATED functions follow: + +#ifndef DOXYGEN_SHOULD_SKIP_THIS + +OIIO_DEPRECATED("prefer the kind that takes an `inverse` parameter (2.5)") +inline ImageBuf ociodisplay (const ImageBuf &src, + string_view display, string_view view, + string_view fromspace, string_view looks, + bool unpremult, + string_view context_key, string_view context_value="", + const ColorConfig* colorconfig = nullptr, + ROI roi={}, int nthreads=0) +{ + return ociodisplay(src, display, view, fromspace, looks, unpremult, false, + context_key, context_value, colorconfig, roi, nthreads); +} +OIIO_DEPRECATED("prefer the kind that takes an `inverse` parameter (2.5)") +inline bool ociodisplay (ImageBuf &dst, const ImageBuf &src, + string_view display, string_view view, + string_view fromspace, string_view looks, + bool unpremult, + string_view context_key, string_view context_value="", + const ColorConfig* colorconfig = nullptr, + ROI roi={}, int nthreads=0) +{ + return ociodisplay(dst, src, display, view, fromspace, looks, unpremult, false, + context_key, context_value, colorconfig, roi, nthreads); +} + +// DEPRECATED(2.6) versions of functions that previously directly took a +// filter name and width, or a raw pointer to a Filter2D, and sometimes a +// separate wrap mode. These have been replaced by the versions that use a +// KWArgs for options including all the filtering parameters. +ImageBuf OIIO_API warp (const ImageBuf &src, M33fParam M, + string_view filtername, float filterwidth = 0.0f, + bool recompute_roi = false, + ImageBuf::WrapMode wrap = ImageBuf::WrapDefault, + ROI roi={}, int nthreads=0); +ImageBuf OIIO_API warp (const ImageBuf &src, M33fParam M, + const Filter2D *filter, bool recompute_roi = false, + ImageBuf::WrapMode wrap = ImageBuf::WrapDefault, + ROI roi = {}, int nthreads=0); +bool OIIO_API warp (ImageBuf &dst, const ImageBuf &src, M33fParam M, + string_view filtername, float filterwidth = 0.0f, + bool recompute_roi = false, + ImageBuf::WrapMode wrap = ImageBuf::WrapDefault, + ROI roi={}, int nthreads=0); +bool OIIO_API warp (ImageBuf &dst, const ImageBuf &src, M33fParam M, + const Filter2D *filter, bool recompute_roi = false, + ImageBuf::WrapMode wrap = ImageBuf::WrapDefault, + ROI roi = {}, int nthreads=0); +OIIO_DEPRECATED("prefer the kind that takes keyword args (3.0)") +inline ImageBuf resize(const ImageBuf &src, + string_view filtername, float filterwidth=0.0f, + ROI roi={}, int nthreads=0) { + return resize(src,{ { "filtername", filtername }, + { "filterwidth", filterwidth } }, + roi, nthreads); +} +OIIO_DEPRECATED("prefer the kind that takes keyword args (3.0)") +inline ImageBuf resize(const ImageBuf &src, Filter2D *filter, + ROI roi={}, int nthreads=0) { + return resize(src, { make_pv("filterptr", filter) }, roi, nthreads); +} +OIIO_DEPRECATED("prefer the kind that takes keyword args (3.0)") +inline bool resize (ImageBuf &dst, const ImageBuf &src, + string_view filtername, float filterwidth, + ROI roi={}, int nthreads=0) { + return resize(dst, src, { { "filtername", filtername }, + { "filterwidth", filterwidth } }, + roi, nthreads); +} +OIIO_DEPRECATED("prefer the kind that takes keyword args (3.0)") +inline bool resize(ImageBuf &dst, const ImageBuf &src, Filter2D *filter, + ROI roi={}, int nthreads=0) { + return resize(dst, src, { make_pv("filterptr", filter) }, roi, nthreads); +} + +OIIO_DEPRECATED("prefer the kind that takes keyword args (3.0)") +inline ImageBuf fit(const ImageBuf &src, + string_view filtername = "", float filterwidth=0.0f, + string_view fillmode="letterbox", bool exact=false, + ROI roi={}, int nthreads=0) { + return fit(src, + { { "filtername", filtername }, { "filterwidth", filterwidth }, + { "fillmode", fillmode }, { "exact", int(exact) } }, + roi, nthreads); +} +OIIO_DEPRECATED("prefer the kind that takes keyword args (3.0)") +inline ImageBuf fit(const ImageBuf &src, Filter2D *filter, + string_view fillmode="letterbox", bool exact=false, + ROI roi={}, int nthreads=0) { + return fit(src, { make_pv("filterptr", filter), { "fillmode", fillmode }, + { "exact", int(exact) } }, + roi, nthreads); +} +OIIO_DEPRECATED("prefer the kind that takes keyword args (3.0)") +inline bool fit(ImageBuf &dst, const ImageBuf &src, + string_view filtername = "", float filterwidth=0.0f, + string_view fillmode="letterbox", bool exact=false, + ROI roi={}, int nthreads=0) { + return fit(dst, src, + { { "filtername", filtername }, { "filterwidth", filterwidth }, + { "fillmode", fillmode }, { "exact", int(exact) } }, + roi, nthreads); +} +OIIO_DEPRECATED("prefer the kind that takes keyword args (3.0)") +inline bool fit(ImageBuf &dst, const ImageBuf &src, Filter2D *filter, + string_view fillmode="letterbox", bool exact=false, + ROI roi={}, int nthreads=0) { + return fit(dst, src, { make_pv("filterptr", filter), + { "fillmode", fillmode }, { "exact", int(exact) } }, + roi, nthreads); +} + +// DEPRECATED(2.3): old versions lacking the "fillmode" parameter +OIIO_DEPRECATED("prefer the kind that takes keyword args (3.0)") +inline ImageBuf fit(const ImageBuf &src, + string_view filtername, float filterwidth, + bool exact, ROI roi={}, int nthreads=0) +{ + return fit(src, + { { "filtername", filtername }, { "filterwidth", filterwidth }, + { "fillmode", "letterbox" }, { "exact", int(exact) } }, + roi, nthreads); +} +OIIO_DEPRECATED("prefer the kind that takes keyword args (3.0)") +inline ImageBuf fit(const ImageBuf &src, Filter2D *filter, + bool exact, ROI roi={}, int nthreads=0) { + return fit(src, { make_pv("filterptr", filter), + { "fillmode", "letterbox" }, { "exact", int(exact) } }, + roi, nthreads); +} +OIIO_DEPRECATED("prefer the kind that takes keyword args (3.0)") +inline bool fit(ImageBuf &dst, const ImageBuf &src, + string_view filtername, float filterwidth, + bool exact, ROI roi={}, int nthreads=0) { + return fit(dst, src, + { { "filtername", filtername }, { "filterwidth", filterwidth }, + { "fillmode", "letterbox" }, { "exact", int(exact) } }, + roi, nthreads); +} +OIIO_DEPRECATED("prefer the kind that takes keyword args (3.0)") +inline bool fit(ImageBuf &dst, const ImageBuf &src, Filter2D *filter, + bool exact, ROI roi={}, int nthreads=0) { + return fit(dst, src, + { make_pv("filterptr", filter), { "fillmode", "letterbox" }, + { "exact", int(exact) } }, + roi, nthreads); +} + +#endif // DOXYGEN_SHOULD_SKIP_THIS + +/////////////////////////////////////////////////////////////////////// + +} // end namespace ImageBufAlgo + +OIIO_NAMESPACE_END diff --git a/third_party/tlRender-install-Release/include/OpenImageIO/imagebufalgo_opencv.h b/third_party/tlRender-install-Release/include/OpenImageIO/imagebufalgo_opencv.h new file mode 100644 index 00000000..7ce03736 --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenImageIO/imagebufalgo_opencv.h @@ -0,0 +1,297 @@ +// Copyright Contributors to the OpenImageIO project. +// SPDX-License-Identifier: Apache-2.0 +// https://github.com/AcademySoftwareFoundation/OpenImageIO + +/// @file +/// +/// This file contains ImageBufAlgo functions that involve interoperability +/// with OpenCV. Please read these guidelines carefully: +/// +/// * Only `#include ` AFTER including +/// the necessary OpenCV headers. These functions use the cv::Mat type +/// from OpenCV. +/// * These functions are inline, in order to make it unnecessary for +/// libOpenImageIO itself to link against OpenCV. +/// * However, since the implementation of the functions in this header make +/// calls to OpenCV, it is necessary for any application calling these +/// functions, the application is responsible for finding OpenCV and +/// linking against the OpenCV libraries. +/// + + +#pragma once +#define OPENIMAGEIO_IMAGEBUFALGO_OPENCV_H + +#include +#include +#include +#include +#include + +#if !__has_include() +# error "This header requires OpenCV" +#endif + +#include +#ifdef CV_VERSION_EPOCH +# define OIIO_OPENCV_VERSION \ + (10000 * CV_VERSION_EPOCH + 100 * CV_VERSION_MAJOR + CV_VERSION_MINOR) +#else +# define OIIO_OPENCV_VERSION \ + (10000 * CV_VERSION_MAJOR + 100 * CV_VERSION_MINOR \ + + CV_VERSION_REVISION) +#endif +OIIO_PRAGMA_WARNING_PUSH +#if OIIO_GNUC_VERSION >= 110000 || OIIO_CLANG_VERSION >= 120000 \ + || OIIO_APPLE_CLANG_VERSION >= 120000 +# pragma GCC diagnostic ignored "-Wdeprecated-enum-enum-conversion" +// # pragma GCC diagnostic ignored "-Wdeprecated-anon-enum-enum-conversion" +// # pragma GCC diagnostic ignored "-Wunused-but-set-variable" +#endif +#include +#if OIIO_OPENCV_VERSION >= 40000 +# include +# include +#else +# error "OpenCV 4.0 is the minimum supported version" +#endif +OIIO_PRAGMA_WARNING_POP + + + +OIIO_NAMESPACE_3_1_BEGIN + +namespace ImageBufAlgo { + +/// Convert an OpenCV cv::Mat into an ImageBuf, copying the pixels (optionally +/// converting to the pixel data type specified by `convert`, if not UNKNOWN, +/// which means to preserve the original data type if possible). Return true +/// if ok, false if it was not able to make the conversion from Mat to +/// ImageBuf. Any error messages can be retrieved by calling `geterror()` on +/// the returned ImageBuf. If OpenImageIO was compiled without OpenCV support, +/// this function will return false. +inline ImageBuf +from_OpenCV(const cv::Mat& mat, TypeDesc convert = TypeUnknown, ROI roi = {}, + int nthreads = 0); + +/// Construct an OpenCV cv::Mat containing the contents of ImageBuf src, and +/// return true. If it is not possible, or if OpenImageIO was compiled without +/// OpenCV support, then return false. Any error messages can be retrieved by +/// calling OIIO::geterror(). Note that OpenCV only supports up to 4 channels, +/// so >4 channel images will be truncated in the conversion. +inline bool +to_OpenCV(cv::Mat& dst, const ImageBuf& src, ROI roi = {}, int nthreads = 0); + +/// Capture a still image from a designated camera. If able to do so, +/// store the image in dst and return true. If there is no such device, +/// or support for camera capture is not available (such as if OpenCV +/// support was not enabled at compile time), return false and do not +/// alter dst. +inline ImageBuf +capture_image(int cameranum = 0, TypeDesc convert = TypeUnknown); + +} // namespace ImageBufAlgo + + + +////////////////////////////////////////////////////////////////////////// +// +// Implementation details follow. +// +// ^^^ All declarations and documentation is above ^^^ +// +// vvv Below is the implementation. +// +////////////////////////////////////////////////////////////////////////// + +namespace pvt { + +// Templated fast swap of R and B channels. +template +static bool +RBswap(ImageBuf& R, ROI roi, int nthreads) +{ + ImageBufAlgo::parallel_image(roi, nthreads, [&](ROI roi) { + for (ImageBuf::Iterator r(R, roi); !r.done(); ++r) + for (int c = roi.chbegin; c < roi.chend; ++c) { + Rtype tmp = r[0]; + r[0] = Rtype(r[2]); + r[2] = tmp; + } + }); + return true; +} + +} // namespace pvt + + + +inline ImageBuf +ImageBufAlgo::from_OpenCV(const cv::Mat& mat, TypeDesc convert, ROI roi, + int nthreads) +{ + Timer timer; + ImageBuf dst; + TypeDesc srcformat; + switch (mat.depth()) { + case CV_8U: srcformat = TypeDesc::UINT8; break; + case CV_8S: srcformat = TypeDesc::INT8; break; + case CV_16U: srcformat = TypeDesc::UINT16; break; + case CV_16S: srcformat = TypeDesc::INT16; break; + case CV_32F: srcformat = TypeDesc::FLOAT; break; + case CV_64F: srcformat = TypeDesc::DOUBLE; break; + default: + dst.errorfmt("Unsupported OpenCV data type, depth={}", mat.depth()); + return dst; + } + + TypeDesc dstformat = (convert.is_unknown()) ? srcformat : convert; + ROI matroi(0, mat.cols, 0, mat.rows, 0, 1, 0, mat.channels()); + roi = roi_intersection(roi, matroi); + ImageSpec spec(roi, dstformat); + dst.reset(dst.name(), spec); + size_t pixelsize = srcformat.size() * spec.nchannels; + size_t linestep = mat.step[0]; + // Block copy and convert + parallel_convert_image(spec.nchannels, spec.width, spec.height, 1, + mat.ptr(), srcformat, pixelsize, linestep, 0, + dst.pixeladdr(roi.xbegin, roi.ybegin), dstformat, + spec.pixel_bytes(), spec.scanline_bytes(), 0, + nthreads); + + // OpenCV uses BGR ordering + if (spec.nchannels >= 3) { + OIIO_MAYBE_UNUSED bool ok = true; + OIIO_DISPATCH_TYPES(ok, "from_OpenCV R/B swap", pvt::RBswap, dstformat, + dst, roi, nthreads); + } + + log_time("IBA::from_OpenCV", timer); + return dst; +} + + + +inline bool +ImageBufAlgo::to_OpenCV(cv::Mat& dst, const ImageBuf& src, ROI roi, + int nthreads) +{ + Timer timer; + if (!roi.defined()) + roi = src.roi(); + roi.chend = std::min(roi.chend, src.nchannels()); + const ImageSpec& spec = src.spec(); + int chans = std::min(4, roi.nchannels()); + int dstFormat = 0; + TypeDesc dstSpecFormat = spec.format; + if (spec.format == TypeDesc(TypeDesc::UINT8)) { + dstFormat = CV_MAKETYPE(CV_8U, chans); + } else if (spec.format == TypeDesc(TypeDesc::INT8)) { + dstFormat = CV_MAKETYPE(CV_8S, chans); + } else if (spec.format == TypeDesc(TypeDesc::UINT16)) { + dstFormat = CV_MAKETYPE(CV_16U, chans); + } else if (spec.format == TypeDesc(TypeDesc::INT16)) { + dstFormat = CV_MAKETYPE(CV_16S, chans); + } else if (spec.format == TypeDesc(TypeDesc::UINT32)) { + dstFormat = CV_MAKETYPE(CV_16U, chans); + dstSpecFormat = TypeUInt16; + } else if (spec.format == TypeDesc(TypeDesc::INT32)) { + dstFormat = CV_MAKETYPE(CV_16S, chans); + dstSpecFormat = TypeInt16; + } else if (spec.format == TypeDesc(TypeDesc::HALF)) { + dstFormat = CV_MAKETYPE(CV_16F, chans); + } else if (spec.format == TypeDesc(TypeDesc::FLOAT)) { + dstFormat = CV_MAKETYPE(CV_32F, chans); + } else if (spec.format == TypeDesc(TypeDesc::DOUBLE)) { + dstFormat = CV_MAKETYPE(CV_64F, chans); + } else { + // Punt, make 8 bit + dstFormat = CV_MAKETYPE(CV_8S, chans); + } + dst.create(roi.height(), roi.width(), dstFormat); + if (dst.empty()) { + OIIO::errorfmt("to_OpenCV() was unable to create cv::Mat of {}x{} {}", + roi.width(), roi.height(), dstSpecFormat); + log_time("IBA::to_OpenCV", timer); + return false; + } + + size_t pixelsize = dstSpecFormat.size() * chans; + size_t linestep = pixelsize * roi.width(); + size_t bufsize = linestep * roi.height(); + // Make an IB that wraps the OpenCV buffer, then IBA:: copy to it + ImageBuf cvib(ImageSpec(roi.width(), roi.height(), chans, dstSpecFormat), + make_span((std::byte*)dst.ptr(), bufsize), nullptr, pixelsize, + linestep); + bool converted = ImageBufAlgo::copy(cvib, src); + if (!converted) { + OIIO::errorfmt( + "to_OpenCV() was unable to convert source {} to cv::Mat of {}", + spec.format, dstSpecFormat); + log_time("IBA::to_OpenCV", timer); + return false; + } + + // OpenCV uses BGR ordering + if (chans == 3) { + cv::cvtColor(dst, dst, cv::COLOR_RGB2BGR); + } else if (chans == 4) { + cv::cvtColor(dst, dst, cv::COLOR_RGBA2BGRA); + } + + log_time("IBA::to_OpenCV", timer); + return true; +} + + + +inline ImageBuf +ImageBufAlgo::capture_image(int cameranum, TypeDesc convert) +{ + Timer timer; + ImageBuf dst; + cv::Mat frame; + { + // This block is mutex-protected + static std::map> cameras; + static mutex opencv_mutex; + lock_guard lock(opencv_mutex); + auto& cvcam = cameras[cameranum]; + if (!cvcam) { + cvcam.reset(new cv::VideoCapture(cameranum)); + if (!cvcam) { + dst.errorfmt( + "Could not create a capture camera (OpenCV error)"); + log_time("IBA::capture_image", timer); + return dst; // failed somehow + } + } + (*cvcam) >> frame; + if (frame.empty()) { + dst.errorfmt("Could not cvQueryFrame (OpenCV error)"); + log_time("IBA::capture_image", timer); + return dst; // failed somehow + } + } + + // logtime.stop(); + dst = from_OpenCV(frame, convert); + // logtime.start(); + if (!dst.has_error()) { + time_t now; + time(&now); + struct tm tmtime; + Sysutil::get_local_time(&now, &tmtime); + std::string datetime + = Strutil::fmt::format("{:4d}:{:02d}:{:02d} {:02d}:{:02d}:{:02d}", + tmtime.tm_year + 1900, tmtime.tm_mon + 1, + tmtime.tm_mday, tmtime.tm_hour, + tmtime.tm_min, tmtime.tm_sec); + dst.specmod().attribute("DateTime", datetime); + } + log_time("IBA::capture_image", timer); + return dst; +} + + +OIIO_NAMESPACE_3_1_END diff --git a/third_party/tlRender-install-Release/include/OpenImageIO/imagebufalgo_util.h b/third_party/tlRender-install-Release/include/OpenImageIO/imagebufalgo_util.h new file mode 100644 index 00000000..efc4ba01 --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenImageIO/imagebufalgo_util.h @@ -0,0 +1,808 @@ +// Copyright Contributors to the OpenImageIO project. +// SPDX-License-Identifier: Apache-2.0 +// https://github.com/AcademySoftwareFoundation/OpenImageIO + + +#pragma once + +#include + +#include +#include +#include + + + +OIIO_NAMESPACE_3_1_BEGIN + +using namespace std::placeholders; +using std::placeholders::_1; + + +namespace ImageBufAlgo { + + + +/// Helper template for generalized multithreading for image processing +/// functions. Some function/functor or lambda `f` is applied to every pixel +/// the region of interest roi, dividing the region into multiple threads if +/// threads != 1. Note that threads == 0 indicates that the number of threads +/// should be as set by the global OIIO "threads" attribute. +/// +/// The `opt.splitdir` determines along which axis the split will be made. The +/// default is SplitDir::Y (vertical splits), which generally seems the +/// fastest (due to cache layout issues?), but perhaps there are algorithms +/// where it's better to split in X, Z, or along the longest axis. +/// +inline void +parallel_image(ROI roi, paropt opt, std::function f) +{ + opt.resolve(); + // Try not to assign a thread less than 16k pixels, or it's not worth + // the thread startup/teardown cost. + opt.maxthreads( + std::min(opt.maxthreads(), 1 + int(roi.npixels() / opt.minitems()))); + if (opt.singlethread()) { + // Just one thread, or a small image region, or if recursive use of + // parallel_image is disallowed: use this thread only + f(roi); + return; + } + + // If splitdir was not explicit, find the longest edge. + paropt::SplitDir splitdir = opt.splitdir(); + if (splitdir == paropt::SplitDir::Biggest) + splitdir = roi.width() > roi.height() ? paropt::SplitDir::X + : paropt::SplitDir::Y; + + int64_t xchunk = 0, ychunk = 0; + if (splitdir == paropt::SplitDir::Y) { + xchunk = roi.width(); + // ychunk = std::max (64, minitems/xchunk); + } else if (splitdir == paropt::SplitDir::X) { + ychunk = roi.height(); + // ychunk = std::max (64, minitems/xchunk); + } else if (splitdir == paropt::SplitDir::Tile) { + int64_t n = std::min(opt.minitems(), roi.npixels()); + xchunk = ychunk = std::max(1, int(std::sqrt(n)) / 4); + } else { + xchunk = ychunk = std::max(int64_t(1), + int64_t(std::sqrt(opt.maxthreads())) / 2); + } + + auto task = [&](int64_t xbegin, int64_t xend, int64_t ybegin, + int64_t yend) { + f(ROI(xbegin, xend, ybegin, yend, roi.zbegin, roi.zend, roi.chbegin, + roi.chend)); + }; + parallel_for_chunked_2D(roi.xbegin, roi.xend, xchunk, roi.ybegin, roi.yend, + ychunk, task, opt); +} + + +inline void +parallel_image(ROI roi, std::function f) +{ + parallel_image(roi, paropt(), f); +} + + + +/// Common preparation for IBA functions (or work-alikes): Given an ROI (which +/// may or may not be the default ROI::All()), destination image (which may or +/// may not yet be allocated), and optional input images (presented as a span +/// of pointers to ImageBufs), adjust `roi` if necessary and allocate pixels +/// for `dst` if necessary. If `dst` is already initialized, it will keep its +/// "full" (aka display) window, otherwise its full/display window will be set +/// to the union of inputs' full/display windows. If `dst` is uninitialized +/// and `force_spec` is not nullptr, use `*force_spec` as `dst`'s new spec +/// rather than using the first input image. Also, if any inputs are +/// specified but not initialized or are broken, it's an error, so return +/// false. If all is ok, return true. +/// +/// The `options` list contains optional ParamValue's that control the +/// behavior, including what input configurations are considered errors, and +/// policies for how an uninitialized output is constructed from knowledge of +/// the input images. The following options are recognized: +/// +/// - "require_alpha" : int (default: 0) +/// +/// If nonzero, require all inputs and output to have an alpha channel. +/// +/// - "require_z" : int (default: 0) +/// +/// If nonzero, require all inputs and output to have a z channel. +/// +/// - "require_same_nchannels" : int (default: 0) +/// +/// If nonzero, require all inputs and output to have the same number of +/// channels. +/// +/// - "copy_roi_full" : int (default: 1) +/// +/// Copy the src's roi_full. This is the default behavior. Set to 0 to +/// disable copying roi_full from src to dst. +/// +/// - "support_volume" : int (default: 1) +/// +/// Support volumetric (3D) images. This is the default behavior. Set to 0 +/// to disable support for 3D images. +/// +/// - "copy_metadata" : string (default: "true") +/// +/// If set to "true-like" value, copy most "safe" metadata from the first +/// input image to the destination image. If set to "all", copy all +/// metadata from the first input image to the destination image, even +/// dubious things. If set to a "false-like" value, do not copy any +/// metadata from the input images to the destination image. +/// +/// - "clamp_mutual_nchannels" : int (default: 0) +/// +/// If nonzero, clamp roi.chend to the minimum number of channels of any +/// of the input images. +/// +/// - "support_deep" : string (default: "false") +/// +/// If "false-like" (the default), deep images (having multiple depth +/// values per pixel) are not supported. If set to a true-like value +/// (e.g., "1", "on", "true", "yes"), deep images are allowed, but not +/// required, and if any input or output image is deep, they all must be +/// deep. If set to "mixed", any mixture of deep and non-deep images may +/// be supplied. If set to "required", all input and output images must be +/// deep. +/// +/// - "dst_float_pixels" : int (default: 0) +/// +/// If nonzero and dst is uninitialized, then initialize it to float +/// regardless of the pixel types of the input images. +/// +/// - "dst_datatype" : string (default: "") +/// +/// If not empty and dst is uninitialized, then initialize it to the data +/// type indicated by the string regardless of the pixel types of any +/// input images. +/// +/// - "minimize_nchannels" : int (default: 0) +/// +/// If nonzero and dst is uninitialized and the multiple input images do +/// not all have the same number of channels, initialize `dst` to have the +/// smallest number of channels of any input. (If 0, the default, an +/// uninitialized `dst` will be given the maximum of the number of +/// channels of all input images.) +/// +/// - "require_matching_channels" : int (default: 0) +/// +/// If nonzero, require all input images to have the same channel *names*, +/// in the same order. +/// +/// - "merge_metadata" : int (default: 0) +/// +/// If nonzero, merge all inputs' metadata into the `dst` image's +/// metadata. +/// +/// - "fill_zero_alloc" : int (default: 0) +/// +/// If nonzero and `dst` is uninitialized, fill `dst` with 0 values if we +/// allocate space for it. +/// +bool +IBAprep(ROI& roi, ImageBuf& dst, cspan srcs = {}, + KWArgs options = {}, ImageSpec* force_spec = nullptr); + + +/// Common preparation for IBA functions: Given an ROI (which may or may not +/// be the default ROI::All()), destination image (which may or may not yet +/// be allocated), and optional input images, adjust roi if necessary and +/// allocate pixels for dst if necessary. If dst is already initialized, it +/// will keep its "full" (aka display) window, otherwise its full/display +/// window will be set to the union of A's and B's full/display windows. If +/// dst is uninitialized and force_spec is not NULL, use *force_spec as +/// dst's new spec rather than using A's. Also, if A or B inputs are +/// specified but not initialized or broken, it's an error so return false. +/// If all is ok, return true. Some additional checks and behaviors may be +/// specified by the 'prepflags', which is a bit field defined by +/// IBAprep_flags. +bool OIIO_API +IBAprep(ROI& roi, ImageBuf* dst, const ImageBuf* A = NULL, + const ImageBuf* B = NULL, const ImageBuf* C = NULL, + ImageSpec* force_spec = NULL, int prepflags = 0); +inline bool +IBAprep(ROI& roi, ImageBuf* dst, const ImageBuf* A, const ImageBuf* B, + ImageSpec* force_spec, int prepflags = 0) +{ + return IBAprep(roi, dst, A, B, NULL, force_spec, prepflags); +} +inline bool +IBAprep(ROI& roi, ImageBuf* dst, const ImageBuf* A, const ImageBuf* B, + int prepflags) +{ + return IBAprep(roi, dst, A, B, NULL, NULL, prepflags); +} +inline bool +IBAprep(ROI& roi, ImageBuf* dst, const ImageBuf* A, int prepflags) +{ + return IBAprep(roi, dst, A, NULL, NULL, NULL, prepflags); +} +inline bool +IBAprep(ROI& roi, ImageBuf* dst, int prepflags) +{ + return IBAprep(roi, dst, nullptr, nullptr, nullptr, nullptr, prepflags); +} + + +// clang-format off + + +enum IBAprep_flags { + IBAprep_DEFAULT = 0, + IBAprep_REQUIRE_ALPHA = 1<<0, + IBAprep_REQUIRE_Z = 1<<1, + IBAprep_REQUIRE_SAME_NCHANNELS = 1<<2, + IBAprep_NO_COPY_ROI_FULL = 1<<3, // Don't copy the src's roi_full + IBAprep_NO_SUPPORT_VOLUME = 1<<4, // Don't know how to do volumes + IBAprep_NO_COPY_METADATA = 1<<8, // N.B. default copies all metadata + IBAprep_COPY_ALL_METADATA = 1<<9, // Even unsafe things + IBAprep_CLAMP_MUTUAL_NCHANNELS = 1<<10, // Clamp roi.chend to min of inputs + IBAprep_SUPPORT_DEEP = 1<<11, // Operation allows deep images + IBAprep_DEEP_MIXED = 1<<12, // Allow deep & non-deep combinations + IBAprep_DST_FLOAT_PIXELS = 1<<13, // If dst is uninit, make it float + IBAprep_MINIMIZE_NCHANNELS = 1<<14, // Multi-inputs get min(nchannels) + IBAprep_REQUIRE_MATCHING_CHANNELS = 1<<15, // Channel names must match + IBAprep_MERGE_METADATA = 1 << 16, // Merge all inputs' metadata + IBAprep_FILL_ZERO_ALLOC = 1 << 17, // Fill with 0 if we alloc space +}; + + + +OIIO_DEPRECATED("Use TypeDesc::basetype_merge [2.3]") +inline TypeDesc::BASETYPE type_merge (TypeDesc::BASETYPE a, TypeDesc::BASETYPE b) +{ + return TypeDesc::basetype_merge(a, b); +} + +OIIO_DEPRECATED("Use TypeDesc::basetype_merge [2.3]") +inline TypeDesc type_merge (TypeDesc a, TypeDesc b) { + return TypeDesc::basetype_merge(a, b); +} + +OIIO_DEPRECATED("Use TypeDesc::basetype_merge [2.3]") +inline TypeDesc type_merge (TypeDesc a, TypeDesc b, TypeDesc c) +{ + return TypeDesc::basetype_merge(TypeDesc::basetype_merge(a,b), c); +} + + +inline bool is_common_pixel_type(TypeDesc t) +{ + return t.basetype == TypeDesc::FLOAT || t.basetype == TypeDesc::UINT8 + || t.basetype == TypeDesc::UINT16 || t.basetype == TypeDesc::HALF; +} + + + +// Macro to call a type-specialized version func(R,...) +// instantiated for EVERY pixel type we support. +#define OIIO_DISPATCH_TYPES(ret,name,func,type,R,...) \ + switch (type.basetype) { \ + case TypeDesc::FLOAT : \ + ret = func (R, __VA_ARGS__); break; \ + case TypeDesc::UINT8 : \ + ret = func (R, __VA_ARGS__); break; \ + case TypeDesc::HALF : \ + ret = func (R, __VA_ARGS__); break; \ + case TypeDesc::UINT16: \ + ret = func (R, __VA_ARGS__); break; \ + case TypeDesc::INT8 : \ + ret = func (R, __VA_ARGS__); break; \ + case TypeDesc::INT16 : \ + ret = func (R, __VA_ARGS__); break; \ + case TypeDesc::UINT : \ + ret = func (R, __VA_ARGS__); break; \ + case TypeDesc::INT : \ + ret = func (R, __VA_ARGS__); break; \ + case TypeDesc::DOUBLE: \ + ret = func (R, __VA_ARGS__); break; \ + default: \ + (R).errorfmt("{}: Unsupported pixel data format '{}'", name, type); \ + ret = false; \ + } + +// Helper, do not call from the outside world. +#define OIIO_DISPATCH_TYPES2_HELP(ret,name,func,Rtype,Atype,R,...) \ + switch (Atype.basetype) { \ + case TypeDesc::FLOAT : \ + ret = func (R, __VA_ARGS__); break; \ + case TypeDesc::UINT8 : \ + ret = func (R, __VA_ARGS__); break; \ + case TypeDesc::HALF : \ + ret = func (R, __VA_ARGS__); break; \ + case TypeDesc::UINT16: \ + ret = func (R, __VA_ARGS__); break; \ + case TypeDesc::INT8 : \ + ret = func (R, __VA_ARGS__); break; \ + case TypeDesc::INT16 : \ + ret = func (R, __VA_ARGS__); break; \ + case TypeDesc::UINT : \ + ret = func (R, __VA_ARGS__); break; \ + case TypeDesc::INT : \ + ret = func (R, __VA_ARGS__); break; \ + case TypeDesc::DOUBLE : \ + ret = func (R, __VA_ARGS__); break; \ + default: \ + (R).errorfmt("{}: Unsupported pixel data format '{}'", name, Atype); \ + ret = false; \ + } + +// Macro to call a type-specialized version func(R,...). +// instantiated for EVERY combination of pixel type we support. +// Note: The combinatorics here are brutal! Only do this if necessary. +#define OIIO_DISPATCH_TYPES2(ret,name,func,Rtype,Atype,R,...) \ + switch (Rtype.basetype) { \ + case TypeDesc::FLOAT : \ + OIIO_DISPATCH_TYPES2_HELP(ret,name,func,float,Atype,R,__VA_ARGS__); \ + break; \ + case TypeDesc::UINT8 : \ + OIIO_DISPATCH_TYPES2_HELP(ret,name,func,unsigned char,Atype,R,__VA_ARGS__); \ + break; \ + case TypeDesc::HALF : \ + OIIO_DISPATCH_TYPES2_HELP(ret,name,func,half,Atype,R,__VA_ARGS__); \ + break; \ + case TypeDesc::UINT16: \ + OIIO_DISPATCH_TYPES2_HELP(ret,name,func,unsigned short,Atype,R,__VA_ARGS__); \ + break; \ + case TypeDesc::INT8: \ + OIIO_DISPATCH_TYPES2_HELP(ret,name,func,char,Atype,R,__VA_ARGS__); \ + break; \ + case TypeDesc::INT16: \ + OIIO_DISPATCH_TYPES2_HELP(ret,name,func,short,Atype,R,__VA_ARGS__); \ + break; \ + case TypeDesc::UINT: \ + OIIO_DISPATCH_TYPES2_HELP(ret,name,func,unsigned int,Atype,R,__VA_ARGS__); \ + break; \ + case TypeDesc::INT: \ + OIIO_DISPATCH_TYPES2_HELP(ret,name,func,int,Atype,R,__VA_ARGS__); \ + break; \ + case TypeDesc::DOUBLE: \ + OIIO_DISPATCH_TYPES2_HELP(ret,name,func,double,Atype,R,__VA_ARGS__);\ + break; \ + default: \ + (R).errorfmt("{}: Unsupported pixel data format '{}'", name, Rtype); \ + ret = false; \ + } + + +// Macro to call a type-specialized version func(R,...) for +// the most common types, will auto-convert the rest to float. +#define OIIO_DISPATCH_COMMON_TYPES(ret,name,func,type,R,...) \ + switch (type.basetype) { \ + case TypeDesc::FLOAT : \ + ret = func (R, __VA_ARGS__); break; \ + case TypeDesc::UINT8 : \ + ret = func (R, __VA_ARGS__); break; \ + case TypeDesc::HALF : \ + ret = func (R, __VA_ARGS__); break; \ + case TypeDesc::UINT16: \ + ret = func (R, __VA_ARGS__); break; \ + default: { \ + /* other types: punt and convert to float, then copy back */ \ + ImageBuf Rtmp; \ + if ((R).initialized()) \ + Rtmp.copy(R, TypeFloat); \ + ret = func (Rtmp, __VA_ARGS__); \ + if (ret) \ + (R).copy(Rtmp, (R).pixeltype()); \ + else \ + (R).errorfmt("{}", Rtmp.geterror()); \ + } \ + } + +// Helper, do not call from the outside world. +#define OIIO_DISPATCH_COMMON_TYPES2_HELP(ret,name,func,Rtype,Atype,R,A,...) \ + switch (Atype.basetype) { \ + case TypeDesc::FLOAT : \ + ret = func (R, A, __VA_ARGS__); break; \ + case TypeDesc::UINT8 : \ + ret = func (R, A, __VA_ARGS__); break; \ + case TypeDesc::HALF : \ + ret = func (R, A, __VA_ARGS__); break; \ + case TypeDesc::UINT16: \ + ret = func (R, A, __VA_ARGS__); break; \ + default: \ + OIIO_DASSERT(0 && "bad type"); \ + ret = false; \ + break; \ + } + +// Macro to call a type-specialized version func(R,A,...) for +// the most common types. It will auto-convert remaining rare cases to float. +#define OIIO_DISPATCH_COMMON_TYPES2_FULL(ret, name, func, Rtype_, Atype_, R, A, ...)\ + { \ + OIIO_ASSERT((R).initialized()); \ + ret = false; \ + auto Rptr = &R; \ + auto Aptr = &A; \ + ImageBuf Rtmp, Atmp; \ + TypeDesc Rtype = Rtype_, Atype = Atype_; \ + if (!ImageBufAlgo::is_common_pixel_type(Atype)) { \ + Atype = TypeDesc::FLOAT; \ + Atmp.copy(A, Atype); \ + Aptr = &Atmp; \ + } \ + if (!ImageBufAlgo::is_common_pixel_type(Rtype)) { \ + Rtype = TypeDesc::FLOAT; \ + Rtmp.copy(R, Rtype); \ + Rptr = &Rtmp; \ + } \ + if (Rtype == TypeFloat) { \ + OIIO_DISPATCH_COMMON_TYPES2_HELP(ret, name, func, float, Atype, \ + *Rptr, *Aptr, __VA_ARGS__); \ + } else if (Rtype == TypeUInt8) { \ + OIIO_DISPATCH_COMMON_TYPES2_HELP(ret, name, func, uint8_t, Atype, \ + *Rptr, *Aptr, __VA_ARGS__); \ + } else if (Rtype == TypeHalf) { \ + OIIO_DISPATCH_COMMON_TYPES2_HELP(ret, name, func, half, Atype, \ + *Rptr, *Aptr, __VA_ARGS__); \ + } else if (Rtype == TypeUInt16) { \ + OIIO_DISPATCH_COMMON_TYPES2_HELP(ret, name, func, uint16_t, Atype, \ + *Rptr, *Aptr, __VA_ARGS__); \ + } else { \ + OIIO_DASSERT(0 && "bad type"); \ + } \ + if (Rptr != &(R)) { \ + /* If we used Rtmp, copy pixels or errors to the real R */ \ + if (ret) \ + (R).copy(*Rptr, (R).pixeltype()); \ + else \ + (R).errorfmt("{}", Rptr->geterror()); \ + } \ + } + + +// Macro to call a type-specialized version func(R,A,...) for +// the most common types. It will auto-convert remaining rare cases to float. +#define OIIO_DISPATCH_COMMON_TYPES2(ret, name, func, Rtype_, Atype_, R, A, ...)\ + { \ + OIIO_ASSERT((R).initialized()); \ + ret = false; \ + auto Rptr = &R; \ + auto Aptr = &A; \ + ImageBuf Rtmp, Atmp; \ + TypeDesc Rtype = Rtype_, Atype = Atype_; \ + if (!ImageBufAlgo::is_common_pixel_type(Atype)) { \ + Atype = TypeDesc::FLOAT; \ + Atmp.copy(A, Atype); \ + Aptr = &Atmp; \ + } \ + if (!ImageBufAlgo::is_common_pixel_type(Rtype) || (Rtype != Atype && Rtype != TypeFloat)) { \ + Rtype = TypeDesc::FLOAT; \ + Rtmp.copy(R, Rtype); \ + Rptr = &Rtmp; \ + } \ + OIIO_ASSERT(Rtype == TypeFloat || Rtype == Atype); \ + if (Rtype == TypeFloat) { \ + switch (Atype.basetype) { \ + case TypeDesc::FLOAT : \ + ret = func (*Rptr, *Aptr, __VA_ARGS__); break; \ + case TypeDesc::UINT8 : \ + ret = func (*Rptr, *Aptr, __VA_ARGS__); break; \ + case TypeDesc::HALF : \ + ret = func (*Rptr, *Aptr, __VA_ARGS__); break; \ + case TypeDesc::UINT16: \ + ret = func (*Rptr, *Aptr, __VA_ARGS__); break; \ + default: \ + OIIO_DASSERT(0 && "bad type"); \ + ret = false; \ + break; \ + } \ + } else if (Rtype == TypeUInt8) { \ + switch (Atype.basetype) { \ + case TypeDesc::FLOAT : \ + ret = func (*Rptr, *Aptr, __VA_ARGS__); break; \ + case TypeDesc::UINT8 : \ + ret = func (*Rptr, *Aptr, __VA_ARGS__); break; \ + /* case TypeDesc::HALF :*/ \ + /* ret = func (*Rptr, *Aptr, __VA_ARGS__); break;*/ \ + /* case TypeDesc::UINT16:*/ \ + /* ret = func (*Rptr, *Aptr, __VA_ARGS__); break;*/ \ + default: \ + OIIO_DASSERT(0 && "bad type"); \ + ret = false; \ + break; \ + } \ + } else if (Rtype == TypeHalf) { \ + switch (Atype.basetype) { \ + case TypeDesc::FLOAT : \ + ret = func (*Rptr, *Aptr, __VA_ARGS__); break; \ + /* case TypeDesc::UINT8 : */ \ + /* ret = func (*Rptr, *Aptr, __VA_ARGS__); break; */ \ + case TypeDesc::HALF : \ + ret = func (*Rptr, *Aptr, __VA_ARGS__); break; \ + /* case TypeDesc::UINT16: */ \ + /* ret = func (*Rptr, *Aptr, __VA_ARGS__); break; */ \ + default: \ + OIIO_DASSERT(0 && "bad type"); \ + ret = false; \ + break; \ + } \ + } else if (Rtype == TypeUInt16) { \ + switch (Atype.basetype) { \ + case TypeDesc::FLOAT : \ + ret = func (*Rptr, *Aptr, __VA_ARGS__); break; \ + /*case TypeDesc::UINT8 : */ \ + /* ret = func (*Rptr, *Aptr, __VA_ARGS__); break; */ \ + /*case TypeDesc::HALF : */ \ + /* ret = func (*Rptr, *Aptr, __VA_ARGS__); break; */ \ + case TypeDesc::UINT16: \ + ret = func (*Rptr, *Aptr, __VA_ARGS__); break; \ + default: \ + OIIO_DASSERT(0 && "bad type"); \ + ret = false; \ + break; \ + } \ + } else { \ + OIIO_DASSERT(0 && "bad type"); \ + } \ + if (Rptr != &(R)) { \ + /* If we used Rtmp, copy pixels or errors to the real R */ \ + if (ret) \ + (R).copy(*Rptr, (R).pixeltype()); \ + else \ + (R).errorfmt("{}", Rptr->geterror()); \ + } \ + } + + +// Macro to call a type-specialized version func(R,A,...) for +// the most common types. It will auto-convert other cases to/from float. +// This is the case for when we don't actually write to the read-only R image. +#define OIIO_DISPATCH_COMMON_TYPES2_CONST(ret,name,func,Rtype_,Atype_,R,A,...) \ + { \ + OIIO_ASSERT((R).initialized()); \ + ret = false; \ + auto Rptr = &R; \ + auto Aptr = &A; \ + ImageBuf Rtmp, Atmp; \ + TypeDesc Rtype = Rtype_, Atype = Atype_; \ + if (!ImageBufAlgo::is_common_pixel_type(Rtype)) { \ + Rtype = TypeDesc::FLOAT; \ + Rtmp.copy(R, Rtype); \ + Rptr = &Rtmp; \ + } \ + if (!ImageBufAlgo::is_common_pixel_type(Atype)) { \ + Atype = TypeDesc::FLOAT; \ + Atmp.copy(A, Atype); \ + Aptr = &Atmp; \ + } \ + switch (Rtype.basetype) { \ + case TypeDesc::FLOAT : \ + OIIO_DISPATCH_COMMON_TYPES2_HELP(ret,name,func,float,Atype,*Rptr,*Aptr, __VA_ARGS__); \ + break; \ + case TypeDesc::UINT8 : \ + OIIO_DISPATCH_COMMON_TYPES2_HELP(ret,name,func,uint8_t,Atype,*Rptr,*Aptr, __VA_ARGS__); \ + break; \ + case TypeDesc::HALF : \ + OIIO_DISPATCH_COMMON_TYPES2_HELP(ret,name,func,half,Atype,*Rptr,*Aptr, __VA_ARGS__); \ + break; \ + case TypeDesc::UINT16: \ + OIIO_DISPATCH_COMMON_TYPES2_HELP(ret,name,func,uint16_t,Atype,*Rptr,*Aptr, __VA_ARGS__); \ + break; \ + default: \ + OIIO_DASSERT(0 && "bad type"); \ + break; \ + } \ + } + + +// Helper, do not call from the outside world. +// This is the the case where we're switching based on the result. Be very +// stingy about the types directly supported here, for all others, write into +// a temp float buffer and copy back. Remember that if the result had the same +// type as both inputs, we wouldn't be here all, so this is already an +// inefficient case. +#define OIIO_DISPATCH_COMMON_TYPES3_HELP(ret,name,func,Rtype,Atype,Btype,R,A,B,...) \ + switch (Rtype.basetype) { \ + case TypeDesc::FLOAT : \ + ret = func (R,A,B,__VA_ARGS__); break; \ + case TypeDesc::UINT8 : \ + ret = func (R,A,B,__VA_ARGS__); break; \ + case TypeDesc::HALF : \ + ret = func (R,A,B,__VA_ARGS__); break; \ + case TypeDesc::UINT16: \ + ret = func (R,A,B,__VA_ARGS__); break; \ + default: \ + OIIO_DASSERT(0 && "bad type"); \ + break; \ + } + +// Macro to call a type-specialized version func(R,A,B,...) +// the most common type combination. Remaining rare cases will auto-convert to +// float. Specifically: anything not {float,half,uint8,uint16} is converted +// to float; if A and B's types don't match, they are converted to float; and +// if R doesn't either match A and B or is float, then A and B are also +#define OIIO_DISPATCH_COMMON_TYPES3(ret,name,func,Rtype_,Atype_,Btype_,R,A,B,...) \ + { \ + OIIO_ASSERT((R).initialized()); \ + ret = false; \ + auto Rptr = &R; \ + auto Aptr = &A; \ + auto Bptr = &B; \ + ImageBuf Rtmp, Atmp, Btmp; \ + TypeDesc Rtype = Rtype_, Atype = Atype_, Btype = Btype_; \ + if (!ImageBufAlgo::is_common_pixel_type(Atype) || (Atype != Btype && Atype != TypeFloat)) { \ + Atype = TypeDesc::FLOAT; \ + Atmp.copy(A, Atype); \ + Aptr = &Atmp; \ + } \ + if (!ImageBufAlgo::is_common_pixel_type(Btype) || (Atype != Btype && Btype != TypeFloat)) { \ + Btype = TypeDesc::FLOAT; \ + Btmp.copy(B, Btype); \ + Bptr = &Btmp; \ + } \ + OIIO_ASSERT(Atype == Btype); \ + if (!ImageBufAlgo::is_common_pixel_type(Rtype) || (Rtype != Atype && Rtype != TypeFloat)) { \ + Rtype = TypeDesc::FLOAT; \ + Rtmp.copy(R, Rtype); \ + Rptr = &Rtmp; \ + } \ + OIIO_ASSERT(Rtype == Atype || Rtype == TypeFloat); \ + switch (Atype.basetype) { \ + case TypeDesc::FLOAT : \ + switch (Rtype.basetype) { \ + case TypeDesc::FLOAT : \ + ret = func(*Rptr,*Aptr,*Bptr,__VA_ARGS__); break; \ + /*case TypeDesc::UINT8 :*/ \ + /* ret = func(*Rptr,*Aptr,*Bptr,__VA_ARGS__); break;*/ \ + /*case TypeDesc::HALF :*/ \ + /* ret = func(*Rptr,*Aptr,*Bptr,__VA_ARGS__); break;*/ \ + /*case TypeDesc::UINT16:*/ \ + /* ret = func(*Rptr,*Aptr,*Bptr,__VA_ARGS__); break;*/ \ + default: \ + OIIO_ASSERT(0 && "bad type"); \ + break; \ + } \ + break; \ + case TypeDesc::UINT8 : \ + switch (Rtype.basetype) { \ + case TypeDesc::FLOAT : \ + ret = func(*Rptr,*Aptr,*Bptr,__VA_ARGS__); break; \ + case TypeDesc::UINT8 : \ + ret = func(*Rptr,*Aptr,*Bptr,__VA_ARGS__); break; \ + /*case TypeDesc::HALF :*/ \ + /* ret = func(*Rptr,*Aptr,*Bptr,__VA_ARGS__); break;*/ \ + /*case TypeDesc::UINT16:*/ \ + /* ret = func(*Rptr,*Aptr,*Bptr,__VA_ARGS__); break;*/ \ + default: \ + OIIO_ASSERT(0 && "bad type"); \ + break; \ + } \ + break; \ + case TypeDesc::HALF : \ + switch (Rtype.basetype) { \ + case TypeDesc::FLOAT : \ + ret = func(*Rptr,*Aptr,*Bptr,__VA_ARGS__); break; \ + /*case TypeDesc::UINT8 :*/ \ + /* ret = func(*Rptr,*Aptr,*Bptr,__VA_ARGS__); break;*/ \ + case TypeDesc::HALF : \ + ret = func(*Rptr,*Aptr,*Bptr,__VA_ARGS__); break; \ + /*case TypeDesc::UINT16: */ \ + /* ret = func(*Rptr,*Aptr,*Bptr,__VA_ARGS__); break;*/ \ + default: \ + OIIO_ASSERT(0 && "bad type"); \ + break; \ + } \ + break; \ + case TypeDesc::UINT16: \ + switch (Rtype.basetype) { \ + case TypeDesc::FLOAT : \ + ret = func(*Rptr,*Aptr,*Bptr,__VA_ARGS__); break; \ + /*case TypeDesc::UINT8 : \ + ret = func(*Rptr,*Aptr,*Bptr,__VA_ARGS__); break; */ \ + /*case TypeDesc::HALF : \ + ret = func(*Rptr,*Aptr,*Bptr,__VA_ARGS__); break; */ \ + case TypeDesc::UINT16: \ + ret = func(*Rptr,*Aptr,*Bptr,__VA_ARGS__); break; \ + default: \ + OIIO_ASSERT(0 && "bad type"); \ + break; \ + } \ + break; \ + default: \ + OIIO_ASSERT(0 && "bad type"); \ + break; \ + } \ + if (Rptr != &(R)) { \ + /* If we used Rtmp, copy pixels or errors to the real R */ \ + if (ret) \ + (R).copy(*Rptr, (R).pixeltype()); \ + else \ + (R).errorfmt("{}", Rptr->geterror()); \ + } \ + } + + +// Utility: for span av, if it had fewer elements than len, alloca a new +// copy that's the right length. Use the `missing` value for missing entries +// (one or more supplied, but not all), and `zdef` default to use if there +// were no entries at all. This is used in many IBA functions that take +// constant per-channel values. +#define IBA_FIX_PERCHAN_LEN(av,len,missing,zdef) \ + if (std::ssize(av) < len) { \ + int nc = len; \ + float *vals = OIIO_ALLOCA(float, nc); \ + for (int i = 0; i < nc; ++i) \ + vals[i] = i < std::ssize(av) ? av[i] : (i ? vals[i-1] : zdef); \ + av = cspan(vals, span_size_t(nc)); \ + } + +// Default IBA_FIX_PERCHAN_LEN, with zdef=0.0 and missing = the last value +// that was supplied. +#define IBA_FIX_PERCHAN_LEN_DEF(av,len) \ + IBA_FIX_PERCHAN_LEN (av, len, 0.0f, av.size() ? av.back() : 0.0f); + + +// clang-format on + + +/// Simple image per-pixel unary operation: Given a source image `src`, return +/// an image of the same dimensions (and same data type, unless `options` +/// includes the "dst_float_pixels" hint turned on, which will result in a +/// float pixel result image) where each pixel is the result of running the +/// caller-supplied function `op` on the corresponding pixel values of `src`. +/// The `op` function should take two `span` arguments, the first +/// referencing a destination pixel, and the second being a reference to the +/// corresponding source pixel. The `op` function should return `true` if the +/// operation was successful, or `false` if there was an error. +/// +/// The `perpixel_op` function is thread-safe and will parallelize the +/// operation across multiple threads if `nthreads` is not equal to 1 +/// (following the usual ImageBufAlgo `nthreads` rules), and also takes care +/// of all the pixel loops and conversions to and from `float` values. +/// +/// The `options` keyword/value list contains additional controls. It supports +/// all hints described by `IBAPrep()` as well as the following: +/// +/// - "nthreads" : int (default: 0) +/// +/// Controls the number of threads (0 signalling to use all available +/// threads in the pool. +/// +/// An example (using the binary op version) of how to implement a simple +/// pixel-by-pixel `add()` operation that is the equivalent of +/// `ImageBufAlgo::add()`: +/// +/// ``` +/// // Assume ImageBuf A, B are the inputs, ImageBuf R is the output +/// R = ImageBufAlgo::perpixel_op(A, B, +/// [](span r, cspan a, cspan b) { +/// for (size_t c = 0, nc = size_t(r.size()); c < nc; ++c) +/// r[c] = a[c] + b[c]; +/// return true; +/// }); +/// ``` +/// +/// Caveats: +/// * The operation must be one that can be applied independently to each +/// pixel. +/// * If the input image is not `float`-valued pixels, there may be some +/// inefficiency due to the need to convert the pixels to `float` and back, +/// since there is no type templating and thus no opportunity to supply a +/// version of the operation that allows specialization to any other pixel +/// data types +// +OIIO_NODISCARD OIIO_API ImageBuf +perpixel_op(const ImageBuf& src, + function_view, cspan)> op, + KWArgs options = {}); + +/// A version of perpixel_op that performs a binary operation, taking two +/// source images and a 3-argument `op` function that receives a destination +/// and two source pixels. +OIIO_NODISCARD OIIO_API ImageBuf +perpixel_op(const ImageBuf& srcA, const ImageBuf& srcB, + function_view, cspan, cspan)> op, + KWArgs options = {}); + +} // end namespace ImageBufAlgo + + +OIIO_NAMESPACE_3_1_END diff --git a/third_party/tlRender-install-Release/include/OpenImageIO/imagecache.h b/third_party/tlRender-install-Release/include/OpenImageIO/imagecache.h new file mode 100644 index 00000000..20b78460 --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenImageIO/imagecache.h @@ -0,0 +1,1350 @@ +// Copyright Contributors to the OpenImageIO project. +// SPDX-License-Identifier: Apache-2.0 +// https://github.com/AcademySoftwareFoundation/OpenImageIO + +#pragma once + +#include +#include + + +// Define symbols that let client applications determine if newly added +// features are supported. + +// Is the close() method present? +#define OIIO_IMAGECACHE_SUPPORTS_CLOSE 1 + +// Is the getattributetype() method present? (Added in 2.5) +#define OIIO_IMAGECACHE_SUPPORTS_GETATTRIBUTETYPE 1 + +// Does invalidate() support the optional `force` flag? +#define OIIO_IMAGECACHE_INVALIDATE_FORCE 1 + +// Does ImageCache::create() return a shared pointer? +#define OIIO_IMAGECACHE_CREATE_SHARED 1 + + + +OIIO_NAMESPACE_3_1_BEGIN + + +/// Define an API to an abstract class that manages image files, +/// caches of open file handles as well as tiles of pixels so that truly +/// huge amounts of image data may be accessed by an application with low +/// memory footprint. +class OIIO_API ImageCache { +public: + /// @{ + /// @name Creating and destroying an image cache + /// + /// ImageCache is an abstract API described as a pure virtual class. + /// The actual internal implementation is not exposed through the + /// external API of OpenImageIO. Because of this, you cannot construct + /// or destroy the concrete implementation, so two static methods of + /// ImageCache are provided: + + /// Create a ImageCache and return a shared pointer to it. + /// + /// @param shared + /// If `true`, the pointer returned will be a shared ImageCache (so + /// that multiple parts of an application that request an ImageCache + /// will all end up with the same one). If `shared` is `false`, a + /// completely unique ImageCache will be created and returned. + /// + /// @returns + /// A shared pointer to an ImageCache, which can only be freed with + /// `ImageCache::destroy()`. + /// + /// @see ImageCache::destroy + static std::shared_ptr create(bool shared = true); + + /// Release the shared_ptr to an ImageCache, including freeing all + /// system resources that it holds if no one else is still using it. This + /// is not strictly necessary to call, simply destroying the shared_ptr + /// will do the same thing, but this call is for backward compatibility + /// and is helpful if you want to use the teardown option. + /// + /// @param cache + /// Shared pointer to the ImageCache to destroy. + /// + /// @param teardown + /// For a shared ImageCache, if the `teardown` parameter is + /// `true`, it will try to truly destroy the shared cache if + /// nobody else is still holding a reference (otherwise, it will + /// leave it intact). This parameter has no effect if `cache` was + /// not the single globally shared ImageCache. + static void destroy(std::shared_ptr& cache, + bool teardown = false); + + /// @} + + + /// @{ + /// @name Setting options and limits for the image cache + /// + /// These are the list of attributes that can bet set or queried by + /// attribute/getattribute: + /// + /// - `int max_open_files` : + /// The approximate maximum number of file handles that the + /// image cache will hold open simultaneously. This is not an + /// iron-clad guarantee; the number of handles may momentarily + /// exceed this by a small percentage. (Default = 100) + /// - `float max_memory_MB` : + /// The approximate maximum amount of memory (measured in MB) + /// used for the internal "tile cache." (Default: 1024.0 MB) + /// - `string searchpath` : + /// The search path for images: a colon-separated list of + /// directories that will be searched in order for any image + /// filename that is not specified as an absolute path. + /// (Default: "") + /// - `string plugin_searchpath` : + /// The search path for plugins: a colon-separated list of + /// directories that will be searched in order for any OIIO + /// plugins, if not found in OIIO's `lib` directory. + /// (Default: "") + /// - `int autotile` , + /// `int autoscanline` : + /// These attributes control how the image cache deals with + /// images that are not "tiled" (i.e., are stored as + /// scanlines). + /// + /// If `autotile` is set to 0 (the default), an untiled image + /// will be treated as if it were a single tile of the + /// resolution of the whole image. This is simple and fast, + /// but can lead to poor cache behavior if you are + /// simultaneously accessing many large untiled images. + /// + /// If `autotile` is nonzero (e.g., 64 is a good recommended + /// value), any untiled images will be read and cached as if + /// they were constructed in tiles of size: + /// + /// - `autotile * autotile` + /// if `autoscanline` is 0 + /// - `width * autotile` + /// if `autoscanline` is nonzero. + /// + /// In both cases, this should lead more efficient caching. + /// The `autoscanline` determines whether the "virtual tiles" + /// in the cache are square (if `autoscanline` is 0, the + /// default) or if they will be as wide as the image (but only + /// `autotile` scanlines high). You should try in your + /// application to see which leads to higher performance. + /// - `int autoscanline` : + /// autotile using full width tiles + /// - `int automip` : + /// If 0 (the default), an untiled single-subimage file will + /// only be able to utilize that single subimage. + /// If nonzero, any untiled, single-subimage (un-MIP-mapped) + /// images will have lower-resolution MIP-map levels generated + /// on-demand if pixels are requested from the lower-res + /// subimages (that don't really exist). Essentially this + /// makes the ImageCache pretend that the file is MIP-mapped + /// even if it isn't. + /// - `int accept_untiled` : + /// When nonzero, ImageCache accepts untiled images as usual. + /// When zero, ImageCache will reject untiled images with an + /// error condition, as if the file could not be properly + /// read. This is sometimes helpful for applications that want + /// to enforce use of tiled images only. (default=1) + /// - `int accept_unmipped` : + /// When nonzero, ImageCache accepts un-MIPmapped images as + /// usual. When set to zero, ImageCache will reject + /// un-MIPmapped images with an error condition, as if the + /// file could not be properly read. This is sometimes helpful + /// for applications that want to enforce use of MIP-mapped + /// images only. (Default: 1) + /// - `int statistics:level` : + /// verbosity of statistics auto-printed. + /// - `int forcefloat` : + /// If set to nonzero, all image tiles will be converted to + /// `float` type when stored in the image cache. This can be + /// helpful especially for users of ImageBuf who want to + /// simplify their image manipulations to only need to + /// consider `float` data. The default is zero, meaning that + /// image pixels are not forced to be `float` when in cache. + /// - `int failure_retries` : + /// When an image file is opened or a tile/scanline is read but + /// a file error occurs, if this attribute is nonzero, it will + /// try the operation again up to this many times before giving + /// up and reporting a failure. Setting this to a small nonzero + /// number (like 3) may help make an application more robust to + /// occasional spurious networking or other glitches that would + /// otherwise cause the entire long-running application to fail + /// upon a single transient error. (Default: 0) + /// - `int deduplicate` : + /// When nonzero, the ImageCache will notice duplicate images + /// under different names if their headers contain a SHA-1 + /// fingerprint (as is done with `maketx`-produced textures) + /// and handle them more efficiently by avoiding redundant + /// reads. The default is 1 (de-duplication turned on). The + /// only reason to set it to 0 is if you specifically want to + /// disable the de-duplication optimization. + /// - `int max_open_files_strict` : + /// If nonzero, work harder to make sure that we have + /// smaller possible overages to the max open files limit. + /// (Default: 0) + /// - `string substitute_image` : + /// When set to anything other than the empty string, the + /// ImageCache will use the named image in place of *all* + /// other images. This allows you to run an app using OIIO + /// and (if you can manage to get this option set) + /// automagically substitute a grid, zone plate, or other + /// special debugging image for all image/texture use. + /// - `int unassociatedalpha` : + /// When nonzero, will request that image format readers try + /// to leave input images with unassociated alpha as they are, + /// rather than automatically converting to associated alpha + /// upon reading the pixels. The default is 0, meaning that + /// the automatic conversion will take place. + /// - `int max_errors_per_file` : + /// The maximum number of errors that will be printed for each + /// file. The default is 100. If your output is cluttered with + /// error messages and after the first few for each file you + /// aren't getting any helpful additional information, this + /// can cut down on the clutter and the runtime. (default: + /// 100) + /// - `int trust_file_extensions` : + /// When nonzero, assume that the file extensions of any + /// texture requests correctly indicates the file format (when + /// enabled, this reduces the number of file opens, at the + /// expense of not being able to open files if their format do + /// not actually match their filename extension). Default: 0 + /// - `string colorspace` : + /// The working colorspace of the texture system. Default: none. + /// - `string colorconfig` : + /// Name of the OCIO config to use. Default: "" (meaning to use + /// the default color config). + /// + /// - `string options` + /// This catch-all is simply a comma-separated list of + /// `name=value` settings of named options, which will be + /// parsed and individually set. Example: + /// + /// ic->attribute ("options", "max_memory_MB=512.0,autotile=1"); + /// + /// Note that if an option takes a string value that must + /// itself contain a comma, it is permissible to enclose the + /// value in either single (` ' ' `) or double (` " " `) quotes. + /// + /// **Read-only attributes** + /// + /// Additionally, there are some read-only attributes that can be + /// queried with `getattribute()` even though they cannot be set via + /// `attribute()`: + /// + /// - `int total_files` : + /// The total number of unique file names referenced by calls + /// to the ImageCache. + /// + /// - `string[] all_filenames` : + /// An array that will be filled with the list of the names of + /// all files referenced by calls to the ImageCache. (The + /// array is of `ustring` or `char*`.) + /// + /// - `int64 stat:cache_footprint` : + /// Total bytes used by image cache. + /// - `int64 stat:cache_memory_used` : + /// Total bytes used by tile cache. + /// + /// - `int stat:tiles_created` , + /// `int stat:tiles_current` , + /// `int stat:tiles_peak` : + /// Total times created, still allocated (at the time of the + /// query), and the peak number of tiles in memory at any + /// time. + /// + /// - `int stat:open_files_created` , + /// `int stat:open_files_current` , + /// `int stat:open_files_peak` : + /// Total number of times a file was opened, number still + /// opened (at the time of the query), and the peak number of + /// files opened at any time. + /// + /// - `int stat:find_tile_calls` : + /// Number of times a filename was looked up in the file cache. + /// + /// - `int64 stat:image_size` : + /// Total size (uncompressed bytes of pixel data) of all + /// images referenced by the ImageCache. (Note: Prior to 1.7, + /// this was called `stat:files_totalsize`.) + /// + /// - `int64 stat:file_size` : + /// Total size of all files (as on disk, possibly compressed) + /// of all images referenced by the ImageCache. + /// + /// - `int64 stat:bytes_read` : + /// Total size (uncompressed bytes of pixel data) read. + /// + /// - `int stat:unique_files` : + /// Number of unique files opened. + /// + /// - `float stat:fileio_time` : + /// Total I/O-related time (seconds). + /// + /// - `float stat:fileopen_time` : + /// I/O time related to opening and reading headers (but not + /// pixel I/O). + /// + /// - `float stat:file_locking_time` : + /// Total time (across all threads) that threads blocked + /// waiting for access to the file data structures. + /// + /// - `float stat:tile_locking_time` : + /// Total time (across all threads) that threads blocked + /// waiting for access to the tile cache data structures. + /// + /// - `float stat:find_file_time` : + /// Total time (across all threads) that threads spent looking + /// up files by name. + /// + /// - `float stat:find_tile_time` : + /// Total time (across all threads) that threads spent looking + /// up individual tiles. + /// + /// The following member functions of ImageCache allow you to set (and + /// in some cases retrieve) options that control the overall behavior of + /// the image cache: + + /// Set a named attribute (i.e., a property or option) of the ImageCache. + /// The `value` span specifies the data to be copied. The data type and + /// total size of `value` must match the `type` (if not, an assertion will + /// be thrown for debug builds). + /// + /// Example: + /// + /// ImageCache *ic; + /// ... + /// int maxfiles = 50; + /// ic->attribute ("max_open_files", TypeInt, make_cspan(maxfiles)); + /// + /// const char *path = "/my/path"; + /// ic->attribute ("searchpath", TypeString, make_cspan(&path, 1)); + /// + /// // There are specialized versions for setting a single int, + /// // float, or string without needing types or pointers: + /// ic->attribute ("max_open_files", 50); + /// ic->attribute ("max_memory_MB", 4000.0f); + /// ic->attribute ("searchpath", "/my/path"); + /// + /// Note: When passing a string, you need to pass a pointer to the + /// `char*`, not a pointer to the first character. (Rationale: for an + /// `int` attribute, you pass the address of the `int`. So for a + /// string, which is a `char*`, you need to pass the address of the + /// string, i.e., a `char**`). + /// + /// @param name Name of the attribute to set. + /// @param type TypeDesc describing the type of the attribute. + /// @param value Span providing the value data. + /// @returns `true` if the name and type were recognized and the + /// attribute was set, or `false` upon failure + /// (including it being an unrecognized attribute or not + /// of the correct type). + /// + /// @version 3.1 + template + bool attribute(string_view name, TypeDesc type, span value) + { + OIIO_DASSERT(BaseTypeFromC::value == type.basetype + && type.size() == value.size_bytes()); + return attribute(name, type, OIIO::as_bytes(value)); + } + + /// A version of `attribute()` that takes its value from a span of untyped + /// bytes. The total size of `value` must match the `type` (if not, an + /// assertion will be thrown for debug builds of OIIO, an error will be + /// printed for release builds). + /// + /// @version 3.1 + bool attribute(string_view name, TypeDesc type, cspan value); + + /// A version of `attribute()` where the `value` is only a pointer + /// specifying the beginning of the memory where the value should be + /// copied from. This is "unsafe" in the sense that there is no assurance + /// that it points to a sufficient amount of memory, so the span-based + /// versions of `attribute()` preferred. + bool attribute(string_view name, TypeDesc type, const void* value); + + /// Specialized `attribute()` for setting a single `int` value. + bool attribute(string_view name, int val) + { + return attribute(name, TypeInt, &val); + } + /// Specialized `attribute()` for setting a single `float` value. + bool attribute(string_view name, float val) + { + return attribute(name, TypeFloat, &val); + } + bool attribute(string_view name, double val) + { + float f = (float)val; + return attribute(name, TypeFloat, &f); + } + /// Specialized `attribute()` for setting a single string value. + bool attribute(string_view name, string_view val) + { + std::string valstr(val); + const char* s = valstr.c_str(); + return attribute(name, TypeString, &s); + } + + /// Get the named attribute, store it in `*val`. All of the attributes + /// that may be set with the `attribute() call` may also be queried with + /// `getattribute()`. + /// + /// Examples: + /// + /// ImageCache *ic; + /// ... + /// int maxfiles; + /// ic->getattribute ("max_open_files", TypeDesc::INT, &maxfiles); + /// + /// const char *path; + /// ic->getattribute ("searchpath", TypeDesc::STRING, &path); + /// + /// // There are specialized versions for retrieving a single int, + /// // float, or string without needing types or pointers: + /// int maxfiles; + /// ic->getattribute ("max_open_files", maxfiles); + /// const char *path; + /// ic->getattribute ("searchpath", &path); + /// + /// Note: When retrieving a string, you need to pass a pointer to the + /// `char*`, not a pointer to the first character. Also, the `char*` + /// will end up pointing to characters owned by the ImageCache; the + /// caller does not need to ever free the memory that contains the + /// characters. + /// + /// @param name Name of the attribute to retrieve. + /// @param type TypeDesc describing the type of the attribute. + /// @param value Pointer where the attribute value should be stored. + /// @returns `true` if the name and type were recognized and the + /// attribute was retrieved, or `false` upon failure + /// (including it being an unrecognized attribute or not + /// of the correct type). + template + bool getattribute(string_view name, TypeDesc type, span value) const + { + OIIO_DASSERT(BaseTypeFromC::value == type.basetype + && type.size() == value.size_bytes()); + return getattribute(name, type, OIIO::as_writable_bytes(value)); + } + + /// A version of `getattribute()` that stores the value in a span of + /// untyped bytes. The total size of `value` must match the `type` (if + /// not, an assertion will be thrown for debug OIIO builds, an error will + /// be printed for release builds). + /// + /// @version 3.1 + bool getattribute(string_view name, TypeDesc type, + span value) const; + + /// A version of `getattribute()` where the `value` is only a pointer + /// specifying the beginning of the memory where the value should be + /// copied. This is "unsafe" in the sense that there is no assurance that + /// it points to a sufficient amount of memory, so the span-based versions + /// of `getattribute()` preferred. + bool getattribute(string_view name, TypeDesc type, void* value) const; + + /// Specialized `attribute()` for retrieving a single `int` value. + bool getattribute(string_view name, int& val) const + { + return getattribute(name, TypeInt, &val); + } + /// Specialized `attribute()` for retrieving a single `float` value. + bool getattribute(string_view name, float& val) const + { + return getattribute(name, TypeFloat, &val); + } + bool getattribute(string_view name, double& val) const + { + float f; + bool ok = getattribute(name, TypeFloat, &f); + if (ok) + val = f; + return ok; + } + /// Specialized `attribute()` for retrieving a single `string` value + /// as a `char*`. + bool getattribute(string_view name, char** val) const + { + return getattribute(name, TypeString, val); + } + /// Specialized `attribute()` for retrieving a single `string` value + /// as a `std::string`. + bool getattribute(string_view name, std::string& val) const + { + ustring s; + bool ok = getattribute(name, TypeString, &s); + if (ok) + val = s.string(); + return ok; + } + + /// If the named attribute is known, return its data type. If no such + /// attribute exists, return `TypeUnknown`. + /// + /// This was added in version 2.5. + TypeDesc getattributetype(string_view name) const; + + /// @} + + + /// @{ + /// @name Opaque data for performance lookups + /// + /// The ImageCache implementation needs to maintain certain per-thread + /// state, and some methods take an opaque `Perthread` pointer to this + /// record. There are three options for how to deal with it: + /// + /// 1. Don't worry about it at all: don't use the methods that want + /// `Perthread` pointers, or always pass `nullptr` for any + /// `Perthread*1 arguments, and ImageCache will do + /// thread-specific-pointer retrieval as necessary (though at some + /// small cost). + /// + /// 2. If your app already stores per-thread information of its own, you + /// may call `get_perthread_info(nullptr)` to retrieve it for that + /// thread, and then pass it into the functions that allow it (thus + /// sparing them the need and expense of retrieving the + /// thread-specific pointer). However, it is crucial that this + /// pointer not be shared between multiple threads. In this case, the + /// ImageCache manages the storage, which will automatically be + /// released when the thread terminates. + /// + /// 3. If your app also wants to manage the storage of the `Perthread`, + /// it can explicitly create one with `create_perthread_info()`, pass + /// it around, and eventually be responsible for destroying it with + /// `destroy_perthread_info()`. When managing the storage, the app + /// may reuse the `Perthread` for another thread after the first is + /// terminated, but still may not use the same `Perthread` for two + /// threads running concurrently. + + /// Define an opaque data type that allows us to have a pointer to + /// certain per-thread information that the ImageCache maintains. Any + /// given one of these should NEVER be shared between running threads. + using Perthread = ImageCachePerThreadInfo; + + /// Retrieve a Perthread, unique to the calling thread. This is a + /// thread-specific pointer that will always return the Perthread for a + /// thread, which will also be automatically destroyed when the thread + /// terminates. + /// + /// Applications that want to manage their own Perthread pointers (with + /// `create_thread_info` and `destroy_thread_info`) should still call + /// this, but passing in their managed pointer. If the passed-in + /// thread_info is not NULL, it won't create a new one or retrieve a + /// TSP, but it will do other necessary housekeeping on the Perthread + /// information. + Perthread* get_perthread_info(Perthread* thread_info = NULL); + + /// Create a new Perthread. It is the caller's responsibility to + /// eventually destroy it using `destroy_thread_info()`. + Perthread* create_thread_info(); + + /// Destroy a Perthread that was allocated by `create_thread_info()`. + void destroy_thread_info(Perthread* thread_info); + + /// Define an opaque data type that allows us to have a handle to an + /// image (already having its name resolved) but without exposing any + /// internals. + using ImageHandle = ImageCacheFile; + + /// Retrieve an opaque handle for fast texture lookups, or nullptr upon + /// failure. The filename is presumed to be UTF-8 encoded. The `options`, + /// if not null, may be used to create a separate handle for certain + /// texture option choices. (Currently unused, but reserved for the future + /// or for alternate IC implementations.) The opaque pointer `thread_info` + /// is thread-specific information returned by `get_perthread_info()`. + ImageHandle* get_image_handle(ustring filename, + Perthread* thread_info = nullptr, + const TextureOpt_v2* options = nullptr); + + /// Get an ImageHandle using a UTF-16 encoded wstring filename. + ImageHandle* get_image_handle(const std::wstring& filename, + Perthread* thread_info = nullptr, + const TextureOpt_v2* options = nullptr) + { + return get_image_handle(ustring(Strutil::utf16_to_utf8(filename)), + thread_info, options); + } + + /// Return true if the image handle (previously returned by + /// `get_image_handle()`) is a valid image that can be subsequently read. + bool good(ImageHandle* file); + + /// Given a handle, return the filename for that image. + /// + /// This method was added in OpenImageIO 2.3. + ustring filename_from_handle(ImageHandle* handle); + + /// @} + + + /// @{ + /// @name Getting information about images + /// + + /// Given possibly-relative `filename` (UTF-8 encoded), resolve it and use + /// the true path to the file, with searchpath logic applied. + std::string resolve_filename(const std::string& filename) const; + + /// Get information or metadata about the named image and store it in + /// `*data`. + /// + /// Data names may include any of the following: + /// + /// - `"exists"` : Stores the value 1 (as an `int`) if the file exists and + /// is an image format that OpenImageIO can read, or 0 if the file + /// does not exist, or could not be properly read as an image. Note + /// that unlike all other queries, this query will "succeed" (return + /// `true`) even if the file does not exist. + /// + /// - `"udim"` : Stores the value 1 (as an `int`) if the file is a + /// "virtual UDIM" or texture atlas file (as described in + /// :ref:`sec-texturesys-udim`) or 0 otherwise. + /// + /// - `"subimages"` : The number of subimages in the file, as an `int`. + /// + /// - `"resolution"` : The resolution of the image file, which is an + /// array of 2 integers (described as `TypeDesc(INT,2)`). + /// + /// - `"miplevels"` : The number of MIPmap levels for the specified + /// subimage (an integer). + /// + /// - `"texturetype"` : A string describing the type of texture of the + /// given file, which describes how the texture may be used (also + /// which texture API call is probably the right one for it). This + /// currently may return one of: `"unknown"`, `"Plain Texture"`, + /// `"Volume Texture"`, `"Shadow"`, or `"Environment"`. + /// + /// - `"textureformat"` : A string describing the format of the given + /// file, which describes the kind of texture stored in the file. This + /// currently may return one of: `"unknown"`, `"Plain Texture"`, + /// `"Volume Texture"`, `"Shadow"`, `"CubeFace Shadow"`, + /// `"Volume Shadow"`, `"LatLong Environment"`, or + /// `"CubeFace Environment"`. Note that there are several kinds of + /// shadows and environment maps, all accessible through the same API + /// calls. + /// + /// - `"channels"` : The number of color channels in the file (an + /// `int`). + /// + /// - `"format"` : The native data format of the pixels in the file (an + /// integer, giving the `TypeDesc::BASETYPE` of the data). Note that + /// this is not necessarily the same as the data format stored in the + /// image cache. + /// + /// - `"cachedformat"` : The native data format of the pixels as stored + /// in the image cache (an integer, giving the `TypeDesc::BASETYPE` of + /// the data). Note that this is not necessarily the same as the + /// native data format of the file. + /// + /// - `"datawindow"` : Returns the pixel data window of the image, which + /// is either an array of 4 integers (returning xmin, ymin, xmax, + /// ymax) or an array of 6 integers (returning xmin, ymin, zmin, xmax, + /// ymax, zmax). The z values may be useful for 3D/volumetric images; + /// for 2D images they will be 0). + /// + /// - `"displaywindow"` : Returns the display (a.k.a. "full") window of + /// the image, which is either an array of 4 integers (returning xmin, + /// ymin, xmax, ymax) or an array of 6 integers (returning xmin, ymin, + /// zmin, xmax, ymax, zmax). The z values may be useful for + /// 3D/volumetric images; for 2D images they will be 0). + /// + /// - `"worldtocamera"` : The viewing matrix, which is a 4x4 matrix (an + /// `Imath::M44f`, described as `TypeDesc(FLOAT,MATRIX)`), giving the + /// world-to-camera 3D transformation matrix that was used when the + /// image was created. Generally, only rendered images will have this. + /// + /// - `"worldtoscreen"` : The projection matrix, which is a 4x4 matrix + /// (an `Imath::M44f`, described as `TypeDesc(FLOAT,MATRIX)`), giving + /// the matrix that projected points from world space into a 2D screen + /// coordinate system where $x$ and $y$ range from -1 to +1. + /// Generally, only rendered images will have this. + /// + /// - `"worldtoNDC"` : The projection matrix, which is a 4x4 matrix + /// (an `Imath::M44f`, described as `TypeDesc(FLOAT,MATRIX)`), giving + /// the matrix that projected points from world space into a 2D NDC + /// coordinate system where $x$ and $y$ range from 0 to +1. Generally, + /// only rendered images will have this. + /// + /// - `"averagecolor"` : If available in the metadata (generally only + /// for files that have been processed by `maketx`), this will return + /// the average color of the texture (into an array of `float`). + /// + /// - `"averagealpha"` : If available in the metadata (generally only + /// for files that have been processed by `maketx`), this will return + /// the average alpha value of the texture (into a `float`). + /// + /// - `"constantcolor"` : If the metadata (generally only for files that + /// have been processed by `maketx`) indicates that the texture has + /// the same values for all pixels in the texture, this will retrieve + /// the constant color of the texture (into an array of floats). A + /// non-constant image (or one that does not have the special metadata + /// tag identifying it as a constant texture) will fail this query + /// (return `false`). + /// + /// - `"constantalpha"` : If the metadata indicates that the texture has + /// the same values for all pixels in the texture, this will retrieve + /// the constant alpha value of the texture (into a float). A + /// non-constant image (or one that does not have the special metadata + /// tag identifying it as a constant texture) will fail this query + /// (return `false`). + /// + /// - `"stat:tilesread"` : Number of tiles read from this file + /// (`int64`). + /// + /// - `"stat:bytesread"` : Number of bytes of uncompressed pixel data + /// read from this file (`int64`). + /// + /// - `"stat:redundant_tiles"` : Number of times a tile was read, where + /// the same tile had been rad before. (`int64`). + /// + /// - `"stat:redundant_bytesread"` : Number of bytes (of uncompressed + /// pixel data) in tiles that were read redundantly. (`int64`). + /// + /// - `"stat:redundant_bytesread"` : Number of tiles read from this file (`int`). + /// + /// - `"stat:image_size"` : Size of the uncompressed image pixel data + /// of this image, in bytes (`int64`). + /// + /// - `"stat:file_size"` : Size of the disk file (possibly compressed) + /// for this image, in bytes (`int64`). + /// + /// - `"stat:timesopened"` : Number of times this file was opened + /// (`int`). + /// + /// - `"stat:iotime"` : Time (in seconds) spent on all I/O for this file + /// (`float`). + /// + /// - `"stat:mipsused"` : Stores 1 if any MIP levels beyond the highest + /// resolution were accessed, otherwise 0. (`int`) + /// + /// - `"stat:is_duplicate"` : Stores 1 if this file was a duplicate of + /// another image, otherwise 0. (`int`) + /// + /// - *Anything else* : For all other data names, the the metadata of + /// the image file will be searched for an item that matches both the + /// name and data type. + /// + /// + /// + /// @param filename + /// The name of the image, as a UTF-8 encoded ustring. + /// @param subimage/miplevel + /// The subimage and MIP level to query. + /// @param dataname + /// The name of the metadata to retrieve. + /// @param datatype + /// TypeDesc describing the data type. + /// @param data + /// Pointer to the caller-owned memory where the values + /// should be stored. It is the caller's responsibility to + /// ensure that `data` points to a large enough storage area + /// to accommodate the `datatype` requested. + /// + /// @returns + /// `true` if `get_image_info()` is able to find the + /// requested `dataname` for the image and it matched the + /// requested `datatype`. If the requested data was not + /// found or was not of the right data type, return `false`. + /// Except for the `"exists"` query, a file that does not + /// exist or could not be read properly as an image also + /// constitutes a query failure that will return `false`. + bool get_image_info(ustring filename, int subimage, int miplevel, + ustring dataname, TypeDesc datatype, void* data); + /// A more efficient variety of `get_image_info()` for cases where you + /// can use an `ImageHandle*` to specify the image and optionally have a + /// `Perthread*` for the calling thread. + bool get_image_info(ImageHandle* file, Perthread* thread_info, int subimage, + int miplevel, ustring dataname, TypeDesc datatype, + void* data); + + /// Copy the ImageSpec that describes the named image file. + /// + /// Note that the spec returned describes the file as it exists in the + /// file, at the base (highest-resolution) MIP level of that subimage. + /// Certain aspects of the in-cache representation may differ from the + /// file (due to ImageCache implementation strategy or options like + /// `"forcefloat"` or `"autotile"`). If you really need to know the + /// in-cache data type, tile size, or how the resolution or tiling changes + /// on a particular MIP level, you should use `get_cache_dimensions()`. + /// + /// @param filename + /// The name of the image, as a UTF-8 encoded ustring. + /// @param spec + /// ImageSpec into which will be copied the spec for the + /// requested image. + /// @param subimage + /// The subimage to query. + /// @returns + /// `true` upon success, `false` upon failure failure (such + /// as being unable to find, open, or read the file, or if + /// it does not contain the designated subimage. + bool get_imagespec(ustring filename, ImageSpec& spec, int subimage = 0); + /// A more efficient variety of `get_imagespec()` for cases where you + /// can use an `ImageHandle*` to specify the image and optionally have a + /// `Perthread*` for the calling thread. + bool get_imagespec(ImageHandle* file, Perthread* thread_info, + ImageSpec& spec, int subimage = 0); + + /// DEPRECATED(3.0) old API. Note that the miplevel and native parameters + /// are ignored: it will always get the native spec of miplevel 0. We + /// recommend switching to the new API. + bool get_imagespec(ustring filename, ImageSpec& spec, int subimage, + int miplevel, bool native = false) + { + return get_imagespec(filename, spec, subimage); + } + /// DEPRECATED(3.0) old API. + bool get_imagespec(ImageHandle* file, Perthread* thread_info, + ImageSpec& spec, int subimage, int miplevel, + bool native = false) + { + return get_imagespec(file, thread_info, spec, subimage); + } + + /// Return a pointer to an ImageSpec that describes the named image file. + /// If the file is found and is an image format that can be read, + /// otherwise return `nullptr`. + /// + /// This method is much more efficient than `get_imagespec()`, since it + /// just returns a pointer to the spec held internally by the ImageCache + /// (rather than copying the spec to the user's memory). However, the + /// caller must beware that the pointer is only valid as long as nobody + /// (even other threads) calls `invalidate()` on the file, or + /// `invalidate_all()`, or destroys the ImageCache. + /// + /// Note that the spec returned describes the file as it exists in the + /// file, at the base (highest-resolution) MIP level of that subimage. + /// Certain aspects of the in-cache representation may differ from the + /// file (due to ImageCache implementation strategy or options like + /// `"forcefloat"` or `"autotile"`). If you really need to know the + /// in-cache data type, tile size, or how the resolution or tiling changes + /// on a particular MIP level, you should use `get_cache_dimensions()`. + /// + /// @param filename + /// The name of the image, as a UTF-8 encoded ustring. + /// @param subimage + /// The subimage to query. + /// @returns + /// A pointer to the spec, if the image is found and able to + /// be opened and read by an available image format plugin, + /// and the designated subimage exists. + const ImageSpec* imagespec(ustring filename, int subimage = 0); + /// A more efficient variety of `imagespec()` for cases where you can + /// use an `ImageHandle*` to specify the image and optionally have a + /// `Perthread*` for the calling thread. + const ImageSpec* imagespec(ImageHandle* file, Perthread* thread_info, + int subimage = 0); + + /// DEPRECATED(3.0) old API. Note that the miplevel and native parameters + /// are ignored: it will always get the native spec of miplevel 0. We + /// recommend switching to the new API. + const ImageSpec* imagespec(ustring filename, int subimage, int miplevel, + bool native = false) + { + return imagespec(filename, subimage); + } + /// DEPRECATED(3.0) old API. + const ImageSpec* imagespec(ImageHandle* file, Perthread* thread_info, + int subimage, int miplevel, bool native = false) + { + return imagespec(file, thread_info, subimage); + } + + /// Copy the image dimensions (x, y, z, width, height, depth, full*, + /// nchannels, format) and data types that describes the named image + /// cache file for the specified subimage and miplevel. It does *not* + /// copy arbitrary named metadata or channel names (thus, for an + /// `ImageSpec` with lots of metadata, it is much less expensive than + /// copying the whole thing with `operator=()`). The associated + /// metadata and channels names can be retrieved with `imagespec()` + /// or `get_imagespec`. + /// + /// @param filename + /// The name of the image, as a UTF-8 encoded ustring. + /// @param spec + /// ImageSpec into which will be copied the dimensions + /// for the requested image. + /// @param subimage/miplevel + /// The subimage and mip level to query. + /// @returns + /// `true` upon success, `false` upon failure failure (such + /// as being unable to find, open, or read the file, or if + /// it does not contain the designated subimage or mip level. + bool get_cache_dimensions(ustring filename, ImageSpec& spec, + int subimage = 0, int miplevel = 0); + /// A more efficient variety of `get_cache_dimensions()` for cases where + /// you can use an `ImageHandle*` to specify the image and optionally + /// have a `Perthread*` for the calling thread. + bool get_cache_dimensions(ImageHandle* file, Perthread* thread_info, + ImageSpec& spec, int subimage = 0, + int miplevel = 0); + + /// Copy into `thumbnail` any associated thumbnail associated with this + /// image (for the first subimage by default, or as set by `subimage`). + /// + /// @param filename + /// The name of the image, as a UTF-8 encoded ustring. + /// @param thumbnail + /// ImageBuf into which will be copied the thumbnail, if it + /// exists. If no thumbnail can be retrieved, `thumb` will + /// be reset to an uninitialized (empty) ImageBuf. + /// @param subimage + /// The subimage to query. + /// @returns + /// `true` upon success, `false` upon failure failure (such + /// as being unable to find, open, or read the file, or if + /// it does not contain a thumbnail). + bool get_thumbnail(ustring filename, ImageBuf& thumbnail, int subimage = 0); + /// A more efficient variety of `get_thumbnail()` for cases where you + /// can use an `ImageHandle*` to specify the image and optionally have a + /// `Perthread*` for the calling thread. + bool get_thumbnail(ImageHandle* file, Perthread* thread_info, + ImageBuf& thumbnail, int subimage = 0); + /// @} + + /// @{ + /// @name Getting Pixels + + /// For an image specified by name, retrieve the rectangle of pixels from + /// the designated subimage and MIP level, storing the pixel values in the + /// memory layout specified by `result`. The pixel values will be + /// converted to the data type specified by `format`. The rectangular + /// region to be retrieved, specified by `roi`, includes `begin` but does + /// not include `end` (much like STL begin/end usage). Requested pixels + /// that are not part of the valid pixel data region of the image file + /// will be filled with zero values. + /// + /// @param filename + /// The name of the image, as a UTF-8 encoded ustring. + /// @param subimage/miplevel + /// The subimage and MIP level to retrieve pixels from. + /// @param roi + /// The range of pixels and channels to retrieve. The pixels + /// retrieved include the begin values but not the end values + /// (much like STL begin/end usage). + /// @param format + /// TypeDesc describing the data type of the values you want + /// to retrieve into `result`. The pixel values will be + /// converted to this type regardless of how they were + /// stored in the cache. + /// @param result + /// An `image_span` describing the memory layout where the + /// pixel values should be stored, including bounds and + /// strides for each dimension. + /// @param cache_chbegin/cache_chend + /// These parameters can be used to tell the ImageCache to + /// read and cache a subset of channels (if not specified or + /// if they denote a non-positive range, all the channels of + /// the file will be stored in the cached tile). + /// @returns `true` upon success, or `false` upon failure. + /// + /// Added in OIIO 3.1, this is the "safe" preferred alternative to + /// the version of read_scanlines that takes raw pointers. + /// + bool get_pixels(ustring filename, int subimage, int miplevel, + const ROI& roi, TypeDesc format, + const image_span& result, int cache_chbegin = 0, + int cache_chend = -1); + /// A more efficient variety of `get_pixels()` for cases where you can use + /// an `ImageHandle*` to specify the image and optionally have a + /// `Perthread*` for the calling thread. + /// + /// Added in OIIO 3.1, this is the "safe" preferred alternative to + /// the version of read_scanlines that takes raw pointers. + bool get_pixels(ImageHandle* file, Perthread* thread_info, int subimage, + int miplevel, const ROI& roi, TypeDesc format, + const image_span& result, int cache_chbegin = 0, + int cache_chend = -1); + + /// A version of `get_pixels()` taking an `image_span`, where the type + /// of the underlying data is `T`. This is a convenience wrapper around + /// the `get_pixels()` that takes an `image_span`. + /// + /// Added in OIIO 3.1, this is the "safe" preferred alternative to + /// the version of read_scanlines that takes raw pointers. + template + bool get_pixels(ustring filename, int subimage, int miplevel, + const ROI& roi, const image_span& result, + int cache_chbegin = 0, int cache_chend = -1) + { + static_assert(!std::is_const_v, + "get_pixels() does not accept image_span"); + return get_pixels(filename, subimage, miplevel, roi, + TypeDescFromC::value(), + as_image_span_writable_bytes(result), cache_chbegin, + cache_chend); + } + /// A more efficient variety of `get_pixels()` taking an `image_span`, + /// for cases where you can use an `ImageHandle*` to specify the image and + /// optionally have a `Perthread*` for the calling thread. + /// + /// Added in OIIO 3.1, this is the "safe" preferred alternative to + /// the version of read_scanlines that takes raw pointers. + template + bool get_pixels(ImageHandle* file, Perthread* thread_info, int subimage, + int miplevel, const ROI& roi, const image_span& result, + int cache_chbegin = 0, int cache_chend = -1) + { + static_assert(!std::is_const_v, + "get_pixels() does not accept image_span"); + return get_pixels(file, thread_info, subimage, miplevel, roi, + TypeDescFromC::value(), + as_image_span_writable_bytes(result), cache_chbegin, + cache_chend); + } + + /// A version of `get_pixels()` taking a `span`, which assumes + /// contiguous strides in all dimensions. This is a convenience wrapper + /// around the `get_pixels()` that takes an `image_span`. + /// + /// Added in OIIO 3.1, this is the "safe" preferred alternative to + /// the version of read_scanlines that takes raw pointers. + template + bool get_pixels(ImageHandle* file, Perthread* thread_info, int subimage, + int miplevel, const ROI& roi, const span& result, + int cache_chbegin = 0, int cache_chend = -1) + { + static_assert(!std::is_const_v, + "get_pixels() does not accept span"); + auto ispan = image_span(result.data(), roi.nchannels(), roi.width(), + roi.height(), roi.depth()); + OIIO_DASSERT(result.size_bytes() == ispan.size_bytes() + && ispan.is_contiguous()); + return get_pixels(file, thread_info, subimage, miplevel, roi, + TypeDescFromC::value(), + as_image_span_writable_bytes(result), cache_chbegin, + cache_chend); + } + /// A more efficient variety of `get_pixels()` taking a `span`, for + /// cases where you can use an `ImageHandle*` to specify the image and + /// optionally have a `Perthread*` for the calling thread. + /// + /// Added in OIIO 3.1, this is the "safe" preferred alternative to + /// the version of read_scanlines that takes raw pointers. + template + bool get_pixels(ustring filename, int subimage, int miplevel, + const ROI& roi, const span& result, + int cache_chbegin = 0, int cache_chend = -1) + { + static_assert(!std::is_const_v, + "get_pixels() does not accept span"); + auto ispan = image_span(result.data(), roi.nchannels(), roi.width(), + roi.height(), roi.depth()); + OIIO_DASSERT(result.size_bytes() == ispan.size_bytes() + && ispan.is_contiguous()); + return get_pixels(filename, subimage, miplevel, roi, + TypeDescFromC::value(), + as_image_span_writable_bytes(result), cache_chbegin, + cache_chend); + } + + /// For an image specified by name, retrieve the rectangle of pixels + /// from the designated subimage and MIP level, storing the pixel values + /// beginning at the address specified by `result` and with the given + /// strides. The pixel values will be converted to the data type + /// specified by `format`. The rectangular region to be retrieved + /// includes `begin` but does not include `end` (much like STL begin/end + /// usage). Requested pixels that are not part of the valid pixel data + /// region of the image file will be filled with zero values. + /// + /// These pointer-based versions are considered "soft-deprecated" in + /// OpenImageIO 3.1, will be marked/warned as deprecated in 3.2, and will + /// be removed in 4.0. + /// + /// @param filename + /// The name of the image, as a UTF-8 encoded ustring. + /// @param subimage/miplevel + /// The subimage and MIP level to retrieve pixels from. + /// @param xbegin/xend/ybegin/yend/zbegin/zend + /// The range of pixels to retrieve. The pixels retrieved + /// include the begin value but not the end value (much like + /// STL begin/end usage). + /// @param chbegin/chend + /// Channel range to retrieve. To retrieve all channels, use + /// `chbegin = 0`, `chend = nchannels`. + /// @param format + /// TypeDesc describing the data type of the values you want + /// to retrieve into `result`. The pixel values will be + /// converted to this type regardless of how they were + /// stored in the file. + /// @param result + /// Pointer to the memory where the pixel values should be + /// stored. It is up to the caller to ensure that `result` + /// points to an area of memory big enough to accommodate + /// the requested rectangle (taking into consideration its + /// dimensions, number of channels, and data format). + /// @param xstride/ystride/zstride + /// The number of bytes between the beginning of successive + /// pixels, scanlines, and image planes, respectively. Any + /// stride values set to `AutoStride` will be assumed to + /// indicate a contiguous data layout in that dimension. + /// @param cache_chbegin/cache_chend These parameters can be used to + /// tell the ImageCache to read and cache a subset of + /// channels (if not specified or if they denote a + /// non-positive range, all the channels of the file will be + /// stored in the cached tile). + /// + /// @returns + /// `true` for success, `false` for failure. + bool get_pixels(ustring filename, int subimage, int miplevel, int xbegin, + int xend, int ybegin, int yend, int zbegin, int zend, + int chbegin, int chend, TypeDesc format, void* result, + stride_t xstride = AutoStride, + stride_t ystride = AutoStride, + stride_t zstride = AutoStride, int cache_chbegin = 0, + int cache_chend = -1); + /// A more efficient variety of `get_pixels()` for cases where you can + /// use an `ImageHandle*` to specify the image and optionally have a + /// `Perthread*` for the calling thread. + /// + /// These pointer-based versions are considered "soft-deprecated" in + /// OpenImageIO 3.1, will be marked/warned as deprecated in 3.2, and will + /// be removed in 4.0. + bool get_pixels(ImageHandle* file, Perthread* thread_info, int subimage, + int miplevel, int xbegin, int xend, int ybegin, int yend, + int zbegin, int zend, int chbegin, int chend, + TypeDesc format, void* result, + stride_t xstride = AutoStride, + stride_t ystride = AutoStride, + stride_t zstride = AutoStride, int cache_chbegin = 0, + int cache_chend = -1); + + /// A simplified `get_pixels()` where all channels are retrieved, + /// strides are assumed to be contiguous. + /// + /// These pointer-based versions are considered "soft-deprecated" in + /// OpenImageIO 3.1, will be marked/warned as deprecated in 3.2, and will + /// be removed in 4.0. + bool get_pixels(ustring filename, int subimage, int miplevel, int xbegin, + int xend, int ybegin, int yend, int zbegin, int zend, + TypeDesc format, void* result); + /// A more efficient variety of `get_pixels()` for cases where you can + /// use an `ImageHandle*` to specify the image and optionally have a + /// `Perthread*` for the calling thread. + /// + /// These pointer-based versions are considered "soft-deprecated" in + /// OpenImageIO 3.1, will be marked/warned as deprecated in 3.2, and will + /// be removed in 4.0. + bool get_pixels(ImageHandle* file, Perthread* thread_info, int subimage, + int miplevel, int xbegin, int xend, int ybegin, int yend, + int zbegin, int zend, TypeDesc format, void* result); + + /// @} + + /// @{ + /// @name Controlling the cache + /// + + /// Invalidate any loaded tiles or open file handles associated with the + /// filename (UTF-8 encoded), so that any subsequent queries will be + /// forced to re-open the file or re-load any tiles (even those that were + /// previously loaded and would ordinarily be reused). A client might do + /// this if, for example, they are aware that an image being held in the + /// cache has been updated on disk. This is safe to do even if other + /// procedures are currently holding reference-counted tile pointers from + /// the named image, but those procedures will not get updated pixels + /// until they release the tiles they are holding. + /// + /// If `force` is true, this invalidation will happen unconditionally; if + /// false, the file will only be invalidated if it has been changed since + /// it was first opened by the ImageCache. + void invalidate(ustring filename, bool force = true); + + /// A more efficient variety of `invalidate()` for cases where you + /// already have an `ImageHandle*` for the file you want to invalidate. + void invalidate(ImageHandle* file, bool force = true); + + /// Invalidate all loaded tiles and close open file handles. This is + /// safe to do even if other procedures are currently holding + /// reference-counted tile pointers from the named image, but those + /// procedures will not get updated pixels (if the images change) until + /// they release the tiles they are holding. + /// + /// If `force` is true, everything will be invalidated, no matter how + /// wasteful it is, but if `force` is false, in actuality files will + /// only be invalidated if their modification times have been changed + /// since they were first opened. + void invalidate_all(bool force = false); + + /// Close any open file handles associated with a named file (UTF-8 + /// encoded), but do not invalidate any image spec information or pixels + /// associated with the files. A client might do this in order to release + /// OS file handle resources, or to make it safe for other processes to + /// modify image files on disk. + void close(ustring filename); + + /// `close()` all files known to the cache. + void close_all(); + + /// An opaque data type that allows us to have a pointer to a tile but + /// without exposing any internals. + using Tile = ImageCacheTile; + + /// Find the tile specified by an image filename (UTF-8 encoded), subimage + /// & miplevel, the coordinates of a pixel, and optionally a channel + /// range. An opaque pointer to the tile will be returned, or `nullptr` + /// if no such file (or tile within the file) exists or can be read. The + /// tile will not be purged from the cache until after `release_tile()` is + /// called on the tile pointer the same number of times that `get_tile()` + /// was called (reference counting). This is thread-safe! If `chend < + /// chbegin`, it will retrieve a tile containing all channels in the file. + Tile* get_tile(ustring filename, int subimage, int miplevel, int x, int y, + int z, int chbegin = 0, int chend = -1); + /// A slightly more efficient variety of `get_tile()` for cases where + /// you can use an `ImageHandle*` to specify the image and optionally + /// have a `Perthread*` for the calling thread. + /// + /// @see `get_pixels()` + Tile* get_tile(ImageHandle* file, Perthread* thread_info, int subimage, + int miplevel, int x, int y, int z, int chbegin = 0, + int chend = -1); + + /// After finishing with a tile, release_tile will allow it to + /// once again be purged from the tile cache if required. + void release_tile(Tile* tile) const; + + /// Retrieve the data type of the pixels stored in the tile, which may + /// be different than the type of the pixels in the disk file. + TypeDesc tile_format(const Tile* tile) const; + + /// Retrieve the ROI describing the pixels and channels stored in the + /// tile. + ROI tile_roi(const Tile* tile) const; + + /// For a tile retrieved by `get_tile()`, return a pointer to the pixel + /// data itself, and also store in `format` the data type that the + /// pixels are internally stored in (which may be different than the + /// data type of the pixels in the disk file). This method should only + /// be called on a tile that has been requested by `get_tile()` but has + /// not yet been released with `release_tile()`. + const void* tile_pixels(Tile* tile, TypeDesc& format) const; + + /// The add_file() call causes a file to be opened or added to the + /// cache. There is no reason to use this method unless you are + /// supplying a custom creator, or configuration, or both. + /// + /// If creator is not NULL, it points to an ImageInput::Creator that + /// will be used rather than the default ImageInput::create(), thus + /// instead of reading from disk, creates and uses a custom ImageInput + /// to generate the image. The 'creator' is a factory that creates the + /// custom ImageInput and will be called like this: + /// + /// std::unique_ptr in (creator()); + /// + /// Once created, the ImageCache owns the ImageInput and is responsible + /// for destroying it when done. Custom ImageInputs allow "procedural" + /// images, among other things. Also, this is the method you use to set + /// up a "writable" ImageCache images (perhaps with a type of ImageInput + /// that's just a stub that does as little as possible). + /// + /// If `config` is not NULL, it points to an ImageSpec with configuration + /// options/hints that will be passed to the underlying + /// ImageInput::open() call. Thus, this can be used to ensure that the + /// ImageCache opens a call with special configuration options. + /// + /// This call (including any custom creator or configuration hints) will + /// have no effect if there's already an image by the same name in the + /// cache. Custom creators or configurations only "work" the FIRST time + /// a particular filename is referenced in the lifetime of the + /// ImageCache. But if replace is true, any existing entry will be + /// invalidated, closed and overwritten. So any subsequent access will + /// see the new file. Existing texture handles will still be valid. + bool add_file(ustring filename, ImageInput::Creator creator = nullptr, + const ImageSpec* config = nullptr, bool replace = false); + + /// Preemptively add a tile corresponding to the named image, at the + /// given subimage, MIP level, and channel range. The tile added is the + /// one whose corner is (x,y,z), and buffer points to the pixels (in the + /// given format, with supplied strides) which will be copied and + /// inserted into the cache and made available for future lookups. + /// If chend < chbegin, it will add a tile containing the full set of + /// channels for the image. Note that if the 'copy' flag is false, the + /// data is assumed to be in some kind of persistent storage and will + /// not be copied, nor will its pixels take up additional memory in the + /// cache. + bool add_tile(ustring filename, int subimage, int miplevel, int x, int y, + int z, int chbegin, int chend, TypeDesc format, + const void* buffer, stride_t xstride = AutoStride, + stride_t ystride = AutoStride, stride_t zstride = AutoStride, + bool copy = true); + + /// Preemptively add a tile corresponding to the named image, at the given + /// subimage, MIP level, and channel range. The tile added is the one + /// whose corner is (x,y,z), and buffer points to the pixels (in the given + /// format) which will be copied and inserted into the cache and made + /// available for future lookups. If chend < chbegin, it will add a tile + /// containing the full set of channels for the image. Note that if the + /// 'copy' flag is false, the data is assumed to be in some kind of + /// persistent storage and will not be copied, nor will its pixels take up + /// additional memory in the cache. + bool add_tile(ustring filename, int subimage, int miplevel, int x, int y, + int z, int chbegin, int chend, TypeDesc format, + const image_span& buffer, bool copy = true); + + /// A version of `add_tile()` taking an `image_span`, where the type of + /// the underlying data is `T`. This is a convenience wrapper around the + /// `add_tile()` that takes an `image_span`. + template + bool add_tile(ustring filename, int subimage, int miplevel, int x, int y, + int z, int chbegin, int chend, const image_span& buffer, + bool copy = true) + { + static_assert(!std::is_const_v, + "add_tile() does not accept image_span"); + return add_tile(filename, subimage, miplevel, x, y, z, chbegin, chend, + TypeDescFromC::value(), as_image_span_bytes(buffer), + copy); + } + + /// @} + + /// @{ + /// @name Errors and statistics + + /// Is there a pending error message waiting to be retrieved? + bool has_error() const; + + /// Return the text of all pending error messages issued against this + /// ImageCache, and clear the pending error message unless `clear` is + /// false. If no error message is pending, it will return an empty + /// string. + std::string geterror(bool clear = true) const; + + /// Returns a big string containing useful statistics about the + /// ImageCache operations, suitable for saving to a file or outputting + /// to the terminal. The `level` indicates the amount of detail in + /// the statistics, with higher numbers (up to a maximum of 5) yielding + /// more and more esoteric information. + std::string getstats(int level = 1) const; + + /// Reset most statistics to be as they were with a fresh ImageCache. + /// Caveat emptor: this does not flush the cache itelf, so the resulting + /// statistics from the next set of texture requests will not match the + /// number of tile reads, etc., that would have resulted from a new + /// ImageCache. + void reset_stats(); + + /// @} + + ImageCache(); + ~ImageCache(); + +private: + friend class OIIO::TextureSystem; + friend class OIIO::TextureSystemImpl; + + // PIMPL idiom + using Impl = ImageCacheImpl; + static void impl_deleter(Impl*); + std::unique_ptr m_impl; + + // User code should never directly construct or destruct an ImageCache. + // Always use ImageCache::create() and ImageCache::destroy(). +}; + + +OIIO_NAMESPACE_3_1_END diff --git a/third_party/tlRender-install-Release/include/OpenImageIO/imageio.h b/third_party/tlRender-install-Release/include/OpenImageIO/imageio.h new file mode 100644 index 00000000..164a1ad0 --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenImageIO/imageio.h @@ -0,0 +1,4565 @@ +// Copyright Contributors to the OpenImageIO project. +// SPDX-License-Identifier: Apache-2.0 +// https://github.com/AcademySoftwareFoundation/OpenImageIO + + +///////////////////////////////////////////////////////////////////////////// +/// \file +/// +/// Provides a simple API that abstracts the reading and writing of +/// images. Subclasses, which may be found in DSO/DLL's, implement +/// particular formats. +/// +///////////////////////////////////////////////////////////////////////////// + +// clang-format off + +#pragma once +#define OPENIMAGEIO_IMAGEIO_H + +#if defined(_MSC_VER) +// Ignore warnings about DLL exported classes with member variables that are template classes. +// This happens with the std::vector and std::string members of the classes below. +# pragma warning(disable : 4251) +#endif + +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + + + +OIIO_NAMESPACE_3_1_BEGIN +/// Type we use to express how many pixels (or bytes) constitute an image, +/// tile, or scanline. +using imagesize_t = uint64_t; + +/// Type we use for stride lengths between pixels, scanlines, or image +/// planes. +using stride_t = int64_t; + +/// Special value to indicate a stride length that should be +/// auto-computed. +inline constexpr stride_t AutoStride = std::numeric_limits::min(); + + + +// Signal that this version of ImageBuf has constructors from spans +#define OIIO_IMAGEINPUT_IMAGE_SPAN_SUPPORT 1 +#define OIIO_IMAGEOUTPUT_IMAGE_SPAN_SUPPORT 1 + + + +/// Pointer to a function called periodically by read_image and +/// write_image. This can be used to implement progress feedback, etc. +/// It takes an opaque data pointer (passed to read_image/write_image) +/// and a float giving the portion of work done so far. It returns a +/// bool, which if 'true' will STOP the read or write. +typedef bool (*ProgressCallback)(void *opaque_data, float portion_done); + + + + +/// ROI is a small helper struct describing a rectangular region of interest +/// in an image. The region is [xbegin,xend) x [begin,yend) x [zbegin,zend), +/// with the "end" designators signifying one past the last pixel in each +/// dimension, a la STL style. +/// +struct ROI { + ///@{ + /// @name ROI data members + /// The data members are: + /// + /// int xbegin, xend, ybegin, yend, zbegin, zend; + /// int chbegin, chend; + /// + /// These describe the spatial extent + /// [xbegin,xend) x [ybegin,yend) x [zbegin,zend) + /// And the channel extent: + /// [chbegin,chend)] + int xbegin, xend; + int ybegin, yend; + int zbegin, zend; + int chbegin, chend; + ///@} + + /// Default constructor is an undefined region. Note that this is also + /// interpreted as All(). + constexpr ROI () noexcept : xbegin(std::numeric_limits::min()), xend(0), + ybegin(0), yend(0), zbegin(0), zend(0), chbegin(0), chend(0) + { } + + /// Constructor with an explicitly defined region. + /// + constexpr ROI (int xbegin, int xend, int ybegin, int yend, + int zbegin=0, int zend=1, int chbegin=0, int chend=10000) noexcept + : xbegin(xbegin), xend(xend), ybegin(ybegin), yend(yend), + zbegin(zbegin), zend(zend), chbegin(chbegin), chend(chend) + { } + + /// Is a region defined? + constexpr bool defined () const noexcept { return (xbegin != std::numeric_limits::min()); } + + ///@{ + /// @name Spatial size functions. + /// The width, height, and depth of the region. + constexpr int width () const noexcept { return xend - xbegin; } ///< Height + constexpr int height () const noexcept { return yend - ybegin; } ///< Width + constexpr int depth () const noexcept { return zend - zbegin; } ///< Depth + ///@} + + /// Number of channels in the region. Beware -- this defaults to a + /// huge number, and to be meaningful you must consider + /// std::min (imagebuf.nchannels(), roi.nchannels()). + constexpr int nchannels () const noexcept { return chend - chbegin; } + + /// Total number of pixels in the region. + constexpr imagesize_t npixels () const noexcept { + return defined() + ? imagesize_t(width()) * imagesize_t(height()) * imagesize_t(depth()) + : 0; + } + + /// All() is an alias for the default constructor, which indicates that + /// it means "all" of the image, or no region restriction. For example, + /// float myfunc (ImageBuf &buf, ROI roi = ROI::All()); + /// Note that this is equivalent to: + /// float myfunc (ImageBuf &buf, ROI roi = {}); + static constexpr ROI All () noexcept { return ROI(); } + + /// Test equality of two ROIs + friend constexpr bool operator== (const ROI &a, const ROI &b) noexcept { + return (a.xbegin == b.xbegin && a.xend == b.xend && + a.ybegin == b.ybegin && a.yend == b.yend && + a.zbegin == b.zbegin && a.zend == b.zend && + a.chbegin == b.chbegin && a.chend == b.chend); + } + /// Test inequality of two ROIs + friend constexpr bool operator!= (const ROI &a, const ROI &b) noexcept { + return (a.xbegin != b.xbegin || a.xend != b.xend || + a.ybegin != b.ybegin || a.yend != b.yend || + a.zbegin != b.zbegin || a.zend != b.zend || + a.chbegin != b.chbegin || a.chend != b.chend); + } + + /// Test if the coordinate is within the ROI. + constexpr bool contains (int x, int y, int z=0, int ch=0) const noexcept { + return x >= xbegin && x < xend && y >= ybegin && y < yend + && z >= zbegin && z < zend && ch >= chbegin && ch < chend; + } + + /// Test if another ROI is entirely within our ROI. + constexpr bool contains (const ROI& other) const noexcept { + return (other.xbegin >= xbegin && other.xend <= xend && + other.ybegin >= ybegin && other.yend <= yend && + other.zbegin >= zbegin && other.zend <= zend && + other.chbegin >= chbegin && other.chend <= chend); + } + + /// Stream output of the range + friend std::ostream & operator<< (std::ostream &out, const ROI &roi) { + out << roi.xbegin << ' ' << roi.xend << ' ' << roi.ybegin << ' ' + << roi.yend << ' ' << roi.zbegin << ' ' << roi.zend << ' ' + << roi.chbegin << ' ' << roi.chend; + return out; + } +}; + + + +/// Union of two regions, the smallest region containing both. +inline constexpr ROI roi_union (const ROI &A, const ROI &B) noexcept { + return (A.defined() && B.defined()) + ? ROI (std::min (A.xbegin, B.xbegin), std::max (A.xend, B.xend), + std::min (A.ybegin, B.ybegin), std::max (A.yend, B.yend), + std::min (A.zbegin, B.zbegin), std::max (A.zend, B.zend), + std::min (A.chbegin, B.chbegin), std::max (A.chend, B.chend)) + : (A.defined() ? A : B); +} + +/// Intersection of two regions. +inline constexpr ROI roi_intersection (const ROI &A, const ROI &B) noexcept { + return (A.defined() && B.defined()) + ? ROI (std::max (A.xbegin, B.xbegin), std::min (A.xend, B.xend), + std::max (A.ybegin, B.ybegin), std::min (A.yend, B.yend), + std::max (A.zbegin, B.zbegin), std::min (A.zend, B.zend), + std::max (A.chbegin, B.chbegin), std::min (A.chend, B.chend)) + : (A.defined() ? A : B); +} + + + + +/// ImageSpec describes the data format of an image -- dimensions, layout, +/// number and meanings of image channels. +/// +/// The `width, height, depth` are the size of the data of this image, i.e., +/// the number of pixels in each dimension. A ``depth`` greater than 1 +/// indicates a 3D "volumetric" image. The `x, y, z` fields indicate the +/// *origin* of the pixel data of the image. These default to (0,0,0), but +/// setting them differently may indicate that this image is offset from the +/// usual origin. +/// Therefore the pixel data are defined over pixel coordinates +/// [`x` ... `x+width-1`] horizontally, +/// [`y` ... `y+height-1`] vertically, +/// and [`z` ... `z+depth-1`] in depth. +/// +/// The analogous `full_width`, `full_height`, `full_depth` and `full_x`, +/// `full_y`, `full_z` fields define a "full" or "display" image window over +/// the region [`full_x` ... `full_x+full_width-1`] horizontally, [`full_y` +/// ... `full_y+full_height-1`] vertically, and [`full_z`... +/// `full_z+full_depth-1`] in depth. +/// +/// Having the full display window different from the pixel data window can +/// be helpful in cases where you want to indicate that your image is a +/// *crop window* of a larger image (if the pixel data window is a subset of +/// the full display window), or that the pixels include *overscan* (if the +/// pixel data is a superset of the full display window), or may simply +/// indicate how different non-overlapping images piece together. +/// +/// For tiled images, `tile_width`, `tile_height`, and `tile_depth` specify +/// that the image is stored in a file organized into rectangular *tiles* +/// of these dimensions. The default of 0 value for these fields indicates +/// that the image is stored in scanline order, rather than as tiles. +/// + +class OIIO_API ImageSpec { +public: + ///@{ + /// @name ImageSpec data members + /// + /// The `ImageSpec` contains data fields for the values that are + /// required to describe nearly any image, and an extensible list of + /// arbitrary attributes that can hold metadata that may be user-defined + /// or specific to individual file formats. + /// + /// Here are the hard-coded data fields: + + int x; ///< origin (upper left corner) of pixel data + int y; ///< origin (upper left corner) of pixel data + int z; ///< origin (upper left corner) of pixel data + int width; ///< width of the pixel data window + int height; ///< height of the pixel data window + int depth; ///< depth of pixel data, >1 indicates a "volume" + int full_x; ///< origin of the full (display) window + int full_y; ///< origin of the full (display) window + int full_z; ///< origin of the full (display) window + int full_width; ///< width of the full (display) window + int full_height; ///< height of the full (display) window + int full_depth; ///< depth of the full (display) window + int tile_width; ///< tile width (0 for a non-tiled image) + int tile_height; ///< tile height (0 for a non-tiled image) + int tile_depth; ///< tile depth (0 for a non-tiled image, + ///< 1 for a non-volume image) + int nchannels; ///< number of image channels, e.g., 4 for RGBA + + TypeDesc format; ///< Data format of the channels. + ///< Describes the native format of the pixel data values + /// themselves, as a `TypeDesc`. Typical values would be + /// `TypeDesc::UINT8` for 8-bit unsigned values, `TypeDesc::FLOAT` + /// for 32-bit floating-point values, etc. + std::vector channelformats; + ///< Optional per-channel data formats. If all channels of the image + /// have the same data format, that will be described by `format` + /// and `channelformats` will be empty (zero length). If there are + /// different data formats for each channel, they will be described + /// in the `channelformats` vector, and the `format` field will + /// indicate a single default data format for applications that + /// don't wish to support per-channel formats (usually this will be + /// the format of the channel that has the most precision). + + std::vector channelnames; + ///< The names of each channel, in order. Typically this will be "R", + ///< "G", "B", "A" (alpha), "Z" (depth), or other arbitrary names. + int alpha_channel; + ///< The index of the channel that represents *alpha* (pixel + ///< coverage and/or transparency). It defaults to -1 if no alpha + ///< channel is present, or if it is not known which channel + ///< represents alpha. + int z_channel; + ///< The index of the channel that represents *z* or *depth* (from + ///< the camera). It defaults to -1 if no depth channel is present, + ///< or if it is not know which channel represents depth. + bool deep; ///< True if the image contains deep data. + ///< If `true`, this indicates that the image describes contains + ///< "deep" data consisting of multiple samples per pixel. If + ///< `false`, it's an ordinary image with one data value (per + ///< channel) per pixel. + ParamValueList extra_attribs; + ///< A list of arbitrarily-named and arbitrarily-typed additional + /// attributes of the image, for any metadata not described by the + /// hard-coded fields described above. This list may be manipulated + /// with the `attribute()` and `find_attribute()` methods. + + ///@} + + /// Constructor: given just the data format, set all other fields to + /// something reasonable. + ImageSpec (TypeDesc format = TypeDesc::UNKNOWN) noexcept; + + /// Constructor: given just the data format (as any type name recognized + /// by the `TypeDesc` constructor), set all other fields to something + /// reasonable. + ImageSpec (string_view format) noexcept : ImageSpec(TypeDesc(format)) {} + + /// Constructs an `ImageSpec` with the given x and y resolution, number + /// of channels, and pixel data format. + /// + /// All other fields are set to the obvious defaults -- the image is an + /// ordinary 2D image (not a volume), the image is not offset or a crop + /// of a bigger image, the image is scanline-oriented (not tiled), + /// channel names are "R", "G", "B"' and "A" (up to and including 4 + /// channels, beyond that they are named "channel *n*"), the fourth + /// channel (if it exists) is assumed to be alpha. + ImageSpec (int xres, int yres, int nchans, TypeDesc fmt = TypeUInt8) noexcept; + + /// Construct an `ImageSpec` with the given x and y resolution, number + /// of channels, and pixel data format name (as any type name recognized + /// by the `TypeDesc` constructor). + ImageSpec (int xres, int yres, int nchans, string_view fmt) noexcept + : ImageSpec(xres, yres, nchans, TypeDesc(fmt)) {} + + /// Construct an `ImageSpec` whose dimensions (both data and "full") and + /// number of channels are given by the `ROI`, pixel data type by `fmt`, + /// and other fields are set to their default values. + explicit ImageSpec (const ROI &roi, TypeDesc fmt = TypeUInt8) noexcept; + + /// Construct an `ImageSpec` from an ROI giving dimensions, and the name + /// of a data type that will be recognized by the `TypeDesc` constructor. + explicit ImageSpec (const ROI &roi, string_view fmt) noexcept + : ImageSpec(roi, TypeDesc(fmt)) {} + + /// Set the data format, and clear any per-channel format information + /// in `channelformats`. + void set_format (TypeDesc fmt) noexcept; + + /// Set the data format, and clear any per-channel format information + /// in `channelformats`. The `fmt` may be a string such as `"uint8"`, + /// or any other type name recognized by the TypeDesc constructor. + void set_format (string_view fmt) noexcept { set_format(TypeDesc(fmt)); } + + /// Sets the `channelnames` to reasonable defaults for the number of + /// channels. Specifically, channel names are set to "R", "G", "B," + /// and "A" (up to and including 4 channels, beyond that they are named + /// "channel*n*". + void default_channel_names () noexcept; + + /// Returns the number of bytes comprising each channel of each pixel + /// (i.e., the size of a single value of the type described by the + /// `format` field). + size_t channel_bytes() const noexcept { return format.size(); } + + /// Return the number of bytes needed for the single specified + /// channel. If native is false (default), compute the size of one + /// channel of `this->format`, but if native is true, compute the size + /// of the channel in terms of the "native" data format of that + /// channel as stored in the file. + size_t channel_bytes (int chan, bool native=false) const noexcept; + + /// Return the number of bytes for each pixel (counting all channels). + /// If `native` is false (default), assume all channels are in + /// `this->format`, but if `native` is true, compute the size of a pixel + /// in the "native" data format of the file (these may differ in + /// the case of per-channel formats). + size_t pixel_bytes (bool native=false) const noexcept; + + /// Return the number of bytes for just the subset of channels in each + /// pixel described by [chbegin,chend). If native is false (default), + /// assume all channels are in this->format, but if native is true, + /// compute the size of a pixel in the "native" data format of the file + /// (these may differ in the case of per-channel formats). + size_t pixel_bytes (int chbegin, int chend, bool native=false) const noexcept; + + /// Returns the number of bytes comprising each scanline, i.e., + /// `pixel_bytes(native) * width` This will return + /// `std::numeric_limits::max()` in the event of an + /// overflow where it's not representable in an `imagesize_t`. + imagesize_t scanline_bytes (bool native=false) const noexcept; + + /// Returns the number of bytes comprising each scanline, if all channels + /// were of the given type. If `type` is `TypeUnknown`, then it returns + /// the bytes a scanline using each channel's native type. This will + /// return `std::numeric_limits::max()` in the event of an + /// overflow where it's not representable in an `imagesize_t`. + imagesize_t scanline_bytes(TypeDesc type) const noexcept; + + /// Return the number of pixels comprising a tile (or 0 if it is not a + /// tiled image). This will return + /// `std::numeric_limits::max()` in the event of an + /// overflow where it's not representable in an `imagesize_t`. + imagesize_t tile_pixels () const noexcept; + + /// Returns the number of bytes comprising an image tile, i.e., + /// `pixel_bytes(native) * tile_width * tile_height * tile_depth` + /// If native is false (default), assume all channels are in + /// `this->format`, but if `native` is true, compute the size of a pixel + /// in the "native" data format of the file (these may differ in the + /// case of per-channel formats). + imagesize_t tile_bytes (bool native=false) const noexcept; + + /// Returns the number of bytes comprising each tile, if all channels + /// were of the given type. If `type` is `TypeUnknown`, then it returns + /// the bytes a scanline using each channel's native type. This will + /// return `std::numeric_limits::max()` in the event of an + /// overflow where it's not representable in an `imagesize_t`. + imagesize_t tile_bytes(TypeDesc type) const noexcept; + + /// Return the number of pixels for an entire image. This will + /// return `std::numeric_limits::max()` in the event of + /// an overflow where it's not representable in an `imagesize_t`. + imagesize_t image_pixels () const noexcept; + + /// Returns the number of bytes comprising an entire image of these + /// dimensions, i.e., + /// `pixel_bytes(native) * width * height * depth` + /// This will return `std::numeric_limits::max()` in the + /// event of an overflow where it's not representable in an + /// `imagesize_t`. If `native` is false (default), assume all channels + /// are in `this->format`, but if `native` is true, compute the size of + /// a pixel in the "native" data format of the file (these may differ in + /// the case of per-channel formats). + imagesize_t image_bytes (bool native=false) const noexcept; + + /// Returns the number of bytes comprising an entire image of these + /// dimensions, if the values were all of type `datatype`. For the + /// special case of `datatype == `TypeUnknown`, compute the size of + /// the image in the "native" data types for all channels. + imagesize_t image_bytes(TypeDesc datatype) const noexcept; + + /// Verify that on this platform, a `size_t` is big enough to hold the + /// number of bytes (and pixels) in a scanline, a tile, and the + /// whole image. If this returns false, the image is much too big + /// to allocate and read all at once, so client apps beware and check + /// these routines for overflows! + bool size_t_safe() const noexcept { + const imagesize_t big = std::numeric_limits::max(); + return image_bytes() < big && scanline_bytes() < big && + tile_bytes() < big; + } + + /// Adjust the stride values, if set to AutoStride, to be the right + /// sizes for contiguous data with the given format, channels, + /// width, height. + static void auto_stride (stride_t &xstride, stride_t &ystride, + stride_t &zstride, stride_t channelsize, + int nchannels, int width, int height) noexcept { + if (xstride == AutoStride) + xstride = nchannels * channelsize; + if (ystride == AutoStride) + ystride = xstride * width; + if (zstride == AutoStride) + zstride = ystride * height; + } + + /// Adjust the stride values, if set to AutoStride, to be the right + /// sizes for contiguous data with the given format, channels, + /// width, height. + static void auto_stride (stride_t &xstride, stride_t &ystride, + stride_t &zstride, TypeDesc format, + int nchannels, int width, int height) noexcept { + auto_stride (xstride, ystride, zstride, format.size(), + nchannels, width, height); + } + + /// Adjust xstride, if set to AutoStride, to be the right size for + /// contiguous data with the given format and channels. + static void auto_stride (stride_t &xstride, TypeDesc format, int nchannels) noexcept { + if (xstride == AutoStride) + xstride = nchannels * format.size(); + } + + /// Add a metadata attribute to `extra_attribs`, with the given name and + /// data type. The `value` span specifies the data to be copied. The data + /// type and total size of `value` must match the `type` (if not, an + /// assertion will be thrown for debug builds). + /// + /// @version 3.1 + template + void attribute(string_view name, TypeDesc type, span value) { + OIIO_DASSERT(BaseTypeFromC::value == type.basetype + && type.size() == value.size_bytes()); + attribute(name, type, OIIO::as_bytes(value)); + } + + /// A version of `attribute()` that takes its value from a span of untyped + /// bytes. The total size of `value` must match the `type` (if not, an + /// assertion will be thrown for debug builds of OIIO, an error will be + /// printed for release builds). + /// + /// @version 3.1 + void attribute(string_view name, TypeDesc type, cspan value); + + /// A version of `attribute()` where the `value` is only a pointer + /// specifying the beginning of the memory where the value should be copied + /// from. This is "unsafe" in the sense that there is no assurance that it + /// points to a sufficient amount of memory, so the span-based versions of + /// `attribute()` are preferred. + /// + /// This was added in version 2.1. + void attribute(string_view name, TypeDesc type, const void *value); + + /// Add an `unsigned int` attribute to `extra_attribs`. + void attribute (string_view name, unsigned int value) { + attribute (name, TypeDesc::UINT, &value); + } + + /// Add an `int` attribute to `extra_attribs`. + void attribute (string_view name, int value) { + attribute (name, TypeDesc::INT, &value); + } + + /// Add a `float` attribute to `extra_attribs`. + void attribute (string_view name, float value) { + attribute (name, TypeDesc::FLOAT, &value); + } + + /// Add a string attribute to `extra_attribs`. + void attribute (string_view name, string_view value); + + /// Add a string attribute (passed as a ustring) to `extra_attribs`. + void attribute (string_view name, ustring value); + + /// Parse a string containing a textual representation of a value of + /// the given `type`, and add that as an attribute to `extra_attribs`. + /// Example: + /// + /// spec.attribute ("temperature", TypeFloat, "-273.15"); + /// + void attribute (string_view name, TypeDesc type, string_view value); + + /// Searches `extra_attribs` for any attributes matching `name` (as a + /// regular expression), removing them entirely from `extra_attribs`. If + /// `searchtype` is anything other than `TypeDesc::UNKNOWN`, matches + /// will be restricted only to attributes with the given type. The name + /// comparison will be case-sensitive if `casesensitive` is true, + /// otherwise in a case-insensitive manner. + void erase_attribute (string_view name, + TypeDesc searchtype=TypeDesc::UNKNOWN, + bool casesensitive=false); + + /// Searches `extra_attribs` for an attribute matching `name`, returning + /// a pointer to the attribute record, or NULL if there was no match. + /// If `searchtype` is anything other than `TypeDesc::UNKNOWN`, matches + /// will be restricted only to attributes with the given type. The name + /// comparison will be exact if `casesensitive` is true, otherwise in a + /// case-insensitive manner if `caseinsensitive` is false. + ParamValue * find_attribute (string_view name, + TypeDesc searchtype=TypeDesc::UNKNOWN, + bool casesensitive=false); + const ParamValue *find_attribute (string_view name, + TypeDesc searchtype=TypeDesc::UNKNOWN, + bool casesensitive=false) const; + + /// Search for the named attribute and return the pointer to its + /// `ParamValue` record, or NULL if not found. This variety of + /// `find_attribute(}` can retrieve items such as "width", which are + /// data members of the `ImageSpec`, but not in `extra_attribs`. The + /// `tmpparam` is a storage area owned by the caller, which is used as + /// temporary buffer in cases where the information does not correspond + /// to an actual `extra_attribs` (in this case, the return value will be + /// `&tmpparam`). The extra names it understands are: + /// + /// - `"x"` `"y"` `"z"` `"width"` `"height"` `"depth"` + /// `"full_x"` `"full_y"` `"full_z"` `"full_width"` `"full_height"` `"full_depth"` + /// + /// Returns the `ImageSpec` fields of those names (despite the + /// fact that they are technically not arbitrary named attributes + /// in `extra_attribs`). All are of type `int`. + /// + /// - `"datawindow"` + /// + /// Without a type, or if requested explicitly as an `int[4]`, + /// returns the OpenEXR-like pixel data min and max coordinates, + /// as a 4-element integer array: `{ x, y, x+width-1, y+height-1 + /// }`. If instead you specifically request as an `int[6]`, it + /// will return the volumetric data window, `{ x, y, z, x+width-1, + /// y+height-1, z+depth-1 }`. + /// + /// - `"displaywindow"` + /// + /// Without a type, or if requested explicitly as an `int[4]`, + /// returns the OpenEXR-like pixel display min and max + /// coordinates, as a 4-element integer array: `{ full_x, full_y, + /// full_x+full_width-1, full_y+full_height-1 }`. If instead you + /// specifically request as an `int[6]`, it will return the + /// volumetric display window, `{ full_x, full_y, full_z, + /// full_x+full_width-1, full_y+full_height-1, full_z+full_depth-1 }`. + /// + /// EXAMPLES + /// + /// ImageSpec spec; // has the info + /// Imath::Box2i dw; // we want the displaywindow here + /// ParamValue tmp; // so we can retrieve pseudo-values + /// TypeDesc int4("int[4]"); // Equivalent: TypeDesc int4(TypeDesc::INT,4); + /// const ParamValue* p = spec.find_attribute ("displaywindow", int4); + /// if (p) + /// dw = Imath::Box2i(p->get(0), p->get(1), + /// p->get(2), p->get(3)); + /// + /// p = spec.find_attribute("temperature", TypeFloat); + /// if (p) + /// float temperature = p->get(); + /// + const ParamValue * find_attribute (string_view name, + ParamValue &tmpparam, + TypeDesc searchtype=TypeDesc::UNKNOWN, + bool casesensitive=false) const; + + /// If the named attribute can be found in the `ImageSpec`, return its + /// data type. If no such attribute exists, return `TypeUnknown`. + /// + /// This was added in version 2.1. + TypeDesc getattributetype (string_view name, + bool casesensitive = false) const; + + /// If the `ImageSpec` contains the named attribute and its type matches + /// `type`, copy the attribute value into the memory pointed to by the + /// span `value` and return `true`. If no such attribute is found, or if + /// it doesn't match the type, return `false` and do not modify `val`. + /// The data type and total size of `value` must match the `type` (if not, + /// an assertion will be thrown for debug builds). + /// + /// EXAMPLES: + /// + /// ImageSpec spec; + /// ... + /// // Retrieving an integer attribute: + /// int orientation = 0; + /// spec.getattribute ("orientation", TypeInt, make_span(orientation)); + /// + /// // Retrieving a string attribute with a char*: + /// const char* compression = nullptr; + /// spec.getattribute ("compression", TypeString, make_span(compression)); + /// + /// // Alternately, retrieving a string with a ustring: + /// ustring compression; + /// spec.getattribute ("compression", TypeString, make_span(compression)); + /// + /// Note that when retrieving a string, you need to pass a span of either + /// `const char*` or `ustring`, not a pointer to the first character of + /// the string. Because the returned values are ustrings, the caller does + /// not need to ever free the memory that contains the characters, which + /// are owned by the internal ustring table. + /// + /// @version 3.1 + template + bool getattribute(string_view name, TypeDesc type, span value, + bool casesensitive = false) const + { + OIIO_DASSERT(BaseTypeFromC::value == type.basetype + && type.size() == value.size_bytes()); + return getattribute(name, type, OIIO::as_writable_bytes(value), + casesensitive); + } + + /// A version of `getattribute()` that stores the value in a span of + /// untyped bytes. The total size of `value` must match the `type` (if + /// not, an assertion will be thrown for debug OIIO builds, an error will + /// be printed for release builds). + /// + /// @version 3.1 + bool getattribute(string_view name, TypeDesc type, span value, + bool casesensitive = false) const; + + /// A version of `getattribute()` where the `value` is only a pointer + /// specifying the beginning of the memory where the value should be + /// copied. This is "unsafe" in the sense that there is no assurance that + /// it points to a sufficient amount of memory, so the span-based versions + /// of `getattribute()` are preferred. + /// + /// EXAMPLES: + /// + /// ImageSpec spec; + /// ... + /// // Retrieving an integer attribute: + /// int orientation = 0; + /// spec.getattribute ("orientation", TypeInt, &orientation); + /// + /// // Retrieving a string attribute with a char*: + /// const char* compression = nullptr; + /// spec.getattribute ("compression", TypeString, &compression); + /// + /// // Alternately, retrieving a string with a ustring: + /// ustring compression; + /// spec.getattribute ("compression", TypeString, &compression); + /// + /// Note that when passing a string, you need to pass a pointer to the + /// `char*`, not a pointer to the first character. Also, the `char*` + /// will end up pointing to characters owned by the `ImageSpec`; the + /// caller does not need to ever free the memory that contains the + /// characters. + /// + /// This was added in version 2.1. + bool getattribute (string_view name, TypeDesc type, void* value, + bool casesensitive = false) const; + + /// Retrieve the named metadata attribute and return its value as an + /// `int`. Any integer type will convert to `int` by truncation or + /// expansion, string data will parsed into an `int` if its contents + /// consist of of the text representation of one integer. Floating point + /// data will not succeed in converting to an `int`. If no such metadata + /// exists, or are of a type that cannot be converted, the `defaultval` + /// will be returned. + int get_int_attribute (string_view name, int defaultval=0) const; + + /// Retrieve the named metadata attribute and return its value as a + /// `float`. Any integer or floating point type will convert to `float` + /// in the obvious way (like a C cast), and so will string metadata if + /// its contents consist of of the text representation of one floating + /// point value. If no such metadata exists, or are of a type that cannot + /// be converted, the `defaultval` will be returned. + float get_float_attribute (string_view name, float defaultval=0) const; + + /// Retrieve any metadata attribute, converted to a string. + /// If no such metadata exists, the `defaultval` will be returned. + string_view get_string_attribute (string_view name, + string_view defaultval = string_view()) const; + + /// For a given parameter `p`, format the value nicely as a string. If + /// `human` is true, use especially human-readable explanations (units, + /// or decoding of values) for certain known metadata. + static std::string metadata_val (const ParamValue &p, bool human=false); + + enum SerialFormat { SerialText, SerialXML }; + enum SerialVerbose { SerialBrief, SerialDetailed, SerialDetailedHuman }; + + /// Returns, as a string, a serialized version of the `ImageSpec`. The + /// `format` may be either `ImageSpec::SerialText` or + /// `ImageSpec::SerialXML`. The `verbose` argument may be one of: + /// `ImageSpec::SerialBrief` (just resolution and other vital + /// statistics, one line for `SerialText`, `ImageSpec::SerialDetailed` + /// (contains all metadata in original form), or + /// `ImageSpec::SerialDetailedHuman` (contains all metadata, in many + /// cases with human-readable explanation). + std::string serialize (SerialFormat format, + SerialVerbose verbose = SerialDetailed) const; + + /// Converts the contents of the `ImageSpec` as an XML string. + std::string to_xml () const; + + /// Populates the fields of the `ImageSpec` based on the XML passed in. + void from_xml (const char *xml); + + /// Hunt for the "Compression" and "CompressionQuality" settings in the + /// spec and turn them into the compression name and quality. This + /// handles compression name/qual combos of the form "name:quality". + std::pair + decode_compression_metadata(string_view defaultcomp = "", + int defaultqual = -1) const; + + /// Helper function to verify that the given pixel range exactly covers a + /// set of 2D tiles. Also returns false if the spec indicates that the + /// image isn't tiled at all. + bool valid_tile_range (int xbegin, int xend, int ybegin, int yend) noexcept { + return (tile_width && + ((xbegin-x) % tile_width) == 0 && + ((ybegin-y) % tile_height) == 0 && + (((xend-x) % tile_width) == 0 || (xend-x) == width) && + (((yend-y) % tile_height) == 0 || (yend-y) == height)); + } + + /// Helper function to verify that the given pixel range exactly covers a + /// set of 3D tiles. Also returns false if the spec indicates that the + /// image isn't tiled at all. + bool valid_tile_range (int xbegin, int xend, int ybegin, int yend, + int zbegin, int zend) noexcept { + return (tile_width && + ((xbegin-x) % tile_width) == 0 && + ((ybegin-y) % tile_height) == 0 && + ((zbegin-z) % tile_depth) == 0 && + (((xend-x) % tile_width) == 0 || (xend-x) == width) && + (((yend-y) % tile_height) == 0 || (yend-y) == height) && + (((zend-z) % tile_depth) == 0 || (zend-z) == depth)); + } + + /// Return the channelformat of the given channel. This is safe even + /// if channelformats is not filled out. + TypeDesc channelformat (int chan) const { + return chan >= 0 && chan < (int)channelformats.size() + ? channelformats[chan] : format; + } + + /// Return the channel name of the given channel. This is safe even if + /// channelnames is not filled out. + string_view channel_name (int chan) const { + return chan >= 0 && chan < (int)channelnames.size() + ? string_view(channelnames[chan]) : ""; + } + + /// Fill in an array of channel formats describing all channels in + /// the image. (Note that this differs slightly from the member + /// data channelformats, which is empty if there are not separate + /// per-channel formats.) + void get_channelformats (std::vector &formats) const { + formats = channelformats; + if ((int)formats.size() < nchannels) + formats.resize (nchannels, format); + } + + /// Return the index of the channel with the given name, or -1 if no + /// such channel is present in `channelnames`. + int channelindex (string_view name) const; + + /// Return pixel data window for this ImageSpec expressed as a ROI. + ROI roi () const noexcept { + return ROI (x, x+width, y, y+height, z, z+depth, 0, nchannels); + } + + /// Return full/display window for this ImageSpec expressed as a ROI. + ROI roi_full () const noexcept { + return ROI (full_x, full_x+full_width, full_y, full_y+full_height, + full_z, full_z+full_depth, 0, nchannels); + } + + /// Set pixel data window parameters (x, y, z, width, height, depth) + /// for this ImageSpec from an ROI. + /// Does NOT change the channels of the spec, regardless of r. + void set_roi (const ROI &r) noexcept { + x = r.xbegin; + y = r.ybegin; + z = r.zbegin; + width = r.width(); + height = r.height(); + depth = r.depth(); + } + + /// Set full/display window parameters (full_x, full_y, full_z, + /// full_width, full_height, full_depth) for this ImageSpec from an ROI. + /// Does NOT change the channels of the spec, regardless of r. + void set_roi_full (const ROI &r) noexcept { + full_x = r.xbegin; + full_y = r.ybegin; + full_z = r.zbegin; + full_width = r.width(); + full_height = r.height(); + full_depth = r.depth(); + } + + /// Copy from `other` the image dimensions (x, y, z, width, height, + /// depth, full*, nchannels, format) and data types. It does *not* copy + /// arbitrary named metadata or channel names (thus, for an `ImageSpec` + /// with lots of metadata, it is much less expensive than copying the + /// whole thing with `operator=()`). + void copy_dimensions (const ImageSpec &other) { + x = other.x; + y = other.y; + z = other.z; + width = other.width; + height = other.height; + depth = other.depth; + full_x = other.full_x; + full_y = other.full_y; + full_z = other.full_z; + full_width = other.full_width; + full_height = other.full_height; + full_depth = other.full_depth; + tile_width = other.tile_width; + tile_height = other.tile_height; + tile_depth = other.tile_depth; + nchannels = other.nchannels; + format = other.format; + channelformats = other.channelformats; + alpha_channel = other.alpha_channel; + z_channel = other.z_channel; + deep = other.deep; + } + + /// Set the metadata to presume that color space is `name` (or to assume + /// nothing about the color space if `name` is empty). The core operation + /// is to set the "oiio:ColorSpace" attribute, but it also removes or + /// alters several other attributes that may hint color space in ways that + /// might be contradictory or no longer true. + /// + /// @version 2.5 + void set_colorspace(string_view name); + + /// Returns `true` for a newly initialized (undefined) `ImageSpec`. + /// (Designated by no channels and undefined data type -- true of the + /// uninitialized state of an ImageSpec, and presumably not for any + /// ImageSpec that is useful or purposefully made.) + bool undefined () const noexcept { + return nchannels == 0 && format == TypeUnknown; + } + + /// Array indexing by string will create an AttrDelegate that enables a + /// convenient shorthand for adding and retrieving values from the spec: + /// + /// 1. Assigning to the delegate adds a metadata attribute: + /// + /// ImageSpec spec; + /// spec["foo"] = 42; // int + /// spec["pi"] = float(M_PI); // float + /// spec["oiio:ColorSpace"] = "sRGB"; // string + /// spec["cameratoworld"] = Imath::Matrix44(...); // matrix + /// + /// Be very careful, the attribute's type will be implied by the C++ + /// type of what you assign. + /// + /// 2. String data may be retrieved directly, and for other types, the + /// delegate supports a get() that retrieves an item of type T: + /// + /// std::string colorspace = spec["oiio:ColorSpace"]; + /// int dither = spec["oiio:dither"].get(); + /// + /// This was added in version 2.1. + AttrDelegate operator[](string_view name) + { + return { this, name }; + } + AttrDelegate operator[](string_view name) const + { + return { this, name }; + } +}; + + + + +/// ImageInput abstracts the reading of an image file in a file +/// format-agnostic manner. +class OIIO_API ImageInput { +public: + /// unique_ptr to an ImageInput + using unique_ptr = std::unique_ptr; + + /// @{ + /// @name Creating an ImageInput + + /// Create an ImageInput subclass instance that is able to read the + /// given file and open it, returning a `unique_ptr` to the ImageInput + /// if successful. The `unique_ptr` is set up with an appropriate + /// deleter so the ImageInput will be properly closed and deleted when + /// the `unique_ptr` goes out of scope or is reset. If the open fails, + /// return an empty `unique_ptr` and set an error that can be retrieved + /// by `OIIO::geterror()`. + /// + /// The `config`, if not nullptr, points to an ImageSpec giving hints, + /// requests, or special instructions. ImageInput implementations are + /// free to not respond to any such requests, so the default + /// implementation is just to ignore `config`. + /// + /// `open()` will first try to make an ImageInput corresponding to + /// the format implied by the file extension (for example, `"foo.tif"` + /// will try the TIFF plugin), but if one is not found or if the + /// inferred one does not open the file, every known ImageInput type + /// will be tried until one is found that will open the file. + /// + /// @param filename + /// The name of the file to open, UTF-8 encoded. + /// + /// @param config + /// Optional pointer to an ImageSpec whose metadata contains + /// "configuration hints." + /// + /// @param ioproxy + /// Optional pointer to an IOProxy to use (not supported by all + /// formats, see `supports("ioproxy")`). The caller retains + /// ownership of the proxy. + /// + /// @returns + /// A `unique_ptr` that will close and free the ImageInput when + /// it exits scope or is reset. The pointer will be empty if the + /// required writer was not able to be created. + static unique_ptr open (const std::string& filename, + const ImageSpec *config = nullptr, + Filesystem::IOProxy* ioproxy = nullptr); + + /// Create and open an ImageInput using a UTF-16 encoded wstring filename. + static unique_ptr open (const std::wstring& filename, + const ImageSpec *config = nullptr, + Filesystem::IOProxy* ioproxy = nullptr) { + return open(Strutil::utf16_to_utf8(filename), config, ioproxy); + } + + /// Create and return an ImageInput implementation that is able to read + /// the given file or format. If `do_open` is true (and the `filename` + /// is the name of a file, not just a format), fully open it if possible + /// (using the optional `config` configuration spec, if supplied), + /// otherwise just create the ImageInput but don't open it. The + /// plugin_searchpath parameter is an override of the searchpath. + /// colon-separated list of directories to search for ImageIO plugin + /// DSO/DLL's (not a searchpath for the image itself!). + /// + /// If the `filename` parameter is the name of a file format (such as + /// "openexr"), it will create an ImageInput that reads that particular + /// format. If the name is a file extension (such as "exr" or ".exr"), + /// it will guess the file format from the extension and return that + /// type of ImageInput. + /// + /// If `filename` is a full file name (such as "hawaii.exr"), it will + /// create an ImageInput that reads the format implied by the file + /// extension (".tif") and try to open the file with that reader. If the + /// file can be opened and appears to be of the correct type, then that + /// ImageInput (after being closed) will be returned to the caller. But + /// if it fails (say, because the file type does not match the + /// extension), then every known kind of image reader will be tried in + /// turn, until one can be found that succeeds in opening that file. The + /// `create()` file will fail entirely only if no known image reader + /// type succeeds. + /// + /// If the caller intends to immediately open the file, then it is often + /// simpler to call static `ImageInput::open()`. + /// + /// @param filename + /// The name of an image file, or a file extension, or the name + /// of a file format. The filename is UTF-8 encoded. + /// + /// @param do_open + /// If `true`, not only create but also open the file. + /// + /// @param config + /// Optional pointer to an ImageSpec whose metadata contains + /// "configuration hints" for the ImageInput implementation. + /// + /// @param ioproxy + /// Optional pointer to an IOProxy to use (not supported by all + /// formats, see `supports("ioproxy")`). The caller retains + /// ownership of the proxy. If this is not supplied, it is still + /// possible to set the proxy with a call to `set_proxy()` prior + /// to `open()`. + /// + /// @param plugin_searchpath + /// An optional colon-separated list of directories to search + /// for OpenImageIO plugin DSO/DLL's. + /// + /// @returns + /// A `unique_ptr` that will close and free the ImageInput when + /// it exits scope or is reset. The pointer will be empty if the + /// required writer was not able to be created. + static unique_ptr create (string_view filename, bool do_open=false, + const ImageSpec *config=nullptr, + Filesystem::IOProxy* ioproxy = nullptr, + string_view plugin_searchpath = ""); + + /// Create an ImageInput using a UTF-16 encoded wstring filename. + static unique_ptr create (const std::wstring& filename, bool do_open=false, + const ImageSpec *config=nullptr, + Filesystem::IOProxy* ioproxy = nullptr, + string_view plugin_searchpath = "") { + return create(Strutil::utf16_to_utf8(filename), do_open, config, + ioproxy, plugin_searchpath); + } + + /// @} + +protected: + ImageInput (); +public: + virtual ~ImageInput (); + + /// Return the name of the format implemented by this class. + virtual const char *format_name (void) const = 0; + + /// Given the name of a "feature", return whether this ImageInput + /// supports output of images with the given properties. Most queries + /// will simply return 0 for "doesn't support" and 1 for "supports it," + /// but it is acceptable to have queries return other nonzero integers + /// to indicate varying degrees of support or limits (but should be + /// clearly documented as such). + /// + /// Feature names that ImageInput implementations are expected to + /// recognize include: + /// + /// - `"arbitrary_metadata"` : Does this format allow metadata with + /// arbitrary names and types? + /// + /// - `"exif"` : + /// Can this format store Exif camera data? + /// + /// - `"cicp"` : + /// Does this format support embedding CICP metadata? + /// + /// - `"ioproxy"` : + /// Does this format reader support reading from an `IOProxy`? + /// + /// - `"iptc"` : + /// Can this format store IPTC data? + /// + /// - `"procedural"` : + /// Can this format create images without reading from a disk + /// file? + /// + /// - `"thumbnail"` : + /// Does this format reader support retrieving a reduced + /// resolution copy of the image via the `thumbnail()` method? + /// + /// - `"multiimage"` : + /// Does this format support multiple subimages within a file? + /// (Note: this doesn't necessarily mean that the particular + /// file this ImageInput is reading has multiple subimages.) + /// + /// - `"mipmap"` : + /// Does this format support multiple resolutions for an + /// image/subimage? (Note: this doesn't necessarily mean that the + /// particular file this ImageInput is reading is MIP-mapped.) + /// This query was added in OpenImageIO 3.1. + /// + /// - `"noimage"` : + /// Does this format allow 0x0 sized images, i.e. an image file + /// with metadata only and no pixels? + /// + /// This list of queries may be extended in future releases. Since this + /// can be done simply by recognizing new query strings, and does not + /// require any new API entry points, addition of support for new + /// queries does not break ``link compatibility'' with + /// previously-compiled plugins. + virtual int supports (string_view feature OIIO_MAYBE_UNUSED) const { + return false; + } + + /// Return true if the `filename` names a file of the type for this + /// ImageInput. The implementation will try to determine this as + /// efficiently as possible, in most cases much less expensively than + /// doing a full `open()`. Note that there can be false positives: a + /// file can appear to be of the right type (i.e., `valid_file()` + /// returning `true`) but still fail a subsequent call to `open()`, such + /// as if the contents of the file are truncated, nonsensical, or + /// otherwise corrupted. The filename is UTF-8 encoded. + /// + /// @returns + /// `true` upon success, or `false` upon failure. + virtual bool valid_file (const std::string& filename) const; + + /// Check valid file using a UTF-16 encoded wstring filename. + bool valid_file (const std::wstring& filename) const { + return valid_file(Strutil::utf16_to_utf8(filename)); + } + + /// Return true if the `ioproxy` represents a file of the type for this + /// ImageInput. The implementation will try to determine this as + /// efficiently as possible, in most cases much less expensively than + /// doing a full `open()`. Note that there can be false positives: a + /// file can appear to be of the right type (i.e., `valid_file()` + /// returning `true`) but still fail a subsequent call to `open()`, such + /// as if the contents of the file are truncated, nonsensical, or + /// otherwise corrupted. + /// + /// @returns + /// `true` upon success, or `false` upon failure. + virtual bool valid_file (Filesystem::IOProxy* ioproxy) const; + + /// Opens the file with given name and seek to the first subimage in the + /// file. Various file attributes are put in `newspec` and a copy + /// is also saved internally to the `ImageInput` (retrievable via + /// `spec()`. From examining `newspec` or `spec()`, you can + /// discern the resolution, if it's tiled, number of channels, native + /// data format, and other metadata about the image. + /// + /// @param name + /// Filename to open, UTF-8 encoded. + /// + /// @param newspec + /// Reference to an ImageSpec in which to deposit a full + /// description of the contents of the first subimage of the + /// file. + /// + /// @returns + /// `true` if the file was found and opened successfully. + virtual bool open (const std::string& name, ImageSpec &newspec) = 0; + + /// Open the ImageInput using a UTF-16 encoded wstring filename. + bool open (const std::wstring& name, ImageSpec &newspec) { + return open(Strutil::utf16_to_utf8(name), newspec); + } + + /// Open file with given name, similar to `open(name,newspec)`. The + /// `config` is an ImageSpec giving requests or special instructions. + /// ImageInput implementations are free to not respond to any such + /// requests, so the default implementation is just to ignore config and + /// call regular `open(name,newspec)`. + /// + /// @param name + /// Filename to open, UTF-8 encoded. + /// + /// @param newspec + /// Reference to an ImageSpec in which to deposit a full + /// description of the contents of the first subimage of the + /// file. + /// + /// @param config + /// An ImageSpec whose metadata contains "configuration hints" + /// for the ImageInput implementation. + /// + /// @returns + /// `true` if the file was found and opened successfully. + virtual bool open (const std::string& name, ImageSpec &newspec, + const ImageSpec& config OIIO_MAYBE_UNUSED) { + return open(name,newspec); + } + /// Open the ImageInput using a UTF-16 encoded wstring filename. + bool open (const std::wstring& name, ImageSpec &newspec, + const ImageSpec& config OIIO_MAYBE_UNUSED) { + return open(name,newspec); + } + + /// Return a reference to the image specification of the current + /// subimage/MIPlevel. Note that the contents of the spec are invalid + /// before `open()` or after `close()`, and may change with a call to + /// `seek_subimage()`. It is thus not thread-safe, since the spec may + /// change if another thread calls `seek_subimage`, or any of the + /// `read_*()` functions that take explicit subimage/miplevel. + /// + /// This method should be considered deprecated, and we advise + /// always using the thread-safe `spec(subimage, miplevel)` method + /// instead. + virtual const ImageSpec &spec (void) const { return m_spec; } + + /// Return a full copy of the ImageSpec of the designated subimage and + /// MIPlevel. This method is thread-safe, but it is potentially + /// expensive, due to the work that needs to be done to fully copy an + /// ImageSpec if there is lots of named metadata to allocate and copy. + /// See also the less expensive `spec_dimensions()`. Errors (such as + /// having requested a nonexistent subimage) are indicated by returning + /// an ImageSpec with `format==TypeUnknown`, but does not call + /// errorfmt() to set an error message merely for being an out-of-range + /// subimage or miplevel. + virtual ImageSpec spec (int subimage, int miplevel=0); + + /// Return a copy of the ImageSpec of the designated subimage and + /// miplevel, but only the dimension and type fields. Just as with a + /// call to `ImageSpec::copy_dimensions()`, neither the channel names + /// nor any of the arbitrary named metadata will be copied, thus this is + /// a relatively inexpensive operation if you don't need that + /// information. It is guaranteed to be thread-safe. Errors (such as + /// having requested a nonexistent subimage) are indicated by returning + /// an ImageSpec with `format==TypeUnknown`, but does not call + /// errorfmt() to set an error message merely for being an out-of-range + /// subimage or miplevel. + virtual ImageSpec spec_dimensions (int subimage, int miplevel=0); + + /// Retrieve a reduced-resolution ("thumbnail") version of the given + /// subimage. It is guaranteed to be thread-safe. + /// + /// @param thumb + /// A reference to an `ImageBuf` which will be overwritten with + /// the thumbnail image. + /// @param subimage + /// The index of the subimage in the file whose thumbnail is to + /// be retrieved. + /// @returns + /// `true` upon success, `false` if no thumbnail was available, + /// or if this file format (or reader) does not support + /// thumbnails. + /// + /// @note This method was added to OpenImageIO 2.3. + virtual bool get_thumbnail(ImageBuf& thumb, int subimage) { + return false; + } + + /// Close an open ImageInput. The call to close() is not strictly + /// necessary if the ImageInput is destroyed immediately afterwards, + /// since it is required for the destructor to close if the file is + /// still open. + /// + /// @returns + /// `true` upon success, or `false` upon failure. + virtual bool close () = 0; + + /// Returns the index of the subimage that is currently being read. + /// The first subimage (or the only subimage, if there is just one) + /// is number 0. + virtual int current_subimage (void) const { return 0; } + + /// Returns the index of the MIPmap image that is currently being read. + /// The highest-res MIP level (or the only level, if there is just + /// one) is number 0. + virtual int current_miplevel (void) const { return 0; } + + /// Seek to the given subimage and MIP-map level within the open image + /// file. The first subimage of the file has index 0, the highest- + /// resolution MIP level has index 0. The new subimage's vital + /// statistics may be retrieved by `this->spec()`. The reader is + /// expected to give the appearance of random access to subimages and + /// MIP levels -- in other words, if it can't randomly seek to the given + /// subimage/level, it should transparently close, reopen, and + /// sequentially read through prior subimages and levels. + /// + /// Inability to seek to an out-of-range subimage or miplevel is indicated + /// by returning false, but it does not call errorfmt() to set an error + /// message unless it's the result of a damaged file. + /// + /// @returns + /// `true` upon success, or `false` upon failure. A failure may + /// indicate that no such subimage or MIP level exists in the + /// file. + virtual bool seek_subimage (int subimage, int miplevel) { + // Default implementation assumes no support for subimages or + // mipmaps, so there is no work to do. + return subimage == current_subimage() && miplevel == current_miplevel(); + } + +#if OIIO_DISABLE_DEPRECATED < OIIO_MAKE_VERSION(2,0,0) && !defined(OIIO_DOXYGEN) + // Old version for backwards-compatibility: pass reference to newspec. + // Some day this will be deprecated. + OIIO_DEPRECATED("Prefer the version that doesn't take an ImageSpec argument (2.0)") + bool seek_subimage (int subimage, int miplevel, ImageSpec &newspec) { + bool ok = seek_subimage (subimage, miplevel); + if (ok) + newspec = spec(); + return ok; + } +#endif + +#if OIIO_DISABLE_DEPRECATED < OIIO_MAKE_VERSION(2,1,0) && !defined(OIIO_DOXYGEN) + // Seek to the given subimage -- backwards-compatible call that + // doesn't worry about MIP-map levels at all. + OIIO_DEPRECATED("Prefer the version that takes a mipmap argument (2.1)") + bool seek_subimage (int subimage, ImageSpec &newspec) { + bool ok = seek_subimage (subimage, 0 /* miplevel */); + if (ok) + newspec = spec(subimage); + return ok; + } +#endif + + // clang-format on + + /// @name Reading pixels ("safe" methods with bounded spans) + /// + /// Common features of all the `read` methods: + /// + /// * There is a base case that takes a `image_span` describing + /// untyped memory layout and a `TypeDesc` describing the data type + /// that the values should be converted to (or TypeUnknown to keep + /// the data in its "native" file types with no conversion). + /// + /// * The type-aware versions that accept an `image_span` (for + /// potentially non-contiguous data) or `span` (for contiguous data) + /// and understand to convert the data into the given `T` type. + /// + /// * The image_span (in either case) includes the memory bounds and + /// stride lengths (in bytes) between channels, pixels, scanlines, and + /// volumetric slices. + /// + /// * Any *range* parameters (such as `ybegin` and `yend`) describe a + /// "half open interval", meaning that `begin` is the first item and + /// `end` is *one past the last item*. That means that the number of + /// items is `end - begin`. + /// + /// * For ordinary 2D (non-volumetric) images, any `z` or `zbegin` + /// coordinates should be 0 and any `zend` should be 1, indicating + /// that only a single image "plane" exists. + /// + /// * Some read methods take a channel range [chbegin,chend) to allow + /// reading of a contiguous subset of channels (chbegin=0, + /// chend=spec.nchannels reads all channels). + /// + /// * ImageInput readers are expected to give the appearance of random + /// access -- in other words, if it can't randomly seek to the given + /// scanline or tile, it should transparently close, reopen, and + /// sequentially read through prior scanlines. + /// + /// * All read functions return `true` for success, `false` for failure + /// (after which a call to `geterror()` may retrieve a specific error + /// message). + /// + + /// Read the entire image of `spec.width x spec.height x spec.depth` + /// pixels into a buffer with the given strides and in the desired + /// data format. + /// + /// Depending on the spec, this will read either all tiles or all + /// scanlines. Assume that data points to a layout in row-major order. + /// + /// This version of read_image, because it passes explicit subimage and + /// miplevel, does not require a separate call to seek_subimage, and is + /// guaranteed to be thread-safe against other concurrent calls to any + /// of the read_* methods that take an explicit subimage/miplevel (but + /// not against any other ImageInput methods). + /// + /// Added in OIIO 3.1, this is the "safe" preferred alternative to + /// the version of read_image that takes raw pointers. + /// + /// @param subimage The subimage to read from (starting with 0). + /// @param miplevel The MIP level to read (0 is the highest + /// resolution level). + /// @param chbegin/chend + /// The channel range to read. If chend is -1, it + /// will automatically be set to spec.nchannels. + /// @param format A TypeDesc describing the type of the pixel data + /// that `data`'s memory contains. Use `TypeUnknown` + /// to indicate that you want the native data format + /// with no type conversion. + /// @param data An `image_span` describing the memory + /// extent of the data buffer and including the sizes + /// and byte strides for each dimension (channel, x, + /// y, and z). + /// @returns `true` upon success, or `false` upon failure. + /// + virtual bool read_image(int subimage, int miplevel, int chbegin, int chend, + TypeDesc format, const image_span& data); + + /// A version of `read_image()` taking an `image_span`, where the type + /// of the underlying data is `T`. This is a convenience wrapper around + /// the `read_image()` that takes an `image_span`. + template + bool read_image(int subimage, int miplevel, int chbegin, int chend, + const image_span& data) + { + static_assert(!std::is_const_v, + "read_image() does not accept image_span"); + return read_image(subimage, miplevel, chbegin, chend, + TypeDescFromC::value(), + as_image_span_writable_bytes(data)); + } + + /// A version of `read_image()` taking a `span`, which assumes + /// contiguous strides in all dimensions. This is a convenience wrapper + /// around the `read_image()` that takes an `image_span`. + template + bool read_image(int subimage, int miplevel, int chbegin, int chend, + span data) + { + static_assert(!std::is_const_v, + "read_image() does not accept span"); + ImageSpec spec = spec_dimensions(subimage, miplevel); + if (chend < 0 || chend > spec.nchannels) + chend = spec.nchannels; + auto ispan = image_span(data.data(), chend - chbegin, spec.width, + spec.height, spec.depth); + OIIO_DASSERT(data.size_bytes() == ispan.size_bytes() + && ispan.is_contiguous()); + return read_image(subimage, miplevel, chbegin, chend, ispan); + } + + /// Read multiple scanlines that include pixels (*,y) for all ybegin <= y + /// < yend in the specified subimage and mip level, into `data`, using the + /// strides given and converting to the requested data `format` + /// (TypeUnknown indicates no conversion, just copy native data types). + /// Only channels [chbegin,chend) will be read/copied (chbegin=0, + /// chend=nchannels reads all channels, and chend=-1 also means the same + /// thing). + /// + /// This method, does not require a separate call to seek_subimage, and is + /// guaranteed to be thread-safe against other concurrent calls to any of + /// the read_* methods that take an explicit subimage/miplevel (but not + /// against any other non-thread-safe ImageInput methods). + /// + /// @param subimage The subimage to read from (starting with 0). + /// @param miplevel The MIP level to read (0 is the highest + /// resolution level). + /// @param ybegin/yend The y range of the scanlines to read. + /// @param chbegin/chend + /// The channel range to read. If chend is -1, it + /// will automatically be set to spec.nchannels. + /// @param format A TypeDesc describing the type of the pixel data + /// that `data`'s memory contains. Use `TypeUnknown` + /// to indicate that you want the native data format + /// with no type conversion. + /// @param data An `image_span` describing the memory + /// extent of the data buffer and including the sizes + /// and byte strides for each dimension (channel, x, + /// y, and z). + /// @returns `true` upon success, or `false` upon failure. + /// + /// Added in OIIO 3.1, this is the "safe" preferred alternative to + /// the version of read_scanlines that takes raw pointers. + /// + virtual bool read_scanlines(int subimage, int miplevel, int ybegin, + int yend, int chbegin, int chend, + TypeDesc format, + const image_span& data); + + /// A version of `read_scanlines()` taking an `image_span`, where the + /// type of the underlying data is `T`. This is a convenience wrapper + /// around the `read_scanlines()` that takes an `image_span`. + template + bool read_scanlines(int subimage, int miplevel, int ybegin, int yend, + int chbegin, int chend, const image_span& data) + { + static_assert(!std::is_const_v, + "read_scanlines() does not accept span"); + // reduce to type + image_span + return read_scanlines(subimage, miplevel, ybegin, yend, chbegin, chend, + TypeDescFromC::value(), + as_image_span_writable_bytes(data)); + } + + /// A version of `read_scanlines()` taking a `span`, which assumes + /// contiguous strides in all dimensions. This is a convenience wrapper + /// around the `read_scanlines()` that takes an `image_span`. + template + bool read_scanlines(int subimage, int miplevel, int ybegin, int yend, + int chbegin, int chend, span data) + { + static_assert(!std::is_const_v, + "read_scanlines() does not accept span"); + // reduce to type + image_span + ImageSpec spec = spec_dimensions(subimage, miplevel); + if (chend < 0 || chend > spec.nchannels) + chend = spec.nchannels; + auto ispan = image_span(data.data(), chend - chbegin, spec.width, + spec.height, 1); + return read_scanlines(subimage, miplevel, ybegin, yend, chbegin, chend, + ispan); + } + + /// Read the block of multiple tiles that include all pixels in + /// + /// [xbegin,xend) X [ybegin,yend) X [zbegin,zend) + /// + /// The begin/end pairs must correctly delineate tile boundaries, with + /// the exception that it may also be the end of the image data if the + /// image resolution is not a whole multiple of the tile size. + /// + /// This version of read_tiles, because it passes explicit subimage and + /// miplevel, does not require a separate call to seek_subimage, and is + /// guaranteed to be thread-safe against other concurrent calls to any + /// of the read_* methods that take an explicit subimage/miplevel (but + /// not against any other ImageInput methods). + /// + /// @param subimage The subimage to read from (starting with 0). + /// @param miplevel The MIP level to read (0 is the highest + /// resolution level). + /// @param xbegin/xend The x range of the pixels covered by the group + /// of tiles being read. + /// @param ybegin/yend The y range of the pixels covered by the tiles. + /// @param zbegin/zend The z range of the pixels covered by the tiles + /// (for a 2D image, zbegin=0 and zend=1). + /// @param chbegin/chend + /// The channel range to read. + /// @param format A TypeDesc describing the type of the pixel data + /// that `data`'s memory contains. Use `TypeUnknown` + /// to indicate that you want the native data format + /// with no type conversion. + /// @param data An `image_span` describing the memory + /// extent of the data buffer and including the sizes + /// and byte strides for each dimension (channel, x, + /// y, and z). + /// @returns `true` upon success, or `false` upon failure. + /// + /// Added in OIIO 3.1, this is the "safe" preferred alternative to + /// the version of read_tiles that takes raw pointers. + /// + /// @note The call will fail if the image is not tiled, or if the pixel + /// ranges do not fall along tile (or image) boundaries, or if it is not + /// a valid tile range. + virtual bool read_tiles(int subimage, int miplevel, int xbegin, int xend, + int ybegin, int yend, int zbegin, int zend, + int chbegin, int chend, TypeDesc format, + const image_span& data); + + /// A version of `read_tiles()` taking an `image_span`, where the type + /// of the underlying data is `T`. This is a convenience wrapper around + /// the `read_tiles()` that takes an `image_span`. + template + bool read_tiles(int subimage, int miplevel, int xbegin, int xend, + int ybegin, int yend, int zbegin, int zend, int chbegin, + int chend, const image_span& data) + { + return read_tiles(subimage, miplevel, xbegin, xend, ybegin, yend, + zbegin, zend, chbegin, chend, + TypeDescFromC::value(), + as_image_span_writable_bytes(data)); + } + + /// A version of `read_tiles()` taking a `cspan`, which assumes + /// contiguous strides in all dimensions. This is a convenience wrapper + /// around the `read_tiles()` that takes an `image_span`. + template + bool read_tiles(int subimage, int miplevel, int xbegin, int xend, + int ybegin, int yend, int zbegin, int zend, int chbegin, + int chend, span data) + { + static_assert(!std::is_const_v, + "read_tiles() does not accept span"); + // reduce to type + image_span + ImageSpec spec = spec_dimensions(subimage, miplevel); + if (chend < 0 || chend > spec.nchannels) + chend = spec.nchannels; + auto ispan = image_span(data.data(), chend - chbegin, xend - xbegin, + yend - ybegin, zend - zbegin); + OIIO_DASSERT(data.size_bytes() >= ispan.size_bytes() + && ispan.is_contiguous()); + return read_tiles(subimage, miplevel, xbegin, xend, ybegin, yend, + zbegin, zend, chbegin, chend, ispan); + } + + // clang-format off + + /// Read deep scanlines containing pixels (*,y,z), for all y in the + /// range [ybegin,yend) into `deepdata`. This will fail if it is not a + /// deep file. + /// + /// @param subimage The subimage to read from (starting with 0). + /// @param miplevel The MIP level to read (0 is the highest + /// resolution level). + /// @param chbegin/chend + /// The channel range to read. + /// @param ybegin/yend The y range of the scanlines being passed. + /// @param z The z coordinate of the scanline. + /// @param deepdata A `DeepData` object into which the data for + /// these scanlines will be placed. + /// @returns `true` upon success, or `false` upon failure. + virtual bool read_native_deep_scanlines (int subimage, int miplevel, + int ybegin, int yend, int z, + int chbegin, int chend, + DeepData &deepdata); + + /// Read into `deepdata` the block of native deep data tiles that + /// include all pixels and channels specified by pixel range. + /// + /// @param subimage The subimage to read from (starting with 0). + /// @param miplevel The MIP level to read (0 is the highest + /// resolution level). + /// @param xbegin/xend The x range of the pixels covered by the group + /// of tiles being read. + /// @param ybegin/yend The y range of the pixels covered by the tiles. + /// @param zbegin/zend The z range of the pixels covered by the tiles + /// (for a 2D image, zbegin=0 and zend=1). + /// @param chbegin/chend + /// The channel range to read. + /// @param deepdata A `DeepData` object into which the data for + /// these tiles will be placed. + /// @returns `true` upon success, or `false` upon failure. + /// + /// @note The call will fail if the image is not tiled, or if the pixel + /// ranges do not fall along tile (or image) boundaries, or if it is not + /// a valid tile range. + virtual bool read_native_deep_tiles (int subimage, int miplevel, + int xbegin, int xend, + int ybegin, int yend, + int zbegin, int zend, + int chbegin, int chend, + DeepData &deepdata); + + /// Read the entire deep data image of spec.width x spec.height x + /// spec.depth pixels, all channels, into `deepdata`. + /// + /// @param subimage The subimage to read from (starting with 0). + /// @param miplevel The MIP level to read (0 is the highest + /// resolution level). + /// @param deepdata A `DeepData` object into which the data for + /// the image will be placed. + /// @returns `true` upon success, or `false` upon failure. + virtual bool read_native_deep_image (int subimage, int miplevel, + DeepData &deepdata); + + /// @} + + /// @{ + /// @name Reading pixels (unsafe methods with pointers and strides) + /// + /// These methods are the "unsafe" versions of the `read` methods, which + /// take raw pointers and strides. They are provided for backwards + /// compatibility with older code, but the preferred interface is to use + /// the `read` methods that take `image_span` or `span` arguments, + /// which are bounds-safe and type-aware. + /// + /// These pointer-based versions are considered "soft-deprecated" in + /// OpenImageIO 3.1, will be marked/warned as deprecated in 3.2, and will + /// be removed in 4.0. + /// + /// Common features of all the `read` methods: + /// + /// * The `format` parameter describes the data type of the `data[]` + /// buffer. The read methods automatically convert the data from the + /// data type it is stored in the file into the `format` of the `data` + /// buffer. If `format` is `TypeUnknown` it will just copy pixels of + /// file's native data layout (including, possibly, per-channel data + /// formats as specified by the ImageSpec's `channelformats` field). + /// + /// * The `stride` values describe the layout of the `data` buffer: + /// `xstride` is the distance in bytes between successive pixels + /// within each scanline. `ystride` is the distance in bytes between + /// successive scanlines. For volumetric images `zstride` is the + /// distance in bytes between successive "volumetric planes". Strides + /// set to the special value `AutoStride` imply contiguous data, i.e., + /// + /// xstride = format.size() * nchannels + /// ystride = xstride * width + /// zstride = ystride * height + /// + /// * Any *range* parameters (such as `ybegin` and `yend`) describe a + /// "half open interval", meaning that `begin` is the first item and + /// `end` is *one past the last item*. That means that the number of + /// items is `end - begin`. + /// + /// * For ordinary 2D (non-volumetric) images, any `z` or `zbegin` + /// coordinates should be 0 and any `zend` should be 1, indicating + /// that only a single image "plane" exists. + /// + /// * Some read methods take a channel range [chbegin,chend) to allow + /// reading of a contiguous subset of channels (chbegin=0, + /// chend=spec.nchannels reads all channels). + /// + /// * ImageInput readers are expected to give the appearance of random + /// access -- in other words, if it can't randomly seek to the given + /// scanline or tile, it should transparently close, reopen, and + /// sequentially read through prior scanlines. + /// + /// * All read functions return `true` for success, `false` for failure + /// (after which a call to `geterror()` may retrieve a specific error + /// message). + /// + + /// Read the scanline that includes pixels (*,y,z) from the "current" + /// subimage and MIP level. The `xstride` value gives the distance + /// between successive pixels (in bytes). Strides set to `AutoStride` + /// imply "contiguous" data. + /// + /// @note This variety of `read_scanline` is not re-entrant nor + /// thread-safe. If you require concurrent reads to the same open + /// ImageInput, you should use `read_scanlines` that has the `subimage` + /// and `miplevel` passed explicitly. + /// + /// @param y/z The y & z coordinates of the scanline. For 2D + /// images, z should be 0. + /// @param format A TypeDesc describing the type of `data`. + /// @param data Pointer to the pixel data buffer. + /// @param xstride The distance in bytes between successive + /// pixels in `data` (or `AutoStride`). + /// @returns `true` upon success, or `false` upon failure. + virtual bool read_scanline (int y, int z, TypeDesc format, void *data, + stride_t xstride=AutoStride); + + /// Simple read_scanline reads into contiguous float pixels. + bool read_scanline (int y, int z, float *data) { + return read_scanline (y, z, TypeFloat, data); + } + + /// Read multiple scanlines that include pixels (*,y,z) for all ybegin + /// <= y < yend in the specified subimage and mip level, into `data`, + /// using the strides given and converting to the requested data + /// `format` (TypeUnknown indicates no conversion, just copy native data + /// types). Only channels [chbegin,chend) will be read/copied + /// (chbegin=0, chend=spec.nchannels reads all channels, yielding + /// equivalent behavior to the simpler variant of `read_scanlines`). + /// + /// This version of read_scanlines, because it passes explicit + /// subimage/miplevel, does not require a separate call to + /// seek_subimage, and is guaranteed to be thread-safe against other + /// concurrent calls to any of the read_* methods that take an explicit + /// subimage/miplevel (but not against any other ImageInput methods). + /// + /// @param subimage The subimage to read from (starting with 0). + /// @param miplevel The MIP level to read (0 is the highest + /// resolution level). + /// @param ybegin/yend The y range of the scanlines being passed. + /// @param z The z coordinate of the scanline. + /// @param chbegin/chend + /// The channel range to read. + /// @param format A TypeDesc describing the type of `data`. + /// @param data Pointer to the pixel data. + /// @param xstride/ystride + /// The distance in bytes between successive pixels + /// and scanlines (or `AutoStride`). + /// @returns `true` upon success, or `false` upon failure. + /// + /// @note This call was changed for OpenImageIO 2.0 to include the + /// explicit subimage and miplevel parameters. + virtual bool read_scanlines (int subimage, int miplevel, + int ybegin, int yend, int z, + int chbegin, int chend, + TypeDesc format, void *data, + stride_t xstride=AutoStride, + stride_t ystride=AutoStride); + + /// Read the tile whose upper-left origin is (x,y,z) into `data[]`, + /// converting if necessary from the native data format of the file into + /// the `format` specified. The stride values give the data spacing of + /// adjacent pixels, scanlines, and volumetric slices (measured in + /// bytes). Strides set to AutoStride imply 'contiguous' data in the + /// shape of a full tile, i.e., + /// + /// xstride = format.size() * spec.nchannels + /// ystride = xstride * spec.tile_width + /// zstride = ystride * spec.tile_height + /// + /// @note This variety of `read_tile` is not re-entrant nor thread-safe. + /// If you require concurrent reads to the same open ImageInput, you + /// should use `read_tiles()` that has the `subimage` and `miplevel` + /// passed explicitly. + /// + /// @param x/y/z The upper left coordinate of the tile being passed. + /// @param format A TypeDesc describing the type of `data`. + /// @param data Pointer to the pixel data. + /// @param xstride/ystride/zstride + /// The distance in bytes between successive pixels, + /// scanlines, and image planes (or `AutoStride` to + /// indicate a "contiguous" single tile). + /// @returns `true` upon success, or `false` upon failure. + /// + /// @note This call will fail if the image is not tiled, or if (x,y,z) + /// is not the upper left corner coordinates of a tile. + virtual bool read_tile (int x, int y, int z, TypeDesc format, + void *data, stride_t xstride=AutoStride, + stride_t ystride=AutoStride, + stride_t zstride=AutoStride); + + /// Simple read_tile reads into contiguous float pixels. + bool read_tile (int x, int y, int z, float *data) { + return read_tile (x, y, z, TypeDesc::FLOAT, data, + AutoStride, AutoStride, AutoStride); + } + + /// Read the block of multiple tiles that include all pixels in + /// + /// [xbegin,xend) X [ybegin,yend) X [zbegin,zend) + /// + /// This is analogous to calling `read_tile(x,y,z,...)` for each tile + /// in turn (but for some file formats, reading multiple tiles may allow + /// it to read more efficiently or in parallel). + /// + /// The begin/end pairs must correctly delineate tile boundaries, with + /// the exception that it may also be the end of the image data if the + /// image resolution is not a whole multiple of the tile size. The + /// stride values give the data spacing of adjacent pixels, scanlines, + /// and volumetric slices (measured in bytes). Strides set to AutoStride + /// imply contiguous data in the shape of the [begin,end) region, i.e., + /// + /// xstride = format.size() * spec.nchannels + /// ystride = xstride * (xend-xbegin) + /// zstride = ystride * (yend-ybegin) + /// + /// This version of read_tiles, because it passes explicit subimage and + /// miplevel, does not require a separate call to seek_subimage, and is + /// guaranteed to be thread-safe against other concurrent calls to any + /// of the read_* methods that take an explicit subimage/miplevel (but + /// not against any other ImageInput methods). + /// + /// @param subimage The subimage to read from (starting with 0). + /// @param miplevel The MIP level to read (0 is the highest + /// resolution level). + /// @param xbegin/xend The x range of the pixels covered by the group + /// of tiles being read. + /// @param ybegin/yend The y range of the pixels covered by the tiles. + /// @param zbegin/zend The z range of the pixels covered by the tiles + /// (for a 2D image, zbegin=0 and zend=1). + /// @param chbegin/chend + /// The channel range to read. + /// @param format A TypeDesc describing the type of `data`. + /// @param data Pointer to the pixel data. + /// @param xstride/ystride/zstride + /// The distance in bytes between successive pixels, + /// scanlines, and image planes (or `AutoStride`). + /// @returns `true` upon success, or `false` upon failure. + /// + /// @note The call will fail if the image is not tiled, or if the pixel + /// ranges do not fall along tile (or image) boundaries, or if it is not + /// a valid tile range. + virtual bool read_tiles (int subimage, int miplevel, int xbegin, int xend, + int ybegin, int yend, int zbegin, int zend, + int chbegin, int chend, TypeDesc format, void *data, + stride_t xstride=AutoStride, stride_t ystride=AutoStride, + stride_t zstride=AutoStride); + + /// Read the entire image of `spec.width x spec.height x spec.depth` + /// pixels into a buffer with the given strides and in the desired + /// data format. + /// + /// Depending on the spec, this will read either all tiles or all + /// scanlines. Assume that data points to a layout in row-major order. + /// + /// This version of read_image, because it passes explicit subimage and + /// miplevel, does not require a separate call to seek_subimage, and is + /// guaranteed to be thread-safe against other concurrent calls to any + /// of the read_* methods that take an explicit subimage/miplevel (but + /// not against any other ImageInput methods). + /// + /// Because this may be an expensive operation, a progress callback + /// may be passed. Periodically, it will be called as follows: + /// + /// progress_callback (progress_callback_data, float done); + /// + /// where `done` gives the portion of the image (between 0.0 and 1.0) + /// that has been written thus far. + /// + /// @param subimage The subimage to read from (starting with 0). + /// @param miplevel The MIP level to read (0 is the highest + /// resolution level). + /// @param chbegin/chend + /// The channel range to read. If chend is -1, it + /// will automatically be set to spec.nchannels. + /// @param format A TypeDesc describing the type of `data`. + /// @param data Pointer to the pixel data. + /// @param xstride/ystride/zstride + /// The distance in bytes between successive pixels, + /// scanlines, and image planes (or `AutoStride`). + /// @param progress_callback/progress_callback_data + /// Optional progress callback. + /// @returns `true` upon success, or `false` upon failure. + virtual bool read_image (int subimage, int miplevel, + int chbegin, int chend, + TypeDesc format, void *data, + stride_t xstride=AutoStride, + stride_t ystride=AutoStride, + stride_t zstride=AutoStride, + ProgressCallback progress_callback=NULL, + void *progress_callback_data=NULL); + + /// @} + + /// @{ + /// @name Reading native pixels -- implementation overloads + /// + /// @note read_native_* methods are usually not directly called by user + /// code (except for read_native_deep_* varieties). These are the + /// methods that are overloaded by the ImageInput subclasses that + /// implement the individual file format readers. + /// + /// The read_native_* methods always read the "native" data types + /// (including per-channel data types) and assume that `data` points to + /// contiguous memory (no non-default strides). In contrast, the + /// read_scanline/scanlines/tile/tiles handle data type translation and + /// arbitrary strides. + /// + /// The read_native_* methods take an explicit subimage and miplevel, and + /// thus do not require a prior call to seek_subimage (and therefore no + /// saved state). They are all required to be thread-safe when called + /// concurrently with any other read_native_* call or with the varieties + /// of read_tiles() that also takes an explicit subimage and miplevel + /// parameter. + /// + /// As far as format-reading ImageInput subclasses are concerned, the + /// only truly required overloads are read_native_scanline (always) and + /// read_native_tile (only for formats that support tiles). The other + /// varieties are special cases, for example if the particular format is + /// able to efficiently read multiple scanlines or tiles at once, and if + /// the subclass does not provide overloads, the base class + /// implementation will be used instead, which is implemented by reducing + /// the operation to multiple calls to read_scanline or read_tile. + /// + /// Note for ImageInput implementors: + /// + /// The preferred ImageInput implementation strategy (and, eventually, + /// required) is to fully implement the span-based, all-channel verison of + /// read_native_scanlines and/or read_native_tiles and/or + /// read_native_volumetric_tiles (whichever of these are supported by the + /// image file format), and to make a trivial implementation of the old + /// pointer-based varieties that simply call the span ones (with an + /// inferred length). + /// + /// The channel-subset versions may also, optionally, be implemented. If + /// omitted, they will fall back to a default implementation that calls + /// the all-channel versions to read into a temporary buffer, then copies + /// the requested channels to the user's buffer. It is only worth custom + /// implementations of the channel-subset versions for formats where there + /// is a significant performance advantage due to the underlying library + /// providing that as a feature (as OpenEXR does, for example, but most + /// format reading APIs do not). + /// + /// For the time being, old ImageInput format readers that do not yet + /// implement the span-based readers, but provide full featured + /// implementations of the pointer-based varieties, will continue to work. + /// This is because the default base-class implementation of the + /// span-based read_native methods will, if not overloaded, simply call + /// the pointer-based versions. + /// + /// To reiterate: A format-reader is expected to provide EITHER (a) + /// span-based calls with full implementations and pointer-based calls + /// that simply call the span-based ones, OR (b) pointer-based full + /// implementations only and rely on the base class span-based calls to + /// call them by default. + + /// Read a range of scanlines (all channels) of native data into + /// contiguous memory defined by the span `data`. + virtual bool read_native_scanlines(int subimage, int miplevel, int ybegin, + int yend, span data); + + /// Read a range of scanlines (with potentially a subset of channels) of + /// native data into contiguous memory defined by the span `data`. + virtual bool read_native_scanlines(int subimage, int miplevel, int ybegin, + int yend, int chbegin, int chend, + span data); + + /// Read a range of tiles (all channels) of native data into contiguous + /// memory defined by the span `data`. + virtual bool read_native_tiles(int subimage, int miplevel, + int xbegin, int xend, int ybegin, int yend, + span data); + + /// Read a range of tiles (with potentially a subset of channels) of + /// native data into contiguous memory defined by the span `data`. + virtual bool read_native_tiles(int subimage, int miplevel, + int xbegin, int xend, int ybegin, int yend, + int chbegin, int chend, + span data); + + /// Read a range of 3D volumetric tiles (all channels) of native data into + /// contiguous memory. This is only functional for volumetric formats. + virtual bool read_native_volumetric_tiles(int subimage, int miplevel, + int xbegin, int xend, int ybegin, int yend, + int zbegin, int zend, span data); + + /// Read a range of 3D volumetric tiles (with potentially a subset of + /// channels) of native data into contiguous memory. This is only + /// functional for volumetric formats. + virtual bool read_native_volumetric_tiles(int subimage, int miplevel, + int xbegin, int xend, int ybegin, int yend, + int zbegin, int zend, int chbegin, int chend, + span data); + + /// OLD pointer-based version: this will eventually be deprecated. + /// + /// Read a single scanline (all channels) of native data into contiguous + /// memory. + virtual bool read_native_scanline (int subimage, int miplevel, + int y, int z, void *data) = 0; + + /// OLD pointer-based version: this will eventually be deprecated. + /// + /// Read a range of scanlines (all channels) of native data into + /// contiguous memory. + virtual bool read_native_scanlines (int subimage, int miplevel, + int ybegin, int yend, int z, + void *data); + /// OLD pointer-based version: this will eventually be deprecated. + /// + /// Read a range of scanlines (with optionally a subset of channels) of + /// native data into contiguous memory. + virtual bool read_native_scanlines (int subimage, int miplevel, + int ybegin, int yend, int z, + int chbegin, int chend, void *data); + + /// OLD pointer-based version: this will eventually be deprecated. + /// + /// Read a single tile (all channels) of native data into contiguous + /// memory. The base class read_native_tile fails. A format reader that + /// supports tiles MUST overload this virtual method that reads a single + /// tile (all channels). + virtual bool read_native_tile (int subimage, int miplevel, + int x, int y, int z, void *data); + + /// OLD pointer-based version: this will eventually be deprecated. + /// + /// Read multiple tiles (all channels) of native data into contiguous + /// memory. A format reader that supports reading multiple tiles at once + /// (in a way that's more efficient than reading the tiles one at a + /// time) is advised (but not required) to overload this virtual method. + /// If an ImageInput subclass does not overload this, the default + /// implementation here is simply to loop over the tiles, calling the + /// single-tile read_native_tile() for each one. + virtual bool read_native_tiles (int subimage, int miplevel, + int xbegin, int xend, int ybegin, int yend, + int zbegin, int zend, void *data); + + /// OLD pointer-based version: this will eventually be deprecated. + /// + /// Read multiple tiles (potentially a subset of channels) of native + /// data into contiguous memory. A format reader that supports reading + /// multiple tiles at once, and can handle a channel subset while doing + /// so, is advised (but not required) to overload this virtual method. + /// If an ImageInput subclass does not overload this, the default + /// implementation here is simply to loop over the tiles, calling the + /// single-tile read_native_tile() for each one (and copying carefully + /// to handle the channel subset issues). + virtual bool read_native_tiles (int subimage, int miplevel, + int xbegin, int xend, int ybegin, int yend, + int zbegin, int zend, + int chbegin, int chend, void *data); + + /// @} + + + // General message passing between client and image input server. This + // is currently undefined and is reserved for future use. + virtual int send_to_input (const char *format, ...); + int send_to_client (const char *format, ...); + + /// Set an IOProxy for this reader. This must be called prior to + /// `open()`, and only for readers that support them + /// (`supports("ioproxy")`). The caller retains ownership of the proxy. + /// + /// @returns `true` for success, `false` for failure. + virtual bool set_ioproxy (Filesystem::IOProxy* ioproxy); + + /// Is there a pending error message waiting to be retrieved, that + /// resulted from an ImageInput API call made by the this thread? + /// + /// Note that any `error()` calls issued are thread-specific, and the + /// `geterror()/has_error()` are expected to be called by the same + /// thread that called whichever API function encountered an error. + bool has_error() const; + + /// Return the text of all pending error messages issued against this + /// ImageInput by the calling thread, and clear the pending error + /// message unless `clear` is false. If no error message is pending, it + /// will return an empty string. + /// + /// Note that any `error()` calls issued are thread-specific, and the + /// `geterror()/has_error()` are expected to be called by the same + /// thread that called whichever API function encountered an error. + std::string geterror(bool clear = true) const; + + /// Error reporting for the plugin implementation: call this with + /// std::format-like arguments. It is not necessary to have the error + /// message contain a trailing newline. + template + void errorfmt(const char* fmt, const Args&... args) const { + append_error(Strutil::fmt::format (fmt, args...)); + } + +#if OIIO_DISABLE_DEPRECATED < OIIO_MAKE_VERSION(2, 6, 3) && \ + !defined(OIIO_INTERNAL) && !defined(OIIO_DOXYGEN) + /// Error reporting for the plugin implementation: call this with + /// Strutil::format-like arguments. It is not necessary to have the + /// error message contain a trailing newline. + /// Use with caution! Some day this will change to be fmt-like rather + /// than printf-like. + template + OIIO_DEPRECATED("use errorfmt instead, with std::format-like arguments (3.0)") + void error(const char* fmt, const Args&... args) const { + append_error(Strutil::format (fmt, args...)); + } + + /// Error reporting for the plugin implementation: call this with + /// printf-like arguments. It is not necessary to have the error message + /// contain a trailing newline. + template + OIIO_DEPRECATED("use errorfmt instead, with std::format-like arguments (3.0)") + void errorf(const char* fmt, const Args&... args) const { + append_error(Strutil::sprintf (fmt, args...)); + } + + // Error reporting for the plugin implementation: call this with + // std::format-like arguments. It is not necessary to have the + // error message contain a trailing newline. + template + OIIO_DEPRECATED("use `errorfmt` instead (2.3)") + void fmterror(const char* fmt, const Args&... args) const { + append_error(Strutil::fmt::format (fmt, args...)); + } +#endif + + /// Set the threading policy for this ImageInput, controlling the + /// maximum amount of parallelizing thread "fan-out" that might occur + /// during large read operations. The default of 0 means that the global + /// `attribute("threads")` value should be used (which itself defaults + /// to using as many threads as cores; see Section `Global Attributes`_). + /// + /// The main reason to change this value is to set it to 1 to indicate + /// that the calling thread should do all the work rather than spawning + /// new threads. That is probably the desired behavior in situations + /// where the calling application has already spawned multiple worker + /// threads. + void threads(int n); + + /// Retrieve the current thread-spawning policy. + /// @see `threads(int)` + int threads() const; + + /// There is a (hidden) internal recursive mutex to each ImageInput + /// that can be used by the II to enforce thread safety. This is exposed + /// via the obvious lock()/unlock()/try_lock() semantics. + void lock() const; + void unlock() const; + bool try_lock() const; + + /// The presence of lock() and unlock() establish an ImageInput itself + /// as having the BasicLockable concept and therefore can be used by + /// std::lock_guard. + typedef std::lock_guard lock_guard; + + // Custom new and delete to ensure that allocations & frees happen in + // the OpenImageIO library, not in the app or plugins (because Windows). + void* operator new (size_t size); + void operator delete (void *ptr); + + /// Call signature of a function that creates and returns an + /// `ImageInput*`. + typedef ImageInput* (*Creator)(); + + /// Memory tracking method. + /// Return the total heap memory allocated by `ImageInput`. + /// Overridable version of heapsize defined in memory.h. + virtual size_t heapsize() const; + + /// Memory tracking method. + /// Return the total memory footprint of `ImageInput`. + /// Overridable version of footprint defined in memory.h. + virtual size_t footprint() const; + +protected: + ImageSpec m_spec; // format spec of the current open subimage/MIPlevel + // BEWARE using m_spec directly -- not thread-safe + + /// @{ + /// @name IOProxy aids for ImageInput implementations. + /// + /// This set of utility functions are not meant to be called by user code. + /// They are protected methods of ImageInput, and are used internally by + /// the ImageInput implementation to help it properly implement support of + /// IOProxy. + /// + + /// Get the IOProxy being used underneath. + Filesystem::IOProxy* ioproxy(); + const Filesystem::IOProxy* ioproxy() const; + + /// Is this file currently opened (active proxy)? + bool ioproxy_opened() const; + + /// Clear the proxy ptr, and close/destroy any "local" proxy. + void ioproxy_clear(); + + /// Retrieve any ioproxy request from the configuration hint spec, and + /// make `m_io` point to it. But if no IOProxy is found in the config, + /// don't overwrite one we already have. + void ioproxy_retrieve_from_config(const ImageSpec& config); + + /// Presuming that `ioproxy_retrieve_from_config` has already been called, + /// if `m_io` is still not set (i.e., wasn't found in the config), open a + /// IOFile local proxy with the given read/write `mode`. Return true if a + /// proxy is set up. If it can't be done (i.e., no proxy passed, file + /// couldn't be opened), issue an error and return false. + bool ioproxy_use_or_open(string_view name); + + /// Helper: read from the proxy akin to fread(). Return true on success, + /// false upon failure and issue a helpful error message. NOTE: this is + /// not the same return value as std::fread, which returns the number of + /// items read. + bool ioread(void* buf, size_t itemsize, size_t nitems = 1); + + /// Helper: seek the proxy, akin to fseek. Return true on success, false + /// upon failure and issue an error message. (NOTE: this is not the same + /// return value as std::fseek, which returns 0 on success.) + bool ioseek(int64_t pos, int origin = SEEK_SET); + + /// Helper: retrieve the current position of the proxy, akin to ftell. + int64_t iotell() const; + + /// @} + + /// @{ + /// @name Helper methods for ImageInput implementations. + /// + /// This set of utility functions are not meant to be called by user code. + /// They are protected methods of ImageInput, and are used internally by + /// the ImageInput format-reading implementations. + /// + + /// Helper: convenience boilerplate for several checks and operations that + /// every implementation of ImageInput::open() will need to do. Failure is + /// presumed to indicate a file that is corrupt (or perhaps maliciously + /// crafted) and no further reading should be attempted. + /// + /// @param spec + /// The ImageSpec that we are validating. + /// + /// @param range + /// An ROI that describes the allowable resolution and channel count: + /// the width, height, depth, and channel count of the ROI are the + /// maximum allowed for the file type. For example, the default value + /// `{0, 65535, 0, 65535, 0, 1, 0, 4}` means that pixel data width + /// and height must be non-negative and representable by uint16 + /// values, up to 4 channels are allowed, and volumes are not + /// permitted (z coordinate may only be 0). File formats that can + /// handle larger resolutions, or volumes, or >4 channels must + /// override these limits! + /// + /// @param flags + /// A bitfield flag (bits defined by `enum OpenChecks`) that can + /// indicate additional checks to perform, or checks that should be + /// skipped. + /// + /// @returns + /// Return `true` if the spec is valid and passes all checks, + /// otherwise return `false` and make appropriate calls to + /// this->errorfmt() to record the errors. + /// + /// Checks performed include: + /// + /// * Whether the resolution and channel count are within the range + /// implied by `range`. + /// * Whether the channel count is within the `"limit:channels"` OIIO + /// attribute. + /// * The total uncompressed pixel data size is expected to be within the + /// `"limit:imagesize_MB"` OIIO attribute. + /// + bool check_open (const ImageSpec &spec, + ROI range = {0, 65535, 0, 65535, 0, 1, 0, 4}, + uint64_t flags = 0); + + /// Bit field definitions for the `flags` argument to `check_open()`. + enum class OpenChecks : uint64_t { + Defaults = 0, + // Reserved for future use + }; + + /// Helper method: Validate that a `[chbegin, chend)` X `[xbegin, xend)` X + /// `[ybegin, yend)` X `[zbegin, zend)` slab of native channel data types + /// (according to the ImageSpec) can fit into the amount of contiguous + /// memory held by the span. If it can, return true. If it can't, call + /// `this->errorfmt()` with an appropriate error message and return false. + /// Unspecified channel range indicates all channels. + bool valid_raw_span_size(cspan buf, const ImageSpec& spec, + int xbegin, int xend, int ybegin, int yend, + int zbegin = 0, int zend = 1, + int chbegin = 0, int chend = -1); + /// @} + +private: + // PIMPL idiom -- this lets us hide details of the internals of the + // ImageInput parent class so that changing them does not break the + // ABI. + class Impl; + static void impl_deleter(Impl*); + std::unique_ptr m_impl; + + void append_error(string_view message) const; // add to error message + + /// declare friend heapsize and footprint definitions + template friend size_t pvt::heapsize(const T&); +}; + + + + +/// ImageOutput abstracts the writing of an image file in a file +/// format-agnostic manner. +/// +/// Users don't directly declare these. Instead, you call the `create()` +/// static method, which will return a `unique_ptr` holding a subclass of +/// ImageOutput that implements writing the particular format. +/// +class OIIO_API ImageOutput { +public: + /// unique_ptr to an ImageOutput. + using unique_ptr = std::unique_ptr; + + /// @{ + /// @name Creating an ImageOutput + + /// Create an `ImageOutput` that can be used to write an image file. + /// The type of image file (and hence, the particular subclass of + /// `ImageOutput` returned, and the plugin that contains its methods) is + /// inferred from the name, if it appears to be a full filename, or it + /// may also name the format. + /// + /// @param filename + /// The name of the file format (e.g., "openexr"), a file + /// extension (e.g., "exr"), or a filename from which the the + /// file format can be inferred from its extension (e.g., + /// "hawaii.exr"). The filename is UTF-8 encoded. + /// + /// @param plugin_searchpath + /// An optional colon-separated list of directories to search + /// for OpenImageIO plugin DSO/DLL's. + /// + /// @param ioproxy + /// Optional pointer to an IOProxy to use (not supported by all + /// formats, see `supports("ioproxy")`). The caller retains + /// ownership of the proxy. + /// + /// @returns + /// A `unique_ptr` that will close and free the ImageOutput when + /// it exits scope or is reset. The pointer will be empty if the + /// required writer was not able to be created. + static unique_ptr create (string_view filename, + Filesystem::IOProxy* ioproxy = nullptr, + string_view plugin_searchpath = ""); + + /// Create an ImageOutput using a UTF-16 encoded wstring filename and + /// plugin searchpath. + static unique_ptr create (const std::wstring& filename, + Filesystem::IOProxy* ioproxy = nullptr, + const std::wstring& plugin_searchpath = {}) { + return create(Strutil::utf16_to_utf8(filename), ioproxy, + Strutil::utf16_to_utf8(plugin_searchpath)); + } + + /// @} + +#if OIIO_DISABLE_DEPRECATED < OIIO_MAKE_VERSION(2,2,0) \ + && !defined(OIIO_DOXYGEN) && !defined(OIIO_INTERNAL) + OIIO_DEPRECATED("Obsolete version (2.2)") + static unique_ptr create (const std::string &filename, + const std::string &plugin_searchpath) { + return create(filename, nullptr, plugin_searchpath); + } + + OIIO_DEPRECATED("destroy is no longer needed") + static void destroy (ImageOutput *x) { delete x; } +#endif + +protected: + ImageOutput (); +public: + virtual ~ImageOutput (); + + /// Return the name of the format implemented by this class. + virtual const char *format_name (void) const = 0; + + // Override these functions in your derived output class + // to inform the client which formats are supported + + /// @{ + /// @name Opening and closing files for output + + /// Given the name of a "feature", return whether this ImageOutput + /// supports output of images with the given properties. Most queries + /// will simply return 0 for "doesn't support" and 1 for "supports it," + /// but it is acceptable to have queries return other nonzero integers + /// to indicate varying degrees of support or limits (but should be + /// clearly documented as such). + /// + /// Feature names that ImageOutput implementations are expected to + /// recognize include: + /// + /// - `"tiles"` : + /// Is this format writer able to write tiled images? + /// + /// - `"rectangles"` : + /// Does this writer accept arbitrary rectangular pixel regions + /// (via `write_rectangle()`)? Returning 0 indicates that + /// pixels must be transmitted via `write_scanline()` (if + /// scanline-oriented) or `write_tile()` (if tile-oriented, and + /// only if `supports("tiles")` returns true). + /// + /// - `"random_access"` : + /// May tiles or scanlines be written in any order (0 indicates + /// that they *must* be in successive order)? + /// + /// - `"multiimage"` : + /// Does this format support multiple subimages within a file? + /// + /// - `"appendsubimage"` : + /// Does this format support multiple subimages that can be + /// successively appended at will via + /// `open(name,spec,AppendSubimage)`? A value of 0 means that + /// the format requires pre-declaring the number and + /// specifications of the subimages when the file is first + /// opened, with `open(name,subimages,specs)`. + /// + /// - `"mipmap"` : + /// Does this format support multiple resolutions for an + /// image/subimage? + /// + /// - `"volumes"` : + /// Does this format support "3D" pixel arrays (a.k.a. volume + /// images)? + /// + /// - `"alpha"` : + /// Can this format support an alpha channel? + /// + /// - `"nchannels"` : + /// Can this format support arbitrary number of channels (beyond RGBA)? + /// + /// - `"rewrite"` : + /// May the same scanline or tile be sent more than once? + /// Generally, this is true for plugins that implement + /// interactive display, rather than a saved image file. + /// + /// - `"empty"` : + /// Does this plugin support passing a NULL data pointer to the + /// various `write` routines to indicate that the entire data + /// block is composed of pixels with value zero? Plugins that + /// support this achieve a speedup when passing blank scanlines + /// or tiles (since no actual data needs to be transmitted or + /// converted). + /// + /// - `"channelformats"` : + /// Does this format writer support per-channel data formats, + /// respecting the ImageSpec's `channelformats` field? If not, + /// it only accepts a single data format for all channels and + /// will ignore the `channelformats` field of the spec. + /// + /// - `"displaywindow"` : + /// Does the format support display ("full") windows distinct + /// from the pixel data window? + /// + /// - `"origin"` : + /// Does the image format support specifying a pixel window + /// origin (i.e., nonzero ImageSpec `x`, `y`, `z`)? + /// + /// - `"negativeorigin"` : + /// Does the image format allow data and display window origins + /// (i.e., ImageSpec `x`, `y`, `z`, `full_x`, `full_y`, `full_z`) + /// to have negative values? + /// + /// - `"deepdata"` : + /// Does the image format allow "deep" data consisting of + /// multiple values per pixel (and potentially a differing number + /// of values from pixel to pixel)? + /// + /// - `"arbitrary_metadata"` : + /// Does the image file format allow metadata with arbitrary + /// names (and either arbitrary, or a reasonable set of, data + /// types)? (Versus the file format supporting only a fixed list + /// of specific metadata names/values.) + /// + /// - `"exif"` + /// Does the image file format support Exif camera data (either + /// specifically, or via arbitrary named metadata)? + /// + /// - `"iptc"` + /// Does the image file format support IPTC data (either + /// specifically, or via arbitrary named metadata)? + /// + /// - `"ioproxy"` + /// Does the image file format support writing to an `IOProxy`? + /// + /// - `"procedural"` : + /// Is this a purely procedural output that doesn't write an + /// actual file? + /// + /// - `"thumbnail"` : + /// Does this format writer support adding a reduced resolution + /// copy of the image via the `thumbnail()` method? + /// + /// - `"thumbnail_after_write"` : + /// Does this format writer support calling `thumbnail()` after + /// the scanlines or tiles have been specified? (Supporting + /// `"thumbnail"` but not `"thumbnail_after_write"` means that any + /// thumbnail must be supplied immediately after `open()`, prior + /// to any of the `write_*()` calls.) + /// + /// - `"noimage"` : + /// Does this format allow 0x0 sized images, i.e. an image file + /// with metadata only and no pixels? + /// + /// - `"cicp"` : + /// Does this format support embedding CICP metadata? + /// + /// This list of queries may be extended in future releases. Since this + /// can be done simply by recognizing new query strings, and does not + /// require any new API entry points, addition of support for new + /// queries does not break ``link compatibility'' with + /// previously-compiled plugins. + virtual int supports (string_view feature OIIO_MAYBE_UNUSED) const { + return false; + } + + /// Modes passed to the `open()` call. + enum OpenMode { Create, AppendSubimage, AppendMIPLevel }; + + /// Open the file with given name, with resolution and other format + /// data as given in newspec. It is legal to call open multiple times + /// on the same file without a call to `close()`, if it supports + /// multiimage and mode is AppendSubimage, or if it supports + /// MIP-maps and mode is AppendMIPLevel -- this is interpreted as + /// appending a subimage, or a MIP level to the current subimage, + /// respectively. + /// + /// @param filename The name of the image file to open, UTF-8 encoded. + /// @param newspec The ImageSpec describing the resolution, data + /// types, etc. + /// @param mode Specifies whether the purpose of the `open` is + /// to create/truncate the file (default: `Create`), + /// append another subimage (`AppendSubimage`), or + /// append another MIP level (`AppendMIPLevel`). + /// @returns `true` upon success, or `false` upon failure. + virtual bool open (const std::string &filename, const ImageSpec &newspec, + OpenMode mode=Create) = 0; + + /// Open an ImageOutput using a UTF-16 encoded wstring filename. + bool open (const std::wstring &filename, const ImageSpec &newspec, + OpenMode mode=Create) { + return open(Strutil::utf16_to_utf8(filename), newspec, mode); + } + + /// Open a multi-subimage file with given name and specifications for + /// each of the subimages. Upon success, the first subimage will be + /// open and ready for transmission of pixels. Subsequent subimages + /// will be denoted with the usual call of + /// `open(name,spec,AppendSubimage)` (and MIP levels by + /// `open(name,spec,AppendMIPLevel)`). + /// + /// The purpose of this call is to accommodate format-writing + /// libraries that must know the number and specifications of the + /// subimages upon first opening the file; such formats can be + /// detected by:: + /// supports("multiimage") && !supports("appendsubimage") + /// The individual specs passed to the appending open() calls for + /// subsequent subimages *must* match the ones originally passed. + /// + /// @param filename The name of the image file to open, UTF-8 encoded. + /// @param subimages The number of subimages (and therefore the + /// length of the `specs[]` array. + /// @param specs[] + /// Pointer to an array of `ImageSpec` objects + /// describing each of the expected subimages. + /// @returns `true` upon success, or `false` upon failure. + virtual bool open (const std::string &filename, + int subimages OIIO_MAYBE_UNUSED, + const ImageSpec *specs) { + // Default implementation: just a regular open, assume that + // appending will work. + return open (filename, specs[0]); + } + + bool open (const std::wstring &filename, int subimages OIIO_MAYBE_UNUSED, + const ImageSpec *specs) { + // Default implementation: just a regular open, assume that + // appending will work. + return open (Strutil::utf16_to_utf8(filename), specs[0]); + } + + /// Return a reference to the image format specification of the current + /// subimage. Note that the contents of the spec are invalid before + /// `open()` or after `close()`. + const ImageSpec &spec (void) const { return m_spec; } + + /// Closes the currently open file associated with this ImageOutput and + /// frees any memory or resources associated with it. + virtual bool close () = 0; + /// @} + + // clang-format on + + /// @{ + /// @name Writing pixels ("safe" methods with bounded spans) + /// + /// Common features of all the `write` methods: + /// + /// * There is a base case that takes a `image_span` describing + /// untyped memory layout and a `TypeDesc` describing the data type + /// that the values should be converted from (or TypeUnknown to + /// indicate that the data is already in its "native" file types with + /// no conversion needed). + /// + /// * The type-aware versions that accept an `image_span` (for + /// potentially non-contiguous data) or `span` (for contiguous data) + /// and understand to convert the data from the given `T` type. + /// + /// * The image_span (in either case) includes the memory bounds and + /// stride lengths (in bytes) between channels, pixels, scanlines, and + /// volumetric slices. + /// + /// * Any *range* parameters (such as `ybegin` and `yend`) describe a + /// "half open interval", meaning that `begin` is the first item and + /// `end` is *one past the last item*. That means that the number of + /// items is `end - begin`. + /// + /// * For ordinary 2D (non-volumetric) images, any `z` or `zbegin` + /// coordinates should be 0 and any `zend` should be 1, indicating + /// that only a single image "plane" exists. + /// + /// * Scanlines or tiles must be written in successive increasing + /// coordinate order, unless the particular output file driver allows + /// random access (indicated by `supports("random_access")`). + /// + /// * All write functions return `true` for success, `false` for failure + /// (after which a call to `geterror()` may retrieve a specific error + /// message). + /// + + /// Given an explicit data type and an `image_span` of untyped bytes, + /// write the entire image of `spec.width x spec.height x spec.depth` + /// pixels from the buffer. + /// + /// Depending on the spec, this will write either all tiles or all + /// scanlines. Assume that data points to a layout in row-major order. + /// + /// Added in OIIO 3.1, this is the "safe" preferred alternative to + /// the version of write_image that takes raw pointers. + /// + /// @param format A TypeDesc describing the type of the pixel data + /// that `data`'s memory contains. Use `TypeUnknown` + /// to indicate that the data is already in the native + /// format and needs no type conversion. + /// @param data An `image_span` describing the memory + /// extent of the data buffer and including the sizes + /// and byte strides for each dimension (channel, x, + /// y, and z). + /// @returns `true` upon success, or `false` upon failure. + /// + virtual bool write_image(TypeDesc format, + const image_span& data); + + /// A version of `write_image()` taking an `image_span`, where the type + /// of the underlying data is `T`. This is a convenience wrapper around + /// the `write_image()` that takes an `image_span`. + template bool write_image(const image_span& data) + { + return write_image(TypeDescFromC::value(), + as_image_span_bytes(data)); + } + + /// A version of `write_image()` taking a `cspan`, which assumes + /// contiguous strides in all dimensions. This is a convenience wrapper + /// around the `write_image()` that takes an `image_span`. + template bool write_image(span data) + { + auto ispan = image_span(data.data(), m_spec.nchannels, + m_spec.width, m_spec.height, + m_spec.depth); + OIIO_DASSERT(data.size_bytes() == ispan.size_bytes() + && ispan.is_contiguous()); + return write_image(ispan); + } + + /// Write one scanline that include pixels (*,y) from `data`, which is an + /// `image_span` of un-typed bytes incorporating its bounded dimensions + /// and strides. The data type is given explicity by the `format` + /// argument, and will be automatically converted to the type being stored + /// in the file. + /// + /// The image_span must have a width equal to a full scanline width, + /// and its height and depth must be 1. + /// + /// Added in OIIO 3.1, this is the "safe" preferred alternative to + /// the version of write_scanline that takes raw pointers. + /// + /// @param y The y coordinate of the scanline. + /// @param format A TypeDesc describing the type of the pixel data + /// that `data`'s memory contains. Use `TypeUnknown` + /// to indicate that the data is already in the native + /// format and needs no type conversion. + /// @param data An `image_span` describing the buffer and + /// including its sizes and byte strides for each + /// dimension (channel, x, y, z). + /// @returns `true` upon success, or `false` upon failure. + /// + virtual bool write_scanline(int y, TypeDesc format, + const image_span& data); + + /// A version of `write_scanline()` taking an `image_span`, where the + /// type of the underlying data is `T`. This is a convenience wrapper + /// around the `write_scanline()` that takes an `image_span`. + template bool write_scanline(int y, const image_span& data) + { + // reduce to type + image_span + return write_scanline(y, TypeDescFromC::value(), + as_image_span_bytes(data)); + } + + /// A version of `write_scanline()` taking a `cspan`, which assumes + /// contiguous strides in all dimensions. This is a convenience wrapper + /// around the `write_scanline()` that takes an `image_span`. + template bool write_scanline(int y, span data) + { + // reduce to type + image_span + return write_scanline(y, image_span(data.data(), m_spec.nchannels, + m_spec.width, 1, 1)); + } + + /// Write multiple scanlines that include pixels (*,y) for all `ybegin + /// <= y < yend`, from `data`, which is an `image_span` of un-typed bytes + /// incorporating its bounded dimensions and strides. The data type is + /// given explicity by the `format` argument, and will be automatically + /// converted to the type being stored in the file. You can write a single + /// scanline by passing `yend == ybegin + 1`, but passing multiple + /// scanlines in each call often has performance advantages for many file + /// formats. + /// + /// The image_span must have a width equal to a full scanline width, + /// and its height must be yend - ybegin. + /// + /// Added in OIIO 3.1, this is the "safe" preferred alternative to + /// the version of write_scanlines that takes raw pointers. + /// + /// @param ybegin/yend The y range of the scanlines being passed. + /// @param format A TypeDesc describing the type of the pixel data + /// that `data`'s memory contains. Use `TypeUnknown` + /// to indicate that the data is already in the native + /// format and needs no type conversion. + /// @param data An `image_span` describing the buffer and + /// including its sizes and byte strides for each + /// dimension (channel, x, y, z). + /// @returns `true` upon success, or `false` upon failure. + /// + virtual bool write_scanlines(int ybegin, int yend, TypeDesc format, + const image_span& data); + + /// A version of `write_scanlines()` taking an `image_span`, where the + /// type of the underlying data is `T`. This is a convenience wrapper + /// around the `write_scanlines()` that takes an `image_span`. + template + bool write_scanlines(int ybegin, int yend, const image_span& data) + { + // image_span: reduces to type + byte_buffer + return write_scanlines(ybegin, yend, TypeDescFromC::value(), + data.as_image_span_bytes()); + } + + /// A version of `write_scanlines()` taking a `cspan`, which assumes + /// contiguous strides in all dimensions. This is a convenience wrapper + /// around the `write_scanlines()` that takes an `image_span`. + template + bool write_scanlines(int ybegin, int yend, span data) + { + auto ispan = image_span(data.data(), m_spec.nchannels, m_spec.width, + yend - ybegin, 1); + OIIO_DASSERT(data.size_bytes() == ispan.size_bytes() + && ispan.is_contiguous()); + return write_scanlines(ybegin, yend, ispan); + } + + + /// Write a single tile of pixels whose upper left pixel coordinate is (x, + /// y, z) from a buffer described by `data`, which is an `image_span` of + /// un-typed bytes incorporating its bounded dimensions and strides. The + /// data type is given explicity by the `format` argument, and will be + /// automatically converted to the type being stored in the file. The + /// (x,y,z) coordinates must be the pixel coordinates of the first (upper + /// left corner) pixel of a tile. + /// + /// Added in OIIO 3.1, this is the "safe" preferred alternative to + /// the version of write_tile that takes raw pointers. + /// + /// @param x/y/z The x range of the pixels being passed. + /// @param ybegin/yend The y range of the pixels being passed. + /// @param zbegin/zend The z range of the pixels being passed + /// (for a 2D image, zbegin=0 and zend=1). + /// @param format A TypeDesc describing the type of the pixel data + /// that `data`'s memory contains. Use `TypeUnknown` + /// to indicate that the data is already in the native + /// format and needs no type conversion. + /// @param data An `image_span` describing the buffer and + /// including its sizes and byte strides for each + /// dimension (channel, x, y, z). + /// @returns `true` upon success, or `false` upon failure. + /// + /// Added in OIIO 3.1, this is the "safe" preferred alternative to + /// the version of write_tile that takes raw pointers. + /// + virtual bool write_tile(int x, int y, int z, TypeDesc format, + const image_span& data); + + /// A version of `write_tile()` taking an `image_span`, where the type + /// of the underlying data is `T`. This is a convenience wrapper around + /// the `write_tile()` that takes an `image_span`. + template + bool write_tile(int x, int y, int z, const image_span& data) + { + return write_tile(x, y, z, TypeDescFromC::value(), + as_image_span_bytes(data)); + } + + /// A version of `write_tile()` taking a `cspan`, which assumes + /// contiguous strides in all dimensions. This is a convenience wrapper + /// around the `write_tile()` that takes an `image_span`. + template bool write_tile(int x, int y, int z, span data) + { + auto ispan = image_span(data.data(), m_spec.nchannels, + m_spec.tile_width, m_spec.tile_height, + m_spec.tile_depth); + OIIO_DASSERT(data.size_bytes() == ispan.size_bytes() + && ispan.is_contiguous()); + return write_tile(x, y, z, ispan); + } + + /// Write a rectangular region of tiles of pixels given by the range + /// + /// [xbegin,xend) X [ybegin,yend) X [zbegin,zend) + /// + /// contained in `data`, which is an `image_span` of un-typed bytes + /// incorporating its bounded dimensions and strides. The data type is + /// given explicity by the `format` argument, and will be automatically + /// converted to the type being stored in the file. The begin/end + /// coordinates must be at tile or image boundaries. + /// + /// Added in OIIO 3.1, this is the "safe" preferred alternative to + /// the version of write_tiles that takes raw pointers. + /// + /// @param xbegin/xend The x range of the pixels being passed. + /// @param ybegin/yend The y range of the pixels being passed. + /// @param zbegin/zend The z range of the pixels being passed + /// (for a 2D image, zbegin=0 and zend=1). + /// @param format A TypeDesc describing the type of the pixel data + /// that `data`'s memory contains. Use `TypeUnknown` + /// to indicate that the data is already in the native + /// format and needs no type conversion. + /// @param data An `image_span` describing the buffer and + /// including its sizes and byte strides for each + /// dimension (channel, x, y, z). + /// @returns `true` upon success, or `false` upon failure. + /// + virtual bool write_tiles(int xbegin, int xend, int ybegin, int yend, + int zbegin, int zend, TypeDesc format, + const image_span& data); + + /// A version of `write_tiles()` taking an `image_span`, where the type + /// of the underlying data is `T`. This is a convenience wrapper around + /// the `write_tiles()` that takes an `image_span`. + template + bool write_tiles(int xbegin, int xend, int ybegin, int yend, int zbegin, + int zend, const image_span& data) + { + return write_tiles(xbegin, xend, ybegin, yend, zbegin, zend, + TypeDescFromC::value(), + as_image_span_bytes(data)); + } + + /// A version of `write_tiles()` taking a `cspan`, which assumes + /// contiguous strides in all dimensions. This is a convenience wrapper + /// around the `write_tiles()` that takes an `image_span`. + template + bool write_tiles(int xbegin, int xend, int ybegin, int yend, int zbegin, + int zend, span data) + { + auto ispan = image_span(data.data(), m_spec.nchannels, xend - xbegin, + yend - ybegin, zend - zbegin); + OIIO_DASSERT(data.size_bytes() == ispan.size_bytes() + && ispan.is_contiguous()); + return write_tiles(xbegin, xend, ybegin, yend, zbegin, zend, ispan); + } + + /// Write a rectangle of pixels given by the range + /// + /// [xbegin,xend) X [ybegin,yend) X [zbegin,zend) + /// + /// from a buffer described by `data`, which is an `image_span` + /// incorporating its bounded dimensions, strides, and data type. + /// + /// The begin/end coordinates do not need to be tile boundaries, but the + /// call is only supported for format plugins that return true for + /// `supports("rectangles")`. + /// + /// Added in OIIO 3.1, this is the "safe" preferred alternative to + /// the version of write_rectangle that takes raw pointers. + /// + /// @param xbegin/xend The x range of the pixels being passed. + /// @param ybegin/yend The y range of the pixels being passed. + /// @param format A TypeDesc describing the type of the pixel data + /// that `data`'s memory contains. Use `TypeUnknown` + /// to indicate that the data is already in the native + /// format and needs no type conversion. + /// @param data An `image_span` describing the buffer and + /// including its sizes and byte strides for each + /// dimension (channel, x, y, z). + /// @returns `true` upon success, or `false` upon failure. + /// + virtual bool write_rectangle(int xbegin, int xend, int ybegin, int yend, + int zbegin, int zend, TypeDesc format, + const image_span& data); + + /// A version of `write_rectangle()` taking an `image_span`, where the + /// type of the underlying data is `T`. This is a convenience wrapper + /// around the `write_rectangle()` that takes an `image_span`. + template + bool write_rectangle(int xbegin, int xend, int ybegin, int yend, int zbegin, + int zend, const image_span& data) + { + return write_rectangle(xbegin, xend, ybegin, yend, zbegin, zend, + TypeDescFromC::value(), + as_image_span_bytes(data)); + } + + /// A version of `write_rectangle()` taking a `cspan`, which assumes + /// contiguous strides in all dimensions. This is a convenience wrapper + /// around the `write_rectangle()` that takes an `image_span`. + template + bool write_rectangle(int xbegin, int xend, int ybegin, int yend, int zbegin, + int zend, span data) + { + auto ispan = image_span(data.data(), m_spec.nchannels, + xend - xbegin, yend - ybegin, + zend - zbegin); + OIIO_DASSERT(data.size_bytes() == ispan.size_bytes() + && ispan.is_contiguous()); + return write_rectangle(xbegin, xend, ybegin, yend, zbegin, zend, ispan); + } + + // clang-format off + + /// Write deep scanlines containing pixels (*,y,z), for all y in the + /// range [ybegin,yend), to a deep file. This will fail if it is not a + /// deep file. + /// + /// @param ybegin/yend The y range of the scanlines being passed. + /// @param z The z coordinate of the scanline. + /// @param deepdata A `DeepData` object with the data for these + /// scanlines. + /// @returns `true` upon success, or `false` upon failure. + virtual bool write_deep_scanlines (int ybegin, int yend, int z, + const DeepData &deepdata); + + /// Write the block of deep tiles that include all pixels in + /// the range + /// + /// [xbegin,xend) X [ybegin,yend) X [zbegin,zend) + /// + /// The begin/end pairs must correctly delineate tile boundaries, with + /// the exception that it may also be the end of the image data if the + /// image resolution is not a whole multiple of the tile size. + /// + /// @param xbegin/xend The x range of the pixels covered by the group + /// of tiles passed. + /// @param ybegin/yend The y range of the pixels covered by the tiles. + /// @param zbegin/zend The z range of the pixels covered by the tiles + /// (for a 2D image, zbegin=0 and zend=1). + /// @param deepdata A `DeepData` object with the data for the tiles. + /// @returns `true` upon success, or `false` upon failure. + /// + /// @note The call will fail if the image is not tiled, or if the pixel + /// ranges do not fall along tile (or image) boundaries, or if it is not + /// a valid tile range. + virtual bool write_deep_tiles (int xbegin, int xend, int ybegin, int yend, + int zbegin, int zend, + const DeepData &deepdata); + + /// Write the entire deep image described by `deepdata`. Depending on + /// the spec, this will write either all tiles or all scanlines. + /// + /// @param deepdata A `DeepData` object with the data for the image. + /// @returns `true` upon success, or `false` upon failure. + virtual bool write_deep_image (const DeepData &deepdata); + + /// Specify a reduced-resolution ("thumbnail") version of the image. + /// Note that many image formats may require the thumbnail to be + /// specified prior to writing the pixels. + /// + /// @param thumb + /// A reference to an `ImageBuf` containing the thumbnail image. + /// @returns + /// `true` upon success, `false` if it was not possible to write + /// the thumbnail, or if this file format (or writer) does not + /// support thumbnails. + /// + /// @note This method was added to OpenImageIO 2.3. + virtual bool set_thumbnail(const ImageBuf& thumb) { return false; } + + /// @} + + /// @{ + /// @name Writing pixels (unsafe methods with pointers and strides) + /// + /// These methods are the "unsafe" versions of the `write` methods, which + /// take raw pointers and strides. They are provided for backwards + /// compatibility with older code, but the preferred interface is to use + /// the `write` methods that take `image_span` or `cspan` + /// arguments, which are bounds-safe and type-aware. + /// + /// These pointer-based versions are considered "soft-deprecated" in + /// OpenImageIO 3.1, will be marked/warned as deprecated in 3.2, and will + /// be removed in 4.0. + /// + /// Common features of all the `write` methods: + /// + /// * The `format` parameter describes the data type of the `data[]`. The + /// write methods automatically convert the data from the specified + /// `format` to the actual output data type of the file (as was + /// specified by the ImageSpec passed to `open()`). If `format` is + /// `TypeUnknown`, then rather than converting from `format`, it will + /// just copy pixels assumed to already be in the file's native data + /// layout (including, possibly, per-channel data formats as specified + /// by the ImageSpec's `channelformats` field). + /// + /// * The `stride` values describe the layout of the `data` buffer: + /// `xstride` is the distance in bytes between successive pixels + /// within each scanline. `ystride` is the distance in bytes between + /// successive scanlines. For volumetric images `zstride` is the + /// distance in bytes between successive "volumetric planes". Strides + /// set to the special value `AutoStride` imply contiguous data, i.e., + /// + /// xstride = format.size() * nchannels + /// ystride = xstride * width + /// zstride = ystride * height + /// + /// * Any *range* parameters (such as `ybegin` and `yend`) describe a + /// "half open interval", meaning that `begin` is the first item and + /// `end` is *one past the last item*. That means that the number of + /// items is `end - begin`. + /// + /// * For ordinary 2D (non-volumetric) images, any `z` or `zbegin` + /// coordinates should be 0 and any `zend` should be 1, indicating + /// that only a single image "plane" exists. + /// + /// * Scanlines or tiles must be written in successive increasing + /// coordinate order, unless the particular output file driver allows + /// random access (indicated by `supports("random_access")`). + /// + /// * All write functions return `true` for success, `false` for failure + /// (after which a call to `geterror()` may retrieve a specific error + /// message). + /// + + /// Write the full scanline that includes pixels (*,y,z). For 2D + /// non-volume images, `z` should be 0. The `xstride` value gives the + /// distance between successive pixels (in bytes). Strides set to + /// `AutoStride` imply "contiguous" data. + /// + /// @param y/z The y & z coordinates of the scanline. + /// @param format A TypeDesc describing the type of `data`. + /// @param data Pointer to the pixel data. + /// @param xstride The distance in bytes between successive + /// pixels in `data` (or `AutoStride`). + /// @returns `true` upon success, or `false` upon failure. + virtual bool write_scanline (int y, int z, TypeDesc format, + const void *data, stride_t xstride=AutoStride); + + /// Write multiple scanlines that include pixels (*,y,z) for all ybegin + /// <= y < yend, from data. This is analogous to + /// `write_scanline(y,z,format,data,xstride)` repeatedly for each of the + /// scanlines in turn (the advantage, though, is that some image file + /// types may be able to write multiple scanlines more efficiently or + /// in parallel, than it could with one scanline at a time). + /// + /// @param ybegin/yend The y range of the scanlines being passed. + /// @param z The z coordinate of the scanline. + /// @param format A TypeDesc describing the type of `data`. + /// @param data Pointer to the pixel data. + /// @param xstride/ystride + /// The distance in bytes between successive pixels + /// and scanlines (or `AutoStride`). + /// @returns `true` upon success, or `false` upon failure. + virtual bool write_scanlines (int ybegin, int yend, int z, + TypeDesc format, const void *data, + stride_t xstride=AutoStride, + stride_t ystride=AutoStride); + + /// Write the tile with (x,y,z) as the upper left corner. The three + /// stride values give the distance (in bytes) between successive + /// pixels, scanlines, and volumetric slices, respectively. Strides set + /// to AutoStride imply 'contiguous' data in the shape of a full tile, + /// i.e., + /// + /// xstride = format.size() * spec.nchannels + /// ystride = xstride * spec.tile_width + /// zstride = ystride * spec.tile_height + /// + /// @param x/y/z The upper left coordinate of the tile being passed. + /// @param format A TypeDesc describing the type of `data`. + /// @param data Pointer to the pixel data. + /// @param xstride/ystride/zstride + /// The distance in bytes between successive pixels, + /// scanlines, and image planes (or `AutoStride` to + /// indicate a "contiguous" single tile). + /// @returns `true` upon success, or `false` upon failure. + /// + /// @note This call will fail if the image is not tiled, or if (x,y,z) + /// is not the upper left corner coordinates of a tile. + virtual bool write_tile (int x, int y, int z, TypeDesc format, + const void *data, stride_t xstride=AutoStride, + stride_t ystride=AutoStride, + stride_t zstride=AutoStride); + + /// Write the block of multiple tiles that include all pixels in + /// + /// [xbegin,xend) X [ybegin,yend) X [zbegin,zend) + /// + /// This is analogous to calling `write_tile(x,y,z,...)` for each tile + /// in turn (but for some file formats, passing multiple tiles may allow + /// it to write more efficiently or in parallel). + /// + /// The begin/end pairs must correctly delineate tile boundaries, with + /// the exception that it may also be the end of the image data if the + /// image resolution is not a whole multiple of the tile size. The + /// stride values give the data spacing of adjacent pixels, scanlines, + /// and volumetric slices (measured in bytes). Strides set to AutoStride + /// imply contiguous data in the shape of the [begin,end) region, i.e., + /// + /// xstride = format.size() * spec.nchannels + /// ystride = xstride * (xend-xbegin) + /// zstride = ystride * (yend-ybegin) + /// + /// @param xbegin/xend The x range of the pixels covered by the group + /// of tiles passed. + /// @param ybegin/yend The y range of the pixels covered by the tiles. + /// @param zbegin/zend The z range of the pixels covered by the tiles + /// (for a 2D image, zbegin=0 and zend=1). + /// @param format A TypeDesc describing the type of `data`. + /// @param data Pointer to the pixel data. + /// @param xstride/ystride/zstride + /// The distance in bytes between successive pixels, + /// scanlines, and image planes (or `AutoStride`). + /// @returns `true` upon success, or `false` upon failure. + /// + /// @note The call will fail if the image is not tiled, or if the pixel + /// ranges do not fall along tile (or image) boundaries, or if it is not + /// a valid tile range. + virtual bool write_tiles (int xbegin, int xend, int ybegin, int yend, + int zbegin, int zend, TypeDesc format, + const void *data, stride_t xstride=AutoStride, + stride_t ystride=AutoStride, + stride_t zstride=AutoStride); + + /// Write a rectangle of pixels given by the range + /// + /// [xbegin,xend) X [ybegin,yend) X [zbegin,zend) + /// + /// The stride values give the data spacing of adjacent pixels, + /// scanlines, and volumetric slices (measured in bytes). Strides set to + /// AutoStride imply contiguous data in the shape of the [begin,end) + /// region, i.e., + /// + /// xstride = format.size() * spec.nchannels + /// ystride = xstride * (xend-xbegin) + /// zstride = ystride * (yend-ybegin) + /// + /// @param xbegin/xend The x range of the pixels being passed. + /// @param ybegin/yend The y range of the pixels being passed. + /// @param zbegin/zend The z range of the pixels being passed + /// (for a 2D image, zbegin=0 and zend=1). + /// @param format A TypeDesc describing the type of `data`. + /// @param data Pointer to the pixel data. + /// @param xstride/ystride/zstride + /// The distance in bytes between successive pixels, + /// scanlines, and image planes (or `AutoStride`). + /// @returns `true` upon success, or `false` upon failure. + /// + /// @note The call will fail for a format plugin that does not return + /// true for `supports("rectangles")`. + virtual bool write_rectangle (int xbegin, int xend, int ybegin, int yend, + int zbegin, int zend, TypeDesc format, + const void *data, stride_t xstride=AutoStride, + stride_t ystride=AutoStride, + stride_t zstride=AutoStride); + + /// Write the entire image of `spec.width x spec.height x spec.depth` + /// pixels, from a buffer with the given strides and in the desired + /// format. + /// + /// Depending on the spec, this will write either all tiles or all + /// scanlines. Assume that data points to a layout in row-major order. + /// + /// Because this may be an expensive operation, a progress callback + /// may be passed. Periodically, it will be called as follows: + /// + /// progress_callback (progress_callback_data, float done); + /// + /// where `done` gives the portion of the image (between 0.0 and 1.0) + /// that has been written thus far. + /// + /// @param format A TypeDesc describing the type of `data`. + /// @param data Pointer to the pixel data. + /// @param xstride/ystride/zstride + /// The distance in bytes between successive pixels, + /// scanlines, and image planes (or `AutoStride`). + /// @param progress_callback/progress_callback_data + /// Optional progress callback. + /// @returns `true` upon success, or `false` upon failure. + virtual bool write_image (TypeDesc format, const void *data, + stride_t xstride=AutoStride, + stride_t ystride=AutoStride, + stride_t zstride=AutoStride, + ProgressCallback progress_callback=nullptr, + void *progress_callback_data=nullptr); + + /// @} + + /// Read the pixels of the current subimage of `in`, and write it as the + /// next subimage of `*this`, in a way that is efficient and does not + /// alter pixel values, if at all possible. Both `in` and `this` must + /// be a properly-opened `ImageInput` and `ImageOutput`, respectively, + /// and their current images must match in size and number of channels. + /// + /// If a particular ImageOutput implementation does not supply a + /// `copy_image` method, it will inherit the default implementation, + /// which is to simply read scanlines or tiles from `in` and write them + /// to `*this`. However, some file format implementations may have a + /// special technique for directly copying raw pixel data from the input + /// to the output, when both are the same file type and the same pixel + /// data type. This can be more efficient than `in->read_image()` + /// followed by `out->write_image()`, and avoids any unintended pixel + /// alterations, especially for formats that use lossy compression. + /// + /// If the function fails and returns `false`, an error message can be + /// retrieved from `this->geterror()`, even if the actual error was + /// related to reading from `in` (i.e., reading errors are automatically + /// transferrred to `*this`). + /// + /// Note: this method is NOT thread-safe (against other threads that may + /// also be using `in`), since it depends on persistent state in the + /// ImageInput. + /// + /// @param in A pointer to the open `ImageInput` to read from. + /// @returns `true` upon success, or `false` upon failure. + virtual bool copy_image (ImageInput *in); + + // General message passing between client and image output server. This + // is currently undefined and is reserved for future use. + virtual int send_to_output (const char *format, ...); + int send_to_client (const char *format, ...); + + /// Set an IOProxy for this writer. This must be called prior to + /// `open()`, and only for writers that support them + /// (`supports("ioproxy")`). The caller retains ownership of the proxy. + /// + /// @returns `true` for success, `false` for failure. + virtual bool set_ioproxy (Filesystem::IOProxy* ioproxy); + + /// Is there a pending error message waiting to be retrieved, that + /// resulted from an ImageOutput API call made by the this thread? + /// + /// Note that any `error()` calls issued are thread-specific, and the + /// `geterror()/has_error()` are expected to be called by the same + /// thread that called whichever API function encountered an error. + bool has_error() const; + + /// Return the text of all pending error messages issued against this + /// ImageOutput by the calling thread, and clear the pending error + /// message unless `clear` is false. If no error message is pending, it + /// will return an empty string. + /// + /// Note that any `error()` calls issued are thread-specific, and the + /// `geterror()/has_error()` are expected to be called by the same + /// thread that called whichever API function encountered an error. + std::string geterror(bool clear = true) const; + + /// Error reporting for the plugin implementation: call this with + /// std::format-like arguments. It is not necessary to have the error + /// message contain a trailing newline. + template + void errorfmt(const char* fmt, const Args&... args) const { + append_error(Strutil::fmt::format (fmt, args...)); + } + +#if OIIO_DISABLE_DEPRECATED < OIIO_MAKE_VERSION(2, 6, 3) && \ + !defined(OIIO_INTERNAL) && !defined(OIIO_DOXYGEN) + /// Error reporting for the plugin implementation: call this with + /// `Strutil::format`-like arguments. It is not necessary to have the + /// error message contain a trailing newline. + /// Use with caution! Some day this will change to be fmt-like rather + /// than printf-like. + template + OIIO_DEPRECATED("use errorfmt instead, with std::format-like arguments (3.0)") + void error(const char* fmt, const Args&... args) const { + append_error(Strutil::format (fmt, args...)); + } + + /// Error reporting for the plugin implementation: call this with + /// printf-like arguments. It is not necessary to have the error message + /// contain a trailing newline. + template + OIIO_DEPRECATED("use errorfmt instead, with std::format-like arguments (3.0)") + void errorf(const char* fmt, const Args&... args) const { + append_error(Strutil::sprintf (fmt, args...)); + } + + // Error reporting for the plugin implementation: call this with + // std::format-like arguments. It is not necessary to have the error + // message contain a trailing newline. + template + OIIO_DEPRECATED("use `errorfmt` instead (2.3)") + void fmterror(const char* fmt, const Args&... args) const { + append_error(Strutil::fmt::format (fmt, args...)); + } +#endif + + /// Set the threading policy for this ImageOutput, controlling the + /// maximum amount of parallelizing thread "fan-out" that might occur + /// during large write operations. The default of 0 means that the + /// global `attribute("threads")` value should be used (which itself + /// defaults to using as many threads as cores; see Section + /// `Global Attributes`_). + /// + /// The main reason to change this value is to set it to 1 to indicate + /// that the calling thread should do all the work rather than spawning + /// new threads. That is probably the desired behavior in situations + /// where the calling application has already spawned multiple worker + /// threads. + void threads(int n); + + /// Retrieve the current thread-spawning policy. + /// @see `threads(int)` + int threads() const; + + // Custom new and delete to ensure that allocations & frees happen in + // the OpenImageIO library, not in the app or plugins (because Windows). + void* operator new (size_t size); + void operator delete (void *ptr); + + /// Call signature of a function that creates and returns an + /// `ImageOutput*`. + typedef ImageOutput* (*Creator)(); + + /// Memory tracking method. + /// Return the total heap memory allocated by `ImageOutput`. + /// Overridable version of heapsize defined in memory.h. + virtual size_t heapsize() const; + + /// Memory tracking method. + /// Return the total memory footprint of `ImageOutput`. + /// Overridable version of footprint defined in memory.h. + virtual size_t footprint() const; + +protected: + /// @{ + /// @name Helper functions for ImageOutput implementations. + /// + /// This set of utility functions are not meant to be called by user code. + /// They are protected methods of ImageOutput, and are used internally by + /// the ImageOutput implementation to help it properly implement support + /// of IOProxy. + /// + + /// Helper: convenience boilerplate for several checks and operations that + /// every implementation of ImageOutput::open() will need to do. + /// + /// 1. Check if the open `mode` is one allowed by `supports("multiimage")` + /// and `supports("mipmap")`. + /// 2. Copy the passed spec to the internal m_spec. + /// 3. Do all possible validity checks based on `supports()` (for example, + /// is the request to write volumetric data but the format writer + /// doesn't support it). + /// + /// Returns true if ok, false if the open request can't be satisfied (and + /// makes appropriate calls to this->errorfmt() to record the errors). + /// + /// Having a central helper method for this is beneficial: + /// + /// * Less repeated code in the many open() implementations, which also + /// means less opportunity for bugs. + /// * Ensures that all image writers perform the full set of possible + /// validity checks. + /// * Ensures that error messages are consistent across all writers and + /// can be improved in a single location. + /// * Better code coverage for testing, because the error handling that is + /// done centrally means we don't need to separately test every possible + /// error condition in every writer. + /// + /// @param mode + /// The mode in which the file is to be opened (`Create`, + /// `AppendSubimage`, or `AppendMIPLevel`). + /// + /// @param spec + /// The ImageSpec that we are validating. + /// + /// @param range + /// An ROI that describes the allowable pixel coordinates and channel + /// indices as half-open intervals. For example, the default value + /// `{0, 65535, 0, 65535, 0, 1, 0, 4}` means that pixel coordinates + /// must be non-negative and the width and height be representable by + /// a uint16 value, up to 4 channels are allowed, and volumes are not + /// permitted (z coordinate may only be 0). File formats that can + /// handle larger resolutions, or volumes, or >4 channels must + /// override these limits! + /// + /// @param flags + /// A bitfield flag (bits defined by `enum OpenChecks`) that can + /// indicate additional checks to perform, or checks that should be + /// skipped. + /// + /// @returns + /// Return `true` if the spec is valid and passes all checks, + /// otherwise return `false` and make appropriate calls to + /// this->errorfmt() to record the errors. + /// + /// Checks performed include: + /// + /// * Whether the open `mode` is one allowed by `supports("multiimage")` + /// and `supports("mipmap")`. + /// * Whether the resolution and channel count is within the range + /// implied by `range`. If `spec.depth < 1`, it will be set to 1. + /// * Whether the request for volumes or deep images can be accommodated + /// by the format (according to its `supports()` queries). + /// * If per-channel data types are supplied (and not all the same), but + /// but the file format does not not `supports("channelformats")`. If + /// `spec.channelformats` is used but all formats are equal, then + /// the `channelformats` vector will be cleared and only `spec.format` + /// will be used. + /// * If any of the "full" size fields are negative or zero, they will be + /// set to the corresponding pixel data size fields. + /// * Whether the pixel origin offset (`spec.x`, `spec.y`, `spec.z`) is + /// allowed to be non-zero (according to `supports("origin")` or + /// negative (`supports("negativeorigin")`) -- if it is not allowed, + /// it is an error if flags includes `Strict`, otherwise it will simply + /// be adjusted to 0. + /// * Whether the `extra_attribs` contains a request to use an IOProxy, + /// but the format writer does not report `supports("ioproxy")`. + bool check_open(OpenMode mode, const ImageSpec &spec, + ROI range = {0, 65535, 0, 65535, 0, 1, 0, 4}, + uint64_t flags = 0); + + /// Bit field definitions for the `flags` argument to `check_open()`. + enum class OpenChecks : uint64_t { + Defaults = 0, + Disallow1Channel = 1, + Disallow2Channel = 2, + Disallow1or2Channel = Disallow1Channel | Disallow2Channel, + Strict = (uint64_t(1) << 32) + }; + + /// Helper routines used by write_* implementations: convert data (in + /// the given format and stride) to the "native" format of the file + /// (described by the 'spec' member variable), in contiguous order. This + /// requires a scratch space to be passed in so that there are no memory + /// leaks. Returns a pointer to the native data, which may be the + /// original data if it was already in native format and contiguous, or + /// it may point to the scratch space if it needed to make a copy or do + /// conversions. For float->uint8 conversions only, if dither is + /// nonzero, random dither will be added to reduce quantization banding + /// artifacts; in this case, the specific nonzero dither value is used + /// as a seed for the hash function that produces the per-pixel dither + /// amounts, and the optional [xyz]origin parameters help it to align + /// the pixels to the right position in the dither pattern. + const void *to_native_scanline (TypeDesc format, + const void *data, stride_t xstride, + std::vector &scratch, + unsigned int dither=0, + int yorigin=0, int zorigin=0); + const void *to_native_tile (TypeDesc format, const void *data, + stride_t xstride, stride_t ystride, + stride_t zstride, + std::vector &scratch, + unsigned int dither=0, + int xorigin=0, int yorigin=0, int zorigin=0); + const void *to_native_rectangle (int xbegin, int xend, int ybegin, int yend, + int zbegin, int zend, + TypeDesc format, const void *data, + stride_t xstride, stride_t ystride, + stride_t zstride, + std::vector &scratch, + unsigned int dither=0, + int xorigin=0, int yorigin=0, int zorigin=0); + + // clang-format on + + /// Helper routine used by write_* implementations: convert data (in + /// the given format and strides) to the "native" format of the file + /// (described by the 'spec' member variable), in contiguous order. This + /// requires a scratch space to be passed in so that there are no memory + /// leaks. Returns a span referring to the native data, which may be the + /// original data if it was already in native format and contiguous, or + /// it may point to the scratch space if it needed to make a copy or do + /// conversions. For float->uint8 conversions only, if dither is + /// nonzero, random dither will be added to reduce quantization banding + /// artifacts; in this case, the specific nonzero dither value is used + /// as a seed for the hash function that produces the per-pixel dither + /// amounts, and the optional [xyz]origin parameters help it to align + /// the pixels to the right position in the dither pattern. + template + cspan to_native(int xbegin, int xend, int ybegin, int yend, + int zbegin, int zend, const image_span& data, + std::vector& scratch, + unsigned int dither = 0, int xorigin = 0, + int yorigin = 0, int zorigin = 0) + { + auto ispan = image_span(data.data(), m_spec.nchannels, xend - xbegin, + yend - ybegin, zend - zbegin); + OIIO_DASSERT(data.size_bytes() == ispan.size_bytes() + && ispan.is_contiguous()); + return to_native(xbegin, xend, ybegin, yend, zbegin, zend, ispan, + scratch, dither, xorigin, yorigin, zorigin); + } + + /// This version of the to_native helper takes an explicit data type + /// `format` and an image_span of generic (std::byte) data. + cspan to_native(int xbegin, int xend, int ybegin, int yend, + int zbegin, int zend, TypeDesc format, + const image_span& data, + std::vector& scratch, + unsigned int dither = 0, int xorigin = 0, + int yorigin = 0, int zorigin = 0); + // clang-format off + + /// Helper function to copy a rectangle of data into the right spot in + /// an image-sized buffer. In addition to copying to the right place, + /// this handles data format conversion and dither (if the spec's + /// "oiio:dither" is nonzero, and if it's converting from a float-like + /// type to UINT8). The buf_format describes the type of image_buffer, + /// if it's TypeDesc::UNKNOWN it will be assumed to be spec.format. + bool copy_to_image_buffer (int xbegin, int xend, int ybegin, int yend, + int zbegin, int zend, TypeDesc format, + const void *data, stride_t xstride, + stride_t ystride, stride_t zstride, + void *image_buffer, + TypeDesc buf_format = TypeDesc::UNKNOWN); + /// Helper function to copy a tile of data into the right spot in an + /// image-sized buffer. This is really just a wrapper for + /// copy_to_image_buffer, passing all the right parameters to copy + /// exactly one tile. + bool copy_tile_to_image_buffer (int x, int y, int z, TypeDesc format, + const void *data, stride_t xstride, + stride_t ystride, stride_t zstride, + void *image_buffer, + TypeDesc buf_format = TypeDesc::UNKNOWN); + + /// @} + + /// @{ + /// @name IOProxy aids for ImageOutput implementations. + /// + /// This set of utility functions are not meant to be called by user code. + /// They are protected methods of ImageOutput, and are used internally by + /// the ImageOutput implementation to help it properly implement support + /// of IOProxy. + /// + + /// Get the IOProxy being used underneath. + Filesystem::IOProxy* ioproxy(); + const Filesystem::IOProxy* ioproxy() const; + + /// Is this file currently opened (active proxy)? + bool ioproxy_opened() const; + + /// Clear the proxy ptr, and close/destroy any "local" proxy. + void ioproxy_clear(); + + /// Retrieve any ioproxy request from the configuration hint spec, and + /// make `m_io` point to it. But if no IOProxy is found in the config, + /// don't overwrite one we already have. + void ioproxy_retrieve_from_config(const ImageSpec& config); + + /// Presuming that `ioproxy_retrieve_from_config` has already been called, + /// if `m_io` is still not set (i.e., wasn't found in the config), open a + /// IOFile local proxy with the given read/write `mode`. Return true if a + /// proxy is set up. If it can't be done (i.e., no proxy passed, file + /// couldn't be opened), issue an error and return false. + bool ioproxy_use_or_open(string_view name); + + /// Helper: write to the proxy akin to fwrite(). Return true on success, + /// false upon failure and issue a helpful error message. NOTE: this is + /// not the same return value as std::fwrite, which returns the number of + /// items written. + bool iowrite(const void* buf, size_t itemsize, size_t nitems = 1); + + /// Helper: seek the proxy, akin to fseek. Return true on success, false + /// upon failure and issue an error message. (NOTE: this isionot the same + /// return value as std::fseek, which returns 0 on success.) + bool ioseek(int64_t pos, int origin = SEEK_SET); + + /// Helper: retrieve the current position of the proxy, akin to ftell. + int64_t iotell() const; + + /// Write a formatted string to the output proxy. Return true on success, + /// false upon failure and issue an error message. + template + inline bool iowritefmt(const Str& fmt, Args&&... args) + { + std::string s = Strutil::fmt::format(fmt, args...); + return iowrite(s.data(), s.size()); + } + + /// @} + +protected: + ImageSpec m_spec; // format spec of the currently open image + +private: + // PIMPL idiom -- this lets us hide details of the internals of the + // ImageInput parent class so that changing them does not break the + // ABI. + class Impl; + static void impl_deleter(Impl*); + std::unique_ptr m_impl; + + void append_error(string_view message) const; // add to m_errmessage + + /// declare friend heapsize and footprint definitions + template friend size_t pvt::heapsize(const T&); +}; + + + +/// Memory tracking. Specializes the base memory tracking functions from memory.h. + +// heapsize specialization for `ImageSpec` +template <> OIIO_API size_t pvt::heapsize(const ImageSpec&); + +// heapsize and footprint specializations for `ImageInput` +template <> OIIO_API size_t pvt::heapsize(const ImageInput&); +template <> OIIO_API size_t pvt::footprint(const ImageInput&); + +// heapsize and footprint specializations for `ImageOutput` +template <> OIIO_API size_t pvt::heapsize(const ImageOutput&); +template <> OIIO_API size_t pvt::footprint(const ImageOutput&); + + + +// Utility functions + +/// `OIIO::shutdown` prepares OpenImageIO for shutdown. Before exiting an +/// application that utilizes OpenImageIO the `OIIO::shutdown` function must be +/// called, which will perform shutdown of any running thread-pools. Failing +/// to call `OIIO::shutdown` could lead to a sporadic dead-lock during +/// application shutdown on certain platforms such as Windows. +OIIO_API void shutdown (); + +/// Returns a numeric value for the version of OpenImageIO, 10000 for each +/// major version, 100 for each minor version, 1 for each patch. For +/// example, OpenImageIO 1.2.3 would return a value of 10203. One example of +/// how this is useful is for plugins to query the version to be sure they +/// are linked against an adequate version of the library. +OIIO_API int openimageio_version (); + +/// Is there a pending global error message waiting to be retrieved? +OIIO_API bool has_error(); + +/// Returns any error string describing what went wrong if +/// `ImageInput::create()` or `ImageOutput::create()` failed (since in such +/// cases, the ImageInput or ImageOutput itself does not exist to have its +/// own `geterror()` function called). This function returns the last error +/// for this particular thread, and clear the pending error message unless +/// `clear` is false; separate threads will not clobber each other's global +/// error messages. +OIIO_API std::string geterror(bool clear = true); + +/// `OIIO::attribute()` sets a global attribute (i.e., a property or +/// option) of OpenImageIO. The `name` designates the name of the attribute, +/// `type` describes the type of data, and `value` is a pointer to memory +/// containing the new value for the attribute. +/// +/// If the name is known, valid attribute that matches the type specified, +/// the attribute will be set to the new value and `attribute()` will return +/// `true`. If `name` is not recognized, or if the types do not match +/// (e.g., `type` is `TypeFloat` but the named attribute is a string), the +/// attribute will not be modified, and `attribute()` will return `false`. +/// +/// The following are the recognized attributes: +/// +/// - `string options` +/// +/// This catch-all is simply a comma-separated list of `name=value` +/// settings of named options, which will be parsed and individually set. +/// For example, +/// +/// OIIO::attribute ("options", "threads=4,log_times=1"); +/// +/// Note that if an option takes a string value that must itself contain +/// a comma, it is permissible to enclose the value in either 'single' +/// or "double" quotes. +/// +/// - `int threads` +/// +/// How many threads to use for operations that can be sped up by being +/// multithreaded. (Examples: simultaneous format conversions of multiple +/// scanlines read together, or many ImageBufAlgo operations.) The +/// default is 0, meaning to use the full available hardware concurrency +/// detected. +/// +/// Situations where the main application logic is essentially single +/// threaded (i.e., one top-level call into OIIO at a time) should leave +/// this at the default value, or some reasonable number of cores, thus +/// allowing lots of threads to fill the cores when OIIO has big tasks to +/// complete. But situations where you have many threads at the +/// application level, each of which is expected to be making separate +/// OIIO calls simultaneously, should set this to 1, thus having each +/// calling thread do its own work inside of OIIO rather than spawning +/// new threads with a high overall "fan out." +/// +/// - `int exr_threads` +/// +/// Sets the internal OpenEXR thread pool size. The default is to use as +/// many threads as the amount of hardware concurrency detected. Note +/// that this is separate from the OIIO `"threads"` attribute. +/// +/// - `string font_searchpath` +/// +/// Colon-separated (or semicolon-separated) list of directories to search +/// if fonts are needed. (Such as for `ImageBufAlgo::render_text()`.) +/// +/// - `int use_tbb` +/// +/// If nonzero and TBB was found and support configured when OIIO was +/// compiled, parallel processing within OIIO (including inside the +/// parallel.h utilities) will try to use TBB by default where possible. +/// If zero, they will try to use OIIO's native thread pool even if TBB +/// is available. +/// +/// - `string plugin_searchpath` +/// +/// Colon-separated (or semicolon-separated) list of directories to search +/// for dynamically-loaded format plugins. +/// +/// - `int try_all_readers` +/// +/// When nonzero (the default), a call to `ImageInput::create()` or +/// `ImageInput::open()` that does not succeed in opening the file with the +/// format reader implied by the file extension will try all available +/// format readers to see if one of them can open the file. If this is +/// zero, the only reader that will be tried is the one implied by the file +/// extension. +/// +/// - `int read_chunk` +/// +/// When performing a `read_image()`, this is the number of scanlines it +/// will attempt to read at a time (some formats are more efficient when +/// reading and decoding multiple scanlines). The default is 256. The +/// special value of 0 indicates that it should try to read the whole +/// image if possible. +/// +/// - `float[] missingcolor`, `string missingcolor` +/// +/// This attribute may either be an array of float values, or a string +/// containing a comma-separated list of the values. Setting this option +/// globally is equivalent to always passing an `ImageInput` +/// open-with-configuration hint `"oiio:missingcolor"` with the value. +/// +/// When set, it gives some `ImageInput` readers the option of ignoring +/// any *missing* tiles or scanlines in the file, and instead of treating +/// the read failure of an individual tile as a full error, will +/// interpret is as an intentionally missing tile and proceed by simply +/// filling in the missing pixels with the color specified. If the first +/// element is negative, it will use the absolute value, but draw +/// alternating diagonal stripes of the color. For example, +/// +/// float missing[4] = { -1.0, 0.0, 0.0, 0.0 }; // striped red +/// OIIO::attribute ("missingcolor", TypeDesc("float[4]"), &missing); +/// +/// Note that only some file formats support files with missing tiles or +/// scanlines, and this is only taken as a hint. Please see +/// chap-bundledplugins_ for details on which formats accept a +/// `"missingcolor"` configuration hint. +/// +/// - `int debug` +/// +/// When nonzero, various debug messages may be printed. The default is 0 +/// for release builds, 1 for DEBUG builds (values > 1 are for OIIO +/// developers to print even more debugging information), This attribute +/// but also may be overridden by the OPENIMAGEIO_DEBUG environment +/// variable. +/// +/// - `int tiff:half` +/// +/// When nonzero, allows TIFF to write `half` pixel data. N.B. Most apps +/// may not read these correctly, but OIIO will. That's why the default +/// is not to support it. +/// +/// - `int dds:bc5normal` +/// +/// When nonzero, treats BC5/ATI2 format files as normal maps (loads as +/// 3 channels, computes blue from red and green). Default is 0. +/// +/// - `int openexr:core` +/// +/// When nonzero, use the new "OpenEXR core C library" when available. +/// The default is 1 for OpenEXR >= 3.1.10, 0 for older OpenEXR releases. +/// +/// - `int jpeg:com_attributes` +/// +/// When nonzero, try to parse JPEG comment blocks as key-value attributes, +/// and only set ImageDescription if the parsing fails. Otherwise, always +/// set ImageDescription to the first comment block. Default is 1. +/// +/// - `int png:linear_premult` (0) +/// +/// If nonzero, will convert perform any necessary premultiplication by +/// alpha steps needed of the PNG reader/writer in a linear color space. +/// If zero (the default), any needed premultiplication will happen +/// directly on the values, even if they are sRGB or gamma-corrected. +/// For more information, please see OpenImageIO's documentation on the +/// built-in PNG format support. +/// +/// - `int limits:channels` (1024) +/// +/// When nonzero, the maximum number of color channels in an image. Image +/// files whose headers indicate they have more channels might be assumed +/// to be corrupted or malicious files. In situations when more channels +/// are expected to be encountered, the application should raise this +/// limit. The default is 1024 channels. +/// +/// - `int limits:imagesize_MB` (32768) +/// +/// When nonzero, the maximum expected size in MB of the uncompressed pixel +/// data of a single 2D image. Images whose headers indicate that they are +/// larger than this might be assumed to be corrupted or malicious files. +/// The default is 32768 (32 GB of uncompressed pixel data -- equivalent to +/// 64k x 64k x 4 channel x half), or the total amount of total physical +/// memory available to the running process, whichever is smaller. In +/// situations when images larger than this are expected to be encountered, +/// you should raise this limit. Setting the limit to 0 means having no +/// limit. +/// +/// - `int log_times` (0) +/// +/// When the `"log_times"` attribute is nonzero, `ImageBufAlgo` functions +/// are instrumented to record the number of times they were called and +/// the total amount of time spent executing them. It can be overridden +/// by environment variable `OPENIMAGEIO_LOG_TIMES`. The totals will be +/// recorded and can be retrieved as a string by using +/// `OIIO::getattribute("timing_report", ...)`. Additionally, if the +/// value is 2 or more, the timing report will be printed to `stdout` +/// upon application exit (not advised in contexts where it isn't ok to +/// print to the terminal via stdout, such as GUI apps or libraries). +/// +/// When enabled, there is a slight runtime performance cost due to +/// checking the time at the start and end of each of those function +/// calls, and the locking and recording of the data structure that holds +/// the log information. When the `log_times` attribute is disabled, +/// there is no additional performance cost. +/// +/// - `oiio:print_uncaught_errors` (1) +/// +/// If nonzero, upon program exit, any error messages that would have been +/// retrieved by a call to `OIIO::geterror()`, but never were, will be +/// printed to stdout. While this may seem chaotic, we are presuming that +/// any well-written library or application will proactively check error +/// codes and retrieve errors, so this will never print anything upon exit. +/// But for less sophisticated applications (or users), this is very useful +/// for forcing display of error messages so that users can see relevant +/// errors even if they never check them explicitly, thus self-diagnose +/// their troubles before asking the project dev deam for help. Advanced +/// users who for some reason desire to neither retrieve errors themselves +/// nor have them printed in this manner can disable the behavior by setting +/// this attribute to 0. +/// +/// - `imagebuf:print_uncaught_errors` (1) +/// +/// If nonzero, an `ImageBuf` upon destruction will print any error messages +/// that were never retrieved by its `geterror()` method. While this may +/// seem chaotic, we are presuming that any well-written library or +/// application will proactively check error codes and retrieve errors, so +/// will never print anything upon destruction. But for less sophisticated +/// applications (or users), this is very useful for forcing display of +/// error messages so that users can see relevant errors even if they never +/// check them explicitly, thus self-diagnose their troubles before asking +/// the project dev deam for help. Advanced users who for some reason desire +/// to neither retrieve errors themselves nor have them printed in this +/// manner can disable the behavior by setting this attribute to 0. +/// +/// - `imagebuf:use_imagecache` (0) +/// +/// If nonzero, an `ImageBuf` that references a file but is not given an +/// ImageCache will read the image through the default ImageCache. +/// +/// - `imageinput:strict` (int: 0) +/// +/// If zero (the default), ImageInput readers will try to be very tolerant +/// of minor flaws or invalidity in image files being read, if possible just +/// skipping something erroneous it encounters in the hopes that the rest of +/// the file's data will be usable. If nonzero, anything clearly invalid in +/// the file will be understood to be a corrupt file with unreliable data at +/// best, and possibly malicious construction, and so will not attempt to +/// further decode anything in the file. This may be a better choice to +/// enable globally in an environment where security is a higher priority +/// than being tolerant of partially broken image files. +/// +/// @version 3.1 +template +inline bool attribute(string_view name, TypeDesc type, span value) +{ + OIIO_DASSERT(BaseTypeFromC::value == type.basetype + && type.size() == value.size_bytes()); + return attribute(name, type, OIIO::as_bytes(value)); +} + +/// A version of `OIIO::attribute()` that takes its value from a span of +/// untyped bytes. The total size of `value` must match the `type` (if not, an +/// assertion will be thrown for debug builds of OIIO, an error will be +/// printed for release builds). +/// +/// @version 3.1 +OIIO_API bool attribute(string_view name, TypeDesc type, cspan value); + +/// A version of `OIIO::attribute()` where the `value` is only a pointer +/// specifying the beginning of the memory where the value should be copied +/// from. This is "unsafe" in the sense that there is no assurance that it +/// points to a sufficient amount of memory, so the span-based versions of +/// `attribute()` are preferred. +/// +/// This was added in version 2.1. +OIIO_API bool attribute(string_view name, TypeDesc type, const void* value); + +/// Shortcut attribute() for setting a single integer. +inline bool attribute(string_view name, int value) { + return attribute(name, TypeInt, &value); +} +/// Shortcut attribute() for setting a single float. +inline bool attribute(string_view name, float value) { + return attribute(name, TypeFloat, &value); +} +/// Shortcut attribute() for setting a single string. +inline bool attribute(string_view name, string_view value) { + std::string valstr = value; + const char *s = valstr.c_str(); + return attribute(name, TypeString, &s); +} + +/// Get the named global attribute of OpenImageIO, store it in `value`. +/// Return `true` if found and it was compatible with the type specified, +/// otherwise return `false` and do not modify the contents of `value`. It +/// is up to the caller to ensure that `val` points to the right kind and +/// size of storage for the given type. +/// +/// In addition to being able to retrieve all the attributes that are +/// documented as settable by the `OIIO::attribute()` call, `getattribute()` +/// can also retrieve the following read-only attributes: +/// +/// - `string version` +/// +/// The version designation of the OpenImageIO library, as a string. +/// +/// - `string format_list` +/// - `string input_format_list` +/// - `string output_format_list` +/// +/// A comma-separated list of all the names of, respectively, all +/// supported image formats, all formats accepted as inputs, and all +/// formats accepted as outputs. +/// +/// - `string extension_list` +/// +/// For each format, the format name, followed by a colon, followed by a +/// comma-separated list of all extensions that are presumed to be used +/// for that format. Semicolons separate the lists for formats. For +/// example, +/// +/// "tiff:tif;jpeg:jpg,jpeg;openexr:exr" +/// +/// - `string library_list` +/// +/// For each format that uses a dependent library, the format name, +/// followed by a colon, followed by the name and version of the +/// dependency. Semicolons separate the lists for formats. For example, +/// +/// "tiff:LIBTIFF 4.0.4;gif:gif_lib 4.2.3;openexr:OpenEXR 2.2.0" +/// +/// - `string font_list` +/// - `string font_file_list` +/// - `string font_dir_list` +/// +/// A semicolon-separated list of, respectively, all the fonts that +/// OpenImageIO can find, all the font files that OpenImageIO can find (with +/// full paths), and all the directories that OpenImageIO will search for +/// fonts. (Added in OpenImageIO 2.5) +/// +/// - `string font_family_list` +/// +/// A semicolon-separated list of all the font family names that +/// OpenImageIO can find. (Added in OpenImageIO 3.0) +/// +/// - `string font_style_list:family` +/// +/// A semicolon-separated list of all the font style names that +/// belong to the given font family. (Added in OpenImageIO 3.0) +/// +/// - `string font_filename:family:style` +/// +/// The font file (with full path) that defines the given font +/// family and style. (Added in OpenImageIO 3.0) +/// +/// - `string filter_list` +/// +/// A semicolon-separated list of all built-in 2D filters. (Added in +/// OpenImageIO 2.5.9) +/// +/// - int64_t IB_local_mem_current +/// - int64_t IB_local_mem_peak +/// +/// Current and peak size (in bytes) of how much memory was consumed by +/// ImageBufs that owned their own allcoated local pixel buffers. (Added in +/// OpenImageIO 2.5.) +/// +/// - float IB_total_open_time +/// - float IB_total_image_read_time +/// +/// Total amount of time (in seconds) that ImageBufs spent opening +/// (including reading header information) and reading pixel data from files +/// that they opened and read themselves (that is, excluding I/O from IBs +/// that were backed by ImageCach. (Added in OpenImageIO 2.5.) +/// +/// - `string opencolorio_version` +/// +/// Returns the version (such as "2.2.0") of OpenColorIO that is used by +/// OpenImageiO, or "0.0.0" if no OpenColorIO support has been enabled. +/// (Added in OpenImageIO 2.4.6) +/// +/// - `string hw:simd` +/// - `string build:simd` (read-only) +/// +/// A comma-separated list of hardware CPU features for SIMD (and some +/// other things). The `"build:simd"` attribute is similarly a list of +/// which features this build of OIIO was compiled to support. +/// +/// These were added in OpenImageIO 1.8. The `"build:simd"` attribute was +/// added added in OpenImageIO 2.5.8 as a preferred synonym for what +/// previously was called `"oiio:simd"`, which is now deprecated. +/// +/// - `string build:platform` (read-only) +/// +/// THe name of the OS and CPU architecture that OpenImageIO was built +/// for (e.g., `"Linux/x86_64"`). (Added in OpenImageIO 2.5.8.) +/// +/// - `string build:compiler` (read-only) +/// +/// THe name and version of the compiler used to build OIIO. +/// (Added in OpenImageIO 2.5.8.) +/// +/// - `string build:dependencies` (read-only) +/// +/// List of library dependencieis (where known) and versions, separatd by +/// semicolons. (Added in OpenImageIO 2.5.8.) +/// +/// - `int resident_memory_used_MB` +/// +/// This read-only attribute can be used for debugging purposes to report +/// the approximate process memory used (resident) by the application, in +/// MB. +/// +/// - `string timing_report` +/// +/// Retrieving this attribute returns the timing report generated by the +/// `log_timing` attribute (if it was enabled). The report is sorted +/// alphabetically and for each named instrumentation region, prints the +/// number of times it executed, the total runtime, and the average per +/// call, like this: +/// +/// IBA::computePixelStats 2 2.69ms (avg 1.34ms) +/// IBA::make_texture 1 74.05ms (avg 74.05ms) +/// IBA::mul 8 2.42ms (avg 0.30ms) +/// IBA::over 10 23.82ms (avg 2.38ms) +/// IBA::resize 20 0.24s (avg 12.18ms) +/// IBA::zero 8 0.66ms (avg 0.08ms) +/// +/// +/// @version 3.1 +template +inline bool getattribute(string_view name, TypeDesc type, span value) +{ + OIIO_DASSERT(BaseTypeFromC::value == type.basetype + && type.size() == value.size_bytes()); + return OIIO::v3_1::getattribute(name, type, OIIO::as_writable_bytes(value)); +} + +/// A version of `getattribute()` that stores the value in a span of +/// untyped bytes. The total size of `value` must match the `type` (if +/// not, an assertion will be thrown for debug OIIO builds, an error will +/// be printed for release builds). +/// +/// @version 3.1 +OIIO_API bool getattribute(string_view name, TypeDesc type, + span value); + +/// A version of `OIIO::getattribute()` where the `value` is only a pointer +/// specifying the beginning of the memory where the value should be copied. +/// This is "unsafe" in the sense that there is no assurance that it points to +/// a sufficient amount of memory, so the span-based versions of `attribute()` +/// are preferred. +OIIO_API bool getattribute(string_view name, TypeDesc type, void* val); + +/// Shortcut getattribute() for retrieving a single integer. The value is +/// placed in `value`, and the function returns `true` if the attribute was +/// found and was legally convertible to an int. +inline bool getattribute (string_view name, int &value) { + return getattribute (name, TypeInt, &value); +} +/// Shortcut getattribute() for retrieving a single float. The value is placed +/// in `value`, and the function returns `true` if the attribute was found and +/// was legally convertible to a float. +inline bool getattribute (string_view name, float &value) { + return getattribute (name, TypeFloat, &value); +} +/// Shortcut getattribute() for retrieving a single string as a `std::string`. +/// The value is placed in `value`, and the function returns `true` if the +/// attribute was found. +inline bool getattribute (string_view name, std::string &value) { + ustring s; + bool ok = getattribute (name, TypeString, &s); + if (ok) + value = s.string(); + return ok; +} +/// Shortcut getattribute() for retrieving a single string as a `char*`. +inline bool getattribute (string_view name, char **val) { + return getattribute (name, TypeString, val); +} +/// Shortcut getattribute() for retrieving a single integer, with a supplied +/// default value that will be returned if the attribute is not found or +/// could not legally be converted to an int. +inline int get_int_attribute (string_view name, int defaultval=0) { + int val; + return getattribute (name, TypeInt, &val) ? val : defaultval; +} +/// Shortcut getattribute() for retrieving a single float, with a supplied +/// default value that will be returned if the attribute is not found or +/// could not legally be converted to a float. +inline float get_float_attribute (string_view name, float defaultval=0) { + float val; + return getattribute (name, TypeFloat, &val) ? val : defaultval; +} +/// Shortcut getattribute() for retrieving a single string, with a supplied +/// default value that will be returned if the attribute is not found. +inline string_view get_string_attribute (string_view name, + string_view defaultval = string_view()) { + ustring val; + return getattribute (name, TypeString, &val) ? string_view(val) : defaultval; +} + + +/// Set the metadata of the `spec` to presume that color space is `name` (or +/// to assume nothing about the color space if `name` is empty). The core +/// operation is to set the "oiio:ColorSpace" attribute, but it also removes +/// or alters several other attributes that may hint color space in ways that +/// might be contradictory or no longer true. This uses the current default +/// color config to adjudicate color space name equivalencies. +/// +/// @version 3.0 +OIIO_API void set_colorspace(ImageSpec& spec, string_view name); + +/// Set the metadata of the `spec` to reflect Rec709 color primaries and the +/// given gamma. The core operation is to set the "oiio:ColorSpace" attribute, +/// but it also removes or alters several other attributes that may hint color +/// space in ways that might be contradictory or no longer true. This uses the +/// current default color config to adjudicate color space name equivalencies. +/// +/// @version 3.0 +OIIO_API void set_colorspace_rec709_gamma(ImageSpec& spec, float gamma); + + +/// Are the two named color spaces equivalent, based on the default color +/// config in effect? +/// +/// @version 3.0 +OIIO_API bool equivalent_colorspace(string_view a, string_view b); + + +/// Register the input and output 'create' routines and list of file +/// extensions for a particular format. +OIIO_API void declare_imageio_format (const std::string &format_name, + ImageInput::Creator input_creator, + const char **input_extensions, + ImageOutput::Creator output_creator, + const char **output_extensions, + const char *lib_version); + +/// Is `name` one of the known format names? +OIIO_API bool is_imageio_format_name(string_view name); + +/// Utility: Parse the "extension_list" attribute into a std::map string +/// keys are the names of all the file formats OIIO knows how to read, and +/// whose values are vectors of strings of the file extensions associated +/// with the file format. (Added in OIIO 2.2.13.) +inline std::map> +get_extension_map() +{ + std::map> map; + auto all_extensions = get_string_attribute("extension_list"); + for (auto oneformat : Strutil::splitsv(all_extensions, ";")) { + auto format_exts = Strutil::splitsv(oneformat, ":", 2); + if (format_exts.size() != 2) + continue; // something went wrong + map[format_exts[0]] = Strutil::splits(format_exts[1], ","); + } + return map; +} + + + +/// Helper function: convert contiguous data between two arbitrary pixel +/// data types (specified by TypeDesc's). Return true if ok, false if it +/// didn't know how to do the conversion. If dst_type is UNKNOWN, it will +/// be assumed to be the same as src_type. +/// +/// The conversion is of normalized (pixel-like) values -- for example +/// 'UINT8' 255 will convert to float 1.0 and vice versa, not float 255.0. +/// If you want a straight C-like data cast conversion (e.g., uint8 255 -> +/// float 255.0), then you should prefer the un-normalized convert_type() +/// utility function found in typedesc.h. +OIIO_API bool convert_pixel_values (TypeDesc src_type, const void *src, + TypeDesc dst_type, void *dst, int n = 1); + +/// Helper function: copy values from spans `src` to `dst`, converting between +/// types as appropriate. Return true if ok, false if it didn't know how to do +/// the conversion. +/// +/// The conversion is of normalized (pixel-like) values -- for example 'UINT8' +/// 255 will convert to float 1.0 and vice versa, not float 255.0. If you want +/// a straight C-like data cast conversion (e.g., uint8 255 -> float 255.0), +/// then you should prefer the un-normalized convert_type() utility function +/// found in typedesc.h. +template +bool +convert_pixel_values(cspan src, span dst) +{ + OIIO_DASSERT(dst.size() >= src.size()); + return convert_pixel_values(TypeDescFromC_v, src.data(), + TypeDescFromC_v, dst.data(), + std::min(dst.size(), src.size())); +} + + +/// Helper routine for data conversion: Convert an image of nchannels x +/// width x height x depth from src to dst. The src and dst may have +/// different data formats and layouts. Clever use of this function can +/// not only exchange data among different formats (e.g., half to 8-bit +/// unsigned), but also can copy selective channels, copy subimages, +/// etc. If you're lazy, it's ok to pass AutoStride for any of the +/// stride values, and they will be auto-computed assuming contiguous +/// data. Return true if ok, false if it didn't know how to do the +/// conversion. +OIIO_API bool convert_image (int nchannels, int width, int height, int depth, + const void *src, TypeDesc src_type, + stride_t src_xstride, stride_t src_ystride, + stride_t src_zstride, + void *dst, TypeDesc dst_type, + stride_t dst_xstride, stride_t dst_ystride, + stride_t dst_zstride); + +/// Helper routine for data conversion: Convert an image described by +/// image_span `src` into image_span `dst`, which must be the same dimensions +/// but possibly differing data type and strides. Clever use of this function +/// can not only exchange data among different formats (e.g., half to 8-bit +/// unsigned), but also can copy selective channels, copy subimages, etc. +/// Return true if ok, false if it didn't know how to do the conversion. +template +bool +convert_image(const image_span& src, const image_span& dst) +{ + // For now, just implement by wrapping the pointer-based version. + OIIO_DASSERT(src.nchannels() == dst.nchannels() + && src.width() == dst.width() && src.height() == dst.height() + && src.depth() == dst.depth()); + return convert_image(src.nchannels(), src.width(), src.height(), + src.depth(), src.data(), TypeDescFromC_v, + src.xstride(), src.ystride(), src.zstride(), + dst.data(), TypeDescFromC_v, dst.xstride(), + dst.ystride(), dst.zstride()); +} + + +/// Helper routine for data conversion: Convert an image described by +/// image_span `src` into image_span `dst`, which must be the same dimensions +/// but possibly differing data type and strides. The data types are passed as +/// `TypeDesc`, and the spans are untyped bytes that provide the dimensions +/// and memory layout. +inline bool +convert_image(const image_span& src, TypeDesc src_type, + const image_span& dst, TypeDesc dst_type) +{ + // For now, just implement by wrapping the pointer-based version. + OIIO_DASSERT(src.nchannels() == dst.nchannels() + && src.width() == dst.width() && src.height() == dst.height() + && src.depth() == dst.depth()); + OIIO_DASSERT(src_type.size() == src.chansize() + && dst_type.size() == dst.chansize()); + return convert_image(src.nchannels(), src.width(), src.height(), + src.depth(), src.data(), src_type, src.xstride(), + src.ystride(), src.zstride(), dst.data(), dst_type, + dst.xstride(), dst.ystride(), dst.zstride()); +} + + + +/// A version of convert_image that will break up big jobs into multiple +/// threads. +OIIO_API bool parallel_convert_image ( + int nchannels, int width, int height, int depth, + const void *src, TypeDesc src_type, + stride_t src_xstride, stride_t src_ystride, + stride_t src_zstride, + void *dst, TypeDesc dst_type, + stride_t dst_xstride, stride_t dst_ystride, + stride_t dst_zstride, int nthreads=0); + +/// A version of convert_image that will break up big jobs into multiple +/// threads. The data types are taken from the spans. +template +bool +parallel_convert_image(const image_span& src, + const image_span& dst, int nthreads = 0) +{ + // For now, just implement by wrapping the pointer-based version. + OIIO_DASSERT(src.nchannels() == dst.nchannels() + && src.width() == dst.width() && src.height() == dst.height() + && src.depth() == dst.depth()); + return parallel_convert_image(src.nchannels(), src.width(), src.height(), + src.depth(), src.data(), + TypeDescFromC_v, src.xstride(), + src.ystride(), src.zstride(), dst.data(), + TypeDescFromC_v, dst.xstride(), + dst.ystride(), dst.zstride(), nthreads); +} + +/// A version of convert_image that will break up big jobs into multiple +/// threads. The data types are passed as `TypeDesc`, and the spans are +/// untyped bytes that provide the dimensions and memory layout. +inline bool +parallel_convert_image(const image_span& src, + TypeDesc src_type, const image_span& dst, + TypeDesc dst_type, int nthreads = 0) +{ + // For now, just implement by wrapping the pointer-based version. + OIIO_DASSERT(src.nchannels() == dst.nchannels() + && src.width() == dst.width() && src.height() == dst.height() + && src.depth() == dst.depth()); + OIIO_DASSERT(src_type.size() == src.chansize() + && dst_type.size() == dst.chansize()); + return parallel_convert_image(src.nchannels(), src.width(), src.height(), + src.depth(), src.data(), + src_type, src.xstride(), + src.ystride(), src.zstride(), dst.data(), + dst_type, dst.xstride(), + dst.ystride(), dst.zstride(), nthreads); +} + + + +/// Add random [-ditheramplitude,ditheramplitude] dither to the color channels +/// of the image. Dither will not be added to the alpha or z channel. The +/// image origin and dither seed values allow a reproducible (or variable) +/// dither pattern. If the strides are set to AutoStride, they will be +/// assumed to be contiguous floats in data of the given dimensions. +OIIO_API void add_dither (int nchannels, int width, int height, int depth, + float *data, + stride_t xstride, stride_t ystride, stride_t zstride, + float ditheramplitude, + int alpha_channel = -1, int z_channel = -1, + unsigned int ditherseed = 1, + int chorigin=0, int xorigin=0, + int yorigin=0, int zorigin=0); + +/// Convert unassociated to associated alpha by premultiplying all color +/// (non-alpha, non-z) channels by alpha. The nchannels, width, height, and +/// depth parameters describe the "shape" of the image data (along with +/// optional stride overrides). The chbegin/chend describe which range of +/// channels to actually premultiply. +OIIO_API void premult (int nchannels, int width, int height, int depth, + int chbegin, int chend, + TypeDesc datatype, void *data, stride_t xstride, + stride_t ystride, stride_t zstride, + int alpha_channel = -1, int z_channel = -1); + +/// Helper routine for data conversion: Copy an image of nchannels x +/// width x height x depth from src to dst. The src and dst may have +/// different data layouts, but must have the same data type. Clever +/// use of this function can change layouts or strides, copy selective +/// channels, copy subimages, etc. If you're lazy, it's ok to pass +/// AutoStride for any of the stride values, and they will be +/// auto-computed assuming contiguous data. Return true if ok, false if +/// it didn't know how to do the conversion. +/// +/// Note: when possible, the image_span based copy_image should be preferred. +/// This one will eventually be deprecated. +OIIO_API bool copy_image (int nchannels, int width, int height, int depth, + const void *src, stride_t pixelsize, + stride_t src_xstride, stride_t src_ystride, + stride_t src_zstride, + void *dst, stride_t dst_xstride, + stride_t dst_ystride, stride_t dst_zstride); + +/// Helper routine for data conversion: Copy the contents of the `src` image +/// span to `dst` that has exactly the same dimensions but may have different +/// strides. Return true if ok, false if it couldn't do it. (Reserved for +/// future use; currently is always succeeds) +template +bool copy_image(const image_span& dst, + const image_span& src) +{ + // Arbitrary types are handled by just converting to generic byte + // image_spans. + return copy_image(as_image_span_writable_bytes(dst), + as_image_span_bytes(src)); +} + +/// copy_image base case: generic span of bytes. +OIIO_API bool +copy_image(const image_span &dst, + const image_span& src); + + + +/// Helper: manufacture a span given an image pointer, format, size, and +/// strides. Use with caution! This is making a lot of assumptions that the +/// data pointer really does point to memory that's ok to access according to +/// the sizes and strides you give. +OIIO_API span +span_from_buffer(void* data, TypeDesc format, int nchannels, int width, + int height, int depth, stride_t xstride = AutoStride, stride_t ystride = AutoStride, + stride_t zstride = AutoStride); +OIIO_API cspan +cspan_from_buffer(const void* data, TypeDesc format, int nchannels, int width, + int height, int depth, stride_t xstride = AutoStride, stride_t ystride = AutoStride, + stride_t zstride = AutoStride); + + +// All the wrap_foo functions implement a wrap mode, wherein coord is +// altered to be origin <= coord < origin+width. The return value +// indicates if the resulting wrapped value is valid (example, for +// wrap_black, values outside the region are invalid and do not modify +// the coord parameter). +OIIO_API bool wrap_black (int &coord, int origin, int width); +OIIO_API bool wrap_clamp (int &coord, int origin, int width); +OIIO_API bool wrap_periodic (int &coord, int origin, int width); +OIIO_API bool wrap_periodic_pow2 (int &coord, int origin, int width); +OIIO_API bool wrap_mirror (int &coord, int origin, int width); + +// Typedef for the function signature of a wrap implementation. +typedef bool (*wrap_impl) (int &coord, int origin, int width); + + +/// `debug(format, ...)` prints debugging message when attribute "debug" is +/// nonzero, which it is by default for DEBUG compiles or when the +/// environment variable OPENIMAGEIO_DEBUG is set. This is preferred to raw +/// output to stderr for debugging statements. +OIIO_API void debug (string_view str); + +/// debug output with `std::format` conventions. +/// This is just a wrapped synonym for Strutil::debug(). +template +void debugfmt (const char* fmt, Args&&... args) +{ + Strutil::debug(fmt, std::forward(args)...); +} + +namespace pvt { +// For internal use - use errorfmt() below for a nicer interface. +OIIO_API void append_error(string_view message); +} + +/// error logging (mostly for OIIO internals) with `std::format` conventions. +template +inline void errorfmt(const char* fmt, Args&&... args) +{ + pvt::append_error(string_view(Strutil::fmt::format(fmt, args...))); +} + +/// Internal function to log time recorded by an OIIO::timer(). It will only +/// trigger a read of the time if the "log_times" attribute is set or the +/// OPENIMAGEIO_LOG_TIMES env variable is set. +OIIO_API void log_time(string_view key, const Timer& timer, int count = 1); + +// to force correct linkage on some systems +OIIO_API void _ImageIO_force_link (); + +OIIO_NAMESPACE_3_1_END + + +////////////////////////////////////////////////////////////////////////// +// DEPRECATED things +// +// These are all hidden from documentation and internal use, and should +// trigger deprecation warnings if used externally. They will most likely be +// removed entirely before the final release of OIIO 3.0. +// +#if !defined(OIIO_INTERNAL) && !defined(OIIO_DOXYGEN) +OIIO_NAMESPACE_BEGIN + +#if OIIO_DISABLE_DEPRECATED < OIIO_MAKE_VERSION(2, 1, 0) +// DEPRECATED(2.1): old name +OIIO_DEPRECATED("use convert_pixel_values instead (2.1)") +inline bool convert_types (TypeDesc src_type, const void *src, + TypeDesc dst_type, void *dst, int n = 1) { + return convert_pixel_values (src_type, src, dst_type, dst, n); +} +#endif + +#if OIIO_DISABLE_DEPRECATED < OIIO_MAKE_VERSION(2, 6, 3) +// (Unfortunate old synonym) +template +OIIO_DEPRECATED("use `debugfmt` instead") +inline void fmtdebug (const char* fmt, const Args&... args) +{ + debug (Strutil::fmt::format(fmt, args...)); +} + +/// debug output with printf conventions. +template +OIIO_DEPRECATED("use `debugfmt` instead, with std::format-like arguments (3.0)") +inline void debugf (const char* fmt, const Args&... args) +{ + debug (Strutil::sprintf(fmt, args...)); +} + +/// debug output with the same conventions as Strutil::format. Beware, this +/// will change one day! +template +OIIO_DEPRECATED("use `debugfmt` instead, with std::format-like arguments (3.0)") +inline void debug (const char* fmt, const T1& v1, const Args&... args) +{ + debug (Strutil::format(fmt, v1, args...)); +} +#endif + +OIIO_NAMESPACE_END +#endif +// +////////////////////////////////////////////////////////////////////////// + + + + +#if FMT_VERSION >= 100000 +FMT_BEGIN_NAMESPACE +template<> struct formatter : ostream_formatter {}; +FMT_END_NAMESPACE +#endif diff --git a/third_party/tlRender-install-Release/include/OpenImageIO/memory.h b/third_party/tlRender-install-Release/include/OpenImageIO/memory.h new file mode 100644 index 00000000..8d2f2f65 --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenImageIO/memory.h @@ -0,0 +1,130 @@ +// Copyright Contributors to the OpenImageIO project. +// SPDX-License-Identifier: Apache-2.0 +// https://github.com/AcademySoftwareFoundation/OpenImageIO + + +///////////////////////////////////////////////////////////////////////// +/// @file memory.h +/// +/// @brief Utilities for memory tracking. +///////////////////////////////////////////////////////////////////////// + + +#pragma once + +#define OPENIMAGEIO_MEMORY_H + +#include +#include +#include + +OIIO_NAMESPACE_3_1_BEGIN + +namespace pvt { + +/// Return the total heap memory allocated by `object`. +/// The template specialization can be used to give improved results for non trivial types +/// that perform heap allocation, and to include members allocations recursively. +template +inline size_t +heapsize(const T& t) +{ + return 0; +} + +/// Return the total memory footprint of `object`. If possible, including any heap +/// allocations done by any constituent parts. The default implementation just reduces +/// to sizeof(object), given that heapsize(object) would return 0. +/// The template specialization can be used to give improved results for non trivial types +/// that perform heap allocation. +template +inline size_t +footprint(const T& t) +{ + return sizeof(T) + heapsize(t); +} + +template +inline size_t +footprint(const T* t) +{ + return sizeof(T*) + (t ? footprint(*t) : 0); +} + +/// Specializations for common STL types + + +// heapsize specialization for std::string +template<> +inline size_t +heapsize(const std::string& s) +{ + // accounts for small string optimization that does not + // use any heap allocations + const char* const sbegin = (const char*)&s; + const char* const send = sbegin + sizeof(std::string); + const char* const sdata = s.data(); + const bool is_small = sdata >= sbegin && sdata < send; + return is_small ? 0 : s.capacity(); +} + + +// heapsize specialization for std::shared_ptr +template +inline size_t +heapsize(const std::shared_ptr& ref) +{ + return ref ? footprint(*ref.get()) : 0; +} + +// footprint specialization for std::shared_ptr +template +inline size_t +footprint(const std::shared_ptr& ref) +{ + return sizeof(std::shared_ptr) + heapsize(ref); +} + +// heapsize specialization for std::unique_ptr +template +inline size_t +heapsize(const std::unique_ptr& ref) +{ + return ref ? footprint(*ref.get()) : 0; +} + +// footprint specialization for std::unique_ptr +template +inline size_t +footprint(const std::unique_ptr& ref) +{ + return sizeof(std::unique_ptr) + heapsize(ref); +} + +// heapsize specialization for std::vector +template +inline size_t +heapsize(const std::vector& vec) +{ + size_t size = 0; + // account for used allocated memory + for (const T& elem : vec) + size += footprint(elem); + // account for unused allocated memory + size += (vec.capacity() - vec.size()) * sizeof(T); + return size; +} + +// footprint specialization for std::vector +template +inline size_t +footprint(const std::vector& vec) +{ + return sizeof(std::vector) + heapsize(vec); +} + + +} // namespace pvt + + +OIIO_NAMESPACE_3_1_END diff --git a/third_party/tlRender-install-Release/include/OpenImageIO/nsversions.h b/third_party/tlRender-install-Release/include/OpenImageIO/nsversions.h new file mode 100644 index 00000000..016cb966 --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenImageIO/nsversions.h @@ -0,0 +1,204 @@ +// Copyright Contributors to the OpenImageIO project. +// SPDX-License-Identifier: Apache-2.0 +// https://github.com/AcademySoftwareFoundation/OpenImageIO + +// clang-format off + +#ifndef OPENIMAGEIO_NSVERSIONS_H +#define OPENIMAGEIO_NSVERSIONS_H + +#ifndef OPENIMAGEIO_VERSION_H +# error "oiioversion.h must always be included before nsversions.h" +#endif + + +// Establish the namespaces. +// +// The outer namespace defaults to OpenImageIO, but can be overriden at build +// time. "OIIO" is always defined as an alias to this namespace, so client +// software can always say `OIIO:Foo` without needing to know the custom outer +// namespace. +// +// The primary inner namespace is vMAJ_MIN (or in main, vMAJ_MIN_PAT). The +// outer namespace declares the inner namespace as "inline", so anything in it +// is visible in OIIO by default. +// +// But we also keep around all the symbols for older vOLDMAJ_OLDMIN, so that +// we don't lose link/ABI compatibility with apps compiled for older minor +// versions within the same major version family. +// +// +// Here is the scheme we use to maintain ABI compatibility across minor +// version boundaries. +// +// 1. Declarations in the current new namespace +// +// * Pure OIIO internals that are not exposed in the public APIs or +// headers, and therefore generate no externally visible linker symbols. +// * NEW items that will break ABI or API, in main (will be moved into a +// specific version namespace before release). +// +// These declarations perpetually live in the "current" namespace: +// +// OIIO_NAMESPACE_BEGIN +// inline int myfunc() { ... } +// constexpr int myconst = 3; +// template Mytemplate { ... } +// // ONLY if Mytemplate is not used as the type of a parameter +// // or return value of any exposed public OIIO API function! +// // If it ever is, it should be moved to a versioned namespace. +// OIIO_NAMESPACE_END +// +// Because of the inline inner default namespace, user code can just refer +// to these as `OIIO::myfunc()`, `OIIO::myconst`, etc. +// +// 2. Declarations carried over from previous versions and aliased into +// later/current namespaces: +// +// * Anything that was introduced in earlier versions and is enclosed in a +// namespace (like `Filesystem`, `Strutil`, or `ImageBufAlgo`). +// * Existing classes that were introduced in earlier OIIO versions, and +// any modifications that can be amended without breaking their ABIs +// (such as adding a non-virtual method). This also includes templated +// classes used to pass parameters or return values by OIIO's APIs. +// * Functions that were introduced in earlier versions and can simply +// be aliased into subsequent namespaces with `using`. +// * NEW items in the above categories that are logically related to +// existing things should be placed in the oldest namespace where the +// rest of its cohort lives, if that can be done without conflicting with +// existing symbols. +// +// These live in the namespace of the version where they were first +// introduced. Later versions alias these into their namespaces with +// `using`. +// +// OIIO_NAMESPACE_3_1_BEGIN +// class Myclass { ... }; +// template Mytemplate { ... } +// int standalone_func(); +// namespace Group { +// int func_in_group(); +// } +// OIIO_NAMESPACE_3_1_END +// +// // Alias these items into subsequent version namespaces +// OIIO_NAMESPACE_BEGIN +// using v3_1::Myclass; +// using v3_1::Mytemplate; +// using v3_1::standalone_func; +// namespace Group { +// using namespace v3_1::Group; +// // Makes EVERYTHING declared in v3_1::Group alias to +// // within the current namespace's Group. +// } +// OIIO_NAMESPACE_END +// +// 3. Declarations that must be separately defined in each namespace. +// +// * Classes or functions whose declarations in newer versions have changed +// in an ABI-incompatible way. +// * Standalone functions or globals that are not enclosed in a namespace +// and for whatever reason can't simply be pulled into later namespaces +// with the `using` directive. +// +// These must have separate symbols in each versioned namespace to preserve +// ABI compatibility. But it is customary to make the full and most +// efficient implementation in the newer namespace, and the others be +// trivial wrappers (with some small penalty for the double call, but +// that's ok because it's only incurred when linking against a too-new +// version). +// +// Declarations in the .h header: +// +// OIIO_NAMESPACE_3_1_BEGIN +// int myfunc(); +// class Myclass { int foo; ... } +// int anotherfunc(Myclass& m); +// OIIO_NAMESPACE_3_1_END +// +// // Duplicate in subsequent version namespaces +// OIIO_NAMESPACE_BEGIN +// float myfunc(); // changed return value +// class Myclass { float foo; ... } // data layout changed +// int anotherfunc(Myclass& m); // DIFFERENT Myclass! +// OIIO_NAMESPACE_END +// +// Implementation in the .cpp file: +// +// OIIO_NAMESPACE_BEGIN +// // Current namespace gets a full implementation of myfunc: +// float myfunc() { ... } +// +// // New anotherfunc takes new definition of Myclass: +// int anotherfunc(Myclass& m) { ... } +// OIIO_NAMESPACE_END +// +// OIIO_NAMESPACE_3_1_BEGIN +// // Old version +// int myfunc() { ... } +// +// // Old anotherfunc takes old definition of Myclass: +// int anotherfunc(v3_1::Myclass& m) { ... } +// OIIO_NAMESPACE_3_1_END +// + + +// Macros for defining namespaces with an explicit version +#define OIIO_NS_BEGIN(ver) namespace OIIO_OUTER_NAMESPACE { namespace ver { +#define OIIO_NS_END } } + +// Specialty macro: Make something ABI compatible with 3.1 +#define OIIO_NAMESPACE_3_1_BEGIN OIIO_NAMESPACE_BEGIN +#define OIIO_NAMESPACE_3_1_END OIIO_NAMESPACE_END + + + + +// Forward declarations of important classes +OIIO_NAMESPACE_3_1_BEGIN +// libOpenImageIO_Util +class ArgParse; +class ColorConfig; +class ColorProcessor; +class ErrorHandler; +class Filter1D; +class Filter2D; +class FilterDesc; +class ParamValue; +class ParamValueList; +class ParamValueSpan; +class ScopedTimer; +class Timer; +struct TypeDesc; +class ustring; +class ustringhash; + +// libOpenImageIO +class DeepData; +class ImageBuf; +class ImageBufImpl; +class ImageCache; +class ImageCachePerThreadInfo; +class ImageCacheFile; +class ImageCacheImpl; +class ImageCacheTile; +class ImageInput; +class ImageOutput; +class ImageSpec; +class paropt; +struct ROI; +class TextureOptBatch_v1; +class TextureOpt_v2; +using TextureOpt = TextureOpt_v2; +class TextureSystem; +class TextureSystemImpl; +namespace Filesystem { + class IOProxy; +} +namespace ImageBufAlgo { } +namespace Strutil { } +namespace Sysutil { } +namespace simd { } +OIIO_NAMESPACE_3_1_END + +#endif /* defined(OPENIMAGEIO_NSVERSIONS_H) */ diff --git a/third_party/tlRender-install-Release/include/OpenImageIO/oiioversion.h b/third_party/tlRender-install-Release/include/OpenImageIO/oiioversion.h new file mode 100644 index 00000000..f7a241fe --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenImageIO/oiioversion.h @@ -0,0 +1,227 @@ +// Copyright Contributors to the OpenImageIO project. +// SPDX-License-Identifier: Apache-2.0 +// https://github.com/AcademySoftwareFoundation/OpenImageIO + + +#ifndef OPENIMAGEIO_VERSION_H +#define OPENIMAGEIO_VERSION_H + + +// Versioning of the OpenImageIO software. For *releases*: +// +// MAJOR is a major architectural change or a step that does not preserve +// backwards compatibility of source code (an app designed for an older +// major version may not compile successfully against newer version of the +// headers and libraries, and will need to have its source modified). +// Examples of changes that necessitate major version changes are removal of +// API calls or classes, or renaming of class members. +// +// MINOR is an addition of significant new features and may change the +// definition of public data structures or functions in a way that is +// backwards compatible for source code, but is not back compatible for ABI +// or linkage (i.e. you don't need to modify your app's source, but you do +// need to recompile it). Examples of changes that necessitate a minor +// version change would be adding new data fields to a structure, adding new +// virtual member functions to a class, or adding new optional parameters to +// the end of a function call. +// +// PATCH is a minor change that preserves ABI and link back-compatibility, +// where an app built for the older version can simply have the newer +// library substituted without recompilation. Generally, this is only for +// bug fixes, though sometimes we may add new minor features if they only +// involve addition of static/global function calls or data (since this does +// not break back-compatibility). +// +// TWEAK is just a rebuild/re-version that is both forward and backward +// compatible. Usually this involves only a change to the build system +// itself (such as fixing a build break on a particular platform), a change +// in documentation, or fixing some other minor unintentional flaw in a +// prior release. +// +// Note that these designations only apply to released branches. Changes +// in the main development branch ("main") do not make any compatibility +// guarantees at all. +// +#define OIIO_VERSION_MAJOR 3 +#define OIIO_VERSION_MINOR 1 +#define OIIO_VERSION_PATCH 7 +#define OIIO_VERSION_TWEAK 0 +#define OIIO_VERSION_RELEASE_TYPE + +// Preprocessor utility: stringize +#define OIIO_STRINGIZE_HELPER(a) #a +#define OIIO_STRINGIZE(a) OIIO_STRINGIZE_HELPER(a) + +// Construct a single integer version number from major, minor, patch. +// Example of its use: +// +// #if OIIO_VERSION >= OIIO_MAKE_VERSION(2,3,0) +// ... use a feature introduced in version 2.3.0 ... +// #endif +// +#define OIIO_MAKE_VERSION(major,minor,patch) \ + (10000 * (major) + 100 * (minor) + (patch)) + +// Single version designation of this release +#define OIIO_VERSION OIIO_MAKE_VERSION(OIIO_VERSION_MAJOR, \ + OIIO_VERSION_MINOR, OIIO_VERSION_PATCH) + +// Test if OIIO is >= a particular version. +#define OIIO_VERSION_GREATER_EQUAL(major,minor,patch) \ + OIIO_VERSION >= OIIO_MAKE_VERSION(major,minor,patch) + +// Test if OIIO is < a particular version. +#define OIIO_VERSION_LESS(major,minor,patch) \ + OIIO_VERSION < OIIO_MAKE_VERSION(major,minor,patch) + +// We also define the old name for backwards compatibility purposes. +#define OPENIMAGEIO_VERSION OIIO_VERSION + +// Magic macros to make OIIO_VERSION_STRING that looks like "1.2.3.0" +#define OIIO_MAKE_VERSION_STRING2(a,b,c,d,e) #a "." #b "." #c "." #d #e +#define OIIO_MAKE_VERSION_STRING(a,b,c,d,e) OIIO_MAKE_VERSION_STRING2(a,b,c,d,e) +#define OIIO_VERSION_STRING \ + OIIO_MAKE_VERSION_STRING(OIIO_VERSION_MAJOR, \ + OIIO_VERSION_MINOR, OIIO_VERSION_PATCH, \ + OIIO_VERSION_TWEAK, OIIO_VERSION_RELEASE_TYPE) +#define OIIO_INTRO_STRING "OpenImageIO " OIIO_VERSION_STRING " http://www.openimageio.org" + +// Only major.minor.patch.tweak, omit any release type +#define OIIO_VERSION_STRING_MMPT \ + OIIO_MAKE_VERSION_STRING(OIIO_VERSION_MAJOR, \ + OIIO_VERSION_MINOR, OIIO_VERSION_PATCH, \ + OIIO_VERSION_TWEAK, "") + +// OIIO_DISABLE_DEPRECATED encodes the version for which any declarations that +// were deprecated as of that version may be hidden from view of software +// including the OIIO headers. For example, if a downstream project says +// +// #define OIIO_DISABLE_DEPRECATED OIIO_MAKE_VERSION(2,2,0) +// +// before including any OpenImageIO header, then we will do our best to make +// it a compile-time error if they try to use anything that was deprecated +// in or before version 2.2.0. This is viewed as equivalent to the downstream +// package considering their minimum OIIO to be 2.2 and they want to be sure +// they aren't using any features that are slated for deprecation. The +// default, 0, will not try to hide any deprecated features. +// +// To clarify, if version 2.2 is the first to deprecate a certain definition, +// then it is considered good practice to guard it like this: +// +// #if OIIO_DISABLE_DEPRECATED < OIIO_MAKE_VERSION(2,2,0) +// ... deprecated definition here ... +// #endif +// +#ifndef OIIO_DISABLE_DEPRECATED +# define OIIO_DISABLE_DEPRECATED 0 +#endif + +// Establish the name spaces. +// +// The outer namespace defaults to OpenImageIO, but can be overriden at build +// time. "OIIO" is always defined as an alias to this namespace, so client +// software can always say `OIIO:Foo` without needing to know the custom outer +// namespace. +// +// The primary inner namespace is vMAJ_MIN (or in main, vMAJ_MIN_PAT). The +// outer namespace declares the inner namespace as "inline", so anything in it +// is visible in OIIO by default. + +#define OIIO_OUTER_NAMESPACE OpenImageIO +#define OIIO_CURRENT_INNER_NAMESPACE v3_1 + +namespace OpenImageIO { + // Current version's new inner namespace is inline so it's used by default. + inline namespace v3_1 { } + + // Legacy namespaces: + namespace v3_0 { } +} +namespace OIIO = OpenImageIO; + + +// Macros to declare things in the current version's inline namespace. +#define OIIO_NAMESPACE_BEGIN namespace OpenImageIO { inline namespace v3_1 { +#define OIIO_NAMESPACE_END } } +#define OIIO_NAMESPACE_USING using namespace OIIO; +#define OIIO_CURRENT_NAMESPACE OpenImageIO::v3_1 + +#include + + +/// Each imageio DSO/DLL should include this statement: +/// DLLPUBLIC int FORMAT_imageio_version = OPENIMAGEIO_PLUGIN_VERSION; +/// libOpenImageIO will check for compatibility this way. +/// This should get bumped any time we change the API in any way that +/// will make previously-compiled plugins break. +/// +/// History: +/// Version 3 added supports_rectangles() and write_rectangle() to +/// ImageOutput, and added stride parameters to the ImageInput read +/// routines. +/// Version 10 represents forking from NVIDIA's open source version, +/// with which we break backwards compatibility. +/// Version 11 teased apart subimage versus miplevel specification in +/// the APIs and per-channel formats (introduced in OIIO 0.9). +/// Version 12 added read_scanlines(), write_scanlines(), read_tiles(), +/// write_tiles(), and ImageInput::supports(). (OIIO 1.0) +/// Version 13 added ImageInput::valid_file(). (OIIO 1.1) +/// Version 14 added ImageOutput::open() variety for multiple subimages. +/// Version 15 added support for "deep" images (changing ImageSpec, +/// ImageInput, ImageOutput). +/// Version 16 changed the ImageInput functions taking channel ranges +/// from firstchan,nchans to chbegin,chend. +/// Version 17 changed to int supports(string_view) rather than +/// bool supports(const std::string&)). (OIIO 1.6) +/// Version 18 changed to add an m_threads member to ImageInput/Output. +/// Version 19 changed the definition of DeepData. +/// Version 20 added FMT_imageio_library_version() to plugins. (OIIO 1.7) +/// Version 21 changed the signatures of ImageInput methods: added +/// subimage,miplevel params to many read_*() methods; changed thread +/// safety expectations; removed newspec param from seek_subimage; +/// added spec(subimage,miplevel) and spec_dimensions(subimage,miplevel). +/// (OIIO 2.0) +/// Version 22 changed the signatures of ImageInput/ImageOutput create() +/// to return unique_ptr. (OIIO 2.0) +/// Version 23 added set_ioproxy() methods to ImageInput & ImageOutput +/// (OIIO 2.2). +/// Version 24 Added a PIMPL pointers to ImageInput and ImageOutput and +/// removed some unnecessary fields that were exposed. +/// Version 25 added the thumbnail retrieval and set. (OIIO 2.3) +/// Version 26 deprecated the old stateful ImageInput::read_* methods. +/// (OIIO 2.6.3/3.0) +/// Version 27 added image_span-based versions of ImageInput::read_native_ +/// methods. (OIIO 3.1) + +#define OIIO_PLUGIN_VERSION 27 + +#define OIIO_PLUGIN_NAMESPACE_BEGIN OIIO_NAMESPACE_BEGIN +#define OIIO_PLUGIN_NAMESPACE_END OIIO_NAMESPACE_END + +#ifdef EMBED_PLUGINS +#define OIIO_PLUGIN_EXPORTS_BEGIN +#define OIIO_PLUGIN_EXPORTS_END +#else +#define OIIO_PLUGIN_EXPORTS_BEGIN extern "C" { +#define OIIO_PLUGIN_EXPORTS_END } +#endif + +// Which version of Imath is used in the OIIO API? +#define OIIO_USING_IMATH_VERSION_MAJOR 3 +#define OIIO_USING_IMATH_VERSION_MINOR 2 + +// Which CPP standard (17, 20, etc.) was this copy of OIIO *built* with? +#define OIIO_BUILD_CPP 17 + +// DEPRECATED(2.1): old macros separately giving compatibility. +#define OIIO_BUILD_CPP11 (17 >= 11) +#define OIIO_BUILD_CPP14 (17 >= 14) +#define OIIO_BUILD_CPP17 (17 >= 17) +#define OIIO_BUILD_CPP20 (17 >= 20) + + +// Was the project built with TBB support? +#define OIIO_TBB 0 + + +#endif /* defined(OPENIMAGEIO_VERSION_H) */ diff --git a/third_party/tlRender-install-Release/include/OpenImageIO/optparser.h b/third_party/tlRender-install-Release/include/OpenImageIO/optparser.h new file mode 100644 index 00000000..31b979eb --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenImageIO/optparser.h @@ -0,0 +1,104 @@ +// Copyright Contributors to the OpenImageIO project. +// SPDX-License-Identifier: Apache-2.0 +// https://github.com/AcademySoftwareFoundation/OpenImageIO + + +///////////////////////////////////////////////////////////////////////// +/// @file optparser.h +/// +/// @brief Option parser template +///////////////////////////////////////////////////////////////////////// + + +#pragma once + +#include +#include + +OIIO_NAMESPACE_3_1_BEGIN + + +/// Parse a string of the form "name=value" and then call +/// system.attribute (name, value), with appropriate type conversions. +template +inline bool +optparse1(C& system, const std::string& opt) +{ + std::string::size_type eq_pos = opt.find_first_of("="); + if (eq_pos == std::string::npos) { + // malformed option + return false; + } + std::string name(opt, 0, eq_pos); + // trim the name + while (name.size() && name[0] == ' ') + name.erase(0); + while (name.size() && name[name.size() - 1] == ' ') + name.erase(name.size() - 1); + std::string value(opt, eq_pos + 1, std::string::npos); + if (name.empty()) + return false; + char v = value.size() ? value[0] : ' '; + if ((v >= '0' && v <= '9') || v == '+' || v == '-') { // numeric + if (strchr(value.c_str(), '.')) + return system.attribute(name, Strutil::stof(value)); // float + else + return system.attribute(name, Strutil::stoi(value)); // int + } + // otherwise treat it as a string + + // trim surrounding double quotes + if (value.size() >= 2 && (value[0] == '\"' || value[0] == '\'') + && value[value.size() - 1] == value[0]) + value = std::string(value, 1, value.size() - 2); + + return system.attribute(name, value); +} + + + +/// Parse a string with comma-separated name=value directives, calling +/// system.attribute(name,value) for each one, with appropriate type +/// conversions. Examples: +/// optparser(texturesystem, "verbose=1"); +/// optparser(texturesystem, "max_memory_MB=32.0"); +/// optparser(texturesystem, "a=1,b=2,c=3.14,d=\"a string\""); +template +inline bool +optparser(C& system, const std::string& optstring) +{ + bool ok = true; + size_t len = optstring.length(); + size_t pos = 0; + while (pos < len) { + std::string opt; + char inquote = 0; + while (pos < len) { + unsigned char c = optstring[pos]; + if (c == inquote) { + // Ending a quote + inquote = 0; + opt += c; + ++pos; + } else if (c == '\"' || c == '\'') { + // Found a quote + inquote = c; + opt += c; + ++pos; + } else if (c == ',' && !inquote) { + // Hit a comma and not inside a quote -- we have an option + ++pos; // skip the comma + break; // done with option + } else { + // Anything else: add to the option + opt += c; + ++pos; + } + } + // At this point, opt holds an option + ok &= optparse1(system, opt); + } + return ok; +} + +OIIO_NAMESPACE_3_1_END diff --git a/third_party/tlRender-install-Release/include/OpenImageIO/parallel.h b/third_party/tlRender-install-Release/include/OpenImageIO/parallel.h new file mode 100644 index 00000000..fba0518b --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenImageIO/parallel.h @@ -0,0 +1,298 @@ +// Copyright Contributors to the OpenImageIO project. +// SPDX-License-Identifier: Apache-2.0 +// https://github.com/AcademySoftwareFoundation/OpenImageIO + +#pragma once + +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + + +OIIO_NAMESPACE_3_1_BEGIN + +/// Split strategies +/// DEPRECATED(2.4) +enum SplitDir { Split_X, Split_Y, Split_Z, Split_Biggest, Split_Tile }; + + +/// Encapsulation of options that control parallel_for() and +/// parallel_image(). +/// DEPRECATED(2.4) +class parallel_options { +public: + parallel_options(int maxthreads = 0, SplitDir splitdir = Split_Y, + size_t minitems = 16384) + : maxthreads(maxthreads) + , splitdir(splitdir) + , minitems(minitems) + { + } + parallel_options(string_view name, int maxthreads = 0, + SplitDir splitdir = Split_Y, size_t minitems = 16384) + : maxthreads(maxthreads) + , splitdir(splitdir) + , minitems(minitems) + , name(name) + { + } + + // Fix up all the TBD parameters: + // * If no pool was specified, use the default pool. + // * If no max thread count was specified, use the pool size. + // * If the calling thread is itself in the pool and the recursive flag + // was not turned on, just use one thread. + void resolve() + { + if (pool == nullptr) + pool = default_thread_pool(); + if (maxthreads <= 0) + maxthreads = pool->size() + 1; // pool size + caller + if (!recursive && pool->is_worker()) + maxthreads = 1; + } + + bool singlethread() const { return maxthreads == 1; } + + int maxthreads = 0; // Max threads (0 = use all) + SplitDir splitdir = Split_Y; // Primary split direction + bool recursive = false; // Allow thread pool recursion + size_t minitems = 16384; // Min items per task + thread_pool* pool = nullptr; // If non-NULL, custom thread pool + string_view name; // For debugging +}; + + + +#define OIIO_PARALLEL_PAROPT + +/// Encapsulation of options that control parallel_for() and +/// parallel_image(). +class OIIO_UTIL_API paropt { +public: + enum class ParStrategy : short { Default = 0, TryTBB, OIIOpool }; + enum class SplitDir : short { X, Y, Z, Biggest, Tile }; + + constexpr paropt(int maxthreads = 0, SplitDir splitdir = SplitDir::Y, + size_t minitems = 1024) noexcept + : m_maxthreads(maxthreads) + , m_splitdir(splitdir) + , m_minitems(minitems) + { + } + paropt(string_view name, int maxthreads = 0, + SplitDir splitdir = SplitDir::Y, size_t minitems = 1024) noexcept + : paropt(maxthreads, splitdir, minitems) + { + // m_name = name; + } + + constexpr paropt(ParStrategy strat) noexcept + : m_strategy(strat) + { + } + + constexpr paropt(int maxthreads, ParStrategy strat) noexcept + : m_maxthreads(maxthreads) + , m_strategy(strat) + { + } + + // For back compatibility + paropt(const parallel_options& po) noexcept + : paropt(po.name, po.maxthreads, SplitDir(po.splitdir), po.minitems) + { + m_recursive = po.recursive; + m_pool = po.pool; + } + + // Fix up all the TBD parameters: + // * If no pool was specified, use the default pool. + // * If no max thread count was specified, use the pool size. + // * If the calling thread is itself in the pool and the recursive flag + // was not turned on, just use one thread. + void resolve(); + + constexpr bool singlethread() const noexcept { return m_maxthreads == 1; } + + constexpr int maxthreads() const noexcept { return m_maxthreads; } + paropt& maxthreads(int m) noexcept + { + m_maxthreads = m; + return *this; + } + + constexpr SplitDir splitdir() const noexcept { return m_splitdir; } + paropt& splitdir(SplitDir s) noexcept + { + m_splitdir = s; + return *this; + } + + constexpr bool recursive() const noexcept { return m_recursive; } + paropt& recursive(bool r) noexcept + { + m_recursive = r; + return *this; + } + + constexpr int minitems() const noexcept { return m_minitems; } + paropt& minitems(int m) noexcept + { + m_minitems = m; + return *this; + } + + thread_pool* pool() const noexcept { return m_pool; } + paropt& pool(thread_pool* p) noexcept + { + m_pool = p; + return *this; + } + + constexpr ParStrategy strategy() const noexcept { return m_strategy; } + paropt& strategy(ParStrategy s) noexcept + { + m_strategy = s; + return *this; + } + +private: + int m_maxthreads = 0; // Max threads (0 = use all) + ParStrategy m_strategy = ParStrategy::Default; + SplitDir m_splitdir = SplitDir::Y; // Primary split direction + size_t m_minitems = 16384; // Min items per task + thread_pool* m_pool = nullptr; // If non-NULL, custom thread pool + bool m_recursive = false; // Allow thread pool recursion +}; + + + +/// Parallel "for" loop, chunked: for a task that takes an int64_t +/// [begin,end) range, break it into non-overlapping sections that run in +/// parallel: +/// +/// task (begin, begin+chunksize); +/// task (begin+chunksize, begin+2*chunksize); +/// ... +/// task (begin+n*chunksize, end); +/// +/// and wait for them all to complete. +/// +/// If chunksize is 0, a chunksize will be chosen to divide the range into +/// a number of chunks equal to the twice number of threads in the queue. +/// (We do this to offer better load balancing than if we used exactly the +/// thread count.) +OIIO_UTIL_API void +parallel_for_chunked(int64_t begin, int64_t end, int64_t chunksize, + std::function&& task, + paropt opt = paropt(0, paropt::SplitDir::Y, 1)); + + +/// Parallel "for" loop, for a task that takes a single integer index, run +/// it on all indices on the range [begin,end): +/// +/// task (begin); +/// task (begin+1); +/// ... +/// task (end-1); +/// +/// Conceptually, it behaves as if each index gets called separately, but +/// actually each thread will iterate over some chunk of adjacent indices +/// (to aid data coherence and minimize the amount of thread queue +/// diddling). The chunk size is chosen automatically. +OIIO_UTIL_API void +parallel_for(int32_t begin, int32_t end, function_view task, + paropt opt = 0); + +OIIO_UTIL_API void +parallel_for(int64_t begin, int64_t end, function_view task, + paropt opt = 0); + +OIIO_UTIL_API void +parallel_for(uint32_t begin, uint32_t end, function_view task, + paropt opt = 0); + +OIIO_UTIL_API void +parallel_for(uint64_t begin, uint64_t end, function_view task, + paropt opt = 0); + + + +/// Parallel "for" loop, for a task that takes an integer range, run it +/// on all indices on the range [begin,end): +/// +/// task (begin, i1); +/// task (i1+1, i2); +/// ... +/// task (iN+1, end); +/// +/// The chunk sizes will be chosen automatically, and are not guaranteed +/// to all be the same size. +OIIO_UTIL_API void +parallel_for_range(int32_t begin, int32_t end, + std::function&& task, + paropt opt = 0); + +OIIO_UTIL_API void +parallel_for_range(int64_t begin, int64_t end, + std::function&& task, + paropt opt = 0); + +OIIO_UTIL_API void +parallel_for_range(uint32_t begin, uint32_t end, + std::function&& task, + paropt opt = 0); + +OIIO_UTIL_API void +parallel_for_range(uint64_t begin, uint64_t end, + std::function&& task, + paropt opt = 0); + + +/// Parallel "for" loop, chunked: for a task that takes a 2D [begin,end) +/// range and chunk sizes, subdivide that range and run in parallel: +/// +/// task (begin, begin+chunksize); +/// task (begin+chunksize, begin+2*chunksize); +/// ... +/// task (begin+n*chunksize, end); +/// +/// and wait for them all to complete. +/// +/// If chunksize is 0, a chunksize will be chosen to divide the range into +/// a number of chunks equal to the twice number of threads in the queue. +/// (We do this to offer better load balancing than if we used exactly the +/// thread count.) +OIIO_UTIL_API void +parallel_for_chunked_2D(int64_t xbegin, int64_t xend, int64_t xchunksize, + int64_t ybegin, int64_t yend, int64_t ychunksize, + std::function&& task, + paropt opt = 0); + + + +/// parallel_for, for a task that takes an int threadid and int64_t x & y +/// indices, running all of: +/// task (xbegin, ybegin); +/// ... +/// task (xend-1, ybegin); +/// task (xbegin, ybegin+1); +/// task (xend-1, ybegin+1); +/// ... +/// task (xend-1, yend-1); +OIIO_UTIL_API void +parallel_for_2D(int64_t xbegin, int64_t xend, int64_t ybegin, int64_t yend, + std::function&& task, + paropt opt = 0); + +OIIO_NAMESPACE_3_1_END diff --git a/third_party/tlRender-install-Release/include/OpenImageIO/paramlist.h b/third_party/tlRender-install-Release/include/OpenImageIO/paramlist.h new file mode 100644 index 00000000..bfa7436d --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenImageIO/paramlist.h @@ -0,0 +1,849 @@ +// Copyright Contributors to the OpenImageIO project. +// SPDX-License-Identifier: Apache-2.0 +// https://github.com/AcademySoftwareFoundation/OpenImageIO + + +/// \file +/// +/// Define the ParamValue and ParamValueList classes, which are used to +/// store lists of arbitrary name/data pairs for internal storage of +/// parameter lists, attributes, geometric primitive data, etc. + + +#pragma once + +#include + +#include +#include +#include +#include +#include +#include + + +OIIO_NAMESPACE_3_1_BEGIN + +/// ParamValue holds a named parameter and typed data. Usually, it owns the +/// data (holding it in the struct itself if small enough, dynamically +/// allocated for larger things), but it can also refer to non-owned data. +/// +/// The data is usually a single value of any type described by TypeDesc +/// (including arrays). It may also hold more than one value of the type -- +/// this is usually only used in a geometric context, such as storing a value +/// for each vertex in a mesh. Please note the subtle distinction between the +/// value type itself being an array, versus having multiple values as a +/// parameter, versus the type of the value having multiple components (such +/// as a point or color). Any combination of these may be present. +/// +/// To clarify, if you have an array of 4 colors for each of 15 mesh +/// vertices, that means: +/// - There are 15 VALUES (one for each vertex) +/// - Each value has an array of 4 ELEMENTS +/// - Each element is a color +/// - A color has 3 COMPONENTS (R, G, B) +/// Thus, it would be constructed as +/// `ParamValue("mycolor", TypeDesc(TypeDesc::COLOR, 4), 15, ptr_to_data)` +/// +/// The main constructor is `ParamValue(name, type, nvalues, dataptr)`. It can +/// be confusing at first to remember that the data argument is a pointer to +/// the first values to copy, not the values themselves, even if the values +/// are themselves pointers, and even if the number of values is 1. In other +/// words, it's behaving as if you're always pointing it to an array even if +/// the "array" has only one element. This is extra confusing for strings, +/// because the strings themselves are `char*` (or ustring), so the pointer +/// you need to pass is `char**`. For this reason, there are also convenience +/// constructors for simple types such as a single int, float, or string. +/// +/// So here are some examples: +/// +/// // Single int: +/// int my_int = 42; +/// ParamValue A("foo", TypeDesc::INT, 1, make_cspan(my_int)); +/// // Three int values (say, one per vertex of a triangle): +/// int my_int_array[3] = { 1, 2, 3 }; +/// ParamValue B("foo", TypeDesc::INT, 3, my_int_array); +/// // A single value which is an array of 3 ints: +/// ParamValue C("foo", TypeDesc(TypeDesc::INT, 3), 1, +/// make_cspan(my_int_array, 3)); +/// // A string -- note the trick about treating it as an array: +/// const char* my_string = "hello"; +/// ParamValue D("foo", TypeDesc::STRING, 1, +/// make_cspan(my_string)); +/// +/// // The most common cases also have simple "duck-typed" convenience +/// // constructors: +/// ParamValue A("foo", 42); // single int +/// ParamValue B("foo", 42.0f); // single float +/// ParamValue C("foo", "forty two"); // single string + +class OIIO_UTIL_API ParamValue { +public: + /// Interpolation types + /// + enum Interp { + INTERP_CONSTANT = 0, ///< Constant for all pieces/faces + INTERP_PERPIECE = 1, ///< Piecewise constant per piece/face + INTERP_LINEAR = 2, ///< Linearly interpolated across each piece/face + INTERP_VERTEX = 3 ///< Interpolated like vertices + }; + + OIIO_STRONG_PARAM_TYPE(Copy, bool); + OIIO_STRONG_PARAM_TYPE(FromUstring, bool); + + ParamValue() noexcept { m_data.ptr = nullptr; } + + /// Initialize a ParamValue with a typed span of data. + template + ParamValue(const StringT& name, TypeDesc type, int nvalues, span value, + Copy copy = Copy(true), Interp interp = INTERP_CONSTANT) noexcept + { + OIIO_DASSERT(BaseTypeFromC::value == type.basetype + && type.size() * size_t(nvalues) == value.size_bytes()); + init_noclear(ustring(name), type, nvalues, interp, + OIIO::as_bytes(value), copy); + } + + ParamValue(ustring name, TypeDesc type, int nvalues, cspan value, + Copy copy = Copy(true), Interp interp = INTERP_CONSTANT) noexcept + { + init_noclear(name, type, nvalues, value, copy); + } + + ParamValue(string_view name, TypeDesc type, int nvalues, + cspan value, Copy copy = Copy(true), + Interp interp = INTERP_CONSTANT) noexcept + { + init_noclear(ustring(name), type, nvalues, value, copy); + } + + // Deprecated versions that take raw pointers //////////////////////// + // OIIO_DEPRECATED("Use the version that takes a span (3.1)") + ParamValue(const ustring& name, TypeDesc type, int nvalues, + const void* value, Copy copy = Copy(true)) noexcept + : ParamValue(name, type, nvalues, INTERP_CONSTANT, value, copy) + { + } + // OIIO_DEPRECATED("Use the version that takes a span (3.1)") + ParamValue(const ustring& name, TypeDesc type, int nvalues, Interp interp, + const void* value, Copy copy = Copy(true)) noexcept + { + init_noclear(name, type, nvalues, interp, + make_cspan(reinterpret_cast(value), + value ? size_t(nvalues) * type.size() + : size_t(0)), + copy); + } + // OIIO_DEPRECATED("Use the version that takes a span (3.1)") + ParamValue(string_view name, TypeDesc type, int nvalues, const void* value, + Copy copy = Copy(true)) noexcept + : ParamValue(ustring(name), type, nvalues, INTERP_CONSTANT, value, copy) + { + } + // OIIO_DEPRECATED("Use the version that takes a span (3.1)") + ParamValue(string_view name, TypeDesc type, int nvalues, Interp interp, + const void* value, Copy copy = Copy(true)) noexcept + : ParamValue(ustring(name), type, nvalues, interp, value, copy) + { + } + /////////////////////////////////////////////////////////////////////// + + // Convenience constructors for a single value of common types + ParamValue(string_view name, int value) noexcept + : ParamValue(ustring(name), TypeInt, 1, cspan(value)) + { + } + ParamValue(string_view name, float value) noexcept + : ParamValue(ustring(name), TypeFloat, 1, cspan(value)) + { + } + ParamValue(string_view name, ustring value) noexcept + { + init_noclear(ustring(name), TypeString, 1, + OIIO::as_bytes(cspan(value)), Copy(true), + FromUstring(true)); + } + ParamValue(string_view name, string_view value) noexcept + : ParamValue(name, ustring(value)) + { + } + ParamValue(string_view name, ustringhash value) noexcept + { + init_noclear(ustring(name), TypeDesc::USTRINGHASH, 1, + OIIO::as_bytes(cspan(value)), Copy(true)); + } + + // Set from string -- parse + ParamValue(string_view name, TypeDesc type, string_view value); + + // Copy constructor + ParamValue(const ParamValue& p) noexcept + { + init_noclear(p.uname(), p.type(), p.nvalues(), p.interp(), p.as_bytes(), + Copy(true), FromUstring(true)); + } + ParamValue(const ParamValue& p, Copy _copy) noexcept + { + init_noclear(p.uname(), p.type(), p.nvalues(), p.interp(), p.as_bytes(), + _copy, FromUstring(true)); + } + + // Rvalue (move) constructor + ParamValue(ParamValue&& p) noexcept + { + init_noclear(p.uname(), p.type(), p.nvalues(), p.interp(), p.as_bytes(), + Copy(false), FromUstring(true)); + m_copy = p.m_copy; + m_nonlocal = p.m_nonlocal; + p.m_data.ptr = nullptr; // make sure the old one won't free + } + + ~ParamValue() noexcept { clear_value(); } + + template + void init(const StringT& name, TypeDesc type, int nvalues, Interp interp, + span value, Copy copy = Copy(true)) noexcept + { + clear_value(); + init_noclear(ustring(name), type, nvalues, interp, value, copy); + } + + // Deprecated versions that take raw pointers //////////////////////// + // OIIO_DEPRECATED("Use the version that takes a span (3.1)") + void init(ustring name, TypeDesc type, int nvalues, Interp interp, + const void* value, Copy copy = Copy(true)) noexcept + { + clear_value(); + init_noclear(name, type, nvalues, interp, + make_cspan(reinterpret_cast(value), + value ? size_t(nvalues) * type.size() + : size_t(0)), + copy); + } + // OIIO_DEPRECATED("Use the version that takes a span (3.1)") + void init(ustring name, TypeDesc type, int nvalues, const void* value, + Copy copy = Copy(true)) noexcept + { + init(name, type, nvalues, INTERP_CONSTANT, value, copy); + } + // OIIO_DEPRECATED("Use the version that takes a span (3.1)") + void init(string_view name, TypeDesc type, int nvalues, const void* value, + Copy copy = Copy(true)) noexcept + { + init(ustring(name), type, nvalues, value, copy); + } + // OIIO_DEPRECATED("Use the version that takes a span (3.1)") + void init(string_view name, TypeDesc type, int nvalues, Interp _interp, + const void* value, Copy copy = Copy(true)) noexcept + { + init(ustring(name), type, nvalues, _interp, value, copy); + } + /////////////////////////////////////////////////////////////////////// + + // Assignment + const ParamValue& operator=(const ParamValue& p) noexcept; + const ParamValue& operator=(ParamValue&& p) noexcept; + + // FIXME -- some time in the future (after more cleanup), we should make + // name() return a string_view, and use uname() for the rare time when + // the caller truly requires the ustring. + ustring name() const noexcept { return m_name; } + ustring uname() const noexcept { return m_name; } + TypeDesc type() const noexcept { return m_type; } + int nvalues() const noexcept { return m_nvalues; } + const void* data() const noexcept + { + return m_nonlocal ? m_data.ptr : &m_data; + } + int datasize() const noexcept + { + return m_nvalues * static_cast(m_type.size()); + } + Interp interp() const noexcept { return (Interp)m_interp; } + void interp(Interp i) noexcept { m_interp = (unsigned char)i; } + bool is_nonlocal() const noexcept { return m_nonlocal; } + + friend void swap(ParamValue& a, ParamValue& b) noexcept + { + auto tmp = std::move(a); + a = std::move(b); + b = std::move(tmp); + } + + /// Return a `cspan` pointing to the bounded data. If the type `T` is + /// not the actual underlying base type, return an empty span. + template cspan as_cspan() const noexcept + { + return BaseTypeFromC::value == m_type.basetype + ? make_cspan(reinterpret_cast(data()), + size_t(m_nvalues * m_type.basevalues())) + : cspan(); + } + + /// Return a `span` pointing to the bounded data. If the type `T` is + /// not the actual underlying base type, return an empty span. + template span as_span() noexcept + { + return BaseTypeFromC::value == m_type.basetype + ? make_span(reinterpret_cast(const_cast(data())), + size_t(m_nvalues * m_type.basevalues())) + : span(); + } + + /// Return a `cspan` pointing to the bounded raw data. + cspan as_bytes() const noexcept + { + return { reinterpret_cast(data()), + size_t(datasize()) }; + } + + /// Return a `span` pointing to the bounded data. + span as_writable_bytes() noexcept + { + return { reinterpret_cast(const_cast(data())), + size_t(datasize()) }; + } + + // Use with extreme caution! This is just doing a cast. You'd better + // be really sure you are asking for the right type. Note that for + // "string" data, you can get or get, but it's not + // a std::string. + template const T& get(int i = 0) const noexcept + { + OIIO_DASSERT(i >= 0 && i < int(m_nvalues * m_type.basevalues()) + && "OIIO::ParamValue::get() range check"); + return (reinterpret_cast(data()))[i]; + } + + /// Retrieve an integer, with conversions from a wide variety of type + /// cases, including unsigned, short, byte. Not float. It will retrieve + /// from a string, but only if the string is entirely a valid int + /// format. Unconvertible types return the default value. + int get_int(int defaultval = 0) const; + int get_int_indexed(int index, int defaultval = 0) const; + + /// Retrieve a float, with conversions from a wide variety of type + /// cases, including integers. It will retrieve from a string, but only + /// if the string is entirely a valid float format. Unconvertible types + /// return the default value. + float get_float(float defaultval = 0) const; + float get_float_indexed(int index, float defaultval = 0) const; + + /// Convert any type to a string value. An optional maximum number of + /// elements is also passed. In the case of a single string, just the + /// string directly is returned. But for an array of strings, the array + /// is returned as one string that's a comma-separated list of double- + /// quoted, escaped strings. For an array or aggregate, at most `maxsize` + /// elements are returned (if `maxsize` is 0, all elements are returned, + /// no matter how large it is). + std::string get_string(int maxsize = 64) const; + std::string get_string_indexed(int index) const; + /// Convert any type to a ustring value. An optional maximum number of + /// elements is also passed. Same behavior as get_string, but returning a + /// ustring. For an array or aggregate, at most `maxsize` elements are + /// returned (if `maxsize` is 0, all elements are returned, no matter how + /// large it is). + ustring get_ustring(int maxsize = 64) const; + ustring get_ustring_indexed(int index) const; + +private: + ustring m_name; ///< data name + TypeDesc m_type; ///< data type, which may itself be an array + union { + char localval[16]; + const void* ptr; + } m_data; ///< Our data, either a pointer or small local value + int m_nvalues = 0; ///< number of values of the given type + unsigned char m_interp = INTERP_CONSTANT; ///< Interpolation type + bool m_copy = false; + bool m_nonlocal = false; + + void clear_value() noexcept; + + void init_noclear(ustring _name, TypeDesc _type, int _nvalues, + cspan _value, Copy _copy = Copy(true), + FromUstring _from_ustring = FromUstring(false)) noexcept; + void init_noclear(ustring _name, TypeDesc _type, int _nvalues, + Interp _interp, cspan _value, + Copy _copy = Copy(true), + FromUstring _from_ustring = FromUstring(false)) noexcept; + + /// declare a friend heapsize definition + template friend size_t pvt::heapsize(const T&); +}; + + + +/// heapsize specialization for `ParamValue` +template<> +OIIO_API size_t +pvt::heapsize(const ParamValue&); + + + +/// Factory for a ParamValue that holds a single value of any type supported +/// by a corresponding ParamValue constructor (such as int, float, string). +template +inline ParamValue +make_pv(string_view name, const T& val) +{ + return ParamValue(name, val); +} + +/// Factory for a ParamValue from a pointer. Passing `char*` or `const char*` +/// will be interpreted as a C string (TypeString), but all other pointer +/// types will just get stored as an opaque pointer (TypePointer). +template +inline ParamValue +make_pv(string_view name, T* val) +{ + return ParamValue(name, BaseTypeFromC::value, 1, span(&val, 1)); +} + + + +/// A list of ParamValue entries, that can be iterated over or searched. +/// It's really just a std::vector, but with a few more handy +/// methods. +class OIIO_UTIL_API ParamValueList : public std::vector { +public: + ParamValueList() {} + + /// Add space for one more ParamValue to the list, and return a + /// reference to its slot. + reference grow() + { + resize(size() + 1); + return back(); + } + + /// Find the first entry with matching name, and if type != UNKNOWN, + /// then also with matching type. The name search is case sensitive if + /// casesensitive == true. + iterator find(string_view name, TypeDesc type = TypeDesc::UNKNOWN, + bool casesensitive = true); + iterator find(ustring name, TypeDesc type = TypeDesc::UNKNOWN, + bool casesensitive = true); + const_iterator find(string_view name, TypeDesc type = TypeDesc::UNKNOWN, + bool casesensitive = true) const; + const_iterator find(ustring name, TypeDesc type = TypeDesc::UNKNOWN, + bool casesensitive = true) const; + + /// Search for the first entry with matching name, etc., and return + /// a pointer to it, or nullptr if it is not found. + ParamValue* find_pv(string_view name, TypeDesc type = TypeDesc::UNKNOWN, + bool casesensitive = true) + { + iterator f = find(name, type, casesensitive); + return f != end() ? &(*f) : nullptr; + } + const ParamValue* find_pv(string_view name, + TypeDesc type = TypeDesc::UNKNOWN, + bool casesensitive = true) const + { + const_iterator f = find(name, type, casesensitive); + return f != cend() ? &(*f) : nullptr; + } + + /// Search for an integer, with default if not found. Automatically will + /// return an int even if the data is really unsigned, short, or byte, but + /// not float. It will retrieve from a string, but only if the string is + /// entirely a valid int format. + int get_int(string_view name, int defaultval = 0, + bool casesensitive = false, bool convert = true) const; + + /// Search for a float, with default if not found. Automatically will + /// return a float even if the data is really double or half. It will + /// retrieve from a string, but only if the string is entirely a valid + /// float format. + float get_float(string_view name, float defaultval = 0, + bool casesensitive = false, bool convert = true) const; + + /// Simple way to get a string attribute, with default provided. + /// If the value is another type, it will be turned into a string. + string_view get_string(string_view name, + string_view defaultval = string_view(), + bool casesensitive = false, + bool convert = true) const; + ustring get_ustring(string_view name, + string_view defaultval = string_view(), + bool casesensitive = false, bool convert = true) const; + + /// Remove the named parameter, if it is in the list. + void remove(string_view name, TypeDesc type = TypeDesc::UNKNOWN, + bool casesensitive = true); + + /// Does the list contain the named attribute? + bool contains(string_view name, TypeDesc type = TypeDesc::UNKNOWN, + bool casesensitive = true) const; + + // Add the param to the list, replacing in-place any existing one with + // the same name. + void add_or_replace(const ParamValue& pv, bool casesensitive = true); + void add_or_replace(ParamValue&& pv, bool casesensitive = true); + + /// Add (or replace) a value in the list. + template + void attribute(string_view name, TypeDesc type, int nvalues, span value) + { + if (!name.empty()) + add_or_replace(ParamValue(name, type, nvalues, value)); + } + + // OIIO_DEPRECATED("Use the version that takes a span (3.1)") + void attribute(string_view name, TypeDesc type, int nvalues, + const void* value) + { + attribute(name, type, nvalues, + make_cspan(reinterpret_cast(value), + value ? size_t(nvalues) * type.size() : size_t(0))); + } + + // OIIO_DEPRECATED("Use the version that takes a span (3.1)") + void attribute(string_view name, TypeDesc type, const void* value) + { + attribute(name, type, 1, value); + } + + /// Set directly from string -- parse if type is non-string. + void attribute(string_view name, TypeDesc type, string_view value) + { + if (!name.empty()) + add_or_replace(ParamValue(name, type, value)); + } + + // Shortcuts for single value of common types. + void attribute(string_view name, int value) + { + attribute(name, TypeInt, 1, cspan(value)); + } + void attribute(string_view name, unsigned int value) + { + attribute(name, TypeUInt, 1, cspan(value)); + } + void attribute(string_view name, float value) + { + attribute(name, TypeFloat, 1, cspan(value)); + } + void attribute(string_view name, string_view value) + { + ustring v(value); + attribute(name, v); + } + + void attribute(string_view name, ustring value) + { + if (!name.empty()) + add_or_replace(ParamValue(name, value)); + } + + /// Search list for named item, return its type or TypeUnknown if not + /// found. + TypeDesc getattributetype(string_view name, + bool casesensitive = false) const + { + auto p = find(name, TypeUnknown, casesensitive); + return p != cend() ? p->type() : TypeUnknown; + } + + /// Retrieve from list: If found its data type is reasonably convertible + /// to `type`, copy/convert the value into `value[...]` and return true. + /// Otherwise, return false and don't modify what val points to. + template + bool getattribute(string_view name, TypeDesc type, span value, + bool casesensitive = false) const + { + OIIO_DASSERT(BaseTypeFromC::value == type.basetype + && type.size() == value.size_bytes()); + // Just call the untyped bytes version underneath. + return getattribute(name, type, as_writable_bytes(value), + casesensitive); + } + /// Retrieve from list: If found its data type is reasonably convertible + /// to `type`, copy/convert the value into the buffer of untyped bytes. + /// and return true. Otherwise, return false and don't modify what val + /// points to. + bool getattribute(string_view name, TypeDesc type, span value, + bool casesensitive = false) const; + /// Retrieve from list: If found its data type is reasonably convertible + /// to `type`, copy/convert the value into val[...] and return true. + /// Otherwise, return false and don't modify what val points to. + // OIIO_DEPRECATED("Use the version that takes a span (3.1)") + bool getattribute(string_view name, TypeDesc type, void* value, + bool casesensitive = false) const; + /// Shortcut for retrieving a single string via getattribute. + bool getattribute(string_view name, std::string& value, + bool casesensitive = false) const; + + /// Retrieve from list: If found its data type is reasonably convertible + /// to `type`, copy/convert the value into val[...] and return true. + /// Otherwise, return false and don't modify what val points to. + template + bool getattribute_indexed(string_view name, int index, TypeDesc type, + span value, bool casesensitive = false) const + { + // Just call the untyped bytes version underneath. + return getattribute_indexed(name, index, type, as_writable_bytes(value), + casesensitive); + } + /// Retrieve from list: If found its data type is reasonably convertible + /// to `type`, copy/convert the value into val[...] and return true. + /// Otherwise, return false and don't modify what val points to. + bool getattribute_indexed(string_view name, int index, TypeDesc type, + span value, + bool casesensitive = false) const; + /// Retrieve from list: If found its data type is reasonably convertible + /// to `type`, copy/convert the value into val[...] and return true. + /// Otherwise, return false and don't modify what val points to. + // OIIO_DEPRECATED("Use the version that takes a span (3.1)") + bool getattribute_indexed(string_view name, int index, TypeDesc type, + void* value, bool casesensitive = false) const; + /// Shortcut for retrieving a single string via getattribute. + bool getattribute_indexed(string_view name, int index, std::string& value, + bool casesensitive = false) const; + + /// Sort alphabetically, optionally case-insensitively, locale- + /// independently, and with all the "un-namespaced" items appearing + /// first, followed by items with "prefixed namespaces" (e.g. "z" comes + /// before "foo:a"). + void sort(bool casesensitive = true); + + /// Merge items from PVL `other` into `*this`. Note how this differs + /// from `operator=` : assignment completely replaces the list with + /// the contents of another. But merge() adds the other items without + /// erasing any items already in this list. + /// + /// @param other + /// The ParamValueList whose entries will be merged into this one. + /// @param override + /// If true, `other` attributes will replace any identically-named + /// attributes already in this list. If false, only attributes whose + /// names are not already in this list will be appended. + void merge(const ParamValueList& other, bool override = false); + + /// Even more radical than clear, free ALL memory associated with the + /// list itself. + void free() + { + clear(); + shrink_to_fit(); + } + + /// Array indexing by integer will return a reference to the ParamValue + /// in that position of the list. + ParamValue& operator[](int index) + { + return std::vector::operator[](index); + } + const ParamValue& operator[](int index) const + { + return std::vector::operator[](index); + } + + /// Array indexing by string will create a "Delegate" that enables a + /// convenient shorthand for adding and retrieving values from the list: + /// + /// 1. Assigning to the delegate adds a ParamValue to the list: + /// ParamValueList list; + /// list["foo"] = 42; // adds integer + /// list["bar"] = 39.8f; // adds float + /// list["baz"] = "hello"; // adds string + /// Be very careful, the attribute's type will be implied by the C++ + /// type of what you assign. + /// + /// 2. The delegate supports a get() that retrieves an item of type T: + /// int i = list["foo"].get(); + /// std::string s = list["baz"].get(); + /// + AttrDelegate operator[](string_view name) const + { + return { this, name }; + } + AttrDelegate operator[](string_view name) + { + return { this, name }; + } +}; + + + +/// A span of const ParamValue entries, that can be iterated over or searched. +/// It's really just a cspan, but with a few more handy methods. +/// This is a convenient way to pass the contents of a ParamValueList (or its +/// equivalent of any consecutive subarray of PV's) without any copies. +class OIIO_UTIL_API ParamValueSpan : public cspan { +public: + // Note: inherits from cspan: + // - size() + // - data() + // - operator[int] + // - begin(), end(), cbegin(), cend() + + ParamValueSpan() = default; + + ParamValueSpan(cspan p) + : cspan(p) + { + } + + // Trivially make a ParamValueSpan from a ParamValueList + ParamValueSpan(const ParamValueList& p) + : cspan(p) + { + } + + /// Construct a span from an initializer_list. + constexpr ParamValueSpan(std::initializer_list il) + : cspan(il.begin(), il.size()) + { + } + + /// Construct from a fixed-length C array. Template magic automatically + /// finds the length from the declared type of the array. + template + constexpr ParamValueSpan(const ParamValue (&data)[N]) + : cspan(data, N) + { + } + + constexpr reference operator[](size_type idx) const + { + return cspan::operator[](idx); + } + + const_iterator find(string_view name, TypeDesc type = TypeUnknown, + bool casesensitive = false) const; + const_iterator find(ustring name, TypeDesc type = TypeUnknown, + bool casesensitive = false) const; + + /// Search for an integer, with default if not found. Automatically will + /// return an int even if the data is really unsigned, short, or byte, but + /// not float. It will retrieve from a string, but only if the string is + /// entirely a valid int format. + int get_int(string_view name, int defaultval = 0, + bool casesensitive = false, bool convert = true) const; + int get_int(ustring name, int defaultval = 0, bool casesensitive = false, + bool convert = true) const; + + /// Search for a float, with default if not found. Automatically will + /// return a float even if the data is really double or half. It will + /// retrieve from a string, but only if the string is entirely a valid + /// float format. + float get_float(string_view name, float defaultval = 0, + bool casesensitive = false, bool convert = true) const; + float get_float(ustring name, float defaultval = 0, + bool casesensitive = false, bool convert = true) const; + + /// Simple way to get a string attribute, with default provided. + /// If the value is another type, it will be turned into a string. + string_view get_string(string_view name, + string_view defaultval = string_view(), + bool casesensitive = false, + bool convert = true) const; + string_view get_string(ustring name, string_view defaultval = string_view(), + bool casesensitive = false, + bool convert = true) const; + ustring get_ustring(string_view name, + string_view defaultval = string_view(), + bool casesensitive = false, bool convert = true) const; + ustring get_ustring(ustring name, string_view defaultval = string_view(), + bool casesensitive = false, bool convert = true) const; + + /// Search for the attribute and return its "truth-like" value: false if + /// it exists but is empty, or is a numeric value equal to 0, or a string + /// value that is "0", "no", "off", or "false". Otherwise, any non-empty + /// value returns true. + bool get_bool(string_view name, bool defaultval = false, + bool casesensitive = false) const; + bool get_bool(ustring name, bool defaultval = false, + bool casesensitive = false) const; + + /// Does the span contain the named attribute? + bool contains(string_view name, TypeDesc type = TypeUnknown, + bool casesensitive = false) const + { + return (find(name, type, casesensitive) != end()); + } + bool contains(ustring name, TypeDesc type = TypeUnknown, + bool casesensitive = false) const + { + return (find(name, type, casesensitive) != end()); + } + + /// Search list for named item, return its type or TypeUnknown if not + /// found. + TypeDesc getattributetype(string_view name, + bool casesensitive = false) const + { + auto p = find(name, TypeUnknown, casesensitive); + return p != cend() ? p->type() : TypeUnknown; + } + + /// Retrieve from list: If found and its data type is reasonably convertible + /// to `type`, copy/convert the value into val[...] and return true. + /// Otherwise, return false and don't modify what val points to. + template + bool getattribute(string_view name, TypeDesc type, span value, + bool casesensitive = false) const + { + OIIO_DASSERT(BaseTypeFromC::value == type.basetype + && type.size() == value.size_bytes()); + // Just call the untyped bytes version underneath. + return getattribute(name, type, as_writable_bytes(value), + casesensitive); + } + bool getattribute(string_view name, TypeDesc type, span value, + bool casesensitive = false) const; + + /// Retrieve from list: If found and its data type is reasonably convertible + /// to `type`, copy/convert the value into val[...] and return true. + /// Otherwise, return false and don't modify what val points to. + // OIIO_DEPRECATED("Use the version that takes a span (3.1)") + bool getattribute(string_view name, TypeDesc type, void* value, + bool casesensitive = false) const; + /// Shortcut for retrieving a single string via getattribute. + bool getattribute(string_view name, std::string& value, + bool casesensitive = false) const; + + /// Retrieve from list: If found its data type is reasonably convertible + /// to `type`, copy/convert the value into val[...] and return true. + /// Otherwise, return false and don't modify what val points to. + template + bool getattribute_indexed(string_view name, int index, TypeDesc type, + span value, bool casesensitive = false) const + { + OIIO_DASSERT(BaseTypeFromC::value == type.basetype + && type.size() == value.size_bytes()); + // Just call the untyped bytes version underneath. + return getattribute(name, type, as_writable_bytes(value), + casesensitive); + } + bool getattribute_indexed(string_view name, int index, TypeDesc type, + span value, + bool casesensitive = false) const; + /// Retrieve from list: If found its data type is reasonably convertible + /// to `type`, copy/convert the value into val[...] and return true. + /// Otherwise, return false and don't modify what val points to. + // OIIO_DEPRECATED("Use the version that takes a span (3.1)") + bool getattribute_indexed(string_view name, int index, TypeDesc type, + void* value, bool casesensitive = false) const; + /// Shortcut for retrieving a single string via getattribute. + bool getattribute_indexed(string_view name, int index, std::string& value, + bool casesensitive = false) const; + + // Inherits operator[int] from span + + /// Array indexing by string will create a "Delegate" that enables a + /// convenient shorthand for retrieving a value: + /// + /// int i = list["foo"].get(); + /// std::string s = list["baz"].get(); + /// + AttrDelegate operator[](string_view name) const + { + return { this, name }; + } +}; + + +OIIO_NAMESPACE_3_1_END diff --git a/third_party/tlRender-install-Release/include/OpenImageIO/platform.h b/third_party/tlRender-install-Release/include/OpenImageIO/platform.h new file mode 100644 index 00000000..d4fab7df --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenImageIO/platform.h @@ -0,0 +1,652 @@ +// Copyright Contributors to the OpenImageIO project. +// SPDX-License-Identifier: Apache-2.0 +// https://github.com/AcademySoftwareFoundation/OpenImageIO + + +///////////////////////////////////////////////////////////////////////// +// \file +// platform.h is where we put all the platform-specific macros. +// Things like: +// +// * Detecting which compiler is being used. +// * Detecting which C++ standard is being used and what features are +// available. +// * Various helpers that need to be defined differently per compiler, +// language version, OS, etc. +///////////////////////////////////////////////////////////////////////// + +// clang-format off + +#pragma once + +#include +#include +#include +#include // std::forward + +// Make sure all platforms have the explicit sized integer types +#ifndef __STDC_LIMIT_MACROS +# define __STDC_LIMIT_MACROS /* needed for some defs in stdint.h */ +#endif +#include + +#if defined(__FreeBSD__) +# include +#endif + +#ifdef __MINGW32__ +# include // for alloca +#endif + +#ifdef _MSC_VER +# include +#endif + +// Avoid min and max being defined for any subsequent include of windows.h +#ifdef _WIN32 +# ifndef NOMINMAX +# define NOMINMAX +# endif +#endif + +#include +#include + +// Detect which compiler and version we're using + +// Notes: +// __GNUC__ is defined for gcc and all clang varieties +// __clang__ is defined for all clang varieties (generic and Apple) +// __apple_build_version__ is only defined for Apple clang +// __INTEL_COMPILER is defined only for icc +// __INTEL_LLVM_COMPILER is defined only for icx +// _MSC_VER is defined for MSVS compiler (not gcc/clang/icc even on Windows) +// _WIN32 is defined on Windows regardless of compiler +// __CUDACC__ is defined any time we are compiling a module for Cuda +// (both for the host pass and the device pass). "Do this +// when using nvcc or clang with ptx target." +// __CUDA_ARCH__ is only defined when doing the device pass. "Do this only +// for code that will actually run on the GPU." + + +// Define OIIO_GNUC_VERSION to hold an encoded gcc version (e.g. 40802 for +// 4.8.2), or 0 if not a GCC release. N.B.: This will be 0 for clang. +#if defined(__GNUC__) && !defined(__clang__) +# define OIIO_GNUC_VERSION (10000*__GNUC__ + 100*__GNUC_MINOR__ + __GNUC_PATCHLEVEL__) +#else +# define OIIO_GNUC_VERSION 0 +#endif + +// Define OIIO_CLANG_VERSION to hold an encoded generic Clang version (e.g. +// 30402 for clang 3.4.2), or 0 if not a generic Clang release. +// N.B. This will be 0 for the clang Apple distributes (which has different +// version numbers entirely) and for the Intel clang-based compiler. +#if defined(__clang__) && !defined(__apple_build_version__) && !defined(__INTEL_LLVM_COMPILER) +# define OIIO_CLANG_VERSION (10000*__clang_major__ + 100*__clang_minor__ + __clang_patchlevel__) +#else +# define OIIO_CLANG_VERSION 0 +#endif + +// Define OIIO_APPLE_CLANG_VERSION to hold an encoded Apple Clang version +// (e.g. 70002 for clang 7.0.2), or 0 if not an Apple Clang release. +#if defined(__clang__) && defined(__apple_build_version__) +# if defined(__INTEL_LLVM_COMPILER) +# error Not expected for __INTEL_LLVM_COMPILER to be defined with an __apple_build_version__ + // The classic Intel(r) C++ Compiler on OSX may still define __clang__. + // Combine with testing OIIO_INTEL_COMPILER to further differentiate if + // needed. +# endif +# define OIIO_APPLE_CLANG_VERSION (10000*__clang_major__ + 100*__clang_minor__ + __clang_patchlevel__) +#else +# define OIIO_APPLE_CLANG_VERSION 0 +#endif + +// Define OIIO_INTEL_CLASSIC_COMPILER_VERSION to hold an encoded Intel +// compiler version (e.g. 1900), or 0 if not an Intel compiler. +#if defined(__INTEL_COMPILER) +# define OIIO_INTEL_CLASSIC_COMPILER_VERSION __INTEL_COMPILER +#else +# define OIIO_INTEL_CLASSIC_COMPILER_VERSION 0 +#endif + +// DEPRECATED(2.4) phase out OIIO_NON_INTEL_CLANG for OIIO_INTEL_LLVM_COMPILER. +// We're keeping the old one for a while for back compatibility. +#if !defined(__INTEL_COMPILER) && defined(__clang__) +# define OIIO_NON_INTEL_CLANG __clang__ +#else +# define OIIO_NON_INTEL_CLANG 0 +#endif + +// Define OIIO_INTEL_LLVM_COMPILER to hold an encoded Intel(r) LLVM Compiler +// version (e.g. 20220000), or 0 if not an Intel(r) LLVM Compiler. +// Define OIIO_INTEL_CLANG_VERSION to hold the encoded Clang version the +// Intel(r) LLVM Compiler is based on (e.g. 140000), or 0 if not an Intel(r) +// LLVM compiler. +#if defined(__INTEL_LLVM_COMPILER) +# define OIIO_INTEL_LLVM_COMPILER __INTEL_LLVM_COMPILER +# define OIIO_INTEL_CLANG_VERSION (10000*__clang_major__ + 100*__clang_minor__ + __clang_patchlevel__) +#else +# define OIIO_INTEL_LLVM_COMPILER 0 +# define OIIO_INTEL_CLANG_VERSION 0 +#endif + +// Define OIIO_ANY_CLANG to 0 or 1 to indicate if any Clang based compiler is +// in use. +#if defined(__clang__) +# define OIIO_ANY_CLANG 1 +#else +# define OIIO_ANY_CLANG 0 +#endif + +// Tests for MSVS versions, always 0 if not MSVS at all. +// https://learn.microsoft.com/en-us/cpp/overview/compiler-versions +#if defined(_MSC_VER) +# define OIIO_MSVS_VERSION _MSC_VER +# define OIIO_MSVS_AT_LEAST_2013 (_MSC_VER >= 1800) +# define OIIO_MSVS_BEFORE_2013 (_MSC_VER < 1800) +# define OIIO_MSVS_AT_LEAST_2015 (_MSC_VER >= 1900) +# define OIIO_MSVS_BEFORE_2015 (_MSC_VER < 1900) +# define OIIO_MSVS_AT_LEAST_2017 (_MSC_VER >= 1910) +# define OIIO_MSVS_BEFORE_2017 (_MSC_VER < 1910) +# define OIIO_MSVS_AT_LEAST_2019 (_MSC_VER >= 1920) +# define OIIO_MSVS_BEFORE_2019 (_MSC_VER < 1920) +# define OIIO_MSVS_AT_LEAST_2022 (_MSC_VER >= 1930) +# define OIIO_MSVS_BEFORE_2022 (_MSC_VER < 1930) +# if OIIO_MSVS_BEFORE_2017 +# error "This version of OIIO is meant to work only with Visual Studio 2017 or later" +# endif +#else +# define OIIO_MSVS_VERSION 0 +# define OIIO_MSVS_AT_LEAST_2013 0 +# define OIIO_MSVS_BEFORE_2013 0 +# define OIIO_MSVS_AT_LEAST_2015 0 +# define OIIO_MSVS_BEFORE_2015 0 +# define OIIO_MSVS_AT_LEAST_2017 0 +# define OIIO_MSVS_BEFORE_2017 0 +# define OIIO_MSVS_AT_LEAST_2019 0 +# define OIIO_MSVS_BEFORE_2019 0 +# define OIIO_MSVS_AT_LEAST_2022 0 +# define OIIO_MSVS_BEFORE_2022 0 +#endif + + +// Detect which C++ standard we're using, and handy macros. +// See https://en.cppreference.com/w/cpp/compiler_support +// +// OIIO_CPLUSPLUS_VERSION : which C++ standard is compiling (14, 17, ...) +// OIIO_CONSTEXPR17 : +// OIIO_CONSTEXPR20 : constexpr for C++ >= the designated version, otherwise +// nothing (this is useful for things that can only be +// constexpr for particular versions or greater). +// +// Note: oiioversion.h defines OIIO_BUILD_CPP (set to 17, 20, etc.) +// reflecting what OIIO itself was *built* with. In contrast, +// OIIO_CPLUSPLUS_VERSION defined below will be set to the right number for +// the C++ standard being compiled RIGHT NOW. These two things may be the +// same when compiling OIIO, but they may not be the same if another +// package is compiling against OIIO and using these headers (OIIO may be +// C++17 but the client package may be newer, or vice versa -- use these two +// symbols to differentiate these cases, when important). +#if (__cplusplus >= 202302L) +# define OIIO_CPLUSPLUS_VERSION 23 +# define OIIO_CONSTEXPR20 constexpr +# define OIIO_CONSTEXPR23 constexpr +#elif (__cplusplus >= 202001L) +# define OIIO_CPLUSPLUS_VERSION 20 +# define OIIO_CONSTEXPR20 constexpr +# define OIIO_CONSTEXPR23 /* not constexpr before C++23 */ +#elif (__cplusplus >= 201703L) || (defined(_MSC_VER) && _MSC_VER >= 1914) +# define OIIO_CPLUSPLUS_VERSION 17 +# define OIIO_CONSTEXPR20 /* not constexpr before C++20 */ +# define OIIO_CONSTEXPR23 /* not constexpr before C++23 */ +#else +# error "This version of OIIO is meant to work only with C++17 and above" +#endif + +// DEPRECATED(3.1): use C++17 inline constexpr +#define OIIO_INLINE_CONSTEXPR inline constexpr + +// DEPRECATED(3.0): use C++17 constexpr +#define OIIO_CONSTEXPR17 constexpr + + +// In C++20 (and some compilers before that), __has_cpp_attribute can +// test for understand of [[attr]] tests. +#ifndef __has_cpp_attribute +# define __has_cpp_attribute(x) 0 +#endif + +// On gcc & clang, __has_attribute can test for __attribute__((attr)) +#ifndef __has_attribute +# define __has_attribute(x) 0 +#endif + + + +// Pragma control +// +// OIIO_PRAGMA(x) make a pragma for *unquoted* x +// OIIO_PRAGMA_WARNING_PUSH/POP -- push/pop warning state +// OIIO_VISIBILITY_PUSH/POP -- push/pop symbol visibility state +// OIIO_GCC_PRAGMA(x) -- pragma on gcc/clang/icc only +// OIIO_CLANG_PRAGMA(x) -- pragma on clang only (not gcc or icc) +// OIIO_MSVS_PRAGMA(x) -- pragma on MSVS only +// OIIO_INTEL_PRAGMA(x) -- pragma on Intel icc compiler only +// OIIO_INTEL_LLVM_PRAGMA(x) -- pragma on Intel icx compiler only + +// Generic pragma definition +#if defined(_MSC_VER) + // Of course MS does it in a quirky way + #define OIIO_PRAGMA(UnQuotedPragma) __pragma(UnQuotedPragma) +#else + // All other compilers seem to support C99 _Pragma + #define OIIO_PRAGMA(UnQuotedPragma) _Pragma(#UnQuotedPragma) +#endif + +#if defined(__GNUC__) /* gcc, clang, icc, icx */ +# define OIIO_PRAGMA_WARNING_PUSH OIIO_PRAGMA(GCC diagnostic push) +# define OIIO_PRAGMA_WARNING_POP OIIO_PRAGMA(GCC diagnostic pop) +# define OIIO_PRAGMA_VISIBILITY_PUSH OIIO_PRAGMA(GCC visibility push(default)) +# define OIIO_PRAGMA_VISIBILITY_POP OIIO_PRAGMA(GCC visibility pop) +# define OIIO_GCC_PRAGMA(UnQuotedPragma) OIIO_PRAGMA(UnQuotedPragma) +# if defined(__clang__) +# define OIIO_CLANG_PRAGMA(UnQuotedPragma) OIIO_PRAGMA(UnQuotedPragma) +# define OIIO_GCC_ONLY_PRAGMA(UnQuotedPragma) +# else +# define OIIO_CLANG_PRAGMA(UnQuotedPragma) +# define OIIO_GCC_ONLY_PRAGMA(UnQuotedPragma) OIIO_PRAGMA(UnQuotedPragma) +# endif +# if defined(__INTEL_COMPILER) +# define OIIO_INTEL_PRAGMA(UnQuotedPragma) OIIO_PRAGMA(UnQuotedPragma) +# else +# define OIIO_INTEL_PRAGMA(UnQuotedPragma) +# endif +# if defined(__INTEL_LLVM_COMPILER) +# define OIIO_INTEL_LLVM_PRAGMA(UnQuotedPragma) OIIO_PRAGMA(UnQuotedPragma) +# else +# define OIIO_INTEL_LLVM_PRAGMA(UnQuotedPragma) +# endif +# define OIIO_MSVS_PRAGMA(UnQuotedPragma) +#elif defined(_MSC_VER) +# define OIIO_PRAGMA_WARNING_PUSH __pragma(warning(push)) +# define OIIO_PRAGMA_WARNING_POP __pragma(warning(pop)) +# define OIIO_PRAGMA_VISIBILITY_PUSH /* N/A on MSVS */ +# define OIIO_PRAGMA_VISIBILITY_POP /* N/A on MSVS */ +# define OIIO_GCC_PRAGMA(UnQuotedPragma) +# define OIIO_GCC_ONLY_PRAGMA(UnQuotedPragma) +# define OIIO_CLANG_PRAGMA(UnQuotedPragma) +# define OIIO_INTEL_PRAGMA(UnQuotedPragma) +# define OIIO_INTEL_LLVM_PRAGMA(UnQuotedPragma) +# define OIIO_MSVS_PRAGMA(UnQuotedPragma) OIIO_PRAGMA(UnQuotedPragma) +#else +# define OIIO_PRAGMA_WARNING_PUSH +# define OIIO_PRAGMA_WARNING_POP +# define OIIO_PRAGMA_VISIBILITY_PUSH +# define OIIO_PRAGMA_VISIBILITY_POP +# define OIIO_GCC_PRAGMA(UnQuotedPragma) +# define OIIO_GCC_ONLY_PRAGMA(UnQuotedPragma) +# define OIIO_CLANG_PRAGMA(UnQuotedPragma) +# define OIIO_INTEL_PRAGMA(UnQuotedPragma) +# define OIIO_INTEL_LLVM_PRAGMA(UnQuotedPragma) +# define OIIO_MSVS_PRAGMA(UnQuotedPragma) +#endif + + + +/// OIIO_ALLOCA is used to allocate smallish amount of memory on the stack, +/// equivalent of C99 type var_name[size]. +/// +/// NOTE: in a debug build, this will assert for allocations >= 1MB, which +/// is much too big. Hopefully this will keep us from abusing alloca and +/// having stack overflows. The rule of thumb is that it's ok to use alloca +/// for small things of bounded size (like, one float per channel), but +/// not for anything that could be arbitrarily big (like a full scanline or +/// image, because sooner or later somebody will give you an image big +/// enough to cause trouble). Consider using the OIIO_ALLOCATE_STACK_OR_HEAP +/// idiom rather than a direct OIIO_ALLOCA if you aren't sure the item will +/// be small. +#if defined(__GNUC__) +# define OIIO_ALLOCA(type, size) (assert(size < (1<<20)), (size) != 0 ? ((type*)__builtin_alloca((size) * sizeof(type))) : nullptr) +#else +# define OIIO_ALLOCA(type, size) (assert(size < (1<<20)), (size) != 0 ? ((type*)alloca((size) * sizeof(type))) : nullptr) +#endif + +/// Deprecated (for namespace pollution reasons) +#define ALLOCA(type, size) OIIO_ALLOCA(type, size) + + +/// Try to allocate T* var to point to T[size] elements of temporary storage +/// that will automatically free when the local scope is exited. Allocate +/// the space on the stack with alloca if it's small, but if it's big (> 64 +/// KB), allocate on the heap with a new[], stored as a std::unique_ptr. In +/// both cases, the memory will be freed automatically upon exit of scope. +/// That threshold is big enough for one scanline of a 4096 x 4 channel x +/// float image, or one 64x64 tile of a 4xfloat image. +#define OIIO_ALLOCATE_STACK_OR_HEAP(var, T, size) \ + size_t var##___size = size_t(size); \ + std::unique_ptr var##___heap; \ + if (var##___size * sizeof(T) <= (1 << 16)) { \ + var = OIIO_ALLOCA(T, var##___size); \ + } else { \ + var##___heap.reset(new T[var##___size]); \ + var = var##___heap.get(); \ + } + + +// Define a macro that can be used for memory alignment. +// This macro is mostly obsolete and C++11 alignas() should be preferred +// for new code. +#if defined(__GNUC__) || __has_attribute(aligned) +# define OIIO_ALIGN(size) __attribute__((aligned(size))) +#elif defined(_MSC_VER) +# define OIIO_ALIGN(size) __declspec(align(size)) +#elif defined(__INTEL_COMPILER) +# define OIIO_ALIGN(size) __declspec(align((size))) +#else +# define OIIO_ALIGN(size) alignas(size) +#endif + +// Cache line size is 64 on all modern x86 CPUs. If this changes or we +// anticipate ports to other architectures, we'll need to change this. +#define OIIO_CACHE_LINE_SIZE 64 + +// Align the next declaration to be on its own cache line +#define OIIO_CACHE_ALIGN OIIO_ALIGN(OIIO_CACHE_LINE_SIZE) + + + +// gcc defines a special intrinsic to use in conditionals that can speed +// up extremely performance-critical spots if the conditional usually +// (or rarely) is true. You use it by replacing +// if (x) ... +// with +// if (OIIO_LIKELY(x)) ... // if you think x will usually be true +// or +// if (OIIO_UNLIKELY(x)) ... // if you think x will rarely be true +// Caveat: Programmers are notoriously bad at guessing this, so it +// should be used only with thorough benchmarking. +#if defined(__GNUC__) || defined(__clang__) || defined(__INTEL_COMPILER) +# define OIIO_LIKELY(x) (__builtin_expect(bool(x), true)) +# define OIIO_UNLIKELY(x) (__builtin_expect(bool(x), false)) +#else +# define OIIO_LIKELY(x) (x) +# define OIIO_UNLIKELY(x) (x) +#endif + + +// OIIO_FORCEINLINE is a function attribute that attempts to make the function +// always inline. On many compilers regular 'inline' is only advisory. Put +// this attribute before the function return type, just like you would use +// 'inline'. +#if defined(__CUDACC__) +# define OIIO_FORCEINLINE __inline__ +#elif defined(__GNUC__) || defined(__clang__) || __has_attribute(always_inline) +# define OIIO_FORCEINLINE inline __attribute__((always_inline)) +#elif defined(_MSC_VER) || defined(__INTEL_COMPILER) +# define OIIO_FORCEINLINE __forceinline +#else +# define OIIO_FORCEINLINE inline +#endif + +// OIIO_PURE_FUNC is a function attribute that assures the compiler that the +// function does not write to any non-local memory other than its return +// value and has no side effects. This can enable additional compiler +// optimizations by knowing that calling the function cannot possibly alter +// any other memory. This declaration goes after the function declaration: +// int blah (int arg) OIIO_PURE_FUNC; +#if defined(__GNUC__) || defined(__clang__) || defined(__INTEL_COMPILER) || __has_attribute(pure) +# define OIIO_PURE_FUNC __attribute__((pure)) +#elif defined(_MSC_VER) +# define OIIO_PURE_FUNC /* seems not supported by MSVS */ +#else +# define OIIO_PURE_FUNC +#endif + +// OIIO_CONST_FUNC is a function attribute that assures the compiler that +// the function does not examine (read) any values except for its arguments, +// does not write any non-local memory other than its return value, and has +// no side effects. This is even more strict than 'pure', and allows even +// more optimizations (such as eliminating multiple calls to the function +// that have the exact same argument values). +#if defined(__GNUC__) || defined(__clang__) || defined(__INTEL_COMPILER) || __has_attribute(const) +# define OIIO_CONST_FUNC __attribute__((const)) +#elif defined(_MSC_VER) +# define OIIO_CONST_FUNC /* seems not supported by MSVS */ +#else +# define OIIO_CONST_FUNC +#endif + +// OIIO_MAYBE_UNUSED is an annotator for function or variable attribute that +// assures the compiler that it's fine for the item to appear to be unused. +// Consider this deprecated (as of OIIO 3.0), you should favor C++17's +// [[maybe_unused]] attribute. +#define OIIO_MAYBE_UNUSED [[maybe_unused]] + +// OIIO_RESTRICT is a parameter attribute that indicates a promise that the +// parameter definitely will not alias any other parameters in such a way +// that creates a data dependency. Use with caution! +#if defined(__GNUC__) || defined(__clang__) || defined(_MSC_VER) || defined(__INTEL_COMPILER) +# define OIIO_RESTRICT __restrict +#else +# define OIIO_RESTRICT +#endif + + +// OIIO_DEPRECATED before a function declaration marks it as deprecated in +// a way that will generate compile warnings if it is called. This should +// itself be considered deprecated (as of OIIO 3.0) and code should use +// [[deprecated(msg)]] instead. +#define OIIO_DEPRECATED(msg) [[deprecated(msg)]] + +// OIIO_DEPRECATED_EXTERNAL marks things deprecated for downstream apps, but +// still is allowed for internal use. Generally, this is used when we want to +// deprecate for users but can't quite extract it internally yet. +#ifndef OIIO_INTERNAL +# define OIIO_DEPRECATED_EXTERNAL(msg) [[deprecated(msg)]] +#else +# define OIIO_DEPRECATED_EXTERNAL(msg) +#endif + +// OIIO_FALLTHROUGH at the end of a `case` label's statements documents that +// the switch statement case is intentionally falling through to the code +// for the next case. +// Consider this deprecated (as of OIIO 3.0), you should favor C++17's +// [[fallthrough]] attribute. +#define OIIO_FALLTHROUGH [[fallthrough]] + + +// OIIO_NODISCARD following a function declaration documents that the +// function's return value should never be ignored. +#if OIIO_CPLUSPLUS_VERSION >= 17 || __has_cpp_attribute(nodiscard) +# define OIIO_NODISCARD [[nodiscard]] +#else +# define OIIO_NODISCARD +#endif + + +// OIIO_NO_SANITIZE_ADDRESS can be used to mark a function that you don't +// want address sanitizer to catch. Only use this if you know there are +// false positives that you can't easily get rid of. +// This should work for any clang >= 3.3 and gcc >= 4.8, which are +// guaranteed by our minimum requirements. +#if defined(__clang__) || (OIIO_GNUC_VERSION > 90000 && !defined(__INTEL_COMPILER)) \ + || __has_attribute(no_sanitize_address) +# define OIIO_NO_SANITIZE_ADDRESS __attribute__((no_sanitize_address)) +#else +# define OIIO_NO_SANITIZE_ADDRESS +#endif + + +// OIIO_NO_SANITIZE_UNDEFINED can be used to mark a function that you don't +// want undefined behavior sanitizer to catch. Only use this if you know there +// are false positives that you can't easily get rid of. +#if defined(__clang__) || (OIIO_GNUC_VERSION > 90000 && !defined(__INTEL_COMPILER)) \ + || __has_attribute(no_sanitize) +# define OIIO_NO_SANITIZE_UNDEFINED __attribute__((no_sanitize("undefined"))) +#else +# define OIIO_NO_SANITIZE_UNDEFINED +#endif + + +// OIIO_RETURNS_NONNULL following a function declaration of a function +// indicates that the pointer returned by the function is guaranteed to +// never be nullptr. +#if defined(__clang__) || defined(__GNUC__) || __has_attribute(returns_nonnull) +# define OIIO_RETURNS_NONNULL __attribute__((returns_nonnull)) +#else +# define OIIO_RETURNS_NONNULL +#endif + + +// OIIO_HOSTDEVICE is used before a function declaration to supply the +// function decorators needed when compiling for CUDA devices. +#ifdef __CUDACC__ +# define OIIO_HOSTDEVICE __host__ __device__ +# define OIIO_DEVICE __device__ +#else +# define OIIO_HOSTDEVICE +# define OIIO_DEVICE +#endif + + +// OIIO_DEVICE_CONSTEXPR is like OIIO_HOSTDEVICE, but it's `constexpr` only on +// the Cuda device side, and merely inline (not constexpr) on the host side. +#ifdef __CUDA_ARCH__ +# define OIIO_DEVICE_CONSTEXPR __device__ constexpr +#else +# define OIIO_DEVICE_CONSTEXPR /*__host__*/ inline +#endif + + + +// OIIO_PRETTY_FUNCTION gives a text string of the current function +// declaration. +#if defined(__PRETTY_FUNCTION__) +# define OIIO_PRETTY_FUNCTION __PRETTY_FUNCTION__ /* gcc, clang */ +#elif defined(__FUNCSIG__) +# define OIIO_PRETTY_FUNCTION __FUNCSIG__ /* MS gotta be different */ +#else +# define OIIO_PRETTY_FUNCTION __FUNCTION__ +#endif + + + +OIIO_NAMESPACE_3_1_BEGIN + +/// Class for describing endianness. Test for endianness as +/// `if (endian::native == endian::little)` or +/// `if (endian::native == endian::big)`. +/// This uses the same semantics as C++20's std::endian. +enum class endian { +#ifdef _WIN32 /* All Windows platforms are little endian */ + little = 0, + big = 1, + native = little +#else /* gcc, clang, icc all define these macros */ + little = __ORDER_LITTLE_ENDIAN__, + big = __ORDER_BIG_ENDIAN__, + native = __BYTE_ORDER__ +#endif +}; + + +/// Return true if the architecture we are running on is little endian. +OIIO_FORCEINLINE constexpr bool +littleendian(void) noexcept +{ + return endian::native == endian::little; +} + + +/// Return true if the architecture we are running on is big endian. +OIIO_FORCEINLINE constexpr bool +bigendian(void) noexcept +{ + return endian::native == endian::big; +} + + + +/// Retrieve cpuid flags into 'info'. +inline void cpuid (int info[4], int infoType, int extra) +{ + // Implementation cribbed from Halide (http://halide-lang.org), which + // cribbed it from ISPC (https://github.com/ispc/ispc). +#if (defined(_M_X64) || defined(_M_IX86) || defined(_M_AMD64) || defined(__i386__) || defined(__x86_64__)) +# ifdef _MSC_VER + __cpuidex(info, infoType, extra); +# elif defined(__x86_64__) + __asm__ __volatile__ ( + "cpuid \n\t" + : "=a" (info[0]), "=b" (info[1]), "=c" (info[2]), "=d" (info[3]) + : "0" (infoType), "2" (extra)); +# else + __asm__ __volatile__ ( + "mov{l}\t{%%}ebx, %1 \n\t" + "cpuid \n\t" + "xchg{l}\t{%%}ebx, %1 \n\t" + : "=a" (info[0]), "=r" (info[1]), "=c" (info[2]), "=d" (info[3]) + : "0" (infoType), "2" (extra)); +# endif +#else + info[0] = 0; info[1] = 0; info[2] = 0; info[3] = 0; +#endif +} + + +inline bool cpu_has_sse2 () {int i[4]; cpuid(i,1,0); return (i[3] & (1<<26)) != 0; } +inline bool cpu_has_sse3 () {int i[4]; cpuid(i,1,0); return (i[2] & (1<<0)) != 0; } +inline bool cpu_has_ssse3 () {int i[4]; cpuid(i,1,0); return (i[2] & (1<<9)) != 0; } +inline bool cpu_has_fma () {int i[4]; cpuid(i,1,0); return (i[2] & (1<<12)) != 0; } +inline bool cpu_has_sse41 () {int i[4]; cpuid(i,1,0); return (i[2] & (1<<19)) != 0; } +inline bool cpu_has_sse42 () {int i[4]; cpuid(i,1,0); return (i[2] & (1<<20)) != 0; } +inline bool cpu_has_popcnt() {int i[4]; cpuid(i,1,0); return (i[2] & (1<<23)) != 0; } +inline bool cpu_has_avx () {int i[4]; cpuid(i,1,0); return (i[2] & (1<<28)) != 0; } +inline bool cpu_has_f16c () {int i[4]; cpuid(i,1,0); return (i[2] & (1<<29)) != 0; } +inline bool cpu_has_rdrand() {int i[4]; cpuid(i,1,0); return (i[2] & (1<<30)) != 0; } +inline bool cpu_has_avx2 () {int i[4]; cpuid(i,7,0); return (i[1] & (1<<5)) != 0; } +inline bool cpu_has_avx512f() {int i[4]; cpuid(i,7,0); return (i[1] & (1<<16)) != 0; } +inline bool cpu_has_avx512dq() {int i[4]; cpuid(i,7,0); return (i[1] & (1<<17)) != 0; } +inline bool cpu_has_avx512ifma() {int i[4]; cpuid(i,7,0); return (i[1] & (1<<21)) != 0; } +inline bool cpu_has_avx512pf() {int i[4]; cpuid(i,7,0); return (i[1] & (1<<26)) != 0; } +inline bool cpu_has_avx512er() { return false; /* knights landing only */ } +inline bool cpu_has_avx512cd() {int i[4]; cpuid(i,7,0); return (i[1] & (1<<28)) != 0; } +inline bool cpu_has_avx512bw() {int i[4]; cpuid(i,7,0); return (i[1] & (1<<30)) != 0; } +inline bool cpu_has_avx512vl() {int i[4]; cpuid(i,7,0); return (i[1] & (0x80000000 /*1<<31*/)) != 0; } + +// portable aligned malloc +OIIO_UTIL_API void* aligned_malloc(std::size_t size, std::size_t align); +OIIO_UTIL_API void aligned_free(void* ptr); + +// basic wrappers to new/delete over-aligned types since this isn't guaranteed to be supported until C++17 +template +inline T* aligned_new(Args&&... args) { + static_assert(alignof(T) > alignof(void*), "Type doesn't seem to be over-aligned, aligned_new is not required"); + void* ptr = aligned_malloc(sizeof(T), alignof(T)); + OIIO_PRAGMA_WARNING_PUSH + OIIO_INTEL_PRAGMA(warning disable 873) + return ptr ? new (ptr) T(std::forward(args)...) : nullptr; + OIIO_PRAGMA_WARNING_POP +} + +template +inline void aligned_delete(T* t) { + if (t) { + t->~T(); + aligned_free(t); + } +} + + +// DEPRECATED(2.6) +using std::enable_if_t; + +OIIO_NAMESPACE_3_1_END + + +// An enable_if helper to be used in template parameters which results in +// much shorter symbols: https://godbolt.org/z/sWw4vP +// Borrowed from fmtlib. +#ifndef OIIO_ENABLE_IF +# define OIIO_ENABLE_IF(...) std::enable_if_t<(__VA_ARGS__), int> = 0 +#endif diff --git a/third_party/tlRender-install-Release/include/OpenImageIO/plugin.h b/third_party/tlRender-install-Release/include/OpenImageIO/plugin.h new file mode 100644 index 00000000..0a57630d --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenImageIO/plugin.h @@ -0,0 +1,77 @@ +// Copyright Contributors to the OpenImageIO project. +// SPDX-License-Identifier: Apache-2.0 +// https://github.com/AcademySoftwareFoundation/OpenImageIO + + +///////////////////////////////////////////////////////////////////////// +/// \file +/// +/// Helper routines for managing runtime-loadable "plugins", implemented +/// variously as DSO's (traditional Unix/Linux), dynamic libraries (Mac +/// OS X), DLL's (Windows). +///////////////////////////////////////////////////////////////////////// + + +#pragma once + +#include + +#include +#include + + +OIIO_NAMESPACE_3_1_BEGIN + +namespace Plugin { + +typedef void* Handle; + +/// Return the platform-dependent suffix for plug-ins ("dll" on +/// Windows, "so" on Linux and Mac OS X. +OIIO_UTIL_API const char* +plugin_extension(void); + +/// Open the named plugin, return its handle. If it could not be +/// opened, return 0 and the next call to geterror() will contain +/// an explanatory message. If the 'global' parameter is true, all +/// symbols from the plugin will be available to the app (on Unix-like +/// platforms; this has no effect on Windows). +OIIO_UTIL_API Handle +open(const char* plugin_filename, bool global = true); + +inline Handle +open(const std::string& plugin_filename, bool global = true) +{ + return open(plugin_filename.c_str(), global); +} + +/// Close the open plugin with the given handle and return true upon +/// success. If some error occurred, return false and the next call to +/// geterror() will contain an explanatory message. +OIIO_UTIL_API bool +close(Handle plugin_handle); + +/// Get the address of the named symbol from the open plugin handle. If +/// some error occurred, return nullptr and the next call to +/// geterror() will contain an explanatory message (unless report_error +/// is false, in which case the error message will be suppressed). +OIIO_UTIL_API void* +getsym(Handle plugin_handle, const char* symbol_name, bool report_error = true); + +inline void* +getsym(Handle plugin_handle, const std::string& symbol_name, + bool report_error = true) +{ + return getsym(plugin_handle, symbol_name.c_str(), report_error); +} + +/// Return any error messages associated with the last call to any of +/// open, close, or getsym from the same thread. +OIIO_UTIL_API std::string +geterror(bool clear = true); + + + +} // namespace Plugin + +OIIO_NAMESPACE_3_1_END diff --git a/third_party/tlRender-install-Release/include/OpenImageIO/refcnt.h b/third_party/tlRender-install-Release/include/OpenImageIO/refcnt.h new file mode 100644 index 00000000..ac361c26 --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenImageIO/refcnt.h @@ -0,0 +1,257 @@ +// Copyright Contributors to the OpenImageIO project. +// SPDX-License-Identifier: Apache-2.0 +// https://github.com/AcademySoftwareFoundation/OpenImageIO + + +///////////////////////////////////////////////////////////////////////// +/// \file +/// +/// Wrappers and utilities for reference counting. +///////////////////////////////////////////////////////////////////////// + + +#pragma once + +#include + +#include +#include +#include + + +OIIO_NAMESPACE_3_1_BEGIN + + + +/// A simple intrusive pointer, modeled after std::shared_ptr. +template class intrusive_ptr { +public: + typedef T element_type; + + /// Default ctr + intrusive_ptr() noexcept + : m_ptr(NULL) + { + } + + /// Construct from a raw pointer (presumed to be just now allocated, + /// and now owned by us). + intrusive_ptr(T* ptr) + : m_ptr(ptr) + { + if (m_ptr) + intrusive_ptr_add_ref(m_ptr); + } + + /// Construct from another intrusive_ptr. + intrusive_ptr(const intrusive_ptr& r) + : m_ptr(r.get()) + { + if (m_ptr) + intrusive_ptr_add_ref(m_ptr); + } + + /// Move construct from another intrusive_ptr. + intrusive_ptr(intrusive_ptr&& r) noexcept + : m_ptr(r.get()) + { + r.m_ptr = NULL; + } + + /// Destructor + ~intrusive_ptr() + { + if (m_ptr) + intrusive_ptr_release(m_ptr); + } + + /// Assign from intrusive_ptr + intrusive_ptr& operator=(const intrusive_ptr& r) + { + intrusive_ptr(r).swap(*this); + return *this; + } + + /// Move assignment from intrusive_ptr + intrusive_ptr& operator=(intrusive_ptr&& r) noexcept + { + intrusive_ptr(static_cast(r)).swap(*this); + return *this; + } + + /// Reset to null reference + void reset() noexcept + { + if (m_ptr) { + intrusive_ptr_release(m_ptr); + m_ptr = NULL; + } + } + + /// Reset to point to a pointer + void reset(T* r) + { + if (r != m_ptr) { + if (r) + intrusive_ptr_add_ref(r); + if (m_ptr) + intrusive_ptr_release(m_ptr); + m_ptr = r; + } + } + + /// Set this smart pointer to null, decrement the object's reference + /// count, return the original raw pointer, but do NOT delete the object + /// even if the ref count goes to zero. The only safe use case is to + /// convert the sole managed pointer to an object into a raw pointer. + /// DANGER -- use with caution! This is only safe to do if no other + /// intrusive_ptr refers to the object (such a pointer may subsequently + /// reset, decrementing the count to 0, and incorrectly free the + /// object), and it can cause a memory leak if the caller isn't careful + /// to either reassign the returned pointer to another managed pointer + /// or delete it manually. + T* release() + { + T* p = m_ptr; + if (p) { + if (!p->_decref()) + OIIO_DASSERT(0 && "release() when you aren't the sole owner"); + m_ptr = nullptr; + } + return p; + } + + /// Swap intrusive pointers + void swap(intrusive_ptr& r) noexcept + { + T* tmp = m_ptr; + m_ptr = r.m_ptr; + r.m_ptr = tmp; + } + + /// Dereference + T& operator*() const + { + OIIO_DASSERT(m_ptr); + return *m_ptr; + } + + /// Dereference + T* operator->() const + { + OIIO_DASSERT(m_ptr); + return m_ptr; + } + + /// Get raw pointer + T* get() const noexcept { return m_ptr; } + + /// Cast to bool to detect whether it points to anything + operator bool() const noexcept { return m_ptr != NULL; } + + friend bool operator==(const intrusive_ptr& a, const T* b) + { + return a.get() == b; + } + friend bool operator==(const T* b, const intrusive_ptr& a) + { + return a.get() == b; + } + +private: + T* m_ptr; // the raw pointer +}; + + + +/// Mix-in class that adds a reference count, implemented as an atomic +/// counter. +class RefCnt { +protected: + // Declare RefCnt constructors and destructors protected because they + // should only be called implicitly from within child class constructors or + // destructors. In particular, this prevents users from deleting a RefCnt* + // which is important because the destructor is non-virtual. + + RefCnt() { m_refcnt = 0; } + + /// Define copy constructor to NOT COPY reference counts! Copying a + /// struct doesn't change how many other things point to it. + RefCnt(RefCnt&) { m_refcnt = 0; } + + ~RefCnt() {} + +public: + /// Add a reference + /// + void _incref() const { ++m_refcnt; } + + /// Delete a reference, return true if that was the last reference. + /// + bool _decref() const { return (--m_refcnt) == 0; } + + /// Define operator= to NOT COPY reference counts! Assigning a struct + /// doesn't change how many other things point to it. + const RefCnt& operator=(const RefCnt&) const { return *this; } + +private: + mutable atomic_int m_refcnt; +}; + + + +/// Implementation of intrusive_ptr_add_ref, which is needed for +/// any class that you use with intrusive_ptr. +template +inline void +intrusive_ptr_add_ref(T* x) +{ + x->_incref(); +} + +/// Implementation of intrusive_ptr_release, which is needed for +/// any class that you use with intrusive_ptr. +template +inline void +intrusive_ptr_release(T* x) +{ + if (x->_decref()) + delete x; +} + +// Note that intrusive_ptr_add_ref and intrusive_ptr_release MUST be a +// templated on the full type, so that they pass the right address to +// 'delete' and destroy the right type. If you try to just +// 'inline void intrusive_ptr_release (RefCnt *x)', that might seem +// clever, but it will end up getting the address of (and destroying) +// just the inherited RefCnt sub-object, not the full subclass you +// meant to delete and destroy. + + + +// Preprocessor flags for some capabilities added incrementally. +#define OIIO_REFCNT_HAS_RELEASE 1 /* intrusive_ptr::release() */ + + +/// Memory tracking. Specializes the base memory tracking functions from memory.h. + +// heapsize specialization for `intrusive_ptr` +namespace pvt { +template +inline size_t +heapsize(const intrusive_ptr& ref) +{ + return ref ? footprint(*ref.get()) : 0; +} + +// footprint specialization for `intrusive_ptr` +template +inline size_t +footprint(const intrusive_ptr& ref) +{ + return sizeof(intrusive_ptr) + heapsize(ref); +} +} // namespace pvt + + +OIIO_NAMESPACE_3_1_END diff --git a/third_party/tlRender-install-Release/include/OpenImageIO/simd.h b/third_party/tlRender-install-Release/include/OpenImageIO/simd.h new file mode 100644 index 00000000..9bb0b970 --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenImageIO/simd.h @@ -0,0 +1,10324 @@ +// Copyright Contributors to the OpenImageIO project. +// SPDX-License-Identifier: BSD-3-Clause and Apache-2.0 +// https://github.com/AcademySoftwareFoundation/OpenImageIO + +/// @file simd.h +/// +/// @brief Classes for SIMD processing. +/// +/// Nice references for all the Intel intrinsics (SSE*, AVX*, etc.): +/// https://software.intel.com/sites/landingpage/IntrinsicsGuide/ +/// +/// Similar guide for ARM intrinsics: +/// https://developer.arm.com/architectures/instruction-sets/simd-isas/neon/intrinsics +/// +/// It helped me a lot to peruse the source of these packages: +/// Syrah: https://github.com/boulos/syrah +/// Embree: https://github.com/embree +/// Vectorial: https://github.com/scoopr/vectorial +/// Anger Fog: https://github.com/vectorclass/version2 +/// +/// To find out which CPU features you have: +/// Linux: cat /proc/cpuinfo +/// OSX: sysctl machdep.cpu.features +/// +/// Additional web resources: +/// http://www.codersnotes.com/notes/maths-lib-2016/ +/// https://www.agner.org/optimize/ +/// https://www.corsix.org/content/converting-fp32-to-fp16 + +// clang-format off + +#pragma once +#define OIIO_SIMD_H 1 + +#include +#include +#include + +#ifdef OIIO_INTERNAL +# include +#endif + +#include +#include +#include + +#include + + + +////////////////////////////////////////////////////////////////////////// +// Sort out which SIMD capabilities we have and set definitions +// appropriately. This is mostly for internal (within this file) use, +// but client applications using this header may find a few of the macros +// we define to be useful: +// +// OIIO_SIMD : Will be 0 if no hardware SIMD support is specified. If SIMD +// hardware is available, this will hold the width in number of +// float SIMD "lanes" of widest SIMD registers available. For +// example, OIIO_SIMD will be 4 if vfloat4/vint4/vbool4 are +// hardware accelerated, 8 if vfloat8/vint8/vbool8 are accelerated, +// etc. Using SIMD classes wider than this should work (will be +// emulated with narrower SIMD or scalar operations), but is not +// expected to have high performance. +// OIIO_SIMD_SSE : if Intel SSE is supported, this will be nonzero, +// specifically 2 for SSE2, 3 for SSSE3, 4 for SSE4.1 or +// higher (including AVX). +// OIIO_SIMD_AVX : If Intel AVX is supported, this will be nonzero, and +// specifically 1 for AVX (1.0), 2 for AVX2, 512 for AVX512f. +// OIIO_SIMD_NEON : If ARM NEON is supported, this will be nonzero. +// OIIO_SIMD_MAX_SIZE : holds the width in bytes of the widest SIMD +// available (generally will be OIIO_SIMD*4). +// OIIO_SIMD4_ALIGN : macro for best alignment of 4-wide SIMD values in mem. +// OIIO_SIMD8_ALIGN : macro for best alignment of 8-wide SIMD values in mem. +// OIIO_SIMD16_ALIGN : macro for best alignment of 16-wide SIMD values in mem. +// OIIO_SIMD_HAS_MATRIX4 : nonzero if matrix44 is defined +// OIIO_SIMD_HAS_SIMD8 : nonzero if vfloat8, vint8, vbool8 are defined +// OIIO_SIMD_HAS_SIMD16 : nonzero if vfloat16, vint16, vbool16 are defined + +#ifdef OIIO_NO_SIMD /* Request to disable all SIMD */ +# define OIIO_NO_SSE 1 +# define OIIO_NO_AVX 1 +# define OIIO_NO_AVX2 1 +# define OIIO_NO_NEON 1 +#endif + +#if defined(_M_ARM64) || defined(__aarch64__) || defined(__aarch64) +# ifndef __ARM_NEON__ +# define __ARM_NEON__ +# endif +#endif + +// Disable Intel SIMD intrinsics on non-Intel architectures (including +// building for Cuda on an Intel host). +#if defined(_M_ARM64) || defined(__aarch64) || defined(__aarch64__) \ + || defined(__CUDA_ARCH__) +# ifndef OIIO_NO_SSE +# define OIIO_NO_SSE 1 +# endif +# ifndef OIIO_NO_AVX +# define OIIO_NO_AVX 1 +# endif +# ifndef OIIO_NO_AVX2 +# define OIIO_NO_AVX2 1 +# endif +#endif + +#if !(defined(_M_ARM64) || defined(__aarch64) || defined(__aarch64__)) || defined(__CUDA_ARCH__) +# ifndef OIIO_NO_NEON +# define OIIO_NO_NEON 1 +# endif +#endif + +#if defined(__CUDA_ARCH__) + // Cuda -- don't include any of these headers +#elif defined(_WIN32) +# include +// MSVC's intrin.h includes arm_neon.h, clang (and by extension clang-cl) +// has a version without this inclusion, so we need to manually add it +# if defined(__ARM_NEON__) && !defined(OIIO_NO_NEON) +# include +# endif +#elif defined(__GNUC__) && (defined(__x86_64__) || defined(__i386__)) || defined(__e2k__) +# include +#elif defined(__GNUC__) && defined(__ARM_NEON__) && !defined(OIIO_NO_NEON) +# include +#endif + +// Disable SSE for 32 bit Windows platforms, it's unreliable and hard for us +// to test thoroughly. We presume that anybody needing high performance +// badly enough to want SIMD also is on a 64 bit CPU. +#if defined(_WIN32) && defined(__i386__) && !defined(__x86_64__) && !defined(OIIO_NO_SSE) +#define OIIO_NO_SSE 1 +#endif + +#if (defined(__SSE2__) || (_MSC_VER >= 1300 && !_M_CEE_PURE)) && !defined(OIIO_NO_SSE) +# if (defined(__SSE4_1__) || defined(__SSE4_2__)) +# define OIIO_SIMD_SSE 4 + /* N.B. We consider both SSE4.1 and SSE4.2 to be "4". There are a few + * instructions specific to 4.2, but they are all related to string + * comparisons and CRCs, which don't currently seem relevant to OIIO, + * so for simplicity, we sweep this difference under the rug. + */ +# elif defined(__SSSE3__) +# define OIIO_SIMD_SSE 3 + /* N.B. We only use OIIO_SIMD_SSE = 3 when fully at SSSE3. In theory, + * there are a few older architectures that are SSE3 but not SSSE3, + * and this simplification means that these particular old platforms + * will only get SSE2 goodness out of our code. So be it. Anybody who + * cares about performance is probably using a 64 bit machine that's + * SSE 4.x or AVX by now. + */ +# else +# define OIIO_SIMD_SSE 2 +# endif +# define OIIO_SIMD 4 +# define OIIO_SIMD_MAX_SIZE_BYTES 16 +# define OIIO_SIMD4_ALIGN OIIO_ALIGN(16) +# define OIIO_SSE_ALIGN OIIO_ALIGN(16) +#else +# define OIIO_SIMD_SSE 0 +#endif + +#if defined(__AVX__) && !defined(OIIO_NO_AVX) + // N.B. Any machine with AVX will also have SSE +# if defined(__AVX2__) && !defined(OIIO_NO_AVX2) +# define OIIO_SIMD_AVX 2 +# else +# define OIIO_SIMD_AVX 1 +# endif +# undef OIIO_SIMD +# define OIIO_SIMD 8 +# undef OIIO_SIMD_MAX_SIZE_BYTES +# define OIIO_SIMD_MAX_SIZE_BYTES 32 +# define OIIO_SIMD8_ALIGN OIIO_ALIGN(32) +# define OIIO_AVX_ALIGN OIIO_ALIGN(32) +# if defined(__AVX512F__) +# undef OIIO_SIMD_AVX +# define OIIO_SIMD_AVX 512 +# undef OIIO_SIMD_MAX_SIZE_BYTES +# define OIIO_SIMD_MAX_SIZE_BYTES 64 +# undef OIIO_SIMD +# define OIIO_SIMD 16 +# define OIIO_SIMD16_ALIGN OIIO_ALIGN(64) +# define OIIO_AVX512_ALIGN OIIO_ALIGN(64) +# define OIIO_AVX512F_ENABLED 1 +# endif +# if defined(__AVX512DQ__) +# define OIIO_AVX512DQ_ENABLED 1 /* Doubleword and quadword */ +# else +# define OIIO_AVX512DQ_ENABLED 0 +# endif +# if defined(__AVX512PF__) +# define OIIO_AVX512PF_ENABLED 1 /* Prefetch */ +# else +# define OIIO_AVX512PF_ENABLED 0 +# endif +# if defined(__AVX512CD__) +# define OIIO_AVX512CD_ENABLED 1 /* Conflict detection */ +# else +# define OIIO_AVX512CD_ENABLED 0 +# endif +# if defined(__AVX512BW__) +# define OIIO_AVX512BW_ENABLED 1 /* Byte and word */ +# else +# define OIIO_AVX512BW_ENABLED 0 +# endif +# if defined(__AVX512VL__) +# define OIIO_AVX512VL_ENABLED 1 /* Vector length extensions */ +# else +# define OIIO_AVX512VL_ENABLED 0 +# endif +#else +# define OIIO_SIMD_AVX 0 +# define OIIO_AVX512VL_ENABLED 0 +# define OIIO_AVX512DQ_ENABLED 0 +# define OIIO_AVX512PF_ENABLED 0 +# define OIIO_AVX512CD_ENABLED 0 +# define OIIO_AVX512BW_ENABLED 0 +#endif +#define OIIO_AVX512ER_ENABLED 0 /* DEPRECATED(3.1) */ + +#if defined(__FMA__) +# define OIIO_FMA_ENABLED 1 +#else +# define OIIO_FMA_ENABLED 0 +#endif +#if defined(__AVX512IFMA__) +# define OIIO_AVX512IFMA_ENABLED 1 +#else +# define OIIO_AVX512IFMA_ENABLED 0 +#endif + +#if defined(__F16C__) +# define OIIO_F16C_ENABLED 1 +#else +# define OIIO_F16C_ENABLED 0 +#endif + +#if defined(__ARM_NEON__) && !defined(OIIO_NO_NEON) +# define OIIO_SIMD 4 +# define OIIO_SIMD_NEON 1 +# define OIIO_SIMD_MAX_SIZE_BYTES 16 +# define OIIO_SIMD4_ALIGN OIIO_ALIGN(16) +# define OIIO_SSE_ALIGN OIIO_ALIGN(16) +#else +# define OIIO_SIMD_NEON 0 +#endif + +#ifndef OIIO_SIMD + // No SIMD available +# define OIIO_SIMD 0 +# define OIIO_SIMD4_ALIGN +# define OIIO_SIMD_MAX_SIZE_BYTES 16 +#endif + +#ifndef OIIO_SIMD8_ALIGN +# define OIIO_SIMD8_ALIGN OIIO_SIMD4_ALIGN +#endif +#ifndef OIIO_SIMD16_ALIGN +# define OIIO_SIMD16_ALIGN OIIO_SIMD8_ALIGN +#endif + + +// General features that client apps may want to test for, for conditional +// compilation. Will add to this over time as needed. Note that just +// because a feature is present doesn't mean it's fast -- HAS_SIMD8 means +// the vfloat8 class (and friends) are in this version of simd.h, but that's +// different from OIIO_SIMD >= 8, which means it's supported in hardware. +#define OIIO_SIMD_HAS_MATRIX4 1 /* matrix44 defined */ +#define OIIO_SIMD_HAS_SIMD8 1 /* vfloat8, vint8, vbool8 defined */ +#define OIIO_SIMD_HAS_SIMD16 1 /* vfloat16, vint16, vbool16 defined */ + + +// Embarrassing hack: Xlib.h #define's True and False! +#ifdef True +# undef True +#endif +#ifdef False +# undef False +#endif + + +OIIO_NAMESPACE_3_1_BEGIN + +namespace simd { + +////////////////////////////////////////////////////////////////////////// +// Forward declarations of our main SIMD classes + +class vbool4; +class vint4; +class vfloat4; +class vfloat3; +class matrix44; +class vbool8; +class vint8; +class vfloat8; +class vbool16; +class vint16; +class vfloat16; + +} // namespace simd + + +// Force has_subscript_N to understand that our simd::vfloat3 counts as a +// 3-vector, even though its padding to 4 values makes it look the wrong size. +template<> struct has_subscript_N : public std::true_type { }; + + + +namespace simd { + +////////////////////////////////////////////////////////////////////////// +// Template magic to determine the raw SIMD types involved, and other +// things helpful for metaprogramming. + +template struct simd_raw_t { struct type { T val[N]; }; }; +template struct simd_bool_t { struct type { int val[N]; }; }; + +#if OIIO_SIMD_SSE +template<> struct simd_raw_t { typedef __m128i type; }; +template<> struct simd_raw_t { typedef __m128 type; }; +template<> struct simd_bool_t<4> { typedef __m128 type; }; +#endif + +#if OIIO_SIMD_AVX +template<> struct simd_raw_t { typedef __m256i type; }; +template<> struct simd_raw_t { typedef __m256 type; }; +template<> struct simd_bool_t<8> { typedef __m256 type; }; +#endif + +#if OIIO_SIMD_AVX >= 512 +template<> struct simd_raw_t { typedef __m512i type; }; +template<> struct simd_raw_t { typedef __m512 type; }; +template<> struct simd_bool_t<16> { typedef __mmask16 type; }; +#else +// Note: change in strategy for 16-wide SIMD: instead of int[16] for +// vbool16, it's just a plain old bitmask, and __mask16 for actual HW. +template<> struct simd_bool_t<16> { typedef uint16_t type; }; +#endif + +#if OIIO_SIMD_NEON +template<> struct simd_raw_t { typedef int32x4_t type; }; +template<> struct simd_raw_t { typedef float32x4_t type; }; +template<> struct simd_bool_t<4> { typedef uint32x4_t type; }; +#endif + + +/// Template to retrieve the vector type from the scalar. For example, +/// simd::VecType will be vfloat4. +template struct VecType {}; +template<> struct VecType { typedef int type; }; +template<> struct VecType { typedef float type; }; +template<> struct VecType { typedef vint4 type; }; +template<> struct VecType { typedef vfloat4 type; }; +template<> struct VecType { typedef vfloat3 type; }; +template<> struct VecType { typedef vbool4 type; }; +template<> struct VecType { typedef vint8 type; }; +template<> struct VecType { typedef vfloat8 type; }; +template<> struct VecType { typedef vbool8 type; }; +template<> struct VecType { typedef vint16 type; }; +template<> struct VecType { typedef vfloat16 type; }; +template<> struct VecType { typedef vbool16 type; }; + +/// Template to retrieve the SIMD size of a SIMD type. Rigged to be 1 for +/// anything but our SIMD types. +template struct SimdSize { static const int size = 1; }; +template<> struct SimdSize { static const int size = 4; }; +template<> struct SimdSize { static const int size = 4; }; +template<> struct SimdSize { static const int size = 4; }; +template<> struct SimdSize { static const int size = 4; }; +template<> struct SimdSize { static const int size = 8; }; +template<> struct SimdSize { static const int size = 8; }; +template<> struct SimdSize { static const int size = 8; }; +template<> struct SimdSize { static const int size = 16; }; +template<> struct SimdSize { static const int size = 16; }; +template<> struct SimdSize { static const int size = 16; }; + +/// Template to retrieve the number of elements size of a SIMD type. Rigged +/// to be 1 for anything but our SIMD types. +template struct SimdElements { static const int size = SimdSize::size; }; +template<> struct SimdElements { static const int size = 3; }; + +/// Template giving a printable name for each type +template struct SimdTypeName { static const char *name() { return "unknown"; } }; +template<> struct SimdTypeName { static const char *name() { return "vfloat4"; } }; +template<> struct SimdTypeName { static const char *name() { return "vint4"; } }; +template<> struct SimdTypeName { static const char *name() { return "vbool4"; } }; +template<> struct SimdTypeName { static const char *name() { return "vfloat8"; } }; +template<> struct SimdTypeName { static const char *name() { return "vint8"; } }; +template<> struct SimdTypeName { static const char *name() { return "vbool8"; } }; +template<> struct SimdTypeName { static const char *name() { return "vfloat16"; } }; +template<> struct SimdTypeName { static const char *name() { return "vint16"; } }; +template<> struct SimdTypeName { static const char *name() { return "vbool16"; } }; + +/// Is a type T one of our SIMD-based types? +template struct is_simd : std::false_type {}; +template<> struct is_simd : std::true_type {}; +template<> struct is_simd : std::true_type {}; +template<> struct is_simd : std::true_type {}; +template<> struct is_simd : std::true_type {}; +template<> struct is_simd : std::true_type {}; +template<> struct is_simd : std::true_type {}; +template<> struct is_simd : std::true_type {}; +template<> struct is_simd : std::true_type {}; +template<> struct is_simd : std::true_type {}; +template<> struct is_simd : std::true_type {}; +template<> struct is_simd : std::true_type {}; + + +////////////////////////////////////////////////////////////////////////// +// Macros helpful for making static constants in code. + +# define OIIO_SIMD_FLOAT4_CONST(name,val) \ + static const OIIO_SIMD4_ALIGN float name[4] = { (val), (val), (val), (val) } +# define OIIO_SIMD_FLOAT4_CONST4(name,v0,v1,v2,v3) \ + static const OIIO_SIMD4_ALIGN float name[4] = { (v0), (v1), (v2), (v3) } +# define OIIO_SIMD_INT4_CONST(name,val) \ + static const OIIO_SIMD4_ALIGN int name[4] = { (val), (val), (val), (val) } +# define OIIO_SIMD_INT4_CONST4(name,v0,v1,v2,v3) \ + static const OIIO_SIMD4_ALIGN int name[4] = { (v0), (v1), (v2), (v3) } +# define OIIO_SIMD_UINT4_CONST(name,val) \ + static const OIIO_SIMD4_ALIGN uint32_t name[4] = { (val), (val), (val), (val) } +# define OIIO_SIMD_UINT4_CONST4(name,v0,v1,v2,v3) \ + static const OIIO_SIMD4_ALIGN uint32_t name[4] = { (v0), (v1), (v2), (v3) } + +# define OIIO_SIMD_FLOAT8_CONST(name,val) \ + static const OIIO_SIMD8_ALIGN float name[8] = { (val), (val), (val), (val), \ + (val), (val), (val), (val) } +# define OIIO_SIMD_FLOAT8_CONST8(name,v0,v1,v2,v3,v4,v5,v6,v7) \ + static const OIIO_SIMD8_ALIGN float name[8] = { (v0), (v1), (v2), (v3), \ + (v4), (v5), (v6), (v7) } +# define OIIO_SIMD_INT8_CONST(name,val) \ + static const OIIO_SIMD8_ALIGN int name[8] = { (val), (val), (val), (val), \ + (val), (val), (val), (val) } +# define OIIO_SIMD_INT8_CONST8(name,v0,v1,v2,v3,v4,v5,v6,v7) \ + static const OIIO_SIMD8_ALIGN int name[8] = { (v0), (v1), (v2), (v3), \ + (v4), (v5), (v6), (v7) } +# define OIIO_SIMD_UINT8_CONST(name,val) \ + static const OIIO_SIMD8_ALIGN uint32_t name[8] = { (val), (val), (val), (val), \ + (val), (val), (val), (val) } +# define OIIO_SIMD_UINT8_CONST8(name,v0,v1,v2,v3,v4,v5,v6,v7) \ + static const OIIO_SIMD8_ALIGN uint32_t name[8] = { (v0), (v1), (v2), (v3), \ + (v4), (v5), (v6), (v7) } + +# define OIIO_SIMD_VFLOAT16_CONST(name,val) \ + static const OIIO_SIMD16_ALIGN float name[16] = { \ + (val), (val), (val), (val), (val), (val), (val), (val), \ + (val), (val), (val), (val), (val), (val), (val), (val) } +# define OIIO_SIMD_VFLOAT16_CONST16(name,v0,v1,v2,v3,v4,v5,v6,v7,v8,v9,v10,v11,v12,v13,v14,v15) \ + static const OIIO_SIMD16_ALIGN float name[16] = { \ + (v0), (v1), (v2), (v3), (v4), (v5), (v6), (v7), \ + (v8), (v9), (v10), (v11), (v12), (v13), (v14), (v15) } +# define OIIO_SIMD_INT16_CONST(name,val) \ + static const OIIO_SIMD16_ALIGN int name[16] = { \ + (val), (val), (val), (val), (val), (val), (val), (val), \ + (val), (val), (val), (val), (val), (val), (val), (val) } +# define OIIO_SIMD_INT16_CONST16(name,v0,v1,v2,v3,v4,v5,v6,v7,v8,v9,v10,v11,v12,v13,v14,v15) \ + static const OIIO_SIMD16_ALIGN int name[16] = { \ + (v0), (v1), (v2), (v3), (v4), (v5), (v6), (v7), \ + (v8), (v9), (v10), (v11), (v12), (v13), (v14), (v15) } +# define OIIO_SIMD_UINT16_CONST(name,val) \ + static const OIIO_SIMD16_ALIGN uint32_t name[16] = { \ + (val), (val), (val), (val), (val), (val), (val), (val), \ + (val), (val), (val), (val), (val), (val), (val), (val) } +# define OIIO_SIMD_UINT16_CONST16(name,v0,v1,v2,v3,v4,v5,v6,v7,v8,v9,v10,v11,v12,v13,v14,v15) \ + static const OIIO_SIMD16_ALIGN uint32_t name[16] = { \ + (val), (val), (val), (val), (val), (val), (val), (val), \ + (val), (val), (val), (val), (val), (val), (val), (val) } + + +////////////////////////////////////////////////////////////////////////// +// Some macros just for use in this file (#undef-ed at the end) making +// it more succinct to express per-element operations. + +#define SIMD_DO(x) for (int i = 0; i < elements; ++i) x +#define SIMD_CONSTRUCT(x) for (int i = 0; i < elements; ++i) m_val[i] = (x) +#define SIMD_CONSTRUCT_PAD(x) for (int i = 0; i < elements; ++i) m_val[i] = (x); \ + for (int i = elements; i < paddedelements; ++i) m_val[i] = 0 +#define SIMD_RETURN(T,x) T r; for (int i = 0; i < r.elements; ++i) r[i] = (x); return r +#define SIMD_RETURN_REDUCE(T,init,op) T r = init; for (int i = 0; i < v.elements; ++i) op; return r + + + +////////////////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////// +// The public declarations of the main SIMD classes follow: boolN, intN, +// floatN, matrix44. +// +// These class declarations are intended to be brief and self-documenting, +// and give all the information that users or client applications need to +// know to use these classes. +// +// No implementations are given inline except for the briefest, completely +// generic methods that don't have any architecture-specific overloads. +// After the class definitions, there will be an immense pile of full +// implementation definitions, which casual users are not expected to +// understand. +////////////////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////// + + +/// vbool4: An 4-vector whose elements act mostly like bools, accelerated by +/// SIMD instructions when available. This is what is naturally produced by +/// SIMD comparison operators on the vfloat4 and vint4 types. +class vbool4 { +public: + static const char* type_name() { return "vbool4"; } + typedef bool value_t; ///< Underlying equivalent scalar value type + enum { elements = 4 }; ///< Number of scalar elements + enum { paddedelements = 4 }; ///< Number of scalar elements for full pad + enum { bits = elements*32 }; ///< Total number of bits + typedef simd_bool_t<4>::type simd_t; ///< the native SIMD type used + static constexpr size_t size() noexcept { return elements; } + + /// Default constructor (contents undefined) + vbool4() = default; + + /// Construct from a single value (store it in all slots) + vbool4 (bool a) { load(a); } + + explicit vbool4 (const bool *a); + + /// Construct from 4 bool values + vbool4 (bool a, bool b, bool c, bool d) { load (a, b, c, d); } + + /// Copy construct from another vbool4 + vbool4(const vbool4 &other) = default; + + /// Construct from 4 int values + vbool4 (int a, int b, int c, int d) { + load (bool(a), bool(b), bool(c), bool(d)); + } + + /// Construct from a SIMD int (is each element nonzero?) + vbool4 (const vint4 &i); + + /// Construct from the underlying SIMD type + vbool4 (const simd_t& m) : m_simd(m) { } + + /// Return the raw SIMD type + operator simd_t () const { return m_simd; } + simd_t simd () const { return m_simd; } + simd_t& simd () { return m_simd; } + + /// Extract the bitmask + int bitmask () const; + + /// Convert from integer bitmask to a true vbool4 + static vbool4 from_bitmask (int bitmask); + + /// Set all components to false + void clear (); + + /// Return a vbool4 the is 'false' for all values + static const vbool4 False (); + + /// Return a vbool4 the is 'true' for all values + static const vbool4 True (); + + /// Assign one value to all components + vbool4& operator=(bool a) { load(a); return *this; } + + /// Assignment of another vbool4 + vbool4& operator=(const vbool4& other) = default; + + /// Component access (get) + int operator[] (int i) const; + + /// Component access (set). + void setcomp (int i, bool value); + + /// Component access (set). + /// NOTE: avoid this unsafe construct. It will go away some day. + int& operator[] (int i); + + /// Helper: load a single value into all components. + void load (bool a); + + /// Helper: load separate values into each component. + void load (bool a, bool b, bool c, bool d); + + /// Helper: store the values into memory as bools. + void store (bool *values) const; + + /// Store the first n values into memory. + void store (bool *values, int n) const; + + /// Logical/bitwise operators, component-by-component + friend vbool4 operator! (const vbool4& a); + friend vbool4 operator& (const vbool4& a, const vbool4& b); + friend vbool4 operator| (const vbool4& a, const vbool4& b); + friend vbool4 operator^ (const vbool4& a, const vbool4& b); + friend vbool4 operator~ (const vbool4& a); + friend const vbool4& operator&= (vbool4& a, const vbool4& b); + friend const vbool4& operator|= (vbool4& a, const vbool4& b); + friend const vbool4& operator^= (vbool4& a, const vbool4& b); + + /// Comparison operators, component by component + friend vbool4 operator== (const vbool4& a, const vbool4& b); + friend vbool4 operator!= (const vbool4& a, const vbool4& b); + + /// Stream output + friend std::ostream& operator<< (std::ostream& cout, const vbool4 & a); + +private: + // The actual data representation + union { + simd_t m_simd; + int m_val[paddedelements]; + }; +}; + + + +/// Helper: shuffle/swizzle with constant (templated) indices. +/// Example: shuffle<1,1,2,2>(vbool4(a,b,c,d)) returns (b,b,c,c) +template +OIIO_FORCEINLINE vbool4 shuffle (const vbool4& a); + +/// broadcast_element(a) returns a simd variable in which all lanes have +/// value a[i]. +template OIIO_FORCEINLINE vbool4 broadcast_element(const vbool4& a); + +/// Helper: as rapid as possible extraction of one component, when the +/// index is fixed. +template OIIO_FORCEINLINE bool extract (const vbool4& a); + +/// Helper: substitute val for a[i] +template OIIO_FORCEINLINE vbool4 insert (const vbool4& a, bool val); + +/// Logical reduction across all components. +bool reduce_and (const vbool4& v); +bool reduce_or (const vbool4& v); + +// Are all/any/no components true? +bool all (const vbool4& v); +bool any (const vbool4& v); +bool none (const vbool4& v); + +// It's handy to have this defined for regular bool as well +inline bool all (bool v) { return v; } + + + +/// vbool8: An 8-vector whose elements act mostly like bools, accelerated by +/// SIMD instructions when available. This is what is naturally produced by +/// SIMD comparison operators on the vfloat8 and vint8 types. +class vbool8 { +public: + static const char* type_name() { return "vbool8"; } + typedef bool value_t; ///< Underlying equivalent scalar value type + enum { elements = 8 }; ///< Number of scalar elements + enum { paddedelements = 8 }; ///< Number of scalar elements for full pad + enum { bits = elements*32 }; ///< Total number of bits + typedef simd_bool_t<8>::type simd_t; ///< the native SIMD type used + static constexpr size_t size() noexcept { return elements; } + + /// Default constructor (contents undefined) + vbool8() = default; + + /// Construct from a single value (store it in all slots) + vbool8 (bool a) { load (a); } + + explicit vbool8 (const bool *values); + + /// Construct from 8 bool values + vbool8 (bool a, bool b, bool c, bool d, bool e, bool f, bool g, bool h); + + /// Copy construct from another vbool8 + vbool8(const vbool8 &other) = default; + + /// Construct from 8 int values + vbool8 (int a, int b, int c, int d, int e, int f, int g, int h); + + /// Construct from a SIMD int (is each element nonzero?) + vbool8 (const vint8 &i); + + /// Construct from two vbool4's + vbool8 (const vbool4 &lo, const vbool4 &hi); + + /// Construct from the underlying SIMD type + vbool8 (const simd_t& m) : m_simd(m) { } + + /// Return the raw SIMD type + operator simd_t () const { return m_simd; } + simd_t simd () const { return m_simd; } + simd_t& simd () { return m_simd; } + + /// Extract the bitmask + int bitmask () const; + + /// Convert from integer bitmask to a true vbool8 + static vbool8 from_bitmask (int bitmask); + + /// Set all components to false + void clear (); + + /// Return a vbool8 the is 'false' for all values + static const vbool8 False (); + + /// Return a vbool8 the is 'true' for all values + static const vbool8 True (); + + /// Assign one value to all components + vbool8& operator=(bool a) { load(a); return *this; } + + /// Assignment of another vbool8 + vbool8& operator=(const vbool8& other) = default; + + /// Component access (get) + int operator[] (int i) const; + + /// Component access (set). + void setcomp (int i, bool value); + + /// Component access (set). + /// NOTE: avoid this unsafe construct. It will go away some day. + int& operator[] (int i); + + /// Extract the lower precision vbool4 + vbool4 lo () const; + + /// Extract the higher precision vbool4 + vbool4 hi () const; + + /// Helper: load a single value into all components. + void load (bool a); + + /// Helper: load separate values into each component. + void load (bool a, bool b, bool c, bool d, + bool e, bool f, bool g, bool h); + + /// Helper: store the values into memory as bools. + void store (bool *values) const; + + /// Store the first n values into memory. + void store (bool *values, int n) const; + + /// Logical/bitwise operators, component-by-component + friend vbool8 operator! (const vbool8& a); + friend vbool8 operator& (const vbool8& a, const vbool8& b); + friend vbool8 operator| (const vbool8& a, const vbool8& b); + friend vbool8 operator^ (const vbool8& a, const vbool8& b); + friend vbool8 operator~ (const vbool8& a); + friend const vbool8& operator&= (vbool8& a, const vbool8& b); + friend const vbool8& operator|= (vbool8& a, const vbool8& b); + friend const vbool8& operator^= (vbool8& a, const vbool8& b); + + /// Comparison operators, component by component + friend vbool8 operator== (const vbool8& a, const vbool8& b); + friend vbool8 operator!= (const vbool8& a, const vbool8& b); + + /// Stream output + friend std::ostream& operator<< (std::ostream& cout, const vbool8 & a); + +private: + // The actual data representation + union { + simd_t m_simd; + int m_val[paddedelements]; + vbool4 m_4[2]; + }; +}; + + + +/// Helper: shuffle/swizzle with constant (templated) indices. +/// Example: shuffle<1,1,2,2>(vbool4(a,b,c,d)) returns (b,b,c,c) +template +OIIO_FORCEINLINE vbool8 shuffle (const vbool8& a); + +/// broadcast_element(a) returns a simd variable in which all lanes have +/// value a[i]. +template OIIO_FORCEINLINE vbool8 broadcast_element(const vbool8& a); + +/// Helper: as rapid as possible extraction of one component, when the +/// index is fixed. +template OIIO_FORCEINLINE bool extract (const vbool8& a); + +/// Helper: substitute val for a[i] +template OIIO_FORCEINLINE vbool8 insert (const vbool8& a, bool val); + +/// Logical reduction across all components. +bool reduce_and (const vbool8& v); +bool reduce_or (const vbool8& v); + +// Are all/any/no components true? +bool all (const vbool8& v); +bool any (const vbool8& v); +bool none (const vbool8& v); + + + + +/// vbool16: An 16-vector whose elements act mostly like bools, accelerated +/// by SIMD instructions when available. This is what is naturally produced +/// by SIMD comparison operators on the vfloat16 and vint16 types. +class vbool16 { +public: + static const char* type_name() { return "vbool16"; } + typedef bool value_t; ///< Underlying equivalent scalar value type + enum { elements = 16 }; ///< Number of scalar elements + enum { paddedelements = 16 }; ///< Number of scalar elements for full pad + enum { bits = 16 }; ///< Total number of bits + typedef simd_bool_t<16>::type simd_t; ///< the native SIMD type used + static constexpr size_t size() noexcept { return elements; } + + /// Default constructor (contents undefined) + vbool16() = default; + + /// Construct from a single value (store it in all slots) + vbool16 (bool a) { load (a); } + + explicit vbool16 (int bitmask) { load_bitmask (bitmask); } + + explicit vbool16 (const bool *values); + + /// Construct from 16 bool values + vbool16 (bool v0, bool v1, bool v2, bool v3, bool v4, bool v5, bool v6, bool v7, + bool v8, bool v9, bool v10, bool v11, bool v12, bool v13, bool v14, bool v15); + + /// Copy construct from another vbool16 + vbool16(const vbool16 &other) = default; + + /// Construct from 16 int values + vbool16 (int v0, int v1, int v2, int v3, int v4, int v5, int v6, int v7, + int v8, int v9, int v10, int v11, int v12, int v13, int v14, int v15); + + /// Construct from a SIMD int (is each element nonzero?) + vbool16 (const vint16 &i); + + /// Construct from two vbool8's + vbool16 (const vbool8 &lo, const vbool8 &hi); + + /// Construct from four vbool4's + vbool16 (const vbool4 &b4a, const vbool4 &b4b, const vbool4 &b4c, const vbool4 &b4d); + + /// Construct from the underlying SIMD type + vbool16 (const simd_t& m) : m_simd(m) { } + + /// Return the raw SIMD type + operator simd_t () const { return m_simd; } + simd_t simd () const { return m_simd; } + simd_t& simd () { return m_simd; } + + int bitmask () const; + + /// Convert from integer bitmask to a true vbool16 + static vbool16 from_bitmask (int bitmask) { return vbool16(bitmask); } + + /// Set all components to false + void clear (); + + /// Return a vbool16 the is 'false' for all values + static const vbool16 False (); + + /// Return a vbool16 the is 'true' for all values + static const vbool16 True (); + + /// Assign one value to all components + vbool16& operator=(bool a) { load(a); return *this; } + + /// Assignment of another vbool16 + vbool16& operator=(const vbool16& other) = default; + + /// Component access (get) + int operator[] (int i) const; + + /// Component access (set). + void setcomp (int i, bool value); + + /// Extract the lower precision vbool8 + vbool8 lo () const; + + /// Extract the higher precision vbool8 + vbool8 hi () const; + + /// Helper: load a single value into all components. + void load (bool a); + + /// Helper: load separate values into each component. + void load (bool v0, bool v1, bool v2, bool v3, bool v4, bool v5, bool v6, bool v7, + bool v8, bool v9, bool v10, bool v11, bool v12, bool v13, bool v14, bool v15); + + /// Helper: load all components from a bitmask in an int. + void load_bitmask (int a); + + /// Helper: store the values into memory as bools. + void store (bool *values) const; + + /// Store the first n values into memory. + void store (bool *values, int n) const; + + /// Logical/bitwise operators, component-by-component + friend vbool4 operator! (const vbool4& a); + friend vbool16 operator! (const vbool16& a); + friend vbool16 operator& (const vbool16& a, const vbool16& b); + friend vbool16 operator| (const vbool16& a, const vbool16& b); + friend vbool16 operator^ (const vbool16& a, const vbool16& b); + friend vbool16 operator~ (const vbool16& a); + friend const vbool16& operator&= (vbool16& a, const vbool16& b); + friend const vbool16& operator|= (vbool16& a, const vbool16& b); + friend const vbool16& operator^= (vbool16& a, const vbool16& b); + + /// Comparison operators, component by component + friend vbool16 operator== (const vbool16& a, const vbool16& b); + friend vbool16 operator!= (const vbool16& a, const vbool16& b); + + /// Stream output + friend std::ostream& operator<< (std::ostream& cout, const vbool16 & a); + +private: + // The actual data representation + simd_t m_simd; +}; + + + +/// Helper: as rapid as possible extraction of one component, when the +/// index is fixed. +template OIIO_FORCEINLINE bool extract (const vbool16& a); + +/// Helper: substitute val for a[i] +template OIIO_FORCEINLINE vbool16 insert (const vbool16& a, bool val); + +/// Logical reduction across all components. +bool reduce_and (const vbool16& v); +bool reduce_or (const vbool16& v); + +// Are all/any/no components true? +bool all (const vbool16& v); +bool any (const vbool16& v); +bool none (const vbool16& v); + + + + + +/// Integer 4-vector, accelerated by SIMD instructions when available. +class vint4 { +public: + static const char* type_name() { return "vint4"; } + typedef int value_t; ///< Underlying equivalent scalar value type + enum { elements = 4 }; ///< Number of scalar elements + enum { paddedelements =4 }; ///< Number of scalar elements for full pad + enum { bits = 128 }; ///< Total number of bits + typedef simd_raw_t::type simd_t; ///< the native SIMD type used + typedef vbool4 vbool_t; ///< bool type of the same length + typedef vfloat4 vfloat_t; ///< float type of the same length + typedef vint4 vint_t; ///< int type of the same length + static constexpr size_t size() noexcept { return elements; } + + /// Default constructor (contents undefined) + vint4() = default; + + /// Construct from a single value (store it in all slots) + vint4 (int a); + + /// Construct from 2 values -- (a,a,b,b) + vint4 (int a, int b); + + /// Construct from 4 values + vint4 (int a, int b, int c, int d); + + /// Construct from a pointer to values + vint4 (const int *vals); + + /// Construct from a pointer to unsigned short values + explicit vint4 (const unsigned short *vals); + + /// Construct from a pointer to signed short values + explicit vint4 (const short *vals); + + /// Construct from a pointer to unsigned char values (0 - 255) + explicit vint4 (const unsigned char *vals); + + /// Construct from a pointer to signed char values (-128 - 127) + explicit vint4 (const char *vals); + + /// Copy construct from another vint4 + vint4(const vint4& other) = default; + + /// Convert a vfloat to an vint. Equivalent to i = (int)f; + explicit vint4 (const vfloat4& f); // implementation below + + /// Construct from the underlying SIMD type + vint4 (const simd_t& m) : m_simd(m) { } + + /// Return the raw SIMD type + operator simd_t () const { return m_simd; } + simd_t simd () const { return m_simd; } + simd_t& simd () { return m_simd; } + + /// Return a pointer to the underlying scalar type + const value_t* data () const { return (const value_t*)this; } + value_t* data () { return (value_t*)this; } + + /// Sset all components to 0 + void clear () ; + + /// Return an vint4 with all components set to 0 + static const vint4 Zero (); + + /// Return an vint4 with all components set to 1 + static const vint4 One (); + + /// Return an vint4 with all components set to -1 (aka 0xffffffff) + static const vint4 NegOne (); + + /// Return an vint4 with incremented components (e.g., 0,1,2,3). + /// Optional arguments can give a non-zero starting point and step size. + static const vint4 Iota (int start=0, int step=1); + + /// Return an vint4 with "geometric" iota: (1, 2, 4, 8). + static const vint4 Giota (); + + /// Assign one value to all components. + vint4& operator=(int a) { load(a); return *this; } + + /// Assignment from another vint4 +#if !defined(__INTEL_COMPILER) + vint4& operator=(const vint4& other) = default; +#else + // For explanation of the necessity of this, see implementation comment. + vint4& operator=(const vint4& other); +#endif + + /// Component access (get) + int operator[] (int i) const; + + /// Component access (set) + int& operator[] (int i); + + /// Component access (set). + void setcomp (int i, int value); + + value_t x () const; + value_t y () const; + value_t z () const; + value_t w () const; + void set_x (value_t val); + void set_y (value_t val); + void set_z (value_t val); + void set_w (value_t val); + + /// Helper: load a single int into all components + void load (int a); + + /// Helper: load separate values into each component. + void load (int a, int b, int c, int d); + + /// Load from an array of 4 values + void load (const int *values); + + void load (const int *values, int n) ; + + /// Load from an array of 4 unsigned short values, convert to vint4 + void load (const unsigned short *values) ; + + /// Load from an array of 4 unsigned short values, convert to vint4 + void load (const short *values); + + /// Load from an array of 4 unsigned char values, convert to vint4 + void load (const unsigned char *values); + + /// Load from an array of 4 unsigned char values, convert to vint4 + void load (const char *values); + + /// Store the values into memory + void store (int *values) const; + + /// Store the first n values into memory + void store (int *values, int n) const; + + /// Store the least significant 16 bits of each element into adjacent + /// unsigned shorts. + void store (unsigned short *values) const; + + /// Store the least significant 8 bits of each element into adjacent + /// unsigned chars. + void store (unsigned char *values) const; + + /// Masked load -- read from values[] where mask is 1, load zero where + /// mask is 0. + void load_mask (int mask, const value_t *values); + void load_mask (const vbool_t& mask, const value_t *values); + + /// Masked store -- write to values[] where mask is enabled, don't + /// touch values[] where it's not. + void store_mask (int mask, value_t *values) const; + void store_mask (const vbool_t& mask, value_t *values) const; + + /// Load values from addresses (char*)basepatr + vindex[i]*scale + template + void gather (const value_t *baseptr, const vint_t& vindex); + /// Gather elements defined by the mask, leave others unchanged. + template + void gather_mask (const vbool_t& mask, const value_t *baseptr, const vint_t& vindex); + template + void gather_mask (int mask, const value_t *baseptr, const vint_t& vindex); + + /// Store values at addresses (char*)basepatr + vindex[i]*scale + template + void scatter (value_t *baseptr, const vint_t& vindex) const; + /// Scatter elements defined by the mask + template + void scatter_mask (const vbool_t& mask, value_t *baseptr, const vint_t& vindex) const; + template + void scatter_mask (int mask, value_t *baseptr, const vint_t& vindex) const; + + // Arithmetic operators (component-by-component) + friend vint4 operator+ (const vint4& a, const vint4& b); + friend vint4 operator- (const vint4& a); + friend vint4 operator- (const vint4& a, const vint4& b); + friend vint4 operator* (const vint4& a, const vint4& b); + friend vint4 operator/ (const vint4& a, const vint4& b); + friend vint4 operator% (const vint4& a, const vint4& b); + friend const vint4 & operator+= (vint4& a, const vint4& b); + friend const vint4 & operator-= (vint4& a, const vint4& b); + friend const vint4 & operator*= (vint4& a, const vint4& b); + friend const vint4 & operator/= (vint4& a, const vint4& b); + friend const vint4 & operator%= (vint4& a, const vint4& b); + // Bitwise operators (component-by-component) + friend vint4 operator& (const vint4& a, const vint4& b); + friend vint4 operator| (const vint4& a, const vint4& b); + friend vint4 operator^ (const vint4& a, const vint4& b); + friend const vint4& operator&= (vint4& a, const vint4& b); + friend const vint4& operator|= (vint4& a, const vint4& b); + friend const vint4& operator^= (vint4& a, const vint4& b); + friend vint4 operator~ (const vint4& a); + friend vint4 operator<< (const vint4& a, unsigned int bits); + friend vint4 operator>> (const vint4& a, unsigned int bits); + friend const vint4& operator<<= (vint4& a, unsigned int bits); + friend const vint4& operator>>= (vint4& a, unsigned int bits); + // Comparison operators (component-by-component) + friend vbool4 operator== (const vint4& a, const vint4& b); + friend vbool4 operator!= (const vint4& a, const vint4& b); + friend vbool4 operator< (const vint4& a, const vint4& b); + friend vbool4 operator> (const vint4& a, const vint4& b); + friend vbool4 operator>= (const vint4& a, const vint4& b); + friend vbool4 operator<= (const vint4& a, const vint4& b); + + /// Stream output + friend std::ostream& operator<< (std::ostream& cout, const vint4 & a); + +private: + // The actual data representation + union { + simd_t m_simd; + value_t m_val[elements]; + }; +}; + + + +// Shift right logical -- unsigned shift. This differs from operator>> +// in how it handles the sign bit. (1<<31) >> 1 == (1<<31), but +// srl((1<<31),1) == 1<<30. +vint4 srl (const vint4& val, const unsigned int bits); + +/// Helper: shuffle/swizzle with constant (templated) indices. +/// Example: shuffle<1,1,2,2>(vbool4(a,b,c,d)) returns (b,b,c,c) +template +OIIO_FORCEINLINE vint4 shuffle (const vint4& a); + +/// broadcast_element(a) returns a simd variable in which all lanes have +/// value a[i]. +template OIIO_FORCEINLINE vint4 broadcast_element(const vint4& a); + +/// Helper: as rapid as possible extraction of one component, when the +/// index is fixed. +template OIIO_FORCEINLINE int extract (const vint4& v); + +/// The sum of all components, returned in all components. +vint4 vreduce_add (const vint4& v); + +// Reduction across all components +int reduce_add (const vint4& v); +int reduce_and (const vint4& v); +int reduce_or (const vint4& v); + +/// Use a bool mask to select between components of a (if mask[i] is false) +/// and b (if mask[i] is true), i.e., mask[i] ? b[i] : a[i]. +vint4 blend (const vint4& a, const vint4& b, const vbool4& mask); + +/// Use a bool mask to select between `a` (if mask[i] is true) or 0 if +/// mask[i] is false), i.e., mask[i] ? a[i] : 0. Equivalent to +/// blend(0,a,mask). +vint4 blend0 (const vint4& a, const vbool4& mask); + +/// Use a bool mask to select between components of a (if mask[i] is false) +/// or 0 (if mask[i] is true), i.e., mask[i] ? 0 : a[i]. Equivalent to +/// blend(0,a,!mask), or blend(a,0,mask). +vint4 blend0not (const vint4& a, const vbool4& mask); + +/// Select 'a' where mask is true, 'b' where mask is false. Sure, it's a +/// synonym for blend with arguments rearranged, but this is more clear +/// because the arguments are symmetric to scalar (cond ? a : b). +vint4 select (const vbool4& mask, const vint4& a, const vint4& b); + +// Per-element math +vint4 abs (const vint4& a); +vint4 min (const vint4& a, const vint4& b); +vint4 max (const vint4& a, const vint4& b); + +/// Circular bit rotate by s bits, for N values at once. +vint4 rotl (const vint4& x, const int s); + +/// andnot(a,b) returns ((~a) & b) +vint4 andnot (const vint4& a, const vint4& b); + +/// Bitcast back and forth to intN (not a convert -- move the bits!) +vint4 bitcast_to_int (const vbool4& x); +vint4 bitcast_to_int (const vfloat4& x); +vfloat4 bitcast_to_float (const vint4& x); + +void transpose (vint4 &a, vint4 &b, vint4 &c, vint4 &d); +void transpose (const vint4& a, const vint4& b, const vint4& c, const vint4& d, + vint4 &r0, vint4 &r1, vint4 &r2, vint4 &r3); + +vint4 AxBxCxDx (const vint4& a, const vint4& b, const vint4& c, const vint4& d); + +// safe_mod(a,b) is like a%b, but safely returns 0 when b==0. +vint4 safe_mod (const vint4& a, const vint4& b); +vint4 safe_mod (const vint4& a, int b); + + + + +/// Integer 8-vector, accelerated by SIMD instructions when available. +class vint8 { +public: + static const char* type_name() { return "vint8"; } + typedef int value_t; ///< Underlying equivalent scalar value type + enum { elements = 8 }; ///< Number of scalar elements + enum { paddedelements =8 }; ///< Number of scalar elements for full pad + enum { bits = elements*32 }; ///< Total number of bits + typedef simd_raw_t::type simd_t; ///< the native SIMD type used + typedef vbool8 vbool_t; ///< bool type of the same length + typedef vfloat8 vfloat_t; ///< float type of the same length + typedef vint8 vint_t; ///< int type of the same length + static constexpr size_t size() noexcept { return elements; } + + /// Default constructor (contents undefined) + vint8() = default; + + /// Construct from a single value (store it in all slots) + vint8 (int a); + + /// Construct from 2 values -- (a,a,b,b) + vint8 (int a, int b); + + /// Construct from 8 values (won't work for vint8) + vint8 (int a, int b, int c, int d, int e, int f, int g, int h); + + /// Construct from a pointer to values + vint8 (const int *vals); + + /// Construct from a pointer to unsigned short values + explicit vint8 (const unsigned short *vals); + + /// Construct from a pointer to signed short values + explicit vint8 (const short *vals); + + /// Construct from a pointer to unsigned char values (0 - 255) + explicit vint8 (const unsigned char *vals); + + /// Construct from a pointer to signed char values (-128 - 127) + explicit vint8 (const char *vals); + + /// Copy construct from another vint8 + vint8(const vint8& other) = default; + + /// Convert a vfloat8 to an vint8. Equivalent to i = (int)f; + explicit vint8 (const vfloat8& f); // implementation below + + /// Construct from two vint4's + vint8 (const vint4 &lo, const vint4 &hi); + + /// Construct from the underlying SIMD type + vint8 (const simd_t& m) : m_simd(m) { } + + /// Return the raw SIMD type + operator simd_t () const { return m_simd; } + simd_t simd () const { return m_simd; } + simd_t& simd () { return m_simd; } + + /// Return a pointer to the underlying scalar type + const value_t* data () const { return (const value_t*)this; } + value_t* data () { return (value_t*)this; } + + /// Sset all components to 0 + void clear () ; + + /// Return an vint8 with all components set to 0 + static const vint8 Zero (); + + /// Return an vint8 with all components set to 1 + static const vint8 One (); + + /// Return an vint8 with all components set to -1 (aka 0xffffffff) + static const vint8 NegOne (); + + /// Return an vint8 with incremented components (e.g., 0,1,2,3). + /// Optional arguments can give a non-zero starting point and step size. + static const vint8 Iota (int start=0, int step=1); + + /// Return an vint8 with "geometric" iota: (1, 2, 4, 8, ...). + static const vint8 Giota (); + + /// Assign one value to all components. + vint8& operator=(int a) { load(a); return *this; } + + /// Assignment from another vint8 +#if !defined(__INTEL_COMPILER) + vint8& operator=(const vint8& other) = default; +#else + // For explanation of the necessity of this, see implementation comment. + vint8& operator=(const vint8& other); +#endif + + /// Component access (get) + int operator[] (int i) const; + + /// Component access (set) + int& operator[] (int i); + + /// Component access (set). + void setcomp (int i, int value); + + value_t x () const; + value_t y () const; + value_t z () const; + value_t w () const; + void set_x (value_t val); + void set_y (value_t val); + void set_z (value_t val); + void set_w (value_t val); + + /// Extract the lower precision vint4 + vint4 lo () const; + + /// Extract the higher precision vint4 + vint4 hi () const; + + /// Helper: load a single int into all components + void load (int a); + + /// Load separate values into each component. + void load (int a, int b, int c, int d, int e, int f, int g, int h); + + /// Load from an array of 8 values + void load (const int *values); + + void load (const int *values, int n) ; + + /// Load from an array of 8 unsigned short values, convert to vint8 + void load (const unsigned short *values) ; + + /// Load from an array of 8 unsigned short values, convert to vint8 + void load (const short *values); + + /// Load from an array of 8 unsigned char values, convert to vint8 + void load (const unsigned char *values); + + /// Load from an array of 8 unsigned char values, convert to vint8 + void load (const char *values); + + /// Store the values into memory + void store (int *values) const; + + /// Store the first n values into memory + void store (int *values, int n) const; + + /// Store the least significant 16 bits of each element into adjacent + /// unsigned shorts. + void store (unsigned short *values) const; + + /// Store the least significant 8 bits of each element into adjacent + /// unsigned chars. + void store (unsigned char *values) const; + + /// Masked load -- read from values[] where mask is 1, load zero where + /// mask is 0. + void load_mask (int mask, const value_t *values); + void load_mask (const vbool_t& mask, const value_t *values); + + /// Masked store -- write to values[] where mask is enabled, don't + /// touch values[] where it's not. + void store_mask (int mask, value_t *values) const; + void store_mask (const vbool_t& mask, value_t *values) const; + + /// Load values from addresses (char*)basepatr + vindex[i]*scale + template + void gather (const value_t *baseptr, const vint_t& vindex); + /// Gather elements defined by the mask, leave others unchanged. + template + void gather_mask (const vbool_t& mask, const value_t *baseptr, const vint_t& vindex); + template + void gather_mask (int mask, const value_t *baseptr, const vint_t& vindex); + + /// Store values at addresses (char*)basepatr + vindex[i]*scale + template + void scatter (value_t *baseptr, const vint_t& vindex) const; + /// Scatter elements defined by the mask + template + void scatter_mask (const vbool_t& mask, value_t *baseptr, const vint_t& vindex) const; + template + void scatter_mask (int mask, value_t *baseptr, const vint_t& vindex) const; + + // Arithmetic operators (component-by-component) + friend vint8 operator+ (const vint8& a, const vint8& b); + friend vint8 operator- (const vint8& a); + friend vint8 operator- (const vint8& a, const vint8& b); + friend vint8 operator* (const vint8& a, const vint8& b); + friend vint8 operator/ (const vint8& a, const vint8& b); + friend vint8 operator% (const vint8& a, const vint8& b); + friend const vint8 & operator+= (vint8& a, const vint8& b); + friend const vint8 & operator-= (vint8& a, const vint8& b); + friend const vint8 & operator*= (vint8& a, const vint8& b); + friend const vint8 & operator/= (vint8& a, const vint8& b); + friend const vint8 & operator%= (vint8& a, const vint8& b); + // Bitwise operators (component-by-component) + friend vint8 operator& (const vint8& a, const vint8& b); + friend vint8 operator| (const vint8& a, const vint8& b); + friend vint8 operator^ (const vint8& a, const vint8& b); + friend const vint8& operator&= (vint8& a, const vint8& b); + friend const vint8& operator|= (vint8& a, const vint8& b); + friend const vint8& operator^= (vint8& a, const vint8& b); + friend vint8 operator~ (const vint8& a); + friend vint8 operator<< (const vint8& a, unsigned int bits); + friend vint8 operator>> (const vint8& a, unsigned int bits); + friend const vint8& operator<<= (vint8& a, unsigned int bits); + friend const vint8& operator>>= (vint8& a, unsigned int bits); + // Comparison operators (component-by-component) + friend vbool8 operator== (const vint8& a, const vint8& b); + friend vbool8 operator!= (const vint8& a, const vint8& b); + friend vbool8 operator< (const vint8& a, const vint8& b); + friend vbool8 operator> (const vint8& a, const vint8& b); + friend vbool8 operator>= (const vint8& a, const vint8& b); + friend vbool8 operator<= (const vint8& a, const vint8& b); + + /// Stream output + friend std::ostream& operator<< (std::ostream& cout, const vint8& a); + +private: + // The actual data representation + union { + simd_t m_simd; + value_t m_val[elements]; + vint4 m_4[2]; + }; +}; + + + +// Shift right logical -- unsigned shift. This differs from operator>> +// in how it handles the sign bit. (1<<31) >> 1 == (1<<31), but +// srl((1<<31),1) == 1<<30. +vint8 srl (const vint8& val, const unsigned int bits); + +/// Helper: shuffle/swizzle with constant (templated) indices. +/// Example: shuffle<1,1,2,2>(vbool4(a,b,c,d)) returns (b,b,c,c) +template +OIIO_FORCEINLINE vint8 shuffle (const vint8& a); + +/// broadcast_element(a) returns a simd variable in which all lanes have +/// value a[i]. +template OIIO_FORCEINLINE vint8 broadcast_element(const vint8& a); + +/// Helper: as rapid as possible extraction of one component, when the +/// index is fixed. +template OIIO_FORCEINLINE int extract (const vint8& v); + +/// Helper: substitute val for a[i] +template OIIO_FORCEINLINE vint8 insert (const vint8& a, int val); + +/// The sum of all components, returned in all components. +vint8 vreduce_add (const vint8& v); + +// Reduction across all components +int reduce_add (const vint8& v); +int reduce_and (const vint8& v); +int reduce_or (const vint8& v); + +/// Use a bool mask to select between components of a (if mask[i] is false) +/// and b (if mask[i] is true), i.e., mask[i] ? b[i] : a[i]. +vint8 blend (const vint8& a, const vint8& b, const vbool8& mask); + +/// Use a bool mask to select between `a` (if mask[i] is true) or 0 if +/// mask[i] is false), i.e., mask[i] ? a[i] : 0. Equivalent to +/// blend(0,a,mask). +vint8 blend0 (const vint8& a, const vbool8& mask); + +/// Use a bool mask to select between components of a (if mask[i] is false) +/// or 0 (if mask[i] is true), i.e., mask[i] ? 0 : a[i]. Equivalent to +/// blend(0,a,!mask), or blend(a,0,mask). +vint8 blend0not (const vint8& a, const vbool8& mask); + +/// Select 'a' where mask is true, 'b' where mask is false. Sure, it's a +/// synonym for blend with arguments rearranged, but this is more clear +/// because the arguments are symmetric to scalar (cond ? a : b). +vint8 select (const vbool8& mask, const vint8& a, const vint8& b); + +// Per-element math +vint8 abs (const vint8& a); +vint8 min (const vint8& a, const vint8& b); +vint8 max (const vint8& a, const vint8& b); + +/// Circular bit rotate by s bits, for N values at once. +vint8 rotl (const vint8& x, const int s); + +/// andnot(a,b) returns ((~a) & b) +vint8 andnot (const vint8& a, const vint8& b); + +/// Bitcast back and forth to intN (not a convert -- move the bits!) +vint8 bitcast_to_int (const vbool8& x); +vint8 bitcast_to_int (const vfloat8& x); +vfloat8 bitcast_to_float (const vint8& x); + +// safe_mod(a,b) is like a%b, but safely returns 0 when b==0. +vint8 safe_mod (const vint8& a, const vint8& b); +vint8 safe_mod (const vint8& a, int b); + + + + + +/// Integer 16-vector, accelerated by SIMD instructions when available. +class vint16 { +public: + static const char* type_name() { return "vint16"; } + typedef int value_t; ///< Underlying equivalent scalar value type + enum { elements = 16 }; ///< Number of scalar elements + enum { paddedelements =16 }; ///< Number of scalar elements for full pad + enum { bits = 128 }; ///< Total number of bits + typedef simd_raw_t::type simd_t; ///< the native SIMD type used + typedef vbool16 vbool_t; ///< bool type of the same length + typedef vfloat16 vfloat_t; ///< float type of the same length + typedef vint16 vint_t; ///< int type of the same length + static constexpr size_t size() noexcept { return elements; } + + /// Default constructor (contents undefined) + vint16() = default; + + /// Construct from a single value (store it in all slots) + vint16 (int a); + + /// Construct from 16 values (won't work for vint16) + vint16 (int v0, int v1, int v2, int v3, int v4, int v5, int v6, int v7, + int v8, int v9, int v10, int v11, int v12, int v13, int v14, int v15); + + /// Construct from a pointer to values + vint16 (const int *vals); + + /// Construct from a pointer to unsigned short values + explicit vint16 (const unsigned short *vals); + + /// Construct from a pointer to signed short values + explicit vint16 (const short *vals); + + /// Construct from a pointer to unsigned char values (0 - 255) + explicit vint16 (const unsigned char *vals); + + /// Construct from a pointer to signed char values (-128 - 127) + explicit vint16 (const char *vals); + + /// Copy construct from another vint16 + vint16(const vint16& other) = default; + + /// Convert a vfloat16 to an vint16. Equivalent to i = (int)f; + explicit vint16 (const vfloat16& f); // implementation below + + /// Construct from two vint8's + vint16 (const vint8 &lo, const vint8 &hi); + + /// Construct from four vint4's + vint16 (const vint4 &a, const vint4 &b, const vint4 &c, const vint4 &d); + + /// Construct from the underlying SIMD type + vint16 (const simd_t& m) : m_simd(m) { } + + /// Return the raw SIMD type + operator simd_t () const { return m_simd; } + simd_t simd () const { return m_simd; } + simd_t& simd () { return m_simd; } + + /// Return a pointer to the underlying scalar type + const value_t* data () const { return (const value_t*)this; } + value_t* data () { return (value_t*)this; } + + /// Sset all components to 0 + void clear () ; + + /// Return an vint16 with all components set to 0 + static const vint16 Zero (); + + /// Return an vint16 with all components set to 1 + static const vint16 One (); + + /// Return an vint16 with all components set to -1 (aka 0xffffffff) + static const vint16 NegOne (); + + /// Return an vint16 with incremented components (e.g., 0,1,2,3). + /// Optional arguments can give a non-zero starting point and step size. + static const vint16 Iota (int start=0, int step=1); + + /// Return an vint16 with "geometric" iota: (1, 2, 4, 8, ...). + static const vint16 Giota (); + + /// Assign one value to all components. + vint16& operator=(int a) { load(a); return *this; } + + /// Assignment from another vint16 +#if !defined(__INTEL_COMPILER) + vint16& operator=(const vint16& other) = default; +#else + // For explanation of the necessity of this, see implementation comment. + vint16& operator=(const vint16& other); +#endif + + /// Component access (get) + int operator[] (int i) const; + + /// Component access (set) + int& operator[] (int i); + + /// Component access (set). + void setcomp (int i, int value); + + value_t x () const; + value_t y () const; + value_t z () const; + value_t w () const; + void set_x (value_t val); + void set_y (value_t val); + void set_z (value_t val); + void set_w (value_t val); + + /// Extract the lower precision vint8 + vint8 lo () const; + + /// Extract the higher precision vint8 + vint8 hi () const; + + /// Helper: load a single int into all components + void load (int a); + + /// Load separate values into each component. + void load (int v0, int v1, int v2, int v3, int v4, int v5, int v6, int v7, + int v8, int v9, int v10, int v11, int v12, int v13, int v14, int v15); + + /// Load from an array of 16 values + void load (const int *values); + + void load (const int *values, int n) ; + + /// Load from an array of 16 unsigned short values, convert to vint16 + void load (const unsigned short *values) ; + + /// Load from an array of 16 unsigned short values, convert to vint16 + void load (const short *values); + + /// Load from an array of 16 unsigned char values, convert to vint16 + void load (const unsigned char *values); + + /// Load from an array of 16 unsigned char values, convert to vint16 + void load (const char *values); + + /// Store the values into memory + void store (int *values) const; + + /// Store the first n values into memory + void store (int *values, int n) const; + + /// Store the least significant 16 bits of each element into adjacent + /// unsigned shorts. + void store (unsigned short *values) const; + + /// Store the least significant 8 bits of each element into adjacent + /// unsigned chars. + void store (unsigned char *values) const; + + /// Masked load -- read from values[] where mask is 1, load zero where + /// mask is 0. + void load_mask (const vbool_t &mask, const value_t *values); + void load_mask (int mask, const value_t *values) { load_mask(vbool_t(mask), values); } + + /// Masked store -- write to values[] where mask is enabled, don't + /// touch values[] where it's not. + void store_mask (const vbool_t &mask, value_t *values) const; + void store_mask (int mask, value_t *values) const { store_mask(vbool_t(mask), values); } + + /// Load values from addresses (char*)basepatr + vindex[i]*scale + template + void gather (const value_t *baseptr, const vint_t& vindex); + /// Gather elements defined by the mask, leave others unchanged. + template + void gather_mask (const vbool_t& mask, const value_t *baseptr, const vint_t& vindex); + template + void gather_mask (int mask, const value_t *baseptr, const vint_t& vindex) { + gather_mask (vbool_t(mask), baseptr, vindex); + } + + /// Store values at addresses (char*)basepatr + vindex[i]*scale + template + void scatter (value_t *baseptr, const vint_t& vindex) const; + /// Scatter elements defined by the mask + template + void scatter_mask (const vbool_t& mask, value_t *baseptr, const vint_t& vindex) const; + template + void scatter_mask (int mask, value_t *baseptr, const vint_t& vindex) const { + scatter_mask (vbool_t(mask), baseptr, vindex); + } + + // Arithmetic operators (component-by-component) + friend vint16 operator+ (const vint16& a, const vint16& b); + friend vint16 operator- (const vint16& a); + friend vint16 operator- (const vint16& a, const vint16& b); + friend vint16 operator* (const vint16& a, const vint16& b); + friend vint16 operator/ (const vint16& a, const vint16& b); + friend vint16 operator% (const vint16& a, const vint16& b); + friend const vint16 & operator+= (vint16& a, const vint16& b); + friend const vint16 & operator-= (vint16& a, const vint16& b); + friend const vint16 & operator*= (vint16& a, const vint16& b); + friend const vint16 & operator/= (vint16& a, const vint16& b); + friend const vint16 & operator%= (vint16& a, const vint16& b); + // Bitwise operators (component-by-component) + friend vint16 operator& (const vint16& a, const vint16& b); + friend vint16 operator| (const vint16& a, const vint16& b); + friend vint16 operator^ (const vint16& a, const vint16& b); + friend const vint16& operator&= (vint16& a, const vint16& b); + friend const vint16& operator|= (vint16& a, const vint16& b); + friend const vint16& operator^= (vint16& a, const vint16& b); + friend vint16 operator~ (const vint16& a); + friend vint16 operator<< (const vint16& a, unsigned int bits); + friend vint16 operator>> (const vint16& a, unsigned int bits); + friend const vint16& operator<<= (vint16& a, unsigned int bits); + friend const vint16& operator>>= (vint16& a, unsigned int bits); + // Comparison operators (component-by-component) + friend vbool16 operator== (const vint16& a, const vint16& b); + friend vbool16 operator!= (const vint16& a, const vint16& b); + friend vbool16 operator< (const vint16& a, const vint16& b); + friend vbool16 operator> (const vint16& a, const vint16& b); + friend vbool16 operator>= (const vint16& a, const vint16& b); + friend vbool16 operator<= (const vint16& a, const vint16& b); + + /// Stream output + friend std::ostream& operator<< (std::ostream& cout, const vint16& a); + +private: + // The actual data representation + union { + simd_t m_simd; + value_t m_val[elements]; + vint8 m_8[2]; + }; +}; + + + +/// Shift right logical -- unsigned shift. This differs from operator>> +/// in how it handles the sign bit. (1<<31) >> 1 == (1<<31), but +/// srl((1<<31),1) == 1<<30. +vint16 srl (const vint16& val, const unsigned int bits); + +/// Shuffle groups of 4 +template +vint16 shuffle4 (const vint16& a); + +/// shuffle4(a) is the same as shuffle4(a) +template vint16 shuffle4 (const vint16& a); + +/// Shuffle within each group of 4 +template +vint16 shuffle (const vint16& a); + +/// broadcast_element(a) returns a simd variable in which all lanes have +/// value a[i]. +template vint16 broadcast_element(const vint16& a); + +/// Helper: as rapid as possible extraction of one component, when the +/// index is fixed. +template OIIO_FORCEINLINE int extract (const vint16& v); + +/// Helper: substitute val for a[i] +template OIIO_FORCEINLINE vint16 insert (const vint16& a, int val); + +/// The sum of all components, returned in all components. +vint16 vreduce_add (const vint16& v); + +// Reduction across all components +int reduce_add (const vint16& v); +int reduce_and (const vint16& v); +int reduce_or (const vint16& v); + +/// Use a bool mask to select between components of a (if mask[i] is false) +/// and b (if mask[i] is true), i.e., mask[i] ? b[i] : a[i]. +vint16 blend (const vint16& a, const vint16& b, const vbool16& mask); + +/// Use a bool mask to select between `a` (if mask[i] is true) or 0 if +/// mask[i] is false), i.e., mask[i] ? a[i] : 0. Equivalent to +/// blend(0,a,mask). +vint16 blend0 (const vint16& a, const vbool16& mask); + +/// Use a bool mask to select between components of a (if mask[i] is false) +/// or 0 (if mask[i] is true), i.e., mask[i] ? 0 : a[i]. Equivalent to +/// blend(0,a,!mask), or blend(a,0,mask). +vint16 blend0not (const vint16& a, const vbool16& mask); + +/// Select 'a' where mask is true, 'b' where mask is false. Sure, it's a +/// synonym for blend with arguments rearranged, but this is more clear +/// because the arguments are symmetric to scalar (cond ? a : b). +vint16 select (const vbool16& mask, const vint16& a, const vint16& b); + +// Per-element math +vint16 abs (const vint16& a); +vint16 min (const vint16& a, const vint16& b); +vint16 max (const vint16& a, const vint16& b); + +/// Circular bit rotate by s bits, for N values at once. +vint16 rotl (const vint16& x, const int s); + +/// andnot(a,b) returns ((~a) & b) +vint16 andnot (const vint16& a, const vint16& b); + +/// Bitcast back and forth to intN (not a convert -- move the bits!) +vint16 bitcast_to_int (const vbool16& x); +vint16 bitcast_to_int (const vfloat16& x); +vfloat16 bitcast_to_float (const vint16& x); + +// safe_mod(a,b) is like a%b, but safely returns 0 when b==0. +vint16 safe_mod (const vint16& a, const vint16& b); +vint16 safe_mod (const vint16& a, int b); + + + + + +/// Floating point 4-vector, accelerated by SIMD instructions when +/// available. +class vfloat4 { +public: + static const char* type_name() { return "vfloat4"; } + typedef float value_t; ///< Underlying equivalent scalar value type + enum { elements = 4 }; ///< Number of scalar elements + enum { paddedelements = 4 }; ///< Number of scalar elements for full pad + enum { bits = elements*32 }; ///< Total number of bits + typedef simd_raw_t::type simd_t; ///< the native SIMD type used + typedef vfloat4 vfloat_t; ///< SIMD int type + typedef vint4 vint_t; ///< SIMD int type + typedef vbool4 vbool_t; ///< SIMD bool type + static constexpr size_t size() noexcept { return elements; } + + /// Default constructor (contents undefined) + vfloat4() = default; + + /// Construct from a single value (store it in all slots) + vfloat4 (float a) { load(a); } + + /// Construct from 3 or 4 values + vfloat4 (float a, float b, float c, float d=0.0f) { load(a,b,c,d); } + + /// Construct from a pointer to 4 values + vfloat4 (const float *f) { load (f); } + + /// Copy construct from another vfloat4 + vfloat4(const vfloat4 &other) = default; + + /// Construct from an vint4 (promoting all components to float) + explicit vfloat4 (const vint4& ival); + + /// Construct from the underlying SIMD type + vfloat4 (const simd_t& m) : m_simd(m) { } + + /// Construct from a generic subscripted 3-vector, including Imath::V3f. + template::value + && !std::is_same::value)> + explicit vfloat4 (const V& v) { load (v[0], v[1], v[2]); } + + /// Construct from a generic subscripted or xyzw 4-vector, including + /// Imath::V4f. + template::value + || has_xyzw::value)) + && !std::is_same::value> + explicit vfloat4(const V& v) { load ((const value_t *)&v); } + + /// Return the raw SIMD type + operator simd_t () const { return m_simd; } + simd_t simd () const { return m_simd; } + simd_t& simd () { return m_simd; } + + /// Return a pointer to the underlying scalar type + const value_t* data () const { return (const value_t*)this; } + value_t* data () { return (value_t*)this; } + +#ifdef INCLUDED_IMATHVEC_H + /// Cast to a Imath::V3f + const Imath::V3f& V3f () const { return *(const Imath::V3f*)this; } + + /// Cast to a Imath::V4f + const Imath::V4f& V4f () const { return *(const Imath::V4f*)this; } +#endif + + /// Construct from a pointer to 4 unsigned short values + explicit vfloat4 (const unsigned short *vals) { load(vals); } + + /// Construct from a pointer to 4 short values + explicit vfloat4 (const short *vals) { load(vals); } + + /// Construct from a pointer to 4 unsigned char values + explicit vfloat4 (const unsigned char *vals) { load(vals); } + + /// Construct from a pointer to 4 char values + explicit vfloat4 (const char *vals) { load(vals); } + +#if defined(_HALF_H_) || defined(IMATH_HALF_H_) + /// Construct from a pointer to 4 half (16 bit float) values + explicit vfloat4 (const half *vals) { load(vals); } +#endif + + /// Assign a single value to all components + vfloat4& operator=(float a) { load(a); return *this; } + + /// Assign a vfloat4 + vfloat4& operator=(const vfloat4& other) = default; + + /// Return a vfloat4 with all components set to 0.0 + static const vfloat4 Zero (); + + /// Return a vfloat4 with all components set to 1.0 + static const vfloat4 One (); + + /// Return a vfloat4 with incremented components (e.g., 0.0,1.0,2.0,3.0). + /// Optional argument can give a non-zero starting point and non-1 step. + static const vfloat4 Iota (float start=0.0f, float step=1.0f); + + /// Set all components to 0.0 + void clear (); + + /// Assign from a generic subscripted or xyzw 4-vector, including an + /// Imath::V4f. + template::value + || has_xyzw::value) + && !std::is_same::value)> + const vfloat4 & operator= (const V& v) { + load ((const float *)&v); + return *this; + } + + /// Assign from a generic subscripted 3-vector, including an + /// Imath::V3f. + template::value + && !std::is_same::value)> + const vfloat4 & operator= (const V& v) { + load (v[0], v[1], v[2], 0.0f); + return *this; + } + + /// Component access (get) + float operator[] (int i) const; + /// Component access (set) + float& operator[] (int i); + + /// Component access (set). + void setcomp (int i, float value); + + value_t x () const; + value_t y () const; + value_t z () const; + value_t w () const; + void set_x (value_t val); + void set_y (value_t val); + void set_z (value_t val); + void set_w (value_t val); + + /// Helper: load a single value into all components + void load (float val); + + /// Helper: load 3 or 4 values. (If 3 are supplied, the 4th will be 0.) + void load (float a, float b, float c, float d=0.0f); + + /// Load from an array of 4 values + void load (const float *values); + + /// Load from a partial array of <=4 values. Unassigned values are + /// undefined. + void load (const float *values, int n); + + /// Load from an array of 4 unsigned short values, convert to float + void load (const unsigned short *values); + + /// Load from an array of 4 short values, convert to float + void load (const short *values); + + /// Load from an array of 4 unsigned char values, convert to float + void load (const unsigned char *values); + + /// Load from an array of 4 char values, convert to float + void load (const char *values); + +#if defined(_HALF_H_) || defined(IMATH_HALF_H_) + /// Load from an array of 4 half values, convert to float + void load (const half *values); +#endif /* _HALF_H_ or _IMATH_H_ */ + + /// Load the first 2 elements from lo[0..1] and the second two elements + /// from hi[0..1]. + void load_pairs(const float* lo, const float* hi); + + void store (float *values) const; + + /// Store the first n values into memory + void store (float *values, int n) const; + +#if defined(_HALF_H_) || defined(IMATH_HALF_H_) + void store (half *values) const; +#endif + + /// Masked load -- read from values[] where mask is 1, load zero where + /// mask is 0. + void load_mask (int mask, const value_t *values); + void load_mask (const vbool_t& mask, const value_t *values); + + /// Masked store -- write to values[] where mask is enabled, don't + /// touch values[] where it's not. + void store_mask (int mask, value_t *values) const; + void store_mask (const vbool_t& mask, value_t *values) const; + + /// Load values from addresses (char*)basepatr + vindex[i]*scale + template + void gather (const value_t *baseptr, const vint_t& vindex); + /// Gather elements defined by the mask, leave others unchanged. + template + void gather_mask (const vbool_t& mask, const value_t *baseptr, const vint_t& vindex); + template + void gather_mask (int mask, const value_t *baseptr, const vint_t& vindex); + + /// Store values at addresses (char*)basepatr + vindex[i]*scale + template + void scatter (value_t *baseptr, const vint_t& vindex) const; + /// Scatter elements defined by the mask + template + void scatter_mask (const vbool_t& mask, value_t *baseptr, const vint_t& vindex) const; + template + void scatter_mask (int mask, value_t *baseptr, const vint_t& vindex) const; + + // Arithmetic operators + friend vfloat4 operator+ (const vfloat4& a, const vfloat4& b); + const vfloat4 & operator+= (const vfloat4& a); + vfloat4 operator- () const; + friend vfloat4 operator- (const vfloat4& a, const vfloat4& b); + const vfloat4 & operator-= (const vfloat4& a); + friend vfloat4 operator* (const vfloat4& a, const vfloat4& b); + friend vfloat4 operator* (const vfloat4& a, float b); + friend vfloat4 operator* (float a, const vfloat4& b); + const vfloat4 & operator*= (const vfloat4& a); + const vfloat4 & operator*= (float val); + friend vfloat4 operator/ (const vfloat4& a, const vfloat4& b); + const vfloat4 & operator/= (const vfloat4& a); + const vfloat4 & operator/= (float val); + + // Comparison operations + friend vbool4 operator== (const vfloat4& a, const vfloat4& b); + friend vbool4 operator!= (const vfloat4& a, const vfloat4& b); + friend vbool4 operator< (const vfloat4& a, const vfloat4& b); + friend vbool4 operator> (const vfloat4& a, const vfloat4& b); + friend vbool4 operator>= (const vfloat4& a, const vfloat4& b); + friend vbool4 operator<= (const vfloat4& a, const vfloat4& b); + + // Some oddball items that are handy + + /// Combine the first two components of A with the first two components + /// of B. + friend vfloat4 AxyBxy (const vfloat4& a, const vfloat4& b); + + /// Combine the first two components of A with the first two components + /// of B, but interleaved. + friend vfloat4 AxBxAyBy (const vfloat4& a, const vfloat4& b); + + /// Return xyz components, plus 0 for w + vfloat4 xyz0 () const; + + /// Return xyz components, plus 1 for w + vfloat4 xyz1 () const; + + /// Stream output + friend inline std::ostream& operator<< (std::ostream& cout, const vfloat4& val); + +protected: + // The actual data representation + union { + simd_t m_simd; + value_t m_val[paddedelements]; + }; +}; + + +/// Helper: shuffle/swizzle with constant (templated) indices. +/// Example: shuffle<1,1,2,2>(vbool4(a,b,c,d)) returns (b,b,c,c) +template +OIIO_FORCEINLINE vfloat4 shuffle (const vfloat4& a); + +/// broadcast_element(a) returns a simd variable in which all lanes have +/// value a[i]. +template OIIO_FORCEINLINE vfloat4 broadcast_element(const vfloat4& a); + +/// Return { a[i0], a[i1], b[i2], b[i3] }, where i0..i3 are the extracted +/// 2-bit indices packed into the template parameter i (going from the low +/// 2-bit pair to the high 2-bit pair). +template OIIO_FORCEINLINE vfloat4 +shuffle(const vfloat4& a, const vfloat4& b); + +/// Helper: as rapid as possible extraction of one component, when the +/// index is fixed. +template OIIO_FORCEINLINE float extract (const vfloat4& a); + +/// Helper: substitute val for a[i] +template OIIO_FORCEINLINE vfloat4 insert (const vfloat4& a, float val); + +/// The sum of all components, returned in all components. +vfloat4 vreduce_add (const vfloat4& v); + +/// The sum of all components, returned as a scalar. +float reduce_add (const vfloat4& v); + +/// Return the float dot (inner) product of a and b in every component. +vfloat4 vdot (const vfloat4 &a, const vfloat4 &b); + +/// Return the float dot (inner) product of a and b. +float dot (const vfloat4 &a, const vfloat4 &b); + +/// Return the float 3-component dot (inner) product of a and b in +/// all components. +vfloat4 vdot3 (const vfloat4 &a, const vfloat4 &b); + +/// Return the float 3-component dot (inner) product of a and b. +float dot3 (const vfloat4 &a, const vfloat4 &b); + +/// Use a bool mask to select between components of a (if mask[i] is false) +/// and b (if mask[i] is true), i.e., mask[i] ? b[i] : a[i]. +vfloat4 blend (const vfloat4& a, const vfloat4& b, const vbool4& mask); + +/// Use a bool mask to select between `a` (if mask[i] is true) or 0 if +/// mask[i] is false), i.e., mask[i] ? a[i] : 0. Equivalent to +/// blend(0,a,mask). +vfloat4 blend0 (const vfloat4& a, const vbool4& mask); + +/// Use a bool mask to select between components of a (if mask[i] is false) +/// or 0 (if mask[i] is true), i.e., mask[i] ? 0 : a[i]. Equivalent to +/// blend(0,a,!mask), or blend(a,0,mask). +vfloat4 blend0not (const vfloat4& a, const vbool4& mask); + +/// "Safe" divide of vfloat4/vfloat4 -- for any component of the divisor +/// that is 0, return 0 rather than Inf. +vfloat4 safe_div (const vfloat4 &a, const vfloat4 &b); + +/// Homogeneous divide to turn a vfloat4 into a vfloat3. +vfloat3 hdiv (const vfloat4 &a); + +/// Select 'a' where mask is true, 'b' where mask is false. Sure, it's a +/// synonym for blend with arguments rearranged, but this is more clear +/// because the arguments are symmetric to scalar (cond ? a : b). +vfloat4 select (const vbool4& mask, const vfloat4& a, const vfloat4& b); + +// Per-element math +vfloat4 abs (const vfloat4& a); ///< absolute value (float) +vfloat4 sign (const vfloat4& a); ///< 1.0 when value >= 0, -1 when negative +vfloat4 ceil (const vfloat4& a); +vfloat4 floor (const vfloat4& a); +vint4 ifloor (const vfloat4& a); ///< (int)floor + +/// Per-element round to nearest integer. +/// CAVEAT: the rounding when mid-way between integers may differ depending +/// on hardware. Intel SSE/AVX does "banker's rounding" (to nearest even +/// integer) but std::round() says to round away from 0 regardless of +/// current rounding mode (but that is multiple instructions on x64). +/// USE WITH CAUTION, and maybe avoid this if it is critical to exactly +/// match std::round(). +vfloat4 round (const vfloat4& a); + +/// Per-element round to nearest integer (equivalent to vint(round(a))). +/// CAVEAT: On SSE/AVX this uses banker's rounding, which may differ from +/// C++ std::rint() which says to use the current rounding mode. +/// USE WITH CAUTION, and maybe avoid this if it is critical to exactly +/// match std::rint(). +vint4 rint (const vfloat4& a); + +vfloat4 rcp_fast (const vfloat4 &a); ///< Fast, approximate 1/a +vfloat4 sqrt (const vfloat4 &a); +vfloat4 rsqrt (const vfloat4 &a); ///< Fully accurate 1/sqrt +vfloat4 rsqrt_fast (const vfloat4 &a); ///< Fast, approximate 1/sqrt +vfloat4 min (const vfloat4& a, const vfloat4& b); ///< Per-element min +vfloat4 max (const vfloat4& a, const vfloat4& b); ///< Per-element max +template OIIO_FORCEINLINE T exp (const T& v); // template for all SIMD variants +template OIIO_FORCEINLINE T log (const T& v); + +/// andnot(a,b) returns ((~a) & b) +vfloat4 andnot (const vfloat4& a, const vfloat4& b); + +// Fused multiply and add (or subtract): +vfloat4 madd (const vfloat4& a, const vfloat4& b, const vfloat4& c); // a*b + c +vfloat4 msub (const vfloat4& a, const vfloat4& b, const vfloat4& c); // a*b - c +vfloat4 nmadd (const vfloat4& a, const vfloat4& b, const vfloat4& c); // -a*b + c +vfloat4 nmsub (const vfloat4& a, const vfloat4& b, const vfloat4& c); // -a*b - c + +/// Transpose the rows and columns of the 4x4 matrix [a b c d]. +/// In the end, a will have the original (a[0], b[0], c[0], d[0]), +/// b will have the original (a[1], b[1], c[1], d[1]), and so on. +void transpose (vfloat4 &a, vfloat4 &b, vfloat4 &c, vfloat4 &d); +void transpose (const vfloat4& a, const vfloat4& b, const vfloat4& c, const vfloat4& d, + vfloat4 &r0, vfloat4 &r1, vfloat4 &r2, vfloat4 &r3); + +/// Make a vfloat4 consisting of the first element of each of 4 vfloat4's. +vfloat4 AxBxCxDx (const vfloat4& a, const vfloat4& b, + const vfloat4& c, const vfloat4& d); + + + +/// Floating point 3-vector, aligned to be internally identical to a vfloat4. +/// The way it differs from vfloat4 is that all of he load functions only +/// load three values, and all the stores only store 3 values. The vast +/// majority of ops just fall back to the vfloat4 version, and so will +/// operate on the 4th component, but we won't care about that results. +class vfloat3 : public vfloat4 { +public: + static const char* type_name() { return "vfloat3"; } + enum { elements = 3 }; ///< Number of scalar elements + enum { paddedelements = 4 }; ///< Number of scalar elements for full pad + static constexpr size_t size() noexcept { return elements; } + + /// Default constructor (contents undefined) + vfloat3() = default; + + /// Construct from a single value (store it in all slots) + vfloat3 (float a) { load(a); } + + /// Construct from 3 values + vfloat3 (float a, float b, float c) { vfloat4::load(a,b,c); } + + /// Construct from a pointer to 3 values + vfloat3 (const float *f) { load (f); } + + /// Construct from something that looks like a generic 3-vector class, + /// having .x, .y, .z float elements and nothing more. This should be able + /// to capture from an Imath::V3f or an OIIO::V3fParam. + template::value)> + vfloat3(const V& v) : vfloat3(v.x, v.y, v.z) { } + + /// Construct from something that looks like a generic 3-vector class, + /// having an operator[] that returns a float and is the size of 3 floats. + template::value + && !has_xyz::value)> + vfloat3(const V& v) : vfloat3(v[0], v[1], v[2]) { } + + /// Copy construct from another vfloat3 + vfloat3(const vfloat3& other) = default; + + /// Construct from a vfloat4. Note: it will not zero out the internal + /// 4th component, but rather accept on faith that the vfloat4 you are + /// giving it is a valid vfloat3. Be careful! + explicit vfloat3 (const vfloat4 &other); + +#if OIIO_SIMD + /// Construct from the underlying SIMD type. Note: it will not zero out + /// the internal 4th component, but rather accept on faith that the + /// vfloat4 you are giving it is a valid vfloat3. Be careful! + explicit vfloat3 (const simd_t& m) : vfloat4(m) { } +#endif + +#ifdef INCLUDED_IMATHVEC_H + /// Cast to a Imath::V3f + const Imath::V3f& V3f () const { return *(const Imath::V3f*)this; } +#endif + + /// Construct from a pointer to 4 unsigned short values + explicit vfloat3 (const unsigned short *vals) { load(vals); } + + /// Construct from a pointer to 4 short values + explicit vfloat3 (const short *vals) { load(vals); } + + /// Construct from a pointer to 4 unsigned char values + explicit vfloat3 (const unsigned char *vals) { load(vals); } + + /// Construct from a pointer to 4 char values + explicit vfloat3 (const char *vals) { load(vals); } + +#if defined(_HALF_H_) || defined(IMATH_HALF_H_) + /// Construct from a pointer to 4 half (16 bit float) values + explicit vfloat3 (const half *vals) { load(vals); } +#endif + + /// Assign a single value to all components + vfloat3& operator=(float a) { load(a); return *this; } + + /// Return a vfloat3 with all components set to 0.0 + static const vfloat3 Zero (); + + /// Return a vfloat3 with all components set to 1.0 + static const vfloat3 One (); + + /// Return a vfloat3 with incremented components (e.g., 0.0,1.0,2.0). + /// Optional argument can give a non-zero starting point and non-1 step. + static const vfloat3 Iota (float start=0.0f, float step=1.0f); + + /// Helper: load a single value into all components + void load (float val); + + /// Load from an array of 4 values + void load (const float *values); + + /// Load from an array of 4 values + void load (const float *values, int n); + + /// Load from an array of 4 unsigned short values, convert to float + void load (const unsigned short *values); + + /// Load from an array of 4 short values, convert to float + void load (const short *values); + + /// Load from an array of 4 unsigned char values, convert to float + void load (const unsigned char *values); + + /// Load from an array of 4 char values, convert to float + void load (const char *values); + +#if defined(_HALF_H_) || defined(IMATH_HALF_H_) + /// Load from an array of 4 half values, convert to float + void load (const half *values); +#endif /* _HALF_H_ or _IMATH_H_ */ + + void store (float *values) const; + + void store (float *values, int n) const; + +#if defined(_HALF_H_) || defined(IMATH_HALF_H_) + void store (half *values) const; +#endif + + /// Store into a generic subscripted or xyz 3-vector, including Imath::V3f. + template::value + || has_xyzw::value) + && !std::is_same::value)> + void store(V& vec) const { + store((value_t *)&vec); + } + + // Math operators -- define in terms of vfloat3. + friend vfloat3 operator+ (const vfloat3& a, const vfloat3& b); + const vfloat3 & operator+= (const vfloat3& a); + vfloat3 operator- () const; + friend vfloat3 operator- (const vfloat3& a, const vfloat3& b); + const vfloat3 & operator-= (const vfloat3& a); + friend vfloat3 operator* (const vfloat3& a, const vfloat3& b); + friend vfloat3 operator* (const vfloat3& a, float b); + friend vfloat3 operator* (float a, const vfloat3& b); + const vfloat3 & operator*= (const vfloat3& a); + const vfloat3 & operator*= (float a); + friend vfloat3 operator/ (const vfloat3& a, const vfloat3& b); + const vfloat3 & operator/= (const vfloat3& a); + const vfloat3 & operator/= (float a); + + /// Square of the length of the vector + float length2() const; + /// Length of the vector + float length() const; + + /// Return a normalized version of the vector. + vfloat3 normalized () const; + /// Return a fast, approximate normalized version of the vector. + vfloat3 normalized_fast () const; + /// Normalize in place. + void normalize() { *this = normalized(); } + + /// Stream output + friend inline std::ostream& operator<< (std::ostream& cout, const vfloat3& val); +}; + + + +// Per-element math on float3 +vfloat3 abs (const vfloat3& a); +vfloat3 sign (const vfloat3& a); +vfloat3 ceil (const vfloat3& a); +vfloat3 floor (const vfloat3& a); +vfloat3 round (const vfloat3& a); + + + +/// SIMD-based 4x4 matrix. This is guaranteed to have memory layout (when +/// not in registers) isomorphic to Imath::M44f. +class matrix44 { +public: + static const char* type_name() { return "matrix44"; } + typedef float value_t; ///< Underlying equivalent scalar value type + enum { rows = 4, cols = 4 }; + static constexpr int elements = 16; + + // Uninitialized + OIIO_FORCEINLINE matrix44() = default; + + /// Copy constructor + OIIO_FORCEINLINE matrix44(const matrix44 &M) = default; + + /// Construct from a float array + OIIO_FORCEINLINE explicit matrix44 (const float *f) { + m_row[0].load (f+0); + m_row[1].load (f+4); + m_row[2].load (f+8); + m_row[3].load (f+12); + } + + /// Construct from an OIIO::M44fParam (including an Imath::M44f) + OIIO_FORCEINLINE matrix44(M44fParam M) : matrix44(M.data()) { } + + /// Construct from 4 vfloat4 rows + OIIO_FORCEINLINE explicit matrix44 (const vfloat4& a, const vfloat4& b, + const vfloat4& c, const vfloat4& d) { + m_row[0] = a; + m_row[1] = b; + m_row[2] = c; + m_row[3] = d; + } + /// Construct from 4 float[4] rows + OIIO_FORCEINLINE explicit matrix44 (const float *a, const float *b, + const float *c, const float *d) { + m_row[0].load(a); + m_row[1].load(b); + m_row[2].load(c); + m_row[3].load(d); + } + + /// Construct from 16 floats + OIIO_FORCEINLINE matrix44 (float f00, float f01, float f02, float f03, + float f10, float f11, float f12, float f13, + float f20, float f21, float f22, float f23, + float f30, float f31, float f32, float f33) + { + m_row[0].load (f00, f01, f02, f03); + m_row[1].load (f10, f11, f12, f13); + m_row[2].load (f20, f21, f22, f23); + m_row[3].load (f30, f31, f32, f33); + } + +#ifdef INCLUDED_IMATHMATRIX_H + /// Present as an Imath::M44f + const Imath::M44f& M44f() const; +#endif + + /// Return one row + const vfloat4& operator[] (int i) const; + + /// Assignment + matrix44& operator=(const matrix44& m) = default; + + /// Return the transposed matrix + matrix44 transposed () const; + + /// Transform 3-point V by 4x4 matrix M. + vfloat3 transformp (const vfloat3 &V) const; + + /// Transform 3-vector V by 4x4 matrix M. + vfloat3 transformv (const vfloat3 &V) const; + + /// Transform 3-vector V by the transpose of 4x4 matrix M. + vfloat3 transformvT (const vfloat3 &V) const; + + friend vfloat4 operator* (const vfloat4 &V, const matrix44& M); + friend vfloat4 operator* (const matrix44& M, const vfloat4 &V); + + bool operator== (const matrix44& m) const; + + bool operator!= (const matrix44& m) const; + + bool operator== (M44fParam m) const ; + friend bool operator== (M44fParam a, const matrix44 &b); + bool operator!= (M44fParam m) const; + friend bool operator!= (M44fParam a, const matrix44 &b); + + /// Return the inverse of the matrix. + matrix44 inverse() const; + + /// Stream output + friend inline std::ostream& operator<< (std::ostream& cout, const matrix44 &M); + + const float* data() const { return m_vals[0]; } + +private: + union { + vfloat4 m_row[rows]; + value_t m_vals[rows][cols]; + }; +}; + +/// Transform 3-point V by 4x4 matrix M. +vfloat3 transformp (const matrix44 &M, const vfloat3 &V); + +/// Transform 3-vector V by 4x4 matrix M. +vfloat3 transformv (const matrix44 &M, const vfloat3 &V); + +// Transform 3-vector by the transpose of 4x4 matrix M. +vfloat3 transformvT (const matrix44 &M, const vfloat3 &V); + +vfloat3 transformp (M44fParam M, const vfloat3 &V); +vfloat3 transformv (M44fParam M, const vfloat3 &V); +vfloat3 transformvT (M44fParam M, const vfloat3 &V); + + + +/// Floating point 8-vector, accelerated by SIMD instructions when +/// available. +class vfloat8 { +public: + static const char* type_name() { return "vfloat8"; } + typedef float value_t; ///< Underlying equivalent scalar value type + enum { elements = 8 }; ///< Number of scalar elements + enum { paddedelements = 8 }; ///< Number of scalar elements for full pad + enum { bits = elements*32 }; ///< Total number of bits + typedef simd_raw_t::type simd_t; ///< the native SIMD type used + typedef vfloat8 vfloat_t; ///< SIMD int type + typedef vint8 vint_t; ///< SIMD int type + typedef vbool8 vbool_t; ///< SIMD bool type + static constexpr size_t size() noexcept { return elements; } + + /// Default constructor (contents undefined) + vfloat8() = default; + + /// Construct from a single value (store it in all slots) + vfloat8 (float a) { load(a); } + + /// Construct from 8 values + vfloat8 (float a, float b, float c, float d, + float e, float f, float g, float h) { load(a,b,c,d,e,f,g,h); } + + /// Construct from a pointer to 8 values + vfloat8 (const float *f) { load (f); } + + /// Copy construct from another vfloat8 + vfloat8(const vfloat8 &other) = default; + + /// Construct from an int vector (promoting all components to float) + explicit vfloat8 (const vint8& ival); + + /// Construct from two vfloat4's + vfloat8 (const vfloat4 &lo, const vfloat4 &hi); + + /// Construct from the underlying SIMD type + vfloat8 (const simd_t& m) : m_simd(m) { } + + /// Return the raw SIMD type + operator simd_t () const { return m_simd; } + simd_t simd () const { return m_simd; } + simd_t& simd () { return m_simd; } + + /// Return a pointer to the underlying scalar type + const value_t* data () const { return (const value_t*)this; } + value_t* data () { return (value_t*)this; } + + /// Construct from a pointer to unsigned short values + explicit vfloat8 (const unsigned short *vals) { load(vals); } + + /// Construct from a pointer to short values + explicit vfloat8 (const short *vals) { load(vals); } + + /// Construct from a pointer to unsigned char values + explicit vfloat8 (const unsigned char *vals) { load(vals); } + + /// Construct from a pointer to char values + explicit vfloat8 (const char *vals) { load(vals); } + +#if defined(_HALF_H_) || defined(IMATH_HALF_H_) + /// Construct from a pointer to half (16 bit float) values + explicit vfloat8 (const half *vals) { load(vals); } +#endif + + /// Assign a single value to all components + vfloat8& operator=(float a) { load(a); return *this; } + + /// Assign a vfloat8 + vfloat8& operator=(const vfloat8& other) = default; + + /// Return a vfloat8 with all components set to 0.0 + static const vfloat8 Zero (); + + /// Return a vfloat8 with all components set to 1.0 + static const vfloat8 One (); + + /// Return a vfloat8 with incremented components (e.g., 0,1,2,3,...) + /// Optional argument can give a non-zero starting point and non-1 step. + static const vfloat8 Iota (float start=0.0f, float step=1.0f); + + /// Set all components to 0.0 + void clear (); + + /// Component access (get) + float operator[] (int i) const; + /// Component access (set) + float& operator[] (int i); + + /// Component access (set). + void setcomp (int i, float value); + + value_t x () const; + value_t y () const; + value_t z () const; + value_t w () const; + void set_x (value_t val); + void set_y (value_t val); + void set_z (value_t val); + void set_w (value_t val); + + /// Extract the lower precision vfloat4 + vfloat4 lo () const; + + /// Extract the higher precision vfloat4 + vfloat4 hi () const; + + /// Helper: load a single value into all components + void load (float val); + + /// Helper: load 8 values + void load (float a, float b, float c, float d, + float e, float f, float g, float h); + + /// Load from an array of values + void load (const float *values); + + /// Load from a partial array of <=8 values. Unassigned values are + /// undefined. + void load (const float *values, int n); + + /// Load from an array of 8 unsigned short values, convert to float + void load (const unsigned short *values); + + /// Load from an array of 8 short values, convert to float + void load (const short *values); + + /// Load from an array of 8 unsigned char values, convert to float + void load (const unsigned char *values); + + /// Load from an array of 8 char values, convert to float + void load (const char *values); + +#if defined(_HALF_H_) || defined(IMATH_HALF_H_) + /// Load from an array of 8 half values, convert to float + void load (const half *values); +#endif /* _HALF_H_ or _IMATH_H_ */ + + void store (float *values) const; + + /// Store the first n values into memory + void store (float *values, int n) const; + +#if defined(_HALF_H_) || defined(IMATH_HALF_H_) + void store (half *values) const; +#endif + + /// Masked load -- read from values[] where mask is 1, load zero where + /// mask is 0. + void load_mask (int mask, const value_t *values); + void load_mask (const vbool_t& mask, const value_t *values); + + /// Masked store -- write to values[] where mask is enabled, don't + /// touch values[] where it's not. + void store_mask (int mask, value_t *values) const; + void store_mask (const vbool_t& mask, value_t *values) const; + + /// Load values from addresses (char*)basepatr + vindex[i]*scale + template + void gather (const value_t *baseptr, const vint_t& vindex); + template + // Fastest way to fill with all 1 bits is to cmp any value to itself. + void gather_mask (const vbool_t& mask, const value_t *baseptr, const vint_t& vindex); + template + void gather_mask (int mask, const value_t *baseptr, const vint_t& vindex); + + /// Store values at addresses (char*)basepatr + vindex[i]*scale + template + void scatter (value_t *baseptr, const vint_t& vindex) const; + /// Scatter elements defined by the mask + template + void scatter_mask (const vbool_t& mask, value_t *baseptr, const vint_t& vindex) const; + template + void scatter_mask (int mask, value_t *baseptr, const vint_t& vindex) const; + + // Arithmetic operators (component-by-component) + friend vfloat8 operator+ (const vfloat8& a, const vfloat8& b); + friend vfloat8 operator- (const vfloat8& a); + friend vfloat8 operator- (const vfloat8& a, const vfloat8& b); + friend vfloat8 operator* (const vfloat8& a, const vfloat8& b); + friend vfloat8 operator* (const vfloat8& a, float b); + friend vfloat8 operator* (float a, const vfloat8& b); + friend vfloat8 operator/ (const vfloat8& a, const vfloat8& b); + friend vfloat8 operator% (const vfloat8& a, const vfloat8& b); + friend const vfloat8 & operator+= (vfloat8& a, const vfloat8& b); + friend const vfloat8 & operator-= (vfloat8& a, const vfloat8& b); + friend const vfloat8 & operator*= (vfloat8& a, const vfloat8& b); + friend const vfloat8 & operator/= (vfloat8& a, const vfloat8& b); + + // Comparison operations + friend vbool8 operator== (const vfloat8& a, const vfloat8& b); + friend vbool8 operator!= (const vfloat8& a, const vfloat8& b); + friend vbool8 operator< (const vfloat8& a, const vfloat8& b); + friend vbool8 operator> (const vfloat8& a, const vfloat8& b); + friend vbool8 operator>= (const vfloat8& a, const vfloat8& b); + friend vbool8 operator<= (const vfloat8& a, const vfloat8& b); + + // Some oddball items that are handy + + /// Stream output + friend inline std::ostream& operator<< (std::ostream& cout, const vfloat8& val); + +protected: + // The actual data representation + union { + simd_t m_simd; + value_t m_val[paddedelements]; + vfloat4 m_4[2]; + }; +}; + + +/// Helper: shuffle/swizzle with constant (templated) indices. +/// Example: shuffle<1,1,2,2>(vbool4(a,b,c,d)) returns (b,b,c,c) +template +OIIO_FORCEINLINE vfloat8 shuffle (const vfloat8& a); + +/// broadcast_element(a) is the same as shuffle(a) +template OIIO_FORCEINLINE vfloat8 broadcast_element(const vfloat8& a); + +/// Helper: as rapid as possible extraction of one component, when the +/// index is fixed. +template OIIO_FORCEINLINE float extract (const vfloat8& a); + +/// Helper: substitute val for a[i] +template OIIO_FORCEINLINE vfloat8 insert (const vfloat8& a, float val); + +/// The sum of all components, returned in all components. +vfloat8 vreduce_add (const vfloat8& v); + +/// The sum of all components, returned as a scalar. +float reduce_add (const vfloat8& v); + +/// Return the float dot (inner) product of a and b in every component. +vfloat8 vdot (const vfloat8 &a, const vfloat8 &b); + +/// Return the float dot (inner) product of a and b. +float dot (const vfloat8 &a, const vfloat8 &b); + +/// Return the float 3-component dot (inner) product of a and b in +/// all components. +vfloat8 vdot3 (const vfloat8 &a, const vfloat8 &b); + +/// Return the float 3-component dot (inner) product of a and b. +float dot3 (const vfloat8 &a, const vfloat8 &b); + +/// Use a bool mask to select between components of a (if mask[i] is false) +/// and b (if mask[i] is true), i.e., mask[i] ? b[i] : a[i]. +vfloat8 blend (const vfloat8& a, const vfloat8& b, const vbool8& mask); + +/// Use a bool mask to select between `a` (if mask[i] is true) or 0 if +/// mask[i] is false), i.e., mask[i] ? a[i] : 0. Equivalent to +/// blend(0,a,mask). +vfloat8 blend0 (const vfloat8& a, const vbool8& mask); + +/// Use a bool mask to select between components of a (if mask[i] is false) +/// or 0 (if mask[i] is true), i.e., mask[i] ? 0 : a[i]. Equivalent to +/// blend(0,a,!mask), or blend(a,0,mask). +vfloat8 blend0not (const vfloat8& a, const vbool8& mask); + +/// "Safe" divide of vfloat8/vfloat8 -- for any component of the divisor +/// that is 0, return 0 rather than Inf. +vfloat8 safe_div (const vfloat8 &a, const vfloat8 &b); + +/// Select 'a' where mask is true, 'b' where mask is false. Sure, it's a +/// synonym for blend with arguments rearranged, but this is more clear +/// because the arguments are symmetric to scalar (cond ? a : b). +vfloat8 select (const vbool8& mask, const vfloat8& a, const vfloat8& b); + +// Per-element math +vfloat8 abs (const vfloat8& a); ///< absolute value (float) +vfloat8 sign (const vfloat8& a); ///< 1.0 when value >= 0, -1 when negative +vfloat8 ceil (const vfloat8& a); +vfloat8 floor (const vfloat8& a); +vint8 ifloor (const vfloat8& a); ///< (int)floor + +/// Per-element round to nearest integer. +/// CAVEAT: the rounding when mid-way between integers may differ depending +/// on hardware. Intel SSE/AVX does "banker's founding" (to nearest even +/// integer) but std::round() says to round away from 0 regardless of +/// current rounding mode (but that is multiple instructions on x64). +/// USE WITH CAUTION, and maybe avoid this if it is critical to exactly +/// match std::round(). +vfloat8 round (const vfloat8& a); + +/// Per-element round to nearest integer (equivalent to vint(round(a))). +/// CAVEAT: On SSE/AVX this uses banker's rounding, which may differ from +/// C++ std::rint() which says to use the current rounding mode. +/// USE WITH CAUTION, and maybe avoid this if it is critical to exactly +/// match std::rint(). +vint8 rint (const vfloat8& a); + +vfloat8 rcp_fast (const vfloat8 &a); ///< Fast, approximate 1/a +vfloat8 sqrt (const vfloat8 &a); +vfloat8 rsqrt (const vfloat8 &a); ///< Fully accurate 1/sqrt +vfloat8 rsqrt_fast (const vfloat8 &a); ///< Fast, approximate 1/sqrt +vfloat8 min (const vfloat8& a, const vfloat8& b); ///< Per-element min +vfloat8 max (const vfloat8& a, const vfloat8& b); ///< Per-element max +// vfloat8 exp (const vfloat8& v); // See template with vfloat4 +// vfloat8 log (const vfloat8& v); // See template with vfloat4 + +/// andnot(a,b) returns ((~a) & b) +vfloat8 andnot (const vfloat8& a, const vfloat8& b); + +// Fused multiply and add (or subtract): +vfloat8 madd (const vfloat8& a, const vfloat8& b, const vfloat8& c); // a*b + c +vfloat8 msub (const vfloat8& a, const vfloat8& b, const vfloat8& c); // a*b - c +vfloat8 nmadd (const vfloat8& a, const vfloat8& b, const vfloat8& c); // -a*b + c +vfloat8 nmsub (const vfloat8& a, const vfloat8& b, const vfloat8& c); // -a*b - c + + + +/// Floating point 16-vector, accelerated by SIMD instructions when +/// available. +class vfloat16 { +public: + static const char* type_name() { return "vfloat16"; } + typedef float value_t; ///< Underlying equivalent scalar value type + enum { elements = 16 }; ///< Number of scalar elements + enum { paddedelements = 16 }; ///< Number of scalar elements for full pad + enum { bits = elements*32 }; ///< Total number of bits + typedef simd_raw_t::type simd_t; ///< the native SIMD type used + typedef vfloat16 vfloat_t; ///< SIMD int type + typedef vint16 vint_t; ///< SIMD int type + typedef vbool16 vbool_t; ///< SIMD bool type + static constexpr size_t size() noexcept { return elements; } + + /// Default constructor (contents undefined) + vfloat16() = default; + + /// Construct from a single value (store it in all slots) + vfloat16 (float a) { load(a); } + + /// Construct from 16 values + vfloat16 (float v0, float v1, float v2, float v3, + float v4, float v5, float v6, float v7, + float v8, float v9, float v10, float v11, + float v12, float v13, float v14, float v15); + + /// Construct from a pointer to 16 values + vfloat16 (const float *f) { load (f); } + + /// Copy construct from another vfloat16 + vfloat16(const vfloat16 &other) = default; + + /// Construct from an int vector (promoting all components to float) + explicit vfloat16 (const vint16& ival); + + /// Construct from two vfloat8's + vfloat16 (const vfloat8 &lo, const vfloat8 &hi); + + /// Construct from four vfloat4's + vfloat16 (const vfloat4 &a, const vfloat4 &b, const vfloat4 &c, const vfloat4 &d); + + /// Construct from the underlying SIMD type + vfloat16 (const simd_t& m) : m_simd(m) { } + + /// Return the raw SIMD type + operator simd_t () const { return m_simd; } + simd_t simd () const { return m_simd; } + simd_t& simd () { return m_simd; } + + /// Return a pointer to the underlying scalar type + const value_t* data () const { return (const value_t*)this; } + value_t* data () { return (value_t*)this; } + + /// Construct from a pointer to unsigned short values + explicit vfloat16 (const unsigned short *vals) { load(vals); } + + /// Construct from a pointer to short values + explicit vfloat16 (const short *vals) { load(vals); } + + /// Construct from a pointer to unsigned char values + explicit vfloat16 (const unsigned char *vals) { load(vals); } + + /// Construct from a pointer to char values + explicit vfloat16 (const char *vals) { load(vals); } + +#if defined(_HALF_H_) || defined(IMATH_HALF_H_) + /// Construct from a pointer to half (16 bit float) values + explicit vfloat16 (const half *vals) { load(vals); } +#endif + + /// Assign a single value to all components + vfloat16& operator=(float a) { load(a); return *this; } + + /// Assign a vfloat16 + vfloat16& operator=(const vfloat16& other) = default; + + /// Return a vfloat16 with all components set to 0.0 + static const vfloat16 Zero (); + + /// Return a vfloat16 with all components set to 1.0 + static const vfloat16 One (); + + /// Return a vfloat16 with incremented components (e.g., 0,1,2,3,...) + /// Optional argument can give a non-zero starting point and non-1 step. + static const vfloat16 Iota (float start=0.0f, float step=1.0f); + + /// Set all components to 0.0 + void clear (); + + /// Component access (get) + float operator[] (int i) const; + /// Component access (set) + float& operator[] (int i); + + /// Component access (set). + void setcomp (int i, float value); + + value_t x () const; + value_t y () const; + value_t z () const; + value_t w () const; + void set_x (value_t val); + void set_y (value_t val); + void set_z (value_t val); + void set_w (value_t val); + + /// Extract the lower precision vfloat8 + vfloat8 lo () const; + + /// Extract the higher precision vfloat8 + vfloat8 hi () const; + + /// Helper: load a single value into all components + void load (float val); + + /// Load separate values into each component. + void load (float v0, float v1, float v2, float v3, + float v4, float v5, float v6, float v7, + float v8, float v9, float v10, float v11, + float v12, float v13, float v14, float v15); + + /// Load from an array of values + void load (const float *values); + + /// Load from a partial array of <=16 values. Unassigned values are + /// undefined. + void load (const float *values, int n); + + /// Load from an array of 16 unsigned short values, convert to float + void load (const unsigned short *values); + + /// Load from an array of 16 short values, convert to float + void load (const short *values); + + /// Load from an array of 16 unsigned char values, convert to float + void load (const unsigned char *values); + + /// Load from an array of 16 char values, convert to float + void load (const char *values); + +#if defined(_HALF_H_) || defined(IMATH_HALF_H_) + /// Load from an array of 16 half values, convert to float + void load (const half *values); +#endif /* _HALF_H_ or _IMATH_H_ */ + + void store (float *values) const; + + /// Store the first n values into memory + void store (float *values, int n) const; + +#if defined(_HALF_H_) || defined(IMATH_HALF_H_) + void store (half *values) const; +#endif + + /// Masked load -- read from values[] where mask is 1, load zero where + /// mask is 0. + void load_mask (const vbool_t &mask, const value_t *values); + void load_mask (int mask, const value_t *values) { load_mask(vbool_t(mask), values); } + + /// Masked store -- write to values[] where mask is enabled, don't + /// touch values[] where it's not. + void store_mask (const vbool_t &mask, value_t *values) const; + void store_mask (int mask, value_t *values) const { store_mask(vbool_t(mask), values); } + + /// Load values from addresses (char*)basepatr + vindex[i]*scale + template + void gather (const value_t *baseptr, const vint_t& vindex); + /// Gather elements defined by the mask, leave others unchanged. + template + void gather_mask (const vbool_t& mask, const value_t *baseptr, const vint_t& vindex); + template + void gather_mask (int mask, const value_t *baseptr, const vint_t& vindex) { + gather_mask (vbool_t(mask), baseptr, vindex); + } + + /// Store values at addresses (char*)basepatr + vindex[i]*scale + template + void scatter (value_t *baseptr, const vint_t& vindex) const; + /// Scatter elements defined by the mask + template + void scatter_mask (const vbool_t& mask, value_t *baseptr, const vint_t& vindex) const; + template + void scatter_mask (int mask, value_t *baseptr, const vint_t& vindex) const { + scatter_mask (vbool_t(mask), baseptr, vindex); + } + + // Arithmetic operators (component-by-component) + friend vfloat16 operator+ (const vfloat16& a, const vfloat16& b); + friend vfloat16 operator- (const vfloat16& a); + friend vfloat16 operator- (const vfloat16& a, const vfloat16& b); + friend vfloat16 operator* (const vfloat16& a, const vfloat16& b); + friend vfloat16 operator* (const vfloat16& a, float b); + friend vfloat16 operator* (float a, const vfloat16& b); + friend vfloat16 operator/ (const vfloat16& a, const vfloat16& b); + friend vfloat16 operator% (const vfloat16& a, const vfloat16& b); + friend const vfloat16 & operator+= (vfloat16& a, const vfloat16& b); + friend const vfloat16 & operator-= (vfloat16& a, const vfloat16& b); + friend const vfloat16 & operator*= (vfloat16& a, const vfloat16& b); + friend const vfloat16 & operator/= (vfloat16& a, const vfloat16& b); + + // Comparison operations + friend vbool16 operator== (const vfloat16& a, const vfloat16& b); + friend vbool16 operator!= (const vfloat16& a, const vfloat16& b); + friend vbool16 operator< (const vfloat16& a, const vfloat16& b); + friend vbool16 operator> (const vfloat16& a, const vfloat16& b); + friend vbool16 operator>= (const vfloat16& a, const vfloat16& b); + friend vbool16 operator<= (const vfloat16& a, const vfloat16& b); + + // Some oddball items that are handy + + /// Stream output + friend inline std::ostream& operator<< (std::ostream& cout, const vfloat16& val); + +protected: + // The actual data representation + union { + simd_t m_simd; + value_t m_val[paddedelements]; + vfloat8 m_8[2]; + }; +}; + + +/// Shuffle groups of 4 +template +OIIO_FORCEINLINE vfloat16 shuffle4 (const vfloat16& a); + +/// shuffle4(a) is the same as shuffle4(a) +template OIIO_FORCEINLINE vfloat16 shuffle4 (const vfloat16& a); + +/// Shuffle within each group of 4 +template +OIIO_FORCEINLINE vfloat16 shuffle (const vfloat16& a); + +/// broadcast_element(a) returns a simd variable in which all lanes have +/// value a[i]. +template vfloat16 broadcast_element(const vfloat16& a); + +/// Helper: as rapid as possible extraction of one component, when the +/// index is fixed. +template OIIO_FORCEINLINE float extract (const vfloat16& a); + +/// Helper: substitute val for a[i] +template OIIO_FORCEINLINE vfloat16 insert (const vfloat16& a, float val); + +/// The sum of all components, returned in all components. +vfloat16 vreduce_add (const vfloat16& v); + +/// The sum of all components, returned as a scalar. +float reduce_add (const vfloat16& v); + +/// Use a bool mask to select between components of a (if mask[i] is false) +/// and b (if mask[i] is true), i.e., mask[i] ? b[i] : a[i]. +vfloat16 blend (const vfloat16& a, const vfloat16& b, const vbool4& mask); + +/// Use a bool mask to select between `a` (if mask[i] is true) or 0 if +/// mask[i] is false), i.e., mask[i] ? a[i] : 0. Equivalent to +/// blend(0,a,mask). +vfloat16 blend0 (const vfloat16& a, const vbool4& mask); + +/// Use a bool mask to select between components of a (if mask[i] is false) +/// or 0 (if mask[i] is true), i.e., mask[i] ? 0 : a[i]. Equivalent to +/// blend(0,a,!mask), or blend(a,0,mask). +vfloat16 blend0not (const vfloat16& a, const vbool4& mask); + +/// "Safe" divide of vfloat16/vfloat16 -- for any component of the divisor +/// that is 0, return 0 rather than Inf. +vfloat16 safe_div (const vfloat16 &a, const vfloat16 &b); + +/// Select 'a' where mask is true, 'b' where mask is false. Sure, it's a +/// synonym for blend with arguments rearranged, but this is more clear +/// because the arguments are symmetric to scalar (cond ? a : b). +vfloat16 select (const vbool16& mask, const vfloat16& a, const vfloat16& b); + +// Per-element math +vfloat16 abs (const vfloat16& a); ///< absolute value (float) +vfloat16 sign (const vfloat16& a); ///< 1.0 when value >= 0, -1 when negative +vfloat16 ceil (const vfloat16& a); +vfloat16 floor (const vfloat16& a); +vint16 ifloor (const vfloat16& a); ///< (int)floor + +/// Per-element round to nearest integer. +/// CAVEAT: the rounding when mid-way between integers may differ depending +/// on hardware. Intel SSE/AVX does "banker's founding" (to nearest even +/// integer) but std::round() says to round away from 0 regardless of +/// current rounding mode (but that is multiple instructions on x64). +/// USE WITH CAUTION, and maybe avoid this if it is critical to exactly +/// match std::round(). +vfloat16 round (const vfloat16& a); + +/// Per-element round to nearest integer (equivalent to vint(round(a))). +/// CAVEAT: On SSE/AVX this uses banker's rounding, which may differ from +/// C++ std::rint() which says to use the current rounding mode. +/// USE WITH CAUTION, and maybe avoid this if it is critical to exactly +/// match std::rint(). +vint16 rint (const vfloat16& a); + +vfloat16 rcp_fast (const vfloat16 &a); ///< Fast, approximate 1/a +vfloat16 sqrt (const vfloat16 &a); +vfloat16 rsqrt (const vfloat16 &a); ///< Fully accurate 1/sqrt +vfloat16 rsqrt_fast (const vfloat16 &a); ///< Fast, approximate 1/sqrt +vfloat16 min (const vfloat16& a, const vfloat16& b); ///< Per-element min +vfloat16 max (const vfloat16& a, const vfloat16& b); ///< Per-element max +// vfloat16 exp (const vfloat16& v); // See template with vfloat4 +// vfloat16 log (const vfloat16& v); // See template with vfloat4 + +/// andnot(a,b) returns ((~a) & b) +vfloat16 andnot (const vfloat16& a, const vfloat16& b); + +// Fused multiply and add (or subtract): +vfloat16 madd (const vfloat16& a, const vfloat16& b, const vfloat16& c); // a*b + c +vfloat16 msub (const vfloat16& a, const vfloat16& b, const vfloat16& c); // a*b - c +vfloat16 nmadd (const vfloat16& a, const vfloat16& b, const vfloat16& c); // -a*b + c +vfloat16 nmsub (const vfloat16& a, const vfloat16& b, const vfloat16& c); // -a*b - c + + + +// Odds and ends, other CPU hardware tricks + +// Try to set the flush_zero_mode CPU flag on x86. Return true if we are +// able, otherwise false (because it's not available on that platform). +inline bool set_flush_zero_mode (bool on) { +#if (defined(__x86_64__) || defined(__i386__)) && !defined(__CUDA_ARCH__) + _MM_SET_FLUSH_ZERO_MODE (on ? _MM_FLUSH_ZERO_ON : _MM_FLUSH_ZERO_OFF); + return true; +#endif + return false; +} + +// Try to set the denorms_zero_mode CPU flag on x86. Return true if we are +// able, otherwise false (because it's not available on that platform). +inline bool set_denorms_zero_mode (bool on) { +#if (defined(__x86_64__) || defined(__i386__)) && !defined(__CUDA_ARCH__) + _MM_SET_DENORMALS_ZERO_MODE (on ? _MM_DENORMALS_ZERO_ON : _MM_DENORMALS_ZERO_OFF); + return true; +#endif + return false; +} + +// Get the flush_zero_mode CPU flag on x86. +inline bool get_flush_zero_mode () { +#if (defined(__x86_64__) || defined(__i386__)) && !defined(__CUDA_ARCH__) + return _MM_GET_FLUSH_ZERO_MODE() == _MM_FLUSH_ZERO_ON; +#endif + return false; +} + +// Get the denorms_zero_mode CPU flag on x86. +inline bool get_denorms_zero_mode () { +#if (defined(__x86_64__) || defined(__i386__)) && !defined(__CUDA_ARCH__) + return _MM_GET_DENORMALS_ZERO_MODE() == _MM_DENORMALS_ZERO_ON; +#endif + return false; +} + + + + + + +////////////////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////// +// +// Gory implementation details follow. +// +// ^^^ All declarations and documentation is above ^^^ +// +// vvv Below is the implementation, often considerably cluttered with +// #if's for each architecture, and unapologitic use of intrinsics and +// every manner of dirty trick we can think of to make things fast. +// Some of this isn't pretty. We won't recapitulate comments or +// documentation of what the functions are supposed to do, please +// consult the declarations above for that. +// +// Here be dragons. +// +////////////////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////// + + + +////////////////////////////////////////////////////////////////////// +// vbool4 implementation + + +OIIO_FORCEINLINE int vbool4::operator[] (int i) const { + OIIO_DASSERT(i >= 0 && i < elements); +#if OIIO_SIMD_SSE + return ((_mm_movemask_ps(m_simd) >> i) & 1) ? -1 : 0; +#else + return m_val[i]; +#endif +} + +OIIO_FORCEINLINE int& vbool4::operator[] (int i) { + OIIO_DASSERT(i >= 0 && i < elements); + return m_val[i]; +} + + +OIIO_FORCEINLINE void vbool4::setcomp (int i, bool value) { + OIIO_DASSERT(i >= 0 && i < elements); + m_val[i] = value ? -1 : 0; +} + + +OIIO_FORCEINLINE std::ostream& operator<< (std::ostream& cout, const vbool4& a) { + cout << a[0]; + for (int i = 1; i < a.elements; ++i) + cout << ' ' << a[i]; + return cout; +} + + +OIIO_FORCEINLINE void vbool4::load (bool a) { +#if OIIO_SIMD_SSE + m_simd = _mm_castsi128_ps(_mm_set1_epi32(-int(a))); +#elif OIIO_SIMD_NEON + m_simd = vdupq_n_u32(a ? 0xffffffff : 0); +#else + int val = -int(a); + SIMD_CONSTRUCT (val); +#endif +} + + +OIIO_FORCEINLINE void vbool4::load (bool a, bool b, bool c, bool d) { +#if OIIO_SIMD_SSE + // N.B. -- we need to reverse the order because of our convention + // of storing a,b,c,d in the same order in memory. + m_simd = _mm_castsi128_ps(_mm_set_epi32(-int(d), -int(c), -int(b), -int(a))); +#elif OIIO_SIMD_NEON + int values[4] = { -int(a), -int(b), -int(c), -int(d) }; + m_simd = vld1q_u32((const uint32_t*)values); + // this if we were using int: + // m_simd = vld1q_s32(values); +#else + m_val[0] = -int(a); + m_val[1] = -int(b); + m_val[2] = -int(c); + m_val[3] = -int(d); +#endif +} + +OIIO_FORCEINLINE vbool4::vbool4 (const bool *a) { + load (a[0], a[1], a[2], a[3]); +} + + +OIIO_FORCEINLINE int vbool4::bitmask () const { +#if OIIO_SIMD_SSE + return _mm_movemask_ps(m_simd); +#elif OIIO_SIMD_NEON && defined(__aarch64__) + const int shifts[4] { 0, 1, 2, 3 }; + const int32x4_t shift = vld1q_s32(shifts); + uint32x4_t t = vshrq_n_u32(m_simd, 31); + return vaddvq_u32(vshlq_u32(t, shift)); +#else + int r = 0; + for (int i = 0; i < elements; ++i) + if (m_val[i]) + r |= 1<= 0 && n <= elements); + for (int i = 0; i < n; ++i) + values[i] = m_val[i] ? true : false; +} + + + +OIIO_FORCEINLINE vbool4 operator! (const vbool4 & a) { +#if OIIO_SIMD_SSE + return _mm_xor_ps (a.simd(), vbool4::True()); +#elif OIIO_SIMD_NEON + return vmvnq_u32(a.simd()); +#else + SIMD_RETURN (vbool4, a[i] ^ (-1)); +#endif +} + +OIIO_FORCEINLINE vbool4 operator& (const vbool4 & a, const vbool4 & b) { +#if OIIO_SIMD_SSE + return _mm_and_ps (a.simd(), b.simd()); +#elif OIIO_SIMD_NEON + return vandq_u32(a.simd(), b.simd()); +#else + SIMD_RETURN (vbool4, a[i] & b[i]); +#endif +} + +OIIO_FORCEINLINE vbool4 operator| (const vbool4 & a, const vbool4 & b) { +#if OIIO_SIMD_SSE + return _mm_or_ps (a.simd(), b.simd()); +#elif OIIO_SIMD_NEON + return vorrq_u32(a.simd(), b.simd()); +#else + SIMD_RETURN (vbool4, a[i] | b[i]); +#endif +} + +OIIO_FORCEINLINE vbool4 operator^ (const vbool4& a, const vbool4& b) { +#if OIIO_SIMD_SSE + return _mm_xor_ps (a.simd(), b.simd()); +#elif OIIO_SIMD_NEON + return veorq_u32(a.simd(), b.simd()); +#else + SIMD_RETURN (vbool4, a[i] ^ b[i]); +#endif +} + + +OIIO_FORCEINLINE const vbool4& operator&= (vbool4& a, const vbool4 &b) { + return a = a & b; +} + +OIIO_FORCEINLINE const vbool4& operator|= (vbool4& a, const vbool4& b) { + return a = a | b; +} + +OIIO_FORCEINLINE const vbool4& operator^= (vbool4& a, const vbool4& b) { + return a = a ^ b; +} + +OIIO_FORCEINLINE vbool4 operator~ (const vbool4& a) { +#if OIIO_SIMD_SSE + // Fastest way to bit-complement in SSE is to xor with 0xffffffff. + return _mm_xor_ps (a.simd(), vbool4::True()); +#elif OIIO_SIMD_NEON + return vmvnq_u32(a.m_simd); +#else + SIMD_RETURN (vbool4, ~a[i]); +#endif +} + +OIIO_FORCEINLINE vbool4 operator== (const vbool4 & a, const vbool4 & b) { +#if OIIO_SIMD_SSE + return _mm_castsi128_ps (_mm_cmpeq_epi32 (_mm_castps_si128 (a), _mm_castps_si128(b))); +#elif OIIO_SIMD_NEON + return vceqq_u32 (a.m_simd, b.m_simd); +#else + SIMD_RETURN (vbool4, a[i] == b[i] ? -1 : 0); +#endif +} + +OIIO_FORCEINLINE vbool4 operator!= (const vbool4 & a, const vbool4 & b) { +#if OIIO_SIMD_SSE + return _mm_xor_ps (a, b); +#elif OIIO_SIMD_NEON + return !(a == b); +#else + SIMD_RETURN (vbool4, a[i] != b[i] ? -1 : 0); +#endif +} + + + + +#if OIIO_SIMD_SSE +// Shuffling. Use like this: x = shuffle<3,2,1,0>(b) +template +OIIO_FORCEINLINE __m128i shuffle_sse (__m128i v) { + return _mm_shuffle_epi32(v, _MM_SHUFFLE(i3, i2, i1, i0)); +} +#endif + +#if OIIO_SIMD_SSE >= 3 +// SSE3 has intrinsics for a few special cases +template<> OIIO_FORCEINLINE __m128i shuffle_sse<0, 0, 2, 2> (__m128i a) { + return _mm_castps_si128(_mm_moveldup_ps(_mm_castsi128_ps(a))); +} +template<> OIIO_FORCEINLINE __m128i shuffle_sse<1, 1, 3, 3> (__m128i a) { + return _mm_castps_si128(_mm_movehdup_ps(_mm_castsi128_ps(a))); +} +template<> OIIO_FORCEINLINE __m128i shuffle_sse<0, 1, 0, 1> (__m128i a) { + return _mm_castpd_si128(_mm_movedup_pd(_mm_castsi128_pd(a))); +} +#endif + +#if OIIO_SIMD_SSE +template +OIIO_FORCEINLINE __m128 shuffle_sse (__m128 a) { + return _mm_castsi128_ps(_mm_shuffle_epi32(_mm_castps_si128(a), _MM_SHUFFLE(i3, i2, i1, i0))); +} +#endif + +#if OIIO_SIMD_SSE >= 3 +// SSE3 has intrinsics for a few special cases +template<> OIIO_FORCEINLINE __m128 shuffle_sse<0, 0, 2, 2> (__m128 a) { + return _mm_moveldup_ps(a); +} +template<> OIIO_FORCEINLINE __m128 shuffle_sse<1, 1, 3, 3> (__m128 a) { + return _mm_movehdup_ps(a); +} +template<> OIIO_FORCEINLINE __m128 shuffle_sse<0, 1, 0, 1> (__m128 a) { + return _mm_castpd_ps(_mm_movedup_pd(_mm_castps_pd(a))); +} +#endif + + +/// Helper: shuffle/swizzle with constant (templated) indices. +/// Example: shuffle<1,1,2,2>(vbool4(a,b,c,d)) returns (b,b,c,c) +template +OIIO_FORCEINLINE vbool4 shuffle (const vbool4& a) { +#if OIIO_SIMD_SSE + return shuffle_sse (a.simd()); +#else + return vbool4 (a[i0], a[i1], a[i2], a[i3]); +#endif +} + +/// broadcast_element(a) returns a simd variable in which all lanes have +/// value a[i]. +template OIIO_FORCEINLINE vbool4 broadcast_element(const vbool4& a) { + return shuffle(a); +} + +// DEPRECATED(3.1): old name; use broadcast_element instead +template OIIO_FORCEINLINE vbool4 shuffle(const vbool4& a) { + return broadcast_element(a); +} + + +/// Helper: as rapid as possible extraction of one component, when the +/// index is fixed. +template +OIIO_FORCEINLINE bool extract (const vbool4& a) { +#if OIIO_SIMD_SSE >= 4 + return _mm_extract_epi32(_mm_castps_si128(a.simd()), i); // SSE4.1 only +#elif OIIO_SIMD_NEON + return vgetq_lane_u32(a, i); + // this if we were using int: + // return vgetq_lane_s32(a, i); +#else + return a[i]; +#endif +} + +/// Helper: substitute val for a[i] +template +OIIO_FORCEINLINE vbool4 insert (const vbool4& a, bool val) { +#if OIIO_SIMD_SSE >= 4 + int ival = -int(val); + return _mm_castsi128_ps (_mm_insert_epi32 (_mm_castps_si128(a), ival, i)); +#elif OIIO_SIMD_NEON + uint32_t ival = uint32_t(val ? -1 : 0); + return vld1q_lane_u32(&ival, a, i); + // this if we were using int: + // int ival = -int(val); + // return vld1q_lane_s32(&ival, a, i); +#else + vbool4 tmp = a; + tmp[i] = -int(val); + return tmp; +#endif +} + +OIIO_FORCEINLINE bool reduce_and (const vbool4& v) { +#if OIIO_SIMD_AVX + return _mm_testc_ps (v, vbool4(true)) != 0; +#elif OIIO_SIMD_SSE + return _mm_movemask_ps(v.simd()) == 0xf; +#elif OIIO_SIMD_NEON && defined(__aarch64__) + uint32x4_t t = vshrq_n_u32(v.simd(), 31); + return vaddvq_u32(t) == 4; +#else + SIMD_RETURN_REDUCE (bool, true, r &= (v[i] != 0)); +#endif +} + +OIIO_FORCEINLINE bool reduce_or (const vbool4& v) { +#if OIIO_SIMD_AVX + return ! _mm_testz_ps (v, v); +#elif OIIO_SIMD_SSE + return _mm_movemask_ps(v) != 0; +#elif OIIO_SIMD_NEON && defined(__aarch64__) + uint32x4_t t = vshrq_n_u32(v.simd(), 31); + return vaddvq_u32(t) != 0; +#else + SIMD_RETURN_REDUCE (bool, false, r |= (v[i] != 0)); +#endif +} + +OIIO_FORCEINLINE bool all (const vbool4& v) { return reduce_and(v) == true; } +OIIO_FORCEINLINE bool any (const vbool4& v) { return reduce_or(v) == true; } +OIIO_FORCEINLINE bool none (const vbool4& v) { return reduce_or(v) == false; } + + + +////////////////////////////////////////////////////////////////////// +// vbool8 implementation + + +OIIO_FORCEINLINE int vbool8::operator[] (int i) const { + OIIO_DASSERT(i >= 0 && i < elements); +#if OIIO_SIMD_AVX + return ((_mm256_movemask_ps(m_simd) >> i) & 1) ? -1 : 0; +#else + return m_val[i]; +#endif +} + +OIIO_FORCEINLINE void vbool8::setcomp (int i, bool value) { + OIIO_DASSERT(i >= 0 && i < elements); + m_val[i] = value ? -1 : 0; +} + +OIIO_FORCEINLINE int& vbool8::operator[] (int i) { + OIIO_DASSERT(i >= 0 && i < elements); + return m_val[i]; +} + + +OIIO_FORCEINLINE std::ostream& operator<< (std::ostream& cout, const vbool8& a) { + cout << a[0]; + for (int i = 1; i < a.elements; ++i) + cout << ' ' << a[i]; + return cout; +} + + +OIIO_FORCEINLINE void vbool8::load (bool a) { +#if OIIO_SIMD_AVX + m_simd = _mm256_castsi256_ps(_mm256_set1_epi32(-int(a))); +#elif OIIO_SIMD_SSE || OIIO_SIMD_NEON + m_4[0].load(a); + m_4[1].load(a); +#else + int val = -int(a); + SIMD_CONSTRUCT (val); +#endif +} + + +OIIO_FORCEINLINE void vbool8::load (bool a, bool b, bool c, bool d, + bool e, bool f, bool g, bool h) { +#if OIIO_SIMD_AVX + // N.B. -- we need to reverse the order because of our convention + // of storing a,b,c,d in the same order in memory. + m_simd = _mm256_castsi256_ps(_mm256_set_epi32(-int(h), -int(g), -int(f), -int(e), + -int(d), -int(c), -int(b), -int(a))); +#elif OIIO_SIMD_SSE || OIIO_SIMD_NEON + m_4[0].load(a, b, c, d); + m_4[1].load(e, f, g, h); +#else + m_val[0] = -int(a); + m_val[1] = -int(b); + m_val[2] = -int(c); + m_val[3] = -int(d); + m_val[4] = -int(e); + m_val[5] = -int(f); + m_val[6] = -int(g); + m_val[7] = -int(h); +#endif +} + +OIIO_FORCEINLINE vbool8::vbool8 (bool a, bool b, bool c, bool d, + bool e, bool f, bool g, bool h) { + load (a, b, c, d, e, f, g, h); +} + +OIIO_FORCEINLINE vbool8::vbool8 (int a, int b, int c, int d, + int e, int f, int g, int h) { + load (bool(a), bool(b), bool(c), bool(d), + bool(e), bool(f), bool(g), bool(h)); +} + +OIIO_FORCEINLINE vbool8::vbool8 (const bool *a) { + load (a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7]); +} + + +OIIO_FORCEINLINE int vbool8::bitmask () const { +#if OIIO_SIMD_AVX + return _mm256_movemask_ps(m_simd); +#else + return lo().bitmask() | (hi().bitmask() << 4); +#endif +} + + +OIIO_FORCEINLINE vbool8 +vbool8::from_bitmask (int bitmask) { + // I think this is a fast conversion from int bitmask to vbool8 + return (vint8::Giota() & vint8(bitmask)) != vint8::Zero(); +} + + +OIIO_FORCEINLINE void vbool8::clear () { +#if OIIO_SIMD_AVX + m_simd = _mm256_setzero_ps(); +#else + *this = false; +#endif +} + +OIIO_FORCEINLINE const vbool8 vbool8::False () { +#if OIIO_SIMD_AVX + return _mm256_setzero_ps(); +#else + return false; +#endif +} + + +OIIO_FORCEINLINE const vbool8 vbool8::True () { +#if OIIO_SIMD_AVX +# if OIIO_SIMD_AVX >= 2 + // Fastest way to fill with all 1 bits is to cmp any value to itself. + __m256i anyval = _mm256_undefined_si256(); + return _mm256_castsi256_ps (_mm256_cmpeq_epi8 (anyval, anyval)); +# else + return _mm256_castsi256_ps (_mm256_set1_epi32 (-1)); +# endif +#else + return true; +#endif +} + + +OIIO_FORCEINLINE void vbool8::store (bool *values) const { + SIMD_DO (values[i] = m_val[i] ? true : false); +} + +OIIO_FORCEINLINE void vbool8::store (bool *values, int n) const { + OIIO_DASSERT (n >= 0 && n <= elements); + for (int i = 0; i < n; ++i) + values[i] = m_val[i] ? true : false; +} + + +OIIO_FORCEINLINE vbool4 vbool8::lo () const { +#if OIIO_SIMD_AVX + return _mm256_castps256_ps128 (simd()); +#else + return m_4[0]; +#endif +} + +OIIO_FORCEINLINE vbool4 vbool8::hi () const { +#if OIIO_SIMD_AVX + return _mm256_extractf128_ps (simd(), 1); +#else + return m_4[1]; +#endif +} + + +OIIO_FORCEINLINE vbool8::vbool8 (const vbool4& lo, const vbool4 &hi) { +#if OIIO_SIMD_AVX + __m256 r = _mm256_castps128_ps256 (lo); + m_simd = _mm256_insertf128_ps (r, hi, 1); + // N.B. equivalent, if available: m_simd = _mm256_set_m128 (hi, lo); +#else + m_4[0] = lo; + m_4[1] = hi; +#endif +} + + +OIIO_FORCEINLINE vbool8 operator! (const vbool8 & a) { +#if OIIO_SIMD_AVX + return _mm256_xor_ps (a.simd(), vbool8::True()); +#else + SIMD_RETURN (vbool8, a[i] ^ (-1)); +#endif +} + +OIIO_FORCEINLINE vbool8 operator& (const vbool8 & a, const vbool8 & b) { +#if OIIO_SIMD_AVX + return _mm256_and_ps (a.simd(), b.simd()); +#else + SIMD_RETURN (vbool8, a[i] & b[i]); +#endif +} + +OIIO_FORCEINLINE vbool8 operator| (const vbool8 & a, const vbool8 & b) { +#if OIIO_SIMD_AVX + return _mm256_or_ps (a.simd(), b.simd()); +#else + SIMD_RETURN (vbool8, a[i] | b[i]); +#endif +} + +OIIO_FORCEINLINE vbool8 operator^ (const vbool8& a, const vbool8& b) { +#if OIIO_SIMD_AVX + return _mm256_xor_ps (a.simd(), b.simd()); +#else + SIMD_RETURN (vbool8, a[i] ^ b[i]); +#endif +} + + +OIIO_FORCEINLINE const vbool8& operator&= (vbool8& a, const vbool8 &b) { + return a = a & b; +} + +OIIO_FORCEINLINE const vbool8& operator|= (vbool8& a, const vbool8& b) { + return a = a | b; +} + +OIIO_FORCEINLINE const vbool8& operator^= (vbool8& a, const vbool8& b) { + return a = a ^ b; +} + + +OIIO_FORCEINLINE vbool8 operator~ (const vbool8& a) { +#if OIIO_SIMD_AVX + // Fastest way to bit-complement in SSE is to xor with 0xffffffff. + return _mm256_xor_ps (a.simd(), vbool8::True()); +#else + SIMD_RETURN (vbool8, ~a[i]); +#endif +} + + +OIIO_FORCEINLINE vbool8 operator== (const vbool8 & a, const vbool8 & b) { +#if OIIO_SIMD_AVX >= 2 + return _mm256_castsi256_ps (_mm256_cmpeq_epi32 (_mm256_castps_si256 (a), _mm256_castps_si256(b))); +#elif OIIO_SIMD_AVX + return _mm256_cmp_ps (a, b, _CMP_EQ_UQ); +#else + SIMD_RETURN (vbool8, a[i] == b[i] ? -1 : 0); +#endif +} + +OIIO_FORCEINLINE vbool8 operator!= (const vbool8 & a, const vbool8 & b) { +#if OIIO_SIMD_AVX + return _mm256_xor_ps (a, b); +#else + SIMD_RETURN (vbool8, a[i] != b[i] ? -1 : 0); +#endif +} + + +template +OIIO_FORCEINLINE vbool8 shuffle (const vbool8& a) { +#if OIIO_SIMD_AVX >= 2 + vint8 index (i0, i1, i2, i3, i4, i5, i6, i7); + return _mm256_permutevar8x32_ps (a.simd(), index.simd()); +#else + return vbool8 (a[i0], a[i1], a[i2], a[i3], a[i4], a[i5], a[i6], a[i7]); +#endif +} + +template OIIO_FORCEINLINE vbool8 broadcast_element(const vbool8& a) { + return shuffle(a); +} + +// DEPRECATED(3.1): old name; use broadcast_element instead +template OIIO_FORCEINLINE vbool8 shuffle(const vbool8& a) { + return broadcast_element(a); +} + + +template +OIIO_FORCEINLINE bool extract (const vbool8& a) { +#if OIIO_SIMD_AVX && !_WIN32 + return _mm256_extract_epi32(_mm256_castps_si256(a.simd()), i); // SSE4.1 only +#else + return a[i]; +#endif +} + +template +OIIO_FORCEINLINE vbool8 insert (const vbool8& a, bool val) { +#if OIIO_SIMD_AVX && !_WIN32 + int ival = -int(val); + return _mm256_castsi256_ps (_mm256_insert_epi32 (_mm256_castps_si256(a.simd()), ival, i)); +#else + vbool8 tmp = a; + tmp[i] = -int(val); + return tmp; +#endif +} + + +OIIO_FORCEINLINE bool reduce_and (const vbool8& v) { +#if OIIO_SIMD_AVX + return _mm256_testc_ps (v, vbool8(true)) != 0; + // return _mm256_movemask_ps(v.simd()) == 0xff; +#else + SIMD_RETURN_REDUCE (bool, true, r &= bool(v[i])); +#endif +} + +OIIO_FORCEINLINE bool reduce_or (const vbool8& v) { +#if OIIO_SIMD_AVX + return ! _mm256_testz_ps (v, v); // FIXME? Not in all immintrin.h ! + // return _mm256_movemask_ps(v) != 0; +#else + SIMD_RETURN_REDUCE (bool, false, r |= bool(v[i])); +#endif +} + + +OIIO_FORCEINLINE bool all (const vbool8& v) { return reduce_and(v) == true; } +OIIO_FORCEINLINE bool any (const vbool8& v) { return reduce_or(v) == true; } +OIIO_FORCEINLINE bool none (const vbool8& v) { return reduce_or(v) == false; } + + + +////////////////////////////////////////////////////////////////////// +// vbool16 implementation + + +OIIO_FORCEINLINE int vbool16::operator[] (int i) const { + OIIO_DASSERT(i >= 0 && i < elements); + return (static_cast(m_simd) >> i) & 1; +} + +OIIO_FORCEINLINE void vbool16::setcomp (int i, bool value) { + OIIO_DASSERT(i >= 0 && i < elements); + int bits = static_cast(m_simd); + bits &= (0xffff ^ (1<(bits); +} + + +OIIO_FORCEINLINE std::ostream& operator<< (std::ostream& cout, const vbool16& a) { + cout << a[0]; + for (int i = 1; i < a.elements; ++i) + cout << ' ' << a[i]; + return cout; +} + + +OIIO_FORCEINLINE void vbool16::load (bool a) { + m_simd = a ? 0xffff : 0; +} + + +OIIO_FORCEINLINE void vbool16::load_bitmask (int a) { + m_simd = simd_t(a); +} + + +OIIO_FORCEINLINE void vbool16::load (bool v0, bool v1, bool v2, bool v3, + bool v4, bool v5, bool v6, bool v7, + bool v8, bool v9, bool v10, bool v11, + bool v12, bool v13, bool v14, bool v15) { + m_simd = simd_t((int(v0) << 0) | + (int(v1) << 1) | + (int(v2) << 2) | + (int(v3) << 3) | + (int(v4) << 4) | + (int(v5) << 5) | + (int(v6) << 6) | + (int(v7) << 7) | + (int(v8) << 8) | + (int(v9) << 9) | + (int(v10) << 10) | + (int(v11) << 11) | + (int(v12) << 12) | + (int(v13) << 13) | + (int(v14) << 14) | + (int(v15) << 15)); +} + +OIIO_FORCEINLINE vbool16::vbool16 (bool v0, bool v1, bool v2, bool v3, + bool v4, bool v5, bool v6, bool v7, + bool v8, bool v9, bool v10, bool v11, + bool v12, bool v13, bool v14, bool v15) { + load (v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15); +} + +OIIO_FORCEINLINE vbool16::vbool16 (int v0, int v1, int v2, int v3, + int v4, int v5, int v6, int v7, + int v8, int v9, int v10, int v11, + int v12, int v13, int v14, int v15) { + load (bool(v0), bool(v1), bool(v2), bool(v3), + bool(v4), bool(v5), bool(v6), bool(v7), + bool(v8), bool(v9), bool(v10), bool(v11), + bool(v12), bool(v13), bool(v14), bool(v15)); +} + +OIIO_FORCEINLINE vbool16::vbool16 (const vbool8& a, const vbool8& b) { + load_bitmask (a.bitmask() | (b.bitmask() << 8)); +} + +OIIO_FORCEINLINE vbool16::vbool16 (const bool *a) { + load (a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], + a[8], a[9], a[10], a[11], a[12], a[13], a[14], a[15]); +} + + +OIIO_FORCEINLINE int vbool16::bitmask () const { + return static_cast(m_simd); +} + + +OIIO_FORCEINLINE void vbool16::clear () { + m_simd = simd_t(0); +} + +OIIO_FORCEINLINE const vbool16 vbool16::False () { + return simd_t(0); +} + + +OIIO_FORCEINLINE const vbool16 vbool16::True () { + return simd_t(0xffff); +} + + +OIIO_FORCEINLINE void vbool16::store (bool *values) const { + SIMD_DO (values[i] = m_simd & (1<= 0 && n <= elements); + for (int i = 0; i < n; ++i) + values[i] = m_simd & (1<= 512 + return _mm256_castsi256_ps (_mm256_maskz_set1_epi32 (bitmask()&0xff, -1)); +#else + SIMD_RETURN (vbool8, (*this)[i] ? -1 : 0); +#endif +} + +OIIO_FORCEINLINE vbool8 vbool16::hi () const { +#if OIIO_SIMD_AVX >= 512 + return _mm256_castsi256_ps (_mm256_maskz_set1_epi32 (bitmask()>>8, -1)); +#else + SIMD_RETURN (vbool8, (*this)[i+8] ? -1 : 0); +#endif +} + + +OIIO_FORCEINLINE vbool16 operator! (const vbool16 & a) { +#if OIIO_SIMD_AVX >= 512 + return _mm512_knot (a.simd()); +#else + return vbool16 (a.m_simd ^ 0xffff); +#endif +} + +OIIO_FORCEINLINE vbool16 operator& (const vbool16 & a, const vbool16 & b) { +#if OIIO_SIMD_AVX >= 512 + return _mm512_kand (a.simd(), b.simd()); +#else + return vbool16 (a.m_simd & b.m_simd); +#endif +} + +OIIO_FORCEINLINE vbool16 operator| (const vbool16 & a, const vbool16 & b) { +#if OIIO_SIMD_AVX >= 512 + return _mm512_kor (a.simd(), b.simd()); +#else + return vbool16 (a.m_simd | b.m_simd); +#endif +} + +OIIO_FORCEINLINE vbool16 operator^ (const vbool16& a, const vbool16& b) { +#if OIIO_SIMD_AVX >= 512 + return _mm512_kxor (a.simd(), b.simd()); +#else + return vbool16 (a.m_simd ^ b.m_simd); +#endif +} + + +OIIO_FORCEINLINE const vbool16& operator&= (vbool16& a, const vbool16 &b) { + return a = a & b; +} + +OIIO_FORCEINLINE const vbool16& operator|= (vbool16& a, const vbool16& b) { + return a = a | b; +} + +OIIO_FORCEINLINE const vbool16& operator^= (vbool16& a, const vbool16& b) { + return a = a ^ b; +} + + +OIIO_FORCEINLINE vbool16 operator~ (const vbool16& a) { + return a ^ vbool16::True(); +} + + +OIIO_FORCEINLINE vbool16 operator== (const vbool16 & a, const vbool16 & b) { +#if OIIO_SIMD_AVX >= 512 + return _mm512_kxnor (a.simd(), b.simd()); +#else + return vbool16 (!(a.m_simd ^ b.m_simd)); +#endif +} + +OIIO_FORCEINLINE vbool16 operator!= (const vbool16 & a, const vbool16 & b) { +#if OIIO_SIMD_AVX >= 512 + return _mm512_kxor (a.simd(), b.simd()); +#else + return vbool16 (a.m_simd ^ b.m_simd); +#endif +} + + +template +OIIO_FORCEINLINE bool extract (const vbool16& a) { + return a[i]; +} + +template +OIIO_FORCEINLINE vbool16 insert (const vbool16& a, bool val) { + vbool16 tmp = a; + tmp.setcomp (i, val); + return tmp; +} + + +OIIO_FORCEINLINE bool reduce_and (const vbool16& v) { + return v.bitmask() == 0xffff; +} + +OIIO_FORCEINLINE bool reduce_or (const vbool16& v) { + return v.bitmask() != 0; +} + + +OIIO_FORCEINLINE bool all (const vbool16& v) { return reduce_and(v) == true; } +OIIO_FORCEINLINE bool any (const vbool16& v) { return reduce_or(v) == true; } +OIIO_FORCEINLINE bool none (const vbool16& v) { return reduce_or(v) == false; } + + + + + + +////////////////////////////////////////////////////////////////////// +// vint4 implementation + +#if defined(__INTEL_COMPILER) +// For reasons we don't understand, all sorts of failures crop up only on icc +// if we make this =default. Although we still support icc for now, it's a +// discontinued compiler, so we special-case it here rather than spend a lot +// of time investigating what might be broken (and would of course never be +// fixed if it's a compiler bug). +OIIO_FORCEINLINE vint4& vint4::operator=(const vint4& other) { + m_simd = other.m_simd; + return *this; +} +#endif + +OIIO_FORCEINLINE int vint4::operator[] (int i) const { + OIIO_DASSERT(i= 0 && n <= elements); +#if OIIO_SIMD_AVX >= 512 && OIIO_AVX512VL_ENABLED + m_simd = _mm_maskz_loadu_epi32 (__mmask8(~(0xf << n)), values); +#elif OIIO_SIMD_SSE + switch (n) { + case 1: + m_simd = _mm_castps_si128 (_mm_load_ss ((const float *)values)); + break; + case 2: + // Trickery: load one double worth of bits! + m_simd = _mm_castpd_si128 (_mm_load_sd ((const double*)values)); + break; + case 3: + // Trickery: load one double worth of bits, then a float, + // and combine, casting to ints. + m_simd = _mm_castps_si128 (_mm_movelh_ps(_mm_castpd_ps(_mm_load_sd((const double*)values)), + _mm_load_ss ((const float *)values + 2))); + break; + case 4: + m_simd = _mm_loadu_si128 ((const simd_t *)values); + break; + default: + clear (); + break; + } +#else + for (int i = 0; i < n; ++i) + m_val[i] = values[i]; + for (int i = n; i < elements; ++i) + m_val[i] = 0; +#endif +} + + +OIIO_FORCEINLINE void vint4::load (const unsigned short *values) { +#if OIIO_SIMD_SSE >= 4 + // Trickery: load one double worth of bits = 4 ushorts! + simd_t a = _mm_castpd_si128 (_mm_load_sd ((const double *)values)); + m_simd = _mm_cvtepu16_epi32 (a); +#else + SIMD_CONSTRUCT (values[i]); +#endif +} + + +OIIO_FORCEINLINE void vint4::load (const short *values) { +#if OIIO_SIMD_SSE >= 4 + // Trickery: load one double worth of bits = 4 shorts! + simd_t a = _mm_castpd_si128 (_mm_load_sd ((const double *)values)); + m_simd = _mm_cvtepi16_epi32 (a); +#else + SIMD_CONSTRUCT (values[i]); +#endif +} + + +OIIO_FORCEINLINE void vint4::load (const unsigned char *values) { +#if OIIO_SIMD_SSE >= 4 + // Trickery: load one float worth of bits = 4 uchars! + simd_t a = _mm_castps_si128 (_mm_load_ss ((const float *)values)); + m_simd = _mm_cvtepu8_epi32 (a); +#elif OIIO_SIMD_SSE >= 2 + // Trickery: load one float worth of bits = 4 uchars! + simd_t a = _mm_castps_si128 (_mm_load_ss ((const float *)values)); + a = _mm_unpacklo_epi8(a, _mm_setzero_si128()); + m_simd = _mm_unpacklo_epi16(a, _mm_setzero_si128()); +#else + SIMD_CONSTRUCT (values[i]); +#endif +} + + +OIIO_FORCEINLINE void vint4::load (const char *values) { +#if OIIO_SIMD_SSE >= 4 + // Trickery: load one float worth of bits = 4 chars! + simd_t a = _mm_castps_si128 (_mm_load_ss ((const float *)values)); + m_simd = _mm_cvtepi8_epi32 (a); +#else + SIMD_CONSTRUCT (values[i]); +#endif +} + + +OIIO_FORCEINLINE vint4::vint4 (int a) { load(a); } + +OIIO_FORCEINLINE vint4::vint4 (int a, int b) { load(a,a,b,b); } + +OIIO_FORCEINLINE vint4::vint4 (int a, int b, int c, int d) { load(a,b,c,d); } + +// OIIO_FORCEINLINE vint4::vint4 (int a, int b, int c, int d, +// int e, int f, int g, int h) { +// load(a,b,c,d,e,f,g,h); +// } + +OIIO_FORCEINLINE vint4::vint4 (const int *vals) { load (vals); } +OIIO_FORCEINLINE vint4::vint4 (const unsigned short *vals) { load(vals); } +OIIO_FORCEINLINE vint4::vint4 (const short *vals) { load(vals); } +OIIO_FORCEINLINE vint4::vint4 (const unsigned char *vals) { load(vals); } +OIIO_FORCEINLINE vint4::vint4 (const char *vals) { load(vals); } + + +OIIO_FORCEINLINE void vint4::store (int *values) const { +#if OIIO_SIMD_SSE + // Use an unaligned store -- it's just as fast when the memory turns + // out to be aligned, nearly as fast even when unaligned. Not worth + // the headache of using stores that require alignment. + _mm_storeu_si128 ((simd_t *)values, m_simd); +#elif OIIO_SIMD_NEON + vst1q_s32(values, m_simd); +#else + SIMD_DO (values[i] = m_val[i]); +#endif +} + + +OIIO_FORCEINLINE void vint4::load_mask (int mask, const value_t *values) { +#if OIIO_SIMD_AVX >= 512 && OIIO_AVX512VL_ENABLED + m_simd = _mm_maskz_loadu_epi32 (__mmask8(mask), (const simd_t *)values); +#elif OIIO_SIMD_AVX >= 2 + m_simd = _mm_maskload_epi32 (values, _mm_castps_si128(vbool_t::from_bitmask(mask))); +#else + SIMD_CONSTRUCT ((mask>>i) & 1 ? values[i] : 0); +#endif +} + + +OIIO_FORCEINLINE void vint4::load_mask (const vbool_t& mask, const value_t *values) { +#if OIIO_SIMD_AVX >= 512 && OIIO_AVX512VL_ENABLED + m_simd = _mm_maskz_loadu_epi32 (__mmask8(mask.bitmask()), (const simd_t *)values); +#elif OIIO_SIMD_AVX >= 2 + m_simd = _mm_maskload_epi32 (values, _mm_castps_si128(mask)); +#else + SIMD_CONSTRUCT (mask[i] ? values[i] : 0); +#endif +} + + +OIIO_FORCEINLINE void vint4::store_mask (int mask, value_t *values) const { +#if OIIO_SIMD_AVX >= 512 && OIIO_AVX512VL_ENABLED + _mm_mask_storeu_epi32 (values, __mmask8(mask), m_simd); +#elif OIIO_SIMD_AVX >= 2 + _mm_maskstore_epi32 (values, _mm_castps_si128(vbool_t::from_bitmask(mask)), m_simd); +#else + SIMD_DO (if ((mask>>i) & 1) values[i] = (*this)[i]); +#endif +} + + +OIIO_FORCEINLINE void vint4::store_mask (const vbool_t& mask, value_t *values) const { +#if OIIO_SIMD_AVX >= 512 && OIIO_AVX512VL_ENABLED + _mm_mask_storeu_epi32 (values, mask.bitmask(), m_simd); +#elif OIIO_SIMD_AVX >= 2 + _mm_maskstore_epi32 (values, _mm_castps_si128(mask), m_simd); +#else + SIMD_DO (if (mask[i]) values[i] = (*this)[i]); +#endif +} + + +template +OIIO_FORCEINLINE void +vint4::gather (const value_t *baseptr, const vint_t& vindex) +{ +#if OIIO_SIMD_AVX >= 2 + m_simd = _mm_i32gather_epi32 (baseptr, vindex, scale); +#else + SIMD_CONSTRUCT (*(const value_t *)((const char *)baseptr + vindex[i]*scale)); +#endif +} + +template +OIIO_FORCEINLINE void +vint4::gather_mask (const vbool_t& mask, const value_t *baseptr, const vint_t& vindex) +{ +#if OIIO_SIMD_AVX >= 2 + m_simd = _mm_mask_i32gather_epi32 (m_simd, baseptr, vindex, _mm_cvtps_epi32(mask), scale); +#else + SIMD_DO (if (mask[i]) m_val[i] = *(const value_t *)((const char *)baseptr + vindex[i]*scale)); +#endif +} + +template +OIIO_FORCEINLINE void +vint4::scatter (value_t *baseptr, const vint_t& vindex) const +{ +#if 0 && OIIO_SIMD_AVX >= 512 && OIIO_AVX512VL_ENABLED + // FIXME: disable because it benchmarks slower than the dumb way + _mm_i32scatter_epi32 (baseptr, vindex, m_simd, scale); +#else + SIMD_DO (*(value_t *)((char *)baseptr + vindex[i]*scale) = m_val[i]); +#endif +} + +template +OIIO_FORCEINLINE void +vint4::scatter_mask (const vbool_t& mask, value_t *baseptr, + const vint_t& vindex) const +{ +#if 0 && OIIO_SIMD_AVX >= 512 && OIIO_AVX512VL_ENABLED + // FIXME: disable because it benchmarks slower than the dumb way + _mm_mask_i32scatter_epi32 (baseptr, mask.bitmask(), vindex, m_simd, scale); +#else + SIMD_DO (if (mask[i]) *(value_t *)((char *)baseptr + vindex[i]*scale) = m_val[i]); +#endif +} + + +OIIO_FORCEINLINE void vint4::clear () { +#if OIIO_SIMD_SSE + m_simd = _mm_setzero_si128(); +#else + *this = 0; +#endif +} + + + +OIIO_FORCEINLINE const vint4 vint4::Zero () { +#if OIIO_SIMD_SSE + return _mm_setzero_si128(); +#else + return 0; +#endif +} + + +OIIO_FORCEINLINE const vint4 vint4::One () { return vint4(1); } + +OIIO_FORCEINLINE const vint4 vint4::NegOne () { +#if OIIO_SIMD_SSE + // Fastest way to fill an __m128 with all 1 bits is to cmpeq_epi8 + // any value to itself. +# if OIIO_SIMD_AVX + __m128i anyval = _mm_undefined_si128(); +# else + __m128i anyval = _mm_setzero_si128(); +# endif + return _mm_cmpeq_epi8 (anyval, anyval); +#else + return vint4(-1); +#endif +} + + + +OIIO_FORCEINLINE const vint4 vint4::Iota (int start, int step) { + return vint4 (start+0*step, start+1*step, start+2*step, start+3*step); +} + + +OIIO_FORCEINLINE const vint4 vint4::Giota () { + return vint4 (1<<0, 1<<1, 1<<2, 1<<3); +} + + +OIIO_FORCEINLINE vint4 operator+ (const vint4& a, const vint4& b) { +#if OIIO_SIMD_SSE + return _mm_add_epi32 (a.simd(), b.simd()); +#elif OIIO_SIMD_NEON + return vaddq_s32(a.m_simd, b.m_simd); +#else + SIMD_RETURN (vint4, a[i] + b[i]); +#endif +} + +OIIO_FORCEINLINE const vint4& operator+= (vint4& a, const vint4& b) { + return a = a + b; +} + + +OIIO_FORCEINLINE vint4 operator- (const vint4& a) { +#if OIIO_SIMD_SSE + return _mm_sub_epi32 (_mm_setzero_si128(), a); +#elif OIIO_SIMD_NEON + return vnegq_s32(a.m_simd); +#else + SIMD_RETURN (vint4, -a[i]); +#endif +} + + +OIIO_FORCEINLINE vint4 operator- (const vint4& a, const vint4& b) { +#if OIIO_SIMD_SSE + return _mm_sub_epi32 (a.simd(), b.simd()); +#elif OIIO_SIMD_NEON + return vsubq_s32(a.m_simd, b.m_simd); +#else + SIMD_RETURN (vint4, a[i] - b[i]); +#endif +} + + +OIIO_FORCEINLINE const vint4 &operator-= (vint4& a, const vint4& b) { + return a = a - b; +} + + +#if OIIO_SIMD_SSE +// Shamelessly lifted from Syrah which lifted from Manta which lifted it +// from intel.com +OIIO_FORCEINLINE __m128i mul_epi32 (__m128i a, __m128i b) { +#if OIIO_SIMD_SSE >= 4 /* SSE >= 4.1 */ + return _mm_mullo_epi32(a, b); +#else + // Prior to SSE 4.1, there is no _mm_mullo_epi32 instruction, so we have + // to fake it. + __m128i t0; + __m128i t1; + t0 = _mm_mul_epu32 (a, b); + t1 = _mm_mul_epu32 (_mm_shuffle_epi32 (a, 0xB1), + _mm_shuffle_epi32 (b, 0xB1)); + t0 = _mm_shuffle_epi32 (t0, 0xD8); + t1 = _mm_shuffle_epi32 (t1, 0xD8); + return _mm_unpacklo_epi32 (t0, t1); +#endif +} +#endif + + +OIIO_FORCEINLINE vint4 operator* (const vint4& a, const vint4& b) { +#if OIIO_SIMD_SSE + return mul_epi32 (a.simd(), b.simd()); +#elif OIIO_SIMD_NEON + return vmulq_s32(a.m_simd, b.m_simd); +#else + SIMD_RETURN (vint4, a[i] * b[i]); +#endif +} + + +OIIO_FORCEINLINE const vint4& operator*= (vint4& a, const vint4& b) { return a = a * b; } +OIIO_FORCEINLINE const vint4& operator*= (vint4& a, int b) { return a = a * b; } + + +OIIO_FORCEINLINE vint4 operator/ (const vint4& a, const vint4& b) { + // NO INTEGER DIVISION IN SSE! + SIMD_RETURN (vint4, a[i] / b[i]); +} + + +OIIO_FORCEINLINE const vint4& operator/= (vint4& a, const vint4& b) { return a = a / b; } + +OIIO_FORCEINLINE vint4 operator% (const vint4& a, const vint4& b) { + // NO INTEGER MODULUS IN SSE! + SIMD_RETURN (vint4, a[i] % b[i]); +} + + + +OIIO_FORCEINLINE const vint4& operator%= (vint4& a, const vint4& b) { return a = a % b; } + + +OIIO_FORCEINLINE vint4 operator% (const vint4& a, int w) { + // NO INTEGER MODULUS in SSE! + SIMD_RETURN (vint4, a[i] % w); +} + + +OIIO_FORCEINLINE const vint4& operator%= (vint4& a, int b) { return a = a % b; } + + +OIIO_FORCEINLINE vint4 operator& (const vint4& a, const vint4& b) { +#if OIIO_SIMD_SSE + return _mm_and_si128 (a.simd(), b.simd()); +#elif OIIO_SIMD_NEON + return vandq_s32(a.simd(), b.simd()); +#else + SIMD_RETURN (vint4, a[i] & b[i]); +#endif +} + + +OIIO_FORCEINLINE const vint4& operator&= (vint4& a, const vint4& b) { return a = a & b; } + + + +OIIO_FORCEINLINE vint4 operator| (const vint4& a, const vint4& b) { +#if OIIO_SIMD_SSE + return _mm_or_si128 (a.simd(), b.simd()); +#elif OIIO_SIMD_NEON + return vorrq_s32(a.simd(), b.simd()); +#else + SIMD_RETURN (vint4, a[i] | b[i]); +#endif +} + +OIIO_FORCEINLINE const vint4& operator|= (vint4& a, const vint4& b) { return a = a | b; } + + +OIIO_FORCEINLINE vint4 operator^ (const vint4& a, const vint4& b) { +#if OIIO_SIMD_SSE + return _mm_xor_si128 (a.simd(), b.simd()); +#elif OIIO_SIMD_NEON + return veorq_s32(a.simd(), b.simd()); +#else + SIMD_RETURN (vint4, a[i] ^ b[i]); +#endif +} + + +OIIO_FORCEINLINE const vint4& operator^= (vint4& a, const vint4& b) { return a = a ^ b; } + + +OIIO_FORCEINLINE vint4 operator~ (const vint4& a) { +#if OIIO_SIMD_SSE + return a ^ a.NegOne(); +#elif OIIO_SIMD_NEON + return vmvnq_s32(a.m_simd); +#else + SIMD_RETURN (vint4, ~a[i]); +#endif +} + +OIIO_FORCEINLINE vint4 operator<< (const vint4& a, unsigned int bits) { +#if OIIO_SIMD_SSE + return _mm_slli_epi32 (a, bits); +#elif OIIO_SIMD_NEON + return vshlq_s32(a.m_simd, vdupq_n_s32(bits)); +#else + SIMD_RETURN (vint4, a[i] << bits); +#endif +} + +OIIO_FORCEINLINE const vint4& operator<<= (vint4& a, const unsigned int bits) { + return a = a << bits; +} + + +OIIO_FORCEINLINE vint4 operator>> (const vint4& a, const unsigned int bits) { +#if OIIO_SIMD_SSE + return _mm_srai_epi32 (a, bits); +#elif OIIO_SIMD_NEON + return vshlq_s32(a.m_simd, vdupq_n_s32(-(int)bits)); +#else + SIMD_RETURN (vint4, a[i] >> bits); +#endif +} + +OIIO_FORCEINLINE const vint4& operator>>= (vint4& a, const unsigned int bits) { + return a = a >> bits; +} + + +OIIO_FORCEINLINE vint4 srl (const vint4& a, const unsigned int bits) { +#if OIIO_SIMD_SSE + return _mm_srli_epi32 (a, bits); +#elif OIIO_SIMD_NEON + uint32x4_t au = vreinterpretq_u32_s32(a); + au = vshlq_u32(au, vdupq_n_s32(-(int)bits)); + return vreinterpretq_s32_u32(au); +#else + SIMD_RETURN (vint4, int ((unsigned int)(a[i]) >> bits)); +#endif +} + + +OIIO_FORCEINLINE vbool4 operator== (const vint4& a, const vint4& b) { +#if OIIO_SIMD_SSE + return _mm_castsi128_ps(_mm_cmpeq_epi32 (a, b)); +#elif OIIO_SIMD_NEON + return vceqq_s32 (a, b); +#else + SIMD_RETURN (vbool4, a[i] == b[i] ? -1 : 0); +#endif +} + +OIIO_FORCEINLINE vbool4 operator!= (const vint4& a, const vint4& b) { + return ! (a == b); +} + + +OIIO_FORCEINLINE vbool4 operator> (const vint4& a, const vint4& b) { +#if OIIO_SIMD_SSE + return _mm_castsi128_ps(_mm_cmpgt_epi32 (a, b)); +#elif OIIO_SIMD_NEON + return vcgtq_s32 (a, b); +#else + SIMD_RETURN (vbool4, a[i] > b[i] ? -1 : 0); +#endif +} + +OIIO_FORCEINLINE vbool4 operator< (const vint4& a, const vint4& b) { +#if OIIO_SIMD_SSE + return _mm_castsi128_ps(_mm_cmplt_epi32 (a, b)); +#elif OIIO_SIMD_NEON + return vcltq_s32 (a, b); +#else + SIMD_RETURN (vbool4, a[i] < b[i] ? -1 : 0); +#endif +} + +OIIO_FORCEINLINE vbool4 operator>= (const vint4& a, const vint4& b) { + return (b < a) | (a == b); +} + +OIIO_FORCEINLINE vbool4 operator<= (const vint4& a, const vint4& b) { + return (b > a) | (a == b); +} + +inline std::ostream& operator<< (std::ostream& cout, const vint4& val) { + cout << val[0]; + for (int i = 1; i < val.elements; ++i) + cout << ' ' << val[i]; + return cout; +} + + +OIIO_FORCEINLINE void vint4::store (int *values, int n) const { + OIIO_DASSERT (n >= 0 && n <= elements); +#if 0 && OIIO_SIMD_AVX >= 512 && OIIO_AVX512VL_ENABLED + // This SHOULD be fast, but in my benchmarks, it is slower! + // (At least on the AVX512 hardware I have, Xeon Silver 4110.) + // Re-test this periodically with new Intel hardware. + _mm_mask_storeu_epi32 (values, __mmask8(~(0xf << n)), m_simd); +#elif OIIO_SIMD + // For full SIMD, there is a speed advantage to storing all components. + if (n == elements) + store (values); + else + for (int i = 0; i < n; ++i) + values[i] = m_val[i]; +#else + for (int i = 0; i < n; ++i) + values[i] = m_val[i]; +#endif +} + + + +OIIO_FORCEINLINE void vint4::store (unsigned short *values) const { +#if OIIO_AVX512VL_ENABLED + _mm_mask_cvtepi32_storeu_epi16 (values, __mmask8(0xf), m_simd); +#elif OIIO_SIMD_SSE + // Expressed as half-words and considering little endianness, we + // currently have AxBxCxDx (the 'x' means don't care). + vint4 clamped = m_simd & vint4(0xffff); // A0B0C0D0 + vint4 low = _mm_shufflelo_epi16 (clamped, (0<<0) | (2<<2) | (1<<4) | (1<<6)); + // low = AB00xxxx + vint4 high = _mm_shufflehi_epi16 (clamped, (1<<0) | (1<<2) | (0<<4) | (2<<6)); + // high = xxxx00CD + vint4 highswapped = shuffle_sse<2,3,0,1>(high); // 00CDxxxx + vint4 result = low | highswapped; // ABCDxxxx + _mm_storel_pd ((double *)values, _mm_castsi128_pd(result)); + // At this point, values[] should hold A,B,C,D +#else + SIMD_DO (values[i] = m_val[i]); +#endif +} + + + +OIIO_FORCEINLINE void vint4::store (unsigned char *values) const { +#if OIIO_AVX512VL_ENABLED + _mm_mask_cvtepi32_storeu_epi8 (values, __mmask8(0xf), m_simd); +#elif OIIO_SIMD_SSE + vint4 clamped = m_simd & vint4(0xff); // A000 B000 C000 D000 + simd_t val16 = _mm_packs_epi32(clamped, _mm_setzero_si128()); // A0B0 C0D0 xxxx xxxx + simd_t val8 = _mm_packus_epi16(val16, _mm_setzero_si128()); // ABCD xxxx xxxx xxxx + _mm_store_ss((float*)values, _mm_castsi128_ps(val8)); +#elif OIIO_SIMD_NEON + vint4 clamped = m_simd & vint4(0xff); + int16x8_t val16 = vcombine_s16(vqmovn_s32(clamped), vdup_n_s16(0)); + uint8x16_t val8 = vcombine_u8(vqmovun_s16(val16), vdup_n_u8(0)); + vst1q_lane_u32((uint32_t*)values, vreinterpretq_u32_u8(val8), 0); +#else + SIMD_DO (values[i] = m_val[i]); +#endif +} + + + + +template +OIIO_FORCEINLINE vint4 shuffle (const vint4& a) { +#if OIIO_SIMD_SSE + return shuffle_sse (__m128i(a)); +#else + return vint4(a[i0], a[i1], a[i2], a[i3]); +#endif +} + +template OIIO_FORCEINLINE vint4 broadcast_element(const vint4& a) { + return shuffle(a); +} + +// DEPRECATED(3.1): old name; use broadcast_element instead +template OIIO_FORCEINLINE vint4 shuffle(const vint4& a) { + return broadcast_element(a); +} + + +template +OIIO_FORCEINLINE int extract (const vint4& v) { +#if OIIO_SIMD_SSE >= 4 + return _mm_extract_epi32(v.simd(), i); // SSE4.1 only +#elif OIIO_SIMD_NEON + return vgetq_lane_s32(v.simd(), i); +#else + return v[i]; +#endif +} + +#if OIIO_SIMD_SSE +template<> OIIO_FORCEINLINE int extract<0> (const vint4& v) { + return _mm_cvtsi128_si32(v.simd()); +} +#endif + +template +OIIO_FORCEINLINE vint4 insert (const vint4& a, int val) { +#if OIIO_SIMD_SSE >= 4 + return _mm_insert_epi32 (a.simd(), val, i); +#elif OIIO_SIMD_NEON + return vld1q_lane_s32(&val, a.simd(), i); +#else + vint4 tmp = a; + tmp[i] = val; + return tmp; +#endif +} + + + +OIIO_FORCEINLINE int vint4::x () const { return extract<0>(*this); } +OIIO_FORCEINLINE int vint4::y () const { return extract<1>(*this); } +OIIO_FORCEINLINE int vint4::z () const { return extract<2>(*this); } +OIIO_FORCEINLINE int vint4::w () const { return extract<3>(*this); } +OIIO_FORCEINLINE void vint4::set_x (int val) { *this = insert<0>(*this, val); } +OIIO_FORCEINLINE void vint4::set_y (int val) { *this = insert<1>(*this, val); } +OIIO_FORCEINLINE void vint4::set_z (int val) { *this = insert<2>(*this, val); } +OIIO_FORCEINLINE void vint4::set_w (int val) { *this = insert<3>(*this, val); } + + +OIIO_FORCEINLINE vint4 bitcast_to_int (const vbool4& x) +{ +#if OIIO_SIMD_SSE + return _mm_castps_si128 (x.simd()); +#else + return *(vint4 *)&x; +#endif +} + + + +OIIO_FORCEINLINE vint4 vreduce_add (const vint4& v) { +#if OIIO_SIMD_SSE >= 3 + // People seem to agree that SSE3 does add reduction best with 2 + // horizontal adds. + // suppose v = (a, b, c, d) + simd::vint4 ab_cd = _mm_hadd_epi32 (v.simd(), v.simd()); + // ab_cd = (a+b, c+d, a+b, c+d) + simd::vint4 abcd = _mm_hadd_epi32 (ab_cd.simd(), ab_cd.simd()); + // all abcd elements are a+b+c+d, return an element as fast as possible + return abcd; +#elif OIIO_SIMD_SSE >= 2 + // I think this is the best we can do for SSE2, and I'm still not sure + // it's faster than the default scalar operation. But anyway... + // suppose v = (a, b, c, d) + vint4 ab_ab_cd_cd = shuffle<1,0,3,2>(v) + v; + // ab_ab_cd_cd = (b,a,d,c) + (a,b,c,d) = (a+b,a+b,c+d,c+d) + vint4 cd_cd_ab_ab = shuffle<2,3,0,1>(ab_ab_cd_cd); + // cd_cd_ab_ab = (c+d,c+d,a+b,a+b) + vint4 abcd = ab_ab_cd_cd + cd_cd_ab_ab; // a+b+c+d in all components + return abcd; +#elif OIIO_SIMD_NEON && defined(__aarch64__) + return vint4(vaddvq_s32(v)); +#else + return vint4(reduce_add(v)); +#endif +} + + +OIIO_FORCEINLINE int reduce_add (const vint4& v) { +#if OIIO_SIMD_SSE + return extract<0> (vreduce_add(v)); +#elif OIIO_SIMD_NEON && defined(__aarch64__) + return vaddvq_s32(v); +#else + SIMD_RETURN_REDUCE (int, 0, r += v[i]); +#endif +} + + +OIIO_FORCEINLINE int reduce_and (const vint4& v) { +#if OIIO_SIMD_SSE + vint4 ab = v & shuffle<1,1,3,3>(v); // ab bb cd dd + vint4 abcd = ab & shuffle<2>(ab); + return extract<0>(abcd); +#else + SIMD_RETURN_REDUCE (int, -1, r &= v[i]); +#endif +} + + +OIIO_FORCEINLINE int reduce_or (const vint4& v) { +#if OIIO_SIMD_SSE + vint4 ab = v | shuffle<1,1,3,3>(v); // ab bb cd dd + vint4 abcd = ab | shuffle<2>(ab); + return extract<0>(abcd); +#else + SIMD_RETURN_REDUCE (int, 0, r |= v[i]); +#endif +} + + + +OIIO_FORCEINLINE vint4 blend (const vint4& a, const vint4& b, const vbool4& mask) { +#if OIIO_SIMD_SSE >= 4 /* SSE >= 4.1 */ + return _mm_castps_si128 (_mm_blendv_ps (_mm_castsi128_ps(a.simd()), + _mm_castsi128_ps(b.simd()), mask)); +#elif OIIO_SIMD_SSE + return _mm_or_si128 (_mm_and_si128(_mm_castps_si128(mask.simd()), b.simd()), + _mm_andnot_si128(_mm_castps_si128(mask.simd()), a.simd())); +#elif OIIO_SIMD_NEON + return vbslq_s32 (mask.simd(), b.simd(), a.simd()); +#else + SIMD_RETURN (vint4, mask[i] ? b[i] : a[i]); +#endif +} + +OIIO_FORCEINLINE vint4 blend0 (const vint4& a, const vbool4& mask) { +#if OIIO_SIMD_SSE + return _mm_and_si128(_mm_castps_si128(mask), a.simd()); +#elif OIIO_SIMD_NEON + return vbslq_s32 (mask.simd(), a.simd(), vint4(0)); +#else + SIMD_RETURN (vint4, mask[i] ? a[i] : 0.0f); +#endif +} + + +OIIO_FORCEINLINE vint4 blend0not (const vint4& a, const vbool4& mask) { +#if OIIO_SIMD_SSE + return _mm_andnot_si128(_mm_castps_si128(mask), a.simd()); +#else + SIMD_RETURN (vint4, mask[i] ? 0.0f : a[i]); +#endif +} + + +OIIO_FORCEINLINE vint4 select (const vbool4& mask, const vint4& a, const vint4& b) { + return blend (b, a, mask); +} + + + +OIIO_FORCEINLINE vint4 abs (const vint4& a) { +#if OIIO_SIMD_SSE >= 3 + return _mm_abs_epi32(a.simd()); +#elif OIIO_SIMD_NEON + return vabsq_s32(a.simd()); +#else + SIMD_RETURN (vint4, std::abs(a[i])); +#endif +} + + + +OIIO_FORCEINLINE vint4 min (const vint4& a, const vint4& b) { +#if OIIO_SIMD_SSE >= 4 /* SSE >= 4.1 */ + return _mm_min_epi32 (a, b); +#elif OIIO_SIMD_NEON + return vminq_s32(a, b); +#else + SIMD_RETURN (vint4, std::min(a[i], b[i])); +#endif +} + + +OIIO_FORCEINLINE vint4 max (const vint4& a, const vint4& b) { +#if OIIO_SIMD_SSE >= 4 /* SSE >= 4.1 */ + return _mm_max_epi32 (a, b); +#elif OIIO_SIMD_NEON + return vmaxq_s32(a, b); +#else + SIMD_RETURN (vint4, std::max(a[i], b[i])); +#endif +} + + +OIIO_FORCEINLINE vint4 rotl(const vint4& x, int s) { +#if OIIO_SIMD_AVX >= 512 && OIIO_AVX512VL_ENABLED + // return _mm_rol_epi32 (x, s); + // We want to do this ^^^ but this intrinsic only takes an *immediate* + // argument for s, and there isn't a way to express in C++ that a + // parameter must be an immediate/literal value from the caller. + return (x<= 0 && n <= elements); +#if OIIO_SIMD_AVX >= 512 && OIIO_AVX512VL_ENABLED + m_simd = _mm256_maskz_loadu_epi32 ((~(0xff << n)), values); +#elif OIIO_SIMD_SSE || OIIO_SIMD_NEON + if (n > 4) { + vint4 lo, hi; + lo.load (values); + hi.load (values+4, n-4); + m_4[0] = lo; + m_4[1] = hi; + } else { + vint4 lo, hi; + lo.load (values, n); + hi.clear(); + m_4[0] = lo; + m_4[1] = hi; + } +#else + for (int i = 0; i < n; ++i) + m_val[i] = values[i]; + for (int i = n; i < elements; ++i) + m_val[i] = 0; +#endif +} + + +OIIO_FORCEINLINE void vint8::load (const short *values) { +#if OIIO_SIMD_AVX >= 2 + m_simd = _mm256_cvtepi16_epi32(_mm_loadu_si128((__m128i*)values)); +#elif OIIO_SIMD_SSE || OIIO_SIMD_NEON + m_4[0].load(values); + m_4[1].load(values+4); +#else + SIMD_CONSTRUCT (values[i]); +#endif +} + +OIIO_FORCEINLINE void vint8::load (const unsigned short *values) { +#if OIIO_SIMD_AVX >= 2 + m_simd = _mm256_cvtepu16_epi32(_mm_loadu_si128((__m128i*)values)); +#elif OIIO_SIMD_SSE || OIIO_SIMD_NEON + m_4[0].load(values); + m_4[1].load(values+4); +#else + SIMD_CONSTRUCT (values[i]); +#endif +} + + +OIIO_FORCEINLINE void vint8::load (const char *values) { +#if OIIO_SIMD_AVX >= 2 + __m128i bytes = _mm_castpd_si128 (_mm_load_sd ((const double *)values)); + m_simd = _mm256_cvtepi8_epi32 (bytes); +#elif OIIO_SIMD_SSE || OIIO_SIMD_NEON + m_4[0].load(values); + m_4[1].load(values+4); +#else + SIMD_CONSTRUCT (values[i]); +#endif +} + +OIIO_FORCEINLINE void vint8::load (const unsigned char *values) { +#if OIIO_SIMD_AVX >= 2 + __m128i bytes = _mm_castpd_si128 (_mm_load_sd ((const double *)values)); + m_simd = _mm256_cvtepu8_epi32 (bytes); +#elif OIIO_SIMD_SSE || OIIO_SIMD_NEON + m_4[0].load(values); + m_4[1].load(values+4); +#else + SIMD_CONSTRUCT (values[i]); +#endif +} + + + +OIIO_FORCEINLINE vint8::vint8 (int a) { load(a); } + +OIIO_FORCEINLINE vint8::vint8 (int a, int b, int c, int d, + int e, int f, int g, int h) { + load(a,b,c,d,e,f,g,h); +} + +OIIO_FORCEINLINE vint8::vint8 (const int *vals) { load (vals); } +OIIO_FORCEINLINE vint8::vint8 (const unsigned short *vals) { load(vals); } +OIIO_FORCEINLINE vint8::vint8 (const short *vals) { load(vals); } +OIIO_FORCEINLINE vint8::vint8 (const unsigned char *vals) { load(vals); } +OIIO_FORCEINLINE vint8::vint8 (const char *vals) { load(vals); } + + +OIIO_FORCEINLINE void vint8::store (int *values) const { +#if OIIO_SIMD_AVX + // Use an unaligned store -- it's just as fast when the memory turns + // out to be aligned, nearly as fast even when unaligned. Not worth + // the headache of using stores that require alignment. + _mm256_storeu_si256 ((simd_t *)values, m_simd); +#elif OIIO_SIMD_SSE || OIIO_SIMD_NEON + m_4[0].store(values); + m_4[1].store(values+4); +#else + SIMD_DO (values[i] = m_val[i]); +#endif +} + + +OIIO_FORCEINLINE void vint8::load_mask (int mask, const int *values) { +#if OIIO_SIMD_AVX >= 512 && OIIO_AVX512VL_ENABLED + m_simd = _mm256_maskz_loadu_epi32 (__mmask8(mask), (const simd_t *)values); +#elif OIIO_SIMD_AVX >= 2 + m_simd = _mm256_maskload_epi32 (values, _mm256_castps_si256(vbool8::from_bitmask(mask))); +#else + SIMD_CONSTRUCT ((mask>>i) & 1 ? values[i] : 0); +#endif +} + + +OIIO_FORCEINLINE void vint8::load_mask (const vbool8& mask, const int *values) { +#if OIIO_SIMD_AVX >= 512 && OIIO_AVX512VL_ENABLED + m_simd = _mm256_maskz_loadu_epi32 (__mmask8(mask.bitmask()), (const simd_t *)values); +#elif OIIO_SIMD_AVX >= 2 + m_simd = _mm256_maskload_epi32 (values, _mm256_castps_si256(mask)); +#else + SIMD_CONSTRUCT (mask[i] ? values[i] : 0); +#endif +} + + +OIIO_FORCEINLINE void vint8::store_mask (int mask, int *values) const { +#if OIIO_SIMD_AVX >= 512 && OIIO_AVX512VL_ENABLED + _mm256_mask_storeu_epi32 (values, __mmask8(mask), m_simd); +#elif OIIO_SIMD_AVX >= 2 + _mm256_maskstore_epi32 (values, _mm256_castps_si256(vbool8::from_bitmask(mask)), m_simd); +#else + SIMD_DO (if ((mask>>i) & 1) values[i] = (*this)[i]); +#endif +} + + +OIIO_FORCEINLINE void vint8::store_mask (const vbool8& mask, int *values) const { +#if OIIO_SIMD_AVX >= 512 && OIIO_AVX512VL_ENABLED + _mm256_mask_storeu_epi32 (values, __mmask8(mask.bitmask()), m_simd); +#elif OIIO_SIMD_AVX >= 2 + _mm256_maskstore_epi32 (values, _mm256_castps_si256(mask), m_simd); +#else + SIMD_DO (if (mask[i]) values[i] = (*this)[i]); +#endif +} + + +template +OIIO_FORCEINLINE void +vint8::gather (const value_t *baseptr, const vint_t& vindex) +{ +#if OIIO_SIMD_AVX >= 2 + m_simd = _mm256_i32gather_epi32 (baseptr, vindex, scale); +#else + SIMD_CONSTRUCT (*(const value_t *)((const char *)baseptr + vindex[i]*scale)); +#endif +} + +template +OIIO_FORCEINLINE void +vint8::gather_mask (const vbool_t& mask, const value_t *baseptr, const vint_t& vindex) +{ +#if OIIO_SIMD_AVX >= 2 + m_simd = _mm256_mask_i32gather_epi32 (m_simd, baseptr, vindex, _mm256_cvtps_epi32(mask), scale); +#else + SIMD_DO (if (mask[i]) m_val[i] = *(const value_t *)((const char *)baseptr + vindex[i]*scale)); +#endif +} + +template +OIIO_FORCEINLINE void +vint8::scatter (value_t *baseptr, const vint_t& vindex) const +{ +#if OIIO_SIMD_AVX >= 512 && OIIO_AVX512VL_ENABLED + _mm256_i32scatter_epi32 (baseptr, vindex, m_simd, scale); +#else + SIMD_DO (*(value_t *)((char *)baseptr + vindex[i]*scale) = m_val[i]); +#endif +} + +template +OIIO_FORCEINLINE void +vint8::scatter_mask (const vbool_t& mask, value_t *baseptr, + const vint_t& vindex) const +{ +#if OIIO_SIMD_AVX >= 512 && OIIO_AVX512VL_ENABLED + _mm256_mask_i32scatter_epi32 (baseptr, mask.bitmask(), vindex, m_simd, scale); +#else + SIMD_DO (if (mask[i]) *(value_t *)((char *)baseptr + vindex[i]*scale) = m_val[i]); +#endif +} + + +OIIO_FORCEINLINE void vint8::clear () { +#if OIIO_SIMD_AVX + m_simd = _mm256_setzero_si256(); +#else + *this = 0; +#endif +} + + +OIIO_FORCEINLINE const vint8 vint8::Zero () { +#if OIIO_SIMD_AVX + return _mm256_setzero_si256(); +#else + return 0; +#endif +} + +OIIO_FORCEINLINE const vint8 vint8::One () { return vint8(1); } + +OIIO_FORCEINLINE const vint8 vint8::NegOne () { return vint8(-1); } + + +OIIO_FORCEINLINE const vint8 vint8::Iota (int start, int step) { + return vint8 (start+0*step, start+1*step, start+2*step, start+3*step, + start+4*step, start+5*step, start+6*step, start+7*step); +} + + +OIIO_FORCEINLINE const vint8 vint8::Giota () { + return vint8 (1<<0, 1<<1, 1<<2, 1<<3, 1<<4, 1<<5, 1<<6, 1<<7); +} + + +OIIO_FORCEINLINE vint4 vint8::lo () const { +#if OIIO_SIMD_AVX + return _mm256_castsi256_si128 (simd()); +#else + return m_4[0]; +#endif +} + +OIIO_FORCEINLINE vint4 vint8::hi () const { +#if OIIO_SIMD_AVX + return _mm256_extractf128_si256 (simd(), 1); +#else + return m_4[1]; +#endif +} + + +OIIO_FORCEINLINE vint8::vint8 (const vint4& lo, const vint4 &hi) { +#if OIIO_SIMD_AVX + __m256i r = _mm256_castsi128_si256 (lo); + m_simd = _mm256_insertf128_si256 (r, hi, 1); + // N.B. equivalent, if available: m_simd = _mm256_set_m128i (hi, lo); + // FIXME: when would this not be available? +#else + m_4[0] = lo; + m_4[1] = hi; +#endif +} + + +OIIO_FORCEINLINE vint8 operator+ (const vint8& a, const vint8& b) { +#if OIIO_SIMD_AVX >= 2 + return _mm256_add_epi32 (a.simd(), b.simd()); +#else + SIMD_RETURN (vint8, a[i] + b[i]); +#endif +} + + +OIIO_FORCEINLINE const vint8& operator+= (vint8& a, const vint8& b) { + return a = a + b; +} + + +OIIO_FORCEINLINE vint8 operator- (const vint8& a) { +#if OIIO_SIMD_AVX >= 2 + return _mm256_sub_epi32 (_mm256_setzero_si256(), a); +#else + SIMD_RETURN (vint8, -a[i]); +#endif +} + + +OIIO_FORCEINLINE vint8 operator- (const vint8& a, const vint8& b) { +#if OIIO_SIMD_AVX >= 2 + return _mm256_sub_epi32 (a.simd(), b.simd()); +#else + SIMD_RETURN (vint8, a[i] - b[i]); +#endif +} + + +OIIO_FORCEINLINE const vint8 &operator-= (vint8& a, const vint8& b) { + return a = a - b; +} + + +OIIO_FORCEINLINE vint8 operator* (const vint8& a, const vint8& b) { +#if OIIO_SIMD_AVX >= 2 + return _mm256_mullo_epi32 (a.simd(), b.simd()); +#else + SIMD_RETURN (vint8, a[i] * b[i]); +#endif +} + + +OIIO_FORCEINLINE const vint8& operator*= (vint8& a, const vint8& b) { return a = a * b; } +OIIO_FORCEINLINE const vint8& operator*= (vint8& a, int b) { return a = a * b; } + + +OIIO_FORCEINLINE vint8 operator/ (const vint8& a, const vint8& b) { + // NO INTEGER DIVISION IN SSE or AVX! + SIMD_RETURN (vint8, a[i] / b[i]); +} + +OIIO_FORCEINLINE const vint8& operator/= (vint8& a, const vint8& b) { return a = a / b; } + + +OIIO_FORCEINLINE vint8 operator% (const vint8& a, const vint8& b) { + // NO INTEGER MODULUS IN SSE or AVX! + SIMD_RETURN (vint8, a[i] % b[i]); +} + +OIIO_FORCEINLINE const vint8& operator%= (vint8& a, const vint8& b) { return a = a % b; } + +OIIO_FORCEINLINE vint8 operator% (const vint8& a, int w) { + // NO INTEGER MODULUS in SSE or AVX! + SIMD_RETURN (vint8, a[i] % w); +} + +OIIO_FORCEINLINE const vint8& operator%= (vint8& a, int b) { return a = a % b; } + + +OIIO_FORCEINLINE vint8 operator& (const vint8& a, const vint8& b) { +#if OIIO_SIMD_AVX >= 2 + return _mm256_and_si256 (a.simd(), b.simd()); +#else + SIMD_RETURN (vint8, a[i] & b[i]); +#endif +} + +OIIO_FORCEINLINE const vint8& operator&= (vint8& a, const vint8& b) { return a = a & b; } + +OIIO_FORCEINLINE vint8 operator| (const vint8& a, const vint8& b) { +#if OIIO_SIMD_AVX >= 2 + return _mm256_or_si256 (a.simd(), b.simd()); +#else + SIMD_RETURN (vint8, a[i] | b[i]); +#endif +} + +OIIO_FORCEINLINE const vint8& operator|= (vint8& a, const vint8& b) { return a = a | b; } + +OIIO_FORCEINLINE vint8 operator^ (const vint8& a, const vint8& b) { +#if OIIO_SIMD_AVX >= 2 + return _mm256_xor_si256 (a.simd(), b.simd()); +#else + SIMD_RETURN (vint8, a[i] ^ b[i]); +#endif +} + +OIIO_FORCEINLINE const vint8& operator^= (vint8& a, const vint8& b) { return a = a ^ b; } + + +OIIO_FORCEINLINE vint8 operator~ (const vint8& a) { +#if OIIO_SIMD_AVX >= 2 + return a ^ a.NegOne(); +#else + SIMD_RETURN (vint8, ~a[i]); +#endif +} + + +OIIO_FORCEINLINE vint8 operator<< (const vint8& a, unsigned int bits) { +#if OIIO_SIMD_AVX >= 2 + return _mm256_slli_epi32 (a, bits); +#elif OIIO_SIMD_SSE + return vint8 (a.lo() << bits, a.hi() << bits); +#else + SIMD_RETURN (vint8, a[i] << bits); +#endif +} + + +OIIO_FORCEINLINE const vint8& operator<<= (vint8& a, const unsigned int bits) { + return a = a << bits; +} + +OIIO_FORCEINLINE vint8 operator>> (const vint8& a, const unsigned int bits) { +#if OIIO_SIMD_AVX >= 2 + return _mm256_srai_epi32 (a, bits); +#elif OIIO_SIMD_SSE + return vint8 (a.lo() >> bits, a.hi() >> bits); +#else + SIMD_RETURN (vint8, a[i] >> bits); +#endif +} + +OIIO_FORCEINLINE const vint8& operator>>= (vint8& a, const unsigned int bits) { + return a = a >> bits; +} + + +OIIO_FORCEINLINE vint8 srl (const vint8& a, const unsigned int bits) { +#if OIIO_SIMD_AVX >= 2 + return _mm256_srli_epi32 (a, bits); +#else + SIMD_RETURN (vint8, int ((unsigned int)(a[i]) >> bits)); +#endif +} + + +OIIO_FORCEINLINE vbool8 operator== (const vint8& a, const vint8& b) { + // FIXME: on AVX-512 should we use _mm256_cmp_epi32_mask() ? +#if OIIO_SIMD_AVX >= 2 + return _mm256_castsi256_ps(_mm256_cmpeq_epi32 (a.m_simd, b.m_simd)); +#elif OIIO_SIMD_SSE /* Fall back to 4-wide */ + return vbool8 (a.lo() == b.lo(), a.hi() == b.hi()); +#else + SIMD_RETURN (vbool8, a[i] == b[i] ? -1 : 0); +#endif +} + + +OIIO_FORCEINLINE vbool8 operator!= (const vint8& a, const vint8& b) { + // FIXME: on AVX-512 should we use _mm256_cmp_epi32_mask() ? + return ! (a == b); +} + + +OIIO_FORCEINLINE vbool8 operator> (const vint8& a, const vint8& b) { + // FIXME: on AVX-512 should we use _mm256_cmp_epi32_mask() ? +#if OIIO_SIMD_AVX >= 2 + return _mm256_castsi256_ps(_mm256_cmpgt_epi32 (a, b)); +#elif OIIO_SIMD_SSE /* Fall back to 4-wide */ + return vbool8 (a.lo() > b.lo(), a.hi() > b.hi()); +#else + SIMD_RETURN (vbool8, a[i] > b[i] ? -1 : 0); +#endif +} + + +OIIO_FORCEINLINE vbool8 operator< (const vint8& a, const vint8& b) { + // FIXME: on AVX-512 should we use _mm256_cmp_epi32_mask() ? +#if OIIO_SIMD_AVX >= 2 + // No lt or lte! + return (b > a); +#elif OIIO_SIMD_SSE /* Fall back to 4-wide */ + return vbool8 (a.lo() < b.lo(), a.hi() < b.hi()); +#else + SIMD_RETURN (vbool8, a[i] < b[i] ? -1 : 0); +#endif +} + + +OIIO_FORCEINLINE vbool8 operator>= (const vint8& a, const vint8& b) { + // FIXME: on AVX-512 should we use _mm256_cmp_epi32_mask() ? + return (a > b) | (a == b); +} + + +OIIO_FORCEINLINE vbool8 operator<= (const vint8& a, const vint8& b) { + // FIXME: on AVX-512 should we use _mm256_cmp_epi32_mask() ? + return (b > a) | (a == b); +} + + +inline std::ostream& operator<< (std::ostream& cout, const vint8& val) { + cout << val[0]; + for (int i = 1; i < val.elements; ++i) + cout << ' ' << val[i]; + return cout; +} + + +OIIO_FORCEINLINE void vint8::store (int *values, int n) const { + OIIO_DASSERT (n >= 0 && n <= elements); +#if 0 && OIIO_SIMD_AVX >= 512 && OIIO_AVX512VL_ENABLED + // This SHOULD be fast, but in my benchmarks, it is slower! + // (At least on the AVX512 hardware I have, Xeon Silver 4110.) + // Re-test this periodically with new Intel hardware. + _mm256_mask_storeu_epi32 (values, __mmask8(~(0xff << n)), m_simd); +#elif OIIO_SIMD_SSE + if (n <= 4) { + lo().store (values, n); + } else if (n < 8) { + lo().store (values); + hi().store (values+4, n-4); + } else { + store (values); + } +#else + for (int i = 0; i < n; ++i) + values[i] = m_val[i]; +#endif +} + + +// FIXME(AVX): fast vint8 store to unsigned short, unsigned char + +OIIO_FORCEINLINE void vint8::store (unsigned short *values) const { +#if OIIO_AVX512VL_ENABLED + _mm256_mask_cvtepi32_storeu_epi16 (values, __mmask8(0xff), m_simd); +#elif OIIO_SIMD_SSE + lo().store (values); + hi().store (values+4); +#else + SIMD_DO (values[i] = m_val[i]); +#endif +} + + +OIIO_FORCEINLINE void vint8::store (unsigned char *values) const { +#if OIIO_AVX512VL_ENABLED + _mm256_mask_cvtepi32_storeu_epi8 (values, __mmask8(0xff), m_simd); +#elif OIIO_SIMD_SSE + lo().store (values); + hi().store (values+4); +#else + SIMD_DO (values[i] = m_val[i]); +#endif +} + + +template +OIIO_FORCEINLINE vint8 shuffle (const vint8& a) { +#if OIIO_SIMD_AVX >= 2 + vint8 index (i0, i1, i2, i3, i4, i5, i6, i7); + return _mm256_castps_si256 (_mm256_permutevar8x32_ps (_mm256_castsi256_ps(a.simd()), index.simd())); +#else + return vint8 (a[i0], a[i1], a[i2], a[i3], a[i4], a[i5], a[i6], a[i7]); +#endif +} + +template OIIO_FORCEINLINE vint8 broadcast_element(const vint8& a) { + return shuffle(a); +} + +// DEPRECATED(3.1): old name; use broadcast_element instead +template OIIO_FORCEINLINE vint8 shuffle(const vint8& a) { + return broadcast_element(a); +} + + +template +OIIO_FORCEINLINE int extract (const vint8& v) { +#if OIIO_SIMD_AVX && !_WIN32 + return _mm256_extract_epi32(v.simd(), i); +#else + return v[i]; +#endif +} + + +template +OIIO_FORCEINLINE vint8 insert (const vint8& a, int val) { +#if OIIO_SIMD_AVX && !_WIN32 + return _mm256_insert_epi32 (a.simd(), val, i); +#else + vint8 tmp = a; + tmp[i] = val; + return tmp; +#endif +} + + +OIIO_FORCEINLINE int vint8::x () const { return extract<0>(*this); } +OIIO_FORCEINLINE int vint8::y () const { return extract<1>(*this); } +OIIO_FORCEINLINE int vint8::z () const { return extract<2>(*this); } +OIIO_FORCEINLINE int vint8::w () const { return extract<3>(*this); } +OIIO_FORCEINLINE void vint8::set_x (int val) { *this = insert<0>(*this, val); } +OIIO_FORCEINLINE void vint8::set_y (int val) { *this = insert<1>(*this, val); } +OIIO_FORCEINLINE void vint8::set_z (int val) { *this = insert<2>(*this, val); } +OIIO_FORCEINLINE void vint8::set_w (int val) { *this = insert<3>(*this, val); } + + +OIIO_FORCEINLINE vint8 bitcast_to_int (const vbool8& x) +{ +#if OIIO_SIMD_AVX + return _mm256_castps_si256 (x.simd()); +#else + return vint8(bitcast_to_int(x.lo()), bitcast_to_int(x.hi())); +#endif +} + + +OIIO_FORCEINLINE vint8 vreduce_add (const vint8& v) { +#if OIIO_SIMD_AVX >= 2 + // From Syrah: + vint8 ab_cd_0_0_ef_gh_0_0 = _mm256_hadd_epi32(v.simd(), _mm256_setzero_si256()); + vint8 abcd_0_0_0_efgh_0_0_0 = _mm256_hadd_epi32(ab_cd_0_0_ef_gh_0_0, _mm256_setzero_si256()); + // get efgh in the 0-idx slot + vint8 efgh = shuffle<4>(abcd_0_0_0_efgh_0_0_0); + vint8 final_sum = abcd_0_0_0_efgh_0_0_0 + efgh; + return shuffle<0>(final_sum); +#elif OIIO_SIMD_SSE || OIIO_SIMD_NEON + vint4 hadd4 = vreduce_add(v.lo()) + vreduce_add(v.hi()); + return vint8(hadd4, hadd4); +#else + return vint8(reduce_add(v)); +#endif +} + + +OIIO_FORCEINLINE int reduce_add (const vint8& v) { +#if OIIO_SIMD_SSE || OIIO_SIMD_NEON + return extract<0> (vreduce_add(v)); +#else + return reduce_add(v.lo()) + reduce_add(v.hi()); +#endif +} + + +OIIO_FORCEINLINE int reduce_and (const vint8& v) { +#if OIIO_SSE_AVX >= 2 + vint8 ab = v & shuffle<1,1,3,3,5,5,7,7>(v); // ab bb cd dd ef ff gh hh + vint8 abcd = ab & shuffle<2,2,2,2,6,6,6,6>(ab); // abcd x x x efgh x x x + vint8 abcdefgh = abcd & shuffle<4>(abcdefgh); // abcdefgh x x x x x x x + return extract<0> (abcdefgh); +#else + // AVX 1.0 or less -- use SSE + return reduce_and(v.lo() & v.hi()); +#endif +} + + +OIIO_FORCEINLINE int reduce_or (const vint8& v) { +#if OIIO_SSE_AVX >= 2 + vint8 ab = v | shuffle<1,1,3,3,5,5,7,7>(v); // ab bb cd dd ef ff gh hh + vint8 abcd = ab | shuffle<2,2,2,2,6,6,6,6>(ab); // abcd x x x efgh x x x + vint8 abcdefgh = abcd | shuffle<4>(abcdefgh); // abcdefgh x x x x x x x + return extract<0> (abcdefgh); +#else + // AVX 1.0 or less -- use SSE + return reduce_or(v.lo() | v.hi()); +#endif +} + + +OIIO_FORCEINLINE vint8 blend (const vint8& a, const vint8& b, const vbool8& mask) { +#if OIIO_SIMD_AVX + return _mm256_castps_si256 (_mm256_blendv_ps (_mm256_castsi256_ps(a.simd()), + _mm256_castsi256_ps(b.simd()), mask)); +#elif OIIO_SIMD_SSE + return vint8 (blend(a.lo(), b.lo(), mask.lo()), + blend(a.hi(), b.hi(), mask.hi())); +#else + SIMD_RETURN (vint8, mask[i] ? b[i] : a[i]); +#endif +} + + +OIIO_FORCEINLINE vint8 blend0 (const vint8& a, const vbool8& mask) { +// FIXME: More efficient for AVX-512 to use +// _mm256_maxkz_mov_epi32(_mm256_movemask_ps(maxk),a))? +#if OIIO_SIMD_AVX + return _mm256_castps_si256(_mm256_and_ps(_mm256_castsi256_ps(a.simd()), mask)); +#elif OIIO_SIMD_SSE + return vint8 (blend0(a.lo(), mask.lo()), + blend0(a.hi(), mask.hi())); +#else + SIMD_RETURN (vint8, mask[i] ? a[i] : 0.0f); +#endif +} + + +OIIO_FORCEINLINE vint8 blend0not (const vint8& a, const vbool8& mask) { +// FIXME: More efficient for AVX-512 to use +// _mm256_maxkz_mov_epi32(_mm256_movemask_ps(!maxk),a))? +#if OIIO_SIMD_AVX + return _mm256_castps_si256 (_mm256_andnot_ps (mask.simd(), _mm256_castsi256_ps(a.simd()))); +#elif OIIO_SIMD_SSE + return vint8 (blend0not(a.lo(), mask.lo()), + blend0not(a.hi(), mask.hi())); +#else + SIMD_RETURN (vint8, mask[i] ? 0.0f : a[i]); +#endif +} + +OIIO_FORCEINLINE vint8 select (const vbool8& mask, const vint8& a, const vint8& b) { + return blend (b, a, mask); +} + + +OIIO_FORCEINLINE vint8 abs (const vint8& a) { +#if OIIO_SIMD_AVX >= 2 + return _mm256_abs_epi32(a.simd()); +#elif OIIO_SIMD_SSE || OIIO_SIMD_NEON + return vint8(abs(a.lo()), abs(a.hi())); +#else + SIMD_RETURN (vint8, std::abs(a[i])); +#endif +} + + +OIIO_FORCEINLINE vint8 min (const vint8& a, const vint8& b) { +#if OIIO_SIMD_AVX >= 2 + return _mm256_min_epi32 (a, b); +#else + return vint8 (min(a.lo(), b.lo()), min(a.hi(), b.hi())); +#endif +} + + +OIIO_FORCEINLINE vint8 max (const vint8& a, const vint8& b) { +#if OIIO_SIMD_AVX >= 2 + return _mm256_max_epi32 (a, b); +#else + return vint8 (max(a.lo(), b.lo()), max(a.hi(), b.hi())); +#endif +} + + +OIIO_FORCEINLINE vint8 rotl(const vint8& x, int s) { +#if OIIO_SIMD_AVX >= 512 && OIIO_AVX512VL_ENABLED + // return _mm256_rol_epi32 (x, s); + // We want to do this ^^^ but this intrinsic only takes an *immediate* + // argument for s, and there isn't a way to express in C++ that a + // parameter must be an immediate/literal value from the caller. + return (x<= 2 + return _mm256_andnot_si256 (a.simd(), b.simd()); +#elif OIIO_SIMD_AVX >= 1 + return _mm256_castps_si256 (_mm256_andnot_ps (_mm256_castsi256_ps(a.simd()), _mm256_castsi256_ps(b.simd()))); +#else + SIMD_RETURN (vint8, ~(a[i]) & b[i]); +#endif +} + + +// Implementation had to be after the definition of vint8::Zero. +OIIO_FORCEINLINE vbool8::vbool8 (const vint8& ival) { + m_simd = (ival != vint8::Zero()); +} + + + +OIIO_FORCEINLINE vint8 safe_mod (const vint8& a, const vint8& b) { + // NO INTEGER MODULUS IN SSE! + SIMD_RETURN (vint8, b[i] ? a[i] % b[i] : 0); +} + +OIIO_FORCEINLINE vint8 safe_mod (const vint8& a, int b) { + return b ? (a % b) : vint8::Zero(); +} + + + + +////////////////////////////////////////////////////////////////////// +// vint16 implementation + +#if defined(__INTEL_COMPILER) +// For reasons we don't understand, all sorts of failures crop up only on icc +// if we make this =default. Although we still support icc for now, it's a +// discontinued compiler, so we special-case it here rather than spend a lot +// of time investigating what might be broken (and would of course never be +// fixed if it's a compiler bug). +OIIO_FORCEINLINE vint16& vint16::operator=(const vint16& other) { + m_simd = other.m_simd; + return *this; +} +#endif + +OIIO_FORCEINLINE int vint16::operator[] (int i) const { + OIIO_DASSERT(i= 512 + m_simd = _mm512_set1_epi32 (a); +#else + m_8[0].load (a); + m_8[1].load (a); +#endif +} + + +OIIO_FORCEINLINE void vint16::load (int v0, int v1, int v2, int v3, + int v4, int v5, int v6, int v7, + int v8, int v9, int v10, int v11, + int v12, int v13, int v14, int v15) { +#if OIIO_SIMD_AVX >= 512 + m_simd = _mm512_setr_epi32 (v0, v1, v2, v3, v4, v5, v6, v7, + v8, v9, v10, v11, v12, v13, v14, v15); +#else + m_val[ 0] = v0; + m_val[ 1] = v1; + m_val[ 2] = v2; + m_val[ 3] = v3; + m_val[ 4] = v4; + m_val[ 5] = v5; + m_val[ 6] = v6; + m_val[ 7] = v7; + m_val[ 8] = v8; + m_val[ 9] = v9; + m_val[10] = v10; + m_val[11] = v11; + m_val[12] = v12; + m_val[13] = v13; + m_val[14] = v14; + m_val[15] = v15; +#endif +} + + +OIIO_FORCEINLINE void vint16::load (const int *values) { +#if OIIO_SIMD_AVX >= 512 + m_simd = _mm512_loadu_si512 ((const simd_t *)values); +#else + m_8[0].load (values); + m_8[1].load (values+8); +#endif +} + + +OIIO_FORCEINLINE void vint16::load (const int *values, int n) +{ +#if OIIO_SIMD_AVX >= 512 + m_simd = _mm512_maskz_loadu_epi32 (__mmask16(~(0xffff << n)), values); +#else + if (n > 8) { + m_8[0].load (values); + m_8[1].load (values+8, n-8); + } else { + m_8[0].load (values, n); + m_8[1].clear (); + } +#endif +} + + +OIIO_FORCEINLINE void vint16::load (const short *values) { +#if OIIO_SIMD_AVX >= 512 + m_simd = _mm512_cvtepi16_epi32(_mm256_loadu_si256((__m256i*)values)); +#else + m_8[0].load (values); + m_8[1].load (values+8); +#endif +} + +OIIO_FORCEINLINE void vint16::load (const unsigned short *values) { +#if OIIO_SIMD_AVX >= 512 + m_simd = _mm512_cvtepu16_epi32(_mm256_loadu_si256((__m256i*)values)); +#else + m_8[0].load (values); + m_8[1].load (values+8); +#endif +} + + +OIIO_FORCEINLINE void vint16::load (const char *values) { +#if OIIO_SIMD_AVX >= 512 + m_simd = _mm512_cvtepi8_epi32(_mm_loadu_si128((__m128i*)values)); +#else + m_8[0].load (values); + m_8[1].load (values+8); +#endif +} + +OIIO_FORCEINLINE void vint16::load (const unsigned char *values) { +#if OIIO_SIMD_AVX >= 512 + m_simd = _mm512_cvtepu8_epi32(_mm_loadu_si128((__m128i*)values)); +#else + m_8[0].load (values); + m_8[1].load (values+8); +#endif +} + + +OIIO_FORCEINLINE vint16::vint16 (int a) { load(a); } + +OIIO_FORCEINLINE vint16::vint16 (int v0, int v1, int v2, int v3, + int v4, int v5, int v6, int v7, + int v8, int v9, int v10, int v11, + int v12, int v13, int v14, int v15) { + load (v0, v1, v2, v3, v4, v5, v6, v7, + v8, v9, v10, v11, v12, v13, v14, v15); +} + +OIIO_FORCEINLINE vint16::vint16 (const int *vals) { load (vals); } +OIIO_FORCEINLINE vint16::vint16 (const unsigned short *vals) { load(vals); } +OIIO_FORCEINLINE vint16::vint16 (const short *vals) { load(vals); } +OIIO_FORCEINLINE vint16::vint16 (const unsigned char *vals) { load(vals); } +OIIO_FORCEINLINE vint16::vint16 (const char *vals) { load(vals); } + + +OIIO_FORCEINLINE void vint16::load_mask (const vbool16 &mask, const int *values) { +#if OIIO_SIMD_AVX >= 512 + m_simd = _mm512_maskz_loadu_epi32 (mask, (const simd_t *)values); +#else + m_8[0].load_mask (mask.lo(), values); + m_8[1].load_mask (mask.hi(), values+8); +#endif +} + + +OIIO_FORCEINLINE void vint16::store_mask (const vbool16 &mask, int *values) const { +#if OIIO_SIMD_AVX >= 512 + _mm512_mask_storeu_epi32 (values, mask.bitmask(), m_simd); +#else + lo().store_mask (mask.lo(), values); + hi().store_mask (mask.hi(), values+8); +#endif +} + + +template +OIIO_FORCEINLINE void +vint16::gather (const value_t *baseptr, const vint_t& vindex) { +#if OIIO_SIMD_AVX >= 512 + m_simd = _mm512_i32gather_epi32 (vindex, baseptr, scale); +#else + m_8[0].gather (baseptr, vindex.lo()); + m_8[1].gather (baseptr, vindex.hi()); +#endif +} + +template +OIIO_FORCEINLINE void +vint16::gather_mask (const vbool_t& mask, const value_t *baseptr, const vint_t& vindex) { +#if OIIO_SIMD_AVX >= 512 + m_simd = _mm512_mask_i32gather_epi32 (m_simd, mask, vindex, baseptr, scale); +#else + m_8[0].gather_mask (mask.lo(), baseptr, vindex.lo()); + m_8[1].gather_mask (mask.hi(), baseptr, vindex.hi()); +#endif +} + +template +OIIO_FORCEINLINE void +vint16::scatter (value_t *baseptr, const vint_t& vindex) const { +#if OIIO_SIMD_AVX >= 512 + _mm512_i32scatter_epi32 (baseptr, vindex, m_simd, scale); +#else + lo().scatter (baseptr, vindex.lo()); + hi().scatter (baseptr, vindex.hi()); +#endif +} + +template +OIIO_FORCEINLINE void +vint16::scatter_mask (const vbool_t& mask, value_t *baseptr, + const vint_t& vindex) const { +#if OIIO_SIMD_AVX >= 512 + _mm512_mask_i32scatter_epi32 (baseptr, mask, vindex, m_simd, scale); +#else + lo().scatter_mask (mask.lo(), baseptr, vindex.lo()); + hi().scatter_mask (mask.hi(), baseptr, vindex.hi()); +#endif +} + + +OIIO_FORCEINLINE void vint16::store (int *values) const { +#if OIIO_SIMD_AVX >= 512 + // Use an unaligned store -- it's just as fast when the memory turns + // out to be aligned, nearly as fast even when unaligned. Not worth + // the headache of using stores that require alignment. + _mm512_storeu_si512 ((simd_t *)values, m_simd); +#else + lo().store (values); + hi().store (values+8); +#endif +} + + +OIIO_FORCEINLINE void vint16::clear () { +#if OIIO_SIMD_AVX >= 512 + m_simd = _mm512_setzero_si512(); +#else + *this = 0; +#endif +} + + +OIIO_FORCEINLINE const vint16 vint16::Zero () { +#if OIIO_SIMD_AVX >= 512 + return _mm512_setzero_epi32(); +#else + return 0; +#endif +} + +OIIO_FORCEINLINE const vint16 vint16::One () { return vint16(1); } + +OIIO_FORCEINLINE const vint16 vint16::NegOne () { return vint16(-1); } + + +OIIO_FORCEINLINE const vint16 vint16::Iota (int start, int step) { + return vint16 (start+0*step, start+1*step, start+2*step, start+3*step, + start+4*step, start+5*step, start+6*step, start+7*step, + start+8*step, start+9*step, start+10*step, start+11*step, + start+12*step, start+13*step, start+14*step, start+15*step); +} + + +OIIO_FORCEINLINE const vint16 vint16::Giota () { + return vint16 (1<<0, 1<<1, 1<<2, 1<<3, 1<<4, 1<<5, 1<<6, 1<<7, + 1<<8, 1<<9, 1<<10, 1<<11, 1<<12, 1<<13, 1<<14, 1<<15); +} + + +OIIO_FORCEINLINE vint8 vint16::lo () const { +#if OIIO_SIMD_AVX >= 512 + return _mm512_castsi512_si256 (simd()); +#else + return m_8[0]; +#endif +} + +OIIO_FORCEINLINE vint8 vint16::hi () const { +#if OIIO_SIMD_AVX >= 512 + return _mm512_extracti64x4_epi64 (simd(), 1); +#else + return m_8[1]; +#endif +} + + +OIIO_FORCEINLINE vint16::vint16 (const vint8& lo, const vint8 &hi) { +#if OIIO_SIMD_AVX >= 512 + __m512i r = _mm512_castsi256_si512 (lo); + m_simd = _mm512_inserti32x8 (r, hi, 1); +#else + m_8[0] = lo; + m_8[1] = hi; +#endif +} + + +OIIO_FORCEINLINE vint16::vint16 (const vint4 &a, const vint4 &b, const vint4 &c, const vint4 &d) { +#if OIIO_SIMD_AVX >= 512 + m_simd = _mm512_broadcast_i32x4(a); + m_simd = _mm512_inserti32x4 (m_simd, b, 1); + m_simd = _mm512_inserti32x4 (m_simd, c, 2); + m_simd = _mm512_inserti32x4 (m_simd, d, 3); +#else + m_8[0] = vint8(a,b); + m_8[1] = vint8(c,d); +#endif +} + + +OIIO_FORCEINLINE vint16 operator+ (const vint16& a, const vint16& b) { +#if OIIO_SIMD_AVX >= 512 + return _mm512_add_epi32 (a.simd(), b.simd()); +#else + return vint16 (a.lo()+b.lo(), a.hi()+b.hi()); +#endif +} + + +OIIO_FORCEINLINE const vint16& operator+= (vint16& a, const vint16& b) { + return a = a + b; +} + + +OIIO_FORCEINLINE vint16 operator- (const vint16& a) { +#if OIIO_SIMD_AVX >= 512 + return _mm512_sub_epi32 (_mm512_setzero_si512(), a); +#else + return vint16 (-a.lo(), -a.hi()); +#endif +} + + +OIIO_FORCEINLINE vint16 operator- (const vint16& a, const vint16& b) { +#if OIIO_SIMD_AVX >= 512 + return _mm512_sub_epi32 (a.simd(), b.simd()); +#else + return vint16 (a.lo()-b.lo(), a.hi()-b.hi()); +#endif +} + + +OIIO_FORCEINLINE const vint16 &operator-= (vint16& a, const vint16& b) { + return a = a - b; +} + + +OIIO_FORCEINLINE vint16 operator* (const vint16& a, const vint16& b) { +#if OIIO_SIMD_AVX >= 512 + return _mm512_mullo_epi32 (a.simd(), b.simd()); +#else + return vint16 (a.lo()*b.lo(), a.hi()*b.hi()); +#endif +} + + +OIIO_FORCEINLINE const vint16& operator*= (vint16& a, const vint16& b) { return a = a * b; } +OIIO_FORCEINLINE const vint16& operator*= (vint16& a, int b) { return a = a * b; } + + +OIIO_FORCEINLINE vint16 operator/ (const vint16& a, const vint16& b) { + // NO INTEGER DIVISION IN AVX512! + SIMD_RETURN (vint16, a[i] / b[i]); +} + +OIIO_FORCEINLINE const vint16& operator/= (vint16& a, const vint16& b) { return a = a / b; } + + +OIIO_FORCEINLINE vint16 operator% (const vint16& a, const vint16& b) { + // NO INTEGER MODULUS IN AVX512! + SIMD_RETURN (vint16, a[i] % b[i]); +} + +OIIO_FORCEINLINE const vint16& operator%= (vint16& a, const vint16& b) { return a = a % b; } + +OIIO_FORCEINLINE vint16 operator% (const vint16& a, int w) { + // NO INTEGER MODULUS in AVX512! + SIMD_RETURN (vint16, a[i] % w); +} + +OIIO_FORCEINLINE const vint16& operator%= (vint16& a, int b) { return a = a % b; } + + +OIIO_FORCEINLINE vint16 operator& (const vint16& a, const vint16& b) { +#if OIIO_SIMD_AVX >= 512 + return _mm512_and_si512 (a.simd(), b.simd()); +#else + return vint16 (a.lo() & b.lo(), a.hi() & b.hi()); +#endif +} + +OIIO_FORCEINLINE const vint16& operator&= (vint16& a, const vint16& b) { return a = a & b; } + +OIIO_FORCEINLINE vint16 operator| (const vint16& a, const vint16& b) { +#if OIIO_SIMD_AVX >= 512 + return _mm512_or_si512 (a.simd(), b.simd()); +#else + return vint16 (a.lo() | b.lo(), a.hi() | b.hi()); +#endif +} + +OIIO_FORCEINLINE const vint16& operator|= (vint16& a, const vint16& b) { return a = a | b; } + +OIIO_FORCEINLINE vint16 operator^ (const vint16& a, const vint16& b) { +#if OIIO_SIMD_AVX >= 512 + return _mm512_xor_si512 (a.simd(), b.simd()); +#else + return vint16 (a.lo() ^ b.lo(), a.hi() ^ b.hi()); +#endif +} + +OIIO_FORCEINLINE const vint16& operator^= (vint16& a, const vint16& b) { return a = a ^ b; } + + +OIIO_FORCEINLINE vint16 operator~ (const vint16& a) { +#if OIIO_SIMD_AVX >= 512 + return a ^ a.NegOne(); +#else + return vint16 (~a.lo(), ~a.hi()); +#endif +} + + +OIIO_FORCEINLINE vint16 operator<< (const vint16& a, const unsigned int bits) { +#if OIIO_SIMD_AVX >= 512 + return _mm512_sllv_epi32 (a, vint16(int(bits))); + // return _mm512_slli_epi32 (a, bits); + // FIXME: can this be slli? +#else + return vint16 (a.lo() << bits, a.hi() << bits); +#endif +} + + +OIIO_FORCEINLINE const vint16& operator<<= (vint16& a, const unsigned int bits) { + return a = a << bits; +} + +OIIO_FORCEINLINE vint16 operator>> (const vint16& a, const unsigned int bits) { +#if OIIO_SIMD_AVX >= 512 + return _mm512_srav_epi32 (a, vint16(int(bits))); + // FIXME: can this be srai? +#else + return vint16 (a.lo() >> bits, a.hi() >> bits); +#endif +} + +OIIO_FORCEINLINE const vint16& operator>>= (vint16& a, const unsigned int bits) { + return a = a >> bits; +} + + +OIIO_FORCEINLINE vint16 srl (const vint16& a, const unsigned int bits) { +#if OIIO_SIMD_AVX >= 512 + return _mm512_srlv_epi32 (a, vint16(int(bits))); + // FIXME: can this be srli? +#else + return vint16 (srl(a.lo(), bits), srl (a.hi(), bits)); +#endif +} + + +OIIO_FORCEINLINE vbool16 operator== (const vint16& a, const vint16& b) { +#if OIIO_SIMD_AVX >= 512 + return _mm512_cmp_epi32_mask (a.simd(), b.simd(), 0 /*_MM_CMPINT_EQ*/); +#else /* Fall back to 8-wide */ + return vbool16 (a.lo() == b.lo(), a.hi() == b.hi()); +#endif +} + + +OIIO_FORCEINLINE vbool16 operator!= (const vint16& a, const vint16& b) { +#if OIIO_SIMD_AVX >= 512 + return _mm512_cmp_epi32_mask (a.simd(), b.simd(), 4 /*_MM_CMPINT_NEQ*/); +#else /* Fall back to 8-wide */ + return vbool16 (a.lo() != b.lo(), a.hi() != b.hi()); +#endif +} + + +OIIO_FORCEINLINE vbool16 operator> (const vint16& a, const vint16& b) { +#if OIIO_SIMD_AVX >= 512 + return _mm512_cmp_epi32_mask (a.simd(), b.simd(), 6 /*_MM_CMPINT_NLE*/); +#else /* Fall back to 8-wide */ + return vbool16 (a.lo() > b.lo(), a.hi() > b.hi()); +#endif +} + + +OIIO_FORCEINLINE vbool16 operator< (const vint16& a, const vint16& b) { +#if OIIO_SIMD_AVX >= 512 + return _mm512_cmp_epi32_mask (a.simd(), b.simd(), 1 /*_MM_CMPINT_LT*/); +#else /* Fall back to 8-wide */ + return vbool16 (a.lo() < b.lo(), a.hi() < b.hi()); +#endif +} + + +OIIO_FORCEINLINE vbool16 operator>= (const vint16& a, const vint16& b) { +#if OIIO_SIMD_AVX >= 512 + return _mm512_cmp_epi32_mask (a.simd(), b.simd(), 5 /*_MM_CMPINT_NLT*/); +#else /* Fall back to 8-wide */ + return vbool16 (a.lo() >= b.lo(), a.hi() >= b.hi()); +#endif +} + + +OIIO_FORCEINLINE vbool16 operator<= (const vint16& a, const vint16& b) { +#if OIIO_SIMD_AVX >= 512 + return _mm512_cmp_epi32_mask (a.simd(), b.simd(), 2 /*_MM_CMPINT_LE*/); +#else /* Fall back to 8-wide */ + return vbool16 (a.lo() <= b.lo(), a.hi() <= b.hi()); +#endif +} + + +inline std::ostream& operator<< (std::ostream& cout, const vint16& val) { + cout << val[0]; + for (int i = 1; i < val.elements; ++i) + cout << ' ' << val[i]; + return cout; +} + + + +OIIO_FORCEINLINE void vint16::store (int *values, int n) const { + OIIO_DASSERT (n >= 0 && n <= elements); +#if 0 && OIIO_SIMD_AVX >= 512 + // This SHOULD be fast, but in my benchmarks, it is slower! + // (At least on the AVX512 hardware I have, Xeon Silver 4110.) + // Re-test this periodically with new Intel hardware. + _mm512_mask_storeu_epi32 (values, __mmask16(~(0xffff << n)), m_simd); +#else + if (n > 8) { + m_8[0].store (values); + m_8[1].store (values+8, n-8); + } else { + m_8[0].store (values, n); + } +#endif +} + + +OIIO_FORCEINLINE void vint16::store (unsigned short *values) const { +#if OIIO_SIMD_AVX512 + _mm512_mask_cvtepi32_storeu_epi16 (values, __mmask16(0xff), m_simd); +#elif OIIO_SIMD_AVX >= 2 + lo().store (values); + hi().store (values+8); +#else + SIMD_DO (values[i] = m_val[i]); +#endif +} + + +OIIO_FORCEINLINE void vint16::store (unsigned char *values) const { +#if OIIO_SIMD_AVX512 + _mm512_mask_cvtepi32_storeu_epi8 (values, __mmask16(0xff), m_simd); +#elif OIIO_SIMD_AVX >= 2 + lo().store (values); + hi().store (values+8); +#else + SIMD_DO (values[i] = m_val[i]); +#endif +} + + + +// Shuffle groups of 4 +template +vint16 shuffle4 (const vint16& a) { +#if OIIO_SIMD_AVX >= 512 + __m512 x = _mm512_castsi512_ps(a); + return _mm512_castps_si512(_mm512_shuffle_f32x4(x,x,_MM_SHUFFLE(i3,i2,i1,i0))); +#else + vint4 x[4]; + a.store ((int *)x); + return vint16 (x[i0], x[i1], x[i2], x[i3]); +#endif +} + +template vint16 shuffle4 (const vint16& a) { + return shuffle4 (a); +} + +template +vint16 shuffle (const vint16& a) { +#if OIIO_SIMD_AVX >= 512 + __m512 x = _mm512_castsi512_ps(a); + return _mm512_castps_si512(_mm512_permute_ps(x,_MM_SHUFFLE(i3,i2,i1,i0))); +#else + vint4 x[4]; + a.store ((int *)x); + return vint16 (shuffle(x[0]), shuffle(x[1]), + shuffle(x[2]), shuffle(x[3])); +#endif +} + +template vint16 broadcast_element(const vint16& a) { + return a[i]; +} + +// DEPRECATED(3.1): old name and nonstandard use +template +OIIO_DEPRECATED("Use broadcast_element (3.1)") +vint16 shuffle(const vint16& a) { + return broadcast_element (a); +} + + +template +OIIO_FORCEINLINE int extract (const vint16& a) { + return a[i]; +} + + +template +OIIO_FORCEINLINE vint16 insert (const vint16& a, int val) { + vint16 tmp = a; + tmp[i] = val; + return tmp; +} + + +OIIO_FORCEINLINE int vint16::x () const { +#if OIIO_SIMD_AVX >= 512 + return _mm_cvtsi128_si32(_mm512_castsi512_si128(m_simd)); +#else + return m_val[0]; +#endif +} + +OIIO_FORCEINLINE int vint16::y () const { return m_val[1]; } +OIIO_FORCEINLINE int vint16::z () const { return m_val[2]; } +OIIO_FORCEINLINE int vint16::w () const { return m_val[3]; } +OIIO_FORCEINLINE void vint16::set_x (int val) { m_val[0] = val; } +OIIO_FORCEINLINE void vint16::set_y (int val) { m_val[1] = val; } +OIIO_FORCEINLINE void vint16::set_z (int val) { m_val[2] = val; } +OIIO_FORCEINLINE void vint16::set_w (int val) { m_val[3] = val; } + + +OIIO_FORCEINLINE vint16 bitcast_to_int (const vbool16& x) +{ +#if OIIO_SIMD_AVX >= 512 + return _mm512_maskz_set1_epi32 (x, -1); +#else + return vint16 (bitcast_to_int(x.lo()), bitcast_to_int(x.hi())); +#endif +} + + +OIIO_FORCEINLINE vint16 vreduce_add (const vint16& v) { +#if OIIO_SIMD_AVX >= 512 + // Nomenclature: ABCD are the vint4's comprising v + // First, add the vint4's and make them all the same + vint16 AB_AB_CD_CD = v + shuffle4<1,0,3,2>(v); // each adjacent vint4 is summed + vint16 w = AB_AB_CD_CD + shuffle4<2,3,0,1>(AB_AB_CD_CD); // ABCD in all quads + // Now, add within each vint4 + vint16 ab_ab_cd_cd = w + shuffle<1,0,3,2>(w); // each adjacent int is summed + return ab_ab_cd_cd + shuffle<2,3,0,1>(ab_ab_cd_cd); +#else + vint8 sum = vreduce_add(v.lo()) + vreduce_add(v.hi()); + return vint16 (sum, sum); +#endif +} + + +OIIO_FORCEINLINE int reduce_add (const vint16& v) { +#if OIIO_SIMD_AVX >= 512 + return vreduce_add(v).x(); +#else + return reduce_add(v.lo()) + reduce_add(v.hi()); +#endif +} + + +OIIO_FORCEINLINE int reduce_and (const vint16& v) { +#if OIIO_SIMD_AVX >= 512 + // Nomenclature: ABCD are the vint4's comprising v + // First, and the vint4's and make them all the same + vint16 AB_AB_CD_CD = v & shuffle4<1,0,3,2>(v); // each adjacent vint4 is summed + vint16 w = AB_AB_CD_CD & shuffle4<2,3,0,1>(AB_AB_CD_CD); + // Now, and within each vint4 + vint16 ab_ab_cd_cd = w & shuffle<1,0,3,2>(w); // each adjacent int is summed + vint16 r = ab_ab_cd_cd & shuffle<2,3,0,1>(ab_ab_cd_cd); + return r.x(); +#else + return reduce_and(v.lo()) & reduce_and(v.hi()); +#endif +} + + +OIIO_FORCEINLINE int reduce_or (const vint16& v) { +#if OIIO_SIMD_AVX >= 512 + // Nomenclature: ABCD are the vint4's comprising v + // First, or the vint4's or make them all the same + vint16 AB_AB_CD_CD = v | shuffle4<1,0,3,2>(v); // each adjacent vint4 is summed + vint16 w = AB_AB_CD_CD | shuffle4<2,3,0,1>(AB_AB_CD_CD); + // Now, or within each vint4 + vint16 ab_ab_cd_cd = w | shuffle<1,0,3,2>(w); // each adjacent int is summed + vint16 r = ab_ab_cd_cd | shuffle<2,3,0,1>(ab_ab_cd_cd); + return r.x(); +#else + return reduce_or(v.lo()) | reduce_or(v.hi()); +#endif +} + + + +OIIO_FORCEINLINE vint16 blend (const vint16& a, const vint16& b, const vbool16& mask) { +#if OIIO_SIMD_AVX >= 512 + return _mm512_mask_blend_epi32 (mask, a, b); +#else + return vint16 (blend (a.lo(), b.lo(), mask.lo()), + blend (a.hi(), b.hi(), mask.hi())); +#endif +} + + +OIIO_FORCEINLINE vint16 blend0 (const vint16& a, const vbool16& mask) { +#if OIIO_SIMD_AVX >= 512 + return _mm512_maskz_mov_epi32 (mask, a); +#else + return vint16 (blend0 (a.lo(), mask.lo()), + blend0 (a.hi(), mask.hi())); +#endif +} + + +OIIO_FORCEINLINE vint16 blend0not (const vint16& a, const vbool16& mask) { +#if OIIO_SIMD_AVX >= 512 + return _mm512_maskz_mov_epi32 (!mask, a); +#else + return vint16 (blend0not (a.lo(), mask.lo()), + blend0not (a.hi(), mask.hi())); +#endif +} + +OIIO_FORCEINLINE vint16 select (const vbool16& mask, const vint16& a, const vint16& b) { + return blend (b, a, mask); +} + + +OIIO_FORCEINLINE vint16 abs (const vint16& a) { +#if OIIO_SIMD_AVX >= 512 + return _mm512_abs_epi32(a.simd()); +#else + return vint16 (abs(a.lo()), abs(a.hi())); +#endif +} + + +OIIO_FORCEINLINE vint16 min (const vint16& a, const vint16& b) { +#if OIIO_SIMD_AVX >= 512 + return _mm512_min_epi32 (a, b); +#else + return vint16 (min(a.lo(), b.lo()), min(a.hi(), b.hi())); +#endif +} + + +OIIO_FORCEINLINE vint16 max (const vint16& a, const vint16& b) { +#if OIIO_SIMD_AVX >= 512 + return _mm512_max_epi32 (a, b); +#else + return vint16 (max(a.lo(), b.lo()), max(a.hi(), b.hi())); +#endif +} + + +OIIO_FORCEINLINE vint16 rotl(const vint16& x, int s) { +#if OIIO_SIMD_AVX >= 512 && OIIO_AVX512VL_ENABLED + // return _mm512_rol_epi32 (x, s); + // We want to do this ^^^ but this intrinsic only takes an *immediate* + // argument for s, and there isn't a way to express in C++ that a + // parameter must be an immediate/literal value from the caller. + return (x<= 512 + return _mm512_andnot_epi32 (a.simd(), b.simd()); +#else + return vint16 (andnot(a.lo(), b.lo()), andnot(a.hi(), b.hi())); +#endif +} + + + +OIIO_FORCEINLINE vint16 safe_mod (const vint16& a, const vint16& b) { + // NO INTEGER MODULUS IN SSE! + SIMD_RETURN (vint16, b[i] ? a[i] % b[i] : 0); +} + +OIIO_FORCEINLINE vint16 safe_mod (const vint16& a, int b) { + return b ? (a % b) : vint16::Zero(); +} + + + + + +////////////////////////////////////////////////////////////////////// +// vfloat4 implementation + + +OIIO_FORCEINLINE vfloat4::vfloat4 (const vint4& ival) { +#if OIIO_SIMD_SSE + m_simd = _mm_cvtepi32_ps (ival.simd()); +#elif OIIO_SIMD_NEON + m_simd = vcvtq_f32_s32(ival.simd()); +#else + SIMD_CONSTRUCT (float(ival[i])); +#endif +} + + +OIIO_FORCEINLINE const vfloat4 vfloat4::Zero () { +#if OIIO_SIMD_SSE + return _mm_setzero_ps(); +#else + return vfloat4(0.0f); +#endif +} + +OIIO_FORCEINLINE const vfloat4 vfloat4::One () { + return vfloat4(1.0f); +} + +OIIO_FORCEINLINE const vfloat4 vfloat4::Iota (float start, float step) { + return vfloat4 (start+0.0f*step, start+1.0f*step, start+2.0f*step, start+3.0f*step); +} + +/// Set all components to 0.0 +OIIO_FORCEINLINE void vfloat4::clear () { +#if OIIO_SIMD_SSE + m_simd = _mm_setzero_ps(); +#else + load (0.0f); +#endif +} + + +OIIO_FORCEINLINE float& vfloat4::operator[] (int i) { + OIIO_DASSERT(i= 0 && n <= elements); +#if OIIO_SIMD_AVX >= 512 && OIIO_AVX512VL_ENABLED + m_simd = _mm_maskz_loadu_ps (__mmask8(~(0xf << n)), values); +#elif OIIO_SIMD_SSE + switch (n) { + case 1: + m_simd = _mm_load_ss (values); + break; + case 2: + // Trickery: load one double worth of bits! + m_simd = _mm_castpd_ps (_mm_load_sd ((const double*)values)); + break; + case 3: + m_simd = _mm_setr_ps (values[0], values[1], values[2], 0.0f); + // This looks wasteful, but benchmarks show that it's the + // fastest way to set 3 values with the 4th getting zero. + // Actually, gcc and clang both turn it into something more + // efficient than _mm_setr_ps. The version below looks smart, + // but was much more expensive as the _mm_setr_ps! + // __m128 xy = _mm_castsi128_ps(_mm_loadl_epi64((const __m128i*)values)); + // m_simd = _mm_movelh_ps(xy, _mm_load_ss (values + 2)); + break; + case 4: + m_simd = _mm_loadu_ps (values); + break; + default: + clear(); + break; + } +#elif OIIO_SIMD_NEON + //switch (n) { + //case 1: m_simd = vdupq_n_f32(0); m_simd[0] = values[0]; break; + //case 2: load (values[0], values[1], 0.0f, 0.0f); break; + //case 3: load (values[0], values[1], values[2], 0.0f); break; + //case 4: m_simd = vld1q_f32 (values); break; + //default: break; + m_simd = vld1q_f32(values); + switch (n) { + case 1: m_simd = vsetq_lane_f32(0.0f, m_simd, 1); + case 2: m_simd = vsetq_lane_f32(0.0f, m_simd, 2); + case 3: m_simd = vsetq_lane_f32(0.0f, m_simd, 3); + default: break; + } +#else + for (int i = 0; i < n; ++i) + m_val[i] = values[i]; + for (int i = n; i < paddedelements; ++i) + m_val[i] = 0; +#endif +} + + +OIIO_FORCEINLINE void vfloat4::load (const unsigned short *values) { +#if OIIO_SIMD_SSE >= 2 + m_simd = _mm_cvtepi32_ps (vint4(values).simd()); + // You might guess that the following is faster, but it's NOT: + // NO! m_simd = _mm_cvtpu16_ps (*(__m64*)values); +#else + SIMD_CONSTRUCT (values[i]); +#endif +} + + +OIIO_FORCEINLINE void vfloat4::load (const short *values) { +#if OIIO_SIMD_SSE >= 2 + m_simd = _mm_cvtepi32_ps (vint4(values).simd()); +#else + SIMD_CONSTRUCT (values[i]); +#endif +} + + +OIIO_FORCEINLINE void vfloat4::load (const unsigned char *values) { +#if OIIO_SIMD_SSE >= 2 + m_simd = _mm_cvtepi32_ps (vint4(values).simd()); +#else + SIMD_CONSTRUCT (values[i]); +#endif +} + +// Load from an array of 4 char values, convert to float +OIIO_FORCEINLINE void vfloat4::load (const char *values) { +#if OIIO_SIMD_SSE >= 2 + m_simd = _mm_cvtepi32_ps (vint4(values).simd()); +#else + SIMD_CONSTRUCT (values[i]); +#endif +} + +#if defined(_HALF_H_) || defined(IMATH_HALF_H_) +OIIO_FORCEINLINE void vfloat4::load (const half *values) { +#if OIIO_F16C_ENABLED && OIIO_SIMD_SSE + /* Enabled 16 bit float instructions! */ + __m128i a = _mm_castpd_si128 (_mm_load_sd ((const double *)values)); + m_simd = _mm_cvtph_ps (a); +#elif OIIO_SIMD_SSE >= 2 + // SSE half-to-float by Fabian "ryg" Giesen. Public domain. + // https://gist.github.com/rygorous/2144712 + vint4 h ((const unsigned short *)values); +# define CONSTI(name) *(const __m128i *)&name +# define CONSTF(name) *(const __m128 *)&name + OIIO_SIMD_UINT4_CONST(mask_nosign, 0x7fff); + OIIO_SIMD_UINT4_CONST(magic, (254 - 15) << 23); + OIIO_SIMD_UINT4_CONST(was_infnan, 0x7bff); + OIIO_SIMD_UINT4_CONST(exp_infnan, 255 << 23); + __m128i mnosign = CONSTI(mask_nosign); + __m128i expmant = _mm_and_si128(mnosign, h); + __m128i justsign = _mm_xor_si128(h, expmant); + __m128i expmant2 = expmant; // copy (just here for counting purposes) + __m128i shifted = _mm_slli_epi32(expmant, 13); + __m128 scaled = _mm_mul_ps(_mm_castsi128_ps(shifted), *(const __m128 *)&magic); + __m128i b_wasinfnan = _mm_cmpgt_epi32(expmant2, CONSTI(was_infnan)); + __m128i sign = _mm_slli_epi32(justsign, 16); + __m128 infnanexp = _mm_and_ps(_mm_castsi128_ps(b_wasinfnan), CONSTF(exp_infnan)); + __m128 sign_inf = _mm_or_ps(_mm_castsi128_ps(sign), infnanexp); + __m128 final = _mm_or_ps(scaled, sign_inf); + // ~11 SSE2 ops. + m_simd = final; +# undef CONSTI +# undef CONSTF +#elif OIIO_SIMD_NEON + vint4 h ((const unsigned short *)values); + uint32x4_t u32 = vreinterpretq_u32_s32(h); + uint16x4_t u16 = vmovn_u32(u32); + float16x4_t f16 = vreinterpret_f16_u16(u16); + m_simd = vcvt_f32_f16(f16); +#else /* No SIMD defined: */ + SIMD_CONSTRUCT (values[i]); +#endif +} +#endif /* _HALF_H_ or _IMATH_H_ */ + +OIIO_FORCEINLINE void +vfloat4::load_pairs(const float* lo, const float* hi) +{ +#if OIIO_SIMD_SSE + m_simd = _mm_loadh_pi(_mm_loadl_pi(Zero(), (__m64*)lo), (__m64*)hi); +#else + m_val[0] = lo[0]; + m_val[1] = lo[1]; + m_val[2] = hi[0]; + m_val[3] = hi[1]; +#endif +} + +OIIO_FORCEINLINE void vfloat4::store (float *values) const { +#if OIIO_SIMD_SSE + // Use an unaligned store -- it's just as fast when the memory turns + // out to be aligned, nearly as fast even when unaligned. Not worth + // the headache of using stores that require alignment. + _mm_storeu_ps (values, m_simd); +#elif OIIO_SIMD_NEON + vst1q_f32 (values, m_simd); +#else + SIMD_DO (values[i] = m_val[i]); +#endif +} + +OIIO_FORCEINLINE void vfloat4::store (float *values, int n) const { + OIIO_DASSERT (n >= 0 && n <= 4); +#if 0 && OIIO_SIMD_AVX >= 512 && OIIO_AVX512VL_ENABLED + // This SHOULD be fast, but in my benchmarks, it is slower! + // (At least on the AVX512 hardware I have, Xeon Silver 4110.) + // Re-test this periodically with new Intel hardware. + _mm_mask_storeu_ps (values, __mmask8(~(0xf << n)), m_simd); +#elif OIIO_SIMD_SSE + switch (n) { + case 1: + _mm_store_ss (values, m_simd); + break; + case 2: + // Trickery: store two floats as a double worth of bits + _mm_store_sd ((double*)values, _mm_castps_pd(m_simd)); + break; + case 3: + values[0] = m_val[0]; + values[1] = m_val[1]; + values[2] = m_val[2]; + // This looks wasteful, but benchmarks show that it's the + // fastest way to store 3 values, in benchmarks was faster than + // this, below: + // _mm_store_sd ((double*)values, _mm_castps_pd(m_simd)); + // _mm_store_ss (values + 2, _mm_movehl_ps(m_simd,m_simd)); + break; + case 4: + store (values); + break; + default: + break; + } +#elif OIIO_SIMD_NEON + switch (n) { + case 1: + vst1q_lane_f32 (values, m_simd, 0); + break; + case 2: + vst1q_lane_f32 (values++, m_simd, 0); + vst1q_lane_f32 (values, m_simd, 1); + break; + case 3: + vst1q_lane_f32 (values++, m_simd, 0); + vst1q_lane_f32 (values++, m_simd, 1); + vst1q_lane_f32 (values, m_simd, 2); + break; + case 4: + vst1q_f32 (values, m_simd); break; + default: + break; + } +#else + for (int i = 0; i < n; ++i) + values[i] = m_val[i]; +#endif +} + +#if defined(_HALF_H_) || defined(IMATH_HALF_H_) +OIIO_FORCEINLINE void vfloat4::store (half *values) const { +#if OIIO_F16C_ENABLED && OIIO_SIMD_SSE + __m128i h = _mm_cvtps_ph (m_simd, _MM_FROUND_TO_NEAREST_INT); + _mm_store_sd ((double *)values, _mm_castsi128_pd(h)); +#elif OIIO_SIMD_NEON + float16x4_t f16 = vcvt_f16_f32(m_simd); + uint16x4_t u16 = vreinterpret_u16_f16(f16); + vst1_u16((unsigned short*)values, u16); +#else + SIMD_DO (values[i] = m_val[i]); +#endif +} +#endif + + +OIIO_FORCEINLINE void vfloat4::load_mask (int mask, const float *values) { +#if OIIO_SIMD_AVX >= 512 && OIIO_AVX512VL_ENABLED + m_simd = _mm_maskz_loadu_ps (__mmask8(mask), (const simd_t *)values); +#elif OIIO_SIMD_AVX + m_simd = _mm_maskload_ps (values, _mm_castps_si128(vbool_t::from_bitmask(mask))); +#else + SIMD_CONSTRUCT ((mask>>i) & 1 ? values[i] : 0.0f); +#endif +} + + +OIIO_FORCEINLINE void vfloat4::load_mask (const vbool_t& mask, const float *values) { +#if OIIO_SIMD_AVX >= 512 && OIIO_AVX512VL_ENABLED + m_simd = _mm_maskz_loadu_ps (__mmask8(mask.bitmask()), (const simd_t *)values); +#elif OIIO_SIMD_AVX + m_simd = _mm_maskload_ps (values, _mm_castps_si128(mask)); +#else + SIMD_CONSTRUCT (mask[i] ? values[i] : 0.0f); +#endif +} + + +OIIO_FORCEINLINE void vfloat4::store_mask (int mask, float *values) const { +#if OIIO_SIMD_AVX >= 512 && OIIO_AVX512VL_ENABLED + _mm_mask_storeu_ps (values, __mmask8(mask), m_simd); +#elif OIIO_SIMD_AVX + _mm_maskstore_ps (values, _mm_castps_si128(vbool_t::from_bitmask(mask)), m_simd); +#else + SIMD_DO (if ((mask>>i) & 1) values[i] = (*this)[i]); +#endif +} + + +OIIO_FORCEINLINE void vfloat4::store_mask (const vbool_t& mask, float *values) const { +#if OIIO_SIMD_AVX >= 512 && OIIO_AVX512VL_ENABLED + _mm_mask_storeu_ps (values, __mmask8(mask.bitmask()), m_simd); +#elif OIIO_SIMD_AVX + _mm_maskstore_ps (values, _mm_castps_si128(mask.simd()), m_simd); +#else + SIMD_DO (if (mask[i]) values[i] = (*this)[i]); +#endif +} + + +template +OIIO_FORCEINLINE void +vfloat4::gather (const value_t *baseptr, const vint_t& vindex) +{ +#if OIIO_SIMD_AVX >= 2 + m_simd = _mm_i32gather_ps (baseptr, vindex, scale); +#else + SIMD_CONSTRUCT (*(const value_t *)((const char *)baseptr + vindex[i]*scale)); +#endif +} + +template +OIIO_FORCEINLINE void +vfloat4::gather_mask (const vbool_t& mask, const value_t *baseptr, const vint_t& vindex) +{ +#if OIIO_SIMD_AVX >= 2 + m_simd = _mm_mask_i32gather_ps (m_simd, baseptr, vindex, mask, scale); +#else + SIMD_DO (if (mask[i]) m_val[i] = *(const value_t *)((const char *)baseptr + vindex[i]*scale)); +#endif +} + +template +OIIO_FORCEINLINE void +vfloat4::scatter (value_t *baseptr, const vint_t& vindex) const +{ +#if 0 && OIIO_SIMD_AVX >= 512 && OIIO_AVX512VL_ENABLED + // FIXME: disable because it benchmarks slower than the dumb way + _mm_i32scatter_ps (baseptr, vindex, m_simd, scale); +#else + SIMD_DO (*(value_t *)((char *)baseptr + vindex[i]*scale) = m_val[i]); +#endif +} + +template +OIIO_FORCEINLINE void +vfloat4::scatter_mask (const vbool_t& mask, value_t *baseptr, + const vint_t& vindex) const +{ +#if 0 && OIIO_SIMD_AVX >= 512 && OIIO_AVX512VL_ENABLED + // FIXME: disable because it benchmarks slower than the dumb way + _mm_mask_i32scatter_ps (baseptr, mask.bitmask(), vindex, m_simd, scale); +#else + SIMD_DO (if (mask[i]) *(value_t *)((char *)baseptr + vindex[i]*scale) = m_val[i]); +#endif +} + + +OIIO_FORCEINLINE vfloat4 operator+ (const vfloat4& a, const vfloat4& b) { +#if OIIO_SIMD_SSE + return _mm_add_ps (a.m_simd, b.m_simd); +#elif OIIO_SIMD_NEON + return vaddq_f32 (a.m_simd, b.m_simd); +#else + SIMD_RETURN (vfloat4, a[i] + b[i]); +#endif +} + +OIIO_FORCEINLINE const vfloat4 & vfloat4::operator+= (const vfloat4& a) { +#if OIIO_SIMD_SSE + m_simd = _mm_add_ps (m_simd, a.m_simd); +#elif OIIO_SIMD_NEON + m_simd = vaddq_f32 (m_simd, a.m_simd); +#else + SIMD_DO (m_val[i] += a[i]); +#endif + return *this; + } + +OIIO_FORCEINLINE vfloat4 vfloat4::operator- () const { +#if OIIO_SIMD_SSE + return _mm_sub_ps (_mm_setzero_ps(), m_simd); +#elif OIIO_SIMD_NEON + return vsubq_f32 (Zero(), m_simd); +#else + SIMD_RETURN (vfloat4, -m_val[i]); +#endif +} + +OIIO_FORCEINLINE vfloat4 operator- (const vfloat4& a, const vfloat4& b) { +#if OIIO_SIMD_SSE + return _mm_sub_ps (a.m_simd, b.m_simd); +#elif OIIO_SIMD_NEON + return vsubq_f32 (a.m_simd, b.m_simd); +#else + SIMD_RETURN (vfloat4, a[i] - b[i]); +#endif +} + +OIIO_FORCEINLINE const vfloat4 & vfloat4::operator-= (const vfloat4& a) { +#if OIIO_SIMD_SSE + m_simd = _mm_sub_ps (m_simd, a.m_simd); +#elif OIIO_SIMD_NEON + m_simd = vsubq_f32 (m_simd, a.m_simd); +#else + SIMD_DO (m_val[i] -= a[i]); +#endif + return *this; +} + +OIIO_FORCEINLINE vfloat4 operator* (const vfloat4& a, float b) { +#if OIIO_SIMD_SSE + return _mm_mul_ps (a.m_simd, _mm_set1_ps(b)); +#elif OIIO_SIMD_NEON + return vmulq_n_f32 (a.m_simd, b); +#else + SIMD_RETURN (vfloat4, a[i] * b); +#endif +} + +OIIO_FORCEINLINE vfloat4 operator* (float a, const vfloat4& b) { + return b * a; +} + +OIIO_FORCEINLINE vfloat4 operator* (const vfloat4& a, const vfloat4& b) { +#if OIIO_SIMD_SSE + return _mm_mul_ps (a.m_simd, b.m_simd); +#elif OIIO_SIMD_NEON + return vmulq_f32 (a.m_simd, b.m_simd); +#else + SIMD_RETURN (vfloat4, a[i] * b[i]); +#endif +} + +OIIO_FORCEINLINE const vfloat4 & vfloat4::operator*= (const vfloat4& a) { +#if OIIO_SIMD_SSE + m_simd = _mm_mul_ps (m_simd, a.m_simd); +#elif OIIO_SIMD_NEON + m_simd = vmulq_f32 (m_simd, a.m_simd); +#else + SIMD_DO (m_val[i] *= a[i]); +#endif + return *this; +} + +OIIO_FORCEINLINE const vfloat4 & vfloat4::operator*= (float val) { +#if OIIO_SIMD_SSE + m_simd = _mm_mul_ps (m_simd, _mm_set1_ps(val)); +#elif OIIO_SIMD_NEON + m_simd = vmulq_n_f32 (m_simd, val); +#else + SIMD_DO (m_val[i] *= val); +#endif + return *this; +} + +OIIO_FORCEINLINE vfloat4 operator/ (const vfloat4& a, const vfloat4& b) { +#if OIIO_SIMD_SSE + return _mm_div_ps (a.m_simd, b.m_simd); +#elif OIIO_SIMD_NEON && defined(__aarch64__) + return vdivq_f32 (a.m_simd, b.m_simd); +#else + SIMD_RETURN (vfloat4, a[i] / b[i]); +#endif +} + +OIIO_FORCEINLINE const vfloat4 & vfloat4::operator/= (const vfloat4& a) { +#if OIIO_SIMD_SSE + m_simd = _mm_div_ps (m_simd, a.m_simd); +#elif OIIO_SIMD_NEON && defined(__aarch64__) + m_simd = vdivq_f32 (m_simd, a.m_simd); +#else + SIMD_DO (m_val[i] /= a[i]); +#endif + return *this; +} + +OIIO_FORCEINLINE const vfloat4 & vfloat4::operator/= (float val) { +#if OIIO_SIMD_SSE + m_simd = _mm_div_ps (m_simd, _mm_set1_ps(val)); +#elif OIIO_SIMD_NEON && defined(__aarch64__) + m_simd = vdivq_f32 (m_simd, vfloat4(val)); +#else + SIMD_DO (m_val[i] /= val); +#endif + return *this; +} + +OIIO_FORCEINLINE vbool4 operator== (const vfloat4& a, const vfloat4& b) { +#if OIIO_SIMD_SSE + return _mm_cmpeq_ps (a.m_simd, b.m_simd); +#elif OIIO_SIMD_NEON + return vceqq_f32 (a.m_simd, b.m_simd); +#else + SIMD_RETURN (vbool4, a[i] == b[i] ? -1 : 0); +#endif +} + +OIIO_FORCEINLINE vbool4 operator!= (const vfloat4& a, const vfloat4& b) { +#if OIIO_SIMD_SSE + return _mm_cmpneq_ps (a.m_simd, b.m_simd); +#elif OIIO_SIMD_NEON + // implemented as NOT(a == b) + return vmvnq_u32(vceqq_f32 (a.m_simd, b.m_simd)); +#else + SIMD_RETURN (vbool4, a[i] != b[i] ? -1 : 0); +#endif +} + +OIIO_FORCEINLINE vbool4 operator< (const vfloat4& a, const vfloat4& b) { +#if OIIO_SIMD_SSE + return _mm_cmplt_ps (a.m_simd, b.m_simd); +#elif OIIO_SIMD_NEON + return vcltq_f32 (a.m_simd, b.m_simd); +#else + SIMD_RETURN (vbool4, a[i] < b[i] ? -1 : 0); +#endif +} + +OIIO_FORCEINLINE vbool4 operator> (const vfloat4& a, const vfloat4& b) { +#if OIIO_SIMD_SSE + return _mm_cmpgt_ps (a.m_simd, b.m_simd); +#elif OIIO_SIMD_NEON + return vcgtq_f32 (a.m_simd, b.m_simd); +#else + SIMD_RETURN (vbool4, a[i] > b[i] ? -1 : 0); +#endif +} + +OIIO_FORCEINLINE vbool4 operator>= (const vfloat4& a, const vfloat4& b) { +#if OIIO_SIMD_SSE + return _mm_cmpge_ps (a.m_simd, b.m_simd); +#elif OIIO_SIMD_NEON + return vcgeq_f32 (a.m_simd, b.m_simd); +#else + SIMD_RETURN (vbool4, a[i] >= b[i] ? -1 : 0); +#endif +} + +OIIO_FORCEINLINE vbool4 operator<= (const vfloat4& a, const vfloat4& b) { +#if OIIO_SIMD_SSE + return _mm_cmple_ps (a.m_simd, b.m_simd); +#elif OIIO_SIMD_NEON + return vcleq_f32 (a.m_simd, b.m_simd); +#else + SIMD_RETURN (vbool4, a[i] <= b[i] ? -1 : 0); +#endif +} + +OIIO_FORCEINLINE vfloat4 AxyBxy (const vfloat4& a, const vfloat4& b) { +#if OIIO_SIMD_SSE + return _mm_movelh_ps (a.m_simd, b.m_simd); +#else + return vfloat4 (a[0], a[1], b[0], b[1]); +#endif +} + +OIIO_FORCEINLINE vfloat4 AxBxAyBy (const vfloat4& a, const vfloat4& b) { +#if OIIO_SIMD_SSE + return _mm_unpacklo_ps (a.m_simd, b.m_simd); +#else + return vfloat4 (a[0], b[0], a[1], b[1]); +#endif +} + +OIIO_FORCEINLINE vfloat4 vfloat4::xyz0 () const { + return insert<3>(*this, 0.0f); +} + +OIIO_FORCEINLINE vfloat4 vfloat4::xyz1 () const { + return insert<3>(*this, 1.0f); +} + +inline std::ostream& operator<< (std::ostream& cout, const vfloat4& val) { + cout << val[0]; + for (int i = 1; i < val.elements; ++i) + cout << ' ' << val[i]; + return cout; +} + + +// Implementation had to be after the definition of vfloat4. +OIIO_FORCEINLINE vint4::vint4 (const vfloat4& f) +{ +#if OIIO_SIMD_SSE + m_simd = _mm_cvttps_epi32(f.simd()); +#elif OIIO_SIMD_NEON + m_simd = vcvtq_s32_f32(f.simd()); +#else + SIMD_CONSTRUCT ((int) f[i]); +#endif +} + + +template +OIIO_FORCEINLINE vfloat4 shuffle (const vfloat4& a) { +#if OIIO_SIMD_SSE + return shuffle_sse (__m128(a)); +#else + return vfloat4(a[i0], a[i1], a[i2], a[i3]); +#endif +} + +template OIIO_FORCEINLINE vfloat4 broadcast_element(const vfloat4& a) { + return shuffle(a); +} + +// DEPRECATED(3.1): old name; use broadcast_element instead +template OIIO_FORCEINLINE vfloat4 shuffle (const vfloat4& a) { + return broadcast_element(a); +} + +#if OIIO_SIMD_NEON +template<> OIIO_FORCEINLINE vfloat4 broadcast_element<0> (const vfloat4& a) { + float32x2_t t = vget_low_f32(a.simd()); return vdupq_lane_f32(t,0); +} +template<> OIIO_FORCEINLINE vfloat4 broadcast_element<1> (const vfloat4& a) { + float32x2_t t = vget_low_f32(a.simd()); return vdupq_lane_f32(t,1); +} +template<> OIIO_FORCEINLINE vfloat4 broadcast_element<2> (const vfloat4& a) { + float32x2_t t = vget_high_f32(a.simd()); return vdupq_lane_f32(t,0); +} +template<> OIIO_FORCEINLINE vfloat4 broadcast_element<3> (const vfloat4& a) { + float32x2_t t = vget_high_f32(a.simd()); return vdupq_lane_f32(t,1); +} +#endif + + +template +OIIO_FORCEINLINE vfloat4 +shuffle(const vfloat4& a, const vfloat4& b) +{ +#if OIIO_SIMD_SSE + return vfloat4(_mm_shuffle_ps(a, b, i)); +#else + return vfloat4(a[i & 0x03], a[(i >> 2) & (0x03)], + b[(i >> 4) & 0x03], b[(i >> 6) & (0x03)]); +#endif +} + + +/// Helper: as rapid as possible extraction of one component, when the +/// index is fixed. +template +OIIO_FORCEINLINE float extract (const vfloat4& a) { +#if OIIO_SIMD_SSE + return _mm_cvtss_f32(shuffle_sse(a.simd())); +#elif OIIO_SIMD_NEON + return vgetq_lane_f32(a.simd(), i); +#else + return a[i]; +#endif +} + +#if OIIO_SIMD_SSE +template<> OIIO_FORCEINLINE float extract<0> (const vfloat4& a) { + return _mm_cvtss_f32(a.simd()); +} +#endif + + +/// Helper: substitute val for a[i] +template +OIIO_FORCEINLINE vfloat4 insert (const vfloat4& a, float val) { +#if OIIO_SIMD_SSE >= 4 + return _mm_insert_ps (a, _mm_set_ss(val), i<<4); +#elif OIIO_SIMD_NEON + return vld1q_lane_f32(&val, a.simd(), i); +#else + vfloat4 tmp = a; + tmp[i] = val; + return tmp; +#endif +} + +#if OIIO_SIMD_SSE +// Slightly faster special cases for SSE +template<> OIIO_FORCEINLINE vfloat4 insert<0> (const vfloat4& a, float val) { + return _mm_move_ss (a.simd(), _mm_set_ss(val)); +} +#endif + + +OIIO_FORCEINLINE float vfloat4::x () const { return extract<0>(*this); } +OIIO_FORCEINLINE float vfloat4::y () const { return extract<1>(*this); } +OIIO_FORCEINLINE float vfloat4::z () const { return extract<2>(*this); } +OIIO_FORCEINLINE float vfloat4::w () const { return extract<3>(*this); } +OIIO_FORCEINLINE void vfloat4::set_x (float val) { *this = insert<0>(*this, val); } +OIIO_FORCEINLINE void vfloat4::set_y (float val) { *this = insert<1>(*this, val); } +OIIO_FORCEINLINE void vfloat4::set_z (float val) { *this = insert<2>(*this, val); } +OIIO_FORCEINLINE void vfloat4::set_w (float val) { *this = insert<3>(*this, val); } + + +OIIO_FORCEINLINE vint4 bitcast_to_int (const vfloat4& x) +{ +#if OIIO_SIMD_SSE + return _mm_castps_si128 (x.simd()); +#elif OIIO_SIMD_NEON + return vreinterpretq_s32_f32 (x.simd()); +#else + return *(vint4 *)&x; +#endif +} + +OIIO_FORCEINLINE vfloat4 bitcast_to_float (const vint4& x) +{ +#if OIIO_SIMD_SSE + return _mm_castsi128_ps (x.simd()); +#elif OIIO_SIMD_NEON + return vreinterpretq_f32_s32 (x.simd()); +#else + return *(vfloat4 *)&x; +#endif +} + + +// Old names: +inline vint4 bitcast_to_int4 (const vfloat4& x) { return bitcast_to_int(x); } +inline vfloat4 bitcast_to_float4 (const vint4& x) { return bitcast_to_float(x); } + + + +OIIO_FORCEINLINE vfloat4 vreduce_add (const vfloat4& v) { +#if OIIO_SIMD_SSE >= 3 + // People seem to agree that SSE3 does add reduction best with 2 + // horizontal adds. + // suppose v = (a, b, c, d) + simd::vfloat4 ab_cd = _mm_hadd_ps (v.simd(), v.simd()); + // ab_cd = (a+b, c+d, a+b, c+d) + simd::vfloat4 abcd = _mm_hadd_ps (ab_cd.simd(), ab_cd.simd()); + // all abcd elements are a+b+c+d + return abcd; +#elif OIIO_SIMD_SSE + // I think this is the best we can do for SSE2, and I'm still not sure + // it's faster than the default scalar operation. But anyway... + // suppose v = (a, b, c, d) + vfloat4 ab_ab_cd_cd = shuffle<1,0,3,2>(v) + v; + // now x = (b,a,d,c) + (a,b,c,d) = (a+b,a+b,c+d,c+d) + vfloat4 cd_cd_ab_ab = shuffle<2,3,0,1>(ab_ab_cd_cd); + // now y = (c+d,c+d,a+b,a+b) + vfloat4 abcd = ab_ab_cd_cd + cd_cd_ab_ab; // a+b+c+d in all components + return abcd; +#elif OIIO_SIMD_NEON && defined(__aarch64__) + return vfloat4(vaddvq_f32(v)); +#else + return vfloat4 (v[0] + v[1] + v[2] + v[3]); +#endif +} + + +OIIO_FORCEINLINE float reduce_add (const vfloat4& v) { +#if OIIO_SIMD_SSE + return _mm_cvtss_f32(vreduce_add (v)); +#elif OIIO_SIMD_NEON && defined(__aarch64__) + return vaddvq_f32(v); +#else + return v[0] + v[1] + v[2] + v[3]; +#endif +} + +OIIO_FORCEINLINE vfloat4 vdot (const vfloat4 &a, const vfloat4 &b) { +#if OIIO_SIMD_SSE >= 4 + return _mm_dp_ps (a.simd(), b.simd(), 0xff); +#elif OIIO_SIMD_NEON + float32x4_t ab = vmulq_f32(a, b); + float32x4_t sum1 = vaddq_f32(ab, vrev64q_f32(ab)); + return vaddq_f32(sum1, vcombine_f32(vget_high_f32(sum1), vget_low_f32(sum1))); +#else + return vreduce_add (a*b); +#endif +} + +OIIO_FORCEINLINE float dot (const vfloat4 &a, const vfloat4 &b) { +#if OIIO_SIMD_SSE >= 4 + return _mm_cvtss_f32 (_mm_dp_ps (a.simd(), b.simd(), 0xff)); +#else + return reduce_add (a*b); +#endif +} + +OIIO_FORCEINLINE vfloat4 vdot3 (const vfloat4 &a, const vfloat4 &b) { +#if OIIO_SIMD_SSE >= 4 + return _mm_dp_ps (a.simd(), b.simd(), 0x7f); +#else + return vreduce_add((a*b).xyz0()); +#endif +} + +OIIO_FORCEINLINE float dot3 (const vfloat4 &a, const vfloat4 &b) { +#if OIIO_SIMD_SSE >= 4 + return _mm_cvtss_f32 (_mm_dp_ps (a.simd(), b.simd(), 0x77)); +#else + return reduce_add ((a*b).xyz0()); +#endif +} + + +OIIO_FORCEINLINE vfloat4 blend (const vfloat4& a, const vfloat4& b, const vbool4& mask) +{ +#if OIIO_SIMD_SSE >= 4 + // SSE >= 4.1 only + return _mm_blendv_ps (a.simd(), b.simd(), mask.simd()); +#elif OIIO_SIMD_SSE + // Trick for SSE < 4.1 + return _mm_or_ps (_mm_and_ps(mask.simd(), b.simd()), + _mm_andnot_ps(mask.simd(), a.simd())); +#elif OIIO_SIMD_NEON + return vbslq_f32 (mask.simd(), b.simd(), a.simd()); +#else + return vfloat4 (mask[0] ? b[0] : a[0], + mask[1] ? b[1] : a[1], + mask[2] ? b[2] : a[2], + mask[3] ? b[3] : a[3]); +#endif +} + + +OIIO_FORCEINLINE vfloat4 blend0 (const vfloat4& a, const vbool4& mask) +{ +#if OIIO_SIMD_SSE + return _mm_and_ps(mask.simd(), a.simd()); +#else + return vfloat4 (mask[0] ? a[0] : 0.0f, + mask[1] ? a[1] : 0.0f, + mask[2] ? a[2] : 0.0f, + mask[3] ? a[3] : 0.0f); +#endif +} + + +OIIO_FORCEINLINE vfloat4 blend0not (const vfloat4& a, const vbool4& mask) +{ +#if OIIO_SIMD_SSE + return _mm_andnot_ps(mask.simd(), a.simd()); +#else + return vfloat4 (mask[0] ? 0.0f : a[0], + mask[1] ? 0.0f : a[1], + mask[2] ? 0.0f : a[2], + mask[3] ? 0.0f : a[3]); +#endif +} + + +OIIO_FORCEINLINE vfloat4 safe_div (const vfloat4 &a, const vfloat4 &b) { +#if OIIO_SIMD_SSE + return blend0not (a/b, b == vfloat4::Zero()); +#else + return vfloat4 (b[0] == 0.0f ? 0.0f : a[0] / b[0], + b[1] == 0.0f ? 0.0f : a[1] / b[1], + b[2] == 0.0f ? 0.0f : a[2] / b[2], + b[3] == 0.0f ? 0.0f : a[3] / b[3]); +#endif +} + + +OIIO_FORCEINLINE vfloat3 hdiv (const vfloat4 &a) +{ +#if OIIO_SIMD_SSE + return vfloat3(safe_div(a, shuffle<3>(a)).xyz0()); +#else + float d = a[3]; + return d == 0.0f ? vfloat3 (0.0f) : vfloat3 (a[0]/d, a[1]/d, a[2]/d); +#endif +} + + + +OIIO_FORCEINLINE vfloat4 select (const vbool4& mask, const vfloat4& a, const vfloat4& b) +{ + return blend (b, a, mask); +} + + +OIIO_FORCEINLINE vfloat4 abs (const vfloat4& a) +{ +#if OIIO_SIMD_SSE + // Just clear the sign bit for cheap fabsf + return _mm_and_ps (a.simd(), _mm_castsi128_ps(_mm_set1_epi32(0x7fffffff))); +#elif OIIO_SIMD_NEON + return vabsq_f32(a.simd()); +#else + SIMD_RETURN (vfloat4, fabsf(a[i])); +#endif +} + + +OIIO_FORCEINLINE vfloat4 sign (const vfloat4& a) +{ + vfloat4 one(1.0f); + return blend (one, -one, a < vfloat4::Zero()); +} + + +OIIO_FORCEINLINE vfloat4 ceil (const vfloat4& a) +{ +#if OIIO_SIMD_SSE >= 4 /* SSE >= 4.1 */ + return _mm_ceil_ps (a); +#else + SIMD_RETURN (vfloat4, ceilf(a[i])); +#endif +} + +OIIO_FORCEINLINE vfloat4 floor (const vfloat4& a) +{ +#if OIIO_SIMD_SSE >= 4 /* SSE >= 4.1 */ + return _mm_floor_ps (a); +#else + SIMD_RETURN (vfloat4, floorf(a[i])); +#endif +} + +OIIO_FORCEINLINE vfloat4 round (const vfloat4& a) +{ +#if OIIO_SIMD_SSE >= 4 /* SSE >= 4.1 */ + return _mm_round_ps (a, (_MM_FROUND_TO_NEAREST_INT |_MM_FROUND_NO_EXC)); +#elif OIIO_SIMD_NEON + return vrndnq_f32(a); +#else + SIMD_RETURN (vfloat4, roundf(a[i])); +#endif +} + +OIIO_FORCEINLINE vint4 ifloor (const vfloat4& a) +{ + // FIXME: look into this, versus the method of quick_floor in texturesys.cpp +#if OIIO_SIMD_SSE >= 4 /* SSE >= 4.1 */ + return vint4(floor(a)); +#else + SIMD_RETURN (vint4, (int)floorf(a[i])); +#endif +} + + +OIIO_FORCEINLINE vint4 rint (const vfloat4& a) +{ + return vint4 (round(a)); +} + + +OIIO_FORCEINLINE vfloat4 rcp_fast (const vfloat4 &a) +{ +#if OIIO_SIMD_AVX512 && OIIO_AVX512VL_ENABLED + // avx512vl directly has rcp14 on float4 + vfloat4 r = _mm_rcp14_ps(a); + return r * nmadd(r,a,vfloat4(2.0f)); +#elif OIIO_SIMD_AVX512 + // Trickery: in and out of the 512 bit registers to use fast approx rcp + vfloat16 r = _mm512_rcp14_ps(_mm512_castps128_ps512(a)); + return _mm512_castps512_ps128(r); +#elif OIIO_SIMD_SSE + vfloat4 r = _mm_rcp_ps(a); + return r * nmadd(r,a,vfloat4(2.0f)); +#else + SIMD_RETURN (vfloat4, 1.0f/a[i]); +#endif +} + + +OIIO_FORCEINLINE vfloat4 sqrt (const vfloat4 &a) +{ +#if OIIO_SIMD_SSE + return _mm_sqrt_ps (a.simd()); +#elif OIIO_SIMD_NEON + return vsqrtq_f32 (a.simd()); +#else + SIMD_RETURN (vfloat4, sqrtf(a[i])); +#endif +} + + +OIIO_FORCEINLINE vfloat4 rsqrt (const vfloat4 &a) +{ +#if OIIO_SIMD_SSE + return _mm_div_ps (_mm_set1_ps(1.0f), _mm_sqrt_ps (a.simd())); +#elif OIIO_SIMD_NEON && defined(__aarch64__) + return vdivq_f32(vdupq_n_f32(1.0f), vsqrtq_f32(a)); +#else + SIMD_RETURN (vfloat4, 1.0f/sqrtf(a[i])); +#endif +} + + +OIIO_FORCEINLINE vfloat4 rsqrt_fast (const vfloat4 &a) +{ +#if OIIO_SIMD_AVX >= 512 && OIIO_AVX512VL_ENABLED + // Trickery: in and out of the 512 bit registers to use fast approx rsqrt + return _mm512_castps512_ps128(_mm512_rsqrt14_ps(_mm512_castps128_ps512(a))); +#elif OIIO_SIMD_SSE + return _mm_rsqrt_ps (a.simd()); +#else + SIMD_RETURN (vfloat4, 1.0f/sqrtf(a[i])); +#endif +} + + +OIIO_FORCEINLINE vfloat4 min (const vfloat4& a, const vfloat4& b) +{ +#if OIIO_SIMD_SSE + return _mm_min_ps (a, b); +#elif OIIO_SIMD_NEON + return vminq_f32(a, b); +#else + SIMD_RETURN (vfloat4, std::min (a[i], b[i])); +#endif +} + +OIIO_FORCEINLINE vfloat4 max (const vfloat4& a, const vfloat4& b) +{ +#if OIIO_SIMD_SSE + return _mm_max_ps (a, b); +#elif OIIO_SIMD_NEON + return vmaxq_f32(a, b); +#else + SIMD_RETURN (vfloat4, std::max (a[i], b[i])); +#endif +} + + +OIIO_FORCEINLINE vfloat4 andnot (const vfloat4& a, const vfloat4& b) { +#if OIIO_SIMD_SSE + return _mm_andnot_ps (a.simd(), b.simd()); +#else + vint4 ai = bitcast_to_int(a); + vint4 bi = bitcast_to_int(b); + return bitcast_to_float(vint4(~(ai[0]) & bi[0], + ~(ai[1]) & bi[1], + ~(ai[2]) & bi[2], + ~(ai[3]) & bi[3])); +#endif +} + + +OIIO_FORCEINLINE vfloat4 madd (const simd::vfloat4& a, const simd::vfloat4& b, + const simd::vfloat4& c) +{ +#if OIIO_SIMD_SSE && OIIO_FMA_ENABLED + // If we are sure _mm_fmadd_ps intrinsic is available, use it. + return _mm_fmadd_ps (a, b, c); +#elif OIIO_SIMD_NEON + return vmlaq_f32(c.simd(), a.simd(), b.simd()); +#elif OIIO_SIMD_SSE && !defined(_MSC_VER) + // If we directly access the underlying __m128, on some platforms and + // compiler flags, it will turn into fma anyway, even if we don't use + // the intrinsic. + return a.simd() * b.simd() + c.simd(); +#else + // Fallback: just use regular math and hope for the best. + return a * b + c; +#endif +} + + +OIIO_FORCEINLINE vfloat4 msub (const simd::vfloat4& a, const simd::vfloat4& b, + const simd::vfloat4& c) +{ +#if OIIO_SIMD_SSE && OIIO_FMA_ENABLED + // If we are sure _mm_fnmsub_ps intrinsic is available, use it. + return _mm_fmsub_ps (a, b, c); +#elif OIIO_SIMD_SSE && !defined(_MSC_VER) + // If we directly access the underlying __m128, on some platforms and + // compiler flags, it will turn into fma anyway, even if we don't use + // the intrinsic. + return a.simd() * b.simd() - c.simd(); +#else + // Fallback: just use regular math and hope for the best. + return a * b - c; +#endif +} + + + +OIIO_FORCEINLINE vfloat4 nmadd (const simd::vfloat4& a, const simd::vfloat4& b, + const simd::vfloat4& c) +{ +#if OIIO_SIMD_SSE && OIIO_FMA_ENABLED + // If we are sure _mm_fnmadd_ps intrinsic is available, use it. + return _mm_fnmadd_ps (a, b, c); +#elif OIIO_SIMD_SSE && !defined(_MSC_VER) + // If we directly access the underlying __m128, on some platforms and + // compiler flags, it will turn into fma anyway, even if we don't use + // the intrinsic. + return c.simd() - a.simd() * b.simd(); +#else + // Fallback: just use regular math and hope for the best. + return c - a * b; +#endif +} + + + +OIIO_FORCEINLINE vfloat4 nmsub (const simd::vfloat4& a, const simd::vfloat4& b, + const simd::vfloat4& c) +{ +#if OIIO_SIMD_SSE && OIIO_FMA_ENABLED + // If we are sure _mm_fnmsub_ps intrinsic is available, use it. + return _mm_fnmsub_ps (a, b, c); +#elif OIIO_SIMD_SSE && !defined(_MSC_VER) + // If we directly access the underlying __m128, on some platforms and + // compiler flags, it will turn into fma anyway, even if we don't use + // the intrinsic. + return -(a.simd() * b.simd()) - c.simd(); +#else + // Fallback: just use regular math and hope for the best. + return -(a * b) - c; +#endif +} + + + +// Full precision exp() of all components of a SIMD vector. +template +OIIO_FORCEINLINE T exp (const T& v) +{ +#if OIIO_SIMD_SSE + // Implementation inspired by: + // https://github.com/embree/embree/blob/master/common/simd/sse_special.h + // Which is listed as Copyright (C) 2007 Julien Pommier and distributed + // under the zlib license. + typedef typename T::vint_t int_t; + T x = v; + const float exp_hi (88.3762626647949f); + const float exp_lo (-88.3762626647949f); + const float cephes_LOG2EF (1.44269504088896341f); + const float cephes_exp_C1 (0.693359375f); + const float cephes_exp_C2 (-2.12194440e-4f); + const float cephes_exp_p0 (1.9875691500E-4f); + const float cephes_exp_p1 (1.3981999507E-3f); + const float cephes_exp_p2 (8.3334519073E-3f); + const float cephes_exp_p3 (4.1665795894E-2f); + const float cephes_exp_p4 (1.6666665459E-1f); + const float cephes_exp_p5 (5.0000001201E-1f); + T tmp (0.0f); + T one (1.0f); + x = min (x, T(exp_hi)); + x = max (x, T(exp_lo)); + T fx = madd (x, T(cephes_LOG2EF), T(0.5f)); + int_t emm0 = int_t(fx); + tmp = T(emm0); + T mask = bitcast_to_float (bitcast_to_int(tmp > fx) & bitcast_to_int(one)); + fx = tmp - mask; + tmp = fx * cephes_exp_C1; + T z = fx * cephes_exp_C2; + x = x - tmp; + x = x - z; + z = x * x; + T y = cephes_exp_p0; + y = madd (y, x, cephes_exp_p1); + y = madd (y, x, cephes_exp_p2); + y = madd (y, x, cephes_exp_p3); + y = madd (y, x, cephes_exp_p4); + y = madd (y, x, cephes_exp_p5); + y = madd (y, z, x); + y = y + one; + emm0 = (int_t(fx) + int_t(0x7f)) << 23; + T pow2n = bitcast_to_float(emm0); + y = y * pow2n; + return y; +#else + SIMD_RETURN (T, expf(v[i])); +#endif +} + + + +// Full precision log() of all components of a SIMD vector. +template +OIIO_FORCEINLINE T log (const T& v) +{ +#if OIIO_SIMD_SSE + // Implementation inspired by: + // https://github.com/embree/embree/blob/master/common/simd/sse_special.h + // Which is listed as Copyright (C) 2007 Julien Pommier and distributed + // under the zlib license. + typedef typename T::vint_t int_t; + typedef typename T::vbool_t bool_t; + T x = v; + int_t emm0; + T zero (T::Zero()); + T one (1.0f); + bool_t invalid_mask = (x <= zero); + const int min_norm_pos ((int)0x00800000); + const int inv_mant_mask ((int)~0x7f800000); + x = max(x, bitcast_to_float(int_t(min_norm_pos))); /* cut off denormalized stuff */ + emm0 = srl (bitcast_to_int(x), 23); + /* keep only the fractional part */ + x = bitcast_to_float (bitcast_to_int(x) & int_t(inv_mant_mask)); + x = bitcast_to_float (bitcast_to_int(x) | bitcast_to_int(T(0.5f))); + emm0 = emm0 - int_t(0x7f); + T e (emm0); + e = e + one; + // OIIO_SIMD_vFLOAT4_CONST (cephes_SQRTHF, 0.707106781186547524f); + const float cephes_SQRTHF (0.707106781186547524f); + bool_t mask = (x < T(cephes_SQRTHF)); + T tmp = bitcast_to_float (bitcast_to_int(x) & bitcast_to_int(mask)); + x = x - one; + e = e - bitcast_to_float (bitcast_to_int(one) & bitcast_to_int(mask)); + x = x + tmp; + T z = x * x; + const float cephes_log_p0 (7.0376836292E-2f); + const float cephes_log_p1 (- 1.1514610310E-1f); + const float cephes_log_p2 (1.1676998740E-1f); + const float cephes_log_p3 (- 1.2420140846E-1f); + const float cephes_log_p4 (+ 1.4249322787E-1f); + const float cephes_log_p5 (- 1.6668057665E-1f); + const float cephes_log_p6 (+ 2.0000714765E-1f); + const float cephes_log_p7 (- 2.4999993993E-1f); + const float cephes_log_p8 (+ 3.3333331174E-1f); + const float cephes_log_q1 (-2.12194440e-4f); + const float cephes_log_q2 (0.693359375f); + T y = cephes_log_p0; + y = madd (y, x, T(cephes_log_p1)); + y = madd (y, x, T(cephes_log_p2)); + y = madd (y, x, T(cephes_log_p3)); + y = madd (y, x, T(cephes_log_p4)); + y = madd (y, x, T(cephes_log_p5)); + y = madd (y, x, T(cephes_log_p6)); + y = madd (y, x, T(cephes_log_p7)); + y = madd (y, x, T(cephes_log_p8)); + y = y * x; + y = y * z; + y = madd(e, T(cephes_log_q1), y); + y = nmadd (z, 0.5f, y); + x = x + y; + x = madd (e, T(cephes_log_q2), x); + x = bitcast_to_float (bitcast_to_int(x) | bitcast_to_int(invalid_mask)); // negative arg will be NAN + return x; +#else + SIMD_RETURN (T, logf(v[i])); +#endif +} + + + +OIIO_FORCEINLINE void transpose (vfloat4 &a, vfloat4 &b, vfloat4 &c, vfloat4 &d) +{ +#if OIIO_SIMD_SSE + _MM_TRANSPOSE4_PS (a.simd(), b.simd(), c.simd(), d.simd()); +#else + vfloat4 A (a[0], b[0], c[0], d[0]); + vfloat4 B (a[1], b[1], c[1], d[1]); + vfloat4 C (a[2], b[2], c[2], d[2]); + vfloat4 D (a[3], b[3], c[3], d[3]); + a = A; b = B; c = C; d = D; +#endif +} + + +OIIO_FORCEINLINE void transpose (const vfloat4& a, const vfloat4& b, const vfloat4& c, const vfloat4& d, + vfloat4 &r0, vfloat4 &r1, vfloat4 &r2, vfloat4 &r3) +{ +#if OIIO_SIMD_SSE + //_MM_TRANSPOSE4_PS (a, b, c, d); + auto l02 = _mm_unpacklo_ps (a, c); + auto h02 = _mm_unpackhi_ps (a, c); + auto l13 = _mm_unpacklo_ps (b, d); + auto h13 = _mm_unpackhi_ps (b, d); + r0 = vfloat4(_mm_unpacklo_ps (l02, l13)); + r1 = vfloat4(_mm_unpackhi_ps (l02, l13)); + r2 = vfloat4(_mm_unpacklo_ps (h02, h13)); + r3 = vfloat4(_mm_unpackhi_ps (h02, h13)); +#else + r0.load (a[0], b[0], c[0], d[0]); + r1.load (a[1], b[1], c[1], d[1]); + r2.load (a[2], b[2], c[2], d[2]); + r3.load (a[3], b[3], c[3], d[3]); +#endif +} + + +OIIO_FORCEINLINE void transpose (vint4 &a, vint4 &b, vint4 &c, vint4 &d) +{ +#if OIIO_SIMD_SSE + __m128 A = _mm_castsi128_ps (a); + __m128 B = _mm_castsi128_ps (b); + __m128 C = _mm_castsi128_ps (c); + __m128 D = _mm_castsi128_ps (d); + _MM_TRANSPOSE4_PS (A, B, C, D); + a = _mm_castps_si128 (A); + b = _mm_castps_si128 (B); + c = _mm_castps_si128 (C); + d = _mm_castps_si128 (D); +#else + vint4 A (a[0], b[0], c[0], d[0]); + vint4 B (a[1], b[1], c[1], d[1]); + vint4 C (a[2], b[2], c[2], d[2]); + vint4 D (a[3], b[3], c[3], d[3]); + a = A; b = B; c = C; d = D; +#endif +} + +OIIO_FORCEINLINE void transpose (const vint4& a, const vint4& b, const vint4& c, const vint4& d, + vint4 &r0, vint4 &r1, vint4 &r2, vint4 &r3) +{ +#if OIIO_SIMD_SSE + //_MM_TRANSPOSE4_PS (a, b, c, d); + __m128 A = _mm_castsi128_ps (a); + __m128 B = _mm_castsi128_ps (b); + __m128 C = _mm_castsi128_ps (c); + __m128 D = _mm_castsi128_ps (d); + _MM_TRANSPOSE4_PS (A, B, C, D); + r0 = _mm_castps_si128 (A); + r1 = _mm_castps_si128 (B); + r2 = _mm_castps_si128 (C); + r3 = _mm_castps_si128 (D); +#else + r0.load (a[0], b[0], c[0], d[0]); + r1.load (a[1], b[1], c[1], d[1]); + r2.load (a[2], b[2], c[2], d[2]); + r3.load (a[3], b[3], c[3], d[3]); +#endif +} + + +OIIO_FORCEINLINE vfloat4 AxBxCxDx (const vfloat4& a, const vfloat4& b, + const vfloat4& c, const vfloat4& d) +{ +#if OIIO_SIMD_SSE + vfloat4 l02 = _mm_unpacklo_ps (a, c); + vfloat4 l13 = _mm_unpacklo_ps (b, d); + return _mm_unpacklo_ps (l02, l13); +#else + return vfloat4 (a[0], b[0], c[0], d[0]); +#endif +} + + +OIIO_FORCEINLINE vint4 AxBxCxDx (const vint4& a, const vint4& b, + const vint4& c, const vint4& d) +{ +#if OIIO_SIMD_SSE + vint4 l02 = _mm_unpacklo_epi32 (a, c); + vint4 l13 = _mm_unpacklo_epi32 (b, d); + return _mm_unpacklo_epi32 (l02, l13); +#else + return vint4 (a[0], b[0], c[0], d[0]); +#endif +} + + + +////////////////////////////////////////////////////////////////////// +// vfloat3 implementation + +OIIO_FORCEINLINE vfloat3::vfloat3 (const vfloat4 &other) { +#if OIIO_SIMD_SSE || OIIO_SIMD_NEON + m_simd = other.simd(); +#else + SIMD_CONSTRUCT_PAD (other[i]); +#endif +} + +OIIO_FORCEINLINE const vfloat3 vfloat3::Zero () { return vfloat3(vfloat4::Zero()); } + +OIIO_FORCEINLINE const vfloat3 vfloat3::One () { return vfloat3(1.0f); } + +OIIO_FORCEINLINE const vfloat3 vfloat3::Iota (float start, float step) { + return vfloat3 (start+0.0f*step, start+1.0f*step, start+2.0f*step); +} + + +OIIO_FORCEINLINE void vfloat3::load (float val) { vfloat4::load (val, val, val, 0.0f); } + +OIIO_FORCEINLINE void vfloat3::load (const float *values) { vfloat4::load (values, 3); } + +OIIO_FORCEINLINE void vfloat3::load (const float *values, int n) { + vfloat4::load (values, n); +} + +OIIO_FORCEINLINE void vfloat3::load (const unsigned short *values) { + vfloat4::load (float(values[0]), float(values[1]), float(values[2])); +} + +OIIO_FORCEINLINE void vfloat3::load (const short *values) { + vfloat4::load (float(values[0]), float(values[1]), float(values[2])); +} + +OIIO_FORCEINLINE void vfloat3::load (const unsigned char *values) { + vfloat4::load (float(values[0]), float(values[1]), float(values[2])); +} + +OIIO_FORCEINLINE void vfloat3::load (const char *values) { + vfloat4::load (float(values[0]), float(values[1]), float(values[2])); +} + +#if defined(_HALF_H_) || defined(IMATH_HALF_H_) +OIIO_FORCEINLINE void vfloat3::load (const half *values) { + vfloat4::load (float(values[0]), float(values[1]), float(values[2])); +} +#endif /* _HALF_H_ or _IMATH_H_ */ + +OIIO_FORCEINLINE void vfloat3::store (float *values) const { + vfloat4::store (values, 3); +} + +OIIO_FORCEINLINE void vfloat3::store (float *values, int n) const { + vfloat4::store (values, n); +} + +#if defined(_HALF_H_) || defined(IMATH_HALF_H_) +OIIO_FORCEINLINE void vfloat3::store (half *values) const { + SIMD_DO (values[i] = m_val[i]); +} +#endif + + +OIIO_FORCEINLINE vfloat3 operator+ (const vfloat3& a, const vfloat3& b) { + return vfloat3 (vfloat4(a) + vfloat4(b)); +} + +OIIO_FORCEINLINE const vfloat3 & vfloat3::operator+= (const vfloat3& a) { + *this = *this + a; return *this; +} + +OIIO_FORCEINLINE vfloat3 vfloat3::operator- () const { + return vfloat3 (-vfloat4(*this)); +} + +OIIO_FORCEINLINE vfloat3 operator- (const vfloat3& a, const vfloat3& b) { + return vfloat3 (vfloat4(a) - vfloat4(b)); +} + +OIIO_FORCEINLINE const vfloat3 & vfloat3::operator-= (const vfloat3& a) { + *this = *this - a; return *this; +} + +OIIO_FORCEINLINE vfloat3 operator* (const vfloat3& a, const vfloat3& b) { + return vfloat3 (vfloat4(a) * vfloat4(b)); +} + +OIIO_FORCEINLINE vfloat3 operator* (const vfloat3& a, float b) { + return vfloat3 (vfloat4(a) * b); +} + +OIIO_FORCEINLINE vfloat3 operator* (float a, const vfloat3& b) { + return b * a; +} + +OIIO_FORCEINLINE const vfloat3 & vfloat3::operator*= (const vfloat3& a) { + *this = *this * a; return *this; +} + +OIIO_FORCEINLINE const vfloat3 & vfloat3::operator*= (float a) { + *this = *this * a; return *this; +} + +OIIO_FORCEINLINE vfloat3 operator/ (const vfloat3& a, const vfloat3& b) { + return vfloat3 (vfloat4(a) / b.xyz1()); // Avoid divide by zero! +} + +OIIO_FORCEINLINE const vfloat3 & vfloat3::operator/= (const vfloat3& a) { + *this = *this / a; return *this; +} + +OIIO_FORCEINLINE const vfloat3 & vfloat3::operator/= (float a) { + *this = *this / a; return *this; +} + + +inline std::ostream& operator<< (std::ostream& cout, const vfloat3& val) { + cout << val[0]; + for (int i = 1; i < val.elements; ++i) + cout << ' ' << val[i]; + return cout; +} + + +OIIO_FORCEINLINE vfloat3 abs (const vfloat3& a) +{ +#if OIIO_SIMD_SSE + // Just clear the sign bit for cheap fabsf + return vfloat3(_mm_and_ps (a.simd(), _mm_castsi128_ps(_mm_set1_epi32(0x7fffffff)))); +#elif OIIO_SIMD_NEON + return vfloat3(vabsq_f32(a.simd())); +#else + SIMD_RETURN (vfloat3, fabsf(a[i])); +#endif +} + + +OIIO_FORCEINLINE vfloat3 sign (const vfloat3& a) +{ + vfloat3 one(1.0f); + return vfloat3(blend (one, -one, a < vfloat3::Zero())); +} + + +OIIO_FORCEINLINE vfloat3 ceil (const vfloat3& a) +{ +#if OIIO_SIMD_SSE >= 4 /* SSE >= 4.1 */ + return vfloat3(_mm_ceil_ps (a)); +#else + SIMD_RETURN (vfloat3, ceilf(a[i])); +#endif +} + +OIIO_FORCEINLINE vfloat3 floor (const vfloat3& a) +{ +#if OIIO_SIMD_SSE >= 4 /* SSE >= 4.1 */ + return vfloat3(_mm_floor_ps (a)); +#else + SIMD_RETURN (vfloat3, floorf(a[i])); +#endif +} + +OIIO_FORCEINLINE vfloat3 round (const vfloat3& a) +{ +#if OIIO_SIMD_SSE >= 4 /* SSE >= 4.1 */ + return vfloat3(_mm_round_ps (a, (_MM_FROUND_TO_NEAREST_INT |_MM_FROUND_NO_EXC))); +#else + SIMD_RETURN (vfloat3, roundf(a[i])); +#endif +} + + +OIIO_FORCEINLINE vfloat3 vreduce_add (const vfloat3& v) { +#if OIIO_SIMD_SSE + return vfloat3 ((vreduce_add(vfloat4(v))).xyz0()); +#else + return vfloat3 (v[0] + v[1] + v[2]); +#endif +} + + +OIIO_FORCEINLINE vfloat3 vdot (const vfloat3 &a, const vfloat3 &b) { +#if OIIO_SIMD_SSE >= 4 + return vfloat3(_mm_dp_ps (a.simd(), b.simd(), 0x77)); +#else + return vreduce_add (a*b); +#endif +} + + +OIIO_FORCEINLINE float dot (const vfloat3 &a, const vfloat3 &b) { +#if OIIO_SIMD_SSE >= 4 + return _mm_cvtss_f32 (_mm_dp_ps (a.simd(), b.simd(), 0x77)); +#elif OIIO_SIMD + return reduce_add (a*b); +#else + return a[0]*b[0] + a[1]*b[1] + a[2]*b[2]; +#endif +} + + +OIIO_FORCEINLINE vfloat3 vdot3 (const vfloat3 &a, const vfloat3 &b) { +#if OIIO_SIMD_SSE >= 4 + return vfloat3(_mm_dp_ps (a.simd(), b.simd(), 0x77)); +#else + return vfloat3 (vreduce_add((a*b).xyz0()).xyz0()); +#endif +} + + +OIIO_FORCEINLINE float vfloat3::length2 () const +{ + return dot(*this, *this); +} + + +OIIO_FORCEINLINE float vfloat3::length () const +{ + return sqrtf(dot(*this, *this)); +} + + +OIIO_FORCEINLINE vfloat3 vfloat3::normalized () const +{ +#if OIIO_SIMD + vfloat3 len2 = vdot3 (*this, *this); + return vfloat3 (safe_div (*this, sqrt(len2))); +#else + float len2 = dot (*this, *this); + return len2 > 0.0f ? (*this) / sqrtf(len2) : vfloat3::Zero(); +#endif +} + + +OIIO_FORCEINLINE vfloat3 vfloat3::normalized_fast () const +{ +#if OIIO_SIMD + vfloat3 len2 = vdot3 (*this, *this); + vfloat4 invlen = blend0not (rsqrt_fast (len2), len2 == vfloat4::Zero()); + return vfloat3 ((*this) * invlen); +#else + float len2 = dot (*this, *this); + return len2 > 0.0f ? (*this) / sqrtf(len2) : vfloat3::Zero(); +#endif +} + + + +////////////////////////////////////////////////////////////////////// +// matrix44 implementation + + +#ifdef INCLUDED_IMATHMATRIX_H +OIIO_FORCEINLINE const Imath::M44f& matrix44::M44f() const { + return *(Imath::M44f*)this; +} +#endif + + +OIIO_FORCEINLINE const vfloat4& matrix44::operator[] (int i) const { + return m_row[i]; +} + + +OIIO_FORCEINLINE matrix44 matrix44::transposed () const { +#if OIIO_SIMD_SSE + matrix44 T; + simd::transpose (m_row[0], m_row[1], m_row[2], m_row[3], + T.m_row[0], T.m_row[1], T.m_row[2], T.m_row[3]); + return T; +#else + return matrix44(m_vals[0][0], m_vals[1][0], m_vals[2][0], m_vals[3][0], + m_vals[0][1], m_vals[1][1], m_vals[2][1], m_vals[3][1], + m_vals[0][2], m_vals[1][2], m_vals[2][2], m_vals[3][2], + m_vals[0][3], m_vals[1][3], m_vals[2][3], m_vals[3][3]); +#endif +} + +OIIO_FORCEINLINE vfloat3 matrix44::transformp (const vfloat3 &V) const { +#if OIIO_SIMD_SSE + vfloat4 R = broadcast_element<0>(V) * m_row[0] + broadcast_element<1>(V) * m_row[1] + + broadcast_element<2>(V) * m_row[2] + m_row[3]; + R = R / broadcast_element<3>(R); + return vfloat3 (R.xyz0()); +#else + value_t a, b, c, w; + a = V[0] * m_vals[0][0] + V[1] * m_vals[1][0] + V[2] * m_vals[2][0] + m_vals[3][0]; + b = V[0] * m_vals[0][1] + V[1] * m_vals[1][1] + V[2] * m_vals[2][1] + m_vals[3][1]; + c = V[0] * m_vals[0][2] + V[1] * m_vals[1][2] + V[2] * m_vals[2][2] + m_vals[3][2]; + w = V[0] * m_vals[0][3] + V[1] * m_vals[1][3] + V[2] * m_vals[2][3] + m_vals[3][3]; + return vfloat3(a / w, b / w, c / w); +#endif +} + +OIIO_FORCEINLINE vfloat3 matrix44::transformv (const vfloat3 &V) const { +#if OIIO_SIMD_SSE + vfloat4 R = broadcast_element<0>(V) * m_row[0] + broadcast_element<1>(V) * m_row[1] + + broadcast_element<2>(V) * m_row[2]; + return vfloat3 (R.xyz0()); +#else + value_t a, b, c; + a = V[0] * m_vals[0][0] + V[1] * m_vals[1][0] + V[2] * m_vals[2][0]; + b = V[0] * m_vals[0][1] + V[1] * m_vals[1][1] + V[2] * m_vals[2][1]; + c = V[0] * m_vals[0][2] + V[1] * m_vals[1][2] + V[2] * m_vals[2][2]; + return vfloat3(a, b, c); +#endif +} + +OIIO_FORCEINLINE vfloat3 matrix44::transformvT (const vfloat3 &V) const { +#if OIIO_SIMD_SSE + matrix44 T = transposed(); + vfloat4 R = broadcast_element<0>(V) * T[0] + broadcast_element<1>(V) * T[1] + + broadcast_element<2>(V) * T[2]; + return vfloat3 (R.xyz0()); +#else + value_t a, b, c; + a = V[0] * m_vals[0][0] + V[1] * m_vals[0][1] + V[2] * m_vals[0][2]; + b = V[0] * m_vals[1][0] + V[1] * m_vals[1][1] + V[2] * m_vals[1][2]; + c = V[0] * m_vals[2][0] + V[1] * m_vals[2][1] + V[2] * m_vals[2][2]; + return vfloat3(a, b, c); +#endif +} + +OIIO_FORCEINLINE vfloat4 operator* (const vfloat4 &V, const matrix44& M) +{ +#if OIIO_SIMD_SSE + return broadcast_element<0>(V) * M[0] + broadcast_element<1>(V) * M[1] + + broadcast_element<2>(V) * M[2] + broadcast_element<3>(V) * M[3]; +#else + float a, b, c, w; + a = V[0] * M[0][0] + V[1] * M[1][0] + V[2] * M[2][0] + V[3] * M[3][0]; + b = V[0] * M[0][1] + V[1] * M[1][1] + V[2] * M[2][1] + V[3] * M[3][1]; + c = V[0] * M[0][2] + V[1] * M[1][2] + V[2] * M[2][2] + V[3] * M[3][2]; + w = V[0] * M[0][3] + V[1] * M[1][3] + V[2] * M[2][3] + V[3] * M[3][3]; + return vfloat4(a, b, c, w); +#endif +} + +OIIO_FORCEINLINE vfloat4 operator* (const matrix44& M, const vfloat4 &V) +{ +#if OIIO_SIMD_SSE >= 3 + vfloat4 m0v = M[0] * V; // [ M00*Vx, M01*Vy, M02*Vz, M03*Vw ] + vfloat4 m1v = M[1] * V; // [ M10*Vx, M11*Vy, M12*Vz, M13*Vw ] + vfloat4 m2v = M[2] * V; // [ M20*Vx, M21*Vy, M22*Vz, M23*Vw ] + vfloat4 m3v = M[3] * V; // [ M30*Vx, M31*Vy, M32*Vz, M33*Vw ] + vfloat4 s01 = _mm_hadd_ps(m0v, m1v); + // [ M00*Vx + M01*Vy, M02*Vz + M03*Vw, M10*Vx + M11*Vy, M12*Vz + M13*Vw ] + vfloat4 s23 = _mm_hadd_ps(m2v, m3v); + // [ M20*Vx + M21*Vy, M22*Vz + M23*Vw, M30*Vx + M31*Vy, M32*Vz + M33*Vw ] + vfloat4 result = _mm_hadd_ps(s01, s23); + // [ M00*Vx + M01*Vy + M02*Vz + M03*Vw, + // M10*Vx + M11*Vy + M12*Vz + M13*Vw, + // M20*Vx + M21*Vy + M22*Vz + M23*Vw, + // M30*Vx + M31*Vy + M32*Vz + M33*Vw ] + return result; +#else + return vfloat4(dot(M[0], V), dot(M[1], V), dot(M[2], V), dot(M[3], V)); +#endif +} + + +OIIO_FORCEINLINE bool matrix44::operator== (const matrix44& m) const { +#if OIIO_SIMD_SSE + vbool4 b0 = (m_row[0] == m[0]); + vbool4 b1 = (m_row[1] == m[1]); + vbool4 b2 = (m_row[2] == m[2]); + vbool4 b3 = (m_row[3] == m[3]); + return simd::all (b0 & b1 & b2 & b3); +#else + return memcmp(this, &m, 16*sizeof(float)) == 0; +#endif +} + +OIIO_FORCEINLINE bool matrix44::operator!= (const matrix44& m) const { +#if OIIO_SIMD_SSE + vbool4 b0 = (m_row[0] != m[0]); + vbool4 b1 = (m_row[1] != m[1]); + vbool4 b2 = (m_row[2] != m[2]); + vbool4 b3 = (m_row[3] != m[3]); + return simd::any (b0 | b1 | b2 | b3); +#else + return memcmp(this, &m, 16*sizeof(float)) != 0; +#endif +} + + +OIIO_FORCEINLINE bool matrix44::operator== (M44fParam m) const { + return memcmp(data(), m.data(), 16*sizeof(float)) == 0; +} + +OIIO_FORCEINLINE bool operator== (M44fParam a, const matrix44 &b) { + return (b == a); +} + +OIIO_FORCEINLINE bool matrix44::operator!= (M44fParam m) const { + return memcmp(data(), m.data(), 16*sizeof(float)) != 0; +} + +OIIO_FORCEINLINE bool operator!= (M44fParam a, const matrix44 &b) { + return (b != a); +} + + + +inline matrix44 matrix44::inverse() const +{ + // Adapted from this code from Intel: + // ftp://download.intel.com/design/pentiumiii/sml/24504301.pdf + vfloat4 minor0, minor1, minor2, minor3; + vfloat4 det, tmp1; +#if 0 + // Original code looked like this: + vfloat4 row0, row1, row2, row3; + const float *src = (const float *)&msrc; + tmp1.load_pairs(src, src+ 4); + row1.load_pairs(src+8, src+12); + row0 = shuffle<0x88>(tmp1, row1); + row1 = shuffle<0xDD>(row1, tmp1); + tmp1.load_pairs(src+ 2, src+ 6); + row3.load_pairs(src+10, src+14); + row2 = shuffle<0x88>(tmp1, row3); + row3 = shuffle<0xDD>(row3, tmp1); +#else + // But this is simpler and easier to understand: + matrix44 Mt = this->transposed(); + vfloat4 row0 = Mt[0]; + vfloat4 row1 = shuffle<2,3,0,1>(Mt[1]); + vfloat4 row2 = Mt[2]; + vfloat4 row3 = shuffle<2,3,0,1>(Mt[3]); +#endif + // At this point, the row variables should contain the following indices + // of the original input matrix: + // row0 = 0 4 8 12 + // row1 = 9 13 1 5 + // row2 = 2 6 10 14 + // row3 = 11 15 3 7 + + // ----------------------------------------------- + tmp1 = row2 * row3; + tmp1 = shuffle<1,0,3,2>(tmp1); + minor0 = row1 * tmp1; + minor1 = row0 * tmp1; + tmp1 = shuffle<2,3,0,1>(tmp1); + minor0 = (row1 * tmp1) - minor0; + minor1 = (row0 * tmp1) - minor1; + minor1 = shuffle<2,3,0,1>(minor1); + // ----------------------------------------------- + tmp1 = row1 * row2; + tmp1 = shuffle<1,0,3,2>(tmp1); + minor0 = (row3 * tmp1) + minor0; + minor3 = row0 * tmp1; + tmp1 = shuffle<2,3,0,1>(tmp1); + minor0 = minor0 - (row3 * tmp1); + minor3 = (row0 * tmp1) - minor3; + minor3 = shuffle<2,3,0,1>(minor3); + // ----------------------------------------------- + tmp1 = shuffle<2,3,0,1>(row1) * row3; + tmp1 = shuffle<1,0,3,2>(tmp1); + row2 = shuffle<2,3,0,1>(row2); + minor0 = (row2 * tmp1) + minor0; + minor2 = row0 * tmp1; + tmp1 = shuffle<2,3,0,1>(tmp1); + minor0 = minor0 - (row2 * tmp1); + minor2 = (row0 * tmp1) - minor2; + minor2 = shuffle<2,3,0,1>(minor2); + // ----------------------------------------------- + tmp1 = row0 * row1; + tmp1 = shuffle<1,0,3,2>(tmp1); + minor2 = (row3 * tmp1) + minor2; + minor3 = (row2 * tmp1) - minor3; + tmp1 = shuffle<2,3,0,1>(tmp1); + minor2 = (row3 * tmp1) - minor2; + minor3 = minor3 - (row2 * tmp1); + // ----------------------------------------------- + tmp1 = row0 * row3; + tmp1 = shuffle<1,0,3,2>(tmp1); + minor1 = minor1 - (row2 * tmp1); + minor2 = (row1 * tmp1) + minor2; + tmp1 = shuffle<2,3,0,1>(tmp1); + minor1 = (row2 * tmp1) + minor1; + minor2 = minor2 - (row1 * tmp1); + // ----------------------------------------------- + tmp1 = row0 * row2; + tmp1 = shuffle<1,0,3,2>(tmp1); + minor1 = (row3 * tmp1) + minor1; + minor3 = minor3 - (row1 * tmp1); + tmp1 = shuffle<2,3,0,1>(tmp1); + minor1 = minor1 - (row3 * tmp1); + minor3 = (row1 * tmp1) + minor3; + // ----------------------------------------------- + det = row0 * minor0; + float det0 = reduce_add(det); + float tmp1_0 = 1.0f / det0; + det0 = (tmp1_0 + tmp1_0) - (det0 * tmp1_0 * tmp1_0); + det = vfloat4(det0); + return matrix44 (det*minor0, det*minor1, det*minor2, det*minor3); +} + + + +inline std::ostream& operator<< (std::ostream& cout, const matrix44 &M) { + const float *m = (const float *)&M; + cout << m[0]; + for (int i = 1; i < 16; ++i) + cout << ' ' << m[i]; + return cout; +} + + + +OIIO_FORCEINLINE vfloat3 transformp (const matrix44 &M, const vfloat3 &V) { + return M.transformp (V); +} + +OIIO_FORCEINLINE vfloat3 transformv (const matrix44 &M, const vfloat3 &V) { + return M.transformv (V); +} + +OIIO_FORCEINLINE vfloat3 transformvT (const matrix44 &M, const vfloat3 &V) +{ + return M.transformvT (V); +} + + +OIIO_FORCEINLINE vfloat3 transformp (M44fParam M, const vfloat3 &V) +{ + return matrix44(M).transformp(V); +} + +OIIO_FORCEINLINE vfloat3 transformv (M44fParam M, const vfloat3 &V) +{ + return matrix44(M).transformv(V); +} + +OIIO_FORCEINLINE vfloat3 transformvT (M44fParam M, const vfloat3 &V) +{ + return matrix44(M).transformvT(V); +} + + + +////////////////////////////////////////////////////////////////////// +// vfloat8 implementation + +OIIO_FORCEINLINE float& vfloat8::operator[] (int i) { + OIIO_DASSERT(i= 0 && n <= elements); +#if 0 && OIIO_AVX512VL_ENABLED + // This SHOULD be fast, but in my benchmarks, it is slower! + // (At least on the AVX512 hardware I have, Xeon Silver 4110.) + // Re-test this periodically with new Intel hardware. + m_simd = _mm256_maskz_loadu_ps ((~(0xff << n)), values); +#elif OIIO_SIMD_SSE || OIIO_SIMD_NEON + if (n > 4) { + vfloat4 lo, hi; + lo.load (values); + hi.load (values+4, n-4); + m_4[0] = lo; + m_4[1] = hi; + } else { + vfloat4 lo, hi; + lo.load (values, n); + hi.clear(); + m_4[0] = lo; + m_4[1] = hi; + } +#else + for (int i = 0; i < n; ++i) + m_val[i] = values[i]; + for (int i = n; i < paddedelements; ++i) + m_val[i] = 0; +#endif +} + + +OIIO_FORCEINLINE void vfloat8::load (const unsigned short *values) { +#if OIIO_SIMD_AVX + // Rely on the ushort->int conversion, then convert to float + m_simd = _mm256_cvtepi32_ps (vint8(values).simd()); +#elif OIIO_SIMD_SSE || OIIO_SIMD_NEON + m_4[0].load(values); + m_4[1].load(values+4); +#else + SIMD_CONSTRUCT (values[i]); +#endif +} + + +OIIO_FORCEINLINE void vfloat8::load (const short *values) { +#if OIIO_SIMD_AVX + // Rely on the short->int conversion, then convert to float + m_simd = _mm256_cvtepi32_ps (vint8(values).simd()); +#elif OIIO_SIMD_SSE || OIIO_SIMD_NEON + m_4[0].load(values); + m_4[1].load(values+4); +#else + SIMD_CONSTRUCT (values[i]); +#endif +} + + +OIIO_FORCEINLINE void vfloat8::load (const unsigned char *values) { +#if OIIO_SIMD_AVX + m_simd = _mm256_cvtepi32_ps (vint8(values).simd()); +#elif OIIO_SIMD_SSE || OIIO_SIMD_NEON + m_4[0].load(values); + m_4[1].load(values+4); +#else + SIMD_CONSTRUCT (values[i]); +#endif +} + + +OIIO_FORCEINLINE void vfloat8::load (const char *values) { +#if OIIO_SIMD_AVX + m_simd = _mm256_cvtepi32_ps (vint8(values).simd()); +#elif OIIO_SIMD_SSE || OIIO_SIMD_NEON + m_4[0].load(values); + m_4[1].load(values+4); +#else + SIMD_CONSTRUCT (values[i]); +#endif +} + +#if defined(_HALF_H_) || defined(IMATH_HALF_H_) +OIIO_FORCEINLINE void vfloat8::load (const half *values) { +#if OIIO_SIMD_AVX && OIIO_F16C_ENABLED + /* Enabled 16 bit float instructions! */ + vint4 a ((const int *)values); + m_simd = _mm256_cvtph_ps (a); +#elif OIIO_SIMD_SSE >= 2 || OIIO_SIMD_NEON + m_4[0] = vfloat4(values); + m_4[1] = vfloat4(values+4); +#else /* No SIMD defined: */ + SIMD_CONSTRUCT (values[i]); +#endif +} +#endif /* _HALF_H_ or _IMATH_H_ */ + + +OIIO_FORCEINLINE void vfloat8::store (float *values) const { +#if OIIO_SIMD_AVX + // Use an unaligned store -- it's just as fast when the memory turns + // out to be aligned, nearly as fast even when unaligned. Not worth + // the headache of using stores that require alignment. + _mm256_storeu_ps (values, m_simd); +#elif OIIO_SIMD_SSE || OIIO_SIMD_NEON + m_4[0].store(values); + m_4[1].store(values+4); +#else + SIMD_DO (values[i] = m_val[i]); +#endif +} + + +OIIO_FORCEINLINE void vfloat8::store (float *values, int n) const { + OIIO_DASSERT (n >= 0 && n <= elements); +#if 0 && OIIO_AVX512VL_ENABLED + // This SHOULD be fast, but in my benchmarks, it is slower! + // (At least on the AVX512 hardware I have, Xeon Silver 4110.) + // Re-test this periodically with new Intel hardware. + _mm256_mask_storeu_ps (values, __mmask8(~(0xff << n)), m_simd); +#elif OIIO_SIMD_SSE || OIIO_SIMD_NEON + if (n <= 4) { + lo().store (values, n); + } else if (n <= 8) { + lo().store (values); + hi().store (values+4, n-4); + } +#else + for (int i = 0; i < n; ++i) + values[i] = m_val[i]; +#endif +} + +#if defined(_HALF_H_) || defined(IMATH_HALF_H_) +OIIO_FORCEINLINE void vfloat8::store (half *values) const { +#if OIIO_SIMD_AVX && OIIO_F16C_ENABLED + __m128i h = _mm256_cvtps_ph (m_simd, _MM_FROUND_TO_NEAREST_INT); + _mm_storeu_si128 ((__m128i *)values, h); +#elif OIIO_SIMD_SSE || OIIO_SIMD_NEON + m_4[0].store(values); + m_4[1].store(values+4); +#else + SIMD_DO (values[i] = m_val[i]); +#endif +} +#endif + + +OIIO_FORCEINLINE void vfloat8::load_mask (int mask, const float *values) { +#if OIIO_SIMD_AVX >= 512 && OIIO_AVX512VL_ENABLED + m_simd = _mm256_maskz_loadu_ps (__mmask8(mask), (const simd_t *)values); +#elif OIIO_SIMD_AVX + m_simd = _mm256_maskload_ps (values, _mm256_castps_si256(vbool8::from_bitmask(mask))); +#else + SIMD_CONSTRUCT ((mask>>i) & 1 ? values[i] : 0.0f); +#endif +} + + +OIIO_FORCEINLINE void vfloat8::load_mask (const vbool8& mask, const float *values) { +#if OIIO_SIMD_AVX >= 512 && OIIO_AVX512VL_ENABLED + m_simd = _mm256_maskz_loadu_ps (__mmask8(mask.bitmask()), (const simd_t *)values); +#elif OIIO_SIMD_AVX + m_simd = _mm256_maskload_ps (values, _mm256_castps_si256(mask)); +#else + SIMD_CONSTRUCT (mask[i] ? values[i] : 0.0f); +#endif +} + + +OIIO_FORCEINLINE void vfloat8::store_mask (int mask, float *values) const { +#if OIIO_SIMD_AVX >= 512 && OIIO_AVX512VL_ENABLED + _mm256_mask_storeu_ps (values, __mmask8(mask), m_simd); +#elif OIIO_SIMD_AVX + _mm256_maskstore_ps (values, _mm256_castps_si256(vbool8::from_bitmask(mask)), m_simd); +#else + SIMD_DO (if ((mask>>i) & 1) values[i] = (*this)[i]); +#endif +} + + +OIIO_FORCEINLINE void vfloat8::store_mask (const vbool8& mask, float *values) const { +#if OIIO_SIMD_AVX >= 512 && OIIO_AVX512VL_ENABLED + _mm256_mask_storeu_ps (values, __mmask8(mask.bitmask()), m_simd); +#elif OIIO_SIMD_AVX + _mm256_maskstore_ps (values, _mm256_castps_si256(mask.simd()), m_simd); +#else + SIMD_DO (if (mask[i]) values[i] = (*this)[i]); +#endif +} + + +template +OIIO_FORCEINLINE void +vfloat8::gather (const value_t *baseptr, const vint_t& vindex) +{ +#if OIIO_SIMD_AVX >= 2 + m_simd = _mm256_i32gather_ps (baseptr, vindex, scale); +#else + SIMD_CONSTRUCT (*(const value_t *)((const char *)baseptr + vindex[i]*scale)); +#endif +} + +template +OIIO_FORCEINLINE void +vfloat8::gather_mask (const vbool_t& mask, const value_t *baseptr, const vint_t& vindex) +{ +#if OIIO_SIMD_AVX >= 2 + m_simd = _mm256_mask_i32gather_ps (m_simd, baseptr, vindex, mask, scale); +#else + SIMD_DO (if (mask[i]) m_val[i] = *(const value_t *)((const char *)baseptr + vindex[i]*scale)); +#endif +} + +template +OIIO_FORCEINLINE void +vfloat8::scatter (value_t *baseptr, const vint_t& vindex) const +{ +#if OIIO_SIMD_AVX >= 512 && OIIO_AVX512VL_ENABLED + _mm256_i32scatter_ps (baseptr, vindex, m_simd, scale); +#else + SIMD_DO (*(value_t *)((char *)baseptr + vindex[i]*scale) = m_val[i]); +#endif +} + +template +OIIO_FORCEINLINE void +vfloat8::scatter_mask (const vbool_t& mask, value_t *baseptr, + const vint_t& vindex) const +{ +#if OIIO_SIMD_AVX >= 512 && OIIO_AVX512VL_ENABLED + _mm256_mask_i32scatter_ps (baseptr, mask.bitmask(), vindex, m_simd, scale); +#else + SIMD_DO (if (mask[i]) *(value_t *)((char *)baseptr + vindex[i]*scale) = m_val[i]); +#endif +} + + + +OIIO_FORCEINLINE vfloat8 operator+ (const vfloat8& a, const vfloat8& b) { +#if OIIO_SIMD_AVX + return _mm256_add_ps (a, b); +#else + return vfloat8 (a.lo()+b.lo(), a.hi()+b.hi()); +#endif +} + +OIIO_FORCEINLINE const vfloat8 & operator+= (vfloat8 & a, const vfloat8& b) { + return a = a + b; +} + +OIIO_FORCEINLINE vfloat8 operator- (const vfloat8& a) { +#if OIIO_SIMD_AVX + return _mm256_sub_ps (_mm256_setzero_ps(), a); +#else + return vfloat8 (-a.lo(), -a.hi()); +#endif +} + +OIIO_FORCEINLINE vfloat8 operator- (const vfloat8& a, const vfloat8& b) { +#if OIIO_SIMD_AVX + return _mm256_sub_ps (a, b); +#else + return vfloat8 (a.lo()-b.lo(), a.hi()-b.hi()); +#endif +} + +OIIO_FORCEINLINE const vfloat8 & operator-= (vfloat8 & a, const vfloat8& b) { + return a = a - b; +} + +OIIO_FORCEINLINE vfloat8 operator* (const vfloat8& a, float b) { +#if OIIO_SIMD_AVX + return _mm256_mul_ps (a.m_simd, _mm256_set1_ps(b)); +#else + return vfloat8 (a.lo()*b, a.hi()*b); +#endif +} + +OIIO_FORCEINLINE vfloat8 operator* (float a, const vfloat8& b) { + return b * a; +} + +OIIO_FORCEINLINE vfloat8 operator* (const vfloat8& a, const vfloat8& b) { +#if OIIO_SIMD_AVX + return _mm256_mul_ps (a, b); +#else + return vfloat8 (a.lo()*b.lo(), a.hi()*b.hi()); +#endif +} + +OIIO_FORCEINLINE const vfloat8 & operator*= (vfloat8 & a, const vfloat8& b) { + return a = a * b; +} + +OIIO_FORCEINLINE vfloat8 operator/ (const vfloat8& a, const vfloat8& b) { +#if OIIO_SIMD_AVX + return _mm256_div_ps (a, b); +#else + return vfloat8 (a.lo()/b.lo(), a.hi()/b.hi()); +#endif +} + +OIIO_FORCEINLINE const vfloat8 & operator/= (vfloat8 & a, const vfloat8& b) { + return a = a / b; +} + +OIIO_FORCEINLINE vbool8 operator== (const vfloat8& a, const vfloat8& b) { +#if OIIO_SIMD_AVX + return _mm256_cmp_ps (a, b, _CMP_EQ_OQ); +#else + return vbool8 (a.lo() == b.lo(), a.hi() == b.hi()); +#endif +} + +OIIO_FORCEINLINE vbool8 operator!= (const vfloat8& a, const vfloat8& b) { +#if OIIO_SIMD_AVX + return _mm256_cmp_ps (a, b, _CMP_NEQ_OQ); +#else + return vbool8 (a.lo() != b.lo(), a.hi() != b.hi()); +#endif +} + +OIIO_FORCEINLINE vbool8 operator< (const vfloat8& a, const vfloat8& b) { +#if OIIO_SIMD_AVX + return _mm256_cmp_ps (a, b, _CMP_LT_OQ); +#else + return vbool8 (a.lo() < b.lo(), a.hi() < b.hi()); +#endif +} + +OIIO_FORCEINLINE vbool8 operator> (const vfloat8& a, const vfloat8& b) { +#if OIIO_SIMD_AVX + return _mm256_cmp_ps (a, b, _CMP_GT_OQ); +#else + return vbool8 (a.lo() > b.lo(), a.hi() > b.hi()); +#endif +} + +OIIO_FORCEINLINE vbool8 operator>= (const vfloat8& a, const vfloat8& b) { +#if OIIO_SIMD_AVX + return _mm256_cmp_ps (a, b, _CMP_GE_OQ); +#else + return vbool8 (a.lo() >= b.lo(), a.hi() >= b.hi()); +#endif +} + +OIIO_FORCEINLINE vbool8 operator<= (const vfloat8& a, const vfloat8& b) { +#if OIIO_SIMD_AVX + return _mm256_cmp_ps (a, b, _CMP_LE_OQ); +#else + return vbool8 (a.lo() <= b.lo(), a.hi() <= b.hi()); +#endif +} + + +// Implementation had to be after the definition of vfloat8. +OIIO_FORCEINLINE vint8::vint8 (const vfloat8& f) +{ +#if OIIO_SIMD_AVX + m_simd = _mm256_cvttps_epi32(f); +#elif OIIO_SIMD_SSE || OIIO_SIMD_NEON + *this = vint8 (vint4(f.lo()), vint4(f.hi())); +#else + SIMD_CONSTRUCT ((int) f[i]); +#endif +} + + +template +OIIO_FORCEINLINE vfloat8 shuffle (const vfloat8& a) { +#if OIIO_SIMD_AVX >= 2 + vint8 index (i0, i1, i2, i3, i4, i5, i6, i7); + return _mm256_permutevar8x32_ps (a, index); +#else + return vfloat8 (a[i0], a[i1], a[i2], a[i3], a[i4], a[i5], a[i6], a[i7]); +#endif +} + +template OIIO_FORCEINLINE vfloat8 broadcast_element(const vfloat8& a) { +#if OIIO_SIMD_AVX >= 2 + return _mm256_permutevar8x32_ps (a, vint8(i)); +#else + return a[i]; +#endif +} + +// DEPRECATED(3.1): old name; use broadcast_element instead +template OIIO_FORCEINLINE vfloat8 shuffle(const vfloat8& a) { + return broadcast_element(a); +} + + +template +OIIO_FORCEINLINE float extract (const vfloat8& v) { +#if OIIO_SIMD_AVX_NO_FIXME + // Looks like the fastest we can do it is to extract a vfloat4, + // shuffle its one element everywhere, then extract element 0. + _m128 f4 = _mm256_extractf128_ps (i >> 2); + int j = i & 3; + return _mm_cvtss_f32(shuffle_sse(a.simd())); +#else + return v[i]; +#endif +} + + +template +OIIO_FORCEINLINE vfloat8 insert (const vfloat8& a, float val) { +#if OIIO_SIMD_AVX_NO_FIXME + return _mm256_insert_epi32 (a, val, i); +#else + vfloat8 tmp = a; + tmp[i] = val; + return tmp; +#endif +} + + +OIIO_FORCEINLINE float vfloat8::x () const { return extract<0>(*this); } +OIIO_FORCEINLINE float vfloat8::y () const { return extract<1>(*this); } +OIIO_FORCEINLINE float vfloat8::z () const { return extract<2>(*this); } +OIIO_FORCEINLINE float vfloat8::w () const { return extract<3>(*this); } +OIIO_FORCEINLINE void vfloat8::set_x (float val) { *this = insert<0>(*this, val); } +OIIO_FORCEINLINE void vfloat8::set_y (float val) { *this = insert<1>(*this, val); } +OIIO_FORCEINLINE void vfloat8::set_z (float val) { *this = insert<2>(*this, val); } +OIIO_FORCEINLINE void vfloat8::set_w (float val) { *this = insert<3>(*this, val); } + + +OIIO_FORCEINLINE vint8 bitcast_to_int (const vfloat8& x) +{ +#if OIIO_SIMD_AVX + return _mm256_castps_si256 (x.simd()); +#else + return vint8(bitcast_to_int(x.lo()), bitcast_to_int(x.hi())); +#endif +} + +OIIO_FORCEINLINE vfloat8 bitcast_to_float (const vint8& x) +{ +#if OIIO_SIMD_AVX + return _mm256_castsi256_ps (x.simd()); +#else + return vfloat8(bitcast_to_float(x.lo()), bitcast_to_float(x.hi())); +#endif +} + + +OIIO_FORCEINLINE vfloat8 vreduce_add (const vfloat8& v) { +#if OIIO_SIMD_AVX + // From Syrah: + vfloat8 ab_cd_0_0_ef_gh_0_0 = _mm256_hadd_ps(v.simd(), _mm256_setzero_ps()); + vfloat8 abcd_0_0_0_efgh_0_0_0 = _mm256_hadd_ps(ab_cd_0_0_ef_gh_0_0, _mm256_setzero_ps()); + // get efgh in the 0-idx slot + vfloat8 efgh = broadcast_element<4>(abcd_0_0_0_efgh_0_0_0); + vfloat8 final_sum = abcd_0_0_0_efgh_0_0_0 + efgh; + return broadcast_element<0>(final_sum); +#else + vfloat4 hadd4 = vreduce_add(v.lo()) + vreduce_add(v.hi()); + return vfloat8(hadd4, hadd4); +#endif +} + + +OIIO_FORCEINLINE float reduce_add (const vfloat8& v) { +#if OIIO_SIMD_AVX >= 2 + return extract<0>(vreduce_add(v)); +#else + return reduce_add(v.lo()) + reduce_add(v.hi()); +#endif +} + + +OIIO_FORCEINLINE vfloat8 blend (const vfloat8& a, const vfloat8& b, const vbool8& mask) +{ +#if OIIO_SIMD_AVX + return _mm256_blendv_ps (a, b, mask); +#elif OIIO_SIMD_SSE || OIIO_SIMD_NEON + return vfloat8 (blend (a.lo(), b.lo(), mask.lo()), + blend (a.hi(), b.hi(), mask.hi())); +#else + SIMD_RETURN (vfloat8, mask[i] ? b[i] : a[i]); +#endif +} + + +OIIO_FORCEINLINE vfloat8 blend0 (const vfloat8& a, const vbool8& mask) +{ +#if OIIO_SIMD_AVX + return _mm256_and_ps(mask, a); +#elif OIIO_SIMD_SSE || OIIO_SIMD_NEON + return vfloat8 (blend0 (a.lo(), mask.lo()), + blend0 (a.hi(), mask.hi())); +#else + SIMD_RETURN (vfloat8, mask[i] ? a[i] : 0.0f); +#endif +} + + +OIIO_FORCEINLINE vfloat8 blend0not (const vfloat8& a, const vbool8& mask) +{ +#if OIIO_SIMD_AVX + return _mm256_andnot_ps(mask, a); +#elif OIIO_SIMD_SSE || OIIO_SIMD_NEON + return vfloat8 (blend0not (a.lo(), mask.lo()), + blend0not (a.hi(), mask.hi())); +#else + SIMD_RETURN (vfloat8, mask[i] ? 0.0f : a[i]); +#endif +} + + +OIIO_FORCEINLINE vfloat8 select (const vbool8& mask, const vfloat8& a, const vfloat8& b) +{ + return blend (b, a, mask); +} + + +OIIO_FORCEINLINE vfloat8 safe_div (const vfloat8 &a, const vfloat8 &b) { +#if OIIO_SIMD_SSE + return blend0not (a/b, b == vfloat8::Zero()); +#else + SIMD_RETURN (vfloat8, b[i] == 0.0f ? 0.0f : a[i] / b[i]); +#endif +} + + +OIIO_FORCEINLINE vfloat8 abs (const vfloat8& a) +{ +#if OIIO_SIMD_AVX + // Just clear the sign bit for cheap fabsf + return _mm256_and_ps (a.simd(), _mm256_castsi256_ps(_mm256_set1_epi32(0x7fffffff))); +#elif OIIO_SIMD_SSE || OIIO_SIMD_NEON + return vfloat8(abs(a.lo()), abs(a.hi())); +#else + SIMD_RETURN (vfloat8, fabsf(a[i])); +#endif +} + + +OIIO_FORCEINLINE vfloat8 sign (const vfloat8& a) +{ + vfloat8 one(1.0f); + return blend (one, -one, a < vfloat8::Zero()); +} + + +OIIO_FORCEINLINE vfloat8 ceil (const vfloat8& a) +{ +#if OIIO_SIMD_AVX + return _mm256_ceil_ps (a); +#else + SIMD_RETURN (vfloat8, ceilf(a[i])); +#endif +} + +OIIO_FORCEINLINE vfloat8 floor (const vfloat8& a) +{ +#if OIIO_SIMD_AVX + return _mm256_floor_ps (a); +#else + SIMD_RETURN (vfloat8, floorf(a[i])); +#endif +} + +OIIO_FORCEINLINE vfloat8 round (const vfloat8& a) +{ +#if OIIO_SIMD_AVX + return _mm256_round_ps (a, (_MM_FROUND_TO_NEAREST_INT |_MM_FROUND_NO_EXC)); +#else + SIMD_RETURN (vfloat8, roundf(a[i])); +#endif +} + +OIIO_FORCEINLINE vint8 ifloor (const vfloat8& a) +{ + // FIXME: look into this, versus the method of quick_floor in texturesys.cpp +#if OIIO_SIMD_AVX + return vint8(floor(a)); +#elif OIIO_SIMD_SSE /* SSE2/3 */ + return vint8 (ifloor(a.lo()), ifloor(a.hi())); +#else + SIMD_RETURN (vint8, (int)floorf(a[i])); +#endif +} + + +OIIO_FORCEINLINE vint8 rint (const vfloat8& a) +{ + return vint8 (round(a)); +} + + + +OIIO_FORCEINLINE vfloat8 rcp_fast (const vfloat8 &a) +{ +#if OIIO_SIMD_AVX512 && OIIO_AVX512VL_ENABLED + vfloat8 r = _mm256_rcp14_ps(a); + return r * nmadd(r,a,vfloat8(2.0f)); +#elif OIIO_SIMD_AVX + vfloat8 r = _mm256_rcp_ps(a); + return r * nmadd(r,a,vfloat8(2.0f)); +#else + return vfloat8(rcp_fast(a.lo()), rcp_fast(a.hi())); +#endif +} + + +OIIO_FORCEINLINE vfloat8 sqrt (const vfloat8 &a) +{ +#if OIIO_SIMD_AVX + return _mm256_sqrt_ps (a.simd()); +#else + SIMD_RETURN (vfloat8, sqrtf(a[i])); +#endif +} + + + +OIIO_FORCEINLINE vfloat8 rsqrt (const vfloat8 &a) +{ +#if OIIO_SIMD_AVX + return _mm256_div_ps (_mm256_set1_ps(1.0f), _mm256_sqrt_ps (a.simd())); +#else + SIMD_RETURN (vfloat8, 1.0f/sqrtf(a[i])); +#endif +} + + + +OIIO_FORCEINLINE vfloat8 rsqrt_fast (const vfloat8 &a) +{ +#if OIIO_SIMD_AVX >= 512 && OIIO_AVX512VL_ENABLED + // Trickery: in and out of the 512 bit registers to use fast approx rsqrt + return _mm512_castps512_ps256(_mm512_rsqrt14_ps(_mm512_castps256_ps512(a))); +#elif OIIO_SIMD_AVX + return _mm256_rsqrt_ps (a.simd()); +#elif OIIO_SIMD_SSE + return vfloat8 (rsqrt_fast(a.lo()), rsqrt_fast(a.hi())); +#else + SIMD_RETURN (vfloat8, 1.0f/sqrtf(a[i])); +#endif +} + + + +OIIO_FORCEINLINE vfloat8 min (const vfloat8& a, const vfloat8& b) +{ +#if OIIO_SIMD_AVX + return _mm256_min_ps (a, b); +#else + return vfloat8 (min(a.lo(), b.lo()), min(a.hi(), b.hi())); +#endif +} + +OIIO_FORCEINLINE vfloat8 max (const vfloat8& a, const vfloat8& b) +{ +#if OIIO_SIMD_AVX + return _mm256_max_ps (a, b); +#else + return vfloat8 (max(a.lo(), b.lo()), max(a.hi(), b.hi())); +#endif +} + + +OIIO_FORCEINLINE vfloat8 andnot (const vfloat8& a, const vfloat8& b) { +#if OIIO_SIMD_AVX + return _mm256_andnot_ps (a.simd(), b.simd()); +#else + vint8 ai = bitcast_to_int(a); + vint8 bi = bitcast_to_int(b); + return bitcast_to_float(vint8(~(ai[0]) & bi[0], + ~(ai[1]) & bi[1], + ~(ai[2]) & bi[2], + ~(ai[3]) & bi[3], + ~(ai[4]) & bi[4], + ~(ai[5]) & bi[5], + ~(ai[6]) & bi[6], + ~(ai[7]) & bi[7])); +#endif +} + + +OIIO_FORCEINLINE vfloat8 madd (const simd::vfloat8& a, const simd::vfloat8& b, + const simd::vfloat8& c) +{ +#if OIIO_SIMD_AVX && OIIO_FMA_ENABLED + // If we are sure _mm256_fmadd_ps intrinsic is available, use it. + return _mm256_fmadd_ps (a, b, c); +#elif OIIO_SIMD_SSE || OIIO_SIMD_NEON + return vfloat8 (madd(a.lo(), b.lo(), c.lo()), + madd(a.hi(), b.hi(), c.hi())); +#else + // Fallback: just use regular math and hope for the best. + return a * b + c; +#endif +} + + +OIIO_FORCEINLINE vfloat8 msub (const simd::vfloat8& a, const simd::vfloat8& b, + const simd::vfloat8& c) +{ +#if OIIO_SIMD_AVX && OIIO_FMA_ENABLED + // If we are sure _mm256_fnmsub_ps intrinsic is available, use it. + return _mm256_fmsub_ps (a, b, c); +#elif OIIO_SIMD_SSE || OIIO_SIMD_NEON + return vfloat8 (msub(a.lo(), b.lo(), c.lo()), + msub(a.hi(), b.hi(), c.hi())); +#else + // Fallback: just use regular math and hope for the best. + return a * b - c; +#endif +} + + + +OIIO_FORCEINLINE vfloat8 nmadd (const simd::vfloat8& a, const simd::vfloat8& b, + const simd::vfloat8& c) +{ +#if OIIO_SIMD_AVX && OIIO_FMA_ENABLED + // If we are sure _mm256_fnmadd_ps intrinsic is available, use it. + return _mm256_fnmadd_ps (a, b, c); +#elif OIIO_SIMD_SSE || OIIO_SIMD_NEON + return vfloat8 (nmadd(a.lo(), b.lo(), c.lo()), + nmadd(a.hi(), b.hi(), c.hi())); +#else + // Fallback: just use regular math and hope for the best. + return c - a * b; +#endif +} + + + +OIIO_FORCEINLINE vfloat8 nmsub (const simd::vfloat8& a, const simd::vfloat8& b, + const simd::vfloat8& c) +{ +#if OIIO_SIMD_AVX && OIIO_FMA_ENABLED + // If we are sure _mm256_fnmsub_ps intrinsic is available, use it. + return _mm256_fnmsub_ps (a, b, c); +#elif OIIO_SIMD_SSE || OIIO_SIMD_NEON + return vfloat8 (nmsub(a.lo(), b.lo(), c.lo()), + nmsub(a.hi(), b.hi(), c.hi())); +#else + // Fallback: just use regular math and hope for the best. + return -(a * b) - c; +#endif +} + + + + +////////////////////////////////////////////////////////////////////// +// vfloat16 implementation + +OIIO_FORCEINLINE float& vfloat16::operator[] (int i) { + OIIO_DASSERT(i= 512 + return _mm512_castps512_ps256 (simd()); +#else + return m_8[0]; +#endif +} + +OIIO_FORCEINLINE vfloat8 vfloat16::hi () const { +#if OIIO_SIMD_AVX >= 512 && OIIO_AVX512DQ_ENABLED + return _mm512_extractf32x8_ps (simd(), 1); +#else + return m_8[1]; +#endif +} + + +OIIO_FORCEINLINE vfloat16::vfloat16 (float v0, float v1, float v2, float v3, + float v4, float v5, float v6, float v7, + float v8, float v9, float v10, float v11, + float v12, float v13, float v14, float v15) { + load (v0, v1, v2, v3, v4, v5, v6, v7, + v8, v9, v10, v11, v12, v13, v14, v15); +} + +OIIO_FORCEINLINE vfloat16::vfloat16 (const vfloat8& lo, const vfloat8 &hi) { +#if OIIO_SIMD_AVX >= 512 + __m512 r = _mm512_castps256_ps512 (lo); + m_simd = _mm512_insertf32x8 (r, hi, 1); +#else + m_8[0] = lo; + m_8[1] = hi; +#endif +} + +OIIO_FORCEINLINE vfloat16::vfloat16 (const vfloat4 &a, const vfloat4 &b, const vfloat4 &c, const vfloat4 &d) { +#if OIIO_SIMD_AVX >= 512 + m_simd = _mm512_broadcast_f32x4(a); + m_simd = _mm512_insertf32x4 (m_simd, b, 1); + m_simd = _mm512_insertf32x4 (m_simd, c, 2); + m_simd = _mm512_insertf32x4 (m_simd, d, 3); +#else + m_8[0] = vfloat8(a,b); + m_8[1] = vfloat8(c,d); +#endif +} + + +OIIO_FORCEINLINE vfloat16::vfloat16 (const vint16& ival) { +#if OIIO_SIMD_AVX >= 512 + m_simd = _mm512_cvtepi32_ps (ival); +#else + SIMD_CONSTRUCT (float(ival[i])); +#endif +} + + +OIIO_FORCEINLINE const vfloat16 vfloat16::Zero () { +#if OIIO_SIMD_AVX >= 512 + return _mm512_setzero_ps(); +#else + return vfloat16(0.0f); +#endif +} + +OIIO_FORCEINLINE const vfloat16 vfloat16::One () { + return vfloat16(1.0f); +} + +OIIO_FORCEINLINE const vfloat16 vfloat16::Iota (float start, float step) { + return vfloat16 (start+0.0f*step, start+1.0f*step, start+2.0f*step, start+3.0f*step, + start+4.0f*step, start+5.0f*step, start+6.0f*step, start+7.0f*step, + start+8.0f*step, start+9.0f*step, start+10.0f*step, start+11.0f*step, + start+12.0f*step, start+13.0f*step, start+14.0f*step, start+15.0f*step); +} + +/// Set all components to 0.0 +OIIO_FORCEINLINE void vfloat16::clear () { +#if OIIO_SIMD_AVX >= 512 + m_simd = _mm512_setzero_ps(); +#else + load (0.0f); +#endif +} + + +OIIO_FORCEINLINE void vfloat16::load (float a) { +#if OIIO_SIMD_AVX >= 512 + m_simd = _mm512_set1_ps (a); +#else + m_8[0].load (a); + m_8[1].load (a); +#endif +} + + +OIIO_FORCEINLINE void vfloat16::load (float v0, float v1, float v2, float v3, + float v4, float v5, float v6, float v7, + float v8, float v9, float v10, float v11, + float v12, float v13, float v14, float v15) { +#if OIIO_SIMD_AVX >= 512 + m_simd = _mm512_setr_ps (v0, v1, v2, v3, v4, v5, v6, v7, + v8, v9, v10, v11, v12, v13, v14, v15); +#else + m_val[ 0] = v0; + m_val[ 1] = v1; + m_val[ 2] = v2; + m_val[ 3] = v3; + m_val[ 4] = v4; + m_val[ 5] = v5; + m_val[ 6] = v6; + m_val[ 7] = v7; + m_val[ 8] = v8; + m_val[ 9] = v9; + m_val[10] = v10; + m_val[11] = v11; + m_val[12] = v12; + m_val[13] = v13; + m_val[14] = v14; + m_val[15] = v15; +#endif +} + + +OIIO_FORCEINLINE void vfloat16::load (const float *values) { +#if OIIO_SIMD_AVX >= 512 + m_simd = _mm512_loadu_ps (values); +#else + m_8[0].load (values); + m_8[1].load (values+8); +#endif +} + + +OIIO_FORCEINLINE void vfloat16::load (const float *values, int n) +{ + OIIO_DASSERT (n >= 0 && n <= elements); +#if OIIO_SIMD_AVX >= 512 + m_simd = _mm512_maskz_loadu_ps (__mmask16(~(0xffff << n)), values); +#else + if (n > 8) { + m_8[0].load (values); + m_8[1].load (values+8, n-8); + } else { + m_8[0].load (values, n); + m_8[1].clear (); + } +#endif +} + + +OIIO_FORCEINLINE void vfloat16::load (const unsigned short *values) { +#if OIIO_SIMD_AVX >= 512 + // Rely on the ushort->int conversion, then convert to float + m_simd = _mm512_cvtepi32_ps (vint16(values).simd()); +#else + m_8[0].load (values); + m_8[1].load (values+8); +#endif +} + + +OIIO_FORCEINLINE void vfloat16::load (const short *values) { +#if OIIO_SIMD_AVX >= 512 + // Rely on the short->int conversion, then convert to float + m_simd = _mm512_cvtepi32_ps (vint16(values).simd()); +#else + m_8[0].load (values); + m_8[1].load (values+8); +#endif +} + + +OIIO_FORCEINLINE void vfloat16::load (const unsigned char *values) { +#if OIIO_SIMD_AVX >= 512 + m_simd = _mm512_cvtepi32_ps (vint16(values).simd()); +#else + m_8[0].load (values); + m_8[1].load (values+8); +#endif +} + + +OIIO_FORCEINLINE void vfloat16::load (const char *values) { +#if OIIO_SIMD_AVX >= 512 + m_simd = _mm512_cvtepi32_ps (vint16(values).simd()); +#else + m_8[0].load (values); + m_8[1].load (values+8); +#endif +} + + +#if defined(_HALF_H_) || defined(IMATH_HALF_H_) +OIIO_FORCEINLINE void vfloat16::load (const half *values) { +#if OIIO_SIMD_AVX >= 512 + /* Enabled 16 bit float instructions! */ + vint8 a ((const int *)values); + m_simd = _mm512_cvtph_ps (a); +#else + m_8[0].load (values); + m_8[1].load (values+8); +#endif +} +#endif /* _HALF_H_ or _IMATH_H_ */ + + + +OIIO_FORCEINLINE void vfloat16::store (float *values) const { +#if OIIO_SIMD_AVX >= 512 + // Use an unaligned store -- it's just as fast when the memory turns + // out to be aligned, nearly as fast even when unaligned. Not worth + // the headache of using stores that require alignment. + _mm512_storeu_ps (values, m_simd); +#else + m_8[0].store (values); + m_8[1].store (values+8); +#endif +} + + +OIIO_FORCEINLINE void vfloat16::store (float *values, int n) const { + OIIO_DASSERT (n >= 0 && n <= elements); + // FIXME: is this faster with AVX masked stores? +#if 0 && OIIO_SIMD_AVX >= 512 + // This SHOULD be fast, but in my benchmarks, it is slower! + // (At least on the AVX512 hardware I have, Xeon Silver 4110.) + // Re-test this periodically with new Intel hardware. + _mm512_mask_storeu_ps (values, __mmask16(~(0xffff << n)), m_simd); +#else + if (n <= 8) { + lo().store (values, n); + } else if (n < 16) { + lo().store (values); + hi().store (values+8, n-8); + } else { + store (values); + } +#endif +} + +#if defined(_HALF_H_) || defined(IMATH_HALF_H_) +OIIO_FORCEINLINE void vfloat16::store (half *values) const { +#if OIIO_SIMD_AVX >= 512 + __m256i h = _mm512_cvtps_ph (m_simd, _MM_FROUND_TO_NEAREST_INT); + _mm256_storeu_si256 ((__m256i *)values, h); +#else + m_8[0].store (values); + m_8[1].store (values+8); +#endif +} +#endif + + +OIIO_FORCEINLINE void vfloat16::load_mask (const vbool16 &mask, const float *values) { +#if OIIO_SIMD_AVX >= 512 + m_simd = _mm512_maskz_loadu_ps (mask, (const simd_t *)values); +#else + m_8[0].load_mask (mask.lo(), values); + m_8[1].load_mask (mask.hi(), values+8); +#endif +} + + +OIIO_FORCEINLINE void vfloat16::store_mask (const vbool16 &mask, float *values) const { +#if OIIO_SIMD_AVX >= 512 + _mm512_mask_storeu_ps (values, mask.bitmask(), m_simd); +#else + lo().store_mask (mask.lo(), values); + hi().store_mask (mask.hi(), values+8); +#endif +} + + + +template +OIIO_FORCEINLINE void +vfloat16::gather (const value_t *baseptr, const vint_t& vindex) +{ +#if OIIO_SIMD_AVX >= 512 + m_simd = _mm512_i32gather_ps (vindex, baseptr, scale); +#else + m_8[0].gather (baseptr, vindex.lo()); + m_8[1].gather (baseptr, vindex.hi()); +#endif +} + +template +OIIO_FORCEINLINE void +vfloat16::gather_mask (const vbool_t& mask, const value_t *baseptr, const vint_t& vindex) +{ +#if OIIO_SIMD_AVX >= 512 + m_simd = _mm512_mask_i32gather_ps (m_simd, mask, vindex, baseptr, scale); +#else + m_8[0].gather_mask (mask.lo(), baseptr, vindex.lo()); + m_8[1].gather_mask (mask.hi(), baseptr, vindex.hi()); +#endif +} + +template +OIIO_FORCEINLINE void +vfloat16::scatter (value_t *baseptr, const vint_t& vindex) const +{ +#if OIIO_SIMD_AVX >= 512 + _mm512_i32scatter_ps (baseptr, vindex, m_simd, scale); +#else + lo().scatter (baseptr, vindex.lo()); + hi().scatter (baseptr, vindex.hi()); +#endif +} + +template +OIIO_FORCEINLINE void +vfloat16::scatter_mask (const vbool_t& mask, value_t *baseptr, + const vint_t& vindex) const +{ +#if OIIO_SIMD_AVX >= 512 + _mm512_mask_i32scatter_ps (baseptr, mask, vindex, m_simd, scale); +#else + lo().scatter_mask (mask.lo(), baseptr, vindex.lo()); + hi().scatter_mask (mask.hi(), baseptr, vindex.hi()); +#endif +} + + + +OIIO_FORCEINLINE vfloat16 operator+ (const vfloat16& a, const vfloat16& b) { +#if OIIO_SIMD_AVX >= 512 + return _mm512_add_ps (a.m_simd, b.m_simd); +#else + return vfloat16 (a.lo()+b.lo(), a.hi()+b.hi()); +#endif +} + +OIIO_FORCEINLINE const vfloat16 & operator+= (vfloat16& a, const vfloat16& b) { + return a = a + b; +} + +OIIO_FORCEINLINE vfloat16 operator- (const vfloat16& a) { +#if OIIO_SIMD_AVX >= 512 + return _mm512_sub_ps (_mm512_setzero_ps(), a.simd()); +#else + return vfloat16 (-a.lo(), -a.hi()); +#endif +} + +OIIO_FORCEINLINE vfloat16 operator- (const vfloat16& a, const vfloat16& b) { +#if OIIO_SIMD_AVX >= 512 + return _mm512_sub_ps (a.m_simd, b.m_simd); +#else + return vfloat16 (a.lo()-b.lo(), a.hi()-b.hi()); +#endif +} + +OIIO_FORCEINLINE const vfloat16 & operator-= (vfloat16& a, const vfloat16& b) { + return a = a - b; +} + + +OIIO_FORCEINLINE vfloat16 operator* (const vfloat16& a, float b) { +#if OIIO_SIMD_AVX >= 512 + return _mm512_mul_ps (a.m_simd, _mm512_set1_ps(b)); +#else + return vfloat16 (a.lo()*b, a.hi()*b); +#endif +} + +OIIO_FORCEINLINE vfloat16 operator* (float a, const vfloat16& b) { + return b * a; +} + +OIIO_FORCEINLINE vfloat16 operator* (const vfloat16& a, const vfloat16& b) { +#if OIIO_SIMD_AVX >= 512 + return _mm512_mul_ps (a.m_simd, b.m_simd); +#else + return vfloat16 (a.lo()*b.lo(), a.hi()*b.hi()); +#endif +} + +OIIO_FORCEINLINE const vfloat16 & operator*= (vfloat16& a, const vfloat16& b) { + return a = a * b; +} + +OIIO_FORCEINLINE vfloat16 operator/ (const vfloat16& a, const vfloat16& b) { +#if OIIO_SIMD_AVX >= 512 + return _mm512_div_ps (a.m_simd, b.m_simd); +#else + return vfloat16 (a.lo()/b.lo(), a.hi()/b.hi()); +#endif +} + +OIIO_FORCEINLINE const vfloat16 & operator/= (vfloat16& a, const vfloat16& b) { + return a = a / b; +} + + +OIIO_FORCEINLINE vbool16 operator== (const vfloat16& a, const vfloat16& b) { +#if OIIO_SIMD_AVX >= 512 + return _mm512_cmp_ps_mask (a.simd(), b.simd(), _CMP_EQ_OQ); +#else /* Fall back to 8-wide */ + return vbool16 (a.lo() == b.lo(), a.hi() == b.hi()); +#endif +} + + +OIIO_FORCEINLINE vbool16 operator!= (const vfloat16& a, const vfloat16& b) { +#if OIIO_SIMD_AVX >= 512 + return _mm512_cmp_ps_mask (a.simd(), b.simd(), _CMP_NEQ_OQ); +#else /* Fall back to 8-wide */ + return vbool16 (a.lo() != b.lo(), a.hi() != b.hi()); +#endif +} + + +OIIO_FORCEINLINE vbool16 operator< (const vfloat16& a, const vfloat16& b) { +#if OIIO_SIMD_AVX >= 512 + return _mm512_cmp_ps_mask (a.simd(), b.simd(), _CMP_LT_OQ); +#else /* Fall back to 8-wide */ + return vbool16 (a.lo() < b.lo(), a.hi() < b.hi()); +#endif +} + + +OIIO_FORCEINLINE vbool16 operator> (const vfloat16& a, const vfloat16& b) { +#if OIIO_SIMD_AVX >= 512 + return _mm512_cmp_ps_mask (a.simd(), b.simd(), _CMP_GT_OQ); +#else /* Fall back to 8-wide */ + return vbool16 (a.lo() > b.lo(), a.hi() > b.hi()); +#endif +} + + +OIIO_FORCEINLINE vbool16 operator>= (const vfloat16& a, const vfloat16& b) { +#if OIIO_SIMD_AVX >= 512 + return _mm512_cmp_ps_mask (a.simd(), b.simd(), _CMP_GE_OQ); +#else /* Fall back to 8-wide */ + return vbool16 (a.lo() >= b.lo(), a.hi() >= b.hi()); +#endif +} + + +OIIO_FORCEINLINE vbool16 operator<= (const vfloat16& a, const vfloat16& b) { +#if OIIO_SIMD_AVX >= 512 + return _mm512_cmp_ps_mask (a.simd(), b.simd(), _CMP_LE_OQ); +#else /* Fall back to 8-wide */ + return vbool16 (a.lo() <= b.lo(), a.hi() <= b.hi()); +#endif +} + + +// Implementation had to be after the definition of vfloat16. +OIIO_FORCEINLINE vint16::vint16 (const vfloat16& f) +{ +#if OIIO_SIMD_AVX >= 512 + m_simd = _mm512_cvttps_epi32(f); +#else + *this = vint16 (vint8(f.lo()), vint8(f.hi())); +#endif +} + + + +// Shuffle groups of 4 +template +vfloat16 shuffle4 (const vfloat16& a) { +#if OIIO_SIMD_AVX >= 512 + return _mm512_shuffle_f32x4(a,a,_MM_SHUFFLE(i3,i2,i1,i0)); +#else + vfloat4 x[4]; + a.store ((float *)x); + return vfloat16 (x[i0], x[i1], x[i2], x[i3]); +#endif +} + +template vfloat16 shuffle4 (const vfloat16& a) { + return shuffle4 (a); +} + +template +vfloat16 shuffle (const vfloat16& a) { +#if OIIO_SIMD_AVX >= 512 + return _mm512_permute_ps(a,_MM_SHUFFLE(i3,i2,i1,i0)); +#else + vfloat4 x[4]; + a.store ((float *)x); + return vfloat16 (shuffle(x[0]), shuffle(x[1]), + shuffle(x[2]), shuffle(x[3])); +#endif +} + +template vfloat16 broadcast_element(const vfloat16& a) { + return a[i]; +} + +// DEPRECATED(3.1): old name and nonstandard use +template +OIIO_DEPRECATED("Use broadcast_element (3.1)") +vfloat16 shuffle(const vfloat16& a) { + return shuffle (a); +} + + +template +OIIO_FORCEINLINE float extract (const vfloat16& a) { + return a[i]; +} + + +template +OIIO_FORCEINLINE vfloat16 insert (const vfloat16& a, float val) { + vfloat16 tmp = a; + tmp[i] = val; + return tmp; +} + + +OIIO_FORCEINLINE float vfloat16::x () const { +#if OIIO_SIMD_AVX >= 512 + return _mm_cvtss_f32(_mm512_castps512_ps128(m_simd)); +#else + return m_val[0]; +#endif +} + +OIIO_FORCEINLINE float vfloat16::y () const { return m_val[1]; } +OIIO_FORCEINLINE float vfloat16::z () const { return m_val[2]; } +OIIO_FORCEINLINE float vfloat16::w () const { return m_val[3]; } +OIIO_FORCEINLINE void vfloat16::set_x (float val) { m_val[0] = val; } +OIIO_FORCEINLINE void vfloat16::set_y (float val) { m_val[1] = val; } +OIIO_FORCEINLINE void vfloat16::set_z (float val) { m_val[2] = val; } +OIIO_FORCEINLINE void vfloat16::set_w (float val) { m_val[3] = val; } + + +OIIO_FORCEINLINE vint16 bitcast_to_int (const vfloat16& x) +{ +#if OIIO_SIMD_AVX >= 512 + return _mm512_castps_si512 (x.simd()); +#else + return vint16(bitcast_to_int(x.lo()), bitcast_to_int(x.hi())); +#endif +} + +OIIO_FORCEINLINE vfloat16 bitcast_to_float (const vint16& x) +{ +#if OIIO_SIMD_AVX >= 512 + return _mm512_castsi512_ps (x.simd()); +#else + return vfloat16(bitcast_to_float(x.lo()), bitcast_to_float(x.hi())); +#endif +} + + +OIIO_FORCEINLINE vfloat16 vreduce_add (const vfloat16& v) { +#if OIIO_SIMD_AVX >= 512 + // Nomenclature: ABCD are the vint4's comprising v + // First, add the vint4's and make them all the same + vfloat16 AB_AB_CD_CD = v + shuffle4<1,0,3,2>(v); // each adjacent vint4 is summed + vfloat16 w = AB_AB_CD_CD + shuffle4<2,3,0,1>(AB_AB_CD_CD); + // Now, add within each vint4 + vfloat16 ab_ab_cd_cd = w + shuffle<1,0,3,2>(w); // each adjacent int is summed + return ab_ab_cd_cd + shuffle<2,3,0,1>(ab_ab_cd_cd); +#else + vfloat8 sum = vreduce_add(v.lo()) + vreduce_add(v.hi()); + return vfloat16 (sum, sum); +#endif +} + + +OIIO_FORCEINLINE float reduce_add (const vfloat16& v) { +#if OIIO_SIMD_AVX >= 512 + return vreduce_add(v).x(); +#else + return reduce_add(v.lo()) + reduce_add(v.hi()); +#endif +} + + +OIIO_FORCEINLINE vfloat16 blend (const vfloat16& a, const vfloat16& b, const vbool16& mask) +{ +#if OIIO_SIMD_AVX >= 512 + return _mm512_mask_blend_ps (mask, a, b); +#else + return vfloat16 (blend (a.lo(), b.lo(), mask.lo()), + blend (a.hi(), b.hi(), mask.hi())); +#endif +} + + +OIIO_FORCEINLINE vfloat16 blend0 (const vfloat16& a, const vbool16& mask) +{ +#if OIIO_SIMD_AVX >= 512 + return _mm512_maskz_mov_ps (mask, a); +#else + return vfloat16 (blend0 (a.lo(), mask.lo()), + blend0 (a.hi(), mask.hi())); +#endif +} + + +OIIO_FORCEINLINE vfloat16 blend0not (const vfloat16& a, const vbool16& mask) +{ +#if OIIO_SIMD_AVX >= 512 + return _mm512_maskz_mov_ps (!mask, a); +#else + return vfloat16 (blend0not (a.lo(), mask.lo()), + blend0not (a.hi(), mask.hi())); +#endif +} + + +OIIO_FORCEINLINE vfloat16 select (const vbool16& mask, const vfloat16& a, const vfloat16& b) +{ + return blend (b, a, mask); +} + + +OIIO_FORCEINLINE vfloat16 safe_div (const vfloat16 &a, const vfloat16 &b) { +#if OIIO_SIMD_SSE + return blend0not (a/b, b == vfloat16::Zero()); +#else + SIMD_RETURN (vfloat16, b[i] == 0.0f ? 0.0f : a[i] / b[i]); +#endif +} + + +OIIO_FORCEINLINE vfloat16 abs (const vfloat16& a) +{ +#if OIIO_SIMD_AVX >= 512 + // Not available? return _mm512_abs_ps (a.simd()); + // Just clear the sign bit for cheap fabsf + return _mm512_castsi512_ps (_mm512_and_epi32 (_mm512_castps_si512(a.simd()), + _mm512_set1_epi32(0x7fffffff))); +#else + return vfloat16(abs(a.lo()), abs(a.hi())); +#endif +} + + +OIIO_FORCEINLINE vfloat16 sign (const vfloat16& a) +{ + vfloat16 one(1.0f); + return blend (one, -one, a < vfloat16::Zero()); +} + + +OIIO_FORCEINLINE vfloat16 ceil (const vfloat16& a) +{ +#if OIIO_SIMD_AVX >= 512 + return _mm512_ceil_ps (a); +#else + return vfloat16(ceil(a.lo()), ceil(a.hi())); +#endif +} + +OIIO_FORCEINLINE vfloat16 floor (const vfloat16& a) +{ +#if OIIO_SIMD_AVX >= 512 + return _mm512_floor_ps (a); +#else + return vfloat16(floor(a.lo()), floor(a.hi())); +#endif +} + + +OIIO_FORCEINLINE vfloat16 round (const vfloat16& a) +{ +#if OIIO_SIMD_AVX >= 512 + return _mm512_roundscale_ps (a, (_MM_FROUND_TO_NEAREST_INT |_MM_FROUND_NO_EXC)); +#else + return vfloat16(round(a.lo()), round(a.hi())); +#endif +} + +OIIO_FORCEINLINE vint16 ifloor (const vfloat16& a) +{ +#if OIIO_SIMD_AVX >= 512 + return _mm512_cvt_roundps_epi32 (a, (_MM_FROUND_TO_NEG_INF |_MM_FROUND_NO_EXC)); +#else + return vint16(floor(a)); +#endif +} + + +OIIO_FORCEINLINE vint16 rint (const vfloat16& a) +{ + return vint16(round(a)); +} + + +OIIO_FORCEINLINE vfloat16 rcp_fast (const vfloat16 &a) +{ +#if OIIO_SIMD_AVX >= 512 + vfloat16 r = _mm512_rcp14_ps(a); + return r * nmadd (r, a, vfloat16(2.0f)); +#else + return vfloat16(rcp_fast(a.lo()), rcp_fast(a.hi())); +#endif +} + + +OIIO_FORCEINLINE vfloat16 sqrt (const vfloat16 &a) +{ +#if OIIO_SIMD_AVX >= 512 + return _mm512_sqrt_ps (a); +#else + return vfloat16(sqrt(a.lo()), sqrt(a.hi())); +#endif +} + + +OIIO_FORCEINLINE vfloat16 rsqrt (const vfloat16 &a) +{ +#if OIIO_SIMD_AVX >= 512 + return _mm512_div_ps (_mm512_set1_ps(1.0f), _mm512_sqrt_ps (a)); +#else + return vfloat16(rsqrt(a.lo()), rsqrt(a.hi())); +#endif +} + + +OIIO_FORCEINLINE vfloat16 rsqrt_fast (const vfloat16 &a) +{ +#if OIIO_SIMD_AVX >= 512 + return _mm512_rsqrt14_ps (a); +#else + return vfloat16(rsqrt_fast(a.lo()), rsqrt_fast(a.hi())); +#endif +} + + +OIIO_FORCEINLINE vfloat16 min (const vfloat16& a, const vfloat16& b) +{ +#if OIIO_SIMD_AVX >= 512 + return _mm512_min_ps (a, b); +#else + return vfloat16(min(a.lo(),b.lo()), min(a.hi(),b.hi())); +#endif +} + +OIIO_FORCEINLINE vfloat16 max (const vfloat16& a, const vfloat16& b) +{ +#if OIIO_SIMD_AVX >= 512 + return _mm512_max_ps (a, b); +#else + return vfloat16(max(a.lo(),b.lo()), max(a.hi(),b.hi())); +#endif +} + + +OIIO_FORCEINLINE vfloat16 andnot (const vfloat16& a, const vfloat16& b) { +#if OIIO_SIMD_AVX >= 512 && defined(__AVX512DQ__) + return _mm512_andnot_ps (a, b); +#else + return vfloat16(andnot(a.lo(),b.lo()), andnot(a.hi(),b.hi())); +#endif +} + + +OIIO_FORCEINLINE vfloat16 madd (const simd::vfloat16& a, const simd::vfloat16& b, + const simd::vfloat16& c) +{ +#if OIIO_SIMD_AVX >= 512 + return _mm512_fmadd_ps (a, b, c); +#else + return vfloat16 (madd(a.lo(), b.lo(), c.lo()), + madd(a.hi(), b.hi(), c.hi())); +#endif +} + + +OIIO_FORCEINLINE vfloat16 msub (const simd::vfloat16& a, const simd::vfloat16& b, + const simd::vfloat16& c) +{ +#if OIIO_SIMD_AVX >= 512 + return _mm512_fmsub_ps (a, b, c); +#else + return vfloat16 (msub(a.lo(), b.lo(), c.lo()), + msub(a.hi(), b.hi(), c.hi())); +#endif +} + + + +OIIO_FORCEINLINE vfloat16 nmadd (const simd::vfloat16& a, const simd::vfloat16& b, + const simd::vfloat16& c) +{ +#if OIIO_SIMD_AVX >= 512 + return _mm512_fnmadd_ps (a, b, c); +#else + return vfloat16 (nmadd(a.lo(), b.lo(), c.lo()), + nmadd(a.hi(), b.hi(), c.hi())); +#endif +} + + + +OIIO_FORCEINLINE vfloat16 nmsub (const simd::vfloat16& a, const simd::vfloat16& b, + const simd::vfloat16& c) +{ +#if OIIO_SIMD_AVX >= 512 + return _mm512_fnmsub_ps (a, b, c); +#else + return vfloat16 (nmsub(a.lo(), b.lo(), c.lo()), + nmsub(a.hi(), b.hi(), c.hi())); +#endif +} + + + + +} // end namespace simd + +OIIO_NAMESPACE_3_1_END + + +/// Custom fmtlib formatters for our SIMD types. + +template<> struct fmt::formatter + : OIIO::pvt::index_formatter {}; +template<> struct fmt::formatter + : OIIO::pvt::index_formatter {}; +template<> struct fmt::formatter + : OIIO::pvt::index_formatter {}; +template<> struct fmt::formatter + : OIIO::pvt::index_formatter {}; +template<> struct fmt::formatter + : OIIO::pvt::index_formatter {}; +template<> struct fmt::formatter + : OIIO::pvt::index_formatter {}; +template<> struct fmt::formatter + : OIIO::pvt::index_formatter {}; +template<> struct fmt::formatter + : OIIO::pvt::array_formatter {}; + + +// Allow C++ metaprogramming to understand that the simd types are trivially +// copyable (i.e. memcpy to copy simd types is fine). +#if defined(__INTEL_COMPILER) +// Necessary because we have to define the vint types copy constructors on icc +template<> struct std::is_trivially_copyable : std::true_type {}; +template<> struct std::is_trivially_copyable : std::true_type {}; +template<> struct std::is_trivially_copyable : std::true_type {}; +#endif + + +#undef SIMD_DO +#undef SIMD_CONSTRUCT +#undef SIMD_CONSTRUCT_PAD +#undef SIMD_RETURN +#undef SIMD_RETURN_REDUCE diff --git a/third_party/tlRender-install-Release/include/OpenImageIO/span.h b/third_party/tlRender-install-Release/include/OpenImageIO/span.h new file mode 100644 index 00000000..a199eb00 --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenImageIO/span.h @@ -0,0 +1,764 @@ +// Copyright Contributors to the OpenImageIO project. +// SPDX-License-Identifier: Apache-2.0 +// https://github.com/AcademySoftwareFoundation/OpenImageIO + +// clang-format off + +#pragma once + +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +// Span notes and helpful links: +// - cppreference on std::span: +// https://en.cppreference.com/w/cpp/container/span +// - Another implementation, for reference: +// https://github.com/tcbrindle/span/blob/master/include/tcb/span.hpp + + +// Our pre-3.0 implementation had span::size() as a signed value, because we +// wrote it at a time that the draft of std::span said it should be signed. +// The final C++20 std::span ended up with an unsigned size, like all the +// other STL classes. It took us until OIIO 3.0 (or the in-progress 2.6.3) +// before we were able to break compatibility by switching it to match +// std::span::size() returning a size_t. +#ifndef OIIO_SPAN_SIZE_IS_UNSIGNED +# define OIIO_SPAN_SIZE_IS_UNSIGNED +#endif + +OIIO_NAMESPACE_3_1_BEGIN + +using span_size_t = size_t; +using oiio_span_size_type = span_size_t; // back-compat alias + +inline constexpr span_size_t dynamic_extent + = std::numeric_limits::max(); + + + +/// `span` is a non-owning, non-copying, non-allocating reference to a +/// contiguous array of T objects of known length. A 'span` encapsulates both +/// a pointer and a length, and thus is a safer way of passing pointers around +/// (because the function called knows how long the array is). A function +/// that might ordinarily take a `T*` and a length could instead just take a +/// `span`. +/// +/// A `span` is mutable (the values in the array may be modified). A +/// non-mutable (i.e., read-only) reference would be `span`. Thus, +/// a function that might ordinarily take a `const T*` and a length could +/// instead take a `span`. +/// +/// For convenience, we also define `cspan` as equivalent to +/// `span`. +/// +/// A `span` may be initialized explicitly from a pointer and length, by +/// initializing with a `std::vector`, or by initializing with a constant +/// (treated as an array of length 1). For all of these cases, no extra +/// allocations are performed, and no extra copies of the array contents are +/// made. +/// +/// Important caveat: The `span` merely refers to items owned by another +/// array, so the `span` should not be used beyond the lifetime of the +/// array it refers to. Thus, `span` is great for parameter passing, but +/// it's not a good idea to use a `span` to store values in a data +/// structure (unless you are really sure you know what you're doing). +/// + +template +class span { + static_assert (std::is_array::value == false, "can't have span of an array"); +public: + using element_type = T; + using value_type = typename std::remove_cv::type; + using size_type = span_size_t; + using difference_type = ptrdiff_t; + using pointer = element_type*; + using reference = element_type&; + using iterator = element_type*; + using const_iterator = const element_type*; + using reverse_iterator = std::reverse_iterator; + using const_reverse_iterator = std::reverse_iterator; + static constexpr size_type extent = Extent; + + /// Default constructor -- the span will be `{nullptr,0}`. + constexpr span () noexcept = default; + + /// Copy constructor (copies the span pointer and length, NOT the data). + constexpr span (const span ©) noexcept = default; + +#ifndef OIIO_DOXYGEN /* this declaration confuses doxygen */ + /// Copy constructor from a different extent (copies the span pointer and + /// length, NOT the data). This allows for construction of `span` + /// from `span`, and for converting fixed extent to dynamic extent. + /// It does not allow for converting to an incompatible data type. + template, std::remove_cv_t> + && (extent == dynamic_extent || extent == N))> + constexpr span (const span ©) noexcept + : m_data(copy.data()), m_size(copy.size()) { } +#endif + + /// Construct from T* and length. + constexpr span (pointer data, size_type size) noexcept + : m_data(data), m_size(size) { } + + /// Construct from begin and end pointers. + constexpr span (pointer b, pointer e) noexcept + : m_data(b), m_size(e-b) { } + + /// Construct from a single T&. + constexpr span (T &data) : m_data(&data), m_size(1) { } + + /// Construct from a fixed-length C array. Template magic automatically + /// finds the length from the declared type of the array. + template + constexpr span (T (&data)[N]) noexcept : m_data(data), m_size(N) { } + + /// Construct from std::vector. + template + constexpr span (std::vector &v) + : m_data(v.data()), m_size(v.size()) { + } + + /// Construct from `const std::vector.` This turns + /// `const std::vector` into a `span` (the span isn't const, + /// but the data it points to will be). + template + span (const std::vector &v) noexcept + : m_data(v.data()), m_size(v.size()) { } + + /// Construct from mutable element std::array + template + constexpr span (std::array &arr) noexcept + : m_data(arr.data()), m_size(N) {} + + /// Construct from read-only element std::array + template + constexpr span (const std::array& arr) noexcept + : m_data(arr.data()), m_size(N) {} + + /// Construct a span from an initializer_list. + constexpr span (std::initializer_list il) noexcept + : span (il.begin(), il.size()) { } + + /// Assignment copies the pointer and length, not the data. + constexpr span& operator= (const span ©) = default; + + /// Subspan containing the first Count elements of the span. + template + constexpr span first () const { + return { m_data, Count }; + } + /// Subspan containing the last Count elements of the span. + template + constexpr span last () const { + return { m_data + m_size - Count, Count }; + } + + /// Subspan starting at templated Offset and containing Count elements. + template + constexpr span subspan () const { + return { m_data + Offset, Count != dynamic_extent ? Count : (Extent != dynamic_extent ? Extent - Offset : m_size - Offset) }; + } + + /// Subspan containing just the first `count` elements. The count will be + /// clamped to be no more than the current size. + constexpr span first (size_type count) const { + return { m_data, std::min(count, m_size) }; + } + + /// Subspan containing just the last `count` elements. The count will be + /// clamped to be no more than the current size. + constexpr span last (size_type count) const { + count = std::min(count, m_size); + return { m_data + ( m_size - count ), count }; + } + + /// Subspan starting at offset and containing count elements. The range + /// requested will be clamped to the current size of the span. + constexpr span + subspan (size_type offset, size_type count = dynamic_extent) const { + offset = std::min(offset, m_size); + count = std::min(count, m_size - offset); + return { m_data + offset, count }; + } + + /// Return the number of elements in the span. + constexpr size_type size() const noexcept { return m_size; } + /// Return the size in bytes of the range of the span. + constexpr size_type size_bytes() const noexcept { return size()*sizeof(T); } + /// Is the span empty (containing 0 elements)? + constexpr bool empty() const noexcept { return m_size == 0; } + + /// Return the underlying data pointer to the first element. + constexpr pointer data() const noexcept { return m_data; } + + /// Element access. For debug build, does bounds check with assertion. For + /// optimized builds, there is no bounds check. Note: this is different + /// from C++ std::span, which never bounds checks `operator[]`. + constexpr reference operator[] (size_type idx) const { + OIIO_DASSERT(idx < m_size && "OIIO::span::operator[] range check"); + return m_data[idx]; + } + constexpr reference operator() (size_type idx) const { + OIIO_DASSERT(idx < m_size && "OIIO::span::operator() range check"); + return m_data[idx]; + } + /// Bounds-checked access, throws an assertion if out of range. + reference at (size_type idx) const { + if (idx >= size()) + throw (std::out_of_range ("OpenImageIO::span::at")); + return m_data[idx]; + } + + /// The first element of the span. + constexpr reference front() const noexcept { + OIIO_DASSERT(m_size >= 1); + return m_data[0]; + } + /// The last element of the span. + constexpr reference back() const noexcept { + OIIO_DASSERT(m_size >= 1); + return m_data[size() - 1]; + } + + /// Iterator pointing to the beginning of the span. + constexpr iterator begin() const noexcept { return m_data; } + /// Iterator pointing to the end (one past the last element) of the span. + constexpr iterator end() const noexcept { return m_data + m_size; } + + /// Const iterator pointing to the beginning of the span. + constexpr const_iterator cbegin() const noexcept { return m_data; } + /// Const iterator pointing to the end (one past the last element) of the + /// span. + constexpr const_iterator cend() const noexcept { return m_data + m_size; } + + /// Reverse iterator pointing to the last element of the span. + constexpr reverse_iterator rbegin() const noexcept { + return reverse_iterator(m_data + m_size - 1); + } + /// Reverse iterator pointing to "reverse end" (one element before the + /// first element) of the span. + constexpr reverse_iterator rend() const noexcept { + return reverse_iterator(m_data - 1); + } + + /// Const reverse iterator pointing to the last element of the span. + constexpr const_reverse_iterator crbegin() const noexcept { + return const_reverse_iterator(m_data + m_size - 1); + } + /// Const reverse iterator pointing to "reverse end" (one element before + /// the first element) of the span. + constexpr const_reverse_iterator crend() const noexcept { + return const_reverse_iterator(m_data - 1); + } + + /// Compare all elements of two spans for equality + template + constexpr bool operator==(span r) { +#if OIIO_CPLUSPLUS_VERSION >= 20 + return std::equal (begin(), end(), r.begin(), r.end()); +#else + auto lsize = size(); + bool same = (lsize == r.size()); + if (lsize != r.size()) + return false; + for (span_size_t i = 0; i < lsize; ++i) + same &= (m_data[i] == r.m_data[i]); + // Note: If they're not the same size, the body of the loop won't run, + // so there can't be a buffer overrun here. + return same; +#endif + } + + /// Compare all elements of two spans for inequality + template + constexpr bool operator!= (span r) { + return !((*this) == r); + } + +private: + pointer m_data = nullptr; + size_type m_size = 0; +}; + + + +/// cspan is a synonym for a non-mutable span. +template +using cspan = span; + + + + +/// span_strided : a non-owning, mutable reference to a contiguous +/// array with known length and optionally non-default strides through the +/// data. A span_strided is mutable (the values in the array may +/// be modified), whereas a span_strided is not mutable. +template +class span_strided { + static_assert (std::is_array::value == false, + "can't have span_strided of an array"); +public: + using element_type = T; + using value_type = typename std::remove_cv::type; + using size_type = span_size_t; + using difference_type = ptrdiff_t; + using stride_type = ptrdiff_t; + using pointer = element_type*; + using reference = element_type&; + using iterator = element_type*; + using const_iterator = const element_type*; + using reverse_iterator = std::reverse_iterator; + using const_reverse_iterator = std::reverse_iterator; + static constexpr size_type extent = Extent; + + /// Default ctr -- points to nothing + constexpr span_strided () noexcept {} + + /// Copy constructor + constexpr span_strided (const span_strided ©) + : m_data(copy.data()), m_size(copy.size()), m_stride(copy.stride()) {} + + /// Construct from T* and size, and optionally stride. + constexpr span_strided (pointer data, size_type size, stride_type stride=1) + : m_data(data), m_size(size), m_stride(stride) { } + + /// Construct from a single T&. + constexpr span_strided (T &data) : span_strided(&data,1,1) { } + + /// Construct from a fixed-length C array. Template magic automatically + /// finds the length from the declared type of the array. + template + constexpr span_strided (T (&data)[N]) : span_strided(data,N,1) {} + + /// Construct from std::vector. + template + constexpr span_strided (std::vector &v) + : span_strided(v.data(), v.size(), 1) {} + + /// Construct from const std::vector. This turns const std::vector + /// into a span_strided (the span_strided isn't + /// const, but the data it points to will be). + template + constexpr span_strided (const std::vector &v) + : span_strided(v.data(), v.size(), 1) {} + + /// Construct a span from an initializer_list. + constexpr span_strided (std::initializer_list il) + : span_strided (il.begin(), il.size()) { } + + /// Initialize from a span (stride will be 1). + constexpr span_strided (span av) + : span_strided(av.data(), av.size(), 1) { } + + // assignments + span_strided& operator= (const span_strided ©) { + m_data = copy.data(); + m_size = copy.size(); + m_stride = copy.stride(); + return *this; + } + + constexpr size_type size() const noexcept { return m_size; } + constexpr stride_type stride() const noexcept { return m_stride; } + + constexpr reference operator[] (size_type idx) const { + return m_data[m_stride*idx]; + } + constexpr reference operator() (size_type idx) const { + return m_data[m_stride*idx]; + } + reference at (size_type idx) const { + if (idx >= size()) + throw (std::out_of_range ("OpenImageIO::span_strided::at")); + return m_data[m_stride*idx]; + } + constexpr reference front() const noexcept { return m_data[0]; } + constexpr reference back() const noexcept { return (*this)[size()-1]; } + constexpr pointer data() const noexcept { return m_data; } + + /// Compare all elements of two spans for equality + template + constexpr bool operator== (span_strided r) { + auto lsize = size(); + if (lsize != r.size()) + return false; + for (span_size_t i = 0; i < lsize; ++i) + if ((*this)[i] != r[i]) + return false; + // Note: If they're not the same size, the body of the loop won't run, + // so there can't be a buffer overrun here. + return true; + } + + /// Compare all elements of two spans for inequality + template + constexpr bool operator!= (span_strided r) { + return !((*this) == r); + } + +private: + pointer m_data = nullptr; + size_type m_size = 0; + stride_type m_stride = 1; +}; + + + +/// cspan_strided is a synonym for a non-mutable span_strided. +template +using cspan_strided = span_strided; + + + +// clang-format on + + +// Explanation about make_span/make_cspan: +// +// If you want to write a function that takes a span of a known type, you can +// do so and call it with any of the kinds of containers that you could +// construct a span from. For example: +// +// void myfunc(span x) { ... } +// +// std::vector v; +// myfunc(v); // OK +// float arr[10]; +// myfunc(arr); // OK +// +// But if you want to write a templated function that takes a span of the +// templated type, you can't do that. For example: +// +// template +// void myfunc(span x) { ... } +// +// std::vector v; +// myfunc(v); // ERROR +// float arr[10]; +// myfunc(arr); // ERROR +// +// The problem is that span is not span, so the compiler can't +// deduce the template type. You can't even explicitly cast it: +// +// myfunc(span(v)); // ERROR +// myfunc(span(arr)); // ERROR +// +// The solution is to write `make_span()` and `make_cspan()` function +// templates that will deduce the template type and return the correct kind of +// span. So we do so for the particular cases of std::vector and T[N] +// arrays. This is not a complete solution, but it's enough for our purposes. + +// Helpers: make spans out of common containers +template +inline constexpr span +make_span(std::vector& arg) // span from vector +{ + return { arg }; +} + +template +inline constexpr cspan +make_cspan(const std::vector& arg) // cspan from vector +{ + return { arg }; +} + + +template +inline constexpr span +make_span(T (&arg)[N]) // span from C array of known length +{ + return { arg }; +} + +template +inline constexpr span +make_span(T* data, span_size_t size) // span from ptr + size +{ + return { data, size }; +} + +template +inline constexpr cspan +make_cspan(T (&arg)[N]) // cspan from C array of known length +{ + return { arg }; +} + +template +inline constexpr cspan +make_cspan(const T& arg) // cspan from a single value +{ + return { &arg, 1 }; +} + +template +inline constexpr cspan +make_cspan(const T* data, span_size_t size) // cspan from ptr + size +{ + return { data, size }; +} + + + +/// Convert a span of any type to a span of a differing type covering the same +/// memory. If the sizes are not identical, it will truncate length if +/// necessary to not spill past the bounds of the input span. Use with +/// caution! +template +span +span_cast(const span& s) noexcept +{ + return make_span(reinterpret_cast(s.data()), + s.size_bytes() / sizeof(T)); +} + + + +/// Convert a span of any type to a span of bytes covering the same range of +/// memory. +template +span +as_bytes(span s) noexcept +{ + return { reinterpret_cast(s.data()), s.size_bytes() }; +} + + + +/// Convert a span of any type to a span of mutable bytes covering the same +/// range of memory. +template::value)> +span +as_writable_bytes(span s) noexcept +{ + return { reinterpret_cast(s.data()), s.size_bytes() }; +} + + + +/// Convert a raw `const T*` ptr + length to a span of const bytes covering +/// the same range of memory. For non-void pointers, the length is in the +/// number of elements of T; for void pointers, the length is measured in +/// bytes. +template +span +as_bytes(const T* ptr, size_t len) noexcept +{ + size_t nbytes = len; + if constexpr (!std::is_void_v) + nbytes *= sizeof(T); + return make_cspan(reinterpret_cast(ptr), nbytes); +} + + + +/// Convert a raw `T*` ptr + length to a span of mutable bytes covering the +/// same range of memory. For non-void pointers, the length is in the number +/// of elements of T; for void pointers, the length is measured in bytes. +template)> +span +as_writable_bytes(T* ptr, size_t len) noexcept +{ + size_t nbytes = len; + if constexpr (!std::is_void_v) + nbytes *= sizeof(T); + return make_span(reinterpret_cast(ptr), nbytes); +} + + + +/// Convert a reference to a single variable to a const byte span of that +/// object's memory. +template +span +as_bytes_ref(const T& ref) noexcept +{ + return make_cspan(reinterpret_cast(&ref), sizeof(T)); +} + + + +/// Copy the memory contents of `src` to `dst`. They must have the same +/// total size. +template +inline void +spancpy(span dst, span src) +{ + OIIO_DASSERT(dst.size_bytes() == src.size_bytes()); + memcpy(dst.data(), src.data(), src.size_bytes()); +} + + + +/// Try to copy `n` items of type `T` from `src[srcoffset...]` to +/// `dst[dstoffset...]`. Don't read or write outside the respective span +/// boundaries. Return the number of items actually copied, which should be +/// `n` if the operation was fully successful, but may be less if the request +/// could not be satisfied while staying within the span bounds. +/// +/// If `n` is not supplied, it will default to filling as much of `src` (from +/// `srcoffset` to its end) as will fit into `dst`. If `srcoffset` is not +/// supplied, it will default to 0 (the beginning of `src`). +/// +/// This is intended to be used as a memory-safe replacement for memcpy if +/// you're using spans. +template +size_t +spancpy(span dst, size_t dstoffset, cspan src, size_t srcoffset = 0, + size_t n = size_t(-1)) +{ + // Where do the requests end (limited by span boundaries)? + n = std::min(n, src.size() - srcoffset); + n = std::min(n, dst.size() - dstoffset); + memcpy(dst.data() + dstoffset, src.data() + srcoffset, n * sizeof(T)); + return n; +} + + + +/// Perform a safe `memcpy(dst, src, n*sizeof(T))` but ensuring that the +/// memory accesses stay within the boundaries of spans `dst_span` and +/// `src_span`. +/// +/// This is intended to be used as a memory-safe replacement for memcpy if +/// you know the spans representing safe areas. +template +inline size_t +span_memcpy(T* dst, const T* src, size_t n, span dst_span, cspan src_span) +{ + return spancpy(dst_span, dst - dst_span.begin(), src_span, + src - src_span.begin(), n); +} + + + +/// Try to write `n` copies of `val` into `dst[offset...]`. Don't write +/// outside the span boundaries. Return the number of items actually written, +/// which should be `n` if the operation was fully successful, but may be less +/// if the request could not be satisfied while staying within the span +/// bounds. +/// +/// If `n` is not supplied, it will default to filling from `offset` to the +/// end of the span. +/// +/// This is intended to be used as a memory-safe replacement for memset if +/// you're using spans. +template +size_t +spanset(span dst, size_t offset, const T& val, size_t n = size_t(-1)) +{ + // Where does the request end (limited by span boundary)? + n = std::min(n, dst.size() - offset); + for (size_t i = 0; i < n; ++i) + dst[offset + i] = val; + return n; +} + + + +/// Try to fill `n` elements of `dst[offset...]` with 0-valued bytes. Don't +/// write outside the span boundaries. Return the number of items actually +/// written, which should be `n` if the operation was fully successful, but +/// may be less if the request could not be satisfied while staying within the +/// span bounds. +/// +/// If `n` is not supplied, it will default to filling from `offset` to the +/// end of the span. If `offset` is not supplied, it will default 0 (the +/// beginning of the span). +/// +/// This is intended to be used as a memory-safe replacement for +/// `memset(ptr,0,n)` if you're using spans. +template +size_t +spanzero(span dst, size_t offset = 0, size_t n = size_t(-1)) +{ + // Where does the request end (limited by span boundary)? + n = std::min(n, dst.size() - offset); + memset(dst.data() + offset, 0, n * sizeof(T)); + return n; +} + + + +/// Does the byte span `query` lie entirely within the safe `bounds` span? +inline bool +span_within(cspan bounds, cspan query) +{ + return query.data() >= bounds.data() + && query.data() + query.size() <= bounds.data() + bounds.size(); +} + + + +/// Verify the `ptr[0..len-1]` lies entirely within the given span `s`, which +/// does not need to be the same data type. Return true if that is the case, +/// false if it extends beyond the safe limits fo the span. +template +inline bool +check_span(span s, const PtrType* ptr, size_t len = 1) +{ + return span_within(as_bytes(s), as_bytes(make_cspan(ptr, len))); +} + + +OIIO_NAMESPACE_3_1_END + + +/// OIIO_ALLOCASPAN is used to allocate smallish amount of memory on the +/// stack, equivalent of C99 type var_name[size], and then return a span +/// encompassing it. +#define OIIO_ALLOCA_SPAN(type, size) span(OIIO_ALLOCA(type, size), size) + + + +// Declare std::size and std::ssize for our span. +namespace std { + +#if OIIO_CPLUSPLUS_VERSION < 20 +// C++20 and beyond already have these declared. +template +constexpr ptrdiff_t +ssize(const OIIO::span& c) +{ + return static_cast(c.size()); +} + +template +constexpr ptrdiff_t +ssize(const OIIO::span_strided& c) +{ + return static_cast(c.size()); +} +#endif + +// Allow client software to easily know if the std::size/ssize was added for +// our span templates. +#define OIIO_SPAN_HAS_STD_SIZE 1 + +} // namespace std + +// clang-format on + + + +/// Custom fmtlib formatters for span/cspan types. +namespace fmt { +template +struct formatter> + : OIIO::pvt::index_formatter> {}; +} // namespace fmt diff --git a/third_party/tlRender-install-Release/include/OpenImageIO/span_util.h b/third_party/tlRender-install-Release/include/OpenImageIO/span_util.h new file mode 100644 index 00000000..6d7cd36e --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenImageIO/span_util.h @@ -0,0 +1,9 @@ +// Copyright Contributors to the OpenImageIO project. +// SPDX-License-Identifier: Apache-2.0 +// https://github.com/AcademySoftwareFoundation/OpenImageIO + +#pragma once + +#include + +#warning "Deprecated header, you only need span.h" diff --git a/third_party/tlRender-install-Release/include/OpenImageIO/strided_ptr.h b/third_party/tlRender-install-Release/include/OpenImageIO/strided_ptr.h new file mode 100644 index 00000000..94b0cc49 --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenImageIO/strided_ptr.h @@ -0,0 +1,136 @@ +// Copyright Contributors to the OpenImageIO project. +// SPDX-License-Identifier: Apache-2.0 +// https://github.com/AcademySoftwareFoundation/OpenImageIO + + +#pragma once + +#include + +#include +#include + + +OIIO_NAMESPACE_3_1_BEGIN + + +/// strided_ptr looks like a 'T*', but it incorporates a stride, so +/// it's not limited to adjacent elements. +/// Operators ++, --, [], and so on, take the stride into account when +/// computing where each "array element" actually exists. +/// +/// A strided_ptr is mutable (the values pointed to may be modified), +/// whereas an strided_ptr is not mutable. +/// +/// Fun trick: strided_ptr(&my_value,0) makes a strided_pointer that +/// is addressed like an array, but because the stride is 0, every +/// accessed "element" actually will actually refer to the same value. +/// +/// By default, if StrideUnits == sizeof(T), then the stride refers to +/// multiples of the size of T. But every once in a while, you need a +/// a byte-addressable stride, and in that case you use a StrideUnits +/// of 1, like: strided_ptr. +template class strided_ptr { +public: + constexpr strided_ptr(T* ptr = nullptr, ptrdiff_t stride = 1) noexcept + : m_ptr(ptr) + , m_stride(stride) + { + } + constexpr strided_ptr(const strided_ptr& p) noexcept + : strided_ptr(p.data(), p.stride()) + { + } + + const strided_ptr& operator=(const strided_ptr& p) noexcept + { + m_ptr = p.m_ptr; + m_stride = p.m_stride; + return *this; + } + + // Assignment of a pointer sets the pointer and implies a stride of 1. + const strided_ptr& operator=(T* p) noexcept + { + m_ptr = p; + m_stride = 1; + return *this; + } + + constexpr T& operator*() const { return *m_ptr; } + constexpr T& operator[](ptrdiff_t pos) const { return get(pos); } + constexpr T* data() const { return m_ptr; } + constexpr ptrdiff_t stride() const { return m_stride; } + + // Careful: == and != only compare the pointer + constexpr bool operator==(const T* p) const { return m_ptr == p; } + constexpr bool operator!=(const T* p) const { return m_ptr != p; } + + // Increment and decrement moves the pointer to the next element + // one stride length away. + const strided_ptr& operator++() + { // prefix + m_ptr = getptr(1); + return *this; + } + const strided_ptr operator++(int) + { // postfix + strided_ptr r(*this); + ++(*this); + return r; + } + const strided_ptr& operator--() + { // prefix + m_ptr = getptr(-1); + return *this; + } + const strided_ptr operator--(int) + { // postfix + strided_ptr r(*this); + --(*this); + return r; + } + + // Addition and subtraction returns new strided pointers that are + // the given number of strides away. + constexpr strided_ptr operator+(ptrdiff_t d) const noexcept + { + return strided_ptr(getptr(d), m_stride); + } + constexpr strided_ptr operator-(ptrdiff_t d) const noexcept + { + return strided_ptr(getptr(-d), m_stride); + } + const strided_ptr& operator+=(ptrdiff_t d) noexcept + { + m_ptr = getptr(d); + return *this; + } + const strided_ptr& operator-=(ptrdiff_t d) + { + m_ptr = getptr(-d); + return *this; + } + +private: + // The implementation of a strided_ptr is just the pointer and a stride. + // Note that when computing addressing, the stride is implicitly + // multiplied by the StrideUnits, which defaults to sizeof(T), but when + // StrideUnits==1 means that your stride value is measured in bytes. + T* m_ptr = nullptr; + ptrdiff_t m_stride = 1; + + // getptr is the real brains of the operation, computing the pointer + // for a given element, with strides taken into consideration. + constexpr inline T* getptr(ptrdiff_t pos = 0) const noexcept + { + return (T*)((char*)m_ptr + pos * m_stride * StrideUnits); + } + constexpr inline T& get(ptrdiff_t pos = 0) const noexcept + { + return *getptr(pos); + } +}; + + +OIIO_NAMESPACE_3_1_END diff --git a/third_party/tlRender-install-Release/include/OpenImageIO/string_view.h b/third_party/tlRender-install-Release/include/OpenImageIO/string_view.h new file mode 100644 index 00000000..15aa0ff8 --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenImageIO/string_view.h @@ -0,0 +1,548 @@ +// Copyright Contributors to the OpenImageIO project. +// SPDX-License-Identifier: Apache-2.0 +// https://github.com/AcademySoftwareFoundation/OpenImageIO + +// clang-format off + +#pragma once + +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +// Some compilers already have a string_view pre-C++17 +// N.B. This logic is taken from fmtlib. +#if (__has_include() && \ + (__cplusplus > 201402L || defined(_LIBCPP_VERSION))) || \ + (defined(_MSVC_LANG) && _MSVC_LANG > 201402L && _MSC_VER >= 1910) +# include +# define OIIO_STD_STRING_VIEW_AVAILABLE +#elif __has_include("experimental/string_view") +# include +# define OIIO_EXPERIMENTAL_STRING_VIEW_AVAILABLE +#endif + + +OIIO_NAMESPACE_3_1_BEGIN + + +/// A `string_view` is a non-owning, non-copying, non-allocating reference +/// to a sequence of characters. It encapsulates both a character pointer +/// and a length. This is analogous to C++17 std::string_view, but supports +/// C++14. +/// +/// Note: `string_view` is an alias for `basic_string_view`. +/// +/// A function that takes a string input (but does not need to alter the +/// string in place) may use a string_view parameter and accept input that +/// is any of char* (C string), string literal (constant char array), a +/// std::string (C++ string), or OIIO ustring. For all of these cases, no +/// extra allocations are performed, and no extra copies of the string +/// contents are performed (as they would be, for example, if the function +/// took a const std::string& argument but was passed a char* or string +/// literal). +/// +/// Furthermore, a function that returns a copy or a substring of one of its +/// inputs (for example, a substr()-like function) may return a string_view +/// rather than a std::string, and thus generate its return value without +/// any allocation or copying. Upon assignment to a std::string or ustring, +/// it will properly auto-convert. +/// +/// There are two important caveats to using this class: +/// 1. The string_view merely refers to characters owned by another string, +/// so the string_view may not be used outside the lifetime of the string +/// it refers to. Thus, string_view is great for parameter passing, but +/// it's not a good idea to use a string_view to store strings in a data +/// structure (unless you are really sure you know what you're doing). +/// 2. Because the run of characters that the string_view refers to may not +/// be 0-terminated, it is important to distinguish between the data() +/// method, which returns the pointer to the characters, and a proper +/// c_str() method (which is NOT provided by std::string_view), which would +/// be guaranteed to return a valid C string that is 0-terminated. Thus, if +/// you want to pass the contents of a string_view to a function that +/// expects a 0-terminated string (say, fopen), the usual practice is to +/// call `fopen(std::string(my_string_view).c_str())`. +/// + + +template> +class basic_string_view { +public: + using charT = CharT; // DEPRECATED(2.4) + using traits_type = Traits; + using value_type = CharT; + using pointer = const CharT*; + using const_pointer = const CharT*; + using reference = const CharT&; + using const_reference = const CharT&; + using const_iterator = const_pointer; + using iterator = const_iterator; + using const_reverse_iterator = std::reverse_iterator; + using reverse_iterator = const_reverse_iterator; + using size_type = size_t; + using difference_type = ptrdiff_t; + using traits = std::char_traits; // obsolete custom name + using string = std::basic_string; + static const size_type npos = ~size_type(0); + + /// Default constructor. + constexpr basic_string_view() noexcept : m_chars(nullptr), m_len(0) { } + + /// Copy constructor. + constexpr basic_string_view(const basic_string_view& copy) + : m_chars(copy.data()), m_len(copy.size()) { } + + /// Construct from char* and length. + constexpr basic_string_view(const CharT* chars, size_t len) noexcept + : m_chars(chars), m_len(len) { } + + /// Construct from char*, use strlen to determine length. + constexpr basic_string_view(const CharT* chars) noexcept + : m_chars(chars), m_len(chars ? Traits::length(chars) : 0) { } + + /// Construct from std::string. Remember that a string_view doesn't have + /// its own copy of the characters, so don't use the `string_view` after + /// the original string has been destroyed or altered. + basic_string_view(const string& str) noexcept + : m_chars(str.data()), m_len(str.size()) { } + // N.B. std::string::size() is constexpr starting with C++20. + +#if defined(OIIO_STD_STRING_VIEW_AVAILABLE) || defined(OIIO_DOXYGEN) + // Construct from a std::string_view. + constexpr basic_string_view(const std::basic_string_view& sv) noexcept + : m_chars(sv.data()), m_len(sv.size()) { } +#endif + +#ifdef OIIO_EXPERIMENTAL_STRING_VIEW_AVAILABLE + // Construct from a std::experimental::string_view. + constexpr basic_string_view(const std::experimental::basic_string_view& sv) noexcept + : m_chars(sv.data()), m_len(sv.size()) { } +#endif + + /// Convert a string_view to a `std::string`. NOTE: the `str()` method is + /// not part of the C++17 std::string_view. If strict interchangeability + /// with std::string_view is desired, you might prefer the equivalent + /// idiom `std::string(sv)`. + OIIO_CONSTEXPR20 string str() const + { + return *this; + // return (m_chars ? string(m_chars, m_len) : string()); + // N.B. std::string ctr from chars+len is constexpr in C++20. + } + + /// DEPRECATED(3.0) -- If you must use this at all, use the freestanding + /// OIIO::c_str(OIIO::string_view). We want to get this out of the + /// OIIO::string_view template to preserve symmetry with std::string_view. + OIIO_DEPRECATED("Unsafe, nonstandard. Use standalone OIIO::c_str(string_view) if you must. (3.0)") + const CharT* c_str() const; + + /// Assignment + constexpr basic_string_view& operator=(const basic_string_view& copy) noexcept = default; + + /// Convert a string_view to a `std::string`. + operator std::basic_string() const { + return (m_chars ? string(m_chars, m_len) : std::basic_string()); + } + +#if defined(OIIO_STD_STRING_VIEW_AVAILABLE) || defined(OIIO_DOXYGEN) + /// Convert an OIIO::string_view to a std::string_view. + constexpr operator std::basic_string_view() const + { + return { data(), size() }; + } +#endif + +#ifdef OIIO_EXPERIMENTAL_STRING_VIEW_AVAILABLE + /// Convert an OIIO::string_view to a std::experimental::string_view. + constexpr operator std::experimental::basic_string_view() const noexcept + { + return { data(), size() }; + } +#endif + +#ifdef FMT_VERSION + // Convert an OIIO::string_view to a fmt::string_view. This enables + // fmt::format() and friends to accept an OIIO::string_view. + constexpr operator fmt::string_view() const noexcept { return { data(), size() }; } +#endif + + // iterators + + /// Iterator pointing to the first char. + constexpr iterator begin() const noexcept { return m_chars; } + /// Iterator pointing to one past the last char. + constexpr iterator end() const noexcept { return m_chars + m_len; } + /// Const iterator pointing to the first char. + constexpr const_iterator cbegin() const noexcept { return m_chars; } + /// Const iterator pointing to one past the last char. + constexpr const_iterator cend() const noexcept { return m_chars + m_len; } + /// Reverse iterator pointing to the last char. + constexpr reverse_iterator rbegin() const noexcept { return reverse_iterator (end()); } + /// Reverse iterator pointing to one before the first char. + constexpr reverse_iterator rend() const noexcept { return reverse_iterator (begin()); } + /// Const reverse iterator pointing to the last char. + constexpr const_reverse_iterator crbegin() const noexcept { return const_reverse_iterator (cend()); } + /// Const reverse iterator pointing to one before the first char. + constexpr const_reverse_iterator crend() const noexcept { return const_reverse_iterator (cbegin()); } + + + /// Return the number of elements in the view. + constexpr size_type size() const noexcept { return m_len; } + /// Return the number of elements in the view. + constexpr size_type length() const noexcept { return m_len; } + constexpr size_type max_size() const noexcept { + return std::numeric_limits::max(); + } + /// Is the view empty, containing no characters? + constexpr bool empty() const noexcept { return m_len == 0; } + + /// Element access of an individual character. For debug build, does + /// bounds check with assertion. For optimized builds, there is no bounds + /// check. Note: this is different from C++ std::span, which never bounds + /// checks `operator[]`. + constexpr const_reference operator[](size_type pos) const { return m_chars[pos]; } + /// Element access with bounds checking and exception if out of bounds. + constexpr const_reference at(size_t pos) const + { + if (pos >= m_len) + throw(std::out_of_range("OpenImageIO::string_view::at")); + return m_chars[pos]; + } + /// The first character of the view. + constexpr const_reference front() const { return m_chars[0]; } + /// The last character of the view. + constexpr const_reference back() const { return m_chars[m_len - 1]; } + /// Return the underlying data pointer to the first character. + constexpr const_pointer data() const noexcept { return m_chars; } + + // modifiers + + /// Reset the view to an empty string. + constexpr void clear() noexcept { init(nullptr, 0); } + /// Remove the first n characters from the view. + constexpr void remove_prefix(size_type n) noexcept + { + if (n > m_len) + n = m_len; + m_chars += n; + m_len -= n; + } + /// Remove the last n characters from the view. + constexpr void remove_suffix(size_type n) noexcept + { + if (n > m_len) + n = m_len; + m_len -= n; + } + + /// Return a new string_view that is a substring of this one, starting at + /// position pos and of length n. If n is npos, it will be the rest of the + /// string from pos. + constexpr basic_string_view substr(size_type pos, size_type n = npos) const noexcept + { + if (pos >= size()) + return basic_string_view(); // start past end -> return empty + if (n == npos || pos + n > size()) + n = size() - pos; + return basic_string_view(data() + pos, n); + } + + /// Comparison function of two string_views, returning <0, 0, or >0. + constexpr int compare(basic_string_view x) const noexcept { + // N.B. char_traits::compare is constexpr for C++17 + const int cmp = traits_type::compare (m_chars, x.m_chars, (std::min)(m_len, x.m_len)); + return cmp != 0 ? cmp : int(m_len) - int(x.m_len); + // Equivalent to: + // cmp != 0 ? cmp : (m_len == x.m_len ? 0 : (m_len < x.m_len ? -1 : 1)); + } + +#if 0 + // Do these later if anybody needs them + bool starts_with(basic_string_view x) const noexcept; + bool ends_with(basic_string_view x) const noexcept; + size_type copy(CharT* dest, size_type count, size_type pos = 0) const; +#endif + + /// Find the first occurrence of substring s in *this, starting at + /// position pos. + size_type find(basic_string_view s, size_t pos = 0) const noexcept + { + if (pos > size()) + pos = size(); + const_iterator i = std::search(this->cbegin() + pos, this->cend(), + s.cbegin(), s.cend(), traits::eq); + return i == this->cend() ? npos : std::distance(this->cbegin(), i); + } + + /// Find the first occurrence of character c in *this, starting at + /// position pos. + size_type find (CharT c, size_t pos=0) const noexcept { + if (pos > size()) + pos = size(); + const_iterator i = std::find_if (this->cbegin()+pos, this->cend(), + traits_eq(c)); + return i == this->cend() ? npos : std::distance (this->cbegin(), i); + } + + /// Find the last occurrence of substring s *this, but only those + /// occurrences earlier than position pos. + size_type rfind (basic_string_view s, size_t pos=npos) const noexcept { + if (pos > size()) + pos = size(); + const_reverse_iterator b = this->crbegin()+(size()-pos); + const_reverse_iterator e = this->crend(); + const_reverse_iterator i = std::search (b, e, s.crbegin(), s.crend(), traits::eq); + return i == e ? npos : (reverse_distance(this->crbegin(),i) - s.size() + 1); + } + + /// Find the last occurrence of character c in *this, but only those + /// occurrences earlier than position pos. + size_type rfind (CharT c, size_t pos=npos) const noexcept { + if (pos > size()) + pos = size(); + const_reverse_iterator b = this->crbegin()+(size()-pos); + const_reverse_iterator e = this->crend(); + const_reverse_iterator i = std::find_if (b, e, traits_eq(c)); + return i == e ? npos : reverse_distance (this->crbegin(),i); + } + + /// Find the first occurrence of character `c` in the view, starting + /// at position `pos`. + size_type find_first_of(CharT c, size_t pos=0) const noexcept { return find (c, pos); } + + /// Find the first occurrence of character `c` in the view, starting + /// at position `pos`. + size_type find_last_of(CharT c, size_t pos=npos) const noexcept { return rfind (c, pos); } + + /// Find the first occurrence of any character contained in string `s` in + /// the view, starting at position `pos`. + size_type find_first_of(basic_string_view s, size_t pos=0) const noexcept { + if (pos >= size()) + return npos; + const_iterator i = std::find_first_of (this->cbegin()+pos, this->cend(), + s.cbegin(), s.cend(), traits::eq); + return i == this->cend() ? npos : std::distance (this->cbegin(), i); + } + + /// Find the last occurrence of any character contained in string `s` in + /// the view, starting at position `pos`. + size_type find_last_of(basic_string_view s, size_t pos=npos) const noexcept { + if (pos > size()) + pos = size(); + size_t off = size()-pos; + const_reverse_iterator i = std::find_first_of (this->crbegin()+off, this->crend(), + s.cbegin(), s.cend(), traits::eq); + return i == this->crend() ? npos : reverse_distance (this->crbegin(), i); + } + + /// Find the first occurrence of any character not contained in string `s` + /// in the view, starting at position `pos`. + size_type find_first_not_of(basic_string_view s, size_t pos=0) const noexcept { + if (pos >= size()) + return npos; + const_iterator i = find_not_of (this->cbegin()+pos, this->cend(), s); + return i == this->cend() ? npos : std::distance (this->cbegin(), i); + } + + /// Find the first occurrence of a character other than `c` in the view, + /// starting at position `pos`. + size_type find_first_not_of(CharT c, size_t pos=0) const noexcept { + if (pos >= size()) + return npos; + for (const_iterator i = this->cbegin()+pos; i != this->cend(); ++i) + if (! traits::eq (c, *i)) + return std::distance (this->cbegin(), i); + return npos; + } + + /// Find the last occurrence of any character not contained in string `s` + /// in the view, starting at position `pos`. + size_type find_last_not_of(basic_string_view s, size_t pos=npos) const noexcept { + if (pos > size()) + pos = size(); + size_t off = size()-pos; + const_reverse_iterator i = find_not_of (this->crbegin()+off, this->crend(), s); + return i == this->crend() ? npos : reverse_distance (this->crbegin(), i); + } + + /// Find the last occurrence of a character other than `c` in the view, + /// starting at position `pos`. + size_type find_last_not_of(CharT c, size_t pos=npos) const noexcept { + if (pos > size()) + pos = size(); + size_t off = size()-pos; + for (const_reverse_iterator i = this->crbegin()+off; i != this->crend(); ++i) + if (! traits::eq (c, *i)) + return reverse_distance (this->crbegin(), i); + return npos; + } + + /// Do two string views have the same sequence of characters? + friend constexpr bool + operator==(basic_string_view x, basic_string_view y) noexcept + { + return x.size() == y.size() ? (x.compare(y) == 0) : false; + } + + /// Do two string views have the different sequences of characters? + friend constexpr bool + operator!=(basic_string_view x, basic_string_view y) noexcept + { + return x.size() == y.size() ? (x.compare(y) != 0) : true; + } + + /// Is the first string view lexicographically less than the second? + friend constexpr bool + operator<(basic_string_view x, basic_string_view y) noexcept + { + return x.compare(y) < 0; + } + + /// Is the first string view lexicographically greater than the second? + friend constexpr bool + operator>(basic_string_view x, basic_string_view y) noexcept + { + return x.compare(y) > 0; + } + + /// Is the first string view lexicographically less than or equal to the + /// second? + friend constexpr bool + operator<=(basic_string_view x, basic_string_view y) noexcept + { + return x.compare(y) <= 0; + } + + /// Is the first string view lexicographically greater than or equal to + /// the second? + friend constexpr bool + operator>=(basic_string_view x, basic_string_view y) noexcept + { + return x.compare(y) >= 0; + } + + /// Stream output of a string_view. + friend std::basic_ostream& + operator<<(std::basic_ostream& out, + const basic_string_view& str) + { + if (out.good()) + out.write(str.data(), str.size()); + return out; + } + +private: + const CharT* m_chars = nullptr; + size_t m_len = 0; + + constexpr void init(const CharT* chars, size_t len) noexcept + { + m_chars = chars; + m_len = len; + } + + template + size_type reverse_distance(r_iter first, r_iter last) const noexcept + { + return m_len - 1 - std::distance(first, last); + } + + template + iter find_not_of(iter first, iter last, basic_string_view s) const noexcept + { + for (; first != last; ++first) + if (!traits::find(s.data(), s.length(), *first)) + return first; + return last; + } + + class traits_eq { + public: + constexpr traits_eq (CharT ch) noexcept : ch(ch) {} + constexpr bool operator () (CharT val) const noexcept { return traits::eq (ch, val); } + CharT ch; + }; +}; + + + +/// string_view is an alias for `basic_string_view`. This is the +/// common use case. +using string_view = basic_string_view; +using wstring_view = basic_string_view; + + + +/// Return a safe pointer to a null-terminated C string with the contents of +/// the string_view. +/// +/// ENORMOUS CAVEAT: This nonstandard functionality is only safe if the +/// string_view is a true "subset of a C/C++ string". It will fail in the +/// unfortunate case where the last character of `str` is the last byte of a +/// readable page of memory and the next character is on a page that's not +/// readable. This can never happen to a string_view that was constructed from +/// a C string, a C++ std::string, an OIIO ustring, or any subset of +/// characters from any of those. But still, watch out if you're constructing +/// a string_view a pointer to some other memory region that's not at all part +/// of a string-like object. +/// +/// How do we get a safe c_str from a string_view? It's a neat trick! First, +/// we check if `str[str.size()]` is a null character. If it is -- and this is +/// the very common case of the string_view being a way to pass a reference to +/// an entire std::string, a C string (char*), or a ustring -- then it just +/// returns `str.data()`, since that is a totally valid null-terminated C +/// string! On the other hand, if `str[str.size()] != 0`, then we construct a +/// ustring and return its `ustring::c_str()`, which is safe because ustring +/// memory is never freed. +OIIO_UTIL_API const char* c_str(string_view str); + + +// DEPRECATED(3.0) +template<> inline const char* +basic_string_view::c_str() const { + return OIIO::v3_1::c_str(*this); +} + + +OIIO_NAMESPACE_3_1_END + + + +#if FMT_VERSION >= 100000 +FMT_BEGIN_NAMESPACE +template <> struct formatter : formatter +{ + auto format(OIIO::string_view c, format_context& ctx) const { + return formatter::format(string_view(c), ctx); + } +}; +FMT_END_NAMESPACE +#endif + + + +// Declare std::size and std::ssize for our string_view. +namespace std { + +#if OIIO_CPLUSPLUS_VERSION < 20 +template> +constexpr ptrdiff_t ssize(const OIIO::basic_string_view& c) { + return static_cast(c.size()); +} +#endif + +// Allow client software to easily know if the std::size/ssize was added for +// our string_view. +#define OIIO_STRING_VIEW_HAS_STD_SIZE 1 + + +} // namespace std diff --git a/third_party/tlRender-install-Release/include/OpenImageIO/strongparam.h b/third_party/tlRender-install-Release/include/OpenImageIO/strongparam.h new file mode 100644 index 00000000..92a24ce0 --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenImageIO/strongparam.h @@ -0,0 +1,122 @@ +// Copyright Contributors to the OpenImageIO project. +// SPDX-License-Identifier: Apache-2.0 +// https://github.com/AcademySoftwareFoundation/OpenImageIO + + +#pragma once + +#include + +#include + +OIIO_NAMESPACE_3_1_BEGIN + + +/// StrongParam is used to construct an implementation of a derived type +/// that lets you pass strongly typed parameters. It implicitly converts TO +/// the basetype, but requires explicit conversion FROM the basetype. +/// +/// The problem this is meant to address is that you may have a function +/// that has multiple bool, int, or float parameters, particularly if they +/// are adjacent in the call signature. This is extremely error prone. For +/// example, suppose you have +/// +/// void func (bool verbose, bool crazy, int apples, int oranges); +/// +/// and then it is called: +/// +/// func(true, false, 3, 8); +/// +/// Is this correct, or does it harbor a bug? Your guess is as good as mine. +/// In comparison, Python has a syntax that lets you name parameters, which +/// looks like this: +/// +/// func(verbose=true, crazy=false, apples=3, oranges=8); +/// +/// But, unfortunately, no such syntax exists in C++. Maybe someday it will, +/// but for now, we want something we can use to make the function call +/// similarly clear. Like this: +/// +/// func(Verbose(true), Crazy(false), Apples(3), Oranges(8)); +/// +/// and simultaneously for the following to be considered errors: +/// +/// // Not allowed: bare bools and ints +/// func(true, false, 3, 8); +/// +/// // Not allowed: getting the order wrong +/// func(Crazy(false), Verbose(true), Oranges(8), Apples(3)); +/// +/// Our solution is inspired by +/// https://lists.llvm.org/pipermail/llvm-dev/2019-August/134302.html +/// though we have simplified it quite a bit for our needs. +/// +/// Example use 1: Use StrongParam to disambiguate parameters. +/// +/// // Use macro to generate the new types +/// OIIO_STRONG_PARAM_TYPE(Verbose, bool); +/// OIIO_STRONG_PARAM_TYPE(Crazy, bool); +/// +/// bool +/// compute (Verbose a, Crazy b) +/// { +/// return a | b; +/// } +/// +/// +/// Example 2: Use StrongParam to disambiguate two floats, a poor person's +/// implementation of units: +/// +/// Error prone: speed(float,float) // which is first, meters or seconds? +/// Unambiguous: speed(Meters,Seconds) +/// +/// OIIO_STRONG_PARAM_TYPE(Meters, float); +/// OIIO_STRONG_PARAM_TYPE(Seconds, float); +/// +/// float +/// speed (Meters a, Seconds b) +/// { +/// return a / b; +/// } +/// +/// Note that the fancy strong type is for declaration purposes. Any time +/// you use it in the function, it implicitly converts to the underlying +/// base type. +/// +/// As an alternative to `OIIO_STRONG_TYPE(Meters, float)`, you may also use +/// this notation (if you find it more pleasing): +/// +/// using Meters = StrongParam; +/// +/// The MetersTag struct need not be defined anywhere, it just needs to +/// be a unique name. +/// + +template struct StrongParam { + // Construct a StrongParam from a Basetype. + explicit StrongParam(const Basetype& val) + : m_val(val) + { + } + + // Allow default simple copy construction + StrongParam(const StrongParam& val) = default; + + // Allow implicit conversion back to Basetype. + operator const Basetype&() const noexcept { return m_val; } + +private: + Basetype m_val; + static_assert(std::is_trivial::value, "Need trivial type"); +}; + +OIIO_NAMESPACE_3_1_END + + +/// Convenience macro for making strong parameter type Name that is Basetype +/// underneath. What it actually does is make a new type that is derived +/// from StrongParam. +#define OIIO_STRONG_PARAM_TYPE(Name, Basetype) \ + struct Name : public StrongParam { \ + using StrongParam::StrongParam; \ + } diff --git a/third_party/tlRender-install-Release/include/OpenImageIO/strutil.h b/third_party/tlRender-install-Release/include/OpenImageIO/strutil.h new file mode 100644 index 00000000..c446c496 --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenImageIO/strutil.h @@ -0,0 +1,1182 @@ +// Copyright Contributors to the OpenImageIO project. +// SPDX-License-Identifier: Apache-2.0 +// https://github.com/AcademySoftwareFoundation/OpenImageIO + +// clang-format off + +///////////////////////////////////////////////////////////////////////// +/// @file strutil.h +/// +/// @brief String-related utilities, all in namespace Strutil. +///////////////////////////////////////////////////////////////////////// + + + +#pragma once + +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +#include +#include + +// Allow client software to know if this version of OIIO has Strutil::sprintf +#define OIIO_HAS_SPRINTF 1 + +// Allow client software to know (and to determine, by setting this value +// before including this header) if this version of OIIO has Strutil::format +// behave like sprintf (OIIO_FORMAT_IS_FMT==0) or like python / {fmt} / +// C++20ish std::format (OIIO_FORMAT_IS_FMT==1). +#ifndef OIIO_FORMAT_IS_FMT +# define OIIO_FORMAT_IS_FMT 1 +#endif + +#define OIIO_FORMAT_DEPRECATED OIIO_DEPRECATED("old style (printf-like) formatting version of this function is deprecated") + +// If OIIO_PRINT_IS_SYNCHRONIZED is not defined, assume unsynchronized. +#ifndef OIIO_PRINT_IS_SYNCHRONIZED +# define OIIO_PRINT_IS_SYNCHRONIZED 0 +#endif + +// Allow client software to know that at this moment, the fmt-based string +// formatting is locale-independent. This was 0 in older versions when fmt +// was locale dependent. +#define OIIO_FMT_LOCALE_INDEPENDENT 1 + + + +OIIO_NAMESPACE_3_1_BEGIN + +/// @namespace Strutil +/// +/// @brief String-related utilities. +namespace Strutil { + +/// Output the string to the file/stream in a synchronized fashion, with an +/// internal mutex used to prevent threads from clobbering each other -- +/// output strings coming from concurrent threads may be interleaved, but each +/// string is "atomic" and will never splice each other +/// character-by-character. If `flush` is true, the underlying stream will be +/// flushed after the string is output. +void OIIO_UTIL_API sync_output (FILE* file, string_view str, + bool flush = true); +void OIIO_UTIL_API sync_output (std::ostream& file, string_view str, + bool flush = true); + + +/// Construct a std::string in a printf-like fashion. For example: +/// +/// std::string s = Strutil::sprintf ("blah %d %g", (int)foo, (float)bar); +/// +/// Uses the fmt library underneath, so it's fully type-safe, and +/// works with any types that understand stream output via '<<'. +/// The formatting of the string will always use the classic "C" locale +/// conventions (in particular, '.' as decimal separator for float values). +#ifdef OIIO_DOXYGEN +template +std::string sprintf(const Str& fmt, Args&&... args); +#else +using ::fmt::sprintf; +#endif + + + +/// format() constructs formatted strings. Note that this is in transition! +/// +/// Strutil::old::format() uses printf conventions and matches format() used +/// in OIIO 1.x. It is equivalent to Strutil::sprintf(). +/// +/// std::string s = Strutil::old::sprintf ("blah %d %g", (int)foo, (float)bar); +/// +/// Strutil::fmt::format() uses "Python" conventions, in the style of string +/// formatting used by C++20 std::format and implemented today in the {fmt} +/// package (https://github.com/fmtlib/fmt). For example: +/// +/// std::string s = Strutil::format ("blah {} {}", (int)foo, (float)bar); +/// +/// Straight-up Strutil::format is today aliased to old::format for the sake +/// of back-compatibility, but will someday be switched to fmt::format. +/// +/// Recommended strategy for users: +/// * If you want printf conventions, switch to Strutil::sprintf(). +/// * If you want to use the python conventions prior to the big switch, +/// use Strutil::fmt::format() explicitly (but see the caveat below). +/// * Use of unspecified Strutil::format() is, for back compatibility, +/// currently equivalent to sprintf, but beware that some point it will +/// switch to the future-standard formatting rules. +/// + +namespace fmt { +template +OIIO_NODISCARD +inline std::string format(const Str& fmt, Args&&... args) +{ + return ::fmt::vformat(fmt, ::fmt::make_format_args(args...)); +} +} // namespace fmt + +namespace old { +template +OIIO_FORMAT_DEPRECATED +inline std::string format (const char* fmt, const Args&... args) +{ + return Strutil::sprintf (fmt, args...); +} + +// DEPRECATED(2.0) string_view version. Phasing this out because +// std::string_view won't have a c_str() method. +template +OIIO_FORMAT_DEPRECATED +inline std::string format (string_view fmt, const Args&... args) +{ + return format ({ fmt.data(), fmt.size() }, args...); +} +} // namespace old + + +// Choose whether Strutil::format is the old or new kind based on +// OIIO_FORMAT_IS_FMT. +#if OIIO_FORMAT_IS_FMT +using fmt::format; +#else +using old::format; +#endif + + +// More things we wrap from fmt library +using ::fmt::format_args; +using ::fmt::make_format_args; +using ::fmt::format_to; +using ::fmt::format_to_n; + + +/// Strutil::printf (fmt, ...) +/// Strutil::fprintf (FILE*, fmt, ...) +/// Strutil::fprintf (ostream& fmt, ...) +/// +/// Output formatted strings to stdout, a FILE*, or a stream, respectively. +/// All use printf-like formatting rules, are type-safe, are thread-safe +/// (the outputs are "atomic", at least versus other calls to +/// Strutil::*printf), and automatically flush their outputs. They are all +/// locale-independent (forcing classic "C" locale). + +template +inline void printf (const char* fmt, const Args&... args) +{ + sync_output (stdout, Strutil::sprintf(fmt, args...)); +} + +template +inline void fprintf (FILE *file, const char* fmt, const Args&... args) +{ + sync_output (file, Strutil::sprintf(fmt, args...)); +} + +template +inline void fprintf (std::ostream &file, const char* fmt, const Args&... args) +{ + sync_output (file, Strutil::sprintf(fmt, args...)); +} + + + +namespace sync { + +/// Strutil::sync::print (fmt, ...) +/// Strutil::sync::print (FILE*, fmt, ...) +/// Strutil::sync::print (ostream& fmt, ...) +/// +/// Output formatted strings to stdout, a FILE*, or a stream, using a +/// "Python-like/std::format" type-safe formatting description. Results are +/// locale-independent (use `{:n}` locale-aware formatting). +/// +/// Output is fully thread-safe (the outputs are "atomic" to the file or +/// stream), and if the stream is buffered, it is flushed after the output). + +#if FMT_VERSION >= 70000 +template +inline void print (FILE *file, const Str& fmt, Args&&... args) +{ + sync_output (file, ::fmt::vformat(fmt, ::fmt::make_format_args(args...))); +} + +template +inline void print (const Str& fmt, Args&&... args) +{ + sync_output(stdout, ::fmt::vformat(fmt, ::fmt::make_format_args(args...))); +} + +template +inline void print (std::ostream &file, const Str& fmt, Args&&... args) +{ + sync_output (file, ::fmt::vformat(fmt, ::fmt::make_format_args(args...))); +} + +#else + +template +inline void print (FILE *file, const char* fmt, Args&&... args) +{ + sync_output (file, ::fmt::format(fmt, std::forward(args)...)); +} + +template +inline void print (const char* fmt, Args&&... args) +{ + print(stdout, fmt, std::forward(args)...); +} + +template +inline void print (std::ostream &file, const char* fmt, Args&&... args) +{ + sync_output (file, ::fmt::format(fmt, std::forward(args)...)); +} +#endif +} // namespace sync + + + +/// Strutil::print (fmt, ...) +/// Strutil::print (FILE*, fmt, ...) +/// Strutil::print (ostream& fmt, ...) +/// +/// Output formatted strings to stdout, a FILE*, or a stream, using a +/// "Python-like/std::format" type-safe formatting description. Results are +/// locale-independent (use `{:n}` locale-aware formatting). +/// +/// As wrappers around fmt::print (https://fmt.dev), these appear currently to +/// be thread-safe and "atomic" (multiple concurrent calls using the same +/// stream should not interleave their characters within the output strings). +/// But we can't 100% guarantee that on all platforms and all versions of fmt. +/// See the `Strutil::sync::print()` for similar functionality that is +/// guaranteed to be thread-safe and atomic, as well as flush their outputs +/// fully after each call (but are, as expected, slower). If +/// `OIIO_PRINT_IS_SYNCHRONIZED` is defined to be 1 prior to including +/// ``, then print will be also be thread-safe and +/// atomic, like `sync::print`. +#ifdef OIIO_DOXYGEN +template +void print (const char* fmt, const Args&... args); + +template +void print (FILE *file, const char* fmt, const Args&... args); + +template +void print (std::ostream &file, const char* fmt, const Args&... args); + +#elif FMT_VERSION >= 70000 && !OIIO_PRINT_IS_SYNCHRONIZED +using ::fmt::print; +#else +using sync::print; +#endif + + +namespace pvt { +// Internal use only +OIIO_UTIL_API void debug(string_view str); +OIIO_UTIL_API void append_error(string_view str); +OIIO_UTIL_API bool has_error(); +OIIO_UTIL_API std::string geterror(bool clear); +} + +/// `debug(format, ...)` prints debugging message when attribute "debug" is +/// nonzero, which it is by default for DEBUG compiles or when the environment +/// variable OPENIMAGEIO_DEBUG is set. This is preferred to raw output to +/// stderr for debugging statements. +template +void debug(const char* fmt, Args&&... args) +{ + pvt::debug(fmt::format(fmt, std::forward(args)...)); +} + + + +/// Return a std::string formatted from printf-like arguments -- passed +/// already as a va_list. This is not guaranteed type-safe and is not +/// extensible like format(). Use with caution! +std::string OIIO_UTIL_API vsprintf (const char *fmt, va_list ap) +#if defined(__GNUC__) && !defined(__CUDACC__) + __attribute__ ((format (printf, 1, 0) )) +#endif + ; + + +/// Return a string expressing a number of bytes, in human readable form. +/// - memformat(153) -> "153 B" +/// - memformat(15300) -> "14.9 KB" +/// - memformat(15300000) -> "14.6 MB" +/// - memformat(15300000000LL) -> "14.2 GB" +std::string OIIO_UTIL_API memformat (long long bytes, int digits=1); + +/// Return a string expressing an elapsed time, in human readable form. +/// e.g. "0:35.2" +std::string OIIO_UTIL_API timeintervalformat (double secs, int digits=1); + + +/// Get a map with RESTful arguments extracted from the given string 'str'. +/// Add it into the 'result' argument (Warning: the 'result' argument may +/// be changed even if 'get_rest_arguments ()' return an error!). +/// Return true on success, false on error. +/// Acceptable forms: +/// - text?arg1=val1&arg2=val2... +/// - ?arg1=val1&arg2=val2... +/// Everything before question mark will be saved into the 'base' argument. +bool OIIO_UTIL_API get_rest_arguments (const std::string &str, std::string &base, + std::map &result); + +/// Take a string that may have embedded newlines, tabs, etc., and turn +/// those characters into escape sequences like `\n`, `\t`, `\v`, `\b`, +/// `\r`, `\f`, `\a`, `\\`, `\"`. +std::string OIIO_UTIL_API escape_chars (string_view unescaped); + +/// Take a string that has embedded escape sequences (`\\`, `\"`, `\n`, +/// etc.) and collapse them into the 'real' characters. +std::string OIIO_UTIL_API unescape_chars (string_view escaped); + +/// Word-wrap string `src` to no more than `columns` width, starting with an +/// assumed position of `prefix` on the first line and intending by `prefix` +/// blanks before all lines other than the first. +/// +/// Words may be split AT any characters in `sep` or immediately AFTER any +/// characters in `presep`. After the break, any extra `sep` characters will +/// be deleted. +/// +/// By illustration, +/// wordwrap("0 1 2 3 4 5 6 7 8", 10, 4) +/// should return: +/// "0 1 2\n 3 4 5\n 6 7 8" +std::string OIIO_UTIL_API wordwrap (string_view src, int columns = 80, + int prefix = 0, string_view sep = " ", + string_view presep = ""); + + +/// Our favorite "string" hash of a length of bytes. Currently, it is just +/// a wrapper for an inlined, constexpr, Cuda-safe farmhash. +/// It returns a size_t, so will be a 64 bit hash on 64-bit platforms, but +/// a 32 bit hash on 32-bit platforms. +inline constexpr size_t +strhash(size_t len, const char *s) +{ + return size_t(OIIO::farmhash::inlined::Hash64(s, len)); +} + + +/// A guaranteed 64-bit string hash on all platforms. +inline constexpr uint64_t +strhash64(size_t len, const char *s) +{ + return OIIO::farmhash::inlined::Hash64(s, len); +} + + +/// Hash a string_view. This is OIIO's default favorite string hasher. +/// Currently, it uses farmhash, is constexpr (for C++14), and works in Cuda. +/// This is rigged, though, so that empty strings hash always hash to 0 (that +/// isn't what a raw farmhash would give you, but it's a useful property, +/// especially for trivial initialization). It returns a size_t, so will be a +/// 64 bit hash on 64-bit platforms, but a 32 bit hash on 32-bit platforms. +inline constexpr size_t +strhash(string_view s) +{ + return s.length() ? strhash(s.length(), s.data()) : 0; +} + + + +/// Hash a string_view, guaranteed 64 bits (even on 32 bit platforms). +inline constexpr uint64_t +strhash64(string_view s) +{ + return s.length() ? strhash64(s.length(), s.data()) : 0; +} + + + +/// Case-insensitive comparison of strings. For speed, this always uses a +/// static locale that doesn't require a mutex. Caveat: the case-sensivive +/// `==` of string_view's is about 20x faster than this case-insensitive +/// function. +bool OIIO_UTIL_API iequals (string_view a, string_view b); + +/// Case-insensitive ordered comparison of strings. For speed, this always +/// uses a static locale that doesn't require a mutex. +bool OIIO_UTIL_API iless (string_view a, string_view b); + +/// Does 'a' start with the string 'b', with a case-sensitive comparison? +bool OIIO_UTIL_API starts_with (string_view a, string_view b); + +/// Does 'a' start with the string 'b', with a case-insensitive comparison? +/// For speed, this always uses a static locale that doesn't require a +/// mutex. Caveat: the case-sensivive starts_with() is about 20x faster than +/// this case-insensitive function. +bool OIIO_UTIL_API istarts_with (string_view a, string_view b); + +/// Does 'a' end with the string 'b', with a case-sensitive comparison? +bool OIIO_UTIL_API ends_with (string_view a, string_view b); + +/// Does 'a' end with the string 'b', with a case-insensitive comparison? +/// For speed, this always uses a static locale that doesn't require a +/// mutex. Caveat: the case-sensivive ends_with() is about 20x faster than +/// this case-insensitive function. +bool OIIO_UTIL_API iends_with (string_view a, string_view b); + +/// Return the position of the first occurrence of `b` within `a`, or +/// std::npos if not found. +size_t OIIO_UTIL_API find(string_view a, string_view b); + +/// Return the position of the first occurrence of `b` within `a`, with a +/// case-insensitive comparison, or std::npos if not found. Caveat: the +/// case-sensivive find() is about 20x faster than this case-insensitive +/// function. +size_t OIIO_UTIL_API ifind(string_view a, string_view b); + +/// Return the position of the last occurrence of `b` within `a`, or npos if +/// not found. +size_t OIIO_UTIL_API rfind(string_view a, string_view b); + +/// Return the position of the last occurrence of `b` within `a`, with a +/// case-insensitive comparison, or npos if not found. Caveat: the +/// case-sensivive rfind() is about 20x faster than this case-insensitive +/// function. +size_t OIIO_UTIL_API irfind(string_view a, string_view b); + +/// Does 'a' contain the string 'b' within it? +bool OIIO_UTIL_API contains (string_view a, string_view b); + +/// Does 'a' contain the string 'b' within it, using a case-insensitive +/// comparison? Caveat: the case-sensivive contains() is about 20x faster +/// than this case-insensitive function. +bool OIIO_UTIL_API icontains (string_view a, string_view b); + +/// Does 'a' contain the string 'b' within it? But start looking at the end! +/// This can be a bit faster than contains() if you think that the substring +/// `b` will tend to be close to the end of `a`. +inline bool rcontains (string_view a, string_view b) { + return rfind(a, b) != string_view::npos; +} + +/// Does 'a' contain the string 'b' within it? But start looking at the end! +/// This can be a bit faster than contains() if you think that the substring +/// `b` will tend to be close to the end of `a`. Caveat: the case-sensivive +/// rcontains() is about 20x faster than this case-insensitive function. +inline bool ircontains (string_view a, string_view b) { + return irfind(a, b) != string_view::npos; +} + +/// Does 'a' contain any of the characters within `set`? +bool OIIO_UTIL_API contains_any_char (string_view a, string_view set); + +/// Convert to upper case in place, faster than std::toupper because we use +/// a static locale that doesn't require a mutex lock. +void OIIO_UTIL_API to_lower (std::string &a); + +/// Convert to upper case in place, faster than std::toupper because we use +/// a static locale that doesn't require a mutex lock. +void OIIO_UTIL_API to_upper (std::string &a); + +/// Return an all-upper case version of `a` (locale-independent). +inline std::string lower (string_view a) { + std::string result(a); + to_lower(result); + return result; +} + +/// Return an all-upper case version of `a` (locale-independent). +inline std::string upper (string_view a) { + std::string result(a); + to_upper(result); + return result; +} + + + +/// Return a reference to the section of str that has all consecutive +/// characters in chars removed from the beginning and ending. If chars is +/// empty, it will be interpreted as " \t\n\r\f\v" (whitespace). +string_view OIIO_UTIL_API strip (string_view str, string_view chars=string_view()); + +/// Return a reference to the section of str that has all consecutive +/// characters in chars removed from the beginning (left side). If chars is +/// empty, it will be interpreted as " \t\n\r\f\v" (whitespace). +string_view OIIO_UTIL_API lstrip (string_view str, string_view chars=string_view()); + +/// Return a reference to the section of str that has all consecutive +/// characters in chars removed from the ending (right side). If chars is +/// empty, it will be interpreted as " \t\n\r\f\v" (whitespace). +string_view OIIO_UTIL_API rstrip (string_view str, string_view chars=string_view()); + + +/// Fills the "result" list with the words in the string, using sep as +/// the delimiter string. If `maxsplit` is > -1, the string will be split +/// into at most `maxsplit` pieces (a negative value will impose no +/// maximum). If sep is "", any whitespace string is a separator. If the +/// source `str` is empty, there will be zero pieces. +void OIIO_UTIL_API split (string_view str, std::vector &result, + string_view sep = string_view(), int maxsplit = -1); +void OIIO_UTIL_API split (string_view str, std::vector &result, + string_view sep = string_view(), int maxsplit = -1); + +/// Split the contents of `str` using `sep` as the delimiter string. If +/// `sep` is "", any whitespace string is a separator. If `maxsplit > -1`, +/// at most `maxsplit` split fragments will be produced (for example, +/// maxsplit=2 will split at only the first separator, yielding at most two +/// fragments). The result is returned as a vector of std::string (for +/// `splits()`) or a vector of string_view (for `splitsv()`). If the source +/// `str` is empty, there will be zero pieces. +OIIO_UTIL_API std::vector +splits (string_view str, string_view sep = "", int maxsplit = -1); +OIIO_UTIL_API std::vector +splitsv (string_view str, string_view sep = "", int maxsplit = -1); + +/// Join all the strings in 'seq' into one big string, separated by the +/// 'sep' string. The Sequence can be any iterable collection of items that +/// are able to convert to string via stream output. Examples include: +/// std::vector, std::vector, std::set, +/// std::vector, etc. +template +std::string join (const Sequence& seq, string_view sep="") +{ + std::ostringstream out; + out.imbue(std::locale::classic()); // Force "C" locale + bool first = true; + for (auto&& s : seq) { + if (! first && sep.size()) + out << sep; + out << s; + first = false; + } + return out.str(); +} + +/// Join all the strings in 'seq' into one big string, separated by the +/// 'sep' string. The Sequence can be any iterable collection of items that +/// are able to convert to string via stream output. Examples include: +/// std::vector, std::vector, std::set, +/// std::vector, etc. Values will be rendered into the string in a +/// locale-independent manner (i.e., '.' for decimal in floats). If the +/// optional `len` is nonzero, exactly that number of elements will be +/// output (truncating or default-value-padding the sequence). +template +std::string join (const Sequence& seq, string_view sep /*= ""*/, size_t len) +{ + using E = typename std::remove_reference::type; + std::ostringstream out; + out.imbue(std::locale::classic()); // Force "C" locale + bool first = true; + for (auto&& s : seq) { + if (! first) + out << sep; + out << s; + first = false; + if (len && (--len == 0)) + break; + } + while (len--) { + if (! first) + out << sep; + out << E(); + first = false; + } + return out.str(); +} + +/// Concatenate two strings, returning a std::string, implemented carefully +/// to not perform any redundant copies or allocations. +std::string OIIO_UTIL_API concat(string_view s, string_view t); + +/// Repeat a string formed by concatenating str n times. +std::string OIIO_UTIL_API repeat (string_view str, int n); + +/// Replace a pattern inside a string and return the result. If global is +/// true, replace all instances of the pattern, otherwise just the first. +std::string OIIO_UTIL_API replace (string_view str, string_view pattern, + string_view replacement, bool global=false); + + +/// strtod/strtof equivalents that are "locale-independent", always using +/// '.' as the decimal separator. This should be preferred for I/O and other +/// situations where you want the same standard formatting regardless of +/// locale. +float OIIO_UTIL_API strtof (const char *nptr, char **endptr = nullptr) noexcept; +double OIIO_UTIL_API strtod (const char *nptr, char **endptr = nullptr) noexcept; + + +// stoi() returns the int conversion of text from a string. +// No exceptions or errors -- parsing errors just return 0, over/underflow +// gets clamped to int range. No locale consideration. +OIIO_UTIL_API int stoi (string_view s, size_t* pos=0, int base=10); + +// stoui() returns the unsigned int conversion of text from a string. +// No exceptions or errors -- parsing errors just return 0. Negative +// values are cast, overflow is clamped. No locale considerations. +OIIO_UTIL_API unsigned int stoui (string_view s, size_t* pos=0, int base=10); + +/// stof() returns the float conversion of text from several string types. +/// No exceptions or errors -- parsing errors just return 0.0. These always +/// use '.' for the decimal mark (versus atof and std::strtof, which are +/// locale-dependent). +OIIO_UTIL_API float stof (string_view s, size_t* pos=0); +#define OIIO_STRUTIL_HAS_STOF 1 /* be able to test this */ + +// Temporary fix: allow separate std::string and char* versions, to avoid +// string_view allocation on some platforms. This will be deprecated once +// we can count on all supported compilers using short string optimization. +OIIO_UTIL_API float stof (const std::string& s, size_t* pos=0); +OIIO_UTIL_API float stof (const char* s, size_t* pos=0); +// N.B. For users of ustring, there's a stof(ustring) defined in ustring.h. + +OIIO_UTIL_API double stod (string_view s, size_t* pos=0); +OIIO_UTIL_API double stod (const std::string& s, size_t* pos=0); +OIIO_UTIL_API double stod (const char* s, size_t* pos=0); + + + +/// Return true if the string is exactly (other than leading and trailing +/// whitespace) a valid int. +OIIO_UTIL_API bool string_is_int (string_view s); + +/// Return true if the string is exactly (other than leading or trailing +/// whitespace) a valid float. This operations in a locale-independent +/// manner, i.e., it assumes '.' as the decimal mark. +OIIO_UTIL_API bool string_is_float (string_view s); + + + +// Helper template to convert from generic type to string. Used when you +// want stoX but you're in a template. Rigged to use "C" locale. +template +inline T from_string (string_view s) { + return T(s); // Generic: assume there is an explicit converter +} + +#ifndef OIIO_DOXYGEN +// Special case for int +template<> inline int from_string (string_view s) { + return Strutil::stoi(s); +} +// Special case for uint +template<> inline unsigned int from_string (string_view s) { + return Strutil::stoui(s); +} +// Special case for float -- note that by using Strutil::strtof, this +// always treats '.' as the decimal mark. +template<> inline float from_string (string_view s) { + return Strutil::stof(s); +} +// Special case for double -- note that by using Strutil::strtof, this +// always treats '.' as the decimal mark. +template<> inline double from_string (string_view s) { + return Strutil::stod(s); +} + +template<> inline int64_t from_string(string_view s) { + // For conversion of string_view to unsigned int, fall back on strtoll. + auto r = strtoll(std::string(s).c_str(), nullptr, 10); + return static_cast(r); +} + +template<> inline uint64_t from_string(string_view s) { + // For conversion of string_view to unsigned int, fall back on strtoull. + auto r = strtoull(std::string(s).c_str(), nullptr, 10); + return static_cast(r); +} + +template<> inline short from_string(string_view s) { + return static_cast(Strutil::stoi(s)); +} + +template<> inline unsigned short from_string(string_view s) { + return static_cast(Strutil::stoi(s)); +} +#endif + + + +/// Template function to convert any type to a string. The default +/// implementation is just to use sprintf or fmt::to_string. The template +/// can be overloaded if there is a better method for particular types. +template +inline std::string to_string (const T& value) { + return ::fmt::to_string(value); +} + +// Some special pass-through cases +inline std::string to_string (const std::string& value) { return value; } +inline std::string to_string (string_view value) { return value; } +inline std::string to_string (const char* value) { return value; } + + + +// Helper template to test if a string is a generic type. Used instead of +// string_is_X, but when you're inside templated code. +template +inline bool string_is (string_view /*s*/) { + return false; // Generic: assume there is an explicit specialization +} +// Special case for int +template <> inline bool string_is (string_view s) { + return string_is_int (s); +} +// Special case for float. Note that by using Strutil::stof, this always +// treats '.' as the decimal character. +template <> inline bool string_is (string_view s) { + return string_is_float (s); +} + + + + +/// Given a string containing values separated by a comma (or optionally +/// another separator), extract the individual values, placing them into +/// vals[] which is presumed to already contain defaults. If only a single +/// value was in the list, replace all elements of vals[] with the value. +/// Otherwise, replace them in the same order. A missing value will simply +/// not be replaced. Return the number of values found in the list +/// (including blank or malformed ones). If the vals vector was empty +/// initially, grow it as necessary. +/// +/// For example, if T=float, suppose initially, vals[] = {0, 1, 2}, then +/// "3.14" results in vals[] = {3.14, 3.14, 3.14} +/// "3.14,,-2.0" results in vals[] = {3.14, 1, -2.0} +/// +/// This can work for type T = int, float, or any type for that has +/// an explicit constructor from a std::string. +template +int extract_from_list_string (std::vector &vals, + string_view list, + string_view sep = ",") +{ + size_t nvals = vals.size(); + std::vector valuestrings; + Strutil::split (list, valuestrings, sep); + for (size_t i = 0, e = valuestrings.size(); i < e; ++i) { + T v = from_string (valuestrings[i]); + if (nvals == 0) + vals.push_back (v); + else if (valuestrings[i].size()) { + if (vals.size() > i) // don't replace non-existent entries + vals[i] = from_string (valuestrings[i]); + } + /* Otherwise, empty space between commas, so leave default alone */ + } + if (valuestrings.size() == 1 && nvals > 0) { + vals.resize (1); + vals.resize (nvals, vals[0]); + } + return list.size() ? (int) valuestrings.size() : 0; +} + + +/// Given a string containing values separated by a comma (or optionally +/// another separator), extract the individual values, returning them as a +/// std::vector. The vector will be initialized with `nvals` elements +/// with default value `val`. If only a single value was in the list, +/// replace all elements of vals[] with the value. Otherwise, replace them +/// in the same order. A missing value will simply not be replaced and +/// will retain the initialized default value. If the string contains more +/// then `nvals` values, they will append to grow the vector. +/// +/// For example, if T=float, +/// extract_from_list_string ("", 3, 42.0f) +/// --> {42.0, 42.0, 42.0} +/// extract_from_list_string ("3.14", 3, 42.0f) +/// --> {3.14, 3.14, 3.14} +/// extract_from_list_string ("3.14,,-2.0", 3, 42.0f) +/// --> {3.14, 42.0, -2.0} +/// extract_from_list_string ("1,2,3,4", 3, 42.0f) +/// --> {1.0, 2.0, 3.0, 4.0} +/// +/// This can work for type T = int, float, or any type for that has +/// an explicit constructor from a std::string. +template +std::vector +extract_from_list_string (string_view list, size_t nvals=0, T val=T(), + string_view sep = ",") +{ + std::vector vals (nvals, val); + extract_from_list_string (vals, list, sep); + return vals; +} + + + +/// Scan a string for date and time information. Return true upon success, +/// false if the string did not appear to contain a valid date/time. If, after +/// parsing a valid date/time (including out of range values), `str` contains +/// more characters after that, it is not considered a failure. +/// +/// Valid date/time formats include: +/// * YYYY-MM-DD HH:MM:SS +/// * YYYY:MM:DD HH:MM:SS +/// * YYYY/MM/DD HH:MM:SS +OIIO_UTIL_API bool +scan_datetime(string_view str, int& year, int& month, int& day, + int& hour, int& min, int& sec); + + + +/// C++ functor wrapper class for using strhash for unordered_map or +/// unordered_set. The way this is used, in conjunction with +/// StringEqual, to build an efficient hash map for char*'s or +/// std::string's is as follows: +/// \code +/// unordered_map +/// \endcode +class StringHash { +public: + size_t operator() (string_view s) const { + return (size_t)Strutil::strhash(s); + } +}; + + + +/// C++ functor for comparing two strings for equality of their characters. +struct OIIO_UTIL_API StringEqual { + bool operator() (const char *a, const char *b) const noexcept { return strcmp (a, b) == 0; } + bool operator() (string_view a, string_view b) const noexcept { return a == b; } +}; + + +/// C++ functor for comparing two strings for equality of their characters +/// in a case-insensitive and locale-insensitive way. +struct OIIO_UTIL_API StringIEqual { + bool operator() (const char *a, const char *b) const noexcept; + bool operator() (string_view a, string_view b) const noexcept { return iequals (a, b); } +}; + + +/// C++ functor for comparing the ordering of two strings. +struct OIIO_UTIL_API StringLess { + bool operator() (const char *a, const char *b) const noexcept { return strcmp (a, b) < 0; } + bool operator() (string_view a, string_view b) const noexcept { return a < b; } +}; + + +/// C++ functor for comparing the ordering of two strings in a +/// case-insensitive and locale-insensitive way. +struct OIIO_UTIL_API StringILess { + bool operator() (const char *a, const char *b) const noexcept; + bool operator() (string_view a, string_view b) const noexcept { return a < b; } +}; + + + +/// Conversion of normal char-based strings (presumed to be UTF-8 encoding) +/// to a UTF-16 encoded wide char string, wstring. +std::wstring OIIO_UTIL_API utf8_to_utf16wstring (string_view utf8str) noexcept; + +/// Conversion from wstring UTF-16 to a UTF-8 std::string. This is the +/// standard way to convert from Windows wide character strings used for +/// filenames into the UTF-8 strings OIIO expects for filenames when passed to +/// functions like ImageInput::open(). +std::string OIIO_UTIL_API utf16_to_utf8(const std::wstring& utf16str) noexcept; + +/// Conversion from UTF-16 std::u16string to a UTF-8 std::string. +std::string OIIO_UTIL_API utf16_to_utf8(const std::u16string& utf16str) noexcept; + + + +/// Copy at most size characters (including terminating 0 character) from +/// src into dst[], filling any remaining characters with 0 values. Returns +/// dst. Note that this behavior is identical to strncpy, except that it +/// guarantees that there will be a terminating 0 character. +OIIO_UTIL_API char * safe_strcpy (char *dst, string_view src, size_t size) noexcept; + + +/// Append `src` to the end of the C-string buffer dst, plus a terminating +/// null, assuming that dst can hold at most `size` characters (including +/// terminating 0 character). Returns dst. Note that this behavior is similar +/// to strcat, but guarantees that the resulting string fits into `size` bytes +/// and is null-terminated. +OIIO_UTIL_API char* safe_strcat(char *dst, string_view src, size_t size) noexcept; + + +/// Return the length of null-terminated string `str`, up to maximum `size`. +/// If str is nullptr, return 0. This is equivalent to C11 strnlen_s. +OIIO_UTIL_API size_t safe_strlen(const char* str, size_t size) noexcept; + + +/// Return a string_view that is a substring of the given C string, ending at +/// the first null character or after size characters, whichever comes first. +inline string_view safe_string_view(const char* str, size_t size) noexcept +{ + return string_view(str, safe_strlen(str, size)); +} + +/// Return a std::string that is a substring of the given C string, ending at +/// the first null character or after size characters, whichever comes first. +inline std::string safe_string(const char* str, size_t size) +{ + return safe_string_view(str, size); +} + + + +/// Is the character a whitespace character (space, linefeed, tab, carrage +/// return)? Note: this is safer than C isspace(), which has undefined +/// behavior for negative char values. Also note that it differs from C +/// isspace by not detecting form feed or vertical tab, because who cares. +inline bool isspace(char c) { + return c == ' ' || c == '\n' || c == '\t' || c == '\r'; +} + +/// Modify str to trim any leading whitespace (space, tab, linefeed, cr) +/// from the front. +void OIIO_UTIL_API skip_whitespace (string_view &str) noexcept; + +/// Modify str to trim any trailing whitespace (space, tab, linefeed, cr) +/// from the back. +void OIIO_UTIL_API remove_trailing_whitespace (string_view &str) noexcept; + +/// Modify str to trim any whitespace (space, tab, linefeed, cr) from both +/// the front and back. +inline void trim_whitespace (string_view &str) noexcept { + skip_whitespace(str); + remove_trailing_whitespace(str); +} + +/// Return the portion of str that is trimmed of any whitespace (space, tab, +/// linefeed, cr) from both the front and back. +inline string_view trimmed_whitespace (string_view str) noexcept { + skip_whitespace(str); + remove_trailing_whitespace(str); + return str; +} + +/// If str's first character is c (or first non-whitespace char is c, if +/// skip_whitespace is true), return true and additionally modify str to +/// skip over that first character if eat is also true. Otherwise, if str +/// does not begin with character c, return false and don't modify str. +bool OIIO_UTIL_API parse_char (string_view &str, char c, + bool skip_whitespace = true, bool eat=true) noexcept; + +/// Modify str to trim all characters up to (but not including) the first +/// occurrence of c, and return true if c was found or false if the whole +/// string was trimmed without ever finding c. But if eat is false, then +/// don't modify str, just return true if any c is found, false if no c +/// is found. +bool OIIO_UTIL_API parse_until_char (string_view &str, char c, bool eat=true) noexcept; + +/// If str's first non-whitespace characters are the prefix, return true and +/// additionally modify str to skip over that prefix if eat is also true. +/// Otherwise, if str doesn't start with optional whitespace and the prefix, +/// return false and don't modify str. +bool OIIO_UTIL_API parse_prefix (string_view &str, string_view prefix, bool eat=true) noexcept; + +/// If str's first non-whitespace characters form a valid integer, return +/// true, place the integer's value in val, and additionally modify str to +/// skip over the parsed integer if eat is also true. Otherwise, if no +/// integer is found at the beginning of str, return false and don't modify +/// val or str. +bool OIIO_UTIL_API parse_int (string_view &str, int &val, bool eat=true) noexcept; + +/// If str's first non-whitespace characters form a valid float, return +/// true, place the float's value in val, and additionally modify str to +/// skip over the parsed float if eat is also true. Otherwise, if no float +/// is found at the beginning of str, return false and don't modify val or +/// str. +bool OIIO_UTIL_API parse_float (string_view &str, float &val, bool eat=true) noexcept; + +/// Synonym for parse_int +inline bool parse_value(string_view &str, int &val, bool eat=true) noexcept +{ + return parse_int(str, val, eat); +} + +/// Synonym for parse_float +inline bool parse_value(string_view &str, float &val, bool eat=true) noexcept +{ + return parse_float(str, val, eat); +} + +/// Parse from `str`: a `prefix`, a series of int values separated by the +/// `sep` string, and a `postfix`, placing the values in the elements of +/// mutable span `values`, where the span length indicates the number of +/// values to read. Any of the prefix, separator, or postfix may be empty +/// strings. If `eat` is true and the parse was successful, `str` will be +/// updated in place to trim everything that was parsed, but if any part of +/// the parse failed, `str` will not be altered from its original state. +bool OIIO_UTIL_API +parse_values(string_view& str, string_view prefix, span values, + string_view sep = "", string_view postfix = "", + bool eat = true) noexcept; +/// parse_values for float. +bool OIIO_UTIL_API +parse_values(string_view& str, string_view prefix, span values, + string_view sep = "", string_view postfix = "", + bool eat = true) noexcept; + +/// Similar to parse_values, but with no option to "eat" from +/// or modify the source string. +inline bool +scan_values(string_view str, string_view prefix, span values, + string_view sep = "", string_view postfix = "") noexcept +{ + string_view sv(str); + return parse_values(sv, prefix, values, sep, postfix); +} + +inline bool +scan_values(string_view str, string_view prefix, span values, + string_view sep = "", string_view postfix = "") noexcept +{ + string_view sv(str); + return parse_values(sv, prefix, values, sep, postfix); +} + +enum QuoteBehavior { DeleteQuotes, KeepQuotes }; +/// If str's first non-whitespace characters form a valid string (either a +/// single word separated by whitespace or anything inside a double-quoted +/// ("") or single-quoted ('') string, return true, place the string's value +/// (not including surrounding double quotes) in val, and additionally +/// modify str to skip over the parsed string if eat is also true. +/// Otherwise, if no string is found at the beginning of str, return false +/// and don't modify val or str. If keep_quotes is true, the surrounding +/// double quotes (if present) will be kept in val. +bool OIIO_UTIL_API parse_string (string_view &str, string_view &val, bool eat=true, + QuoteBehavior keep_quotes=DeleteQuotes) noexcept; + +/// Return the first "word" (set of contiguous alphabetical characters) in +/// str, and additionally modify str to skip over the parsed word if eat is +/// also true. Otherwise, if no word is found at the beginning of str, +/// return an empty string_view and don't modify str. +string_view OIIO_UTIL_API parse_word (string_view &str, bool eat=true) noexcept; + +/// If str's first non-whitespace characters form a valid C-like identifier, +/// return the identifier, and additionally modify str to skip over the +/// parsed identifier if eat is also true. Otherwise, if no identifier is +/// found at the beginning of str, return an empty string_view and don't +/// modify str. +string_view OIIO_UTIL_API parse_identifier (string_view &str, bool eat=true) noexcept; + +/// If str's first non-whitespace characters form a valid C-like identifier, +/// return the identifier, and additionally modify str to skip over the +/// parsed identifier if eat is also true. Otherwise, if no identifier is +/// found at the beginning of str, return an empty string_view and don't +/// modify str. The 'allowed' parameter may specify a additional characters +/// accepted that would not ordinarily be allowed in C identifiers, for +/// example, parse_identifier (blah, "$:") would allow "identifiers" +/// containing dollar signs and colons as well as the usual alphanumeric and +/// underscore characters. +string_view OIIO_UTIL_API parse_identifier (string_view &str, + string_view allowed, bool eat = true) noexcept; + +/// If the C-like identifier at the head of str exactly matches id, +/// return true, and also advance str if eat is true. If it is not a match +/// for id, return false and do not alter str. +bool OIIO_UTIL_API parse_identifier_if (string_view &str, string_view id, + bool eat=true) noexcept; + +/// Return the longest prefix of `str` that does not contain any characters +/// found in `set` (which defaults to the set of common whitespace +/// characters). If `eat` is true, then `str` will be modified to trim off +/// this returned prefix (but not the separator character). +string_view OIIO_UTIL_API parse_until (string_view &str, + string_view set=" \t\r\n", bool eat=true) noexcept; + +/// Return the longest prefix of `str` that contain only characters found in +/// `set`. If `eat` is true, then `str` will be modified to trim off this +/// returned prefix. +string_view OIIO_UTIL_API parse_while (string_view &str, + string_view set, bool eat=true) noexcept; + +/// Return the prefix of str up to and including the first newline ('\n') +/// character, or all of str if no newline is found within it. If `eat` is +/// true, then `str` will be modified to trim off this returned prefix +/// (including the newline character). +string_view OIIO_UTIL_API parse_line(string_view& str, bool eat = true) noexcept; + + +/// Assuming the string str starts with either '(', '[', or '{', return the +/// head, up to and including the corresponding closing character (')', ']', +/// or '}', respectively), recognizing nesting structures. For example, +/// parse_nested("(a(b)c)d") should return "(a(b)c)", NOT "(a(b)". Return an +/// empty string if str doesn't start with one of those characters, or +/// doesn't contain a correctly matching nested pair. If eat==true, str will +/// be modified to trim off the part of the string that is returned as the +/// match. +string_view OIIO_UTIL_API parse_nested (string_view &str, bool eat=true) noexcept; + +/// Does the string follow the lexical rule of a C identifier? +inline bool +string_is_identifier(string_view str) +{ + // If a leading identifier is the entirety of str, it's an ident. + string_view ident = parse_identifier(str); + return (!ident.empty() && str.empty()); +} + +/// Look within `str` for the pattern: +/// head nonwhitespace_chars whitespace +/// Remove that full pattern from `str` and return the nonwhitespace +/// part that followed the head (or return the empty string and leave `str` +/// unmodified, if the head was never found). +OIIO_UTIL_API std::string +excise_string_after_head (std::string& str, string_view head); + + +/// Converts utf-8 string to vector of unicode codepoints. This function +/// will not stop on invalid sequences. It will let through some invalid +/// utf-8 sequences like: 0xfdd0-0xfdef, 0x??fffe/0x??ffff. It does not +/// support 5-6 bytes long utf-8 sequences. Will skip trailing character if +/// there are not enough bytes for decoding a codepoint. +/// +/// N.B. Following should probably return u32string instead of taking +/// vector, but C++11 support is not yet stabilized across compilers. +/// We will eventually add that and deprecate this one, after everybody +/// is caught up to C++11. +void OIIO_UTIL_API utf8_to_unicode (string_view str, std::vector &uvec); + +/// Encode the string in base64. +/// https://en.wikipedia.org/wiki/Base64 +std::string OIIO_UTIL_API base64_encode (string_view str); + + +enum class EditDistMetric { Levenshtein }; + +/// Compute an edit distance metric between strings `a` and `b`, roughly +/// speaking, the number of changes that would be made to transform one string +/// into the other. Identical strings have a distance of 0. The `method` +/// selects among possible algorithms, which may have different distance +/// metrics or allow different types of edits. (Currently, the only method +/// supported is Levenshtein; this parameter is for future expansion.) +OIIO_UTIL_API size_t +edit_distance(string_view a, string_view b, + EditDistMetric metric = EditDistMetric::Levenshtein); + + +/// Evaluate a string as a boolean value using the following heuristic: +/// - If the string is a valid numeric value (represents an integer or +/// floating point value), return true if it's non-zero, false if it's +/// zero. +/// - If the string is one of "false", "no", or "off", or if it contains +/// only whitespace, return false. +/// - All other non-empty strings return true. +/// The comparisons are case-insensitive and ignore leading and trailing +/// whitespace. +OIIO_UTIL_API bool +eval_as_bool(string_view value); + +} // namespace Strutil + + +OIIO_NAMESPACE_3_1_END + + +// Compatibility +OIIO_NAMESPACE_BEGIN +// Bring the ever-useful Strutil::print into the OIIO namespace. +using Strutil::print; +OIIO_NAMESPACE_END diff --git a/third_party/tlRender-install-Release/include/OpenImageIO/sysutil.h b/third_party/tlRender-install-Release/include/OpenImageIO/sysutil.h new file mode 100644 index 00000000..00552ff3 --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenImageIO/sysutil.h @@ -0,0 +1,189 @@ +// Copyright Contributors to the OpenImageIO project. +// SPDX-License-Identifier: Apache-2.0 +// https://github.com/AcademySoftwareFoundation/OpenImageIO + + +///////////////////////////////////////////////////////////////////////// +/// @file sysutil.h +/// +/// @brief Platform-independent utilities for various OS, hardware, and +/// system resource functionality, all in namespace Sysutil. +///////////////////////////////////////////////////////////////////////// + + +#pragma once + +#include +#include + +#ifdef __MINGW32__ +# include // for alloca +#endif + +#include +#include +#include +#include + +// Allow client software to know if this version has Sysutil::stacktrace(). +#define OIIO_HAS_STACKTRACE 1 + + + +OIIO_NAMESPACE_3_1_BEGIN + +/// @namespace Sysutil +/// +/// @brief Platform-independent utilities for various OS, hardware, and +/// system resource functionality. +namespace Sysutil { + +/// The amount of memory currently being used by this process, in bytes. +/// If resident==true (the default), it will report just the resident +/// set in RAM; if resident==false, it returns the full virtual arena +/// (which can be misleading because gcc allocates quite a bit of +/// virtual, but not actually resident until malloced, memory per +/// thread). +OIIO_UTIL_API size_t +memory_used(bool resident = true); + +/// The amount of physical RAM on this machine, in bytes. +/// If it can't figure it out, it will return 0. +OIIO_UTIL_API size_t +physical_memory(); + +/// Convert calendar time pointed by 'time' into local time and save it in +/// 'converted_time' variable. This is a fully reentrant/thread-safe +/// alternative to the non-reentrant C localtime() call. +OIIO_UTIL_API void +get_local_time(const time_t* time, struct tm* converted_time); + +/// Return the full path of the currently-running executable program. +/// +OIIO_UTIL_API std::string +this_program_path(); + +/// Return the value of an environment variable, or if it is not found in +/// the environment, return `defaultval`, which in turn defaults to the +/// empty string. +OIIO_UTIL_API string_view +getenv(string_view name, string_view defaultval = {}); + +/// Sleep for the given number of microseconds. +/// +OIIO_UTIL_API void +usleep(unsigned long useconds); + +/// Puts the process into the background, detaching it from the shell +/// to prevent it from occupying the terminal or blocking the shell +/// it was launched from. This allows the process to continue running +/// independently in the background. +/// Return true if successful, false if it was unable to do so. +OIIO_UTIL_API bool +put_in_background(); + +/// Obsolete version. The argc, argv parameters are not used. We suggest +/// switching to the version of `put_in_background()` that takes no +/// arguments. +/// DEPRECATED(3.0) old API. +OIIO_UTIL_API bool +put_in_background(int argc, char* argv[]); + +/// Number of virtual cores available on this platform (including +/// hyperthreads). Note that this is just a wrapper/synonym for C++ +/// std::thread::hardware_concurrency(), and was put in OIIO to allow its use +/// before C++11 was our minimum. +OIIO_UTIL_API unsigned int +hardware_concurrency(); + +#if OIIO_DISABLE_DEPRECATED < OIIO_MAKE_VERSION(2, 6, 0) +/// Number of full hardware cores available on this platform (does not +/// include hyperthreads). This is not always accurate and on some +/// platforms will return the number of virtual cores. +/// +/// This is considered DEPRECATED(2.6) and will be removed from a future +/// release of OpenImageIO. It is now a synonym for hardware_concurrency(). +OIIO_DEPRECATED( + "unreliable, replace with hardware_concurrency() [DEPRECATED in 2.6.0.0]") +inline unsigned int +physical_concurrency() +{ + return hardware_concurrency(); +} +#endif + +/// Get the maximum number of open file handles allowed on this system. +OIIO_UTIL_API size_t +max_open_files(); + +/// Return a string containing a readable stack trace from the point where +/// it was called. Return an empty string if not supported on this platform +/// or this build of OpenImageIO. +OIIO_UTIL_API std::string +stacktrace(); + +/// Turn on automatic stacktrace dump to the named file if the program +/// crashes. Return true if this is properly set up, false if it is not +/// possible on this platform or with this build of OpenImageIO. The name may +/// be "stdout" or "stderr" to merely print the trace to stdout or stderr, +/// respectively. If the name is "", it will disable the auto-stacktrace +/// printing. +OIIO_UTIL_API bool +setup_crash_stacktrace(string_view filename); + +/// Try to figure out how many columns wide the terminal window is. May not +/// be correct on all systems, will default to 80 if it can't figure it out. +OIIO_UTIL_API int +terminal_columns(); + +/// Try to figure out how many rows tall the terminal window is. May not be +/// correct on all systems, will default to 24 if it can't figure it out. +OIIO_UTIL_API int +terminal_rows(); + + +/// Term object encapsulates information about terminal output for the sake +/// of constructing ANSI escape sequences. +class OIIO_UTIL_API Term { +public: + /// Default ctr: assume ANSI escape sequences are ok. + Term() noexcept {} + /// Construct from a FILE*: ANSI codes ok if the file describes a + /// live console, otherwise they will be suppressed. + Term(FILE* file); + /// Construct from a stream: ANSI codes ok if the file describes a + /// live console, otherwise they will be suppressed. + Term(const std::ostream& stream); + + /// ansi("appearance") returns the ANSI escape sequence for the named + /// command (if ANSI codes are ok, otherwise it will return the empty + /// string). Accepted commands include: "default", "bold", "underscore", + /// "blink", "reverse", "concealed", "black", "red", "green", "yellow", + /// "blue", "magenta", "cyan", "white", "black_bg", "red_bg", + /// "green_bg", "yellow_bg", "blue_bg", "magenta_bg", "cyan_bg", + /// "white_bg". Commands may be combined with "," for example: + /// "bold,green,white_bg". + std::string ansi(string_view command) const; + + /// ansi("appearance", "text") returns the text, with the formatting + /// command, then the text, then the formatting command to return to + /// default appearance. + std::string ansi(string_view command, string_view text) const + { + return std::string(ansi(command)) + std::string(text) + ansi("default"); + } + + /// Extended color control: take RGB values from 0-255 + std::string ansi_fgcolor(int r, int g, int b); + std::string ansi_bgcolor(int r, int g, int b); + + bool is_console() const noexcept { return m_is_console; } + +private: + bool m_is_console = true; // Default: assume ANSI escape sequences ok. +}; + + +} // namespace Sysutil + +OIIO_NAMESPACE_3_1_END diff --git a/third_party/tlRender-install-Release/include/OpenImageIO/texture.h b/third_party/tlRender-install-Release/include/OpenImageIO/texture.h new file mode 100644 index 00000000..22ac5116 --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenImageIO/texture.h @@ -0,0 +1,1769 @@ +// Copyright Contributors to the OpenImageIO project. +// SPDX-License-Identifier: Apache-2.0 +// https://github.com/AcademySoftwareFoundation/OpenImageIO + +// clang-format off + +/// \file +/// An API for accessing filtered texture lookups via a system that +/// automatically manages a cache of resident texture. + +#pragma once + +#include +#include +#include +#include + + +// Define symbols that let client applications determine if newly added +// features are supported. +#define OIIO_TEXTURESYSTEM_SUPPORTS_CLOSE 1 +#define OIIO_TEXTURESYSTEM_SUPPORTS_COLORSPACE 1 + +// Is the getattributetype() method present? (Added in 2.5) +#define OIIO_TEXTURESYSTEM_SUPPORTS_GETATTRIBUTETYPE 1 + +#define OIIO_TEXTURESYSTEM_SUPPORTS_STOCHASTIC 1 +#define OIIO_TEXTURESYSTEM_SUPPORTS_DECODE_BY_USTRINGHASH 1 + +// Does TextureSystem::create() return a shared pointer? +#define OIIO_TEXTURESYSTEM_CREATE_SHARED 1 + +// Revision of the TextureOpt class +#define OIIO_TEXTUREOPT_VERSION 2 +#define OIIO_TEXTUREOPTBATCH_VERSION 1 + +// Preprocessor utility: Concatenation +#define OIIO_CONCAT_HELPER(a,b) a ## b +#define OIIO_CONCAT_VERSION(a,b) OIIO_CONCAT_HELPER(a,b) + +#define TextureOpt_current \ + OIIO_CONCAT_VERSION(TextureOpt_v, OIIO_TEXTUREOPT_VERSION) +#define TextureOptBatch_current \ + OIIO_CONCAT_VERSION(TextureOptBatch_v, OIIO_TEXTUREOPTBATCH_VERSION) + + +OIIO_NAMESPACE_3_1_BEGIN + +namespace pvt { + + +// Used internally by TextureSystem. Unfortunately, this is the only +// clean place to store it. Sorry, users, this isn't really for you. +enum TexFormat { + TexFormatUnknown, + TexFormatTexture, + TexFormatTexture3d, + TexFormatShadow, + TexFormatCubeFaceShadow, + TexFormatVolumeShadow, + TexFormatLatLongEnv, + TexFormatCubeFaceEnv, + TexFormatLast +}; + +enum EnvLayout { + LayoutTexture = 0 /* ordinary texture - no special env wrap */, + LayoutLatLong, + LayoutCubeThreeByTwo, + LayoutCubeOneBySix, + EnvLayoutLast +}; + +} // namespace pvt + + + +namespace Tex { + +/// Wrap mode describes what happens when texture coordinates describe +/// a value outside the usual [0,1] range where a texture is defined. +enum class Wrap : uint8_t { + Default, ///< Use the default found in the file + Black, ///< Black outside [0..1] + Clamp, ///< Clamp to [0..1] + Periodic, ///< Periodic mod 1 + Mirror, ///< Mirror the image + PeriodicPow2, ///< Periodic, but only for powers of 2!!! + PeriodicSharedBorder, ///< Periodic with shared border (env) + Last ///< Mark the end -- don't use this! +}; + +/// Utility: Return the Wrap enum corresponding to a wrap name: +/// "default", "black", "clamp", "periodic", "mirror". +OIIO_API Wrap decode_wrapmode (const char *name); +OIIO_API Wrap decode_wrapmode (ustring name); +OIIO_API Wrap decode_wrapmode (ustringhash name); + +/// Utility: Parse a single wrap mode (e.g., "periodic") or a +/// comma-separated wrap modes string (e.g., "black,clamp") into +/// separate Wrap enums for s and t. +OIIO_API void parse_wrapmodes (const char *wrapmodes, + Wrap &swrapcode, Wrap &twrapcode); + + +/// Mip mode determines if/how we use mipmaps +/// +enum class MipMode : uint8_t { + Default, ///< Default high-quality lookup + NoMIP, ///< Just use highest-res image, no MIP mapping + OneLevel, ///< Use just one mipmap level + Trilinear, ///< Use two MIPmap levels (trilinear) + Aniso, ///< Use two MIPmap levels w/ anisotropic +}; + +/// Interp mode determines how we sample within a mipmap level +/// +enum class InterpMode : uint8_t { + Closest, ///< Force closest texel + Bilinear, ///< Force bilinear lookup within a mip level + Bicubic, ///< Force cubic lookup within a mip level + SmartBicubic ///< Bicubic when magnifying, else bilinear +}; + + +/// Fixed width for SIMD batching texture lookups. +/// May be changed for experimentation or future expansion. +#ifndef OIIO_TEXTURE_SIMD_BATCH_WIDTH +# define OIIO_TEXTURE_SIMD_BATCH_WIDTH 16 +#endif + +/// The SIMD width for batched texturing operations. This is fixed within +/// any release of OpenImageIO, but may change from release to release and +/// also may be overridden at build time. A typical batch size is 16. +inline constexpr int BatchWidth = OIIO_TEXTURE_SIMD_BATCH_WIDTH; +inline constexpr int BatchAlign = BatchWidth * sizeof(float); + +/// A type alias for a SIMD vector of floats with the batch width. +typedef simd::VecType::type FloatWide; + +/// A type alias for a SIMD vector of ints with the batch width. +typedef simd::VecType::type IntWide; + +/// `RunMask` is defined to be an integer large enough to hold at least +/// `BatchWidth` bits. The least significant bit corresponds to the first +/// (i.e., `[0]`) position of all batch arrays. For each position `i` in the +/// batch, the bit identified by `(1 << i)` controls whether that position +/// will be computed. +typedef uint64_t RunMask; + + +// The defined constant `RunMaskOn` contains the value with all bits +// `0..BatchWidth-1` set to 1. +#if OIIO_TEXTURE_SIMD_BATCH_WIDTH == 4 +inline constexpr RunMask RunMaskOn = 0xf; +#elif OIIO_TEXTURE_SIMD_BATCH_WIDTH == 8 +inline constexpr RunMask RunMaskOn = 0xff; +#elif OIIO_TEXTURE_SIMD_BATCH_WIDTH == 16 +inline constexpr RunMask RunMaskOn = 0xffff; +#elif OIIO_TEXTURE_SIMD_BATCH_WIDTH == 32 +inline constexpr RunMask RunMaskOn = 0xffffffff; +#elif OIIO_TEXTURE_SIMD_BATCH_WIDTH == 64 +inline constexpr RunMask RunMaskOn = 0xffffffffffffffffULL; +#else +# error "Not a valid OIIO_TEXTURE_SIMD_BATCH_WIDTH choice" +#endif + +} // namespace Tex + + +/// Data type for flags that indicate on a point-by-point basis whether +/// we want computations to be performed. +typedef unsigned char Runflag; + +/// Pre-defined values for Runflag's. +/// +enum RunFlagVal { RunFlagOff = 0, RunFlagOn = 255 }; + +class TextureOptions; // forward declaration + + + +/// TextureOpt is a structure that holds many options controlling +/// single-point texture lookups. Because each texture lookup API call +/// takes a reference to a TextureOpt, the call signatures remain +/// uncluttered rather than having an ever-growing list of parameters, most +/// of which will never vary from their defaults. +/// +/// Users should use `TextureOpt`, which will always be an alias to the latest +/// version of this class. But the "real name" is versioned to allow future +/// compatibility changes. +class OIIO_API TextureOpt_v2 { +public: + // Definitions for preserving back compatibility. + // These aliases will eventually be deprecated. + using Wrap = Tex::Wrap; + using MipMode = Tex::MipMode; + using InterpMode = Tex::InterpMode; + static constexpr Tex::Wrap WrapDefault = Tex::Wrap::Default; + static constexpr Tex::Wrap WrapBlack = Tex::Wrap::Black; + static constexpr Tex::Wrap WrapClamp = Tex::Wrap::Clamp; + static constexpr Tex::Wrap WrapPeriodic = Tex::Wrap::Periodic; + static constexpr Tex::Wrap WrapMirror = Tex::Wrap::Mirror; + static constexpr Tex::Wrap WrapPeriodicPow2 = Tex::Wrap::PeriodicPow2; + static constexpr Tex::Wrap WrapPeriodicSharedBorder = Tex::Wrap::PeriodicSharedBorder; + static constexpr Tex::Wrap WrapLast = Tex::Wrap::Last; + static constexpr Tex::MipMode MipModeDefault = MipMode::Default; + static constexpr Tex::MipMode MipModeNoMIP = MipMode::NoMIP; + static constexpr Tex::MipMode MipModeOneLevel = MipMode::OneLevel; + static constexpr Tex::MipMode MipModeTrilinear = MipMode::Trilinear; + static constexpr Tex::MipMode MipModeAniso = MipMode::Aniso; + static constexpr Tex::InterpMode InterpClosest = Tex::InterpMode::Closest; + static constexpr Tex::InterpMode InterpBilinear = Tex::InterpMode::Bilinear; + static constexpr Tex::InterpMode InterpBicubic = Tex::InterpMode::Bicubic; + static constexpr Tex::InterpMode InterpSmartBicubic = Tex::InterpMode::SmartBicubic; + + + /// Create a TextureOpt with all fields initialized to reasonable + /// defaults. + OIIO_HOSTDEVICE TextureOpt_v2() { } + + /// Convert a TextureOptions for one index into a TextureOpt. + /// + TextureOpt_v2(const TextureOptions& opt, int index); + + int firstchannel = 0; ///< First channel of the lookup + int subimage = 0; ///< Subimage or face ID + ustring subimagename; ///< Subimage name + Wrap swrap = Wrap::Default; ///< Wrap mode in the s direction + Wrap twrap = Wrap::Default; ///< Wrap mode in the t direction + Wrap rwrap = Wrap::Default; ///< Wrap mode in the r direction (volume) + MipMode mipmode = MipMode::Default; ///< Mip mode + InterpMode interpmode = InterpMode::SmartBicubic; ///< Interpolation mode + bool conservative_filter = true; ///< True == over-blur rather than alias + uint16_t anisotropic = 32; ///< Maximum anisotropic ratio + float sblur = 0, tblur = 0, rblur = 0; ///< Blur amount + float swidth = 1, twidth = 1; ///< Multiplier for derivatives + float rwidth = 1; ///< Multiplier for derivs in r direction + float fill = 0; ///< Fill value for missing channels + const float* missingcolor = nullptr; ///< Color for missing texture + float rnd = -1; ///< Stratified sample value + int colortransformid = 0; ///< Color space id of the texture + + /// Utility: Return the Wrap enum corresponding to a wrap name: + /// "default", "black", "clamp", "periodic", "mirror". + static Wrap decode_wrapmode(const char* name) + { + return (Wrap)Tex::decode_wrapmode(name); + } + static Wrap decode_wrapmode(ustring name) + { + return (Wrap)Tex::decode_wrapmode(name); + } + static Wrap decode_wrapmode(ustringhash name) + { + return (Wrap)Tex::decode_wrapmode(name); + } + + /// Utility: Parse a single wrap mode (e.g., "periodic") or a + /// comma-separated wrap modes string (e.g., "black,clamp") into + /// separate Wrap enums for s and t. + static void parse_wrapmodes(const char* wrapmodes, Wrap& swrapcode, + Wrap& twrapcode) + { + Tex::parse_wrapmodes(wrapmodes, swrapcode, twrapcode); + } + +private: + // Options set INTERNALLY by libtexture after the options are passed + // by the user. Users should not attempt to alter these! + int envlayout = 0; // Layout for environment wrap + friend class TextureSystemImpl; +}; + + +using TextureOpt = TextureOpt_v2; + + + +/// Texture options for a batch of Tex::BatchWidth points and run mask. +class OIIO_API TextureOptBatch_current { +public: + using simd_t = simd::VecType::type; + + /// Create a TextureOptBatch with all fields initialized to reasonable + /// defaults. + TextureOptBatch_current() { + *((simd_t*)&sblur) = simd_t::Zero(); + *((simd_t*)&tblur) = simd_t::Zero(); + *((simd_t*)&rblur) = simd_t::Zero(); + *((simd_t*)&swidth) = simd_t::One(); + *((simd_t*)&twidth) = simd_t::One(); + *((simd_t*)&rwidth) = simd_t::One(); + *((simd_t*)&rnd) = simd_t(-1.0f); + } + + // Options that may be different for each point we're texturing + alignas(Tex::BatchAlign) float sblur[Tex::BatchWidth]; ///< Blur amount + alignas(Tex::BatchAlign) float tblur[Tex::BatchWidth]; + alignas(Tex::BatchAlign) float rblur[Tex::BatchWidth]; + alignas(Tex::BatchAlign) float swidth[Tex::BatchWidth]; ///< Multiplier for derivatives + alignas(Tex::BatchAlign) float twidth[Tex::BatchWidth]; + alignas(Tex::BatchAlign) float rwidth[Tex::BatchWidth]; + // Note: rblur,rwidth only used for volumetric lookups + alignas(Tex::BatchAlign) float rnd[Tex::BatchWidth]; + + // Options that must be the same for all points we're texturing at once + int firstchannel = 0; ///< First channel of the lookup + int subimage = 0; ///< Subimage or face ID + ustring subimagename; ///< Subimage name +#if OIIO_TEXTUREOPTBATCH_VERSION == 1 + // Required at the moment by OSL + // N.B. We'd like the following types to be Tex::Wrap, MipMode, and + // InterpMode, and to adjust the size of anisotropic and interpmode, like + // we did for TextureOpt. But it requires extensive changes on the OSL + // side. We'll come back to that later, maybe that is for + // TextureOptBatch_v2. + int swrap = int(Tex::Wrap::Default); ///< Wrap mode in the s direction + int twrap = int(Tex::Wrap::Default); ///< Wrap mode in the t direction + int rwrap = int(Tex::Wrap::Default); ///< Wrap mode in the r direction (volumetric) + int mipmode = int(Tex::MipMode::Default); ///< Mip mode + int interpmode = int(Tex::InterpMode::SmartBicubic); ///< Interpolation mode + int anisotropic = 32; ///< Maximum anisotropic ratio + int conservative_filter = 1; ///< True: over-blur rather than alias +#else + // Ideal would be for v2: + Tex::Wrap swrap = Tex::Wrap::Default; ///< Wrap mode in the s direction + Tex::Wrap twrap = Tex::Wrap::Default; ///< Wrap mode in the t direction + Tex::Wrap rwrap = Tex::Wrap::Default; ///< Wrap mode in the r direction (volumetric) + Tex::MipMode mipmode = Tex::MipMode::Default; ///< Mip mode + Tex::InterpMode interpmode = Tex::InterpMode::SmartBicubic; ///< Interpolation mode + // FIXME: fix the following order and type for v3 to match TextureOpt + int anisotropic = 32; ///< Maximum anisotropic ratio + int conservative_filter = 1; ///< True: over-blur rather than alias +#endif + float fill = 0.0f; ///< Fill value for missing channels + const float *missingcolor = nullptr; ///< Color for missing texture + int colortransformid = 0; ///< Color space id of the texture + +private: + // Options set INTERNALLY by libtexture after the options are passed + // by the user. Users should not attempt to alter these! + int envlayout = 0; // Layout for environment wrap + + friend class TextureSystemImpl; +}; + + +using TextureOptBatch = TextureOptBatch_current; + +// clang-format on + + + +/// Define an API to an abstract class that that manages texture files, +/// caches of open file handles as well as tiles of texels so that truly +/// huge amounts of texture may be accessed by an application with low +/// memory footprint, and ways to perform antialiased texture, shadow +/// map, and environment map lookups. +class OIIO_API TextureSystem { +public: + /// @{ + /// @name Creating and destroying a texture system + /// + /// TextureSystem is an abstract API described as a pure virtual class. + /// The actual internal implementation is not exposed through the + /// external API of OpenImageIO. Because of this, you cannot construct + /// or destroy the concrete implementation, so two static methods of + /// TextureSystem are provided: + + /// Create a TextureSystem and return a shared pointer to it. + /// + /// @param shared + /// If `shared` is `true`, the pointer returned will be a shared + /// TextureSystem, (so that multiple parts of an application that + /// request a TextureSystem will all end up with the same one, and + /// the same underlying ImageCache). If `shared` is `false`, a + /// completely unique TextureCache will be created and returned. + /// + /// @param imagecache + /// If `shared` is `false` and `imagecache` is not empty, the + /// TextureSystem will use this as its underlying ImageCache. In + /// that case, it is the caller who is responsible for eventually + /// freeing the ImageCache after the TextureSystem is destroyed. If + /// `shared` is `false` and `imagecache` is empty, then a custom + /// ImageCache will be created, owned by the TextureSystem, and + /// automatically freed when the TS destroys. If `shared` is true, + /// this parameter will not be used, since the global shared + /// TextureSystem uses the global shared ImageCache. + /// + /// @returns + /// A shared pointer to a TextureSystem which will be destroyed only + /// when the last shared_ptr to it is destroyed. + /// + /// @see TextureSystem::destroy + static std::shared_ptr + create(bool shared = true, std::shared_ptr imagecache = {}); + + /// Release the shared_ptr to a TextureSystem, including freeing all + /// system resources that it holds if no one else is still using it. This + /// is not strictly necessary to call, simply destroying the shared_ptr + /// will do the same thing, but this call is for backward compatibility + /// and is helpful if you want to use the teardown_imagecache option. + /// + /// @param ts + /// Shared pointer to the TextureSystem to destroy. + /// + /// @param teardown_imagecache + /// For a shared TextureSystem, if the `teardown_imagecache` + /// parameter is `true`, it will try to truly destroy the shared + /// cache if nobody else is still holding a reference (otherwise, it + /// will leave it intact). This parameter has no effect if `ts` was + /// not the single globally shared TextureSystem. + static void destroy(std::shared_ptr& ts, + bool teardown_imagecache = false); + + /// @} + + + /// @{ + /// @name Setting options and limits for the texture system + /// + /// These are the list of attributes that can bet set or queried by + /// attribute/getattribute: + /// + /// All attributes ordinarily recognized by ImageCache are accepted and + /// passed through to the underlying ImageCache. These include: + /// - `int max_open_files` : + /// Maximum number of file handles held open. + /// - `float max_memory_MB` : + /// Maximum tile cache size, in MB. + /// - `string searchpath` : + /// Colon-separated search path for texture files. + /// - `string plugin_searchpath` : + /// Colon-separated search path for plugins. + /// - `int autotile` : + /// If >0, tile size to emulate for non-tiled images. + /// - `int autoscanline` : + /// If nonzero, autotile using full width tiles. + /// - `int automip` : + /// If nonzero, emulate mipmap on the fly. + /// - `int accept_untiled` : + /// If nonzero, accept untiled images. + /// - `int accept_unmipped` : + /// If nonzero, accept unmipped images. + /// - `int failure_retries` : + /// How many times to retry a read failure. + /// - `int deduplicate` : + /// If nonzero, detect duplicate textures (default=1). + /// - `int max_open_files_strict` : + /// If nonzero, work harder to make sure that we have + /// smaller possible overages to the max open files limit. + /// - `string substitute_image` : + /// If supplied, an image to substatute for all texture + /// references. + /// - `int max_errors_per_file` : + /// Limits how many errors to issue for each file. (default: + /// 100) + /// - `string colorspace` : + /// The working colorspace of the texture system. + /// - `string colorconfig` : + /// Name of the OCIO config to use (default: ""). + /// + /// Texture-specific settings: + /// - `matrix44 worldtocommon` / `matrix44 commontoworld` : + /// The 4x4 matrices that provide the spatial transformation + /// from "world" to a "common" coordinate system and back. + /// This is mainly used for shadow map lookups, in which the + /// shadow map itself encodes the world coordinate system, + /// but positions passed to `shadow()` are expressed in + /// "common" coordinates. You do not need to set + /// `commontoworld` and `worldtocommon` separately; just + /// setting either one will implicitly set the other, since + /// each is the inverse of the other. + /// - `int gray_to_rgb` : + /// If set to nonzero, texture lookups of single-channel + /// (grayscale) images will replicate the sole channel's + /// values into the next two channels, making it behave like + /// an RGB image that happens to have all three channels + /// with identical pixel values. (Channels beyond the third + /// will get the "fill" value.) The default value of zero + /// means that all missing channels will get the "fill" + /// color. + /// - `int max_tile_channels` : + /// The maximum number of color channels in a texture file + /// for which all channels will be loaded as a single cached + /// tile. Files with more than this number of color channels + /// will have only the requested subset loaded, in order to + /// save cache space (but at the possible wasted expense of + /// separate tiles that overlap their channel ranges). The + /// default is 5. + /// - `int max_mip_res` : + /// **NEW 2.1** Sets the maximum MIP-map resolution for + /// filtered texture lookups. The MIP levels used will be + /// clamped to those having fewer than this number of pixels + /// in each dimension. This can be helpful as a way to limit + /// disk I/O when doing fast preview renders (with the + /// tradeoff that you may see some texture more blurry than + /// they would ideally be). The default is `1 << 30`, a + /// value so large that no such clamping will be performed. + /// - `string latlong_up` : + /// The default "up" direction for latlong environment maps + /// (only applies if the map itself doesn't specify a format + /// or is in a format that explicitly requires a particular + /// orientation). The default is `"y"`. (Currently any + /// other value will result in *z* being "up.") + /// - `int flip_t` : + /// If nonzero, `t` coordinates will be flipped `1-t` for + /// all texture lookups. The default is 0. + /// - `int stochastic` : + /// Bit field determining how to use stochastic sampling for + /// MipModeStochasticAniso and/or MipModeStochasticTrilinear. + /// Bit 1 = sample MIP level, bit 2 = sample anisotropy + /// (default=0). + /// + /// - `string options` + /// This catch-all is simply a comma-separated list of + /// `name=value` settings of named options, which will be + /// parsed and individually set. + /// + /// ic->attribute ("options", "max_memory_MB=512.0,autotile=1"); + /// + /// Note that if an option takes a string value that must + /// itself contain a comma, it is permissible to enclose the + /// value in either single `\'` or double `"` quotes. + /// + /// **Read-only attributes** + /// + /// Additionally, there are some read-only attributes that can be + /// queried with `getattribute()` even though they cannot be set via + /// `attribute()`: + /// + /// + /// The following member functions of TextureSystem allow you to set + /// (and in some cases retrieve) options that control the overall + /// behavior of the texture system: + + /// Set a named attribute (i.e., a property or option) of the + /// TextureSystem. + /// + /// Example: + /// + /// TextureSystem *ts; + /// ... + /// int maxfiles = 50; + /// ts->attribute ("max_open_files", TypeDesc::INT, make_cspan(maxfiles)); + /// + /// const char *path = "/my/path"; + /// ts->attribute ("searchpath", TypeDesc::STRING, make_cspan(&path, 1)); + /// + /// // There are specialized versions for retrieving a single int, + /// // float, or string without needing types or pointers: + /// ts->attribute ("max_open_files", 50); + /// ts->attribute ("max_memory_MB", 4000.0f); + /// ts->attribute ("searchpath", "/my/path"); + /// + /// Note: When passing a string, you need to pass a pointer to the + /// `char*`, not a pointer to the first character. (Rationale: for an + /// `int` attribute, you pass the address of the `int`. So for a + /// string, which is a `char*`, you need to pass the address of the + /// string, i.e., a `char**`). + /// + /// @param name Name of the attribute to set. + /// @param type TypeDesc describing the type of the attribute. + /// @param value Pointer to the value data. + /// @returns `true` if the name and type were recognized and the + /// attribute was set, or `false` upon failure + /// (including it being an unrecognized attribute or not + /// of the correct type). + /// + /// @version 3.1 + template + bool attribute(string_view name, TypeDesc type, span value) + { + OIIO_DASSERT(BaseTypeFromC::value == type.basetype + && type.size() == value.size_bytes()); + return attribute(name, type, OIIO::as_bytes(value)); + } + + /// A version of `attribute()` that takes its value from a span of untyped + /// bytes. The total size of `value` must match the `type` (if not, an + /// assertion will be thrown for debug builds of OIIO, an error will be + /// printed for release builds). + /// + /// @version 3.1 + bool attribute(string_view name, TypeDesc type, cspan value); + + /// A version of `attribute()` where the `value` is only a pointer + /// specifying the beginning of the memory where the value should be + /// copied from. This is "unsafe" in the sense that there is no assurance + /// that it points to a sufficient amount of memory, so the span-based + /// versions of `attribute()` preferred. + bool attribute(string_view name, TypeDesc type, const void* value); + + /// Specialized `attribute()` for setting a single `int` value. + bool attribute(string_view name, int value) + { + return attribute(name, TypeInt, &value); + } + /// Specialized `attribute()` for setting a single `float` value. + bool attribute(string_view name, float value) + { + return attribute(name, TypeFloat, &value); + } + bool attribute(string_view name, double value) + { + float f = (float)value; + return attribute(name, TypeFloat, &f); + } + /// Specialized `attribute()` for setting a single string value. + bool attribute(string_view name, string_view value) + { + std::string valstr(value); + const char* s = valstr.c_str(); + return attribute(name, TypeDesc::STRING, &s); + } + + /// Get the named attribute of the texture system, store it in `*val`. + /// All of the attributes that may be set with the `attribute() call` + /// may also be queried with `getattribute()`. + /// + /// Examples: + /// + /// TextureSystem *ic; + /// ... + /// int maxfiles; + /// ts->getattribute ("max_open_files", TypeDesc::INT, &maxfiles); + /// + /// const char *path; + /// ts->getattribute ("searchpath", TypeDesc::STRING, &path); + /// + /// // There are specialized versions for retrieving a single int, + /// // float, or string without needing types or pointers: + /// int maxfiles; + /// ts->getattribute ("max_open_files", maxfiles); + /// const char *path; + /// ts->getattribute ("searchpath", &path); + /// + /// Note: When retrieving a string, you need to pass a pointer to the + /// `char*`, not a pointer to the first character. Also, the `char*` + /// will end up pointing to characters owned by the ImageCache; the + /// caller does not need to ever free the memory that contains the + /// characters. + /// + /// @param name Name of the attribute to retrieve. + /// @param type TypeDesc describing the type of the attribute. + /// @param value Pointer where the attribute value should be stored. + /// @returns `true` if the name and type were recognized and the + /// attribute was retrieved, or `false` upon failure + /// (including it being an unrecognized attribute or not + /// of the correct type). + template + bool getattribute(string_view name, TypeDesc type, span value) const + { + OIIO_DASSERT(BaseTypeFromC::value == type.basetype + && type.size() == value.size_bytes()); + return getattribute(name, type, OIIO::as_writable_bytes(value)); + } + + /// A version of `getattribute()` that stores the value in a span of + /// untyped bytes. The total size of `value` must match the `type` (if + /// not, an assertion will be thrown for debug OIIO builds, an error will + /// be printed for release builds). + /// + /// @version 3.1 + bool getattribute(string_view name, TypeDesc type, + span value) const; + + /// A version of `getattribute()` where the `value` is only a pointer + /// specifying the beginning of the memory where the value should be + /// copied. This is "unsafe" in the sense that there is no assurance that + /// it points to a sufficient amount of memory, so the span-based versions + /// of `getattribute()` preferred. + bool getattribute(string_view name, TypeDesc type, void* value) const; + + /// Specialized `attribute()` for retrieving a single `int` value. + bool getattribute(string_view name, int& value) const + { + return getattribute(name, TypeInt, &value); + } + /// Specialized `attribute()` for retrieving a single `float` value. + bool getattribute(string_view name, float& value) const + { + return getattribute(name, TypeFloat, &value); + } + bool getattribute(string_view name, double& value) const + { + float f; + bool ok = getattribute(name, TypeFloat, &f); + if (ok) + value = f; + return ok; + } + /// Specialized `attribute()` for retrieving a single `string` value + /// as a `char*`. + bool getattribute(string_view name, char** value) const + { + return getattribute(name, TypeString, value); + } + /// Specialized `attribute()` for retrieving a single `string` value + /// as a `std::string`. + bool getattribute(string_view name, std::string& value) const + { + const char* s; + bool ok = getattribute(name, TypeString, &s); + if (ok) + value = s; + return ok; + } + + /// If the named attribute is known, return its data type. If no such + /// attribute exists, return `TypeUnknown`. + /// + /// This was added in version 2.5. + TypeDesc getattributetype(string_view name) const; + + /// @} + + /// @{ + /// @name Opaque data for performance lookups + /// + /// The TextureSystem implementation needs to maintain certain + /// per-thread state, and some methods take an opaque `Perthread` + /// pointer to this record. There are three options for how to deal with + /// it: + /// + /// 1. Don't worry about it at all: don't use the methods that want + /// `Perthread` pointers, or always pass `nullptr` for any + /// `Perthread*1 arguments, and ImageCache will do + /// thread-specific-pointer retrieval as necessary (though at some + /// small cost). + /// + /// 2. If your app already stores per-thread information of its own, you + /// may call `get_perthread_info(nullptr)` to retrieve it for that + /// thread, and then pass it into the functions that allow it (thus + /// sparing them the need and expense of retrieving the + /// thread-specific pointer). However, it is crucial that this + /// pointer not be shared between multiple threads. In this case, the + /// ImageCache manages the storage, which will automatically be + /// released when the thread terminates. + /// + /// 3. If your app also wants to manage the storage of the `Perthread`, + /// it can explicitly create one with `create_perthread_info()`, pass + /// it around, and eventually be responsible for destroying it with + /// `destroy_perthread_info()`. When managing the storage, the app + /// may reuse the `Perthread` for another thread after the first is + /// terminated, but still may not use the same `Perthread` for two + /// threads running concurrently. + + /// Define an opaque data type that allows us to have a pointer to + /// certain per-thread information that the TextureSystem maintains. Any + /// given one of these should NEVER be shared between running threads. + class Perthread; + + /// Retrieve a Perthread, unique to the calling thread. This is a + /// thread-specific pointer that will always return the Perthread for a + /// thread, which will also be automatically destroyed when the thread + /// terminates. + /// + /// Applications that want to manage their own Perthread pointers (with + /// `create_thread_info` and `destroy_thread_info`) should still call + /// this, but passing in their managed pointer. If the passed-in + /// thread_info is not nullptr, it won't create a new one or retrieve a + /// TSP, but it will do other necessary housekeeping on the Perthread + /// information. + Perthread* get_perthread_info(Perthread* thread_info = nullptr); + + /// Create a new Perthread. It is the caller's responsibility to + /// eventually destroy it using `destroy_thread_info()`. + Perthread* create_thread_info(); + + /// Destroy a Perthread that was allocated by `create_thread_info()`. + void destroy_thread_info(Perthread* threadinfo); + + /// Define an opaque data type that allows us to have a handle to a + /// texture (already having its name resolved) but without exposing + /// any internals. + class TextureHandle; + + /// Retrieve an opaque handle for fast texture lookups. The filename is + /// presumed to be UTF-8 encoded. The `options`, if not null, may be used + /// to create a separate handle for certain texture option choices + /// (currently: the colorspace). The opaque pointer `thread_info` is + /// thread-specific information returned by `get_perthread_info()`. Return + /// nullptr if something has gone horribly wrong. + TextureHandle* get_texture_handle(ustring filename, + Perthread* thread_info = nullptr, + const TextureOpt* options = nullptr); + /// Get a TextureHandle using a UTF-16 encoded wstring filename. + TextureHandle* get_texture_handle(const std::wstring& filename, + Perthread* thread_info = nullptr, + const TextureOpt* options = nullptr) + { + return get_texture_handle(ustring(Strutil::utf16_to_utf8(filename)), + thread_info, options); + } + + /// Return true if the texture handle (previously returned by + /// `get_image_handle()`) is a valid texture that can be subsequently + /// read. + bool good(TextureHandle* texture_handle); + + /// Given a handle, return the UTF-8 encoded filename for that texture. + /// + /// This method was added in OpenImageIO 2.3. + ustring filename_from_handle(TextureHandle* handle); + + /// Retrieve an id for a color transformation by name. This ID can be used + /// as the value for TextureOpt::colortransformid. The returned value will + /// be -1 if either color space is unknown, and 0 for a null + /// transformation. + int get_colortransform_id(ustring fromspace, ustring tospace) const; + int get_colortransform_id(ustringhash fromspace, ustringhash tospace) const; + /// @} + + /// @{ + /// @name Texture lookups + /// + + /// Perform a filtered 2D texture lookup on a position centered at 2D + /// coordinates (`s`, `t`) from the texture identified by `filename`, + /// and using relevant texture `options`. The `nchannels` parameter + /// determines the number of channels to retrieve (e.g., 1 for a single + /// value, 3 for an RGB triple, etc.). The filtered results will be + /// stored in `result[0..nchannels-1]`. + /// + /// We assume that this lookup will be part of an image that has pixel + /// coordinates `x` and `y`. By knowing how `s` and `t` change from + /// pixel to pixel in the final image, we can properly *filter* or + /// antialias the texture lookups. This information is given via + /// derivatives `dsdx` and `dtdx` that define the change in `s` and `t` + /// per unit of `x`, and `dsdy` and `dtdy` that define the change in `s` + /// and `t` per unit of `y`. If it is impossible to know the + /// derivatives, you may pass 0 for them, but in that case you will not + /// receive an antialiased texture lookup. + /// + /// @param filename + /// The name of the texture, as a UTF-8 encoded ustring. + /// @param options + /// Fields within `options` that are honored for 2D texture lookups + /// include the following: + /// - `int firstchannel` : + /// The index of the first channel to look up from the texture. + /// - `int subimage / ustring subimagename` : + /// The subimage or face within the file, specified by + /// either by name (if non-empty) or index. This will be + /// ignored if the file does not have multiple subimages or + /// separate per-face textures. + /// - `Wrap swrap, twrap` : + /// Specify the *wrap mode* for each direction, one of: + /// `WrapBlack`, `WrapClamp`, `WrapPeriodic`, `WrapMirror`, + /// or `WrapDefault`. + /// - `float swidth, twidth` : + /// For each direction, gives a multiplier for the derivatives. + /// - `float sblur, tblur` : + /// For each direction, specifies an additional amount of + /// pre-blur to apply to the texture (*after* derivatives + /// are taken into account), expressed as a portion of the + /// width of the texture. + /// - `float fill` : + /// Specifies the value that will be used for any color + /// channels that are requested but not found in the file. + /// For example, if you perform a 4-channel lookup on a + /// 3-channel texture, the last channel will get the fill + /// value. (Note: this behavior is affected by the + /// `"gray_to_rgb"` TextureSystem attribute. + /// - `const float *missingcolor` : + /// If not `nullptr`, specifies the color that will be + /// returned for missing or broken textures (rather than + /// being an error). + /// @param s/t + /// The 2D texture coordinates. + /// @param dsdx,dtdx,dsdy,dtdy + /// The differentials of s and t relative to canonical + /// directions x and y. The choice of x and y are not + /// important to the implementation; it can be any imposed + /// 2D coordinates, such as pixels in screen space, adjacent + /// samples in parameter space on a surface, etc. The st + /// derivatives determine the size and shape of the + /// ellipsoid over which the texture lookup is filtered. + /// @param nchannels + /// The number of channels of data to retrieve into `result` + /// (e.g., 1 for a single value, 3 for an RGB triple, etc.). + /// @param result[] + /// The result of the filtered texture lookup will be placed + /// into `result[0..nchannels-1]`. + /// @param dresultds/dresultdt + /// If non-null, these designate storage locations for the + /// derivatives of result, i.e., the rate of change per unit + /// s and t, respectively, of the filtered texture. If + /// supplied, they must allow for `nchannels` of storage. + /// @returns + /// `true` upon success, or `false` if the file was not + /// found or could not be opened by any available ImageIO + /// plugin. + /// + bool texture(ustring filename, TextureOpt& options, float s, float t, + float dsdx, float dtdx, float dsdy, float dtdy, int nchannels, + float* result, float* dresultds = nullptr, + float* dresultdt = nullptr); + + /// Slightly faster version of texture() lookup if the app already has a + /// texture handle and per-thread info. + bool texture(TextureHandle* texture_handle, Perthread* thread_info, + TextureOpt& options, float s, float t, float dsdx, float dtdx, + float dsdy, float dtdy, int nchannels, float* result, + float* dresultds = nullptr, float* dresultdt = nullptr); + + + /// Perform a filtered 3D volumetric texture lookup on a position + /// centered at 3D position `P` (with given differentials) from the + /// texture identified by `filename`, and using relevant texture + /// `options`. The filtered results will be stored in + /// `result[0..nchannels-1]`. + /// + /// The `P` coordinate and `dPdx`, `dPdy`, and `dPdz` derivatives are + /// assumed to be in some kind of common global coordinate system + /// (usually "world" space) and will be automatically transformed into + /// volume local coordinates, if such a transformation is specified in + /// the volume file itself. + /// + /// @param filename + /// The name of the texture, as a UTF-8 encoded ustring. + /// @param options + /// Fields within `options` that are honored for 3D texture lookups + /// include the following: + /// - `int firstchannel` : + /// The index of the first channel to look up from the texture. + /// - `int subimage / ustring subimagename` : + /// The subimage or field within the volume, specified by + /// either by name (if non-empty) or index. This will be + /// ignored if the file does not have multiple subimages or + /// separate per-face textures. + /// - `Wrap swrap, twrap, rwrap` : + /// Specify the *wrap mode* for each direction, one of: + /// `WrapBlack`, `WrapClamp`, `WrapPeriodic`, `WrapMirror`, + /// or `WrapDefault`. + /// - `float swidth, twidth, rwidth` : + /// For each direction, gives a multiplier for the derivatives. + /// - `float sblur, tblur, rblur` : + /// For each direction, specifies an additional amount of + /// pre-blur to apply to the texture (*after* derivatives + /// are taken into account), expressed as a portion of the + /// width of the texture. + /// - `float fill` : + /// Specifies the value that will be used for any color + /// channels that are requested but not found in the file. + /// For example, if you perform a 4-channel lookup on a + /// 3-channel texture, the last channel will get the fill + /// value. (Note: this behavior is affected by the + /// `"gray_to_rgb"` TextureSystem attribute. + /// - `const float *missingcolor` : + /// If not `nullptr`, specifies the color that will be + /// returned for missing or broken textures (rather than + /// being an error). + /// - `float time` : + /// A time value to use if the volume texture specifies a + /// time-varying local transformation (default: 0). + /// @param P + /// The 2D texture coordinates. + /// @param dPdx/dPdy/dPdz + /// The differentials of `P`. We assume that this lookup + /// will be part of an image that has pixel coordinates `x` + /// and `y` and depth `z`. By knowing how `P` changes from + /// pixel to pixel in the final image, and as we step in *z* + /// depth, we can properly *filter* or antialias the texture + /// lookups. This information is given via derivatives + /// `dPdx`, `dPdy`, and `dPdz` that define the changes in + /// `P` per unit of `x`, `y`, and `z`, respectively. If it + /// is impossible to know the derivatives, you may pass 0 + /// for them, but in that case you will not receive an + /// antialiased texture lookup. + /// @param nchannels + /// The number of channels of data to retrieve into `result` + /// (e.g., 1 for a single value, 3 for an RGB triple, etc.). + /// @param result[] + /// The result of the filtered texture lookup will be placed + /// into `result[0..nchannels-1]`. + /// @param dresultds/dresultdt/dresultdr + /// If non-null, these designate storage locations for the + /// derivatives of result, i.e., the rate of change per unit + /// s, t, and r, respectively, of the filtered texture. If + /// supplied, they must allow for `nchannels` of storage. + /// @returns + /// `true` upon success, or `false` if the file was not + /// found or could not be opened by any available ImageIO + /// plugin. + /// + bool texture3d(ustring filename, TextureOpt& options, V3fParam P, + V3fParam dPdx, V3fParam dPdy, V3fParam dPdz, int nchannels, + float* result, float* dresultds = nullptr, + float* dresultdt = nullptr, float* dresultdr = nullptr); + + /// Slightly faster version of texture3d() lookup if the app already has + /// a texture handle and per-thread info. + bool texture3d(TextureHandle* texture_handle, Perthread* thread_info, + TextureOpt& options, V3fParam P, V3fParam dPdx, + V3fParam dPdy, V3fParam dPdz, int nchannels, float* result, + float* dresultds = nullptr, float* dresultdt = nullptr, + float* dresultdr = nullptr); + + + /// Perform a filtered directional environment map lookup in the + /// direction of vector `R`, from the texture identified by `filename`, + /// and using relevant texture `options`. The filtered results will be + /// stored in `result[]`. + /// + /// @param filename + /// The name of the texture, as a UTF-8 encode ustring. + /// @param options + /// Fields within `options` that are honored for environment lookups + /// include the following: + /// - `int firstchannel` : + /// The index of the first channel to look up from the texture. + /// - `int subimage / ustring subimagename` : + /// The subimage or face within the file, specified by + /// either by name (if non-empty) or index. This will be + /// ignored if the file does not have multiple subimages or + /// separate per-face textures. + /// - `float swidth, twidth` : + /// For each direction, gives a multiplier for the + /// derivatives. + /// - `float sblur, tblur` : + /// For each direction, specifies an additional amount of + /// pre-blur to apply to the texture (*after* derivatives + /// are taken into account), expressed as a portion of the + /// width of the texture. + /// - `float fill` : + /// Specifies the value that will be used for any color + /// channels that are requested but not found in the file. + /// For example, if you perform a 4-channel lookup on a + /// 3-channel texture, the last channel will get the fill + /// value. (Note: this behavior is affected by the + /// `"gray_to_rgb"` TextureSystem attribute. + /// - `const float *missingcolor` : + /// If not `nullptr`, specifies the color that will be + /// returned for missing or broken textures (rather than + /// being an error). + /// @param R + /// The direction vector to look up. + /// @param dRdx/dRdy + /// The differentials of `R` with respect to image + /// coordinates x and y. + /// @param nchannels + /// The number of channels of data to retrieve into `result` + /// (e.g., 1 for a single value, 3 for an RGB triple, etc.). + /// @param result[] + /// The result of the filtered texture lookup will be placed + /// into `result[0..nchannels-1]`. + /// @param dresultds/dresultdt + /// If non-null, these designate storage locations for the + /// derivatives of result, i.e., the rate of change per unit + /// s and t, respectively, of the filtered texture. If + /// supplied, they must allow for `nchannels` of storage. + /// @returns + /// `true` upon success, or `false` if the file was not + /// found or could not be opened by any available ImageIO + /// plugin. + bool environment(ustring filename, TextureOpt& options, V3fParam R, + V3fParam dRdx, V3fParam dRdy, int nchannels, float* result, + float* dresultds = nullptr, float* dresultdt = nullptr); + + /// Slightly faster version of environment() if the app already has a + /// texture handle and per-thread info. + bool environment(TextureHandle* texture_handle, Perthread* thread_info, + TextureOpt& options, V3fParam R, V3fParam dRdx, + V3fParam dRdy, int nchannels, float* result, + float* dresultds = nullptr, float* dresultdt = nullptr); + + /// @} + + /// @{ + /// @name Batched texture lookups + /// + + /// Perform filtered 2D texture lookups on a batch of positions from the + /// same texture, all at once. The parameters `s`, `t`, `dsdx`, `dtdx`, + /// and `dsdy`, `dtdy` are each a pointer to `[BatchWidth]` values. The + /// `mask` determines which of those array elements to actually compute. + /// + /// The float* results act like `float[nchannels][BatchWidth]`, so that + /// effectively `result[0..BatchWidth-1]` are the "red" result for each + /// lane, `result[BatchWidth..2*BatchWidth-1]` are the "green" results, + /// etc. The `dresultds` and `dresultdt` should either both be provided, + /// or else both be nullptr (meaning no derivative results are + /// required). + /// + /// @param filename + /// The name of the texture, as a UTF-8 encode ustring. + /// @param options + /// A TextureOptBatch containing texture lookup options. + /// This is conceptually the same as a TextureOpt, but the + /// following fields are arrays of `[BatchWidth]` elements: + /// sblur, tblur, swidth, twidth. The other fields are, as + /// with TextureOpt, ordinary scalar values. + /// @param mask + /// A bit-field designating which "lanes" should be + /// computed: if `mask & (1<`). That is, each one points to all the *x* + /// values for the batch, immediately followed by all the *y* values, + /// followed by the *z* values. The `mask` determines which of those + /// array elements to actually compute. + /// + /// The various results arrays are also arranged as arrays that behave + /// as if they were declared `float result[channels][BatchWidth]`, where + /// all the batch values for channel 0 are adjacent, followed by all the + /// batch values for channel 1, etc. + /// + /// @param filename + /// The name of the texture, as a UTF-8 encode ustring. + /// @param options + /// A TextureOptBatch containing texture lookup options. + /// This is conceptually the same as a TextureOpt, but the + /// following fields are arrays of `[BatchWidth]` elements: + /// sblur, tblur, swidth, twidth. The other fields are, as + /// with TextureOpt, ordinary scalar values. + /// @param mask + /// A bit-field designating which "lanes" should be + /// computed: if `mask & (1<`). That is, each one points to all the *x* + /// values for the batch, immediately followed by all the *y* values, + /// followed by the *z* values. The `mask` determines which of those + /// array elements to actually compute. + /// + /// The various results arrays are also arranged as arrays that behave + /// as if they were declared `float result[channels][BatchWidth]`, where + /// all the batch values for channel 0 are adjacent, followed by all the + /// batch values for channel 1, etc. + /// + /// @param filename + /// The name of the texture, as a UTF-8 encode ustring. + /// @param options + /// A TextureOptBatch containing texture lookup options. + /// This is conceptually the same as a TextureOpt, but the + /// following fields are arrays of `[BatchWidth]` elements: + /// sblur, tblur, swidth, twidth. The other fields are, as + /// with TextureOpt, ordinary scalar values. + /// @param mask + /// A bit-field designating which "lanes" should be + /// computed: if `mask & (1<& result); + /// A more efficient variety of `get_texels()` for cases where you can + /// use a `TextureHandle*` to specify the image and optionally have a + /// `Perthread*` for the calling thread. + /// + /// Added in OIIO 3.1, this is the "safe" preferred alternative to + /// the version of read_scanlines that takes raw pointers. + bool get_texels(TextureHandle* texture_handle, Perthread* thread_info, + TextureOpt& options, int miplevel, const ROI& roi, + TypeDesc format, const image_span& result); + + /// For a texture specified by name, retrieve the rectangle of raw + /// unfiltered texels from the subimage specified in `options` and at + /// the designated `miplevel`, storing the pixel values beginning at the + /// address specified by `result`. The pixel values will be converted + /// to the data type specified by `format`. The rectangular region to be + /// retrieved includes `begin` but does not include `end` (much like STL + /// begin/end usage). Requested pixels that are not part of the valid + /// pixel data region of the image file will be filled with zero values. + /// Channels requested but not present in the file will get the + /// `options.fill` value. + /// + /// These pointer-based versions are considered "soft-deprecated" in + /// OpenImageIO 3.1, will be marked/warned as deprecated in 3.2, and will + /// be removed in 4.0. + /// + /// @param filename + /// The name of the texture, as a UTF-8 encode ustring. + /// @param options + /// A TextureOpt describing access options, including wrap + /// modes, fill value, and subimage, that will be used when + /// retrieving pixels. + /// @param miplevel + /// The MIP level to retrieve pixels from (0 is the highest + /// resolution level). + /// @param xbegin/xend/ybegin/yend/zbegin/zend + /// The range of pixels to retrieve. The pixels retrieved + /// include the begin value but not the end value (much like + /// STL begin/end usage). + /// @param chbegin/chend + /// Channel range to retrieve. To retrieve all channels, use + /// `chbegin = 0`, `chend = nchannels`. + /// @param format + /// TypeDesc describing the data type of the values you want + /// to retrieve into `result`. The pixel values will be + /// converted to this type regardless of how they were + /// stored in the file or in the cache. + /// @param result + /// Pointer to the memory where the pixel values should be + /// stored. It is up to the caller to ensure that `result` + /// points to an area of memory big enough to accommodate + /// the requested rectangle (taking into consideration its + /// dimensions, number of channels, and data format). + /// + /// @returns + /// `true` for success, `false` for failure. + bool get_texels(ustring filename, TextureOpt& options, int miplevel, + int xbegin, int xend, int ybegin, int yend, int zbegin, + int zend, int chbegin, int chend, TypeDesc format, + void* result); + /// A more efficient variety of `get_texels()` for cases where you can + /// use a `TextureHandle*` to specify the image and optionally have a + /// `Perthread*` for the calling thread. + bool get_texels(TextureHandle* texture_handle, Perthread* thread_info, + TextureOpt& options, int miplevel, int xbegin, int xend, + int ybegin, int yend, int zbegin, int zend, int chbegin, + int chend, TypeDesc format, void* result); + + /// @} + + /// @{ + /// @name Methods for UDIM patterns + /// + + /// Is the UTF-8 encoded filename a UDIM pattern? + /// + /// This method was added in OpenImageIO 2.3. + bool is_udim(ustring filename); + + /// Does the handle refer to a file that's a UDIM pattern? + /// + /// This method was added in OpenImageIO 2.3. + bool is_udim(TextureHandle* udimfile); + + /// For a UDIM filename pattern (UTF-8 encoded) and texture coordinates, + /// return the TextureHandle pointer for the concrete tile file it refers + /// to, or nullptr if there is no corresponding tile (udim sets are + /// allowed to be sparse). + /// + /// This method was added in OpenImageIO 2.3. + TextureHandle* resolve_udim(ustring udimpattern, float s, float t); + + /// A more efficient variety of `resolve_udim()` for cases where you + /// have the `TextureHandle*` that corresponds to the "virtual" UDIM + /// file and optionally have a `Perthread*` for the calling thread. + /// + /// This method was added in OpenImageIO 2.3. + TextureHandle* resolve_udim(TextureHandle* udimfile, Perthread* thread_info, + float s, float t); + + /// Produce a full inventory of the set of concrete files comprising the + /// UDIM set specified by UTF-8 encoded `udimpattern`. The apparent + /// number of texture atlas tiles in the u and v directions will be + /// written to `nutiles` and `nvtiles`, respectively. The vector + /// `filenames` will be sized to `ntiles * nvtiles` and filled with the + /// the names of the concrete files comprising the atlas, with an empty + /// ustring corresponding to any unpopulated tiles (the UDIM set is + /// allowed to be sparse). The filename list is indexed as + /// `utile + vtile * nvtiles`. + /// + /// This method was added in OpenImageIO 2.3. + void inventory_udim(ustring udimpattern, std::vector& filenames, + int& nutiles, int& nvtiles); + + /// A more efficient variety of `inventory_udim()` for cases where you + /// have the `TextureHandle*` that corresponds to the "virtual" UDIM + /// file and optionally have a `Perthread*` for the calling thread. + /// + /// This method was added in OpenImageIO 2.3. + void inventory_udim(TextureHandle* udimfile, Perthread* thread_info, + std::vector& filenames, int& nutiles, + int& nvtiles); + /// @} + + /// @{ + /// @name Controlling the cache + /// + + /// Invalidate any cached information about the named file (UTF-8 + /// encoded), including loaded texture tiles from that texture, and close + /// any open file handle associated with the file. This calls + /// `ImageCache::invalidate(filename,force)` on the underlying ImageCache. + void invalidate(ustring filename, bool force = true); + + /// Invalidate all cached data for all textures. This calls + /// `ImageCache::invalidate_all(force)` on the underlying ImageCache. + void invalidate_all(bool force = false); + + /// Close any open file handles associated with a UTF-8 encoded filename, + /// but do not invalidate any image spec information or pixels associated + /// with the files. A client might do this in order to release OS file + /// handle resources, or to make it safe for other processes to modify + /// textures on disk. This calls `ImageCache::close(force)` on the + /// underlying ImageCache. + void close(ustring filename); + + /// `close()` all files known to the cache. + void close_all(); + + /// @} + + /// @{ + /// @name Errors and statistics + + /// Is there a pending error message waiting to be retrieved? + bool has_error() const; + + /// Return the text of all pending error messages issued against this + /// TextureSystem, and clear the pending error message unless `clear` is + /// false. If no error message is pending, it will return an empty + /// string. + std::string geterror(bool clear = true) const; + + /// Returns a big string containing useful statistics about the + /// TextureSystem operations, suitable for saving to a file or + /// outputting to the terminal. The `level` indicates the amount of + /// detail in the statistics, with higher numbers (up to a maximum of 5) + /// yielding more and more esoteric information. If `icstats` is true, + /// the returned string will also contain all the statistics of the + /// underlying ImageCache, but if false will only contain + /// texture-specific statistics. + std::string getstats(int level = 1, bool icstats = true) const; + + /// Reset most statistics to be as they were with a fresh TextureSystem. + /// Caveat emptor: this does not flush the cache itself, so the resulting + /// statistics from the next set of texture requests will not match the + /// number of tile reads, etc., that would have resulted from a new + /// TextureSystem. + void reset_stats(); + + /// @} + + /// Return an opaque, non-owning pointer to the underlying ImageCache + /// (if there is one). + std::shared_ptr imagecache() const; + + // For testing -- do not use + static void unit_test_hash(); + + TextureSystem(std::shared_ptr imagecache); + ~TextureSystem(); + +private: + // PIMPL idiom + using Impl = TextureSystemImpl; + // class Impl; + static void impl_deleter(Impl*); + std::unique_ptr m_impl; + + // User code should never directly construct or destruct a TextureSystem. + // Always use TextureSystem::create() and TextureSystem::destroy(). +}; + +OIIO_NAMESPACE_3_1_END diff --git a/third_party/tlRender-install-Release/include/OpenImageIO/thread.h b/third_party/tlRender-install-Release/include/OpenImageIO/thread.h new file mode 100644 index 00000000..638a664b --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenImageIO/thread.h @@ -0,0 +1,741 @@ +// Copyright Contributors to the OpenImageIO project. +// SPDX-License-Identifier: Apache-2.0 +// https://github.com/AcademySoftwareFoundation/OpenImageIO + +// clang-format off + +///////////////////////////////////////////////////////////////////////// +/// @file thread.h +/// +/// @brief Wrappers and utilities for multithreading. +///////////////////////////////////////////////////////////////////////// + + +#pragma once + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include + + + +// OIIO_THREAD_ALLOW_DCLP, if set to 0, prevents us from using a dodgy +// "double checked lock pattern" (DCLP). We are very careful to construct +// it safely and correctly, and these uses improve thread performance for +// us. But it confuses Thread Sanitizer, so this switch allows you to turn +// it off. Also set to 0 if you don't believe that we are correct in +// allowing this construct on all platforms. +#ifndef OIIO_THREAD_ALLOW_DCLP +# define OIIO_THREAD_ALLOW_DCLP 1 +#endif + + + +// Some helpful links: +// +// Descriptions of the "new" gcc atomic intrinsics: +// https://gcc.gnu.org/onlinedocs/gcc/_005f_005fatomic-Builtins.html +// Old gcc atomic intrinsics: +// https://gcc.gnu.org/onlinedocs/gcc-4.4.2/gcc/Atomic-Builtins.html +// C++11 and beyond std::atomic: +// http://en.cppreference.com/w/cpp/atomic + + +OIIO_NAMESPACE_3_1_BEGIN + +/// Null mutex that can be substituted for a real one to test how much +/// overhead is associated with a particular mutex. +class null_mutex { +public: + null_mutex() noexcept {} + ~null_mutex() noexcept {} + void lock() noexcept {} + void unlock() noexcept {} + void lock_shared() noexcept {} + void unlock_shared() noexcept {} + bool try_lock() noexcept { return true; } +}; + +/// Null lock that can be substituted for a real one to test how much +/// overhead is associated with a particular lock. +template class null_lock { +public: + null_lock(T& /*m*/) noexcept {} +}; + + + +using std::mutex; +using std::recursive_mutex; +using std::thread; +using lock_guard = std::lock_guard; +using recursive_lock_guard = std::lock_guard; +using recursive_timed_lock_guard = std::lock_guard; + + + +/// Yield the processor for the rest of the timeslice. +/// DEPRECATED(2.4): Use std::this_thread::yield() instead. +OIIO_DEPRECATED("Use std::this_thread::yield() [2.4]") +inline void +yield() noexcept +{ + std::this_thread::yield(); +} + + + +// Slight pause +inline void +pause(int delay) noexcept +{ +#if defined(__GNUC__) && (defined(__x86_64__) || defined(__i386__)) + for (int i = 0; i < delay; ++i) + __asm__ __volatile__("pause;"); + +#elif defined(__GNUC__) && (defined(__arm__) || defined(__s390__)) + for (int i = 0; i < delay; ++i) + __asm__ __volatile__("NOP;"); + +#elif defined(_MSC_VER) + for (int i = 0; i < delay; ++i) { + // A reimplementation of winnt.h YieldProcessor, + // to avoid including windows headers. + #if defined(_M_AMD64) + _mm_pause(); + #elif defined(_M_ARM64) || defined(_M_HYBRID_X86_ARM64) + __dmb(_ARM64_BARRIER_ISHST); + __yield(); + #elif defined(_M_ARM) + __dmb(_ARM_BARRIER_ISHST); + __yield(); + #else + _asm pause + #endif + } + +#else + // No pause on this platform, just punt + for (int i = 0; i < delay; ++i) + ; +#endif +} + + + +// Helper class to deliver ever longer pauses until we yield our timeslice. +class atomic_backoff { +public: + atomic_backoff(int pausemax = 16) noexcept + : m_count(1) + , m_pausemax(pausemax) + { + } + + void operator()() noexcept + { + if (m_count <= m_pausemax) { + pause(m_count); + m_count *= 2; + } else { + std::this_thread::yield(); + } + } + +private: + int m_count; + int m_pausemax; +}; + + + + +/// A spin_mutex is semantically equivalent to a regular mutex, except +/// for the following: +/// - A spin_mutex is just 1 byte, whereas a regular mutex is quite +/// large (44 bytes for pthread). +/// - A spin_mutex is extremely fast to lock and unlock, whereas a regular +/// mutex is surprisingly expensive just to acquire a lock. +/// - A spin_mutex takes CPU while it waits, so this can be very +/// wasteful compared to a regular mutex that blocks (gives up its +/// CPU slices until it acquires the lock). +/// +/// The bottom line is that mutex is the usual choice, but in cases where +/// you need to acquire locks very frequently, but only need to hold the +/// lock for a very short period of time, you may save runtime by using +/// a spin_mutex, even though it's non-blocking. +/// +/// N.B. A spin_mutex is only the size of a bool. To avoid "false +/// sharing", be careful not to put two spin_mutex objects on the same +/// cache line (within 128 bytes of each other), or the two mutexes may +/// effectively (and wastefully) lock against each other. +/// +class spin_mutex { +public: + spin_mutex(void) noexcept {} + ~spin_mutex(void) noexcept {} + + /// Copy constructor -- initialize to unlocked. + /// + spin_mutex(const spin_mutex&) noexcept {} + + /// Assignment does not do anything, since lockedness should not + /// transfer. + const spin_mutex& operator=(const spin_mutex&) noexcept { return *this; } + + /// Acquire the lock, spin until we have it. + /// + void lock() noexcept + { + // To avoid spinning too tightly, we use the atomic_backoff to + // provide increasingly longer pauses, and if the lock is under + // lots of contention, eventually yield the timeslice. + atomic_backoff backoff; + + // Try to get ownership of the lock. Though experimentation, we + // found that OIIO_UNLIKELY makes this just a bit faster on gcc + // x86/x86_64 systems. + while (!OIIO_UNLIKELY(try_lock())) { +#if OIIO_THREAD_ALLOW_DCLP + // The full try_lock() involves a test_and_set, which + // writes memory, and that will lock the bus. But a normal + // read of m_locked will let us spin until the value + // changes, without locking the bus. So it's faster to + // check in this manner until the mutex appears to be free. + // HOWEVER... Thread Sanitizer things this is an instance of + // an unsafe "double checked lock pattern" (DCLP) and flags it + // as an error. I think it's a false negative, because the + // outer loop is still an atomic check, the inner non-atomic + // loop only serves to delay, and can't lead to a true data + // race. But we provide this build-time switch to, at least, + // give a way to use tsan for other checks. + do { + backoff(); + } while (*(volatile bool*)&m_locked); +#else + backoff(); +#endif + } + } + + /// Release the lock that we hold. + /// + void unlock() noexcept + { + // Fastest way to do it is with a clear with "release" semantics + m_locked.clear(std::memory_order_release); + } + + /// Try to acquire the lock. Return true if we have it, false if + /// somebody else is holding the lock. + bool try_lock() noexcept + { + return !m_locked.test_and_set(std::memory_order_acquire); + } + + /// Helper class: scoped lock for a spin_mutex -- grabs the lock upon + /// construction, releases the lock when it exits scope. + class lock_guard { + public: + lock_guard(spin_mutex& fm) noexcept + : m_fm(fm) + { + m_fm.lock(); + } + ~lock_guard() noexcept { m_fm.unlock(); } + + private: + lock_guard() = delete; + lock_guard(const lock_guard& other) = delete; + lock_guard& operator=(const lock_guard& other) = delete; + spin_mutex& m_fm; + }; + +private: + std::atomic_flag m_locked = ATOMIC_FLAG_INIT; // initialize to unlocked +}; + + +using spin_lock = spin_mutex::lock_guard; + + + +/// Spinning reader/writer mutex. This is just like spin_mutex, except +/// that there are separate locking mechanisms for "writers" (exclusive +/// holders of the lock, presumably because they are modifying whatever +/// the lock is protecting) and "readers" (non-exclusive, non-modifying +/// tasks that may access the protectee simultaneously). +class spin_rw_mutex { +public: + /// Default constructor -- initialize to unlocked. + /// + spin_rw_mutex() noexcept {} + + ~spin_rw_mutex() noexcept {} + + // Do not allow copy or assignment. + spin_rw_mutex(const spin_rw_mutex&) = delete; + const spin_rw_mutex& operator=(const spin_rw_mutex&) = delete; + + /// Acquire the reader lock. + /// + void read_lock() noexcept + { + // first increase the readers, and if it turned out nobody was + // writing, we're done. This means that acquiring a read when nobody + // is writing is a single atomic operation. + int oldval = m_bits.fetch_add(1, std::memory_order_acquire); + if (!(oldval & WRITER)) + return; + // Oops, we incremented readers but somebody was writing. Backtrack + // by subtracting, and do things the hard way. + int expected = (--m_bits) & NOTWRITER; + + // Do compare-and-exchange until we can increase the number of + // readers by one and have no writers. + if (m_bits.compare_exchange_weak(expected, expected + 1, + std::memory_order_acquire)) + return; + atomic_backoff backoff; + do { + backoff(); + expected = m_bits.load() & NOTWRITER; + } while (!m_bits.compare_exchange_weak(expected, expected + 1, + std::memory_order_acquire)); + } + + /// Release the reader lock. + /// + void read_unlock() noexcept + { + // Atomically reduce the number of readers. It's at least 1, + // and the WRITER bit should definitely not be set, so this just + // boils down to an atomic decrement of m_bits. + m_bits.fetch_sub(1, std::memory_order_release); + } + + /// Acquire the writer lock. + /// + void write_lock() noexcept + { + // Do compare-and-exchange until we have just ourselves as writer + int expected = 0; + if (m_bits.compare_exchange_weak(expected, WRITER, + std::memory_order_acquire)) + return; + atomic_backoff backoff; + do { + backoff(); + expected = 0; + } while (!m_bits.compare_exchange_weak(expected, WRITER, + std::memory_order_acquire)); + } + + /// Release the writer lock. + /// + void write_unlock() noexcept + { + // Remove the writer bit + m_bits.fetch_sub(WRITER, std::memory_order_release); + } + + /// lock() is a synonym for exclusive (write) lock. + void lock() { write_lock(); } + + /// unlock() is a synonym for exclusive (write) unlock. + void unlock() { write_unlock(); } + + /// Helper class: scoped read lock for a spin_rw_mutex -- grabs the + /// read lock upon construction, releases the lock when it exits scope. + class read_lock_guard { + public: + read_lock_guard (spin_rw_mutex &fm) noexcept : m_fm(fm) { m_fm.read_lock(); } + ~read_lock_guard () noexcept { m_fm.read_unlock(); } + private: + read_lock_guard(const read_lock_guard& other) = delete; + read_lock_guard& operator = (const read_lock_guard& other) = delete; + spin_rw_mutex & m_fm; + }; + + /// Helper class: scoped write lock for a spin_rw_mutex -- grabs the + /// read lock upon construction, releases the lock when it exits scope. + class write_lock_guard { + public: + write_lock_guard (spin_rw_mutex &fm) noexcept : m_fm(fm) { m_fm.write_lock(); } + ~write_lock_guard () noexcept { m_fm.write_unlock(); } + private: + write_lock_guard(const write_lock_guard& other) = delete; + write_lock_guard& operator = (const write_lock_guard& other) = delete; + spin_rw_mutex & m_fm; + }; + +private: + // Use one word to hold the reader count, with a high bit indicating + // that it's locked for writing. This will only work if we have + // fewer than 2^30 simultaneous readers. I think that should hold + // us for some time. + enum { WRITER = 1<<30, NOTWRITER = WRITER-1 }; + std::atomic m_bits { 0 }; +}; + + + +using spin_rw_read_lock = spin_rw_mutex::read_lock_guard; +using spin_rw_write_lock = spin_rw_mutex::write_lock_guard; + + + +/// Mutex pool. Sometimes, we have lots of objects that need to be +/// individually locked for thread safety, but two separate objects don't +/// need to lock against each other. If there are many more objects than +/// threads, it's wasteful for each object to contain its own mutex. So a +/// solution is to make a mutex_pool -- a collection of several mutexes. +/// Each object uses a hash to choose a consistent mutex for itself, but +/// which will be unlikely to be locked simultaneously by different object. +/// Semantically, it looks rather like an associative array of mutexes. We +/// also ensure that the mutexes are all on different cache lines, to ensure +/// that they don't exhibit false sharing. Try to choose Bins larger than +/// the expected number of threads that will be simultaneously locking +/// mutexes. +template +class mutex_pool { +public: + mutex_pool() noexcept {} + Mutex& operator[](const Key& key) noexcept { return m_mutex[m_hash(key) % Bins].m; } + +private: + // Helper type -- force cache line alignment. This should make an array + // of these also have padding so that each individual mutex is aligned + // to its own cache line, thus eliminating any "false sharing." + struct AlignedMutex { + OIIO_CACHE_ALIGN Mutex m; + }; + + AlignedMutex m_mutex[Bins]; + Hash m_hash; +}; + + + +/// Simple thread group class: lets you spawn a group of new threads, +/// then wait for them to all complete. +class thread_group { +public: + thread_group() {} + ~thread_group() { join_all(); } + + void add_thread(thread* t) + { + if (t) { + lock_guard lock(m_mutex); + m_threads.emplace_back(t); + } + } + + template + thread* create_thread(FUNC func, Args&&... args) + { + thread* t = new thread(func, std::forward(args)...); + add_thread(t); + return t; + } + + void join_all() + { + lock_guard lock(m_mutex); + for (auto& t : m_threads) + if (t->joinable()) + t->join(); + } + + size_t size() const + { + lock_guard lock(m_mutex); + return m_threads.size(); + } + +private: + mutable mutex m_mutex; + std::vector> m_threads; +}; + + + +/// thread_pool is a persistent set of threads watching a queue to which +/// tasks can be submitted. +/// +/// Call default_thread_pool() to retrieve a pointer to a single shared +/// thread_pool that will be initialized the first time it's needed, running +/// a number of threads corresponding to the number of cores on the machine. +/// +/// It's possible to create other pools, but it's not something that's +/// recommended unless you really know what you're doing and are careful +/// that the sum of threads across all pools doesn't cause you to be highly +/// over-threaded. An example of when this might be useful is if you want +/// one pool of 4 threads to handle I/O without interference from a separate +/// pool of 4 (other) threads handling computation. +/// +/// Submitting an asynchronous task to the queue follows the following +/// pattern: +/// +/// /* func that takes a thread ID followed possibly by more args */ +/// result_t my_func (int thread_id, Arg1 arg1, ...) { } +/// pool->push (my_func, arg1, ...); +/// +/// If you just want to "fire and forget", then: +/// +/// pool->push (func, ...args...); +/// +/// But if you need a result, or simply need to know when the task has +/// completed, note that the push() method will return a future +/// that you can check, like this: +/// +/// std::future f = pool->push (my_task); +/// +/// And then you can +/// +/// find out if it's done: if (f.valid()) ... +/// wait for it to get done: f.wait(); +/// get result (waiting if necessary): result_t r = f.get(); +/// +/// A common idiom is to fire a bunch of sub-tasks at the queue, and then +/// wait for them to all complete. We provide a helper class, task_set, +/// to make this easy: +/// +/// task_set tasks (pool); +/// for (int i = 0; i < n_subtasks; ++i) +/// tasks.push (pool->push (myfunc)); +/// tasks.wait (); +/// +/// Note that the tasks.wait() is optional -- it will be called +/// automatically when the task_set exits its scope. +/// +/// The task function's first argument, the thread_id, is the thread number +/// for the pool, or -1 if it's being executed by a non-pool thread (this +/// can happen in cases where the whole pool is occupied and the calling +/// thread contributes to running the work load). +/// +/// Thread pool. Have fun, be safe. +/// +class OIIO_UTIL_API thread_pool { +public: + /// Initialize the pool. This implicitly calls resize() to set the + /// number of worker threads, defaulting to a number of workers that is + /// one less than the number of hardware cores. + thread_pool(int nthreads = -1); + ~thread_pool(); + + /// How many threads are in the pool? + int size() const; + + /// Sets the number of worker threads in the pool. If the pool size is + /// 0, any tasks added to the pool will be executed immediately by the + /// calling thread. Requesting nthreads < 0 will cause it to resize to + /// the number of hardware cores minus one (one less, to account for the + /// fact that the calling thread will also contribute). BEWARE! Resizing + /// the queue should not be done while jobs are running. + void resize(int nthreads = -1); + + /// Return the number of currently idle threads in the queue. Zero + /// means the queue is fully engaged. + int idle() const; + + /// Run the user's function that accepts argument int - id of the + /// running thread. The returned value is templatized std::future, where + /// the user can get the result and rethrow any exceptions. If the queue + /// has no worker threads, the task will be run immediately by the + /// calling thread. + template auto push(F&& f) -> std::future + { + auto pck = std::make_shared>( + std::forward(f)); + if (size() < 1) { + (*pck)(-1); // No worker threads, run it with the calling thread + } else { + auto _f = new std::function( + [pck](int id) { (*pck)(id); }); + push_queue_and_notify(_f); + } + return pck->get_future(); + } + + /// Run the user's function that accepts an arbitrary set of arguments + /// (also passed). The returned value is templatized std::future, where + /// the user can get the result and rethrow any exceptions. If the queue + /// has no worker threads, the task will be run immediately by the + /// calling thread. + template + auto push (F && f, Rest&&... rest) ->std::future { + auto pck = std::make_shared>( + std::bind(std::forward(f), std::placeholders::_1, std::forward(rest)...) + ); + if (size() < 1) { + (*pck)(-1); // No worker threads, run it with the calling thread + } else { + auto _f = new std::function([pck](int id) { + (*pck)(id); + }); + push_queue_and_notify (_f); + } + return pck->get_future(); + } + + /// If there are any tasks on the queue, pull one off and run it (on + /// this calling thread) and return true. Otherwise (there are no + /// pending jobs), return false immediately. This utility is what makes + /// it possible for non-pool threads to also run tasks from the queue + /// when they would ordinarily be idle. The thread id of the caller + /// should be passed. + bool run_one_task(std::thread::id id); + + /// Return true if the calling thread is part of the thread pool. This + /// can be used to limit a pool thread from unadvisedly adding its own + /// subtasks to clog up the pool. + /// DEPRECATED(2.1) -- use is_worker() instead. + OIIO_DEPRECATED("use is_worker [2.1]") + bool this_thread_is_in_pool() const; + + /// Register a thread (not already in the thread pool itself) as working + /// on tasks in the pool. This is used to avoid recursion. + void register_worker(std::thread::id id); + /// De-register a thread, saying it is no longer in the process of + /// taking work from the thread pool. + void deregister_worker(std::thread::id id); + /// Is the thread in the pool or currently engaged in taking tasks from + /// the pool? + bool is_worker(std::thread::id id) const; + bool is_worker() const { return is_worker(std::this_thread::get_id()); } + + /// How many jobs are waiting to run? (Use with caution! Can be out of + /// date by the time you look at it.) + size_t jobs_in_queue() const; + + /// Is the pool very busy? Meaning that there are significantly more + /// tasks in the queue waiting to run than there are threads in the + /// pool. It may be wise for a caller to check this before submitting + /// tasks -- if the queue is very busy, it's probably more expedient to + /// execute the code directly rather than add it to an oversubscribed + /// queue. + bool very_busy() const; + +private: + // Disallow copy construction and assignment + thread_pool(const thread_pool&) = delete; + thread_pool(thread_pool&&) = delete; + thread_pool& operator=(const thread_pool&) = delete; + thread_pool& operator=(thread_pool&&) = delete; + + // PIMPL pattern hides all the guts far away from the public API + class Impl; + std::unique_ptr m_impl; + + // Utility function that helps us hide the implementation + void push_queue_and_notify(std::function* f); +}; + + + +/// Return a reference to the "default" shared thread pool. In almost all +/// ordinary circumstances, you should use this exclusively to get a single +/// shared thread pool, since creating multiple thread pools could result in +/// hilariously over-threading your application. Note that this call may +/// (safely, and only once) trigger creation of the thread pool and its +/// worker threads if it has not yet been created. +OIIO_UTIL_API thread_pool* default_thread_pool(); + +/// If a thread pool has been created, this call will safely terminate its +/// worker threads. This should presumably be called by an application +/// immediately before it exists, when it is confident the thread pool will +/// no longer be needed. +OIIO_UTIL_API void default_thread_pool_shutdown(); + + + +/// task_set is a group of future's from a thread_queue that you can +/// add to, and when you either call wait() or just leave the task_set's +/// scope, it will wait for all the tasks in the set to be done before +/// proceeding. +/// +/// A typical idiom for using this is: +/// +/// void myfunc (int id) { ... do something ... } +/// +/// thread_pool* pool (default_thread_pool()); +/// { +/// task_set tasks (pool); +/// // Launch a bunch of tasks into the thread pool +/// for (int i = 0; i < ntasks; ++i) +/// tasks.push (pool->push (myfunc)); +/// // The following brace, by ending the scope of 'tasks', will +/// // wait for all those queue tasks to finish. +/// } +/// +class OIIO_UTIL_API task_set { +public: + task_set(thread_pool* pool = nullptr) + : m_pool(pool ? pool : default_thread_pool()) + , m_submitter_thread(std::this_thread::get_id()) + { + } + ~task_set() { wait(); } + + task_set(const task_set&) = delete; + const task_set& operator=(const task_set&) = delete; + + // Return the thread id of the thread that set up this task_set and + // submitted its tasks to the thread pool. + std::thread::id submitter() const { return m_submitter_thread; } + + // Save a future (presumably returned by a threadpool::push() as part + // of this task set. + void push(std::future&& f) + { + OIIO_DASSERT( + std::this_thread::get_id() == submitter() + && "All tasks in a tast_set should be added by the same thread"); + m_futures.emplace_back(std::move(f)); + } + + // Wait for the given taskindex (0..n-1, where n is the number of tasks + // submitted as part of this task_set). If block == true, fully block + // while waiting for that task to finish. If block is false, then busy + // wait, and opportunistically run queue tasks yourself while you are + // waiting for the task to finish. + void wait_for_task(size_t taskindex, bool block = false); + + // Wait for all tasks in the set to finish. If block == true, fully + // block while waiting for the pool threads to all finish. If block is + // false, then busy wait, and opportunistically run queue tasks yourself + // while you are waiting for other tasks to finish. + void wait(bool block = false); + + // Debugging sanity check, called after wait(), to ensure that all the + // tasks were completed. + void check_done() + { + const std::chrono::milliseconds wait_time(0); + for (auto&& f : m_futures) + OIIO_ASSERT(f.wait_for(wait_time) == std::future_status::ready); + } + +private: + thread_pool* m_pool; + std::thread::id m_submitter_thread; + std::vector> m_futures; +}; + + +OIIO_NAMESPACE_3_1_END diff --git a/third_party/tlRender-install-Release/include/OpenImageIO/tiffutils.h b/third_party/tlRender-install-Release/include/OpenImageIO/tiffutils.h new file mode 100644 index 00000000..4d492b99 --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenImageIO/tiffutils.h @@ -0,0 +1,256 @@ +// Copyright Contributors to the OpenImageIO project. +// SPDX-License-Identifier: Apache-2.0 +// https://github.com/AcademySoftwareFoundation/OpenImageIO + +// clang-format off + +///////////////////////////////////////////////////////////////////////////// +/// \file +/// +/// Utilities for dealing with TIFF tags and data structures (common to +/// plugins that have to deal with TIFF itself, Exif data blocks, and other +/// miscellaneous stuff that piggy-backs off TIFF format). +/// +///////////////////////////////////////////////////////////////////////////// + + +#pragma once + +extern "C" { +#include "tiff.h" +} + +#include + + +#ifdef TIFF_VERSION_BIG +// In old versions of TIFF, this was defined in tiff.h. It's gone from +// "BIG TIFF" (libtiff 4.x), so we just define it here. + +struct TIFFHeader { + uint16_t tiff_magic; /* magic number (defines byte order) */ + uint16_t tiff_version;/* TIFF version number */ + uint32_t tiff_diroff; /* byte offset to first directory */ +}; + +struct TIFFDirEntry { + uint16_t tdir_tag; /* tag ID */ + uint16_t tdir_type; /* data type -- see TIFFDataType enum */ + uint32_t tdir_count; /* number of items; length in spec */ + uint32_t tdir_offset; /* byte offset to field data */ +}; +#endif + + + +OIIO_NAMESPACE_BEGIN + +// Define EXIF constants +enum TIFFTAG { + EXIF_EXPOSURETIME = 33434, + EXIF_FNUMBER = 33437, + EXIF_EXPOSUREPROGRAM = 34850, + EXIF_SPECTRALSENSITIVITY = 34852, + EXIF_PHOTOGRAPHICSENSITIVITY = 34855, + EXIF_ISOSPEEDRATINGS = 34855, // old nme for PHOTOGRAPHICSENSITIVITY + EXIF_OECF = 34856, + EXIF_SENSITIVITYTYPE = 34864, + EXIF_STANDARDOUTPUTSENSITIVITY = 34865, + EXIF_RECOMMENDEDEXPOSUREINDEX = 34866, + EXIF_ISOSPEED = 34867, + EXIF_ISOSPEEDLATITUDEYYY = 34868, + EXIF_ISOSPEEDLATITUDEZZZ = 34869, + EXIF_EXIFVERSION = 36864, + EXIF_DATETIMEORIGINAL = 36867, + EXIF_DATETIMEDIGITIZED = 36868, + EXIF_OFFSETTIME = 36880, + EXIF_OFFSETTIMEORIGINAL = 36881, + EXIF_OFFSETTIMEDIGITIZED = 36882, + EXIF_COMPONENTSCONFIGURATION = 37121, + EXIF_COMPRESSEDBITSPERPIXEL = 37122, + EXIF_SHUTTERSPEEDVALUE = 37377, + EXIF_APERTUREVALUE = 37378, + EXIF_BRIGHTNESSVALUE = 37379, + EXIF_EXPOSUREBIASVALUE = 37380, + EXIF_MAXAPERTUREVALUE = 37381, + EXIF_SUBJECTDISTANCE = 37382, + EXIF_METERINGMODE = 37383, + EXIF_LIGHTSOURCE = 37384, + EXIF_FLASH = 37385, + EXIF_FOCALLENGTH = 37386, + EXIF_SECURITYCLASSIFICATION = 37394, + EXIF_IMAGEHISTORY = 37395, + EXIF_SUBJECTAREA = 37396, + EXIF_MAKERNOTE = 37500, + EXIF_USERCOMMENT = 37510, + EXIF_SUBSECTIME = 37520, + EXIF_SUBSECTIMEORIGINAL = 37521, + EXIF_SUBSECTIMEDIGITIZED = 37522, + EXIF_TEMPERATURE = 37888, + EXIF_HUMIDITY = 37889, + EXIF_PRESSURE = 37890, + EXIF_WATERDEPTH = 37891, + EXIF_ACCELERATION = 37892, + EXIF_CAMERAELEVATIONANGLE = 37893, + EXIF_FLASHPIXVERSION = 40960, + EXIF_COLORSPACE = 40961, + EXIF_PIXELXDIMENSION = 40962, + EXIF_PIXELYDIMENSION = 40963, + EXIF_RELATEDSOUNDFILE = 40964, + EXIF_FLASHENERGY = 41483, + EXIF_SPATIALFREQUENCYRESPONSE = 41484, + EXIF_FOCALPLANEXRESOLUTION = 41486, + EXIF_FOCALPLANEYRESOLUTION = 41487, + EXIF_FOCALPLANERESOLUTIONUNIT = 41488, + EXIF_SUBJECTLOCATION = 41492, + EXIF_EXPOSUREINDEX = 41493, + EXIF_SENSINGMETHOD = 41495, + EXIF_FILESOURCE = 41728, + EXIF_SCENETYPE = 41729, + EXIF_CFAPATTERN = 41730, + EXIF_CUSTOMRENDERED = 41985, + EXIF_EXPOSUREMODE = 41986, + EXIF_WHITEBALANCE = 41987, + EXIF_DIGITALZOOMRATIO = 41988, + EXIF_FOCALLENGTHIN35MMFILM = 41989, + EXIF_SCENECAPTURETYPE = 41990, + EXIF_GAINCONTROL = 41991, + EXIF_CONTRAST = 41992, + EXIF_SATURATION = 41993, + EXIF_SHARPNESS = 41994, + EXIF_DEVICESETTINGDESCRIPTION = 41995, + EXIF_SUBJECTDISTANCERANGE = 41996, + EXIF_IMAGEUNIQUEID = 42016, + EXIF_CAMERAOWNERNAME = 42032, + EXIF_BODYSERIALNUMBER = 42033, + EXIF_LENSSPECIFICATION = 42034, + EXIF_LENSMAKE = 42035, + EXIF_LENSMODEL = 42036, + EXIF_LENSSERIALNUMBER = 42037, + EXIF_GAMMA = 42240, +}; + +OIIO_NAMESPACE_END + + +OIIO_NAMESPACE_3_1_BEGIN + +/// Given a TIFF data type code (defined in tiff.h) and a count, return the +/// equivalent TypeDesc where one exists. Return TypeUnknown if there is no +/// obvious equivalent. +OIIO_API TypeDesc tiff_datatype_to_typedesc (TIFFDataType tifftype, size_t tiffcount=1); + +inline TypeDesc tiff_datatype_to_typedesc (const TIFFDirEntry& dir) { + return tiff_datatype_to_typedesc (TIFFDataType(dir.tdir_type), dir.tdir_count); +} + +/// Return the data size (in bytes) of the TIFF type. +OIIO_API size_t tiff_data_size (TIFFDataType tifftype); + +/// Return the data size (in bytes) of the data for the given TIFFDirEntry. +OIIO_API size_t tiff_data_size (const TIFFDirEntry &dir); + +/// Given a TIFFDirEntry and a data arena (represented by an array view +/// of unsigned bytes), return a span of where the values for the +/// tiff dir lives. Return an empty span if there is an error, which +/// could include a nonsensical situation where the TIFFDirEntry seems to +/// point outside the data arena. +OIIO_API cspan +tiff_dir_data (const TIFFDirEntry &td, cspan data); + +/// Decode a raw Exif data block and save all the metadata in an +/// ImageSpec. Return true if all is ok, false if the exif block was +/// somehow malformed. The binary data pointed to by 'exif' should +/// start with a TIFF directory header. +OIIO_API bool decode_exif (cspan exif, ImageSpec &spec); +OIIO_API bool decode_exif (string_view exif, ImageSpec &spec); + +/// Construct an Exif data block from the ImageSpec, appending the Exif +/// data as a big blob to the char vector. Endianness can be specified with +/// endianreq, defaulting to the native endianness of the running platform. +OIIO_API void encode_exif (const ImageSpec &spec, std::vector &blob, + OIIO::endian endianreq = endian::native); + +/// Helper: For the given OIIO metadata attribute name, look up the Exif tag +/// ID, TIFFDataType (expressed as an int), and count. Return true and fill +/// in the fields if found, return false if not found. +OIIO_API bool exif_tag_lookup (string_view name, int &tag, + int &tifftype, int &count); + +/// Add metadata to spec based on raw IPTC (International Press +/// Telecommunications Council) metadata in the form of an IIM +/// (Information Interchange Model). Return true if all is ok, false if +/// the iptc block was somehow malformed. This is a utility function to +/// make it easy for multiple format plugins to support embedding IPTC +/// metadata without having to duplicate functionality within each +/// plugin. Note that IIM is actually considered obsolete and is +/// replaced by an XML scheme called XMP. +OIIO_API bool decode_iptc_iim (const void *iptc, int length, ImageSpec &spec); + +/// Find all the IPTC-amenable metadata in spec and assemble it into an +/// IIM data block in iptc. This is a utility function to make it easy +/// for multiple format plugins to support embedding IPTC metadata +/// without having to duplicate functionality within each plugin. Note +/// that IIM is actually considered obsolete and is replaced by an XML +/// scheme called XMP. Return true if it was successful and any items +/// were encoded. +OIIO_API bool encode_iptc_iim (const ImageSpec &spec, std::vector &iptc); + +/// Add metadata to spec based on XMP data in an XML block. Return true +/// if all is ok, false if the xml was somehow malformed. This is a +/// utility function to make it easy for multiple format plugins to +/// support embedding XMP metadata without having to duplicate +/// functionality within each plugin. +OIIO_API bool decode_xmp (cspan xml, ImageSpec &spec); +OIIO_API bool decode_xmp (string_view xml, ImageSpec &spec); + +/// Find all the relevant metadata (IPTC, Exif, etc.) in spec and +/// assemble it into an XMP XML string. This is a utility function to +/// make it easy for multiple format plugins to support embedding XMP +/// metadata without having to duplicate functionality within each +/// plugin. If 'minimal' is true, then don't encode things that would +/// be part of ordinary TIFF or exif tags. +OIIO_API std::string encode_xmp (const ImageSpec &spec, bool minimal=false); + + +/// Add metadata to spec based on ICC data in a byte array. Return true if +/// all is ok, false if the ICC was somehow malformed (and in that case, set +/// the contents of `error` to something useful). This is a utility function +/// to make it easy for multiple format plugins to support embedding ICC +/// metadata without having to duplicate functionality within each plugin. +OIIO_API bool decode_icc_profile(cspan iccdata, ImageSpec& spec, + std::string& error); + + + +/// Handy structure to hold information mapping TIFF/EXIF tags to their +/// names and actions. +struct TagInfo { + typedef void (*HandlerFunc)(const TagInfo& taginfo, const TIFFDirEntry& dir, + cspan buf, ImageSpec& spec, + bool swapendian, int offset_adjustment); + + TagInfo (int tag, const char *name, TIFFDataType type, + int count, HandlerFunc handler = nullptr) noexcept + : tifftag(tag), name(name), tifftype(type), tiffcount(count), + handler(handler) {} + + int tifftag = -1; // TIFF tag used for this info + const char *name = nullptr; // OIIO attribute name we use + TIFFDataType tifftype = TIFF_NOTYPE; // Data type that TIFF wants + int tiffcount = 0; // Number of items + HandlerFunc handler = nullptr; // Special decoding handler +}; + +/// Return a span of a TagInfo array for the corresponding table. +/// Valid names are "Exif", "GPS", and "TIFF". This can be handy for +/// iterating through all possible tags for each category. +OIIO_API cspan tag_table (string_view tablename); + +/// Look up the TagInfo of a numbered or named tag from a named domain +/// ("TIFF", "Exif", or "GPS"). Return nullptr if it is not known. +OIIO_API const TagInfo* tag_lookup (string_view domain, int tag); +OIIO_API const TagInfo* tag_lookup (string_view domain, string_view tagname); + + +OIIO_NAMESPACE_3_1_END diff --git a/third_party/tlRender-install-Release/include/OpenImageIO/timer.h b/third_party/tlRender-install-Release/include/OpenImageIO/timer.h new file mode 100644 index 00000000..04929ab1 --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenImageIO/timer.h @@ -0,0 +1,278 @@ +// Copyright Contributors to the OpenImageIO project. +// SPDX-License-Identifier: Apache-2.0 +// https://github.com/AcademySoftwareFoundation/OpenImageIO + + +/// @file timer.h +/// @brief Simple timer class. + + +#pragma once + +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +#ifdef _WIN32 +#elif defined(__APPLE__) +# include +#else +# include +#endif + +#define OIIO_TIMER_LINUX_USE_clock_gettime 1 + + +OIIO_NAMESPACE_3_1_BEGIN + +/// Simple timer class. +/// +/// This class allows you to time things, for runtime statistics and the +/// like. The simplest usage pattern is illustrated by the following +/// example: +/// +/// \code +/// Timer mytimer; // automatically starts upon construction +/// ...do stuff +/// float t = mytimer(); // seconds elapsed since start +/// +/// Timer another (false); // false means don't start ticking yet +/// another.start (); // start ticking now +/// another.stop (); // stop ticking +/// another.start (); // start again where we left off +/// another.stop (); +/// another.reset (); // reset to zero time again +/// \endcode +/// +/// These are not very high-resolution timers. A Timer begin/end pair +/// takes somewhere in the neighborhood of 0.1 - 0.3 us (microseconds), +/// and can vary by OS. This means that (a) it's not useful for timing +/// individual events near or below that resolution (things that would +/// take only tens or hundreds of processor cycles, for example), and +/// (b) calling it millions of times could make your program appreciably +/// more expensive due to the timers themselves. +/// +class OIIO_UTIL_API Timer { +public: + typedef int64_t ticks_t; + enum StartNowVal { DontStartNow, StartNow }; + enum PrintDtrVal { DontPrintDtr, PrintDtr, PrintCtrDtr }; + + /// Constructor -- reset at zero, and start timing unless optional + /// 'startnow' argument is false. + Timer(StartNowVal startnow, PrintDtrVal printdtr = DontPrintDtr, + const char* name = NULL) + : m_ticking(false) + , m_printdtr(printdtr == PrintDtr || printdtr == PrintCtrDtr) + , m_starttime(0) + , m_elapsed_ticks(0) + , m_name(name) + { + if (startnow == StartNow) { + start(); + if (printdtr == PrintCtrDtr) { + Strutil::print("Starting timer {}\n", (m_name ? m_name : ""), + seconds(ticks())); + } + } + } + + /// Constructor -- reset at zero, and start timing unless optional + /// 'startnow' argument is false. + Timer(bool startnow = true) + : m_ticking(false) + , m_printdtr(false) + , m_starttime(0) + , m_elapsed_ticks(0) + , m_name(NULL) + { + if (startnow) + start(); + } + + /// Destructor. + ~Timer() + { + if (m_printdtr) + Strutil::print("Timer {}: {:g}s\n", (m_name ? m_name : ""), + seconds(ticks())); + } + + /// Start (or restart) ticking, if we are not currently. + void start() + { + if (!m_ticking) { + m_starttime = now(); + m_ticking = true; + } + } + + /// Stop ticking, return the total amount of time that has ticked + /// (both this round as well as previous laps). Current ticks will + /// be added to previous elapsed time. + double stop() + { + if (m_ticking) { + ticks_t n = now(); + m_elapsed_ticks += tickdiff(m_starttime, n); + m_ticking = false; + } + return seconds(m_elapsed_ticks); + } + + /// Reset at zero and stop ticking. + /// + void reset(void) + { + m_elapsed_ticks = 0; + m_ticking = false; + } + + /// Return just the ticks of the current lap (since the last call to + /// start() or lap()), add that to the previous elapsed time, reset + /// current start time to now, keep the timer going (if it was). + ticks_t lap_ticks() + { + ticks_t n = now(); + ticks_t r = m_ticking ? tickdiff(m_starttime, n) : ticks_t(0); + m_elapsed_ticks += r; + m_starttime = n; + m_ticking = true; + return r; + } + + /// Return just the time of the current lap (since the last call to + /// start() or lap()), add that to the previous elapsed time, reset + /// current start time to now, keep the timer going (if it was). + double lap() { return seconds(lap_ticks()); } + + /// Total number of elapsed ticks so far, including both the currently- + /// ticking clock as well as any previously elapsed time. + ticks_t ticks() const { return ticks_since_start() + m_elapsed_ticks; } + + /// Operator () returns the elapsed time so far, in seconds, including + /// both the currently-ticking clock as well as any previously elapsed + /// time. + double operator()(void) const { return seconds(ticks()); } + + /// Return just the ticks since we called start(), not any elapsed + /// time in previous start-stop segments. + ticks_t ticks_since_start(void) const + { + return m_ticking ? tickdiff(m_starttime, now()) : ticks_t(0); + } + + /// Return just the time since we called start(), not any elapsed + /// time in previous start-stop segments. + double time_since_start(void) const { return seconds(ticks_since_start()); } + + /// Convert number of ticks to seconds. + static double seconds(ticks_t ticks) { return ticks * seconds_per_tick; } + + /// Is the timer currently ticking? + bool ticking() const { return m_ticking; } + + /// Force an offset to the total, in ticks. This value may be negative to + /// subtract from the total. To avoid disrupting the timer in progress, + /// this is added to the total elapsed time but not to the current lap, so + /// it will be reflected in ticks() or seconds(), but will NOT be + /// reflected in ticks_since_start() or time_since_start(). + void add_ticks(ticks_t delta) { m_elapsed_ticks += delta; } + + /// Force an offset to the total, in seconds. This value may be negative + /// to subtract from the total. To avoid disrupting the timer in progress, + /// this is added to the total elapsed time but not to the current lap, so + /// it will be reflected in ticks() or seconds(), but will NOT be + /// reflected in ticks_since_start() or time_since_start(). + void add_seconds(double t) { add_ticks(ticks_t(t * ticks_per_second)); } + +private: + bool m_ticking; ///< Are we currently ticking? + bool m_printdtr; ///< Print upon destruction? + ticks_t m_starttime; ///< Time since last call to start() + ticks_t m_elapsed_ticks; ///< Time elapsed BEFORE the current start(). + const char* m_name; ///< Timer name + + /// Platform-dependent grab of current time, expressed as ticks_t. + /// + ticks_t now(void) const +#ifdef _WIN32 + ; // a non-inline function on Windows +#else + { +# if defined(__APPLE__) + return mach_absolute_time(); +# elif OIIO_TIMER_LINUX_USE_clock_gettime + struct timespec t; + clock_gettime(CLOCK_MONOTONIC, &t); + return int64_t(t.tv_sec) * int64_t(1000000000) + t.tv_nsec; +# else + struct timeval t; + gettimeofday(&t, NULL); + return int64_t(t.tv_sec) * int64_t(1000000) + t.tv_usec; +# endif + } +#endif + + /// Difference between two times, expressed in (platform-dependent) + /// ticks. + ticks_t tickdiff(ticks_t then, ticks_t now) const + { + return (now > then) ? now - then : then - now; + } + + /// Difference between two times, expressed in seconds. + double diff(ticks_t then, ticks_t now) const + { + return seconds(tickdiff(then, now)); + } + + static double seconds_per_tick; + static ticks_t ticks_per_second; + friend class TimerSetupOnce; +}; + + + +/// Helper class that starts and stops a timer when the ScopedTimer goes +/// in and out of scope. +class ScopedTimer { +public: + /// Given a reference to a timer, start it when this constructor + /// occurs. + ScopedTimer(Timer& t) + : m_timer(t) + { + start(); + } + + /// Stop the timer from ticking when this object is destroyed (i.e. + /// it leaves scope). + ~ScopedTimer() { stop(); } + + /// Explicit start of the timer. + /// + void start() { m_timer.start(); } + + /// Explicit stop of the timer. + /// + void stop() { m_timer.stop(); } + + /// Explicit reset of the timer. + /// + void reset() { m_timer.reset(); } + +private: + Timer& m_timer; +}; + + + +OIIO_NAMESPACE_3_1_END diff --git a/third_party/tlRender-install-Release/include/OpenImageIO/type_traits.h b/third_party/tlRender-install-Release/include/OpenImageIO/type_traits.h new file mode 100644 index 00000000..da6e3ad4 --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenImageIO/type_traits.h @@ -0,0 +1,48 @@ +// Copyright Contributors to the OpenImageIO project. +// SPDX-License-Identifier: Apache-2.0 +// https://github.com/AcademySoftwareFoundation/OpenImageIO + +// clang-format off + +///////////////////////////////////////////////////////////////////////// +// \file +// type_traits.h is where we collect little type traits and related +// templates. +///////////////////////////////////////////////////////////////////////// + +#pragma once + +#include +#include + + +// An enable_if helper to be used in template parameters which results in +// much shorter symbols: https://godbolt.org/z/sWw4vP +// Borrowed from fmtlib. +#ifndef OIIO_ENABLE_IF +# define OIIO_ENABLE_IF(...) std::enable_if_t<(__VA_ARGS__), int> = 0 +#endif + + +OIIO_NAMESPACE_3_1_BEGIN + +/// has_size_method::value is true if T has a size() method and it returns +/// an integral type. +template struct has_size_method : std::false_type { }; + +template +struct has_size_method().size())>> + : std::is_integral().size())>> { }; +// How does this work? This overload is only defined if there is a size() +// method, and it evaluates to true_type or false_type based on whether size() +// returns an integral type. + + +/// has_subscript::value is true if T has a subscript operator. +template struct has_subscript : std::false_type { }; + +template +struct has_subscript()[0])>> + : std::true_type { }; + +OIIO_NAMESPACE_3_1_END diff --git a/third_party/tlRender-install-Release/include/OpenImageIO/typedesc.h b/third_party/tlRender-install-Release/include/OpenImageIO/typedesc.h new file mode 100644 index 00000000..6c695633 --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenImageIO/typedesc.h @@ -0,0 +1,638 @@ +// Copyright Contributors to the OpenImageIO project. +// SPDX-License-Identifier: Apache-2.0 +// https://github.com/AcademySoftwareFoundation/OpenImageIO + +// clang-format off + +/// \file +/// The TypeDesc class is used to describe simple data types. + + +#pragma once + +#if defined(_MSC_VER) +// Ignore warnings about conditional expressions that always evaluate true +// on a given platform but may evaluate differently on another. There's +// nothing wrong with such conditionals. +# pragma warning(disable : 4127) +#endif + +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +// Define symbols that let client applications determine if newly added +// features are supported. +#define OIIO_TYPEDESC_VECTOR2 1 + + + +OIIO_NAMESPACE_3_1_BEGIN + +///////////////////////////////////////////////////////////////////////////// +/// A TypeDesc describes simple data types. +/// +/// It frequently comes up (in my experience, with renderers and image +/// handling programs) that you want a way to describe data that is passed +/// through APIs through blind pointers. These are some simple classes +/// that provide a simple type descriptor system. This is not meant to +/// be comprehensive -- for example, there is no provision for structs, +/// unions, typed pointers, const, or 'nested' type definitions. Just simple +/// integer and floating point, *common* aggregates such as 3-points, and +/// reasonably-lengthed arrays thereof. +/// +///////////////////////////////////////////////////////////////////////////// + +struct OIIO_UTIL_API TypeDesc { + /// BASETYPE is a simple enum describing the base data types that + /// correspond (mostly) to the C/C++ built-in types. + enum BASETYPE { + UNKNOWN, ///< unknown type + NONE, ///< void/no type + UINT8, ///< 8-bit unsigned int values ranging from 0..255, + ///< (C/C++ `unsigned char`). + UCHAR=UINT8, + INT8, ///< 8-bit int values ranging from -128..127, + ///< (C/C++ `char`). + CHAR=INT8, + UINT16, ///< 16-bit int values ranging from 0..65535, + ///< (C/C++ `unsigned short`). + USHORT=UINT16, + INT16, ///< 16-bit int values ranging from -32768..32767, + ///< (C/C++ `short`). + SHORT=INT16, + UINT32, ///< 32-bit unsigned int values (C/C++ `unsigned int`). + UINT=UINT32, + INT32, ///< signed 32-bit int values (C/C++ `int`). + INT=INT32, + UINT64, ///< 64-bit unsigned int values (C/C++ + ///< `unsigned long long` on most architectures). + ULONGLONG=UINT64, + INT64, ///< signed 64-bit int values (C/C++ `long long` + ///< on most architectures). + LONGLONG=INT64, + HALF, ///< 16-bit IEEE floating point values (OpenEXR `half`). + FLOAT, ///< 32-bit IEEE floating point values, (C/C++ `float`). + DOUBLE, ///< 64-bit IEEE floating point values, (C/C++ `double`). + STRING, ///< Character string. + PTR, ///< A pointer value. + USTRINGHASH, ///< A uint64 that is the hash of a ustring. + LASTBASE + }; + + /// AGGREGATE describes whether our TypeDesc is a simple scalar of one + /// of the BASETYPE's, or one of several simple aggregates. + /// + /// Note that aggregates and arrays are different. A `TypeDesc(FLOAT,3)` + /// is an array of three floats, a `TypeDesc(FLOAT,VEC3)` is a single + /// 3-component vector comprised of floats, and `TypeDesc(FLOAT,3,VEC3)` + /// is an array of 3 vectors, each of which is comprised of 3 floats. + enum AGGREGATE { + SCALAR = 1, ///< A single scalar value (such as a raw `int` or + ///< `float` in C). This is the default. + VEC2 = 2, ///< 2 values representing a 2D vector. + VEC3 = 3, ///< 3 values representing a 3D vector. + VEC4 = 4, ///< 4 values representing a 4D vector. + MATRIX33 = 9, ///< 9 values representing a 3x3 matrix. + MATRIX44 = 16 ///< 16 values representing a 4x4 matrix. + }; + + /// VECSEMANTICS gives hints about what the data represent (for example, + /// if a spatial vector quantity should transform as a point, direction + /// vector, or surface normal). + enum VECSEMANTICS { + NOXFORM = 0, ///< No semantic hints. + NOSEMANTICS = 0, ///< No semantic hints. + COLOR, ///< Color + POINT, ///< Point: a spatial location + VECTOR, ///< Vector: a spatial direction + NORMAL, ///< Normal: a surface normal + TIMECODE, ///< indicates an `int[2]` representing the standard + ///< 4-byte encoding of an SMPTE timecode. + KEYCODE, ///< indicates an `int[7]` representing the standard + ///< 28-byte encoding of an SMPTE keycode. + RATIONAL, ///< A VEC2 representing a rational number `val[0] / val[1]` + BOX, ///< A VEC2[2] or VEC3[2] that represents a 2D or 3D bounds (min/max) + }; + + unsigned char basetype; ///< C data type at the heart of our type + unsigned char aggregate; ///< What kind of AGGREGATE is it? + unsigned char vecsemantics; ///< Hint: What does the aggregate represent? + unsigned char reserved; ///< Reserved for future expansion + int arraylen; ///< Array length, 0 = not array, -1 = unsized + + /// Construct from a BASETYPE and optional aggregateness, semantics, + /// and arrayness. + OIIO_HOSTDEVICE constexpr TypeDesc (BASETYPE btype=UNKNOWN, AGGREGATE agg=SCALAR, + VECSEMANTICS semantics=NOSEMANTICS, + int arraylen=0) noexcept + : basetype(static_cast(btype)), + aggregate(static_cast(agg)), + vecsemantics(static_cast(semantics)), reserved(0), + arraylen(arraylen) + { } + + /// Construct an array of a non-aggregate BASETYPE. + OIIO_HOSTDEVICE constexpr TypeDesc (BASETYPE btype, int arraylen) noexcept + : TypeDesc(btype, SCALAR, NOSEMANTICS, arraylen) {} + + /// Construct an array from BASETYPE, AGGREGATE, and array length, + /// with unspecified (or moot) semantic hints. + OIIO_HOSTDEVICE constexpr TypeDesc (BASETYPE btype, AGGREGATE agg, int arraylen) noexcept + : TypeDesc(btype, agg, NOSEMANTICS, arraylen) {} + + /// Construct from a string (e.g., "float[3]"). If no valid + /// type could be assembled, set base to UNKNOWN. + /// + /// Examples: + /// ``` + /// TypeDesc("int") == TypeDesc(TypeDesc::INT) // C++ int32_t + /// TypeDesc("float") == TypeDesc(TypeDesc::FLOAT) // C++ float + /// TypeDesc("uint16") == TypeDesc(TypeDesc::UINT16) // C++ uint16_t + /// TypeDesc("float[4]") == TypeDesc(TypeDesc::FLOAT, 4) // array + /// TypeDesc("point") == TypeDesc(TypeDesc::FLOAT, + /// TypeDesc::VEC3, TypeDesc::POINT) + /// ``` + /// + TypeDesc (string_view typestring); + + /// Copy constructor. + constexpr TypeDesc (const TypeDesc &t) noexcept = default; + + /// Return the name, for printing and whatnot. For example, + /// "float", "int[5]", "normal" + const char *c_str() const; + + friend std::ostream& operator<< (std::ostream& o, const TypeDesc& t) { + o << t.c_str(); return o; + } + + /// Return the number of elements: 1 if not an array, or the array + /// length. Invalid to call this for arrays of undetermined size. + OIIO_HOSTDEVICE constexpr size_t numelements () const noexcept { + OIIO_DASSERT_MSG (arraylen >= 0, "Called numelements() on TypeDesc " + "of array with unspecified length (%d)", arraylen); + return (arraylen >= 1 ? arraylen : 1); + } + + /// Return the number of basetype values: the aggregate count multiplied + /// by the array length (or 1 if not an array). Invalid to call this + /// for arrays of undetermined size. + OIIO_HOSTDEVICE constexpr size_t basevalues () const noexcept { + return numelements() * aggregate; + } + + /// Does this TypeDesc describe an array? + OIIO_HOSTDEVICE constexpr bool is_array () const noexcept { return (arraylen != 0); } + + /// Does this TypeDesc describe an array, but whose length is not + /// specified? + OIIO_HOSTDEVICE constexpr bool is_unsized_array () const noexcept { return (arraylen < 0); } + + /// Does this TypeDesc describe an array, whose length is specified? + OIIO_HOSTDEVICE constexpr bool is_sized_array () const noexcept { return (arraylen > 0); } + + /// Return the size, in bytes, of this type. + /// + OIIO_HOSTDEVICE size_t size () const noexcept { + OIIO_DASSERT_MSG (arraylen >= 0, "Called size() on TypeDesc " + "of array with unspecified length (%d)", arraylen); + size_t a = (size_t) (arraylen > 0 ? arraylen : 1); + if (sizeof(size_t) > sizeof(int)) { + // size_t has plenty of room for this multiplication + return a * elementsize(); + } else { + // need overflow protection + unsigned long long s = (unsigned long long) a * elementsize(); + const size_t toobig = std::numeric_limits::max(); + return s < toobig ? (size_t)s : toobig; + } + } + + /// Return the type of one element, i.e., strip out the array-ness. + /// + OIIO_HOSTDEVICE constexpr TypeDesc elementtype () const noexcept { + TypeDesc t (*this); t.arraylen = 0; return t; + } + + /// Return the size, in bytes, of one element of this type (that is, + /// ignoring whether it's an array). + OIIO_HOSTDEVICE size_t elementsize () const noexcept { return aggregate * basesize(); } + + /// Return just the underlying C scalar type, i.e., strip out the + /// array-ness and the aggregateness. + OIIO_HOSTDEVICE constexpr TypeDesc scalartype() const { return TypeDesc(BASETYPE(basetype)); } + + /// Return the base type size, i.e., stripped of both array-ness + /// and aggregateness. + size_t basesize () const noexcept; + + /// True if it's a floating-point type (versus a fundamentally + /// integral type or something else like a string). + bool is_floating_point () const noexcept; + + /// True if it's a signed type that allows for negative values. + bool is_signed () const noexcept; + + /// Shortcut: is it UNKNOWN? + OIIO_HOSTDEVICE constexpr bool is_unknown () const noexcept { return (basetype == UNKNOWN); } + + /// if (typedesc) is the same as asking whether it's not UNKNOWN. + OIIO_HOSTDEVICE constexpr operator bool () const noexcept { return (basetype != UNKNOWN); } + + /// Set *this to the type described in the string. Return the + /// length of the part of the string that describes the type. If + /// no valid type could be assembled, return 0 and do not modify + /// *this. + size_t fromstring (string_view typestring); + + /// Compare two TypeDesc values for equality. + /// + OIIO_HOSTDEVICE constexpr bool operator== (const TypeDesc &t) const noexcept { + return basetype == t.basetype && aggregate == t.aggregate && + vecsemantics == t.vecsemantics && arraylen == t.arraylen; + } + + /// Compare two TypeDesc values for inequality. + /// + OIIO_HOSTDEVICE constexpr bool operator!= (const TypeDesc &t) const noexcept { return ! (*this == t); } + + /// Compare a TypeDesc to a basetype (it's the same if it has the + /// same base type and is not an aggregate or an array). + OIIO_HOSTDEVICE friend constexpr bool operator== (const TypeDesc &t, BASETYPE b) noexcept { + return (BASETYPE)t.basetype == b && (AGGREGATE)t.aggregate == SCALAR && !t.is_array(); + } + OIIO_HOSTDEVICE friend constexpr bool operator== (BASETYPE b, const TypeDesc &t) noexcept { + return (BASETYPE)t.basetype == b && (AGGREGATE)t.aggregate == SCALAR && !t.is_array(); + } + + /// Compare a TypeDesc to a basetype (it's the same if it has the + /// same base type and is not an aggregate or an array). + OIIO_HOSTDEVICE friend constexpr bool operator!= (const TypeDesc &t, BASETYPE b) noexcept { + return (BASETYPE)t.basetype != b || (AGGREGATE)t.aggregate != SCALAR || t.is_array(); + } + OIIO_HOSTDEVICE friend constexpr bool operator!= (BASETYPE b, const TypeDesc &t) noexcept { + return (BASETYPE)t.basetype != b || (AGGREGATE)t.aggregate != SCALAR || t.is_array(); + } + + /// TypeDesc's are equivalent if they are equal, or if their only + /// inequality is differing vector semantics. + OIIO_HOSTDEVICE friend constexpr bool equivalent (const TypeDesc &a, const TypeDesc &b) noexcept { + return a.basetype == b.basetype && a.aggregate == b.aggregate && + (a.arraylen == b.arraylen || (a.is_unsized_array() && b.is_sized_array()) + || (a.is_sized_array() && b.is_unsized_array())); + } + /// Member version of equivalent + OIIO_HOSTDEVICE constexpr bool equivalent (const TypeDesc &b) const noexcept { + return this->basetype == b.basetype && this->aggregate == b.aggregate && + (this->arraylen == b.arraylen || (this->is_unsized_array() && b.is_sized_array()) + || (this->is_sized_array() && b.is_unsized_array())); + } + + /// Is this a 2-vector aggregate (of the given type, float by default)? + OIIO_HOSTDEVICE constexpr bool is_vec2 (BASETYPE b=FLOAT) const noexcept { + return this->aggregate == VEC2 && this->basetype == b && !is_array(); + } + + /// Is this a 3-vector aggregate (of the given type, float by default)? + OIIO_HOSTDEVICE constexpr bool is_vec3 (BASETYPE b=FLOAT) const noexcept { + return this->aggregate == VEC3 && this->basetype == b && !is_array(); + } + + /// Is this a 4-vector aggregate (of the given type, float by default)? + OIIO_HOSTDEVICE constexpr bool is_vec4 (BASETYPE b=FLOAT) const noexcept { + return this->aggregate == VEC4 && this->basetype == b && !is_array(); + } + + /// Is this an array of aggregates that represents a 2D bounding box? + OIIO_HOSTDEVICE constexpr bool is_box2 (BASETYPE b=FLOAT) const noexcept { + return this->aggregate == VEC2 && this->basetype == b && arraylen == 2 + && this->vecsemantics == BOX; + } + + /// Is this an array of aggregates that represents a 3D bounding box? + OIIO_HOSTDEVICE constexpr bool is_box3 (BASETYPE b=FLOAT) const noexcept { + return this->aggregate == VEC3 && this->basetype == b && arraylen == 2 + && this->vecsemantics == BOX; + } + + /// Demote the type to a non-array + /// + OIIO_HOSTDEVICE void unarray (void) noexcept { arraylen = 0; } + + /// Test for lexicographic 'less', comes in handy for lots of STL + /// containers and algorithms. + bool operator< (const TypeDesc &x) const noexcept; + + /// Given base data types of a and b, return a basetype that is a best + /// guess for one that can handle both without any loss of range or + /// precision. + static BASETYPE basetype_merge(TypeDesc a, TypeDesc b); + static BASETYPE basetype_merge(TypeDesc a, TypeDesc b, TypeDesc c) { + return basetype_merge(basetype_merge(a, b), c); + } +}; + +// Validate that TypeDesc can be used directly as POD in a C interface. +static_assert(std::is_default_constructible(), "TypeDesc is not default constructable."); +static_assert(std::is_trivially_copyable(), "TypeDesc is not trivially copyable."); +static_assert(std::is_trivially_destructible(), "TypeDesc is not trivially destructible."); +static_assert(std::is_trivially_move_constructible(), "TypeDesc is not move constructible."); +static_assert(std::is_trivially_copy_constructible(), "TypeDesc is not copy constructible."); +static_assert(std::is_trivially_move_assignable(), "TypeDesc is not move assignable."); + +// Static values for commonly used types. Because these are constexpr, +// they should incur no runtime construction cost and should optimize nicely +// in various ways. +inline constexpr TypeDesc TypeUnknown (TypeDesc::UNKNOWN); +inline constexpr TypeDesc TypeFloat (TypeDesc::FLOAT); +inline constexpr TypeDesc TypeColor (TypeDesc::FLOAT, TypeDesc::VEC3, TypeDesc::COLOR); +inline constexpr TypeDesc TypePoint (TypeDesc::FLOAT, TypeDesc::VEC3, TypeDesc::POINT); +inline constexpr TypeDesc TypeVector (TypeDesc::FLOAT, TypeDesc::VEC3, TypeDesc::VECTOR); +inline constexpr TypeDesc TypeNormal (TypeDesc::FLOAT, TypeDesc::VEC3, TypeDesc::NORMAL); +inline constexpr TypeDesc TypeMatrix33 (TypeDesc::FLOAT, TypeDesc::MATRIX33); +inline constexpr TypeDesc TypeMatrix44 (TypeDesc::FLOAT, TypeDesc::MATRIX44); +inline constexpr TypeDesc TypeMatrix = TypeMatrix44; +inline constexpr TypeDesc TypeFloat2 (TypeDesc::FLOAT, TypeDesc::VEC2); +inline constexpr TypeDesc TypeVector2 (TypeDesc::FLOAT, TypeDesc::VEC2, TypeDesc::VECTOR); +inline constexpr TypeDesc TypeFloat4 (TypeDesc::FLOAT, TypeDesc::VEC4); +inline constexpr TypeDesc TypeVector4 = TypeFloat4; +inline constexpr TypeDesc TypeString (TypeDesc::STRING); +inline constexpr TypeDesc TypeInt (TypeDesc::INT); +inline constexpr TypeDesc TypeUInt (TypeDesc::UINT); +inline constexpr TypeDesc TypeInt32 (TypeDesc::INT); +inline constexpr TypeDesc TypeUInt32 (TypeDesc::UINT); +inline constexpr TypeDesc TypeInt16 (TypeDesc::INT16); +inline constexpr TypeDesc TypeUInt16 (TypeDesc::UINT16); +inline constexpr TypeDesc TypeInt8 (TypeDesc::INT8); +inline constexpr TypeDesc TypeUInt8 (TypeDesc::UINT8); +inline constexpr TypeDesc TypeInt64 (TypeDesc::INT64); +inline constexpr TypeDesc TypeUInt64 (TypeDesc::UINT64); +inline constexpr TypeDesc TypeVector2i(TypeDesc::INT, TypeDesc::VEC2); +inline constexpr TypeDesc TypeVector3i(TypeDesc::INT, TypeDesc::VEC3); +inline constexpr TypeDesc TypeBox2(TypeDesc::FLOAT, TypeDesc::VEC2, TypeDesc::BOX, 2); +inline constexpr TypeDesc TypeBox3(TypeDesc::FLOAT, TypeDesc::VEC3, TypeDesc::BOX, 2); +inline constexpr TypeDesc TypeBox2i(TypeDesc::INT, TypeDesc::VEC2, TypeDesc::BOX, 2); +inline constexpr TypeDesc TypeBox3i(TypeDesc::INT, TypeDesc::VEC3, TypeDesc::BOX, 2); +inline constexpr TypeDesc TypeHalf (TypeDesc::HALF); +inline constexpr TypeDesc TypeTimeCode (TypeDesc::UINT, TypeDesc::SCALAR, TypeDesc::TIMECODE, 2); +inline constexpr TypeDesc TypeKeyCode (TypeDesc::INT, TypeDesc::SCALAR, TypeDesc::KEYCODE, 7); +inline constexpr TypeDesc TypeRational(TypeDesc::INT, TypeDesc::VEC2, TypeDesc::RATIONAL); +inline constexpr TypeDesc TypePointer(TypeDesc::PTR); +inline constexpr TypeDesc TypeUstringhash(TypeDesc::USTRINGHASH); + + + +/// A template mechanism for getting the a base type from C type +/// +template struct BaseTypeFromC {}; +template<> struct BaseTypeFromC { static constexpr TypeDesc::BASETYPE value = TypeDesc::UINT8; }; +template<> struct BaseTypeFromC { static constexpr TypeDesc::BASETYPE value = TypeDesc::UINT8; }; +template<> struct BaseTypeFromC { static constexpr TypeDesc::BASETYPE value = TypeDesc::INT8; }; +template<> struct BaseTypeFromC { static constexpr TypeDesc::BASETYPE value = TypeDesc::INT8; }; +template<> struct BaseTypeFromC { static constexpr TypeDesc::BASETYPE value = TypeDesc::UINT16; }; +template<> struct BaseTypeFromC { static constexpr TypeDesc::BASETYPE value = TypeDesc::UINT16; }; +template<> struct BaseTypeFromC { static constexpr TypeDesc::BASETYPE value = TypeDesc::INT16; }; +template<> struct BaseTypeFromC { static constexpr TypeDesc::BASETYPE value = TypeDesc::INT16; }; +template<> struct BaseTypeFromC { static constexpr TypeDesc::BASETYPE value = TypeDesc::UINT; }; +template<> struct BaseTypeFromC { static constexpr TypeDesc::BASETYPE value = TypeDesc::UINT; }; +template<> struct BaseTypeFromC { static constexpr TypeDesc::BASETYPE value = TypeDesc::INT; }; +template<> struct BaseTypeFromC { static constexpr TypeDesc::BASETYPE value = TypeDesc::INT; }; +template<> struct BaseTypeFromC { static constexpr TypeDesc::BASETYPE value = TypeDesc::UINT64; }; +template<> struct BaseTypeFromC { static constexpr TypeDesc::BASETYPE value = TypeDesc::UINT64; }; +template<> struct BaseTypeFromC { static constexpr TypeDesc::BASETYPE value = TypeDesc::INT64; }; +template<> struct BaseTypeFromC { static constexpr TypeDesc::BASETYPE value = TypeDesc::INT64; }; +#if defined(__GNUC__) && (ULONG_MAX == 0xffffffffffffffff) && !(defined(__APPLE__) && defined(__MACH__)) || defined(__NetBSD__) +// Some platforms consider int64_t and long long to be different types, even +// though they are actually the same size. +static_assert(!std::is_same_v); +static_assert(!std::is_same_v); +template<> struct BaseTypeFromC { static constexpr TypeDesc::BASETYPE value = TypeDesc::UINT64; }; +template<> struct BaseTypeFromC { static constexpr TypeDesc::BASETYPE value = TypeDesc::UINT64; }; +template<> struct BaseTypeFromC { static constexpr TypeDesc::BASETYPE value = TypeDesc::INT64; }; +template<> struct BaseTypeFromC { static constexpr TypeDesc::BASETYPE value = TypeDesc::INT64; }; +#endif +#if defined(_HALF_H_) || defined(IMATH_HALF_H_) +template<> struct BaseTypeFromC { static constexpr TypeDesc::BASETYPE value = TypeDesc::HALF; }; +template<> struct BaseTypeFromC { static constexpr TypeDesc::BASETYPE value = TypeDesc::HALF; }; +#endif +template<> struct BaseTypeFromC { static constexpr TypeDesc::BASETYPE value = TypeDesc::FLOAT; }; +template<> struct BaseTypeFromC { static constexpr TypeDesc::BASETYPE value = TypeDesc::FLOAT; }; +template<> struct BaseTypeFromC { static constexpr TypeDesc::BASETYPE value = TypeDesc::DOUBLE; }; +template<> struct BaseTypeFromC { static constexpr TypeDesc::BASETYPE value = TypeDesc::DOUBLE; }; +template<> struct BaseTypeFromC { static constexpr TypeDesc::BASETYPE value = TypeDesc::STRING; }; +template<> struct BaseTypeFromC { static constexpr TypeDesc::BASETYPE value = TypeDesc::STRING; }; +template<> struct BaseTypeFromC { static constexpr TypeDesc::BASETYPE value = TypeDesc::STRING; }; +template<> struct BaseTypeFromC { static constexpr TypeDesc::BASETYPE value = TypeDesc::STRING; }; +template<> struct BaseTypeFromC { static constexpr TypeDesc::BASETYPE value = TypeDesc::STRING; }; +template<> struct BaseTypeFromC { static constexpr TypeDesc::BASETYPE value = TypeDesc::STRING; }; +template<> struct BaseTypeFromC { static constexpr TypeDesc::BASETYPE value = TypeDesc::STRING; }; +template<> struct BaseTypeFromC { static constexpr TypeDesc::BASETYPE value = TypeDesc::STRING; }; +template<> struct BaseTypeFromC { static constexpr TypeDesc::BASETYPE value = TypeDesc::STRING; }; +template struct BaseTypeFromC { static constexpr TypeDesc::BASETYPE value = TypeDesc::STRING; }; +template struct BaseTypeFromC { static constexpr TypeDesc::BASETYPE value = TypeDesc::STRING; }; +template struct BaseTypeFromC { static constexpr TypeDesc::BASETYPE value = TypeDesc::PTR; }; +template struct BaseTypeFromC { static constexpr TypeDesc::BASETYPE value = TypeDesc::PTR; }; +template struct BaseTypeFromC { static constexpr TypeDesc::BASETYPE value = TypeDesc::PTR; }; + +/// `BaseTypeFromC_v` is shorthand for `BaseTypeFromC::value()`. +template +constexpr TypeDesc::BASETYPE BaseTypeFromC_v = BaseTypeFromC>::value; + +/// A template mechanism for getting the TypeDesc from a C type. +/// The default for simple types is just the TypeDesc based on BaseTypeFromC. +/// But we can specialize more complex types. +template struct TypeDescFromC { static const constexpr TypeDesc value() { return TypeDesc(BaseTypeFromC_v); } }; +template<> struct TypeDescFromC { static const constexpr TypeDesc value() { return TypeDesc::INT32; } }; +template<> struct TypeDescFromC { static const constexpr TypeDesc value() { return TypeDesc::UINT32; } }; +template<> struct TypeDescFromC { static const constexpr TypeDesc value() { return TypeDesc::INT16; } }; +template<> struct TypeDescFromC { static const constexpr TypeDesc value() { return TypeDesc::UINT16; } }; +template<> struct TypeDescFromC { static const constexpr TypeDesc value() { return TypeDesc::INT8; } }; +template<> struct TypeDescFromC { static const constexpr TypeDesc value() { return TypeDesc::UINT8; } }; +template<> struct TypeDescFromC { static const constexpr TypeDesc value() { return TypeDesc::FLOAT; } }; +#if defined(_HALF_H_) || defined(IMATH_HALF_H_) +template<> struct TypeDescFromC { static const constexpr TypeDesc value() { return TypeDesc::HALF; } }; +#endif +template<> struct TypeDescFromC { static const constexpr TypeDesc value() { return TypeDesc::DOUBLE; } }; +template<> struct TypeDescFromC { static const constexpr TypeDesc value() { return TypeDesc::STRING; } }; +template<> struct TypeDescFromC { static const constexpr TypeDesc value() { return TypeDesc::STRING; } }; +template<> struct TypeDescFromC { static const constexpr TypeDesc value() { return TypeDesc::STRING; } }; +template struct TypeDescFromC { static const constexpr TypeDesc value() { return TypeDesc::STRING; } }; +template struct TypeDescFromC { static const constexpr TypeDesc value() { return TypeDesc::STRING; } }; +template<> struct TypeDescFromC { static const constexpr TypeDesc value() { return TypeDesc::STRING; } }; +template struct TypeDescFromC { static const constexpr TypeDesc value() { return TypeDesc::PTR; } }; +template struct TypeDescFromC { static const constexpr TypeDesc value() { return TypeDesc::PTR; } }; +#ifdef INCLUDED_IMATHVEC_H +template<> struct TypeDescFromC { static const constexpr TypeDesc value() { return TypeVector; } }; +template<> struct TypeDescFromC { static const constexpr TypeDesc value() { return TypeVector2; } }; +template<> struct TypeDescFromC { static const constexpr TypeDesc value() { return TypeVector4; } }; +template<> struct TypeDescFromC { static const constexpr TypeDesc value() { return TypeVector2i; } }; +template<> struct TypeDescFromC { static const constexpr TypeDesc value() { return TypeVector3i; } }; +#endif +#ifdef INCLUDED_IMATHCOLOR_H +template<> struct TypeDescFromC { static const constexpr TypeDesc value() { return TypeColor; } }; +#endif +#ifdef INCLUDED_IMATHMATRIX_H +template<> struct TypeDescFromC { static const constexpr TypeDesc value() { return TypeMatrix33; } }; +template<> struct TypeDescFromC { static const constexpr TypeDesc value() { return TypeMatrix44; } }; +template<> struct TypeDescFromC { static const constexpr TypeDesc value() { return TypeDesc(TypeDesc::DOUBLE, TypeDesc::MATRIX33); } }; +template<> struct TypeDescFromC { static const constexpr TypeDesc value() { return TypeDesc(TypeDesc::DOUBLE, TypeDesc::MATRIX44); } }; +#endif +#ifdef INCLUDED_IMATHBOX_H +template<> struct TypeDescFromC { static const constexpr TypeDesc value() { return TypeBox2; } }; +template<> struct TypeDescFromC { static const constexpr TypeDesc value() { return TypeBox2i; } }; +template<> struct TypeDescFromC { static const constexpr TypeDesc value() { return TypeBox3; } }; +template<> struct TypeDescFromC { static const constexpr TypeDesc value() { return TypeBox3i; } }; +#endif + +/// `TypeDescFromC_v` is shorthand for `TypeDescFromC::value()`. +template +constexpr TypeDesc TypeDescFromC_v = TypeDescFromC>::value(); + + + +/// A template mechanism for getting C type of TypeDesc::BASETYPE. +/// +template struct CType {}; +template<> struct CType<(int)TypeDesc::UINT8> { typedef unsigned char type; }; +template<> struct CType<(int)TypeDesc::INT8> { typedef char type; }; +template<> struct CType<(int)TypeDesc::UINT16> { typedef unsigned short type; }; +template<> struct CType<(int)TypeDesc::INT16> { typedef short type; }; +template<> struct CType<(int)TypeDesc::UINT> { typedef unsigned int type; }; +template<> struct CType<(int)TypeDesc::INT> { typedef int type; }; +template<> struct CType<(int)TypeDesc::UINT64> { typedef unsigned long long type; }; +template<> struct CType<(int)TypeDesc::INT64> { typedef long long type; }; +#if defined(_HALF_H_) || defined(IMATH_HALF_H_) +template<> struct CType<(int)TypeDesc::HALF> { typedef half type; }; +#endif +template<> struct CType<(int)TypeDesc::FLOAT> { typedef float type; }; +template<> struct CType<(int)TypeDesc::DOUBLE> { typedef double type; }; +template<> struct CType<(int)TypeDesc::USTRINGHASH> { typedef ustringhash type; }; + + + +/// Helper class for tostring() that contains a whole bunch of parameters +/// that control exactly how all the data types that can be described as +/// TypeDesc ought to be formatted as a string. Uses printf-like +/// conventions. This will someday be deprecated. +struct OIIO_UTIL_API tostring_formatting { + // Printf-like formatting specs for int, float, string, pointer data. + const char *int_fmt = "%d"; + const char *float_fmt = "%g"; + const char *string_fmt = "\"%s\""; + const char *ptr_fmt = "%p"; + // Aggregates are multi-part types, like VEC3, etc. How do we mark the + // start, separation between elements, and end? + const char *aggregate_begin = "("; + const char *aggregate_end = ")"; + const char *aggregate_sep = ","; + // For arrays, how do we mark the start, separation between elements, + // and end? + const char *array_begin = "{"; + const char *array_end = "}"; + const char *array_sep = ","; + // Miscellaneous control flags, OR the enum values together. + enum Flags { None=0, escape_strings=1, quote_single_string=2 }; + int flags = escape_strings; + // Reserved space for future expansion without breaking the ABI. + const char *uint_fmt = "%u"; + const char *reserved2 = ""; + const char *reserved3 = ""; + bool use_sprintf = true; + + enum Notation { STDFORMAT }; + + tostring_formatting() = default; + tostring_formatting(const char *int_fmt, const char *float_fmt = "%g", + const char *string_fmt = "\"%s\"", const char *ptr_fmt = "%p", + const char *aggregate_begin = "(", const char *aggregate_end = ")", + const char *aggregate_sep = ",", const char *array_begin = "{", + const char *array_end = "}", const char *array_sep = ",", + int flags = escape_strings, + const char *uint_fmt = "%u"); + + // Alternative ctr for std::format notation. You must pass STDFORMAT + // as the first argument. + tostring_formatting(Notation notation, + const char *int_fmt = "{}", const char *uint_fmt = "{}", + const char *float_fmt = "{}", + const char *string_fmt = "\"{}\"", const char *ptr_fmt = "{}", + const char *aggregate_begin = "(", const char *aggregate_end = ")", + const char *aggregate_sep = ",", const char *array_begin = "{", + const char *array_end = "}", const char *array_sep = ",", + int flags = escape_strings); +}; + + + +/// Return a string containing the data values formatted according +/// to the type and the optional formatting control arguments. Will be +/// deprecated someday as printf formatting falls out of favor. +OIIO_UTIL_API std::string +tostring(TypeDesc type, const void* data, const tostring_formatting& fmt = {}); + + + +/// Given data pointed to by src and described by srctype, copy it to the +/// memory pointed to by dst and described by dsttype, and return true if a +/// conversion is possible, false if it is not. If the types are equivalent, +/// this is a straightforward memory copy. If the types differ, there are +/// several non-equivalent type conversions that will nonetheless succeed: +/// * If dsttype is a string (and therefore dst points to a ustring or a +/// `char*`): it will always succeed, producing a string akin to calling +/// `tostring()`. +/// * If dsttype is int32 or uint32: other integer types will do their best +/// (caveat emptor if you mix signed/unsigned). Also a source string will +/// convert to int if and only if its characters form a valid integer. +/// * If dsttype is float: integers and other float types will do +/// their best conversion; strings will convert if and only if their +/// characters form a valid float number. +OIIO_UTIL_API bool +convert_type(TypeDesc srctype, const void* src, + TypeDesc dsttype, void* dst, int n = 1); + + +OIIO_NAMESPACE_3_1_END + + + + +// Supply a fmtlib compatible custom formatter for TypeDesc. +#if FMT_VERSION >= 100000 +template<> struct fmt::formatter : ostream_formatter {}; +#else +template <> +struct fmt::formatter { + // Parses format specification + // C++14: constexpr auto parse(format_parse_context& ctx) const { + auto parse(format_parse_context &ctx) -> decltype(ctx.begin()) // c++11 + { + // Get the presentation type, if any. Required to be 's'. + auto it = ctx.begin(), end = ctx.end(); + // Skip any width specifier. Remember that this is only for old + // versions of fmt, so just don't sweat it. + while (it != end && isdigit(*it)) ++it; + if (it != end && (*it == 's')) ++it; + // Check if reached the end of the range: + if (it != end && *it != '}') + throw format_error("invalid format"); + // Return an iterator past the end of the parsed range: + return it; + } + + template + auto format(const OIIO::TypeDesc& t, FormatContext& ctx) OIIO_FMT_CUSTOM_FORMATTER_CONST + { + // C++14: auto format(const OIIO::TypeDesc& p, FormatContext& ctx) const { + // ctx.out() is an output iterator to write to. + return format_to(ctx.out(), "{}", t.c_str()); + } +}; +#endif diff --git a/third_party/tlRender-install-Release/include/OpenImageIO/unittest.h b/third_party/tlRender-install-Release/include/OpenImageIO/unittest.h new file mode 100644 index 00000000..a605cc5d --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenImageIO/unittest.h @@ -0,0 +1,264 @@ +// Copyright Contributors to the OpenImageIO project. +// SPDX-License-Identifier: Apache-2.0 +// https://github.com/AcademySoftwareFoundation/OpenImageIO + +#pragma once + +#include +#include +#include +#include + +#include +#include +#include + + +OIIO_NAMESPACE_BEGIN + +namespace simd { +// Force a float-based abs and max to appear in namespace simd +inline float +abs(float x) +{ + return std::abs(x); +} +inline float +max(float x, float y) +{ + return std::max(x, y); +} +} // namespace simd + +namespace pvt { + +class UnitTestFailureCounter { +public: + UnitTestFailureCounter() noexcept + : m_failures(0) + { + } + ~UnitTestFailureCounter() + { + if (m_failures) { + std::cout << Sysutil::Term(std::cout).ansi("red", "ERRORS!\n"); + std::exit(m_failures != 0); + } else { +#ifndef OIIO_UNIT_TEST_QUIET_SUCCESS + std::cout << Sysutil::Term(std::cout).ansi("green", "OK\n"); +#endif + } + } + const UnitTestFailureCounter& operator++() noexcept // prefix + { + ++m_failures; + return *this; + } + int operator++(int) noexcept { return m_failures++; } // postfix + UnitTestFailureCounter operator+=(int i) noexcept + { + m_failures += i; + return *this; + } + operator int() const noexcept { return m_failures; } + +private: + int m_failures = 0; +}; + + +template +inline bool +equal_approx(const X& x, const Y& y) +{ + using namespace simd; + return all(abs((x) - (y)) <= 0.001f * max(abs(x), abs(y))); +} + + +} // end namespace pvt + +OIIO_NAMESPACE_END + +// Helper: print entire vectors. This makes the OIIO_CHECK_EQUAL macro +// work for std::vector! +template +inline std::ostream& +operator<<(std::ostream& out, const std::vector& v) +{ + out << '{' << OIIO::Strutil::join(v, ",") << '}'; + return out; +} + +static OIIO::pvt::UnitTestFailureCounter unit_test_failures; + + + +/// OIIO_CHECK_* macros checks if the conditions is met, and if not, +/// prints an error message indicating the module and line where the +/// error occurred, but does NOT abort. This is helpful for unit tests +/// where we do not want one failure. +#define OIIO_CHECK_ASSERT(x) \ + ((x) ? ((void)0) \ + : ((std::cout << OIIO::Sysutil::Term(std::cout).ansi("red,bold") \ + << __FILE__ << ":" << __LINE__ << ":\n" \ + << "FAILED: " \ + << OIIO::Sysutil::Term(std::cout).ansi("normal") << #x \ + << "\n"), \ + (void)++unit_test_failures)) + +#define OIIO_CHECK_EQUAL(x, y) \ + (((x) == (y)) \ + ? ((void)0) \ + : ((std::cout << OIIO::Sysutil::Term(std::cout).ansi("red,bold") \ + << __FILE__ << ":" << __LINE__ << ":\n" \ + << "FAILED: " \ + << OIIO::Sysutil::Term(std::cout).ansi("normal") << #x \ + << " == " << #y << "\n" \ + << "\tvalues were '" << (x) << "' and '" << (y) \ + << "'\n"), \ + (void)++unit_test_failures)) + +#define OIIO_CHECK_FALSE(x) OIIO_CHECK_EQUAL(x, false) + +#define OIIO_CHECK_EQUAL_THRESH(x, y, eps) \ + ((std::abs((x) - (y)) <= eps) \ + ? ((void)0) \ + : ((std::cout << OIIO::Sysutil::Term(std::cout).ansi("red,bold") \ + << __FILE__ << ":" << __LINE__ << ":\n" \ + << "FAILED: " \ + << OIIO::Sysutil::Term(std::cout).ansi("normal") << #x \ + << " == " << #y << "\n" \ + << "\tvalues were '" << (x) << "' and '" << (y) << "'" \ + << ", diff was " << std::abs((x) - (y)) << "\n"), \ + (void)++unit_test_failures)) + +#define OIIO_CHECK_EQUAL_THRESH_REL(x, y, epsabs, epsrel) \ + ((std::abs((x) - (y)) <= (epsabs + epsrel * std::max(abs(x), abs(y)))) \ + ? ((void)0) \ + : ((std::cout << OIIO::Sysutil::Term(std::cout).ansi("red,bold") \ + << __FILE__ << ":" << __LINE__ << ":\n" \ + << "FAILED: " \ + << OIIO::Sysutil::Term(std::cout).ansi("normal") << #x \ + << " == " << #y << "\n" \ + << "\tvalues were '" << (x) << "' and '" << (y) << "'" \ + << ", diff was " << std::abs((x) - (y)) << "\n"), \ + (void)++unit_test_failures)) + +#define OIIO_CHECK_EQUAL_APPROX(x, y) \ + (OIIO::pvt::equal_approx(x, y) \ + ? ((void)0) \ + : ((std::cout << OIIO::Sysutil::Term(std::cout).ansi("red,bold") \ + << __FILE__ << ":" << __LINE__ << ":\n" \ + << "FAILED: " \ + << OIIO::Sysutil::Term(std::cout).ansi("normal") << #x \ + << " == " << #y << "\n" \ + << "\tvalues were '" << (x) << "' and '" << (y) << "'" \ + << ", diff was " << ((x) - (y)) << "\n"), \ + (void)++unit_test_failures)) + +#define OIIO_CHECK_NE(x, y) \ + (((x) != (y)) \ + ? ((void)0) \ + : ((std::cout << OIIO::Sysutil::Term(std::cout).ansi("red,bold") \ + << __FILE__ << ":" << __LINE__ << ":\n" \ + << "FAILED: " \ + << OIIO::Sysutil::Term(std::cout).ansi("normal") << #x \ + << " != " << #y << "\n" \ + << "\tvalues were '" << (x) << "' and '" << (y) \ + << "'\n"), \ + (void)++unit_test_failures)) + +#define OIIO_CHECK_LT(x, y) \ + (((x) < (y)) \ + ? ((void)0) \ + : ((std::cout << OIIO::Sysutil::Term(std::cout).ansi("red,bold") \ + << __FILE__ << ":" << __LINE__ << ":\n" \ + << "FAILED: " \ + << OIIO::Sysutil::Term(std::cout).ansi("normal") << #x \ + << " < " << #y << "\n" \ + << "\tvalues were '" << (x) << "' and '" << (y) \ + << "'\n"), \ + (void)++unit_test_failures)) + +#define OIIO_CHECK_GT(x, y) \ + (((x) > (y)) \ + ? ((void)0) \ + : ((std::cout << OIIO::Sysutil::Term(std::cout).ansi("red,bold") \ + << __FILE__ << ":" << __LINE__ << ":\n" \ + << "FAILED: " \ + << OIIO::Sysutil::Term(std::cout).ansi("normal") << #x \ + << " > " << #y << "\n" \ + << "\tvalues were '" << (x) << "' and '" << (y) \ + << "'\n"), \ + (void)++unit_test_failures)) + +#define OIIO_CHECK_LE(x, y) \ + (((x) <= (y)) \ + ? ((void)0) \ + : ((std::cout << OIIO::Sysutil::Term(std::cout).ansi("red,bold") \ + << __FILE__ << ":" << __LINE__ << ":\n" \ + << "FAILED: " \ + << OIIO::Sysutil::Term(std::cout).ansi("normal") << #x \ + << " <= " << #y << "\n" \ + << "\tvalues were '" << (x) << "' and '" << (y) \ + << "'\n"), \ + (void)++unit_test_failures)) + +#define OIIO_CHECK_GE(x, y) \ + (((x) >= (y)) \ + ? ((void)0) \ + : ((std::cout << OIIO::Sysutil::Term(std::cout).ansi("red,bold") \ + << __FILE__ << ":" << __LINE__ << ":\n" \ + << "FAILED: " \ + << OIIO::Sysutil::Term(std::cout).ansi("normal") << #x \ + << " >= " << #y << "\n" \ + << "\tvalues were '" << (x) << "' and '" << (y) \ + << "'\n"), \ + (void)++unit_test_failures)) + + +// Special SIMD related equality checks that use all() +#define OIIO_CHECK_SIMD_EQUAL(x, y) \ + (all((x) == (y)) \ + ? ((void)0) \ + : ((std::cout << OIIO::Sysutil::Term(std::cout).ansi("red,bold") \ + << __FILE__ << ":" << __LINE__ << ":\n" \ + << "FAILED: " \ + << OIIO::Sysutil::Term(std::cout).ansi("normal") << #x \ + << " == " << #y << "\n" \ + << "\tvalues were '" << (x) << "' and '" << (y) \ + << "'\n"), \ + (void)++unit_test_failures)) + +#define OIIO_CHECK_SIMD_EQUAL_THRESH(x, y, eps) \ + ((all(abs((x) - (y)) <= eps)) \ + ? ((void)0) \ + : (Strutil::print("{}{}:{}:\nFAILED: {}{} == {}\n", \ + OIIO::Sysutil::Term(std::cout).ansi("red,bold"), \ + __FILE__, __LINE__, \ + OIIO::Sysutil::Term(std::cout).ansi("normal"), #x, \ + #y), \ + Strutil::print( \ + "\tvalues were '{:.8g}' and '{:.8g}', diff was {:.8g}\n", (x), \ + (y), abs((x) - (y))), \ + (void)++unit_test_failures)) + + +// Test if ImageBuf operation got an error. It's a lot like simply testing +// OIIO_CHECK_ASSERT(x), but if x is false, it will get an error message +// from the buffer and incorporate it into the failure message. +// Call like this, for example: +// ImageBuf buf; +// OIIO_CHECK_IMAGEBUF_STATUS(buf, +// ImageBufAlgo::Func (buf, ...) +// ); +#define OIIO_CHECK_IMAGEBUF_STATUS(buf, x) \ + ((x && !buf.has_error()) \ + ? ((void)0) \ + : ((std::cout << OIIO::Sysutil::Term(std::cout).ansi("red,bold") \ + << __FILE__ << ":" << __LINE__ << ":\n" \ + << "FAILED: " \ + << OIIO::Sysutil::Term(std::cout).ansi("normal") << #x \ + << ": " << buf.geterror() << "\n"), \ + (void)++unit_test_failures)) diff --git a/third_party/tlRender-install-Release/include/OpenImageIO/unordered_map_concurrent.h b/third_party/tlRender-install-Release/include/OpenImageIO/unordered_map_concurrent.h new file mode 100644 index 00000000..1e7d96af --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenImageIO/unordered_map_concurrent.h @@ -0,0 +1,602 @@ +// Copyright Contributors to the OpenImageIO project. +// SPDX-License-Identifier: Apache-2.0 +// https://github.com/AcademySoftwareFoundation/OpenImageIO + + +#pragma once + +#include +#include +#include + +OIIO_NAMESPACE_3_1_BEGIN + + +namespace pvt { + +// SFINAE test for whether class T has method `iterator find(key,hash)`. +// As described here: https://www.bfilipek.com/2016/02/sfinae-followup.html +// clang-format off +template +class has_find_with_hash { + using key_type = typename T::key_type; + using iterator_type = typename T::iterator; + template + static constexpr std::false_type test(...) { return {}; } + template + static constexpr auto test(U* u) -> + typename std::is_samefind(key_type(), size_t(0)))>::type { return {}; } +public: + static constexpr bool value = test(nullptr); +}; +// clang-format on + +} // namespace pvt + + +// Helper function: find_with_hash. +// +// Calls `map.find(key, hash)` if a method with that signature exists for +// the Map type, otherwise just calls `map.find(key)`. +// +// This lets us use unordered_map_concurrent with underlying bin map types +// that do (e.g., robin_map) or do not (e.g., std::unordered_map) support a +// find method taking a precomputed hash. +template::value)> +typename Map::iterator +find_with_hash(Map& map, const Key& key, size_t hash) +{ + return map.find(key, hash); +} + +template::value)> +typename Map::iterator +find_with_hash(Map& map, const Key& key, size_t /*hash*/) +{ + return map.find(key); +} + + + +/// unordered_map_concurrent provides an unordered_map replacement that +/// is optimized for concurrent access. Its principle of operation is +/// similar to Java's ConcurrentHashMap. +/// +/// With naive use of an unordered_map, multiple threads would have to +/// lock a mutex of some kind to control access to the map, either with +/// a unique full lock, or with a reader/writer lock. But as the number +/// of threads contending for this shared resource rises, they end up +/// locking each other out and the map becomes a thread bottleneck. +/// +/// unordered_map_concurrent solves this problem by internally splitting +/// the hash map into several disjoint bins, each of which is a standard +/// unordered_map. For any given map item, the hash of its key +/// determines both the bin as well as its hashing within the bin (i.e., +/// we break a big hash map into lots of little hash maps, +/// deterministically determined by the key). Thus, we should expect +/// map entries to be spread more or less evenly among the bins. There +/// is no mutex that locks the map as a whole; instead, each bin is +/// locked individually. If the number of bins is larger than the +/// typical number of threads, most of the time two (or more) threads +/// accessing the map simultaneously will not be accessing the same bin, +/// and therefore will not be contending for the same lock. +/// +/// unordered_map_concurrent provides an iterator which points to an +/// entry in the map and also knows which bin it is in and implicitly +/// holds a lock on the bin. When the iterator is destroyed, the lock +/// on that bin is released. When the iterator is incremented in such a +/// way that it transitions from the last entry of its current bin to +/// the first entry of the next bin, it will also release its current +/// lock and obtain a lock on the next bin. +/// + +template, + class PRED = std::equal_to, size_t BINS = 16, + class BINMAP = std::unordered_map> +class unordered_map_concurrent { +public: + typedef BINMAP BinMap_t; + typedef typename BINMAP::iterator BinMap_iterator_t; + using key_type = KEY; + +public: + unordered_map_concurrent() { m_size = 0; } + + ~unordered_map_concurrent() + { + // for (size_t i = 0; i < BINS; ++i) + // std::cout << "Bin " << i << ": " << m_bins[i].map.size() << "\n"; + } + + /// An unordered_map_concurrent::iterator points to a specific entry + /// in the umc, and holds a lock to the bin the entry is in. + class iterator { + public: + friend class unordered_map_concurrent; + + public: + /// Construct an unordered_map_concurrent iterator that points + /// to nothing. + iterator(unordered_map_concurrent* umc = NULL) + : m_umc(umc) + , m_bin(-1) + , m_locked(false) + { + } + + /// Copy constructor of an unordered_map_concurrent iterator + /// transfers the lock (if held) to this. Caveat: the copied + /// iterator no longer holds the lock! + iterator(const iterator& src) + { + m_umc = src.m_umc; + m_bin = src.m_bin; + m_biniterator = src.m_biniterator; + m_locked = src.m_locked; + // assignment transfers lock ownership + *(const_cast(&src.m_locked)) = false; + } + + /// Destroying an unordered_map_concurrent iterator releases any + /// bin locks it held. + ~iterator() { clear(); } + + /// Totally invalidate this iterator -- point it to nothing + /// (releasing any locks it may have had). + void clear() + { + if (m_umc) { + unbin(); + m_umc = NULL; + } + } + + // Dereferencing returns a reference to the hash table entry the + // iterator refers to. + const typename BinMap_t::value_type& operator*() const + { + return *m_biniterator; + } + + /// Dereferencing returns a reference to the hash table entry the + /// iterator refers to. + const typename BinMap_t::value_type* operator->() const + { + return &(*m_biniterator); + } + + /// Treating an iterator as a bool yields true if it points to a + /// valid element of one of the bins of the map, false if it's + /// equivalent to the end() iterator. + operator bool() + { + return m_umc && m_bin >= 0 + && m_biniterator != m_umc->m_bins[m_bin].map.end(); + } + + /// Iterator assignment transfers ownership of any bin locks + /// held by the operand. + iterator& operator=(const iterator& src) + { + unbin(); + m_umc = src.m_umc; + m_bin = src.m_bin; + m_biniterator = src.m_biniterator; + m_locked = src.m_locked; + // assignment transfers lock ownership + *(const_cast(&src.m_locked)) = false; + return *this; + } + + bool operator==(const iterator& other) const + { + if (m_umc != other.m_umc) + return false; + if (m_bin == -1 && other.m_bin == -1) + return true; + return m_bin == other.m_bin && m_biniterator == other.m_biniterator; + } + bool operator!=(const iterator& other) { return !(*this == other); } + + /// Increment to the next entry in the map. If we finish the + /// bin we're in, move on to the next bin (releasing our lock on + /// the old bin and acquiring a lock on the new bin). If we + /// finish the last bin of the map, return the end() iterator. + void operator++() + { + OIIO_DASSERT(m_umc); + OIIO_DASSERT(m_bin >= 0); + ++m_biniterator; + while (m_biniterator == m_umc->m_bins[m_bin].map.end()) { + if (m_bin == BINS - 1) { + // ran off the end + unbin(); + return; + } + rebin(m_bin + 1); + } + } + void operator++(int) { ++(*this); } + + /// Lock the bin we point to, if not already locked. + void lock() + { + if (m_bin >= 0 && !m_locked) { + m_umc->m_bins[m_bin].lock(); + m_locked = true; + } + } + /// Unlock the bin we point to, if locked. + void unlock() + { + if (m_bin >= 0 && m_locked) { + m_umc->m_bins[m_bin].unlock(); + m_locked = false; + } + } + + /// Without changing the lock status (i.e., the caller already + /// holds the lock on the iterator's bin), increment to the next + /// element within the bin. Return true if it's pointing to a + /// valid element afterwards, false if it ran off the end of the + /// bin contents. + bool incr_no_lock() + { + ++m_biniterator; + return (m_biniterator != m_umc->m_bins[m_bin].map.end()); + } + + private: + // No longer refer to a particular bin, release lock on the bin + // it had (if any). + void unbin() + { + if (m_bin >= 0) { + if (m_locked) + unlock(); + m_bin = -1; + } + } + + // Point this iterator to a different bin, releasing locks on + // the bin it previously referred to. + void rebin(int newbin) + { + OIIO_DASSERT(m_umc); + unbin(); + m_bin = newbin; + lock(); + m_biniterator = m_umc->m_bins[m_bin].map.begin(); + } + + unordered_map_concurrent* m_umc; // which umc this iterator refers to + int m_bin; // which bin within the umc + BinMap_iterator_t m_biniterator; // which entry within the bin + bool m_locked; // do we own the lock on the bin? + }; + + + /// Return an interator pointing to the first entry in the map. + iterator begin() + { + iterator i(this); + i.rebin(0); + while (i.m_biniterator == m_bins[i.m_bin].map.end()) { + if (i.m_bin == BINS - 1) { + // ran off the end + i.unbin(); + return i; + } + i.rebin(i.m_bin + 1); + } + return i; + } + + /// Return an iterator signifying the end of the map (no valid + /// entry pointed to). + iterator end() + { + iterator i(this); + return i; + } + + /// Search for key. If found, return an iterator referring to the + /// element, otherwise, return an iterator that is equivalent to + /// this->end(). If do_lock is true, lock the bin that we're + /// searching and return the iterator in a locked state, and unlock + /// the bin again if not found; however, if do_lock is false, assume + /// that the caller already has the bin locked, so do no locking or + /// unlocking and return an iterator that is unaware that it holds a + /// lock. + iterator find(const KEY& key, bool do_lock = true) + { + size_t hash = m_hash(key); + size_t b = whichbin(hash); + Bin& bin(m_bins[b]); + if (do_lock) + bin.lock(); + auto it = find_with_hash(bin.map, key, hash); + if (it == bin.map.end()) { + // not found -- return the 'end' iterator + if (do_lock) + bin.unlock(); + return end(); + } + // Found + iterator i(this); + i.m_bin = (unsigned)b; + i.m_biniterator = it; + i.m_locked = do_lock; + return i; + } + + /// Search for key. If found, return an iterator referring to the + /// existing element, otherwise, insert the value and return an iterator + /// to the newly added element. If do_lock is true, lock the bin that + /// we're searching and return the iterator in a locked state; however, + /// if do_lock is false, assume that the caller already has the bin + /// locked, so do no locking and return an iterator that is unaware that + /// it holds a lock. + std::pair find_or_insert(const KEY& key, const VALUE& value, + bool do_lock = true) + { + size_t hash = m_hash(key); + size_t b = whichbin(hash); + bool inserted = false; + Bin& bin(m_bins[b]); + // We're returning an iterator no matter what, so prepare it + // partially now, before we are holding any lock. + iterator iret(this); + iret.m_bin = (unsigned)b; + iret.m_locked = do_lock; + if (do_lock) + bin.lock(); + iret.m_biniterator = find_with_hash(bin.map, key, hash); + if (iret.m_biniterator == bin.map.end()) { + // Not found in the map, insert it + auto result = bin.map.emplace(key, value); + if (result.second) { + // the insert was successful! + ++m_size; + } + iret.m_biniterator = result.first; + inserted = true; + } + return { iret, inserted }; + } + + /// Search for key. If found, return true and store the value. If not + /// found, return false and do not alter value. If do_lock is true, + /// read-lock the bin while we're searching, and release it before + /// returning; however, if do_lock is false, assume that the caller + /// already has the bin locked, so do no locking or unlocking. + bool retrieve(const KEY& key, VALUE& value, bool do_lock = true) + { + size_t hash = m_hash(key); + size_t b = whichbin(hash); + Bin& bin(m_bins[b]); + if (do_lock) + bin.read_lock(); + auto it = find_with_hash(bin.map, key, hash); + bool found = (it != bin.map.end()); + if (found) + value = it->second; + if (do_lock) + bin.read_unlock(); + return found; + } + + /// Insert into the hash map if it's not already there. + /// Return true if added, false if it was already present. + /// If it was already present in the map, replace `value` with the + /// value stored in the map. + /// If do_lock is true, lock the bin containing key while doing this + /// operation; if do_lock is false, assume that the caller already + /// has the bin locked, so do no locking or unlocking. + bool insert_retrieve(const KEY& key, VALUE& value, VALUE& mapvalue, + bool do_lock = true) + { + size_t hash = m_hash(key); + size_t b = whichbin(hash); + Bin& bin(m_bins[b]); + if (do_lock) + bin.lock(); + auto result = bin.map.emplace(key, value); + if (result.second) { + // the insert was successful! + ++m_size; + } else { + // Replace caller's value with the one already in the table. + value = result.first->second; + } + if (do_lock) + bin.unlock(); + return result.second; + } + + /// Insert into the hash map if it's not already there. + /// Return true if added, false if it was already present. + /// If do_lock is true, lock the bin containing key while doing this + /// operation; if do_lock is false, assume that the caller already + /// has the bin locked, so do no locking or unlocking. + /// + /// N.B.: This method returns a bool, whereas std::unordered_map::insert + /// returns a pair. If you want the more standard + /// functionalty, we call that find_or_insert(). Sorry for the mixup, + /// it's too late to rename it now to conform to the standard. + bool insert(const KEY& key, const VALUE& value, bool do_lock = true) + { + size_t hash = m_hash(key); + size_t b = whichbin(hash); + Bin& bin(m_bins[b]); + if (do_lock) + bin.lock(); + auto result = bin.map.emplace(key, value); + if (result.second) { + // the insert was successful! + ++m_size; + } + if (do_lock) + bin.unlock(); + return result.second; + } + + /// If the key is in the map, safely erase it. + /// If do_lock is true, lock the bin containing key while doing this + /// operation; if do_lock is false, assume that the caller already + /// has the bin locked, so do no locking or unlocking. + void erase(const KEY& key, bool do_lock = true) + { + size_t hash = m_hash(key); + size_t b = whichbin(hash); + Bin& bin(m_bins[b]); + if (do_lock) + bin.lock(); + bin.map.erase(key); + --m_size; + if (do_lock) + bin.unlock(); + } + + /// Removes all items from the map. + void clear() + { + if (empty()) + return; + for (size_t b = 0; b < BINS; b++) { + BinMap_t map; + Bin& bin(m_bins[b]); + bin.lock(); + if (!bin.map.empty()) { + bin.map.swap(map); + m_size -= map.size(); + } + bin.unlock(); + } + } + + /// Return true if the entire map is empty. + bool empty() { return m_size == 0; } + + /// Return the total number of entries in the map. + size_t size() { return size_t(m_size); } + + /// Explicitly lock the bin that will contain the key (regardless of + /// whether there is such an entry in the map), and return its bin + /// number. + size_t lock_bin(const KEY& key) + { + size_t hash = m_hash(key); + size_t b = whichbin(hash); + m_bins[b].lock(); + return b; + } + + /// Explicitly unlock the specified bin (this assumes that the caller + /// holds the lock). + void unlock_bin(size_t bin) { m_bins[bin].unlock(); } + + // Return a mask that is 1 for bits of the hash that are not used to + // determine the bin number. + static constexpr size_t nobin_mask() { return ~size_t(0) >> log2(BINS); } + +private: + struct Bin { + OIIO_CACHE_ALIGN // align bin to cache line + mutable spin_rw_mutex mutex; // mutex for this bin + BinMap_t map; // hash map for this bin +#ifndef NDEBUG + mutable atomic_int m_nrlocks; // for debugging + mutable atomic_int m_nwlocks; // for debugging +#endif + + Bin() + { +#ifndef NDEBUG + m_nrlocks = 0; + m_nwlocks = 0; +#endif + } + ~Bin() + { +#ifndef NDEBUG + OIIO_DASSERT(m_nrlocks == 0 && m_nwlocks == 0); +#endif + } + + void read_lock() const + { + mutex.read_lock(); +#ifndef NDEBUG + ++m_nrlocks; + OIIO_DASSERT_MSG(m_nwlocks == 0, + "oops, m_nrlocks = %d, m_nwlocks = %d", + (int)m_nrlocks, (int)m_nwlocks); +#endif + } + void read_unlock() const + { +#ifndef NDEBUG + OIIO_DASSERT_MSG(m_nwlocks == 0 && m_nrlocks >= 1, + "oops, m_nrlocks = %d, m_nwlocks = %d", + (int)m_nrlocks, (int)m_nwlocks); + --m_nrlocks; +#endif + mutex.read_unlock(); + } + + void lock() const + { + mutex.lock(); +#ifndef NDEBUG + ++m_nwlocks; + OIIO_DASSERT_MSG(m_nwlocks == 1 && m_nrlocks == 0, + "oops, m_nrlocks = %d, m_nwlocks = %d", + (int)m_nrlocks, (int)m_nwlocks); +#endif + } + void unlock() const + { +#ifndef NDEBUG + OIIO_DASSERT_MSG(m_nwlocks == 1 && m_nrlocks == 0, + "oops, m_nrlocks = %d, m_nwlocks = %d", + (int)m_nrlocks, (int)m_nwlocks); + --m_nwlocks; +#endif + mutex.unlock(); + } + }; + + HASH m_hash; // hashing function + atomic_int m_size; // total entries in all bins + Bin m_bins[BINS]; // the bins + + static constexpr int log2(unsigned n) + { + return n < 2 ? 0 : 1 + log2(n / 2); + } + + // Which bin will this key always appear in? + size_t whichbin(size_t hash) + { + constexpr int LOG2_BINS = log2(BINS); + constexpr int BIN_SHIFT = 8 * sizeof(size_t) - LOG2_BINS; + + static_assert(1 << LOG2_BINS == BINS, + "Number of bins must be a power of two"); + static_assert(~size_t(0) >> BIN_SHIFT == (BINS - 1), "Hash overflow"); + + // Use the high order bits of the hash to index the bin. We assume that the + // low-order bits of the hash will directly be used to index the hash table, + // so using those would lead to collisions. + size_t bin = hash >> BIN_SHIFT; + OIIO_DASSERT(bin < BINS); + return bin; + } +}; + + +OIIO_NAMESPACE_3_1_END diff --git a/third_party/tlRender-install-Release/include/OpenImageIO/ustring.h b/third_party/tlRender-install-Release/include/OpenImageIO/ustring.h new file mode 100644 index 00000000..4c57701a --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenImageIO/ustring.h @@ -0,0 +1,1159 @@ +// Copyright Contributors to the OpenImageIO project. +// SPDX-License-Identifier: Apache-2.0 +// https://github.com/AcademySoftwareFoundation/OpenImageIO + + +#pragma once +#define OPENIMAGEIO_USTRING_H + +#if defined(_MSC_VER) +// Ignore warnings about DLL exported classes with member variables that are template classes. +// This happens with the std::string empty_std_string static member variable of ustring below. +// Also remove a warning about the strncpy function not being safe and deprecated in MSVC. +// There is no equivalent safe and portable function and trying to fix this is more trouble than +// its worth. (see http://stackoverflow.com/questions/858252/alternatives-to-ms-strncpy-s) +# pragma warning(disable : 4251 4996) +#endif + +#include +#include +#include +#include +#include +#include +#include +#include + + +// Feature tests +#define OIIO_USTRING_HAS_USTRINGHASH 1 +#define OIIO_USTRING_HAS_CTR_FROM_USTRINGHASH 1 +#define OIIO_USTRING_HAS_STDHASH 1 +#define OIIO_HAS_USTRINGHASH_FORMATTER 1 + + +OIIO_NAMESPACE_3_1_BEGIN + + +/// A ustring is an alternative to char* or std::string for storing +/// strings, in which the character sequence is unique (allowing many +/// speed advantages for assignment, equality testing, and inequality +/// testing). +/// +/// The implementation is that behind the scenes there is a hash set of +/// allocated strings, so the characters of each string are unique. A +/// ustring itself is a pointer to the characters of one of these canonical +/// strings. Therefore, assignment and equality testing is just a single +/// 32- or 64-bit int operation, the only mutex is when a ustring is +/// created from raw characters, and the only malloc is the first time +/// each canonical ustring is created. +/// +/// The internal table also contains a std::string version and the length +/// of the string, so converting a ustring to a std::string (via +/// ustring::string()) or querying the number of characters (via +/// ustring::size() or ustring::length()) is extremely inexpensive, and does +/// not involve creation/allocation of a new std::string or a call to +/// strlen. +/// +/// We try very hard to completely mimic the API of std::string, +/// including all the constructors, comparisons, iterations, etc. Of +/// course, the characters of a ustring are non-modifiable, so we do not +/// replicate any of the non-const methods of std::string. But in most +/// other ways it looks and acts like a std::string and so most templated +/// algorithms that would work on a "const std::string &" will also work +/// on a ustring. +/// +/// Note that like a `char*`, but unlike a `std::string`, a ustring is not +/// allowed to contain any embedded NUL ('\0') characters. When constructing +/// ustrings from a std::string or a string_view, the contents will be +/// truncated at the point of any NUL character. This is done to ensure that +/// ustring::c_str() refers to the same C-style character sequence as the +/// ustring itself or ustring::string(). +/// +/// Usage guidelines: +/// +/// Compared to standard strings, ustrings have several advantages: +/// +/// - Each individual ustring is very small -- in fact, we guarantee that +/// a ustring is the same size and memory layout as an ordinary char*. +/// - Storage is frugal, since there is only one allocated copy of each +/// unique character sequence, throughout the lifetime of the program. +/// - Assignment from one ustring to another is just copy of the pointer; +/// no allocation, no character copying, no reference counting. +/// - Equality testing (do the strings contain the same characters) is +/// a single operation, the comparison of the pointer. +/// - Memory allocation only occurs when a new ustring is constructed from +/// raw characters the FIRST time -- subsequent constructions of the +/// same string just finds it in the canonical string set, but doesn't +/// need to allocate new storage. Destruction of a ustring is trivial, +/// there is no de-allocation because the canonical version stays in +/// the set. Also, therefore, no user code mistake can lead to +/// memory leaks. +/// +/// But there are some problems, too. Canonical strings are never freed +/// from the table. So in some sense all the strings "leak", but they +/// only leak one copy for each unique string that the program ever comes +/// across. Also, creation of unique strings from raw characters is more +/// expensive than for standard strings, due to hashing, table queries, +/// and other overhead. +/// +/// On the whole, ustrings are a really great string representation +/// - if you tend to have (relatively) few unique strings, but many +/// copies of those strings; +/// - if the creation of strings from raw characters is relatively +/// rare compared to copying or comparing to existing strings; +/// - if you tend to make the same strings over and over again, and +/// if it's relatively rare that a single unique character sequence +/// is used only once in the entire lifetime of the program; +/// - if your most common string operations are assignment and equality +/// testing and you want them to be as fast as possible; +/// - if you are doing relatively little character-by-character assembly +/// of strings, string concatenation, or other "string manipulation" +/// (other than equality testing). +/// +/// ustrings are not so hot +/// - if your program tends to have very few copies of each character +/// sequence over the entire lifetime of the program; +/// - if your program tends to generate a huge variety of unique +/// strings over its lifetime, each of which is used only a short +/// time and then discarded, never to be needed again; +/// - if you don't need to do a lot of string assignment or equality +/// testing, but lots of more complex string manipulation. +/// +class OIIO_UTIL_API ustring { +public: + using rep_t = const char*; ///< The underlying representation type + using value_type = char; + using hash_t = uint64_t; ///< The hash type + using pointer = value_type*; + using reference = value_type&; + using const_reference = const value_type&; + using size_type = size_t; + static const size_type npos = static_cast(-1); + using const_iterator = std::string::const_iterator; + using const_reverse_iterator = std::string::const_reverse_iterator; + + /// Default ctr for ustring -- make an empty string. + constexpr ustring() noexcept + : m_chars(nullptr) + { + } + + /// Construct a ustring from a null-terminated C string (char *). + explicit ustring(const char* str) + { + m_chars = str ? make_unique(str) : nullptr; + } + + /// Construct a ustring from a string_view, which can be auto-converted + /// from either a null-terminated C string (char *) or a C++ + /// std::string. + explicit ustring(string_view str) + { + m_chars = str.data() ? make_unique(str) : nullptr; + } + + /// Construct a ustring from at most n characters of str, starting at + /// position pos. + ustring(const char* str, size_type pos, size_type n) + : m_chars(make_unique(std::string(str, pos, n).c_str())) + { + } + + /// Construct a ustring from the first n characters of str. + ustring(const char* str, size_type n) + : m_chars(make_unique(string_view(str, n))) + { + } + + /// Construct a ustring from n copies of character c. + ustring(size_type n, char c) + : m_chars(make_unique(std::string(n, c).c_str())) + { + } + + /// Construct a ustring from an indexed substring of a std::string. + ustring(const std::string& str, size_type pos, size_type n = npos) + { + string_view sref(str); + sref = sref.substr(pos, n); + m_chars = make_unique(sref); + } + + /// Copy construct a ustring from another ustring. + ustring(const ustring& str) noexcept = default; + + /// Construct a ustring from an indexed substring of a ustring. + ustring(const ustring& str, size_type pos, size_type n = npos) + { + string_view sref(str); + sref = sref.substr(pos, n); + m_chars = make_unique(sref); + } + +#ifndef __CUDA_ARCH__ + /// Construct from a known ustringhash + inline explicit ustring(ustringhash hash); +#endif + + /// ustring destructor. + ~ustring() noexcept = default; + + /// Conversion to an OIIO::string_view. + operator string_view() const noexcept { return { c_str(), length() }; } + + /// Conversion to std::string (explicit only!). + explicit operator std::string() const noexcept { return string(); } + + /// Assign a ustring to *this. + ustring& assign(const ustring& str) + { + m_chars = str.m_chars; + return *this; + } + + /// Assign a substring of a ustring to *this. + ustring& assign(const ustring& str, size_type pos, size_type n = npos) + { + *this = ustring(str, pos, n); + return *this; + } + + /// Assign a std::string to *this. + ustring& assign(const std::string& str) + { + assign(str.c_str()); + return *this; + } + + /// Assign a substring of a std::string to *this. + ustring& assign(const std::string& str, size_type pos, size_type n = npos) + { + *this = ustring(str, pos, n); + return *this; + } + + /// Assign a null-terminated C string (char*) to *this. + ustring& assign(const char* str) + { + m_chars = str ? make_unique(str) : nullptr; + return *this; + } + + /// Assign the first n characters of str to *this. + ustring& assign(const char* str, size_type n) + { + *this = ustring(str, n); + return *this; + } + + /// Assign n copies of c to *this. + ustring& assign(size_type n, char c) + { + *this = ustring(n, c); + return *this; + } + + /// Assign a string_view to *this. + ustring& assign(string_view str) + { + m_chars = str.length() ? make_unique(str) : nullptr; + return *this; + } + + /// Assign a ustring to another ustring. + ustring& operator=(const ustring& str) noexcept = default; + + /// Assign a null-terminated C string (char *) to a ustring. + ustring& operator=(const char* str) { return assign(str); } + + /// Assign a C++ std::string to a ustring. + ustring& operator=(const std::string& str) { return assign(str); } + + /// Assign a string_view to a ustring. + ustring& operator=(string_view str) { return assign(str); } + + /// Assign a single char to a ustring. + ustring& operator=(char c) { return *this = ustring(string_view(&c, 1)); } + + /// Return a C string representation of a ustring. + const char* c_str() const noexcept { return m_chars; } + + /// Return a C string representation of a ustring. + const char* data() const noexcept { return c_str(); } + + /// Return a C++ std::string representation of a ustring. + const std::string& string() const noexcept + { + if (m_chars) { + const TableRep* rep = (const TableRep*)m_chars - 1; + return rep->str; + } else + return empty_std_string; + } + + /// Reset to an empty string. + void clear() noexcept { m_chars = nullptr; } + + /// Return the number of characters in the string. + size_t length() const noexcept + { + if (!m_chars) + return 0; + const TableRep* rep = ((const TableRep*)m_chars) - 1; + return rep->length; + } + + /// Return a hashed version of the string + hash_t hash() const noexcept + { + if (!m_chars) + return 0; + const TableRep* rep = ((const TableRep*)m_chars) - 1; + return rep->hashed; + } + + /// Return a hashed version of the string + ustringhash uhash() const noexcept; + + /// Return the number of characters in the string. + size_t size() const noexcept { return length(); } + + /// Is the string empty -- i.e., is it nullptr or does it point to an + /// empty string? + bool empty() const noexcept { return (size() == 0); } + + /// Return a const_iterator that references the first character of + /// the string. + const_iterator begin() const noexcept { return string().begin(); } + + /// Return a const_iterator that references the end of a traversal + /// of the characters of the string. + const_iterator end() const noexcept { return string().end(); } + + /// Return a const_reverse_iterator that references the last + /// character of the string. + const_reverse_iterator rbegin() const noexcept { return string().rbegin(); } + + /// Return a const_reverse_iterator that references the end of + /// a reverse traversal of the characters of the string. + const_reverse_iterator rend() const noexcept { return string().rend(); } + + /// Return a reference to the character at the given position. + /// Note that it's up to the caller to be sure pos is within the + /// size of the string. + const_reference operator[](size_type pos) const noexcept + { + return c_str()[pos]; + } + + /// Dump into character array s the characters of this ustring, + /// beginning with position pos and copying at most n characters. + size_type copy(char* s, size_type n, size_type pos = 0) const + { + if (m_chars == nullptr) { + s[0] = 0; + return 0; + } + char* c = strncpy(s, c_str() + pos, n); // NOSONAR + return (size_type)(c - s); + } + + /// Returns a substring of the ustring object consisting of n + /// characters starting at position pos. + ustring substr(size_type pos = 0, size_type n = npos) const + { + return ustring(*this, pos, n); + } + + size_type find(const ustring& str, size_type pos = 0) const noexcept + { + return string().find(str.string(), pos); + } + + size_type find(const std::string& str, size_type pos = 0) const noexcept + { + return string().find(str, pos); + } + + size_type find(const char* s, size_type pos, size_type n) const + { + return string().find(s, pos, n); + } + + size_type find(const char* s, size_type pos = 0) const + { + return string().find(s, pos); + } + + size_type find(char c, size_type pos = 0) const noexcept + { + return string().find(c, pos); + } + + size_type rfind(const ustring& str, size_type pos = npos) const noexcept + { + return string().rfind(str.string(), pos); + } + + size_type rfind(const std::string& str, size_type pos = npos) const noexcept + { + return string().rfind(str, pos); + } + + size_type rfind(const char* s, size_type pos, size_type n) const + { + return string().rfind(s, pos, n); + } + + size_type rfind(const char* s, size_type pos = npos) const + { + return string().rfind(s, pos); + } + + size_type rfind(char c, size_type pos = npos) const noexcept + { + return string().rfind(c, pos); + } + + size_type find_first_of(const ustring& str, + size_type pos = 0) const noexcept + { + return string().find_first_of(str.string(), pos); + } + + size_type find_first_of(const std::string& str, + size_type pos = 0) const noexcept + { + return string().find_first_of(str, pos); + } + + size_type find_first_of(const char* s, size_type pos, size_type n) const + { + return string().find_first_of(s, pos, n); + } + + size_type find_first_of(const char* s, size_type pos = 0) const + { + return string().find_first_of(s, pos); + } + + size_type find_first_of(char c, size_type pos = 0) const noexcept + { + return string().find_first_of(c, pos); + } + + size_type find_last_of(const ustring& str, + size_type pos = npos) const noexcept + { + return string().find_last_of(str.string(), pos); + } + + size_type find_last_of(const std::string& str, + size_type pos = npos) const noexcept + { + return string().find_last_of(str, pos); + } + + size_type find_last_of(const char* s, size_type pos, size_type n) const + { + return string().find_last_of(s, pos, n); + } + + size_type find_last_of(const char* s, size_type pos = npos) const + { + return string().find_last_of(s, pos); + } + + size_type find_last_of(char c, size_type pos = npos) const noexcept + { + return string().find_last_of(c, pos); + } + + size_type find_first_not_of(const ustring& str, + size_type pos = 0) const noexcept + { + return string().find_first_not_of(str.string(), pos); + } + + size_type find_first_not_of(const std::string& str, + size_type pos = 0) const noexcept + { + return string().find_first_not_of(str, pos); + } + + size_type find_first_not_of(const char* s, size_type pos, size_type n) const + { + return string().find_first_not_of(s, pos, n); + } + + size_type find_first_not_of(const char* s, size_type pos = 0) const + { + return string().find_first_not_of(s, pos); + } + + size_type find_first_not_of(char c, size_type pos = 0) const noexcept + { + return string().find_first_not_of(c, pos); + } + + size_type find_last_not_of(const ustring& str, + size_type pos = npos) const noexcept + { + return string().find_last_not_of(str.string(), pos); + } + + size_type find_last_not_of(const std::string& str, + size_type pos = npos) const noexcept + { + return string().find_last_not_of(str, pos); + } + + size_type find_last_not_of(const char* s, size_type pos, size_type n) const + { + return string().find_last_not_of(s, pos, n); + } + + size_type find_last_not_of(const char* s, size_type pos = npos) const + { + return string().find_last_not_of(s, pos); + } + + size_type find_last_not_of(char c, size_type pos = npos) const noexcept + { + return string().find_last_not_of(c, pos); + } + + /// Return 0 if *this is lexicographically equal to str, -1 if + /// *this is lexicographically earlier than str, 1 if *this is + /// lexicographically after str. + int compare(string_view str) const noexcept + { + return string_view(*this).compare(str); + } + + /// Return 0 if *this is lexicographically equal to str, -1 if + /// *this is lexicographically earlier than str, 1 if *this is + /// lexicographically after str. + int compare(const char* str) const noexcept + { + return strcmp(c_str() ? c_str() : "", str ? str : ""); + } + + /// Return 0 if a is lexicographically equal to b, -1 if a is + /// lexicographically earlier than b, 1 if a is lexicographically + /// after b. + friend int compare(const std::string& a, const ustring& b) noexcept + { + return string_view(a).compare(b); + } + + /// Test two ustrings for equality -- are they comprised of the same + /// sequence of characters. Note that because ustrings are unique, + /// this is a trivial pointer comparison, not a char-by-char loop as + /// would be the case with a char* or a std::string. + bool operator==(const ustring& str) const noexcept + { + return c_str() == str.c_str(); + } + + /// Test two ustrings for inequality -- are they comprised of different + /// sequences of characters. Note that because ustrings are unique, + /// this is a trivial pointer comparison, not a char-by-char loop as + /// would be the case with a char* or a std::string. + bool operator!=(const ustring& str) const noexcept + { + return c_str() != str.c_str(); + } + + /// Test a ustring (*this) for lexicographic equality with std::string + /// x. + bool operator==(const std::string& x) const noexcept + { + return compare(x) == 0; + } + + /// Test a ustring (*this) for lexicographic equality with string_view + /// x. + bool operator==(string_view x) const noexcept { return compare(x) == 0; } + + /// Test a ustring (*this) for lexicographic equality with char* x. + bool operator==(const char* x) const noexcept { return compare(x) == 0; } + + /// Test for lexicographic equality between std::string a and ustring + /// b. + friend bool operator==(const std::string& a, const ustring& b) noexcept + { + return b.compare(a) == 0; + } + + /// Test for lexicographic equality between string_view a and ustring + /// b. + friend bool operator==(string_view a, const ustring& b) noexcept + { + return b.compare(a) == 0; + } + + /// Test for lexicographic equality between char* a and ustring + /// b. + friend bool operator==(const char* a, const ustring& b) noexcept + { + return b.compare(a) == 0; + } + + /// Test a ustring (*this) for lexicographic inequality with + /// std::string x. + bool operator!=(const std::string& x) const noexcept + { + return compare(x) != 0; + } + + /// Test a ustring (*this) for lexicographic inequality with + /// string_view x. + bool operator!=(string_view x) const noexcept { return compare(x) != 0; } + + /// Test a ustring (*this) for lexicographic inequality with + /// char* x. + bool operator!=(const char* x) const noexcept { return compare(x) != 0; } + + /// Test for lexicographic inequality between std::string a and + /// ustring b. + friend bool operator!=(const std::string& a, const ustring& b) noexcept + { + return b.compare(a) != 0; + } + + /// Test for lexicographic inequality between string_view a and + /// ustring b. + friend bool operator!=(string_view a, const ustring& b) noexcept + { + return b.compare(a) != 0; + } + + /// Test for lexicographic inequality between char* a and + /// ustring b. + friend bool operator!=(const char* a, const ustring& b) noexcept + { + return b.compare(a) != 0; + } + + /// Test for lexicographic 'less', comes in handy for lots of STL + /// containers and algorithms. + bool operator<(const ustring& x) const noexcept { return compare(x) < 0; } + + /// Construct a ustring in a printf-like fashion. In other words, + /// something like: + /// ustring s = ustring::sprintf("blah %d %g", (int)foo, (float)bar); + /// The argument list is fully typesafe. + /// The formatting of the string will always use the classic "C" locale + /// conventions (in particular, '.' as decimal separator for float values). + template + OIIO_NODISCARD static ustring sprintf(const char* fmt, const Args&... args) + { + return ustring(Strutil::sprintf(fmt, args...)); + } + + /// Construct a ustring in a fmt::format-like fashion. In other words, + /// something like: + /// ustring s = ustring::fmtformat("blah {} {}", (int)foo, (float)bar); + /// The argument list is fully typesafe. + /// The formatting of the string will always use the classic "C" locale + /// conventions (in particular, '.' as decimal separator for float values). + template + OIIO_NODISCARD static ustring fmtformat(const char* fmt, + const Args&... args) + { + return ustring(Strutil::fmt::format(fmt, args...)); + } + + /// Concatenate two strings, returning a ustring, implemented carefully + /// to not perform any redundant copies or allocations. + static ustring concat(string_view s, string_view t); + + /// Generic stream output of a ustring. + friend std::ostream& operator<<(std::ostream& out, const ustring& str) + { + if (str.c_str() && out.good()) + out.write(str.c_str(), str.size()); + return out; + } + + /// Return the statistics output as a string. + static std::string getstats(bool verbose = true); + + /// Return the amount of memory consumed by the ustring table. + static size_t memory(); + + /// Return the total number of ustrings in the internal table. + static size_t total_ustrings(); + + /// Return the total number ustrings that have the exact hash as another + /// ustring. If `collisions` is passed, store all the colliding ustrings + /// in the vector. + static size_t hash_collisions(std::vector* collisions = nullptr); + + /// Given a string_view, return a pointer to the unique + /// version kept in the internal table (creating a new table entry + /// if we haven't seen this sequence of characters before). + /// N.B.: this is equivalent to ustring(str).c_str(). It's also the + /// routine that is used directly by ustring's internals to generate + /// the canonical unique copy of the characters. + static const char* make_unique(string_view str); + + /// Is this character pointer a unique ustring representation of + /// those characters? Useful for diagnostics and debugging. + static bool is_unique(const char* str) + { + return str == nullptr || make_unique(str) == str; + } + + /// Create a ustring from characters guaranteed to already be + /// ustring-clean, without having to run through the hash yet + /// again. Use with extreme caution!!! + static ustring from_unique(const char* unique) + { + OIIO_DASSERT(is_unique(unique)); // DEBUG builds -- check it! + ustring u; + u.m_chars = unique; + return u; + } + + /// Return the ustring corresponding to the given hash, or the empty + /// ustring() if there is no registered ustring with that hash. Note that + /// if there are multiple ustrings with the same hash, this will return + /// the first one it finds in the table. + OIIO_NODISCARD static ustring from_hash(hash_t hash); + +private: + // Individual ustring internal representation -- the unique characters. + // + rep_t m_chars; + +public: + // Representation within the hidden string table -- DON'T EVER CREATE + // ONE OF THESE YOURSELF! + // The characters are found directly after the rep. So that means that + // if you know the rep, the chars are at (char *)(rep+1), and if you + // know the chars, the rep is at ((TableRep *)chars - 1). + struct TableRep { + hash_t hashed; // precomputed Hash value + std::string str; // String representation + size_t length; // Length of the string; must be right before cap + size_t dummy_capacity; // Dummy field! must be right before refcount + int dummy_refcount; // Dummy field! must be right before chars + TableRep(string_view strref, hash_t hash); + ~TableRep(); + const char* c_str() const noexcept { return (const char*)(this + 1); } + }; + +private: + static std::string empty_std_string; +}; + + + +/// A ustringhash holds the hash of a ustring in a type-safe way. +/// +/// It has a nearly identical interface to a ustring, and still refers to a +/// string in the internal ustring table. But whereas the representation of a +/// ustring is the pointer to the characters, the representation of a +/// ustringhash is the hash of the string. +/// +/// For some uses where you don't need access to the characters in any +/// performance-critical paths, this may be a more convenient representation. +/// In particular, it's well suited to a GPU that doesn't have access to the +/// character memory. Another interesting difference is that from run to run, +/// a ustring may have a different literal value, since there's no reason to +/// expect that the pointer to a string like "foo" will refer to the same +/// memory location every time the program executes, but in contrast, the hash +/// is guaranteed to be identical from run to run. +/// +class OIIO_UTIL_API ustringhash { +public: + using rep_t = ustring::hash_t; ///< The underlying representation type + using hash_t = ustring::hash_t; ///< The hash type + + // Default constructor + OIIO_HOSTDEVICE constexpr ustringhash() noexcept + : m_hash(0) + { + } + + /// ustringhash destructor. + ~ustringhash() noexcept = default; + + /// Copy construct a ustringhash from another ustringhash. + constexpr ustringhash(const ustringhash& str) noexcept = default; + + /// Move construct a ustringhash from another ustringhash. + ustringhash(ustringhash&& str) noexcept = default; + + /// Construct from a ustring + ustringhash(const ustring& str) noexcept + : m_hash(str.hash()) + { + } + + /// Construct a ustringhash from a null-terminated C string (char *). + OIIO_DEVICE_CONSTEXPR explicit ustringhash(const char* str) +#ifdef __CUDA_ARCH__ + // GPU: just compute the hash. This can be constexpr! + : m_hash(Strutil::strhash(str)) +#else + // CPU: make ustring, get its hash. Note that ustring ctr can't be + // constexpr because it has to modify the internal ustring table. + : m_hash(ustring(str).hash()) +#endif + { + } + + OIIO_DEVICE_CONSTEXPR explicit ustringhash(const char* str, size_t len) +#ifdef __CUDA_ARCH__ + // GPU: just compute the hash. This can be constexpr! + : m_hash(Strutil::strhash(len, str)) +#else + // CPU: make ustring, get its hash. Note that ustring ctr can't be + // constexpr because it has to modify the internal ustring table. + : m_hash(ustring(str, len).hash()) +#endif + { + } + + /// Construct a ustringhash from a string_view, which can be + /// auto-converted from either a std::string. + OIIO_DEVICE_CONSTEXPR explicit ustringhash(string_view str) +#ifdef __CUDA_ARCH__ + // GPU: just compute the hash. This can be constexpr! + : m_hash(Strutil::strhash(str)) +#else + // CPU: make ustring, get its hash. Note that ustring ctr can't be + // constexpr because it has to modify the internal ustring table. + : m_hash(ustring(str).hash()) +#endif + { + } + + /// Construct from a raw hash value. Beware: results are undefined if it's + /// not the valid hash of a ustring. + OIIO_HOSTDEVICE explicit constexpr ustringhash(hash_t hash) noexcept + : m_hash(hash) + { + } + + /// Conversion to an OIIO::string_view. + operator string_view() const noexcept { return ustring::from_hash(m_hash); } + + /// Conversion to std::string (explicit only!). + explicit operator std::string() const noexcept + { + return ustring::from_hash(m_hash).string(); + } + + /// Assign from a ustringhash + constexpr ustringhash& operator=(const ustringhash& str) = default; + ustringhash& operator=(ustringhash&& str) = default; + + /// Assign from a ustring + ustringhash& operator=(const ustring& str) + { + m_hash = str.hash(); + return *this; + } + + /// Reset to an empty string. + OIIO_HOSTDEVICE void clear() noexcept { m_hash = 0; } + +#ifndef __CUDA_ARCH__ + /// Return a pointer to the characters. + const char* c_str() const noexcept + { + return ustring::from_hash(m_hash).c_str(); + } + + /// Return a C string representation of a ustring. + const char* data() const noexcept { return c_str(); } + + /// Return a C++ std::string representation of a ustring. + const std::string& string() const noexcept + { + return ustring::from_hash(m_hash).string(); + } + + /// Return the number of characters in the string. + size_t length() const noexcept + { + return ustring::from_hash(m_hash).length(); + } +#endif + + /// Return a hashed version of the string + OIIO_HOSTDEVICE constexpr hash_t hash() const noexcept { return m_hash; } + +#ifndef __CUDA_ARCH__ + /// Return the number of characters in the string. + size_t size() const noexcept { return length(); } +#endif + + /// Is the string empty -- i.e., is it nullptr or does it point to an + /// empty string? (Empty strings always have a hash of 0.) + OIIO_HOSTDEVICE constexpr bool empty() const noexcept + { + return m_hash == 0; + } + + /// Test for equality with another ustringhash. + OIIO_HOSTDEVICE constexpr bool + operator==(const ustringhash& str) const noexcept + { + return m_hash == str.m_hash; + } + + /// Test for inequality with another ustringhash. + OIIO_HOSTDEVICE constexpr bool + operator!=(const ustringhash& str) const noexcept + { + return m_hash != str.m_hash; + } + + /// Test for equality with a char*. + constexpr bool operator==(const char* str) const noexcept + { + return m_hash == Strutil::strhash(str); + } + + /// Test for inequality with a char*. + constexpr bool operator!=(const char* str) const noexcept + { + return m_hash != Strutil::strhash(str); + } + +#ifndef __CUDA_ARCH__ + /// Test for equality with a ustring. + bool operator==(const ustring& str) const noexcept + { + return m_hash == str.hash(); + } + + friend bool operator==(const ustring& a, const ustringhash& b) noexcept + { + return b == a; + } + + /// Test for inequality with a ustring. + bool operator!=(const ustring& str) const noexcept + { + return m_hash != str.hash(); + } + + friend bool operator!=(const ustring& a, const ustringhash& b) noexcept + { + return b != a; + } + + OIIO_HOSTDEVICE constexpr bool operator<(const ustringhash& x) const noexcept + { + return hash() < x.hash(); + } + + /// Generic stream output of a ustringhash outputs the string it refers + /// to. + friend std::ostream& operator<<(std::ostream& out, const ustringhash& str) + { + return (out << ustring(str)); + } +#endif + + /// Return the ustringhash corresponding to the given hash. Caveat emptor: + /// results are undefined if it's not the valid hash of a ustring. + OIIO_NODISCARD static constexpr ustringhash from_hash(hash_t hash) + { + ustringhash u; + u.m_hash = hash; + return u; + } + +private: + // Individual ustringhash internal representation -- the hash value. + rep_t m_hash; + + friend class ustring; +}; + + + +static_assert(sizeof(ustringhash) == sizeof(uint64_t), + "ustringhash should be the same size as a uint64_t"); +static_assert(sizeof(ustring) == sizeof(const char*), + "ustring should be the same size as a const char*"); + + + +inline ustringhash +ustring::uhash() const noexcept +{ + return ustringhash(hash()); +} + + + +#ifndef __CUDA_ARCH__ +inline ustring::ustring(ustringhash hash) +{ + // The ustring constructor from a ustringhash is just a pretty + // wrapper around an awkward construct. + m_chars = ustring::from_hash(hash.hash()).c_str(); +} +#endif + +OIIO_NAMESPACE_3_1_END + + + +OIIO_NAMESPACE_BEGIN + +/// ustring string literal operator +inline ustring +operator""_us(const char* str, std::size_t len) +{ + return ustring(str, len); +} + + +/// ustringhash string literal operator +OIIO_DEVICE_CONSTEXPR ustringhash +operator""_ush(const char* str, std::size_t len) +{ + return ustringhash(str, len); +} + +OIIO_NAMESPACE_END + + +OIIO_NAMESPACE_3_1_BEGIN + +/// Functor class to use for comparisons when sorting ustrings, if you +/// want the strings sorted lexicographically. +class ustringLess { +public: + size_t operator()(ustring a, ustring b) const noexcept { return a < b; } +}; + + +/// Functor class to use for comparisons when sorting ustrings, if you +/// don't care if the sort order is lexicographic. This sorts based on +/// the pointers themselves, which is safe because once allocated, a +/// ustring's characters will never be moved. But beware, the resulting +/// sorting order may vary from run to run! +class ustringPtrIsLess { +public: + size_t operator()(ustring a, ustring b) const noexcept + { + return size_t(a.data()) < size_t(b.data()); + } +}; + + + +/// Case-insensitive comparison of ustrings. For speed, this always +/// uses a static locale that doesn't require a mutex lock. +inline bool +iequals(ustring a, ustring b) +{ + return a == b || Strutil::iequals(a.string(), b.string()); +} + +inline bool +iequals(ustring a, const std::string& b) +{ + return Strutil::iequals(a.string(), b); +} + +inline bool +iequals(const std::string& a, ustring b) +{ + return Strutil::iequals(a, b.string()); +} + + + +// ustring variant stof from OpenImageIO/strutil.h +namespace Strutil { + +#ifndef __CUDA_ARCH__ + +inline float +stof(ustring s) +{ + return Strutil::stof(s.string()); +} + +template<> +inline std::string +to_string(const ustring& value) +{ + return value.string(); +} + +template<> +inline std::string +to_string(const ustringhash& value) +{ + return ustring(value).string(); +} + +#endif + +} // end namespace Strutil + +OIIO_NAMESPACE_3_1_END + + + +namespace std { // not necessary in C++17, then we can just say std::hash +// std::hash specialization for ustring +template<> struct hash { + std::size_t operator()(OIIO::ustring u) const noexcept + { + return static_cast(u.hash()); + } +}; + + +// std::hash specialization for ustringhash +template<> struct hash { + OIIO_HOSTDEVICE constexpr std::size_t + operator()(OIIO::ustringhash u) const noexcept + { + return static_cast(u.hash()); + } +}; +} // namespace std + + + +// Supply a fmtlib compatible custom formatter for ustring and ustringhash. +FMT_BEGIN_NAMESPACE + +template<> struct formatter : formatter { + template + auto format(const OIIO::ustring& u, + FormatContext& ctx) OIIO_FMT_CUSTOM_FORMATTER_CONST + { + return formatter::format({ u.data(), u.size() }, + ctx); + } +}; + +template<> +struct formatter : formatter { + template + auto format(const OIIO::ustringhash& h, + FormatContext& ctx) OIIO_FMT_CUSTOM_FORMATTER_CONST + { + OIIO::ustring u(h); + return formatter::format({ u.data(), u.size() }, + ctx); + } +}; + +FMT_END_NAMESPACE diff --git a/third_party/tlRender-install-Release/include/OpenImageIO/vecparam.h b/third_party/tlRender-install-Release/include/OpenImageIO/vecparam.h new file mode 100644 index 00000000..5cd13ec1 --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenImageIO/vecparam.h @@ -0,0 +1,391 @@ +// Copyright Contributors to the OpenImageIO project. +// SPDX-License-Identifier: Apache-2.0 +// https://github.com/AcademySoftwareFoundation/OpenImageIO + +#pragma once +#define OIIO_VECPARAM_H 1 + +#include +#include + +#include + + +OIIO_NAMESPACE_3_1_BEGIN + +// NOTE: These interoperable type templates were copied from the +// [Imath project](http://github.com/AcademySoftwareFoundation/imath), +// licensed under the same BSD-3-clause license as OpenImageIO. + + +/// @{ +/// @name Detecting interoperable linear algebra types. +/// +/// In order to construct or assign from external "compatible" types without +/// prior knowledge of their definitions, we have a few helper type traits. +/// The intent of these is to allow custom linear algebra types in an +/// application that have seamless conversion to and from similar types. +/// +/// `has_xy`, `has_xyz`, `has_xyzw` detect if class +/// `T` has the right set of elements `.x`, `.y`, `.z`, `.w`, all of type +/// `Base` and seems to be the right size to hold exactly those members and +/// nothing more. +/// +/// `has_subscript_N` detects if class `T` can perform `T[int]` +/// to yield a `Base`, and that it seems to be exactly the right size to +/// hold `Nelem` of those elements. +/// +/// This is not exact. It's possible that for a particular user-defined +/// type, this may yield a false negative or false positive. For example: +/// * A class for a 3-vector that contains an extra element of padding +/// so that it will have the right size and alignment to use 4-wide +/// SIMD math ops will appear to be the wrong size. +/// * A `std::vector` is subscriptable and might have N elements at +/// runtime, but the size is dynamic and so would fail this test. +/// * A foreign type may have .x, .y, .z that are not matching our base +/// type but we still want it to work (with appropriate conversions). +/// +/// In these cases, user code may declare an exception -- for example, +/// stating that `mytype` should be considered a subscriptable 3-vector: +/// +/// template<> +/// struct OIIO::has_subscript_N : public std::true_type { }; +/// +/// And similarly, user code may correct a potential false positive (that +/// is, a `mytype` looks like it should be a 3-vector, but we don't want any +/// implicit conversions to happen): +/// +/// template +/// struct OIIO::has_subscript_N : public std::false_type { }; +/// + + +/// `has_xy::value` will be true if type `T` has member variables +/// `.x` and `.y`, all of type `Base`, and the size of a `T` is exactly big +/// enough to hold 2 Base values. +template struct has_xy { +private: + typedef char Yes[1]; + typedef char No[2]; + + // Valid only if .x, .y exist and are the right type: return a Yes. + template::value), + OIIO_ENABLE_IF(std::is_same::value)> + static Yes& test(int); + + // Fallback, default to returning a No. + template static No& test(...); + +public: + enum { + value = (sizeof(test(0)) == sizeof(Yes) + && sizeof(T) == 2 * sizeof(Base)) + }; +}; + + +/// `has_xyz::value` will be true if type `T` has member variables +/// `.x`, `.y`, and `.z`, all of type `Base`, and the size of a `T` is +/// exactly big enough to hold 3 Base values. +template struct has_xyz { +private: + typedef char Yes[1]; + typedef char No[2]; + + // Valid only if .x, .y, .z exist and are the right type: return a Yes. + template::value), + OIIO_ENABLE_IF(std::is_same::value), + OIIO_ENABLE_IF(std::is_same::value)> + static Yes& test(int); + + // Fallback, default to returning a No. + template static No& test(...); + +public: + enum { + value = (sizeof(test(0)) == sizeof(Yes) + && sizeof(T) == 3 * sizeof(Base)) + }; +}; + + +/// `has_xyzw::value` will be true if type `T` has member variables +/// `.x`, `.y`, `.z`, and `.w`, all of type `Base`, and the size of a `T` is +/// exactly big enough to hold 4 Base values. +template struct has_xyzw { +private: + typedef char Yes[1]; + typedef char No[2]; + + // Valid only if .x, .y, .z, .w exist and are the right type: return a Yes. + template::value), + OIIO_ENABLE_IF(std::is_same::value), + OIIO_ENABLE_IF(std::is_same::value), + OIIO_ENABLE_IF(std::is_same::value)> + static Yes& test(int); + + // Fallback, default to returning a No. + template static No& test(...); + +public: + enum { + value = (sizeof(test(0)) == sizeof(Yes) + && sizeof(T) == 4 * sizeof(Base)) + }; +}; + + + +/// `has_subscript_N::value` will be true if type `T` has +/// subscripting syntax, a `T[int]` returns a `Base`, and the size of a `T` +/// is exactly big enough to hold `Nelem` `Base` values. +template struct has_subscript_N { +private: + typedef char Yes[1]; + typedef char No[2]; + + // Valid only if T[] is possible and is the right type: return a Yes. + template< + typename C, + OIIO_ENABLE_IF(std::is_same::type, + Base>::value)> + static Yes& test(int); + + // Fallback, default to returning a No. + template static No& test(...); + +public: + enum { + value = (sizeof(test(0)) == sizeof(Yes) + && sizeof(T) == Nelem * sizeof(Base)) + }; +}; + + + +/// C arrays of just the right length also are qualified for has_subscript_N. +template +struct has_subscript_N : public std::true_type {}; + + + +/// `has_double_subscript_RC::value` will be true if type `T` +/// has 2-level subscripting syntax, a `T[int][int]` returns a `Base`, and +/// the size of a `T` is exactly big enough to hold `R*C` `Base` values. +template +struct has_double_subscript_RC { +private: + typedef char Yes[1]; + typedef char No[2]; + + // Valid only if T[][] is possible and is the right type: return a Yes. + template::type, + Base>::value)> + static Yes& test(int); + + // Fallback, default to returning a No. + template static No& test(...); + +public: + enum { + value = (sizeof(test(0)) == sizeof(Yes) + && sizeof(T) == (Rows * Cols) * sizeof(Base)) + }; +}; + + +/// C arrays of just the right length also are qualified for has_double_subscript_RC. +template +struct has_double_subscript_RC + : public std::true_type {}; + +/// @} + + + +/// Vec3Param is a helper class that lets us create an interface that takes +/// a proxy for a `T[3]` analogue for use as a public API function parameter +/// type, in order to not expose the underlying vector type. +/// +/// For example, suppose we have a public function like this: +/// +/// void foo(Vec3Param v); +/// +/// Then any of the following calls will work: +/// +/// float array[3]; +/// foo(array); +/// +/// foo(Imath::V3f(1,2,3)); +/// +template class Vec3Param { +public: + /// Construct directly from 3 floats. + OIIO_HOSTDEVICE constexpr Vec3Param(T x, T y, T z) noexcept + : x(x) + , y(y) + , z(z) + { + } + + /// Construct from anything that looks like a 3-vector, having .x, .y, and + /// .z members of type T (and has exactly the size of a `T[3]`). This will + /// implicitly convert from an Imath::Vector3, among other things. + template::value)> + OIIO_HOSTDEVICE constexpr Vec3Param(const V& v) noexcept + : x(v.x) + , y(v.y) + , z(v.z) + { + } + + /// Construct from anything that looks like a 3-vector, having `[]` + /// component access returning a `T`, and has exactly the size of a + /// `T[3]`. + template::value + && !has_xyz::value)> + OIIO_HOSTDEVICE constexpr Vec3Param(const V& v) noexcept + : x(v[0]) + , y(v[1]) + , z(v[2]) + { + } + +#ifdef INCLUDED_IMATHVEC_H + /// Only if ImathVec.h has been included, we can construct a Vec3Param + /// out of an Imath::Vec3. + OIIO_HOSTDEVICE constexpr operator const Imath::Vec3&() const noexcept + { + return *(const Imath::Vec3*)this; + } + + /// Only if ImathVec.h has been included, we can implicitly convert a + /// `Vec3Param` to a `Imath::Vec3`. + OIIO_HOSTDEVICE constexpr const Imath::Vec3& operator()() const noexcept + { + return *(const Imath::Vec3*)this; + } +#endif + + // Return a reference to the contiguous values comprising the matrix. + template + constexpr const V& cast() const noexcept + { + const char* p = (const char*)this; + return *(const V*)p; + } + + /// Implicitly convert a `Vec3Param` to a `const V&` for a V that looks + /// like a 3-vector. + template::value + || has_xyz::value)> + OIIO_HOSTDEVICE constexpr operator const V&() const noexcept + { + return cast(); + } + + // The internal representation is just the 3 values. + T x, y, z; +}; + + +/// V3fParam is an alias for Vec3Param +using V3fParam = Vec3Param; + + + +/// MatrixParam is a helper template that lets us create an interface that +/// takes a proxy for a `T[S][S]` analogue for use as a public API function +/// parameter type to pass a square matrix, in order to not expose the +/// underlying matrix types. The common cases are given handy aliases: +/// M33fParam and M33fParam for 3x3 and 4x4 float matrices, respectively +/// (`MatrixParam` and `MatrixParam` are the long names). +/// +/// For example, suppose we have a public function like this: +/// +/// void foo(M33fParam v); +/// +/// Then any of the following calls will work: +/// +/// float array[3][3]; +/// foo(array); +/// +/// foo(Imath::M33f(1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,1)); +/// +template class MatrixParam { +public: + static constexpr int Size = S; + + /// We can construct a MatrixParam out of anything that has the size + /// of a `T[S][S]` and presents a `[][]` subscript operator. + template::value)> + OIIO_HOSTDEVICE constexpr MatrixParam(const M& m) noexcept + : m_ptr((const T*)&m) + { + } + +#ifdef INCLUDED_IMATHMATRIX_H + /// Only if ImathMatrix.h has been included, we can construct a + /// MatrixParam out of an Imath::Matrix33. + template::type = 0> + OIIO_HOSTDEVICE constexpr + operator const Imath::Matrix33&() const noexcept + { + return *(const Imath::Matrix33*)(m_ptr); + } + + /// Only if ImathMatrix.h has been included, we can implicitly convert a + /// MatrixParam into an Imath::Matrix33. + template::type = 0> + OIIO_HOSTDEVICE constexpr const Imath::Matrix33& + operator()() const noexcept + { + return *(const Imath::Matrix33*)(m_ptr); + } + + /// Only if ImathMatrix.h has been included, we can construct a + /// MatrixParam out of an Imath::Matrix44. + template::type = 0> + OIIO_HOSTDEVICE constexpr + operator const Imath::Matrix44&() const noexcept + { + return *(const Imath::Matrix44*)(m_ptr); + } + + /// Only if ImathMatrix.h has been included, we can implicitly convert a + /// MatrixParam into an Imath::Matrix44. + template::type = 0> + OIIO_HOSTDEVICE constexpr const Imath::Matrix44& + operator()() const noexcept + { + return *(const Imath::Matrix44*)(m_ptr); + } +#endif + + /// Return a pointer to the contiguous values comprising the matrix. + const T* data() const noexcept { return m_ptr; } + +private: + /// Underlying representation is just a pointer. + const T* m_ptr; +}; + + +/// M33fParam is an alias for MatrixParam +using M33fParam = MatrixParam; + +/// M44fParam is an alias for MatrixParam +using M44fParam = MatrixParam; + + +OIIO_NAMESPACE_3_1_END diff --git a/third_party/tlRender-install-Release/include/OpenImageIO/version.h b/third_party/tlRender-install-Release/include/OpenImageIO/version.h new file mode 100644 index 00000000..89579fcb --- /dev/null +++ b/third_party/tlRender-install-Release/include/OpenImageIO/version.h @@ -0,0 +1,4 @@ +// DEPRECATED header OpenImageIO/version.h +// For back compatibility, just include the new name, oiioversion.h. + +#include "oiioversion.h" diff --git a/third_party/tlRender-install-Release/include/SDL2/SDL.h b/third_party/tlRender-install-Release/include/SDL2/SDL.h new file mode 100644 index 00000000..0fe07133 --- /dev/null +++ b/third_party/tlRender-install-Release/include/SDL2/SDL.h @@ -0,0 +1,234 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2025 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +/** + * \file SDL.h + * + * Main include header for the SDL library + */ + +#ifndef SDL_h_ +#define SDL_h_ + +#include "SDL_main.h" +#include "SDL_stdinc.h" +#include "SDL_assert.h" +#include "SDL_atomic.h" +#include "SDL_audio.h" +#include "SDL_clipboard.h" +#include "SDL_cpuinfo.h" +#include "SDL_endian.h" +#include "SDL_error.h" +#include "SDL_events.h" +#include "SDL_filesystem.h" +#include "SDL_gamecontroller.h" +#include "SDL_guid.h" +#include "SDL_haptic.h" +#include "SDL_hidapi.h" +#include "SDL_hints.h" +#include "SDL_joystick.h" +#include "SDL_loadso.h" +#include "SDL_log.h" +#include "SDL_messagebox.h" +#include "SDL_metal.h" +#include "SDL_mutex.h" +#include "SDL_power.h" +#include "SDL_render.h" +#include "SDL_rwops.h" +#include "SDL_sensor.h" +#include "SDL_shape.h" +#include "SDL_system.h" +#include "SDL_thread.h" +#include "SDL_timer.h" +#include "SDL_version.h" +#include "SDL_video.h" +#include "SDL_locale.h" +#include "SDL_misc.h" + +#include "begin_code.h" +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/* WIKI CATEGORY: Init */ + +/* As of version 0.5, SDL is loaded dynamically into the application */ + +/** + * \name SDL_INIT_* + * + * These are the flags which may be passed to SDL_Init(). You should + * specify the subsystems which you will be using in your application. + */ +/* @{ */ +#define SDL_INIT_TIMER 0x00000001u +#define SDL_INIT_AUDIO 0x00000010u +#define SDL_INIT_VIDEO 0x00000020u /**< SDL_INIT_VIDEO implies SDL_INIT_EVENTS */ +#define SDL_INIT_JOYSTICK 0x00000200u /**< SDL_INIT_JOYSTICK implies SDL_INIT_EVENTS */ +#define SDL_INIT_HAPTIC 0x00001000u +#define SDL_INIT_GAMECONTROLLER 0x00002000u /**< SDL_INIT_GAMECONTROLLER implies SDL_INIT_JOYSTICK */ +#define SDL_INIT_EVENTS 0x00004000u +#define SDL_INIT_SENSOR 0x00008000u +#define SDL_INIT_NOPARACHUTE 0x00100000u /**< compatibility; this flag is ignored. */ +#define SDL_INIT_EVERYTHING ( \ + SDL_INIT_TIMER | SDL_INIT_AUDIO | SDL_INIT_VIDEO | SDL_INIT_EVENTS | \ + SDL_INIT_JOYSTICK | SDL_INIT_HAPTIC | SDL_INIT_GAMECONTROLLER | SDL_INIT_SENSOR \ + ) +/* @} */ + +/** + * Initialize the SDL library. + * + * SDL_Init() simply forwards to calling SDL_InitSubSystem(). Therefore, the + * two may be used interchangeably. Though for readability of your code + * SDL_InitSubSystem() might be preferred. + * + * The file I/O (for example: SDL_RWFromFile) and threading (SDL_CreateThread) + * subsystems are initialized by default. Message boxes + * (SDL_ShowSimpleMessageBox) also attempt to work without initializing the + * video subsystem, in hopes of being useful in showing an error dialog when + * SDL_Init fails. You must specifically initialize other subsystems if you + * use them in your application. + * + * Logging (such as SDL_Log) works without initialization, too. + * + * `flags` may be any of the following OR'd together: + * + * - `SDL_INIT_TIMER`: timer subsystem + * - `SDL_INIT_AUDIO`: audio subsystem + * - `SDL_INIT_VIDEO`: video subsystem; automatically initializes the events + * subsystem + * - `SDL_INIT_JOYSTICK`: joystick subsystem; automatically initializes the + * events subsystem + * - `SDL_INIT_HAPTIC`: haptic (force feedback) subsystem + * - `SDL_INIT_GAMECONTROLLER`: controller subsystem; automatically + * initializes the joystick subsystem + * - `SDL_INIT_EVENTS`: events subsystem + * - `SDL_INIT_EVERYTHING`: all of the above subsystems + * - `SDL_INIT_NOPARACHUTE`: compatibility; this flag is ignored + * + * Subsystem initialization is ref-counted, you must call SDL_QuitSubSystem() + * for each SDL_InitSubSystem() to correctly shutdown a subsystem manually (or + * call SDL_Quit() to force shutdown). If a subsystem is already loaded then + * this call will increase the ref-count and return. + * + * \param flags subsystem initialization flags. + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_InitSubSystem + * \sa SDL_Quit + * \sa SDL_SetMainReady + * \sa SDL_WasInit + */ +extern DECLSPEC int SDLCALL SDL_Init(Uint32 flags); + +/** + * Compatibility function to initialize the SDL library. + * + * In SDL2, this function and SDL_Init() are interchangeable. + * + * \param flags any of the flags used by SDL_Init(); see SDL_Init for details. + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_Init + * \sa SDL_Quit + * \sa SDL_QuitSubSystem + */ +extern DECLSPEC int SDLCALL SDL_InitSubSystem(Uint32 flags); + +/** + * Shut down specific SDL subsystems. + * + * If you start a subsystem using a call to that subsystem's init function + * (for example SDL_VideoInit()) instead of SDL_Init() or SDL_InitSubSystem(), + * SDL_QuitSubSystem() and SDL_WasInit() will not work. You will need to use + * that subsystem's quit function (SDL_VideoQuit()) directly instead. But + * generally, you should not be using those functions directly anyhow; use + * SDL_Init() instead. + * + * You still need to call SDL_Quit() even if you close all open subsystems + * with SDL_QuitSubSystem(). + * + * \param flags any of the flags used by SDL_Init(); see SDL_Init for details. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_InitSubSystem + * \sa SDL_Quit + */ +extern DECLSPEC void SDLCALL SDL_QuitSubSystem(Uint32 flags); + +/** + * Get a mask of the specified subsystems which are currently initialized. + * + * \param flags any of the flags used by SDL_Init(); see SDL_Init for details. + * \returns a mask of all initialized subsystems if `flags` is 0, otherwise it + * returns the initialization status of the specified subsystems. + * + * The return value does not include SDL_INIT_NOPARACHUTE. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_Init + * \sa SDL_InitSubSystem + */ +extern DECLSPEC Uint32 SDLCALL SDL_WasInit(Uint32 flags); + +/** + * Clean up all initialized subsystems. + * + * You should call this function even if you have already shutdown each + * initialized subsystem with SDL_QuitSubSystem(). It is safe to call this + * function even in the case of errors in initialization. + * + * If you start a subsystem using a call to that subsystem's init function + * (for example SDL_VideoInit()) instead of SDL_Init() or SDL_InitSubSystem(), + * then you must use that subsystem's quit function (SDL_VideoQuit()) to shut + * it down before calling SDL_Quit(). But generally, you should not be using + * those functions directly anyhow; use SDL_Init() instead. + * + * You can use this function with atexit() to ensure that it is run when your + * application is shutdown, but it is not wise to do this from a library or + * other dynamically loaded code. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_Init + * \sa SDL_QuitSubSystem + */ +extern DECLSPEC void SDLCALL SDL_Quit(void); + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include "close_code.h" + +#endif /* SDL_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/third_party/tlRender-install-Release/include/SDL2/SDL_assert.h b/third_party/tlRender-install-Release/include/SDL2/SDL_assert.h new file mode 100644 index 00000000..5d7e19ae --- /dev/null +++ b/third_party/tlRender-install-Release/include/SDL2/SDL_assert.h @@ -0,0 +1,324 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2025 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +#ifndef SDL_assert_h_ +#define SDL_assert_h_ + +#include "SDL_stdinc.h" + +#include "begin_code.h" +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef SDL_ASSERT_LEVEL +#ifdef SDL_DEFAULT_ASSERT_LEVEL +#define SDL_ASSERT_LEVEL SDL_DEFAULT_ASSERT_LEVEL +#elif defined(_DEBUG) || defined(DEBUG) || \ + (defined(__GNUC__) && !defined(__OPTIMIZE__)) +#define SDL_ASSERT_LEVEL 2 +#else +#define SDL_ASSERT_LEVEL 1 +#endif +#endif /* SDL_ASSERT_LEVEL */ + +/* +These are macros and not first class functions so that the debugger breaks +on the assertion line and not in some random guts of SDL, and so each +assert can have unique static variables associated with it. +*/ + +#if defined(_MSC_VER) +/* Don't include intrin.h here because it contains C++ code */ + extern void __cdecl __debugbreak(void); + #define SDL_TriggerBreakpoint() __debugbreak() +#elif _SDL_HAS_BUILTIN(__builtin_debugtrap) + #define SDL_TriggerBreakpoint() __builtin_debugtrap() +#elif ( (!defined(__NACL__)) && ((defined(__GNUC__) || defined(__clang__)) && (defined(__i386__) || defined(__x86_64__))) ) + #define SDL_TriggerBreakpoint() __asm__ __volatile__ ( "int $3\n\t" ) +#elif (defined(__GNUC__) || defined(__clang__)) && defined(__riscv) + #define SDL_TriggerBreakpoint() __asm__ __volatile__ ( "ebreak\n\t" ) +#elif ( defined(__APPLE__) && (defined(__arm64__) || defined(__aarch64__)) ) /* this might work on other ARM targets, but this is a known quantity... */ + #define SDL_TriggerBreakpoint() __asm__ __volatile__ ( "brk #22\n\t" ) +#elif defined(__APPLE__) && defined(__arm__) + #define SDL_TriggerBreakpoint() __asm__ __volatile__ ( "bkpt #22\n\t" ) +#elif defined(_WIN32) && ((defined(__GNUC__) || defined(__clang__)) && (defined(__arm64__) || defined(__aarch64__)) ) + #define SDL_TriggerBreakpoint() __asm__ __volatile__ ( "brk #0xF000\n\t" ) +#elif defined(__386__) && defined(__WATCOMC__) + #define SDL_TriggerBreakpoint() { _asm { int 0x03 } } +#elif defined(HAVE_SIGNAL_H) && !defined(__WATCOMC__) + #include + #define SDL_TriggerBreakpoint() raise(SIGTRAP) +#else + /* How do we trigger breakpoints on this platform? */ + #define SDL_TriggerBreakpoint() +#endif + +#if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) /* C99 supports __func__ as a standard. */ +# define SDL_FUNCTION __func__ +#elif ((defined(__GNUC__) && (__GNUC__ >= 2)) || defined(_MSC_VER) || defined (__WATCOMC__)) +# define SDL_FUNCTION __FUNCTION__ +#else +# define SDL_FUNCTION "???" +#endif +#define SDL_FILE __FILE__ +#define SDL_LINE __LINE__ + +/* +sizeof (x) makes the compiler still parse the expression even without +assertions enabled, so the code is always checked at compile time, but +doesn't actually generate code for it, so there are no side effects or +expensive checks at run time, just the constant size of what x WOULD be, +which presumably gets optimized out as unused. +This also solves the problem of... + + int somevalue = blah(); + SDL_assert(somevalue == 1); + +...which would cause compiles to complain that somevalue is unused if we +disable assertions. +*/ + +/* "while (0,0)" fools Microsoft's compiler's /W4 warning level into thinking + this condition isn't constant. And looks like an owl's face! */ +#ifdef _MSC_VER /* stupid /W4 warnings. */ +#define SDL_NULL_WHILE_LOOP_CONDITION (0,0) +#else +#define SDL_NULL_WHILE_LOOP_CONDITION (0) +#endif + +#define SDL_disabled_assert(condition) \ + do { (void) sizeof ((condition)); } while (SDL_NULL_WHILE_LOOP_CONDITION) + +typedef enum +{ + SDL_ASSERTION_RETRY, /**< Retry the assert immediately. */ + SDL_ASSERTION_BREAK, /**< Make the debugger trigger a breakpoint. */ + SDL_ASSERTION_ABORT, /**< Terminate the program. */ + SDL_ASSERTION_IGNORE, /**< Ignore the assert. */ + SDL_ASSERTION_ALWAYS_IGNORE /**< Ignore the assert from now on. */ +} SDL_AssertState; + +typedef struct SDL_AssertData +{ + int always_ignore; + unsigned int trigger_count; + const char *condition; + const char *filename; + int linenum; + const char *function; + const struct SDL_AssertData *next; +} SDL_AssertData; + +/* Never call this directly. Use the SDL_assert* macros. */ +extern DECLSPEC SDL_AssertState SDLCALL SDL_ReportAssertion(SDL_AssertData *, + const char *, + const char *, int) +#if defined(__clang__) +#if __has_feature(attribute_analyzer_noreturn) +/* this tells Clang's static analysis that we're a custom assert function, + and that the analyzer should assume the condition was always true past this + SDL_assert test. */ + __attribute__((analyzer_noreturn)) +#endif +#endif +; + +/* the do {} while(0) avoids dangling else problems: + if (x) SDL_assert(y); else blah(); + ... without the do/while, the "else" could attach to this macro's "if". + We try to handle just the minimum we need here in a macro...the loop, + the static vars, and break points. The heavy lifting is handled in + SDL_ReportAssertion(), in SDL_assert.c. +*/ +#define SDL_enabled_assert(condition) \ + do { \ + while ( !(condition) ) { \ + static struct SDL_AssertData sdl_assert_data = { 0, 0, #condition, NULL, 0, NULL, NULL }; \ + const SDL_AssertState sdl_assert_state = SDL_ReportAssertion(&sdl_assert_data, SDL_FUNCTION, SDL_FILE, SDL_LINE); \ + if (sdl_assert_state == SDL_ASSERTION_RETRY) { \ + continue; /* go again. */ \ + } else if (sdl_assert_state == SDL_ASSERTION_BREAK) { \ + SDL_TriggerBreakpoint(); \ + } \ + break; /* not retrying. */ \ + } \ + } while (SDL_NULL_WHILE_LOOP_CONDITION) + +/* Enable various levels of assertions. */ +#if SDL_ASSERT_LEVEL == 0 /* assertions disabled */ +# define SDL_assert(condition) SDL_disabled_assert(condition) +# define SDL_assert_release(condition) SDL_disabled_assert(condition) +# define SDL_assert_paranoid(condition) SDL_disabled_assert(condition) +#elif SDL_ASSERT_LEVEL == 1 /* release settings. */ +# define SDL_assert(condition) SDL_disabled_assert(condition) +# define SDL_assert_release(condition) SDL_enabled_assert(condition) +# define SDL_assert_paranoid(condition) SDL_disabled_assert(condition) +#elif SDL_ASSERT_LEVEL == 2 /* normal settings. */ +# define SDL_assert(condition) SDL_enabled_assert(condition) +# define SDL_assert_release(condition) SDL_enabled_assert(condition) +# define SDL_assert_paranoid(condition) SDL_disabled_assert(condition) +#elif SDL_ASSERT_LEVEL == 3 /* paranoid settings. */ +# define SDL_assert(condition) SDL_enabled_assert(condition) +# define SDL_assert_release(condition) SDL_enabled_assert(condition) +# define SDL_assert_paranoid(condition) SDL_enabled_assert(condition) +#else +# error Unknown assertion level. +#endif + +/* this assertion is never disabled at any level. */ +#define SDL_assert_always(condition) SDL_enabled_assert(condition) + + +/** + * A callback that fires when an SDL assertion fails. + * + * \param data a pointer to the SDL_AssertData structure corresponding to the + * current assertion. + * \param userdata what was passed as `userdata` to SDL_SetAssertionHandler(). + * \returns an SDL_AssertState value indicating how to handle the failure. + */ +typedef SDL_AssertState (SDLCALL *SDL_AssertionHandler)( + const SDL_AssertData* data, void* userdata); + +/** + * Set an application-defined assertion handler. + * + * This function allows an application to show its own assertion UI and/or + * force the response to an assertion failure. If the application doesn't + * provide this, SDL will try to do the right thing, popping up a + * system-specific GUI dialog, and probably minimizing any fullscreen windows. + * + * This callback may fire from any thread, but it runs wrapped in a mutex, so + * it will only fire from one thread at a time. + * + * This callback is NOT reset to SDL's internal handler upon SDL_Quit()! + * + * \param handler the SDL_AssertionHandler function to call when an assertion + * fails or NULL for the default handler. + * \param userdata a pointer that is passed to `handler`. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetAssertionHandler + */ +extern DECLSPEC void SDLCALL SDL_SetAssertionHandler( + SDL_AssertionHandler handler, + void *userdata); + +/** + * Get the default assertion handler. + * + * This returns the function pointer that is called by default when an + * assertion is triggered. This is an internal function provided by SDL, that + * is used for assertions when SDL_SetAssertionHandler() hasn't been used to + * provide a different function. + * + * \returns the default SDL_AssertionHandler that is called when an assert + * triggers. + * + * \since This function is available since SDL 2.0.2. + * + * \sa SDL_GetAssertionHandler + */ +extern DECLSPEC SDL_AssertionHandler SDLCALL SDL_GetDefaultAssertionHandler(void); + +/** + * Get the current assertion handler. + * + * This returns the function pointer that is called when an assertion is + * triggered. This is either the value last passed to + * SDL_SetAssertionHandler(), or if no application-specified function is set, + * is equivalent to calling SDL_GetDefaultAssertionHandler(). + * + * The parameter `puserdata` is a pointer to a void*, which will store the + * "userdata" pointer that was passed to SDL_SetAssertionHandler(). This value + * will always be NULL for the default handler. If you don't care about this + * data, it is safe to pass a NULL pointer to this function to ignore it. + * + * \param puserdata pointer which is filled with the "userdata" pointer that + * was passed to SDL_SetAssertionHandler(). + * \returns the SDL_AssertionHandler that is called when an assert triggers. + * + * \since This function is available since SDL 2.0.2. + * + * \sa SDL_SetAssertionHandler + */ +extern DECLSPEC SDL_AssertionHandler SDLCALL SDL_GetAssertionHandler(void **puserdata); + +/** + * Get a list of all assertion failures. + * + * This function gets all assertions triggered since the last call to + * SDL_ResetAssertionReport(), or the start of the program. + * + * The proper way to examine this data looks something like this: + * + * ```c + * const SDL_AssertData *item = SDL_GetAssertionReport(); + * while (item) { + * printf("'%s', %s (%s:%d), triggered %u times, always ignore: %s.\\n", + * item->condition, item->function, item->filename, + * item->linenum, item->trigger_count, + * item->always_ignore ? "yes" : "no"); + * item = item->next; + * } + * ``` + * + * \returns a list of all failed assertions or NULL if the list is empty. This + * memory should not be modified or freed by the application. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_ResetAssertionReport + */ +extern DECLSPEC const SDL_AssertData * SDLCALL SDL_GetAssertionReport(void); + +/** + * Clear the list of all assertion failures. + * + * This function will clear the list of all assertions triggered up to that + * point. Immediately following this call, SDL_GetAssertionReport will return + * no items. In addition, any previously-triggered assertions will be reset to + * a trigger_count of zero, and their always_ignore state will be false. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetAssertionReport + */ +extern DECLSPEC void SDLCALL SDL_ResetAssertionReport(void); + + +/* these had wrong naming conventions until 2.0.4. Please update your app! */ +#define SDL_assert_state SDL_AssertState +#define SDL_assert_data SDL_AssertData + + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include "close_code.h" + +#endif /* SDL_assert_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/third_party/tlRender-install-Release/include/SDL2/SDL_atomic.h b/third_party/tlRender-install-Release/include/SDL2/SDL_atomic.h new file mode 100644 index 00000000..226ec7c6 --- /dev/null +++ b/third_party/tlRender-install-Release/include/SDL2/SDL_atomic.h @@ -0,0 +1,408 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2025 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +/** + * # CategoryAtomic + * + * Atomic operations. + * + * IMPORTANT: If you are not an expert in concurrent lockless programming, you + * should not be using any functions in this file. You should be protecting + * your data structures with full mutexes instead. + * + * ***Seriously, here be dragons!*** + * + * You can find out a little more about lockless programming and the subtle + * issues that can arise here: + * https://learn.microsoft.com/en-us/windows/win32/dxtecharts/lockless-programming + * + * There's also lots of good information here: + * + * - https://www.1024cores.net/home/lock-free-algorithms + * - https://preshing.com/ + * + * These operations may or may not actually be implemented using processor + * specific atomic operations. When possible they are implemented as true + * processor specific atomic operations. When that is not possible the are + * implemented using locks that *do* use the available atomic operations. + * + * All of the atomic operations that modify memory are full memory barriers. + */ + +#ifndef SDL_atomic_h_ +#define SDL_atomic_h_ + +#include "SDL_stdinc.h" +#include "SDL_platform.h" + +#include "begin_code.h" + +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \name SDL AtomicLock + * + * The atomic locks are efficient spinlocks using CPU instructions, + * but are vulnerable to starvation and can spin forever if a thread + * holding a lock has been terminated. For this reason you should + * minimize the code executed inside an atomic lock and never do + * expensive things like API or system calls while holding them. + * + * The atomic locks are not safe to lock recursively. + * + * Porting Note: + * The spin lock functions and type are required and can not be + * emulated because they are used in the atomic emulation code. + */ +/* @{ */ + +typedef int SDL_SpinLock; + +/** + * Try to lock a spin lock by setting it to a non-zero value. + * + * ***Please note that spinlocks are dangerous if you don't know what you're + * doing. Please be careful using any sort of spinlock!*** + * + * \param lock a pointer to a lock variable. + * \returns SDL_TRUE if the lock succeeded, SDL_FALSE if the lock is already + * held. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_AtomicLock + * \sa SDL_AtomicUnlock + */ +extern DECLSPEC SDL_bool SDLCALL SDL_AtomicTryLock(SDL_SpinLock *lock); + +/** + * Lock a spin lock by setting it to a non-zero value. + * + * ***Please note that spinlocks are dangerous if you don't know what you're + * doing. Please be careful using any sort of spinlock!*** + * + * \param lock a pointer to a lock variable. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_AtomicTryLock + * \sa SDL_AtomicUnlock + */ +extern DECLSPEC void SDLCALL SDL_AtomicLock(SDL_SpinLock *lock); + +/** + * Unlock a spin lock by setting it to 0. + * + * Always returns immediately. + * + * ***Please note that spinlocks are dangerous if you don't know what you're + * doing. Please be careful using any sort of spinlock!*** + * + * \param lock a pointer to a lock variable. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_AtomicLock + * \sa SDL_AtomicTryLock + */ +extern DECLSPEC void SDLCALL SDL_AtomicUnlock(SDL_SpinLock *lock); + +/* @} *//* SDL AtomicLock */ + + +/** + * The compiler barrier prevents the compiler from reordering + * reads and writes to globally visible variables across the call. + */ +#if defined(_MSC_VER) && (_MSC_VER > 1200) && !defined(__clang__) +void _ReadWriteBarrier(void); +#pragma intrinsic(_ReadWriteBarrier) +#define SDL_CompilerBarrier() _ReadWriteBarrier() +#elif (defined(__GNUC__) && !defined(__EMSCRIPTEN__)) || (defined(__SUNPRO_C) && (__SUNPRO_C >= 0x5120)) +/* This is correct for all CPUs when using GCC or Solaris Studio 12.1+. */ +#define SDL_CompilerBarrier() __asm__ __volatile__ ("" : : : "memory") +#elif defined(__WATCOMC__) +extern __inline void SDL_CompilerBarrier(void); +#pragma aux SDL_CompilerBarrier = "" parm [] modify exact []; +#else +#define SDL_CompilerBarrier() \ +{ SDL_SpinLock _tmp = 0; SDL_AtomicLock(&_tmp); SDL_AtomicUnlock(&_tmp); } +#endif + +/** + * Memory barriers are designed to prevent reads and writes from being + * reordered by the compiler and being seen out of order on multi-core CPUs. + * + * A typical pattern would be for thread A to write some data and a flag, and + * for thread B to read the flag and get the data. In this case you would + * insert a release barrier between writing the data and the flag, + * guaranteeing that the data write completes no later than the flag is + * written, and you would insert an acquire barrier between reading the flag + * and reading the data, to ensure that all the reads associated with the flag + * have completed. + * + * In this pattern you should always see a release barrier paired with an + * acquire barrier and you should gate the data reads/writes with a single + * flag variable. + * + * For more information on these semantics, take a look at the blog post: + * http://preshing.com/20120913/acquire-and-release-semantics + * + * \since This function is available since SDL 2.0.6. + */ +extern DECLSPEC void SDLCALL SDL_MemoryBarrierReleaseFunction(void); +extern DECLSPEC void SDLCALL SDL_MemoryBarrierAcquireFunction(void); + +#if defined(__GNUC__) && (defined(__powerpc__) || defined(__ppc__)) +#define SDL_MemoryBarrierRelease() __asm__ __volatile__ ("lwsync" : : : "memory") +#define SDL_MemoryBarrierAcquire() __asm__ __volatile__ ("lwsync" : : : "memory") +#elif defined(__GNUC__) && defined(__aarch64__) +#define SDL_MemoryBarrierRelease() __asm__ __volatile__ ("dmb ish" : : : "memory") +#define SDL_MemoryBarrierAcquire() __asm__ __volatile__ ("dmb ish" : : : "memory") +#elif defined(__GNUC__) && defined(__arm__) +#if 0 /* defined(__LINUX__) || defined(__ANDROID__) */ +/* Information from: + https://chromium.googlesource.com/chromium/chromium/+/trunk/base/atomicops_internals_arm_gcc.h#19 + + The Linux kernel provides a helper function which provides the right code for a memory barrier, + hard-coded at address 0xffff0fa0 +*/ +typedef void (*SDL_KernelMemoryBarrierFunc)(); +#define SDL_MemoryBarrierRelease() ((SDL_KernelMemoryBarrierFunc)0xffff0fa0)() +#define SDL_MemoryBarrierAcquire() ((SDL_KernelMemoryBarrierFunc)0xffff0fa0)() +#elif 0 /* defined(__QNXNTO__) */ +#include + +#define SDL_MemoryBarrierRelease() __cpu_membarrier() +#define SDL_MemoryBarrierAcquire() __cpu_membarrier() +#else +#if defined(__ARM_ARCH_7__) || defined(__ARM_ARCH_7A__) || defined(__ARM_ARCH_7EM__) || defined(__ARM_ARCH_7R__) || defined(__ARM_ARCH_7M__) || defined(__ARM_ARCH_7S__) || defined(__ARM_ARCH_8A__) +#define SDL_MemoryBarrierRelease() __asm__ __volatile__ ("dmb ish" : : : "memory") +#define SDL_MemoryBarrierAcquire() __asm__ __volatile__ ("dmb ish" : : : "memory") +#elif defined(__ARM_ARCH_6__) || defined(__ARM_ARCH_6J__) || defined(__ARM_ARCH_6K__) || defined(__ARM_ARCH_6T2__) || defined(__ARM_ARCH_6Z__) || defined(__ARM_ARCH_6ZK__) +#ifdef __thumb__ +/* The mcr instruction isn't available in thumb mode, use real functions */ +#define SDL_MEMORY_BARRIER_USES_FUNCTION +#define SDL_MemoryBarrierRelease() SDL_MemoryBarrierReleaseFunction() +#define SDL_MemoryBarrierAcquire() SDL_MemoryBarrierAcquireFunction() +#else +#define SDL_MemoryBarrierRelease() __asm__ __volatile__ ("mcr p15, 0, %0, c7, c10, 5" : : "r"(0) : "memory") +#define SDL_MemoryBarrierAcquire() __asm__ __volatile__ ("mcr p15, 0, %0, c7, c10, 5" : : "r"(0) : "memory") +#endif /* __thumb__ */ +#else +#define SDL_MemoryBarrierRelease() __asm__ __volatile__ ("" : : : "memory") +#define SDL_MemoryBarrierAcquire() __asm__ __volatile__ ("" : : : "memory") +#endif /* __LINUX__ || __ANDROID__ */ +#endif /* __GNUC__ && __arm__ */ +#else +#if (defined(__SUNPRO_C) && (__SUNPRO_C >= 0x5120)) +/* This is correct for all CPUs on Solaris when using Solaris Studio 12.1+. */ +#include +#define SDL_MemoryBarrierRelease() __machine_rel_barrier() +#define SDL_MemoryBarrierAcquire() __machine_acq_barrier() +#else +/* This is correct for the x86 and x64 CPUs, and we'll expand this over time. */ +#define SDL_MemoryBarrierRelease() SDL_CompilerBarrier() +#define SDL_MemoryBarrierAcquire() SDL_CompilerBarrier() +#endif +#endif + +/* "REP NOP" is PAUSE, coded for tools that don't know it by that name. */ +#if (defined(__GNUC__) || defined(__clang__)) && (defined(__i386__) || defined(__x86_64__)) + #define SDL_CPUPauseInstruction() __asm__ __volatile__("pause\n") /* Some assemblers can't do REP NOP, so go with PAUSE. */ +#elif (defined(__arm__) && defined(__ARM_ARCH) && __ARM_ARCH >= 7) || defined(__aarch64__) + #define SDL_CPUPauseInstruction() __asm__ __volatile__("yield" ::: "memory") +#elif (defined(__powerpc__) || defined(__powerpc64__)) + #define SDL_CPUPauseInstruction() __asm__ __volatile__("or 27,27,27"); +#elif defined(_MSC_VER) && (defined(_M_IX86) || defined(_M_X64)) + #define SDL_CPUPauseInstruction() _mm_pause() /* this is actually "rep nop" and not a SIMD instruction. No inline asm in MSVC x86-64! */ +#elif defined(_MSC_VER) && (defined(_M_ARM) || defined(_M_ARM64)) + #define SDL_CPUPauseInstruction() __yield() +#elif defined(__WATCOMC__) && defined(__386__) + extern __inline void SDL_CPUPauseInstruction(void); + #pragma aux SDL_CPUPauseInstruction = ".686p" ".xmm2" "pause" +#else + #define SDL_CPUPauseInstruction() +#endif + + +/** + * A type representing an atomic integer value. + * + * It is a struct so people don't accidentally use numeric operations on it. + */ +typedef struct SDL_atomic_t { + int value; +} SDL_atomic_t; + +/** + * Set an atomic variable to a new value if it is currently an old value. + * + * ***Note: If you don't know what this function is for, you shouldn't use + * it!*** + * + * \param a a pointer to an SDL_atomic_t variable to be modified. + * \param oldval the old value. + * \param newval the new value. + * \returns SDL_TRUE if the atomic variable was set, SDL_FALSE otherwise. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_AtomicCASPtr + * \sa SDL_AtomicGet + * \sa SDL_AtomicSet + */ +extern DECLSPEC SDL_bool SDLCALL SDL_AtomicCAS(SDL_atomic_t *a, int oldval, int newval); + +/** + * Set an atomic variable to a value. + * + * This function also acts as a full memory barrier. + * + * ***Note: If you don't know what this function is for, you shouldn't use + * it!*** + * + * \param a a pointer to an SDL_atomic_t variable to be modified. + * \param v the desired value. + * \returns the previous value of the atomic variable. + * + * \since This function is available since SDL 2.0.2. + * + * \sa SDL_AtomicGet + */ +extern DECLSPEC int SDLCALL SDL_AtomicSet(SDL_atomic_t *a, int v); + +/** + * Get the value of an atomic variable. + * + * ***Note: If you don't know what this function is for, you shouldn't use + * it!*** + * + * \param a a pointer to an SDL_atomic_t variable. + * \returns the current value of an atomic variable. + * + * \since This function is available since SDL 2.0.2. + * + * \sa SDL_AtomicSet + */ +extern DECLSPEC int SDLCALL SDL_AtomicGet(SDL_atomic_t *a); + +/** + * Add to an atomic variable. + * + * This function also acts as a full memory barrier. + * + * ***Note: If you don't know what this function is for, you shouldn't use + * it!*** + * + * \param a a pointer to an SDL_atomic_t variable to be modified. + * \param v the desired value to add. + * \returns the previous value of the atomic variable. + * + * \since This function is available since SDL 2.0.2. + * + * \sa SDL_AtomicDecRef + * \sa SDL_AtomicIncRef + */ +extern DECLSPEC int SDLCALL SDL_AtomicAdd(SDL_atomic_t *a, int v); + +/** + * \brief Increment an atomic variable used as a reference count. + */ +#ifndef SDL_AtomicIncRef +#define SDL_AtomicIncRef(a) SDL_AtomicAdd(a, 1) +#endif + +/** + * \brief Decrement an atomic variable used as a reference count. + * + * \return SDL_TRUE if the variable reached zero after decrementing, + * SDL_FALSE otherwise + */ +#ifndef SDL_AtomicDecRef +#define SDL_AtomicDecRef(a) (SDL_AtomicAdd(a, -1) == 1) +#endif + +/** + * Set a pointer to a new value if it is currently an old value. + * + * ***Note: If you don't know what this function is for, you shouldn't use + * it!*** + * + * \param a a pointer to a pointer. + * \param oldval the old pointer value. + * \param newval the new pointer value. + * \returns SDL_TRUE if the pointer was set, SDL_FALSE otherwise. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_AtomicCAS + * \sa SDL_AtomicGetPtr + * \sa SDL_AtomicSetPtr + */ +extern DECLSPEC SDL_bool SDLCALL SDL_AtomicCASPtr(void **a, void *oldval, void *newval); + +/** + * Set a pointer to a value atomically. + * + * ***Note: If you don't know what this function is for, you shouldn't use + * it!*** + * + * \param a a pointer to a pointer. + * \param v the desired pointer value. + * \returns the previous value of the pointer. + * + * \since This function is available since SDL 2.0.2. + * + * \sa SDL_AtomicCASPtr + * \sa SDL_AtomicGetPtr + */ +extern DECLSPEC void* SDLCALL SDL_AtomicSetPtr(void **a, void* v); + +/** + * Get the value of a pointer atomically. + * + * ***Note: If you don't know what this function is for, you shouldn't use + * it!*** + * + * \param a a pointer to a pointer. + * \returns the current value of a pointer. + * + * \since This function is available since SDL 2.0.2. + * + * \sa SDL_AtomicCASPtr + * \sa SDL_AtomicSetPtr + */ +extern DECLSPEC void* SDLCALL SDL_AtomicGetPtr(void **a); + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif + +#include "close_code.h" + +#endif /* SDL_atomic_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/third_party/tlRender-install-Release/include/SDL2/SDL_audio.h b/third_party/tlRender-install-Release/include/SDL2/SDL_audio.h new file mode 100644 index 00000000..cb76e93e --- /dev/null +++ b/third_party/tlRender-install-Release/include/SDL2/SDL_audio.h @@ -0,0 +1,1502 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2025 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +/* !!! FIXME: several functions in here need Doxygen comments. */ + +/** + * # CategoryAudio + * + * Access to the raw audio mixing buffer for the SDL library. + */ + +#ifndef SDL_audio_h_ +#define SDL_audio_h_ + +#include "SDL_stdinc.h" +#include "SDL_error.h" +#include "SDL_endian.h" +#include "SDL_mutex.h" +#include "SDL_thread.h" +#include "SDL_rwops.h" + +#include "begin_code.h" +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/** + * Audio format flags. + * + * These are what the 16 bits in SDL_AudioFormat currently mean... + * (Unspecified bits are always zero). + * + * ``` + * ++-----------------------sample is signed if set + * || + * || ++-----------sample is bigendian if set + * || || + * || || ++---sample is float if set + * || || || + * || || || +---sample bit size---+ + * || || || | | + * 15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00 + * ``` + * + * There are macros in SDL 2.0 and later to query these bits. + */ +typedef Uint16 SDL_AudioFormat; + +/** + * \name Audio flags + */ +/* @{ */ + +#define SDL_AUDIO_MASK_BITSIZE (0xFF) +#define SDL_AUDIO_MASK_DATATYPE (1<<8) +#define SDL_AUDIO_MASK_ENDIAN (1<<12) +#define SDL_AUDIO_MASK_SIGNED (1<<15) +#define SDL_AUDIO_BITSIZE(x) (x & SDL_AUDIO_MASK_BITSIZE) +#define SDL_AUDIO_ISFLOAT(x) (x & SDL_AUDIO_MASK_DATATYPE) +#define SDL_AUDIO_ISBIGENDIAN(x) (x & SDL_AUDIO_MASK_ENDIAN) +#define SDL_AUDIO_ISSIGNED(x) (x & SDL_AUDIO_MASK_SIGNED) +#define SDL_AUDIO_ISINT(x) (!SDL_AUDIO_ISFLOAT(x)) +#define SDL_AUDIO_ISLITTLEENDIAN(x) (!SDL_AUDIO_ISBIGENDIAN(x)) +#define SDL_AUDIO_ISUNSIGNED(x) (!SDL_AUDIO_ISSIGNED(x)) + +/** + * \name Audio format flags + * + * Defaults to LSB byte order. + */ +/* @{ */ +#define AUDIO_U8 0x0008 /**< Unsigned 8-bit samples */ +#define AUDIO_S8 0x8008 /**< Signed 8-bit samples */ +#define AUDIO_U16LSB 0x0010 /**< Unsigned 16-bit samples */ +#define AUDIO_S16LSB 0x8010 /**< Signed 16-bit samples */ +#define AUDIO_U16MSB 0x1010 /**< As above, but big-endian byte order */ +#define AUDIO_S16MSB 0x9010 /**< As above, but big-endian byte order */ +#define AUDIO_U16 AUDIO_U16LSB +#define AUDIO_S16 AUDIO_S16LSB +/* @} */ + +/** + * \name int32 support + */ +/* @{ */ +#define AUDIO_S32LSB 0x8020 /**< 32-bit integer samples */ +#define AUDIO_S32MSB 0x9020 /**< As above, but big-endian byte order */ +#define AUDIO_S32 AUDIO_S32LSB +/* @} */ + +/** + * \name float32 support + */ +/* @{ */ +#define AUDIO_F32LSB 0x8120 /**< 32-bit floating point samples */ +#define AUDIO_F32MSB 0x9120 /**< As above, but big-endian byte order */ +#define AUDIO_F32 AUDIO_F32LSB +/* @} */ + +/** + * \name Native audio byte ordering + */ +/* @{ */ +#if SDL_BYTEORDER == SDL_LIL_ENDIAN +#define AUDIO_U16SYS AUDIO_U16LSB +#define AUDIO_S16SYS AUDIO_S16LSB +#define AUDIO_S32SYS AUDIO_S32LSB +#define AUDIO_F32SYS AUDIO_F32LSB +#else +#define AUDIO_U16SYS AUDIO_U16MSB +#define AUDIO_S16SYS AUDIO_S16MSB +#define AUDIO_S32SYS AUDIO_S32MSB +#define AUDIO_F32SYS AUDIO_F32MSB +#endif +/* @} */ + +/** + * \name Allow change flags + * + * Which audio format changes are allowed when opening a device. + */ +/* @{ */ +#define SDL_AUDIO_ALLOW_FREQUENCY_CHANGE 0x00000001 +#define SDL_AUDIO_ALLOW_FORMAT_CHANGE 0x00000002 +#define SDL_AUDIO_ALLOW_CHANNELS_CHANGE 0x00000004 +#define SDL_AUDIO_ALLOW_SAMPLES_CHANGE 0x00000008 +#define SDL_AUDIO_ALLOW_ANY_CHANGE (SDL_AUDIO_ALLOW_FREQUENCY_CHANGE|SDL_AUDIO_ALLOW_FORMAT_CHANGE|SDL_AUDIO_ALLOW_CHANNELS_CHANGE|SDL_AUDIO_ALLOW_SAMPLES_CHANGE) +/* @} */ + +/* @} *//* Audio flags */ + +/** + * This function is called when the audio device needs more data. + * + * \param userdata An application-specific parameter saved in the + * SDL_AudioSpec structure. + * \param stream A pointer to the audio data buffer. + * \param len Length of **stream** in bytes. + */ +typedef void (SDLCALL * SDL_AudioCallback) (void *userdata, Uint8 * stream, + int len); + +/** + * The calculated values in this structure are calculated by SDL_OpenAudio(). + * + * For multi-channel audio, the default SDL channel mapping is: + * + * ``` + * 2: FL FR (stereo) + * 3: FL FR LFE (2.1 surround) + * 4: FL FR BL BR (quad) + * 5: FL FR LFE BL BR (4.1 surround) + * 6: FL FR FC LFE SL SR (5.1 surround - last two can also be BL BR) + * 7: FL FR FC LFE BC SL SR (6.1 surround) + * 8: FL FR FC LFE BL BR SL SR (7.1 surround) + * ``` + */ +typedef struct SDL_AudioSpec +{ + int freq; /**< DSP frequency -- samples per second */ + SDL_AudioFormat format; /**< Audio data format */ + Uint8 channels; /**< Number of channels: 1 mono, 2 stereo */ + Uint8 silence; /**< Audio buffer silence value (calculated) */ + Uint16 samples; /**< Audio buffer size in sample FRAMES (total samples divided by channel count) */ + Uint16 padding; /**< Necessary for some compile environments */ + Uint32 size; /**< Audio buffer size in bytes (calculated) */ + SDL_AudioCallback callback; /**< Callback that feeds the audio device (NULL to use SDL_QueueAudio()). */ + void *userdata; /**< Userdata passed to callback (ignored for NULL callbacks). */ +} SDL_AudioSpec; + + +struct SDL_AudioCVT; +typedef void (SDLCALL * SDL_AudioFilter) (struct SDL_AudioCVT * cvt, + SDL_AudioFormat format); + +/** + * Upper limit of filters in SDL_AudioCVT + * + * The maximum number of SDL_AudioFilter functions in SDL_AudioCVT is + * currently limited to 9. The SDL_AudioCVT.filters array has 10 pointers, one + * of which is the terminating NULL pointer. + */ +#define SDL_AUDIOCVT_MAX_FILTERS 9 + +/** + * \struct SDL_AudioCVT + * \brief A structure to hold a set of audio conversion filters and buffers. + * + * Note that various parts of the conversion pipeline can take advantage + * of SIMD operations (like SSE2, for example). SDL_AudioCVT doesn't require + * you to pass it aligned data, but can possibly run much faster if you + * set both its (buf) field to a pointer that is aligned to 16 bytes, and its + * (len) field to something that's a multiple of 16, if possible. + */ +#if defined(__GNUC__) && !defined(__CHERI_PURE_CAPABILITY__) +/* This structure is 84 bytes on 32-bit architectures, make sure GCC doesn't + pad it out to 88 bytes to guarantee ABI compatibility between compilers. + This is not a concern on CHERI architectures, where pointers must be stored + at aligned locations otherwise they will become invalid, and thus structs + containing pointers cannot be packed without giving a warning or error. + vvv + The next time we rev the ABI, make sure to size the ints and add padding. +*/ +#define SDL_AUDIOCVT_PACKED __attribute__((packed)) +#else +#define SDL_AUDIOCVT_PACKED +#endif +/* */ +typedef struct SDL_AudioCVT +{ + int needed; /**< Set to 1 if conversion possible */ + SDL_AudioFormat src_format; /**< Source audio format */ + SDL_AudioFormat dst_format; /**< Target audio format */ + double rate_incr; /**< Rate conversion increment */ + Uint8 *buf; /**< Buffer to hold entire audio data */ + int len; /**< Length of original audio buffer */ + int len_cvt; /**< Length of converted audio buffer */ + int len_mult; /**< buffer must be len*len_mult big */ + double len_ratio; /**< Given len, final size is len*len_ratio */ + SDL_AudioFilter filters[SDL_AUDIOCVT_MAX_FILTERS + 1]; /**< NULL-terminated list of filter functions */ + int filter_index; /**< Current audio conversion function */ +} SDL_AUDIOCVT_PACKED SDL_AudioCVT; + + +/* Function prototypes */ + +/** + * \name Driver discovery functions + * + * These functions return the list of built in audio drivers, in the + * order that they are normally initialized by default. + */ +/* @{ */ + +/** + * Use this function to get the number of built-in audio drivers. + * + * This function returns a hardcoded number. This never returns a negative + * value; if there are no drivers compiled into this build of SDL, this + * function returns zero. The presence of a driver in this list does not mean + * it will function, it just means SDL is capable of interacting with that + * interface. For example, a build of SDL might have esound support, but if + * there's no esound server available, SDL's esound driver would fail if used. + * + * By default, SDL tries all drivers, in its preferred order, until one is + * found to be usable. + * + * \returns the number of built-in audio drivers. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetAudioDriver + */ +extern DECLSPEC int SDLCALL SDL_GetNumAudioDrivers(void); + +/** + * Use this function to get the name of a built in audio driver. + * + * The list of audio drivers is given in the order that they are normally + * initialized by default; the drivers that seem more reasonable to choose + * first (as far as the SDL developers believe) are earlier in the list. + * + * The names of drivers are all simple, low-ASCII identifiers, like "alsa", + * "coreaudio" or "xaudio2". These never have Unicode characters, and are not + * meant to be proper names. + * + * \param index the index of the audio driver; the value ranges from 0 to + * SDL_GetNumAudioDrivers() - 1. + * \returns the name of the audio driver at the requested index, or NULL if an + * invalid index was specified. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetNumAudioDrivers + */ +extern DECLSPEC const char *SDLCALL SDL_GetAudioDriver(int index); +/* @} */ + +/** + * \name Initialization and cleanup + * + * \internal These functions are used internally, and should not be used unless + * you have a specific need to specify the audio driver you want to + * use. You should normally use SDL_Init() or SDL_InitSubSystem(). + */ +/* @{ */ + +/** + * Use this function to initialize a particular audio driver. + * + * This function is used internally, and should not be used unless you have a + * specific need to designate the audio driver you want to use. You should + * normally use SDL_Init() or SDL_InitSubSystem(). + * + * \param driver_name the name of the desired audio driver. + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_AudioQuit + */ +extern DECLSPEC int SDLCALL SDL_AudioInit(const char *driver_name); + +/** + * Use this function to shut down audio if you initialized it with + * SDL_AudioInit(). + * + * This function is used internally, and should not be used unless you have a + * specific need to specify the audio driver you want to use. You should + * normally use SDL_Quit() or SDL_QuitSubSystem(). + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_AudioInit + */ +extern DECLSPEC void SDLCALL SDL_AudioQuit(void); +/* @} */ + +/** + * Get the name of the current audio driver. + * + * The returned string points to internal static memory and thus never becomes + * invalid, even if you quit the audio subsystem and initialize a new driver + * (although such a case would return a different static string from another + * call to this function, of course). As such, you should not modify or free + * the returned string. + * + * \returns the name of the current audio driver or NULL if no driver has been + * initialized. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_AudioInit + */ +extern DECLSPEC const char *SDLCALL SDL_GetCurrentAudioDriver(void); + +/** + * This function is a legacy means of opening the audio device. + * + * This function remains for compatibility with SDL 1.2, but also because it's + * slightly easier to use than the new functions in SDL 2.0. The new, more + * powerful, and preferred way to do this is SDL_OpenAudioDevice(). + * + * This function is roughly equivalent to: + * + * ```c + * SDL_OpenAudioDevice(NULL, 0, desired, obtained, SDL_AUDIO_ALLOW_ANY_CHANGE); + * ``` + * + * With two notable exceptions: + * + * - If `obtained` is NULL, we use `desired` (and allow no changes), which + * means desired will be modified to have the correct values for silence, + * etc, and SDL will convert any differences between your app's specific + * request and the hardware behind the scenes. + * - The return value is always success or failure, and not a device ID, which + * means you can only have one device open at a time with this function. + * + * \param desired an SDL_AudioSpec structure representing the desired output + * format. Please refer to the SDL_OpenAudioDevice + * documentation for details on how to prepare this structure. + * \param obtained an SDL_AudioSpec structure filled in with the actual + * parameters, or NULL. + * \returns 0 if successful, placing the actual hardware parameters in the + * structure pointed to by `obtained`. + * + * If `obtained` is NULL, the audio data passed to the callback + * function will be guaranteed to be in the requested format, and + * will be automatically converted to the actual hardware audio + * format if necessary. If `obtained` is NULL, `desired` will have + * fields modified. + * + * This function returns a negative error code on failure to open the + * audio device or failure to set up the audio thread; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CloseAudio + * \sa SDL_LockAudio + * \sa SDL_PauseAudio + * \sa SDL_UnlockAudio + */ +extern DECLSPEC int SDLCALL SDL_OpenAudio(SDL_AudioSpec * desired, + SDL_AudioSpec * obtained); + +/** + * SDL Audio Device IDs. + * + * A successful call to SDL_OpenAudio() is always device id 1, and legacy SDL + * audio APIs assume you want this device ID. SDL_OpenAudioDevice() calls + * always returns devices >= 2 on success. The legacy calls are good both for + * backwards compatibility and when you don't care about multiple, specific, + * or capture devices. + */ +typedef Uint32 SDL_AudioDeviceID; + +/** + * Get the number of built-in audio devices. + * + * This function is only valid after successfully initializing the audio + * subsystem. + * + * Note that audio capture support is not implemented as of SDL 2.0.4, so the + * `iscapture` parameter is for future expansion and should always be zero for + * now. + * + * This function will return -1 if an explicit list of devices can't be + * determined. Returning -1 is not an error. For example, if SDL is set up to + * talk to a remote audio server, it can't list every one available on the + * Internet, but it will still allow a specific host to be specified in + * SDL_OpenAudioDevice(). + * + * In many common cases, when this function returns a value <= 0, it can still + * successfully open the default device (NULL for first argument of + * SDL_OpenAudioDevice()). + * + * This function may trigger a complete redetect of available hardware. It + * should not be called for each iteration of a loop, but rather once at the + * start of a loop: + * + * ```c + * // Don't do this: + * for (int i = 0; i < SDL_GetNumAudioDevices(0); i++) + * + * // do this instead: + * const int count = SDL_GetNumAudioDevices(0); + * for (int i = 0; i < count; ++i) { do_something_here(); } + * ``` + * + * \param iscapture zero to request playback devices, non-zero to request + * recording devices. + * \returns the number of available devices exposed by the current driver or + * -1 if an explicit list of devices can't be determined. A return + * value of -1 does not necessarily mean an error condition. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetAudioDeviceName + * \sa SDL_OpenAudioDevice + */ +extern DECLSPEC int SDLCALL SDL_GetNumAudioDevices(int iscapture); + +/** + * Get the human-readable name of a specific audio device. + * + * This function is only valid after successfully initializing the audio + * subsystem. The values returned by this function reflect the latest call to + * SDL_GetNumAudioDevices(); re-call that function to redetect available + * hardware. + * + * The string returned by this function is UTF-8 encoded, read-only, and + * managed internally. You are not to free it. If you need to keep the string + * for any length of time, you should make your own copy of it, as it will be + * invalid next time any of several other SDL functions are called. + * + * \param index the index of the audio device; valid values range from 0 to + * SDL_GetNumAudioDevices() - 1. + * \param iscapture non-zero to query the list of recording devices, zero to + * query the list of output devices. + * \returns the name of the audio device at the requested index, or NULL on + * error. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetNumAudioDevices + * \sa SDL_GetDefaultAudioInfo + */ +extern DECLSPEC const char *SDLCALL SDL_GetAudioDeviceName(int index, + int iscapture); + +/** + * Get the preferred audio format of a specific audio device. + * + * This function is only valid after a successfully initializing the audio + * subsystem. The values returned by this function reflect the latest call to + * SDL_GetNumAudioDevices(); re-call that function to redetect available + * hardware. + * + * `spec` will be filled with the sample rate, sample format, and channel + * count. + * + * \param index the index of the audio device; valid values range from 0 to + * SDL_GetNumAudioDevices() - 1. + * \param iscapture non-zero to query the list of recording devices, zero to + * query the list of output devices. + * \param spec The SDL_AudioSpec to be initialized by this function. + * \returns 0 on success, nonzero on error. + * + * \since This function is available since SDL 2.0.16. + * + * \sa SDL_GetNumAudioDevices + * \sa SDL_GetDefaultAudioInfo + */ +extern DECLSPEC int SDLCALL SDL_GetAudioDeviceSpec(int index, + int iscapture, + SDL_AudioSpec *spec); + + +/** + * Get the name and preferred format of the default audio device. + * + * Some (but not all!) platforms have an isolated mechanism to get information + * about the "default" device. This can actually be a completely different + * device that's not in the list you get from SDL_GetAudioDeviceSpec(). It can + * even be a network address! (This is discussed in SDL_OpenAudioDevice().) + * + * As a result, this call is not guaranteed to be performant, as it can query + * the sound server directly every time, unlike the other query functions. You + * should call this function sparingly! + * + * `spec` will be filled with the sample rate, sample format, and channel + * count, if a default device exists on the system. If `name` is provided, + * will be filled with either a dynamically-allocated UTF-8 string or NULL. + * + * \param name A pointer to be filled with the name of the default device (can + * be NULL). Please call SDL_free() when you are done with this + * pointer! + * \param spec The SDL_AudioSpec to be initialized by this function. + * \param iscapture non-zero to query the default recording device, zero to + * query the default output device. + * \returns 0 on success, nonzero on error. + * + * \since This function is available since SDL 2.24.0. + * + * \sa SDL_GetAudioDeviceName + * \sa SDL_GetAudioDeviceSpec + * \sa SDL_OpenAudioDevice + */ +extern DECLSPEC int SDLCALL SDL_GetDefaultAudioInfo(char **name, + SDL_AudioSpec *spec, + int iscapture); + + +/** + * Open a specific audio device. + * + * SDL_OpenAudio(), unlike this function, always acts on device ID 1. As such, + * this function will never return a 1 so as not to conflict with the legacy + * function. + * + * Please note that SDL 2.0 before 2.0.5 did not support recording; as such, + * this function would fail if `iscapture` was not zero. Starting with SDL + * 2.0.5, recording is implemented and this value can be non-zero. + * + * Passing in a `device` name of NULL requests the most reasonable default + * (and is equivalent to what SDL_OpenAudio() does to choose a device). The + * `device` name is a UTF-8 string reported by SDL_GetAudioDeviceName(), but + * some drivers allow arbitrary and driver-specific strings, such as a + * hostname/IP address for a remote audio server, or a filename in the + * diskaudio driver. + * + * An opened audio device starts out paused, and should be enabled for playing + * by calling SDL_PauseAudioDevice(devid, 0) when you are ready for your audio + * callback function to be called. Since the audio driver may modify the + * requested size of the audio buffer, you should allocate any local mixing + * buffers after you open the audio device. + * + * The audio callback runs in a separate thread in most cases; you can prevent + * race conditions between your callback and other threads without fully + * pausing playback with SDL_LockAudioDevice(). For more information about the + * callback, see SDL_AudioSpec. + * + * Managing the audio spec via 'desired' and 'obtained': + * + * When filling in the desired audio spec structure: + * + * - `desired->freq` should be the frequency in sample-frames-per-second (Hz). + * - `desired->format` should be the audio format (`AUDIO_S16SYS`, etc). + * - `desired->samples` is the desired size of the audio buffer, in _sample + * frames_ (with stereo output, two samples--left and right--would make a + * single sample frame). This number should be a power of two, and may be + * adjusted by the audio driver to a value more suitable for the hardware. + * Good values seem to range between 512 and 4096 inclusive, depending on + * the application and CPU speed. Smaller values reduce latency, but can + * lead to underflow if the application is doing heavy processing and cannot + * fill the audio buffer in time. Note that the number of sample frames is + * directly related to time by the following formula: `ms = + * (sampleframes*1000)/freq` + * - `desired->size` is the size in _bytes_ of the audio buffer, and is + * calculated by SDL_OpenAudioDevice(). You don't initialize this. + * - `desired->silence` is the value used to set the buffer to silence, and is + * calculated by SDL_OpenAudioDevice(). You don't initialize this. + * - `desired->callback` should be set to a function that will be called when + * the audio device is ready for more data. It is passed a pointer to the + * audio buffer, and the length in bytes of the audio buffer. This function + * usually runs in a separate thread, and so you should protect data + * structures that it accesses by calling SDL_LockAudioDevice() and + * SDL_UnlockAudioDevice() in your code. Alternately, you may pass a NULL + * pointer here, and call SDL_QueueAudio() with some frequency, to queue + * more audio samples to be played (or for capture devices, call + * SDL_DequeueAudio() with some frequency, to obtain audio samples). + * - `desired->userdata` is passed as the first parameter to your callback + * function. If you passed a NULL callback, this value is ignored. + * + * `allowed_changes` can have the following flags OR'd together: + * + * - `SDL_AUDIO_ALLOW_FREQUENCY_CHANGE` + * - `SDL_AUDIO_ALLOW_FORMAT_CHANGE` + * - `SDL_AUDIO_ALLOW_CHANNELS_CHANGE` + * - `SDL_AUDIO_ALLOW_SAMPLES_CHANGE` + * - `SDL_AUDIO_ALLOW_ANY_CHANGE` + * + * These flags specify how SDL should behave when a device cannot offer a + * specific feature. If the application requests a feature that the hardware + * doesn't offer, SDL will always try to get the closest equivalent. + * + * For example, if you ask for float32 audio format, but the sound card only + * supports int16, SDL will set the hardware to int16. If you had set + * SDL_AUDIO_ALLOW_FORMAT_CHANGE, SDL will change the format in the `obtained` + * structure. If that flag was *not* set, SDL will prepare to convert your + * callback's float32 audio to int16 before feeding it to the hardware and + * will keep the originally requested format in the `obtained` structure. + * + * The resulting audio specs, varying depending on hardware and on what + * changes were allowed, will then be written back to `obtained`. + * + * If your application can only handle one specific data format, pass a zero + * for `allowed_changes` and let SDL transparently handle any differences. + * + * \param device a UTF-8 string reported by SDL_GetAudioDeviceName() or a + * driver-specific name as appropriate. NULL requests the most + * reasonable default device. + * \param iscapture non-zero to specify a device should be opened for + * recording, not playback. + * \param desired an SDL_AudioSpec structure representing the desired output + * format; see SDL_OpenAudio() for more information. + * \param obtained an SDL_AudioSpec structure filled in with the actual output + * format; see SDL_OpenAudio() for more information. + * \param allowed_changes 0, or one or more flags OR'd together. + * \returns a valid device ID that is > 0 on success or 0 on failure; call + * SDL_GetError() for more information. + * + * For compatibility with SDL 1.2, this will never return 1, since + * SDL reserves that ID for the legacy SDL_OpenAudio() function. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CloseAudioDevice + * \sa SDL_GetAudioDeviceName + * \sa SDL_LockAudioDevice + * \sa SDL_OpenAudio + * \sa SDL_PauseAudioDevice + * \sa SDL_UnlockAudioDevice + */ +extern DECLSPEC SDL_AudioDeviceID SDLCALL SDL_OpenAudioDevice( + const char *device, + int iscapture, + const SDL_AudioSpec *desired, + SDL_AudioSpec *obtained, + int allowed_changes); + + + +/** + * \name Audio state + * + * Get the current audio state. + */ +/* @{ */ +typedef enum +{ + SDL_AUDIO_STOPPED = 0, + SDL_AUDIO_PLAYING, + SDL_AUDIO_PAUSED +} SDL_AudioStatus; + +/** + * This function is a legacy means of querying the audio device. + * + * New programs might want to use SDL_GetAudioDeviceStatus() instead. This + * function is equivalent to calling... + * + * ```c + * SDL_GetAudioDeviceStatus(1); + * ``` + * + * ...and is only useful if you used the legacy SDL_OpenAudio() function. + * + * \returns the SDL_AudioStatus of the audio device opened by SDL_OpenAudio(). + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetAudioDeviceStatus + */ +extern DECLSPEC SDL_AudioStatus SDLCALL SDL_GetAudioStatus(void); + +/** + * Use this function to get the current audio state of an audio device. + * + * \param dev the ID of an audio device previously opened with + * SDL_OpenAudioDevice(). + * \returns the SDL_AudioStatus of the specified audio device. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_PauseAudioDevice + */ +extern DECLSPEC SDL_AudioStatus SDLCALL SDL_GetAudioDeviceStatus(SDL_AudioDeviceID dev); +/* @} *//* Audio State */ + +/** + * \name Pause audio functions + * + * These functions pause and unpause the audio callback processing. + * They should be called with a parameter of 0 after opening the audio + * device to start playing sound. This is so you can safely initialize + * data for your callback function after opening the audio device. + * Silence will be written to the audio device during the pause. + */ +/* @{ */ + +/** + * This function is a legacy means of pausing the audio device. + * + * New programs might want to use SDL_PauseAudioDevice() instead. This + * function is equivalent to calling... + * + * ```c + * SDL_PauseAudioDevice(1, pause_on); + * ``` + * + * ...and is only useful if you used the legacy SDL_OpenAudio() function. + * + * \param pause_on non-zero to pause, 0 to unpause. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetAudioStatus + * \sa SDL_PauseAudioDevice + */ +extern DECLSPEC void SDLCALL SDL_PauseAudio(int pause_on); + +/** + * Use this function to pause and unpause audio playback on a specified + * device. + * + * This function pauses and unpauses the audio callback processing for a given + * device. Newly-opened audio devices start in the paused state, so you must + * call this function with **pause_on**=0 after opening the specified audio + * device to start playing sound. This allows you to safely initialize data + * for your callback function after opening the audio device. Silence will be + * written to the audio device while paused, and the audio callback is + * guaranteed to not be called. Pausing one device does not prevent other + * unpaused devices from running their callbacks. + * + * Pausing state does not stack; even if you pause a device several times, a + * single unpause will start the device playing again, and vice versa. This is + * different from how SDL_LockAudioDevice() works. + * + * If you just need to protect a few variables from race conditions vs your + * callback, you shouldn't pause the audio device, as it will lead to dropouts + * in the audio playback. Instead, you should use SDL_LockAudioDevice(). + * + * \param dev a device opened by SDL_OpenAudioDevice(). + * \param pause_on non-zero to pause, 0 to unpause. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_LockAudioDevice + */ +extern DECLSPEC void SDLCALL SDL_PauseAudioDevice(SDL_AudioDeviceID dev, + int pause_on); +/* @} *//* Pause audio functions */ + +/** + * Load the audio data of a WAVE file into memory. + * + * Loading a WAVE file requires `src`, `spec`, `audio_buf` and `audio_len` to + * be valid pointers. The entire data portion of the file is then loaded into + * memory and decoded if necessary. + * + * If `freesrc` is non-zero, the data source gets automatically closed and + * freed before the function returns. + * + * Supported formats are RIFF WAVE files with the formats PCM (8, 16, 24, and + * 32 bits), IEEE Float (32 bits), Microsoft ADPCM and IMA ADPCM (4 bits), and + * A-law and mu-law (8 bits). Other formats are currently unsupported and + * cause an error. + * + * If this function succeeds, the pointer returned by it is equal to `spec` + * and the pointer to the audio data allocated by the function is written to + * `audio_buf` and its length in bytes to `audio_len`. The SDL_AudioSpec + * members `freq`, `channels`, and `format` are set to the values of the audio + * data in the buffer. The `samples` member is set to a sane default and all + * others are set to zero. + * + * It's necessary to use SDL_FreeWAV() to free the audio data returned in + * `audio_buf` when it is no longer used. + * + * Because of the underspecification of the .WAV format, there are many + * problematic files in the wild that cause issues with strict decoders. To + * provide compatibility with these files, this decoder is lenient in regards + * to the truncation of the file, the fact chunk, and the size of the RIFF + * chunk. The hints `SDL_HINT_WAVE_RIFF_CHUNK_SIZE`, + * `SDL_HINT_WAVE_TRUNCATION`, and `SDL_HINT_WAVE_FACT_CHUNK` can be used to + * tune the behavior of the loading process. + * + * Any file that is invalid (due to truncation, corruption, or wrong values in + * the headers), too big, or unsupported causes an error. Additionally, any + * critical I/O error from the data source will terminate the loading process + * with an error. The function returns NULL on error and in all cases (with + * the exception of `src` being NULL), an appropriate error message will be + * set. + * + * It is required that the data source supports seeking. + * + * Example: + * + * ```c + * SDL_LoadWAV_RW(SDL_RWFromFile("sample.wav", "rb"), 1, &spec, &buf, &len); + * ``` + * + * Note that the SDL_LoadWAV macro does this same thing for you, but in a less + * messy way: + * + * ```c + * SDL_LoadWAV("sample.wav", &spec, &buf, &len); + * ``` + * + * \param src The data source for the WAVE data. + * \param freesrc If non-zero, SDL will _always_ free the data source. + * \param spec An SDL_AudioSpec that will be filled in with the wave file's + * format details. + * \param audio_buf A pointer filled with the audio data, allocated by the + * function. + * \param audio_len A pointer filled with the length of the audio data buffer + * in bytes. + * \returns This function, if successfully called, returns `spec`, which will + * be filled with the audio data format of the wave source data. + * `audio_buf` will be filled with a pointer to an allocated buffer + * containing the audio data, and `audio_len` is filled with the + * length of that audio buffer in bytes. + * + * This function returns NULL if the .WAV file cannot be opened, uses + * an unknown data format, or is corrupt; call SDL_GetError() for + * more information. + * + * When the application is done with the data returned in + * `audio_buf`, it should call SDL_FreeWAV() to dispose of it. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_FreeWAV + * \sa SDL_LoadWAV + */ +extern DECLSPEC SDL_AudioSpec *SDLCALL SDL_LoadWAV_RW(SDL_RWops * src, + int freesrc, + SDL_AudioSpec * spec, + Uint8 ** audio_buf, + Uint32 * audio_len); + +/** + * Loads a WAV from a file. + * + * Compatibility convenience function. + */ +#define SDL_LoadWAV(file, spec, audio_buf, audio_len) \ + SDL_LoadWAV_RW(SDL_RWFromFile(file, "rb"),1, spec,audio_buf,audio_len) + +/** + * Free data previously allocated with SDL_LoadWAV() or SDL_LoadWAV_RW(). + * + * After a WAVE file has been opened with SDL_LoadWAV() or SDL_LoadWAV_RW() + * its data can eventually be freed with SDL_FreeWAV(). It is safe to call + * this function with a NULL pointer. + * + * \param audio_buf a pointer to the buffer created by SDL_LoadWAV() or + * SDL_LoadWAV_RW(). + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_LoadWAV + * \sa SDL_LoadWAV_RW + */ +extern DECLSPEC void SDLCALL SDL_FreeWAV(Uint8 * audio_buf); + +/** + * Initialize an SDL_AudioCVT structure for conversion. + * + * Before an SDL_AudioCVT structure can be used to convert audio data it must + * be initialized with source and destination information. + * + * This function will zero out every field of the SDL_AudioCVT, so it must be + * called before the application fills in the final buffer information. + * + * Once this function has returned successfully, and reported that a + * conversion is necessary, the application fills in the rest of the fields in + * SDL_AudioCVT, now that it knows how large a buffer it needs to allocate, + * and then can call SDL_ConvertAudio() to complete the conversion. + * + * \param cvt an SDL_AudioCVT structure filled in with audio conversion + * information. + * \param src_format the source format of the audio data; for more info see + * SDL_AudioFormat. + * \param src_channels the number of channels in the source. + * \param src_rate the frequency (sample-frames-per-second) of the source. + * \param dst_format the destination format of the audio data; for more info + * see SDL_AudioFormat. + * \param dst_channels the number of channels in the destination. + * \param dst_rate the frequency (sample-frames-per-second) of the + * destination. + * \returns 1 if the audio filter is prepared, 0 if no conversion is needed, + * or a negative error code on failure; call SDL_GetError() for more + * information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_ConvertAudio + */ +extern DECLSPEC int SDLCALL SDL_BuildAudioCVT(SDL_AudioCVT * cvt, + SDL_AudioFormat src_format, + Uint8 src_channels, + int src_rate, + SDL_AudioFormat dst_format, + Uint8 dst_channels, + int dst_rate); + +/** + * Convert audio data to a desired audio format. + * + * This function does the actual audio data conversion, after the application + * has called SDL_BuildAudioCVT() to prepare the conversion information and + * then filled in the buffer details. + * + * Once the application has initialized the `cvt` structure using + * SDL_BuildAudioCVT(), allocated an audio buffer and filled it with audio + * data in the source format, this function will convert the buffer, in-place, + * to the desired format. + * + * The data conversion may go through several passes; any given pass may + * possibly temporarily increase the size of the data. For example, SDL might + * expand 16-bit data to 32 bits before resampling to a lower frequency, + * shrinking the data size after having grown it briefly. Since the supplied + * buffer will be both the source and destination, converting as necessary + * in-place, the application must allocate a buffer that will fully contain + * the data during its largest conversion pass. After SDL_BuildAudioCVT() + * returns, the application should set the `cvt->len` field to the size, in + * bytes, of the source data, and allocate a buffer that is `cvt->len * + * cvt->len_mult` bytes long for the `buf` field. + * + * The source data should be copied into this buffer before the call to + * SDL_ConvertAudio(). Upon successful return, this buffer will contain the + * converted audio, and `cvt->len_cvt` will be the size of the converted data, + * in bytes. Any bytes in the buffer past `cvt->len_cvt` are undefined once + * this function returns. + * + * \param cvt an SDL_AudioCVT structure that was previously set up by + * SDL_BuildAudioCVT(). + * \returns 0 if the conversion was completed successfully or a negative error + * code on failure; call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_BuildAudioCVT + */ +extern DECLSPEC int SDLCALL SDL_ConvertAudio(SDL_AudioCVT * cvt); + +/* SDL_AudioStream is a new audio conversion interface. + The benefits vs SDL_AudioCVT: + - it can handle resampling data in chunks without generating + artifacts, when it doesn't have the complete buffer available. + - it can handle incoming data in any variable size. + - You push data as you have it, and pull it when you need it + */ +/* this is opaque to the outside world. */ +struct _SDL_AudioStream; +typedef struct _SDL_AudioStream SDL_AudioStream; + +/** + * Create a new audio stream. + * + * \param src_format The format of the source audio. + * \param src_channels The number of channels of the source audio. + * \param src_rate The sampling rate of the source audio. + * \param dst_format The format of the desired audio output. + * \param dst_channels The number of channels of the desired audio output. + * \param dst_rate The sampling rate of the desired audio output. + * \returns 0 on success, or -1 on error. + * + * \since This function is available since SDL 2.0.7. + * + * \sa SDL_AudioStreamPut + * \sa SDL_AudioStreamGet + * \sa SDL_AudioStreamAvailable + * \sa SDL_AudioStreamFlush + * \sa SDL_AudioStreamClear + * \sa SDL_FreeAudioStream + */ +extern DECLSPEC SDL_AudioStream * SDLCALL SDL_NewAudioStream(const SDL_AudioFormat src_format, + const Uint8 src_channels, + const int src_rate, + const SDL_AudioFormat dst_format, + const Uint8 dst_channels, + const int dst_rate); + +/** + * Add data to be converted/resampled to the stream. + * + * \param stream The stream the audio data is being added to. + * \param buf A pointer to the audio data to add. + * \param len The number of bytes to write to the stream. + * \returns 0 on success, or -1 on error. + * + * \since This function is available since SDL 2.0.7. + * + * \sa SDL_NewAudioStream + * \sa SDL_AudioStreamGet + * \sa SDL_AudioStreamAvailable + * \sa SDL_AudioStreamFlush + * \sa SDL_AudioStreamClear + * \sa SDL_FreeAudioStream + */ +extern DECLSPEC int SDLCALL SDL_AudioStreamPut(SDL_AudioStream *stream, const void *buf, int len); + +/** + * Get converted/resampled data from the stream + * + * \param stream The stream the audio is being requested from. + * \param buf A buffer to fill with audio data. + * \param len The maximum number of bytes to fill. + * \returns the number of bytes read from the stream, or -1 on error. + * + * \since This function is available since SDL 2.0.7. + * + * \sa SDL_NewAudioStream + * \sa SDL_AudioStreamPut + * \sa SDL_AudioStreamAvailable + * \sa SDL_AudioStreamFlush + * \sa SDL_AudioStreamClear + * \sa SDL_FreeAudioStream + */ +extern DECLSPEC int SDLCALL SDL_AudioStreamGet(SDL_AudioStream *stream, void *buf, int len); + +/** + * Get the number of converted/resampled bytes available. + * + * The stream may be buffering data behind the scenes until it has enough to + * resample correctly, so this number might be lower than what you expect, or + * even be zero. Add more data or flush the stream if you need the data now. + * + * \since This function is available since SDL 2.0.7. + * + * \sa SDL_NewAudioStream + * \sa SDL_AudioStreamPut + * \sa SDL_AudioStreamGet + * \sa SDL_AudioStreamFlush + * \sa SDL_AudioStreamClear + * \sa SDL_FreeAudioStream + */ +extern DECLSPEC int SDLCALL SDL_AudioStreamAvailable(SDL_AudioStream *stream); + +/** + * Tell the stream that you're done sending data, and anything being buffered + * should be converted/resampled and made available immediately. + * + * It is legal to add more data to a stream after flushing, but there will be + * audio gaps in the output. Generally this is intended to signal the end of + * input, so the complete output becomes available. + * + * \since This function is available since SDL 2.0.7. + * + * \sa SDL_NewAudioStream + * \sa SDL_AudioStreamPut + * \sa SDL_AudioStreamGet + * \sa SDL_AudioStreamAvailable + * \sa SDL_AudioStreamClear + * \sa SDL_FreeAudioStream + */ +extern DECLSPEC int SDLCALL SDL_AudioStreamFlush(SDL_AudioStream *stream); + +/** + * Clear any pending data in the stream without converting it + * + * \since This function is available since SDL 2.0.7. + * + * \sa SDL_NewAudioStream + * \sa SDL_AudioStreamPut + * \sa SDL_AudioStreamGet + * \sa SDL_AudioStreamAvailable + * \sa SDL_AudioStreamFlush + * \sa SDL_FreeAudioStream + */ +extern DECLSPEC void SDLCALL SDL_AudioStreamClear(SDL_AudioStream *stream); + +/** + * Free an audio stream + * + * \since This function is available since SDL 2.0.7. + * + * \sa SDL_NewAudioStream + * \sa SDL_AudioStreamPut + * \sa SDL_AudioStreamGet + * \sa SDL_AudioStreamAvailable + * \sa SDL_AudioStreamFlush + * \sa SDL_AudioStreamClear + */ +extern DECLSPEC void SDLCALL SDL_FreeAudioStream(SDL_AudioStream *stream); + +/** + * Maximum volume allowed in calls to SDL_MixAudio and SDL_MixAudioFormat. + */ +#define SDL_MIX_MAXVOLUME 128 + +/** + * This function is a legacy means of mixing audio. + * + * This function is equivalent to calling... + * + * ```c + * SDL_MixAudioFormat(dst, src, format, len, volume); + * ``` + * + * ...where `format` is the obtained format of the audio device from the + * legacy SDL_OpenAudio() function. + * + * \param dst the destination for the mixed audio. + * \param src the source audio buffer to be mixed. + * \param len the length of the audio buffer in bytes. + * \param volume ranges from 0 - 128, and should be set to SDL_MIX_MAXVOLUME + * for full audio volume. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_MixAudioFormat + */ +extern DECLSPEC void SDLCALL SDL_MixAudio(Uint8 * dst, const Uint8 * src, + Uint32 len, int volume); + +/** + * Mix audio data in a specified format. + * + * This takes an audio buffer `src` of `len` bytes of `format` data and mixes + * it into `dst`, performing addition, volume adjustment, and overflow + * clipping. The buffer pointed to by `dst` must also be `len` bytes of + * `format` data. + * + * This is provided for convenience -- you can mix your own audio data. + * + * Do not use this function for mixing together more than two streams of + * sample data. The output from repeated application of this function may be + * distorted by clipping, because there is no accumulator with greater range + * than the input (not to mention this being an inefficient way of doing it). + * + * It is a common misconception that this function is required to write audio + * data to an output stream in an audio callback. While you can do that, + * SDL_MixAudioFormat() is really only needed when you're mixing a single + * audio stream with a volume adjustment. + * + * \param dst the destination for the mixed audio. + * \param src the source audio buffer to be mixed. + * \param format the SDL_AudioFormat structure representing the desired audio + * format. + * \param len the length of the audio buffer in bytes. + * \param volume ranges from 0 - 128, and should be set to SDL_MIX_MAXVOLUME + * for full audio volume. + * + * \since This function is available since SDL 2.0.0. + */ +extern DECLSPEC void SDLCALL SDL_MixAudioFormat(Uint8 * dst, + const Uint8 * src, + SDL_AudioFormat format, + Uint32 len, int volume); + +/** + * Queue more audio on non-callback devices. + * + * If you are looking to retrieve queued audio from a non-callback capture + * device, you want SDL_DequeueAudio() instead. SDL_QueueAudio() will return + * -1 to signify an error if you use it with capture devices. + * + * SDL offers two ways to feed audio to the device: you can either supply a + * callback that SDL triggers with some frequency to obtain more audio (pull + * method), or you can supply no callback, and then SDL will expect you to + * supply data at regular intervals (push method) with this function. + * + * There are no limits on the amount of data you can queue, short of + * exhaustion of address space. Queued data will drain to the device as + * necessary without further intervention from you. If the device needs audio + * but there is not enough queued, it will play silence to make up the + * difference. This means you will have skips in your audio playback if you + * aren't routinely queueing sufficient data. + * + * This function copies the supplied data, so you are safe to free it when the + * function returns. This function is thread-safe, but queueing to the same + * device from two threads at once does not promise which buffer will be + * queued first. + * + * You may not queue audio on a device that is using an application-supplied + * callback; doing so returns an error. You have to use the audio callback or + * queue audio with this function, but not both. + * + * You should not call SDL_LockAudio() on the device before queueing; SDL + * handles locking internally for this function. + * + * Note that SDL2 does not support planar audio. You will need to resample + * from planar audio formats into a non-planar one (see SDL_AudioFormat) + * before queuing audio. + * + * \param dev the device ID to which we will queue audio. + * \param data the data to queue to the device for later playback. + * \param len the number of bytes (not samples!) to which `data` points. + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.4. + * + * \sa SDL_ClearQueuedAudio + * \sa SDL_GetQueuedAudioSize + */ +extern DECLSPEC int SDLCALL SDL_QueueAudio(SDL_AudioDeviceID dev, const void *data, Uint32 len); + +/** + * Dequeue more audio on non-callback devices. + * + * If you are looking to queue audio for output on a non-callback playback + * device, you want SDL_QueueAudio() instead. SDL_DequeueAudio() will always + * return 0 if you use it with playback devices. + * + * SDL offers two ways to retrieve audio from a capture device: you can either + * supply a callback that SDL triggers with some frequency as the device + * records more audio data, (push method), or you can supply no callback, and + * then SDL will expect you to retrieve data at regular intervals (pull + * method) with this function. + * + * There are no limits on the amount of data you can queue, short of + * exhaustion of address space. Data from the device will keep queuing as + * necessary without further intervention from you. This means you will + * eventually run out of memory if you aren't routinely dequeueing data. + * + * Capture devices will not queue data when paused; if you are expecting to + * not need captured audio for some length of time, use SDL_PauseAudioDevice() + * to stop the capture device from queueing more data. This can be useful + * during, say, level loading times. When unpaused, capture devices will start + * queueing data from that point, having flushed any capturable data available + * while paused. + * + * This function is thread-safe, but dequeueing from the same device from two + * threads at once does not promise which thread will dequeue data first. + * + * You may not dequeue audio from a device that is using an + * application-supplied callback; doing so returns an error. You have to use + * the audio callback, or dequeue audio with this function, but not both. + * + * You should not call SDL_LockAudio() on the device before dequeueing; SDL + * handles locking internally for this function. + * + * \param dev the device ID from which we will dequeue audio. + * \param data a pointer into where audio data should be copied. + * \param len the number of bytes (not samples!) to which (data) points. + * \returns the number of bytes dequeued, which could be less than requested; + * call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.5. + * + * \sa SDL_ClearQueuedAudio + * \sa SDL_GetQueuedAudioSize + */ +extern DECLSPEC Uint32 SDLCALL SDL_DequeueAudio(SDL_AudioDeviceID dev, void *data, Uint32 len); + +/** + * Get the number of bytes of still-queued audio. + * + * For playback devices: this is the number of bytes that have been queued for + * playback with SDL_QueueAudio(), but have not yet been sent to the hardware. + * + * Once we've sent it to the hardware, this function can not decide the exact + * byte boundary of what has been played. It's possible that we just gave the + * hardware several kilobytes right before you called this function, but it + * hasn't played any of it yet, or maybe half of it, etc. + * + * For capture devices, this is the number of bytes that have been captured by + * the device and are waiting for you to dequeue. This number may grow at any + * time, so this only informs of the lower-bound of available data. + * + * You may not queue or dequeue audio on a device that is using an + * application-supplied callback; calling this function on such a device + * always returns 0. You have to use the audio callback or queue audio, but + * not both. + * + * You should not call SDL_LockAudio() on the device before querying; SDL + * handles locking internally for this function. + * + * \param dev the device ID of which we will query queued audio size. + * \returns the number of bytes (not samples!) of queued audio. + * + * \since This function is available since SDL 2.0.4. + * + * \sa SDL_ClearQueuedAudio + * \sa SDL_QueueAudio + * \sa SDL_DequeueAudio + */ +extern DECLSPEC Uint32 SDLCALL SDL_GetQueuedAudioSize(SDL_AudioDeviceID dev); + +/** + * Drop any queued audio data waiting to be sent to the hardware. + * + * Immediately after this call, SDL_GetQueuedAudioSize() will return 0. For + * output devices, the hardware will start playing silence if more audio isn't + * queued. For capture devices, the hardware will start filling the empty + * queue with new data if the capture device isn't paused. + * + * This will not prevent playback of queued audio that's already been sent to + * the hardware, as we can not undo that, so expect there to be some fraction + * of a second of audio that might still be heard. This can be useful if you + * want to, say, drop any pending music or any unprocessed microphone input + * during a level change in your game. + * + * You may not queue or dequeue audio on a device that is using an + * application-supplied callback; calling this function on such a device + * always returns 0. You have to use the audio callback or queue audio, but + * not both. + * + * You should not call SDL_LockAudio() on the device before clearing the + * queue; SDL handles locking internally for this function. + * + * This function always succeeds and thus returns void. + * + * \param dev the device ID of which to clear the audio queue. + * + * \since This function is available since SDL 2.0.4. + * + * \sa SDL_GetQueuedAudioSize + * \sa SDL_QueueAudio + * \sa SDL_DequeueAudio + */ +extern DECLSPEC void SDLCALL SDL_ClearQueuedAudio(SDL_AudioDeviceID dev); + + +/** + * \name Audio lock functions + * + * The lock manipulated by these functions protects the callback function. + * During a SDL_LockAudio()/SDL_UnlockAudio() pair, you can be guaranteed that + * the callback function is not running. Do not call these from the callback + * function or you will cause deadlock. + */ +/* @{ */ + +/** + * This function is a legacy means of locking the audio device. + * + * New programs might want to use SDL_LockAudioDevice() instead. This function + * is equivalent to calling... + * + * ```c + * SDL_LockAudioDevice(1); + * ``` + * + * ...and is only useful if you used the legacy SDL_OpenAudio() function. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_LockAudioDevice + * \sa SDL_UnlockAudio + * \sa SDL_UnlockAudioDevice + */ +extern DECLSPEC void SDLCALL SDL_LockAudio(void); + +/** + * Use this function to lock out the audio callback function for a specified + * device. + * + * The lock manipulated by these functions protects the audio callback + * function specified in SDL_OpenAudioDevice(). During a + * SDL_LockAudioDevice()/SDL_UnlockAudioDevice() pair, you can be guaranteed + * that the callback function for that device is not running, even if the + * device is not paused. While a device is locked, any other unpaused, + * unlocked devices may still run their callbacks. + * + * Calling this function from inside your audio callback is unnecessary. SDL + * obtains this lock before calling your function, and releases it when the + * function returns. + * + * You should not hold the lock longer than absolutely necessary. If you hold + * it too long, you'll experience dropouts in your audio playback. Ideally, + * your application locks the device, sets a few variables and unlocks again. + * Do not do heavy work while holding the lock for a device. + * + * It is safe to lock the audio device multiple times, as long as you unlock + * it an equivalent number of times. The callback will not run until the + * device has been unlocked completely in this way. If your application fails + * to unlock the device appropriately, your callback will never run, you might + * hear repeating bursts of audio, and SDL_CloseAudioDevice() will probably + * deadlock. + * + * Internally, the audio device lock is a mutex; if you lock from two threads + * at once, not only will you block the audio callback, you'll block the other + * thread. + * + * \param dev the ID of the device to be locked. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_UnlockAudioDevice + */ +extern DECLSPEC void SDLCALL SDL_LockAudioDevice(SDL_AudioDeviceID dev); + +/** + * This function is a legacy means of unlocking the audio device. + * + * New programs might want to use SDL_UnlockAudioDevice() instead. This + * function is equivalent to calling... + * + * ```c + * SDL_UnlockAudioDevice(1); + * ``` + * + * ...and is only useful if you used the legacy SDL_OpenAudio() function. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_LockAudio + * \sa SDL_UnlockAudioDevice + */ +extern DECLSPEC void SDLCALL SDL_UnlockAudio(void); + +/** + * Use this function to unlock the audio callback function for a specified + * device. + * + * This function should be paired with a previous SDL_LockAudioDevice() call. + * + * \param dev the ID of the device to be unlocked. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_LockAudioDevice + */ +extern DECLSPEC void SDLCALL SDL_UnlockAudioDevice(SDL_AudioDeviceID dev); +/* @} *//* Audio lock functions */ + +/** + * This function is a legacy means of closing the audio device. + * + * This function is equivalent to calling... + * + * ```c + * SDL_CloseAudioDevice(1); + * ``` + * + * ...and is only useful if you used the legacy SDL_OpenAudio() function. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_OpenAudio + */ +extern DECLSPEC void SDLCALL SDL_CloseAudio(void); + +/** + * Use this function to shut down audio processing and close the audio device. + * + * The application should close open audio devices once they are no longer + * needed. Calling this function will wait until the device's audio callback + * is not running, release the audio hardware and then clean up internal + * state. No further audio will play from this device once this function + * returns. + * + * This function may block briefly while pending audio data is played by the + * hardware, so that applications don't drop the last buffer of data they + * supplied. + * + * The device ID is invalid as soon as the device is closed, and is eligible + * for reuse in a new SDL_OpenAudioDevice() call immediately. + * + * \param dev an audio device previously opened with SDL_OpenAudioDevice(). + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_OpenAudioDevice + */ +extern DECLSPEC void SDLCALL SDL_CloseAudioDevice(SDL_AudioDeviceID dev); + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include "close_code.h" + +#endif /* SDL_audio_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/third_party/tlRender-install-Release/include/SDL2/SDL_bits.h b/third_party/tlRender-install-Release/include/SDL2/SDL_bits.h new file mode 100644 index 00000000..747f5565 --- /dev/null +++ b/third_party/tlRender-install-Release/include/SDL2/SDL_bits.h @@ -0,0 +1,132 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2025 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +/** + * # CategoryBits + * + * Functions for fiddling with bits and bitmasks. + */ + +#ifndef SDL_bits_h_ +#define SDL_bits_h_ + +#include "SDL_stdinc.h" + +#include "begin_code.h" +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \file SDL_bits.h + */ + +/** + * Get the index of the most significant bit. Result is undefined when called + * with 0. This operation can also be stated as "count leading zeroes" and + * "log base 2". + * + * \return the index of the most significant bit, or -1 if the value is 0. + */ +#if defined(__WATCOMC__) && defined(__386__) +extern __inline int _SDL_bsr_watcom(Uint32); +#pragma aux _SDL_bsr_watcom = \ + "bsr eax, eax" \ + parm [eax] nomemory \ + value [eax] \ + modify exact [eax] nomemory; +#endif + +/** + * Use this function to get the index of the most significant (set) bit in a + * + * \param x the number to find the MSB of. + * \returns the index of the most significant bit of x, or -1 if x is 0. + */ +SDL_FORCE_INLINE int +SDL_MostSignificantBitIndex32(Uint32 x) +{ +#if defined(__GNUC__) && (__GNUC__ >= 4 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)) + /* Count Leading Zeroes builtin in GCC. + * http://gcc.gnu.org/onlinedocs/gcc-4.3.4/gcc/Other-Builtins.html + */ + if (x == 0) { + return -1; + } + return 31 - __builtin_clz(x); +#elif defined(__WATCOMC__) && defined(__386__) + if (x == 0) { + return -1; + } + return _SDL_bsr_watcom(x); +#elif defined(_MSC_VER) + unsigned long index; + if (_BitScanReverse(&index, x)) { + return index; + } + return -1; +#else + /* Based off of Bit Twiddling Hacks by Sean Eron Anderson + * , released in the public domain. + * http://graphics.stanford.edu/~seander/bithacks.html#IntegerLog + */ + const Uint32 b[] = {0x2, 0xC, 0xF0, 0xFF00, 0xFFFF0000}; + const int S[] = {1, 2, 4, 8, 16}; + + int msbIndex = 0; + int i; + + if (x == 0) { + return -1; + } + + for (i = 4; i >= 0; i--) + { + if (x & b[i]) + { + x >>= S[i]; + msbIndex |= S[i]; + } + } + + return msbIndex; +#endif +} + +SDL_FORCE_INLINE SDL_bool +SDL_HasExactlyOneBitSet32(Uint32 x) +{ + if (x && !(x & (x - 1))) { + return SDL_TRUE; + } + return SDL_FALSE; +} + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include "close_code.h" + +#endif /* SDL_bits_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/third_party/tlRender-install-Release/include/SDL2/SDL_blendmode.h b/third_party/tlRender-install-Release/include/SDL2/SDL_blendmode.h new file mode 100644 index 00000000..c0c68113 --- /dev/null +++ b/third_party/tlRender-install-Release/include/SDL2/SDL_blendmode.h @@ -0,0 +1,199 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2025 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +/** + * # CategoryBlendmode + * + * Header file declaring the SDL_BlendMode enumeration + */ + +#ifndef SDL_blendmode_h_ +#define SDL_blendmode_h_ + +#include "begin_code.h" +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/** + * The blend mode used in SDL_RenderCopy() and drawing operations. + */ +typedef enum SDL_BlendMode +{ + SDL_BLENDMODE_NONE = 0x00000000, /**< no blending + dstRGBA = srcRGBA */ + SDL_BLENDMODE_BLEND = 0x00000001, /**< alpha blending + dstRGB = (srcRGB * srcA) + (dstRGB * (1-srcA)) + dstA = srcA + (dstA * (1-srcA)) */ + SDL_BLENDMODE_ADD = 0x00000002, /**< additive blending + dstRGB = (srcRGB * srcA) + dstRGB + dstA = dstA */ + SDL_BLENDMODE_MOD = 0x00000004, /**< color modulate + dstRGB = srcRGB * dstRGB + dstA = dstA */ + SDL_BLENDMODE_MUL = 0x00000008, /**< color multiply + dstRGB = (srcRGB * dstRGB) + (dstRGB * (1-srcA)) + dstA = dstA */ + SDL_BLENDMODE_INVALID = 0x7FFFFFFF + + /* Additional custom blend modes can be returned by SDL_ComposeCustomBlendMode() */ + +} SDL_BlendMode; + +/** + * The blend operation used when combining source and destination pixel + * components + */ +typedef enum SDL_BlendOperation +{ + SDL_BLENDOPERATION_ADD = 0x1, /**< dst + src: supported by all renderers */ + SDL_BLENDOPERATION_SUBTRACT = 0x2, /**< src - dst : supported by D3D9, D3D11, OpenGL, OpenGLES */ + SDL_BLENDOPERATION_REV_SUBTRACT = 0x3, /**< dst - src : supported by D3D9, D3D11, OpenGL, OpenGLES */ + SDL_BLENDOPERATION_MINIMUM = 0x4, /**< min(dst, src) : supported by D3D9, D3D11 */ + SDL_BLENDOPERATION_MAXIMUM = 0x5 /**< max(dst, src) : supported by D3D9, D3D11 */ +} SDL_BlendOperation; + +/** + * The normalized factor used to multiply pixel components + */ +typedef enum SDL_BlendFactor +{ + SDL_BLENDFACTOR_ZERO = 0x1, /**< 0, 0, 0, 0 */ + SDL_BLENDFACTOR_ONE = 0x2, /**< 1, 1, 1, 1 */ + SDL_BLENDFACTOR_SRC_COLOR = 0x3, /**< srcR, srcG, srcB, srcA */ + SDL_BLENDFACTOR_ONE_MINUS_SRC_COLOR = 0x4, /**< 1-srcR, 1-srcG, 1-srcB, 1-srcA */ + SDL_BLENDFACTOR_SRC_ALPHA = 0x5, /**< srcA, srcA, srcA, srcA */ + SDL_BLENDFACTOR_ONE_MINUS_SRC_ALPHA = 0x6, /**< 1-srcA, 1-srcA, 1-srcA, 1-srcA */ + SDL_BLENDFACTOR_DST_COLOR = 0x7, /**< dstR, dstG, dstB, dstA */ + SDL_BLENDFACTOR_ONE_MINUS_DST_COLOR = 0x8, /**< 1-dstR, 1-dstG, 1-dstB, 1-dstA */ + SDL_BLENDFACTOR_DST_ALPHA = 0x9, /**< dstA, dstA, dstA, dstA */ + SDL_BLENDFACTOR_ONE_MINUS_DST_ALPHA = 0xA /**< 1-dstA, 1-dstA, 1-dstA, 1-dstA */ +} SDL_BlendFactor; + +/** + * Compose a custom blend mode for renderers. + * + * The functions SDL_SetRenderDrawBlendMode and SDL_SetTextureBlendMode accept + * the SDL_BlendMode returned by this function if the renderer supports it. + * + * A blend mode controls how the pixels from a drawing operation (source) get + * combined with the pixels from the render target (destination). First, the + * components of the source and destination pixels get multiplied with their + * blend factors. Then, the blend operation takes the two products and + * calculates the result that will get stored in the render target. + * + * Expressed in pseudocode, it would look like this: + * + * ```c + * dstRGB = colorOperation(srcRGB * srcColorFactor, dstRGB * dstColorFactor); + * dstA = alphaOperation(srcA * srcAlphaFactor, dstA * dstAlphaFactor); + * ``` + * + * Where the functions `colorOperation(src, dst)` and `alphaOperation(src, + * dst)` can return one of the following: + * + * - `src + dst` + * - `src - dst` + * - `dst - src` + * - `min(src, dst)` + * - `max(src, dst)` + * + * The red, green, and blue components are always multiplied with the first, + * second, and third components of the SDL_BlendFactor, respectively. The + * fourth component is not used. + * + * The alpha component is always multiplied with the fourth component of the + * SDL_BlendFactor. The other components are not used in the alpha + * calculation. + * + * Support for these blend modes varies for each renderer. To check if a + * specific SDL_BlendMode is supported, create a renderer and pass it to + * either SDL_SetRenderDrawBlendMode or SDL_SetTextureBlendMode. They will + * return with an error if the blend mode is not supported. + * + * This list describes the support of custom blend modes for each renderer in + * SDL 2.0.6. All renderers support the four blend modes listed in the + * SDL_BlendMode enumeration. + * + * - **direct3d**: Supports all operations with all factors. However, some + * factors produce unexpected results with `SDL_BLENDOPERATION_MINIMUM` and + * `SDL_BLENDOPERATION_MAXIMUM`. + * - **direct3d11**: Same as Direct3D 9. + * - **opengl**: Supports the `SDL_BLENDOPERATION_ADD` operation with all + * factors. OpenGL versions 1.1, 1.2, and 1.3 do not work correctly with SDL + * 2.0.6. + * - **opengles**: Supports the `SDL_BLENDOPERATION_ADD` operation with all + * factors. Color and alpha factors need to be the same. OpenGL ES 1 + * implementation specific: May also support `SDL_BLENDOPERATION_SUBTRACT` + * and `SDL_BLENDOPERATION_REV_SUBTRACT`. May support color and alpha + * operations being different from each other. May support color and alpha + * factors being different from each other. + * - **opengles2**: Supports the `SDL_BLENDOPERATION_ADD`, + * `SDL_BLENDOPERATION_SUBTRACT`, `SDL_BLENDOPERATION_REV_SUBTRACT` + * operations with all factors. + * - **psp**: No custom blend mode support. + * - **software**: No custom blend mode support. + * + * Some renderers do not provide an alpha component for the default render + * target. The `SDL_BLENDFACTOR_DST_ALPHA` and + * `SDL_BLENDFACTOR_ONE_MINUS_DST_ALPHA` factors do not have an effect in this + * case. + * + * \param srcColorFactor the SDL_BlendFactor applied to the red, green, and + * blue components of the source pixels. + * \param dstColorFactor the SDL_BlendFactor applied to the red, green, and + * blue components of the destination pixels. + * \param colorOperation the SDL_BlendOperation used to combine the red, + * green, and blue components of the source and + * destination pixels. + * \param srcAlphaFactor the SDL_BlendFactor applied to the alpha component of + * the source pixels. + * \param dstAlphaFactor the SDL_BlendFactor applied to the alpha component of + * the destination pixels. + * \param alphaOperation the SDL_BlendOperation used to combine the alpha + * component of the source and destination pixels. + * \returns an SDL_BlendMode that represents the chosen factors and + * operations. + * + * \since This function is available since SDL 2.0.6. + * + * \sa SDL_SetRenderDrawBlendMode + * \sa SDL_GetRenderDrawBlendMode + * \sa SDL_SetTextureBlendMode + * \sa SDL_GetTextureBlendMode + */ +extern DECLSPEC SDL_BlendMode SDLCALL SDL_ComposeCustomBlendMode(SDL_BlendFactor srcColorFactor, + SDL_BlendFactor dstColorFactor, + SDL_BlendOperation colorOperation, + SDL_BlendFactor srcAlphaFactor, + SDL_BlendFactor dstAlphaFactor, + SDL_BlendOperation alphaOperation); + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include "close_code.h" + +#endif /* SDL_blendmode_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/third_party/tlRender-install-Release/include/SDL2/SDL_clipboard.h b/third_party/tlRender-install-Release/include/SDL2/SDL_clipboard.h new file mode 100644 index 00000000..2ae16a1d --- /dev/null +++ b/third_party/tlRender-install-Release/include/SDL2/SDL_clipboard.h @@ -0,0 +1,141 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2025 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +/** + * # CategoryClipboard + * + * Include file for SDL clipboard handling + */ + +#ifndef SDL_clipboard_h_ +#define SDL_clipboard_h_ + +#include "SDL_stdinc.h" + +#include "begin_code.h" +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/* Function prototypes */ + +/** + * Put UTF-8 text into the clipboard. + * + * \param text the text to store in the clipboard. + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetClipboardText + * \sa SDL_HasClipboardText + */ +extern DECLSPEC int SDLCALL SDL_SetClipboardText(const char *text); + +/** + * Get UTF-8 text from the clipboard, which must be freed with SDL_free(). + * + * This functions returns empty string if there was not enough memory left for + * a copy of the clipboard's content. + * + * \returns the clipboard text on success or an empty string on failure; call + * SDL_GetError() for more information. Caller must call SDL_free() + * on the returned pointer when done with it (even if there was an + * error). + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_HasClipboardText + * \sa SDL_SetClipboardText + */ +extern DECLSPEC char * SDLCALL SDL_GetClipboardText(void); + +/** + * Query whether the clipboard exists and contains a non-empty text string. + * + * \returns SDL_TRUE if the clipboard has text, or SDL_FALSE if it does not. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetClipboardText + * \sa SDL_SetClipboardText + */ +extern DECLSPEC SDL_bool SDLCALL SDL_HasClipboardText(void); + +/** + * Put UTF-8 text into the primary selection. + * + * \param text the text to store in the primary selection. + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.26.0. + * + * \sa SDL_GetPrimarySelectionText + * \sa SDL_HasPrimarySelectionText + */ +extern DECLSPEC int SDLCALL SDL_SetPrimarySelectionText(const char *text); + +/** + * Get UTF-8 text from the primary selection, which must be freed with + * SDL_free(). + * + * This functions returns empty string if there was not enough memory left for + * a copy of the primary selection's content. + * + * \returns the primary selection text on success or an empty string on + * failure; call SDL_GetError() for more information. Caller must + * call SDL_free() on the returned pointer when done with it (even if + * there was an error). + * + * \since This function is available since SDL 2.26.0. + * + * \sa SDL_HasPrimarySelectionText + * \sa SDL_SetPrimarySelectionText + */ +extern DECLSPEC char * SDLCALL SDL_GetPrimarySelectionText(void); + +/** + * Query whether the primary selection exists and contains a non-empty text + * string. + * + * \returns SDL_TRUE if the primary selection has text, or SDL_FALSE if it + * does not. + * + * \since This function is available since SDL 2.26.0. + * + * \sa SDL_GetPrimarySelectionText + * \sa SDL_SetPrimarySelectionText + */ +extern DECLSPEC SDL_bool SDLCALL SDL_HasPrimarySelectionText(void); + + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include "close_code.h" + +#endif /* SDL_clipboard_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/third_party/tlRender-install-Release/include/SDL2/SDL_config.h b/third_party/tlRender-install-Release/include/SDL2/SDL_config.h new file mode 100644 index 00000000..861d31b2 --- /dev/null +++ b/third_party/tlRender-install-Release/include/SDL2/SDL_config.h @@ -0,0 +1,571 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2025 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +#ifndef SDL_config_h_ +#define SDL_config_h_ + +/** + * \file SDL_config.h.in + * + * This is a set of defines to configure the SDL features + */ + +/* General platform specific identifiers */ +#include "SDL_platform.h" + +/* C language features */ +/* #undef const */ +/* #undef inline */ +/* #undef volatile */ + +/* C datatypes */ +/* Define SIZEOF_VOIDP for 64/32 architectures */ +#if defined(__LP64__) || defined(_LP64) || defined(_WIN64) +#define SIZEOF_VOIDP 8 +#else +#define SIZEOF_VOIDP 4 +#endif + +#define HAVE_GCC_ATOMICS 1 +/* #undef HAVE_GCC_SYNC_LOCK_TEST_AND_SET */ + +/* Comment this if you want to build without any C library requirements */ +#define HAVE_LIBC 1 +#ifdef HAVE_LIBC + +/* Useful headers */ +#define STDC_HEADERS 1 +#define HAVE_ALLOCA_H 1 +#define HAVE_CTYPE_H 1 +#define HAVE_FLOAT_H 1 +#define HAVE_ICONV_H 1 +#define HAVE_INTTYPES_H 1 +#define HAVE_LIMITS_H 1 +#define HAVE_MALLOC_H 1 +#define HAVE_MATH_H 1 +#define HAVE_MEMORY_H 1 +#define HAVE_SIGNAL_H 1 +#define HAVE_STDARG_H 1 +#define HAVE_STDDEF_H 1 +#define HAVE_STDINT_H 1 +#define HAVE_STDIO_H 1 +#define HAVE_STDLIB_H 1 +#define HAVE_STRINGS_H 1 +#define HAVE_STRING_H 1 +#define HAVE_SYS_TYPES_H 1 +#define HAVE_WCHAR_H 1 +#define HAVE_LINUX_INPUT_H 1 +/* #undef HAVE_PTHREAD_NP_H */ +/* #undef HAVE_LIBUNWIND_H */ + +/* C library functions */ +#define HAVE_DLOPEN 1 +#define HAVE_MALLOC 1 +#define HAVE_CALLOC 1 +#define HAVE_REALLOC 1 +#define HAVE_FREE 1 +#define HAVE_ALLOCA 1 +#ifndef __WIN32__ /* Don't use C runtime versions of these on Windows */ +#define HAVE_GETENV 1 +#define HAVE_SETENV 1 +#define HAVE_PUTENV 1 +#define HAVE_UNSETENV 1 +#endif +#define HAVE_QSORT 1 +#define HAVE_BSEARCH 1 +#define HAVE_ABS 1 +#define HAVE_BCOPY 1 +#define HAVE_MEMSET 1 +#define HAVE_MEMCPY 1 +#define HAVE_MEMMOVE 1 +#define HAVE_MEMCMP 1 +#define HAVE_WCSLEN 1 +#define HAVE_WCSLCPY 1 +#define HAVE_WCSLCAT 1 +/* #undef HAVE__WCSDUP */ +#define HAVE_WCSDUP 1 +#define HAVE_WCSSTR 1 +#define HAVE_WCSCMP 1 +#define HAVE_WCSNCMP 1 +#define HAVE_WCSCASECMP 1 +/* #undef HAVE__WCSICMP */ +#define HAVE_WCSNCASECMP 1 +/* #undef HAVE__WCSNICMP */ +#define HAVE_STRLEN 1 +#define HAVE_STRLCPY 1 +#define HAVE_STRLCAT 1 +/* #undef HAVE__STRREV */ +/* #undef HAVE__STRUPR */ +/* #undef HAVE__STRLWR */ +#define HAVE_INDEX 1 +#define HAVE_RINDEX 1 +#define HAVE_STRCHR 1 +#define HAVE_STRRCHR 1 +#define HAVE_STRSTR 1 +#define HAVE_STRTOK_R 1 +/* #undef HAVE_ITOA */ +/* #undef HAVE__LTOA */ +/* #undef HAVE__UITOA */ +/* #undef HAVE__ULTOA */ +#define HAVE_STRTOL 1 +#define HAVE_STRTOUL 1 +/* #undef HAVE__I64TOA */ +/* #undef HAVE__UI64TOA */ +#define HAVE_STRTOLL 1 +#define HAVE_STRTOULL 1 +#define HAVE_STRTOD 1 +#define HAVE_ATOI 1 +#define HAVE_ATOF 1 +#define HAVE_STRCMP 1 +#define HAVE_STRNCMP 1 +/* #undef HAVE__STRICMP */ +#define HAVE_STRCASECMP 1 +/* #undef HAVE__STRNICMP */ +#define HAVE_STRNCASECMP 1 +#define HAVE_STRCASESTR 1 +#define HAVE_SSCANF 1 +#define HAVE_VSSCANF 1 +#define HAVE_VSNPRINTF 1 +#define HAVE_M_PI 1 +#define HAVE_ACOS 1 +#define HAVE_ACOSF 1 +#define HAVE_ASIN 1 +#define HAVE_ASINF 1 +#define HAVE_ATAN 1 +#define HAVE_ATANF 1 +#define HAVE_ATAN2 1 +#define HAVE_ATAN2F 1 +#define HAVE_CEIL 1 +#define HAVE_CEILF 1 +#define HAVE_COPYSIGN 1 +#define HAVE_COPYSIGNF 1 +#define HAVE_COS 1 +#define HAVE_COSF 1 +#define HAVE_EXP 1 +#define HAVE_EXPF 1 +#define HAVE_FABS 1 +#define HAVE_FABSF 1 +#define HAVE_FLOOR 1 +#define HAVE_FLOORF 1 +#define HAVE_FMOD 1 +#define HAVE_FMODF 1 +#define HAVE_LOG 1 +#define HAVE_LOGF 1 +#define HAVE_LOG10 1 +#define HAVE_LOG10F 1 +#define HAVE_LROUND 1 +#define HAVE_LROUNDF 1 +#define HAVE_POW 1 +#define HAVE_POWF 1 +#define HAVE_ROUND 1 +#define HAVE_ROUNDF 1 +#define HAVE_SCALBN 1 +#define HAVE_SCALBNF 1 +#define HAVE_SIN 1 +#define HAVE_SINF 1 +#define HAVE_SQRT 1 +#define HAVE_SQRTF 1 +#define HAVE_TAN 1 +#define HAVE_TANF 1 +#define HAVE_TRUNC 1 +#define HAVE_TRUNCF 1 +#define HAVE_FOPEN64 1 +#define HAVE_FSEEKO 1 +#define HAVE_FSEEKO64 1 +#define HAVE_MEMFD_CREATE 1 +#define HAVE_POSIX_FALLOCATE 1 +#define HAVE_SIGACTION 1 +#define HAVE_SIGTIMEDWAIT 1 +#define HAVE_SA_SIGACTION 1 +#define HAVE_SETJMP 1 +#define HAVE_NANOSLEEP 1 +#define HAVE_SYSCONF 1 +/* #undef HAVE_SYSCTLBYNAME */ +#define HAVE_CLOCK_GETTIME 1 +/* #undef HAVE_GETPAGESIZE */ +#define HAVE_MPROTECT 1 +#define HAVE_ICONV 1 +/* #undef SDL_USE_LIBICONV */ +#define HAVE_PTHREAD_SETNAME_NP 1 +/* #undef HAVE_PTHREAD_SET_NAME_NP */ +#define HAVE_SEM_TIMEDWAIT 1 +#define HAVE_GETAUXVAL 1 +/* #undef HAVE_ELF_AUX_INFO */ +#define HAVE_POLL 1 +#define HAVE__EXIT 1 + +#else +#define HAVE_STDARG_H 1 +#define HAVE_STDDEF_H 1 +#define HAVE_STDINT_H 1 +#define HAVE_FLOAT_H 1 +#endif /* HAVE_LIBC */ + +/* #undef HAVE_ALTIVEC_H */ +#define HAVE_DBUS_DBUS_H 1 +#define HAVE_FCITX 1 +/* #undef HAVE_IBUS_IBUS_H */ +#define HAVE_SYS_INOTIFY_H 1 +#define HAVE_INOTIFY_INIT 1 +#define HAVE_INOTIFY_INIT1 1 +#define HAVE_INOTIFY 1 +/* #undef HAVE_LIBUSB */ +#define HAVE_O_CLOEXEC 1 + +/* Apple platforms might be building universal binaries, where Intel builds + can use immintrin.h but other architectures can't. */ +#ifdef __APPLE__ +# if defined(__has_include) && (defined(__i386__) || defined(__x86_64)) +# if __has_include() +# define HAVE_IMMINTRIN_H 1 +# endif +# endif +#else /* non-Apple platforms can use the normal CMake check for this. */ +#define HAVE_IMMINTRIN_H 1 +#endif + +#define HAVE_LIBUDEV_H 1 +/* #undef HAVE_LIBSAMPLERATE_H */ +#define HAVE_LIBDECOR_H 1 + +/* #undef HAVE_D3D_H */ +/* #undef HAVE_D3D11_H */ +/* #undef HAVE_D3D12_H */ +/* #undef HAVE_DDRAW_H */ +/* #undef HAVE_DSOUND_H */ +/* #undef HAVE_DINPUT_H */ +/* #undef HAVE_XINPUT_H */ +/* #undef HAVE_WINDOWS_GAMING_INPUT_H */ +/* #undef HAVE_DXGI_H */ + +/* #undef HAVE_MMDEVICEAPI_H */ +/* #undef HAVE_AUDIOCLIENT_H */ +/* #undef HAVE_TPCSHRD_H */ +/* #undef HAVE_SENSORSAPI_H */ +/* #undef HAVE_ROAPI_H */ +/* #undef HAVE_SHELLSCALINGAPI_H */ + +/* #undef USE_POSIX_SPAWN */ + +/* SDL internal assertion support */ +#if 0 +/* #undef SDL_DEFAULT_ASSERT_LEVEL */ +#endif + +/* Allow disabling of core subsystems */ +/* #undef SDL_ATOMIC_DISABLED */ +/* #undef SDL_AUDIO_DISABLED */ +/* #undef SDL_CPUINFO_DISABLED */ +/* #undef SDL_EVENTS_DISABLED */ +/* #undef SDL_FILE_DISABLED */ +#define SDL_JOYSTICK_DISABLED 1 +#define SDL_HAPTIC_DISABLED 1 +#define SDL_HIDAPI_DISABLED 1 +/* #undef SDL_SENSOR_DISABLED */ +/* #undef SDL_LOADSO_DISABLED */ +/* #undef SDL_RENDER_DISABLED */ +/* #undef SDL_THREADS_DISABLED */ +/* #undef SDL_TIMERS_DISABLED */ +/* #undef SDL_VIDEO_DISABLED */ +/* #undef SDL_POWER_DISABLED */ +/* #undef SDL_FILESYSTEM_DISABLED */ +/* #undef SDL_LOCALE_DISABLED */ +/* #undef SDL_MISC_DISABLED */ + +/* Enable various audio drivers */ +#define SDL_AUDIO_DRIVER_ALSA 1 +#define SDL_AUDIO_DRIVER_ALSA_DYNAMIC "libasound.so.2" +/* #undef SDL_AUDIO_DRIVER_ANDROID */ +/* #undef SDL_AUDIO_DRIVER_OPENSLES */ +/* #undef SDL_AUDIO_DRIVER_AAUDIO */ +/* #undef SDL_AUDIO_DRIVER_ARTS */ +/* #undef SDL_AUDIO_DRIVER_ARTS_DYNAMIC */ +/* #undef SDL_AUDIO_DRIVER_COREAUDIO */ +#define SDL_AUDIO_DRIVER_DISK 1 +/* #undef SDL_AUDIO_DRIVER_DSOUND */ +#define SDL_AUDIO_DRIVER_DUMMY 1 +/* #undef SDL_AUDIO_DRIVER_EMSCRIPTEN */ +/* #undef SDL_AUDIO_DRIVER_ESD */ +/* #undef SDL_AUDIO_DRIVER_ESD_DYNAMIC */ +/* #undef SDL_AUDIO_DRIVER_FUSIONSOUND */ +/* #undef SDL_AUDIO_DRIVER_FUSIONSOUND_DYNAMIC */ +/* #undef SDL_AUDIO_DRIVER_HAIKU */ +/* #undef SDL_AUDIO_DRIVER_JACK */ +/* #undef SDL_AUDIO_DRIVER_JACK_DYNAMIC */ +/* #undef SDL_AUDIO_DRIVER_NAS */ +/* #undef SDL_AUDIO_DRIVER_NAS_DYNAMIC */ +/* #undef SDL_AUDIO_DRIVER_NETBSD */ +#define SDL_AUDIO_DRIVER_OSS 1 +/* #undef SDL_AUDIO_DRIVER_PAUDIO */ +#define SDL_AUDIO_DRIVER_PIPEWIRE 1 +#define SDL_AUDIO_DRIVER_PIPEWIRE_DYNAMIC "libpipewire-0.3.so.0" +#define SDL_AUDIO_DRIVER_PULSEAUDIO 1 +#define SDL_AUDIO_DRIVER_PULSEAUDIO_DYNAMIC "libpulse.so.0" +/* #undef SDL_AUDIO_DRIVER_QSA */ +/* #undef SDL_AUDIO_DRIVER_SNDIO */ +/* #undef SDL_AUDIO_DRIVER_SNDIO_DYNAMIC */ +/* #undef SDL_AUDIO_DRIVER_SUNAUDIO */ +/* #undef SDL_AUDIO_DRIVER_WASAPI */ +/* #undef SDL_AUDIO_DRIVER_WINMM */ +/* #undef SDL_AUDIO_DRIVER_OS2 */ +/* #undef SDL_AUDIO_DRIVER_VITA */ +/* #undef SDL_AUDIO_DRIVER_PSP */ +/* #undef SDL_AUDIO_DRIVER_PS2 */ +/* #undef SDL_AUDIO_DRIVER_N3DS */ + +/* Enable various input drivers */ +#define SDL_INPUT_LINUXEV 1 +#define SDL_INPUT_LINUXKD 1 +/* #undef SDL_INPUT_FBSDKBIO */ +/* #undef SDL_INPUT_WSCONS */ +/* #undef SDL_JOYSTICK_ANDROID */ +/* #undef SDL_JOYSTICK_HAIKU */ +/* #undef SDL_JOYSTICK_WGI */ +/* #undef SDL_JOYSTICK_DINPUT */ +/* #undef SDL_JOYSTICK_XINPUT */ +#define SDL_JOYSTICK_DUMMY 1 +/* #undef SDL_JOYSTICK_IOKIT */ +/* #undef SDL_JOYSTICK_MFI */ +/* #undef SDL_JOYSTICK_LINUX */ +/* #undef SDL_JOYSTICK_OS2 */ +/* #undef SDL_JOYSTICK_USBHID */ +/* #undef SDL_HAVE_MACHINE_JOYSTICK_H */ +/* #undef SDL_JOYSTICK_HIDAPI */ +/* #undef SDL_JOYSTICK_RAWINPUT */ +/* #undef SDL_JOYSTICK_EMSCRIPTEN */ +/* #undef SDL_JOYSTICK_VIRTUAL */ +/* #undef SDL_JOYSTICK_VITA */ +/* #undef SDL_JOYSTICK_PSP */ +/* #undef SDL_JOYSTICK_PS2 */ +/* #undef SDL_JOYSTICK_N3DS */ +#define SDL_HAPTIC_DUMMY 1 +/* #undef SDL_HAPTIC_LINUX */ +/* #undef SDL_HAPTIC_IOKIT */ +/* #undef SDL_HAPTIC_DINPUT */ +/* #undef SDL_HAPTIC_XINPUT */ +/* #undef SDL_HAPTIC_ANDROID */ +/* #undef SDL_LIBUSB_DYNAMIC */ +#define SDL_UDEV_DYNAMIC "libudev.so.1" + +/* Enable various sensor drivers */ +/* #undef SDL_SENSOR_ANDROID */ +/* #undef SDL_SENSOR_COREMOTION */ +/* #undef SDL_SENSOR_WINDOWS */ +#define SDL_SENSOR_DUMMY 1 +/* #undef SDL_SENSOR_VITA */ +/* #undef SDL_SENSOR_N3DS */ + +/* Enable various shared object loading systems */ +#define SDL_LOADSO_DLOPEN 1 +/* #undef SDL_LOADSO_DUMMY */ +/* #undef SDL_LOADSO_LDG */ +/* #undef SDL_LOADSO_WINDOWS */ +/* #undef SDL_LOADSO_OS2 */ + +/* Enable various threading systems */ +/* #undef SDL_THREAD_GENERIC_COND_SUFFIX */ +#define SDL_THREAD_PTHREAD 1 +#define SDL_THREAD_PTHREAD_RECURSIVE_MUTEX 1 +/* #undef SDL_THREAD_PTHREAD_RECURSIVE_MUTEX_NP */ +/* #undef SDL_THREAD_WINDOWS */ +/* #undef SDL_THREAD_OS2 */ +/* #undef SDL_THREAD_VITA */ +/* #undef SDL_THREAD_PSP */ +/* #undef SDL_THREAD_PS2 */ +/* #undef SDL_THREAD_N3DS */ + +/* Enable various timer systems */ +/* #undef SDL_TIMER_HAIKU */ +/* #undef SDL_TIMER_DUMMY */ +#define SDL_TIMER_UNIX 1 +/* #undef SDL_TIMER_WINDOWS */ +/* #undef SDL_TIMER_OS2 */ +/* #undef SDL_TIMER_VITA */ +/* #undef SDL_TIMER_PSP */ +/* #undef SDL_TIMER_PS2 */ +/* #undef SDL_TIMER_N3DS */ + +/* Enable various video drivers */ +/* #undef SDL_VIDEO_DRIVER_ANDROID */ +/* #undef SDL_VIDEO_DRIVER_EMSCRIPTEN */ +/* #undef SDL_VIDEO_DRIVER_HAIKU */ +/* #undef SDL_VIDEO_DRIVER_COCOA */ +/* #undef SDL_VIDEO_DRIVER_UIKIT */ +/* #undef SDL_VIDEO_DRIVER_DIRECTFB */ +/* #undef SDL_VIDEO_DRIVER_DIRECTFB_DYNAMIC */ +#define SDL_VIDEO_DRIVER_DUMMY 1 +#define SDL_VIDEO_DRIVER_OFFSCREEN 1 +/* #undef SDL_VIDEO_DRIVER_WINDOWS */ +/* #undef SDL_VIDEO_DRIVER_WINRT */ +#define SDL_VIDEO_DRIVER_WAYLAND 1 +/* #undef SDL_VIDEO_DRIVER_RPI */ +/* #undef SDL_VIDEO_DRIVER_VIVANTE */ +/* #undef SDL_VIDEO_DRIVER_VIVANTE_VDK */ +/* #undef SDL_VIDEO_DRIVER_OS2 */ +/* #undef SDL_VIDEO_DRIVER_QNX */ +/* #undef SDL_VIDEO_DRIVER_RISCOS */ +/* #undef SDL_VIDEO_DRIVER_PSP */ +/* #undef SDL_VIDEO_DRIVER_PS2 */ + +#define SDL_VIDEO_DRIVER_KMSDRM 1 +#define SDL_VIDEO_DRIVER_KMSDRM_DYNAMIC "libdrm.so.2" +#define SDL_VIDEO_DRIVER_KMSDRM_DYNAMIC_GBM "libgbm.so.1" + +#define SDL_VIDEO_DRIVER_WAYLAND_QT_TOUCH 1 +#define SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC "libwayland-client.so.0" +#define SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC_EGL "libwayland-egl.so.1" +#define SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC_CURSOR "libwayland-cursor.so.0" +#define SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC_XKBCOMMON "libxkbcommon.so.0" +#define SDL_VIDEO_DRIVER_WAYLAND_DYNAMIC_LIBDECOR "libdecor-0.so.0" + +#define SDL_VIDEO_DRIVER_X11 1 +#define SDL_VIDEO_DRIVER_X11_DYNAMIC "libX11.so.6" +#define SDL_VIDEO_DRIVER_X11_DYNAMIC_XEXT "libXext.so.6" +#define SDL_VIDEO_DRIVER_X11_DYNAMIC_XCURSOR "libXcursor.so.1" +#define SDL_VIDEO_DRIVER_X11_DYNAMIC_XINPUT2 "libXi.so.6" +#define SDL_VIDEO_DRIVER_X11_DYNAMIC_XFIXES "libXfixes.so.3" +#define SDL_VIDEO_DRIVER_X11_DYNAMIC_XRANDR "libXrandr.so.2" +/* #undef SDL_VIDEO_DRIVER_X11_DYNAMIC_XSS */ +#define SDL_VIDEO_DRIVER_X11_XCURSOR 1 +#define SDL_VIDEO_DRIVER_X11_XDBE 1 +#define SDL_VIDEO_DRIVER_X11_XINPUT2 1 +#define SDL_VIDEO_DRIVER_X11_XINPUT2_SUPPORTS_MULTITOUCH 1 +#define SDL_VIDEO_DRIVER_X11_XFIXES 1 +#define SDL_VIDEO_DRIVER_X11_XRANDR 1 +/* #undef SDL_VIDEO_DRIVER_X11_XSCRNSAVER */ +#define SDL_VIDEO_DRIVER_X11_XSHAPE 1 +#define SDL_VIDEO_DRIVER_X11_SUPPORTS_GENERIC_EVENTS 1 +#define SDL_VIDEO_DRIVER_X11_HAS_XKBKEYCODETOKEYSYM 1 +/* #undef SDL_VIDEO_DRIVER_VITA */ +/* #undef SDL_VIDEO_DRIVER_N3DS */ + +/* #undef SDL_VIDEO_RENDER_D3D */ +/* #undef SDL_VIDEO_RENDER_D3D11 */ +/* #undef SDL_VIDEO_RENDER_D3D12 */ +#define SDL_VIDEO_RENDER_OGL 1 +#define SDL_VIDEO_RENDER_OGL_ES 1 +#define SDL_VIDEO_RENDER_OGL_ES2 1 +/* #undef SDL_VIDEO_RENDER_DIRECTFB */ +/* #undef SDL_VIDEO_RENDER_METAL */ +/* #undef SDL_VIDEO_RENDER_VITA_GXM */ +/* #undef SDL_VIDEO_RENDER_PS2 */ +/* #undef SDL_VIDEO_RENDER_PSP */ + +/* Enable OpenGL support */ +#define SDL_VIDEO_OPENGL 1 +#define SDL_VIDEO_OPENGL_ES 1 +#define SDL_VIDEO_OPENGL_ES2 1 +/* #undef SDL_VIDEO_OPENGL_BGL */ +/* #undef SDL_VIDEO_OPENGL_CGL */ +#define SDL_VIDEO_OPENGL_GLX 1 +/* #undef SDL_VIDEO_OPENGL_WGL */ +#define SDL_VIDEO_OPENGL_EGL 1 +/* #undef SDL_VIDEO_OPENGL_OSMESA */ +/* #undef SDL_VIDEO_OPENGL_OSMESA_DYNAMIC */ + +/* Enable Vulkan support */ +/* #undef SDL_VIDEO_VULKAN */ + +/* Enable Metal support */ +/* #undef SDL_VIDEO_METAL */ + +/* Enable system power support */ +/* #undef SDL_POWER_ANDROID */ +#define SDL_POWER_LINUX 1 +/* #undef SDL_POWER_WINDOWS */ +/* #undef SDL_POWER_WINRT */ +/* #undef SDL_POWER_MACOSX */ +/* #undef SDL_POWER_UIKIT */ +/* #undef SDL_POWER_HAIKU */ +/* #undef SDL_POWER_EMSCRIPTEN */ +/* #undef SDL_POWER_HARDWIRED */ +/* #undef SDL_POWER_VITA */ +/* #undef SDL_POWER_PSP */ +/* #undef SDL_POWER_N3DS */ + +/* Enable system filesystem support */ +/* #undef SDL_FILESYSTEM_ANDROID */ +/* #undef SDL_FILESYSTEM_HAIKU */ +/* #undef SDL_FILESYSTEM_COCOA */ +/* #undef SDL_FILESYSTEM_DUMMY */ +/* #undef SDL_FILESYSTEM_RISCOS */ +#define SDL_FILESYSTEM_UNIX 1 +/* #undef SDL_FILESYSTEM_WINDOWS */ +/* #undef SDL_FILESYSTEM_EMSCRIPTEN */ +/* #undef SDL_FILESYSTEM_OS2 */ +/* #undef SDL_FILESYSTEM_VITA */ +/* #undef SDL_FILESYSTEM_PSP */ +/* #undef SDL_FILESYSTEM_PS2 */ +/* #undef SDL_FILESYSTEM_N3DS */ + +/* Enable misc subsystem */ +/* #undef SDL_MISC_DUMMY */ + +/* Enable locale subsystem */ +/* #undef SDL_LOCALE_DUMMY */ + +/* Enable assembly routines */ +/* #undef SDL_ALTIVEC_BLITTERS */ +/* #undef SDL_ARM_SIMD_BLITTERS */ +/* #undef SDL_ARM_NEON_BLITTERS */ + +/* Whether SDL_DYNAMIC_API needs dlopen */ +#define DYNAPI_NEEDS_DLOPEN 1 + +/* Enable dynamic libsamplerate support */ +/* #undef SDL_LIBSAMPLERATE_DYNAMIC */ + +/* Enable ime support */ +#define SDL_USE_IME 1 + +/* Platform specific definitions */ +/* #undef SDL_IPHONE_KEYBOARD */ +/* #undef SDL_IPHONE_LAUNCHSCREEN */ + +/* #undef SDL_VIDEO_VITA_PIB */ +/* #undef SDL_VIDEO_VITA_PVR */ +/* #undef SDL_VIDEO_VITA_PVR_OGL */ + +#define SDL_HAVE_LIBDECOR_GET_MIN_MAX 1 + +#if !defined(HAVE_STDINT_H) && !defined(_STDINT_H_) +/* Most everything except Visual Studio 2008 and earlier has stdint.h now */ +#if defined(_MSC_VER) && (_MSC_VER < 1600) +typedef signed __int8 int8_t; +typedef unsigned __int8 uint8_t; +typedef signed __int16 int16_t; +typedef unsigned __int16 uint16_t; +typedef signed __int32 int32_t; +typedef unsigned __int32 uint32_t; +typedef signed __int64 int64_t; +typedef unsigned __int64 uint64_t; +#ifndef _UINTPTR_T_DEFINED +#ifdef _WIN64 +typedef unsigned __int64 uintptr_t; +#else +typedef unsigned int uintptr_t; +#endif +#define _UINTPTR_T_DEFINED +#endif +#endif /* Visual Studio 2008 */ +#endif /* !_STDINT_H_ && !HAVE_STDINT_H */ + +#endif /* SDL_config_h_ */ diff --git a/third_party/tlRender-install-Release/include/SDL2/SDL_copying.h b/third_party/tlRender-install-Release/include/SDL2/SDL_copying.h new file mode 100644 index 00000000..bde74318 --- /dev/null +++ b/third_party/tlRender-install-Release/include/SDL2/SDL_copying.h @@ -0,0 +1,20 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2025 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ diff --git a/third_party/tlRender-install-Release/include/SDL2/SDL_cpuinfo.h b/third_party/tlRender-install-Release/include/SDL2/SDL_cpuinfo.h new file mode 100644 index 00000000..696a03bf --- /dev/null +++ b/third_party/tlRender-install-Release/include/SDL2/SDL_cpuinfo.h @@ -0,0 +1,603 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2025 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +/* WIKI CATEGORY: CPUInfo */ + +/** + * # CategoryCPUInfo + * + * CPU feature detection for SDL. + * + * These functions are largely concerned with reporting if the system has + * access to various SIMD instruction sets, but also has other important info + * to share, such as number of logical CPU cores. + */ + +#ifndef SDL_cpuinfo_h_ +#define SDL_cpuinfo_h_ + +#include "SDL_stdinc.h" + +/* Need to do this here because intrin.h has C++ code in it */ +/* Visual Studio 2005 has a bug where intrin.h conflicts with winnt.h */ +#if defined(_MSC_VER) && (_MSC_VER >= 1500) && (defined(_M_IX86) || defined(_M_X64)) +#ifdef __clang__ +/* As of Clang 11, '_m_prefetchw' is conflicting with the winnt.h's version, + so we define the needed '_m_prefetch' here as a pseudo-header, until the issue is fixed. */ + +#ifndef __PRFCHWINTRIN_H +#define __PRFCHWINTRIN_H + +static __inline__ void __attribute__((__always_inline__, __nodebug__)) +_m_prefetch(void *__P) +{ + __builtin_prefetch (__P, 0, 3 /* _MM_HINT_T0 */); +} + +#endif /* __PRFCHWINTRIN_H */ +#endif /* __clang__ */ +#include +#ifndef _WIN64 +#ifndef __MMX__ +#define __MMX__ +#endif +/* +#ifndef __3dNOW__ +#define __3dNOW__ +#endif +*/ +#endif +#ifndef __SSE__ +#define __SSE__ +#endif +#ifndef __SSE2__ +#define __SSE2__ +#endif +#ifndef __SSE3__ +#define __SSE3__ +#endif +#elif defined(__MINGW64_VERSION_MAJOR) +#include +#if !defined(SDL_DISABLE_ARM_NEON_H) && defined(__ARM_NEON) +# include +#endif +#else +/* altivec.h redefining bool causes a number of problems, see bugs 3993 and 4392, so you need to explicitly define SDL_ENABLE_ALTIVEC_H to have it included. */ +#if defined(HAVE_ALTIVEC_H) && defined(__ALTIVEC__) && !defined(__APPLE_ALTIVEC__) && defined(SDL_ENABLE_ALTIVEC_H) +#include +#endif +#if !defined(SDL_DISABLE_ARM_NEON_H) +# if defined(__ARM_NEON) +# include +# elif defined(__WINDOWS__) || defined(__WINRT__) || defined(__GDK__) +/* Visual Studio doesn't define __ARM_ARCH, but _M_ARM (if set, always 7), and _M_ARM64 (if set, always 1). */ +# if defined(_M_ARM) +# include +# include +# define __ARM_NEON 1 /* Set __ARM_NEON so that it can be used elsewhere, at compile time */ +# endif +# if defined (_M_ARM64) +# include +# include +# define __ARM_NEON 1 /* Set __ARM_NEON so that it can be used elsewhere, at compile time */ +# define __ARM_ARCH 8 +# endif +# endif +#endif +#endif /* compiler version */ + +#if defined(__3dNOW__) && !defined(SDL_DISABLE_MM3DNOW_H) +#include +#endif +#if defined(__loongarch_sx) && !defined(SDL_DISABLE_LSX_H) +#include +#define __LSX__ +#endif +#if defined(__loongarch_asx) && !defined(SDL_DISABLE_LASX_H) +#include +#define __LASX__ +#endif +#if defined(HAVE_IMMINTRIN_H) && !defined(SDL_DISABLE_IMMINTRIN_H) && \ + (defined(__x86_64__) || defined(_M_X64) || defined(__i386__) || defined(_M_IX86)) +#include +#else +#if defined(__MMX__) && !defined(SDL_DISABLE_MMINTRIN_H) +#include +#endif +#if defined(__SSE__) && !defined(SDL_DISABLE_XMMINTRIN_H) +#include +#endif +#if defined(__SSE2__) && !defined(SDL_DISABLE_EMMINTRIN_H) +#include +#endif +#if defined(__SSE3__) && !defined(SDL_DISABLE_PMMINTRIN_H) +#include +#endif +#endif /* HAVE_IMMINTRIN_H */ + +#include "begin_code.h" +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/* This is a guess for the cacheline size used for padding. + * Most x86 processors have a 64 byte cache line. + * The 64-bit PowerPC processors have a 128 byte cache line. + * We'll use the larger value to be generally safe. + */ +#define SDL_CACHELINE_SIZE 128 + +/** + * Get the number of CPU cores available. + * + * \returns the total number of logical CPU cores. On CPUs that include + * technologies such as hyperthreading, the number of logical cores + * may be more than the number of physical cores. + * + * \since This function is available since SDL 2.0.0. + */ +extern DECLSPEC int SDLCALL SDL_GetCPUCount(void); + +/** + * Determine the L1 cache line size of the CPU. + * + * This is useful for determining multi-threaded structure padding or SIMD + * prefetch sizes. + * + * \returns the L1 cache line size of the CPU, in bytes. + * + * \since This function is available since SDL 2.0.0. + */ +extern DECLSPEC int SDLCALL SDL_GetCPUCacheLineSize(void); + +/** + * Determine whether the CPU has the RDTSC instruction. + * + * This always returns false on CPUs that aren't using Intel instruction sets. + * + * \returns SDL_TRUE if the CPU has the RDTSC instruction or SDL_FALSE if not. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_Has3DNow + * \sa SDL_HasAltiVec + * \sa SDL_HasAVX + * \sa SDL_HasAVX2 + * \sa SDL_HasMMX + * \sa SDL_HasSSE + * \sa SDL_HasSSE2 + * \sa SDL_HasSSE3 + * \sa SDL_HasSSE41 + * \sa SDL_HasSSE42 + */ +extern DECLSPEC SDL_bool SDLCALL SDL_HasRDTSC(void); + +/** + * Determine whether the CPU has AltiVec features. + * + * This always returns false on CPUs that aren't using PowerPC instruction + * sets. + * + * \returns SDL_TRUE if the CPU has AltiVec features or SDL_FALSE if not. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_Has3DNow + * \sa SDL_HasAVX + * \sa SDL_HasAVX2 + * \sa SDL_HasMMX + * \sa SDL_HasRDTSC + * \sa SDL_HasSSE + * \sa SDL_HasSSE2 + * \sa SDL_HasSSE3 + * \sa SDL_HasSSE41 + * \sa SDL_HasSSE42 + */ +extern DECLSPEC SDL_bool SDLCALL SDL_HasAltiVec(void); + +/** + * Determine whether the CPU has MMX features. + * + * This always returns false on CPUs that aren't using Intel instruction sets. + * + * \returns SDL_TRUE if the CPU has MMX features or SDL_FALSE if not. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_Has3DNow + * \sa SDL_HasAltiVec + * \sa SDL_HasAVX + * \sa SDL_HasAVX2 + * \sa SDL_HasRDTSC + * \sa SDL_HasSSE + * \sa SDL_HasSSE2 + * \sa SDL_HasSSE3 + * \sa SDL_HasSSE41 + * \sa SDL_HasSSE42 + */ +extern DECLSPEC SDL_bool SDLCALL SDL_HasMMX(void); + +/** + * Determine whether the CPU has 3DNow! features. + * + * This always returns false on CPUs that aren't using AMD instruction sets. + * + * \returns SDL_TRUE if the CPU has 3DNow! features or SDL_FALSE if not. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_HasAltiVec + * \sa SDL_HasAVX + * \sa SDL_HasAVX2 + * \sa SDL_HasMMX + * \sa SDL_HasRDTSC + * \sa SDL_HasSSE + * \sa SDL_HasSSE2 + * \sa SDL_HasSSE3 + * \sa SDL_HasSSE41 + * \sa SDL_HasSSE42 + */ +extern DECLSPEC SDL_bool SDLCALL SDL_Has3DNow(void); + +/** + * Determine whether the CPU has SSE features. + * + * This always returns false on CPUs that aren't using Intel instruction sets. + * + * \returns SDL_TRUE if the CPU has SSE features or SDL_FALSE if not. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_Has3DNow + * \sa SDL_HasAltiVec + * \sa SDL_HasAVX + * \sa SDL_HasAVX2 + * \sa SDL_HasMMX + * \sa SDL_HasRDTSC + * \sa SDL_HasSSE2 + * \sa SDL_HasSSE3 + * \sa SDL_HasSSE41 + * \sa SDL_HasSSE42 + */ +extern DECLSPEC SDL_bool SDLCALL SDL_HasSSE(void); + +/** + * Determine whether the CPU has SSE2 features. + * + * This always returns false on CPUs that aren't using Intel instruction sets. + * + * \returns SDL_TRUE if the CPU has SSE2 features or SDL_FALSE if not. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_Has3DNow + * \sa SDL_HasAltiVec + * \sa SDL_HasAVX + * \sa SDL_HasAVX2 + * \sa SDL_HasMMX + * \sa SDL_HasRDTSC + * \sa SDL_HasSSE + * \sa SDL_HasSSE3 + * \sa SDL_HasSSE41 + * \sa SDL_HasSSE42 + */ +extern DECLSPEC SDL_bool SDLCALL SDL_HasSSE2(void); + +/** + * Determine whether the CPU has SSE3 features. + * + * This always returns false on CPUs that aren't using Intel instruction sets. + * + * \returns SDL_TRUE if the CPU has SSE3 features or SDL_FALSE if not. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_Has3DNow + * \sa SDL_HasAltiVec + * \sa SDL_HasAVX + * \sa SDL_HasAVX2 + * \sa SDL_HasMMX + * \sa SDL_HasRDTSC + * \sa SDL_HasSSE + * \sa SDL_HasSSE2 + * \sa SDL_HasSSE41 + * \sa SDL_HasSSE42 + */ +extern DECLSPEC SDL_bool SDLCALL SDL_HasSSE3(void); + +/** + * Determine whether the CPU has SSE4.1 features. + * + * This always returns false on CPUs that aren't using Intel instruction sets. + * + * \returns SDL_TRUE if the CPU has SSE4.1 features or SDL_FALSE if not. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_Has3DNow + * \sa SDL_HasAltiVec + * \sa SDL_HasAVX + * \sa SDL_HasAVX2 + * \sa SDL_HasMMX + * \sa SDL_HasRDTSC + * \sa SDL_HasSSE + * \sa SDL_HasSSE2 + * \sa SDL_HasSSE3 + * \sa SDL_HasSSE42 + */ +extern DECLSPEC SDL_bool SDLCALL SDL_HasSSE41(void); + +/** + * Determine whether the CPU has SSE4.2 features. + * + * This always returns false on CPUs that aren't using Intel instruction sets. + * + * \returns SDL_TRUE if the CPU has SSE4.2 features or SDL_FALSE if not. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_Has3DNow + * \sa SDL_HasAltiVec + * \sa SDL_HasAVX + * \sa SDL_HasAVX2 + * \sa SDL_HasMMX + * \sa SDL_HasRDTSC + * \sa SDL_HasSSE + * \sa SDL_HasSSE2 + * \sa SDL_HasSSE3 + * \sa SDL_HasSSE41 + */ +extern DECLSPEC SDL_bool SDLCALL SDL_HasSSE42(void); + +/** + * Determine whether the CPU has AVX features. + * + * This always returns false on CPUs that aren't using Intel instruction sets. + * + * \returns SDL_TRUE if the CPU has AVX features or SDL_FALSE if not. + * + * \since This function is available since SDL 2.0.2. + * + * \sa SDL_Has3DNow + * \sa SDL_HasAltiVec + * \sa SDL_HasAVX2 + * \sa SDL_HasMMX + * \sa SDL_HasRDTSC + * \sa SDL_HasSSE + * \sa SDL_HasSSE2 + * \sa SDL_HasSSE3 + * \sa SDL_HasSSE41 + * \sa SDL_HasSSE42 + */ +extern DECLSPEC SDL_bool SDLCALL SDL_HasAVX(void); + +/** + * Determine whether the CPU has AVX2 features. + * + * This always returns false on CPUs that aren't using Intel instruction sets. + * + * \returns SDL_TRUE if the CPU has AVX2 features or SDL_FALSE if not. + * + * \since This function is available since SDL 2.0.4. + * + * \sa SDL_Has3DNow + * \sa SDL_HasAltiVec + * \sa SDL_HasAVX + * \sa SDL_HasMMX + * \sa SDL_HasRDTSC + * \sa SDL_HasSSE + * \sa SDL_HasSSE2 + * \sa SDL_HasSSE3 + * \sa SDL_HasSSE41 + * \sa SDL_HasSSE42 + */ +extern DECLSPEC SDL_bool SDLCALL SDL_HasAVX2(void); + +/** + * Determine whether the CPU has AVX-512F (foundation) features. + * + * This always returns false on CPUs that aren't using Intel instruction sets. + * + * \returns SDL_TRUE if the CPU has AVX-512F features or SDL_FALSE if not. + * + * \since This function is available since SDL 2.0.9. + * + * \sa SDL_HasAVX + */ +extern DECLSPEC SDL_bool SDLCALL SDL_HasAVX512F(void); + +/** + * Determine whether the CPU has ARM SIMD (ARMv6) features. + * + * This is different from ARM NEON, which is a different instruction set. + * + * This always returns false on CPUs that aren't using ARM instruction sets. + * + * \returns SDL_TRUE if the CPU has ARM SIMD features or SDL_FALSE if not. + * + * \since This function is available since SDL 2.0.12. + * + * \sa SDL_HasNEON + */ +extern DECLSPEC SDL_bool SDLCALL SDL_HasARMSIMD(void); + +/** + * Determine whether the CPU has NEON (ARM SIMD) features. + * + * This always returns false on CPUs that aren't using ARM instruction sets. + * + * \returns SDL_TRUE if the CPU has ARM NEON features or SDL_FALSE if not. + * + * \since This function is available since SDL 2.0.6. + */ +extern DECLSPEC SDL_bool SDLCALL SDL_HasNEON(void); + +/** + * Determine whether the CPU has LSX (LOONGARCH SIMD) features. + * + * This always returns false on CPUs that aren't using LOONGARCH instruction + * sets. + * + * \returns SDL_TRUE if the CPU has LOONGARCH LSX features or SDL_FALSE if + * not. + * + * \since This function is available since SDL 2.24.0. + */ +extern DECLSPEC SDL_bool SDLCALL SDL_HasLSX(void); + +/** + * Determine whether the CPU has LASX (LOONGARCH SIMD) features. + * + * This always returns false on CPUs that aren't using LOONGARCH instruction + * sets. + * + * \returns SDL_TRUE if the CPU has LOONGARCH LASX features or SDL_FALSE if + * not. + * + * \since This function is available since SDL 2.24.0. + */ +extern DECLSPEC SDL_bool SDLCALL SDL_HasLASX(void); + +/** + * Get the amount of RAM configured in the system. + * + * \returns the amount of RAM configured in the system in MiB. + * + * \since This function is available since SDL 2.0.1. + */ +extern DECLSPEC int SDLCALL SDL_GetSystemRAM(void); + +/** + * Report the alignment this system needs for SIMD allocations. + * + * This will return the minimum number of bytes to which a pointer must be + * aligned to be compatible with SIMD instructions on the current machine. For + * example, if the machine supports SSE only, it will return 16, but if it + * supports AVX-512F, it'll return 64 (etc). This only reports values for + * instruction sets SDL knows about, so if your SDL build doesn't have + * SDL_HasAVX512F(), then it might return 16 for the SSE support it sees and + * not 64 for the AVX-512 instructions that exist but SDL doesn't know about. + * Plan accordingly. + * + * \returns the alignment in bytes needed for available, known SIMD + * instructions. + * + * \since This function is available since SDL 2.0.10. + */ +extern DECLSPEC size_t SDLCALL SDL_SIMDGetAlignment(void); + +/** + * Allocate memory in a SIMD-friendly way. + * + * This will allocate a block of memory that is suitable for use with SIMD + * instructions. Specifically, it will be properly aligned and padded for the + * system's supported vector instructions. + * + * The memory returned will be padded such that it is safe to read or write an + * incomplete vector at the end of the memory block. This can be useful so you + * don't have to drop back to a scalar fallback at the end of your SIMD + * processing loop to deal with the final elements without overflowing the + * allocated buffer. + * + * You must free this memory with SDL_FreeSIMD(), not free() or SDL_free() or + * delete[], etc. + * + * Note that SDL will only deal with SIMD instruction sets it is aware of; for + * example, SDL 2.0.8 knows that SSE wants 16-byte vectors (SDL_HasSSE()), and + * AVX2 wants 32 bytes (SDL_HasAVX2()), but doesn't know that AVX-512 wants + * 64. To be clear: if you can't decide to use an instruction set with an + * SDL_Has*() function, don't use that instruction set with memory allocated + * through here. + * + * SDL_AllocSIMD(0) will return a non-NULL pointer, assuming the system isn't + * out of memory, but you are not allowed to dereference it (because you only + * own zero bytes of that buffer). + * + * \param len The length, in bytes, of the block to allocate. The actual + * allocated block might be larger due to padding, etc. + * \returns a pointer to the newly-allocated block, NULL if out of memory. + * + * \since This function is available since SDL 2.0.10. + * + * \sa SDL_SIMDGetAlignment + * \sa SDL_SIMDRealloc + * \sa SDL_SIMDFree + */ +extern DECLSPEC void * SDLCALL SDL_SIMDAlloc(const size_t len); + +/** + * Reallocate memory obtained from SDL_SIMDAlloc + * + * It is not valid to use this function on a pointer from anything but + * SDL_SIMDAlloc(). It can't be used on pointers from malloc, realloc, + * SDL_malloc, memalign, new[], etc. + * + * \param mem The pointer obtained from SDL_SIMDAlloc. This function also + * accepts NULL, at which point this function is the same as + * calling SDL_SIMDAlloc with a NULL pointer. + * \param len The length, in bytes, of the block to allocated. The actual + * allocated block might be larger due to padding, etc. Passing 0 + * will return a non-NULL pointer, assuming the system isn't out of + * memory. + * \returns a pointer to the newly-reallocated block, NULL if out of memory. + * + * \since This function is available since SDL 2.0.14. + * + * \sa SDL_SIMDGetAlignment + * \sa SDL_SIMDAlloc + * \sa SDL_SIMDFree + */ +extern DECLSPEC void * SDLCALL SDL_SIMDRealloc(void *mem, const size_t len); + +/** + * Deallocate memory obtained from SDL_SIMDAlloc + * + * It is not valid to use this function on a pointer from anything but + * SDL_SIMDAlloc() or SDL_SIMDRealloc(). It can't be used on pointers from + * malloc, realloc, SDL_malloc, memalign, new[], etc. + * + * However, SDL_SIMDFree(NULL) is a legal no-op. + * + * The memory pointed to by `ptr` is no longer valid for access upon return, + * and may be returned to the system or reused by a future allocation. The + * pointer passed to this function is no longer safe to dereference once this + * function returns, and should be discarded. + * + * \param ptr The pointer, returned from SDL_SIMDAlloc or SDL_SIMDRealloc, to + * deallocate. NULL is a legal no-op. + * + * \since This function is available since SDL 2.0.10. + * + * \sa SDL_SIMDAlloc + * \sa SDL_SIMDRealloc + */ +extern DECLSPEC void SDLCALL SDL_SIMDFree(void *ptr); + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include "close_code.h" + +#endif /* SDL_cpuinfo_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/third_party/tlRender-install-Release/include/SDL2/SDL_egl.h b/third_party/tlRender-install-Release/include/SDL2/SDL_egl.h new file mode 100644 index 00000000..31290ec2 --- /dev/null +++ b/third_party/tlRender-install-Release/include/SDL2/SDL_egl.h @@ -0,0 +1,2351 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2025 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +/* + * This is a simple file to encapsulate the EGL API headers. + */ + +#if !defined(_MSC_VER) && !defined(__ANDROID__) && !defined(SDL_USE_BUILTIN_OPENGL_DEFINITIONS) + +#if defined(__vita__) || defined(__psp2__) +#include +#endif + +#include +#include + +#else /* _MSC_VER */ + +/* EGL headers for Visual Studio */ + +#ifndef __khrplatform_h_ +#define __khrplatform_h_ + +/* +** Copyright (c) 2008-2018 The Khronos Group Inc. +** +** Permission is hereby granted, free of charge, to any person obtaining a +** copy of this software and/or associated documentation files (the +** "Materials"), to deal in the Materials without restriction, including +** without limitation the rights to use, copy, modify, merge, publish, +** distribute, sublicense, and/or sell copies of the Materials, and to +** permit persons to whom the Materials are furnished to do so, subject to +** the following conditions: +** +** The above copyright notice and this permission notice shall be included +** in all copies or substantial portions of the Materials. +** +** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. +*/ + +/* Khronos platform-specific types and definitions. + * + * The master copy of khrplatform.h is maintained in the Khronos EGL + * Registry repository at https://github.com/KhronosGroup/EGL-Registry + * The last semantic modification to khrplatform.h was at commit ID: + * 67a3e0864c2d75ea5287b9f3d2eb74a745936692 + * + * Adopters may modify this file to suit their platform. Adopters are + * encouraged to submit platform specific modifications to the Khronos + * group so that they can be included in future versions of this file. + * Please submit changes by filing pull requests or issues on + * the EGL Registry repository linked above. + * + * + * See the Implementer's Guidelines for information about where this file + * should be located on your system and for more details of its use: + * http://www.khronos.org/registry/implementers_guide.pdf + * + * This file should be included as + * #include + * by Khronos client API header files that use its types and defines. + * + * The types in khrplatform.h should only be used to define API-specific types. + * + * Types defined in khrplatform.h: + * khronos_int8_t signed 8 bit + * khronos_uint8_t unsigned 8 bit + * khronos_int16_t signed 16 bit + * khronos_uint16_t unsigned 16 bit + * khronos_int32_t signed 32 bit + * khronos_uint32_t unsigned 32 bit + * khronos_int64_t signed 64 bit + * khronos_uint64_t unsigned 64 bit + * khronos_intptr_t signed same number of bits as a pointer + * khronos_uintptr_t unsigned same number of bits as a pointer + * khronos_ssize_t signed size + * khronos_usize_t unsigned size + * khronos_float_t signed 32 bit floating point + * khronos_time_ns_t unsigned 64 bit time in nanoseconds + * khronos_utime_nanoseconds_t unsigned time interval or absolute time in + * nanoseconds + * khronos_stime_nanoseconds_t signed time interval in nanoseconds + * khronos_boolean_enum_t enumerated boolean type. This should + * only be used as a base type when a client API's boolean type is + * an enum. Client APIs which use an integer or other type for + * booleans cannot use this as the base type for their boolean. + * + * Tokens defined in khrplatform.h: + * + * KHRONOS_FALSE, KHRONOS_TRUE Enumerated boolean false/true values. + * + * KHRONOS_SUPPORT_INT64 is 1 if 64 bit integers are supported; otherwise 0. + * KHRONOS_SUPPORT_FLOAT is 1 if floats are supported; otherwise 0. + * + * Calling convention macros defined in this file: + * KHRONOS_APICALL + * KHRONOS_APIENTRY + * KHRONOS_APIATTRIBUTES + * + * These may be used in function prototypes as: + * + * KHRONOS_APICALL void KHRONOS_APIENTRY funcname( + * int arg1, + * int arg2) KHRONOS_APIATTRIBUTES; + */ + +#if defined(__SCITECH_SNAP__) && !defined(KHRONOS_STATIC) +# define KHRONOS_STATIC 1 +#endif + +/*------------------------------------------------------------------------- + * Definition of KHRONOS_APICALL + *------------------------------------------------------------------------- + * This precedes the return type of the function in the function prototype. + */ +#if defined(KHRONOS_STATIC) + /* If the preprocessor constant KHRONOS_STATIC is defined, make the + * header compatible with static linking. */ +# define KHRONOS_APICALL +#elif defined(_WIN32) +# define KHRONOS_APICALL __declspec(dllimport) +#elif defined (__SYMBIAN32__) +# define KHRONOS_APICALL IMPORT_C +#elif defined(__ANDROID__) +# define KHRONOS_APICALL __attribute__((visibility("default"))) +#else +# define KHRONOS_APICALL +#endif + +/*------------------------------------------------------------------------- + * Definition of KHRONOS_APIENTRY + *------------------------------------------------------------------------- + * This follows the return type of the function and precedes the function + * name in the function prototype. + */ +#if defined(_WIN32) && !defined(_WIN32_WCE) && !defined(__SCITECH_SNAP__) + /* Win32 but not WinCE */ +# define KHRONOS_APIENTRY __stdcall +#else +# define KHRONOS_APIENTRY +#endif + +/*------------------------------------------------------------------------- + * Definition of KHRONOS_APIATTRIBUTES + *------------------------------------------------------------------------- + * This follows the closing parenthesis of the function prototype arguments. + */ +#if defined (__ARMCC_2__) +#define KHRONOS_APIATTRIBUTES __softfp +#else +#define KHRONOS_APIATTRIBUTES +#endif + +/*------------------------------------------------------------------------- + * basic type definitions + *-----------------------------------------------------------------------*/ +#if (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) || defined(__GNUC__) || defined(__SCO__) || defined(__USLC__) + + +/* + * Using + */ +#include +typedef int32_t khronos_int32_t; +typedef uint32_t khronos_uint32_t; +typedef int64_t khronos_int64_t; +typedef uint64_t khronos_uint64_t; +#define KHRONOS_SUPPORT_INT64 1 +#define KHRONOS_SUPPORT_FLOAT 1 +/* + * To support platform where unsigned long cannot be used interchangeably with + * inptr_t (e.g. CHERI-extended ISAs), we can use the stdint.h intptr_t. + * Ideally, we could just use (u)intptr_t everywhere, but this could result in + * ABI breakage if khronos_uintptr_t is changed from unsigned long to + * unsigned long long or similar (this results in different C++ name mangling). + * To avoid changes for existing platforms, we restrict usage of intptr_t to + * platforms where the size of a pointer is larger than the size of long. + */ +#if defined(__SIZEOF_LONG__) && defined(__SIZEOF_POINTER__) +#if __SIZEOF_POINTER__ > __SIZEOF_LONG__ +#define KHRONOS_USE_INTPTR_T +#endif +#endif + +#elif defined(__VMS ) || defined(__sgi) + +/* + * Using + */ +#include +typedef int32_t khronos_int32_t; +typedef uint32_t khronos_uint32_t; +typedef int64_t khronos_int64_t; +typedef uint64_t khronos_uint64_t; +#define KHRONOS_SUPPORT_INT64 1 +#define KHRONOS_SUPPORT_FLOAT 1 + +#elif defined(_WIN32) && !defined(__SCITECH_SNAP__) + +/* + * Win32 + */ +typedef __int32 khronos_int32_t; +typedef unsigned __int32 khronos_uint32_t; +typedef __int64 khronos_int64_t; +typedef unsigned __int64 khronos_uint64_t; +#define KHRONOS_SUPPORT_INT64 1 +#define KHRONOS_SUPPORT_FLOAT 1 + +#elif defined(__sun__) || defined(__digital__) + +/* + * Sun or Digital + */ +typedef int khronos_int32_t; +typedef unsigned int khronos_uint32_t; +#if defined(__arch64__) || defined(_LP64) +typedef long int khronos_int64_t; +typedef unsigned long int khronos_uint64_t; +#else +typedef long long int khronos_int64_t; +typedef unsigned long long int khronos_uint64_t; +#endif /* __arch64__ */ +#define KHRONOS_SUPPORT_INT64 1 +#define KHRONOS_SUPPORT_FLOAT 1 + +#elif 0 + +/* + * Hypothetical platform with no float or int64 support + */ +typedef int khronos_int32_t; +typedef unsigned int khronos_uint32_t; +#define KHRONOS_SUPPORT_INT64 0 +#define KHRONOS_SUPPORT_FLOAT 0 + +#else + +/* + * Generic fallback + */ +#include +typedef int32_t khronos_int32_t; +typedef uint32_t khronos_uint32_t; +typedef int64_t khronos_int64_t; +typedef uint64_t khronos_uint64_t; +#define KHRONOS_SUPPORT_INT64 1 +#define KHRONOS_SUPPORT_FLOAT 1 + +#endif + + +/* + * Types that are (so far) the same on all platforms + */ +typedef signed char khronos_int8_t; +typedef unsigned char khronos_uint8_t; +typedef signed short int khronos_int16_t; +typedef unsigned short int khronos_uint16_t; + +/* + * Types that differ between LLP64 and LP64 architectures - in LLP64, + * pointers are 64 bits, but 'long' is still 32 bits. Win64 appears + * to be the only LLP64 architecture in current use. + */ +#ifdef KHRONOS_USE_INTPTR_T +typedef intptr_t khronos_intptr_t; +typedef uintptr_t khronos_uintptr_t; +#elif defined(_WIN64) +typedef signed long long int khronos_intptr_t; +typedef unsigned long long int khronos_uintptr_t; +#else +typedef signed long int khronos_intptr_t; +typedef unsigned long int khronos_uintptr_t; +#endif + +#if defined(_WIN64) +typedef signed long long int khronos_ssize_t; +typedef unsigned long long int khronos_usize_t; +#else +typedef signed long int khronos_ssize_t; +typedef unsigned long int khronos_usize_t; +#endif + +#if KHRONOS_SUPPORT_FLOAT +/* + * Float type + */ +typedef float khronos_float_t; +#endif + +#if KHRONOS_SUPPORT_INT64 +/* Time types + * + * These types can be used to represent a time interval in nanoseconds or + * an absolute Unadjusted System Time. Unadjusted System Time is the number + * of nanoseconds since some arbitrary system event (e.g. since the last + * time the system booted). The Unadjusted System Time is an unsigned + * 64 bit value that wraps back to 0 every 584 years. Time intervals + * may be either signed or unsigned. + */ +typedef khronos_uint64_t khronos_utime_nanoseconds_t; +typedef khronos_int64_t khronos_stime_nanoseconds_t; +#endif + +/* + * Dummy value used to pad enum types to 32 bits. + */ +#ifndef KHRONOS_MAX_ENUM +#define KHRONOS_MAX_ENUM 0x7FFFFFFF +#endif + +/* + * Enumerated boolean type + * + * Values other than zero should be considered to be true. Therefore + * comparisons should not be made against KHRONOS_TRUE. + */ +typedef enum { + KHRONOS_FALSE = 0, + KHRONOS_TRUE = 1, + KHRONOS_BOOLEAN_ENUM_FORCE_SIZE = KHRONOS_MAX_ENUM +} khronos_boolean_enum_t; + +#endif /* __khrplatform_h_ */ + + +#ifndef __eglplatform_h_ +#define __eglplatform_h_ + +/* +** Copyright 2007-2020 The Khronos Group Inc. +** SPDX-License-Identifier: Apache-2.0 +*/ + +/* Platform-specific types and definitions for egl.h + * + * Adopters may modify khrplatform.h and this file to suit their platform. + * You are encouraged to submit all modifications to the Khronos group so that + * they can be included in future versions of this file. Please submit changes + * by filing an issue or pull request on the public Khronos EGL Registry, at + * https://www.github.com/KhronosGroup/EGL-Registry/ + */ + +/*#include */ + +/* Macros used in EGL function prototype declarations. + * + * EGL functions should be prototyped as: + * + * EGLAPI return-type EGLAPIENTRY eglFunction(arguments); + * typedef return-type (EXPAPIENTRYP PFNEGLFUNCTIONPROC) (arguments); + * + * KHRONOS_APICALL and KHRONOS_APIENTRY are defined in KHR/khrplatform.h + */ + +#ifndef EGLAPI +#define EGLAPI KHRONOS_APICALL +#endif + +#ifndef EGLAPIENTRY +#define EGLAPIENTRY KHRONOS_APIENTRY +#endif +#define EGLAPIENTRYP EGLAPIENTRY* + +/* The types NativeDisplayType, NativeWindowType, and NativePixmapType + * are aliases of window-system-dependent types, such as X Display * or + * Windows Device Context. They must be defined in platform-specific + * code below. The EGL-prefixed versions of Native*Type are the same + * types, renamed in EGL 1.3 so all types in the API start with "EGL". + * + * Khronos STRONGLY RECOMMENDS that you use the default definitions + * provided below, since these changes affect both binary and source + * portability of applications using EGL running on different EGL + * implementations. + */ + +#if defined(EGL_NO_PLATFORM_SPECIFIC_TYPES) + +typedef void *EGLNativeDisplayType; +typedef void *EGLNativePixmapType; +typedef void *EGLNativeWindowType; + +#elif defined(_WIN32) || defined(__VC32__) && !defined(__CYGWIN__) && !defined(__SCITECH_SNAP__) /* Win32 and WinCE */ +#ifndef WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN 1 +#endif +#include + +typedef HDC EGLNativeDisplayType; +typedef HBITMAP EGLNativePixmapType; +typedef HWND EGLNativeWindowType; + +#elif defined(__EMSCRIPTEN__) + +typedef int EGLNativeDisplayType; +typedef int EGLNativePixmapType; +typedef int EGLNativeWindowType; + +#elif defined(__WINSCW__) || defined(__SYMBIAN32__) /* Symbian */ + +typedef int EGLNativeDisplayType; +typedef void *EGLNativePixmapType; +typedef void *EGLNativeWindowType; + +#elif defined(WL_EGL_PLATFORM) + +typedef struct wl_display *EGLNativeDisplayType; +typedef struct wl_egl_pixmap *EGLNativePixmapType; +typedef struct wl_egl_window *EGLNativeWindowType; + +#elif defined(__GBM__) + +typedef struct gbm_device *EGLNativeDisplayType; +typedef struct gbm_bo *EGLNativePixmapType; +typedef void *EGLNativeWindowType; + +#elif defined(__ANDROID__) || defined(ANDROID) + +struct ANativeWindow; +struct egl_native_pixmap_t; + +typedef void* EGLNativeDisplayType; +typedef struct egl_native_pixmap_t* EGLNativePixmapType; +typedef struct ANativeWindow* EGLNativeWindowType; + +#elif defined(USE_OZONE) + +typedef intptr_t EGLNativeDisplayType; +typedef intptr_t EGLNativePixmapType; +typedef intptr_t EGLNativeWindowType; + +#elif defined(USE_X11) + +/* X11 (tentative) */ +#include +#include + +typedef Display *EGLNativeDisplayType; +typedef Pixmap EGLNativePixmapType; +typedef Window EGLNativeWindowType; + +#elif defined(__unix__) + +typedef void *EGLNativeDisplayType; +typedef khronos_uintptr_t EGLNativePixmapType; +typedef khronos_uintptr_t EGLNativeWindowType; + +#elif defined(__APPLE__) + +typedef int EGLNativeDisplayType; +typedef void *EGLNativePixmapType; +typedef void *EGLNativeWindowType; + +#elif defined(__HAIKU__) + +#include + +typedef void *EGLNativeDisplayType; +typedef khronos_uintptr_t EGLNativePixmapType; +typedef khronos_uintptr_t EGLNativeWindowType; + +#elif defined(__Fuchsia__) + +typedef void *EGLNativeDisplayType; +typedef khronos_uintptr_t EGLNativePixmapType; +typedef khronos_uintptr_t EGLNativeWindowType; + +#else +#error "Platform not recognized" +#endif + +/* EGL 1.2 types, renamed for consistency in EGL 1.3 */ +typedef EGLNativeDisplayType NativeDisplayType; +typedef EGLNativePixmapType NativePixmapType; +typedef EGLNativeWindowType NativeWindowType; + + +/* Define EGLint. This must be a signed integral type large enough to contain + * all legal attribute names and values passed into and out of EGL, whether + * their type is boolean, bitmask, enumerant (symbolic constant), integer, + * handle, or other. While in general a 32-bit integer will suffice, if + * handles are 64 bit types, then EGLint should be defined as a signed 64-bit + * integer type. + */ +typedef khronos_int32_t EGLint; + + +/* C++ / C typecast macros for special EGL handle values */ +#if defined(__cplusplus) +#define EGL_CAST(type, value) (static_cast(value)) +#else +#define EGL_CAST(type, value) ((type) (value)) +#endif + +#endif /* __eglplatform_h */ + + +#ifndef __egl_h_ +#define __egl_h_ 1 + +#ifdef __cplusplus +extern "C" { +#endif + +/* +** Copyright 2013-2020 The Khronos Group Inc. +** SPDX-License-Identifier: Apache-2.0 +** +** This header is generated from the Khronos EGL XML API Registry. +** The current version of the Registry, generator scripts +** used to make the header, and the header can be found at +** http://www.khronos.org/registry/egl +** +** Khronos $Git commit SHA1: 6fb1daea15 $ on $Git commit date: 2022-05-25 09:41:13 -0600 $ +*/ + +/*#include */ + +#ifndef EGL_EGL_PROTOTYPES +#define EGL_EGL_PROTOTYPES 1 +#endif + +/* Generated on date 20220525 */ + +/* Generated C header for: + * API: egl + * Versions considered: .* + * Versions emitted: .* + * Default extensions included: None + * Additional extensions included: _nomatch_^ + * Extensions removed: _nomatch_^ + */ + +#ifndef EGL_VERSION_1_0 +#define EGL_VERSION_1_0 1 +typedef unsigned int EGLBoolean; +typedef void *EGLDisplay; +/*#include */ +/*#include */ +typedef void *EGLConfig; +typedef void *EGLSurface; +typedef void *EGLContext; +typedef void (*__eglMustCastToProperFunctionPointerType)(void); +#define EGL_ALPHA_SIZE 0x3021 +#define EGL_BAD_ACCESS 0x3002 +#define EGL_BAD_ALLOC 0x3003 +#define EGL_BAD_ATTRIBUTE 0x3004 +#define EGL_BAD_CONFIG 0x3005 +#define EGL_BAD_CONTEXT 0x3006 +#define EGL_BAD_CURRENT_SURFACE 0x3007 +#define EGL_BAD_DISPLAY 0x3008 +#define EGL_BAD_MATCH 0x3009 +#define EGL_BAD_NATIVE_PIXMAP 0x300A +#define EGL_BAD_NATIVE_WINDOW 0x300B +#define EGL_BAD_PARAMETER 0x300C +#define EGL_BAD_SURFACE 0x300D +#define EGL_BLUE_SIZE 0x3022 +#define EGL_BUFFER_SIZE 0x3020 +#define EGL_CONFIG_CAVEAT 0x3027 +#define EGL_CONFIG_ID 0x3028 +#define EGL_CORE_NATIVE_ENGINE 0x305B +#define EGL_DEPTH_SIZE 0x3025 +#define EGL_DONT_CARE EGL_CAST(EGLint,-1) +#define EGL_DRAW 0x3059 +#define EGL_EXTENSIONS 0x3055 +#define EGL_FALSE 0 +#define EGL_GREEN_SIZE 0x3023 +#define EGL_HEIGHT 0x3056 +#define EGL_LARGEST_PBUFFER 0x3058 +#define EGL_LEVEL 0x3029 +#define EGL_MAX_PBUFFER_HEIGHT 0x302A +#define EGL_MAX_PBUFFER_PIXELS 0x302B +#define EGL_MAX_PBUFFER_WIDTH 0x302C +#define EGL_NATIVE_RENDERABLE 0x302D +#define EGL_NATIVE_VISUAL_ID 0x302E +#define EGL_NATIVE_VISUAL_TYPE 0x302F +#define EGL_NONE 0x3038 +#define EGL_NON_CONFORMANT_CONFIG 0x3051 +#define EGL_NOT_INITIALIZED 0x3001 +#define EGL_NO_CONTEXT EGL_CAST(EGLContext,0) +#define EGL_NO_DISPLAY EGL_CAST(EGLDisplay,0) +#define EGL_NO_SURFACE EGL_CAST(EGLSurface,0) +#define EGL_PBUFFER_BIT 0x0001 +#define EGL_PIXMAP_BIT 0x0002 +#define EGL_READ 0x305A +#define EGL_RED_SIZE 0x3024 +#define EGL_SAMPLES 0x3031 +#define EGL_SAMPLE_BUFFERS 0x3032 +#define EGL_SLOW_CONFIG 0x3050 +#define EGL_STENCIL_SIZE 0x3026 +#define EGL_SUCCESS 0x3000 +#define EGL_SURFACE_TYPE 0x3033 +#define EGL_TRANSPARENT_BLUE_VALUE 0x3035 +#define EGL_TRANSPARENT_GREEN_VALUE 0x3036 +#define EGL_TRANSPARENT_RED_VALUE 0x3037 +#define EGL_TRANSPARENT_RGB 0x3052 +#define EGL_TRANSPARENT_TYPE 0x3034 +#define EGL_TRUE 1 +#define EGL_VENDOR 0x3053 +#define EGL_VERSION 0x3054 +#define EGL_WIDTH 0x3057 +#define EGL_WINDOW_BIT 0x0004 +typedef EGLBoolean (EGLAPIENTRYP PFNEGLCHOOSECONFIGPROC) (EGLDisplay dpy, const EGLint *attrib_list, EGLConfig *configs, EGLint config_size, EGLint *num_config); +typedef EGLBoolean (EGLAPIENTRYP PFNEGLCOPYBUFFERSPROC) (EGLDisplay dpy, EGLSurface surface, EGLNativePixmapType target); +typedef EGLContext (EGLAPIENTRYP PFNEGLCREATECONTEXTPROC) (EGLDisplay dpy, EGLConfig config, EGLContext share_context, const EGLint *attrib_list); +typedef EGLSurface (EGLAPIENTRYP PFNEGLCREATEPBUFFERSURFACEPROC) (EGLDisplay dpy, EGLConfig config, const EGLint *attrib_list); +typedef EGLSurface (EGLAPIENTRYP PFNEGLCREATEPIXMAPSURFACEPROC) (EGLDisplay dpy, EGLConfig config, EGLNativePixmapType pixmap, const EGLint *attrib_list); +typedef EGLSurface (EGLAPIENTRYP PFNEGLCREATEWINDOWSURFACEPROC) (EGLDisplay dpy, EGLConfig config, EGLNativeWindowType win, const EGLint *attrib_list); +typedef EGLBoolean (EGLAPIENTRYP PFNEGLDESTROYCONTEXTPROC) (EGLDisplay dpy, EGLContext ctx); +typedef EGLBoolean (EGLAPIENTRYP PFNEGLDESTROYSURFACEPROC) (EGLDisplay dpy, EGLSurface surface); +typedef EGLBoolean (EGLAPIENTRYP PFNEGLGETCONFIGATTRIBPROC) (EGLDisplay dpy, EGLConfig config, EGLint attribute, EGLint *value); +typedef EGLBoolean (EGLAPIENTRYP PFNEGLGETCONFIGSPROC) (EGLDisplay dpy, EGLConfig *configs, EGLint config_size, EGLint *num_config); +typedef EGLDisplay (EGLAPIENTRYP PFNEGLGETCURRENTDISPLAYPROC) (void); +typedef EGLSurface (EGLAPIENTRYP PFNEGLGETCURRENTSURFACEPROC) (EGLint readdraw); +typedef EGLDisplay (EGLAPIENTRYP PFNEGLGETDISPLAYPROC) (EGLNativeDisplayType display_id); +typedef EGLint (EGLAPIENTRYP PFNEGLGETERRORPROC) (void); +typedef __eglMustCastToProperFunctionPointerType (EGLAPIENTRYP PFNEGLGETPROCADDRESSPROC) (const char *procname); +typedef EGLBoolean (EGLAPIENTRYP PFNEGLINITIALIZEPROC) (EGLDisplay dpy, EGLint *major, EGLint *minor); +typedef EGLBoolean (EGLAPIENTRYP PFNEGLMAKECURRENTPROC) (EGLDisplay dpy, EGLSurface draw, EGLSurface read, EGLContext ctx); +typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYCONTEXTPROC) (EGLDisplay dpy, EGLContext ctx, EGLint attribute, EGLint *value); +typedef const char *(EGLAPIENTRYP PFNEGLQUERYSTRINGPROC) (EGLDisplay dpy, EGLint name); +typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYSURFACEPROC) (EGLDisplay dpy, EGLSurface surface, EGLint attribute, EGLint *value); +typedef EGLBoolean (EGLAPIENTRYP PFNEGLSWAPBUFFERSPROC) (EGLDisplay dpy, EGLSurface surface); +typedef EGLBoolean (EGLAPIENTRYP PFNEGLTERMINATEPROC) (EGLDisplay dpy); +typedef EGLBoolean (EGLAPIENTRYP PFNEGLWAITGLPROC) (void); +typedef EGLBoolean (EGLAPIENTRYP PFNEGLWAITNATIVEPROC) (EGLint engine); +#if EGL_EGL_PROTOTYPES +EGLAPI EGLBoolean EGLAPIENTRY eglChooseConfig (EGLDisplay dpy, const EGLint *attrib_list, EGLConfig *configs, EGLint config_size, EGLint *num_config); +EGLAPI EGLBoolean EGLAPIENTRY eglCopyBuffers (EGLDisplay dpy, EGLSurface surface, EGLNativePixmapType target); +EGLAPI EGLContext EGLAPIENTRY eglCreateContext (EGLDisplay dpy, EGLConfig config, EGLContext share_context, const EGLint *attrib_list); +EGLAPI EGLSurface EGLAPIENTRY eglCreatePbufferSurface (EGLDisplay dpy, EGLConfig config, const EGLint *attrib_list); +EGLAPI EGLSurface EGLAPIENTRY eglCreatePixmapSurface (EGLDisplay dpy, EGLConfig config, EGLNativePixmapType pixmap, const EGLint *attrib_list); +EGLAPI EGLSurface EGLAPIENTRY eglCreateWindowSurface (EGLDisplay dpy, EGLConfig config, EGLNativeWindowType win, const EGLint *attrib_list); +EGLAPI EGLBoolean EGLAPIENTRY eglDestroyContext (EGLDisplay dpy, EGLContext ctx); +EGLAPI EGLBoolean EGLAPIENTRY eglDestroySurface (EGLDisplay dpy, EGLSurface surface); +EGLAPI EGLBoolean EGLAPIENTRY eglGetConfigAttrib (EGLDisplay dpy, EGLConfig config, EGLint attribute, EGLint *value); +EGLAPI EGLBoolean EGLAPIENTRY eglGetConfigs (EGLDisplay dpy, EGLConfig *configs, EGLint config_size, EGLint *num_config); +EGLAPI EGLDisplay EGLAPIENTRY eglGetCurrentDisplay (void); +EGLAPI EGLSurface EGLAPIENTRY eglGetCurrentSurface (EGLint readdraw); +EGLAPI EGLDisplay EGLAPIENTRY eglGetDisplay (EGLNativeDisplayType display_id); +EGLAPI EGLint EGLAPIENTRY eglGetError (void); +EGLAPI __eglMustCastToProperFunctionPointerType EGLAPIENTRY eglGetProcAddress (const char *procname); +EGLAPI EGLBoolean EGLAPIENTRY eglInitialize (EGLDisplay dpy, EGLint *major, EGLint *minor); +EGLAPI EGLBoolean EGLAPIENTRY eglMakeCurrent (EGLDisplay dpy, EGLSurface draw, EGLSurface read, EGLContext ctx); +EGLAPI EGLBoolean EGLAPIENTRY eglQueryContext (EGLDisplay dpy, EGLContext ctx, EGLint attribute, EGLint *value); +EGLAPI const char *EGLAPIENTRY eglQueryString (EGLDisplay dpy, EGLint name); +EGLAPI EGLBoolean EGLAPIENTRY eglQuerySurface (EGLDisplay dpy, EGLSurface surface, EGLint attribute, EGLint *value); +EGLAPI EGLBoolean EGLAPIENTRY eglSwapBuffers (EGLDisplay dpy, EGLSurface surface); +EGLAPI EGLBoolean EGLAPIENTRY eglTerminate (EGLDisplay dpy); +EGLAPI EGLBoolean EGLAPIENTRY eglWaitGL (void); +EGLAPI EGLBoolean EGLAPIENTRY eglWaitNative (EGLint engine); +#endif +#endif /* EGL_VERSION_1_0 */ + +#ifndef EGL_VERSION_1_1 +#define EGL_VERSION_1_1 1 +#define EGL_BACK_BUFFER 0x3084 +#define EGL_BIND_TO_TEXTURE_RGB 0x3039 +#define EGL_BIND_TO_TEXTURE_RGBA 0x303A +#define EGL_CONTEXT_LOST 0x300E +#define EGL_MIN_SWAP_INTERVAL 0x303B +#define EGL_MAX_SWAP_INTERVAL 0x303C +#define EGL_MIPMAP_TEXTURE 0x3082 +#define EGL_MIPMAP_LEVEL 0x3083 +#define EGL_NO_TEXTURE 0x305C +#define EGL_TEXTURE_2D 0x305F +#define EGL_TEXTURE_FORMAT 0x3080 +#define EGL_TEXTURE_RGB 0x305D +#define EGL_TEXTURE_RGBA 0x305E +#define EGL_TEXTURE_TARGET 0x3081 +typedef EGLBoolean (EGLAPIENTRYP PFNEGLBINDTEXIMAGEPROC) (EGLDisplay dpy, EGLSurface surface, EGLint buffer); +typedef EGLBoolean (EGLAPIENTRYP PFNEGLRELEASETEXIMAGEPROC) (EGLDisplay dpy, EGLSurface surface, EGLint buffer); +typedef EGLBoolean (EGLAPIENTRYP PFNEGLSURFACEATTRIBPROC) (EGLDisplay dpy, EGLSurface surface, EGLint attribute, EGLint value); +typedef EGLBoolean (EGLAPIENTRYP PFNEGLSWAPINTERVALPROC) (EGLDisplay dpy, EGLint interval); +#if EGL_EGL_PROTOTYPES +EGLAPI EGLBoolean EGLAPIENTRY eglBindTexImage (EGLDisplay dpy, EGLSurface surface, EGLint buffer); +EGLAPI EGLBoolean EGLAPIENTRY eglReleaseTexImage (EGLDisplay dpy, EGLSurface surface, EGLint buffer); +EGLAPI EGLBoolean EGLAPIENTRY eglSurfaceAttrib (EGLDisplay dpy, EGLSurface surface, EGLint attribute, EGLint value); +EGLAPI EGLBoolean EGLAPIENTRY eglSwapInterval (EGLDisplay dpy, EGLint interval); +#endif +#endif /* EGL_VERSION_1_1 */ + +#ifndef EGL_VERSION_1_2 +#define EGL_VERSION_1_2 1 +typedef unsigned int EGLenum; +typedef void *EGLClientBuffer; +#define EGL_ALPHA_FORMAT 0x3088 +#define EGL_ALPHA_FORMAT_NONPRE 0x308B +#define EGL_ALPHA_FORMAT_PRE 0x308C +#define EGL_ALPHA_MASK_SIZE 0x303E +#define EGL_BUFFER_PRESERVED 0x3094 +#define EGL_BUFFER_DESTROYED 0x3095 +#define EGL_CLIENT_APIS 0x308D +#define EGL_COLORSPACE 0x3087 +#define EGL_COLORSPACE_sRGB 0x3089 +#define EGL_COLORSPACE_LINEAR 0x308A +#define EGL_COLOR_BUFFER_TYPE 0x303F +#define EGL_CONTEXT_CLIENT_TYPE 0x3097 +#define EGL_DISPLAY_SCALING 10000 +#define EGL_HORIZONTAL_RESOLUTION 0x3090 +#define EGL_LUMINANCE_BUFFER 0x308F +#define EGL_LUMINANCE_SIZE 0x303D +#define EGL_OPENGL_ES_BIT 0x0001 +#define EGL_OPENVG_BIT 0x0002 +#define EGL_OPENGL_ES_API 0x30A0 +#define EGL_OPENVG_API 0x30A1 +#define EGL_OPENVG_IMAGE 0x3096 +#define EGL_PIXEL_ASPECT_RATIO 0x3092 +#define EGL_RENDERABLE_TYPE 0x3040 +#define EGL_RENDER_BUFFER 0x3086 +#define EGL_RGB_BUFFER 0x308E +#define EGL_SINGLE_BUFFER 0x3085 +#define EGL_SWAP_BEHAVIOR 0x3093 +#define EGL_UNKNOWN EGL_CAST(EGLint,-1) +#define EGL_VERTICAL_RESOLUTION 0x3091 +typedef EGLBoolean (EGLAPIENTRYP PFNEGLBINDAPIPROC) (EGLenum api); +typedef EGLenum (EGLAPIENTRYP PFNEGLQUERYAPIPROC) (void); +typedef EGLSurface (EGLAPIENTRYP PFNEGLCREATEPBUFFERFROMCLIENTBUFFERPROC) (EGLDisplay dpy, EGLenum buftype, EGLClientBuffer buffer, EGLConfig config, const EGLint *attrib_list); +typedef EGLBoolean (EGLAPIENTRYP PFNEGLRELEASETHREADPROC) (void); +typedef EGLBoolean (EGLAPIENTRYP PFNEGLWAITCLIENTPROC) (void); +#if EGL_EGL_PROTOTYPES +EGLAPI EGLBoolean EGLAPIENTRY eglBindAPI (EGLenum api); +EGLAPI EGLenum EGLAPIENTRY eglQueryAPI (void); +EGLAPI EGLSurface EGLAPIENTRY eglCreatePbufferFromClientBuffer (EGLDisplay dpy, EGLenum buftype, EGLClientBuffer buffer, EGLConfig config, const EGLint *attrib_list); +EGLAPI EGLBoolean EGLAPIENTRY eglReleaseThread (void); +EGLAPI EGLBoolean EGLAPIENTRY eglWaitClient (void); +#endif +#endif /* EGL_VERSION_1_2 */ + +#ifndef EGL_VERSION_1_3 +#define EGL_VERSION_1_3 1 +#define EGL_CONFORMANT 0x3042 +#define EGL_CONTEXT_CLIENT_VERSION 0x3098 +#define EGL_MATCH_NATIVE_PIXMAP 0x3041 +#define EGL_OPENGL_ES2_BIT 0x0004 +#define EGL_VG_ALPHA_FORMAT 0x3088 +#define EGL_VG_ALPHA_FORMAT_NONPRE 0x308B +#define EGL_VG_ALPHA_FORMAT_PRE 0x308C +#define EGL_VG_ALPHA_FORMAT_PRE_BIT 0x0040 +#define EGL_VG_COLORSPACE 0x3087 +#define EGL_VG_COLORSPACE_sRGB 0x3089 +#define EGL_VG_COLORSPACE_LINEAR 0x308A +#define EGL_VG_COLORSPACE_LINEAR_BIT 0x0020 +#endif /* EGL_VERSION_1_3 */ + +#ifndef EGL_VERSION_1_4 +#define EGL_VERSION_1_4 1 +#define EGL_DEFAULT_DISPLAY EGL_CAST(EGLNativeDisplayType,0) +#define EGL_MULTISAMPLE_RESOLVE_BOX_BIT 0x0200 +#define EGL_MULTISAMPLE_RESOLVE 0x3099 +#define EGL_MULTISAMPLE_RESOLVE_DEFAULT 0x309A +#define EGL_MULTISAMPLE_RESOLVE_BOX 0x309B +#define EGL_OPENGL_API 0x30A2 +#define EGL_OPENGL_BIT 0x0008 +#define EGL_SWAP_BEHAVIOR_PRESERVED_BIT 0x0400 +typedef EGLContext (EGLAPIENTRYP PFNEGLGETCURRENTCONTEXTPROC) (void); +#if EGL_EGL_PROTOTYPES +EGLAPI EGLContext EGLAPIENTRY eglGetCurrentContext (void); +#endif +#endif /* EGL_VERSION_1_4 */ + +#ifndef EGL_VERSION_1_5 +#define EGL_VERSION_1_5 1 +typedef void *EGLSync; +typedef intptr_t EGLAttrib; +typedef khronos_utime_nanoseconds_t EGLTime; +typedef void *EGLImage; +#define EGL_CONTEXT_MAJOR_VERSION 0x3098 +#define EGL_CONTEXT_MINOR_VERSION 0x30FB +#define EGL_CONTEXT_OPENGL_PROFILE_MASK 0x30FD +#define EGL_CONTEXT_OPENGL_RESET_NOTIFICATION_STRATEGY 0x31BD +#define EGL_NO_RESET_NOTIFICATION 0x31BE +#define EGL_LOSE_CONTEXT_ON_RESET 0x31BF +#define EGL_CONTEXT_OPENGL_CORE_PROFILE_BIT 0x00000001 +#define EGL_CONTEXT_OPENGL_COMPATIBILITY_PROFILE_BIT 0x00000002 +#define EGL_CONTEXT_OPENGL_DEBUG 0x31B0 +#define EGL_CONTEXT_OPENGL_FORWARD_COMPATIBLE 0x31B1 +#define EGL_CONTEXT_OPENGL_ROBUST_ACCESS 0x31B2 +#define EGL_OPENGL_ES3_BIT 0x00000040 +#define EGL_CL_EVENT_HANDLE 0x309C +#define EGL_SYNC_CL_EVENT 0x30FE +#define EGL_SYNC_CL_EVENT_COMPLETE 0x30FF +#define EGL_SYNC_PRIOR_COMMANDS_COMPLETE 0x30F0 +#define EGL_SYNC_TYPE 0x30F7 +#define EGL_SYNC_STATUS 0x30F1 +#define EGL_SYNC_CONDITION 0x30F8 +#define EGL_SIGNALED 0x30F2 +#define EGL_UNSIGNALED 0x30F3 +#define EGL_SYNC_FLUSH_COMMANDS_BIT 0x0001 +#define EGL_FOREVER 0xFFFFFFFFFFFFFFFFull +#define EGL_TIMEOUT_EXPIRED 0x30F5 +#define EGL_CONDITION_SATISFIED 0x30F6 +#define EGL_NO_SYNC EGL_CAST(EGLSync,0) +#define EGL_SYNC_FENCE 0x30F9 +#define EGL_GL_COLORSPACE 0x309D +#define EGL_GL_COLORSPACE_SRGB 0x3089 +#define EGL_GL_COLORSPACE_LINEAR 0x308A +#define EGL_GL_RENDERBUFFER 0x30B9 +#define EGL_GL_TEXTURE_2D 0x30B1 +#define EGL_GL_TEXTURE_LEVEL 0x30BC +#define EGL_GL_TEXTURE_3D 0x30B2 +#define EGL_GL_TEXTURE_ZOFFSET 0x30BD +#define EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_X 0x30B3 +#define EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_X 0x30B4 +#define EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_Y 0x30B5 +#define EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_Y 0x30B6 +#define EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_Z 0x30B7 +#define EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_Z 0x30B8 +#define EGL_IMAGE_PRESERVED 0x30D2 +#define EGL_NO_IMAGE EGL_CAST(EGLImage,0) +typedef EGLSync (EGLAPIENTRYP PFNEGLCREATESYNCPROC) (EGLDisplay dpy, EGLenum type, const EGLAttrib *attrib_list); +typedef EGLBoolean (EGLAPIENTRYP PFNEGLDESTROYSYNCPROC) (EGLDisplay dpy, EGLSync sync); +typedef EGLint (EGLAPIENTRYP PFNEGLCLIENTWAITSYNCPROC) (EGLDisplay dpy, EGLSync sync, EGLint flags, EGLTime timeout); +typedef EGLBoolean (EGLAPIENTRYP PFNEGLGETSYNCATTRIBPROC) (EGLDisplay dpy, EGLSync sync, EGLint attribute, EGLAttrib *value); +typedef EGLImage (EGLAPIENTRYP PFNEGLCREATEIMAGEPROC) (EGLDisplay dpy, EGLContext ctx, EGLenum target, EGLClientBuffer buffer, const EGLAttrib *attrib_list); +typedef EGLBoolean (EGLAPIENTRYP PFNEGLDESTROYIMAGEPROC) (EGLDisplay dpy, EGLImage image); +typedef EGLDisplay (EGLAPIENTRYP PFNEGLGETPLATFORMDISPLAYPROC) (EGLenum platform, void *native_display, const EGLAttrib *attrib_list); +typedef EGLSurface (EGLAPIENTRYP PFNEGLCREATEPLATFORMWINDOWSURFACEPROC) (EGLDisplay dpy, EGLConfig config, void *native_window, const EGLAttrib *attrib_list); +typedef EGLSurface (EGLAPIENTRYP PFNEGLCREATEPLATFORMPIXMAPSURFACEPROC) (EGLDisplay dpy, EGLConfig config, void *native_pixmap, const EGLAttrib *attrib_list); +typedef EGLBoolean (EGLAPIENTRYP PFNEGLWAITSYNCPROC) (EGLDisplay dpy, EGLSync sync, EGLint flags); +#if EGL_EGL_PROTOTYPES +EGLAPI EGLSync EGLAPIENTRY eglCreateSync (EGLDisplay dpy, EGLenum type, const EGLAttrib *attrib_list); +EGLAPI EGLBoolean EGLAPIENTRY eglDestroySync (EGLDisplay dpy, EGLSync sync); +EGLAPI EGLint EGLAPIENTRY eglClientWaitSync (EGLDisplay dpy, EGLSync sync, EGLint flags, EGLTime timeout); +EGLAPI EGLBoolean EGLAPIENTRY eglGetSyncAttrib (EGLDisplay dpy, EGLSync sync, EGLint attribute, EGLAttrib *value); +EGLAPI EGLImage EGLAPIENTRY eglCreateImage (EGLDisplay dpy, EGLContext ctx, EGLenum target, EGLClientBuffer buffer, const EGLAttrib *attrib_list); +EGLAPI EGLBoolean EGLAPIENTRY eglDestroyImage (EGLDisplay dpy, EGLImage image); +EGLAPI EGLDisplay EGLAPIENTRY eglGetPlatformDisplay (EGLenum platform, void *native_display, const EGLAttrib *attrib_list); +EGLAPI EGLSurface EGLAPIENTRY eglCreatePlatformWindowSurface (EGLDisplay dpy, EGLConfig config, void *native_window, const EGLAttrib *attrib_list); +EGLAPI EGLSurface EGLAPIENTRY eglCreatePlatformPixmapSurface (EGLDisplay dpy, EGLConfig config, void *native_pixmap, const EGLAttrib *attrib_list); +EGLAPI EGLBoolean EGLAPIENTRY eglWaitSync (EGLDisplay dpy, EGLSync sync, EGLint flags); +#endif +#endif /* EGL_VERSION_1_5 */ + +#ifdef __cplusplus +} +#endif + +#endif /* __egl_h_ */ + + +#ifndef __eglext_h_ +#define __eglext_h_ 1 + +#ifdef __cplusplus +extern "C" { +#endif + +/* +** Copyright 2013-2020 The Khronos Group Inc. +** SPDX-License-Identifier: Apache-2.0 +** +** This header is generated from the Khronos EGL XML API Registry. +** The current version of the Registry, generator scripts +** used to make the header, and the header can be found at +** http://www.khronos.org/registry/egl +** +** Khronos $Git commit SHA1: 6fb1daea15 $ on $Git commit date: 2022-05-25 09:41:13 -0600 $ +*/ + +/*#include */ + +#define EGL_EGLEXT_VERSION 20220525 + +/* Generated C header for: + * API: egl + * Versions considered: .* + * Versions emitted: _nomatch_^ + * Default extensions included: egl + * Additional extensions included: _nomatch_^ + * Extensions removed: _nomatch_^ + */ + +#ifndef EGL_KHR_cl_event +#define EGL_KHR_cl_event 1 +#define EGL_CL_EVENT_HANDLE_KHR 0x309C +#define EGL_SYNC_CL_EVENT_KHR 0x30FE +#define EGL_SYNC_CL_EVENT_COMPLETE_KHR 0x30FF +#endif /* EGL_KHR_cl_event */ + +#ifndef EGL_KHR_cl_event2 +#define EGL_KHR_cl_event2 1 +typedef void *EGLSyncKHR; +typedef intptr_t EGLAttribKHR; +typedef EGLSyncKHR (EGLAPIENTRYP PFNEGLCREATESYNC64KHRPROC) (EGLDisplay dpy, EGLenum type, const EGLAttribKHR *attrib_list); +#ifdef EGL_EGLEXT_PROTOTYPES +EGLAPI EGLSyncKHR EGLAPIENTRY eglCreateSync64KHR (EGLDisplay dpy, EGLenum type, const EGLAttribKHR *attrib_list); +#endif +#endif /* EGL_KHR_cl_event2 */ + +#ifndef EGL_KHR_client_get_all_proc_addresses +#define EGL_KHR_client_get_all_proc_addresses 1 +#endif /* EGL_KHR_client_get_all_proc_addresses */ + +#ifndef EGL_KHR_config_attribs +#define EGL_KHR_config_attribs 1 +#define EGL_CONFORMANT_KHR 0x3042 +#define EGL_VG_COLORSPACE_LINEAR_BIT_KHR 0x0020 +#define EGL_VG_ALPHA_FORMAT_PRE_BIT_KHR 0x0040 +#endif /* EGL_KHR_config_attribs */ + +#ifndef EGL_KHR_context_flush_control +#define EGL_KHR_context_flush_control 1 +#define EGL_CONTEXT_RELEASE_BEHAVIOR_NONE_KHR 0 +#define EGL_CONTEXT_RELEASE_BEHAVIOR_KHR 0x2097 +#define EGL_CONTEXT_RELEASE_BEHAVIOR_FLUSH_KHR 0x2098 +#endif /* EGL_KHR_context_flush_control */ + +#ifndef EGL_KHR_create_context +#define EGL_KHR_create_context 1 +#define EGL_CONTEXT_MAJOR_VERSION_KHR 0x3098 +#define EGL_CONTEXT_MINOR_VERSION_KHR 0x30FB +#define EGL_CONTEXT_FLAGS_KHR 0x30FC +#define EGL_CONTEXT_OPENGL_PROFILE_MASK_KHR 0x30FD +#define EGL_CONTEXT_OPENGL_RESET_NOTIFICATION_STRATEGY_KHR 0x31BD +#define EGL_NO_RESET_NOTIFICATION_KHR 0x31BE +#define EGL_LOSE_CONTEXT_ON_RESET_KHR 0x31BF +#define EGL_CONTEXT_OPENGL_DEBUG_BIT_KHR 0x00000001 +#define EGL_CONTEXT_OPENGL_FORWARD_COMPATIBLE_BIT_KHR 0x00000002 +#define EGL_CONTEXT_OPENGL_ROBUST_ACCESS_BIT_KHR 0x00000004 +#define EGL_CONTEXT_OPENGL_CORE_PROFILE_BIT_KHR 0x00000001 +#define EGL_CONTEXT_OPENGL_COMPATIBILITY_PROFILE_BIT_KHR 0x00000002 +#define EGL_OPENGL_ES3_BIT_KHR 0x00000040 +#endif /* EGL_KHR_create_context */ + +#ifndef EGL_KHR_create_context_no_error +#define EGL_KHR_create_context_no_error 1 +#define EGL_CONTEXT_OPENGL_NO_ERROR_KHR 0x31B3 +#endif /* EGL_KHR_create_context_no_error */ + +#ifndef EGL_KHR_debug +#define EGL_KHR_debug 1 +typedef void *EGLLabelKHR; +typedef void *EGLObjectKHR; +typedef void (EGLAPIENTRY *EGLDEBUGPROCKHR)(EGLenum error,const char *command,EGLint messageType,EGLLabelKHR threadLabel,EGLLabelKHR objectLabel,const char* message); +#define EGL_OBJECT_THREAD_KHR 0x33B0 +#define EGL_OBJECT_DISPLAY_KHR 0x33B1 +#define EGL_OBJECT_CONTEXT_KHR 0x33B2 +#define EGL_OBJECT_SURFACE_KHR 0x33B3 +#define EGL_OBJECT_IMAGE_KHR 0x33B4 +#define EGL_OBJECT_SYNC_KHR 0x33B5 +#define EGL_OBJECT_STREAM_KHR 0x33B6 +#define EGL_DEBUG_MSG_CRITICAL_KHR 0x33B9 +#define EGL_DEBUG_MSG_ERROR_KHR 0x33BA +#define EGL_DEBUG_MSG_WARN_KHR 0x33BB +#define EGL_DEBUG_MSG_INFO_KHR 0x33BC +#define EGL_DEBUG_CALLBACK_KHR 0x33B8 +typedef EGLint (EGLAPIENTRYP PFNEGLDEBUGMESSAGECONTROLKHRPROC) (EGLDEBUGPROCKHR callback, const EGLAttrib *attrib_list); +typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYDEBUGKHRPROC) (EGLint attribute, EGLAttrib *value); +typedef EGLint (EGLAPIENTRYP PFNEGLLABELOBJECTKHRPROC) (EGLDisplay display, EGLenum objectType, EGLObjectKHR object, EGLLabelKHR label); +#ifdef EGL_EGLEXT_PROTOTYPES +EGLAPI EGLint EGLAPIENTRY eglDebugMessageControlKHR (EGLDEBUGPROCKHR callback, const EGLAttrib *attrib_list); +EGLAPI EGLBoolean EGLAPIENTRY eglQueryDebugKHR (EGLint attribute, EGLAttrib *value); +EGLAPI EGLint EGLAPIENTRY eglLabelObjectKHR (EGLDisplay display, EGLenum objectType, EGLObjectKHR object, EGLLabelKHR label); +#endif +#endif /* EGL_KHR_debug */ + +#ifndef EGL_KHR_display_reference +#define EGL_KHR_display_reference 1 +#define EGL_TRACK_REFERENCES_KHR 0x3352 +typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYDISPLAYATTRIBKHRPROC) (EGLDisplay dpy, EGLint name, EGLAttrib *value); +#ifdef EGL_EGLEXT_PROTOTYPES +EGLAPI EGLBoolean EGLAPIENTRY eglQueryDisplayAttribKHR (EGLDisplay dpy, EGLint name, EGLAttrib *value); +#endif +#endif /* EGL_KHR_display_reference */ + +#ifndef EGL_KHR_fence_sync +#define EGL_KHR_fence_sync 1 +typedef khronos_utime_nanoseconds_t EGLTimeKHR; +#ifdef KHRONOS_SUPPORT_INT64 +#define EGL_SYNC_PRIOR_COMMANDS_COMPLETE_KHR 0x30F0 +#define EGL_SYNC_CONDITION_KHR 0x30F8 +#define EGL_SYNC_FENCE_KHR 0x30F9 +typedef EGLSyncKHR (EGLAPIENTRYP PFNEGLCREATESYNCKHRPROC) (EGLDisplay dpy, EGLenum type, const EGLint *attrib_list); +typedef EGLBoolean (EGLAPIENTRYP PFNEGLDESTROYSYNCKHRPROC) (EGLDisplay dpy, EGLSyncKHR sync); +typedef EGLint (EGLAPIENTRYP PFNEGLCLIENTWAITSYNCKHRPROC) (EGLDisplay dpy, EGLSyncKHR sync, EGLint flags, EGLTimeKHR timeout); +typedef EGLBoolean (EGLAPIENTRYP PFNEGLGETSYNCATTRIBKHRPROC) (EGLDisplay dpy, EGLSyncKHR sync, EGLint attribute, EGLint *value); +#ifdef EGL_EGLEXT_PROTOTYPES +EGLAPI EGLSyncKHR EGLAPIENTRY eglCreateSyncKHR (EGLDisplay dpy, EGLenum type, const EGLint *attrib_list); +EGLAPI EGLBoolean EGLAPIENTRY eglDestroySyncKHR (EGLDisplay dpy, EGLSyncKHR sync); +EGLAPI EGLint EGLAPIENTRY eglClientWaitSyncKHR (EGLDisplay dpy, EGLSyncKHR sync, EGLint flags, EGLTimeKHR timeout); +EGLAPI EGLBoolean EGLAPIENTRY eglGetSyncAttribKHR (EGLDisplay dpy, EGLSyncKHR sync, EGLint attribute, EGLint *value); +#endif +#endif /* KHRONOS_SUPPORT_INT64 */ +#endif /* EGL_KHR_fence_sync */ + +#ifndef EGL_KHR_get_all_proc_addresses +#define EGL_KHR_get_all_proc_addresses 1 +#endif /* EGL_KHR_get_all_proc_addresses */ + +#ifndef EGL_KHR_gl_colorspace +#define EGL_KHR_gl_colorspace 1 +#define EGL_GL_COLORSPACE_KHR 0x309D +#define EGL_GL_COLORSPACE_SRGB_KHR 0x3089 +#define EGL_GL_COLORSPACE_LINEAR_KHR 0x308A +#endif /* EGL_KHR_gl_colorspace */ + +#ifndef EGL_KHR_gl_renderbuffer_image +#define EGL_KHR_gl_renderbuffer_image 1 +#define EGL_GL_RENDERBUFFER_KHR 0x30B9 +#endif /* EGL_KHR_gl_renderbuffer_image */ + +#ifndef EGL_KHR_gl_texture_2D_image +#define EGL_KHR_gl_texture_2D_image 1 +#define EGL_GL_TEXTURE_2D_KHR 0x30B1 +#define EGL_GL_TEXTURE_LEVEL_KHR 0x30BC +#endif /* EGL_KHR_gl_texture_2D_image */ + +#ifndef EGL_KHR_gl_texture_3D_image +#define EGL_KHR_gl_texture_3D_image 1 +#define EGL_GL_TEXTURE_3D_KHR 0x30B2 +#define EGL_GL_TEXTURE_ZOFFSET_KHR 0x30BD +#endif /* EGL_KHR_gl_texture_3D_image */ + +#ifndef EGL_KHR_gl_texture_cubemap_image +#define EGL_KHR_gl_texture_cubemap_image 1 +#define EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_X_KHR 0x30B3 +#define EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_X_KHR 0x30B4 +#define EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_Y_KHR 0x30B5 +#define EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_KHR 0x30B6 +#define EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_Z_KHR 0x30B7 +#define EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_KHR 0x30B8 +#endif /* EGL_KHR_gl_texture_cubemap_image */ + +#ifndef EGL_KHR_image +#define EGL_KHR_image 1 +typedef void *EGLImageKHR; +#define EGL_NATIVE_PIXMAP_KHR 0x30B0 +#define EGL_NO_IMAGE_KHR EGL_CAST(EGLImageKHR,0) +typedef EGLImageKHR (EGLAPIENTRYP PFNEGLCREATEIMAGEKHRPROC) (EGLDisplay dpy, EGLContext ctx, EGLenum target, EGLClientBuffer buffer, const EGLint *attrib_list); +typedef EGLBoolean (EGLAPIENTRYP PFNEGLDESTROYIMAGEKHRPROC) (EGLDisplay dpy, EGLImageKHR image); +#ifdef EGL_EGLEXT_PROTOTYPES +EGLAPI EGLImageKHR EGLAPIENTRY eglCreateImageKHR (EGLDisplay dpy, EGLContext ctx, EGLenum target, EGLClientBuffer buffer, const EGLint *attrib_list); +EGLAPI EGLBoolean EGLAPIENTRY eglDestroyImageKHR (EGLDisplay dpy, EGLImageKHR image); +#endif +#endif /* EGL_KHR_image */ + +#ifndef EGL_KHR_image_base +#define EGL_KHR_image_base 1 +#define EGL_IMAGE_PRESERVED_KHR 0x30D2 +#endif /* EGL_KHR_image_base */ + +#ifndef EGL_KHR_image_pixmap +#define EGL_KHR_image_pixmap 1 +#endif /* EGL_KHR_image_pixmap */ + +#ifndef EGL_KHR_lock_surface +#define EGL_KHR_lock_surface 1 +#define EGL_READ_SURFACE_BIT_KHR 0x0001 +#define EGL_WRITE_SURFACE_BIT_KHR 0x0002 +#define EGL_LOCK_SURFACE_BIT_KHR 0x0080 +#define EGL_OPTIMAL_FORMAT_BIT_KHR 0x0100 +#define EGL_MATCH_FORMAT_KHR 0x3043 +#define EGL_FORMAT_RGB_565_EXACT_KHR 0x30C0 +#define EGL_FORMAT_RGB_565_KHR 0x30C1 +#define EGL_FORMAT_RGBA_8888_EXACT_KHR 0x30C2 +#define EGL_FORMAT_RGBA_8888_KHR 0x30C3 +#define EGL_MAP_PRESERVE_PIXELS_KHR 0x30C4 +#define EGL_LOCK_USAGE_HINT_KHR 0x30C5 +#define EGL_BITMAP_POINTER_KHR 0x30C6 +#define EGL_BITMAP_PITCH_KHR 0x30C7 +#define EGL_BITMAP_ORIGIN_KHR 0x30C8 +#define EGL_BITMAP_PIXEL_RED_OFFSET_KHR 0x30C9 +#define EGL_BITMAP_PIXEL_GREEN_OFFSET_KHR 0x30CA +#define EGL_BITMAP_PIXEL_BLUE_OFFSET_KHR 0x30CB +#define EGL_BITMAP_PIXEL_ALPHA_OFFSET_KHR 0x30CC +#define EGL_BITMAP_PIXEL_LUMINANCE_OFFSET_KHR 0x30CD +#define EGL_LOWER_LEFT_KHR 0x30CE +#define EGL_UPPER_LEFT_KHR 0x30CF +typedef EGLBoolean (EGLAPIENTRYP PFNEGLLOCKSURFACEKHRPROC) (EGLDisplay dpy, EGLSurface surface, const EGLint *attrib_list); +typedef EGLBoolean (EGLAPIENTRYP PFNEGLUNLOCKSURFACEKHRPROC) (EGLDisplay dpy, EGLSurface surface); +#ifdef EGL_EGLEXT_PROTOTYPES +EGLAPI EGLBoolean EGLAPIENTRY eglLockSurfaceKHR (EGLDisplay dpy, EGLSurface surface, const EGLint *attrib_list); +EGLAPI EGLBoolean EGLAPIENTRY eglUnlockSurfaceKHR (EGLDisplay dpy, EGLSurface surface); +#endif +#endif /* EGL_KHR_lock_surface */ + +#ifndef EGL_KHR_lock_surface2 +#define EGL_KHR_lock_surface2 1 +#define EGL_BITMAP_PIXEL_SIZE_KHR 0x3110 +#endif /* EGL_KHR_lock_surface2 */ + +#ifndef EGL_KHR_lock_surface3 +#define EGL_KHR_lock_surface3 1 +typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYSURFACE64KHRPROC) (EGLDisplay dpy, EGLSurface surface, EGLint attribute, EGLAttribKHR *value); +#ifdef EGL_EGLEXT_PROTOTYPES +EGLAPI EGLBoolean EGLAPIENTRY eglQuerySurface64KHR (EGLDisplay dpy, EGLSurface surface, EGLint attribute, EGLAttribKHR *value); +#endif +#endif /* EGL_KHR_lock_surface3 */ + +#ifndef EGL_KHR_mutable_render_buffer +#define EGL_KHR_mutable_render_buffer 1 +#define EGL_MUTABLE_RENDER_BUFFER_BIT_KHR 0x1000 +#endif /* EGL_KHR_mutable_render_buffer */ + +#ifndef EGL_KHR_no_config_context +#define EGL_KHR_no_config_context 1 +#define EGL_NO_CONFIG_KHR EGL_CAST(EGLConfig,0) +#endif /* EGL_KHR_no_config_context */ + +#ifndef EGL_KHR_partial_update +#define EGL_KHR_partial_update 1 +#define EGL_BUFFER_AGE_KHR 0x313D +typedef EGLBoolean (EGLAPIENTRYP PFNEGLSETDAMAGEREGIONKHRPROC) (EGLDisplay dpy, EGLSurface surface, EGLint *rects, EGLint n_rects); +#ifdef EGL_EGLEXT_PROTOTYPES +EGLAPI EGLBoolean EGLAPIENTRY eglSetDamageRegionKHR (EGLDisplay dpy, EGLSurface surface, EGLint *rects, EGLint n_rects); +#endif +#endif /* EGL_KHR_partial_update */ + +#ifndef EGL_KHR_platform_android +#define EGL_KHR_platform_android 1 +#define EGL_PLATFORM_ANDROID_KHR 0x3141 +#endif /* EGL_KHR_platform_android */ + +#ifndef EGL_KHR_platform_gbm +#define EGL_KHR_platform_gbm 1 +#define EGL_PLATFORM_GBM_KHR 0x31D7 +#endif /* EGL_KHR_platform_gbm */ + +#ifndef EGL_KHR_platform_wayland +#define EGL_KHR_platform_wayland 1 +#define EGL_PLATFORM_WAYLAND_KHR 0x31D8 +#endif /* EGL_KHR_platform_wayland */ + +#ifndef EGL_KHR_platform_x11 +#define EGL_KHR_platform_x11 1 +#define EGL_PLATFORM_X11_KHR 0x31D5 +#define EGL_PLATFORM_X11_SCREEN_KHR 0x31D6 +#endif /* EGL_KHR_platform_x11 */ + +#ifndef EGL_KHR_reusable_sync +#define EGL_KHR_reusable_sync 1 +#ifdef KHRONOS_SUPPORT_INT64 +#define EGL_SYNC_STATUS_KHR 0x30F1 +#define EGL_SIGNALED_KHR 0x30F2 +#define EGL_UNSIGNALED_KHR 0x30F3 +#define EGL_TIMEOUT_EXPIRED_KHR 0x30F5 +#define EGL_CONDITION_SATISFIED_KHR 0x30F6 +#define EGL_SYNC_TYPE_KHR 0x30F7 +#define EGL_SYNC_REUSABLE_KHR 0x30FA +#define EGL_SYNC_FLUSH_COMMANDS_BIT_KHR 0x0001 +#define EGL_FOREVER_KHR 0xFFFFFFFFFFFFFFFFull +#define EGL_NO_SYNC_KHR EGL_CAST(EGLSyncKHR,0) +typedef EGLBoolean (EGLAPIENTRYP PFNEGLSIGNALSYNCKHRPROC) (EGLDisplay dpy, EGLSyncKHR sync, EGLenum mode); +#ifdef EGL_EGLEXT_PROTOTYPES +EGLAPI EGLBoolean EGLAPIENTRY eglSignalSyncKHR (EGLDisplay dpy, EGLSyncKHR sync, EGLenum mode); +#endif +#endif /* KHRONOS_SUPPORT_INT64 */ +#endif /* EGL_KHR_reusable_sync */ + +#ifndef EGL_KHR_stream +#define EGL_KHR_stream 1 +typedef void *EGLStreamKHR; +typedef khronos_uint64_t EGLuint64KHR; +#ifdef KHRONOS_SUPPORT_INT64 +#define EGL_NO_STREAM_KHR EGL_CAST(EGLStreamKHR,0) +#define EGL_CONSUMER_LATENCY_USEC_KHR 0x3210 +#define EGL_PRODUCER_FRAME_KHR 0x3212 +#define EGL_CONSUMER_FRAME_KHR 0x3213 +#define EGL_STREAM_STATE_KHR 0x3214 +#define EGL_STREAM_STATE_CREATED_KHR 0x3215 +#define EGL_STREAM_STATE_CONNECTING_KHR 0x3216 +#define EGL_STREAM_STATE_EMPTY_KHR 0x3217 +#define EGL_STREAM_STATE_NEW_FRAME_AVAILABLE_KHR 0x3218 +#define EGL_STREAM_STATE_OLD_FRAME_AVAILABLE_KHR 0x3219 +#define EGL_STREAM_STATE_DISCONNECTED_KHR 0x321A +#define EGL_BAD_STREAM_KHR 0x321B +#define EGL_BAD_STATE_KHR 0x321C +typedef EGLStreamKHR (EGLAPIENTRYP PFNEGLCREATESTREAMKHRPROC) (EGLDisplay dpy, const EGLint *attrib_list); +typedef EGLBoolean (EGLAPIENTRYP PFNEGLDESTROYSTREAMKHRPROC) (EGLDisplay dpy, EGLStreamKHR stream); +typedef EGLBoolean (EGLAPIENTRYP PFNEGLSTREAMATTRIBKHRPROC) (EGLDisplay dpy, EGLStreamKHR stream, EGLenum attribute, EGLint value); +typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYSTREAMKHRPROC) (EGLDisplay dpy, EGLStreamKHR stream, EGLenum attribute, EGLint *value); +typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYSTREAMU64KHRPROC) (EGLDisplay dpy, EGLStreamKHR stream, EGLenum attribute, EGLuint64KHR *value); +#ifdef EGL_EGLEXT_PROTOTYPES +EGLAPI EGLStreamKHR EGLAPIENTRY eglCreateStreamKHR (EGLDisplay dpy, const EGLint *attrib_list); +EGLAPI EGLBoolean EGLAPIENTRY eglDestroyStreamKHR (EGLDisplay dpy, EGLStreamKHR stream); +EGLAPI EGLBoolean EGLAPIENTRY eglStreamAttribKHR (EGLDisplay dpy, EGLStreamKHR stream, EGLenum attribute, EGLint value); +EGLAPI EGLBoolean EGLAPIENTRY eglQueryStreamKHR (EGLDisplay dpy, EGLStreamKHR stream, EGLenum attribute, EGLint *value); +EGLAPI EGLBoolean EGLAPIENTRY eglQueryStreamu64KHR (EGLDisplay dpy, EGLStreamKHR stream, EGLenum attribute, EGLuint64KHR *value); +#endif +#endif /* KHRONOS_SUPPORT_INT64 */ +#endif /* EGL_KHR_stream */ + +#ifndef EGL_KHR_stream_attrib +#define EGL_KHR_stream_attrib 1 +#ifdef KHRONOS_SUPPORT_INT64 +typedef EGLStreamKHR (EGLAPIENTRYP PFNEGLCREATESTREAMATTRIBKHRPROC) (EGLDisplay dpy, const EGLAttrib *attrib_list); +typedef EGLBoolean (EGLAPIENTRYP PFNEGLSETSTREAMATTRIBKHRPROC) (EGLDisplay dpy, EGLStreamKHR stream, EGLenum attribute, EGLAttrib value); +typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYSTREAMATTRIBKHRPROC) (EGLDisplay dpy, EGLStreamKHR stream, EGLenum attribute, EGLAttrib *value); +typedef EGLBoolean (EGLAPIENTRYP PFNEGLSTREAMCONSUMERACQUIREATTRIBKHRPROC) (EGLDisplay dpy, EGLStreamKHR stream, const EGLAttrib *attrib_list); +typedef EGLBoolean (EGLAPIENTRYP PFNEGLSTREAMCONSUMERRELEASEATTRIBKHRPROC) (EGLDisplay dpy, EGLStreamKHR stream, const EGLAttrib *attrib_list); +#ifdef EGL_EGLEXT_PROTOTYPES +EGLAPI EGLStreamKHR EGLAPIENTRY eglCreateStreamAttribKHR (EGLDisplay dpy, const EGLAttrib *attrib_list); +EGLAPI EGLBoolean EGLAPIENTRY eglSetStreamAttribKHR (EGLDisplay dpy, EGLStreamKHR stream, EGLenum attribute, EGLAttrib value); +EGLAPI EGLBoolean EGLAPIENTRY eglQueryStreamAttribKHR (EGLDisplay dpy, EGLStreamKHR stream, EGLenum attribute, EGLAttrib *value); +EGLAPI EGLBoolean EGLAPIENTRY eglStreamConsumerAcquireAttribKHR (EGLDisplay dpy, EGLStreamKHR stream, const EGLAttrib *attrib_list); +EGLAPI EGLBoolean EGLAPIENTRY eglStreamConsumerReleaseAttribKHR (EGLDisplay dpy, EGLStreamKHR stream, const EGLAttrib *attrib_list); +#endif +#endif /* KHRONOS_SUPPORT_INT64 */ +#endif /* EGL_KHR_stream_attrib */ + +#ifndef EGL_KHR_stream_consumer_gltexture +#define EGL_KHR_stream_consumer_gltexture 1 +#ifdef EGL_KHR_stream +#define EGL_CONSUMER_ACQUIRE_TIMEOUT_USEC_KHR 0x321E +typedef EGLBoolean (EGLAPIENTRYP PFNEGLSTREAMCONSUMERGLTEXTUREEXTERNALKHRPROC) (EGLDisplay dpy, EGLStreamKHR stream); +typedef EGLBoolean (EGLAPIENTRYP PFNEGLSTREAMCONSUMERACQUIREKHRPROC) (EGLDisplay dpy, EGLStreamKHR stream); +typedef EGLBoolean (EGLAPIENTRYP PFNEGLSTREAMCONSUMERRELEASEKHRPROC) (EGLDisplay dpy, EGLStreamKHR stream); +#ifdef EGL_EGLEXT_PROTOTYPES +EGLAPI EGLBoolean EGLAPIENTRY eglStreamConsumerGLTextureExternalKHR (EGLDisplay dpy, EGLStreamKHR stream); +EGLAPI EGLBoolean EGLAPIENTRY eglStreamConsumerAcquireKHR (EGLDisplay dpy, EGLStreamKHR stream); +EGLAPI EGLBoolean EGLAPIENTRY eglStreamConsumerReleaseKHR (EGLDisplay dpy, EGLStreamKHR stream); +#endif +#endif /* EGL_KHR_stream */ +#endif /* EGL_KHR_stream_consumer_gltexture */ + +#ifndef EGL_KHR_stream_cross_process_fd +#define EGL_KHR_stream_cross_process_fd 1 +typedef int EGLNativeFileDescriptorKHR; +#ifdef EGL_KHR_stream +#define EGL_NO_FILE_DESCRIPTOR_KHR EGL_CAST(EGLNativeFileDescriptorKHR,-1) +typedef EGLNativeFileDescriptorKHR (EGLAPIENTRYP PFNEGLGETSTREAMFILEDESCRIPTORKHRPROC) (EGLDisplay dpy, EGLStreamKHR stream); +typedef EGLStreamKHR (EGLAPIENTRYP PFNEGLCREATESTREAMFROMFILEDESCRIPTORKHRPROC) (EGLDisplay dpy, EGLNativeFileDescriptorKHR file_descriptor); +#ifdef EGL_EGLEXT_PROTOTYPES +EGLAPI EGLNativeFileDescriptorKHR EGLAPIENTRY eglGetStreamFileDescriptorKHR (EGLDisplay dpy, EGLStreamKHR stream); +EGLAPI EGLStreamKHR EGLAPIENTRY eglCreateStreamFromFileDescriptorKHR (EGLDisplay dpy, EGLNativeFileDescriptorKHR file_descriptor); +#endif +#endif /* EGL_KHR_stream */ +#endif /* EGL_KHR_stream_cross_process_fd */ + +#ifndef EGL_KHR_stream_fifo +#define EGL_KHR_stream_fifo 1 +#ifdef EGL_KHR_stream +#define EGL_STREAM_FIFO_LENGTH_KHR 0x31FC +#define EGL_STREAM_TIME_NOW_KHR 0x31FD +#define EGL_STREAM_TIME_CONSUMER_KHR 0x31FE +#define EGL_STREAM_TIME_PRODUCER_KHR 0x31FF +typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYSTREAMTIMEKHRPROC) (EGLDisplay dpy, EGLStreamKHR stream, EGLenum attribute, EGLTimeKHR *value); +#ifdef EGL_EGLEXT_PROTOTYPES +EGLAPI EGLBoolean EGLAPIENTRY eglQueryStreamTimeKHR (EGLDisplay dpy, EGLStreamKHR stream, EGLenum attribute, EGLTimeKHR *value); +#endif +#endif /* EGL_KHR_stream */ +#endif /* EGL_KHR_stream_fifo */ + +#ifndef EGL_KHR_stream_producer_aldatalocator +#define EGL_KHR_stream_producer_aldatalocator 1 +#ifdef EGL_KHR_stream +#endif /* EGL_KHR_stream */ +#endif /* EGL_KHR_stream_producer_aldatalocator */ + +#ifndef EGL_KHR_stream_producer_eglsurface +#define EGL_KHR_stream_producer_eglsurface 1 +#ifdef EGL_KHR_stream +#define EGL_STREAM_BIT_KHR 0x0800 +typedef EGLSurface (EGLAPIENTRYP PFNEGLCREATESTREAMPRODUCERSURFACEKHRPROC) (EGLDisplay dpy, EGLConfig config, EGLStreamKHR stream, const EGLint *attrib_list); +#ifdef EGL_EGLEXT_PROTOTYPES +EGLAPI EGLSurface EGLAPIENTRY eglCreateStreamProducerSurfaceKHR (EGLDisplay dpy, EGLConfig config, EGLStreamKHR stream, const EGLint *attrib_list); +#endif +#endif /* EGL_KHR_stream */ +#endif /* EGL_KHR_stream_producer_eglsurface */ + +#ifndef EGL_KHR_surfaceless_context +#define EGL_KHR_surfaceless_context 1 +#endif /* EGL_KHR_surfaceless_context */ + +#ifndef EGL_KHR_swap_buffers_with_damage +#define EGL_KHR_swap_buffers_with_damage 1 +typedef EGLBoolean (EGLAPIENTRYP PFNEGLSWAPBUFFERSWITHDAMAGEKHRPROC) (EGLDisplay dpy, EGLSurface surface, const EGLint *rects, EGLint n_rects); +#ifdef EGL_EGLEXT_PROTOTYPES +EGLAPI EGLBoolean EGLAPIENTRY eglSwapBuffersWithDamageKHR (EGLDisplay dpy, EGLSurface surface, const EGLint *rects, EGLint n_rects); +#endif +#endif /* EGL_KHR_swap_buffers_with_damage */ + +#ifndef EGL_KHR_vg_parent_image +#define EGL_KHR_vg_parent_image 1 +#define EGL_VG_PARENT_IMAGE_KHR 0x30BA +#endif /* EGL_KHR_vg_parent_image */ + +#ifndef EGL_KHR_wait_sync +#define EGL_KHR_wait_sync 1 +typedef EGLint (EGLAPIENTRYP PFNEGLWAITSYNCKHRPROC) (EGLDisplay dpy, EGLSyncKHR sync, EGLint flags); +#ifdef EGL_EGLEXT_PROTOTYPES +EGLAPI EGLint EGLAPIENTRY eglWaitSyncKHR (EGLDisplay dpy, EGLSyncKHR sync, EGLint flags); +#endif +#endif /* EGL_KHR_wait_sync */ + +#ifndef EGL_ANDROID_GLES_layers +#define EGL_ANDROID_GLES_layers 1 +#endif /* EGL_ANDROID_GLES_layers */ + +#ifndef EGL_ANDROID_blob_cache +#define EGL_ANDROID_blob_cache 1 +typedef khronos_ssize_t EGLsizeiANDROID; +typedef void (*EGLSetBlobFuncANDROID) (const void *key, EGLsizeiANDROID keySize, const void *value, EGLsizeiANDROID valueSize); +typedef EGLsizeiANDROID (*EGLGetBlobFuncANDROID) (const void *key, EGLsizeiANDROID keySize, void *value, EGLsizeiANDROID valueSize); +typedef void (EGLAPIENTRYP PFNEGLSETBLOBCACHEFUNCSANDROIDPROC) (EGLDisplay dpy, EGLSetBlobFuncANDROID set, EGLGetBlobFuncANDROID get); +#ifdef EGL_EGLEXT_PROTOTYPES +EGLAPI void EGLAPIENTRY eglSetBlobCacheFuncsANDROID (EGLDisplay dpy, EGLSetBlobFuncANDROID set, EGLGetBlobFuncANDROID get); +#endif +#endif /* EGL_ANDROID_blob_cache */ + +#ifndef EGL_ANDROID_create_native_client_buffer +#define EGL_ANDROID_create_native_client_buffer 1 +#define EGL_NATIVE_BUFFER_USAGE_ANDROID 0x3143 +#define EGL_NATIVE_BUFFER_USAGE_PROTECTED_BIT_ANDROID 0x00000001 +#define EGL_NATIVE_BUFFER_USAGE_RENDERBUFFER_BIT_ANDROID 0x00000002 +#define EGL_NATIVE_BUFFER_USAGE_TEXTURE_BIT_ANDROID 0x00000004 +typedef EGLClientBuffer (EGLAPIENTRYP PFNEGLCREATENATIVECLIENTBUFFERANDROIDPROC) (const EGLint *attrib_list); +#ifdef EGL_EGLEXT_PROTOTYPES +EGLAPI EGLClientBuffer EGLAPIENTRY eglCreateNativeClientBufferANDROID (const EGLint *attrib_list); +#endif +#endif /* EGL_ANDROID_create_native_client_buffer */ + +#ifndef EGL_ANDROID_framebuffer_target +#define EGL_ANDROID_framebuffer_target 1 +#define EGL_FRAMEBUFFER_TARGET_ANDROID 0x3147 +#endif /* EGL_ANDROID_framebuffer_target */ + +#ifndef EGL_ANDROID_front_buffer_auto_refresh +#define EGL_ANDROID_front_buffer_auto_refresh 1 +#define EGL_FRONT_BUFFER_AUTO_REFRESH_ANDROID 0x314C +#endif /* EGL_ANDROID_front_buffer_auto_refresh */ + +#ifndef EGL_ANDROID_get_frame_timestamps +#define EGL_ANDROID_get_frame_timestamps 1 +typedef khronos_stime_nanoseconds_t EGLnsecsANDROID; +#define EGL_TIMESTAMP_PENDING_ANDROID EGL_CAST(EGLnsecsANDROID,-2) +#define EGL_TIMESTAMP_INVALID_ANDROID EGL_CAST(EGLnsecsANDROID,-1) +#define EGL_TIMESTAMPS_ANDROID 0x3430 +#define EGL_COMPOSITE_DEADLINE_ANDROID 0x3431 +#define EGL_COMPOSITE_INTERVAL_ANDROID 0x3432 +#define EGL_COMPOSITE_TO_PRESENT_LATENCY_ANDROID 0x3433 +#define EGL_REQUESTED_PRESENT_TIME_ANDROID 0x3434 +#define EGL_RENDERING_COMPLETE_TIME_ANDROID 0x3435 +#define EGL_COMPOSITION_LATCH_TIME_ANDROID 0x3436 +#define EGL_FIRST_COMPOSITION_START_TIME_ANDROID 0x3437 +#define EGL_LAST_COMPOSITION_START_TIME_ANDROID 0x3438 +#define EGL_FIRST_COMPOSITION_GPU_FINISHED_TIME_ANDROID 0x3439 +#define EGL_DISPLAY_PRESENT_TIME_ANDROID 0x343A +#define EGL_DEQUEUE_READY_TIME_ANDROID 0x343B +#define EGL_READS_DONE_TIME_ANDROID 0x343C +typedef EGLBoolean (EGLAPIENTRYP PFNEGLGETCOMPOSITORTIMINGSUPPORTEDANDROIDPROC) (EGLDisplay dpy, EGLSurface surface, EGLint name); +typedef EGLBoolean (EGLAPIENTRYP PFNEGLGETCOMPOSITORTIMINGANDROIDPROC) (EGLDisplay dpy, EGLSurface surface, EGLint numTimestamps, const EGLint *names, EGLnsecsANDROID *values); +typedef EGLBoolean (EGLAPIENTRYP PFNEGLGETNEXTFRAMEIDANDROIDPROC) (EGLDisplay dpy, EGLSurface surface, EGLuint64KHR *frameId); +typedef EGLBoolean (EGLAPIENTRYP PFNEGLGETFRAMETIMESTAMPSUPPORTEDANDROIDPROC) (EGLDisplay dpy, EGLSurface surface, EGLint timestamp); +typedef EGLBoolean (EGLAPIENTRYP PFNEGLGETFRAMETIMESTAMPSANDROIDPROC) (EGLDisplay dpy, EGLSurface surface, EGLuint64KHR frameId, EGLint numTimestamps, const EGLint *timestamps, EGLnsecsANDROID *values); +#ifdef EGL_EGLEXT_PROTOTYPES +EGLAPI EGLBoolean EGLAPIENTRY eglGetCompositorTimingSupportedANDROID (EGLDisplay dpy, EGLSurface surface, EGLint name); +EGLAPI EGLBoolean EGLAPIENTRY eglGetCompositorTimingANDROID (EGLDisplay dpy, EGLSurface surface, EGLint numTimestamps, const EGLint *names, EGLnsecsANDROID *values); +EGLAPI EGLBoolean EGLAPIENTRY eglGetNextFrameIdANDROID (EGLDisplay dpy, EGLSurface surface, EGLuint64KHR *frameId); +EGLAPI EGLBoolean EGLAPIENTRY eglGetFrameTimestampSupportedANDROID (EGLDisplay dpy, EGLSurface surface, EGLint timestamp); +EGLAPI EGLBoolean EGLAPIENTRY eglGetFrameTimestampsANDROID (EGLDisplay dpy, EGLSurface surface, EGLuint64KHR frameId, EGLint numTimestamps, const EGLint *timestamps, EGLnsecsANDROID *values); +#endif +#endif /* EGL_ANDROID_get_frame_timestamps */ + +#ifndef EGL_ANDROID_get_native_client_buffer +#define EGL_ANDROID_get_native_client_buffer 1 +struct AHardwareBuffer; +typedef EGLClientBuffer (EGLAPIENTRYP PFNEGLGETNATIVECLIENTBUFFERANDROIDPROC) (const struct AHardwareBuffer *buffer); +#ifdef EGL_EGLEXT_PROTOTYPES +EGLAPI EGLClientBuffer EGLAPIENTRY eglGetNativeClientBufferANDROID (const struct AHardwareBuffer *buffer); +#endif +#endif /* EGL_ANDROID_get_native_client_buffer */ + +#ifndef EGL_ANDROID_image_native_buffer +#define EGL_ANDROID_image_native_buffer 1 +#define EGL_NATIVE_BUFFER_ANDROID 0x3140 +#endif /* EGL_ANDROID_image_native_buffer */ + +#ifndef EGL_ANDROID_native_fence_sync +#define EGL_ANDROID_native_fence_sync 1 +#define EGL_SYNC_NATIVE_FENCE_ANDROID 0x3144 +#define EGL_SYNC_NATIVE_FENCE_FD_ANDROID 0x3145 +#define EGL_SYNC_NATIVE_FENCE_SIGNALED_ANDROID 0x3146 +#define EGL_NO_NATIVE_FENCE_FD_ANDROID -1 +typedef EGLint (EGLAPIENTRYP PFNEGLDUPNATIVEFENCEFDANDROIDPROC) (EGLDisplay dpy, EGLSyncKHR sync); +#ifdef EGL_EGLEXT_PROTOTYPES +EGLAPI EGLint EGLAPIENTRY eglDupNativeFenceFDANDROID (EGLDisplay dpy, EGLSyncKHR sync); +#endif +#endif /* EGL_ANDROID_native_fence_sync */ + +#ifndef EGL_ANDROID_presentation_time +#define EGL_ANDROID_presentation_time 1 +typedef EGLBoolean (EGLAPIENTRYP PFNEGLPRESENTATIONTIMEANDROIDPROC) (EGLDisplay dpy, EGLSurface surface, EGLnsecsANDROID time); +#ifdef EGL_EGLEXT_PROTOTYPES +EGLAPI EGLBoolean EGLAPIENTRY eglPresentationTimeANDROID (EGLDisplay dpy, EGLSurface surface, EGLnsecsANDROID time); +#endif +#endif /* EGL_ANDROID_presentation_time */ + +#ifndef EGL_ANDROID_recordable +#define EGL_ANDROID_recordable 1 +#define EGL_RECORDABLE_ANDROID 0x3142 +#endif /* EGL_ANDROID_recordable */ + +#ifndef EGL_ANGLE_d3d_share_handle_client_buffer +#define EGL_ANGLE_d3d_share_handle_client_buffer 1 +#define EGL_D3D_TEXTURE_2D_SHARE_HANDLE_ANGLE 0x3200 +#endif /* EGL_ANGLE_d3d_share_handle_client_buffer */ + +#ifndef EGL_ANGLE_device_d3d +#define EGL_ANGLE_device_d3d 1 +#define EGL_D3D9_DEVICE_ANGLE 0x33A0 +#define EGL_D3D11_DEVICE_ANGLE 0x33A1 +#endif /* EGL_ANGLE_device_d3d */ + +#ifndef EGL_ANGLE_query_surface_pointer +#define EGL_ANGLE_query_surface_pointer 1 +typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYSURFACEPOINTERANGLEPROC) (EGLDisplay dpy, EGLSurface surface, EGLint attribute, void **value); +#ifdef EGL_EGLEXT_PROTOTYPES +EGLAPI EGLBoolean EGLAPIENTRY eglQuerySurfacePointerANGLE (EGLDisplay dpy, EGLSurface surface, EGLint attribute, void **value); +#endif +#endif /* EGL_ANGLE_query_surface_pointer */ + +#ifndef EGL_ANGLE_surface_d3d_texture_2d_share_handle +#define EGL_ANGLE_surface_d3d_texture_2d_share_handle 1 +#endif /* EGL_ANGLE_surface_d3d_texture_2d_share_handle */ + +#ifndef EGL_ANGLE_sync_control_rate +#define EGL_ANGLE_sync_control_rate 1 +typedef EGLBoolean (EGLAPIENTRYP PFNEGLGETMSCRATEANGLEPROC) (EGLDisplay dpy, EGLSurface surface, EGLint *numerator, EGLint *denominator); +#ifdef EGL_EGLEXT_PROTOTYPES +EGLAPI EGLBoolean EGLAPIENTRY eglGetMscRateANGLE (EGLDisplay dpy, EGLSurface surface, EGLint *numerator, EGLint *denominator); +#endif +#endif /* EGL_ANGLE_sync_control_rate */ + +#ifndef EGL_ANGLE_window_fixed_size +#define EGL_ANGLE_window_fixed_size 1 +#define EGL_FIXED_SIZE_ANGLE 0x3201 +#endif /* EGL_ANGLE_window_fixed_size */ + +#ifndef EGL_ARM_image_format +#define EGL_ARM_image_format 1 +#define EGL_COLOR_COMPONENT_TYPE_UNSIGNED_INTEGER_ARM 0x3287 +#define EGL_COLOR_COMPONENT_TYPE_INTEGER_ARM 0x3288 +#endif /* EGL_ARM_image_format */ + +#ifndef EGL_ARM_implicit_external_sync +#define EGL_ARM_implicit_external_sync 1 +#define EGL_SYNC_PRIOR_COMMANDS_IMPLICIT_EXTERNAL_ARM 0x328A +#endif /* EGL_ARM_implicit_external_sync */ + +#ifndef EGL_ARM_pixmap_multisample_discard +#define EGL_ARM_pixmap_multisample_discard 1 +#define EGL_DISCARD_SAMPLES_ARM 0x3286 +#endif /* EGL_ARM_pixmap_multisample_discard */ + +#ifndef EGL_EXT_bind_to_front +#define EGL_EXT_bind_to_front 1 +#define EGL_FRONT_BUFFER_EXT 0x3464 +#endif /* EGL_EXT_bind_to_front */ + +#ifndef EGL_EXT_buffer_age +#define EGL_EXT_buffer_age 1 +#define EGL_BUFFER_AGE_EXT 0x313D +#endif /* EGL_EXT_buffer_age */ + +#ifndef EGL_EXT_client_extensions +#define EGL_EXT_client_extensions 1 +#endif /* EGL_EXT_client_extensions */ + +#ifndef EGL_EXT_client_sync +#define EGL_EXT_client_sync 1 +#define EGL_SYNC_CLIENT_EXT 0x3364 +#define EGL_SYNC_CLIENT_SIGNAL_EXT 0x3365 +typedef EGLBoolean (EGLAPIENTRYP PFNEGLCLIENTSIGNALSYNCEXTPROC) (EGLDisplay dpy, EGLSync sync, const EGLAttrib *attrib_list); +#ifdef EGL_EGLEXT_PROTOTYPES +EGLAPI EGLBoolean EGLAPIENTRY eglClientSignalSyncEXT (EGLDisplay dpy, EGLSync sync, const EGLAttrib *attrib_list); +#endif +#endif /* EGL_EXT_client_sync */ + +#ifndef EGL_EXT_compositor +#define EGL_EXT_compositor 1 +#define EGL_PRIMARY_COMPOSITOR_CONTEXT_EXT 0x3460 +#define EGL_EXTERNAL_REF_ID_EXT 0x3461 +#define EGL_COMPOSITOR_DROP_NEWEST_FRAME_EXT 0x3462 +#define EGL_COMPOSITOR_KEEP_NEWEST_FRAME_EXT 0x3463 +typedef EGLBoolean (EGLAPIENTRYP PFNEGLCOMPOSITORSETCONTEXTLISTEXTPROC) (const EGLint *external_ref_ids, EGLint num_entries); +typedef EGLBoolean (EGLAPIENTRYP PFNEGLCOMPOSITORSETCONTEXTATTRIBUTESEXTPROC) (EGLint external_ref_id, const EGLint *context_attributes, EGLint num_entries); +typedef EGLBoolean (EGLAPIENTRYP PFNEGLCOMPOSITORSETWINDOWLISTEXTPROC) (EGLint external_ref_id, const EGLint *external_win_ids, EGLint num_entries); +typedef EGLBoolean (EGLAPIENTRYP PFNEGLCOMPOSITORSETWINDOWATTRIBUTESEXTPROC) (EGLint external_win_id, const EGLint *window_attributes, EGLint num_entries); +typedef EGLBoolean (EGLAPIENTRYP PFNEGLCOMPOSITORBINDTEXWINDOWEXTPROC) (EGLint external_win_id); +typedef EGLBoolean (EGLAPIENTRYP PFNEGLCOMPOSITORSETSIZEEXTPROC) (EGLint external_win_id, EGLint width, EGLint height); +typedef EGLBoolean (EGLAPIENTRYP PFNEGLCOMPOSITORSWAPPOLICYEXTPROC) (EGLint external_win_id, EGLint policy); +#ifdef EGL_EGLEXT_PROTOTYPES +EGLAPI EGLBoolean EGLAPIENTRY eglCompositorSetContextListEXT (const EGLint *external_ref_ids, EGLint num_entries); +EGLAPI EGLBoolean EGLAPIENTRY eglCompositorSetContextAttributesEXT (EGLint external_ref_id, const EGLint *context_attributes, EGLint num_entries); +EGLAPI EGLBoolean EGLAPIENTRY eglCompositorSetWindowListEXT (EGLint external_ref_id, const EGLint *external_win_ids, EGLint num_entries); +EGLAPI EGLBoolean EGLAPIENTRY eglCompositorSetWindowAttributesEXT (EGLint external_win_id, const EGLint *window_attributes, EGLint num_entries); +EGLAPI EGLBoolean EGLAPIENTRY eglCompositorBindTexWindowEXT (EGLint external_win_id); +EGLAPI EGLBoolean EGLAPIENTRY eglCompositorSetSizeEXT (EGLint external_win_id, EGLint width, EGLint height); +EGLAPI EGLBoolean EGLAPIENTRY eglCompositorSwapPolicyEXT (EGLint external_win_id, EGLint policy); +#endif +#endif /* EGL_EXT_compositor */ + +#ifndef EGL_EXT_config_select_group +#define EGL_EXT_config_select_group 1 +#define EGL_CONFIG_SELECT_GROUP_EXT 0x34C0 +#endif /* EGL_EXT_config_select_group */ + +#ifndef EGL_EXT_create_context_robustness +#define EGL_EXT_create_context_robustness 1 +#define EGL_CONTEXT_OPENGL_ROBUST_ACCESS_EXT 0x30BF +#define EGL_CONTEXT_OPENGL_RESET_NOTIFICATION_STRATEGY_EXT 0x3138 +#define EGL_NO_RESET_NOTIFICATION_EXT 0x31BE +#define EGL_LOSE_CONTEXT_ON_RESET_EXT 0x31BF +#endif /* EGL_EXT_create_context_robustness */ + +#ifndef EGL_EXT_device_base +#define EGL_EXT_device_base 1 +typedef void *EGLDeviceEXT; +#define EGL_NO_DEVICE_EXT EGL_CAST(EGLDeviceEXT,0) +#define EGL_BAD_DEVICE_EXT 0x322B +#define EGL_DEVICE_EXT 0x322C +typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYDEVICEATTRIBEXTPROC) (EGLDeviceEXT device, EGLint attribute, EGLAttrib *value); +typedef const char *(EGLAPIENTRYP PFNEGLQUERYDEVICESTRINGEXTPROC) (EGLDeviceEXT device, EGLint name); +typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYDEVICESEXTPROC) (EGLint max_devices, EGLDeviceEXT *devices, EGLint *num_devices); +typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYDISPLAYATTRIBEXTPROC) (EGLDisplay dpy, EGLint attribute, EGLAttrib *value); +#ifdef EGL_EGLEXT_PROTOTYPES +EGLAPI EGLBoolean EGLAPIENTRY eglQueryDeviceAttribEXT (EGLDeviceEXT device, EGLint attribute, EGLAttrib *value); +EGLAPI const char *EGLAPIENTRY eglQueryDeviceStringEXT (EGLDeviceEXT device, EGLint name); +EGLAPI EGLBoolean EGLAPIENTRY eglQueryDevicesEXT (EGLint max_devices, EGLDeviceEXT *devices, EGLint *num_devices); +EGLAPI EGLBoolean EGLAPIENTRY eglQueryDisplayAttribEXT (EGLDisplay dpy, EGLint attribute, EGLAttrib *value); +#endif +#endif /* EGL_EXT_device_base */ + +#ifndef EGL_EXT_device_drm +#define EGL_EXT_device_drm 1 +#define EGL_DRM_DEVICE_FILE_EXT 0x3233 +#define EGL_DRM_MASTER_FD_EXT 0x333C +#endif /* EGL_EXT_device_drm */ + +#ifndef EGL_EXT_device_drm_render_node +#define EGL_EXT_device_drm_render_node 1 +#define EGL_DRM_RENDER_NODE_FILE_EXT 0x3377 +#endif /* EGL_EXT_device_drm_render_node */ + +#ifndef EGL_EXT_device_enumeration +#define EGL_EXT_device_enumeration 1 +#endif /* EGL_EXT_device_enumeration */ + +#ifndef EGL_EXT_device_openwf +#define EGL_EXT_device_openwf 1 +#define EGL_OPENWF_DEVICE_ID_EXT 0x3237 +#define EGL_OPENWF_DEVICE_EXT 0x333D +#endif /* EGL_EXT_device_openwf */ + +#ifndef EGL_EXT_device_persistent_id +#define EGL_EXT_device_persistent_id 1 +#define EGL_DEVICE_UUID_EXT 0x335C +#define EGL_DRIVER_UUID_EXT 0x335D +#define EGL_DRIVER_NAME_EXT 0x335E +typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYDEVICEBINARYEXTPROC) (EGLDeviceEXT device, EGLint name, EGLint max_size, void *value, EGLint *size); +#ifdef EGL_EGLEXT_PROTOTYPES +EGLAPI EGLBoolean EGLAPIENTRY eglQueryDeviceBinaryEXT (EGLDeviceEXT device, EGLint name, EGLint max_size, void *value, EGLint *size); +#endif +#endif /* EGL_EXT_device_persistent_id */ + +#ifndef EGL_EXT_device_query +#define EGL_EXT_device_query 1 +#endif /* EGL_EXT_device_query */ + +#ifndef EGL_EXT_device_query_name +#define EGL_EXT_device_query_name 1 +#define EGL_RENDERER_EXT 0x335F +#endif /* EGL_EXT_device_query_name */ + +#ifndef EGL_EXT_explicit_device +#define EGL_EXT_explicit_device 1 +#endif /* EGL_EXT_explicit_device */ + +#ifndef EGL_EXT_gl_colorspace_bt2020_linear +#define EGL_EXT_gl_colorspace_bt2020_linear 1 +#define EGL_GL_COLORSPACE_BT2020_LINEAR_EXT 0x333F +#endif /* EGL_EXT_gl_colorspace_bt2020_linear */ + +#ifndef EGL_EXT_gl_colorspace_bt2020_pq +#define EGL_EXT_gl_colorspace_bt2020_pq 1 +#define EGL_GL_COLORSPACE_BT2020_PQ_EXT 0x3340 +#endif /* EGL_EXT_gl_colorspace_bt2020_pq */ + +#ifndef EGL_EXT_gl_colorspace_display_p3 +#define EGL_EXT_gl_colorspace_display_p3 1 +#define EGL_GL_COLORSPACE_DISPLAY_P3_EXT 0x3363 +#endif /* EGL_EXT_gl_colorspace_display_p3 */ + +#ifndef EGL_EXT_gl_colorspace_display_p3_linear +#define EGL_EXT_gl_colorspace_display_p3_linear 1 +#define EGL_GL_COLORSPACE_DISPLAY_P3_LINEAR_EXT 0x3362 +#endif /* EGL_EXT_gl_colorspace_display_p3_linear */ + +#ifndef EGL_EXT_gl_colorspace_display_p3_passthrough +#define EGL_EXT_gl_colorspace_display_p3_passthrough 1 +#define EGL_GL_COLORSPACE_DISPLAY_P3_PASSTHROUGH_EXT 0x3490 +#endif /* EGL_EXT_gl_colorspace_display_p3_passthrough */ + +#ifndef EGL_EXT_gl_colorspace_scrgb +#define EGL_EXT_gl_colorspace_scrgb 1 +#define EGL_GL_COLORSPACE_SCRGB_EXT 0x3351 +#endif /* EGL_EXT_gl_colorspace_scrgb */ + +#ifndef EGL_EXT_gl_colorspace_scrgb_linear +#define EGL_EXT_gl_colorspace_scrgb_linear 1 +#define EGL_GL_COLORSPACE_SCRGB_LINEAR_EXT 0x3350 +#endif /* EGL_EXT_gl_colorspace_scrgb_linear */ + +#ifndef EGL_EXT_image_dma_buf_import +#define EGL_EXT_image_dma_buf_import 1 +#define EGL_LINUX_DMA_BUF_EXT 0x3270 +#define EGL_LINUX_DRM_FOURCC_EXT 0x3271 +#define EGL_DMA_BUF_PLANE0_FD_EXT 0x3272 +#define EGL_DMA_BUF_PLANE0_OFFSET_EXT 0x3273 +#define EGL_DMA_BUF_PLANE0_PITCH_EXT 0x3274 +#define EGL_DMA_BUF_PLANE1_FD_EXT 0x3275 +#define EGL_DMA_BUF_PLANE1_OFFSET_EXT 0x3276 +#define EGL_DMA_BUF_PLANE1_PITCH_EXT 0x3277 +#define EGL_DMA_BUF_PLANE2_FD_EXT 0x3278 +#define EGL_DMA_BUF_PLANE2_OFFSET_EXT 0x3279 +#define EGL_DMA_BUF_PLANE2_PITCH_EXT 0x327A +#define EGL_YUV_COLOR_SPACE_HINT_EXT 0x327B +#define EGL_SAMPLE_RANGE_HINT_EXT 0x327C +#define EGL_YUV_CHROMA_HORIZONTAL_SITING_HINT_EXT 0x327D +#define EGL_YUV_CHROMA_VERTICAL_SITING_HINT_EXT 0x327E +#define EGL_ITU_REC601_EXT 0x327F +#define EGL_ITU_REC709_EXT 0x3280 +#define EGL_ITU_REC2020_EXT 0x3281 +#define EGL_YUV_FULL_RANGE_EXT 0x3282 +#define EGL_YUV_NARROW_RANGE_EXT 0x3283 +#define EGL_YUV_CHROMA_SITING_0_EXT 0x3284 +#define EGL_YUV_CHROMA_SITING_0_5_EXT 0x3285 +#endif /* EGL_EXT_image_dma_buf_import */ + +#ifndef EGL_EXT_image_dma_buf_import_modifiers +#define EGL_EXT_image_dma_buf_import_modifiers 1 +#define EGL_DMA_BUF_PLANE3_FD_EXT 0x3440 +#define EGL_DMA_BUF_PLANE3_OFFSET_EXT 0x3441 +#define EGL_DMA_BUF_PLANE3_PITCH_EXT 0x3442 +#define EGL_DMA_BUF_PLANE0_MODIFIER_LO_EXT 0x3443 +#define EGL_DMA_BUF_PLANE0_MODIFIER_HI_EXT 0x3444 +#define EGL_DMA_BUF_PLANE1_MODIFIER_LO_EXT 0x3445 +#define EGL_DMA_BUF_PLANE1_MODIFIER_HI_EXT 0x3446 +#define EGL_DMA_BUF_PLANE2_MODIFIER_LO_EXT 0x3447 +#define EGL_DMA_BUF_PLANE2_MODIFIER_HI_EXT 0x3448 +#define EGL_DMA_BUF_PLANE3_MODIFIER_LO_EXT 0x3449 +#define EGL_DMA_BUF_PLANE3_MODIFIER_HI_EXT 0x344A +typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYDMABUFFORMATSEXTPROC) (EGLDisplay dpy, EGLint max_formats, EGLint *formats, EGLint *num_formats); +typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYDMABUFMODIFIERSEXTPROC) (EGLDisplay dpy, EGLint format, EGLint max_modifiers, EGLuint64KHR *modifiers, EGLBoolean *external_only, EGLint *num_modifiers); +#ifdef EGL_EGLEXT_PROTOTYPES +EGLAPI EGLBoolean EGLAPIENTRY eglQueryDmaBufFormatsEXT (EGLDisplay dpy, EGLint max_formats, EGLint *formats, EGLint *num_formats); +EGLAPI EGLBoolean EGLAPIENTRY eglQueryDmaBufModifiersEXT (EGLDisplay dpy, EGLint format, EGLint max_modifiers, EGLuint64KHR *modifiers, EGLBoolean *external_only, EGLint *num_modifiers); +#endif +#endif /* EGL_EXT_image_dma_buf_import_modifiers */ + +#ifndef EGL_EXT_image_gl_colorspace +#define EGL_EXT_image_gl_colorspace 1 +#define EGL_GL_COLORSPACE_DEFAULT_EXT 0x314D +#endif /* EGL_EXT_image_gl_colorspace */ + +#ifndef EGL_EXT_image_implicit_sync_control +#define EGL_EXT_image_implicit_sync_control 1 +#define EGL_IMPORT_SYNC_TYPE_EXT 0x3470 +#define EGL_IMPORT_IMPLICIT_SYNC_EXT 0x3471 +#define EGL_IMPORT_EXPLICIT_SYNC_EXT 0x3472 +#endif /* EGL_EXT_image_implicit_sync_control */ + +#ifndef EGL_EXT_multiview_window +#define EGL_EXT_multiview_window 1 +#define EGL_MULTIVIEW_VIEW_COUNT_EXT 0x3134 +#endif /* EGL_EXT_multiview_window */ + +#ifndef EGL_EXT_output_base +#define EGL_EXT_output_base 1 +typedef void *EGLOutputLayerEXT; +typedef void *EGLOutputPortEXT; +#define EGL_NO_OUTPUT_LAYER_EXT EGL_CAST(EGLOutputLayerEXT,0) +#define EGL_NO_OUTPUT_PORT_EXT EGL_CAST(EGLOutputPortEXT,0) +#define EGL_BAD_OUTPUT_LAYER_EXT 0x322D +#define EGL_BAD_OUTPUT_PORT_EXT 0x322E +#define EGL_SWAP_INTERVAL_EXT 0x322F +typedef EGLBoolean (EGLAPIENTRYP PFNEGLGETOUTPUTLAYERSEXTPROC) (EGLDisplay dpy, const EGLAttrib *attrib_list, EGLOutputLayerEXT *layers, EGLint max_layers, EGLint *num_layers); +typedef EGLBoolean (EGLAPIENTRYP PFNEGLGETOUTPUTPORTSEXTPROC) (EGLDisplay dpy, const EGLAttrib *attrib_list, EGLOutputPortEXT *ports, EGLint max_ports, EGLint *num_ports); +typedef EGLBoolean (EGLAPIENTRYP PFNEGLOUTPUTLAYERATTRIBEXTPROC) (EGLDisplay dpy, EGLOutputLayerEXT layer, EGLint attribute, EGLAttrib value); +typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYOUTPUTLAYERATTRIBEXTPROC) (EGLDisplay dpy, EGLOutputLayerEXT layer, EGLint attribute, EGLAttrib *value); +typedef const char *(EGLAPIENTRYP PFNEGLQUERYOUTPUTLAYERSTRINGEXTPROC) (EGLDisplay dpy, EGLOutputLayerEXT layer, EGLint name); +typedef EGLBoolean (EGLAPIENTRYP PFNEGLOUTPUTPORTATTRIBEXTPROC) (EGLDisplay dpy, EGLOutputPortEXT port, EGLint attribute, EGLAttrib value); +typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYOUTPUTPORTATTRIBEXTPROC) (EGLDisplay dpy, EGLOutputPortEXT port, EGLint attribute, EGLAttrib *value); +typedef const char *(EGLAPIENTRYP PFNEGLQUERYOUTPUTPORTSTRINGEXTPROC) (EGLDisplay dpy, EGLOutputPortEXT port, EGLint name); +#ifdef EGL_EGLEXT_PROTOTYPES +EGLAPI EGLBoolean EGLAPIENTRY eglGetOutputLayersEXT (EGLDisplay dpy, const EGLAttrib *attrib_list, EGLOutputLayerEXT *layers, EGLint max_layers, EGLint *num_layers); +EGLAPI EGLBoolean EGLAPIENTRY eglGetOutputPortsEXT (EGLDisplay dpy, const EGLAttrib *attrib_list, EGLOutputPortEXT *ports, EGLint max_ports, EGLint *num_ports); +EGLAPI EGLBoolean EGLAPIENTRY eglOutputLayerAttribEXT (EGLDisplay dpy, EGLOutputLayerEXT layer, EGLint attribute, EGLAttrib value); +EGLAPI EGLBoolean EGLAPIENTRY eglQueryOutputLayerAttribEXT (EGLDisplay dpy, EGLOutputLayerEXT layer, EGLint attribute, EGLAttrib *value); +EGLAPI const char *EGLAPIENTRY eglQueryOutputLayerStringEXT (EGLDisplay dpy, EGLOutputLayerEXT layer, EGLint name); +EGLAPI EGLBoolean EGLAPIENTRY eglOutputPortAttribEXT (EGLDisplay dpy, EGLOutputPortEXT port, EGLint attribute, EGLAttrib value); +EGLAPI EGLBoolean EGLAPIENTRY eglQueryOutputPortAttribEXT (EGLDisplay dpy, EGLOutputPortEXT port, EGLint attribute, EGLAttrib *value); +EGLAPI const char *EGLAPIENTRY eglQueryOutputPortStringEXT (EGLDisplay dpy, EGLOutputPortEXT port, EGLint name); +#endif +#endif /* EGL_EXT_output_base */ + +#ifndef EGL_EXT_output_drm +#define EGL_EXT_output_drm 1 +#define EGL_DRM_CRTC_EXT 0x3234 +#define EGL_DRM_PLANE_EXT 0x3235 +#define EGL_DRM_CONNECTOR_EXT 0x3236 +#endif /* EGL_EXT_output_drm */ + +#ifndef EGL_EXT_output_openwf +#define EGL_EXT_output_openwf 1 +#define EGL_OPENWF_PIPELINE_ID_EXT 0x3238 +#define EGL_OPENWF_PORT_ID_EXT 0x3239 +#endif /* EGL_EXT_output_openwf */ + +#ifndef EGL_EXT_pixel_format_float +#define EGL_EXT_pixel_format_float 1 +#define EGL_COLOR_COMPONENT_TYPE_EXT 0x3339 +#define EGL_COLOR_COMPONENT_TYPE_FIXED_EXT 0x333A +#define EGL_COLOR_COMPONENT_TYPE_FLOAT_EXT 0x333B +#endif /* EGL_EXT_pixel_format_float */ + +#ifndef EGL_EXT_platform_base +#define EGL_EXT_platform_base 1 +typedef EGLDisplay (EGLAPIENTRYP PFNEGLGETPLATFORMDISPLAYEXTPROC) (EGLenum platform, void *native_display, const EGLint *attrib_list); +typedef EGLSurface (EGLAPIENTRYP PFNEGLCREATEPLATFORMWINDOWSURFACEEXTPROC) (EGLDisplay dpy, EGLConfig config, void *native_window, const EGLint *attrib_list); +typedef EGLSurface (EGLAPIENTRYP PFNEGLCREATEPLATFORMPIXMAPSURFACEEXTPROC) (EGLDisplay dpy, EGLConfig config, void *native_pixmap, const EGLint *attrib_list); +#ifdef EGL_EGLEXT_PROTOTYPES +EGLAPI EGLDisplay EGLAPIENTRY eglGetPlatformDisplayEXT (EGLenum platform, void *native_display, const EGLint *attrib_list); +EGLAPI EGLSurface EGLAPIENTRY eglCreatePlatformWindowSurfaceEXT (EGLDisplay dpy, EGLConfig config, void *native_window, const EGLint *attrib_list); +EGLAPI EGLSurface EGLAPIENTRY eglCreatePlatformPixmapSurfaceEXT (EGLDisplay dpy, EGLConfig config, void *native_pixmap, const EGLint *attrib_list); +#endif +#endif /* EGL_EXT_platform_base */ + +#ifndef EGL_EXT_platform_device +#define EGL_EXT_platform_device 1 +#define EGL_PLATFORM_DEVICE_EXT 0x313F +#endif /* EGL_EXT_platform_device */ + +#ifndef EGL_EXT_platform_wayland +#define EGL_EXT_platform_wayland 1 +#define EGL_PLATFORM_WAYLAND_EXT 0x31D8 +#endif /* EGL_EXT_platform_wayland */ + +#ifndef EGL_EXT_platform_x11 +#define EGL_EXT_platform_x11 1 +#define EGL_PLATFORM_X11_EXT 0x31D5 +#define EGL_PLATFORM_X11_SCREEN_EXT 0x31D6 +#endif /* EGL_EXT_platform_x11 */ + +#ifndef EGL_EXT_platform_xcb +#define EGL_EXT_platform_xcb 1 +#define EGL_PLATFORM_XCB_EXT 0x31DC +#define EGL_PLATFORM_XCB_SCREEN_EXT 0x31DE +#endif /* EGL_EXT_platform_xcb */ + +#ifndef EGL_EXT_present_opaque +#define EGL_EXT_present_opaque 1 +#define EGL_PRESENT_OPAQUE_EXT 0x31DF +#endif /* EGL_EXT_present_opaque */ + +#ifndef EGL_EXT_protected_content +#define EGL_EXT_protected_content 1 +#define EGL_PROTECTED_CONTENT_EXT 0x32C0 +#endif /* EGL_EXT_protected_content */ + +#ifndef EGL_EXT_protected_surface +#define EGL_EXT_protected_surface 1 +#endif /* EGL_EXT_protected_surface */ + +#ifndef EGL_EXT_stream_consumer_egloutput +#define EGL_EXT_stream_consumer_egloutput 1 +typedef EGLBoolean (EGLAPIENTRYP PFNEGLSTREAMCONSUMEROUTPUTEXTPROC) (EGLDisplay dpy, EGLStreamKHR stream, EGLOutputLayerEXT layer); +#ifdef EGL_EGLEXT_PROTOTYPES +EGLAPI EGLBoolean EGLAPIENTRY eglStreamConsumerOutputEXT (EGLDisplay dpy, EGLStreamKHR stream, EGLOutputLayerEXT layer); +#endif +#endif /* EGL_EXT_stream_consumer_egloutput */ + +#ifndef EGL_EXT_surface_CTA861_3_metadata +#define EGL_EXT_surface_CTA861_3_metadata 1 +#define EGL_CTA861_3_MAX_CONTENT_LIGHT_LEVEL_EXT 0x3360 +#define EGL_CTA861_3_MAX_FRAME_AVERAGE_LEVEL_EXT 0x3361 +#endif /* EGL_EXT_surface_CTA861_3_metadata */ + +#ifndef EGL_EXT_surface_SMPTE2086_metadata +#define EGL_EXT_surface_SMPTE2086_metadata 1 +#define EGL_SMPTE2086_DISPLAY_PRIMARY_RX_EXT 0x3341 +#define EGL_SMPTE2086_DISPLAY_PRIMARY_RY_EXT 0x3342 +#define EGL_SMPTE2086_DISPLAY_PRIMARY_GX_EXT 0x3343 +#define EGL_SMPTE2086_DISPLAY_PRIMARY_GY_EXT 0x3344 +#define EGL_SMPTE2086_DISPLAY_PRIMARY_BX_EXT 0x3345 +#define EGL_SMPTE2086_DISPLAY_PRIMARY_BY_EXT 0x3346 +#define EGL_SMPTE2086_WHITE_POINT_X_EXT 0x3347 +#define EGL_SMPTE2086_WHITE_POINT_Y_EXT 0x3348 +#define EGL_SMPTE2086_MAX_LUMINANCE_EXT 0x3349 +#define EGL_SMPTE2086_MIN_LUMINANCE_EXT 0x334A +#define EGL_METADATA_SCALING_EXT 50000 +#endif /* EGL_EXT_surface_SMPTE2086_metadata */ + +#ifndef EGL_EXT_surface_compression +#define EGL_EXT_surface_compression 1 +#define EGL_SURFACE_COMPRESSION_EXT 0x34B0 +#define EGL_SURFACE_COMPRESSION_PLANE1_EXT 0x328E +#define EGL_SURFACE_COMPRESSION_PLANE2_EXT 0x328F +#define EGL_SURFACE_COMPRESSION_FIXED_RATE_NONE_EXT 0x34B1 +#define EGL_SURFACE_COMPRESSION_FIXED_RATE_DEFAULT_EXT 0x34B2 +#define EGL_SURFACE_COMPRESSION_FIXED_RATE_1BPC_EXT 0x34B4 +#define EGL_SURFACE_COMPRESSION_FIXED_RATE_2BPC_EXT 0x34B5 +#define EGL_SURFACE_COMPRESSION_FIXED_RATE_3BPC_EXT 0x34B6 +#define EGL_SURFACE_COMPRESSION_FIXED_RATE_4BPC_EXT 0x34B7 +#define EGL_SURFACE_COMPRESSION_FIXED_RATE_5BPC_EXT 0x34B8 +#define EGL_SURFACE_COMPRESSION_FIXED_RATE_6BPC_EXT 0x34B9 +#define EGL_SURFACE_COMPRESSION_FIXED_RATE_7BPC_EXT 0x34BA +#define EGL_SURFACE_COMPRESSION_FIXED_RATE_8BPC_EXT 0x34BB +#define EGL_SURFACE_COMPRESSION_FIXED_RATE_9BPC_EXT 0x34BC +#define EGL_SURFACE_COMPRESSION_FIXED_RATE_10BPC_EXT 0x34BD +#define EGL_SURFACE_COMPRESSION_FIXED_RATE_11BPC_EXT 0x34BE +#define EGL_SURFACE_COMPRESSION_FIXED_RATE_12BPC_EXT 0x34BF +typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYSUPPORTEDCOMPRESSIONRATESEXTPROC) (EGLDisplay dpy, EGLConfig config, const EGLAttrib *attrib_list, EGLint *rates, EGLint rate_size, EGLint *num_rates); +#ifdef EGL_EGLEXT_PROTOTYPES +EGLAPI EGLBoolean EGLAPIENTRY eglQuerySupportedCompressionRatesEXT (EGLDisplay dpy, EGLConfig config, const EGLAttrib *attrib_list, EGLint *rates, EGLint rate_size, EGLint *num_rates); +#endif +#endif /* EGL_EXT_surface_compression */ + +#ifndef EGL_EXT_swap_buffers_with_damage +#define EGL_EXT_swap_buffers_with_damage 1 +typedef EGLBoolean (EGLAPIENTRYP PFNEGLSWAPBUFFERSWITHDAMAGEEXTPROC) (EGLDisplay dpy, EGLSurface surface, const EGLint *rects, EGLint n_rects); +#ifdef EGL_EGLEXT_PROTOTYPES +EGLAPI EGLBoolean EGLAPIENTRY eglSwapBuffersWithDamageEXT (EGLDisplay dpy, EGLSurface surface, const EGLint *rects, EGLint n_rects); +#endif +#endif /* EGL_EXT_swap_buffers_with_damage */ + +#ifndef EGL_EXT_sync_reuse +#define EGL_EXT_sync_reuse 1 +typedef EGLBoolean (EGLAPIENTRYP PFNEGLUNSIGNALSYNCEXTPROC) (EGLDisplay dpy, EGLSync sync, const EGLAttrib *attrib_list); +#ifdef EGL_EGLEXT_PROTOTYPES +EGLAPI EGLBoolean EGLAPIENTRY eglUnsignalSyncEXT (EGLDisplay dpy, EGLSync sync, const EGLAttrib *attrib_list); +#endif +#endif /* EGL_EXT_sync_reuse */ + +#ifndef EGL_EXT_yuv_surface +#define EGL_EXT_yuv_surface 1 +#define EGL_YUV_ORDER_EXT 0x3301 +#define EGL_YUV_NUMBER_OF_PLANES_EXT 0x3311 +#define EGL_YUV_SUBSAMPLE_EXT 0x3312 +#define EGL_YUV_DEPTH_RANGE_EXT 0x3317 +#define EGL_YUV_CSC_STANDARD_EXT 0x330A +#define EGL_YUV_PLANE_BPP_EXT 0x331A +#define EGL_YUV_BUFFER_EXT 0x3300 +#define EGL_YUV_ORDER_YUV_EXT 0x3302 +#define EGL_YUV_ORDER_YVU_EXT 0x3303 +#define EGL_YUV_ORDER_YUYV_EXT 0x3304 +#define EGL_YUV_ORDER_UYVY_EXT 0x3305 +#define EGL_YUV_ORDER_YVYU_EXT 0x3306 +#define EGL_YUV_ORDER_VYUY_EXT 0x3307 +#define EGL_YUV_ORDER_AYUV_EXT 0x3308 +#define EGL_YUV_SUBSAMPLE_4_2_0_EXT 0x3313 +#define EGL_YUV_SUBSAMPLE_4_2_2_EXT 0x3314 +#define EGL_YUV_SUBSAMPLE_4_4_4_EXT 0x3315 +#define EGL_YUV_DEPTH_RANGE_LIMITED_EXT 0x3318 +#define EGL_YUV_DEPTH_RANGE_FULL_EXT 0x3319 +#define EGL_YUV_CSC_STANDARD_601_EXT 0x330B +#define EGL_YUV_CSC_STANDARD_709_EXT 0x330C +#define EGL_YUV_CSC_STANDARD_2020_EXT 0x330D +#define EGL_YUV_PLANE_BPP_0_EXT 0x331B +#define EGL_YUV_PLANE_BPP_8_EXT 0x331C +#define EGL_YUV_PLANE_BPP_10_EXT 0x331D +#endif /* EGL_EXT_yuv_surface */ + +#ifndef EGL_HI_clientpixmap +#define EGL_HI_clientpixmap 1 +struct EGLClientPixmapHI { + void *pData; + EGLint iWidth; + EGLint iHeight; + EGLint iStride; +}; +#define EGL_CLIENT_PIXMAP_POINTER_HI 0x8F74 +typedef EGLSurface (EGLAPIENTRYP PFNEGLCREATEPIXMAPSURFACEHIPROC) (EGLDisplay dpy, EGLConfig config, struct EGLClientPixmapHI *pixmap); +#ifdef EGL_EGLEXT_PROTOTYPES +EGLAPI EGLSurface EGLAPIENTRY eglCreatePixmapSurfaceHI (EGLDisplay dpy, EGLConfig config, struct EGLClientPixmapHI *pixmap); +#endif +#endif /* EGL_HI_clientpixmap */ + +#ifndef EGL_HI_colorformats +#define EGL_HI_colorformats 1 +#define EGL_COLOR_FORMAT_HI 0x8F70 +#define EGL_COLOR_RGB_HI 0x8F71 +#define EGL_COLOR_RGBA_HI 0x8F72 +#define EGL_COLOR_ARGB_HI 0x8F73 +#endif /* EGL_HI_colorformats */ + +#ifndef EGL_IMG_context_priority +#define EGL_IMG_context_priority 1 +#define EGL_CONTEXT_PRIORITY_LEVEL_IMG 0x3100 +#define EGL_CONTEXT_PRIORITY_HIGH_IMG 0x3101 +#define EGL_CONTEXT_PRIORITY_MEDIUM_IMG 0x3102 +#define EGL_CONTEXT_PRIORITY_LOW_IMG 0x3103 +#endif /* EGL_IMG_context_priority */ + +#ifndef EGL_IMG_image_plane_attribs +#define EGL_IMG_image_plane_attribs 1 +#define EGL_NATIVE_BUFFER_MULTIPLANE_SEPARATE_IMG 0x3105 +#define EGL_NATIVE_BUFFER_PLANE_OFFSET_IMG 0x3106 +#endif /* EGL_IMG_image_plane_attribs */ + +#ifndef EGL_MESA_drm_image +#define EGL_MESA_drm_image 1 +#define EGL_DRM_BUFFER_FORMAT_MESA 0x31D0 +#define EGL_DRM_BUFFER_USE_MESA 0x31D1 +#define EGL_DRM_BUFFER_FORMAT_ARGB32_MESA 0x31D2 +#define EGL_DRM_BUFFER_MESA 0x31D3 +#define EGL_DRM_BUFFER_STRIDE_MESA 0x31D4 +#define EGL_DRM_BUFFER_USE_SCANOUT_MESA 0x00000001 +#define EGL_DRM_BUFFER_USE_SHARE_MESA 0x00000002 +#define EGL_DRM_BUFFER_USE_CURSOR_MESA 0x00000004 +typedef EGLImageKHR (EGLAPIENTRYP PFNEGLCREATEDRMIMAGEMESAPROC) (EGLDisplay dpy, const EGLint *attrib_list); +typedef EGLBoolean (EGLAPIENTRYP PFNEGLEXPORTDRMIMAGEMESAPROC) (EGLDisplay dpy, EGLImageKHR image, EGLint *name, EGLint *handle, EGLint *stride); +#ifdef EGL_EGLEXT_PROTOTYPES +EGLAPI EGLImageKHR EGLAPIENTRY eglCreateDRMImageMESA (EGLDisplay dpy, const EGLint *attrib_list); +EGLAPI EGLBoolean EGLAPIENTRY eglExportDRMImageMESA (EGLDisplay dpy, EGLImageKHR image, EGLint *name, EGLint *handle, EGLint *stride); +#endif +#endif /* EGL_MESA_drm_image */ + +#ifndef EGL_MESA_image_dma_buf_export +#define EGL_MESA_image_dma_buf_export 1 +typedef EGLBoolean (EGLAPIENTRYP PFNEGLEXPORTDMABUFIMAGEQUERYMESAPROC) (EGLDisplay dpy, EGLImageKHR image, int *fourcc, int *num_planes, EGLuint64KHR *modifiers); +typedef EGLBoolean (EGLAPIENTRYP PFNEGLEXPORTDMABUFIMAGEMESAPROC) (EGLDisplay dpy, EGLImageKHR image, int *fds, EGLint *strides, EGLint *offsets); +#ifdef EGL_EGLEXT_PROTOTYPES +EGLAPI EGLBoolean EGLAPIENTRY eglExportDMABUFImageQueryMESA (EGLDisplay dpy, EGLImageKHR image, int *fourcc, int *num_planes, EGLuint64KHR *modifiers); +EGLAPI EGLBoolean EGLAPIENTRY eglExportDMABUFImageMESA (EGLDisplay dpy, EGLImageKHR image, int *fds, EGLint *strides, EGLint *offsets); +#endif +#endif /* EGL_MESA_image_dma_buf_export */ + +#ifndef EGL_MESA_platform_gbm +#define EGL_MESA_platform_gbm 1 +#define EGL_PLATFORM_GBM_MESA 0x31D7 +#endif /* EGL_MESA_platform_gbm */ + +#ifndef EGL_MESA_platform_surfaceless +#define EGL_MESA_platform_surfaceless 1 +#define EGL_PLATFORM_SURFACELESS_MESA 0x31DD +#endif /* EGL_MESA_platform_surfaceless */ + +#ifndef EGL_MESA_query_driver +#define EGL_MESA_query_driver 1 +typedef char *(EGLAPIENTRYP PFNEGLGETDISPLAYDRIVERCONFIGPROC) (EGLDisplay dpy); +typedef const char *(EGLAPIENTRYP PFNEGLGETDISPLAYDRIVERNAMEPROC) (EGLDisplay dpy); +#ifdef EGL_EGLEXT_PROTOTYPES +EGLAPI char *EGLAPIENTRY eglGetDisplayDriverConfig (EGLDisplay dpy); +EGLAPI const char *EGLAPIENTRY eglGetDisplayDriverName (EGLDisplay dpy); +#endif +#endif /* EGL_MESA_query_driver */ + +#ifndef EGL_NOK_swap_region +#define EGL_NOK_swap_region 1 +typedef EGLBoolean (EGLAPIENTRYP PFNEGLSWAPBUFFERSREGIONNOKPROC) (EGLDisplay dpy, EGLSurface surface, EGLint numRects, const EGLint *rects); +#ifdef EGL_EGLEXT_PROTOTYPES +EGLAPI EGLBoolean EGLAPIENTRY eglSwapBuffersRegionNOK (EGLDisplay dpy, EGLSurface surface, EGLint numRects, const EGLint *rects); +#endif +#endif /* EGL_NOK_swap_region */ + +#ifndef EGL_NOK_swap_region2 +#define EGL_NOK_swap_region2 1 +typedef EGLBoolean (EGLAPIENTRYP PFNEGLSWAPBUFFERSREGION2NOKPROC) (EGLDisplay dpy, EGLSurface surface, EGLint numRects, const EGLint *rects); +#ifdef EGL_EGLEXT_PROTOTYPES +EGLAPI EGLBoolean EGLAPIENTRY eglSwapBuffersRegion2NOK (EGLDisplay dpy, EGLSurface surface, EGLint numRects, const EGLint *rects); +#endif +#endif /* EGL_NOK_swap_region2 */ + +#ifndef EGL_NOK_texture_from_pixmap +#define EGL_NOK_texture_from_pixmap 1 +#define EGL_Y_INVERTED_NOK 0x307F +#endif /* EGL_NOK_texture_from_pixmap */ + +#ifndef EGL_NV_3dvision_surface +#define EGL_NV_3dvision_surface 1 +#define EGL_AUTO_STEREO_NV 0x3136 +#endif /* EGL_NV_3dvision_surface */ + +#ifndef EGL_NV_context_priority_realtime +#define EGL_NV_context_priority_realtime 1 +#define EGL_CONTEXT_PRIORITY_REALTIME_NV 0x3357 +#endif /* EGL_NV_context_priority_realtime */ + +#ifndef EGL_NV_coverage_sample +#define EGL_NV_coverage_sample 1 +#define EGL_COVERAGE_BUFFERS_NV 0x30E0 +#define EGL_COVERAGE_SAMPLES_NV 0x30E1 +#endif /* EGL_NV_coverage_sample */ + +#ifndef EGL_NV_coverage_sample_resolve +#define EGL_NV_coverage_sample_resolve 1 +#define EGL_COVERAGE_SAMPLE_RESOLVE_NV 0x3131 +#define EGL_COVERAGE_SAMPLE_RESOLVE_DEFAULT_NV 0x3132 +#define EGL_COVERAGE_SAMPLE_RESOLVE_NONE_NV 0x3133 +#endif /* EGL_NV_coverage_sample_resolve */ + +#ifndef EGL_NV_cuda_event +#define EGL_NV_cuda_event 1 +#define EGL_CUDA_EVENT_HANDLE_NV 0x323B +#define EGL_SYNC_CUDA_EVENT_NV 0x323C +#define EGL_SYNC_CUDA_EVENT_COMPLETE_NV 0x323D +#endif /* EGL_NV_cuda_event */ + +#ifndef EGL_NV_depth_nonlinear +#define EGL_NV_depth_nonlinear 1 +#define EGL_DEPTH_ENCODING_NV 0x30E2 +#define EGL_DEPTH_ENCODING_NONE_NV 0 +#define EGL_DEPTH_ENCODING_NONLINEAR_NV 0x30E3 +#endif /* EGL_NV_depth_nonlinear */ + +#ifndef EGL_NV_device_cuda +#define EGL_NV_device_cuda 1 +#define EGL_CUDA_DEVICE_NV 0x323A +#endif /* EGL_NV_device_cuda */ + +#ifndef EGL_NV_native_query +#define EGL_NV_native_query 1 +typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYNATIVEDISPLAYNVPROC) (EGLDisplay dpy, EGLNativeDisplayType *display_id); +typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYNATIVEWINDOWNVPROC) (EGLDisplay dpy, EGLSurface surf, EGLNativeWindowType *window); +typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYNATIVEPIXMAPNVPROC) (EGLDisplay dpy, EGLSurface surf, EGLNativePixmapType *pixmap); +#ifdef EGL_EGLEXT_PROTOTYPES +EGLAPI EGLBoolean EGLAPIENTRY eglQueryNativeDisplayNV (EGLDisplay dpy, EGLNativeDisplayType *display_id); +EGLAPI EGLBoolean EGLAPIENTRY eglQueryNativeWindowNV (EGLDisplay dpy, EGLSurface surf, EGLNativeWindowType *window); +EGLAPI EGLBoolean EGLAPIENTRY eglQueryNativePixmapNV (EGLDisplay dpy, EGLSurface surf, EGLNativePixmapType *pixmap); +#endif +#endif /* EGL_NV_native_query */ + +#ifndef EGL_NV_post_convert_rounding +#define EGL_NV_post_convert_rounding 1 +#endif /* EGL_NV_post_convert_rounding */ + +#ifndef EGL_NV_post_sub_buffer +#define EGL_NV_post_sub_buffer 1 +#define EGL_POST_SUB_BUFFER_SUPPORTED_NV 0x30BE +typedef EGLBoolean (EGLAPIENTRYP PFNEGLPOSTSUBBUFFERNVPROC) (EGLDisplay dpy, EGLSurface surface, EGLint x, EGLint y, EGLint width, EGLint height); +#ifdef EGL_EGLEXT_PROTOTYPES +EGLAPI EGLBoolean EGLAPIENTRY eglPostSubBufferNV (EGLDisplay dpy, EGLSurface surface, EGLint x, EGLint y, EGLint width, EGLint height); +#endif +#endif /* EGL_NV_post_sub_buffer */ + +#ifndef EGL_NV_quadruple_buffer +#define EGL_NV_quadruple_buffer 1 +#define EGL_QUADRUPLE_BUFFER_NV 0x3231 +#endif /* EGL_NV_quadruple_buffer */ + +#ifndef EGL_NV_robustness_video_memory_purge +#define EGL_NV_robustness_video_memory_purge 1 +#define EGL_GENERATE_RESET_ON_VIDEO_MEMORY_PURGE_NV 0x334C +#endif /* EGL_NV_robustness_video_memory_purge */ + +#ifndef EGL_NV_stream_consumer_eglimage +#define EGL_NV_stream_consumer_eglimage 1 +#define EGL_STREAM_CONSUMER_IMAGE_NV 0x3373 +#define EGL_STREAM_IMAGE_ADD_NV 0x3374 +#define EGL_STREAM_IMAGE_REMOVE_NV 0x3375 +#define EGL_STREAM_IMAGE_AVAILABLE_NV 0x3376 +typedef EGLBoolean (EGLAPIENTRYP PFNEGLSTREAMIMAGECONSUMERCONNECTNVPROC) (EGLDisplay dpy, EGLStreamKHR stream, EGLint num_modifiers, const EGLuint64KHR *modifiers, const EGLAttrib *attrib_list); +typedef EGLint (EGLAPIENTRYP PFNEGLQUERYSTREAMCONSUMEREVENTNVPROC) (EGLDisplay dpy, EGLStreamKHR stream, EGLTime timeout, EGLenum *event, EGLAttrib *aux); +typedef EGLBoolean (EGLAPIENTRYP PFNEGLSTREAMACQUIREIMAGENVPROC) (EGLDisplay dpy, EGLStreamKHR stream, EGLImage *pImage, EGLSync sync); +typedef EGLBoolean (EGLAPIENTRYP PFNEGLSTREAMRELEASEIMAGENVPROC) (EGLDisplay dpy, EGLStreamKHR stream, EGLImage image, EGLSync sync); +#ifdef EGL_EGLEXT_PROTOTYPES +EGLAPI EGLBoolean EGLAPIENTRY eglStreamImageConsumerConnectNV (EGLDisplay dpy, EGLStreamKHR stream, EGLint num_modifiers, const EGLuint64KHR *modifiers, const EGLAttrib *attrib_list); +EGLAPI EGLint EGLAPIENTRY eglQueryStreamConsumerEventNV (EGLDisplay dpy, EGLStreamKHR stream, EGLTime timeout, EGLenum *event, EGLAttrib *aux); +EGLAPI EGLBoolean EGLAPIENTRY eglStreamAcquireImageNV (EGLDisplay dpy, EGLStreamKHR stream, EGLImage *pImage, EGLSync sync); +EGLAPI EGLBoolean EGLAPIENTRY eglStreamReleaseImageNV (EGLDisplay dpy, EGLStreamKHR stream, EGLImage image, EGLSync sync); +#endif +#endif /* EGL_NV_stream_consumer_eglimage */ + +#ifndef EGL_NV_stream_consumer_gltexture_yuv +#define EGL_NV_stream_consumer_gltexture_yuv 1 +#define EGL_YUV_PLANE0_TEXTURE_UNIT_NV 0x332C +#define EGL_YUV_PLANE1_TEXTURE_UNIT_NV 0x332D +#define EGL_YUV_PLANE2_TEXTURE_UNIT_NV 0x332E +typedef EGLBoolean (EGLAPIENTRYP PFNEGLSTREAMCONSUMERGLTEXTUREEXTERNALATTRIBSNVPROC) (EGLDisplay dpy, EGLStreamKHR stream, const EGLAttrib *attrib_list); +#ifdef EGL_EGLEXT_PROTOTYPES +EGLAPI EGLBoolean EGLAPIENTRY eglStreamConsumerGLTextureExternalAttribsNV (EGLDisplay dpy, EGLStreamKHR stream, const EGLAttrib *attrib_list); +#endif +#endif /* EGL_NV_stream_consumer_gltexture_yuv */ + +#ifndef EGL_NV_stream_cross_display +#define EGL_NV_stream_cross_display 1 +#define EGL_STREAM_CROSS_DISPLAY_NV 0x334E +#endif /* EGL_NV_stream_cross_display */ + +#ifndef EGL_NV_stream_cross_object +#define EGL_NV_stream_cross_object 1 +#define EGL_STREAM_CROSS_OBJECT_NV 0x334D +#endif /* EGL_NV_stream_cross_object */ + +#ifndef EGL_NV_stream_cross_partition +#define EGL_NV_stream_cross_partition 1 +#define EGL_STREAM_CROSS_PARTITION_NV 0x323F +#endif /* EGL_NV_stream_cross_partition */ + +#ifndef EGL_NV_stream_cross_process +#define EGL_NV_stream_cross_process 1 +#define EGL_STREAM_CROSS_PROCESS_NV 0x3245 +#endif /* EGL_NV_stream_cross_process */ + +#ifndef EGL_NV_stream_cross_system +#define EGL_NV_stream_cross_system 1 +#define EGL_STREAM_CROSS_SYSTEM_NV 0x334F +#endif /* EGL_NV_stream_cross_system */ + +#ifndef EGL_NV_stream_dma +#define EGL_NV_stream_dma 1 +#define EGL_STREAM_DMA_NV 0x3371 +#define EGL_STREAM_DMA_SERVER_NV 0x3372 +#endif /* EGL_NV_stream_dma */ + +#ifndef EGL_NV_stream_fifo_next +#define EGL_NV_stream_fifo_next 1 +#define EGL_PENDING_FRAME_NV 0x3329 +#define EGL_STREAM_TIME_PENDING_NV 0x332A +#endif /* EGL_NV_stream_fifo_next */ + +#ifndef EGL_NV_stream_fifo_synchronous +#define EGL_NV_stream_fifo_synchronous 1 +#define EGL_STREAM_FIFO_SYNCHRONOUS_NV 0x3336 +#endif /* EGL_NV_stream_fifo_synchronous */ + +#ifndef EGL_NV_stream_flush +#define EGL_NV_stream_flush 1 +typedef EGLBoolean (EGLAPIENTRYP PFNEGLSTREAMFLUSHNVPROC) (EGLDisplay dpy, EGLStreamKHR stream); +#ifdef EGL_EGLEXT_PROTOTYPES +EGLAPI EGLBoolean EGLAPIENTRY eglStreamFlushNV (EGLDisplay dpy, EGLStreamKHR stream); +#endif +#endif /* EGL_NV_stream_flush */ + +#ifndef EGL_NV_stream_frame_limits +#define EGL_NV_stream_frame_limits 1 +#define EGL_PRODUCER_MAX_FRAME_HINT_NV 0x3337 +#define EGL_CONSUMER_MAX_FRAME_HINT_NV 0x3338 +#endif /* EGL_NV_stream_frame_limits */ + +#ifndef EGL_NV_stream_metadata +#define EGL_NV_stream_metadata 1 +#define EGL_MAX_STREAM_METADATA_BLOCKS_NV 0x3250 +#define EGL_MAX_STREAM_METADATA_BLOCK_SIZE_NV 0x3251 +#define EGL_MAX_STREAM_METADATA_TOTAL_SIZE_NV 0x3252 +#define EGL_PRODUCER_METADATA_NV 0x3253 +#define EGL_CONSUMER_METADATA_NV 0x3254 +#define EGL_PENDING_METADATA_NV 0x3328 +#define EGL_METADATA0_SIZE_NV 0x3255 +#define EGL_METADATA1_SIZE_NV 0x3256 +#define EGL_METADATA2_SIZE_NV 0x3257 +#define EGL_METADATA3_SIZE_NV 0x3258 +#define EGL_METADATA0_TYPE_NV 0x3259 +#define EGL_METADATA1_TYPE_NV 0x325A +#define EGL_METADATA2_TYPE_NV 0x325B +#define EGL_METADATA3_TYPE_NV 0x325C +typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYDISPLAYATTRIBNVPROC) (EGLDisplay dpy, EGLint attribute, EGLAttrib *value); +typedef EGLBoolean (EGLAPIENTRYP PFNEGLSETSTREAMMETADATANVPROC) (EGLDisplay dpy, EGLStreamKHR stream, EGLint n, EGLint offset, EGLint size, const void *data); +typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYSTREAMMETADATANVPROC) (EGLDisplay dpy, EGLStreamKHR stream, EGLenum name, EGLint n, EGLint offset, EGLint size, void *data); +#ifdef EGL_EGLEXT_PROTOTYPES +EGLAPI EGLBoolean EGLAPIENTRY eglQueryDisplayAttribNV (EGLDisplay dpy, EGLint attribute, EGLAttrib *value); +EGLAPI EGLBoolean EGLAPIENTRY eglSetStreamMetadataNV (EGLDisplay dpy, EGLStreamKHR stream, EGLint n, EGLint offset, EGLint size, const void *data); +EGLAPI EGLBoolean EGLAPIENTRY eglQueryStreamMetadataNV (EGLDisplay dpy, EGLStreamKHR stream, EGLenum name, EGLint n, EGLint offset, EGLint size, void *data); +#endif +#endif /* EGL_NV_stream_metadata */ + +#ifndef EGL_NV_stream_origin +#define EGL_NV_stream_origin 1 +#define EGL_STREAM_FRAME_ORIGIN_X_NV 0x3366 +#define EGL_STREAM_FRAME_ORIGIN_Y_NV 0x3367 +#define EGL_STREAM_FRAME_MAJOR_AXIS_NV 0x3368 +#define EGL_CONSUMER_AUTO_ORIENTATION_NV 0x3369 +#define EGL_PRODUCER_AUTO_ORIENTATION_NV 0x336A +#define EGL_LEFT_NV 0x336B +#define EGL_RIGHT_NV 0x336C +#define EGL_TOP_NV 0x336D +#define EGL_BOTTOM_NV 0x336E +#define EGL_X_AXIS_NV 0x336F +#define EGL_Y_AXIS_NV 0x3370 +#endif /* EGL_NV_stream_origin */ + +#ifndef EGL_NV_stream_remote +#define EGL_NV_stream_remote 1 +#define EGL_STREAM_STATE_INITIALIZING_NV 0x3240 +#define EGL_STREAM_TYPE_NV 0x3241 +#define EGL_STREAM_PROTOCOL_NV 0x3242 +#define EGL_STREAM_ENDPOINT_NV 0x3243 +#define EGL_STREAM_LOCAL_NV 0x3244 +#define EGL_STREAM_PRODUCER_NV 0x3247 +#define EGL_STREAM_CONSUMER_NV 0x3248 +#define EGL_STREAM_PROTOCOL_FD_NV 0x3246 +#endif /* EGL_NV_stream_remote */ + +#ifndef EGL_NV_stream_reset +#define EGL_NV_stream_reset 1 +#define EGL_SUPPORT_RESET_NV 0x3334 +#define EGL_SUPPORT_REUSE_NV 0x3335 +typedef EGLBoolean (EGLAPIENTRYP PFNEGLRESETSTREAMNVPROC) (EGLDisplay dpy, EGLStreamKHR stream); +#ifdef EGL_EGLEXT_PROTOTYPES +EGLAPI EGLBoolean EGLAPIENTRY eglResetStreamNV (EGLDisplay dpy, EGLStreamKHR stream); +#endif +#endif /* EGL_NV_stream_reset */ + +#ifndef EGL_NV_stream_socket +#define EGL_NV_stream_socket 1 +#define EGL_STREAM_PROTOCOL_SOCKET_NV 0x324B +#define EGL_SOCKET_HANDLE_NV 0x324C +#define EGL_SOCKET_TYPE_NV 0x324D +#endif /* EGL_NV_stream_socket */ + +#ifndef EGL_NV_stream_socket_inet +#define EGL_NV_stream_socket_inet 1 +#define EGL_SOCKET_TYPE_INET_NV 0x324F +#endif /* EGL_NV_stream_socket_inet */ + +#ifndef EGL_NV_stream_socket_unix +#define EGL_NV_stream_socket_unix 1 +#define EGL_SOCKET_TYPE_UNIX_NV 0x324E +#endif /* EGL_NV_stream_socket_unix */ + +#ifndef EGL_NV_stream_sync +#define EGL_NV_stream_sync 1 +#define EGL_SYNC_NEW_FRAME_NV 0x321F +typedef EGLSyncKHR (EGLAPIENTRYP PFNEGLCREATESTREAMSYNCNVPROC) (EGLDisplay dpy, EGLStreamKHR stream, EGLenum type, const EGLint *attrib_list); +#ifdef EGL_EGLEXT_PROTOTYPES +EGLAPI EGLSyncKHR EGLAPIENTRY eglCreateStreamSyncNV (EGLDisplay dpy, EGLStreamKHR stream, EGLenum type, const EGLint *attrib_list); +#endif +#endif /* EGL_NV_stream_sync */ + +#ifndef EGL_NV_sync +#define EGL_NV_sync 1 +typedef void *EGLSyncNV; +typedef khronos_utime_nanoseconds_t EGLTimeNV; +#ifdef KHRONOS_SUPPORT_INT64 +#define EGL_SYNC_PRIOR_COMMANDS_COMPLETE_NV 0x30E6 +#define EGL_SYNC_STATUS_NV 0x30E7 +#define EGL_SIGNALED_NV 0x30E8 +#define EGL_UNSIGNALED_NV 0x30E9 +#define EGL_SYNC_FLUSH_COMMANDS_BIT_NV 0x0001 +#define EGL_FOREVER_NV 0xFFFFFFFFFFFFFFFFull +#define EGL_ALREADY_SIGNALED_NV 0x30EA +#define EGL_TIMEOUT_EXPIRED_NV 0x30EB +#define EGL_CONDITION_SATISFIED_NV 0x30EC +#define EGL_SYNC_TYPE_NV 0x30ED +#define EGL_SYNC_CONDITION_NV 0x30EE +#define EGL_SYNC_FENCE_NV 0x30EF +#define EGL_NO_SYNC_NV EGL_CAST(EGLSyncNV,0) +typedef EGLSyncNV (EGLAPIENTRYP PFNEGLCREATEFENCESYNCNVPROC) (EGLDisplay dpy, EGLenum condition, const EGLint *attrib_list); +typedef EGLBoolean (EGLAPIENTRYP PFNEGLDESTROYSYNCNVPROC) (EGLSyncNV sync); +typedef EGLBoolean (EGLAPIENTRYP PFNEGLFENCENVPROC) (EGLSyncNV sync); +typedef EGLint (EGLAPIENTRYP PFNEGLCLIENTWAITSYNCNVPROC) (EGLSyncNV sync, EGLint flags, EGLTimeNV timeout); +typedef EGLBoolean (EGLAPIENTRYP PFNEGLSIGNALSYNCNVPROC) (EGLSyncNV sync, EGLenum mode); +typedef EGLBoolean (EGLAPIENTRYP PFNEGLGETSYNCATTRIBNVPROC) (EGLSyncNV sync, EGLint attribute, EGLint *value); +#ifdef EGL_EGLEXT_PROTOTYPES +EGLAPI EGLSyncNV EGLAPIENTRY eglCreateFenceSyncNV (EGLDisplay dpy, EGLenum condition, const EGLint *attrib_list); +EGLAPI EGLBoolean EGLAPIENTRY eglDestroySyncNV (EGLSyncNV sync); +EGLAPI EGLBoolean EGLAPIENTRY eglFenceNV (EGLSyncNV sync); +EGLAPI EGLint EGLAPIENTRY eglClientWaitSyncNV (EGLSyncNV sync, EGLint flags, EGLTimeNV timeout); +EGLAPI EGLBoolean EGLAPIENTRY eglSignalSyncNV (EGLSyncNV sync, EGLenum mode); +EGLAPI EGLBoolean EGLAPIENTRY eglGetSyncAttribNV (EGLSyncNV sync, EGLint attribute, EGLint *value); +#endif +#endif /* KHRONOS_SUPPORT_INT64 */ +#endif /* EGL_NV_sync */ + +#ifndef EGL_NV_system_time +#define EGL_NV_system_time 1 +typedef khronos_utime_nanoseconds_t EGLuint64NV; +#ifdef KHRONOS_SUPPORT_INT64 +typedef EGLuint64NV (EGLAPIENTRYP PFNEGLGETSYSTEMTIMEFREQUENCYNVPROC) (void); +typedef EGLuint64NV (EGLAPIENTRYP PFNEGLGETSYSTEMTIMENVPROC) (void); +#ifdef EGL_EGLEXT_PROTOTYPES +EGLAPI EGLuint64NV EGLAPIENTRY eglGetSystemTimeFrequencyNV (void); +EGLAPI EGLuint64NV EGLAPIENTRY eglGetSystemTimeNV (void); +#endif +#endif /* KHRONOS_SUPPORT_INT64 */ +#endif /* EGL_NV_system_time */ + +#ifndef EGL_NV_triple_buffer +#define EGL_NV_triple_buffer 1 +#define EGL_TRIPLE_BUFFER_NV 0x3230 +#endif /* EGL_NV_triple_buffer */ + +#ifndef EGL_TIZEN_image_native_buffer +#define EGL_TIZEN_image_native_buffer 1 +#define EGL_NATIVE_BUFFER_TIZEN 0x32A0 +#endif /* EGL_TIZEN_image_native_buffer */ + +#ifndef EGL_TIZEN_image_native_surface +#define EGL_TIZEN_image_native_surface 1 +#define EGL_NATIVE_SURFACE_TIZEN 0x32A1 +#endif /* EGL_TIZEN_image_native_surface */ + +#ifndef EGL_WL_bind_wayland_display +#define EGL_WL_bind_wayland_display 1 +#define PFNEGLBINDWAYLANDDISPLAYWL PFNEGLBINDWAYLANDDISPLAYWLPROC +#define PFNEGLUNBINDWAYLANDDISPLAYWL PFNEGLUNBINDWAYLANDDISPLAYWLPROC +#define PFNEGLQUERYWAYLANDBUFFERWL PFNEGLQUERYWAYLANDBUFFERWLPROC +struct wl_display; +struct wl_resource; +#define EGL_WAYLAND_BUFFER_WL 0x31D5 +#define EGL_WAYLAND_PLANE_WL 0x31D6 +#define EGL_TEXTURE_Y_U_V_WL 0x31D7 +#define EGL_TEXTURE_Y_UV_WL 0x31D8 +#define EGL_TEXTURE_Y_XUXV_WL 0x31D9 +#define EGL_TEXTURE_EXTERNAL_WL 0x31DA +#define EGL_WAYLAND_Y_INVERTED_WL 0x31DB +typedef EGLBoolean (EGLAPIENTRYP PFNEGLBINDWAYLANDDISPLAYWLPROC) (EGLDisplay dpy, struct wl_display *display); +typedef EGLBoolean (EGLAPIENTRYP PFNEGLUNBINDWAYLANDDISPLAYWLPROC) (EGLDisplay dpy, struct wl_display *display); +typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYWAYLANDBUFFERWLPROC) (EGLDisplay dpy, struct wl_resource *buffer, EGLint attribute, EGLint *value); +#ifdef EGL_EGLEXT_PROTOTYPES +EGLAPI EGLBoolean EGLAPIENTRY eglBindWaylandDisplayWL (EGLDisplay dpy, struct wl_display *display); +EGLAPI EGLBoolean EGLAPIENTRY eglUnbindWaylandDisplayWL (EGLDisplay dpy, struct wl_display *display); +EGLAPI EGLBoolean EGLAPIENTRY eglQueryWaylandBufferWL (EGLDisplay dpy, struct wl_resource *buffer, EGLint attribute, EGLint *value); +#endif +#endif /* EGL_WL_bind_wayland_display */ + +#ifndef EGL_WL_create_wayland_buffer_from_image +#define EGL_WL_create_wayland_buffer_from_image 1 +#define PFNEGLCREATEWAYLANDBUFFERFROMIMAGEWL PFNEGLCREATEWAYLANDBUFFERFROMIMAGEWLPROC +struct wl_buffer; +typedef struct wl_buffer *(EGLAPIENTRYP PFNEGLCREATEWAYLANDBUFFERFROMIMAGEWLPROC) (EGLDisplay dpy, EGLImageKHR image); +#ifdef EGL_EGLEXT_PROTOTYPES +EGLAPI struct wl_buffer *EGLAPIENTRY eglCreateWaylandBufferFromImageWL (EGLDisplay dpy, EGLImageKHR image); +#endif +#endif /* EGL_WL_create_wayland_buffer_from_image */ + +#ifdef __cplusplus +} +#endif + +#endif /* __eglext_h_ */ + +#endif /* _MSC_VER */ diff --git a/third_party/tlRender-install-Release/include/SDL2/SDL_endian.h b/third_party/tlRender-install-Release/include/SDL2/SDL_endian.h new file mode 100644 index 00000000..5be66eaf --- /dev/null +++ b/third_party/tlRender-install-Release/include/SDL2/SDL_endian.h @@ -0,0 +1,396 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2025 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +/** + * # CategoryEndian + * + * Functions for reading and writing endian-specific values + */ + +#ifndef SDL_endian_h_ +#define SDL_endian_h_ + +#include "SDL_stdinc.h" + +#if defined(_MSC_VER) && (_MSC_VER >= 1400) +/* As of Clang 11, '_m_prefetchw' is conflicting with the winnt.h's version, + so we define the needed '_m_prefetch' here as a pseudo-header, until the issue is fixed. */ +#ifdef __clang__ +#ifndef __PRFCHWINTRIN_H +#define __PRFCHWINTRIN_H +static __inline__ void __attribute__((__always_inline__, __nodebug__)) +_m_prefetch(void *__P) +{ + __builtin_prefetch(__P, 0, 3 /* _MM_HINT_T0 */); +} +#endif /* __PRFCHWINTRIN_H */ +#endif /* __clang__ */ + +#include +#endif + +/** + * \name The two types of endianness + */ +/* @{ */ +#define SDL_LIL_ENDIAN 1234 +#define SDL_BIG_ENDIAN 4321 +/* @} */ + +#ifndef SDL_BYTEORDER /* Not defined in SDL_config.h? */ +#ifdef __linux__ +#include +#define SDL_BYTEORDER __BYTE_ORDER +#elif defined(__sun) && defined(__SVR4) /* Solaris */ +#include +#if defined(_LITTLE_ENDIAN) +#define SDL_BYTEORDER SDL_LIL_ENDIAN +#elif defined(_BIG_ENDIAN) +#define SDL_BYTEORDER SDL_BIG_ENDIAN +#else +#error Unsupported endianness +#endif +#elif defined(__OpenBSD__) || defined(__DragonFly__) +#include +#define SDL_BYTEORDER BYTE_ORDER +#elif defined(__FreeBSD__) || defined(__NetBSD__) +#include +#define SDL_BYTEORDER BYTE_ORDER +/* predefs from newer gcc and clang versions: */ +#elif defined(__ORDER_LITTLE_ENDIAN__) && defined(__ORDER_BIG_ENDIAN__) && defined(__BYTE_ORDER__) +#if (__BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__) +#define SDL_BYTEORDER SDL_LIL_ENDIAN +#elif (__BYTE_ORDER__ == __ORDER_BIG_ENDIAN__) +#define SDL_BYTEORDER SDL_BIG_ENDIAN +#else +#error Unsupported endianness +#endif /**/ +#else +#if defined(__hppa__) || \ + defined(__m68k__) || defined(mc68000) || defined(_M_M68K) || \ + (defined(__MIPS__) && defined(__MIPSEB__)) || \ + defined(__ppc__) || defined(__POWERPC__) || defined(__powerpc__) || defined(__PPC__) || \ + defined(__sparc__) || defined(__sparc) +#define SDL_BYTEORDER SDL_BIG_ENDIAN +#else +#define SDL_BYTEORDER SDL_LIL_ENDIAN +#endif +#endif /* __linux__ */ +#endif /* !SDL_BYTEORDER */ + +#ifndef SDL_FLOATWORDORDER /* Not defined in SDL_config.h? */ +/* predefs from newer gcc versions: */ +#if defined(__ORDER_LITTLE_ENDIAN__) && defined(__ORDER_BIG_ENDIAN__) && defined(__FLOAT_WORD_ORDER__) +#if (__FLOAT_WORD_ORDER__ == __ORDER_LITTLE_ENDIAN__) +#define SDL_FLOATWORDORDER SDL_LIL_ENDIAN +#elif (__FLOAT_WORD_ORDER__ == __ORDER_BIG_ENDIAN__) +#define SDL_FLOATWORDORDER SDL_BIG_ENDIAN +#else +#error Unsupported endianness +#endif /**/ +#elif defined(__MAVERICK__) +/* For Maverick, float words are always little-endian. */ +#define SDL_FLOATWORDORDER SDL_LIL_ENDIAN +#elif (defined(__arm__) || defined(__thumb__)) && !defined(__VFP_FP__) && !defined(__ARM_EABI__) +/* For FPA, float words are always big-endian. */ +#define SDL_FLOATWORDORDER SDL_BIG_ENDIAN +#else +/* By default, assume that floats words follow the memory system mode. */ +#define SDL_FLOATWORDORDER SDL_BYTEORDER +#endif /* __FLOAT_WORD_ORDER__ */ +#endif /* !SDL_FLOATWORDORDER */ + + +#include "begin_code.h" +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \file SDL_endian.h + */ + +/* various modern compilers may have builtin swap */ +#if defined(__GNUC__) || defined(__clang__) +# define HAS_BUILTIN_BSWAP16 (_SDL_HAS_BUILTIN(__builtin_bswap16)) || \ + (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 8)) +# define HAS_BUILTIN_BSWAP32 (_SDL_HAS_BUILTIN(__builtin_bswap32)) || \ + (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)) +# define HAS_BUILTIN_BSWAP64 (_SDL_HAS_BUILTIN(__builtin_bswap64)) || \ + (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)) + + /* this one is broken */ +# define HAS_BROKEN_BSWAP (__GNUC__ == 2 && __GNUC_MINOR__ <= 95) +#else +# define HAS_BUILTIN_BSWAP16 0 +# define HAS_BUILTIN_BSWAP32 0 +# define HAS_BUILTIN_BSWAP64 0 +# define HAS_BROKEN_BSWAP 0 +#endif + +#if HAS_BUILTIN_BSWAP16 +#define SDL_Swap16(x) __builtin_bswap16(x) +#elif (defined(_MSC_VER) && (_MSC_VER >= 1400)) && !defined(__ICL) +#pragma intrinsic(_byteswap_ushort) +#define SDL_Swap16(x) _byteswap_ushort(x) +#elif defined(__i386__) && !HAS_BROKEN_BSWAP +SDL_FORCE_INLINE Uint16 +SDL_Swap16(Uint16 x) +{ + __asm__("xchgb %b0,%h0": "=q"(x):"0"(x)); + return x; +} +#elif defined(__x86_64__) +SDL_FORCE_INLINE Uint16 +SDL_Swap16(Uint16 x) +{ + __asm__("xchgb %b0,%h0": "=Q"(x):"0"(x)); + return x; +} +#elif (defined(__powerpc__) || defined(__ppc__)) +SDL_FORCE_INLINE Uint16 +SDL_Swap16(Uint16 x) +{ + int result; + + __asm__("rlwimi %0,%2,8,16,23": "=&r"(result):"0"(x >> 8), "r"(x)); + return (Uint16)result; +} +#elif (defined(__m68k__) && !defined(__mcoldfire__)) +SDL_FORCE_INLINE Uint16 +SDL_Swap16(Uint16 x) +{ + __asm__("rorw #8,%0": "=d"(x): "0"(x):"cc"); + return x; +} +#elif defined(__WATCOMC__) && defined(__386__) +extern __inline Uint16 SDL_Swap16(Uint16); +#pragma aux SDL_Swap16 = \ + "xchg al, ah" \ + parm [ax] \ + modify [ax]; +#else + +/** + * Use this function to swap the byte order of a 16-bit value. + * + * \param x the value to be swapped. + * \returns the swapped value. + * + * \sa SDL_SwapBE16 + * \sa SDL_SwapLE16 + */ +SDL_FORCE_INLINE Uint16 +SDL_Swap16(Uint16 x) +{ + return SDL_static_cast(Uint16, ((x << 8) | (x >> 8))); +} +#endif + +#if HAS_BUILTIN_BSWAP32 +#define SDL_Swap32(x) __builtin_bswap32(x) +#elif (defined(_MSC_VER) && (_MSC_VER >= 1400)) && !defined(__ICL) +#pragma intrinsic(_byteswap_ulong) +#define SDL_Swap32(x) _byteswap_ulong(x) +#elif defined(__i386__) && !HAS_BROKEN_BSWAP +SDL_FORCE_INLINE Uint32 +SDL_Swap32(Uint32 x) +{ + __asm__("bswap %0": "=r"(x):"0"(x)); + return x; +} +#elif defined(__x86_64__) +SDL_FORCE_INLINE Uint32 +SDL_Swap32(Uint32 x) +{ + __asm__("bswapl %0": "=r"(x):"0"(x)); + return x; +} +#elif (defined(__powerpc__) || defined(__ppc__)) +SDL_FORCE_INLINE Uint32 +SDL_Swap32(Uint32 x) +{ + Uint32 result; + + __asm__("rlwimi %0,%2,24,16,23": "=&r"(result): "0" (x>>24), "r"(x)); + __asm__("rlwimi %0,%2,8,8,15" : "=&r"(result): "0" (result), "r"(x)); + __asm__("rlwimi %0,%2,24,0,7" : "=&r"(result): "0" (result), "r"(x)); + return result; +} +#elif (defined(__m68k__) && !defined(__mcoldfire__)) +SDL_FORCE_INLINE Uint32 +SDL_Swap32(Uint32 x) +{ + __asm__("rorw #8,%0\n\tswap %0\n\trorw #8,%0": "=d"(x): "0"(x):"cc"); + return x; +} +#elif defined(__WATCOMC__) && defined(__386__) +extern __inline Uint32 SDL_Swap32(Uint32); +#pragma aux SDL_Swap32 = \ + "bswap eax" \ + parm [eax] \ + modify [eax]; +#else + +/** + * Use this function to swap the byte order of a 32-bit value. + * + * \param x the value to be swapped. + * \returns the swapped value. + * + * \sa SDL_SwapBE32 + * \sa SDL_SwapLE32 + */ +SDL_FORCE_INLINE Uint32 +SDL_Swap32(Uint32 x) +{ + return SDL_static_cast(Uint32, ((x << 24) | ((x << 8) & 0x00FF0000) | + ((x >> 8) & 0x0000FF00) | (x >> 24))); +} +#endif + +#if HAS_BUILTIN_BSWAP64 +#define SDL_Swap64(x) __builtin_bswap64(x) +#elif (defined(_MSC_VER) && (_MSC_VER >= 1400)) && !defined(__ICL) +#pragma intrinsic(_byteswap_uint64) +#define SDL_Swap64(x) _byteswap_uint64(x) +#elif defined(__i386__) && !HAS_BROKEN_BSWAP +SDL_FORCE_INLINE Uint64 +SDL_Swap64(Uint64 x) +{ + union { + struct { + Uint32 a, b; + } s; + Uint64 u; + } v; + v.u = x; + __asm__("bswapl %0 ; bswapl %1 ; xchgl %0,%1" + : "=r"(v.s.a), "=r"(v.s.b) + : "0" (v.s.a), "1"(v.s.b)); + return v.u; +} +#elif defined(__x86_64__) +SDL_FORCE_INLINE Uint64 +SDL_Swap64(Uint64 x) +{ + __asm__("bswapq %0": "=r"(x):"0"(x)); + return x; +} +#elif defined(__WATCOMC__) && defined(__386__) +extern __inline Uint64 SDL_Swap64(Uint64); +#pragma aux SDL_Swap64 = \ + "bswap eax" \ + "bswap edx" \ + "xchg eax,edx" \ + parm [eax edx] \ + modify [eax edx]; +#else + +/** + * Use this function to swap the byte order of a 64-bit value. + * + * \param x the value to be swapped. + * \returns the swapped value. + * + * \sa SDL_SwapBE64 + * \sa SDL_SwapLE64 + */ +SDL_FORCE_INLINE Uint64 +SDL_Swap64(Uint64 x) +{ + Uint32 hi, lo; + + /* Separate into high and low 32-bit values and swap them */ + lo = SDL_static_cast(Uint32, x & 0xFFFFFFFF); + x >>= 32; + hi = SDL_static_cast(Uint32, x & 0xFFFFFFFF); + x = SDL_Swap32(lo); + x <<= 32; + x |= SDL_Swap32(hi); + return (x); +} +#endif + + +/** + * Use this function to swap the byte order of a floating point value. + * + * \param x the value to be swapped. + * \returns the swapped value. + * + * \sa SDL_SwapFloatBE + * \sa SDL_SwapFloatLE + */ +SDL_FORCE_INLINE float +SDL_SwapFloat(float x) +{ + union { + float f; + Uint32 ui32; + } swapper; + swapper.f = x; + swapper.ui32 = SDL_Swap32(swapper.ui32); + return swapper.f; +} + +/* remove extra macros */ +#undef HAS_BROKEN_BSWAP +#undef HAS_BUILTIN_BSWAP16 +#undef HAS_BUILTIN_BSWAP32 +#undef HAS_BUILTIN_BSWAP64 + +/** + * \name Swap to native + * Byteswap item from the specified endianness to the native endianness. + */ +/* @{ */ +#if SDL_BYTEORDER == SDL_LIL_ENDIAN +#define SDL_SwapLE16(X) (X) +#define SDL_SwapLE32(X) (X) +#define SDL_SwapLE64(X) (X) +#define SDL_SwapFloatLE(X) (X) +#define SDL_SwapBE16(X) SDL_Swap16(X) +#define SDL_SwapBE32(X) SDL_Swap32(X) +#define SDL_SwapBE64(X) SDL_Swap64(X) +#define SDL_SwapFloatBE(X) SDL_SwapFloat(X) +#else +#define SDL_SwapLE16(X) SDL_Swap16(X) +#define SDL_SwapLE32(X) SDL_Swap32(X) +#define SDL_SwapLE64(X) SDL_Swap64(X) +#define SDL_SwapFloatLE(X) SDL_SwapFloat(X) +#define SDL_SwapBE16(X) (X) +#define SDL_SwapBE32(X) (X) +#define SDL_SwapBE64(X) (X) +#define SDL_SwapFloatBE(X) (X) +#endif +/* @} *//* Swap to native */ + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include "close_code.h" + +#endif /* SDL_endian_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/third_party/tlRender-install-Release/include/SDL2/SDL_error.h b/third_party/tlRender-install-Release/include/SDL2/SDL_error.h new file mode 100644 index 00000000..8d9cde0e --- /dev/null +++ b/third_party/tlRender-install-Release/include/SDL2/SDL_error.h @@ -0,0 +1,163 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2025 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +/** + * # CategoryError + * + * Simple error message routines for SDL. + */ + +#ifndef SDL_error_h_ +#define SDL_error_h_ + +#include "SDL_stdinc.h" + +#include "begin_code.h" +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/* Public functions */ + + +/** + * Set the SDL error message for the current thread. + * + * Calling this function will replace any previous error message that was set. + * + * This function always returns -1, since SDL frequently uses -1 to signify an + * failing result, leading to this idiom: + * + * ```c + * if (error_code) { + * return SDL_SetError("This operation has failed: %d", error_code); + * } + * ``` + * + * \param fmt a printf()-style message format string. + * \param ... additional parameters matching % tokens in the `fmt` string, if + * any. + * \returns always -1. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_ClearError + * \sa SDL_GetError + */ +extern DECLSPEC int SDLCALL SDL_SetError(SDL_PRINTF_FORMAT_STRING const char *fmt, ...) SDL_PRINTF_VARARG_FUNC(1); + +/** + * Retrieve a message about the last error that occurred on the current + * thread. + * + * It is possible for multiple errors to occur before calling SDL_GetError(). + * Only the last error is returned. + * + * The message is only applicable when an SDL function has signaled an error. + * You must check the return values of SDL function calls to determine when to + * appropriately call SDL_GetError(). You should *not* use the results of + * SDL_GetError() to decide if an error has occurred! Sometimes SDL will set + * an error string even when reporting success. + * + * SDL will *not* clear the error string for successful API calls. You *must* + * check return values for failure cases before you can assume the error + * string applies. + * + * Error strings are set per-thread, so an error set in a different thread + * will not interfere with the current thread's operation. + * + * The returned string is internally allocated and must not be freed by the + * application. + * + * \returns a message with information about the specific error that occurred, + * or an empty string if there hasn't been an error message set since + * the last call to SDL_ClearError(). The message is only applicable + * when an SDL function has signaled an error. You must check the + * return values of SDL function calls to determine when to + * appropriately call SDL_GetError(). + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_ClearError + * \sa SDL_SetError + */ +extern DECLSPEC const char *SDLCALL SDL_GetError(void); + +/** + * Get the last error message that was set for the current thread. + * + * This allows the caller to copy the error string into a provided buffer, but + * otherwise operates exactly the same as SDL_GetError(). + * + * \param errstr A buffer to fill with the last error message that was set for + * the current thread. + * \param maxlen The size of the buffer pointed to by the errstr parameter. + * \returns the pointer passed in as the `errstr` parameter. + * + * \since This function is available since SDL 2.0.14. + * + * \sa SDL_GetError + */ +extern DECLSPEC char * SDLCALL SDL_GetErrorMsg(char *errstr, int maxlen); + +/** + * Clear any previous error message for this thread. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetError + * \sa SDL_SetError + */ +extern DECLSPEC void SDLCALL SDL_ClearError(void); + +/** + * \name Internal error functions + * + * \internal + * Private error reporting function - used internally. + */ +/* @{ */ +#define SDL_OutOfMemory() SDL_Error(SDL_ENOMEM) +#define SDL_Unsupported() SDL_Error(SDL_UNSUPPORTED) +#define SDL_InvalidParamError(param) SDL_SetError("Parameter '%s' is invalid", (param)) +typedef enum +{ + SDL_ENOMEM, + SDL_EFREAD, + SDL_EFWRITE, + SDL_EFSEEK, + SDL_UNSUPPORTED, + SDL_LASTERROR +} SDL_errorcode; +/* SDL_Error() unconditionally returns -1. */ +extern DECLSPEC int SDLCALL SDL_Error(SDL_errorcode code); +/* @} *//* Internal error functions */ + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include "close_code.h" + +#endif /* SDL_error_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/third_party/tlRender-install-Release/include/SDL2/SDL_events.h b/third_party/tlRender-install-Release/include/SDL2/SDL_events.h new file mode 100644 index 00000000..b9596c0e --- /dev/null +++ b/third_party/tlRender-install-Release/include/SDL2/SDL_events.h @@ -0,0 +1,1196 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2025 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +/** + * # CategoryEvents + * + * Include file for SDL event handling. + */ + +#ifndef SDL_events_h_ +#define SDL_events_h_ + +#include "SDL_stdinc.h" +#include "SDL_error.h" +#include "SDL_video.h" +#include "SDL_keyboard.h" +#include "SDL_mouse.h" +#include "SDL_joystick.h" +#include "SDL_gamecontroller.h" +#include "SDL_quit.h" +#include "SDL_gesture.h" +#include "SDL_touch.h" + +#include "begin_code.h" +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/* General keyboard/mouse state definitions */ +#define SDL_RELEASED 0 +#define SDL_PRESSED 1 + +/** + * The types of events that can be delivered. + */ +typedef enum SDL_EventType +{ + SDL_FIRSTEVENT = 0, /**< Unused (do not remove) */ + + /* Application events */ + SDL_QUIT = 0x100, /**< User-requested quit */ + + /* These application events have special meaning on iOS, see README-ios.md for details */ + SDL_APP_TERMINATING, /**< The application is being terminated by the OS + Called on iOS in applicationWillTerminate() + Called on Android in onDestroy() + */ + SDL_APP_LOWMEMORY, /**< The application is low on memory, free memory if possible. + Called on iOS in applicationDidReceiveMemoryWarning() + Called on Android in onLowMemory() + */ + SDL_APP_WILLENTERBACKGROUND, /**< The application is about to enter the background + Called on iOS in applicationWillResignActive() + Called on Android in onPause() + */ + SDL_APP_DIDENTERBACKGROUND, /**< The application did enter the background and may not get CPU for some time + Called on iOS in applicationDidEnterBackground() + Called on Android in onPause() + */ + SDL_APP_WILLENTERFOREGROUND, /**< The application is about to enter the foreground + Called on iOS in applicationWillEnterForeground() + Called on Android in onResume() + */ + SDL_APP_DIDENTERFOREGROUND, /**< The application is now interactive + Called on iOS in applicationDidBecomeActive() + Called on Android in onResume() + */ + + SDL_LOCALECHANGED, /**< The user's locale preferences have changed. */ + + /* Display events */ + SDL_DISPLAYEVENT = 0x150, /**< Display state change */ + + /* Window events */ + SDL_WINDOWEVENT = 0x200, /**< Window state change */ + SDL_SYSWMEVENT, /**< System specific event */ + + /* Keyboard events */ + SDL_KEYDOWN = 0x300, /**< Key pressed */ + SDL_KEYUP, /**< Key released */ + SDL_TEXTEDITING, /**< Keyboard text editing (composition) */ + SDL_TEXTINPUT, /**< Keyboard text input */ + SDL_KEYMAPCHANGED, /**< Keymap changed due to a system event such as an + input language or keyboard layout change. + */ + SDL_TEXTEDITING_EXT, /**< Extended keyboard text editing (composition) */ + + /* Mouse events */ + SDL_MOUSEMOTION = 0x400, /**< Mouse moved */ + SDL_MOUSEBUTTONDOWN, /**< Mouse button pressed */ + SDL_MOUSEBUTTONUP, /**< Mouse button released */ + SDL_MOUSEWHEEL, /**< Mouse wheel motion */ + + /* Joystick events */ + SDL_JOYAXISMOTION = 0x600, /**< Joystick axis motion */ + SDL_JOYBALLMOTION, /**< Joystick trackball motion */ + SDL_JOYHATMOTION, /**< Joystick hat position change */ + SDL_JOYBUTTONDOWN, /**< Joystick button pressed */ + SDL_JOYBUTTONUP, /**< Joystick button released */ + SDL_JOYDEVICEADDED, /**< A new joystick has been inserted into the system */ + SDL_JOYDEVICEREMOVED, /**< An opened joystick has been removed */ + SDL_JOYBATTERYUPDATED, /**< Joystick battery level change */ + + /* Game controller events */ + SDL_CONTROLLERAXISMOTION = 0x650, /**< Game controller axis motion */ + SDL_CONTROLLERBUTTONDOWN, /**< Game controller button pressed */ + SDL_CONTROLLERBUTTONUP, /**< Game controller button released */ + SDL_CONTROLLERDEVICEADDED, /**< A new Game controller has been inserted into the system */ + SDL_CONTROLLERDEVICEREMOVED, /**< An opened Game controller has been removed */ + SDL_CONTROLLERDEVICEREMAPPED, /**< The controller mapping was updated */ + SDL_CONTROLLERTOUCHPADDOWN, /**< Game controller touchpad was touched */ + SDL_CONTROLLERTOUCHPADMOTION, /**< Game controller touchpad finger was moved */ + SDL_CONTROLLERTOUCHPADUP, /**< Game controller touchpad finger was lifted */ + SDL_CONTROLLERSENSORUPDATE, /**< Game controller sensor was updated */ + SDL_CONTROLLERUPDATECOMPLETE_RESERVED_FOR_SDL3, + SDL_CONTROLLERSTEAMHANDLEUPDATED, /**< Game controller Steam handle has changed */ + + /* Touch events */ + SDL_FINGERDOWN = 0x700, + SDL_FINGERUP, + SDL_FINGERMOTION, + + /* Gesture events */ + SDL_DOLLARGESTURE = 0x800, + SDL_DOLLARRECORD, + SDL_MULTIGESTURE, + + /* Clipboard events */ + SDL_CLIPBOARDUPDATE = 0x900, /**< The clipboard or primary selection changed */ + + /* Drag and drop events */ + SDL_DROPFILE = 0x1000, /**< The system requests a file open */ + SDL_DROPTEXT, /**< text/plain drag-and-drop event */ + SDL_DROPBEGIN, /**< A new set of drops is beginning (NULL filename) */ + SDL_DROPCOMPLETE, /**< Current set of drops is now complete (NULL filename) */ + + /* Audio hotplug events */ + SDL_AUDIODEVICEADDED = 0x1100, /**< A new audio device is available */ + SDL_AUDIODEVICEREMOVED, /**< An audio device has been removed. */ + + /* Sensor events */ + SDL_SENSORUPDATE = 0x1200, /**< A sensor was updated */ + + /* Render events */ + SDL_RENDER_TARGETS_RESET = 0x2000, /**< The render targets have been reset and their contents need to be updated */ + SDL_RENDER_DEVICE_RESET, /**< The device has been reset and all textures need to be recreated */ + + /* Internal events */ + SDL_POLLSENTINEL = 0x7F00, /**< Signals the end of an event poll cycle */ + + /** Events SDL_USEREVENT through SDL_LASTEVENT are for your use, + * and should be allocated with SDL_RegisterEvents() + */ + SDL_USEREVENT = 0x8000, + + /** + * This last event is only for bounding internal arrays + */ + SDL_LASTEVENT = 0xFFFF +} SDL_EventType; + +/** + * Fields shared by every event + */ +typedef struct SDL_CommonEvent +{ + Uint32 type; + Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ +} SDL_CommonEvent; + +/** + * Display state change event data (event.display.*) + */ +typedef struct SDL_DisplayEvent +{ + Uint32 type; /**< SDL_DISPLAYEVENT */ + Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ + Uint32 display; /**< The associated display index */ + Uint8 event; /**< SDL_DisplayEventID */ + Uint8 padding1; + Uint8 padding2; + Uint8 padding3; + Sint32 data1; /**< event dependent data */ +} SDL_DisplayEvent; + +/** + * Window state change event data (event.window.*) + */ +typedef struct SDL_WindowEvent +{ + Uint32 type; /**< SDL_WINDOWEVENT */ + Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ + Uint32 windowID; /**< The associated window */ + Uint8 event; /**< SDL_WindowEventID */ + Uint8 padding1; + Uint8 padding2; + Uint8 padding3; + Sint32 data1; /**< event dependent data */ + Sint32 data2; /**< event dependent data */ +} SDL_WindowEvent; + +/** + * Keyboard button event structure (event.key.*) + */ +typedef struct SDL_KeyboardEvent +{ + Uint32 type; /**< SDL_KEYDOWN or SDL_KEYUP */ + Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ + Uint32 windowID; /**< The window with keyboard focus, if any */ + Uint8 state; /**< SDL_PRESSED or SDL_RELEASED */ + Uint8 repeat; /**< Non-zero if this is a key repeat */ + Uint8 padding2; + Uint8 padding3; + SDL_Keysym keysym; /**< The key that was pressed or released */ +} SDL_KeyboardEvent; + +#define SDL_TEXTEDITINGEVENT_TEXT_SIZE (32) + +/** + * Keyboard text editing event structure (event.edit.*) + */ +typedef struct SDL_TextEditingEvent +{ + Uint32 type; /**< SDL_TEXTEDITING */ + Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ + Uint32 windowID; /**< The window with keyboard focus, if any */ + char text[SDL_TEXTEDITINGEVENT_TEXT_SIZE]; /**< The editing text */ + Sint32 start; /**< The start cursor of selected editing text */ + Sint32 length; /**< The length of selected editing text */ +} SDL_TextEditingEvent; + +/** + * Extended keyboard text editing event structure (event.editExt.*) when text + * would be truncated if stored in the text buffer SDL_TextEditingEvent + */ +typedef struct SDL_TextEditingExtEvent +{ + Uint32 type; /**< SDL_TEXTEDITING_EXT */ + Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ + Uint32 windowID; /**< The window with keyboard focus, if any */ + char* text; /**< The editing text, which should be freed with SDL_free(), and will not be NULL */ + Sint32 start; /**< The start cursor of selected editing text */ + Sint32 length; /**< The length of selected editing text */ +} SDL_TextEditingExtEvent; + +/** + * The maximum bytes of text that can be supplied in an SDL_TextInputEvent. + */ +#define SDL_TEXTINPUTEVENT_TEXT_SIZE (32) + +/** + * Keyboard text input event structure (event.text.*) + * + * `text` is limited to SDL_TEXTINPUTEVENT_TEXT_SIZE bytes. If the incoming + * string is larger than this, SDL will split it and send it in pieces, across + * multiple events. The string is in UTF-8 format, and if split, SDL + * guarantees that it will not split in the middle of a UTF-8 sequence, so any + * event will only contain complete codepoints. However, if there are several + * codepoints that go together into a single glyph (like an emoji "thumbs up" + * followed by a skin color), they may be split between events. + * + * This event will never be delivered unless text input is enabled by calling + * SDL_StartTextInput(). Text input is enabled by default on desktop + * platforms, and disabled by default on mobile platforms! + * + * \sa SDL_StartTextInput + * \sa SDL_StopTextInput + */ +typedef struct SDL_TextInputEvent +{ + Uint32 type; /**< SDL_TEXTINPUT */ + Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ + Uint32 windowID; /**< The window with keyboard focus, if any */ + char text[SDL_TEXTINPUTEVENT_TEXT_SIZE]; /**< The input text; UTF-8 encoded. */ +} SDL_TextInputEvent; + +/** + * Mouse motion event structure (event.motion.*) + */ +typedef struct SDL_MouseMotionEvent +{ + Uint32 type; /**< SDL_MOUSEMOTION */ + Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ + Uint32 windowID; /**< The window with mouse focus, if any */ + Uint32 which; /**< The mouse instance id, or SDL_TOUCH_MOUSEID */ + Uint32 state; /**< The current button state */ + Sint32 x; /**< X coordinate, relative to window */ + Sint32 y; /**< Y coordinate, relative to window */ + Sint32 xrel; /**< The relative motion in the X direction */ + Sint32 yrel; /**< The relative motion in the Y direction */ +} SDL_MouseMotionEvent; + +/** + * Mouse button event structure (event.button.*) + */ +typedef struct SDL_MouseButtonEvent +{ + Uint32 type; /**< SDL_MOUSEBUTTONDOWN or SDL_MOUSEBUTTONUP */ + Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ + Uint32 windowID; /**< The window with mouse focus, if any */ + Uint32 which; /**< The mouse instance id, or SDL_TOUCH_MOUSEID */ + Uint8 button; /**< The mouse button index */ + Uint8 state; /**< SDL_PRESSED or SDL_RELEASED */ + Uint8 clicks; /**< 1 for single-click, 2 for double-click, etc. */ + Uint8 padding1; + Sint32 x; /**< X coordinate, relative to window */ + Sint32 y; /**< Y coordinate, relative to window */ +} SDL_MouseButtonEvent; + +/** + * Mouse wheel event structure (event.wheel.*) + */ +typedef struct SDL_MouseWheelEvent +{ + Uint32 type; /**< SDL_MOUSEWHEEL */ + Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ + Uint32 windowID; /**< The window with mouse focus, if any */ + Uint32 which; /**< The mouse instance id, or SDL_TOUCH_MOUSEID */ + Sint32 x; /**< The amount scrolled horizontally, positive to the right and negative to the left */ + Sint32 y; /**< The amount scrolled vertically, positive away from the user and negative toward the user */ + Uint32 direction; /**< Set to one of the SDL_MOUSEWHEEL_* defines. When FLIPPED the values in X and Y will be opposite. Multiply by -1 to change them back */ + float preciseX; /**< The amount scrolled horizontally, positive to the right and negative to the left, with float precision (added in 2.0.18) */ + float preciseY; /**< The amount scrolled vertically, positive away from the user and negative toward the user, with float precision (added in 2.0.18) */ + Sint32 mouseX; /**< X coordinate, relative to window (added in 2.26.0) */ + Sint32 mouseY; /**< Y coordinate, relative to window (added in 2.26.0) */ +} SDL_MouseWheelEvent; + +/** + * Joystick axis motion event structure (event.jaxis.*) + */ +typedef struct SDL_JoyAxisEvent +{ + Uint32 type; /**< SDL_JOYAXISMOTION */ + Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ + SDL_JoystickID which; /**< The joystick instance id */ + Uint8 axis; /**< The joystick axis index */ + Uint8 padding1; + Uint8 padding2; + Uint8 padding3; + Sint16 value; /**< The axis value (range: -32768 to 32767) */ + Uint16 padding4; +} SDL_JoyAxisEvent; + +/** + * Joystick trackball motion event structure (event.jball.*) + */ +typedef struct SDL_JoyBallEvent +{ + Uint32 type; /**< SDL_JOYBALLMOTION */ + Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ + SDL_JoystickID which; /**< The joystick instance id */ + Uint8 ball; /**< The joystick trackball index */ + Uint8 padding1; + Uint8 padding2; + Uint8 padding3; + Sint16 xrel; /**< The relative motion in the X direction */ + Sint16 yrel; /**< The relative motion in the Y direction */ +} SDL_JoyBallEvent; + +/** + * Joystick hat position change event structure (event.jhat.*) + */ +typedef struct SDL_JoyHatEvent +{ + Uint32 type; /**< SDL_JOYHATMOTION */ + Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ + SDL_JoystickID which; /**< The joystick instance id */ + Uint8 hat; /**< The joystick hat index */ + Uint8 value; /**< The hat position value. + * \sa SDL_HAT_LEFTUP SDL_HAT_UP SDL_HAT_RIGHTUP + * \sa SDL_HAT_LEFT SDL_HAT_CENTERED SDL_HAT_RIGHT + * \sa SDL_HAT_LEFTDOWN SDL_HAT_DOWN SDL_HAT_RIGHTDOWN + * + * Note that zero means the POV is centered. + */ + Uint8 padding1; + Uint8 padding2; +} SDL_JoyHatEvent; + +/** + * Joystick button event structure (event.jbutton.*) + */ +typedef struct SDL_JoyButtonEvent +{ + Uint32 type; /**< SDL_JOYBUTTONDOWN or SDL_JOYBUTTONUP */ + Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ + SDL_JoystickID which; /**< The joystick instance id */ + Uint8 button; /**< The joystick button index */ + Uint8 state; /**< SDL_PRESSED or SDL_RELEASED */ + Uint8 padding1; + Uint8 padding2; +} SDL_JoyButtonEvent; + +/** + * Joystick device event structure (event.jdevice.*) + * + * SDL will send JOYSTICK_ADDED events for devices that are already plugged in + * during SDL_Init. + * + * \sa SDL_ControllerDeviceEvent + */ +typedef struct SDL_JoyDeviceEvent +{ + Uint32 type; /**< SDL_JOYDEVICEADDED or SDL_JOYDEVICEREMOVED */ + Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ + Sint32 which; /**< The joystick device index for the ADDED event, instance id for the REMOVED event */ +} SDL_JoyDeviceEvent; + +/** + * Joysick battery level change event structure (event.jbattery.*) + */ +typedef struct SDL_JoyBatteryEvent +{ + Uint32 type; /**< SDL_JOYBATTERYUPDATED */ + Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ + SDL_JoystickID which; /**< The joystick instance id */ + SDL_JoystickPowerLevel level; /**< The joystick battery level */ +} SDL_JoyBatteryEvent; + +/** + * Game controller axis motion event structure (event.caxis.*) + */ +typedef struct SDL_ControllerAxisEvent +{ + Uint32 type; /**< SDL_CONTROLLERAXISMOTION */ + Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ + SDL_JoystickID which; /**< The joystick instance id */ + Uint8 axis; /**< The controller axis (SDL_GameControllerAxis) */ + Uint8 padding1; + Uint8 padding2; + Uint8 padding3; + Sint16 value; /**< The axis value (range: -32768 to 32767) */ + Uint16 padding4; +} SDL_ControllerAxisEvent; + + +/** + * Game controller button event structure (event.cbutton.*) + */ +typedef struct SDL_ControllerButtonEvent +{ + Uint32 type; /**< SDL_CONTROLLERBUTTONDOWN or SDL_CONTROLLERBUTTONUP */ + Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ + SDL_JoystickID which; /**< The joystick instance id */ + Uint8 button; /**< The controller button (SDL_GameControllerButton) */ + Uint8 state; /**< SDL_PRESSED or SDL_RELEASED */ + Uint8 padding1; + Uint8 padding2; +} SDL_ControllerButtonEvent; + + +/** + * Controller device event structure (event.cdevice.*) + * + * Joysticks that are supported game controllers receive both an + * SDL_JoyDeviceEvent and an SDL_ControllerDeviceEvent. + * + * SDL will send CONTROLLERDEVICEADDED events for joysticks that are already + * plugged in during SDL_Init() and are recognized as game controllers. + */ +typedef struct SDL_ControllerDeviceEvent +{ + Uint32 type; /**< SDL_CONTROLLERDEVICEADDED, SDL_CONTROLLERDEVICEREMOVED, SDL_CONTROLLERDEVICEREMAPPED, or SDL_CONTROLLERSTEAMHANDLEUPDATED */ + Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ + Sint32 which; /**< The joystick device index for the ADDED event, instance id for the REMOVED or REMAPPED event */ +} SDL_ControllerDeviceEvent; + +/** + * Game controller touchpad event structure (event.ctouchpad.*) + */ +typedef struct SDL_ControllerTouchpadEvent +{ + Uint32 type; /**< SDL_CONTROLLERTOUCHPADDOWN or SDL_CONTROLLERTOUCHPADMOTION or SDL_CONTROLLERTOUCHPADUP */ + Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ + SDL_JoystickID which; /**< The joystick instance id */ + Sint32 touchpad; /**< The index of the touchpad */ + Sint32 finger; /**< The index of the finger on the touchpad */ + float x; /**< Normalized in the range 0...1 with 0 being on the left */ + float y; /**< Normalized in the range 0...1 with 0 being at the top */ + float pressure; /**< Normalized in the range 0...1 */ +} SDL_ControllerTouchpadEvent; + +/** + * Game controller sensor event structure (event.csensor.*) + */ +typedef struct SDL_ControllerSensorEvent +{ + Uint32 type; /**< SDL_CONTROLLERSENSORUPDATE */ + Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ + SDL_JoystickID which; /**< The joystick instance id */ + Sint32 sensor; /**< The type of the sensor, one of the values of SDL_SensorType */ + float data[3]; /**< Up to 3 values from the sensor, as defined in SDL_sensor.h */ + Uint64 timestamp_us; /**< The timestamp of the sensor reading in microseconds, if the hardware provides this information. */ +} SDL_ControllerSensorEvent; + +/** + * Audio device event structure (event.adevice.*) + */ +typedef struct SDL_AudioDeviceEvent +{ + Uint32 type; /**< SDL_AUDIODEVICEADDED, or SDL_AUDIODEVICEREMOVED */ + Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ + Uint32 which; /**< The audio device index for the ADDED event (valid until next SDL_GetNumAudioDevices() call), SDL_AudioDeviceID for the REMOVED event */ + Uint8 iscapture; /**< zero if an output device, non-zero if a capture device. */ + Uint8 padding1; + Uint8 padding2; + Uint8 padding3; +} SDL_AudioDeviceEvent; + + +/** + * Touch finger event structure (event.tfinger.*) + */ +typedef struct SDL_TouchFingerEvent +{ + Uint32 type; /**< SDL_FINGERMOTION or SDL_FINGERDOWN or SDL_FINGERUP */ + Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ + SDL_TouchID touchId; /**< The touch device id */ + SDL_FingerID fingerId; + float x; /**< Normalized in the range 0...1 */ + float y; /**< Normalized in the range 0...1 */ + float dx; /**< Normalized in the range -1...1 */ + float dy; /**< Normalized in the range -1...1 */ + float pressure; /**< Normalized in the range 0...1 */ + Uint32 windowID; /**< The window underneath the finger, if any */ +} SDL_TouchFingerEvent; + + +/** + * Multiple Finger Gesture Event (event.mgesture.*) + */ +typedef struct SDL_MultiGestureEvent +{ + Uint32 type; /**< SDL_MULTIGESTURE */ + Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ + SDL_TouchID touchId; /**< The touch device id */ + float dTheta; + float dDist; + float x; + float y; + Uint16 numFingers; + Uint16 padding; +} SDL_MultiGestureEvent; + + +/** + * Dollar Gesture Event (event.dgesture.*) + */ +typedef struct SDL_DollarGestureEvent +{ + Uint32 type; /**< SDL_DOLLARGESTURE or SDL_DOLLARRECORD */ + Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ + SDL_TouchID touchId; /**< The touch device id */ + SDL_GestureID gestureId; + Uint32 numFingers; + float error; + float x; /**< Normalized center of gesture */ + float y; /**< Normalized center of gesture */ +} SDL_DollarGestureEvent; + + +/** + * An event used to request a file open by the system (event.drop.*) + * + * This event is enabled by default, you can disable it with SDL_EventState(). + * + * If this event is enabled, you must free the filename in the event. + */ +typedef struct SDL_DropEvent +{ + Uint32 type; /**< SDL_DROPBEGIN or SDL_DROPFILE or SDL_DROPTEXT or SDL_DROPCOMPLETE */ + Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ + char *file; /**< The file name, which should be freed with SDL_free(), is NULL on begin/complete */ + Uint32 windowID; /**< The window that was dropped on, if any */ +} SDL_DropEvent; + + +/** + * Sensor event structure (event.sensor.*) + */ +typedef struct SDL_SensorEvent +{ + Uint32 type; /**< SDL_SENSORUPDATE */ + Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ + Sint32 which; /**< The instance ID of the sensor */ + float data[6]; /**< Up to 6 values from the sensor - additional values can be queried using SDL_SensorGetData() */ + Uint64 timestamp_us; /**< The timestamp of the sensor reading in microseconds, if the hardware provides this information. */ +} SDL_SensorEvent; + +/** + * The "quit requested" event + */ +typedef struct SDL_QuitEvent +{ + Uint32 type; /**< SDL_QUIT */ + Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ +} SDL_QuitEvent; + +/** + * A user-defined event type (event.user.*) + */ +typedef struct SDL_UserEvent +{ + Uint32 type; /**< SDL_USEREVENT through SDL_LASTEVENT-1 */ + Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ + Uint32 windowID; /**< The associated window if any */ + Sint32 code; /**< User defined event code */ + void *data1; /**< User defined data pointer */ + void *data2; /**< User defined data pointer */ +} SDL_UserEvent; + + +struct SDL_SysWMmsg; +typedef struct SDL_SysWMmsg SDL_SysWMmsg; + +/** + * A video driver dependent system event (event.syswm.*) + * + * This event is disabled by default, you can enable it with SDL_EventState() + * + * If you want to use this event, you should include SDL_syswm.h. + */ +typedef struct SDL_SysWMEvent +{ + Uint32 type; /**< SDL_SYSWMEVENT */ + Uint32 timestamp; /**< In milliseconds, populated using SDL_GetTicks() */ + SDL_SysWMmsg *msg; /**< driver dependent data, defined in SDL_syswm.h */ +} SDL_SysWMEvent; + +/** + * General event structure + * + * The SDL_Event structure is the core of all event handling in SDL. SDL_Event + * is a union of all event structures used in SDL. + */ +typedef union SDL_Event +{ + Uint32 type; /**< Event type, shared with all events */ + SDL_CommonEvent common; /**< Common event data */ + SDL_DisplayEvent display; /**< Display event data */ + SDL_WindowEvent window; /**< Window event data */ + SDL_KeyboardEvent key; /**< Keyboard event data */ + SDL_TextEditingEvent edit; /**< Text editing event data */ + SDL_TextEditingExtEvent editExt; /**< Extended text editing event data */ + SDL_TextInputEvent text; /**< Text input event data */ + SDL_MouseMotionEvent motion; /**< Mouse motion event data */ + SDL_MouseButtonEvent button; /**< Mouse button event data */ + SDL_MouseWheelEvent wheel; /**< Mouse wheel event data */ + SDL_JoyAxisEvent jaxis; /**< Joystick axis event data */ + SDL_JoyBallEvent jball; /**< Joystick ball event data */ + SDL_JoyHatEvent jhat; /**< Joystick hat event data */ + SDL_JoyButtonEvent jbutton; /**< Joystick button event data */ + SDL_JoyDeviceEvent jdevice; /**< Joystick device change event data */ + SDL_JoyBatteryEvent jbattery; /**< Joystick battery event data */ + SDL_ControllerAxisEvent caxis; /**< Game Controller axis event data */ + SDL_ControllerButtonEvent cbutton; /**< Game Controller button event data */ + SDL_ControllerDeviceEvent cdevice; /**< Game Controller device event data */ + SDL_ControllerTouchpadEvent ctouchpad; /**< Game Controller touchpad event data */ + SDL_ControllerSensorEvent csensor; /**< Game Controller sensor event data */ + SDL_AudioDeviceEvent adevice; /**< Audio device event data */ + SDL_SensorEvent sensor; /**< Sensor event data */ + SDL_QuitEvent quit; /**< Quit request event data */ + SDL_UserEvent user; /**< Custom event data */ + SDL_SysWMEvent syswm; /**< System dependent window event data */ + SDL_TouchFingerEvent tfinger; /**< Touch finger event data */ + SDL_MultiGestureEvent mgesture; /**< Gesture event data */ + SDL_DollarGestureEvent dgesture; /**< Gesture event data */ + SDL_DropEvent drop; /**< Drag and drop event data */ + + /* This is necessary for ABI compatibility between Visual C++ and GCC. + Visual C++ will respect the push pack pragma and use 52 bytes (size of + SDL_TextEditingEvent, the largest structure for 32-bit and 64-bit + architectures) for this union, and GCC will use the alignment of the + largest datatype within the union, which is 8 bytes on 64-bit + architectures. + + So... we'll add padding to force the size to be 56 bytes for both. + + On architectures where pointers are 16 bytes, this needs rounding up to + the next multiple of 16, 64, and on architectures where pointers are + even larger the size of SDL_UserEvent will dominate as being 3 pointers. + */ + Uint8 padding[sizeof(void *) <= 8 ? 56 : sizeof(void *) == 16 ? 64 : 3 * sizeof(void *)]; +} SDL_Event; + +/* Make sure we haven't broken binary compatibility */ +SDL_COMPILE_TIME_ASSERT(SDL_Event, sizeof(SDL_Event) == sizeof(((SDL_Event *)NULL)->padding)); + + +/* Function prototypes */ + +/** + * Pump the event loop, gathering events from the input devices. + * + * This function updates the event queue and internal input device state. + * + * **WARNING**: This should only be run in the thread that initialized the + * video subsystem, and for extra safety, you should consider only doing those + * things on the main thread in any case. + * + * SDL_PumpEvents() gathers all the pending input information from devices and + * places it in the event queue. Without calls to SDL_PumpEvents() no events + * would ever be placed on the queue. Often the need for calls to + * SDL_PumpEvents() is hidden from the user since SDL_PollEvent() and + * SDL_WaitEvent() implicitly call SDL_PumpEvents(). However, if you are not + * polling or waiting for events (e.g. you are filtering them), then you must + * call SDL_PumpEvents() to force an event queue update. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_PollEvent + * \sa SDL_WaitEvent + */ +extern DECLSPEC void SDLCALL SDL_PumpEvents(void); + +/* @{ */ +typedef enum SDL_eventaction +{ + SDL_ADDEVENT, + SDL_PEEKEVENT, + SDL_GETEVENT +} SDL_eventaction; + +/** + * Check the event queue for messages and optionally return them. + * + * `action` may be any of the following: + * + * - `SDL_ADDEVENT`: up to `numevents` events will be added to the back of the + * event queue. + * - `SDL_PEEKEVENT`: `numevents` events at the front of the event queue, + * within the specified minimum and maximum type, will be returned to the + * caller and will _not_ be removed from the queue. + * - `SDL_GETEVENT`: up to `numevents` events at the front of the event queue, + * within the specified minimum and maximum type, will be returned to the + * caller and will be removed from the queue. + * + * You may have to call SDL_PumpEvents() before calling this function. + * Otherwise, the events may not be ready to be filtered when you call + * SDL_PeepEvents(). + * + * This function is thread-safe. + * + * \param events destination buffer for the retrieved events. + * \param numevents if action is SDL_ADDEVENT, the number of events to add + * back to the event queue; if action is SDL_PEEKEVENT or + * SDL_GETEVENT, the maximum number of events to retrieve. + * \param action action to take; see [[#action|Remarks]] for details. + * \param minType minimum value of the event type to be considered; + * SDL_FIRSTEVENT is a safe choice. + * \param maxType maximum value of the event type to be considered; + * SDL_LASTEVENT is a safe choice. + * \returns the number of events actually stored or a negative error code on + * failure; call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_PollEvent + * \sa SDL_PumpEvents + * \sa SDL_PushEvent + */ +extern DECLSPEC int SDLCALL SDL_PeepEvents(SDL_Event * events, int numevents, + SDL_eventaction action, + Uint32 minType, Uint32 maxType); +/* @} */ + +/** + * Check for the existence of a certain event type in the event queue. + * + * If you need to check for a range of event types, use SDL_HasEvents() + * instead. + * + * \param type the type of event to be queried; see SDL_EventType for details. + * \returns SDL_TRUE if events matching `type` are present, or SDL_FALSE if + * events matching `type` are not present. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_HasEvents + */ +extern DECLSPEC SDL_bool SDLCALL SDL_HasEvent(Uint32 type); + + +/** + * Check for the existence of certain event types in the event queue. + * + * If you need to check for a single event type, use SDL_HasEvent() instead. + * + * \param minType the low end of event type to be queried, inclusive; see + * SDL_EventType for details. + * \param maxType the high end of event type to be queried, inclusive; see + * SDL_EventType for details. + * \returns SDL_TRUE if events with type >= `minType` and <= `maxType` are + * present, or SDL_FALSE if not. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_HasEvents + */ +extern DECLSPEC SDL_bool SDLCALL SDL_HasEvents(Uint32 minType, Uint32 maxType); + +/** + * Clear events of a specific type from the event queue. + * + * This will unconditionally remove any events from the queue that match + * `type`. If you need to remove a range of event types, use SDL_FlushEvents() + * instead. + * + * It's also normal to just ignore events you don't care about in your event + * loop without calling this function. + * + * This function only affects currently queued events. If you want to make + * sure that all pending OS events are flushed, you can call SDL_PumpEvents() + * on the main thread immediately before the flush call. + * + * \param type the type of event to be cleared; see SDL_EventType for details. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_FlushEvents + */ +extern DECLSPEC void SDLCALL SDL_FlushEvent(Uint32 type); + +/** + * Clear events of a range of types from the event queue. + * + * This will unconditionally remove any events from the queue that are in the + * range of `minType` to `maxType`, inclusive. If you need to remove a single + * event type, use SDL_FlushEvent() instead. + * + * It's also normal to just ignore events you don't care about in your event + * loop without calling this function. + * + * This function only affects currently queued events. If you want to make + * sure that all pending OS events are flushed, you can call SDL_PumpEvents() + * on the main thread immediately before the flush call. + * + * \param minType the low end of event type to be cleared, inclusive; see + * SDL_EventType for details. + * \param maxType the high end of event type to be cleared, inclusive; see + * SDL_EventType for details. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_FlushEvent + */ +extern DECLSPEC void SDLCALL SDL_FlushEvents(Uint32 minType, Uint32 maxType); + +/** + * Poll for currently pending events. + * + * If `event` is not NULL, the next event is removed from the queue and stored + * in the SDL_Event structure pointed to by `event`. The 1 returned refers to + * this event, immediately stored in the SDL Event structure -- not an event + * to follow. + * + * If `event` is NULL, it simply returns 1 if there is an event in the queue, + * but will not remove it from the queue. + * + * As this function may implicitly call SDL_PumpEvents(), you can only call + * this function in the thread that set the video mode. + * + * SDL_PollEvent() is the favored way of receiving system events since it can + * be done from the main loop and does not suspend the main loop while waiting + * on an event to be posted. + * + * The common practice is to fully process the event queue once every frame, + * usually as a first step before updating the game's state: + * + * ```c + * while (game_is_still_running) { + * SDL_Event event; + * while (SDL_PollEvent(&event)) { // poll until all events are handled! + * // decide what to do with this event. + * } + * + * // update game state, draw the current frame + * } + * ``` + * + * \param event the SDL_Event structure to be filled with the next event from + * the queue, or NULL. + * \returns 1 if there is a pending event or 0 if there are none available. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetEventFilter + * \sa SDL_PeepEvents + * \sa SDL_PushEvent + * \sa SDL_SetEventFilter + * \sa SDL_WaitEvent + * \sa SDL_WaitEventTimeout + */ +extern DECLSPEC int SDLCALL SDL_PollEvent(SDL_Event * event); + +/** + * Wait indefinitely for the next available event. + * + * If `event` is not NULL, the next event is removed from the queue and stored + * in the SDL_Event structure pointed to by `event`. + * + * As this function may implicitly call SDL_PumpEvents(), you can only call + * this function in the thread that initialized the video subsystem. + * + * \param event the SDL_Event structure to be filled in with the next event + * from the queue, or NULL. + * \returns 1 on success or 0 if there was an error while waiting for events; + * call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_PollEvent + * \sa SDL_PumpEvents + * \sa SDL_WaitEventTimeout + */ +extern DECLSPEC int SDLCALL SDL_WaitEvent(SDL_Event * event); + +/** + * Wait until the specified timeout (in milliseconds) for the next available + * event. + * + * If `event` is not NULL, the next event is removed from the queue and stored + * in the SDL_Event structure pointed to by `event`. + * + * As this function may implicitly call SDL_PumpEvents(), you can only call + * this function in the thread that initialized the video subsystem. + * + * \param event the SDL_Event structure to be filled in with the next event + * from the queue, or NULL. + * \param timeout the maximum number of milliseconds to wait for the next + * available event. + * \returns 1 on success or 0 if there was an error while waiting for events; + * call SDL_GetError() for more information. This also returns 0 if + * the timeout elapsed without an event arriving. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_PollEvent + * \sa SDL_PumpEvents + * \sa SDL_WaitEvent + */ +extern DECLSPEC int SDLCALL SDL_WaitEventTimeout(SDL_Event * event, + int timeout); + +/** + * Add an event to the event queue. + * + * The event queue can actually be used as a two way communication channel. + * Not only can events be read from the queue, but the user can also push + * their own events onto it. `event` is a pointer to the event structure you + * wish to push onto the queue. The event is copied into the queue, and the + * caller may dispose of the memory pointed to after SDL_PushEvent() returns. + * + * Note: Pushing device input events onto the queue doesn't modify the state + * of the device within SDL. + * + * This function is thread-safe, and can be called from other threads safely. + * + * Note: Events pushed onto the queue with SDL_PushEvent() get passed through + * the event filter but events added with SDL_PeepEvents() do not. + * + * For pushing application-specific events, please use SDL_RegisterEvents() to + * get an event type that does not conflict with other code that also wants + * its own custom event types. + * + * \param event the SDL_Event to be added to the queue. + * \returns 1 on success, 0 if the event was filtered, or a negative error + * code on failure; call SDL_GetError() for more information. A + * common reason for error is the event queue being full. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_PeepEvents + * \sa SDL_PollEvent + * \sa SDL_RegisterEvents + */ +extern DECLSPEC int SDLCALL SDL_PushEvent(SDL_Event * event); + +/** + * A function pointer used for callbacks that watch the event queue. + * + * \param userdata what was passed as `userdata` to SDL_SetEventFilter() or + * SDL_AddEventWatch, etc. + * \param event the event that triggered the callback. + * \returns 1 to permit event to be added to the queue, and 0 to disallow it. + * When used with SDL_AddEventWatch, the return value is ignored. + * + * \sa SDL_SetEventFilter + * \sa SDL_AddEventWatch + */ +typedef int (SDLCALL * SDL_EventFilter) (void *userdata, SDL_Event * event); + +/** + * Set up a filter to process all events before they change internal state and + * are posted to the internal event queue. + * + * If the filter function returns 1 when called, then the event will be added + * to the internal queue. If it returns 0, then the event will be dropped from + * the queue, but the internal state will still be updated. This allows + * selective filtering of dynamically arriving events. + * + * **WARNING**: Be very careful of what you do in the event filter function, + * as it may run in a different thread! + * + * On platforms that support it, if the quit event is generated by an + * interrupt signal (e.g. pressing Ctrl-C), it will be delivered to the + * application at the next event poll. + * + * There is one caveat when dealing with the SDL_QuitEvent event type. The + * event filter is only called when the window manager desires to close the + * application window. If the event filter returns 1, then the window will be + * closed, otherwise the window will remain open if possible. + * + * Note: Disabled events never make it to the event filter function; see + * SDL_EventState(). + * + * Note: If you just want to inspect events without filtering, you should use + * SDL_AddEventWatch() instead. + * + * Note: Events pushed onto the queue with SDL_PushEvent() get passed through + * the event filter, but events pushed onto the queue with SDL_PeepEvents() do + * not. + * + * \param filter An SDL_EventFilter function to call when an event happens. + * \param userdata a pointer that is passed to `filter`. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_AddEventWatch + * \sa SDL_EventState + * \sa SDL_GetEventFilter + * \sa SDL_PeepEvents + * \sa SDL_PushEvent + */ +extern DECLSPEC void SDLCALL SDL_SetEventFilter(SDL_EventFilter filter, + void *userdata); + +/** + * Query the current event filter. + * + * This function can be used to "chain" filters, by saving the existing filter + * before replacing it with a function that will call that saved filter. + * + * \param filter the current callback function will be stored here. + * \param userdata the pointer that is passed to the current event filter will + * be stored here. + * \returns SDL_TRUE on success or SDL_FALSE if there is no event filter set. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_SetEventFilter + */ +extern DECLSPEC SDL_bool SDLCALL SDL_GetEventFilter(SDL_EventFilter * filter, + void **userdata); + +/** + * Add a callback to be triggered when an event is added to the event queue. + * + * `filter` will be called when an event happens, and its return value is + * ignored. + * + * **WARNING**: Be very careful of what you do in the event filter function, + * as it may run in a different thread! + * + * If the quit event is generated by a signal (e.g. SIGINT), it will bypass + * the internal queue and be delivered to the watch callback immediately, and + * arrive at the next event poll. + * + * Note: the callback is called for events posted by the user through + * SDL_PushEvent(), but not for disabled events, nor for events by a filter + * callback set with SDL_SetEventFilter(), nor for events posted by the user + * through SDL_PeepEvents(). + * + * \param filter an SDL_EventFilter function to call when an event happens. + * \param userdata a pointer that is passed to `filter`. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_DelEventWatch + * \sa SDL_SetEventFilter + */ +extern DECLSPEC void SDLCALL SDL_AddEventWatch(SDL_EventFilter filter, + void *userdata); + +/** + * Remove an event watch callback added with SDL_AddEventWatch(). + * + * This function takes the same input as SDL_AddEventWatch() to identify and + * delete the corresponding callback. + * + * \param filter the function originally passed to SDL_AddEventWatch(). + * \param userdata the pointer originally passed to SDL_AddEventWatch(). + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_AddEventWatch + */ +extern DECLSPEC void SDLCALL SDL_DelEventWatch(SDL_EventFilter filter, + void *userdata); + +/** + * Run a specific filter function on the current event queue, removing any + * events for which the filter returns 0. + * + * See SDL_SetEventFilter() for more information. Unlike SDL_SetEventFilter(), + * this function does not change the filter permanently, it only uses the + * supplied filter until this function returns. + * + * \param filter the SDL_EventFilter function to call when an event happens. + * \param userdata a pointer that is passed to `filter`. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetEventFilter + * \sa SDL_SetEventFilter + */ +extern DECLSPEC void SDLCALL SDL_FilterEvents(SDL_EventFilter filter, + void *userdata); + +/* @{ */ +#define SDL_QUERY -1 +#define SDL_IGNORE 0 +#define SDL_DISABLE 0 +#define SDL_ENABLE 1 + +/** + * Set the state of processing events by type. + * + * `state` may be any of the following: + * + * - `SDL_QUERY`: returns the current processing state of the specified event + * - `SDL_IGNORE` (aka `SDL_DISABLE`): the event will automatically be dropped + * from the event queue and will not be filtered + * - `SDL_ENABLE`: the event will be processed normally + * + * \param type the type of event; see SDL_EventType for details. + * \param state how to process the event. + * \returns `SDL_DISABLE` or `SDL_ENABLE`, representing the processing state + * of the event before this function makes any changes to it. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetEventState + */ +extern DECLSPEC Uint8 SDLCALL SDL_EventState(Uint32 type, int state); +/* @} */ +#define SDL_GetEventState(type) SDL_EventState(type, SDL_QUERY) + +/** + * Allocate a set of user-defined events, and return the beginning event + * number for that set of events. + * + * Calling this function with `numevents` <= 0 is an error and will return + * (Uint32)-1. + * + * Note, (Uint32)-1 means the maximum unsigned 32-bit integer value (or + * 0xFFFFFFFF), but is clearer to write. + * + * \param numevents the number of events to be allocated. + * \returns the beginning event number, or (Uint32)-1 if there are not enough + * user-defined events left. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_PushEvent + */ +extern DECLSPEC Uint32 SDLCALL SDL_RegisterEvents(int numevents); + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include "close_code.h" + +#endif /* SDL_events_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/third_party/tlRender-install-Release/include/SDL2/SDL_filesystem.h b/third_party/tlRender-install-Release/include/SDL2/SDL_filesystem.h new file mode 100644 index 00000000..c72a6165 --- /dev/null +++ b/third_party/tlRender-install-Release/include/SDL2/SDL_filesystem.h @@ -0,0 +1,149 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2025 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +/** + * # CategoryFilesystem + * + * Include file for filesystem SDL API functions + */ + +#ifndef SDL_filesystem_h_ +#define SDL_filesystem_h_ + +#include "SDL_stdinc.h" + +#include "begin_code.h" + +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/** + * Get the directory where the application was run from. + * + * This is not necessarily a fast call, so you should call this once near + * startup and save the string if you need it. + * + * **Mac OS X and iOS Specific Functionality**: If the application is in a + * ".app" bundle, this function returns the Resource directory (e.g. + * MyApp.app/Contents/Resources/). This behaviour can be overridden by adding + * a property to the Info.plist file. Adding a string key with the name + * SDL_FILESYSTEM_BASE_DIR_TYPE with a supported value will change the + * behaviour. + * + * Supported values for the SDL_FILESYSTEM_BASE_DIR_TYPE property (Given an + * application in /Applications/SDLApp/MyApp.app): + * + * - `resource`: bundle resource directory (the default). For example: + * `/Applications/SDLApp/MyApp.app/Contents/Resources` + * - `bundle`: the Bundle directory. For example: + * `/Applications/SDLApp/MyApp.app/` + * - `parent`: the containing directory of the bundle. For example: + * `/Applications/SDLApp/` + * + * **Nintendo 3DS Specific Functionality**: This function returns "romfs" + * directory of the application as it is uncommon to store resources outside + * the executable. As such it is not a writable directory. + * + * The returned path is guaranteed to end with a path separator ('\\' on + * Windows, '/' on most other platforms). + * + * The pointer returned is owned by the caller. Please call SDL_free() on the + * pointer when done with it. + * + * \returns an absolute path in UTF-8 encoding to the application data + * directory. NULL will be returned on error or when the platform + * doesn't implement this functionality, call SDL_GetError() for more + * information. + * + * \since This function is available since SDL 2.0.1. + * + * \sa SDL_GetPrefPath + */ +extern DECLSPEC char *SDLCALL SDL_GetBasePath(void); + +/** + * Get the user-and-app-specific path where files can be written. + * + * Get the "pref dir". This is meant to be where users can write personal + * files (preferences and save games, etc) that are specific to your + * application. This directory is unique per user, per application. + * + * This function will decide the appropriate location in the native + * filesystem, create the directory if necessary, and return a string of the + * absolute path to the directory in UTF-8 encoding. + * + * On Windows, the string might look like: + * + * `C:\\Users\\bob\\AppData\\Roaming\\My Company\\My Program Name\\` + * + * On Linux, the string might look like: + * + * `/home/bob/.local/share/My Program Name/` + * + * On Mac OS X, the string might look like: + * + * `/Users/bob/Library/Application Support/My Program Name/` + * + * You should assume the path returned by this function is the only safe place + * to write files (and that SDL_GetBasePath(), while it might be writable, or + * even the parent of the returned path, isn't where you should be writing + * things). + * + * Both the org and app strings may become part of a directory name, so please + * follow these rules: + * + * - Try to use the same org string (_including case-sensitivity_) for all + * your applications that use this function. + * - Always use a unique app string for each one, and make sure it never + * changes for an app once you've decided on it. + * - Unicode characters are legal, as long as it's UTF-8 encoded, but... + * - ...only use letters, numbers, and spaces. Avoid punctuation like "Game + * Name 2: Bad Guy's Revenge!" ... "Game Name 2" is sufficient. + * + * The returned path is guaranteed to end with a path separator ('\\' on + * Windows, '/' on most other platforms). + * + * The pointer returned is owned by the caller. Please call SDL_free() on the + * pointer when done with it. + * + * \param org the name of your organization. + * \param app the name of your application. + * \returns a UTF-8 string of the user directory in platform-dependent + * notation. NULL if there's a problem (creating directory failed, + * etc.). + * + * \since This function is available since SDL 2.0.1. + * + * \sa SDL_GetBasePath + */ +extern DECLSPEC char *SDLCALL SDL_GetPrefPath(const char *org, const char *app); + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include "close_code.h" + +#endif /* SDL_filesystem_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/third_party/tlRender-install-Release/include/SDL2/SDL_gamecontroller.h b/third_party/tlRender-install-Release/include/SDL2/SDL_gamecontroller.h new file mode 100644 index 00000000..4d8bcce2 --- /dev/null +++ b/third_party/tlRender-install-Release/include/SDL2/SDL_gamecontroller.h @@ -0,0 +1,1110 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2025 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +/* WIKI CATEGORY: GameController */ + +/** + * # CategoryGameController + * + * Include file for SDL game controller event handling + */ + +#ifndef SDL_gamecontroller_h_ +#define SDL_gamecontroller_h_ + +#include "SDL_stdinc.h" +#include "SDL_error.h" +#include "SDL_rwops.h" +#include "SDL_sensor.h" +#include "SDL_joystick.h" + +#include "begin_code.h" +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \file SDL_gamecontroller.h + * + * In order to use these functions, SDL_Init() must have been called + * with the SDL_INIT_GAMECONTROLLER flag. This causes SDL to scan the system + * for game controllers, and load appropriate drivers. + * + * If you would like to receive controller updates while the application + * is in the background, you should set the following hint before calling + * SDL_Init(): SDL_HINT_JOYSTICK_ALLOW_BACKGROUND_EVENTS + */ + +/** + * The gamecontroller structure used to identify an SDL game controller + */ +struct _SDL_GameController; +typedef struct _SDL_GameController SDL_GameController; + +typedef enum SDL_GameControllerType +{ + SDL_CONTROLLER_TYPE_UNKNOWN = 0, + SDL_CONTROLLER_TYPE_XBOX360, + SDL_CONTROLLER_TYPE_XBOXONE, + SDL_CONTROLLER_TYPE_PS3, + SDL_CONTROLLER_TYPE_PS4, + SDL_CONTROLLER_TYPE_NINTENDO_SWITCH_PRO, + SDL_CONTROLLER_TYPE_VIRTUAL, + SDL_CONTROLLER_TYPE_PS5, + SDL_CONTROLLER_TYPE_AMAZON_LUNA, + SDL_CONTROLLER_TYPE_GOOGLE_STADIA, + SDL_CONTROLLER_TYPE_NVIDIA_SHIELD, + SDL_CONTROLLER_TYPE_NINTENDO_SWITCH_JOYCON_LEFT, + SDL_CONTROLLER_TYPE_NINTENDO_SWITCH_JOYCON_RIGHT, + SDL_CONTROLLER_TYPE_NINTENDO_SWITCH_JOYCON_PAIR, + SDL_CONTROLLER_TYPE_MAX +} SDL_GameControllerType; + +typedef enum SDL_GameControllerBindType +{ + SDL_CONTROLLER_BINDTYPE_NONE = 0, + SDL_CONTROLLER_BINDTYPE_BUTTON, + SDL_CONTROLLER_BINDTYPE_AXIS, + SDL_CONTROLLER_BINDTYPE_HAT +} SDL_GameControllerBindType; + +/** + * Get the SDL joystick layer binding for this controller button/axis mapping + */ +typedef struct SDL_GameControllerButtonBind +{ + SDL_GameControllerBindType bindType; + union + { + int button; + int axis; + struct { + int hat; + int hat_mask; + } hat; + } value; + +} SDL_GameControllerButtonBind; + + +/** + * To count the number of game controllers in the system for the following: + * + * ```c + * int nJoysticks = SDL_NumJoysticks(); + * int nGameControllers = 0; + * for (int i = 0; i < nJoysticks; i++) { + * if (SDL_IsGameController(i)) { + * nGameControllers++; + * } + * } + * ``` + * + * Using the SDL_HINT_GAMECONTROLLERCONFIG hint or the SDL_GameControllerAddMapping() you can add support for controllers SDL is unaware of or cause an existing controller to have a different binding. The format is: + * guid,name,mappings + * + * Where GUID is the string value from SDL_JoystickGetGUIDString(), name is the human readable string for the device and mappings are controller mappings to joystick ones. + * Under Windows there is a reserved GUID of "xinput" that covers any XInput devices. + * The mapping format for joystick is: + * bX - a joystick button, index X + * hX.Y - hat X with value Y + * aX - axis X of the joystick + * Buttons can be used as a controller axis and vice versa. + * + * This string shows an example of a valid mapping for a controller + * + * ```c + * "03000000341a00003608000000000000,PS3 Controller,a:b1,b:b2,y:b3,x:b0,start:b9,guide:b12,back:b8,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftshoulder:b4,rightshoulder:b5,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b6,righttrigger:b7", + * ``` + */ + +/** + * Load a set of Game Controller mappings from a seekable SDL data stream. + * + * You can call this function several times, if needed, to load different + * database files. + * + * If a new mapping is loaded for an already known controller GUID, the later + * version will overwrite the one currently loaded. + * + * If this function is called before SDL_Init, SDL will generate an + * SDL_CONTROLLERDEVICEADDED event for matching controllers that are plugged + * in at the time that SDL_Init is called. + * + * Mappings not belonging to the current platform or with no platform field + * specified will be ignored (i.e. mappings for Linux will be ignored in + * Windows, etc). + * + * This function will load the text database entirely in memory before + * processing it, so take this into consideration if you are in a memory + * constrained environment. + * + * \param rw the data stream for the mappings to be added. + * \param freerw non-zero to close the stream after being read. + * \returns the number of mappings added or -1 on error; call SDL_GetError() + * for more information. + * + * \since This function is available since SDL 2.0.2. + * + * \sa SDL_GameControllerAddMapping + * \sa SDL_GameControllerAddMappingsFromFile + * \sa SDL_GameControllerMappingForGUID + * \sa SDL_CONTROLLERDEVICEADDED + */ +extern DECLSPEC int SDLCALL SDL_GameControllerAddMappingsFromRW(SDL_RWops * rw, int freerw); + +/** + * Load a set of mappings from a file, filtered by the current + * SDL_GetPlatform() + * + * Convenience macro. + */ +#define SDL_GameControllerAddMappingsFromFile(file) SDL_GameControllerAddMappingsFromRW(SDL_RWFromFile(file, "rb"), 1) + +/** + * Add support for controllers that SDL is unaware of or to cause an existing + * controller to have a different binding. + * + * The mapping string has the format "GUID,name,mapping", where GUID is the + * string value from SDL_JoystickGetGUIDString(), name is the human readable + * string for the device and mappings are controller mappings to joystick + * ones. Under Windows there is a reserved GUID of "xinput" that covers all + * XInput devices. The mapping format for joystick is: {| |bX |a joystick + * button, index X |- |hX.Y |hat X with value Y |- |aX |axis X of the joystick + * |} Buttons can be used as a controller axes and vice versa. + * + * This string shows an example of a valid mapping for a controller: + * + * ```c + * "341a3608000000000000504944564944,Afterglow PS3 Controller,a:b1,b:b2,y:b3,x:b0,start:b9,guide:b12,back:b8,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftshoulder:b4,rightshoulder:b5,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b6,righttrigger:b7" + * ``` + * + * If this function is called before SDL_Init, SDL will generate an + * SDL_CONTROLLERDEVICEADDED event for matching controllers that are plugged + * in at the time that SDL_Init is called. + * + * \param mappingString the mapping string. + * \returns 1 if a new mapping is added, 0 if an existing mapping is updated, + * -1 on error; call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GameControllerMapping + * \sa SDL_GameControllerMappingForGUID + * \sa SDL_CONTROLLERDEVICEADDED + */ +extern DECLSPEC int SDLCALL SDL_GameControllerAddMapping(const char* mappingString); + +/** + * Get the number of mappings installed. + * + * \returns the number of mappings. + * + * \since This function is available since SDL 2.0.6. + */ +extern DECLSPEC int SDLCALL SDL_GameControllerNumMappings(void); + +/** + * Get the mapping at a particular index. + * + * \returns the mapping string. Must be freed with SDL_free(). Returns NULL if + * the index is out of range. + * + * \since This function is available since SDL 2.0.6. + */ +extern DECLSPEC char * SDLCALL SDL_GameControllerMappingForIndex(int mapping_index); + +/** + * Get the game controller mapping string for a given GUID. + * + * The returned string must be freed with SDL_free(). + * + * \param guid a structure containing the GUID for which a mapping is desired. + * \returns a mapping string or NULL on error; call SDL_GetError() for more + * information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_JoystickGetDeviceGUID + * \sa SDL_JoystickGetGUID + */ +extern DECLSPEC char * SDLCALL SDL_GameControllerMappingForGUID(SDL_JoystickGUID guid); + +/** + * Get the current mapping of a Game Controller. + * + * The returned string must be freed with SDL_free(). + * + * Details about mappings are discussed with SDL_GameControllerAddMapping(). + * + * \param gamecontroller the game controller you want to get the current + * mapping for. + * \returns a string that has the controller's mapping or NULL if no mapping + * is available; call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GameControllerAddMapping + * \sa SDL_GameControllerMappingForGUID + */ +extern DECLSPEC char * SDLCALL SDL_GameControllerMapping(SDL_GameController *gamecontroller); + +/** + * Check if the given joystick is supported by the game controller interface. + * + * `joystick_index` is the same as the `device_index` passed to + * SDL_JoystickOpen(). + * + * \param joystick_index the device_index of a device, up to + * SDL_NumJoysticks(). + * \returns SDL_TRUE if the given joystick is supported by the game controller + * interface, SDL_FALSE if it isn't or it's an invalid index. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GameControllerNameForIndex + * \sa SDL_GameControllerOpen + */ +extern DECLSPEC SDL_bool SDLCALL SDL_IsGameController(int joystick_index); + +/** + * Get the implementation dependent name for the game controller. + * + * This function can be called before any controllers are opened. + * + * `joystick_index` is the same as the `device_index` passed to + * SDL_JoystickOpen(). + * + * \param joystick_index the device_index of a device, from zero to + * SDL_NumJoysticks()-1. + * \returns the implementation-dependent name for the game controller, or NULL + * if there is no name or the index is invalid. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GameControllerName + * \sa SDL_GameControllerOpen + * \sa SDL_IsGameController + */ +extern DECLSPEC const char *SDLCALL SDL_GameControllerNameForIndex(int joystick_index); + +/** + * Get the implementation dependent path for the game controller. + * + * This function can be called before any controllers are opened. + * + * `joystick_index` is the same as the `device_index` passed to + * SDL_JoystickOpen(). + * + * \param joystick_index the device_index of a device, from zero to + * SDL_NumJoysticks()-1. + * \returns the implementation-dependent path for the game controller, or NULL + * if there is no path or the index is invalid. + * + * \since This function is available since SDL 2.24.0. + * + * \sa SDL_GameControllerPath + */ +extern DECLSPEC const char *SDLCALL SDL_GameControllerPathForIndex(int joystick_index); + +/** + * Get the type of a game controller. + * + * This can be called before any controllers are opened. + * + * \param joystick_index the device_index of a device, from zero to + * SDL_NumJoysticks()-1. + * \returns the controller type. + * + * \since This function is available since SDL 2.0.12. + */ +extern DECLSPEC SDL_GameControllerType SDLCALL SDL_GameControllerTypeForIndex(int joystick_index); + +/** + * Get the mapping of a game controller. + * + * This can be called before any controllers are opened. + * + * \param joystick_index the device_index of a device, from zero to + * SDL_NumJoysticks()-1. + * \returns the mapping string. Must be freed with SDL_free(). Returns NULL if + * no mapping is available. + * + * \since This function is available since SDL 2.0.9. + */ +extern DECLSPEC char *SDLCALL SDL_GameControllerMappingForDeviceIndex(int joystick_index); + +/** + * Open a game controller for use. + * + * `joystick_index` is the same as the `device_index` passed to + * SDL_JoystickOpen(). + * + * The index passed as an argument refers to the N'th game controller on the + * system. This index is not the value which will identify this controller in + * future controller events. The joystick's instance id (SDL_JoystickID) will + * be used there instead. + * + * \param joystick_index the device_index of a device, up to + * SDL_NumJoysticks(). + * \returns a gamecontroller identifier or NULL if an error occurred; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GameControllerClose + * \sa SDL_GameControllerNameForIndex + * \sa SDL_IsGameController + */ +extern DECLSPEC SDL_GameController *SDLCALL SDL_GameControllerOpen(int joystick_index); + +/** + * Get the SDL_GameController associated with an instance id. + * + * \param joyid the instance id to get the SDL_GameController for. + * \returns an SDL_GameController on success or NULL on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.4. + */ +extern DECLSPEC SDL_GameController *SDLCALL SDL_GameControllerFromInstanceID(SDL_JoystickID joyid); + +/** + * Get the SDL_GameController associated with a player index. + * + * Please note that the player index is _not_ the device index, nor is it the + * instance id! + * + * \param player_index the player index, which is not the device index or the + * instance id! + * \returns the SDL_GameController associated with a player index. + * + * \since This function is available since SDL 2.0.12. + * + * \sa SDL_GameControllerGetPlayerIndex + * \sa SDL_GameControllerSetPlayerIndex + */ +extern DECLSPEC SDL_GameController *SDLCALL SDL_GameControllerFromPlayerIndex(int player_index); + +/** + * Get the implementation-dependent name for an opened game controller. + * + * This is the same name as returned by SDL_GameControllerNameForIndex(), but + * it takes a controller identifier instead of the (unstable) device index. + * + * \param gamecontroller a game controller identifier previously returned by + * SDL_GameControllerOpen(). + * \returns the implementation dependent name for the game controller, or NULL + * if there is no name or the identifier passed is invalid. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GameControllerNameForIndex + * \sa SDL_GameControllerOpen + */ +extern DECLSPEC const char *SDLCALL SDL_GameControllerName(SDL_GameController *gamecontroller); + +/** + * Get the implementation-dependent path for an opened game controller. + * + * This is the same path as returned by SDL_GameControllerNameForIndex(), but + * it takes a controller identifier instead of the (unstable) device index. + * + * \param gamecontroller a game controller identifier previously returned by + * SDL_GameControllerOpen(). + * \returns the implementation dependent path for the game controller, or NULL + * if there is no path or the identifier passed is invalid. + * + * \since This function is available since SDL 2.24.0. + * + * \sa SDL_GameControllerPathForIndex + */ +extern DECLSPEC const char *SDLCALL SDL_GameControllerPath(SDL_GameController *gamecontroller); + +/** + * Get the type of this currently opened controller + * + * This is the same name as returned by SDL_GameControllerTypeForIndex(), but + * it takes a controller identifier instead of the (unstable) device index. + * + * \param gamecontroller the game controller object to query. + * \returns the controller type. + * + * \since This function is available since SDL 2.0.12. + */ +extern DECLSPEC SDL_GameControllerType SDLCALL SDL_GameControllerGetType(SDL_GameController *gamecontroller); + +/** + * Get the player index of an opened game controller. + * + * For XInput controllers this returns the XInput user index. + * + * \param gamecontroller the game controller object to query. + * \returns the player index for controller, or -1 if it's not available. + * + * \since This function is available since SDL 2.0.9. + */ +extern DECLSPEC int SDLCALL SDL_GameControllerGetPlayerIndex(SDL_GameController *gamecontroller); + +/** + * Set the player index of an opened game controller. + * + * \param gamecontroller the game controller object to adjust. + * \param player_index Player index to assign to this controller, or -1 to + * clear the player index and turn off player LEDs. + * + * \since This function is available since SDL 2.0.12. + */ +extern DECLSPEC void SDLCALL SDL_GameControllerSetPlayerIndex(SDL_GameController *gamecontroller, int player_index); + +/** + * Get the USB vendor ID of an opened controller, if available. + * + * If the vendor ID isn't available this function returns 0. + * + * \param gamecontroller the game controller object to query. + * \return the USB vendor ID, or zero if unavailable. + * + * \since This function is available since SDL 2.0.6. + */ +extern DECLSPEC Uint16 SDLCALL SDL_GameControllerGetVendor(SDL_GameController *gamecontroller); + +/** + * Get the USB product ID of an opened controller, if available. + * + * If the product ID isn't available this function returns 0. + * + * \param gamecontroller the game controller object to query. + * \return the USB product ID, or zero if unavailable. + * + * \since This function is available since SDL 2.0.6. + */ +extern DECLSPEC Uint16 SDLCALL SDL_GameControllerGetProduct(SDL_GameController *gamecontroller); + +/** + * Get the product version of an opened controller, if available. + * + * If the product version isn't available this function returns 0. + * + * \param gamecontroller the game controller object to query. + * \return the USB product version, or zero if unavailable. + * + * \since This function is available since SDL 2.0.6. + */ +extern DECLSPEC Uint16 SDLCALL SDL_GameControllerGetProductVersion(SDL_GameController *gamecontroller); + +/** + * Get the firmware version of an opened controller, if available. + * + * If the firmware version isn't available this function returns 0. + * + * \param gamecontroller the game controller object to query. + * \return the controller firmware version, or zero if unavailable. + * + * \since This function is available since SDL 2.24.0. + */ +extern DECLSPEC Uint16 SDLCALL SDL_GameControllerGetFirmwareVersion(SDL_GameController *gamecontroller); + +/** + * Get the serial number of an opened controller, if available. + * + * Returns the serial number of the controller, or NULL if it is not + * available. + * + * \param gamecontroller the game controller object to query. + * \return the serial number, or NULL if unavailable. + * + * \since This function is available since SDL 2.0.14. + */ +extern DECLSPEC const char * SDLCALL SDL_GameControllerGetSerial(SDL_GameController *gamecontroller); + +/** + * Get the Steam Input handle of an opened controller, if available. + * + * Returns an InputHandle_t for the controller that can be used with Steam + * Input API: https://partner.steamgames.com/doc/api/ISteamInput + * + * \param gamecontroller the game controller object to query. + * \returns the gamepad handle, or 0 if unavailable. + * + * \since This function is available since SDL 2.30.0. + */ +extern DECLSPEC Uint64 SDLCALL SDL_GameControllerGetSteamHandle(SDL_GameController *gamecontroller); + + +/** + * Check if a controller has been opened and is currently connected. + * + * \param gamecontroller a game controller identifier previously returned by + * SDL_GameControllerOpen(). + * \returns SDL_TRUE if the controller has been opened and is currently + * connected, or SDL_FALSE if not. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GameControllerClose + * \sa SDL_GameControllerOpen + */ +extern DECLSPEC SDL_bool SDLCALL SDL_GameControllerGetAttached(SDL_GameController *gamecontroller); + +/** + * Get the Joystick ID from a Game Controller. + * + * This function will give you a SDL_Joystick object, which allows you to use + * the SDL_Joystick functions with a SDL_GameController object. This would be + * useful for getting a joystick's position at any given time, even if it + * hasn't moved (moving it would produce an event, which would have the axis' + * value). + * + * The pointer returned is owned by the SDL_GameController. You should not + * call SDL_JoystickClose() on it, for example, since doing so will likely + * cause SDL to crash. + * + * \param gamecontroller the game controller object that you want to get a + * joystick from. + * \returns a SDL_Joystick object; call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + */ +extern DECLSPEC SDL_Joystick *SDLCALL SDL_GameControllerGetJoystick(SDL_GameController *gamecontroller); + +/** + * Query or change current state of Game Controller events. + * + * If controller events are disabled, you must call SDL_GameControllerUpdate() + * yourself and check the state of the controller when you want controller + * information. + * + * Any number can be passed to SDL_GameControllerEventState(), but only -1, 0, + * and 1 will have any effect. Other numbers will just be returned. + * + * \param state can be one of `SDL_QUERY`, `SDL_IGNORE`, or `SDL_ENABLE`. + * \returns the same value passed to the function, with exception to -1 + * (SDL_QUERY), which will return the current state. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_JoystickEventState + */ +extern DECLSPEC int SDLCALL SDL_GameControllerEventState(int state); + +/** + * Manually pump game controller updates if not using the loop. + * + * This function is called automatically by the event loop if events are + * enabled. Under such circumstances, it will not be necessary to call this + * function. + * + * \since This function is available since SDL 2.0.0. + */ +extern DECLSPEC void SDLCALL SDL_GameControllerUpdate(void); + + +/** + * The list of axes available from a controller + * + * Thumbstick axis values range from SDL_JOYSTICK_AXIS_MIN to + * SDL_JOYSTICK_AXIS_MAX, and are centered within ~8000 of zero, though + * advanced UI will allow users to set or autodetect the dead zone, which + * varies between controllers. + * + * Trigger axis values range from 0 (released) to SDL_JOYSTICK_AXIS_MAX (fully + * pressed) when reported by SDL_GameControllerGetAxis(). Note that this is + * not the same range that will be reported by the lower-level + * SDL_GetJoystickAxis(). + */ +typedef enum SDL_GameControllerAxis +{ + SDL_CONTROLLER_AXIS_INVALID = -1, + SDL_CONTROLLER_AXIS_LEFTX, + SDL_CONTROLLER_AXIS_LEFTY, + SDL_CONTROLLER_AXIS_RIGHTX, + SDL_CONTROLLER_AXIS_RIGHTY, + SDL_CONTROLLER_AXIS_TRIGGERLEFT, + SDL_CONTROLLER_AXIS_TRIGGERRIGHT, + SDL_CONTROLLER_AXIS_MAX +} SDL_GameControllerAxis; + +/** + * Convert a string into SDL_GameControllerAxis enum. + * + * This function is called internally to translate SDL_GameController mapping + * strings for the underlying joystick device into the consistent + * SDL_GameController mapping. You do not normally need to call this function + * unless you are parsing SDL_GameController mappings in your own code. + * + * Note specially that "righttrigger" and "lefttrigger" map to + * `SDL_CONTROLLER_AXIS_TRIGGERRIGHT` and `SDL_CONTROLLER_AXIS_TRIGGERLEFT`, + * respectively. + * + * \param str string representing a SDL_GameController axis. + * \returns the SDL_GameControllerAxis enum corresponding to the input string, + * or `SDL_CONTROLLER_AXIS_INVALID` if no match was found. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GameControllerGetStringForAxis + */ +extern DECLSPEC SDL_GameControllerAxis SDLCALL SDL_GameControllerGetAxisFromString(const char *str); + +/** + * Convert from an SDL_GameControllerAxis enum to a string. + * + * The caller should not SDL_free() the returned string. + * + * \param axis an enum value for a given SDL_GameControllerAxis. + * \returns a string for the given axis, or NULL if an invalid axis is + * specified. The string returned is of the format used by + * SDL_GameController mapping strings. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GameControllerGetAxisFromString + */ +extern DECLSPEC const char* SDLCALL SDL_GameControllerGetStringForAxis(SDL_GameControllerAxis axis); + +/** + * Get the SDL joystick layer binding for a controller axis mapping. + * + * \param gamecontroller a game controller. + * \param axis an axis enum value (one of the SDL_GameControllerAxis values). + * \returns a SDL_GameControllerButtonBind describing the bind. On failure + * (like the given Controller axis doesn't exist on the device), its + * `.bindType` will be `SDL_CONTROLLER_BINDTYPE_NONE`. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GameControllerGetBindForButton + */ +extern DECLSPEC SDL_GameControllerButtonBind SDLCALL +SDL_GameControllerGetBindForAxis(SDL_GameController *gamecontroller, + SDL_GameControllerAxis axis); + +/** + * Query whether a game controller has a given axis. + * + * This merely reports whether the controller's mapping defined this axis, as + * that is all the information SDL has about the physical device. + * + * \param gamecontroller a game controller. + * \param axis an axis enum value (an SDL_GameControllerAxis value). + * \returns SDL_TRUE if the controller has this axis, SDL_FALSE otherwise. + * + * \since This function is available since SDL 2.0.14. + */ +extern DECLSPEC SDL_bool SDLCALL +SDL_GameControllerHasAxis(SDL_GameController *gamecontroller, SDL_GameControllerAxis axis); + +/** + * Get the current state of an axis control on a game controller. + * + * The axis indices start at index 0. + * + * For thumbsticks, the state is a value ranging from -32768 (up/left) to + * 32767 (down/right). + * + * Triggers range from 0 when released to 32767 when fully pressed, and never + * return a negative value. Note that this differs from the value reported by + * the lower-level SDL_JoystickGetAxis(), which normally uses the full range. + * + * \param gamecontroller a game controller. + * \param axis an axis index (one of the SDL_GameControllerAxis values). + * \returns axis state (including 0) on success or 0 (also) on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GameControllerGetButton + */ +extern DECLSPEC Sint16 SDLCALL +SDL_GameControllerGetAxis(SDL_GameController *gamecontroller, SDL_GameControllerAxis axis); + +/** + * The list of buttons available from a controller + */ +typedef enum SDL_GameControllerButton +{ + SDL_CONTROLLER_BUTTON_INVALID = -1, + SDL_CONTROLLER_BUTTON_A, + SDL_CONTROLLER_BUTTON_B, + SDL_CONTROLLER_BUTTON_X, + SDL_CONTROLLER_BUTTON_Y, + SDL_CONTROLLER_BUTTON_BACK, + SDL_CONTROLLER_BUTTON_GUIDE, + SDL_CONTROLLER_BUTTON_START, + SDL_CONTROLLER_BUTTON_LEFTSTICK, + SDL_CONTROLLER_BUTTON_RIGHTSTICK, + SDL_CONTROLLER_BUTTON_LEFTSHOULDER, + SDL_CONTROLLER_BUTTON_RIGHTSHOULDER, + SDL_CONTROLLER_BUTTON_DPAD_UP, + SDL_CONTROLLER_BUTTON_DPAD_DOWN, + SDL_CONTROLLER_BUTTON_DPAD_LEFT, + SDL_CONTROLLER_BUTTON_DPAD_RIGHT, + SDL_CONTROLLER_BUTTON_MISC1, /* Xbox Series X share button, PS5 microphone button, Nintendo Switch Pro capture button, Amazon Luna microphone button */ + SDL_CONTROLLER_BUTTON_PADDLE1, /* Xbox Elite paddle P1 (upper left, facing the back) */ + SDL_CONTROLLER_BUTTON_PADDLE2, /* Xbox Elite paddle P3 (upper right, facing the back) */ + SDL_CONTROLLER_BUTTON_PADDLE3, /* Xbox Elite paddle P2 (lower left, facing the back) */ + SDL_CONTROLLER_BUTTON_PADDLE4, /* Xbox Elite paddle P4 (lower right, facing the back) */ + SDL_CONTROLLER_BUTTON_TOUCHPAD, /* PS4/PS5 touchpad button */ + SDL_CONTROLLER_BUTTON_MAX +} SDL_GameControllerButton; + +/** + * Convert a string into an SDL_GameControllerButton enum. + * + * This function is called internally to translate SDL_GameController mapping + * strings for the underlying joystick device into the consistent + * SDL_GameController mapping. You do not normally need to call this function + * unless you are parsing SDL_GameController mappings in your own code. + * + * \param str string representing a SDL_GameController axis. + * \returns the SDL_GameControllerButton enum corresponding to the input + * string, or `SDL_CONTROLLER_AXIS_INVALID` if no match was found. + * + * \since This function is available since SDL 2.0.0. + */ +extern DECLSPEC SDL_GameControllerButton SDLCALL SDL_GameControllerGetButtonFromString(const char *str); + +/** + * Convert from an SDL_GameControllerButton enum to a string. + * + * The caller should not SDL_free() the returned string. + * + * \param button an enum value for a given SDL_GameControllerButton. + * \returns a string for the given button, or NULL if an invalid button is + * specified. The string returned is of the format used by + * SDL_GameController mapping strings. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GameControllerGetButtonFromString + */ +extern DECLSPEC const char* SDLCALL SDL_GameControllerGetStringForButton(SDL_GameControllerButton button); + +/** + * Get the SDL joystick layer binding for a controller button mapping. + * + * \param gamecontroller a game controller. + * \param button an button enum value (an SDL_GameControllerButton value). + * \returns a SDL_GameControllerButtonBind describing the bind. On failure + * (like the given Controller button doesn't exist on the device), + * its `.bindType` will be `SDL_CONTROLLER_BINDTYPE_NONE`. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GameControllerGetBindForAxis + */ +extern DECLSPEC SDL_GameControllerButtonBind SDLCALL +SDL_GameControllerGetBindForButton(SDL_GameController *gamecontroller, + SDL_GameControllerButton button); + +/** + * Query whether a game controller has a given button. + * + * This merely reports whether the controller's mapping defined this button, + * as that is all the information SDL has about the physical device. + * + * \param gamecontroller a game controller. + * \param button a button enum value (an SDL_GameControllerButton value). + * \returns SDL_TRUE if the controller has this button, SDL_FALSE otherwise. + * + * \since This function is available since SDL 2.0.14. + */ +extern DECLSPEC SDL_bool SDLCALL SDL_GameControllerHasButton(SDL_GameController *gamecontroller, + SDL_GameControllerButton button); + +/** + * Get the current state of a button on a game controller. + * + * \param gamecontroller a game controller. + * \param button a button index (one of the SDL_GameControllerButton values). + * \returns 1 for pressed state or 0 for not pressed state or error; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GameControllerGetAxis + */ +extern DECLSPEC Uint8 SDLCALL SDL_GameControllerGetButton(SDL_GameController *gamecontroller, + SDL_GameControllerButton button); + +/** + * Get the number of touchpads on a game controller. + * + * \since This function is available since SDL 2.0.14. + */ +extern DECLSPEC int SDLCALL SDL_GameControllerGetNumTouchpads(SDL_GameController *gamecontroller); + +/** + * Get the number of supported simultaneous fingers on a touchpad on a game + * controller. + * + * \since This function is available since SDL 2.0.14. + */ +extern DECLSPEC int SDLCALL SDL_GameControllerGetNumTouchpadFingers(SDL_GameController *gamecontroller, int touchpad); + +/** + * Get the current state of a finger on a touchpad on a game controller. + * + * \since This function is available since SDL 2.0.14. + */ +extern DECLSPEC int SDLCALL SDL_GameControllerGetTouchpadFinger(SDL_GameController *gamecontroller, int touchpad, int finger, Uint8 *state, float *x, float *y, float *pressure); + +/** + * Return whether a game controller has a particular sensor. + * + * \param gamecontroller The controller to query. + * \param type The type of sensor to query. + * \returns SDL_TRUE if the sensor exists, SDL_FALSE otherwise. + * + * \since This function is available since SDL 2.0.14. + */ +extern DECLSPEC SDL_bool SDLCALL SDL_GameControllerHasSensor(SDL_GameController *gamecontroller, SDL_SensorType type); + +/** + * Set whether data reporting for a game controller sensor is enabled. + * + * \param gamecontroller The controller to update. + * \param type The type of sensor to enable/disable. + * \param enabled Whether data reporting should be enabled. + * \returns 0 or -1 if an error occurred. + * + * \since This function is available since SDL 2.0.14. + */ +extern DECLSPEC int SDLCALL SDL_GameControllerSetSensorEnabled(SDL_GameController *gamecontroller, SDL_SensorType type, SDL_bool enabled); + +/** + * Query whether sensor data reporting is enabled for a game controller. + * + * \param gamecontroller The controller to query. + * \param type The type of sensor to query. + * \returns SDL_TRUE if the sensor is enabled, SDL_FALSE otherwise. + * + * \since This function is available since SDL 2.0.14. + */ +extern DECLSPEC SDL_bool SDLCALL SDL_GameControllerIsSensorEnabled(SDL_GameController *gamecontroller, SDL_SensorType type); + +/** + * Get the data rate (number of events per second) of a game controller + * sensor. + * + * \param gamecontroller The controller to query. + * \param type The type of sensor to query. + * \return the data rate, or 0.0f if the data rate is not available. + * + * \since This function is available since SDL 2.0.16. + */ +extern DECLSPEC float SDLCALL SDL_GameControllerGetSensorDataRate(SDL_GameController *gamecontroller, SDL_SensorType type); + +/** + * Get the current state of a game controller sensor. + * + * The number of values and interpretation of the data is sensor dependent. + * See SDL_sensor.h for the details for each type of sensor. + * + * \param gamecontroller The controller to query. + * \param type The type of sensor to query. + * \param data A pointer filled with the current sensor state. + * \param num_values The number of values to write to data. + * \return 0 or -1 if an error occurred. + * + * \since This function is available since SDL 2.0.14. + */ +extern DECLSPEC int SDLCALL SDL_GameControllerGetSensorData(SDL_GameController *gamecontroller, SDL_SensorType type, float *data, int num_values); + +/** + * Get the current state of a game controller sensor with the timestamp of the + * last update. + * + * The number of values and interpretation of the data is sensor dependent. + * See SDL_sensor.h for the details for each type of sensor. + * + * \param gamecontroller The controller to query. + * \param type The type of sensor to query. + * \param timestamp A pointer filled with the timestamp in microseconds of the + * current sensor reading if available, or 0 if not. + * \param data A pointer filled with the current sensor state. + * \param num_values The number of values to write to data. + * \return 0 or -1 if an error occurred. + * + * \since This function is available since SDL 2.26.0. + */ +extern DECLSPEC int SDLCALL SDL_GameControllerGetSensorDataWithTimestamp(SDL_GameController *gamecontroller, SDL_SensorType type, Uint64 *timestamp, float *data, int num_values); + +/** + * Start a rumble effect on a game controller. + * + * Each call to this function cancels any previous rumble effect, and calling + * it with 0 intensity stops any rumbling. + * + * \param gamecontroller The controller to vibrate. + * \param low_frequency_rumble The intensity of the low frequency (left) + * rumble motor, from 0 to 0xFFFF. + * \param high_frequency_rumble The intensity of the high frequency (right) + * rumble motor, from 0 to 0xFFFF. + * \param duration_ms The duration of the rumble effect, in milliseconds. + * \returns 0, or -1 if rumble isn't supported on this controller. + * + * \since This function is available since SDL 2.0.9. + * + * \sa SDL_GameControllerHasRumble + */ +extern DECLSPEC int SDLCALL SDL_GameControllerRumble(SDL_GameController *gamecontroller, Uint16 low_frequency_rumble, Uint16 high_frequency_rumble, Uint32 duration_ms); + +/** + * Start a rumble effect in the game controller's triggers. + * + * Each call to this function cancels any previous trigger rumble effect, and + * calling it with 0 intensity stops any rumbling. + * + * Note that this is rumbling of the _triggers_ and not the game controller as + * a whole. This is currently only supported on Xbox One controllers. If you + * want the (more common) whole-controller rumble, use + * SDL_GameControllerRumble() instead. + * + * \param gamecontroller The controller to vibrate. + * \param left_rumble The intensity of the left trigger rumble motor, from 0 + * to 0xFFFF. + * \param right_rumble The intensity of the right trigger rumble motor, from 0 + * to 0xFFFF. + * \param duration_ms The duration of the rumble effect, in milliseconds. + * \returns 0, or -1 if trigger rumble isn't supported on this controller. + * + * \since This function is available since SDL 2.0.14. + * + * \sa SDL_GameControllerHasRumbleTriggers + */ +extern DECLSPEC int SDLCALL SDL_GameControllerRumbleTriggers(SDL_GameController *gamecontroller, Uint16 left_rumble, Uint16 right_rumble, Uint32 duration_ms); + +/** + * Query whether a game controller has an LED. + * + * \param gamecontroller The controller to query. + * \returns SDL_TRUE, or SDL_FALSE if this controller does not have a + * modifiable LED. + * + * \since This function is available since SDL 2.0.14. + */ +extern DECLSPEC SDL_bool SDLCALL SDL_GameControllerHasLED(SDL_GameController *gamecontroller); + +/** + * Query whether a game controller has rumble support. + * + * \param gamecontroller The controller to query. + * \returns SDL_TRUE, or SDL_FALSE if this controller does not have rumble + * support. + * + * \since This function is available since SDL 2.0.18. + * + * \sa SDL_GameControllerRumble + */ +extern DECLSPEC SDL_bool SDLCALL SDL_GameControllerHasRumble(SDL_GameController *gamecontroller); + +/** + * Query whether a game controller has rumble support on triggers. + * + * \param gamecontroller The controller to query. + * \returns SDL_TRUE, or SDL_FALSE if this controller does not have trigger + * rumble support. + * + * \since This function is available since SDL 2.0.18. + * + * \sa SDL_GameControllerRumbleTriggers + */ +extern DECLSPEC SDL_bool SDLCALL SDL_GameControllerHasRumbleTriggers(SDL_GameController *gamecontroller); + +/** + * Update a game controller's LED color. + * + * \param gamecontroller The controller to update. + * \param red The intensity of the red LED. + * \param green The intensity of the green LED. + * \param blue The intensity of the blue LED. + * \returns 0, or -1 if this controller does not have a modifiable LED. + * + * \since This function is available since SDL 2.0.14. + */ +extern DECLSPEC int SDLCALL SDL_GameControllerSetLED(SDL_GameController *gamecontroller, Uint8 red, Uint8 green, Uint8 blue); + +/** + * Send a controller specific effect packet + * + * \param gamecontroller The controller to affect. + * \param data The data to send to the controller. + * \param size The size of the data to send to the controller. + * \returns 0, or -1 if this controller or driver doesn't support effect + * packets. + * + * \since This function is available since SDL 2.0.16. + */ +extern DECLSPEC int SDLCALL SDL_GameControllerSendEffect(SDL_GameController *gamecontroller, const void *data, int size); + +/** + * Close a game controller previously opened with SDL_GameControllerOpen(). + * + * \param gamecontroller a game controller identifier previously returned by + * SDL_GameControllerOpen(). + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GameControllerOpen + */ +extern DECLSPEC void SDLCALL SDL_GameControllerClose(SDL_GameController *gamecontroller); + +/** + * Return the sfSymbolsName for a given button on a game controller on Apple + * platforms. + * + * \param gamecontroller the controller to query. + * \param button a button on the game controller. + * \returns the sfSymbolsName or NULL if the name can't be found. + * + * \since This function is available since SDL 2.0.18. + * + * \sa SDL_GameControllerGetAppleSFSymbolsNameForAxis + */ +extern DECLSPEC const char* SDLCALL SDL_GameControllerGetAppleSFSymbolsNameForButton(SDL_GameController *gamecontroller, SDL_GameControllerButton button); + +/** + * Return the sfSymbolsName for a given axis on a game controller on Apple + * platforms. + * + * \param gamecontroller the controller to query. + * \param axis an axis on the game controller. + * \returns the sfSymbolsName or NULL if the name can't be found. + * + * \since This function is available since SDL 2.0.18. + * + * \sa SDL_GameControllerGetAppleSFSymbolsNameForButton + */ +extern DECLSPEC const char* SDLCALL SDL_GameControllerGetAppleSFSymbolsNameForAxis(SDL_GameController *gamecontroller, SDL_GameControllerAxis axis); + + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include "close_code.h" + +#endif /* SDL_gamecontroller_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/third_party/tlRender-install-Release/include/SDL2/SDL_gesture.h b/third_party/tlRender-install-Release/include/SDL2/SDL_gesture.h new file mode 100644 index 00000000..acfa56f3 --- /dev/null +++ b/third_party/tlRender-install-Release/include/SDL2/SDL_gesture.h @@ -0,0 +1,117 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2025 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +/** + * # CategoryGesture + * + * Include file for SDL gesture event handling. + */ + +#ifndef SDL_gesture_h_ +#define SDL_gesture_h_ + +#include "SDL_stdinc.h" +#include "SDL_error.h" +#include "SDL_video.h" + +#include "SDL_touch.h" + + +#include "begin_code.h" +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +typedef Sint64 SDL_GestureID; + +/* Function prototypes */ + +/** + * Begin recording a gesture on a specified touch device or all touch devices. + * + * If the parameter `touchId` is -1 (i.e., all devices), this function will + * always return 1, regardless of whether there actually are any devices. + * + * \param touchId the touch device id, or -1 for all touch devices. + * \returns 1 on success or 0 if the specified device could not be found. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetTouchDevice + */ +extern DECLSPEC int SDLCALL SDL_RecordGesture(SDL_TouchID touchId); + + +/** + * Save all currently loaded Dollar Gesture templates. + * + * \param dst a SDL_RWops to save to. + * \returns the number of saved templates on success or 0 on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_LoadDollarTemplates + * \sa SDL_SaveDollarTemplate + */ +extern DECLSPEC int SDLCALL SDL_SaveAllDollarTemplates(SDL_RWops *dst); + +/** + * Save a currently loaded Dollar Gesture template. + * + * \param gestureId a gesture id. + * \param dst a SDL_RWops to save to. + * \returns 1 on success or 0 on failure; call SDL_GetError() for more + * information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_LoadDollarTemplates + * \sa SDL_SaveAllDollarTemplates + */ +extern DECLSPEC int SDLCALL SDL_SaveDollarTemplate(SDL_GestureID gestureId,SDL_RWops *dst); + + +/** + * Load Dollar Gesture templates from a file. + * + * \param touchId a touch id. + * \param src a SDL_RWops to load from. + * \returns the number of loaded templates on success or a negative error code + * (or 0) on failure; call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_SaveAllDollarTemplates + * \sa SDL_SaveDollarTemplate + */ +extern DECLSPEC int SDLCALL SDL_LoadDollarTemplates(SDL_TouchID touchId, SDL_RWops *src); + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include "close_code.h" + +#endif /* SDL_gesture_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/third_party/tlRender-install-Release/include/SDL2/SDL_guid.h b/third_party/tlRender-install-Release/include/SDL2/SDL_guid.h new file mode 100644 index 00000000..fd9a50e3 --- /dev/null +++ b/third_party/tlRender-install-Release/include/SDL2/SDL_guid.h @@ -0,0 +1,107 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2025 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +/* WIKI CATEGORY: GUID */ + +/** + * # CategoryGUID + * + * A GUID is a 128-bit value that represents something that is uniquely + * identifiable by this value: "globally unique." + */ + +#ifndef SDL_guid_h_ +#define SDL_guid_h_ + +#include "SDL_stdinc.h" +#include "SDL_error.h" + +#include "begin_code.h" +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/** + * An SDL_GUID is a 128-bit identifier. + * + * This is an acronym for "Globally Unique ID." + * + * While a GUID can be used to assign a unique value to almost anything, in + * SDL these are largely used to identify input devices across runs of SDL + * programs on the same platform.If the device is detached and then + * re-attached to a different port, or if the base system is rebooted, the + * device should still report the same GUID. + * + * GUIDs are as precise as possible but are not guaranteed to distinguish + * physically distinct but equivalent devices. For example, two game + * controllers from the same vendor with the same product ID and revision may + * have the same GUID. + * + * GUIDs may be platform-dependent (i.e., the same device may report different + * GUIDs on different operating systems). + */ +typedef struct SDL_GUID { + Uint8 data[16]; +} SDL_GUID; + +/* Function prototypes */ + +/** + * Get an ASCII string representation for a given SDL_GUID. + * + * You should supply at least 33 bytes for pszGUID. + * + * \param guid the SDL_GUID you wish to convert to string. + * \param pszGUID buffer in which to write the ASCII string. + * \param cbGUID the size of pszGUID. + * + * \since This function is available since SDL 2.24.0. + * + * \sa SDL_GUIDFromString + */ +extern DECLSPEC void SDLCALL SDL_GUIDToString(SDL_GUID guid, char *pszGUID, int cbGUID); + +/** + * Convert a GUID string into a SDL_GUID structure. + * + * Performs no error checking. If this function is given a string containing + * an invalid GUID, the function will silently succeed, but the GUID generated + * will not be useful. + * + * \param pchGUID string containing an ASCII representation of a GUID. + * \returns a SDL_GUID structure. + * + * \since This function is available since SDL 2.24.0. + * + * \sa SDL_GUIDToString + */ +extern DECLSPEC SDL_GUID SDLCALL SDL_GUIDFromString(const char *pchGUID); + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include "close_code.h" + +#endif /* SDL_guid_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/third_party/tlRender-install-Release/include/SDL2/SDL_haptic.h b/third_party/tlRender-install-Release/include/SDL2/SDL_haptic.h new file mode 100644 index 00000000..f679c573 --- /dev/null +++ b/third_party/tlRender-install-Release/include/SDL2/SDL_haptic.h @@ -0,0 +1,1354 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2025 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +/** + * # CategoryHaptic + * + * SDL haptic subsystem allows you to control haptic (force feedback) devices. + * + * The basic usage is as follows: + * + * - Initialize the subsystem (SDL_INIT_HAPTIC). + * - Open a haptic device. + * - SDL_HapticOpen() to open from index. + * - SDL_HapticOpenFromJoystick() to open from an existing joystick. + * - Create an effect (SDL_HapticEffect). + * - Upload the effect with SDL_HapticNewEffect(). + * - Run the effect with SDL_HapticRunEffect(). + * - (optional) Free the effect with SDL_HapticDestroyEffect(). + * - Close the haptic device with SDL_HapticClose(). + * + * Simple rumble example: + * + * ```c + * SDL_Haptic *haptic; + * + * // Open the device + * haptic = SDL_HapticOpen( 0 ); + * if (haptic == NULL) + * return -1; + * + * // Initialize simple rumble + * if (SDL_HapticRumbleInit( haptic ) != 0) + * return -1; + * + * // Play effect at 50% strength for 2 seconds + * if (SDL_HapticRumblePlay( haptic, 0.5, 2000 ) != 0) + * return -1; + * SDL_Delay( 2000 ); + * + * // Clean up + * SDL_HapticClose( haptic ); + * ``` + * + * Complete example: + * + * ```c + * int test_haptic( SDL_Joystick * joystick ) { + * SDL_Haptic *haptic; + * SDL_HapticEffect effect; + * int effect_id; + * + * // Open the device + * haptic = SDL_HapticOpenFromJoystick( joystick ); + * if (haptic == NULL) return -1; // Most likely joystick isn't haptic + * + * // See if it can do sine waves + * if ((SDL_HapticQuery(haptic) & SDL_HAPTIC_SINE)==0) { + * SDL_HapticClose(haptic); // No sine effect + * return -1; + * } + * + * // Create the effect + * SDL_memset( &effect, 0, sizeof(SDL_HapticEffect) ); // 0 is safe default + * effect.type = SDL_HAPTIC_SINE; + * effect.periodic.direction.type = SDL_HAPTIC_POLAR; // Polar coordinates + * effect.periodic.direction.dir[0] = 18000; // Force comes from south + * effect.periodic.period = 1000; // 1000 ms + * effect.periodic.magnitude = 20000; // 20000/32767 strength + * effect.periodic.length = 5000; // 5 seconds long + * effect.periodic.attack_length = 1000; // Takes 1 second to get max strength + * effect.periodic.fade_length = 1000; // Takes 1 second to fade away + * + * // Upload the effect + * effect_id = SDL_HapticNewEffect( haptic, &effect ); + * + * // Test the effect + * SDL_HapticRunEffect( haptic, effect_id, 1 ); + * SDL_Delay( 5000); // Wait for the effect to finish + * + * // We destroy the effect, although closing the device also does this + * SDL_HapticDestroyEffect( haptic, effect_id ); + * + * // Close the device + * SDL_HapticClose(haptic); + * + * return 0; // Success + * } + * ``` + */ + +#ifndef SDL_haptic_h_ +#define SDL_haptic_h_ + +#include "SDL_stdinc.h" +#include "SDL_error.h" +#include "SDL_joystick.h" + +#include "begin_code.h" +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + +/* FIXME: For SDL 2.1, adjust all the magnitude variables to be Uint16 (0xFFFF). + * + * At the moment the magnitude variables are mixed between signed/unsigned, and + * it is also not made clear that ALL of those variables expect a max of 0x7FFF. + * + * Some platforms may have higher precision than that (Linux FF, Windows XInput) + * so we should fix the inconsistency in favor of higher possible precision, + * adjusting for platforms that use different scales. + * -flibit + */ + +/** + * \typedef SDL_Haptic + * + * \brief The haptic structure used to identify an SDL haptic. + * + * \sa SDL_HapticOpen + * \sa SDL_HapticOpenFromJoystick + * \sa SDL_HapticClose + */ +struct _SDL_Haptic; +typedef struct _SDL_Haptic SDL_Haptic; + + +/** + * \name Haptic features + * + * Different haptic features a device can have. + */ +/* @{ */ + +/** + * \name Haptic effects + */ +/* @{ */ + +/** + * Constant effect supported. + * + * Constant haptic effect. + * + * \sa SDL_HapticCondition + */ +#define SDL_HAPTIC_CONSTANT (1u<<0) + +/** + * Sine wave effect supported. + * + * Periodic haptic effect that simulates sine waves. + * + * \sa SDL_HapticPeriodic + */ +#define SDL_HAPTIC_SINE (1u<<1) + +/** + * Left/Right effect supported. + * + * Haptic effect for direct control over high/low frequency motors. + * + * \sa SDL_HapticLeftRight + */ +#define SDL_HAPTIC_LEFTRIGHT (1u<<2) + +/* !!! FIXME: put this back when we have more bits in 2.1 */ +/* #define SDL_HAPTIC_SQUARE (1<<2) */ + +/** + * Triangle wave effect supported. + * + * Periodic haptic effect that simulates triangular waves. + * + * \sa SDL_HapticPeriodic + */ +#define SDL_HAPTIC_TRIANGLE (1u<<3) + +/** + * Sawtoothup wave effect supported. + * + * Periodic haptic effect that simulates saw tooth up waves. + * + * \sa SDL_HapticPeriodic + */ +#define SDL_HAPTIC_SAWTOOTHUP (1u<<4) + +/** + * Sawtoothdown wave effect supported. + * + * Periodic haptic effect that simulates saw tooth down waves. + * + * \sa SDL_HapticPeriodic + */ +#define SDL_HAPTIC_SAWTOOTHDOWN (1u<<5) + +/** + * Ramp effect supported. + * + * Ramp haptic effect. + * + * \sa SDL_HapticRamp + */ +#define SDL_HAPTIC_RAMP (1u<<6) + +/** + * Spring effect supported - uses axes position. + * + * Condition haptic effect that simulates a spring. Effect is based on the + * axes position. + * + * \sa SDL_HapticCondition + */ +#define SDL_HAPTIC_SPRING (1u<<7) + +/** + * Damper effect supported - uses axes velocity. + * + * Condition haptic effect that simulates dampening. Effect is based on the + * axes velocity. + * + * \sa SDL_HapticCondition + */ +#define SDL_HAPTIC_DAMPER (1u<<8) + +/** + * Inertia effect supported - uses axes acceleration. + * + * Condition haptic effect that simulates inertia. Effect is based on the axes + * acceleration. + * + * \sa SDL_HapticCondition + */ +#define SDL_HAPTIC_INERTIA (1u<<9) + +/** + * Friction effect supported - uses axes movement. + * + * Condition haptic effect that simulates friction. Effect is based on the + * axes movement. + * + * \sa SDL_HapticCondition + */ +#define SDL_HAPTIC_FRICTION (1u<<10) + +/** + * Custom effect is supported. + * + * User defined custom haptic effect. + */ +#define SDL_HAPTIC_CUSTOM (1u<<11) + +/* @} *//* Haptic effects */ + +/* These last few are features the device has, not effects */ + +/** + * Device can set global gain. + * + * Device supports setting the global gain. + * + * \sa SDL_HapticSetGain + */ +#define SDL_HAPTIC_GAIN (1u<<12) + +/** + * Device can set autocenter. + * + * Device supports setting autocenter. + * + * \sa SDL_HapticSetAutocenter + */ +#define SDL_HAPTIC_AUTOCENTER (1u<<13) + +/** + * Device can be queried for effect status. + * + * Device supports querying effect status. + * + * \sa SDL_HapticGetEffectStatus + */ +#define SDL_HAPTIC_STATUS (1u<<14) + +/** + * Device can be paused. + * + * Devices supports being paused. + * + * \sa SDL_HapticPause + * \sa SDL_HapticUnpause + */ +#define SDL_HAPTIC_PAUSE (1u<<15) + + +/** + * \name Direction encodings + */ +/* @{ */ + +/** + * Uses polar coordinates for the direction. + * + * \sa SDL_HapticDirection + */ +#define SDL_HAPTIC_POLAR 0 + +/** + * Uses cartesian coordinates for the direction. + * + * \sa SDL_HapticDirection + */ +#define SDL_HAPTIC_CARTESIAN 1 + +/** + * Uses spherical coordinates for the direction. + * + * \sa SDL_HapticDirection + */ +#define SDL_HAPTIC_SPHERICAL 2 + +/** + * Use this value to play an effect on the steering wheel axis. + * + * This provides better compatibility across platforms and devices as SDL will + * guess the correct axis. + * + * \sa SDL_HapticDirection + */ +#define SDL_HAPTIC_STEERING_AXIS 3 + +/* @} *//* Direction encodings */ + +/* @} *//* Haptic features */ + +/* + * Misc defines. + */ + +/** + * Used to play a device an infinite number of times. + * + * \sa SDL_HapticRunEffect + */ +#define SDL_HAPTIC_INFINITY 4294967295U + + +/** + * Structure that represents a haptic direction. + * + * This is the direction where the force comes from, instead of the direction + * in which the force is exerted. + * + * Directions can be specified by: + * + * - SDL_HAPTIC_POLAR : Specified by polar coordinates. + * - SDL_HAPTIC_CARTESIAN : Specified by cartesian coordinates. + * - SDL_HAPTIC_SPHERICAL : Specified by spherical coordinates. + * + * Cardinal directions of the haptic device are relative to the positioning of + * the device. North is considered to be away from the user. + * + * The following diagram represents the cardinal directions: + * + * ``` + * .--. + * |__| .-------. + * |=.| |.-----.| + * |--| || || + * | | |'-----'| + * |__|~')_____(' + * [ COMPUTER ] + * + * + * North (0,-1) + * ^ + * | + * | + * (-1,0) West <----[ HAPTIC ]----> East (1,0) + * | + * | + * v + * South (0,1) + * + * + * [ USER ] + * \|||/ + * (o o) + * ---ooO-(_)-Ooo--- + * ``` + * + * If type is SDL_HAPTIC_POLAR, direction is encoded by hundredths of a degree + * starting north and turning clockwise. SDL_HAPTIC_POLAR only uses the first + * `dir` parameter. The cardinal directions would be: + * + * - North: 0 (0 degrees) + * - East: 9000 (90 degrees) + * - South: 18000 (180 degrees) + * - West: 27000 (270 degrees) + * + * If type is SDL_HAPTIC_CARTESIAN, direction is encoded by three positions (X + * axis, Y axis and Z axis (with 3 axes)). SDL_HAPTIC_CARTESIAN uses the first + * three `dir` parameters. The cardinal directions would be: + * + * - North: 0,-1, 0 + * - East: 1, 0, 0 + * - South: 0, 1, 0 + * - West: -1, 0, 0 + * + * The Z axis represents the height of the effect if supported, otherwise it's + * unused. In cartesian encoding (1, 2) would be the same as (2, 4), you can + * use any multiple you want, only the direction matters. + * + * If type is SDL_HAPTIC_SPHERICAL, direction is encoded by two rotations. The + * first two `dir` parameters are used. The `dir` parameters are as follows + * (all values are in hundredths of degrees): + * + * - Degrees from (1, 0) rotated towards (0, 1). + * - Degrees towards (0, 0, 1) (device needs at least 3 axes). + * + * Example of force coming from the south with all encodings (force coming + * from the south means the user will have to pull the stick to counteract): + * + * ```c + * SDL_HapticDirection direction; + * + * // Cartesian directions + * direction.type = SDL_HAPTIC_CARTESIAN; // Using cartesian direction encoding. + * direction.dir[0] = 0; // X position + * direction.dir[1] = 1; // Y position + * // Assuming the device has 2 axes, we don't need to specify third parameter. + * + * // Polar directions + * direction.type = SDL_HAPTIC_POLAR; // We'll be using polar direction encoding. + * direction.dir[0] = 18000; // Polar only uses first parameter + * + * // Spherical coordinates + * direction.type = SDL_HAPTIC_SPHERICAL; // Spherical encoding + * direction.dir[0] = 9000; // Since we only have two axes we don't need more parameters. + * ``` + * + * \sa SDL_HAPTIC_POLAR + * \sa SDL_HAPTIC_CARTESIAN + * \sa SDL_HAPTIC_SPHERICAL + * \sa SDL_HAPTIC_STEERING_AXIS + * \sa SDL_HapticEffect + * \sa SDL_HapticNumAxes + */ +typedef struct SDL_HapticDirection +{ + Uint8 type; /**< The type of encoding. */ + Sint32 dir[3]; /**< The encoded direction. */ +} SDL_HapticDirection; + + +/** + * A structure containing a template for a Constant effect. + * + * This struct is exclusively for the SDL_HAPTIC_CONSTANT effect. + * + * A constant effect applies a constant force in the specified direction to + * the joystick. + * + * \sa SDL_HAPTIC_CONSTANT + * \sa SDL_HapticEffect + */ +typedef struct SDL_HapticConstant +{ + /* Header */ + Uint16 type; /**< SDL_HAPTIC_CONSTANT */ + SDL_HapticDirection direction; /**< Direction of the effect. */ + + /* Replay */ + Uint32 length; /**< Duration of the effect. */ + Uint16 delay; /**< Delay before starting the effect. */ + + /* Trigger */ + Uint16 button; /**< Button that triggers the effect. */ + Uint16 interval; /**< How soon it can be triggered again after button. */ + + /* Constant */ + Sint16 level; /**< Strength of the constant effect. */ + + /* Envelope */ + Uint16 attack_length; /**< Duration of the attack. */ + Uint16 attack_level; /**< Level at the start of the attack. */ + Uint16 fade_length; /**< Duration of the fade. */ + Uint16 fade_level; /**< Level at the end of the fade. */ +} SDL_HapticConstant; + +/** + * A structure containing a template for a Periodic effect. + * + * The struct handles the following effects: + * + * - SDL_HAPTIC_SINE + * - SDL_HAPTIC_SQUARE + * - SDL_HAPTIC_TRIANGLE + * - SDL_HAPTIC_SAWTOOTHUP + * - SDL_HAPTIC_SAWTOOTHDOWN + * + * A periodic effect consists in a wave-shaped effect that repeats itself over + * time. The type determines the shape of the wave and the parameters + * determine the dimensions of the wave. + * + * Phase is given by hundredth of a degree meaning that giving the phase a + * value of 9000 will displace it 25% of its period. Here are sample values: + * + * - 0: No phase displacement. + * - 9000: Displaced 25% of its period. + * - 18000: Displaced 50% of its period. + * - 27000: Displaced 75% of its period. + * - 36000: Displaced 100% of its period, same as 0, but 0 is preferred. + * + * Examples: + * + * ``` + * SDL_HAPTIC_SINE + * __ __ __ __ + * / \ / \ / \ / + * / \__/ \__/ \__/ + * + * SDL_HAPTIC_SQUARE + * __ __ __ __ __ + * | | | | | | | | | | + * | |__| |__| |__| |__| | + * + * SDL_HAPTIC_TRIANGLE + * /\ /\ /\ /\ /\ + * / \ / \ / \ / \ / + * / \/ \/ \/ \/ + * + * SDL_HAPTIC_SAWTOOTHUP + * /| /| /| /| /| /| /| + * / | / | / | / | / | / | / | + * / |/ |/ |/ |/ |/ |/ | + * + * SDL_HAPTIC_SAWTOOTHDOWN + * \ |\ |\ |\ |\ |\ |\ | + * \ | \ | \ | \ | \ | \ | \ | + * \| \| \| \| \| \| \| + * ``` + * + * \sa SDL_HAPTIC_SINE + * \sa SDL_HAPTIC_LEFTRIGHT + * \sa SDL_HAPTIC_TRIANGLE + * \sa SDL_HAPTIC_SAWTOOTHUP + * \sa SDL_HAPTIC_SAWTOOTHDOWN + * \sa SDL_HapticEffect + */ +typedef struct SDL_HapticPeriodic +{ + /* Header */ + Uint16 type; /**< SDL_HAPTIC_SINE, SDL_HAPTIC_LEFTRIGHT, + SDL_HAPTIC_TRIANGLE, SDL_HAPTIC_SAWTOOTHUP or + SDL_HAPTIC_SAWTOOTHDOWN */ + SDL_HapticDirection direction; /**< Direction of the effect. */ + + /* Replay */ + Uint32 length; /**< Duration of the effect. */ + Uint16 delay; /**< Delay before starting the effect. */ + + /* Trigger */ + Uint16 button; /**< Button that triggers the effect. */ + Uint16 interval; /**< How soon it can be triggered again after button. */ + + /* Periodic */ + Uint16 period; /**< Period of the wave. */ + Sint16 magnitude; /**< Peak value; if negative, equivalent to 180 degrees extra phase shift. */ + Sint16 offset; /**< Mean value of the wave. */ + Uint16 phase; /**< Positive phase shift given by hundredth of a degree. */ + + /* Envelope */ + Uint16 attack_length; /**< Duration of the attack. */ + Uint16 attack_level; /**< Level at the start of the attack. */ + Uint16 fade_length; /**< Duration of the fade. */ + Uint16 fade_level; /**< Level at the end of the fade. */ +} SDL_HapticPeriodic; + +/** + * A structure containing a template for a Condition effect. + * + * The struct handles the following effects: + * + * - SDL_HAPTIC_SPRING: Effect based on axes position. + * - SDL_HAPTIC_DAMPER: Effect based on axes velocity. + * - SDL_HAPTIC_INERTIA: Effect based on axes acceleration. + * - SDL_HAPTIC_FRICTION: Effect based on axes movement. + * + * Direction is handled by condition internals instead of a direction member. + * The condition effect specific members have three parameters. The first + * refers to the X axis, the second refers to the Y axis and the third refers + * to the Z axis. The right terms refer to the positive side of the axis and + * the left terms refer to the negative side of the axis. Please refer to the + * SDL_HapticDirection diagram for which side is positive and which is + * negative. + * + * \sa SDL_HapticDirection + * \sa SDL_HAPTIC_SPRING + * \sa SDL_HAPTIC_DAMPER + * \sa SDL_HAPTIC_INERTIA + * \sa SDL_HAPTIC_FRICTION + * \sa SDL_HapticEffect + */ +typedef struct SDL_HapticCondition +{ + /* Header */ + Uint16 type; /**< SDL_HAPTIC_SPRING, SDL_HAPTIC_DAMPER, + SDL_HAPTIC_INERTIA or SDL_HAPTIC_FRICTION */ + SDL_HapticDirection direction; /**< Direction of the effect. */ + + /* Replay */ + Uint32 length; /**< Duration of the effect. */ + Uint16 delay; /**< Delay before starting the effect. */ + + /* Trigger */ + Uint16 button; /**< Button that triggers the effect. */ + Uint16 interval; /**< How soon it can be triggered again after button. */ + + /* Condition */ + Uint16 right_sat[3]; /**< Level when joystick is to the positive side; max 0xFFFF. */ + Uint16 left_sat[3]; /**< Level when joystick is to the negative side; max 0xFFFF. */ + Sint16 right_coeff[3]; /**< How fast to increase the force towards the positive side. */ + Sint16 left_coeff[3]; /**< How fast to increase the force towards the negative side. */ + Uint16 deadband[3]; /**< Size of the dead zone; max 0xFFFF: whole axis-range when 0-centered. */ + Sint16 center[3]; /**< Position of the dead zone. */ +} SDL_HapticCondition; + +/** + * A structure containing a template for a Ramp effect. + * + * This struct is exclusively for the SDL_HAPTIC_RAMP effect. + * + * The ramp effect starts at start strength and ends at end strength. It + * augments in linear fashion. If you use attack and fade with a ramp the + * effects get added to the ramp effect making the effect become quadratic + * instead of linear. + * + * \sa SDL_HAPTIC_RAMP + * \sa SDL_HapticEffect + */ +typedef struct SDL_HapticRamp +{ + /* Header */ + Uint16 type; /**< SDL_HAPTIC_RAMP */ + SDL_HapticDirection direction; /**< Direction of the effect. */ + + /* Replay */ + Uint32 length; /**< Duration of the effect. */ + Uint16 delay; /**< Delay before starting the effect. */ + + /* Trigger */ + Uint16 button; /**< Button that triggers the effect. */ + Uint16 interval; /**< How soon it can be triggered again after button. */ + + /* Ramp */ + Sint16 start; /**< Beginning strength level. */ + Sint16 end; /**< Ending strength level. */ + + /* Envelope */ + Uint16 attack_length; /**< Duration of the attack. */ + Uint16 attack_level; /**< Level at the start of the attack. */ + Uint16 fade_length; /**< Duration of the fade. */ + Uint16 fade_level; /**< Level at the end of the fade. */ +} SDL_HapticRamp; + +/** + * A structure containing a template for a Left/Right effect. + * + * This struct is exclusively for the SDL_HAPTIC_LEFTRIGHT effect. + * + * The Left/Right effect is used to explicitly control the large and small + * motors, commonly found in modern game controllers. The small (right) motor + * is high frequency, and the large (left) motor is low frequency. + * + * \sa SDL_HAPTIC_LEFTRIGHT + * \sa SDL_HapticEffect + */ +typedef struct SDL_HapticLeftRight +{ + /* Header */ + Uint16 type; /**< SDL_HAPTIC_LEFTRIGHT */ + + /* Replay */ + Uint32 length; /**< Duration of the effect in milliseconds. */ + + /* Rumble */ + Uint16 large_magnitude; /**< Control of the large controller motor. */ + Uint16 small_magnitude; /**< Control of the small controller motor. */ +} SDL_HapticLeftRight; + +/** + * A structure containing a template for the SDL_HAPTIC_CUSTOM effect. + * + * This struct is exclusively for the SDL_HAPTIC_CUSTOM effect. + * + * A custom force feedback effect is much like a periodic effect, where the + * application can define its exact shape. You will have to allocate the data + * yourself. Data should consist of channels * samples Uint16 samples. + * + * If channels is one, the effect is rotated using the defined direction. + * Otherwise it uses the samples in data for the different axes. + * + * \sa SDL_HAPTIC_CUSTOM + * \sa SDL_HapticEffect + */ +typedef struct SDL_HapticCustom +{ + /* Header */ + Uint16 type; /**< SDL_HAPTIC_CUSTOM */ + SDL_HapticDirection direction; /**< Direction of the effect. */ + + /* Replay */ + Uint32 length; /**< Duration of the effect. */ + Uint16 delay; /**< Delay before starting the effect. */ + + /* Trigger */ + Uint16 button; /**< Button that triggers the effect. */ + Uint16 interval; /**< How soon it can be triggered again after button. */ + + /* Custom */ + Uint8 channels; /**< Axes to use, minimum of one. */ + Uint16 period; /**< Sample periods. */ + Uint16 samples; /**< Amount of samples. */ + Uint16 *data; /**< Should contain channels*samples items. */ + + /* Envelope */ + Uint16 attack_length; /**< Duration of the attack. */ + Uint16 attack_level; /**< Level at the start of the attack. */ + Uint16 fade_length; /**< Duration of the fade. */ + Uint16 fade_level; /**< Level at the end of the fade. */ +} SDL_HapticCustom; + +/** + * The generic template for any haptic effect. + * + * All values max at 32767 (0x7FFF). Signed values also can be negative. Time + * values unless specified otherwise are in milliseconds. + * + * You can also pass SDL_HAPTIC_INFINITY to length instead of a 0-32767 value. + * Neither delay, interval, attack_length nor fade_length support + * SDL_HAPTIC_INFINITY. Fade will also not be used since effect never ends. + * + * Additionally, the SDL_HAPTIC_RAMP effect does not support a duration of + * SDL_HAPTIC_INFINITY. + * + * Button triggers may not be supported on all devices, it is advised to not + * use them if possible. Buttons start at index 1 instead of index 0 like the + * joystick. + * + * If both attack_length and fade_level are 0, the envelope is not used, + * otherwise both values are used. + * + * Common parts: + * + * ```c + * // Replay - All effects have this + * Uint32 length; // Duration of effect (ms). + * Uint16 delay; // Delay before starting effect. + * + * // Trigger - All effects have this + * Uint16 button; // Button that triggers effect. + * Uint16 interval; // How soon before effect can be triggered again. + * + * // Envelope - All effects except condition effects have this + * Uint16 attack_length; // Duration of the attack (ms). + * Uint16 attack_level; // Level at the start of the attack. + * Uint16 fade_length; // Duration of the fade out (ms). + * Uint16 fade_level; // Level at the end of the fade. + * ``` + * + * Here we have an example of a constant effect evolution in time: + * + * ``` + * Strength + * ^ + * | + * | effect level --> _________________ + * | / \ + * | / \ + * | / \ + * | / \ + * | attack_level --> | \ + * | | | <--- fade_level + * | + * +--------------------------------------------------> Time + * [--] [---] + * attack_length fade_length + * + * [------------------][-----------------------] + * delay length + * ``` + * + * Note either the attack_level or the fade_level may be above the actual + * effect level. + * + * \sa SDL_HapticConstant + * \sa SDL_HapticPeriodic + * \sa SDL_HapticCondition + * \sa SDL_HapticRamp + * \sa SDL_HapticLeftRight + * \sa SDL_HapticCustom + */ +typedef union SDL_HapticEffect +{ + /* Common for all force feedback effects */ + Uint16 type; /**< Effect type. */ + SDL_HapticConstant constant; /**< Constant effect. */ + SDL_HapticPeriodic periodic; /**< Periodic effect. */ + SDL_HapticCondition condition; /**< Condition effect. */ + SDL_HapticRamp ramp; /**< Ramp effect. */ + SDL_HapticLeftRight leftright; /**< Left/Right effect. */ + SDL_HapticCustom custom; /**< Custom effect. */ +} SDL_HapticEffect; + + +/* Function prototypes */ + +/** + * Count the number of haptic devices attached to the system. + * + * \returns the number of haptic devices detected on the system or a negative + * error code on failure; call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_HapticName + */ +extern DECLSPEC int SDLCALL SDL_NumHaptics(void); + +/** + * Get the implementation dependent name of a haptic device. + * + * This can be called before any joysticks are opened. If no name can be + * found, this function returns NULL. + * + * \param device_index index of the device to query. + * \returns the name of the device or NULL on failure; call SDL_GetError() for + * more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_NumHaptics + */ +extern DECLSPEC const char *SDLCALL SDL_HapticName(int device_index); + +/** + * Open a haptic device for use. + * + * The index passed as an argument refers to the N'th haptic device on this + * system. + * + * When opening a haptic device, its gain will be set to maximum and + * autocenter will be disabled. To modify these values use SDL_HapticSetGain() + * and SDL_HapticSetAutocenter(). + * + * \param device_index index of the device to open. + * \returns the device identifier or NULL on failure; call SDL_GetError() for + * more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_HapticClose + * \sa SDL_HapticIndex + * \sa SDL_HapticOpenFromJoystick + * \sa SDL_HapticOpenFromMouse + * \sa SDL_HapticPause + * \sa SDL_HapticSetAutocenter + * \sa SDL_HapticSetGain + * \sa SDL_HapticStopAll + */ +extern DECLSPEC SDL_Haptic *SDLCALL SDL_HapticOpen(int device_index); + +/** + * Check if the haptic device at the designated index has been opened. + * + * \param device_index the index of the device to query. + * \returns 1 if it has been opened, 0 if it hasn't or on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_HapticIndex + * \sa SDL_HapticOpen + */ +extern DECLSPEC int SDLCALL SDL_HapticOpened(int device_index); + +/** + * Get the index of a haptic device. + * + * \param haptic the SDL_Haptic device to query. + * \returns the index of the specified haptic device or a negative error code + * on failure; call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_HapticOpen + * \sa SDL_HapticOpened + */ +extern DECLSPEC int SDLCALL SDL_HapticIndex(SDL_Haptic * haptic); + +/** + * Query whether or not the current mouse has haptic capabilities. + * + * \returns SDL_TRUE if the mouse is haptic or SDL_FALSE if it isn't. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_HapticOpenFromMouse + */ +extern DECLSPEC int SDLCALL SDL_MouseIsHaptic(void); + +/** + * Try to open a haptic device from the current mouse. + * + * \returns the haptic device identifier or NULL on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_HapticOpen + * \sa SDL_MouseIsHaptic + */ +extern DECLSPEC SDL_Haptic *SDLCALL SDL_HapticOpenFromMouse(void); + +/** + * Query if a joystick has haptic features. + * + * \param joystick the SDL_Joystick to test for haptic capabilities. + * \returns SDL_TRUE if the joystick is haptic, SDL_FALSE if it isn't, or a + * negative error code on failure; call SDL_GetError() for more + * information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_HapticOpenFromJoystick + */ +extern DECLSPEC int SDLCALL SDL_JoystickIsHaptic(SDL_Joystick * joystick); + +/** + * Open a haptic device for use from a joystick device. + * + * You must still close the haptic device separately. It will not be closed + * with the joystick. + * + * When opened from a joystick you should first close the haptic device before + * closing the joystick device. If not, on some implementations the haptic + * device will also get unallocated and you'll be unable to use force feedback + * on that device. + * + * \param joystick the SDL_Joystick to create a haptic device from. + * \returns a valid haptic device identifier on success or NULL on failure; + * call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_HapticClose + * \sa SDL_HapticOpen + * \sa SDL_JoystickIsHaptic + */ +extern DECLSPEC SDL_Haptic *SDLCALL SDL_HapticOpenFromJoystick(SDL_Joystick * + joystick); + +/** + * Close a haptic device previously opened with SDL_HapticOpen(). + * + * \param haptic the SDL_Haptic device to close. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_HapticOpen + */ +extern DECLSPEC void SDLCALL SDL_HapticClose(SDL_Haptic * haptic); + +/** + * Get the number of effects a haptic device can store. + * + * On some platforms this isn't fully supported, and therefore is an + * approximation. Always check to see if your created effect was actually + * created and do not rely solely on SDL_HapticNumEffects(). + * + * \param haptic the SDL_Haptic device to query. + * \returns the number of effects the haptic device can store or a negative + * error code on failure; call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_HapticNumEffectsPlaying + * \sa SDL_HapticQuery + */ +extern DECLSPEC int SDLCALL SDL_HapticNumEffects(SDL_Haptic * haptic); + +/** + * Get the number of effects a haptic device can play at the same time. + * + * This is not supported on all platforms, but will always return a value. + * + * \param haptic the SDL_Haptic device to query maximum playing effects. + * \returns the number of effects the haptic device can play at the same time + * or a negative error code on failure; call SDL_GetError() for more + * information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_HapticNumEffects + * \sa SDL_HapticQuery + */ +extern DECLSPEC int SDLCALL SDL_HapticNumEffectsPlaying(SDL_Haptic * haptic); + +/** + * Get the haptic device's supported features in bitwise manner. + * + * \param haptic the SDL_Haptic device to query. + * \returns a list of supported haptic features in bitwise manner (OR'd), or 0 + * on failure; call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_HapticEffectSupported + * \sa SDL_HapticNumEffects + */ +extern DECLSPEC unsigned int SDLCALL SDL_HapticQuery(SDL_Haptic * haptic); + + +/** + * Get the number of haptic axes the device has. + * + * The number of haptic axes might be useful if working with the + * SDL_HapticDirection effect. + * + * \param haptic the SDL_Haptic device to query. + * \returns the number of axes on success or a negative error code on failure; + * call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + */ +extern DECLSPEC int SDLCALL SDL_HapticNumAxes(SDL_Haptic * haptic); + +/** + * Check to see if an effect is supported by a haptic device. + * + * \param haptic the SDL_Haptic device to query. + * \param effect the desired effect to query. + * \returns SDL_TRUE if effect is supported, SDL_FALSE if it isn't, or a + * negative error code on failure; call SDL_GetError() for more + * information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_HapticNewEffect + * \sa SDL_HapticQuery + */ +extern DECLSPEC int SDLCALL SDL_HapticEffectSupported(SDL_Haptic * haptic, + SDL_HapticEffect * + effect); + +/** + * Create a new haptic effect on a specified device. + * + * \param haptic an SDL_Haptic device to create the effect on. + * \param effect an SDL_HapticEffect structure containing the properties of + * the effect to create. + * \returns the ID of the effect on success or a negative error code on + * failure; call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_HapticDestroyEffect + * \sa SDL_HapticRunEffect + * \sa SDL_HapticUpdateEffect + */ +extern DECLSPEC int SDLCALL SDL_HapticNewEffect(SDL_Haptic * haptic, + SDL_HapticEffect * effect); + +/** + * Update the properties of an effect. + * + * Can be used dynamically, although behavior when dynamically changing + * direction may be strange. Specifically the effect may re-upload itself and + * start playing from the start. You also cannot change the type either when + * running SDL_HapticUpdateEffect(). + * + * \param haptic the SDL_Haptic device that has the effect. + * \param effect the identifier of the effect to update. + * \param data an SDL_HapticEffect structure containing the new effect + * properties to use. + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_HapticDestroyEffect + * \sa SDL_HapticNewEffect + * \sa SDL_HapticRunEffect + */ +extern DECLSPEC int SDLCALL SDL_HapticUpdateEffect(SDL_Haptic * haptic, + int effect, + SDL_HapticEffect * data); + +/** + * Run the haptic effect on its associated haptic device. + * + * To repeat the effect over and over indefinitely, set `iterations` to + * `SDL_HAPTIC_INFINITY`. (Repeats the envelope - attack and fade.) To make + * one instance of the effect last indefinitely (so the effect does not fade), + * set the effect's `length` in its structure/union to `SDL_HAPTIC_INFINITY` + * instead. + * + * \param haptic the SDL_Haptic device to run the effect on. + * \param effect the ID of the haptic effect to run. + * \param iterations the number of iterations to run the effect; use + * `SDL_HAPTIC_INFINITY` to repeat forever. + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_HapticDestroyEffect + * \sa SDL_HapticGetEffectStatus + * \sa SDL_HapticStopEffect + */ +extern DECLSPEC int SDLCALL SDL_HapticRunEffect(SDL_Haptic * haptic, + int effect, + Uint32 iterations); + +/** + * Stop the haptic effect on its associated haptic device. + * + * * + * + * \param haptic the SDL_Haptic device to stop the effect on. + * \param effect the ID of the haptic effect to stop. + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_HapticDestroyEffect + * \sa SDL_HapticRunEffect + */ +extern DECLSPEC int SDLCALL SDL_HapticStopEffect(SDL_Haptic * haptic, + int effect); + +/** + * Destroy a haptic effect on the device. + * + * This will stop the effect if it's running. Effects are automatically + * destroyed when the device is closed. + * + * \param haptic the SDL_Haptic device to destroy the effect on. + * \param effect the ID of the haptic effect to destroy. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_HapticNewEffect + */ +extern DECLSPEC void SDLCALL SDL_HapticDestroyEffect(SDL_Haptic * haptic, + int effect); + +/** + * Get the status of the current effect on the specified haptic device. + * + * Device must support the SDL_HAPTIC_STATUS feature. + * + * \param haptic the SDL_Haptic device to query for the effect status on. + * \param effect the ID of the haptic effect to query its status. + * \returns 0 if it isn't playing, 1 if it is playing, or a negative error + * code on failure; call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_HapticRunEffect + * \sa SDL_HapticStopEffect + */ +extern DECLSPEC int SDLCALL SDL_HapticGetEffectStatus(SDL_Haptic * haptic, + int effect); + +/** + * Set the global gain of the specified haptic device. + * + * Device must support the SDL_HAPTIC_GAIN feature. + * + * The user may specify the maximum gain by setting the environment variable + * `SDL_HAPTIC_GAIN_MAX` which should be between 0 and 100. All calls to + * SDL_HapticSetGain() will scale linearly using `SDL_HAPTIC_GAIN_MAX` as the + * maximum. + * + * \param haptic the SDL_Haptic device to set the gain on. + * \param gain value to set the gain to, should be between 0 and 100 (0 - + * 100). + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_HapticQuery + */ +extern DECLSPEC int SDLCALL SDL_HapticSetGain(SDL_Haptic * haptic, int gain); + +/** + * Set the global autocenter of the device. + * + * Autocenter should be between 0 and 100. Setting it to 0 will disable + * autocentering. + * + * Device must support the SDL_HAPTIC_AUTOCENTER feature. + * + * \param haptic the SDL_Haptic device to set autocentering on. + * \param autocenter value to set autocenter to (0-100). + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_HapticQuery + */ +extern DECLSPEC int SDLCALL SDL_HapticSetAutocenter(SDL_Haptic * haptic, + int autocenter); + +/** + * Pause a haptic device. + * + * Device must support the `SDL_HAPTIC_PAUSE` feature. Call + * SDL_HapticUnpause() to resume playback. + * + * Do not modify the effects nor add new ones while the device is paused. That + * can cause all sorts of weird errors. + * + * \param haptic the SDL_Haptic device to pause. + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_HapticUnpause + */ +extern DECLSPEC int SDLCALL SDL_HapticPause(SDL_Haptic * haptic); + +/** + * Unpause a haptic device. + * + * Call to unpause after SDL_HapticPause(). + * + * \param haptic the SDL_Haptic device to unpause. + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_HapticPause + */ +extern DECLSPEC int SDLCALL SDL_HapticUnpause(SDL_Haptic * haptic); + +/** + * Stop all the currently playing effects on a haptic device. + * + * \param haptic the SDL_Haptic device to stop. + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + */ +extern DECLSPEC int SDLCALL SDL_HapticStopAll(SDL_Haptic * haptic); + +/** + * Check whether rumble is supported on a haptic device. + * + * \param haptic haptic device to check for rumble support. + * \returns SDL_TRUE if effect is supported, SDL_FALSE if it isn't, or a + * negative error code on failure; call SDL_GetError() for more + * information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_HapticRumbleInit + * \sa SDL_HapticRumblePlay + * \sa SDL_HapticRumbleStop + */ +extern DECLSPEC int SDLCALL SDL_HapticRumbleSupported(SDL_Haptic * haptic); + +/** + * Initialize a haptic device for simple rumble playback. + * + * \param haptic the haptic device to initialize for simple rumble playback. + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_HapticOpen + * \sa SDL_HapticRumblePlay + * \sa SDL_HapticRumbleStop + * \sa SDL_HapticRumbleSupported + */ +extern DECLSPEC int SDLCALL SDL_HapticRumbleInit(SDL_Haptic * haptic); + +/** + * Run a simple rumble effect on a haptic device. + * + * \param haptic the haptic device to play the rumble effect on. + * \param strength strength of the rumble to play as a 0-1 float value. + * \param length length of the rumble to play in milliseconds. + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_HapticRumbleInit + * \sa SDL_HapticRumbleStop + * \sa SDL_HapticRumbleSupported + */ +extern DECLSPEC int SDLCALL SDL_HapticRumblePlay(SDL_Haptic * haptic, float strength, Uint32 length ); + +/** + * Stop the simple rumble on a haptic device. + * + * \param haptic the haptic device to stop the rumble effect on. + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_HapticRumbleInit + * \sa SDL_HapticRumblePlay + * \sa SDL_HapticRumbleSupported + */ +extern DECLSPEC int SDLCALL SDL_HapticRumbleStop(SDL_Haptic * haptic); + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include "close_code.h" + +#endif /* SDL_haptic_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/third_party/tlRender-install-Release/include/SDL2/SDL_hidapi.h b/third_party/tlRender-install-Release/include/SDL2/SDL_hidapi.h new file mode 100644 index 00000000..b14442a6 --- /dev/null +++ b/third_party/tlRender-install-Release/include/SDL2/SDL_hidapi.h @@ -0,0 +1,443 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2025 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +/* WIKI CATEGORY: HIDAPI */ + +/** + * # CategoryHIDAPI + * + * Header file for SDL HIDAPI functions. + * + * This is an adaptation of the original HIDAPI interface by Alan Ott, and + * includes source code licensed under the following license: + * + * ``` + * HIDAPI - Multi-Platform library for + * communication with HID devices. + * + * Copyright 2009, Alan Ott, Signal 11 Software. + * All Rights Reserved. + * + * This software may be used by anyone for any reason so + * long as the copyright notice in the source files + * remains intact. + * ``` + * + * (Note that this license is the same as item three of SDL's zlib license, so + * it adds no new requirements on the user.) + * + * If you would like a version of SDL without this code, you can build SDL + * with SDL_HIDAPI_DISABLED defined to 1. You might want to do this for + * example on iOS or tvOS to avoid a dependency on the CoreBluetooth + * framework. + */ + +#ifndef SDL_hidapi_h_ +#define SDL_hidapi_h_ + +#include "SDL_stdinc.h" + +#include "begin_code.h" +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/** + * A handle representing an open HID device + */ +struct SDL_hid_device_; +typedef struct SDL_hid_device_ SDL_hid_device; /**< opaque hidapi structure */ + +/** hidapi info structure */ + +/** + * Information about a connected HID device + */ +typedef struct SDL_hid_device_info +{ + /** Platform-specific device path */ + char *path; + /** Device Vendor ID */ + unsigned short vendor_id; + /** Device Product ID */ + unsigned short product_id; + /** Serial Number */ + wchar_t *serial_number; + /** Device Release Number in binary-coded decimal, + also known as Device Version Number */ + unsigned short release_number; + /** Manufacturer String */ + wchar_t *manufacturer_string; + /** Product string */ + wchar_t *product_string; + /** Usage Page for this Device/Interface + (Windows/Mac only). */ + unsigned short usage_page; + /** Usage for this Device/Interface + (Windows/Mac only).*/ + unsigned short usage; + /** The USB interface which this logical device + represents. + + * Valid on both Linux implementations in all cases. + * Valid on the Windows implementation only if the device + contains more than one interface. */ + int interface_number; + + /** Additional information about the USB interface. + Valid on libusb and Android implementations. */ + int interface_class; + int interface_subclass; + int interface_protocol; + + /** Pointer to the next device */ + struct SDL_hid_device_info *next; +} SDL_hid_device_info; + + +/** + * Initialize the HIDAPI library. + * + * This function initializes the HIDAPI library. Calling it is not strictly + * necessary, as it will be called automatically by SDL_hid_enumerate() and + * any of the SDL_hid_open_*() functions if it is needed. This function should + * be called at the beginning of execution however, if there is a chance of + * HIDAPI handles being opened by different threads simultaneously. + * + * Each call to this function should have a matching call to SDL_hid_exit() + * + * \returns 0 on success and -1 on error. + * + * \since This function is available since SDL 2.0.18. + * + * \sa SDL_hid_exit + */ +extern DECLSPEC int SDLCALL SDL_hid_init(void); + +/** + * Finalize the HIDAPI library. + * + * This function frees all of the static data associated with HIDAPI. It + * should be called at the end of execution to avoid memory leaks. + * + * \returns 0 on success and -1 on error. + * + * \since This function is available since SDL 2.0.18. + * + * \sa SDL_hid_init + */ +extern DECLSPEC int SDLCALL SDL_hid_exit(void); + +/** + * Check to see if devices may have been added or removed. + * + * Enumerating the HID devices is an expensive operation, so you can call this + * to see if there have been any system device changes since the last call to + * this function. A change in the counter returned doesn't necessarily mean + * that anything has changed, but you can call SDL_hid_enumerate() to get an + * updated device list. + * + * Calling this function for the first time may cause a thread or other system + * resource to be allocated to track device change notifications. + * + * \returns a change counter that is incremented with each potential device + * change, or 0 if device change detection isn't available. + * + * \since This function is available since SDL 2.0.18. + * + * \sa SDL_hid_enumerate + */ +extern DECLSPEC Uint32 SDLCALL SDL_hid_device_change_count(void); + +/** + * Enumerate the HID Devices. + * + * This function returns a linked list of all the HID devices attached to the + * system which match vendor_id and product_id. If `vendor_id` is set to 0 + * then any vendor matches. If `product_id` is set to 0 then any product + * matches. If `vendor_id` and `product_id` are both set to 0, then all HID + * devices will be returned. + * + * \param vendor_id The Vendor ID (VID) of the types of device to open. + * \param product_id The Product ID (PID) of the types of device to open. + * \returns a pointer to a linked list of type SDL_hid_device_info, containing + * information about the HID devices attached to the system, or NULL + * in the case of failure. Free this linked list by calling + * SDL_hid_free_enumeration(). + * + * \since This function is available since SDL 2.0.18. + * + * \sa SDL_hid_device_change_count + */ +extern DECLSPEC SDL_hid_device_info * SDLCALL SDL_hid_enumerate(unsigned short vendor_id, unsigned short product_id); + +/** + * Free an enumeration Linked List + * + * This function frees a linked list created by SDL_hid_enumerate(). + * + * \param devs Pointer to a list of struct_device returned from + * SDL_hid_enumerate(). + * + * \since This function is available since SDL 2.0.18. + */ +extern DECLSPEC void SDLCALL SDL_hid_free_enumeration(SDL_hid_device_info *devs); + +/** + * Open a HID device using a Vendor ID (VID), Product ID (PID) and optionally + * a serial number. + * + * If `serial_number` is NULL, the first device with the specified VID and PID + * is opened. + * + * \param vendor_id The Vendor ID (VID) of the device to open. + * \param product_id The Product ID (PID) of the device to open. + * \param serial_number The Serial Number of the device to open (Optionally + * NULL). + * \returns a pointer to a SDL_hid_device object on success or NULL on + * failure. + * + * \since This function is available since SDL 2.0.18. + */ +extern DECLSPEC SDL_hid_device * SDLCALL SDL_hid_open(unsigned short vendor_id, unsigned short product_id, const wchar_t *serial_number); + +/** + * Open a HID device by its path name. + * + * The path name be determined by calling SDL_hid_enumerate(), or a + * platform-specific path name can be used (eg: /dev/hidraw0 on Linux). + * + * \param path The path name of the device to open. + * \returns a pointer to a SDL_hid_device object on success or NULL on + * failure. + * + * \since This function is available since SDL 2.0.18. + */ +extern DECLSPEC SDL_hid_device * SDLCALL SDL_hid_open_path(const char *path, int bExclusive); + +/** + * Write an Output report to a HID device. + * + * The first byte of `data` must contain the Report ID. For devices which only + * support a single report, this must be set to 0x0. The remaining bytes + * contain the report data. Since the Report ID is mandatory, calls to + * SDL_hid_write() will always contain one more byte than the report contains. + * For example, if a hid report is 16 bytes long, 17 bytes must be passed to + * SDL_hid_write(), the Report ID (or 0x0, for devices with a single report), + * followed by the report data (16 bytes). In this example, the length passed + * in would be 17. + * + * SDL_hid_write() will send the data on the first OUT endpoint, if one + * exists. If it does not, it will send the data through the Control Endpoint + * (Endpoint 0). + * + * \param dev A device handle returned from SDL_hid_open(). + * \param data The data to send, including the report number as the first + * byte. + * \param length The length in bytes of the data to send. + * \returns the actual number of bytes written and -1 on error. + * + * \since This function is available since SDL 2.0.18. + */ +extern DECLSPEC int SDLCALL SDL_hid_write(SDL_hid_device *dev, const unsigned char *data, size_t length); + +/** + * Read an Input report from a HID device with timeout. + * + * Input reports are returned to the host through the INTERRUPT IN endpoint. + * The first byte will contain the Report number if the device uses numbered + * reports. + * + * \param dev A device handle returned from SDL_hid_open(). + * \param data A buffer to put the read data into. + * \param length The number of bytes to read. For devices with multiple + * reports, make sure to read an extra byte for the report + * number. + * \param milliseconds timeout in milliseconds or -1 for blocking wait. + * \returns the actual number of bytes read and -1 on error. If no packet was + * available to be read within the timeout period, this function + * returns 0. + * + * \since This function is available since SDL 2.0.18. + */ +extern DECLSPEC int SDLCALL SDL_hid_read_timeout(SDL_hid_device *dev, unsigned char *data, size_t length, int milliseconds); + +/** + * Read an Input report from a HID device. + * + * Input reports are returned to the host through the INTERRUPT IN endpoint. + * The first byte will contain the Report number if the device uses numbered + * reports. + * + * \param dev A device handle returned from SDL_hid_open(). + * \param data A buffer to put the read data into. + * \param length The number of bytes to read. For devices with multiple + * reports, make sure to read an extra byte for the report + * number. + * \returns the actual number of bytes read and -1 on error. If no packet was + * available to be read and the handle is in non-blocking mode, this + * function returns 0. + * + * \since This function is available since SDL 2.0.18. + */ +extern DECLSPEC int SDLCALL SDL_hid_read(SDL_hid_device *dev, unsigned char *data, size_t length); + +/** + * Set the device handle to be non-blocking. + * + * In non-blocking mode calls to SDL_hid_read() will return immediately with a + * value of 0 if there is no data to be read. In blocking mode, SDL_hid_read() + * will wait (block) until there is data to read before returning. + * + * Nonblocking can be turned on and off at any time. + * + * \param dev A device handle returned from SDL_hid_open(). + * \param nonblock enable or not the nonblocking reads - 1 to enable + * nonblocking - 0 to disable nonblocking. + * \returns 0 on success and -1 on error. + * + * \since This function is available since SDL 2.0.18. + */ +extern DECLSPEC int SDLCALL SDL_hid_set_nonblocking(SDL_hid_device *dev, int nonblock); + +/** + * Send a Feature report to the device. + * + * Feature reports are sent over the Control endpoint as a Set_Report + * transfer. The first byte of `data` must contain the Report ID. For devices + * which only support a single report, this must be set to 0x0. The remaining + * bytes contain the report data. Since the Report ID is mandatory, calls to + * SDL_hid_send_feature_report() will always contain one more byte than the + * report contains. For example, if a hid report is 16 bytes long, 17 bytes + * must be passed to SDL_hid_send_feature_report(): the Report ID (or 0x0, for + * devices which do not use numbered reports), followed by the report data (16 + * bytes). In this example, the length passed in would be 17. + * + * \param dev A device handle returned from SDL_hid_open(). + * \param data The data to send, including the report number as the first + * byte. + * \param length The length in bytes of the data to send, including the report + * number. + * \returns the actual number of bytes written and -1 on error. + * + * \since This function is available since SDL 2.0.18. + */ +extern DECLSPEC int SDLCALL SDL_hid_send_feature_report(SDL_hid_device *dev, const unsigned char *data, size_t length); + +/** + * Get a feature report from a HID device. + * + * Set the first byte of `data` to the Report ID of the report to be read. + * Make sure to allow space for this extra byte in `data`. Upon return, the + * first byte will still contain the Report ID, and the report data will start + * in data[1]. + * + * \param dev A device handle returned from SDL_hid_open(). + * \param data A buffer to put the read data into, including the Report ID. + * Set the first byte of `data` to the Report ID of the report to + * be read, or set it to zero if your device does not use numbered + * reports. + * \param length The number of bytes to read, including an extra byte for the + * report ID. The buffer can be longer than the actual report. + * \returns the number of bytes read plus one for the report ID (which is + * still in the first byte), or -1 on error. + * + * \since This function is available since SDL 2.0.18. + */ +extern DECLSPEC int SDLCALL SDL_hid_get_feature_report(SDL_hid_device *dev, unsigned char *data, size_t length); + +/** + * Close a HID device. + * + * \param dev A device handle returned from SDL_hid_open(). + * + * \since This function is available since SDL 2.0.18. + */ +extern DECLSPEC void SDLCALL SDL_hid_close(SDL_hid_device *dev); + +/** + * Get The Manufacturer String from a HID device. + * + * \param dev A device handle returned from SDL_hid_open(). + * \param string A wide string buffer to put the data into. + * \param maxlen The length of the buffer in multiples of wchar_t. + * \returns 0 on success and -1 on error. + * + * \since This function is available since SDL 2.0.18. + */ +extern DECLSPEC int SDLCALL SDL_hid_get_manufacturer_string(SDL_hid_device *dev, wchar_t *string, size_t maxlen); + +/** + * Get The Product String from a HID device. + * + * \param dev A device handle returned from SDL_hid_open(). + * \param string A wide string buffer to put the data into. + * \param maxlen The length of the buffer in multiples of wchar_t. + * \returns 0 on success and -1 on error. + * + * \since This function is available since SDL 2.0.18. + */ +extern DECLSPEC int SDLCALL SDL_hid_get_product_string(SDL_hid_device *dev, wchar_t *string, size_t maxlen); + +/** + * Get The Serial Number String from a HID device. + * + * \param dev A device handle returned from SDL_hid_open(). + * \param string A wide string buffer to put the data into. + * \param maxlen The length of the buffer in multiples of wchar_t. + * \returns 0 on success and -1 on error. + * + * \since This function is available since SDL 2.0.18. + */ +extern DECLSPEC int SDLCALL SDL_hid_get_serial_number_string(SDL_hid_device *dev, wchar_t *string, size_t maxlen); + +/** + * Get a string from a HID device, based on its string index. + * + * \param dev A device handle returned from SDL_hid_open(). + * \param string_index The index of the string to get. + * \param string A wide string buffer to put the data into. + * \param maxlen The length of the buffer in multiples of wchar_t. + * \returns 0 on success and -1 on error. + * + * \since This function is available since SDL 2.0.18. + */ +extern DECLSPEC int SDLCALL SDL_hid_get_indexed_string(SDL_hid_device *dev, int string_index, wchar_t *string, size_t maxlen); + +/** + * Start or stop a BLE scan on iOS and tvOS to pair Steam Controllers + * + * \param active SDL_TRUE to start the scan, SDL_FALSE to stop the scan. + * + * \since This function is available since SDL 2.0.18. + */ +extern DECLSPEC void SDLCALL SDL_hid_ble_scan(SDL_bool active); + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include "close_code.h" + +#endif /* SDL_hidapi_h_ */ + +/* vi: set sts=4 ts=4 sw=4 expandtab: */ diff --git a/third_party/tlRender-install-Release/include/SDL2/SDL_hints.h b/third_party/tlRender-install-Release/include/SDL2/SDL_hints.h new file mode 100644 index 00000000..6713d01f --- /dev/null +++ b/third_party/tlRender-install-Release/include/SDL2/SDL_hints.h @@ -0,0 +1,3303 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2025 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +/** + * # CategoryHints + * + * Official documentation for SDL configuration variables + * + * This file contains functions to set and get configuration hints, as well as + * listing each of them alphabetically. + * + * The convention for naming hints is SDL_HINT_X, where "SDL_X" is the + * environment variable that can be used to override the default. + * + * In general these hints are just that - they may or may not be supported or + * applicable on any given platform, but they provide a way for an application + * or user to give the library a hint as to how they would like the library to + * work. + */ + +#ifndef SDL_hints_h_ +#define SDL_hints_h_ + +#include "SDL_stdinc.h" + +#include "begin_code.h" +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/** + * A variable controlling whether the Android / iOS built-in accelerometer + * should be listed as a joystick device. + * + * This variable can be set to the following values: + * + * - "0": The accelerometer is not listed as a joystick + * - "1": The accelerometer is available as a 3 axis joystick (the default). + */ +#define SDL_HINT_ACCELEROMETER_AS_JOYSTICK "SDL_ACCELEROMETER_AS_JOYSTICK" + +/** + * Specify the behavior of Alt+Tab while the keyboard is grabbed. + * + * By default, SDL emulates Alt+Tab functionality while the keyboard is + * grabbed and your window is full-screen. This prevents the user from getting + * stuck in your application if you've enabled keyboard grab. + * + * The variable can be set to the following values: + * + * - "0": SDL will not handle Alt+Tab. Your application is responsible for + * handling Alt+Tab while the keyboard is grabbed. + * - "1": SDL will minimize your window when Alt+Tab is pressed (default) + */ +#define SDL_HINT_ALLOW_ALT_TAB_WHILE_GRABBED "SDL_ALLOW_ALT_TAB_WHILE_GRABBED" + +/** + * If set to "0" then never set the top most bit on a SDL Window, even if the + * video mode expects it. + * + * This is a debugging aid for developers and not expected to be used by end + * users. The default is "1" + * + * This variable can be set to the following values: + * + * - "0": don't allow topmost + * - "1": allow topmost + */ +#define SDL_HINT_ALLOW_TOPMOST "SDL_ALLOW_TOPMOST" + +/** + * Android APK expansion main file version. + * + * Should be a string number like "1", "2" etc. + * + * Must be set together with + * SDL_HINT_ANDROID_APK_EXPANSION_PATCH_FILE_VERSION. + * + * If both hints were set then SDL_RWFromFile() will look into expansion files + * after a given relative path was not found in the internal storage and + * assets. + * + * By default this hint is not set and the APK expansion files are not + * searched. + */ +#define SDL_HINT_ANDROID_APK_EXPANSION_MAIN_FILE_VERSION "SDL_ANDROID_APK_EXPANSION_MAIN_FILE_VERSION" + +/** + * Android APK expansion patch file version. + * + * Should be a string number like "1", "2" etc. + * + * Must be set together with SDL_HINT_ANDROID_APK_EXPANSION_MAIN_FILE_VERSION. + * + * If both hints were set then SDL_RWFromFile() will look into expansion files + * after a given relative path was not found in the internal storage and + * assets. + * + * By default this hint is not set and the APK expansion files are not + * searched. + */ +#define SDL_HINT_ANDROID_APK_EXPANSION_PATCH_FILE_VERSION "SDL_ANDROID_APK_EXPANSION_PATCH_FILE_VERSION" + +/** + * A variable to control whether the event loop will block itself when the app + * is paused. + * + * The variable can be set to the following values: + * + * - "0": Non blocking. + * - "1": Blocking. (default) + * + * The value should be set before SDL is initialized. + */ +#define SDL_HINT_ANDROID_BLOCK_ON_PAUSE "SDL_ANDROID_BLOCK_ON_PAUSE" + +/** + * A variable to control whether SDL will pause audio in background (Requires + * SDL_ANDROID_BLOCK_ON_PAUSE as "Non blocking") + * + * The variable can be set to the following values: + * + * - "0": Non paused. + * - "1": Paused. (default) + * + * The value should be set before SDL is initialized. + */ +#define SDL_HINT_ANDROID_BLOCK_ON_PAUSE_PAUSEAUDIO "SDL_ANDROID_BLOCK_ON_PAUSE_PAUSEAUDIO" + +/** + * A variable to control whether we trap the Android back button to handle it + * manually. + * + * This is necessary for the right mouse button to work on some Android + * devices, or to be able to trap the back button for use in your code + * reliably. If set to true, the back button will show up as an SDL_KEYDOWN / + * SDL_KEYUP pair with a keycode of SDL_SCANCODE_AC_BACK. + * + * The variable can be set to the following values: + * + * - "0": Back button will be handled as usual for system. (default) + * - "1": Back button will be trapped, allowing you to handle the key press + * manually. (This will also let right mouse click work on systems where the + * right mouse button functions as back.) + * + * The value of this hint is used at runtime, so it can be changed at any + * time. + */ +#define SDL_HINT_ANDROID_TRAP_BACK_BUTTON "SDL_ANDROID_TRAP_BACK_BUTTON" + +/** + * Specify an application name. + * + * This hint lets you specify the application name sent to the OS when + * required. For example, this will often appear in volume control applets for + * audio streams, and in lists of applications which are inhibiting the + * screensaver. You should use a string that describes your program ("My Game + * 2: The Revenge") + * + * Setting this to "" or leaving it unset will have SDL use a reasonable + * default: probably the application's name or "SDL Application" if SDL + * doesn't have any better information. + * + * Note that, for audio streams, this can be overridden with + * SDL_HINT_AUDIO_DEVICE_APP_NAME. + * + * On targets where this is not supported, this hint does nothing. + */ +#define SDL_HINT_APP_NAME "SDL_APP_NAME" + +/** + * A variable controlling whether controllers used with the Apple TV generate + * UI events. + * + * When UI events are generated by controller input, the app will be + * backgrounded when the Apple TV remote's menu button is pressed, and when + * the pause or B buttons on gamepads are pressed. + * + * More information about properly making use of controllers for the Apple TV + * can be found here: + * https://developer.apple.com/tvos/human-interface-guidelines/remote-and-controllers/ + * + * This variable can be set to the following values: + * + * - "0": Controller input does not generate UI events (the default). + * - "1": Controller input generates UI events. + */ +#define SDL_HINT_APPLE_TV_CONTROLLER_UI_EVENTS "SDL_APPLE_TV_CONTROLLER_UI_EVENTS" + +/** + * A variable controlling whether the Apple TV remote's joystick axes will + * automatically match the rotation of the remote. + * + * This variable can be set to the following values: + * + * - "0": Remote orientation does not affect joystick axes (the default). + * - "1": Joystick axes are based on the orientation of the remote. + */ +#define SDL_HINT_APPLE_TV_REMOTE_ALLOW_ROTATION "SDL_APPLE_TV_REMOTE_ALLOW_ROTATION" + +/** + * A variable controlling the audio category on iOS and Mac OS X + * + * This variable can be set to the following values: + * + * - "ambient": Use the AVAudioSessionCategoryAmbient audio category, will be + * muted by the phone mute switch (default) + * - "playback": Use the AVAudioSessionCategoryPlayback category + * + * For more information, see Apple's documentation: + * https://developer.apple.com/library/content/documentation/Audio/Conceptual/AudioSessionProgrammingGuide/AudioSessionCategoriesandModes/AudioSessionCategoriesandModes.html + */ +#define SDL_HINT_AUDIO_CATEGORY "SDL_AUDIO_CATEGORY" + +/** + * Specify an application name for an audio device. + * + * Some audio backends (such as PulseAudio) allow you to describe your audio + * stream. Among other things, this description might show up in a system + * control panel that lets the user adjust the volume on specific audio + * streams instead of using one giant master volume slider. + * + * This hints lets you transmit that information to the OS. The contents of + * this hint are used while opening an audio device. You should use a string + * that describes your program ("My Game 2: The Revenge") + * + * Setting this to "" or leaving it unset will have SDL use a reasonable + * default: this will be the name set with SDL_HINT_APP_NAME, if that hint is + * set. Otherwise, it'll probably the application's name or "SDL Application" + * if SDL doesn't have any better information. + * + * On targets where this is not supported, this hint does nothing. + */ +#define SDL_HINT_AUDIO_DEVICE_APP_NAME "SDL_AUDIO_DEVICE_APP_NAME" + +/** + * Specify an application name for an audio device. + * + * Some audio backends (such as PulseAudio) allow you to describe your audio + * stream. Among other things, this description might show up in a system + * control panel that lets the user adjust the volume on specific audio + * streams instead of using one giant master volume slider. + * + * This hints lets you transmit that information to the OS. The contents of + * this hint are used while opening an audio device. You should use a string + * that describes your what your program is playing ("audio stream" is + * probably sufficient in many cases, but this could be useful for something + * like "team chat" if you have a headset playing VoIP audio separately). + * + * Setting this to "" or leaving it unset will have SDL use a reasonable + * default: "audio stream" or something similar. + * + * On targets where this is not supported, this hint does nothing. + */ +#define SDL_HINT_AUDIO_DEVICE_STREAM_NAME "SDL_AUDIO_DEVICE_STREAM_NAME" + +/** + * Specify an application role for an audio device. + * + * Some audio backends (such as Pipewire) allow you to describe the role of + * your audio stream. Among other things, this description might show up in a + * system control panel or software for displaying and manipulating media + * playback/capture graphs. + * + * This hints lets you transmit that information to the OS. The contents of + * this hint are used while opening an audio device. You should use a string + * that describes your what your program is playing (Game, Music, Movie, + * etc...). + * + * Setting this to "" or leaving it unset will have SDL use a reasonable + * default: "Game" or something similar. + * + * On targets where this is not supported, this hint does nothing. + */ +#define SDL_HINT_AUDIO_DEVICE_STREAM_ROLE "SDL_AUDIO_DEVICE_STREAM_ROLE" + +/** + * A variable controlling speed/quality tradeoff of audio resampling. + * + * If available, SDL can use libsamplerate ( http://www.mega-nerd.com/SRC/ ) + * to handle audio resampling. There are different resampling modes available + * that produce different levels of quality, using more CPU. + * + * If this hint isn't specified to a valid setting, or libsamplerate isn't + * available, SDL will use the default, internal resampling algorithm. + * + * As of SDL 2.26, SDL_ConvertAudio() respects this hint when libsamplerate is + * available. + * + * This hint is currently only checked at audio subsystem initialization. + * + * This variable can be set to the following values: + * + * - "0" or "default": Use SDL's internal resampling (Default when not set - + * low quality, fast) + * - "1" or "fast": Use fast, slightly higher quality resampling, if available + * - "2" or "medium": Use medium quality resampling, if available + * - "3" or "best": Use high quality resampling, if available + */ +#define SDL_HINT_AUDIO_RESAMPLING_MODE "SDL_AUDIO_RESAMPLING_MODE" + +/** + * A variable controlling whether SDL updates joystick state when getting + * input events + * + * This variable can be set to the following values: + * + * - "0": You'll call SDL_JoystickUpdate() manually + * - "1": SDL will automatically call SDL_JoystickUpdate() (default) + * + * This hint can be toggled on and off at runtime. + */ +#define SDL_HINT_AUTO_UPDATE_JOYSTICKS "SDL_AUTO_UPDATE_JOYSTICKS" + +/** + * A variable controlling whether SDL updates sensor state when getting input + * events + * + * This variable can be set to the following values: + * + * - "0": You'll call SDL_SensorUpdate() manually + * - "1": SDL will automatically call SDL_SensorUpdate() (default) + * + * This hint can be toggled on and off at runtime. + */ +#define SDL_HINT_AUTO_UPDATE_SENSORS "SDL_AUTO_UPDATE_SENSORS" + +/** + * Prevent SDL from using version 4 of the bitmap header when saving BMPs. + * + * The bitmap header version 4 is required for proper alpha channel support + * and SDL will use it when required. Should this not be desired, this hint + * can force the use of the 40 byte header version which is supported + * everywhere. + * + * The variable can be set to the following values: + * + * - "0": Surfaces with a colorkey or an alpha channel are saved to a 32-bit + * BMP file with an alpha mask. SDL will use the bitmap header version 4 and + * set the alpha mask accordingly. + * - "1": Surfaces with a colorkey or an alpha channel are saved to a 32-bit + * BMP file without an alpha mask. The alpha channel data will be in the + * file, but applications are going to ignore it. + * + * The default value is "0". + */ +#define SDL_HINT_BMP_SAVE_LEGACY_FORMAT "SDL_BMP_SAVE_LEGACY_FORMAT" + +/** + * Override for SDL_GetDisplayUsableBounds() + * + * If set, this hint will override the expected results for + * SDL_GetDisplayUsableBounds() for display index 0. Generally you don't want + * to do this, but this allows an embedded system to request that some of the + * screen be reserved for other uses when paired with a well-behaved + * application. + * + * The contents of this hint must be 4 comma-separated integers, the first is + * the bounds x, then y, width and height, in that order. + */ +#define SDL_HINT_DISPLAY_USABLE_BOUNDS "SDL_DISPLAY_USABLE_BOUNDS" + +/** + * Disable giving back control to the browser automatically when running with + * asyncify + * + * With -s ASYNCIFY, SDL2 calls emscripten_sleep during operations such as + * refreshing the screen or polling events. + * + * This hint only applies to the emscripten platform + * + * The variable can be set to the following values: + * + * - "0": Disable emscripten_sleep calls (if you give back browser control + * manually or use asyncify for other purposes) + * - "1": Enable emscripten_sleep calls (the default) + */ +#define SDL_HINT_EMSCRIPTEN_ASYNCIFY "SDL_EMSCRIPTEN_ASYNCIFY" + +/** + * override the binding element for keyboard inputs for Emscripten builds + * + * This hint only applies to the emscripten platform. + * + * The variable can be one of: + * + * - "#window": the javascript window object (this is the default) + * - "#document": the javascript document object + * - "#screen": the javascript window.screen object + * - "#canvas": the WebGL canvas element + * + * Any other string without a leading # sign applies to the element on the + * page with that ID. + */ +#define SDL_HINT_EMSCRIPTEN_KEYBOARD_ELEMENT "SDL_EMSCRIPTEN_KEYBOARD_ELEMENT" + +/** + * A variable that controls whether the on-screen keyboard should be shown + * when text input is active + * + * The variable can be set to the following values: + * + * - "0": Do not show the on-screen keyboard + * - "1": Show the on-screen keyboard + * + * The default value is "1". This hint must be set before text input is + * activated. + */ +#define SDL_HINT_ENABLE_SCREEN_KEYBOARD "SDL_ENABLE_SCREEN_KEYBOARD" + +/** + * A variable controlling verbosity of the logging of SDL events pushed onto + * the internal queue. + * + * This variable can be set to the following values, from least to most + * verbose: + * + * - "0": Don't log any events (default) + * - "1": Log most events (other than the really spammy ones). + * - "2": Include mouse and finger motion events. + * - "3": Include SDL_SysWMEvent events. + * + * This is generally meant to be used to debug SDL itself, but can be useful + * for application developers that need better visibility into what is going + * on in the event queue. Logged events are sent through SDL_Log(), which + * means by default they appear on stdout on most platforms or maybe + * OutputDebugString() on Windows, and can be funneled by the app with + * SDL_LogSetOutputFunction(), etc. + * + * This hint can be toggled on and off at runtime, if you only need to log + * events for a small subset of program execution. + */ +#define SDL_HINT_EVENT_LOGGING "SDL_EVENT_LOGGING" + +/** + * A variable controlling whether raising the window should be done more + * forcefully + * + * This variable can be set to the following values: + * + * - "0": No forcing (the default) + * - "1": Extra level of forcing + * + * At present, this is only an issue under MS Windows, which makes it nearly + * impossible to programmatically move a window to the foreground, for + * "security" reasons. See http://stackoverflow.com/a/34414846 for a + * discussion. + */ +#define SDL_HINT_FORCE_RAISEWINDOW "SDL_HINT_FORCE_RAISEWINDOW" + +/** + * A variable controlling how 3D acceleration is used to accelerate the SDL + * screen surface. + * + * SDL can try to accelerate the SDL screen surface by using streaming + * textures with a 3D rendering engine. This variable controls whether and how + * this is done. + * + * This variable can be set to the following values: + * + * - "0": Disable 3D acceleration + * - "1": Enable 3D acceleration, using the default renderer. + * - "X": Enable 3D acceleration, using X where X is one of the valid + * rendering drivers. (e.g. "direct3d", "opengl", etc.) + * + * By default SDL tries to make a best guess for each platform whether to use + * acceleration or not. + */ +#define SDL_HINT_FRAMEBUFFER_ACCELERATION "SDL_FRAMEBUFFER_ACCELERATION" + +/** + * A variable that lets you manually hint extra gamecontroller db entries. + * + * The variable should be newline delimited rows of gamecontroller config + * data, see SDL_gamecontroller.h + * + * This hint must be set before calling SDL_Init(SDL_INIT_GAMECONTROLLER) You + * can update mappings after the system is initialized with + * SDL_GameControllerMappingForGUID() and SDL_GameControllerAddMapping() + */ +#define SDL_HINT_GAMECONTROLLERCONFIG "SDL_GAMECONTROLLERCONFIG" + +/** + * A variable that lets you provide a file with extra gamecontroller db + * entries. + * + * The file should contain lines of gamecontroller config data, see + * SDL_gamecontroller.h + * + * This hint must be set before calling SDL_Init(SDL_INIT_GAMECONTROLLER) You + * can update mappings after the system is initialized with + * SDL_GameControllerMappingForGUID() and SDL_GameControllerAddMapping() + */ +#define SDL_HINT_GAMECONTROLLERCONFIG_FILE "SDL_GAMECONTROLLERCONFIG_FILE" + +/** + * A variable that overrides the automatic controller type detection + * + * The variable should be comma separated entries, in the form: VID/PID=type + * + * The VID and PID should be hexadecimal with exactly 4 digits, e.g. 0x00fd + * + * The type should be one of: Xbox360 XboxOne PS3 PS4 PS5 SwitchPro + * + * This hint affects what driver is used, and must be set before calling + * SDL_Init(SDL_INIT_GAMECONTROLLER) + */ +#define SDL_HINT_GAMECONTROLLERTYPE "SDL_GAMECONTROLLERTYPE" + +/** + * A variable containing a list of devices to skip when scanning for game + * controllers. + * + * The format of the string is a comma separated list of USB VID/PID pairs in + * hexadecimal form, e.g. + * + * 0xAAAA/0xBBBB,0xCCCC/0xDDDD + * + * The variable can also take the form of @file, in which case the named file + * will be loaded and interpreted as the value of the variable. + */ +#define SDL_HINT_GAMECONTROLLER_IGNORE_DEVICES "SDL_GAMECONTROLLER_IGNORE_DEVICES" + +/** + * If set, all devices will be skipped when scanning for game controllers + * except for the ones listed in this variable. + * + * The format of the string is a comma separated list of USB VID/PID pairs in + * hexadecimal form, e.g. + * + * 0xAAAA/0xBBBB,0xCCCC/0xDDDD + * + * The variable can also take the form of @file, in which case the named file + * will be loaded and interpreted as the value of the variable. + */ +#define SDL_HINT_GAMECONTROLLER_IGNORE_DEVICES_EXCEPT "SDL_GAMECONTROLLER_IGNORE_DEVICES_EXCEPT" + +/** + * If set, game controller face buttons report their values according to their + * labels instead of their positional layout. + * + * For example, on Nintendo Switch controllers, normally you'd get: + * + * ``` + * (Y) + * (X) (B) + * (A) + * ``` + * + * but if this hint is set, you'll get: + * + * ``` + * (X) + * (Y) (A) + * (B) + * ``` + * + * The variable can be set to the following values: + * + * - "0": Report the face buttons by position, as though they were on an Xbox + * controller. + * - "1": Report the face buttons by label instead of position + * + * The default value is "1". This hint may be set at any time. + */ +#define SDL_HINT_GAMECONTROLLER_USE_BUTTON_LABELS "SDL_GAMECONTROLLER_USE_BUTTON_LABELS" + +/** + * A variable controlling whether grabbing input grabs the keyboard + * + * This variable can be set to the following values: + * + * - "0": Grab will affect only the mouse + * - "1": Grab will affect mouse and keyboard + * + * By default SDL will not grab the keyboard so system shortcuts still work. + */ +#define SDL_HINT_GRAB_KEYBOARD "SDL_GRAB_KEYBOARD" + +/** + * A variable containing a list of devices to ignore in SDL_hid_enumerate() + * + * For example, to ignore the Shanwan DS3 controller and any Valve controller, + * you might have the string "0x2563/0x0523,0x28de/0x0000" + */ +#define SDL_HINT_HIDAPI_IGNORE_DEVICES "SDL_HIDAPI_IGNORE_DEVICES" + +/** + * A variable controlling whether the idle timer is disabled on iOS. + * + * When an iOS app does not receive touches for some time, the screen is + * dimmed automatically. For games where the accelerometer is the only input + * this is problematic. This functionality can be disabled by setting this + * hint. + * + * As of SDL 2.0.4, SDL_EnableScreenSaver() and SDL_DisableScreenSaver() + * accomplish the same thing on iOS. They should be preferred over this hint. + * + * This variable can be set to the following values: + * + * - "0": Enable idle timer + * - "1": Disable idle timer + */ +#define SDL_HINT_IDLE_TIMER_DISABLED "SDL_IOS_IDLE_TIMER_DISABLED" + +/** + * A variable to control whether certain IMEs should handle text editing + * internally instead of sending SDL_TEXTEDITING events. + * + * The variable can be set to the following values: + * + * - "0": SDL_TEXTEDITING events are sent, and it is the application's + * responsibility to render the text from these events and differentiate it + * somehow from committed text. (default) + * - "1": If supported by the IME then SDL_TEXTEDITING events are not sent, + * and text that is being composed will be rendered in its own UI. + */ +#define SDL_HINT_IME_INTERNAL_EDITING "SDL_IME_INTERNAL_EDITING" + +/** + * A variable to control whether certain IMEs should show native UI components + * (such as the Candidate List) instead of suppressing them. + * + * The variable can be set to the following values: + * + * - "0": Native UI components are not display. (default) + * - "1": Native UI components are displayed. + */ +#define SDL_HINT_IME_SHOW_UI "SDL_IME_SHOW_UI" + +/** + * A variable to control if extended IME text support is enabled. + * + * If enabled then SDL_TextEditingExtEvent will be issued if the text would be + * truncated otherwise. Additionally SDL_TextInputEvent will be dispatched + * multiple times so that it is not truncated. + * + * The variable can be set to the following values: + * + * - "0": Legacy behavior. Text can be truncated, no heap allocations. + * (default) + * - "1": Modern behavior. + */ +#define SDL_HINT_IME_SUPPORT_EXTENDED_TEXT "SDL_IME_SUPPORT_EXTENDED_TEXT" + +/** + * A variable controlling whether the home indicator bar on iPhone X should be + * hidden. + * + * This variable can be set to the following values: + * + * - "0": The indicator bar is not hidden (default for windowed applications) + * - "1": The indicator bar is hidden and is shown when the screen is touched + * (useful for movie playback applications) + * - "2": The indicator bar is dim and the first swipe makes it visible and + * the second swipe performs the "home" action (default for fullscreen + * applications) + */ +#define SDL_HINT_IOS_HIDE_HOME_INDICATOR "SDL_IOS_HIDE_HOME_INDICATOR" + +/** + * A variable that lets you enable joystick (and gamecontroller) events even + * when your app is in the background. + * + * The variable can be set to the following values: + * + * - "0": Disable joystick & gamecontroller input events when the application + * is in the background. + * - "1": Enable joystick & gamecontroller input events when the application + * is in the background. + * + * The default value is "0". This hint may be set at any time. + */ +#define SDL_HINT_JOYSTICK_ALLOW_BACKGROUND_EVENTS "SDL_JOYSTICK_ALLOW_BACKGROUND_EVENTS" + +/** + * A variable containing a list of arcade stick style controllers. + * + * The format of the string is a comma separated list of USB VID/PID pairs in + * hexadecimal form, e.g. + * + * 0xAAAA/0xBBBB,0xCCCC/0xDDDD + * + * The variable can also take the form of @file, in which case the named file + * will be loaded and interpreted as the value of the variable. + */ +#define SDL_HINT_JOYSTICK_ARCADESTICK_DEVICES "SDL_JOYSTICK_ARCADESTICK_DEVICES" + +/** + * A variable containing a list of devices that are not arcade stick style + * controllers. + * + * This will override SDL_HINT_JOYSTICK_ARCADESTICK_DEVICES and the built in + * device list. + * + * The format of the string is a comma separated list of USB VID/PID pairs in + * hexadecimal form, e.g. + * + * 0xAAAA/0xBBBB,0xCCCC/0xDDDD + * + * The variable can also take the form of @file, in which case the named file + * will be loaded and interpreted as the value of the variable. + */ +#define SDL_HINT_JOYSTICK_ARCADESTICK_DEVICES_EXCLUDED "SDL_JOYSTICK_ARCADESTICK_DEVICES_EXCLUDED" + +/** + * A variable containing a list of devices that should not be considerd + * joysticks. + * + * The format of the string is a comma separated list of USB VID/PID pairs in + * hexadecimal form, e.g. + * + * 0xAAAA/0xBBBB,0xCCCC/0xDDDD + * + * The variable can also take the form of @file, in which case the named file + * will be loaded and interpreted as the value of the variable. + */ +#define SDL_HINT_JOYSTICK_BLACKLIST_DEVICES "SDL_JOYSTICK_BLACKLIST_DEVICES" + +/** + * A variable containing a list of devices that should be considered + * joysticks. + * + * This will override SDL_HINT_JOYSTICK_BLACKLIST_DEVICES and the built in + * device list. + * + * The format of the string is a comma separated list of USB VID/PID pairs in + * hexadecimal form, e.g. + * + * 0xAAAA/0xBBBB,0xCCCC/0xDDDD + * + * The variable can also take the form of @file, in which case the named file + * will be loaded and interpreted as the value of the variable. + */ +#define SDL_HINT_JOYSTICK_BLACKLIST_DEVICES_EXCLUDED "SDL_JOYSTICK_BLACKLIST_DEVICES_EXCLUDED" + +/** + * A variable containing a list of flightstick style controllers. + * + * The format of the string is a comma separated list of USB VID/PID pairs in + * hexadecimal form, e.g. + * + * 0xAAAA/0xBBBB,0xCCCC/0xDDDD + * + * The variable can also take the form of @file, in which case the named file + * will be loaded and interpreted as the value of the variable. + */ +#define SDL_HINT_JOYSTICK_FLIGHTSTICK_DEVICES "SDL_JOYSTICK_FLIGHTSTICK_DEVICES" + +/** + * A variable containing a list of devices that are not flightstick style + * controllers. + * + * This will override SDL_HINT_JOYSTICK_FLIGHTSTICK_DEVICES and the built in + * device list. + * + * The format of the string is a comma separated list of USB VID/PID pairs in + * hexadecimal form, e.g. + * + * 0xAAAA/0xBBBB,0xCCCC/0xDDDD + * + * The variable can also take the form of @file, in which case the named file + * will be loaded and interpreted as the value of the variable. + */ +#define SDL_HINT_JOYSTICK_FLIGHTSTICK_DEVICES_EXCLUDED "SDL_JOYSTICK_FLIGHTSTICK_DEVICES_EXCLUDED" + +/** + * A variable containing a list of devices known to have a GameCube form + * factor. + * + * The format of the string is a comma separated list of USB VID/PID pairs in + * hexadecimal form, e.g. + * + * 0xAAAA/0xBBBB,0xCCCC/0xDDDD + * + * The variable can also take the form of @file, in which case the named file + * will be loaded and interpreted as the value of the variable. + */ +#define SDL_HINT_JOYSTICK_GAMECUBE_DEVICES "SDL_JOYSTICK_GAMECUBE_DEVICES" + +/** + * A variable containing a list of devices known not to have a GameCube form + * factor. + * + * This will override SDL_HINT_JOYSTICK_GAMECUBE_DEVICES and the built in + * device list. + * + * The format of the string is a comma separated list of USB VID/PID pairs in + * hexadecimal form, e.g. + * + * 0xAAAA/0xBBBB,0xCCCC/0xDDDD + * + * The variable can also take the form of @file, in which case the named file + * will be loaded and interpreted as the value of the variable. + */ +#define SDL_HINT_JOYSTICK_GAMECUBE_DEVICES_EXCLUDED "SDL_JOYSTICK_GAMECUBE_DEVICES_EXCLUDED" + +/** + * A variable controlling whether the HIDAPI joystick drivers should be used. + * + * This variable can be set to the following values: + * + * - "0": HIDAPI drivers are not used + * - "1": HIDAPI drivers are used (the default) + * + * This variable is the default for all drivers, but can be overridden by the + * hints for specific drivers below. + */ +#define SDL_HINT_JOYSTICK_HIDAPI "SDL_JOYSTICK_HIDAPI" + +/** + * A variable controlling whether the HIDAPI driver for Nintendo GameCube + * controllers should be used. + * + * This variable can be set to the following values: + * + * - "0": HIDAPI driver is not used + * - "1": HIDAPI driver is used + * + * The default is the value of SDL_HINT_JOYSTICK_HIDAPI + */ +#define SDL_HINT_JOYSTICK_HIDAPI_GAMECUBE "SDL_JOYSTICK_HIDAPI_GAMECUBE" + +/** + * A variable controlling whether "low_frequency_rumble" and + * "high_frequency_rumble" is used to implement the GameCube controller's 3 + * rumble modes, Stop(0), Rumble(1), and StopHard(2) this is useful for + * applications that need full compatibility for things like ADSR envelopes. + * + * Stop is implemented by setting "low_frequency_rumble" to "0" and + * "high_frequency_rumble" ">0" Rumble is both at any arbitrary value, + * StopHard is implemented by setting both "low_frequency_rumble" and + * "high_frequency_rumble" to "0" + * + * This variable can be set to the following values: + * + * - "0": Normal rumble behavior is behavior is used (default) + * - "1": Proper GameCube controller rumble behavior is used + */ +#define SDL_HINT_JOYSTICK_GAMECUBE_RUMBLE_BRAKE "SDL_JOYSTICK_GAMECUBE_RUMBLE_BRAKE" + +/** + * A variable controlling whether the HIDAPI driver for Nintendo Switch + * Joy-Cons should be used. + * + * This variable can be set to the following values: + * + * - "0": HIDAPI driver is not used + * - "1": HIDAPI driver is used + * + * The default is the value of SDL_HINT_JOYSTICK_HIDAPI + */ +#define SDL_HINT_JOYSTICK_HIDAPI_JOY_CONS "SDL_JOYSTICK_HIDAPI_JOY_CONS" + +/** + * A variable controlling whether Nintendo Switch Joy-Con controllers will be + * combined into a single Pro-like controller when using the HIDAPI driver + * + * This variable can be set to the following values: + * + * - "0": Left and right Joy-Con controllers will not be combined and each + * will be a mini-gamepad + * - "1": Left and right Joy-Con controllers will be combined into a single + * controller (the default) + */ +#define SDL_HINT_JOYSTICK_HIDAPI_COMBINE_JOY_CONS "SDL_JOYSTICK_HIDAPI_COMBINE_JOY_CONS" + +/** + * A variable controlling whether Nintendo Switch Joy-Con controllers will be + * in vertical mode when using the HIDAPI driver + * + * This variable can be set to the following values: + * + * - "0": Left and right Joy-Con controllers will not be in vertical mode (the + * default) + * - "1": Left and right Joy-Con controllers will be in vertical mode + * + * This hint must be set before calling SDL_Init(SDL_INIT_GAMECONTROLLER) + */ +#define SDL_HINT_JOYSTICK_HIDAPI_VERTICAL_JOY_CONS "SDL_JOYSTICK_HIDAPI_VERTICAL_JOY_CONS" + +/** + * A variable controlling whether the HIDAPI driver for Amazon Luna + * controllers connected via Bluetooth should be used. + * + * This variable can be set to the following values: + * + * - "0": HIDAPI driver is not used + * - "1": HIDAPI driver is used + * + * The default is the value of SDL_HINT_JOYSTICK_HIDAPI + */ +#define SDL_HINT_JOYSTICK_HIDAPI_LUNA "SDL_JOYSTICK_HIDAPI_LUNA" + +/** + * A variable controlling whether the HIDAPI driver for Nintendo Online + * classic controllers should be used. + * + * This variable can be set to the following values: + * + * - "0": HIDAPI driver is not used + * - "1": HIDAPI driver is used + * + * The default is the value of SDL_HINT_JOYSTICK_HIDAPI + */ +#define SDL_HINT_JOYSTICK_HIDAPI_NINTENDO_CLASSIC "SDL_JOYSTICK_HIDAPI_NINTENDO_CLASSIC" + +/** + * A variable controlling whether the HIDAPI driver for NVIDIA SHIELD + * controllers should be used. + * + * This variable can be set to the following values: + * + * - "0": HIDAPI driver is not used + * - "1": HIDAPI driver is used + * + * The default is the value of SDL_HINT_JOYSTICK_HIDAPI + */ +#define SDL_HINT_JOYSTICK_HIDAPI_SHIELD "SDL_JOYSTICK_HIDAPI_SHIELD" + +/** + * A variable controlling whether the HIDAPI driver for PS3 controllers should + * be used. + * + * This variable can be set to the following values: + * + * - "0": HIDAPI driver is not used + * - "1": HIDAPI driver is used + * + * The default is the value of SDL_HINT_JOYSTICK_HIDAPI on macOS, and "0" on + * other platforms. + * + * It is not possible to use this driver on Windows, due to limitations in the + * default drivers installed. See https://github.com/ViGEm/DsHidMini for an + * alternative driver on Windows. + */ +#define SDL_HINT_JOYSTICK_HIDAPI_PS3 "SDL_JOYSTICK_HIDAPI_PS3" + +/** + * A variable controlling whether the HIDAPI driver for PS4 controllers should + * be used. + * + * This variable can be set to the following values: + * + * - "0": HIDAPI driver is not used + * - "1": HIDAPI driver is used + * + * The default is the value of SDL_HINT_JOYSTICK_HIDAPI + */ +#define SDL_HINT_JOYSTICK_HIDAPI_PS4 "SDL_JOYSTICK_HIDAPI_PS4" + +/** + * A variable controlling whether extended input reports should be used for + * PS4 controllers when using the HIDAPI driver. + * + * This variable can be set to the following values: + * + * - "0": extended reports are not enabled (the default) + * - "1": extended reports + * + * Extended input reports allow rumble on Bluetooth PS4 controllers, but break + * DirectInput handling for applications that don't use SDL. + * + * Once extended reports are enabled, they can not be disabled without power + * cycling the controller. + * + * For compatibility with applications written for versions of SDL prior to + * the introduction of PS5 controller support, this value will also control + * the state of extended reports on PS5 controllers when the + * SDL_HINT_JOYSTICK_HIDAPI_PS5_RUMBLE hint is not explicitly set. + */ +#define SDL_HINT_JOYSTICK_HIDAPI_PS4_RUMBLE "SDL_JOYSTICK_HIDAPI_PS4_RUMBLE" + +/** + * A variable controlling whether the HIDAPI driver for PS5 controllers should + * be used. + * + * This variable can be set to the following values: + * + * - "0": HIDAPI driver is not used + * - "1": HIDAPI driver is used + * + * The default is the value of SDL_HINT_JOYSTICK_HIDAPI + */ +#define SDL_HINT_JOYSTICK_HIDAPI_PS5 "SDL_JOYSTICK_HIDAPI_PS5" + +/** + * A variable controlling whether the player LEDs should be lit to indicate + * which player is associated with a PS5 controller. + * + * This variable can be set to the following values: + * + * - "0": player LEDs are not enabled + * - "1": player LEDs are enabled (the default) + */ +#define SDL_HINT_JOYSTICK_HIDAPI_PS5_PLAYER_LED "SDL_JOYSTICK_HIDAPI_PS5_PLAYER_LED" + +/** + * A variable controlling whether extended input reports should be used for + * PS5 controllers when using the HIDAPI driver. + * + * This variable can be set to the following values: + * + * - "0": extended reports are not enabled (the default) + * - "1": extended reports + * + * Extended input reports allow rumble on Bluetooth PS5 controllers, but break + * DirectInput handling for applications that don't use SDL. + * + * Once extended reports are enabled, they can not be disabled without power + * cycling the controller. + * + * For compatibility with applications written for versions of SDL prior to + * the introduction of PS5 controller support, this value defaults to the + * value of SDL_HINT_JOYSTICK_HIDAPI_PS4_RUMBLE. + */ +#define SDL_HINT_JOYSTICK_HIDAPI_PS5_RUMBLE "SDL_JOYSTICK_HIDAPI_PS5_RUMBLE" + +/** + * A variable controlling whether the HIDAPI driver for Google Stadia + * controllers should be used. + * + * This variable can be set to the following values: + * + * - "0": HIDAPI driver is not used + * - "1": HIDAPI driver is used + * + * The default is the value of SDL_HINT_JOYSTICK_HIDAPI + */ +#define SDL_HINT_JOYSTICK_HIDAPI_STADIA "SDL_JOYSTICK_HIDAPI_STADIA" + +/** + * A variable controlling whether the HIDAPI driver for Bluetooth Steam + * Controllers should be used. + * + * This variable can be set to the following values: + * + * - "0": HIDAPI driver is not used + * - "1": HIDAPI driver is used for Steam Controllers, which requires + * Bluetooth access and may prompt the user for permission on iOS and + * Android. + * + * The default is "0" + */ +#define SDL_HINT_JOYSTICK_HIDAPI_STEAM "SDL_JOYSTICK_HIDAPI_STEAM" + +/** + * A variable controlling whether the HIDAPI driver for the Steam Deck builtin + * controller should be used. + * + * This variable can be set to the following values: + * + * - "0": HIDAPI driver is not used + * - "1": HIDAPI driver is used + * + * The default is the value of SDL_HINT_JOYSTICK_HIDAPI + */ +#define SDL_HINT_JOYSTICK_HIDAPI_STEAMDECK "SDL_JOYSTICK_HIDAPI_STEAMDECK" + +/** + * A variable controlling whether the HIDAPI driver for Nintendo Switch + * controllers should be used. + * + * This variable can be set to the following values: + * + * - "0": HIDAPI driver is not used + * - "1": HIDAPI driver is used + * + * The default is the value of SDL_HINT_JOYSTICK_HIDAPI + */ +#define SDL_HINT_JOYSTICK_HIDAPI_SWITCH "SDL_JOYSTICK_HIDAPI_SWITCH" + +/** + * A variable controlling whether the Home button LED should be turned on when + * a Nintendo Switch Pro controller is opened + * + * This variable can be set to the following values: + * + * - "0": home button LED is turned off + * - "1": home button LED is turned on + * + * By default the Home button LED state is not changed. This hint can also be + * set to a floating point value between 0.0 and 1.0 which controls the + * brightness of the Home button LED. + */ +#define SDL_HINT_JOYSTICK_HIDAPI_SWITCH_HOME_LED "SDL_JOYSTICK_HIDAPI_SWITCH_HOME_LED" + +/** + * A variable controlling whether the Home button LED should be turned on when + * a Nintendo Switch Joy-Con controller is opened + * + * This variable can be set to the following values: + * + * - "0": home button LED is turned off + * - "1": home button LED is turned on + * + * By default the Home button LED state is not changed. This hint can also be + * set to a floating point value between 0.0 and 1.0 which controls the + * brightness of the Home button LED. + */ +#define SDL_HINT_JOYSTICK_HIDAPI_JOYCON_HOME_LED "SDL_JOYSTICK_HIDAPI_JOYCON_HOME_LED" + +/** + * A variable controlling whether the player LEDs should be lit to indicate + * which player is associated with a Nintendo Switch controller. + * + * This variable can be set to the following values: + * + * - "0": player LEDs are not enabled + * - "1": player LEDs are enabled (the default) + */ +#define SDL_HINT_JOYSTICK_HIDAPI_SWITCH_PLAYER_LED "SDL_JOYSTICK_HIDAPI_SWITCH_PLAYER_LED" + +/** + * A variable controlling whether the HIDAPI driver for Nintendo Wii and Wii U + * controllers should be used. + * + * This variable can be set to the following values: + * + * - "0": HIDAPI driver is not used + * - "1": HIDAPI driver is used + * + * This driver doesn't work with the dolphinbar, so the default is SDL_FALSE + * for now. + */ +#define SDL_HINT_JOYSTICK_HIDAPI_WII "SDL_JOYSTICK_HIDAPI_WII" + +/** + * A variable controlling whether the player LEDs should be lit to indicate + * which player is associated with a Wii controller. + * + * This variable can be set to the following values: + * + * - "0": player LEDs are not enabled + * - "1": player LEDs are enabled (the default) + */ +#define SDL_HINT_JOYSTICK_HIDAPI_WII_PLAYER_LED "SDL_JOYSTICK_HIDAPI_WII_PLAYER_LED" + +/** + * A variable controlling whether the HIDAPI driver for XBox controllers + * should be used. + * + * This variable can be set to the following values: + * + * - "0": HIDAPI driver is not used + * - "1": HIDAPI driver is used + * + * The default is "0" on Windows, otherwise the value of + * SDL_HINT_JOYSTICK_HIDAPI + */ +#define SDL_HINT_JOYSTICK_HIDAPI_XBOX "SDL_JOYSTICK_HIDAPI_XBOX" + +/** + * A variable controlling whether the HIDAPI driver for XBox 360 controllers + * should be used. + * + * This variable can be set to the following values: + * + * - "0": HIDAPI driver is not used + * - "1": HIDAPI driver is used + * + * The default is the value of SDL_HINT_JOYSTICK_HIDAPI_XBOX + */ +#define SDL_HINT_JOYSTICK_HIDAPI_XBOX_360 "SDL_JOYSTICK_HIDAPI_XBOX_360" + +/** + * A variable controlling whether the player LEDs should be lit to indicate + * which player is associated with an Xbox 360 controller. + * + * This variable can be set to the following values: + * + * - "0": player LEDs are not enabled + * - "1": player LEDs are enabled (the default) + */ +#define SDL_HINT_JOYSTICK_HIDAPI_XBOX_360_PLAYER_LED "SDL_JOYSTICK_HIDAPI_XBOX_360_PLAYER_LED" + +/** + * A variable controlling whether the HIDAPI driver for XBox 360 wireless + * controllers should be used. + * + * This variable can be set to the following values: + * + * - "0": HIDAPI driver is not used + * - "1": HIDAPI driver is used + * + * The default is the value of SDL_HINT_JOYSTICK_HIDAPI_XBOX_360 + */ +#define SDL_HINT_JOYSTICK_HIDAPI_XBOX_360_WIRELESS "SDL_JOYSTICK_HIDAPI_XBOX_360_WIRELESS" + +/** + * A variable controlling whether the HIDAPI driver for XBox One controllers + * should be used. + * + * This variable can be set to the following values: + * + * - "0": HIDAPI driver is not used + * - "1": HIDAPI driver is used + * + * The default is the value of SDL_HINT_JOYSTICK_HIDAPI_XBOX + */ +#define SDL_HINT_JOYSTICK_HIDAPI_XBOX_ONE "SDL_JOYSTICK_HIDAPI_XBOX_ONE" + +/** + * A variable controlling whether the Home button LED should be turned on when + * an Xbox One controller is opened + * + * This variable can be set to the following values: + * + * - "0": home button LED is turned off + * - "1": home button LED is turned on + * + * By default the Home button LED state is not changed. This hint can also be + * set to a floating point value between 0.0 and 1.0 which controls the + * brightness of the Home button LED. The default brightness is 0.4. + */ +#define SDL_HINT_JOYSTICK_HIDAPI_XBOX_ONE_HOME_LED "SDL_JOYSTICK_HIDAPI_XBOX_ONE_HOME_LED" + +/** + * A variable controlling whether IOKit should be used for controller + * handling. + * + * This variable can be set to the following values: + * + * - "0": IOKit is not used + * - "1": IOKit is used (the default) + */ +#define SDL_HINT_JOYSTICK_IOKIT "SDL_JOYSTICK_IOKIT" + +/** + * A variable controlling whether GCController should be used for controller + * handling. + * + * This variable can be set to the following values: + * + * - "0": GCController is not used + * - "1": GCController is used (the default) + */ +#define SDL_HINT_JOYSTICK_MFI "SDL_JOYSTICK_MFI" + +/** + * A variable controlling whether the RAWINPUT joystick drivers should be used + * for better handling XInput-capable devices. + * + * This variable can be set to the following values: + * + * - "0": RAWINPUT drivers are not used + * - "1": RAWINPUT drivers are used (the default) + */ +#define SDL_HINT_JOYSTICK_RAWINPUT "SDL_JOYSTICK_RAWINPUT" + +/** + * A variable controlling whether the RAWINPUT driver should pull correlated + * data from XInput. + * + * This variable can be set to the following values: + * + * - "0": RAWINPUT driver will only use data from raw input APIs + * - "1": RAWINPUT driver will also pull data from XInput, providing better + * trigger axes, guide button presses, and rumble support for Xbox + * controllers + * + * The default is "1". This hint applies to any joysticks opened after setting + * the hint. + */ +#define SDL_HINT_JOYSTICK_RAWINPUT_CORRELATE_XINPUT "SDL_JOYSTICK_RAWINPUT_CORRELATE_XINPUT" + +/** + * A variable controlling whether the ROG Chakram mice should show up as + * joysticks + * + * This variable can be set to the following values: + * + * - "0": ROG Chakram mice do not show up as joysticks (the default) + * - "1": ROG Chakram mice show up as joysticks + */ +#define SDL_HINT_JOYSTICK_ROG_CHAKRAM "SDL_JOYSTICK_ROG_CHAKRAM" + +/** + * A variable controlling whether a separate thread should be used for + * handling joystick detection and raw input messages on Windows + * + * This variable can be set to the following values: + * + * - "0": A separate thread is not used (the default) + * - "1": A separate thread is used for handling raw input messages + */ +#define SDL_HINT_JOYSTICK_THREAD "SDL_JOYSTICK_THREAD" + +/** + * A variable containing a list of throttle style controllers. + * + * The format of the string is a comma separated list of USB VID/PID pairs in + * hexadecimal form, e.g. + * + * 0xAAAA/0xBBBB,0xCCCC/0xDDDD + * + * The variable can also take the form of @file, in which case the named file + * will be loaded and interpreted as the value of the variable. + */ +#define SDL_HINT_JOYSTICK_THROTTLE_DEVICES "SDL_JOYSTICK_THROTTLE_DEVICES" + +/** + * A variable containing a list of devices that are not throttle style + * controllers. + * + * This will override SDL_HINT_JOYSTICK_THROTTLE_DEVICES and the built in + * device list. + * + * The format of the string is a comma separated list of USB VID/PID pairs in + * hexadecimal form, e.g. + * + * 0xAAAA/0xBBBB,0xCCCC/0xDDDD + * + * The variable can also take the form of @file, in which case the named file + * will be loaded and interpreted as the value of the variable. + */ +#define SDL_HINT_JOYSTICK_THROTTLE_DEVICES_EXCLUDED "SDL_JOYSTICK_THROTTLE_DEVICES_EXCLUDED" + +/** + * A variable controlling whether Windows.Gaming.Input should be used for + * controller handling. + * + * This variable can be set to the following values: + * + * - "0": WGI is not used + * - "1": WGI is used (the default) + */ +#define SDL_HINT_JOYSTICK_WGI "SDL_JOYSTICK_WGI" + +/** + * A variable containing a list of wheel style controllers. + * + * The format of the string is a comma separated list of USB VID/PID pairs in + * hexadecimal form, e.g. + * + * 0xAAAA/0xBBBB,0xCCCC/0xDDDD + * + * The variable can also take the form of @file, in which case the named file + * will be loaded and interpreted as the value of the variable. + */ +#define SDL_HINT_JOYSTICK_WHEEL_DEVICES "SDL_JOYSTICK_WHEEL_DEVICES" + +/** + * A variable containing a list of devices that are not wheel style + * controllers. + * + * This will override SDL_HINT_JOYSTICK_WHEEL_DEVICES and the built in device + * list. + * + * The format of the string is a comma separated list of USB VID/PID pairs in + * hexadecimal form, e.g. + * + * 0xAAAA/0xBBBB,0xCCCC/0xDDDD + * + * The variable can also take the form of @file, in which case the named file + * will be loaded and interpreted as the value of the variable. + */ +#define SDL_HINT_JOYSTICK_WHEEL_DEVICES_EXCLUDED "SDL_JOYSTICK_WHEEL_DEVICES_EXCLUDED" + +/** + * A variable containing a list of devices known to have all axes centered at + * zero. + * + * The format of the string is a comma separated list of USB VID/PID pairs in + * hexadecimal form, e.g. + * + * 0xAAAA/0xBBBB,0xCCCC/0xDDDD + * + * The variable can also take the form of @file, in which case the named file + * will be loaded and interpreted as the value of the variable. + */ +#define SDL_HINT_JOYSTICK_ZERO_CENTERED_DEVICES "SDL_JOYSTICK_ZERO_CENTERED_DEVICES" + +/** + * Determines whether SDL enforces that DRM master is required in order to + * initialize the KMSDRM video backend. + * + * The DRM subsystem has a concept of a "DRM master" which is a DRM client + * that has the ability to set planes, set cursor, etc. When SDL is DRM + * master, it can draw to the screen using the SDL rendering APIs. Without DRM + * master, SDL is still able to process input and query attributes of attached + * displays, but it cannot change display state or draw to the screen + * directly. + * + * In some cases, it can be useful to have the KMSDRM backend even if it + * cannot be used for rendering. An app may want to use SDL for input + * processing while using another rendering API (such as an MMAL overlay on + * Raspberry Pi) or using its own code to render to DRM overlays that SDL + * doesn't support. + * + * This hint must be set before initializing the video subsystem. + * + * This variable can be set to the following values: + * + * - "0": SDL will allow usage of the KMSDRM backend without DRM master + * - "1": SDL Will require DRM master to use the KMSDRM backend (default) + */ +#define SDL_HINT_KMSDRM_REQUIRE_DRM_MASTER "SDL_KMSDRM_REQUIRE_DRM_MASTER" + +/** + * A comma separated list of devices to open as joysticks + * + * This variable is currently only used by the Linux joystick driver. + */ +#define SDL_HINT_JOYSTICK_DEVICE "SDL_JOYSTICK_DEVICE" + + +/** + * A variable containing a list of devices and their desired number of haptic + * (force feedback) enabled axis. + * + * The format of the string is a comma separated list of USB VID/PID pairs in + * hexadecimal form plus the number of desired axes, e.g. + * + * `0xAAAA/0xBBBB/1,0xCCCC/0xDDDD/3` + * + * This hint supports a "wildcard" device that will set the number of haptic + * axes on all initialized haptic devices which were not defined explicitly in + * this hint. + * + * `0xFFFF/0xFFFF/1` + * + * This hint should be set before a controller is opened. The number of haptic + * axes won't exceed the number of real axes found on the device. + */ +#define SDL_HINT_JOYSTICK_HAPTIC_AXES "SDL_JOYSTICK_HAPTIC_AXES" + +/** + * A variable controlling whether joysticks on Linux will always treat 'hat' + * axis inputs (ABS_HAT0X - ABS_HAT3Y) as 8-way digital hats without checking + * whether they may be analog. + * + * This variable can be set to the following values: + * + * - "0": Only map hat axis inputs to digital hat outputs if the input axes + * appear to actually be digital (the default) + * - "1": Always handle the input axes numbered ABS_HAT0X to ABS_HAT3Y as + * digital hats + */ +#define SDL_HINT_LINUX_DIGITAL_HATS "SDL_LINUX_DIGITAL_HATS" + +/** + * A variable controlling whether digital hats on Linux will apply deadzones + * to their underlying input axes or use unfiltered values. + * + * This variable can be set to the following values: + * + * - "0": Return digital hat values based on unfiltered input axis values + * - "1": Return digital hat values with deadzones on the input axes taken + * into account (the default) + */ +#define SDL_HINT_LINUX_HAT_DEADZONES "SDL_LINUX_HAT_DEADZONES" + +/** + * A variable controlling whether to use the classic /dev/input/js* joystick + * interface or the newer /dev/input/event* joystick interface on Linux + * + * This variable can be set to the following values: + * + * - "0": Use /dev/input/event* + * - "1": Use /dev/input/js* + * + * By default the /dev/input/event* interfaces are used + */ +#define SDL_HINT_LINUX_JOYSTICK_CLASSIC "SDL_LINUX_JOYSTICK_CLASSIC" + +/** + * A variable controlling whether joysticks on Linux adhere to their + * HID-defined deadzones or return unfiltered values. + * + * This variable can be set to the following values: + * + * - "0": Return unfiltered joystick axis values (the default) + * - "1": Return axis values with deadzones taken into account + */ +#define SDL_HINT_LINUX_JOYSTICK_DEADZONES "SDL_LINUX_JOYSTICK_DEADZONES" + +/** + * A variable controlling the default SDL log levels. + * + * This variable is a comma separated set of category=level tokens that define + * the default logging levels for SDL applications. + * + * The category can be a numeric category, one of "app", "error", "assert", + * "system", "audio", "video", "render", "input", "test", or `*` for any + * unspecified category. + * + * The level can be a numeric level, one of "verbose", "debug", "info", + * "warn", "error", "critical", or "quiet" to disable that category. + * + * You can omit the category if you want to set the logging level for all + * categories. + * + * If this hint isn't set, the default log levels are equivalent to: + * "app=info,assert=warn,test=verbose,*=error" + */ +#define SDL_HINT_LOGGING "SDL_LOGGING" + +/** + * When set don't force the SDL app to become a foreground process + * + * This hint only applies to Mac OS X. + */ +#define SDL_HINT_MAC_BACKGROUND_APP "SDL_MAC_BACKGROUND_APP" + +/** + * A variable that determines whether ctrl+click should generate a right-click + * event on Mac + * + * If present, holding ctrl while left clicking will generate a right click + * event when on Mac. + */ +#define SDL_HINT_MAC_CTRL_CLICK_EMULATE_RIGHT_CLICK "SDL_MAC_CTRL_CLICK_EMULATE_RIGHT_CLICK" + +/** + * A variable controlling whether dispatching OpenGL context updates should + * block the dispatching thread until the main thread finishes processing + * + * This variable can be set to the following values: + * + * - "0": Dispatching OpenGL context updates will block the dispatching thread + * until the main thread finishes processing (default). + * - "1": Dispatching OpenGL context updates will allow the dispatching thread + * to continue execution. + * + * Generally you want the default, but if you have OpenGL code in a background + * thread on a Mac, and the main thread hangs because it's waiting for that + * background thread, but that background thread is also hanging because it's + * waiting for the main thread to do an update, this might fix your issue. + * + * This hint only applies to macOS. + * + * This hint is available since SDL 2.24.0. + */ +#define SDL_HINT_MAC_OPENGL_ASYNC_DISPATCH "SDL_MAC_OPENGL_ASYNC_DISPATCH" + +/** + * A variable setting the double click radius, in pixels. + */ +#define SDL_HINT_MOUSE_DOUBLE_CLICK_RADIUS "SDL_MOUSE_DOUBLE_CLICK_RADIUS" + +/** + * A variable setting the double click time, in milliseconds. + */ +#define SDL_HINT_MOUSE_DOUBLE_CLICK_TIME "SDL_MOUSE_DOUBLE_CLICK_TIME" + +/** + * Allow mouse click events when clicking to focus an SDL window + * + * This variable can be set to the following values: + * + * - "0": Ignore mouse clicks that activate a window + * - "1": Generate events for mouse clicks that activate a window + * + * By default SDL will ignore mouse clicks that activate a window + */ +#define SDL_HINT_MOUSE_FOCUS_CLICKTHROUGH "SDL_MOUSE_FOCUS_CLICKTHROUGH" + +/** + * A variable setting the speed scale for mouse motion, in floating point, + * when the mouse is not in relative mode + */ +#define SDL_HINT_MOUSE_NORMAL_SPEED_SCALE "SDL_MOUSE_NORMAL_SPEED_SCALE" + +/** + * A variable controlling whether relative mouse mode constrains the mouse to + * the center of the window + * + * This variable can be set to the following values: + * + * - "0": Relative mouse mode constrains the mouse to the window + * - "1": Relative mouse mode constrains the mouse to the center of the window + * + * Constraining to the center of the window works better for FPS games and + * when the application is running over RDP. Constraining to the whole window + * works better for 2D games and increases the chance that the mouse will be + * in the correct position when using high DPI mice. + * + * By default SDL will constrain the mouse to the center of the window + */ +#define SDL_HINT_MOUSE_RELATIVE_MODE_CENTER "SDL_MOUSE_RELATIVE_MODE_CENTER" + +/** + * A variable controlling whether relative mouse mode is implemented using + * mouse warping + * + * This variable can be set to the following values: + * + * - "0": Relative mouse mode uses raw input + * - "1": Relative mouse mode uses mouse warping + * + * By default SDL will use raw input for relative mouse mode + */ +#define SDL_HINT_MOUSE_RELATIVE_MODE_WARP "SDL_MOUSE_RELATIVE_MODE_WARP" + +/** + * A variable controlling whether relative mouse motion is affected by + * renderer scaling + * + * This variable can be set to the following values: + * + * - "0": Relative motion is unaffected by DPI or renderer's logical size + * - "1": Relative motion is scaled according to DPI scaling and logical size + * + * By default relative mouse deltas are affected by DPI and renderer scaling + */ +#define SDL_HINT_MOUSE_RELATIVE_SCALING "SDL_MOUSE_RELATIVE_SCALING" + +/** + * A variable setting the scale for mouse motion, in floating point, when the + * mouse is in relative mode + */ +#define SDL_HINT_MOUSE_RELATIVE_SPEED_SCALE "SDL_MOUSE_RELATIVE_SPEED_SCALE" + +/** + * A variable controlling whether the system mouse acceleration curve is used + * for relative mouse motion. + * + * This variable can be set to the following values: + * + * - "0": Relative mouse motion will be unscaled (the default) + * - "1": Relative mouse motion will be scaled using the system mouse + * acceleration curve. + * + * If SDL_HINT_MOUSE_RELATIVE_SPEED_SCALE is set, that will override the + * system speed scale. + */ +#define SDL_HINT_MOUSE_RELATIVE_SYSTEM_SCALE "SDL_MOUSE_RELATIVE_SYSTEM_SCALE" + +/** + * A variable controlling whether a motion event should be generated for mouse + * warping in relative mode. + * + * This variable can be set to the following values: + * + * - "0": Warping the mouse will not generate a motion event in relative mode + * - "1": Warping the mouse will generate a motion event in relative mode + * + * By default warping the mouse will not generate motion events in relative + * mode. This avoids the application having to filter out large relative + * motion due to warping. + */ +#define SDL_HINT_MOUSE_RELATIVE_WARP_MOTION "SDL_MOUSE_RELATIVE_WARP_MOTION" + +/** + * A variable controlling whether the hardware cursor stays visible when + * relative mode is active. + * + * This variable can be set to the following values: "0" - The cursor will be + * hidden while relative mode is active (default) "1" - The cursor will remain + * visible while relative mode is active + * + * Note that for systems without raw hardware inputs, relative mode is + * implemented using warping, so the hardware cursor will visibly warp between + * frames if this is enabled on those systems. + */ +#define SDL_HINT_MOUSE_RELATIVE_CURSOR_VISIBLE "SDL_MOUSE_RELATIVE_CURSOR_VISIBLE" + +/** + * A variable controlling whether mouse events should generate synthetic touch + * events + * + * This variable can be set to the following values: + * + * - "0": Mouse events will not generate touch events (default for desktop + * platforms) + * - "1": Mouse events will generate touch events (default for mobile + * platforms, such as Android and iOS) + */ +#define SDL_HINT_MOUSE_TOUCH_EVENTS "SDL_MOUSE_TOUCH_EVENTS" + +/** + * A variable controlling whether the mouse is captured while mouse buttons + * are pressed + * + * This variable can be set to the following values: + * + * - "0": The mouse is not captured while mouse buttons are pressed + * - "1": The mouse is captured while mouse buttons are pressed + * + * By default the mouse is captured while mouse buttons are pressed so if the + * mouse is dragged outside the window, the application continues to receive + * mouse events until the button is released. + */ +#define SDL_HINT_MOUSE_AUTO_CAPTURE "SDL_MOUSE_AUTO_CAPTURE" + +/** + * Tell SDL not to catch the SIGINT or SIGTERM signals. + * + * This hint only applies to Unix-like platforms, and should set before any + * calls to SDL_Init() + * + * The variable can be set to the following values: + * + * - "0": SDL will install a SIGINT and SIGTERM handler, and when it catches a + * signal, convert it into an SDL_QUIT event. + * - "1": SDL will not install a signal handler at all. + */ +#define SDL_HINT_NO_SIGNAL_HANDLERS "SDL_NO_SIGNAL_HANDLERS" + +/** + * A variable controlling what driver to use for OpenGL ES contexts. + * + * On some platforms, currently Windows and X11, OpenGL drivers may support + * creating contexts with an OpenGL ES profile. By default SDL uses these + * profiles, when available, otherwise it attempts to load an OpenGL ES + * library, e.g. that provided by the ANGLE project. This variable controls + * whether SDL follows this default behaviour or will always load an OpenGL ES + * library. + * + * Circumstances where this is useful include - Testing an app with a + * particular OpenGL ES implementation, e.g ANGLE, or emulator, e.g. those + * from ARM, Imagination or Qualcomm. - Resolving OpenGL ES function addresses + * at link time by linking with the OpenGL ES library instead of querying them + * at run time with SDL_GL_GetProcAddress(). + * + * Caution: for an application to work with the default behaviour across + * different OpenGL drivers it must query the OpenGL ES function addresses at + * run time using SDL_GL_GetProcAddress(). + * + * This variable is ignored on most platforms because OpenGL ES is native or + * not supported. + * + * This variable can be set to the following values: + * + * - "0": Use ES profile of OpenGL, if available. (Default when not set.) + * - "1": Load OpenGL ES library using the default library names. + */ +#define SDL_HINT_OPENGL_ES_DRIVER "SDL_OPENGL_ES_DRIVER" + +/** + * A variable controlling which orientations are allowed on iOS/Android. + * + * In some circumstances it is necessary to be able to explicitly control + * which UI orientations are allowed. + * + * This variable is a space delimited list of the following values: + * + * - "LandscapeLeft" + * - "LandscapeRight" + * - "Portrait" + * - "PortraitUpsideDown" + */ +#define SDL_HINT_ORIENTATIONS "SDL_IOS_ORIENTATIONS" + +/** + * A variable controlling the use of a sentinel event when polling the event + * queue + * + * This variable can be set to the following values: + * + * - "0": Disable poll sentinels + * - "1": Enable poll sentinels + * + * When polling for events, SDL_PumpEvents is used to gather new events from + * devices. If a device keeps producing new events between calls to + * SDL_PumpEvents, a poll loop will become stuck until the new events stop. + * This is most noticeable when moving a high frequency mouse. + * + * By default, poll sentinels are enabled. + */ +#define SDL_HINT_POLL_SENTINEL "SDL_POLL_SENTINEL" + +/** + * Override for SDL_GetPreferredLocales() + * + * If set, this will be favored over anything the OS might report for the + * user's preferred locales. Changing this hint at runtime will not generate a + * SDL_LOCALECHANGED event (but if you can change the hint, you can push your + * own event, if you want). + * + * The format of this hint is a comma-separated list of language and locale, + * combined with an underscore, as is a common format: "en_GB". Locale is + * optional: "en". So you might have a list like this: "en_GB,jp,es_PT" + */ +#define SDL_HINT_PREFERRED_LOCALES "SDL_PREFERRED_LOCALES" + +/** + * A variable describing the content orientation on QtWayland-based platforms. + * + * On QtWayland platforms, windows are rotated client-side to allow for custom + * transitions. In order to correctly position overlays (e.g. volume bar) and + * gestures (e.g. events view, close/minimize gestures), the system needs to + * know in which orientation the application is currently drawing its + * contents. + * + * This does not cause the window to be rotated or resized, the application + * needs to take care of drawing the content in the right orientation (the + * framebuffer is always in portrait mode). + * + * This variable can be one of the following values: + * + * - "primary" (default) + * - "portrait" + * - "landscape" + * - "inverted-portrait" + * - "inverted-landscape" + * + * Since SDL 2.0.22 this variable accepts a comma-separated list of values + * above. + */ +#define SDL_HINT_QTWAYLAND_CONTENT_ORIENTATION "SDL_QTWAYLAND_CONTENT_ORIENTATION" + +/** + * Flags to set on QtWayland windows to integrate with the native window + * manager. + * + * On QtWayland platforms, this hint controls the flags to set on the windows. + * For example, on Sailfish OS "OverridesSystemGestures" disables swipe + * gestures. + * + * This variable is a space-separated list of the following values (empty = no + * flags): + * + * - "OverridesSystemGestures" + * - "StaysOnTop" + * - "BypassWindowManager" + */ +#define SDL_HINT_QTWAYLAND_WINDOW_FLAGS "SDL_QTWAYLAND_WINDOW_FLAGS" + +/** + * A variable controlling whether the 2D render API is compatible or + * efficient. + * + * This variable can be set to the following values: + * + * - "0": Don't use batching to make rendering more efficient. + * - "1": Use batching, but might cause problems if app makes its own direct + * OpenGL calls. + * + * Up to SDL 2.0.9, the render API would draw immediately when requested. Now + * it batches up draw requests and sends them all to the GPU only when forced + * to (during SDL_RenderPresent, when changing render targets, by updating a + * texture that the batch needs, etc). This is significantly more efficient, + * but it can cause problems for apps that expect to render on top of the + * render API's output. As such, SDL will disable batching if a specific + * render backend is requested (since this might indicate that the app is + * planning to use the underlying graphics API directly). This hint can be + * used to explicitly request batching in this instance. It is a contract that + * you will either never use the underlying graphics API directly, or if you + * do, you will call SDL_RenderFlush() before you do so any current batch goes + * to the GPU before your work begins. Not following this contract will result + * in undefined behavior. + */ +#define SDL_HINT_RENDER_BATCHING "SDL_RENDER_BATCHING" + +/** + * A variable controlling how the 2D render API renders lines + * + * This variable can be set to the following values: + * + * - "0": Use the default line drawing method (Bresenham's line algorithm as + * of SDL 2.0.20) + * - "1": Use the driver point API using Bresenham's line algorithm (correct, + * draws many points) + * - "2": Use the driver line API (occasionally misses line endpoints based on + * hardware driver quirks, was the default before 2.0.20) + * - "3": Use the driver geometry API (correct, draws thicker diagonal lines) + * + * This variable should be set when the renderer is created. + */ +#define SDL_HINT_RENDER_LINE_METHOD "SDL_RENDER_LINE_METHOD" + +/** + * A variable controlling whether to enable Direct3D 11+'s Debug Layer. + * + * This variable does not have any effect on the Direct3D 9 based renderer. + * + * This variable can be set to the following values: + * + * - "0": Disable Debug Layer use + * - "1": Enable Debug Layer use + * + * By default, SDL does not use Direct3D Debug Layer. + */ +#define SDL_HINT_RENDER_DIRECT3D11_DEBUG "SDL_RENDER_DIRECT3D11_DEBUG" + +/** + * A variable controlling whether the Direct3D device is initialized for + * thread-safe operations. + * + * This variable can be set to the following values: + * + * - "0": Thread-safety is not enabled (faster) + * - "1": Thread-safety is enabled + * + * By default the Direct3D device is created with thread-safety disabled. + */ +#define SDL_HINT_RENDER_DIRECT3D_THREADSAFE "SDL_RENDER_DIRECT3D_THREADSAFE" + +/** + * A variable specifying which render driver to use. + * + * If the application doesn't pick a specific renderer to use, this variable + * specifies the name of the preferred renderer. If the preferred renderer + * can't be initialized, the normal default renderer is used. + * + * This variable is case insensitive and can be set to the following values: + * + * - "direct3d" + * - "direct3d11" + * - "direct3d12" + * - "opengl" + * - "opengles2" + * - "opengles" + * - "metal" + * - "software" + * + * The default varies by platform, but it's the first one in the list that is + * available on the current platform. + */ +#define SDL_HINT_RENDER_DRIVER "SDL_RENDER_DRIVER" + +/** + * A variable controlling the scaling policy for SDL_RenderSetLogicalSize. + * + * This variable can be set to the following values: + * + * "0" or "letterbox" - Uses letterbox/sidebars to fit the entire rendering on + * screen "1" or "overscan" - Will zoom the rendering so it fills the entire + * screen, allowing edges to be drawn offscreen + * + * By default letterbox is used + */ +#define SDL_HINT_RENDER_LOGICAL_SIZE_MODE "SDL_RENDER_LOGICAL_SIZE_MODE" + +/** + * A variable controlling whether the OpenGL render driver uses shaders if + * they are available. + * + * This variable can be set to the following values: + * + * - "0": Disable shaders + * - "1": Enable shaders + * + * By default shaders are used if OpenGL supports them. + */ +#define SDL_HINT_RENDER_OPENGL_SHADERS "SDL_RENDER_OPENGL_SHADERS" + +/** + * A variable controlling the scaling quality + * + * This variable can be set to the following values: + * + * - "0" or "nearest": Nearest pixel sampling + * - "1" or "linear": Linear filtering (supported by OpenGL and Direct3D) + * - "2" or "best": Currently this is the same as "linear" + * + * By default nearest pixel sampling is used + */ +#define SDL_HINT_RENDER_SCALE_QUALITY "SDL_RENDER_SCALE_QUALITY" + +/** + * A variable controlling whether updates to the SDL screen surface should be + * synchronized with the vertical refresh, to avoid tearing. + * + * This variable can be set to the following values: + * + * - "0": Disable vsync + * - "1": Enable vsync + * + * By default SDL does not sync screen surface updates with vertical refresh. + */ +#define SDL_HINT_RENDER_VSYNC "SDL_RENDER_VSYNC" + +/** + * A variable controlling whether the Metal render driver select low power + * device over default one + * + * This variable can be set to the following values: + * + * - "0": Use the prefered OS device + * - "1": Select a low power one + * + * By default the prefered OS device is used. + */ +#define SDL_HINT_RENDER_METAL_PREFER_LOW_POWER_DEVICE "SDL_RENDER_METAL_PREFER_LOW_POWER_DEVICE" + +/** + * A variable containing a list of ROG gamepad capable mice. + * + * The format of the string is a comma separated list of USB VID/PID pairs in + * hexadecimal form, e.g. + * + * 0xAAAA/0xBBBB,0xCCCC/0xDDDD + * + * The variable can also take the form of @file, in which case the named file + * will be loaded and interpreted as the value of the variable. + */ +#define SDL_HINT_ROG_GAMEPAD_MICE "SDL_ROG_GAMEPAD_MICE" + +/** + * A variable containing a list of devices that are not ROG gamepad capable + * mice. + * + * This will override SDL_HINT_ROG_GAMEPAD_MICE and the built in device list. + * + * The format of the string is a comma separated list of USB VID/PID pairs in + * hexadecimal form, e.g. + * + * 0xAAAA/0xBBBB,0xCCCC/0xDDDD + * + * The variable can also take the form of @file, in which case the named file + * will be loaded and interpreted as the value of the variable. + */ +#define SDL_HINT_ROG_GAMEPAD_MICE_EXCLUDED "SDL_ROG_GAMEPAD_MICE_EXCLUDED" + +/** + * A variable controlling if VSYNC is automatically disable if doesn't reach + * the enough FPS + * + * This variable can be set to the following values: + * + * - "0": It will be using VSYNC as defined in the main flag. Default + * - "1": If VSYNC was previously enabled, then it will disable VSYNC if + * doesn't reach enough speed + * + * By default SDL does not enable the automatic VSYNC + */ +#define SDL_HINT_PS2_DYNAMIC_VSYNC "SDL_PS2_DYNAMIC_VSYNC" + +/** + * A variable to control whether the return key on the soft keyboard should + * hide the soft keyboard on Android and iOS. + * + * The variable can be set to the following values: + * + * - "0": The return key will be handled as a key event. This is the behaviour + * of SDL <= 2.0.3. (default) + * - "1": The return key will hide the keyboard. + * + * The value of this hint is used at runtime, so it can be changed at any + * time. + */ +#define SDL_HINT_RETURN_KEY_HIDES_IME "SDL_RETURN_KEY_HIDES_IME" + +/** + * Tell SDL which Dispmanx layer to use on a Raspberry PI + * + * Also known as Z-order. The variable can take a negative or positive value. + * The default is 10000. + */ +#define SDL_HINT_RPI_VIDEO_LAYER "SDL_RPI_VIDEO_LAYER" + +/** + * Specify an "activity name" for screensaver inhibition. + * + * Some platforms, notably Linux desktops, list the applications which are + * inhibiting the screensaver or other power-saving features. + * + * This hint lets you specify the "activity name" sent to the OS when + * SDL_DisableScreenSaver() is used (or the screensaver is automatically + * disabled). The contents of this hint are used when the screensaver is + * disabled. You should use a string that describes what your program is doing + * (and, therefore, why the screensaver is disabled). For example, "Playing a + * game" or "Watching a video". + * + * Setting this to "" or leaving it unset will have SDL use a reasonable + * default: "Playing a game" or something similar. + * + * On targets where this is not supported, this hint does nothing. + */ +#define SDL_HINT_SCREENSAVER_INHIBIT_ACTIVITY_NAME "SDL_SCREENSAVER_INHIBIT_ACTIVITY_NAME" + +/** + * Specifies whether SDL_THREAD_PRIORITY_TIME_CRITICAL should be treated as + * realtime. + * + * On some platforms, like Linux, a realtime priority thread may be subject to + * restrictions that require special handling by the application. This hint + * exists to let SDL know that the app is prepared to handle said + * restrictions. + * + * On Linux, SDL will apply the following configuration to any thread that + * becomes realtime: + * + * - The SCHED_RESET_ON_FORK bit will be set on the scheduling policy. + * - An RLIMIT_RTTIME budget will be configured to the rtkit specified limit. + * - Exceeding this limit will result in the kernel sending SIGKILL to the + * app. + * + * Refer to the man pages for more information. + * + * This variable can be set to the following values: + * + * - "0": default platform specific behaviour + * - "1": Force SDL_THREAD_PRIORITY_TIME_CRITICAL to a realtime scheduling + * policy + */ +#define SDL_HINT_THREAD_FORCE_REALTIME_TIME_CRITICAL "SDL_THREAD_FORCE_REALTIME_TIME_CRITICAL" + +/** + * A string specifying additional information to use with + * SDL_SetThreadPriority. + * + * By default SDL_SetThreadPriority will make appropriate system changes in + * order to apply a thread priority. For example on systems using pthreads the + * scheduler policy is changed automatically to a policy that works well with + * a given priority. Code which has specific requirements can override SDL's + * default behavior with this hint. + * + * pthread hint values are "current", "other", "fifo" and "rr". Currently no + * other platform hint values are defined but may be in the future. + */ +#define SDL_HINT_THREAD_PRIORITY_POLICY "SDL_THREAD_PRIORITY_POLICY" + +/** + * A string specifying SDL's threads stack size in bytes or "0" for the + * backend's default size + * + * Use this hint in case you need to set SDL's threads stack size to other + * than the default. This is specially useful if you build SDL against a non + * glibc libc library (such as musl) which provides a relatively small default + * thread stack size (a few kilobytes versus the default 8MB glibc uses). + * Support for this hint is currently available only in the pthread, Windows, + * and PSP backend. + * + * Instead of this hint, in 2.0.9 and later, you can use + * SDL_CreateThreadWithStackSize(). This hint only works with the classic + * SDL_CreateThread(). + */ +#define SDL_HINT_THREAD_STACK_SIZE "SDL_THREAD_STACK_SIZE" + +/** + * A variable that controls the timer resolution, in milliseconds. + * + * The higher resolution the timer, the more frequently the CPU services timer + * interrupts, and the more precise delays are, but this takes up power and + * CPU time. This hint is only used on Windows. + * + * See this blog post for more information: + * http://randomascii.wordpress.com/2013/07/08/windows-timer-resolution-megawatts-wasted/ + * + * If this variable is set to "0", the system timer resolution is not set. + * + * The default value is "1". This hint may be set at any time. + */ +#define SDL_HINT_TIMER_RESOLUTION "SDL_TIMER_RESOLUTION" + +/** + * A variable controlling whether touch events should generate synthetic mouse + * events + * + * This variable can be set to the following values: + * + * - "0": Touch events will not generate mouse events + * - "1": Touch events will generate mouse events + * + * By default SDL will generate mouse events for touch events + */ +#define SDL_HINT_TOUCH_MOUSE_EVENTS "SDL_TOUCH_MOUSE_EVENTS" + +/** + * A variable controlling which touchpad should generate synthetic mouse + * events + * + * This variable can be set to the following values: + * + * - "0": Only front touchpad should generate mouse events. Default + * - "1": Only back touchpad should generate mouse events. + * - "2": Both touchpads should generate mouse events. + * + * By default SDL will generate mouse events for all touch devices + */ +#define SDL_HINT_VITA_TOUCH_MOUSE_DEVICE "SDL_HINT_VITA_TOUCH_MOUSE_DEVICE" + +/** + * A variable controlling whether the Android / tvOS remotes should be listed + * as joystick devices, instead of sending keyboard events. + * + * This variable can be set to the following values: + * + * - "0": Remotes send enter/escape/arrow key events + * - "1": Remotes are available as 2 axis, 2 button joysticks (the default). + */ +#define SDL_HINT_TV_REMOTE_AS_JOYSTICK "SDL_TV_REMOTE_AS_JOYSTICK" + +/** + * A variable controlling whether the screensaver is enabled. + * + * This variable can be set to the following values: + * + * - "0": Disable screensaver + * - "1": Enable screensaver + * + * By default SDL will disable the screensaver. + */ +#define SDL_HINT_VIDEO_ALLOW_SCREENSAVER "SDL_VIDEO_ALLOW_SCREENSAVER" + +/** + * Tell the video driver that we only want a double buffer. + * + * By default, most lowlevel 2D APIs will use a triple buffer scheme that + * wastes no CPU time on waiting for vsync after issuing a flip, but + * introduces a frame of latency. On the other hand, using a double buffer + * scheme instead is recommended for cases where low latency is an important + * factor because we save a whole frame of latency. We do so by waiting for + * vsync immediately after issuing a flip, usually just after eglSwapBuffers + * call in the backend's *_SwapWindow function. + * + * Since it's driver-specific, it's only supported where possible and + * implemented. Currently supported the following drivers: + * + * - Wayland (wayland) + * - KMSDRM (kmsdrm) + * - Raspberry Pi (raspberrypi) + */ +#define SDL_HINT_VIDEO_DOUBLE_BUFFER "SDL_VIDEO_DOUBLE_BUFFER" + +/** + * A variable controlling whether the EGL window is allowed to be composited + * as transparent, rather than opaque. + * + * Most window systems will always render windows opaque, even if the surface + * format has an alpha channel. This is not always true, however, so by + * default SDL will try to enforce opaque composition. To override this + * behavior, you can set this hint to "1". + */ +#define SDL_HINT_VIDEO_EGL_ALLOW_TRANSPARENCY "SDL_VIDEO_EGL_ALLOW_TRANSPARENCY" + +/** + * A variable controlling whether the graphics context is externally managed. + * + * This variable can be set to the following values: + * + * - "0": SDL will manage graphics contexts that are attached to windows. + * - "1": Disable graphics context management on windows. + * + * By default SDL will manage OpenGL contexts in certain situations. For + * example, on Android the context will be automatically saved and restored + * when pausing the application. Additionally, some platforms will assume + * usage of OpenGL if Vulkan isn't used. Setting this to "1" will prevent this + * behavior, which is desireable when the application manages the graphics + * context, such as an externally managed OpenGL context or attaching a Vulkan + * surface to the window. + */ +#define SDL_HINT_VIDEO_EXTERNAL_CONTEXT "SDL_VIDEO_EXTERNAL_CONTEXT" + +/** + * If set to 1, then do not allow high-DPI windows. + * + * ("Retina" on Mac and iOS) + */ +#define SDL_HINT_VIDEO_HIGHDPI_DISABLED "SDL_VIDEO_HIGHDPI_DISABLED" + +/** + * A variable that dictates policy for fullscreen Spaces on Mac OS X. + * + * This hint only applies to Mac OS X. + * + * The variable can be set to the following values: + * + * - "0": Disable Spaces support (FULLSCREEN_DESKTOP won't use them and + * SDL_WINDOW_RESIZABLE windows won't offer the "fullscreen" button on their + * titlebars). + * - "1": Enable Spaces support (FULLSCREEN_DESKTOP will use them and + * SDL_WINDOW_RESIZABLE windows will offer the "fullscreen" button on their + * titlebars). + * + * The default value is "1". This hint must be set before any windows are + * created. + */ +#define SDL_HINT_VIDEO_MAC_FULLSCREEN_SPACES "SDL_VIDEO_MAC_FULLSCREEN_SPACES" + +/** + * Minimize your SDL_Window if it loses key focus when in fullscreen mode. + * + * Defaults to false. + */ +#define SDL_HINT_VIDEO_MINIMIZE_ON_FOCUS_LOSS "SDL_VIDEO_MINIMIZE_ON_FOCUS_LOSS" + +/** + * A variable controlling whether the libdecor Wayland backend is allowed to + * be used. + * + * This variable can be set to the following values: + * + * - "0": libdecor use is disabled. + * - "1": libdecor use is enabled (default). + * + * libdecor is used over xdg-shell when xdg-decoration protocol is + * unavailable. + */ +#define SDL_HINT_VIDEO_WAYLAND_ALLOW_LIBDECOR "SDL_VIDEO_WAYLAND_ALLOW_LIBDECOR" + +/** + * A variable controlling whether the libdecor Wayland backend is preferred + * over native decorations. + * + * When this hint is set, libdecor will be used to provide window decorations, + * even if xdg-decoration is available. (Note that, by default, libdecor will + * use xdg-decoration itself if available). + * + * This variable can be set to the following values: + * + * - "0": libdecor is enabled only if server-side decorations are unavailable. + * - "1": libdecor is always enabled if available. + * + * libdecor is used over xdg-shell when xdg-decoration protocol is + * unavailable. + */ +#define SDL_HINT_VIDEO_WAYLAND_PREFER_LIBDECOR "SDL_VIDEO_WAYLAND_PREFER_LIBDECOR" + +/** + * A variable controlling whether video mode emulation is enabled under + * Wayland. + * + * When this hint is set, a standard set of emulated CVT video modes will be + * exposed for use by the application. If it is disabled, the only modes + * exposed will be the logical desktop size and, in the case of a scaled + * desktop, the native display resolution. + * + * This variable can be set to the following values: + * + * - "0": Video mode emulation is disabled. + * - "1": Video mode emulation is enabled. + * + * By default video mode emulation is enabled. + */ +#define SDL_HINT_VIDEO_WAYLAND_MODE_EMULATION "SDL_VIDEO_WAYLAND_MODE_EMULATION" + +/** + * Enable or disable mouse pointer warp emulation, needed by some older games. + * + * When this hint is set, any SDL will emulate mouse warps using relative + * mouse mode. This is required for some older games (such as Source engine + * games), which warp the mouse to the centre of the screen rather than using + * relative mouse motion. Note that relative mouse mode may have different + * mouse acceleration behaviour than pointer warps. + * + * This variable can be set to the following values: + * + * - "0": All mouse warps fail, as mouse warping is not available under + * wayland. + * - "1": Some mouse warps will be emulated by forcing relative mouse mode. + * + * If not set, this is automatically enabled unless an application uses + * relative mouse mode directly. + */ +#define SDL_HINT_VIDEO_WAYLAND_EMULATE_MOUSE_WARP "SDL_VIDEO_WAYLAND_EMULATE_MOUSE_WARP" + +/** + * A variable that is the address of another SDL_Window* (as a hex string + * formatted with "%p"). + * + * If this hint is set before SDL_CreateWindowFrom() and the SDL_Window* it is + * set to has SDL_WINDOW_OPENGL set (and running on WGL only, currently), then + * two things will occur on the newly created SDL_Window: + * + * 1. Its pixel format will be set to the same pixel format as this + * SDL_Window. This is needed for example when sharing an OpenGL context + * across multiple windows. + * + * 2. The flag SDL_WINDOW_OPENGL will be set on the new window so it can be + * used for OpenGL rendering. + * + * This variable can be set to the following values: The address (as a string + * "%p") of the SDL_Window* that new windows created with + * SDL_CreateWindowFrom() should share a pixel format with. + */ +#define SDL_HINT_VIDEO_WINDOW_SHARE_PIXEL_FORMAT "SDL_VIDEO_WINDOW_SHARE_PIXEL_FORMAT" + +/** + * When calling SDL_CreateWindowFrom(), make the window compatible with + * OpenGL. + * + * This variable can be set to the following values: + * + * - "0": Don't add any graphics flags to the SDL_WindowFlags + * - "1": Add SDL_WINDOW_OPENGL to the SDL_WindowFlags + * + * By default SDL will not make the foreign window compatible with OpenGL. + */ +#define SDL_HINT_VIDEO_FOREIGN_WINDOW_OPENGL "SDL_VIDEO_FOREIGN_WINDOW_OPENGL" + +/** + * When calling SDL_CreateWindowFrom(), make the window compatible with + * Vulkan. + * + * This variable can be set to the following values: + * + * - "0": Don't add any graphics flags to the SDL_WindowFlags + * - "1": Add SDL_WINDOW_VULKAN to the SDL_WindowFlags + * + * By default SDL will not make the foreign window compatible with Vulkan. + */ +#define SDL_HINT_VIDEO_FOREIGN_WINDOW_VULKAN "SDL_VIDEO_FOREIGN_WINDOW_VULKAN" + +/** + * A variable specifying which shader compiler to preload when using the + * Chrome ANGLE binaries + * + * SDL has EGL and OpenGL ES2 support on Windows via the ANGLE project. It can + * use two different sets of binaries, those compiled by the user from source + * or those provided by the Chrome browser. In the later case, these binaries + * require that SDL loads a DLL providing the shader compiler. + * + * This variable can be set to the following values: + * + * - "d3dcompiler_46.dll: default, best for Vista or later. + * - "d3dcompiler_43.dll: for XP support. + * - "none": do not load any library, useful if you compiled ANGLE from source + * and included the compiler in your binaries. + */ +#define SDL_HINT_VIDEO_WIN_D3DCOMPILER "SDL_VIDEO_WIN_D3DCOMPILER" + +/** + * A variable controlling whether X11 should use GLX or EGL by default + * + * This variable can be set to the following values: + * + * - "0": Use GLX + * - "1": Use EGL + * + * By default SDL will use GLX when both are present. + */ +#define SDL_HINT_VIDEO_X11_FORCE_EGL "SDL_VIDEO_X11_FORCE_EGL" + +/** + * A variable controlling whether the X11 _NET_WM_BYPASS_COMPOSITOR hint + * should be used. + * + * This variable can be set to the following values: + * + * - "0": Disable _NET_WM_BYPASS_COMPOSITOR + * - "1": Enable _NET_WM_BYPASS_COMPOSITOR + * + * By default SDL will use _NET_WM_BYPASS_COMPOSITOR + */ +#define SDL_HINT_VIDEO_X11_NET_WM_BYPASS_COMPOSITOR "SDL_VIDEO_X11_NET_WM_BYPASS_COMPOSITOR" + +/** + * A variable controlling whether the X11 _NET_WM_PING protocol should be + * supported. + * + * This variable can be set to the following values: + * + * - "0": Disable _NET_WM_PING + * - "1": Enable _NET_WM_PING + * + * By default SDL will use _NET_WM_PING, but for applications that know they + * will not always be able to respond to ping requests in a timely manner they + * can turn it off to avoid the window manager thinking the app is hung. The + * hint is checked in CreateWindow. + */ +#define SDL_HINT_VIDEO_X11_NET_WM_PING "SDL_VIDEO_X11_NET_WM_PING" + +/** + * A variable forcing the visual ID chosen for new X11 windows + */ +#define SDL_HINT_VIDEO_X11_WINDOW_VISUALID "SDL_VIDEO_X11_WINDOW_VISUALID" + +/** + * A no-longer-used variable controlling whether the X11 Xinerama extension + * should be used. + * + * Before SDL 2.0.24, this would let apps and users disable Xinerama support + * on X11. Now SDL never uses Xinerama, and does not check for this hint at + * all. The preprocessor define is left here for source compatibility. + */ +#define SDL_HINT_VIDEO_X11_XINERAMA "SDL_VIDEO_X11_XINERAMA" + +/** + * A variable controlling whether the X11 XRandR extension should be used. + * + * This variable can be set to the following values: + * + * - "0": Disable XRandR + * - "1": Enable XRandR + * + * By default SDL will use XRandR. + */ +#define SDL_HINT_VIDEO_X11_XRANDR "SDL_VIDEO_X11_XRANDR" + +/** + * A no-longer-used variable controlling whether the X11 VidMode extension + * should be used. + * + * Before SDL 2.0.24, this would let apps and users disable XVidMode support + * on X11. Now SDL never uses XVidMode, and does not check for this hint at + * all. The preprocessor define is left here for source compatibility. + */ +#define SDL_HINT_VIDEO_X11_XVIDMODE "SDL_VIDEO_X11_XVIDMODE" + +/** + * Controls how the fact chunk affects the loading of a WAVE file. + * + * The fact chunk stores information about the number of samples of a WAVE + * file. The Standards Update from Microsoft notes that this value can be used + * to 'determine the length of the data in seconds'. This is especially useful + * for compressed formats (for which this is a mandatory chunk) if they + * produce multiple sample frames per block and truncating the block is not + * allowed. The fact chunk can exactly specify how many sample frames there + * should be in this case. + * + * Unfortunately, most application seem to ignore the fact chunk and so SDL + * ignores it by default as well. + * + * This variable can be set to the following values: + * + * - "truncate": Use the number of samples to truncate the wave data if the + * fact chunk is present and valid + * - "strict": Like "truncate", but raise an error if the fact chunk is + * invalid, not present for non-PCM formats, or if the data chunk doesn't + * have that many samples + * - "ignorezero": Like "truncate", but ignore fact chunk if the number of + * samples is zero + * - "ignore": Ignore fact chunk entirely (default) + */ +#define SDL_HINT_WAVE_FACT_CHUNK "SDL_WAVE_FACT_CHUNK" + +/** + * Controls how the size of the RIFF chunk affects the loading of a WAVE file. + * + * The size of the RIFF chunk (which includes all the sub-chunks of the WAVE + * file) is not always reliable. In case the size is wrong, it's possible to + * just ignore it and step through the chunks until a fixed limit is reached. + * + * Note that files that have trailing data unrelated to the WAVE file or + * corrupt files may slow down the loading process without a reliable + * boundary. By default, SDL stops after 10000 chunks to prevent wasting time. + * Use the environment variable SDL_WAVE_CHUNK_LIMIT to adjust this value. + * + * This variable can be set to the following values: + * + * - "force": Always use the RIFF chunk size as a boundary for the chunk + * search + * - "ignorezero": Like "force", but a zero size searches up to 4 GiB + * (default) + * - "ignore": Ignore the RIFF chunk size and always search up to 4 GiB + * - "maximum": Search for chunks until the end of file (not recommended) + */ +#define SDL_HINT_WAVE_RIFF_CHUNK_SIZE "SDL_WAVE_RIFF_CHUNK_SIZE" + +/** + * Controls how a truncated WAVE file is handled. + * + * A WAVE file is considered truncated if any of the chunks are incomplete or + * the data chunk size is not a multiple of the block size. By default, SDL + * decodes until the first incomplete block, as most applications seem to do. + * + * This variable can be set to the following values: + * + * - "verystrict": Raise an error if the file is truncated + * - "strict": Like "verystrict", but the size of the RIFF chunk is ignored + * - "dropframe": Decode until the first incomplete sample frame + * - "dropblock": Decode until the first incomplete block (default) + */ +#define SDL_HINT_WAVE_TRUNCATION "SDL_WAVE_TRUNCATION" + +/** + * Tell SDL not to name threads on Windows with the 0x406D1388 Exception. + * + * The 0x406D1388 Exception is a trick used to inform Visual Studio of a + * thread's name, but it tends to cause problems with other debuggers, and the + * .NET runtime. Note that SDL 2.0.6 and later will still use the (safer) + * SetThreadDescription API, introduced in the Windows 10 Creators Update, if + * available. + * + * The variable can be set to the following values: + * + * - "0": SDL will raise the 0x406D1388 Exception to name threads. This is the + * default behavior of SDL <= 2.0.4. + * - "1": SDL will not raise this exception, and threads will be unnamed. + * (default) This is necessary with .NET languages or debuggers that aren't + * Visual Studio. + */ +#define SDL_HINT_WINDOWS_DISABLE_THREAD_NAMING "SDL_WINDOWS_DISABLE_THREAD_NAMING" + +/** + * Controls whether menus can be opened with their keyboard shortcut + * (Alt+mnemonic). + * + * If the mnemonics are enabled, then menus can be opened by pressing the Alt + * key and the corresponding mnemonic (for example, Alt+F opens the File + * menu). However, in case an invalid mnemonic is pressed, Windows makes an + * audible beep to convey that nothing happened. This is true even if the + * window has no menu at all! + * + * Because most SDL applications don't have menus, and some want to use the + * Alt key for other purposes, SDL disables mnemonics (and the beeping) by + * default. + * + * Note: This also affects keyboard events: with mnemonics enabled, when a + * menu is opened from the keyboard, you will not receive a KEYUP event for + * the mnemonic key, and *might* not receive one for Alt. + * + * This variable can be set to the following values: + * + * - "0": Alt+mnemonic does nothing, no beeping. (default) + * - "1": Alt+mnemonic opens menus, invalid mnemonics produce a beep. + */ +#define SDL_HINT_WINDOWS_ENABLE_MENU_MNEMONICS "SDL_WINDOWS_ENABLE_MENU_MNEMONICS" + +/** + * A variable controlling whether the windows message loop is processed by SDL + * + * This variable can be set to the following values: + * + * - "0": The window message loop is not run + * - "1": The window message loop is processed in SDL_PumpEvents() + * + * By default SDL will process the windows message loop + */ +#define SDL_HINT_WINDOWS_ENABLE_MESSAGELOOP "SDL_WINDOWS_ENABLE_MESSAGELOOP" + +/** + * Force SDL to use Critical Sections for mutexes on Windows. + * + * On Windows 7 and newer, Slim Reader/Writer Locks are available. They offer + * better performance, allocate no kernel resources and use less memory. SDL + * will fall back to Critical Sections on older OS versions or if forced to by + * this hint. + * + * This variable can be set to the following values: + * + * - "0": Use SRW Locks when available. If not, fall back to Critical + * Sections. (default) + * - "1": Force the use of Critical Sections in all cases. + */ +#define SDL_HINT_WINDOWS_FORCE_MUTEX_CRITICAL_SECTIONS "SDL_WINDOWS_FORCE_MUTEX_CRITICAL_SECTIONS" + +/** + * Force SDL to use Kernel Semaphores on Windows. + * + * Kernel Semaphores are inter-process and require a context switch on every + * interaction. On Windows 8 and newer, the WaitOnAddress API is available. + * Using that and atomics to implement semaphores increases performance. SDL + * will fall back to Kernel Objects on older OS versions or if forced to by + * this hint. + * + * This variable can be set to the following values: + * + * - "0": Use Atomics and WaitOnAddress API when available. If not, fall back + * to Kernel Objects. (default) + * - "1": Force the use of Kernel Objects in all cases. + */ +#define SDL_HINT_WINDOWS_FORCE_SEMAPHORE_KERNEL "SDL_WINDOWS_FORCE_SEMAPHORE_KERNEL" + +/** + * A variable to specify custom icon resource id from RC file on Windows + * platform + */ +#define SDL_HINT_WINDOWS_INTRESOURCE_ICON "SDL_WINDOWS_INTRESOURCE_ICON" + +/** + * A variable to specify custom icon resource id from RC file on Windows + * platform + */ +#define SDL_HINT_WINDOWS_INTRESOURCE_ICON_SMALL "SDL_WINDOWS_INTRESOURCE_ICON_SMALL" + +/** + * Tell SDL not to generate window-close events for Alt+F4 on Windows. + * + * The variable can be set to the following values: + * + * - "0": SDL will generate a window-close event when it sees Alt+F4. + * - "1": SDL will only do normal key handling for Alt+F4. + */ +#define SDL_HINT_WINDOWS_NO_CLOSE_ON_ALT_F4 "SDL_WINDOWS_NO_CLOSE_ON_ALT_F4" + +/** + * Use the D3D9Ex API introduced in Windows Vista, instead of normal D3D9. + * + * Direct3D 9Ex contains changes to state management that can eliminate device + * loss errors during scenarios like Alt+Tab or UAC prompts. D3D9Ex may + * require some changes to your application to cope with the new behavior, so + * this is disabled by default. + * + * This hint must be set before initializing the video subsystem. + * + * For more information on Direct3D 9Ex, see: - + * https://docs.microsoft.com/en-us/windows/win32/direct3darticles/graphics-apis-in-windows-vista#direct3d-9ex + * - + * https://docs.microsoft.com/en-us/windows/win32/direct3darticles/direct3d-9ex-improvements + * + * This variable can be set to the following values: + * + * - "0": Use the original Direct3D 9 API (default) + * - "1": Use the Direct3D 9Ex API on Vista and later (and fall back if D3D9Ex + * is unavailable) + */ +#define SDL_HINT_WINDOWS_USE_D3D9EX "SDL_WINDOWS_USE_D3D9EX" + +/** + * Controls whether SDL will declare the process to be DPI aware. + * + * This hint must be set before initializing the video subsystem. + * + * The main purpose of declaring DPI awareness is to disable OS bitmap scaling + * of SDL windows on monitors with a DPI scale factor. + * + * This hint is equivalent to requesting DPI awareness via external means + * (e.g. calling SetProcessDpiAwarenessContext) and does not cause SDL to use + * a virtualized coordinate system, so it will generally give you 1 SDL + * coordinate = 1 pixel even on high-DPI displays. + * + * For more information, see: + * https://docs.microsoft.com/en-us/windows/win32/hidpi/high-dpi-desktop-application-development-on-windows + * + * This variable can be set to the following values: + * + * - "": Do not change the DPI awareness (default). + * - "unaware": Declare the process as DPI unaware. (Windows 8.1 and later). + * - "system": Request system DPI awareness. (Vista and later). + * - "permonitor": Request per-monitor DPI awareness. (Windows 8.1 and later). + * - "permonitorv2": Request per-monitor V2 DPI awareness. (Windows 10, + * version 1607 and later). The most visible difference from "permonitor" is + * that window title bar will be scaled to the visually correct size when + * dragging between monitors with different scale factors. This is the + * preferred DPI awareness level. + * + * If the requested DPI awareness is not available on the currently running + * OS, SDL will try to request the best available match. + */ +#define SDL_HINT_WINDOWS_DPI_AWARENESS "SDL_WINDOWS_DPI_AWARENESS" + +/** + * Uses DPI-scaled points as the SDL coordinate system on Windows. + * + * This changes the SDL coordinate system units to be DPI-scaled points, + * rather than pixels everywhere. This means windows will be appropriately + * sized, even when created on high-DPI displays with scaling. + * + * e.g. requesting a 640x480 window from SDL, on a display with 125% scaling + * in Windows display settings, will create a window with an 800x600 client + * area (in pixels). + * + * Setting this to "1" implicitly requests process DPI awareness (setting + * SDL_WINDOWS_DPI_AWARENESS is unnecessary), and forces + * SDL_WINDOW_ALLOW_HIGHDPI on all windows. + * + * This variable can be set to the following values: + * + * - "0": SDL coordinates equal Windows coordinates. No automatic window + * resizing when dragging between monitors with different scale factors + * (unless this is performed by Windows itself, which is the case when the + * process is DPI unaware). + * - "1": SDL coordinates are in DPI-scaled points. Automatically resize + * windows as needed on displays with non-100% scale factors. + */ +#define SDL_HINT_WINDOWS_DPI_SCALING "SDL_WINDOWS_DPI_SCALING" + +/** + * A variable controlling whether the window frame and title bar are + * interactive when the cursor is hidden + * + * This variable can be set to the following values: + * + * - "0": The window frame is not interactive when the cursor is hidden (no + * move, resize, etc) + * - "1": The window frame is interactive when the cursor is hidden + * + * By default SDL will allow interaction with the window frame when the cursor + * is hidden + */ +#define SDL_HINT_WINDOW_FRAME_USABLE_WHILE_CURSOR_HIDDEN "SDL_WINDOW_FRAME_USABLE_WHILE_CURSOR_HIDDEN" + +/** + * A variable controlling whether the window is activated when the + * SDL_ShowWindow function is called + * + * This variable can be set to the following values: + * + * - "0": The window is activated when the SDL_ShowWindow function is called + * - "1": The window is not activated when the SDL_ShowWindow function is + * called + * + * By default SDL will activate the window when the SDL_ShowWindow function is + * called + */ +#define SDL_HINT_WINDOW_NO_ACTIVATION_WHEN_SHOWN "SDL_WINDOW_NO_ACTIVATION_WHEN_SHOWN" + +/** Allows back-button-press events on Windows Phone to be marked as handled + * + * Windows Phone devices typically feature a Back button. When pressed, + * the OS will emit back-button-press events, which apps are expected to + * handle in an appropriate manner. If apps do not explicitly mark these + * events as 'Handled', then the OS will invoke its default behavior for + * unhandled back-button-press events, which on Windows Phone 8 and 8.1 is to + * terminate the app (and attempt to switch to the previous app, or to the + * device's home screen). + * + * Setting the SDL_HINT_WINRT_HANDLE_BACK_BUTTON hint to "1" will cause SDL + * to mark back-button-press events as Handled, if and when one is sent to + * the app. + * + * Internally, Windows Phone sends back button events as parameters to + * special back-button-press callback functions. Apps that need to respond + * to back-button-press events are expected to register one or more + * callback functions for such, shortly after being launched (during the + * app's initialization phase). After the back button is pressed, the OS + * will invoke these callbacks. If the app's callback(s) do not explicitly + * mark the event as handled by the time they return, or if the app never + * registers one of these callback, the OS will consider the event + * un-handled, and it will apply its default back button behavior (terminate + * the app). + * + * SDL registers its own back-button-press callback with the Windows Phone + * OS. This callback will emit a pair of SDL key-press events (SDL_KEYDOWN + * and SDL_KEYUP), each with a scancode of SDL_SCANCODE_AC_BACK, after which + * it will check the contents of the hint, SDL_HINT_WINRT_HANDLE_BACK_BUTTON. + * If the hint's value is set to "1", the back button event's Handled + * property will get set to 'true'. If the hint's value is set to something + * else, or if it is unset, SDL will leave the event's Handled property + * alone. (By default, the OS sets this property to 'false', to note.) + * + * SDL apps can either set SDL_HINT_WINRT_HANDLE_BACK_BUTTON well before a + * back button is pressed, or can set it in direct-response to a back button + * being pressed. + * + * In order to get notified when a back button is pressed, SDL apps should + * register a callback function with SDL_AddEventWatch(), and have it listen + * for SDL_KEYDOWN events that have a scancode of SDL_SCANCODE_AC_BACK. + * (Alternatively, SDL_KEYUP events can be listened-for. Listening for + * either event type is suitable.) Any value of SDL_HINT_WINRT_HANDLE_BACK_BUTTON + * set by such a callback, will be applied to the OS' current + * back-button-press event. + * + * More details on back button behavior in Windows Phone apps can be found + * at the following page, on Microsoft's developer site: + * + * http://msdn.microsoft.com/en-us/library/windowsphone/develop/jj247550(v=vs.105).aspx + */ +#define SDL_HINT_WINRT_HANDLE_BACK_BUTTON "SDL_WINRT_HANDLE_BACK_BUTTON" + +/** Label text for a WinRT app's privacy policy link + * + * Network-enabled WinRT apps must include a privacy policy. On Windows 8, 8.1, and RT, + * Microsoft mandates that this policy be available via the Windows Settings charm. + * SDL provides code to add a link there, with its label text being set via the + * optional hint, SDL_HINT_WINRT_PRIVACY_POLICY_LABEL. + * + * Please note that a privacy policy's contents are not set via this hint. A separate + * hint, SDL_HINT_WINRT_PRIVACY_POLICY_URL, is used to link to the actual text of the + * policy. + * + * The contents of this hint should be encoded as a UTF8 string. + * + * The default value is "Privacy Policy". This hint should only be set during app + * initialization, preferably before any calls to SDL_Init(). + * + * For additional information on linking to a privacy policy, see the documentation for + * SDL_HINT_WINRT_PRIVACY_POLICY_URL. + */ +#define SDL_HINT_WINRT_PRIVACY_POLICY_LABEL "SDL_WINRT_PRIVACY_POLICY_LABEL" + +/** + * A URL to a WinRT app's privacy policy + * + * All network-enabled WinRT apps must make a privacy policy available to its + * users. On Windows 8, 8.1, and RT, Microsoft mandates that this policy be be + * available in the Windows Settings charm, as accessed from within the app. + * SDL provides code to add a URL-based link there, which can point to the + * app's privacy policy. + * + * To setup a URL to an app's privacy policy, set + * SDL_HINT_WINRT_PRIVACY_POLICY_URL before calling any SDL_Init() functions. + * The contents of the hint should be a valid URL. For example, + * "http://www.example.com". + * + * The default value is "", which will prevent SDL from adding a privacy + * policy link to the Settings charm. This hint should only be set during app + * init. + * + * The label text of an app's "Privacy Policy" link may be customized via + * another hint, SDL_HINT_WINRT_PRIVACY_POLICY_LABEL. + * + * Please note that on Windows Phone, Microsoft does not provide standard UI + * for displaying a privacy policy link, and as such, + * SDL_HINT_WINRT_PRIVACY_POLICY_URL will not get used on that platform. + * Network-enabled phone apps should display their privacy policy through some + * other, in-app means. + */ +#define SDL_HINT_WINRT_PRIVACY_POLICY_URL "SDL_WINRT_PRIVACY_POLICY_URL" + +/** + * Mark X11 windows as override-redirect. + * + * If set, this _might_ increase framerate at the expense of the desktop not + * working as expected. Override-redirect windows aren't noticed by the window + * manager at all. + * + * You should probably only use this for fullscreen windows, and you probably + * shouldn't even use it for that. But it's here if you want to try! + */ +#define SDL_HINT_X11_FORCE_OVERRIDE_REDIRECT "SDL_X11_FORCE_OVERRIDE_REDIRECT" + +/** + * A variable that lets you disable the detection and use of Xinput gamepad + * devices + * + * The variable can be set to the following values: + * + * - "0": Disable XInput detection (only uses direct input) + * - "1": Enable XInput detection (the default) + */ +#define SDL_HINT_XINPUT_ENABLED "SDL_XINPUT_ENABLED" + +/** + * A variable that lets you disable the detection and use of DirectInput + * gamepad devices + * + * The variable can be set to the following values: + * + * - "0": Disable DirectInput detection (only uses XInput) + * - "1": Enable DirectInput detection (the default) + */ +#define SDL_HINT_DIRECTINPUT_ENABLED "SDL_DIRECTINPUT_ENABLED" + +/** + * A variable that causes SDL to use the old axis and button mapping for + * XInput devices. + * + * This hint is for backwards compatibility only and will be removed in SDL + * 2.1 + * + * The default value is "0". This hint must be set before SDL_Init() + */ +#define SDL_HINT_XINPUT_USE_OLD_JOYSTICK_MAPPING "SDL_XINPUT_USE_OLD_JOYSTICK_MAPPING" + +/** + * A variable that causes SDL to not ignore audio "monitors" + * + * This is currently only used for PulseAudio and ignored elsewhere. + * + * By default, SDL ignores audio devices that aren't associated with physical + * hardware. Changing this hint to "1" will expose anything SDL sees that + * appears to be an audio source or sink. This will add "devices" to the list + * that the user probably doesn't want or need, but it can be useful in + * scenarios where you want to hook up SDL to some sort of virtual device, + * etc. + * + * The default value is "0". This hint must be set before SDL_Init(). + * + * This hint is available since SDL 2.0.16. Before then, virtual devices are + * always ignored. + */ +#define SDL_HINT_AUDIO_INCLUDE_MONITORS "SDL_AUDIO_INCLUDE_MONITORS" + +/** + * A variable that forces X11 windows to create as a custom type. + * + * This is currently only used for X11 and ignored elsewhere. + * + * During SDL_CreateWindow, SDL uses the _NET_WM_WINDOW_TYPE X11 property to + * report to the window manager the type of window it wants to create. This + * might be set to various things if SDL_WINDOW_TOOLTIP or + * SDL_WINDOW_POPUP_MENU, etc, were specified. For "normal" windows that + * haven't set a specific type, this hint can be used to specify a custom + * type. For example, a dock window might set this to + * "_NET_WM_WINDOW_TYPE_DOCK". + * + * If not set or set to "", this hint is ignored. This hint must be set before + * the SDL_CreateWindow() call that it is intended to affect. + * + * This hint is available since SDL 2.0.22. + */ +#define SDL_HINT_X11_WINDOW_TYPE "SDL_X11_WINDOW_TYPE" + +/** + * A variable that decides whether to send SDL_QUIT when closing the final + * window. + * + * By default, SDL sends an SDL_QUIT event when there is only one window and + * it receives an SDL_WINDOWEVENT_CLOSE event, under the assumption most apps + * would also take the loss of this window as a signal to terminate the + * program. + * + * However, it's not unreasonable in some cases to have the program continue + * to live on, perhaps to create new windows later. + * + * Changing this hint to "0" will cause SDL to not send an SDL_QUIT event when + * the final window is requesting to close. Note that in this case, there are + * still other legitimate reasons one might get an SDL_QUIT event: choosing + * "Quit" from the macOS menu bar, sending a SIGINT (ctrl-c) on Unix, etc. + * + * The default value is "1". This hint can be changed at any time. + * + * This hint is available since SDL 2.0.22. Before then, you always get an + * SDL_QUIT event when closing the final window. + */ +#define SDL_HINT_QUIT_ON_LAST_WINDOW_CLOSE "SDL_QUIT_ON_LAST_WINDOW_CLOSE" + + +/** + * A variable that decides what video backend to use. + * + * By default, SDL will try all available video backends in a reasonable order + * until it finds one that can work, but this hint allows the app or user to + * force a specific target, such as "x11" if, say, you are on Wayland but want + * to try talking to the X server instead. + * + * This functionality has existed since SDL 2.0.0 (indeed, before that) but + * before 2.0.22 this was an environment variable only. In 2.0.22, it was + * upgraded to a full SDL hint, so you can set the environment variable as + * usual or programatically set the hint with SDL_SetHint, which won't + * propagate to child processes. + * + * The default value is unset, in which case SDL will try to figure out the + * best video backend on your behalf. This hint needs to be set before + * SDL_Init() is called to be useful. + * + * This hint is available since SDL 2.0.22. Before then, you could set the + * environment variable to get the same effect. + */ +#define SDL_HINT_VIDEODRIVER "SDL_VIDEODRIVER" + +/** + * A variable that decides what audio backend to use. + * + * By default, SDL will try all available audio backends in a reasonable order + * until it finds one that can work, but this hint allows the app or user to + * force a specific target, such as "alsa" if, say, you are on PulseAudio but + * want to try talking to the lower level instead. + * + * This functionality has existed since SDL 2.0.0 (indeed, before that) but + * before 2.0.22 this was an environment variable only. In 2.0.22, it was + * upgraded to a full SDL hint, so you can set the environment variable as + * usual or programatically set the hint with SDL_SetHint, which won't + * propagate to child processes. + * + * The default value is unset, in which case SDL will try to figure out the + * best audio backend on your behalf. This hint needs to be set before + * SDL_Init() is called to be useful. + * + * This hint is available since SDL 2.0.22. Before then, you could set the + * environment variable to get the same effect. + */ +#define SDL_HINT_AUDIODRIVER "SDL_AUDIODRIVER" + +/** + * A variable that decides what KMSDRM device to use. + * + * Internally, SDL might open something like "/dev/dri/cardNN" to access + * KMSDRM functionality, where "NN" is a device index number. + * + * SDL makes a guess at the best index to use (usually zero), but the app or + * user can set this hint to a number between 0 and 99 to force selection. + * + * This hint is available since SDL 2.24.0. + */ +#define SDL_HINT_KMSDRM_DEVICE_INDEX "SDL_KMSDRM_DEVICE_INDEX" + + +/** + * A variable that treats trackpads as touch devices. + * + * On macOS (and possibly other platforms in the future), SDL will report + * touches on a trackpad as mouse input, which is generally what users expect + * from this device; however, these are often actually full multitouch-capable + * touch devices, so it might be preferable to some apps to treat them as + * such. + * + * Setting this hint to true will make the trackpad input report as a + * multitouch device instead of a mouse. The default is false. + * + * Note that most platforms don't support this hint. As of 2.24.0, it only + * supports MacBooks' trackpads on macOS. Others may follow later. + * + * This hint is checked during SDL_Init and can not be changed after. + * + * This hint is available since SDL 2.24.0. + */ +#define SDL_HINT_TRACKPAD_IS_TOUCH_ONLY "SDL_TRACKPAD_IS_TOUCH_ONLY" + +/** + * Cause SDL to call dbus_shutdown() on quit. + * + * This is useful as a debug tool to validate memory leaks, but shouldn't ever + * be set in production applications, as other libraries used by the + * application might use dbus under the hood and this cause cause crashes if + * they continue after SDL_Quit(). + * + * This variable can be set to the following values: + * + * - "0": SDL will not call dbus_shutdown() on quit (default) + * - "1": SDL will call dbus_shutdown() on quit + * + * This hint is available since SDL 2.30.0. + */ +#define SDL_HINT_SHUTDOWN_DBUS_ON_QUIT "SDL_SHUTDOWN_DBUS_ON_QUIT" + +/** + * Specify if SDL_RWFromFile should use the resource dir on Apple platforms. + * + * SDL2 has always done this on Apple platforms, but it can be surprising to + * try opening a path to discover that SDL adjusts the path to elsewhere, so + * this hint allows that behavior to be disabled. + * + * If running from a App Bundle, this will be MyApp.app/Contents/Resources. If + * running as a normal Unix-like process, this will be the directory where the + * running binary lives. Setting this hint to 0 avoids this and just uses the + * requested path as-is. + * + * This variable can be set to the following values: + * + * - "0": SDL will not use the app resource directory. + * - "1": SDL will use the app's resource directory (default). + * + * This hint is available since SDL 2.32.0. + */ +#define SDL_HINT_APPLE_RWFROMFILE_USE_RESOURCES "SDL_APPLE_RWFROMFILE_USE_RESOURCES" + + +/** + * An enumeration of hint priorities + */ +typedef enum SDL_HintPriority +{ + SDL_HINT_DEFAULT, + SDL_HINT_NORMAL, + SDL_HINT_OVERRIDE +} SDL_HintPriority; + + +/** + * Set a hint with a specific priority. + * + * The priority controls the behavior when setting a hint that already has a + * value. Hints will replace existing hints of their priority and lower. + * Environment variables are considered to have override priority. + * + * \param name the hint to set. + * \param value the value of the hint variable. + * \param priority the SDL_HintPriority level for the hint. + * \returns SDL_TRUE if the hint was set, SDL_FALSE otherwise. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetHint + * \sa SDL_SetHint + */ +extern DECLSPEC SDL_bool SDLCALL SDL_SetHintWithPriority(const char *name, + const char *value, + SDL_HintPriority priority); + +/** + * Set a hint with normal priority. + * + * Hints will not be set if there is an existing override hint or environment + * variable that takes precedence. You can use SDL_SetHintWithPriority() to + * set the hint with override priority instead. + * + * \param name the hint to set. + * \param value the value of the hint variable. + * \returns SDL_TRUE if the hint was set, SDL_FALSE otherwise. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetHint + * \sa SDL_SetHintWithPriority + */ +extern DECLSPEC SDL_bool SDLCALL SDL_SetHint(const char *name, + const char *value); + +/** + * Reset a hint to the default value. + * + * This will reset a hint to the value of the environment variable, or NULL if + * the environment isn't set. Callbacks will be called normally with this + * change. + * + * \param name the hint to set. + * \returns SDL_TRUE if the hint was set, SDL_FALSE otherwise. + * + * \since This function is available since SDL 2.24.0. + * + * \sa SDL_GetHint + * \sa SDL_SetHint + */ +extern DECLSPEC SDL_bool SDLCALL SDL_ResetHint(const char *name); + +/** + * Reset all hints to the default values. + * + * This will reset all hints to the value of the associated environment + * variable, or NULL if the environment isn't set. Callbacks will be called + * normally with this change. + * + * \since This function is available since SDL 2.26.0. + * + * \sa SDL_GetHint + * \sa SDL_SetHint + * \sa SDL_ResetHint + */ +extern DECLSPEC void SDLCALL SDL_ResetHints(void); + +/** + * Get the value of a hint. + * + * \param name the hint to query. + * \returns the string value of a hint or NULL if the hint isn't set. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_SetHint + * \sa SDL_SetHintWithPriority + */ +extern DECLSPEC const char * SDLCALL SDL_GetHint(const char *name); + +/** + * Get the boolean value of a hint variable. + * + * \param name the name of the hint to get the boolean value from. + * \param default_value the value to return if the hint does not exist. + * \returns the boolean value of a hint or the provided default value if the + * hint does not exist. + * + * \since This function is available since SDL 2.0.5. + * + * \sa SDL_GetHint + * \sa SDL_SetHint + */ +extern DECLSPEC SDL_bool SDLCALL SDL_GetHintBoolean(const char *name, SDL_bool default_value); + +/** + * Type definition of the hint callback function. + * + * \param userdata what was passed as `userdata` to SDL_AddHintCallback(). + * \param name what was passed as `name` to SDL_AddHintCallback(). + * \param oldValue the previous hint value. + * \param newValue the new value hint is to be set to. + */ +typedef void (SDLCALL *SDL_HintCallback)(void *userdata, const char *name, const char *oldValue, const char *newValue); + +/** + * Add a function to watch a particular hint. + * + * \param name the hint to watch. + * \param callback An SDL_HintCallback function that will be called when the + * hint value changes. + * \param userdata a pointer to pass to the callback function. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_DelHintCallback + */ +extern DECLSPEC void SDLCALL SDL_AddHintCallback(const char *name, + SDL_HintCallback callback, + void *userdata); + +/** + * Remove a function watching a particular hint. + * + * \param name the hint being watched. + * \param callback An SDL_HintCallback function that will be called when the + * hint value changes. + * \param userdata a pointer being passed to the callback function. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_AddHintCallback + */ +extern DECLSPEC void SDLCALL SDL_DelHintCallback(const char *name, + SDL_HintCallback callback, + void *userdata); + +/** + * Clear all hints. + * + * This function is automatically called during SDL_Quit(), and deletes all + * callbacks without calling them and frees all memory associated with hints. + * If you're calling this from application code you probably want to call + * SDL_ResetHints() instead. + * + * This function will be removed from the API the next time we rev the ABI. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_ResetHints + */ +extern DECLSPEC void SDLCALL SDL_ClearHints(void); + + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include "close_code.h" + +#endif /* SDL_hints_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/third_party/tlRender-install-Release/include/SDL2/SDL_joystick.h b/third_party/tlRender-install-Release/include/SDL2/SDL_joystick.h new file mode 100644 index 00000000..668db5e3 --- /dev/null +++ b/third_party/tlRender-install-Release/include/SDL2/SDL_joystick.h @@ -0,0 +1,1088 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2025 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +/** + * # CategoryJoystick + * + * Include file for SDL joystick event handling + * + * The term "device_index" identifies currently plugged in joystick devices + * between 0 and SDL_NumJoysticks(), with the exact joystick behind a + * device_index changing as joysticks are plugged and unplugged. + * + * The term "instance_id" is the current instantiation of a joystick device in + * the system, if the joystick is removed and then re-inserted then it will + * get a new instance_id, instance_id's are monotonically increasing + * identifiers of a joystick plugged in. + * + * The term "player_index" is the number assigned to a player on a specific + * controller. For XInput controllers this returns the XInput user index. Many + * joysticks will not be able to supply this information. + * + * The term JoystickGUID is a stable 128-bit identifier for a joystick device + * that does not change over time, it identifies class of the device (a X360 + * wired controller for example). This identifier is platform dependent. + */ + +#ifndef SDL_joystick_h_ +#define SDL_joystick_h_ + +#include "SDL_stdinc.h" +#include "SDL_error.h" +#include "SDL_guid.h" +#include "SDL_mutex.h" + +#include "begin_code.h" +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \file SDL_joystick.h + * + * In order to use these functions, SDL_Init() must have been called + * with the SDL_INIT_JOYSTICK flag. This causes SDL to scan the system + * for joysticks, and load appropriate drivers. + * + * If you would like to receive joystick updates while the application + * is in the background, you should set the following hint before calling + * SDL_Init(): SDL_HINT_JOYSTICK_ALLOW_BACKGROUND_EVENTS + */ + +/** + * The joystick structure used to identify an SDL joystick + */ +#ifdef SDL_THREAD_SAFETY_ANALYSIS +extern SDL_mutex *SDL_joystick_lock; +#endif +struct _SDL_Joystick; +typedef struct _SDL_Joystick SDL_Joystick; + +/** + * A structure that encodes the stable unique id for a joystick device. + * + * This is just a standard SDL_GUID by a different name. + */ +typedef SDL_GUID SDL_JoystickGUID; + +/** + * This is a unique ID for a joystick for the time it is connected to the + * system, and is never reused for the lifetime of the application. + * + * If the joystick is disconnected and reconnected, it will get a new ID. + * + * The ID value starts at 0 and increments from there. The value -1 is an + * invalid ID. + */ +typedef Sint32 SDL_JoystickID; + +typedef enum +{ + SDL_JOYSTICK_TYPE_UNKNOWN, + SDL_JOYSTICK_TYPE_GAMECONTROLLER, + SDL_JOYSTICK_TYPE_WHEEL, + SDL_JOYSTICK_TYPE_ARCADE_STICK, + SDL_JOYSTICK_TYPE_FLIGHT_STICK, + SDL_JOYSTICK_TYPE_DANCE_PAD, + SDL_JOYSTICK_TYPE_GUITAR, + SDL_JOYSTICK_TYPE_DRUM_KIT, + SDL_JOYSTICK_TYPE_ARCADE_PAD, + SDL_JOYSTICK_TYPE_THROTTLE +} SDL_JoystickType; + +typedef enum +{ + SDL_JOYSTICK_POWER_UNKNOWN = -1, + SDL_JOYSTICK_POWER_EMPTY, /* <= 5% */ + SDL_JOYSTICK_POWER_LOW, /* <= 20% */ + SDL_JOYSTICK_POWER_MEDIUM, /* <= 70% */ + SDL_JOYSTICK_POWER_FULL, /* <= 100% */ + SDL_JOYSTICK_POWER_WIRED, + SDL_JOYSTICK_POWER_MAX +} SDL_JoystickPowerLevel; + +/* Set max recognized G-force from accelerometer + See src/joystick/uikit/SDL_sysjoystick.m for notes on why this is needed + */ +#define SDL_IPHONE_MAX_GFORCE 5.0 + + +/* Function prototypes */ + +/** + * Locking for multi-threaded access to the joystick API + * + * If you are using the joystick API or handling events from multiple threads + * you should use these locking functions to protect access to the joysticks. + * + * In particular, you are guaranteed that the joystick list won't change, so + * the API functions that take a joystick index will be valid, and joystick + * and game controller events will not be delivered. + * + * As of SDL 2.26.0, you can take the joystick lock around reinitializing the + * joystick subsystem, to prevent other threads from seeing joysticks in an + * uninitialized state. However, all open joysticks will be closed and SDL + * functions called with them will fail. + * + * \since This function is available since SDL 2.0.7. + */ +extern DECLSPEC void SDLCALL SDL_LockJoysticks(void) SDL_ACQUIRE(SDL_joystick_lock); + + +/** + * Unlocking for multi-threaded access to the joystick API + * + * If you are using the joystick API or handling events from multiple threads + * you should use these locking functions to protect access to the joysticks. + * + * In particular, you are guaranteed that the joystick list won't change, so + * the API functions that take a joystick index will be valid, and joystick + * and game controller events will not be delivered. + * + * \since This function is available since SDL 2.0.7. + */ +extern DECLSPEC void SDLCALL SDL_UnlockJoysticks(void) SDL_RELEASE(SDL_joystick_lock); + +/** + * Count the number of joysticks attached to the system. + * + * \returns the number of attached joysticks on success or a negative error + * code on failure; call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_JoystickName + * \sa SDL_JoystickPath + * \sa SDL_JoystickOpen + */ +extern DECLSPEC int SDLCALL SDL_NumJoysticks(void); + +/** + * Get the implementation dependent name of a joystick. + * + * This can be called before any joysticks are opened. + * + * \param device_index the index of the joystick to query (the N'th joystick + * on the system). + * \returns the name of the selected joystick. If no name can be found, this + * function returns NULL; call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_JoystickName + * \sa SDL_JoystickOpen + */ +extern DECLSPEC const char *SDLCALL SDL_JoystickNameForIndex(int device_index); + +/** + * Get the implementation dependent path of a joystick. + * + * This can be called before any joysticks are opened. + * + * \param device_index the index of the joystick to query (the N'th joystick + * on the system). + * \returns the path of the selected joystick. If no path can be found, this + * function returns NULL; call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.24.0. + * + * \sa SDL_JoystickPath + * \sa SDL_JoystickOpen + */ +extern DECLSPEC const char *SDLCALL SDL_JoystickPathForIndex(int device_index); + +/** + * Get the player index of a joystick, or -1 if it's not available This can be + * called before any joysticks are opened. + * + * \since This function is available since SDL 2.0.9. + */ +extern DECLSPEC int SDLCALL SDL_JoystickGetDevicePlayerIndex(int device_index); + +/** + * Get the implementation-dependent GUID for the joystick at a given device + * index. + * + * This function can be called before any joysticks are opened. + * + * \param device_index the index of the joystick to query (the N'th joystick + * on the system. + * \returns the GUID of the selected joystick. If called on an invalid index, + * this function returns a zero GUID. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_JoystickGetGUID + * \sa SDL_JoystickGetGUIDString + */ +extern DECLSPEC SDL_JoystickGUID SDLCALL SDL_JoystickGetDeviceGUID(int device_index); + +/** + * Get the USB vendor ID of a joystick, if available. + * + * This can be called before any joysticks are opened. If the vendor ID isn't + * available this function returns 0. + * + * \param device_index the index of the joystick to query (the N'th joystick + * on the system. + * \returns the USB vendor ID of the selected joystick. If called on an + * invalid index, this function returns zero. + * + * \since This function is available since SDL 2.0.6. + */ +extern DECLSPEC Uint16 SDLCALL SDL_JoystickGetDeviceVendor(int device_index); + +/** + * Get the USB product ID of a joystick, if available. + * + * This can be called before any joysticks are opened. If the product ID isn't + * available this function returns 0. + * + * \param device_index the index of the joystick to query (the N'th joystick + * on the system. + * \returns the USB product ID of the selected joystick. If called on an + * invalid index, this function returns zero. + * + * \since This function is available since SDL 2.0.6. + */ +extern DECLSPEC Uint16 SDLCALL SDL_JoystickGetDeviceProduct(int device_index); + +/** + * Get the product version of a joystick, if available. + * + * This can be called before any joysticks are opened. If the product version + * isn't available this function returns 0. + * + * \param device_index the index of the joystick to query (the N'th joystick + * on the system. + * \returns the product version of the selected joystick. If called on an + * invalid index, this function returns zero. + * + * \since This function is available since SDL 2.0.6. + */ +extern DECLSPEC Uint16 SDLCALL SDL_JoystickGetDeviceProductVersion(int device_index); + +/** + * Get the type of a joystick, if available. + * + * This can be called before any joysticks are opened. + * + * \param device_index the index of the joystick to query (the N'th joystick + * on the system. + * \returns the SDL_JoystickType of the selected joystick. If called on an + * invalid index, this function returns `SDL_JOYSTICK_TYPE_UNKNOWN`. + * + * \since This function is available since SDL 2.0.6. + */ +extern DECLSPEC SDL_JoystickType SDLCALL SDL_JoystickGetDeviceType(int device_index); + +/** + * Get the instance ID of a joystick. + * + * This can be called before any joysticks are opened. + * + * \param device_index the index of the joystick to query (the N'th joystick + * on the system. + * \returns the instance id of the selected joystick. If called on an invalid + * index, this function returns -1. + * + * \since This function is available since SDL 2.0.6. + */ +extern DECLSPEC SDL_JoystickID SDLCALL SDL_JoystickGetDeviceInstanceID(int device_index); + +/** + * Open a joystick for use. + * + * The `device_index` argument refers to the N'th joystick presently + * recognized by SDL on the system. It is **NOT** the same as the instance ID + * used to identify the joystick in future events. See + * SDL_JoystickInstanceID() for more details about instance IDs. + * + * The joystick subsystem must be initialized before a joystick can be opened + * for use. + * + * \param device_index the index of the joystick to query. + * \returns a joystick identifier or NULL if an error occurred; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_JoystickClose + * \sa SDL_JoystickInstanceID + */ +extern DECLSPEC SDL_Joystick *SDLCALL SDL_JoystickOpen(int device_index); + +/** + * Get the SDL_Joystick associated with an instance id. + * + * \param instance_id the instance id to get the SDL_Joystick for. + * \returns an SDL_Joystick on success or NULL on failure; call SDL_GetError() + * for more information. + * + * \since This function is available since SDL 2.0.4. + */ +extern DECLSPEC SDL_Joystick *SDLCALL SDL_JoystickFromInstanceID(SDL_JoystickID instance_id); + +/** + * Get the SDL_Joystick associated with a player index. + * + * \param player_index the player index to get the SDL_Joystick for. + * \returns an SDL_Joystick on success or NULL on failure; call SDL_GetError() + * for more information. + * + * \since This function is available since SDL 2.0.12. + */ +extern DECLSPEC SDL_Joystick *SDLCALL SDL_JoystickFromPlayerIndex(int player_index); + +/** + * Attach a new virtual joystick. + * + * \returns the joystick's device index, or -1 if an error occurred. + * + * \since This function is available since SDL 2.0.14. + */ +extern DECLSPEC int SDLCALL SDL_JoystickAttachVirtual(SDL_JoystickType type, + int naxes, + int nbuttons, + int nhats); + +/** + * The structure that defines an extended virtual joystick description + * + * The caller must zero the structure and then initialize the version with + * `SDL_VIRTUAL_JOYSTICK_DESC_VERSION` before passing it to + * SDL_JoystickAttachVirtualEx() All other elements of this structure are + * optional and can be left 0. + * + * \sa SDL_JoystickAttachVirtualEx + */ +typedef struct SDL_VirtualJoystickDesc +{ + Uint16 version; /**< `SDL_VIRTUAL_JOYSTICK_DESC_VERSION` */ + Uint16 type; /**< `SDL_JoystickType` */ + Uint16 naxes; /**< the number of axes on this joystick */ + Uint16 nbuttons; /**< the number of buttons on this joystick */ + Uint16 nhats; /**< the number of hats on this joystick */ + Uint16 vendor_id; /**< the USB vendor ID of this joystick */ + Uint16 product_id; /**< the USB product ID of this joystick */ + Uint16 padding; /**< unused */ + Uint32 button_mask; /**< A mask of which buttons are valid for this controller + e.g. (1 << SDL_CONTROLLER_BUTTON_A) */ + Uint32 axis_mask; /**< A mask of which axes are valid for this controller + e.g. (1 << SDL_CONTROLLER_AXIS_LEFTX) */ + const char *name; /**< the name of the joystick */ + + void *userdata; /**< User data pointer passed to callbacks */ + void (SDLCALL *Update)(void *userdata); /**< Called when the joystick state should be updated */ + void (SDLCALL *SetPlayerIndex)(void *userdata, int player_index); /**< Called when the player index is set */ + int (SDLCALL *Rumble)(void *userdata, Uint16 low_frequency_rumble, Uint16 high_frequency_rumble); /**< Implements SDL_JoystickRumble() */ + int (SDLCALL *RumbleTriggers)(void *userdata, Uint16 left_rumble, Uint16 right_rumble); /**< Implements SDL_JoystickRumbleTriggers() */ + int (SDLCALL *SetLED)(void *userdata, Uint8 red, Uint8 green, Uint8 blue); /**< Implements SDL_JoystickSetLED() */ + int (SDLCALL *SendEffect)(void *userdata, const void *data, int size); /**< Implements SDL_JoystickSendEffect() */ + +} SDL_VirtualJoystickDesc; + +/** + * The current version of the SDL_VirtualJoystickDesc structure + */ +#define SDL_VIRTUAL_JOYSTICK_DESC_VERSION 1 + +/** + * Attach a new virtual joystick with extended properties. + * + * \returns the joystick's device index, or -1 if an error occurred. + * + * \since This function is available since SDL 2.24.0. + */ +extern DECLSPEC int SDLCALL SDL_JoystickAttachVirtualEx(const SDL_VirtualJoystickDesc *desc); + +/** + * Detach a virtual joystick. + * + * \param device_index a value previously returned from + * SDL_JoystickAttachVirtual(). + * \returns 0 on success, or -1 if an error occurred. + * + * \since This function is available since SDL 2.0.14. + */ +extern DECLSPEC int SDLCALL SDL_JoystickDetachVirtual(int device_index); + +/** + * Query whether or not the joystick at a given device index is virtual. + * + * \param device_index a joystick device index. + * \returns SDL_TRUE if the joystick is virtual, SDL_FALSE otherwise. + * + * \since This function is available since SDL 2.0.14. + */ +extern DECLSPEC SDL_bool SDLCALL SDL_JoystickIsVirtual(int device_index); + +/** + * Set values on an opened, virtual-joystick's axis. + * + * Please note that values set here will not be applied until the next call to + * SDL_JoystickUpdate, which can either be called directly, or can be called + * indirectly through various other SDL APIs, including, but not limited to + * the following: SDL_PollEvent, SDL_PumpEvents, SDL_WaitEventTimeout, + * SDL_WaitEvent. + * + * Note that when sending trigger axes, you should scale the value to the full + * range of Sint16. For example, a trigger at rest would have the value of + * `SDL_JOYSTICK_AXIS_MIN`. + * + * \param joystick the virtual joystick on which to set state. + * \param axis the specific axis on the virtual joystick to set. + * \param value the new value for the specified axis. + * \returns 0 on success, -1 on error. + * + * \since This function is available since SDL 2.0.14. + */ +extern DECLSPEC int SDLCALL SDL_JoystickSetVirtualAxis(SDL_Joystick *joystick, int axis, Sint16 value); + +/** + * Set values on an opened, virtual-joystick's button. + * + * Please note that values set here will not be applied until the next call to + * SDL_JoystickUpdate, which can either be called directly, or can be called + * indirectly through various other SDL APIs, including, but not limited to + * the following: SDL_PollEvent, SDL_PumpEvents, SDL_WaitEventTimeout, + * SDL_WaitEvent. + * + * \param joystick the virtual joystick on which to set state. + * \param button the specific button on the virtual joystick to set. + * \param value the new value for the specified button. + * \returns 0 on success, -1 on error. + * + * \since This function is available since SDL 2.0.14. + */ +extern DECLSPEC int SDLCALL SDL_JoystickSetVirtualButton(SDL_Joystick *joystick, int button, Uint8 value); + +/** + * Set values on an opened, virtual-joystick's hat. + * + * Please note that values set here will not be applied until the next call to + * SDL_JoystickUpdate, which can either be called directly, or can be called + * indirectly through various other SDL APIs, including, but not limited to + * the following: SDL_PollEvent, SDL_PumpEvents, SDL_WaitEventTimeout, + * SDL_WaitEvent. + * + * \param joystick the virtual joystick on which to set state. + * \param hat the specific hat on the virtual joystick to set. + * \param value the new value for the specified hat. + * \returns 0 on success, -1 on error. + * + * \since This function is available since SDL 2.0.14. + */ +extern DECLSPEC int SDLCALL SDL_JoystickSetVirtualHat(SDL_Joystick *joystick, int hat, Uint8 value); + +/** + * Get the implementation dependent name of a joystick. + * + * \param joystick the SDL_Joystick obtained from SDL_JoystickOpen(). + * \returns the name of the selected joystick. If no name can be found, this + * function returns NULL; call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_JoystickNameForIndex + * \sa SDL_JoystickOpen + */ +extern DECLSPEC const char *SDLCALL SDL_JoystickName(SDL_Joystick *joystick); + +/** + * Get the implementation dependent path of a joystick. + * + * \param joystick the SDL_Joystick obtained from SDL_JoystickOpen(). + * \returns the path of the selected joystick. If no path can be found, this + * function returns NULL; call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.24.0. + * + * \sa SDL_JoystickPathForIndex + */ +extern DECLSPEC const char *SDLCALL SDL_JoystickPath(SDL_Joystick *joystick); + +/** + * Get the player index of an opened joystick. + * + * For XInput controllers this returns the XInput user index. Many joysticks + * will not be able to supply this information. + * + * \param joystick the SDL_Joystick obtained from SDL_JoystickOpen(). + * \returns the player index, or -1 if it's not available. + * + * \since This function is available since SDL 2.0.9. + */ +extern DECLSPEC int SDLCALL SDL_JoystickGetPlayerIndex(SDL_Joystick *joystick); + +/** + * Set the player index of an opened joystick. + * + * \param joystick the SDL_Joystick obtained from SDL_JoystickOpen(). + * \param player_index Player index to assign to this joystick, or -1 to clear + * the player index and turn off player LEDs. + * + * \since This function is available since SDL 2.0.12. + */ +extern DECLSPEC void SDLCALL SDL_JoystickSetPlayerIndex(SDL_Joystick *joystick, int player_index); + +/** + * Get the implementation-dependent GUID for the joystick. + * + * This function requires an open joystick. + * + * \param joystick the SDL_Joystick obtained from SDL_JoystickOpen(). + * \returns the GUID of the given joystick. If called on an invalid index, + * this function returns a zero GUID; call SDL_GetError() for more + * information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_JoystickGetDeviceGUID + * \sa SDL_JoystickGetGUIDString + */ +extern DECLSPEC SDL_JoystickGUID SDLCALL SDL_JoystickGetGUID(SDL_Joystick *joystick); + +/** + * Get the USB vendor ID of an opened joystick, if available. + * + * If the vendor ID isn't available this function returns 0. + * + * \param joystick the SDL_Joystick obtained from SDL_JoystickOpen(). + * \returns the USB vendor ID of the selected joystick, or 0 if unavailable. + * + * \since This function is available since SDL 2.0.6. + */ +extern DECLSPEC Uint16 SDLCALL SDL_JoystickGetVendor(SDL_Joystick *joystick); + +/** + * Get the USB product ID of an opened joystick, if available. + * + * If the product ID isn't available this function returns 0. + * + * \param joystick the SDL_Joystick obtained from SDL_JoystickOpen(). + * \returns the USB product ID of the selected joystick, or 0 if unavailable. + * + * \since This function is available since SDL 2.0.6. + */ +extern DECLSPEC Uint16 SDLCALL SDL_JoystickGetProduct(SDL_Joystick *joystick); + +/** + * Get the product version of an opened joystick, if available. + * + * If the product version isn't available this function returns 0. + * + * \param joystick the SDL_Joystick obtained from SDL_JoystickOpen(). + * \returns the product version of the selected joystick, or 0 if unavailable. + * + * \since This function is available since SDL 2.0.6. + */ +extern DECLSPEC Uint16 SDLCALL SDL_JoystickGetProductVersion(SDL_Joystick *joystick); + +/** + * Get the firmware version of an opened joystick, if available. + * + * If the firmware version isn't available this function returns 0. + * + * \param joystick the SDL_Joystick obtained from SDL_JoystickOpen(). + * \returns the firmware version of the selected joystick, or 0 if + * unavailable. + * + * \since This function is available since SDL 2.24.0. + */ +extern DECLSPEC Uint16 SDLCALL SDL_JoystickGetFirmwareVersion(SDL_Joystick *joystick); + +/** + * Get the serial number of an opened joystick, if available. + * + * Returns the serial number of the joystick, or NULL if it is not available. + * + * \param joystick the SDL_Joystick obtained from SDL_JoystickOpen(). + * \returns the serial number of the selected joystick, or NULL if + * unavailable. + * + * \since This function is available since SDL 2.0.14. + */ +extern DECLSPEC const char * SDLCALL SDL_JoystickGetSerial(SDL_Joystick *joystick); + +/** + * Get the type of an opened joystick. + * + * \param joystick the SDL_Joystick obtained from SDL_JoystickOpen(). + * \returns the SDL_JoystickType of the selected joystick. + * + * \since This function is available since SDL 2.0.6. + */ +extern DECLSPEC SDL_JoystickType SDLCALL SDL_JoystickGetType(SDL_Joystick *joystick); + +/** + * Get an ASCII string representation for a given SDL_JoystickGUID. + * + * You should supply at least 33 bytes for pszGUID. + * + * \param guid the SDL_JoystickGUID you wish to convert to string. + * \param pszGUID buffer in which to write the ASCII string. + * \param cbGUID the size of pszGUID. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_JoystickGetDeviceGUID + * \sa SDL_JoystickGetGUID + * \sa SDL_JoystickGetGUIDFromString + */ +extern DECLSPEC void SDLCALL SDL_JoystickGetGUIDString(SDL_JoystickGUID guid, char *pszGUID, int cbGUID); + +/** + * Convert a GUID string into a SDL_JoystickGUID structure. + * + * Performs no error checking. If this function is given a string containing + * an invalid GUID, the function will silently succeed, but the GUID generated + * will not be useful. + * + * \param pchGUID string containing an ASCII representation of a GUID. + * \returns a SDL_JoystickGUID structure. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_JoystickGetGUIDString + */ +extern DECLSPEC SDL_JoystickGUID SDLCALL SDL_JoystickGetGUIDFromString(const char *pchGUID); + +/** + * Get the device information encoded in a SDL_JoystickGUID structure + * + * \param guid the SDL_JoystickGUID you wish to get info about. + * \param vendor A pointer filled in with the device VID, or 0 if not + * available. + * \param product A pointer filled in with the device PID, or 0 if not + * available. + * \param version A pointer filled in with the device version, or 0 if not + * available. + * \param crc16 A pointer filled in with a CRC used to distinguish different + * products with the same VID/PID, or 0 if not available. + * + * \since This function is available since SDL 2.26.0. + * + * \sa SDL_JoystickGetDeviceGUID + */ +extern DECLSPEC void SDLCALL SDL_GetJoystickGUIDInfo(SDL_JoystickGUID guid, Uint16 *vendor, Uint16 *product, Uint16 *version, Uint16 *crc16); + +/** + * Get the status of a specified joystick. + * + * \param joystick the joystick to query. + * \returns SDL_TRUE if the joystick has been opened, SDL_FALSE if it has not; + * call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_JoystickClose + * \sa SDL_JoystickOpen + */ +extern DECLSPEC SDL_bool SDLCALL SDL_JoystickGetAttached(SDL_Joystick *joystick); + +/** + * Get the instance ID of an opened joystick. + * + * \param joystick an SDL_Joystick structure containing joystick information. + * \returns the instance ID of the specified joystick on success or a negative + * error code on failure; call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_JoystickOpen + */ +extern DECLSPEC SDL_JoystickID SDLCALL SDL_JoystickInstanceID(SDL_Joystick *joystick); + +/** + * Get the number of general axis controls on a joystick. + * + * Often, the directional pad on a game controller will either look like 4 + * separate buttons or a POV hat, and not axes, but all of this is up to the + * device and platform. + * + * \param joystick an SDL_Joystick structure containing joystick information. + * \returns the number of axis controls/number of axes on success or a + * negative error code on failure; call SDL_GetError() for more + * information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_JoystickGetAxis + * \sa SDL_JoystickOpen + */ +extern DECLSPEC int SDLCALL SDL_JoystickNumAxes(SDL_Joystick *joystick); + +/** + * Get the number of trackballs on a joystick. + * + * Joystick trackballs have only relative motion events associated with them + * and their state cannot be polled. + * + * Most joysticks do not have trackballs. + * + * \param joystick an SDL_Joystick structure containing joystick information. + * \returns the number of trackballs on success or a negative error code on + * failure; call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_JoystickGetBall + */ +extern DECLSPEC int SDLCALL SDL_JoystickNumBalls(SDL_Joystick *joystick); + +/** + * Get the number of POV hats on a joystick. + * + * \param joystick an SDL_Joystick structure containing joystick information. + * \returns the number of POV hats on success or a negative error code on + * failure; call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_JoystickGetHat + * \sa SDL_JoystickOpen + */ +extern DECLSPEC int SDLCALL SDL_JoystickNumHats(SDL_Joystick *joystick); + +/** + * Get the number of buttons on a joystick. + * + * \param joystick an SDL_Joystick structure containing joystick information. + * \returns the number of buttons on success or a negative error code on + * failure; call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_JoystickGetButton + * \sa SDL_JoystickOpen + */ +extern DECLSPEC int SDLCALL SDL_JoystickNumButtons(SDL_Joystick *joystick); + +/** + * Update the current state of the open joysticks. + * + * This is called automatically by the event loop if any joystick events are + * enabled. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_JoystickEventState + */ +extern DECLSPEC void SDLCALL SDL_JoystickUpdate(void); + +/** + * Enable/disable joystick event polling. + * + * If joystick events are disabled, you must call SDL_JoystickUpdate() + * yourself and manually check the state of the joystick when you want + * joystick information. + * + * It is recommended that you leave joystick event handling enabled. + * + * **WARNING**: Calling this function may delete all events currently in SDL's + * event queue. + * + * While `param` is meant to be one of `SDL_QUERY`, `SDL_IGNORE`, or + * `SDL_ENABLE`, this function accepts any value, with any non-zero value that + * isn't `SDL_QUERY` being treated as `SDL_ENABLE`. + * + * If SDL was built with events disabled (extremely uncommon!), this will do + * nothing and always return `SDL_IGNORE`. + * + * \param state can be one of `SDL_QUERY`, `SDL_IGNORE`, or `SDL_ENABLE`. + * \returns If `state` is `SDL_QUERY` then the current state is returned, + * otherwise `state` is returned (even if it was not one of the + * allowed values). + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GameControllerEventState + */ +extern DECLSPEC int SDLCALL SDL_JoystickEventState(int state); + +/* Limits for joystick axes... */ +#define SDL_JOYSTICK_AXIS_MAX 32767 +#define SDL_JOYSTICK_AXIS_MIN -32768 + +/** + * Get the current state of an axis control on a joystick. + * + * SDL makes no promises about what part of the joystick any given axis refers + * to. Your game should have some sort of configuration UI to let users + * specify what each axis should be bound to. Alternately, SDL's higher-level + * Game Controller API makes a great effort to apply order to this lower-level + * interface, so you know that a specific axis is the "left thumb stick," etc. + * + * The value returned by SDL_JoystickGetAxis() is a signed integer (-32768 to + * 32767) representing the current position of the axis. It may be necessary + * to impose certain tolerances on these values to account for jitter. + * + * \param joystick an SDL_Joystick structure containing joystick information. + * \param axis the axis to query; the axis indices start at index 0. + * \returns a 16-bit signed integer representing the current position of the + * axis or 0 on failure; call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_JoystickNumAxes + */ +extern DECLSPEC Sint16 SDLCALL SDL_JoystickGetAxis(SDL_Joystick *joystick, + int axis); + +/** + * Get the initial state of an axis control on a joystick. + * + * The state is a value ranging from -32768 to 32767. + * + * The axis indices start at index 0. + * + * \param joystick an SDL_Joystick structure containing joystick information. + * \param axis the axis to query; the axis indices start at index 0. + * \param state Upon return, the initial value is supplied here. + * \return SDL_TRUE if this axis has any initial value, or SDL_FALSE if not. + * + * \since This function is available since SDL 2.0.6. + */ +extern DECLSPEC SDL_bool SDLCALL SDL_JoystickGetAxisInitialState(SDL_Joystick *joystick, + int axis, Sint16 *state); + +/** + * \name Hat positions + */ +/* @{ */ +#define SDL_HAT_CENTERED 0x00 +#define SDL_HAT_UP 0x01 +#define SDL_HAT_RIGHT 0x02 +#define SDL_HAT_DOWN 0x04 +#define SDL_HAT_LEFT 0x08 +#define SDL_HAT_RIGHTUP (SDL_HAT_RIGHT|SDL_HAT_UP) +#define SDL_HAT_RIGHTDOWN (SDL_HAT_RIGHT|SDL_HAT_DOWN) +#define SDL_HAT_LEFTUP (SDL_HAT_LEFT|SDL_HAT_UP) +#define SDL_HAT_LEFTDOWN (SDL_HAT_LEFT|SDL_HAT_DOWN) +/* @} */ + +/** + * Get the current state of a POV hat on a joystick. + * + * The returned value will be one of the following positions: + * + * - `SDL_HAT_CENTERED` + * - `SDL_HAT_UP` + * - `SDL_HAT_RIGHT` + * - `SDL_HAT_DOWN` + * - `SDL_HAT_LEFT` + * - `SDL_HAT_RIGHTUP` + * - `SDL_HAT_RIGHTDOWN` + * - `SDL_HAT_LEFTUP` + * - `SDL_HAT_LEFTDOWN` + * + * \param joystick an SDL_Joystick structure containing joystick information. + * \param hat the hat index to get the state from; indices start at index 0. + * \returns the current hat position. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_JoystickNumHats + */ +extern DECLSPEC Uint8 SDLCALL SDL_JoystickGetHat(SDL_Joystick *joystick, + int hat); + +/** + * Get the ball axis change since the last poll. + * + * Trackballs can only return relative motion since the last call to + * SDL_JoystickGetBall(), these motion deltas are placed into `dx` and `dy`. + * + * Most joysticks do not have trackballs. + * + * \param joystick the SDL_Joystick to query. + * \param ball the ball index to query; ball indices start at index 0. + * \param dx stores the difference in the x axis position since the last poll. + * \param dy stores the difference in the y axis position since the last poll. + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_JoystickNumBalls + */ +extern DECLSPEC int SDLCALL SDL_JoystickGetBall(SDL_Joystick *joystick, + int ball, int *dx, int *dy); + +/** + * Get the current state of a button on a joystick. + * + * \param joystick an SDL_Joystick structure containing joystick information. + * \param button the button index to get the state from; indices start at + * index 0. + * \returns 1 if the specified button is pressed, 0 otherwise. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_JoystickNumButtons + */ +extern DECLSPEC Uint8 SDLCALL SDL_JoystickGetButton(SDL_Joystick *joystick, + int button); + +/** + * Start a rumble effect. + * + * Each call to this function cancels any previous rumble effect, and calling + * it with 0 intensity stops any rumbling. + * + * \param joystick The joystick to vibrate. + * \param low_frequency_rumble The intensity of the low frequency (left) + * rumble motor, from 0 to 0xFFFF. + * \param high_frequency_rumble The intensity of the high frequency (right) + * rumble motor, from 0 to 0xFFFF. + * \param duration_ms The duration of the rumble effect, in milliseconds. + * \returns 0, or -1 if rumble isn't supported on this joystick. + * + * \since This function is available since SDL 2.0.9. + * + * \sa SDL_JoystickHasRumble + */ +extern DECLSPEC int SDLCALL SDL_JoystickRumble(SDL_Joystick *joystick, Uint16 low_frequency_rumble, Uint16 high_frequency_rumble, Uint32 duration_ms); + +/** + * Start a rumble effect in the joystick's triggers + * + * Each call to this function cancels any previous trigger rumble effect, and + * calling it with 0 intensity stops any rumbling. + * + * Note that this is rumbling of the _triggers_ and not the game controller as + * a whole. This is currently only supported on Xbox One controllers. If you + * want the (more common) whole-controller rumble, use SDL_JoystickRumble() + * instead. + * + * \param joystick The joystick to vibrate. + * \param left_rumble The intensity of the left trigger rumble motor, from 0 + * to 0xFFFF. + * \param right_rumble The intensity of the right trigger rumble motor, from 0 + * to 0xFFFF. + * \param duration_ms The duration of the rumble effect, in milliseconds. + * \returns 0, or -1 if trigger rumble isn't supported on this joystick. + * + * \since This function is available since SDL 2.0.14. + * + * \sa SDL_JoystickHasRumbleTriggers + */ +extern DECLSPEC int SDLCALL SDL_JoystickRumbleTriggers(SDL_Joystick *joystick, Uint16 left_rumble, Uint16 right_rumble, Uint32 duration_ms); + +/** + * Query whether a joystick has an LED. + * + * An example of a joystick LED is the light on the back of a PlayStation 4's + * DualShock 4 controller. + * + * \param joystick The joystick to query. + * \return SDL_TRUE if the joystick has a modifiable LED, SDL_FALSE otherwise. + * + * \since This function is available since SDL 2.0.14. + */ +extern DECLSPEC SDL_bool SDLCALL SDL_JoystickHasLED(SDL_Joystick *joystick); + +/** + * Query whether a joystick has rumble support. + * + * \param joystick The joystick to query. + * \return SDL_TRUE if the joystick has rumble, SDL_FALSE otherwise. + * + * \since This function is available since SDL 2.0.18. + * + * \sa SDL_JoystickRumble + */ +extern DECLSPEC SDL_bool SDLCALL SDL_JoystickHasRumble(SDL_Joystick *joystick); + +/** + * Query whether a joystick has rumble support on triggers. + * + * \param joystick The joystick to query. + * \return SDL_TRUE if the joystick has trigger rumble, SDL_FALSE otherwise. + * + * \since This function is available since SDL 2.0.18. + * + * \sa SDL_JoystickRumbleTriggers + */ +extern DECLSPEC SDL_bool SDLCALL SDL_JoystickHasRumbleTriggers(SDL_Joystick *joystick); + +/** + * Update a joystick's LED color. + * + * An example of a joystick LED is the light on the back of a PlayStation 4's + * DualShock 4 controller. + * + * \param joystick The joystick to update. + * \param red The intensity of the red LED. + * \param green The intensity of the green LED. + * \param blue The intensity of the blue LED. + * \returns 0 on success, -1 if this joystick does not have a modifiable LED. + * + * \since This function is available since SDL 2.0.14. + */ +extern DECLSPEC int SDLCALL SDL_JoystickSetLED(SDL_Joystick *joystick, Uint8 red, Uint8 green, Uint8 blue); + +/** + * Send a joystick specific effect packet + * + * \param joystick The joystick to affect. + * \param data The data to send to the joystick. + * \param size The size of the data to send to the joystick. + * \returns 0, or -1 if this joystick or driver doesn't support effect + * packets. + * + * \since This function is available since SDL 2.0.16. + */ +extern DECLSPEC int SDLCALL SDL_JoystickSendEffect(SDL_Joystick *joystick, const void *data, int size); + +/** + * Close a joystick previously opened with SDL_JoystickOpen(). + * + * \param joystick The joystick device to close. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_JoystickOpen + */ +extern DECLSPEC void SDLCALL SDL_JoystickClose(SDL_Joystick *joystick); + +/** + * Get the battery level of a joystick as SDL_JoystickPowerLevel. + * + * \param joystick the SDL_Joystick to query. + * \returns the current battery level as SDL_JoystickPowerLevel on success or + * `SDL_JOYSTICK_POWER_UNKNOWN` if it is unknown. + * + * \since This function is available since SDL 2.0.4. + */ +extern DECLSPEC SDL_JoystickPowerLevel SDLCALL SDL_JoystickCurrentPowerLevel(SDL_Joystick *joystick); + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include "close_code.h" + +#endif /* SDL_joystick_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/third_party/tlRender-install-Release/include/SDL2/SDL_keyboard.h b/third_party/tlRender-install-Release/include/SDL2/SDL_keyboard.h new file mode 100644 index 00000000..eb46db52 --- /dev/null +++ b/third_party/tlRender-install-Release/include/SDL2/SDL_keyboard.h @@ -0,0 +1,361 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2025 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +/** + * # CategoryKeyboard + * + * Include file for SDL keyboard event handling + */ + +#ifndef SDL_keyboard_h_ +#define SDL_keyboard_h_ + +#include "SDL_stdinc.h" +#include "SDL_error.h" +#include "SDL_keycode.h" +#include "SDL_video.h" + +#include "begin_code.h" +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/** + * The SDL keysym structure, used in key events. + * + * If you are looking for translated character input, see the SDL_TEXTINPUT + * event. + */ +typedef struct SDL_Keysym +{ + SDL_Scancode scancode; /**< SDL physical key code - see SDL_Scancode for details */ + SDL_Keycode sym; /**< SDL virtual key code - see SDL_Keycode for details */ + Uint16 mod; /**< current key modifiers - see SDL_Keymod for details */ + Uint32 unused; +} SDL_Keysym; + +/* Function prototypes */ + +/** + * Query the window which currently has keyboard focus. + * + * \returns the window with keyboard focus. + * + * \since This function is available since SDL 2.0.0. + */ +extern DECLSPEC SDL_Window * SDLCALL SDL_GetKeyboardFocus(void); + +/** + * Get a snapshot of the current state of the keyboard. + * + * The pointer returned is a pointer to an internal SDL array. It will be + * valid for the whole lifetime of the application and should not be freed by + * the caller. + * + * A array element with a value of 1 means that the key is pressed and a value + * of 0 means that it is not. Indexes into this array are obtained by using + * SDL_Scancode values. + * + * Use SDL_PumpEvents() to update the state array. + * + * This function gives you the current state after all events have been + * processed, so if a key or button has been pressed and released before you + * process events, then the pressed state will never show up in the + * SDL_GetKeyboardState() calls. + * + * Note: This function doesn't take into account whether shift has been + * pressed or not. + * + * \param numkeys if non-NULL, receives the length of the returned array. + * \returns a pointer to an array of key states. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_PumpEvents + * \sa SDL_ResetKeyboard + */ +extern DECLSPEC const Uint8 *SDLCALL SDL_GetKeyboardState(int *numkeys); + +/** + * Clear the state of the keyboard + * + * This function will generate key up events for all pressed keys. + * + * \since This function is available since SDL 2.24.0. + * + * \sa SDL_GetKeyboardState + */ +extern DECLSPEC void SDLCALL SDL_ResetKeyboard(void); + +/** + * Get the current key modifier state for the keyboard. + * + * \returns an OR'd combination of the modifier keys for the keyboard. See + * SDL_Keymod for details. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetKeyboardState + * \sa SDL_SetModState + */ +extern DECLSPEC SDL_Keymod SDLCALL SDL_GetModState(void); + +/** + * Set the current key modifier state for the keyboard. + * + * The inverse of SDL_GetModState(), SDL_SetModState() allows you to impose + * modifier key states on your application. Simply pass your desired modifier + * states into `modstate`. This value may be a bitwise, OR'd combination of + * SDL_Keymod values. + * + * This does not change the keyboard state, only the key modifier flags that + * SDL reports. + * + * \param modstate the desired SDL_Keymod for the keyboard. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetModState + */ +extern DECLSPEC void SDLCALL SDL_SetModState(SDL_Keymod modstate); + +/** + * Get the key code corresponding to the given scancode according to the + * current keyboard layout. + * + * See SDL_Keycode for details. + * + * \param scancode the desired SDL_Scancode to query. + * \returns the SDL_Keycode that corresponds to the given SDL_Scancode. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetKeyName + * \sa SDL_GetScancodeFromKey + */ +extern DECLSPEC SDL_Keycode SDLCALL SDL_GetKeyFromScancode(SDL_Scancode scancode); + +/** + * Get the scancode corresponding to the given key code according to the + * current keyboard layout. + * + * See SDL_Scancode for details. + * + * \param key the desired SDL_Keycode to query. + * \returns the SDL_Scancode that corresponds to the given SDL_Keycode. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetKeyFromScancode + * \sa SDL_GetScancodeName + */ +extern DECLSPEC SDL_Scancode SDLCALL SDL_GetScancodeFromKey(SDL_Keycode key); + +/** + * Get a human-readable name for a scancode. + * + * See SDL_Scancode for details. + * + * **Warning**: The returned name is by design not stable across platforms, + * e.g. the name for `SDL_SCANCODE_LGUI` is "Left GUI" under Linux but "Left + * Windows" under Microsoft Windows, and some scancodes like + * `SDL_SCANCODE_NONUSBACKSLASH` don't have any name at all. There are even + * scancodes that share names, e.g. `SDL_SCANCODE_RETURN` and + * `SDL_SCANCODE_RETURN2` (both called "Return"). This function is therefore + * unsuitable for creating a stable cross-platform two-way mapping between + * strings and scancodes. + * + * \param scancode the desired SDL_Scancode to query. + * \returns a pointer to the name for the scancode. If the scancode doesn't + * have a name this function returns an empty string (""). + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetScancodeFromKey + * \sa SDL_GetScancodeFromName + */ +extern DECLSPEC const char *SDLCALL SDL_GetScancodeName(SDL_Scancode scancode); + +/** + * Get a scancode from a human-readable name. + * + * \param name the human-readable scancode name. + * \returns the SDL_Scancode, or `SDL_SCANCODE_UNKNOWN` if the name wasn't + * recognized; call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetKeyFromName + * \sa SDL_GetScancodeFromKey + * \sa SDL_GetScancodeName + */ +extern DECLSPEC SDL_Scancode SDLCALL SDL_GetScancodeFromName(const char *name); + +/** + * Get a human-readable name for a key. + * + * See SDL_Scancode and SDL_Keycode for details. + * + * \param key the desired SDL_Keycode to query. + * \returns a pointer to a UTF-8 string that stays valid at least until the + * next call to this function. If you need it around any longer, you + * must copy it. If the key doesn't have a name, this function + * returns an empty string (""). + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetKeyFromName + * \sa SDL_GetKeyFromScancode + * \sa SDL_GetScancodeFromKey + */ +extern DECLSPEC const char *SDLCALL SDL_GetKeyName(SDL_Keycode key); + +/** + * Get a key code from a human-readable name. + * + * \param name the human-readable key name. + * \returns key code, or `SDLK_UNKNOWN` if the name wasn't recognized; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetKeyFromScancode + * \sa SDL_GetKeyName + * \sa SDL_GetScancodeFromName + */ +extern DECLSPEC SDL_Keycode SDLCALL SDL_GetKeyFromName(const char *name); + +/** + * Start accepting Unicode text input events. + * + * This function will start accepting Unicode text input events in the focused + * SDL window, and start emitting SDL_TextInputEvent (SDL_TEXTINPUT) and + * SDL_TextEditingEvent (SDL_TEXTEDITING) events. Please use this function in + * pair with SDL_StopTextInput(). + * + * On some platforms using this function activates the screen keyboard. + * + * On desktop platforms, SDL_StartTextInput() is implicitly called on SDL + * video subsystem initialization which will cause SDL_TextInputEvent and + * SDL_TextEditingEvent to begin emitting. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_SetTextInputRect + * \sa SDL_StopTextInput + */ +extern DECLSPEC void SDLCALL SDL_StartTextInput(void); + +/** + * Check whether or not Unicode text input events are enabled. + * + * \returns SDL_TRUE if text input events are enabled else SDL_FALSE. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_StartTextInput + */ +extern DECLSPEC SDL_bool SDLCALL SDL_IsTextInputActive(void); + +/** + * Stop receiving any text input events. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_StartTextInput + */ +extern DECLSPEC void SDLCALL SDL_StopTextInput(void); + +/** + * Dismiss the composition window/IME without disabling the subsystem. + * + * \since This function is available since SDL 2.0.22. + * + * \sa SDL_StartTextInput + * \sa SDL_StopTextInput + */ +extern DECLSPEC void SDLCALL SDL_ClearComposition(void); + +/** + * Returns if an IME Composite or Candidate window is currently shown. + * + * \since This function is available since SDL 2.0.22. + */ +extern DECLSPEC SDL_bool SDLCALL SDL_IsTextInputShown(void); + +/** + * Set the rectangle used to type Unicode text inputs. + * + * Native input methods will place a window with word suggestions near it, + * without covering the text being inputted. + * + * To start text input in a given location, this function is intended to be + * called before SDL_StartTextInput, although some platforms support moving + * the rectangle even while text input (and a composition) is active. + * + * Note: If you want to use the system native IME window, try setting hint + * **SDL_HINT_IME_SHOW_UI** to **1**, otherwise this function won't give you + * any feedback. + * + * \param rect the SDL_Rect structure representing the rectangle to receive + * text (ignored if NULL). + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_StartTextInput + */ +extern DECLSPEC void SDLCALL SDL_SetTextInputRect(const SDL_Rect *rect); + +/** + * Check whether the platform has screen keyboard support. + * + * \returns SDL_TRUE if the platform has some screen keyboard support or + * SDL_FALSE if not. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_StartTextInput + * \sa SDL_IsScreenKeyboardShown + */ +extern DECLSPEC SDL_bool SDLCALL SDL_HasScreenKeyboardSupport(void); + +/** + * Check whether the screen keyboard is shown for given window. + * + * \param window the window for which screen keyboard should be queried. + * \returns SDL_TRUE if screen keyboard is shown or SDL_FALSE if not. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_HasScreenKeyboardSupport + */ +extern DECLSPEC SDL_bool SDLCALL SDL_IsScreenKeyboardShown(SDL_Window *window); + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include "close_code.h" + +#endif /* SDL_keyboard_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/third_party/tlRender-install-Release/include/SDL2/SDL_keycode.h b/third_party/tlRender-install-Release/include/SDL2/SDL_keycode.h new file mode 100644 index 00000000..eb1678e3 --- /dev/null +++ b/third_party/tlRender-install-Release/include/SDL2/SDL_keycode.h @@ -0,0 +1,358 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2025 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +/** + * # CategoryKeycode + * + * Defines constants which identify keyboard keys and modifiers. + */ + +#ifndef SDL_keycode_h_ +#define SDL_keycode_h_ + +#include "SDL_stdinc.h" +#include "SDL_scancode.h" + +/** + * The SDL virtual key representation. + * + * Values of this type are used to represent keyboard keys using the current + * layout of the keyboard. These values include Unicode values representing + * the unmodified character that would be generated by pressing the key, or an + * SDLK_* constant for those keys that do not generate characters. + * + * A special exception is the number keys at the top of the keyboard which map + * to SDLK_0...SDLK_9 on AZERTY layouts. + */ +typedef Sint32 SDL_Keycode; + +#define SDLK_SCANCODE_MASK (1<<30) +#define SDL_SCANCODE_TO_KEYCODE(X) (X | SDLK_SCANCODE_MASK) + +typedef enum SDL_KeyCode +{ + SDLK_UNKNOWN = 0, + + SDLK_RETURN = '\r', + SDLK_ESCAPE = '\x1B', + SDLK_BACKSPACE = '\b', + SDLK_TAB = '\t', + SDLK_SPACE = ' ', + SDLK_EXCLAIM = '!', + SDLK_QUOTEDBL = '"', + SDLK_HASH = '#', + SDLK_PERCENT = '%', + SDLK_DOLLAR = '$', + SDLK_AMPERSAND = '&', + SDLK_QUOTE = '\'', + SDLK_LEFTPAREN = '(', + SDLK_RIGHTPAREN = ')', + SDLK_ASTERISK = '*', + SDLK_PLUS = '+', + SDLK_COMMA = ',', + SDLK_MINUS = '-', + SDLK_PERIOD = '.', + SDLK_SLASH = '/', + SDLK_0 = '0', + SDLK_1 = '1', + SDLK_2 = '2', + SDLK_3 = '3', + SDLK_4 = '4', + SDLK_5 = '5', + SDLK_6 = '6', + SDLK_7 = '7', + SDLK_8 = '8', + SDLK_9 = '9', + SDLK_COLON = ':', + SDLK_SEMICOLON = ';', + SDLK_LESS = '<', + SDLK_EQUALS = '=', + SDLK_GREATER = '>', + SDLK_QUESTION = '?', + SDLK_AT = '@', + + /* + Skip uppercase letters + */ + + SDLK_LEFTBRACKET = '[', + SDLK_BACKSLASH = '\\', + SDLK_RIGHTBRACKET = ']', + SDLK_CARET = '^', + SDLK_UNDERSCORE = '_', + SDLK_BACKQUOTE = '`', + SDLK_a = 'a', + SDLK_b = 'b', + SDLK_c = 'c', + SDLK_d = 'd', + SDLK_e = 'e', + SDLK_f = 'f', + SDLK_g = 'g', + SDLK_h = 'h', + SDLK_i = 'i', + SDLK_j = 'j', + SDLK_k = 'k', + SDLK_l = 'l', + SDLK_m = 'm', + SDLK_n = 'n', + SDLK_o = 'o', + SDLK_p = 'p', + SDLK_q = 'q', + SDLK_r = 'r', + SDLK_s = 's', + SDLK_t = 't', + SDLK_u = 'u', + SDLK_v = 'v', + SDLK_w = 'w', + SDLK_x = 'x', + SDLK_y = 'y', + SDLK_z = 'z', + + SDLK_CAPSLOCK = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_CAPSLOCK), + + SDLK_F1 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F1), + SDLK_F2 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F2), + SDLK_F3 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F3), + SDLK_F4 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F4), + SDLK_F5 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F5), + SDLK_F6 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F6), + SDLK_F7 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F7), + SDLK_F8 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F8), + SDLK_F9 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F9), + SDLK_F10 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F10), + SDLK_F11 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F11), + SDLK_F12 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F12), + + SDLK_PRINTSCREEN = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_PRINTSCREEN), + SDLK_SCROLLLOCK = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_SCROLLLOCK), + SDLK_PAUSE = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_PAUSE), + SDLK_INSERT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_INSERT), + SDLK_HOME = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_HOME), + SDLK_PAGEUP = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_PAGEUP), + SDLK_DELETE = '\x7F', + SDLK_END = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_END), + SDLK_PAGEDOWN = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_PAGEDOWN), + SDLK_RIGHT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_RIGHT), + SDLK_LEFT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_LEFT), + SDLK_DOWN = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_DOWN), + SDLK_UP = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_UP), + + SDLK_NUMLOCKCLEAR = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_NUMLOCKCLEAR), + SDLK_KP_DIVIDE = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_DIVIDE), + SDLK_KP_MULTIPLY = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_MULTIPLY), + SDLK_KP_MINUS = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_MINUS), + SDLK_KP_PLUS = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_PLUS), + SDLK_KP_ENTER = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_ENTER), + SDLK_KP_1 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_1), + SDLK_KP_2 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_2), + SDLK_KP_3 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_3), + SDLK_KP_4 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_4), + SDLK_KP_5 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_5), + SDLK_KP_6 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_6), + SDLK_KP_7 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_7), + SDLK_KP_8 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_8), + SDLK_KP_9 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_9), + SDLK_KP_0 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_0), + SDLK_KP_PERIOD = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_PERIOD), + + SDLK_APPLICATION = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_APPLICATION), + SDLK_POWER = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_POWER), + SDLK_KP_EQUALS = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_EQUALS), + SDLK_F13 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F13), + SDLK_F14 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F14), + SDLK_F15 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F15), + SDLK_F16 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F16), + SDLK_F17 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F17), + SDLK_F18 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F18), + SDLK_F19 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F19), + SDLK_F20 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F20), + SDLK_F21 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F21), + SDLK_F22 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F22), + SDLK_F23 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F23), + SDLK_F24 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_F24), + SDLK_EXECUTE = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_EXECUTE), + SDLK_HELP = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_HELP), + SDLK_MENU = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_MENU), + SDLK_SELECT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_SELECT), + SDLK_STOP = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_STOP), + SDLK_AGAIN = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AGAIN), + SDLK_UNDO = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_UNDO), + SDLK_CUT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_CUT), + SDLK_COPY = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_COPY), + SDLK_PASTE = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_PASTE), + SDLK_FIND = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_FIND), + SDLK_MUTE = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_MUTE), + SDLK_VOLUMEUP = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_VOLUMEUP), + SDLK_VOLUMEDOWN = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_VOLUMEDOWN), + SDLK_KP_COMMA = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_COMMA), + SDLK_KP_EQUALSAS400 = + SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_EQUALSAS400), + + SDLK_ALTERASE = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_ALTERASE), + SDLK_SYSREQ = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_SYSREQ), + SDLK_CANCEL = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_CANCEL), + SDLK_CLEAR = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_CLEAR), + SDLK_PRIOR = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_PRIOR), + SDLK_RETURN2 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_RETURN2), + SDLK_SEPARATOR = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_SEPARATOR), + SDLK_OUT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_OUT), + SDLK_OPER = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_OPER), + SDLK_CLEARAGAIN = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_CLEARAGAIN), + SDLK_CRSEL = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_CRSEL), + SDLK_EXSEL = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_EXSEL), + + SDLK_KP_00 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_00), + SDLK_KP_000 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_000), + SDLK_THOUSANDSSEPARATOR = + SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_THOUSANDSSEPARATOR), + SDLK_DECIMALSEPARATOR = + SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_DECIMALSEPARATOR), + SDLK_CURRENCYUNIT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_CURRENCYUNIT), + SDLK_CURRENCYSUBUNIT = + SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_CURRENCYSUBUNIT), + SDLK_KP_LEFTPAREN = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_LEFTPAREN), + SDLK_KP_RIGHTPAREN = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_RIGHTPAREN), + SDLK_KP_LEFTBRACE = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_LEFTBRACE), + SDLK_KP_RIGHTBRACE = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_RIGHTBRACE), + SDLK_KP_TAB = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_TAB), + SDLK_KP_BACKSPACE = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_BACKSPACE), + SDLK_KP_A = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_A), + SDLK_KP_B = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_B), + SDLK_KP_C = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_C), + SDLK_KP_D = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_D), + SDLK_KP_E = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_E), + SDLK_KP_F = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_F), + SDLK_KP_XOR = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_XOR), + SDLK_KP_POWER = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_POWER), + SDLK_KP_PERCENT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_PERCENT), + SDLK_KP_LESS = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_LESS), + SDLK_KP_GREATER = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_GREATER), + SDLK_KP_AMPERSAND = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_AMPERSAND), + SDLK_KP_DBLAMPERSAND = + SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_DBLAMPERSAND), + SDLK_KP_VERTICALBAR = + SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_VERTICALBAR), + SDLK_KP_DBLVERTICALBAR = + SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_DBLVERTICALBAR), + SDLK_KP_COLON = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_COLON), + SDLK_KP_HASH = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_HASH), + SDLK_KP_SPACE = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_SPACE), + SDLK_KP_AT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_AT), + SDLK_KP_EXCLAM = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_EXCLAM), + SDLK_KP_MEMSTORE = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_MEMSTORE), + SDLK_KP_MEMRECALL = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_MEMRECALL), + SDLK_KP_MEMCLEAR = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_MEMCLEAR), + SDLK_KP_MEMADD = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_MEMADD), + SDLK_KP_MEMSUBTRACT = + SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_MEMSUBTRACT), + SDLK_KP_MEMMULTIPLY = + SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_MEMMULTIPLY), + SDLK_KP_MEMDIVIDE = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_MEMDIVIDE), + SDLK_KP_PLUSMINUS = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_PLUSMINUS), + SDLK_KP_CLEAR = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_CLEAR), + SDLK_KP_CLEARENTRY = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_CLEARENTRY), + SDLK_KP_BINARY = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_BINARY), + SDLK_KP_OCTAL = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_OCTAL), + SDLK_KP_DECIMAL = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_DECIMAL), + SDLK_KP_HEXADECIMAL = + SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KP_HEXADECIMAL), + + SDLK_LCTRL = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_LCTRL), + SDLK_LSHIFT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_LSHIFT), + SDLK_LALT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_LALT), + SDLK_LGUI = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_LGUI), + SDLK_RCTRL = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_RCTRL), + SDLK_RSHIFT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_RSHIFT), + SDLK_RALT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_RALT), + SDLK_RGUI = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_RGUI), + + SDLK_MODE = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_MODE), + + SDLK_AUDIONEXT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AUDIONEXT), + SDLK_AUDIOPREV = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AUDIOPREV), + SDLK_AUDIOSTOP = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AUDIOSTOP), + SDLK_AUDIOPLAY = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AUDIOPLAY), + SDLK_AUDIOMUTE = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AUDIOMUTE), + SDLK_MEDIASELECT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_MEDIASELECT), + SDLK_WWW = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_WWW), + SDLK_MAIL = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_MAIL), + SDLK_CALCULATOR = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_CALCULATOR), + SDLK_COMPUTER = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_COMPUTER), + SDLK_AC_SEARCH = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AC_SEARCH), + SDLK_AC_HOME = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AC_HOME), + SDLK_AC_BACK = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AC_BACK), + SDLK_AC_FORWARD = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AC_FORWARD), + SDLK_AC_STOP = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AC_STOP), + SDLK_AC_REFRESH = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AC_REFRESH), + SDLK_AC_BOOKMARKS = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AC_BOOKMARKS), + + SDLK_BRIGHTNESSDOWN = + SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_BRIGHTNESSDOWN), + SDLK_BRIGHTNESSUP = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_BRIGHTNESSUP), + SDLK_DISPLAYSWITCH = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_DISPLAYSWITCH), + SDLK_KBDILLUMTOGGLE = + SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KBDILLUMTOGGLE), + SDLK_KBDILLUMDOWN = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KBDILLUMDOWN), + SDLK_KBDILLUMUP = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_KBDILLUMUP), + SDLK_EJECT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_EJECT), + SDLK_SLEEP = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_SLEEP), + SDLK_APP1 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_APP1), + SDLK_APP2 = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_APP2), + + SDLK_AUDIOREWIND = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AUDIOREWIND), + SDLK_AUDIOFASTFORWARD = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_AUDIOFASTFORWARD), + + SDLK_SOFTLEFT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_SOFTLEFT), + SDLK_SOFTRIGHT = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_SOFTRIGHT), + SDLK_CALL = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_CALL), + SDLK_ENDCALL = SDL_SCANCODE_TO_KEYCODE(SDL_SCANCODE_ENDCALL) +} SDL_KeyCode; + +/** + * Enumeration of valid key mods (possibly OR'd together). + */ +typedef enum SDL_Keymod +{ + KMOD_NONE = 0x0000, + KMOD_LSHIFT = 0x0001, + KMOD_RSHIFT = 0x0002, + KMOD_LCTRL = 0x0040, + KMOD_RCTRL = 0x0080, + KMOD_LALT = 0x0100, + KMOD_RALT = 0x0200, + KMOD_LGUI = 0x0400, + KMOD_RGUI = 0x0800, + KMOD_NUM = 0x1000, + KMOD_CAPS = 0x2000, + KMOD_MODE = 0x4000, + KMOD_SCROLL = 0x8000, + + KMOD_CTRL = KMOD_LCTRL | KMOD_RCTRL, + KMOD_SHIFT = KMOD_LSHIFT | KMOD_RSHIFT, + KMOD_ALT = KMOD_LALT | KMOD_RALT, + KMOD_GUI = KMOD_LGUI | KMOD_RGUI, + + KMOD_RESERVED = KMOD_SCROLL /* This is for source-level compatibility with SDL 2.0.0. */ +} SDL_Keymod; + +#endif /* SDL_keycode_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/third_party/tlRender-install-Release/include/SDL2/SDL_loadso.h b/third_party/tlRender-install-Release/include/SDL2/SDL_loadso.h new file mode 100644 index 00000000..1763b528 --- /dev/null +++ b/third_party/tlRender-install-Release/include/SDL2/SDL_loadso.h @@ -0,0 +1,117 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2025 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +/* WIKI CATEGORY: LoadSO */ + +/** + * # CategoryLoadSO + * + * System-dependent library loading routines. + * + * Some things to keep in mind: + * + * - These functions only work on C function names. Other languages may have + * name mangling and intrinsic language support that varies from compiler to + * compiler. + * - Make sure you declare your function pointers with the same calling + * convention as the actual library function. Your code will crash + * mysteriously if you do not do this. + * - Avoid namespace collisions. If you load a symbol from the library, it is + * not defined whether or not it goes into the global symbol namespace for + * the application. If it does and it conflicts with symbols in your code or + * other shared libraries, you will not get the results you expect. :) + */ + +#ifndef SDL_loadso_h_ +#define SDL_loadso_h_ + +#include "SDL_stdinc.h" +#include "SDL_error.h" + +#include "begin_code.h" +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/** + * Dynamically load a shared object. + * + * \param sofile a system-dependent name of the object file. + * \returns an opaque pointer to the object handle or NULL if there was an + * error; call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_LoadFunction + * \sa SDL_UnloadObject + */ +extern DECLSPEC void *SDLCALL SDL_LoadObject(const char *sofile); + +/** + * Look up the address of the named function in a shared object. + * + * This function pointer is no longer valid after calling SDL_UnloadObject(). + * + * This function can only look up C function names. Other languages may have + * name mangling and intrinsic language support that varies from compiler to + * compiler. + * + * Make sure you declare your function pointers with the same calling + * convention as the actual library function. Your code will crash + * mysteriously if you do not do this. + * + * If the requested function doesn't exist, NULL is returned. + * + * \param handle a valid shared object handle returned by SDL_LoadObject(). + * \param name the name of the function to look up. + * \returns a pointer to the function or NULL if there was an error; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_LoadObject + * \sa SDL_UnloadObject + */ +extern DECLSPEC void *SDLCALL SDL_LoadFunction(void *handle, + const char *name); + +/** + * Unload a shared object from memory. + * + * \param handle a valid shared object handle returned by SDL_LoadObject(). + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_LoadFunction + * \sa SDL_LoadObject + */ +extern DECLSPEC void SDLCALL SDL_UnloadObject(void *handle); + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include "close_code.h" + +#endif /* SDL_loadso_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/third_party/tlRender-install-Release/include/SDL2/SDL_locale.h b/third_party/tlRender-install-Release/include/SDL2/SDL_locale.h new file mode 100644 index 00000000..8126efc7 --- /dev/null +++ b/third_party/tlRender-install-Release/include/SDL2/SDL_locale.h @@ -0,0 +1,103 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2025 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +/** + * # CategoryLocale + * + * Include file for SDL locale services + */ + +#ifndef _SDL_locale_h +#define _SDL_locale_h + +#include "SDL_stdinc.h" +#include "SDL_error.h" + +#include "begin_code.h" +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +/* *INDENT-OFF* */ +extern "C" { +/* *INDENT-ON* */ +#endif + + +typedef struct SDL_Locale +{ + const char *language; /**< A language name, like "en" for English. */ + const char *country; /**< A country, like "US" for America. Can be NULL. */ +} SDL_Locale; + +/** + * Report the user's preferred locale. + * + * This returns an array of SDL_Locale structs, the final item zeroed out. + * When the caller is done with this array, it should call SDL_free() on the + * returned value; all the memory involved is allocated in a single block, so + * a single SDL_free() will suffice. + * + * Returned language strings are in the format xx, where 'xx' is an ISO-639 + * language specifier (such as "en" for English, "de" for German, etc). + * Country strings are in the format YY, where "YY" is an ISO-3166 country + * code (such as "US" for the United States, "CA" for Canada, etc). Country + * might be NULL if there's no specific guidance on them (so you might get { + * "en", "US" } for American English, but { "en", NULL } means "English + * language, generically"). Language strings are never NULL, except to + * terminate the array. + * + * Please note that not all of these strings are 2 characters; some are three + * or more. + * + * The returned list of locales are in the order of the user's preference. For + * example, a German citizen that is fluent in US English and knows enough + * Japanese to navigate around Tokyo might have a list like: { "de", "en_US", + * "jp", NULL }. Someone from England might prefer British English (where + * "color" is spelled "colour", etc), but will settle for anything like it: { + * "en_GB", "en", NULL }. + * + * This function returns NULL on error, including when the platform does not + * supply this information at all. + * + * This might be a "slow" call that has to query the operating system. It's + * best to ask for this once and save the results. However, this list can + * change, usually because the user has changed a system preference outside of + * your program; SDL will send an SDL_LOCALECHANGED event in this case, if + * possible, and you can call this function again to get an updated copy of + * preferred locales. + * + * \return array of locales, terminated with a locale with a NULL language + * field. Will return NULL on error. + * + * \since This function is available since SDL 2.0.14. + */ +extern DECLSPEC SDL_Locale * SDLCALL SDL_GetPreferredLocales(void); + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +/* *INDENT-OFF* */ +} +/* *INDENT-ON* */ +#endif +#include "close_code.h" + +#endif /* _SDL_locale_h */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/third_party/tlRender-install-Release/include/SDL2/SDL_log.h b/third_party/tlRender-install-Release/include/SDL2/SDL_log.h new file mode 100644 index 00000000..75833ba3 --- /dev/null +++ b/third_party/tlRender-install-Release/include/SDL2/SDL_log.h @@ -0,0 +1,405 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2025 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +/** + * # CategoryLog + * + * Simple log messages with categories and priorities. + * + * By default logs are quiet, but if you're debugging SDL you might want: + * + * SDL_LogSetAllPriority(SDL_LOG_PRIORITY_WARN); + * + * Here's where the messages go on different platforms: + * + * - Windows: debug output stream + * - Android: log output + * - Others: standard error output (stderr) + */ + +#ifndef SDL_log_h_ +#define SDL_log_h_ + +#include "SDL_stdinc.h" + +#include "begin_code.h" +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + + +/** + * The maximum size of a log message prior to SDL 2.0.24 + * + * As of 2.0.24 there is no limit to the length of SDL log messages. + */ +#define SDL_MAX_LOG_MESSAGE 4096 + +/** + * The predefined log categories + * + * By default the application category is enabled at the INFO level, the + * assert category is enabled at the WARN level, test is enabled at the + * VERBOSE level and all other categories are enabled at the ERROR level. + */ +typedef enum SDL_LogCategory +{ + SDL_LOG_CATEGORY_APPLICATION, + SDL_LOG_CATEGORY_ERROR, + SDL_LOG_CATEGORY_ASSERT, + SDL_LOG_CATEGORY_SYSTEM, + SDL_LOG_CATEGORY_AUDIO, + SDL_LOG_CATEGORY_VIDEO, + SDL_LOG_CATEGORY_RENDER, + SDL_LOG_CATEGORY_INPUT, + SDL_LOG_CATEGORY_TEST, + + /* Reserved for future SDL library use */ + SDL_LOG_CATEGORY_RESERVED1, + SDL_LOG_CATEGORY_RESERVED2, + SDL_LOG_CATEGORY_RESERVED3, + SDL_LOG_CATEGORY_RESERVED4, + SDL_LOG_CATEGORY_RESERVED5, + SDL_LOG_CATEGORY_RESERVED6, + SDL_LOG_CATEGORY_RESERVED7, + SDL_LOG_CATEGORY_RESERVED8, + SDL_LOG_CATEGORY_RESERVED9, + SDL_LOG_CATEGORY_RESERVED10, + + /* Beyond this point is reserved for application use, e.g. + enum { + MYAPP_CATEGORY_AWESOME1 = SDL_LOG_CATEGORY_CUSTOM, + MYAPP_CATEGORY_AWESOME2, + MYAPP_CATEGORY_AWESOME3, + ... + }; + */ + SDL_LOG_CATEGORY_CUSTOM +} SDL_LogCategory; + +/** + * The predefined log priorities + */ +typedef enum SDL_LogPriority +{ + SDL_LOG_PRIORITY_VERBOSE = 1, + SDL_LOG_PRIORITY_DEBUG, + SDL_LOG_PRIORITY_INFO, + SDL_LOG_PRIORITY_WARN, + SDL_LOG_PRIORITY_ERROR, + SDL_LOG_PRIORITY_CRITICAL, + SDL_NUM_LOG_PRIORITIES +} SDL_LogPriority; + + +/** + * Set the priority of all log categories. + * + * \param priority the SDL_LogPriority to assign. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_LogSetPriority + */ +extern DECLSPEC void SDLCALL SDL_LogSetAllPriority(SDL_LogPriority priority); + +/** + * Set the priority of a particular log category. + * + * \param category the category to assign a priority to. + * \param priority the SDL_LogPriority to assign. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_LogGetPriority + * \sa SDL_LogSetAllPriority + */ +extern DECLSPEC void SDLCALL SDL_LogSetPriority(int category, + SDL_LogPriority priority); + +/** + * Get the priority of a particular log category. + * + * \param category the category to query. + * \returns the SDL_LogPriority for the requested category. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_LogSetPriority + */ +extern DECLSPEC SDL_LogPriority SDLCALL SDL_LogGetPriority(int category); + +/** + * Reset all priorities to default. + * + * This is called by SDL_Quit(). + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_LogSetAllPriority + * \sa SDL_LogSetPriority + */ +extern DECLSPEC void SDLCALL SDL_LogResetPriorities(void); + +/** + * Log a message with SDL_LOG_CATEGORY_APPLICATION and SDL_LOG_PRIORITY_INFO. + * + * = * \param fmt a printf() style message format string + * + * \param ... additional parameters matching % tokens in the `fmt` string, if + * any. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_LogCritical + * \sa SDL_LogDebug + * \sa SDL_LogError + * \sa SDL_LogInfo + * \sa SDL_LogMessage + * \sa SDL_LogMessageV + * \sa SDL_LogVerbose + * \sa SDL_LogWarn + */ +extern DECLSPEC void SDLCALL SDL_Log(SDL_PRINTF_FORMAT_STRING const char *fmt, ...) SDL_PRINTF_VARARG_FUNC(1); + +/** + * Log a message with SDL_LOG_PRIORITY_VERBOSE. + * + * \param category the category of the message. + * \param fmt a printf() style message format string. + * \param ... additional parameters matching % tokens in the **fmt** string, + * if any. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_Log + * \sa SDL_LogCritical + * \sa SDL_LogDebug + * \sa SDL_LogError + * \sa SDL_LogInfo + * \sa SDL_LogMessage + * \sa SDL_LogMessageV + * \sa SDL_LogWarn + */ +extern DECLSPEC void SDLCALL SDL_LogVerbose(int category, SDL_PRINTF_FORMAT_STRING const char *fmt, ...) SDL_PRINTF_VARARG_FUNC(2); + +/** + * Log a message with SDL_LOG_PRIORITY_DEBUG. + * + * \param category the category of the message. + * \param fmt a printf() style message format string. + * \param ... additional parameters matching % tokens in the **fmt** string, + * if any. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_Log + * \sa SDL_LogCritical + * \sa SDL_LogError + * \sa SDL_LogInfo + * \sa SDL_LogMessage + * \sa SDL_LogMessageV + * \sa SDL_LogVerbose + * \sa SDL_LogWarn + */ +extern DECLSPEC void SDLCALL SDL_LogDebug(int category, SDL_PRINTF_FORMAT_STRING const char *fmt, ...) SDL_PRINTF_VARARG_FUNC(2); + +/** + * Log a message with SDL_LOG_PRIORITY_INFO. + * + * \param category the category of the message. + * \param fmt a printf() style message format string. + * \param ... additional parameters matching % tokens in the **fmt** string, + * if any. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_Log + * \sa SDL_LogCritical + * \sa SDL_LogDebug + * \sa SDL_LogError + * \sa SDL_LogMessage + * \sa SDL_LogMessageV + * \sa SDL_LogVerbose + * \sa SDL_LogWarn + */ +extern DECLSPEC void SDLCALL SDL_LogInfo(int category, SDL_PRINTF_FORMAT_STRING const char *fmt, ...) SDL_PRINTF_VARARG_FUNC(2); + +/** + * Log a message with SDL_LOG_PRIORITY_WARN. + * + * \param category the category of the message. + * \param fmt a printf() style message format string. + * \param ... additional parameters matching % tokens in the **fmt** string, + * if any. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_Log + * \sa SDL_LogCritical + * \sa SDL_LogDebug + * \sa SDL_LogError + * \sa SDL_LogInfo + * \sa SDL_LogMessage + * \sa SDL_LogMessageV + * \sa SDL_LogVerbose + */ +extern DECLSPEC void SDLCALL SDL_LogWarn(int category, SDL_PRINTF_FORMAT_STRING const char *fmt, ...) SDL_PRINTF_VARARG_FUNC(2); + +/** + * Log a message with SDL_LOG_PRIORITY_ERROR. + * + * \param category the category of the message. + * \param fmt a printf() style message format string. + * \param ... additional parameters matching % tokens in the **fmt** string, + * if any. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_Log + * \sa SDL_LogCritical + * \sa SDL_LogDebug + * \sa SDL_LogInfo + * \sa SDL_LogMessage + * \sa SDL_LogMessageV + * \sa SDL_LogVerbose + * \sa SDL_LogWarn + */ +extern DECLSPEC void SDLCALL SDL_LogError(int category, SDL_PRINTF_FORMAT_STRING const char *fmt, ...) SDL_PRINTF_VARARG_FUNC(2); + +/** + * Log a message with SDL_LOG_PRIORITY_CRITICAL. + * + * \param category the category of the message. + * \param fmt a printf() style message format string. + * \param ... additional parameters matching % tokens in the **fmt** string, + * if any. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_Log + * \sa SDL_LogDebug + * \sa SDL_LogError + * \sa SDL_LogInfo + * \sa SDL_LogMessage + * \sa SDL_LogMessageV + * \sa SDL_LogVerbose + * \sa SDL_LogWarn + */ +extern DECLSPEC void SDLCALL SDL_LogCritical(int category, SDL_PRINTF_FORMAT_STRING const char *fmt, ...) SDL_PRINTF_VARARG_FUNC(2); + +/** + * Log a message with the specified category and priority. + * + * \param category the category of the message. + * \param priority the priority of the message. + * \param fmt a printf() style message format string. + * \param ... additional parameters matching % tokens in the **fmt** string, + * if any. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_Log + * \sa SDL_LogCritical + * \sa SDL_LogDebug + * \sa SDL_LogError + * \sa SDL_LogInfo + * \sa SDL_LogMessageV + * \sa SDL_LogVerbose + * \sa SDL_LogWarn + */ +extern DECLSPEC void SDLCALL SDL_LogMessage(int category, + SDL_LogPriority priority, + SDL_PRINTF_FORMAT_STRING const char *fmt, ...) SDL_PRINTF_VARARG_FUNC(3); + +/** + * Log a message with the specified category and priority. + * + * \param category the category of the message. + * \param priority the priority of the message. + * \param fmt a printf() style message format string. + * \param ap a variable argument list. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_Log + * \sa SDL_LogCritical + * \sa SDL_LogDebug + * \sa SDL_LogError + * \sa SDL_LogInfo + * \sa SDL_LogMessage + * \sa SDL_LogVerbose + * \sa SDL_LogWarn + */ +extern DECLSPEC void SDLCALL SDL_LogMessageV(int category, + SDL_LogPriority priority, + SDL_PRINTF_FORMAT_STRING const char *fmt, va_list ap) SDL_PRINTF_VARARG_FUNCV(3); + +/** + * The prototype for the log output callback function. + * + * This function is called by SDL when there is new text to be logged. + * + * \param userdata what was passed as `userdata` to + * SDL_LogSetOutputFunction(). + * \param category the category of the message. + * \param priority the priority of the message. + * \param message the message being output. + */ +typedef void (SDLCALL *SDL_LogOutputFunction)(void *userdata, int category, SDL_LogPriority priority, const char *message); + +/** + * Get the current log output function. + * + * \param callback an SDL_LogOutputFunction filled in with the current log + * callback. + * \param userdata a pointer filled in with the pointer that is passed to + * `callback`. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_LogSetOutputFunction + */ +extern DECLSPEC void SDLCALL SDL_LogGetOutputFunction(SDL_LogOutputFunction *callback, void **userdata); + +/** + * Replace the default log output function with one of your own. + * + * \param callback an SDL_LogOutputFunction to call instead of the default. + * \param userdata a pointer that is passed to `callback`. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_LogGetOutputFunction + */ +extern DECLSPEC void SDLCALL SDL_LogSetOutputFunction(SDL_LogOutputFunction callback, void *userdata); + + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include "close_code.h" + +#endif /* SDL_log_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/third_party/tlRender-install-Release/include/SDL2/SDL_main.h b/third_party/tlRender-install-Release/include/SDL2/SDL_main.h new file mode 100644 index 00000000..a1ef3e74 --- /dev/null +++ b/third_party/tlRender-install-Release/include/SDL2/SDL_main.h @@ -0,0 +1,282 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2025 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +#ifndef SDL_main_h_ +#define SDL_main_h_ + +#include "SDL_stdinc.h" + +/** + * # CategoryMain + * + * Redefine main() on some platforms so that it is called by SDL. + */ + +#ifndef SDL_MAIN_HANDLED +#if defined(__WIN32__) +/* On Windows SDL provides WinMain(), which parses the command line and passes + the arguments to your main function. + + If you provide your own WinMain(), you may define SDL_MAIN_HANDLED + */ +#define SDL_MAIN_AVAILABLE + +#elif defined(__WINRT__) +/* On WinRT, SDL provides a main function that initializes CoreApplication, + creating an instance of IFrameworkView in the process. + + Please note that #include'ing SDL_main.h is not enough to get a main() + function working. In non-XAML apps, the file, + src/main/winrt/SDL_WinRT_main_NonXAML.cpp, or a copy of it, must be compiled + into the app itself. In XAML apps, the function, SDL_WinRTRunApp must be + called, with a pointer to the Direct3D-hosted XAML control passed in. +*/ +#define SDL_MAIN_NEEDED + +#elif defined(__GDK__) +/* On GDK, SDL provides a main function that initializes the game runtime. + + Please note that #include'ing SDL_main.h is not enough to get a main() + function working. You must either link against SDL2main or, if not possible, + call the SDL_GDKRunApp function from your entry point. +*/ +#define SDL_MAIN_NEEDED + +#elif defined(__IPHONEOS__) +/* On iOS SDL provides a main function that creates an application delegate + and starts the iOS application run loop. + + If you link with SDL dynamically on iOS, the main function can't be in a + shared library, so you need to link with libSDLmain.a, which includes a + stub main function that calls into the shared library to start execution. + + See src/video/uikit/SDL_uikitappdelegate.m for more details. + */ +#define SDL_MAIN_NEEDED + +#elif defined(__ANDROID__) +/* On Android SDL provides a Java class in SDLActivity.java that is the + main activity entry point. + + See docs/README-android.md for more details on extending that class. + */ +#define SDL_MAIN_NEEDED + +/* We need to export SDL_main so it can be launched from Java */ +#define SDLMAIN_DECLSPEC DECLSPEC + +#elif defined(__NACL__) +/* On NACL we use ppapi_simple to set up the application helper code, + then wait for the first PSE_INSTANCE_DIDCHANGEVIEW event before + starting the user main function. + All user code is run in a separate thread by ppapi_simple, thus + allowing for blocking io to take place via nacl_io +*/ +#define SDL_MAIN_NEEDED + +#elif defined(__PSP__) +/* On PSP SDL provides a main function that sets the module info, + activates the GPU and starts the thread required to be able to exit + the software. + + If you provide this yourself, you may define SDL_MAIN_HANDLED + */ +#define SDL_MAIN_AVAILABLE + +#elif defined(__PS2__) +#define SDL_MAIN_AVAILABLE + +#define SDL_PS2_SKIP_IOP_RESET() \ + void reset_IOP(); \ + void reset_IOP() {} + +#elif defined(__3DS__) +/* + On N3DS, SDL provides a main function that sets up the screens + and storage. + + If you provide this yourself, you may define SDL_MAIN_HANDLED +*/ +#define SDL_MAIN_AVAILABLE + +#endif +#endif /* SDL_MAIN_HANDLED */ + +#ifndef SDLMAIN_DECLSPEC +#define SDLMAIN_DECLSPEC +#endif + +/** + * \file SDL_main.h + * + * The application's main() function must be called with C linkage, + * and should be declared like this: + * ```c + * #ifdef __cplusplus + * extern "C" + * #endif + * int main(int argc, char *argv[]) + * { + * } + * ``` + */ + +#if defined(SDL_MAIN_NEEDED) || defined(SDL_MAIN_AVAILABLE) +#define main SDL_main +#endif + +#include "begin_code.h" +#ifdef __cplusplus +extern "C" { +#endif + +/** + * The prototype for the application's main() function + */ +typedef int (*SDL_main_func)(int argc, char *argv[]); +extern SDLMAIN_DECLSPEC int SDL_main(int argc, char *argv[]); + + +/** + * Circumvent failure of SDL_Init() when not using SDL_main() as an entry + * point. + * + * This function is defined in SDL_main.h, along with the preprocessor rule to + * redefine main() as SDL_main(). Thus to ensure that your main() function + * will not be changed it is necessary to define SDL_MAIN_HANDLED before + * including SDL.h. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_Init + */ +extern DECLSPEC void SDLCALL SDL_SetMainReady(void); + +#if defined(__WIN32__) || defined(__GDK__) + +/** + * Register a win32 window class for SDL's use. + * + * This can be called to set the application window class at startup. It is + * safe to call this multiple times, as long as every call is eventually + * paired with a call to SDL_UnregisterApp, but a second registration attempt + * while a previous registration is still active will be ignored, other than + * to increment a counter. + * + * Most applications do not need to, and should not, call this directly; SDL + * will call it when initializing the video subsystem. + * + * \param name the window class name, in UTF-8 encoding. If NULL, SDL + * currently uses "SDL_app" but this isn't guaranteed. + * \param style the value to use in WNDCLASSEX::style. If `name` is NULL, SDL + * currently uses `(CS_BYTEALIGNCLIENT | CS_OWNDC)` regardless of + * what is specified here. + * \param hInst the HINSTANCE to use in WNDCLASSEX::hInstance. If zero, SDL + * will use `GetModuleHandle(NULL)` instead. + * \returns 0 on success, -1 on error. SDL_GetError() may have details. + * + * \since This function is available since SDL 2.0.2. + */ +extern DECLSPEC int SDLCALL SDL_RegisterApp(const char *name, Uint32 style, void *hInst); + +/** + * Deregister the win32 window class from an SDL_RegisterApp call. + * + * This can be called to undo the effects of SDL_RegisterApp. + * + * Most applications do not need to, and should not, call this directly; SDL + * will call it when deinitializing the video subsystem. + * + * It is safe to call this multiple times, as long as every call is eventually + * paired with a prior call to SDL_RegisterApp. The window class will only be + * deregistered when the registration counter in SDL_RegisterApp decrements to + * zero through calls to this function. + * + * \since This function is available since SDL 2.0.2. + */ +extern DECLSPEC void SDLCALL SDL_UnregisterApp(void); + +#endif /* defined(__WIN32__) || defined(__GDK__) */ + + +#ifdef __WINRT__ + +/** + * Initialize and launch an SDL/WinRT application. + * + * \param mainFunction the SDL app's C-style main(), an SDL_main_func. + * \param reserved reserved for future use; should be NULL. + * \returns 0 on success or -1 on failure; call SDL_GetError() to retrieve + * more information on the failure. + * + * \since This function is available since SDL 2.0.3. + */ +extern DECLSPEC int SDLCALL SDL_WinRTRunApp(SDL_main_func mainFunction, void * reserved); + +#endif /* __WINRT__ */ + +#if defined(__IPHONEOS__) + +/** + * Initializes and launches an SDL application. + * + * \param argc The argc parameter from the application's main() function. + * \param argv The argv parameter from the application's main() function. + * \param mainFunction The SDL app's C-style main(), an SDL_main_func. + * \return the return value from mainFunction. + * + * \since This function is available since SDL 2.0.10. + */ +extern DECLSPEC int SDLCALL SDL_UIKitRunApp(int argc, char *argv[], SDL_main_func mainFunction); + +#endif /* __IPHONEOS__ */ + +#ifdef __GDK__ + +/** + * Initialize and launch an SDL GDK application. + * + * \param mainFunction the SDL app's C-style main(), an SDL_main_func. + * \param reserved reserved for future use; should be NULL. + * \returns 0 on success or -1 on failure; call SDL_GetError() to retrieve + * more information on the failure. + * + * \since This function is available since SDL 2.24.0. + */ +extern DECLSPEC int SDLCALL SDL_GDKRunApp(SDL_main_func mainFunction, void *reserved); + +/** + * Callback from the application to let the suspend continue. + * + * \since This function is available since SDL 2.28.0. + */ +extern DECLSPEC void SDLCALL SDL_GDKSuspendComplete(void); + +#endif /* __GDK__ */ + +#ifdef __cplusplus +} +#endif +#include "close_code.h" + +#endif /* SDL_main_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/third_party/tlRender-install-Release/include/SDL2/SDL_messagebox.h b/third_party/tlRender-install-Release/include/SDL2/SDL_messagebox.h new file mode 100644 index 00000000..725d4124 --- /dev/null +++ b/third_party/tlRender-install-Release/include/SDL2/SDL_messagebox.h @@ -0,0 +1,196 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2025 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +#ifndef SDL_messagebox_h_ +#define SDL_messagebox_h_ + +#include "SDL_stdinc.h" +#include "SDL_video.h" /* For SDL_Window */ + +#include "begin_code.h" +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/** + * SDL_MessageBox flags. + * + * If supported will display warning icon, etc. + */ +typedef enum SDL_MessageBoxFlags +{ + SDL_MESSAGEBOX_ERROR = 0x00000010, /**< error dialog */ + SDL_MESSAGEBOX_WARNING = 0x00000020, /**< warning dialog */ + SDL_MESSAGEBOX_INFORMATION = 0x00000040, /**< informational dialog */ + SDL_MESSAGEBOX_BUTTONS_LEFT_TO_RIGHT = 0x00000080, /**< buttons placed left to right */ + SDL_MESSAGEBOX_BUTTONS_RIGHT_TO_LEFT = 0x00000100 /**< buttons placed right to left */ +} SDL_MessageBoxFlags; + +/** + * Flags for SDL_MessageBoxButtonData. + */ +typedef enum SDL_MessageBoxButtonFlags +{ + SDL_MESSAGEBOX_BUTTON_RETURNKEY_DEFAULT = 0x00000001, /**< Marks the default button when return is hit */ + SDL_MESSAGEBOX_BUTTON_ESCAPEKEY_DEFAULT = 0x00000002 /**< Marks the default button when escape is hit */ +} SDL_MessageBoxButtonFlags; + +/** + * Individual button data. + */ +typedef struct SDL_MessageBoxButtonData +{ + Uint32 flags; /**< SDL_MessageBoxButtonFlags */ + int buttonid; /**< User defined button id (value returned via SDL_ShowMessageBox) */ + const char * text; /**< The UTF-8 button text */ +} SDL_MessageBoxButtonData; + +/** + * RGB value used in a message box color scheme + */ +typedef struct SDL_MessageBoxColor +{ + Uint8 r, g, b; +} SDL_MessageBoxColor; + +typedef enum SDL_MessageBoxColorType +{ + SDL_MESSAGEBOX_COLOR_BACKGROUND, + SDL_MESSAGEBOX_COLOR_TEXT, + SDL_MESSAGEBOX_COLOR_BUTTON_BORDER, + SDL_MESSAGEBOX_COLOR_BUTTON_BACKGROUND, + SDL_MESSAGEBOX_COLOR_BUTTON_SELECTED, + SDL_MESSAGEBOX_COLOR_MAX +} SDL_MessageBoxColorType; + +/** + * A set of colors to use for message box dialogs + */ +typedef struct SDL_MessageBoxColorScheme +{ + SDL_MessageBoxColor colors[SDL_MESSAGEBOX_COLOR_MAX]; +} SDL_MessageBoxColorScheme; + +/** + * MessageBox structure containing title, text, window, etc. + */ +typedef struct SDL_MessageBoxData +{ + Uint32 flags; /**< SDL_MessageBoxFlags */ + SDL_Window *window; /**< Parent window, can be NULL */ + const char *title; /**< UTF-8 title */ + const char *message; /**< UTF-8 message text */ + + int numbuttons; + const SDL_MessageBoxButtonData *buttons; + + const SDL_MessageBoxColorScheme *colorScheme; /**< SDL_MessageBoxColorScheme, can be NULL to use system settings */ +} SDL_MessageBoxData; + +/** + * Create a modal message box. + * + * If your needs aren't complex, it might be easier to use + * SDL_ShowSimpleMessageBox. + * + * This function should be called on the thread that created the parent + * window, or on the main thread if the messagebox has no parent. It will + * block execution of that thread until the user clicks a button or closes the + * messagebox. + * + * This function may be called at any time, even before SDL_Init(). This makes + * it useful for reporting errors like a failure to create a renderer or + * OpenGL context. + * + * On X11, SDL rolls its own dialog box with X11 primitives instead of a + * formal toolkit like GTK+ or Qt. + * + * Note that if SDL_Init() would fail because there isn't any available video + * target, this function is likely to fail for the same reasons. If this is a + * concern, check the return value from this function and fall back to writing + * to stderr if you can. + * + * \param messageboxdata the SDL_MessageBoxData structure with title, text and + * other options. + * \param buttonid the pointer to which user id of hit button should be + * copied. + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_ShowSimpleMessageBox + */ +extern DECLSPEC int SDLCALL SDL_ShowMessageBox(const SDL_MessageBoxData *messageboxdata, int *buttonid); + +/** + * Display a simple modal message box. + * + * If your needs aren't complex, this function is preferred over + * SDL_ShowMessageBox. + * + * `flags` may be any of the following: + * + * - `SDL_MESSAGEBOX_ERROR`: error dialog + * - `SDL_MESSAGEBOX_WARNING`: warning dialog + * - `SDL_MESSAGEBOX_INFORMATION`: informational dialog + * + * This function should be called on the thread that created the parent + * window, or on the main thread if the messagebox has no parent. It will + * block execution of that thread until the user clicks a button or closes the + * messagebox. + * + * This function may be called at any time, even before SDL_Init(). This makes + * it useful for reporting errors like a failure to create a renderer or + * OpenGL context. + * + * On X11, SDL rolls its own dialog box with X11 primitives instead of a + * formal toolkit like GTK+ or Qt. + * + * Note that if SDL_Init() would fail because there isn't any available video + * target, this function is likely to fail for the same reasons. If this is a + * concern, check the return value from this function and fall back to writing + * to stderr if you can. + * + * \param flags an SDL_MessageBoxFlags value. + * \param title UTF-8 title text. + * \param message UTF-8 message text. + * \param window the parent window, or NULL for no parent. + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_ShowMessageBox + */ +extern DECLSPEC int SDLCALL SDL_ShowSimpleMessageBox(Uint32 flags, const char *title, const char *message, SDL_Window *window); + + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include "close_code.h" + +#endif /* SDL_messagebox_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/third_party/tlRender-install-Release/include/SDL2/SDL_metal.h b/third_party/tlRender-install-Release/include/SDL2/SDL_metal.h new file mode 100644 index 00000000..d3f21d5e --- /dev/null +++ b/third_party/tlRender-install-Release/include/SDL2/SDL_metal.h @@ -0,0 +1,114 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2025 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +/** + * # CategoryMetal + * + * Header file for functions to creating Metal layers and views on SDL + * windows. + */ + +#ifndef SDL_metal_h_ +#define SDL_metal_h_ + +#include "SDL_video.h" + +#include "begin_code.h" +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/** + * A handle to a CAMetalLayer-backed NSView (macOS) or UIView (iOS/tvOS). + * + * This can be cast directly to an NSView or UIView. + */ +typedef void *SDL_MetalView; + +/** + * \name Metal support functions + */ +/* @{ */ + +/** + * Create a CAMetalLayer-backed NSView/UIView and attach it to the specified + * window. + * + * On macOS, this does *not* associate a MTLDevice with the CAMetalLayer on + * its own. It is up to user code to do that. + * + * The returned handle can be casted directly to a NSView or UIView. To access + * the backing CAMetalLayer, call SDL_Metal_GetLayer(). + * + * \since This function is available since SDL 2.0.12. + * + * \sa SDL_Metal_DestroyView + * \sa SDL_Metal_GetLayer + */ +extern DECLSPEC SDL_MetalView SDLCALL SDL_Metal_CreateView(SDL_Window * window); + +/** + * Destroy an existing SDL_MetalView object. + * + * This should be called before SDL_DestroyWindow, if SDL_Metal_CreateView was + * called after SDL_CreateWindow. + * + * \since This function is available since SDL 2.0.12. + * + * \sa SDL_Metal_CreateView + */ +extern DECLSPEC void SDLCALL SDL_Metal_DestroyView(SDL_MetalView view); + +/** + * Get a pointer to the backing CAMetalLayer for the given view. + * + * \since This function is available since SDL 2.0.14. + * + * \sa SDL_Metal_CreateView + */ +extern DECLSPEC void *SDLCALL SDL_Metal_GetLayer(SDL_MetalView view); + +/** + * Get the size of a window's underlying drawable in pixels (for use with + * setting viewport, scissor & etc). + * + * \param window SDL_Window from which the drawable size should be queried. + * \param w Pointer to variable for storing the width in pixels, may be NULL. + * \param h Pointer to variable for storing the height in pixels, may be NULL. + * + * \since This function is available since SDL 2.0.14. + * + * \sa SDL_GetWindowSize + * \sa SDL_CreateWindow + */ +extern DECLSPEC void SDLCALL SDL_Metal_GetDrawableSize(SDL_Window* window, int *w, + int *h); + +/* @} *//* Metal support functions */ + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include "close_code.h" + +#endif /* SDL_metal_h_ */ diff --git a/third_party/tlRender-install-Release/include/SDL2/SDL_misc.h b/third_party/tlRender-install-Release/include/SDL2/SDL_misc.h new file mode 100644 index 00000000..86a82bc5 --- /dev/null +++ b/third_party/tlRender-install-Release/include/SDL2/SDL_misc.h @@ -0,0 +1,79 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2025 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +/** + * # CategoryMisc + * + * Include file for SDL API functions that don't fit elsewhere. + */ + +#ifndef SDL_misc_h_ +#define SDL_misc_h_ + +#include "SDL_stdinc.h" + +#include "begin_code.h" + +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/** + * Open a URL/URI in the browser or other appropriate external application. + * + * Open a URL in a separate, system-provided application. How this works will + * vary wildly depending on the platform. This will likely launch what makes + * sense to handle a specific URL's protocol (a web browser for `http://`, + * etc), but it might also be able to launch file managers for directories and + * other things. + * + * What happens when you open a URL varies wildly as well: your game window + * may lose focus (and may or may not lose focus if your game was fullscreen + * or grabbing input at the time). On mobile devices, your app will likely + * move to the background or your process might be paused. Any given platform + * may or may not handle a given URL. + * + * If this is unimplemented (or simply unavailable) for a platform, this will + * fail with an error. A successful result does not mean the URL loaded, just + * that we launched _something_ to handle it (or at least believe we did). + * + * All this to say: this function can be useful, but you should definitely + * test it on every platform you target. + * + * \param url A valid URL/URI to open. Use `file:///full/path/to/file` for + * local files, if supported. + * \returns 0 on success, or -1 on error; call SDL_GetError() for more + * information. + * + * \since This function is available since SDL 2.0.14. + */ +extern DECLSPEC int SDLCALL SDL_OpenURL(const char *url); + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include "close_code.h" + +#endif /* SDL_misc_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/third_party/tlRender-install-Release/include/SDL2/SDL_mouse.h b/third_party/tlRender-install-Release/include/SDL2/SDL_mouse.h new file mode 100644 index 00000000..628b7a2f --- /dev/null +++ b/third_party/tlRender-install-Release/include/SDL2/SDL_mouse.h @@ -0,0 +1,464 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2025 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +/** + * # CategoryMouse + * + * Include file for SDL mouse event handling. + */ + +#ifndef SDL_mouse_h_ +#define SDL_mouse_h_ + +#include "SDL_stdinc.h" +#include "SDL_error.h" +#include "SDL_video.h" + +#include "begin_code.h" +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct SDL_Cursor SDL_Cursor; /**< Implementation dependent */ + +/** + * Cursor types for SDL_CreateSystemCursor(). + */ +typedef enum SDL_SystemCursor +{ + SDL_SYSTEM_CURSOR_ARROW, /**< Arrow */ + SDL_SYSTEM_CURSOR_IBEAM, /**< I-beam */ + SDL_SYSTEM_CURSOR_WAIT, /**< Wait */ + SDL_SYSTEM_CURSOR_CROSSHAIR, /**< Crosshair */ + SDL_SYSTEM_CURSOR_WAITARROW, /**< Small wait cursor (or Wait if not available) */ + SDL_SYSTEM_CURSOR_SIZENWSE, /**< Double arrow pointing northwest and southeast */ + SDL_SYSTEM_CURSOR_SIZENESW, /**< Double arrow pointing northeast and southwest */ + SDL_SYSTEM_CURSOR_SIZEWE, /**< Double arrow pointing west and east */ + SDL_SYSTEM_CURSOR_SIZENS, /**< Double arrow pointing north and south */ + SDL_SYSTEM_CURSOR_SIZEALL, /**< Four pointed arrow pointing north, south, east, and west */ + SDL_SYSTEM_CURSOR_NO, /**< Slashed circle or crossbones */ + SDL_SYSTEM_CURSOR_HAND, /**< Hand */ + SDL_NUM_SYSTEM_CURSORS +} SDL_SystemCursor; + +/** + * Scroll direction types for the Scroll event + */ +typedef enum SDL_MouseWheelDirection +{ + SDL_MOUSEWHEEL_NORMAL, /**< The scroll direction is normal */ + SDL_MOUSEWHEEL_FLIPPED /**< The scroll direction is flipped / natural */ +} SDL_MouseWheelDirection; + +/* Function prototypes */ + +/** + * Get the window which currently has mouse focus. + * + * \returns the window with mouse focus. + * + * \since This function is available since SDL 2.0.0. + */ +extern DECLSPEC SDL_Window * SDLCALL SDL_GetMouseFocus(void); + +/** + * Retrieve the current state of the mouse. + * + * The current button state is returned as a button bitmask, which can be + * tested using the `SDL_BUTTON(X)` macros (where `X` is generally 1 for the + * left, 2 for middle, 3 for the right button), and `x` and `y` are set to the + * mouse cursor position relative to the focus window. You can pass NULL for + * either `x` or `y`. + * + * \param x the x coordinate of the mouse cursor position relative to the + * focus window. + * \param y the y coordinate of the mouse cursor position relative to the + * focus window. + * \returns a 32-bit button bitmask of the current button state. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetGlobalMouseState + * \sa SDL_GetRelativeMouseState + * \sa SDL_PumpEvents + */ +extern DECLSPEC Uint32 SDLCALL SDL_GetMouseState(int *x, int *y); + +/** + * Get the current state of the mouse in relation to the desktop. + * + * This works similarly to SDL_GetMouseState(), but the coordinates will be + * reported relative to the top-left of the desktop. This can be useful if you + * need to track the mouse outside of a specific window and SDL_CaptureMouse() + * doesn't fit your needs. For example, it could be useful if you need to + * track the mouse while dragging a window, where coordinates relative to a + * window might not be in sync at all times. + * + * Note: SDL_GetMouseState() returns the mouse position as SDL understands it + * from the last pump of the event queue. This function, however, queries the + * OS for the current mouse position, and as such, might be a slightly less + * efficient function. Unless you know what you're doing and have a good + * reason to use this function, you probably want SDL_GetMouseState() instead. + * + * \param x filled in with the current X coord relative to the desktop; can be + * NULL. + * \param y filled in with the current Y coord relative to the desktop; can be + * NULL. + * \returns the current button state as a bitmask which can be tested using + * the SDL_BUTTON(X) macros. + * + * \since This function is available since SDL 2.0.4. + * + * \sa SDL_CaptureMouse + */ +extern DECLSPEC Uint32 SDLCALL SDL_GetGlobalMouseState(int *x, int *y); + +/** + * Retrieve the relative state of the mouse. + * + * The current button state is returned as a button bitmask, which can be + * tested using the `SDL_BUTTON(X)` macros (where `X` is generally 1 for the + * left, 2 for middle, 3 for the right button), and `x` and `y` are set to the + * mouse deltas since the last call to SDL_GetRelativeMouseState() or since + * event initialization. You can pass NULL for either `x` or `y`. + * + * \param x a pointer filled with the last recorded x coordinate of the mouse. + * \param y a pointer filled with the last recorded y coordinate of the mouse. + * \returns a 32-bit button bitmask of the relative button state. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetMouseState + */ +extern DECLSPEC Uint32 SDLCALL SDL_GetRelativeMouseState(int *x, int *y); + +/** + * Move the mouse cursor to the given position within the window. + * + * This function generates a mouse motion event if relative mode is not + * enabled. If relative mode is enabled, you can force mouse events for the + * warp by setting the SDL_HINT_MOUSE_RELATIVE_WARP_MOTION hint. + * + * Note that this function will appear to succeed, but not actually move the + * mouse when used over Microsoft Remote Desktop. + * + * \param window the window to move the mouse into, or NULL for the current + * mouse focus. + * \param x the x coordinate within the window. + * \param y the y coordinate within the window. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_WarpMouseGlobal + */ +extern DECLSPEC void SDLCALL SDL_WarpMouseInWindow(SDL_Window * window, + int x, int y); + +/** + * Move the mouse to the given position in global screen space. + * + * This function generates a mouse motion event. + * + * A failure of this function usually means that it is unsupported by a + * platform. + * + * Note that this function will appear to succeed, but not actually move the + * mouse when used over Microsoft Remote Desktop. + * + * \param x the x coordinate. + * \param y the y coordinate. + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.4. + * + * \sa SDL_WarpMouseInWindow + */ +extern DECLSPEC int SDLCALL SDL_WarpMouseGlobal(int x, int y); + +/** + * Set relative mouse mode. + * + * While the mouse is in relative mode, the cursor is hidden, the mouse + * position is constrained to the window, and SDL will report continuous + * relative mouse motion even if the mouse is at the edge of the window. + * + * This function will flush any pending mouse motion. + * + * \param enabled SDL_TRUE to enable relative mode, SDL_FALSE to disable. + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * If relative mode is not supported, this returns -1. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetRelativeMouseMode + */ +extern DECLSPEC int SDLCALL SDL_SetRelativeMouseMode(SDL_bool enabled); + +/** + * Capture the mouse and to track input outside an SDL window. + * + * Capturing enables your app to obtain mouse events globally, instead of just + * within your window. Not all video targets support this function. When + * capturing is enabled, the current window will get all mouse events, but + * unlike relative mode, no change is made to the cursor and it is not + * restrained to your window. + * + * This function may also deny mouse input to other windows--both those in + * your application and others on the system--so you should use this function + * sparingly, and in small bursts. For example, you might want to track the + * mouse while the user is dragging something, until the user releases a mouse + * button. It is not recommended that you capture the mouse for long periods + * of time, such as the entire time your app is running. For that, you should + * probably use SDL_SetRelativeMouseMode() or SDL_SetWindowGrab(), depending + * on your goals. + * + * While captured, mouse events still report coordinates relative to the + * current (foreground) window, but those coordinates may be outside the + * bounds of the window (including negative values). Capturing is only allowed + * for the foreground window. If the window loses focus while capturing, the + * capture will be disabled automatically. + * + * While capturing is enabled, the current window will have the + * `SDL_WINDOW_MOUSE_CAPTURE` flag set. + * + * Please note that as of SDL 2.0.22, SDL will attempt to "auto capture" the + * mouse while the user is pressing a button; this is to try and make mouse + * behavior more consistent between platforms, and deal with the common case + * of a user dragging the mouse outside of the window. This means that if you + * are calling SDL_CaptureMouse() only to deal with this situation, you no + * longer have to (although it is safe to do so). If this causes problems for + * your app, you can disable auto capture by setting the + * `SDL_HINT_MOUSE_AUTO_CAPTURE` hint to zero. + * + * \param enabled SDL_TRUE to enable capturing, SDL_FALSE to disable. + * \returns 0 on success or -1 if not supported; call SDL_GetError() for more + * information. + * + * \since This function is available since SDL 2.0.4. + * + * \sa SDL_GetGlobalMouseState + */ +extern DECLSPEC int SDLCALL SDL_CaptureMouse(SDL_bool enabled); + +/** + * Query whether relative mouse mode is enabled. + * + * \returns SDL_TRUE if relative mode is enabled or SDL_FALSE otherwise. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_SetRelativeMouseMode + */ +extern DECLSPEC SDL_bool SDLCALL SDL_GetRelativeMouseMode(void); + +/** + * Create a cursor using the specified bitmap data and mask (in MSB format). + * + * `mask` has to be in MSB (Most Significant Bit) format. + * + * The cursor width (`w`) must be a multiple of 8 bits. + * + * The cursor is created in black and white according to the following: + * + * - data=0, mask=1: white + * - data=1, mask=1: black + * - data=0, mask=0: transparent + * - data=1, mask=0: inverted color if possible, black if not. + * + * Cursors created with this function must be freed with SDL_FreeCursor(). + * + * If you want to have a color cursor, or create your cursor from an + * SDL_Surface, you should use SDL_CreateColorCursor(). Alternately, you can + * hide the cursor and draw your own as part of your game's rendering, but it + * will be bound to the framerate. + * + * Also, since SDL 2.0.0, SDL_CreateSystemCursor() is available, which + * provides twelve readily available system cursors to pick from. + * + * \param data the color value for each pixel of the cursor. + * \param mask the mask value for each pixel of the cursor. + * \param w the width of the cursor. + * \param h the height of the cursor. + * \param hot_x the X-axis location of the upper left corner of the cursor + * relative to the actual mouse position. + * \param hot_y the Y-axis location of the upper left corner of the cursor + * relative to the actual mouse position. + * \returns a new cursor with the specified parameters on success or NULL on + * failure; call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_FreeCursor + * \sa SDL_SetCursor + * \sa SDL_ShowCursor + */ +extern DECLSPEC SDL_Cursor *SDLCALL SDL_CreateCursor(const Uint8 * data, + const Uint8 * mask, + int w, int h, int hot_x, + int hot_y); + +/** + * Create a color cursor. + * + * \param surface an SDL_Surface structure representing the cursor image. + * \param hot_x the x position of the cursor hot spot. + * \param hot_y the y position of the cursor hot spot. + * \returns the new cursor on success or NULL on failure; call SDL_GetError() + * for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CreateCursor + * \sa SDL_FreeCursor + */ +extern DECLSPEC SDL_Cursor *SDLCALL SDL_CreateColorCursor(SDL_Surface *surface, + int hot_x, + int hot_y); + +/** + * Create a system cursor. + * + * \param id an SDL_SystemCursor enum value. + * \returns a cursor on success or NULL on failure; call SDL_GetError() for + * more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_FreeCursor + */ +extern DECLSPEC SDL_Cursor *SDLCALL SDL_CreateSystemCursor(SDL_SystemCursor id); + +/** + * Set the active cursor. + * + * This function sets the currently active cursor to the specified one. If the + * cursor is currently visible, the change will be immediately represented on + * the display. SDL_SetCursor(NULL) can be used to force cursor redraw, if + * this is desired for any reason. + * + * \param cursor a cursor to make active. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CreateCursor + * \sa SDL_GetCursor + * \sa SDL_ShowCursor + */ +extern DECLSPEC void SDLCALL SDL_SetCursor(SDL_Cursor * cursor); + +/** + * Get the active cursor. + * + * This function returns a pointer to the current cursor which is owned by the + * library. It is not necessary to free the cursor with SDL_FreeCursor(). + * + * \returns the active cursor or NULL if there is no mouse. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_SetCursor + */ +extern DECLSPEC SDL_Cursor *SDLCALL SDL_GetCursor(void); + +/** + * Get the default cursor. + * + * You do not have to call SDL_FreeCursor() on the return value, but it is + * safe to do so. + * + * \returns the default cursor on success or NULL on failure. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CreateSystemCursor + */ +extern DECLSPEC SDL_Cursor *SDLCALL SDL_GetDefaultCursor(void); + +/** + * Free a previously-created cursor. + * + * Use this function to free cursor resources created with SDL_CreateCursor(), + * SDL_CreateColorCursor() or SDL_CreateSystemCursor(). + * + * \param cursor the cursor to free. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CreateColorCursor + * \sa SDL_CreateCursor + * \sa SDL_CreateSystemCursor + */ +extern DECLSPEC void SDLCALL SDL_FreeCursor(SDL_Cursor * cursor); + +/** + * Toggle whether or not the cursor is shown. + * + * The cursor starts off displayed but can be turned off. Passing `SDL_ENABLE` + * displays the cursor and passing `SDL_DISABLE` hides it. + * + * The current state of the mouse cursor can be queried by passing + * `SDL_QUERY`; either `SDL_DISABLE` or `SDL_ENABLE` will be returned. + * + * \param toggle `SDL_ENABLE` to show the cursor, `SDL_DISABLE` to hide it, + * `SDL_QUERY` to query the current state without changing it. + * \returns `SDL_ENABLE` if the cursor is shown, or `SDL_DISABLE` if the + * cursor is hidden, or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CreateCursor + * \sa SDL_SetCursor + */ +extern DECLSPEC int SDLCALL SDL_ShowCursor(int toggle); + +/** + * Used as a mask when testing buttons in buttonstate. + * + * - Button 1: Left mouse button + * - Button 2: Middle mouse button + * - Button 3: Right mouse button + */ +#define SDL_BUTTON(X) (1 << ((X)-1)) +#define SDL_BUTTON_LEFT 1 +#define SDL_BUTTON_MIDDLE 2 +#define SDL_BUTTON_RIGHT 3 +#define SDL_BUTTON_X1 4 +#define SDL_BUTTON_X2 5 +#define SDL_BUTTON_LMASK SDL_BUTTON(SDL_BUTTON_LEFT) +#define SDL_BUTTON_MMASK SDL_BUTTON(SDL_BUTTON_MIDDLE) +#define SDL_BUTTON_RMASK SDL_BUTTON(SDL_BUTTON_RIGHT) +#define SDL_BUTTON_X1MASK SDL_BUTTON(SDL_BUTTON_X1) +#define SDL_BUTTON_X2MASK SDL_BUTTON(SDL_BUTTON_X2) + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include "close_code.h" + +#endif /* SDL_mouse_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/third_party/tlRender-install-Release/include/SDL2/SDL_mutex.h b/third_party/tlRender-install-Release/include/SDL2/SDL_mutex.h new file mode 100644 index 00000000..0fe3eb5a --- /dev/null +++ b/third_party/tlRender-install-Release/include/SDL2/SDL_mutex.h @@ -0,0 +1,545 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2025 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +#ifndef SDL_mutex_h_ +#define SDL_mutex_h_ + +/** + * # CategoryMutex + * + * Functions to provide thread synchronization primitives. + */ + +#include "SDL_stdinc.h" +#include "SDL_error.h" + +/******************************************************************************/ +/* Enable thread safety attributes only with clang. + * The attributes can be safely erased when compiling with other compilers. + */ +#if defined(SDL_THREAD_SAFETY_ANALYSIS) && \ + defined(__clang__) && (!defined(SWIG)) +#define SDL_THREAD_ANNOTATION_ATTRIBUTE__(x) __attribute__((x)) +#else +#define SDL_THREAD_ANNOTATION_ATTRIBUTE__(x) /* no-op */ +#endif + +#define SDL_CAPABILITY(x) \ + SDL_THREAD_ANNOTATION_ATTRIBUTE__(capability(x)) + +#define SDL_SCOPED_CAPABILITY \ + SDL_THREAD_ANNOTATION_ATTRIBUTE__(scoped_lockable) + +#define SDL_GUARDED_BY(x) \ + SDL_THREAD_ANNOTATION_ATTRIBUTE__(guarded_by(x)) + +#define SDL_PT_GUARDED_BY(x) \ + SDL_THREAD_ANNOTATION_ATTRIBUTE__(pt_guarded_by(x)) + +#define SDL_ACQUIRED_BEFORE(x) \ + SDL_THREAD_ANNOTATION_ATTRIBUTE__(acquired_before(x)) + +#define SDL_ACQUIRED_AFTER(x) \ + SDL_THREAD_ANNOTATION_ATTRIBUTE__(acquired_after(x)) + +#define SDL_REQUIRES(x) \ + SDL_THREAD_ANNOTATION_ATTRIBUTE__(requires_capability(x)) + +#define SDL_REQUIRES_SHARED(x) \ + SDL_THREAD_ANNOTATION_ATTRIBUTE__(requires_shared_capability(x)) + +#define SDL_ACQUIRE(x) \ + SDL_THREAD_ANNOTATION_ATTRIBUTE__(acquire_capability(x)) + +#define SDL_ACQUIRE_SHARED(x) \ + SDL_THREAD_ANNOTATION_ATTRIBUTE__(acquire_shared_capability(x)) + +#define SDL_RELEASE(x) \ + SDL_THREAD_ANNOTATION_ATTRIBUTE__(release_capability(x)) + +#define SDL_RELEASE_SHARED(x) \ + SDL_THREAD_ANNOTATION_ATTRIBUTE__(release_shared_capability(x)) + +#define SDL_RELEASE_GENERIC(x) \ + SDL_THREAD_ANNOTATION_ATTRIBUTE__(release_generic_capability(x)) + +#define SDL_TRY_ACQUIRE(x, y) \ + SDL_THREAD_ANNOTATION_ATTRIBUTE__(try_acquire_capability(x, y)) + +#define SDL_TRY_ACQUIRE_SHARED(x, y) \ + SDL_THREAD_ANNOTATION_ATTRIBUTE__(try_acquire_shared_capability(x, y)) + +#define SDL_EXCLUDES(x) \ + SDL_THREAD_ANNOTATION_ATTRIBUTE__(locks_excluded(x)) + +#define SDL_ASSERT_CAPABILITY(x) \ + SDL_THREAD_ANNOTATION_ATTRIBUTE__(assert_capability(x)) + +#define SDL_ASSERT_SHARED_CAPABILITY(x) \ + SDL_THREAD_ANNOTATION_ATTRIBUTE__(assert_shared_capability(x)) + +#define SDL_RETURN_CAPABILITY(x) \ + SDL_THREAD_ANNOTATION_ATTRIBUTE__(lock_returned(x)) + +#define SDL_NO_THREAD_SAFETY_ANALYSIS \ + SDL_THREAD_ANNOTATION_ATTRIBUTE__(no_thread_safety_analysis) + +/******************************************************************************/ + + +#include "begin_code.h" +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/** + * Synchronization functions which can time out return this value if they time + * out. + */ +#define SDL_MUTEX_TIMEDOUT 1 + +/** + * This is the timeout value which corresponds to never time out. + */ +#define SDL_MUTEX_MAXWAIT (~(Uint32)0) + + +/** + * \name Mutex functions + */ +/* @{ */ + +/* The SDL mutex structure, defined in SDL_sysmutex.c */ +struct SDL_mutex; +typedef struct SDL_mutex SDL_mutex; + +/** + * Create a new mutex. + * + * All newly-created mutexes begin in the _unlocked_ state. + * + * Calls to SDL_LockMutex() will not return while the mutex is locked by + * another thread. See SDL_TryLockMutex() to attempt to lock without blocking. + * + * SDL mutexes are reentrant. + * + * \returns the initialized and unlocked mutex or NULL on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_DestroyMutex + * \sa SDL_LockMutex + * \sa SDL_TryLockMutex + * \sa SDL_UnlockMutex + */ +extern DECLSPEC SDL_mutex *SDLCALL SDL_CreateMutex(void); + +/** + * Lock the mutex. + * + * This will block until the mutex is available, which is to say it is in the + * unlocked state and the OS has chosen the caller as the next thread to lock + * it. Of all threads waiting to lock the mutex, only one may do so at a time. + * + * It is legal for the owning thread to lock an already-locked mutex. It must + * unlock it the same number of times before it is actually made available for + * other threads in the system (this is known as a "recursive mutex"). + * + * \param mutex the mutex to lock. + * \return 0, or -1 on error. + * + * \since This function is available since SDL 2.0.0. + */ +extern DECLSPEC int SDLCALL SDL_LockMutex(SDL_mutex * mutex) SDL_ACQUIRE(mutex); +#define SDL_mutexP(m) SDL_LockMutex(m) + +/** + * Try to lock a mutex without blocking. + * + * This works just like SDL_LockMutex(), but if the mutex is not available, + * this function returns `SDL_MUTEX_TIMEOUT` immediately. + * + * This technique is useful if you need exclusive access to a resource but + * don't want to wait for it, and will return to it to try again later. + * + * \param mutex the mutex to try to lock. + * \returns 0, `SDL_MUTEX_TIMEDOUT`, or -1 on error; call SDL_GetError() for + * more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CreateMutex + * \sa SDL_DestroyMutex + * \sa SDL_LockMutex + * \sa SDL_UnlockMutex + */ +extern DECLSPEC int SDLCALL SDL_TryLockMutex(SDL_mutex * mutex) SDL_TRY_ACQUIRE(0, mutex); + +/** + * Unlock the mutex. + * + * It is legal for the owning thread to lock an already-locked mutex. It must + * unlock it the same number of times before it is actually made available for + * other threads in the system (this is known as a "recursive mutex"). + * + * It is an error to unlock a mutex that has not been locked by the current + * thread, and doing so results in undefined behavior. + * + * It is also an error to unlock a mutex that isn't locked at all. + * + * \param mutex the mutex to unlock. + * \returns 0, or -1 on error. + * + * \since This function is available since SDL 2.0.0. + */ +extern DECLSPEC int SDLCALL SDL_UnlockMutex(SDL_mutex * mutex) SDL_RELEASE(mutex); +#define SDL_mutexV(m) SDL_UnlockMutex(m) + +/** + * Destroy a mutex created with SDL_CreateMutex(). + * + * This function must be called on any mutex that is no longer needed. Failure + * to destroy a mutex will result in a system memory or resource leak. While + * it is safe to destroy a mutex that is _unlocked_, it is not safe to attempt + * to destroy a locked mutex, and may result in undefined behavior depending + * on the platform. + * + * \param mutex the mutex to destroy. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CreateMutex + * \sa SDL_LockMutex + * \sa SDL_TryLockMutex + * \sa SDL_UnlockMutex + */ +extern DECLSPEC void SDLCALL SDL_DestroyMutex(SDL_mutex * mutex); + +/* @} *//* Mutex functions */ + + +/** + * \name Semaphore functions + */ +/* @{ */ + +/* The SDL semaphore structure, defined in SDL_syssem.c */ +struct SDL_semaphore; +typedef struct SDL_semaphore SDL_sem; + +/** + * Create a semaphore. + * + * This function creates a new semaphore and initializes it with the value + * `initial_value`. Each wait operation on the semaphore will atomically + * decrement the semaphore value and potentially block if the semaphore value + * is 0. Each post operation will atomically increment the semaphore value and + * wake waiting threads and allow them to retry the wait operation. + * + * \param initial_value the starting value of the semaphore. + * \returns a new semaphore or NULL on failure; call SDL_GetError() for more + * information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_DestroySemaphore + * \sa SDL_SemPost + * \sa SDL_SemTryWait + * \sa SDL_SemValue + * \sa SDL_SemWait + * \sa SDL_SemWaitTimeout + */ +extern DECLSPEC SDL_sem *SDLCALL SDL_CreateSemaphore(Uint32 initial_value); + +/** + * Destroy a semaphore. + * + * It is not safe to destroy a semaphore if there are threads currently + * waiting on it. + * + * \param sem the semaphore to destroy. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CreateSemaphore + * \sa SDL_SemPost + * \sa SDL_SemTryWait + * \sa SDL_SemValue + * \sa SDL_SemWait + * \sa SDL_SemWaitTimeout + */ +extern DECLSPEC void SDLCALL SDL_DestroySemaphore(SDL_sem * sem); + +/** + * Wait until a semaphore has a positive value and then decrements it. + * + * This function suspends the calling thread until either the semaphore + * pointed to by `sem` has a positive value or the call is interrupted by a + * signal or error. If the call is successful it will atomically decrement the + * semaphore value. + * + * This function is the equivalent of calling SDL_SemWaitTimeout() with a time + * length of `SDL_MUTEX_MAXWAIT`. + * + * \param sem the semaphore wait on. + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CreateSemaphore + * \sa SDL_DestroySemaphore + * \sa SDL_SemPost + * \sa SDL_SemTryWait + * \sa SDL_SemValue + * \sa SDL_SemWait + * \sa SDL_SemWaitTimeout + */ +extern DECLSPEC int SDLCALL SDL_SemWait(SDL_sem * sem); + +/** + * See if a semaphore has a positive value and decrement it if it does. + * + * This function checks to see if the semaphore pointed to by `sem` has a + * positive value and atomically decrements the semaphore value if it does. If + * the semaphore doesn't have a positive value, the function immediately + * returns SDL_MUTEX_TIMEDOUT. + * + * \param sem the semaphore to wait on. + * \returns 0 if the wait succeeds, `SDL_MUTEX_TIMEDOUT` if the wait would + * block, or a negative error code on failure; call SDL_GetError() + * for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CreateSemaphore + * \sa SDL_DestroySemaphore + * \sa SDL_SemPost + * \sa SDL_SemValue + * \sa SDL_SemWait + * \sa SDL_SemWaitTimeout + */ +extern DECLSPEC int SDLCALL SDL_SemTryWait(SDL_sem * sem); + +/** + * Wait until a semaphore has a positive value and then decrements it. + * + * This function suspends the calling thread until either the semaphore + * pointed to by `sem` has a positive value, the call is interrupted by a + * signal or error, or the specified time has elapsed. If the call is + * successful it will atomically decrement the semaphore value. + * + * \param sem the semaphore to wait on. + * \param timeout the length of the timeout, in milliseconds. + * \returns 0 if the wait succeeds, `SDL_MUTEX_TIMEDOUT` if the wait does not + * succeed in the allotted time, or a negative error code on failure; + * call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CreateSemaphore + * \sa SDL_DestroySemaphore + * \sa SDL_SemPost + * \sa SDL_SemTryWait + * \sa SDL_SemValue + * \sa SDL_SemWait + */ +extern DECLSPEC int SDLCALL SDL_SemWaitTimeout(SDL_sem *sem, Uint32 timeout); + +/** + * Atomically increment a semaphore's value and wake waiting threads. + * + * \param sem the semaphore to increment. + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CreateSemaphore + * \sa SDL_DestroySemaphore + * \sa SDL_SemTryWait + * \sa SDL_SemValue + * \sa SDL_SemWait + * \sa SDL_SemWaitTimeout + */ +extern DECLSPEC int SDLCALL SDL_SemPost(SDL_sem * sem); + +/** + * Get the current value of a semaphore. + * + * \param sem the semaphore to query. + * \returns the current value of the semaphore. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CreateSemaphore + */ +extern DECLSPEC Uint32 SDLCALL SDL_SemValue(SDL_sem * sem); + +/* @} *//* Semaphore functions */ + + +/** + * \name Condition variable functions + */ +/* @{ */ + +/* The SDL condition variable structure, defined in SDL_syscond.c */ +struct SDL_cond; +typedef struct SDL_cond SDL_cond; + +/** + * Create a condition variable. + * + * \returns a new condition variable or NULL on failure; call SDL_GetError() + * for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CondBroadcast + * \sa SDL_CondSignal + * \sa SDL_CondWait + * \sa SDL_CondWaitTimeout + * \sa SDL_DestroyCond + */ +extern DECLSPEC SDL_cond *SDLCALL SDL_CreateCond(void); + +/** + * Destroy a condition variable. + * + * \param cond the condition variable to destroy. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CondBroadcast + * \sa SDL_CondSignal + * \sa SDL_CondWait + * \sa SDL_CondWaitTimeout + * \sa SDL_CreateCond + */ +extern DECLSPEC void SDLCALL SDL_DestroyCond(SDL_cond * cond); + +/** + * Restart one of the threads that are waiting on the condition variable. + * + * \param cond the condition variable to signal. + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CondBroadcast + * \sa SDL_CondWait + * \sa SDL_CondWaitTimeout + * \sa SDL_CreateCond + * \sa SDL_DestroyCond + */ +extern DECLSPEC int SDLCALL SDL_CondSignal(SDL_cond * cond); + +/** + * Restart all threads that are waiting on the condition variable. + * + * \param cond the condition variable to signal. + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CondSignal + * \sa SDL_CondWait + * \sa SDL_CondWaitTimeout + * \sa SDL_CreateCond + * \sa SDL_DestroyCond + */ +extern DECLSPEC int SDLCALL SDL_CondBroadcast(SDL_cond * cond); + +/** + * Wait until a condition variable is signaled. + * + * This function unlocks the specified `mutex` and waits for another thread to + * call SDL_CondSignal() or SDL_CondBroadcast() on the condition variable + * `cond`. Once the condition variable is signaled, the mutex is re-locked and + * the function returns. + * + * The mutex must be locked before calling this function. + * + * This function is the equivalent of calling SDL_CondWaitTimeout() with a + * time length of `SDL_MUTEX_MAXWAIT`. + * + * \param cond the condition variable to wait on. + * \param mutex the mutex used to coordinate thread access. + * \returns 0 when it is signaled or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CondBroadcast + * \sa SDL_CondSignal + * \sa SDL_CondWaitTimeout + * \sa SDL_CreateCond + * \sa SDL_DestroyCond + */ +extern DECLSPEC int SDLCALL SDL_CondWait(SDL_cond * cond, SDL_mutex * mutex); + +/** + * Wait until a condition variable is signaled or a certain time has passed. + * + * This function unlocks the specified `mutex` and waits for another thread to + * call SDL_CondSignal() or SDL_CondBroadcast() on the condition variable + * `cond`, or for the specified time to elapse. Once the condition variable is + * signaled or the time elapsed, the mutex is re-locked and the function + * returns. + * + * The mutex must be locked before calling this function. + * + * \param cond the condition variable to wait on. + * \param mutex the mutex used to coordinate thread access. + * \param ms the maximum time to wait, in milliseconds, or `SDL_MUTEX_MAXWAIT` + * to wait indefinitely. + * \returns 0 if the condition variable is signaled, `SDL_MUTEX_TIMEDOUT` if + * the condition is not signaled in the allotted time, or a negative + * error code on failure; call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CondBroadcast + * \sa SDL_CondSignal + * \sa SDL_CondWait + * \sa SDL_CreateCond + * \sa SDL_DestroyCond + */ +extern DECLSPEC int SDLCALL SDL_CondWaitTimeout(SDL_cond * cond, + SDL_mutex * mutex, Uint32 ms); + +/* @} *//* Condition variable functions */ + + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include "close_code.h" + +#endif /* SDL_mutex_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/third_party/tlRender-install-Release/include/SDL2/SDL_name.h b/third_party/tlRender-install-Release/include/SDL2/SDL_name.h new file mode 100644 index 00000000..0c48bcf3 --- /dev/null +++ b/third_party/tlRender-install-Release/include/SDL2/SDL_name.h @@ -0,0 +1,33 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2025 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +#ifndef SDLname_h_ +#define SDLname_h_ + +#if defined(__STDC__) || defined(__cplusplus) +#define NeedFunctionPrototypes 1 +#endif + +#define SDL_NAME(X) SDL_##X + +#endif /* SDLname_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/third_party/tlRender-install-Release/include/SDL2/SDL_opengl.h b/third_party/tlRender-install-Release/include/SDL2/SDL_opengl.h new file mode 100644 index 00000000..c6250d13 --- /dev/null +++ b/third_party/tlRender-install-Release/include/SDL2/SDL_opengl.h @@ -0,0 +1,2126 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2025 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +/* + * This is a simple file to encapsulate the OpenGL API headers. + * + * Define NO_SDL_GLEXT if you have your own version of glext.h and want + * to disable the version included in SDL_opengl.h. + */ + +#ifndef SDL_opengl_h_ +#define SDL_opengl_h_ + +#include "SDL_config.h" + +#ifndef __IPHONEOS__ /* No OpenGL on iOS. */ + +/* + * Mesa 3-D graphics library + * + * Copyright (C) 1999-2006 Brian Paul All Rights Reserved. + * Copyright (C) 2009 VMware, Inc. All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR + * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + */ + + +#ifndef __gl_h_ +#define __gl_h_ + +#if defined(USE_MGL_NAMESPACE) +#include "gl_mangle.h" +#endif + + +/********************************************************************** + * Begin system-specific stuff. + */ + +#if defined(_WIN32) && !defined(__WIN32__) && !defined(__CYGWIN__) +#define __WIN32__ +#endif + +#if defined(__WIN32__) && !defined(__CYGWIN__) +# if (defined(_MSC_VER) || defined(__MINGW32__)) && defined(BUILD_GL32) /* tag specify we're building mesa as a DLL */ +# define GLAPI __declspec(dllexport) +# elif (defined(_MSC_VER) || defined(__MINGW32__)) && defined(_DLL) /* tag specifying we're building for DLL runtime support */ +# define GLAPI __declspec(dllimport) +# else /* for use with static link lib build of Win32 edition only */ +# define GLAPI extern +# endif /* _STATIC_MESA support */ +# if defined(__MINGW32__) && defined(GL_NO_STDCALL) || defined(UNDER_CE) /* The generated DLLs by MingW with STDCALL are not compatible with the ones done by Microsoft's compilers */ +# define GLAPIENTRY +# else +# define GLAPIENTRY __stdcall +# endif +#elif defined(__CYGWIN__) && defined(USE_OPENGL32) /* use native windows opengl32 */ +# define GLAPI extern +# define GLAPIENTRY __stdcall +#elif defined(__OS2__) || defined(__EMX__) /* native os/2 opengl */ +# define GLAPI extern +# define GLAPIENTRY _System +# define APIENTRY _System +# if defined(__GNUC__) && !defined(_System) +# define _System +# endif +#elif (defined(__GNUC__) && __GNUC__ >= 4) || (defined(__SUNPRO_C) && (__SUNPRO_C >= 0x590)) +# define GLAPI __attribute__((visibility("default"))) +# define GLAPIENTRY +#endif /* WIN32 && !CYGWIN */ + +/* + * WINDOWS: Include windows.h here to define APIENTRY. + * It is also useful when applications include this file by + * including only glut.h, since glut.h depends on windows.h. + * Applications needing to include windows.h with parms other + * than "WIN32_LEAN_AND_MEAN" may include windows.h before + * glut.h or gl.h. + */ +#if defined(_WIN32) && !defined(APIENTRY) && !defined(__CYGWIN__) +#ifndef WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN 1 +#endif +#ifndef NOMINMAX /* don't define min() and max(). */ +#define NOMINMAX +#endif +#include +#endif + +#ifndef GLAPI +#define GLAPI extern +#endif + +#ifndef GLAPIENTRY +#define GLAPIENTRY +#endif + +#ifndef APIENTRY +#define APIENTRY GLAPIENTRY +#endif + +/* "P" suffix to be used for a pointer to a function */ +#ifndef APIENTRYP +#define APIENTRYP APIENTRY * +#endif + +#ifndef GLAPIENTRYP +#define GLAPIENTRYP GLAPIENTRY * +#endif + +#if defined(PRAGMA_EXPORT_SUPPORTED) +#pragma export on +#endif + +/* + * End system-specific stuff. + **********************************************************************/ + + + +#ifdef __cplusplus +extern "C" { +#endif + + + +#define GL_VERSION_1_1 1 +#define GL_VERSION_1_2 1 +#define GL_VERSION_1_3 1 +#define GL_ARB_imaging 1 + + +/* + * Datatypes + */ +typedef unsigned int GLenum; +typedef unsigned char GLboolean; +typedef unsigned int GLbitfield; +typedef void GLvoid; +typedef signed char GLbyte; /* 1-byte signed */ +typedef short GLshort; /* 2-byte signed */ +typedef int GLint; /* 4-byte signed */ +typedef unsigned char GLubyte; /* 1-byte unsigned */ +typedef unsigned short GLushort; /* 2-byte unsigned */ +typedef unsigned int GLuint; /* 4-byte unsigned */ +typedef int GLsizei; /* 4-byte signed */ +typedef float GLfloat; /* single precision float */ +typedef float GLclampf; /* single precision float in [0,1] */ +typedef double GLdouble; /* double precision float */ +typedef double GLclampd; /* double precision float in [0,1] */ + + + +/* + * Constants + */ + +/* Boolean values */ +#define GL_FALSE 0 +#define GL_TRUE 1 + +/* Data types */ +#define GL_BYTE 0x1400 +#define GL_UNSIGNED_BYTE 0x1401 +#define GL_SHORT 0x1402 +#define GL_UNSIGNED_SHORT 0x1403 +#define GL_INT 0x1404 +#define GL_UNSIGNED_INT 0x1405 +#define GL_FLOAT 0x1406 +#define GL_2_BYTES 0x1407 +#define GL_3_BYTES 0x1408 +#define GL_4_BYTES 0x1409 +#define GL_DOUBLE 0x140A + +/* Primitives */ +#define GL_POINTS 0x0000 +#define GL_LINES 0x0001 +#define GL_LINE_LOOP 0x0002 +#define GL_LINE_STRIP 0x0003 +#define GL_TRIANGLES 0x0004 +#define GL_TRIANGLE_STRIP 0x0005 +#define GL_TRIANGLE_FAN 0x0006 +#define GL_QUADS 0x0007 +#define GL_QUAD_STRIP 0x0008 +#define GL_POLYGON 0x0009 + +/* Vertex Arrays */ +#define GL_VERTEX_ARRAY 0x8074 +#define GL_NORMAL_ARRAY 0x8075 +#define GL_COLOR_ARRAY 0x8076 +#define GL_INDEX_ARRAY 0x8077 +#define GL_TEXTURE_COORD_ARRAY 0x8078 +#define GL_EDGE_FLAG_ARRAY 0x8079 +#define GL_VERTEX_ARRAY_SIZE 0x807A +#define GL_VERTEX_ARRAY_TYPE 0x807B +#define GL_VERTEX_ARRAY_STRIDE 0x807C +#define GL_NORMAL_ARRAY_TYPE 0x807E +#define GL_NORMAL_ARRAY_STRIDE 0x807F +#define GL_COLOR_ARRAY_SIZE 0x8081 +#define GL_COLOR_ARRAY_TYPE 0x8082 +#define GL_COLOR_ARRAY_STRIDE 0x8083 +#define GL_INDEX_ARRAY_TYPE 0x8085 +#define GL_INDEX_ARRAY_STRIDE 0x8086 +#define GL_TEXTURE_COORD_ARRAY_SIZE 0x8088 +#define GL_TEXTURE_COORD_ARRAY_TYPE 0x8089 +#define GL_TEXTURE_COORD_ARRAY_STRIDE 0x808A +#define GL_EDGE_FLAG_ARRAY_STRIDE 0x808C +#define GL_VERTEX_ARRAY_POINTER 0x808E +#define GL_NORMAL_ARRAY_POINTER 0x808F +#define GL_COLOR_ARRAY_POINTER 0x8090 +#define GL_INDEX_ARRAY_POINTER 0x8091 +#define GL_TEXTURE_COORD_ARRAY_POINTER 0x8092 +#define GL_EDGE_FLAG_ARRAY_POINTER 0x8093 +#define GL_V2F 0x2A20 +#define GL_V3F 0x2A21 +#define GL_C4UB_V2F 0x2A22 +#define GL_C4UB_V3F 0x2A23 +#define GL_C3F_V3F 0x2A24 +#define GL_N3F_V3F 0x2A25 +#define GL_C4F_N3F_V3F 0x2A26 +#define GL_T2F_V3F 0x2A27 +#define GL_T4F_V4F 0x2A28 +#define GL_T2F_C4UB_V3F 0x2A29 +#define GL_T2F_C3F_V3F 0x2A2A +#define GL_T2F_N3F_V3F 0x2A2B +#define GL_T2F_C4F_N3F_V3F 0x2A2C +#define GL_T4F_C4F_N3F_V4F 0x2A2D + +/* Matrix Mode */ +#define GL_MATRIX_MODE 0x0BA0 +#define GL_MODELVIEW 0x1700 +#define GL_PROJECTION 0x1701 +#define GL_TEXTURE 0x1702 + +/* Points */ +#define GL_POINT_SMOOTH 0x0B10 +#define GL_POINT_SIZE 0x0B11 +#define GL_POINT_SIZE_GRANULARITY 0x0B13 +#define GL_POINT_SIZE_RANGE 0x0B12 + +/* Lines */ +#define GL_LINE_SMOOTH 0x0B20 +#define GL_LINE_STIPPLE 0x0B24 +#define GL_LINE_STIPPLE_PATTERN 0x0B25 +#define GL_LINE_STIPPLE_REPEAT 0x0B26 +#define GL_LINE_WIDTH 0x0B21 +#define GL_LINE_WIDTH_GRANULARITY 0x0B23 +#define GL_LINE_WIDTH_RANGE 0x0B22 + +/* Polygons */ +#define GL_POINT 0x1B00 +#define GL_LINE 0x1B01 +#define GL_FILL 0x1B02 +#define GL_CW 0x0900 +#define GL_CCW 0x0901 +#define GL_FRONT 0x0404 +#define GL_BACK 0x0405 +#define GL_POLYGON_MODE 0x0B40 +#define GL_POLYGON_SMOOTH 0x0B41 +#define GL_POLYGON_STIPPLE 0x0B42 +#define GL_EDGE_FLAG 0x0B43 +#define GL_CULL_FACE 0x0B44 +#define GL_CULL_FACE_MODE 0x0B45 +#define GL_FRONT_FACE 0x0B46 +#define GL_POLYGON_OFFSET_FACTOR 0x8038 +#define GL_POLYGON_OFFSET_UNITS 0x2A00 +#define GL_POLYGON_OFFSET_POINT 0x2A01 +#define GL_POLYGON_OFFSET_LINE 0x2A02 +#define GL_POLYGON_OFFSET_FILL 0x8037 + +/* Display Lists */ +#define GL_COMPILE 0x1300 +#define GL_COMPILE_AND_EXECUTE 0x1301 +#define GL_LIST_BASE 0x0B32 +#define GL_LIST_INDEX 0x0B33 +#define GL_LIST_MODE 0x0B30 + +/* Depth buffer */ +#define GL_NEVER 0x0200 +#define GL_LESS 0x0201 +#define GL_EQUAL 0x0202 +#define GL_LEQUAL 0x0203 +#define GL_GREATER 0x0204 +#define GL_NOTEQUAL 0x0205 +#define GL_GEQUAL 0x0206 +#define GL_ALWAYS 0x0207 +#define GL_DEPTH_TEST 0x0B71 +#define GL_DEPTH_BITS 0x0D56 +#define GL_DEPTH_CLEAR_VALUE 0x0B73 +#define GL_DEPTH_FUNC 0x0B74 +#define GL_DEPTH_RANGE 0x0B70 +#define GL_DEPTH_WRITEMASK 0x0B72 +#define GL_DEPTH_COMPONENT 0x1902 + +/* Lighting */ +#define GL_LIGHTING 0x0B50 +#define GL_LIGHT0 0x4000 +#define GL_LIGHT1 0x4001 +#define GL_LIGHT2 0x4002 +#define GL_LIGHT3 0x4003 +#define GL_LIGHT4 0x4004 +#define GL_LIGHT5 0x4005 +#define GL_LIGHT6 0x4006 +#define GL_LIGHT7 0x4007 +#define GL_SPOT_EXPONENT 0x1205 +#define GL_SPOT_CUTOFF 0x1206 +#define GL_CONSTANT_ATTENUATION 0x1207 +#define GL_LINEAR_ATTENUATION 0x1208 +#define GL_QUADRATIC_ATTENUATION 0x1209 +#define GL_AMBIENT 0x1200 +#define GL_DIFFUSE 0x1201 +#define GL_SPECULAR 0x1202 +#define GL_SHININESS 0x1601 +#define GL_EMISSION 0x1600 +#define GL_POSITION 0x1203 +#define GL_SPOT_DIRECTION 0x1204 +#define GL_AMBIENT_AND_DIFFUSE 0x1602 +#define GL_COLOR_INDEXES 0x1603 +#define GL_LIGHT_MODEL_TWO_SIDE 0x0B52 +#define GL_LIGHT_MODEL_LOCAL_VIEWER 0x0B51 +#define GL_LIGHT_MODEL_AMBIENT 0x0B53 +#define GL_FRONT_AND_BACK 0x0408 +#define GL_SHADE_MODEL 0x0B54 +#define GL_FLAT 0x1D00 +#define GL_SMOOTH 0x1D01 +#define GL_COLOR_MATERIAL 0x0B57 +#define GL_COLOR_MATERIAL_FACE 0x0B55 +#define GL_COLOR_MATERIAL_PARAMETER 0x0B56 +#define GL_NORMALIZE 0x0BA1 + +/* User clipping planes */ +#define GL_CLIP_PLANE0 0x3000 +#define GL_CLIP_PLANE1 0x3001 +#define GL_CLIP_PLANE2 0x3002 +#define GL_CLIP_PLANE3 0x3003 +#define GL_CLIP_PLANE4 0x3004 +#define GL_CLIP_PLANE5 0x3005 + +/* Accumulation buffer */ +#define GL_ACCUM_RED_BITS 0x0D58 +#define GL_ACCUM_GREEN_BITS 0x0D59 +#define GL_ACCUM_BLUE_BITS 0x0D5A +#define GL_ACCUM_ALPHA_BITS 0x0D5B +#define GL_ACCUM_CLEAR_VALUE 0x0B80 +#define GL_ACCUM 0x0100 +#define GL_ADD 0x0104 +#define GL_LOAD 0x0101 +#define GL_MULT 0x0103 +#define GL_RETURN 0x0102 + +/* Alpha testing */ +#define GL_ALPHA_TEST 0x0BC0 +#define GL_ALPHA_TEST_REF 0x0BC2 +#define GL_ALPHA_TEST_FUNC 0x0BC1 + +/* Blending */ +#define GL_BLEND 0x0BE2 +#define GL_BLEND_SRC 0x0BE1 +#define GL_BLEND_DST 0x0BE0 +#define GL_ZERO 0 +#define GL_ONE 1 +#define GL_SRC_COLOR 0x0300 +#define GL_ONE_MINUS_SRC_COLOR 0x0301 +#define GL_SRC_ALPHA 0x0302 +#define GL_ONE_MINUS_SRC_ALPHA 0x0303 +#define GL_DST_ALPHA 0x0304 +#define GL_ONE_MINUS_DST_ALPHA 0x0305 +#define GL_DST_COLOR 0x0306 +#define GL_ONE_MINUS_DST_COLOR 0x0307 +#define GL_SRC_ALPHA_SATURATE 0x0308 + +/* Render Mode */ +#define GL_FEEDBACK 0x1C01 +#define GL_RENDER 0x1C00 +#define GL_SELECT 0x1C02 + +/* Feedback */ +#define GL_2D 0x0600 +#define GL_3D 0x0601 +#define GL_3D_COLOR 0x0602 +#define GL_3D_COLOR_TEXTURE 0x0603 +#define GL_4D_COLOR_TEXTURE 0x0604 +#define GL_POINT_TOKEN 0x0701 +#define GL_LINE_TOKEN 0x0702 +#define GL_LINE_RESET_TOKEN 0x0707 +#define GL_POLYGON_TOKEN 0x0703 +#define GL_BITMAP_TOKEN 0x0704 +#define GL_DRAW_PIXEL_TOKEN 0x0705 +#define GL_COPY_PIXEL_TOKEN 0x0706 +#define GL_PASS_THROUGH_TOKEN 0x0700 +#define GL_FEEDBACK_BUFFER_POINTER 0x0DF0 +#define GL_FEEDBACK_BUFFER_SIZE 0x0DF1 +#define GL_FEEDBACK_BUFFER_TYPE 0x0DF2 + +/* Selection */ +#define GL_SELECTION_BUFFER_POINTER 0x0DF3 +#define GL_SELECTION_BUFFER_SIZE 0x0DF4 + +/* Fog */ +#define GL_FOG 0x0B60 +#define GL_FOG_MODE 0x0B65 +#define GL_FOG_DENSITY 0x0B62 +#define GL_FOG_COLOR 0x0B66 +#define GL_FOG_INDEX 0x0B61 +#define GL_FOG_START 0x0B63 +#define GL_FOG_END 0x0B64 +#define GL_LINEAR 0x2601 +#define GL_EXP 0x0800 +#define GL_EXP2 0x0801 + +/* Logic Ops */ +#define GL_LOGIC_OP 0x0BF1 +#define GL_INDEX_LOGIC_OP 0x0BF1 +#define GL_COLOR_LOGIC_OP 0x0BF2 +#define GL_LOGIC_OP_MODE 0x0BF0 +#define GL_CLEAR 0x1500 +#define GL_SET 0x150F +#define GL_COPY 0x1503 +#define GL_COPY_INVERTED 0x150C +#define GL_NOOP 0x1505 +#define GL_INVERT 0x150A +#define GL_AND 0x1501 +#define GL_NAND 0x150E +#define GL_OR 0x1507 +#define GL_NOR 0x1508 +#define GL_XOR 0x1506 +#define GL_EQUIV 0x1509 +#define GL_AND_REVERSE 0x1502 +#define GL_AND_INVERTED 0x1504 +#define GL_OR_REVERSE 0x150B +#define GL_OR_INVERTED 0x150D + +/* Stencil */ +#define GL_STENCIL_BITS 0x0D57 +#define GL_STENCIL_TEST 0x0B90 +#define GL_STENCIL_CLEAR_VALUE 0x0B91 +#define GL_STENCIL_FUNC 0x0B92 +#define GL_STENCIL_VALUE_MASK 0x0B93 +#define GL_STENCIL_FAIL 0x0B94 +#define GL_STENCIL_PASS_DEPTH_FAIL 0x0B95 +#define GL_STENCIL_PASS_DEPTH_PASS 0x0B96 +#define GL_STENCIL_REF 0x0B97 +#define GL_STENCIL_WRITEMASK 0x0B98 +#define GL_STENCIL_INDEX 0x1901 +#define GL_KEEP 0x1E00 +#define GL_REPLACE 0x1E01 +#define GL_INCR 0x1E02 +#define GL_DECR 0x1E03 + +/* Buffers, Pixel Drawing/Reading */ +#define GL_NONE 0 +#define GL_LEFT 0x0406 +#define GL_RIGHT 0x0407 +/*GL_FRONT 0x0404 */ +/*GL_BACK 0x0405 */ +/*GL_FRONT_AND_BACK 0x0408 */ +#define GL_FRONT_LEFT 0x0400 +#define GL_FRONT_RIGHT 0x0401 +#define GL_BACK_LEFT 0x0402 +#define GL_BACK_RIGHT 0x0403 +#define GL_AUX0 0x0409 +#define GL_AUX1 0x040A +#define GL_AUX2 0x040B +#define GL_AUX3 0x040C +#define GL_COLOR_INDEX 0x1900 +#define GL_RED 0x1903 +#define GL_GREEN 0x1904 +#define GL_BLUE 0x1905 +#define GL_ALPHA 0x1906 +#define GL_LUMINANCE 0x1909 +#define GL_LUMINANCE_ALPHA 0x190A +#define GL_ALPHA_BITS 0x0D55 +#define GL_RED_BITS 0x0D52 +#define GL_GREEN_BITS 0x0D53 +#define GL_BLUE_BITS 0x0D54 +#define GL_INDEX_BITS 0x0D51 +#define GL_SUBPIXEL_BITS 0x0D50 +#define GL_AUX_BUFFERS 0x0C00 +#define GL_READ_BUFFER 0x0C02 +#define GL_DRAW_BUFFER 0x0C01 +#define GL_DOUBLEBUFFER 0x0C32 +#define GL_STEREO 0x0C33 +#define GL_BITMAP 0x1A00 +#define GL_COLOR 0x1800 +#define GL_DEPTH 0x1801 +#define GL_STENCIL 0x1802 +#define GL_DITHER 0x0BD0 +#define GL_RGB 0x1907 +#define GL_RGBA 0x1908 + +/* Implementation limits */ +#define GL_MAX_LIST_NESTING 0x0B31 +#define GL_MAX_EVAL_ORDER 0x0D30 +#define GL_MAX_LIGHTS 0x0D31 +#define GL_MAX_CLIP_PLANES 0x0D32 +#define GL_MAX_TEXTURE_SIZE 0x0D33 +#define GL_MAX_PIXEL_MAP_TABLE 0x0D34 +#define GL_MAX_ATTRIB_STACK_DEPTH 0x0D35 +#define GL_MAX_MODELVIEW_STACK_DEPTH 0x0D36 +#define GL_MAX_NAME_STACK_DEPTH 0x0D37 +#define GL_MAX_PROJECTION_STACK_DEPTH 0x0D38 +#define GL_MAX_TEXTURE_STACK_DEPTH 0x0D39 +#define GL_MAX_VIEWPORT_DIMS 0x0D3A +#define GL_MAX_CLIENT_ATTRIB_STACK_DEPTH 0x0D3B + +/* Gets */ +#define GL_ATTRIB_STACK_DEPTH 0x0BB0 +#define GL_CLIENT_ATTRIB_STACK_DEPTH 0x0BB1 +#define GL_COLOR_CLEAR_VALUE 0x0C22 +#define GL_COLOR_WRITEMASK 0x0C23 +#define GL_CURRENT_INDEX 0x0B01 +#define GL_CURRENT_COLOR 0x0B00 +#define GL_CURRENT_NORMAL 0x0B02 +#define GL_CURRENT_RASTER_COLOR 0x0B04 +#define GL_CURRENT_RASTER_DISTANCE 0x0B09 +#define GL_CURRENT_RASTER_INDEX 0x0B05 +#define GL_CURRENT_RASTER_POSITION 0x0B07 +#define GL_CURRENT_RASTER_TEXTURE_COORDS 0x0B06 +#define GL_CURRENT_RASTER_POSITION_VALID 0x0B08 +#define GL_CURRENT_TEXTURE_COORDS 0x0B03 +#define GL_INDEX_CLEAR_VALUE 0x0C20 +#define GL_INDEX_MODE 0x0C30 +#define GL_INDEX_WRITEMASK 0x0C21 +#define GL_MODELVIEW_MATRIX 0x0BA6 +#define GL_MODELVIEW_STACK_DEPTH 0x0BA3 +#define GL_NAME_STACK_DEPTH 0x0D70 +#define GL_PROJECTION_MATRIX 0x0BA7 +#define GL_PROJECTION_STACK_DEPTH 0x0BA4 +#define GL_RENDER_MODE 0x0C40 +#define GL_RGBA_MODE 0x0C31 +#define GL_TEXTURE_MATRIX 0x0BA8 +#define GL_TEXTURE_STACK_DEPTH 0x0BA5 +#define GL_VIEWPORT 0x0BA2 + +/* Evaluators */ +#define GL_AUTO_NORMAL 0x0D80 +#define GL_MAP1_COLOR_4 0x0D90 +#define GL_MAP1_INDEX 0x0D91 +#define GL_MAP1_NORMAL 0x0D92 +#define GL_MAP1_TEXTURE_COORD_1 0x0D93 +#define GL_MAP1_TEXTURE_COORD_2 0x0D94 +#define GL_MAP1_TEXTURE_COORD_3 0x0D95 +#define GL_MAP1_TEXTURE_COORD_4 0x0D96 +#define GL_MAP1_VERTEX_3 0x0D97 +#define GL_MAP1_VERTEX_4 0x0D98 +#define GL_MAP2_COLOR_4 0x0DB0 +#define GL_MAP2_INDEX 0x0DB1 +#define GL_MAP2_NORMAL 0x0DB2 +#define GL_MAP2_TEXTURE_COORD_1 0x0DB3 +#define GL_MAP2_TEXTURE_COORD_2 0x0DB4 +#define GL_MAP2_TEXTURE_COORD_3 0x0DB5 +#define GL_MAP2_TEXTURE_COORD_4 0x0DB6 +#define GL_MAP2_VERTEX_3 0x0DB7 +#define GL_MAP2_VERTEX_4 0x0DB8 +#define GL_MAP1_GRID_DOMAIN 0x0DD0 +#define GL_MAP1_GRID_SEGMENTS 0x0DD1 +#define GL_MAP2_GRID_DOMAIN 0x0DD2 +#define GL_MAP2_GRID_SEGMENTS 0x0DD3 +#define GL_COEFF 0x0A00 +#define GL_ORDER 0x0A01 +#define GL_DOMAIN 0x0A02 + +/* Hints */ +#define GL_PERSPECTIVE_CORRECTION_HINT 0x0C50 +#define GL_POINT_SMOOTH_HINT 0x0C51 +#define GL_LINE_SMOOTH_HINT 0x0C52 +#define GL_POLYGON_SMOOTH_HINT 0x0C53 +#define GL_FOG_HINT 0x0C54 +#define GL_DONT_CARE 0x1100 +#define GL_FASTEST 0x1101 +#define GL_NICEST 0x1102 + +/* Scissor box */ +#define GL_SCISSOR_BOX 0x0C10 +#define GL_SCISSOR_TEST 0x0C11 + +/* Pixel Mode / Transfer */ +#define GL_MAP_COLOR 0x0D10 +#define GL_MAP_STENCIL 0x0D11 +#define GL_INDEX_SHIFT 0x0D12 +#define GL_INDEX_OFFSET 0x0D13 +#define GL_RED_SCALE 0x0D14 +#define GL_RED_BIAS 0x0D15 +#define GL_GREEN_SCALE 0x0D18 +#define GL_GREEN_BIAS 0x0D19 +#define GL_BLUE_SCALE 0x0D1A +#define GL_BLUE_BIAS 0x0D1B +#define GL_ALPHA_SCALE 0x0D1C +#define GL_ALPHA_BIAS 0x0D1D +#define GL_DEPTH_SCALE 0x0D1E +#define GL_DEPTH_BIAS 0x0D1F +#define GL_PIXEL_MAP_S_TO_S_SIZE 0x0CB1 +#define GL_PIXEL_MAP_I_TO_I_SIZE 0x0CB0 +#define GL_PIXEL_MAP_I_TO_R_SIZE 0x0CB2 +#define GL_PIXEL_MAP_I_TO_G_SIZE 0x0CB3 +#define GL_PIXEL_MAP_I_TO_B_SIZE 0x0CB4 +#define GL_PIXEL_MAP_I_TO_A_SIZE 0x0CB5 +#define GL_PIXEL_MAP_R_TO_R_SIZE 0x0CB6 +#define GL_PIXEL_MAP_G_TO_G_SIZE 0x0CB7 +#define GL_PIXEL_MAP_B_TO_B_SIZE 0x0CB8 +#define GL_PIXEL_MAP_A_TO_A_SIZE 0x0CB9 +#define GL_PIXEL_MAP_S_TO_S 0x0C71 +#define GL_PIXEL_MAP_I_TO_I 0x0C70 +#define GL_PIXEL_MAP_I_TO_R 0x0C72 +#define GL_PIXEL_MAP_I_TO_G 0x0C73 +#define GL_PIXEL_MAP_I_TO_B 0x0C74 +#define GL_PIXEL_MAP_I_TO_A 0x0C75 +#define GL_PIXEL_MAP_R_TO_R 0x0C76 +#define GL_PIXEL_MAP_G_TO_G 0x0C77 +#define GL_PIXEL_MAP_B_TO_B 0x0C78 +#define GL_PIXEL_MAP_A_TO_A 0x0C79 +#define GL_PACK_ALIGNMENT 0x0D05 +#define GL_PACK_LSB_FIRST 0x0D01 +#define GL_PACK_ROW_LENGTH 0x0D02 +#define GL_PACK_SKIP_PIXELS 0x0D04 +#define GL_PACK_SKIP_ROWS 0x0D03 +#define GL_PACK_SWAP_BYTES 0x0D00 +#define GL_UNPACK_ALIGNMENT 0x0CF5 +#define GL_UNPACK_LSB_FIRST 0x0CF1 +#define GL_UNPACK_ROW_LENGTH 0x0CF2 +#define GL_UNPACK_SKIP_PIXELS 0x0CF4 +#define GL_UNPACK_SKIP_ROWS 0x0CF3 +#define GL_UNPACK_SWAP_BYTES 0x0CF0 +#define GL_ZOOM_X 0x0D16 +#define GL_ZOOM_Y 0x0D17 + +/* Texture mapping */ +#define GL_TEXTURE_ENV 0x2300 +#define GL_TEXTURE_ENV_MODE 0x2200 +#define GL_TEXTURE_1D 0x0DE0 +#define GL_TEXTURE_2D 0x0DE1 +#define GL_TEXTURE_WRAP_S 0x2802 +#define GL_TEXTURE_WRAP_T 0x2803 +#define GL_TEXTURE_MAG_FILTER 0x2800 +#define GL_TEXTURE_MIN_FILTER 0x2801 +#define GL_TEXTURE_ENV_COLOR 0x2201 +#define GL_TEXTURE_GEN_S 0x0C60 +#define GL_TEXTURE_GEN_T 0x0C61 +#define GL_TEXTURE_GEN_R 0x0C62 +#define GL_TEXTURE_GEN_Q 0x0C63 +#define GL_TEXTURE_GEN_MODE 0x2500 +#define GL_TEXTURE_BORDER_COLOR 0x1004 +#define GL_TEXTURE_WIDTH 0x1000 +#define GL_TEXTURE_HEIGHT 0x1001 +#define GL_TEXTURE_BORDER 0x1005 +#define GL_TEXTURE_COMPONENTS 0x1003 +#define GL_TEXTURE_RED_SIZE 0x805C +#define GL_TEXTURE_GREEN_SIZE 0x805D +#define GL_TEXTURE_BLUE_SIZE 0x805E +#define GL_TEXTURE_ALPHA_SIZE 0x805F +#define GL_TEXTURE_LUMINANCE_SIZE 0x8060 +#define GL_TEXTURE_INTENSITY_SIZE 0x8061 +#define GL_NEAREST_MIPMAP_NEAREST 0x2700 +#define GL_NEAREST_MIPMAP_LINEAR 0x2702 +#define GL_LINEAR_MIPMAP_NEAREST 0x2701 +#define GL_LINEAR_MIPMAP_LINEAR 0x2703 +#define GL_OBJECT_LINEAR 0x2401 +#define GL_OBJECT_PLANE 0x2501 +#define GL_EYE_LINEAR 0x2400 +#define GL_EYE_PLANE 0x2502 +#define GL_SPHERE_MAP 0x2402 +#define GL_DECAL 0x2101 +#define GL_MODULATE 0x2100 +#define GL_NEAREST 0x2600 +#define GL_REPEAT 0x2901 +#define GL_CLAMP 0x2900 +#define GL_S 0x2000 +#define GL_T 0x2001 +#define GL_R 0x2002 +#define GL_Q 0x2003 + +/* Utility */ +#define GL_VENDOR 0x1F00 +#define GL_RENDERER 0x1F01 +#define GL_VERSION 0x1F02 +#define GL_EXTENSIONS 0x1F03 + +/* Errors */ +#define GL_NO_ERROR 0 +#define GL_INVALID_ENUM 0x0500 +#define GL_INVALID_VALUE 0x0501 +#define GL_INVALID_OPERATION 0x0502 +#define GL_STACK_OVERFLOW 0x0503 +#define GL_STACK_UNDERFLOW 0x0504 +#define GL_OUT_OF_MEMORY 0x0505 + +/* glPush/PopAttrib bits */ +#define GL_CURRENT_BIT 0x00000001 +#define GL_POINT_BIT 0x00000002 +#define GL_LINE_BIT 0x00000004 +#define GL_POLYGON_BIT 0x00000008 +#define GL_POLYGON_STIPPLE_BIT 0x00000010 +#define GL_PIXEL_MODE_BIT 0x00000020 +#define GL_LIGHTING_BIT 0x00000040 +#define GL_FOG_BIT 0x00000080 +#define GL_DEPTH_BUFFER_BIT 0x00000100 +#define GL_ACCUM_BUFFER_BIT 0x00000200 +#define GL_STENCIL_BUFFER_BIT 0x00000400 +#define GL_VIEWPORT_BIT 0x00000800 +#define GL_TRANSFORM_BIT 0x00001000 +#define GL_ENABLE_BIT 0x00002000 +#define GL_COLOR_BUFFER_BIT 0x00004000 +#define GL_HINT_BIT 0x00008000 +#define GL_EVAL_BIT 0x00010000 +#define GL_LIST_BIT 0x00020000 +#define GL_TEXTURE_BIT 0x00040000 +#define GL_SCISSOR_BIT 0x00080000 +#define GL_ALL_ATTRIB_BITS 0x000FFFFF + + +/* OpenGL 1.1 */ +#define GL_PROXY_TEXTURE_1D 0x8063 +#define GL_PROXY_TEXTURE_2D 0x8064 +#define GL_TEXTURE_PRIORITY 0x8066 +#define GL_TEXTURE_RESIDENT 0x8067 +#define GL_TEXTURE_BINDING_1D 0x8068 +#define GL_TEXTURE_BINDING_2D 0x8069 +#define GL_TEXTURE_INTERNAL_FORMAT 0x1003 +#define GL_ALPHA4 0x803B +#define GL_ALPHA8 0x803C +#define GL_ALPHA12 0x803D +#define GL_ALPHA16 0x803E +#define GL_LUMINANCE4 0x803F +#define GL_LUMINANCE8 0x8040 +#define GL_LUMINANCE12 0x8041 +#define GL_LUMINANCE16 0x8042 +#define GL_LUMINANCE4_ALPHA4 0x8043 +#define GL_LUMINANCE6_ALPHA2 0x8044 +#define GL_LUMINANCE8_ALPHA8 0x8045 +#define GL_LUMINANCE12_ALPHA4 0x8046 +#define GL_LUMINANCE12_ALPHA12 0x8047 +#define GL_LUMINANCE16_ALPHA16 0x8048 +#define GL_INTENSITY 0x8049 +#define GL_INTENSITY4 0x804A +#define GL_INTENSITY8 0x804B +#define GL_INTENSITY12 0x804C +#define GL_INTENSITY16 0x804D +#define GL_R3_G3_B2 0x2A10 +#define GL_RGB4 0x804F +#define GL_RGB5 0x8050 +#define GL_RGB8 0x8051 +#define GL_RGB10 0x8052 +#define GL_RGB12 0x8053 +#define GL_RGB16 0x8054 +#define GL_RGBA2 0x8055 +#define GL_RGBA4 0x8056 +#define GL_RGB5_A1 0x8057 +#define GL_RGBA8 0x8058 +#define GL_RGB10_A2 0x8059 +#define GL_RGBA12 0x805A +#define GL_RGBA16 0x805B +#define GL_CLIENT_PIXEL_STORE_BIT 0x00000001 +#define GL_CLIENT_VERTEX_ARRAY_BIT 0x00000002 +#define GL_ALL_CLIENT_ATTRIB_BITS 0xFFFFFFFF +#define GL_CLIENT_ALL_ATTRIB_BITS 0xFFFFFFFF + + + +/* + * Miscellaneous + */ + +GLAPI void GLAPIENTRY glClearIndex( GLfloat c ); + +GLAPI void GLAPIENTRY glClearColor( GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha ); + +GLAPI void GLAPIENTRY glClear( GLbitfield mask ); + +GLAPI void GLAPIENTRY glIndexMask( GLuint mask ); + +GLAPI void GLAPIENTRY glColorMask( GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha ); + +GLAPI void GLAPIENTRY glAlphaFunc( GLenum func, GLclampf ref ); + +GLAPI void GLAPIENTRY glBlendFunc( GLenum sfactor, GLenum dfactor ); + +GLAPI void GLAPIENTRY glLogicOp( GLenum opcode ); + +GLAPI void GLAPIENTRY glCullFace( GLenum mode ); + +GLAPI void GLAPIENTRY glFrontFace( GLenum mode ); + +GLAPI void GLAPIENTRY glPointSize( GLfloat size ); + +GLAPI void GLAPIENTRY glLineWidth( GLfloat width ); + +GLAPI void GLAPIENTRY glLineStipple( GLint factor, GLushort pattern ); + +GLAPI void GLAPIENTRY glPolygonMode( GLenum face, GLenum mode ); + +GLAPI void GLAPIENTRY glPolygonOffset( GLfloat factor, GLfloat units ); + +GLAPI void GLAPIENTRY glPolygonStipple( const GLubyte *mask ); + +GLAPI void GLAPIENTRY glGetPolygonStipple( GLubyte *mask ); + +GLAPI void GLAPIENTRY glEdgeFlag( GLboolean flag ); + +GLAPI void GLAPIENTRY glEdgeFlagv( const GLboolean *flag ); + +GLAPI void GLAPIENTRY glScissor( GLint x, GLint y, GLsizei width, GLsizei height); + +GLAPI void GLAPIENTRY glClipPlane( GLenum plane, const GLdouble *equation ); + +GLAPI void GLAPIENTRY glGetClipPlane( GLenum plane, GLdouble *equation ); + +GLAPI void GLAPIENTRY glDrawBuffer( GLenum mode ); + +GLAPI void GLAPIENTRY glReadBuffer( GLenum mode ); + +GLAPI void GLAPIENTRY glEnable( GLenum cap ); + +GLAPI void GLAPIENTRY glDisable( GLenum cap ); + +GLAPI GLboolean GLAPIENTRY glIsEnabled( GLenum cap ); + + +GLAPI void GLAPIENTRY glEnableClientState( GLenum cap ); /* 1.1 */ + +GLAPI void GLAPIENTRY glDisableClientState( GLenum cap ); /* 1.1 */ + + +GLAPI void GLAPIENTRY glGetBooleanv( GLenum pname, GLboolean *params ); + +GLAPI void GLAPIENTRY glGetDoublev( GLenum pname, GLdouble *params ); + +GLAPI void GLAPIENTRY glGetFloatv( GLenum pname, GLfloat *params ); + +GLAPI void GLAPIENTRY glGetIntegerv( GLenum pname, GLint *params ); + + +GLAPI void GLAPIENTRY glPushAttrib( GLbitfield mask ); + +GLAPI void GLAPIENTRY glPopAttrib( void ); + + +GLAPI void GLAPIENTRY glPushClientAttrib( GLbitfield mask ); /* 1.1 */ + +GLAPI void GLAPIENTRY glPopClientAttrib( void ); /* 1.1 */ + + +GLAPI GLint GLAPIENTRY glRenderMode( GLenum mode ); + +GLAPI GLenum GLAPIENTRY glGetError( void ); + +GLAPI const GLubyte * GLAPIENTRY glGetString( GLenum name ); + +GLAPI void GLAPIENTRY glFinish( void ); + +GLAPI void GLAPIENTRY glFlush( void ); + +GLAPI void GLAPIENTRY glHint( GLenum target, GLenum mode ); + + +/* + * Depth Buffer + */ + +GLAPI void GLAPIENTRY glClearDepth( GLclampd depth ); + +GLAPI void GLAPIENTRY glDepthFunc( GLenum func ); + +GLAPI void GLAPIENTRY glDepthMask( GLboolean flag ); + +GLAPI void GLAPIENTRY glDepthRange( GLclampd near_val, GLclampd far_val ); + + +/* + * Accumulation Buffer + */ + +GLAPI void GLAPIENTRY glClearAccum( GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha ); + +GLAPI void GLAPIENTRY glAccum( GLenum op, GLfloat value ); + + +/* + * Transformation + */ + +GLAPI void GLAPIENTRY glMatrixMode( GLenum mode ); + +GLAPI void GLAPIENTRY glOrtho( GLdouble left, GLdouble right, + GLdouble bottom, GLdouble top, + GLdouble near_val, GLdouble far_val ); + +GLAPI void GLAPIENTRY glFrustum( GLdouble left, GLdouble right, + GLdouble bottom, GLdouble top, + GLdouble near_val, GLdouble far_val ); + +GLAPI void GLAPIENTRY glViewport( GLint x, GLint y, + GLsizei width, GLsizei height ); + +GLAPI void GLAPIENTRY glPushMatrix( void ); + +GLAPI void GLAPIENTRY glPopMatrix( void ); + +GLAPI void GLAPIENTRY glLoadIdentity( void ); + +GLAPI void GLAPIENTRY glLoadMatrixd( const GLdouble *m ); +GLAPI void GLAPIENTRY glLoadMatrixf( const GLfloat *m ); + +GLAPI void GLAPIENTRY glMultMatrixd( const GLdouble *m ); +GLAPI void GLAPIENTRY glMultMatrixf( const GLfloat *m ); + +GLAPI void GLAPIENTRY glRotated( GLdouble angle, + GLdouble x, GLdouble y, GLdouble z ); +GLAPI void GLAPIENTRY glRotatef( GLfloat angle, + GLfloat x, GLfloat y, GLfloat z ); + +GLAPI void GLAPIENTRY glScaled( GLdouble x, GLdouble y, GLdouble z ); +GLAPI void GLAPIENTRY glScalef( GLfloat x, GLfloat y, GLfloat z ); + +GLAPI void GLAPIENTRY glTranslated( GLdouble x, GLdouble y, GLdouble z ); +GLAPI void GLAPIENTRY glTranslatef( GLfloat x, GLfloat y, GLfloat z ); + + +/* + * Display Lists + */ + +GLAPI GLboolean GLAPIENTRY glIsList( GLuint list ); + +GLAPI void GLAPIENTRY glDeleteLists( GLuint list, GLsizei range ); + +GLAPI GLuint GLAPIENTRY glGenLists( GLsizei range ); + +GLAPI void GLAPIENTRY glNewList( GLuint list, GLenum mode ); + +GLAPI void GLAPIENTRY glEndList( void ); + +GLAPI void GLAPIENTRY glCallList( GLuint list ); + +GLAPI void GLAPIENTRY glCallLists( GLsizei n, GLenum type, + const GLvoid *lists ); + +GLAPI void GLAPIENTRY glListBase( GLuint base ); + + +/* + * Drawing Functions + */ + +GLAPI void GLAPIENTRY glBegin( GLenum mode ); + +GLAPI void GLAPIENTRY glEnd( void ); + + +GLAPI void GLAPIENTRY glVertex2d( GLdouble x, GLdouble y ); +GLAPI void GLAPIENTRY glVertex2f( GLfloat x, GLfloat y ); +GLAPI void GLAPIENTRY glVertex2i( GLint x, GLint y ); +GLAPI void GLAPIENTRY glVertex2s( GLshort x, GLshort y ); + +GLAPI void GLAPIENTRY glVertex3d( GLdouble x, GLdouble y, GLdouble z ); +GLAPI void GLAPIENTRY glVertex3f( GLfloat x, GLfloat y, GLfloat z ); +GLAPI void GLAPIENTRY glVertex3i( GLint x, GLint y, GLint z ); +GLAPI void GLAPIENTRY glVertex3s( GLshort x, GLshort y, GLshort z ); + +GLAPI void GLAPIENTRY glVertex4d( GLdouble x, GLdouble y, GLdouble z, GLdouble w ); +GLAPI void GLAPIENTRY glVertex4f( GLfloat x, GLfloat y, GLfloat z, GLfloat w ); +GLAPI void GLAPIENTRY glVertex4i( GLint x, GLint y, GLint z, GLint w ); +GLAPI void GLAPIENTRY glVertex4s( GLshort x, GLshort y, GLshort z, GLshort w ); + +GLAPI void GLAPIENTRY glVertex2dv( const GLdouble *v ); +GLAPI void GLAPIENTRY glVertex2fv( const GLfloat *v ); +GLAPI void GLAPIENTRY glVertex2iv( const GLint *v ); +GLAPI void GLAPIENTRY glVertex2sv( const GLshort *v ); + +GLAPI void GLAPIENTRY glVertex3dv( const GLdouble *v ); +GLAPI void GLAPIENTRY glVertex3fv( const GLfloat *v ); +GLAPI void GLAPIENTRY glVertex3iv( const GLint *v ); +GLAPI void GLAPIENTRY glVertex3sv( const GLshort *v ); + +GLAPI void GLAPIENTRY glVertex4dv( const GLdouble *v ); +GLAPI void GLAPIENTRY glVertex4fv( const GLfloat *v ); +GLAPI void GLAPIENTRY glVertex4iv( const GLint *v ); +GLAPI void GLAPIENTRY glVertex4sv( const GLshort *v ); + + +GLAPI void GLAPIENTRY glNormal3b( GLbyte nx, GLbyte ny, GLbyte nz ); +GLAPI void GLAPIENTRY glNormal3d( GLdouble nx, GLdouble ny, GLdouble nz ); +GLAPI void GLAPIENTRY glNormal3f( GLfloat nx, GLfloat ny, GLfloat nz ); +GLAPI void GLAPIENTRY glNormal3i( GLint nx, GLint ny, GLint nz ); +GLAPI void GLAPIENTRY glNormal3s( GLshort nx, GLshort ny, GLshort nz ); + +GLAPI void GLAPIENTRY glNormal3bv( const GLbyte *v ); +GLAPI void GLAPIENTRY glNormal3dv( const GLdouble *v ); +GLAPI void GLAPIENTRY glNormal3fv( const GLfloat *v ); +GLAPI void GLAPIENTRY glNormal3iv( const GLint *v ); +GLAPI void GLAPIENTRY glNormal3sv( const GLshort *v ); + + +GLAPI void GLAPIENTRY glIndexd( GLdouble c ); +GLAPI void GLAPIENTRY glIndexf( GLfloat c ); +GLAPI void GLAPIENTRY glIndexi( GLint c ); +GLAPI void GLAPIENTRY glIndexs( GLshort c ); +GLAPI void GLAPIENTRY glIndexub( GLubyte c ); /* 1.1 */ + +GLAPI void GLAPIENTRY glIndexdv( const GLdouble *c ); +GLAPI void GLAPIENTRY glIndexfv( const GLfloat *c ); +GLAPI void GLAPIENTRY glIndexiv( const GLint *c ); +GLAPI void GLAPIENTRY glIndexsv( const GLshort *c ); +GLAPI void GLAPIENTRY glIndexubv( const GLubyte *c ); /* 1.1 */ + +GLAPI void GLAPIENTRY glColor3b( GLbyte red, GLbyte green, GLbyte blue ); +GLAPI void GLAPIENTRY glColor3d( GLdouble red, GLdouble green, GLdouble blue ); +GLAPI void GLAPIENTRY glColor3f( GLfloat red, GLfloat green, GLfloat blue ); +GLAPI void GLAPIENTRY glColor3i( GLint red, GLint green, GLint blue ); +GLAPI void GLAPIENTRY glColor3s( GLshort red, GLshort green, GLshort blue ); +GLAPI void GLAPIENTRY glColor3ub( GLubyte red, GLubyte green, GLubyte blue ); +GLAPI void GLAPIENTRY glColor3ui( GLuint red, GLuint green, GLuint blue ); +GLAPI void GLAPIENTRY glColor3us( GLushort red, GLushort green, GLushort blue ); + +GLAPI void GLAPIENTRY glColor4b( GLbyte red, GLbyte green, + GLbyte blue, GLbyte alpha ); +GLAPI void GLAPIENTRY glColor4d( GLdouble red, GLdouble green, + GLdouble blue, GLdouble alpha ); +GLAPI void GLAPIENTRY glColor4f( GLfloat red, GLfloat green, + GLfloat blue, GLfloat alpha ); +GLAPI void GLAPIENTRY glColor4i( GLint red, GLint green, + GLint blue, GLint alpha ); +GLAPI void GLAPIENTRY glColor4s( GLshort red, GLshort green, + GLshort blue, GLshort alpha ); +GLAPI void GLAPIENTRY glColor4ub( GLubyte red, GLubyte green, + GLubyte blue, GLubyte alpha ); +GLAPI void GLAPIENTRY glColor4ui( GLuint red, GLuint green, + GLuint blue, GLuint alpha ); +GLAPI void GLAPIENTRY glColor4us( GLushort red, GLushort green, + GLushort blue, GLushort alpha ); + + +GLAPI void GLAPIENTRY glColor3bv( const GLbyte *v ); +GLAPI void GLAPIENTRY glColor3dv( const GLdouble *v ); +GLAPI void GLAPIENTRY glColor3fv( const GLfloat *v ); +GLAPI void GLAPIENTRY glColor3iv( const GLint *v ); +GLAPI void GLAPIENTRY glColor3sv( const GLshort *v ); +GLAPI void GLAPIENTRY glColor3ubv( const GLubyte *v ); +GLAPI void GLAPIENTRY glColor3uiv( const GLuint *v ); +GLAPI void GLAPIENTRY glColor3usv( const GLushort *v ); + +GLAPI void GLAPIENTRY glColor4bv( const GLbyte *v ); +GLAPI void GLAPIENTRY glColor4dv( const GLdouble *v ); +GLAPI void GLAPIENTRY glColor4fv( const GLfloat *v ); +GLAPI void GLAPIENTRY glColor4iv( const GLint *v ); +GLAPI void GLAPIENTRY glColor4sv( const GLshort *v ); +GLAPI void GLAPIENTRY glColor4ubv( const GLubyte *v ); +GLAPI void GLAPIENTRY glColor4uiv( const GLuint *v ); +GLAPI void GLAPIENTRY glColor4usv( const GLushort *v ); + + +GLAPI void GLAPIENTRY glTexCoord1d( GLdouble s ); +GLAPI void GLAPIENTRY glTexCoord1f( GLfloat s ); +GLAPI void GLAPIENTRY glTexCoord1i( GLint s ); +GLAPI void GLAPIENTRY glTexCoord1s( GLshort s ); + +GLAPI void GLAPIENTRY glTexCoord2d( GLdouble s, GLdouble t ); +GLAPI void GLAPIENTRY glTexCoord2f( GLfloat s, GLfloat t ); +GLAPI void GLAPIENTRY glTexCoord2i( GLint s, GLint t ); +GLAPI void GLAPIENTRY glTexCoord2s( GLshort s, GLshort t ); + +GLAPI void GLAPIENTRY glTexCoord3d( GLdouble s, GLdouble t, GLdouble r ); +GLAPI void GLAPIENTRY glTexCoord3f( GLfloat s, GLfloat t, GLfloat r ); +GLAPI void GLAPIENTRY glTexCoord3i( GLint s, GLint t, GLint r ); +GLAPI void GLAPIENTRY glTexCoord3s( GLshort s, GLshort t, GLshort r ); + +GLAPI void GLAPIENTRY glTexCoord4d( GLdouble s, GLdouble t, GLdouble r, GLdouble q ); +GLAPI void GLAPIENTRY glTexCoord4f( GLfloat s, GLfloat t, GLfloat r, GLfloat q ); +GLAPI void GLAPIENTRY glTexCoord4i( GLint s, GLint t, GLint r, GLint q ); +GLAPI void GLAPIENTRY glTexCoord4s( GLshort s, GLshort t, GLshort r, GLshort q ); + +GLAPI void GLAPIENTRY glTexCoord1dv( const GLdouble *v ); +GLAPI void GLAPIENTRY glTexCoord1fv( const GLfloat *v ); +GLAPI void GLAPIENTRY glTexCoord1iv( const GLint *v ); +GLAPI void GLAPIENTRY glTexCoord1sv( const GLshort *v ); + +GLAPI void GLAPIENTRY glTexCoord2dv( const GLdouble *v ); +GLAPI void GLAPIENTRY glTexCoord2fv( const GLfloat *v ); +GLAPI void GLAPIENTRY glTexCoord2iv( const GLint *v ); +GLAPI void GLAPIENTRY glTexCoord2sv( const GLshort *v ); + +GLAPI void GLAPIENTRY glTexCoord3dv( const GLdouble *v ); +GLAPI void GLAPIENTRY glTexCoord3fv( const GLfloat *v ); +GLAPI void GLAPIENTRY glTexCoord3iv( const GLint *v ); +GLAPI void GLAPIENTRY glTexCoord3sv( const GLshort *v ); + +GLAPI void GLAPIENTRY glTexCoord4dv( const GLdouble *v ); +GLAPI void GLAPIENTRY glTexCoord4fv( const GLfloat *v ); +GLAPI void GLAPIENTRY glTexCoord4iv( const GLint *v ); +GLAPI void GLAPIENTRY glTexCoord4sv( const GLshort *v ); + + +GLAPI void GLAPIENTRY glRasterPos2d( GLdouble x, GLdouble y ); +GLAPI void GLAPIENTRY glRasterPos2f( GLfloat x, GLfloat y ); +GLAPI void GLAPIENTRY glRasterPos2i( GLint x, GLint y ); +GLAPI void GLAPIENTRY glRasterPos2s( GLshort x, GLshort y ); + +GLAPI void GLAPIENTRY glRasterPos3d( GLdouble x, GLdouble y, GLdouble z ); +GLAPI void GLAPIENTRY glRasterPos3f( GLfloat x, GLfloat y, GLfloat z ); +GLAPI void GLAPIENTRY glRasterPos3i( GLint x, GLint y, GLint z ); +GLAPI void GLAPIENTRY glRasterPos3s( GLshort x, GLshort y, GLshort z ); + +GLAPI void GLAPIENTRY glRasterPos4d( GLdouble x, GLdouble y, GLdouble z, GLdouble w ); +GLAPI void GLAPIENTRY glRasterPos4f( GLfloat x, GLfloat y, GLfloat z, GLfloat w ); +GLAPI void GLAPIENTRY glRasterPos4i( GLint x, GLint y, GLint z, GLint w ); +GLAPI void GLAPIENTRY glRasterPos4s( GLshort x, GLshort y, GLshort z, GLshort w ); + +GLAPI void GLAPIENTRY glRasterPos2dv( const GLdouble *v ); +GLAPI void GLAPIENTRY glRasterPos2fv( const GLfloat *v ); +GLAPI void GLAPIENTRY glRasterPos2iv( const GLint *v ); +GLAPI void GLAPIENTRY glRasterPos2sv( const GLshort *v ); + +GLAPI void GLAPIENTRY glRasterPos3dv( const GLdouble *v ); +GLAPI void GLAPIENTRY glRasterPos3fv( const GLfloat *v ); +GLAPI void GLAPIENTRY glRasterPos3iv( const GLint *v ); +GLAPI void GLAPIENTRY glRasterPos3sv( const GLshort *v ); + +GLAPI void GLAPIENTRY glRasterPos4dv( const GLdouble *v ); +GLAPI void GLAPIENTRY glRasterPos4fv( const GLfloat *v ); +GLAPI void GLAPIENTRY glRasterPos4iv( const GLint *v ); +GLAPI void GLAPIENTRY glRasterPos4sv( const GLshort *v ); + + +GLAPI void GLAPIENTRY glRectd( GLdouble x1, GLdouble y1, GLdouble x2, GLdouble y2 ); +GLAPI void GLAPIENTRY glRectf( GLfloat x1, GLfloat y1, GLfloat x2, GLfloat y2 ); +GLAPI void GLAPIENTRY glRecti( GLint x1, GLint y1, GLint x2, GLint y2 ); +GLAPI void GLAPIENTRY glRects( GLshort x1, GLshort y1, GLshort x2, GLshort y2 ); + + +GLAPI void GLAPIENTRY glRectdv( const GLdouble *v1, const GLdouble *v2 ); +GLAPI void GLAPIENTRY glRectfv( const GLfloat *v1, const GLfloat *v2 ); +GLAPI void GLAPIENTRY glRectiv( const GLint *v1, const GLint *v2 ); +GLAPI void GLAPIENTRY glRectsv( const GLshort *v1, const GLshort *v2 ); + + +/* + * Vertex Arrays (1.1) + */ + +GLAPI void GLAPIENTRY glVertexPointer( GLint size, GLenum type, + GLsizei stride, const GLvoid *ptr ); + +GLAPI void GLAPIENTRY glNormalPointer( GLenum type, GLsizei stride, + const GLvoid *ptr ); + +GLAPI void GLAPIENTRY glColorPointer( GLint size, GLenum type, + GLsizei stride, const GLvoid *ptr ); + +GLAPI void GLAPIENTRY glIndexPointer( GLenum type, GLsizei stride, + const GLvoid *ptr ); + +GLAPI void GLAPIENTRY glTexCoordPointer( GLint size, GLenum type, + GLsizei stride, const GLvoid *ptr ); + +GLAPI void GLAPIENTRY glEdgeFlagPointer( GLsizei stride, const GLvoid *ptr ); + +GLAPI void GLAPIENTRY glGetPointerv( GLenum pname, GLvoid **params ); + +GLAPI void GLAPIENTRY glArrayElement( GLint i ); + +GLAPI void GLAPIENTRY glDrawArrays( GLenum mode, GLint first, GLsizei count ); + +GLAPI void GLAPIENTRY glDrawElements( GLenum mode, GLsizei count, + GLenum type, const GLvoid *indices ); + +GLAPI void GLAPIENTRY glInterleavedArrays( GLenum format, GLsizei stride, + const GLvoid *pointer ); + +/* + * Lighting + */ + +GLAPI void GLAPIENTRY glShadeModel( GLenum mode ); + +GLAPI void GLAPIENTRY glLightf( GLenum light, GLenum pname, GLfloat param ); +GLAPI void GLAPIENTRY glLighti( GLenum light, GLenum pname, GLint param ); +GLAPI void GLAPIENTRY glLightfv( GLenum light, GLenum pname, + const GLfloat *params ); +GLAPI void GLAPIENTRY glLightiv( GLenum light, GLenum pname, + const GLint *params ); + +GLAPI void GLAPIENTRY glGetLightfv( GLenum light, GLenum pname, + GLfloat *params ); +GLAPI void GLAPIENTRY glGetLightiv( GLenum light, GLenum pname, + GLint *params ); + +GLAPI void GLAPIENTRY glLightModelf( GLenum pname, GLfloat param ); +GLAPI void GLAPIENTRY glLightModeli( GLenum pname, GLint param ); +GLAPI void GLAPIENTRY glLightModelfv( GLenum pname, const GLfloat *params ); +GLAPI void GLAPIENTRY glLightModeliv( GLenum pname, const GLint *params ); + +GLAPI void GLAPIENTRY glMaterialf( GLenum face, GLenum pname, GLfloat param ); +GLAPI void GLAPIENTRY glMateriali( GLenum face, GLenum pname, GLint param ); +GLAPI void GLAPIENTRY glMaterialfv( GLenum face, GLenum pname, const GLfloat *params ); +GLAPI void GLAPIENTRY glMaterialiv( GLenum face, GLenum pname, const GLint *params ); + +GLAPI void GLAPIENTRY glGetMaterialfv( GLenum face, GLenum pname, GLfloat *params ); +GLAPI void GLAPIENTRY glGetMaterialiv( GLenum face, GLenum pname, GLint *params ); + +GLAPI void GLAPIENTRY glColorMaterial( GLenum face, GLenum mode ); + + +/* + * Raster functions + */ + +GLAPI void GLAPIENTRY glPixelZoom( GLfloat xfactor, GLfloat yfactor ); + +GLAPI void GLAPIENTRY glPixelStoref( GLenum pname, GLfloat param ); +GLAPI void GLAPIENTRY glPixelStorei( GLenum pname, GLint param ); + +GLAPI void GLAPIENTRY glPixelTransferf( GLenum pname, GLfloat param ); +GLAPI void GLAPIENTRY glPixelTransferi( GLenum pname, GLint param ); + +GLAPI void GLAPIENTRY glPixelMapfv( GLenum map, GLsizei mapsize, + const GLfloat *values ); +GLAPI void GLAPIENTRY glPixelMapuiv( GLenum map, GLsizei mapsize, + const GLuint *values ); +GLAPI void GLAPIENTRY glPixelMapusv( GLenum map, GLsizei mapsize, + const GLushort *values ); + +GLAPI void GLAPIENTRY glGetPixelMapfv( GLenum map, GLfloat *values ); +GLAPI void GLAPIENTRY glGetPixelMapuiv( GLenum map, GLuint *values ); +GLAPI void GLAPIENTRY glGetPixelMapusv( GLenum map, GLushort *values ); + +GLAPI void GLAPIENTRY glBitmap( GLsizei width, GLsizei height, + GLfloat xorig, GLfloat yorig, + GLfloat xmove, GLfloat ymove, + const GLubyte *bitmap ); + +GLAPI void GLAPIENTRY glReadPixels( GLint x, GLint y, + GLsizei width, GLsizei height, + GLenum format, GLenum type, + GLvoid *pixels ); + +GLAPI void GLAPIENTRY glDrawPixels( GLsizei width, GLsizei height, + GLenum format, GLenum type, + const GLvoid *pixels ); + +GLAPI void GLAPIENTRY glCopyPixels( GLint x, GLint y, + GLsizei width, GLsizei height, + GLenum type ); + +/* + * Stenciling + */ + +GLAPI void GLAPIENTRY glStencilFunc( GLenum func, GLint ref, GLuint mask ); + +GLAPI void GLAPIENTRY glStencilMask( GLuint mask ); + +GLAPI void GLAPIENTRY glStencilOp( GLenum fail, GLenum zfail, GLenum zpass ); + +GLAPI void GLAPIENTRY glClearStencil( GLint s ); + + + +/* + * Texture mapping + */ + +GLAPI void GLAPIENTRY glTexGend( GLenum coord, GLenum pname, GLdouble param ); +GLAPI void GLAPIENTRY glTexGenf( GLenum coord, GLenum pname, GLfloat param ); +GLAPI void GLAPIENTRY glTexGeni( GLenum coord, GLenum pname, GLint param ); + +GLAPI void GLAPIENTRY glTexGendv( GLenum coord, GLenum pname, const GLdouble *params ); +GLAPI void GLAPIENTRY glTexGenfv( GLenum coord, GLenum pname, const GLfloat *params ); +GLAPI void GLAPIENTRY glTexGeniv( GLenum coord, GLenum pname, const GLint *params ); + +GLAPI void GLAPIENTRY glGetTexGendv( GLenum coord, GLenum pname, GLdouble *params ); +GLAPI void GLAPIENTRY glGetTexGenfv( GLenum coord, GLenum pname, GLfloat *params ); +GLAPI void GLAPIENTRY glGetTexGeniv( GLenum coord, GLenum pname, GLint *params ); + + +GLAPI void GLAPIENTRY glTexEnvf( GLenum target, GLenum pname, GLfloat param ); +GLAPI void GLAPIENTRY glTexEnvi( GLenum target, GLenum pname, GLint param ); + +GLAPI void GLAPIENTRY glTexEnvfv( GLenum target, GLenum pname, const GLfloat *params ); +GLAPI void GLAPIENTRY glTexEnviv( GLenum target, GLenum pname, const GLint *params ); + +GLAPI void GLAPIENTRY glGetTexEnvfv( GLenum target, GLenum pname, GLfloat *params ); +GLAPI void GLAPIENTRY glGetTexEnviv( GLenum target, GLenum pname, GLint *params ); + + +GLAPI void GLAPIENTRY glTexParameterf( GLenum target, GLenum pname, GLfloat param ); +GLAPI void GLAPIENTRY glTexParameteri( GLenum target, GLenum pname, GLint param ); + +GLAPI void GLAPIENTRY glTexParameterfv( GLenum target, GLenum pname, + const GLfloat *params ); +GLAPI void GLAPIENTRY glTexParameteriv( GLenum target, GLenum pname, + const GLint *params ); + +GLAPI void GLAPIENTRY glGetTexParameterfv( GLenum target, + GLenum pname, GLfloat *params); +GLAPI void GLAPIENTRY glGetTexParameteriv( GLenum target, + GLenum pname, GLint *params ); + +GLAPI void GLAPIENTRY glGetTexLevelParameterfv( GLenum target, GLint level, + GLenum pname, GLfloat *params ); +GLAPI void GLAPIENTRY glGetTexLevelParameteriv( GLenum target, GLint level, + GLenum pname, GLint *params ); + + +GLAPI void GLAPIENTRY glTexImage1D( GLenum target, GLint level, + GLint internalFormat, + GLsizei width, GLint border, + GLenum format, GLenum type, + const GLvoid *pixels ); + +GLAPI void GLAPIENTRY glTexImage2D( GLenum target, GLint level, + GLint internalFormat, + GLsizei width, GLsizei height, + GLint border, GLenum format, GLenum type, + const GLvoid *pixels ); + +GLAPI void GLAPIENTRY glGetTexImage( GLenum target, GLint level, + GLenum format, GLenum type, + GLvoid *pixels ); + + +/* 1.1 functions */ + +GLAPI void GLAPIENTRY glGenTextures( GLsizei n, GLuint *textures ); + +GLAPI void GLAPIENTRY glDeleteTextures( GLsizei n, const GLuint *textures); + +GLAPI void GLAPIENTRY glBindTexture( GLenum target, GLuint texture ); + +GLAPI void GLAPIENTRY glPrioritizeTextures( GLsizei n, + const GLuint *textures, + const GLclampf *priorities ); + +GLAPI GLboolean GLAPIENTRY glAreTexturesResident( GLsizei n, + const GLuint *textures, + GLboolean *residences ); + +GLAPI GLboolean GLAPIENTRY glIsTexture( GLuint texture ); + + +GLAPI void GLAPIENTRY glTexSubImage1D( GLenum target, GLint level, + GLint xoffset, + GLsizei width, GLenum format, + GLenum type, const GLvoid *pixels ); + + +GLAPI void GLAPIENTRY glTexSubImage2D( GLenum target, GLint level, + GLint xoffset, GLint yoffset, + GLsizei width, GLsizei height, + GLenum format, GLenum type, + const GLvoid *pixels ); + + +GLAPI void GLAPIENTRY glCopyTexImage1D( GLenum target, GLint level, + GLenum internalformat, + GLint x, GLint y, + GLsizei width, GLint border ); + + +GLAPI void GLAPIENTRY glCopyTexImage2D( GLenum target, GLint level, + GLenum internalformat, + GLint x, GLint y, + GLsizei width, GLsizei height, + GLint border ); + + +GLAPI void GLAPIENTRY glCopyTexSubImage1D( GLenum target, GLint level, + GLint xoffset, GLint x, GLint y, + GLsizei width ); + + +GLAPI void GLAPIENTRY glCopyTexSubImage2D( GLenum target, GLint level, + GLint xoffset, GLint yoffset, + GLint x, GLint y, + GLsizei width, GLsizei height ); + + +/* + * Evaluators + */ + +GLAPI void GLAPIENTRY glMap1d( GLenum target, GLdouble u1, GLdouble u2, + GLint stride, + GLint order, const GLdouble *points ); +GLAPI void GLAPIENTRY glMap1f( GLenum target, GLfloat u1, GLfloat u2, + GLint stride, + GLint order, const GLfloat *points ); + +GLAPI void GLAPIENTRY glMap2d( GLenum target, + GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, + GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, + const GLdouble *points ); +GLAPI void GLAPIENTRY glMap2f( GLenum target, + GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, + GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, + const GLfloat *points ); + +GLAPI void GLAPIENTRY glGetMapdv( GLenum target, GLenum query, GLdouble *v ); +GLAPI void GLAPIENTRY glGetMapfv( GLenum target, GLenum query, GLfloat *v ); +GLAPI void GLAPIENTRY glGetMapiv( GLenum target, GLenum query, GLint *v ); + +GLAPI void GLAPIENTRY glEvalCoord1d( GLdouble u ); +GLAPI void GLAPIENTRY glEvalCoord1f( GLfloat u ); + +GLAPI void GLAPIENTRY glEvalCoord1dv( const GLdouble *u ); +GLAPI void GLAPIENTRY glEvalCoord1fv( const GLfloat *u ); + +GLAPI void GLAPIENTRY glEvalCoord2d( GLdouble u, GLdouble v ); +GLAPI void GLAPIENTRY glEvalCoord2f( GLfloat u, GLfloat v ); + +GLAPI void GLAPIENTRY glEvalCoord2dv( const GLdouble *u ); +GLAPI void GLAPIENTRY glEvalCoord2fv( const GLfloat *u ); + +GLAPI void GLAPIENTRY glMapGrid1d( GLint un, GLdouble u1, GLdouble u2 ); +GLAPI void GLAPIENTRY glMapGrid1f( GLint un, GLfloat u1, GLfloat u2 ); + +GLAPI void GLAPIENTRY glMapGrid2d( GLint un, GLdouble u1, GLdouble u2, + GLint vn, GLdouble v1, GLdouble v2 ); +GLAPI void GLAPIENTRY glMapGrid2f( GLint un, GLfloat u1, GLfloat u2, + GLint vn, GLfloat v1, GLfloat v2 ); + +GLAPI void GLAPIENTRY glEvalPoint1( GLint i ); + +GLAPI void GLAPIENTRY glEvalPoint2( GLint i, GLint j ); + +GLAPI void GLAPIENTRY glEvalMesh1( GLenum mode, GLint i1, GLint i2 ); + +GLAPI void GLAPIENTRY glEvalMesh2( GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2 ); + + +/* + * Fog + */ + +GLAPI void GLAPIENTRY glFogf( GLenum pname, GLfloat param ); + +GLAPI void GLAPIENTRY glFogi( GLenum pname, GLint param ); + +GLAPI void GLAPIENTRY glFogfv( GLenum pname, const GLfloat *params ); + +GLAPI void GLAPIENTRY glFogiv( GLenum pname, const GLint *params ); + + +/* + * Selection and Feedback + */ + +GLAPI void GLAPIENTRY glFeedbackBuffer( GLsizei size, GLenum type, GLfloat *buffer ); + +GLAPI void GLAPIENTRY glPassThrough( GLfloat token ); + +GLAPI void GLAPIENTRY glSelectBuffer( GLsizei size, GLuint *buffer ); + +GLAPI void GLAPIENTRY glInitNames( void ); + +GLAPI void GLAPIENTRY glLoadName( GLuint name ); + +GLAPI void GLAPIENTRY glPushName( GLuint name ); + +GLAPI void GLAPIENTRY glPopName( void ); + + + +/* + * OpenGL 1.2 + */ + +#define GL_RESCALE_NORMAL 0x803A +#define GL_CLAMP_TO_EDGE 0x812F +#define GL_MAX_ELEMENTS_VERTICES 0x80E8 +#define GL_MAX_ELEMENTS_INDICES 0x80E9 +#define GL_BGR 0x80E0 +#define GL_BGRA 0x80E1 +#define GL_UNSIGNED_BYTE_3_3_2 0x8032 +#define GL_UNSIGNED_BYTE_2_3_3_REV 0x8362 +#define GL_UNSIGNED_SHORT_5_6_5 0x8363 +#define GL_UNSIGNED_SHORT_5_6_5_REV 0x8364 +#define GL_UNSIGNED_SHORT_4_4_4_4 0x8033 +#define GL_UNSIGNED_SHORT_4_4_4_4_REV 0x8365 +#define GL_UNSIGNED_SHORT_5_5_5_1 0x8034 +#define GL_UNSIGNED_SHORT_1_5_5_5_REV 0x8366 +#define GL_UNSIGNED_INT_8_8_8_8 0x8035 +#define GL_UNSIGNED_INT_8_8_8_8_REV 0x8367 +#define GL_UNSIGNED_INT_10_10_10_2 0x8036 +#define GL_UNSIGNED_INT_2_10_10_10_REV 0x8368 +#define GL_LIGHT_MODEL_COLOR_CONTROL 0x81F8 +#define GL_SINGLE_COLOR 0x81F9 +#define GL_SEPARATE_SPECULAR_COLOR 0x81FA +#define GL_TEXTURE_MIN_LOD 0x813A +#define GL_TEXTURE_MAX_LOD 0x813B +#define GL_TEXTURE_BASE_LEVEL 0x813C +#define GL_TEXTURE_MAX_LEVEL 0x813D +#define GL_SMOOTH_POINT_SIZE_RANGE 0x0B12 +#define GL_SMOOTH_POINT_SIZE_GRANULARITY 0x0B13 +#define GL_SMOOTH_LINE_WIDTH_RANGE 0x0B22 +#define GL_SMOOTH_LINE_WIDTH_GRANULARITY 0x0B23 +#define GL_ALIASED_POINT_SIZE_RANGE 0x846D +#define GL_ALIASED_LINE_WIDTH_RANGE 0x846E +#define GL_PACK_SKIP_IMAGES 0x806B +#define GL_PACK_IMAGE_HEIGHT 0x806C +#define GL_UNPACK_SKIP_IMAGES 0x806D +#define GL_UNPACK_IMAGE_HEIGHT 0x806E +#define GL_TEXTURE_3D 0x806F +#define GL_PROXY_TEXTURE_3D 0x8070 +#define GL_TEXTURE_DEPTH 0x8071 +#define GL_TEXTURE_WRAP_R 0x8072 +#define GL_MAX_3D_TEXTURE_SIZE 0x8073 +#define GL_TEXTURE_BINDING_3D 0x806A + +GLAPI void GLAPIENTRY glDrawRangeElements( GLenum mode, GLuint start, + GLuint end, GLsizei count, GLenum type, const GLvoid *indices ); + +GLAPI void GLAPIENTRY glTexImage3D( GLenum target, GLint level, + GLint internalFormat, + GLsizei width, GLsizei height, + GLsizei depth, GLint border, + GLenum format, GLenum type, + const GLvoid *pixels ); + +GLAPI void GLAPIENTRY glTexSubImage3D( GLenum target, GLint level, + GLint xoffset, GLint yoffset, + GLint zoffset, GLsizei width, + GLsizei height, GLsizei depth, + GLenum format, + GLenum type, const GLvoid *pixels); + +GLAPI void GLAPIENTRY glCopyTexSubImage3D( GLenum target, GLint level, + GLint xoffset, GLint yoffset, + GLint zoffset, GLint x, + GLint y, GLsizei width, + GLsizei height ); + +typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTSPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices); +typedef void (APIENTRYP PFNGLTEXIMAGE3DPROC) (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels); +typedef void (APIENTRYP PFNGLTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid *pixels); +typedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); + + +/* + * GL_ARB_imaging + */ + +#define GL_CONSTANT_COLOR 0x8001 +#define GL_ONE_MINUS_CONSTANT_COLOR 0x8002 +#define GL_CONSTANT_ALPHA 0x8003 +#define GL_ONE_MINUS_CONSTANT_ALPHA 0x8004 +#define GL_COLOR_TABLE 0x80D0 +#define GL_POST_CONVOLUTION_COLOR_TABLE 0x80D1 +#define GL_POST_COLOR_MATRIX_COLOR_TABLE 0x80D2 +#define GL_PROXY_COLOR_TABLE 0x80D3 +#define GL_PROXY_POST_CONVOLUTION_COLOR_TABLE 0x80D4 +#define GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE 0x80D5 +#define GL_COLOR_TABLE_SCALE 0x80D6 +#define GL_COLOR_TABLE_BIAS 0x80D7 +#define GL_COLOR_TABLE_FORMAT 0x80D8 +#define GL_COLOR_TABLE_WIDTH 0x80D9 +#define GL_COLOR_TABLE_RED_SIZE 0x80DA +#define GL_COLOR_TABLE_GREEN_SIZE 0x80DB +#define GL_COLOR_TABLE_BLUE_SIZE 0x80DC +#define GL_COLOR_TABLE_ALPHA_SIZE 0x80DD +#define GL_COLOR_TABLE_LUMINANCE_SIZE 0x80DE +#define GL_COLOR_TABLE_INTENSITY_SIZE 0x80DF +#define GL_CONVOLUTION_1D 0x8010 +#define GL_CONVOLUTION_2D 0x8011 +#define GL_SEPARABLE_2D 0x8012 +#define GL_CONVOLUTION_BORDER_MODE 0x8013 +#define GL_CONVOLUTION_FILTER_SCALE 0x8014 +#define GL_CONVOLUTION_FILTER_BIAS 0x8015 +#define GL_REDUCE 0x8016 +#define GL_CONVOLUTION_FORMAT 0x8017 +#define GL_CONVOLUTION_WIDTH 0x8018 +#define GL_CONVOLUTION_HEIGHT 0x8019 +#define GL_MAX_CONVOLUTION_WIDTH 0x801A +#define GL_MAX_CONVOLUTION_HEIGHT 0x801B +#define GL_POST_CONVOLUTION_RED_SCALE 0x801C +#define GL_POST_CONVOLUTION_GREEN_SCALE 0x801D +#define GL_POST_CONVOLUTION_BLUE_SCALE 0x801E +#define GL_POST_CONVOLUTION_ALPHA_SCALE 0x801F +#define GL_POST_CONVOLUTION_RED_BIAS 0x8020 +#define GL_POST_CONVOLUTION_GREEN_BIAS 0x8021 +#define GL_POST_CONVOLUTION_BLUE_BIAS 0x8022 +#define GL_POST_CONVOLUTION_ALPHA_BIAS 0x8023 +#define GL_CONSTANT_BORDER 0x8151 +#define GL_REPLICATE_BORDER 0x8153 +#define GL_CONVOLUTION_BORDER_COLOR 0x8154 +#define GL_COLOR_MATRIX 0x80B1 +#define GL_COLOR_MATRIX_STACK_DEPTH 0x80B2 +#define GL_MAX_COLOR_MATRIX_STACK_DEPTH 0x80B3 +#define GL_POST_COLOR_MATRIX_RED_SCALE 0x80B4 +#define GL_POST_COLOR_MATRIX_GREEN_SCALE 0x80B5 +#define GL_POST_COLOR_MATRIX_BLUE_SCALE 0x80B6 +#define GL_POST_COLOR_MATRIX_ALPHA_SCALE 0x80B7 +#define GL_POST_COLOR_MATRIX_RED_BIAS 0x80B8 +#define GL_POST_COLOR_MATRIX_GREEN_BIAS 0x80B9 +#define GL_POST_COLOR_MATRIX_BLUE_BIAS 0x80BA +#define GL_POST_COLOR_MATRIX_ALPHA_BIAS 0x80BB +#define GL_HISTOGRAM 0x8024 +#define GL_PROXY_HISTOGRAM 0x8025 +#define GL_HISTOGRAM_WIDTH 0x8026 +#define GL_HISTOGRAM_FORMAT 0x8027 +#define GL_HISTOGRAM_RED_SIZE 0x8028 +#define GL_HISTOGRAM_GREEN_SIZE 0x8029 +#define GL_HISTOGRAM_BLUE_SIZE 0x802A +#define GL_HISTOGRAM_ALPHA_SIZE 0x802B +#define GL_HISTOGRAM_LUMINANCE_SIZE 0x802C +#define GL_HISTOGRAM_SINK 0x802D +#define GL_MINMAX 0x802E +#define GL_MINMAX_FORMAT 0x802F +#define GL_MINMAX_SINK 0x8030 +#define GL_TABLE_TOO_LARGE 0x8031 +#define GL_BLEND_EQUATION 0x8009 +#define GL_MIN 0x8007 +#define GL_MAX 0x8008 +#define GL_FUNC_ADD 0x8006 +#define GL_FUNC_SUBTRACT 0x800A +#define GL_FUNC_REVERSE_SUBTRACT 0x800B +#define GL_BLEND_COLOR 0x8005 + + +GLAPI void GLAPIENTRY glColorTable( GLenum target, GLenum internalformat, + GLsizei width, GLenum format, + GLenum type, const GLvoid *table ); + +GLAPI void GLAPIENTRY glColorSubTable( GLenum target, + GLsizei start, GLsizei count, + GLenum format, GLenum type, + const GLvoid *data ); + +GLAPI void GLAPIENTRY glColorTableParameteriv(GLenum target, GLenum pname, + const GLint *params); + +GLAPI void GLAPIENTRY glColorTableParameterfv(GLenum target, GLenum pname, + const GLfloat *params); + +GLAPI void GLAPIENTRY glCopyColorSubTable( GLenum target, GLsizei start, + GLint x, GLint y, GLsizei width ); + +GLAPI void GLAPIENTRY glCopyColorTable( GLenum target, GLenum internalformat, + GLint x, GLint y, GLsizei width ); + +GLAPI void GLAPIENTRY glGetColorTable( GLenum target, GLenum format, + GLenum type, GLvoid *table ); + +GLAPI void GLAPIENTRY glGetColorTableParameterfv( GLenum target, GLenum pname, + GLfloat *params ); + +GLAPI void GLAPIENTRY glGetColorTableParameteriv( GLenum target, GLenum pname, + GLint *params ); + +GLAPI void GLAPIENTRY glBlendEquation( GLenum mode ); + +GLAPI void GLAPIENTRY glBlendColor( GLclampf red, GLclampf green, + GLclampf blue, GLclampf alpha ); + +GLAPI void GLAPIENTRY glHistogram( GLenum target, GLsizei width, + GLenum internalformat, GLboolean sink ); + +GLAPI void GLAPIENTRY glResetHistogram( GLenum target ); + +GLAPI void GLAPIENTRY glGetHistogram( GLenum target, GLboolean reset, + GLenum format, GLenum type, + GLvoid *values ); + +GLAPI void GLAPIENTRY glGetHistogramParameterfv( GLenum target, GLenum pname, + GLfloat *params ); + +GLAPI void GLAPIENTRY glGetHistogramParameteriv( GLenum target, GLenum pname, + GLint *params ); + +GLAPI void GLAPIENTRY glMinmax( GLenum target, GLenum internalformat, + GLboolean sink ); + +GLAPI void GLAPIENTRY glResetMinmax( GLenum target ); + +GLAPI void GLAPIENTRY glGetMinmax( GLenum target, GLboolean reset, + GLenum format, GLenum types, + GLvoid *values ); + +GLAPI void GLAPIENTRY glGetMinmaxParameterfv( GLenum target, GLenum pname, + GLfloat *params ); + +GLAPI void GLAPIENTRY glGetMinmaxParameteriv( GLenum target, GLenum pname, + GLint *params ); + +GLAPI void GLAPIENTRY glConvolutionFilter1D( GLenum target, + GLenum internalformat, GLsizei width, GLenum format, GLenum type, + const GLvoid *image ); + +GLAPI void GLAPIENTRY glConvolutionFilter2D( GLenum target, + GLenum internalformat, GLsizei width, GLsizei height, GLenum format, + GLenum type, const GLvoid *image ); + +GLAPI void GLAPIENTRY glConvolutionParameterf( GLenum target, GLenum pname, + GLfloat params ); + +GLAPI void GLAPIENTRY glConvolutionParameterfv( GLenum target, GLenum pname, + const GLfloat *params ); + +GLAPI void GLAPIENTRY glConvolutionParameteri( GLenum target, GLenum pname, + GLint params ); + +GLAPI void GLAPIENTRY glConvolutionParameteriv( GLenum target, GLenum pname, + const GLint *params ); + +GLAPI void GLAPIENTRY glCopyConvolutionFilter1D( GLenum target, + GLenum internalformat, GLint x, GLint y, GLsizei width ); + +GLAPI void GLAPIENTRY glCopyConvolutionFilter2D( GLenum target, + GLenum internalformat, GLint x, GLint y, GLsizei width, + GLsizei height); + +GLAPI void GLAPIENTRY glGetConvolutionFilter( GLenum target, GLenum format, + GLenum type, GLvoid *image ); + +GLAPI void GLAPIENTRY glGetConvolutionParameterfv( GLenum target, GLenum pname, + GLfloat *params ); + +GLAPI void GLAPIENTRY glGetConvolutionParameteriv( GLenum target, GLenum pname, + GLint *params ); + +GLAPI void GLAPIENTRY glSeparableFilter2D( GLenum target, + GLenum internalformat, GLsizei width, GLsizei height, GLenum format, + GLenum type, const GLvoid *row, const GLvoid *column ); + +GLAPI void GLAPIENTRY glGetSeparableFilter( GLenum target, GLenum format, + GLenum type, GLvoid *row, GLvoid *column, GLvoid *span ); + + + + +/* + * OpenGL 1.3 + */ + +/* multitexture */ +#define GL_TEXTURE0 0x84C0 +#define GL_TEXTURE1 0x84C1 +#define GL_TEXTURE2 0x84C2 +#define GL_TEXTURE3 0x84C3 +#define GL_TEXTURE4 0x84C4 +#define GL_TEXTURE5 0x84C5 +#define GL_TEXTURE6 0x84C6 +#define GL_TEXTURE7 0x84C7 +#define GL_TEXTURE8 0x84C8 +#define GL_TEXTURE9 0x84C9 +#define GL_TEXTURE10 0x84CA +#define GL_TEXTURE11 0x84CB +#define GL_TEXTURE12 0x84CC +#define GL_TEXTURE13 0x84CD +#define GL_TEXTURE14 0x84CE +#define GL_TEXTURE15 0x84CF +#define GL_TEXTURE16 0x84D0 +#define GL_TEXTURE17 0x84D1 +#define GL_TEXTURE18 0x84D2 +#define GL_TEXTURE19 0x84D3 +#define GL_TEXTURE20 0x84D4 +#define GL_TEXTURE21 0x84D5 +#define GL_TEXTURE22 0x84D6 +#define GL_TEXTURE23 0x84D7 +#define GL_TEXTURE24 0x84D8 +#define GL_TEXTURE25 0x84D9 +#define GL_TEXTURE26 0x84DA +#define GL_TEXTURE27 0x84DB +#define GL_TEXTURE28 0x84DC +#define GL_TEXTURE29 0x84DD +#define GL_TEXTURE30 0x84DE +#define GL_TEXTURE31 0x84DF +#define GL_ACTIVE_TEXTURE 0x84E0 +#define GL_CLIENT_ACTIVE_TEXTURE 0x84E1 +#define GL_MAX_TEXTURE_UNITS 0x84E2 +/* texture_cube_map */ +#define GL_NORMAL_MAP 0x8511 +#define GL_REFLECTION_MAP 0x8512 +#define GL_TEXTURE_CUBE_MAP 0x8513 +#define GL_TEXTURE_BINDING_CUBE_MAP 0x8514 +#define GL_TEXTURE_CUBE_MAP_POSITIVE_X 0x8515 +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X 0x8516 +#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y 0x8517 +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y 0x8518 +#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z 0x8519 +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z 0x851A +#define GL_PROXY_TEXTURE_CUBE_MAP 0x851B +#define GL_MAX_CUBE_MAP_TEXTURE_SIZE 0x851C +/* texture_compression */ +#define GL_COMPRESSED_ALPHA 0x84E9 +#define GL_COMPRESSED_LUMINANCE 0x84EA +#define GL_COMPRESSED_LUMINANCE_ALPHA 0x84EB +#define GL_COMPRESSED_INTENSITY 0x84EC +#define GL_COMPRESSED_RGB 0x84ED +#define GL_COMPRESSED_RGBA 0x84EE +#define GL_TEXTURE_COMPRESSION_HINT 0x84EF +#define GL_TEXTURE_COMPRESSED_IMAGE_SIZE 0x86A0 +#define GL_TEXTURE_COMPRESSED 0x86A1 +#define GL_NUM_COMPRESSED_TEXTURE_FORMATS 0x86A2 +#define GL_COMPRESSED_TEXTURE_FORMATS 0x86A3 +/* multisample */ +#define GL_MULTISAMPLE 0x809D +#define GL_SAMPLE_ALPHA_TO_COVERAGE 0x809E +#define GL_SAMPLE_ALPHA_TO_ONE 0x809F +#define GL_SAMPLE_COVERAGE 0x80A0 +#define GL_SAMPLE_BUFFERS 0x80A8 +#define GL_SAMPLES 0x80A9 +#define GL_SAMPLE_COVERAGE_VALUE 0x80AA +#define GL_SAMPLE_COVERAGE_INVERT 0x80AB +#define GL_MULTISAMPLE_BIT 0x20000000 +/* transpose_matrix */ +#define GL_TRANSPOSE_MODELVIEW_MATRIX 0x84E3 +#define GL_TRANSPOSE_PROJECTION_MATRIX 0x84E4 +#define GL_TRANSPOSE_TEXTURE_MATRIX 0x84E5 +#define GL_TRANSPOSE_COLOR_MATRIX 0x84E6 +/* texture_env_combine */ +#define GL_COMBINE 0x8570 +#define GL_COMBINE_RGB 0x8571 +#define GL_COMBINE_ALPHA 0x8572 +#define GL_SOURCE0_RGB 0x8580 +#define GL_SOURCE1_RGB 0x8581 +#define GL_SOURCE2_RGB 0x8582 +#define GL_SOURCE0_ALPHA 0x8588 +#define GL_SOURCE1_ALPHA 0x8589 +#define GL_SOURCE2_ALPHA 0x858A +#define GL_OPERAND0_RGB 0x8590 +#define GL_OPERAND1_RGB 0x8591 +#define GL_OPERAND2_RGB 0x8592 +#define GL_OPERAND0_ALPHA 0x8598 +#define GL_OPERAND1_ALPHA 0x8599 +#define GL_OPERAND2_ALPHA 0x859A +#define GL_RGB_SCALE 0x8573 +#define GL_ADD_SIGNED 0x8574 +#define GL_INTERPOLATE 0x8575 +#define GL_SUBTRACT 0x84E7 +#define GL_CONSTANT 0x8576 +#define GL_PRIMARY_COLOR 0x8577 +#define GL_PREVIOUS 0x8578 +/* texture_env_dot3 */ +#define GL_DOT3_RGB 0x86AE +#define GL_DOT3_RGBA 0x86AF +/* texture_border_clamp */ +#define GL_CLAMP_TO_BORDER 0x812D + +GLAPI void GLAPIENTRY glActiveTexture( GLenum texture ); + +GLAPI void GLAPIENTRY glClientActiveTexture( GLenum texture ); + +GLAPI void GLAPIENTRY glCompressedTexImage1D( GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid *data ); + +GLAPI void GLAPIENTRY glCompressedTexImage2D( GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data ); + +GLAPI void GLAPIENTRY glCompressedTexImage3D( GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *data ); + +GLAPI void GLAPIENTRY glCompressedTexSubImage1D( GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid *data ); + +GLAPI void GLAPIENTRY glCompressedTexSubImage2D( GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *data ); + +GLAPI void GLAPIENTRY glCompressedTexSubImage3D( GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid *data ); + +GLAPI void GLAPIENTRY glGetCompressedTexImage( GLenum target, GLint lod, GLvoid *img ); + +GLAPI void GLAPIENTRY glMultiTexCoord1d( GLenum target, GLdouble s ); + +GLAPI void GLAPIENTRY glMultiTexCoord1dv( GLenum target, const GLdouble *v ); + +GLAPI void GLAPIENTRY glMultiTexCoord1f( GLenum target, GLfloat s ); + +GLAPI void GLAPIENTRY glMultiTexCoord1fv( GLenum target, const GLfloat *v ); + +GLAPI void GLAPIENTRY glMultiTexCoord1i( GLenum target, GLint s ); + +GLAPI void GLAPIENTRY glMultiTexCoord1iv( GLenum target, const GLint *v ); + +GLAPI void GLAPIENTRY glMultiTexCoord1s( GLenum target, GLshort s ); + +GLAPI void GLAPIENTRY glMultiTexCoord1sv( GLenum target, const GLshort *v ); + +GLAPI void GLAPIENTRY glMultiTexCoord2d( GLenum target, GLdouble s, GLdouble t ); + +GLAPI void GLAPIENTRY glMultiTexCoord2dv( GLenum target, const GLdouble *v ); + +GLAPI void GLAPIENTRY glMultiTexCoord2f( GLenum target, GLfloat s, GLfloat t ); + +GLAPI void GLAPIENTRY glMultiTexCoord2fv( GLenum target, const GLfloat *v ); + +GLAPI void GLAPIENTRY glMultiTexCoord2i( GLenum target, GLint s, GLint t ); + +GLAPI void GLAPIENTRY glMultiTexCoord2iv( GLenum target, const GLint *v ); + +GLAPI void GLAPIENTRY glMultiTexCoord2s( GLenum target, GLshort s, GLshort t ); + +GLAPI void GLAPIENTRY glMultiTexCoord2sv( GLenum target, const GLshort *v ); + +GLAPI void GLAPIENTRY glMultiTexCoord3d( GLenum target, GLdouble s, GLdouble t, GLdouble r ); + +GLAPI void GLAPIENTRY glMultiTexCoord3dv( GLenum target, const GLdouble *v ); + +GLAPI void GLAPIENTRY glMultiTexCoord3f( GLenum target, GLfloat s, GLfloat t, GLfloat r ); + +GLAPI void GLAPIENTRY glMultiTexCoord3fv( GLenum target, const GLfloat *v ); + +GLAPI void GLAPIENTRY glMultiTexCoord3i( GLenum target, GLint s, GLint t, GLint r ); + +GLAPI void GLAPIENTRY glMultiTexCoord3iv( GLenum target, const GLint *v ); + +GLAPI void GLAPIENTRY glMultiTexCoord3s( GLenum target, GLshort s, GLshort t, GLshort r ); + +GLAPI void GLAPIENTRY glMultiTexCoord3sv( GLenum target, const GLshort *v ); + +GLAPI void GLAPIENTRY glMultiTexCoord4d( GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q ); + +GLAPI void GLAPIENTRY glMultiTexCoord4dv( GLenum target, const GLdouble *v ); + +GLAPI void GLAPIENTRY glMultiTexCoord4f( GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q ); + +GLAPI void GLAPIENTRY glMultiTexCoord4fv( GLenum target, const GLfloat *v ); + +GLAPI void GLAPIENTRY glMultiTexCoord4i( GLenum target, GLint s, GLint t, GLint r, GLint q ); + +GLAPI void GLAPIENTRY glMultiTexCoord4iv( GLenum target, const GLint *v ); + +GLAPI void GLAPIENTRY glMultiTexCoord4s( GLenum target, GLshort s, GLshort t, GLshort r, GLshort q ); + +GLAPI void GLAPIENTRY glMultiTexCoord4sv( GLenum target, const GLshort *v ); + + +GLAPI void GLAPIENTRY glLoadTransposeMatrixd( const GLdouble m[16] ); + +GLAPI void GLAPIENTRY glLoadTransposeMatrixf( const GLfloat m[16] ); + +GLAPI void GLAPIENTRY glMultTransposeMatrixd( const GLdouble m[16] ); + +GLAPI void GLAPIENTRY glMultTransposeMatrixf( const GLfloat m[16] ); + +GLAPI void GLAPIENTRY glSampleCoverage( GLclampf value, GLboolean invert ); + + +typedef void (APIENTRYP PFNGLACTIVETEXTUREPROC) (GLenum texture); +typedef void (APIENTRYP PFNGLSAMPLECOVERAGEPROC) (GLclampf value, GLboolean invert); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE3DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *data); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE2DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE1DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid *data); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid *data); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *data); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC) (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid *data); +typedef void (APIENTRYP PFNGLGETCOMPRESSEDTEXIMAGEPROC) (GLenum target, GLint level, GLvoid *img); + + + +/* + * GL_ARB_multitexture (ARB extension 1 and OpenGL 1.2.1) + */ +#ifndef GL_ARB_multitexture +#define GL_ARB_multitexture 1 + +#define GL_TEXTURE0_ARB 0x84C0 +#define GL_TEXTURE1_ARB 0x84C1 +#define GL_TEXTURE2_ARB 0x84C2 +#define GL_TEXTURE3_ARB 0x84C3 +#define GL_TEXTURE4_ARB 0x84C4 +#define GL_TEXTURE5_ARB 0x84C5 +#define GL_TEXTURE6_ARB 0x84C6 +#define GL_TEXTURE7_ARB 0x84C7 +#define GL_TEXTURE8_ARB 0x84C8 +#define GL_TEXTURE9_ARB 0x84C9 +#define GL_TEXTURE10_ARB 0x84CA +#define GL_TEXTURE11_ARB 0x84CB +#define GL_TEXTURE12_ARB 0x84CC +#define GL_TEXTURE13_ARB 0x84CD +#define GL_TEXTURE14_ARB 0x84CE +#define GL_TEXTURE15_ARB 0x84CF +#define GL_TEXTURE16_ARB 0x84D0 +#define GL_TEXTURE17_ARB 0x84D1 +#define GL_TEXTURE18_ARB 0x84D2 +#define GL_TEXTURE19_ARB 0x84D3 +#define GL_TEXTURE20_ARB 0x84D4 +#define GL_TEXTURE21_ARB 0x84D5 +#define GL_TEXTURE22_ARB 0x84D6 +#define GL_TEXTURE23_ARB 0x84D7 +#define GL_TEXTURE24_ARB 0x84D8 +#define GL_TEXTURE25_ARB 0x84D9 +#define GL_TEXTURE26_ARB 0x84DA +#define GL_TEXTURE27_ARB 0x84DB +#define GL_TEXTURE28_ARB 0x84DC +#define GL_TEXTURE29_ARB 0x84DD +#define GL_TEXTURE30_ARB 0x84DE +#define GL_TEXTURE31_ARB 0x84DF +#define GL_ACTIVE_TEXTURE_ARB 0x84E0 +#define GL_CLIENT_ACTIVE_TEXTURE_ARB 0x84E1 +#define GL_MAX_TEXTURE_UNITS_ARB 0x84E2 + +GLAPI void GLAPIENTRY glActiveTextureARB(GLenum texture); +GLAPI void GLAPIENTRY glClientActiveTextureARB(GLenum texture); +GLAPI void GLAPIENTRY glMultiTexCoord1dARB(GLenum target, GLdouble s); +GLAPI void GLAPIENTRY glMultiTexCoord1dvARB(GLenum target, const GLdouble *v); +GLAPI void GLAPIENTRY glMultiTexCoord1fARB(GLenum target, GLfloat s); +GLAPI void GLAPIENTRY glMultiTexCoord1fvARB(GLenum target, const GLfloat *v); +GLAPI void GLAPIENTRY glMultiTexCoord1iARB(GLenum target, GLint s); +GLAPI void GLAPIENTRY glMultiTexCoord1ivARB(GLenum target, const GLint *v); +GLAPI void GLAPIENTRY glMultiTexCoord1sARB(GLenum target, GLshort s); +GLAPI void GLAPIENTRY glMultiTexCoord1svARB(GLenum target, const GLshort *v); +GLAPI void GLAPIENTRY glMultiTexCoord2dARB(GLenum target, GLdouble s, GLdouble t); +GLAPI void GLAPIENTRY glMultiTexCoord2dvARB(GLenum target, const GLdouble *v); +GLAPI void GLAPIENTRY glMultiTexCoord2fARB(GLenum target, GLfloat s, GLfloat t); +GLAPI void GLAPIENTRY glMultiTexCoord2fvARB(GLenum target, const GLfloat *v); +GLAPI void GLAPIENTRY glMultiTexCoord2iARB(GLenum target, GLint s, GLint t); +GLAPI void GLAPIENTRY glMultiTexCoord2ivARB(GLenum target, const GLint *v); +GLAPI void GLAPIENTRY glMultiTexCoord2sARB(GLenum target, GLshort s, GLshort t); +GLAPI void GLAPIENTRY glMultiTexCoord2svARB(GLenum target, const GLshort *v); +GLAPI void GLAPIENTRY glMultiTexCoord3dARB(GLenum target, GLdouble s, GLdouble t, GLdouble r); +GLAPI void GLAPIENTRY glMultiTexCoord3dvARB(GLenum target, const GLdouble *v); +GLAPI void GLAPIENTRY glMultiTexCoord3fARB(GLenum target, GLfloat s, GLfloat t, GLfloat r); +GLAPI void GLAPIENTRY glMultiTexCoord3fvARB(GLenum target, const GLfloat *v); +GLAPI void GLAPIENTRY glMultiTexCoord3iARB(GLenum target, GLint s, GLint t, GLint r); +GLAPI void GLAPIENTRY glMultiTexCoord3ivARB(GLenum target, const GLint *v); +GLAPI void GLAPIENTRY glMultiTexCoord3sARB(GLenum target, GLshort s, GLshort t, GLshort r); +GLAPI void GLAPIENTRY glMultiTexCoord3svARB(GLenum target, const GLshort *v); +GLAPI void GLAPIENTRY glMultiTexCoord4dARB(GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q); +GLAPI void GLAPIENTRY glMultiTexCoord4dvARB(GLenum target, const GLdouble *v); +GLAPI void GLAPIENTRY glMultiTexCoord4fARB(GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q); +GLAPI void GLAPIENTRY glMultiTexCoord4fvARB(GLenum target, const GLfloat *v); +GLAPI void GLAPIENTRY glMultiTexCoord4iARB(GLenum target, GLint s, GLint t, GLint r, GLint q); +GLAPI void GLAPIENTRY glMultiTexCoord4ivARB(GLenum target, const GLint *v); +GLAPI void GLAPIENTRY glMultiTexCoord4sARB(GLenum target, GLshort s, GLshort t, GLshort r, GLshort q); +GLAPI void GLAPIENTRY glMultiTexCoord4svARB(GLenum target, const GLshort *v); + +typedef void (APIENTRYP PFNGLACTIVETEXTUREARBPROC) (GLenum texture); +typedef void (APIENTRYP PFNGLCLIENTACTIVETEXTUREARBPROC) (GLenum texture); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1DARBPROC) (GLenum target, GLdouble s); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1DVARBPROC) (GLenum target, const GLdouble *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1FARBPROC) (GLenum target, GLfloat s); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1FVARBPROC) (GLenum target, const GLfloat *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1IARBPROC) (GLenum target, GLint s); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1IVARBPROC) (GLenum target, const GLint *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1SARBPROC) (GLenum target, GLshort s); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1SVARBPROC) (GLenum target, const GLshort *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2DARBPROC) (GLenum target, GLdouble s, GLdouble t); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2DVARBPROC) (GLenum target, const GLdouble *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2FARBPROC) (GLenum target, GLfloat s, GLfloat t); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2FVARBPROC) (GLenum target, const GLfloat *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2IARBPROC) (GLenum target, GLint s, GLint t); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2IVARBPROC) (GLenum target, const GLint *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2SARBPROC) (GLenum target, GLshort s, GLshort t); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2SVARBPROC) (GLenum target, const GLshort *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3DARBPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3DVARBPROC) (GLenum target, const GLdouble *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3FARBPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3FVARBPROC) (GLenum target, const GLfloat *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3IARBPROC) (GLenum target, GLint s, GLint t, GLint r); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3IVARBPROC) (GLenum target, const GLint *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3SARBPROC) (GLenum target, GLshort s, GLshort t, GLshort r); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3SVARBPROC) (GLenum target, const GLshort *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4DARBPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4DVARBPROC) (GLenum target, const GLdouble *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4FARBPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4FVARBPROC) (GLenum target, const GLfloat *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4IARBPROC) (GLenum target, GLint s, GLint t, GLint r, GLint q); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4IVARBPROC) (GLenum target, const GLint *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4SARBPROC) (GLenum target, GLshort s, GLshort t, GLshort r, GLshort q); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4SVARBPROC) (GLenum target, const GLshort *v); + +#endif /* GL_ARB_multitexture */ + + + +/* + * Define this token if you want "old-style" header file behaviour (extensions + * defined in gl.h). Otherwise, extensions will be included from glext.h. + */ +#if !defined(NO_SDL_GLEXT) && !defined(GL_GLEXT_LEGACY) +#include "SDL_opengl_glext.h" +#endif /* GL_GLEXT_LEGACY */ + + + +/********************************************************************** + * Begin system-specific stuff + */ +#if defined(PRAGMA_EXPORT_SUPPORTED) +#pragma export off +#endif + +/* + * End system-specific stuff + **********************************************************************/ + + +#ifdef __cplusplus +} +#endif + +#endif /* __gl_h_ */ + +#endif /* !__IPHONEOS__ */ + +#endif /* SDL_opengl_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/third_party/tlRender-install-Release/include/SDL2/SDL_opengl_glext.h b/third_party/tlRender-install-Release/include/SDL2/SDL_opengl_glext.h new file mode 100644 index 00000000..ff6ad12c --- /dev/null +++ b/third_party/tlRender-install-Release/include/SDL2/SDL_opengl_glext.h @@ -0,0 +1,13213 @@ +/* SDL modified the include guard to be compatible with Mesa and Apple include guards: + * - Mesa uses: __gl_glext_h_ + * - Apple uses: __glext_h_ */ +#if !defined(__glext_h_) && !defined(__gl_glext_h_) +#define __glext_h_ 1 +#define __gl_glext_h_ 1 + +#ifdef __cplusplus +extern "C" { +#endif + +/* +** Copyright 2013-2020 The Khronos Group Inc. +** SPDX-License-Identifier: MIT +** +** This header is generated from the Khronos OpenGL / OpenGL ES XML +** API Registry. The current version of the Registry, generator scripts +** used to make the header, and the header can be found at +** https://github.com/KhronosGroup/OpenGL-Registry +*/ + +#if defined(_WIN32) && !defined(APIENTRY) && !defined(__CYGWIN__) && !defined(__SCITECH_SNAP__) +#ifndef WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN 1 +#endif +#include +#endif + +#ifndef APIENTRY +#define APIENTRY +#endif +#ifndef APIENTRYP +#define APIENTRYP APIENTRY * +#endif +#ifndef GLAPI +#define GLAPI extern +#endif + +#define GL_GLEXT_VERSION 20220530 + +/*#include */ +#ifndef __khrplatform_h_ +#define __khrplatform_h_ + +/* +** Copyright (c) 2008-2018 The Khronos Group Inc. +** +** Permission is hereby granted, free of charge, to any person obtaining a +** copy of this software and/or associated documentation files (the +** "Materials"), to deal in the Materials without restriction, including +** without limitation the rights to use, copy, modify, merge, publish, +** distribute, sublicense, and/or sell copies of the Materials, and to +** permit persons to whom the Materials are furnished to do so, subject to +** the following conditions: +** +** The above copyright notice and this permission notice shall be included +** in all copies or substantial portions of the Materials. +** +** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. +*/ + +/* Khronos platform-specific types and definitions. + * + * The master copy of khrplatform.h is maintained in the Khronos EGL + * Registry repository at https://github.com/KhronosGroup/EGL-Registry + * The last semantic modification to khrplatform.h was at commit ID: + * 67a3e0864c2d75ea5287b9f3d2eb74a745936692 + * + * Adopters may modify this file to suit their platform. Adopters are + * encouraged to submit platform specific modifications to the Khronos + * group so that they can be included in future versions of this file. + * Please submit changes by filing pull requests or issues on + * the EGL Registry repository linked above. + * + * + * See the Implementer's Guidelines for information about where this file + * should be located on your system and for more details of its use: + * http://www.khronos.org/registry/implementers_guide.pdf + * + * This file should be included as + * #include + * by Khronos client API header files that use its types and defines. + * + * The types in khrplatform.h should only be used to define API-specific types. + * + * Types defined in khrplatform.h: + * khronos_int8_t signed 8 bit + * khronos_uint8_t unsigned 8 bit + * khronos_int16_t signed 16 bit + * khronos_uint16_t unsigned 16 bit + * khronos_int32_t signed 32 bit + * khronos_uint32_t unsigned 32 bit + * khronos_int64_t signed 64 bit + * khronos_uint64_t unsigned 64 bit + * khronos_intptr_t signed same number of bits as a pointer + * khronos_uintptr_t unsigned same number of bits as a pointer + * khronos_ssize_t signed size + * khronos_usize_t unsigned size + * khronos_float_t signed 32 bit floating point + * khronos_time_ns_t unsigned 64 bit time in nanoseconds + * khronos_utime_nanoseconds_t unsigned time interval or absolute time in + * nanoseconds + * khronos_stime_nanoseconds_t signed time interval in nanoseconds + * khronos_boolean_enum_t enumerated boolean type. This should + * only be used as a base type when a client API's boolean type is + * an enum. Client APIs which use an integer or other type for + * booleans cannot use this as the base type for their boolean. + * + * Tokens defined in khrplatform.h: + * + * KHRONOS_FALSE, KHRONOS_TRUE Enumerated boolean false/true values. + * + * KHRONOS_SUPPORT_INT64 is 1 if 64 bit integers are supported; otherwise 0. + * KHRONOS_SUPPORT_FLOAT is 1 if floats are supported; otherwise 0. + * + * Calling convention macros defined in this file: + * KHRONOS_APICALL + * KHRONOS_APIENTRY + * KHRONOS_APIATTRIBUTES + * + * These may be used in function prototypes as: + * + * KHRONOS_APICALL void KHRONOS_APIENTRY funcname( + * int arg1, + * int arg2) KHRONOS_APIATTRIBUTES; + */ + +#if defined(__SCITECH_SNAP__) && !defined(KHRONOS_STATIC) +# define KHRONOS_STATIC 1 +#endif + +/*------------------------------------------------------------------------- + * Definition of KHRONOS_APICALL + *------------------------------------------------------------------------- + * This precedes the return type of the function in the function prototype. + */ +#if defined(KHRONOS_STATIC) + /* If the preprocessor constant KHRONOS_STATIC is defined, make the + * header compatible with static linking. */ +# define KHRONOS_APICALL +#elif defined(_WIN32) +# define KHRONOS_APICALL __declspec(dllimport) +#elif defined (__SYMBIAN32__) +# define KHRONOS_APICALL IMPORT_C +#elif defined(__ANDROID__) +# define KHRONOS_APICALL __attribute__((visibility("default"))) +#else +# define KHRONOS_APICALL +#endif + +/*------------------------------------------------------------------------- + * Definition of KHRONOS_APIENTRY + *------------------------------------------------------------------------- + * This follows the return type of the function and precedes the function + * name in the function prototype. + */ +#if defined(_WIN32) && !defined(_WIN32_WCE) && !defined(__SCITECH_SNAP__) + /* Win32 but not WinCE */ +# define KHRONOS_APIENTRY __stdcall +#else +# define KHRONOS_APIENTRY +#endif + +/*------------------------------------------------------------------------- + * Definition of KHRONOS_APIATTRIBUTES + *------------------------------------------------------------------------- + * This follows the closing parenthesis of the function prototype arguments. + */ +#if defined (__ARMCC_2__) +#define KHRONOS_APIATTRIBUTES __softfp +#else +#define KHRONOS_APIATTRIBUTES +#endif + +/*------------------------------------------------------------------------- + * basic type definitions + *-----------------------------------------------------------------------*/ +#if (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) || defined(__GNUC__) || defined(__SCO__) || defined(__USLC__) + + +/* + * Using + */ +#include +typedef int32_t khronos_int32_t; +typedef uint32_t khronos_uint32_t; +typedef int64_t khronos_int64_t; +typedef uint64_t khronos_uint64_t; +#define KHRONOS_SUPPORT_INT64 1 +#define KHRONOS_SUPPORT_FLOAT 1 +/* + * To support platform where unsigned long cannot be used interchangeably with + * inptr_t (e.g. CHERI-extended ISAs), we can use the stdint.h intptr_t. + * Ideally, we could just use (u)intptr_t everywhere, but this could result in + * ABI breakage if khronos_uintptr_t is changed from unsigned long to + * unsigned long long or similar (this results in different C++ name mangling). + * To avoid changes for existing platforms, we restrict usage of intptr_t to + * platforms where the size of a pointer is larger than the size of long. + */ +#if defined(__SIZEOF_LONG__) && defined(__SIZEOF_POINTER__) +#if __SIZEOF_POINTER__ > __SIZEOF_LONG__ +#define KHRONOS_USE_INTPTR_T +#endif +#endif + +#elif defined(__VMS ) || defined(__sgi) + +/* + * Using + */ +#include +typedef int32_t khronos_int32_t; +typedef uint32_t khronos_uint32_t; +typedef int64_t khronos_int64_t; +typedef uint64_t khronos_uint64_t; +#define KHRONOS_SUPPORT_INT64 1 +#define KHRONOS_SUPPORT_FLOAT 1 + +#elif defined(_WIN32) && !defined(__SCITECH_SNAP__) + +/* + * Win32 + */ +typedef __int32 khronos_int32_t; +typedef unsigned __int32 khronos_uint32_t; +typedef __int64 khronos_int64_t; +typedef unsigned __int64 khronos_uint64_t; +#define KHRONOS_SUPPORT_INT64 1 +#define KHRONOS_SUPPORT_FLOAT 1 + +#elif defined(__sun__) || defined(__digital__) + +/* + * Sun or Digital + */ +typedef int khronos_int32_t; +typedef unsigned int khronos_uint32_t; +#if defined(__arch64__) || defined(_LP64) +typedef long int khronos_int64_t; +typedef unsigned long int khronos_uint64_t; +#else +typedef long long int khronos_int64_t; +typedef unsigned long long int khronos_uint64_t; +#endif /* __arch64__ */ +#define KHRONOS_SUPPORT_INT64 1 +#define KHRONOS_SUPPORT_FLOAT 1 + +#elif 0 + +/* + * Hypothetical platform with no float or int64 support + */ +typedef int khronos_int32_t; +typedef unsigned int khronos_uint32_t; +#define KHRONOS_SUPPORT_INT64 0 +#define KHRONOS_SUPPORT_FLOAT 0 + +#else + +/* + * Generic fallback + */ +#include +typedef int32_t khronos_int32_t; +typedef uint32_t khronos_uint32_t; +typedef int64_t khronos_int64_t; +typedef uint64_t khronos_uint64_t; +#define KHRONOS_SUPPORT_INT64 1 +#define KHRONOS_SUPPORT_FLOAT 1 + +#endif + + +/* + * Types that are (so far) the same on all platforms + */ +typedef signed char khronos_int8_t; +typedef unsigned char khronos_uint8_t; +typedef signed short int khronos_int16_t; +typedef unsigned short int khronos_uint16_t; + +/* + * Types that differ between LLP64 and LP64 architectures - in LLP64, + * pointers are 64 bits, but 'long' is still 32 bits. Win64 appears + * to be the only LLP64 architecture in current use. + */ +#ifdef KHRONOS_USE_INTPTR_T +typedef intptr_t khronos_intptr_t; +typedef uintptr_t khronos_uintptr_t; +#elif defined(_WIN64) +typedef signed long long int khronos_intptr_t; +typedef unsigned long long int khronos_uintptr_t; +#else +typedef signed long int khronos_intptr_t; +typedef unsigned long int khronos_uintptr_t; +#endif + +#if defined(_WIN64) +typedef signed long long int khronos_ssize_t; +typedef unsigned long long int khronos_usize_t; +#else +typedef signed long int khronos_ssize_t; +typedef unsigned long int khronos_usize_t; +#endif + +#if KHRONOS_SUPPORT_FLOAT +/* + * Float type + */ +typedef float khronos_float_t; +#endif + +#if KHRONOS_SUPPORT_INT64 +/* Time types + * + * These types can be used to represent a time interval in nanoseconds or + * an absolute Unadjusted System Time. Unadjusted System Time is the number + * of nanoseconds since some arbitrary system event (e.g. since the last + * time the system booted). The Unadjusted System Time is an unsigned + * 64 bit value that wraps back to 0 every 584 years. Time intervals + * may be either signed or unsigned. + */ +typedef khronos_uint64_t khronos_utime_nanoseconds_t; +typedef khronos_int64_t khronos_stime_nanoseconds_t; +#endif + +/* + * Dummy value used to pad enum types to 32 bits. + */ +#ifndef KHRONOS_MAX_ENUM +#define KHRONOS_MAX_ENUM 0x7FFFFFFF +#endif + +/* + * Enumerated boolean type + * + * Values other than zero should be considered to be true. Therefore + * comparisons should not be made against KHRONOS_TRUE. + */ +typedef enum { + KHRONOS_FALSE = 0, + KHRONOS_TRUE = 1, + KHRONOS_BOOLEAN_ENUM_FORCE_SIZE = KHRONOS_MAX_ENUM +} khronos_boolean_enum_t; + +#endif /* __khrplatform_h_ */ + +/* Generated C header for: + * API: gl + * Profile: compatibility + * Versions considered: .* + * Versions emitted: 1\.[2-9]|[234]\.[0-9] + * Default extensions included: gl + * Additional extensions included: _nomatch_^ + * Extensions removed: _nomatch_^ + */ + +#ifndef GL_VERSION_1_2 +#define GL_VERSION_1_2 1 +#define GL_UNSIGNED_BYTE_3_3_2 0x8032 +#define GL_UNSIGNED_SHORT_4_4_4_4 0x8033 +#define GL_UNSIGNED_SHORT_5_5_5_1 0x8034 +#define GL_UNSIGNED_INT_8_8_8_8 0x8035 +#define GL_UNSIGNED_INT_10_10_10_2 0x8036 +#define GL_TEXTURE_BINDING_3D 0x806A +#define GL_PACK_SKIP_IMAGES 0x806B +#define GL_PACK_IMAGE_HEIGHT 0x806C +#define GL_UNPACK_SKIP_IMAGES 0x806D +#define GL_UNPACK_IMAGE_HEIGHT 0x806E +#define GL_TEXTURE_3D 0x806F +#define GL_PROXY_TEXTURE_3D 0x8070 +#define GL_TEXTURE_DEPTH 0x8071 +#define GL_TEXTURE_WRAP_R 0x8072 +#define GL_MAX_3D_TEXTURE_SIZE 0x8073 +#define GL_UNSIGNED_BYTE_2_3_3_REV 0x8362 +#define GL_UNSIGNED_SHORT_5_6_5 0x8363 +#define GL_UNSIGNED_SHORT_5_6_5_REV 0x8364 +#define GL_UNSIGNED_SHORT_4_4_4_4_REV 0x8365 +#define GL_UNSIGNED_SHORT_1_5_5_5_REV 0x8366 +#define GL_UNSIGNED_INT_8_8_8_8_REV 0x8367 +#define GL_UNSIGNED_INT_2_10_10_10_REV 0x8368 +#define GL_BGR 0x80E0 +#define GL_BGRA 0x80E1 +#define GL_MAX_ELEMENTS_VERTICES 0x80E8 +#define GL_MAX_ELEMENTS_INDICES 0x80E9 +#define GL_CLAMP_TO_EDGE 0x812F +#define GL_TEXTURE_MIN_LOD 0x813A +#define GL_TEXTURE_MAX_LOD 0x813B +#define GL_TEXTURE_BASE_LEVEL 0x813C +#define GL_TEXTURE_MAX_LEVEL 0x813D +#define GL_SMOOTH_POINT_SIZE_RANGE 0x0B12 +#define GL_SMOOTH_POINT_SIZE_GRANULARITY 0x0B13 +#define GL_SMOOTH_LINE_WIDTH_RANGE 0x0B22 +#define GL_SMOOTH_LINE_WIDTH_GRANULARITY 0x0B23 +#define GL_ALIASED_LINE_WIDTH_RANGE 0x846E +#define GL_RESCALE_NORMAL 0x803A +#define GL_LIGHT_MODEL_COLOR_CONTROL 0x81F8 +#define GL_SINGLE_COLOR 0x81F9 +#define GL_SEPARATE_SPECULAR_COLOR 0x81FA +#define GL_ALIASED_POINT_SIZE_RANGE 0x846D +typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTSPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices); +typedef void (APIENTRYP PFNGLTEXIMAGE3DPROC) (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels); +typedef void (APIENTRYP PFNGLTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels); +typedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glDrawRangeElements (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices); +GLAPI void APIENTRY glTexImage3D (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels); +GLAPI void APIENTRY glTexSubImage3D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels); +GLAPI void APIENTRY glCopyTexSubImage3D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); +#endif +#endif /* GL_VERSION_1_2 */ + +#ifndef GL_VERSION_1_3 +#define GL_VERSION_1_3 1 +#define GL_TEXTURE0 0x84C0 +#define GL_TEXTURE1 0x84C1 +#define GL_TEXTURE2 0x84C2 +#define GL_TEXTURE3 0x84C3 +#define GL_TEXTURE4 0x84C4 +#define GL_TEXTURE5 0x84C5 +#define GL_TEXTURE6 0x84C6 +#define GL_TEXTURE7 0x84C7 +#define GL_TEXTURE8 0x84C8 +#define GL_TEXTURE9 0x84C9 +#define GL_TEXTURE10 0x84CA +#define GL_TEXTURE11 0x84CB +#define GL_TEXTURE12 0x84CC +#define GL_TEXTURE13 0x84CD +#define GL_TEXTURE14 0x84CE +#define GL_TEXTURE15 0x84CF +#define GL_TEXTURE16 0x84D0 +#define GL_TEXTURE17 0x84D1 +#define GL_TEXTURE18 0x84D2 +#define GL_TEXTURE19 0x84D3 +#define GL_TEXTURE20 0x84D4 +#define GL_TEXTURE21 0x84D5 +#define GL_TEXTURE22 0x84D6 +#define GL_TEXTURE23 0x84D7 +#define GL_TEXTURE24 0x84D8 +#define GL_TEXTURE25 0x84D9 +#define GL_TEXTURE26 0x84DA +#define GL_TEXTURE27 0x84DB +#define GL_TEXTURE28 0x84DC +#define GL_TEXTURE29 0x84DD +#define GL_TEXTURE30 0x84DE +#define GL_TEXTURE31 0x84DF +#define GL_ACTIVE_TEXTURE 0x84E0 +#define GL_MULTISAMPLE 0x809D +#define GL_SAMPLE_ALPHA_TO_COVERAGE 0x809E +#define GL_SAMPLE_ALPHA_TO_ONE 0x809F +#define GL_SAMPLE_COVERAGE 0x80A0 +#define GL_SAMPLE_BUFFERS 0x80A8 +#define GL_SAMPLES 0x80A9 +#define GL_SAMPLE_COVERAGE_VALUE 0x80AA +#define GL_SAMPLE_COVERAGE_INVERT 0x80AB +#define GL_TEXTURE_CUBE_MAP 0x8513 +#define GL_TEXTURE_BINDING_CUBE_MAP 0x8514 +#define GL_TEXTURE_CUBE_MAP_POSITIVE_X 0x8515 +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X 0x8516 +#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y 0x8517 +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y 0x8518 +#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z 0x8519 +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z 0x851A +#define GL_PROXY_TEXTURE_CUBE_MAP 0x851B +#define GL_MAX_CUBE_MAP_TEXTURE_SIZE 0x851C +#define GL_COMPRESSED_RGB 0x84ED +#define GL_COMPRESSED_RGBA 0x84EE +#define GL_TEXTURE_COMPRESSION_HINT 0x84EF +#define GL_TEXTURE_COMPRESSED_IMAGE_SIZE 0x86A0 +#define GL_TEXTURE_COMPRESSED 0x86A1 +#define GL_NUM_COMPRESSED_TEXTURE_FORMATS 0x86A2 +#define GL_COMPRESSED_TEXTURE_FORMATS 0x86A3 +#define GL_CLAMP_TO_BORDER 0x812D +#define GL_CLIENT_ACTIVE_TEXTURE 0x84E1 +#define GL_MAX_TEXTURE_UNITS 0x84E2 +#define GL_TRANSPOSE_MODELVIEW_MATRIX 0x84E3 +#define GL_TRANSPOSE_PROJECTION_MATRIX 0x84E4 +#define GL_TRANSPOSE_TEXTURE_MATRIX 0x84E5 +#define GL_TRANSPOSE_COLOR_MATRIX 0x84E6 +#define GL_MULTISAMPLE_BIT 0x20000000 +#define GL_NORMAL_MAP 0x8511 +#define GL_REFLECTION_MAP 0x8512 +#define GL_COMPRESSED_ALPHA 0x84E9 +#define GL_COMPRESSED_LUMINANCE 0x84EA +#define GL_COMPRESSED_LUMINANCE_ALPHA 0x84EB +#define GL_COMPRESSED_INTENSITY 0x84EC +#define GL_COMBINE 0x8570 +#define GL_COMBINE_RGB 0x8571 +#define GL_COMBINE_ALPHA 0x8572 +#define GL_SOURCE0_RGB 0x8580 +#define GL_SOURCE1_RGB 0x8581 +#define GL_SOURCE2_RGB 0x8582 +#define GL_SOURCE0_ALPHA 0x8588 +#define GL_SOURCE1_ALPHA 0x8589 +#define GL_SOURCE2_ALPHA 0x858A +#define GL_OPERAND0_RGB 0x8590 +#define GL_OPERAND1_RGB 0x8591 +#define GL_OPERAND2_RGB 0x8592 +#define GL_OPERAND0_ALPHA 0x8598 +#define GL_OPERAND1_ALPHA 0x8599 +#define GL_OPERAND2_ALPHA 0x859A +#define GL_RGB_SCALE 0x8573 +#define GL_ADD_SIGNED 0x8574 +#define GL_INTERPOLATE 0x8575 +#define GL_SUBTRACT 0x84E7 +#define GL_CONSTANT 0x8576 +#define GL_PRIMARY_COLOR 0x8577 +#define GL_PREVIOUS 0x8578 +#define GL_DOT3_RGB 0x86AE +#define GL_DOT3_RGBA 0x86AF +typedef void (APIENTRYP PFNGLACTIVETEXTUREPROC) (GLenum texture); +typedef void (APIENTRYP PFNGLSAMPLECOVERAGEPROC) (GLfloat value, GLboolean invert); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE3DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *data); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE2DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *data); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE1DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void *data); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *data); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *data); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC) (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *data); +typedef void (APIENTRYP PFNGLGETCOMPRESSEDTEXIMAGEPROC) (GLenum target, GLint level, void *img); +typedef void (APIENTRYP PFNGLCLIENTACTIVETEXTUREPROC) (GLenum texture); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1DPROC) (GLenum target, GLdouble s); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1DVPROC) (GLenum target, const GLdouble *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1FPROC) (GLenum target, GLfloat s); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1FVPROC) (GLenum target, const GLfloat *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1IPROC) (GLenum target, GLint s); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1IVPROC) (GLenum target, const GLint *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1SPROC) (GLenum target, GLshort s); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1SVPROC) (GLenum target, const GLshort *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2DPROC) (GLenum target, GLdouble s, GLdouble t); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2DVPROC) (GLenum target, const GLdouble *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2FPROC) (GLenum target, GLfloat s, GLfloat t); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2FVPROC) (GLenum target, const GLfloat *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2IPROC) (GLenum target, GLint s, GLint t); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2IVPROC) (GLenum target, const GLint *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2SPROC) (GLenum target, GLshort s, GLshort t); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2SVPROC) (GLenum target, const GLshort *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3DPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3DVPROC) (GLenum target, const GLdouble *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3FPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3FVPROC) (GLenum target, const GLfloat *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3IPROC) (GLenum target, GLint s, GLint t, GLint r); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3IVPROC) (GLenum target, const GLint *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3SPROC) (GLenum target, GLshort s, GLshort t, GLshort r); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3SVPROC) (GLenum target, const GLshort *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4DPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4DVPROC) (GLenum target, const GLdouble *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4FPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4FVPROC) (GLenum target, const GLfloat *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4IPROC) (GLenum target, GLint s, GLint t, GLint r, GLint q); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4IVPROC) (GLenum target, const GLint *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4SPROC) (GLenum target, GLshort s, GLshort t, GLshort r, GLshort q); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4SVPROC) (GLenum target, const GLshort *v); +typedef void (APIENTRYP PFNGLLOADTRANSPOSEMATRIXFPROC) (const GLfloat *m); +typedef void (APIENTRYP PFNGLLOADTRANSPOSEMATRIXDPROC) (const GLdouble *m); +typedef void (APIENTRYP PFNGLMULTTRANSPOSEMATRIXFPROC) (const GLfloat *m); +typedef void (APIENTRYP PFNGLMULTTRANSPOSEMATRIXDPROC) (const GLdouble *m); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glActiveTexture (GLenum texture); +GLAPI void APIENTRY glSampleCoverage (GLfloat value, GLboolean invert); +GLAPI void APIENTRY glCompressedTexImage3D (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *data); +GLAPI void APIENTRY glCompressedTexImage2D (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *data); +GLAPI void APIENTRY glCompressedTexImage1D (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void *data); +GLAPI void APIENTRY glCompressedTexSubImage3D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *data); +GLAPI void APIENTRY glCompressedTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *data); +GLAPI void APIENTRY glCompressedTexSubImage1D (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *data); +GLAPI void APIENTRY glGetCompressedTexImage (GLenum target, GLint level, void *img); +GLAPI void APIENTRY glClientActiveTexture (GLenum texture); +GLAPI void APIENTRY glMultiTexCoord1d (GLenum target, GLdouble s); +GLAPI void APIENTRY glMultiTexCoord1dv (GLenum target, const GLdouble *v); +GLAPI void APIENTRY glMultiTexCoord1f (GLenum target, GLfloat s); +GLAPI void APIENTRY glMultiTexCoord1fv (GLenum target, const GLfloat *v); +GLAPI void APIENTRY glMultiTexCoord1i (GLenum target, GLint s); +GLAPI void APIENTRY glMultiTexCoord1iv (GLenum target, const GLint *v); +GLAPI void APIENTRY glMultiTexCoord1s (GLenum target, GLshort s); +GLAPI void APIENTRY glMultiTexCoord1sv (GLenum target, const GLshort *v); +GLAPI void APIENTRY glMultiTexCoord2d (GLenum target, GLdouble s, GLdouble t); +GLAPI void APIENTRY glMultiTexCoord2dv (GLenum target, const GLdouble *v); +GLAPI void APIENTRY glMultiTexCoord2f (GLenum target, GLfloat s, GLfloat t); +GLAPI void APIENTRY glMultiTexCoord2fv (GLenum target, const GLfloat *v); +GLAPI void APIENTRY glMultiTexCoord2i (GLenum target, GLint s, GLint t); +GLAPI void APIENTRY glMultiTexCoord2iv (GLenum target, const GLint *v); +GLAPI void APIENTRY glMultiTexCoord2s (GLenum target, GLshort s, GLshort t); +GLAPI void APIENTRY glMultiTexCoord2sv (GLenum target, const GLshort *v); +GLAPI void APIENTRY glMultiTexCoord3d (GLenum target, GLdouble s, GLdouble t, GLdouble r); +GLAPI void APIENTRY glMultiTexCoord3dv (GLenum target, const GLdouble *v); +GLAPI void APIENTRY glMultiTexCoord3f (GLenum target, GLfloat s, GLfloat t, GLfloat r); +GLAPI void APIENTRY glMultiTexCoord3fv (GLenum target, const GLfloat *v); +GLAPI void APIENTRY glMultiTexCoord3i (GLenum target, GLint s, GLint t, GLint r); +GLAPI void APIENTRY glMultiTexCoord3iv (GLenum target, const GLint *v); +GLAPI void APIENTRY glMultiTexCoord3s (GLenum target, GLshort s, GLshort t, GLshort r); +GLAPI void APIENTRY glMultiTexCoord3sv (GLenum target, const GLshort *v); +GLAPI void APIENTRY glMultiTexCoord4d (GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q); +GLAPI void APIENTRY glMultiTexCoord4dv (GLenum target, const GLdouble *v); +GLAPI void APIENTRY glMultiTexCoord4f (GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q); +GLAPI void APIENTRY glMultiTexCoord4fv (GLenum target, const GLfloat *v); +GLAPI void APIENTRY glMultiTexCoord4i (GLenum target, GLint s, GLint t, GLint r, GLint q); +GLAPI void APIENTRY glMultiTexCoord4iv (GLenum target, const GLint *v); +GLAPI void APIENTRY glMultiTexCoord4s (GLenum target, GLshort s, GLshort t, GLshort r, GLshort q); +GLAPI void APIENTRY glMultiTexCoord4sv (GLenum target, const GLshort *v); +GLAPI void APIENTRY glLoadTransposeMatrixf (const GLfloat *m); +GLAPI void APIENTRY glLoadTransposeMatrixd (const GLdouble *m); +GLAPI void APIENTRY glMultTransposeMatrixf (const GLfloat *m); +GLAPI void APIENTRY glMultTransposeMatrixd (const GLdouble *m); +#endif +#endif /* GL_VERSION_1_3 */ + +#ifndef GL_VERSION_1_4 +#define GL_VERSION_1_4 1 +#define GL_BLEND_DST_RGB 0x80C8 +#define GL_BLEND_SRC_RGB 0x80C9 +#define GL_BLEND_DST_ALPHA 0x80CA +#define GL_BLEND_SRC_ALPHA 0x80CB +#define GL_POINT_FADE_THRESHOLD_SIZE 0x8128 +#define GL_DEPTH_COMPONENT16 0x81A5 +#define GL_DEPTH_COMPONENT24 0x81A6 +#define GL_DEPTH_COMPONENT32 0x81A7 +#define GL_MIRRORED_REPEAT 0x8370 +#define GL_MAX_TEXTURE_LOD_BIAS 0x84FD +#define GL_TEXTURE_LOD_BIAS 0x8501 +#define GL_INCR_WRAP 0x8507 +#define GL_DECR_WRAP 0x8508 +#define GL_TEXTURE_DEPTH_SIZE 0x884A +#define GL_TEXTURE_COMPARE_MODE 0x884C +#define GL_TEXTURE_COMPARE_FUNC 0x884D +#define GL_POINT_SIZE_MIN 0x8126 +#define GL_POINT_SIZE_MAX 0x8127 +#define GL_POINT_DISTANCE_ATTENUATION 0x8129 +#define GL_GENERATE_MIPMAP 0x8191 +#define GL_GENERATE_MIPMAP_HINT 0x8192 +#define GL_FOG_COORDINATE_SOURCE 0x8450 +#define GL_FOG_COORDINATE 0x8451 +#define GL_FRAGMENT_DEPTH 0x8452 +#define GL_CURRENT_FOG_COORDINATE 0x8453 +#define GL_FOG_COORDINATE_ARRAY_TYPE 0x8454 +#define GL_FOG_COORDINATE_ARRAY_STRIDE 0x8455 +#define GL_FOG_COORDINATE_ARRAY_POINTER 0x8456 +#define GL_FOG_COORDINATE_ARRAY 0x8457 +#define GL_COLOR_SUM 0x8458 +#define GL_CURRENT_SECONDARY_COLOR 0x8459 +#define GL_SECONDARY_COLOR_ARRAY_SIZE 0x845A +#define GL_SECONDARY_COLOR_ARRAY_TYPE 0x845B +#define GL_SECONDARY_COLOR_ARRAY_STRIDE 0x845C +#define GL_SECONDARY_COLOR_ARRAY_POINTER 0x845D +#define GL_SECONDARY_COLOR_ARRAY 0x845E +#define GL_TEXTURE_FILTER_CONTROL 0x8500 +#define GL_DEPTH_TEXTURE_MODE 0x884B +#define GL_COMPARE_R_TO_TEXTURE 0x884E +#define GL_BLEND_COLOR 0x8005 +#define GL_BLEND_EQUATION 0x8009 +#define GL_CONSTANT_COLOR 0x8001 +#define GL_ONE_MINUS_CONSTANT_COLOR 0x8002 +#define GL_CONSTANT_ALPHA 0x8003 +#define GL_ONE_MINUS_CONSTANT_ALPHA 0x8004 +#define GL_FUNC_ADD 0x8006 +#define GL_FUNC_REVERSE_SUBTRACT 0x800B +#define GL_FUNC_SUBTRACT 0x800A +#define GL_MIN 0x8007 +#define GL_MAX 0x8008 +typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEPROC) (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); +typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSPROC) (GLenum mode, const GLint *first, const GLsizei *count, GLsizei drawcount); +typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSPROC) (GLenum mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei drawcount); +typedef void (APIENTRYP PFNGLPOINTPARAMETERFPROC) (GLenum pname, GLfloat param); +typedef void (APIENTRYP PFNGLPOINTPARAMETERFVPROC) (GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLPOINTPARAMETERIPROC) (GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLPOINTPARAMETERIVPROC) (GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLFOGCOORDFPROC) (GLfloat coord); +typedef void (APIENTRYP PFNGLFOGCOORDFVPROC) (const GLfloat *coord); +typedef void (APIENTRYP PFNGLFOGCOORDDPROC) (GLdouble coord); +typedef void (APIENTRYP PFNGLFOGCOORDDVPROC) (const GLdouble *coord); +typedef void (APIENTRYP PFNGLFOGCOORDPOINTERPROC) (GLenum type, GLsizei stride, const void *pointer); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3BPROC) (GLbyte red, GLbyte green, GLbyte blue); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3BVPROC) (const GLbyte *v); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3DPROC) (GLdouble red, GLdouble green, GLdouble blue); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3DVPROC) (const GLdouble *v); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3FPROC) (GLfloat red, GLfloat green, GLfloat blue); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3FVPROC) (const GLfloat *v); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3IPROC) (GLint red, GLint green, GLint blue); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3IVPROC) (const GLint *v); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3SPROC) (GLshort red, GLshort green, GLshort blue); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3SVPROC) (const GLshort *v); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UBPROC) (GLubyte red, GLubyte green, GLubyte blue); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UBVPROC) (const GLubyte *v); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UIPROC) (GLuint red, GLuint green, GLuint blue); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UIVPROC) (const GLuint *v); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3USPROC) (GLushort red, GLushort green, GLushort blue); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3USVPROC) (const GLushort *v); +typedef void (APIENTRYP PFNGLSECONDARYCOLORPOINTERPROC) (GLint size, GLenum type, GLsizei stride, const void *pointer); +typedef void (APIENTRYP PFNGLWINDOWPOS2DPROC) (GLdouble x, GLdouble y); +typedef void (APIENTRYP PFNGLWINDOWPOS2DVPROC) (const GLdouble *v); +typedef void (APIENTRYP PFNGLWINDOWPOS2FPROC) (GLfloat x, GLfloat y); +typedef void (APIENTRYP PFNGLWINDOWPOS2FVPROC) (const GLfloat *v); +typedef void (APIENTRYP PFNGLWINDOWPOS2IPROC) (GLint x, GLint y); +typedef void (APIENTRYP PFNGLWINDOWPOS2IVPROC) (const GLint *v); +typedef void (APIENTRYP PFNGLWINDOWPOS2SPROC) (GLshort x, GLshort y); +typedef void (APIENTRYP PFNGLWINDOWPOS2SVPROC) (const GLshort *v); +typedef void (APIENTRYP PFNGLWINDOWPOS3DPROC) (GLdouble x, GLdouble y, GLdouble z); +typedef void (APIENTRYP PFNGLWINDOWPOS3DVPROC) (const GLdouble *v); +typedef void (APIENTRYP PFNGLWINDOWPOS3FPROC) (GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLWINDOWPOS3FVPROC) (const GLfloat *v); +typedef void (APIENTRYP PFNGLWINDOWPOS3IPROC) (GLint x, GLint y, GLint z); +typedef void (APIENTRYP PFNGLWINDOWPOS3IVPROC) (const GLint *v); +typedef void (APIENTRYP PFNGLWINDOWPOS3SPROC) (GLshort x, GLshort y, GLshort z); +typedef void (APIENTRYP PFNGLWINDOWPOS3SVPROC) (const GLshort *v); +typedef void (APIENTRYP PFNGLBLENDCOLORPROC) (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); +typedef void (APIENTRYP PFNGLBLENDEQUATIONPROC) (GLenum mode); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBlendFuncSeparate (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); +GLAPI void APIENTRY glMultiDrawArrays (GLenum mode, const GLint *first, const GLsizei *count, GLsizei drawcount); +GLAPI void APIENTRY glMultiDrawElements (GLenum mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei drawcount); +GLAPI void APIENTRY glPointParameterf (GLenum pname, GLfloat param); +GLAPI void APIENTRY glPointParameterfv (GLenum pname, const GLfloat *params); +GLAPI void APIENTRY glPointParameteri (GLenum pname, GLint param); +GLAPI void APIENTRY glPointParameteriv (GLenum pname, const GLint *params); +GLAPI void APIENTRY glFogCoordf (GLfloat coord); +GLAPI void APIENTRY glFogCoordfv (const GLfloat *coord); +GLAPI void APIENTRY glFogCoordd (GLdouble coord); +GLAPI void APIENTRY glFogCoorddv (const GLdouble *coord); +GLAPI void APIENTRY glFogCoordPointer (GLenum type, GLsizei stride, const void *pointer); +GLAPI void APIENTRY glSecondaryColor3b (GLbyte red, GLbyte green, GLbyte blue); +GLAPI void APIENTRY glSecondaryColor3bv (const GLbyte *v); +GLAPI void APIENTRY glSecondaryColor3d (GLdouble red, GLdouble green, GLdouble blue); +GLAPI void APIENTRY glSecondaryColor3dv (const GLdouble *v); +GLAPI void APIENTRY glSecondaryColor3f (GLfloat red, GLfloat green, GLfloat blue); +GLAPI void APIENTRY glSecondaryColor3fv (const GLfloat *v); +GLAPI void APIENTRY glSecondaryColor3i (GLint red, GLint green, GLint blue); +GLAPI void APIENTRY glSecondaryColor3iv (const GLint *v); +GLAPI void APIENTRY glSecondaryColor3s (GLshort red, GLshort green, GLshort blue); +GLAPI void APIENTRY glSecondaryColor3sv (const GLshort *v); +GLAPI void APIENTRY glSecondaryColor3ub (GLubyte red, GLubyte green, GLubyte blue); +GLAPI void APIENTRY glSecondaryColor3ubv (const GLubyte *v); +GLAPI void APIENTRY glSecondaryColor3ui (GLuint red, GLuint green, GLuint blue); +GLAPI void APIENTRY glSecondaryColor3uiv (const GLuint *v); +GLAPI void APIENTRY glSecondaryColor3us (GLushort red, GLushort green, GLushort blue); +GLAPI void APIENTRY glSecondaryColor3usv (const GLushort *v); +GLAPI void APIENTRY glSecondaryColorPointer (GLint size, GLenum type, GLsizei stride, const void *pointer); +GLAPI void APIENTRY glWindowPos2d (GLdouble x, GLdouble y); +GLAPI void APIENTRY glWindowPos2dv (const GLdouble *v); +GLAPI void APIENTRY glWindowPos2f (GLfloat x, GLfloat y); +GLAPI void APIENTRY glWindowPos2fv (const GLfloat *v); +GLAPI void APIENTRY glWindowPos2i (GLint x, GLint y); +GLAPI void APIENTRY glWindowPos2iv (const GLint *v); +GLAPI void APIENTRY glWindowPos2s (GLshort x, GLshort y); +GLAPI void APIENTRY glWindowPos2sv (const GLshort *v); +GLAPI void APIENTRY glWindowPos3d (GLdouble x, GLdouble y, GLdouble z); +GLAPI void APIENTRY glWindowPos3dv (const GLdouble *v); +GLAPI void APIENTRY glWindowPos3f (GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glWindowPos3fv (const GLfloat *v); +GLAPI void APIENTRY glWindowPos3i (GLint x, GLint y, GLint z); +GLAPI void APIENTRY glWindowPos3iv (const GLint *v); +GLAPI void APIENTRY glWindowPos3s (GLshort x, GLshort y, GLshort z); +GLAPI void APIENTRY glWindowPos3sv (const GLshort *v); +GLAPI void APIENTRY glBlendColor (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); +GLAPI void APIENTRY glBlendEquation (GLenum mode); +#endif +#endif /* GL_VERSION_1_4 */ + +#ifndef GL_VERSION_1_5 +#define GL_VERSION_1_5 1 +typedef khronos_ssize_t GLsizeiptr; +typedef khronos_intptr_t GLintptr; +#define GL_BUFFER_SIZE 0x8764 +#define GL_BUFFER_USAGE 0x8765 +#define GL_QUERY_COUNTER_BITS 0x8864 +#define GL_CURRENT_QUERY 0x8865 +#define GL_QUERY_RESULT 0x8866 +#define GL_QUERY_RESULT_AVAILABLE 0x8867 +#define GL_ARRAY_BUFFER 0x8892 +#define GL_ELEMENT_ARRAY_BUFFER 0x8893 +#define GL_ARRAY_BUFFER_BINDING 0x8894 +#define GL_ELEMENT_ARRAY_BUFFER_BINDING 0x8895 +#define GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING 0x889F +#define GL_READ_ONLY 0x88B8 +#define GL_WRITE_ONLY 0x88B9 +#define GL_READ_WRITE 0x88BA +#define GL_BUFFER_ACCESS 0x88BB +#define GL_BUFFER_MAPPED 0x88BC +#define GL_BUFFER_MAP_POINTER 0x88BD +#define GL_STREAM_DRAW 0x88E0 +#define GL_STREAM_READ 0x88E1 +#define GL_STREAM_COPY 0x88E2 +#define GL_STATIC_DRAW 0x88E4 +#define GL_STATIC_READ 0x88E5 +#define GL_STATIC_COPY 0x88E6 +#define GL_DYNAMIC_DRAW 0x88E8 +#define GL_DYNAMIC_READ 0x88E9 +#define GL_DYNAMIC_COPY 0x88EA +#define GL_SAMPLES_PASSED 0x8914 +#define GL_SRC1_ALPHA 0x8589 +#define GL_VERTEX_ARRAY_BUFFER_BINDING 0x8896 +#define GL_NORMAL_ARRAY_BUFFER_BINDING 0x8897 +#define GL_COLOR_ARRAY_BUFFER_BINDING 0x8898 +#define GL_INDEX_ARRAY_BUFFER_BINDING 0x8899 +#define GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING 0x889A +#define GL_EDGE_FLAG_ARRAY_BUFFER_BINDING 0x889B +#define GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING 0x889C +#define GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING 0x889D +#define GL_WEIGHT_ARRAY_BUFFER_BINDING 0x889E +#define GL_FOG_COORD_SRC 0x8450 +#define GL_FOG_COORD 0x8451 +#define GL_CURRENT_FOG_COORD 0x8453 +#define GL_FOG_COORD_ARRAY_TYPE 0x8454 +#define GL_FOG_COORD_ARRAY_STRIDE 0x8455 +#define GL_FOG_COORD_ARRAY_POINTER 0x8456 +#define GL_FOG_COORD_ARRAY 0x8457 +#define GL_FOG_COORD_ARRAY_BUFFER_BINDING 0x889D +#define GL_SRC0_RGB 0x8580 +#define GL_SRC1_RGB 0x8581 +#define GL_SRC2_RGB 0x8582 +#define GL_SRC0_ALPHA 0x8588 +#define GL_SRC2_ALPHA 0x858A +typedef void (APIENTRYP PFNGLGENQUERIESPROC) (GLsizei n, GLuint *ids); +typedef void (APIENTRYP PFNGLDELETEQUERIESPROC) (GLsizei n, const GLuint *ids); +typedef GLboolean (APIENTRYP PFNGLISQUERYPROC) (GLuint id); +typedef void (APIENTRYP PFNGLBEGINQUERYPROC) (GLenum target, GLuint id); +typedef void (APIENTRYP PFNGLENDQUERYPROC) (GLenum target); +typedef void (APIENTRYP PFNGLGETQUERYIVPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETQUERYOBJECTIVPROC) (GLuint id, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETQUERYOBJECTUIVPROC) (GLuint id, GLenum pname, GLuint *params); +typedef void (APIENTRYP PFNGLBINDBUFFERPROC) (GLenum target, GLuint buffer); +typedef void (APIENTRYP PFNGLDELETEBUFFERSPROC) (GLsizei n, const GLuint *buffers); +typedef void (APIENTRYP PFNGLGENBUFFERSPROC) (GLsizei n, GLuint *buffers); +typedef GLboolean (APIENTRYP PFNGLISBUFFERPROC) (GLuint buffer); +typedef void (APIENTRYP PFNGLBUFFERDATAPROC) (GLenum target, GLsizeiptr size, const void *data, GLenum usage); +typedef void (APIENTRYP PFNGLBUFFERSUBDATAPROC) (GLenum target, GLintptr offset, GLsizeiptr size, const void *data); +typedef void (APIENTRYP PFNGLGETBUFFERSUBDATAPROC) (GLenum target, GLintptr offset, GLsizeiptr size, void *data); +typedef void *(APIENTRYP PFNGLMAPBUFFERPROC) (GLenum target, GLenum access); +typedef GLboolean (APIENTRYP PFNGLUNMAPBUFFERPROC) (GLenum target); +typedef void (APIENTRYP PFNGLGETBUFFERPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETBUFFERPOINTERVPROC) (GLenum target, GLenum pname, void **params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glGenQueries (GLsizei n, GLuint *ids); +GLAPI void APIENTRY glDeleteQueries (GLsizei n, const GLuint *ids); +GLAPI GLboolean APIENTRY glIsQuery (GLuint id); +GLAPI void APIENTRY glBeginQuery (GLenum target, GLuint id); +GLAPI void APIENTRY glEndQuery (GLenum target); +GLAPI void APIENTRY glGetQueryiv (GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetQueryObjectiv (GLuint id, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetQueryObjectuiv (GLuint id, GLenum pname, GLuint *params); +GLAPI void APIENTRY glBindBuffer (GLenum target, GLuint buffer); +GLAPI void APIENTRY glDeleteBuffers (GLsizei n, const GLuint *buffers); +GLAPI void APIENTRY glGenBuffers (GLsizei n, GLuint *buffers); +GLAPI GLboolean APIENTRY glIsBuffer (GLuint buffer); +GLAPI void APIENTRY glBufferData (GLenum target, GLsizeiptr size, const void *data, GLenum usage); +GLAPI void APIENTRY glBufferSubData (GLenum target, GLintptr offset, GLsizeiptr size, const void *data); +GLAPI void APIENTRY glGetBufferSubData (GLenum target, GLintptr offset, GLsizeiptr size, void *data); +GLAPI void *APIENTRY glMapBuffer (GLenum target, GLenum access); +GLAPI GLboolean APIENTRY glUnmapBuffer (GLenum target); +GLAPI void APIENTRY glGetBufferParameteriv (GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetBufferPointerv (GLenum target, GLenum pname, void **params); +#endif +#endif /* GL_VERSION_1_5 */ + +#ifndef GL_VERSION_2_0 +#define GL_VERSION_2_0 1 +typedef char GLchar; +#define GL_BLEND_EQUATION_RGB 0x8009 +#define GL_VERTEX_ATTRIB_ARRAY_ENABLED 0x8622 +#define GL_VERTEX_ATTRIB_ARRAY_SIZE 0x8623 +#define GL_VERTEX_ATTRIB_ARRAY_STRIDE 0x8624 +#define GL_VERTEX_ATTRIB_ARRAY_TYPE 0x8625 +#define GL_CURRENT_VERTEX_ATTRIB 0x8626 +#define GL_VERTEX_PROGRAM_POINT_SIZE 0x8642 +#define GL_VERTEX_ATTRIB_ARRAY_POINTER 0x8645 +#define GL_STENCIL_BACK_FUNC 0x8800 +#define GL_STENCIL_BACK_FAIL 0x8801 +#define GL_STENCIL_BACK_PASS_DEPTH_FAIL 0x8802 +#define GL_STENCIL_BACK_PASS_DEPTH_PASS 0x8803 +#define GL_MAX_DRAW_BUFFERS 0x8824 +#define GL_DRAW_BUFFER0 0x8825 +#define GL_DRAW_BUFFER1 0x8826 +#define GL_DRAW_BUFFER2 0x8827 +#define GL_DRAW_BUFFER3 0x8828 +#define GL_DRAW_BUFFER4 0x8829 +#define GL_DRAW_BUFFER5 0x882A +#define GL_DRAW_BUFFER6 0x882B +#define GL_DRAW_BUFFER7 0x882C +#define GL_DRAW_BUFFER8 0x882D +#define GL_DRAW_BUFFER9 0x882E +#define GL_DRAW_BUFFER10 0x882F +#define GL_DRAW_BUFFER11 0x8830 +#define GL_DRAW_BUFFER12 0x8831 +#define GL_DRAW_BUFFER13 0x8832 +#define GL_DRAW_BUFFER14 0x8833 +#define GL_DRAW_BUFFER15 0x8834 +#define GL_BLEND_EQUATION_ALPHA 0x883D +#define GL_MAX_VERTEX_ATTRIBS 0x8869 +#define GL_VERTEX_ATTRIB_ARRAY_NORMALIZED 0x886A +#define GL_MAX_TEXTURE_IMAGE_UNITS 0x8872 +#define GL_FRAGMENT_SHADER 0x8B30 +#define GL_VERTEX_SHADER 0x8B31 +#define GL_MAX_FRAGMENT_UNIFORM_COMPONENTS 0x8B49 +#define GL_MAX_VERTEX_UNIFORM_COMPONENTS 0x8B4A +#define GL_MAX_VARYING_FLOATS 0x8B4B +#define GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS 0x8B4C +#define GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS 0x8B4D +#define GL_SHADER_TYPE 0x8B4F +#define GL_FLOAT_VEC2 0x8B50 +#define GL_FLOAT_VEC3 0x8B51 +#define GL_FLOAT_VEC4 0x8B52 +#define GL_INT_VEC2 0x8B53 +#define GL_INT_VEC3 0x8B54 +#define GL_INT_VEC4 0x8B55 +#define GL_BOOL 0x8B56 +#define GL_BOOL_VEC2 0x8B57 +#define GL_BOOL_VEC3 0x8B58 +#define GL_BOOL_VEC4 0x8B59 +#define GL_FLOAT_MAT2 0x8B5A +#define GL_FLOAT_MAT3 0x8B5B +#define GL_FLOAT_MAT4 0x8B5C +#define GL_SAMPLER_1D 0x8B5D +#define GL_SAMPLER_2D 0x8B5E +#define GL_SAMPLER_3D 0x8B5F +#define GL_SAMPLER_CUBE 0x8B60 +#define GL_SAMPLER_1D_SHADOW 0x8B61 +#define GL_SAMPLER_2D_SHADOW 0x8B62 +#define GL_DELETE_STATUS 0x8B80 +#define GL_COMPILE_STATUS 0x8B81 +#define GL_LINK_STATUS 0x8B82 +#define GL_VALIDATE_STATUS 0x8B83 +#define GL_INFO_LOG_LENGTH 0x8B84 +#define GL_ATTACHED_SHADERS 0x8B85 +#define GL_ACTIVE_UNIFORMS 0x8B86 +#define GL_ACTIVE_UNIFORM_MAX_LENGTH 0x8B87 +#define GL_SHADER_SOURCE_LENGTH 0x8B88 +#define GL_ACTIVE_ATTRIBUTES 0x8B89 +#define GL_ACTIVE_ATTRIBUTE_MAX_LENGTH 0x8B8A +#define GL_FRAGMENT_SHADER_DERIVATIVE_HINT 0x8B8B +#define GL_SHADING_LANGUAGE_VERSION 0x8B8C +#define GL_CURRENT_PROGRAM 0x8B8D +#define GL_POINT_SPRITE_COORD_ORIGIN 0x8CA0 +#define GL_LOWER_LEFT 0x8CA1 +#define GL_UPPER_LEFT 0x8CA2 +#define GL_STENCIL_BACK_REF 0x8CA3 +#define GL_STENCIL_BACK_VALUE_MASK 0x8CA4 +#define GL_STENCIL_BACK_WRITEMASK 0x8CA5 +#define GL_VERTEX_PROGRAM_TWO_SIDE 0x8643 +#define GL_POINT_SPRITE 0x8861 +#define GL_COORD_REPLACE 0x8862 +#define GL_MAX_TEXTURE_COORDS 0x8871 +typedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEPROC) (GLenum modeRGB, GLenum modeAlpha); +typedef void (APIENTRYP PFNGLDRAWBUFFERSPROC) (GLsizei n, const GLenum *bufs); +typedef void (APIENTRYP PFNGLSTENCILOPSEPARATEPROC) (GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass); +typedef void (APIENTRYP PFNGLSTENCILFUNCSEPARATEPROC) (GLenum face, GLenum func, GLint ref, GLuint mask); +typedef void (APIENTRYP PFNGLSTENCILMASKSEPARATEPROC) (GLenum face, GLuint mask); +typedef void (APIENTRYP PFNGLATTACHSHADERPROC) (GLuint program, GLuint shader); +typedef void (APIENTRYP PFNGLBINDATTRIBLOCATIONPROC) (GLuint program, GLuint index, const GLchar *name); +typedef void (APIENTRYP PFNGLCOMPILESHADERPROC) (GLuint shader); +typedef GLuint (APIENTRYP PFNGLCREATEPROGRAMPROC) (void); +typedef GLuint (APIENTRYP PFNGLCREATESHADERPROC) (GLenum type); +typedef void (APIENTRYP PFNGLDELETEPROGRAMPROC) (GLuint program); +typedef void (APIENTRYP PFNGLDELETESHADERPROC) (GLuint shader); +typedef void (APIENTRYP PFNGLDETACHSHADERPROC) (GLuint program, GLuint shader); +typedef void (APIENTRYP PFNGLDISABLEVERTEXATTRIBARRAYPROC) (GLuint index); +typedef void (APIENTRYP PFNGLENABLEVERTEXATTRIBARRAYPROC) (GLuint index); +typedef void (APIENTRYP PFNGLGETACTIVEATTRIBPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name); +typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name); +typedef void (APIENTRYP PFNGLGETATTACHEDSHADERSPROC) (GLuint program, GLsizei maxCount, GLsizei *count, GLuint *shaders); +typedef GLint (APIENTRYP PFNGLGETATTRIBLOCATIONPROC) (GLuint program, const GLchar *name); +typedef void (APIENTRYP PFNGLGETPROGRAMIVPROC) (GLuint program, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETPROGRAMINFOLOGPROC) (GLuint program, GLsizei bufSize, GLsizei *length, GLchar *infoLog); +typedef void (APIENTRYP PFNGLGETSHADERIVPROC) (GLuint shader, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETSHADERINFOLOGPROC) (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *infoLog); +typedef void (APIENTRYP PFNGLGETSHADERSOURCEPROC) (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *source); +typedef GLint (APIENTRYP PFNGLGETUNIFORMLOCATIONPROC) (GLuint program, const GLchar *name); +typedef void (APIENTRYP PFNGLGETUNIFORMFVPROC) (GLuint program, GLint location, GLfloat *params); +typedef void (APIENTRYP PFNGLGETUNIFORMIVPROC) (GLuint program, GLint location, GLint *params); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBDVPROC) (GLuint index, GLenum pname, GLdouble *params); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBFVPROC) (GLuint index, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIVPROC) (GLuint index, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBPOINTERVPROC) (GLuint index, GLenum pname, void **pointer); +typedef GLboolean (APIENTRYP PFNGLISPROGRAMPROC) (GLuint program); +typedef GLboolean (APIENTRYP PFNGLISSHADERPROC) (GLuint shader); +typedef void (APIENTRYP PFNGLLINKPROGRAMPROC) (GLuint program); +typedef void (APIENTRYP PFNGLSHADERSOURCEPROC) (GLuint shader, GLsizei count, const GLchar *const*string, const GLint *length); +typedef void (APIENTRYP PFNGLUSEPROGRAMPROC) (GLuint program); +typedef void (APIENTRYP PFNGLUNIFORM1FPROC) (GLint location, GLfloat v0); +typedef void (APIENTRYP PFNGLUNIFORM2FPROC) (GLint location, GLfloat v0, GLfloat v1); +typedef void (APIENTRYP PFNGLUNIFORM3FPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2); +typedef void (APIENTRYP PFNGLUNIFORM4FPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); +typedef void (APIENTRYP PFNGLUNIFORM1IPROC) (GLint location, GLint v0); +typedef void (APIENTRYP PFNGLUNIFORM2IPROC) (GLint location, GLint v0, GLint v1); +typedef void (APIENTRYP PFNGLUNIFORM3IPROC) (GLint location, GLint v0, GLint v1, GLint v2); +typedef void (APIENTRYP PFNGLUNIFORM4IPROC) (GLint location, GLint v0, GLint v1, GLint v2, GLint v3); +typedef void (APIENTRYP PFNGLUNIFORM1FVPROC) (GLint location, GLsizei count, const GLfloat *value); +typedef void (APIENTRYP PFNGLUNIFORM2FVPROC) (GLint location, GLsizei count, const GLfloat *value); +typedef void (APIENTRYP PFNGLUNIFORM3FVPROC) (GLint location, GLsizei count, const GLfloat *value); +typedef void (APIENTRYP PFNGLUNIFORM4FVPROC) (GLint location, GLsizei count, const GLfloat *value); +typedef void (APIENTRYP PFNGLUNIFORM1IVPROC) (GLint location, GLsizei count, const GLint *value); +typedef void (APIENTRYP PFNGLUNIFORM2IVPROC) (GLint location, GLsizei count, const GLint *value); +typedef void (APIENTRYP PFNGLUNIFORM3IVPROC) (GLint location, GLsizei count, const GLint *value); +typedef void (APIENTRYP PFNGLUNIFORM4IVPROC) (GLint location, GLsizei count, const GLint *value); +typedef void (APIENTRYP PFNGLUNIFORMMATRIX2FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLUNIFORMMATRIX3FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLUNIFORMMATRIX4FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLVALIDATEPROGRAMPROC) (GLuint program); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1DPROC) (GLuint index, GLdouble x); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1DVPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1FPROC) (GLuint index, GLfloat x); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1FVPROC) (GLuint index, const GLfloat *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1SPROC) (GLuint index, GLshort x); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1SVPROC) (GLuint index, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2DPROC) (GLuint index, GLdouble x, GLdouble y); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2DVPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2FPROC) (GLuint index, GLfloat x, GLfloat y); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2FVPROC) (GLuint index, const GLfloat *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2SPROC) (GLuint index, GLshort x, GLshort y); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2SVPROC) (GLuint index, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3DPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3DVPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3FPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3FVPROC) (GLuint index, const GLfloat *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3SPROC) (GLuint index, GLshort x, GLshort y, GLshort z); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3SVPROC) (GLuint index, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4NBVPROC) (GLuint index, const GLbyte *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4NIVPROC) (GLuint index, const GLint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4NSVPROC) (GLuint index, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUBPROC) (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUBVPROC) (GLuint index, const GLubyte *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUIVPROC) (GLuint index, const GLuint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUSVPROC) (GLuint index, const GLushort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4BVPROC) (GLuint index, const GLbyte *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4DPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4DVPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4FPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4FVPROC) (GLuint index, const GLfloat *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4IVPROC) (GLuint index, const GLint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4SPROC) (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4SVPROC) (GLuint index, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4UBVPROC) (GLuint index, const GLubyte *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4UIVPROC) (GLuint index, const GLuint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4USVPROC) (GLuint index, const GLushort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBPOINTERPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void *pointer); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBlendEquationSeparate (GLenum modeRGB, GLenum modeAlpha); +GLAPI void APIENTRY glDrawBuffers (GLsizei n, const GLenum *bufs); +GLAPI void APIENTRY glStencilOpSeparate (GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass); +GLAPI void APIENTRY glStencilFuncSeparate (GLenum face, GLenum func, GLint ref, GLuint mask); +GLAPI void APIENTRY glStencilMaskSeparate (GLenum face, GLuint mask); +GLAPI void APIENTRY glAttachShader (GLuint program, GLuint shader); +GLAPI void APIENTRY glBindAttribLocation (GLuint program, GLuint index, const GLchar *name); +GLAPI void APIENTRY glCompileShader (GLuint shader); +GLAPI GLuint APIENTRY glCreateProgram (void); +GLAPI GLuint APIENTRY glCreateShader (GLenum type); +GLAPI void APIENTRY glDeleteProgram (GLuint program); +GLAPI void APIENTRY glDeleteShader (GLuint shader); +GLAPI void APIENTRY glDetachShader (GLuint program, GLuint shader); +GLAPI void APIENTRY glDisableVertexAttribArray (GLuint index); +GLAPI void APIENTRY glEnableVertexAttribArray (GLuint index); +GLAPI void APIENTRY glGetActiveAttrib (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name); +GLAPI void APIENTRY glGetActiveUniform (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name); +GLAPI void APIENTRY glGetAttachedShaders (GLuint program, GLsizei maxCount, GLsizei *count, GLuint *shaders); +GLAPI GLint APIENTRY glGetAttribLocation (GLuint program, const GLchar *name); +GLAPI void APIENTRY glGetProgramiv (GLuint program, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetProgramInfoLog (GLuint program, GLsizei bufSize, GLsizei *length, GLchar *infoLog); +GLAPI void APIENTRY glGetShaderiv (GLuint shader, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetShaderInfoLog (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *infoLog); +GLAPI void APIENTRY glGetShaderSource (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *source); +GLAPI GLint APIENTRY glGetUniformLocation (GLuint program, const GLchar *name); +GLAPI void APIENTRY glGetUniformfv (GLuint program, GLint location, GLfloat *params); +GLAPI void APIENTRY glGetUniformiv (GLuint program, GLint location, GLint *params); +GLAPI void APIENTRY glGetVertexAttribdv (GLuint index, GLenum pname, GLdouble *params); +GLAPI void APIENTRY glGetVertexAttribfv (GLuint index, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetVertexAttribiv (GLuint index, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetVertexAttribPointerv (GLuint index, GLenum pname, void **pointer); +GLAPI GLboolean APIENTRY glIsProgram (GLuint program); +GLAPI GLboolean APIENTRY glIsShader (GLuint shader); +GLAPI void APIENTRY glLinkProgram (GLuint program); +GLAPI void APIENTRY glShaderSource (GLuint shader, GLsizei count, const GLchar *const*string, const GLint *length); +GLAPI void APIENTRY glUseProgram (GLuint program); +GLAPI void APIENTRY glUniform1f (GLint location, GLfloat v0); +GLAPI void APIENTRY glUniform2f (GLint location, GLfloat v0, GLfloat v1); +GLAPI void APIENTRY glUniform3f (GLint location, GLfloat v0, GLfloat v1, GLfloat v2); +GLAPI void APIENTRY glUniform4f (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); +GLAPI void APIENTRY glUniform1i (GLint location, GLint v0); +GLAPI void APIENTRY glUniform2i (GLint location, GLint v0, GLint v1); +GLAPI void APIENTRY glUniform3i (GLint location, GLint v0, GLint v1, GLint v2); +GLAPI void APIENTRY glUniform4i (GLint location, GLint v0, GLint v1, GLint v2, GLint v3); +GLAPI void APIENTRY glUniform1fv (GLint location, GLsizei count, const GLfloat *value); +GLAPI void APIENTRY glUniform2fv (GLint location, GLsizei count, const GLfloat *value); +GLAPI void APIENTRY glUniform3fv (GLint location, GLsizei count, const GLfloat *value); +GLAPI void APIENTRY glUniform4fv (GLint location, GLsizei count, const GLfloat *value); +GLAPI void APIENTRY glUniform1iv (GLint location, GLsizei count, const GLint *value); +GLAPI void APIENTRY glUniform2iv (GLint location, GLsizei count, const GLint *value); +GLAPI void APIENTRY glUniform3iv (GLint location, GLsizei count, const GLint *value); +GLAPI void APIENTRY glUniform4iv (GLint location, GLsizei count, const GLint *value); +GLAPI void APIENTRY glUniformMatrix2fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glUniformMatrix3fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glUniformMatrix4fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glValidateProgram (GLuint program); +GLAPI void APIENTRY glVertexAttrib1d (GLuint index, GLdouble x); +GLAPI void APIENTRY glVertexAttrib1dv (GLuint index, const GLdouble *v); +GLAPI void APIENTRY glVertexAttrib1f (GLuint index, GLfloat x); +GLAPI void APIENTRY glVertexAttrib1fv (GLuint index, const GLfloat *v); +GLAPI void APIENTRY glVertexAttrib1s (GLuint index, GLshort x); +GLAPI void APIENTRY glVertexAttrib1sv (GLuint index, const GLshort *v); +GLAPI void APIENTRY glVertexAttrib2d (GLuint index, GLdouble x, GLdouble y); +GLAPI void APIENTRY glVertexAttrib2dv (GLuint index, const GLdouble *v); +GLAPI void APIENTRY glVertexAttrib2f (GLuint index, GLfloat x, GLfloat y); +GLAPI void APIENTRY glVertexAttrib2fv (GLuint index, const GLfloat *v); +GLAPI void APIENTRY glVertexAttrib2s (GLuint index, GLshort x, GLshort y); +GLAPI void APIENTRY glVertexAttrib2sv (GLuint index, const GLshort *v); +GLAPI void APIENTRY glVertexAttrib3d (GLuint index, GLdouble x, GLdouble y, GLdouble z); +GLAPI void APIENTRY glVertexAttrib3dv (GLuint index, const GLdouble *v); +GLAPI void APIENTRY glVertexAttrib3f (GLuint index, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glVertexAttrib3fv (GLuint index, const GLfloat *v); +GLAPI void APIENTRY glVertexAttrib3s (GLuint index, GLshort x, GLshort y, GLshort z); +GLAPI void APIENTRY glVertexAttrib3sv (GLuint index, const GLshort *v); +GLAPI void APIENTRY glVertexAttrib4Nbv (GLuint index, const GLbyte *v); +GLAPI void APIENTRY glVertexAttrib4Niv (GLuint index, const GLint *v); +GLAPI void APIENTRY glVertexAttrib4Nsv (GLuint index, const GLshort *v); +GLAPI void APIENTRY glVertexAttrib4Nub (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); +GLAPI void APIENTRY glVertexAttrib4Nubv (GLuint index, const GLubyte *v); +GLAPI void APIENTRY glVertexAttrib4Nuiv (GLuint index, const GLuint *v); +GLAPI void APIENTRY glVertexAttrib4Nusv (GLuint index, const GLushort *v); +GLAPI void APIENTRY glVertexAttrib4bv (GLuint index, const GLbyte *v); +GLAPI void APIENTRY glVertexAttrib4d (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +GLAPI void APIENTRY glVertexAttrib4dv (GLuint index, const GLdouble *v); +GLAPI void APIENTRY glVertexAttrib4f (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +GLAPI void APIENTRY glVertexAttrib4fv (GLuint index, const GLfloat *v); +GLAPI void APIENTRY glVertexAttrib4iv (GLuint index, const GLint *v); +GLAPI void APIENTRY glVertexAttrib4s (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); +GLAPI void APIENTRY glVertexAttrib4sv (GLuint index, const GLshort *v); +GLAPI void APIENTRY glVertexAttrib4ubv (GLuint index, const GLubyte *v); +GLAPI void APIENTRY glVertexAttrib4uiv (GLuint index, const GLuint *v); +GLAPI void APIENTRY glVertexAttrib4usv (GLuint index, const GLushort *v); +GLAPI void APIENTRY glVertexAttribPointer (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void *pointer); +#endif +#endif /* GL_VERSION_2_0 */ + +#ifndef GL_VERSION_2_1 +#define GL_VERSION_2_1 1 +#define GL_PIXEL_PACK_BUFFER 0x88EB +#define GL_PIXEL_UNPACK_BUFFER 0x88EC +#define GL_PIXEL_PACK_BUFFER_BINDING 0x88ED +#define GL_PIXEL_UNPACK_BUFFER_BINDING 0x88EF +#define GL_FLOAT_MAT2x3 0x8B65 +#define GL_FLOAT_MAT2x4 0x8B66 +#define GL_FLOAT_MAT3x2 0x8B67 +#define GL_FLOAT_MAT3x4 0x8B68 +#define GL_FLOAT_MAT4x2 0x8B69 +#define GL_FLOAT_MAT4x3 0x8B6A +#define GL_SRGB 0x8C40 +#define GL_SRGB8 0x8C41 +#define GL_SRGB_ALPHA 0x8C42 +#define GL_SRGB8_ALPHA8 0x8C43 +#define GL_COMPRESSED_SRGB 0x8C48 +#define GL_COMPRESSED_SRGB_ALPHA 0x8C49 +#define GL_CURRENT_RASTER_SECONDARY_COLOR 0x845F +#define GL_SLUMINANCE_ALPHA 0x8C44 +#define GL_SLUMINANCE8_ALPHA8 0x8C45 +#define GL_SLUMINANCE 0x8C46 +#define GL_SLUMINANCE8 0x8C47 +#define GL_COMPRESSED_SLUMINANCE 0x8C4A +#define GL_COMPRESSED_SLUMINANCE_ALPHA 0x8C4B +typedef void (APIENTRYP PFNGLUNIFORMMATRIX2X3FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLUNIFORMMATRIX3X2FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLUNIFORMMATRIX2X4FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLUNIFORMMATRIX4X2FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLUNIFORMMATRIX3X4FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLUNIFORMMATRIX4X3FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glUniformMatrix2x3fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glUniformMatrix3x2fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glUniformMatrix2x4fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glUniformMatrix4x2fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glUniformMatrix3x4fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glUniformMatrix4x3fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +#endif +#endif /* GL_VERSION_2_1 */ + +#ifndef GL_VERSION_3_0 +#define GL_VERSION_3_0 1 +typedef khronos_uint16_t GLhalf; +#define GL_COMPARE_REF_TO_TEXTURE 0x884E +#define GL_CLIP_DISTANCE0 0x3000 +#define GL_CLIP_DISTANCE1 0x3001 +#define GL_CLIP_DISTANCE2 0x3002 +#define GL_CLIP_DISTANCE3 0x3003 +#define GL_CLIP_DISTANCE4 0x3004 +#define GL_CLIP_DISTANCE5 0x3005 +#define GL_CLIP_DISTANCE6 0x3006 +#define GL_CLIP_DISTANCE7 0x3007 +#define GL_MAX_CLIP_DISTANCES 0x0D32 +#define GL_MAJOR_VERSION 0x821B +#define GL_MINOR_VERSION 0x821C +#define GL_NUM_EXTENSIONS 0x821D +#define GL_CONTEXT_FLAGS 0x821E +#define GL_COMPRESSED_RED 0x8225 +#define GL_COMPRESSED_RG 0x8226 +#define GL_CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT 0x00000001 +#define GL_RGBA32F 0x8814 +#define GL_RGB32F 0x8815 +#define GL_RGBA16F 0x881A +#define GL_RGB16F 0x881B +#define GL_VERTEX_ATTRIB_ARRAY_INTEGER 0x88FD +#define GL_MAX_ARRAY_TEXTURE_LAYERS 0x88FF +#define GL_MIN_PROGRAM_TEXEL_OFFSET 0x8904 +#define GL_MAX_PROGRAM_TEXEL_OFFSET 0x8905 +#define GL_CLAMP_READ_COLOR 0x891C +#define GL_FIXED_ONLY 0x891D +#define GL_MAX_VARYING_COMPONENTS 0x8B4B +#define GL_TEXTURE_1D_ARRAY 0x8C18 +#define GL_PROXY_TEXTURE_1D_ARRAY 0x8C19 +#define GL_TEXTURE_2D_ARRAY 0x8C1A +#define GL_PROXY_TEXTURE_2D_ARRAY 0x8C1B +#define GL_TEXTURE_BINDING_1D_ARRAY 0x8C1C +#define GL_TEXTURE_BINDING_2D_ARRAY 0x8C1D +#define GL_R11F_G11F_B10F 0x8C3A +#define GL_UNSIGNED_INT_10F_11F_11F_REV 0x8C3B +#define GL_RGB9_E5 0x8C3D +#define GL_UNSIGNED_INT_5_9_9_9_REV 0x8C3E +#define GL_TEXTURE_SHARED_SIZE 0x8C3F +#define GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH 0x8C76 +#define GL_TRANSFORM_FEEDBACK_BUFFER_MODE 0x8C7F +#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS 0x8C80 +#define GL_TRANSFORM_FEEDBACK_VARYINGS 0x8C83 +#define GL_TRANSFORM_FEEDBACK_BUFFER_START 0x8C84 +#define GL_TRANSFORM_FEEDBACK_BUFFER_SIZE 0x8C85 +#define GL_PRIMITIVES_GENERATED 0x8C87 +#define GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN 0x8C88 +#define GL_RASTERIZER_DISCARD 0x8C89 +#define GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS 0x8C8A +#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS 0x8C8B +#define GL_INTERLEAVED_ATTRIBS 0x8C8C +#define GL_SEPARATE_ATTRIBS 0x8C8D +#define GL_TRANSFORM_FEEDBACK_BUFFER 0x8C8E +#define GL_TRANSFORM_FEEDBACK_BUFFER_BINDING 0x8C8F +#define GL_RGBA32UI 0x8D70 +#define GL_RGB32UI 0x8D71 +#define GL_RGBA16UI 0x8D76 +#define GL_RGB16UI 0x8D77 +#define GL_RGBA8UI 0x8D7C +#define GL_RGB8UI 0x8D7D +#define GL_RGBA32I 0x8D82 +#define GL_RGB32I 0x8D83 +#define GL_RGBA16I 0x8D88 +#define GL_RGB16I 0x8D89 +#define GL_RGBA8I 0x8D8E +#define GL_RGB8I 0x8D8F +#define GL_RED_INTEGER 0x8D94 +#define GL_GREEN_INTEGER 0x8D95 +#define GL_BLUE_INTEGER 0x8D96 +#define GL_RGB_INTEGER 0x8D98 +#define GL_RGBA_INTEGER 0x8D99 +#define GL_BGR_INTEGER 0x8D9A +#define GL_BGRA_INTEGER 0x8D9B +#define GL_SAMPLER_1D_ARRAY 0x8DC0 +#define GL_SAMPLER_2D_ARRAY 0x8DC1 +#define GL_SAMPLER_1D_ARRAY_SHADOW 0x8DC3 +#define GL_SAMPLER_2D_ARRAY_SHADOW 0x8DC4 +#define GL_SAMPLER_CUBE_SHADOW 0x8DC5 +#define GL_UNSIGNED_INT_VEC2 0x8DC6 +#define GL_UNSIGNED_INT_VEC3 0x8DC7 +#define GL_UNSIGNED_INT_VEC4 0x8DC8 +#define GL_INT_SAMPLER_1D 0x8DC9 +#define GL_INT_SAMPLER_2D 0x8DCA +#define GL_INT_SAMPLER_3D 0x8DCB +#define GL_INT_SAMPLER_CUBE 0x8DCC +#define GL_INT_SAMPLER_1D_ARRAY 0x8DCE +#define GL_INT_SAMPLER_2D_ARRAY 0x8DCF +#define GL_UNSIGNED_INT_SAMPLER_1D 0x8DD1 +#define GL_UNSIGNED_INT_SAMPLER_2D 0x8DD2 +#define GL_UNSIGNED_INT_SAMPLER_3D 0x8DD3 +#define GL_UNSIGNED_INT_SAMPLER_CUBE 0x8DD4 +#define GL_UNSIGNED_INT_SAMPLER_1D_ARRAY 0x8DD6 +#define GL_UNSIGNED_INT_SAMPLER_2D_ARRAY 0x8DD7 +#define GL_QUERY_WAIT 0x8E13 +#define GL_QUERY_NO_WAIT 0x8E14 +#define GL_QUERY_BY_REGION_WAIT 0x8E15 +#define GL_QUERY_BY_REGION_NO_WAIT 0x8E16 +#define GL_BUFFER_ACCESS_FLAGS 0x911F +#define GL_BUFFER_MAP_LENGTH 0x9120 +#define GL_BUFFER_MAP_OFFSET 0x9121 +#define GL_DEPTH_COMPONENT32F 0x8CAC +#define GL_DEPTH32F_STENCIL8 0x8CAD +#define GL_FLOAT_32_UNSIGNED_INT_24_8_REV 0x8DAD +#define GL_INVALID_FRAMEBUFFER_OPERATION 0x0506 +#define GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING 0x8210 +#define GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE 0x8211 +#define GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE 0x8212 +#define GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE 0x8213 +#define GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE 0x8214 +#define GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE 0x8215 +#define GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE 0x8216 +#define GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE 0x8217 +#define GL_FRAMEBUFFER_DEFAULT 0x8218 +#define GL_FRAMEBUFFER_UNDEFINED 0x8219 +#define GL_DEPTH_STENCIL_ATTACHMENT 0x821A +#define GL_MAX_RENDERBUFFER_SIZE 0x84E8 +#define GL_DEPTH_STENCIL 0x84F9 +#define GL_UNSIGNED_INT_24_8 0x84FA +#define GL_DEPTH24_STENCIL8 0x88F0 +#define GL_TEXTURE_STENCIL_SIZE 0x88F1 +#define GL_TEXTURE_RED_TYPE 0x8C10 +#define GL_TEXTURE_GREEN_TYPE 0x8C11 +#define GL_TEXTURE_BLUE_TYPE 0x8C12 +#define GL_TEXTURE_ALPHA_TYPE 0x8C13 +#define GL_TEXTURE_DEPTH_TYPE 0x8C16 +#define GL_UNSIGNED_NORMALIZED 0x8C17 +#define GL_FRAMEBUFFER_BINDING 0x8CA6 +#define GL_DRAW_FRAMEBUFFER_BINDING 0x8CA6 +#define GL_RENDERBUFFER_BINDING 0x8CA7 +#define GL_READ_FRAMEBUFFER 0x8CA8 +#define GL_DRAW_FRAMEBUFFER 0x8CA9 +#define GL_READ_FRAMEBUFFER_BINDING 0x8CAA +#define GL_RENDERBUFFER_SAMPLES 0x8CAB +#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE 0x8CD0 +#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME 0x8CD1 +#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL 0x8CD2 +#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE 0x8CD3 +#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER 0x8CD4 +#define GL_FRAMEBUFFER_COMPLETE 0x8CD5 +#define GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT 0x8CD6 +#define GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT 0x8CD7 +#define GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER 0x8CDB +#define GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER 0x8CDC +#define GL_FRAMEBUFFER_UNSUPPORTED 0x8CDD +#define GL_MAX_COLOR_ATTACHMENTS 0x8CDF +#define GL_COLOR_ATTACHMENT0 0x8CE0 +#define GL_COLOR_ATTACHMENT1 0x8CE1 +#define GL_COLOR_ATTACHMENT2 0x8CE2 +#define GL_COLOR_ATTACHMENT3 0x8CE3 +#define GL_COLOR_ATTACHMENT4 0x8CE4 +#define GL_COLOR_ATTACHMENT5 0x8CE5 +#define GL_COLOR_ATTACHMENT6 0x8CE6 +#define GL_COLOR_ATTACHMENT7 0x8CE7 +#define GL_COLOR_ATTACHMENT8 0x8CE8 +#define GL_COLOR_ATTACHMENT9 0x8CE9 +#define GL_COLOR_ATTACHMENT10 0x8CEA +#define GL_COLOR_ATTACHMENT11 0x8CEB +#define GL_COLOR_ATTACHMENT12 0x8CEC +#define GL_COLOR_ATTACHMENT13 0x8CED +#define GL_COLOR_ATTACHMENT14 0x8CEE +#define GL_COLOR_ATTACHMENT15 0x8CEF +#define GL_COLOR_ATTACHMENT16 0x8CF0 +#define GL_COLOR_ATTACHMENT17 0x8CF1 +#define GL_COLOR_ATTACHMENT18 0x8CF2 +#define GL_COLOR_ATTACHMENT19 0x8CF3 +#define GL_COLOR_ATTACHMENT20 0x8CF4 +#define GL_COLOR_ATTACHMENT21 0x8CF5 +#define GL_COLOR_ATTACHMENT22 0x8CF6 +#define GL_COLOR_ATTACHMENT23 0x8CF7 +#define GL_COLOR_ATTACHMENT24 0x8CF8 +#define GL_COLOR_ATTACHMENT25 0x8CF9 +#define GL_COLOR_ATTACHMENT26 0x8CFA +#define GL_COLOR_ATTACHMENT27 0x8CFB +#define GL_COLOR_ATTACHMENT28 0x8CFC +#define GL_COLOR_ATTACHMENT29 0x8CFD +#define GL_COLOR_ATTACHMENT30 0x8CFE +#define GL_COLOR_ATTACHMENT31 0x8CFF +#define GL_DEPTH_ATTACHMENT 0x8D00 +#define GL_STENCIL_ATTACHMENT 0x8D20 +#define GL_FRAMEBUFFER 0x8D40 +#define GL_RENDERBUFFER 0x8D41 +#define GL_RENDERBUFFER_WIDTH 0x8D42 +#define GL_RENDERBUFFER_HEIGHT 0x8D43 +#define GL_RENDERBUFFER_INTERNAL_FORMAT 0x8D44 +#define GL_STENCIL_INDEX1 0x8D46 +#define GL_STENCIL_INDEX4 0x8D47 +#define GL_STENCIL_INDEX8 0x8D48 +#define GL_STENCIL_INDEX16 0x8D49 +#define GL_RENDERBUFFER_RED_SIZE 0x8D50 +#define GL_RENDERBUFFER_GREEN_SIZE 0x8D51 +#define GL_RENDERBUFFER_BLUE_SIZE 0x8D52 +#define GL_RENDERBUFFER_ALPHA_SIZE 0x8D53 +#define GL_RENDERBUFFER_DEPTH_SIZE 0x8D54 +#define GL_RENDERBUFFER_STENCIL_SIZE 0x8D55 +#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE 0x8D56 +#define GL_MAX_SAMPLES 0x8D57 +#define GL_INDEX 0x8222 +#define GL_TEXTURE_LUMINANCE_TYPE 0x8C14 +#define GL_TEXTURE_INTENSITY_TYPE 0x8C15 +#define GL_FRAMEBUFFER_SRGB 0x8DB9 +#define GL_HALF_FLOAT 0x140B +#define GL_MAP_READ_BIT 0x0001 +#define GL_MAP_WRITE_BIT 0x0002 +#define GL_MAP_INVALIDATE_RANGE_BIT 0x0004 +#define GL_MAP_INVALIDATE_BUFFER_BIT 0x0008 +#define GL_MAP_FLUSH_EXPLICIT_BIT 0x0010 +#define GL_MAP_UNSYNCHRONIZED_BIT 0x0020 +#define GL_COMPRESSED_RED_RGTC1 0x8DBB +#define GL_COMPRESSED_SIGNED_RED_RGTC1 0x8DBC +#define GL_COMPRESSED_RG_RGTC2 0x8DBD +#define GL_COMPRESSED_SIGNED_RG_RGTC2 0x8DBE +#define GL_RG 0x8227 +#define GL_RG_INTEGER 0x8228 +#define GL_R8 0x8229 +#define GL_R16 0x822A +#define GL_RG8 0x822B +#define GL_RG16 0x822C +#define GL_R16F 0x822D +#define GL_R32F 0x822E +#define GL_RG16F 0x822F +#define GL_RG32F 0x8230 +#define GL_R8I 0x8231 +#define GL_R8UI 0x8232 +#define GL_R16I 0x8233 +#define GL_R16UI 0x8234 +#define GL_R32I 0x8235 +#define GL_R32UI 0x8236 +#define GL_RG8I 0x8237 +#define GL_RG8UI 0x8238 +#define GL_RG16I 0x8239 +#define GL_RG16UI 0x823A +#define GL_RG32I 0x823B +#define GL_RG32UI 0x823C +#define GL_VERTEX_ARRAY_BINDING 0x85B5 +#define GL_CLAMP_VERTEX_COLOR 0x891A +#define GL_CLAMP_FRAGMENT_COLOR 0x891B +#define GL_ALPHA_INTEGER 0x8D97 +typedef void (APIENTRYP PFNGLCOLORMASKIPROC) (GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a); +typedef void (APIENTRYP PFNGLGETBOOLEANI_VPROC) (GLenum target, GLuint index, GLboolean *data); +typedef void (APIENTRYP PFNGLGETINTEGERI_VPROC) (GLenum target, GLuint index, GLint *data); +typedef void (APIENTRYP PFNGLENABLEIPROC) (GLenum target, GLuint index); +typedef void (APIENTRYP PFNGLDISABLEIPROC) (GLenum target, GLuint index); +typedef GLboolean (APIENTRYP PFNGLISENABLEDIPROC) (GLenum target, GLuint index); +typedef void (APIENTRYP PFNGLBEGINTRANSFORMFEEDBACKPROC) (GLenum primitiveMode); +typedef void (APIENTRYP PFNGLENDTRANSFORMFEEDBACKPROC) (void); +typedef void (APIENTRYP PFNGLBINDBUFFERRANGEPROC) (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); +typedef void (APIENTRYP PFNGLBINDBUFFERBASEPROC) (GLenum target, GLuint index, GLuint buffer); +typedef void (APIENTRYP PFNGLTRANSFORMFEEDBACKVARYINGSPROC) (GLuint program, GLsizei count, const GLchar *const*varyings, GLenum bufferMode); +typedef void (APIENTRYP PFNGLGETTRANSFORMFEEDBACKVARYINGPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name); +typedef void (APIENTRYP PFNGLCLAMPCOLORPROC) (GLenum target, GLenum clamp); +typedef void (APIENTRYP PFNGLBEGINCONDITIONALRENDERPROC) (GLuint id, GLenum mode); +typedef void (APIENTRYP PFNGLENDCONDITIONALRENDERPROC) (void); +typedef void (APIENTRYP PFNGLVERTEXATTRIBIPOINTERPROC) (GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIIVPROC) (GLuint index, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIUIVPROC) (GLuint index, GLenum pname, GLuint *params); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI1IPROC) (GLuint index, GLint x); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI2IPROC) (GLuint index, GLint x, GLint y); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI3IPROC) (GLuint index, GLint x, GLint y, GLint z); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI4IPROC) (GLuint index, GLint x, GLint y, GLint z, GLint w); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI1UIPROC) (GLuint index, GLuint x); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI2UIPROC) (GLuint index, GLuint x, GLuint y); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI3UIPROC) (GLuint index, GLuint x, GLuint y, GLuint z); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI4UIPROC) (GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI1IVPROC) (GLuint index, const GLint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI2IVPROC) (GLuint index, const GLint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI3IVPROC) (GLuint index, const GLint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI4IVPROC) (GLuint index, const GLint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI1UIVPROC) (GLuint index, const GLuint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI2UIVPROC) (GLuint index, const GLuint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI3UIVPROC) (GLuint index, const GLuint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI4UIVPROC) (GLuint index, const GLuint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI4BVPROC) (GLuint index, const GLbyte *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI4SVPROC) (GLuint index, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI4UBVPROC) (GLuint index, const GLubyte *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI4USVPROC) (GLuint index, const GLushort *v); +typedef void (APIENTRYP PFNGLGETUNIFORMUIVPROC) (GLuint program, GLint location, GLuint *params); +typedef void (APIENTRYP PFNGLBINDFRAGDATALOCATIONPROC) (GLuint program, GLuint color, const GLchar *name); +typedef GLint (APIENTRYP PFNGLGETFRAGDATALOCATIONPROC) (GLuint program, const GLchar *name); +typedef void (APIENTRYP PFNGLUNIFORM1UIPROC) (GLint location, GLuint v0); +typedef void (APIENTRYP PFNGLUNIFORM2UIPROC) (GLint location, GLuint v0, GLuint v1); +typedef void (APIENTRYP PFNGLUNIFORM3UIPROC) (GLint location, GLuint v0, GLuint v1, GLuint v2); +typedef void (APIENTRYP PFNGLUNIFORM4UIPROC) (GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); +typedef void (APIENTRYP PFNGLUNIFORM1UIVPROC) (GLint location, GLsizei count, const GLuint *value); +typedef void (APIENTRYP PFNGLUNIFORM2UIVPROC) (GLint location, GLsizei count, const GLuint *value); +typedef void (APIENTRYP PFNGLUNIFORM3UIVPROC) (GLint location, GLsizei count, const GLuint *value); +typedef void (APIENTRYP PFNGLUNIFORM4UIVPROC) (GLint location, GLsizei count, const GLuint *value); +typedef void (APIENTRYP PFNGLTEXPARAMETERIIVPROC) (GLenum target, GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLTEXPARAMETERIUIVPROC) (GLenum target, GLenum pname, const GLuint *params); +typedef void (APIENTRYP PFNGLGETTEXPARAMETERIIVPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETTEXPARAMETERIUIVPROC) (GLenum target, GLenum pname, GLuint *params); +typedef void (APIENTRYP PFNGLCLEARBUFFERIVPROC) (GLenum buffer, GLint drawbuffer, const GLint *value); +typedef void (APIENTRYP PFNGLCLEARBUFFERUIVPROC) (GLenum buffer, GLint drawbuffer, const GLuint *value); +typedef void (APIENTRYP PFNGLCLEARBUFFERFVPROC) (GLenum buffer, GLint drawbuffer, const GLfloat *value); +typedef void (APIENTRYP PFNGLCLEARBUFFERFIPROC) (GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil); +typedef const GLubyte *(APIENTRYP PFNGLGETSTRINGIPROC) (GLenum name, GLuint index); +typedef GLboolean (APIENTRYP PFNGLISRENDERBUFFERPROC) (GLuint renderbuffer); +typedef void (APIENTRYP PFNGLBINDRENDERBUFFERPROC) (GLenum target, GLuint renderbuffer); +typedef void (APIENTRYP PFNGLDELETERENDERBUFFERSPROC) (GLsizei n, const GLuint *renderbuffers); +typedef void (APIENTRYP PFNGLGENRENDERBUFFERSPROC) (GLsizei n, GLuint *renderbuffers); +typedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height); +typedef void (APIENTRYP PFNGLGETRENDERBUFFERPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); +typedef GLboolean (APIENTRYP PFNGLISFRAMEBUFFERPROC) (GLuint framebuffer); +typedef void (APIENTRYP PFNGLBINDFRAMEBUFFERPROC) (GLenum target, GLuint framebuffer); +typedef void (APIENTRYP PFNGLDELETEFRAMEBUFFERSPROC) (GLsizei n, const GLuint *framebuffers); +typedef void (APIENTRYP PFNGLGENFRAMEBUFFERSPROC) (GLsizei n, GLuint *framebuffers); +typedef GLenum (APIENTRYP PFNGLCHECKFRAMEBUFFERSTATUSPROC) (GLenum target); +typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE1DPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); +typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE2DPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); +typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE3DPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); +typedef void (APIENTRYP PFNGLFRAMEBUFFERRENDERBUFFERPROC) (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); +typedef void (APIENTRYP PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC) (GLenum target, GLenum attachment, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGENERATEMIPMAPPROC) (GLenum target); +typedef void (APIENTRYP PFNGLBLITFRAMEBUFFERPROC) (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); +typedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); +typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURELAYERPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); +typedef void *(APIENTRYP PFNGLMAPBUFFERRANGEPROC) (GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access); +typedef void (APIENTRYP PFNGLFLUSHMAPPEDBUFFERRANGEPROC) (GLenum target, GLintptr offset, GLsizeiptr length); +typedef void (APIENTRYP PFNGLBINDVERTEXARRAYPROC) (GLuint array); +typedef void (APIENTRYP PFNGLDELETEVERTEXARRAYSPROC) (GLsizei n, const GLuint *arrays); +typedef void (APIENTRYP PFNGLGENVERTEXARRAYSPROC) (GLsizei n, GLuint *arrays); +typedef GLboolean (APIENTRYP PFNGLISVERTEXARRAYPROC) (GLuint array); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glColorMaski (GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a); +GLAPI void APIENTRY glGetBooleani_v (GLenum target, GLuint index, GLboolean *data); +GLAPI void APIENTRY glGetIntegeri_v (GLenum target, GLuint index, GLint *data); +GLAPI void APIENTRY glEnablei (GLenum target, GLuint index); +GLAPI void APIENTRY glDisablei (GLenum target, GLuint index); +GLAPI GLboolean APIENTRY glIsEnabledi (GLenum target, GLuint index); +GLAPI void APIENTRY glBeginTransformFeedback (GLenum primitiveMode); +GLAPI void APIENTRY glEndTransformFeedback (void); +GLAPI void APIENTRY glBindBufferRange (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); +GLAPI void APIENTRY glBindBufferBase (GLenum target, GLuint index, GLuint buffer); +GLAPI void APIENTRY glTransformFeedbackVaryings (GLuint program, GLsizei count, const GLchar *const*varyings, GLenum bufferMode); +GLAPI void APIENTRY glGetTransformFeedbackVarying (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name); +GLAPI void APIENTRY glClampColor (GLenum target, GLenum clamp); +GLAPI void APIENTRY glBeginConditionalRender (GLuint id, GLenum mode); +GLAPI void APIENTRY glEndConditionalRender (void); +GLAPI void APIENTRY glVertexAttribIPointer (GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer); +GLAPI void APIENTRY glGetVertexAttribIiv (GLuint index, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetVertexAttribIuiv (GLuint index, GLenum pname, GLuint *params); +GLAPI void APIENTRY glVertexAttribI1i (GLuint index, GLint x); +GLAPI void APIENTRY glVertexAttribI2i (GLuint index, GLint x, GLint y); +GLAPI void APIENTRY glVertexAttribI3i (GLuint index, GLint x, GLint y, GLint z); +GLAPI void APIENTRY glVertexAttribI4i (GLuint index, GLint x, GLint y, GLint z, GLint w); +GLAPI void APIENTRY glVertexAttribI1ui (GLuint index, GLuint x); +GLAPI void APIENTRY glVertexAttribI2ui (GLuint index, GLuint x, GLuint y); +GLAPI void APIENTRY glVertexAttribI3ui (GLuint index, GLuint x, GLuint y, GLuint z); +GLAPI void APIENTRY glVertexAttribI4ui (GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); +GLAPI void APIENTRY glVertexAttribI1iv (GLuint index, const GLint *v); +GLAPI void APIENTRY glVertexAttribI2iv (GLuint index, const GLint *v); +GLAPI void APIENTRY glVertexAttribI3iv (GLuint index, const GLint *v); +GLAPI void APIENTRY glVertexAttribI4iv (GLuint index, const GLint *v); +GLAPI void APIENTRY glVertexAttribI1uiv (GLuint index, const GLuint *v); +GLAPI void APIENTRY glVertexAttribI2uiv (GLuint index, const GLuint *v); +GLAPI void APIENTRY glVertexAttribI3uiv (GLuint index, const GLuint *v); +GLAPI void APIENTRY glVertexAttribI4uiv (GLuint index, const GLuint *v); +GLAPI void APIENTRY glVertexAttribI4bv (GLuint index, const GLbyte *v); +GLAPI void APIENTRY glVertexAttribI4sv (GLuint index, const GLshort *v); +GLAPI void APIENTRY glVertexAttribI4ubv (GLuint index, const GLubyte *v); +GLAPI void APIENTRY glVertexAttribI4usv (GLuint index, const GLushort *v); +GLAPI void APIENTRY glGetUniformuiv (GLuint program, GLint location, GLuint *params); +GLAPI void APIENTRY glBindFragDataLocation (GLuint program, GLuint color, const GLchar *name); +GLAPI GLint APIENTRY glGetFragDataLocation (GLuint program, const GLchar *name); +GLAPI void APIENTRY glUniform1ui (GLint location, GLuint v0); +GLAPI void APIENTRY glUniform2ui (GLint location, GLuint v0, GLuint v1); +GLAPI void APIENTRY glUniform3ui (GLint location, GLuint v0, GLuint v1, GLuint v2); +GLAPI void APIENTRY glUniform4ui (GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); +GLAPI void APIENTRY glUniform1uiv (GLint location, GLsizei count, const GLuint *value); +GLAPI void APIENTRY glUniform2uiv (GLint location, GLsizei count, const GLuint *value); +GLAPI void APIENTRY glUniform3uiv (GLint location, GLsizei count, const GLuint *value); +GLAPI void APIENTRY glUniform4uiv (GLint location, GLsizei count, const GLuint *value); +GLAPI void APIENTRY glTexParameterIiv (GLenum target, GLenum pname, const GLint *params); +GLAPI void APIENTRY glTexParameterIuiv (GLenum target, GLenum pname, const GLuint *params); +GLAPI void APIENTRY glGetTexParameterIiv (GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetTexParameterIuiv (GLenum target, GLenum pname, GLuint *params); +GLAPI void APIENTRY glClearBufferiv (GLenum buffer, GLint drawbuffer, const GLint *value); +GLAPI void APIENTRY glClearBufferuiv (GLenum buffer, GLint drawbuffer, const GLuint *value); +GLAPI void APIENTRY glClearBufferfv (GLenum buffer, GLint drawbuffer, const GLfloat *value); +GLAPI void APIENTRY glClearBufferfi (GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil); +GLAPI const GLubyte *APIENTRY glGetStringi (GLenum name, GLuint index); +GLAPI GLboolean APIENTRY glIsRenderbuffer (GLuint renderbuffer); +GLAPI void APIENTRY glBindRenderbuffer (GLenum target, GLuint renderbuffer); +GLAPI void APIENTRY glDeleteRenderbuffers (GLsizei n, const GLuint *renderbuffers); +GLAPI void APIENTRY glGenRenderbuffers (GLsizei n, GLuint *renderbuffers); +GLAPI void APIENTRY glRenderbufferStorage (GLenum target, GLenum internalformat, GLsizei width, GLsizei height); +GLAPI void APIENTRY glGetRenderbufferParameteriv (GLenum target, GLenum pname, GLint *params); +GLAPI GLboolean APIENTRY glIsFramebuffer (GLuint framebuffer); +GLAPI void APIENTRY glBindFramebuffer (GLenum target, GLuint framebuffer); +GLAPI void APIENTRY glDeleteFramebuffers (GLsizei n, const GLuint *framebuffers); +GLAPI void APIENTRY glGenFramebuffers (GLsizei n, GLuint *framebuffers); +GLAPI GLenum APIENTRY glCheckFramebufferStatus (GLenum target); +GLAPI void APIENTRY glFramebufferTexture1D (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); +GLAPI void APIENTRY glFramebufferTexture2D (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); +GLAPI void APIENTRY glFramebufferTexture3D (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); +GLAPI void APIENTRY glFramebufferRenderbuffer (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); +GLAPI void APIENTRY glGetFramebufferAttachmentParameteriv (GLenum target, GLenum attachment, GLenum pname, GLint *params); +GLAPI void APIENTRY glGenerateMipmap (GLenum target); +GLAPI void APIENTRY glBlitFramebuffer (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); +GLAPI void APIENTRY glRenderbufferStorageMultisample (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); +GLAPI void APIENTRY glFramebufferTextureLayer (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); +GLAPI void *APIENTRY glMapBufferRange (GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access); +GLAPI void APIENTRY glFlushMappedBufferRange (GLenum target, GLintptr offset, GLsizeiptr length); +GLAPI void APIENTRY glBindVertexArray (GLuint array); +GLAPI void APIENTRY glDeleteVertexArrays (GLsizei n, const GLuint *arrays); +GLAPI void APIENTRY glGenVertexArrays (GLsizei n, GLuint *arrays); +GLAPI GLboolean APIENTRY glIsVertexArray (GLuint array); +#endif +#endif /* GL_VERSION_3_0 */ + +#ifndef GL_VERSION_3_1 +#define GL_VERSION_3_1 1 +#define GL_SAMPLER_2D_RECT 0x8B63 +#define GL_SAMPLER_2D_RECT_SHADOW 0x8B64 +#define GL_SAMPLER_BUFFER 0x8DC2 +#define GL_INT_SAMPLER_2D_RECT 0x8DCD +#define GL_INT_SAMPLER_BUFFER 0x8DD0 +#define GL_UNSIGNED_INT_SAMPLER_2D_RECT 0x8DD5 +#define GL_UNSIGNED_INT_SAMPLER_BUFFER 0x8DD8 +#define GL_TEXTURE_BUFFER 0x8C2A +#define GL_MAX_TEXTURE_BUFFER_SIZE 0x8C2B +#define GL_TEXTURE_BINDING_BUFFER 0x8C2C +#define GL_TEXTURE_BUFFER_DATA_STORE_BINDING 0x8C2D +#define GL_TEXTURE_RECTANGLE 0x84F5 +#define GL_TEXTURE_BINDING_RECTANGLE 0x84F6 +#define GL_PROXY_TEXTURE_RECTANGLE 0x84F7 +#define GL_MAX_RECTANGLE_TEXTURE_SIZE 0x84F8 +#define GL_R8_SNORM 0x8F94 +#define GL_RG8_SNORM 0x8F95 +#define GL_RGB8_SNORM 0x8F96 +#define GL_RGBA8_SNORM 0x8F97 +#define GL_R16_SNORM 0x8F98 +#define GL_RG16_SNORM 0x8F99 +#define GL_RGB16_SNORM 0x8F9A +#define GL_RGBA16_SNORM 0x8F9B +#define GL_SIGNED_NORMALIZED 0x8F9C +#define GL_PRIMITIVE_RESTART 0x8F9D +#define GL_PRIMITIVE_RESTART_INDEX 0x8F9E +#define GL_COPY_READ_BUFFER 0x8F36 +#define GL_COPY_WRITE_BUFFER 0x8F37 +#define GL_UNIFORM_BUFFER 0x8A11 +#define GL_UNIFORM_BUFFER_BINDING 0x8A28 +#define GL_UNIFORM_BUFFER_START 0x8A29 +#define GL_UNIFORM_BUFFER_SIZE 0x8A2A +#define GL_MAX_VERTEX_UNIFORM_BLOCKS 0x8A2B +#define GL_MAX_GEOMETRY_UNIFORM_BLOCKS 0x8A2C +#define GL_MAX_FRAGMENT_UNIFORM_BLOCKS 0x8A2D +#define GL_MAX_COMBINED_UNIFORM_BLOCKS 0x8A2E +#define GL_MAX_UNIFORM_BUFFER_BINDINGS 0x8A2F +#define GL_MAX_UNIFORM_BLOCK_SIZE 0x8A30 +#define GL_MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS 0x8A31 +#define GL_MAX_COMBINED_GEOMETRY_UNIFORM_COMPONENTS 0x8A32 +#define GL_MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS 0x8A33 +#define GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT 0x8A34 +#define GL_ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH 0x8A35 +#define GL_ACTIVE_UNIFORM_BLOCKS 0x8A36 +#define GL_UNIFORM_TYPE 0x8A37 +#define GL_UNIFORM_SIZE 0x8A38 +#define GL_UNIFORM_NAME_LENGTH 0x8A39 +#define GL_UNIFORM_BLOCK_INDEX 0x8A3A +#define GL_UNIFORM_OFFSET 0x8A3B +#define GL_UNIFORM_ARRAY_STRIDE 0x8A3C +#define GL_UNIFORM_MATRIX_STRIDE 0x8A3D +#define GL_UNIFORM_IS_ROW_MAJOR 0x8A3E +#define GL_UNIFORM_BLOCK_BINDING 0x8A3F +#define GL_UNIFORM_BLOCK_DATA_SIZE 0x8A40 +#define GL_UNIFORM_BLOCK_NAME_LENGTH 0x8A41 +#define GL_UNIFORM_BLOCK_ACTIVE_UNIFORMS 0x8A42 +#define GL_UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES 0x8A43 +#define GL_UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER 0x8A44 +#define GL_UNIFORM_BLOCK_REFERENCED_BY_GEOMETRY_SHADER 0x8A45 +#define GL_UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER 0x8A46 +#define GL_INVALID_INDEX 0xFFFFFFFFu +typedef void (APIENTRYP PFNGLDRAWARRAYSINSTANCEDPROC) (GLenum mode, GLint first, GLsizei count, GLsizei instancecount); +typedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount); +typedef void (APIENTRYP PFNGLTEXBUFFERPROC) (GLenum target, GLenum internalformat, GLuint buffer); +typedef void (APIENTRYP PFNGLPRIMITIVERESTARTINDEXPROC) (GLuint index); +typedef void (APIENTRYP PFNGLCOPYBUFFERSUBDATAPROC) (GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); +typedef void (APIENTRYP PFNGLGETUNIFORMINDICESPROC) (GLuint program, GLsizei uniformCount, const GLchar *const*uniformNames, GLuint *uniformIndices); +typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMSIVPROC) (GLuint program, GLsizei uniformCount, const GLuint *uniformIndices, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMNAMEPROC) (GLuint program, GLuint uniformIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformName); +typedef GLuint (APIENTRYP PFNGLGETUNIFORMBLOCKINDEXPROC) (GLuint program, const GLchar *uniformBlockName); +typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMBLOCKIVPROC) (GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMBLOCKNAMEPROC) (GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformBlockName); +typedef void (APIENTRYP PFNGLUNIFORMBLOCKBINDINGPROC) (GLuint program, GLuint uniformBlockIndex, GLuint uniformBlockBinding); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glDrawArraysInstanced (GLenum mode, GLint first, GLsizei count, GLsizei instancecount); +GLAPI void APIENTRY glDrawElementsInstanced (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount); +GLAPI void APIENTRY glTexBuffer (GLenum target, GLenum internalformat, GLuint buffer); +GLAPI void APIENTRY glPrimitiveRestartIndex (GLuint index); +GLAPI void APIENTRY glCopyBufferSubData (GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); +GLAPI void APIENTRY glGetUniformIndices (GLuint program, GLsizei uniformCount, const GLchar *const*uniformNames, GLuint *uniformIndices); +GLAPI void APIENTRY glGetActiveUniformsiv (GLuint program, GLsizei uniformCount, const GLuint *uniformIndices, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetActiveUniformName (GLuint program, GLuint uniformIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformName); +GLAPI GLuint APIENTRY glGetUniformBlockIndex (GLuint program, const GLchar *uniformBlockName); +GLAPI void APIENTRY glGetActiveUniformBlockiv (GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetActiveUniformBlockName (GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformBlockName); +GLAPI void APIENTRY glUniformBlockBinding (GLuint program, GLuint uniformBlockIndex, GLuint uniformBlockBinding); +#endif +#endif /* GL_VERSION_3_1 */ + +#ifndef GL_VERSION_3_2 +#define GL_VERSION_3_2 1 +typedef struct __GLsync *GLsync; +typedef khronos_uint64_t GLuint64; +typedef khronos_int64_t GLint64; +#define GL_CONTEXT_CORE_PROFILE_BIT 0x00000001 +#define GL_CONTEXT_COMPATIBILITY_PROFILE_BIT 0x00000002 +#define GL_LINES_ADJACENCY 0x000A +#define GL_LINE_STRIP_ADJACENCY 0x000B +#define GL_TRIANGLES_ADJACENCY 0x000C +#define GL_TRIANGLE_STRIP_ADJACENCY 0x000D +#define GL_PROGRAM_POINT_SIZE 0x8642 +#define GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS 0x8C29 +#define GL_FRAMEBUFFER_ATTACHMENT_LAYERED 0x8DA7 +#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS 0x8DA8 +#define GL_GEOMETRY_SHADER 0x8DD9 +#define GL_GEOMETRY_VERTICES_OUT 0x8916 +#define GL_GEOMETRY_INPUT_TYPE 0x8917 +#define GL_GEOMETRY_OUTPUT_TYPE 0x8918 +#define GL_MAX_GEOMETRY_UNIFORM_COMPONENTS 0x8DDF +#define GL_MAX_GEOMETRY_OUTPUT_VERTICES 0x8DE0 +#define GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS 0x8DE1 +#define GL_MAX_VERTEX_OUTPUT_COMPONENTS 0x9122 +#define GL_MAX_GEOMETRY_INPUT_COMPONENTS 0x9123 +#define GL_MAX_GEOMETRY_OUTPUT_COMPONENTS 0x9124 +#define GL_MAX_FRAGMENT_INPUT_COMPONENTS 0x9125 +#define GL_CONTEXT_PROFILE_MASK 0x9126 +#define GL_DEPTH_CLAMP 0x864F +#define GL_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION 0x8E4C +#define GL_FIRST_VERTEX_CONVENTION 0x8E4D +#define GL_LAST_VERTEX_CONVENTION 0x8E4E +#define GL_PROVOKING_VERTEX 0x8E4F +#define GL_TEXTURE_CUBE_MAP_SEAMLESS 0x884F +#define GL_MAX_SERVER_WAIT_TIMEOUT 0x9111 +#define GL_OBJECT_TYPE 0x9112 +#define GL_SYNC_CONDITION 0x9113 +#define GL_SYNC_STATUS 0x9114 +#define GL_SYNC_FLAGS 0x9115 +#define GL_SYNC_FENCE 0x9116 +#define GL_SYNC_GPU_COMMANDS_COMPLETE 0x9117 +#define GL_UNSIGNALED 0x9118 +#define GL_SIGNALED 0x9119 +#define GL_ALREADY_SIGNALED 0x911A +#define GL_TIMEOUT_EXPIRED 0x911B +#define GL_CONDITION_SATISFIED 0x911C +#define GL_WAIT_FAILED 0x911D +#define GL_TIMEOUT_IGNORED 0xFFFFFFFFFFFFFFFFull +#define GL_SYNC_FLUSH_COMMANDS_BIT 0x00000001 +#define GL_SAMPLE_POSITION 0x8E50 +#define GL_SAMPLE_MASK 0x8E51 +#define GL_SAMPLE_MASK_VALUE 0x8E52 +#define GL_MAX_SAMPLE_MASK_WORDS 0x8E59 +#define GL_TEXTURE_2D_MULTISAMPLE 0x9100 +#define GL_PROXY_TEXTURE_2D_MULTISAMPLE 0x9101 +#define GL_TEXTURE_2D_MULTISAMPLE_ARRAY 0x9102 +#define GL_PROXY_TEXTURE_2D_MULTISAMPLE_ARRAY 0x9103 +#define GL_TEXTURE_BINDING_2D_MULTISAMPLE 0x9104 +#define GL_TEXTURE_BINDING_2D_MULTISAMPLE_ARRAY 0x9105 +#define GL_TEXTURE_SAMPLES 0x9106 +#define GL_TEXTURE_FIXED_SAMPLE_LOCATIONS 0x9107 +#define GL_SAMPLER_2D_MULTISAMPLE 0x9108 +#define GL_INT_SAMPLER_2D_MULTISAMPLE 0x9109 +#define GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE 0x910A +#define GL_SAMPLER_2D_MULTISAMPLE_ARRAY 0x910B +#define GL_INT_SAMPLER_2D_MULTISAMPLE_ARRAY 0x910C +#define GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE_ARRAY 0x910D +#define GL_MAX_COLOR_TEXTURE_SAMPLES 0x910E +#define GL_MAX_DEPTH_TEXTURE_SAMPLES 0x910F +#define GL_MAX_INTEGER_SAMPLES 0x9110 +typedef void (APIENTRYP PFNGLDRAWELEMENTSBASEVERTEXPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLint basevertex); +typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTSBASEVERTEXPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices, GLint basevertex); +typedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLint basevertex); +typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSBASEVERTEXPROC) (GLenum mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei drawcount, const GLint *basevertex); +typedef void (APIENTRYP PFNGLPROVOKINGVERTEXPROC) (GLenum mode); +typedef GLsync (APIENTRYP PFNGLFENCESYNCPROC) (GLenum condition, GLbitfield flags); +typedef GLboolean (APIENTRYP PFNGLISSYNCPROC) (GLsync sync); +typedef void (APIENTRYP PFNGLDELETESYNCPROC) (GLsync sync); +typedef GLenum (APIENTRYP PFNGLCLIENTWAITSYNCPROC) (GLsync sync, GLbitfield flags, GLuint64 timeout); +typedef void (APIENTRYP PFNGLWAITSYNCPROC) (GLsync sync, GLbitfield flags, GLuint64 timeout); +typedef void (APIENTRYP PFNGLGETINTEGER64VPROC) (GLenum pname, GLint64 *data); +typedef void (APIENTRYP PFNGLGETSYNCIVPROC) (GLsync sync, GLenum pname, GLsizei count, GLsizei *length, GLint *values); +typedef void (APIENTRYP PFNGLGETINTEGER64I_VPROC) (GLenum target, GLuint index, GLint64 *data); +typedef void (APIENTRYP PFNGLGETBUFFERPARAMETERI64VPROC) (GLenum target, GLenum pname, GLint64 *params); +typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTUREPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level); +typedef void (APIENTRYP PFNGLTEXIMAGE2DMULTISAMPLEPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); +typedef void (APIENTRYP PFNGLTEXIMAGE3DMULTISAMPLEPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); +typedef void (APIENTRYP PFNGLGETMULTISAMPLEFVPROC) (GLenum pname, GLuint index, GLfloat *val); +typedef void (APIENTRYP PFNGLSAMPLEMASKIPROC) (GLuint maskNumber, GLbitfield mask); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glDrawElementsBaseVertex (GLenum mode, GLsizei count, GLenum type, const void *indices, GLint basevertex); +GLAPI void APIENTRY glDrawRangeElementsBaseVertex (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices, GLint basevertex); +GLAPI void APIENTRY glDrawElementsInstancedBaseVertex (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLint basevertex); +GLAPI void APIENTRY glMultiDrawElementsBaseVertex (GLenum mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei drawcount, const GLint *basevertex); +GLAPI void APIENTRY glProvokingVertex (GLenum mode); +GLAPI GLsync APIENTRY glFenceSync (GLenum condition, GLbitfield flags); +GLAPI GLboolean APIENTRY glIsSync (GLsync sync); +GLAPI void APIENTRY glDeleteSync (GLsync sync); +GLAPI GLenum APIENTRY glClientWaitSync (GLsync sync, GLbitfield flags, GLuint64 timeout); +GLAPI void APIENTRY glWaitSync (GLsync sync, GLbitfield flags, GLuint64 timeout); +GLAPI void APIENTRY glGetInteger64v (GLenum pname, GLint64 *data); +GLAPI void APIENTRY glGetSynciv (GLsync sync, GLenum pname, GLsizei count, GLsizei *length, GLint *values); +GLAPI void APIENTRY glGetInteger64i_v (GLenum target, GLuint index, GLint64 *data); +GLAPI void APIENTRY glGetBufferParameteri64v (GLenum target, GLenum pname, GLint64 *params); +GLAPI void APIENTRY glFramebufferTexture (GLenum target, GLenum attachment, GLuint texture, GLint level); +GLAPI void APIENTRY glTexImage2DMultisample (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); +GLAPI void APIENTRY glTexImage3DMultisample (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); +GLAPI void APIENTRY glGetMultisamplefv (GLenum pname, GLuint index, GLfloat *val); +GLAPI void APIENTRY glSampleMaski (GLuint maskNumber, GLbitfield mask); +#endif +#endif /* GL_VERSION_3_2 */ + +#ifndef GL_VERSION_3_3 +#define GL_VERSION_3_3 1 +#define GL_VERTEX_ATTRIB_ARRAY_DIVISOR 0x88FE +#define GL_SRC1_COLOR 0x88F9 +#define GL_ONE_MINUS_SRC1_COLOR 0x88FA +#define GL_ONE_MINUS_SRC1_ALPHA 0x88FB +#define GL_MAX_DUAL_SOURCE_DRAW_BUFFERS 0x88FC +#define GL_ANY_SAMPLES_PASSED 0x8C2F +#define GL_SAMPLER_BINDING 0x8919 +#define GL_RGB10_A2UI 0x906F +#define GL_TEXTURE_SWIZZLE_R 0x8E42 +#define GL_TEXTURE_SWIZZLE_G 0x8E43 +#define GL_TEXTURE_SWIZZLE_B 0x8E44 +#define GL_TEXTURE_SWIZZLE_A 0x8E45 +#define GL_TEXTURE_SWIZZLE_RGBA 0x8E46 +#define GL_TIME_ELAPSED 0x88BF +#define GL_TIMESTAMP 0x8E28 +#define GL_INT_2_10_10_10_REV 0x8D9F +typedef void (APIENTRYP PFNGLBINDFRAGDATALOCATIONINDEXEDPROC) (GLuint program, GLuint colorNumber, GLuint index, const GLchar *name); +typedef GLint (APIENTRYP PFNGLGETFRAGDATAINDEXPROC) (GLuint program, const GLchar *name); +typedef void (APIENTRYP PFNGLGENSAMPLERSPROC) (GLsizei count, GLuint *samplers); +typedef void (APIENTRYP PFNGLDELETESAMPLERSPROC) (GLsizei count, const GLuint *samplers); +typedef GLboolean (APIENTRYP PFNGLISSAMPLERPROC) (GLuint sampler); +typedef void (APIENTRYP PFNGLBINDSAMPLERPROC) (GLuint unit, GLuint sampler); +typedef void (APIENTRYP PFNGLSAMPLERPARAMETERIPROC) (GLuint sampler, GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLSAMPLERPARAMETERIVPROC) (GLuint sampler, GLenum pname, const GLint *param); +typedef void (APIENTRYP PFNGLSAMPLERPARAMETERFPROC) (GLuint sampler, GLenum pname, GLfloat param); +typedef void (APIENTRYP PFNGLSAMPLERPARAMETERFVPROC) (GLuint sampler, GLenum pname, const GLfloat *param); +typedef void (APIENTRYP PFNGLSAMPLERPARAMETERIIVPROC) (GLuint sampler, GLenum pname, const GLint *param); +typedef void (APIENTRYP PFNGLSAMPLERPARAMETERIUIVPROC) (GLuint sampler, GLenum pname, const GLuint *param); +typedef void (APIENTRYP PFNGLGETSAMPLERPARAMETERIVPROC) (GLuint sampler, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETSAMPLERPARAMETERIIVPROC) (GLuint sampler, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETSAMPLERPARAMETERFVPROC) (GLuint sampler, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETSAMPLERPARAMETERIUIVPROC) (GLuint sampler, GLenum pname, GLuint *params); +typedef void (APIENTRYP PFNGLQUERYCOUNTERPROC) (GLuint id, GLenum target); +typedef void (APIENTRYP PFNGLGETQUERYOBJECTI64VPROC) (GLuint id, GLenum pname, GLint64 *params); +typedef void (APIENTRYP PFNGLGETQUERYOBJECTUI64VPROC) (GLuint id, GLenum pname, GLuint64 *params); +typedef void (APIENTRYP PFNGLVERTEXATTRIBDIVISORPROC) (GLuint index, GLuint divisor); +typedef void (APIENTRYP PFNGLVERTEXATTRIBP1UIPROC) (GLuint index, GLenum type, GLboolean normalized, GLuint value); +typedef void (APIENTRYP PFNGLVERTEXATTRIBP1UIVPROC) (GLuint index, GLenum type, GLboolean normalized, const GLuint *value); +typedef void (APIENTRYP PFNGLVERTEXATTRIBP2UIPROC) (GLuint index, GLenum type, GLboolean normalized, GLuint value); +typedef void (APIENTRYP PFNGLVERTEXATTRIBP2UIVPROC) (GLuint index, GLenum type, GLboolean normalized, const GLuint *value); +typedef void (APIENTRYP PFNGLVERTEXATTRIBP3UIPROC) (GLuint index, GLenum type, GLboolean normalized, GLuint value); +typedef void (APIENTRYP PFNGLVERTEXATTRIBP3UIVPROC) (GLuint index, GLenum type, GLboolean normalized, const GLuint *value); +typedef void (APIENTRYP PFNGLVERTEXATTRIBP4UIPROC) (GLuint index, GLenum type, GLboolean normalized, GLuint value); +typedef void (APIENTRYP PFNGLVERTEXATTRIBP4UIVPROC) (GLuint index, GLenum type, GLboolean normalized, const GLuint *value); +typedef void (APIENTRYP PFNGLVERTEXP2UIPROC) (GLenum type, GLuint value); +typedef void (APIENTRYP PFNGLVERTEXP2UIVPROC) (GLenum type, const GLuint *value); +typedef void (APIENTRYP PFNGLVERTEXP3UIPROC) (GLenum type, GLuint value); +typedef void (APIENTRYP PFNGLVERTEXP3UIVPROC) (GLenum type, const GLuint *value); +typedef void (APIENTRYP PFNGLVERTEXP4UIPROC) (GLenum type, GLuint value); +typedef void (APIENTRYP PFNGLVERTEXP4UIVPROC) (GLenum type, const GLuint *value); +typedef void (APIENTRYP PFNGLTEXCOORDP1UIPROC) (GLenum type, GLuint coords); +typedef void (APIENTRYP PFNGLTEXCOORDP1UIVPROC) (GLenum type, const GLuint *coords); +typedef void (APIENTRYP PFNGLTEXCOORDP2UIPROC) (GLenum type, GLuint coords); +typedef void (APIENTRYP PFNGLTEXCOORDP2UIVPROC) (GLenum type, const GLuint *coords); +typedef void (APIENTRYP PFNGLTEXCOORDP3UIPROC) (GLenum type, GLuint coords); +typedef void (APIENTRYP PFNGLTEXCOORDP3UIVPROC) (GLenum type, const GLuint *coords); +typedef void (APIENTRYP PFNGLTEXCOORDP4UIPROC) (GLenum type, GLuint coords); +typedef void (APIENTRYP PFNGLTEXCOORDP4UIVPROC) (GLenum type, const GLuint *coords); +typedef void (APIENTRYP PFNGLMULTITEXCOORDP1UIPROC) (GLenum texture, GLenum type, GLuint coords); +typedef void (APIENTRYP PFNGLMULTITEXCOORDP1UIVPROC) (GLenum texture, GLenum type, const GLuint *coords); +typedef void (APIENTRYP PFNGLMULTITEXCOORDP2UIPROC) (GLenum texture, GLenum type, GLuint coords); +typedef void (APIENTRYP PFNGLMULTITEXCOORDP2UIVPROC) (GLenum texture, GLenum type, const GLuint *coords); +typedef void (APIENTRYP PFNGLMULTITEXCOORDP3UIPROC) (GLenum texture, GLenum type, GLuint coords); +typedef void (APIENTRYP PFNGLMULTITEXCOORDP3UIVPROC) (GLenum texture, GLenum type, const GLuint *coords); +typedef void (APIENTRYP PFNGLMULTITEXCOORDP4UIPROC) (GLenum texture, GLenum type, GLuint coords); +typedef void (APIENTRYP PFNGLMULTITEXCOORDP4UIVPROC) (GLenum texture, GLenum type, const GLuint *coords); +typedef void (APIENTRYP PFNGLNORMALP3UIPROC) (GLenum type, GLuint coords); +typedef void (APIENTRYP PFNGLNORMALP3UIVPROC) (GLenum type, const GLuint *coords); +typedef void (APIENTRYP PFNGLCOLORP3UIPROC) (GLenum type, GLuint color); +typedef void (APIENTRYP PFNGLCOLORP3UIVPROC) (GLenum type, const GLuint *color); +typedef void (APIENTRYP PFNGLCOLORP4UIPROC) (GLenum type, GLuint color); +typedef void (APIENTRYP PFNGLCOLORP4UIVPROC) (GLenum type, const GLuint *color); +typedef void (APIENTRYP PFNGLSECONDARYCOLORP3UIPROC) (GLenum type, GLuint color); +typedef void (APIENTRYP PFNGLSECONDARYCOLORP3UIVPROC) (GLenum type, const GLuint *color); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBindFragDataLocationIndexed (GLuint program, GLuint colorNumber, GLuint index, const GLchar *name); +GLAPI GLint APIENTRY glGetFragDataIndex (GLuint program, const GLchar *name); +GLAPI void APIENTRY glGenSamplers (GLsizei count, GLuint *samplers); +GLAPI void APIENTRY glDeleteSamplers (GLsizei count, const GLuint *samplers); +GLAPI GLboolean APIENTRY glIsSampler (GLuint sampler); +GLAPI void APIENTRY glBindSampler (GLuint unit, GLuint sampler); +GLAPI void APIENTRY glSamplerParameteri (GLuint sampler, GLenum pname, GLint param); +GLAPI void APIENTRY glSamplerParameteriv (GLuint sampler, GLenum pname, const GLint *param); +GLAPI void APIENTRY glSamplerParameterf (GLuint sampler, GLenum pname, GLfloat param); +GLAPI void APIENTRY glSamplerParameterfv (GLuint sampler, GLenum pname, const GLfloat *param); +GLAPI void APIENTRY glSamplerParameterIiv (GLuint sampler, GLenum pname, const GLint *param); +GLAPI void APIENTRY glSamplerParameterIuiv (GLuint sampler, GLenum pname, const GLuint *param); +GLAPI void APIENTRY glGetSamplerParameteriv (GLuint sampler, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetSamplerParameterIiv (GLuint sampler, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetSamplerParameterfv (GLuint sampler, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetSamplerParameterIuiv (GLuint sampler, GLenum pname, GLuint *params); +GLAPI void APIENTRY glQueryCounter (GLuint id, GLenum target); +GLAPI void APIENTRY glGetQueryObjecti64v (GLuint id, GLenum pname, GLint64 *params); +GLAPI void APIENTRY glGetQueryObjectui64v (GLuint id, GLenum pname, GLuint64 *params); +GLAPI void APIENTRY glVertexAttribDivisor (GLuint index, GLuint divisor); +GLAPI void APIENTRY glVertexAttribP1ui (GLuint index, GLenum type, GLboolean normalized, GLuint value); +GLAPI void APIENTRY glVertexAttribP1uiv (GLuint index, GLenum type, GLboolean normalized, const GLuint *value); +GLAPI void APIENTRY glVertexAttribP2ui (GLuint index, GLenum type, GLboolean normalized, GLuint value); +GLAPI void APIENTRY glVertexAttribP2uiv (GLuint index, GLenum type, GLboolean normalized, const GLuint *value); +GLAPI void APIENTRY glVertexAttribP3ui (GLuint index, GLenum type, GLboolean normalized, GLuint value); +GLAPI void APIENTRY glVertexAttribP3uiv (GLuint index, GLenum type, GLboolean normalized, const GLuint *value); +GLAPI void APIENTRY glVertexAttribP4ui (GLuint index, GLenum type, GLboolean normalized, GLuint value); +GLAPI void APIENTRY glVertexAttribP4uiv (GLuint index, GLenum type, GLboolean normalized, const GLuint *value); +GLAPI void APIENTRY glVertexP2ui (GLenum type, GLuint value); +GLAPI void APIENTRY glVertexP2uiv (GLenum type, const GLuint *value); +GLAPI void APIENTRY glVertexP3ui (GLenum type, GLuint value); +GLAPI void APIENTRY glVertexP3uiv (GLenum type, const GLuint *value); +GLAPI void APIENTRY glVertexP4ui (GLenum type, GLuint value); +GLAPI void APIENTRY glVertexP4uiv (GLenum type, const GLuint *value); +GLAPI void APIENTRY glTexCoordP1ui (GLenum type, GLuint coords); +GLAPI void APIENTRY glTexCoordP1uiv (GLenum type, const GLuint *coords); +GLAPI void APIENTRY glTexCoordP2ui (GLenum type, GLuint coords); +GLAPI void APIENTRY glTexCoordP2uiv (GLenum type, const GLuint *coords); +GLAPI void APIENTRY glTexCoordP3ui (GLenum type, GLuint coords); +GLAPI void APIENTRY glTexCoordP3uiv (GLenum type, const GLuint *coords); +GLAPI void APIENTRY glTexCoordP4ui (GLenum type, GLuint coords); +GLAPI void APIENTRY glTexCoordP4uiv (GLenum type, const GLuint *coords); +GLAPI void APIENTRY glMultiTexCoordP1ui (GLenum texture, GLenum type, GLuint coords); +GLAPI void APIENTRY glMultiTexCoordP1uiv (GLenum texture, GLenum type, const GLuint *coords); +GLAPI void APIENTRY glMultiTexCoordP2ui (GLenum texture, GLenum type, GLuint coords); +GLAPI void APIENTRY glMultiTexCoordP2uiv (GLenum texture, GLenum type, const GLuint *coords); +GLAPI void APIENTRY glMultiTexCoordP3ui (GLenum texture, GLenum type, GLuint coords); +GLAPI void APIENTRY glMultiTexCoordP3uiv (GLenum texture, GLenum type, const GLuint *coords); +GLAPI void APIENTRY glMultiTexCoordP4ui (GLenum texture, GLenum type, GLuint coords); +GLAPI void APIENTRY glMultiTexCoordP4uiv (GLenum texture, GLenum type, const GLuint *coords); +GLAPI void APIENTRY glNormalP3ui (GLenum type, GLuint coords); +GLAPI void APIENTRY glNormalP3uiv (GLenum type, const GLuint *coords); +GLAPI void APIENTRY glColorP3ui (GLenum type, GLuint color); +GLAPI void APIENTRY glColorP3uiv (GLenum type, const GLuint *color); +GLAPI void APIENTRY glColorP4ui (GLenum type, GLuint color); +GLAPI void APIENTRY glColorP4uiv (GLenum type, const GLuint *color); +GLAPI void APIENTRY glSecondaryColorP3ui (GLenum type, GLuint color); +GLAPI void APIENTRY glSecondaryColorP3uiv (GLenum type, const GLuint *color); +#endif +#endif /* GL_VERSION_3_3 */ + +#ifndef GL_VERSION_4_0 +#define GL_VERSION_4_0 1 +#define GL_SAMPLE_SHADING 0x8C36 +#define GL_MIN_SAMPLE_SHADING_VALUE 0x8C37 +#define GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET 0x8E5E +#define GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET 0x8E5F +#define GL_TEXTURE_CUBE_MAP_ARRAY 0x9009 +#define GL_TEXTURE_BINDING_CUBE_MAP_ARRAY 0x900A +#define GL_PROXY_TEXTURE_CUBE_MAP_ARRAY 0x900B +#define GL_SAMPLER_CUBE_MAP_ARRAY 0x900C +#define GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW 0x900D +#define GL_INT_SAMPLER_CUBE_MAP_ARRAY 0x900E +#define GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY 0x900F +#define GL_DRAW_INDIRECT_BUFFER 0x8F3F +#define GL_DRAW_INDIRECT_BUFFER_BINDING 0x8F43 +#define GL_GEOMETRY_SHADER_INVOCATIONS 0x887F +#define GL_MAX_GEOMETRY_SHADER_INVOCATIONS 0x8E5A +#define GL_MIN_FRAGMENT_INTERPOLATION_OFFSET 0x8E5B +#define GL_MAX_FRAGMENT_INTERPOLATION_OFFSET 0x8E5C +#define GL_FRAGMENT_INTERPOLATION_OFFSET_BITS 0x8E5D +#define GL_MAX_VERTEX_STREAMS 0x8E71 +#define GL_DOUBLE_VEC2 0x8FFC +#define GL_DOUBLE_VEC3 0x8FFD +#define GL_DOUBLE_VEC4 0x8FFE +#define GL_DOUBLE_MAT2 0x8F46 +#define GL_DOUBLE_MAT3 0x8F47 +#define GL_DOUBLE_MAT4 0x8F48 +#define GL_DOUBLE_MAT2x3 0x8F49 +#define GL_DOUBLE_MAT2x4 0x8F4A +#define GL_DOUBLE_MAT3x2 0x8F4B +#define GL_DOUBLE_MAT3x4 0x8F4C +#define GL_DOUBLE_MAT4x2 0x8F4D +#define GL_DOUBLE_MAT4x3 0x8F4E +#define GL_ACTIVE_SUBROUTINES 0x8DE5 +#define GL_ACTIVE_SUBROUTINE_UNIFORMS 0x8DE6 +#define GL_ACTIVE_SUBROUTINE_UNIFORM_LOCATIONS 0x8E47 +#define GL_ACTIVE_SUBROUTINE_MAX_LENGTH 0x8E48 +#define GL_ACTIVE_SUBROUTINE_UNIFORM_MAX_LENGTH 0x8E49 +#define GL_MAX_SUBROUTINES 0x8DE7 +#define GL_MAX_SUBROUTINE_UNIFORM_LOCATIONS 0x8DE8 +#define GL_NUM_COMPATIBLE_SUBROUTINES 0x8E4A +#define GL_COMPATIBLE_SUBROUTINES 0x8E4B +#define GL_PATCHES 0x000E +#define GL_PATCH_VERTICES 0x8E72 +#define GL_PATCH_DEFAULT_INNER_LEVEL 0x8E73 +#define GL_PATCH_DEFAULT_OUTER_LEVEL 0x8E74 +#define GL_TESS_CONTROL_OUTPUT_VERTICES 0x8E75 +#define GL_TESS_GEN_MODE 0x8E76 +#define GL_TESS_GEN_SPACING 0x8E77 +#define GL_TESS_GEN_VERTEX_ORDER 0x8E78 +#define GL_TESS_GEN_POINT_MODE 0x8E79 +#define GL_ISOLINES 0x8E7A +#define GL_FRACTIONAL_ODD 0x8E7B +#define GL_FRACTIONAL_EVEN 0x8E7C +#define GL_MAX_PATCH_VERTICES 0x8E7D +#define GL_MAX_TESS_GEN_LEVEL 0x8E7E +#define GL_MAX_TESS_CONTROL_UNIFORM_COMPONENTS 0x8E7F +#define GL_MAX_TESS_EVALUATION_UNIFORM_COMPONENTS 0x8E80 +#define GL_MAX_TESS_CONTROL_TEXTURE_IMAGE_UNITS 0x8E81 +#define GL_MAX_TESS_EVALUATION_TEXTURE_IMAGE_UNITS 0x8E82 +#define GL_MAX_TESS_CONTROL_OUTPUT_COMPONENTS 0x8E83 +#define GL_MAX_TESS_PATCH_COMPONENTS 0x8E84 +#define GL_MAX_TESS_CONTROL_TOTAL_OUTPUT_COMPONENTS 0x8E85 +#define GL_MAX_TESS_EVALUATION_OUTPUT_COMPONENTS 0x8E86 +#define GL_MAX_TESS_CONTROL_UNIFORM_BLOCKS 0x8E89 +#define GL_MAX_TESS_EVALUATION_UNIFORM_BLOCKS 0x8E8A +#define GL_MAX_TESS_CONTROL_INPUT_COMPONENTS 0x886C +#define GL_MAX_TESS_EVALUATION_INPUT_COMPONENTS 0x886D +#define GL_MAX_COMBINED_TESS_CONTROL_UNIFORM_COMPONENTS 0x8E1E +#define GL_MAX_COMBINED_TESS_EVALUATION_UNIFORM_COMPONENTS 0x8E1F +#define GL_UNIFORM_BLOCK_REFERENCED_BY_TESS_CONTROL_SHADER 0x84F0 +#define GL_UNIFORM_BLOCK_REFERENCED_BY_TESS_EVALUATION_SHADER 0x84F1 +#define GL_TESS_EVALUATION_SHADER 0x8E87 +#define GL_TESS_CONTROL_SHADER 0x8E88 +#define GL_TRANSFORM_FEEDBACK 0x8E22 +#define GL_TRANSFORM_FEEDBACK_BUFFER_PAUSED 0x8E23 +#define GL_TRANSFORM_FEEDBACK_BUFFER_ACTIVE 0x8E24 +#define GL_TRANSFORM_FEEDBACK_BINDING 0x8E25 +#define GL_MAX_TRANSFORM_FEEDBACK_BUFFERS 0x8E70 +typedef void (APIENTRYP PFNGLMINSAMPLESHADINGPROC) (GLfloat value); +typedef void (APIENTRYP PFNGLBLENDEQUATIONIPROC) (GLuint buf, GLenum mode); +typedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEIPROC) (GLuint buf, GLenum modeRGB, GLenum modeAlpha); +typedef void (APIENTRYP PFNGLBLENDFUNCIPROC) (GLuint buf, GLenum src, GLenum dst); +typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEIPROC) (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); +typedef void (APIENTRYP PFNGLDRAWARRAYSINDIRECTPROC) (GLenum mode, const void *indirect); +typedef void (APIENTRYP PFNGLDRAWELEMENTSINDIRECTPROC) (GLenum mode, GLenum type, const void *indirect); +typedef void (APIENTRYP PFNGLUNIFORM1DPROC) (GLint location, GLdouble x); +typedef void (APIENTRYP PFNGLUNIFORM2DPROC) (GLint location, GLdouble x, GLdouble y); +typedef void (APIENTRYP PFNGLUNIFORM3DPROC) (GLint location, GLdouble x, GLdouble y, GLdouble z); +typedef void (APIENTRYP PFNGLUNIFORM4DPROC) (GLint location, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (APIENTRYP PFNGLUNIFORM1DVPROC) (GLint location, GLsizei count, const GLdouble *value); +typedef void (APIENTRYP PFNGLUNIFORM2DVPROC) (GLint location, GLsizei count, const GLdouble *value); +typedef void (APIENTRYP PFNGLUNIFORM3DVPROC) (GLint location, GLsizei count, const GLdouble *value); +typedef void (APIENTRYP PFNGLUNIFORM4DVPROC) (GLint location, GLsizei count, const GLdouble *value); +typedef void (APIENTRYP PFNGLUNIFORMMATRIX2DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLUNIFORMMATRIX3DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLUNIFORMMATRIX4DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLUNIFORMMATRIX2X3DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLUNIFORMMATRIX2X4DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLUNIFORMMATRIX3X2DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLUNIFORMMATRIX3X4DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLUNIFORMMATRIX4X2DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLUNIFORMMATRIX4X3DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLGETUNIFORMDVPROC) (GLuint program, GLint location, GLdouble *params); +typedef GLint (APIENTRYP PFNGLGETSUBROUTINEUNIFORMLOCATIONPROC) (GLuint program, GLenum shadertype, const GLchar *name); +typedef GLuint (APIENTRYP PFNGLGETSUBROUTINEINDEXPROC) (GLuint program, GLenum shadertype, const GLchar *name); +typedef void (APIENTRYP PFNGLGETACTIVESUBROUTINEUNIFORMIVPROC) (GLuint program, GLenum shadertype, GLuint index, GLenum pname, GLint *values); +typedef void (APIENTRYP PFNGLGETACTIVESUBROUTINEUNIFORMNAMEPROC) (GLuint program, GLenum shadertype, GLuint index, GLsizei bufSize, GLsizei *length, GLchar *name); +typedef void (APIENTRYP PFNGLGETACTIVESUBROUTINENAMEPROC) (GLuint program, GLenum shadertype, GLuint index, GLsizei bufSize, GLsizei *length, GLchar *name); +typedef void (APIENTRYP PFNGLUNIFORMSUBROUTINESUIVPROC) (GLenum shadertype, GLsizei count, const GLuint *indices); +typedef void (APIENTRYP PFNGLGETUNIFORMSUBROUTINEUIVPROC) (GLenum shadertype, GLint location, GLuint *params); +typedef void (APIENTRYP PFNGLGETPROGRAMSTAGEIVPROC) (GLuint program, GLenum shadertype, GLenum pname, GLint *values); +typedef void (APIENTRYP PFNGLPATCHPARAMETERIPROC) (GLenum pname, GLint value); +typedef void (APIENTRYP PFNGLPATCHPARAMETERFVPROC) (GLenum pname, const GLfloat *values); +typedef void (APIENTRYP PFNGLBINDTRANSFORMFEEDBACKPROC) (GLenum target, GLuint id); +typedef void (APIENTRYP PFNGLDELETETRANSFORMFEEDBACKSPROC) (GLsizei n, const GLuint *ids); +typedef void (APIENTRYP PFNGLGENTRANSFORMFEEDBACKSPROC) (GLsizei n, GLuint *ids); +typedef GLboolean (APIENTRYP PFNGLISTRANSFORMFEEDBACKPROC) (GLuint id); +typedef void (APIENTRYP PFNGLPAUSETRANSFORMFEEDBACKPROC) (void); +typedef void (APIENTRYP PFNGLRESUMETRANSFORMFEEDBACKPROC) (void); +typedef void (APIENTRYP PFNGLDRAWTRANSFORMFEEDBACKPROC) (GLenum mode, GLuint id); +typedef void (APIENTRYP PFNGLDRAWTRANSFORMFEEDBACKSTREAMPROC) (GLenum mode, GLuint id, GLuint stream); +typedef void (APIENTRYP PFNGLBEGINQUERYINDEXEDPROC) (GLenum target, GLuint index, GLuint id); +typedef void (APIENTRYP PFNGLENDQUERYINDEXEDPROC) (GLenum target, GLuint index); +typedef void (APIENTRYP PFNGLGETQUERYINDEXEDIVPROC) (GLenum target, GLuint index, GLenum pname, GLint *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glMinSampleShading (GLfloat value); +GLAPI void APIENTRY glBlendEquationi (GLuint buf, GLenum mode); +GLAPI void APIENTRY glBlendEquationSeparatei (GLuint buf, GLenum modeRGB, GLenum modeAlpha); +GLAPI void APIENTRY glBlendFunci (GLuint buf, GLenum src, GLenum dst); +GLAPI void APIENTRY glBlendFuncSeparatei (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); +GLAPI void APIENTRY glDrawArraysIndirect (GLenum mode, const void *indirect); +GLAPI void APIENTRY glDrawElementsIndirect (GLenum mode, GLenum type, const void *indirect); +GLAPI void APIENTRY glUniform1d (GLint location, GLdouble x); +GLAPI void APIENTRY glUniform2d (GLint location, GLdouble x, GLdouble y); +GLAPI void APIENTRY glUniform3d (GLint location, GLdouble x, GLdouble y, GLdouble z); +GLAPI void APIENTRY glUniform4d (GLint location, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +GLAPI void APIENTRY glUniform1dv (GLint location, GLsizei count, const GLdouble *value); +GLAPI void APIENTRY glUniform2dv (GLint location, GLsizei count, const GLdouble *value); +GLAPI void APIENTRY glUniform3dv (GLint location, GLsizei count, const GLdouble *value); +GLAPI void APIENTRY glUniform4dv (GLint location, GLsizei count, const GLdouble *value); +GLAPI void APIENTRY glUniformMatrix2dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glUniformMatrix3dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glUniformMatrix4dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glUniformMatrix2x3dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glUniformMatrix2x4dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glUniformMatrix3x2dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glUniformMatrix3x4dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glUniformMatrix4x2dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glUniformMatrix4x3dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glGetUniformdv (GLuint program, GLint location, GLdouble *params); +GLAPI GLint APIENTRY glGetSubroutineUniformLocation (GLuint program, GLenum shadertype, const GLchar *name); +GLAPI GLuint APIENTRY glGetSubroutineIndex (GLuint program, GLenum shadertype, const GLchar *name); +GLAPI void APIENTRY glGetActiveSubroutineUniformiv (GLuint program, GLenum shadertype, GLuint index, GLenum pname, GLint *values); +GLAPI void APIENTRY glGetActiveSubroutineUniformName (GLuint program, GLenum shadertype, GLuint index, GLsizei bufSize, GLsizei *length, GLchar *name); +GLAPI void APIENTRY glGetActiveSubroutineName (GLuint program, GLenum shadertype, GLuint index, GLsizei bufSize, GLsizei *length, GLchar *name); +GLAPI void APIENTRY glUniformSubroutinesuiv (GLenum shadertype, GLsizei count, const GLuint *indices); +GLAPI void APIENTRY glGetUniformSubroutineuiv (GLenum shadertype, GLint location, GLuint *params); +GLAPI void APIENTRY glGetProgramStageiv (GLuint program, GLenum shadertype, GLenum pname, GLint *values); +GLAPI void APIENTRY glPatchParameteri (GLenum pname, GLint value); +GLAPI void APIENTRY glPatchParameterfv (GLenum pname, const GLfloat *values); +GLAPI void APIENTRY glBindTransformFeedback (GLenum target, GLuint id); +GLAPI void APIENTRY glDeleteTransformFeedbacks (GLsizei n, const GLuint *ids); +GLAPI void APIENTRY glGenTransformFeedbacks (GLsizei n, GLuint *ids); +GLAPI GLboolean APIENTRY glIsTransformFeedback (GLuint id); +GLAPI void APIENTRY glPauseTransformFeedback (void); +GLAPI void APIENTRY glResumeTransformFeedback (void); +GLAPI void APIENTRY glDrawTransformFeedback (GLenum mode, GLuint id); +GLAPI void APIENTRY glDrawTransformFeedbackStream (GLenum mode, GLuint id, GLuint stream); +GLAPI void APIENTRY glBeginQueryIndexed (GLenum target, GLuint index, GLuint id); +GLAPI void APIENTRY glEndQueryIndexed (GLenum target, GLuint index); +GLAPI void APIENTRY glGetQueryIndexediv (GLenum target, GLuint index, GLenum pname, GLint *params); +#endif +#endif /* GL_VERSION_4_0 */ + +#ifndef GL_VERSION_4_1 +#define GL_VERSION_4_1 1 +#define GL_FIXED 0x140C +#define GL_IMPLEMENTATION_COLOR_READ_TYPE 0x8B9A +#define GL_IMPLEMENTATION_COLOR_READ_FORMAT 0x8B9B +#define GL_LOW_FLOAT 0x8DF0 +#define GL_MEDIUM_FLOAT 0x8DF1 +#define GL_HIGH_FLOAT 0x8DF2 +#define GL_LOW_INT 0x8DF3 +#define GL_MEDIUM_INT 0x8DF4 +#define GL_HIGH_INT 0x8DF5 +#define GL_SHADER_COMPILER 0x8DFA +#define GL_SHADER_BINARY_FORMATS 0x8DF8 +#define GL_NUM_SHADER_BINARY_FORMATS 0x8DF9 +#define GL_MAX_VERTEX_UNIFORM_VECTORS 0x8DFB +#define GL_MAX_VARYING_VECTORS 0x8DFC +#define GL_MAX_FRAGMENT_UNIFORM_VECTORS 0x8DFD +#define GL_RGB565 0x8D62 +#define GL_PROGRAM_BINARY_RETRIEVABLE_HINT 0x8257 +#define GL_PROGRAM_BINARY_LENGTH 0x8741 +#define GL_NUM_PROGRAM_BINARY_FORMATS 0x87FE +#define GL_PROGRAM_BINARY_FORMATS 0x87FF +#define GL_VERTEX_SHADER_BIT 0x00000001 +#define GL_FRAGMENT_SHADER_BIT 0x00000002 +#define GL_GEOMETRY_SHADER_BIT 0x00000004 +#define GL_TESS_CONTROL_SHADER_BIT 0x00000008 +#define GL_TESS_EVALUATION_SHADER_BIT 0x00000010 +#define GL_ALL_SHADER_BITS 0xFFFFFFFF +#define GL_PROGRAM_SEPARABLE 0x8258 +#define GL_ACTIVE_PROGRAM 0x8259 +#define GL_PROGRAM_PIPELINE_BINDING 0x825A +#define GL_MAX_VIEWPORTS 0x825B +#define GL_VIEWPORT_SUBPIXEL_BITS 0x825C +#define GL_VIEWPORT_BOUNDS_RANGE 0x825D +#define GL_LAYER_PROVOKING_VERTEX 0x825E +#define GL_VIEWPORT_INDEX_PROVOKING_VERTEX 0x825F +#define GL_UNDEFINED_VERTEX 0x8260 +typedef void (APIENTRYP PFNGLRELEASESHADERCOMPILERPROC) (void); +typedef void (APIENTRYP PFNGLSHADERBINARYPROC) (GLsizei count, const GLuint *shaders, GLenum binaryFormat, const void *binary, GLsizei length); +typedef void (APIENTRYP PFNGLGETSHADERPRECISIONFORMATPROC) (GLenum shadertype, GLenum precisiontype, GLint *range, GLint *precision); +typedef void (APIENTRYP PFNGLDEPTHRANGEFPROC) (GLfloat n, GLfloat f); +typedef void (APIENTRYP PFNGLCLEARDEPTHFPROC) (GLfloat d); +typedef void (APIENTRYP PFNGLGETPROGRAMBINARYPROC) (GLuint program, GLsizei bufSize, GLsizei *length, GLenum *binaryFormat, void *binary); +typedef void (APIENTRYP PFNGLPROGRAMBINARYPROC) (GLuint program, GLenum binaryFormat, const void *binary, GLsizei length); +typedef void (APIENTRYP PFNGLPROGRAMPARAMETERIPROC) (GLuint program, GLenum pname, GLint value); +typedef void (APIENTRYP PFNGLUSEPROGRAMSTAGESPROC) (GLuint pipeline, GLbitfield stages, GLuint program); +typedef void (APIENTRYP PFNGLACTIVESHADERPROGRAMPROC) (GLuint pipeline, GLuint program); +typedef GLuint (APIENTRYP PFNGLCREATESHADERPROGRAMVPROC) (GLenum type, GLsizei count, const GLchar *const*strings); +typedef void (APIENTRYP PFNGLBINDPROGRAMPIPELINEPROC) (GLuint pipeline); +typedef void (APIENTRYP PFNGLDELETEPROGRAMPIPELINESPROC) (GLsizei n, const GLuint *pipelines); +typedef void (APIENTRYP PFNGLGENPROGRAMPIPELINESPROC) (GLsizei n, GLuint *pipelines); +typedef GLboolean (APIENTRYP PFNGLISPROGRAMPIPELINEPROC) (GLuint pipeline); +typedef void (APIENTRYP PFNGLGETPROGRAMPIPELINEIVPROC) (GLuint pipeline, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1IPROC) (GLuint program, GLint location, GLint v0); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1IVPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1FPROC) (GLuint program, GLint location, GLfloat v0); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1FVPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1DPROC) (GLuint program, GLint location, GLdouble v0); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1DVPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1UIPROC) (GLuint program, GLint location, GLuint v0); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1UIVPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2IPROC) (GLuint program, GLint location, GLint v0, GLint v1); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2IVPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2FPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2FVPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2DPROC) (GLuint program, GLint location, GLdouble v0, GLdouble v1); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2DVPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2UIPROC) (GLuint program, GLint location, GLuint v0, GLuint v1); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2UIVPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3IPROC) (GLuint program, GLint location, GLint v0, GLint v1, GLint v2); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3IVPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3FPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3FVPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3DPROC) (GLuint program, GLint location, GLdouble v0, GLdouble v1, GLdouble v2); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3DVPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3UIPROC) (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3UIVPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4IPROC) (GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4IVPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4FPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4FVPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4DPROC) (GLuint program, GLint location, GLdouble v0, GLdouble v1, GLdouble v2, GLdouble v3); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4DVPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4UIPROC) (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4UIVPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X3FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X2FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X4FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X2FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X4FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X3FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X3DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X2DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X4DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X2DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X4DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X3DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLVALIDATEPROGRAMPIPELINEPROC) (GLuint pipeline); +typedef void (APIENTRYP PFNGLGETPROGRAMPIPELINEINFOLOGPROC) (GLuint pipeline, GLsizei bufSize, GLsizei *length, GLchar *infoLog); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL1DPROC) (GLuint index, GLdouble x); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL2DPROC) (GLuint index, GLdouble x, GLdouble y); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL3DPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL4DPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL1DVPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL2DVPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL3DVPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL4DVPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBLPOINTERPROC) (GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBLDVPROC) (GLuint index, GLenum pname, GLdouble *params); +typedef void (APIENTRYP PFNGLVIEWPORTARRAYVPROC) (GLuint first, GLsizei count, const GLfloat *v); +typedef void (APIENTRYP PFNGLVIEWPORTINDEXEDFPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat w, GLfloat h); +typedef void (APIENTRYP PFNGLVIEWPORTINDEXEDFVPROC) (GLuint index, const GLfloat *v); +typedef void (APIENTRYP PFNGLSCISSORARRAYVPROC) (GLuint first, GLsizei count, const GLint *v); +typedef void (APIENTRYP PFNGLSCISSORINDEXEDPROC) (GLuint index, GLint left, GLint bottom, GLsizei width, GLsizei height); +typedef void (APIENTRYP PFNGLSCISSORINDEXEDVPROC) (GLuint index, const GLint *v); +typedef void (APIENTRYP PFNGLDEPTHRANGEARRAYVPROC) (GLuint first, GLsizei count, const GLdouble *v); +typedef void (APIENTRYP PFNGLDEPTHRANGEINDEXEDPROC) (GLuint index, GLdouble n, GLdouble f); +typedef void (APIENTRYP PFNGLGETFLOATI_VPROC) (GLenum target, GLuint index, GLfloat *data); +typedef void (APIENTRYP PFNGLGETDOUBLEI_VPROC) (GLenum target, GLuint index, GLdouble *data); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glReleaseShaderCompiler (void); +GLAPI void APIENTRY glShaderBinary (GLsizei count, const GLuint *shaders, GLenum binaryFormat, const void *binary, GLsizei length); +GLAPI void APIENTRY glGetShaderPrecisionFormat (GLenum shadertype, GLenum precisiontype, GLint *range, GLint *precision); +GLAPI void APIENTRY glDepthRangef (GLfloat n, GLfloat f); +GLAPI void APIENTRY glClearDepthf (GLfloat d); +GLAPI void APIENTRY glGetProgramBinary (GLuint program, GLsizei bufSize, GLsizei *length, GLenum *binaryFormat, void *binary); +GLAPI void APIENTRY glProgramBinary (GLuint program, GLenum binaryFormat, const void *binary, GLsizei length); +GLAPI void APIENTRY glProgramParameteri (GLuint program, GLenum pname, GLint value); +GLAPI void APIENTRY glUseProgramStages (GLuint pipeline, GLbitfield stages, GLuint program); +GLAPI void APIENTRY glActiveShaderProgram (GLuint pipeline, GLuint program); +GLAPI GLuint APIENTRY glCreateShaderProgramv (GLenum type, GLsizei count, const GLchar *const*strings); +GLAPI void APIENTRY glBindProgramPipeline (GLuint pipeline); +GLAPI void APIENTRY glDeleteProgramPipelines (GLsizei n, const GLuint *pipelines); +GLAPI void APIENTRY glGenProgramPipelines (GLsizei n, GLuint *pipelines); +GLAPI GLboolean APIENTRY glIsProgramPipeline (GLuint pipeline); +GLAPI void APIENTRY glGetProgramPipelineiv (GLuint pipeline, GLenum pname, GLint *params); +GLAPI void APIENTRY glProgramUniform1i (GLuint program, GLint location, GLint v0); +GLAPI void APIENTRY glProgramUniform1iv (GLuint program, GLint location, GLsizei count, const GLint *value); +GLAPI void APIENTRY glProgramUniform1f (GLuint program, GLint location, GLfloat v0); +GLAPI void APIENTRY glProgramUniform1fv (GLuint program, GLint location, GLsizei count, const GLfloat *value); +GLAPI void APIENTRY glProgramUniform1d (GLuint program, GLint location, GLdouble v0); +GLAPI void APIENTRY glProgramUniform1dv (GLuint program, GLint location, GLsizei count, const GLdouble *value); +GLAPI void APIENTRY glProgramUniform1ui (GLuint program, GLint location, GLuint v0); +GLAPI void APIENTRY glProgramUniform1uiv (GLuint program, GLint location, GLsizei count, const GLuint *value); +GLAPI void APIENTRY glProgramUniform2i (GLuint program, GLint location, GLint v0, GLint v1); +GLAPI void APIENTRY glProgramUniform2iv (GLuint program, GLint location, GLsizei count, const GLint *value); +GLAPI void APIENTRY glProgramUniform2f (GLuint program, GLint location, GLfloat v0, GLfloat v1); +GLAPI void APIENTRY glProgramUniform2fv (GLuint program, GLint location, GLsizei count, const GLfloat *value); +GLAPI void APIENTRY glProgramUniform2d (GLuint program, GLint location, GLdouble v0, GLdouble v1); +GLAPI void APIENTRY glProgramUniform2dv (GLuint program, GLint location, GLsizei count, const GLdouble *value); +GLAPI void APIENTRY glProgramUniform2ui (GLuint program, GLint location, GLuint v0, GLuint v1); +GLAPI void APIENTRY glProgramUniform2uiv (GLuint program, GLint location, GLsizei count, const GLuint *value); +GLAPI void APIENTRY glProgramUniform3i (GLuint program, GLint location, GLint v0, GLint v1, GLint v2); +GLAPI void APIENTRY glProgramUniform3iv (GLuint program, GLint location, GLsizei count, const GLint *value); +GLAPI void APIENTRY glProgramUniform3f (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2); +GLAPI void APIENTRY glProgramUniform3fv (GLuint program, GLint location, GLsizei count, const GLfloat *value); +GLAPI void APIENTRY glProgramUniform3d (GLuint program, GLint location, GLdouble v0, GLdouble v1, GLdouble v2); +GLAPI void APIENTRY glProgramUniform3dv (GLuint program, GLint location, GLsizei count, const GLdouble *value); +GLAPI void APIENTRY glProgramUniform3ui (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2); +GLAPI void APIENTRY glProgramUniform3uiv (GLuint program, GLint location, GLsizei count, const GLuint *value); +GLAPI void APIENTRY glProgramUniform4i (GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3); +GLAPI void APIENTRY glProgramUniform4iv (GLuint program, GLint location, GLsizei count, const GLint *value); +GLAPI void APIENTRY glProgramUniform4f (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); +GLAPI void APIENTRY glProgramUniform4fv (GLuint program, GLint location, GLsizei count, const GLfloat *value); +GLAPI void APIENTRY glProgramUniform4d (GLuint program, GLint location, GLdouble v0, GLdouble v1, GLdouble v2, GLdouble v3); +GLAPI void APIENTRY glProgramUniform4dv (GLuint program, GLint location, GLsizei count, const GLdouble *value); +GLAPI void APIENTRY glProgramUniform4ui (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); +GLAPI void APIENTRY glProgramUniform4uiv (GLuint program, GLint location, GLsizei count, const GLuint *value); +GLAPI void APIENTRY glProgramUniformMatrix2fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glProgramUniformMatrix3fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glProgramUniformMatrix4fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glProgramUniformMatrix2dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glProgramUniformMatrix3dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glProgramUniformMatrix4dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glProgramUniformMatrix2x3fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glProgramUniformMatrix3x2fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glProgramUniformMatrix2x4fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glProgramUniformMatrix4x2fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glProgramUniformMatrix3x4fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glProgramUniformMatrix4x3fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glProgramUniformMatrix2x3dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glProgramUniformMatrix3x2dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glProgramUniformMatrix2x4dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glProgramUniformMatrix4x2dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glProgramUniformMatrix3x4dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glProgramUniformMatrix4x3dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glValidateProgramPipeline (GLuint pipeline); +GLAPI void APIENTRY glGetProgramPipelineInfoLog (GLuint pipeline, GLsizei bufSize, GLsizei *length, GLchar *infoLog); +GLAPI void APIENTRY glVertexAttribL1d (GLuint index, GLdouble x); +GLAPI void APIENTRY glVertexAttribL2d (GLuint index, GLdouble x, GLdouble y); +GLAPI void APIENTRY glVertexAttribL3d (GLuint index, GLdouble x, GLdouble y, GLdouble z); +GLAPI void APIENTRY glVertexAttribL4d (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +GLAPI void APIENTRY glVertexAttribL1dv (GLuint index, const GLdouble *v); +GLAPI void APIENTRY glVertexAttribL2dv (GLuint index, const GLdouble *v); +GLAPI void APIENTRY glVertexAttribL3dv (GLuint index, const GLdouble *v); +GLAPI void APIENTRY glVertexAttribL4dv (GLuint index, const GLdouble *v); +GLAPI void APIENTRY glVertexAttribLPointer (GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer); +GLAPI void APIENTRY glGetVertexAttribLdv (GLuint index, GLenum pname, GLdouble *params); +GLAPI void APIENTRY glViewportArrayv (GLuint first, GLsizei count, const GLfloat *v); +GLAPI void APIENTRY glViewportIndexedf (GLuint index, GLfloat x, GLfloat y, GLfloat w, GLfloat h); +GLAPI void APIENTRY glViewportIndexedfv (GLuint index, const GLfloat *v); +GLAPI void APIENTRY glScissorArrayv (GLuint first, GLsizei count, const GLint *v); +GLAPI void APIENTRY glScissorIndexed (GLuint index, GLint left, GLint bottom, GLsizei width, GLsizei height); +GLAPI void APIENTRY glScissorIndexedv (GLuint index, const GLint *v); +GLAPI void APIENTRY glDepthRangeArrayv (GLuint first, GLsizei count, const GLdouble *v); +GLAPI void APIENTRY glDepthRangeIndexed (GLuint index, GLdouble n, GLdouble f); +GLAPI void APIENTRY glGetFloati_v (GLenum target, GLuint index, GLfloat *data); +GLAPI void APIENTRY glGetDoublei_v (GLenum target, GLuint index, GLdouble *data); +#endif +#endif /* GL_VERSION_4_1 */ + +#ifndef GL_VERSION_4_2 +#define GL_VERSION_4_2 1 +#define GL_COPY_READ_BUFFER_BINDING 0x8F36 +#define GL_COPY_WRITE_BUFFER_BINDING 0x8F37 +#define GL_TRANSFORM_FEEDBACK_ACTIVE 0x8E24 +#define GL_TRANSFORM_FEEDBACK_PAUSED 0x8E23 +#define GL_UNPACK_COMPRESSED_BLOCK_WIDTH 0x9127 +#define GL_UNPACK_COMPRESSED_BLOCK_HEIGHT 0x9128 +#define GL_UNPACK_COMPRESSED_BLOCK_DEPTH 0x9129 +#define GL_UNPACK_COMPRESSED_BLOCK_SIZE 0x912A +#define GL_PACK_COMPRESSED_BLOCK_WIDTH 0x912B +#define GL_PACK_COMPRESSED_BLOCK_HEIGHT 0x912C +#define GL_PACK_COMPRESSED_BLOCK_DEPTH 0x912D +#define GL_PACK_COMPRESSED_BLOCK_SIZE 0x912E +#define GL_NUM_SAMPLE_COUNTS 0x9380 +#define GL_MIN_MAP_BUFFER_ALIGNMENT 0x90BC +#define GL_ATOMIC_COUNTER_BUFFER 0x92C0 +#define GL_ATOMIC_COUNTER_BUFFER_BINDING 0x92C1 +#define GL_ATOMIC_COUNTER_BUFFER_START 0x92C2 +#define GL_ATOMIC_COUNTER_BUFFER_SIZE 0x92C3 +#define GL_ATOMIC_COUNTER_BUFFER_DATA_SIZE 0x92C4 +#define GL_ATOMIC_COUNTER_BUFFER_ACTIVE_ATOMIC_COUNTERS 0x92C5 +#define GL_ATOMIC_COUNTER_BUFFER_ACTIVE_ATOMIC_COUNTER_INDICES 0x92C6 +#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_VERTEX_SHADER 0x92C7 +#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_TESS_CONTROL_SHADER 0x92C8 +#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_TESS_EVALUATION_SHADER 0x92C9 +#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_GEOMETRY_SHADER 0x92CA +#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_FRAGMENT_SHADER 0x92CB +#define GL_MAX_VERTEX_ATOMIC_COUNTER_BUFFERS 0x92CC +#define GL_MAX_TESS_CONTROL_ATOMIC_COUNTER_BUFFERS 0x92CD +#define GL_MAX_TESS_EVALUATION_ATOMIC_COUNTER_BUFFERS 0x92CE +#define GL_MAX_GEOMETRY_ATOMIC_COUNTER_BUFFERS 0x92CF +#define GL_MAX_FRAGMENT_ATOMIC_COUNTER_BUFFERS 0x92D0 +#define GL_MAX_COMBINED_ATOMIC_COUNTER_BUFFERS 0x92D1 +#define GL_MAX_VERTEX_ATOMIC_COUNTERS 0x92D2 +#define GL_MAX_TESS_CONTROL_ATOMIC_COUNTERS 0x92D3 +#define GL_MAX_TESS_EVALUATION_ATOMIC_COUNTERS 0x92D4 +#define GL_MAX_GEOMETRY_ATOMIC_COUNTERS 0x92D5 +#define GL_MAX_FRAGMENT_ATOMIC_COUNTERS 0x92D6 +#define GL_MAX_COMBINED_ATOMIC_COUNTERS 0x92D7 +#define GL_MAX_ATOMIC_COUNTER_BUFFER_SIZE 0x92D8 +#define GL_MAX_ATOMIC_COUNTER_BUFFER_BINDINGS 0x92DC +#define GL_ACTIVE_ATOMIC_COUNTER_BUFFERS 0x92D9 +#define GL_UNIFORM_ATOMIC_COUNTER_BUFFER_INDEX 0x92DA +#define GL_UNSIGNED_INT_ATOMIC_COUNTER 0x92DB +#define GL_VERTEX_ATTRIB_ARRAY_BARRIER_BIT 0x00000001 +#define GL_ELEMENT_ARRAY_BARRIER_BIT 0x00000002 +#define GL_UNIFORM_BARRIER_BIT 0x00000004 +#define GL_TEXTURE_FETCH_BARRIER_BIT 0x00000008 +#define GL_SHADER_IMAGE_ACCESS_BARRIER_BIT 0x00000020 +#define GL_COMMAND_BARRIER_BIT 0x00000040 +#define GL_PIXEL_BUFFER_BARRIER_BIT 0x00000080 +#define GL_TEXTURE_UPDATE_BARRIER_BIT 0x00000100 +#define GL_BUFFER_UPDATE_BARRIER_BIT 0x00000200 +#define GL_FRAMEBUFFER_BARRIER_BIT 0x00000400 +#define GL_TRANSFORM_FEEDBACK_BARRIER_BIT 0x00000800 +#define GL_ATOMIC_COUNTER_BARRIER_BIT 0x00001000 +#define GL_ALL_BARRIER_BITS 0xFFFFFFFF +#define GL_MAX_IMAGE_UNITS 0x8F38 +#define GL_MAX_COMBINED_IMAGE_UNITS_AND_FRAGMENT_OUTPUTS 0x8F39 +#define GL_IMAGE_BINDING_NAME 0x8F3A +#define GL_IMAGE_BINDING_LEVEL 0x8F3B +#define GL_IMAGE_BINDING_LAYERED 0x8F3C +#define GL_IMAGE_BINDING_LAYER 0x8F3D +#define GL_IMAGE_BINDING_ACCESS 0x8F3E +#define GL_IMAGE_1D 0x904C +#define GL_IMAGE_2D 0x904D +#define GL_IMAGE_3D 0x904E +#define GL_IMAGE_2D_RECT 0x904F +#define GL_IMAGE_CUBE 0x9050 +#define GL_IMAGE_BUFFER 0x9051 +#define GL_IMAGE_1D_ARRAY 0x9052 +#define GL_IMAGE_2D_ARRAY 0x9053 +#define GL_IMAGE_CUBE_MAP_ARRAY 0x9054 +#define GL_IMAGE_2D_MULTISAMPLE 0x9055 +#define GL_IMAGE_2D_MULTISAMPLE_ARRAY 0x9056 +#define GL_INT_IMAGE_1D 0x9057 +#define GL_INT_IMAGE_2D 0x9058 +#define GL_INT_IMAGE_3D 0x9059 +#define GL_INT_IMAGE_2D_RECT 0x905A +#define GL_INT_IMAGE_CUBE 0x905B +#define GL_INT_IMAGE_BUFFER 0x905C +#define GL_INT_IMAGE_1D_ARRAY 0x905D +#define GL_INT_IMAGE_2D_ARRAY 0x905E +#define GL_INT_IMAGE_CUBE_MAP_ARRAY 0x905F +#define GL_INT_IMAGE_2D_MULTISAMPLE 0x9060 +#define GL_INT_IMAGE_2D_MULTISAMPLE_ARRAY 0x9061 +#define GL_UNSIGNED_INT_IMAGE_1D 0x9062 +#define GL_UNSIGNED_INT_IMAGE_2D 0x9063 +#define GL_UNSIGNED_INT_IMAGE_3D 0x9064 +#define GL_UNSIGNED_INT_IMAGE_2D_RECT 0x9065 +#define GL_UNSIGNED_INT_IMAGE_CUBE 0x9066 +#define GL_UNSIGNED_INT_IMAGE_BUFFER 0x9067 +#define GL_UNSIGNED_INT_IMAGE_1D_ARRAY 0x9068 +#define GL_UNSIGNED_INT_IMAGE_2D_ARRAY 0x9069 +#define GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY 0x906A +#define GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE 0x906B +#define GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_ARRAY 0x906C +#define GL_MAX_IMAGE_SAMPLES 0x906D +#define GL_IMAGE_BINDING_FORMAT 0x906E +#define GL_IMAGE_FORMAT_COMPATIBILITY_TYPE 0x90C7 +#define GL_IMAGE_FORMAT_COMPATIBILITY_BY_SIZE 0x90C8 +#define GL_IMAGE_FORMAT_COMPATIBILITY_BY_CLASS 0x90C9 +#define GL_MAX_VERTEX_IMAGE_UNIFORMS 0x90CA +#define GL_MAX_TESS_CONTROL_IMAGE_UNIFORMS 0x90CB +#define GL_MAX_TESS_EVALUATION_IMAGE_UNIFORMS 0x90CC +#define GL_MAX_GEOMETRY_IMAGE_UNIFORMS 0x90CD +#define GL_MAX_FRAGMENT_IMAGE_UNIFORMS 0x90CE +#define GL_MAX_COMBINED_IMAGE_UNIFORMS 0x90CF +#define GL_COMPRESSED_RGBA_BPTC_UNORM 0x8E8C +#define GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM 0x8E8D +#define GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT 0x8E8E +#define GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT 0x8E8F +#define GL_TEXTURE_IMMUTABLE_FORMAT 0x912F +typedef void (APIENTRYP PFNGLDRAWARRAYSINSTANCEDBASEINSTANCEPROC) (GLenum mode, GLint first, GLsizei count, GLsizei instancecount, GLuint baseinstance); +typedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDBASEINSTANCEPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLuint baseinstance); +typedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXBASEINSTANCEPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLint basevertex, GLuint baseinstance); +typedef void (APIENTRYP PFNGLGETINTERNALFORMATIVPROC) (GLenum target, GLenum internalformat, GLenum pname, GLsizei count, GLint *params); +typedef void (APIENTRYP PFNGLGETACTIVEATOMICCOUNTERBUFFERIVPROC) (GLuint program, GLuint bufferIndex, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLBINDIMAGETEXTUREPROC) (GLuint unit, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLenum format); +typedef void (APIENTRYP PFNGLMEMORYBARRIERPROC) (GLbitfield barriers); +typedef void (APIENTRYP PFNGLTEXSTORAGE1DPROC) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width); +typedef void (APIENTRYP PFNGLTEXSTORAGE2DPROC) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); +typedef void (APIENTRYP PFNGLTEXSTORAGE3DPROC) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); +typedef void (APIENTRYP PFNGLDRAWTRANSFORMFEEDBACKINSTANCEDPROC) (GLenum mode, GLuint id, GLsizei instancecount); +typedef void (APIENTRYP PFNGLDRAWTRANSFORMFEEDBACKSTREAMINSTANCEDPROC) (GLenum mode, GLuint id, GLuint stream, GLsizei instancecount); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glDrawArraysInstancedBaseInstance (GLenum mode, GLint first, GLsizei count, GLsizei instancecount, GLuint baseinstance); +GLAPI void APIENTRY glDrawElementsInstancedBaseInstance (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLuint baseinstance); +GLAPI void APIENTRY glDrawElementsInstancedBaseVertexBaseInstance (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLint basevertex, GLuint baseinstance); +GLAPI void APIENTRY glGetInternalformativ (GLenum target, GLenum internalformat, GLenum pname, GLsizei count, GLint *params); +GLAPI void APIENTRY glGetActiveAtomicCounterBufferiv (GLuint program, GLuint bufferIndex, GLenum pname, GLint *params); +GLAPI void APIENTRY glBindImageTexture (GLuint unit, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLenum format); +GLAPI void APIENTRY glMemoryBarrier (GLbitfield barriers); +GLAPI void APIENTRY glTexStorage1D (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width); +GLAPI void APIENTRY glTexStorage2D (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); +GLAPI void APIENTRY glTexStorage3D (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); +GLAPI void APIENTRY glDrawTransformFeedbackInstanced (GLenum mode, GLuint id, GLsizei instancecount); +GLAPI void APIENTRY glDrawTransformFeedbackStreamInstanced (GLenum mode, GLuint id, GLuint stream, GLsizei instancecount); +#endif +#endif /* GL_VERSION_4_2 */ + +#ifndef GL_VERSION_4_3 +#define GL_VERSION_4_3 1 +typedef void (APIENTRY *GLDEBUGPROC)(GLenum source,GLenum type,GLuint id,GLenum severity,GLsizei length,const GLchar *message,const void *userParam); +#define GL_NUM_SHADING_LANGUAGE_VERSIONS 0x82E9 +#define GL_VERTEX_ATTRIB_ARRAY_LONG 0x874E +#define GL_COMPRESSED_RGB8_ETC2 0x9274 +#define GL_COMPRESSED_SRGB8_ETC2 0x9275 +#define GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2 0x9276 +#define GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2 0x9277 +#define GL_COMPRESSED_RGBA8_ETC2_EAC 0x9278 +#define GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC 0x9279 +#define GL_COMPRESSED_R11_EAC 0x9270 +#define GL_COMPRESSED_SIGNED_R11_EAC 0x9271 +#define GL_COMPRESSED_RG11_EAC 0x9272 +#define GL_COMPRESSED_SIGNED_RG11_EAC 0x9273 +#define GL_PRIMITIVE_RESTART_FIXED_INDEX 0x8D69 +#define GL_ANY_SAMPLES_PASSED_CONSERVATIVE 0x8D6A +#define GL_MAX_ELEMENT_INDEX 0x8D6B +#define GL_COMPUTE_SHADER 0x91B9 +#define GL_MAX_COMPUTE_UNIFORM_BLOCKS 0x91BB +#define GL_MAX_COMPUTE_TEXTURE_IMAGE_UNITS 0x91BC +#define GL_MAX_COMPUTE_IMAGE_UNIFORMS 0x91BD +#define GL_MAX_COMPUTE_SHARED_MEMORY_SIZE 0x8262 +#define GL_MAX_COMPUTE_UNIFORM_COMPONENTS 0x8263 +#define GL_MAX_COMPUTE_ATOMIC_COUNTER_BUFFERS 0x8264 +#define GL_MAX_COMPUTE_ATOMIC_COUNTERS 0x8265 +#define GL_MAX_COMBINED_COMPUTE_UNIFORM_COMPONENTS 0x8266 +#define GL_MAX_COMPUTE_WORK_GROUP_INVOCATIONS 0x90EB +#define GL_MAX_COMPUTE_WORK_GROUP_COUNT 0x91BE +#define GL_MAX_COMPUTE_WORK_GROUP_SIZE 0x91BF +#define GL_COMPUTE_WORK_GROUP_SIZE 0x8267 +#define GL_UNIFORM_BLOCK_REFERENCED_BY_COMPUTE_SHADER 0x90EC +#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_COMPUTE_SHADER 0x90ED +#define GL_DISPATCH_INDIRECT_BUFFER 0x90EE +#define GL_DISPATCH_INDIRECT_BUFFER_BINDING 0x90EF +#define GL_COMPUTE_SHADER_BIT 0x00000020 +#define GL_DEBUG_OUTPUT_SYNCHRONOUS 0x8242 +#define GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH 0x8243 +#define GL_DEBUG_CALLBACK_FUNCTION 0x8244 +#define GL_DEBUG_CALLBACK_USER_PARAM 0x8245 +#define GL_DEBUG_SOURCE_API 0x8246 +#define GL_DEBUG_SOURCE_WINDOW_SYSTEM 0x8247 +#define GL_DEBUG_SOURCE_SHADER_COMPILER 0x8248 +#define GL_DEBUG_SOURCE_THIRD_PARTY 0x8249 +#define GL_DEBUG_SOURCE_APPLICATION 0x824A +#define GL_DEBUG_SOURCE_OTHER 0x824B +#define GL_DEBUG_TYPE_ERROR 0x824C +#define GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR 0x824D +#define GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR 0x824E +#define GL_DEBUG_TYPE_PORTABILITY 0x824F +#define GL_DEBUG_TYPE_PERFORMANCE 0x8250 +#define GL_DEBUG_TYPE_OTHER 0x8251 +#define GL_MAX_DEBUG_MESSAGE_LENGTH 0x9143 +#define GL_MAX_DEBUG_LOGGED_MESSAGES 0x9144 +#define GL_DEBUG_LOGGED_MESSAGES 0x9145 +#define GL_DEBUG_SEVERITY_HIGH 0x9146 +#define GL_DEBUG_SEVERITY_MEDIUM 0x9147 +#define GL_DEBUG_SEVERITY_LOW 0x9148 +#define GL_DEBUG_TYPE_MARKER 0x8268 +#define GL_DEBUG_TYPE_PUSH_GROUP 0x8269 +#define GL_DEBUG_TYPE_POP_GROUP 0x826A +#define GL_DEBUG_SEVERITY_NOTIFICATION 0x826B +#define GL_MAX_DEBUG_GROUP_STACK_DEPTH 0x826C +#define GL_DEBUG_GROUP_STACK_DEPTH 0x826D +#define GL_BUFFER 0x82E0 +#define GL_SHADER 0x82E1 +#define GL_PROGRAM 0x82E2 +#define GL_QUERY 0x82E3 +#define GL_PROGRAM_PIPELINE 0x82E4 +#define GL_SAMPLER 0x82E6 +#define GL_MAX_LABEL_LENGTH 0x82E8 +#define GL_DEBUG_OUTPUT 0x92E0 +#define GL_CONTEXT_FLAG_DEBUG_BIT 0x00000002 +#define GL_MAX_UNIFORM_LOCATIONS 0x826E +#define GL_FRAMEBUFFER_DEFAULT_WIDTH 0x9310 +#define GL_FRAMEBUFFER_DEFAULT_HEIGHT 0x9311 +#define GL_FRAMEBUFFER_DEFAULT_LAYERS 0x9312 +#define GL_FRAMEBUFFER_DEFAULT_SAMPLES 0x9313 +#define GL_FRAMEBUFFER_DEFAULT_FIXED_SAMPLE_LOCATIONS 0x9314 +#define GL_MAX_FRAMEBUFFER_WIDTH 0x9315 +#define GL_MAX_FRAMEBUFFER_HEIGHT 0x9316 +#define GL_MAX_FRAMEBUFFER_LAYERS 0x9317 +#define GL_MAX_FRAMEBUFFER_SAMPLES 0x9318 +#define GL_INTERNALFORMAT_SUPPORTED 0x826F +#define GL_INTERNALFORMAT_PREFERRED 0x8270 +#define GL_INTERNALFORMAT_RED_SIZE 0x8271 +#define GL_INTERNALFORMAT_GREEN_SIZE 0x8272 +#define GL_INTERNALFORMAT_BLUE_SIZE 0x8273 +#define GL_INTERNALFORMAT_ALPHA_SIZE 0x8274 +#define GL_INTERNALFORMAT_DEPTH_SIZE 0x8275 +#define GL_INTERNALFORMAT_STENCIL_SIZE 0x8276 +#define GL_INTERNALFORMAT_SHARED_SIZE 0x8277 +#define GL_INTERNALFORMAT_RED_TYPE 0x8278 +#define GL_INTERNALFORMAT_GREEN_TYPE 0x8279 +#define GL_INTERNALFORMAT_BLUE_TYPE 0x827A +#define GL_INTERNALFORMAT_ALPHA_TYPE 0x827B +#define GL_INTERNALFORMAT_DEPTH_TYPE 0x827C +#define GL_INTERNALFORMAT_STENCIL_TYPE 0x827D +#define GL_MAX_WIDTH 0x827E +#define GL_MAX_HEIGHT 0x827F +#define GL_MAX_DEPTH 0x8280 +#define GL_MAX_LAYERS 0x8281 +#define GL_MAX_COMBINED_DIMENSIONS 0x8282 +#define GL_COLOR_COMPONENTS 0x8283 +#define GL_DEPTH_COMPONENTS 0x8284 +#define GL_STENCIL_COMPONENTS 0x8285 +#define GL_COLOR_RENDERABLE 0x8286 +#define GL_DEPTH_RENDERABLE 0x8287 +#define GL_STENCIL_RENDERABLE 0x8288 +#define GL_FRAMEBUFFER_RENDERABLE 0x8289 +#define GL_FRAMEBUFFER_RENDERABLE_LAYERED 0x828A +#define GL_FRAMEBUFFER_BLEND 0x828B +#define GL_READ_PIXELS 0x828C +#define GL_READ_PIXELS_FORMAT 0x828D +#define GL_READ_PIXELS_TYPE 0x828E +#define GL_TEXTURE_IMAGE_FORMAT 0x828F +#define GL_TEXTURE_IMAGE_TYPE 0x8290 +#define GL_GET_TEXTURE_IMAGE_FORMAT 0x8291 +#define GL_GET_TEXTURE_IMAGE_TYPE 0x8292 +#define GL_MIPMAP 0x8293 +#define GL_MANUAL_GENERATE_MIPMAP 0x8294 +#define GL_AUTO_GENERATE_MIPMAP 0x8295 +#define GL_COLOR_ENCODING 0x8296 +#define GL_SRGB_READ 0x8297 +#define GL_SRGB_WRITE 0x8298 +#define GL_FILTER 0x829A +#define GL_VERTEX_TEXTURE 0x829B +#define GL_TESS_CONTROL_TEXTURE 0x829C +#define GL_TESS_EVALUATION_TEXTURE 0x829D +#define GL_GEOMETRY_TEXTURE 0x829E +#define GL_FRAGMENT_TEXTURE 0x829F +#define GL_COMPUTE_TEXTURE 0x82A0 +#define GL_TEXTURE_SHADOW 0x82A1 +#define GL_TEXTURE_GATHER 0x82A2 +#define GL_TEXTURE_GATHER_SHADOW 0x82A3 +#define GL_SHADER_IMAGE_LOAD 0x82A4 +#define GL_SHADER_IMAGE_STORE 0x82A5 +#define GL_SHADER_IMAGE_ATOMIC 0x82A6 +#define GL_IMAGE_TEXEL_SIZE 0x82A7 +#define GL_IMAGE_COMPATIBILITY_CLASS 0x82A8 +#define GL_IMAGE_PIXEL_FORMAT 0x82A9 +#define GL_IMAGE_PIXEL_TYPE 0x82AA +#define GL_SIMULTANEOUS_TEXTURE_AND_DEPTH_TEST 0x82AC +#define GL_SIMULTANEOUS_TEXTURE_AND_STENCIL_TEST 0x82AD +#define GL_SIMULTANEOUS_TEXTURE_AND_DEPTH_WRITE 0x82AE +#define GL_SIMULTANEOUS_TEXTURE_AND_STENCIL_WRITE 0x82AF +#define GL_TEXTURE_COMPRESSED_BLOCK_WIDTH 0x82B1 +#define GL_TEXTURE_COMPRESSED_BLOCK_HEIGHT 0x82B2 +#define GL_TEXTURE_COMPRESSED_BLOCK_SIZE 0x82B3 +#define GL_CLEAR_BUFFER 0x82B4 +#define GL_TEXTURE_VIEW 0x82B5 +#define GL_VIEW_COMPATIBILITY_CLASS 0x82B6 +#define GL_FULL_SUPPORT 0x82B7 +#define GL_CAVEAT_SUPPORT 0x82B8 +#define GL_IMAGE_CLASS_4_X_32 0x82B9 +#define GL_IMAGE_CLASS_2_X_32 0x82BA +#define GL_IMAGE_CLASS_1_X_32 0x82BB +#define GL_IMAGE_CLASS_4_X_16 0x82BC +#define GL_IMAGE_CLASS_2_X_16 0x82BD +#define GL_IMAGE_CLASS_1_X_16 0x82BE +#define GL_IMAGE_CLASS_4_X_8 0x82BF +#define GL_IMAGE_CLASS_2_X_8 0x82C0 +#define GL_IMAGE_CLASS_1_X_8 0x82C1 +#define GL_IMAGE_CLASS_11_11_10 0x82C2 +#define GL_IMAGE_CLASS_10_10_10_2 0x82C3 +#define GL_VIEW_CLASS_128_BITS 0x82C4 +#define GL_VIEW_CLASS_96_BITS 0x82C5 +#define GL_VIEW_CLASS_64_BITS 0x82C6 +#define GL_VIEW_CLASS_48_BITS 0x82C7 +#define GL_VIEW_CLASS_32_BITS 0x82C8 +#define GL_VIEW_CLASS_24_BITS 0x82C9 +#define GL_VIEW_CLASS_16_BITS 0x82CA +#define GL_VIEW_CLASS_8_BITS 0x82CB +#define GL_VIEW_CLASS_S3TC_DXT1_RGB 0x82CC +#define GL_VIEW_CLASS_S3TC_DXT1_RGBA 0x82CD +#define GL_VIEW_CLASS_S3TC_DXT3_RGBA 0x82CE +#define GL_VIEW_CLASS_S3TC_DXT5_RGBA 0x82CF +#define GL_VIEW_CLASS_RGTC1_RED 0x82D0 +#define GL_VIEW_CLASS_RGTC2_RG 0x82D1 +#define GL_VIEW_CLASS_BPTC_UNORM 0x82D2 +#define GL_VIEW_CLASS_BPTC_FLOAT 0x82D3 +#define GL_UNIFORM 0x92E1 +#define GL_UNIFORM_BLOCK 0x92E2 +#define GL_PROGRAM_INPUT 0x92E3 +#define GL_PROGRAM_OUTPUT 0x92E4 +#define GL_BUFFER_VARIABLE 0x92E5 +#define GL_SHADER_STORAGE_BLOCK 0x92E6 +#define GL_VERTEX_SUBROUTINE 0x92E8 +#define GL_TESS_CONTROL_SUBROUTINE 0x92E9 +#define GL_TESS_EVALUATION_SUBROUTINE 0x92EA +#define GL_GEOMETRY_SUBROUTINE 0x92EB +#define GL_FRAGMENT_SUBROUTINE 0x92EC +#define GL_COMPUTE_SUBROUTINE 0x92ED +#define GL_VERTEX_SUBROUTINE_UNIFORM 0x92EE +#define GL_TESS_CONTROL_SUBROUTINE_UNIFORM 0x92EF +#define GL_TESS_EVALUATION_SUBROUTINE_UNIFORM 0x92F0 +#define GL_GEOMETRY_SUBROUTINE_UNIFORM 0x92F1 +#define GL_FRAGMENT_SUBROUTINE_UNIFORM 0x92F2 +#define GL_COMPUTE_SUBROUTINE_UNIFORM 0x92F3 +#define GL_TRANSFORM_FEEDBACK_VARYING 0x92F4 +#define GL_ACTIVE_RESOURCES 0x92F5 +#define GL_MAX_NAME_LENGTH 0x92F6 +#define GL_MAX_NUM_ACTIVE_VARIABLES 0x92F7 +#define GL_MAX_NUM_COMPATIBLE_SUBROUTINES 0x92F8 +#define GL_NAME_LENGTH 0x92F9 +#define GL_TYPE 0x92FA +#define GL_ARRAY_SIZE 0x92FB +#define GL_OFFSET 0x92FC +#define GL_BLOCK_INDEX 0x92FD +#define GL_ARRAY_STRIDE 0x92FE +#define GL_MATRIX_STRIDE 0x92FF +#define GL_IS_ROW_MAJOR 0x9300 +#define GL_ATOMIC_COUNTER_BUFFER_INDEX 0x9301 +#define GL_BUFFER_BINDING 0x9302 +#define GL_BUFFER_DATA_SIZE 0x9303 +#define GL_NUM_ACTIVE_VARIABLES 0x9304 +#define GL_ACTIVE_VARIABLES 0x9305 +#define GL_REFERENCED_BY_VERTEX_SHADER 0x9306 +#define GL_REFERENCED_BY_TESS_CONTROL_SHADER 0x9307 +#define GL_REFERENCED_BY_TESS_EVALUATION_SHADER 0x9308 +#define GL_REFERENCED_BY_GEOMETRY_SHADER 0x9309 +#define GL_REFERENCED_BY_FRAGMENT_SHADER 0x930A +#define GL_REFERENCED_BY_COMPUTE_SHADER 0x930B +#define GL_TOP_LEVEL_ARRAY_SIZE 0x930C +#define GL_TOP_LEVEL_ARRAY_STRIDE 0x930D +#define GL_LOCATION 0x930E +#define GL_LOCATION_INDEX 0x930F +#define GL_IS_PER_PATCH 0x92E7 +#define GL_SHADER_STORAGE_BUFFER 0x90D2 +#define GL_SHADER_STORAGE_BUFFER_BINDING 0x90D3 +#define GL_SHADER_STORAGE_BUFFER_START 0x90D4 +#define GL_SHADER_STORAGE_BUFFER_SIZE 0x90D5 +#define GL_MAX_VERTEX_SHADER_STORAGE_BLOCKS 0x90D6 +#define GL_MAX_GEOMETRY_SHADER_STORAGE_BLOCKS 0x90D7 +#define GL_MAX_TESS_CONTROL_SHADER_STORAGE_BLOCKS 0x90D8 +#define GL_MAX_TESS_EVALUATION_SHADER_STORAGE_BLOCKS 0x90D9 +#define GL_MAX_FRAGMENT_SHADER_STORAGE_BLOCKS 0x90DA +#define GL_MAX_COMPUTE_SHADER_STORAGE_BLOCKS 0x90DB +#define GL_MAX_COMBINED_SHADER_STORAGE_BLOCKS 0x90DC +#define GL_MAX_SHADER_STORAGE_BUFFER_BINDINGS 0x90DD +#define GL_MAX_SHADER_STORAGE_BLOCK_SIZE 0x90DE +#define GL_SHADER_STORAGE_BUFFER_OFFSET_ALIGNMENT 0x90DF +#define GL_SHADER_STORAGE_BARRIER_BIT 0x00002000 +#define GL_MAX_COMBINED_SHADER_OUTPUT_RESOURCES 0x8F39 +#define GL_DEPTH_STENCIL_TEXTURE_MODE 0x90EA +#define GL_TEXTURE_BUFFER_OFFSET 0x919D +#define GL_TEXTURE_BUFFER_SIZE 0x919E +#define GL_TEXTURE_BUFFER_OFFSET_ALIGNMENT 0x919F +#define GL_TEXTURE_VIEW_MIN_LEVEL 0x82DB +#define GL_TEXTURE_VIEW_NUM_LEVELS 0x82DC +#define GL_TEXTURE_VIEW_MIN_LAYER 0x82DD +#define GL_TEXTURE_VIEW_NUM_LAYERS 0x82DE +#define GL_TEXTURE_IMMUTABLE_LEVELS 0x82DF +#define GL_VERTEX_ATTRIB_BINDING 0x82D4 +#define GL_VERTEX_ATTRIB_RELATIVE_OFFSET 0x82D5 +#define GL_VERTEX_BINDING_DIVISOR 0x82D6 +#define GL_VERTEX_BINDING_OFFSET 0x82D7 +#define GL_VERTEX_BINDING_STRIDE 0x82D8 +#define GL_MAX_VERTEX_ATTRIB_RELATIVE_OFFSET 0x82D9 +#define GL_MAX_VERTEX_ATTRIB_BINDINGS 0x82DA +#define GL_VERTEX_BINDING_BUFFER 0x8F4F +#define GL_DISPLAY_LIST 0x82E7 +typedef void (APIENTRYP PFNGLCLEARBUFFERDATAPROC) (GLenum target, GLenum internalformat, GLenum format, GLenum type, const void *data); +typedef void (APIENTRYP PFNGLCLEARBUFFERSUBDATAPROC) (GLenum target, GLenum internalformat, GLintptr offset, GLsizeiptr size, GLenum format, GLenum type, const void *data); +typedef void (APIENTRYP PFNGLDISPATCHCOMPUTEPROC) (GLuint num_groups_x, GLuint num_groups_y, GLuint num_groups_z); +typedef void (APIENTRYP PFNGLDISPATCHCOMPUTEINDIRECTPROC) (GLintptr indirect); +typedef void (APIENTRYP PFNGLCOPYIMAGESUBDATAPROC) (GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei srcWidth, GLsizei srcHeight, GLsizei srcDepth); +typedef void (APIENTRYP PFNGLFRAMEBUFFERPARAMETERIPROC) (GLenum target, GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLGETFRAMEBUFFERPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETINTERNALFORMATI64VPROC) (GLenum target, GLenum internalformat, GLenum pname, GLsizei count, GLint64 *params); +typedef void (APIENTRYP PFNGLINVALIDATETEXSUBIMAGEPROC) (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth); +typedef void (APIENTRYP PFNGLINVALIDATETEXIMAGEPROC) (GLuint texture, GLint level); +typedef void (APIENTRYP PFNGLINVALIDATEBUFFERSUBDATAPROC) (GLuint buffer, GLintptr offset, GLsizeiptr length); +typedef void (APIENTRYP PFNGLINVALIDATEBUFFERDATAPROC) (GLuint buffer); +typedef void (APIENTRYP PFNGLINVALIDATEFRAMEBUFFERPROC) (GLenum target, GLsizei numAttachments, const GLenum *attachments); +typedef void (APIENTRYP PFNGLINVALIDATESUBFRAMEBUFFERPROC) (GLenum target, GLsizei numAttachments, const GLenum *attachments, GLint x, GLint y, GLsizei width, GLsizei height); +typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSINDIRECTPROC) (GLenum mode, const void *indirect, GLsizei drawcount, GLsizei stride); +typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSINDIRECTPROC) (GLenum mode, GLenum type, const void *indirect, GLsizei drawcount, GLsizei stride); +typedef void (APIENTRYP PFNGLGETPROGRAMINTERFACEIVPROC) (GLuint program, GLenum programInterface, GLenum pname, GLint *params); +typedef GLuint (APIENTRYP PFNGLGETPROGRAMRESOURCEINDEXPROC) (GLuint program, GLenum programInterface, const GLchar *name); +typedef void (APIENTRYP PFNGLGETPROGRAMRESOURCENAMEPROC) (GLuint program, GLenum programInterface, GLuint index, GLsizei bufSize, GLsizei *length, GLchar *name); +typedef void (APIENTRYP PFNGLGETPROGRAMRESOURCEIVPROC) (GLuint program, GLenum programInterface, GLuint index, GLsizei propCount, const GLenum *props, GLsizei count, GLsizei *length, GLint *params); +typedef GLint (APIENTRYP PFNGLGETPROGRAMRESOURCELOCATIONPROC) (GLuint program, GLenum programInterface, const GLchar *name); +typedef GLint (APIENTRYP PFNGLGETPROGRAMRESOURCELOCATIONINDEXPROC) (GLuint program, GLenum programInterface, const GLchar *name); +typedef void (APIENTRYP PFNGLSHADERSTORAGEBLOCKBINDINGPROC) (GLuint program, GLuint storageBlockIndex, GLuint storageBlockBinding); +typedef void (APIENTRYP PFNGLTEXBUFFERRANGEPROC) (GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size); +typedef void (APIENTRYP PFNGLTEXSTORAGE2DMULTISAMPLEPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); +typedef void (APIENTRYP PFNGLTEXSTORAGE3DMULTISAMPLEPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); +typedef void (APIENTRYP PFNGLTEXTUREVIEWPROC) (GLuint texture, GLenum target, GLuint origtexture, GLenum internalformat, GLuint minlevel, GLuint numlevels, GLuint minlayer, GLuint numlayers); +typedef void (APIENTRYP PFNGLBINDVERTEXBUFFERPROC) (GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride); +typedef void (APIENTRYP PFNGLVERTEXATTRIBFORMATPROC) (GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset); +typedef void (APIENTRYP PFNGLVERTEXATTRIBIFORMATPROC) (GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); +typedef void (APIENTRYP PFNGLVERTEXATTRIBLFORMATPROC) (GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); +typedef void (APIENTRYP PFNGLVERTEXATTRIBBINDINGPROC) (GLuint attribindex, GLuint bindingindex); +typedef void (APIENTRYP PFNGLVERTEXBINDINGDIVISORPROC) (GLuint bindingindex, GLuint divisor); +typedef void (APIENTRYP PFNGLDEBUGMESSAGECONTROLPROC) (GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled); +typedef void (APIENTRYP PFNGLDEBUGMESSAGEINSERTPROC) (GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *buf); +typedef void (APIENTRYP PFNGLDEBUGMESSAGECALLBACKPROC) (GLDEBUGPROC callback, const void *userParam); +typedef GLuint (APIENTRYP PFNGLGETDEBUGMESSAGELOGPROC) (GLuint count, GLsizei bufSize, GLenum *sources, GLenum *types, GLuint *ids, GLenum *severities, GLsizei *lengths, GLchar *messageLog); +typedef void (APIENTRYP PFNGLPUSHDEBUGGROUPPROC) (GLenum source, GLuint id, GLsizei length, const GLchar *message); +typedef void (APIENTRYP PFNGLPOPDEBUGGROUPPROC) (void); +typedef void (APIENTRYP PFNGLOBJECTLABELPROC) (GLenum identifier, GLuint name, GLsizei length, const GLchar *label); +typedef void (APIENTRYP PFNGLGETOBJECTLABELPROC) (GLenum identifier, GLuint name, GLsizei bufSize, GLsizei *length, GLchar *label); +typedef void (APIENTRYP PFNGLOBJECTPTRLABELPROC) (const void *ptr, GLsizei length, const GLchar *label); +typedef void (APIENTRYP PFNGLGETOBJECTPTRLABELPROC) (const void *ptr, GLsizei bufSize, GLsizei *length, GLchar *label); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glClearBufferData (GLenum target, GLenum internalformat, GLenum format, GLenum type, const void *data); +GLAPI void APIENTRY glClearBufferSubData (GLenum target, GLenum internalformat, GLintptr offset, GLsizeiptr size, GLenum format, GLenum type, const void *data); +GLAPI void APIENTRY glDispatchCompute (GLuint num_groups_x, GLuint num_groups_y, GLuint num_groups_z); +GLAPI void APIENTRY glDispatchComputeIndirect (GLintptr indirect); +GLAPI void APIENTRY glCopyImageSubData (GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei srcWidth, GLsizei srcHeight, GLsizei srcDepth); +GLAPI void APIENTRY glFramebufferParameteri (GLenum target, GLenum pname, GLint param); +GLAPI void APIENTRY glGetFramebufferParameteriv (GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetInternalformati64v (GLenum target, GLenum internalformat, GLenum pname, GLsizei count, GLint64 *params); +GLAPI void APIENTRY glInvalidateTexSubImage (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth); +GLAPI void APIENTRY glInvalidateTexImage (GLuint texture, GLint level); +GLAPI void APIENTRY glInvalidateBufferSubData (GLuint buffer, GLintptr offset, GLsizeiptr length); +GLAPI void APIENTRY glInvalidateBufferData (GLuint buffer); +GLAPI void APIENTRY glInvalidateFramebuffer (GLenum target, GLsizei numAttachments, const GLenum *attachments); +GLAPI void APIENTRY glInvalidateSubFramebuffer (GLenum target, GLsizei numAttachments, const GLenum *attachments, GLint x, GLint y, GLsizei width, GLsizei height); +GLAPI void APIENTRY glMultiDrawArraysIndirect (GLenum mode, const void *indirect, GLsizei drawcount, GLsizei stride); +GLAPI void APIENTRY glMultiDrawElementsIndirect (GLenum mode, GLenum type, const void *indirect, GLsizei drawcount, GLsizei stride); +GLAPI void APIENTRY glGetProgramInterfaceiv (GLuint program, GLenum programInterface, GLenum pname, GLint *params); +GLAPI GLuint APIENTRY glGetProgramResourceIndex (GLuint program, GLenum programInterface, const GLchar *name); +GLAPI void APIENTRY glGetProgramResourceName (GLuint program, GLenum programInterface, GLuint index, GLsizei bufSize, GLsizei *length, GLchar *name); +GLAPI void APIENTRY glGetProgramResourceiv (GLuint program, GLenum programInterface, GLuint index, GLsizei propCount, const GLenum *props, GLsizei count, GLsizei *length, GLint *params); +GLAPI GLint APIENTRY glGetProgramResourceLocation (GLuint program, GLenum programInterface, const GLchar *name); +GLAPI GLint APIENTRY glGetProgramResourceLocationIndex (GLuint program, GLenum programInterface, const GLchar *name); +GLAPI void APIENTRY glShaderStorageBlockBinding (GLuint program, GLuint storageBlockIndex, GLuint storageBlockBinding); +GLAPI void APIENTRY glTexBufferRange (GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size); +GLAPI void APIENTRY glTexStorage2DMultisample (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); +GLAPI void APIENTRY glTexStorage3DMultisample (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); +GLAPI void APIENTRY glTextureView (GLuint texture, GLenum target, GLuint origtexture, GLenum internalformat, GLuint minlevel, GLuint numlevels, GLuint minlayer, GLuint numlayers); +GLAPI void APIENTRY glBindVertexBuffer (GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride); +GLAPI void APIENTRY glVertexAttribFormat (GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset); +GLAPI void APIENTRY glVertexAttribIFormat (GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); +GLAPI void APIENTRY glVertexAttribLFormat (GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); +GLAPI void APIENTRY glVertexAttribBinding (GLuint attribindex, GLuint bindingindex); +GLAPI void APIENTRY glVertexBindingDivisor (GLuint bindingindex, GLuint divisor); +GLAPI void APIENTRY glDebugMessageControl (GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled); +GLAPI void APIENTRY glDebugMessageInsert (GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *buf); +GLAPI void APIENTRY glDebugMessageCallback (GLDEBUGPROC callback, const void *userParam); +GLAPI GLuint APIENTRY glGetDebugMessageLog (GLuint count, GLsizei bufSize, GLenum *sources, GLenum *types, GLuint *ids, GLenum *severities, GLsizei *lengths, GLchar *messageLog); +GLAPI void APIENTRY glPushDebugGroup (GLenum source, GLuint id, GLsizei length, const GLchar *message); +GLAPI void APIENTRY glPopDebugGroup (void); +GLAPI void APIENTRY glObjectLabel (GLenum identifier, GLuint name, GLsizei length, const GLchar *label); +GLAPI void APIENTRY glGetObjectLabel (GLenum identifier, GLuint name, GLsizei bufSize, GLsizei *length, GLchar *label); +GLAPI void APIENTRY glObjectPtrLabel (const void *ptr, GLsizei length, const GLchar *label); +GLAPI void APIENTRY glGetObjectPtrLabel (const void *ptr, GLsizei bufSize, GLsizei *length, GLchar *label); +#endif +#endif /* GL_VERSION_4_3 */ + +#ifndef GL_VERSION_4_4 +#define GL_VERSION_4_4 1 +#define GL_MAX_VERTEX_ATTRIB_STRIDE 0x82E5 +#define GL_PRIMITIVE_RESTART_FOR_PATCHES_SUPPORTED 0x8221 +#define GL_TEXTURE_BUFFER_BINDING 0x8C2A +#define GL_MAP_PERSISTENT_BIT 0x0040 +#define GL_MAP_COHERENT_BIT 0x0080 +#define GL_DYNAMIC_STORAGE_BIT 0x0100 +#define GL_CLIENT_STORAGE_BIT 0x0200 +#define GL_CLIENT_MAPPED_BUFFER_BARRIER_BIT 0x00004000 +#define GL_BUFFER_IMMUTABLE_STORAGE 0x821F +#define GL_BUFFER_STORAGE_FLAGS 0x8220 +#define GL_CLEAR_TEXTURE 0x9365 +#define GL_LOCATION_COMPONENT 0x934A +#define GL_TRANSFORM_FEEDBACK_BUFFER_INDEX 0x934B +#define GL_TRANSFORM_FEEDBACK_BUFFER_STRIDE 0x934C +#define GL_QUERY_BUFFER 0x9192 +#define GL_QUERY_BUFFER_BARRIER_BIT 0x00008000 +#define GL_QUERY_BUFFER_BINDING 0x9193 +#define GL_QUERY_RESULT_NO_WAIT 0x9194 +#define GL_MIRROR_CLAMP_TO_EDGE 0x8743 +typedef void (APIENTRYP PFNGLBUFFERSTORAGEPROC) (GLenum target, GLsizeiptr size, const void *data, GLbitfield flags); +typedef void (APIENTRYP PFNGLCLEARTEXIMAGEPROC) (GLuint texture, GLint level, GLenum format, GLenum type, const void *data); +typedef void (APIENTRYP PFNGLCLEARTEXSUBIMAGEPROC) (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *data); +typedef void (APIENTRYP PFNGLBINDBUFFERSBASEPROC) (GLenum target, GLuint first, GLsizei count, const GLuint *buffers); +typedef void (APIENTRYP PFNGLBINDBUFFERSRANGEPROC) (GLenum target, GLuint first, GLsizei count, const GLuint *buffers, const GLintptr *offsets, const GLsizeiptr *sizes); +typedef void (APIENTRYP PFNGLBINDTEXTURESPROC) (GLuint first, GLsizei count, const GLuint *textures); +typedef void (APIENTRYP PFNGLBINDSAMPLERSPROC) (GLuint first, GLsizei count, const GLuint *samplers); +typedef void (APIENTRYP PFNGLBINDIMAGETEXTURESPROC) (GLuint first, GLsizei count, const GLuint *textures); +typedef void (APIENTRYP PFNGLBINDVERTEXBUFFERSPROC) (GLuint first, GLsizei count, const GLuint *buffers, const GLintptr *offsets, const GLsizei *strides); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBufferStorage (GLenum target, GLsizeiptr size, const void *data, GLbitfield flags); +GLAPI void APIENTRY glClearTexImage (GLuint texture, GLint level, GLenum format, GLenum type, const void *data); +GLAPI void APIENTRY glClearTexSubImage (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *data); +GLAPI void APIENTRY glBindBuffersBase (GLenum target, GLuint first, GLsizei count, const GLuint *buffers); +GLAPI void APIENTRY glBindBuffersRange (GLenum target, GLuint first, GLsizei count, const GLuint *buffers, const GLintptr *offsets, const GLsizeiptr *sizes); +GLAPI void APIENTRY glBindTextures (GLuint first, GLsizei count, const GLuint *textures); +GLAPI void APIENTRY glBindSamplers (GLuint first, GLsizei count, const GLuint *samplers); +GLAPI void APIENTRY glBindImageTextures (GLuint first, GLsizei count, const GLuint *textures); +GLAPI void APIENTRY glBindVertexBuffers (GLuint first, GLsizei count, const GLuint *buffers, const GLintptr *offsets, const GLsizei *strides); +#endif +#endif /* GL_VERSION_4_4 */ + +#ifndef GL_VERSION_4_5 +#define GL_VERSION_4_5 1 +#define GL_CONTEXT_LOST 0x0507 +#define GL_NEGATIVE_ONE_TO_ONE 0x935E +#define GL_ZERO_TO_ONE 0x935F +#define GL_CLIP_ORIGIN 0x935C +#define GL_CLIP_DEPTH_MODE 0x935D +#define GL_QUERY_WAIT_INVERTED 0x8E17 +#define GL_QUERY_NO_WAIT_INVERTED 0x8E18 +#define GL_QUERY_BY_REGION_WAIT_INVERTED 0x8E19 +#define GL_QUERY_BY_REGION_NO_WAIT_INVERTED 0x8E1A +#define GL_MAX_CULL_DISTANCES 0x82F9 +#define GL_MAX_COMBINED_CLIP_AND_CULL_DISTANCES 0x82FA +#define GL_TEXTURE_TARGET 0x1006 +#define GL_QUERY_TARGET 0x82EA +#define GL_GUILTY_CONTEXT_RESET 0x8253 +#define GL_INNOCENT_CONTEXT_RESET 0x8254 +#define GL_UNKNOWN_CONTEXT_RESET 0x8255 +#define GL_RESET_NOTIFICATION_STRATEGY 0x8256 +#define GL_LOSE_CONTEXT_ON_RESET 0x8252 +#define GL_NO_RESET_NOTIFICATION 0x8261 +#define GL_CONTEXT_FLAG_ROBUST_ACCESS_BIT 0x00000004 +#define GL_COLOR_TABLE 0x80D0 +#define GL_POST_CONVOLUTION_COLOR_TABLE 0x80D1 +#define GL_POST_COLOR_MATRIX_COLOR_TABLE 0x80D2 +#define GL_PROXY_COLOR_TABLE 0x80D3 +#define GL_PROXY_POST_CONVOLUTION_COLOR_TABLE 0x80D4 +#define GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE 0x80D5 +#define GL_CONVOLUTION_1D 0x8010 +#define GL_CONVOLUTION_2D 0x8011 +#define GL_SEPARABLE_2D 0x8012 +#define GL_HISTOGRAM 0x8024 +#define GL_PROXY_HISTOGRAM 0x8025 +#define GL_MINMAX 0x802E +#define GL_CONTEXT_RELEASE_BEHAVIOR 0x82FB +#define GL_CONTEXT_RELEASE_BEHAVIOR_FLUSH 0x82FC +typedef void (APIENTRYP PFNGLCLIPCONTROLPROC) (GLenum origin, GLenum depth); +typedef void (APIENTRYP PFNGLCREATETRANSFORMFEEDBACKSPROC) (GLsizei n, GLuint *ids); +typedef void (APIENTRYP PFNGLTRANSFORMFEEDBACKBUFFERBASEPROC) (GLuint xfb, GLuint index, GLuint buffer); +typedef void (APIENTRYP PFNGLTRANSFORMFEEDBACKBUFFERRANGEPROC) (GLuint xfb, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); +typedef void (APIENTRYP PFNGLGETTRANSFORMFEEDBACKIVPROC) (GLuint xfb, GLenum pname, GLint *param); +typedef void (APIENTRYP PFNGLGETTRANSFORMFEEDBACKI_VPROC) (GLuint xfb, GLenum pname, GLuint index, GLint *param); +typedef void (APIENTRYP PFNGLGETTRANSFORMFEEDBACKI64_VPROC) (GLuint xfb, GLenum pname, GLuint index, GLint64 *param); +typedef void (APIENTRYP PFNGLCREATEBUFFERSPROC) (GLsizei n, GLuint *buffers); +typedef void (APIENTRYP PFNGLNAMEDBUFFERSTORAGEPROC) (GLuint buffer, GLsizeiptr size, const void *data, GLbitfield flags); +typedef void (APIENTRYP PFNGLNAMEDBUFFERDATAPROC) (GLuint buffer, GLsizeiptr size, const void *data, GLenum usage); +typedef void (APIENTRYP PFNGLNAMEDBUFFERSUBDATAPROC) (GLuint buffer, GLintptr offset, GLsizeiptr size, const void *data); +typedef void (APIENTRYP PFNGLCOPYNAMEDBUFFERSUBDATAPROC) (GLuint readBuffer, GLuint writeBuffer, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); +typedef void (APIENTRYP PFNGLCLEARNAMEDBUFFERDATAPROC) (GLuint buffer, GLenum internalformat, GLenum format, GLenum type, const void *data); +typedef void (APIENTRYP PFNGLCLEARNAMEDBUFFERSUBDATAPROC) (GLuint buffer, GLenum internalformat, GLintptr offset, GLsizeiptr size, GLenum format, GLenum type, const void *data); +typedef void *(APIENTRYP PFNGLMAPNAMEDBUFFERPROC) (GLuint buffer, GLenum access); +typedef void *(APIENTRYP PFNGLMAPNAMEDBUFFERRANGEPROC) (GLuint buffer, GLintptr offset, GLsizeiptr length, GLbitfield access); +typedef GLboolean (APIENTRYP PFNGLUNMAPNAMEDBUFFERPROC) (GLuint buffer); +typedef void (APIENTRYP PFNGLFLUSHMAPPEDNAMEDBUFFERRANGEPROC) (GLuint buffer, GLintptr offset, GLsizeiptr length); +typedef void (APIENTRYP PFNGLGETNAMEDBUFFERPARAMETERIVPROC) (GLuint buffer, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETNAMEDBUFFERPARAMETERI64VPROC) (GLuint buffer, GLenum pname, GLint64 *params); +typedef void (APIENTRYP PFNGLGETNAMEDBUFFERPOINTERVPROC) (GLuint buffer, GLenum pname, void **params); +typedef void (APIENTRYP PFNGLGETNAMEDBUFFERSUBDATAPROC) (GLuint buffer, GLintptr offset, GLsizeiptr size, void *data); +typedef void (APIENTRYP PFNGLCREATEFRAMEBUFFERSPROC) (GLsizei n, GLuint *framebuffers); +typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERRENDERBUFFERPROC) (GLuint framebuffer, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); +typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERPARAMETERIPROC) (GLuint framebuffer, GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERTEXTUREPROC) (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level); +typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERTEXTURELAYERPROC) (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLint layer); +typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERDRAWBUFFERPROC) (GLuint framebuffer, GLenum buf); +typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERDRAWBUFFERSPROC) (GLuint framebuffer, GLsizei n, const GLenum *bufs); +typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERREADBUFFERPROC) (GLuint framebuffer, GLenum src); +typedef void (APIENTRYP PFNGLINVALIDATENAMEDFRAMEBUFFERDATAPROC) (GLuint framebuffer, GLsizei numAttachments, const GLenum *attachments); +typedef void (APIENTRYP PFNGLINVALIDATENAMEDFRAMEBUFFERSUBDATAPROC) (GLuint framebuffer, GLsizei numAttachments, const GLenum *attachments, GLint x, GLint y, GLsizei width, GLsizei height); +typedef void (APIENTRYP PFNGLCLEARNAMEDFRAMEBUFFERIVPROC) (GLuint framebuffer, GLenum buffer, GLint drawbuffer, const GLint *value); +typedef void (APIENTRYP PFNGLCLEARNAMEDFRAMEBUFFERUIVPROC) (GLuint framebuffer, GLenum buffer, GLint drawbuffer, const GLuint *value); +typedef void (APIENTRYP PFNGLCLEARNAMEDFRAMEBUFFERFVPROC) (GLuint framebuffer, GLenum buffer, GLint drawbuffer, const GLfloat *value); +typedef void (APIENTRYP PFNGLCLEARNAMEDFRAMEBUFFERFIPROC) (GLuint framebuffer, GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil); +typedef void (APIENTRYP PFNGLBLITNAMEDFRAMEBUFFERPROC) (GLuint readFramebuffer, GLuint drawFramebuffer, GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); +typedef GLenum (APIENTRYP PFNGLCHECKNAMEDFRAMEBUFFERSTATUSPROC) (GLuint framebuffer, GLenum target); +typedef void (APIENTRYP PFNGLGETNAMEDFRAMEBUFFERPARAMETERIVPROC) (GLuint framebuffer, GLenum pname, GLint *param); +typedef void (APIENTRYP PFNGLGETNAMEDFRAMEBUFFERATTACHMENTPARAMETERIVPROC) (GLuint framebuffer, GLenum attachment, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLCREATERENDERBUFFERSPROC) (GLsizei n, GLuint *renderbuffers); +typedef void (APIENTRYP PFNGLNAMEDRENDERBUFFERSTORAGEPROC) (GLuint renderbuffer, GLenum internalformat, GLsizei width, GLsizei height); +typedef void (APIENTRYP PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLEPROC) (GLuint renderbuffer, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); +typedef void (APIENTRYP PFNGLGETNAMEDRENDERBUFFERPARAMETERIVPROC) (GLuint renderbuffer, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLCREATETEXTURESPROC) (GLenum target, GLsizei n, GLuint *textures); +typedef void (APIENTRYP PFNGLTEXTUREBUFFERPROC) (GLuint texture, GLenum internalformat, GLuint buffer); +typedef void (APIENTRYP PFNGLTEXTUREBUFFERRANGEPROC) (GLuint texture, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size); +typedef void (APIENTRYP PFNGLTEXTURESTORAGE1DPROC) (GLuint texture, GLsizei levels, GLenum internalformat, GLsizei width); +typedef void (APIENTRYP PFNGLTEXTURESTORAGE2DPROC) (GLuint texture, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); +typedef void (APIENTRYP PFNGLTEXTURESTORAGE3DPROC) (GLuint texture, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); +typedef void (APIENTRYP PFNGLTEXTURESTORAGE2DMULTISAMPLEPROC) (GLuint texture, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); +typedef void (APIENTRYP PFNGLTEXTURESTORAGE3DMULTISAMPLEPROC) (GLuint texture, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); +typedef void (APIENTRYP PFNGLTEXTURESUBIMAGE1DPROC) (GLuint texture, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void *pixels); +typedef void (APIENTRYP PFNGLTEXTURESUBIMAGE2DPROC) (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels); +typedef void (APIENTRYP PFNGLTEXTURESUBIMAGE3DPROC) (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXTURESUBIMAGE1DPROC) (GLuint texture, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *data); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXTURESUBIMAGE2DPROC) (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *data); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXTURESUBIMAGE3DPROC) (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *data); +typedef void (APIENTRYP PFNGLCOPYTEXTURESUBIMAGE1DPROC) (GLuint texture, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); +typedef void (APIENTRYP PFNGLCOPYTEXTURESUBIMAGE2DPROC) (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); +typedef void (APIENTRYP PFNGLCOPYTEXTURESUBIMAGE3DPROC) (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); +typedef void (APIENTRYP PFNGLTEXTUREPARAMETERFPROC) (GLuint texture, GLenum pname, GLfloat param); +typedef void (APIENTRYP PFNGLTEXTUREPARAMETERFVPROC) (GLuint texture, GLenum pname, const GLfloat *param); +typedef void (APIENTRYP PFNGLTEXTUREPARAMETERIPROC) (GLuint texture, GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLTEXTUREPARAMETERIIVPROC) (GLuint texture, GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLTEXTUREPARAMETERIUIVPROC) (GLuint texture, GLenum pname, const GLuint *params); +typedef void (APIENTRYP PFNGLTEXTUREPARAMETERIVPROC) (GLuint texture, GLenum pname, const GLint *param); +typedef void (APIENTRYP PFNGLGENERATETEXTUREMIPMAPPROC) (GLuint texture); +typedef void (APIENTRYP PFNGLBINDTEXTUREUNITPROC) (GLuint unit, GLuint texture); +typedef void (APIENTRYP PFNGLGETTEXTUREIMAGEPROC) (GLuint texture, GLint level, GLenum format, GLenum type, GLsizei bufSize, void *pixels); +typedef void (APIENTRYP PFNGLGETCOMPRESSEDTEXTUREIMAGEPROC) (GLuint texture, GLint level, GLsizei bufSize, void *pixels); +typedef void (APIENTRYP PFNGLGETTEXTURELEVELPARAMETERFVPROC) (GLuint texture, GLint level, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETTEXTURELEVELPARAMETERIVPROC) (GLuint texture, GLint level, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETTEXTUREPARAMETERFVPROC) (GLuint texture, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETTEXTUREPARAMETERIIVPROC) (GLuint texture, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETTEXTUREPARAMETERIUIVPROC) (GLuint texture, GLenum pname, GLuint *params); +typedef void (APIENTRYP PFNGLGETTEXTUREPARAMETERIVPROC) (GLuint texture, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLCREATEVERTEXARRAYSPROC) (GLsizei n, GLuint *arrays); +typedef void (APIENTRYP PFNGLDISABLEVERTEXARRAYATTRIBPROC) (GLuint vaobj, GLuint index); +typedef void (APIENTRYP PFNGLENABLEVERTEXARRAYATTRIBPROC) (GLuint vaobj, GLuint index); +typedef void (APIENTRYP PFNGLVERTEXARRAYELEMENTBUFFERPROC) (GLuint vaobj, GLuint buffer); +typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXBUFFERPROC) (GLuint vaobj, GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride); +typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXBUFFERSPROC) (GLuint vaobj, GLuint first, GLsizei count, const GLuint *buffers, const GLintptr *offsets, const GLsizei *strides); +typedef void (APIENTRYP PFNGLVERTEXARRAYATTRIBBINDINGPROC) (GLuint vaobj, GLuint attribindex, GLuint bindingindex); +typedef void (APIENTRYP PFNGLVERTEXARRAYATTRIBFORMATPROC) (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset); +typedef void (APIENTRYP PFNGLVERTEXARRAYATTRIBIFORMATPROC) (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); +typedef void (APIENTRYP PFNGLVERTEXARRAYATTRIBLFORMATPROC) (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); +typedef void (APIENTRYP PFNGLVERTEXARRAYBINDINGDIVISORPROC) (GLuint vaobj, GLuint bindingindex, GLuint divisor); +typedef void (APIENTRYP PFNGLGETVERTEXARRAYIVPROC) (GLuint vaobj, GLenum pname, GLint *param); +typedef void (APIENTRYP PFNGLGETVERTEXARRAYINDEXEDIVPROC) (GLuint vaobj, GLuint index, GLenum pname, GLint *param); +typedef void (APIENTRYP PFNGLGETVERTEXARRAYINDEXED64IVPROC) (GLuint vaobj, GLuint index, GLenum pname, GLint64 *param); +typedef void (APIENTRYP PFNGLCREATESAMPLERSPROC) (GLsizei n, GLuint *samplers); +typedef void (APIENTRYP PFNGLCREATEPROGRAMPIPELINESPROC) (GLsizei n, GLuint *pipelines); +typedef void (APIENTRYP PFNGLCREATEQUERIESPROC) (GLenum target, GLsizei n, GLuint *ids); +typedef void (APIENTRYP PFNGLGETQUERYBUFFEROBJECTI64VPROC) (GLuint id, GLuint buffer, GLenum pname, GLintptr offset); +typedef void (APIENTRYP PFNGLGETQUERYBUFFEROBJECTIVPROC) (GLuint id, GLuint buffer, GLenum pname, GLintptr offset); +typedef void (APIENTRYP PFNGLGETQUERYBUFFEROBJECTUI64VPROC) (GLuint id, GLuint buffer, GLenum pname, GLintptr offset); +typedef void (APIENTRYP PFNGLGETQUERYBUFFEROBJECTUIVPROC) (GLuint id, GLuint buffer, GLenum pname, GLintptr offset); +typedef void (APIENTRYP PFNGLMEMORYBARRIERBYREGIONPROC) (GLbitfield barriers); +typedef void (APIENTRYP PFNGLGETTEXTURESUBIMAGEPROC) (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, GLsizei bufSize, void *pixels); +typedef void (APIENTRYP PFNGLGETCOMPRESSEDTEXTURESUBIMAGEPROC) (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLsizei bufSize, void *pixels); +typedef GLenum (APIENTRYP PFNGLGETGRAPHICSRESETSTATUSPROC) (void); +typedef void (APIENTRYP PFNGLGETNCOMPRESSEDTEXIMAGEPROC) (GLenum target, GLint lod, GLsizei bufSize, void *pixels); +typedef void (APIENTRYP PFNGLGETNTEXIMAGEPROC) (GLenum target, GLint level, GLenum format, GLenum type, GLsizei bufSize, void *pixels); +typedef void (APIENTRYP PFNGLGETNUNIFORMDVPROC) (GLuint program, GLint location, GLsizei bufSize, GLdouble *params); +typedef void (APIENTRYP PFNGLGETNUNIFORMFVPROC) (GLuint program, GLint location, GLsizei bufSize, GLfloat *params); +typedef void (APIENTRYP PFNGLGETNUNIFORMIVPROC) (GLuint program, GLint location, GLsizei bufSize, GLint *params); +typedef void (APIENTRYP PFNGLGETNUNIFORMUIVPROC) (GLuint program, GLint location, GLsizei bufSize, GLuint *params); +typedef void (APIENTRYP PFNGLREADNPIXELSPROC) (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, void *data); +typedef void (APIENTRYP PFNGLGETNMAPDVPROC) (GLenum target, GLenum query, GLsizei bufSize, GLdouble *v); +typedef void (APIENTRYP PFNGLGETNMAPFVPROC) (GLenum target, GLenum query, GLsizei bufSize, GLfloat *v); +typedef void (APIENTRYP PFNGLGETNMAPIVPROC) (GLenum target, GLenum query, GLsizei bufSize, GLint *v); +typedef void (APIENTRYP PFNGLGETNPIXELMAPFVPROC) (GLenum map, GLsizei bufSize, GLfloat *values); +typedef void (APIENTRYP PFNGLGETNPIXELMAPUIVPROC) (GLenum map, GLsizei bufSize, GLuint *values); +typedef void (APIENTRYP PFNGLGETNPIXELMAPUSVPROC) (GLenum map, GLsizei bufSize, GLushort *values); +typedef void (APIENTRYP PFNGLGETNPOLYGONSTIPPLEPROC) (GLsizei bufSize, GLubyte *pattern); +typedef void (APIENTRYP PFNGLGETNCOLORTABLEPROC) (GLenum target, GLenum format, GLenum type, GLsizei bufSize, void *table); +typedef void (APIENTRYP PFNGLGETNCONVOLUTIONFILTERPROC) (GLenum target, GLenum format, GLenum type, GLsizei bufSize, void *image); +typedef void (APIENTRYP PFNGLGETNSEPARABLEFILTERPROC) (GLenum target, GLenum format, GLenum type, GLsizei rowBufSize, void *row, GLsizei columnBufSize, void *column, void *span); +typedef void (APIENTRYP PFNGLGETNHISTOGRAMPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, void *values); +typedef void (APIENTRYP PFNGLGETNMINMAXPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, void *values); +typedef void (APIENTRYP PFNGLTEXTUREBARRIERPROC) (void); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glClipControl (GLenum origin, GLenum depth); +GLAPI void APIENTRY glCreateTransformFeedbacks (GLsizei n, GLuint *ids); +GLAPI void APIENTRY glTransformFeedbackBufferBase (GLuint xfb, GLuint index, GLuint buffer); +GLAPI void APIENTRY glTransformFeedbackBufferRange (GLuint xfb, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); +GLAPI void APIENTRY glGetTransformFeedbackiv (GLuint xfb, GLenum pname, GLint *param); +GLAPI void APIENTRY glGetTransformFeedbacki_v (GLuint xfb, GLenum pname, GLuint index, GLint *param); +GLAPI void APIENTRY glGetTransformFeedbacki64_v (GLuint xfb, GLenum pname, GLuint index, GLint64 *param); +GLAPI void APIENTRY glCreateBuffers (GLsizei n, GLuint *buffers); +GLAPI void APIENTRY glNamedBufferStorage (GLuint buffer, GLsizeiptr size, const void *data, GLbitfield flags); +GLAPI void APIENTRY glNamedBufferData (GLuint buffer, GLsizeiptr size, const void *data, GLenum usage); +GLAPI void APIENTRY glNamedBufferSubData (GLuint buffer, GLintptr offset, GLsizeiptr size, const void *data); +GLAPI void APIENTRY glCopyNamedBufferSubData (GLuint readBuffer, GLuint writeBuffer, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); +GLAPI void APIENTRY glClearNamedBufferData (GLuint buffer, GLenum internalformat, GLenum format, GLenum type, const void *data); +GLAPI void APIENTRY glClearNamedBufferSubData (GLuint buffer, GLenum internalformat, GLintptr offset, GLsizeiptr size, GLenum format, GLenum type, const void *data); +GLAPI void *APIENTRY glMapNamedBuffer (GLuint buffer, GLenum access); +GLAPI void *APIENTRY glMapNamedBufferRange (GLuint buffer, GLintptr offset, GLsizeiptr length, GLbitfield access); +GLAPI GLboolean APIENTRY glUnmapNamedBuffer (GLuint buffer); +GLAPI void APIENTRY glFlushMappedNamedBufferRange (GLuint buffer, GLintptr offset, GLsizeiptr length); +GLAPI void APIENTRY glGetNamedBufferParameteriv (GLuint buffer, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetNamedBufferParameteri64v (GLuint buffer, GLenum pname, GLint64 *params); +GLAPI void APIENTRY glGetNamedBufferPointerv (GLuint buffer, GLenum pname, void **params); +GLAPI void APIENTRY glGetNamedBufferSubData (GLuint buffer, GLintptr offset, GLsizeiptr size, void *data); +GLAPI void APIENTRY glCreateFramebuffers (GLsizei n, GLuint *framebuffers); +GLAPI void APIENTRY glNamedFramebufferRenderbuffer (GLuint framebuffer, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); +GLAPI void APIENTRY glNamedFramebufferParameteri (GLuint framebuffer, GLenum pname, GLint param); +GLAPI void APIENTRY glNamedFramebufferTexture (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level); +GLAPI void APIENTRY glNamedFramebufferTextureLayer (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLint layer); +GLAPI void APIENTRY glNamedFramebufferDrawBuffer (GLuint framebuffer, GLenum buf); +GLAPI void APIENTRY glNamedFramebufferDrawBuffers (GLuint framebuffer, GLsizei n, const GLenum *bufs); +GLAPI void APIENTRY glNamedFramebufferReadBuffer (GLuint framebuffer, GLenum src); +GLAPI void APIENTRY glInvalidateNamedFramebufferData (GLuint framebuffer, GLsizei numAttachments, const GLenum *attachments); +GLAPI void APIENTRY glInvalidateNamedFramebufferSubData (GLuint framebuffer, GLsizei numAttachments, const GLenum *attachments, GLint x, GLint y, GLsizei width, GLsizei height); +GLAPI void APIENTRY glClearNamedFramebufferiv (GLuint framebuffer, GLenum buffer, GLint drawbuffer, const GLint *value); +GLAPI void APIENTRY glClearNamedFramebufferuiv (GLuint framebuffer, GLenum buffer, GLint drawbuffer, const GLuint *value); +GLAPI void APIENTRY glClearNamedFramebufferfv (GLuint framebuffer, GLenum buffer, GLint drawbuffer, const GLfloat *value); +GLAPI void APIENTRY glClearNamedFramebufferfi (GLuint framebuffer, GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil); +GLAPI void APIENTRY glBlitNamedFramebuffer (GLuint readFramebuffer, GLuint drawFramebuffer, GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); +GLAPI GLenum APIENTRY glCheckNamedFramebufferStatus (GLuint framebuffer, GLenum target); +GLAPI void APIENTRY glGetNamedFramebufferParameteriv (GLuint framebuffer, GLenum pname, GLint *param); +GLAPI void APIENTRY glGetNamedFramebufferAttachmentParameteriv (GLuint framebuffer, GLenum attachment, GLenum pname, GLint *params); +GLAPI void APIENTRY glCreateRenderbuffers (GLsizei n, GLuint *renderbuffers); +GLAPI void APIENTRY glNamedRenderbufferStorage (GLuint renderbuffer, GLenum internalformat, GLsizei width, GLsizei height); +GLAPI void APIENTRY glNamedRenderbufferStorageMultisample (GLuint renderbuffer, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); +GLAPI void APIENTRY glGetNamedRenderbufferParameteriv (GLuint renderbuffer, GLenum pname, GLint *params); +GLAPI void APIENTRY glCreateTextures (GLenum target, GLsizei n, GLuint *textures); +GLAPI void APIENTRY glTextureBuffer (GLuint texture, GLenum internalformat, GLuint buffer); +GLAPI void APIENTRY glTextureBufferRange (GLuint texture, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size); +GLAPI void APIENTRY glTextureStorage1D (GLuint texture, GLsizei levels, GLenum internalformat, GLsizei width); +GLAPI void APIENTRY glTextureStorage2D (GLuint texture, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); +GLAPI void APIENTRY glTextureStorage3D (GLuint texture, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); +GLAPI void APIENTRY glTextureStorage2DMultisample (GLuint texture, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); +GLAPI void APIENTRY glTextureStorage3DMultisample (GLuint texture, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); +GLAPI void APIENTRY glTextureSubImage1D (GLuint texture, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void *pixels); +GLAPI void APIENTRY glTextureSubImage2D (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels); +GLAPI void APIENTRY glTextureSubImage3D (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels); +GLAPI void APIENTRY glCompressedTextureSubImage1D (GLuint texture, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *data); +GLAPI void APIENTRY glCompressedTextureSubImage2D (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *data); +GLAPI void APIENTRY glCompressedTextureSubImage3D (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *data); +GLAPI void APIENTRY glCopyTextureSubImage1D (GLuint texture, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); +GLAPI void APIENTRY glCopyTextureSubImage2D (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); +GLAPI void APIENTRY glCopyTextureSubImage3D (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); +GLAPI void APIENTRY glTextureParameterf (GLuint texture, GLenum pname, GLfloat param); +GLAPI void APIENTRY glTextureParameterfv (GLuint texture, GLenum pname, const GLfloat *param); +GLAPI void APIENTRY glTextureParameteri (GLuint texture, GLenum pname, GLint param); +GLAPI void APIENTRY glTextureParameterIiv (GLuint texture, GLenum pname, const GLint *params); +GLAPI void APIENTRY glTextureParameterIuiv (GLuint texture, GLenum pname, const GLuint *params); +GLAPI void APIENTRY glTextureParameteriv (GLuint texture, GLenum pname, const GLint *param); +GLAPI void APIENTRY glGenerateTextureMipmap (GLuint texture); +GLAPI void APIENTRY glBindTextureUnit (GLuint unit, GLuint texture); +GLAPI void APIENTRY glGetTextureImage (GLuint texture, GLint level, GLenum format, GLenum type, GLsizei bufSize, void *pixels); +GLAPI void APIENTRY glGetCompressedTextureImage (GLuint texture, GLint level, GLsizei bufSize, void *pixels); +GLAPI void APIENTRY glGetTextureLevelParameterfv (GLuint texture, GLint level, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetTextureLevelParameteriv (GLuint texture, GLint level, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetTextureParameterfv (GLuint texture, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetTextureParameterIiv (GLuint texture, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetTextureParameterIuiv (GLuint texture, GLenum pname, GLuint *params); +GLAPI void APIENTRY glGetTextureParameteriv (GLuint texture, GLenum pname, GLint *params); +GLAPI void APIENTRY glCreateVertexArrays (GLsizei n, GLuint *arrays); +GLAPI void APIENTRY glDisableVertexArrayAttrib (GLuint vaobj, GLuint index); +GLAPI void APIENTRY glEnableVertexArrayAttrib (GLuint vaobj, GLuint index); +GLAPI void APIENTRY glVertexArrayElementBuffer (GLuint vaobj, GLuint buffer); +GLAPI void APIENTRY glVertexArrayVertexBuffer (GLuint vaobj, GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride); +GLAPI void APIENTRY glVertexArrayVertexBuffers (GLuint vaobj, GLuint first, GLsizei count, const GLuint *buffers, const GLintptr *offsets, const GLsizei *strides); +GLAPI void APIENTRY glVertexArrayAttribBinding (GLuint vaobj, GLuint attribindex, GLuint bindingindex); +GLAPI void APIENTRY glVertexArrayAttribFormat (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset); +GLAPI void APIENTRY glVertexArrayAttribIFormat (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); +GLAPI void APIENTRY glVertexArrayAttribLFormat (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); +GLAPI void APIENTRY glVertexArrayBindingDivisor (GLuint vaobj, GLuint bindingindex, GLuint divisor); +GLAPI void APIENTRY glGetVertexArrayiv (GLuint vaobj, GLenum pname, GLint *param); +GLAPI void APIENTRY glGetVertexArrayIndexediv (GLuint vaobj, GLuint index, GLenum pname, GLint *param); +GLAPI void APIENTRY glGetVertexArrayIndexed64iv (GLuint vaobj, GLuint index, GLenum pname, GLint64 *param); +GLAPI void APIENTRY glCreateSamplers (GLsizei n, GLuint *samplers); +GLAPI void APIENTRY glCreateProgramPipelines (GLsizei n, GLuint *pipelines); +GLAPI void APIENTRY glCreateQueries (GLenum target, GLsizei n, GLuint *ids); +GLAPI void APIENTRY glGetQueryBufferObjecti64v (GLuint id, GLuint buffer, GLenum pname, GLintptr offset); +GLAPI void APIENTRY glGetQueryBufferObjectiv (GLuint id, GLuint buffer, GLenum pname, GLintptr offset); +GLAPI void APIENTRY glGetQueryBufferObjectui64v (GLuint id, GLuint buffer, GLenum pname, GLintptr offset); +GLAPI void APIENTRY glGetQueryBufferObjectuiv (GLuint id, GLuint buffer, GLenum pname, GLintptr offset); +GLAPI void APIENTRY glMemoryBarrierByRegion (GLbitfield barriers); +GLAPI void APIENTRY glGetTextureSubImage (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, GLsizei bufSize, void *pixels); +GLAPI void APIENTRY glGetCompressedTextureSubImage (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLsizei bufSize, void *pixels); +GLAPI GLenum APIENTRY glGetGraphicsResetStatus (void); +GLAPI void APIENTRY glGetnCompressedTexImage (GLenum target, GLint lod, GLsizei bufSize, void *pixels); +GLAPI void APIENTRY glGetnTexImage (GLenum target, GLint level, GLenum format, GLenum type, GLsizei bufSize, void *pixels); +GLAPI void APIENTRY glGetnUniformdv (GLuint program, GLint location, GLsizei bufSize, GLdouble *params); +GLAPI void APIENTRY glGetnUniformfv (GLuint program, GLint location, GLsizei bufSize, GLfloat *params); +GLAPI void APIENTRY glGetnUniformiv (GLuint program, GLint location, GLsizei bufSize, GLint *params); +GLAPI void APIENTRY glGetnUniformuiv (GLuint program, GLint location, GLsizei bufSize, GLuint *params); +GLAPI void APIENTRY glReadnPixels (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, void *data); +GLAPI void APIENTRY glGetnMapdv (GLenum target, GLenum query, GLsizei bufSize, GLdouble *v); +GLAPI void APIENTRY glGetnMapfv (GLenum target, GLenum query, GLsizei bufSize, GLfloat *v); +GLAPI void APIENTRY glGetnMapiv (GLenum target, GLenum query, GLsizei bufSize, GLint *v); +GLAPI void APIENTRY glGetnPixelMapfv (GLenum map, GLsizei bufSize, GLfloat *values); +GLAPI void APIENTRY glGetnPixelMapuiv (GLenum map, GLsizei bufSize, GLuint *values); +GLAPI void APIENTRY glGetnPixelMapusv (GLenum map, GLsizei bufSize, GLushort *values); +GLAPI void APIENTRY glGetnPolygonStipple (GLsizei bufSize, GLubyte *pattern); +GLAPI void APIENTRY glGetnColorTable (GLenum target, GLenum format, GLenum type, GLsizei bufSize, void *table); +GLAPI void APIENTRY glGetnConvolutionFilter (GLenum target, GLenum format, GLenum type, GLsizei bufSize, void *image); +GLAPI void APIENTRY glGetnSeparableFilter (GLenum target, GLenum format, GLenum type, GLsizei rowBufSize, void *row, GLsizei columnBufSize, void *column, void *span); +GLAPI void APIENTRY glGetnHistogram (GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, void *values); +GLAPI void APIENTRY glGetnMinmax (GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, void *values); +GLAPI void APIENTRY glTextureBarrier (void); +#endif +#endif /* GL_VERSION_4_5 */ + +#ifndef GL_VERSION_4_6 +#define GL_VERSION_4_6 1 +#define GL_SHADER_BINARY_FORMAT_SPIR_V 0x9551 +#define GL_SPIR_V_BINARY 0x9552 +#define GL_PARAMETER_BUFFER 0x80EE +#define GL_PARAMETER_BUFFER_BINDING 0x80EF +#define GL_CONTEXT_FLAG_NO_ERROR_BIT 0x00000008 +#define GL_VERTICES_SUBMITTED 0x82EE +#define GL_PRIMITIVES_SUBMITTED 0x82EF +#define GL_VERTEX_SHADER_INVOCATIONS 0x82F0 +#define GL_TESS_CONTROL_SHADER_PATCHES 0x82F1 +#define GL_TESS_EVALUATION_SHADER_INVOCATIONS 0x82F2 +#define GL_GEOMETRY_SHADER_PRIMITIVES_EMITTED 0x82F3 +#define GL_FRAGMENT_SHADER_INVOCATIONS 0x82F4 +#define GL_COMPUTE_SHADER_INVOCATIONS 0x82F5 +#define GL_CLIPPING_INPUT_PRIMITIVES 0x82F6 +#define GL_CLIPPING_OUTPUT_PRIMITIVES 0x82F7 +#define GL_POLYGON_OFFSET_CLAMP 0x8E1B +#define GL_SPIR_V_EXTENSIONS 0x9553 +#define GL_NUM_SPIR_V_EXTENSIONS 0x9554 +#define GL_TEXTURE_MAX_ANISOTROPY 0x84FE +#define GL_MAX_TEXTURE_MAX_ANISOTROPY 0x84FF +#define GL_TRANSFORM_FEEDBACK_OVERFLOW 0x82EC +#define GL_TRANSFORM_FEEDBACK_STREAM_OVERFLOW 0x82ED +typedef void (APIENTRYP PFNGLSPECIALIZESHADERPROC) (GLuint shader, const GLchar *pEntryPoint, GLuint numSpecializationConstants, const GLuint *pConstantIndex, const GLuint *pConstantValue); +typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSINDIRECTCOUNTPROC) (GLenum mode, const void *indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride); +typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSINDIRECTCOUNTPROC) (GLenum mode, GLenum type, const void *indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride); +typedef void (APIENTRYP PFNGLPOLYGONOFFSETCLAMPPROC) (GLfloat factor, GLfloat units, GLfloat clamp); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glSpecializeShader (GLuint shader, const GLchar *pEntryPoint, GLuint numSpecializationConstants, const GLuint *pConstantIndex, const GLuint *pConstantValue); +GLAPI void APIENTRY glMultiDrawArraysIndirectCount (GLenum mode, const void *indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride); +GLAPI void APIENTRY glMultiDrawElementsIndirectCount (GLenum mode, GLenum type, const void *indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride); +GLAPI void APIENTRY glPolygonOffsetClamp (GLfloat factor, GLfloat units, GLfloat clamp); +#endif +#endif /* GL_VERSION_4_6 */ + +#ifndef GL_ARB_ES2_compatibility +#define GL_ARB_ES2_compatibility 1 +#endif /* GL_ARB_ES2_compatibility */ + +#ifndef GL_ARB_ES3_1_compatibility +#define GL_ARB_ES3_1_compatibility 1 +#endif /* GL_ARB_ES3_1_compatibility */ + +#ifndef GL_ARB_ES3_2_compatibility +#define GL_ARB_ES3_2_compatibility 1 +#define GL_PRIMITIVE_BOUNDING_BOX_ARB 0x92BE +#define GL_MULTISAMPLE_LINE_WIDTH_RANGE_ARB 0x9381 +#define GL_MULTISAMPLE_LINE_WIDTH_GRANULARITY_ARB 0x9382 +typedef void (APIENTRYP PFNGLPRIMITIVEBOUNDINGBOXARBPROC) (GLfloat minX, GLfloat minY, GLfloat minZ, GLfloat minW, GLfloat maxX, GLfloat maxY, GLfloat maxZ, GLfloat maxW); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glPrimitiveBoundingBoxARB (GLfloat minX, GLfloat minY, GLfloat minZ, GLfloat minW, GLfloat maxX, GLfloat maxY, GLfloat maxZ, GLfloat maxW); +#endif +#endif /* GL_ARB_ES3_2_compatibility */ + +#ifndef GL_ARB_ES3_compatibility +#define GL_ARB_ES3_compatibility 1 +#endif /* GL_ARB_ES3_compatibility */ + +#ifndef GL_ARB_arrays_of_arrays +#define GL_ARB_arrays_of_arrays 1 +#endif /* GL_ARB_arrays_of_arrays */ + +#ifndef GL_ARB_base_instance +#define GL_ARB_base_instance 1 +#endif /* GL_ARB_base_instance */ + +#ifndef GL_ARB_bindless_texture +#define GL_ARB_bindless_texture 1 +typedef khronos_uint64_t GLuint64EXT; +#define GL_UNSIGNED_INT64_ARB 0x140F +typedef GLuint64 (APIENTRYP PFNGLGETTEXTUREHANDLEARBPROC) (GLuint texture); +typedef GLuint64 (APIENTRYP PFNGLGETTEXTURESAMPLERHANDLEARBPROC) (GLuint texture, GLuint sampler); +typedef void (APIENTRYP PFNGLMAKETEXTUREHANDLERESIDENTARBPROC) (GLuint64 handle); +typedef void (APIENTRYP PFNGLMAKETEXTUREHANDLENONRESIDENTARBPROC) (GLuint64 handle); +typedef GLuint64 (APIENTRYP PFNGLGETIMAGEHANDLEARBPROC) (GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum format); +typedef void (APIENTRYP PFNGLMAKEIMAGEHANDLERESIDENTARBPROC) (GLuint64 handle, GLenum access); +typedef void (APIENTRYP PFNGLMAKEIMAGEHANDLENONRESIDENTARBPROC) (GLuint64 handle); +typedef void (APIENTRYP PFNGLUNIFORMHANDLEUI64ARBPROC) (GLint location, GLuint64 value); +typedef void (APIENTRYP PFNGLUNIFORMHANDLEUI64VARBPROC) (GLint location, GLsizei count, const GLuint64 *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMHANDLEUI64ARBPROC) (GLuint program, GLint location, GLuint64 value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMHANDLEUI64VARBPROC) (GLuint program, GLint location, GLsizei count, const GLuint64 *values); +typedef GLboolean (APIENTRYP PFNGLISTEXTUREHANDLERESIDENTARBPROC) (GLuint64 handle); +typedef GLboolean (APIENTRYP PFNGLISIMAGEHANDLERESIDENTARBPROC) (GLuint64 handle); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL1UI64ARBPROC) (GLuint index, GLuint64EXT x); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL1UI64VARBPROC) (GLuint index, const GLuint64EXT *v); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBLUI64VARBPROC) (GLuint index, GLenum pname, GLuint64EXT *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI GLuint64 APIENTRY glGetTextureHandleARB (GLuint texture); +GLAPI GLuint64 APIENTRY glGetTextureSamplerHandleARB (GLuint texture, GLuint sampler); +GLAPI void APIENTRY glMakeTextureHandleResidentARB (GLuint64 handle); +GLAPI void APIENTRY glMakeTextureHandleNonResidentARB (GLuint64 handle); +GLAPI GLuint64 APIENTRY glGetImageHandleARB (GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum format); +GLAPI void APIENTRY glMakeImageHandleResidentARB (GLuint64 handle, GLenum access); +GLAPI void APIENTRY glMakeImageHandleNonResidentARB (GLuint64 handle); +GLAPI void APIENTRY glUniformHandleui64ARB (GLint location, GLuint64 value); +GLAPI void APIENTRY glUniformHandleui64vARB (GLint location, GLsizei count, const GLuint64 *value); +GLAPI void APIENTRY glProgramUniformHandleui64ARB (GLuint program, GLint location, GLuint64 value); +GLAPI void APIENTRY glProgramUniformHandleui64vARB (GLuint program, GLint location, GLsizei count, const GLuint64 *values); +GLAPI GLboolean APIENTRY glIsTextureHandleResidentARB (GLuint64 handle); +GLAPI GLboolean APIENTRY glIsImageHandleResidentARB (GLuint64 handle); +GLAPI void APIENTRY glVertexAttribL1ui64ARB (GLuint index, GLuint64EXT x); +GLAPI void APIENTRY glVertexAttribL1ui64vARB (GLuint index, const GLuint64EXT *v); +GLAPI void APIENTRY glGetVertexAttribLui64vARB (GLuint index, GLenum pname, GLuint64EXT *params); +#endif +#endif /* GL_ARB_bindless_texture */ + +#ifndef GL_ARB_blend_func_extended +#define GL_ARB_blend_func_extended 1 +#endif /* GL_ARB_blend_func_extended */ + +#ifndef GL_ARB_buffer_storage +#define GL_ARB_buffer_storage 1 +#endif /* GL_ARB_buffer_storage */ + +#ifndef GL_ARB_cl_event +#define GL_ARB_cl_event 1 +struct _cl_context; +struct _cl_event; +#define GL_SYNC_CL_EVENT_ARB 0x8240 +#define GL_SYNC_CL_EVENT_COMPLETE_ARB 0x8241 +typedef GLsync (APIENTRYP PFNGLCREATESYNCFROMCLEVENTARBPROC) (struct _cl_context *context, struct _cl_event *event, GLbitfield flags); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI GLsync APIENTRY glCreateSyncFromCLeventARB (struct _cl_context *context, struct _cl_event *event, GLbitfield flags); +#endif +#endif /* GL_ARB_cl_event */ + +#ifndef GL_ARB_clear_buffer_object +#define GL_ARB_clear_buffer_object 1 +#endif /* GL_ARB_clear_buffer_object */ + +#ifndef GL_ARB_clear_texture +#define GL_ARB_clear_texture 1 +#endif /* GL_ARB_clear_texture */ + +#ifndef GL_ARB_clip_control +#define GL_ARB_clip_control 1 +#endif /* GL_ARB_clip_control */ + +#ifndef GL_ARB_color_buffer_float +#define GL_ARB_color_buffer_float 1 +#define GL_RGBA_FLOAT_MODE_ARB 0x8820 +#define GL_CLAMP_VERTEX_COLOR_ARB 0x891A +#define GL_CLAMP_FRAGMENT_COLOR_ARB 0x891B +#define GL_CLAMP_READ_COLOR_ARB 0x891C +#define GL_FIXED_ONLY_ARB 0x891D +typedef void (APIENTRYP PFNGLCLAMPCOLORARBPROC) (GLenum target, GLenum clamp); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glClampColorARB (GLenum target, GLenum clamp); +#endif +#endif /* GL_ARB_color_buffer_float */ + +#ifndef GL_ARB_compatibility +#define GL_ARB_compatibility 1 +#endif /* GL_ARB_compatibility */ + +#ifndef GL_ARB_compressed_texture_pixel_storage +#define GL_ARB_compressed_texture_pixel_storage 1 +#endif /* GL_ARB_compressed_texture_pixel_storage */ + +#ifndef GL_ARB_compute_shader +#define GL_ARB_compute_shader 1 +#endif /* GL_ARB_compute_shader */ + +#ifndef GL_ARB_compute_variable_group_size +#define GL_ARB_compute_variable_group_size 1 +#define GL_MAX_COMPUTE_VARIABLE_GROUP_INVOCATIONS_ARB 0x9344 +#define GL_MAX_COMPUTE_FIXED_GROUP_INVOCATIONS_ARB 0x90EB +#define GL_MAX_COMPUTE_VARIABLE_GROUP_SIZE_ARB 0x9345 +#define GL_MAX_COMPUTE_FIXED_GROUP_SIZE_ARB 0x91BF +typedef void (APIENTRYP PFNGLDISPATCHCOMPUTEGROUPSIZEARBPROC) (GLuint num_groups_x, GLuint num_groups_y, GLuint num_groups_z, GLuint group_size_x, GLuint group_size_y, GLuint group_size_z); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glDispatchComputeGroupSizeARB (GLuint num_groups_x, GLuint num_groups_y, GLuint num_groups_z, GLuint group_size_x, GLuint group_size_y, GLuint group_size_z); +#endif +#endif /* GL_ARB_compute_variable_group_size */ + +#ifndef GL_ARB_conditional_render_inverted +#define GL_ARB_conditional_render_inverted 1 +#endif /* GL_ARB_conditional_render_inverted */ + +#ifndef GL_ARB_conservative_depth +#define GL_ARB_conservative_depth 1 +#endif /* GL_ARB_conservative_depth */ + +#ifndef GL_ARB_copy_buffer +#define GL_ARB_copy_buffer 1 +#endif /* GL_ARB_copy_buffer */ + +#ifndef GL_ARB_copy_image +#define GL_ARB_copy_image 1 +#endif /* GL_ARB_copy_image */ + +#ifndef GL_ARB_cull_distance +#define GL_ARB_cull_distance 1 +#endif /* GL_ARB_cull_distance */ + +#ifndef GL_ARB_debug_output +#define GL_ARB_debug_output 1 +typedef void (APIENTRY *GLDEBUGPROCARB)(GLenum source,GLenum type,GLuint id,GLenum severity,GLsizei length,const GLchar *message,const void *userParam); +#define GL_DEBUG_OUTPUT_SYNCHRONOUS_ARB 0x8242 +#define GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH_ARB 0x8243 +#define GL_DEBUG_CALLBACK_FUNCTION_ARB 0x8244 +#define GL_DEBUG_CALLBACK_USER_PARAM_ARB 0x8245 +#define GL_DEBUG_SOURCE_API_ARB 0x8246 +#define GL_DEBUG_SOURCE_WINDOW_SYSTEM_ARB 0x8247 +#define GL_DEBUG_SOURCE_SHADER_COMPILER_ARB 0x8248 +#define GL_DEBUG_SOURCE_THIRD_PARTY_ARB 0x8249 +#define GL_DEBUG_SOURCE_APPLICATION_ARB 0x824A +#define GL_DEBUG_SOURCE_OTHER_ARB 0x824B +#define GL_DEBUG_TYPE_ERROR_ARB 0x824C +#define GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR_ARB 0x824D +#define GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR_ARB 0x824E +#define GL_DEBUG_TYPE_PORTABILITY_ARB 0x824F +#define GL_DEBUG_TYPE_PERFORMANCE_ARB 0x8250 +#define GL_DEBUG_TYPE_OTHER_ARB 0x8251 +#define GL_MAX_DEBUG_MESSAGE_LENGTH_ARB 0x9143 +#define GL_MAX_DEBUG_LOGGED_MESSAGES_ARB 0x9144 +#define GL_DEBUG_LOGGED_MESSAGES_ARB 0x9145 +#define GL_DEBUG_SEVERITY_HIGH_ARB 0x9146 +#define GL_DEBUG_SEVERITY_MEDIUM_ARB 0x9147 +#define GL_DEBUG_SEVERITY_LOW_ARB 0x9148 +typedef void (APIENTRYP PFNGLDEBUGMESSAGECONTROLARBPROC) (GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled); +typedef void (APIENTRYP PFNGLDEBUGMESSAGEINSERTARBPROC) (GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *buf); +typedef void (APIENTRYP PFNGLDEBUGMESSAGECALLBACKARBPROC) (GLDEBUGPROCARB callback, const void *userParam); +typedef GLuint (APIENTRYP PFNGLGETDEBUGMESSAGELOGARBPROC) (GLuint count, GLsizei bufSize, GLenum *sources, GLenum *types, GLuint *ids, GLenum *severities, GLsizei *lengths, GLchar *messageLog); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glDebugMessageControlARB (GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled); +GLAPI void APIENTRY glDebugMessageInsertARB (GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *buf); +GLAPI void APIENTRY glDebugMessageCallbackARB (GLDEBUGPROCARB callback, const void *userParam); +GLAPI GLuint APIENTRY glGetDebugMessageLogARB (GLuint count, GLsizei bufSize, GLenum *sources, GLenum *types, GLuint *ids, GLenum *severities, GLsizei *lengths, GLchar *messageLog); +#endif +#endif /* GL_ARB_debug_output */ + +#ifndef GL_ARB_depth_buffer_float +#define GL_ARB_depth_buffer_float 1 +#endif /* GL_ARB_depth_buffer_float */ + +#ifndef GL_ARB_depth_clamp +#define GL_ARB_depth_clamp 1 +#endif /* GL_ARB_depth_clamp */ + +#ifndef GL_ARB_depth_texture +#define GL_ARB_depth_texture 1 +#define GL_DEPTH_COMPONENT16_ARB 0x81A5 +#define GL_DEPTH_COMPONENT24_ARB 0x81A6 +#define GL_DEPTH_COMPONENT32_ARB 0x81A7 +#define GL_TEXTURE_DEPTH_SIZE_ARB 0x884A +#define GL_DEPTH_TEXTURE_MODE_ARB 0x884B +#endif /* GL_ARB_depth_texture */ + +#ifndef GL_ARB_derivative_control +#define GL_ARB_derivative_control 1 +#endif /* GL_ARB_derivative_control */ + +#ifndef GL_ARB_direct_state_access +#define GL_ARB_direct_state_access 1 +#endif /* GL_ARB_direct_state_access */ + +#ifndef GL_ARB_draw_buffers +#define GL_ARB_draw_buffers 1 +#define GL_MAX_DRAW_BUFFERS_ARB 0x8824 +#define GL_DRAW_BUFFER0_ARB 0x8825 +#define GL_DRAW_BUFFER1_ARB 0x8826 +#define GL_DRAW_BUFFER2_ARB 0x8827 +#define GL_DRAW_BUFFER3_ARB 0x8828 +#define GL_DRAW_BUFFER4_ARB 0x8829 +#define GL_DRAW_BUFFER5_ARB 0x882A +#define GL_DRAW_BUFFER6_ARB 0x882B +#define GL_DRAW_BUFFER7_ARB 0x882C +#define GL_DRAW_BUFFER8_ARB 0x882D +#define GL_DRAW_BUFFER9_ARB 0x882E +#define GL_DRAW_BUFFER10_ARB 0x882F +#define GL_DRAW_BUFFER11_ARB 0x8830 +#define GL_DRAW_BUFFER12_ARB 0x8831 +#define GL_DRAW_BUFFER13_ARB 0x8832 +#define GL_DRAW_BUFFER14_ARB 0x8833 +#define GL_DRAW_BUFFER15_ARB 0x8834 +typedef void (APIENTRYP PFNGLDRAWBUFFERSARBPROC) (GLsizei n, const GLenum *bufs); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glDrawBuffersARB (GLsizei n, const GLenum *bufs); +#endif +#endif /* GL_ARB_draw_buffers */ + +#ifndef GL_ARB_draw_buffers_blend +#define GL_ARB_draw_buffers_blend 1 +typedef void (APIENTRYP PFNGLBLENDEQUATIONIARBPROC) (GLuint buf, GLenum mode); +typedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEIARBPROC) (GLuint buf, GLenum modeRGB, GLenum modeAlpha); +typedef void (APIENTRYP PFNGLBLENDFUNCIARBPROC) (GLuint buf, GLenum src, GLenum dst); +typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEIARBPROC) (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBlendEquationiARB (GLuint buf, GLenum mode); +GLAPI void APIENTRY glBlendEquationSeparateiARB (GLuint buf, GLenum modeRGB, GLenum modeAlpha); +GLAPI void APIENTRY glBlendFunciARB (GLuint buf, GLenum src, GLenum dst); +GLAPI void APIENTRY glBlendFuncSeparateiARB (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); +#endif +#endif /* GL_ARB_draw_buffers_blend */ + +#ifndef GL_ARB_draw_elements_base_vertex +#define GL_ARB_draw_elements_base_vertex 1 +#endif /* GL_ARB_draw_elements_base_vertex */ + +#ifndef GL_ARB_draw_indirect +#define GL_ARB_draw_indirect 1 +#endif /* GL_ARB_draw_indirect */ + +#ifndef GL_ARB_draw_instanced +#define GL_ARB_draw_instanced 1 +typedef void (APIENTRYP PFNGLDRAWARRAYSINSTANCEDARBPROC) (GLenum mode, GLint first, GLsizei count, GLsizei primcount); +typedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDARBPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei primcount); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glDrawArraysInstancedARB (GLenum mode, GLint first, GLsizei count, GLsizei primcount); +GLAPI void APIENTRY glDrawElementsInstancedARB (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei primcount); +#endif +#endif /* GL_ARB_draw_instanced */ + +#ifndef GL_ARB_enhanced_layouts +#define GL_ARB_enhanced_layouts 1 +#endif /* GL_ARB_enhanced_layouts */ + +#ifndef GL_ARB_explicit_attrib_location +#define GL_ARB_explicit_attrib_location 1 +#endif /* GL_ARB_explicit_attrib_location */ + +#ifndef GL_ARB_explicit_uniform_location +#define GL_ARB_explicit_uniform_location 1 +#endif /* GL_ARB_explicit_uniform_location */ + +#ifndef GL_ARB_fragment_coord_conventions +#define GL_ARB_fragment_coord_conventions 1 +#endif /* GL_ARB_fragment_coord_conventions */ + +#ifndef GL_ARB_fragment_layer_viewport +#define GL_ARB_fragment_layer_viewport 1 +#endif /* GL_ARB_fragment_layer_viewport */ + +#ifndef GL_ARB_fragment_program +#define GL_ARB_fragment_program 1 +#define GL_FRAGMENT_PROGRAM_ARB 0x8804 +#define GL_PROGRAM_FORMAT_ASCII_ARB 0x8875 +#define GL_PROGRAM_LENGTH_ARB 0x8627 +#define GL_PROGRAM_FORMAT_ARB 0x8876 +#define GL_PROGRAM_BINDING_ARB 0x8677 +#define GL_PROGRAM_INSTRUCTIONS_ARB 0x88A0 +#define GL_MAX_PROGRAM_INSTRUCTIONS_ARB 0x88A1 +#define GL_PROGRAM_NATIVE_INSTRUCTIONS_ARB 0x88A2 +#define GL_MAX_PROGRAM_NATIVE_INSTRUCTIONS_ARB 0x88A3 +#define GL_PROGRAM_TEMPORARIES_ARB 0x88A4 +#define GL_MAX_PROGRAM_TEMPORARIES_ARB 0x88A5 +#define GL_PROGRAM_NATIVE_TEMPORARIES_ARB 0x88A6 +#define GL_MAX_PROGRAM_NATIVE_TEMPORARIES_ARB 0x88A7 +#define GL_PROGRAM_PARAMETERS_ARB 0x88A8 +#define GL_MAX_PROGRAM_PARAMETERS_ARB 0x88A9 +#define GL_PROGRAM_NATIVE_PARAMETERS_ARB 0x88AA +#define GL_MAX_PROGRAM_NATIVE_PARAMETERS_ARB 0x88AB +#define GL_PROGRAM_ATTRIBS_ARB 0x88AC +#define GL_MAX_PROGRAM_ATTRIBS_ARB 0x88AD +#define GL_PROGRAM_NATIVE_ATTRIBS_ARB 0x88AE +#define GL_MAX_PROGRAM_NATIVE_ATTRIBS_ARB 0x88AF +#define GL_MAX_PROGRAM_LOCAL_PARAMETERS_ARB 0x88B4 +#define GL_MAX_PROGRAM_ENV_PARAMETERS_ARB 0x88B5 +#define GL_PROGRAM_UNDER_NATIVE_LIMITS_ARB 0x88B6 +#define GL_PROGRAM_ALU_INSTRUCTIONS_ARB 0x8805 +#define GL_PROGRAM_TEX_INSTRUCTIONS_ARB 0x8806 +#define GL_PROGRAM_TEX_INDIRECTIONS_ARB 0x8807 +#define GL_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB 0x8808 +#define GL_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB 0x8809 +#define GL_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB 0x880A +#define GL_MAX_PROGRAM_ALU_INSTRUCTIONS_ARB 0x880B +#define GL_MAX_PROGRAM_TEX_INSTRUCTIONS_ARB 0x880C +#define GL_MAX_PROGRAM_TEX_INDIRECTIONS_ARB 0x880D +#define GL_MAX_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB 0x880E +#define GL_MAX_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB 0x880F +#define GL_MAX_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB 0x8810 +#define GL_PROGRAM_STRING_ARB 0x8628 +#define GL_PROGRAM_ERROR_POSITION_ARB 0x864B +#define GL_CURRENT_MATRIX_ARB 0x8641 +#define GL_TRANSPOSE_CURRENT_MATRIX_ARB 0x88B7 +#define GL_CURRENT_MATRIX_STACK_DEPTH_ARB 0x8640 +#define GL_MAX_PROGRAM_MATRICES_ARB 0x862F +#define GL_MAX_PROGRAM_MATRIX_STACK_DEPTH_ARB 0x862E +#define GL_MAX_TEXTURE_COORDS_ARB 0x8871 +#define GL_MAX_TEXTURE_IMAGE_UNITS_ARB 0x8872 +#define GL_PROGRAM_ERROR_STRING_ARB 0x8874 +#define GL_MATRIX0_ARB 0x88C0 +#define GL_MATRIX1_ARB 0x88C1 +#define GL_MATRIX2_ARB 0x88C2 +#define GL_MATRIX3_ARB 0x88C3 +#define GL_MATRIX4_ARB 0x88C4 +#define GL_MATRIX5_ARB 0x88C5 +#define GL_MATRIX6_ARB 0x88C6 +#define GL_MATRIX7_ARB 0x88C7 +#define GL_MATRIX8_ARB 0x88C8 +#define GL_MATRIX9_ARB 0x88C9 +#define GL_MATRIX10_ARB 0x88CA +#define GL_MATRIX11_ARB 0x88CB +#define GL_MATRIX12_ARB 0x88CC +#define GL_MATRIX13_ARB 0x88CD +#define GL_MATRIX14_ARB 0x88CE +#define GL_MATRIX15_ARB 0x88CF +#define GL_MATRIX16_ARB 0x88D0 +#define GL_MATRIX17_ARB 0x88D1 +#define GL_MATRIX18_ARB 0x88D2 +#define GL_MATRIX19_ARB 0x88D3 +#define GL_MATRIX20_ARB 0x88D4 +#define GL_MATRIX21_ARB 0x88D5 +#define GL_MATRIX22_ARB 0x88D6 +#define GL_MATRIX23_ARB 0x88D7 +#define GL_MATRIX24_ARB 0x88D8 +#define GL_MATRIX25_ARB 0x88D9 +#define GL_MATRIX26_ARB 0x88DA +#define GL_MATRIX27_ARB 0x88DB +#define GL_MATRIX28_ARB 0x88DC +#define GL_MATRIX29_ARB 0x88DD +#define GL_MATRIX30_ARB 0x88DE +#define GL_MATRIX31_ARB 0x88DF +typedef void (APIENTRYP PFNGLPROGRAMSTRINGARBPROC) (GLenum target, GLenum format, GLsizei len, const void *string); +typedef void (APIENTRYP PFNGLBINDPROGRAMARBPROC) (GLenum target, GLuint program); +typedef void (APIENTRYP PFNGLDELETEPROGRAMSARBPROC) (GLsizei n, const GLuint *programs); +typedef void (APIENTRYP PFNGLGENPROGRAMSARBPROC) (GLsizei n, GLuint *programs); +typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETER4DARBPROC) (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETER4DVARBPROC) (GLenum target, GLuint index, const GLdouble *params); +typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETER4FARBPROC) (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETER4FVARBPROC) (GLenum target, GLuint index, const GLfloat *params); +typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETER4DARBPROC) (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETER4DVARBPROC) (GLenum target, GLuint index, const GLdouble *params); +typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETER4FARBPROC) (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETER4FVARBPROC) (GLenum target, GLuint index, const GLfloat *params); +typedef void (APIENTRYP PFNGLGETPROGRAMENVPARAMETERDVARBPROC) (GLenum target, GLuint index, GLdouble *params); +typedef void (APIENTRYP PFNGLGETPROGRAMENVPARAMETERFVARBPROC) (GLenum target, GLuint index, GLfloat *params); +typedef void (APIENTRYP PFNGLGETPROGRAMLOCALPARAMETERDVARBPROC) (GLenum target, GLuint index, GLdouble *params); +typedef void (APIENTRYP PFNGLGETPROGRAMLOCALPARAMETERFVARBPROC) (GLenum target, GLuint index, GLfloat *params); +typedef void (APIENTRYP PFNGLGETPROGRAMIVARBPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETPROGRAMSTRINGARBPROC) (GLenum target, GLenum pname, void *string); +typedef GLboolean (APIENTRYP PFNGLISPROGRAMARBPROC) (GLuint program); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glProgramStringARB (GLenum target, GLenum format, GLsizei len, const void *string); +GLAPI void APIENTRY glBindProgramARB (GLenum target, GLuint program); +GLAPI void APIENTRY glDeleteProgramsARB (GLsizei n, const GLuint *programs); +GLAPI void APIENTRY glGenProgramsARB (GLsizei n, GLuint *programs); +GLAPI void APIENTRY glProgramEnvParameter4dARB (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +GLAPI void APIENTRY glProgramEnvParameter4dvARB (GLenum target, GLuint index, const GLdouble *params); +GLAPI void APIENTRY glProgramEnvParameter4fARB (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +GLAPI void APIENTRY glProgramEnvParameter4fvARB (GLenum target, GLuint index, const GLfloat *params); +GLAPI void APIENTRY glProgramLocalParameter4dARB (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +GLAPI void APIENTRY glProgramLocalParameter4dvARB (GLenum target, GLuint index, const GLdouble *params); +GLAPI void APIENTRY glProgramLocalParameter4fARB (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +GLAPI void APIENTRY glProgramLocalParameter4fvARB (GLenum target, GLuint index, const GLfloat *params); +GLAPI void APIENTRY glGetProgramEnvParameterdvARB (GLenum target, GLuint index, GLdouble *params); +GLAPI void APIENTRY glGetProgramEnvParameterfvARB (GLenum target, GLuint index, GLfloat *params); +GLAPI void APIENTRY glGetProgramLocalParameterdvARB (GLenum target, GLuint index, GLdouble *params); +GLAPI void APIENTRY glGetProgramLocalParameterfvARB (GLenum target, GLuint index, GLfloat *params); +GLAPI void APIENTRY glGetProgramivARB (GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetProgramStringARB (GLenum target, GLenum pname, void *string); +GLAPI GLboolean APIENTRY glIsProgramARB (GLuint program); +#endif +#endif /* GL_ARB_fragment_program */ + +#ifndef GL_ARB_fragment_program_shadow +#define GL_ARB_fragment_program_shadow 1 +#endif /* GL_ARB_fragment_program_shadow */ + +#ifndef GL_ARB_fragment_shader +#define GL_ARB_fragment_shader 1 +#define GL_FRAGMENT_SHADER_ARB 0x8B30 +#define GL_MAX_FRAGMENT_UNIFORM_COMPONENTS_ARB 0x8B49 +#define GL_FRAGMENT_SHADER_DERIVATIVE_HINT_ARB 0x8B8B +#endif /* GL_ARB_fragment_shader */ + +#ifndef GL_ARB_fragment_shader_interlock +#define GL_ARB_fragment_shader_interlock 1 +#endif /* GL_ARB_fragment_shader_interlock */ + +#ifndef GL_ARB_framebuffer_no_attachments +#define GL_ARB_framebuffer_no_attachments 1 +#endif /* GL_ARB_framebuffer_no_attachments */ + +#ifndef GL_ARB_framebuffer_object +#define GL_ARB_framebuffer_object 1 +#endif /* GL_ARB_framebuffer_object */ + +#ifndef GL_ARB_framebuffer_sRGB +#define GL_ARB_framebuffer_sRGB 1 +#endif /* GL_ARB_framebuffer_sRGB */ + +#ifndef GL_ARB_geometry_shader4 +#define GL_ARB_geometry_shader4 1 +#define GL_LINES_ADJACENCY_ARB 0x000A +#define GL_LINE_STRIP_ADJACENCY_ARB 0x000B +#define GL_TRIANGLES_ADJACENCY_ARB 0x000C +#define GL_TRIANGLE_STRIP_ADJACENCY_ARB 0x000D +#define GL_PROGRAM_POINT_SIZE_ARB 0x8642 +#define GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS_ARB 0x8C29 +#define GL_FRAMEBUFFER_ATTACHMENT_LAYERED_ARB 0x8DA7 +#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS_ARB 0x8DA8 +#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_COUNT_ARB 0x8DA9 +#define GL_GEOMETRY_SHADER_ARB 0x8DD9 +#define GL_GEOMETRY_VERTICES_OUT_ARB 0x8DDA +#define GL_GEOMETRY_INPUT_TYPE_ARB 0x8DDB +#define GL_GEOMETRY_OUTPUT_TYPE_ARB 0x8DDC +#define GL_MAX_GEOMETRY_VARYING_COMPONENTS_ARB 0x8DDD +#define GL_MAX_VERTEX_VARYING_COMPONENTS_ARB 0x8DDE +#define GL_MAX_GEOMETRY_UNIFORM_COMPONENTS_ARB 0x8DDF +#define GL_MAX_GEOMETRY_OUTPUT_VERTICES_ARB 0x8DE0 +#define GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS_ARB 0x8DE1 +typedef void (APIENTRYP PFNGLPROGRAMPARAMETERIARBPROC) (GLuint program, GLenum pname, GLint value); +typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTUREARBPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level); +typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURELAYERARBPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); +typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTUREFACEARBPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLenum face); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glProgramParameteriARB (GLuint program, GLenum pname, GLint value); +GLAPI void APIENTRY glFramebufferTextureARB (GLenum target, GLenum attachment, GLuint texture, GLint level); +GLAPI void APIENTRY glFramebufferTextureLayerARB (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); +GLAPI void APIENTRY glFramebufferTextureFaceARB (GLenum target, GLenum attachment, GLuint texture, GLint level, GLenum face); +#endif +#endif /* GL_ARB_geometry_shader4 */ + +#ifndef GL_ARB_get_program_binary +#define GL_ARB_get_program_binary 1 +#endif /* GL_ARB_get_program_binary */ + +#ifndef GL_ARB_get_texture_sub_image +#define GL_ARB_get_texture_sub_image 1 +#endif /* GL_ARB_get_texture_sub_image */ + +#ifndef GL_ARB_gl_spirv +#define GL_ARB_gl_spirv 1 +#define GL_SHADER_BINARY_FORMAT_SPIR_V_ARB 0x9551 +#define GL_SPIR_V_BINARY_ARB 0x9552 +typedef void (APIENTRYP PFNGLSPECIALIZESHADERARBPROC) (GLuint shader, const GLchar *pEntryPoint, GLuint numSpecializationConstants, const GLuint *pConstantIndex, const GLuint *pConstantValue); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glSpecializeShaderARB (GLuint shader, const GLchar *pEntryPoint, GLuint numSpecializationConstants, const GLuint *pConstantIndex, const GLuint *pConstantValue); +#endif +#endif /* GL_ARB_gl_spirv */ + +#ifndef GL_ARB_gpu_shader5 +#define GL_ARB_gpu_shader5 1 +#endif /* GL_ARB_gpu_shader5 */ + +#ifndef GL_ARB_gpu_shader_fp64 +#define GL_ARB_gpu_shader_fp64 1 +#endif /* GL_ARB_gpu_shader_fp64 */ + +#ifndef GL_ARB_gpu_shader_int64 +#define GL_ARB_gpu_shader_int64 1 +#define GL_INT64_ARB 0x140E +#define GL_INT64_VEC2_ARB 0x8FE9 +#define GL_INT64_VEC3_ARB 0x8FEA +#define GL_INT64_VEC4_ARB 0x8FEB +#define GL_UNSIGNED_INT64_VEC2_ARB 0x8FF5 +#define GL_UNSIGNED_INT64_VEC3_ARB 0x8FF6 +#define GL_UNSIGNED_INT64_VEC4_ARB 0x8FF7 +typedef void (APIENTRYP PFNGLUNIFORM1I64ARBPROC) (GLint location, GLint64 x); +typedef void (APIENTRYP PFNGLUNIFORM2I64ARBPROC) (GLint location, GLint64 x, GLint64 y); +typedef void (APIENTRYP PFNGLUNIFORM3I64ARBPROC) (GLint location, GLint64 x, GLint64 y, GLint64 z); +typedef void (APIENTRYP PFNGLUNIFORM4I64ARBPROC) (GLint location, GLint64 x, GLint64 y, GLint64 z, GLint64 w); +typedef void (APIENTRYP PFNGLUNIFORM1I64VARBPROC) (GLint location, GLsizei count, const GLint64 *value); +typedef void (APIENTRYP PFNGLUNIFORM2I64VARBPROC) (GLint location, GLsizei count, const GLint64 *value); +typedef void (APIENTRYP PFNGLUNIFORM3I64VARBPROC) (GLint location, GLsizei count, const GLint64 *value); +typedef void (APIENTRYP PFNGLUNIFORM4I64VARBPROC) (GLint location, GLsizei count, const GLint64 *value); +typedef void (APIENTRYP PFNGLUNIFORM1UI64ARBPROC) (GLint location, GLuint64 x); +typedef void (APIENTRYP PFNGLUNIFORM2UI64ARBPROC) (GLint location, GLuint64 x, GLuint64 y); +typedef void (APIENTRYP PFNGLUNIFORM3UI64ARBPROC) (GLint location, GLuint64 x, GLuint64 y, GLuint64 z); +typedef void (APIENTRYP PFNGLUNIFORM4UI64ARBPROC) (GLint location, GLuint64 x, GLuint64 y, GLuint64 z, GLuint64 w); +typedef void (APIENTRYP PFNGLUNIFORM1UI64VARBPROC) (GLint location, GLsizei count, const GLuint64 *value); +typedef void (APIENTRYP PFNGLUNIFORM2UI64VARBPROC) (GLint location, GLsizei count, const GLuint64 *value); +typedef void (APIENTRYP PFNGLUNIFORM3UI64VARBPROC) (GLint location, GLsizei count, const GLuint64 *value); +typedef void (APIENTRYP PFNGLUNIFORM4UI64VARBPROC) (GLint location, GLsizei count, const GLuint64 *value); +typedef void (APIENTRYP PFNGLGETUNIFORMI64VARBPROC) (GLuint program, GLint location, GLint64 *params); +typedef void (APIENTRYP PFNGLGETUNIFORMUI64VARBPROC) (GLuint program, GLint location, GLuint64 *params); +typedef void (APIENTRYP PFNGLGETNUNIFORMI64VARBPROC) (GLuint program, GLint location, GLsizei bufSize, GLint64 *params); +typedef void (APIENTRYP PFNGLGETNUNIFORMUI64VARBPROC) (GLuint program, GLint location, GLsizei bufSize, GLuint64 *params); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1I64ARBPROC) (GLuint program, GLint location, GLint64 x); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2I64ARBPROC) (GLuint program, GLint location, GLint64 x, GLint64 y); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3I64ARBPROC) (GLuint program, GLint location, GLint64 x, GLint64 y, GLint64 z); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4I64ARBPROC) (GLuint program, GLint location, GLint64 x, GLint64 y, GLint64 z, GLint64 w); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1I64VARBPROC) (GLuint program, GLint location, GLsizei count, const GLint64 *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2I64VARBPROC) (GLuint program, GLint location, GLsizei count, const GLint64 *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3I64VARBPROC) (GLuint program, GLint location, GLsizei count, const GLint64 *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4I64VARBPROC) (GLuint program, GLint location, GLsizei count, const GLint64 *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1UI64ARBPROC) (GLuint program, GLint location, GLuint64 x); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2UI64ARBPROC) (GLuint program, GLint location, GLuint64 x, GLuint64 y); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3UI64ARBPROC) (GLuint program, GLint location, GLuint64 x, GLuint64 y, GLuint64 z); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4UI64ARBPROC) (GLuint program, GLint location, GLuint64 x, GLuint64 y, GLuint64 z, GLuint64 w); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1UI64VARBPROC) (GLuint program, GLint location, GLsizei count, const GLuint64 *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2UI64VARBPROC) (GLuint program, GLint location, GLsizei count, const GLuint64 *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3UI64VARBPROC) (GLuint program, GLint location, GLsizei count, const GLuint64 *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4UI64VARBPROC) (GLuint program, GLint location, GLsizei count, const GLuint64 *value); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glUniform1i64ARB (GLint location, GLint64 x); +GLAPI void APIENTRY glUniform2i64ARB (GLint location, GLint64 x, GLint64 y); +GLAPI void APIENTRY glUniform3i64ARB (GLint location, GLint64 x, GLint64 y, GLint64 z); +GLAPI void APIENTRY glUniform4i64ARB (GLint location, GLint64 x, GLint64 y, GLint64 z, GLint64 w); +GLAPI void APIENTRY glUniform1i64vARB (GLint location, GLsizei count, const GLint64 *value); +GLAPI void APIENTRY glUniform2i64vARB (GLint location, GLsizei count, const GLint64 *value); +GLAPI void APIENTRY glUniform3i64vARB (GLint location, GLsizei count, const GLint64 *value); +GLAPI void APIENTRY glUniform4i64vARB (GLint location, GLsizei count, const GLint64 *value); +GLAPI void APIENTRY glUniform1ui64ARB (GLint location, GLuint64 x); +GLAPI void APIENTRY glUniform2ui64ARB (GLint location, GLuint64 x, GLuint64 y); +GLAPI void APIENTRY glUniform3ui64ARB (GLint location, GLuint64 x, GLuint64 y, GLuint64 z); +GLAPI void APIENTRY glUniform4ui64ARB (GLint location, GLuint64 x, GLuint64 y, GLuint64 z, GLuint64 w); +GLAPI void APIENTRY glUniform1ui64vARB (GLint location, GLsizei count, const GLuint64 *value); +GLAPI void APIENTRY glUniform2ui64vARB (GLint location, GLsizei count, const GLuint64 *value); +GLAPI void APIENTRY glUniform3ui64vARB (GLint location, GLsizei count, const GLuint64 *value); +GLAPI void APIENTRY glUniform4ui64vARB (GLint location, GLsizei count, const GLuint64 *value); +GLAPI void APIENTRY glGetUniformi64vARB (GLuint program, GLint location, GLint64 *params); +GLAPI void APIENTRY glGetUniformui64vARB (GLuint program, GLint location, GLuint64 *params); +GLAPI void APIENTRY glGetnUniformi64vARB (GLuint program, GLint location, GLsizei bufSize, GLint64 *params); +GLAPI void APIENTRY glGetnUniformui64vARB (GLuint program, GLint location, GLsizei bufSize, GLuint64 *params); +GLAPI void APIENTRY glProgramUniform1i64ARB (GLuint program, GLint location, GLint64 x); +GLAPI void APIENTRY glProgramUniform2i64ARB (GLuint program, GLint location, GLint64 x, GLint64 y); +GLAPI void APIENTRY glProgramUniform3i64ARB (GLuint program, GLint location, GLint64 x, GLint64 y, GLint64 z); +GLAPI void APIENTRY glProgramUniform4i64ARB (GLuint program, GLint location, GLint64 x, GLint64 y, GLint64 z, GLint64 w); +GLAPI void APIENTRY glProgramUniform1i64vARB (GLuint program, GLint location, GLsizei count, const GLint64 *value); +GLAPI void APIENTRY glProgramUniform2i64vARB (GLuint program, GLint location, GLsizei count, const GLint64 *value); +GLAPI void APIENTRY glProgramUniform3i64vARB (GLuint program, GLint location, GLsizei count, const GLint64 *value); +GLAPI void APIENTRY glProgramUniform4i64vARB (GLuint program, GLint location, GLsizei count, const GLint64 *value); +GLAPI void APIENTRY glProgramUniform1ui64ARB (GLuint program, GLint location, GLuint64 x); +GLAPI void APIENTRY glProgramUniform2ui64ARB (GLuint program, GLint location, GLuint64 x, GLuint64 y); +GLAPI void APIENTRY glProgramUniform3ui64ARB (GLuint program, GLint location, GLuint64 x, GLuint64 y, GLuint64 z); +GLAPI void APIENTRY glProgramUniform4ui64ARB (GLuint program, GLint location, GLuint64 x, GLuint64 y, GLuint64 z, GLuint64 w); +GLAPI void APIENTRY glProgramUniform1ui64vARB (GLuint program, GLint location, GLsizei count, const GLuint64 *value); +GLAPI void APIENTRY glProgramUniform2ui64vARB (GLuint program, GLint location, GLsizei count, const GLuint64 *value); +GLAPI void APIENTRY glProgramUniform3ui64vARB (GLuint program, GLint location, GLsizei count, const GLuint64 *value); +GLAPI void APIENTRY glProgramUniform4ui64vARB (GLuint program, GLint location, GLsizei count, const GLuint64 *value); +#endif +#endif /* GL_ARB_gpu_shader_int64 */ + +#ifndef GL_ARB_half_float_pixel +#define GL_ARB_half_float_pixel 1 +typedef khronos_uint16_t GLhalfARB; +#define GL_HALF_FLOAT_ARB 0x140B +#endif /* GL_ARB_half_float_pixel */ + +#ifndef GL_ARB_half_float_vertex +#define GL_ARB_half_float_vertex 1 +#endif /* GL_ARB_half_float_vertex */ + +#ifndef GL_ARB_imaging +#define GL_ARB_imaging 1 +#define GL_CONVOLUTION_BORDER_MODE 0x8013 +#define GL_CONVOLUTION_FILTER_SCALE 0x8014 +#define GL_CONVOLUTION_FILTER_BIAS 0x8015 +#define GL_REDUCE 0x8016 +#define GL_CONVOLUTION_FORMAT 0x8017 +#define GL_CONVOLUTION_WIDTH 0x8018 +#define GL_CONVOLUTION_HEIGHT 0x8019 +#define GL_MAX_CONVOLUTION_WIDTH 0x801A +#define GL_MAX_CONVOLUTION_HEIGHT 0x801B +#define GL_POST_CONVOLUTION_RED_SCALE 0x801C +#define GL_POST_CONVOLUTION_GREEN_SCALE 0x801D +#define GL_POST_CONVOLUTION_BLUE_SCALE 0x801E +#define GL_POST_CONVOLUTION_ALPHA_SCALE 0x801F +#define GL_POST_CONVOLUTION_RED_BIAS 0x8020 +#define GL_POST_CONVOLUTION_GREEN_BIAS 0x8021 +#define GL_POST_CONVOLUTION_BLUE_BIAS 0x8022 +#define GL_POST_CONVOLUTION_ALPHA_BIAS 0x8023 +#define GL_HISTOGRAM_WIDTH 0x8026 +#define GL_HISTOGRAM_FORMAT 0x8027 +#define GL_HISTOGRAM_RED_SIZE 0x8028 +#define GL_HISTOGRAM_GREEN_SIZE 0x8029 +#define GL_HISTOGRAM_BLUE_SIZE 0x802A +#define GL_HISTOGRAM_ALPHA_SIZE 0x802B +#define GL_HISTOGRAM_LUMINANCE_SIZE 0x802C +#define GL_HISTOGRAM_SINK 0x802D +#define GL_MINMAX_FORMAT 0x802F +#define GL_MINMAX_SINK 0x8030 +#define GL_TABLE_TOO_LARGE 0x8031 +#define GL_COLOR_MATRIX 0x80B1 +#define GL_COLOR_MATRIX_STACK_DEPTH 0x80B2 +#define GL_MAX_COLOR_MATRIX_STACK_DEPTH 0x80B3 +#define GL_POST_COLOR_MATRIX_RED_SCALE 0x80B4 +#define GL_POST_COLOR_MATRIX_GREEN_SCALE 0x80B5 +#define GL_POST_COLOR_MATRIX_BLUE_SCALE 0x80B6 +#define GL_POST_COLOR_MATRIX_ALPHA_SCALE 0x80B7 +#define GL_POST_COLOR_MATRIX_RED_BIAS 0x80B8 +#define GL_POST_COLOR_MATRIX_GREEN_BIAS 0x80B9 +#define GL_POST_COLOR_MATRIX_BLUE_BIAS 0x80BA +#define GL_POST_COLOR_MATRIX_ALPHA_BIAS 0x80BB +#define GL_COLOR_TABLE_SCALE 0x80D6 +#define GL_COLOR_TABLE_BIAS 0x80D7 +#define GL_COLOR_TABLE_FORMAT 0x80D8 +#define GL_COLOR_TABLE_WIDTH 0x80D9 +#define GL_COLOR_TABLE_RED_SIZE 0x80DA +#define GL_COLOR_TABLE_GREEN_SIZE 0x80DB +#define GL_COLOR_TABLE_BLUE_SIZE 0x80DC +#define GL_COLOR_TABLE_ALPHA_SIZE 0x80DD +#define GL_COLOR_TABLE_LUMINANCE_SIZE 0x80DE +#define GL_COLOR_TABLE_INTENSITY_SIZE 0x80DF +#define GL_CONSTANT_BORDER 0x8151 +#define GL_REPLICATE_BORDER 0x8153 +#define GL_CONVOLUTION_BORDER_COLOR 0x8154 +typedef void (APIENTRYP PFNGLCOLORTABLEPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const void *table); +typedef void (APIENTRYP PFNGLCOLORTABLEPARAMETERFVPROC) (GLenum target, GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLCOLORTABLEPARAMETERIVPROC) (GLenum target, GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLCOPYCOLORTABLEPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); +typedef void (APIENTRYP PFNGLGETCOLORTABLEPROC) (GLenum target, GLenum format, GLenum type, void *table); +typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLCOLORSUBTABLEPROC) (GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const void *data); +typedef void (APIENTRYP PFNGLCOPYCOLORSUBTABLEPROC) (GLenum target, GLsizei start, GLint x, GLint y, GLsizei width); +typedef void (APIENTRYP PFNGLCONVOLUTIONFILTER1DPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const void *image); +typedef void (APIENTRYP PFNGLCONVOLUTIONFILTER2DPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *image); +typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERFPROC) (GLenum target, GLenum pname, GLfloat params); +typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERFVPROC) (GLenum target, GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERIPROC) (GLenum target, GLenum pname, GLint params); +typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERIVPROC) (GLenum target, GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLCOPYCONVOLUTIONFILTER1DPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); +typedef void (APIENTRYP PFNGLCOPYCONVOLUTIONFILTER2DPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height); +typedef void (APIENTRYP PFNGLGETCONVOLUTIONFILTERPROC) (GLenum target, GLenum format, GLenum type, void *image); +typedef void (APIENTRYP PFNGLGETCONVOLUTIONPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETCONVOLUTIONPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETSEPARABLEFILTERPROC) (GLenum target, GLenum format, GLenum type, void *row, void *column, void *span); +typedef void (APIENTRYP PFNGLSEPARABLEFILTER2DPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *row, const void *column); +typedef void (APIENTRYP PFNGLGETHISTOGRAMPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, void *values); +typedef void (APIENTRYP PFNGLGETHISTOGRAMPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETHISTOGRAMPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETMINMAXPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, void *values); +typedef void (APIENTRYP PFNGLGETMINMAXPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETMINMAXPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLHISTOGRAMPROC) (GLenum target, GLsizei width, GLenum internalformat, GLboolean sink); +typedef void (APIENTRYP PFNGLMINMAXPROC) (GLenum target, GLenum internalformat, GLboolean sink); +typedef void (APIENTRYP PFNGLRESETHISTOGRAMPROC) (GLenum target); +typedef void (APIENTRYP PFNGLRESETMINMAXPROC) (GLenum target); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glColorTable (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const void *table); +GLAPI void APIENTRY glColorTableParameterfv (GLenum target, GLenum pname, const GLfloat *params); +GLAPI void APIENTRY glColorTableParameteriv (GLenum target, GLenum pname, const GLint *params); +GLAPI void APIENTRY glCopyColorTable (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); +GLAPI void APIENTRY glGetColorTable (GLenum target, GLenum format, GLenum type, void *table); +GLAPI void APIENTRY glGetColorTableParameterfv (GLenum target, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetColorTableParameteriv (GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glColorSubTable (GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const void *data); +GLAPI void APIENTRY glCopyColorSubTable (GLenum target, GLsizei start, GLint x, GLint y, GLsizei width); +GLAPI void APIENTRY glConvolutionFilter1D (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const void *image); +GLAPI void APIENTRY glConvolutionFilter2D (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *image); +GLAPI void APIENTRY glConvolutionParameterf (GLenum target, GLenum pname, GLfloat params); +GLAPI void APIENTRY glConvolutionParameterfv (GLenum target, GLenum pname, const GLfloat *params); +GLAPI void APIENTRY glConvolutionParameteri (GLenum target, GLenum pname, GLint params); +GLAPI void APIENTRY glConvolutionParameteriv (GLenum target, GLenum pname, const GLint *params); +GLAPI void APIENTRY glCopyConvolutionFilter1D (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); +GLAPI void APIENTRY glCopyConvolutionFilter2D (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height); +GLAPI void APIENTRY glGetConvolutionFilter (GLenum target, GLenum format, GLenum type, void *image); +GLAPI void APIENTRY glGetConvolutionParameterfv (GLenum target, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetConvolutionParameteriv (GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetSeparableFilter (GLenum target, GLenum format, GLenum type, void *row, void *column, void *span); +GLAPI void APIENTRY glSeparableFilter2D (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *row, const void *column); +GLAPI void APIENTRY glGetHistogram (GLenum target, GLboolean reset, GLenum format, GLenum type, void *values); +GLAPI void APIENTRY glGetHistogramParameterfv (GLenum target, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetHistogramParameteriv (GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetMinmax (GLenum target, GLboolean reset, GLenum format, GLenum type, void *values); +GLAPI void APIENTRY glGetMinmaxParameterfv (GLenum target, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetMinmaxParameteriv (GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glHistogram (GLenum target, GLsizei width, GLenum internalformat, GLboolean sink); +GLAPI void APIENTRY glMinmax (GLenum target, GLenum internalformat, GLboolean sink); +GLAPI void APIENTRY glResetHistogram (GLenum target); +GLAPI void APIENTRY glResetMinmax (GLenum target); +#endif +#endif /* GL_ARB_imaging */ + +#ifndef GL_ARB_indirect_parameters +#define GL_ARB_indirect_parameters 1 +#define GL_PARAMETER_BUFFER_ARB 0x80EE +#define GL_PARAMETER_BUFFER_BINDING_ARB 0x80EF +typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSINDIRECTCOUNTARBPROC) (GLenum mode, const void *indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride); +typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSINDIRECTCOUNTARBPROC) (GLenum mode, GLenum type, const void *indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glMultiDrawArraysIndirectCountARB (GLenum mode, const void *indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride); +GLAPI void APIENTRY glMultiDrawElementsIndirectCountARB (GLenum mode, GLenum type, const void *indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride); +#endif +#endif /* GL_ARB_indirect_parameters */ + +#ifndef GL_ARB_instanced_arrays +#define GL_ARB_instanced_arrays 1 +#define GL_VERTEX_ATTRIB_ARRAY_DIVISOR_ARB 0x88FE +typedef void (APIENTRYP PFNGLVERTEXATTRIBDIVISORARBPROC) (GLuint index, GLuint divisor); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glVertexAttribDivisorARB (GLuint index, GLuint divisor); +#endif +#endif /* GL_ARB_instanced_arrays */ + +#ifndef GL_ARB_internalformat_query +#define GL_ARB_internalformat_query 1 +#endif /* GL_ARB_internalformat_query */ + +#ifndef GL_ARB_internalformat_query2 +#define GL_ARB_internalformat_query2 1 +#define GL_SRGB_DECODE_ARB 0x8299 +#define GL_VIEW_CLASS_EAC_R11 0x9383 +#define GL_VIEW_CLASS_EAC_RG11 0x9384 +#define GL_VIEW_CLASS_ETC2_RGB 0x9385 +#define GL_VIEW_CLASS_ETC2_RGBA 0x9386 +#define GL_VIEW_CLASS_ETC2_EAC_RGBA 0x9387 +#define GL_VIEW_CLASS_ASTC_4x4_RGBA 0x9388 +#define GL_VIEW_CLASS_ASTC_5x4_RGBA 0x9389 +#define GL_VIEW_CLASS_ASTC_5x5_RGBA 0x938A +#define GL_VIEW_CLASS_ASTC_6x5_RGBA 0x938B +#define GL_VIEW_CLASS_ASTC_6x6_RGBA 0x938C +#define GL_VIEW_CLASS_ASTC_8x5_RGBA 0x938D +#define GL_VIEW_CLASS_ASTC_8x6_RGBA 0x938E +#define GL_VIEW_CLASS_ASTC_8x8_RGBA 0x938F +#define GL_VIEW_CLASS_ASTC_10x5_RGBA 0x9390 +#define GL_VIEW_CLASS_ASTC_10x6_RGBA 0x9391 +#define GL_VIEW_CLASS_ASTC_10x8_RGBA 0x9392 +#define GL_VIEW_CLASS_ASTC_10x10_RGBA 0x9393 +#define GL_VIEW_CLASS_ASTC_12x10_RGBA 0x9394 +#define GL_VIEW_CLASS_ASTC_12x12_RGBA 0x9395 +#endif /* GL_ARB_internalformat_query2 */ + +#ifndef GL_ARB_invalidate_subdata +#define GL_ARB_invalidate_subdata 1 +#endif /* GL_ARB_invalidate_subdata */ + +#ifndef GL_ARB_map_buffer_alignment +#define GL_ARB_map_buffer_alignment 1 +#endif /* GL_ARB_map_buffer_alignment */ + +#ifndef GL_ARB_map_buffer_range +#define GL_ARB_map_buffer_range 1 +#endif /* GL_ARB_map_buffer_range */ + +#ifndef GL_ARB_matrix_palette +#define GL_ARB_matrix_palette 1 +#define GL_MATRIX_PALETTE_ARB 0x8840 +#define GL_MAX_MATRIX_PALETTE_STACK_DEPTH_ARB 0x8841 +#define GL_MAX_PALETTE_MATRICES_ARB 0x8842 +#define GL_CURRENT_PALETTE_MATRIX_ARB 0x8843 +#define GL_MATRIX_INDEX_ARRAY_ARB 0x8844 +#define GL_CURRENT_MATRIX_INDEX_ARB 0x8845 +#define GL_MATRIX_INDEX_ARRAY_SIZE_ARB 0x8846 +#define GL_MATRIX_INDEX_ARRAY_TYPE_ARB 0x8847 +#define GL_MATRIX_INDEX_ARRAY_STRIDE_ARB 0x8848 +#define GL_MATRIX_INDEX_ARRAY_POINTER_ARB 0x8849 +typedef void (APIENTRYP PFNGLCURRENTPALETTEMATRIXARBPROC) (GLint index); +typedef void (APIENTRYP PFNGLMATRIXINDEXUBVARBPROC) (GLint size, const GLubyte *indices); +typedef void (APIENTRYP PFNGLMATRIXINDEXUSVARBPROC) (GLint size, const GLushort *indices); +typedef void (APIENTRYP PFNGLMATRIXINDEXUIVARBPROC) (GLint size, const GLuint *indices); +typedef void (APIENTRYP PFNGLMATRIXINDEXPOINTERARBPROC) (GLint size, GLenum type, GLsizei stride, const void *pointer); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glCurrentPaletteMatrixARB (GLint index); +GLAPI void APIENTRY glMatrixIndexubvARB (GLint size, const GLubyte *indices); +GLAPI void APIENTRY glMatrixIndexusvARB (GLint size, const GLushort *indices); +GLAPI void APIENTRY glMatrixIndexuivARB (GLint size, const GLuint *indices); +GLAPI void APIENTRY glMatrixIndexPointerARB (GLint size, GLenum type, GLsizei stride, const void *pointer); +#endif +#endif /* GL_ARB_matrix_palette */ + +#ifndef GL_ARB_multi_bind +#define GL_ARB_multi_bind 1 +#endif /* GL_ARB_multi_bind */ + +#ifndef GL_ARB_multi_draw_indirect +#define GL_ARB_multi_draw_indirect 1 +#endif /* GL_ARB_multi_draw_indirect */ + +#ifndef GL_ARB_multisample +#define GL_ARB_multisample 1 +#define GL_MULTISAMPLE_ARB 0x809D +#define GL_SAMPLE_ALPHA_TO_COVERAGE_ARB 0x809E +#define GL_SAMPLE_ALPHA_TO_ONE_ARB 0x809F +#define GL_SAMPLE_COVERAGE_ARB 0x80A0 +#define GL_SAMPLE_BUFFERS_ARB 0x80A8 +#define GL_SAMPLES_ARB 0x80A9 +#define GL_SAMPLE_COVERAGE_VALUE_ARB 0x80AA +#define GL_SAMPLE_COVERAGE_INVERT_ARB 0x80AB +#define GL_MULTISAMPLE_BIT_ARB 0x20000000 +typedef void (APIENTRYP PFNGLSAMPLECOVERAGEARBPROC) (GLfloat value, GLboolean invert); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glSampleCoverageARB (GLfloat value, GLboolean invert); +#endif +#endif /* GL_ARB_multisample */ + +#ifndef GL_ARB_multitexture +#define GL_ARB_multitexture 1 +#define GL_TEXTURE0_ARB 0x84C0 +#define GL_TEXTURE1_ARB 0x84C1 +#define GL_TEXTURE2_ARB 0x84C2 +#define GL_TEXTURE3_ARB 0x84C3 +#define GL_TEXTURE4_ARB 0x84C4 +#define GL_TEXTURE5_ARB 0x84C5 +#define GL_TEXTURE6_ARB 0x84C6 +#define GL_TEXTURE7_ARB 0x84C7 +#define GL_TEXTURE8_ARB 0x84C8 +#define GL_TEXTURE9_ARB 0x84C9 +#define GL_TEXTURE10_ARB 0x84CA +#define GL_TEXTURE11_ARB 0x84CB +#define GL_TEXTURE12_ARB 0x84CC +#define GL_TEXTURE13_ARB 0x84CD +#define GL_TEXTURE14_ARB 0x84CE +#define GL_TEXTURE15_ARB 0x84CF +#define GL_TEXTURE16_ARB 0x84D0 +#define GL_TEXTURE17_ARB 0x84D1 +#define GL_TEXTURE18_ARB 0x84D2 +#define GL_TEXTURE19_ARB 0x84D3 +#define GL_TEXTURE20_ARB 0x84D4 +#define GL_TEXTURE21_ARB 0x84D5 +#define GL_TEXTURE22_ARB 0x84D6 +#define GL_TEXTURE23_ARB 0x84D7 +#define GL_TEXTURE24_ARB 0x84D8 +#define GL_TEXTURE25_ARB 0x84D9 +#define GL_TEXTURE26_ARB 0x84DA +#define GL_TEXTURE27_ARB 0x84DB +#define GL_TEXTURE28_ARB 0x84DC +#define GL_TEXTURE29_ARB 0x84DD +#define GL_TEXTURE30_ARB 0x84DE +#define GL_TEXTURE31_ARB 0x84DF +#define GL_ACTIVE_TEXTURE_ARB 0x84E0 +#define GL_CLIENT_ACTIVE_TEXTURE_ARB 0x84E1 +#define GL_MAX_TEXTURE_UNITS_ARB 0x84E2 +typedef void (APIENTRYP PFNGLACTIVETEXTUREARBPROC) (GLenum texture); +typedef void (APIENTRYP PFNGLCLIENTACTIVETEXTUREARBPROC) (GLenum texture); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1DARBPROC) (GLenum target, GLdouble s); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1DVARBPROC) (GLenum target, const GLdouble *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1FARBPROC) (GLenum target, GLfloat s); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1FVARBPROC) (GLenum target, const GLfloat *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1IARBPROC) (GLenum target, GLint s); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1IVARBPROC) (GLenum target, const GLint *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1SARBPROC) (GLenum target, GLshort s); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1SVARBPROC) (GLenum target, const GLshort *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2DARBPROC) (GLenum target, GLdouble s, GLdouble t); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2DVARBPROC) (GLenum target, const GLdouble *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2FARBPROC) (GLenum target, GLfloat s, GLfloat t); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2FVARBPROC) (GLenum target, const GLfloat *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2IARBPROC) (GLenum target, GLint s, GLint t); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2IVARBPROC) (GLenum target, const GLint *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2SARBPROC) (GLenum target, GLshort s, GLshort t); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2SVARBPROC) (GLenum target, const GLshort *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3DARBPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3DVARBPROC) (GLenum target, const GLdouble *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3FARBPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3FVARBPROC) (GLenum target, const GLfloat *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3IARBPROC) (GLenum target, GLint s, GLint t, GLint r); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3IVARBPROC) (GLenum target, const GLint *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3SARBPROC) (GLenum target, GLshort s, GLshort t, GLshort r); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3SVARBPROC) (GLenum target, const GLshort *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4DARBPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4DVARBPROC) (GLenum target, const GLdouble *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4FARBPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4FVARBPROC) (GLenum target, const GLfloat *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4IARBPROC) (GLenum target, GLint s, GLint t, GLint r, GLint q); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4IVARBPROC) (GLenum target, const GLint *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4SARBPROC) (GLenum target, GLshort s, GLshort t, GLshort r, GLshort q); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4SVARBPROC) (GLenum target, const GLshort *v); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glActiveTextureARB (GLenum texture); +GLAPI void APIENTRY glClientActiveTextureARB (GLenum texture); +GLAPI void APIENTRY glMultiTexCoord1dARB (GLenum target, GLdouble s); +GLAPI void APIENTRY glMultiTexCoord1dvARB (GLenum target, const GLdouble *v); +GLAPI void APIENTRY glMultiTexCoord1fARB (GLenum target, GLfloat s); +GLAPI void APIENTRY glMultiTexCoord1fvARB (GLenum target, const GLfloat *v); +GLAPI void APIENTRY glMultiTexCoord1iARB (GLenum target, GLint s); +GLAPI void APIENTRY glMultiTexCoord1ivARB (GLenum target, const GLint *v); +GLAPI void APIENTRY glMultiTexCoord1sARB (GLenum target, GLshort s); +GLAPI void APIENTRY glMultiTexCoord1svARB (GLenum target, const GLshort *v); +GLAPI void APIENTRY glMultiTexCoord2dARB (GLenum target, GLdouble s, GLdouble t); +GLAPI void APIENTRY glMultiTexCoord2dvARB (GLenum target, const GLdouble *v); +GLAPI void APIENTRY glMultiTexCoord2fARB (GLenum target, GLfloat s, GLfloat t); +GLAPI void APIENTRY glMultiTexCoord2fvARB (GLenum target, const GLfloat *v); +GLAPI void APIENTRY glMultiTexCoord2iARB (GLenum target, GLint s, GLint t); +GLAPI void APIENTRY glMultiTexCoord2ivARB (GLenum target, const GLint *v); +GLAPI void APIENTRY glMultiTexCoord2sARB (GLenum target, GLshort s, GLshort t); +GLAPI void APIENTRY glMultiTexCoord2svARB (GLenum target, const GLshort *v); +GLAPI void APIENTRY glMultiTexCoord3dARB (GLenum target, GLdouble s, GLdouble t, GLdouble r); +GLAPI void APIENTRY glMultiTexCoord3dvARB (GLenum target, const GLdouble *v); +GLAPI void APIENTRY glMultiTexCoord3fARB (GLenum target, GLfloat s, GLfloat t, GLfloat r); +GLAPI void APIENTRY glMultiTexCoord3fvARB (GLenum target, const GLfloat *v); +GLAPI void APIENTRY glMultiTexCoord3iARB (GLenum target, GLint s, GLint t, GLint r); +GLAPI void APIENTRY glMultiTexCoord3ivARB (GLenum target, const GLint *v); +GLAPI void APIENTRY glMultiTexCoord3sARB (GLenum target, GLshort s, GLshort t, GLshort r); +GLAPI void APIENTRY glMultiTexCoord3svARB (GLenum target, const GLshort *v); +GLAPI void APIENTRY glMultiTexCoord4dARB (GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q); +GLAPI void APIENTRY glMultiTexCoord4dvARB (GLenum target, const GLdouble *v); +GLAPI void APIENTRY glMultiTexCoord4fARB (GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q); +GLAPI void APIENTRY glMultiTexCoord4fvARB (GLenum target, const GLfloat *v); +GLAPI void APIENTRY glMultiTexCoord4iARB (GLenum target, GLint s, GLint t, GLint r, GLint q); +GLAPI void APIENTRY glMultiTexCoord4ivARB (GLenum target, const GLint *v); +GLAPI void APIENTRY glMultiTexCoord4sARB (GLenum target, GLshort s, GLshort t, GLshort r, GLshort q); +GLAPI void APIENTRY glMultiTexCoord4svARB (GLenum target, const GLshort *v); +#endif +#endif /* GL_ARB_multitexture */ + +#ifndef GL_ARB_occlusion_query +#define GL_ARB_occlusion_query 1 +#define GL_QUERY_COUNTER_BITS_ARB 0x8864 +#define GL_CURRENT_QUERY_ARB 0x8865 +#define GL_QUERY_RESULT_ARB 0x8866 +#define GL_QUERY_RESULT_AVAILABLE_ARB 0x8867 +#define GL_SAMPLES_PASSED_ARB 0x8914 +typedef void (APIENTRYP PFNGLGENQUERIESARBPROC) (GLsizei n, GLuint *ids); +typedef void (APIENTRYP PFNGLDELETEQUERIESARBPROC) (GLsizei n, const GLuint *ids); +typedef GLboolean (APIENTRYP PFNGLISQUERYARBPROC) (GLuint id); +typedef void (APIENTRYP PFNGLBEGINQUERYARBPROC) (GLenum target, GLuint id); +typedef void (APIENTRYP PFNGLENDQUERYARBPROC) (GLenum target); +typedef void (APIENTRYP PFNGLGETQUERYIVARBPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETQUERYOBJECTIVARBPROC) (GLuint id, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETQUERYOBJECTUIVARBPROC) (GLuint id, GLenum pname, GLuint *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glGenQueriesARB (GLsizei n, GLuint *ids); +GLAPI void APIENTRY glDeleteQueriesARB (GLsizei n, const GLuint *ids); +GLAPI GLboolean APIENTRY glIsQueryARB (GLuint id); +GLAPI void APIENTRY glBeginQueryARB (GLenum target, GLuint id); +GLAPI void APIENTRY glEndQueryARB (GLenum target); +GLAPI void APIENTRY glGetQueryivARB (GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetQueryObjectivARB (GLuint id, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetQueryObjectuivARB (GLuint id, GLenum pname, GLuint *params); +#endif +#endif /* GL_ARB_occlusion_query */ + +#ifndef GL_ARB_occlusion_query2 +#define GL_ARB_occlusion_query2 1 +#endif /* GL_ARB_occlusion_query2 */ + +#ifndef GL_ARB_parallel_shader_compile +#define GL_ARB_parallel_shader_compile 1 +#define GL_MAX_SHADER_COMPILER_THREADS_ARB 0x91B0 +#define GL_COMPLETION_STATUS_ARB 0x91B1 +typedef void (APIENTRYP PFNGLMAXSHADERCOMPILERTHREADSARBPROC) (GLuint count); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glMaxShaderCompilerThreadsARB (GLuint count); +#endif +#endif /* GL_ARB_parallel_shader_compile */ + +#ifndef GL_ARB_pipeline_statistics_query +#define GL_ARB_pipeline_statistics_query 1 +#define GL_VERTICES_SUBMITTED_ARB 0x82EE +#define GL_PRIMITIVES_SUBMITTED_ARB 0x82EF +#define GL_VERTEX_SHADER_INVOCATIONS_ARB 0x82F0 +#define GL_TESS_CONTROL_SHADER_PATCHES_ARB 0x82F1 +#define GL_TESS_EVALUATION_SHADER_INVOCATIONS_ARB 0x82F2 +#define GL_GEOMETRY_SHADER_PRIMITIVES_EMITTED_ARB 0x82F3 +#define GL_FRAGMENT_SHADER_INVOCATIONS_ARB 0x82F4 +#define GL_COMPUTE_SHADER_INVOCATIONS_ARB 0x82F5 +#define GL_CLIPPING_INPUT_PRIMITIVES_ARB 0x82F6 +#define GL_CLIPPING_OUTPUT_PRIMITIVES_ARB 0x82F7 +#endif /* GL_ARB_pipeline_statistics_query */ + +#ifndef GL_ARB_pixel_buffer_object +#define GL_ARB_pixel_buffer_object 1 +#define GL_PIXEL_PACK_BUFFER_ARB 0x88EB +#define GL_PIXEL_UNPACK_BUFFER_ARB 0x88EC +#define GL_PIXEL_PACK_BUFFER_BINDING_ARB 0x88ED +#define GL_PIXEL_UNPACK_BUFFER_BINDING_ARB 0x88EF +#endif /* GL_ARB_pixel_buffer_object */ + +#ifndef GL_ARB_point_parameters +#define GL_ARB_point_parameters 1 +#define GL_POINT_SIZE_MIN_ARB 0x8126 +#define GL_POINT_SIZE_MAX_ARB 0x8127 +#define GL_POINT_FADE_THRESHOLD_SIZE_ARB 0x8128 +#define GL_POINT_DISTANCE_ATTENUATION_ARB 0x8129 +typedef void (APIENTRYP PFNGLPOINTPARAMETERFARBPROC) (GLenum pname, GLfloat param); +typedef void (APIENTRYP PFNGLPOINTPARAMETERFVARBPROC) (GLenum pname, const GLfloat *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glPointParameterfARB (GLenum pname, GLfloat param); +GLAPI void APIENTRY glPointParameterfvARB (GLenum pname, const GLfloat *params); +#endif +#endif /* GL_ARB_point_parameters */ + +#ifndef GL_ARB_point_sprite +#define GL_ARB_point_sprite 1 +#define GL_POINT_SPRITE_ARB 0x8861 +#define GL_COORD_REPLACE_ARB 0x8862 +#endif /* GL_ARB_point_sprite */ + +#ifndef GL_ARB_polygon_offset_clamp +#define GL_ARB_polygon_offset_clamp 1 +#endif /* GL_ARB_polygon_offset_clamp */ + +#ifndef GL_ARB_post_depth_coverage +#define GL_ARB_post_depth_coverage 1 +#endif /* GL_ARB_post_depth_coverage */ + +#ifndef GL_ARB_program_interface_query +#define GL_ARB_program_interface_query 1 +#endif /* GL_ARB_program_interface_query */ + +#ifndef GL_ARB_provoking_vertex +#define GL_ARB_provoking_vertex 1 +#endif /* GL_ARB_provoking_vertex */ + +#ifndef GL_ARB_query_buffer_object +#define GL_ARB_query_buffer_object 1 +#endif /* GL_ARB_query_buffer_object */ + +#ifndef GL_ARB_robust_buffer_access_behavior +#define GL_ARB_robust_buffer_access_behavior 1 +#endif /* GL_ARB_robust_buffer_access_behavior */ + +#ifndef GL_ARB_robustness +#define GL_ARB_robustness 1 +#define GL_CONTEXT_FLAG_ROBUST_ACCESS_BIT_ARB 0x00000004 +#define GL_LOSE_CONTEXT_ON_RESET_ARB 0x8252 +#define GL_GUILTY_CONTEXT_RESET_ARB 0x8253 +#define GL_INNOCENT_CONTEXT_RESET_ARB 0x8254 +#define GL_UNKNOWN_CONTEXT_RESET_ARB 0x8255 +#define GL_RESET_NOTIFICATION_STRATEGY_ARB 0x8256 +#define GL_NO_RESET_NOTIFICATION_ARB 0x8261 +typedef GLenum (APIENTRYP PFNGLGETGRAPHICSRESETSTATUSARBPROC) (void); +typedef void (APIENTRYP PFNGLGETNTEXIMAGEARBPROC) (GLenum target, GLint level, GLenum format, GLenum type, GLsizei bufSize, void *img); +typedef void (APIENTRYP PFNGLREADNPIXELSARBPROC) (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, void *data); +typedef void (APIENTRYP PFNGLGETNCOMPRESSEDTEXIMAGEARBPROC) (GLenum target, GLint lod, GLsizei bufSize, void *img); +typedef void (APIENTRYP PFNGLGETNUNIFORMFVARBPROC) (GLuint program, GLint location, GLsizei bufSize, GLfloat *params); +typedef void (APIENTRYP PFNGLGETNUNIFORMIVARBPROC) (GLuint program, GLint location, GLsizei bufSize, GLint *params); +typedef void (APIENTRYP PFNGLGETNUNIFORMUIVARBPROC) (GLuint program, GLint location, GLsizei bufSize, GLuint *params); +typedef void (APIENTRYP PFNGLGETNUNIFORMDVARBPROC) (GLuint program, GLint location, GLsizei bufSize, GLdouble *params); +typedef void (APIENTRYP PFNGLGETNMAPDVARBPROC) (GLenum target, GLenum query, GLsizei bufSize, GLdouble *v); +typedef void (APIENTRYP PFNGLGETNMAPFVARBPROC) (GLenum target, GLenum query, GLsizei bufSize, GLfloat *v); +typedef void (APIENTRYP PFNGLGETNMAPIVARBPROC) (GLenum target, GLenum query, GLsizei bufSize, GLint *v); +typedef void (APIENTRYP PFNGLGETNPIXELMAPFVARBPROC) (GLenum map, GLsizei bufSize, GLfloat *values); +typedef void (APIENTRYP PFNGLGETNPIXELMAPUIVARBPROC) (GLenum map, GLsizei bufSize, GLuint *values); +typedef void (APIENTRYP PFNGLGETNPIXELMAPUSVARBPROC) (GLenum map, GLsizei bufSize, GLushort *values); +typedef void (APIENTRYP PFNGLGETNPOLYGONSTIPPLEARBPROC) (GLsizei bufSize, GLubyte *pattern); +typedef void (APIENTRYP PFNGLGETNCOLORTABLEARBPROC) (GLenum target, GLenum format, GLenum type, GLsizei bufSize, void *table); +typedef void (APIENTRYP PFNGLGETNCONVOLUTIONFILTERARBPROC) (GLenum target, GLenum format, GLenum type, GLsizei bufSize, void *image); +typedef void (APIENTRYP PFNGLGETNSEPARABLEFILTERARBPROC) (GLenum target, GLenum format, GLenum type, GLsizei rowBufSize, void *row, GLsizei columnBufSize, void *column, void *span); +typedef void (APIENTRYP PFNGLGETNHISTOGRAMARBPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, void *values); +typedef void (APIENTRYP PFNGLGETNMINMAXARBPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, void *values); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI GLenum APIENTRY glGetGraphicsResetStatusARB (void); +GLAPI void APIENTRY glGetnTexImageARB (GLenum target, GLint level, GLenum format, GLenum type, GLsizei bufSize, void *img); +GLAPI void APIENTRY glReadnPixelsARB (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, void *data); +GLAPI void APIENTRY glGetnCompressedTexImageARB (GLenum target, GLint lod, GLsizei bufSize, void *img); +GLAPI void APIENTRY glGetnUniformfvARB (GLuint program, GLint location, GLsizei bufSize, GLfloat *params); +GLAPI void APIENTRY glGetnUniformivARB (GLuint program, GLint location, GLsizei bufSize, GLint *params); +GLAPI void APIENTRY glGetnUniformuivARB (GLuint program, GLint location, GLsizei bufSize, GLuint *params); +GLAPI void APIENTRY glGetnUniformdvARB (GLuint program, GLint location, GLsizei bufSize, GLdouble *params); +GLAPI void APIENTRY glGetnMapdvARB (GLenum target, GLenum query, GLsizei bufSize, GLdouble *v); +GLAPI void APIENTRY glGetnMapfvARB (GLenum target, GLenum query, GLsizei bufSize, GLfloat *v); +GLAPI void APIENTRY glGetnMapivARB (GLenum target, GLenum query, GLsizei bufSize, GLint *v); +GLAPI void APIENTRY glGetnPixelMapfvARB (GLenum map, GLsizei bufSize, GLfloat *values); +GLAPI void APIENTRY glGetnPixelMapuivARB (GLenum map, GLsizei bufSize, GLuint *values); +GLAPI void APIENTRY glGetnPixelMapusvARB (GLenum map, GLsizei bufSize, GLushort *values); +GLAPI void APIENTRY glGetnPolygonStippleARB (GLsizei bufSize, GLubyte *pattern); +GLAPI void APIENTRY glGetnColorTableARB (GLenum target, GLenum format, GLenum type, GLsizei bufSize, void *table); +GLAPI void APIENTRY glGetnConvolutionFilterARB (GLenum target, GLenum format, GLenum type, GLsizei bufSize, void *image); +GLAPI void APIENTRY glGetnSeparableFilterARB (GLenum target, GLenum format, GLenum type, GLsizei rowBufSize, void *row, GLsizei columnBufSize, void *column, void *span); +GLAPI void APIENTRY glGetnHistogramARB (GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, void *values); +GLAPI void APIENTRY glGetnMinmaxARB (GLenum target, GLboolean reset, GLenum format, GLenum type, GLsizei bufSize, void *values); +#endif +#endif /* GL_ARB_robustness */ + +#ifndef GL_ARB_robustness_isolation +#define GL_ARB_robustness_isolation 1 +#endif /* GL_ARB_robustness_isolation */ + +#ifndef GL_ARB_sample_locations +#define GL_ARB_sample_locations 1 +#define GL_SAMPLE_LOCATION_SUBPIXEL_BITS_ARB 0x933D +#define GL_SAMPLE_LOCATION_PIXEL_GRID_WIDTH_ARB 0x933E +#define GL_SAMPLE_LOCATION_PIXEL_GRID_HEIGHT_ARB 0x933F +#define GL_PROGRAMMABLE_SAMPLE_LOCATION_TABLE_SIZE_ARB 0x9340 +#define GL_SAMPLE_LOCATION_ARB 0x8E50 +#define GL_PROGRAMMABLE_SAMPLE_LOCATION_ARB 0x9341 +#define GL_FRAMEBUFFER_PROGRAMMABLE_SAMPLE_LOCATIONS_ARB 0x9342 +#define GL_FRAMEBUFFER_SAMPLE_LOCATION_PIXEL_GRID_ARB 0x9343 +typedef void (APIENTRYP PFNGLFRAMEBUFFERSAMPLELOCATIONSFVARBPROC) (GLenum target, GLuint start, GLsizei count, const GLfloat *v); +typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERSAMPLELOCATIONSFVARBPROC) (GLuint framebuffer, GLuint start, GLsizei count, const GLfloat *v); +typedef void (APIENTRYP PFNGLEVALUATEDEPTHVALUESARBPROC) (void); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glFramebufferSampleLocationsfvARB (GLenum target, GLuint start, GLsizei count, const GLfloat *v); +GLAPI void APIENTRY glNamedFramebufferSampleLocationsfvARB (GLuint framebuffer, GLuint start, GLsizei count, const GLfloat *v); +GLAPI void APIENTRY glEvaluateDepthValuesARB (void); +#endif +#endif /* GL_ARB_sample_locations */ + +#ifndef GL_ARB_sample_shading +#define GL_ARB_sample_shading 1 +#define GL_SAMPLE_SHADING_ARB 0x8C36 +#define GL_MIN_SAMPLE_SHADING_VALUE_ARB 0x8C37 +typedef void (APIENTRYP PFNGLMINSAMPLESHADINGARBPROC) (GLfloat value); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glMinSampleShadingARB (GLfloat value); +#endif +#endif /* GL_ARB_sample_shading */ + +#ifndef GL_ARB_sampler_objects +#define GL_ARB_sampler_objects 1 +#endif /* GL_ARB_sampler_objects */ + +#ifndef GL_ARB_seamless_cube_map +#define GL_ARB_seamless_cube_map 1 +#endif /* GL_ARB_seamless_cube_map */ + +#ifndef GL_ARB_seamless_cubemap_per_texture +#define GL_ARB_seamless_cubemap_per_texture 1 +#endif /* GL_ARB_seamless_cubemap_per_texture */ + +#ifndef GL_ARB_separate_shader_objects +#define GL_ARB_separate_shader_objects 1 +#endif /* GL_ARB_separate_shader_objects */ + +#ifndef GL_ARB_shader_atomic_counter_ops +#define GL_ARB_shader_atomic_counter_ops 1 +#endif /* GL_ARB_shader_atomic_counter_ops */ + +#ifndef GL_ARB_shader_atomic_counters +#define GL_ARB_shader_atomic_counters 1 +#endif /* GL_ARB_shader_atomic_counters */ + +#ifndef GL_ARB_shader_ballot +#define GL_ARB_shader_ballot 1 +#endif /* GL_ARB_shader_ballot */ + +#ifndef GL_ARB_shader_bit_encoding +#define GL_ARB_shader_bit_encoding 1 +#endif /* GL_ARB_shader_bit_encoding */ + +#ifndef GL_ARB_shader_clock +#define GL_ARB_shader_clock 1 +#endif /* GL_ARB_shader_clock */ + +#ifndef GL_ARB_shader_draw_parameters +#define GL_ARB_shader_draw_parameters 1 +#endif /* GL_ARB_shader_draw_parameters */ + +#ifndef GL_ARB_shader_group_vote +#define GL_ARB_shader_group_vote 1 +#endif /* GL_ARB_shader_group_vote */ + +#ifndef GL_ARB_shader_image_load_store +#define GL_ARB_shader_image_load_store 1 +#endif /* GL_ARB_shader_image_load_store */ + +#ifndef GL_ARB_shader_image_size +#define GL_ARB_shader_image_size 1 +#endif /* GL_ARB_shader_image_size */ + +#ifndef GL_ARB_shader_objects +#define GL_ARB_shader_objects 1 +#ifdef __APPLE__ +typedef void *GLhandleARB; +#else +typedef unsigned int GLhandleARB; +#endif +typedef char GLcharARB; +#define GL_PROGRAM_OBJECT_ARB 0x8B40 +#define GL_SHADER_OBJECT_ARB 0x8B48 +#define GL_OBJECT_TYPE_ARB 0x8B4E +#define GL_OBJECT_SUBTYPE_ARB 0x8B4F +#define GL_FLOAT_VEC2_ARB 0x8B50 +#define GL_FLOAT_VEC3_ARB 0x8B51 +#define GL_FLOAT_VEC4_ARB 0x8B52 +#define GL_INT_VEC2_ARB 0x8B53 +#define GL_INT_VEC3_ARB 0x8B54 +#define GL_INT_VEC4_ARB 0x8B55 +#define GL_BOOL_ARB 0x8B56 +#define GL_BOOL_VEC2_ARB 0x8B57 +#define GL_BOOL_VEC3_ARB 0x8B58 +#define GL_BOOL_VEC4_ARB 0x8B59 +#define GL_FLOAT_MAT2_ARB 0x8B5A +#define GL_FLOAT_MAT3_ARB 0x8B5B +#define GL_FLOAT_MAT4_ARB 0x8B5C +#define GL_SAMPLER_1D_ARB 0x8B5D +#define GL_SAMPLER_2D_ARB 0x8B5E +#define GL_SAMPLER_3D_ARB 0x8B5F +#define GL_SAMPLER_CUBE_ARB 0x8B60 +#define GL_SAMPLER_1D_SHADOW_ARB 0x8B61 +#define GL_SAMPLER_2D_SHADOW_ARB 0x8B62 +#define GL_SAMPLER_2D_RECT_ARB 0x8B63 +#define GL_SAMPLER_2D_RECT_SHADOW_ARB 0x8B64 +#define GL_OBJECT_DELETE_STATUS_ARB 0x8B80 +#define GL_OBJECT_COMPILE_STATUS_ARB 0x8B81 +#define GL_OBJECT_LINK_STATUS_ARB 0x8B82 +#define GL_OBJECT_VALIDATE_STATUS_ARB 0x8B83 +#define GL_OBJECT_INFO_LOG_LENGTH_ARB 0x8B84 +#define GL_OBJECT_ATTACHED_OBJECTS_ARB 0x8B85 +#define GL_OBJECT_ACTIVE_UNIFORMS_ARB 0x8B86 +#define GL_OBJECT_ACTIVE_UNIFORM_MAX_LENGTH_ARB 0x8B87 +#define GL_OBJECT_SHADER_SOURCE_LENGTH_ARB 0x8B88 +typedef void (APIENTRYP PFNGLDELETEOBJECTARBPROC) (GLhandleARB obj); +typedef GLhandleARB (APIENTRYP PFNGLGETHANDLEARBPROC) (GLenum pname); +typedef void (APIENTRYP PFNGLDETACHOBJECTARBPROC) (GLhandleARB containerObj, GLhandleARB attachedObj); +typedef GLhandleARB (APIENTRYP PFNGLCREATESHADEROBJECTARBPROC) (GLenum shaderType); +typedef void (APIENTRYP PFNGLSHADERSOURCEARBPROC) (GLhandleARB shaderObj, GLsizei count, const GLcharARB **string, const GLint *length); +typedef void (APIENTRYP PFNGLCOMPILESHADERARBPROC) (GLhandleARB shaderObj); +typedef GLhandleARB (APIENTRYP PFNGLCREATEPROGRAMOBJECTARBPROC) (void); +typedef void (APIENTRYP PFNGLATTACHOBJECTARBPROC) (GLhandleARB containerObj, GLhandleARB obj); +typedef void (APIENTRYP PFNGLLINKPROGRAMARBPROC) (GLhandleARB programObj); +typedef void (APIENTRYP PFNGLUSEPROGRAMOBJECTARBPROC) (GLhandleARB programObj); +typedef void (APIENTRYP PFNGLVALIDATEPROGRAMARBPROC) (GLhandleARB programObj); +typedef void (APIENTRYP PFNGLUNIFORM1FARBPROC) (GLint location, GLfloat v0); +typedef void (APIENTRYP PFNGLUNIFORM2FARBPROC) (GLint location, GLfloat v0, GLfloat v1); +typedef void (APIENTRYP PFNGLUNIFORM3FARBPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2); +typedef void (APIENTRYP PFNGLUNIFORM4FARBPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); +typedef void (APIENTRYP PFNGLUNIFORM1IARBPROC) (GLint location, GLint v0); +typedef void (APIENTRYP PFNGLUNIFORM2IARBPROC) (GLint location, GLint v0, GLint v1); +typedef void (APIENTRYP PFNGLUNIFORM3IARBPROC) (GLint location, GLint v0, GLint v1, GLint v2); +typedef void (APIENTRYP PFNGLUNIFORM4IARBPROC) (GLint location, GLint v0, GLint v1, GLint v2, GLint v3); +typedef void (APIENTRYP PFNGLUNIFORM1FVARBPROC) (GLint location, GLsizei count, const GLfloat *value); +typedef void (APIENTRYP PFNGLUNIFORM2FVARBPROC) (GLint location, GLsizei count, const GLfloat *value); +typedef void (APIENTRYP PFNGLUNIFORM3FVARBPROC) (GLint location, GLsizei count, const GLfloat *value); +typedef void (APIENTRYP PFNGLUNIFORM4FVARBPROC) (GLint location, GLsizei count, const GLfloat *value); +typedef void (APIENTRYP PFNGLUNIFORM1IVARBPROC) (GLint location, GLsizei count, const GLint *value); +typedef void (APIENTRYP PFNGLUNIFORM2IVARBPROC) (GLint location, GLsizei count, const GLint *value); +typedef void (APIENTRYP PFNGLUNIFORM3IVARBPROC) (GLint location, GLsizei count, const GLint *value); +typedef void (APIENTRYP PFNGLUNIFORM4IVARBPROC) (GLint location, GLsizei count, const GLint *value); +typedef void (APIENTRYP PFNGLUNIFORMMATRIX2FVARBPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLUNIFORMMATRIX3FVARBPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLUNIFORMMATRIX4FVARBPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLGETOBJECTPARAMETERFVARBPROC) (GLhandleARB obj, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETOBJECTPARAMETERIVARBPROC) (GLhandleARB obj, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETINFOLOGARBPROC) (GLhandleARB obj, GLsizei maxLength, GLsizei *length, GLcharARB *infoLog); +typedef void (APIENTRYP PFNGLGETATTACHEDOBJECTSARBPROC) (GLhandleARB containerObj, GLsizei maxCount, GLsizei *count, GLhandleARB *obj); +typedef GLint (APIENTRYP PFNGLGETUNIFORMLOCATIONARBPROC) (GLhandleARB programObj, const GLcharARB *name); +typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMARBPROC) (GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei *length, GLint *size, GLenum *type, GLcharARB *name); +typedef void (APIENTRYP PFNGLGETUNIFORMFVARBPROC) (GLhandleARB programObj, GLint location, GLfloat *params); +typedef void (APIENTRYP PFNGLGETUNIFORMIVARBPROC) (GLhandleARB programObj, GLint location, GLint *params); +typedef void (APIENTRYP PFNGLGETSHADERSOURCEARBPROC) (GLhandleARB obj, GLsizei maxLength, GLsizei *length, GLcharARB *source); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glDeleteObjectARB (GLhandleARB obj); +GLAPI GLhandleARB APIENTRY glGetHandleARB (GLenum pname); +GLAPI void APIENTRY glDetachObjectARB (GLhandleARB containerObj, GLhandleARB attachedObj); +GLAPI GLhandleARB APIENTRY glCreateShaderObjectARB (GLenum shaderType); +GLAPI void APIENTRY glShaderSourceARB (GLhandleARB shaderObj, GLsizei count, const GLcharARB **string, const GLint *length); +GLAPI void APIENTRY glCompileShaderARB (GLhandleARB shaderObj); +GLAPI GLhandleARB APIENTRY glCreateProgramObjectARB (void); +GLAPI void APIENTRY glAttachObjectARB (GLhandleARB containerObj, GLhandleARB obj); +GLAPI void APIENTRY glLinkProgramARB (GLhandleARB programObj); +GLAPI void APIENTRY glUseProgramObjectARB (GLhandleARB programObj); +GLAPI void APIENTRY glValidateProgramARB (GLhandleARB programObj); +GLAPI void APIENTRY glUniform1fARB (GLint location, GLfloat v0); +GLAPI void APIENTRY glUniform2fARB (GLint location, GLfloat v0, GLfloat v1); +GLAPI void APIENTRY glUniform3fARB (GLint location, GLfloat v0, GLfloat v1, GLfloat v2); +GLAPI void APIENTRY glUniform4fARB (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); +GLAPI void APIENTRY glUniform1iARB (GLint location, GLint v0); +GLAPI void APIENTRY glUniform2iARB (GLint location, GLint v0, GLint v1); +GLAPI void APIENTRY glUniform3iARB (GLint location, GLint v0, GLint v1, GLint v2); +GLAPI void APIENTRY glUniform4iARB (GLint location, GLint v0, GLint v1, GLint v2, GLint v3); +GLAPI void APIENTRY glUniform1fvARB (GLint location, GLsizei count, const GLfloat *value); +GLAPI void APIENTRY glUniform2fvARB (GLint location, GLsizei count, const GLfloat *value); +GLAPI void APIENTRY glUniform3fvARB (GLint location, GLsizei count, const GLfloat *value); +GLAPI void APIENTRY glUniform4fvARB (GLint location, GLsizei count, const GLfloat *value); +GLAPI void APIENTRY glUniform1ivARB (GLint location, GLsizei count, const GLint *value); +GLAPI void APIENTRY glUniform2ivARB (GLint location, GLsizei count, const GLint *value); +GLAPI void APIENTRY glUniform3ivARB (GLint location, GLsizei count, const GLint *value); +GLAPI void APIENTRY glUniform4ivARB (GLint location, GLsizei count, const GLint *value); +GLAPI void APIENTRY glUniformMatrix2fvARB (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glUniformMatrix3fvARB (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glUniformMatrix4fvARB (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glGetObjectParameterfvARB (GLhandleARB obj, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetObjectParameterivARB (GLhandleARB obj, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetInfoLogARB (GLhandleARB obj, GLsizei maxLength, GLsizei *length, GLcharARB *infoLog); +GLAPI void APIENTRY glGetAttachedObjectsARB (GLhandleARB containerObj, GLsizei maxCount, GLsizei *count, GLhandleARB *obj); +GLAPI GLint APIENTRY glGetUniformLocationARB (GLhandleARB programObj, const GLcharARB *name); +GLAPI void APIENTRY glGetActiveUniformARB (GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei *length, GLint *size, GLenum *type, GLcharARB *name); +GLAPI void APIENTRY glGetUniformfvARB (GLhandleARB programObj, GLint location, GLfloat *params); +GLAPI void APIENTRY glGetUniformivARB (GLhandleARB programObj, GLint location, GLint *params); +GLAPI void APIENTRY glGetShaderSourceARB (GLhandleARB obj, GLsizei maxLength, GLsizei *length, GLcharARB *source); +#endif +#endif /* GL_ARB_shader_objects */ + +#ifndef GL_ARB_shader_precision +#define GL_ARB_shader_precision 1 +#endif /* GL_ARB_shader_precision */ + +#ifndef GL_ARB_shader_stencil_export +#define GL_ARB_shader_stencil_export 1 +#endif /* GL_ARB_shader_stencil_export */ + +#ifndef GL_ARB_shader_storage_buffer_object +#define GL_ARB_shader_storage_buffer_object 1 +#endif /* GL_ARB_shader_storage_buffer_object */ + +#ifndef GL_ARB_shader_subroutine +#define GL_ARB_shader_subroutine 1 +#endif /* GL_ARB_shader_subroutine */ + +#ifndef GL_ARB_shader_texture_image_samples +#define GL_ARB_shader_texture_image_samples 1 +#endif /* GL_ARB_shader_texture_image_samples */ + +#ifndef GL_ARB_shader_texture_lod +#define GL_ARB_shader_texture_lod 1 +#endif /* GL_ARB_shader_texture_lod */ + +#ifndef GL_ARB_shader_viewport_layer_array +#define GL_ARB_shader_viewport_layer_array 1 +#endif /* GL_ARB_shader_viewport_layer_array */ + +#ifndef GL_ARB_shading_language_100 +#define GL_ARB_shading_language_100 1 +#define GL_SHADING_LANGUAGE_VERSION_ARB 0x8B8C +#endif /* GL_ARB_shading_language_100 */ + +#ifndef GL_ARB_shading_language_420pack +#define GL_ARB_shading_language_420pack 1 +#endif /* GL_ARB_shading_language_420pack */ + +#ifndef GL_ARB_shading_language_include +#define GL_ARB_shading_language_include 1 +#define GL_SHADER_INCLUDE_ARB 0x8DAE +#define GL_NAMED_STRING_LENGTH_ARB 0x8DE9 +#define GL_NAMED_STRING_TYPE_ARB 0x8DEA +typedef void (APIENTRYP PFNGLNAMEDSTRINGARBPROC) (GLenum type, GLint namelen, const GLchar *name, GLint stringlen, const GLchar *string); +typedef void (APIENTRYP PFNGLDELETENAMEDSTRINGARBPROC) (GLint namelen, const GLchar *name); +typedef void (APIENTRYP PFNGLCOMPILESHADERINCLUDEARBPROC) (GLuint shader, GLsizei count, const GLchar *const*path, const GLint *length); +typedef GLboolean (APIENTRYP PFNGLISNAMEDSTRINGARBPROC) (GLint namelen, const GLchar *name); +typedef void (APIENTRYP PFNGLGETNAMEDSTRINGARBPROC) (GLint namelen, const GLchar *name, GLsizei bufSize, GLint *stringlen, GLchar *string); +typedef void (APIENTRYP PFNGLGETNAMEDSTRINGIVARBPROC) (GLint namelen, const GLchar *name, GLenum pname, GLint *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glNamedStringARB (GLenum type, GLint namelen, const GLchar *name, GLint stringlen, const GLchar *string); +GLAPI void APIENTRY glDeleteNamedStringARB (GLint namelen, const GLchar *name); +GLAPI void APIENTRY glCompileShaderIncludeARB (GLuint shader, GLsizei count, const GLchar *const*path, const GLint *length); +GLAPI GLboolean APIENTRY glIsNamedStringARB (GLint namelen, const GLchar *name); +GLAPI void APIENTRY glGetNamedStringARB (GLint namelen, const GLchar *name, GLsizei bufSize, GLint *stringlen, GLchar *string); +GLAPI void APIENTRY glGetNamedStringivARB (GLint namelen, const GLchar *name, GLenum pname, GLint *params); +#endif +#endif /* GL_ARB_shading_language_include */ + +#ifndef GL_ARB_shading_language_packing +#define GL_ARB_shading_language_packing 1 +#endif /* GL_ARB_shading_language_packing */ + +#ifndef GL_ARB_shadow +#define GL_ARB_shadow 1 +#define GL_TEXTURE_COMPARE_MODE_ARB 0x884C +#define GL_TEXTURE_COMPARE_FUNC_ARB 0x884D +#define GL_COMPARE_R_TO_TEXTURE_ARB 0x884E +#endif /* GL_ARB_shadow */ + +#ifndef GL_ARB_shadow_ambient +#define GL_ARB_shadow_ambient 1 +#define GL_TEXTURE_COMPARE_FAIL_VALUE_ARB 0x80BF +#endif /* GL_ARB_shadow_ambient */ + +#ifndef GL_ARB_sparse_buffer +#define GL_ARB_sparse_buffer 1 +#define GL_SPARSE_STORAGE_BIT_ARB 0x0400 +#define GL_SPARSE_BUFFER_PAGE_SIZE_ARB 0x82F8 +typedef void (APIENTRYP PFNGLBUFFERPAGECOMMITMENTARBPROC) (GLenum target, GLintptr offset, GLsizeiptr size, GLboolean commit); +typedef void (APIENTRYP PFNGLNAMEDBUFFERPAGECOMMITMENTEXTPROC) (GLuint buffer, GLintptr offset, GLsizeiptr size, GLboolean commit); +typedef void (APIENTRYP PFNGLNAMEDBUFFERPAGECOMMITMENTARBPROC) (GLuint buffer, GLintptr offset, GLsizeiptr size, GLboolean commit); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBufferPageCommitmentARB (GLenum target, GLintptr offset, GLsizeiptr size, GLboolean commit); +GLAPI void APIENTRY glNamedBufferPageCommitmentEXT (GLuint buffer, GLintptr offset, GLsizeiptr size, GLboolean commit); +GLAPI void APIENTRY glNamedBufferPageCommitmentARB (GLuint buffer, GLintptr offset, GLsizeiptr size, GLboolean commit); +#endif +#endif /* GL_ARB_sparse_buffer */ + +#ifndef GL_ARB_sparse_texture +#define GL_ARB_sparse_texture 1 +#define GL_TEXTURE_SPARSE_ARB 0x91A6 +#define GL_VIRTUAL_PAGE_SIZE_INDEX_ARB 0x91A7 +#define GL_NUM_SPARSE_LEVELS_ARB 0x91AA +#define GL_NUM_VIRTUAL_PAGE_SIZES_ARB 0x91A8 +#define GL_VIRTUAL_PAGE_SIZE_X_ARB 0x9195 +#define GL_VIRTUAL_PAGE_SIZE_Y_ARB 0x9196 +#define GL_VIRTUAL_PAGE_SIZE_Z_ARB 0x9197 +#define GL_MAX_SPARSE_TEXTURE_SIZE_ARB 0x9198 +#define GL_MAX_SPARSE_3D_TEXTURE_SIZE_ARB 0x9199 +#define GL_MAX_SPARSE_ARRAY_TEXTURE_LAYERS_ARB 0x919A +#define GL_SPARSE_TEXTURE_FULL_ARRAY_CUBE_MIPMAPS_ARB 0x91A9 +typedef void (APIENTRYP PFNGLTEXPAGECOMMITMENTARBPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLboolean commit); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glTexPageCommitmentARB (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLboolean commit); +#endif +#endif /* GL_ARB_sparse_texture */ + +#ifndef GL_ARB_sparse_texture2 +#define GL_ARB_sparse_texture2 1 +#endif /* GL_ARB_sparse_texture2 */ + +#ifndef GL_ARB_sparse_texture_clamp +#define GL_ARB_sparse_texture_clamp 1 +#endif /* GL_ARB_sparse_texture_clamp */ + +#ifndef GL_ARB_spirv_extensions +#define GL_ARB_spirv_extensions 1 +#endif /* GL_ARB_spirv_extensions */ + +#ifndef GL_ARB_stencil_texturing +#define GL_ARB_stencil_texturing 1 +#endif /* GL_ARB_stencil_texturing */ + +#ifndef GL_ARB_sync +#define GL_ARB_sync 1 +#endif /* GL_ARB_sync */ + +#ifndef GL_ARB_tessellation_shader +#define GL_ARB_tessellation_shader 1 +#endif /* GL_ARB_tessellation_shader */ + +#ifndef GL_ARB_texture_barrier +#define GL_ARB_texture_barrier 1 +#endif /* GL_ARB_texture_barrier */ + +#ifndef GL_ARB_texture_border_clamp +#define GL_ARB_texture_border_clamp 1 +#define GL_CLAMP_TO_BORDER_ARB 0x812D +#endif /* GL_ARB_texture_border_clamp */ + +#ifndef GL_ARB_texture_buffer_object +#define GL_ARB_texture_buffer_object 1 +#define GL_TEXTURE_BUFFER_ARB 0x8C2A +#define GL_MAX_TEXTURE_BUFFER_SIZE_ARB 0x8C2B +#define GL_TEXTURE_BINDING_BUFFER_ARB 0x8C2C +#define GL_TEXTURE_BUFFER_DATA_STORE_BINDING_ARB 0x8C2D +#define GL_TEXTURE_BUFFER_FORMAT_ARB 0x8C2E +typedef void (APIENTRYP PFNGLTEXBUFFERARBPROC) (GLenum target, GLenum internalformat, GLuint buffer); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glTexBufferARB (GLenum target, GLenum internalformat, GLuint buffer); +#endif +#endif /* GL_ARB_texture_buffer_object */ + +#ifndef GL_ARB_texture_buffer_object_rgb32 +#define GL_ARB_texture_buffer_object_rgb32 1 +#endif /* GL_ARB_texture_buffer_object_rgb32 */ + +#ifndef GL_ARB_texture_buffer_range +#define GL_ARB_texture_buffer_range 1 +#endif /* GL_ARB_texture_buffer_range */ + +#ifndef GL_ARB_texture_compression +#define GL_ARB_texture_compression 1 +#define GL_COMPRESSED_ALPHA_ARB 0x84E9 +#define GL_COMPRESSED_LUMINANCE_ARB 0x84EA +#define GL_COMPRESSED_LUMINANCE_ALPHA_ARB 0x84EB +#define GL_COMPRESSED_INTENSITY_ARB 0x84EC +#define GL_COMPRESSED_RGB_ARB 0x84ED +#define GL_COMPRESSED_RGBA_ARB 0x84EE +#define GL_TEXTURE_COMPRESSION_HINT_ARB 0x84EF +#define GL_TEXTURE_COMPRESSED_IMAGE_SIZE_ARB 0x86A0 +#define GL_TEXTURE_COMPRESSED_ARB 0x86A1 +#define GL_NUM_COMPRESSED_TEXTURE_FORMATS_ARB 0x86A2 +#define GL_COMPRESSED_TEXTURE_FORMATS_ARB 0x86A3 +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE3DARBPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *data); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE2DARBPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *data); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE1DARBPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void *data); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE3DARBPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *data); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE2DARBPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *data); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE1DARBPROC) (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *data); +typedef void (APIENTRYP PFNGLGETCOMPRESSEDTEXIMAGEARBPROC) (GLenum target, GLint level, void *img); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glCompressedTexImage3DARB (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *data); +GLAPI void APIENTRY glCompressedTexImage2DARB (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *data); +GLAPI void APIENTRY glCompressedTexImage1DARB (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void *data); +GLAPI void APIENTRY glCompressedTexSubImage3DARB (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *data); +GLAPI void APIENTRY glCompressedTexSubImage2DARB (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *data); +GLAPI void APIENTRY glCompressedTexSubImage1DARB (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *data); +GLAPI void APIENTRY glGetCompressedTexImageARB (GLenum target, GLint level, void *img); +#endif +#endif /* GL_ARB_texture_compression */ + +#ifndef GL_ARB_texture_compression_bptc +#define GL_ARB_texture_compression_bptc 1 +#define GL_COMPRESSED_RGBA_BPTC_UNORM_ARB 0x8E8C +#define GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM_ARB 0x8E8D +#define GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT_ARB 0x8E8E +#define GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_ARB 0x8E8F +#endif /* GL_ARB_texture_compression_bptc */ + +#ifndef GL_ARB_texture_compression_rgtc +#define GL_ARB_texture_compression_rgtc 1 +#endif /* GL_ARB_texture_compression_rgtc */ + +#ifndef GL_ARB_texture_cube_map +#define GL_ARB_texture_cube_map 1 +#define GL_NORMAL_MAP_ARB 0x8511 +#define GL_REFLECTION_MAP_ARB 0x8512 +#define GL_TEXTURE_CUBE_MAP_ARB 0x8513 +#define GL_TEXTURE_BINDING_CUBE_MAP_ARB 0x8514 +#define GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB 0x8515 +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X_ARB 0x8516 +#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y_ARB 0x8517 +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB 0x8518 +#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z_ARB 0x8519 +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB 0x851A +#define GL_PROXY_TEXTURE_CUBE_MAP_ARB 0x851B +#define GL_MAX_CUBE_MAP_TEXTURE_SIZE_ARB 0x851C +#endif /* GL_ARB_texture_cube_map */ + +#ifndef GL_ARB_texture_cube_map_array +#define GL_ARB_texture_cube_map_array 1 +#define GL_TEXTURE_CUBE_MAP_ARRAY_ARB 0x9009 +#define GL_TEXTURE_BINDING_CUBE_MAP_ARRAY_ARB 0x900A +#define GL_PROXY_TEXTURE_CUBE_MAP_ARRAY_ARB 0x900B +#define GL_SAMPLER_CUBE_MAP_ARRAY_ARB 0x900C +#define GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW_ARB 0x900D +#define GL_INT_SAMPLER_CUBE_MAP_ARRAY_ARB 0x900E +#define GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY_ARB 0x900F +#endif /* GL_ARB_texture_cube_map_array */ + +#ifndef GL_ARB_texture_env_add +#define GL_ARB_texture_env_add 1 +#endif /* GL_ARB_texture_env_add */ + +#ifndef GL_ARB_texture_env_combine +#define GL_ARB_texture_env_combine 1 +#define GL_COMBINE_ARB 0x8570 +#define GL_COMBINE_RGB_ARB 0x8571 +#define GL_COMBINE_ALPHA_ARB 0x8572 +#define GL_SOURCE0_RGB_ARB 0x8580 +#define GL_SOURCE1_RGB_ARB 0x8581 +#define GL_SOURCE2_RGB_ARB 0x8582 +#define GL_SOURCE0_ALPHA_ARB 0x8588 +#define GL_SOURCE1_ALPHA_ARB 0x8589 +#define GL_SOURCE2_ALPHA_ARB 0x858A +#define GL_OPERAND0_RGB_ARB 0x8590 +#define GL_OPERAND1_RGB_ARB 0x8591 +#define GL_OPERAND2_RGB_ARB 0x8592 +#define GL_OPERAND0_ALPHA_ARB 0x8598 +#define GL_OPERAND1_ALPHA_ARB 0x8599 +#define GL_OPERAND2_ALPHA_ARB 0x859A +#define GL_RGB_SCALE_ARB 0x8573 +#define GL_ADD_SIGNED_ARB 0x8574 +#define GL_INTERPOLATE_ARB 0x8575 +#define GL_SUBTRACT_ARB 0x84E7 +#define GL_CONSTANT_ARB 0x8576 +#define GL_PRIMARY_COLOR_ARB 0x8577 +#define GL_PREVIOUS_ARB 0x8578 +#endif /* GL_ARB_texture_env_combine */ + +#ifndef GL_ARB_texture_env_crossbar +#define GL_ARB_texture_env_crossbar 1 +#endif /* GL_ARB_texture_env_crossbar */ + +#ifndef GL_ARB_texture_env_dot3 +#define GL_ARB_texture_env_dot3 1 +#define GL_DOT3_RGB_ARB 0x86AE +#define GL_DOT3_RGBA_ARB 0x86AF +#endif /* GL_ARB_texture_env_dot3 */ + +#ifndef GL_ARB_texture_filter_anisotropic +#define GL_ARB_texture_filter_anisotropic 1 +#endif /* GL_ARB_texture_filter_anisotropic */ + +#ifndef GL_ARB_texture_filter_minmax +#define GL_ARB_texture_filter_minmax 1 +#define GL_TEXTURE_REDUCTION_MODE_ARB 0x9366 +#define GL_WEIGHTED_AVERAGE_ARB 0x9367 +#endif /* GL_ARB_texture_filter_minmax */ + +#ifndef GL_ARB_texture_float +#define GL_ARB_texture_float 1 +#define GL_TEXTURE_RED_TYPE_ARB 0x8C10 +#define GL_TEXTURE_GREEN_TYPE_ARB 0x8C11 +#define GL_TEXTURE_BLUE_TYPE_ARB 0x8C12 +#define GL_TEXTURE_ALPHA_TYPE_ARB 0x8C13 +#define GL_TEXTURE_LUMINANCE_TYPE_ARB 0x8C14 +#define GL_TEXTURE_INTENSITY_TYPE_ARB 0x8C15 +#define GL_TEXTURE_DEPTH_TYPE_ARB 0x8C16 +#define GL_UNSIGNED_NORMALIZED_ARB 0x8C17 +#define GL_RGBA32F_ARB 0x8814 +#define GL_RGB32F_ARB 0x8815 +#define GL_ALPHA32F_ARB 0x8816 +#define GL_INTENSITY32F_ARB 0x8817 +#define GL_LUMINANCE32F_ARB 0x8818 +#define GL_LUMINANCE_ALPHA32F_ARB 0x8819 +#define GL_RGBA16F_ARB 0x881A +#define GL_RGB16F_ARB 0x881B +#define GL_ALPHA16F_ARB 0x881C +#define GL_INTENSITY16F_ARB 0x881D +#define GL_LUMINANCE16F_ARB 0x881E +#define GL_LUMINANCE_ALPHA16F_ARB 0x881F +#endif /* GL_ARB_texture_float */ + +#ifndef GL_ARB_texture_gather +#define GL_ARB_texture_gather 1 +#define GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET_ARB 0x8E5E +#define GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET_ARB 0x8E5F +#define GL_MAX_PROGRAM_TEXTURE_GATHER_COMPONENTS_ARB 0x8F9F +#endif /* GL_ARB_texture_gather */ + +#ifndef GL_ARB_texture_mirror_clamp_to_edge +#define GL_ARB_texture_mirror_clamp_to_edge 1 +#endif /* GL_ARB_texture_mirror_clamp_to_edge */ + +#ifndef GL_ARB_texture_mirrored_repeat +#define GL_ARB_texture_mirrored_repeat 1 +#define GL_MIRRORED_REPEAT_ARB 0x8370 +#endif /* GL_ARB_texture_mirrored_repeat */ + +#ifndef GL_ARB_texture_multisample +#define GL_ARB_texture_multisample 1 +#endif /* GL_ARB_texture_multisample */ + +#ifndef GL_ARB_texture_non_power_of_two +#define GL_ARB_texture_non_power_of_two 1 +#endif /* GL_ARB_texture_non_power_of_two */ + +#ifndef GL_ARB_texture_query_levels +#define GL_ARB_texture_query_levels 1 +#endif /* GL_ARB_texture_query_levels */ + +#ifndef GL_ARB_texture_query_lod +#define GL_ARB_texture_query_lod 1 +#endif /* GL_ARB_texture_query_lod */ + +#ifndef GL_ARB_texture_rectangle +#define GL_ARB_texture_rectangle 1 +#define GL_TEXTURE_RECTANGLE_ARB 0x84F5 +#define GL_TEXTURE_BINDING_RECTANGLE_ARB 0x84F6 +#define GL_PROXY_TEXTURE_RECTANGLE_ARB 0x84F7 +#define GL_MAX_RECTANGLE_TEXTURE_SIZE_ARB 0x84F8 +#endif /* GL_ARB_texture_rectangle */ + +#ifndef GL_ARB_texture_rg +#define GL_ARB_texture_rg 1 +#endif /* GL_ARB_texture_rg */ + +#ifndef GL_ARB_texture_rgb10_a2ui +#define GL_ARB_texture_rgb10_a2ui 1 +#endif /* GL_ARB_texture_rgb10_a2ui */ + +#ifndef GL_ARB_texture_stencil8 +#define GL_ARB_texture_stencil8 1 +#endif /* GL_ARB_texture_stencil8 */ + +#ifndef GL_ARB_texture_storage +#define GL_ARB_texture_storage 1 +#endif /* GL_ARB_texture_storage */ + +#ifndef GL_ARB_texture_storage_multisample +#define GL_ARB_texture_storage_multisample 1 +#endif /* GL_ARB_texture_storage_multisample */ + +#ifndef GL_ARB_texture_swizzle +#define GL_ARB_texture_swizzle 1 +#endif /* GL_ARB_texture_swizzle */ + +#ifndef GL_ARB_texture_view +#define GL_ARB_texture_view 1 +#endif /* GL_ARB_texture_view */ + +#ifndef GL_ARB_timer_query +#define GL_ARB_timer_query 1 +#endif /* GL_ARB_timer_query */ + +#ifndef GL_ARB_transform_feedback2 +#define GL_ARB_transform_feedback2 1 +#endif /* GL_ARB_transform_feedback2 */ + +#ifndef GL_ARB_transform_feedback3 +#define GL_ARB_transform_feedback3 1 +#endif /* GL_ARB_transform_feedback3 */ + +#ifndef GL_ARB_transform_feedback_instanced +#define GL_ARB_transform_feedback_instanced 1 +#endif /* GL_ARB_transform_feedback_instanced */ + +#ifndef GL_ARB_transform_feedback_overflow_query +#define GL_ARB_transform_feedback_overflow_query 1 +#define GL_TRANSFORM_FEEDBACK_OVERFLOW_ARB 0x82EC +#define GL_TRANSFORM_FEEDBACK_STREAM_OVERFLOW_ARB 0x82ED +#endif /* GL_ARB_transform_feedback_overflow_query */ + +#ifndef GL_ARB_transpose_matrix +#define GL_ARB_transpose_matrix 1 +#define GL_TRANSPOSE_MODELVIEW_MATRIX_ARB 0x84E3 +#define GL_TRANSPOSE_PROJECTION_MATRIX_ARB 0x84E4 +#define GL_TRANSPOSE_TEXTURE_MATRIX_ARB 0x84E5 +#define GL_TRANSPOSE_COLOR_MATRIX_ARB 0x84E6 +typedef void (APIENTRYP PFNGLLOADTRANSPOSEMATRIXFARBPROC) (const GLfloat *m); +typedef void (APIENTRYP PFNGLLOADTRANSPOSEMATRIXDARBPROC) (const GLdouble *m); +typedef void (APIENTRYP PFNGLMULTTRANSPOSEMATRIXFARBPROC) (const GLfloat *m); +typedef void (APIENTRYP PFNGLMULTTRANSPOSEMATRIXDARBPROC) (const GLdouble *m); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glLoadTransposeMatrixfARB (const GLfloat *m); +GLAPI void APIENTRY glLoadTransposeMatrixdARB (const GLdouble *m); +GLAPI void APIENTRY glMultTransposeMatrixfARB (const GLfloat *m); +GLAPI void APIENTRY glMultTransposeMatrixdARB (const GLdouble *m); +#endif +#endif /* GL_ARB_transpose_matrix */ + +#ifndef GL_ARB_uniform_buffer_object +#define GL_ARB_uniform_buffer_object 1 +#endif /* GL_ARB_uniform_buffer_object */ + +#ifndef GL_ARB_vertex_array_bgra +#define GL_ARB_vertex_array_bgra 1 +#endif /* GL_ARB_vertex_array_bgra */ + +#ifndef GL_ARB_vertex_array_object +#define GL_ARB_vertex_array_object 1 +#endif /* GL_ARB_vertex_array_object */ + +#ifndef GL_ARB_vertex_attrib_64bit +#define GL_ARB_vertex_attrib_64bit 1 +#endif /* GL_ARB_vertex_attrib_64bit */ + +#ifndef GL_ARB_vertex_attrib_binding +#define GL_ARB_vertex_attrib_binding 1 +#endif /* GL_ARB_vertex_attrib_binding */ + +#ifndef GL_ARB_vertex_blend +#define GL_ARB_vertex_blend 1 +#define GL_MAX_VERTEX_UNITS_ARB 0x86A4 +#define GL_ACTIVE_VERTEX_UNITS_ARB 0x86A5 +#define GL_WEIGHT_SUM_UNITY_ARB 0x86A6 +#define GL_VERTEX_BLEND_ARB 0x86A7 +#define GL_CURRENT_WEIGHT_ARB 0x86A8 +#define GL_WEIGHT_ARRAY_TYPE_ARB 0x86A9 +#define GL_WEIGHT_ARRAY_STRIDE_ARB 0x86AA +#define GL_WEIGHT_ARRAY_SIZE_ARB 0x86AB +#define GL_WEIGHT_ARRAY_POINTER_ARB 0x86AC +#define GL_WEIGHT_ARRAY_ARB 0x86AD +#define GL_MODELVIEW0_ARB 0x1700 +#define GL_MODELVIEW1_ARB 0x850A +#define GL_MODELVIEW2_ARB 0x8722 +#define GL_MODELVIEW3_ARB 0x8723 +#define GL_MODELVIEW4_ARB 0x8724 +#define GL_MODELVIEW5_ARB 0x8725 +#define GL_MODELVIEW6_ARB 0x8726 +#define GL_MODELVIEW7_ARB 0x8727 +#define GL_MODELVIEW8_ARB 0x8728 +#define GL_MODELVIEW9_ARB 0x8729 +#define GL_MODELVIEW10_ARB 0x872A +#define GL_MODELVIEW11_ARB 0x872B +#define GL_MODELVIEW12_ARB 0x872C +#define GL_MODELVIEW13_ARB 0x872D +#define GL_MODELVIEW14_ARB 0x872E +#define GL_MODELVIEW15_ARB 0x872F +#define GL_MODELVIEW16_ARB 0x8730 +#define GL_MODELVIEW17_ARB 0x8731 +#define GL_MODELVIEW18_ARB 0x8732 +#define GL_MODELVIEW19_ARB 0x8733 +#define GL_MODELVIEW20_ARB 0x8734 +#define GL_MODELVIEW21_ARB 0x8735 +#define GL_MODELVIEW22_ARB 0x8736 +#define GL_MODELVIEW23_ARB 0x8737 +#define GL_MODELVIEW24_ARB 0x8738 +#define GL_MODELVIEW25_ARB 0x8739 +#define GL_MODELVIEW26_ARB 0x873A +#define GL_MODELVIEW27_ARB 0x873B +#define GL_MODELVIEW28_ARB 0x873C +#define GL_MODELVIEW29_ARB 0x873D +#define GL_MODELVIEW30_ARB 0x873E +#define GL_MODELVIEW31_ARB 0x873F +typedef void (APIENTRYP PFNGLWEIGHTBVARBPROC) (GLint size, const GLbyte *weights); +typedef void (APIENTRYP PFNGLWEIGHTSVARBPROC) (GLint size, const GLshort *weights); +typedef void (APIENTRYP PFNGLWEIGHTIVARBPROC) (GLint size, const GLint *weights); +typedef void (APIENTRYP PFNGLWEIGHTFVARBPROC) (GLint size, const GLfloat *weights); +typedef void (APIENTRYP PFNGLWEIGHTDVARBPROC) (GLint size, const GLdouble *weights); +typedef void (APIENTRYP PFNGLWEIGHTUBVARBPROC) (GLint size, const GLubyte *weights); +typedef void (APIENTRYP PFNGLWEIGHTUSVARBPROC) (GLint size, const GLushort *weights); +typedef void (APIENTRYP PFNGLWEIGHTUIVARBPROC) (GLint size, const GLuint *weights); +typedef void (APIENTRYP PFNGLWEIGHTPOINTERARBPROC) (GLint size, GLenum type, GLsizei stride, const void *pointer); +typedef void (APIENTRYP PFNGLVERTEXBLENDARBPROC) (GLint count); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glWeightbvARB (GLint size, const GLbyte *weights); +GLAPI void APIENTRY glWeightsvARB (GLint size, const GLshort *weights); +GLAPI void APIENTRY glWeightivARB (GLint size, const GLint *weights); +GLAPI void APIENTRY glWeightfvARB (GLint size, const GLfloat *weights); +GLAPI void APIENTRY glWeightdvARB (GLint size, const GLdouble *weights); +GLAPI void APIENTRY glWeightubvARB (GLint size, const GLubyte *weights); +GLAPI void APIENTRY glWeightusvARB (GLint size, const GLushort *weights); +GLAPI void APIENTRY glWeightuivARB (GLint size, const GLuint *weights); +GLAPI void APIENTRY glWeightPointerARB (GLint size, GLenum type, GLsizei stride, const void *pointer); +GLAPI void APIENTRY glVertexBlendARB (GLint count); +#endif +#endif /* GL_ARB_vertex_blend */ + +#ifndef GL_ARB_vertex_buffer_object +#define GL_ARB_vertex_buffer_object 1 +typedef khronos_ssize_t GLsizeiptrARB; +typedef khronos_intptr_t GLintptrARB; +#define GL_BUFFER_SIZE_ARB 0x8764 +#define GL_BUFFER_USAGE_ARB 0x8765 +#define GL_ARRAY_BUFFER_ARB 0x8892 +#define GL_ELEMENT_ARRAY_BUFFER_ARB 0x8893 +#define GL_ARRAY_BUFFER_BINDING_ARB 0x8894 +#define GL_ELEMENT_ARRAY_BUFFER_BINDING_ARB 0x8895 +#define GL_VERTEX_ARRAY_BUFFER_BINDING_ARB 0x8896 +#define GL_NORMAL_ARRAY_BUFFER_BINDING_ARB 0x8897 +#define GL_COLOR_ARRAY_BUFFER_BINDING_ARB 0x8898 +#define GL_INDEX_ARRAY_BUFFER_BINDING_ARB 0x8899 +#define GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING_ARB 0x889A +#define GL_EDGE_FLAG_ARRAY_BUFFER_BINDING_ARB 0x889B +#define GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING_ARB 0x889C +#define GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING_ARB 0x889D +#define GL_WEIGHT_ARRAY_BUFFER_BINDING_ARB 0x889E +#define GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING_ARB 0x889F +#define GL_READ_ONLY_ARB 0x88B8 +#define GL_WRITE_ONLY_ARB 0x88B9 +#define GL_READ_WRITE_ARB 0x88BA +#define GL_BUFFER_ACCESS_ARB 0x88BB +#define GL_BUFFER_MAPPED_ARB 0x88BC +#define GL_BUFFER_MAP_POINTER_ARB 0x88BD +#define GL_STREAM_DRAW_ARB 0x88E0 +#define GL_STREAM_READ_ARB 0x88E1 +#define GL_STREAM_COPY_ARB 0x88E2 +#define GL_STATIC_DRAW_ARB 0x88E4 +#define GL_STATIC_READ_ARB 0x88E5 +#define GL_STATIC_COPY_ARB 0x88E6 +#define GL_DYNAMIC_DRAW_ARB 0x88E8 +#define GL_DYNAMIC_READ_ARB 0x88E9 +#define GL_DYNAMIC_COPY_ARB 0x88EA +typedef void (APIENTRYP PFNGLBINDBUFFERARBPROC) (GLenum target, GLuint buffer); +typedef void (APIENTRYP PFNGLDELETEBUFFERSARBPROC) (GLsizei n, const GLuint *buffers); +typedef void (APIENTRYP PFNGLGENBUFFERSARBPROC) (GLsizei n, GLuint *buffers); +typedef GLboolean (APIENTRYP PFNGLISBUFFERARBPROC) (GLuint buffer); +typedef void (APIENTRYP PFNGLBUFFERDATAARBPROC) (GLenum target, GLsizeiptrARB size, const void *data, GLenum usage); +typedef void (APIENTRYP PFNGLBUFFERSUBDATAARBPROC) (GLenum target, GLintptrARB offset, GLsizeiptrARB size, const void *data); +typedef void (APIENTRYP PFNGLGETBUFFERSUBDATAARBPROC) (GLenum target, GLintptrARB offset, GLsizeiptrARB size, void *data); +typedef void *(APIENTRYP PFNGLMAPBUFFERARBPROC) (GLenum target, GLenum access); +typedef GLboolean (APIENTRYP PFNGLUNMAPBUFFERARBPROC) (GLenum target); +typedef void (APIENTRYP PFNGLGETBUFFERPARAMETERIVARBPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETBUFFERPOINTERVARBPROC) (GLenum target, GLenum pname, void **params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBindBufferARB (GLenum target, GLuint buffer); +GLAPI void APIENTRY glDeleteBuffersARB (GLsizei n, const GLuint *buffers); +GLAPI void APIENTRY glGenBuffersARB (GLsizei n, GLuint *buffers); +GLAPI GLboolean APIENTRY glIsBufferARB (GLuint buffer); +GLAPI void APIENTRY glBufferDataARB (GLenum target, GLsizeiptrARB size, const void *data, GLenum usage); +GLAPI void APIENTRY glBufferSubDataARB (GLenum target, GLintptrARB offset, GLsizeiptrARB size, const void *data); +GLAPI void APIENTRY glGetBufferSubDataARB (GLenum target, GLintptrARB offset, GLsizeiptrARB size, void *data); +GLAPI void *APIENTRY glMapBufferARB (GLenum target, GLenum access); +GLAPI GLboolean APIENTRY glUnmapBufferARB (GLenum target); +GLAPI void APIENTRY glGetBufferParameterivARB (GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetBufferPointervARB (GLenum target, GLenum pname, void **params); +#endif +#endif /* GL_ARB_vertex_buffer_object */ + +#ifndef GL_ARB_vertex_program +#define GL_ARB_vertex_program 1 +#define GL_COLOR_SUM_ARB 0x8458 +#define GL_VERTEX_PROGRAM_ARB 0x8620 +#define GL_VERTEX_ATTRIB_ARRAY_ENABLED_ARB 0x8622 +#define GL_VERTEX_ATTRIB_ARRAY_SIZE_ARB 0x8623 +#define GL_VERTEX_ATTRIB_ARRAY_STRIDE_ARB 0x8624 +#define GL_VERTEX_ATTRIB_ARRAY_TYPE_ARB 0x8625 +#define GL_CURRENT_VERTEX_ATTRIB_ARB 0x8626 +#define GL_VERTEX_PROGRAM_POINT_SIZE_ARB 0x8642 +#define GL_VERTEX_PROGRAM_TWO_SIDE_ARB 0x8643 +#define GL_VERTEX_ATTRIB_ARRAY_POINTER_ARB 0x8645 +#define GL_MAX_VERTEX_ATTRIBS_ARB 0x8869 +#define GL_VERTEX_ATTRIB_ARRAY_NORMALIZED_ARB 0x886A +#define GL_PROGRAM_ADDRESS_REGISTERS_ARB 0x88B0 +#define GL_MAX_PROGRAM_ADDRESS_REGISTERS_ARB 0x88B1 +#define GL_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB 0x88B2 +#define GL_MAX_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB 0x88B3 +typedef void (APIENTRYP PFNGLVERTEXATTRIB1DARBPROC) (GLuint index, GLdouble x); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1DVARBPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1FARBPROC) (GLuint index, GLfloat x); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1FVARBPROC) (GLuint index, const GLfloat *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1SARBPROC) (GLuint index, GLshort x); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1SVARBPROC) (GLuint index, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2DARBPROC) (GLuint index, GLdouble x, GLdouble y); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2DVARBPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2FARBPROC) (GLuint index, GLfloat x, GLfloat y); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2FVARBPROC) (GLuint index, const GLfloat *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2SARBPROC) (GLuint index, GLshort x, GLshort y); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2SVARBPROC) (GLuint index, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3DARBPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3DVARBPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3FARBPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3FVARBPROC) (GLuint index, const GLfloat *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3SARBPROC) (GLuint index, GLshort x, GLshort y, GLshort z); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3SVARBPROC) (GLuint index, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4NBVARBPROC) (GLuint index, const GLbyte *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4NIVARBPROC) (GLuint index, const GLint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4NSVARBPROC) (GLuint index, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUBARBPROC) (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUBVARBPROC) (GLuint index, const GLubyte *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUIVARBPROC) (GLuint index, const GLuint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUSVARBPROC) (GLuint index, const GLushort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4BVARBPROC) (GLuint index, const GLbyte *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4DARBPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4DVARBPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4FARBPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4FVARBPROC) (GLuint index, const GLfloat *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4IVARBPROC) (GLuint index, const GLint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4SARBPROC) (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4SVARBPROC) (GLuint index, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4UBVARBPROC) (GLuint index, const GLubyte *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4UIVARBPROC) (GLuint index, const GLuint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4USVARBPROC) (GLuint index, const GLushort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBPOINTERARBPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void *pointer); +typedef void (APIENTRYP PFNGLENABLEVERTEXATTRIBARRAYARBPROC) (GLuint index); +typedef void (APIENTRYP PFNGLDISABLEVERTEXATTRIBARRAYARBPROC) (GLuint index); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBDVARBPROC) (GLuint index, GLenum pname, GLdouble *params); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBFVARBPROC) (GLuint index, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIVARBPROC) (GLuint index, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBPOINTERVARBPROC) (GLuint index, GLenum pname, void **pointer); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glVertexAttrib1dARB (GLuint index, GLdouble x); +GLAPI void APIENTRY glVertexAttrib1dvARB (GLuint index, const GLdouble *v); +GLAPI void APIENTRY glVertexAttrib1fARB (GLuint index, GLfloat x); +GLAPI void APIENTRY glVertexAttrib1fvARB (GLuint index, const GLfloat *v); +GLAPI void APIENTRY glVertexAttrib1sARB (GLuint index, GLshort x); +GLAPI void APIENTRY glVertexAttrib1svARB (GLuint index, const GLshort *v); +GLAPI void APIENTRY glVertexAttrib2dARB (GLuint index, GLdouble x, GLdouble y); +GLAPI void APIENTRY glVertexAttrib2dvARB (GLuint index, const GLdouble *v); +GLAPI void APIENTRY glVertexAttrib2fARB (GLuint index, GLfloat x, GLfloat y); +GLAPI void APIENTRY glVertexAttrib2fvARB (GLuint index, const GLfloat *v); +GLAPI void APIENTRY glVertexAttrib2sARB (GLuint index, GLshort x, GLshort y); +GLAPI void APIENTRY glVertexAttrib2svARB (GLuint index, const GLshort *v); +GLAPI void APIENTRY glVertexAttrib3dARB (GLuint index, GLdouble x, GLdouble y, GLdouble z); +GLAPI void APIENTRY glVertexAttrib3dvARB (GLuint index, const GLdouble *v); +GLAPI void APIENTRY glVertexAttrib3fARB (GLuint index, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glVertexAttrib3fvARB (GLuint index, const GLfloat *v); +GLAPI void APIENTRY glVertexAttrib3sARB (GLuint index, GLshort x, GLshort y, GLshort z); +GLAPI void APIENTRY glVertexAttrib3svARB (GLuint index, const GLshort *v); +GLAPI void APIENTRY glVertexAttrib4NbvARB (GLuint index, const GLbyte *v); +GLAPI void APIENTRY glVertexAttrib4NivARB (GLuint index, const GLint *v); +GLAPI void APIENTRY glVertexAttrib4NsvARB (GLuint index, const GLshort *v); +GLAPI void APIENTRY glVertexAttrib4NubARB (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); +GLAPI void APIENTRY glVertexAttrib4NubvARB (GLuint index, const GLubyte *v); +GLAPI void APIENTRY glVertexAttrib4NuivARB (GLuint index, const GLuint *v); +GLAPI void APIENTRY glVertexAttrib4NusvARB (GLuint index, const GLushort *v); +GLAPI void APIENTRY glVertexAttrib4bvARB (GLuint index, const GLbyte *v); +GLAPI void APIENTRY glVertexAttrib4dARB (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +GLAPI void APIENTRY glVertexAttrib4dvARB (GLuint index, const GLdouble *v); +GLAPI void APIENTRY glVertexAttrib4fARB (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +GLAPI void APIENTRY glVertexAttrib4fvARB (GLuint index, const GLfloat *v); +GLAPI void APIENTRY glVertexAttrib4ivARB (GLuint index, const GLint *v); +GLAPI void APIENTRY glVertexAttrib4sARB (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); +GLAPI void APIENTRY glVertexAttrib4svARB (GLuint index, const GLshort *v); +GLAPI void APIENTRY glVertexAttrib4ubvARB (GLuint index, const GLubyte *v); +GLAPI void APIENTRY glVertexAttrib4uivARB (GLuint index, const GLuint *v); +GLAPI void APIENTRY glVertexAttrib4usvARB (GLuint index, const GLushort *v); +GLAPI void APIENTRY glVertexAttribPointerARB (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void *pointer); +GLAPI void APIENTRY glEnableVertexAttribArrayARB (GLuint index); +GLAPI void APIENTRY glDisableVertexAttribArrayARB (GLuint index); +GLAPI void APIENTRY glGetVertexAttribdvARB (GLuint index, GLenum pname, GLdouble *params); +GLAPI void APIENTRY glGetVertexAttribfvARB (GLuint index, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetVertexAttribivARB (GLuint index, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetVertexAttribPointervARB (GLuint index, GLenum pname, void **pointer); +#endif +#endif /* GL_ARB_vertex_program */ + +#ifndef GL_ARB_vertex_shader +#define GL_ARB_vertex_shader 1 +#define GL_VERTEX_SHADER_ARB 0x8B31 +#define GL_MAX_VERTEX_UNIFORM_COMPONENTS_ARB 0x8B4A +#define GL_MAX_VARYING_FLOATS_ARB 0x8B4B +#define GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS_ARB 0x8B4C +#define GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS_ARB 0x8B4D +#define GL_OBJECT_ACTIVE_ATTRIBUTES_ARB 0x8B89 +#define GL_OBJECT_ACTIVE_ATTRIBUTE_MAX_LENGTH_ARB 0x8B8A +typedef void (APIENTRYP PFNGLBINDATTRIBLOCATIONARBPROC) (GLhandleARB programObj, GLuint index, const GLcharARB *name); +typedef void (APIENTRYP PFNGLGETACTIVEATTRIBARBPROC) (GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei *length, GLint *size, GLenum *type, GLcharARB *name); +typedef GLint (APIENTRYP PFNGLGETATTRIBLOCATIONARBPROC) (GLhandleARB programObj, const GLcharARB *name); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBindAttribLocationARB (GLhandleARB programObj, GLuint index, const GLcharARB *name); +GLAPI void APIENTRY glGetActiveAttribARB (GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei *length, GLint *size, GLenum *type, GLcharARB *name); +GLAPI GLint APIENTRY glGetAttribLocationARB (GLhandleARB programObj, const GLcharARB *name); +#endif +#endif /* GL_ARB_vertex_shader */ + +#ifndef GL_ARB_vertex_type_10f_11f_11f_rev +#define GL_ARB_vertex_type_10f_11f_11f_rev 1 +#endif /* GL_ARB_vertex_type_10f_11f_11f_rev */ + +#ifndef GL_ARB_vertex_type_2_10_10_10_rev +#define GL_ARB_vertex_type_2_10_10_10_rev 1 +#endif /* GL_ARB_vertex_type_2_10_10_10_rev */ + +#ifndef GL_ARB_viewport_array +#define GL_ARB_viewport_array 1 +typedef void (APIENTRYP PFNGLDEPTHRANGEARRAYDVNVPROC) (GLuint first, GLsizei count, const GLdouble *v); +typedef void (APIENTRYP PFNGLDEPTHRANGEINDEXEDDNVPROC) (GLuint index, GLdouble n, GLdouble f); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glDepthRangeArraydvNV (GLuint first, GLsizei count, const GLdouble *v); +GLAPI void APIENTRY glDepthRangeIndexeddNV (GLuint index, GLdouble n, GLdouble f); +#endif +#endif /* GL_ARB_viewport_array */ + +#ifndef GL_ARB_window_pos +#define GL_ARB_window_pos 1 +typedef void (APIENTRYP PFNGLWINDOWPOS2DARBPROC) (GLdouble x, GLdouble y); +typedef void (APIENTRYP PFNGLWINDOWPOS2DVARBPROC) (const GLdouble *v); +typedef void (APIENTRYP PFNGLWINDOWPOS2FARBPROC) (GLfloat x, GLfloat y); +typedef void (APIENTRYP PFNGLWINDOWPOS2FVARBPROC) (const GLfloat *v); +typedef void (APIENTRYP PFNGLWINDOWPOS2IARBPROC) (GLint x, GLint y); +typedef void (APIENTRYP PFNGLWINDOWPOS2IVARBPROC) (const GLint *v); +typedef void (APIENTRYP PFNGLWINDOWPOS2SARBPROC) (GLshort x, GLshort y); +typedef void (APIENTRYP PFNGLWINDOWPOS2SVARBPROC) (const GLshort *v); +typedef void (APIENTRYP PFNGLWINDOWPOS3DARBPROC) (GLdouble x, GLdouble y, GLdouble z); +typedef void (APIENTRYP PFNGLWINDOWPOS3DVARBPROC) (const GLdouble *v); +typedef void (APIENTRYP PFNGLWINDOWPOS3FARBPROC) (GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLWINDOWPOS3FVARBPROC) (const GLfloat *v); +typedef void (APIENTRYP PFNGLWINDOWPOS3IARBPROC) (GLint x, GLint y, GLint z); +typedef void (APIENTRYP PFNGLWINDOWPOS3IVARBPROC) (const GLint *v); +typedef void (APIENTRYP PFNGLWINDOWPOS3SARBPROC) (GLshort x, GLshort y, GLshort z); +typedef void (APIENTRYP PFNGLWINDOWPOS3SVARBPROC) (const GLshort *v); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glWindowPos2dARB (GLdouble x, GLdouble y); +GLAPI void APIENTRY glWindowPos2dvARB (const GLdouble *v); +GLAPI void APIENTRY glWindowPos2fARB (GLfloat x, GLfloat y); +GLAPI void APIENTRY glWindowPos2fvARB (const GLfloat *v); +GLAPI void APIENTRY glWindowPos2iARB (GLint x, GLint y); +GLAPI void APIENTRY glWindowPos2ivARB (const GLint *v); +GLAPI void APIENTRY glWindowPos2sARB (GLshort x, GLshort y); +GLAPI void APIENTRY glWindowPos2svARB (const GLshort *v); +GLAPI void APIENTRY glWindowPos3dARB (GLdouble x, GLdouble y, GLdouble z); +GLAPI void APIENTRY glWindowPos3dvARB (const GLdouble *v); +GLAPI void APIENTRY glWindowPos3fARB (GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glWindowPos3fvARB (const GLfloat *v); +GLAPI void APIENTRY glWindowPos3iARB (GLint x, GLint y, GLint z); +GLAPI void APIENTRY glWindowPos3ivARB (const GLint *v); +GLAPI void APIENTRY glWindowPos3sARB (GLshort x, GLshort y, GLshort z); +GLAPI void APIENTRY glWindowPos3svARB (const GLshort *v); +#endif +#endif /* GL_ARB_window_pos */ + +#ifndef GL_KHR_blend_equation_advanced +#define GL_KHR_blend_equation_advanced 1 +#define GL_MULTIPLY_KHR 0x9294 +#define GL_SCREEN_KHR 0x9295 +#define GL_OVERLAY_KHR 0x9296 +#define GL_DARKEN_KHR 0x9297 +#define GL_LIGHTEN_KHR 0x9298 +#define GL_COLORDODGE_KHR 0x9299 +#define GL_COLORBURN_KHR 0x929A +#define GL_HARDLIGHT_KHR 0x929B +#define GL_SOFTLIGHT_KHR 0x929C +#define GL_DIFFERENCE_KHR 0x929E +#define GL_EXCLUSION_KHR 0x92A0 +#define GL_HSL_HUE_KHR 0x92AD +#define GL_HSL_SATURATION_KHR 0x92AE +#define GL_HSL_COLOR_KHR 0x92AF +#define GL_HSL_LUMINOSITY_KHR 0x92B0 +typedef void (APIENTRYP PFNGLBLENDBARRIERKHRPROC) (void); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBlendBarrierKHR (void); +#endif +#endif /* GL_KHR_blend_equation_advanced */ + +#ifndef GL_KHR_blend_equation_advanced_coherent +#define GL_KHR_blend_equation_advanced_coherent 1 +#define GL_BLEND_ADVANCED_COHERENT_KHR 0x9285 +#endif /* GL_KHR_blend_equation_advanced_coherent */ + +#ifndef GL_KHR_context_flush_control +#define GL_KHR_context_flush_control 1 +#endif /* GL_KHR_context_flush_control */ + +#ifndef GL_KHR_debug +#define GL_KHR_debug 1 +#endif /* GL_KHR_debug */ + +#ifndef GL_KHR_no_error +#define GL_KHR_no_error 1 +#define GL_CONTEXT_FLAG_NO_ERROR_BIT_KHR 0x00000008 +#endif /* GL_KHR_no_error */ + +#ifndef GL_KHR_parallel_shader_compile +#define GL_KHR_parallel_shader_compile 1 +#define GL_MAX_SHADER_COMPILER_THREADS_KHR 0x91B0 +#define GL_COMPLETION_STATUS_KHR 0x91B1 +typedef void (APIENTRYP PFNGLMAXSHADERCOMPILERTHREADSKHRPROC) (GLuint count); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glMaxShaderCompilerThreadsKHR (GLuint count); +#endif +#endif /* GL_KHR_parallel_shader_compile */ + +#ifndef GL_KHR_robust_buffer_access_behavior +#define GL_KHR_robust_buffer_access_behavior 1 +#endif /* GL_KHR_robust_buffer_access_behavior */ + +#ifndef GL_KHR_robustness +#define GL_KHR_robustness 1 +#define GL_CONTEXT_ROBUST_ACCESS 0x90F3 +#endif /* GL_KHR_robustness */ + +#ifndef GL_KHR_shader_subgroup +#define GL_KHR_shader_subgroup 1 +#define GL_SUBGROUP_SIZE_KHR 0x9532 +#define GL_SUBGROUP_SUPPORTED_STAGES_KHR 0x9533 +#define GL_SUBGROUP_SUPPORTED_FEATURES_KHR 0x9534 +#define GL_SUBGROUP_QUAD_ALL_STAGES_KHR 0x9535 +#define GL_SUBGROUP_FEATURE_BASIC_BIT_KHR 0x00000001 +#define GL_SUBGROUP_FEATURE_VOTE_BIT_KHR 0x00000002 +#define GL_SUBGROUP_FEATURE_ARITHMETIC_BIT_KHR 0x00000004 +#define GL_SUBGROUP_FEATURE_BALLOT_BIT_KHR 0x00000008 +#define GL_SUBGROUP_FEATURE_SHUFFLE_BIT_KHR 0x00000010 +#define GL_SUBGROUP_FEATURE_SHUFFLE_RELATIVE_BIT_KHR 0x00000020 +#define GL_SUBGROUP_FEATURE_CLUSTERED_BIT_KHR 0x00000040 +#define GL_SUBGROUP_FEATURE_QUAD_BIT_KHR 0x00000080 +#endif /* GL_KHR_shader_subgroup */ + +#ifndef GL_KHR_texture_compression_astc_hdr +#define GL_KHR_texture_compression_astc_hdr 1 +#define GL_COMPRESSED_RGBA_ASTC_4x4_KHR 0x93B0 +#define GL_COMPRESSED_RGBA_ASTC_5x4_KHR 0x93B1 +#define GL_COMPRESSED_RGBA_ASTC_5x5_KHR 0x93B2 +#define GL_COMPRESSED_RGBA_ASTC_6x5_KHR 0x93B3 +#define GL_COMPRESSED_RGBA_ASTC_6x6_KHR 0x93B4 +#define GL_COMPRESSED_RGBA_ASTC_8x5_KHR 0x93B5 +#define GL_COMPRESSED_RGBA_ASTC_8x6_KHR 0x93B6 +#define GL_COMPRESSED_RGBA_ASTC_8x8_KHR 0x93B7 +#define GL_COMPRESSED_RGBA_ASTC_10x5_KHR 0x93B8 +#define GL_COMPRESSED_RGBA_ASTC_10x6_KHR 0x93B9 +#define GL_COMPRESSED_RGBA_ASTC_10x8_KHR 0x93BA +#define GL_COMPRESSED_RGBA_ASTC_10x10_KHR 0x93BB +#define GL_COMPRESSED_RGBA_ASTC_12x10_KHR 0x93BC +#define GL_COMPRESSED_RGBA_ASTC_12x12_KHR 0x93BD +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR 0x93D0 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR 0x93D1 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR 0x93D2 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR 0x93D3 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR 0x93D4 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR 0x93D5 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR 0x93D6 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR 0x93D7 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR 0x93D8 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR 0x93D9 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR 0x93DA +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR 0x93DB +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR 0x93DC +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR 0x93DD +#endif /* GL_KHR_texture_compression_astc_hdr */ + +#ifndef GL_KHR_texture_compression_astc_ldr +#define GL_KHR_texture_compression_astc_ldr 1 +#endif /* GL_KHR_texture_compression_astc_ldr */ + +#ifndef GL_KHR_texture_compression_astc_sliced_3d +#define GL_KHR_texture_compression_astc_sliced_3d 1 +#endif /* GL_KHR_texture_compression_astc_sliced_3d */ + +#ifndef GL_OES_byte_coordinates +#define GL_OES_byte_coordinates 1 +typedef void (APIENTRYP PFNGLMULTITEXCOORD1BOESPROC) (GLenum texture, GLbyte s); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1BVOESPROC) (GLenum texture, const GLbyte *coords); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2BOESPROC) (GLenum texture, GLbyte s, GLbyte t); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2BVOESPROC) (GLenum texture, const GLbyte *coords); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3BOESPROC) (GLenum texture, GLbyte s, GLbyte t, GLbyte r); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3BVOESPROC) (GLenum texture, const GLbyte *coords); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4BOESPROC) (GLenum texture, GLbyte s, GLbyte t, GLbyte r, GLbyte q); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4BVOESPROC) (GLenum texture, const GLbyte *coords); +typedef void (APIENTRYP PFNGLTEXCOORD1BOESPROC) (GLbyte s); +typedef void (APIENTRYP PFNGLTEXCOORD1BVOESPROC) (const GLbyte *coords); +typedef void (APIENTRYP PFNGLTEXCOORD2BOESPROC) (GLbyte s, GLbyte t); +typedef void (APIENTRYP PFNGLTEXCOORD2BVOESPROC) (const GLbyte *coords); +typedef void (APIENTRYP PFNGLTEXCOORD3BOESPROC) (GLbyte s, GLbyte t, GLbyte r); +typedef void (APIENTRYP PFNGLTEXCOORD3BVOESPROC) (const GLbyte *coords); +typedef void (APIENTRYP PFNGLTEXCOORD4BOESPROC) (GLbyte s, GLbyte t, GLbyte r, GLbyte q); +typedef void (APIENTRYP PFNGLTEXCOORD4BVOESPROC) (const GLbyte *coords); +typedef void (APIENTRYP PFNGLVERTEX2BOESPROC) (GLbyte x, GLbyte y); +typedef void (APIENTRYP PFNGLVERTEX2BVOESPROC) (const GLbyte *coords); +typedef void (APIENTRYP PFNGLVERTEX3BOESPROC) (GLbyte x, GLbyte y, GLbyte z); +typedef void (APIENTRYP PFNGLVERTEX3BVOESPROC) (const GLbyte *coords); +typedef void (APIENTRYP PFNGLVERTEX4BOESPROC) (GLbyte x, GLbyte y, GLbyte z, GLbyte w); +typedef void (APIENTRYP PFNGLVERTEX4BVOESPROC) (const GLbyte *coords); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glMultiTexCoord1bOES (GLenum texture, GLbyte s); +GLAPI void APIENTRY glMultiTexCoord1bvOES (GLenum texture, const GLbyte *coords); +GLAPI void APIENTRY glMultiTexCoord2bOES (GLenum texture, GLbyte s, GLbyte t); +GLAPI void APIENTRY glMultiTexCoord2bvOES (GLenum texture, const GLbyte *coords); +GLAPI void APIENTRY glMultiTexCoord3bOES (GLenum texture, GLbyte s, GLbyte t, GLbyte r); +GLAPI void APIENTRY glMultiTexCoord3bvOES (GLenum texture, const GLbyte *coords); +GLAPI void APIENTRY glMultiTexCoord4bOES (GLenum texture, GLbyte s, GLbyte t, GLbyte r, GLbyte q); +GLAPI void APIENTRY glMultiTexCoord4bvOES (GLenum texture, const GLbyte *coords); +GLAPI void APIENTRY glTexCoord1bOES (GLbyte s); +GLAPI void APIENTRY glTexCoord1bvOES (const GLbyte *coords); +GLAPI void APIENTRY glTexCoord2bOES (GLbyte s, GLbyte t); +GLAPI void APIENTRY glTexCoord2bvOES (const GLbyte *coords); +GLAPI void APIENTRY glTexCoord3bOES (GLbyte s, GLbyte t, GLbyte r); +GLAPI void APIENTRY glTexCoord3bvOES (const GLbyte *coords); +GLAPI void APIENTRY glTexCoord4bOES (GLbyte s, GLbyte t, GLbyte r, GLbyte q); +GLAPI void APIENTRY glTexCoord4bvOES (const GLbyte *coords); +GLAPI void APIENTRY glVertex2bOES (GLbyte x, GLbyte y); +GLAPI void APIENTRY glVertex2bvOES (const GLbyte *coords); +GLAPI void APIENTRY glVertex3bOES (GLbyte x, GLbyte y, GLbyte z); +GLAPI void APIENTRY glVertex3bvOES (const GLbyte *coords); +GLAPI void APIENTRY glVertex4bOES (GLbyte x, GLbyte y, GLbyte z, GLbyte w); +GLAPI void APIENTRY glVertex4bvOES (const GLbyte *coords); +#endif +#endif /* GL_OES_byte_coordinates */ + +#ifndef GL_OES_compressed_paletted_texture +#define GL_OES_compressed_paletted_texture 1 +#define GL_PALETTE4_RGB8_OES 0x8B90 +#define GL_PALETTE4_RGBA8_OES 0x8B91 +#define GL_PALETTE4_R5_G6_B5_OES 0x8B92 +#define GL_PALETTE4_RGBA4_OES 0x8B93 +#define GL_PALETTE4_RGB5_A1_OES 0x8B94 +#define GL_PALETTE8_RGB8_OES 0x8B95 +#define GL_PALETTE8_RGBA8_OES 0x8B96 +#define GL_PALETTE8_R5_G6_B5_OES 0x8B97 +#define GL_PALETTE8_RGBA4_OES 0x8B98 +#define GL_PALETTE8_RGB5_A1_OES 0x8B99 +#endif /* GL_OES_compressed_paletted_texture */ + +#ifndef GL_OES_fixed_point +#define GL_OES_fixed_point 1 +typedef khronos_int32_t GLfixed; +#define GL_FIXED_OES 0x140C +typedef void (APIENTRYP PFNGLALPHAFUNCXOESPROC) (GLenum func, GLfixed ref); +typedef void (APIENTRYP PFNGLCLEARCOLORXOESPROC) (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha); +typedef void (APIENTRYP PFNGLCLEARDEPTHXOESPROC) (GLfixed depth); +typedef void (APIENTRYP PFNGLCLIPPLANEXOESPROC) (GLenum plane, const GLfixed *equation); +typedef void (APIENTRYP PFNGLCOLOR4XOESPROC) (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha); +typedef void (APIENTRYP PFNGLDEPTHRANGEXOESPROC) (GLfixed n, GLfixed f); +typedef void (APIENTRYP PFNGLFOGXOESPROC) (GLenum pname, GLfixed param); +typedef void (APIENTRYP PFNGLFOGXVOESPROC) (GLenum pname, const GLfixed *param); +typedef void (APIENTRYP PFNGLFRUSTUMXOESPROC) (GLfixed l, GLfixed r, GLfixed b, GLfixed t, GLfixed n, GLfixed f); +typedef void (APIENTRYP PFNGLGETCLIPPLANEXOESPROC) (GLenum plane, GLfixed *equation); +typedef void (APIENTRYP PFNGLGETFIXEDVOESPROC) (GLenum pname, GLfixed *params); +typedef void (APIENTRYP PFNGLGETTEXENVXVOESPROC) (GLenum target, GLenum pname, GLfixed *params); +typedef void (APIENTRYP PFNGLGETTEXPARAMETERXVOESPROC) (GLenum target, GLenum pname, GLfixed *params); +typedef void (APIENTRYP PFNGLLIGHTMODELXOESPROC) (GLenum pname, GLfixed param); +typedef void (APIENTRYP PFNGLLIGHTMODELXVOESPROC) (GLenum pname, const GLfixed *param); +typedef void (APIENTRYP PFNGLLIGHTXOESPROC) (GLenum light, GLenum pname, GLfixed param); +typedef void (APIENTRYP PFNGLLIGHTXVOESPROC) (GLenum light, GLenum pname, const GLfixed *params); +typedef void (APIENTRYP PFNGLLINEWIDTHXOESPROC) (GLfixed width); +typedef void (APIENTRYP PFNGLLOADMATRIXXOESPROC) (const GLfixed *m); +typedef void (APIENTRYP PFNGLMATERIALXOESPROC) (GLenum face, GLenum pname, GLfixed param); +typedef void (APIENTRYP PFNGLMATERIALXVOESPROC) (GLenum face, GLenum pname, const GLfixed *param); +typedef void (APIENTRYP PFNGLMULTMATRIXXOESPROC) (const GLfixed *m); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4XOESPROC) (GLenum texture, GLfixed s, GLfixed t, GLfixed r, GLfixed q); +typedef void (APIENTRYP PFNGLNORMAL3XOESPROC) (GLfixed nx, GLfixed ny, GLfixed nz); +typedef void (APIENTRYP PFNGLORTHOXOESPROC) (GLfixed l, GLfixed r, GLfixed b, GLfixed t, GLfixed n, GLfixed f); +typedef void (APIENTRYP PFNGLPOINTPARAMETERXVOESPROC) (GLenum pname, const GLfixed *params); +typedef void (APIENTRYP PFNGLPOINTSIZEXOESPROC) (GLfixed size); +typedef void (APIENTRYP PFNGLPOLYGONOFFSETXOESPROC) (GLfixed factor, GLfixed units); +typedef void (APIENTRYP PFNGLROTATEXOESPROC) (GLfixed angle, GLfixed x, GLfixed y, GLfixed z); +typedef void (APIENTRYP PFNGLSCALEXOESPROC) (GLfixed x, GLfixed y, GLfixed z); +typedef void (APIENTRYP PFNGLTEXENVXOESPROC) (GLenum target, GLenum pname, GLfixed param); +typedef void (APIENTRYP PFNGLTEXENVXVOESPROC) (GLenum target, GLenum pname, const GLfixed *params); +typedef void (APIENTRYP PFNGLTEXPARAMETERXOESPROC) (GLenum target, GLenum pname, GLfixed param); +typedef void (APIENTRYP PFNGLTEXPARAMETERXVOESPROC) (GLenum target, GLenum pname, const GLfixed *params); +typedef void (APIENTRYP PFNGLTRANSLATEXOESPROC) (GLfixed x, GLfixed y, GLfixed z); +typedef void (APIENTRYP PFNGLACCUMXOESPROC) (GLenum op, GLfixed value); +typedef void (APIENTRYP PFNGLBITMAPXOESPROC) (GLsizei width, GLsizei height, GLfixed xorig, GLfixed yorig, GLfixed xmove, GLfixed ymove, const GLubyte *bitmap); +typedef void (APIENTRYP PFNGLBLENDCOLORXOESPROC) (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha); +typedef void (APIENTRYP PFNGLCLEARACCUMXOESPROC) (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha); +typedef void (APIENTRYP PFNGLCOLOR3XOESPROC) (GLfixed red, GLfixed green, GLfixed blue); +typedef void (APIENTRYP PFNGLCOLOR3XVOESPROC) (const GLfixed *components); +typedef void (APIENTRYP PFNGLCOLOR4XVOESPROC) (const GLfixed *components); +typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERXOESPROC) (GLenum target, GLenum pname, GLfixed param); +typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERXVOESPROC) (GLenum target, GLenum pname, const GLfixed *params); +typedef void (APIENTRYP PFNGLEVALCOORD1XOESPROC) (GLfixed u); +typedef void (APIENTRYP PFNGLEVALCOORD1XVOESPROC) (const GLfixed *coords); +typedef void (APIENTRYP PFNGLEVALCOORD2XOESPROC) (GLfixed u, GLfixed v); +typedef void (APIENTRYP PFNGLEVALCOORD2XVOESPROC) (const GLfixed *coords); +typedef void (APIENTRYP PFNGLFEEDBACKBUFFERXOESPROC) (GLsizei n, GLenum type, const GLfixed *buffer); +typedef void (APIENTRYP PFNGLGETCONVOLUTIONPARAMETERXVOESPROC) (GLenum target, GLenum pname, GLfixed *params); +typedef void (APIENTRYP PFNGLGETHISTOGRAMPARAMETERXVOESPROC) (GLenum target, GLenum pname, GLfixed *params); +typedef void (APIENTRYP PFNGLGETLIGHTXOESPROC) (GLenum light, GLenum pname, GLfixed *params); +typedef void (APIENTRYP PFNGLGETMAPXVOESPROC) (GLenum target, GLenum query, GLfixed *v); +typedef void (APIENTRYP PFNGLGETMATERIALXOESPROC) (GLenum face, GLenum pname, GLfixed param); +typedef void (APIENTRYP PFNGLGETPIXELMAPXVPROC) (GLenum map, GLint size, GLfixed *values); +typedef void (APIENTRYP PFNGLGETTEXGENXVOESPROC) (GLenum coord, GLenum pname, GLfixed *params); +typedef void (APIENTRYP PFNGLGETTEXLEVELPARAMETERXVOESPROC) (GLenum target, GLint level, GLenum pname, GLfixed *params); +typedef void (APIENTRYP PFNGLINDEXXOESPROC) (GLfixed component); +typedef void (APIENTRYP PFNGLINDEXXVOESPROC) (const GLfixed *component); +typedef void (APIENTRYP PFNGLLOADTRANSPOSEMATRIXXOESPROC) (const GLfixed *m); +typedef void (APIENTRYP PFNGLMAP1XOESPROC) (GLenum target, GLfixed u1, GLfixed u2, GLint stride, GLint order, GLfixed points); +typedef void (APIENTRYP PFNGLMAP2XOESPROC) (GLenum target, GLfixed u1, GLfixed u2, GLint ustride, GLint uorder, GLfixed v1, GLfixed v2, GLint vstride, GLint vorder, GLfixed points); +typedef void (APIENTRYP PFNGLMAPGRID1XOESPROC) (GLint n, GLfixed u1, GLfixed u2); +typedef void (APIENTRYP PFNGLMAPGRID2XOESPROC) (GLint n, GLfixed u1, GLfixed u2, GLfixed v1, GLfixed v2); +typedef void (APIENTRYP PFNGLMULTTRANSPOSEMATRIXXOESPROC) (const GLfixed *m); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1XOESPROC) (GLenum texture, GLfixed s); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1XVOESPROC) (GLenum texture, const GLfixed *coords); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2XOESPROC) (GLenum texture, GLfixed s, GLfixed t); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2XVOESPROC) (GLenum texture, const GLfixed *coords); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3XOESPROC) (GLenum texture, GLfixed s, GLfixed t, GLfixed r); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3XVOESPROC) (GLenum texture, const GLfixed *coords); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4XVOESPROC) (GLenum texture, const GLfixed *coords); +typedef void (APIENTRYP PFNGLNORMAL3XVOESPROC) (const GLfixed *coords); +typedef void (APIENTRYP PFNGLPASSTHROUGHXOESPROC) (GLfixed token); +typedef void (APIENTRYP PFNGLPIXELMAPXPROC) (GLenum map, GLint size, const GLfixed *values); +typedef void (APIENTRYP PFNGLPIXELSTOREXPROC) (GLenum pname, GLfixed param); +typedef void (APIENTRYP PFNGLPIXELTRANSFERXOESPROC) (GLenum pname, GLfixed param); +typedef void (APIENTRYP PFNGLPIXELZOOMXOESPROC) (GLfixed xfactor, GLfixed yfactor); +typedef void (APIENTRYP PFNGLPRIORITIZETEXTURESXOESPROC) (GLsizei n, const GLuint *textures, const GLfixed *priorities); +typedef void (APIENTRYP PFNGLRASTERPOS2XOESPROC) (GLfixed x, GLfixed y); +typedef void (APIENTRYP PFNGLRASTERPOS2XVOESPROC) (const GLfixed *coords); +typedef void (APIENTRYP PFNGLRASTERPOS3XOESPROC) (GLfixed x, GLfixed y, GLfixed z); +typedef void (APIENTRYP PFNGLRASTERPOS3XVOESPROC) (const GLfixed *coords); +typedef void (APIENTRYP PFNGLRASTERPOS4XOESPROC) (GLfixed x, GLfixed y, GLfixed z, GLfixed w); +typedef void (APIENTRYP PFNGLRASTERPOS4XVOESPROC) (const GLfixed *coords); +typedef void (APIENTRYP PFNGLRECTXOESPROC) (GLfixed x1, GLfixed y1, GLfixed x2, GLfixed y2); +typedef void (APIENTRYP PFNGLRECTXVOESPROC) (const GLfixed *v1, const GLfixed *v2); +typedef void (APIENTRYP PFNGLTEXCOORD1XOESPROC) (GLfixed s); +typedef void (APIENTRYP PFNGLTEXCOORD1XVOESPROC) (const GLfixed *coords); +typedef void (APIENTRYP PFNGLTEXCOORD2XOESPROC) (GLfixed s, GLfixed t); +typedef void (APIENTRYP PFNGLTEXCOORD2XVOESPROC) (const GLfixed *coords); +typedef void (APIENTRYP PFNGLTEXCOORD3XOESPROC) (GLfixed s, GLfixed t, GLfixed r); +typedef void (APIENTRYP PFNGLTEXCOORD3XVOESPROC) (const GLfixed *coords); +typedef void (APIENTRYP PFNGLTEXCOORD4XOESPROC) (GLfixed s, GLfixed t, GLfixed r, GLfixed q); +typedef void (APIENTRYP PFNGLTEXCOORD4XVOESPROC) (const GLfixed *coords); +typedef void (APIENTRYP PFNGLTEXGENXOESPROC) (GLenum coord, GLenum pname, GLfixed param); +typedef void (APIENTRYP PFNGLTEXGENXVOESPROC) (GLenum coord, GLenum pname, const GLfixed *params); +typedef void (APIENTRYP PFNGLVERTEX2XOESPROC) (GLfixed x); +typedef void (APIENTRYP PFNGLVERTEX2XVOESPROC) (const GLfixed *coords); +typedef void (APIENTRYP PFNGLVERTEX3XOESPROC) (GLfixed x, GLfixed y); +typedef void (APIENTRYP PFNGLVERTEX3XVOESPROC) (const GLfixed *coords); +typedef void (APIENTRYP PFNGLVERTEX4XOESPROC) (GLfixed x, GLfixed y, GLfixed z); +typedef void (APIENTRYP PFNGLVERTEX4XVOESPROC) (const GLfixed *coords); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glAlphaFuncxOES (GLenum func, GLfixed ref); +GLAPI void APIENTRY glClearColorxOES (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha); +GLAPI void APIENTRY glClearDepthxOES (GLfixed depth); +GLAPI void APIENTRY glClipPlanexOES (GLenum plane, const GLfixed *equation); +GLAPI void APIENTRY glColor4xOES (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha); +GLAPI void APIENTRY glDepthRangexOES (GLfixed n, GLfixed f); +GLAPI void APIENTRY glFogxOES (GLenum pname, GLfixed param); +GLAPI void APIENTRY glFogxvOES (GLenum pname, const GLfixed *param); +GLAPI void APIENTRY glFrustumxOES (GLfixed l, GLfixed r, GLfixed b, GLfixed t, GLfixed n, GLfixed f); +GLAPI void APIENTRY glGetClipPlanexOES (GLenum plane, GLfixed *equation); +GLAPI void APIENTRY glGetFixedvOES (GLenum pname, GLfixed *params); +GLAPI void APIENTRY glGetTexEnvxvOES (GLenum target, GLenum pname, GLfixed *params); +GLAPI void APIENTRY glGetTexParameterxvOES (GLenum target, GLenum pname, GLfixed *params); +GLAPI void APIENTRY glLightModelxOES (GLenum pname, GLfixed param); +GLAPI void APIENTRY glLightModelxvOES (GLenum pname, const GLfixed *param); +GLAPI void APIENTRY glLightxOES (GLenum light, GLenum pname, GLfixed param); +GLAPI void APIENTRY glLightxvOES (GLenum light, GLenum pname, const GLfixed *params); +GLAPI void APIENTRY glLineWidthxOES (GLfixed width); +GLAPI void APIENTRY glLoadMatrixxOES (const GLfixed *m); +GLAPI void APIENTRY glMaterialxOES (GLenum face, GLenum pname, GLfixed param); +GLAPI void APIENTRY glMaterialxvOES (GLenum face, GLenum pname, const GLfixed *param); +GLAPI void APIENTRY glMultMatrixxOES (const GLfixed *m); +GLAPI void APIENTRY glMultiTexCoord4xOES (GLenum texture, GLfixed s, GLfixed t, GLfixed r, GLfixed q); +GLAPI void APIENTRY glNormal3xOES (GLfixed nx, GLfixed ny, GLfixed nz); +GLAPI void APIENTRY glOrthoxOES (GLfixed l, GLfixed r, GLfixed b, GLfixed t, GLfixed n, GLfixed f); +GLAPI void APIENTRY glPointParameterxvOES (GLenum pname, const GLfixed *params); +GLAPI void APIENTRY glPointSizexOES (GLfixed size); +GLAPI void APIENTRY glPolygonOffsetxOES (GLfixed factor, GLfixed units); +GLAPI void APIENTRY glRotatexOES (GLfixed angle, GLfixed x, GLfixed y, GLfixed z); +GLAPI void APIENTRY glScalexOES (GLfixed x, GLfixed y, GLfixed z); +GLAPI void APIENTRY glTexEnvxOES (GLenum target, GLenum pname, GLfixed param); +GLAPI void APIENTRY glTexEnvxvOES (GLenum target, GLenum pname, const GLfixed *params); +GLAPI void APIENTRY glTexParameterxOES (GLenum target, GLenum pname, GLfixed param); +GLAPI void APIENTRY glTexParameterxvOES (GLenum target, GLenum pname, const GLfixed *params); +GLAPI void APIENTRY glTranslatexOES (GLfixed x, GLfixed y, GLfixed z); +GLAPI void APIENTRY glAccumxOES (GLenum op, GLfixed value); +GLAPI void APIENTRY glBitmapxOES (GLsizei width, GLsizei height, GLfixed xorig, GLfixed yorig, GLfixed xmove, GLfixed ymove, const GLubyte *bitmap); +GLAPI void APIENTRY glBlendColorxOES (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha); +GLAPI void APIENTRY glClearAccumxOES (GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha); +GLAPI void APIENTRY glColor3xOES (GLfixed red, GLfixed green, GLfixed blue); +GLAPI void APIENTRY glColor3xvOES (const GLfixed *components); +GLAPI void APIENTRY glColor4xvOES (const GLfixed *components); +GLAPI void APIENTRY glConvolutionParameterxOES (GLenum target, GLenum pname, GLfixed param); +GLAPI void APIENTRY glConvolutionParameterxvOES (GLenum target, GLenum pname, const GLfixed *params); +GLAPI void APIENTRY glEvalCoord1xOES (GLfixed u); +GLAPI void APIENTRY glEvalCoord1xvOES (const GLfixed *coords); +GLAPI void APIENTRY glEvalCoord2xOES (GLfixed u, GLfixed v); +GLAPI void APIENTRY glEvalCoord2xvOES (const GLfixed *coords); +GLAPI void APIENTRY glFeedbackBufferxOES (GLsizei n, GLenum type, const GLfixed *buffer); +GLAPI void APIENTRY glGetConvolutionParameterxvOES (GLenum target, GLenum pname, GLfixed *params); +GLAPI void APIENTRY glGetHistogramParameterxvOES (GLenum target, GLenum pname, GLfixed *params); +GLAPI void APIENTRY glGetLightxOES (GLenum light, GLenum pname, GLfixed *params); +GLAPI void APIENTRY glGetMapxvOES (GLenum target, GLenum query, GLfixed *v); +GLAPI void APIENTRY glGetMaterialxOES (GLenum face, GLenum pname, GLfixed param); +GLAPI void APIENTRY glGetPixelMapxv (GLenum map, GLint size, GLfixed *values); +GLAPI void APIENTRY glGetTexGenxvOES (GLenum coord, GLenum pname, GLfixed *params); +GLAPI void APIENTRY glGetTexLevelParameterxvOES (GLenum target, GLint level, GLenum pname, GLfixed *params); +GLAPI void APIENTRY glIndexxOES (GLfixed component); +GLAPI void APIENTRY glIndexxvOES (const GLfixed *component); +GLAPI void APIENTRY glLoadTransposeMatrixxOES (const GLfixed *m); +GLAPI void APIENTRY glMap1xOES (GLenum target, GLfixed u1, GLfixed u2, GLint stride, GLint order, GLfixed points); +GLAPI void APIENTRY glMap2xOES (GLenum target, GLfixed u1, GLfixed u2, GLint ustride, GLint uorder, GLfixed v1, GLfixed v2, GLint vstride, GLint vorder, GLfixed points); +GLAPI void APIENTRY glMapGrid1xOES (GLint n, GLfixed u1, GLfixed u2); +GLAPI void APIENTRY glMapGrid2xOES (GLint n, GLfixed u1, GLfixed u2, GLfixed v1, GLfixed v2); +GLAPI void APIENTRY glMultTransposeMatrixxOES (const GLfixed *m); +GLAPI void APIENTRY glMultiTexCoord1xOES (GLenum texture, GLfixed s); +GLAPI void APIENTRY glMultiTexCoord1xvOES (GLenum texture, const GLfixed *coords); +GLAPI void APIENTRY glMultiTexCoord2xOES (GLenum texture, GLfixed s, GLfixed t); +GLAPI void APIENTRY glMultiTexCoord2xvOES (GLenum texture, const GLfixed *coords); +GLAPI void APIENTRY glMultiTexCoord3xOES (GLenum texture, GLfixed s, GLfixed t, GLfixed r); +GLAPI void APIENTRY glMultiTexCoord3xvOES (GLenum texture, const GLfixed *coords); +GLAPI void APIENTRY glMultiTexCoord4xvOES (GLenum texture, const GLfixed *coords); +GLAPI void APIENTRY glNormal3xvOES (const GLfixed *coords); +GLAPI void APIENTRY glPassThroughxOES (GLfixed token); +GLAPI void APIENTRY glPixelMapx (GLenum map, GLint size, const GLfixed *values); +GLAPI void APIENTRY glPixelStorex (GLenum pname, GLfixed param); +GLAPI void APIENTRY glPixelTransferxOES (GLenum pname, GLfixed param); +GLAPI void APIENTRY glPixelZoomxOES (GLfixed xfactor, GLfixed yfactor); +GLAPI void APIENTRY glPrioritizeTexturesxOES (GLsizei n, const GLuint *textures, const GLfixed *priorities); +GLAPI void APIENTRY glRasterPos2xOES (GLfixed x, GLfixed y); +GLAPI void APIENTRY glRasterPos2xvOES (const GLfixed *coords); +GLAPI void APIENTRY glRasterPos3xOES (GLfixed x, GLfixed y, GLfixed z); +GLAPI void APIENTRY glRasterPos3xvOES (const GLfixed *coords); +GLAPI void APIENTRY glRasterPos4xOES (GLfixed x, GLfixed y, GLfixed z, GLfixed w); +GLAPI void APIENTRY glRasterPos4xvOES (const GLfixed *coords); +GLAPI void APIENTRY glRectxOES (GLfixed x1, GLfixed y1, GLfixed x2, GLfixed y2); +GLAPI void APIENTRY glRectxvOES (const GLfixed *v1, const GLfixed *v2); +GLAPI void APIENTRY glTexCoord1xOES (GLfixed s); +GLAPI void APIENTRY glTexCoord1xvOES (const GLfixed *coords); +GLAPI void APIENTRY glTexCoord2xOES (GLfixed s, GLfixed t); +GLAPI void APIENTRY glTexCoord2xvOES (const GLfixed *coords); +GLAPI void APIENTRY glTexCoord3xOES (GLfixed s, GLfixed t, GLfixed r); +GLAPI void APIENTRY glTexCoord3xvOES (const GLfixed *coords); +GLAPI void APIENTRY glTexCoord4xOES (GLfixed s, GLfixed t, GLfixed r, GLfixed q); +GLAPI void APIENTRY glTexCoord4xvOES (const GLfixed *coords); +GLAPI void APIENTRY glTexGenxOES (GLenum coord, GLenum pname, GLfixed param); +GLAPI void APIENTRY glTexGenxvOES (GLenum coord, GLenum pname, const GLfixed *params); +GLAPI void APIENTRY glVertex2xOES (GLfixed x); +GLAPI void APIENTRY glVertex2xvOES (const GLfixed *coords); +GLAPI void APIENTRY glVertex3xOES (GLfixed x, GLfixed y); +GLAPI void APIENTRY glVertex3xvOES (const GLfixed *coords); +GLAPI void APIENTRY glVertex4xOES (GLfixed x, GLfixed y, GLfixed z); +GLAPI void APIENTRY glVertex4xvOES (const GLfixed *coords); +#endif +#endif /* GL_OES_fixed_point */ + +#ifndef GL_OES_query_matrix +#define GL_OES_query_matrix 1 +typedef GLbitfield (APIENTRYP PFNGLQUERYMATRIXXOESPROC) (GLfixed *mantissa, GLint *exponent); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI GLbitfield APIENTRY glQueryMatrixxOES (GLfixed *mantissa, GLint *exponent); +#endif +#endif /* GL_OES_query_matrix */ + +#ifndef GL_OES_read_format +#define GL_OES_read_format 1 +#define GL_IMPLEMENTATION_COLOR_READ_TYPE_OES 0x8B9A +#define GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES 0x8B9B +#endif /* GL_OES_read_format */ + +#ifndef GL_OES_single_precision +#define GL_OES_single_precision 1 +typedef void (APIENTRYP PFNGLCLEARDEPTHFOESPROC) (GLclampf depth); +typedef void (APIENTRYP PFNGLCLIPPLANEFOESPROC) (GLenum plane, const GLfloat *equation); +typedef void (APIENTRYP PFNGLDEPTHRANGEFOESPROC) (GLclampf n, GLclampf f); +typedef void (APIENTRYP PFNGLFRUSTUMFOESPROC) (GLfloat l, GLfloat r, GLfloat b, GLfloat t, GLfloat n, GLfloat f); +typedef void (APIENTRYP PFNGLGETCLIPPLANEFOESPROC) (GLenum plane, GLfloat *equation); +typedef void (APIENTRYP PFNGLORTHOFOESPROC) (GLfloat l, GLfloat r, GLfloat b, GLfloat t, GLfloat n, GLfloat f); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glClearDepthfOES (GLclampf depth); +GLAPI void APIENTRY glClipPlanefOES (GLenum plane, const GLfloat *equation); +GLAPI void APIENTRY glDepthRangefOES (GLclampf n, GLclampf f); +GLAPI void APIENTRY glFrustumfOES (GLfloat l, GLfloat r, GLfloat b, GLfloat t, GLfloat n, GLfloat f); +GLAPI void APIENTRY glGetClipPlanefOES (GLenum plane, GLfloat *equation); +GLAPI void APIENTRY glOrthofOES (GLfloat l, GLfloat r, GLfloat b, GLfloat t, GLfloat n, GLfloat f); +#endif +#endif /* GL_OES_single_precision */ + +#ifndef GL_3DFX_multisample +#define GL_3DFX_multisample 1 +#define GL_MULTISAMPLE_3DFX 0x86B2 +#define GL_SAMPLE_BUFFERS_3DFX 0x86B3 +#define GL_SAMPLES_3DFX 0x86B4 +#define GL_MULTISAMPLE_BIT_3DFX 0x20000000 +#endif /* GL_3DFX_multisample */ + +#ifndef GL_3DFX_tbuffer +#define GL_3DFX_tbuffer 1 +typedef void (APIENTRYP PFNGLTBUFFERMASK3DFXPROC) (GLuint mask); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glTbufferMask3DFX (GLuint mask); +#endif +#endif /* GL_3DFX_tbuffer */ + +#ifndef GL_3DFX_texture_compression_FXT1 +#define GL_3DFX_texture_compression_FXT1 1 +#define GL_COMPRESSED_RGB_FXT1_3DFX 0x86B0 +#define GL_COMPRESSED_RGBA_FXT1_3DFX 0x86B1 +#endif /* GL_3DFX_texture_compression_FXT1 */ + +#ifndef GL_AMD_blend_minmax_factor +#define GL_AMD_blend_minmax_factor 1 +#define GL_FACTOR_MIN_AMD 0x901C +#define GL_FACTOR_MAX_AMD 0x901D +#endif /* GL_AMD_blend_minmax_factor */ + +#ifndef GL_AMD_conservative_depth +#define GL_AMD_conservative_depth 1 +#endif /* GL_AMD_conservative_depth */ + +#ifndef GL_AMD_debug_output +#define GL_AMD_debug_output 1 +typedef void (APIENTRY *GLDEBUGPROCAMD)(GLuint id,GLenum category,GLenum severity,GLsizei length,const GLchar *message,void *userParam); +#define GL_MAX_DEBUG_MESSAGE_LENGTH_AMD 0x9143 +#define GL_MAX_DEBUG_LOGGED_MESSAGES_AMD 0x9144 +#define GL_DEBUG_LOGGED_MESSAGES_AMD 0x9145 +#define GL_DEBUG_SEVERITY_HIGH_AMD 0x9146 +#define GL_DEBUG_SEVERITY_MEDIUM_AMD 0x9147 +#define GL_DEBUG_SEVERITY_LOW_AMD 0x9148 +#define GL_DEBUG_CATEGORY_API_ERROR_AMD 0x9149 +#define GL_DEBUG_CATEGORY_WINDOW_SYSTEM_AMD 0x914A +#define GL_DEBUG_CATEGORY_DEPRECATION_AMD 0x914B +#define GL_DEBUG_CATEGORY_UNDEFINED_BEHAVIOR_AMD 0x914C +#define GL_DEBUG_CATEGORY_PERFORMANCE_AMD 0x914D +#define GL_DEBUG_CATEGORY_SHADER_COMPILER_AMD 0x914E +#define GL_DEBUG_CATEGORY_APPLICATION_AMD 0x914F +#define GL_DEBUG_CATEGORY_OTHER_AMD 0x9150 +typedef void (APIENTRYP PFNGLDEBUGMESSAGEENABLEAMDPROC) (GLenum category, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled); +typedef void (APIENTRYP PFNGLDEBUGMESSAGEINSERTAMDPROC) (GLenum category, GLenum severity, GLuint id, GLsizei length, const GLchar *buf); +typedef void (APIENTRYP PFNGLDEBUGMESSAGECALLBACKAMDPROC) (GLDEBUGPROCAMD callback, void *userParam); +typedef GLuint (APIENTRYP PFNGLGETDEBUGMESSAGELOGAMDPROC) (GLuint count, GLsizei bufSize, GLenum *categories, GLuint *severities, GLuint *ids, GLsizei *lengths, GLchar *message); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glDebugMessageEnableAMD (GLenum category, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled); +GLAPI void APIENTRY glDebugMessageInsertAMD (GLenum category, GLenum severity, GLuint id, GLsizei length, const GLchar *buf); +GLAPI void APIENTRY glDebugMessageCallbackAMD (GLDEBUGPROCAMD callback, void *userParam); +GLAPI GLuint APIENTRY glGetDebugMessageLogAMD (GLuint count, GLsizei bufSize, GLenum *categories, GLuint *severities, GLuint *ids, GLsizei *lengths, GLchar *message); +#endif +#endif /* GL_AMD_debug_output */ + +#ifndef GL_AMD_depth_clamp_separate +#define GL_AMD_depth_clamp_separate 1 +#define GL_DEPTH_CLAMP_NEAR_AMD 0x901E +#define GL_DEPTH_CLAMP_FAR_AMD 0x901F +#endif /* GL_AMD_depth_clamp_separate */ + +#ifndef GL_AMD_draw_buffers_blend +#define GL_AMD_draw_buffers_blend 1 +typedef void (APIENTRYP PFNGLBLENDFUNCINDEXEDAMDPROC) (GLuint buf, GLenum src, GLenum dst); +typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEINDEXEDAMDPROC) (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); +typedef void (APIENTRYP PFNGLBLENDEQUATIONINDEXEDAMDPROC) (GLuint buf, GLenum mode); +typedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEINDEXEDAMDPROC) (GLuint buf, GLenum modeRGB, GLenum modeAlpha); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBlendFuncIndexedAMD (GLuint buf, GLenum src, GLenum dst); +GLAPI void APIENTRY glBlendFuncSeparateIndexedAMD (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); +GLAPI void APIENTRY glBlendEquationIndexedAMD (GLuint buf, GLenum mode); +GLAPI void APIENTRY glBlendEquationSeparateIndexedAMD (GLuint buf, GLenum modeRGB, GLenum modeAlpha); +#endif +#endif /* GL_AMD_draw_buffers_blend */ + +#ifndef GL_AMD_framebuffer_multisample_advanced +#define GL_AMD_framebuffer_multisample_advanced 1 +#define GL_RENDERBUFFER_STORAGE_SAMPLES_AMD 0x91B2 +#define GL_MAX_COLOR_FRAMEBUFFER_SAMPLES_AMD 0x91B3 +#define GL_MAX_COLOR_FRAMEBUFFER_STORAGE_SAMPLES_AMD 0x91B4 +#define GL_MAX_DEPTH_STENCIL_FRAMEBUFFER_SAMPLES_AMD 0x91B5 +#define GL_NUM_SUPPORTED_MULTISAMPLE_MODES_AMD 0x91B6 +#define GL_SUPPORTED_MULTISAMPLE_MODES_AMD 0x91B7 +typedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLEADVANCEDAMDPROC) (GLenum target, GLsizei samples, GLsizei storageSamples, GLenum internalformat, GLsizei width, GLsizei height); +typedef void (APIENTRYP PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLEADVANCEDAMDPROC) (GLuint renderbuffer, GLsizei samples, GLsizei storageSamples, GLenum internalformat, GLsizei width, GLsizei height); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glRenderbufferStorageMultisampleAdvancedAMD (GLenum target, GLsizei samples, GLsizei storageSamples, GLenum internalformat, GLsizei width, GLsizei height); +GLAPI void APIENTRY glNamedRenderbufferStorageMultisampleAdvancedAMD (GLuint renderbuffer, GLsizei samples, GLsizei storageSamples, GLenum internalformat, GLsizei width, GLsizei height); +#endif +#endif /* GL_AMD_framebuffer_multisample_advanced */ + +#ifndef GL_AMD_framebuffer_sample_positions +#define GL_AMD_framebuffer_sample_positions 1 +#define GL_SUBSAMPLE_DISTANCE_AMD 0x883F +#define GL_PIXELS_PER_SAMPLE_PATTERN_X_AMD 0x91AE +#define GL_PIXELS_PER_SAMPLE_PATTERN_Y_AMD 0x91AF +#define GL_ALL_PIXELS_AMD 0xFFFFFFFF +typedef void (APIENTRYP PFNGLFRAMEBUFFERSAMPLEPOSITIONSFVAMDPROC) (GLenum target, GLuint numsamples, GLuint pixelindex, const GLfloat *values); +typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERSAMPLEPOSITIONSFVAMDPROC) (GLuint framebuffer, GLuint numsamples, GLuint pixelindex, const GLfloat *values); +typedef void (APIENTRYP PFNGLGETFRAMEBUFFERPARAMETERFVAMDPROC) (GLenum target, GLenum pname, GLuint numsamples, GLuint pixelindex, GLsizei size, GLfloat *values); +typedef void (APIENTRYP PFNGLGETNAMEDFRAMEBUFFERPARAMETERFVAMDPROC) (GLuint framebuffer, GLenum pname, GLuint numsamples, GLuint pixelindex, GLsizei size, GLfloat *values); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glFramebufferSamplePositionsfvAMD (GLenum target, GLuint numsamples, GLuint pixelindex, const GLfloat *values); +GLAPI void APIENTRY glNamedFramebufferSamplePositionsfvAMD (GLuint framebuffer, GLuint numsamples, GLuint pixelindex, const GLfloat *values); +GLAPI void APIENTRY glGetFramebufferParameterfvAMD (GLenum target, GLenum pname, GLuint numsamples, GLuint pixelindex, GLsizei size, GLfloat *values); +GLAPI void APIENTRY glGetNamedFramebufferParameterfvAMD (GLuint framebuffer, GLenum pname, GLuint numsamples, GLuint pixelindex, GLsizei size, GLfloat *values); +#endif +#endif /* GL_AMD_framebuffer_sample_positions */ + +#ifndef GL_AMD_gcn_shader +#define GL_AMD_gcn_shader 1 +#endif /* GL_AMD_gcn_shader */ + +#ifndef GL_AMD_gpu_shader_half_float +#define GL_AMD_gpu_shader_half_float 1 +#define GL_FLOAT16_NV 0x8FF8 +#define GL_FLOAT16_VEC2_NV 0x8FF9 +#define GL_FLOAT16_VEC3_NV 0x8FFA +#define GL_FLOAT16_VEC4_NV 0x8FFB +#define GL_FLOAT16_MAT2_AMD 0x91C5 +#define GL_FLOAT16_MAT3_AMD 0x91C6 +#define GL_FLOAT16_MAT4_AMD 0x91C7 +#define GL_FLOAT16_MAT2x3_AMD 0x91C8 +#define GL_FLOAT16_MAT2x4_AMD 0x91C9 +#define GL_FLOAT16_MAT3x2_AMD 0x91CA +#define GL_FLOAT16_MAT3x4_AMD 0x91CB +#define GL_FLOAT16_MAT4x2_AMD 0x91CC +#define GL_FLOAT16_MAT4x3_AMD 0x91CD +#endif /* GL_AMD_gpu_shader_half_float */ + +#ifndef GL_AMD_gpu_shader_int16 +#define GL_AMD_gpu_shader_int16 1 +#endif /* GL_AMD_gpu_shader_int16 */ + +#ifndef GL_AMD_gpu_shader_int64 +#define GL_AMD_gpu_shader_int64 1 +typedef khronos_int64_t GLint64EXT; +#define GL_INT64_NV 0x140E +#define GL_UNSIGNED_INT64_NV 0x140F +#define GL_INT8_NV 0x8FE0 +#define GL_INT8_VEC2_NV 0x8FE1 +#define GL_INT8_VEC3_NV 0x8FE2 +#define GL_INT8_VEC4_NV 0x8FE3 +#define GL_INT16_NV 0x8FE4 +#define GL_INT16_VEC2_NV 0x8FE5 +#define GL_INT16_VEC3_NV 0x8FE6 +#define GL_INT16_VEC4_NV 0x8FE7 +#define GL_INT64_VEC2_NV 0x8FE9 +#define GL_INT64_VEC3_NV 0x8FEA +#define GL_INT64_VEC4_NV 0x8FEB +#define GL_UNSIGNED_INT8_NV 0x8FEC +#define GL_UNSIGNED_INT8_VEC2_NV 0x8FED +#define GL_UNSIGNED_INT8_VEC3_NV 0x8FEE +#define GL_UNSIGNED_INT8_VEC4_NV 0x8FEF +#define GL_UNSIGNED_INT16_NV 0x8FF0 +#define GL_UNSIGNED_INT16_VEC2_NV 0x8FF1 +#define GL_UNSIGNED_INT16_VEC3_NV 0x8FF2 +#define GL_UNSIGNED_INT16_VEC4_NV 0x8FF3 +#define GL_UNSIGNED_INT64_VEC2_NV 0x8FF5 +#define GL_UNSIGNED_INT64_VEC3_NV 0x8FF6 +#define GL_UNSIGNED_INT64_VEC4_NV 0x8FF7 +typedef void (APIENTRYP PFNGLUNIFORM1I64NVPROC) (GLint location, GLint64EXT x); +typedef void (APIENTRYP PFNGLUNIFORM2I64NVPROC) (GLint location, GLint64EXT x, GLint64EXT y); +typedef void (APIENTRYP PFNGLUNIFORM3I64NVPROC) (GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z); +typedef void (APIENTRYP PFNGLUNIFORM4I64NVPROC) (GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w); +typedef void (APIENTRYP PFNGLUNIFORM1I64VNVPROC) (GLint location, GLsizei count, const GLint64EXT *value); +typedef void (APIENTRYP PFNGLUNIFORM2I64VNVPROC) (GLint location, GLsizei count, const GLint64EXT *value); +typedef void (APIENTRYP PFNGLUNIFORM3I64VNVPROC) (GLint location, GLsizei count, const GLint64EXT *value); +typedef void (APIENTRYP PFNGLUNIFORM4I64VNVPROC) (GLint location, GLsizei count, const GLint64EXT *value); +typedef void (APIENTRYP PFNGLUNIFORM1UI64NVPROC) (GLint location, GLuint64EXT x); +typedef void (APIENTRYP PFNGLUNIFORM2UI64NVPROC) (GLint location, GLuint64EXT x, GLuint64EXT y); +typedef void (APIENTRYP PFNGLUNIFORM3UI64NVPROC) (GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z); +typedef void (APIENTRYP PFNGLUNIFORM4UI64NVPROC) (GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w); +typedef void (APIENTRYP PFNGLUNIFORM1UI64VNVPROC) (GLint location, GLsizei count, const GLuint64EXT *value); +typedef void (APIENTRYP PFNGLUNIFORM2UI64VNVPROC) (GLint location, GLsizei count, const GLuint64EXT *value); +typedef void (APIENTRYP PFNGLUNIFORM3UI64VNVPROC) (GLint location, GLsizei count, const GLuint64EXT *value); +typedef void (APIENTRYP PFNGLUNIFORM4UI64VNVPROC) (GLint location, GLsizei count, const GLuint64EXT *value); +typedef void (APIENTRYP PFNGLGETUNIFORMI64VNVPROC) (GLuint program, GLint location, GLint64EXT *params); +typedef void (APIENTRYP PFNGLGETUNIFORMUI64VNVPROC) (GLuint program, GLint location, GLuint64EXT *params); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1I64NVPROC) (GLuint program, GLint location, GLint64EXT x); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2I64NVPROC) (GLuint program, GLint location, GLint64EXT x, GLint64EXT y); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3I64NVPROC) (GLuint program, GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4I64NVPROC) (GLuint program, GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1I64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLint64EXT *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2I64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLint64EXT *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3I64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLint64EXT *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4I64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLint64EXT *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1UI64NVPROC) (GLuint program, GLint location, GLuint64EXT x); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2UI64NVPROC) (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3UI64NVPROC) (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4UI64NVPROC) (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1UI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2UI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3UI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4UI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glUniform1i64NV (GLint location, GLint64EXT x); +GLAPI void APIENTRY glUniform2i64NV (GLint location, GLint64EXT x, GLint64EXT y); +GLAPI void APIENTRY glUniform3i64NV (GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z); +GLAPI void APIENTRY glUniform4i64NV (GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w); +GLAPI void APIENTRY glUniform1i64vNV (GLint location, GLsizei count, const GLint64EXT *value); +GLAPI void APIENTRY glUniform2i64vNV (GLint location, GLsizei count, const GLint64EXT *value); +GLAPI void APIENTRY glUniform3i64vNV (GLint location, GLsizei count, const GLint64EXT *value); +GLAPI void APIENTRY glUniform4i64vNV (GLint location, GLsizei count, const GLint64EXT *value); +GLAPI void APIENTRY glUniform1ui64NV (GLint location, GLuint64EXT x); +GLAPI void APIENTRY glUniform2ui64NV (GLint location, GLuint64EXT x, GLuint64EXT y); +GLAPI void APIENTRY glUniform3ui64NV (GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z); +GLAPI void APIENTRY glUniform4ui64NV (GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w); +GLAPI void APIENTRY glUniform1ui64vNV (GLint location, GLsizei count, const GLuint64EXT *value); +GLAPI void APIENTRY glUniform2ui64vNV (GLint location, GLsizei count, const GLuint64EXT *value); +GLAPI void APIENTRY glUniform3ui64vNV (GLint location, GLsizei count, const GLuint64EXT *value); +GLAPI void APIENTRY glUniform4ui64vNV (GLint location, GLsizei count, const GLuint64EXT *value); +GLAPI void APIENTRY glGetUniformi64vNV (GLuint program, GLint location, GLint64EXT *params); +GLAPI void APIENTRY glGetUniformui64vNV (GLuint program, GLint location, GLuint64EXT *params); +GLAPI void APIENTRY glProgramUniform1i64NV (GLuint program, GLint location, GLint64EXT x); +GLAPI void APIENTRY glProgramUniform2i64NV (GLuint program, GLint location, GLint64EXT x, GLint64EXT y); +GLAPI void APIENTRY glProgramUniform3i64NV (GLuint program, GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z); +GLAPI void APIENTRY glProgramUniform4i64NV (GLuint program, GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w); +GLAPI void APIENTRY glProgramUniform1i64vNV (GLuint program, GLint location, GLsizei count, const GLint64EXT *value); +GLAPI void APIENTRY glProgramUniform2i64vNV (GLuint program, GLint location, GLsizei count, const GLint64EXT *value); +GLAPI void APIENTRY glProgramUniform3i64vNV (GLuint program, GLint location, GLsizei count, const GLint64EXT *value); +GLAPI void APIENTRY glProgramUniform4i64vNV (GLuint program, GLint location, GLsizei count, const GLint64EXT *value); +GLAPI void APIENTRY glProgramUniform1ui64NV (GLuint program, GLint location, GLuint64EXT x); +GLAPI void APIENTRY glProgramUniform2ui64NV (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y); +GLAPI void APIENTRY glProgramUniform3ui64NV (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z); +GLAPI void APIENTRY glProgramUniform4ui64NV (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w); +GLAPI void APIENTRY glProgramUniform1ui64vNV (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); +GLAPI void APIENTRY glProgramUniform2ui64vNV (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); +GLAPI void APIENTRY glProgramUniform3ui64vNV (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); +GLAPI void APIENTRY glProgramUniform4ui64vNV (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); +#endif +#endif /* GL_AMD_gpu_shader_int64 */ + +#ifndef GL_AMD_interleaved_elements +#define GL_AMD_interleaved_elements 1 +#define GL_VERTEX_ELEMENT_SWIZZLE_AMD 0x91A4 +#define GL_VERTEX_ID_SWIZZLE_AMD 0x91A5 +typedef void (APIENTRYP PFNGLVERTEXATTRIBPARAMETERIAMDPROC) (GLuint index, GLenum pname, GLint param); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glVertexAttribParameteriAMD (GLuint index, GLenum pname, GLint param); +#endif +#endif /* GL_AMD_interleaved_elements */ + +#ifndef GL_AMD_multi_draw_indirect +#define GL_AMD_multi_draw_indirect 1 +typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSINDIRECTAMDPROC) (GLenum mode, const void *indirect, GLsizei primcount, GLsizei stride); +typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSINDIRECTAMDPROC) (GLenum mode, GLenum type, const void *indirect, GLsizei primcount, GLsizei stride); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glMultiDrawArraysIndirectAMD (GLenum mode, const void *indirect, GLsizei primcount, GLsizei stride); +GLAPI void APIENTRY glMultiDrawElementsIndirectAMD (GLenum mode, GLenum type, const void *indirect, GLsizei primcount, GLsizei stride); +#endif +#endif /* GL_AMD_multi_draw_indirect */ + +#ifndef GL_AMD_name_gen_delete +#define GL_AMD_name_gen_delete 1 +#define GL_DATA_BUFFER_AMD 0x9151 +#define GL_PERFORMANCE_MONITOR_AMD 0x9152 +#define GL_QUERY_OBJECT_AMD 0x9153 +#define GL_VERTEX_ARRAY_OBJECT_AMD 0x9154 +#define GL_SAMPLER_OBJECT_AMD 0x9155 +typedef void (APIENTRYP PFNGLGENNAMESAMDPROC) (GLenum identifier, GLuint num, GLuint *names); +typedef void (APIENTRYP PFNGLDELETENAMESAMDPROC) (GLenum identifier, GLuint num, const GLuint *names); +typedef GLboolean (APIENTRYP PFNGLISNAMEAMDPROC) (GLenum identifier, GLuint name); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glGenNamesAMD (GLenum identifier, GLuint num, GLuint *names); +GLAPI void APIENTRY glDeleteNamesAMD (GLenum identifier, GLuint num, const GLuint *names); +GLAPI GLboolean APIENTRY glIsNameAMD (GLenum identifier, GLuint name); +#endif +#endif /* GL_AMD_name_gen_delete */ + +#ifndef GL_AMD_occlusion_query_event +#define GL_AMD_occlusion_query_event 1 +#define GL_OCCLUSION_QUERY_EVENT_MASK_AMD 0x874F +#define GL_QUERY_DEPTH_PASS_EVENT_BIT_AMD 0x00000001 +#define GL_QUERY_DEPTH_FAIL_EVENT_BIT_AMD 0x00000002 +#define GL_QUERY_STENCIL_FAIL_EVENT_BIT_AMD 0x00000004 +#define GL_QUERY_DEPTH_BOUNDS_FAIL_EVENT_BIT_AMD 0x00000008 +#define GL_QUERY_ALL_EVENT_BITS_AMD 0xFFFFFFFF +typedef void (APIENTRYP PFNGLQUERYOBJECTPARAMETERUIAMDPROC) (GLenum target, GLuint id, GLenum pname, GLuint param); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glQueryObjectParameteruiAMD (GLenum target, GLuint id, GLenum pname, GLuint param); +#endif +#endif /* GL_AMD_occlusion_query_event */ + +#ifndef GL_AMD_performance_monitor +#define GL_AMD_performance_monitor 1 +#define GL_COUNTER_TYPE_AMD 0x8BC0 +#define GL_COUNTER_RANGE_AMD 0x8BC1 +#define GL_UNSIGNED_INT64_AMD 0x8BC2 +#define GL_PERCENTAGE_AMD 0x8BC3 +#define GL_PERFMON_RESULT_AVAILABLE_AMD 0x8BC4 +#define GL_PERFMON_RESULT_SIZE_AMD 0x8BC5 +#define GL_PERFMON_RESULT_AMD 0x8BC6 +typedef void (APIENTRYP PFNGLGETPERFMONITORGROUPSAMDPROC) (GLint *numGroups, GLsizei groupsSize, GLuint *groups); +typedef void (APIENTRYP PFNGLGETPERFMONITORCOUNTERSAMDPROC) (GLuint group, GLint *numCounters, GLint *maxActiveCounters, GLsizei counterSize, GLuint *counters); +typedef void (APIENTRYP PFNGLGETPERFMONITORGROUPSTRINGAMDPROC) (GLuint group, GLsizei bufSize, GLsizei *length, GLchar *groupString); +typedef void (APIENTRYP PFNGLGETPERFMONITORCOUNTERSTRINGAMDPROC) (GLuint group, GLuint counter, GLsizei bufSize, GLsizei *length, GLchar *counterString); +typedef void (APIENTRYP PFNGLGETPERFMONITORCOUNTERINFOAMDPROC) (GLuint group, GLuint counter, GLenum pname, void *data); +typedef void (APIENTRYP PFNGLGENPERFMONITORSAMDPROC) (GLsizei n, GLuint *monitors); +typedef void (APIENTRYP PFNGLDELETEPERFMONITORSAMDPROC) (GLsizei n, GLuint *monitors); +typedef void (APIENTRYP PFNGLSELECTPERFMONITORCOUNTERSAMDPROC) (GLuint monitor, GLboolean enable, GLuint group, GLint numCounters, GLuint *counterList); +typedef void (APIENTRYP PFNGLBEGINPERFMONITORAMDPROC) (GLuint monitor); +typedef void (APIENTRYP PFNGLENDPERFMONITORAMDPROC) (GLuint monitor); +typedef void (APIENTRYP PFNGLGETPERFMONITORCOUNTERDATAAMDPROC) (GLuint monitor, GLenum pname, GLsizei dataSize, GLuint *data, GLint *bytesWritten); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glGetPerfMonitorGroupsAMD (GLint *numGroups, GLsizei groupsSize, GLuint *groups); +GLAPI void APIENTRY glGetPerfMonitorCountersAMD (GLuint group, GLint *numCounters, GLint *maxActiveCounters, GLsizei counterSize, GLuint *counters); +GLAPI void APIENTRY glGetPerfMonitorGroupStringAMD (GLuint group, GLsizei bufSize, GLsizei *length, GLchar *groupString); +GLAPI void APIENTRY glGetPerfMonitorCounterStringAMD (GLuint group, GLuint counter, GLsizei bufSize, GLsizei *length, GLchar *counterString); +GLAPI void APIENTRY glGetPerfMonitorCounterInfoAMD (GLuint group, GLuint counter, GLenum pname, void *data); +GLAPI void APIENTRY glGenPerfMonitorsAMD (GLsizei n, GLuint *monitors); +GLAPI void APIENTRY glDeletePerfMonitorsAMD (GLsizei n, GLuint *monitors); +GLAPI void APIENTRY glSelectPerfMonitorCountersAMD (GLuint monitor, GLboolean enable, GLuint group, GLint numCounters, GLuint *counterList); +GLAPI void APIENTRY glBeginPerfMonitorAMD (GLuint monitor); +GLAPI void APIENTRY glEndPerfMonitorAMD (GLuint monitor); +GLAPI void APIENTRY glGetPerfMonitorCounterDataAMD (GLuint monitor, GLenum pname, GLsizei dataSize, GLuint *data, GLint *bytesWritten); +#endif +#endif /* GL_AMD_performance_monitor */ + +#ifndef GL_AMD_pinned_memory +#define GL_AMD_pinned_memory 1 +#define GL_EXTERNAL_VIRTUAL_MEMORY_BUFFER_AMD 0x9160 +#endif /* GL_AMD_pinned_memory */ + +#ifndef GL_AMD_query_buffer_object +#define GL_AMD_query_buffer_object 1 +#define GL_QUERY_BUFFER_AMD 0x9192 +#define GL_QUERY_BUFFER_BINDING_AMD 0x9193 +#define GL_QUERY_RESULT_NO_WAIT_AMD 0x9194 +#endif /* GL_AMD_query_buffer_object */ + +#ifndef GL_AMD_sample_positions +#define GL_AMD_sample_positions 1 +typedef void (APIENTRYP PFNGLSETMULTISAMPLEFVAMDPROC) (GLenum pname, GLuint index, const GLfloat *val); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glSetMultisamplefvAMD (GLenum pname, GLuint index, const GLfloat *val); +#endif +#endif /* GL_AMD_sample_positions */ + +#ifndef GL_AMD_seamless_cubemap_per_texture +#define GL_AMD_seamless_cubemap_per_texture 1 +#endif /* GL_AMD_seamless_cubemap_per_texture */ + +#ifndef GL_AMD_shader_atomic_counter_ops +#define GL_AMD_shader_atomic_counter_ops 1 +#endif /* GL_AMD_shader_atomic_counter_ops */ + +#ifndef GL_AMD_shader_ballot +#define GL_AMD_shader_ballot 1 +#endif /* GL_AMD_shader_ballot */ + +#ifndef GL_AMD_shader_explicit_vertex_parameter +#define GL_AMD_shader_explicit_vertex_parameter 1 +#endif /* GL_AMD_shader_explicit_vertex_parameter */ + +#ifndef GL_AMD_shader_gpu_shader_half_float_fetch +#define GL_AMD_shader_gpu_shader_half_float_fetch 1 +#endif /* GL_AMD_shader_gpu_shader_half_float_fetch */ + +#ifndef GL_AMD_shader_image_load_store_lod +#define GL_AMD_shader_image_load_store_lod 1 +#endif /* GL_AMD_shader_image_load_store_lod */ + +#ifndef GL_AMD_shader_stencil_export +#define GL_AMD_shader_stencil_export 1 +#endif /* GL_AMD_shader_stencil_export */ + +#ifndef GL_AMD_shader_trinary_minmax +#define GL_AMD_shader_trinary_minmax 1 +#endif /* GL_AMD_shader_trinary_minmax */ + +#ifndef GL_AMD_sparse_texture +#define GL_AMD_sparse_texture 1 +#define GL_VIRTUAL_PAGE_SIZE_X_AMD 0x9195 +#define GL_VIRTUAL_PAGE_SIZE_Y_AMD 0x9196 +#define GL_VIRTUAL_PAGE_SIZE_Z_AMD 0x9197 +#define GL_MAX_SPARSE_TEXTURE_SIZE_AMD 0x9198 +#define GL_MAX_SPARSE_3D_TEXTURE_SIZE_AMD 0x9199 +#define GL_MAX_SPARSE_ARRAY_TEXTURE_LAYERS 0x919A +#define GL_MIN_SPARSE_LEVEL_AMD 0x919B +#define GL_MIN_LOD_WARNING_AMD 0x919C +#define GL_TEXTURE_STORAGE_SPARSE_BIT_AMD 0x00000001 +typedef void (APIENTRYP PFNGLTEXSTORAGESPARSEAMDPROC) (GLenum target, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLsizei layers, GLbitfield flags); +typedef void (APIENTRYP PFNGLTEXTURESTORAGESPARSEAMDPROC) (GLuint texture, GLenum target, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLsizei layers, GLbitfield flags); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glTexStorageSparseAMD (GLenum target, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLsizei layers, GLbitfield flags); +GLAPI void APIENTRY glTextureStorageSparseAMD (GLuint texture, GLenum target, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLsizei layers, GLbitfield flags); +#endif +#endif /* GL_AMD_sparse_texture */ + +#ifndef GL_AMD_stencil_operation_extended +#define GL_AMD_stencil_operation_extended 1 +#define GL_SET_AMD 0x874A +#define GL_REPLACE_VALUE_AMD 0x874B +#define GL_STENCIL_OP_VALUE_AMD 0x874C +#define GL_STENCIL_BACK_OP_VALUE_AMD 0x874D +typedef void (APIENTRYP PFNGLSTENCILOPVALUEAMDPROC) (GLenum face, GLuint value); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glStencilOpValueAMD (GLenum face, GLuint value); +#endif +#endif /* GL_AMD_stencil_operation_extended */ + +#ifndef GL_AMD_texture_gather_bias_lod +#define GL_AMD_texture_gather_bias_lod 1 +#endif /* GL_AMD_texture_gather_bias_lod */ + +#ifndef GL_AMD_texture_texture4 +#define GL_AMD_texture_texture4 1 +#endif /* GL_AMD_texture_texture4 */ + +#ifndef GL_AMD_transform_feedback3_lines_triangles +#define GL_AMD_transform_feedback3_lines_triangles 1 +#endif /* GL_AMD_transform_feedback3_lines_triangles */ + +#ifndef GL_AMD_transform_feedback4 +#define GL_AMD_transform_feedback4 1 +#define GL_STREAM_RASTERIZATION_AMD 0x91A0 +#endif /* GL_AMD_transform_feedback4 */ + +#ifndef GL_AMD_vertex_shader_layer +#define GL_AMD_vertex_shader_layer 1 +#endif /* GL_AMD_vertex_shader_layer */ + +#ifndef GL_AMD_vertex_shader_tessellator +#define GL_AMD_vertex_shader_tessellator 1 +#define GL_SAMPLER_BUFFER_AMD 0x9001 +#define GL_INT_SAMPLER_BUFFER_AMD 0x9002 +#define GL_UNSIGNED_INT_SAMPLER_BUFFER_AMD 0x9003 +#define GL_TESSELLATION_MODE_AMD 0x9004 +#define GL_TESSELLATION_FACTOR_AMD 0x9005 +#define GL_DISCRETE_AMD 0x9006 +#define GL_CONTINUOUS_AMD 0x9007 +typedef void (APIENTRYP PFNGLTESSELLATIONFACTORAMDPROC) (GLfloat factor); +typedef void (APIENTRYP PFNGLTESSELLATIONMODEAMDPROC) (GLenum mode); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glTessellationFactorAMD (GLfloat factor); +GLAPI void APIENTRY glTessellationModeAMD (GLenum mode); +#endif +#endif /* GL_AMD_vertex_shader_tessellator */ + +#ifndef GL_AMD_vertex_shader_viewport_index +#define GL_AMD_vertex_shader_viewport_index 1 +#endif /* GL_AMD_vertex_shader_viewport_index */ + +#ifndef GL_APPLE_aux_depth_stencil +#define GL_APPLE_aux_depth_stencil 1 +#define GL_AUX_DEPTH_STENCIL_APPLE 0x8A14 +#endif /* GL_APPLE_aux_depth_stencil */ + +#ifndef GL_APPLE_client_storage +#define GL_APPLE_client_storage 1 +#define GL_UNPACK_CLIENT_STORAGE_APPLE 0x85B2 +#endif /* GL_APPLE_client_storage */ + +#ifndef GL_APPLE_element_array +#define GL_APPLE_element_array 1 +#define GL_ELEMENT_ARRAY_APPLE 0x8A0C +#define GL_ELEMENT_ARRAY_TYPE_APPLE 0x8A0D +#define GL_ELEMENT_ARRAY_POINTER_APPLE 0x8A0E +typedef void (APIENTRYP PFNGLELEMENTPOINTERAPPLEPROC) (GLenum type, const void *pointer); +typedef void (APIENTRYP PFNGLDRAWELEMENTARRAYAPPLEPROC) (GLenum mode, GLint first, GLsizei count); +typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTARRAYAPPLEPROC) (GLenum mode, GLuint start, GLuint end, GLint first, GLsizei count); +typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTARRAYAPPLEPROC) (GLenum mode, const GLint *first, const GLsizei *count, GLsizei primcount); +typedef void (APIENTRYP PFNGLMULTIDRAWRANGEELEMENTARRAYAPPLEPROC) (GLenum mode, GLuint start, GLuint end, const GLint *first, const GLsizei *count, GLsizei primcount); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glElementPointerAPPLE (GLenum type, const void *pointer); +GLAPI void APIENTRY glDrawElementArrayAPPLE (GLenum mode, GLint first, GLsizei count); +GLAPI void APIENTRY glDrawRangeElementArrayAPPLE (GLenum mode, GLuint start, GLuint end, GLint first, GLsizei count); +GLAPI void APIENTRY glMultiDrawElementArrayAPPLE (GLenum mode, const GLint *first, const GLsizei *count, GLsizei primcount); +GLAPI void APIENTRY glMultiDrawRangeElementArrayAPPLE (GLenum mode, GLuint start, GLuint end, const GLint *first, const GLsizei *count, GLsizei primcount); +#endif +#endif /* GL_APPLE_element_array */ + +#ifndef GL_APPLE_fence +#define GL_APPLE_fence 1 +#define GL_DRAW_PIXELS_APPLE 0x8A0A +#define GL_FENCE_APPLE 0x8A0B +typedef void (APIENTRYP PFNGLGENFENCESAPPLEPROC) (GLsizei n, GLuint *fences); +typedef void (APIENTRYP PFNGLDELETEFENCESAPPLEPROC) (GLsizei n, const GLuint *fences); +typedef void (APIENTRYP PFNGLSETFENCEAPPLEPROC) (GLuint fence); +typedef GLboolean (APIENTRYP PFNGLISFENCEAPPLEPROC) (GLuint fence); +typedef GLboolean (APIENTRYP PFNGLTESTFENCEAPPLEPROC) (GLuint fence); +typedef void (APIENTRYP PFNGLFINISHFENCEAPPLEPROC) (GLuint fence); +typedef GLboolean (APIENTRYP PFNGLTESTOBJECTAPPLEPROC) (GLenum object, GLuint name); +typedef void (APIENTRYP PFNGLFINISHOBJECTAPPLEPROC) (GLenum object, GLint name); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glGenFencesAPPLE (GLsizei n, GLuint *fences); +GLAPI void APIENTRY glDeleteFencesAPPLE (GLsizei n, const GLuint *fences); +GLAPI void APIENTRY glSetFenceAPPLE (GLuint fence); +GLAPI GLboolean APIENTRY glIsFenceAPPLE (GLuint fence); +GLAPI GLboolean APIENTRY glTestFenceAPPLE (GLuint fence); +GLAPI void APIENTRY glFinishFenceAPPLE (GLuint fence); +GLAPI GLboolean APIENTRY glTestObjectAPPLE (GLenum object, GLuint name); +GLAPI void APIENTRY glFinishObjectAPPLE (GLenum object, GLint name); +#endif +#endif /* GL_APPLE_fence */ + +#ifndef GL_APPLE_float_pixels +#define GL_APPLE_float_pixels 1 +#define GL_HALF_APPLE 0x140B +#define GL_RGBA_FLOAT32_APPLE 0x8814 +#define GL_RGB_FLOAT32_APPLE 0x8815 +#define GL_ALPHA_FLOAT32_APPLE 0x8816 +#define GL_INTENSITY_FLOAT32_APPLE 0x8817 +#define GL_LUMINANCE_FLOAT32_APPLE 0x8818 +#define GL_LUMINANCE_ALPHA_FLOAT32_APPLE 0x8819 +#define GL_RGBA_FLOAT16_APPLE 0x881A +#define GL_RGB_FLOAT16_APPLE 0x881B +#define GL_ALPHA_FLOAT16_APPLE 0x881C +#define GL_INTENSITY_FLOAT16_APPLE 0x881D +#define GL_LUMINANCE_FLOAT16_APPLE 0x881E +#define GL_LUMINANCE_ALPHA_FLOAT16_APPLE 0x881F +#define GL_COLOR_FLOAT_APPLE 0x8A0F +#endif /* GL_APPLE_float_pixels */ + +#ifndef GL_APPLE_flush_buffer_range +#define GL_APPLE_flush_buffer_range 1 +#define GL_BUFFER_SERIALIZED_MODIFY_APPLE 0x8A12 +#define GL_BUFFER_FLUSHING_UNMAP_APPLE 0x8A13 +typedef void (APIENTRYP PFNGLBUFFERPARAMETERIAPPLEPROC) (GLenum target, GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLFLUSHMAPPEDBUFFERRANGEAPPLEPROC) (GLenum target, GLintptr offset, GLsizeiptr size); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBufferParameteriAPPLE (GLenum target, GLenum pname, GLint param); +GLAPI void APIENTRY glFlushMappedBufferRangeAPPLE (GLenum target, GLintptr offset, GLsizeiptr size); +#endif +#endif /* GL_APPLE_flush_buffer_range */ + +#ifndef GL_APPLE_object_purgeable +#define GL_APPLE_object_purgeable 1 +#define GL_BUFFER_OBJECT_APPLE 0x85B3 +#define GL_RELEASED_APPLE 0x8A19 +#define GL_VOLATILE_APPLE 0x8A1A +#define GL_RETAINED_APPLE 0x8A1B +#define GL_UNDEFINED_APPLE 0x8A1C +#define GL_PURGEABLE_APPLE 0x8A1D +typedef GLenum (APIENTRYP PFNGLOBJECTPURGEABLEAPPLEPROC) (GLenum objectType, GLuint name, GLenum option); +typedef GLenum (APIENTRYP PFNGLOBJECTUNPURGEABLEAPPLEPROC) (GLenum objectType, GLuint name, GLenum option); +typedef void (APIENTRYP PFNGLGETOBJECTPARAMETERIVAPPLEPROC) (GLenum objectType, GLuint name, GLenum pname, GLint *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI GLenum APIENTRY glObjectPurgeableAPPLE (GLenum objectType, GLuint name, GLenum option); +GLAPI GLenum APIENTRY glObjectUnpurgeableAPPLE (GLenum objectType, GLuint name, GLenum option); +GLAPI void APIENTRY glGetObjectParameterivAPPLE (GLenum objectType, GLuint name, GLenum pname, GLint *params); +#endif +#endif /* GL_APPLE_object_purgeable */ + +#ifndef GL_APPLE_rgb_422 +#define GL_APPLE_rgb_422 1 +#define GL_RGB_422_APPLE 0x8A1F +#define GL_UNSIGNED_SHORT_8_8_APPLE 0x85BA +#define GL_UNSIGNED_SHORT_8_8_REV_APPLE 0x85BB +#define GL_RGB_RAW_422_APPLE 0x8A51 +#endif /* GL_APPLE_rgb_422 */ + +#ifndef GL_APPLE_row_bytes +#define GL_APPLE_row_bytes 1 +#define GL_PACK_ROW_BYTES_APPLE 0x8A15 +#define GL_UNPACK_ROW_BYTES_APPLE 0x8A16 +#endif /* GL_APPLE_row_bytes */ + +#ifndef GL_APPLE_specular_vector +#define GL_APPLE_specular_vector 1 +#define GL_LIGHT_MODEL_SPECULAR_VECTOR_APPLE 0x85B0 +#endif /* GL_APPLE_specular_vector */ + +#ifndef GL_APPLE_texture_range +#define GL_APPLE_texture_range 1 +#define GL_TEXTURE_RANGE_LENGTH_APPLE 0x85B7 +#define GL_TEXTURE_RANGE_POINTER_APPLE 0x85B8 +#define GL_TEXTURE_STORAGE_HINT_APPLE 0x85BC +#define GL_STORAGE_PRIVATE_APPLE 0x85BD +#define GL_STORAGE_CACHED_APPLE 0x85BE +#define GL_STORAGE_SHARED_APPLE 0x85BF +typedef void (APIENTRYP PFNGLTEXTURERANGEAPPLEPROC) (GLenum target, GLsizei length, const void *pointer); +typedef void (APIENTRYP PFNGLGETTEXPARAMETERPOINTERVAPPLEPROC) (GLenum target, GLenum pname, void **params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glTextureRangeAPPLE (GLenum target, GLsizei length, const void *pointer); +GLAPI void APIENTRY glGetTexParameterPointervAPPLE (GLenum target, GLenum pname, void **params); +#endif +#endif /* GL_APPLE_texture_range */ + +#ifndef GL_APPLE_transform_hint +#define GL_APPLE_transform_hint 1 +#define GL_TRANSFORM_HINT_APPLE 0x85B1 +#endif /* GL_APPLE_transform_hint */ + +#ifndef GL_APPLE_vertex_array_object +#define GL_APPLE_vertex_array_object 1 +#define GL_VERTEX_ARRAY_BINDING_APPLE 0x85B5 +typedef void (APIENTRYP PFNGLBINDVERTEXARRAYAPPLEPROC) (GLuint array); +typedef void (APIENTRYP PFNGLDELETEVERTEXARRAYSAPPLEPROC) (GLsizei n, const GLuint *arrays); +typedef void (APIENTRYP PFNGLGENVERTEXARRAYSAPPLEPROC) (GLsizei n, GLuint *arrays); +typedef GLboolean (APIENTRYP PFNGLISVERTEXARRAYAPPLEPROC) (GLuint array); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBindVertexArrayAPPLE (GLuint array); +GLAPI void APIENTRY glDeleteVertexArraysAPPLE (GLsizei n, const GLuint *arrays); +GLAPI void APIENTRY glGenVertexArraysAPPLE (GLsizei n, GLuint *arrays); +GLAPI GLboolean APIENTRY glIsVertexArrayAPPLE (GLuint array); +#endif +#endif /* GL_APPLE_vertex_array_object */ + +#ifndef GL_APPLE_vertex_array_range +#define GL_APPLE_vertex_array_range 1 +#define GL_VERTEX_ARRAY_RANGE_APPLE 0x851D +#define GL_VERTEX_ARRAY_RANGE_LENGTH_APPLE 0x851E +#define GL_VERTEX_ARRAY_STORAGE_HINT_APPLE 0x851F +#define GL_VERTEX_ARRAY_RANGE_POINTER_APPLE 0x8521 +#define GL_STORAGE_CLIENT_APPLE 0x85B4 +typedef void (APIENTRYP PFNGLVERTEXARRAYRANGEAPPLEPROC) (GLsizei length, void *pointer); +typedef void (APIENTRYP PFNGLFLUSHVERTEXARRAYRANGEAPPLEPROC) (GLsizei length, void *pointer); +typedef void (APIENTRYP PFNGLVERTEXARRAYPARAMETERIAPPLEPROC) (GLenum pname, GLint param); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glVertexArrayRangeAPPLE (GLsizei length, void *pointer); +GLAPI void APIENTRY glFlushVertexArrayRangeAPPLE (GLsizei length, void *pointer); +GLAPI void APIENTRY glVertexArrayParameteriAPPLE (GLenum pname, GLint param); +#endif +#endif /* GL_APPLE_vertex_array_range */ + +#ifndef GL_APPLE_vertex_program_evaluators +#define GL_APPLE_vertex_program_evaluators 1 +#define GL_VERTEX_ATTRIB_MAP1_APPLE 0x8A00 +#define GL_VERTEX_ATTRIB_MAP2_APPLE 0x8A01 +#define GL_VERTEX_ATTRIB_MAP1_SIZE_APPLE 0x8A02 +#define GL_VERTEX_ATTRIB_MAP1_COEFF_APPLE 0x8A03 +#define GL_VERTEX_ATTRIB_MAP1_ORDER_APPLE 0x8A04 +#define GL_VERTEX_ATTRIB_MAP1_DOMAIN_APPLE 0x8A05 +#define GL_VERTEX_ATTRIB_MAP2_SIZE_APPLE 0x8A06 +#define GL_VERTEX_ATTRIB_MAP2_COEFF_APPLE 0x8A07 +#define GL_VERTEX_ATTRIB_MAP2_ORDER_APPLE 0x8A08 +#define GL_VERTEX_ATTRIB_MAP2_DOMAIN_APPLE 0x8A09 +typedef void (APIENTRYP PFNGLENABLEVERTEXATTRIBAPPLEPROC) (GLuint index, GLenum pname); +typedef void (APIENTRYP PFNGLDISABLEVERTEXATTRIBAPPLEPROC) (GLuint index, GLenum pname); +typedef GLboolean (APIENTRYP PFNGLISVERTEXATTRIBENABLEDAPPLEPROC) (GLuint index, GLenum pname); +typedef void (APIENTRYP PFNGLMAPVERTEXATTRIB1DAPPLEPROC) (GLuint index, GLuint size, GLdouble u1, GLdouble u2, GLint stride, GLint order, const GLdouble *points); +typedef void (APIENTRYP PFNGLMAPVERTEXATTRIB1FAPPLEPROC) (GLuint index, GLuint size, GLfloat u1, GLfloat u2, GLint stride, GLint order, const GLfloat *points); +typedef void (APIENTRYP PFNGLMAPVERTEXATTRIB2DAPPLEPROC) (GLuint index, GLuint size, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, const GLdouble *points); +typedef void (APIENTRYP PFNGLMAPVERTEXATTRIB2FAPPLEPROC) (GLuint index, GLuint size, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, const GLfloat *points); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glEnableVertexAttribAPPLE (GLuint index, GLenum pname); +GLAPI void APIENTRY glDisableVertexAttribAPPLE (GLuint index, GLenum pname); +GLAPI GLboolean APIENTRY glIsVertexAttribEnabledAPPLE (GLuint index, GLenum pname); +GLAPI void APIENTRY glMapVertexAttrib1dAPPLE (GLuint index, GLuint size, GLdouble u1, GLdouble u2, GLint stride, GLint order, const GLdouble *points); +GLAPI void APIENTRY glMapVertexAttrib1fAPPLE (GLuint index, GLuint size, GLfloat u1, GLfloat u2, GLint stride, GLint order, const GLfloat *points); +GLAPI void APIENTRY glMapVertexAttrib2dAPPLE (GLuint index, GLuint size, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, const GLdouble *points); +GLAPI void APIENTRY glMapVertexAttrib2fAPPLE (GLuint index, GLuint size, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, const GLfloat *points); +#endif +#endif /* GL_APPLE_vertex_program_evaluators */ + +#ifndef GL_APPLE_ycbcr_422 +#define GL_APPLE_ycbcr_422 1 +#define GL_YCBCR_422_APPLE 0x85B9 +#endif /* GL_APPLE_ycbcr_422 */ + +#ifndef GL_ATI_draw_buffers +#define GL_ATI_draw_buffers 1 +#define GL_MAX_DRAW_BUFFERS_ATI 0x8824 +#define GL_DRAW_BUFFER0_ATI 0x8825 +#define GL_DRAW_BUFFER1_ATI 0x8826 +#define GL_DRAW_BUFFER2_ATI 0x8827 +#define GL_DRAW_BUFFER3_ATI 0x8828 +#define GL_DRAW_BUFFER4_ATI 0x8829 +#define GL_DRAW_BUFFER5_ATI 0x882A +#define GL_DRAW_BUFFER6_ATI 0x882B +#define GL_DRAW_BUFFER7_ATI 0x882C +#define GL_DRAW_BUFFER8_ATI 0x882D +#define GL_DRAW_BUFFER9_ATI 0x882E +#define GL_DRAW_BUFFER10_ATI 0x882F +#define GL_DRAW_BUFFER11_ATI 0x8830 +#define GL_DRAW_BUFFER12_ATI 0x8831 +#define GL_DRAW_BUFFER13_ATI 0x8832 +#define GL_DRAW_BUFFER14_ATI 0x8833 +#define GL_DRAW_BUFFER15_ATI 0x8834 +typedef void (APIENTRYP PFNGLDRAWBUFFERSATIPROC) (GLsizei n, const GLenum *bufs); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glDrawBuffersATI (GLsizei n, const GLenum *bufs); +#endif +#endif /* GL_ATI_draw_buffers */ + +#ifndef GL_ATI_element_array +#define GL_ATI_element_array 1 +#define GL_ELEMENT_ARRAY_ATI 0x8768 +#define GL_ELEMENT_ARRAY_TYPE_ATI 0x8769 +#define GL_ELEMENT_ARRAY_POINTER_ATI 0x876A +typedef void (APIENTRYP PFNGLELEMENTPOINTERATIPROC) (GLenum type, const void *pointer); +typedef void (APIENTRYP PFNGLDRAWELEMENTARRAYATIPROC) (GLenum mode, GLsizei count); +typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTARRAYATIPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glElementPointerATI (GLenum type, const void *pointer); +GLAPI void APIENTRY glDrawElementArrayATI (GLenum mode, GLsizei count); +GLAPI void APIENTRY glDrawRangeElementArrayATI (GLenum mode, GLuint start, GLuint end, GLsizei count); +#endif +#endif /* GL_ATI_element_array */ + +#ifndef GL_ATI_envmap_bumpmap +#define GL_ATI_envmap_bumpmap 1 +#define GL_BUMP_ROT_MATRIX_ATI 0x8775 +#define GL_BUMP_ROT_MATRIX_SIZE_ATI 0x8776 +#define GL_BUMP_NUM_TEX_UNITS_ATI 0x8777 +#define GL_BUMP_TEX_UNITS_ATI 0x8778 +#define GL_DUDV_ATI 0x8779 +#define GL_DU8DV8_ATI 0x877A +#define GL_BUMP_ENVMAP_ATI 0x877B +#define GL_BUMP_TARGET_ATI 0x877C +typedef void (APIENTRYP PFNGLTEXBUMPPARAMETERIVATIPROC) (GLenum pname, const GLint *param); +typedef void (APIENTRYP PFNGLTEXBUMPPARAMETERFVATIPROC) (GLenum pname, const GLfloat *param); +typedef void (APIENTRYP PFNGLGETTEXBUMPPARAMETERIVATIPROC) (GLenum pname, GLint *param); +typedef void (APIENTRYP PFNGLGETTEXBUMPPARAMETERFVATIPROC) (GLenum pname, GLfloat *param); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glTexBumpParameterivATI (GLenum pname, const GLint *param); +GLAPI void APIENTRY glTexBumpParameterfvATI (GLenum pname, const GLfloat *param); +GLAPI void APIENTRY glGetTexBumpParameterivATI (GLenum pname, GLint *param); +GLAPI void APIENTRY glGetTexBumpParameterfvATI (GLenum pname, GLfloat *param); +#endif +#endif /* GL_ATI_envmap_bumpmap */ + +#ifndef GL_ATI_fragment_shader +#define GL_ATI_fragment_shader 1 +#define GL_FRAGMENT_SHADER_ATI 0x8920 +#define GL_REG_0_ATI 0x8921 +#define GL_REG_1_ATI 0x8922 +#define GL_REG_2_ATI 0x8923 +#define GL_REG_3_ATI 0x8924 +#define GL_REG_4_ATI 0x8925 +#define GL_REG_5_ATI 0x8926 +#define GL_REG_6_ATI 0x8927 +#define GL_REG_7_ATI 0x8928 +#define GL_REG_8_ATI 0x8929 +#define GL_REG_9_ATI 0x892A +#define GL_REG_10_ATI 0x892B +#define GL_REG_11_ATI 0x892C +#define GL_REG_12_ATI 0x892D +#define GL_REG_13_ATI 0x892E +#define GL_REG_14_ATI 0x892F +#define GL_REG_15_ATI 0x8930 +#define GL_REG_16_ATI 0x8931 +#define GL_REG_17_ATI 0x8932 +#define GL_REG_18_ATI 0x8933 +#define GL_REG_19_ATI 0x8934 +#define GL_REG_20_ATI 0x8935 +#define GL_REG_21_ATI 0x8936 +#define GL_REG_22_ATI 0x8937 +#define GL_REG_23_ATI 0x8938 +#define GL_REG_24_ATI 0x8939 +#define GL_REG_25_ATI 0x893A +#define GL_REG_26_ATI 0x893B +#define GL_REG_27_ATI 0x893C +#define GL_REG_28_ATI 0x893D +#define GL_REG_29_ATI 0x893E +#define GL_REG_30_ATI 0x893F +#define GL_REG_31_ATI 0x8940 +#define GL_CON_0_ATI 0x8941 +#define GL_CON_1_ATI 0x8942 +#define GL_CON_2_ATI 0x8943 +#define GL_CON_3_ATI 0x8944 +#define GL_CON_4_ATI 0x8945 +#define GL_CON_5_ATI 0x8946 +#define GL_CON_6_ATI 0x8947 +#define GL_CON_7_ATI 0x8948 +#define GL_CON_8_ATI 0x8949 +#define GL_CON_9_ATI 0x894A +#define GL_CON_10_ATI 0x894B +#define GL_CON_11_ATI 0x894C +#define GL_CON_12_ATI 0x894D +#define GL_CON_13_ATI 0x894E +#define GL_CON_14_ATI 0x894F +#define GL_CON_15_ATI 0x8950 +#define GL_CON_16_ATI 0x8951 +#define GL_CON_17_ATI 0x8952 +#define GL_CON_18_ATI 0x8953 +#define GL_CON_19_ATI 0x8954 +#define GL_CON_20_ATI 0x8955 +#define GL_CON_21_ATI 0x8956 +#define GL_CON_22_ATI 0x8957 +#define GL_CON_23_ATI 0x8958 +#define GL_CON_24_ATI 0x8959 +#define GL_CON_25_ATI 0x895A +#define GL_CON_26_ATI 0x895B +#define GL_CON_27_ATI 0x895C +#define GL_CON_28_ATI 0x895D +#define GL_CON_29_ATI 0x895E +#define GL_CON_30_ATI 0x895F +#define GL_CON_31_ATI 0x8960 +#define GL_MOV_ATI 0x8961 +#define GL_ADD_ATI 0x8963 +#define GL_MUL_ATI 0x8964 +#define GL_SUB_ATI 0x8965 +#define GL_DOT3_ATI 0x8966 +#define GL_DOT4_ATI 0x8967 +#define GL_MAD_ATI 0x8968 +#define GL_LERP_ATI 0x8969 +#define GL_CND_ATI 0x896A +#define GL_CND0_ATI 0x896B +#define GL_DOT2_ADD_ATI 0x896C +#define GL_SECONDARY_INTERPOLATOR_ATI 0x896D +#define GL_NUM_FRAGMENT_REGISTERS_ATI 0x896E +#define GL_NUM_FRAGMENT_CONSTANTS_ATI 0x896F +#define GL_NUM_PASSES_ATI 0x8970 +#define GL_NUM_INSTRUCTIONS_PER_PASS_ATI 0x8971 +#define GL_NUM_INSTRUCTIONS_TOTAL_ATI 0x8972 +#define GL_NUM_INPUT_INTERPOLATOR_COMPONENTS_ATI 0x8973 +#define GL_NUM_LOOPBACK_COMPONENTS_ATI 0x8974 +#define GL_COLOR_ALPHA_PAIRING_ATI 0x8975 +#define GL_SWIZZLE_STR_ATI 0x8976 +#define GL_SWIZZLE_STQ_ATI 0x8977 +#define GL_SWIZZLE_STR_DR_ATI 0x8978 +#define GL_SWIZZLE_STQ_DQ_ATI 0x8979 +#define GL_SWIZZLE_STRQ_ATI 0x897A +#define GL_SWIZZLE_STRQ_DQ_ATI 0x897B +#define GL_RED_BIT_ATI 0x00000001 +#define GL_GREEN_BIT_ATI 0x00000002 +#define GL_BLUE_BIT_ATI 0x00000004 +#define GL_2X_BIT_ATI 0x00000001 +#define GL_4X_BIT_ATI 0x00000002 +#define GL_8X_BIT_ATI 0x00000004 +#define GL_HALF_BIT_ATI 0x00000008 +#define GL_QUARTER_BIT_ATI 0x00000010 +#define GL_EIGHTH_BIT_ATI 0x00000020 +#define GL_SATURATE_BIT_ATI 0x00000040 +#define GL_COMP_BIT_ATI 0x00000002 +#define GL_NEGATE_BIT_ATI 0x00000004 +#define GL_BIAS_BIT_ATI 0x00000008 +typedef GLuint (APIENTRYP PFNGLGENFRAGMENTSHADERSATIPROC) (GLuint range); +typedef void (APIENTRYP PFNGLBINDFRAGMENTSHADERATIPROC) (GLuint id); +typedef void (APIENTRYP PFNGLDELETEFRAGMENTSHADERATIPROC) (GLuint id); +typedef void (APIENTRYP PFNGLBEGINFRAGMENTSHADERATIPROC) (void); +typedef void (APIENTRYP PFNGLENDFRAGMENTSHADERATIPROC) (void); +typedef void (APIENTRYP PFNGLPASSTEXCOORDATIPROC) (GLuint dst, GLuint coord, GLenum swizzle); +typedef void (APIENTRYP PFNGLSAMPLEMAPATIPROC) (GLuint dst, GLuint interp, GLenum swizzle); +typedef void (APIENTRYP PFNGLCOLORFRAGMENTOP1ATIPROC) (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod); +typedef void (APIENTRYP PFNGLCOLORFRAGMENTOP2ATIPROC) (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod); +typedef void (APIENTRYP PFNGLCOLORFRAGMENTOP3ATIPROC) (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod); +typedef void (APIENTRYP PFNGLALPHAFRAGMENTOP1ATIPROC) (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod); +typedef void (APIENTRYP PFNGLALPHAFRAGMENTOP2ATIPROC) (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod); +typedef void (APIENTRYP PFNGLALPHAFRAGMENTOP3ATIPROC) (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod); +typedef void (APIENTRYP PFNGLSETFRAGMENTSHADERCONSTANTATIPROC) (GLuint dst, const GLfloat *value); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI GLuint APIENTRY glGenFragmentShadersATI (GLuint range); +GLAPI void APIENTRY glBindFragmentShaderATI (GLuint id); +GLAPI void APIENTRY glDeleteFragmentShaderATI (GLuint id); +GLAPI void APIENTRY glBeginFragmentShaderATI (void); +GLAPI void APIENTRY glEndFragmentShaderATI (void); +GLAPI void APIENTRY glPassTexCoordATI (GLuint dst, GLuint coord, GLenum swizzle); +GLAPI void APIENTRY glSampleMapATI (GLuint dst, GLuint interp, GLenum swizzle); +GLAPI void APIENTRY glColorFragmentOp1ATI (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod); +GLAPI void APIENTRY glColorFragmentOp2ATI (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod); +GLAPI void APIENTRY glColorFragmentOp3ATI (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod); +GLAPI void APIENTRY glAlphaFragmentOp1ATI (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod); +GLAPI void APIENTRY glAlphaFragmentOp2ATI (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod); +GLAPI void APIENTRY glAlphaFragmentOp3ATI (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod); +GLAPI void APIENTRY glSetFragmentShaderConstantATI (GLuint dst, const GLfloat *value); +#endif +#endif /* GL_ATI_fragment_shader */ + +#ifndef GL_ATI_map_object_buffer +#define GL_ATI_map_object_buffer 1 +typedef void *(APIENTRYP PFNGLMAPOBJECTBUFFERATIPROC) (GLuint buffer); +typedef void (APIENTRYP PFNGLUNMAPOBJECTBUFFERATIPROC) (GLuint buffer); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void *APIENTRY glMapObjectBufferATI (GLuint buffer); +GLAPI void APIENTRY glUnmapObjectBufferATI (GLuint buffer); +#endif +#endif /* GL_ATI_map_object_buffer */ + +#ifndef GL_ATI_meminfo +#define GL_ATI_meminfo 1 +#define GL_VBO_FREE_MEMORY_ATI 0x87FB +#define GL_TEXTURE_FREE_MEMORY_ATI 0x87FC +#define GL_RENDERBUFFER_FREE_MEMORY_ATI 0x87FD +#endif /* GL_ATI_meminfo */ + +#ifndef GL_ATI_pixel_format_float +#define GL_ATI_pixel_format_float 1 +#define GL_RGBA_FLOAT_MODE_ATI 0x8820 +#define GL_COLOR_CLEAR_UNCLAMPED_VALUE_ATI 0x8835 +#endif /* GL_ATI_pixel_format_float */ + +#ifndef GL_ATI_pn_triangles +#define GL_ATI_pn_triangles 1 +#define GL_PN_TRIANGLES_ATI 0x87F0 +#define GL_MAX_PN_TRIANGLES_TESSELATION_LEVEL_ATI 0x87F1 +#define GL_PN_TRIANGLES_POINT_MODE_ATI 0x87F2 +#define GL_PN_TRIANGLES_NORMAL_MODE_ATI 0x87F3 +#define GL_PN_TRIANGLES_TESSELATION_LEVEL_ATI 0x87F4 +#define GL_PN_TRIANGLES_POINT_MODE_LINEAR_ATI 0x87F5 +#define GL_PN_TRIANGLES_POINT_MODE_CUBIC_ATI 0x87F6 +#define GL_PN_TRIANGLES_NORMAL_MODE_LINEAR_ATI 0x87F7 +#define GL_PN_TRIANGLES_NORMAL_MODE_QUADRATIC_ATI 0x87F8 +typedef void (APIENTRYP PFNGLPNTRIANGLESIATIPROC) (GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLPNTRIANGLESFATIPROC) (GLenum pname, GLfloat param); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glPNTrianglesiATI (GLenum pname, GLint param); +GLAPI void APIENTRY glPNTrianglesfATI (GLenum pname, GLfloat param); +#endif +#endif /* GL_ATI_pn_triangles */ + +#ifndef GL_ATI_separate_stencil +#define GL_ATI_separate_stencil 1 +#define GL_STENCIL_BACK_FUNC_ATI 0x8800 +#define GL_STENCIL_BACK_FAIL_ATI 0x8801 +#define GL_STENCIL_BACK_PASS_DEPTH_FAIL_ATI 0x8802 +#define GL_STENCIL_BACK_PASS_DEPTH_PASS_ATI 0x8803 +typedef void (APIENTRYP PFNGLSTENCILOPSEPARATEATIPROC) (GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass); +typedef void (APIENTRYP PFNGLSTENCILFUNCSEPARATEATIPROC) (GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glStencilOpSeparateATI (GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass); +GLAPI void APIENTRY glStencilFuncSeparateATI (GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask); +#endif +#endif /* GL_ATI_separate_stencil */ + +#ifndef GL_ATI_text_fragment_shader +#define GL_ATI_text_fragment_shader 1 +#define GL_TEXT_FRAGMENT_SHADER_ATI 0x8200 +#endif /* GL_ATI_text_fragment_shader */ + +#ifndef GL_ATI_texture_env_combine3 +#define GL_ATI_texture_env_combine3 1 +#define GL_MODULATE_ADD_ATI 0x8744 +#define GL_MODULATE_SIGNED_ADD_ATI 0x8745 +#define GL_MODULATE_SUBTRACT_ATI 0x8746 +#endif /* GL_ATI_texture_env_combine3 */ + +#ifndef GL_ATI_texture_float +#define GL_ATI_texture_float 1 +#define GL_RGBA_FLOAT32_ATI 0x8814 +#define GL_RGB_FLOAT32_ATI 0x8815 +#define GL_ALPHA_FLOAT32_ATI 0x8816 +#define GL_INTENSITY_FLOAT32_ATI 0x8817 +#define GL_LUMINANCE_FLOAT32_ATI 0x8818 +#define GL_LUMINANCE_ALPHA_FLOAT32_ATI 0x8819 +#define GL_RGBA_FLOAT16_ATI 0x881A +#define GL_RGB_FLOAT16_ATI 0x881B +#define GL_ALPHA_FLOAT16_ATI 0x881C +#define GL_INTENSITY_FLOAT16_ATI 0x881D +#define GL_LUMINANCE_FLOAT16_ATI 0x881E +#define GL_LUMINANCE_ALPHA_FLOAT16_ATI 0x881F +#endif /* GL_ATI_texture_float */ + +#ifndef GL_ATI_texture_mirror_once +#define GL_ATI_texture_mirror_once 1 +#define GL_MIRROR_CLAMP_ATI 0x8742 +#define GL_MIRROR_CLAMP_TO_EDGE_ATI 0x8743 +#endif /* GL_ATI_texture_mirror_once */ + +#ifndef GL_ATI_vertex_array_object +#define GL_ATI_vertex_array_object 1 +#define GL_STATIC_ATI 0x8760 +#define GL_DYNAMIC_ATI 0x8761 +#define GL_PRESERVE_ATI 0x8762 +#define GL_DISCARD_ATI 0x8763 +#define GL_OBJECT_BUFFER_SIZE_ATI 0x8764 +#define GL_OBJECT_BUFFER_USAGE_ATI 0x8765 +#define GL_ARRAY_OBJECT_BUFFER_ATI 0x8766 +#define GL_ARRAY_OBJECT_OFFSET_ATI 0x8767 +typedef GLuint (APIENTRYP PFNGLNEWOBJECTBUFFERATIPROC) (GLsizei size, const void *pointer, GLenum usage); +typedef GLboolean (APIENTRYP PFNGLISOBJECTBUFFERATIPROC) (GLuint buffer); +typedef void (APIENTRYP PFNGLUPDATEOBJECTBUFFERATIPROC) (GLuint buffer, GLuint offset, GLsizei size, const void *pointer, GLenum preserve); +typedef void (APIENTRYP PFNGLGETOBJECTBUFFERFVATIPROC) (GLuint buffer, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETOBJECTBUFFERIVATIPROC) (GLuint buffer, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLFREEOBJECTBUFFERATIPROC) (GLuint buffer); +typedef void (APIENTRYP PFNGLARRAYOBJECTATIPROC) (GLenum array, GLint size, GLenum type, GLsizei stride, GLuint buffer, GLuint offset); +typedef void (APIENTRYP PFNGLGETARRAYOBJECTFVATIPROC) (GLenum array, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETARRAYOBJECTIVATIPROC) (GLenum array, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLVARIANTARRAYOBJECTATIPROC) (GLuint id, GLenum type, GLsizei stride, GLuint buffer, GLuint offset); +typedef void (APIENTRYP PFNGLGETVARIANTARRAYOBJECTFVATIPROC) (GLuint id, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETVARIANTARRAYOBJECTIVATIPROC) (GLuint id, GLenum pname, GLint *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI GLuint APIENTRY glNewObjectBufferATI (GLsizei size, const void *pointer, GLenum usage); +GLAPI GLboolean APIENTRY glIsObjectBufferATI (GLuint buffer); +GLAPI void APIENTRY glUpdateObjectBufferATI (GLuint buffer, GLuint offset, GLsizei size, const void *pointer, GLenum preserve); +GLAPI void APIENTRY glGetObjectBufferfvATI (GLuint buffer, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetObjectBufferivATI (GLuint buffer, GLenum pname, GLint *params); +GLAPI void APIENTRY glFreeObjectBufferATI (GLuint buffer); +GLAPI void APIENTRY glArrayObjectATI (GLenum array, GLint size, GLenum type, GLsizei stride, GLuint buffer, GLuint offset); +GLAPI void APIENTRY glGetArrayObjectfvATI (GLenum array, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetArrayObjectivATI (GLenum array, GLenum pname, GLint *params); +GLAPI void APIENTRY glVariantArrayObjectATI (GLuint id, GLenum type, GLsizei stride, GLuint buffer, GLuint offset); +GLAPI void APIENTRY glGetVariantArrayObjectfvATI (GLuint id, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetVariantArrayObjectivATI (GLuint id, GLenum pname, GLint *params); +#endif +#endif /* GL_ATI_vertex_array_object */ + +#ifndef GL_ATI_vertex_attrib_array_object +#define GL_ATI_vertex_attrib_array_object 1 +typedef void (APIENTRYP PFNGLVERTEXATTRIBARRAYOBJECTATIPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, GLuint buffer, GLuint offset); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBARRAYOBJECTFVATIPROC) (GLuint index, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBARRAYOBJECTIVATIPROC) (GLuint index, GLenum pname, GLint *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glVertexAttribArrayObjectATI (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, GLuint buffer, GLuint offset); +GLAPI void APIENTRY glGetVertexAttribArrayObjectfvATI (GLuint index, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetVertexAttribArrayObjectivATI (GLuint index, GLenum pname, GLint *params); +#endif +#endif /* GL_ATI_vertex_attrib_array_object */ + +#ifndef GL_ATI_vertex_streams +#define GL_ATI_vertex_streams 1 +#define GL_MAX_VERTEX_STREAMS_ATI 0x876B +#define GL_VERTEX_STREAM0_ATI 0x876C +#define GL_VERTEX_STREAM1_ATI 0x876D +#define GL_VERTEX_STREAM2_ATI 0x876E +#define GL_VERTEX_STREAM3_ATI 0x876F +#define GL_VERTEX_STREAM4_ATI 0x8770 +#define GL_VERTEX_STREAM5_ATI 0x8771 +#define GL_VERTEX_STREAM6_ATI 0x8772 +#define GL_VERTEX_STREAM7_ATI 0x8773 +#define GL_VERTEX_SOURCE_ATI 0x8774 +typedef void (APIENTRYP PFNGLVERTEXSTREAM1SATIPROC) (GLenum stream, GLshort x); +typedef void (APIENTRYP PFNGLVERTEXSTREAM1SVATIPROC) (GLenum stream, const GLshort *coords); +typedef void (APIENTRYP PFNGLVERTEXSTREAM1IATIPROC) (GLenum stream, GLint x); +typedef void (APIENTRYP PFNGLVERTEXSTREAM1IVATIPROC) (GLenum stream, const GLint *coords); +typedef void (APIENTRYP PFNGLVERTEXSTREAM1FATIPROC) (GLenum stream, GLfloat x); +typedef void (APIENTRYP PFNGLVERTEXSTREAM1FVATIPROC) (GLenum stream, const GLfloat *coords); +typedef void (APIENTRYP PFNGLVERTEXSTREAM1DATIPROC) (GLenum stream, GLdouble x); +typedef void (APIENTRYP PFNGLVERTEXSTREAM1DVATIPROC) (GLenum stream, const GLdouble *coords); +typedef void (APIENTRYP PFNGLVERTEXSTREAM2SATIPROC) (GLenum stream, GLshort x, GLshort y); +typedef void (APIENTRYP PFNGLVERTEXSTREAM2SVATIPROC) (GLenum stream, const GLshort *coords); +typedef void (APIENTRYP PFNGLVERTEXSTREAM2IATIPROC) (GLenum stream, GLint x, GLint y); +typedef void (APIENTRYP PFNGLVERTEXSTREAM2IVATIPROC) (GLenum stream, const GLint *coords); +typedef void (APIENTRYP PFNGLVERTEXSTREAM2FATIPROC) (GLenum stream, GLfloat x, GLfloat y); +typedef void (APIENTRYP PFNGLVERTEXSTREAM2FVATIPROC) (GLenum stream, const GLfloat *coords); +typedef void (APIENTRYP PFNGLVERTEXSTREAM2DATIPROC) (GLenum stream, GLdouble x, GLdouble y); +typedef void (APIENTRYP PFNGLVERTEXSTREAM2DVATIPROC) (GLenum stream, const GLdouble *coords); +typedef void (APIENTRYP PFNGLVERTEXSTREAM3SATIPROC) (GLenum stream, GLshort x, GLshort y, GLshort z); +typedef void (APIENTRYP PFNGLVERTEXSTREAM3SVATIPROC) (GLenum stream, const GLshort *coords); +typedef void (APIENTRYP PFNGLVERTEXSTREAM3IATIPROC) (GLenum stream, GLint x, GLint y, GLint z); +typedef void (APIENTRYP PFNGLVERTEXSTREAM3IVATIPROC) (GLenum stream, const GLint *coords); +typedef void (APIENTRYP PFNGLVERTEXSTREAM3FATIPROC) (GLenum stream, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLVERTEXSTREAM3FVATIPROC) (GLenum stream, const GLfloat *coords); +typedef void (APIENTRYP PFNGLVERTEXSTREAM3DATIPROC) (GLenum stream, GLdouble x, GLdouble y, GLdouble z); +typedef void (APIENTRYP PFNGLVERTEXSTREAM3DVATIPROC) (GLenum stream, const GLdouble *coords); +typedef void (APIENTRYP PFNGLVERTEXSTREAM4SATIPROC) (GLenum stream, GLshort x, GLshort y, GLshort z, GLshort w); +typedef void (APIENTRYP PFNGLVERTEXSTREAM4SVATIPROC) (GLenum stream, const GLshort *coords); +typedef void (APIENTRYP PFNGLVERTEXSTREAM4IATIPROC) (GLenum stream, GLint x, GLint y, GLint z, GLint w); +typedef void (APIENTRYP PFNGLVERTEXSTREAM4IVATIPROC) (GLenum stream, const GLint *coords); +typedef void (APIENTRYP PFNGLVERTEXSTREAM4FATIPROC) (GLenum stream, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (APIENTRYP PFNGLVERTEXSTREAM4FVATIPROC) (GLenum stream, const GLfloat *coords); +typedef void (APIENTRYP PFNGLVERTEXSTREAM4DATIPROC) (GLenum stream, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (APIENTRYP PFNGLVERTEXSTREAM4DVATIPROC) (GLenum stream, const GLdouble *coords); +typedef void (APIENTRYP PFNGLNORMALSTREAM3BATIPROC) (GLenum stream, GLbyte nx, GLbyte ny, GLbyte nz); +typedef void (APIENTRYP PFNGLNORMALSTREAM3BVATIPROC) (GLenum stream, const GLbyte *coords); +typedef void (APIENTRYP PFNGLNORMALSTREAM3SATIPROC) (GLenum stream, GLshort nx, GLshort ny, GLshort nz); +typedef void (APIENTRYP PFNGLNORMALSTREAM3SVATIPROC) (GLenum stream, const GLshort *coords); +typedef void (APIENTRYP PFNGLNORMALSTREAM3IATIPROC) (GLenum stream, GLint nx, GLint ny, GLint nz); +typedef void (APIENTRYP PFNGLNORMALSTREAM3IVATIPROC) (GLenum stream, const GLint *coords); +typedef void (APIENTRYP PFNGLNORMALSTREAM3FATIPROC) (GLenum stream, GLfloat nx, GLfloat ny, GLfloat nz); +typedef void (APIENTRYP PFNGLNORMALSTREAM3FVATIPROC) (GLenum stream, const GLfloat *coords); +typedef void (APIENTRYP PFNGLNORMALSTREAM3DATIPROC) (GLenum stream, GLdouble nx, GLdouble ny, GLdouble nz); +typedef void (APIENTRYP PFNGLNORMALSTREAM3DVATIPROC) (GLenum stream, const GLdouble *coords); +typedef void (APIENTRYP PFNGLCLIENTACTIVEVERTEXSTREAMATIPROC) (GLenum stream); +typedef void (APIENTRYP PFNGLVERTEXBLENDENVIATIPROC) (GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLVERTEXBLENDENVFATIPROC) (GLenum pname, GLfloat param); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glVertexStream1sATI (GLenum stream, GLshort x); +GLAPI void APIENTRY glVertexStream1svATI (GLenum stream, const GLshort *coords); +GLAPI void APIENTRY glVertexStream1iATI (GLenum stream, GLint x); +GLAPI void APIENTRY glVertexStream1ivATI (GLenum stream, const GLint *coords); +GLAPI void APIENTRY glVertexStream1fATI (GLenum stream, GLfloat x); +GLAPI void APIENTRY glVertexStream1fvATI (GLenum stream, const GLfloat *coords); +GLAPI void APIENTRY glVertexStream1dATI (GLenum stream, GLdouble x); +GLAPI void APIENTRY glVertexStream1dvATI (GLenum stream, const GLdouble *coords); +GLAPI void APIENTRY glVertexStream2sATI (GLenum stream, GLshort x, GLshort y); +GLAPI void APIENTRY glVertexStream2svATI (GLenum stream, const GLshort *coords); +GLAPI void APIENTRY glVertexStream2iATI (GLenum stream, GLint x, GLint y); +GLAPI void APIENTRY glVertexStream2ivATI (GLenum stream, const GLint *coords); +GLAPI void APIENTRY glVertexStream2fATI (GLenum stream, GLfloat x, GLfloat y); +GLAPI void APIENTRY glVertexStream2fvATI (GLenum stream, const GLfloat *coords); +GLAPI void APIENTRY glVertexStream2dATI (GLenum stream, GLdouble x, GLdouble y); +GLAPI void APIENTRY glVertexStream2dvATI (GLenum stream, const GLdouble *coords); +GLAPI void APIENTRY glVertexStream3sATI (GLenum stream, GLshort x, GLshort y, GLshort z); +GLAPI void APIENTRY glVertexStream3svATI (GLenum stream, const GLshort *coords); +GLAPI void APIENTRY glVertexStream3iATI (GLenum stream, GLint x, GLint y, GLint z); +GLAPI void APIENTRY glVertexStream3ivATI (GLenum stream, const GLint *coords); +GLAPI void APIENTRY glVertexStream3fATI (GLenum stream, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glVertexStream3fvATI (GLenum stream, const GLfloat *coords); +GLAPI void APIENTRY glVertexStream3dATI (GLenum stream, GLdouble x, GLdouble y, GLdouble z); +GLAPI void APIENTRY glVertexStream3dvATI (GLenum stream, const GLdouble *coords); +GLAPI void APIENTRY glVertexStream4sATI (GLenum stream, GLshort x, GLshort y, GLshort z, GLshort w); +GLAPI void APIENTRY glVertexStream4svATI (GLenum stream, const GLshort *coords); +GLAPI void APIENTRY glVertexStream4iATI (GLenum stream, GLint x, GLint y, GLint z, GLint w); +GLAPI void APIENTRY glVertexStream4ivATI (GLenum stream, const GLint *coords); +GLAPI void APIENTRY glVertexStream4fATI (GLenum stream, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +GLAPI void APIENTRY glVertexStream4fvATI (GLenum stream, const GLfloat *coords); +GLAPI void APIENTRY glVertexStream4dATI (GLenum stream, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +GLAPI void APIENTRY glVertexStream4dvATI (GLenum stream, const GLdouble *coords); +GLAPI void APIENTRY glNormalStream3bATI (GLenum stream, GLbyte nx, GLbyte ny, GLbyte nz); +GLAPI void APIENTRY glNormalStream3bvATI (GLenum stream, const GLbyte *coords); +GLAPI void APIENTRY glNormalStream3sATI (GLenum stream, GLshort nx, GLshort ny, GLshort nz); +GLAPI void APIENTRY glNormalStream3svATI (GLenum stream, const GLshort *coords); +GLAPI void APIENTRY glNormalStream3iATI (GLenum stream, GLint nx, GLint ny, GLint nz); +GLAPI void APIENTRY glNormalStream3ivATI (GLenum stream, const GLint *coords); +GLAPI void APIENTRY glNormalStream3fATI (GLenum stream, GLfloat nx, GLfloat ny, GLfloat nz); +GLAPI void APIENTRY glNormalStream3fvATI (GLenum stream, const GLfloat *coords); +GLAPI void APIENTRY glNormalStream3dATI (GLenum stream, GLdouble nx, GLdouble ny, GLdouble nz); +GLAPI void APIENTRY glNormalStream3dvATI (GLenum stream, const GLdouble *coords); +GLAPI void APIENTRY glClientActiveVertexStreamATI (GLenum stream); +GLAPI void APIENTRY glVertexBlendEnviATI (GLenum pname, GLint param); +GLAPI void APIENTRY glVertexBlendEnvfATI (GLenum pname, GLfloat param); +#endif +#endif /* GL_ATI_vertex_streams */ + +#ifndef GL_EXT_422_pixels +#define GL_EXT_422_pixels 1 +#define GL_422_EXT 0x80CC +#define GL_422_REV_EXT 0x80CD +#define GL_422_AVERAGE_EXT 0x80CE +#define GL_422_REV_AVERAGE_EXT 0x80CF +#endif /* GL_EXT_422_pixels */ + +#ifndef GL_EXT_EGL_image_storage +#define GL_EXT_EGL_image_storage 1 +typedef void *GLeglImageOES; +typedef void (APIENTRYP PFNGLEGLIMAGETARGETTEXSTORAGEEXTPROC) (GLenum target, GLeglImageOES image, const GLint* attrib_list); +typedef void (APIENTRYP PFNGLEGLIMAGETARGETTEXTURESTORAGEEXTPROC) (GLuint texture, GLeglImageOES image, const GLint* attrib_list); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glEGLImageTargetTexStorageEXT (GLenum target, GLeglImageOES image, const GLint* attrib_list); +GLAPI void APIENTRY glEGLImageTargetTextureStorageEXT (GLuint texture, GLeglImageOES image, const GLint* attrib_list); +#endif +#endif /* GL_EXT_EGL_image_storage */ + +#ifndef GL_EXT_EGL_sync +#define GL_EXT_EGL_sync 1 +#endif /* GL_EXT_EGL_sync */ + +#ifndef GL_EXT_abgr +#define GL_EXT_abgr 1 +#define GL_ABGR_EXT 0x8000 +#endif /* GL_EXT_abgr */ + +#ifndef GL_EXT_bgra +#define GL_EXT_bgra 1 +#define GL_BGR_EXT 0x80E0 +#define GL_BGRA_EXT 0x80E1 +#endif /* GL_EXT_bgra */ + +#ifndef GL_EXT_bindable_uniform +#define GL_EXT_bindable_uniform 1 +#define GL_MAX_VERTEX_BINDABLE_UNIFORMS_EXT 0x8DE2 +#define GL_MAX_FRAGMENT_BINDABLE_UNIFORMS_EXT 0x8DE3 +#define GL_MAX_GEOMETRY_BINDABLE_UNIFORMS_EXT 0x8DE4 +#define GL_MAX_BINDABLE_UNIFORM_SIZE_EXT 0x8DED +#define GL_UNIFORM_BUFFER_EXT 0x8DEE +#define GL_UNIFORM_BUFFER_BINDING_EXT 0x8DEF +typedef void (APIENTRYP PFNGLUNIFORMBUFFEREXTPROC) (GLuint program, GLint location, GLuint buffer); +typedef GLint (APIENTRYP PFNGLGETUNIFORMBUFFERSIZEEXTPROC) (GLuint program, GLint location); +typedef GLintptr (APIENTRYP PFNGLGETUNIFORMOFFSETEXTPROC) (GLuint program, GLint location); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glUniformBufferEXT (GLuint program, GLint location, GLuint buffer); +GLAPI GLint APIENTRY glGetUniformBufferSizeEXT (GLuint program, GLint location); +GLAPI GLintptr APIENTRY glGetUniformOffsetEXT (GLuint program, GLint location); +#endif +#endif /* GL_EXT_bindable_uniform */ + +#ifndef GL_EXT_blend_color +#define GL_EXT_blend_color 1 +#define GL_CONSTANT_COLOR_EXT 0x8001 +#define GL_ONE_MINUS_CONSTANT_COLOR_EXT 0x8002 +#define GL_CONSTANT_ALPHA_EXT 0x8003 +#define GL_ONE_MINUS_CONSTANT_ALPHA_EXT 0x8004 +#define GL_BLEND_COLOR_EXT 0x8005 +typedef void (APIENTRYP PFNGLBLENDCOLOREXTPROC) (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBlendColorEXT (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); +#endif +#endif /* GL_EXT_blend_color */ + +#ifndef GL_EXT_blend_equation_separate +#define GL_EXT_blend_equation_separate 1 +#define GL_BLEND_EQUATION_RGB_EXT 0x8009 +#define GL_BLEND_EQUATION_ALPHA_EXT 0x883D +typedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEEXTPROC) (GLenum modeRGB, GLenum modeAlpha); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBlendEquationSeparateEXT (GLenum modeRGB, GLenum modeAlpha); +#endif +#endif /* GL_EXT_blend_equation_separate */ + +#ifndef GL_EXT_blend_func_separate +#define GL_EXT_blend_func_separate 1 +#define GL_BLEND_DST_RGB_EXT 0x80C8 +#define GL_BLEND_SRC_RGB_EXT 0x80C9 +#define GL_BLEND_DST_ALPHA_EXT 0x80CA +#define GL_BLEND_SRC_ALPHA_EXT 0x80CB +typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEEXTPROC) (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBlendFuncSeparateEXT (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); +#endif +#endif /* GL_EXT_blend_func_separate */ + +#ifndef GL_EXT_blend_logic_op +#define GL_EXT_blend_logic_op 1 +#endif /* GL_EXT_blend_logic_op */ + +#ifndef GL_EXT_blend_minmax +#define GL_EXT_blend_minmax 1 +#define GL_MIN_EXT 0x8007 +#define GL_MAX_EXT 0x8008 +#define GL_FUNC_ADD_EXT 0x8006 +#define GL_BLEND_EQUATION_EXT 0x8009 +typedef void (APIENTRYP PFNGLBLENDEQUATIONEXTPROC) (GLenum mode); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBlendEquationEXT (GLenum mode); +#endif +#endif /* GL_EXT_blend_minmax */ + +#ifndef GL_EXT_blend_subtract +#define GL_EXT_blend_subtract 1 +#define GL_FUNC_SUBTRACT_EXT 0x800A +#define GL_FUNC_REVERSE_SUBTRACT_EXT 0x800B +#endif /* GL_EXT_blend_subtract */ + +#ifndef GL_EXT_clip_volume_hint +#define GL_EXT_clip_volume_hint 1 +#define GL_CLIP_VOLUME_CLIPPING_HINT_EXT 0x80F0 +#endif /* GL_EXT_clip_volume_hint */ + +#ifndef GL_EXT_cmyka +#define GL_EXT_cmyka 1 +#define GL_CMYK_EXT 0x800C +#define GL_CMYKA_EXT 0x800D +#define GL_PACK_CMYK_HINT_EXT 0x800E +#define GL_UNPACK_CMYK_HINT_EXT 0x800F +#endif /* GL_EXT_cmyka */ + +#ifndef GL_EXT_color_subtable +#define GL_EXT_color_subtable 1 +typedef void (APIENTRYP PFNGLCOLORSUBTABLEEXTPROC) (GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const void *data); +typedef void (APIENTRYP PFNGLCOPYCOLORSUBTABLEEXTPROC) (GLenum target, GLsizei start, GLint x, GLint y, GLsizei width); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glColorSubTableEXT (GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const void *data); +GLAPI void APIENTRY glCopyColorSubTableEXT (GLenum target, GLsizei start, GLint x, GLint y, GLsizei width); +#endif +#endif /* GL_EXT_color_subtable */ + +#ifndef GL_EXT_compiled_vertex_array +#define GL_EXT_compiled_vertex_array 1 +#define GL_ARRAY_ELEMENT_LOCK_FIRST_EXT 0x81A8 +#define GL_ARRAY_ELEMENT_LOCK_COUNT_EXT 0x81A9 +typedef void (APIENTRYP PFNGLLOCKARRAYSEXTPROC) (GLint first, GLsizei count); +typedef void (APIENTRYP PFNGLUNLOCKARRAYSEXTPROC) (void); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glLockArraysEXT (GLint first, GLsizei count); +GLAPI void APIENTRY glUnlockArraysEXT (void); +#endif +#endif /* GL_EXT_compiled_vertex_array */ + +#ifndef GL_EXT_convolution +#define GL_EXT_convolution 1 +#define GL_CONVOLUTION_1D_EXT 0x8010 +#define GL_CONVOLUTION_2D_EXT 0x8011 +#define GL_SEPARABLE_2D_EXT 0x8012 +#define GL_CONVOLUTION_BORDER_MODE_EXT 0x8013 +#define GL_CONVOLUTION_FILTER_SCALE_EXT 0x8014 +#define GL_CONVOLUTION_FILTER_BIAS_EXT 0x8015 +#define GL_REDUCE_EXT 0x8016 +#define GL_CONVOLUTION_FORMAT_EXT 0x8017 +#define GL_CONVOLUTION_WIDTH_EXT 0x8018 +#define GL_CONVOLUTION_HEIGHT_EXT 0x8019 +#define GL_MAX_CONVOLUTION_WIDTH_EXT 0x801A +#define GL_MAX_CONVOLUTION_HEIGHT_EXT 0x801B +#define GL_POST_CONVOLUTION_RED_SCALE_EXT 0x801C +#define GL_POST_CONVOLUTION_GREEN_SCALE_EXT 0x801D +#define GL_POST_CONVOLUTION_BLUE_SCALE_EXT 0x801E +#define GL_POST_CONVOLUTION_ALPHA_SCALE_EXT 0x801F +#define GL_POST_CONVOLUTION_RED_BIAS_EXT 0x8020 +#define GL_POST_CONVOLUTION_GREEN_BIAS_EXT 0x8021 +#define GL_POST_CONVOLUTION_BLUE_BIAS_EXT 0x8022 +#define GL_POST_CONVOLUTION_ALPHA_BIAS_EXT 0x8023 +typedef void (APIENTRYP PFNGLCONVOLUTIONFILTER1DEXTPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const void *image); +typedef void (APIENTRYP PFNGLCONVOLUTIONFILTER2DEXTPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *image); +typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERFEXTPROC) (GLenum target, GLenum pname, GLfloat params); +typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERFVEXTPROC) (GLenum target, GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERIEXTPROC) (GLenum target, GLenum pname, GLint params); +typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERIVEXTPROC) (GLenum target, GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLCOPYCONVOLUTIONFILTER1DEXTPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); +typedef void (APIENTRYP PFNGLCOPYCONVOLUTIONFILTER2DEXTPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height); +typedef void (APIENTRYP PFNGLGETCONVOLUTIONFILTEREXTPROC) (GLenum target, GLenum format, GLenum type, void *image); +typedef void (APIENTRYP PFNGLGETCONVOLUTIONPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETCONVOLUTIONPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETSEPARABLEFILTEREXTPROC) (GLenum target, GLenum format, GLenum type, void *row, void *column, void *span); +typedef void (APIENTRYP PFNGLSEPARABLEFILTER2DEXTPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *row, const void *column); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glConvolutionFilter1DEXT (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const void *image); +GLAPI void APIENTRY glConvolutionFilter2DEXT (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *image); +GLAPI void APIENTRY glConvolutionParameterfEXT (GLenum target, GLenum pname, GLfloat params); +GLAPI void APIENTRY glConvolutionParameterfvEXT (GLenum target, GLenum pname, const GLfloat *params); +GLAPI void APIENTRY glConvolutionParameteriEXT (GLenum target, GLenum pname, GLint params); +GLAPI void APIENTRY glConvolutionParameterivEXT (GLenum target, GLenum pname, const GLint *params); +GLAPI void APIENTRY glCopyConvolutionFilter1DEXT (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); +GLAPI void APIENTRY glCopyConvolutionFilter2DEXT (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height); +GLAPI void APIENTRY glGetConvolutionFilterEXT (GLenum target, GLenum format, GLenum type, void *image); +GLAPI void APIENTRY glGetConvolutionParameterfvEXT (GLenum target, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetConvolutionParameterivEXT (GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetSeparableFilterEXT (GLenum target, GLenum format, GLenum type, void *row, void *column, void *span); +GLAPI void APIENTRY glSeparableFilter2DEXT (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *row, const void *column); +#endif +#endif /* GL_EXT_convolution */ + +#ifndef GL_EXT_coordinate_frame +#define GL_EXT_coordinate_frame 1 +#define GL_TANGENT_ARRAY_EXT 0x8439 +#define GL_BINORMAL_ARRAY_EXT 0x843A +#define GL_CURRENT_TANGENT_EXT 0x843B +#define GL_CURRENT_BINORMAL_EXT 0x843C +#define GL_TANGENT_ARRAY_TYPE_EXT 0x843E +#define GL_TANGENT_ARRAY_STRIDE_EXT 0x843F +#define GL_BINORMAL_ARRAY_TYPE_EXT 0x8440 +#define GL_BINORMAL_ARRAY_STRIDE_EXT 0x8441 +#define GL_TANGENT_ARRAY_POINTER_EXT 0x8442 +#define GL_BINORMAL_ARRAY_POINTER_EXT 0x8443 +#define GL_MAP1_TANGENT_EXT 0x8444 +#define GL_MAP2_TANGENT_EXT 0x8445 +#define GL_MAP1_BINORMAL_EXT 0x8446 +#define GL_MAP2_BINORMAL_EXT 0x8447 +typedef void (APIENTRYP PFNGLTANGENT3BEXTPROC) (GLbyte tx, GLbyte ty, GLbyte tz); +typedef void (APIENTRYP PFNGLTANGENT3BVEXTPROC) (const GLbyte *v); +typedef void (APIENTRYP PFNGLTANGENT3DEXTPROC) (GLdouble tx, GLdouble ty, GLdouble tz); +typedef void (APIENTRYP PFNGLTANGENT3DVEXTPROC) (const GLdouble *v); +typedef void (APIENTRYP PFNGLTANGENT3FEXTPROC) (GLfloat tx, GLfloat ty, GLfloat tz); +typedef void (APIENTRYP PFNGLTANGENT3FVEXTPROC) (const GLfloat *v); +typedef void (APIENTRYP PFNGLTANGENT3IEXTPROC) (GLint tx, GLint ty, GLint tz); +typedef void (APIENTRYP PFNGLTANGENT3IVEXTPROC) (const GLint *v); +typedef void (APIENTRYP PFNGLTANGENT3SEXTPROC) (GLshort tx, GLshort ty, GLshort tz); +typedef void (APIENTRYP PFNGLTANGENT3SVEXTPROC) (const GLshort *v); +typedef void (APIENTRYP PFNGLBINORMAL3BEXTPROC) (GLbyte bx, GLbyte by, GLbyte bz); +typedef void (APIENTRYP PFNGLBINORMAL3BVEXTPROC) (const GLbyte *v); +typedef void (APIENTRYP PFNGLBINORMAL3DEXTPROC) (GLdouble bx, GLdouble by, GLdouble bz); +typedef void (APIENTRYP PFNGLBINORMAL3DVEXTPROC) (const GLdouble *v); +typedef void (APIENTRYP PFNGLBINORMAL3FEXTPROC) (GLfloat bx, GLfloat by, GLfloat bz); +typedef void (APIENTRYP PFNGLBINORMAL3FVEXTPROC) (const GLfloat *v); +typedef void (APIENTRYP PFNGLBINORMAL3IEXTPROC) (GLint bx, GLint by, GLint bz); +typedef void (APIENTRYP PFNGLBINORMAL3IVEXTPROC) (const GLint *v); +typedef void (APIENTRYP PFNGLBINORMAL3SEXTPROC) (GLshort bx, GLshort by, GLshort bz); +typedef void (APIENTRYP PFNGLBINORMAL3SVEXTPROC) (const GLshort *v); +typedef void (APIENTRYP PFNGLTANGENTPOINTEREXTPROC) (GLenum type, GLsizei stride, const void *pointer); +typedef void (APIENTRYP PFNGLBINORMALPOINTEREXTPROC) (GLenum type, GLsizei stride, const void *pointer); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glTangent3bEXT (GLbyte tx, GLbyte ty, GLbyte tz); +GLAPI void APIENTRY glTangent3bvEXT (const GLbyte *v); +GLAPI void APIENTRY glTangent3dEXT (GLdouble tx, GLdouble ty, GLdouble tz); +GLAPI void APIENTRY glTangent3dvEXT (const GLdouble *v); +GLAPI void APIENTRY glTangent3fEXT (GLfloat tx, GLfloat ty, GLfloat tz); +GLAPI void APIENTRY glTangent3fvEXT (const GLfloat *v); +GLAPI void APIENTRY glTangent3iEXT (GLint tx, GLint ty, GLint tz); +GLAPI void APIENTRY glTangent3ivEXT (const GLint *v); +GLAPI void APIENTRY glTangent3sEXT (GLshort tx, GLshort ty, GLshort tz); +GLAPI void APIENTRY glTangent3svEXT (const GLshort *v); +GLAPI void APIENTRY glBinormal3bEXT (GLbyte bx, GLbyte by, GLbyte bz); +GLAPI void APIENTRY glBinormal3bvEXT (const GLbyte *v); +GLAPI void APIENTRY glBinormal3dEXT (GLdouble bx, GLdouble by, GLdouble bz); +GLAPI void APIENTRY glBinormal3dvEXT (const GLdouble *v); +GLAPI void APIENTRY glBinormal3fEXT (GLfloat bx, GLfloat by, GLfloat bz); +GLAPI void APIENTRY glBinormal3fvEXT (const GLfloat *v); +GLAPI void APIENTRY glBinormal3iEXT (GLint bx, GLint by, GLint bz); +GLAPI void APIENTRY glBinormal3ivEXT (const GLint *v); +GLAPI void APIENTRY glBinormal3sEXT (GLshort bx, GLshort by, GLshort bz); +GLAPI void APIENTRY glBinormal3svEXT (const GLshort *v); +GLAPI void APIENTRY glTangentPointerEXT (GLenum type, GLsizei stride, const void *pointer); +GLAPI void APIENTRY glBinormalPointerEXT (GLenum type, GLsizei stride, const void *pointer); +#endif +#endif /* GL_EXT_coordinate_frame */ + +#ifndef GL_EXT_copy_texture +#define GL_EXT_copy_texture 1 +typedef void (APIENTRYP PFNGLCOPYTEXIMAGE1DEXTPROC) (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); +typedef void (APIENTRYP PFNGLCOPYTEXIMAGE2DEXTPROC) (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); +typedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE1DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); +typedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE2DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); +typedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE3DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glCopyTexImage1DEXT (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); +GLAPI void APIENTRY glCopyTexImage2DEXT (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); +GLAPI void APIENTRY glCopyTexSubImage1DEXT (GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); +GLAPI void APIENTRY glCopyTexSubImage2DEXT (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); +GLAPI void APIENTRY glCopyTexSubImage3DEXT (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); +#endif +#endif /* GL_EXT_copy_texture */ + +#ifndef GL_EXT_cull_vertex +#define GL_EXT_cull_vertex 1 +#define GL_CULL_VERTEX_EXT 0x81AA +#define GL_CULL_VERTEX_EYE_POSITION_EXT 0x81AB +#define GL_CULL_VERTEX_OBJECT_POSITION_EXT 0x81AC +typedef void (APIENTRYP PFNGLCULLPARAMETERDVEXTPROC) (GLenum pname, GLdouble *params); +typedef void (APIENTRYP PFNGLCULLPARAMETERFVEXTPROC) (GLenum pname, GLfloat *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glCullParameterdvEXT (GLenum pname, GLdouble *params); +GLAPI void APIENTRY glCullParameterfvEXT (GLenum pname, GLfloat *params); +#endif +#endif /* GL_EXT_cull_vertex */ + +#ifndef GL_EXT_debug_label +#define GL_EXT_debug_label 1 +#define GL_PROGRAM_PIPELINE_OBJECT_EXT 0x8A4F +#define GL_PROGRAM_OBJECT_EXT 0x8B40 +#define GL_SHADER_OBJECT_EXT 0x8B48 +#define GL_BUFFER_OBJECT_EXT 0x9151 +#define GL_QUERY_OBJECT_EXT 0x9153 +#define GL_VERTEX_ARRAY_OBJECT_EXT 0x9154 +typedef void (APIENTRYP PFNGLLABELOBJECTEXTPROC) (GLenum type, GLuint object, GLsizei length, const GLchar *label); +typedef void (APIENTRYP PFNGLGETOBJECTLABELEXTPROC) (GLenum type, GLuint object, GLsizei bufSize, GLsizei *length, GLchar *label); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glLabelObjectEXT (GLenum type, GLuint object, GLsizei length, const GLchar *label); +GLAPI void APIENTRY glGetObjectLabelEXT (GLenum type, GLuint object, GLsizei bufSize, GLsizei *length, GLchar *label); +#endif +#endif /* GL_EXT_debug_label */ + +#ifndef GL_EXT_debug_marker +#define GL_EXT_debug_marker 1 +typedef void (APIENTRYP PFNGLINSERTEVENTMARKEREXTPROC) (GLsizei length, const GLchar *marker); +typedef void (APIENTRYP PFNGLPUSHGROUPMARKEREXTPROC) (GLsizei length, const GLchar *marker); +typedef void (APIENTRYP PFNGLPOPGROUPMARKEREXTPROC) (void); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glInsertEventMarkerEXT (GLsizei length, const GLchar *marker); +GLAPI void APIENTRY glPushGroupMarkerEXT (GLsizei length, const GLchar *marker); +GLAPI void APIENTRY glPopGroupMarkerEXT (void); +#endif +#endif /* GL_EXT_debug_marker */ + +#ifndef GL_EXT_depth_bounds_test +#define GL_EXT_depth_bounds_test 1 +#define GL_DEPTH_BOUNDS_TEST_EXT 0x8890 +#define GL_DEPTH_BOUNDS_EXT 0x8891 +typedef void (APIENTRYP PFNGLDEPTHBOUNDSEXTPROC) (GLclampd zmin, GLclampd zmax); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glDepthBoundsEXT (GLclampd zmin, GLclampd zmax); +#endif +#endif /* GL_EXT_depth_bounds_test */ + +#ifndef GL_EXT_direct_state_access +#define GL_EXT_direct_state_access 1 +#define GL_PROGRAM_MATRIX_EXT 0x8E2D +#define GL_TRANSPOSE_PROGRAM_MATRIX_EXT 0x8E2E +#define GL_PROGRAM_MATRIX_STACK_DEPTH_EXT 0x8E2F +typedef void (APIENTRYP PFNGLMATRIXLOADFEXTPROC) (GLenum mode, const GLfloat *m); +typedef void (APIENTRYP PFNGLMATRIXLOADDEXTPROC) (GLenum mode, const GLdouble *m); +typedef void (APIENTRYP PFNGLMATRIXMULTFEXTPROC) (GLenum mode, const GLfloat *m); +typedef void (APIENTRYP PFNGLMATRIXMULTDEXTPROC) (GLenum mode, const GLdouble *m); +typedef void (APIENTRYP PFNGLMATRIXLOADIDENTITYEXTPROC) (GLenum mode); +typedef void (APIENTRYP PFNGLMATRIXROTATEFEXTPROC) (GLenum mode, GLfloat angle, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLMATRIXROTATEDEXTPROC) (GLenum mode, GLdouble angle, GLdouble x, GLdouble y, GLdouble z); +typedef void (APIENTRYP PFNGLMATRIXSCALEFEXTPROC) (GLenum mode, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLMATRIXSCALEDEXTPROC) (GLenum mode, GLdouble x, GLdouble y, GLdouble z); +typedef void (APIENTRYP PFNGLMATRIXTRANSLATEFEXTPROC) (GLenum mode, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLMATRIXTRANSLATEDEXTPROC) (GLenum mode, GLdouble x, GLdouble y, GLdouble z); +typedef void (APIENTRYP PFNGLMATRIXFRUSTUMEXTPROC) (GLenum mode, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); +typedef void (APIENTRYP PFNGLMATRIXORTHOEXTPROC) (GLenum mode, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); +typedef void (APIENTRYP PFNGLMATRIXPOPEXTPROC) (GLenum mode); +typedef void (APIENTRYP PFNGLMATRIXPUSHEXTPROC) (GLenum mode); +typedef void (APIENTRYP PFNGLCLIENTATTRIBDEFAULTEXTPROC) (GLbitfield mask); +typedef void (APIENTRYP PFNGLPUSHCLIENTATTRIBDEFAULTEXTPROC) (GLbitfield mask); +typedef void (APIENTRYP PFNGLTEXTUREPARAMETERFEXTPROC) (GLuint texture, GLenum target, GLenum pname, GLfloat param); +typedef void (APIENTRYP PFNGLTEXTUREPARAMETERFVEXTPROC) (GLuint texture, GLenum target, GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLTEXTUREPARAMETERIEXTPROC) (GLuint texture, GLenum target, GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLTEXTUREPARAMETERIVEXTPROC) (GLuint texture, GLenum target, GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLTEXTUREIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const void *pixels); +typedef void (APIENTRYP PFNGLTEXTUREIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void *pixels); +typedef void (APIENTRYP PFNGLTEXTURESUBIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void *pixels); +typedef void (APIENTRYP PFNGLTEXTURESUBIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels); +typedef void (APIENTRYP PFNGLCOPYTEXTUREIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); +typedef void (APIENTRYP PFNGLCOPYTEXTUREIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); +typedef void (APIENTRYP PFNGLCOPYTEXTURESUBIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); +typedef void (APIENTRYP PFNGLCOPYTEXTURESUBIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); +typedef void (APIENTRYP PFNGLGETTEXTUREIMAGEEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum format, GLenum type, void *pixels); +typedef void (APIENTRYP PFNGLGETTEXTUREPARAMETERFVEXTPROC) (GLuint texture, GLenum target, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETTEXTUREPARAMETERIVEXTPROC) (GLuint texture, GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETTEXTURELEVELPARAMETERFVEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETTEXTURELEVELPARAMETERIVEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLTEXTUREIMAGE3DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels); +typedef void (APIENTRYP PFNGLTEXTURESUBIMAGE3DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels); +typedef void (APIENTRYP PFNGLCOPYTEXTURESUBIMAGE3DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); +typedef void (APIENTRYP PFNGLBINDMULTITEXTUREEXTPROC) (GLenum texunit, GLenum target, GLuint texture); +typedef void (APIENTRYP PFNGLMULTITEXCOORDPOINTEREXTPROC) (GLenum texunit, GLint size, GLenum type, GLsizei stride, const void *pointer); +typedef void (APIENTRYP PFNGLMULTITEXENVFEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLfloat param); +typedef void (APIENTRYP PFNGLMULTITEXENVFVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLMULTITEXENVIEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLMULTITEXENVIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLMULTITEXGENDEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, GLdouble param); +typedef void (APIENTRYP PFNGLMULTITEXGENDVEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, const GLdouble *params); +typedef void (APIENTRYP PFNGLMULTITEXGENFEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, GLfloat param); +typedef void (APIENTRYP PFNGLMULTITEXGENFVEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLMULTITEXGENIEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLMULTITEXGENIVEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLGETMULTITEXENVFVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETMULTITEXENVIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETMULTITEXGENDVEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, GLdouble *params); +typedef void (APIENTRYP PFNGLGETMULTITEXGENFVEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETMULTITEXGENIVEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLMULTITEXPARAMETERIEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLMULTITEXPARAMETERIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLMULTITEXPARAMETERFEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLfloat param); +typedef void (APIENTRYP PFNGLMULTITEXPARAMETERFVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLMULTITEXIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const void *pixels); +typedef void (APIENTRYP PFNGLMULTITEXIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void *pixels); +typedef void (APIENTRYP PFNGLMULTITEXSUBIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void *pixels); +typedef void (APIENTRYP PFNGLMULTITEXSUBIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels); +typedef void (APIENTRYP PFNGLCOPYMULTITEXIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); +typedef void (APIENTRYP PFNGLCOPYMULTITEXIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); +typedef void (APIENTRYP PFNGLCOPYMULTITEXSUBIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); +typedef void (APIENTRYP PFNGLCOPYMULTITEXSUBIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); +typedef void (APIENTRYP PFNGLGETMULTITEXIMAGEEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum format, GLenum type, void *pixels); +typedef void (APIENTRYP PFNGLGETMULTITEXPARAMETERFVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETMULTITEXPARAMETERIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETMULTITEXLEVELPARAMETERFVEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETMULTITEXLEVELPARAMETERIVEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLMULTITEXIMAGE3DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels); +typedef void (APIENTRYP PFNGLMULTITEXSUBIMAGE3DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels); +typedef void (APIENTRYP PFNGLCOPYMULTITEXSUBIMAGE3DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); +typedef void (APIENTRYP PFNGLENABLECLIENTSTATEINDEXEDEXTPROC) (GLenum array, GLuint index); +typedef void (APIENTRYP PFNGLDISABLECLIENTSTATEINDEXEDEXTPROC) (GLenum array, GLuint index); +typedef void (APIENTRYP PFNGLGETFLOATINDEXEDVEXTPROC) (GLenum target, GLuint index, GLfloat *data); +typedef void (APIENTRYP PFNGLGETDOUBLEINDEXEDVEXTPROC) (GLenum target, GLuint index, GLdouble *data); +typedef void (APIENTRYP PFNGLGETPOINTERINDEXEDVEXTPROC) (GLenum target, GLuint index, void **data); +typedef void (APIENTRYP PFNGLENABLEINDEXEDEXTPROC) (GLenum target, GLuint index); +typedef void (APIENTRYP PFNGLDISABLEINDEXEDEXTPROC) (GLenum target, GLuint index); +typedef GLboolean (APIENTRYP PFNGLISENABLEDINDEXEDEXTPROC) (GLenum target, GLuint index); +typedef void (APIENTRYP PFNGLGETINTEGERINDEXEDVEXTPROC) (GLenum target, GLuint index, GLint *data); +typedef void (APIENTRYP PFNGLGETBOOLEANINDEXEDVEXTPROC) (GLenum target, GLuint index, GLboolean *data); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXTUREIMAGE3DEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *bits); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXTUREIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *bits); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXTUREIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void *bits); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXTURESUBIMAGE3DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *bits); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXTURESUBIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *bits); +typedef void (APIENTRYP PFNGLCOMPRESSEDTEXTURESUBIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *bits); +typedef void (APIENTRYP PFNGLGETCOMPRESSEDTEXTUREIMAGEEXTPROC) (GLuint texture, GLenum target, GLint lod, void *img); +typedef void (APIENTRYP PFNGLCOMPRESSEDMULTITEXIMAGE3DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *bits); +typedef void (APIENTRYP PFNGLCOMPRESSEDMULTITEXIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *bits); +typedef void (APIENTRYP PFNGLCOMPRESSEDMULTITEXIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void *bits); +typedef void (APIENTRYP PFNGLCOMPRESSEDMULTITEXSUBIMAGE3DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *bits); +typedef void (APIENTRYP PFNGLCOMPRESSEDMULTITEXSUBIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *bits); +typedef void (APIENTRYP PFNGLCOMPRESSEDMULTITEXSUBIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *bits); +typedef void (APIENTRYP PFNGLGETCOMPRESSEDMULTITEXIMAGEEXTPROC) (GLenum texunit, GLenum target, GLint lod, void *img); +typedef void (APIENTRYP PFNGLMATRIXLOADTRANSPOSEFEXTPROC) (GLenum mode, const GLfloat *m); +typedef void (APIENTRYP PFNGLMATRIXLOADTRANSPOSEDEXTPROC) (GLenum mode, const GLdouble *m); +typedef void (APIENTRYP PFNGLMATRIXMULTTRANSPOSEFEXTPROC) (GLenum mode, const GLfloat *m); +typedef void (APIENTRYP PFNGLMATRIXMULTTRANSPOSEDEXTPROC) (GLenum mode, const GLdouble *m); +typedef void (APIENTRYP PFNGLNAMEDBUFFERDATAEXTPROC) (GLuint buffer, GLsizeiptr size, const void *data, GLenum usage); +typedef void (APIENTRYP PFNGLNAMEDBUFFERSUBDATAEXTPROC) (GLuint buffer, GLintptr offset, GLsizeiptr size, const void *data); +typedef void *(APIENTRYP PFNGLMAPNAMEDBUFFEREXTPROC) (GLuint buffer, GLenum access); +typedef GLboolean (APIENTRYP PFNGLUNMAPNAMEDBUFFEREXTPROC) (GLuint buffer); +typedef void (APIENTRYP PFNGLGETNAMEDBUFFERPARAMETERIVEXTPROC) (GLuint buffer, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETNAMEDBUFFERPOINTERVEXTPROC) (GLuint buffer, GLenum pname, void **params); +typedef void (APIENTRYP PFNGLGETNAMEDBUFFERSUBDATAEXTPROC) (GLuint buffer, GLintptr offset, GLsizeiptr size, void *data); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1FEXTPROC) (GLuint program, GLint location, GLfloat v0); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2FEXTPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3FEXTPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4FEXTPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1IEXTPROC) (GLuint program, GLint location, GLint v0); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2IEXTPROC) (GLuint program, GLint location, GLint v0, GLint v1); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3IEXTPROC) (GLuint program, GLint location, GLint v0, GLint v1, GLint v2); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4IEXTPROC) (GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X3FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X2FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X4FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X2FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X4FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X3FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLTEXTUREBUFFEREXTPROC) (GLuint texture, GLenum target, GLenum internalformat, GLuint buffer); +typedef void (APIENTRYP PFNGLMULTITEXBUFFEREXTPROC) (GLenum texunit, GLenum target, GLenum internalformat, GLuint buffer); +typedef void (APIENTRYP PFNGLTEXTUREPARAMETERIIVEXTPROC) (GLuint texture, GLenum target, GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLTEXTUREPARAMETERIUIVEXTPROC) (GLuint texture, GLenum target, GLenum pname, const GLuint *params); +typedef void (APIENTRYP PFNGLGETTEXTUREPARAMETERIIVEXTPROC) (GLuint texture, GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETTEXTUREPARAMETERIUIVEXTPROC) (GLuint texture, GLenum target, GLenum pname, GLuint *params); +typedef void (APIENTRYP PFNGLMULTITEXPARAMETERIIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLMULTITEXPARAMETERIUIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, const GLuint *params); +typedef void (APIENTRYP PFNGLGETMULTITEXPARAMETERIIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETMULTITEXPARAMETERIUIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLuint *params); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1UIEXTPROC) (GLuint program, GLint location, GLuint v0); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2UIEXTPROC) (GLuint program, GLint location, GLuint v0, GLuint v1); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3UIEXTPROC) (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4UIEXTPROC) (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1UIVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2UIVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3UIVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4UIVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value); +typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETERS4FVEXTPROC) (GLuint program, GLenum target, GLuint index, GLsizei count, const GLfloat *params); +typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETERI4IEXTPROC) (GLuint program, GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w); +typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETERI4IVEXTPROC) (GLuint program, GLenum target, GLuint index, const GLint *params); +typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETERSI4IVEXTPROC) (GLuint program, GLenum target, GLuint index, GLsizei count, const GLint *params); +typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETERI4UIEXTPROC) (GLuint program, GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); +typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETERI4UIVEXTPROC) (GLuint program, GLenum target, GLuint index, const GLuint *params); +typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETERSI4UIVEXTPROC) (GLuint program, GLenum target, GLuint index, GLsizei count, const GLuint *params); +typedef void (APIENTRYP PFNGLGETNAMEDPROGRAMLOCALPARAMETERIIVEXTPROC) (GLuint program, GLenum target, GLuint index, GLint *params); +typedef void (APIENTRYP PFNGLGETNAMEDPROGRAMLOCALPARAMETERIUIVEXTPROC) (GLuint program, GLenum target, GLuint index, GLuint *params); +typedef void (APIENTRYP PFNGLENABLECLIENTSTATEIEXTPROC) (GLenum array, GLuint index); +typedef void (APIENTRYP PFNGLDISABLECLIENTSTATEIEXTPROC) (GLenum array, GLuint index); +typedef void (APIENTRYP PFNGLGETFLOATI_VEXTPROC) (GLenum pname, GLuint index, GLfloat *params); +typedef void (APIENTRYP PFNGLGETDOUBLEI_VEXTPROC) (GLenum pname, GLuint index, GLdouble *params); +typedef void (APIENTRYP PFNGLGETPOINTERI_VEXTPROC) (GLenum pname, GLuint index, void **params); +typedef void (APIENTRYP PFNGLNAMEDPROGRAMSTRINGEXTPROC) (GLuint program, GLenum target, GLenum format, GLsizei len, const void *string); +typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETER4DEXTPROC) (GLuint program, GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETER4DVEXTPROC) (GLuint program, GLenum target, GLuint index, const GLdouble *params); +typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETER4FEXTPROC) (GLuint program, GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETER4FVEXTPROC) (GLuint program, GLenum target, GLuint index, const GLfloat *params); +typedef void (APIENTRYP PFNGLGETNAMEDPROGRAMLOCALPARAMETERDVEXTPROC) (GLuint program, GLenum target, GLuint index, GLdouble *params); +typedef void (APIENTRYP PFNGLGETNAMEDPROGRAMLOCALPARAMETERFVEXTPROC) (GLuint program, GLenum target, GLuint index, GLfloat *params); +typedef void (APIENTRYP PFNGLGETNAMEDPROGRAMIVEXTPROC) (GLuint program, GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETNAMEDPROGRAMSTRINGEXTPROC) (GLuint program, GLenum target, GLenum pname, void *string); +typedef void (APIENTRYP PFNGLNAMEDRENDERBUFFERSTORAGEEXTPROC) (GLuint renderbuffer, GLenum internalformat, GLsizei width, GLsizei height); +typedef void (APIENTRYP PFNGLGETNAMEDRENDERBUFFERPARAMETERIVEXTPROC) (GLuint renderbuffer, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC) (GLuint renderbuffer, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); +typedef void (APIENTRYP PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLECOVERAGEEXTPROC) (GLuint renderbuffer, GLsizei coverageSamples, GLsizei colorSamples, GLenum internalformat, GLsizei width, GLsizei height); +typedef GLenum (APIENTRYP PFNGLCHECKNAMEDFRAMEBUFFERSTATUSEXTPROC) (GLuint framebuffer, GLenum target); +typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERTEXTURE1DEXTPROC) (GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level); +typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERTEXTURE2DEXTPROC) (GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level); +typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERTEXTURE3DEXTPROC) (GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); +typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERRENDERBUFFEREXTPROC) (GLuint framebuffer, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); +typedef void (APIENTRYP PFNGLGETNAMEDFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC) (GLuint framebuffer, GLenum attachment, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGENERATETEXTUREMIPMAPEXTPROC) (GLuint texture, GLenum target); +typedef void (APIENTRYP PFNGLGENERATEMULTITEXMIPMAPEXTPROC) (GLenum texunit, GLenum target); +typedef void (APIENTRYP PFNGLFRAMEBUFFERDRAWBUFFEREXTPROC) (GLuint framebuffer, GLenum mode); +typedef void (APIENTRYP PFNGLFRAMEBUFFERDRAWBUFFERSEXTPROC) (GLuint framebuffer, GLsizei n, const GLenum *bufs); +typedef void (APIENTRYP PFNGLFRAMEBUFFERREADBUFFEREXTPROC) (GLuint framebuffer, GLenum mode); +typedef void (APIENTRYP PFNGLGETFRAMEBUFFERPARAMETERIVEXTPROC) (GLuint framebuffer, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLNAMEDCOPYBUFFERSUBDATAEXTPROC) (GLuint readBuffer, GLuint writeBuffer, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); +typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERTEXTUREEXTPROC) (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level); +typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERTEXTURELAYEREXTPROC) (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLint layer); +typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERTEXTUREFACEEXTPROC) (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLenum face); +typedef void (APIENTRYP PFNGLTEXTURERENDERBUFFEREXTPROC) (GLuint texture, GLenum target, GLuint renderbuffer); +typedef void (APIENTRYP PFNGLMULTITEXRENDERBUFFEREXTPROC) (GLenum texunit, GLenum target, GLuint renderbuffer); +typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset); +typedef void (APIENTRYP PFNGLVERTEXARRAYCOLOROFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset); +typedef void (APIENTRYP PFNGLVERTEXARRAYEDGEFLAGOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLsizei stride, GLintptr offset); +typedef void (APIENTRYP PFNGLVERTEXARRAYINDEXOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLenum type, GLsizei stride, GLintptr offset); +typedef void (APIENTRYP PFNGLVERTEXARRAYNORMALOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLenum type, GLsizei stride, GLintptr offset); +typedef void (APIENTRYP PFNGLVERTEXARRAYTEXCOORDOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset); +typedef void (APIENTRYP PFNGLVERTEXARRAYMULTITEXCOORDOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLenum texunit, GLint size, GLenum type, GLsizei stride, GLintptr offset); +typedef void (APIENTRYP PFNGLVERTEXARRAYFOGCOORDOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLenum type, GLsizei stride, GLintptr offset); +typedef void (APIENTRYP PFNGLVERTEXARRAYSECONDARYCOLOROFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset); +typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXATTRIBOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, GLintptr offset); +typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXATTRIBIOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLuint index, GLint size, GLenum type, GLsizei stride, GLintptr offset); +typedef void (APIENTRYP PFNGLENABLEVERTEXARRAYEXTPROC) (GLuint vaobj, GLenum array); +typedef void (APIENTRYP PFNGLDISABLEVERTEXARRAYEXTPROC) (GLuint vaobj, GLenum array); +typedef void (APIENTRYP PFNGLENABLEVERTEXARRAYATTRIBEXTPROC) (GLuint vaobj, GLuint index); +typedef void (APIENTRYP PFNGLDISABLEVERTEXARRAYATTRIBEXTPROC) (GLuint vaobj, GLuint index); +typedef void (APIENTRYP PFNGLGETVERTEXARRAYINTEGERVEXTPROC) (GLuint vaobj, GLenum pname, GLint *param); +typedef void (APIENTRYP PFNGLGETVERTEXARRAYPOINTERVEXTPROC) (GLuint vaobj, GLenum pname, void **param); +typedef void (APIENTRYP PFNGLGETVERTEXARRAYINTEGERI_VEXTPROC) (GLuint vaobj, GLuint index, GLenum pname, GLint *param); +typedef void (APIENTRYP PFNGLGETVERTEXARRAYPOINTERI_VEXTPROC) (GLuint vaobj, GLuint index, GLenum pname, void **param); +typedef void *(APIENTRYP PFNGLMAPNAMEDBUFFERRANGEEXTPROC) (GLuint buffer, GLintptr offset, GLsizeiptr length, GLbitfield access); +typedef void (APIENTRYP PFNGLFLUSHMAPPEDNAMEDBUFFERRANGEEXTPROC) (GLuint buffer, GLintptr offset, GLsizeiptr length); +typedef void (APIENTRYP PFNGLNAMEDBUFFERSTORAGEEXTPROC) (GLuint buffer, GLsizeiptr size, const void *data, GLbitfield flags); +typedef void (APIENTRYP PFNGLCLEARNAMEDBUFFERDATAEXTPROC) (GLuint buffer, GLenum internalformat, GLenum format, GLenum type, const void *data); +typedef void (APIENTRYP PFNGLCLEARNAMEDBUFFERSUBDATAEXTPROC) (GLuint buffer, GLenum internalformat, GLsizeiptr offset, GLsizeiptr size, GLenum format, GLenum type, const void *data); +typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERPARAMETERIEXTPROC) (GLuint framebuffer, GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLGETNAMEDFRAMEBUFFERPARAMETERIVEXTPROC) (GLuint framebuffer, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1DEXTPROC) (GLuint program, GLint location, GLdouble x); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2DEXTPROC) (GLuint program, GLint location, GLdouble x, GLdouble y); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3DEXTPROC) (GLuint program, GLint location, GLdouble x, GLdouble y, GLdouble z); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4DEXTPROC) (GLuint program, GLint location, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1DVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2DVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3DVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4DVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X3DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X4DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X2DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X4DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X2DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X3DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +typedef void (APIENTRYP PFNGLTEXTUREBUFFERRANGEEXTPROC) (GLuint texture, GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size); +typedef void (APIENTRYP PFNGLTEXTURESTORAGE1DEXTPROC) (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width); +typedef void (APIENTRYP PFNGLTEXTURESTORAGE2DEXTPROC) (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); +typedef void (APIENTRYP PFNGLTEXTURESTORAGE3DEXTPROC) (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); +typedef void (APIENTRYP PFNGLTEXTURESTORAGE2DMULTISAMPLEEXTPROC) (GLuint texture, GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); +typedef void (APIENTRYP PFNGLTEXTURESTORAGE3DMULTISAMPLEEXTPROC) (GLuint texture, GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); +typedef void (APIENTRYP PFNGLVERTEXARRAYBINDVERTEXBUFFEREXTPROC) (GLuint vaobj, GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride); +typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXATTRIBFORMATEXTPROC) (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset); +typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXATTRIBIFORMATEXTPROC) (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); +typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXATTRIBLFORMATEXTPROC) (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); +typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXATTRIBBINDINGEXTPROC) (GLuint vaobj, GLuint attribindex, GLuint bindingindex); +typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXBINDINGDIVISOREXTPROC) (GLuint vaobj, GLuint bindingindex, GLuint divisor); +typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXATTRIBLOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLuint index, GLint size, GLenum type, GLsizei stride, GLintptr offset); +typedef void (APIENTRYP PFNGLTEXTUREPAGECOMMITMENTEXTPROC) (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLboolean commit); +typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXATTRIBDIVISOREXTPROC) (GLuint vaobj, GLuint index, GLuint divisor); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glMatrixLoadfEXT (GLenum mode, const GLfloat *m); +GLAPI void APIENTRY glMatrixLoaddEXT (GLenum mode, const GLdouble *m); +GLAPI void APIENTRY glMatrixMultfEXT (GLenum mode, const GLfloat *m); +GLAPI void APIENTRY glMatrixMultdEXT (GLenum mode, const GLdouble *m); +GLAPI void APIENTRY glMatrixLoadIdentityEXT (GLenum mode); +GLAPI void APIENTRY glMatrixRotatefEXT (GLenum mode, GLfloat angle, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glMatrixRotatedEXT (GLenum mode, GLdouble angle, GLdouble x, GLdouble y, GLdouble z); +GLAPI void APIENTRY glMatrixScalefEXT (GLenum mode, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glMatrixScaledEXT (GLenum mode, GLdouble x, GLdouble y, GLdouble z); +GLAPI void APIENTRY glMatrixTranslatefEXT (GLenum mode, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glMatrixTranslatedEXT (GLenum mode, GLdouble x, GLdouble y, GLdouble z); +GLAPI void APIENTRY glMatrixFrustumEXT (GLenum mode, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); +GLAPI void APIENTRY glMatrixOrthoEXT (GLenum mode, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); +GLAPI void APIENTRY glMatrixPopEXT (GLenum mode); +GLAPI void APIENTRY glMatrixPushEXT (GLenum mode); +GLAPI void APIENTRY glClientAttribDefaultEXT (GLbitfield mask); +GLAPI void APIENTRY glPushClientAttribDefaultEXT (GLbitfield mask); +GLAPI void APIENTRY glTextureParameterfEXT (GLuint texture, GLenum target, GLenum pname, GLfloat param); +GLAPI void APIENTRY glTextureParameterfvEXT (GLuint texture, GLenum target, GLenum pname, const GLfloat *params); +GLAPI void APIENTRY glTextureParameteriEXT (GLuint texture, GLenum target, GLenum pname, GLint param); +GLAPI void APIENTRY glTextureParameterivEXT (GLuint texture, GLenum target, GLenum pname, const GLint *params); +GLAPI void APIENTRY glTextureImage1DEXT (GLuint texture, GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const void *pixels); +GLAPI void APIENTRY glTextureImage2DEXT (GLuint texture, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void *pixels); +GLAPI void APIENTRY glTextureSubImage1DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void *pixels); +GLAPI void APIENTRY glTextureSubImage2DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels); +GLAPI void APIENTRY glCopyTextureImage1DEXT (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); +GLAPI void APIENTRY glCopyTextureImage2DEXT (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); +GLAPI void APIENTRY glCopyTextureSubImage1DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); +GLAPI void APIENTRY glCopyTextureSubImage2DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); +GLAPI void APIENTRY glGetTextureImageEXT (GLuint texture, GLenum target, GLint level, GLenum format, GLenum type, void *pixels); +GLAPI void APIENTRY glGetTextureParameterfvEXT (GLuint texture, GLenum target, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetTextureParameterivEXT (GLuint texture, GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetTextureLevelParameterfvEXT (GLuint texture, GLenum target, GLint level, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetTextureLevelParameterivEXT (GLuint texture, GLenum target, GLint level, GLenum pname, GLint *params); +GLAPI void APIENTRY glTextureImage3DEXT (GLuint texture, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels); +GLAPI void APIENTRY glTextureSubImage3DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels); +GLAPI void APIENTRY glCopyTextureSubImage3DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); +GLAPI void APIENTRY glBindMultiTextureEXT (GLenum texunit, GLenum target, GLuint texture); +GLAPI void APIENTRY glMultiTexCoordPointerEXT (GLenum texunit, GLint size, GLenum type, GLsizei stride, const void *pointer); +GLAPI void APIENTRY glMultiTexEnvfEXT (GLenum texunit, GLenum target, GLenum pname, GLfloat param); +GLAPI void APIENTRY glMultiTexEnvfvEXT (GLenum texunit, GLenum target, GLenum pname, const GLfloat *params); +GLAPI void APIENTRY glMultiTexEnviEXT (GLenum texunit, GLenum target, GLenum pname, GLint param); +GLAPI void APIENTRY glMultiTexEnvivEXT (GLenum texunit, GLenum target, GLenum pname, const GLint *params); +GLAPI void APIENTRY glMultiTexGendEXT (GLenum texunit, GLenum coord, GLenum pname, GLdouble param); +GLAPI void APIENTRY glMultiTexGendvEXT (GLenum texunit, GLenum coord, GLenum pname, const GLdouble *params); +GLAPI void APIENTRY glMultiTexGenfEXT (GLenum texunit, GLenum coord, GLenum pname, GLfloat param); +GLAPI void APIENTRY glMultiTexGenfvEXT (GLenum texunit, GLenum coord, GLenum pname, const GLfloat *params); +GLAPI void APIENTRY glMultiTexGeniEXT (GLenum texunit, GLenum coord, GLenum pname, GLint param); +GLAPI void APIENTRY glMultiTexGenivEXT (GLenum texunit, GLenum coord, GLenum pname, const GLint *params); +GLAPI void APIENTRY glGetMultiTexEnvfvEXT (GLenum texunit, GLenum target, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetMultiTexEnvivEXT (GLenum texunit, GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetMultiTexGendvEXT (GLenum texunit, GLenum coord, GLenum pname, GLdouble *params); +GLAPI void APIENTRY glGetMultiTexGenfvEXT (GLenum texunit, GLenum coord, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetMultiTexGenivEXT (GLenum texunit, GLenum coord, GLenum pname, GLint *params); +GLAPI void APIENTRY glMultiTexParameteriEXT (GLenum texunit, GLenum target, GLenum pname, GLint param); +GLAPI void APIENTRY glMultiTexParameterivEXT (GLenum texunit, GLenum target, GLenum pname, const GLint *params); +GLAPI void APIENTRY glMultiTexParameterfEXT (GLenum texunit, GLenum target, GLenum pname, GLfloat param); +GLAPI void APIENTRY glMultiTexParameterfvEXT (GLenum texunit, GLenum target, GLenum pname, const GLfloat *params); +GLAPI void APIENTRY glMultiTexImage1DEXT (GLenum texunit, GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const void *pixels); +GLAPI void APIENTRY glMultiTexImage2DEXT (GLenum texunit, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void *pixels); +GLAPI void APIENTRY glMultiTexSubImage1DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void *pixels); +GLAPI void APIENTRY glMultiTexSubImage2DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels); +GLAPI void APIENTRY glCopyMultiTexImage1DEXT (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); +GLAPI void APIENTRY glCopyMultiTexImage2DEXT (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); +GLAPI void APIENTRY glCopyMultiTexSubImage1DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); +GLAPI void APIENTRY glCopyMultiTexSubImage2DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); +GLAPI void APIENTRY glGetMultiTexImageEXT (GLenum texunit, GLenum target, GLint level, GLenum format, GLenum type, void *pixels); +GLAPI void APIENTRY glGetMultiTexParameterfvEXT (GLenum texunit, GLenum target, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetMultiTexParameterivEXT (GLenum texunit, GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetMultiTexLevelParameterfvEXT (GLenum texunit, GLenum target, GLint level, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetMultiTexLevelParameterivEXT (GLenum texunit, GLenum target, GLint level, GLenum pname, GLint *params); +GLAPI void APIENTRY glMultiTexImage3DEXT (GLenum texunit, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels); +GLAPI void APIENTRY glMultiTexSubImage3DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels); +GLAPI void APIENTRY glCopyMultiTexSubImage3DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); +GLAPI void APIENTRY glEnableClientStateIndexedEXT (GLenum array, GLuint index); +GLAPI void APIENTRY glDisableClientStateIndexedEXT (GLenum array, GLuint index); +GLAPI void APIENTRY glGetFloatIndexedvEXT (GLenum target, GLuint index, GLfloat *data); +GLAPI void APIENTRY glGetDoubleIndexedvEXT (GLenum target, GLuint index, GLdouble *data); +GLAPI void APIENTRY glGetPointerIndexedvEXT (GLenum target, GLuint index, void **data); +GLAPI void APIENTRY glEnableIndexedEXT (GLenum target, GLuint index); +GLAPI void APIENTRY glDisableIndexedEXT (GLenum target, GLuint index); +GLAPI GLboolean APIENTRY glIsEnabledIndexedEXT (GLenum target, GLuint index); +GLAPI void APIENTRY glGetIntegerIndexedvEXT (GLenum target, GLuint index, GLint *data); +GLAPI void APIENTRY glGetBooleanIndexedvEXT (GLenum target, GLuint index, GLboolean *data); +GLAPI void APIENTRY glCompressedTextureImage3DEXT (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *bits); +GLAPI void APIENTRY glCompressedTextureImage2DEXT (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *bits); +GLAPI void APIENTRY glCompressedTextureImage1DEXT (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void *bits); +GLAPI void APIENTRY glCompressedTextureSubImage3DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *bits); +GLAPI void APIENTRY glCompressedTextureSubImage2DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *bits); +GLAPI void APIENTRY glCompressedTextureSubImage1DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *bits); +GLAPI void APIENTRY glGetCompressedTextureImageEXT (GLuint texture, GLenum target, GLint lod, void *img); +GLAPI void APIENTRY glCompressedMultiTexImage3DEXT (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *bits); +GLAPI void APIENTRY glCompressedMultiTexImage2DEXT (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *bits); +GLAPI void APIENTRY glCompressedMultiTexImage1DEXT (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void *bits); +GLAPI void APIENTRY glCompressedMultiTexSubImage3DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *bits); +GLAPI void APIENTRY glCompressedMultiTexSubImage2DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *bits); +GLAPI void APIENTRY glCompressedMultiTexSubImage1DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *bits); +GLAPI void APIENTRY glGetCompressedMultiTexImageEXT (GLenum texunit, GLenum target, GLint lod, void *img); +GLAPI void APIENTRY glMatrixLoadTransposefEXT (GLenum mode, const GLfloat *m); +GLAPI void APIENTRY glMatrixLoadTransposedEXT (GLenum mode, const GLdouble *m); +GLAPI void APIENTRY glMatrixMultTransposefEXT (GLenum mode, const GLfloat *m); +GLAPI void APIENTRY glMatrixMultTransposedEXT (GLenum mode, const GLdouble *m); +GLAPI void APIENTRY glNamedBufferDataEXT (GLuint buffer, GLsizeiptr size, const void *data, GLenum usage); +GLAPI void APIENTRY glNamedBufferSubDataEXT (GLuint buffer, GLintptr offset, GLsizeiptr size, const void *data); +GLAPI void *APIENTRY glMapNamedBufferEXT (GLuint buffer, GLenum access); +GLAPI GLboolean APIENTRY glUnmapNamedBufferEXT (GLuint buffer); +GLAPI void APIENTRY glGetNamedBufferParameterivEXT (GLuint buffer, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetNamedBufferPointervEXT (GLuint buffer, GLenum pname, void **params); +GLAPI void APIENTRY glGetNamedBufferSubDataEXT (GLuint buffer, GLintptr offset, GLsizeiptr size, void *data); +GLAPI void APIENTRY glProgramUniform1fEXT (GLuint program, GLint location, GLfloat v0); +GLAPI void APIENTRY glProgramUniform2fEXT (GLuint program, GLint location, GLfloat v0, GLfloat v1); +GLAPI void APIENTRY glProgramUniform3fEXT (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2); +GLAPI void APIENTRY glProgramUniform4fEXT (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); +GLAPI void APIENTRY glProgramUniform1iEXT (GLuint program, GLint location, GLint v0); +GLAPI void APIENTRY glProgramUniform2iEXT (GLuint program, GLint location, GLint v0, GLint v1); +GLAPI void APIENTRY glProgramUniform3iEXT (GLuint program, GLint location, GLint v0, GLint v1, GLint v2); +GLAPI void APIENTRY glProgramUniform4iEXT (GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3); +GLAPI void APIENTRY glProgramUniform1fvEXT (GLuint program, GLint location, GLsizei count, const GLfloat *value); +GLAPI void APIENTRY glProgramUniform2fvEXT (GLuint program, GLint location, GLsizei count, const GLfloat *value); +GLAPI void APIENTRY glProgramUniform3fvEXT (GLuint program, GLint location, GLsizei count, const GLfloat *value); +GLAPI void APIENTRY glProgramUniform4fvEXT (GLuint program, GLint location, GLsizei count, const GLfloat *value); +GLAPI void APIENTRY glProgramUniform1ivEXT (GLuint program, GLint location, GLsizei count, const GLint *value); +GLAPI void APIENTRY glProgramUniform2ivEXT (GLuint program, GLint location, GLsizei count, const GLint *value); +GLAPI void APIENTRY glProgramUniform3ivEXT (GLuint program, GLint location, GLsizei count, const GLint *value); +GLAPI void APIENTRY glProgramUniform4ivEXT (GLuint program, GLint location, GLsizei count, const GLint *value); +GLAPI void APIENTRY glProgramUniformMatrix2fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glProgramUniformMatrix3fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glProgramUniformMatrix4fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glProgramUniformMatrix2x3fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glProgramUniformMatrix3x2fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glProgramUniformMatrix2x4fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glProgramUniformMatrix4x2fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glProgramUniformMatrix3x4fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glProgramUniformMatrix4x3fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GLAPI void APIENTRY glTextureBufferEXT (GLuint texture, GLenum target, GLenum internalformat, GLuint buffer); +GLAPI void APIENTRY glMultiTexBufferEXT (GLenum texunit, GLenum target, GLenum internalformat, GLuint buffer); +GLAPI void APIENTRY glTextureParameterIivEXT (GLuint texture, GLenum target, GLenum pname, const GLint *params); +GLAPI void APIENTRY glTextureParameterIuivEXT (GLuint texture, GLenum target, GLenum pname, const GLuint *params); +GLAPI void APIENTRY glGetTextureParameterIivEXT (GLuint texture, GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetTextureParameterIuivEXT (GLuint texture, GLenum target, GLenum pname, GLuint *params); +GLAPI void APIENTRY glMultiTexParameterIivEXT (GLenum texunit, GLenum target, GLenum pname, const GLint *params); +GLAPI void APIENTRY glMultiTexParameterIuivEXT (GLenum texunit, GLenum target, GLenum pname, const GLuint *params); +GLAPI void APIENTRY glGetMultiTexParameterIivEXT (GLenum texunit, GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetMultiTexParameterIuivEXT (GLenum texunit, GLenum target, GLenum pname, GLuint *params); +GLAPI void APIENTRY glProgramUniform1uiEXT (GLuint program, GLint location, GLuint v0); +GLAPI void APIENTRY glProgramUniform2uiEXT (GLuint program, GLint location, GLuint v0, GLuint v1); +GLAPI void APIENTRY glProgramUniform3uiEXT (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2); +GLAPI void APIENTRY glProgramUniform4uiEXT (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); +GLAPI void APIENTRY glProgramUniform1uivEXT (GLuint program, GLint location, GLsizei count, const GLuint *value); +GLAPI void APIENTRY glProgramUniform2uivEXT (GLuint program, GLint location, GLsizei count, const GLuint *value); +GLAPI void APIENTRY glProgramUniform3uivEXT (GLuint program, GLint location, GLsizei count, const GLuint *value); +GLAPI void APIENTRY glProgramUniform4uivEXT (GLuint program, GLint location, GLsizei count, const GLuint *value); +GLAPI void APIENTRY glNamedProgramLocalParameters4fvEXT (GLuint program, GLenum target, GLuint index, GLsizei count, const GLfloat *params); +GLAPI void APIENTRY glNamedProgramLocalParameterI4iEXT (GLuint program, GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w); +GLAPI void APIENTRY glNamedProgramLocalParameterI4ivEXT (GLuint program, GLenum target, GLuint index, const GLint *params); +GLAPI void APIENTRY glNamedProgramLocalParametersI4ivEXT (GLuint program, GLenum target, GLuint index, GLsizei count, const GLint *params); +GLAPI void APIENTRY glNamedProgramLocalParameterI4uiEXT (GLuint program, GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); +GLAPI void APIENTRY glNamedProgramLocalParameterI4uivEXT (GLuint program, GLenum target, GLuint index, const GLuint *params); +GLAPI void APIENTRY glNamedProgramLocalParametersI4uivEXT (GLuint program, GLenum target, GLuint index, GLsizei count, const GLuint *params); +GLAPI void APIENTRY glGetNamedProgramLocalParameterIivEXT (GLuint program, GLenum target, GLuint index, GLint *params); +GLAPI void APIENTRY glGetNamedProgramLocalParameterIuivEXT (GLuint program, GLenum target, GLuint index, GLuint *params); +GLAPI void APIENTRY glEnableClientStateiEXT (GLenum array, GLuint index); +GLAPI void APIENTRY glDisableClientStateiEXT (GLenum array, GLuint index); +GLAPI void APIENTRY glGetFloati_vEXT (GLenum pname, GLuint index, GLfloat *params); +GLAPI void APIENTRY glGetDoublei_vEXT (GLenum pname, GLuint index, GLdouble *params); +GLAPI void APIENTRY glGetPointeri_vEXT (GLenum pname, GLuint index, void **params); +GLAPI void APIENTRY glNamedProgramStringEXT (GLuint program, GLenum target, GLenum format, GLsizei len, const void *string); +GLAPI void APIENTRY glNamedProgramLocalParameter4dEXT (GLuint program, GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +GLAPI void APIENTRY glNamedProgramLocalParameter4dvEXT (GLuint program, GLenum target, GLuint index, const GLdouble *params); +GLAPI void APIENTRY glNamedProgramLocalParameter4fEXT (GLuint program, GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +GLAPI void APIENTRY glNamedProgramLocalParameter4fvEXT (GLuint program, GLenum target, GLuint index, const GLfloat *params); +GLAPI void APIENTRY glGetNamedProgramLocalParameterdvEXT (GLuint program, GLenum target, GLuint index, GLdouble *params); +GLAPI void APIENTRY glGetNamedProgramLocalParameterfvEXT (GLuint program, GLenum target, GLuint index, GLfloat *params); +GLAPI void APIENTRY glGetNamedProgramivEXT (GLuint program, GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetNamedProgramStringEXT (GLuint program, GLenum target, GLenum pname, void *string); +GLAPI void APIENTRY glNamedRenderbufferStorageEXT (GLuint renderbuffer, GLenum internalformat, GLsizei width, GLsizei height); +GLAPI void APIENTRY glGetNamedRenderbufferParameterivEXT (GLuint renderbuffer, GLenum pname, GLint *params); +GLAPI void APIENTRY glNamedRenderbufferStorageMultisampleEXT (GLuint renderbuffer, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); +GLAPI void APIENTRY glNamedRenderbufferStorageMultisampleCoverageEXT (GLuint renderbuffer, GLsizei coverageSamples, GLsizei colorSamples, GLenum internalformat, GLsizei width, GLsizei height); +GLAPI GLenum APIENTRY glCheckNamedFramebufferStatusEXT (GLuint framebuffer, GLenum target); +GLAPI void APIENTRY glNamedFramebufferTexture1DEXT (GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level); +GLAPI void APIENTRY glNamedFramebufferTexture2DEXT (GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level); +GLAPI void APIENTRY glNamedFramebufferTexture3DEXT (GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); +GLAPI void APIENTRY glNamedFramebufferRenderbufferEXT (GLuint framebuffer, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); +GLAPI void APIENTRY glGetNamedFramebufferAttachmentParameterivEXT (GLuint framebuffer, GLenum attachment, GLenum pname, GLint *params); +GLAPI void APIENTRY glGenerateTextureMipmapEXT (GLuint texture, GLenum target); +GLAPI void APIENTRY glGenerateMultiTexMipmapEXT (GLenum texunit, GLenum target); +GLAPI void APIENTRY glFramebufferDrawBufferEXT (GLuint framebuffer, GLenum mode); +GLAPI void APIENTRY glFramebufferDrawBuffersEXT (GLuint framebuffer, GLsizei n, const GLenum *bufs); +GLAPI void APIENTRY glFramebufferReadBufferEXT (GLuint framebuffer, GLenum mode); +GLAPI void APIENTRY glGetFramebufferParameterivEXT (GLuint framebuffer, GLenum pname, GLint *params); +GLAPI void APIENTRY glNamedCopyBufferSubDataEXT (GLuint readBuffer, GLuint writeBuffer, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); +GLAPI void APIENTRY glNamedFramebufferTextureEXT (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level); +GLAPI void APIENTRY glNamedFramebufferTextureLayerEXT (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLint layer); +GLAPI void APIENTRY glNamedFramebufferTextureFaceEXT (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLenum face); +GLAPI void APIENTRY glTextureRenderbufferEXT (GLuint texture, GLenum target, GLuint renderbuffer); +GLAPI void APIENTRY glMultiTexRenderbufferEXT (GLenum texunit, GLenum target, GLuint renderbuffer); +GLAPI void APIENTRY glVertexArrayVertexOffsetEXT (GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset); +GLAPI void APIENTRY glVertexArrayColorOffsetEXT (GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset); +GLAPI void APIENTRY glVertexArrayEdgeFlagOffsetEXT (GLuint vaobj, GLuint buffer, GLsizei stride, GLintptr offset); +GLAPI void APIENTRY glVertexArrayIndexOffsetEXT (GLuint vaobj, GLuint buffer, GLenum type, GLsizei stride, GLintptr offset); +GLAPI void APIENTRY glVertexArrayNormalOffsetEXT (GLuint vaobj, GLuint buffer, GLenum type, GLsizei stride, GLintptr offset); +GLAPI void APIENTRY glVertexArrayTexCoordOffsetEXT (GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset); +GLAPI void APIENTRY glVertexArrayMultiTexCoordOffsetEXT (GLuint vaobj, GLuint buffer, GLenum texunit, GLint size, GLenum type, GLsizei stride, GLintptr offset); +GLAPI void APIENTRY glVertexArrayFogCoordOffsetEXT (GLuint vaobj, GLuint buffer, GLenum type, GLsizei stride, GLintptr offset); +GLAPI void APIENTRY glVertexArraySecondaryColorOffsetEXT (GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset); +GLAPI void APIENTRY glVertexArrayVertexAttribOffsetEXT (GLuint vaobj, GLuint buffer, GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, GLintptr offset); +GLAPI void APIENTRY glVertexArrayVertexAttribIOffsetEXT (GLuint vaobj, GLuint buffer, GLuint index, GLint size, GLenum type, GLsizei stride, GLintptr offset); +GLAPI void APIENTRY glEnableVertexArrayEXT (GLuint vaobj, GLenum array); +GLAPI void APIENTRY glDisableVertexArrayEXT (GLuint vaobj, GLenum array); +GLAPI void APIENTRY glEnableVertexArrayAttribEXT (GLuint vaobj, GLuint index); +GLAPI void APIENTRY glDisableVertexArrayAttribEXT (GLuint vaobj, GLuint index); +GLAPI void APIENTRY glGetVertexArrayIntegervEXT (GLuint vaobj, GLenum pname, GLint *param); +GLAPI void APIENTRY glGetVertexArrayPointervEXT (GLuint vaobj, GLenum pname, void **param); +GLAPI void APIENTRY glGetVertexArrayIntegeri_vEXT (GLuint vaobj, GLuint index, GLenum pname, GLint *param); +GLAPI void APIENTRY glGetVertexArrayPointeri_vEXT (GLuint vaobj, GLuint index, GLenum pname, void **param); +GLAPI void *APIENTRY glMapNamedBufferRangeEXT (GLuint buffer, GLintptr offset, GLsizeiptr length, GLbitfield access); +GLAPI void APIENTRY glFlushMappedNamedBufferRangeEXT (GLuint buffer, GLintptr offset, GLsizeiptr length); +GLAPI void APIENTRY glNamedBufferStorageEXT (GLuint buffer, GLsizeiptr size, const void *data, GLbitfield flags); +GLAPI void APIENTRY glClearNamedBufferDataEXT (GLuint buffer, GLenum internalformat, GLenum format, GLenum type, const void *data); +GLAPI void APIENTRY glClearNamedBufferSubDataEXT (GLuint buffer, GLenum internalformat, GLsizeiptr offset, GLsizeiptr size, GLenum format, GLenum type, const void *data); +GLAPI void APIENTRY glNamedFramebufferParameteriEXT (GLuint framebuffer, GLenum pname, GLint param); +GLAPI void APIENTRY glGetNamedFramebufferParameterivEXT (GLuint framebuffer, GLenum pname, GLint *params); +GLAPI void APIENTRY glProgramUniform1dEXT (GLuint program, GLint location, GLdouble x); +GLAPI void APIENTRY glProgramUniform2dEXT (GLuint program, GLint location, GLdouble x, GLdouble y); +GLAPI void APIENTRY glProgramUniform3dEXT (GLuint program, GLint location, GLdouble x, GLdouble y, GLdouble z); +GLAPI void APIENTRY glProgramUniform4dEXT (GLuint program, GLint location, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +GLAPI void APIENTRY glProgramUniform1dvEXT (GLuint program, GLint location, GLsizei count, const GLdouble *value); +GLAPI void APIENTRY glProgramUniform2dvEXT (GLuint program, GLint location, GLsizei count, const GLdouble *value); +GLAPI void APIENTRY glProgramUniform3dvEXT (GLuint program, GLint location, GLsizei count, const GLdouble *value); +GLAPI void APIENTRY glProgramUniform4dvEXT (GLuint program, GLint location, GLsizei count, const GLdouble *value); +GLAPI void APIENTRY glProgramUniformMatrix2dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glProgramUniformMatrix3dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glProgramUniformMatrix4dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glProgramUniformMatrix2x3dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glProgramUniformMatrix2x4dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glProgramUniformMatrix3x2dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glProgramUniformMatrix3x4dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glProgramUniformMatrix4x2dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glProgramUniformMatrix4x3dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); +GLAPI void APIENTRY glTextureBufferRangeEXT (GLuint texture, GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size); +GLAPI void APIENTRY glTextureStorage1DEXT (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width); +GLAPI void APIENTRY glTextureStorage2DEXT (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); +GLAPI void APIENTRY glTextureStorage3DEXT (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); +GLAPI void APIENTRY glTextureStorage2DMultisampleEXT (GLuint texture, GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); +GLAPI void APIENTRY glTextureStorage3DMultisampleEXT (GLuint texture, GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); +GLAPI void APIENTRY glVertexArrayBindVertexBufferEXT (GLuint vaobj, GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride); +GLAPI void APIENTRY glVertexArrayVertexAttribFormatEXT (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset); +GLAPI void APIENTRY glVertexArrayVertexAttribIFormatEXT (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); +GLAPI void APIENTRY glVertexArrayVertexAttribLFormatEXT (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); +GLAPI void APIENTRY glVertexArrayVertexAttribBindingEXT (GLuint vaobj, GLuint attribindex, GLuint bindingindex); +GLAPI void APIENTRY glVertexArrayVertexBindingDivisorEXT (GLuint vaobj, GLuint bindingindex, GLuint divisor); +GLAPI void APIENTRY glVertexArrayVertexAttribLOffsetEXT (GLuint vaobj, GLuint buffer, GLuint index, GLint size, GLenum type, GLsizei stride, GLintptr offset); +GLAPI void APIENTRY glTexturePageCommitmentEXT (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLboolean commit); +GLAPI void APIENTRY glVertexArrayVertexAttribDivisorEXT (GLuint vaobj, GLuint index, GLuint divisor); +#endif +#endif /* GL_EXT_direct_state_access */ + +#ifndef GL_EXT_draw_buffers2 +#define GL_EXT_draw_buffers2 1 +typedef void (APIENTRYP PFNGLCOLORMASKINDEXEDEXTPROC) (GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glColorMaskIndexedEXT (GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a); +#endif +#endif /* GL_EXT_draw_buffers2 */ + +#ifndef GL_EXT_draw_instanced +#define GL_EXT_draw_instanced 1 +typedef void (APIENTRYP PFNGLDRAWARRAYSINSTANCEDEXTPROC) (GLenum mode, GLint start, GLsizei count, GLsizei primcount); +typedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDEXTPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei primcount); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glDrawArraysInstancedEXT (GLenum mode, GLint start, GLsizei count, GLsizei primcount); +GLAPI void APIENTRY glDrawElementsInstancedEXT (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei primcount); +#endif +#endif /* GL_EXT_draw_instanced */ + +#ifndef GL_EXT_draw_range_elements +#define GL_EXT_draw_range_elements 1 +#define GL_MAX_ELEMENTS_VERTICES_EXT 0x80E8 +#define GL_MAX_ELEMENTS_INDICES_EXT 0x80E9 +typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTSEXTPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glDrawRangeElementsEXT (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices); +#endif +#endif /* GL_EXT_draw_range_elements */ + +#ifndef GL_EXT_external_buffer +#define GL_EXT_external_buffer 1 +typedef void *GLeglClientBufferEXT; +typedef void (APIENTRYP PFNGLBUFFERSTORAGEEXTERNALEXTPROC) (GLenum target, GLintptr offset, GLsizeiptr size, GLeglClientBufferEXT clientBuffer, GLbitfield flags); +typedef void (APIENTRYP PFNGLNAMEDBUFFERSTORAGEEXTERNALEXTPROC) (GLuint buffer, GLintptr offset, GLsizeiptr size, GLeglClientBufferEXT clientBuffer, GLbitfield flags); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBufferStorageExternalEXT (GLenum target, GLintptr offset, GLsizeiptr size, GLeglClientBufferEXT clientBuffer, GLbitfield flags); +GLAPI void APIENTRY glNamedBufferStorageExternalEXT (GLuint buffer, GLintptr offset, GLsizeiptr size, GLeglClientBufferEXT clientBuffer, GLbitfield flags); +#endif +#endif /* GL_EXT_external_buffer */ + +#ifndef GL_EXT_fog_coord +#define GL_EXT_fog_coord 1 +#define GL_FOG_COORDINATE_SOURCE_EXT 0x8450 +#define GL_FOG_COORDINATE_EXT 0x8451 +#define GL_FRAGMENT_DEPTH_EXT 0x8452 +#define GL_CURRENT_FOG_COORDINATE_EXT 0x8453 +#define GL_FOG_COORDINATE_ARRAY_TYPE_EXT 0x8454 +#define GL_FOG_COORDINATE_ARRAY_STRIDE_EXT 0x8455 +#define GL_FOG_COORDINATE_ARRAY_POINTER_EXT 0x8456 +#define GL_FOG_COORDINATE_ARRAY_EXT 0x8457 +typedef void (APIENTRYP PFNGLFOGCOORDFEXTPROC) (GLfloat coord); +typedef void (APIENTRYP PFNGLFOGCOORDFVEXTPROC) (const GLfloat *coord); +typedef void (APIENTRYP PFNGLFOGCOORDDEXTPROC) (GLdouble coord); +typedef void (APIENTRYP PFNGLFOGCOORDDVEXTPROC) (const GLdouble *coord); +typedef void (APIENTRYP PFNGLFOGCOORDPOINTEREXTPROC) (GLenum type, GLsizei stride, const void *pointer); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glFogCoordfEXT (GLfloat coord); +GLAPI void APIENTRY glFogCoordfvEXT (const GLfloat *coord); +GLAPI void APIENTRY glFogCoorddEXT (GLdouble coord); +GLAPI void APIENTRY glFogCoorddvEXT (const GLdouble *coord); +GLAPI void APIENTRY glFogCoordPointerEXT (GLenum type, GLsizei stride, const void *pointer); +#endif +#endif /* GL_EXT_fog_coord */ + +#ifndef GL_EXT_framebuffer_blit +#define GL_EXT_framebuffer_blit 1 +#define GL_READ_FRAMEBUFFER_EXT 0x8CA8 +#define GL_DRAW_FRAMEBUFFER_EXT 0x8CA9 +#define GL_DRAW_FRAMEBUFFER_BINDING_EXT 0x8CA6 +#define GL_READ_FRAMEBUFFER_BINDING_EXT 0x8CAA +typedef void (APIENTRYP PFNGLBLITFRAMEBUFFEREXTPROC) (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBlitFramebufferEXT (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); +#endif +#endif /* GL_EXT_framebuffer_blit */ + +#ifndef GL_EXT_framebuffer_multisample +#define GL_EXT_framebuffer_multisample 1 +#define GL_RENDERBUFFER_SAMPLES_EXT 0x8CAB +#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_EXT 0x8D56 +#define GL_MAX_SAMPLES_EXT 0x8D57 +typedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glRenderbufferStorageMultisampleEXT (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); +#endif +#endif /* GL_EXT_framebuffer_multisample */ + +#ifndef GL_EXT_framebuffer_multisample_blit_scaled +#define GL_EXT_framebuffer_multisample_blit_scaled 1 +#define GL_SCALED_RESOLVE_FASTEST_EXT 0x90BA +#define GL_SCALED_RESOLVE_NICEST_EXT 0x90BB +#endif /* GL_EXT_framebuffer_multisample_blit_scaled */ + +#ifndef GL_EXT_framebuffer_object +#define GL_EXT_framebuffer_object 1 +#define GL_INVALID_FRAMEBUFFER_OPERATION_EXT 0x0506 +#define GL_MAX_RENDERBUFFER_SIZE_EXT 0x84E8 +#define GL_FRAMEBUFFER_BINDING_EXT 0x8CA6 +#define GL_RENDERBUFFER_BINDING_EXT 0x8CA7 +#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE_EXT 0x8CD0 +#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_EXT 0x8CD1 +#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL_EXT 0x8CD2 +#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE_EXT 0x8CD3 +#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_3D_ZOFFSET_EXT 0x8CD4 +#define GL_FRAMEBUFFER_COMPLETE_EXT 0x8CD5 +#define GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT 0x8CD6 +#define GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT 0x8CD7 +#define GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT 0x8CD9 +#define GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT 0x8CDA +#define GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT 0x8CDB +#define GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT 0x8CDC +#define GL_FRAMEBUFFER_UNSUPPORTED_EXT 0x8CDD +#define GL_MAX_COLOR_ATTACHMENTS_EXT 0x8CDF +#define GL_COLOR_ATTACHMENT0_EXT 0x8CE0 +#define GL_COLOR_ATTACHMENT1_EXT 0x8CE1 +#define GL_COLOR_ATTACHMENT2_EXT 0x8CE2 +#define GL_COLOR_ATTACHMENT3_EXT 0x8CE3 +#define GL_COLOR_ATTACHMENT4_EXT 0x8CE4 +#define GL_COLOR_ATTACHMENT5_EXT 0x8CE5 +#define GL_COLOR_ATTACHMENT6_EXT 0x8CE6 +#define GL_COLOR_ATTACHMENT7_EXT 0x8CE7 +#define GL_COLOR_ATTACHMENT8_EXT 0x8CE8 +#define GL_COLOR_ATTACHMENT9_EXT 0x8CE9 +#define GL_COLOR_ATTACHMENT10_EXT 0x8CEA +#define GL_COLOR_ATTACHMENT11_EXT 0x8CEB +#define GL_COLOR_ATTACHMENT12_EXT 0x8CEC +#define GL_COLOR_ATTACHMENT13_EXT 0x8CED +#define GL_COLOR_ATTACHMENT14_EXT 0x8CEE +#define GL_COLOR_ATTACHMENT15_EXT 0x8CEF +#define GL_DEPTH_ATTACHMENT_EXT 0x8D00 +#define GL_STENCIL_ATTACHMENT_EXT 0x8D20 +#define GL_FRAMEBUFFER_EXT 0x8D40 +#define GL_RENDERBUFFER_EXT 0x8D41 +#define GL_RENDERBUFFER_WIDTH_EXT 0x8D42 +#define GL_RENDERBUFFER_HEIGHT_EXT 0x8D43 +#define GL_RENDERBUFFER_INTERNAL_FORMAT_EXT 0x8D44 +#define GL_STENCIL_INDEX1_EXT 0x8D46 +#define GL_STENCIL_INDEX4_EXT 0x8D47 +#define GL_STENCIL_INDEX8_EXT 0x8D48 +#define GL_STENCIL_INDEX16_EXT 0x8D49 +#define GL_RENDERBUFFER_RED_SIZE_EXT 0x8D50 +#define GL_RENDERBUFFER_GREEN_SIZE_EXT 0x8D51 +#define GL_RENDERBUFFER_BLUE_SIZE_EXT 0x8D52 +#define GL_RENDERBUFFER_ALPHA_SIZE_EXT 0x8D53 +#define GL_RENDERBUFFER_DEPTH_SIZE_EXT 0x8D54 +#define GL_RENDERBUFFER_STENCIL_SIZE_EXT 0x8D55 +typedef GLboolean (APIENTRYP PFNGLISRENDERBUFFEREXTPROC) (GLuint renderbuffer); +typedef void (APIENTRYP PFNGLBINDRENDERBUFFEREXTPROC) (GLenum target, GLuint renderbuffer); +typedef void (APIENTRYP PFNGLDELETERENDERBUFFERSEXTPROC) (GLsizei n, const GLuint *renderbuffers); +typedef void (APIENTRYP PFNGLGENRENDERBUFFERSEXTPROC) (GLsizei n, GLuint *renderbuffers); +typedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEEXTPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height); +typedef void (APIENTRYP PFNGLGETRENDERBUFFERPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params); +typedef GLboolean (APIENTRYP PFNGLISFRAMEBUFFEREXTPROC) (GLuint framebuffer); +typedef void (APIENTRYP PFNGLBINDFRAMEBUFFEREXTPROC) (GLenum target, GLuint framebuffer); +typedef void (APIENTRYP PFNGLDELETEFRAMEBUFFERSEXTPROC) (GLsizei n, const GLuint *framebuffers); +typedef void (APIENTRYP PFNGLGENFRAMEBUFFERSEXTPROC) (GLsizei n, GLuint *framebuffers); +typedef GLenum (APIENTRYP PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC) (GLenum target); +typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE1DEXTPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); +typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE2DEXTPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); +typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE3DEXTPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); +typedef void (APIENTRYP PFNGLFRAMEBUFFERRENDERBUFFEREXTPROC) (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); +typedef void (APIENTRYP PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC) (GLenum target, GLenum attachment, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGENERATEMIPMAPEXTPROC) (GLenum target); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI GLboolean APIENTRY glIsRenderbufferEXT (GLuint renderbuffer); +GLAPI void APIENTRY glBindRenderbufferEXT (GLenum target, GLuint renderbuffer); +GLAPI void APIENTRY glDeleteRenderbuffersEXT (GLsizei n, const GLuint *renderbuffers); +GLAPI void APIENTRY glGenRenderbuffersEXT (GLsizei n, GLuint *renderbuffers); +GLAPI void APIENTRY glRenderbufferStorageEXT (GLenum target, GLenum internalformat, GLsizei width, GLsizei height); +GLAPI void APIENTRY glGetRenderbufferParameterivEXT (GLenum target, GLenum pname, GLint *params); +GLAPI GLboolean APIENTRY glIsFramebufferEXT (GLuint framebuffer); +GLAPI void APIENTRY glBindFramebufferEXT (GLenum target, GLuint framebuffer); +GLAPI void APIENTRY glDeleteFramebuffersEXT (GLsizei n, const GLuint *framebuffers); +GLAPI void APIENTRY glGenFramebuffersEXT (GLsizei n, GLuint *framebuffers); +GLAPI GLenum APIENTRY glCheckFramebufferStatusEXT (GLenum target); +GLAPI void APIENTRY glFramebufferTexture1DEXT (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); +GLAPI void APIENTRY glFramebufferTexture2DEXT (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); +GLAPI void APIENTRY glFramebufferTexture3DEXT (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); +GLAPI void APIENTRY glFramebufferRenderbufferEXT (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); +GLAPI void APIENTRY glGetFramebufferAttachmentParameterivEXT (GLenum target, GLenum attachment, GLenum pname, GLint *params); +GLAPI void APIENTRY glGenerateMipmapEXT (GLenum target); +#endif +#endif /* GL_EXT_framebuffer_object */ + +#ifndef GL_EXT_framebuffer_sRGB +#define GL_EXT_framebuffer_sRGB 1 +#define GL_FRAMEBUFFER_SRGB_EXT 0x8DB9 +#define GL_FRAMEBUFFER_SRGB_CAPABLE_EXT 0x8DBA +#endif /* GL_EXT_framebuffer_sRGB */ + +#ifndef GL_EXT_geometry_shader4 +#define GL_EXT_geometry_shader4 1 +#define GL_GEOMETRY_SHADER_EXT 0x8DD9 +#define GL_GEOMETRY_VERTICES_OUT_EXT 0x8DDA +#define GL_GEOMETRY_INPUT_TYPE_EXT 0x8DDB +#define GL_GEOMETRY_OUTPUT_TYPE_EXT 0x8DDC +#define GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS_EXT 0x8C29 +#define GL_MAX_GEOMETRY_VARYING_COMPONENTS_EXT 0x8DDD +#define GL_MAX_VERTEX_VARYING_COMPONENTS_EXT 0x8DDE +#define GL_MAX_VARYING_COMPONENTS_EXT 0x8B4B +#define GL_MAX_GEOMETRY_UNIFORM_COMPONENTS_EXT 0x8DDF +#define GL_MAX_GEOMETRY_OUTPUT_VERTICES_EXT 0x8DE0 +#define GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS_EXT 0x8DE1 +#define GL_LINES_ADJACENCY_EXT 0x000A +#define GL_LINE_STRIP_ADJACENCY_EXT 0x000B +#define GL_TRIANGLES_ADJACENCY_EXT 0x000C +#define GL_TRIANGLE_STRIP_ADJACENCY_EXT 0x000D +#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS_EXT 0x8DA8 +#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_COUNT_EXT 0x8DA9 +#define GL_FRAMEBUFFER_ATTACHMENT_LAYERED_EXT 0x8DA7 +#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER_EXT 0x8CD4 +#define GL_PROGRAM_POINT_SIZE_EXT 0x8642 +typedef void (APIENTRYP PFNGLPROGRAMPARAMETERIEXTPROC) (GLuint program, GLenum pname, GLint value); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glProgramParameteriEXT (GLuint program, GLenum pname, GLint value); +#endif +#endif /* GL_EXT_geometry_shader4 */ + +#ifndef GL_EXT_gpu_program_parameters +#define GL_EXT_gpu_program_parameters 1 +typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERS4FVEXTPROC) (GLenum target, GLuint index, GLsizei count, const GLfloat *params); +typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERS4FVEXTPROC) (GLenum target, GLuint index, GLsizei count, const GLfloat *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glProgramEnvParameters4fvEXT (GLenum target, GLuint index, GLsizei count, const GLfloat *params); +GLAPI void APIENTRY glProgramLocalParameters4fvEXT (GLenum target, GLuint index, GLsizei count, const GLfloat *params); +#endif +#endif /* GL_EXT_gpu_program_parameters */ + +#ifndef GL_EXT_gpu_shader4 +#define GL_EXT_gpu_shader4 1 +#define GL_SAMPLER_1D_ARRAY_EXT 0x8DC0 +#define GL_SAMPLER_2D_ARRAY_EXT 0x8DC1 +#define GL_SAMPLER_BUFFER_EXT 0x8DC2 +#define GL_SAMPLER_1D_ARRAY_SHADOW_EXT 0x8DC3 +#define GL_SAMPLER_2D_ARRAY_SHADOW_EXT 0x8DC4 +#define GL_SAMPLER_CUBE_SHADOW_EXT 0x8DC5 +#define GL_UNSIGNED_INT_VEC2_EXT 0x8DC6 +#define GL_UNSIGNED_INT_VEC3_EXT 0x8DC7 +#define GL_UNSIGNED_INT_VEC4_EXT 0x8DC8 +#define GL_INT_SAMPLER_1D_EXT 0x8DC9 +#define GL_INT_SAMPLER_2D_EXT 0x8DCA +#define GL_INT_SAMPLER_3D_EXT 0x8DCB +#define GL_INT_SAMPLER_CUBE_EXT 0x8DCC +#define GL_INT_SAMPLER_2D_RECT_EXT 0x8DCD +#define GL_INT_SAMPLER_1D_ARRAY_EXT 0x8DCE +#define GL_INT_SAMPLER_2D_ARRAY_EXT 0x8DCF +#define GL_INT_SAMPLER_BUFFER_EXT 0x8DD0 +#define GL_UNSIGNED_INT_SAMPLER_1D_EXT 0x8DD1 +#define GL_UNSIGNED_INT_SAMPLER_2D_EXT 0x8DD2 +#define GL_UNSIGNED_INT_SAMPLER_3D_EXT 0x8DD3 +#define GL_UNSIGNED_INT_SAMPLER_CUBE_EXT 0x8DD4 +#define GL_UNSIGNED_INT_SAMPLER_2D_RECT_EXT 0x8DD5 +#define GL_UNSIGNED_INT_SAMPLER_1D_ARRAY_EXT 0x8DD6 +#define GL_UNSIGNED_INT_SAMPLER_2D_ARRAY_EXT 0x8DD7 +#define GL_UNSIGNED_INT_SAMPLER_BUFFER_EXT 0x8DD8 +#define GL_MIN_PROGRAM_TEXEL_OFFSET_EXT 0x8904 +#define GL_MAX_PROGRAM_TEXEL_OFFSET_EXT 0x8905 +#define GL_VERTEX_ATTRIB_ARRAY_INTEGER_EXT 0x88FD +typedef void (APIENTRYP PFNGLGETUNIFORMUIVEXTPROC) (GLuint program, GLint location, GLuint *params); +typedef void (APIENTRYP PFNGLBINDFRAGDATALOCATIONEXTPROC) (GLuint program, GLuint color, const GLchar *name); +typedef GLint (APIENTRYP PFNGLGETFRAGDATALOCATIONEXTPROC) (GLuint program, const GLchar *name); +typedef void (APIENTRYP PFNGLUNIFORM1UIEXTPROC) (GLint location, GLuint v0); +typedef void (APIENTRYP PFNGLUNIFORM2UIEXTPROC) (GLint location, GLuint v0, GLuint v1); +typedef void (APIENTRYP PFNGLUNIFORM3UIEXTPROC) (GLint location, GLuint v0, GLuint v1, GLuint v2); +typedef void (APIENTRYP PFNGLUNIFORM4UIEXTPROC) (GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); +typedef void (APIENTRYP PFNGLUNIFORM1UIVEXTPROC) (GLint location, GLsizei count, const GLuint *value); +typedef void (APIENTRYP PFNGLUNIFORM2UIVEXTPROC) (GLint location, GLsizei count, const GLuint *value); +typedef void (APIENTRYP PFNGLUNIFORM3UIVEXTPROC) (GLint location, GLsizei count, const GLuint *value); +typedef void (APIENTRYP PFNGLUNIFORM4UIVEXTPROC) (GLint location, GLsizei count, const GLuint *value); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI1IEXTPROC) (GLuint index, GLint x); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI2IEXTPROC) (GLuint index, GLint x, GLint y); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI3IEXTPROC) (GLuint index, GLint x, GLint y, GLint z); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI4IEXTPROC) (GLuint index, GLint x, GLint y, GLint z, GLint w); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI1UIEXTPROC) (GLuint index, GLuint x); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI2UIEXTPROC) (GLuint index, GLuint x, GLuint y); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI3UIEXTPROC) (GLuint index, GLuint x, GLuint y, GLuint z); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI4UIEXTPROC) (GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI1IVEXTPROC) (GLuint index, const GLint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI2IVEXTPROC) (GLuint index, const GLint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI3IVEXTPROC) (GLuint index, const GLint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI4IVEXTPROC) (GLuint index, const GLint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI1UIVEXTPROC) (GLuint index, const GLuint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI2UIVEXTPROC) (GLuint index, const GLuint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI3UIVEXTPROC) (GLuint index, const GLuint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI4UIVEXTPROC) (GLuint index, const GLuint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI4BVEXTPROC) (GLuint index, const GLbyte *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI4SVEXTPROC) (GLuint index, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI4UBVEXTPROC) (GLuint index, const GLubyte *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBI4USVEXTPROC) (GLuint index, const GLushort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBIPOINTEREXTPROC) (GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIIVEXTPROC) (GLuint index, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIUIVEXTPROC) (GLuint index, GLenum pname, GLuint *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glGetUniformuivEXT (GLuint program, GLint location, GLuint *params); +GLAPI void APIENTRY glBindFragDataLocationEXT (GLuint program, GLuint color, const GLchar *name); +GLAPI GLint APIENTRY glGetFragDataLocationEXT (GLuint program, const GLchar *name); +GLAPI void APIENTRY glUniform1uiEXT (GLint location, GLuint v0); +GLAPI void APIENTRY glUniform2uiEXT (GLint location, GLuint v0, GLuint v1); +GLAPI void APIENTRY glUniform3uiEXT (GLint location, GLuint v0, GLuint v1, GLuint v2); +GLAPI void APIENTRY glUniform4uiEXT (GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); +GLAPI void APIENTRY glUniform1uivEXT (GLint location, GLsizei count, const GLuint *value); +GLAPI void APIENTRY glUniform2uivEXT (GLint location, GLsizei count, const GLuint *value); +GLAPI void APIENTRY glUniform3uivEXT (GLint location, GLsizei count, const GLuint *value); +GLAPI void APIENTRY glUniform4uivEXT (GLint location, GLsizei count, const GLuint *value); +GLAPI void APIENTRY glVertexAttribI1iEXT (GLuint index, GLint x); +GLAPI void APIENTRY glVertexAttribI2iEXT (GLuint index, GLint x, GLint y); +GLAPI void APIENTRY glVertexAttribI3iEXT (GLuint index, GLint x, GLint y, GLint z); +GLAPI void APIENTRY glVertexAttribI4iEXT (GLuint index, GLint x, GLint y, GLint z, GLint w); +GLAPI void APIENTRY glVertexAttribI1uiEXT (GLuint index, GLuint x); +GLAPI void APIENTRY glVertexAttribI2uiEXT (GLuint index, GLuint x, GLuint y); +GLAPI void APIENTRY glVertexAttribI3uiEXT (GLuint index, GLuint x, GLuint y, GLuint z); +GLAPI void APIENTRY glVertexAttribI4uiEXT (GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); +GLAPI void APIENTRY glVertexAttribI1ivEXT (GLuint index, const GLint *v); +GLAPI void APIENTRY glVertexAttribI2ivEXT (GLuint index, const GLint *v); +GLAPI void APIENTRY glVertexAttribI3ivEXT (GLuint index, const GLint *v); +GLAPI void APIENTRY glVertexAttribI4ivEXT (GLuint index, const GLint *v); +GLAPI void APIENTRY glVertexAttribI1uivEXT (GLuint index, const GLuint *v); +GLAPI void APIENTRY glVertexAttribI2uivEXT (GLuint index, const GLuint *v); +GLAPI void APIENTRY glVertexAttribI3uivEXT (GLuint index, const GLuint *v); +GLAPI void APIENTRY glVertexAttribI4uivEXT (GLuint index, const GLuint *v); +GLAPI void APIENTRY glVertexAttribI4bvEXT (GLuint index, const GLbyte *v); +GLAPI void APIENTRY glVertexAttribI4svEXT (GLuint index, const GLshort *v); +GLAPI void APIENTRY glVertexAttribI4ubvEXT (GLuint index, const GLubyte *v); +GLAPI void APIENTRY glVertexAttribI4usvEXT (GLuint index, const GLushort *v); +GLAPI void APIENTRY glVertexAttribIPointerEXT (GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer); +GLAPI void APIENTRY glGetVertexAttribIivEXT (GLuint index, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetVertexAttribIuivEXT (GLuint index, GLenum pname, GLuint *params); +#endif +#endif /* GL_EXT_gpu_shader4 */ + +#ifndef GL_EXT_histogram +#define GL_EXT_histogram 1 +#define GL_HISTOGRAM_EXT 0x8024 +#define GL_PROXY_HISTOGRAM_EXT 0x8025 +#define GL_HISTOGRAM_WIDTH_EXT 0x8026 +#define GL_HISTOGRAM_FORMAT_EXT 0x8027 +#define GL_HISTOGRAM_RED_SIZE_EXT 0x8028 +#define GL_HISTOGRAM_GREEN_SIZE_EXT 0x8029 +#define GL_HISTOGRAM_BLUE_SIZE_EXT 0x802A +#define GL_HISTOGRAM_ALPHA_SIZE_EXT 0x802B +#define GL_HISTOGRAM_LUMINANCE_SIZE_EXT 0x802C +#define GL_HISTOGRAM_SINK_EXT 0x802D +#define GL_MINMAX_EXT 0x802E +#define GL_MINMAX_FORMAT_EXT 0x802F +#define GL_MINMAX_SINK_EXT 0x8030 +#define GL_TABLE_TOO_LARGE_EXT 0x8031 +typedef void (APIENTRYP PFNGLGETHISTOGRAMEXTPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, void *values); +typedef void (APIENTRYP PFNGLGETHISTOGRAMPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETHISTOGRAMPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETMINMAXEXTPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, void *values); +typedef void (APIENTRYP PFNGLGETMINMAXPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETMINMAXPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLHISTOGRAMEXTPROC) (GLenum target, GLsizei width, GLenum internalformat, GLboolean sink); +typedef void (APIENTRYP PFNGLMINMAXEXTPROC) (GLenum target, GLenum internalformat, GLboolean sink); +typedef void (APIENTRYP PFNGLRESETHISTOGRAMEXTPROC) (GLenum target); +typedef void (APIENTRYP PFNGLRESETMINMAXEXTPROC) (GLenum target); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glGetHistogramEXT (GLenum target, GLboolean reset, GLenum format, GLenum type, void *values); +GLAPI void APIENTRY glGetHistogramParameterfvEXT (GLenum target, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetHistogramParameterivEXT (GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetMinmaxEXT (GLenum target, GLboolean reset, GLenum format, GLenum type, void *values); +GLAPI void APIENTRY glGetMinmaxParameterfvEXT (GLenum target, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetMinmaxParameterivEXT (GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glHistogramEXT (GLenum target, GLsizei width, GLenum internalformat, GLboolean sink); +GLAPI void APIENTRY glMinmaxEXT (GLenum target, GLenum internalformat, GLboolean sink); +GLAPI void APIENTRY glResetHistogramEXT (GLenum target); +GLAPI void APIENTRY glResetMinmaxEXT (GLenum target); +#endif +#endif /* GL_EXT_histogram */ + +#ifndef GL_EXT_index_array_formats +#define GL_EXT_index_array_formats 1 +#define GL_IUI_V2F_EXT 0x81AD +#define GL_IUI_V3F_EXT 0x81AE +#define GL_IUI_N3F_V2F_EXT 0x81AF +#define GL_IUI_N3F_V3F_EXT 0x81B0 +#define GL_T2F_IUI_V2F_EXT 0x81B1 +#define GL_T2F_IUI_V3F_EXT 0x81B2 +#define GL_T2F_IUI_N3F_V2F_EXT 0x81B3 +#define GL_T2F_IUI_N3F_V3F_EXT 0x81B4 +#endif /* GL_EXT_index_array_formats */ + +#ifndef GL_EXT_index_func +#define GL_EXT_index_func 1 +#define GL_INDEX_TEST_EXT 0x81B5 +#define GL_INDEX_TEST_FUNC_EXT 0x81B6 +#define GL_INDEX_TEST_REF_EXT 0x81B7 +typedef void (APIENTRYP PFNGLINDEXFUNCEXTPROC) (GLenum func, GLclampf ref); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glIndexFuncEXT (GLenum func, GLclampf ref); +#endif +#endif /* GL_EXT_index_func */ + +#ifndef GL_EXT_index_material +#define GL_EXT_index_material 1 +#define GL_INDEX_MATERIAL_EXT 0x81B8 +#define GL_INDEX_MATERIAL_PARAMETER_EXT 0x81B9 +#define GL_INDEX_MATERIAL_FACE_EXT 0x81BA +typedef void (APIENTRYP PFNGLINDEXMATERIALEXTPROC) (GLenum face, GLenum mode); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glIndexMaterialEXT (GLenum face, GLenum mode); +#endif +#endif /* GL_EXT_index_material */ + +#ifndef GL_EXT_index_texture +#define GL_EXT_index_texture 1 +#endif /* GL_EXT_index_texture */ + +#ifndef GL_EXT_light_texture +#define GL_EXT_light_texture 1 +#define GL_FRAGMENT_MATERIAL_EXT 0x8349 +#define GL_FRAGMENT_NORMAL_EXT 0x834A +#define GL_FRAGMENT_COLOR_EXT 0x834C +#define GL_ATTENUATION_EXT 0x834D +#define GL_SHADOW_ATTENUATION_EXT 0x834E +#define GL_TEXTURE_APPLICATION_MODE_EXT 0x834F +#define GL_TEXTURE_LIGHT_EXT 0x8350 +#define GL_TEXTURE_MATERIAL_FACE_EXT 0x8351 +#define GL_TEXTURE_MATERIAL_PARAMETER_EXT 0x8352 +typedef void (APIENTRYP PFNGLAPPLYTEXTUREEXTPROC) (GLenum mode); +typedef void (APIENTRYP PFNGLTEXTURELIGHTEXTPROC) (GLenum pname); +typedef void (APIENTRYP PFNGLTEXTUREMATERIALEXTPROC) (GLenum face, GLenum mode); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glApplyTextureEXT (GLenum mode); +GLAPI void APIENTRY glTextureLightEXT (GLenum pname); +GLAPI void APIENTRY glTextureMaterialEXT (GLenum face, GLenum mode); +#endif +#endif /* GL_EXT_light_texture */ + +#ifndef GL_EXT_memory_object +#define GL_EXT_memory_object 1 +#define GL_TEXTURE_TILING_EXT 0x9580 +#define GL_DEDICATED_MEMORY_OBJECT_EXT 0x9581 +#define GL_PROTECTED_MEMORY_OBJECT_EXT 0x959B +#define GL_NUM_TILING_TYPES_EXT 0x9582 +#define GL_TILING_TYPES_EXT 0x9583 +#define GL_OPTIMAL_TILING_EXT 0x9584 +#define GL_LINEAR_TILING_EXT 0x9585 +#define GL_NUM_DEVICE_UUIDS_EXT 0x9596 +#define GL_DEVICE_UUID_EXT 0x9597 +#define GL_DRIVER_UUID_EXT 0x9598 +#define GL_UUID_SIZE_EXT 16 +typedef void (APIENTRYP PFNGLGETUNSIGNEDBYTEVEXTPROC) (GLenum pname, GLubyte *data); +typedef void (APIENTRYP PFNGLGETUNSIGNEDBYTEI_VEXTPROC) (GLenum target, GLuint index, GLubyte *data); +typedef void (APIENTRYP PFNGLDELETEMEMORYOBJECTSEXTPROC) (GLsizei n, const GLuint *memoryObjects); +typedef GLboolean (APIENTRYP PFNGLISMEMORYOBJECTEXTPROC) (GLuint memoryObject); +typedef void (APIENTRYP PFNGLCREATEMEMORYOBJECTSEXTPROC) (GLsizei n, GLuint *memoryObjects); +typedef void (APIENTRYP PFNGLMEMORYOBJECTPARAMETERIVEXTPROC) (GLuint memoryObject, GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLGETMEMORYOBJECTPARAMETERIVEXTPROC) (GLuint memoryObject, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLTEXSTORAGEMEM2DEXTPROC) (GLenum target, GLsizei levels, GLenum internalFormat, GLsizei width, GLsizei height, GLuint memory, GLuint64 offset); +typedef void (APIENTRYP PFNGLTEXSTORAGEMEM2DMULTISAMPLEEXTPROC) (GLenum target, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations, GLuint memory, GLuint64 offset); +typedef void (APIENTRYP PFNGLTEXSTORAGEMEM3DEXTPROC) (GLenum target, GLsizei levels, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLuint memory, GLuint64 offset); +typedef void (APIENTRYP PFNGLTEXSTORAGEMEM3DMULTISAMPLEEXTPROC) (GLenum target, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations, GLuint memory, GLuint64 offset); +typedef void (APIENTRYP PFNGLBUFFERSTORAGEMEMEXTPROC) (GLenum target, GLsizeiptr size, GLuint memory, GLuint64 offset); +typedef void (APIENTRYP PFNGLTEXTURESTORAGEMEM2DEXTPROC) (GLuint texture, GLsizei levels, GLenum internalFormat, GLsizei width, GLsizei height, GLuint memory, GLuint64 offset); +typedef void (APIENTRYP PFNGLTEXTURESTORAGEMEM2DMULTISAMPLEEXTPROC) (GLuint texture, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations, GLuint memory, GLuint64 offset); +typedef void (APIENTRYP PFNGLTEXTURESTORAGEMEM3DEXTPROC) (GLuint texture, GLsizei levels, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLuint memory, GLuint64 offset); +typedef void (APIENTRYP PFNGLTEXTURESTORAGEMEM3DMULTISAMPLEEXTPROC) (GLuint texture, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations, GLuint memory, GLuint64 offset); +typedef void (APIENTRYP PFNGLNAMEDBUFFERSTORAGEMEMEXTPROC) (GLuint buffer, GLsizeiptr size, GLuint memory, GLuint64 offset); +typedef void (APIENTRYP PFNGLTEXSTORAGEMEM1DEXTPROC) (GLenum target, GLsizei levels, GLenum internalFormat, GLsizei width, GLuint memory, GLuint64 offset); +typedef void (APIENTRYP PFNGLTEXTURESTORAGEMEM1DEXTPROC) (GLuint texture, GLsizei levels, GLenum internalFormat, GLsizei width, GLuint memory, GLuint64 offset); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glGetUnsignedBytevEXT (GLenum pname, GLubyte *data); +GLAPI void APIENTRY glGetUnsignedBytei_vEXT (GLenum target, GLuint index, GLubyte *data); +GLAPI void APIENTRY glDeleteMemoryObjectsEXT (GLsizei n, const GLuint *memoryObjects); +GLAPI GLboolean APIENTRY glIsMemoryObjectEXT (GLuint memoryObject); +GLAPI void APIENTRY glCreateMemoryObjectsEXT (GLsizei n, GLuint *memoryObjects); +GLAPI void APIENTRY glMemoryObjectParameterivEXT (GLuint memoryObject, GLenum pname, const GLint *params); +GLAPI void APIENTRY glGetMemoryObjectParameterivEXT (GLuint memoryObject, GLenum pname, GLint *params); +GLAPI void APIENTRY glTexStorageMem2DEXT (GLenum target, GLsizei levels, GLenum internalFormat, GLsizei width, GLsizei height, GLuint memory, GLuint64 offset); +GLAPI void APIENTRY glTexStorageMem2DMultisampleEXT (GLenum target, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations, GLuint memory, GLuint64 offset); +GLAPI void APIENTRY glTexStorageMem3DEXT (GLenum target, GLsizei levels, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLuint memory, GLuint64 offset); +GLAPI void APIENTRY glTexStorageMem3DMultisampleEXT (GLenum target, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations, GLuint memory, GLuint64 offset); +GLAPI void APIENTRY glBufferStorageMemEXT (GLenum target, GLsizeiptr size, GLuint memory, GLuint64 offset); +GLAPI void APIENTRY glTextureStorageMem2DEXT (GLuint texture, GLsizei levels, GLenum internalFormat, GLsizei width, GLsizei height, GLuint memory, GLuint64 offset); +GLAPI void APIENTRY glTextureStorageMem2DMultisampleEXT (GLuint texture, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations, GLuint memory, GLuint64 offset); +GLAPI void APIENTRY glTextureStorageMem3DEXT (GLuint texture, GLsizei levels, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLuint memory, GLuint64 offset); +GLAPI void APIENTRY glTextureStorageMem3DMultisampleEXT (GLuint texture, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations, GLuint memory, GLuint64 offset); +GLAPI void APIENTRY glNamedBufferStorageMemEXT (GLuint buffer, GLsizeiptr size, GLuint memory, GLuint64 offset); +GLAPI void APIENTRY glTexStorageMem1DEXT (GLenum target, GLsizei levels, GLenum internalFormat, GLsizei width, GLuint memory, GLuint64 offset); +GLAPI void APIENTRY glTextureStorageMem1DEXT (GLuint texture, GLsizei levels, GLenum internalFormat, GLsizei width, GLuint memory, GLuint64 offset); +#endif +#endif /* GL_EXT_memory_object */ + +#ifndef GL_EXT_memory_object_fd +#define GL_EXT_memory_object_fd 1 +#define GL_HANDLE_TYPE_OPAQUE_FD_EXT 0x9586 +typedef void (APIENTRYP PFNGLIMPORTMEMORYFDEXTPROC) (GLuint memory, GLuint64 size, GLenum handleType, GLint fd); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glImportMemoryFdEXT (GLuint memory, GLuint64 size, GLenum handleType, GLint fd); +#endif +#endif /* GL_EXT_memory_object_fd */ + +#ifndef GL_EXT_memory_object_win32 +#define GL_EXT_memory_object_win32 1 +#define GL_HANDLE_TYPE_OPAQUE_WIN32_EXT 0x9587 +#define GL_HANDLE_TYPE_OPAQUE_WIN32_KMT_EXT 0x9588 +#define GL_DEVICE_LUID_EXT 0x9599 +#define GL_DEVICE_NODE_MASK_EXT 0x959A +#define GL_LUID_SIZE_EXT 8 +#define GL_HANDLE_TYPE_D3D12_TILEPOOL_EXT 0x9589 +#define GL_HANDLE_TYPE_D3D12_RESOURCE_EXT 0x958A +#define GL_HANDLE_TYPE_D3D11_IMAGE_EXT 0x958B +#define GL_HANDLE_TYPE_D3D11_IMAGE_KMT_EXT 0x958C +typedef void (APIENTRYP PFNGLIMPORTMEMORYWIN32HANDLEEXTPROC) (GLuint memory, GLuint64 size, GLenum handleType, void *handle); +typedef void (APIENTRYP PFNGLIMPORTMEMORYWIN32NAMEEXTPROC) (GLuint memory, GLuint64 size, GLenum handleType, const void *name); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glImportMemoryWin32HandleEXT (GLuint memory, GLuint64 size, GLenum handleType, void *handle); +GLAPI void APIENTRY glImportMemoryWin32NameEXT (GLuint memory, GLuint64 size, GLenum handleType, const void *name); +#endif +#endif /* GL_EXT_memory_object_win32 */ + +#ifndef GL_EXT_misc_attribute +#define GL_EXT_misc_attribute 1 +#endif /* GL_EXT_misc_attribute */ + +#ifndef GL_EXT_multi_draw_arrays +#define GL_EXT_multi_draw_arrays 1 +typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSEXTPROC) (GLenum mode, const GLint *first, const GLsizei *count, GLsizei primcount); +typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSEXTPROC) (GLenum mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei primcount); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glMultiDrawArraysEXT (GLenum mode, const GLint *first, const GLsizei *count, GLsizei primcount); +GLAPI void APIENTRY glMultiDrawElementsEXT (GLenum mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei primcount); +#endif +#endif /* GL_EXT_multi_draw_arrays */ + +#ifndef GL_EXT_multisample +#define GL_EXT_multisample 1 +#define GL_MULTISAMPLE_EXT 0x809D +#define GL_SAMPLE_ALPHA_TO_MASK_EXT 0x809E +#define GL_SAMPLE_ALPHA_TO_ONE_EXT 0x809F +#define GL_SAMPLE_MASK_EXT 0x80A0 +#define GL_1PASS_EXT 0x80A1 +#define GL_2PASS_0_EXT 0x80A2 +#define GL_2PASS_1_EXT 0x80A3 +#define GL_4PASS_0_EXT 0x80A4 +#define GL_4PASS_1_EXT 0x80A5 +#define GL_4PASS_2_EXT 0x80A6 +#define GL_4PASS_3_EXT 0x80A7 +#define GL_SAMPLE_BUFFERS_EXT 0x80A8 +#define GL_SAMPLES_EXT 0x80A9 +#define GL_SAMPLE_MASK_VALUE_EXT 0x80AA +#define GL_SAMPLE_MASK_INVERT_EXT 0x80AB +#define GL_SAMPLE_PATTERN_EXT 0x80AC +#define GL_MULTISAMPLE_BIT_EXT 0x20000000 +typedef void (APIENTRYP PFNGLSAMPLEMASKEXTPROC) (GLclampf value, GLboolean invert); +typedef void (APIENTRYP PFNGLSAMPLEPATTERNEXTPROC) (GLenum pattern); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glSampleMaskEXT (GLclampf value, GLboolean invert); +GLAPI void APIENTRY glSamplePatternEXT (GLenum pattern); +#endif +#endif /* GL_EXT_multisample */ + +#ifndef GL_EXT_multiview_tessellation_geometry_shader +#define GL_EXT_multiview_tessellation_geometry_shader 1 +#endif /* GL_EXT_multiview_tessellation_geometry_shader */ + +#ifndef GL_EXT_multiview_texture_multisample +#define GL_EXT_multiview_texture_multisample 1 +#endif /* GL_EXT_multiview_texture_multisample */ + +#ifndef GL_EXT_multiview_timer_query +#define GL_EXT_multiview_timer_query 1 +#endif /* GL_EXT_multiview_timer_query */ + +#ifndef GL_EXT_packed_depth_stencil +#define GL_EXT_packed_depth_stencil 1 +#define GL_DEPTH_STENCIL_EXT 0x84F9 +#define GL_UNSIGNED_INT_24_8_EXT 0x84FA +#define GL_DEPTH24_STENCIL8_EXT 0x88F0 +#define GL_TEXTURE_STENCIL_SIZE_EXT 0x88F1 +#endif /* GL_EXT_packed_depth_stencil */ + +#ifndef GL_EXT_packed_float +#define GL_EXT_packed_float 1 +#define GL_R11F_G11F_B10F_EXT 0x8C3A +#define GL_UNSIGNED_INT_10F_11F_11F_REV_EXT 0x8C3B +#define GL_RGBA_SIGNED_COMPONENTS_EXT 0x8C3C +#endif /* GL_EXT_packed_float */ + +#ifndef GL_EXT_packed_pixels +#define GL_EXT_packed_pixels 1 +#define GL_UNSIGNED_BYTE_3_3_2_EXT 0x8032 +#define GL_UNSIGNED_SHORT_4_4_4_4_EXT 0x8033 +#define GL_UNSIGNED_SHORT_5_5_5_1_EXT 0x8034 +#define GL_UNSIGNED_INT_8_8_8_8_EXT 0x8035 +#define GL_UNSIGNED_INT_10_10_10_2_EXT 0x8036 +#endif /* GL_EXT_packed_pixels */ + +#ifndef GL_EXT_paletted_texture +#define GL_EXT_paletted_texture 1 +#define GL_COLOR_INDEX1_EXT 0x80E2 +#define GL_COLOR_INDEX2_EXT 0x80E3 +#define GL_COLOR_INDEX4_EXT 0x80E4 +#define GL_COLOR_INDEX8_EXT 0x80E5 +#define GL_COLOR_INDEX12_EXT 0x80E6 +#define GL_COLOR_INDEX16_EXT 0x80E7 +#define GL_TEXTURE_INDEX_SIZE_EXT 0x80ED +typedef void (APIENTRYP PFNGLCOLORTABLEEXTPROC) (GLenum target, GLenum internalFormat, GLsizei width, GLenum format, GLenum type, const void *table); +typedef void (APIENTRYP PFNGLGETCOLORTABLEEXTPROC) (GLenum target, GLenum format, GLenum type, void *data); +typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glColorTableEXT (GLenum target, GLenum internalFormat, GLsizei width, GLenum format, GLenum type, const void *table); +GLAPI void APIENTRY glGetColorTableEXT (GLenum target, GLenum format, GLenum type, void *data); +GLAPI void APIENTRY glGetColorTableParameterivEXT (GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetColorTableParameterfvEXT (GLenum target, GLenum pname, GLfloat *params); +#endif +#endif /* GL_EXT_paletted_texture */ + +#ifndef GL_EXT_pixel_buffer_object +#define GL_EXT_pixel_buffer_object 1 +#define GL_PIXEL_PACK_BUFFER_EXT 0x88EB +#define GL_PIXEL_UNPACK_BUFFER_EXT 0x88EC +#define GL_PIXEL_PACK_BUFFER_BINDING_EXT 0x88ED +#define GL_PIXEL_UNPACK_BUFFER_BINDING_EXT 0x88EF +#endif /* GL_EXT_pixel_buffer_object */ + +#ifndef GL_EXT_pixel_transform +#define GL_EXT_pixel_transform 1 +#define GL_PIXEL_TRANSFORM_2D_EXT 0x8330 +#define GL_PIXEL_MAG_FILTER_EXT 0x8331 +#define GL_PIXEL_MIN_FILTER_EXT 0x8332 +#define GL_PIXEL_CUBIC_WEIGHT_EXT 0x8333 +#define GL_CUBIC_EXT 0x8334 +#define GL_AVERAGE_EXT 0x8335 +#define GL_PIXEL_TRANSFORM_2D_STACK_DEPTH_EXT 0x8336 +#define GL_MAX_PIXEL_TRANSFORM_2D_STACK_DEPTH_EXT 0x8337 +#define GL_PIXEL_TRANSFORM_2D_MATRIX_EXT 0x8338 +typedef void (APIENTRYP PFNGLPIXELTRANSFORMPARAMETERIEXTPROC) (GLenum target, GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLPIXELTRANSFORMPARAMETERFEXTPROC) (GLenum target, GLenum pname, GLfloat param); +typedef void (APIENTRYP PFNGLPIXELTRANSFORMPARAMETERIVEXTPROC) (GLenum target, GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLPIXELTRANSFORMPARAMETERFVEXTPROC) (GLenum target, GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLGETPIXELTRANSFORMPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETPIXELTRANSFORMPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glPixelTransformParameteriEXT (GLenum target, GLenum pname, GLint param); +GLAPI void APIENTRY glPixelTransformParameterfEXT (GLenum target, GLenum pname, GLfloat param); +GLAPI void APIENTRY glPixelTransformParameterivEXT (GLenum target, GLenum pname, const GLint *params); +GLAPI void APIENTRY glPixelTransformParameterfvEXT (GLenum target, GLenum pname, const GLfloat *params); +GLAPI void APIENTRY glGetPixelTransformParameterivEXT (GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetPixelTransformParameterfvEXT (GLenum target, GLenum pname, GLfloat *params); +#endif +#endif /* GL_EXT_pixel_transform */ + +#ifndef GL_EXT_pixel_transform_color_table +#define GL_EXT_pixel_transform_color_table 1 +#endif /* GL_EXT_pixel_transform_color_table */ + +#ifndef GL_EXT_point_parameters +#define GL_EXT_point_parameters 1 +#define GL_POINT_SIZE_MIN_EXT 0x8126 +#define GL_POINT_SIZE_MAX_EXT 0x8127 +#define GL_POINT_FADE_THRESHOLD_SIZE_EXT 0x8128 +#define GL_DISTANCE_ATTENUATION_EXT 0x8129 +typedef void (APIENTRYP PFNGLPOINTPARAMETERFEXTPROC) (GLenum pname, GLfloat param); +typedef void (APIENTRYP PFNGLPOINTPARAMETERFVEXTPROC) (GLenum pname, const GLfloat *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glPointParameterfEXT (GLenum pname, GLfloat param); +GLAPI void APIENTRY glPointParameterfvEXT (GLenum pname, const GLfloat *params); +#endif +#endif /* GL_EXT_point_parameters */ + +#ifndef GL_EXT_polygon_offset +#define GL_EXT_polygon_offset 1 +#define GL_POLYGON_OFFSET_EXT 0x8037 +#define GL_POLYGON_OFFSET_FACTOR_EXT 0x8038 +#define GL_POLYGON_OFFSET_BIAS_EXT 0x8039 +typedef void (APIENTRYP PFNGLPOLYGONOFFSETEXTPROC) (GLfloat factor, GLfloat bias); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glPolygonOffsetEXT (GLfloat factor, GLfloat bias); +#endif +#endif /* GL_EXT_polygon_offset */ + +#ifndef GL_EXT_polygon_offset_clamp +#define GL_EXT_polygon_offset_clamp 1 +#define GL_POLYGON_OFFSET_CLAMP_EXT 0x8E1B +typedef void (APIENTRYP PFNGLPOLYGONOFFSETCLAMPEXTPROC) (GLfloat factor, GLfloat units, GLfloat clamp); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glPolygonOffsetClampEXT (GLfloat factor, GLfloat units, GLfloat clamp); +#endif +#endif /* GL_EXT_polygon_offset_clamp */ + +#ifndef GL_EXT_post_depth_coverage +#define GL_EXT_post_depth_coverage 1 +#endif /* GL_EXT_post_depth_coverage */ + +#ifndef GL_EXT_provoking_vertex +#define GL_EXT_provoking_vertex 1 +#define GL_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION_EXT 0x8E4C +#define GL_FIRST_VERTEX_CONVENTION_EXT 0x8E4D +#define GL_LAST_VERTEX_CONVENTION_EXT 0x8E4E +#define GL_PROVOKING_VERTEX_EXT 0x8E4F +typedef void (APIENTRYP PFNGLPROVOKINGVERTEXEXTPROC) (GLenum mode); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glProvokingVertexEXT (GLenum mode); +#endif +#endif /* GL_EXT_provoking_vertex */ + +#ifndef GL_EXT_raster_multisample +#define GL_EXT_raster_multisample 1 +#define GL_RASTER_MULTISAMPLE_EXT 0x9327 +#define GL_RASTER_SAMPLES_EXT 0x9328 +#define GL_MAX_RASTER_SAMPLES_EXT 0x9329 +#define GL_RASTER_FIXED_SAMPLE_LOCATIONS_EXT 0x932A +#define GL_MULTISAMPLE_RASTERIZATION_ALLOWED_EXT 0x932B +#define GL_EFFECTIVE_RASTER_SAMPLES_EXT 0x932C +typedef void (APIENTRYP PFNGLRASTERSAMPLESEXTPROC) (GLuint samples, GLboolean fixedsamplelocations); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glRasterSamplesEXT (GLuint samples, GLboolean fixedsamplelocations); +#endif +#endif /* GL_EXT_raster_multisample */ + +#ifndef GL_EXT_rescale_normal +#define GL_EXT_rescale_normal 1 +#define GL_RESCALE_NORMAL_EXT 0x803A +#endif /* GL_EXT_rescale_normal */ + +#ifndef GL_EXT_secondary_color +#define GL_EXT_secondary_color 1 +#define GL_COLOR_SUM_EXT 0x8458 +#define GL_CURRENT_SECONDARY_COLOR_EXT 0x8459 +#define GL_SECONDARY_COLOR_ARRAY_SIZE_EXT 0x845A +#define GL_SECONDARY_COLOR_ARRAY_TYPE_EXT 0x845B +#define GL_SECONDARY_COLOR_ARRAY_STRIDE_EXT 0x845C +#define GL_SECONDARY_COLOR_ARRAY_POINTER_EXT 0x845D +#define GL_SECONDARY_COLOR_ARRAY_EXT 0x845E +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3BEXTPROC) (GLbyte red, GLbyte green, GLbyte blue); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3BVEXTPROC) (const GLbyte *v); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3DEXTPROC) (GLdouble red, GLdouble green, GLdouble blue); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3DVEXTPROC) (const GLdouble *v); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3FEXTPROC) (GLfloat red, GLfloat green, GLfloat blue); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3FVEXTPROC) (const GLfloat *v); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3IEXTPROC) (GLint red, GLint green, GLint blue); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3IVEXTPROC) (const GLint *v); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3SEXTPROC) (GLshort red, GLshort green, GLshort blue); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3SVEXTPROC) (const GLshort *v); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UBEXTPROC) (GLubyte red, GLubyte green, GLubyte blue); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UBVEXTPROC) (const GLubyte *v); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UIEXTPROC) (GLuint red, GLuint green, GLuint blue); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UIVEXTPROC) (const GLuint *v); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3USEXTPROC) (GLushort red, GLushort green, GLushort blue); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3USVEXTPROC) (const GLushort *v); +typedef void (APIENTRYP PFNGLSECONDARYCOLORPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, const void *pointer); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glSecondaryColor3bEXT (GLbyte red, GLbyte green, GLbyte blue); +GLAPI void APIENTRY glSecondaryColor3bvEXT (const GLbyte *v); +GLAPI void APIENTRY glSecondaryColor3dEXT (GLdouble red, GLdouble green, GLdouble blue); +GLAPI void APIENTRY glSecondaryColor3dvEXT (const GLdouble *v); +GLAPI void APIENTRY glSecondaryColor3fEXT (GLfloat red, GLfloat green, GLfloat blue); +GLAPI void APIENTRY glSecondaryColor3fvEXT (const GLfloat *v); +GLAPI void APIENTRY glSecondaryColor3iEXT (GLint red, GLint green, GLint blue); +GLAPI void APIENTRY glSecondaryColor3ivEXT (const GLint *v); +GLAPI void APIENTRY glSecondaryColor3sEXT (GLshort red, GLshort green, GLshort blue); +GLAPI void APIENTRY glSecondaryColor3svEXT (const GLshort *v); +GLAPI void APIENTRY glSecondaryColor3ubEXT (GLubyte red, GLubyte green, GLubyte blue); +GLAPI void APIENTRY glSecondaryColor3ubvEXT (const GLubyte *v); +GLAPI void APIENTRY glSecondaryColor3uiEXT (GLuint red, GLuint green, GLuint blue); +GLAPI void APIENTRY glSecondaryColor3uivEXT (const GLuint *v); +GLAPI void APIENTRY glSecondaryColor3usEXT (GLushort red, GLushort green, GLushort blue); +GLAPI void APIENTRY glSecondaryColor3usvEXT (const GLushort *v); +GLAPI void APIENTRY glSecondaryColorPointerEXT (GLint size, GLenum type, GLsizei stride, const void *pointer); +#endif +#endif /* GL_EXT_secondary_color */ + +#ifndef GL_EXT_semaphore +#define GL_EXT_semaphore 1 +#define GL_LAYOUT_GENERAL_EXT 0x958D +#define GL_LAYOUT_COLOR_ATTACHMENT_EXT 0x958E +#define GL_LAYOUT_DEPTH_STENCIL_ATTACHMENT_EXT 0x958F +#define GL_LAYOUT_DEPTH_STENCIL_READ_ONLY_EXT 0x9590 +#define GL_LAYOUT_SHADER_READ_ONLY_EXT 0x9591 +#define GL_LAYOUT_TRANSFER_SRC_EXT 0x9592 +#define GL_LAYOUT_TRANSFER_DST_EXT 0x9593 +#define GL_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_EXT 0x9530 +#define GL_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_EXT 0x9531 +typedef void (APIENTRYP PFNGLGENSEMAPHORESEXTPROC) (GLsizei n, GLuint *semaphores); +typedef void (APIENTRYP PFNGLDELETESEMAPHORESEXTPROC) (GLsizei n, const GLuint *semaphores); +typedef GLboolean (APIENTRYP PFNGLISSEMAPHOREEXTPROC) (GLuint semaphore); +typedef void (APIENTRYP PFNGLSEMAPHOREPARAMETERUI64VEXTPROC) (GLuint semaphore, GLenum pname, const GLuint64 *params); +typedef void (APIENTRYP PFNGLGETSEMAPHOREPARAMETERUI64VEXTPROC) (GLuint semaphore, GLenum pname, GLuint64 *params); +typedef void (APIENTRYP PFNGLWAITSEMAPHOREEXTPROC) (GLuint semaphore, GLuint numBufferBarriers, const GLuint *buffers, GLuint numTextureBarriers, const GLuint *textures, const GLenum *srcLayouts); +typedef void (APIENTRYP PFNGLSIGNALSEMAPHOREEXTPROC) (GLuint semaphore, GLuint numBufferBarriers, const GLuint *buffers, GLuint numTextureBarriers, const GLuint *textures, const GLenum *dstLayouts); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glGenSemaphoresEXT (GLsizei n, GLuint *semaphores); +GLAPI void APIENTRY glDeleteSemaphoresEXT (GLsizei n, const GLuint *semaphores); +GLAPI GLboolean APIENTRY glIsSemaphoreEXT (GLuint semaphore); +GLAPI void APIENTRY glSemaphoreParameterui64vEXT (GLuint semaphore, GLenum pname, const GLuint64 *params); +GLAPI void APIENTRY glGetSemaphoreParameterui64vEXT (GLuint semaphore, GLenum pname, GLuint64 *params); +GLAPI void APIENTRY glWaitSemaphoreEXT (GLuint semaphore, GLuint numBufferBarriers, const GLuint *buffers, GLuint numTextureBarriers, const GLuint *textures, const GLenum *srcLayouts); +GLAPI void APIENTRY glSignalSemaphoreEXT (GLuint semaphore, GLuint numBufferBarriers, const GLuint *buffers, GLuint numTextureBarriers, const GLuint *textures, const GLenum *dstLayouts); +#endif +#endif /* GL_EXT_semaphore */ + +#ifndef GL_EXT_semaphore_fd +#define GL_EXT_semaphore_fd 1 +typedef void (APIENTRYP PFNGLIMPORTSEMAPHOREFDEXTPROC) (GLuint semaphore, GLenum handleType, GLint fd); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glImportSemaphoreFdEXT (GLuint semaphore, GLenum handleType, GLint fd); +#endif +#endif /* GL_EXT_semaphore_fd */ + +#ifndef GL_EXT_semaphore_win32 +#define GL_EXT_semaphore_win32 1 +#define GL_HANDLE_TYPE_D3D12_FENCE_EXT 0x9594 +#define GL_D3D12_FENCE_VALUE_EXT 0x9595 +typedef void (APIENTRYP PFNGLIMPORTSEMAPHOREWIN32HANDLEEXTPROC) (GLuint semaphore, GLenum handleType, void *handle); +typedef void (APIENTRYP PFNGLIMPORTSEMAPHOREWIN32NAMEEXTPROC) (GLuint semaphore, GLenum handleType, const void *name); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glImportSemaphoreWin32HandleEXT (GLuint semaphore, GLenum handleType, void *handle); +GLAPI void APIENTRY glImportSemaphoreWin32NameEXT (GLuint semaphore, GLenum handleType, const void *name); +#endif +#endif /* GL_EXT_semaphore_win32 */ + +#ifndef GL_EXT_separate_shader_objects +#define GL_EXT_separate_shader_objects 1 +#define GL_ACTIVE_PROGRAM_EXT 0x8B8D +typedef void (APIENTRYP PFNGLUSESHADERPROGRAMEXTPROC) (GLenum type, GLuint program); +typedef void (APIENTRYP PFNGLACTIVEPROGRAMEXTPROC) (GLuint program); +typedef GLuint (APIENTRYP PFNGLCREATESHADERPROGRAMEXTPROC) (GLenum type, const GLchar *string); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glUseShaderProgramEXT (GLenum type, GLuint program); +GLAPI void APIENTRY glActiveProgramEXT (GLuint program); +GLAPI GLuint APIENTRY glCreateShaderProgramEXT (GLenum type, const GLchar *string); +#endif +#endif /* GL_EXT_separate_shader_objects */ + +#ifndef GL_EXT_separate_specular_color +#define GL_EXT_separate_specular_color 1 +#define GL_LIGHT_MODEL_COLOR_CONTROL_EXT 0x81F8 +#define GL_SINGLE_COLOR_EXT 0x81F9 +#define GL_SEPARATE_SPECULAR_COLOR_EXT 0x81FA +#endif /* GL_EXT_separate_specular_color */ + +#ifndef GL_EXT_shader_framebuffer_fetch +#define GL_EXT_shader_framebuffer_fetch 1 +#define GL_FRAGMENT_SHADER_DISCARDS_SAMPLES_EXT 0x8A52 +#endif /* GL_EXT_shader_framebuffer_fetch */ + +#ifndef GL_EXT_shader_framebuffer_fetch_non_coherent +#define GL_EXT_shader_framebuffer_fetch_non_coherent 1 +typedef void (APIENTRYP PFNGLFRAMEBUFFERFETCHBARRIEREXTPROC) (void); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glFramebufferFetchBarrierEXT (void); +#endif +#endif /* GL_EXT_shader_framebuffer_fetch_non_coherent */ + +#ifndef GL_EXT_shader_image_load_formatted +#define GL_EXT_shader_image_load_formatted 1 +#endif /* GL_EXT_shader_image_load_formatted */ + +#ifndef GL_EXT_shader_image_load_store +#define GL_EXT_shader_image_load_store 1 +#define GL_MAX_IMAGE_UNITS_EXT 0x8F38 +#define GL_MAX_COMBINED_IMAGE_UNITS_AND_FRAGMENT_OUTPUTS_EXT 0x8F39 +#define GL_IMAGE_BINDING_NAME_EXT 0x8F3A +#define GL_IMAGE_BINDING_LEVEL_EXT 0x8F3B +#define GL_IMAGE_BINDING_LAYERED_EXT 0x8F3C +#define GL_IMAGE_BINDING_LAYER_EXT 0x8F3D +#define GL_IMAGE_BINDING_ACCESS_EXT 0x8F3E +#define GL_IMAGE_1D_EXT 0x904C +#define GL_IMAGE_2D_EXT 0x904D +#define GL_IMAGE_3D_EXT 0x904E +#define GL_IMAGE_2D_RECT_EXT 0x904F +#define GL_IMAGE_CUBE_EXT 0x9050 +#define GL_IMAGE_BUFFER_EXT 0x9051 +#define GL_IMAGE_1D_ARRAY_EXT 0x9052 +#define GL_IMAGE_2D_ARRAY_EXT 0x9053 +#define GL_IMAGE_CUBE_MAP_ARRAY_EXT 0x9054 +#define GL_IMAGE_2D_MULTISAMPLE_EXT 0x9055 +#define GL_IMAGE_2D_MULTISAMPLE_ARRAY_EXT 0x9056 +#define GL_INT_IMAGE_1D_EXT 0x9057 +#define GL_INT_IMAGE_2D_EXT 0x9058 +#define GL_INT_IMAGE_3D_EXT 0x9059 +#define GL_INT_IMAGE_2D_RECT_EXT 0x905A +#define GL_INT_IMAGE_CUBE_EXT 0x905B +#define GL_INT_IMAGE_BUFFER_EXT 0x905C +#define GL_INT_IMAGE_1D_ARRAY_EXT 0x905D +#define GL_INT_IMAGE_2D_ARRAY_EXT 0x905E +#define GL_INT_IMAGE_CUBE_MAP_ARRAY_EXT 0x905F +#define GL_INT_IMAGE_2D_MULTISAMPLE_EXT 0x9060 +#define GL_INT_IMAGE_2D_MULTISAMPLE_ARRAY_EXT 0x9061 +#define GL_UNSIGNED_INT_IMAGE_1D_EXT 0x9062 +#define GL_UNSIGNED_INT_IMAGE_2D_EXT 0x9063 +#define GL_UNSIGNED_INT_IMAGE_3D_EXT 0x9064 +#define GL_UNSIGNED_INT_IMAGE_2D_RECT_EXT 0x9065 +#define GL_UNSIGNED_INT_IMAGE_CUBE_EXT 0x9066 +#define GL_UNSIGNED_INT_IMAGE_BUFFER_EXT 0x9067 +#define GL_UNSIGNED_INT_IMAGE_1D_ARRAY_EXT 0x9068 +#define GL_UNSIGNED_INT_IMAGE_2D_ARRAY_EXT 0x9069 +#define GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY_EXT 0x906A +#define GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_EXT 0x906B +#define GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_ARRAY_EXT 0x906C +#define GL_MAX_IMAGE_SAMPLES_EXT 0x906D +#define GL_IMAGE_BINDING_FORMAT_EXT 0x906E +#define GL_VERTEX_ATTRIB_ARRAY_BARRIER_BIT_EXT 0x00000001 +#define GL_ELEMENT_ARRAY_BARRIER_BIT_EXT 0x00000002 +#define GL_UNIFORM_BARRIER_BIT_EXT 0x00000004 +#define GL_TEXTURE_FETCH_BARRIER_BIT_EXT 0x00000008 +#define GL_SHADER_IMAGE_ACCESS_BARRIER_BIT_EXT 0x00000020 +#define GL_COMMAND_BARRIER_BIT_EXT 0x00000040 +#define GL_PIXEL_BUFFER_BARRIER_BIT_EXT 0x00000080 +#define GL_TEXTURE_UPDATE_BARRIER_BIT_EXT 0x00000100 +#define GL_BUFFER_UPDATE_BARRIER_BIT_EXT 0x00000200 +#define GL_FRAMEBUFFER_BARRIER_BIT_EXT 0x00000400 +#define GL_TRANSFORM_FEEDBACK_BARRIER_BIT_EXT 0x00000800 +#define GL_ATOMIC_COUNTER_BARRIER_BIT_EXT 0x00001000 +#define GL_ALL_BARRIER_BITS_EXT 0xFFFFFFFF +typedef void (APIENTRYP PFNGLBINDIMAGETEXTUREEXTPROC) (GLuint index, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLint format); +typedef void (APIENTRYP PFNGLMEMORYBARRIEREXTPROC) (GLbitfield barriers); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBindImageTextureEXT (GLuint index, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLint format); +GLAPI void APIENTRY glMemoryBarrierEXT (GLbitfield barriers); +#endif +#endif /* GL_EXT_shader_image_load_store */ + +#ifndef GL_EXT_shader_integer_mix +#define GL_EXT_shader_integer_mix 1 +#endif /* GL_EXT_shader_integer_mix */ + +#ifndef GL_EXT_shader_samples_identical +#define GL_EXT_shader_samples_identical 1 +#endif /* GL_EXT_shader_samples_identical */ + +#ifndef GL_EXT_shadow_funcs +#define GL_EXT_shadow_funcs 1 +#endif /* GL_EXT_shadow_funcs */ + +#ifndef GL_EXT_shared_texture_palette +#define GL_EXT_shared_texture_palette 1 +#define GL_SHARED_TEXTURE_PALETTE_EXT 0x81FB +#endif /* GL_EXT_shared_texture_palette */ + +#ifndef GL_EXT_sparse_texture2 +#define GL_EXT_sparse_texture2 1 +#endif /* GL_EXT_sparse_texture2 */ + +#ifndef GL_EXT_stencil_clear_tag +#define GL_EXT_stencil_clear_tag 1 +#define GL_STENCIL_TAG_BITS_EXT 0x88F2 +#define GL_STENCIL_CLEAR_TAG_VALUE_EXT 0x88F3 +typedef void (APIENTRYP PFNGLSTENCILCLEARTAGEXTPROC) (GLsizei stencilTagBits, GLuint stencilClearTag); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glStencilClearTagEXT (GLsizei stencilTagBits, GLuint stencilClearTag); +#endif +#endif /* GL_EXT_stencil_clear_tag */ + +#ifndef GL_EXT_stencil_two_side +#define GL_EXT_stencil_two_side 1 +#define GL_STENCIL_TEST_TWO_SIDE_EXT 0x8910 +#define GL_ACTIVE_STENCIL_FACE_EXT 0x8911 +typedef void (APIENTRYP PFNGLACTIVESTENCILFACEEXTPROC) (GLenum face); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glActiveStencilFaceEXT (GLenum face); +#endif +#endif /* GL_EXT_stencil_two_side */ + +#ifndef GL_EXT_stencil_wrap +#define GL_EXT_stencil_wrap 1 +#define GL_INCR_WRAP_EXT 0x8507 +#define GL_DECR_WRAP_EXT 0x8508 +#endif /* GL_EXT_stencil_wrap */ + +#ifndef GL_EXT_subtexture +#define GL_EXT_subtexture 1 +typedef void (APIENTRYP PFNGLTEXSUBIMAGE1DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void *pixels); +typedef void (APIENTRYP PFNGLTEXSUBIMAGE2DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glTexSubImage1DEXT (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void *pixels); +GLAPI void APIENTRY glTexSubImage2DEXT (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels); +#endif +#endif /* GL_EXT_subtexture */ + +#ifndef GL_EXT_texture +#define GL_EXT_texture 1 +#define GL_ALPHA4_EXT 0x803B +#define GL_ALPHA8_EXT 0x803C +#define GL_ALPHA12_EXT 0x803D +#define GL_ALPHA16_EXT 0x803E +#define GL_LUMINANCE4_EXT 0x803F +#define GL_LUMINANCE8_EXT 0x8040 +#define GL_LUMINANCE12_EXT 0x8041 +#define GL_LUMINANCE16_EXT 0x8042 +#define GL_LUMINANCE4_ALPHA4_EXT 0x8043 +#define GL_LUMINANCE6_ALPHA2_EXT 0x8044 +#define GL_LUMINANCE8_ALPHA8_EXT 0x8045 +#define GL_LUMINANCE12_ALPHA4_EXT 0x8046 +#define GL_LUMINANCE12_ALPHA12_EXT 0x8047 +#define GL_LUMINANCE16_ALPHA16_EXT 0x8048 +#define GL_INTENSITY_EXT 0x8049 +#define GL_INTENSITY4_EXT 0x804A +#define GL_INTENSITY8_EXT 0x804B +#define GL_INTENSITY12_EXT 0x804C +#define GL_INTENSITY16_EXT 0x804D +#define GL_RGB2_EXT 0x804E +#define GL_RGB4_EXT 0x804F +#define GL_RGB5_EXT 0x8050 +#define GL_RGB8_EXT 0x8051 +#define GL_RGB10_EXT 0x8052 +#define GL_RGB12_EXT 0x8053 +#define GL_RGB16_EXT 0x8054 +#define GL_RGBA2_EXT 0x8055 +#define GL_RGBA4_EXT 0x8056 +#define GL_RGB5_A1_EXT 0x8057 +#define GL_RGBA8_EXT 0x8058 +#define GL_RGB10_A2_EXT 0x8059 +#define GL_RGBA12_EXT 0x805A +#define GL_RGBA16_EXT 0x805B +#define GL_TEXTURE_RED_SIZE_EXT 0x805C +#define GL_TEXTURE_GREEN_SIZE_EXT 0x805D +#define GL_TEXTURE_BLUE_SIZE_EXT 0x805E +#define GL_TEXTURE_ALPHA_SIZE_EXT 0x805F +#define GL_TEXTURE_LUMINANCE_SIZE_EXT 0x8060 +#define GL_TEXTURE_INTENSITY_SIZE_EXT 0x8061 +#define GL_REPLACE_EXT 0x8062 +#define GL_PROXY_TEXTURE_1D_EXT 0x8063 +#define GL_PROXY_TEXTURE_2D_EXT 0x8064 +#define GL_TEXTURE_TOO_LARGE_EXT 0x8065 +#endif /* GL_EXT_texture */ + +#ifndef GL_EXT_texture3D +#define GL_EXT_texture3D 1 +#define GL_PACK_SKIP_IMAGES_EXT 0x806B +#define GL_PACK_IMAGE_HEIGHT_EXT 0x806C +#define GL_UNPACK_SKIP_IMAGES_EXT 0x806D +#define GL_UNPACK_IMAGE_HEIGHT_EXT 0x806E +#define GL_TEXTURE_3D_EXT 0x806F +#define GL_PROXY_TEXTURE_3D_EXT 0x8070 +#define GL_TEXTURE_DEPTH_EXT 0x8071 +#define GL_TEXTURE_WRAP_R_EXT 0x8072 +#define GL_MAX_3D_TEXTURE_SIZE_EXT 0x8073 +typedef void (APIENTRYP PFNGLTEXIMAGE3DEXTPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels); +typedef void (APIENTRYP PFNGLTEXSUBIMAGE3DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glTexImage3DEXT (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels); +GLAPI void APIENTRY glTexSubImage3DEXT (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels); +#endif +#endif /* GL_EXT_texture3D */ + +#ifndef GL_EXT_texture_array +#define GL_EXT_texture_array 1 +#define GL_TEXTURE_1D_ARRAY_EXT 0x8C18 +#define GL_PROXY_TEXTURE_1D_ARRAY_EXT 0x8C19 +#define GL_TEXTURE_2D_ARRAY_EXT 0x8C1A +#define GL_PROXY_TEXTURE_2D_ARRAY_EXT 0x8C1B +#define GL_TEXTURE_BINDING_1D_ARRAY_EXT 0x8C1C +#define GL_TEXTURE_BINDING_2D_ARRAY_EXT 0x8C1D +#define GL_MAX_ARRAY_TEXTURE_LAYERS_EXT 0x88FF +#define GL_COMPARE_REF_DEPTH_TO_TEXTURE_EXT 0x884E +typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURELAYEREXTPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glFramebufferTextureLayerEXT (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); +#endif +#endif /* GL_EXT_texture_array */ + +#ifndef GL_EXT_texture_buffer_object +#define GL_EXT_texture_buffer_object 1 +#define GL_TEXTURE_BUFFER_EXT 0x8C2A +#define GL_MAX_TEXTURE_BUFFER_SIZE_EXT 0x8C2B +#define GL_TEXTURE_BINDING_BUFFER_EXT 0x8C2C +#define GL_TEXTURE_BUFFER_DATA_STORE_BINDING_EXT 0x8C2D +#define GL_TEXTURE_BUFFER_FORMAT_EXT 0x8C2E +typedef void (APIENTRYP PFNGLTEXBUFFEREXTPROC) (GLenum target, GLenum internalformat, GLuint buffer); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glTexBufferEXT (GLenum target, GLenum internalformat, GLuint buffer); +#endif +#endif /* GL_EXT_texture_buffer_object */ + +#ifndef GL_EXT_texture_compression_latc +#define GL_EXT_texture_compression_latc 1 +#define GL_COMPRESSED_LUMINANCE_LATC1_EXT 0x8C70 +#define GL_COMPRESSED_SIGNED_LUMINANCE_LATC1_EXT 0x8C71 +#define GL_COMPRESSED_LUMINANCE_ALPHA_LATC2_EXT 0x8C72 +#define GL_COMPRESSED_SIGNED_LUMINANCE_ALPHA_LATC2_EXT 0x8C73 +#endif /* GL_EXT_texture_compression_latc */ + +#ifndef GL_EXT_texture_compression_rgtc +#define GL_EXT_texture_compression_rgtc 1 +#define GL_COMPRESSED_RED_RGTC1_EXT 0x8DBB +#define GL_COMPRESSED_SIGNED_RED_RGTC1_EXT 0x8DBC +#define GL_COMPRESSED_RED_GREEN_RGTC2_EXT 0x8DBD +#define GL_COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT 0x8DBE +#endif /* GL_EXT_texture_compression_rgtc */ + +#ifndef GL_EXT_texture_compression_s3tc +#define GL_EXT_texture_compression_s3tc 1 +#define GL_COMPRESSED_RGB_S3TC_DXT1_EXT 0x83F0 +#define GL_COMPRESSED_RGBA_S3TC_DXT1_EXT 0x83F1 +#define GL_COMPRESSED_RGBA_S3TC_DXT3_EXT 0x83F2 +#define GL_COMPRESSED_RGBA_S3TC_DXT5_EXT 0x83F3 +#endif /* GL_EXT_texture_compression_s3tc */ + +#ifndef GL_EXT_texture_cube_map +#define GL_EXT_texture_cube_map 1 +#define GL_NORMAL_MAP_EXT 0x8511 +#define GL_REFLECTION_MAP_EXT 0x8512 +#define GL_TEXTURE_CUBE_MAP_EXT 0x8513 +#define GL_TEXTURE_BINDING_CUBE_MAP_EXT 0x8514 +#define GL_TEXTURE_CUBE_MAP_POSITIVE_X_EXT 0x8515 +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X_EXT 0x8516 +#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y_EXT 0x8517 +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_EXT 0x8518 +#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z_EXT 0x8519 +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_EXT 0x851A +#define GL_PROXY_TEXTURE_CUBE_MAP_EXT 0x851B +#define GL_MAX_CUBE_MAP_TEXTURE_SIZE_EXT 0x851C +#endif /* GL_EXT_texture_cube_map */ + +#ifndef GL_EXT_texture_env_add +#define GL_EXT_texture_env_add 1 +#endif /* GL_EXT_texture_env_add */ + +#ifndef GL_EXT_texture_env_combine +#define GL_EXT_texture_env_combine 1 +#define GL_COMBINE_EXT 0x8570 +#define GL_COMBINE_RGB_EXT 0x8571 +#define GL_COMBINE_ALPHA_EXT 0x8572 +#define GL_RGB_SCALE_EXT 0x8573 +#define GL_ADD_SIGNED_EXT 0x8574 +#define GL_INTERPOLATE_EXT 0x8575 +#define GL_CONSTANT_EXT 0x8576 +#define GL_PRIMARY_COLOR_EXT 0x8577 +#define GL_PREVIOUS_EXT 0x8578 +#define GL_SOURCE0_RGB_EXT 0x8580 +#define GL_SOURCE1_RGB_EXT 0x8581 +#define GL_SOURCE2_RGB_EXT 0x8582 +#define GL_SOURCE0_ALPHA_EXT 0x8588 +#define GL_SOURCE1_ALPHA_EXT 0x8589 +#define GL_SOURCE2_ALPHA_EXT 0x858A +#define GL_OPERAND0_RGB_EXT 0x8590 +#define GL_OPERAND1_RGB_EXT 0x8591 +#define GL_OPERAND2_RGB_EXT 0x8592 +#define GL_OPERAND0_ALPHA_EXT 0x8598 +#define GL_OPERAND1_ALPHA_EXT 0x8599 +#define GL_OPERAND2_ALPHA_EXT 0x859A +#endif /* GL_EXT_texture_env_combine */ + +#ifndef GL_EXT_texture_env_dot3 +#define GL_EXT_texture_env_dot3 1 +#define GL_DOT3_RGB_EXT 0x8740 +#define GL_DOT3_RGBA_EXT 0x8741 +#endif /* GL_EXT_texture_env_dot3 */ + +#ifndef GL_EXT_texture_filter_anisotropic +#define GL_EXT_texture_filter_anisotropic 1 +#define GL_TEXTURE_MAX_ANISOTROPY_EXT 0x84FE +#define GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT 0x84FF +#endif /* GL_EXT_texture_filter_anisotropic */ + +#ifndef GL_EXT_texture_filter_minmax +#define GL_EXT_texture_filter_minmax 1 +#define GL_TEXTURE_REDUCTION_MODE_EXT 0x9366 +#define GL_WEIGHTED_AVERAGE_EXT 0x9367 +#endif /* GL_EXT_texture_filter_minmax */ + +#ifndef GL_EXT_texture_integer +#define GL_EXT_texture_integer 1 +#define GL_RGBA32UI_EXT 0x8D70 +#define GL_RGB32UI_EXT 0x8D71 +#define GL_ALPHA32UI_EXT 0x8D72 +#define GL_INTENSITY32UI_EXT 0x8D73 +#define GL_LUMINANCE32UI_EXT 0x8D74 +#define GL_LUMINANCE_ALPHA32UI_EXT 0x8D75 +#define GL_RGBA16UI_EXT 0x8D76 +#define GL_RGB16UI_EXT 0x8D77 +#define GL_ALPHA16UI_EXT 0x8D78 +#define GL_INTENSITY16UI_EXT 0x8D79 +#define GL_LUMINANCE16UI_EXT 0x8D7A +#define GL_LUMINANCE_ALPHA16UI_EXT 0x8D7B +#define GL_RGBA8UI_EXT 0x8D7C +#define GL_RGB8UI_EXT 0x8D7D +#define GL_ALPHA8UI_EXT 0x8D7E +#define GL_INTENSITY8UI_EXT 0x8D7F +#define GL_LUMINANCE8UI_EXT 0x8D80 +#define GL_LUMINANCE_ALPHA8UI_EXT 0x8D81 +#define GL_RGBA32I_EXT 0x8D82 +#define GL_RGB32I_EXT 0x8D83 +#define GL_ALPHA32I_EXT 0x8D84 +#define GL_INTENSITY32I_EXT 0x8D85 +#define GL_LUMINANCE32I_EXT 0x8D86 +#define GL_LUMINANCE_ALPHA32I_EXT 0x8D87 +#define GL_RGBA16I_EXT 0x8D88 +#define GL_RGB16I_EXT 0x8D89 +#define GL_ALPHA16I_EXT 0x8D8A +#define GL_INTENSITY16I_EXT 0x8D8B +#define GL_LUMINANCE16I_EXT 0x8D8C +#define GL_LUMINANCE_ALPHA16I_EXT 0x8D8D +#define GL_RGBA8I_EXT 0x8D8E +#define GL_RGB8I_EXT 0x8D8F +#define GL_ALPHA8I_EXT 0x8D90 +#define GL_INTENSITY8I_EXT 0x8D91 +#define GL_LUMINANCE8I_EXT 0x8D92 +#define GL_LUMINANCE_ALPHA8I_EXT 0x8D93 +#define GL_RED_INTEGER_EXT 0x8D94 +#define GL_GREEN_INTEGER_EXT 0x8D95 +#define GL_BLUE_INTEGER_EXT 0x8D96 +#define GL_ALPHA_INTEGER_EXT 0x8D97 +#define GL_RGB_INTEGER_EXT 0x8D98 +#define GL_RGBA_INTEGER_EXT 0x8D99 +#define GL_BGR_INTEGER_EXT 0x8D9A +#define GL_BGRA_INTEGER_EXT 0x8D9B +#define GL_LUMINANCE_INTEGER_EXT 0x8D9C +#define GL_LUMINANCE_ALPHA_INTEGER_EXT 0x8D9D +#define GL_RGBA_INTEGER_MODE_EXT 0x8D9E +typedef void (APIENTRYP PFNGLTEXPARAMETERIIVEXTPROC) (GLenum target, GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLTEXPARAMETERIUIVEXTPROC) (GLenum target, GLenum pname, const GLuint *params); +typedef void (APIENTRYP PFNGLGETTEXPARAMETERIIVEXTPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETTEXPARAMETERIUIVEXTPROC) (GLenum target, GLenum pname, GLuint *params); +typedef void (APIENTRYP PFNGLCLEARCOLORIIEXTPROC) (GLint red, GLint green, GLint blue, GLint alpha); +typedef void (APIENTRYP PFNGLCLEARCOLORIUIEXTPROC) (GLuint red, GLuint green, GLuint blue, GLuint alpha); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glTexParameterIivEXT (GLenum target, GLenum pname, const GLint *params); +GLAPI void APIENTRY glTexParameterIuivEXT (GLenum target, GLenum pname, const GLuint *params); +GLAPI void APIENTRY glGetTexParameterIivEXT (GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetTexParameterIuivEXT (GLenum target, GLenum pname, GLuint *params); +GLAPI void APIENTRY glClearColorIiEXT (GLint red, GLint green, GLint blue, GLint alpha); +GLAPI void APIENTRY glClearColorIuiEXT (GLuint red, GLuint green, GLuint blue, GLuint alpha); +#endif +#endif /* GL_EXT_texture_integer */ + +#ifndef GL_EXT_texture_lod_bias +#define GL_EXT_texture_lod_bias 1 +#define GL_MAX_TEXTURE_LOD_BIAS_EXT 0x84FD +#define GL_TEXTURE_FILTER_CONTROL_EXT 0x8500 +#define GL_TEXTURE_LOD_BIAS_EXT 0x8501 +#endif /* GL_EXT_texture_lod_bias */ + +#ifndef GL_EXT_texture_mirror_clamp +#define GL_EXT_texture_mirror_clamp 1 +#define GL_MIRROR_CLAMP_EXT 0x8742 +#define GL_MIRROR_CLAMP_TO_EDGE_EXT 0x8743 +#define GL_MIRROR_CLAMP_TO_BORDER_EXT 0x8912 +#endif /* GL_EXT_texture_mirror_clamp */ + +#ifndef GL_EXT_texture_object +#define GL_EXT_texture_object 1 +#define GL_TEXTURE_PRIORITY_EXT 0x8066 +#define GL_TEXTURE_RESIDENT_EXT 0x8067 +#define GL_TEXTURE_1D_BINDING_EXT 0x8068 +#define GL_TEXTURE_2D_BINDING_EXT 0x8069 +#define GL_TEXTURE_3D_BINDING_EXT 0x806A +typedef GLboolean (APIENTRYP PFNGLARETEXTURESRESIDENTEXTPROC) (GLsizei n, const GLuint *textures, GLboolean *residences); +typedef void (APIENTRYP PFNGLBINDTEXTUREEXTPROC) (GLenum target, GLuint texture); +typedef void (APIENTRYP PFNGLDELETETEXTURESEXTPROC) (GLsizei n, const GLuint *textures); +typedef void (APIENTRYP PFNGLGENTEXTURESEXTPROC) (GLsizei n, GLuint *textures); +typedef GLboolean (APIENTRYP PFNGLISTEXTUREEXTPROC) (GLuint texture); +typedef void (APIENTRYP PFNGLPRIORITIZETEXTURESEXTPROC) (GLsizei n, const GLuint *textures, const GLclampf *priorities); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI GLboolean APIENTRY glAreTexturesResidentEXT (GLsizei n, const GLuint *textures, GLboolean *residences); +GLAPI void APIENTRY glBindTextureEXT (GLenum target, GLuint texture); +GLAPI void APIENTRY glDeleteTexturesEXT (GLsizei n, const GLuint *textures); +GLAPI void APIENTRY glGenTexturesEXT (GLsizei n, GLuint *textures); +GLAPI GLboolean APIENTRY glIsTextureEXT (GLuint texture); +GLAPI void APIENTRY glPrioritizeTexturesEXT (GLsizei n, const GLuint *textures, const GLclampf *priorities); +#endif +#endif /* GL_EXT_texture_object */ + +#ifndef GL_EXT_texture_perturb_normal +#define GL_EXT_texture_perturb_normal 1 +#define GL_PERTURB_EXT 0x85AE +#define GL_TEXTURE_NORMAL_EXT 0x85AF +typedef void (APIENTRYP PFNGLTEXTURENORMALEXTPROC) (GLenum mode); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glTextureNormalEXT (GLenum mode); +#endif +#endif /* GL_EXT_texture_perturb_normal */ + +#ifndef GL_EXT_texture_sRGB +#define GL_EXT_texture_sRGB 1 +#define GL_SRGB_EXT 0x8C40 +#define GL_SRGB8_EXT 0x8C41 +#define GL_SRGB_ALPHA_EXT 0x8C42 +#define GL_SRGB8_ALPHA8_EXT 0x8C43 +#define GL_SLUMINANCE_ALPHA_EXT 0x8C44 +#define GL_SLUMINANCE8_ALPHA8_EXT 0x8C45 +#define GL_SLUMINANCE_EXT 0x8C46 +#define GL_SLUMINANCE8_EXT 0x8C47 +#define GL_COMPRESSED_SRGB_EXT 0x8C48 +#define GL_COMPRESSED_SRGB_ALPHA_EXT 0x8C49 +#define GL_COMPRESSED_SLUMINANCE_EXT 0x8C4A +#define GL_COMPRESSED_SLUMINANCE_ALPHA_EXT 0x8C4B +#define GL_COMPRESSED_SRGB_S3TC_DXT1_EXT 0x8C4C +#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT 0x8C4D +#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT 0x8C4E +#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT 0x8C4F +#endif /* GL_EXT_texture_sRGB */ + +#ifndef GL_EXT_texture_sRGB_R8 +#define GL_EXT_texture_sRGB_R8 1 +#define GL_SR8_EXT 0x8FBD +#endif /* GL_EXT_texture_sRGB_R8 */ + +#ifndef GL_EXT_texture_sRGB_RG8 +#define GL_EXT_texture_sRGB_RG8 1 +#define GL_SRG8_EXT 0x8FBE +#endif /* GL_EXT_texture_sRGB_RG8 */ + +#ifndef GL_EXT_texture_sRGB_decode +#define GL_EXT_texture_sRGB_decode 1 +#define GL_TEXTURE_SRGB_DECODE_EXT 0x8A48 +#define GL_DECODE_EXT 0x8A49 +#define GL_SKIP_DECODE_EXT 0x8A4A +#endif /* GL_EXT_texture_sRGB_decode */ + +#ifndef GL_EXT_texture_shadow_lod +#define GL_EXT_texture_shadow_lod 1 +#endif /* GL_EXT_texture_shadow_lod */ + +#ifndef GL_EXT_texture_shared_exponent +#define GL_EXT_texture_shared_exponent 1 +#define GL_RGB9_E5_EXT 0x8C3D +#define GL_UNSIGNED_INT_5_9_9_9_REV_EXT 0x8C3E +#define GL_TEXTURE_SHARED_SIZE_EXT 0x8C3F +#endif /* GL_EXT_texture_shared_exponent */ + +#ifndef GL_EXT_texture_snorm +#define GL_EXT_texture_snorm 1 +#define GL_ALPHA_SNORM 0x9010 +#define GL_LUMINANCE_SNORM 0x9011 +#define GL_LUMINANCE_ALPHA_SNORM 0x9012 +#define GL_INTENSITY_SNORM 0x9013 +#define GL_ALPHA8_SNORM 0x9014 +#define GL_LUMINANCE8_SNORM 0x9015 +#define GL_LUMINANCE8_ALPHA8_SNORM 0x9016 +#define GL_INTENSITY8_SNORM 0x9017 +#define GL_ALPHA16_SNORM 0x9018 +#define GL_LUMINANCE16_SNORM 0x9019 +#define GL_LUMINANCE16_ALPHA16_SNORM 0x901A +#define GL_INTENSITY16_SNORM 0x901B +#define GL_RED_SNORM 0x8F90 +#define GL_RG_SNORM 0x8F91 +#define GL_RGB_SNORM 0x8F92 +#define GL_RGBA_SNORM 0x8F93 +#endif /* GL_EXT_texture_snorm */ + +#ifndef GL_EXT_texture_storage +#define GL_EXT_texture_storage 1 +#define GL_TEXTURE_IMMUTABLE_FORMAT_EXT 0x912F +#define GL_RGBA32F_EXT 0x8814 +#define GL_RGB32F_EXT 0x8815 +#define GL_ALPHA32F_EXT 0x8816 +#define GL_LUMINANCE32F_EXT 0x8818 +#define GL_LUMINANCE_ALPHA32F_EXT 0x8819 +#define GL_RGBA16F_EXT 0x881A +#define GL_RGB16F_EXT 0x881B +#define GL_ALPHA16F_EXT 0x881C +#define GL_LUMINANCE16F_EXT 0x881E +#define GL_LUMINANCE_ALPHA16F_EXT 0x881F +#define GL_BGRA8_EXT 0x93A1 +#define GL_R8_EXT 0x8229 +#define GL_RG8_EXT 0x822B +#define GL_R32F_EXT 0x822E +#define GL_RG32F_EXT 0x8230 +#define GL_R16F_EXT 0x822D +#define GL_RG16F_EXT 0x822F +typedef void (APIENTRYP PFNGLTEXSTORAGE1DEXTPROC) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width); +typedef void (APIENTRYP PFNGLTEXSTORAGE2DEXTPROC) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); +typedef void (APIENTRYP PFNGLTEXSTORAGE3DEXTPROC) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glTexStorage1DEXT (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width); +GLAPI void APIENTRY glTexStorage2DEXT (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); +GLAPI void APIENTRY glTexStorage3DEXT (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); +#endif +#endif /* GL_EXT_texture_storage */ + +#ifndef GL_EXT_texture_swizzle +#define GL_EXT_texture_swizzle 1 +#define GL_TEXTURE_SWIZZLE_R_EXT 0x8E42 +#define GL_TEXTURE_SWIZZLE_G_EXT 0x8E43 +#define GL_TEXTURE_SWIZZLE_B_EXT 0x8E44 +#define GL_TEXTURE_SWIZZLE_A_EXT 0x8E45 +#define GL_TEXTURE_SWIZZLE_RGBA_EXT 0x8E46 +#endif /* GL_EXT_texture_swizzle */ + +#ifndef GL_EXT_timer_query +#define GL_EXT_timer_query 1 +#define GL_TIME_ELAPSED_EXT 0x88BF +typedef void (APIENTRYP PFNGLGETQUERYOBJECTI64VEXTPROC) (GLuint id, GLenum pname, GLint64 *params); +typedef void (APIENTRYP PFNGLGETQUERYOBJECTUI64VEXTPROC) (GLuint id, GLenum pname, GLuint64 *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glGetQueryObjecti64vEXT (GLuint id, GLenum pname, GLint64 *params); +GLAPI void APIENTRY glGetQueryObjectui64vEXT (GLuint id, GLenum pname, GLuint64 *params); +#endif +#endif /* GL_EXT_timer_query */ + +#ifndef GL_EXT_transform_feedback +#define GL_EXT_transform_feedback 1 +#define GL_TRANSFORM_FEEDBACK_BUFFER_EXT 0x8C8E +#define GL_TRANSFORM_FEEDBACK_BUFFER_START_EXT 0x8C84 +#define GL_TRANSFORM_FEEDBACK_BUFFER_SIZE_EXT 0x8C85 +#define GL_TRANSFORM_FEEDBACK_BUFFER_BINDING_EXT 0x8C8F +#define GL_INTERLEAVED_ATTRIBS_EXT 0x8C8C +#define GL_SEPARATE_ATTRIBS_EXT 0x8C8D +#define GL_PRIMITIVES_GENERATED_EXT 0x8C87 +#define GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN_EXT 0x8C88 +#define GL_RASTERIZER_DISCARD_EXT 0x8C89 +#define GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS_EXT 0x8C8A +#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS_EXT 0x8C8B +#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS_EXT 0x8C80 +#define GL_TRANSFORM_FEEDBACK_VARYINGS_EXT 0x8C83 +#define GL_TRANSFORM_FEEDBACK_BUFFER_MODE_EXT 0x8C7F +#define GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH_EXT 0x8C76 +typedef void (APIENTRYP PFNGLBEGINTRANSFORMFEEDBACKEXTPROC) (GLenum primitiveMode); +typedef void (APIENTRYP PFNGLENDTRANSFORMFEEDBACKEXTPROC) (void); +typedef void (APIENTRYP PFNGLBINDBUFFERRANGEEXTPROC) (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); +typedef void (APIENTRYP PFNGLBINDBUFFEROFFSETEXTPROC) (GLenum target, GLuint index, GLuint buffer, GLintptr offset); +typedef void (APIENTRYP PFNGLBINDBUFFERBASEEXTPROC) (GLenum target, GLuint index, GLuint buffer); +typedef void (APIENTRYP PFNGLTRANSFORMFEEDBACKVARYINGSEXTPROC) (GLuint program, GLsizei count, const GLchar *const*varyings, GLenum bufferMode); +typedef void (APIENTRYP PFNGLGETTRANSFORMFEEDBACKVARYINGEXTPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBeginTransformFeedbackEXT (GLenum primitiveMode); +GLAPI void APIENTRY glEndTransformFeedbackEXT (void); +GLAPI void APIENTRY glBindBufferRangeEXT (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); +GLAPI void APIENTRY glBindBufferOffsetEXT (GLenum target, GLuint index, GLuint buffer, GLintptr offset); +GLAPI void APIENTRY glBindBufferBaseEXT (GLenum target, GLuint index, GLuint buffer); +GLAPI void APIENTRY glTransformFeedbackVaryingsEXT (GLuint program, GLsizei count, const GLchar *const*varyings, GLenum bufferMode); +GLAPI void APIENTRY glGetTransformFeedbackVaryingEXT (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name); +#endif +#endif /* GL_EXT_transform_feedback */ + +#ifndef GL_EXT_vertex_array +#define GL_EXT_vertex_array 1 +#define GL_VERTEX_ARRAY_EXT 0x8074 +#define GL_NORMAL_ARRAY_EXT 0x8075 +#define GL_COLOR_ARRAY_EXT 0x8076 +#define GL_INDEX_ARRAY_EXT 0x8077 +#define GL_TEXTURE_COORD_ARRAY_EXT 0x8078 +#define GL_EDGE_FLAG_ARRAY_EXT 0x8079 +#define GL_VERTEX_ARRAY_SIZE_EXT 0x807A +#define GL_VERTEX_ARRAY_TYPE_EXT 0x807B +#define GL_VERTEX_ARRAY_STRIDE_EXT 0x807C +#define GL_VERTEX_ARRAY_COUNT_EXT 0x807D +#define GL_NORMAL_ARRAY_TYPE_EXT 0x807E +#define GL_NORMAL_ARRAY_STRIDE_EXT 0x807F +#define GL_NORMAL_ARRAY_COUNT_EXT 0x8080 +#define GL_COLOR_ARRAY_SIZE_EXT 0x8081 +#define GL_COLOR_ARRAY_TYPE_EXT 0x8082 +#define GL_COLOR_ARRAY_STRIDE_EXT 0x8083 +#define GL_COLOR_ARRAY_COUNT_EXT 0x8084 +#define GL_INDEX_ARRAY_TYPE_EXT 0x8085 +#define GL_INDEX_ARRAY_STRIDE_EXT 0x8086 +#define GL_INDEX_ARRAY_COUNT_EXT 0x8087 +#define GL_TEXTURE_COORD_ARRAY_SIZE_EXT 0x8088 +#define GL_TEXTURE_COORD_ARRAY_TYPE_EXT 0x8089 +#define GL_TEXTURE_COORD_ARRAY_STRIDE_EXT 0x808A +#define GL_TEXTURE_COORD_ARRAY_COUNT_EXT 0x808B +#define GL_EDGE_FLAG_ARRAY_STRIDE_EXT 0x808C +#define GL_EDGE_FLAG_ARRAY_COUNT_EXT 0x808D +#define GL_VERTEX_ARRAY_POINTER_EXT 0x808E +#define GL_NORMAL_ARRAY_POINTER_EXT 0x808F +#define GL_COLOR_ARRAY_POINTER_EXT 0x8090 +#define GL_INDEX_ARRAY_POINTER_EXT 0x8091 +#define GL_TEXTURE_COORD_ARRAY_POINTER_EXT 0x8092 +#define GL_EDGE_FLAG_ARRAY_POINTER_EXT 0x8093 +typedef void (APIENTRYP PFNGLARRAYELEMENTEXTPROC) (GLint i); +typedef void (APIENTRYP PFNGLCOLORPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, GLsizei count, const void *pointer); +typedef void (APIENTRYP PFNGLDRAWARRAYSEXTPROC) (GLenum mode, GLint first, GLsizei count); +typedef void (APIENTRYP PFNGLEDGEFLAGPOINTEREXTPROC) (GLsizei stride, GLsizei count, const GLboolean *pointer); +typedef void (APIENTRYP PFNGLGETPOINTERVEXTPROC) (GLenum pname, void **params); +typedef void (APIENTRYP PFNGLINDEXPOINTEREXTPROC) (GLenum type, GLsizei stride, GLsizei count, const void *pointer); +typedef void (APIENTRYP PFNGLNORMALPOINTEREXTPROC) (GLenum type, GLsizei stride, GLsizei count, const void *pointer); +typedef void (APIENTRYP PFNGLTEXCOORDPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, GLsizei count, const void *pointer); +typedef void (APIENTRYP PFNGLVERTEXPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, GLsizei count, const void *pointer); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glArrayElementEXT (GLint i); +GLAPI void APIENTRY glColorPointerEXT (GLint size, GLenum type, GLsizei stride, GLsizei count, const void *pointer); +GLAPI void APIENTRY glDrawArraysEXT (GLenum mode, GLint first, GLsizei count); +GLAPI void APIENTRY glEdgeFlagPointerEXT (GLsizei stride, GLsizei count, const GLboolean *pointer); +GLAPI void APIENTRY glGetPointervEXT (GLenum pname, void **params); +GLAPI void APIENTRY glIndexPointerEXT (GLenum type, GLsizei stride, GLsizei count, const void *pointer); +GLAPI void APIENTRY glNormalPointerEXT (GLenum type, GLsizei stride, GLsizei count, const void *pointer); +GLAPI void APIENTRY glTexCoordPointerEXT (GLint size, GLenum type, GLsizei stride, GLsizei count, const void *pointer); +GLAPI void APIENTRY glVertexPointerEXT (GLint size, GLenum type, GLsizei stride, GLsizei count, const void *pointer); +#endif +#endif /* GL_EXT_vertex_array */ + +#ifndef GL_EXT_vertex_array_bgra +#define GL_EXT_vertex_array_bgra 1 +#endif /* GL_EXT_vertex_array_bgra */ + +#ifndef GL_EXT_vertex_attrib_64bit +#define GL_EXT_vertex_attrib_64bit 1 +#define GL_DOUBLE_VEC2_EXT 0x8FFC +#define GL_DOUBLE_VEC3_EXT 0x8FFD +#define GL_DOUBLE_VEC4_EXT 0x8FFE +#define GL_DOUBLE_MAT2_EXT 0x8F46 +#define GL_DOUBLE_MAT3_EXT 0x8F47 +#define GL_DOUBLE_MAT4_EXT 0x8F48 +#define GL_DOUBLE_MAT2x3_EXT 0x8F49 +#define GL_DOUBLE_MAT2x4_EXT 0x8F4A +#define GL_DOUBLE_MAT3x2_EXT 0x8F4B +#define GL_DOUBLE_MAT3x4_EXT 0x8F4C +#define GL_DOUBLE_MAT4x2_EXT 0x8F4D +#define GL_DOUBLE_MAT4x3_EXT 0x8F4E +typedef void (APIENTRYP PFNGLVERTEXATTRIBL1DEXTPROC) (GLuint index, GLdouble x); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL2DEXTPROC) (GLuint index, GLdouble x, GLdouble y); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL3DEXTPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL4DEXTPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL1DVEXTPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL2DVEXTPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL3DVEXTPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL4DVEXTPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBLPOINTEREXTPROC) (GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBLDVEXTPROC) (GLuint index, GLenum pname, GLdouble *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glVertexAttribL1dEXT (GLuint index, GLdouble x); +GLAPI void APIENTRY glVertexAttribL2dEXT (GLuint index, GLdouble x, GLdouble y); +GLAPI void APIENTRY glVertexAttribL3dEXT (GLuint index, GLdouble x, GLdouble y, GLdouble z); +GLAPI void APIENTRY glVertexAttribL4dEXT (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +GLAPI void APIENTRY glVertexAttribL1dvEXT (GLuint index, const GLdouble *v); +GLAPI void APIENTRY glVertexAttribL2dvEXT (GLuint index, const GLdouble *v); +GLAPI void APIENTRY glVertexAttribL3dvEXT (GLuint index, const GLdouble *v); +GLAPI void APIENTRY glVertexAttribL4dvEXT (GLuint index, const GLdouble *v); +GLAPI void APIENTRY glVertexAttribLPointerEXT (GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer); +GLAPI void APIENTRY glGetVertexAttribLdvEXT (GLuint index, GLenum pname, GLdouble *params); +#endif +#endif /* GL_EXT_vertex_attrib_64bit */ + +#ifndef GL_EXT_vertex_shader +#define GL_EXT_vertex_shader 1 +#define GL_VERTEX_SHADER_EXT 0x8780 +#define GL_VERTEX_SHADER_BINDING_EXT 0x8781 +#define GL_OP_INDEX_EXT 0x8782 +#define GL_OP_NEGATE_EXT 0x8783 +#define GL_OP_DOT3_EXT 0x8784 +#define GL_OP_DOT4_EXT 0x8785 +#define GL_OP_MUL_EXT 0x8786 +#define GL_OP_ADD_EXT 0x8787 +#define GL_OP_MADD_EXT 0x8788 +#define GL_OP_FRAC_EXT 0x8789 +#define GL_OP_MAX_EXT 0x878A +#define GL_OP_MIN_EXT 0x878B +#define GL_OP_SET_GE_EXT 0x878C +#define GL_OP_SET_LT_EXT 0x878D +#define GL_OP_CLAMP_EXT 0x878E +#define GL_OP_FLOOR_EXT 0x878F +#define GL_OP_ROUND_EXT 0x8790 +#define GL_OP_EXP_BASE_2_EXT 0x8791 +#define GL_OP_LOG_BASE_2_EXT 0x8792 +#define GL_OP_POWER_EXT 0x8793 +#define GL_OP_RECIP_EXT 0x8794 +#define GL_OP_RECIP_SQRT_EXT 0x8795 +#define GL_OP_SUB_EXT 0x8796 +#define GL_OP_CROSS_PRODUCT_EXT 0x8797 +#define GL_OP_MULTIPLY_MATRIX_EXT 0x8798 +#define GL_OP_MOV_EXT 0x8799 +#define GL_OUTPUT_VERTEX_EXT 0x879A +#define GL_OUTPUT_COLOR0_EXT 0x879B +#define GL_OUTPUT_COLOR1_EXT 0x879C +#define GL_OUTPUT_TEXTURE_COORD0_EXT 0x879D +#define GL_OUTPUT_TEXTURE_COORD1_EXT 0x879E +#define GL_OUTPUT_TEXTURE_COORD2_EXT 0x879F +#define GL_OUTPUT_TEXTURE_COORD3_EXT 0x87A0 +#define GL_OUTPUT_TEXTURE_COORD4_EXT 0x87A1 +#define GL_OUTPUT_TEXTURE_COORD5_EXT 0x87A2 +#define GL_OUTPUT_TEXTURE_COORD6_EXT 0x87A3 +#define GL_OUTPUT_TEXTURE_COORD7_EXT 0x87A4 +#define GL_OUTPUT_TEXTURE_COORD8_EXT 0x87A5 +#define GL_OUTPUT_TEXTURE_COORD9_EXT 0x87A6 +#define GL_OUTPUT_TEXTURE_COORD10_EXT 0x87A7 +#define GL_OUTPUT_TEXTURE_COORD11_EXT 0x87A8 +#define GL_OUTPUT_TEXTURE_COORD12_EXT 0x87A9 +#define GL_OUTPUT_TEXTURE_COORD13_EXT 0x87AA +#define GL_OUTPUT_TEXTURE_COORD14_EXT 0x87AB +#define GL_OUTPUT_TEXTURE_COORD15_EXT 0x87AC +#define GL_OUTPUT_TEXTURE_COORD16_EXT 0x87AD +#define GL_OUTPUT_TEXTURE_COORD17_EXT 0x87AE +#define GL_OUTPUT_TEXTURE_COORD18_EXT 0x87AF +#define GL_OUTPUT_TEXTURE_COORD19_EXT 0x87B0 +#define GL_OUTPUT_TEXTURE_COORD20_EXT 0x87B1 +#define GL_OUTPUT_TEXTURE_COORD21_EXT 0x87B2 +#define GL_OUTPUT_TEXTURE_COORD22_EXT 0x87B3 +#define GL_OUTPUT_TEXTURE_COORD23_EXT 0x87B4 +#define GL_OUTPUT_TEXTURE_COORD24_EXT 0x87B5 +#define GL_OUTPUT_TEXTURE_COORD25_EXT 0x87B6 +#define GL_OUTPUT_TEXTURE_COORD26_EXT 0x87B7 +#define GL_OUTPUT_TEXTURE_COORD27_EXT 0x87B8 +#define GL_OUTPUT_TEXTURE_COORD28_EXT 0x87B9 +#define GL_OUTPUT_TEXTURE_COORD29_EXT 0x87BA +#define GL_OUTPUT_TEXTURE_COORD30_EXT 0x87BB +#define GL_OUTPUT_TEXTURE_COORD31_EXT 0x87BC +#define GL_OUTPUT_FOG_EXT 0x87BD +#define GL_SCALAR_EXT 0x87BE +#define GL_VECTOR_EXT 0x87BF +#define GL_MATRIX_EXT 0x87C0 +#define GL_VARIANT_EXT 0x87C1 +#define GL_INVARIANT_EXT 0x87C2 +#define GL_LOCAL_CONSTANT_EXT 0x87C3 +#define GL_LOCAL_EXT 0x87C4 +#define GL_MAX_VERTEX_SHADER_INSTRUCTIONS_EXT 0x87C5 +#define GL_MAX_VERTEX_SHADER_VARIANTS_EXT 0x87C6 +#define GL_MAX_VERTEX_SHADER_INVARIANTS_EXT 0x87C7 +#define GL_MAX_VERTEX_SHADER_LOCAL_CONSTANTS_EXT 0x87C8 +#define GL_MAX_VERTEX_SHADER_LOCALS_EXT 0x87C9 +#define GL_MAX_OPTIMIZED_VERTEX_SHADER_INSTRUCTIONS_EXT 0x87CA +#define GL_MAX_OPTIMIZED_VERTEX_SHADER_VARIANTS_EXT 0x87CB +#define GL_MAX_OPTIMIZED_VERTEX_SHADER_LOCAL_CONSTANTS_EXT 0x87CC +#define GL_MAX_OPTIMIZED_VERTEX_SHADER_INVARIANTS_EXT 0x87CD +#define GL_MAX_OPTIMIZED_VERTEX_SHADER_LOCALS_EXT 0x87CE +#define GL_VERTEX_SHADER_INSTRUCTIONS_EXT 0x87CF +#define GL_VERTEX_SHADER_VARIANTS_EXT 0x87D0 +#define GL_VERTEX_SHADER_INVARIANTS_EXT 0x87D1 +#define GL_VERTEX_SHADER_LOCAL_CONSTANTS_EXT 0x87D2 +#define GL_VERTEX_SHADER_LOCALS_EXT 0x87D3 +#define GL_VERTEX_SHADER_OPTIMIZED_EXT 0x87D4 +#define GL_X_EXT 0x87D5 +#define GL_Y_EXT 0x87D6 +#define GL_Z_EXT 0x87D7 +#define GL_W_EXT 0x87D8 +#define GL_NEGATIVE_X_EXT 0x87D9 +#define GL_NEGATIVE_Y_EXT 0x87DA +#define GL_NEGATIVE_Z_EXT 0x87DB +#define GL_NEGATIVE_W_EXT 0x87DC +#define GL_ZERO_EXT 0x87DD +#define GL_ONE_EXT 0x87DE +#define GL_NEGATIVE_ONE_EXT 0x87DF +#define GL_NORMALIZED_RANGE_EXT 0x87E0 +#define GL_FULL_RANGE_EXT 0x87E1 +#define GL_CURRENT_VERTEX_EXT 0x87E2 +#define GL_MVP_MATRIX_EXT 0x87E3 +#define GL_VARIANT_VALUE_EXT 0x87E4 +#define GL_VARIANT_DATATYPE_EXT 0x87E5 +#define GL_VARIANT_ARRAY_STRIDE_EXT 0x87E6 +#define GL_VARIANT_ARRAY_TYPE_EXT 0x87E7 +#define GL_VARIANT_ARRAY_EXT 0x87E8 +#define GL_VARIANT_ARRAY_POINTER_EXT 0x87E9 +#define GL_INVARIANT_VALUE_EXT 0x87EA +#define GL_INVARIANT_DATATYPE_EXT 0x87EB +#define GL_LOCAL_CONSTANT_VALUE_EXT 0x87EC +#define GL_LOCAL_CONSTANT_DATATYPE_EXT 0x87ED +typedef void (APIENTRYP PFNGLBEGINVERTEXSHADEREXTPROC) (void); +typedef void (APIENTRYP PFNGLENDVERTEXSHADEREXTPROC) (void); +typedef void (APIENTRYP PFNGLBINDVERTEXSHADEREXTPROC) (GLuint id); +typedef GLuint (APIENTRYP PFNGLGENVERTEXSHADERSEXTPROC) (GLuint range); +typedef void (APIENTRYP PFNGLDELETEVERTEXSHADEREXTPROC) (GLuint id); +typedef void (APIENTRYP PFNGLSHADEROP1EXTPROC) (GLenum op, GLuint res, GLuint arg1); +typedef void (APIENTRYP PFNGLSHADEROP2EXTPROC) (GLenum op, GLuint res, GLuint arg1, GLuint arg2); +typedef void (APIENTRYP PFNGLSHADEROP3EXTPROC) (GLenum op, GLuint res, GLuint arg1, GLuint arg2, GLuint arg3); +typedef void (APIENTRYP PFNGLSWIZZLEEXTPROC) (GLuint res, GLuint in, GLenum outX, GLenum outY, GLenum outZ, GLenum outW); +typedef void (APIENTRYP PFNGLWRITEMASKEXTPROC) (GLuint res, GLuint in, GLenum outX, GLenum outY, GLenum outZ, GLenum outW); +typedef void (APIENTRYP PFNGLINSERTCOMPONENTEXTPROC) (GLuint res, GLuint src, GLuint num); +typedef void (APIENTRYP PFNGLEXTRACTCOMPONENTEXTPROC) (GLuint res, GLuint src, GLuint num); +typedef GLuint (APIENTRYP PFNGLGENSYMBOLSEXTPROC) (GLenum datatype, GLenum storagetype, GLenum range, GLuint components); +typedef void (APIENTRYP PFNGLSETINVARIANTEXTPROC) (GLuint id, GLenum type, const void *addr); +typedef void (APIENTRYP PFNGLSETLOCALCONSTANTEXTPROC) (GLuint id, GLenum type, const void *addr); +typedef void (APIENTRYP PFNGLVARIANTBVEXTPROC) (GLuint id, const GLbyte *addr); +typedef void (APIENTRYP PFNGLVARIANTSVEXTPROC) (GLuint id, const GLshort *addr); +typedef void (APIENTRYP PFNGLVARIANTIVEXTPROC) (GLuint id, const GLint *addr); +typedef void (APIENTRYP PFNGLVARIANTFVEXTPROC) (GLuint id, const GLfloat *addr); +typedef void (APIENTRYP PFNGLVARIANTDVEXTPROC) (GLuint id, const GLdouble *addr); +typedef void (APIENTRYP PFNGLVARIANTUBVEXTPROC) (GLuint id, const GLubyte *addr); +typedef void (APIENTRYP PFNGLVARIANTUSVEXTPROC) (GLuint id, const GLushort *addr); +typedef void (APIENTRYP PFNGLVARIANTUIVEXTPROC) (GLuint id, const GLuint *addr); +typedef void (APIENTRYP PFNGLVARIANTPOINTEREXTPROC) (GLuint id, GLenum type, GLuint stride, const void *addr); +typedef void (APIENTRYP PFNGLENABLEVARIANTCLIENTSTATEEXTPROC) (GLuint id); +typedef void (APIENTRYP PFNGLDISABLEVARIANTCLIENTSTATEEXTPROC) (GLuint id); +typedef GLuint (APIENTRYP PFNGLBINDLIGHTPARAMETEREXTPROC) (GLenum light, GLenum value); +typedef GLuint (APIENTRYP PFNGLBINDMATERIALPARAMETEREXTPROC) (GLenum face, GLenum value); +typedef GLuint (APIENTRYP PFNGLBINDTEXGENPARAMETEREXTPROC) (GLenum unit, GLenum coord, GLenum value); +typedef GLuint (APIENTRYP PFNGLBINDTEXTUREUNITPARAMETEREXTPROC) (GLenum unit, GLenum value); +typedef GLuint (APIENTRYP PFNGLBINDPARAMETEREXTPROC) (GLenum value); +typedef GLboolean (APIENTRYP PFNGLISVARIANTENABLEDEXTPROC) (GLuint id, GLenum cap); +typedef void (APIENTRYP PFNGLGETVARIANTBOOLEANVEXTPROC) (GLuint id, GLenum value, GLboolean *data); +typedef void (APIENTRYP PFNGLGETVARIANTINTEGERVEXTPROC) (GLuint id, GLenum value, GLint *data); +typedef void (APIENTRYP PFNGLGETVARIANTFLOATVEXTPROC) (GLuint id, GLenum value, GLfloat *data); +typedef void (APIENTRYP PFNGLGETVARIANTPOINTERVEXTPROC) (GLuint id, GLenum value, void **data); +typedef void (APIENTRYP PFNGLGETINVARIANTBOOLEANVEXTPROC) (GLuint id, GLenum value, GLboolean *data); +typedef void (APIENTRYP PFNGLGETINVARIANTINTEGERVEXTPROC) (GLuint id, GLenum value, GLint *data); +typedef void (APIENTRYP PFNGLGETINVARIANTFLOATVEXTPROC) (GLuint id, GLenum value, GLfloat *data); +typedef void (APIENTRYP PFNGLGETLOCALCONSTANTBOOLEANVEXTPROC) (GLuint id, GLenum value, GLboolean *data); +typedef void (APIENTRYP PFNGLGETLOCALCONSTANTINTEGERVEXTPROC) (GLuint id, GLenum value, GLint *data); +typedef void (APIENTRYP PFNGLGETLOCALCONSTANTFLOATVEXTPROC) (GLuint id, GLenum value, GLfloat *data); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBeginVertexShaderEXT (void); +GLAPI void APIENTRY glEndVertexShaderEXT (void); +GLAPI void APIENTRY glBindVertexShaderEXT (GLuint id); +GLAPI GLuint APIENTRY glGenVertexShadersEXT (GLuint range); +GLAPI void APIENTRY glDeleteVertexShaderEXT (GLuint id); +GLAPI void APIENTRY glShaderOp1EXT (GLenum op, GLuint res, GLuint arg1); +GLAPI void APIENTRY glShaderOp2EXT (GLenum op, GLuint res, GLuint arg1, GLuint arg2); +GLAPI void APIENTRY glShaderOp3EXT (GLenum op, GLuint res, GLuint arg1, GLuint arg2, GLuint arg3); +GLAPI void APIENTRY glSwizzleEXT (GLuint res, GLuint in, GLenum outX, GLenum outY, GLenum outZ, GLenum outW); +GLAPI void APIENTRY glWriteMaskEXT (GLuint res, GLuint in, GLenum outX, GLenum outY, GLenum outZ, GLenum outW); +GLAPI void APIENTRY glInsertComponentEXT (GLuint res, GLuint src, GLuint num); +GLAPI void APIENTRY glExtractComponentEXT (GLuint res, GLuint src, GLuint num); +GLAPI GLuint APIENTRY glGenSymbolsEXT (GLenum datatype, GLenum storagetype, GLenum range, GLuint components); +GLAPI void APIENTRY glSetInvariantEXT (GLuint id, GLenum type, const void *addr); +GLAPI void APIENTRY glSetLocalConstantEXT (GLuint id, GLenum type, const void *addr); +GLAPI void APIENTRY glVariantbvEXT (GLuint id, const GLbyte *addr); +GLAPI void APIENTRY glVariantsvEXT (GLuint id, const GLshort *addr); +GLAPI void APIENTRY glVariantivEXT (GLuint id, const GLint *addr); +GLAPI void APIENTRY glVariantfvEXT (GLuint id, const GLfloat *addr); +GLAPI void APIENTRY glVariantdvEXT (GLuint id, const GLdouble *addr); +GLAPI void APIENTRY glVariantubvEXT (GLuint id, const GLubyte *addr); +GLAPI void APIENTRY glVariantusvEXT (GLuint id, const GLushort *addr); +GLAPI void APIENTRY glVariantuivEXT (GLuint id, const GLuint *addr); +GLAPI void APIENTRY glVariantPointerEXT (GLuint id, GLenum type, GLuint stride, const void *addr); +GLAPI void APIENTRY glEnableVariantClientStateEXT (GLuint id); +GLAPI void APIENTRY glDisableVariantClientStateEXT (GLuint id); +GLAPI GLuint APIENTRY glBindLightParameterEXT (GLenum light, GLenum value); +GLAPI GLuint APIENTRY glBindMaterialParameterEXT (GLenum face, GLenum value); +GLAPI GLuint APIENTRY glBindTexGenParameterEXT (GLenum unit, GLenum coord, GLenum value); +GLAPI GLuint APIENTRY glBindTextureUnitParameterEXT (GLenum unit, GLenum value); +GLAPI GLuint APIENTRY glBindParameterEXT (GLenum value); +GLAPI GLboolean APIENTRY glIsVariantEnabledEXT (GLuint id, GLenum cap); +GLAPI void APIENTRY glGetVariantBooleanvEXT (GLuint id, GLenum value, GLboolean *data); +GLAPI void APIENTRY glGetVariantIntegervEXT (GLuint id, GLenum value, GLint *data); +GLAPI void APIENTRY glGetVariantFloatvEXT (GLuint id, GLenum value, GLfloat *data); +GLAPI void APIENTRY glGetVariantPointervEXT (GLuint id, GLenum value, void **data); +GLAPI void APIENTRY glGetInvariantBooleanvEXT (GLuint id, GLenum value, GLboolean *data); +GLAPI void APIENTRY glGetInvariantIntegervEXT (GLuint id, GLenum value, GLint *data); +GLAPI void APIENTRY glGetInvariantFloatvEXT (GLuint id, GLenum value, GLfloat *data); +GLAPI void APIENTRY glGetLocalConstantBooleanvEXT (GLuint id, GLenum value, GLboolean *data); +GLAPI void APIENTRY glGetLocalConstantIntegervEXT (GLuint id, GLenum value, GLint *data); +GLAPI void APIENTRY glGetLocalConstantFloatvEXT (GLuint id, GLenum value, GLfloat *data); +#endif +#endif /* GL_EXT_vertex_shader */ + +#ifndef GL_EXT_vertex_weighting +#define GL_EXT_vertex_weighting 1 +#define GL_MODELVIEW0_STACK_DEPTH_EXT 0x0BA3 +#define GL_MODELVIEW1_STACK_DEPTH_EXT 0x8502 +#define GL_MODELVIEW0_MATRIX_EXT 0x0BA6 +#define GL_MODELVIEW1_MATRIX_EXT 0x8506 +#define GL_VERTEX_WEIGHTING_EXT 0x8509 +#define GL_MODELVIEW0_EXT 0x1700 +#define GL_MODELVIEW1_EXT 0x850A +#define GL_CURRENT_VERTEX_WEIGHT_EXT 0x850B +#define GL_VERTEX_WEIGHT_ARRAY_EXT 0x850C +#define GL_VERTEX_WEIGHT_ARRAY_SIZE_EXT 0x850D +#define GL_VERTEX_WEIGHT_ARRAY_TYPE_EXT 0x850E +#define GL_VERTEX_WEIGHT_ARRAY_STRIDE_EXT 0x850F +#define GL_VERTEX_WEIGHT_ARRAY_POINTER_EXT 0x8510 +typedef void (APIENTRYP PFNGLVERTEXWEIGHTFEXTPROC) (GLfloat weight); +typedef void (APIENTRYP PFNGLVERTEXWEIGHTFVEXTPROC) (const GLfloat *weight); +typedef void (APIENTRYP PFNGLVERTEXWEIGHTPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, const void *pointer); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glVertexWeightfEXT (GLfloat weight); +GLAPI void APIENTRY glVertexWeightfvEXT (const GLfloat *weight); +GLAPI void APIENTRY glVertexWeightPointerEXT (GLint size, GLenum type, GLsizei stride, const void *pointer); +#endif +#endif /* GL_EXT_vertex_weighting */ + +#ifndef GL_EXT_win32_keyed_mutex +#define GL_EXT_win32_keyed_mutex 1 +typedef GLboolean (APIENTRYP PFNGLACQUIREKEYEDMUTEXWIN32EXTPROC) (GLuint memory, GLuint64 key, GLuint timeout); +typedef GLboolean (APIENTRYP PFNGLRELEASEKEYEDMUTEXWIN32EXTPROC) (GLuint memory, GLuint64 key); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI GLboolean APIENTRY glAcquireKeyedMutexWin32EXT (GLuint memory, GLuint64 key, GLuint timeout); +GLAPI GLboolean APIENTRY glReleaseKeyedMutexWin32EXT (GLuint memory, GLuint64 key); +#endif +#endif /* GL_EXT_win32_keyed_mutex */ + +#ifndef GL_EXT_window_rectangles +#define GL_EXT_window_rectangles 1 +#define GL_INCLUSIVE_EXT 0x8F10 +#define GL_EXCLUSIVE_EXT 0x8F11 +#define GL_WINDOW_RECTANGLE_EXT 0x8F12 +#define GL_WINDOW_RECTANGLE_MODE_EXT 0x8F13 +#define GL_MAX_WINDOW_RECTANGLES_EXT 0x8F14 +#define GL_NUM_WINDOW_RECTANGLES_EXT 0x8F15 +typedef void (APIENTRYP PFNGLWINDOWRECTANGLESEXTPROC) (GLenum mode, GLsizei count, const GLint *box); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glWindowRectanglesEXT (GLenum mode, GLsizei count, const GLint *box); +#endif +#endif /* GL_EXT_window_rectangles */ + +#ifndef GL_EXT_x11_sync_object +#define GL_EXT_x11_sync_object 1 +#define GL_SYNC_X11_FENCE_EXT 0x90E1 +typedef GLsync (APIENTRYP PFNGLIMPORTSYNCEXTPROC) (GLenum external_sync_type, GLintptr external_sync, GLbitfield flags); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI GLsync APIENTRY glImportSyncEXT (GLenum external_sync_type, GLintptr external_sync, GLbitfield flags); +#endif +#endif /* GL_EXT_x11_sync_object */ + +#ifndef GL_GREMEDY_frame_terminator +#define GL_GREMEDY_frame_terminator 1 +typedef void (APIENTRYP PFNGLFRAMETERMINATORGREMEDYPROC) (void); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glFrameTerminatorGREMEDY (void); +#endif +#endif /* GL_GREMEDY_frame_terminator */ + +#ifndef GL_GREMEDY_string_marker +#define GL_GREMEDY_string_marker 1 +typedef void (APIENTRYP PFNGLSTRINGMARKERGREMEDYPROC) (GLsizei len, const void *string); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glStringMarkerGREMEDY (GLsizei len, const void *string); +#endif +#endif /* GL_GREMEDY_string_marker */ + +#ifndef GL_HP_convolution_border_modes +#define GL_HP_convolution_border_modes 1 +#define GL_IGNORE_BORDER_HP 0x8150 +#define GL_CONSTANT_BORDER_HP 0x8151 +#define GL_REPLICATE_BORDER_HP 0x8153 +#define GL_CONVOLUTION_BORDER_COLOR_HP 0x8154 +#endif /* GL_HP_convolution_border_modes */ + +#ifndef GL_HP_image_transform +#define GL_HP_image_transform 1 +#define GL_IMAGE_SCALE_X_HP 0x8155 +#define GL_IMAGE_SCALE_Y_HP 0x8156 +#define GL_IMAGE_TRANSLATE_X_HP 0x8157 +#define GL_IMAGE_TRANSLATE_Y_HP 0x8158 +#define GL_IMAGE_ROTATE_ANGLE_HP 0x8159 +#define GL_IMAGE_ROTATE_ORIGIN_X_HP 0x815A +#define GL_IMAGE_ROTATE_ORIGIN_Y_HP 0x815B +#define GL_IMAGE_MAG_FILTER_HP 0x815C +#define GL_IMAGE_MIN_FILTER_HP 0x815D +#define GL_IMAGE_CUBIC_WEIGHT_HP 0x815E +#define GL_CUBIC_HP 0x815F +#define GL_AVERAGE_HP 0x8160 +#define GL_IMAGE_TRANSFORM_2D_HP 0x8161 +#define GL_POST_IMAGE_TRANSFORM_COLOR_TABLE_HP 0x8162 +#define GL_PROXY_POST_IMAGE_TRANSFORM_COLOR_TABLE_HP 0x8163 +typedef void (APIENTRYP PFNGLIMAGETRANSFORMPARAMETERIHPPROC) (GLenum target, GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLIMAGETRANSFORMPARAMETERFHPPROC) (GLenum target, GLenum pname, GLfloat param); +typedef void (APIENTRYP PFNGLIMAGETRANSFORMPARAMETERIVHPPROC) (GLenum target, GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLIMAGETRANSFORMPARAMETERFVHPPROC) (GLenum target, GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLGETIMAGETRANSFORMPARAMETERIVHPPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETIMAGETRANSFORMPARAMETERFVHPPROC) (GLenum target, GLenum pname, GLfloat *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glImageTransformParameteriHP (GLenum target, GLenum pname, GLint param); +GLAPI void APIENTRY glImageTransformParameterfHP (GLenum target, GLenum pname, GLfloat param); +GLAPI void APIENTRY glImageTransformParameterivHP (GLenum target, GLenum pname, const GLint *params); +GLAPI void APIENTRY glImageTransformParameterfvHP (GLenum target, GLenum pname, const GLfloat *params); +GLAPI void APIENTRY glGetImageTransformParameterivHP (GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetImageTransformParameterfvHP (GLenum target, GLenum pname, GLfloat *params); +#endif +#endif /* GL_HP_image_transform */ + +#ifndef GL_HP_occlusion_test +#define GL_HP_occlusion_test 1 +#define GL_OCCLUSION_TEST_HP 0x8165 +#define GL_OCCLUSION_TEST_RESULT_HP 0x8166 +#endif /* GL_HP_occlusion_test */ + +#ifndef GL_HP_texture_lighting +#define GL_HP_texture_lighting 1 +#define GL_TEXTURE_LIGHTING_MODE_HP 0x8167 +#define GL_TEXTURE_POST_SPECULAR_HP 0x8168 +#define GL_TEXTURE_PRE_SPECULAR_HP 0x8169 +#endif /* GL_HP_texture_lighting */ + +#ifndef GL_IBM_cull_vertex +#define GL_IBM_cull_vertex 1 +#define GL_CULL_VERTEX_IBM 103050 +#endif /* GL_IBM_cull_vertex */ + +#ifndef GL_IBM_multimode_draw_arrays +#define GL_IBM_multimode_draw_arrays 1 +typedef void (APIENTRYP PFNGLMULTIMODEDRAWARRAYSIBMPROC) (const GLenum *mode, const GLint *first, const GLsizei *count, GLsizei primcount, GLint modestride); +typedef void (APIENTRYP PFNGLMULTIMODEDRAWELEMENTSIBMPROC) (const GLenum *mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei primcount, GLint modestride); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glMultiModeDrawArraysIBM (const GLenum *mode, const GLint *first, const GLsizei *count, GLsizei primcount, GLint modestride); +GLAPI void APIENTRY glMultiModeDrawElementsIBM (const GLenum *mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei primcount, GLint modestride); +#endif +#endif /* GL_IBM_multimode_draw_arrays */ + +#ifndef GL_IBM_rasterpos_clip +#define GL_IBM_rasterpos_clip 1 +#define GL_RASTER_POSITION_UNCLIPPED_IBM 0x19262 +#endif /* GL_IBM_rasterpos_clip */ + +#ifndef GL_IBM_static_data +#define GL_IBM_static_data 1 +#define GL_ALL_STATIC_DATA_IBM 103060 +#define GL_STATIC_VERTEX_ARRAY_IBM 103061 +typedef void (APIENTRYP PFNGLFLUSHSTATICDATAIBMPROC) (GLenum target); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glFlushStaticDataIBM (GLenum target); +#endif +#endif /* GL_IBM_static_data */ + +#ifndef GL_IBM_texture_mirrored_repeat +#define GL_IBM_texture_mirrored_repeat 1 +#define GL_MIRRORED_REPEAT_IBM 0x8370 +#endif /* GL_IBM_texture_mirrored_repeat */ + +#ifndef GL_IBM_vertex_array_lists +#define GL_IBM_vertex_array_lists 1 +#define GL_VERTEX_ARRAY_LIST_IBM 103070 +#define GL_NORMAL_ARRAY_LIST_IBM 103071 +#define GL_COLOR_ARRAY_LIST_IBM 103072 +#define GL_INDEX_ARRAY_LIST_IBM 103073 +#define GL_TEXTURE_COORD_ARRAY_LIST_IBM 103074 +#define GL_EDGE_FLAG_ARRAY_LIST_IBM 103075 +#define GL_FOG_COORDINATE_ARRAY_LIST_IBM 103076 +#define GL_SECONDARY_COLOR_ARRAY_LIST_IBM 103077 +#define GL_VERTEX_ARRAY_LIST_STRIDE_IBM 103080 +#define GL_NORMAL_ARRAY_LIST_STRIDE_IBM 103081 +#define GL_COLOR_ARRAY_LIST_STRIDE_IBM 103082 +#define GL_INDEX_ARRAY_LIST_STRIDE_IBM 103083 +#define GL_TEXTURE_COORD_ARRAY_LIST_STRIDE_IBM 103084 +#define GL_EDGE_FLAG_ARRAY_LIST_STRIDE_IBM 103085 +#define GL_FOG_COORDINATE_ARRAY_LIST_STRIDE_IBM 103086 +#define GL_SECONDARY_COLOR_ARRAY_LIST_STRIDE_IBM 103087 +typedef void (APIENTRYP PFNGLCOLORPOINTERLISTIBMPROC) (GLint size, GLenum type, GLint stride, const void **pointer, GLint ptrstride); +typedef void (APIENTRYP PFNGLSECONDARYCOLORPOINTERLISTIBMPROC) (GLint size, GLenum type, GLint stride, const void **pointer, GLint ptrstride); +typedef void (APIENTRYP PFNGLEDGEFLAGPOINTERLISTIBMPROC) (GLint stride, const GLboolean **pointer, GLint ptrstride); +typedef void (APIENTRYP PFNGLFOGCOORDPOINTERLISTIBMPROC) (GLenum type, GLint stride, const void **pointer, GLint ptrstride); +typedef void (APIENTRYP PFNGLINDEXPOINTERLISTIBMPROC) (GLenum type, GLint stride, const void **pointer, GLint ptrstride); +typedef void (APIENTRYP PFNGLNORMALPOINTERLISTIBMPROC) (GLenum type, GLint stride, const void **pointer, GLint ptrstride); +typedef void (APIENTRYP PFNGLTEXCOORDPOINTERLISTIBMPROC) (GLint size, GLenum type, GLint stride, const void **pointer, GLint ptrstride); +typedef void (APIENTRYP PFNGLVERTEXPOINTERLISTIBMPROC) (GLint size, GLenum type, GLint stride, const void **pointer, GLint ptrstride); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glColorPointerListIBM (GLint size, GLenum type, GLint stride, const void **pointer, GLint ptrstride); +GLAPI void APIENTRY glSecondaryColorPointerListIBM (GLint size, GLenum type, GLint stride, const void **pointer, GLint ptrstride); +GLAPI void APIENTRY glEdgeFlagPointerListIBM (GLint stride, const GLboolean **pointer, GLint ptrstride); +GLAPI void APIENTRY glFogCoordPointerListIBM (GLenum type, GLint stride, const void **pointer, GLint ptrstride); +GLAPI void APIENTRY glIndexPointerListIBM (GLenum type, GLint stride, const void **pointer, GLint ptrstride); +GLAPI void APIENTRY glNormalPointerListIBM (GLenum type, GLint stride, const void **pointer, GLint ptrstride); +GLAPI void APIENTRY glTexCoordPointerListIBM (GLint size, GLenum type, GLint stride, const void **pointer, GLint ptrstride); +GLAPI void APIENTRY glVertexPointerListIBM (GLint size, GLenum type, GLint stride, const void **pointer, GLint ptrstride); +#endif +#endif /* GL_IBM_vertex_array_lists */ + +#ifndef GL_INGR_blend_func_separate +#define GL_INGR_blend_func_separate 1 +typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEINGRPROC) (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBlendFuncSeparateINGR (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); +#endif +#endif /* GL_INGR_blend_func_separate */ + +#ifndef GL_INGR_color_clamp +#define GL_INGR_color_clamp 1 +#define GL_RED_MIN_CLAMP_INGR 0x8560 +#define GL_GREEN_MIN_CLAMP_INGR 0x8561 +#define GL_BLUE_MIN_CLAMP_INGR 0x8562 +#define GL_ALPHA_MIN_CLAMP_INGR 0x8563 +#define GL_RED_MAX_CLAMP_INGR 0x8564 +#define GL_GREEN_MAX_CLAMP_INGR 0x8565 +#define GL_BLUE_MAX_CLAMP_INGR 0x8566 +#define GL_ALPHA_MAX_CLAMP_INGR 0x8567 +#endif /* GL_INGR_color_clamp */ + +#ifndef GL_INGR_interlace_read +#define GL_INGR_interlace_read 1 +#define GL_INTERLACE_READ_INGR 0x8568 +#endif /* GL_INGR_interlace_read */ + +#ifndef GL_INTEL_blackhole_render +#define GL_INTEL_blackhole_render 1 +#define GL_BLACKHOLE_RENDER_INTEL 0x83FC +#endif /* GL_INTEL_blackhole_render */ + +#ifndef GL_INTEL_conservative_rasterization +#define GL_INTEL_conservative_rasterization 1 +#define GL_CONSERVATIVE_RASTERIZATION_INTEL 0x83FE +#endif /* GL_INTEL_conservative_rasterization */ + +#ifndef GL_INTEL_fragment_shader_ordering +#define GL_INTEL_fragment_shader_ordering 1 +#endif /* GL_INTEL_fragment_shader_ordering */ + +#ifndef GL_INTEL_framebuffer_CMAA +#define GL_INTEL_framebuffer_CMAA 1 +typedef void (APIENTRYP PFNGLAPPLYFRAMEBUFFERATTACHMENTCMAAINTELPROC) (void); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glApplyFramebufferAttachmentCMAAINTEL (void); +#endif +#endif /* GL_INTEL_framebuffer_CMAA */ + +#ifndef GL_INTEL_map_texture +#define GL_INTEL_map_texture 1 +#define GL_TEXTURE_MEMORY_LAYOUT_INTEL 0x83FF +#define GL_LAYOUT_DEFAULT_INTEL 0 +#define GL_LAYOUT_LINEAR_INTEL 1 +#define GL_LAYOUT_LINEAR_CPU_CACHED_INTEL 2 +typedef void (APIENTRYP PFNGLSYNCTEXTUREINTELPROC) (GLuint texture); +typedef void (APIENTRYP PFNGLUNMAPTEXTURE2DINTELPROC) (GLuint texture, GLint level); +typedef void *(APIENTRYP PFNGLMAPTEXTURE2DINTELPROC) (GLuint texture, GLint level, GLbitfield access, GLint *stride, GLenum *layout); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glSyncTextureINTEL (GLuint texture); +GLAPI void APIENTRY glUnmapTexture2DINTEL (GLuint texture, GLint level); +GLAPI void *APIENTRY glMapTexture2DINTEL (GLuint texture, GLint level, GLbitfield access, GLint *stride, GLenum *layout); +#endif +#endif /* GL_INTEL_map_texture */ + +#ifndef GL_INTEL_parallel_arrays +#define GL_INTEL_parallel_arrays 1 +#define GL_PARALLEL_ARRAYS_INTEL 0x83F4 +#define GL_VERTEX_ARRAY_PARALLEL_POINTERS_INTEL 0x83F5 +#define GL_NORMAL_ARRAY_PARALLEL_POINTERS_INTEL 0x83F6 +#define GL_COLOR_ARRAY_PARALLEL_POINTERS_INTEL 0x83F7 +#define GL_TEXTURE_COORD_ARRAY_PARALLEL_POINTERS_INTEL 0x83F8 +typedef void (APIENTRYP PFNGLVERTEXPOINTERVINTELPROC) (GLint size, GLenum type, const void **pointer); +typedef void (APIENTRYP PFNGLNORMALPOINTERVINTELPROC) (GLenum type, const void **pointer); +typedef void (APIENTRYP PFNGLCOLORPOINTERVINTELPROC) (GLint size, GLenum type, const void **pointer); +typedef void (APIENTRYP PFNGLTEXCOORDPOINTERVINTELPROC) (GLint size, GLenum type, const void **pointer); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glVertexPointervINTEL (GLint size, GLenum type, const void **pointer); +GLAPI void APIENTRY glNormalPointervINTEL (GLenum type, const void **pointer); +GLAPI void APIENTRY glColorPointervINTEL (GLint size, GLenum type, const void **pointer); +GLAPI void APIENTRY glTexCoordPointervINTEL (GLint size, GLenum type, const void **pointer); +#endif +#endif /* GL_INTEL_parallel_arrays */ + +#ifndef GL_INTEL_performance_query +#define GL_INTEL_performance_query 1 +#define GL_PERFQUERY_SINGLE_CONTEXT_INTEL 0x00000000 +#define GL_PERFQUERY_GLOBAL_CONTEXT_INTEL 0x00000001 +#define GL_PERFQUERY_WAIT_INTEL 0x83FB +#define GL_PERFQUERY_FLUSH_INTEL 0x83FA +#define GL_PERFQUERY_DONOT_FLUSH_INTEL 0x83F9 +#define GL_PERFQUERY_COUNTER_EVENT_INTEL 0x94F0 +#define GL_PERFQUERY_COUNTER_DURATION_NORM_INTEL 0x94F1 +#define GL_PERFQUERY_COUNTER_DURATION_RAW_INTEL 0x94F2 +#define GL_PERFQUERY_COUNTER_THROUGHPUT_INTEL 0x94F3 +#define GL_PERFQUERY_COUNTER_RAW_INTEL 0x94F4 +#define GL_PERFQUERY_COUNTER_TIMESTAMP_INTEL 0x94F5 +#define GL_PERFQUERY_COUNTER_DATA_UINT32_INTEL 0x94F8 +#define GL_PERFQUERY_COUNTER_DATA_UINT64_INTEL 0x94F9 +#define GL_PERFQUERY_COUNTER_DATA_FLOAT_INTEL 0x94FA +#define GL_PERFQUERY_COUNTER_DATA_DOUBLE_INTEL 0x94FB +#define GL_PERFQUERY_COUNTER_DATA_BOOL32_INTEL 0x94FC +#define GL_PERFQUERY_QUERY_NAME_LENGTH_MAX_INTEL 0x94FD +#define GL_PERFQUERY_COUNTER_NAME_LENGTH_MAX_INTEL 0x94FE +#define GL_PERFQUERY_COUNTER_DESC_LENGTH_MAX_INTEL 0x94FF +#define GL_PERFQUERY_GPA_EXTENDED_COUNTERS_INTEL 0x9500 +typedef void (APIENTRYP PFNGLBEGINPERFQUERYINTELPROC) (GLuint queryHandle); +typedef void (APIENTRYP PFNGLCREATEPERFQUERYINTELPROC) (GLuint queryId, GLuint *queryHandle); +typedef void (APIENTRYP PFNGLDELETEPERFQUERYINTELPROC) (GLuint queryHandle); +typedef void (APIENTRYP PFNGLENDPERFQUERYINTELPROC) (GLuint queryHandle); +typedef void (APIENTRYP PFNGLGETFIRSTPERFQUERYIDINTELPROC) (GLuint *queryId); +typedef void (APIENTRYP PFNGLGETNEXTPERFQUERYIDINTELPROC) (GLuint queryId, GLuint *nextQueryId); +typedef void (APIENTRYP PFNGLGETPERFCOUNTERINFOINTELPROC) (GLuint queryId, GLuint counterId, GLuint counterNameLength, GLchar *counterName, GLuint counterDescLength, GLchar *counterDesc, GLuint *counterOffset, GLuint *counterDataSize, GLuint *counterTypeEnum, GLuint *counterDataTypeEnum, GLuint64 *rawCounterMaxValue); +typedef void (APIENTRYP PFNGLGETPERFQUERYDATAINTELPROC) (GLuint queryHandle, GLuint flags, GLsizei dataSize, void *data, GLuint *bytesWritten); +typedef void (APIENTRYP PFNGLGETPERFQUERYIDBYNAMEINTELPROC) (GLchar *queryName, GLuint *queryId); +typedef void (APIENTRYP PFNGLGETPERFQUERYINFOINTELPROC) (GLuint queryId, GLuint queryNameLength, GLchar *queryName, GLuint *dataSize, GLuint *noCounters, GLuint *noInstances, GLuint *capsMask); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBeginPerfQueryINTEL (GLuint queryHandle); +GLAPI void APIENTRY glCreatePerfQueryINTEL (GLuint queryId, GLuint *queryHandle); +GLAPI void APIENTRY glDeletePerfQueryINTEL (GLuint queryHandle); +GLAPI void APIENTRY glEndPerfQueryINTEL (GLuint queryHandle); +GLAPI void APIENTRY glGetFirstPerfQueryIdINTEL (GLuint *queryId); +GLAPI void APIENTRY glGetNextPerfQueryIdINTEL (GLuint queryId, GLuint *nextQueryId); +GLAPI void APIENTRY glGetPerfCounterInfoINTEL (GLuint queryId, GLuint counterId, GLuint counterNameLength, GLchar *counterName, GLuint counterDescLength, GLchar *counterDesc, GLuint *counterOffset, GLuint *counterDataSize, GLuint *counterTypeEnum, GLuint *counterDataTypeEnum, GLuint64 *rawCounterMaxValue); +GLAPI void APIENTRY glGetPerfQueryDataINTEL (GLuint queryHandle, GLuint flags, GLsizei dataSize, void *data, GLuint *bytesWritten); +GLAPI void APIENTRY glGetPerfQueryIdByNameINTEL (GLchar *queryName, GLuint *queryId); +GLAPI void APIENTRY glGetPerfQueryInfoINTEL (GLuint queryId, GLuint queryNameLength, GLchar *queryName, GLuint *dataSize, GLuint *noCounters, GLuint *noInstances, GLuint *capsMask); +#endif +#endif /* GL_INTEL_performance_query */ + +#ifndef GL_MESAX_texture_stack +#define GL_MESAX_texture_stack 1 +#define GL_TEXTURE_1D_STACK_MESAX 0x8759 +#define GL_TEXTURE_2D_STACK_MESAX 0x875A +#define GL_PROXY_TEXTURE_1D_STACK_MESAX 0x875B +#define GL_PROXY_TEXTURE_2D_STACK_MESAX 0x875C +#define GL_TEXTURE_1D_STACK_BINDING_MESAX 0x875D +#define GL_TEXTURE_2D_STACK_BINDING_MESAX 0x875E +#endif /* GL_MESAX_texture_stack */ + +#ifndef GL_MESA_framebuffer_flip_x +#define GL_MESA_framebuffer_flip_x 1 +#define GL_FRAMEBUFFER_FLIP_X_MESA 0x8BBC +#endif /* GL_MESA_framebuffer_flip_x */ + +#ifndef GL_MESA_framebuffer_flip_y +#define GL_MESA_framebuffer_flip_y 1 +#define GL_FRAMEBUFFER_FLIP_Y_MESA 0x8BBB +typedef void (APIENTRYP PFNGLFRAMEBUFFERPARAMETERIMESAPROC) (GLenum target, GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLGETFRAMEBUFFERPARAMETERIVMESAPROC) (GLenum target, GLenum pname, GLint *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glFramebufferParameteriMESA (GLenum target, GLenum pname, GLint param); +GLAPI void APIENTRY glGetFramebufferParameterivMESA (GLenum target, GLenum pname, GLint *params); +#endif +#endif /* GL_MESA_framebuffer_flip_y */ + +#ifndef GL_MESA_framebuffer_swap_xy +#define GL_MESA_framebuffer_swap_xy 1 +#define GL_FRAMEBUFFER_SWAP_XY_MESA 0x8BBD +#endif /* GL_MESA_framebuffer_swap_xy */ + +#ifndef GL_MESA_pack_invert +#define GL_MESA_pack_invert 1 +#define GL_PACK_INVERT_MESA 0x8758 +#endif /* GL_MESA_pack_invert */ + +#ifndef GL_MESA_program_binary_formats +#define GL_MESA_program_binary_formats 1 +#define GL_PROGRAM_BINARY_FORMAT_MESA 0x875F +#endif /* GL_MESA_program_binary_formats */ + +#ifndef GL_MESA_resize_buffers +#define GL_MESA_resize_buffers 1 +typedef void (APIENTRYP PFNGLRESIZEBUFFERSMESAPROC) (void); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glResizeBuffersMESA (void); +#endif +#endif /* GL_MESA_resize_buffers */ + +#ifndef GL_MESA_shader_integer_functions +#define GL_MESA_shader_integer_functions 1 +#endif /* GL_MESA_shader_integer_functions */ + +#ifndef GL_MESA_tile_raster_order +#define GL_MESA_tile_raster_order 1 +#define GL_TILE_RASTER_ORDER_FIXED_MESA 0x8BB8 +#define GL_TILE_RASTER_ORDER_INCREASING_X_MESA 0x8BB9 +#define GL_TILE_RASTER_ORDER_INCREASING_Y_MESA 0x8BBA +#endif /* GL_MESA_tile_raster_order */ + +#ifndef GL_MESA_window_pos +#define GL_MESA_window_pos 1 +typedef void (APIENTRYP PFNGLWINDOWPOS2DMESAPROC) (GLdouble x, GLdouble y); +typedef void (APIENTRYP PFNGLWINDOWPOS2DVMESAPROC) (const GLdouble *v); +typedef void (APIENTRYP PFNGLWINDOWPOS2FMESAPROC) (GLfloat x, GLfloat y); +typedef void (APIENTRYP PFNGLWINDOWPOS2FVMESAPROC) (const GLfloat *v); +typedef void (APIENTRYP PFNGLWINDOWPOS2IMESAPROC) (GLint x, GLint y); +typedef void (APIENTRYP PFNGLWINDOWPOS2IVMESAPROC) (const GLint *v); +typedef void (APIENTRYP PFNGLWINDOWPOS2SMESAPROC) (GLshort x, GLshort y); +typedef void (APIENTRYP PFNGLWINDOWPOS2SVMESAPROC) (const GLshort *v); +typedef void (APIENTRYP PFNGLWINDOWPOS3DMESAPROC) (GLdouble x, GLdouble y, GLdouble z); +typedef void (APIENTRYP PFNGLWINDOWPOS3DVMESAPROC) (const GLdouble *v); +typedef void (APIENTRYP PFNGLWINDOWPOS3FMESAPROC) (GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLWINDOWPOS3FVMESAPROC) (const GLfloat *v); +typedef void (APIENTRYP PFNGLWINDOWPOS3IMESAPROC) (GLint x, GLint y, GLint z); +typedef void (APIENTRYP PFNGLWINDOWPOS3IVMESAPROC) (const GLint *v); +typedef void (APIENTRYP PFNGLWINDOWPOS3SMESAPROC) (GLshort x, GLshort y, GLshort z); +typedef void (APIENTRYP PFNGLWINDOWPOS3SVMESAPROC) (const GLshort *v); +typedef void (APIENTRYP PFNGLWINDOWPOS4DMESAPROC) (GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (APIENTRYP PFNGLWINDOWPOS4DVMESAPROC) (const GLdouble *v); +typedef void (APIENTRYP PFNGLWINDOWPOS4FMESAPROC) (GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (APIENTRYP PFNGLWINDOWPOS4FVMESAPROC) (const GLfloat *v); +typedef void (APIENTRYP PFNGLWINDOWPOS4IMESAPROC) (GLint x, GLint y, GLint z, GLint w); +typedef void (APIENTRYP PFNGLWINDOWPOS4IVMESAPROC) (const GLint *v); +typedef void (APIENTRYP PFNGLWINDOWPOS4SMESAPROC) (GLshort x, GLshort y, GLshort z, GLshort w); +typedef void (APIENTRYP PFNGLWINDOWPOS4SVMESAPROC) (const GLshort *v); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glWindowPos2dMESA (GLdouble x, GLdouble y); +GLAPI void APIENTRY glWindowPos2dvMESA (const GLdouble *v); +GLAPI void APIENTRY glWindowPos2fMESA (GLfloat x, GLfloat y); +GLAPI void APIENTRY glWindowPos2fvMESA (const GLfloat *v); +GLAPI void APIENTRY glWindowPos2iMESA (GLint x, GLint y); +GLAPI void APIENTRY glWindowPos2ivMESA (const GLint *v); +GLAPI void APIENTRY glWindowPos2sMESA (GLshort x, GLshort y); +GLAPI void APIENTRY glWindowPos2svMESA (const GLshort *v); +GLAPI void APIENTRY glWindowPos3dMESA (GLdouble x, GLdouble y, GLdouble z); +GLAPI void APIENTRY glWindowPos3dvMESA (const GLdouble *v); +GLAPI void APIENTRY glWindowPos3fMESA (GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glWindowPos3fvMESA (const GLfloat *v); +GLAPI void APIENTRY glWindowPos3iMESA (GLint x, GLint y, GLint z); +GLAPI void APIENTRY glWindowPos3ivMESA (const GLint *v); +GLAPI void APIENTRY glWindowPos3sMESA (GLshort x, GLshort y, GLshort z); +GLAPI void APIENTRY glWindowPos3svMESA (const GLshort *v); +GLAPI void APIENTRY glWindowPos4dMESA (GLdouble x, GLdouble y, GLdouble z, GLdouble w); +GLAPI void APIENTRY glWindowPos4dvMESA (const GLdouble *v); +GLAPI void APIENTRY glWindowPos4fMESA (GLfloat x, GLfloat y, GLfloat z, GLfloat w); +GLAPI void APIENTRY glWindowPos4fvMESA (const GLfloat *v); +GLAPI void APIENTRY glWindowPos4iMESA (GLint x, GLint y, GLint z, GLint w); +GLAPI void APIENTRY glWindowPos4ivMESA (const GLint *v); +GLAPI void APIENTRY glWindowPos4sMESA (GLshort x, GLshort y, GLshort z, GLshort w); +GLAPI void APIENTRY glWindowPos4svMESA (const GLshort *v); +#endif +#endif /* GL_MESA_window_pos */ + +#ifndef GL_MESA_ycbcr_texture +#define GL_MESA_ycbcr_texture 1 +#define GL_UNSIGNED_SHORT_8_8_MESA 0x85BA +#define GL_UNSIGNED_SHORT_8_8_REV_MESA 0x85BB +#define GL_YCBCR_MESA 0x8757 +#endif /* GL_MESA_ycbcr_texture */ + +#ifndef GL_NVX_blend_equation_advanced_multi_draw_buffers +#define GL_NVX_blend_equation_advanced_multi_draw_buffers 1 +#endif /* GL_NVX_blend_equation_advanced_multi_draw_buffers */ + +#ifndef GL_NVX_conditional_render +#define GL_NVX_conditional_render 1 +typedef void (APIENTRYP PFNGLBEGINCONDITIONALRENDERNVXPROC) (GLuint id); +typedef void (APIENTRYP PFNGLENDCONDITIONALRENDERNVXPROC) (void); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBeginConditionalRenderNVX (GLuint id); +GLAPI void APIENTRY glEndConditionalRenderNVX (void); +#endif +#endif /* GL_NVX_conditional_render */ + +#ifndef GL_NVX_gpu_memory_info +#define GL_NVX_gpu_memory_info 1 +#define GL_GPU_MEMORY_INFO_DEDICATED_VIDMEM_NVX 0x9047 +#define GL_GPU_MEMORY_INFO_TOTAL_AVAILABLE_MEMORY_NVX 0x9048 +#define GL_GPU_MEMORY_INFO_CURRENT_AVAILABLE_VIDMEM_NVX 0x9049 +#define GL_GPU_MEMORY_INFO_EVICTION_COUNT_NVX 0x904A +#define GL_GPU_MEMORY_INFO_EVICTED_MEMORY_NVX 0x904B +#endif /* GL_NVX_gpu_memory_info */ + +#ifndef GL_NVX_gpu_multicast2 +#define GL_NVX_gpu_multicast2 1 +#define GL_UPLOAD_GPU_MASK_NVX 0x954A +typedef void (APIENTRYP PFNGLUPLOADGPUMASKNVXPROC) (GLbitfield mask); +typedef void (APIENTRYP PFNGLMULTICASTVIEWPORTARRAYVNVXPROC) (GLuint gpu, GLuint first, GLsizei count, const GLfloat *v); +typedef void (APIENTRYP PFNGLMULTICASTVIEWPORTPOSITIONWSCALENVXPROC) (GLuint gpu, GLuint index, GLfloat xcoeff, GLfloat ycoeff); +typedef void (APIENTRYP PFNGLMULTICASTSCISSORARRAYVNVXPROC) (GLuint gpu, GLuint first, GLsizei count, const GLint *v); +typedef GLuint (APIENTRYP PFNGLASYNCCOPYBUFFERSUBDATANVXPROC) (GLsizei waitSemaphoreCount, const GLuint *waitSemaphoreArray, const GLuint64 *fenceValueArray, GLuint readGpu, GLbitfield writeGpuMask, GLuint readBuffer, GLuint writeBuffer, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size, GLsizei signalSemaphoreCount, const GLuint *signalSemaphoreArray, const GLuint64 *signalValueArray); +typedef GLuint (APIENTRYP PFNGLASYNCCOPYIMAGESUBDATANVXPROC) (GLsizei waitSemaphoreCount, const GLuint *waitSemaphoreArray, const GLuint64 *waitValueArray, GLuint srcGpu, GLbitfield dstGpuMask, GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei srcWidth, GLsizei srcHeight, GLsizei srcDepth, GLsizei signalSemaphoreCount, const GLuint *signalSemaphoreArray, const GLuint64 *signalValueArray); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glUploadGpuMaskNVX (GLbitfield mask); +GLAPI void APIENTRY glMulticastViewportArrayvNVX (GLuint gpu, GLuint first, GLsizei count, const GLfloat *v); +GLAPI void APIENTRY glMulticastViewportPositionWScaleNVX (GLuint gpu, GLuint index, GLfloat xcoeff, GLfloat ycoeff); +GLAPI void APIENTRY glMulticastScissorArrayvNVX (GLuint gpu, GLuint first, GLsizei count, const GLint *v); +GLAPI GLuint APIENTRY glAsyncCopyBufferSubDataNVX (GLsizei waitSemaphoreCount, const GLuint *waitSemaphoreArray, const GLuint64 *fenceValueArray, GLuint readGpu, GLbitfield writeGpuMask, GLuint readBuffer, GLuint writeBuffer, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size, GLsizei signalSemaphoreCount, const GLuint *signalSemaphoreArray, const GLuint64 *signalValueArray); +GLAPI GLuint APIENTRY glAsyncCopyImageSubDataNVX (GLsizei waitSemaphoreCount, const GLuint *waitSemaphoreArray, const GLuint64 *waitValueArray, GLuint srcGpu, GLbitfield dstGpuMask, GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei srcWidth, GLsizei srcHeight, GLsizei srcDepth, GLsizei signalSemaphoreCount, const GLuint *signalSemaphoreArray, const GLuint64 *signalValueArray); +#endif +#endif /* GL_NVX_gpu_multicast2 */ + +#ifndef GL_NVX_linked_gpu_multicast +#define GL_NVX_linked_gpu_multicast 1 +#define GL_LGPU_SEPARATE_STORAGE_BIT_NVX 0x0800 +#define GL_MAX_LGPU_GPUS_NVX 0x92BA +typedef void (APIENTRYP PFNGLLGPUNAMEDBUFFERSUBDATANVXPROC) (GLbitfield gpuMask, GLuint buffer, GLintptr offset, GLsizeiptr size, const void *data); +typedef void (APIENTRYP PFNGLLGPUCOPYIMAGESUBDATANVXPROC) (GLuint sourceGpu, GLbitfield destinationGpuMask, GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srxY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei width, GLsizei height, GLsizei depth); +typedef void (APIENTRYP PFNGLLGPUINTERLOCKNVXPROC) (void); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glLGPUNamedBufferSubDataNVX (GLbitfield gpuMask, GLuint buffer, GLintptr offset, GLsizeiptr size, const void *data); +GLAPI void APIENTRY glLGPUCopyImageSubDataNVX (GLuint sourceGpu, GLbitfield destinationGpuMask, GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srxY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei width, GLsizei height, GLsizei depth); +GLAPI void APIENTRY glLGPUInterlockNVX (void); +#endif +#endif /* GL_NVX_linked_gpu_multicast */ + +#ifndef GL_NVX_progress_fence +#define GL_NVX_progress_fence 1 +typedef GLuint (APIENTRYP PFNGLCREATEPROGRESSFENCENVXPROC) (void); +typedef void (APIENTRYP PFNGLSIGNALSEMAPHOREUI64NVXPROC) (GLuint signalGpu, GLsizei fenceObjectCount, const GLuint *semaphoreArray, const GLuint64 *fenceValueArray); +typedef void (APIENTRYP PFNGLWAITSEMAPHOREUI64NVXPROC) (GLuint waitGpu, GLsizei fenceObjectCount, const GLuint *semaphoreArray, const GLuint64 *fenceValueArray); +typedef void (APIENTRYP PFNGLCLIENTWAITSEMAPHOREUI64NVXPROC) (GLsizei fenceObjectCount, const GLuint *semaphoreArray, const GLuint64 *fenceValueArray); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI GLuint APIENTRY glCreateProgressFenceNVX (void); +GLAPI void APIENTRY glSignalSemaphoreui64NVX (GLuint signalGpu, GLsizei fenceObjectCount, const GLuint *semaphoreArray, const GLuint64 *fenceValueArray); +GLAPI void APIENTRY glWaitSemaphoreui64NVX (GLuint waitGpu, GLsizei fenceObjectCount, const GLuint *semaphoreArray, const GLuint64 *fenceValueArray); +GLAPI void APIENTRY glClientWaitSemaphoreui64NVX (GLsizei fenceObjectCount, const GLuint *semaphoreArray, const GLuint64 *fenceValueArray); +#endif +#endif /* GL_NVX_progress_fence */ + +#ifndef GL_NV_alpha_to_coverage_dither_control +#define GL_NV_alpha_to_coverage_dither_control 1 +#define GL_ALPHA_TO_COVERAGE_DITHER_DEFAULT_NV 0x934D +#define GL_ALPHA_TO_COVERAGE_DITHER_ENABLE_NV 0x934E +#define GL_ALPHA_TO_COVERAGE_DITHER_DISABLE_NV 0x934F +#define GL_ALPHA_TO_COVERAGE_DITHER_MODE_NV 0x92BF +typedef void (APIENTRYP PFNGLALPHATOCOVERAGEDITHERCONTROLNVPROC) (GLenum mode); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glAlphaToCoverageDitherControlNV (GLenum mode); +#endif +#endif /* GL_NV_alpha_to_coverage_dither_control */ + +#ifndef GL_NV_bindless_multi_draw_indirect +#define GL_NV_bindless_multi_draw_indirect 1 +typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSINDIRECTBINDLESSNVPROC) (GLenum mode, const void *indirect, GLsizei drawCount, GLsizei stride, GLint vertexBufferCount); +typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSINDIRECTBINDLESSNVPROC) (GLenum mode, GLenum type, const void *indirect, GLsizei drawCount, GLsizei stride, GLint vertexBufferCount); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glMultiDrawArraysIndirectBindlessNV (GLenum mode, const void *indirect, GLsizei drawCount, GLsizei stride, GLint vertexBufferCount); +GLAPI void APIENTRY glMultiDrawElementsIndirectBindlessNV (GLenum mode, GLenum type, const void *indirect, GLsizei drawCount, GLsizei stride, GLint vertexBufferCount); +#endif +#endif /* GL_NV_bindless_multi_draw_indirect */ + +#ifndef GL_NV_bindless_multi_draw_indirect_count +#define GL_NV_bindless_multi_draw_indirect_count 1 +typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSINDIRECTBINDLESSCOUNTNVPROC) (GLenum mode, const void *indirect, GLsizei drawCount, GLsizei maxDrawCount, GLsizei stride, GLint vertexBufferCount); +typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSINDIRECTBINDLESSCOUNTNVPROC) (GLenum mode, GLenum type, const void *indirect, GLsizei drawCount, GLsizei maxDrawCount, GLsizei stride, GLint vertexBufferCount); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glMultiDrawArraysIndirectBindlessCountNV (GLenum mode, const void *indirect, GLsizei drawCount, GLsizei maxDrawCount, GLsizei stride, GLint vertexBufferCount); +GLAPI void APIENTRY glMultiDrawElementsIndirectBindlessCountNV (GLenum mode, GLenum type, const void *indirect, GLsizei drawCount, GLsizei maxDrawCount, GLsizei stride, GLint vertexBufferCount); +#endif +#endif /* GL_NV_bindless_multi_draw_indirect_count */ + +#ifndef GL_NV_bindless_texture +#define GL_NV_bindless_texture 1 +typedef GLuint64 (APIENTRYP PFNGLGETTEXTUREHANDLENVPROC) (GLuint texture); +typedef GLuint64 (APIENTRYP PFNGLGETTEXTURESAMPLERHANDLENVPROC) (GLuint texture, GLuint sampler); +typedef void (APIENTRYP PFNGLMAKETEXTUREHANDLERESIDENTNVPROC) (GLuint64 handle); +typedef void (APIENTRYP PFNGLMAKETEXTUREHANDLENONRESIDENTNVPROC) (GLuint64 handle); +typedef GLuint64 (APIENTRYP PFNGLGETIMAGEHANDLENVPROC) (GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum format); +typedef void (APIENTRYP PFNGLMAKEIMAGEHANDLERESIDENTNVPROC) (GLuint64 handle, GLenum access); +typedef void (APIENTRYP PFNGLMAKEIMAGEHANDLENONRESIDENTNVPROC) (GLuint64 handle); +typedef void (APIENTRYP PFNGLUNIFORMHANDLEUI64NVPROC) (GLint location, GLuint64 value); +typedef void (APIENTRYP PFNGLUNIFORMHANDLEUI64VNVPROC) (GLint location, GLsizei count, const GLuint64 *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMHANDLEUI64NVPROC) (GLuint program, GLint location, GLuint64 value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMHANDLEUI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64 *values); +typedef GLboolean (APIENTRYP PFNGLISTEXTUREHANDLERESIDENTNVPROC) (GLuint64 handle); +typedef GLboolean (APIENTRYP PFNGLISIMAGEHANDLERESIDENTNVPROC) (GLuint64 handle); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI GLuint64 APIENTRY glGetTextureHandleNV (GLuint texture); +GLAPI GLuint64 APIENTRY glGetTextureSamplerHandleNV (GLuint texture, GLuint sampler); +GLAPI void APIENTRY glMakeTextureHandleResidentNV (GLuint64 handle); +GLAPI void APIENTRY glMakeTextureHandleNonResidentNV (GLuint64 handle); +GLAPI GLuint64 APIENTRY glGetImageHandleNV (GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum format); +GLAPI void APIENTRY glMakeImageHandleResidentNV (GLuint64 handle, GLenum access); +GLAPI void APIENTRY glMakeImageHandleNonResidentNV (GLuint64 handle); +GLAPI void APIENTRY glUniformHandleui64NV (GLint location, GLuint64 value); +GLAPI void APIENTRY glUniformHandleui64vNV (GLint location, GLsizei count, const GLuint64 *value); +GLAPI void APIENTRY glProgramUniformHandleui64NV (GLuint program, GLint location, GLuint64 value); +GLAPI void APIENTRY glProgramUniformHandleui64vNV (GLuint program, GLint location, GLsizei count, const GLuint64 *values); +GLAPI GLboolean APIENTRY glIsTextureHandleResidentNV (GLuint64 handle); +GLAPI GLboolean APIENTRY glIsImageHandleResidentNV (GLuint64 handle); +#endif +#endif /* GL_NV_bindless_texture */ + +#ifndef GL_NV_blend_equation_advanced +#define GL_NV_blend_equation_advanced 1 +#define GL_BLEND_OVERLAP_NV 0x9281 +#define GL_BLEND_PREMULTIPLIED_SRC_NV 0x9280 +#define GL_BLUE_NV 0x1905 +#define GL_COLORBURN_NV 0x929A +#define GL_COLORDODGE_NV 0x9299 +#define GL_CONJOINT_NV 0x9284 +#define GL_CONTRAST_NV 0x92A1 +#define GL_DARKEN_NV 0x9297 +#define GL_DIFFERENCE_NV 0x929E +#define GL_DISJOINT_NV 0x9283 +#define GL_DST_ATOP_NV 0x928F +#define GL_DST_IN_NV 0x928B +#define GL_DST_NV 0x9287 +#define GL_DST_OUT_NV 0x928D +#define GL_DST_OVER_NV 0x9289 +#define GL_EXCLUSION_NV 0x92A0 +#define GL_GREEN_NV 0x1904 +#define GL_HARDLIGHT_NV 0x929B +#define GL_HARDMIX_NV 0x92A9 +#define GL_HSL_COLOR_NV 0x92AF +#define GL_HSL_HUE_NV 0x92AD +#define GL_HSL_LUMINOSITY_NV 0x92B0 +#define GL_HSL_SATURATION_NV 0x92AE +#define GL_INVERT_OVG_NV 0x92B4 +#define GL_INVERT_RGB_NV 0x92A3 +#define GL_LIGHTEN_NV 0x9298 +#define GL_LINEARBURN_NV 0x92A5 +#define GL_LINEARDODGE_NV 0x92A4 +#define GL_LINEARLIGHT_NV 0x92A7 +#define GL_MINUS_CLAMPED_NV 0x92B3 +#define GL_MINUS_NV 0x929F +#define GL_MULTIPLY_NV 0x9294 +#define GL_OVERLAY_NV 0x9296 +#define GL_PINLIGHT_NV 0x92A8 +#define GL_PLUS_CLAMPED_ALPHA_NV 0x92B2 +#define GL_PLUS_CLAMPED_NV 0x92B1 +#define GL_PLUS_DARKER_NV 0x9292 +#define GL_PLUS_NV 0x9291 +#define GL_RED_NV 0x1903 +#define GL_SCREEN_NV 0x9295 +#define GL_SOFTLIGHT_NV 0x929C +#define GL_SRC_ATOP_NV 0x928E +#define GL_SRC_IN_NV 0x928A +#define GL_SRC_NV 0x9286 +#define GL_SRC_OUT_NV 0x928C +#define GL_SRC_OVER_NV 0x9288 +#define GL_UNCORRELATED_NV 0x9282 +#define GL_VIVIDLIGHT_NV 0x92A6 +#define GL_XOR_NV 0x1506 +typedef void (APIENTRYP PFNGLBLENDPARAMETERINVPROC) (GLenum pname, GLint value); +typedef void (APIENTRYP PFNGLBLENDBARRIERNVPROC) (void); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBlendParameteriNV (GLenum pname, GLint value); +GLAPI void APIENTRY glBlendBarrierNV (void); +#endif +#endif /* GL_NV_blend_equation_advanced */ + +#ifndef GL_NV_blend_equation_advanced_coherent +#define GL_NV_blend_equation_advanced_coherent 1 +#define GL_BLEND_ADVANCED_COHERENT_NV 0x9285 +#endif /* GL_NV_blend_equation_advanced_coherent */ + +#ifndef GL_NV_blend_minmax_factor +#define GL_NV_blend_minmax_factor 1 +#endif /* GL_NV_blend_minmax_factor */ + +#ifndef GL_NV_blend_square +#define GL_NV_blend_square 1 +#endif /* GL_NV_blend_square */ + +#ifndef GL_NV_clip_space_w_scaling +#define GL_NV_clip_space_w_scaling 1 +#define GL_VIEWPORT_POSITION_W_SCALE_NV 0x937C +#define GL_VIEWPORT_POSITION_W_SCALE_X_COEFF_NV 0x937D +#define GL_VIEWPORT_POSITION_W_SCALE_Y_COEFF_NV 0x937E +typedef void (APIENTRYP PFNGLVIEWPORTPOSITIONWSCALENVPROC) (GLuint index, GLfloat xcoeff, GLfloat ycoeff); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glViewportPositionWScaleNV (GLuint index, GLfloat xcoeff, GLfloat ycoeff); +#endif +#endif /* GL_NV_clip_space_w_scaling */ + +#ifndef GL_NV_command_list +#define GL_NV_command_list 1 +#define GL_TERMINATE_SEQUENCE_COMMAND_NV 0x0000 +#define GL_NOP_COMMAND_NV 0x0001 +#define GL_DRAW_ELEMENTS_COMMAND_NV 0x0002 +#define GL_DRAW_ARRAYS_COMMAND_NV 0x0003 +#define GL_DRAW_ELEMENTS_STRIP_COMMAND_NV 0x0004 +#define GL_DRAW_ARRAYS_STRIP_COMMAND_NV 0x0005 +#define GL_DRAW_ELEMENTS_INSTANCED_COMMAND_NV 0x0006 +#define GL_DRAW_ARRAYS_INSTANCED_COMMAND_NV 0x0007 +#define GL_ELEMENT_ADDRESS_COMMAND_NV 0x0008 +#define GL_ATTRIBUTE_ADDRESS_COMMAND_NV 0x0009 +#define GL_UNIFORM_ADDRESS_COMMAND_NV 0x000A +#define GL_BLEND_COLOR_COMMAND_NV 0x000B +#define GL_STENCIL_REF_COMMAND_NV 0x000C +#define GL_LINE_WIDTH_COMMAND_NV 0x000D +#define GL_POLYGON_OFFSET_COMMAND_NV 0x000E +#define GL_ALPHA_REF_COMMAND_NV 0x000F +#define GL_VIEWPORT_COMMAND_NV 0x0010 +#define GL_SCISSOR_COMMAND_NV 0x0011 +#define GL_FRONT_FACE_COMMAND_NV 0x0012 +typedef void (APIENTRYP PFNGLCREATESTATESNVPROC) (GLsizei n, GLuint *states); +typedef void (APIENTRYP PFNGLDELETESTATESNVPROC) (GLsizei n, const GLuint *states); +typedef GLboolean (APIENTRYP PFNGLISSTATENVPROC) (GLuint state); +typedef void (APIENTRYP PFNGLSTATECAPTURENVPROC) (GLuint state, GLenum mode); +typedef GLuint (APIENTRYP PFNGLGETCOMMANDHEADERNVPROC) (GLenum tokenID, GLuint size); +typedef GLushort (APIENTRYP PFNGLGETSTAGEINDEXNVPROC) (GLenum shadertype); +typedef void (APIENTRYP PFNGLDRAWCOMMANDSNVPROC) (GLenum primitiveMode, GLuint buffer, const GLintptr *indirects, const GLsizei *sizes, GLuint count); +typedef void (APIENTRYP PFNGLDRAWCOMMANDSADDRESSNVPROC) (GLenum primitiveMode, const GLuint64 *indirects, const GLsizei *sizes, GLuint count); +typedef void (APIENTRYP PFNGLDRAWCOMMANDSSTATESNVPROC) (GLuint buffer, const GLintptr *indirects, const GLsizei *sizes, const GLuint *states, const GLuint *fbos, GLuint count); +typedef void (APIENTRYP PFNGLDRAWCOMMANDSSTATESADDRESSNVPROC) (const GLuint64 *indirects, const GLsizei *sizes, const GLuint *states, const GLuint *fbos, GLuint count); +typedef void (APIENTRYP PFNGLCREATECOMMANDLISTSNVPROC) (GLsizei n, GLuint *lists); +typedef void (APIENTRYP PFNGLDELETECOMMANDLISTSNVPROC) (GLsizei n, const GLuint *lists); +typedef GLboolean (APIENTRYP PFNGLISCOMMANDLISTNVPROC) (GLuint list); +typedef void (APIENTRYP PFNGLLISTDRAWCOMMANDSSTATESCLIENTNVPROC) (GLuint list, GLuint segment, const void **indirects, const GLsizei *sizes, const GLuint *states, const GLuint *fbos, GLuint count); +typedef void (APIENTRYP PFNGLCOMMANDLISTSEGMENTSNVPROC) (GLuint list, GLuint segments); +typedef void (APIENTRYP PFNGLCOMPILECOMMANDLISTNVPROC) (GLuint list); +typedef void (APIENTRYP PFNGLCALLCOMMANDLISTNVPROC) (GLuint list); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glCreateStatesNV (GLsizei n, GLuint *states); +GLAPI void APIENTRY glDeleteStatesNV (GLsizei n, const GLuint *states); +GLAPI GLboolean APIENTRY glIsStateNV (GLuint state); +GLAPI void APIENTRY glStateCaptureNV (GLuint state, GLenum mode); +GLAPI GLuint APIENTRY glGetCommandHeaderNV (GLenum tokenID, GLuint size); +GLAPI GLushort APIENTRY glGetStageIndexNV (GLenum shadertype); +GLAPI void APIENTRY glDrawCommandsNV (GLenum primitiveMode, GLuint buffer, const GLintptr *indirects, const GLsizei *sizes, GLuint count); +GLAPI void APIENTRY glDrawCommandsAddressNV (GLenum primitiveMode, const GLuint64 *indirects, const GLsizei *sizes, GLuint count); +GLAPI void APIENTRY glDrawCommandsStatesNV (GLuint buffer, const GLintptr *indirects, const GLsizei *sizes, const GLuint *states, const GLuint *fbos, GLuint count); +GLAPI void APIENTRY glDrawCommandsStatesAddressNV (const GLuint64 *indirects, const GLsizei *sizes, const GLuint *states, const GLuint *fbos, GLuint count); +GLAPI void APIENTRY glCreateCommandListsNV (GLsizei n, GLuint *lists); +GLAPI void APIENTRY glDeleteCommandListsNV (GLsizei n, const GLuint *lists); +GLAPI GLboolean APIENTRY glIsCommandListNV (GLuint list); +GLAPI void APIENTRY glListDrawCommandsStatesClientNV (GLuint list, GLuint segment, const void **indirects, const GLsizei *sizes, const GLuint *states, const GLuint *fbos, GLuint count); +GLAPI void APIENTRY glCommandListSegmentsNV (GLuint list, GLuint segments); +GLAPI void APIENTRY glCompileCommandListNV (GLuint list); +GLAPI void APIENTRY glCallCommandListNV (GLuint list); +#endif +#endif /* GL_NV_command_list */ + +#ifndef GL_NV_compute_program5 +#define GL_NV_compute_program5 1 +#define GL_COMPUTE_PROGRAM_NV 0x90FB +#define GL_COMPUTE_PROGRAM_PARAMETER_BUFFER_NV 0x90FC +#endif /* GL_NV_compute_program5 */ + +#ifndef GL_NV_compute_shader_derivatives +#define GL_NV_compute_shader_derivatives 1 +#endif /* GL_NV_compute_shader_derivatives */ + +#ifndef GL_NV_conditional_render +#define GL_NV_conditional_render 1 +#define GL_QUERY_WAIT_NV 0x8E13 +#define GL_QUERY_NO_WAIT_NV 0x8E14 +#define GL_QUERY_BY_REGION_WAIT_NV 0x8E15 +#define GL_QUERY_BY_REGION_NO_WAIT_NV 0x8E16 +typedef void (APIENTRYP PFNGLBEGINCONDITIONALRENDERNVPROC) (GLuint id, GLenum mode); +typedef void (APIENTRYP PFNGLENDCONDITIONALRENDERNVPROC) (void); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBeginConditionalRenderNV (GLuint id, GLenum mode); +GLAPI void APIENTRY glEndConditionalRenderNV (void); +#endif +#endif /* GL_NV_conditional_render */ + +#ifndef GL_NV_conservative_raster +#define GL_NV_conservative_raster 1 +#define GL_CONSERVATIVE_RASTERIZATION_NV 0x9346 +#define GL_SUBPIXEL_PRECISION_BIAS_X_BITS_NV 0x9347 +#define GL_SUBPIXEL_PRECISION_BIAS_Y_BITS_NV 0x9348 +#define GL_MAX_SUBPIXEL_PRECISION_BIAS_BITS_NV 0x9349 +typedef void (APIENTRYP PFNGLSUBPIXELPRECISIONBIASNVPROC) (GLuint xbits, GLuint ybits); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glSubpixelPrecisionBiasNV (GLuint xbits, GLuint ybits); +#endif +#endif /* GL_NV_conservative_raster */ + +#ifndef GL_NV_conservative_raster_dilate +#define GL_NV_conservative_raster_dilate 1 +#define GL_CONSERVATIVE_RASTER_DILATE_NV 0x9379 +#define GL_CONSERVATIVE_RASTER_DILATE_RANGE_NV 0x937A +#define GL_CONSERVATIVE_RASTER_DILATE_GRANULARITY_NV 0x937B +typedef void (APIENTRYP PFNGLCONSERVATIVERASTERPARAMETERFNVPROC) (GLenum pname, GLfloat value); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glConservativeRasterParameterfNV (GLenum pname, GLfloat value); +#endif +#endif /* GL_NV_conservative_raster_dilate */ + +#ifndef GL_NV_conservative_raster_pre_snap +#define GL_NV_conservative_raster_pre_snap 1 +#define GL_CONSERVATIVE_RASTER_MODE_PRE_SNAP_NV 0x9550 +#endif /* GL_NV_conservative_raster_pre_snap */ + +#ifndef GL_NV_conservative_raster_pre_snap_triangles +#define GL_NV_conservative_raster_pre_snap_triangles 1 +#define GL_CONSERVATIVE_RASTER_MODE_NV 0x954D +#define GL_CONSERVATIVE_RASTER_MODE_POST_SNAP_NV 0x954E +#define GL_CONSERVATIVE_RASTER_MODE_PRE_SNAP_TRIANGLES_NV 0x954F +typedef void (APIENTRYP PFNGLCONSERVATIVERASTERPARAMETERINVPROC) (GLenum pname, GLint param); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glConservativeRasterParameteriNV (GLenum pname, GLint param); +#endif +#endif /* GL_NV_conservative_raster_pre_snap_triangles */ + +#ifndef GL_NV_conservative_raster_underestimation +#define GL_NV_conservative_raster_underestimation 1 +#endif /* GL_NV_conservative_raster_underestimation */ + +#ifndef GL_NV_copy_depth_to_color +#define GL_NV_copy_depth_to_color 1 +#define GL_DEPTH_STENCIL_TO_RGBA_NV 0x886E +#define GL_DEPTH_STENCIL_TO_BGRA_NV 0x886F +#endif /* GL_NV_copy_depth_to_color */ + +#ifndef GL_NV_copy_image +#define GL_NV_copy_image 1 +typedef void (APIENTRYP PFNGLCOPYIMAGESUBDATANVPROC) (GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei width, GLsizei height, GLsizei depth); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glCopyImageSubDataNV (GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei width, GLsizei height, GLsizei depth); +#endif +#endif /* GL_NV_copy_image */ + +#ifndef GL_NV_deep_texture3D +#define GL_NV_deep_texture3D 1 +#define GL_MAX_DEEP_3D_TEXTURE_WIDTH_HEIGHT_NV 0x90D0 +#define GL_MAX_DEEP_3D_TEXTURE_DEPTH_NV 0x90D1 +#endif /* GL_NV_deep_texture3D */ + +#ifndef GL_NV_depth_buffer_float +#define GL_NV_depth_buffer_float 1 +#define GL_DEPTH_COMPONENT32F_NV 0x8DAB +#define GL_DEPTH32F_STENCIL8_NV 0x8DAC +#define GL_FLOAT_32_UNSIGNED_INT_24_8_REV_NV 0x8DAD +#define GL_DEPTH_BUFFER_FLOAT_MODE_NV 0x8DAF +typedef void (APIENTRYP PFNGLDEPTHRANGEDNVPROC) (GLdouble zNear, GLdouble zFar); +typedef void (APIENTRYP PFNGLCLEARDEPTHDNVPROC) (GLdouble depth); +typedef void (APIENTRYP PFNGLDEPTHBOUNDSDNVPROC) (GLdouble zmin, GLdouble zmax); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glDepthRangedNV (GLdouble zNear, GLdouble zFar); +GLAPI void APIENTRY glClearDepthdNV (GLdouble depth); +GLAPI void APIENTRY glDepthBoundsdNV (GLdouble zmin, GLdouble zmax); +#endif +#endif /* GL_NV_depth_buffer_float */ + +#ifndef GL_NV_depth_clamp +#define GL_NV_depth_clamp 1 +#define GL_DEPTH_CLAMP_NV 0x864F +#endif /* GL_NV_depth_clamp */ + +#ifndef GL_NV_draw_texture +#define GL_NV_draw_texture 1 +typedef void (APIENTRYP PFNGLDRAWTEXTURENVPROC) (GLuint texture, GLuint sampler, GLfloat x0, GLfloat y0, GLfloat x1, GLfloat y1, GLfloat z, GLfloat s0, GLfloat t0, GLfloat s1, GLfloat t1); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glDrawTextureNV (GLuint texture, GLuint sampler, GLfloat x0, GLfloat y0, GLfloat x1, GLfloat y1, GLfloat z, GLfloat s0, GLfloat t0, GLfloat s1, GLfloat t1); +#endif +#endif /* GL_NV_draw_texture */ + +#ifndef GL_NV_draw_vulkan_image +#define GL_NV_draw_vulkan_image 1 +typedef void (APIENTRY *GLVULKANPROCNV)(void); +typedef void (APIENTRYP PFNGLDRAWVKIMAGENVPROC) (GLuint64 vkImage, GLuint sampler, GLfloat x0, GLfloat y0, GLfloat x1, GLfloat y1, GLfloat z, GLfloat s0, GLfloat t0, GLfloat s1, GLfloat t1); +typedef GLVULKANPROCNV (APIENTRYP PFNGLGETVKPROCADDRNVPROC) (const GLchar *name); +typedef void (APIENTRYP PFNGLWAITVKSEMAPHORENVPROC) (GLuint64 vkSemaphore); +typedef void (APIENTRYP PFNGLSIGNALVKSEMAPHORENVPROC) (GLuint64 vkSemaphore); +typedef void (APIENTRYP PFNGLSIGNALVKFENCENVPROC) (GLuint64 vkFence); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glDrawVkImageNV (GLuint64 vkImage, GLuint sampler, GLfloat x0, GLfloat y0, GLfloat x1, GLfloat y1, GLfloat z, GLfloat s0, GLfloat t0, GLfloat s1, GLfloat t1); +GLAPI GLVULKANPROCNV APIENTRY glGetVkProcAddrNV (const GLchar *name); +GLAPI void APIENTRY glWaitVkSemaphoreNV (GLuint64 vkSemaphore); +GLAPI void APIENTRY glSignalVkSemaphoreNV (GLuint64 vkSemaphore); +GLAPI void APIENTRY glSignalVkFenceNV (GLuint64 vkFence); +#endif +#endif /* GL_NV_draw_vulkan_image */ + +#ifndef GL_NV_evaluators +#define GL_NV_evaluators 1 +#define GL_EVAL_2D_NV 0x86C0 +#define GL_EVAL_TRIANGULAR_2D_NV 0x86C1 +#define GL_MAP_TESSELLATION_NV 0x86C2 +#define GL_MAP_ATTRIB_U_ORDER_NV 0x86C3 +#define GL_MAP_ATTRIB_V_ORDER_NV 0x86C4 +#define GL_EVAL_FRACTIONAL_TESSELLATION_NV 0x86C5 +#define GL_EVAL_VERTEX_ATTRIB0_NV 0x86C6 +#define GL_EVAL_VERTEX_ATTRIB1_NV 0x86C7 +#define GL_EVAL_VERTEX_ATTRIB2_NV 0x86C8 +#define GL_EVAL_VERTEX_ATTRIB3_NV 0x86C9 +#define GL_EVAL_VERTEX_ATTRIB4_NV 0x86CA +#define GL_EVAL_VERTEX_ATTRIB5_NV 0x86CB +#define GL_EVAL_VERTEX_ATTRIB6_NV 0x86CC +#define GL_EVAL_VERTEX_ATTRIB7_NV 0x86CD +#define GL_EVAL_VERTEX_ATTRIB8_NV 0x86CE +#define GL_EVAL_VERTEX_ATTRIB9_NV 0x86CF +#define GL_EVAL_VERTEX_ATTRIB10_NV 0x86D0 +#define GL_EVAL_VERTEX_ATTRIB11_NV 0x86D1 +#define GL_EVAL_VERTEX_ATTRIB12_NV 0x86D2 +#define GL_EVAL_VERTEX_ATTRIB13_NV 0x86D3 +#define GL_EVAL_VERTEX_ATTRIB14_NV 0x86D4 +#define GL_EVAL_VERTEX_ATTRIB15_NV 0x86D5 +#define GL_MAX_MAP_TESSELLATION_NV 0x86D6 +#define GL_MAX_RATIONAL_EVAL_ORDER_NV 0x86D7 +typedef void (APIENTRYP PFNGLMAPCONTROLPOINTSNVPROC) (GLenum target, GLuint index, GLenum type, GLsizei ustride, GLsizei vstride, GLint uorder, GLint vorder, GLboolean packed, const void *points); +typedef void (APIENTRYP PFNGLMAPPARAMETERIVNVPROC) (GLenum target, GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLMAPPARAMETERFVNVPROC) (GLenum target, GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLGETMAPCONTROLPOINTSNVPROC) (GLenum target, GLuint index, GLenum type, GLsizei ustride, GLsizei vstride, GLboolean packed, void *points); +typedef void (APIENTRYP PFNGLGETMAPPARAMETERIVNVPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETMAPPARAMETERFVNVPROC) (GLenum target, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETMAPATTRIBPARAMETERIVNVPROC) (GLenum target, GLuint index, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETMAPATTRIBPARAMETERFVNVPROC) (GLenum target, GLuint index, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLEVALMAPSNVPROC) (GLenum target, GLenum mode); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glMapControlPointsNV (GLenum target, GLuint index, GLenum type, GLsizei ustride, GLsizei vstride, GLint uorder, GLint vorder, GLboolean packed, const void *points); +GLAPI void APIENTRY glMapParameterivNV (GLenum target, GLenum pname, const GLint *params); +GLAPI void APIENTRY glMapParameterfvNV (GLenum target, GLenum pname, const GLfloat *params); +GLAPI void APIENTRY glGetMapControlPointsNV (GLenum target, GLuint index, GLenum type, GLsizei ustride, GLsizei vstride, GLboolean packed, void *points); +GLAPI void APIENTRY glGetMapParameterivNV (GLenum target, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetMapParameterfvNV (GLenum target, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetMapAttribParameterivNV (GLenum target, GLuint index, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetMapAttribParameterfvNV (GLenum target, GLuint index, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glEvalMapsNV (GLenum target, GLenum mode); +#endif +#endif /* GL_NV_evaluators */ + +#ifndef GL_NV_explicit_multisample +#define GL_NV_explicit_multisample 1 +#define GL_SAMPLE_POSITION_NV 0x8E50 +#define GL_SAMPLE_MASK_NV 0x8E51 +#define GL_SAMPLE_MASK_VALUE_NV 0x8E52 +#define GL_TEXTURE_BINDING_RENDERBUFFER_NV 0x8E53 +#define GL_TEXTURE_RENDERBUFFER_DATA_STORE_BINDING_NV 0x8E54 +#define GL_TEXTURE_RENDERBUFFER_NV 0x8E55 +#define GL_SAMPLER_RENDERBUFFER_NV 0x8E56 +#define GL_INT_SAMPLER_RENDERBUFFER_NV 0x8E57 +#define GL_UNSIGNED_INT_SAMPLER_RENDERBUFFER_NV 0x8E58 +#define GL_MAX_SAMPLE_MASK_WORDS_NV 0x8E59 +typedef void (APIENTRYP PFNGLGETMULTISAMPLEFVNVPROC) (GLenum pname, GLuint index, GLfloat *val); +typedef void (APIENTRYP PFNGLSAMPLEMASKINDEXEDNVPROC) (GLuint index, GLbitfield mask); +typedef void (APIENTRYP PFNGLTEXRENDERBUFFERNVPROC) (GLenum target, GLuint renderbuffer); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glGetMultisamplefvNV (GLenum pname, GLuint index, GLfloat *val); +GLAPI void APIENTRY glSampleMaskIndexedNV (GLuint index, GLbitfield mask); +GLAPI void APIENTRY glTexRenderbufferNV (GLenum target, GLuint renderbuffer); +#endif +#endif /* GL_NV_explicit_multisample */ + +#ifndef GL_NV_fence +#define GL_NV_fence 1 +#define GL_ALL_COMPLETED_NV 0x84F2 +#define GL_FENCE_STATUS_NV 0x84F3 +#define GL_FENCE_CONDITION_NV 0x84F4 +typedef void (APIENTRYP PFNGLDELETEFENCESNVPROC) (GLsizei n, const GLuint *fences); +typedef void (APIENTRYP PFNGLGENFENCESNVPROC) (GLsizei n, GLuint *fences); +typedef GLboolean (APIENTRYP PFNGLISFENCENVPROC) (GLuint fence); +typedef GLboolean (APIENTRYP PFNGLTESTFENCENVPROC) (GLuint fence); +typedef void (APIENTRYP PFNGLGETFENCEIVNVPROC) (GLuint fence, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLFINISHFENCENVPROC) (GLuint fence); +typedef void (APIENTRYP PFNGLSETFENCENVPROC) (GLuint fence, GLenum condition); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glDeleteFencesNV (GLsizei n, const GLuint *fences); +GLAPI void APIENTRY glGenFencesNV (GLsizei n, GLuint *fences); +GLAPI GLboolean APIENTRY glIsFenceNV (GLuint fence); +GLAPI GLboolean APIENTRY glTestFenceNV (GLuint fence); +GLAPI void APIENTRY glGetFenceivNV (GLuint fence, GLenum pname, GLint *params); +GLAPI void APIENTRY glFinishFenceNV (GLuint fence); +GLAPI void APIENTRY glSetFenceNV (GLuint fence, GLenum condition); +#endif +#endif /* GL_NV_fence */ + +#ifndef GL_NV_fill_rectangle +#define GL_NV_fill_rectangle 1 +#define GL_FILL_RECTANGLE_NV 0x933C +#endif /* GL_NV_fill_rectangle */ + +#ifndef GL_NV_float_buffer +#define GL_NV_float_buffer 1 +#define GL_FLOAT_R_NV 0x8880 +#define GL_FLOAT_RG_NV 0x8881 +#define GL_FLOAT_RGB_NV 0x8882 +#define GL_FLOAT_RGBA_NV 0x8883 +#define GL_FLOAT_R16_NV 0x8884 +#define GL_FLOAT_R32_NV 0x8885 +#define GL_FLOAT_RG16_NV 0x8886 +#define GL_FLOAT_RG32_NV 0x8887 +#define GL_FLOAT_RGB16_NV 0x8888 +#define GL_FLOAT_RGB32_NV 0x8889 +#define GL_FLOAT_RGBA16_NV 0x888A +#define GL_FLOAT_RGBA32_NV 0x888B +#define GL_TEXTURE_FLOAT_COMPONENTS_NV 0x888C +#define GL_FLOAT_CLEAR_COLOR_VALUE_NV 0x888D +#define GL_FLOAT_RGBA_MODE_NV 0x888E +#endif /* GL_NV_float_buffer */ + +#ifndef GL_NV_fog_distance +#define GL_NV_fog_distance 1 +#define GL_FOG_DISTANCE_MODE_NV 0x855A +#define GL_EYE_RADIAL_NV 0x855B +#define GL_EYE_PLANE_ABSOLUTE_NV 0x855C +#endif /* GL_NV_fog_distance */ + +#ifndef GL_NV_fragment_coverage_to_color +#define GL_NV_fragment_coverage_to_color 1 +#define GL_FRAGMENT_COVERAGE_TO_COLOR_NV 0x92DD +#define GL_FRAGMENT_COVERAGE_COLOR_NV 0x92DE +typedef void (APIENTRYP PFNGLFRAGMENTCOVERAGECOLORNVPROC) (GLuint color); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glFragmentCoverageColorNV (GLuint color); +#endif +#endif /* GL_NV_fragment_coverage_to_color */ + +#ifndef GL_NV_fragment_program +#define GL_NV_fragment_program 1 +#define GL_MAX_FRAGMENT_PROGRAM_LOCAL_PARAMETERS_NV 0x8868 +#define GL_FRAGMENT_PROGRAM_NV 0x8870 +#define GL_MAX_TEXTURE_COORDS_NV 0x8871 +#define GL_MAX_TEXTURE_IMAGE_UNITS_NV 0x8872 +#define GL_FRAGMENT_PROGRAM_BINDING_NV 0x8873 +#define GL_PROGRAM_ERROR_STRING_NV 0x8874 +typedef void (APIENTRYP PFNGLPROGRAMNAMEDPARAMETER4FNVPROC) (GLuint id, GLsizei len, const GLubyte *name, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (APIENTRYP PFNGLPROGRAMNAMEDPARAMETER4FVNVPROC) (GLuint id, GLsizei len, const GLubyte *name, const GLfloat *v); +typedef void (APIENTRYP PFNGLPROGRAMNAMEDPARAMETER4DNVPROC) (GLuint id, GLsizei len, const GLubyte *name, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (APIENTRYP PFNGLPROGRAMNAMEDPARAMETER4DVNVPROC) (GLuint id, GLsizei len, const GLubyte *name, const GLdouble *v); +typedef void (APIENTRYP PFNGLGETPROGRAMNAMEDPARAMETERFVNVPROC) (GLuint id, GLsizei len, const GLubyte *name, GLfloat *params); +typedef void (APIENTRYP PFNGLGETPROGRAMNAMEDPARAMETERDVNVPROC) (GLuint id, GLsizei len, const GLubyte *name, GLdouble *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glProgramNamedParameter4fNV (GLuint id, GLsizei len, const GLubyte *name, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +GLAPI void APIENTRY glProgramNamedParameter4fvNV (GLuint id, GLsizei len, const GLubyte *name, const GLfloat *v); +GLAPI void APIENTRY glProgramNamedParameter4dNV (GLuint id, GLsizei len, const GLubyte *name, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +GLAPI void APIENTRY glProgramNamedParameter4dvNV (GLuint id, GLsizei len, const GLubyte *name, const GLdouble *v); +GLAPI void APIENTRY glGetProgramNamedParameterfvNV (GLuint id, GLsizei len, const GLubyte *name, GLfloat *params); +GLAPI void APIENTRY glGetProgramNamedParameterdvNV (GLuint id, GLsizei len, const GLubyte *name, GLdouble *params); +#endif +#endif /* GL_NV_fragment_program */ + +#ifndef GL_NV_fragment_program2 +#define GL_NV_fragment_program2 1 +#define GL_MAX_PROGRAM_EXEC_INSTRUCTIONS_NV 0x88F4 +#define GL_MAX_PROGRAM_CALL_DEPTH_NV 0x88F5 +#define GL_MAX_PROGRAM_IF_DEPTH_NV 0x88F6 +#define GL_MAX_PROGRAM_LOOP_DEPTH_NV 0x88F7 +#define GL_MAX_PROGRAM_LOOP_COUNT_NV 0x88F8 +#endif /* GL_NV_fragment_program2 */ + +#ifndef GL_NV_fragment_program4 +#define GL_NV_fragment_program4 1 +#endif /* GL_NV_fragment_program4 */ + +#ifndef GL_NV_fragment_program_option +#define GL_NV_fragment_program_option 1 +#endif /* GL_NV_fragment_program_option */ + +#ifndef GL_NV_fragment_shader_barycentric +#define GL_NV_fragment_shader_barycentric 1 +#endif /* GL_NV_fragment_shader_barycentric */ + +#ifndef GL_NV_fragment_shader_interlock +#define GL_NV_fragment_shader_interlock 1 +#endif /* GL_NV_fragment_shader_interlock */ + +#ifndef GL_NV_framebuffer_mixed_samples +#define GL_NV_framebuffer_mixed_samples 1 +#define GL_COVERAGE_MODULATION_TABLE_NV 0x9331 +#define GL_COLOR_SAMPLES_NV 0x8E20 +#define GL_DEPTH_SAMPLES_NV 0x932D +#define GL_STENCIL_SAMPLES_NV 0x932E +#define GL_MIXED_DEPTH_SAMPLES_SUPPORTED_NV 0x932F +#define GL_MIXED_STENCIL_SAMPLES_SUPPORTED_NV 0x9330 +#define GL_COVERAGE_MODULATION_NV 0x9332 +#define GL_COVERAGE_MODULATION_TABLE_SIZE_NV 0x9333 +typedef void (APIENTRYP PFNGLCOVERAGEMODULATIONTABLENVPROC) (GLsizei n, const GLfloat *v); +typedef void (APIENTRYP PFNGLGETCOVERAGEMODULATIONTABLENVPROC) (GLsizei bufSize, GLfloat *v); +typedef void (APIENTRYP PFNGLCOVERAGEMODULATIONNVPROC) (GLenum components); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glCoverageModulationTableNV (GLsizei n, const GLfloat *v); +GLAPI void APIENTRY glGetCoverageModulationTableNV (GLsizei bufSize, GLfloat *v); +GLAPI void APIENTRY glCoverageModulationNV (GLenum components); +#endif +#endif /* GL_NV_framebuffer_mixed_samples */ + +#ifndef GL_NV_framebuffer_multisample_coverage +#define GL_NV_framebuffer_multisample_coverage 1 +#define GL_RENDERBUFFER_COVERAGE_SAMPLES_NV 0x8CAB +#define GL_RENDERBUFFER_COLOR_SAMPLES_NV 0x8E10 +#define GL_MAX_MULTISAMPLE_COVERAGE_MODES_NV 0x8E11 +#define GL_MULTISAMPLE_COVERAGE_MODES_NV 0x8E12 +typedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLECOVERAGENVPROC) (GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLenum internalformat, GLsizei width, GLsizei height); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glRenderbufferStorageMultisampleCoverageNV (GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLenum internalformat, GLsizei width, GLsizei height); +#endif +#endif /* GL_NV_framebuffer_multisample_coverage */ + +#ifndef GL_NV_geometry_program4 +#define GL_NV_geometry_program4 1 +#define GL_GEOMETRY_PROGRAM_NV 0x8C26 +#define GL_MAX_PROGRAM_OUTPUT_VERTICES_NV 0x8C27 +#define GL_MAX_PROGRAM_TOTAL_OUTPUT_COMPONENTS_NV 0x8C28 +typedef void (APIENTRYP PFNGLPROGRAMVERTEXLIMITNVPROC) (GLenum target, GLint limit); +typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTUREEXTPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level); +typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTUREFACEEXTPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLenum face); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glProgramVertexLimitNV (GLenum target, GLint limit); +GLAPI void APIENTRY glFramebufferTextureEXT (GLenum target, GLenum attachment, GLuint texture, GLint level); +GLAPI void APIENTRY glFramebufferTextureFaceEXT (GLenum target, GLenum attachment, GLuint texture, GLint level, GLenum face); +#endif +#endif /* GL_NV_geometry_program4 */ + +#ifndef GL_NV_geometry_shader4 +#define GL_NV_geometry_shader4 1 +#endif /* GL_NV_geometry_shader4 */ + +#ifndef GL_NV_geometry_shader_passthrough +#define GL_NV_geometry_shader_passthrough 1 +#endif /* GL_NV_geometry_shader_passthrough */ + +#ifndef GL_NV_gpu_multicast +#define GL_NV_gpu_multicast 1 +#define GL_PER_GPU_STORAGE_BIT_NV 0x0800 +#define GL_MULTICAST_GPUS_NV 0x92BA +#define GL_RENDER_GPU_MASK_NV 0x9558 +#define GL_PER_GPU_STORAGE_NV 0x9548 +#define GL_MULTICAST_PROGRAMMABLE_SAMPLE_LOCATION_NV 0x9549 +typedef void (APIENTRYP PFNGLRENDERGPUMASKNVPROC) (GLbitfield mask); +typedef void (APIENTRYP PFNGLMULTICASTBUFFERSUBDATANVPROC) (GLbitfield gpuMask, GLuint buffer, GLintptr offset, GLsizeiptr size, const void *data); +typedef void (APIENTRYP PFNGLMULTICASTCOPYBUFFERSUBDATANVPROC) (GLuint readGpu, GLbitfield writeGpuMask, GLuint readBuffer, GLuint writeBuffer, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); +typedef void (APIENTRYP PFNGLMULTICASTCOPYIMAGESUBDATANVPROC) (GLuint srcGpu, GLbitfield dstGpuMask, GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei srcWidth, GLsizei srcHeight, GLsizei srcDepth); +typedef void (APIENTRYP PFNGLMULTICASTBLITFRAMEBUFFERNVPROC) (GLuint srcGpu, GLuint dstGpu, GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); +typedef void (APIENTRYP PFNGLMULTICASTFRAMEBUFFERSAMPLELOCATIONSFVNVPROC) (GLuint gpu, GLuint framebuffer, GLuint start, GLsizei count, const GLfloat *v); +typedef void (APIENTRYP PFNGLMULTICASTBARRIERNVPROC) (void); +typedef void (APIENTRYP PFNGLMULTICASTWAITSYNCNVPROC) (GLuint signalGpu, GLbitfield waitGpuMask); +typedef void (APIENTRYP PFNGLMULTICASTGETQUERYOBJECTIVNVPROC) (GLuint gpu, GLuint id, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLMULTICASTGETQUERYOBJECTUIVNVPROC) (GLuint gpu, GLuint id, GLenum pname, GLuint *params); +typedef void (APIENTRYP PFNGLMULTICASTGETQUERYOBJECTI64VNVPROC) (GLuint gpu, GLuint id, GLenum pname, GLint64 *params); +typedef void (APIENTRYP PFNGLMULTICASTGETQUERYOBJECTUI64VNVPROC) (GLuint gpu, GLuint id, GLenum pname, GLuint64 *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glRenderGpuMaskNV (GLbitfield mask); +GLAPI void APIENTRY glMulticastBufferSubDataNV (GLbitfield gpuMask, GLuint buffer, GLintptr offset, GLsizeiptr size, const void *data); +GLAPI void APIENTRY glMulticastCopyBufferSubDataNV (GLuint readGpu, GLbitfield writeGpuMask, GLuint readBuffer, GLuint writeBuffer, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); +GLAPI void APIENTRY glMulticastCopyImageSubDataNV (GLuint srcGpu, GLbitfield dstGpuMask, GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei srcWidth, GLsizei srcHeight, GLsizei srcDepth); +GLAPI void APIENTRY glMulticastBlitFramebufferNV (GLuint srcGpu, GLuint dstGpu, GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); +GLAPI void APIENTRY glMulticastFramebufferSampleLocationsfvNV (GLuint gpu, GLuint framebuffer, GLuint start, GLsizei count, const GLfloat *v); +GLAPI void APIENTRY glMulticastBarrierNV (void); +GLAPI void APIENTRY glMulticastWaitSyncNV (GLuint signalGpu, GLbitfield waitGpuMask); +GLAPI void APIENTRY glMulticastGetQueryObjectivNV (GLuint gpu, GLuint id, GLenum pname, GLint *params); +GLAPI void APIENTRY glMulticastGetQueryObjectuivNV (GLuint gpu, GLuint id, GLenum pname, GLuint *params); +GLAPI void APIENTRY glMulticastGetQueryObjecti64vNV (GLuint gpu, GLuint id, GLenum pname, GLint64 *params); +GLAPI void APIENTRY glMulticastGetQueryObjectui64vNV (GLuint gpu, GLuint id, GLenum pname, GLuint64 *params); +#endif +#endif /* GL_NV_gpu_multicast */ + +#ifndef GL_NV_gpu_program4 +#define GL_NV_gpu_program4 1 +#define GL_MIN_PROGRAM_TEXEL_OFFSET_NV 0x8904 +#define GL_MAX_PROGRAM_TEXEL_OFFSET_NV 0x8905 +#define GL_PROGRAM_ATTRIB_COMPONENTS_NV 0x8906 +#define GL_PROGRAM_RESULT_COMPONENTS_NV 0x8907 +#define GL_MAX_PROGRAM_ATTRIB_COMPONENTS_NV 0x8908 +#define GL_MAX_PROGRAM_RESULT_COMPONENTS_NV 0x8909 +#define GL_MAX_PROGRAM_GENERIC_ATTRIBS_NV 0x8DA5 +#define GL_MAX_PROGRAM_GENERIC_RESULTS_NV 0x8DA6 +typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERI4INVPROC) (GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w); +typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERI4IVNVPROC) (GLenum target, GLuint index, const GLint *params); +typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERSI4IVNVPROC) (GLenum target, GLuint index, GLsizei count, const GLint *params); +typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERI4UINVPROC) (GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); +typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERI4UIVNVPROC) (GLenum target, GLuint index, const GLuint *params); +typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETERSI4UIVNVPROC) (GLenum target, GLuint index, GLsizei count, const GLuint *params); +typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERI4INVPROC) (GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w); +typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERI4IVNVPROC) (GLenum target, GLuint index, const GLint *params); +typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERSI4IVNVPROC) (GLenum target, GLuint index, GLsizei count, const GLint *params); +typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERI4UINVPROC) (GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); +typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERI4UIVNVPROC) (GLenum target, GLuint index, const GLuint *params); +typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETERSI4UIVNVPROC) (GLenum target, GLuint index, GLsizei count, const GLuint *params); +typedef void (APIENTRYP PFNGLGETPROGRAMLOCALPARAMETERIIVNVPROC) (GLenum target, GLuint index, GLint *params); +typedef void (APIENTRYP PFNGLGETPROGRAMLOCALPARAMETERIUIVNVPROC) (GLenum target, GLuint index, GLuint *params); +typedef void (APIENTRYP PFNGLGETPROGRAMENVPARAMETERIIVNVPROC) (GLenum target, GLuint index, GLint *params); +typedef void (APIENTRYP PFNGLGETPROGRAMENVPARAMETERIUIVNVPROC) (GLenum target, GLuint index, GLuint *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glProgramLocalParameterI4iNV (GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w); +GLAPI void APIENTRY glProgramLocalParameterI4ivNV (GLenum target, GLuint index, const GLint *params); +GLAPI void APIENTRY glProgramLocalParametersI4ivNV (GLenum target, GLuint index, GLsizei count, const GLint *params); +GLAPI void APIENTRY glProgramLocalParameterI4uiNV (GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); +GLAPI void APIENTRY glProgramLocalParameterI4uivNV (GLenum target, GLuint index, const GLuint *params); +GLAPI void APIENTRY glProgramLocalParametersI4uivNV (GLenum target, GLuint index, GLsizei count, const GLuint *params); +GLAPI void APIENTRY glProgramEnvParameterI4iNV (GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w); +GLAPI void APIENTRY glProgramEnvParameterI4ivNV (GLenum target, GLuint index, const GLint *params); +GLAPI void APIENTRY glProgramEnvParametersI4ivNV (GLenum target, GLuint index, GLsizei count, const GLint *params); +GLAPI void APIENTRY glProgramEnvParameterI4uiNV (GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); +GLAPI void APIENTRY glProgramEnvParameterI4uivNV (GLenum target, GLuint index, const GLuint *params); +GLAPI void APIENTRY glProgramEnvParametersI4uivNV (GLenum target, GLuint index, GLsizei count, const GLuint *params); +GLAPI void APIENTRY glGetProgramLocalParameterIivNV (GLenum target, GLuint index, GLint *params); +GLAPI void APIENTRY glGetProgramLocalParameterIuivNV (GLenum target, GLuint index, GLuint *params); +GLAPI void APIENTRY glGetProgramEnvParameterIivNV (GLenum target, GLuint index, GLint *params); +GLAPI void APIENTRY glGetProgramEnvParameterIuivNV (GLenum target, GLuint index, GLuint *params); +#endif +#endif /* GL_NV_gpu_program4 */ + +#ifndef GL_NV_gpu_program5 +#define GL_NV_gpu_program5 1 +#define GL_MAX_GEOMETRY_PROGRAM_INVOCATIONS_NV 0x8E5A +#define GL_MIN_FRAGMENT_INTERPOLATION_OFFSET_NV 0x8E5B +#define GL_MAX_FRAGMENT_INTERPOLATION_OFFSET_NV 0x8E5C +#define GL_FRAGMENT_PROGRAM_INTERPOLATION_OFFSET_BITS_NV 0x8E5D +#define GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET_NV 0x8E5E +#define GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET_NV 0x8E5F +#define GL_MAX_PROGRAM_SUBROUTINE_PARAMETERS_NV 0x8F44 +#define GL_MAX_PROGRAM_SUBROUTINE_NUM_NV 0x8F45 +typedef void (APIENTRYP PFNGLPROGRAMSUBROUTINEPARAMETERSUIVNVPROC) (GLenum target, GLsizei count, const GLuint *params); +typedef void (APIENTRYP PFNGLGETPROGRAMSUBROUTINEPARAMETERUIVNVPROC) (GLenum target, GLuint index, GLuint *param); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glProgramSubroutineParametersuivNV (GLenum target, GLsizei count, const GLuint *params); +GLAPI void APIENTRY glGetProgramSubroutineParameteruivNV (GLenum target, GLuint index, GLuint *param); +#endif +#endif /* GL_NV_gpu_program5 */ + +#ifndef GL_NV_gpu_program5_mem_extended +#define GL_NV_gpu_program5_mem_extended 1 +#endif /* GL_NV_gpu_program5_mem_extended */ + +#ifndef GL_NV_gpu_shader5 +#define GL_NV_gpu_shader5 1 +#endif /* GL_NV_gpu_shader5 */ + +#ifndef GL_NV_half_float +#define GL_NV_half_float 1 +typedef unsigned short GLhalfNV; +#define GL_HALF_FLOAT_NV 0x140B +typedef void (APIENTRYP PFNGLVERTEX2HNVPROC) (GLhalfNV x, GLhalfNV y); +typedef void (APIENTRYP PFNGLVERTEX2HVNVPROC) (const GLhalfNV *v); +typedef void (APIENTRYP PFNGLVERTEX3HNVPROC) (GLhalfNV x, GLhalfNV y, GLhalfNV z); +typedef void (APIENTRYP PFNGLVERTEX3HVNVPROC) (const GLhalfNV *v); +typedef void (APIENTRYP PFNGLVERTEX4HNVPROC) (GLhalfNV x, GLhalfNV y, GLhalfNV z, GLhalfNV w); +typedef void (APIENTRYP PFNGLVERTEX4HVNVPROC) (const GLhalfNV *v); +typedef void (APIENTRYP PFNGLNORMAL3HNVPROC) (GLhalfNV nx, GLhalfNV ny, GLhalfNV nz); +typedef void (APIENTRYP PFNGLNORMAL3HVNVPROC) (const GLhalfNV *v); +typedef void (APIENTRYP PFNGLCOLOR3HNVPROC) (GLhalfNV red, GLhalfNV green, GLhalfNV blue); +typedef void (APIENTRYP PFNGLCOLOR3HVNVPROC) (const GLhalfNV *v); +typedef void (APIENTRYP PFNGLCOLOR4HNVPROC) (GLhalfNV red, GLhalfNV green, GLhalfNV blue, GLhalfNV alpha); +typedef void (APIENTRYP PFNGLCOLOR4HVNVPROC) (const GLhalfNV *v); +typedef void (APIENTRYP PFNGLTEXCOORD1HNVPROC) (GLhalfNV s); +typedef void (APIENTRYP PFNGLTEXCOORD1HVNVPROC) (const GLhalfNV *v); +typedef void (APIENTRYP PFNGLTEXCOORD2HNVPROC) (GLhalfNV s, GLhalfNV t); +typedef void (APIENTRYP PFNGLTEXCOORD2HVNVPROC) (const GLhalfNV *v); +typedef void (APIENTRYP PFNGLTEXCOORD3HNVPROC) (GLhalfNV s, GLhalfNV t, GLhalfNV r); +typedef void (APIENTRYP PFNGLTEXCOORD3HVNVPROC) (const GLhalfNV *v); +typedef void (APIENTRYP PFNGLTEXCOORD4HNVPROC) (GLhalfNV s, GLhalfNV t, GLhalfNV r, GLhalfNV q); +typedef void (APIENTRYP PFNGLTEXCOORD4HVNVPROC) (const GLhalfNV *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1HNVPROC) (GLenum target, GLhalfNV s); +typedef void (APIENTRYP PFNGLMULTITEXCOORD1HVNVPROC) (GLenum target, const GLhalfNV *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2HNVPROC) (GLenum target, GLhalfNV s, GLhalfNV t); +typedef void (APIENTRYP PFNGLMULTITEXCOORD2HVNVPROC) (GLenum target, const GLhalfNV *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3HNVPROC) (GLenum target, GLhalfNV s, GLhalfNV t, GLhalfNV r); +typedef void (APIENTRYP PFNGLMULTITEXCOORD3HVNVPROC) (GLenum target, const GLhalfNV *v); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4HNVPROC) (GLenum target, GLhalfNV s, GLhalfNV t, GLhalfNV r, GLhalfNV q); +typedef void (APIENTRYP PFNGLMULTITEXCOORD4HVNVPROC) (GLenum target, const GLhalfNV *v); +typedef void (APIENTRYP PFNGLFOGCOORDHNVPROC) (GLhalfNV fog); +typedef void (APIENTRYP PFNGLFOGCOORDHVNVPROC) (const GLhalfNV *fog); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3HNVPROC) (GLhalfNV red, GLhalfNV green, GLhalfNV blue); +typedef void (APIENTRYP PFNGLSECONDARYCOLOR3HVNVPROC) (const GLhalfNV *v); +typedef void (APIENTRYP PFNGLVERTEXWEIGHTHNVPROC) (GLhalfNV weight); +typedef void (APIENTRYP PFNGLVERTEXWEIGHTHVNVPROC) (const GLhalfNV *weight); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1HNVPROC) (GLuint index, GLhalfNV x); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1HVNVPROC) (GLuint index, const GLhalfNV *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2HNVPROC) (GLuint index, GLhalfNV x, GLhalfNV y); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2HVNVPROC) (GLuint index, const GLhalfNV *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3HNVPROC) (GLuint index, GLhalfNV x, GLhalfNV y, GLhalfNV z); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3HVNVPROC) (GLuint index, const GLhalfNV *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4HNVPROC) (GLuint index, GLhalfNV x, GLhalfNV y, GLhalfNV z, GLhalfNV w); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4HVNVPROC) (GLuint index, const GLhalfNV *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBS1HVNVPROC) (GLuint index, GLsizei n, const GLhalfNV *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBS2HVNVPROC) (GLuint index, GLsizei n, const GLhalfNV *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBS3HVNVPROC) (GLuint index, GLsizei n, const GLhalfNV *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBS4HVNVPROC) (GLuint index, GLsizei n, const GLhalfNV *v); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glVertex2hNV (GLhalfNV x, GLhalfNV y); +GLAPI void APIENTRY glVertex2hvNV (const GLhalfNV *v); +GLAPI void APIENTRY glVertex3hNV (GLhalfNV x, GLhalfNV y, GLhalfNV z); +GLAPI void APIENTRY glVertex3hvNV (const GLhalfNV *v); +GLAPI void APIENTRY glVertex4hNV (GLhalfNV x, GLhalfNV y, GLhalfNV z, GLhalfNV w); +GLAPI void APIENTRY glVertex4hvNV (const GLhalfNV *v); +GLAPI void APIENTRY glNormal3hNV (GLhalfNV nx, GLhalfNV ny, GLhalfNV nz); +GLAPI void APIENTRY glNormal3hvNV (const GLhalfNV *v); +GLAPI void APIENTRY glColor3hNV (GLhalfNV red, GLhalfNV green, GLhalfNV blue); +GLAPI void APIENTRY glColor3hvNV (const GLhalfNV *v); +GLAPI void APIENTRY glColor4hNV (GLhalfNV red, GLhalfNV green, GLhalfNV blue, GLhalfNV alpha); +GLAPI void APIENTRY glColor4hvNV (const GLhalfNV *v); +GLAPI void APIENTRY glTexCoord1hNV (GLhalfNV s); +GLAPI void APIENTRY glTexCoord1hvNV (const GLhalfNV *v); +GLAPI void APIENTRY glTexCoord2hNV (GLhalfNV s, GLhalfNV t); +GLAPI void APIENTRY glTexCoord2hvNV (const GLhalfNV *v); +GLAPI void APIENTRY glTexCoord3hNV (GLhalfNV s, GLhalfNV t, GLhalfNV r); +GLAPI void APIENTRY glTexCoord3hvNV (const GLhalfNV *v); +GLAPI void APIENTRY glTexCoord4hNV (GLhalfNV s, GLhalfNV t, GLhalfNV r, GLhalfNV q); +GLAPI void APIENTRY glTexCoord4hvNV (const GLhalfNV *v); +GLAPI void APIENTRY glMultiTexCoord1hNV (GLenum target, GLhalfNV s); +GLAPI void APIENTRY glMultiTexCoord1hvNV (GLenum target, const GLhalfNV *v); +GLAPI void APIENTRY glMultiTexCoord2hNV (GLenum target, GLhalfNV s, GLhalfNV t); +GLAPI void APIENTRY glMultiTexCoord2hvNV (GLenum target, const GLhalfNV *v); +GLAPI void APIENTRY glMultiTexCoord3hNV (GLenum target, GLhalfNV s, GLhalfNV t, GLhalfNV r); +GLAPI void APIENTRY glMultiTexCoord3hvNV (GLenum target, const GLhalfNV *v); +GLAPI void APIENTRY glMultiTexCoord4hNV (GLenum target, GLhalfNV s, GLhalfNV t, GLhalfNV r, GLhalfNV q); +GLAPI void APIENTRY glMultiTexCoord4hvNV (GLenum target, const GLhalfNV *v); +GLAPI void APIENTRY glFogCoordhNV (GLhalfNV fog); +GLAPI void APIENTRY glFogCoordhvNV (const GLhalfNV *fog); +GLAPI void APIENTRY glSecondaryColor3hNV (GLhalfNV red, GLhalfNV green, GLhalfNV blue); +GLAPI void APIENTRY glSecondaryColor3hvNV (const GLhalfNV *v); +GLAPI void APIENTRY glVertexWeighthNV (GLhalfNV weight); +GLAPI void APIENTRY glVertexWeighthvNV (const GLhalfNV *weight); +GLAPI void APIENTRY glVertexAttrib1hNV (GLuint index, GLhalfNV x); +GLAPI void APIENTRY glVertexAttrib1hvNV (GLuint index, const GLhalfNV *v); +GLAPI void APIENTRY glVertexAttrib2hNV (GLuint index, GLhalfNV x, GLhalfNV y); +GLAPI void APIENTRY glVertexAttrib2hvNV (GLuint index, const GLhalfNV *v); +GLAPI void APIENTRY glVertexAttrib3hNV (GLuint index, GLhalfNV x, GLhalfNV y, GLhalfNV z); +GLAPI void APIENTRY glVertexAttrib3hvNV (GLuint index, const GLhalfNV *v); +GLAPI void APIENTRY glVertexAttrib4hNV (GLuint index, GLhalfNV x, GLhalfNV y, GLhalfNV z, GLhalfNV w); +GLAPI void APIENTRY glVertexAttrib4hvNV (GLuint index, const GLhalfNV *v); +GLAPI void APIENTRY glVertexAttribs1hvNV (GLuint index, GLsizei n, const GLhalfNV *v); +GLAPI void APIENTRY glVertexAttribs2hvNV (GLuint index, GLsizei n, const GLhalfNV *v); +GLAPI void APIENTRY glVertexAttribs3hvNV (GLuint index, GLsizei n, const GLhalfNV *v); +GLAPI void APIENTRY glVertexAttribs4hvNV (GLuint index, GLsizei n, const GLhalfNV *v); +#endif +#endif /* GL_NV_half_float */ + +#ifndef GL_NV_internalformat_sample_query +#define GL_NV_internalformat_sample_query 1 +#define GL_MULTISAMPLES_NV 0x9371 +#define GL_SUPERSAMPLE_SCALE_X_NV 0x9372 +#define GL_SUPERSAMPLE_SCALE_Y_NV 0x9373 +#define GL_CONFORMANT_NV 0x9374 +typedef void (APIENTRYP PFNGLGETINTERNALFORMATSAMPLEIVNVPROC) (GLenum target, GLenum internalformat, GLsizei samples, GLenum pname, GLsizei count, GLint *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glGetInternalformatSampleivNV (GLenum target, GLenum internalformat, GLsizei samples, GLenum pname, GLsizei count, GLint *params); +#endif +#endif /* GL_NV_internalformat_sample_query */ + +#ifndef GL_NV_light_max_exponent +#define GL_NV_light_max_exponent 1 +#define GL_MAX_SHININESS_NV 0x8504 +#define GL_MAX_SPOT_EXPONENT_NV 0x8505 +#endif /* GL_NV_light_max_exponent */ + +#ifndef GL_NV_memory_attachment +#define GL_NV_memory_attachment 1 +#define GL_ATTACHED_MEMORY_OBJECT_NV 0x95A4 +#define GL_ATTACHED_MEMORY_OFFSET_NV 0x95A5 +#define GL_MEMORY_ATTACHABLE_ALIGNMENT_NV 0x95A6 +#define GL_MEMORY_ATTACHABLE_SIZE_NV 0x95A7 +#define GL_MEMORY_ATTACHABLE_NV 0x95A8 +#define GL_DETACHED_MEMORY_INCARNATION_NV 0x95A9 +#define GL_DETACHED_TEXTURES_NV 0x95AA +#define GL_DETACHED_BUFFERS_NV 0x95AB +#define GL_MAX_DETACHED_TEXTURES_NV 0x95AC +#define GL_MAX_DETACHED_BUFFERS_NV 0x95AD +typedef void (APIENTRYP PFNGLGETMEMORYOBJECTDETACHEDRESOURCESUIVNVPROC) (GLuint memory, GLenum pname, GLint first, GLsizei count, GLuint *params); +typedef void (APIENTRYP PFNGLRESETMEMORYOBJECTPARAMETERNVPROC) (GLuint memory, GLenum pname); +typedef void (APIENTRYP PFNGLTEXATTACHMEMORYNVPROC) (GLenum target, GLuint memory, GLuint64 offset); +typedef void (APIENTRYP PFNGLBUFFERATTACHMEMORYNVPROC) (GLenum target, GLuint memory, GLuint64 offset); +typedef void (APIENTRYP PFNGLTEXTUREATTACHMEMORYNVPROC) (GLuint texture, GLuint memory, GLuint64 offset); +typedef void (APIENTRYP PFNGLNAMEDBUFFERATTACHMEMORYNVPROC) (GLuint buffer, GLuint memory, GLuint64 offset); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glGetMemoryObjectDetachedResourcesuivNV (GLuint memory, GLenum pname, GLint first, GLsizei count, GLuint *params); +GLAPI void APIENTRY glResetMemoryObjectParameterNV (GLuint memory, GLenum pname); +GLAPI void APIENTRY glTexAttachMemoryNV (GLenum target, GLuint memory, GLuint64 offset); +GLAPI void APIENTRY glBufferAttachMemoryNV (GLenum target, GLuint memory, GLuint64 offset); +GLAPI void APIENTRY glTextureAttachMemoryNV (GLuint texture, GLuint memory, GLuint64 offset); +GLAPI void APIENTRY glNamedBufferAttachMemoryNV (GLuint buffer, GLuint memory, GLuint64 offset); +#endif +#endif /* GL_NV_memory_attachment */ + +#ifndef GL_NV_memory_object_sparse +#define GL_NV_memory_object_sparse 1 +typedef void (APIENTRYP PFNGLBUFFERPAGECOMMITMENTMEMNVPROC) (GLenum target, GLintptr offset, GLsizeiptr size, GLuint memory, GLuint64 memOffset, GLboolean commit); +typedef void (APIENTRYP PFNGLTEXPAGECOMMITMENTMEMNVPROC) (GLenum target, GLint layer, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLuint memory, GLuint64 offset, GLboolean commit); +typedef void (APIENTRYP PFNGLNAMEDBUFFERPAGECOMMITMENTMEMNVPROC) (GLuint buffer, GLintptr offset, GLsizeiptr size, GLuint memory, GLuint64 memOffset, GLboolean commit); +typedef void (APIENTRYP PFNGLTEXTUREPAGECOMMITMENTMEMNVPROC) (GLuint texture, GLint layer, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLuint memory, GLuint64 offset, GLboolean commit); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBufferPageCommitmentMemNV (GLenum target, GLintptr offset, GLsizeiptr size, GLuint memory, GLuint64 memOffset, GLboolean commit); +GLAPI void APIENTRY glTexPageCommitmentMemNV (GLenum target, GLint layer, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLuint memory, GLuint64 offset, GLboolean commit); +GLAPI void APIENTRY glNamedBufferPageCommitmentMemNV (GLuint buffer, GLintptr offset, GLsizeiptr size, GLuint memory, GLuint64 memOffset, GLboolean commit); +GLAPI void APIENTRY glTexturePageCommitmentMemNV (GLuint texture, GLint layer, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLuint memory, GLuint64 offset, GLboolean commit); +#endif +#endif /* GL_NV_memory_object_sparse */ + +#ifndef GL_NV_mesh_shader +#define GL_NV_mesh_shader 1 +#define GL_MESH_SHADER_NV 0x9559 +#define GL_TASK_SHADER_NV 0x955A +#define GL_MAX_MESH_UNIFORM_BLOCKS_NV 0x8E60 +#define GL_MAX_MESH_TEXTURE_IMAGE_UNITS_NV 0x8E61 +#define GL_MAX_MESH_IMAGE_UNIFORMS_NV 0x8E62 +#define GL_MAX_MESH_UNIFORM_COMPONENTS_NV 0x8E63 +#define GL_MAX_MESH_ATOMIC_COUNTER_BUFFERS_NV 0x8E64 +#define GL_MAX_MESH_ATOMIC_COUNTERS_NV 0x8E65 +#define GL_MAX_MESH_SHADER_STORAGE_BLOCKS_NV 0x8E66 +#define GL_MAX_COMBINED_MESH_UNIFORM_COMPONENTS_NV 0x8E67 +#define GL_MAX_TASK_UNIFORM_BLOCKS_NV 0x8E68 +#define GL_MAX_TASK_TEXTURE_IMAGE_UNITS_NV 0x8E69 +#define GL_MAX_TASK_IMAGE_UNIFORMS_NV 0x8E6A +#define GL_MAX_TASK_UNIFORM_COMPONENTS_NV 0x8E6B +#define GL_MAX_TASK_ATOMIC_COUNTER_BUFFERS_NV 0x8E6C +#define GL_MAX_TASK_ATOMIC_COUNTERS_NV 0x8E6D +#define GL_MAX_TASK_SHADER_STORAGE_BLOCKS_NV 0x8E6E +#define GL_MAX_COMBINED_TASK_UNIFORM_COMPONENTS_NV 0x8E6F +#define GL_MAX_MESH_WORK_GROUP_INVOCATIONS_NV 0x95A2 +#define GL_MAX_TASK_WORK_GROUP_INVOCATIONS_NV 0x95A3 +#define GL_MAX_MESH_TOTAL_MEMORY_SIZE_NV 0x9536 +#define GL_MAX_TASK_TOTAL_MEMORY_SIZE_NV 0x9537 +#define GL_MAX_MESH_OUTPUT_VERTICES_NV 0x9538 +#define GL_MAX_MESH_OUTPUT_PRIMITIVES_NV 0x9539 +#define GL_MAX_TASK_OUTPUT_COUNT_NV 0x953A +#define GL_MAX_DRAW_MESH_TASKS_COUNT_NV 0x953D +#define GL_MAX_MESH_VIEWS_NV 0x9557 +#define GL_MESH_OUTPUT_PER_VERTEX_GRANULARITY_NV 0x92DF +#define GL_MESH_OUTPUT_PER_PRIMITIVE_GRANULARITY_NV 0x9543 +#define GL_MAX_MESH_WORK_GROUP_SIZE_NV 0x953B +#define GL_MAX_TASK_WORK_GROUP_SIZE_NV 0x953C +#define GL_MESH_WORK_GROUP_SIZE_NV 0x953E +#define GL_TASK_WORK_GROUP_SIZE_NV 0x953F +#define GL_MESH_VERTICES_OUT_NV 0x9579 +#define GL_MESH_PRIMITIVES_OUT_NV 0x957A +#define GL_MESH_OUTPUT_TYPE_NV 0x957B +#define GL_UNIFORM_BLOCK_REFERENCED_BY_MESH_SHADER_NV 0x959C +#define GL_UNIFORM_BLOCK_REFERENCED_BY_TASK_SHADER_NV 0x959D +#define GL_REFERENCED_BY_MESH_SHADER_NV 0x95A0 +#define GL_REFERENCED_BY_TASK_SHADER_NV 0x95A1 +#define GL_MESH_SHADER_BIT_NV 0x00000040 +#define GL_TASK_SHADER_BIT_NV 0x00000080 +#define GL_MESH_SUBROUTINE_NV 0x957C +#define GL_TASK_SUBROUTINE_NV 0x957D +#define GL_MESH_SUBROUTINE_UNIFORM_NV 0x957E +#define GL_TASK_SUBROUTINE_UNIFORM_NV 0x957F +#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_MESH_SHADER_NV 0x959E +#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_TASK_SHADER_NV 0x959F +typedef void (APIENTRYP PFNGLDRAWMESHTASKSNVPROC) (GLuint first, GLuint count); +typedef void (APIENTRYP PFNGLDRAWMESHTASKSINDIRECTNVPROC) (GLintptr indirect); +typedef void (APIENTRYP PFNGLMULTIDRAWMESHTASKSINDIRECTNVPROC) (GLintptr indirect, GLsizei drawcount, GLsizei stride); +typedef void (APIENTRYP PFNGLMULTIDRAWMESHTASKSINDIRECTCOUNTNVPROC) (GLintptr indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glDrawMeshTasksNV (GLuint first, GLuint count); +GLAPI void APIENTRY glDrawMeshTasksIndirectNV (GLintptr indirect); +GLAPI void APIENTRY glMultiDrawMeshTasksIndirectNV (GLintptr indirect, GLsizei drawcount, GLsizei stride); +GLAPI void APIENTRY glMultiDrawMeshTasksIndirectCountNV (GLintptr indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride); +#endif +#endif /* GL_NV_mesh_shader */ + +#ifndef GL_NV_multisample_coverage +#define GL_NV_multisample_coverage 1 +#endif /* GL_NV_multisample_coverage */ + +#ifndef GL_NV_multisample_filter_hint +#define GL_NV_multisample_filter_hint 1 +#define GL_MULTISAMPLE_FILTER_HINT_NV 0x8534 +#endif /* GL_NV_multisample_filter_hint */ + +#ifndef GL_NV_occlusion_query +#define GL_NV_occlusion_query 1 +#define GL_PIXEL_COUNTER_BITS_NV 0x8864 +#define GL_CURRENT_OCCLUSION_QUERY_ID_NV 0x8865 +#define GL_PIXEL_COUNT_NV 0x8866 +#define GL_PIXEL_COUNT_AVAILABLE_NV 0x8867 +typedef void (APIENTRYP PFNGLGENOCCLUSIONQUERIESNVPROC) (GLsizei n, GLuint *ids); +typedef void (APIENTRYP PFNGLDELETEOCCLUSIONQUERIESNVPROC) (GLsizei n, const GLuint *ids); +typedef GLboolean (APIENTRYP PFNGLISOCCLUSIONQUERYNVPROC) (GLuint id); +typedef void (APIENTRYP PFNGLBEGINOCCLUSIONQUERYNVPROC) (GLuint id); +typedef void (APIENTRYP PFNGLENDOCCLUSIONQUERYNVPROC) (void); +typedef void (APIENTRYP PFNGLGETOCCLUSIONQUERYIVNVPROC) (GLuint id, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETOCCLUSIONQUERYUIVNVPROC) (GLuint id, GLenum pname, GLuint *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glGenOcclusionQueriesNV (GLsizei n, GLuint *ids); +GLAPI void APIENTRY glDeleteOcclusionQueriesNV (GLsizei n, const GLuint *ids); +GLAPI GLboolean APIENTRY glIsOcclusionQueryNV (GLuint id); +GLAPI void APIENTRY glBeginOcclusionQueryNV (GLuint id); +GLAPI void APIENTRY glEndOcclusionQueryNV (void); +GLAPI void APIENTRY glGetOcclusionQueryivNV (GLuint id, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetOcclusionQueryuivNV (GLuint id, GLenum pname, GLuint *params); +#endif +#endif /* GL_NV_occlusion_query */ + +#ifndef GL_NV_packed_depth_stencil +#define GL_NV_packed_depth_stencil 1 +#define GL_DEPTH_STENCIL_NV 0x84F9 +#define GL_UNSIGNED_INT_24_8_NV 0x84FA +#endif /* GL_NV_packed_depth_stencil */ + +#ifndef GL_NV_parameter_buffer_object +#define GL_NV_parameter_buffer_object 1 +#define GL_MAX_PROGRAM_PARAMETER_BUFFER_BINDINGS_NV 0x8DA0 +#define GL_MAX_PROGRAM_PARAMETER_BUFFER_SIZE_NV 0x8DA1 +#define GL_VERTEX_PROGRAM_PARAMETER_BUFFER_NV 0x8DA2 +#define GL_GEOMETRY_PROGRAM_PARAMETER_BUFFER_NV 0x8DA3 +#define GL_FRAGMENT_PROGRAM_PARAMETER_BUFFER_NV 0x8DA4 +typedef void (APIENTRYP PFNGLPROGRAMBUFFERPARAMETERSFVNVPROC) (GLenum target, GLuint bindingIndex, GLuint wordIndex, GLsizei count, const GLfloat *params); +typedef void (APIENTRYP PFNGLPROGRAMBUFFERPARAMETERSIIVNVPROC) (GLenum target, GLuint bindingIndex, GLuint wordIndex, GLsizei count, const GLint *params); +typedef void (APIENTRYP PFNGLPROGRAMBUFFERPARAMETERSIUIVNVPROC) (GLenum target, GLuint bindingIndex, GLuint wordIndex, GLsizei count, const GLuint *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glProgramBufferParametersfvNV (GLenum target, GLuint bindingIndex, GLuint wordIndex, GLsizei count, const GLfloat *params); +GLAPI void APIENTRY glProgramBufferParametersIivNV (GLenum target, GLuint bindingIndex, GLuint wordIndex, GLsizei count, const GLint *params); +GLAPI void APIENTRY glProgramBufferParametersIuivNV (GLenum target, GLuint bindingIndex, GLuint wordIndex, GLsizei count, const GLuint *params); +#endif +#endif /* GL_NV_parameter_buffer_object */ + +#ifndef GL_NV_parameter_buffer_object2 +#define GL_NV_parameter_buffer_object2 1 +#endif /* GL_NV_parameter_buffer_object2 */ + +#ifndef GL_NV_path_rendering +#define GL_NV_path_rendering 1 +#define GL_PATH_FORMAT_SVG_NV 0x9070 +#define GL_PATH_FORMAT_PS_NV 0x9071 +#define GL_STANDARD_FONT_NAME_NV 0x9072 +#define GL_SYSTEM_FONT_NAME_NV 0x9073 +#define GL_FILE_NAME_NV 0x9074 +#define GL_PATH_STROKE_WIDTH_NV 0x9075 +#define GL_PATH_END_CAPS_NV 0x9076 +#define GL_PATH_INITIAL_END_CAP_NV 0x9077 +#define GL_PATH_TERMINAL_END_CAP_NV 0x9078 +#define GL_PATH_JOIN_STYLE_NV 0x9079 +#define GL_PATH_MITER_LIMIT_NV 0x907A +#define GL_PATH_DASH_CAPS_NV 0x907B +#define GL_PATH_INITIAL_DASH_CAP_NV 0x907C +#define GL_PATH_TERMINAL_DASH_CAP_NV 0x907D +#define GL_PATH_DASH_OFFSET_NV 0x907E +#define GL_PATH_CLIENT_LENGTH_NV 0x907F +#define GL_PATH_FILL_MODE_NV 0x9080 +#define GL_PATH_FILL_MASK_NV 0x9081 +#define GL_PATH_FILL_COVER_MODE_NV 0x9082 +#define GL_PATH_STROKE_COVER_MODE_NV 0x9083 +#define GL_PATH_STROKE_MASK_NV 0x9084 +#define GL_COUNT_UP_NV 0x9088 +#define GL_COUNT_DOWN_NV 0x9089 +#define GL_PATH_OBJECT_BOUNDING_BOX_NV 0x908A +#define GL_CONVEX_HULL_NV 0x908B +#define GL_BOUNDING_BOX_NV 0x908D +#define GL_TRANSLATE_X_NV 0x908E +#define GL_TRANSLATE_Y_NV 0x908F +#define GL_TRANSLATE_2D_NV 0x9090 +#define GL_TRANSLATE_3D_NV 0x9091 +#define GL_AFFINE_2D_NV 0x9092 +#define GL_AFFINE_3D_NV 0x9094 +#define GL_TRANSPOSE_AFFINE_2D_NV 0x9096 +#define GL_TRANSPOSE_AFFINE_3D_NV 0x9098 +#define GL_UTF8_NV 0x909A +#define GL_UTF16_NV 0x909B +#define GL_BOUNDING_BOX_OF_BOUNDING_BOXES_NV 0x909C +#define GL_PATH_COMMAND_COUNT_NV 0x909D +#define GL_PATH_COORD_COUNT_NV 0x909E +#define GL_PATH_DASH_ARRAY_COUNT_NV 0x909F +#define GL_PATH_COMPUTED_LENGTH_NV 0x90A0 +#define GL_PATH_FILL_BOUNDING_BOX_NV 0x90A1 +#define GL_PATH_STROKE_BOUNDING_BOX_NV 0x90A2 +#define GL_SQUARE_NV 0x90A3 +#define GL_ROUND_NV 0x90A4 +#define GL_TRIANGULAR_NV 0x90A5 +#define GL_BEVEL_NV 0x90A6 +#define GL_MITER_REVERT_NV 0x90A7 +#define GL_MITER_TRUNCATE_NV 0x90A8 +#define GL_SKIP_MISSING_GLYPH_NV 0x90A9 +#define GL_USE_MISSING_GLYPH_NV 0x90AA +#define GL_PATH_ERROR_POSITION_NV 0x90AB +#define GL_ACCUM_ADJACENT_PAIRS_NV 0x90AD +#define GL_ADJACENT_PAIRS_NV 0x90AE +#define GL_FIRST_TO_REST_NV 0x90AF +#define GL_PATH_GEN_MODE_NV 0x90B0 +#define GL_PATH_GEN_COEFF_NV 0x90B1 +#define GL_PATH_GEN_COMPONENTS_NV 0x90B3 +#define GL_PATH_STENCIL_FUNC_NV 0x90B7 +#define GL_PATH_STENCIL_REF_NV 0x90B8 +#define GL_PATH_STENCIL_VALUE_MASK_NV 0x90B9 +#define GL_PATH_STENCIL_DEPTH_OFFSET_FACTOR_NV 0x90BD +#define GL_PATH_STENCIL_DEPTH_OFFSET_UNITS_NV 0x90BE +#define GL_PATH_COVER_DEPTH_FUNC_NV 0x90BF +#define GL_PATH_DASH_OFFSET_RESET_NV 0x90B4 +#define GL_MOVE_TO_RESETS_NV 0x90B5 +#define GL_MOVE_TO_CONTINUES_NV 0x90B6 +#define GL_CLOSE_PATH_NV 0x00 +#define GL_MOVE_TO_NV 0x02 +#define GL_RELATIVE_MOVE_TO_NV 0x03 +#define GL_LINE_TO_NV 0x04 +#define GL_RELATIVE_LINE_TO_NV 0x05 +#define GL_HORIZONTAL_LINE_TO_NV 0x06 +#define GL_RELATIVE_HORIZONTAL_LINE_TO_NV 0x07 +#define GL_VERTICAL_LINE_TO_NV 0x08 +#define GL_RELATIVE_VERTICAL_LINE_TO_NV 0x09 +#define GL_QUADRATIC_CURVE_TO_NV 0x0A +#define GL_RELATIVE_QUADRATIC_CURVE_TO_NV 0x0B +#define GL_CUBIC_CURVE_TO_NV 0x0C +#define GL_RELATIVE_CUBIC_CURVE_TO_NV 0x0D +#define GL_SMOOTH_QUADRATIC_CURVE_TO_NV 0x0E +#define GL_RELATIVE_SMOOTH_QUADRATIC_CURVE_TO_NV 0x0F +#define GL_SMOOTH_CUBIC_CURVE_TO_NV 0x10 +#define GL_RELATIVE_SMOOTH_CUBIC_CURVE_TO_NV 0x11 +#define GL_SMALL_CCW_ARC_TO_NV 0x12 +#define GL_RELATIVE_SMALL_CCW_ARC_TO_NV 0x13 +#define GL_SMALL_CW_ARC_TO_NV 0x14 +#define GL_RELATIVE_SMALL_CW_ARC_TO_NV 0x15 +#define GL_LARGE_CCW_ARC_TO_NV 0x16 +#define GL_RELATIVE_LARGE_CCW_ARC_TO_NV 0x17 +#define GL_LARGE_CW_ARC_TO_NV 0x18 +#define GL_RELATIVE_LARGE_CW_ARC_TO_NV 0x19 +#define GL_RESTART_PATH_NV 0xF0 +#define GL_DUP_FIRST_CUBIC_CURVE_TO_NV 0xF2 +#define GL_DUP_LAST_CUBIC_CURVE_TO_NV 0xF4 +#define GL_RECT_NV 0xF6 +#define GL_CIRCULAR_CCW_ARC_TO_NV 0xF8 +#define GL_CIRCULAR_CW_ARC_TO_NV 0xFA +#define GL_CIRCULAR_TANGENT_ARC_TO_NV 0xFC +#define GL_ARC_TO_NV 0xFE +#define GL_RELATIVE_ARC_TO_NV 0xFF +#define GL_BOLD_BIT_NV 0x01 +#define GL_ITALIC_BIT_NV 0x02 +#define GL_GLYPH_WIDTH_BIT_NV 0x01 +#define GL_GLYPH_HEIGHT_BIT_NV 0x02 +#define GL_GLYPH_HORIZONTAL_BEARING_X_BIT_NV 0x04 +#define GL_GLYPH_HORIZONTAL_BEARING_Y_BIT_NV 0x08 +#define GL_GLYPH_HORIZONTAL_BEARING_ADVANCE_BIT_NV 0x10 +#define GL_GLYPH_VERTICAL_BEARING_X_BIT_NV 0x20 +#define GL_GLYPH_VERTICAL_BEARING_Y_BIT_NV 0x40 +#define GL_GLYPH_VERTICAL_BEARING_ADVANCE_BIT_NV 0x80 +#define GL_GLYPH_HAS_KERNING_BIT_NV 0x100 +#define GL_FONT_X_MIN_BOUNDS_BIT_NV 0x00010000 +#define GL_FONT_Y_MIN_BOUNDS_BIT_NV 0x00020000 +#define GL_FONT_X_MAX_BOUNDS_BIT_NV 0x00040000 +#define GL_FONT_Y_MAX_BOUNDS_BIT_NV 0x00080000 +#define GL_FONT_UNITS_PER_EM_BIT_NV 0x00100000 +#define GL_FONT_ASCENDER_BIT_NV 0x00200000 +#define GL_FONT_DESCENDER_BIT_NV 0x00400000 +#define GL_FONT_HEIGHT_BIT_NV 0x00800000 +#define GL_FONT_MAX_ADVANCE_WIDTH_BIT_NV 0x01000000 +#define GL_FONT_MAX_ADVANCE_HEIGHT_BIT_NV 0x02000000 +#define GL_FONT_UNDERLINE_POSITION_BIT_NV 0x04000000 +#define GL_FONT_UNDERLINE_THICKNESS_BIT_NV 0x08000000 +#define GL_FONT_HAS_KERNING_BIT_NV 0x10000000 +#define GL_ROUNDED_RECT_NV 0xE8 +#define GL_RELATIVE_ROUNDED_RECT_NV 0xE9 +#define GL_ROUNDED_RECT2_NV 0xEA +#define GL_RELATIVE_ROUNDED_RECT2_NV 0xEB +#define GL_ROUNDED_RECT4_NV 0xEC +#define GL_RELATIVE_ROUNDED_RECT4_NV 0xED +#define GL_ROUNDED_RECT8_NV 0xEE +#define GL_RELATIVE_ROUNDED_RECT8_NV 0xEF +#define GL_RELATIVE_RECT_NV 0xF7 +#define GL_FONT_GLYPHS_AVAILABLE_NV 0x9368 +#define GL_FONT_TARGET_UNAVAILABLE_NV 0x9369 +#define GL_FONT_UNAVAILABLE_NV 0x936A +#define GL_FONT_UNINTELLIGIBLE_NV 0x936B +#define GL_CONIC_CURVE_TO_NV 0x1A +#define GL_RELATIVE_CONIC_CURVE_TO_NV 0x1B +#define GL_FONT_NUM_GLYPH_INDICES_BIT_NV 0x20000000 +#define GL_STANDARD_FONT_FORMAT_NV 0x936C +#define GL_2_BYTES_NV 0x1407 +#define GL_3_BYTES_NV 0x1408 +#define GL_4_BYTES_NV 0x1409 +#define GL_EYE_LINEAR_NV 0x2400 +#define GL_OBJECT_LINEAR_NV 0x2401 +#define GL_CONSTANT_NV 0x8576 +#define GL_PATH_FOG_GEN_MODE_NV 0x90AC +#define GL_PRIMARY_COLOR_NV 0x852C +#define GL_SECONDARY_COLOR_NV 0x852D +#define GL_PATH_GEN_COLOR_FORMAT_NV 0x90B2 +#define GL_PATH_PROJECTION_NV 0x1701 +#define GL_PATH_MODELVIEW_NV 0x1700 +#define GL_PATH_MODELVIEW_STACK_DEPTH_NV 0x0BA3 +#define GL_PATH_MODELVIEW_MATRIX_NV 0x0BA6 +#define GL_PATH_MAX_MODELVIEW_STACK_DEPTH_NV 0x0D36 +#define GL_PATH_TRANSPOSE_MODELVIEW_MATRIX_NV 0x84E3 +#define GL_PATH_PROJECTION_STACK_DEPTH_NV 0x0BA4 +#define GL_PATH_PROJECTION_MATRIX_NV 0x0BA7 +#define GL_PATH_MAX_PROJECTION_STACK_DEPTH_NV 0x0D38 +#define GL_PATH_TRANSPOSE_PROJECTION_MATRIX_NV 0x84E4 +#define GL_FRAGMENT_INPUT_NV 0x936D +typedef GLuint (APIENTRYP PFNGLGENPATHSNVPROC) (GLsizei range); +typedef void (APIENTRYP PFNGLDELETEPATHSNVPROC) (GLuint path, GLsizei range); +typedef GLboolean (APIENTRYP PFNGLISPATHNVPROC) (GLuint path); +typedef void (APIENTRYP PFNGLPATHCOMMANDSNVPROC) (GLuint path, GLsizei numCommands, const GLubyte *commands, GLsizei numCoords, GLenum coordType, const void *coords); +typedef void (APIENTRYP PFNGLPATHCOORDSNVPROC) (GLuint path, GLsizei numCoords, GLenum coordType, const void *coords); +typedef void (APIENTRYP PFNGLPATHSUBCOMMANDSNVPROC) (GLuint path, GLsizei commandStart, GLsizei commandsToDelete, GLsizei numCommands, const GLubyte *commands, GLsizei numCoords, GLenum coordType, const void *coords); +typedef void (APIENTRYP PFNGLPATHSUBCOORDSNVPROC) (GLuint path, GLsizei coordStart, GLsizei numCoords, GLenum coordType, const void *coords); +typedef void (APIENTRYP PFNGLPATHSTRINGNVPROC) (GLuint path, GLenum format, GLsizei length, const void *pathString); +typedef void (APIENTRYP PFNGLPATHGLYPHSNVPROC) (GLuint firstPathName, GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLsizei numGlyphs, GLenum type, const void *charcodes, GLenum handleMissingGlyphs, GLuint pathParameterTemplate, GLfloat emScale); +typedef void (APIENTRYP PFNGLPATHGLYPHRANGENVPROC) (GLuint firstPathName, GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLuint firstGlyph, GLsizei numGlyphs, GLenum handleMissingGlyphs, GLuint pathParameterTemplate, GLfloat emScale); +typedef void (APIENTRYP PFNGLWEIGHTPATHSNVPROC) (GLuint resultPath, GLsizei numPaths, const GLuint *paths, const GLfloat *weights); +typedef void (APIENTRYP PFNGLCOPYPATHNVPROC) (GLuint resultPath, GLuint srcPath); +typedef void (APIENTRYP PFNGLINTERPOLATEPATHSNVPROC) (GLuint resultPath, GLuint pathA, GLuint pathB, GLfloat weight); +typedef void (APIENTRYP PFNGLTRANSFORMPATHNVPROC) (GLuint resultPath, GLuint srcPath, GLenum transformType, const GLfloat *transformValues); +typedef void (APIENTRYP PFNGLPATHPARAMETERIVNVPROC) (GLuint path, GLenum pname, const GLint *value); +typedef void (APIENTRYP PFNGLPATHPARAMETERINVPROC) (GLuint path, GLenum pname, GLint value); +typedef void (APIENTRYP PFNGLPATHPARAMETERFVNVPROC) (GLuint path, GLenum pname, const GLfloat *value); +typedef void (APIENTRYP PFNGLPATHPARAMETERFNVPROC) (GLuint path, GLenum pname, GLfloat value); +typedef void (APIENTRYP PFNGLPATHDASHARRAYNVPROC) (GLuint path, GLsizei dashCount, const GLfloat *dashArray); +typedef void (APIENTRYP PFNGLPATHSTENCILFUNCNVPROC) (GLenum func, GLint ref, GLuint mask); +typedef void (APIENTRYP PFNGLPATHSTENCILDEPTHOFFSETNVPROC) (GLfloat factor, GLfloat units); +typedef void (APIENTRYP PFNGLSTENCILFILLPATHNVPROC) (GLuint path, GLenum fillMode, GLuint mask); +typedef void (APIENTRYP PFNGLSTENCILSTROKEPATHNVPROC) (GLuint path, GLint reference, GLuint mask); +typedef void (APIENTRYP PFNGLSTENCILFILLPATHINSTANCEDNVPROC) (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum fillMode, GLuint mask, GLenum transformType, const GLfloat *transformValues); +typedef void (APIENTRYP PFNGLSTENCILSTROKEPATHINSTANCEDNVPROC) (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLint reference, GLuint mask, GLenum transformType, const GLfloat *transformValues); +typedef void (APIENTRYP PFNGLPATHCOVERDEPTHFUNCNVPROC) (GLenum func); +typedef void (APIENTRYP PFNGLCOVERFILLPATHNVPROC) (GLuint path, GLenum coverMode); +typedef void (APIENTRYP PFNGLCOVERSTROKEPATHNVPROC) (GLuint path, GLenum coverMode); +typedef void (APIENTRYP PFNGLCOVERFILLPATHINSTANCEDNVPROC) (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum coverMode, GLenum transformType, const GLfloat *transformValues); +typedef void (APIENTRYP PFNGLCOVERSTROKEPATHINSTANCEDNVPROC) (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum coverMode, GLenum transformType, const GLfloat *transformValues); +typedef void (APIENTRYP PFNGLGETPATHPARAMETERIVNVPROC) (GLuint path, GLenum pname, GLint *value); +typedef void (APIENTRYP PFNGLGETPATHPARAMETERFVNVPROC) (GLuint path, GLenum pname, GLfloat *value); +typedef void (APIENTRYP PFNGLGETPATHCOMMANDSNVPROC) (GLuint path, GLubyte *commands); +typedef void (APIENTRYP PFNGLGETPATHCOORDSNVPROC) (GLuint path, GLfloat *coords); +typedef void (APIENTRYP PFNGLGETPATHDASHARRAYNVPROC) (GLuint path, GLfloat *dashArray); +typedef void (APIENTRYP PFNGLGETPATHMETRICSNVPROC) (GLbitfield metricQueryMask, GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLsizei stride, GLfloat *metrics); +typedef void (APIENTRYP PFNGLGETPATHMETRICRANGENVPROC) (GLbitfield metricQueryMask, GLuint firstPathName, GLsizei numPaths, GLsizei stride, GLfloat *metrics); +typedef void (APIENTRYP PFNGLGETPATHSPACINGNVPROC) (GLenum pathListMode, GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLfloat advanceScale, GLfloat kerningScale, GLenum transformType, GLfloat *returnedSpacing); +typedef GLboolean (APIENTRYP PFNGLISPOINTINFILLPATHNVPROC) (GLuint path, GLuint mask, GLfloat x, GLfloat y); +typedef GLboolean (APIENTRYP PFNGLISPOINTINSTROKEPATHNVPROC) (GLuint path, GLfloat x, GLfloat y); +typedef GLfloat (APIENTRYP PFNGLGETPATHLENGTHNVPROC) (GLuint path, GLsizei startSegment, GLsizei numSegments); +typedef GLboolean (APIENTRYP PFNGLPOINTALONGPATHNVPROC) (GLuint path, GLsizei startSegment, GLsizei numSegments, GLfloat distance, GLfloat *x, GLfloat *y, GLfloat *tangentX, GLfloat *tangentY); +typedef void (APIENTRYP PFNGLMATRIXLOAD3X2FNVPROC) (GLenum matrixMode, const GLfloat *m); +typedef void (APIENTRYP PFNGLMATRIXLOAD3X3FNVPROC) (GLenum matrixMode, const GLfloat *m); +typedef void (APIENTRYP PFNGLMATRIXLOADTRANSPOSE3X3FNVPROC) (GLenum matrixMode, const GLfloat *m); +typedef void (APIENTRYP PFNGLMATRIXMULT3X2FNVPROC) (GLenum matrixMode, const GLfloat *m); +typedef void (APIENTRYP PFNGLMATRIXMULT3X3FNVPROC) (GLenum matrixMode, const GLfloat *m); +typedef void (APIENTRYP PFNGLMATRIXMULTTRANSPOSE3X3FNVPROC) (GLenum matrixMode, const GLfloat *m); +typedef void (APIENTRYP PFNGLSTENCILTHENCOVERFILLPATHNVPROC) (GLuint path, GLenum fillMode, GLuint mask, GLenum coverMode); +typedef void (APIENTRYP PFNGLSTENCILTHENCOVERSTROKEPATHNVPROC) (GLuint path, GLint reference, GLuint mask, GLenum coverMode); +typedef void (APIENTRYP PFNGLSTENCILTHENCOVERFILLPATHINSTANCEDNVPROC) (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum fillMode, GLuint mask, GLenum coverMode, GLenum transformType, const GLfloat *transformValues); +typedef void (APIENTRYP PFNGLSTENCILTHENCOVERSTROKEPATHINSTANCEDNVPROC) (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLint reference, GLuint mask, GLenum coverMode, GLenum transformType, const GLfloat *transformValues); +typedef GLenum (APIENTRYP PFNGLPATHGLYPHINDEXRANGENVPROC) (GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLuint pathParameterTemplate, GLfloat emScale, GLuint *baseAndCount); +typedef GLenum (APIENTRYP PFNGLPATHGLYPHINDEXARRAYNVPROC) (GLuint firstPathName, GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLuint firstGlyphIndex, GLsizei numGlyphs, GLuint pathParameterTemplate, GLfloat emScale); +typedef GLenum (APIENTRYP PFNGLPATHMEMORYGLYPHINDEXARRAYNVPROC) (GLuint firstPathName, GLenum fontTarget, GLsizeiptr fontSize, const void *fontData, GLsizei faceIndex, GLuint firstGlyphIndex, GLsizei numGlyphs, GLuint pathParameterTemplate, GLfloat emScale); +typedef void (APIENTRYP PFNGLPROGRAMPATHFRAGMENTINPUTGENNVPROC) (GLuint program, GLint location, GLenum genMode, GLint components, const GLfloat *coeffs); +typedef void (APIENTRYP PFNGLGETPROGRAMRESOURCEFVNVPROC) (GLuint program, GLenum programInterface, GLuint index, GLsizei propCount, const GLenum *props, GLsizei count, GLsizei *length, GLfloat *params); +typedef void (APIENTRYP PFNGLPATHCOLORGENNVPROC) (GLenum color, GLenum genMode, GLenum colorFormat, const GLfloat *coeffs); +typedef void (APIENTRYP PFNGLPATHTEXGENNVPROC) (GLenum texCoordSet, GLenum genMode, GLint components, const GLfloat *coeffs); +typedef void (APIENTRYP PFNGLPATHFOGGENNVPROC) (GLenum genMode); +typedef void (APIENTRYP PFNGLGETPATHCOLORGENIVNVPROC) (GLenum color, GLenum pname, GLint *value); +typedef void (APIENTRYP PFNGLGETPATHCOLORGENFVNVPROC) (GLenum color, GLenum pname, GLfloat *value); +typedef void (APIENTRYP PFNGLGETPATHTEXGENIVNVPROC) (GLenum texCoordSet, GLenum pname, GLint *value); +typedef void (APIENTRYP PFNGLGETPATHTEXGENFVNVPROC) (GLenum texCoordSet, GLenum pname, GLfloat *value); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI GLuint APIENTRY glGenPathsNV (GLsizei range); +GLAPI void APIENTRY glDeletePathsNV (GLuint path, GLsizei range); +GLAPI GLboolean APIENTRY glIsPathNV (GLuint path); +GLAPI void APIENTRY glPathCommandsNV (GLuint path, GLsizei numCommands, const GLubyte *commands, GLsizei numCoords, GLenum coordType, const void *coords); +GLAPI void APIENTRY glPathCoordsNV (GLuint path, GLsizei numCoords, GLenum coordType, const void *coords); +GLAPI void APIENTRY glPathSubCommandsNV (GLuint path, GLsizei commandStart, GLsizei commandsToDelete, GLsizei numCommands, const GLubyte *commands, GLsizei numCoords, GLenum coordType, const void *coords); +GLAPI void APIENTRY glPathSubCoordsNV (GLuint path, GLsizei coordStart, GLsizei numCoords, GLenum coordType, const void *coords); +GLAPI void APIENTRY glPathStringNV (GLuint path, GLenum format, GLsizei length, const void *pathString); +GLAPI void APIENTRY glPathGlyphsNV (GLuint firstPathName, GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLsizei numGlyphs, GLenum type, const void *charcodes, GLenum handleMissingGlyphs, GLuint pathParameterTemplate, GLfloat emScale); +GLAPI void APIENTRY glPathGlyphRangeNV (GLuint firstPathName, GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLuint firstGlyph, GLsizei numGlyphs, GLenum handleMissingGlyphs, GLuint pathParameterTemplate, GLfloat emScale); +GLAPI void APIENTRY glWeightPathsNV (GLuint resultPath, GLsizei numPaths, const GLuint *paths, const GLfloat *weights); +GLAPI void APIENTRY glCopyPathNV (GLuint resultPath, GLuint srcPath); +GLAPI void APIENTRY glInterpolatePathsNV (GLuint resultPath, GLuint pathA, GLuint pathB, GLfloat weight); +GLAPI void APIENTRY glTransformPathNV (GLuint resultPath, GLuint srcPath, GLenum transformType, const GLfloat *transformValues); +GLAPI void APIENTRY glPathParameterivNV (GLuint path, GLenum pname, const GLint *value); +GLAPI void APIENTRY glPathParameteriNV (GLuint path, GLenum pname, GLint value); +GLAPI void APIENTRY glPathParameterfvNV (GLuint path, GLenum pname, const GLfloat *value); +GLAPI void APIENTRY glPathParameterfNV (GLuint path, GLenum pname, GLfloat value); +GLAPI void APIENTRY glPathDashArrayNV (GLuint path, GLsizei dashCount, const GLfloat *dashArray); +GLAPI void APIENTRY glPathStencilFuncNV (GLenum func, GLint ref, GLuint mask); +GLAPI void APIENTRY glPathStencilDepthOffsetNV (GLfloat factor, GLfloat units); +GLAPI void APIENTRY glStencilFillPathNV (GLuint path, GLenum fillMode, GLuint mask); +GLAPI void APIENTRY glStencilStrokePathNV (GLuint path, GLint reference, GLuint mask); +GLAPI void APIENTRY glStencilFillPathInstancedNV (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum fillMode, GLuint mask, GLenum transformType, const GLfloat *transformValues); +GLAPI void APIENTRY glStencilStrokePathInstancedNV (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLint reference, GLuint mask, GLenum transformType, const GLfloat *transformValues); +GLAPI void APIENTRY glPathCoverDepthFuncNV (GLenum func); +GLAPI void APIENTRY glCoverFillPathNV (GLuint path, GLenum coverMode); +GLAPI void APIENTRY glCoverStrokePathNV (GLuint path, GLenum coverMode); +GLAPI void APIENTRY glCoverFillPathInstancedNV (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum coverMode, GLenum transformType, const GLfloat *transformValues); +GLAPI void APIENTRY glCoverStrokePathInstancedNV (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum coverMode, GLenum transformType, const GLfloat *transformValues); +GLAPI void APIENTRY glGetPathParameterivNV (GLuint path, GLenum pname, GLint *value); +GLAPI void APIENTRY glGetPathParameterfvNV (GLuint path, GLenum pname, GLfloat *value); +GLAPI void APIENTRY glGetPathCommandsNV (GLuint path, GLubyte *commands); +GLAPI void APIENTRY glGetPathCoordsNV (GLuint path, GLfloat *coords); +GLAPI void APIENTRY glGetPathDashArrayNV (GLuint path, GLfloat *dashArray); +GLAPI void APIENTRY glGetPathMetricsNV (GLbitfield metricQueryMask, GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLsizei stride, GLfloat *metrics); +GLAPI void APIENTRY glGetPathMetricRangeNV (GLbitfield metricQueryMask, GLuint firstPathName, GLsizei numPaths, GLsizei stride, GLfloat *metrics); +GLAPI void APIENTRY glGetPathSpacingNV (GLenum pathListMode, GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLfloat advanceScale, GLfloat kerningScale, GLenum transformType, GLfloat *returnedSpacing); +GLAPI GLboolean APIENTRY glIsPointInFillPathNV (GLuint path, GLuint mask, GLfloat x, GLfloat y); +GLAPI GLboolean APIENTRY glIsPointInStrokePathNV (GLuint path, GLfloat x, GLfloat y); +GLAPI GLfloat APIENTRY glGetPathLengthNV (GLuint path, GLsizei startSegment, GLsizei numSegments); +GLAPI GLboolean APIENTRY glPointAlongPathNV (GLuint path, GLsizei startSegment, GLsizei numSegments, GLfloat distance, GLfloat *x, GLfloat *y, GLfloat *tangentX, GLfloat *tangentY); +GLAPI void APIENTRY glMatrixLoad3x2fNV (GLenum matrixMode, const GLfloat *m); +GLAPI void APIENTRY glMatrixLoad3x3fNV (GLenum matrixMode, const GLfloat *m); +GLAPI void APIENTRY glMatrixLoadTranspose3x3fNV (GLenum matrixMode, const GLfloat *m); +GLAPI void APIENTRY glMatrixMult3x2fNV (GLenum matrixMode, const GLfloat *m); +GLAPI void APIENTRY glMatrixMult3x3fNV (GLenum matrixMode, const GLfloat *m); +GLAPI void APIENTRY glMatrixMultTranspose3x3fNV (GLenum matrixMode, const GLfloat *m); +GLAPI void APIENTRY glStencilThenCoverFillPathNV (GLuint path, GLenum fillMode, GLuint mask, GLenum coverMode); +GLAPI void APIENTRY glStencilThenCoverStrokePathNV (GLuint path, GLint reference, GLuint mask, GLenum coverMode); +GLAPI void APIENTRY glStencilThenCoverFillPathInstancedNV (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum fillMode, GLuint mask, GLenum coverMode, GLenum transformType, const GLfloat *transformValues); +GLAPI void APIENTRY glStencilThenCoverStrokePathInstancedNV (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLint reference, GLuint mask, GLenum coverMode, GLenum transformType, const GLfloat *transformValues); +GLAPI GLenum APIENTRY glPathGlyphIndexRangeNV (GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLuint pathParameterTemplate, GLfloat emScale, GLuint *baseAndCount); +GLAPI GLenum APIENTRY glPathGlyphIndexArrayNV (GLuint firstPathName, GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLuint firstGlyphIndex, GLsizei numGlyphs, GLuint pathParameterTemplate, GLfloat emScale); +GLAPI GLenum APIENTRY glPathMemoryGlyphIndexArrayNV (GLuint firstPathName, GLenum fontTarget, GLsizeiptr fontSize, const void *fontData, GLsizei faceIndex, GLuint firstGlyphIndex, GLsizei numGlyphs, GLuint pathParameterTemplate, GLfloat emScale); +GLAPI void APIENTRY glProgramPathFragmentInputGenNV (GLuint program, GLint location, GLenum genMode, GLint components, const GLfloat *coeffs); +GLAPI void APIENTRY glGetProgramResourcefvNV (GLuint program, GLenum programInterface, GLuint index, GLsizei propCount, const GLenum *props, GLsizei count, GLsizei *length, GLfloat *params); +GLAPI void APIENTRY glPathColorGenNV (GLenum color, GLenum genMode, GLenum colorFormat, const GLfloat *coeffs); +GLAPI void APIENTRY glPathTexGenNV (GLenum texCoordSet, GLenum genMode, GLint components, const GLfloat *coeffs); +GLAPI void APIENTRY glPathFogGenNV (GLenum genMode); +GLAPI void APIENTRY glGetPathColorGenivNV (GLenum color, GLenum pname, GLint *value); +GLAPI void APIENTRY glGetPathColorGenfvNV (GLenum color, GLenum pname, GLfloat *value); +GLAPI void APIENTRY glGetPathTexGenivNV (GLenum texCoordSet, GLenum pname, GLint *value); +GLAPI void APIENTRY glGetPathTexGenfvNV (GLenum texCoordSet, GLenum pname, GLfloat *value); +#endif +#endif /* GL_NV_path_rendering */ + +#ifndef GL_NV_path_rendering_shared_edge +#define GL_NV_path_rendering_shared_edge 1 +#define GL_SHARED_EDGE_NV 0xC0 +#endif /* GL_NV_path_rendering_shared_edge */ + +#ifndef GL_NV_pixel_data_range +#define GL_NV_pixel_data_range 1 +#define GL_WRITE_PIXEL_DATA_RANGE_NV 0x8878 +#define GL_READ_PIXEL_DATA_RANGE_NV 0x8879 +#define GL_WRITE_PIXEL_DATA_RANGE_LENGTH_NV 0x887A +#define GL_READ_PIXEL_DATA_RANGE_LENGTH_NV 0x887B +#define GL_WRITE_PIXEL_DATA_RANGE_POINTER_NV 0x887C +#define GL_READ_PIXEL_DATA_RANGE_POINTER_NV 0x887D +typedef void (APIENTRYP PFNGLPIXELDATARANGENVPROC) (GLenum target, GLsizei length, const void *pointer); +typedef void (APIENTRYP PFNGLFLUSHPIXELDATARANGENVPROC) (GLenum target); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glPixelDataRangeNV (GLenum target, GLsizei length, const void *pointer); +GLAPI void APIENTRY glFlushPixelDataRangeNV (GLenum target); +#endif +#endif /* GL_NV_pixel_data_range */ + +#ifndef GL_NV_point_sprite +#define GL_NV_point_sprite 1 +#define GL_POINT_SPRITE_NV 0x8861 +#define GL_COORD_REPLACE_NV 0x8862 +#define GL_POINT_SPRITE_R_MODE_NV 0x8863 +typedef void (APIENTRYP PFNGLPOINTPARAMETERINVPROC) (GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLPOINTPARAMETERIVNVPROC) (GLenum pname, const GLint *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glPointParameteriNV (GLenum pname, GLint param); +GLAPI void APIENTRY glPointParameterivNV (GLenum pname, const GLint *params); +#endif +#endif /* GL_NV_point_sprite */ + +#ifndef GL_NV_present_video +#define GL_NV_present_video 1 +#define GL_FRAME_NV 0x8E26 +#define GL_FIELDS_NV 0x8E27 +#define GL_CURRENT_TIME_NV 0x8E28 +#define GL_NUM_FILL_STREAMS_NV 0x8E29 +#define GL_PRESENT_TIME_NV 0x8E2A +#define GL_PRESENT_DURATION_NV 0x8E2B +typedef void (APIENTRYP PFNGLPRESENTFRAMEKEYEDNVPROC) (GLuint video_slot, GLuint64EXT minPresentTime, GLuint beginPresentTimeId, GLuint presentDurationId, GLenum type, GLenum target0, GLuint fill0, GLuint key0, GLenum target1, GLuint fill1, GLuint key1); +typedef void (APIENTRYP PFNGLPRESENTFRAMEDUALFILLNVPROC) (GLuint video_slot, GLuint64EXT minPresentTime, GLuint beginPresentTimeId, GLuint presentDurationId, GLenum type, GLenum target0, GLuint fill0, GLenum target1, GLuint fill1, GLenum target2, GLuint fill2, GLenum target3, GLuint fill3); +typedef void (APIENTRYP PFNGLGETVIDEOIVNVPROC) (GLuint video_slot, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETVIDEOUIVNVPROC) (GLuint video_slot, GLenum pname, GLuint *params); +typedef void (APIENTRYP PFNGLGETVIDEOI64VNVPROC) (GLuint video_slot, GLenum pname, GLint64EXT *params); +typedef void (APIENTRYP PFNGLGETVIDEOUI64VNVPROC) (GLuint video_slot, GLenum pname, GLuint64EXT *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glPresentFrameKeyedNV (GLuint video_slot, GLuint64EXT minPresentTime, GLuint beginPresentTimeId, GLuint presentDurationId, GLenum type, GLenum target0, GLuint fill0, GLuint key0, GLenum target1, GLuint fill1, GLuint key1); +GLAPI void APIENTRY glPresentFrameDualFillNV (GLuint video_slot, GLuint64EXT minPresentTime, GLuint beginPresentTimeId, GLuint presentDurationId, GLenum type, GLenum target0, GLuint fill0, GLenum target1, GLuint fill1, GLenum target2, GLuint fill2, GLenum target3, GLuint fill3); +GLAPI void APIENTRY glGetVideoivNV (GLuint video_slot, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetVideouivNV (GLuint video_slot, GLenum pname, GLuint *params); +GLAPI void APIENTRY glGetVideoi64vNV (GLuint video_slot, GLenum pname, GLint64EXT *params); +GLAPI void APIENTRY glGetVideoui64vNV (GLuint video_slot, GLenum pname, GLuint64EXT *params); +#endif +#endif /* GL_NV_present_video */ + +#ifndef GL_NV_primitive_restart +#define GL_NV_primitive_restart 1 +#define GL_PRIMITIVE_RESTART_NV 0x8558 +#define GL_PRIMITIVE_RESTART_INDEX_NV 0x8559 +typedef void (APIENTRYP PFNGLPRIMITIVERESTARTNVPROC) (void); +typedef void (APIENTRYP PFNGLPRIMITIVERESTARTINDEXNVPROC) (GLuint index); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glPrimitiveRestartNV (void); +GLAPI void APIENTRY glPrimitiveRestartIndexNV (GLuint index); +#endif +#endif /* GL_NV_primitive_restart */ + +#ifndef GL_NV_primitive_shading_rate +#define GL_NV_primitive_shading_rate 1 +#define GL_SHADING_RATE_IMAGE_PER_PRIMITIVE_NV 0x95B1 +#define GL_SHADING_RATE_IMAGE_PALETTE_COUNT_NV 0x95B2 +#endif /* GL_NV_primitive_shading_rate */ + +#ifndef GL_NV_query_resource +#define GL_NV_query_resource 1 +#define GL_QUERY_RESOURCE_TYPE_VIDMEM_ALLOC_NV 0x9540 +#define GL_QUERY_RESOURCE_MEMTYPE_VIDMEM_NV 0x9542 +#define GL_QUERY_RESOURCE_SYS_RESERVED_NV 0x9544 +#define GL_QUERY_RESOURCE_TEXTURE_NV 0x9545 +#define GL_QUERY_RESOURCE_RENDERBUFFER_NV 0x9546 +#define GL_QUERY_RESOURCE_BUFFEROBJECT_NV 0x9547 +typedef GLint (APIENTRYP PFNGLQUERYRESOURCENVPROC) (GLenum queryType, GLint tagId, GLuint count, GLint *buffer); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI GLint APIENTRY glQueryResourceNV (GLenum queryType, GLint tagId, GLuint count, GLint *buffer); +#endif +#endif /* GL_NV_query_resource */ + +#ifndef GL_NV_query_resource_tag +#define GL_NV_query_resource_tag 1 +typedef void (APIENTRYP PFNGLGENQUERYRESOURCETAGNVPROC) (GLsizei n, GLint *tagIds); +typedef void (APIENTRYP PFNGLDELETEQUERYRESOURCETAGNVPROC) (GLsizei n, const GLint *tagIds); +typedef void (APIENTRYP PFNGLQUERYRESOURCETAGNVPROC) (GLint tagId, const GLchar *tagString); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glGenQueryResourceTagNV (GLsizei n, GLint *tagIds); +GLAPI void APIENTRY glDeleteQueryResourceTagNV (GLsizei n, const GLint *tagIds); +GLAPI void APIENTRY glQueryResourceTagNV (GLint tagId, const GLchar *tagString); +#endif +#endif /* GL_NV_query_resource_tag */ + +#ifndef GL_NV_register_combiners +#define GL_NV_register_combiners 1 +#define GL_REGISTER_COMBINERS_NV 0x8522 +#define GL_VARIABLE_A_NV 0x8523 +#define GL_VARIABLE_B_NV 0x8524 +#define GL_VARIABLE_C_NV 0x8525 +#define GL_VARIABLE_D_NV 0x8526 +#define GL_VARIABLE_E_NV 0x8527 +#define GL_VARIABLE_F_NV 0x8528 +#define GL_VARIABLE_G_NV 0x8529 +#define GL_CONSTANT_COLOR0_NV 0x852A +#define GL_CONSTANT_COLOR1_NV 0x852B +#define GL_SPARE0_NV 0x852E +#define GL_SPARE1_NV 0x852F +#define GL_DISCARD_NV 0x8530 +#define GL_E_TIMES_F_NV 0x8531 +#define GL_SPARE0_PLUS_SECONDARY_COLOR_NV 0x8532 +#define GL_UNSIGNED_IDENTITY_NV 0x8536 +#define GL_UNSIGNED_INVERT_NV 0x8537 +#define GL_EXPAND_NORMAL_NV 0x8538 +#define GL_EXPAND_NEGATE_NV 0x8539 +#define GL_HALF_BIAS_NORMAL_NV 0x853A +#define GL_HALF_BIAS_NEGATE_NV 0x853B +#define GL_SIGNED_IDENTITY_NV 0x853C +#define GL_SIGNED_NEGATE_NV 0x853D +#define GL_SCALE_BY_TWO_NV 0x853E +#define GL_SCALE_BY_FOUR_NV 0x853F +#define GL_SCALE_BY_ONE_HALF_NV 0x8540 +#define GL_BIAS_BY_NEGATIVE_ONE_HALF_NV 0x8541 +#define GL_COMBINER_INPUT_NV 0x8542 +#define GL_COMBINER_MAPPING_NV 0x8543 +#define GL_COMBINER_COMPONENT_USAGE_NV 0x8544 +#define GL_COMBINER_AB_DOT_PRODUCT_NV 0x8545 +#define GL_COMBINER_CD_DOT_PRODUCT_NV 0x8546 +#define GL_COMBINER_MUX_SUM_NV 0x8547 +#define GL_COMBINER_SCALE_NV 0x8548 +#define GL_COMBINER_BIAS_NV 0x8549 +#define GL_COMBINER_AB_OUTPUT_NV 0x854A +#define GL_COMBINER_CD_OUTPUT_NV 0x854B +#define GL_COMBINER_SUM_OUTPUT_NV 0x854C +#define GL_MAX_GENERAL_COMBINERS_NV 0x854D +#define GL_NUM_GENERAL_COMBINERS_NV 0x854E +#define GL_COLOR_SUM_CLAMP_NV 0x854F +#define GL_COMBINER0_NV 0x8550 +#define GL_COMBINER1_NV 0x8551 +#define GL_COMBINER2_NV 0x8552 +#define GL_COMBINER3_NV 0x8553 +#define GL_COMBINER4_NV 0x8554 +#define GL_COMBINER5_NV 0x8555 +#define GL_COMBINER6_NV 0x8556 +#define GL_COMBINER7_NV 0x8557 +typedef void (APIENTRYP PFNGLCOMBINERPARAMETERFVNVPROC) (GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLCOMBINERPARAMETERFNVPROC) (GLenum pname, GLfloat param); +typedef void (APIENTRYP PFNGLCOMBINERPARAMETERIVNVPROC) (GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLCOMBINERPARAMETERINVPROC) (GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLCOMBINERINPUTNVPROC) (GLenum stage, GLenum portion, GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage); +typedef void (APIENTRYP PFNGLCOMBINEROUTPUTNVPROC) (GLenum stage, GLenum portion, GLenum abOutput, GLenum cdOutput, GLenum sumOutput, GLenum scale, GLenum bias, GLboolean abDotProduct, GLboolean cdDotProduct, GLboolean muxSum); +typedef void (APIENTRYP PFNGLFINALCOMBINERINPUTNVPROC) (GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage); +typedef void (APIENTRYP PFNGLGETCOMBINERINPUTPARAMETERFVNVPROC) (GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETCOMBINERINPUTPARAMETERIVNVPROC) (GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETCOMBINEROUTPUTPARAMETERFVNVPROC) (GLenum stage, GLenum portion, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETCOMBINEROUTPUTPARAMETERIVNVPROC) (GLenum stage, GLenum portion, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETFINALCOMBINERINPUTPARAMETERFVNVPROC) (GLenum variable, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETFINALCOMBINERINPUTPARAMETERIVNVPROC) (GLenum variable, GLenum pname, GLint *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glCombinerParameterfvNV (GLenum pname, const GLfloat *params); +GLAPI void APIENTRY glCombinerParameterfNV (GLenum pname, GLfloat param); +GLAPI void APIENTRY glCombinerParameterivNV (GLenum pname, const GLint *params); +GLAPI void APIENTRY glCombinerParameteriNV (GLenum pname, GLint param); +GLAPI void APIENTRY glCombinerInputNV (GLenum stage, GLenum portion, GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage); +GLAPI void APIENTRY glCombinerOutputNV (GLenum stage, GLenum portion, GLenum abOutput, GLenum cdOutput, GLenum sumOutput, GLenum scale, GLenum bias, GLboolean abDotProduct, GLboolean cdDotProduct, GLboolean muxSum); +GLAPI void APIENTRY glFinalCombinerInputNV (GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage); +GLAPI void APIENTRY glGetCombinerInputParameterfvNV (GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetCombinerInputParameterivNV (GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetCombinerOutputParameterfvNV (GLenum stage, GLenum portion, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetCombinerOutputParameterivNV (GLenum stage, GLenum portion, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetFinalCombinerInputParameterfvNV (GLenum variable, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetFinalCombinerInputParameterivNV (GLenum variable, GLenum pname, GLint *params); +#endif +#endif /* GL_NV_register_combiners */ + +#ifndef GL_NV_register_combiners2 +#define GL_NV_register_combiners2 1 +#define GL_PER_STAGE_CONSTANTS_NV 0x8535 +typedef void (APIENTRYP PFNGLCOMBINERSTAGEPARAMETERFVNVPROC) (GLenum stage, GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLGETCOMBINERSTAGEPARAMETERFVNVPROC) (GLenum stage, GLenum pname, GLfloat *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glCombinerStageParameterfvNV (GLenum stage, GLenum pname, const GLfloat *params); +GLAPI void APIENTRY glGetCombinerStageParameterfvNV (GLenum stage, GLenum pname, GLfloat *params); +#endif +#endif /* GL_NV_register_combiners2 */ + +#ifndef GL_NV_representative_fragment_test +#define GL_NV_representative_fragment_test 1 +#define GL_REPRESENTATIVE_FRAGMENT_TEST_NV 0x937F +#endif /* GL_NV_representative_fragment_test */ + +#ifndef GL_NV_robustness_video_memory_purge +#define GL_NV_robustness_video_memory_purge 1 +#define GL_PURGED_CONTEXT_RESET_NV 0x92BB +#endif /* GL_NV_robustness_video_memory_purge */ + +#ifndef GL_NV_sample_locations +#define GL_NV_sample_locations 1 +#define GL_SAMPLE_LOCATION_SUBPIXEL_BITS_NV 0x933D +#define GL_SAMPLE_LOCATION_PIXEL_GRID_WIDTH_NV 0x933E +#define GL_SAMPLE_LOCATION_PIXEL_GRID_HEIGHT_NV 0x933F +#define GL_PROGRAMMABLE_SAMPLE_LOCATION_TABLE_SIZE_NV 0x9340 +#define GL_SAMPLE_LOCATION_NV 0x8E50 +#define GL_PROGRAMMABLE_SAMPLE_LOCATION_NV 0x9341 +#define GL_FRAMEBUFFER_PROGRAMMABLE_SAMPLE_LOCATIONS_NV 0x9342 +#define GL_FRAMEBUFFER_SAMPLE_LOCATION_PIXEL_GRID_NV 0x9343 +typedef void (APIENTRYP PFNGLFRAMEBUFFERSAMPLELOCATIONSFVNVPROC) (GLenum target, GLuint start, GLsizei count, const GLfloat *v); +typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERSAMPLELOCATIONSFVNVPROC) (GLuint framebuffer, GLuint start, GLsizei count, const GLfloat *v); +typedef void (APIENTRYP PFNGLRESOLVEDEPTHVALUESNVPROC) (void); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glFramebufferSampleLocationsfvNV (GLenum target, GLuint start, GLsizei count, const GLfloat *v); +GLAPI void APIENTRY glNamedFramebufferSampleLocationsfvNV (GLuint framebuffer, GLuint start, GLsizei count, const GLfloat *v); +GLAPI void APIENTRY glResolveDepthValuesNV (void); +#endif +#endif /* GL_NV_sample_locations */ + +#ifndef GL_NV_sample_mask_override_coverage +#define GL_NV_sample_mask_override_coverage 1 +#endif /* GL_NV_sample_mask_override_coverage */ + +#ifndef GL_NV_scissor_exclusive +#define GL_NV_scissor_exclusive 1 +#define GL_SCISSOR_TEST_EXCLUSIVE_NV 0x9555 +#define GL_SCISSOR_BOX_EXCLUSIVE_NV 0x9556 +typedef void (APIENTRYP PFNGLSCISSOREXCLUSIVENVPROC) (GLint x, GLint y, GLsizei width, GLsizei height); +typedef void (APIENTRYP PFNGLSCISSOREXCLUSIVEARRAYVNVPROC) (GLuint first, GLsizei count, const GLint *v); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glScissorExclusiveNV (GLint x, GLint y, GLsizei width, GLsizei height); +GLAPI void APIENTRY glScissorExclusiveArrayvNV (GLuint first, GLsizei count, const GLint *v); +#endif +#endif /* GL_NV_scissor_exclusive */ + +#ifndef GL_NV_shader_atomic_counters +#define GL_NV_shader_atomic_counters 1 +#endif /* GL_NV_shader_atomic_counters */ + +#ifndef GL_NV_shader_atomic_float +#define GL_NV_shader_atomic_float 1 +#endif /* GL_NV_shader_atomic_float */ + +#ifndef GL_NV_shader_atomic_float64 +#define GL_NV_shader_atomic_float64 1 +#endif /* GL_NV_shader_atomic_float64 */ + +#ifndef GL_NV_shader_atomic_fp16_vector +#define GL_NV_shader_atomic_fp16_vector 1 +#endif /* GL_NV_shader_atomic_fp16_vector */ + +#ifndef GL_NV_shader_atomic_int64 +#define GL_NV_shader_atomic_int64 1 +#endif /* GL_NV_shader_atomic_int64 */ + +#ifndef GL_NV_shader_buffer_load +#define GL_NV_shader_buffer_load 1 +#define GL_BUFFER_GPU_ADDRESS_NV 0x8F1D +#define GL_GPU_ADDRESS_NV 0x8F34 +#define GL_MAX_SHADER_BUFFER_ADDRESS_NV 0x8F35 +typedef void (APIENTRYP PFNGLMAKEBUFFERRESIDENTNVPROC) (GLenum target, GLenum access); +typedef void (APIENTRYP PFNGLMAKEBUFFERNONRESIDENTNVPROC) (GLenum target); +typedef GLboolean (APIENTRYP PFNGLISBUFFERRESIDENTNVPROC) (GLenum target); +typedef void (APIENTRYP PFNGLMAKENAMEDBUFFERRESIDENTNVPROC) (GLuint buffer, GLenum access); +typedef void (APIENTRYP PFNGLMAKENAMEDBUFFERNONRESIDENTNVPROC) (GLuint buffer); +typedef GLboolean (APIENTRYP PFNGLISNAMEDBUFFERRESIDENTNVPROC) (GLuint buffer); +typedef void (APIENTRYP PFNGLGETBUFFERPARAMETERUI64VNVPROC) (GLenum target, GLenum pname, GLuint64EXT *params); +typedef void (APIENTRYP PFNGLGETNAMEDBUFFERPARAMETERUI64VNVPROC) (GLuint buffer, GLenum pname, GLuint64EXT *params); +typedef void (APIENTRYP PFNGLGETINTEGERUI64VNVPROC) (GLenum value, GLuint64EXT *result); +typedef void (APIENTRYP PFNGLUNIFORMUI64NVPROC) (GLint location, GLuint64EXT value); +typedef void (APIENTRYP PFNGLUNIFORMUI64VNVPROC) (GLint location, GLsizei count, const GLuint64EXT *value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMUI64NVPROC) (GLuint program, GLint location, GLuint64EXT value); +typedef void (APIENTRYP PFNGLPROGRAMUNIFORMUI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glMakeBufferResidentNV (GLenum target, GLenum access); +GLAPI void APIENTRY glMakeBufferNonResidentNV (GLenum target); +GLAPI GLboolean APIENTRY glIsBufferResidentNV (GLenum target); +GLAPI void APIENTRY glMakeNamedBufferResidentNV (GLuint buffer, GLenum access); +GLAPI void APIENTRY glMakeNamedBufferNonResidentNV (GLuint buffer); +GLAPI GLboolean APIENTRY glIsNamedBufferResidentNV (GLuint buffer); +GLAPI void APIENTRY glGetBufferParameterui64vNV (GLenum target, GLenum pname, GLuint64EXT *params); +GLAPI void APIENTRY glGetNamedBufferParameterui64vNV (GLuint buffer, GLenum pname, GLuint64EXT *params); +GLAPI void APIENTRY glGetIntegerui64vNV (GLenum value, GLuint64EXT *result); +GLAPI void APIENTRY glUniformui64NV (GLint location, GLuint64EXT value); +GLAPI void APIENTRY glUniformui64vNV (GLint location, GLsizei count, const GLuint64EXT *value); +GLAPI void APIENTRY glProgramUniformui64NV (GLuint program, GLint location, GLuint64EXT value); +GLAPI void APIENTRY glProgramUniformui64vNV (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); +#endif +#endif /* GL_NV_shader_buffer_load */ + +#ifndef GL_NV_shader_buffer_store +#define GL_NV_shader_buffer_store 1 +#define GL_SHADER_GLOBAL_ACCESS_BARRIER_BIT_NV 0x00000010 +#endif /* GL_NV_shader_buffer_store */ + +#ifndef GL_NV_shader_storage_buffer_object +#define GL_NV_shader_storage_buffer_object 1 +#endif /* GL_NV_shader_storage_buffer_object */ + +#ifndef GL_NV_shader_subgroup_partitioned +#define GL_NV_shader_subgroup_partitioned 1 +#define GL_SUBGROUP_FEATURE_PARTITIONED_BIT_NV 0x00000100 +#endif /* GL_NV_shader_subgroup_partitioned */ + +#ifndef GL_NV_shader_texture_footprint +#define GL_NV_shader_texture_footprint 1 +#endif /* GL_NV_shader_texture_footprint */ + +#ifndef GL_NV_shader_thread_group +#define GL_NV_shader_thread_group 1 +#define GL_WARP_SIZE_NV 0x9339 +#define GL_WARPS_PER_SM_NV 0x933A +#define GL_SM_COUNT_NV 0x933B +#endif /* GL_NV_shader_thread_group */ + +#ifndef GL_NV_shader_thread_shuffle +#define GL_NV_shader_thread_shuffle 1 +#endif /* GL_NV_shader_thread_shuffle */ + +#ifndef GL_NV_shading_rate_image +#define GL_NV_shading_rate_image 1 +#define GL_SHADING_RATE_IMAGE_NV 0x9563 +#define GL_SHADING_RATE_NO_INVOCATIONS_NV 0x9564 +#define GL_SHADING_RATE_1_INVOCATION_PER_PIXEL_NV 0x9565 +#define GL_SHADING_RATE_1_INVOCATION_PER_1X2_PIXELS_NV 0x9566 +#define GL_SHADING_RATE_1_INVOCATION_PER_2X1_PIXELS_NV 0x9567 +#define GL_SHADING_RATE_1_INVOCATION_PER_2X2_PIXELS_NV 0x9568 +#define GL_SHADING_RATE_1_INVOCATION_PER_2X4_PIXELS_NV 0x9569 +#define GL_SHADING_RATE_1_INVOCATION_PER_4X2_PIXELS_NV 0x956A +#define GL_SHADING_RATE_1_INVOCATION_PER_4X4_PIXELS_NV 0x956B +#define GL_SHADING_RATE_2_INVOCATIONS_PER_PIXEL_NV 0x956C +#define GL_SHADING_RATE_4_INVOCATIONS_PER_PIXEL_NV 0x956D +#define GL_SHADING_RATE_8_INVOCATIONS_PER_PIXEL_NV 0x956E +#define GL_SHADING_RATE_16_INVOCATIONS_PER_PIXEL_NV 0x956F +#define GL_SHADING_RATE_IMAGE_BINDING_NV 0x955B +#define GL_SHADING_RATE_IMAGE_TEXEL_WIDTH_NV 0x955C +#define GL_SHADING_RATE_IMAGE_TEXEL_HEIGHT_NV 0x955D +#define GL_SHADING_RATE_IMAGE_PALETTE_SIZE_NV 0x955E +#define GL_MAX_COARSE_FRAGMENT_SAMPLES_NV 0x955F +#define GL_SHADING_RATE_SAMPLE_ORDER_DEFAULT_NV 0x95AE +#define GL_SHADING_RATE_SAMPLE_ORDER_PIXEL_MAJOR_NV 0x95AF +#define GL_SHADING_RATE_SAMPLE_ORDER_SAMPLE_MAJOR_NV 0x95B0 +typedef void (APIENTRYP PFNGLBINDSHADINGRATEIMAGENVPROC) (GLuint texture); +typedef void (APIENTRYP PFNGLGETSHADINGRATEIMAGEPALETTENVPROC) (GLuint viewport, GLuint entry, GLenum *rate); +typedef void (APIENTRYP PFNGLGETSHADINGRATESAMPLELOCATIONIVNVPROC) (GLenum rate, GLuint samples, GLuint index, GLint *location); +typedef void (APIENTRYP PFNGLSHADINGRATEIMAGEBARRIERNVPROC) (GLboolean synchronize); +typedef void (APIENTRYP PFNGLSHADINGRATEIMAGEPALETTENVPROC) (GLuint viewport, GLuint first, GLsizei count, const GLenum *rates); +typedef void (APIENTRYP PFNGLSHADINGRATESAMPLEORDERNVPROC) (GLenum order); +typedef void (APIENTRYP PFNGLSHADINGRATESAMPLEORDERCUSTOMNVPROC) (GLenum rate, GLuint samples, const GLint *locations); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBindShadingRateImageNV (GLuint texture); +GLAPI void APIENTRY glGetShadingRateImagePaletteNV (GLuint viewport, GLuint entry, GLenum *rate); +GLAPI void APIENTRY glGetShadingRateSampleLocationivNV (GLenum rate, GLuint samples, GLuint index, GLint *location); +GLAPI void APIENTRY glShadingRateImageBarrierNV (GLboolean synchronize); +GLAPI void APIENTRY glShadingRateImagePaletteNV (GLuint viewport, GLuint first, GLsizei count, const GLenum *rates); +GLAPI void APIENTRY glShadingRateSampleOrderNV (GLenum order); +GLAPI void APIENTRY glShadingRateSampleOrderCustomNV (GLenum rate, GLuint samples, const GLint *locations); +#endif +#endif /* GL_NV_shading_rate_image */ + +#ifndef GL_NV_stereo_view_rendering +#define GL_NV_stereo_view_rendering 1 +#endif /* GL_NV_stereo_view_rendering */ + +#ifndef GL_NV_tessellation_program5 +#define GL_NV_tessellation_program5 1 +#define GL_MAX_PROGRAM_PATCH_ATTRIBS_NV 0x86D8 +#define GL_TESS_CONTROL_PROGRAM_NV 0x891E +#define GL_TESS_EVALUATION_PROGRAM_NV 0x891F +#define GL_TESS_CONTROL_PROGRAM_PARAMETER_BUFFER_NV 0x8C74 +#define GL_TESS_EVALUATION_PROGRAM_PARAMETER_BUFFER_NV 0x8C75 +#endif /* GL_NV_tessellation_program5 */ + +#ifndef GL_NV_texgen_emboss +#define GL_NV_texgen_emboss 1 +#define GL_EMBOSS_LIGHT_NV 0x855D +#define GL_EMBOSS_CONSTANT_NV 0x855E +#define GL_EMBOSS_MAP_NV 0x855F +#endif /* GL_NV_texgen_emboss */ + +#ifndef GL_NV_texgen_reflection +#define GL_NV_texgen_reflection 1 +#define GL_NORMAL_MAP_NV 0x8511 +#define GL_REFLECTION_MAP_NV 0x8512 +#endif /* GL_NV_texgen_reflection */ + +#ifndef GL_NV_texture_barrier +#define GL_NV_texture_barrier 1 +typedef void (APIENTRYP PFNGLTEXTUREBARRIERNVPROC) (void); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glTextureBarrierNV (void); +#endif +#endif /* GL_NV_texture_barrier */ + +#ifndef GL_NV_texture_compression_vtc +#define GL_NV_texture_compression_vtc 1 +#endif /* GL_NV_texture_compression_vtc */ + +#ifndef GL_NV_texture_env_combine4 +#define GL_NV_texture_env_combine4 1 +#define GL_COMBINE4_NV 0x8503 +#define GL_SOURCE3_RGB_NV 0x8583 +#define GL_SOURCE3_ALPHA_NV 0x858B +#define GL_OPERAND3_RGB_NV 0x8593 +#define GL_OPERAND3_ALPHA_NV 0x859B +#endif /* GL_NV_texture_env_combine4 */ + +#ifndef GL_NV_texture_expand_normal +#define GL_NV_texture_expand_normal 1 +#define GL_TEXTURE_UNSIGNED_REMAP_MODE_NV 0x888F +#endif /* GL_NV_texture_expand_normal */ + +#ifndef GL_NV_texture_multisample +#define GL_NV_texture_multisample 1 +#define GL_TEXTURE_COVERAGE_SAMPLES_NV 0x9045 +#define GL_TEXTURE_COLOR_SAMPLES_NV 0x9046 +typedef void (APIENTRYP PFNGLTEXIMAGE2DMULTISAMPLECOVERAGENVPROC) (GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations); +typedef void (APIENTRYP PFNGLTEXIMAGE3DMULTISAMPLECOVERAGENVPROC) (GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations); +typedef void (APIENTRYP PFNGLTEXTUREIMAGE2DMULTISAMPLENVPROC) (GLuint texture, GLenum target, GLsizei samples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations); +typedef void (APIENTRYP PFNGLTEXTUREIMAGE3DMULTISAMPLENVPROC) (GLuint texture, GLenum target, GLsizei samples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations); +typedef void (APIENTRYP PFNGLTEXTUREIMAGE2DMULTISAMPLECOVERAGENVPROC) (GLuint texture, GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations); +typedef void (APIENTRYP PFNGLTEXTUREIMAGE3DMULTISAMPLECOVERAGENVPROC) (GLuint texture, GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glTexImage2DMultisampleCoverageNV (GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations); +GLAPI void APIENTRY glTexImage3DMultisampleCoverageNV (GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations); +GLAPI void APIENTRY glTextureImage2DMultisampleNV (GLuint texture, GLenum target, GLsizei samples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations); +GLAPI void APIENTRY glTextureImage3DMultisampleNV (GLuint texture, GLenum target, GLsizei samples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations); +GLAPI void APIENTRY glTextureImage2DMultisampleCoverageNV (GLuint texture, GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations); +GLAPI void APIENTRY glTextureImage3DMultisampleCoverageNV (GLuint texture, GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations); +#endif +#endif /* GL_NV_texture_multisample */ + +#ifndef GL_NV_texture_rectangle +#define GL_NV_texture_rectangle 1 +#define GL_TEXTURE_RECTANGLE_NV 0x84F5 +#define GL_TEXTURE_BINDING_RECTANGLE_NV 0x84F6 +#define GL_PROXY_TEXTURE_RECTANGLE_NV 0x84F7 +#define GL_MAX_RECTANGLE_TEXTURE_SIZE_NV 0x84F8 +#endif /* GL_NV_texture_rectangle */ + +#ifndef GL_NV_texture_rectangle_compressed +#define GL_NV_texture_rectangle_compressed 1 +#endif /* GL_NV_texture_rectangle_compressed */ + +#ifndef GL_NV_texture_shader +#define GL_NV_texture_shader 1 +#define GL_OFFSET_TEXTURE_RECTANGLE_NV 0x864C +#define GL_OFFSET_TEXTURE_RECTANGLE_SCALE_NV 0x864D +#define GL_DOT_PRODUCT_TEXTURE_RECTANGLE_NV 0x864E +#define GL_RGBA_UNSIGNED_DOT_PRODUCT_MAPPING_NV 0x86D9 +#define GL_UNSIGNED_INT_S8_S8_8_8_NV 0x86DA +#define GL_UNSIGNED_INT_8_8_S8_S8_REV_NV 0x86DB +#define GL_DSDT_MAG_INTENSITY_NV 0x86DC +#define GL_SHADER_CONSISTENT_NV 0x86DD +#define GL_TEXTURE_SHADER_NV 0x86DE +#define GL_SHADER_OPERATION_NV 0x86DF +#define GL_CULL_MODES_NV 0x86E0 +#define GL_OFFSET_TEXTURE_MATRIX_NV 0x86E1 +#define GL_OFFSET_TEXTURE_SCALE_NV 0x86E2 +#define GL_OFFSET_TEXTURE_BIAS_NV 0x86E3 +#define GL_OFFSET_TEXTURE_2D_MATRIX_NV 0x86E1 +#define GL_OFFSET_TEXTURE_2D_SCALE_NV 0x86E2 +#define GL_OFFSET_TEXTURE_2D_BIAS_NV 0x86E3 +#define GL_PREVIOUS_TEXTURE_INPUT_NV 0x86E4 +#define GL_CONST_EYE_NV 0x86E5 +#define GL_PASS_THROUGH_NV 0x86E6 +#define GL_CULL_FRAGMENT_NV 0x86E7 +#define GL_OFFSET_TEXTURE_2D_NV 0x86E8 +#define GL_DEPENDENT_AR_TEXTURE_2D_NV 0x86E9 +#define GL_DEPENDENT_GB_TEXTURE_2D_NV 0x86EA +#define GL_DOT_PRODUCT_NV 0x86EC +#define GL_DOT_PRODUCT_DEPTH_REPLACE_NV 0x86ED +#define GL_DOT_PRODUCT_TEXTURE_2D_NV 0x86EE +#define GL_DOT_PRODUCT_TEXTURE_CUBE_MAP_NV 0x86F0 +#define GL_DOT_PRODUCT_DIFFUSE_CUBE_MAP_NV 0x86F1 +#define GL_DOT_PRODUCT_REFLECT_CUBE_MAP_NV 0x86F2 +#define GL_DOT_PRODUCT_CONST_EYE_REFLECT_CUBE_MAP_NV 0x86F3 +#define GL_HILO_NV 0x86F4 +#define GL_DSDT_NV 0x86F5 +#define GL_DSDT_MAG_NV 0x86F6 +#define GL_DSDT_MAG_VIB_NV 0x86F7 +#define GL_HILO16_NV 0x86F8 +#define GL_SIGNED_HILO_NV 0x86F9 +#define GL_SIGNED_HILO16_NV 0x86FA +#define GL_SIGNED_RGBA_NV 0x86FB +#define GL_SIGNED_RGBA8_NV 0x86FC +#define GL_SIGNED_RGB_NV 0x86FE +#define GL_SIGNED_RGB8_NV 0x86FF +#define GL_SIGNED_LUMINANCE_NV 0x8701 +#define GL_SIGNED_LUMINANCE8_NV 0x8702 +#define GL_SIGNED_LUMINANCE_ALPHA_NV 0x8703 +#define GL_SIGNED_LUMINANCE8_ALPHA8_NV 0x8704 +#define GL_SIGNED_ALPHA_NV 0x8705 +#define GL_SIGNED_ALPHA8_NV 0x8706 +#define GL_SIGNED_INTENSITY_NV 0x8707 +#define GL_SIGNED_INTENSITY8_NV 0x8708 +#define GL_DSDT8_NV 0x8709 +#define GL_DSDT8_MAG8_NV 0x870A +#define GL_DSDT8_MAG8_INTENSITY8_NV 0x870B +#define GL_SIGNED_RGB_UNSIGNED_ALPHA_NV 0x870C +#define GL_SIGNED_RGB8_UNSIGNED_ALPHA8_NV 0x870D +#define GL_HI_SCALE_NV 0x870E +#define GL_LO_SCALE_NV 0x870F +#define GL_DS_SCALE_NV 0x8710 +#define GL_DT_SCALE_NV 0x8711 +#define GL_MAGNITUDE_SCALE_NV 0x8712 +#define GL_VIBRANCE_SCALE_NV 0x8713 +#define GL_HI_BIAS_NV 0x8714 +#define GL_LO_BIAS_NV 0x8715 +#define GL_DS_BIAS_NV 0x8716 +#define GL_DT_BIAS_NV 0x8717 +#define GL_MAGNITUDE_BIAS_NV 0x8718 +#define GL_VIBRANCE_BIAS_NV 0x8719 +#define GL_TEXTURE_BORDER_VALUES_NV 0x871A +#define GL_TEXTURE_HI_SIZE_NV 0x871B +#define GL_TEXTURE_LO_SIZE_NV 0x871C +#define GL_TEXTURE_DS_SIZE_NV 0x871D +#define GL_TEXTURE_DT_SIZE_NV 0x871E +#define GL_TEXTURE_MAG_SIZE_NV 0x871F +#endif /* GL_NV_texture_shader */ + +#ifndef GL_NV_texture_shader2 +#define GL_NV_texture_shader2 1 +#define GL_DOT_PRODUCT_TEXTURE_3D_NV 0x86EF +#endif /* GL_NV_texture_shader2 */ + +#ifndef GL_NV_texture_shader3 +#define GL_NV_texture_shader3 1 +#define GL_OFFSET_PROJECTIVE_TEXTURE_2D_NV 0x8850 +#define GL_OFFSET_PROJECTIVE_TEXTURE_2D_SCALE_NV 0x8851 +#define GL_OFFSET_PROJECTIVE_TEXTURE_RECTANGLE_NV 0x8852 +#define GL_OFFSET_PROJECTIVE_TEXTURE_RECTANGLE_SCALE_NV 0x8853 +#define GL_OFFSET_HILO_TEXTURE_2D_NV 0x8854 +#define GL_OFFSET_HILO_TEXTURE_RECTANGLE_NV 0x8855 +#define GL_OFFSET_HILO_PROJECTIVE_TEXTURE_2D_NV 0x8856 +#define GL_OFFSET_HILO_PROJECTIVE_TEXTURE_RECTANGLE_NV 0x8857 +#define GL_DEPENDENT_HILO_TEXTURE_2D_NV 0x8858 +#define GL_DEPENDENT_RGB_TEXTURE_3D_NV 0x8859 +#define GL_DEPENDENT_RGB_TEXTURE_CUBE_MAP_NV 0x885A +#define GL_DOT_PRODUCT_PASS_THROUGH_NV 0x885B +#define GL_DOT_PRODUCT_TEXTURE_1D_NV 0x885C +#define GL_DOT_PRODUCT_AFFINE_DEPTH_REPLACE_NV 0x885D +#define GL_HILO8_NV 0x885E +#define GL_SIGNED_HILO8_NV 0x885F +#define GL_FORCE_BLUE_TO_ONE_NV 0x8860 +#endif /* GL_NV_texture_shader3 */ + +#ifndef GL_NV_timeline_semaphore +#define GL_NV_timeline_semaphore 1 +#define GL_TIMELINE_SEMAPHORE_VALUE_NV 0x9595 +#define GL_SEMAPHORE_TYPE_NV 0x95B3 +#define GL_SEMAPHORE_TYPE_BINARY_NV 0x95B4 +#define GL_SEMAPHORE_TYPE_TIMELINE_NV 0x95B5 +#define GL_MAX_TIMELINE_SEMAPHORE_VALUE_DIFFERENCE_NV 0x95B6 +typedef void (APIENTRYP PFNGLCREATESEMAPHORESNVPROC) (GLsizei n, GLuint *semaphores); +typedef void (APIENTRYP PFNGLSEMAPHOREPARAMETERIVNVPROC) (GLuint semaphore, GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLGETSEMAPHOREPARAMETERIVNVPROC) (GLuint semaphore, GLenum pname, GLint *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glCreateSemaphoresNV (GLsizei n, GLuint *semaphores); +GLAPI void APIENTRY glSemaphoreParameterivNV (GLuint semaphore, GLenum pname, const GLint *params); +GLAPI void APIENTRY glGetSemaphoreParameterivNV (GLuint semaphore, GLenum pname, GLint *params); +#endif +#endif /* GL_NV_timeline_semaphore */ + +#ifndef GL_NV_transform_feedback +#define GL_NV_transform_feedback 1 +#define GL_BACK_PRIMARY_COLOR_NV 0x8C77 +#define GL_BACK_SECONDARY_COLOR_NV 0x8C78 +#define GL_TEXTURE_COORD_NV 0x8C79 +#define GL_CLIP_DISTANCE_NV 0x8C7A +#define GL_VERTEX_ID_NV 0x8C7B +#define GL_PRIMITIVE_ID_NV 0x8C7C +#define GL_GENERIC_ATTRIB_NV 0x8C7D +#define GL_TRANSFORM_FEEDBACK_ATTRIBS_NV 0x8C7E +#define GL_TRANSFORM_FEEDBACK_BUFFER_MODE_NV 0x8C7F +#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS_NV 0x8C80 +#define GL_ACTIVE_VARYINGS_NV 0x8C81 +#define GL_ACTIVE_VARYING_MAX_LENGTH_NV 0x8C82 +#define GL_TRANSFORM_FEEDBACK_VARYINGS_NV 0x8C83 +#define GL_TRANSFORM_FEEDBACK_BUFFER_START_NV 0x8C84 +#define GL_TRANSFORM_FEEDBACK_BUFFER_SIZE_NV 0x8C85 +#define GL_TRANSFORM_FEEDBACK_RECORD_NV 0x8C86 +#define GL_PRIMITIVES_GENERATED_NV 0x8C87 +#define GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN_NV 0x8C88 +#define GL_RASTERIZER_DISCARD_NV 0x8C89 +#define GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS_NV 0x8C8A +#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS_NV 0x8C8B +#define GL_INTERLEAVED_ATTRIBS_NV 0x8C8C +#define GL_SEPARATE_ATTRIBS_NV 0x8C8D +#define GL_TRANSFORM_FEEDBACK_BUFFER_NV 0x8C8E +#define GL_TRANSFORM_FEEDBACK_BUFFER_BINDING_NV 0x8C8F +#define GL_LAYER_NV 0x8DAA +#define GL_NEXT_BUFFER_NV -2 +#define GL_SKIP_COMPONENTS4_NV -3 +#define GL_SKIP_COMPONENTS3_NV -4 +#define GL_SKIP_COMPONENTS2_NV -5 +#define GL_SKIP_COMPONENTS1_NV -6 +typedef void (APIENTRYP PFNGLBEGINTRANSFORMFEEDBACKNVPROC) (GLenum primitiveMode); +typedef void (APIENTRYP PFNGLENDTRANSFORMFEEDBACKNVPROC) (void); +typedef void (APIENTRYP PFNGLTRANSFORMFEEDBACKATTRIBSNVPROC) (GLsizei count, const GLint *attribs, GLenum bufferMode); +typedef void (APIENTRYP PFNGLBINDBUFFERRANGENVPROC) (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); +typedef void (APIENTRYP PFNGLBINDBUFFEROFFSETNVPROC) (GLenum target, GLuint index, GLuint buffer, GLintptr offset); +typedef void (APIENTRYP PFNGLBINDBUFFERBASENVPROC) (GLenum target, GLuint index, GLuint buffer); +typedef void (APIENTRYP PFNGLTRANSFORMFEEDBACKVARYINGSNVPROC) (GLuint program, GLsizei count, const GLint *locations, GLenum bufferMode); +typedef void (APIENTRYP PFNGLACTIVEVARYINGNVPROC) (GLuint program, const GLchar *name); +typedef GLint (APIENTRYP PFNGLGETVARYINGLOCATIONNVPROC) (GLuint program, const GLchar *name); +typedef void (APIENTRYP PFNGLGETACTIVEVARYINGNVPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name); +typedef void (APIENTRYP PFNGLGETTRANSFORMFEEDBACKVARYINGNVPROC) (GLuint program, GLuint index, GLint *location); +typedef void (APIENTRYP PFNGLTRANSFORMFEEDBACKSTREAMATTRIBSNVPROC) (GLsizei count, const GLint *attribs, GLsizei nbuffers, const GLint *bufstreams, GLenum bufferMode); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBeginTransformFeedbackNV (GLenum primitiveMode); +GLAPI void APIENTRY glEndTransformFeedbackNV (void); +GLAPI void APIENTRY glTransformFeedbackAttribsNV (GLsizei count, const GLint *attribs, GLenum bufferMode); +GLAPI void APIENTRY glBindBufferRangeNV (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); +GLAPI void APIENTRY glBindBufferOffsetNV (GLenum target, GLuint index, GLuint buffer, GLintptr offset); +GLAPI void APIENTRY glBindBufferBaseNV (GLenum target, GLuint index, GLuint buffer); +GLAPI void APIENTRY glTransformFeedbackVaryingsNV (GLuint program, GLsizei count, const GLint *locations, GLenum bufferMode); +GLAPI void APIENTRY glActiveVaryingNV (GLuint program, const GLchar *name); +GLAPI GLint APIENTRY glGetVaryingLocationNV (GLuint program, const GLchar *name); +GLAPI void APIENTRY glGetActiveVaryingNV (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name); +GLAPI void APIENTRY glGetTransformFeedbackVaryingNV (GLuint program, GLuint index, GLint *location); +GLAPI void APIENTRY glTransformFeedbackStreamAttribsNV (GLsizei count, const GLint *attribs, GLsizei nbuffers, const GLint *bufstreams, GLenum bufferMode); +#endif +#endif /* GL_NV_transform_feedback */ + +#ifndef GL_NV_transform_feedback2 +#define GL_NV_transform_feedback2 1 +#define GL_TRANSFORM_FEEDBACK_NV 0x8E22 +#define GL_TRANSFORM_FEEDBACK_BUFFER_PAUSED_NV 0x8E23 +#define GL_TRANSFORM_FEEDBACK_BUFFER_ACTIVE_NV 0x8E24 +#define GL_TRANSFORM_FEEDBACK_BINDING_NV 0x8E25 +typedef void (APIENTRYP PFNGLBINDTRANSFORMFEEDBACKNVPROC) (GLenum target, GLuint id); +typedef void (APIENTRYP PFNGLDELETETRANSFORMFEEDBACKSNVPROC) (GLsizei n, const GLuint *ids); +typedef void (APIENTRYP PFNGLGENTRANSFORMFEEDBACKSNVPROC) (GLsizei n, GLuint *ids); +typedef GLboolean (APIENTRYP PFNGLISTRANSFORMFEEDBACKNVPROC) (GLuint id); +typedef void (APIENTRYP PFNGLPAUSETRANSFORMFEEDBACKNVPROC) (void); +typedef void (APIENTRYP PFNGLRESUMETRANSFORMFEEDBACKNVPROC) (void); +typedef void (APIENTRYP PFNGLDRAWTRANSFORMFEEDBACKNVPROC) (GLenum mode, GLuint id); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBindTransformFeedbackNV (GLenum target, GLuint id); +GLAPI void APIENTRY glDeleteTransformFeedbacksNV (GLsizei n, const GLuint *ids); +GLAPI void APIENTRY glGenTransformFeedbacksNV (GLsizei n, GLuint *ids); +GLAPI GLboolean APIENTRY glIsTransformFeedbackNV (GLuint id); +GLAPI void APIENTRY glPauseTransformFeedbackNV (void); +GLAPI void APIENTRY glResumeTransformFeedbackNV (void); +GLAPI void APIENTRY glDrawTransformFeedbackNV (GLenum mode, GLuint id); +#endif +#endif /* GL_NV_transform_feedback2 */ + +#ifndef GL_NV_uniform_buffer_unified_memory +#define GL_NV_uniform_buffer_unified_memory 1 +#define GL_UNIFORM_BUFFER_UNIFIED_NV 0x936E +#define GL_UNIFORM_BUFFER_ADDRESS_NV 0x936F +#define GL_UNIFORM_BUFFER_LENGTH_NV 0x9370 +#endif /* GL_NV_uniform_buffer_unified_memory */ + +#ifndef GL_NV_vdpau_interop +#define GL_NV_vdpau_interop 1 +typedef GLintptr GLvdpauSurfaceNV; +#define GL_SURFACE_STATE_NV 0x86EB +#define GL_SURFACE_REGISTERED_NV 0x86FD +#define GL_SURFACE_MAPPED_NV 0x8700 +#define GL_WRITE_DISCARD_NV 0x88BE +typedef void (APIENTRYP PFNGLVDPAUINITNVPROC) (const void *vdpDevice, const void *getProcAddress); +typedef void (APIENTRYP PFNGLVDPAUFININVPROC) (void); +typedef GLvdpauSurfaceNV (APIENTRYP PFNGLVDPAUREGISTERVIDEOSURFACENVPROC) (const void *vdpSurface, GLenum target, GLsizei numTextureNames, const GLuint *textureNames); +typedef GLvdpauSurfaceNV (APIENTRYP PFNGLVDPAUREGISTEROUTPUTSURFACENVPROC) (const void *vdpSurface, GLenum target, GLsizei numTextureNames, const GLuint *textureNames); +typedef GLboolean (APIENTRYP PFNGLVDPAUISSURFACENVPROC) (GLvdpauSurfaceNV surface); +typedef void (APIENTRYP PFNGLVDPAUUNREGISTERSURFACENVPROC) (GLvdpauSurfaceNV surface); +typedef void (APIENTRYP PFNGLVDPAUGETSURFACEIVNVPROC) (GLvdpauSurfaceNV surface, GLenum pname, GLsizei count, GLsizei *length, GLint *values); +typedef void (APIENTRYP PFNGLVDPAUSURFACEACCESSNVPROC) (GLvdpauSurfaceNV surface, GLenum access); +typedef void (APIENTRYP PFNGLVDPAUMAPSURFACESNVPROC) (GLsizei numSurfaces, const GLvdpauSurfaceNV *surfaces); +typedef void (APIENTRYP PFNGLVDPAUUNMAPSURFACESNVPROC) (GLsizei numSurface, const GLvdpauSurfaceNV *surfaces); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glVDPAUInitNV (const void *vdpDevice, const void *getProcAddress); +GLAPI void APIENTRY glVDPAUFiniNV (void); +GLAPI GLvdpauSurfaceNV APIENTRY glVDPAURegisterVideoSurfaceNV (const void *vdpSurface, GLenum target, GLsizei numTextureNames, const GLuint *textureNames); +GLAPI GLvdpauSurfaceNV APIENTRY glVDPAURegisterOutputSurfaceNV (const void *vdpSurface, GLenum target, GLsizei numTextureNames, const GLuint *textureNames); +GLAPI GLboolean APIENTRY glVDPAUIsSurfaceNV (GLvdpauSurfaceNV surface); +GLAPI void APIENTRY glVDPAUUnregisterSurfaceNV (GLvdpauSurfaceNV surface); +GLAPI void APIENTRY glVDPAUGetSurfaceivNV (GLvdpauSurfaceNV surface, GLenum pname, GLsizei count, GLsizei *length, GLint *values); +GLAPI void APIENTRY glVDPAUSurfaceAccessNV (GLvdpauSurfaceNV surface, GLenum access); +GLAPI void APIENTRY glVDPAUMapSurfacesNV (GLsizei numSurfaces, const GLvdpauSurfaceNV *surfaces); +GLAPI void APIENTRY glVDPAUUnmapSurfacesNV (GLsizei numSurface, const GLvdpauSurfaceNV *surfaces); +#endif +#endif /* GL_NV_vdpau_interop */ + +#ifndef GL_NV_vdpau_interop2 +#define GL_NV_vdpau_interop2 1 +typedef GLvdpauSurfaceNV (APIENTRYP PFNGLVDPAUREGISTERVIDEOSURFACEWITHPICTURESTRUCTURENVPROC) (const void *vdpSurface, GLenum target, GLsizei numTextureNames, const GLuint *textureNames, GLboolean isFrameStructure); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI GLvdpauSurfaceNV APIENTRY glVDPAURegisterVideoSurfaceWithPictureStructureNV (const void *vdpSurface, GLenum target, GLsizei numTextureNames, const GLuint *textureNames, GLboolean isFrameStructure); +#endif +#endif /* GL_NV_vdpau_interop2 */ + +#ifndef GL_NV_vertex_array_range +#define GL_NV_vertex_array_range 1 +#define GL_VERTEX_ARRAY_RANGE_NV 0x851D +#define GL_VERTEX_ARRAY_RANGE_LENGTH_NV 0x851E +#define GL_VERTEX_ARRAY_RANGE_VALID_NV 0x851F +#define GL_MAX_VERTEX_ARRAY_RANGE_ELEMENT_NV 0x8520 +#define GL_VERTEX_ARRAY_RANGE_POINTER_NV 0x8521 +typedef void (APIENTRYP PFNGLFLUSHVERTEXARRAYRANGENVPROC) (void); +typedef void (APIENTRYP PFNGLVERTEXARRAYRANGENVPROC) (GLsizei length, const void *pointer); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glFlushVertexArrayRangeNV (void); +GLAPI void APIENTRY glVertexArrayRangeNV (GLsizei length, const void *pointer); +#endif +#endif /* GL_NV_vertex_array_range */ + +#ifndef GL_NV_vertex_array_range2 +#define GL_NV_vertex_array_range2 1 +#define GL_VERTEX_ARRAY_RANGE_WITHOUT_FLUSH_NV 0x8533 +#endif /* GL_NV_vertex_array_range2 */ + +#ifndef GL_NV_vertex_attrib_integer_64bit +#define GL_NV_vertex_attrib_integer_64bit 1 +typedef void (APIENTRYP PFNGLVERTEXATTRIBL1I64NVPROC) (GLuint index, GLint64EXT x); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL2I64NVPROC) (GLuint index, GLint64EXT x, GLint64EXT y); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL3I64NVPROC) (GLuint index, GLint64EXT x, GLint64EXT y, GLint64EXT z); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL4I64NVPROC) (GLuint index, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL1I64VNVPROC) (GLuint index, const GLint64EXT *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL2I64VNVPROC) (GLuint index, const GLint64EXT *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL3I64VNVPROC) (GLuint index, const GLint64EXT *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL4I64VNVPROC) (GLuint index, const GLint64EXT *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL1UI64NVPROC) (GLuint index, GLuint64EXT x); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL2UI64NVPROC) (GLuint index, GLuint64EXT x, GLuint64EXT y); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL3UI64NVPROC) (GLuint index, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL4UI64NVPROC) (GLuint index, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL1UI64VNVPROC) (GLuint index, const GLuint64EXT *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL2UI64VNVPROC) (GLuint index, const GLuint64EXT *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL3UI64VNVPROC) (GLuint index, const GLuint64EXT *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBL4UI64VNVPROC) (GLuint index, const GLuint64EXT *v); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBLI64VNVPROC) (GLuint index, GLenum pname, GLint64EXT *params); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBLUI64VNVPROC) (GLuint index, GLenum pname, GLuint64EXT *params); +typedef void (APIENTRYP PFNGLVERTEXATTRIBLFORMATNVPROC) (GLuint index, GLint size, GLenum type, GLsizei stride); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glVertexAttribL1i64NV (GLuint index, GLint64EXT x); +GLAPI void APIENTRY glVertexAttribL2i64NV (GLuint index, GLint64EXT x, GLint64EXT y); +GLAPI void APIENTRY glVertexAttribL3i64NV (GLuint index, GLint64EXT x, GLint64EXT y, GLint64EXT z); +GLAPI void APIENTRY glVertexAttribL4i64NV (GLuint index, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w); +GLAPI void APIENTRY glVertexAttribL1i64vNV (GLuint index, const GLint64EXT *v); +GLAPI void APIENTRY glVertexAttribL2i64vNV (GLuint index, const GLint64EXT *v); +GLAPI void APIENTRY glVertexAttribL3i64vNV (GLuint index, const GLint64EXT *v); +GLAPI void APIENTRY glVertexAttribL4i64vNV (GLuint index, const GLint64EXT *v); +GLAPI void APIENTRY glVertexAttribL1ui64NV (GLuint index, GLuint64EXT x); +GLAPI void APIENTRY glVertexAttribL2ui64NV (GLuint index, GLuint64EXT x, GLuint64EXT y); +GLAPI void APIENTRY glVertexAttribL3ui64NV (GLuint index, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z); +GLAPI void APIENTRY glVertexAttribL4ui64NV (GLuint index, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w); +GLAPI void APIENTRY glVertexAttribL1ui64vNV (GLuint index, const GLuint64EXT *v); +GLAPI void APIENTRY glVertexAttribL2ui64vNV (GLuint index, const GLuint64EXT *v); +GLAPI void APIENTRY glVertexAttribL3ui64vNV (GLuint index, const GLuint64EXT *v); +GLAPI void APIENTRY glVertexAttribL4ui64vNV (GLuint index, const GLuint64EXT *v); +GLAPI void APIENTRY glGetVertexAttribLi64vNV (GLuint index, GLenum pname, GLint64EXT *params); +GLAPI void APIENTRY glGetVertexAttribLui64vNV (GLuint index, GLenum pname, GLuint64EXT *params); +GLAPI void APIENTRY glVertexAttribLFormatNV (GLuint index, GLint size, GLenum type, GLsizei stride); +#endif +#endif /* GL_NV_vertex_attrib_integer_64bit */ + +#ifndef GL_NV_vertex_buffer_unified_memory +#define GL_NV_vertex_buffer_unified_memory 1 +#define GL_VERTEX_ATTRIB_ARRAY_UNIFIED_NV 0x8F1E +#define GL_ELEMENT_ARRAY_UNIFIED_NV 0x8F1F +#define GL_VERTEX_ATTRIB_ARRAY_ADDRESS_NV 0x8F20 +#define GL_VERTEX_ARRAY_ADDRESS_NV 0x8F21 +#define GL_NORMAL_ARRAY_ADDRESS_NV 0x8F22 +#define GL_COLOR_ARRAY_ADDRESS_NV 0x8F23 +#define GL_INDEX_ARRAY_ADDRESS_NV 0x8F24 +#define GL_TEXTURE_COORD_ARRAY_ADDRESS_NV 0x8F25 +#define GL_EDGE_FLAG_ARRAY_ADDRESS_NV 0x8F26 +#define GL_SECONDARY_COLOR_ARRAY_ADDRESS_NV 0x8F27 +#define GL_FOG_COORD_ARRAY_ADDRESS_NV 0x8F28 +#define GL_ELEMENT_ARRAY_ADDRESS_NV 0x8F29 +#define GL_VERTEX_ATTRIB_ARRAY_LENGTH_NV 0x8F2A +#define GL_VERTEX_ARRAY_LENGTH_NV 0x8F2B +#define GL_NORMAL_ARRAY_LENGTH_NV 0x8F2C +#define GL_COLOR_ARRAY_LENGTH_NV 0x8F2D +#define GL_INDEX_ARRAY_LENGTH_NV 0x8F2E +#define GL_TEXTURE_COORD_ARRAY_LENGTH_NV 0x8F2F +#define GL_EDGE_FLAG_ARRAY_LENGTH_NV 0x8F30 +#define GL_SECONDARY_COLOR_ARRAY_LENGTH_NV 0x8F31 +#define GL_FOG_COORD_ARRAY_LENGTH_NV 0x8F32 +#define GL_ELEMENT_ARRAY_LENGTH_NV 0x8F33 +#define GL_DRAW_INDIRECT_UNIFIED_NV 0x8F40 +#define GL_DRAW_INDIRECT_ADDRESS_NV 0x8F41 +#define GL_DRAW_INDIRECT_LENGTH_NV 0x8F42 +typedef void (APIENTRYP PFNGLBUFFERADDRESSRANGENVPROC) (GLenum pname, GLuint index, GLuint64EXT address, GLsizeiptr length); +typedef void (APIENTRYP PFNGLVERTEXFORMATNVPROC) (GLint size, GLenum type, GLsizei stride); +typedef void (APIENTRYP PFNGLNORMALFORMATNVPROC) (GLenum type, GLsizei stride); +typedef void (APIENTRYP PFNGLCOLORFORMATNVPROC) (GLint size, GLenum type, GLsizei stride); +typedef void (APIENTRYP PFNGLINDEXFORMATNVPROC) (GLenum type, GLsizei stride); +typedef void (APIENTRYP PFNGLTEXCOORDFORMATNVPROC) (GLint size, GLenum type, GLsizei stride); +typedef void (APIENTRYP PFNGLEDGEFLAGFORMATNVPROC) (GLsizei stride); +typedef void (APIENTRYP PFNGLSECONDARYCOLORFORMATNVPROC) (GLint size, GLenum type, GLsizei stride); +typedef void (APIENTRYP PFNGLFOGCOORDFORMATNVPROC) (GLenum type, GLsizei stride); +typedef void (APIENTRYP PFNGLVERTEXATTRIBFORMATNVPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride); +typedef void (APIENTRYP PFNGLVERTEXATTRIBIFORMATNVPROC) (GLuint index, GLint size, GLenum type, GLsizei stride); +typedef void (APIENTRYP PFNGLGETINTEGERUI64I_VNVPROC) (GLenum value, GLuint index, GLuint64EXT *result); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBufferAddressRangeNV (GLenum pname, GLuint index, GLuint64EXT address, GLsizeiptr length); +GLAPI void APIENTRY glVertexFormatNV (GLint size, GLenum type, GLsizei stride); +GLAPI void APIENTRY glNormalFormatNV (GLenum type, GLsizei stride); +GLAPI void APIENTRY glColorFormatNV (GLint size, GLenum type, GLsizei stride); +GLAPI void APIENTRY glIndexFormatNV (GLenum type, GLsizei stride); +GLAPI void APIENTRY glTexCoordFormatNV (GLint size, GLenum type, GLsizei stride); +GLAPI void APIENTRY glEdgeFlagFormatNV (GLsizei stride); +GLAPI void APIENTRY glSecondaryColorFormatNV (GLint size, GLenum type, GLsizei stride); +GLAPI void APIENTRY glFogCoordFormatNV (GLenum type, GLsizei stride); +GLAPI void APIENTRY glVertexAttribFormatNV (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride); +GLAPI void APIENTRY glVertexAttribIFormatNV (GLuint index, GLint size, GLenum type, GLsizei stride); +GLAPI void APIENTRY glGetIntegerui64i_vNV (GLenum value, GLuint index, GLuint64EXT *result); +#endif +#endif /* GL_NV_vertex_buffer_unified_memory */ + +#ifndef GL_NV_vertex_program +#define GL_NV_vertex_program 1 +#define GL_VERTEX_PROGRAM_NV 0x8620 +#define GL_VERTEX_STATE_PROGRAM_NV 0x8621 +#define GL_ATTRIB_ARRAY_SIZE_NV 0x8623 +#define GL_ATTRIB_ARRAY_STRIDE_NV 0x8624 +#define GL_ATTRIB_ARRAY_TYPE_NV 0x8625 +#define GL_CURRENT_ATTRIB_NV 0x8626 +#define GL_PROGRAM_LENGTH_NV 0x8627 +#define GL_PROGRAM_STRING_NV 0x8628 +#define GL_MODELVIEW_PROJECTION_NV 0x8629 +#define GL_IDENTITY_NV 0x862A +#define GL_INVERSE_NV 0x862B +#define GL_TRANSPOSE_NV 0x862C +#define GL_INVERSE_TRANSPOSE_NV 0x862D +#define GL_MAX_TRACK_MATRIX_STACK_DEPTH_NV 0x862E +#define GL_MAX_TRACK_MATRICES_NV 0x862F +#define GL_MATRIX0_NV 0x8630 +#define GL_MATRIX1_NV 0x8631 +#define GL_MATRIX2_NV 0x8632 +#define GL_MATRIX3_NV 0x8633 +#define GL_MATRIX4_NV 0x8634 +#define GL_MATRIX5_NV 0x8635 +#define GL_MATRIX6_NV 0x8636 +#define GL_MATRIX7_NV 0x8637 +#define GL_CURRENT_MATRIX_STACK_DEPTH_NV 0x8640 +#define GL_CURRENT_MATRIX_NV 0x8641 +#define GL_VERTEX_PROGRAM_POINT_SIZE_NV 0x8642 +#define GL_VERTEX_PROGRAM_TWO_SIDE_NV 0x8643 +#define GL_PROGRAM_PARAMETER_NV 0x8644 +#define GL_ATTRIB_ARRAY_POINTER_NV 0x8645 +#define GL_PROGRAM_TARGET_NV 0x8646 +#define GL_PROGRAM_RESIDENT_NV 0x8647 +#define GL_TRACK_MATRIX_NV 0x8648 +#define GL_TRACK_MATRIX_TRANSFORM_NV 0x8649 +#define GL_VERTEX_PROGRAM_BINDING_NV 0x864A +#define GL_PROGRAM_ERROR_POSITION_NV 0x864B +#define GL_VERTEX_ATTRIB_ARRAY0_NV 0x8650 +#define GL_VERTEX_ATTRIB_ARRAY1_NV 0x8651 +#define GL_VERTEX_ATTRIB_ARRAY2_NV 0x8652 +#define GL_VERTEX_ATTRIB_ARRAY3_NV 0x8653 +#define GL_VERTEX_ATTRIB_ARRAY4_NV 0x8654 +#define GL_VERTEX_ATTRIB_ARRAY5_NV 0x8655 +#define GL_VERTEX_ATTRIB_ARRAY6_NV 0x8656 +#define GL_VERTEX_ATTRIB_ARRAY7_NV 0x8657 +#define GL_VERTEX_ATTRIB_ARRAY8_NV 0x8658 +#define GL_VERTEX_ATTRIB_ARRAY9_NV 0x8659 +#define GL_VERTEX_ATTRIB_ARRAY10_NV 0x865A +#define GL_VERTEX_ATTRIB_ARRAY11_NV 0x865B +#define GL_VERTEX_ATTRIB_ARRAY12_NV 0x865C +#define GL_VERTEX_ATTRIB_ARRAY13_NV 0x865D +#define GL_VERTEX_ATTRIB_ARRAY14_NV 0x865E +#define GL_VERTEX_ATTRIB_ARRAY15_NV 0x865F +#define GL_MAP1_VERTEX_ATTRIB0_4_NV 0x8660 +#define GL_MAP1_VERTEX_ATTRIB1_4_NV 0x8661 +#define GL_MAP1_VERTEX_ATTRIB2_4_NV 0x8662 +#define GL_MAP1_VERTEX_ATTRIB3_4_NV 0x8663 +#define GL_MAP1_VERTEX_ATTRIB4_4_NV 0x8664 +#define GL_MAP1_VERTEX_ATTRIB5_4_NV 0x8665 +#define GL_MAP1_VERTEX_ATTRIB6_4_NV 0x8666 +#define GL_MAP1_VERTEX_ATTRIB7_4_NV 0x8667 +#define GL_MAP1_VERTEX_ATTRIB8_4_NV 0x8668 +#define GL_MAP1_VERTEX_ATTRIB9_4_NV 0x8669 +#define GL_MAP1_VERTEX_ATTRIB10_4_NV 0x866A +#define GL_MAP1_VERTEX_ATTRIB11_4_NV 0x866B +#define GL_MAP1_VERTEX_ATTRIB12_4_NV 0x866C +#define GL_MAP1_VERTEX_ATTRIB13_4_NV 0x866D +#define GL_MAP1_VERTEX_ATTRIB14_4_NV 0x866E +#define GL_MAP1_VERTEX_ATTRIB15_4_NV 0x866F +#define GL_MAP2_VERTEX_ATTRIB0_4_NV 0x8670 +#define GL_MAP2_VERTEX_ATTRIB1_4_NV 0x8671 +#define GL_MAP2_VERTEX_ATTRIB2_4_NV 0x8672 +#define GL_MAP2_VERTEX_ATTRIB3_4_NV 0x8673 +#define GL_MAP2_VERTEX_ATTRIB4_4_NV 0x8674 +#define GL_MAP2_VERTEX_ATTRIB5_4_NV 0x8675 +#define GL_MAP2_VERTEX_ATTRIB6_4_NV 0x8676 +#define GL_MAP2_VERTEX_ATTRIB7_4_NV 0x8677 +#define GL_MAP2_VERTEX_ATTRIB8_4_NV 0x8678 +#define GL_MAP2_VERTEX_ATTRIB9_4_NV 0x8679 +#define GL_MAP2_VERTEX_ATTRIB10_4_NV 0x867A +#define GL_MAP2_VERTEX_ATTRIB11_4_NV 0x867B +#define GL_MAP2_VERTEX_ATTRIB12_4_NV 0x867C +#define GL_MAP2_VERTEX_ATTRIB13_4_NV 0x867D +#define GL_MAP2_VERTEX_ATTRIB14_4_NV 0x867E +#define GL_MAP2_VERTEX_ATTRIB15_4_NV 0x867F +typedef GLboolean (APIENTRYP PFNGLAREPROGRAMSRESIDENTNVPROC) (GLsizei n, const GLuint *programs, GLboolean *residences); +typedef void (APIENTRYP PFNGLBINDPROGRAMNVPROC) (GLenum target, GLuint id); +typedef void (APIENTRYP PFNGLDELETEPROGRAMSNVPROC) (GLsizei n, const GLuint *programs); +typedef void (APIENTRYP PFNGLEXECUTEPROGRAMNVPROC) (GLenum target, GLuint id, const GLfloat *params); +typedef void (APIENTRYP PFNGLGENPROGRAMSNVPROC) (GLsizei n, GLuint *programs); +typedef void (APIENTRYP PFNGLGETPROGRAMPARAMETERDVNVPROC) (GLenum target, GLuint index, GLenum pname, GLdouble *params); +typedef void (APIENTRYP PFNGLGETPROGRAMPARAMETERFVNVPROC) (GLenum target, GLuint index, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETPROGRAMIVNVPROC) (GLuint id, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETPROGRAMSTRINGNVPROC) (GLuint id, GLenum pname, GLubyte *program); +typedef void (APIENTRYP PFNGLGETTRACKMATRIXIVNVPROC) (GLenum target, GLuint address, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBDVNVPROC) (GLuint index, GLenum pname, GLdouble *params); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBFVNVPROC) (GLuint index, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIVNVPROC) (GLuint index, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBPOINTERVNVPROC) (GLuint index, GLenum pname, void **pointer); +typedef GLboolean (APIENTRYP PFNGLISPROGRAMNVPROC) (GLuint id); +typedef void (APIENTRYP PFNGLLOADPROGRAMNVPROC) (GLenum target, GLuint id, GLsizei len, const GLubyte *program); +typedef void (APIENTRYP PFNGLPROGRAMPARAMETER4DNVPROC) (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (APIENTRYP PFNGLPROGRAMPARAMETER4DVNVPROC) (GLenum target, GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLPROGRAMPARAMETER4FNVPROC) (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (APIENTRYP PFNGLPROGRAMPARAMETER4FVNVPROC) (GLenum target, GLuint index, const GLfloat *v); +typedef void (APIENTRYP PFNGLPROGRAMPARAMETERS4DVNVPROC) (GLenum target, GLuint index, GLsizei count, const GLdouble *v); +typedef void (APIENTRYP PFNGLPROGRAMPARAMETERS4FVNVPROC) (GLenum target, GLuint index, GLsizei count, const GLfloat *v); +typedef void (APIENTRYP PFNGLREQUESTRESIDENTPROGRAMSNVPROC) (GLsizei n, const GLuint *programs); +typedef void (APIENTRYP PFNGLTRACKMATRIXNVPROC) (GLenum target, GLuint address, GLenum matrix, GLenum transform); +typedef void (APIENTRYP PFNGLVERTEXATTRIBPOINTERNVPROC) (GLuint index, GLint fsize, GLenum type, GLsizei stride, const void *pointer); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1DNVPROC) (GLuint index, GLdouble x); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1DVNVPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1FNVPROC) (GLuint index, GLfloat x); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1FVNVPROC) (GLuint index, const GLfloat *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1SNVPROC) (GLuint index, GLshort x); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1SVNVPROC) (GLuint index, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2DNVPROC) (GLuint index, GLdouble x, GLdouble y); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2DVNVPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2FNVPROC) (GLuint index, GLfloat x, GLfloat y); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2FVNVPROC) (GLuint index, const GLfloat *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2SNVPROC) (GLuint index, GLshort x, GLshort y); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2SVNVPROC) (GLuint index, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3DNVPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3DVNVPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3FNVPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3FVNVPROC) (GLuint index, const GLfloat *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3SNVPROC) (GLuint index, GLshort x, GLshort y, GLshort z); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3SVNVPROC) (GLuint index, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4DNVPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4DVNVPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4FNVPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4FVNVPROC) (GLuint index, const GLfloat *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4SNVPROC) (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4SVNVPROC) (GLuint index, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4UBNVPROC) (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4UBVNVPROC) (GLuint index, const GLubyte *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBS1DVNVPROC) (GLuint index, GLsizei count, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBS1FVNVPROC) (GLuint index, GLsizei count, const GLfloat *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBS1SVNVPROC) (GLuint index, GLsizei count, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBS2DVNVPROC) (GLuint index, GLsizei count, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBS2FVNVPROC) (GLuint index, GLsizei count, const GLfloat *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBS2SVNVPROC) (GLuint index, GLsizei count, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBS3DVNVPROC) (GLuint index, GLsizei count, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBS3FVNVPROC) (GLuint index, GLsizei count, const GLfloat *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBS3SVNVPROC) (GLuint index, GLsizei count, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBS4DVNVPROC) (GLuint index, GLsizei count, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBS4FVNVPROC) (GLuint index, GLsizei count, const GLfloat *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBS4SVNVPROC) (GLuint index, GLsizei count, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBS4UBVNVPROC) (GLuint index, GLsizei count, const GLubyte *v); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI GLboolean APIENTRY glAreProgramsResidentNV (GLsizei n, const GLuint *programs, GLboolean *residences); +GLAPI void APIENTRY glBindProgramNV (GLenum target, GLuint id); +GLAPI void APIENTRY glDeleteProgramsNV (GLsizei n, const GLuint *programs); +GLAPI void APIENTRY glExecuteProgramNV (GLenum target, GLuint id, const GLfloat *params); +GLAPI void APIENTRY glGenProgramsNV (GLsizei n, GLuint *programs); +GLAPI void APIENTRY glGetProgramParameterdvNV (GLenum target, GLuint index, GLenum pname, GLdouble *params); +GLAPI void APIENTRY glGetProgramParameterfvNV (GLenum target, GLuint index, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetProgramivNV (GLuint id, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetProgramStringNV (GLuint id, GLenum pname, GLubyte *program); +GLAPI void APIENTRY glGetTrackMatrixivNV (GLenum target, GLuint address, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetVertexAttribdvNV (GLuint index, GLenum pname, GLdouble *params); +GLAPI void APIENTRY glGetVertexAttribfvNV (GLuint index, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetVertexAttribivNV (GLuint index, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetVertexAttribPointervNV (GLuint index, GLenum pname, void **pointer); +GLAPI GLboolean APIENTRY glIsProgramNV (GLuint id); +GLAPI void APIENTRY glLoadProgramNV (GLenum target, GLuint id, GLsizei len, const GLubyte *program); +GLAPI void APIENTRY glProgramParameter4dNV (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +GLAPI void APIENTRY glProgramParameter4dvNV (GLenum target, GLuint index, const GLdouble *v); +GLAPI void APIENTRY glProgramParameter4fNV (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +GLAPI void APIENTRY glProgramParameter4fvNV (GLenum target, GLuint index, const GLfloat *v); +GLAPI void APIENTRY glProgramParameters4dvNV (GLenum target, GLuint index, GLsizei count, const GLdouble *v); +GLAPI void APIENTRY glProgramParameters4fvNV (GLenum target, GLuint index, GLsizei count, const GLfloat *v); +GLAPI void APIENTRY glRequestResidentProgramsNV (GLsizei n, const GLuint *programs); +GLAPI void APIENTRY glTrackMatrixNV (GLenum target, GLuint address, GLenum matrix, GLenum transform); +GLAPI void APIENTRY glVertexAttribPointerNV (GLuint index, GLint fsize, GLenum type, GLsizei stride, const void *pointer); +GLAPI void APIENTRY glVertexAttrib1dNV (GLuint index, GLdouble x); +GLAPI void APIENTRY glVertexAttrib1dvNV (GLuint index, const GLdouble *v); +GLAPI void APIENTRY glVertexAttrib1fNV (GLuint index, GLfloat x); +GLAPI void APIENTRY glVertexAttrib1fvNV (GLuint index, const GLfloat *v); +GLAPI void APIENTRY glVertexAttrib1sNV (GLuint index, GLshort x); +GLAPI void APIENTRY glVertexAttrib1svNV (GLuint index, const GLshort *v); +GLAPI void APIENTRY glVertexAttrib2dNV (GLuint index, GLdouble x, GLdouble y); +GLAPI void APIENTRY glVertexAttrib2dvNV (GLuint index, const GLdouble *v); +GLAPI void APIENTRY glVertexAttrib2fNV (GLuint index, GLfloat x, GLfloat y); +GLAPI void APIENTRY glVertexAttrib2fvNV (GLuint index, const GLfloat *v); +GLAPI void APIENTRY glVertexAttrib2sNV (GLuint index, GLshort x, GLshort y); +GLAPI void APIENTRY glVertexAttrib2svNV (GLuint index, const GLshort *v); +GLAPI void APIENTRY glVertexAttrib3dNV (GLuint index, GLdouble x, GLdouble y, GLdouble z); +GLAPI void APIENTRY glVertexAttrib3dvNV (GLuint index, const GLdouble *v); +GLAPI void APIENTRY glVertexAttrib3fNV (GLuint index, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glVertexAttrib3fvNV (GLuint index, const GLfloat *v); +GLAPI void APIENTRY glVertexAttrib3sNV (GLuint index, GLshort x, GLshort y, GLshort z); +GLAPI void APIENTRY glVertexAttrib3svNV (GLuint index, const GLshort *v); +GLAPI void APIENTRY glVertexAttrib4dNV (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +GLAPI void APIENTRY glVertexAttrib4dvNV (GLuint index, const GLdouble *v); +GLAPI void APIENTRY glVertexAttrib4fNV (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +GLAPI void APIENTRY glVertexAttrib4fvNV (GLuint index, const GLfloat *v); +GLAPI void APIENTRY glVertexAttrib4sNV (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); +GLAPI void APIENTRY glVertexAttrib4svNV (GLuint index, const GLshort *v); +GLAPI void APIENTRY glVertexAttrib4ubNV (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); +GLAPI void APIENTRY glVertexAttrib4ubvNV (GLuint index, const GLubyte *v); +GLAPI void APIENTRY glVertexAttribs1dvNV (GLuint index, GLsizei count, const GLdouble *v); +GLAPI void APIENTRY glVertexAttribs1fvNV (GLuint index, GLsizei count, const GLfloat *v); +GLAPI void APIENTRY glVertexAttribs1svNV (GLuint index, GLsizei count, const GLshort *v); +GLAPI void APIENTRY glVertexAttribs2dvNV (GLuint index, GLsizei count, const GLdouble *v); +GLAPI void APIENTRY glVertexAttribs2fvNV (GLuint index, GLsizei count, const GLfloat *v); +GLAPI void APIENTRY glVertexAttribs2svNV (GLuint index, GLsizei count, const GLshort *v); +GLAPI void APIENTRY glVertexAttribs3dvNV (GLuint index, GLsizei count, const GLdouble *v); +GLAPI void APIENTRY glVertexAttribs3fvNV (GLuint index, GLsizei count, const GLfloat *v); +GLAPI void APIENTRY glVertexAttribs3svNV (GLuint index, GLsizei count, const GLshort *v); +GLAPI void APIENTRY glVertexAttribs4dvNV (GLuint index, GLsizei count, const GLdouble *v); +GLAPI void APIENTRY glVertexAttribs4fvNV (GLuint index, GLsizei count, const GLfloat *v); +GLAPI void APIENTRY glVertexAttribs4svNV (GLuint index, GLsizei count, const GLshort *v); +GLAPI void APIENTRY glVertexAttribs4ubvNV (GLuint index, GLsizei count, const GLubyte *v); +#endif +#endif /* GL_NV_vertex_program */ + +#ifndef GL_NV_vertex_program1_1 +#define GL_NV_vertex_program1_1 1 +#endif /* GL_NV_vertex_program1_1 */ + +#ifndef GL_NV_vertex_program2 +#define GL_NV_vertex_program2 1 +#endif /* GL_NV_vertex_program2 */ + +#ifndef GL_NV_vertex_program2_option +#define GL_NV_vertex_program2_option 1 +#endif /* GL_NV_vertex_program2_option */ + +#ifndef GL_NV_vertex_program3 +#define GL_NV_vertex_program3 1 +#endif /* GL_NV_vertex_program3 */ + +#ifndef GL_NV_vertex_program4 +#define GL_NV_vertex_program4 1 +#define GL_VERTEX_ATTRIB_ARRAY_INTEGER_NV 0x88FD +#endif /* GL_NV_vertex_program4 */ + +#ifndef GL_NV_video_capture +#define GL_NV_video_capture 1 +#define GL_VIDEO_BUFFER_NV 0x9020 +#define GL_VIDEO_BUFFER_BINDING_NV 0x9021 +#define GL_FIELD_UPPER_NV 0x9022 +#define GL_FIELD_LOWER_NV 0x9023 +#define GL_NUM_VIDEO_CAPTURE_STREAMS_NV 0x9024 +#define GL_NEXT_VIDEO_CAPTURE_BUFFER_STATUS_NV 0x9025 +#define GL_VIDEO_CAPTURE_TO_422_SUPPORTED_NV 0x9026 +#define GL_LAST_VIDEO_CAPTURE_STATUS_NV 0x9027 +#define GL_VIDEO_BUFFER_PITCH_NV 0x9028 +#define GL_VIDEO_COLOR_CONVERSION_MATRIX_NV 0x9029 +#define GL_VIDEO_COLOR_CONVERSION_MAX_NV 0x902A +#define GL_VIDEO_COLOR_CONVERSION_MIN_NV 0x902B +#define GL_VIDEO_COLOR_CONVERSION_OFFSET_NV 0x902C +#define GL_VIDEO_BUFFER_INTERNAL_FORMAT_NV 0x902D +#define GL_PARTIAL_SUCCESS_NV 0x902E +#define GL_SUCCESS_NV 0x902F +#define GL_FAILURE_NV 0x9030 +#define GL_YCBYCR8_422_NV 0x9031 +#define GL_YCBAYCR8A_4224_NV 0x9032 +#define GL_Z6Y10Z6CB10Z6Y10Z6CR10_422_NV 0x9033 +#define GL_Z6Y10Z6CB10Z6A10Z6Y10Z6CR10Z6A10_4224_NV 0x9034 +#define GL_Z4Y12Z4CB12Z4Y12Z4CR12_422_NV 0x9035 +#define GL_Z4Y12Z4CB12Z4A12Z4Y12Z4CR12Z4A12_4224_NV 0x9036 +#define GL_Z4Y12Z4CB12Z4CR12_444_NV 0x9037 +#define GL_VIDEO_CAPTURE_FRAME_WIDTH_NV 0x9038 +#define GL_VIDEO_CAPTURE_FRAME_HEIGHT_NV 0x9039 +#define GL_VIDEO_CAPTURE_FIELD_UPPER_HEIGHT_NV 0x903A +#define GL_VIDEO_CAPTURE_FIELD_LOWER_HEIGHT_NV 0x903B +#define GL_VIDEO_CAPTURE_SURFACE_ORIGIN_NV 0x903C +typedef void (APIENTRYP PFNGLBEGINVIDEOCAPTURENVPROC) (GLuint video_capture_slot); +typedef void (APIENTRYP PFNGLBINDVIDEOCAPTURESTREAMBUFFERNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum frame_region, GLintptrARB offset); +typedef void (APIENTRYP PFNGLBINDVIDEOCAPTURESTREAMTEXTURENVPROC) (GLuint video_capture_slot, GLuint stream, GLenum frame_region, GLenum target, GLuint texture); +typedef void (APIENTRYP PFNGLENDVIDEOCAPTURENVPROC) (GLuint video_capture_slot); +typedef void (APIENTRYP PFNGLGETVIDEOCAPTUREIVNVPROC) (GLuint video_capture_slot, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETVIDEOCAPTURESTREAMIVNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETVIDEOCAPTURESTREAMFVNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETVIDEOCAPTURESTREAMDVNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum pname, GLdouble *params); +typedef GLenum (APIENTRYP PFNGLVIDEOCAPTURENVPROC) (GLuint video_capture_slot, GLuint *sequence_num, GLuint64EXT *capture_time); +typedef void (APIENTRYP PFNGLVIDEOCAPTURESTREAMPARAMETERIVNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLVIDEOCAPTURESTREAMPARAMETERFVNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLVIDEOCAPTURESTREAMPARAMETERDVNVPROC) (GLuint video_capture_slot, GLuint stream, GLenum pname, const GLdouble *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBeginVideoCaptureNV (GLuint video_capture_slot); +GLAPI void APIENTRY glBindVideoCaptureStreamBufferNV (GLuint video_capture_slot, GLuint stream, GLenum frame_region, GLintptrARB offset); +GLAPI void APIENTRY glBindVideoCaptureStreamTextureNV (GLuint video_capture_slot, GLuint stream, GLenum frame_region, GLenum target, GLuint texture); +GLAPI void APIENTRY glEndVideoCaptureNV (GLuint video_capture_slot); +GLAPI void APIENTRY glGetVideoCaptureivNV (GLuint video_capture_slot, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetVideoCaptureStreamivNV (GLuint video_capture_slot, GLuint stream, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetVideoCaptureStreamfvNV (GLuint video_capture_slot, GLuint stream, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetVideoCaptureStreamdvNV (GLuint video_capture_slot, GLuint stream, GLenum pname, GLdouble *params); +GLAPI GLenum APIENTRY glVideoCaptureNV (GLuint video_capture_slot, GLuint *sequence_num, GLuint64EXT *capture_time); +GLAPI void APIENTRY glVideoCaptureStreamParameterivNV (GLuint video_capture_slot, GLuint stream, GLenum pname, const GLint *params); +GLAPI void APIENTRY glVideoCaptureStreamParameterfvNV (GLuint video_capture_slot, GLuint stream, GLenum pname, const GLfloat *params); +GLAPI void APIENTRY glVideoCaptureStreamParameterdvNV (GLuint video_capture_slot, GLuint stream, GLenum pname, const GLdouble *params); +#endif +#endif /* GL_NV_video_capture */ + +#ifndef GL_NV_viewport_array2 +#define GL_NV_viewport_array2 1 +#endif /* GL_NV_viewport_array2 */ + +#ifndef GL_NV_viewport_swizzle +#define GL_NV_viewport_swizzle 1 +#define GL_VIEWPORT_SWIZZLE_POSITIVE_X_NV 0x9350 +#define GL_VIEWPORT_SWIZZLE_NEGATIVE_X_NV 0x9351 +#define GL_VIEWPORT_SWIZZLE_POSITIVE_Y_NV 0x9352 +#define GL_VIEWPORT_SWIZZLE_NEGATIVE_Y_NV 0x9353 +#define GL_VIEWPORT_SWIZZLE_POSITIVE_Z_NV 0x9354 +#define GL_VIEWPORT_SWIZZLE_NEGATIVE_Z_NV 0x9355 +#define GL_VIEWPORT_SWIZZLE_POSITIVE_W_NV 0x9356 +#define GL_VIEWPORT_SWIZZLE_NEGATIVE_W_NV 0x9357 +#define GL_VIEWPORT_SWIZZLE_X_NV 0x9358 +#define GL_VIEWPORT_SWIZZLE_Y_NV 0x9359 +#define GL_VIEWPORT_SWIZZLE_Z_NV 0x935A +#define GL_VIEWPORT_SWIZZLE_W_NV 0x935B +typedef void (APIENTRYP PFNGLVIEWPORTSWIZZLENVPROC) (GLuint index, GLenum swizzlex, GLenum swizzley, GLenum swizzlez, GLenum swizzlew); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glViewportSwizzleNV (GLuint index, GLenum swizzlex, GLenum swizzley, GLenum swizzlez, GLenum swizzlew); +#endif +#endif /* GL_NV_viewport_swizzle */ + +#ifndef GL_OML_interlace +#define GL_OML_interlace 1 +#define GL_INTERLACE_OML 0x8980 +#define GL_INTERLACE_READ_OML 0x8981 +#endif /* GL_OML_interlace */ + +#ifndef GL_OML_resample +#define GL_OML_resample 1 +#define GL_PACK_RESAMPLE_OML 0x8984 +#define GL_UNPACK_RESAMPLE_OML 0x8985 +#define GL_RESAMPLE_REPLICATE_OML 0x8986 +#define GL_RESAMPLE_ZERO_FILL_OML 0x8987 +#define GL_RESAMPLE_AVERAGE_OML 0x8988 +#define GL_RESAMPLE_DECIMATE_OML 0x8989 +#endif /* GL_OML_resample */ + +#ifndef GL_OML_subsample +#define GL_OML_subsample 1 +#define GL_FORMAT_SUBSAMPLE_24_24_OML 0x8982 +#define GL_FORMAT_SUBSAMPLE_244_244_OML 0x8983 +#endif /* GL_OML_subsample */ + +#ifndef GL_OVR_multiview +#define GL_OVR_multiview 1 +#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_NUM_VIEWS_OVR 0x9630 +#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_BASE_VIEW_INDEX_OVR 0x9632 +#define GL_MAX_VIEWS_OVR 0x9631 +#define GL_FRAMEBUFFER_INCOMPLETE_VIEW_TARGETS_OVR 0x9633 +typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTUREMULTIVIEWOVRPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint baseViewIndex, GLsizei numViews); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glFramebufferTextureMultiviewOVR (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint baseViewIndex, GLsizei numViews); +#endif +#endif /* GL_OVR_multiview */ + +#ifndef GL_OVR_multiview2 +#define GL_OVR_multiview2 1 +#endif /* GL_OVR_multiview2 */ + +#ifndef GL_PGI_misc_hints +#define GL_PGI_misc_hints 1 +#define GL_PREFER_DOUBLEBUFFER_HINT_PGI 0x1A1F8 +#define GL_CONSERVE_MEMORY_HINT_PGI 0x1A1FD +#define GL_RECLAIM_MEMORY_HINT_PGI 0x1A1FE +#define GL_NATIVE_GRAPHICS_HANDLE_PGI 0x1A202 +#define GL_NATIVE_GRAPHICS_BEGIN_HINT_PGI 0x1A203 +#define GL_NATIVE_GRAPHICS_END_HINT_PGI 0x1A204 +#define GL_ALWAYS_FAST_HINT_PGI 0x1A20C +#define GL_ALWAYS_SOFT_HINT_PGI 0x1A20D +#define GL_ALLOW_DRAW_OBJ_HINT_PGI 0x1A20E +#define GL_ALLOW_DRAW_WIN_HINT_PGI 0x1A20F +#define GL_ALLOW_DRAW_FRG_HINT_PGI 0x1A210 +#define GL_ALLOW_DRAW_MEM_HINT_PGI 0x1A211 +#define GL_STRICT_DEPTHFUNC_HINT_PGI 0x1A216 +#define GL_STRICT_LIGHTING_HINT_PGI 0x1A217 +#define GL_STRICT_SCISSOR_HINT_PGI 0x1A218 +#define GL_FULL_STIPPLE_HINT_PGI 0x1A219 +#define GL_CLIP_NEAR_HINT_PGI 0x1A220 +#define GL_CLIP_FAR_HINT_PGI 0x1A221 +#define GL_WIDE_LINE_HINT_PGI 0x1A222 +#define GL_BACK_NORMALS_HINT_PGI 0x1A223 +typedef void (APIENTRYP PFNGLHINTPGIPROC) (GLenum target, GLint mode); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glHintPGI (GLenum target, GLint mode); +#endif +#endif /* GL_PGI_misc_hints */ + +#ifndef GL_PGI_vertex_hints +#define GL_PGI_vertex_hints 1 +#define GL_VERTEX_DATA_HINT_PGI 0x1A22A +#define GL_VERTEX_CONSISTENT_HINT_PGI 0x1A22B +#define GL_MATERIAL_SIDE_HINT_PGI 0x1A22C +#define GL_MAX_VERTEX_HINT_PGI 0x1A22D +#define GL_COLOR3_BIT_PGI 0x00010000 +#define GL_COLOR4_BIT_PGI 0x00020000 +#define GL_EDGEFLAG_BIT_PGI 0x00040000 +#define GL_INDEX_BIT_PGI 0x00080000 +#define GL_MAT_AMBIENT_BIT_PGI 0x00100000 +#define GL_MAT_AMBIENT_AND_DIFFUSE_BIT_PGI 0x00200000 +#define GL_MAT_DIFFUSE_BIT_PGI 0x00400000 +#define GL_MAT_EMISSION_BIT_PGI 0x00800000 +#define GL_MAT_COLOR_INDEXES_BIT_PGI 0x01000000 +#define GL_MAT_SHININESS_BIT_PGI 0x02000000 +#define GL_MAT_SPECULAR_BIT_PGI 0x04000000 +#define GL_NORMAL_BIT_PGI 0x08000000 +#define GL_TEXCOORD1_BIT_PGI 0x10000000 +#define GL_TEXCOORD2_BIT_PGI 0x20000000 +#define GL_TEXCOORD3_BIT_PGI 0x40000000 +#define GL_TEXCOORD4_BIT_PGI 0x80000000 +#define GL_VERTEX23_BIT_PGI 0x00000004 +#define GL_VERTEX4_BIT_PGI 0x00000008 +#endif /* GL_PGI_vertex_hints */ + +#ifndef GL_REND_screen_coordinates +#define GL_REND_screen_coordinates 1 +#define GL_SCREEN_COORDINATES_REND 0x8490 +#define GL_INVERTED_SCREEN_W_REND 0x8491 +#endif /* GL_REND_screen_coordinates */ + +#ifndef GL_S3_s3tc +#define GL_S3_s3tc 1 +#define GL_RGB_S3TC 0x83A0 +#define GL_RGB4_S3TC 0x83A1 +#define GL_RGBA_S3TC 0x83A2 +#define GL_RGBA4_S3TC 0x83A3 +#define GL_RGBA_DXT5_S3TC 0x83A4 +#define GL_RGBA4_DXT5_S3TC 0x83A5 +#endif /* GL_S3_s3tc */ + +#ifndef GL_SGIS_detail_texture +#define GL_SGIS_detail_texture 1 +#define GL_DETAIL_TEXTURE_2D_SGIS 0x8095 +#define GL_DETAIL_TEXTURE_2D_BINDING_SGIS 0x8096 +#define GL_LINEAR_DETAIL_SGIS 0x8097 +#define GL_LINEAR_DETAIL_ALPHA_SGIS 0x8098 +#define GL_LINEAR_DETAIL_COLOR_SGIS 0x8099 +#define GL_DETAIL_TEXTURE_LEVEL_SGIS 0x809A +#define GL_DETAIL_TEXTURE_MODE_SGIS 0x809B +#define GL_DETAIL_TEXTURE_FUNC_POINTS_SGIS 0x809C +typedef void (APIENTRYP PFNGLDETAILTEXFUNCSGISPROC) (GLenum target, GLsizei n, const GLfloat *points); +typedef void (APIENTRYP PFNGLGETDETAILTEXFUNCSGISPROC) (GLenum target, GLfloat *points); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glDetailTexFuncSGIS (GLenum target, GLsizei n, const GLfloat *points); +GLAPI void APIENTRY glGetDetailTexFuncSGIS (GLenum target, GLfloat *points); +#endif +#endif /* GL_SGIS_detail_texture */ + +#ifndef GL_SGIS_fog_function +#define GL_SGIS_fog_function 1 +#define GL_FOG_FUNC_SGIS 0x812A +#define GL_FOG_FUNC_POINTS_SGIS 0x812B +#define GL_MAX_FOG_FUNC_POINTS_SGIS 0x812C +typedef void (APIENTRYP PFNGLFOGFUNCSGISPROC) (GLsizei n, const GLfloat *points); +typedef void (APIENTRYP PFNGLGETFOGFUNCSGISPROC) (GLfloat *points); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glFogFuncSGIS (GLsizei n, const GLfloat *points); +GLAPI void APIENTRY glGetFogFuncSGIS (GLfloat *points); +#endif +#endif /* GL_SGIS_fog_function */ + +#ifndef GL_SGIS_generate_mipmap +#define GL_SGIS_generate_mipmap 1 +#define GL_GENERATE_MIPMAP_SGIS 0x8191 +#define GL_GENERATE_MIPMAP_HINT_SGIS 0x8192 +#endif /* GL_SGIS_generate_mipmap */ + +#ifndef GL_SGIS_multisample +#define GL_SGIS_multisample 1 +#define GL_MULTISAMPLE_SGIS 0x809D +#define GL_SAMPLE_ALPHA_TO_MASK_SGIS 0x809E +#define GL_SAMPLE_ALPHA_TO_ONE_SGIS 0x809F +#define GL_SAMPLE_MASK_SGIS 0x80A0 +#define GL_1PASS_SGIS 0x80A1 +#define GL_2PASS_0_SGIS 0x80A2 +#define GL_2PASS_1_SGIS 0x80A3 +#define GL_4PASS_0_SGIS 0x80A4 +#define GL_4PASS_1_SGIS 0x80A5 +#define GL_4PASS_2_SGIS 0x80A6 +#define GL_4PASS_3_SGIS 0x80A7 +#define GL_SAMPLE_BUFFERS_SGIS 0x80A8 +#define GL_SAMPLES_SGIS 0x80A9 +#define GL_SAMPLE_MASK_VALUE_SGIS 0x80AA +#define GL_SAMPLE_MASK_INVERT_SGIS 0x80AB +#define GL_SAMPLE_PATTERN_SGIS 0x80AC +typedef void (APIENTRYP PFNGLSAMPLEMASKSGISPROC) (GLclampf value, GLboolean invert); +typedef void (APIENTRYP PFNGLSAMPLEPATTERNSGISPROC) (GLenum pattern); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glSampleMaskSGIS (GLclampf value, GLboolean invert); +GLAPI void APIENTRY glSamplePatternSGIS (GLenum pattern); +#endif +#endif /* GL_SGIS_multisample */ + +#ifndef GL_SGIS_pixel_texture +#define GL_SGIS_pixel_texture 1 +#define GL_PIXEL_TEXTURE_SGIS 0x8353 +#define GL_PIXEL_FRAGMENT_RGB_SOURCE_SGIS 0x8354 +#define GL_PIXEL_FRAGMENT_ALPHA_SOURCE_SGIS 0x8355 +#define GL_PIXEL_GROUP_COLOR_SGIS 0x8356 +typedef void (APIENTRYP PFNGLPIXELTEXGENPARAMETERISGISPROC) (GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLPIXELTEXGENPARAMETERIVSGISPROC) (GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLPIXELTEXGENPARAMETERFSGISPROC) (GLenum pname, GLfloat param); +typedef void (APIENTRYP PFNGLPIXELTEXGENPARAMETERFVSGISPROC) (GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLGETPIXELTEXGENPARAMETERIVSGISPROC) (GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETPIXELTEXGENPARAMETERFVSGISPROC) (GLenum pname, GLfloat *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glPixelTexGenParameteriSGIS (GLenum pname, GLint param); +GLAPI void APIENTRY glPixelTexGenParameterivSGIS (GLenum pname, const GLint *params); +GLAPI void APIENTRY glPixelTexGenParameterfSGIS (GLenum pname, GLfloat param); +GLAPI void APIENTRY glPixelTexGenParameterfvSGIS (GLenum pname, const GLfloat *params); +GLAPI void APIENTRY glGetPixelTexGenParameterivSGIS (GLenum pname, GLint *params); +GLAPI void APIENTRY glGetPixelTexGenParameterfvSGIS (GLenum pname, GLfloat *params); +#endif +#endif /* GL_SGIS_pixel_texture */ + +#ifndef GL_SGIS_point_line_texgen +#define GL_SGIS_point_line_texgen 1 +#define GL_EYE_DISTANCE_TO_POINT_SGIS 0x81F0 +#define GL_OBJECT_DISTANCE_TO_POINT_SGIS 0x81F1 +#define GL_EYE_DISTANCE_TO_LINE_SGIS 0x81F2 +#define GL_OBJECT_DISTANCE_TO_LINE_SGIS 0x81F3 +#define GL_EYE_POINT_SGIS 0x81F4 +#define GL_OBJECT_POINT_SGIS 0x81F5 +#define GL_EYE_LINE_SGIS 0x81F6 +#define GL_OBJECT_LINE_SGIS 0x81F7 +#endif /* GL_SGIS_point_line_texgen */ + +#ifndef GL_SGIS_point_parameters +#define GL_SGIS_point_parameters 1 +#define GL_POINT_SIZE_MIN_SGIS 0x8126 +#define GL_POINT_SIZE_MAX_SGIS 0x8127 +#define GL_POINT_FADE_THRESHOLD_SIZE_SGIS 0x8128 +#define GL_DISTANCE_ATTENUATION_SGIS 0x8129 +typedef void (APIENTRYP PFNGLPOINTPARAMETERFSGISPROC) (GLenum pname, GLfloat param); +typedef void (APIENTRYP PFNGLPOINTPARAMETERFVSGISPROC) (GLenum pname, const GLfloat *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glPointParameterfSGIS (GLenum pname, GLfloat param); +GLAPI void APIENTRY glPointParameterfvSGIS (GLenum pname, const GLfloat *params); +#endif +#endif /* GL_SGIS_point_parameters */ + +#ifndef GL_SGIS_sharpen_texture +#define GL_SGIS_sharpen_texture 1 +#define GL_LINEAR_SHARPEN_SGIS 0x80AD +#define GL_LINEAR_SHARPEN_ALPHA_SGIS 0x80AE +#define GL_LINEAR_SHARPEN_COLOR_SGIS 0x80AF +#define GL_SHARPEN_TEXTURE_FUNC_POINTS_SGIS 0x80B0 +typedef void (APIENTRYP PFNGLSHARPENTEXFUNCSGISPROC) (GLenum target, GLsizei n, const GLfloat *points); +typedef void (APIENTRYP PFNGLGETSHARPENTEXFUNCSGISPROC) (GLenum target, GLfloat *points); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glSharpenTexFuncSGIS (GLenum target, GLsizei n, const GLfloat *points); +GLAPI void APIENTRY glGetSharpenTexFuncSGIS (GLenum target, GLfloat *points); +#endif +#endif /* GL_SGIS_sharpen_texture */ + +#ifndef GL_SGIS_texture4D +#define GL_SGIS_texture4D 1 +#define GL_PACK_SKIP_VOLUMES_SGIS 0x8130 +#define GL_PACK_IMAGE_DEPTH_SGIS 0x8131 +#define GL_UNPACK_SKIP_VOLUMES_SGIS 0x8132 +#define GL_UNPACK_IMAGE_DEPTH_SGIS 0x8133 +#define GL_TEXTURE_4D_SGIS 0x8134 +#define GL_PROXY_TEXTURE_4D_SGIS 0x8135 +#define GL_TEXTURE_4DSIZE_SGIS 0x8136 +#define GL_TEXTURE_WRAP_Q_SGIS 0x8137 +#define GL_MAX_4D_TEXTURE_SIZE_SGIS 0x8138 +#define GL_TEXTURE_4D_BINDING_SGIS 0x814F +typedef void (APIENTRYP PFNGLTEXIMAGE4DSGISPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLsizei size4d, GLint border, GLenum format, GLenum type, const void *pixels); +typedef void (APIENTRYP PFNGLTEXSUBIMAGE4DSGISPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint woffset, GLsizei width, GLsizei height, GLsizei depth, GLsizei size4d, GLenum format, GLenum type, const void *pixels); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glTexImage4DSGIS (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLsizei size4d, GLint border, GLenum format, GLenum type, const void *pixels); +GLAPI void APIENTRY glTexSubImage4DSGIS (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint woffset, GLsizei width, GLsizei height, GLsizei depth, GLsizei size4d, GLenum format, GLenum type, const void *pixels); +#endif +#endif /* GL_SGIS_texture4D */ + +#ifndef GL_SGIS_texture_border_clamp +#define GL_SGIS_texture_border_clamp 1 +#define GL_CLAMP_TO_BORDER_SGIS 0x812D +#endif /* GL_SGIS_texture_border_clamp */ + +#ifndef GL_SGIS_texture_color_mask +#define GL_SGIS_texture_color_mask 1 +#define GL_TEXTURE_COLOR_WRITEMASK_SGIS 0x81EF +typedef void (APIENTRYP PFNGLTEXTURECOLORMASKSGISPROC) (GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glTextureColorMaskSGIS (GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha); +#endif +#endif /* GL_SGIS_texture_color_mask */ + +#ifndef GL_SGIS_texture_edge_clamp +#define GL_SGIS_texture_edge_clamp 1 +#define GL_CLAMP_TO_EDGE_SGIS 0x812F +#endif /* GL_SGIS_texture_edge_clamp */ + +#ifndef GL_SGIS_texture_filter4 +#define GL_SGIS_texture_filter4 1 +#define GL_FILTER4_SGIS 0x8146 +#define GL_TEXTURE_FILTER4_SIZE_SGIS 0x8147 +typedef void (APIENTRYP PFNGLGETTEXFILTERFUNCSGISPROC) (GLenum target, GLenum filter, GLfloat *weights); +typedef void (APIENTRYP PFNGLTEXFILTERFUNCSGISPROC) (GLenum target, GLenum filter, GLsizei n, const GLfloat *weights); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glGetTexFilterFuncSGIS (GLenum target, GLenum filter, GLfloat *weights); +GLAPI void APIENTRY glTexFilterFuncSGIS (GLenum target, GLenum filter, GLsizei n, const GLfloat *weights); +#endif +#endif /* GL_SGIS_texture_filter4 */ + +#ifndef GL_SGIS_texture_lod +#define GL_SGIS_texture_lod 1 +#define GL_TEXTURE_MIN_LOD_SGIS 0x813A +#define GL_TEXTURE_MAX_LOD_SGIS 0x813B +#define GL_TEXTURE_BASE_LEVEL_SGIS 0x813C +#define GL_TEXTURE_MAX_LEVEL_SGIS 0x813D +#endif /* GL_SGIS_texture_lod */ + +#ifndef GL_SGIS_texture_select +#define GL_SGIS_texture_select 1 +#define GL_DUAL_ALPHA4_SGIS 0x8110 +#define GL_DUAL_ALPHA8_SGIS 0x8111 +#define GL_DUAL_ALPHA12_SGIS 0x8112 +#define GL_DUAL_ALPHA16_SGIS 0x8113 +#define GL_DUAL_LUMINANCE4_SGIS 0x8114 +#define GL_DUAL_LUMINANCE8_SGIS 0x8115 +#define GL_DUAL_LUMINANCE12_SGIS 0x8116 +#define GL_DUAL_LUMINANCE16_SGIS 0x8117 +#define GL_DUAL_INTENSITY4_SGIS 0x8118 +#define GL_DUAL_INTENSITY8_SGIS 0x8119 +#define GL_DUAL_INTENSITY12_SGIS 0x811A +#define GL_DUAL_INTENSITY16_SGIS 0x811B +#define GL_DUAL_LUMINANCE_ALPHA4_SGIS 0x811C +#define GL_DUAL_LUMINANCE_ALPHA8_SGIS 0x811D +#define GL_QUAD_ALPHA4_SGIS 0x811E +#define GL_QUAD_ALPHA8_SGIS 0x811F +#define GL_QUAD_LUMINANCE4_SGIS 0x8120 +#define GL_QUAD_LUMINANCE8_SGIS 0x8121 +#define GL_QUAD_INTENSITY4_SGIS 0x8122 +#define GL_QUAD_INTENSITY8_SGIS 0x8123 +#define GL_DUAL_TEXTURE_SELECT_SGIS 0x8124 +#define GL_QUAD_TEXTURE_SELECT_SGIS 0x8125 +#endif /* GL_SGIS_texture_select */ + +#ifndef GL_SGIX_async +#define GL_SGIX_async 1 +#define GL_ASYNC_MARKER_SGIX 0x8329 +typedef void (APIENTRYP PFNGLASYNCMARKERSGIXPROC) (GLuint marker); +typedef GLint (APIENTRYP PFNGLFINISHASYNCSGIXPROC) (GLuint *markerp); +typedef GLint (APIENTRYP PFNGLPOLLASYNCSGIXPROC) (GLuint *markerp); +typedef GLuint (APIENTRYP PFNGLGENASYNCMARKERSSGIXPROC) (GLsizei range); +typedef void (APIENTRYP PFNGLDELETEASYNCMARKERSSGIXPROC) (GLuint marker, GLsizei range); +typedef GLboolean (APIENTRYP PFNGLISASYNCMARKERSGIXPROC) (GLuint marker); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glAsyncMarkerSGIX (GLuint marker); +GLAPI GLint APIENTRY glFinishAsyncSGIX (GLuint *markerp); +GLAPI GLint APIENTRY glPollAsyncSGIX (GLuint *markerp); +GLAPI GLuint APIENTRY glGenAsyncMarkersSGIX (GLsizei range); +GLAPI void APIENTRY glDeleteAsyncMarkersSGIX (GLuint marker, GLsizei range); +GLAPI GLboolean APIENTRY glIsAsyncMarkerSGIX (GLuint marker); +#endif +#endif /* GL_SGIX_async */ + +#ifndef GL_SGIX_async_histogram +#define GL_SGIX_async_histogram 1 +#define GL_ASYNC_HISTOGRAM_SGIX 0x832C +#define GL_MAX_ASYNC_HISTOGRAM_SGIX 0x832D +#endif /* GL_SGIX_async_histogram */ + +#ifndef GL_SGIX_async_pixel +#define GL_SGIX_async_pixel 1 +#define GL_ASYNC_TEX_IMAGE_SGIX 0x835C +#define GL_ASYNC_DRAW_PIXELS_SGIX 0x835D +#define GL_ASYNC_READ_PIXELS_SGIX 0x835E +#define GL_MAX_ASYNC_TEX_IMAGE_SGIX 0x835F +#define GL_MAX_ASYNC_DRAW_PIXELS_SGIX 0x8360 +#define GL_MAX_ASYNC_READ_PIXELS_SGIX 0x8361 +#endif /* GL_SGIX_async_pixel */ + +#ifndef GL_SGIX_blend_alpha_minmax +#define GL_SGIX_blend_alpha_minmax 1 +#define GL_ALPHA_MIN_SGIX 0x8320 +#define GL_ALPHA_MAX_SGIX 0x8321 +#endif /* GL_SGIX_blend_alpha_minmax */ + +#ifndef GL_SGIX_calligraphic_fragment +#define GL_SGIX_calligraphic_fragment 1 +#define GL_CALLIGRAPHIC_FRAGMENT_SGIX 0x8183 +#endif /* GL_SGIX_calligraphic_fragment */ + +#ifndef GL_SGIX_clipmap +#define GL_SGIX_clipmap 1 +#define GL_LINEAR_CLIPMAP_LINEAR_SGIX 0x8170 +#define GL_TEXTURE_CLIPMAP_CENTER_SGIX 0x8171 +#define GL_TEXTURE_CLIPMAP_FRAME_SGIX 0x8172 +#define GL_TEXTURE_CLIPMAP_OFFSET_SGIX 0x8173 +#define GL_TEXTURE_CLIPMAP_VIRTUAL_DEPTH_SGIX 0x8174 +#define GL_TEXTURE_CLIPMAP_LOD_OFFSET_SGIX 0x8175 +#define GL_TEXTURE_CLIPMAP_DEPTH_SGIX 0x8176 +#define GL_MAX_CLIPMAP_DEPTH_SGIX 0x8177 +#define GL_MAX_CLIPMAP_VIRTUAL_DEPTH_SGIX 0x8178 +#define GL_NEAREST_CLIPMAP_NEAREST_SGIX 0x844D +#define GL_NEAREST_CLIPMAP_LINEAR_SGIX 0x844E +#define GL_LINEAR_CLIPMAP_NEAREST_SGIX 0x844F +#endif /* GL_SGIX_clipmap */ + +#ifndef GL_SGIX_convolution_accuracy +#define GL_SGIX_convolution_accuracy 1 +#define GL_CONVOLUTION_HINT_SGIX 0x8316 +#endif /* GL_SGIX_convolution_accuracy */ + +#ifndef GL_SGIX_depth_pass_instrument +#define GL_SGIX_depth_pass_instrument 1 +#endif /* GL_SGIX_depth_pass_instrument */ + +#ifndef GL_SGIX_depth_texture +#define GL_SGIX_depth_texture 1 +#define GL_DEPTH_COMPONENT16_SGIX 0x81A5 +#define GL_DEPTH_COMPONENT24_SGIX 0x81A6 +#define GL_DEPTH_COMPONENT32_SGIX 0x81A7 +#endif /* GL_SGIX_depth_texture */ + +#ifndef GL_SGIX_flush_raster +#define GL_SGIX_flush_raster 1 +typedef void (APIENTRYP PFNGLFLUSHRASTERSGIXPROC) (void); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glFlushRasterSGIX (void); +#endif +#endif /* GL_SGIX_flush_raster */ + +#ifndef GL_SGIX_fog_offset +#define GL_SGIX_fog_offset 1 +#define GL_FOG_OFFSET_SGIX 0x8198 +#define GL_FOG_OFFSET_VALUE_SGIX 0x8199 +#endif /* GL_SGIX_fog_offset */ + +#ifndef GL_SGIX_fragment_lighting +#define GL_SGIX_fragment_lighting 1 +#define GL_FRAGMENT_LIGHTING_SGIX 0x8400 +#define GL_FRAGMENT_COLOR_MATERIAL_SGIX 0x8401 +#define GL_FRAGMENT_COLOR_MATERIAL_FACE_SGIX 0x8402 +#define GL_FRAGMENT_COLOR_MATERIAL_PARAMETER_SGIX 0x8403 +#define GL_MAX_FRAGMENT_LIGHTS_SGIX 0x8404 +#define GL_MAX_ACTIVE_LIGHTS_SGIX 0x8405 +#define GL_CURRENT_RASTER_NORMAL_SGIX 0x8406 +#define GL_LIGHT_ENV_MODE_SGIX 0x8407 +#define GL_FRAGMENT_LIGHT_MODEL_LOCAL_VIEWER_SGIX 0x8408 +#define GL_FRAGMENT_LIGHT_MODEL_TWO_SIDE_SGIX 0x8409 +#define GL_FRAGMENT_LIGHT_MODEL_AMBIENT_SGIX 0x840A +#define GL_FRAGMENT_LIGHT_MODEL_NORMAL_INTERPOLATION_SGIX 0x840B +#define GL_FRAGMENT_LIGHT0_SGIX 0x840C +#define GL_FRAGMENT_LIGHT1_SGIX 0x840D +#define GL_FRAGMENT_LIGHT2_SGIX 0x840E +#define GL_FRAGMENT_LIGHT3_SGIX 0x840F +#define GL_FRAGMENT_LIGHT4_SGIX 0x8410 +#define GL_FRAGMENT_LIGHT5_SGIX 0x8411 +#define GL_FRAGMENT_LIGHT6_SGIX 0x8412 +#define GL_FRAGMENT_LIGHT7_SGIX 0x8413 +typedef void (APIENTRYP PFNGLFRAGMENTCOLORMATERIALSGIXPROC) (GLenum face, GLenum mode); +typedef void (APIENTRYP PFNGLFRAGMENTLIGHTFSGIXPROC) (GLenum light, GLenum pname, GLfloat param); +typedef void (APIENTRYP PFNGLFRAGMENTLIGHTFVSGIXPROC) (GLenum light, GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLFRAGMENTLIGHTISGIXPROC) (GLenum light, GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLFRAGMENTLIGHTIVSGIXPROC) (GLenum light, GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLFRAGMENTLIGHTMODELFSGIXPROC) (GLenum pname, GLfloat param); +typedef void (APIENTRYP PFNGLFRAGMENTLIGHTMODELFVSGIXPROC) (GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLFRAGMENTLIGHTMODELISGIXPROC) (GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLFRAGMENTLIGHTMODELIVSGIXPROC) (GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLFRAGMENTMATERIALFSGIXPROC) (GLenum face, GLenum pname, GLfloat param); +typedef void (APIENTRYP PFNGLFRAGMENTMATERIALFVSGIXPROC) (GLenum face, GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLFRAGMENTMATERIALISGIXPROC) (GLenum face, GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLFRAGMENTMATERIALIVSGIXPROC) (GLenum face, GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLGETFRAGMENTLIGHTFVSGIXPROC) (GLenum light, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETFRAGMENTLIGHTIVSGIXPROC) (GLenum light, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETFRAGMENTMATERIALFVSGIXPROC) (GLenum face, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETFRAGMENTMATERIALIVSGIXPROC) (GLenum face, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLLIGHTENVISGIXPROC) (GLenum pname, GLint param); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glFragmentColorMaterialSGIX (GLenum face, GLenum mode); +GLAPI void APIENTRY glFragmentLightfSGIX (GLenum light, GLenum pname, GLfloat param); +GLAPI void APIENTRY glFragmentLightfvSGIX (GLenum light, GLenum pname, const GLfloat *params); +GLAPI void APIENTRY glFragmentLightiSGIX (GLenum light, GLenum pname, GLint param); +GLAPI void APIENTRY glFragmentLightivSGIX (GLenum light, GLenum pname, const GLint *params); +GLAPI void APIENTRY glFragmentLightModelfSGIX (GLenum pname, GLfloat param); +GLAPI void APIENTRY glFragmentLightModelfvSGIX (GLenum pname, const GLfloat *params); +GLAPI void APIENTRY glFragmentLightModeliSGIX (GLenum pname, GLint param); +GLAPI void APIENTRY glFragmentLightModelivSGIX (GLenum pname, const GLint *params); +GLAPI void APIENTRY glFragmentMaterialfSGIX (GLenum face, GLenum pname, GLfloat param); +GLAPI void APIENTRY glFragmentMaterialfvSGIX (GLenum face, GLenum pname, const GLfloat *params); +GLAPI void APIENTRY glFragmentMaterialiSGIX (GLenum face, GLenum pname, GLint param); +GLAPI void APIENTRY glFragmentMaterialivSGIX (GLenum face, GLenum pname, const GLint *params); +GLAPI void APIENTRY glGetFragmentLightfvSGIX (GLenum light, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetFragmentLightivSGIX (GLenum light, GLenum pname, GLint *params); +GLAPI void APIENTRY glGetFragmentMaterialfvSGIX (GLenum face, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetFragmentMaterialivSGIX (GLenum face, GLenum pname, GLint *params); +GLAPI void APIENTRY glLightEnviSGIX (GLenum pname, GLint param); +#endif +#endif /* GL_SGIX_fragment_lighting */ + +#ifndef GL_SGIX_framezoom +#define GL_SGIX_framezoom 1 +#define GL_FRAMEZOOM_SGIX 0x818B +#define GL_FRAMEZOOM_FACTOR_SGIX 0x818C +#define GL_MAX_FRAMEZOOM_FACTOR_SGIX 0x818D +typedef void (APIENTRYP PFNGLFRAMEZOOMSGIXPROC) (GLint factor); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glFrameZoomSGIX (GLint factor); +#endif +#endif /* GL_SGIX_framezoom */ + +#ifndef GL_SGIX_igloo_interface +#define GL_SGIX_igloo_interface 1 +typedef void (APIENTRYP PFNGLIGLOOINTERFACESGIXPROC) (GLenum pname, const void *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glIglooInterfaceSGIX (GLenum pname, const void *params); +#endif +#endif /* GL_SGIX_igloo_interface */ + +#ifndef GL_SGIX_instruments +#define GL_SGIX_instruments 1 +#define GL_INSTRUMENT_BUFFER_POINTER_SGIX 0x8180 +#define GL_INSTRUMENT_MEASUREMENTS_SGIX 0x8181 +typedef GLint (APIENTRYP PFNGLGETINSTRUMENTSSGIXPROC) (void); +typedef void (APIENTRYP PFNGLINSTRUMENTSBUFFERSGIXPROC) (GLsizei size, GLint *buffer); +typedef GLint (APIENTRYP PFNGLPOLLINSTRUMENTSSGIXPROC) (GLint *marker_p); +typedef void (APIENTRYP PFNGLREADINSTRUMENTSSGIXPROC) (GLint marker); +typedef void (APIENTRYP PFNGLSTARTINSTRUMENTSSGIXPROC) (void); +typedef void (APIENTRYP PFNGLSTOPINSTRUMENTSSGIXPROC) (GLint marker); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI GLint APIENTRY glGetInstrumentsSGIX (void); +GLAPI void APIENTRY glInstrumentsBufferSGIX (GLsizei size, GLint *buffer); +GLAPI GLint APIENTRY glPollInstrumentsSGIX (GLint *marker_p); +GLAPI void APIENTRY glReadInstrumentsSGIX (GLint marker); +GLAPI void APIENTRY glStartInstrumentsSGIX (void); +GLAPI void APIENTRY glStopInstrumentsSGIX (GLint marker); +#endif +#endif /* GL_SGIX_instruments */ + +#ifndef GL_SGIX_interlace +#define GL_SGIX_interlace 1 +#define GL_INTERLACE_SGIX 0x8094 +#endif /* GL_SGIX_interlace */ + +#ifndef GL_SGIX_ir_instrument1 +#define GL_SGIX_ir_instrument1 1 +#define GL_IR_INSTRUMENT1_SGIX 0x817F +#endif /* GL_SGIX_ir_instrument1 */ + +#ifndef GL_SGIX_list_priority +#define GL_SGIX_list_priority 1 +#define GL_LIST_PRIORITY_SGIX 0x8182 +typedef void (APIENTRYP PFNGLGETLISTPARAMETERFVSGIXPROC) (GLuint list, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETLISTPARAMETERIVSGIXPROC) (GLuint list, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLLISTPARAMETERFSGIXPROC) (GLuint list, GLenum pname, GLfloat param); +typedef void (APIENTRYP PFNGLLISTPARAMETERFVSGIXPROC) (GLuint list, GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLLISTPARAMETERISGIXPROC) (GLuint list, GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLLISTPARAMETERIVSGIXPROC) (GLuint list, GLenum pname, const GLint *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glGetListParameterfvSGIX (GLuint list, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetListParameterivSGIX (GLuint list, GLenum pname, GLint *params); +GLAPI void APIENTRY glListParameterfSGIX (GLuint list, GLenum pname, GLfloat param); +GLAPI void APIENTRY glListParameterfvSGIX (GLuint list, GLenum pname, const GLfloat *params); +GLAPI void APIENTRY glListParameteriSGIX (GLuint list, GLenum pname, GLint param); +GLAPI void APIENTRY glListParameterivSGIX (GLuint list, GLenum pname, const GLint *params); +#endif +#endif /* GL_SGIX_list_priority */ + +#ifndef GL_SGIX_pixel_texture +#define GL_SGIX_pixel_texture 1 +#define GL_PIXEL_TEX_GEN_SGIX 0x8139 +#define GL_PIXEL_TEX_GEN_MODE_SGIX 0x832B +typedef void (APIENTRYP PFNGLPIXELTEXGENSGIXPROC) (GLenum mode); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glPixelTexGenSGIX (GLenum mode); +#endif +#endif /* GL_SGIX_pixel_texture */ + +#ifndef GL_SGIX_pixel_tiles +#define GL_SGIX_pixel_tiles 1 +#define GL_PIXEL_TILE_BEST_ALIGNMENT_SGIX 0x813E +#define GL_PIXEL_TILE_CACHE_INCREMENT_SGIX 0x813F +#define GL_PIXEL_TILE_WIDTH_SGIX 0x8140 +#define GL_PIXEL_TILE_HEIGHT_SGIX 0x8141 +#define GL_PIXEL_TILE_GRID_WIDTH_SGIX 0x8142 +#define GL_PIXEL_TILE_GRID_HEIGHT_SGIX 0x8143 +#define GL_PIXEL_TILE_GRID_DEPTH_SGIX 0x8144 +#define GL_PIXEL_TILE_CACHE_SIZE_SGIX 0x8145 +#endif /* GL_SGIX_pixel_tiles */ + +#ifndef GL_SGIX_polynomial_ffd +#define GL_SGIX_polynomial_ffd 1 +#define GL_TEXTURE_DEFORMATION_BIT_SGIX 0x00000001 +#define GL_GEOMETRY_DEFORMATION_BIT_SGIX 0x00000002 +#define GL_GEOMETRY_DEFORMATION_SGIX 0x8194 +#define GL_TEXTURE_DEFORMATION_SGIX 0x8195 +#define GL_DEFORMATIONS_MASK_SGIX 0x8196 +#define GL_MAX_DEFORMATION_ORDER_SGIX 0x8197 +typedef void (APIENTRYP PFNGLDEFORMATIONMAP3DSGIXPROC) (GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, GLdouble w1, GLdouble w2, GLint wstride, GLint worder, const GLdouble *points); +typedef void (APIENTRYP PFNGLDEFORMATIONMAP3FSGIXPROC) (GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, GLfloat w1, GLfloat w2, GLint wstride, GLint worder, const GLfloat *points); +typedef void (APIENTRYP PFNGLDEFORMSGIXPROC) (GLbitfield mask); +typedef void (APIENTRYP PFNGLLOADIDENTITYDEFORMATIONMAPSGIXPROC) (GLbitfield mask); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glDeformationMap3dSGIX (GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, GLdouble w1, GLdouble w2, GLint wstride, GLint worder, const GLdouble *points); +GLAPI void APIENTRY glDeformationMap3fSGIX (GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, GLfloat w1, GLfloat w2, GLint wstride, GLint worder, const GLfloat *points); +GLAPI void APIENTRY glDeformSGIX (GLbitfield mask); +GLAPI void APIENTRY glLoadIdentityDeformationMapSGIX (GLbitfield mask); +#endif +#endif /* GL_SGIX_polynomial_ffd */ + +#ifndef GL_SGIX_reference_plane +#define GL_SGIX_reference_plane 1 +#define GL_REFERENCE_PLANE_SGIX 0x817D +#define GL_REFERENCE_PLANE_EQUATION_SGIX 0x817E +typedef void (APIENTRYP PFNGLREFERENCEPLANESGIXPROC) (const GLdouble *equation); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glReferencePlaneSGIX (const GLdouble *equation); +#endif +#endif /* GL_SGIX_reference_plane */ + +#ifndef GL_SGIX_resample +#define GL_SGIX_resample 1 +#define GL_PACK_RESAMPLE_SGIX 0x842E +#define GL_UNPACK_RESAMPLE_SGIX 0x842F +#define GL_RESAMPLE_REPLICATE_SGIX 0x8433 +#define GL_RESAMPLE_ZERO_FILL_SGIX 0x8434 +#define GL_RESAMPLE_DECIMATE_SGIX 0x8430 +#endif /* GL_SGIX_resample */ + +#ifndef GL_SGIX_scalebias_hint +#define GL_SGIX_scalebias_hint 1 +#define GL_SCALEBIAS_HINT_SGIX 0x8322 +#endif /* GL_SGIX_scalebias_hint */ + +#ifndef GL_SGIX_shadow +#define GL_SGIX_shadow 1 +#define GL_TEXTURE_COMPARE_SGIX 0x819A +#define GL_TEXTURE_COMPARE_OPERATOR_SGIX 0x819B +#define GL_TEXTURE_LEQUAL_R_SGIX 0x819C +#define GL_TEXTURE_GEQUAL_R_SGIX 0x819D +#endif /* GL_SGIX_shadow */ + +#ifndef GL_SGIX_shadow_ambient +#define GL_SGIX_shadow_ambient 1 +#define GL_SHADOW_AMBIENT_SGIX 0x80BF +#endif /* GL_SGIX_shadow_ambient */ + +#ifndef GL_SGIX_sprite +#define GL_SGIX_sprite 1 +#define GL_SPRITE_SGIX 0x8148 +#define GL_SPRITE_MODE_SGIX 0x8149 +#define GL_SPRITE_AXIS_SGIX 0x814A +#define GL_SPRITE_TRANSLATION_SGIX 0x814B +#define GL_SPRITE_AXIAL_SGIX 0x814C +#define GL_SPRITE_OBJECT_ALIGNED_SGIX 0x814D +#define GL_SPRITE_EYE_ALIGNED_SGIX 0x814E +typedef void (APIENTRYP PFNGLSPRITEPARAMETERFSGIXPROC) (GLenum pname, GLfloat param); +typedef void (APIENTRYP PFNGLSPRITEPARAMETERFVSGIXPROC) (GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLSPRITEPARAMETERISGIXPROC) (GLenum pname, GLint param); +typedef void (APIENTRYP PFNGLSPRITEPARAMETERIVSGIXPROC) (GLenum pname, const GLint *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glSpriteParameterfSGIX (GLenum pname, GLfloat param); +GLAPI void APIENTRY glSpriteParameterfvSGIX (GLenum pname, const GLfloat *params); +GLAPI void APIENTRY glSpriteParameteriSGIX (GLenum pname, GLint param); +GLAPI void APIENTRY glSpriteParameterivSGIX (GLenum pname, const GLint *params); +#endif +#endif /* GL_SGIX_sprite */ + +#ifndef GL_SGIX_subsample +#define GL_SGIX_subsample 1 +#define GL_PACK_SUBSAMPLE_RATE_SGIX 0x85A0 +#define GL_UNPACK_SUBSAMPLE_RATE_SGIX 0x85A1 +#define GL_PIXEL_SUBSAMPLE_4444_SGIX 0x85A2 +#define GL_PIXEL_SUBSAMPLE_2424_SGIX 0x85A3 +#define GL_PIXEL_SUBSAMPLE_4242_SGIX 0x85A4 +#endif /* GL_SGIX_subsample */ + +#ifndef GL_SGIX_tag_sample_buffer +#define GL_SGIX_tag_sample_buffer 1 +typedef void (APIENTRYP PFNGLTAGSAMPLEBUFFERSGIXPROC) (void); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glTagSampleBufferSGIX (void); +#endif +#endif /* GL_SGIX_tag_sample_buffer */ + +#ifndef GL_SGIX_texture_add_env +#define GL_SGIX_texture_add_env 1 +#define GL_TEXTURE_ENV_BIAS_SGIX 0x80BE +#endif /* GL_SGIX_texture_add_env */ + +#ifndef GL_SGIX_texture_coordinate_clamp +#define GL_SGIX_texture_coordinate_clamp 1 +#define GL_TEXTURE_MAX_CLAMP_S_SGIX 0x8369 +#define GL_TEXTURE_MAX_CLAMP_T_SGIX 0x836A +#define GL_TEXTURE_MAX_CLAMP_R_SGIX 0x836B +#endif /* GL_SGIX_texture_coordinate_clamp */ + +#ifndef GL_SGIX_texture_lod_bias +#define GL_SGIX_texture_lod_bias 1 +#define GL_TEXTURE_LOD_BIAS_S_SGIX 0x818E +#define GL_TEXTURE_LOD_BIAS_T_SGIX 0x818F +#define GL_TEXTURE_LOD_BIAS_R_SGIX 0x8190 +#endif /* GL_SGIX_texture_lod_bias */ + +#ifndef GL_SGIX_texture_multi_buffer +#define GL_SGIX_texture_multi_buffer 1 +#define GL_TEXTURE_MULTI_BUFFER_HINT_SGIX 0x812E +#endif /* GL_SGIX_texture_multi_buffer */ + +#ifndef GL_SGIX_texture_scale_bias +#define GL_SGIX_texture_scale_bias 1 +#define GL_POST_TEXTURE_FILTER_BIAS_SGIX 0x8179 +#define GL_POST_TEXTURE_FILTER_SCALE_SGIX 0x817A +#define GL_POST_TEXTURE_FILTER_BIAS_RANGE_SGIX 0x817B +#define GL_POST_TEXTURE_FILTER_SCALE_RANGE_SGIX 0x817C +#endif /* GL_SGIX_texture_scale_bias */ + +#ifndef GL_SGIX_vertex_preclip +#define GL_SGIX_vertex_preclip 1 +#define GL_VERTEX_PRECLIP_SGIX 0x83EE +#define GL_VERTEX_PRECLIP_HINT_SGIX 0x83EF +#endif /* GL_SGIX_vertex_preclip */ + +#ifndef GL_SGIX_ycrcb +#define GL_SGIX_ycrcb 1 +#define GL_YCRCB_422_SGIX 0x81BB +#define GL_YCRCB_444_SGIX 0x81BC +#endif /* GL_SGIX_ycrcb */ + +#ifndef GL_SGIX_ycrcb_subsample +#define GL_SGIX_ycrcb_subsample 1 +#endif /* GL_SGIX_ycrcb_subsample */ + +#ifndef GL_SGIX_ycrcba +#define GL_SGIX_ycrcba 1 +#define GL_YCRCB_SGIX 0x8318 +#define GL_YCRCBA_SGIX 0x8319 +#endif /* GL_SGIX_ycrcba */ + +#ifndef GL_SGI_color_matrix +#define GL_SGI_color_matrix 1 +#define GL_COLOR_MATRIX_SGI 0x80B1 +#define GL_COLOR_MATRIX_STACK_DEPTH_SGI 0x80B2 +#define GL_MAX_COLOR_MATRIX_STACK_DEPTH_SGI 0x80B3 +#define GL_POST_COLOR_MATRIX_RED_SCALE_SGI 0x80B4 +#define GL_POST_COLOR_MATRIX_GREEN_SCALE_SGI 0x80B5 +#define GL_POST_COLOR_MATRIX_BLUE_SCALE_SGI 0x80B6 +#define GL_POST_COLOR_MATRIX_ALPHA_SCALE_SGI 0x80B7 +#define GL_POST_COLOR_MATRIX_RED_BIAS_SGI 0x80B8 +#define GL_POST_COLOR_MATRIX_GREEN_BIAS_SGI 0x80B9 +#define GL_POST_COLOR_MATRIX_BLUE_BIAS_SGI 0x80BA +#define GL_POST_COLOR_MATRIX_ALPHA_BIAS_SGI 0x80BB +#endif /* GL_SGI_color_matrix */ + +#ifndef GL_SGI_color_table +#define GL_SGI_color_table 1 +#define GL_COLOR_TABLE_SGI 0x80D0 +#define GL_POST_CONVOLUTION_COLOR_TABLE_SGI 0x80D1 +#define GL_POST_COLOR_MATRIX_COLOR_TABLE_SGI 0x80D2 +#define GL_PROXY_COLOR_TABLE_SGI 0x80D3 +#define GL_PROXY_POST_CONVOLUTION_COLOR_TABLE_SGI 0x80D4 +#define GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE_SGI 0x80D5 +#define GL_COLOR_TABLE_SCALE_SGI 0x80D6 +#define GL_COLOR_TABLE_BIAS_SGI 0x80D7 +#define GL_COLOR_TABLE_FORMAT_SGI 0x80D8 +#define GL_COLOR_TABLE_WIDTH_SGI 0x80D9 +#define GL_COLOR_TABLE_RED_SIZE_SGI 0x80DA +#define GL_COLOR_TABLE_GREEN_SIZE_SGI 0x80DB +#define GL_COLOR_TABLE_BLUE_SIZE_SGI 0x80DC +#define GL_COLOR_TABLE_ALPHA_SIZE_SGI 0x80DD +#define GL_COLOR_TABLE_LUMINANCE_SIZE_SGI 0x80DE +#define GL_COLOR_TABLE_INTENSITY_SIZE_SGI 0x80DF +typedef void (APIENTRYP PFNGLCOLORTABLESGIPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const void *table); +typedef void (APIENTRYP PFNGLCOLORTABLEPARAMETERFVSGIPROC) (GLenum target, GLenum pname, const GLfloat *params); +typedef void (APIENTRYP PFNGLCOLORTABLEPARAMETERIVSGIPROC) (GLenum target, GLenum pname, const GLint *params); +typedef void (APIENTRYP PFNGLCOPYCOLORTABLESGIPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); +typedef void (APIENTRYP PFNGLGETCOLORTABLESGIPROC) (GLenum target, GLenum format, GLenum type, void *table); +typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERFVSGIPROC) (GLenum target, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERIVSGIPROC) (GLenum target, GLenum pname, GLint *params); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glColorTableSGI (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const void *table); +GLAPI void APIENTRY glColorTableParameterfvSGI (GLenum target, GLenum pname, const GLfloat *params); +GLAPI void APIENTRY glColorTableParameterivSGI (GLenum target, GLenum pname, const GLint *params); +GLAPI void APIENTRY glCopyColorTableSGI (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width); +GLAPI void APIENTRY glGetColorTableSGI (GLenum target, GLenum format, GLenum type, void *table); +GLAPI void APIENTRY glGetColorTableParameterfvSGI (GLenum target, GLenum pname, GLfloat *params); +GLAPI void APIENTRY glGetColorTableParameterivSGI (GLenum target, GLenum pname, GLint *params); +#endif +#endif /* GL_SGI_color_table */ + +#ifndef GL_SGI_texture_color_table +#define GL_SGI_texture_color_table 1 +#define GL_TEXTURE_COLOR_TABLE_SGI 0x80BC +#define GL_PROXY_TEXTURE_COLOR_TABLE_SGI 0x80BD +#endif /* GL_SGI_texture_color_table */ + +#ifndef GL_SUNX_constant_data +#define GL_SUNX_constant_data 1 +#define GL_UNPACK_CONSTANT_DATA_SUNX 0x81D5 +#define GL_TEXTURE_CONSTANT_DATA_SUNX 0x81D6 +typedef void (APIENTRYP PFNGLFINISHTEXTURESUNXPROC) (void); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glFinishTextureSUNX (void); +#endif +#endif /* GL_SUNX_constant_data */ + +#ifndef GL_SUN_convolution_border_modes +#define GL_SUN_convolution_border_modes 1 +#define GL_WRAP_BORDER_SUN 0x81D4 +#endif /* GL_SUN_convolution_border_modes */ + +#ifndef GL_SUN_global_alpha +#define GL_SUN_global_alpha 1 +#define GL_GLOBAL_ALPHA_SUN 0x81D9 +#define GL_GLOBAL_ALPHA_FACTOR_SUN 0x81DA +typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORBSUNPROC) (GLbyte factor); +typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORSSUNPROC) (GLshort factor); +typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORISUNPROC) (GLint factor); +typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORFSUNPROC) (GLfloat factor); +typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORDSUNPROC) (GLdouble factor); +typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORUBSUNPROC) (GLubyte factor); +typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORUSSUNPROC) (GLushort factor); +typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORUISUNPROC) (GLuint factor); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glGlobalAlphaFactorbSUN (GLbyte factor); +GLAPI void APIENTRY glGlobalAlphaFactorsSUN (GLshort factor); +GLAPI void APIENTRY glGlobalAlphaFactoriSUN (GLint factor); +GLAPI void APIENTRY glGlobalAlphaFactorfSUN (GLfloat factor); +GLAPI void APIENTRY glGlobalAlphaFactordSUN (GLdouble factor); +GLAPI void APIENTRY glGlobalAlphaFactorubSUN (GLubyte factor); +GLAPI void APIENTRY glGlobalAlphaFactorusSUN (GLushort factor); +GLAPI void APIENTRY glGlobalAlphaFactoruiSUN (GLuint factor); +#endif +#endif /* GL_SUN_global_alpha */ + +#ifndef GL_SUN_mesh_array +#define GL_SUN_mesh_array 1 +#define GL_QUAD_MESH_SUN 0x8614 +#define GL_TRIANGLE_MESH_SUN 0x8615 +typedef void (APIENTRYP PFNGLDRAWMESHARRAYSSUNPROC) (GLenum mode, GLint first, GLsizei count, GLsizei width); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glDrawMeshArraysSUN (GLenum mode, GLint first, GLsizei count, GLsizei width); +#endif +#endif /* GL_SUN_mesh_array */ + +#ifndef GL_SUN_slice_accum +#define GL_SUN_slice_accum 1 +#define GL_SLICE_ACCUM_SUN 0x85CC +#endif /* GL_SUN_slice_accum */ + +#ifndef GL_SUN_triangle_list +#define GL_SUN_triangle_list 1 +#define GL_RESTART_SUN 0x0001 +#define GL_REPLACE_MIDDLE_SUN 0x0002 +#define GL_REPLACE_OLDEST_SUN 0x0003 +#define GL_TRIANGLE_LIST_SUN 0x81D7 +#define GL_REPLACEMENT_CODE_SUN 0x81D8 +#define GL_REPLACEMENT_CODE_ARRAY_SUN 0x85C0 +#define GL_REPLACEMENT_CODE_ARRAY_TYPE_SUN 0x85C1 +#define GL_REPLACEMENT_CODE_ARRAY_STRIDE_SUN 0x85C2 +#define GL_REPLACEMENT_CODE_ARRAY_POINTER_SUN 0x85C3 +#define GL_R1UI_V3F_SUN 0x85C4 +#define GL_R1UI_C4UB_V3F_SUN 0x85C5 +#define GL_R1UI_C3F_V3F_SUN 0x85C6 +#define GL_R1UI_N3F_V3F_SUN 0x85C7 +#define GL_R1UI_C4F_N3F_V3F_SUN 0x85C8 +#define GL_R1UI_T2F_V3F_SUN 0x85C9 +#define GL_R1UI_T2F_N3F_V3F_SUN 0x85CA +#define GL_R1UI_T2F_C4F_N3F_V3F_SUN 0x85CB +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUISUNPROC) (GLuint code); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUSSUNPROC) (GLushort code); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUBSUNPROC) (GLubyte code); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUIVSUNPROC) (const GLuint *code); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUSVSUNPROC) (const GLushort *code); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUBVSUNPROC) (const GLubyte *code); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEPOINTERSUNPROC) (GLenum type, GLsizei stride, const void **pointer); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glReplacementCodeuiSUN (GLuint code); +GLAPI void APIENTRY glReplacementCodeusSUN (GLushort code); +GLAPI void APIENTRY glReplacementCodeubSUN (GLubyte code); +GLAPI void APIENTRY glReplacementCodeuivSUN (const GLuint *code); +GLAPI void APIENTRY glReplacementCodeusvSUN (const GLushort *code); +GLAPI void APIENTRY glReplacementCodeubvSUN (const GLubyte *code); +GLAPI void APIENTRY glReplacementCodePointerSUN (GLenum type, GLsizei stride, const void **pointer); +#endif +#endif /* GL_SUN_triangle_list */ + +#ifndef GL_SUN_vertex +#define GL_SUN_vertex 1 +typedef void (APIENTRYP PFNGLCOLOR4UBVERTEX2FSUNPROC) (GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y); +typedef void (APIENTRYP PFNGLCOLOR4UBVERTEX2FVSUNPROC) (const GLubyte *c, const GLfloat *v); +typedef void (APIENTRYP PFNGLCOLOR4UBVERTEX3FSUNPROC) (GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLCOLOR4UBVERTEX3FVSUNPROC) (const GLubyte *c, const GLfloat *v); +typedef void (APIENTRYP PFNGLCOLOR3FVERTEX3FSUNPROC) (GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLCOLOR3FVERTEX3FVSUNPROC) (const GLfloat *c, const GLfloat *v); +typedef void (APIENTRYP PFNGLNORMAL3FVERTEX3FSUNPROC) (GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLNORMAL3FVERTEX3FVSUNPROC) (const GLfloat *n, const GLfloat *v); +typedef void (APIENTRYP PFNGLCOLOR4FNORMAL3FVERTEX3FSUNPROC) (GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLCOLOR4FNORMAL3FVERTEX3FVSUNPROC) (const GLfloat *c, const GLfloat *n, const GLfloat *v); +typedef void (APIENTRYP PFNGLTEXCOORD2FVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLTEXCOORD2FVERTEX3FVSUNPROC) (const GLfloat *tc, const GLfloat *v); +typedef void (APIENTRYP PFNGLTEXCOORD4FVERTEX4FSUNPROC) (GLfloat s, GLfloat t, GLfloat p, GLfloat q, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (APIENTRYP PFNGLTEXCOORD4FVERTEX4FVSUNPROC) (const GLfloat *tc, const GLfloat *v); +typedef void (APIENTRYP PFNGLTEXCOORD2FCOLOR4UBVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLTEXCOORD2FCOLOR4UBVERTEX3FVSUNPROC) (const GLfloat *tc, const GLubyte *c, const GLfloat *v); +typedef void (APIENTRYP PFNGLTEXCOORD2FCOLOR3FVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLTEXCOORD2FCOLOR3FVERTEX3FVSUNPROC) (const GLfloat *tc, const GLfloat *c, const GLfloat *v); +typedef void (APIENTRYP PFNGLTEXCOORD2FNORMAL3FVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLTEXCOORD2FNORMAL3FVERTEX3FVSUNPROC) (const GLfloat *tc, const GLfloat *n, const GLfloat *v); +typedef void (APIENTRYP PFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC) (const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v); +typedef void (APIENTRYP PFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FSUNPROC) (GLfloat s, GLfloat t, GLfloat p, GLfloat q, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (APIENTRYP PFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FVSUNPROC) (const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUIVERTEX3FSUNPROC) (GLuint rc, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUIVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *v); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FSUNPROC) (GLuint rc, GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FVSUNPROC) (const GLuint *rc, const GLubyte *c, const GLfloat *v); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FSUNPROC) (GLuint rc, GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *c, const GLfloat *v); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FSUNPROC) (GLuint rc, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *n, const GLfloat *v); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FSUNPROC) (GLuint rc, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *c, const GLfloat *n, const GLfloat *v); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FSUNPROC) (GLuint rc, GLfloat s, GLfloat t, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *tc, const GLfloat *v); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FSUNPROC) (GLuint rc, GLfloat s, GLfloat t, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *tc, const GLfloat *n, const GLfloat *v); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC) (GLuint rc, GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v); +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glColor4ubVertex2fSUN (GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y); +GLAPI void APIENTRY glColor4ubVertex2fvSUN (const GLubyte *c, const GLfloat *v); +GLAPI void APIENTRY glColor4ubVertex3fSUN (GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glColor4ubVertex3fvSUN (const GLubyte *c, const GLfloat *v); +GLAPI void APIENTRY glColor3fVertex3fSUN (GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glColor3fVertex3fvSUN (const GLfloat *c, const GLfloat *v); +GLAPI void APIENTRY glNormal3fVertex3fSUN (GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glNormal3fVertex3fvSUN (const GLfloat *n, const GLfloat *v); +GLAPI void APIENTRY glColor4fNormal3fVertex3fSUN (GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glColor4fNormal3fVertex3fvSUN (const GLfloat *c, const GLfloat *n, const GLfloat *v); +GLAPI void APIENTRY glTexCoord2fVertex3fSUN (GLfloat s, GLfloat t, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glTexCoord2fVertex3fvSUN (const GLfloat *tc, const GLfloat *v); +GLAPI void APIENTRY glTexCoord4fVertex4fSUN (GLfloat s, GLfloat t, GLfloat p, GLfloat q, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +GLAPI void APIENTRY glTexCoord4fVertex4fvSUN (const GLfloat *tc, const GLfloat *v); +GLAPI void APIENTRY glTexCoord2fColor4ubVertex3fSUN (GLfloat s, GLfloat t, GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glTexCoord2fColor4ubVertex3fvSUN (const GLfloat *tc, const GLubyte *c, const GLfloat *v); +GLAPI void APIENTRY glTexCoord2fColor3fVertex3fSUN (GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glTexCoord2fColor3fVertex3fvSUN (const GLfloat *tc, const GLfloat *c, const GLfloat *v); +GLAPI void APIENTRY glTexCoord2fNormal3fVertex3fSUN (GLfloat s, GLfloat t, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glTexCoord2fNormal3fVertex3fvSUN (const GLfloat *tc, const GLfloat *n, const GLfloat *v); +GLAPI void APIENTRY glTexCoord2fColor4fNormal3fVertex3fSUN (GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glTexCoord2fColor4fNormal3fVertex3fvSUN (const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v); +GLAPI void APIENTRY glTexCoord4fColor4fNormal3fVertex4fSUN (GLfloat s, GLfloat t, GLfloat p, GLfloat q, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +GLAPI void APIENTRY glTexCoord4fColor4fNormal3fVertex4fvSUN (const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v); +GLAPI void APIENTRY glReplacementCodeuiVertex3fSUN (GLuint rc, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glReplacementCodeuiVertex3fvSUN (const GLuint *rc, const GLfloat *v); +GLAPI void APIENTRY glReplacementCodeuiColor4ubVertex3fSUN (GLuint rc, GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glReplacementCodeuiColor4ubVertex3fvSUN (const GLuint *rc, const GLubyte *c, const GLfloat *v); +GLAPI void APIENTRY glReplacementCodeuiColor3fVertex3fSUN (GLuint rc, GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glReplacementCodeuiColor3fVertex3fvSUN (const GLuint *rc, const GLfloat *c, const GLfloat *v); +GLAPI void APIENTRY glReplacementCodeuiNormal3fVertex3fSUN (GLuint rc, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glReplacementCodeuiNormal3fVertex3fvSUN (const GLuint *rc, const GLfloat *n, const GLfloat *v); +GLAPI void APIENTRY glReplacementCodeuiColor4fNormal3fVertex3fSUN (GLuint rc, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glReplacementCodeuiColor4fNormal3fVertex3fvSUN (const GLuint *rc, const GLfloat *c, const GLfloat *n, const GLfloat *v); +GLAPI void APIENTRY glReplacementCodeuiTexCoord2fVertex3fSUN (GLuint rc, GLfloat s, GLfloat t, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glReplacementCodeuiTexCoord2fVertex3fvSUN (const GLuint *rc, const GLfloat *tc, const GLfloat *v); +GLAPI void APIENTRY glReplacementCodeuiTexCoord2fNormal3fVertex3fSUN (GLuint rc, GLfloat s, GLfloat t, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN (const GLuint *rc, const GLfloat *tc, const GLfloat *n, const GLfloat *v); +GLAPI void APIENTRY glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN (GLuint rc, GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z); +GLAPI void APIENTRY glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN (const GLuint *rc, const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v); +#endif +#endif /* GL_SUN_vertex */ + +#ifndef GL_WIN_phong_shading +#define GL_WIN_phong_shading 1 +#define GL_PHONG_WIN 0x80EA +#define GL_PHONG_HINT_WIN 0x80EB +#endif /* GL_WIN_phong_shading */ + +#ifndef GL_WIN_specular_fog +#define GL_WIN_specular_fog 1 +#define GL_FOG_SPECULAR_TEXTURE_WIN 0x80EC +#endif /* GL_WIN_specular_fog */ + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/third_party/tlRender-install-Release/include/SDL2/SDL_opengles.h b/third_party/tlRender-install-Release/include/SDL2/SDL_opengles.h new file mode 100644 index 00000000..adf6ef78 --- /dev/null +++ b/third_party/tlRender-install-Release/include/SDL2/SDL_opengles.h @@ -0,0 +1,38 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2025 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +/* + * This is a simple file to encapsulate the OpenGL ES 1.X API headers. + */ + +#include "SDL_config.h" + +#ifdef __IPHONEOS__ +#include +#include +#else +#include +#include +#endif + +#ifndef APIENTRY +#define APIENTRY +#endif diff --git a/third_party/tlRender-install-Release/include/SDL2/SDL_opengles2.h b/third_party/tlRender-install-Release/include/SDL2/SDL_opengles2.h new file mode 100644 index 00000000..55141971 --- /dev/null +++ b/third_party/tlRender-install-Release/include/SDL2/SDL_opengles2.h @@ -0,0 +1,51 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2025 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +/* + * This is a simple file to encapsulate the OpenGL ES 2.0 API headers. + */ + +#include "SDL_config.h" + +#if !defined(_MSC_VER) && !defined(SDL_USE_BUILTIN_OPENGL_DEFINITIONS) + +#ifdef __IPHONEOS__ +#include +#include +#else +#include +#include +#include +#endif + +#else /* _MSC_VER */ + +/* OpenGL ES2 headers for Visual Studio */ +#include "SDL_opengles2_khrplatform.h" +#include "SDL_opengles2_gl2platform.h" +#include "SDL_opengles2_gl2.h" +#include "SDL_opengles2_gl2ext.h" + +#endif /* _MSC_VER */ + +#ifndef APIENTRY +#define APIENTRY GL_APIENTRY +#endif diff --git a/third_party/tlRender-install-Release/include/SDL2/SDL_opengles2_gl2.h b/third_party/tlRender-install-Release/include/SDL2/SDL_opengles2_gl2.h new file mode 100644 index 00000000..d13622aa --- /dev/null +++ b/third_party/tlRender-install-Release/include/SDL2/SDL_opengles2_gl2.h @@ -0,0 +1,656 @@ +#ifndef __gles2_gl2_h_ +#define __gles2_gl2_h_ 1 + +#ifdef __cplusplus +extern "C" { +#endif + +/* +** Copyright 2013-2020 The Khronos Group Inc. +** SPDX-License-Identifier: MIT +** +** This header is generated from the Khronos OpenGL / OpenGL ES XML +** API Registry. The current version of the Registry, generator scripts +** used to make the header, and the header can be found at +** https://github.com/KhronosGroup/OpenGL-Registry +*/ + +/*#include */ + +#ifndef GL_APIENTRYP +#define GL_APIENTRYP GL_APIENTRY* +#endif + +#ifndef GL_GLES_PROTOTYPES +#define GL_GLES_PROTOTYPES 1 +#endif + +/* Generated on date 20220530 */ + +/* Generated C header for: + * API: gles2 + * Profile: common + * Versions considered: 2\.[0-9] + * Versions emitted: .* + * Default extensions included: None + * Additional extensions included: _nomatch_^ + * Extensions removed: _nomatch_^ + */ + +#ifndef GL_ES_VERSION_2_0 +#define GL_ES_VERSION_2_0 1 +/*#include */ +typedef khronos_int8_t GLbyte; +typedef khronos_float_t GLclampf; +typedef khronos_int32_t GLfixed; +typedef khronos_int16_t GLshort; +typedef khronos_uint16_t GLushort; +typedef void GLvoid; +typedef struct __GLsync *GLsync; +typedef khronos_int64_t GLint64; +typedef khronos_uint64_t GLuint64; +typedef unsigned int GLenum; +typedef unsigned int GLuint; +typedef char GLchar; +typedef khronos_float_t GLfloat; +typedef khronos_ssize_t GLsizeiptr; +typedef khronos_intptr_t GLintptr; +typedef unsigned int GLbitfield; +typedef int GLint; +typedef unsigned char GLboolean; +typedef int GLsizei; +typedef khronos_uint8_t GLubyte; +#define GL_DEPTH_BUFFER_BIT 0x00000100 +#define GL_STENCIL_BUFFER_BIT 0x00000400 +#define GL_COLOR_BUFFER_BIT 0x00004000 +#define GL_FALSE 0 +#define GL_TRUE 1 +#define GL_POINTS 0x0000 +#define GL_LINES 0x0001 +#define GL_LINE_LOOP 0x0002 +#define GL_LINE_STRIP 0x0003 +#define GL_TRIANGLES 0x0004 +#define GL_TRIANGLE_STRIP 0x0005 +#define GL_TRIANGLE_FAN 0x0006 +#define GL_ZERO 0 +#define GL_ONE 1 +#define GL_SRC_COLOR 0x0300 +#define GL_ONE_MINUS_SRC_COLOR 0x0301 +#define GL_SRC_ALPHA 0x0302 +#define GL_ONE_MINUS_SRC_ALPHA 0x0303 +#define GL_DST_ALPHA 0x0304 +#define GL_ONE_MINUS_DST_ALPHA 0x0305 +#define GL_DST_COLOR 0x0306 +#define GL_ONE_MINUS_DST_COLOR 0x0307 +#define GL_SRC_ALPHA_SATURATE 0x0308 +#define GL_FUNC_ADD 0x8006 +#define GL_BLEND_EQUATION 0x8009 +#define GL_BLEND_EQUATION_RGB 0x8009 +#define GL_BLEND_EQUATION_ALPHA 0x883D +#define GL_FUNC_SUBTRACT 0x800A +#define GL_FUNC_REVERSE_SUBTRACT 0x800B +#define GL_BLEND_DST_RGB 0x80C8 +#define GL_BLEND_SRC_RGB 0x80C9 +#define GL_BLEND_DST_ALPHA 0x80CA +#define GL_BLEND_SRC_ALPHA 0x80CB +#define GL_CONSTANT_COLOR 0x8001 +#define GL_ONE_MINUS_CONSTANT_COLOR 0x8002 +#define GL_CONSTANT_ALPHA 0x8003 +#define GL_ONE_MINUS_CONSTANT_ALPHA 0x8004 +#define GL_BLEND_COLOR 0x8005 +#define GL_ARRAY_BUFFER 0x8892 +#define GL_ELEMENT_ARRAY_BUFFER 0x8893 +#define GL_ARRAY_BUFFER_BINDING 0x8894 +#define GL_ELEMENT_ARRAY_BUFFER_BINDING 0x8895 +#define GL_STREAM_DRAW 0x88E0 +#define GL_STATIC_DRAW 0x88E4 +#define GL_DYNAMIC_DRAW 0x88E8 +#define GL_BUFFER_SIZE 0x8764 +#define GL_BUFFER_USAGE 0x8765 +#define GL_CURRENT_VERTEX_ATTRIB 0x8626 +#define GL_FRONT 0x0404 +#define GL_BACK 0x0405 +#define GL_FRONT_AND_BACK 0x0408 +#define GL_TEXTURE_2D 0x0DE1 +#define GL_CULL_FACE 0x0B44 +#define GL_BLEND 0x0BE2 +#define GL_DITHER 0x0BD0 +#define GL_STENCIL_TEST 0x0B90 +#define GL_DEPTH_TEST 0x0B71 +#define GL_SCISSOR_TEST 0x0C11 +#define GL_POLYGON_OFFSET_FILL 0x8037 +#define GL_SAMPLE_ALPHA_TO_COVERAGE 0x809E +#define GL_SAMPLE_COVERAGE 0x80A0 +#define GL_NO_ERROR 0 +#define GL_INVALID_ENUM 0x0500 +#define GL_INVALID_VALUE 0x0501 +#define GL_INVALID_OPERATION 0x0502 +#define GL_OUT_OF_MEMORY 0x0505 +#define GL_CW 0x0900 +#define GL_CCW 0x0901 +#define GL_LINE_WIDTH 0x0B21 +#define GL_ALIASED_POINT_SIZE_RANGE 0x846D +#define GL_ALIASED_LINE_WIDTH_RANGE 0x846E +#define GL_CULL_FACE_MODE 0x0B45 +#define GL_FRONT_FACE 0x0B46 +#define GL_DEPTH_RANGE 0x0B70 +#define GL_DEPTH_WRITEMASK 0x0B72 +#define GL_DEPTH_CLEAR_VALUE 0x0B73 +#define GL_DEPTH_FUNC 0x0B74 +#define GL_STENCIL_CLEAR_VALUE 0x0B91 +#define GL_STENCIL_FUNC 0x0B92 +#define GL_STENCIL_FAIL 0x0B94 +#define GL_STENCIL_PASS_DEPTH_FAIL 0x0B95 +#define GL_STENCIL_PASS_DEPTH_PASS 0x0B96 +#define GL_STENCIL_REF 0x0B97 +#define GL_STENCIL_VALUE_MASK 0x0B93 +#define GL_STENCIL_WRITEMASK 0x0B98 +#define GL_STENCIL_BACK_FUNC 0x8800 +#define GL_STENCIL_BACK_FAIL 0x8801 +#define GL_STENCIL_BACK_PASS_DEPTH_FAIL 0x8802 +#define GL_STENCIL_BACK_PASS_DEPTH_PASS 0x8803 +#define GL_STENCIL_BACK_REF 0x8CA3 +#define GL_STENCIL_BACK_VALUE_MASK 0x8CA4 +#define GL_STENCIL_BACK_WRITEMASK 0x8CA5 +#define GL_VIEWPORT 0x0BA2 +#define GL_SCISSOR_BOX 0x0C10 +#define GL_COLOR_CLEAR_VALUE 0x0C22 +#define GL_COLOR_WRITEMASK 0x0C23 +#define GL_UNPACK_ALIGNMENT 0x0CF5 +#define GL_PACK_ALIGNMENT 0x0D05 +#define GL_MAX_TEXTURE_SIZE 0x0D33 +#define GL_MAX_VIEWPORT_DIMS 0x0D3A +#define GL_SUBPIXEL_BITS 0x0D50 +#define GL_RED_BITS 0x0D52 +#define GL_GREEN_BITS 0x0D53 +#define GL_BLUE_BITS 0x0D54 +#define GL_ALPHA_BITS 0x0D55 +#define GL_DEPTH_BITS 0x0D56 +#define GL_STENCIL_BITS 0x0D57 +#define GL_POLYGON_OFFSET_UNITS 0x2A00 +#define GL_POLYGON_OFFSET_FACTOR 0x8038 +#define GL_TEXTURE_BINDING_2D 0x8069 +#define GL_SAMPLE_BUFFERS 0x80A8 +#define GL_SAMPLES 0x80A9 +#define GL_SAMPLE_COVERAGE_VALUE 0x80AA +#define GL_SAMPLE_COVERAGE_INVERT 0x80AB +#define GL_NUM_COMPRESSED_TEXTURE_FORMATS 0x86A2 +#define GL_COMPRESSED_TEXTURE_FORMATS 0x86A3 +#define GL_DONT_CARE 0x1100 +#define GL_FASTEST 0x1101 +#define GL_NICEST 0x1102 +#define GL_GENERATE_MIPMAP_HINT 0x8192 +#define GL_BYTE 0x1400 +#define GL_UNSIGNED_BYTE 0x1401 +#define GL_SHORT 0x1402 +#define GL_UNSIGNED_SHORT 0x1403 +#define GL_INT 0x1404 +#define GL_UNSIGNED_INT 0x1405 +#define GL_FLOAT 0x1406 +#define GL_FIXED 0x140C +#define GL_DEPTH_COMPONENT 0x1902 +#define GL_ALPHA 0x1906 +#define GL_RGB 0x1907 +#define GL_RGBA 0x1908 +#define GL_LUMINANCE 0x1909 +#define GL_LUMINANCE_ALPHA 0x190A +#define GL_UNSIGNED_SHORT_4_4_4_4 0x8033 +#define GL_UNSIGNED_SHORT_5_5_5_1 0x8034 +#define GL_UNSIGNED_SHORT_5_6_5 0x8363 +#define GL_FRAGMENT_SHADER 0x8B30 +#define GL_VERTEX_SHADER 0x8B31 +#define GL_MAX_VERTEX_ATTRIBS 0x8869 +#define GL_MAX_VERTEX_UNIFORM_VECTORS 0x8DFB +#define GL_MAX_VARYING_VECTORS 0x8DFC +#define GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS 0x8B4D +#define GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS 0x8B4C +#define GL_MAX_TEXTURE_IMAGE_UNITS 0x8872 +#define GL_MAX_FRAGMENT_UNIFORM_VECTORS 0x8DFD +#define GL_SHADER_TYPE 0x8B4F +#define GL_DELETE_STATUS 0x8B80 +#define GL_LINK_STATUS 0x8B82 +#define GL_VALIDATE_STATUS 0x8B83 +#define GL_ATTACHED_SHADERS 0x8B85 +#define GL_ACTIVE_UNIFORMS 0x8B86 +#define GL_ACTIVE_UNIFORM_MAX_LENGTH 0x8B87 +#define GL_ACTIVE_ATTRIBUTES 0x8B89 +#define GL_ACTIVE_ATTRIBUTE_MAX_LENGTH 0x8B8A +#define GL_SHADING_LANGUAGE_VERSION 0x8B8C +#define GL_CURRENT_PROGRAM 0x8B8D +#define GL_NEVER 0x0200 +#define GL_LESS 0x0201 +#define GL_EQUAL 0x0202 +#define GL_LEQUAL 0x0203 +#define GL_GREATER 0x0204 +#define GL_NOTEQUAL 0x0205 +#define GL_GEQUAL 0x0206 +#define GL_ALWAYS 0x0207 +#define GL_KEEP 0x1E00 +#define GL_REPLACE 0x1E01 +#define GL_INCR 0x1E02 +#define GL_DECR 0x1E03 +#define GL_INVERT 0x150A +#define GL_INCR_WRAP 0x8507 +#define GL_DECR_WRAP 0x8508 +#define GL_VENDOR 0x1F00 +#define GL_RENDERER 0x1F01 +#define GL_VERSION 0x1F02 +#define GL_EXTENSIONS 0x1F03 +#define GL_NEAREST 0x2600 +#define GL_LINEAR 0x2601 +#define GL_NEAREST_MIPMAP_NEAREST 0x2700 +#define GL_LINEAR_MIPMAP_NEAREST 0x2701 +#define GL_NEAREST_MIPMAP_LINEAR 0x2702 +#define GL_LINEAR_MIPMAP_LINEAR 0x2703 +#define GL_TEXTURE_MAG_FILTER 0x2800 +#define GL_TEXTURE_MIN_FILTER 0x2801 +#define GL_TEXTURE_WRAP_S 0x2802 +#define GL_TEXTURE_WRAP_T 0x2803 +#define GL_TEXTURE 0x1702 +#define GL_TEXTURE_CUBE_MAP 0x8513 +#define GL_TEXTURE_BINDING_CUBE_MAP 0x8514 +#define GL_TEXTURE_CUBE_MAP_POSITIVE_X 0x8515 +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X 0x8516 +#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y 0x8517 +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y 0x8518 +#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z 0x8519 +#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z 0x851A +#define GL_MAX_CUBE_MAP_TEXTURE_SIZE 0x851C +#define GL_TEXTURE0 0x84C0 +#define GL_TEXTURE1 0x84C1 +#define GL_TEXTURE2 0x84C2 +#define GL_TEXTURE3 0x84C3 +#define GL_TEXTURE4 0x84C4 +#define GL_TEXTURE5 0x84C5 +#define GL_TEXTURE6 0x84C6 +#define GL_TEXTURE7 0x84C7 +#define GL_TEXTURE8 0x84C8 +#define GL_TEXTURE9 0x84C9 +#define GL_TEXTURE10 0x84CA +#define GL_TEXTURE11 0x84CB +#define GL_TEXTURE12 0x84CC +#define GL_TEXTURE13 0x84CD +#define GL_TEXTURE14 0x84CE +#define GL_TEXTURE15 0x84CF +#define GL_TEXTURE16 0x84D0 +#define GL_TEXTURE17 0x84D1 +#define GL_TEXTURE18 0x84D2 +#define GL_TEXTURE19 0x84D3 +#define GL_TEXTURE20 0x84D4 +#define GL_TEXTURE21 0x84D5 +#define GL_TEXTURE22 0x84D6 +#define GL_TEXTURE23 0x84D7 +#define GL_TEXTURE24 0x84D8 +#define GL_TEXTURE25 0x84D9 +#define GL_TEXTURE26 0x84DA +#define GL_TEXTURE27 0x84DB +#define GL_TEXTURE28 0x84DC +#define GL_TEXTURE29 0x84DD +#define GL_TEXTURE30 0x84DE +#define GL_TEXTURE31 0x84DF +#define GL_ACTIVE_TEXTURE 0x84E0 +#define GL_REPEAT 0x2901 +#define GL_CLAMP_TO_EDGE 0x812F +#define GL_MIRRORED_REPEAT 0x8370 +#define GL_FLOAT_VEC2 0x8B50 +#define GL_FLOAT_VEC3 0x8B51 +#define GL_FLOAT_VEC4 0x8B52 +#define GL_INT_VEC2 0x8B53 +#define GL_INT_VEC3 0x8B54 +#define GL_INT_VEC4 0x8B55 +#define GL_BOOL 0x8B56 +#define GL_BOOL_VEC2 0x8B57 +#define GL_BOOL_VEC3 0x8B58 +#define GL_BOOL_VEC4 0x8B59 +#define GL_FLOAT_MAT2 0x8B5A +#define GL_FLOAT_MAT3 0x8B5B +#define GL_FLOAT_MAT4 0x8B5C +#define GL_SAMPLER_2D 0x8B5E +#define GL_SAMPLER_CUBE 0x8B60 +#define GL_VERTEX_ATTRIB_ARRAY_ENABLED 0x8622 +#define GL_VERTEX_ATTRIB_ARRAY_SIZE 0x8623 +#define GL_VERTEX_ATTRIB_ARRAY_STRIDE 0x8624 +#define GL_VERTEX_ATTRIB_ARRAY_TYPE 0x8625 +#define GL_VERTEX_ATTRIB_ARRAY_NORMALIZED 0x886A +#define GL_VERTEX_ATTRIB_ARRAY_POINTER 0x8645 +#define GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING 0x889F +#define GL_IMPLEMENTATION_COLOR_READ_TYPE 0x8B9A +#define GL_IMPLEMENTATION_COLOR_READ_FORMAT 0x8B9B +#define GL_COMPILE_STATUS 0x8B81 +#define GL_INFO_LOG_LENGTH 0x8B84 +#define GL_SHADER_SOURCE_LENGTH 0x8B88 +#define GL_SHADER_COMPILER 0x8DFA +#define GL_SHADER_BINARY_FORMATS 0x8DF8 +#define GL_NUM_SHADER_BINARY_FORMATS 0x8DF9 +#define GL_LOW_FLOAT 0x8DF0 +#define GL_MEDIUM_FLOAT 0x8DF1 +#define GL_HIGH_FLOAT 0x8DF2 +#define GL_LOW_INT 0x8DF3 +#define GL_MEDIUM_INT 0x8DF4 +#define GL_HIGH_INT 0x8DF5 +#define GL_FRAMEBUFFER 0x8D40 +#define GL_RENDERBUFFER 0x8D41 +#define GL_RGBA4 0x8056 +#define GL_RGB5_A1 0x8057 +#define GL_RGB565 0x8D62 +#define GL_DEPTH_COMPONENT16 0x81A5 +#define GL_STENCIL_INDEX8 0x8D48 +#define GL_RENDERBUFFER_WIDTH 0x8D42 +#define GL_RENDERBUFFER_HEIGHT 0x8D43 +#define GL_RENDERBUFFER_INTERNAL_FORMAT 0x8D44 +#define GL_RENDERBUFFER_RED_SIZE 0x8D50 +#define GL_RENDERBUFFER_GREEN_SIZE 0x8D51 +#define GL_RENDERBUFFER_BLUE_SIZE 0x8D52 +#define GL_RENDERBUFFER_ALPHA_SIZE 0x8D53 +#define GL_RENDERBUFFER_DEPTH_SIZE 0x8D54 +#define GL_RENDERBUFFER_STENCIL_SIZE 0x8D55 +#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE 0x8CD0 +#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME 0x8CD1 +#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL 0x8CD2 +#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE 0x8CD3 +#define GL_COLOR_ATTACHMENT0 0x8CE0 +#define GL_DEPTH_ATTACHMENT 0x8D00 +#define GL_STENCIL_ATTACHMENT 0x8D20 +#define GL_NONE 0 +#define GL_FRAMEBUFFER_COMPLETE 0x8CD5 +#define GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT 0x8CD6 +#define GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT 0x8CD7 +#define GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS 0x8CD9 +#define GL_FRAMEBUFFER_UNSUPPORTED 0x8CDD +#define GL_FRAMEBUFFER_BINDING 0x8CA6 +#define GL_RENDERBUFFER_BINDING 0x8CA7 +#define GL_MAX_RENDERBUFFER_SIZE 0x84E8 +#define GL_INVALID_FRAMEBUFFER_OPERATION 0x0506 +typedef void (GL_APIENTRYP PFNGLACTIVETEXTUREPROC) (GLenum texture); +typedef void (GL_APIENTRYP PFNGLATTACHSHADERPROC) (GLuint program, GLuint shader); +typedef void (GL_APIENTRYP PFNGLBINDATTRIBLOCATIONPROC) (GLuint program, GLuint index, const GLchar *name); +typedef void (GL_APIENTRYP PFNGLBINDBUFFERPROC) (GLenum target, GLuint buffer); +typedef void (GL_APIENTRYP PFNGLBINDFRAMEBUFFERPROC) (GLenum target, GLuint framebuffer); +typedef void (GL_APIENTRYP PFNGLBINDRENDERBUFFERPROC) (GLenum target, GLuint renderbuffer); +typedef void (GL_APIENTRYP PFNGLBINDTEXTUREPROC) (GLenum target, GLuint texture); +typedef void (GL_APIENTRYP PFNGLBLENDCOLORPROC) (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); +typedef void (GL_APIENTRYP PFNGLBLENDEQUATIONPROC) (GLenum mode); +typedef void (GL_APIENTRYP PFNGLBLENDEQUATIONSEPARATEPROC) (GLenum modeRGB, GLenum modeAlpha); +typedef void (GL_APIENTRYP PFNGLBLENDFUNCPROC) (GLenum sfactor, GLenum dfactor); +typedef void (GL_APIENTRYP PFNGLBLENDFUNCSEPARATEPROC) (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); +typedef void (GL_APIENTRYP PFNGLBUFFERDATAPROC) (GLenum target, GLsizeiptr size, const void *data, GLenum usage); +typedef void (GL_APIENTRYP PFNGLBUFFERSUBDATAPROC) (GLenum target, GLintptr offset, GLsizeiptr size, const void *data); +typedef GLenum (GL_APIENTRYP PFNGLCHECKFRAMEBUFFERSTATUSPROC) (GLenum target); +typedef void (GL_APIENTRYP PFNGLCLEARPROC) (GLbitfield mask); +typedef void (GL_APIENTRYP PFNGLCLEARCOLORPROC) (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); +typedef void (GL_APIENTRYP PFNGLCLEARDEPTHFPROC) (GLfloat d); +typedef void (GL_APIENTRYP PFNGLCLEARSTENCILPROC) (GLint s); +typedef void (GL_APIENTRYP PFNGLCOLORMASKPROC) (GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha); +typedef void (GL_APIENTRYP PFNGLCOMPILESHADERPROC) (GLuint shader); +typedef void (GL_APIENTRYP PFNGLCOMPRESSEDTEXIMAGE2DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *data); +typedef void (GL_APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *data); +typedef void (GL_APIENTRYP PFNGLCOPYTEXIMAGE2DPROC) (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); +typedef void (GL_APIENTRYP PFNGLCOPYTEXSUBIMAGE2DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); +typedef GLuint (GL_APIENTRYP PFNGLCREATEPROGRAMPROC) (void); +typedef GLuint (GL_APIENTRYP PFNGLCREATESHADERPROC) (GLenum type); +typedef void (GL_APIENTRYP PFNGLCULLFACEPROC) (GLenum mode); +typedef void (GL_APIENTRYP PFNGLDELETEBUFFERSPROC) (GLsizei n, const GLuint *buffers); +typedef void (GL_APIENTRYP PFNGLDELETEFRAMEBUFFERSPROC) (GLsizei n, const GLuint *framebuffers); +typedef void (GL_APIENTRYP PFNGLDELETEPROGRAMPROC) (GLuint program); +typedef void (GL_APIENTRYP PFNGLDELETERENDERBUFFERSPROC) (GLsizei n, const GLuint *renderbuffers); +typedef void (GL_APIENTRYP PFNGLDELETESHADERPROC) (GLuint shader); +typedef void (GL_APIENTRYP PFNGLDELETETEXTURESPROC) (GLsizei n, const GLuint *textures); +typedef void (GL_APIENTRYP PFNGLDEPTHFUNCPROC) (GLenum func); +typedef void (GL_APIENTRYP PFNGLDEPTHMASKPROC) (GLboolean flag); +typedef void (GL_APIENTRYP PFNGLDEPTHRANGEFPROC) (GLfloat n, GLfloat f); +typedef void (GL_APIENTRYP PFNGLDETACHSHADERPROC) (GLuint program, GLuint shader); +typedef void (GL_APIENTRYP PFNGLDISABLEPROC) (GLenum cap); +typedef void (GL_APIENTRYP PFNGLDISABLEVERTEXATTRIBARRAYPROC) (GLuint index); +typedef void (GL_APIENTRYP PFNGLDRAWARRAYSPROC) (GLenum mode, GLint first, GLsizei count); +typedef void (GL_APIENTRYP PFNGLDRAWELEMENTSPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices); +typedef void (GL_APIENTRYP PFNGLENABLEPROC) (GLenum cap); +typedef void (GL_APIENTRYP PFNGLENABLEVERTEXATTRIBARRAYPROC) (GLuint index); +typedef void (GL_APIENTRYP PFNGLFINISHPROC) (void); +typedef void (GL_APIENTRYP PFNGLFLUSHPROC) (void); +typedef void (GL_APIENTRYP PFNGLFRAMEBUFFERRENDERBUFFERPROC) (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); +typedef void (GL_APIENTRYP PFNGLFRAMEBUFFERTEXTURE2DPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); +typedef void (GL_APIENTRYP PFNGLFRONTFACEPROC) (GLenum mode); +typedef void (GL_APIENTRYP PFNGLGENBUFFERSPROC) (GLsizei n, GLuint *buffers); +typedef void (GL_APIENTRYP PFNGLGENERATEMIPMAPPROC) (GLenum target); +typedef void (GL_APIENTRYP PFNGLGENFRAMEBUFFERSPROC) (GLsizei n, GLuint *framebuffers); +typedef void (GL_APIENTRYP PFNGLGENRENDERBUFFERSPROC) (GLsizei n, GLuint *renderbuffers); +typedef void (GL_APIENTRYP PFNGLGENTEXTURESPROC) (GLsizei n, GLuint *textures); +typedef void (GL_APIENTRYP PFNGLGETACTIVEATTRIBPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name); +typedef void (GL_APIENTRYP PFNGLGETACTIVEUNIFORMPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name); +typedef void (GL_APIENTRYP PFNGLGETATTACHEDSHADERSPROC) (GLuint program, GLsizei maxCount, GLsizei *count, GLuint *shaders); +typedef GLint (GL_APIENTRYP PFNGLGETATTRIBLOCATIONPROC) (GLuint program, const GLchar *name); +typedef void (GL_APIENTRYP PFNGLGETBOOLEANVPROC) (GLenum pname, GLboolean *data); +typedef void (GL_APIENTRYP PFNGLGETBUFFERPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); +typedef GLenum (GL_APIENTRYP PFNGLGETERRORPROC) (void); +typedef void (GL_APIENTRYP PFNGLGETFLOATVPROC) (GLenum pname, GLfloat *data); +typedef void (GL_APIENTRYP PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC) (GLenum target, GLenum attachment, GLenum pname, GLint *params); +typedef void (GL_APIENTRYP PFNGLGETINTEGERVPROC) (GLenum pname, GLint *data); +typedef void (GL_APIENTRYP PFNGLGETPROGRAMIVPROC) (GLuint program, GLenum pname, GLint *params); +typedef void (GL_APIENTRYP PFNGLGETPROGRAMINFOLOGPROC) (GLuint program, GLsizei bufSize, GLsizei *length, GLchar *infoLog); +typedef void (GL_APIENTRYP PFNGLGETRENDERBUFFERPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (GL_APIENTRYP PFNGLGETSHADERIVPROC) (GLuint shader, GLenum pname, GLint *params); +typedef void (GL_APIENTRYP PFNGLGETSHADERINFOLOGPROC) (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *infoLog); +typedef void (GL_APIENTRYP PFNGLGETSHADERPRECISIONFORMATPROC) (GLenum shadertype, GLenum precisiontype, GLint *range, GLint *precision); +typedef void (GL_APIENTRYP PFNGLGETSHADERSOURCEPROC) (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *source); +typedef const GLubyte *(GL_APIENTRYP PFNGLGETSTRINGPROC) (GLenum name); +typedef void (GL_APIENTRYP PFNGLGETTEXPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params); +typedef void (GL_APIENTRYP PFNGLGETTEXPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (GL_APIENTRYP PFNGLGETUNIFORMFVPROC) (GLuint program, GLint location, GLfloat *params); +typedef void (GL_APIENTRYP PFNGLGETUNIFORMIVPROC) (GLuint program, GLint location, GLint *params); +typedef GLint (GL_APIENTRYP PFNGLGETUNIFORMLOCATIONPROC) (GLuint program, const GLchar *name); +typedef void (GL_APIENTRYP PFNGLGETVERTEXATTRIBFVPROC) (GLuint index, GLenum pname, GLfloat *params); +typedef void (GL_APIENTRYP PFNGLGETVERTEXATTRIBIVPROC) (GLuint index, GLenum pname, GLint *params); +typedef void (GL_APIENTRYP PFNGLGETVERTEXATTRIBPOINTERVPROC) (GLuint index, GLenum pname, void **pointer); +typedef void (GL_APIENTRYP PFNGLHINTPROC) (GLenum target, GLenum mode); +typedef GLboolean (GL_APIENTRYP PFNGLISBUFFERPROC) (GLuint buffer); +typedef GLboolean (GL_APIENTRYP PFNGLISENABLEDPROC) (GLenum cap); +typedef GLboolean (GL_APIENTRYP PFNGLISFRAMEBUFFERPROC) (GLuint framebuffer); +typedef GLboolean (GL_APIENTRYP PFNGLISPROGRAMPROC) (GLuint program); +typedef GLboolean (GL_APIENTRYP PFNGLISRENDERBUFFERPROC) (GLuint renderbuffer); +typedef GLboolean (GL_APIENTRYP PFNGLISSHADERPROC) (GLuint shader); +typedef GLboolean (GL_APIENTRYP PFNGLISTEXTUREPROC) (GLuint texture); +typedef void (GL_APIENTRYP PFNGLLINEWIDTHPROC) (GLfloat width); +typedef void (GL_APIENTRYP PFNGLLINKPROGRAMPROC) (GLuint program); +typedef void (GL_APIENTRYP PFNGLPIXELSTOREIPROC) (GLenum pname, GLint param); +typedef void (GL_APIENTRYP PFNGLPOLYGONOFFSETPROC) (GLfloat factor, GLfloat units); +typedef void (GL_APIENTRYP PFNGLREADPIXELSPROC) (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, void *pixels); +typedef void (GL_APIENTRYP PFNGLRELEASESHADERCOMPILERPROC) (void); +typedef void (GL_APIENTRYP PFNGLRENDERBUFFERSTORAGEPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height); +typedef void (GL_APIENTRYP PFNGLSAMPLECOVERAGEPROC) (GLfloat value, GLboolean invert); +typedef void (GL_APIENTRYP PFNGLSCISSORPROC) (GLint x, GLint y, GLsizei width, GLsizei height); +typedef void (GL_APIENTRYP PFNGLSHADERBINARYPROC) (GLsizei count, const GLuint *shaders, GLenum binaryFormat, const void *binary, GLsizei length); +typedef void (GL_APIENTRYP PFNGLSHADERSOURCEPROC) (GLuint shader, GLsizei count, const GLchar *const*string, const GLint *length); +typedef void (GL_APIENTRYP PFNGLSTENCILFUNCPROC) (GLenum func, GLint ref, GLuint mask); +typedef void (GL_APIENTRYP PFNGLSTENCILFUNCSEPARATEPROC) (GLenum face, GLenum func, GLint ref, GLuint mask); +typedef void (GL_APIENTRYP PFNGLSTENCILMASKPROC) (GLuint mask); +typedef void (GL_APIENTRYP PFNGLSTENCILMASKSEPARATEPROC) (GLenum face, GLuint mask); +typedef void (GL_APIENTRYP PFNGLSTENCILOPPROC) (GLenum fail, GLenum zfail, GLenum zpass); +typedef void (GL_APIENTRYP PFNGLSTENCILOPSEPARATEPROC) (GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass); +typedef void (GL_APIENTRYP PFNGLTEXIMAGE2DPROC) (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void *pixels); +typedef void (GL_APIENTRYP PFNGLTEXPARAMETERFPROC) (GLenum target, GLenum pname, GLfloat param); +typedef void (GL_APIENTRYP PFNGLTEXPARAMETERFVPROC) (GLenum target, GLenum pname, const GLfloat *params); +typedef void (GL_APIENTRYP PFNGLTEXPARAMETERIPROC) (GLenum target, GLenum pname, GLint param); +typedef void (GL_APIENTRYP PFNGLTEXPARAMETERIVPROC) (GLenum target, GLenum pname, const GLint *params); +typedef void (GL_APIENTRYP PFNGLTEXSUBIMAGE2DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels); +typedef void (GL_APIENTRYP PFNGLUNIFORM1FPROC) (GLint location, GLfloat v0); +typedef void (GL_APIENTRYP PFNGLUNIFORM1FVPROC) (GLint location, GLsizei count, const GLfloat *value); +typedef void (GL_APIENTRYP PFNGLUNIFORM1IPROC) (GLint location, GLint v0); +typedef void (GL_APIENTRYP PFNGLUNIFORM1IVPROC) (GLint location, GLsizei count, const GLint *value); +typedef void (GL_APIENTRYP PFNGLUNIFORM2FPROC) (GLint location, GLfloat v0, GLfloat v1); +typedef void (GL_APIENTRYP PFNGLUNIFORM2FVPROC) (GLint location, GLsizei count, const GLfloat *value); +typedef void (GL_APIENTRYP PFNGLUNIFORM2IPROC) (GLint location, GLint v0, GLint v1); +typedef void (GL_APIENTRYP PFNGLUNIFORM2IVPROC) (GLint location, GLsizei count, const GLint *value); +typedef void (GL_APIENTRYP PFNGLUNIFORM3FPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2); +typedef void (GL_APIENTRYP PFNGLUNIFORM3FVPROC) (GLint location, GLsizei count, const GLfloat *value); +typedef void (GL_APIENTRYP PFNGLUNIFORM3IPROC) (GLint location, GLint v0, GLint v1, GLint v2); +typedef void (GL_APIENTRYP PFNGLUNIFORM3IVPROC) (GLint location, GLsizei count, const GLint *value); +typedef void (GL_APIENTRYP PFNGLUNIFORM4FPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); +typedef void (GL_APIENTRYP PFNGLUNIFORM4FVPROC) (GLint location, GLsizei count, const GLfloat *value); +typedef void (GL_APIENTRYP PFNGLUNIFORM4IPROC) (GLint location, GLint v0, GLint v1, GLint v2, GLint v3); +typedef void (GL_APIENTRYP PFNGLUNIFORM4IVPROC) (GLint location, GLsizei count, const GLint *value); +typedef void (GL_APIENTRYP PFNGLUNIFORMMATRIX2FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (GL_APIENTRYP PFNGLUNIFORMMATRIX3FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (GL_APIENTRYP PFNGLUNIFORMMATRIX4FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (GL_APIENTRYP PFNGLUSEPROGRAMPROC) (GLuint program); +typedef void (GL_APIENTRYP PFNGLVALIDATEPROGRAMPROC) (GLuint program); +typedef void (GL_APIENTRYP PFNGLVERTEXATTRIB1FPROC) (GLuint index, GLfloat x); +typedef void (GL_APIENTRYP PFNGLVERTEXATTRIB1FVPROC) (GLuint index, const GLfloat *v); +typedef void (GL_APIENTRYP PFNGLVERTEXATTRIB2FPROC) (GLuint index, GLfloat x, GLfloat y); +typedef void (GL_APIENTRYP PFNGLVERTEXATTRIB2FVPROC) (GLuint index, const GLfloat *v); +typedef void (GL_APIENTRYP PFNGLVERTEXATTRIB3FPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z); +typedef void (GL_APIENTRYP PFNGLVERTEXATTRIB3FVPROC) (GLuint index, const GLfloat *v); +typedef void (GL_APIENTRYP PFNGLVERTEXATTRIB4FPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (GL_APIENTRYP PFNGLVERTEXATTRIB4FVPROC) (GLuint index, const GLfloat *v); +typedef void (GL_APIENTRYP PFNGLVERTEXATTRIBPOINTERPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void *pointer); +typedef void (GL_APIENTRYP PFNGLVIEWPORTPROC) (GLint x, GLint y, GLsizei width, GLsizei height); +#if GL_GLES_PROTOTYPES +GL_APICALL void GL_APIENTRY glActiveTexture (GLenum texture); +GL_APICALL void GL_APIENTRY glAttachShader (GLuint program, GLuint shader); +GL_APICALL void GL_APIENTRY glBindAttribLocation (GLuint program, GLuint index, const GLchar *name); +GL_APICALL void GL_APIENTRY glBindBuffer (GLenum target, GLuint buffer); +GL_APICALL void GL_APIENTRY glBindFramebuffer (GLenum target, GLuint framebuffer); +GL_APICALL void GL_APIENTRY glBindRenderbuffer (GLenum target, GLuint renderbuffer); +GL_APICALL void GL_APIENTRY glBindTexture (GLenum target, GLuint texture); +GL_APICALL void GL_APIENTRY glBlendColor (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); +GL_APICALL void GL_APIENTRY glBlendEquation (GLenum mode); +GL_APICALL void GL_APIENTRY glBlendEquationSeparate (GLenum modeRGB, GLenum modeAlpha); +GL_APICALL void GL_APIENTRY glBlendFunc (GLenum sfactor, GLenum dfactor); +GL_APICALL void GL_APIENTRY glBlendFuncSeparate (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); +GL_APICALL void GL_APIENTRY glBufferData (GLenum target, GLsizeiptr size, const void *data, GLenum usage); +GL_APICALL void GL_APIENTRY glBufferSubData (GLenum target, GLintptr offset, GLsizeiptr size, const void *data); +GL_APICALL GLenum GL_APIENTRY glCheckFramebufferStatus (GLenum target); +GL_APICALL void GL_APIENTRY glClear (GLbitfield mask); +GL_APICALL void GL_APIENTRY glClearColor (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); +GL_APICALL void GL_APIENTRY glClearDepthf (GLfloat d); +GL_APICALL void GL_APIENTRY glClearStencil (GLint s); +GL_APICALL void GL_APIENTRY glColorMask (GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha); +GL_APICALL void GL_APIENTRY glCompileShader (GLuint shader); +GL_APICALL void GL_APIENTRY glCompressedTexImage2D (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *data); +GL_APICALL void GL_APIENTRY glCompressedTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *data); +GL_APICALL void GL_APIENTRY glCopyTexImage2D (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); +GL_APICALL void GL_APIENTRY glCopyTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); +GL_APICALL GLuint GL_APIENTRY glCreateProgram (void); +GL_APICALL GLuint GL_APIENTRY glCreateShader (GLenum type); +GL_APICALL void GL_APIENTRY glCullFace (GLenum mode); +GL_APICALL void GL_APIENTRY glDeleteBuffers (GLsizei n, const GLuint *buffers); +GL_APICALL void GL_APIENTRY glDeleteFramebuffers (GLsizei n, const GLuint *framebuffers); +GL_APICALL void GL_APIENTRY glDeleteProgram (GLuint program); +GL_APICALL void GL_APIENTRY glDeleteRenderbuffers (GLsizei n, const GLuint *renderbuffers); +GL_APICALL void GL_APIENTRY glDeleteShader (GLuint shader); +GL_APICALL void GL_APIENTRY glDeleteTextures (GLsizei n, const GLuint *textures); +GL_APICALL void GL_APIENTRY glDepthFunc (GLenum func); +GL_APICALL void GL_APIENTRY glDepthMask (GLboolean flag); +GL_APICALL void GL_APIENTRY glDepthRangef (GLfloat n, GLfloat f); +GL_APICALL void GL_APIENTRY glDetachShader (GLuint program, GLuint shader); +GL_APICALL void GL_APIENTRY glDisable (GLenum cap); +GL_APICALL void GL_APIENTRY glDisableVertexAttribArray (GLuint index); +GL_APICALL void GL_APIENTRY glDrawArrays (GLenum mode, GLint first, GLsizei count); +GL_APICALL void GL_APIENTRY glDrawElements (GLenum mode, GLsizei count, GLenum type, const void *indices); +GL_APICALL void GL_APIENTRY glEnable (GLenum cap); +GL_APICALL void GL_APIENTRY glEnableVertexAttribArray (GLuint index); +GL_APICALL void GL_APIENTRY glFinish (void); +GL_APICALL void GL_APIENTRY glFlush (void); +GL_APICALL void GL_APIENTRY glFramebufferRenderbuffer (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); +GL_APICALL void GL_APIENTRY glFramebufferTexture2D (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); +GL_APICALL void GL_APIENTRY glFrontFace (GLenum mode); +GL_APICALL void GL_APIENTRY glGenBuffers (GLsizei n, GLuint *buffers); +GL_APICALL void GL_APIENTRY glGenerateMipmap (GLenum target); +GL_APICALL void GL_APIENTRY glGenFramebuffers (GLsizei n, GLuint *framebuffers); +GL_APICALL void GL_APIENTRY glGenRenderbuffers (GLsizei n, GLuint *renderbuffers); +GL_APICALL void GL_APIENTRY glGenTextures (GLsizei n, GLuint *textures); +GL_APICALL void GL_APIENTRY glGetActiveAttrib (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name); +GL_APICALL void GL_APIENTRY glGetActiveUniform (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name); +GL_APICALL void GL_APIENTRY glGetAttachedShaders (GLuint program, GLsizei maxCount, GLsizei *count, GLuint *shaders); +GL_APICALL GLint GL_APIENTRY glGetAttribLocation (GLuint program, const GLchar *name); +GL_APICALL void GL_APIENTRY glGetBooleanv (GLenum pname, GLboolean *data); +GL_APICALL void GL_APIENTRY glGetBufferParameteriv (GLenum target, GLenum pname, GLint *params); +GL_APICALL GLenum GL_APIENTRY glGetError (void); +GL_APICALL void GL_APIENTRY glGetFloatv (GLenum pname, GLfloat *data); +GL_APICALL void GL_APIENTRY glGetFramebufferAttachmentParameteriv (GLenum target, GLenum attachment, GLenum pname, GLint *params); +GL_APICALL void GL_APIENTRY glGetIntegerv (GLenum pname, GLint *data); +GL_APICALL void GL_APIENTRY glGetProgramiv (GLuint program, GLenum pname, GLint *params); +GL_APICALL void GL_APIENTRY glGetProgramInfoLog (GLuint program, GLsizei bufSize, GLsizei *length, GLchar *infoLog); +GL_APICALL void GL_APIENTRY glGetRenderbufferParameteriv (GLenum target, GLenum pname, GLint *params); +GL_APICALL void GL_APIENTRY glGetShaderiv (GLuint shader, GLenum pname, GLint *params); +GL_APICALL void GL_APIENTRY glGetShaderInfoLog (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *infoLog); +GL_APICALL void GL_APIENTRY glGetShaderPrecisionFormat (GLenum shadertype, GLenum precisiontype, GLint *range, GLint *precision); +GL_APICALL void GL_APIENTRY glGetShaderSource (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *source); +GL_APICALL const GLubyte *GL_APIENTRY glGetString (GLenum name); +GL_APICALL void GL_APIENTRY glGetTexParameterfv (GLenum target, GLenum pname, GLfloat *params); +GL_APICALL void GL_APIENTRY glGetTexParameteriv (GLenum target, GLenum pname, GLint *params); +GL_APICALL void GL_APIENTRY glGetUniformfv (GLuint program, GLint location, GLfloat *params); +GL_APICALL void GL_APIENTRY glGetUniformiv (GLuint program, GLint location, GLint *params); +GL_APICALL GLint GL_APIENTRY glGetUniformLocation (GLuint program, const GLchar *name); +GL_APICALL void GL_APIENTRY glGetVertexAttribfv (GLuint index, GLenum pname, GLfloat *params); +GL_APICALL void GL_APIENTRY glGetVertexAttribiv (GLuint index, GLenum pname, GLint *params); +GL_APICALL void GL_APIENTRY glGetVertexAttribPointerv (GLuint index, GLenum pname, void **pointer); +GL_APICALL void GL_APIENTRY glHint (GLenum target, GLenum mode); +GL_APICALL GLboolean GL_APIENTRY glIsBuffer (GLuint buffer); +GL_APICALL GLboolean GL_APIENTRY glIsEnabled (GLenum cap); +GL_APICALL GLboolean GL_APIENTRY glIsFramebuffer (GLuint framebuffer); +GL_APICALL GLboolean GL_APIENTRY glIsProgram (GLuint program); +GL_APICALL GLboolean GL_APIENTRY glIsRenderbuffer (GLuint renderbuffer); +GL_APICALL GLboolean GL_APIENTRY glIsShader (GLuint shader); +GL_APICALL GLboolean GL_APIENTRY glIsTexture (GLuint texture); +GL_APICALL void GL_APIENTRY glLineWidth (GLfloat width); +GL_APICALL void GL_APIENTRY glLinkProgram (GLuint program); +GL_APICALL void GL_APIENTRY glPixelStorei (GLenum pname, GLint param); +GL_APICALL void GL_APIENTRY glPolygonOffset (GLfloat factor, GLfloat units); +GL_APICALL void GL_APIENTRY glReadPixels (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, void *pixels); +GL_APICALL void GL_APIENTRY glReleaseShaderCompiler (void); +GL_APICALL void GL_APIENTRY glRenderbufferStorage (GLenum target, GLenum internalformat, GLsizei width, GLsizei height); +GL_APICALL void GL_APIENTRY glSampleCoverage (GLfloat value, GLboolean invert); +GL_APICALL void GL_APIENTRY glScissor (GLint x, GLint y, GLsizei width, GLsizei height); +GL_APICALL void GL_APIENTRY glShaderBinary (GLsizei count, const GLuint *shaders, GLenum binaryFormat, const void *binary, GLsizei length); +GL_APICALL void GL_APIENTRY glShaderSource (GLuint shader, GLsizei count, const GLchar *const*string, const GLint *length); +GL_APICALL void GL_APIENTRY glStencilFunc (GLenum func, GLint ref, GLuint mask); +GL_APICALL void GL_APIENTRY glStencilFuncSeparate (GLenum face, GLenum func, GLint ref, GLuint mask); +GL_APICALL void GL_APIENTRY glStencilMask (GLuint mask); +GL_APICALL void GL_APIENTRY glStencilMaskSeparate (GLenum face, GLuint mask); +GL_APICALL void GL_APIENTRY glStencilOp (GLenum fail, GLenum zfail, GLenum zpass); +GL_APICALL void GL_APIENTRY glStencilOpSeparate (GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass); +GL_APICALL void GL_APIENTRY glTexImage2D (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void *pixels); +GL_APICALL void GL_APIENTRY glTexParameterf (GLenum target, GLenum pname, GLfloat param); +GL_APICALL void GL_APIENTRY glTexParameterfv (GLenum target, GLenum pname, const GLfloat *params); +GL_APICALL void GL_APIENTRY glTexParameteri (GLenum target, GLenum pname, GLint param); +GL_APICALL void GL_APIENTRY glTexParameteriv (GLenum target, GLenum pname, const GLint *params); +GL_APICALL void GL_APIENTRY glTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels); +GL_APICALL void GL_APIENTRY glUniform1f (GLint location, GLfloat v0); +GL_APICALL void GL_APIENTRY glUniform1fv (GLint location, GLsizei count, const GLfloat *value); +GL_APICALL void GL_APIENTRY glUniform1i (GLint location, GLint v0); +GL_APICALL void GL_APIENTRY glUniform1iv (GLint location, GLsizei count, const GLint *value); +GL_APICALL void GL_APIENTRY glUniform2f (GLint location, GLfloat v0, GLfloat v1); +GL_APICALL void GL_APIENTRY glUniform2fv (GLint location, GLsizei count, const GLfloat *value); +GL_APICALL void GL_APIENTRY glUniform2i (GLint location, GLint v0, GLint v1); +GL_APICALL void GL_APIENTRY glUniform2iv (GLint location, GLsizei count, const GLint *value); +GL_APICALL void GL_APIENTRY glUniform3f (GLint location, GLfloat v0, GLfloat v1, GLfloat v2); +GL_APICALL void GL_APIENTRY glUniform3fv (GLint location, GLsizei count, const GLfloat *value); +GL_APICALL void GL_APIENTRY glUniform3i (GLint location, GLint v0, GLint v1, GLint v2); +GL_APICALL void GL_APIENTRY glUniform3iv (GLint location, GLsizei count, const GLint *value); +GL_APICALL void GL_APIENTRY glUniform4f (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); +GL_APICALL void GL_APIENTRY glUniform4fv (GLint location, GLsizei count, const GLfloat *value); +GL_APICALL void GL_APIENTRY glUniform4i (GLint location, GLint v0, GLint v1, GLint v2, GLint v3); +GL_APICALL void GL_APIENTRY glUniform4iv (GLint location, GLsizei count, const GLint *value); +GL_APICALL void GL_APIENTRY glUniformMatrix2fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GL_APICALL void GL_APIENTRY glUniformMatrix3fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GL_APICALL void GL_APIENTRY glUniformMatrix4fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GL_APICALL void GL_APIENTRY glUseProgram (GLuint program); +GL_APICALL void GL_APIENTRY glValidateProgram (GLuint program); +GL_APICALL void GL_APIENTRY glVertexAttrib1f (GLuint index, GLfloat x); +GL_APICALL void GL_APIENTRY glVertexAttrib1fv (GLuint index, const GLfloat *v); +GL_APICALL void GL_APIENTRY glVertexAttrib2f (GLuint index, GLfloat x, GLfloat y); +GL_APICALL void GL_APIENTRY glVertexAttrib2fv (GLuint index, const GLfloat *v); +GL_APICALL void GL_APIENTRY glVertexAttrib3f (GLuint index, GLfloat x, GLfloat y, GLfloat z); +GL_APICALL void GL_APIENTRY glVertexAttrib3fv (GLuint index, const GLfloat *v); +GL_APICALL void GL_APIENTRY glVertexAttrib4f (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +GL_APICALL void GL_APIENTRY glVertexAttrib4fv (GLuint index, const GLfloat *v); +GL_APICALL void GL_APIENTRY glVertexAttribPointer (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void *pointer); +GL_APICALL void GL_APIENTRY glViewport (GLint x, GLint y, GLsizei width, GLsizei height); +#endif +#endif /* GL_ES_VERSION_2_0 */ + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/third_party/tlRender-install-Release/include/SDL2/SDL_opengles2_gl2ext.h b/third_party/tlRender-install-Release/include/SDL2/SDL_opengles2_gl2ext.h new file mode 100644 index 00000000..9448ce09 --- /dev/null +++ b/third_party/tlRender-install-Release/include/SDL2/SDL_opengles2_gl2ext.h @@ -0,0 +1,4033 @@ +#ifndef __gles2_gl2ext_h_ +#define __gles2_gl2ext_h_ 1 + +#ifdef __cplusplus +extern "C" { +#endif + +/* +** Copyright 2013-2020 The Khronos Group Inc. +** SPDX-License-Identifier: MIT +** +** This header is generated from the Khronos OpenGL / OpenGL ES XML +** API Registry. The current version of the Registry, generator scripts +** used to make the header, and the header can be found at +** https://github.com/KhronosGroup/OpenGL-Registry +*/ + +#ifndef GL_APIENTRYP +#define GL_APIENTRYP GL_APIENTRY* +#endif + +/* Generated on date 20220530 */ + +/* Generated C header for: + * API: gles2 + * Profile: common + * Versions considered: 2\.[0-9] + * Versions emitted: _nomatch_^ + * Default extensions included: gles2 + * Additional extensions included: _nomatch_^ + * Extensions removed: _nomatch_^ + */ + +#ifndef GL_KHR_blend_equation_advanced +#define GL_KHR_blend_equation_advanced 1 +#define GL_MULTIPLY_KHR 0x9294 +#define GL_SCREEN_KHR 0x9295 +#define GL_OVERLAY_KHR 0x9296 +#define GL_DARKEN_KHR 0x9297 +#define GL_LIGHTEN_KHR 0x9298 +#define GL_COLORDODGE_KHR 0x9299 +#define GL_COLORBURN_KHR 0x929A +#define GL_HARDLIGHT_KHR 0x929B +#define GL_SOFTLIGHT_KHR 0x929C +#define GL_DIFFERENCE_KHR 0x929E +#define GL_EXCLUSION_KHR 0x92A0 +#define GL_HSL_HUE_KHR 0x92AD +#define GL_HSL_SATURATION_KHR 0x92AE +#define GL_HSL_COLOR_KHR 0x92AF +#define GL_HSL_LUMINOSITY_KHR 0x92B0 +typedef void (GL_APIENTRYP PFNGLBLENDBARRIERKHRPROC) (void); +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glBlendBarrierKHR (void); +#endif +#endif /* GL_KHR_blend_equation_advanced */ + +#ifndef GL_KHR_blend_equation_advanced_coherent +#define GL_KHR_blend_equation_advanced_coherent 1 +#define GL_BLEND_ADVANCED_COHERENT_KHR 0x9285 +#endif /* GL_KHR_blend_equation_advanced_coherent */ + +#ifndef GL_KHR_context_flush_control +#define GL_KHR_context_flush_control 1 +#define GL_CONTEXT_RELEASE_BEHAVIOR_KHR 0x82FB +#define GL_CONTEXT_RELEASE_BEHAVIOR_FLUSH_KHR 0x82FC +#endif /* GL_KHR_context_flush_control */ + +#ifndef GL_KHR_debug +#define GL_KHR_debug 1 +typedef void (GL_APIENTRY *GLDEBUGPROCKHR)(GLenum source,GLenum type,GLuint id,GLenum severity,GLsizei length,const GLchar *message,const void *userParam); +#define GL_SAMPLER 0x82E6 +#define GL_DEBUG_OUTPUT_SYNCHRONOUS_KHR 0x8242 +#define GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH_KHR 0x8243 +#define GL_DEBUG_CALLBACK_FUNCTION_KHR 0x8244 +#define GL_DEBUG_CALLBACK_USER_PARAM_KHR 0x8245 +#define GL_DEBUG_SOURCE_API_KHR 0x8246 +#define GL_DEBUG_SOURCE_WINDOW_SYSTEM_KHR 0x8247 +#define GL_DEBUG_SOURCE_SHADER_COMPILER_KHR 0x8248 +#define GL_DEBUG_SOURCE_THIRD_PARTY_KHR 0x8249 +#define GL_DEBUG_SOURCE_APPLICATION_KHR 0x824A +#define GL_DEBUG_SOURCE_OTHER_KHR 0x824B +#define GL_DEBUG_TYPE_ERROR_KHR 0x824C +#define GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR_KHR 0x824D +#define GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR_KHR 0x824E +#define GL_DEBUG_TYPE_PORTABILITY_KHR 0x824F +#define GL_DEBUG_TYPE_PERFORMANCE_KHR 0x8250 +#define GL_DEBUG_TYPE_OTHER_KHR 0x8251 +#define GL_DEBUG_TYPE_MARKER_KHR 0x8268 +#define GL_DEBUG_TYPE_PUSH_GROUP_KHR 0x8269 +#define GL_DEBUG_TYPE_POP_GROUP_KHR 0x826A +#define GL_DEBUG_SEVERITY_NOTIFICATION_KHR 0x826B +#define GL_MAX_DEBUG_GROUP_STACK_DEPTH_KHR 0x826C +#define GL_DEBUG_GROUP_STACK_DEPTH_KHR 0x826D +#define GL_BUFFER_KHR 0x82E0 +#define GL_SHADER_KHR 0x82E1 +#define GL_PROGRAM_KHR 0x82E2 +#define GL_VERTEX_ARRAY_KHR 0x8074 +#define GL_QUERY_KHR 0x82E3 +#define GL_PROGRAM_PIPELINE_KHR 0x82E4 +#define GL_SAMPLER_KHR 0x82E6 +#define GL_MAX_LABEL_LENGTH_KHR 0x82E8 +#define GL_MAX_DEBUG_MESSAGE_LENGTH_KHR 0x9143 +#define GL_MAX_DEBUG_LOGGED_MESSAGES_KHR 0x9144 +#define GL_DEBUG_LOGGED_MESSAGES_KHR 0x9145 +#define GL_DEBUG_SEVERITY_HIGH_KHR 0x9146 +#define GL_DEBUG_SEVERITY_MEDIUM_KHR 0x9147 +#define GL_DEBUG_SEVERITY_LOW_KHR 0x9148 +#define GL_DEBUG_OUTPUT_KHR 0x92E0 +#define GL_CONTEXT_FLAG_DEBUG_BIT_KHR 0x00000002 +#define GL_STACK_OVERFLOW_KHR 0x0503 +#define GL_STACK_UNDERFLOW_KHR 0x0504 +typedef void (GL_APIENTRYP PFNGLDEBUGMESSAGECONTROLKHRPROC) (GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled); +typedef void (GL_APIENTRYP PFNGLDEBUGMESSAGEINSERTKHRPROC) (GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *buf); +typedef void (GL_APIENTRYP PFNGLDEBUGMESSAGECALLBACKKHRPROC) (GLDEBUGPROCKHR callback, const void *userParam); +typedef GLuint (GL_APIENTRYP PFNGLGETDEBUGMESSAGELOGKHRPROC) (GLuint count, GLsizei bufSize, GLenum *sources, GLenum *types, GLuint *ids, GLenum *severities, GLsizei *lengths, GLchar *messageLog); +typedef void (GL_APIENTRYP PFNGLPUSHDEBUGGROUPKHRPROC) (GLenum source, GLuint id, GLsizei length, const GLchar *message); +typedef void (GL_APIENTRYP PFNGLPOPDEBUGGROUPKHRPROC) (void); +typedef void (GL_APIENTRYP PFNGLOBJECTLABELKHRPROC) (GLenum identifier, GLuint name, GLsizei length, const GLchar *label); +typedef void (GL_APIENTRYP PFNGLGETOBJECTLABELKHRPROC) (GLenum identifier, GLuint name, GLsizei bufSize, GLsizei *length, GLchar *label); +typedef void (GL_APIENTRYP PFNGLOBJECTPTRLABELKHRPROC) (const void *ptr, GLsizei length, const GLchar *label); +typedef void (GL_APIENTRYP PFNGLGETOBJECTPTRLABELKHRPROC) (const void *ptr, GLsizei bufSize, GLsizei *length, GLchar *label); +typedef void (GL_APIENTRYP PFNGLGETPOINTERVKHRPROC) (GLenum pname, void **params); +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glDebugMessageControlKHR (GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled); +GL_APICALL void GL_APIENTRY glDebugMessageInsertKHR (GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *buf); +GL_APICALL void GL_APIENTRY glDebugMessageCallbackKHR (GLDEBUGPROCKHR callback, const void *userParam); +GL_APICALL GLuint GL_APIENTRY glGetDebugMessageLogKHR (GLuint count, GLsizei bufSize, GLenum *sources, GLenum *types, GLuint *ids, GLenum *severities, GLsizei *lengths, GLchar *messageLog); +GL_APICALL void GL_APIENTRY glPushDebugGroupKHR (GLenum source, GLuint id, GLsizei length, const GLchar *message); +GL_APICALL void GL_APIENTRY glPopDebugGroupKHR (void); +GL_APICALL void GL_APIENTRY glObjectLabelKHR (GLenum identifier, GLuint name, GLsizei length, const GLchar *label); +GL_APICALL void GL_APIENTRY glGetObjectLabelKHR (GLenum identifier, GLuint name, GLsizei bufSize, GLsizei *length, GLchar *label); +GL_APICALL void GL_APIENTRY glObjectPtrLabelKHR (const void *ptr, GLsizei length, const GLchar *label); +GL_APICALL void GL_APIENTRY glGetObjectPtrLabelKHR (const void *ptr, GLsizei bufSize, GLsizei *length, GLchar *label); +GL_APICALL void GL_APIENTRY glGetPointervKHR (GLenum pname, void **params); +#endif +#endif /* GL_KHR_debug */ + +#ifndef GL_KHR_no_error +#define GL_KHR_no_error 1 +#define GL_CONTEXT_FLAG_NO_ERROR_BIT_KHR 0x00000008 +#endif /* GL_KHR_no_error */ + +#ifndef GL_KHR_parallel_shader_compile +#define GL_KHR_parallel_shader_compile 1 +#define GL_MAX_SHADER_COMPILER_THREADS_KHR 0x91B0 +#define GL_COMPLETION_STATUS_KHR 0x91B1 +typedef void (GL_APIENTRYP PFNGLMAXSHADERCOMPILERTHREADSKHRPROC) (GLuint count); +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glMaxShaderCompilerThreadsKHR (GLuint count); +#endif +#endif /* GL_KHR_parallel_shader_compile */ + +#ifndef GL_KHR_robust_buffer_access_behavior +#define GL_KHR_robust_buffer_access_behavior 1 +#endif /* GL_KHR_robust_buffer_access_behavior */ + +#ifndef GL_KHR_robustness +#define GL_KHR_robustness 1 +#define GL_CONTEXT_ROBUST_ACCESS_KHR 0x90F3 +#define GL_LOSE_CONTEXT_ON_RESET_KHR 0x8252 +#define GL_GUILTY_CONTEXT_RESET_KHR 0x8253 +#define GL_INNOCENT_CONTEXT_RESET_KHR 0x8254 +#define GL_UNKNOWN_CONTEXT_RESET_KHR 0x8255 +#define GL_RESET_NOTIFICATION_STRATEGY_KHR 0x8256 +#define GL_NO_RESET_NOTIFICATION_KHR 0x8261 +#define GL_CONTEXT_LOST_KHR 0x0507 +typedef GLenum (GL_APIENTRYP PFNGLGETGRAPHICSRESETSTATUSKHRPROC) (void); +typedef void (GL_APIENTRYP PFNGLREADNPIXELSKHRPROC) (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, void *data); +typedef void (GL_APIENTRYP PFNGLGETNUNIFORMFVKHRPROC) (GLuint program, GLint location, GLsizei bufSize, GLfloat *params); +typedef void (GL_APIENTRYP PFNGLGETNUNIFORMIVKHRPROC) (GLuint program, GLint location, GLsizei bufSize, GLint *params); +typedef void (GL_APIENTRYP PFNGLGETNUNIFORMUIVKHRPROC) (GLuint program, GLint location, GLsizei bufSize, GLuint *params); +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL GLenum GL_APIENTRY glGetGraphicsResetStatusKHR (void); +GL_APICALL void GL_APIENTRY glReadnPixelsKHR (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, void *data); +GL_APICALL void GL_APIENTRY glGetnUniformfvKHR (GLuint program, GLint location, GLsizei bufSize, GLfloat *params); +GL_APICALL void GL_APIENTRY glGetnUniformivKHR (GLuint program, GLint location, GLsizei bufSize, GLint *params); +GL_APICALL void GL_APIENTRY glGetnUniformuivKHR (GLuint program, GLint location, GLsizei bufSize, GLuint *params); +#endif +#endif /* GL_KHR_robustness */ + +#ifndef GL_KHR_shader_subgroup +#define GL_KHR_shader_subgroup 1 +#define GL_SUBGROUP_SIZE_KHR 0x9532 +#define GL_SUBGROUP_SUPPORTED_STAGES_KHR 0x9533 +#define GL_SUBGROUP_SUPPORTED_FEATURES_KHR 0x9534 +#define GL_SUBGROUP_QUAD_ALL_STAGES_KHR 0x9535 +#define GL_SUBGROUP_FEATURE_BASIC_BIT_KHR 0x00000001 +#define GL_SUBGROUP_FEATURE_VOTE_BIT_KHR 0x00000002 +#define GL_SUBGROUP_FEATURE_ARITHMETIC_BIT_KHR 0x00000004 +#define GL_SUBGROUP_FEATURE_BALLOT_BIT_KHR 0x00000008 +#define GL_SUBGROUP_FEATURE_SHUFFLE_BIT_KHR 0x00000010 +#define GL_SUBGROUP_FEATURE_SHUFFLE_RELATIVE_BIT_KHR 0x00000020 +#define GL_SUBGROUP_FEATURE_CLUSTERED_BIT_KHR 0x00000040 +#define GL_SUBGROUP_FEATURE_QUAD_BIT_KHR 0x00000080 +#endif /* GL_KHR_shader_subgroup */ + +#ifndef GL_KHR_texture_compression_astc_hdr +#define GL_KHR_texture_compression_astc_hdr 1 +#define GL_COMPRESSED_RGBA_ASTC_4x4_KHR 0x93B0 +#define GL_COMPRESSED_RGBA_ASTC_5x4_KHR 0x93B1 +#define GL_COMPRESSED_RGBA_ASTC_5x5_KHR 0x93B2 +#define GL_COMPRESSED_RGBA_ASTC_6x5_KHR 0x93B3 +#define GL_COMPRESSED_RGBA_ASTC_6x6_KHR 0x93B4 +#define GL_COMPRESSED_RGBA_ASTC_8x5_KHR 0x93B5 +#define GL_COMPRESSED_RGBA_ASTC_8x6_KHR 0x93B6 +#define GL_COMPRESSED_RGBA_ASTC_8x8_KHR 0x93B7 +#define GL_COMPRESSED_RGBA_ASTC_10x5_KHR 0x93B8 +#define GL_COMPRESSED_RGBA_ASTC_10x6_KHR 0x93B9 +#define GL_COMPRESSED_RGBA_ASTC_10x8_KHR 0x93BA +#define GL_COMPRESSED_RGBA_ASTC_10x10_KHR 0x93BB +#define GL_COMPRESSED_RGBA_ASTC_12x10_KHR 0x93BC +#define GL_COMPRESSED_RGBA_ASTC_12x12_KHR 0x93BD +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR 0x93D0 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR 0x93D1 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR 0x93D2 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR 0x93D3 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR 0x93D4 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR 0x93D5 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR 0x93D6 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR 0x93D7 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR 0x93D8 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR 0x93D9 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR 0x93DA +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR 0x93DB +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR 0x93DC +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR 0x93DD +#endif /* GL_KHR_texture_compression_astc_hdr */ + +#ifndef GL_KHR_texture_compression_astc_ldr +#define GL_KHR_texture_compression_astc_ldr 1 +#endif /* GL_KHR_texture_compression_astc_ldr */ + +#ifndef GL_KHR_texture_compression_astc_sliced_3d +#define GL_KHR_texture_compression_astc_sliced_3d 1 +#endif /* GL_KHR_texture_compression_astc_sliced_3d */ + +#ifndef GL_OES_EGL_image +#define GL_OES_EGL_image 1 +typedef void *GLeglImageOES; +typedef void (GL_APIENTRYP PFNGLEGLIMAGETARGETTEXTURE2DOESPROC) (GLenum target, GLeglImageOES image); +typedef void (GL_APIENTRYP PFNGLEGLIMAGETARGETRENDERBUFFERSTORAGEOESPROC) (GLenum target, GLeglImageOES image); +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glEGLImageTargetTexture2DOES (GLenum target, GLeglImageOES image); +GL_APICALL void GL_APIENTRY glEGLImageTargetRenderbufferStorageOES (GLenum target, GLeglImageOES image); +#endif +#endif /* GL_OES_EGL_image */ + +#ifndef GL_OES_EGL_image_external +#define GL_OES_EGL_image_external 1 +#define GL_TEXTURE_EXTERNAL_OES 0x8D65 +#define GL_TEXTURE_BINDING_EXTERNAL_OES 0x8D67 +#define GL_REQUIRED_TEXTURE_IMAGE_UNITS_OES 0x8D68 +#define GL_SAMPLER_EXTERNAL_OES 0x8D66 +#endif /* GL_OES_EGL_image_external */ + +#ifndef GL_OES_EGL_image_external_essl3 +#define GL_OES_EGL_image_external_essl3 1 +#endif /* GL_OES_EGL_image_external_essl3 */ + +#ifndef GL_OES_compressed_ETC1_RGB8_sub_texture +#define GL_OES_compressed_ETC1_RGB8_sub_texture 1 +#endif /* GL_OES_compressed_ETC1_RGB8_sub_texture */ + +#ifndef GL_OES_compressed_ETC1_RGB8_texture +#define GL_OES_compressed_ETC1_RGB8_texture 1 +#define GL_ETC1_RGB8_OES 0x8D64 +#endif /* GL_OES_compressed_ETC1_RGB8_texture */ + +#ifndef GL_OES_compressed_paletted_texture +#define GL_OES_compressed_paletted_texture 1 +#define GL_PALETTE4_RGB8_OES 0x8B90 +#define GL_PALETTE4_RGBA8_OES 0x8B91 +#define GL_PALETTE4_R5_G6_B5_OES 0x8B92 +#define GL_PALETTE4_RGBA4_OES 0x8B93 +#define GL_PALETTE4_RGB5_A1_OES 0x8B94 +#define GL_PALETTE8_RGB8_OES 0x8B95 +#define GL_PALETTE8_RGBA8_OES 0x8B96 +#define GL_PALETTE8_R5_G6_B5_OES 0x8B97 +#define GL_PALETTE8_RGBA4_OES 0x8B98 +#define GL_PALETTE8_RGB5_A1_OES 0x8B99 +#endif /* GL_OES_compressed_paletted_texture */ + +#ifndef GL_OES_copy_image +#define GL_OES_copy_image 1 +typedef void (GL_APIENTRYP PFNGLCOPYIMAGESUBDATAOESPROC) (GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei srcWidth, GLsizei srcHeight, GLsizei srcDepth); +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glCopyImageSubDataOES (GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei srcWidth, GLsizei srcHeight, GLsizei srcDepth); +#endif +#endif /* GL_OES_copy_image */ + +#ifndef GL_OES_depth24 +#define GL_OES_depth24 1 +#define GL_DEPTH_COMPONENT24_OES 0x81A6 +#endif /* GL_OES_depth24 */ + +#ifndef GL_OES_depth32 +#define GL_OES_depth32 1 +#define GL_DEPTH_COMPONENT32_OES 0x81A7 +#endif /* GL_OES_depth32 */ + +#ifndef GL_OES_depth_texture +#define GL_OES_depth_texture 1 +#endif /* GL_OES_depth_texture */ + +#ifndef GL_OES_draw_buffers_indexed +#define GL_OES_draw_buffers_indexed 1 +#define GL_MIN 0x8007 +#define GL_MAX 0x8008 +typedef void (GL_APIENTRYP PFNGLENABLEIOESPROC) (GLenum target, GLuint index); +typedef void (GL_APIENTRYP PFNGLDISABLEIOESPROC) (GLenum target, GLuint index); +typedef void (GL_APIENTRYP PFNGLBLENDEQUATIONIOESPROC) (GLuint buf, GLenum mode); +typedef void (GL_APIENTRYP PFNGLBLENDEQUATIONSEPARATEIOESPROC) (GLuint buf, GLenum modeRGB, GLenum modeAlpha); +typedef void (GL_APIENTRYP PFNGLBLENDFUNCIOESPROC) (GLuint buf, GLenum src, GLenum dst); +typedef void (GL_APIENTRYP PFNGLBLENDFUNCSEPARATEIOESPROC) (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); +typedef void (GL_APIENTRYP PFNGLCOLORMASKIOESPROC) (GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a); +typedef GLboolean (GL_APIENTRYP PFNGLISENABLEDIOESPROC) (GLenum target, GLuint index); +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glEnableiOES (GLenum target, GLuint index); +GL_APICALL void GL_APIENTRY glDisableiOES (GLenum target, GLuint index); +GL_APICALL void GL_APIENTRY glBlendEquationiOES (GLuint buf, GLenum mode); +GL_APICALL void GL_APIENTRY glBlendEquationSeparateiOES (GLuint buf, GLenum modeRGB, GLenum modeAlpha); +GL_APICALL void GL_APIENTRY glBlendFunciOES (GLuint buf, GLenum src, GLenum dst); +GL_APICALL void GL_APIENTRY glBlendFuncSeparateiOES (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); +GL_APICALL void GL_APIENTRY glColorMaskiOES (GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a); +GL_APICALL GLboolean GL_APIENTRY glIsEnablediOES (GLenum target, GLuint index); +#endif +#endif /* GL_OES_draw_buffers_indexed */ + +#ifndef GL_OES_draw_elements_base_vertex +#define GL_OES_draw_elements_base_vertex 1 +typedef void (GL_APIENTRYP PFNGLDRAWELEMENTSBASEVERTEXOESPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLint basevertex); +typedef void (GL_APIENTRYP PFNGLDRAWRANGEELEMENTSBASEVERTEXOESPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices, GLint basevertex); +typedef void (GL_APIENTRYP PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXOESPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLint basevertex); +typedef void (GL_APIENTRYP PFNGLMULTIDRAWELEMENTSBASEVERTEXEXTPROC) (GLenum mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei drawcount, const GLint *basevertex); +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glDrawElementsBaseVertexOES (GLenum mode, GLsizei count, GLenum type, const void *indices, GLint basevertex); +GL_APICALL void GL_APIENTRY glDrawRangeElementsBaseVertexOES (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices, GLint basevertex); +GL_APICALL void GL_APIENTRY glDrawElementsInstancedBaseVertexOES (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLint basevertex); +GL_APICALL void GL_APIENTRY glMultiDrawElementsBaseVertexEXT (GLenum mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei drawcount, const GLint *basevertex); +#endif +#endif /* GL_OES_draw_elements_base_vertex */ + +#ifndef GL_OES_element_index_uint +#define GL_OES_element_index_uint 1 +#endif /* GL_OES_element_index_uint */ + +#ifndef GL_OES_fbo_render_mipmap +#define GL_OES_fbo_render_mipmap 1 +#endif /* GL_OES_fbo_render_mipmap */ + +#ifndef GL_OES_fragment_precision_high +#define GL_OES_fragment_precision_high 1 +#endif /* GL_OES_fragment_precision_high */ + +#ifndef GL_OES_geometry_point_size +#define GL_OES_geometry_point_size 1 +#endif /* GL_OES_geometry_point_size */ + +#ifndef GL_OES_geometry_shader +#define GL_OES_geometry_shader 1 +#define GL_GEOMETRY_SHADER_OES 0x8DD9 +#define GL_GEOMETRY_SHADER_BIT_OES 0x00000004 +#define GL_GEOMETRY_LINKED_VERTICES_OUT_OES 0x8916 +#define GL_GEOMETRY_LINKED_INPUT_TYPE_OES 0x8917 +#define GL_GEOMETRY_LINKED_OUTPUT_TYPE_OES 0x8918 +#define GL_GEOMETRY_SHADER_INVOCATIONS_OES 0x887F +#define GL_LAYER_PROVOKING_VERTEX_OES 0x825E +#define GL_LINES_ADJACENCY_OES 0x000A +#define GL_LINE_STRIP_ADJACENCY_OES 0x000B +#define GL_TRIANGLES_ADJACENCY_OES 0x000C +#define GL_TRIANGLE_STRIP_ADJACENCY_OES 0x000D +#define GL_MAX_GEOMETRY_UNIFORM_COMPONENTS_OES 0x8DDF +#define GL_MAX_GEOMETRY_UNIFORM_BLOCKS_OES 0x8A2C +#define GL_MAX_COMBINED_GEOMETRY_UNIFORM_COMPONENTS_OES 0x8A32 +#define GL_MAX_GEOMETRY_INPUT_COMPONENTS_OES 0x9123 +#define GL_MAX_GEOMETRY_OUTPUT_COMPONENTS_OES 0x9124 +#define GL_MAX_GEOMETRY_OUTPUT_VERTICES_OES 0x8DE0 +#define GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS_OES 0x8DE1 +#define GL_MAX_GEOMETRY_SHADER_INVOCATIONS_OES 0x8E5A +#define GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS_OES 0x8C29 +#define GL_MAX_GEOMETRY_ATOMIC_COUNTER_BUFFERS_OES 0x92CF +#define GL_MAX_GEOMETRY_ATOMIC_COUNTERS_OES 0x92D5 +#define GL_MAX_GEOMETRY_IMAGE_UNIFORMS_OES 0x90CD +#define GL_MAX_GEOMETRY_SHADER_STORAGE_BLOCKS_OES 0x90D7 +#define GL_FIRST_VERTEX_CONVENTION_OES 0x8E4D +#define GL_LAST_VERTEX_CONVENTION_OES 0x8E4E +#define GL_UNDEFINED_VERTEX_OES 0x8260 +#define GL_PRIMITIVES_GENERATED_OES 0x8C87 +#define GL_FRAMEBUFFER_DEFAULT_LAYERS_OES 0x9312 +#define GL_MAX_FRAMEBUFFER_LAYERS_OES 0x9317 +#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS_OES 0x8DA8 +#define GL_FRAMEBUFFER_ATTACHMENT_LAYERED_OES 0x8DA7 +#define GL_REFERENCED_BY_GEOMETRY_SHADER_OES 0x9309 +typedef void (GL_APIENTRYP PFNGLFRAMEBUFFERTEXTUREOESPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level); +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glFramebufferTextureOES (GLenum target, GLenum attachment, GLuint texture, GLint level); +#endif +#endif /* GL_OES_geometry_shader */ + +#ifndef GL_OES_get_program_binary +#define GL_OES_get_program_binary 1 +#define GL_PROGRAM_BINARY_LENGTH_OES 0x8741 +#define GL_NUM_PROGRAM_BINARY_FORMATS_OES 0x87FE +#define GL_PROGRAM_BINARY_FORMATS_OES 0x87FF +typedef void (GL_APIENTRYP PFNGLGETPROGRAMBINARYOESPROC) (GLuint program, GLsizei bufSize, GLsizei *length, GLenum *binaryFormat, void *binary); +typedef void (GL_APIENTRYP PFNGLPROGRAMBINARYOESPROC) (GLuint program, GLenum binaryFormat, const void *binary, GLint length); +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glGetProgramBinaryOES (GLuint program, GLsizei bufSize, GLsizei *length, GLenum *binaryFormat, void *binary); +GL_APICALL void GL_APIENTRY glProgramBinaryOES (GLuint program, GLenum binaryFormat, const void *binary, GLint length); +#endif +#endif /* GL_OES_get_program_binary */ + +#ifndef GL_OES_gpu_shader5 +#define GL_OES_gpu_shader5 1 +#endif /* GL_OES_gpu_shader5 */ + +#ifndef GL_OES_mapbuffer +#define GL_OES_mapbuffer 1 +#define GL_WRITE_ONLY_OES 0x88B9 +#define GL_BUFFER_ACCESS_OES 0x88BB +#define GL_BUFFER_MAPPED_OES 0x88BC +#define GL_BUFFER_MAP_POINTER_OES 0x88BD +typedef void *(GL_APIENTRYP PFNGLMAPBUFFEROESPROC) (GLenum target, GLenum access); +typedef GLboolean (GL_APIENTRYP PFNGLUNMAPBUFFEROESPROC) (GLenum target); +typedef void (GL_APIENTRYP PFNGLGETBUFFERPOINTERVOESPROC) (GLenum target, GLenum pname, void **params); +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void *GL_APIENTRY glMapBufferOES (GLenum target, GLenum access); +GL_APICALL GLboolean GL_APIENTRY glUnmapBufferOES (GLenum target); +GL_APICALL void GL_APIENTRY glGetBufferPointervOES (GLenum target, GLenum pname, void **params); +#endif +#endif /* GL_OES_mapbuffer */ + +#ifndef GL_OES_packed_depth_stencil +#define GL_OES_packed_depth_stencil 1 +#define GL_DEPTH_STENCIL_OES 0x84F9 +#define GL_UNSIGNED_INT_24_8_OES 0x84FA +#define GL_DEPTH24_STENCIL8_OES 0x88F0 +#endif /* GL_OES_packed_depth_stencil */ + +#ifndef GL_OES_primitive_bounding_box +#define GL_OES_primitive_bounding_box 1 +#define GL_PRIMITIVE_BOUNDING_BOX_OES 0x92BE +typedef void (GL_APIENTRYP PFNGLPRIMITIVEBOUNDINGBOXOESPROC) (GLfloat minX, GLfloat minY, GLfloat minZ, GLfloat minW, GLfloat maxX, GLfloat maxY, GLfloat maxZ, GLfloat maxW); +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glPrimitiveBoundingBoxOES (GLfloat minX, GLfloat minY, GLfloat minZ, GLfloat minW, GLfloat maxX, GLfloat maxY, GLfloat maxZ, GLfloat maxW); +#endif +#endif /* GL_OES_primitive_bounding_box */ + +#ifndef GL_OES_required_internalformat +#define GL_OES_required_internalformat 1 +#define GL_ALPHA8_OES 0x803C +#define GL_DEPTH_COMPONENT16_OES 0x81A5 +#define GL_LUMINANCE4_ALPHA4_OES 0x8043 +#define GL_LUMINANCE8_ALPHA8_OES 0x8045 +#define GL_LUMINANCE8_OES 0x8040 +#define GL_RGBA4_OES 0x8056 +#define GL_RGB5_A1_OES 0x8057 +#define GL_RGB565_OES 0x8D62 +#define GL_RGB8_OES 0x8051 +#define GL_RGBA8_OES 0x8058 +#define GL_RGB10_EXT 0x8052 +#define GL_RGB10_A2_EXT 0x8059 +#endif /* GL_OES_required_internalformat */ + +#ifndef GL_OES_rgb8_rgba8 +#define GL_OES_rgb8_rgba8 1 +#endif /* GL_OES_rgb8_rgba8 */ + +#ifndef GL_OES_sample_shading +#define GL_OES_sample_shading 1 +#define GL_SAMPLE_SHADING_OES 0x8C36 +#define GL_MIN_SAMPLE_SHADING_VALUE_OES 0x8C37 +typedef void (GL_APIENTRYP PFNGLMINSAMPLESHADINGOESPROC) (GLfloat value); +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glMinSampleShadingOES (GLfloat value); +#endif +#endif /* GL_OES_sample_shading */ + +#ifndef GL_OES_sample_variables +#define GL_OES_sample_variables 1 +#endif /* GL_OES_sample_variables */ + +#ifndef GL_OES_shader_image_atomic +#define GL_OES_shader_image_atomic 1 +#endif /* GL_OES_shader_image_atomic */ + +#ifndef GL_OES_shader_io_blocks +#define GL_OES_shader_io_blocks 1 +#endif /* GL_OES_shader_io_blocks */ + +#ifndef GL_OES_shader_multisample_interpolation +#define GL_OES_shader_multisample_interpolation 1 +#define GL_MIN_FRAGMENT_INTERPOLATION_OFFSET_OES 0x8E5B +#define GL_MAX_FRAGMENT_INTERPOLATION_OFFSET_OES 0x8E5C +#define GL_FRAGMENT_INTERPOLATION_OFFSET_BITS_OES 0x8E5D +#endif /* GL_OES_shader_multisample_interpolation */ + +#ifndef GL_OES_standard_derivatives +#define GL_OES_standard_derivatives 1 +#define GL_FRAGMENT_SHADER_DERIVATIVE_HINT_OES 0x8B8B +#endif /* GL_OES_standard_derivatives */ + +#ifndef GL_OES_stencil1 +#define GL_OES_stencil1 1 +#define GL_STENCIL_INDEX1_OES 0x8D46 +#endif /* GL_OES_stencil1 */ + +#ifndef GL_OES_stencil4 +#define GL_OES_stencil4 1 +#define GL_STENCIL_INDEX4_OES 0x8D47 +#endif /* GL_OES_stencil4 */ + +#ifndef GL_OES_surfaceless_context +#define GL_OES_surfaceless_context 1 +#define GL_FRAMEBUFFER_UNDEFINED_OES 0x8219 +#endif /* GL_OES_surfaceless_context */ + +#ifndef GL_OES_tessellation_point_size +#define GL_OES_tessellation_point_size 1 +#endif /* GL_OES_tessellation_point_size */ + +#ifndef GL_OES_tessellation_shader +#define GL_OES_tessellation_shader 1 +#define GL_PATCHES_OES 0x000E +#define GL_PATCH_VERTICES_OES 0x8E72 +#define GL_TESS_CONTROL_OUTPUT_VERTICES_OES 0x8E75 +#define GL_TESS_GEN_MODE_OES 0x8E76 +#define GL_TESS_GEN_SPACING_OES 0x8E77 +#define GL_TESS_GEN_VERTEX_ORDER_OES 0x8E78 +#define GL_TESS_GEN_POINT_MODE_OES 0x8E79 +#define GL_ISOLINES_OES 0x8E7A +#define GL_QUADS_OES 0x0007 +#define GL_FRACTIONAL_ODD_OES 0x8E7B +#define GL_FRACTIONAL_EVEN_OES 0x8E7C +#define GL_MAX_PATCH_VERTICES_OES 0x8E7D +#define GL_MAX_TESS_GEN_LEVEL_OES 0x8E7E +#define GL_MAX_TESS_CONTROL_UNIFORM_COMPONENTS_OES 0x8E7F +#define GL_MAX_TESS_EVALUATION_UNIFORM_COMPONENTS_OES 0x8E80 +#define GL_MAX_TESS_CONTROL_TEXTURE_IMAGE_UNITS_OES 0x8E81 +#define GL_MAX_TESS_EVALUATION_TEXTURE_IMAGE_UNITS_OES 0x8E82 +#define GL_MAX_TESS_CONTROL_OUTPUT_COMPONENTS_OES 0x8E83 +#define GL_MAX_TESS_PATCH_COMPONENTS_OES 0x8E84 +#define GL_MAX_TESS_CONTROL_TOTAL_OUTPUT_COMPONENTS_OES 0x8E85 +#define GL_MAX_TESS_EVALUATION_OUTPUT_COMPONENTS_OES 0x8E86 +#define GL_MAX_TESS_CONTROL_UNIFORM_BLOCKS_OES 0x8E89 +#define GL_MAX_TESS_EVALUATION_UNIFORM_BLOCKS_OES 0x8E8A +#define GL_MAX_TESS_CONTROL_INPUT_COMPONENTS_OES 0x886C +#define GL_MAX_TESS_EVALUATION_INPUT_COMPONENTS_OES 0x886D +#define GL_MAX_COMBINED_TESS_CONTROL_UNIFORM_COMPONENTS_OES 0x8E1E +#define GL_MAX_COMBINED_TESS_EVALUATION_UNIFORM_COMPONENTS_OES 0x8E1F +#define GL_MAX_TESS_CONTROL_ATOMIC_COUNTER_BUFFERS_OES 0x92CD +#define GL_MAX_TESS_EVALUATION_ATOMIC_COUNTER_BUFFERS_OES 0x92CE +#define GL_MAX_TESS_CONTROL_ATOMIC_COUNTERS_OES 0x92D3 +#define GL_MAX_TESS_EVALUATION_ATOMIC_COUNTERS_OES 0x92D4 +#define GL_MAX_TESS_CONTROL_IMAGE_UNIFORMS_OES 0x90CB +#define GL_MAX_TESS_EVALUATION_IMAGE_UNIFORMS_OES 0x90CC +#define GL_MAX_TESS_CONTROL_SHADER_STORAGE_BLOCKS_OES 0x90D8 +#define GL_MAX_TESS_EVALUATION_SHADER_STORAGE_BLOCKS_OES 0x90D9 +#define GL_PRIMITIVE_RESTART_FOR_PATCHES_SUPPORTED_OES 0x8221 +#define GL_IS_PER_PATCH_OES 0x92E7 +#define GL_REFERENCED_BY_TESS_CONTROL_SHADER_OES 0x9307 +#define GL_REFERENCED_BY_TESS_EVALUATION_SHADER_OES 0x9308 +#define GL_TESS_CONTROL_SHADER_OES 0x8E88 +#define GL_TESS_EVALUATION_SHADER_OES 0x8E87 +#define GL_TESS_CONTROL_SHADER_BIT_OES 0x00000008 +#define GL_TESS_EVALUATION_SHADER_BIT_OES 0x00000010 +typedef void (GL_APIENTRYP PFNGLPATCHPARAMETERIOESPROC) (GLenum pname, GLint value); +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glPatchParameteriOES (GLenum pname, GLint value); +#endif +#endif /* GL_OES_tessellation_shader */ + +#ifndef GL_OES_texture_3D +#define GL_OES_texture_3D 1 +#define GL_TEXTURE_WRAP_R_OES 0x8072 +#define GL_TEXTURE_3D_OES 0x806F +#define GL_TEXTURE_BINDING_3D_OES 0x806A +#define GL_MAX_3D_TEXTURE_SIZE_OES 0x8073 +#define GL_SAMPLER_3D_OES 0x8B5F +#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_3D_ZOFFSET_OES 0x8CD4 +typedef void (GL_APIENTRYP PFNGLTEXIMAGE3DOESPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels); +typedef void (GL_APIENTRYP PFNGLTEXSUBIMAGE3DOESPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels); +typedef void (GL_APIENTRYP PFNGLCOPYTEXSUBIMAGE3DOESPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); +typedef void (GL_APIENTRYP PFNGLCOMPRESSEDTEXIMAGE3DOESPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *data); +typedef void (GL_APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE3DOESPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *data); +typedef void (GL_APIENTRYP PFNGLFRAMEBUFFERTEXTURE3DOESPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glTexImage3DOES (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels); +GL_APICALL void GL_APIENTRY glTexSubImage3DOES (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels); +GL_APICALL void GL_APIENTRY glCopyTexSubImage3DOES (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); +GL_APICALL void GL_APIENTRY glCompressedTexImage3DOES (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *data); +GL_APICALL void GL_APIENTRY glCompressedTexSubImage3DOES (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *data); +GL_APICALL void GL_APIENTRY glFramebufferTexture3DOES (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); +#endif +#endif /* GL_OES_texture_3D */ + +#ifndef GL_OES_texture_border_clamp +#define GL_OES_texture_border_clamp 1 +#define GL_TEXTURE_BORDER_COLOR_OES 0x1004 +#define GL_CLAMP_TO_BORDER_OES 0x812D +typedef void (GL_APIENTRYP PFNGLTEXPARAMETERIIVOESPROC) (GLenum target, GLenum pname, const GLint *params); +typedef void (GL_APIENTRYP PFNGLTEXPARAMETERIUIVOESPROC) (GLenum target, GLenum pname, const GLuint *params); +typedef void (GL_APIENTRYP PFNGLGETTEXPARAMETERIIVOESPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (GL_APIENTRYP PFNGLGETTEXPARAMETERIUIVOESPROC) (GLenum target, GLenum pname, GLuint *params); +typedef void (GL_APIENTRYP PFNGLSAMPLERPARAMETERIIVOESPROC) (GLuint sampler, GLenum pname, const GLint *param); +typedef void (GL_APIENTRYP PFNGLSAMPLERPARAMETERIUIVOESPROC) (GLuint sampler, GLenum pname, const GLuint *param); +typedef void (GL_APIENTRYP PFNGLGETSAMPLERPARAMETERIIVOESPROC) (GLuint sampler, GLenum pname, GLint *params); +typedef void (GL_APIENTRYP PFNGLGETSAMPLERPARAMETERIUIVOESPROC) (GLuint sampler, GLenum pname, GLuint *params); +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glTexParameterIivOES (GLenum target, GLenum pname, const GLint *params); +GL_APICALL void GL_APIENTRY glTexParameterIuivOES (GLenum target, GLenum pname, const GLuint *params); +GL_APICALL void GL_APIENTRY glGetTexParameterIivOES (GLenum target, GLenum pname, GLint *params); +GL_APICALL void GL_APIENTRY glGetTexParameterIuivOES (GLenum target, GLenum pname, GLuint *params); +GL_APICALL void GL_APIENTRY glSamplerParameterIivOES (GLuint sampler, GLenum pname, const GLint *param); +GL_APICALL void GL_APIENTRY glSamplerParameterIuivOES (GLuint sampler, GLenum pname, const GLuint *param); +GL_APICALL void GL_APIENTRY glGetSamplerParameterIivOES (GLuint sampler, GLenum pname, GLint *params); +GL_APICALL void GL_APIENTRY glGetSamplerParameterIuivOES (GLuint sampler, GLenum pname, GLuint *params); +#endif +#endif /* GL_OES_texture_border_clamp */ + +#ifndef GL_OES_texture_buffer +#define GL_OES_texture_buffer 1 +#define GL_TEXTURE_BUFFER_OES 0x8C2A +#define GL_TEXTURE_BUFFER_BINDING_OES 0x8C2A +#define GL_MAX_TEXTURE_BUFFER_SIZE_OES 0x8C2B +#define GL_TEXTURE_BINDING_BUFFER_OES 0x8C2C +#define GL_TEXTURE_BUFFER_DATA_STORE_BINDING_OES 0x8C2D +#define GL_TEXTURE_BUFFER_OFFSET_ALIGNMENT_OES 0x919F +#define GL_SAMPLER_BUFFER_OES 0x8DC2 +#define GL_INT_SAMPLER_BUFFER_OES 0x8DD0 +#define GL_UNSIGNED_INT_SAMPLER_BUFFER_OES 0x8DD8 +#define GL_IMAGE_BUFFER_OES 0x9051 +#define GL_INT_IMAGE_BUFFER_OES 0x905C +#define GL_UNSIGNED_INT_IMAGE_BUFFER_OES 0x9067 +#define GL_TEXTURE_BUFFER_OFFSET_OES 0x919D +#define GL_TEXTURE_BUFFER_SIZE_OES 0x919E +typedef void (GL_APIENTRYP PFNGLTEXBUFFEROESPROC) (GLenum target, GLenum internalformat, GLuint buffer); +typedef void (GL_APIENTRYP PFNGLTEXBUFFERRANGEOESPROC) (GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size); +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glTexBufferOES (GLenum target, GLenum internalformat, GLuint buffer); +GL_APICALL void GL_APIENTRY glTexBufferRangeOES (GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size); +#endif +#endif /* GL_OES_texture_buffer */ + +#ifndef GL_OES_texture_compression_astc +#define GL_OES_texture_compression_astc 1 +#define GL_COMPRESSED_RGBA_ASTC_3x3x3_OES 0x93C0 +#define GL_COMPRESSED_RGBA_ASTC_4x3x3_OES 0x93C1 +#define GL_COMPRESSED_RGBA_ASTC_4x4x3_OES 0x93C2 +#define GL_COMPRESSED_RGBA_ASTC_4x4x4_OES 0x93C3 +#define GL_COMPRESSED_RGBA_ASTC_5x4x4_OES 0x93C4 +#define GL_COMPRESSED_RGBA_ASTC_5x5x4_OES 0x93C5 +#define GL_COMPRESSED_RGBA_ASTC_5x5x5_OES 0x93C6 +#define GL_COMPRESSED_RGBA_ASTC_6x5x5_OES 0x93C7 +#define GL_COMPRESSED_RGBA_ASTC_6x6x5_OES 0x93C8 +#define GL_COMPRESSED_RGBA_ASTC_6x6x6_OES 0x93C9 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_3x3x3_OES 0x93E0 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x3x3_OES 0x93E1 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4x3_OES 0x93E2 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4x4_OES 0x93E3 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4x4_OES 0x93E4 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5x4_OES 0x93E5 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5x5_OES 0x93E6 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5x5_OES 0x93E7 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6x5_OES 0x93E8 +#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6x6_OES 0x93E9 +#endif /* GL_OES_texture_compression_astc */ + +#ifndef GL_OES_texture_cube_map_array +#define GL_OES_texture_cube_map_array 1 +#define GL_TEXTURE_CUBE_MAP_ARRAY_OES 0x9009 +#define GL_TEXTURE_BINDING_CUBE_MAP_ARRAY_OES 0x900A +#define GL_SAMPLER_CUBE_MAP_ARRAY_OES 0x900C +#define GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW_OES 0x900D +#define GL_INT_SAMPLER_CUBE_MAP_ARRAY_OES 0x900E +#define GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY_OES 0x900F +#define GL_IMAGE_CUBE_MAP_ARRAY_OES 0x9054 +#define GL_INT_IMAGE_CUBE_MAP_ARRAY_OES 0x905F +#define GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY_OES 0x906A +#endif /* GL_OES_texture_cube_map_array */ + +#ifndef GL_OES_texture_float +#define GL_OES_texture_float 1 +#endif /* GL_OES_texture_float */ + +#ifndef GL_OES_texture_float_linear +#define GL_OES_texture_float_linear 1 +#endif /* GL_OES_texture_float_linear */ + +#ifndef GL_OES_texture_half_float +#define GL_OES_texture_half_float 1 +#define GL_HALF_FLOAT_OES 0x8D61 +#endif /* GL_OES_texture_half_float */ + +#ifndef GL_OES_texture_half_float_linear +#define GL_OES_texture_half_float_linear 1 +#endif /* GL_OES_texture_half_float_linear */ + +#ifndef GL_OES_texture_npot +#define GL_OES_texture_npot 1 +#endif /* GL_OES_texture_npot */ + +#ifndef GL_OES_texture_stencil8 +#define GL_OES_texture_stencil8 1 +#define GL_STENCIL_INDEX_OES 0x1901 +#define GL_STENCIL_INDEX8_OES 0x8D48 +#endif /* GL_OES_texture_stencil8 */ + +#ifndef GL_OES_texture_storage_multisample_2d_array +#define GL_OES_texture_storage_multisample_2d_array 1 +#define GL_TEXTURE_2D_MULTISAMPLE_ARRAY_OES 0x9102 +#define GL_TEXTURE_BINDING_2D_MULTISAMPLE_ARRAY_OES 0x9105 +#define GL_SAMPLER_2D_MULTISAMPLE_ARRAY_OES 0x910B +#define GL_INT_SAMPLER_2D_MULTISAMPLE_ARRAY_OES 0x910C +#define GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE_ARRAY_OES 0x910D +typedef void (GL_APIENTRYP PFNGLTEXSTORAGE3DMULTISAMPLEOESPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glTexStorage3DMultisampleOES (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); +#endif +#endif /* GL_OES_texture_storage_multisample_2d_array */ + +#ifndef GL_OES_texture_view +#define GL_OES_texture_view 1 +#define GL_TEXTURE_VIEW_MIN_LEVEL_OES 0x82DB +#define GL_TEXTURE_VIEW_NUM_LEVELS_OES 0x82DC +#define GL_TEXTURE_VIEW_MIN_LAYER_OES 0x82DD +#define GL_TEXTURE_VIEW_NUM_LAYERS_OES 0x82DE +#define GL_TEXTURE_IMMUTABLE_LEVELS 0x82DF +typedef void (GL_APIENTRYP PFNGLTEXTUREVIEWOESPROC) (GLuint texture, GLenum target, GLuint origtexture, GLenum internalformat, GLuint minlevel, GLuint numlevels, GLuint minlayer, GLuint numlayers); +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glTextureViewOES (GLuint texture, GLenum target, GLuint origtexture, GLenum internalformat, GLuint minlevel, GLuint numlevels, GLuint minlayer, GLuint numlayers); +#endif +#endif /* GL_OES_texture_view */ + +#ifndef GL_OES_vertex_array_object +#define GL_OES_vertex_array_object 1 +#define GL_VERTEX_ARRAY_BINDING_OES 0x85B5 +typedef void (GL_APIENTRYP PFNGLBINDVERTEXARRAYOESPROC) (GLuint array); +typedef void (GL_APIENTRYP PFNGLDELETEVERTEXARRAYSOESPROC) (GLsizei n, const GLuint *arrays); +typedef void (GL_APIENTRYP PFNGLGENVERTEXARRAYSOESPROC) (GLsizei n, GLuint *arrays); +typedef GLboolean (GL_APIENTRYP PFNGLISVERTEXARRAYOESPROC) (GLuint array); +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glBindVertexArrayOES (GLuint array); +GL_APICALL void GL_APIENTRY glDeleteVertexArraysOES (GLsizei n, const GLuint *arrays); +GL_APICALL void GL_APIENTRY glGenVertexArraysOES (GLsizei n, GLuint *arrays); +GL_APICALL GLboolean GL_APIENTRY glIsVertexArrayOES (GLuint array); +#endif +#endif /* GL_OES_vertex_array_object */ + +#ifndef GL_OES_vertex_half_float +#define GL_OES_vertex_half_float 1 +#endif /* GL_OES_vertex_half_float */ + +#ifndef GL_OES_vertex_type_10_10_10_2 +#define GL_OES_vertex_type_10_10_10_2 1 +#define GL_UNSIGNED_INT_10_10_10_2_OES 0x8DF6 +#define GL_INT_10_10_10_2_OES 0x8DF7 +#endif /* GL_OES_vertex_type_10_10_10_2 */ + +#ifndef GL_OES_viewport_array +#define GL_OES_viewport_array 1 +#define GL_MAX_VIEWPORTS_OES 0x825B +#define GL_VIEWPORT_SUBPIXEL_BITS_OES 0x825C +#define GL_VIEWPORT_BOUNDS_RANGE_OES 0x825D +#define GL_VIEWPORT_INDEX_PROVOKING_VERTEX_OES 0x825F +typedef void (GL_APIENTRYP PFNGLVIEWPORTARRAYVOESPROC) (GLuint first, GLsizei count, const GLfloat *v); +typedef void (GL_APIENTRYP PFNGLVIEWPORTINDEXEDFOESPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat w, GLfloat h); +typedef void (GL_APIENTRYP PFNGLVIEWPORTINDEXEDFVOESPROC) (GLuint index, const GLfloat *v); +typedef void (GL_APIENTRYP PFNGLSCISSORARRAYVOESPROC) (GLuint first, GLsizei count, const GLint *v); +typedef void (GL_APIENTRYP PFNGLSCISSORINDEXEDOESPROC) (GLuint index, GLint left, GLint bottom, GLsizei width, GLsizei height); +typedef void (GL_APIENTRYP PFNGLSCISSORINDEXEDVOESPROC) (GLuint index, const GLint *v); +typedef void (GL_APIENTRYP PFNGLDEPTHRANGEARRAYFVOESPROC) (GLuint first, GLsizei count, const GLfloat *v); +typedef void (GL_APIENTRYP PFNGLDEPTHRANGEINDEXEDFOESPROC) (GLuint index, GLfloat n, GLfloat f); +typedef void (GL_APIENTRYP PFNGLGETFLOATI_VOESPROC) (GLenum target, GLuint index, GLfloat *data); +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glViewportArrayvOES (GLuint first, GLsizei count, const GLfloat *v); +GL_APICALL void GL_APIENTRY glViewportIndexedfOES (GLuint index, GLfloat x, GLfloat y, GLfloat w, GLfloat h); +GL_APICALL void GL_APIENTRY glViewportIndexedfvOES (GLuint index, const GLfloat *v); +GL_APICALL void GL_APIENTRY glScissorArrayvOES (GLuint first, GLsizei count, const GLint *v); +GL_APICALL void GL_APIENTRY glScissorIndexedOES (GLuint index, GLint left, GLint bottom, GLsizei width, GLsizei height); +GL_APICALL void GL_APIENTRY glScissorIndexedvOES (GLuint index, const GLint *v); +GL_APICALL void GL_APIENTRY glDepthRangeArrayfvOES (GLuint first, GLsizei count, const GLfloat *v); +GL_APICALL void GL_APIENTRY glDepthRangeIndexedfOES (GLuint index, GLfloat n, GLfloat f); +GL_APICALL void GL_APIENTRY glGetFloati_vOES (GLenum target, GLuint index, GLfloat *data); +#endif +#endif /* GL_OES_viewport_array */ + +#ifndef GL_AMD_compressed_3DC_texture +#define GL_AMD_compressed_3DC_texture 1 +#define GL_3DC_X_AMD 0x87F9 +#define GL_3DC_XY_AMD 0x87FA +#endif /* GL_AMD_compressed_3DC_texture */ + +#ifndef GL_AMD_compressed_ATC_texture +#define GL_AMD_compressed_ATC_texture 1 +#define GL_ATC_RGB_AMD 0x8C92 +#define GL_ATC_RGBA_EXPLICIT_ALPHA_AMD 0x8C93 +#define GL_ATC_RGBA_INTERPOLATED_ALPHA_AMD 0x87EE +#endif /* GL_AMD_compressed_ATC_texture */ + +#ifndef GL_AMD_framebuffer_multisample_advanced +#define GL_AMD_framebuffer_multisample_advanced 1 +#define GL_RENDERBUFFER_STORAGE_SAMPLES_AMD 0x91B2 +#define GL_MAX_COLOR_FRAMEBUFFER_SAMPLES_AMD 0x91B3 +#define GL_MAX_COLOR_FRAMEBUFFER_STORAGE_SAMPLES_AMD 0x91B4 +#define GL_MAX_DEPTH_STENCIL_FRAMEBUFFER_SAMPLES_AMD 0x91B5 +#define GL_NUM_SUPPORTED_MULTISAMPLE_MODES_AMD 0x91B6 +#define GL_SUPPORTED_MULTISAMPLE_MODES_AMD 0x91B7 +typedef void (GL_APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLEADVANCEDAMDPROC) (GLenum target, GLsizei samples, GLsizei storageSamples, GLenum internalformat, GLsizei width, GLsizei height); +typedef void (GL_APIENTRYP PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLEADVANCEDAMDPROC) (GLuint renderbuffer, GLsizei samples, GLsizei storageSamples, GLenum internalformat, GLsizei width, GLsizei height); +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glRenderbufferStorageMultisampleAdvancedAMD (GLenum target, GLsizei samples, GLsizei storageSamples, GLenum internalformat, GLsizei width, GLsizei height); +GL_APICALL void GL_APIENTRY glNamedRenderbufferStorageMultisampleAdvancedAMD (GLuint renderbuffer, GLsizei samples, GLsizei storageSamples, GLenum internalformat, GLsizei width, GLsizei height); +#endif +#endif /* GL_AMD_framebuffer_multisample_advanced */ + +#ifndef GL_AMD_performance_monitor +#define GL_AMD_performance_monitor 1 +#define GL_COUNTER_TYPE_AMD 0x8BC0 +#define GL_COUNTER_RANGE_AMD 0x8BC1 +#define GL_UNSIGNED_INT64_AMD 0x8BC2 +#define GL_PERCENTAGE_AMD 0x8BC3 +#define GL_PERFMON_RESULT_AVAILABLE_AMD 0x8BC4 +#define GL_PERFMON_RESULT_SIZE_AMD 0x8BC5 +#define GL_PERFMON_RESULT_AMD 0x8BC6 +typedef void (GL_APIENTRYP PFNGLGETPERFMONITORGROUPSAMDPROC) (GLint *numGroups, GLsizei groupsSize, GLuint *groups); +typedef void (GL_APIENTRYP PFNGLGETPERFMONITORCOUNTERSAMDPROC) (GLuint group, GLint *numCounters, GLint *maxActiveCounters, GLsizei counterSize, GLuint *counters); +typedef void (GL_APIENTRYP PFNGLGETPERFMONITORGROUPSTRINGAMDPROC) (GLuint group, GLsizei bufSize, GLsizei *length, GLchar *groupString); +typedef void (GL_APIENTRYP PFNGLGETPERFMONITORCOUNTERSTRINGAMDPROC) (GLuint group, GLuint counter, GLsizei bufSize, GLsizei *length, GLchar *counterString); +typedef void (GL_APIENTRYP PFNGLGETPERFMONITORCOUNTERINFOAMDPROC) (GLuint group, GLuint counter, GLenum pname, void *data); +typedef void (GL_APIENTRYP PFNGLGENPERFMONITORSAMDPROC) (GLsizei n, GLuint *monitors); +typedef void (GL_APIENTRYP PFNGLDELETEPERFMONITORSAMDPROC) (GLsizei n, GLuint *monitors); +typedef void (GL_APIENTRYP PFNGLSELECTPERFMONITORCOUNTERSAMDPROC) (GLuint monitor, GLboolean enable, GLuint group, GLint numCounters, GLuint *counterList); +typedef void (GL_APIENTRYP PFNGLBEGINPERFMONITORAMDPROC) (GLuint monitor); +typedef void (GL_APIENTRYP PFNGLENDPERFMONITORAMDPROC) (GLuint monitor); +typedef void (GL_APIENTRYP PFNGLGETPERFMONITORCOUNTERDATAAMDPROC) (GLuint monitor, GLenum pname, GLsizei dataSize, GLuint *data, GLint *bytesWritten); +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glGetPerfMonitorGroupsAMD (GLint *numGroups, GLsizei groupsSize, GLuint *groups); +GL_APICALL void GL_APIENTRY glGetPerfMonitorCountersAMD (GLuint group, GLint *numCounters, GLint *maxActiveCounters, GLsizei counterSize, GLuint *counters); +GL_APICALL void GL_APIENTRY glGetPerfMonitorGroupStringAMD (GLuint group, GLsizei bufSize, GLsizei *length, GLchar *groupString); +GL_APICALL void GL_APIENTRY glGetPerfMonitorCounterStringAMD (GLuint group, GLuint counter, GLsizei bufSize, GLsizei *length, GLchar *counterString); +GL_APICALL void GL_APIENTRY glGetPerfMonitorCounterInfoAMD (GLuint group, GLuint counter, GLenum pname, void *data); +GL_APICALL void GL_APIENTRY glGenPerfMonitorsAMD (GLsizei n, GLuint *monitors); +GL_APICALL void GL_APIENTRY glDeletePerfMonitorsAMD (GLsizei n, GLuint *monitors); +GL_APICALL void GL_APIENTRY glSelectPerfMonitorCountersAMD (GLuint monitor, GLboolean enable, GLuint group, GLint numCounters, GLuint *counterList); +GL_APICALL void GL_APIENTRY glBeginPerfMonitorAMD (GLuint monitor); +GL_APICALL void GL_APIENTRY glEndPerfMonitorAMD (GLuint monitor); +GL_APICALL void GL_APIENTRY glGetPerfMonitorCounterDataAMD (GLuint monitor, GLenum pname, GLsizei dataSize, GLuint *data, GLint *bytesWritten); +#endif +#endif /* GL_AMD_performance_monitor */ + +#ifndef GL_AMD_program_binary_Z400 +#define GL_AMD_program_binary_Z400 1 +#define GL_Z400_BINARY_AMD 0x8740 +#endif /* GL_AMD_program_binary_Z400 */ + +#ifndef GL_ANDROID_extension_pack_es31a +#define GL_ANDROID_extension_pack_es31a 1 +#endif /* GL_ANDROID_extension_pack_es31a */ + +#ifndef GL_ANGLE_depth_texture +#define GL_ANGLE_depth_texture 1 +#endif /* GL_ANGLE_depth_texture */ + +#ifndef GL_ANGLE_framebuffer_blit +#define GL_ANGLE_framebuffer_blit 1 +#define GL_READ_FRAMEBUFFER_ANGLE 0x8CA8 +#define GL_DRAW_FRAMEBUFFER_ANGLE 0x8CA9 +#define GL_DRAW_FRAMEBUFFER_BINDING_ANGLE 0x8CA6 +#define GL_READ_FRAMEBUFFER_BINDING_ANGLE 0x8CAA +typedef void (GL_APIENTRYP PFNGLBLITFRAMEBUFFERANGLEPROC) (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glBlitFramebufferANGLE (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); +#endif +#endif /* GL_ANGLE_framebuffer_blit */ + +#ifndef GL_ANGLE_framebuffer_multisample +#define GL_ANGLE_framebuffer_multisample 1 +#define GL_RENDERBUFFER_SAMPLES_ANGLE 0x8CAB +#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_ANGLE 0x8D56 +#define GL_MAX_SAMPLES_ANGLE 0x8D57 +typedef void (GL_APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLEANGLEPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glRenderbufferStorageMultisampleANGLE (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); +#endif +#endif /* GL_ANGLE_framebuffer_multisample */ + +#ifndef GL_ANGLE_instanced_arrays +#define GL_ANGLE_instanced_arrays 1 +#define GL_VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE 0x88FE +typedef void (GL_APIENTRYP PFNGLDRAWARRAYSINSTANCEDANGLEPROC) (GLenum mode, GLint first, GLsizei count, GLsizei primcount); +typedef void (GL_APIENTRYP PFNGLDRAWELEMENTSINSTANCEDANGLEPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei primcount); +typedef void (GL_APIENTRYP PFNGLVERTEXATTRIBDIVISORANGLEPROC) (GLuint index, GLuint divisor); +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glDrawArraysInstancedANGLE (GLenum mode, GLint first, GLsizei count, GLsizei primcount); +GL_APICALL void GL_APIENTRY glDrawElementsInstancedANGLE (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei primcount); +GL_APICALL void GL_APIENTRY glVertexAttribDivisorANGLE (GLuint index, GLuint divisor); +#endif +#endif /* GL_ANGLE_instanced_arrays */ + +#ifndef GL_ANGLE_pack_reverse_row_order +#define GL_ANGLE_pack_reverse_row_order 1 +#define GL_PACK_REVERSE_ROW_ORDER_ANGLE 0x93A4 +#endif /* GL_ANGLE_pack_reverse_row_order */ + +#ifndef GL_ANGLE_program_binary +#define GL_ANGLE_program_binary 1 +#define GL_PROGRAM_BINARY_ANGLE 0x93A6 +#endif /* GL_ANGLE_program_binary */ + +#ifndef GL_ANGLE_texture_compression_dxt3 +#define GL_ANGLE_texture_compression_dxt3 1 +#define GL_COMPRESSED_RGBA_S3TC_DXT3_ANGLE 0x83F2 +#endif /* GL_ANGLE_texture_compression_dxt3 */ + +#ifndef GL_ANGLE_texture_compression_dxt5 +#define GL_ANGLE_texture_compression_dxt5 1 +#define GL_COMPRESSED_RGBA_S3TC_DXT5_ANGLE 0x83F3 +#endif /* GL_ANGLE_texture_compression_dxt5 */ + +#ifndef GL_ANGLE_texture_usage +#define GL_ANGLE_texture_usage 1 +#define GL_TEXTURE_USAGE_ANGLE 0x93A2 +#define GL_FRAMEBUFFER_ATTACHMENT_ANGLE 0x93A3 +#endif /* GL_ANGLE_texture_usage */ + +#ifndef GL_ANGLE_translated_shader_source +#define GL_ANGLE_translated_shader_source 1 +#define GL_TRANSLATED_SHADER_SOURCE_LENGTH_ANGLE 0x93A0 +typedef void (GL_APIENTRYP PFNGLGETTRANSLATEDSHADERSOURCEANGLEPROC) (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *source); +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glGetTranslatedShaderSourceANGLE (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *source); +#endif +#endif /* GL_ANGLE_translated_shader_source */ + +#ifndef GL_APPLE_clip_distance +#define GL_APPLE_clip_distance 1 +#define GL_MAX_CLIP_DISTANCES_APPLE 0x0D32 +#define GL_CLIP_DISTANCE0_APPLE 0x3000 +#define GL_CLIP_DISTANCE1_APPLE 0x3001 +#define GL_CLIP_DISTANCE2_APPLE 0x3002 +#define GL_CLIP_DISTANCE3_APPLE 0x3003 +#define GL_CLIP_DISTANCE4_APPLE 0x3004 +#define GL_CLIP_DISTANCE5_APPLE 0x3005 +#define GL_CLIP_DISTANCE6_APPLE 0x3006 +#define GL_CLIP_DISTANCE7_APPLE 0x3007 +#endif /* GL_APPLE_clip_distance */ + +#ifndef GL_APPLE_color_buffer_packed_float +#define GL_APPLE_color_buffer_packed_float 1 +#endif /* GL_APPLE_color_buffer_packed_float */ + +#ifndef GL_APPLE_copy_texture_levels +#define GL_APPLE_copy_texture_levels 1 +typedef void (GL_APIENTRYP PFNGLCOPYTEXTURELEVELSAPPLEPROC) (GLuint destinationTexture, GLuint sourceTexture, GLint sourceBaseLevel, GLsizei sourceLevelCount); +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glCopyTextureLevelsAPPLE (GLuint destinationTexture, GLuint sourceTexture, GLint sourceBaseLevel, GLsizei sourceLevelCount); +#endif +#endif /* GL_APPLE_copy_texture_levels */ + +#ifndef GL_APPLE_framebuffer_multisample +#define GL_APPLE_framebuffer_multisample 1 +#define GL_RENDERBUFFER_SAMPLES_APPLE 0x8CAB +#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_APPLE 0x8D56 +#define GL_MAX_SAMPLES_APPLE 0x8D57 +#define GL_READ_FRAMEBUFFER_APPLE 0x8CA8 +#define GL_DRAW_FRAMEBUFFER_APPLE 0x8CA9 +#define GL_DRAW_FRAMEBUFFER_BINDING_APPLE 0x8CA6 +#define GL_READ_FRAMEBUFFER_BINDING_APPLE 0x8CAA +typedef void (GL_APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLEAPPLEPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); +typedef void (GL_APIENTRYP PFNGLRESOLVEMULTISAMPLEFRAMEBUFFERAPPLEPROC) (void); +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glRenderbufferStorageMultisampleAPPLE (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); +GL_APICALL void GL_APIENTRY glResolveMultisampleFramebufferAPPLE (void); +#endif +#endif /* GL_APPLE_framebuffer_multisample */ + +#ifndef GL_APPLE_rgb_422 +#define GL_APPLE_rgb_422 1 +#define GL_RGB_422_APPLE 0x8A1F +#define GL_UNSIGNED_SHORT_8_8_APPLE 0x85BA +#define GL_UNSIGNED_SHORT_8_8_REV_APPLE 0x85BB +#define GL_RGB_RAW_422_APPLE 0x8A51 +#endif /* GL_APPLE_rgb_422 */ + +#ifndef GL_APPLE_sync +#define GL_APPLE_sync 1 +#define GL_SYNC_OBJECT_APPLE 0x8A53 +#define GL_MAX_SERVER_WAIT_TIMEOUT_APPLE 0x9111 +#define GL_OBJECT_TYPE_APPLE 0x9112 +#define GL_SYNC_CONDITION_APPLE 0x9113 +#define GL_SYNC_STATUS_APPLE 0x9114 +#define GL_SYNC_FLAGS_APPLE 0x9115 +#define GL_SYNC_FENCE_APPLE 0x9116 +#define GL_SYNC_GPU_COMMANDS_COMPLETE_APPLE 0x9117 +#define GL_UNSIGNALED_APPLE 0x9118 +#define GL_SIGNALED_APPLE 0x9119 +#define GL_ALREADY_SIGNALED_APPLE 0x911A +#define GL_TIMEOUT_EXPIRED_APPLE 0x911B +#define GL_CONDITION_SATISFIED_APPLE 0x911C +#define GL_WAIT_FAILED_APPLE 0x911D +#define GL_SYNC_FLUSH_COMMANDS_BIT_APPLE 0x00000001 +#define GL_TIMEOUT_IGNORED_APPLE 0xFFFFFFFFFFFFFFFFull +typedef GLsync (GL_APIENTRYP PFNGLFENCESYNCAPPLEPROC) (GLenum condition, GLbitfield flags); +typedef GLboolean (GL_APIENTRYP PFNGLISSYNCAPPLEPROC) (GLsync sync); +typedef void (GL_APIENTRYP PFNGLDELETESYNCAPPLEPROC) (GLsync sync); +typedef GLenum (GL_APIENTRYP PFNGLCLIENTWAITSYNCAPPLEPROC) (GLsync sync, GLbitfield flags, GLuint64 timeout); +typedef void (GL_APIENTRYP PFNGLWAITSYNCAPPLEPROC) (GLsync sync, GLbitfield flags, GLuint64 timeout); +typedef void (GL_APIENTRYP PFNGLGETINTEGER64VAPPLEPROC) (GLenum pname, GLint64 *params); +typedef void (GL_APIENTRYP PFNGLGETSYNCIVAPPLEPROC) (GLsync sync, GLenum pname, GLsizei count, GLsizei *length, GLint *values); +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL GLsync GL_APIENTRY glFenceSyncAPPLE (GLenum condition, GLbitfield flags); +GL_APICALL GLboolean GL_APIENTRY glIsSyncAPPLE (GLsync sync); +GL_APICALL void GL_APIENTRY glDeleteSyncAPPLE (GLsync sync); +GL_APICALL GLenum GL_APIENTRY glClientWaitSyncAPPLE (GLsync sync, GLbitfield flags, GLuint64 timeout); +GL_APICALL void GL_APIENTRY glWaitSyncAPPLE (GLsync sync, GLbitfield flags, GLuint64 timeout); +GL_APICALL void GL_APIENTRY glGetInteger64vAPPLE (GLenum pname, GLint64 *params); +GL_APICALL void GL_APIENTRY glGetSyncivAPPLE (GLsync sync, GLenum pname, GLsizei count, GLsizei *length, GLint *values); +#endif +#endif /* GL_APPLE_sync */ + +#ifndef GL_APPLE_texture_format_BGRA8888 +#define GL_APPLE_texture_format_BGRA8888 1 +#define GL_BGRA_EXT 0x80E1 +#define GL_BGRA8_EXT 0x93A1 +#endif /* GL_APPLE_texture_format_BGRA8888 */ + +#ifndef GL_APPLE_texture_max_level +#define GL_APPLE_texture_max_level 1 +#define GL_TEXTURE_MAX_LEVEL_APPLE 0x813D +#endif /* GL_APPLE_texture_max_level */ + +#ifndef GL_APPLE_texture_packed_float +#define GL_APPLE_texture_packed_float 1 +#define GL_UNSIGNED_INT_10F_11F_11F_REV_APPLE 0x8C3B +#define GL_UNSIGNED_INT_5_9_9_9_REV_APPLE 0x8C3E +#define GL_R11F_G11F_B10F_APPLE 0x8C3A +#define GL_RGB9_E5_APPLE 0x8C3D +#endif /* GL_APPLE_texture_packed_float */ + +#ifndef GL_ARM_mali_program_binary +#define GL_ARM_mali_program_binary 1 +#define GL_MALI_PROGRAM_BINARY_ARM 0x8F61 +#endif /* GL_ARM_mali_program_binary */ + +#ifndef GL_ARM_mali_shader_binary +#define GL_ARM_mali_shader_binary 1 +#define GL_MALI_SHADER_BINARY_ARM 0x8F60 +#endif /* GL_ARM_mali_shader_binary */ + +#ifndef GL_ARM_rgba8 +#define GL_ARM_rgba8 1 +#endif /* GL_ARM_rgba8 */ + +#ifndef GL_ARM_shader_framebuffer_fetch +#define GL_ARM_shader_framebuffer_fetch 1 +#define GL_FETCH_PER_SAMPLE_ARM 0x8F65 +#define GL_FRAGMENT_SHADER_FRAMEBUFFER_FETCH_MRT_ARM 0x8F66 +#endif /* GL_ARM_shader_framebuffer_fetch */ + +#ifndef GL_ARM_shader_framebuffer_fetch_depth_stencil +#define GL_ARM_shader_framebuffer_fetch_depth_stencil 1 +#endif /* GL_ARM_shader_framebuffer_fetch_depth_stencil */ + +#ifndef GL_ARM_texture_unnormalized_coordinates +#define GL_ARM_texture_unnormalized_coordinates 1 +#define GL_TEXTURE_UNNORMALIZED_COORDINATES_ARM 0x8F6A +#endif /* GL_ARM_texture_unnormalized_coordinates */ + +#ifndef GL_DMP_program_binary +#define GL_DMP_program_binary 1 +#define GL_SMAPHS30_PROGRAM_BINARY_DMP 0x9251 +#define GL_SMAPHS_PROGRAM_BINARY_DMP 0x9252 +#define GL_DMP_PROGRAM_BINARY_DMP 0x9253 +#endif /* GL_DMP_program_binary */ + +#ifndef GL_DMP_shader_binary +#define GL_DMP_shader_binary 1 +#define GL_SHADER_BINARY_DMP 0x9250 +#endif /* GL_DMP_shader_binary */ + +#ifndef GL_EXT_EGL_image_array +#define GL_EXT_EGL_image_array 1 +#endif /* GL_EXT_EGL_image_array */ + +#ifndef GL_EXT_EGL_image_storage +#define GL_EXT_EGL_image_storage 1 +typedef void (GL_APIENTRYP PFNGLEGLIMAGETARGETTEXSTORAGEEXTPROC) (GLenum target, GLeglImageOES image, const GLint* attrib_list); +typedef void (GL_APIENTRYP PFNGLEGLIMAGETARGETTEXTURESTORAGEEXTPROC) (GLuint texture, GLeglImageOES image, const GLint* attrib_list); +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glEGLImageTargetTexStorageEXT (GLenum target, GLeglImageOES image, const GLint* attrib_list); +GL_APICALL void GL_APIENTRY glEGLImageTargetTextureStorageEXT (GLuint texture, GLeglImageOES image, const GLint* attrib_list); +#endif +#endif /* GL_EXT_EGL_image_storage */ + +#ifndef GL_EXT_EGL_image_storage_compression +#define GL_EXT_EGL_image_storage_compression 1 +#define GL_SURFACE_COMPRESSION_EXT 0x96C0 +#define GL_SURFACE_COMPRESSION_FIXED_RATE_NONE_EXT 0x96C1 +#define GL_SURFACE_COMPRESSION_FIXED_RATE_DEFAULT_EXT 0x96C2 +#endif /* GL_EXT_EGL_image_storage_compression */ + +#ifndef GL_EXT_YUV_target +#define GL_EXT_YUV_target 1 +#define GL_SAMPLER_EXTERNAL_2D_Y2Y_EXT 0x8BE7 +#endif /* GL_EXT_YUV_target */ + +#ifndef GL_EXT_base_instance +#define GL_EXT_base_instance 1 +typedef void (GL_APIENTRYP PFNGLDRAWARRAYSINSTANCEDBASEINSTANCEEXTPROC) (GLenum mode, GLint first, GLsizei count, GLsizei instancecount, GLuint baseinstance); +typedef void (GL_APIENTRYP PFNGLDRAWELEMENTSINSTANCEDBASEINSTANCEEXTPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLuint baseinstance); +typedef void (GL_APIENTRYP PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXBASEINSTANCEEXTPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLint basevertex, GLuint baseinstance); +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glDrawArraysInstancedBaseInstanceEXT (GLenum mode, GLint first, GLsizei count, GLsizei instancecount, GLuint baseinstance); +GL_APICALL void GL_APIENTRY glDrawElementsInstancedBaseInstanceEXT (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLuint baseinstance); +GL_APICALL void GL_APIENTRY glDrawElementsInstancedBaseVertexBaseInstanceEXT (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLint basevertex, GLuint baseinstance); +#endif +#endif /* GL_EXT_base_instance */ + +#ifndef GL_EXT_blend_func_extended +#define GL_EXT_blend_func_extended 1 +#define GL_SRC1_COLOR_EXT 0x88F9 +#define GL_SRC1_ALPHA_EXT 0x8589 +#define GL_ONE_MINUS_SRC1_COLOR_EXT 0x88FA +#define GL_ONE_MINUS_SRC1_ALPHA_EXT 0x88FB +#define GL_SRC_ALPHA_SATURATE_EXT 0x0308 +#define GL_LOCATION_INDEX_EXT 0x930F +#define GL_MAX_DUAL_SOURCE_DRAW_BUFFERS_EXT 0x88FC +typedef void (GL_APIENTRYP PFNGLBINDFRAGDATALOCATIONINDEXEDEXTPROC) (GLuint program, GLuint colorNumber, GLuint index, const GLchar *name); +typedef void (GL_APIENTRYP PFNGLBINDFRAGDATALOCATIONEXTPROC) (GLuint program, GLuint color, const GLchar *name); +typedef GLint (GL_APIENTRYP PFNGLGETPROGRAMRESOURCELOCATIONINDEXEXTPROC) (GLuint program, GLenum programInterface, const GLchar *name); +typedef GLint (GL_APIENTRYP PFNGLGETFRAGDATAINDEXEXTPROC) (GLuint program, const GLchar *name); +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glBindFragDataLocationIndexedEXT (GLuint program, GLuint colorNumber, GLuint index, const GLchar *name); +GL_APICALL void GL_APIENTRY glBindFragDataLocationEXT (GLuint program, GLuint color, const GLchar *name); +GL_APICALL GLint GL_APIENTRY glGetProgramResourceLocationIndexEXT (GLuint program, GLenum programInterface, const GLchar *name); +GL_APICALL GLint GL_APIENTRY glGetFragDataIndexEXT (GLuint program, const GLchar *name); +#endif +#endif /* GL_EXT_blend_func_extended */ + +#ifndef GL_EXT_blend_minmax +#define GL_EXT_blend_minmax 1 +#define GL_MIN_EXT 0x8007 +#define GL_MAX_EXT 0x8008 +#endif /* GL_EXT_blend_minmax */ + +#ifndef GL_EXT_buffer_storage +#define GL_EXT_buffer_storage 1 +#define GL_MAP_READ_BIT 0x0001 +#define GL_MAP_WRITE_BIT 0x0002 +#define GL_MAP_PERSISTENT_BIT_EXT 0x0040 +#define GL_MAP_COHERENT_BIT_EXT 0x0080 +#define GL_DYNAMIC_STORAGE_BIT_EXT 0x0100 +#define GL_CLIENT_STORAGE_BIT_EXT 0x0200 +#define GL_CLIENT_MAPPED_BUFFER_BARRIER_BIT_EXT 0x00004000 +#define GL_BUFFER_IMMUTABLE_STORAGE_EXT 0x821F +#define GL_BUFFER_STORAGE_FLAGS_EXT 0x8220 +typedef void (GL_APIENTRYP PFNGLBUFFERSTORAGEEXTPROC) (GLenum target, GLsizeiptr size, const void *data, GLbitfield flags); +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glBufferStorageEXT (GLenum target, GLsizeiptr size, const void *data, GLbitfield flags); +#endif +#endif /* GL_EXT_buffer_storage */ + +#ifndef GL_EXT_clear_texture +#define GL_EXT_clear_texture 1 +typedef void (GL_APIENTRYP PFNGLCLEARTEXIMAGEEXTPROC) (GLuint texture, GLint level, GLenum format, GLenum type, const void *data); +typedef void (GL_APIENTRYP PFNGLCLEARTEXSUBIMAGEEXTPROC) (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *data); +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glClearTexImageEXT (GLuint texture, GLint level, GLenum format, GLenum type, const void *data); +GL_APICALL void GL_APIENTRY glClearTexSubImageEXT (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *data); +#endif +#endif /* GL_EXT_clear_texture */ + +#ifndef GL_EXT_clip_control +#define GL_EXT_clip_control 1 +#define GL_LOWER_LEFT_EXT 0x8CA1 +#define GL_UPPER_LEFT_EXT 0x8CA2 +#define GL_NEGATIVE_ONE_TO_ONE_EXT 0x935E +#define GL_ZERO_TO_ONE_EXT 0x935F +#define GL_CLIP_ORIGIN_EXT 0x935C +#define GL_CLIP_DEPTH_MODE_EXT 0x935D +typedef void (GL_APIENTRYP PFNGLCLIPCONTROLEXTPROC) (GLenum origin, GLenum depth); +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glClipControlEXT (GLenum origin, GLenum depth); +#endif +#endif /* GL_EXT_clip_control */ + +#ifndef GL_EXT_clip_cull_distance +#define GL_EXT_clip_cull_distance 1 +#define GL_MAX_CLIP_DISTANCES_EXT 0x0D32 +#define GL_MAX_CULL_DISTANCES_EXT 0x82F9 +#define GL_MAX_COMBINED_CLIP_AND_CULL_DISTANCES_EXT 0x82FA +#define GL_CLIP_DISTANCE0_EXT 0x3000 +#define GL_CLIP_DISTANCE1_EXT 0x3001 +#define GL_CLIP_DISTANCE2_EXT 0x3002 +#define GL_CLIP_DISTANCE3_EXT 0x3003 +#define GL_CLIP_DISTANCE4_EXT 0x3004 +#define GL_CLIP_DISTANCE5_EXT 0x3005 +#define GL_CLIP_DISTANCE6_EXT 0x3006 +#define GL_CLIP_DISTANCE7_EXT 0x3007 +#endif /* GL_EXT_clip_cull_distance */ + +#ifndef GL_EXT_color_buffer_float +#define GL_EXT_color_buffer_float 1 +#endif /* GL_EXT_color_buffer_float */ + +#ifndef GL_EXT_color_buffer_half_float +#define GL_EXT_color_buffer_half_float 1 +#define GL_RGBA16F_EXT 0x881A +#define GL_RGB16F_EXT 0x881B +#define GL_RG16F_EXT 0x822F +#define GL_R16F_EXT 0x822D +#define GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE_EXT 0x8211 +#define GL_UNSIGNED_NORMALIZED_EXT 0x8C17 +#endif /* GL_EXT_color_buffer_half_float */ + +#ifndef GL_EXT_conservative_depth +#define GL_EXT_conservative_depth 1 +#endif /* GL_EXT_conservative_depth */ + +#ifndef GL_EXT_copy_image +#define GL_EXT_copy_image 1 +typedef void (GL_APIENTRYP PFNGLCOPYIMAGESUBDATAEXTPROC) (GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei srcWidth, GLsizei srcHeight, GLsizei srcDepth); +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glCopyImageSubDataEXT (GLuint srcName, GLenum srcTarget, GLint srcLevel, GLint srcX, GLint srcY, GLint srcZ, GLuint dstName, GLenum dstTarget, GLint dstLevel, GLint dstX, GLint dstY, GLint dstZ, GLsizei srcWidth, GLsizei srcHeight, GLsizei srcDepth); +#endif +#endif /* GL_EXT_copy_image */ + +#ifndef GL_EXT_debug_label +#define GL_EXT_debug_label 1 +#define GL_PROGRAM_PIPELINE_OBJECT_EXT 0x8A4F +#define GL_PROGRAM_OBJECT_EXT 0x8B40 +#define GL_SHADER_OBJECT_EXT 0x8B48 +#define GL_BUFFER_OBJECT_EXT 0x9151 +#define GL_QUERY_OBJECT_EXT 0x9153 +#define GL_VERTEX_ARRAY_OBJECT_EXT 0x9154 +#define GL_TRANSFORM_FEEDBACK 0x8E22 +typedef void (GL_APIENTRYP PFNGLLABELOBJECTEXTPROC) (GLenum type, GLuint object, GLsizei length, const GLchar *label); +typedef void (GL_APIENTRYP PFNGLGETOBJECTLABELEXTPROC) (GLenum type, GLuint object, GLsizei bufSize, GLsizei *length, GLchar *label); +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glLabelObjectEXT (GLenum type, GLuint object, GLsizei length, const GLchar *label); +GL_APICALL void GL_APIENTRY glGetObjectLabelEXT (GLenum type, GLuint object, GLsizei bufSize, GLsizei *length, GLchar *label); +#endif +#endif /* GL_EXT_debug_label */ + +#ifndef GL_EXT_debug_marker +#define GL_EXT_debug_marker 1 +typedef void (GL_APIENTRYP PFNGLINSERTEVENTMARKEREXTPROC) (GLsizei length, const GLchar *marker); +typedef void (GL_APIENTRYP PFNGLPUSHGROUPMARKEREXTPROC) (GLsizei length, const GLchar *marker); +typedef void (GL_APIENTRYP PFNGLPOPGROUPMARKEREXTPROC) (void); +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glInsertEventMarkerEXT (GLsizei length, const GLchar *marker); +GL_APICALL void GL_APIENTRY glPushGroupMarkerEXT (GLsizei length, const GLchar *marker); +GL_APICALL void GL_APIENTRY glPopGroupMarkerEXT (void); +#endif +#endif /* GL_EXT_debug_marker */ + +#ifndef GL_EXT_depth_clamp +#define GL_EXT_depth_clamp 1 +#define GL_DEPTH_CLAMP_EXT 0x864F +#endif /* GL_EXT_depth_clamp */ + +#ifndef GL_EXT_discard_framebuffer +#define GL_EXT_discard_framebuffer 1 +#define GL_COLOR_EXT 0x1800 +#define GL_DEPTH_EXT 0x1801 +#define GL_STENCIL_EXT 0x1802 +typedef void (GL_APIENTRYP PFNGLDISCARDFRAMEBUFFEREXTPROC) (GLenum target, GLsizei numAttachments, const GLenum *attachments); +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glDiscardFramebufferEXT (GLenum target, GLsizei numAttachments, const GLenum *attachments); +#endif +#endif /* GL_EXT_discard_framebuffer */ + +#ifndef GL_EXT_disjoint_timer_query +#define GL_EXT_disjoint_timer_query 1 +#define GL_QUERY_COUNTER_BITS_EXT 0x8864 +#define GL_CURRENT_QUERY_EXT 0x8865 +#define GL_QUERY_RESULT_EXT 0x8866 +#define GL_QUERY_RESULT_AVAILABLE_EXT 0x8867 +#define GL_TIME_ELAPSED_EXT 0x88BF +#define GL_TIMESTAMP_EXT 0x8E28 +#define GL_GPU_DISJOINT_EXT 0x8FBB +typedef void (GL_APIENTRYP PFNGLGENQUERIESEXTPROC) (GLsizei n, GLuint *ids); +typedef void (GL_APIENTRYP PFNGLDELETEQUERIESEXTPROC) (GLsizei n, const GLuint *ids); +typedef GLboolean (GL_APIENTRYP PFNGLISQUERYEXTPROC) (GLuint id); +typedef void (GL_APIENTRYP PFNGLBEGINQUERYEXTPROC) (GLenum target, GLuint id); +typedef void (GL_APIENTRYP PFNGLENDQUERYEXTPROC) (GLenum target); +typedef void (GL_APIENTRYP PFNGLQUERYCOUNTEREXTPROC) (GLuint id, GLenum target); +typedef void (GL_APIENTRYP PFNGLGETQUERYIVEXTPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (GL_APIENTRYP PFNGLGETQUERYOBJECTIVEXTPROC) (GLuint id, GLenum pname, GLint *params); +typedef void (GL_APIENTRYP PFNGLGETQUERYOBJECTUIVEXTPROC) (GLuint id, GLenum pname, GLuint *params); +typedef void (GL_APIENTRYP PFNGLGETQUERYOBJECTI64VEXTPROC) (GLuint id, GLenum pname, GLint64 *params); +typedef void (GL_APIENTRYP PFNGLGETQUERYOBJECTUI64VEXTPROC) (GLuint id, GLenum pname, GLuint64 *params); +typedef void (GL_APIENTRYP PFNGLGETINTEGER64VEXTPROC) (GLenum pname, GLint64 *data); +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glGenQueriesEXT (GLsizei n, GLuint *ids); +GL_APICALL void GL_APIENTRY glDeleteQueriesEXT (GLsizei n, const GLuint *ids); +GL_APICALL GLboolean GL_APIENTRY glIsQueryEXT (GLuint id); +GL_APICALL void GL_APIENTRY glBeginQueryEXT (GLenum target, GLuint id); +GL_APICALL void GL_APIENTRY glEndQueryEXT (GLenum target); +GL_APICALL void GL_APIENTRY glQueryCounterEXT (GLuint id, GLenum target); +GL_APICALL void GL_APIENTRY glGetQueryivEXT (GLenum target, GLenum pname, GLint *params); +GL_APICALL void GL_APIENTRY glGetQueryObjectivEXT (GLuint id, GLenum pname, GLint *params); +GL_APICALL void GL_APIENTRY glGetQueryObjectuivEXT (GLuint id, GLenum pname, GLuint *params); +GL_APICALL void GL_APIENTRY glGetQueryObjecti64vEXT (GLuint id, GLenum pname, GLint64 *params); +GL_APICALL void GL_APIENTRY glGetQueryObjectui64vEXT (GLuint id, GLenum pname, GLuint64 *params); +GL_APICALL void GL_APIENTRY glGetInteger64vEXT (GLenum pname, GLint64 *data); +#endif +#endif /* GL_EXT_disjoint_timer_query */ + +#ifndef GL_EXT_draw_buffers +#define GL_EXT_draw_buffers 1 +#define GL_MAX_COLOR_ATTACHMENTS_EXT 0x8CDF +#define GL_MAX_DRAW_BUFFERS_EXT 0x8824 +#define GL_DRAW_BUFFER0_EXT 0x8825 +#define GL_DRAW_BUFFER1_EXT 0x8826 +#define GL_DRAW_BUFFER2_EXT 0x8827 +#define GL_DRAW_BUFFER3_EXT 0x8828 +#define GL_DRAW_BUFFER4_EXT 0x8829 +#define GL_DRAW_BUFFER5_EXT 0x882A +#define GL_DRAW_BUFFER6_EXT 0x882B +#define GL_DRAW_BUFFER7_EXT 0x882C +#define GL_DRAW_BUFFER8_EXT 0x882D +#define GL_DRAW_BUFFER9_EXT 0x882E +#define GL_DRAW_BUFFER10_EXT 0x882F +#define GL_DRAW_BUFFER11_EXT 0x8830 +#define GL_DRAW_BUFFER12_EXT 0x8831 +#define GL_DRAW_BUFFER13_EXT 0x8832 +#define GL_DRAW_BUFFER14_EXT 0x8833 +#define GL_DRAW_BUFFER15_EXT 0x8834 +#define GL_COLOR_ATTACHMENT0_EXT 0x8CE0 +#define GL_COLOR_ATTACHMENT1_EXT 0x8CE1 +#define GL_COLOR_ATTACHMENT2_EXT 0x8CE2 +#define GL_COLOR_ATTACHMENT3_EXT 0x8CE3 +#define GL_COLOR_ATTACHMENT4_EXT 0x8CE4 +#define GL_COLOR_ATTACHMENT5_EXT 0x8CE5 +#define GL_COLOR_ATTACHMENT6_EXT 0x8CE6 +#define GL_COLOR_ATTACHMENT7_EXT 0x8CE7 +#define GL_COLOR_ATTACHMENT8_EXT 0x8CE8 +#define GL_COLOR_ATTACHMENT9_EXT 0x8CE9 +#define GL_COLOR_ATTACHMENT10_EXT 0x8CEA +#define GL_COLOR_ATTACHMENT11_EXT 0x8CEB +#define GL_COLOR_ATTACHMENT12_EXT 0x8CEC +#define GL_COLOR_ATTACHMENT13_EXT 0x8CED +#define GL_COLOR_ATTACHMENT14_EXT 0x8CEE +#define GL_COLOR_ATTACHMENT15_EXT 0x8CEF +typedef void (GL_APIENTRYP PFNGLDRAWBUFFERSEXTPROC) (GLsizei n, const GLenum *bufs); +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glDrawBuffersEXT (GLsizei n, const GLenum *bufs); +#endif +#endif /* GL_EXT_draw_buffers */ + +#ifndef GL_EXT_draw_buffers_indexed +#define GL_EXT_draw_buffers_indexed 1 +typedef void (GL_APIENTRYP PFNGLENABLEIEXTPROC) (GLenum target, GLuint index); +typedef void (GL_APIENTRYP PFNGLDISABLEIEXTPROC) (GLenum target, GLuint index); +typedef void (GL_APIENTRYP PFNGLBLENDEQUATIONIEXTPROC) (GLuint buf, GLenum mode); +typedef void (GL_APIENTRYP PFNGLBLENDEQUATIONSEPARATEIEXTPROC) (GLuint buf, GLenum modeRGB, GLenum modeAlpha); +typedef void (GL_APIENTRYP PFNGLBLENDFUNCIEXTPROC) (GLuint buf, GLenum src, GLenum dst); +typedef void (GL_APIENTRYP PFNGLBLENDFUNCSEPARATEIEXTPROC) (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); +typedef void (GL_APIENTRYP PFNGLCOLORMASKIEXTPROC) (GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a); +typedef GLboolean (GL_APIENTRYP PFNGLISENABLEDIEXTPROC) (GLenum target, GLuint index); +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glEnableiEXT (GLenum target, GLuint index); +GL_APICALL void GL_APIENTRY glDisableiEXT (GLenum target, GLuint index); +GL_APICALL void GL_APIENTRY glBlendEquationiEXT (GLuint buf, GLenum mode); +GL_APICALL void GL_APIENTRY glBlendEquationSeparateiEXT (GLuint buf, GLenum modeRGB, GLenum modeAlpha); +GL_APICALL void GL_APIENTRY glBlendFunciEXT (GLuint buf, GLenum src, GLenum dst); +GL_APICALL void GL_APIENTRY glBlendFuncSeparateiEXT (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); +GL_APICALL void GL_APIENTRY glColorMaskiEXT (GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a); +GL_APICALL GLboolean GL_APIENTRY glIsEnablediEXT (GLenum target, GLuint index); +#endif +#endif /* GL_EXT_draw_buffers_indexed */ + +#ifndef GL_EXT_draw_elements_base_vertex +#define GL_EXT_draw_elements_base_vertex 1 +typedef void (GL_APIENTRYP PFNGLDRAWELEMENTSBASEVERTEXEXTPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLint basevertex); +typedef void (GL_APIENTRYP PFNGLDRAWRANGEELEMENTSBASEVERTEXEXTPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices, GLint basevertex); +typedef void (GL_APIENTRYP PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXEXTPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLint basevertex); +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glDrawElementsBaseVertexEXT (GLenum mode, GLsizei count, GLenum type, const void *indices, GLint basevertex); +GL_APICALL void GL_APIENTRY glDrawRangeElementsBaseVertexEXT (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices, GLint basevertex); +GL_APICALL void GL_APIENTRY glDrawElementsInstancedBaseVertexEXT (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLint basevertex); +#endif +#endif /* GL_EXT_draw_elements_base_vertex */ + +#ifndef GL_EXT_draw_instanced +#define GL_EXT_draw_instanced 1 +typedef void (GL_APIENTRYP PFNGLDRAWARRAYSINSTANCEDEXTPROC) (GLenum mode, GLint start, GLsizei count, GLsizei primcount); +typedef void (GL_APIENTRYP PFNGLDRAWELEMENTSINSTANCEDEXTPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei primcount); +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glDrawArraysInstancedEXT (GLenum mode, GLint start, GLsizei count, GLsizei primcount); +GL_APICALL void GL_APIENTRY glDrawElementsInstancedEXT (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei primcount); +#endif +#endif /* GL_EXT_draw_instanced */ + +#ifndef GL_EXT_draw_transform_feedback +#define GL_EXT_draw_transform_feedback 1 +typedef void (GL_APIENTRYP PFNGLDRAWTRANSFORMFEEDBACKEXTPROC) (GLenum mode, GLuint id); +typedef void (GL_APIENTRYP PFNGLDRAWTRANSFORMFEEDBACKINSTANCEDEXTPROC) (GLenum mode, GLuint id, GLsizei instancecount); +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glDrawTransformFeedbackEXT (GLenum mode, GLuint id); +GL_APICALL void GL_APIENTRY glDrawTransformFeedbackInstancedEXT (GLenum mode, GLuint id, GLsizei instancecount); +#endif +#endif /* GL_EXT_draw_transform_feedback */ + +#ifndef GL_EXT_external_buffer +#define GL_EXT_external_buffer 1 +typedef void *GLeglClientBufferEXT; +typedef void (GL_APIENTRYP PFNGLBUFFERSTORAGEEXTERNALEXTPROC) (GLenum target, GLintptr offset, GLsizeiptr size, GLeglClientBufferEXT clientBuffer, GLbitfield flags); +typedef void (GL_APIENTRYP PFNGLNAMEDBUFFERSTORAGEEXTERNALEXTPROC) (GLuint buffer, GLintptr offset, GLsizeiptr size, GLeglClientBufferEXT clientBuffer, GLbitfield flags); +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glBufferStorageExternalEXT (GLenum target, GLintptr offset, GLsizeiptr size, GLeglClientBufferEXT clientBuffer, GLbitfield flags); +GL_APICALL void GL_APIENTRY glNamedBufferStorageExternalEXT (GLuint buffer, GLintptr offset, GLsizeiptr size, GLeglClientBufferEXT clientBuffer, GLbitfield flags); +#endif +#endif /* GL_EXT_external_buffer */ + +#ifndef GL_EXT_float_blend +#define GL_EXT_float_blend 1 +#endif /* GL_EXT_float_blend */ + +#ifndef GL_EXT_fragment_shading_rate +#define GL_EXT_fragment_shading_rate 1 +#define GL_SHADING_RATE_1X1_PIXELS_EXT 0x96A6 +#define GL_SHADING_RATE_1X2_PIXELS_EXT 0x96A7 +#define GL_SHADING_RATE_2X1_PIXELS_EXT 0x96A8 +#define GL_SHADING_RATE_2X2_PIXELS_EXT 0x96A9 +#define GL_SHADING_RATE_1X4_PIXELS_EXT 0x96AA +#define GL_SHADING_RATE_4X1_PIXELS_EXT 0x96AB +#define GL_SHADING_RATE_4X2_PIXELS_EXT 0x96AC +#define GL_SHADING_RATE_2X4_PIXELS_EXT 0x96AD +#define GL_SHADING_RATE_4X4_PIXELS_EXT 0x96AE +#define GL_SHADING_RATE_EXT 0x96D0 +#define GL_SHADING_RATE_ATTACHMENT_EXT 0x96D1 +#define GL_FRAGMENT_SHADING_RATE_COMBINER_OP_KEEP_EXT 0x96D2 +#define GL_FRAGMENT_SHADING_RATE_COMBINER_OP_REPLACE_EXT 0x96D3 +#define GL_FRAGMENT_SHADING_RATE_COMBINER_OP_MIN_EXT 0x96D4 +#define GL_FRAGMENT_SHADING_RATE_COMBINER_OP_MAX_EXT 0x96D5 +#define GL_FRAGMENT_SHADING_RATE_COMBINER_OP_MUL_EXT 0x96D6 +#define GL_MIN_FRAGMENT_SHADING_RATE_ATTACHMENT_TEXEL_WIDTH_EXT 0x96D7 +#define GL_MAX_FRAGMENT_SHADING_RATE_ATTACHMENT_TEXEL_WIDTH_EXT 0x96D8 +#define GL_MIN_FRAGMENT_SHADING_RATE_ATTACHMENT_TEXEL_HEIGHT_EXT 0x96D9 +#define GL_MAX_FRAGMENT_SHADING_RATE_ATTACHMENT_TEXEL_HEIGHT_EXT 0x96DA +#define GL_MAX_FRAGMENT_SHADING_RATE_ATTACHMENT_TEXEL_ASPECT_RATIO_EXT 0x96DB +#define GL_MAX_FRAGMENT_SHADING_RATE_ATTACHMENT_LAYERS_EXT 0x96DC +#define GL_FRAGMENT_SHADING_RATE_WITH_SHADER_DEPTH_STENCIL_WRITES_SUPPORTED_EXT 0x96DD +#define GL_FRAGMENT_SHADING_RATE_WITH_SAMPLE_MASK_SUPPORTED_EXT 0x96DE +#define GL_FRAGMENT_SHADING_RATE_ATTACHMENT_WITH_DEFAULT_FRAMEBUFFER_SUPPORTED_EXT 0x96DF +#define GL_FRAGMENT_SHADING_RATE_NON_TRIVIAL_COMBINERS_SUPPORTED_EXT 0x8F6F +typedef void (GL_APIENTRYP PFNGLGETFRAGMENTSHADINGRATESEXTPROC) (GLsizei samples, GLsizei maxCount, GLsizei *count, GLenum *shadingRates); +typedef void (GL_APIENTRYP PFNGLSHADINGRATEEXTPROC) (GLenum rate); +typedef void (GL_APIENTRYP PFNGLSHADINGRATECOMBINEROPSEXTPROC) (GLenum combinerOp0, GLenum combinerOp1); +typedef void (GL_APIENTRYP PFNGLFRAMEBUFFERSHADINGRATEEXTPROC) (GLenum target, GLenum attachment, GLuint texture, GLint baseLayer, GLsizei numLayers, GLsizei texelWidth, GLsizei texelHeight); +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glGetFragmentShadingRatesEXT (GLsizei samples, GLsizei maxCount, GLsizei *count, GLenum *shadingRates); +GL_APICALL void GL_APIENTRY glShadingRateEXT (GLenum rate); +GL_APICALL void GL_APIENTRY glShadingRateCombinerOpsEXT (GLenum combinerOp0, GLenum combinerOp1); +GL_APICALL void GL_APIENTRY glFramebufferShadingRateEXT (GLenum target, GLenum attachment, GLuint texture, GLint baseLayer, GLsizei numLayers, GLsizei texelWidth, GLsizei texelHeight); +#endif +#endif /* GL_EXT_fragment_shading_rate */ + +#ifndef GL_EXT_geometry_point_size +#define GL_EXT_geometry_point_size 1 +#endif /* GL_EXT_geometry_point_size */ + +#ifndef GL_EXT_geometry_shader +#define GL_EXT_geometry_shader 1 +#define GL_GEOMETRY_SHADER_EXT 0x8DD9 +#define GL_GEOMETRY_SHADER_BIT_EXT 0x00000004 +#define GL_GEOMETRY_LINKED_VERTICES_OUT_EXT 0x8916 +#define GL_GEOMETRY_LINKED_INPUT_TYPE_EXT 0x8917 +#define GL_GEOMETRY_LINKED_OUTPUT_TYPE_EXT 0x8918 +#define GL_GEOMETRY_SHADER_INVOCATIONS_EXT 0x887F +#define GL_LAYER_PROVOKING_VERTEX_EXT 0x825E +#define GL_LINES_ADJACENCY_EXT 0x000A +#define GL_LINE_STRIP_ADJACENCY_EXT 0x000B +#define GL_TRIANGLES_ADJACENCY_EXT 0x000C +#define GL_TRIANGLE_STRIP_ADJACENCY_EXT 0x000D +#define GL_MAX_GEOMETRY_UNIFORM_COMPONENTS_EXT 0x8DDF +#define GL_MAX_GEOMETRY_UNIFORM_BLOCKS_EXT 0x8A2C +#define GL_MAX_COMBINED_GEOMETRY_UNIFORM_COMPONENTS_EXT 0x8A32 +#define GL_MAX_GEOMETRY_INPUT_COMPONENTS_EXT 0x9123 +#define GL_MAX_GEOMETRY_OUTPUT_COMPONENTS_EXT 0x9124 +#define GL_MAX_GEOMETRY_OUTPUT_VERTICES_EXT 0x8DE0 +#define GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS_EXT 0x8DE1 +#define GL_MAX_GEOMETRY_SHADER_INVOCATIONS_EXT 0x8E5A +#define GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS_EXT 0x8C29 +#define GL_MAX_GEOMETRY_ATOMIC_COUNTER_BUFFERS_EXT 0x92CF +#define GL_MAX_GEOMETRY_ATOMIC_COUNTERS_EXT 0x92D5 +#define GL_MAX_GEOMETRY_IMAGE_UNIFORMS_EXT 0x90CD +#define GL_MAX_GEOMETRY_SHADER_STORAGE_BLOCKS_EXT 0x90D7 +#define GL_FIRST_VERTEX_CONVENTION_EXT 0x8E4D +#define GL_LAST_VERTEX_CONVENTION_EXT 0x8E4E +#define GL_UNDEFINED_VERTEX_EXT 0x8260 +#define GL_PRIMITIVES_GENERATED_EXT 0x8C87 +#define GL_FRAMEBUFFER_DEFAULT_LAYERS_EXT 0x9312 +#define GL_MAX_FRAMEBUFFER_LAYERS_EXT 0x9317 +#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS_EXT 0x8DA8 +#define GL_FRAMEBUFFER_ATTACHMENT_LAYERED_EXT 0x8DA7 +#define GL_REFERENCED_BY_GEOMETRY_SHADER_EXT 0x9309 +typedef void (GL_APIENTRYP PFNGLFRAMEBUFFERTEXTUREEXTPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level); +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glFramebufferTextureEXT (GLenum target, GLenum attachment, GLuint texture, GLint level); +#endif +#endif /* GL_EXT_geometry_shader */ + +#ifndef GL_EXT_gpu_shader5 +#define GL_EXT_gpu_shader5 1 +#endif /* GL_EXT_gpu_shader5 */ + +#ifndef GL_EXT_instanced_arrays +#define GL_EXT_instanced_arrays 1 +#define GL_VERTEX_ATTRIB_ARRAY_DIVISOR_EXT 0x88FE +typedef void (GL_APIENTRYP PFNGLVERTEXATTRIBDIVISOREXTPROC) (GLuint index, GLuint divisor); +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glVertexAttribDivisorEXT (GLuint index, GLuint divisor); +#endif +#endif /* GL_EXT_instanced_arrays */ + +#ifndef GL_EXT_map_buffer_range +#define GL_EXT_map_buffer_range 1 +#define GL_MAP_READ_BIT_EXT 0x0001 +#define GL_MAP_WRITE_BIT_EXT 0x0002 +#define GL_MAP_INVALIDATE_RANGE_BIT_EXT 0x0004 +#define GL_MAP_INVALIDATE_BUFFER_BIT_EXT 0x0008 +#define GL_MAP_FLUSH_EXPLICIT_BIT_EXT 0x0010 +#define GL_MAP_UNSYNCHRONIZED_BIT_EXT 0x0020 +typedef void *(GL_APIENTRYP PFNGLMAPBUFFERRANGEEXTPROC) (GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access); +typedef void (GL_APIENTRYP PFNGLFLUSHMAPPEDBUFFERRANGEEXTPROC) (GLenum target, GLintptr offset, GLsizeiptr length); +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void *GL_APIENTRY glMapBufferRangeEXT (GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access); +GL_APICALL void GL_APIENTRY glFlushMappedBufferRangeEXT (GLenum target, GLintptr offset, GLsizeiptr length); +#endif +#endif /* GL_EXT_map_buffer_range */ + +#ifndef GL_EXT_memory_object +#define GL_EXT_memory_object 1 +#define GL_TEXTURE_TILING_EXT 0x9580 +#define GL_DEDICATED_MEMORY_OBJECT_EXT 0x9581 +#define GL_PROTECTED_MEMORY_OBJECT_EXT 0x959B +#define GL_NUM_TILING_TYPES_EXT 0x9582 +#define GL_TILING_TYPES_EXT 0x9583 +#define GL_OPTIMAL_TILING_EXT 0x9584 +#define GL_LINEAR_TILING_EXT 0x9585 +#define GL_NUM_DEVICE_UUIDS_EXT 0x9596 +#define GL_DEVICE_UUID_EXT 0x9597 +#define GL_DRIVER_UUID_EXT 0x9598 +#define GL_UUID_SIZE_EXT 16 +typedef void (GL_APIENTRYP PFNGLGETUNSIGNEDBYTEVEXTPROC) (GLenum pname, GLubyte *data); +typedef void (GL_APIENTRYP PFNGLGETUNSIGNEDBYTEI_VEXTPROC) (GLenum target, GLuint index, GLubyte *data); +typedef void (GL_APIENTRYP PFNGLDELETEMEMORYOBJECTSEXTPROC) (GLsizei n, const GLuint *memoryObjects); +typedef GLboolean (GL_APIENTRYP PFNGLISMEMORYOBJECTEXTPROC) (GLuint memoryObject); +typedef void (GL_APIENTRYP PFNGLCREATEMEMORYOBJECTSEXTPROC) (GLsizei n, GLuint *memoryObjects); +typedef void (GL_APIENTRYP PFNGLMEMORYOBJECTPARAMETERIVEXTPROC) (GLuint memoryObject, GLenum pname, const GLint *params); +typedef void (GL_APIENTRYP PFNGLGETMEMORYOBJECTPARAMETERIVEXTPROC) (GLuint memoryObject, GLenum pname, GLint *params); +typedef void (GL_APIENTRYP PFNGLTEXSTORAGEMEM2DEXTPROC) (GLenum target, GLsizei levels, GLenum internalFormat, GLsizei width, GLsizei height, GLuint memory, GLuint64 offset); +typedef void (GL_APIENTRYP PFNGLTEXSTORAGEMEM2DMULTISAMPLEEXTPROC) (GLenum target, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations, GLuint memory, GLuint64 offset); +typedef void (GL_APIENTRYP PFNGLTEXSTORAGEMEM3DEXTPROC) (GLenum target, GLsizei levels, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLuint memory, GLuint64 offset); +typedef void (GL_APIENTRYP PFNGLTEXSTORAGEMEM3DMULTISAMPLEEXTPROC) (GLenum target, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations, GLuint memory, GLuint64 offset); +typedef void (GL_APIENTRYP PFNGLBUFFERSTORAGEMEMEXTPROC) (GLenum target, GLsizeiptr size, GLuint memory, GLuint64 offset); +typedef void (GL_APIENTRYP PFNGLTEXTURESTORAGEMEM2DEXTPROC) (GLuint texture, GLsizei levels, GLenum internalFormat, GLsizei width, GLsizei height, GLuint memory, GLuint64 offset); +typedef void (GL_APIENTRYP PFNGLTEXTURESTORAGEMEM2DMULTISAMPLEEXTPROC) (GLuint texture, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations, GLuint memory, GLuint64 offset); +typedef void (GL_APIENTRYP PFNGLTEXTURESTORAGEMEM3DEXTPROC) (GLuint texture, GLsizei levels, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLuint memory, GLuint64 offset); +typedef void (GL_APIENTRYP PFNGLTEXTURESTORAGEMEM3DMULTISAMPLEEXTPROC) (GLuint texture, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations, GLuint memory, GLuint64 offset); +typedef void (GL_APIENTRYP PFNGLNAMEDBUFFERSTORAGEMEMEXTPROC) (GLuint buffer, GLsizeiptr size, GLuint memory, GLuint64 offset); +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glGetUnsignedBytevEXT (GLenum pname, GLubyte *data); +GL_APICALL void GL_APIENTRY glGetUnsignedBytei_vEXT (GLenum target, GLuint index, GLubyte *data); +GL_APICALL void GL_APIENTRY glDeleteMemoryObjectsEXT (GLsizei n, const GLuint *memoryObjects); +GL_APICALL GLboolean GL_APIENTRY glIsMemoryObjectEXT (GLuint memoryObject); +GL_APICALL void GL_APIENTRY glCreateMemoryObjectsEXT (GLsizei n, GLuint *memoryObjects); +GL_APICALL void GL_APIENTRY glMemoryObjectParameterivEXT (GLuint memoryObject, GLenum pname, const GLint *params); +GL_APICALL void GL_APIENTRY glGetMemoryObjectParameterivEXT (GLuint memoryObject, GLenum pname, GLint *params); +GL_APICALL void GL_APIENTRY glTexStorageMem2DEXT (GLenum target, GLsizei levels, GLenum internalFormat, GLsizei width, GLsizei height, GLuint memory, GLuint64 offset); +GL_APICALL void GL_APIENTRY glTexStorageMem2DMultisampleEXT (GLenum target, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations, GLuint memory, GLuint64 offset); +GL_APICALL void GL_APIENTRY glTexStorageMem3DEXT (GLenum target, GLsizei levels, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLuint memory, GLuint64 offset); +GL_APICALL void GL_APIENTRY glTexStorageMem3DMultisampleEXT (GLenum target, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations, GLuint memory, GLuint64 offset); +GL_APICALL void GL_APIENTRY glBufferStorageMemEXT (GLenum target, GLsizeiptr size, GLuint memory, GLuint64 offset); +GL_APICALL void GL_APIENTRY glTextureStorageMem2DEXT (GLuint texture, GLsizei levels, GLenum internalFormat, GLsizei width, GLsizei height, GLuint memory, GLuint64 offset); +GL_APICALL void GL_APIENTRY glTextureStorageMem2DMultisampleEXT (GLuint texture, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height, GLboolean fixedSampleLocations, GLuint memory, GLuint64 offset); +GL_APICALL void GL_APIENTRY glTextureStorageMem3DEXT (GLuint texture, GLsizei levels, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLuint memory, GLuint64 offset); +GL_APICALL void GL_APIENTRY glTextureStorageMem3DMultisampleEXT (GLuint texture, GLsizei samples, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedSampleLocations, GLuint memory, GLuint64 offset); +GL_APICALL void GL_APIENTRY glNamedBufferStorageMemEXT (GLuint buffer, GLsizeiptr size, GLuint memory, GLuint64 offset); +#endif +#endif /* GL_EXT_memory_object */ + +#ifndef GL_EXT_memory_object_fd +#define GL_EXT_memory_object_fd 1 +#define GL_HANDLE_TYPE_OPAQUE_FD_EXT 0x9586 +typedef void (GL_APIENTRYP PFNGLIMPORTMEMORYFDEXTPROC) (GLuint memory, GLuint64 size, GLenum handleType, GLint fd); +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glImportMemoryFdEXT (GLuint memory, GLuint64 size, GLenum handleType, GLint fd); +#endif +#endif /* GL_EXT_memory_object_fd */ + +#ifndef GL_EXT_memory_object_win32 +#define GL_EXT_memory_object_win32 1 +#define GL_HANDLE_TYPE_OPAQUE_WIN32_EXT 0x9587 +#define GL_HANDLE_TYPE_OPAQUE_WIN32_KMT_EXT 0x9588 +#define GL_DEVICE_LUID_EXT 0x9599 +#define GL_DEVICE_NODE_MASK_EXT 0x959A +#define GL_LUID_SIZE_EXT 8 +#define GL_HANDLE_TYPE_D3D12_TILEPOOL_EXT 0x9589 +#define GL_HANDLE_TYPE_D3D12_RESOURCE_EXT 0x958A +#define GL_HANDLE_TYPE_D3D11_IMAGE_EXT 0x958B +#define GL_HANDLE_TYPE_D3D11_IMAGE_KMT_EXT 0x958C +typedef void (GL_APIENTRYP PFNGLIMPORTMEMORYWIN32HANDLEEXTPROC) (GLuint memory, GLuint64 size, GLenum handleType, void *handle); +typedef void (GL_APIENTRYP PFNGLIMPORTMEMORYWIN32NAMEEXTPROC) (GLuint memory, GLuint64 size, GLenum handleType, const void *name); +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glImportMemoryWin32HandleEXT (GLuint memory, GLuint64 size, GLenum handleType, void *handle); +GL_APICALL void GL_APIENTRY glImportMemoryWin32NameEXT (GLuint memory, GLuint64 size, GLenum handleType, const void *name); +#endif +#endif /* GL_EXT_memory_object_win32 */ + +#ifndef GL_EXT_multi_draw_arrays +#define GL_EXT_multi_draw_arrays 1 +typedef void (GL_APIENTRYP PFNGLMULTIDRAWARRAYSEXTPROC) (GLenum mode, const GLint *first, const GLsizei *count, GLsizei primcount); +typedef void (GL_APIENTRYP PFNGLMULTIDRAWELEMENTSEXTPROC) (GLenum mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei primcount); +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glMultiDrawArraysEXT (GLenum mode, const GLint *first, const GLsizei *count, GLsizei primcount); +GL_APICALL void GL_APIENTRY glMultiDrawElementsEXT (GLenum mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei primcount); +#endif +#endif /* GL_EXT_multi_draw_arrays */ + +#ifndef GL_EXT_multi_draw_indirect +#define GL_EXT_multi_draw_indirect 1 +typedef void (GL_APIENTRYP PFNGLMULTIDRAWARRAYSINDIRECTEXTPROC) (GLenum mode, const void *indirect, GLsizei drawcount, GLsizei stride); +typedef void (GL_APIENTRYP PFNGLMULTIDRAWELEMENTSINDIRECTEXTPROC) (GLenum mode, GLenum type, const void *indirect, GLsizei drawcount, GLsizei stride); +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glMultiDrawArraysIndirectEXT (GLenum mode, const void *indirect, GLsizei drawcount, GLsizei stride); +GL_APICALL void GL_APIENTRY glMultiDrawElementsIndirectEXT (GLenum mode, GLenum type, const void *indirect, GLsizei drawcount, GLsizei stride); +#endif +#endif /* GL_EXT_multi_draw_indirect */ + +#ifndef GL_EXT_multisampled_compatibility +#define GL_EXT_multisampled_compatibility 1 +#define GL_MULTISAMPLE_EXT 0x809D +#define GL_SAMPLE_ALPHA_TO_ONE_EXT 0x809F +#endif /* GL_EXT_multisampled_compatibility */ + +#ifndef GL_EXT_multisampled_render_to_texture +#define GL_EXT_multisampled_render_to_texture 1 +#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_SAMPLES_EXT 0x8D6C +#define GL_RENDERBUFFER_SAMPLES_EXT 0x8CAB +#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_EXT 0x8D56 +#define GL_MAX_SAMPLES_EXT 0x8D57 +typedef void (GL_APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); +typedef void (GL_APIENTRYP PFNGLFRAMEBUFFERTEXTURE2DMULTISAMPLEEXTPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLsizei samples); +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glRenderbufferStorageMultisampleEXT (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); +GL_APICALL void GL_APIENTRY glFramebufferTexture2DMultisampleEXT (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLsizei samples); +#endif +#endif /* GL_EXT_multisampled_render_to_texture */ + +#ifndef GL_EXT_multisampled_render_to_texture2 +#define GL_EXT_multisampled_render_to_texture2 1 +#endif /* GL_EXT_multisampled_render_to_texture2 */ + +#ifndef GL_EXT_multiview_draw_buffers +#define GL_EXT_multiview_draw_buffers 1 +#define GL_COLOR_ATTACHMENT_EXT 0x90F0 +#define GL_MULTIVIEW_EXT 0x90F1 +#define GL_DRAW_BUFFER_EXT 0x0C01 +#define GL_READ_BUFFER_EXT 0x0C02 +#define GL_MAX_MULTIVIEW_BUFFERS_EXT 0x90F2 +typedef void (GL_APIENTRYP PFNGLREADBUFFERINDEXEDEXTPROC) (GLenum src, GLint index); +typedef void (GL_APIENTRYP PFNGLDRAWBUFFERSINDEXEDEXTPROC) (GLint n, const GLenum *location, const GLint *indices); +typedef void (GL_APIENTRYP PFNGLGETINTEGERI_VEXTPROC) (GLenum target, GLuint index, GLint *data); +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glReadBufferIndexedEXT (GLenum src, GLint index); +GL_APICALL void GL_APIENTRY glDrawBuffersIndexedEXT (GLint n, const GLenum *location, const GLint *indices); +GL_APICALL void GL_APIENTRY glGetIntegeri_vEXT (GLenum target, GLuint index, GLint *data); +#endif +#endif /* GL_EXT_multiview_draw_buffers */ + +#ifndef GL_EXT_multiview_tessellation_geometry_shader +#define GL_EXT_multiview_tessellation_geometry_shader 1 +#endif /* GL_EXT_multiview_tessellation_geometry_shader */ + +#ifndef GL_EXT_multiview_texture_multisample +#define GL_EXT_multiview_texture_multisample 1 +#endif /* GL_EXT_multiview_texture_multisample */ + +#ifndef GL_EXT_multiview_timer_query +#define GL_EXT_multiview_timer_query 1 +#endif /* GL_EXT_multiview_timer_query */ + +#ifndef GL_EXT_occlusion_query_boolean +#define GL_EXT_occlusion_query_boolean 1 +#define GL_ANY_SAMPLES_PASSED_EXT 0x8C2F +#define GL_ANY_SAMPLES_PASSED_CONSERVATIVE_EXT 0x8D6A +#endif /* GL_EXT_occlusion_query_boolean */ + +#ifndef GL_EXT_polygon_offset_clamp +#define GL_EXT_polygon_offset_clamp 1 +#define GL_POLYGON_OFFSET_CLAMP_EXT 0x8E1B +typedef void (GL_APIENTRYP PFNGLPOLYGONOFFSETCLAMPEXTPROC) (GLfloat factor, GLfloat units, GLfloat clamp); +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glPolygonOffsetClampEXT (GLfloat factor, GLfloat units, GLfloat clamp); +#endif +#endif /* GL_EXT_polygon_offset_clamp */ + +#ifndef GL_EXT_post_depth_coverage +#define GL_EXT_post_depth_coverage 1 +#endif /* GL_EXT_post_depth_coverage */ + +#ifndef GL_EXT_primitive_bounding_box +#define GL_EXT_primitive_bounding_box 1 +#define GL_PRIMITIVE_BOUNDING_BOX_EXT 0x92BE +typedef void (GL_APIENTRYP PFNGLPRIMITIVEBOUNDINGBOXEXTPROC) (GLfloat minX, GLfloat minY, GLfloat minZ, GLfloat minW, GLfloat maxX, GLfloat maxY, GLfloat maxZ, GLfloat maxW); +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glPrimitiveBoundingBoxEXT (GLfloat minX, GLfloat minY, GLfloat minZ, GLfloat minW, GLfloat maxX, GLfloat maxY, GLfloat maxZ, GLfloat maxW); +#endif +#endif /* GL_EXT_primitive_bounding_box */ + +#ifndef GL_EXT_protected_textures +#define GL_EXT_protected_textures 1 +#define GL_CONTEXT_FLAG_PROTECTED_CONTENT_BIT_EXT 0x00000010 +#define GL_TEXTURE_PROTECTED_EXT 0x8BFA +#endif /* GL_EXT_protected_textures */ + +#ifndef GL_EXT_pvrtc_sRGB +#define GL_EXT_pvrtc_sRGB 1 +#define GL_COMPRESSED_SRGB_PVRTC_2BPPV1_EXT 0x8A54 +#define GL_COMPRESSED_SRGB_PVRTC_4BPPV1_EXT 0x8A55 +#define GL_COMPRESSED_SRGB_ALPHA_PVRTC_2BPPV1_EXT 0x8A56 +#define GL_COMPRESSED_SRGB_ALPHA_PVRTC_4BPPV1_EXT 0x8A57 +#define GL_COMPRESSED_SRGB_ALPHA_PVRTC_2BPPV2_IMG 0x93F0 +#define GL_COMPRESSED_SRGB_ALPHA_PVRTC_4BPPV2_IMG 0x93F1 +#endif /* GL_EXT_pvrtc_sRGB */ + +#ifndef GL_EXT_raster_multisample +#define GL_EXT_raster_multisample 1 +#define GL_RASTER_MULTISAMPLE_EXT 0x9327 +#define GL_RASTER_SAMPLES_EXT 0x9328 +#define GL_MAX_RASTER_SAMPLES_EXT 0x9329 +#define GL_RASTER_FIXED_SAMPLE_LOCATIONS_EXT 0x932A +#define GL_MULTISAMPLE_RASTERIZATION_ALLOWED_EXT 0x932B +#define GL_EFFECTIVE_RASTER_SAMPLES_EXT 0x932C +typedef void (GL_APIENTRYP PFNGLRASTERSAMPLESEXTPROC) (GLuint samples, GLboolean fixedsamplelocations); +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glRasterSamplesEXT (GLuint samples, GLboolean fixedsamplelocations); +#endif +#endif /* GL_EXT_raster_multisample */ + +#ifndef GL_EXT_read_format_bgra +#define GL_EXT_read_format_bgra 1 +#define GL_UNSIGNED_SHORT_4_4_4_4_REV_EXT 0x8365 +#define GL_UNSIGNED_SHORT_1_5_5_5_REV_EXT 0x8366 +#endif /* GL_EXT_read_format_bgra */ + +#ifndef GL_EXT_render_snorm +#define GL_EXT_render_snorm 1 +#define GL_R8_SNORM 0x8F94 +#define GL_RG8_SNORM 0x8F95 +#define GL_RGBA8_SNORM 0x8F97 +#define GL_R16_SNORM_EXT 0x8F98 +#define GL_RG16_SNORM_EXT 0x8F99 +#define GL_RGBA16_SNORM_EXT 0x8F9B +#endif /* GL_EXT_render_snorm */ + +#ifndef GL_EXT_robustness +#define GL_EXT_robustness 1 +#define GL_GUILTY_CONTEXT_RESET_EXT 0x8253 +#define GL_INNOCENT_CONTEXT_RESET_EXT 0x8254 +#define GL_UNKNOWN_CONTEXT_RESET_EXT 0x8255 +#define GL_CONTEXT_ROBUST_ACCESS_EXT 0x90F3 +#define GL_RESET_NOTIFICATION_STRATEGY_EXT 0x8256 +#define GL_LOSE_CONTEXT_ON_RESET_EXT 0x8252 +#define GL_NO_RESET_NOTIFICATION_EXT 0x8261 +typedef GLenum (GL_APIENTRYP PFNGLGETGRAPHICSRESETSTATUSEXTPROC) (void); +typedef void (GL_APIENTRYP PFNGLREADNPIXELSEXTPROC) (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, void *data); +typedef void (GL_APIENTRYP PFNGLGETNUNIFORMFVEXTPROC) (GLuint program, GLint location, GLsizei bufSize, GLfloat *params); +typedef void (GL_APIENTRYP PFNGLGETNUNIFORMIVEXTPROC) (GLuint program, GLint location, GLsizei bufSize, GLint *params); +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL GLenum GL_APIENTRY glGetGraphicsResetStatusEXT (void); +GL_APICALL void GL_APIENTRY glReadnPixelsEXT (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, void *data); +GL_APICALL void GL_APIENTRY glGetnUniformfvEXT (GLuint program, GLint location, GLsizei bufSize, GLfloat *params); +GL_APICALL void GL_APIENTRY glGetnUniformivEXT (GLuint program, GLint location, GLsizei bufSize, GLint *params); +#endif +#endif /* GL_EXT_robustness */ + +#ifndef GL_EXT_sRGB +#define GL_EXT_sRGB 1 +#define GL_SRGB_EXT 0x8C40 +#define GL_SRGB_ALPHA_EXT 0x8C42 +#define GL_SRGB8_ALPHA8_EXT 0x8C43 +#define GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING_EXT 0x8210 +#endif /* GL_EXT_sRGB */ + +#ifndef GL_EXT_sRGB_write_control +#define GL_EXT_sRGB_write_control 1 +#define GL_FRAMEBUFFER_SRGB_EXT 0x8DB9 +#endif /* GL_EXT_sRGB_write_control */ + +#ifndef GL_EXT_semaphore +#define GL_EXT_semaphore 1 +#define GL_LAYOUT_GENERAL_EXT 0x958D +#define GL_LAYOUT_COLOR_ATTACHMENT_EXT 0x958E +#define GL_LAYOUT_DEPTH_STENCIL_ATTACHMENT_EXT 0x958F +#define GL_LAYOUT_DEPTH_STENCIL_READ_ONLY_EXT 0x9590 +#define GL_LAYOUT_SHADER_READ_ONLY_EXT 0x9591 +#define GL_LAYOUT_TRANSFER_SRC_EXT 0x9592 +#define GL_LAYOUT_TRANSFER_DST_EXT 0x9593 +#define GL_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_EXT 0x9530 +#define GL_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_EXT 0x9531 +typedef void (GL_APIENTRYP PFNGLGENSEMAPHORESEXTPROC) (GLsizei n, GLuint *semaphores); +typedef void (GL_APIENTRYP PFNGLDELETESEMAPHORESEXTPROC) (GLsizei n, const GLuint *semaphores); +typedef GLboolean (GL_APIENTRYP PFNGLISSEMAPHOREEXTPROC) (GLuint semaphore); +typedef void (GL_APIENTRYP PFNGLSEMAPHOREPARAMETERUI64VEXTPROC) (GLuint semaphore, GLenum pname, const GLuint64 *params); +typedef void (GL_APIENTRYP PFNGLGETSEMAPHOREPARAMETERUI64VEXTPROC) (GLuint semaphore, GLenum pname, GLuint64 *params); +typedef void (GL_APIENTRYP PFNGLWAITSEMAPHOREEXTPROC) (GLuint semaphore, GLuint numBufferBarriers, const GLuint *buffers, GLuint numTextureBarriers, const GLuint *textures, const GLenum *srcLayouts); +typedef void (GL_APIENTRYP PFNGLSIGNALSEMAPHOREEXTPROC) (GLuint semaphore, GLuint numBufferBarriers, const GLuint *buffers, GLuint numTextureBarriers, const GLuint *textures, const GLenum *dstLayouts); +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glGenSemaphoresEXT (GLsizei n, GLuint *semaphores); +GL_APICALL void GL_APIENTRY glDeleteSemaphoresEXT (GLsizei n, const GLuint *semaphores); +GL_APICALL GLboolean GL_APIENTRY glIsSemaphoreEXT (GLuint semaphore); +GL_APICALL void GL_APIENTRY glSemaphoreParameterui64vEXT (GLuint semaphore, GLenum pname, const GLuint64 *params); +GL_APICALL void GL_APIENTRY glGetSemaphoreParameterui64vEXT (GLuint semaphore, GLenum pname, GLuint64 *params); +GL_APICALL void GL_APIENTRY glWaitSemaphoreEXT (GLuint semaphore, GLuint numBufferBarriers, const GLuint *buffers, GLuint numTextureBarriers, const GLuint *textures, const GLenum *srcLayouts); +GL_APICALL void GL_APIENTRY glSignalSemaphoreEXT (GLuint semaphore, GLuint numBufferBarriers, const GLuint *buffers, GLuint numTextureBarriers, const GLuint *textures, const GLenum *dstLayouts); +#endif +#endif /* GL_EXT_semaphore */ + +#ifndef GL_EXT_semaphore_fd +#define GL_EXT_semaphore_fd 1 +typedef void (GL_APIENTRYP PFNGLIMPORTSEMAPHOREFDEXTPROC) (GLuint semaphore, GLenum handleType, GLint fd); +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glImportSemaphoreFdEXT (GLuint semaphore, GLenum handleType, GLint fd); +#endif +#endif /* GL_EXT_semaphore_fd */ + +#ifndef GL_EXT_semaphore_win32 +#define GL_EXT_semaphore_win32 1 +#define GL_HANDLE_TYPE_D3D12_FENCE_EXT 0x9594 +#define GL_D3D12_FENCE_VALUE_EXT 0x9595 +typedef void (GL_APIENTRYP PFNGLIMPORTSEMAPHOREWIN32HANDLEEXTPROC) (GLuint semaphore, GLenum handleType, void *handle); +typedef void (GL_APIENTRYP PFNGLIMPORTSEMAPHOREWIN32NAMEEXTPROC) (GLuint semaphore, GLenum handleType, const void *name); +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glImportSemaphoreWin32HandleEXT (GLuint semaphore, GLenum handleType, void *handle); +GL_APICALL void GL_APIENTRY glImportSemaphoreWin32NameEXT (GLuint semaphore, GLenum handleType, const void *name); +#endif +#endif /* GL_EXT_semaphore_win32 */ + +#ifndef GL_EXT_separate_depth_stencil +#define GL_EXT_separate_depth_stencil 1 +#endif /* GL_EXT_separate_depth_stencil */ + +#ifndef GL_EXT_separate_shader_objects +#define GL_EXT_separate_shader_objects 1 +#define GL_ACTIVE_PROGRAM_EXT 0x8259 +#define GL_VERTEX_SHADER_BIT_EXT 0x00000001 +#define GL_FRAGMENT_SHADER_BIT_EXT 0x00000002 +#define GL_ALL_SHADER_BITS_EXT 0xFFFFFFFF +#define GL_PROGRAM_SEPARABLE_EXT 0x8258 +#define GL_PROGRAM_PIPELINE_BINDING_EXT 0x825A +typedef void (GL_APIENTRYP PFNGLACTIVESHADERPROGRAMEXTPROC) (GLuint pipeline, GLuint program); +typedef void (GL_APIENTRYP PFNGLBINDPROGRAMPIPELINEEXTPROC) (GLuint pipeline); +typedef GLuint (GL_APIENTRYP PFNGLCREATESHADERPROGRAMVEXTPROC) (GLenum type, GLsizei count, const GLchar **strings); +typedef void (GL_APIENTRYP PFNGLDELETEPROGRAMPIPELINESEXTPROC) (GLsizei n, const GLuint *pipelines); +typedef void (GL_APIENTRYP PFNGLGENPROGRAMPIPELINESEXTPROC) (GLsizei n, GLuint *pipelines); +typedef void (GL_APIENTRYP PFNGLGETPROGRAMPIPELINEINFOLOGEXTPROC) (GLuint pipeline, GLsizei bufSize, GLsizei *length, GLchar *infoLog); +typedef void (GL_APIENTRYP PFNGLGETPROGRAMPIPELINEIVEXTPROC) (GLuint pipeline, GLenum pname, GLint *params); +typedef GLboolean (GL_APIENTRYP PFNGLISPROGRAMPIPELINEEXTPROC) (GLuint pipeline); +typedef void (GL_APIENTRYP PFNGLPROGRAMPARAMETERIEXTPROC) (GLuint program, GLenum pname, GLint value); +typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM1FEXTPROC) (GLuint program, GLint location, GLfloat v0); +typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM1FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); +typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM1IEXTPROC) (GLuint program, GLint location, GLint v0); +typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM1IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); +typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM2FEXTPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1); +typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM2FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); +typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM2IEXTPROC) (GLuint program, GLint location, GLint v0, GLint v1); +typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM2IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); +typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM3FEXTPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2); +typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM3FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); +typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM3IEXTPROC) (GLuint program, GLint location, GLint v0, GLint v1, GLint v2); +typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM3IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); +typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM4FEXTPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); +typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM4FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); +typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM4IEXTPROC) (GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3); +typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM4IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); +typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (GL_APIENTRYP PFNGLUSEPROGRAMSTAGESEXTPROC) (GLuint pipeline, GLbitfield stages, GLuint program); +typedef void (GL_APIENTRYP PFNGLVALIDATEPROGRAMPIPELINEEXTPROC) (GLuint pipeline); +typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM1UIEXTPROC) (GLuint program, GLint location, GLuint v0); +typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM2UIEXTPROC) (GLuint program, GLint location, GLuint v0, GLuint v1); +typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM3UIEXTPROC) (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2); +typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM4UIEXTPROC) (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); +typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM1UIVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value); +typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM2UIVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value); +typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM3UIVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value); +typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM4UIVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value); +typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X3FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X2FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X4FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X2FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X4FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X3FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glActiveShaderProgramEXT (GLuint pipeline, GLuint program); +GL_APICALL void GL_APIENTRY glBindProgramPipelineEXT (GLuint pipeline); +GL_APICALL GLuint GL_APIENTRY glCreateShaderProgramvEXT (GLenum type, GLsizei count, const GLchar **strings); +GL_APICALL void GL_APIENTRY glDeleteProgramPipelinesEXT (GLsizei n, const GLuint *pipelines); +GL_APICALL void GL_APIENTRY glGenProgramPipelinesEXT (GLsizei n, GLuint *pipelines); +GL_APICALL void GL_APIENTRY glGetProgramPipelineInfoLogEXT (GLuint pipeline, GLsizei bufSize, GLsizei *length, GLchar *infoLog); +GL_APICALL void GL_APIENTRY glGetProgramPipelineivEXT (GLuint pipeline, GLenum pname, GLint *params); +GL_APICALL GLboolean GL_APIENTRY glIsProgramPipelineEXT (GLuint pipeline); +GL_APICALL void GL_APIENTRY glProgramParameteriEXT (GLuint program, GLenum pname, GLint value); +GL_APICALL void GL_APIENTRY glProgramUniform1fEXT (GLuint program, GLint location, GLfloat v0); +GL_APICALL void GL_APIENTRY glProgramUniform1fvEXT (GLuint program, GLint location, GLsizei count, const GLfloat *value); +GL_APICALL void GL_APIENTRY glProgramUniform1iEXT (GLuint program, GLint location, GLint v0); +GL_APICALL void GL_APIENTRY glProgramUniform1ivEXT (GLuint program, GLint location, GLsizei count, const GLint *value); +GL_APICALL void GL_APIENTRY glProgramUniform2fEXT (GLuint program, GLint location, GLfloat v0, GLfloat v1); +GL_APICALL void GL_APIENTRY glProgramUniform2fvEXT (GLuint program, GLint location, GLsizei count, const GLfloat *value); +GL_APICALL void GL_APIENTRY glProgramUniform2iEXT (GLuint program, GLint location, GLint v0, GLint v1); +GL_APICALL void GL_APIENTRY glProgramUniform2ivEXT (GLuint program, GLint location, GLsizei count, const GLint *value); +GL_APICALL void GL_APIENTRY glProgramUniform3fEXT (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2); +GL_APICALL void GL_APIENTRY glProgramUniform3fvEXT (GLuint program, GLint location, GLsizei count, const GLfloat *value); +GL_APICALL void GL_APIENTRY glProgramUniform3iEXT (GLuint program, GLint location, GLint v0, GLint v1, GLint v2); +GL_APICALL void GL_APIENTRY glProgramUniform3ivEXT (GLuint program, GLint location, GLsizei count, const GLint *value); +GL_APICALL void GL_APIENTRY glProgramUniform4fEXT (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); +GL_APICALL void GL_APIENTRY glProgramUniform4fvEXT (GLuint program, GLint location, GLsizei count, const GLfloat *value); +GL_APICALL void GL_APIENTRY glProgramUniform4iEXT (GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3); +GL_APICALL void GL_APIENTRY glProgramUniform4ivEXT (GLuint program, GLint location, GLsizei count, const GLint *value); +GL_APICALL void GL_APIENTRY glProgramUniformMatrix2fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GL_APICALL void GL_APIENTRY glProgramUniformMatrix3fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GL_APICALL void GL_APIENTRY glProgramUniformMatrix4fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GL_APICALL void GL_APIENTRY glUseProgramStagesEXT (GLuint pipeline, GLbitfield stages, GLuint program); +GL_APICALL void GL_APIENTRY glValidateProgramPipelineEXT (GLuint pipeline); +GL_APICALL void GL_APIENTRY glProgramUniform1uiEXT (GLuint program, GLint location, GLuint v0); +GL_APICALL void GL_APIENTRY glProgramUniform2uiEXT (GLuint program, GLint location, GLuint v0, GLuint v1); +GL_APICALL void GL_APIENTRY glProgramUniform3uiEXT (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2); +GL_APICALL void GL_APIENTRY glProgramUniform4uiEXT (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); +GL_APICALL void GL_APIENTRY glProgramUniform1uivEXT (GLuint program, GLint location, GLsizei count, const GLuint *value); +GL_APICALL void GL_APIENTRY glProgramUniform2uivEXT (GLuint program, GLint location, GLsizei count, const GLuint *value); +GL_APICALL void GL_APIENTRY glProgramUniform3uivEXT (GLuint program, GLint location, GLsizei count, const GLuint *value); +GL_APICALL void GL_APIENTRY glProgramUniform4uivEXT (GLuint program, GLint location, GLsizei count, const GLuint *value); +GL_APICALL void GL_APIENTRY glProgramUniformMatrix2x3fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GL_APICALL void GL_APIENTRY glProgramUniformMatrix3x2fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GL_APICALL void GL_APIENTRY glProgramUniformMatrix2x4fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GL_APICALL void GL_APIENTRY glProgramUniformMatrix4x2fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GL_APICALL void GL_APIENTRY glProgramUniformMatrix3x4fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GL_APICALL void GL_APIENTRY glProgramUniformMatrix4x3fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +#endif +#endif /* GL_EXT_separate_shader_objects */ + +#ifndef GL_EXT_shader_framebuffer_fetch +#define GL_EXT_shader_framebuffer_fetch 1 +#define GL_FRAGMENT_SHADER_DISCARDS_SAMPLES_EXT 0x8A52 +#endif /* GL_EXT_shader_framebuffer_fetch */ + +#ifndef GL_EXT_shader_framebuffer_fetch_non_coherent +#define GL_EXT_shader_framebuffer_fetch_non_coherent 1 +typedef void (GL_APIENTRYP PFNGLFRAMEBUFFERFETCHBARRIEREXTPROC) (void); +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glFramebufferFetchBarrierEXT (void); +#endif +#endif /* GL_EXT_shader_framebuffer_fetch_non_coherent */ + +#ifndef GL_EXT_shader_group_vote +#define GL_EXT_shader_group_vote 1 +#endif /* GL_EXT_shader_group_vote */ + +#ifndef GL_EXT_shader_implicit_conversions +#define GL_EXT_shader_implicit_conversions 1 +#endif /* GL_EXT_shader_implicit_conversions */ + +#ifndef GL_EXT_shader_integer_mix +#define GL_EXT_shader_integer_mix 1 +#endif /* GL_EXT_shader_integer_mix */ + +#ifndef GL_EXT_shader_io_blocks +#define GL_EXT_shader_io_blocks 1 +#endif /* GL_EXT_shader_io_blocks */ + +#ifndef GL_EXT_shader_non_constant_global_initializers +#define GL_EXT_shader_non_constant_global_initializers 1 +#endif /* GL_EXT_shader_non_constant_global_initializers */ + +#ifndef GL_EXT_shader_pixel_local_storage +#define GL_EXT_shader_pixel_local_storage 1 +#define GL_MAX_SHADER_PIXEL_LOCAL_STORAGE_FAST_SIZE_EXT 0x8F63 +#define GL_MAX_SHADER_PIXEL_LOCAL_STORAGE_SIZE_EXT 0x8F67 +#define GL_SHADER_PIXEL_LOCAL_STORAGE_EXT 0x8F64 +#endif /* GL_EXT_shader_pixel_local_storage */ + +#ifndef GL_EXT_shader_pixel_local_storage2 +#define GL_EXT_shader_pixel_local_storage2 1 +#define GL_MAX_SHADER_COMBINED_LOCAL_STORAGE_FAST_SIZE_EXT 0x9650 +#define GL_MAX_SHADER_COMBINED_LOCAL_STORAGE_SIZE_EXT 0x9651 +#define GL_FRAMEBUFFER_INCOMPLETE_INSUFFICIENT_SHADER_COMBINED_LOCAL_STORAGE_EXT 0x9652 +typedef void (GL_APIENTRYP PFNGLFRAMEBUFFERPIXELLOCALSTORAGESIZEEXTPROC) (GLuint target, GLsizei size); +typedef GLsizei (GL_APIENTRYP PFNGLGETFRAMEBUFFERPIXELLOCALSTORAGESIZEEXTPROC) (GLuint target); +typedef void (GL_APIENTRYP PFNGLCLEARPIXELLOCALSTORAGEUIEXTPROC) (GLsizei offset, GLsizei n, const GLuint *values); +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glFramebufferPixelLocalStorageSizeEXT (GLuint target, GLsizei size); +GL_APICALL GLsizei GL_APIENTRY glGetFramebufferPixelLocalStorageSizeEXT (GLuint target); +GL_APICALL void GL_APIENTRY glClearPixelLocalStorageuiEXT (GLsizei offset, GLsizei n, const GLuint *values); +#endif +#endif /* GL_EXT_shader_pixel_local_storage2 */ + +#ifndef GL_EXT_shader_samples_identical +#define GL_EXT_shader_samples_identical 1 +#endif /* GL_EXT_shader_samples_identical */ + +#ifndef GL_EXT_shader_texture_lod +#define GL_EXT_shader_texture_lod 1 +#endif /* GL_EXT_shader_texture_lod */ + +#ifndef GL_EXT_shadow_samplers +#define GL_EXT_shadow_samplers 1 +#define GL_TEXTURE_COMPARE_MODE_EXT 0x884C +#define GL_TEXTURE_COMPARE_FUNC_EXT 0x884D +#define GL_COMPARE_REF_TO_TEXTURE_EXT 0x884E +#define GL_SAMPLER_2D_SHADOW_EXT 0x8B62 +#endif /* GL_EXT_shadow_samplers */ + +#ifndef GL_EXT_sparse_texture +#define GL_EXT_sparse_texture 1 +#define GL_TEXTURE_SPARSE_EXT 0x91A6 +#define GL_VIRTUAL_PAGE_SIZE_INDEX_EXT 0x91A7 +#define GL_NUM_SPARSE_LEVELS_EXT 0x91AA +#define GL_NUM_VIRTUAL_PAGE_SIZES_EXT 0x91A8 +#define GL_VIRTUAL_PAGE_SIZE_X_EXT 0x9195 +#define GL_VIRTUAL_PAGE_SIZE_Y_EXT 0x9196 +#define GL_VIRTUAL_PAGE_SIZE_Z_EXT 0x9197 +#define GL_TEXTURE_2D_ARRAY 0x8C1A +#define GL_TEXTURE_3D 0x806F +#define GL_MAX_SPARSE_TEXTURE_SIZE_EXT 0x9198 +#define GL_MAX_SPARSE_3D_TEXTURE_SIZE_EXT 0x9199 +#define GL_MAX_SPARSE_ARRAY_TEXTURE_LAYERS_EXT 0x919A +#define GL_SPARSE_TEXTURE_FULL_ARRAY_CUBE_MIPMAPS_EXT 0x91A9 +typedef void (GL_APIENTRYP PFNGLTEXPAGECOMMITMENTEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLboolean commit); +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glTexPageCommitmentEXT (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLboolean commit); +#endif +#endif /* GL_EXT_sparse_texture */ + +#ifndef GL_EXT_sparse_texture2 +#define GL_EXT_sparse_texture2 1 +#endif /* GL_EXT_sparse_texture2 */ + +#ifndef GL_EXT_tessellation_point_size +#define GL_EXT_tessellation_point_size 1 +#endif /* GL_EXT_tessellation_point_size */ + +#ifndef GL_EXT_tessellation_shader +#define GL_EXT_tessellation_shader 1 +#define GL_PATCHES_EXT 0x000E +#define GL_PATCH_VERTICES_EXT 0x8E72 +#define GL_TESS_CONTROL_OUTPUT_VERTICES_EXT 0x8E75 +#define GL_TESS_GEN_MODE_EXT 0x8E76 +#define GL_TESS_GEN_SPACING_EXT 0x8E77 +#define GL_TESS_GEN_VERTEX_ORDER_EXT 0x8E78 +#define GL_TESS_GEN_POINT_MODE_EXT 0x8E79 +#define GL_ISOLINES_EXT 0x8E7A +#define GL_QUADS_EXT 0x0007 +#define GL_FRACTIONAL_ODD_EXT 0x8E7B +#define GL_FRACTIONAL_EVEN_EXT 0x8E7C +#define GL_MAX_PATCH_VERTICES_EXT 0x8E7D +#define GL_MAX_TESS_GEN_LEVEL_EXT 0x8E7E +#define GL_MAX_TESS_CONTROL_UNIFORM_COMPONENTS_EXT 0x8E7F +#define GL_MAX_TESS_EVALUATION_UNIFORM_COMPONENTS_EXT 0x8E80 +#define GL_MAX_TESS_CONTROL_TEXTURE_IMAGE_UNITS_EXT 0x8E81 +#define GL_MAX_TESS_EVALUATION_TEXTURE_IMAGE_UNITS_EXT 0x8E82 +#define GL_MAX_TESS_CONTROL_OUTPUT_COMPONENTS_EXT 0x8E83 +#define GL_MAX_TESS_PATCH_COMPONENTS_EXT 0x8E84 +#define GL_MAX_TESS_CONTROL_TOTAL_OUTPUT_COMPONENTS_EXT 0x8E85 +#define GL_MAX_TESS_EVALUATION_OUTPUT_COMPONENTS_EXT 0x8E86 +#define GL_MAX_TESS_CONTROL_UNIFORM_BLOCKS_EXT 0x8E89 +#define GL_MAX_TESS_EVALUATION_UNIFORM_BLOCKS_EXT 0x8E8A +#define GL_MAX_TESS_CONTROL_INPUT_COMPONENTS_EXT 0x886C +#define GL_MAX_TESS_EVALUATION_INPUT_COMPONENTS_EXT 0x886D +#define GL_MAX_COMBINED_TESS_CONTROL_UNIFORM_COMPONENTS_EXT 0x8E1E +#define GL_MAX_COMBINED_TESS_EVALUATION_UNIFORM_COMPONENTS_EXT 0x8E1F +#define GL_MAX_TESS_CONTROL_ATOMIC_COUNTER_BUFFERS_EXT 0x92CD +#define GL_MAX_TESS_EVALUATION_ATOMIC_COUNTER_BUFFERS_EXT 0x92CE +#define GL_MAX_TESS_CONTROL_ATOMIC_COUNTERS_EXT 0x92D3 +#define GL_MAX_TESS_EVALUATION_ATOMIC_COUNTERS_EXT 0x92D4 +#define GL_MAX_TESS_CONTROL_IMAGE_UNIFORMS_EXT 0x90CB +#define GL_MAX_TESS_EVALUATION_IMAGE_UNIFORMS_EXT 0x90CC +#define GL_MAX_TESS_CONTROL_SHADER_STORAGE_BLOCKS_EXT 0x90D8 +#define GL_MAX_TESS_EVALUATION_SHADER_STORAGE_BLOCKS_EXT 0x90D9 +#define GL_PRIMITIVE_RESTART_FOR_PATCHES_SUPPORTED 0x8221 +#define GL_IS_PER_PATCH_EXT 0x92E7 +#define GL_REFERENCED_BY_TESS_CONTROL_SHADER_EXT 0x9307 +#define GL_REFERENCED_BY_TESS_EVALUATION_SHADER_EXT 0x9308 +#define GL_TESS_CONTROL_SHADER_EXT 0x8E88 +#define GL_TESS_EVALUATION_SHADER_EXT 0x8E87 +#define GL_TESS_CONTROL_SHADER_BIT_EXT 0x00000008 +#define GL_TESS_EVALUATION_SHADER_BIT_EXT 0x00000010 +typedef void (GL_APIENTRYP PFNGLPATCHPARAMETERIEXTPROC) (GLenum pname, GLint value); +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glPatchParameteriEXT (GLenum pname, GLint value); +#endif +#endif /* GL_EXT_tessellation_shader */ + +#ifndef GL_EXT_texture_border_clamp +#define GL_EXT_texture_border_clamp 1 +#define GL_TEXTURE_BORDER_COLOR_EXT 0x1004 +#define GL_CLAMP_TO_BORDER_EXT 0x812D +typedef void (GL_APIENTRYP PFNGLTEXPARAMETERIIVEXTPROC) (GLenum target, GLenum pname, const GLint *params); +typedef void (GL_APIENTRYP PFNGLTEXPARAMETERIUIVEXTPROC) (GLenum target, GLenum pname, const GLuint *params); +typedef void (GL_APIENTRYP PFNGLGETTEXPARAMETERIIVEXTPROC) (GLenum target, GLenum pname, GLint *params); +typedef void (GL_APIENTRYP PFNGLGETTEXPARAMETERIUIVEXTPROC) (GLenum target, GLenum pname, GLuint *params); +typedef void (GL_APIENTRYP PFNGLSAMPLERPARAMETERIIVEXTPROC) (GLuint sampler, GLenum pname, const GLint *param); +typedef void (GL_APIENTRYP PFNGLSAMPLERPARAMETERIUIVEXTPROC) (GLuint sampler, GLenum pname, const GLuint *param); +typedef void (GL_APIENTRYP PFNGLGETSAMPLERPARAMETERIIVEXTPROC) (GLuint sampler, GLenum pname, GLint *params); +typedef void (GL_APIENTRYP PFNGLGETSAMPLERPARAMETERIUIVEXTPROC) (GLuint sampler, GLenum pname, GLuint *params); +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glTexParameterIivEXT (GLenum target, GLenum pname, const GLint *params); +GL_APICALL void GL_APIENTRY glTexParameterIuivEXT (GLenum target, GLenum pname, const GLuint *params); +GL_APICALL void GL_APIENTRY glGetTexParameterIivEXT (GLenum target, GLenum pname, GLint *params); +GL_APICALL void GL_APIENTRY glGetTexParameterIuivEXT (GLenum target, GLenum pname, GLuint *params); +GL_APICALL void GL_APIENTRY glSamplerParameterIivEXT (GLuint sampler, GLenum pname, const GLint *param); +GL_APICALL void GL_APIENTRY glSamplerParameterIuivEXT (GLuint sampler, GLenum pname, const GLuint *param); +GL_APICALL void GL_APIENTRY glGetSamplerParameterIivEXT (GLuint sampler, GLenum pname, GLint *params); +GL_APICALL void GL_APIENTRY glGetSamplerParameterIuivEXT (GLuint sampler, GLenum pname, GLuint *params); +#endif +#endif /* GL_EXT_texture_border_clamp */ + +#ifndef GL_EXT_texture_buffer +#define GL_EXT_texture_buffer 1 +#define GL_TEXTURE_BUFFER_EXT 0x8C2A +#define GL_TEXTURE_BUFFER_BINDING_EXT 0x8C2A +#define GL_MAX_TEXTURE_BUFFER_SIZE_EXT 0x8C2B +#define GL_TEXTURE_BINDING_BUFFER_EXT 0x8C2C +#define GL_TEXTURE_BUFFER_DATA_STORE_BINDING_EXT 0x8C2D +#define GL_TEXTURE_BUFFER_OFFSET_ALIGNMENT_EXT 0x919F +#define GL_SAMPLER_BUFFER_EXT 0x8DC2 +#define GL_INT_SAMPLER_BUFFER_EXT 0x8DD0 +#define GL_UNSIGNED_INT_SAMPLER_BUFFER_EXT 0x8DD8 +#define GL_IMAGE_BUFFER_EXT 0x9051 +#define GL_INT_IMAGE_BUFFER_EXT 0x905C +#define GL_UNSIGNED_INT_IMAGE_BUFFER_EXT 0x9067 +#define GL_TEXTURE_BUFFER_OFFSET_EXT 0x919D +#define GL_TEXTURE_BUFFER_SIZE_EXT 0x919E +typedef void (GL_APIENTRYP PFNGLTEXBUFFEREXTPROC) (GLenum target, GLenum internalformat, GLuint buffer); +typedef void (GL_APIENTRYP PFNGLTEXBUFFERRANGEEXTPROC) (GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size); +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glTexBufferEXT (GLenum target, GLenum internalformat, GLuint buffer); +GL_APICALL void GL_APIENTRY glTexBufferRangeEXT (GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size); +#endif +#endif /* GL_EXT_texture_buffer */ + +#ifndef GL_EXT_texture_compression_astc_decode_mode +#define GL_EXT_texture_compression_astc_decode_mode 1 +#define GL_TEXTURE_ASTC_DECODE_PRECISION_EXT 0x8F69 +#endif /* GL_EXT_texture_compression_astc_decode_mode */ + +#ifndef GL_EXT_texture_compression_bptc +#define GL_EXT_texture_compression_bptc 1 +#define GL_COMPRESSED_RGBA_BPTC_UNORM_EXT 0x8E8C +#define GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM_EXT 0x8E8D +#define GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT_EXT 0x8E8E +#define GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_EXT 0x8E8F +#endif /* GL_EXT_texture_compression_bptc */ + +#ifndef GL_EXT_texture_compression_dxt1 +#define GL_EXT_texture_compression_dxt1 1 +#define GL_COMPRESSED_RGB_S3TC_DXT1_EXT 0x83F0 +#define GL_COMPRESSED_RGBA_S3TC_DXT1_EXT 0x83F1 +#endif /* GL_EXT_texture_compression_dxt1 */ + +#ifndef GL_EXT_texture_compression_rgtc +#define GL_EXT_texture_compression_rgtc 1 +#define GL_COMPRESSED_RED_RGTC1_EXT 0x8DBB +#define GL_COMPRESSED_SIGNED_RED_RGTC1_EXT 0x8DBC +#define GL_COMPRESSED_RED_GREEN_RGTC2_EXT 0x8DBD +#define GL_COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT 0x8DBE +#endif /* GL_EXT_texture_compression_rgtc */ + +#ifndef GL_EXT_texture_compression_s3tc +#define GL_EXT_texture_compression_s3tc 1 +#define GL_COMPRESSED_RGBA_S3TC_DXT3_EXT 0x83F2 +#define GL_COMPRESSED_RGBA_S3TC_DXT5_EXT 0x83F3 +#endif /* GL_EXT_texture_compression_s3tc */ + +#ifndef GL_EXT_texture_compression_s3tc_srgb +#define GL_EXT_texture_compression_s3tc_srgb 1 +#define GL_COMPRESSED_SRGB_S3TC_DXT1_EXT 0x8C4C +#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT 0x8C4D +#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT 0x8C4E +#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT 0x8C4F +#endif /* GL_EXT_texture_compression_s3tc_srgb */ + +#ifndef GL_EXT_texture_cube_map_array +#define GL_EXT_texture_cube_map_array 1 +#define GL_TEXTURE_CUBE_MAP_ARRAY_EXT 0x9009 +#define GL_TEXTURE_BINDING_CUBE_MAP_ARRAY_EXT 0x900A +#define GL_SAMPLER_CUBE_MAP_ARRAY_EXT 0x900C +#define GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW_EXT 0x900D +#define GL_INT_SAMPLER_CUBE_MAP_ARRAY_EXT 0x900E +#define GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY_EXT 0x900F +#define GL_IMAGE_CUBE_MAP_ARRAY_EXT 0x9054 +#define GL_INT_IMAGE_CUBE_MAP_ARRAY_EXT 0x905F +#define GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY_EXT 0x906A +#endif /* GL_EXT_texture_cube_map_array */ + +#ifndef GL_EXT_texture_filter_anisotropic +#define GL_EXT_texture_filter_anisotropic 1 +#define GL_TEXTURE_MAX_ANISOTROPY_EXT 0x84FE +#define GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT 0x84FF +#endif /* GL_EXT_texture_filter_anisotropic */ + +#ifndef GL_EXT_texture_filter_minmax +#define GL_EXT_texture_filter_minmax 1 +#define GL_TEXTURE_REDUCTION_MODE_EXT 0x9366 +#define GL_WEIGHTED_AVERAGE_EXT 0x9367 +#endif /* GL_EXT_texture_filter_minmax */ + +#ifndef GL_EXT_texture_format_BGRA8888 +#define GL_EXT_texture_format_BGRA8888 1 +#endif /* GL_EXT_texture_format_BGRA8888 */ + +#ifndef GL_EXT_texture_format_sRGB_override +#define GL_EXT_texture_format_sRGB_override 1 +#define GL_TEXTURE_FORMAT_SRGB_OVERRIDE_EXT 0x8FBF +#endif /* GL_EXT_texture_format_sRGB_override */ + +#ifndef GL_EXT_texture_mirror_clamp_to_edge +#define GL_EXT_texture_mirror_clamp_to_edge 1 +#define GL_MIRROR_CLAMP_TO_EDGE_EXT 0x8743 +#endif /* GL_EXT_texture_mirror_clamp_to_edge */ + +#ifndef GL_EXT_texture_norm16 +#define GL_EXT_texture_norm16 1 +#define GL_R16_EXT 0x822A +#define GL_RG16_EXT 0x822C +#define GL_RGBA16_EXT 0x805B +#define GL_RGB16_EXT 0x8054 +#define GL_RGB16_SNORM_EXT 0x8F9A +#endif /* GL_EXT_texture_norm16 */ + +#ifndef GL_EXT_texture_query_lod +#define GL_EXT_texture_query_lod 1 +#endif /* GL_EXT_texture_query_lod */ + +#ifndef GL_EXT_texture_rg +#define GL_EXT_texture_rg 1 +#define GL_RED_EXT 0x1903 +#define GL_RG_EXT 0x8227 +#define GL_R8_EXT 0x8229 +#define GL_RG8_EXT 0x822B +#endif /* GL_EXT_texture_rg */ + +#ifndef GL_EXT_texture_sRGB_R8 +#define GL_EXT_texture_sRGB_R8 1 +#define GL_SR8_EXT 0x8FBD +#endif /* GL_EXT_texture_sRGB_R8 */ + +#ifndef GL_EXT_texture_sRGB_RG8 +#define GL_EXT_texture_sRGB_RG8 1 +#define GL_SRG8_EXT 0x8FBE +#endif /* GL_EXT_texture_sRGB_RG8 */ + +#ifndef GL_EXT_texture_sRGB_decode +#define GL_EXT_texture_sRGB_decode 1 +#define GL_TEXTURE_SRGB_DECODE_EXT 0x8A48 +#define GL_DECODE_EXT 0x8A49 +#define GL_SKIP_DECODE_EXT 0x8A4A +#endif /* GL_EXT_texture_sRGB_decode */ + +#ifndef GL_EXT_texture_shadow_lod +#define GL_EXT_texture_shadow_lod 1 +#endif /* GL_EXT_texture_shadow_lod */ + +#ifndef GL_EXT_texture_storage +#define GL_EXT_texture_storage 1 +#define GL_TEXTURE_IMMUTABLE_FORMAT_EXT 0x912F +#define GL_ALPHA8_EXT 0x803C +#define GL_LUMINANCE8_EXT 0x8040 +#define GL_LUMINANCE8_ALPHA8_EXT 0x8045 +#define GL_RGBA32F_EXT 0x8814 +#define GL_RGB32F_EXT 0x8815 +#define GL_ALPHA32F_EXT 0x8816 +#define GL_LUMINANCE32F_EXT 0x8818 +#define GL_LUMINANCE_ALPHA32F_EXT 0x8819 +#define GL_ALPHA16F_EXT 0x881C +#define GL_LUMINANCE16F_EXT 0x881E +#define GL_LUMINANCE_ALPHA16F_EXT 0x881F +#define GL_R32F_EXT 0x822E +#define GL_RG32F_EXT 0x8230 +typedef void (GL_APIENTRYP PFNGLTEXSTORAGE1DEXTPROC) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width); +typedef void (GL_APIENTRYP PFNGLTEXSTORAGE2DEXTPROC) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); +typedef void (GL_APIENTRYP PFNGLTEXSTORAGE3DEXTPROC) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); +typedef void (GL_APIENTRYP PFNGLTEXTURESTORAGE1DEXTPROC) (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width); +typedef void (GL_APIENTRYP PFNGLTEXTURESTORAGE2DEXTPROC) (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); +typedef void (GL_APIENTRYP PFNGLTEXTURESTORAGE3DEXTPROC) (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glTexStorage1DEXT (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width); +GL_APICALL void GL_APIENTRY glTexStorage2DEXT (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); +GL_APICALL void GL_APIENTRY glTexStorage3DEXT (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); +GL_APICALL void GL_APIENTRY glTextureStorage1DEXT (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width); +GL_APICALL void GL_APIENTRY glTextureStorage2DEXT (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); +GL_APICALL void GL_APIENTRY glTextureStorage3DEXT (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); +#endif +#endif /* GL_EXT_texture_storage */ + +#ifndef GL_EXT_texture_storage_compression +#define GL_EXT_texture_storage_compression 1 +#define GL_NUM_SURFACE_COMPRESSION_FIXED_RATES_EXT 0x8F6E +#define GL_SURFACE_COMPRESSION_FIXED_RATE_1BPC_EXT 0x96C4 +#define GL_SURFACE_COMPRESSION_FIXED_RATE_2BPC_EXT 0x96C5 +#define GL_SURFACE_COMPRESSION_FIXED_RATE_3BPC_EXT 0x96C6 +#define GL_SURFACE_COMPRESSION_FIXED_RATE_4BPC_EXT 0x96C7 +#define GL_SURFACE_COMPRESSION_FIXED_RATE_5BPC_EXT 0x96C8 +#define GL_SURFACE_COMPRESSION_FIXED_RATE_6BPC_EXT 0x96C9 +#define GL_SURFACE_COMPRESSION_FIXED_RATE_7BPC_EXT 0x96CA +#define GL_SURFACE_COMPRESSION_FIXED_RATE_8BPC_EXT 0x96CB +#define GL_SURFACE_COMPRESSION_FIXED_RATE_9BPC_EXT 0x96CC +#define GL_SURFACE_COMPRESSION_FIXED_RATE_10BPC_EXT 0x96CD +#define GL_SURFACE_COMPRESSION_FIXED_RATE_11BPC_EXT 0x96CE +#define GL_SURFACE_COMPRESSION_FIXED_RATE_12BPC_EXT 0x96CF +typedef void (GL_APIENTRYP PFNGLTEXSTORAGEATTRIBS2DEXTPROC) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, const GLint* attrib_list); +typedef void (GL_APIENTRYP PFNGLTEXSTORAGEATTRIBS3DEXTPROC) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, const GLint* attrib_list); +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glTexStorageAttribs2DEXT (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, const GLint* attrib_list); +GL_APICALL void GL_APIENTRY glTexStorageAttribs3DEXT (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, const GLint* attrib_list); +#endif +#endif /* GL_EXT_texture_storage_compression */ + +#ifndef GL_EXT_texture_type_2_10_10_10_REV +#define GL_EXT_texture_type_2_10_10_10_REV 1 +#define GL_UNSIGNED_INT_2_10_10_10_REV_EXT 0x8368 +#endif /* GL_EXT_texture_type_2_10_10_10_REV */ + +#ifndef GL_EXT_texture_view +#define GL_EXT_texture_view 1 +#define GL_TEXTURE_VIEW_MIN_LEVEL_EXT 0x82DB +#define GL_TEXTURE_VIEW_NUM_LEVELS_EXT 0x82DC +#define GL_TEXTURE_VIEW_MIN_LAYER_EXT 0x82DD +#define GL_TEXTURE_VIEW_NUM_LAYERS_EXT 0x82DE +typedef void (GL_APIENTRYP PFNGLTEXTUREVIEWEXTPROC) (GLuint texture, GLenum target, GLuint origtexture, GLenum internalformat, GLuint minlevel, GLuint numlevels, GLuint minlayer, GLuint numlayers); +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glTextureViewEXT (GLuint texture, GLenum target, GLuint origtexture, GLenum internalformat, GLuint minlevel, GLuint numlevels, GLuint minlayer, GLuint numlayers); +#endif +#endif /* GL_EXT_texture_view */ + +#ifndef GL_EXT_unpack_subimage +#define GL_EXT_unpack_subimage 1 +#define GL_UNPACK_ROW_LENGTH_EXT 0x0CF2 +#define GL_UNPACK_SKIP_ROWS_EXT 0x0CF3 +#define GL_UNPACK_SKIP_PIXELS_EXT 0x0CF4 +#endif /* GL_EXT_unpack_subimage */ + +#ifndef GL_EXT_win32_keyed_mutex +#define GL_EXT_win32_keyed_mutex 1 +typedef GLboolean (GL_APIENTRYP PFNGLACQUIREKEYEDMUTEXWIN32EXTPROC) (GLuint memory, GLuint64 key, GLuint timeout); +typedef GLboolean (GL_APIENTRYP PFNGLRELEASEKEYEDMUTEXWIN32EXTPROC) (GLuint memory, GLuint64 key); +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL GLboolean GL_APIENTRY glAcquireKeyedMutexWin32EXT (GLuint memory, GLuint64 key, GLuint timeout); +GL_APICALL GLboolean GL_APIENTRY glReleaseKeyedMutexWin32EXT (GLuint memory, GLuint64 key); +#endif +#endif /* GL_EXT_win32_keyed_mutex */ + +#ifndef GL_EXT_window_rectangles +#define GL_EXT_window_rectangles 1 +#define GL_INCLUSIVE_EXT 0x8F10 +#define GL_EXCLUSIVE_EXT 0x8F11 +#define GL_WINDOW_RECTANGLE_EXT 0x8F12 +#define GL_WINDOW_RECTANGLE_MODE_EXT 0x8F13 +#define GL_MAX_WINDOW_RECTANGLES_EXT 0x8F14 +#define GL_NUM_WINDOW_RECTANGLES_EXT 0x8F15 +typedef void (GL_APIENTRYP PFNGLWINDOWRECTANGLESEXTPROC) (GLenum mode, GLsizei count, const GLint *box); +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glWindowRectanglesEXT (GLenum mode, GLsizei count, const GLint *box); +#endif +#endif /* GL_EXT_window_rectangles */ + +#ifndef GL_FJ_shader_binary_GCCSO +#define GL_FJ_shader_binary_GCCSO 1 +#define GL_GCCSO_SHADER_BINARY_FJ 0x9260 +#endif /* GL_FJ_shader_binary_GCCSO */ + +#ifndef GL_IMG_bindless_texture +#define GL_IMG_bindless_texture 1 +typedef GLuint64 (GL_APIENTRYP PFNGLGETTEXTUREHANDLEIMGPROC) (GLuint texture); +typedef GLuint64 (GL_APIENTRYP PFNGLGETTEXTURESAMPLERHANDLEIMGPROC) (GLuint texture, GLuint sampler); +typedef void (GL_APIENTRYP PFNGLUNIFORMHANDLEUI64IMGPROC) (GLint location, GLuint64 value); +typedef void (GL_APIENTRYP PFNGLUNIFORMHANDLEUI64VIMGPROC) (GLint location, GLsizei count, const GLuint64 *value); +typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORMHANDLEUI64IMGPROC) (GLuint program, GLint location, GLuint64 value); +typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORMHANDLEUI64VIMGPROC) (GLuint program, GLint location, GLsizei count, const GLuint64 *values); +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL GLuint64 GL_APIENTRY glGetTextureHandleIMG (GLuint texture); +GL_APICALL GLuint64 GL_APIENTRY glGetTextureSamplerHandleIMG (GLuint texture, GLuint sampler); +GL_APICALL void GL_APIENTRY glUniformHandleui64IMG (GLint location, GLuint64 value); +GL_APICALL void GL_APIENTRY glUniformHandleui64vIMG (GLint location, GLsizei count, const GLuint64 *value); +GL_APICALL void GL_APIENTRY glProgramUniformHandleui64IMG (GLuint program, GLint location, GLuint64 value); +GL_APICALL void GL_APIENTRY glProgramUniformHandleui64vIMG (GLuint program, GLint location, GLsizei count, const GLuint64 *values); +#endif +#endif /* GL_IMG_bindless_texture */ + +#ifndef GL_IMG_framebuffer_downsample +#define GL_IMG_framebuffer_downsample 1 +#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_AND_DOWNSAMPLE_IMG 0x913C +#define GL_NUM_DOWNSAMPLE_SCALES_IMG 0x913D +#define GL_DOWNSAMPLE_SCALES_IMG 0x913E +#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_SCALE_IMG 0x913F +typedef void (GL_APIENTRYP PFNGLFRAMEBUFFERTEXTURE2DDOWNSAMPLEIMGPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint xscale, GLint yscale); +typedef void (GL_APIENTRYP PFNGLFRAMEBUFFERTEXTURELAYERDOWNSAMPLEIMGPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer, GLint xscale, GLint yscale); +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glFramebufferTexture2DDownsampleIMG (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint xscale, GLint yscale); +GL_APICALL void GL_APIENTRY glFramebufferTextureLayerDownsampleIMG (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer, GLint xscale, GLint yscale); +#endif +#endif /* GL_IMG_framebuffer_downsample */ + +#ifndef GL_IMG_multisampled_render_to_texture +#define GL_IMG_multisampled_render_to_texture 1 +#define GL_RENDERBUFFER_SAMPLES_IMG 0x9133 +#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_IMG 0x9134 +#define GL_MAX_SAMPLES_IMG 0x9135 +#define GL_TEXTURE_SAMPLES_IMG 0x9136 +typedef void (GL_APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLEIMGPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); +typedef void (GL_APIENTRYP PFNGLFRAMEBUFFERTEXTURE2DMULTISAMPLEIMGPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLsizei samples); +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glRenderbufferStorageMultisampleIMG (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); +GL_APICALL void GL_APIENTRY glFramebufferTexture2DMultisampleIMG (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLsizei samples); +#endif +#endif /* GL_IMG_multisampled_render_to_texture */ + +#ifndef GL_IMG_program_binary +#define GL_IMG_program_binary 1 +#define GL_SGX_PROGRAM_BINARY_IMG 0x9130 +#endif /* GL_IMG_program_binary */ + +#ifndef GL_IMG_read_format +#define GL_IMG_read_format 1 +#define GL_BGRA_IMG 0x80E1 +#define GL_UNSIGNED_SHORT_4_4_4_4_REV_IMG 0x8365 +#endif /* GL_IMG_read_format */ + +#ifndef GL_IMG_shader_binary +#define GL_IMG_shader_binary 1 +#define GL_SGX_BINARY_IMG 0x8C0A +#endif /* GL_IMG_shader_binary */ + +#ifndef GL_IMG_texture_compression_pvrtc +#define GL_IMG_texture_compression_pvrtc 1 +#define GL_COMPRESSED_RGB_PVRTC_4BPPV1_IMG 0x8C00 +#define GL_COMPRESSED_RGB_PVRTC_2BPPV1_IMG 0x8C01 +#define GL_COMPRESSED_RGBA_PVRTC_4BPPV1_IMG 0x8C02 +#define GL_COMPRESSED_RGBA_PVRTC_2BPPV1_IMG 0x8C03 +#endif /* GL_IMG_texture_compression_pvrtc */ + +#ifndef GL_IMG_texture_compression_pvrtc2 +#define GL_IMG_texture_compression_pvrtc2 1 +#define GL_COMPRESSED_RGBA_PVRTC_2BPPV2_IMG 0x9137 +#define GL_COMPRESSED_RGBA_PVRTC_4BPPV2_IMG 0x9138 +#endif /* GL_IMG_texture_compression_pvrtc2 */ + +#ifndef GL_IMG_texture_filter_cubic +#define GL_IMG_texture_filter_cubic 1 +#define GL_CUBIC_IMG 0x9139 +#define GL_CUBIC_MIPMAP_NEAREST_IMG 0x913A +#define GL_CUBIC_MIPMAP_LINEAR_IMG 0x913B +#endif /* GL_IMG_texture_filter_cubic */ + +#ifndef GL_INTEL_blackhole_render +#define GL_INTEL_blackhole_render 1 +#define GL_BLACKHOLE_RENDER_INTEL 0x83FC +#endif /* GL_INTEL_blackhole_render */ + +#ifndef GL_INTEL_conservative_rasterization +#define GL_INTEL_conservative_rasterization 1 +#define GL_CONSERVATIVE_RASTERIZATION_INTEL 0x83FE +#endif /* GL_INTEL_conservative_rasterization */ + +#ifndef GL_INTEL_framebuffer_CMAA +#define GL_INTEL_framebuffer_CMAA 1 +typedef void (GL_APIENTRYP PFNGLAPPLYFRAMEBUFFERATTACHMENTCMAAINTELPROC) (void); +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glApplyFramebufferAttachmentCMAAINTEL (void); +#endif +#endif /* GL_INTEL_framebuffer_CMAA */ + +#ifndef GL_INTEL_performance_query +#define GL_INTEL_performance_query 1 +#define GL_PERFQUERY_SINGLE_CONTEXT_INTEL 0x00000000 +#define GL_PERFQUERY_GLOBAL_CONTEXT_INTEL 0x00000001 +#define GL_PERFQUERY_WAIT_INTEL 0x83FB +#define GL_PERFQUERY_FLUSH_INTEL 0x83FA +#define GL_PERFQUERY_DONOT_FLUSH_INTEL 0x83F9 +#define GL_PERFQUERY_COUNTER_EVENT_INTEL 0x94F0 +#define GL_PERFQUERY_COUNTER_DURATION_NORM_INTEL 0x94F1 +#define GL_PERFQUERY_COUNTER_DURATION_RAW_INTEL 0x94F2 +#define GL_PERFQUERY_COUNTER_THROUGHPUT_INTEL 0x94F3 +#define GL_PERFQUERY_COUNTER_RAW_INTEL 0x94F4 +#define GL_PERFQUERY_COUNTER_TIMESTAMP_INTEL 0x94F5 +#define GL_PERFQUERY_COUNTER_DATA_UINT32_INTEL 0x94F8 +#define GL_PERFQUERY_COUNTER_DATA_UINT64_INTEL 0x94F9 +#define GL_PERFQUERY_COUNTER_DATA_FLOAT_INTEL 0x94FA +#define GL_PERFQUERY_COUNTER_DATA_DOUBLE_INTEL 0x94FB +#define GL_PERFQUERY_COUNTER_DATA_BOOL32_INTEL 0x94FC +#define GL_PERFQUERY_QUERY_NAME_LENGTH_MAX_INTEL 0x94FD +#define GL_PERFQUERY_COUNTER_NAME_LENGTH_MAX_INTEL 0x94FE +#define GL_PERFQUERY_COUNTER_DESC_LENGTH_MAX_INTEL 0x94FF +#define GL_PERFQUERY_GPA_EXTENDED_COUNTERS_INTEL 0x9500 +typedef void (GL_APIENTRYP PFNGLBEGINPERFQUERYINTELPROC) (GLuint queryHandle); +typedef void (GL_APIENTRYP PFNGLCREATEPERFQUERYINTELPROC) (GLuint queryId, GLuint *queryHandle); +typedef void (GL_APIENTRYP PFNGLDELETEPERFQUERYINTELPROC) (GLuint queryHandle); +typedef void (GL_APIENTRYP PFNGLENDPERFQUERYINTELPROC) (GLuint queryHandle); +typedef void (GL_APIENTRYP PFNGLGETFIRSTPERFQUERYIDINTELPROC) (GLuint *queryId); +typedef void (GL_APIENTRYP PFNGLGETNEXTPERFQUERYIDINTELPROC) (GLuint queryId, GLuint *nextQueryId); +typedef void (GL_APIENTRYP PFNGLGETPERFCOUNTERINFOINTELPROC) (GLuint queryId, GLuint counterId, GLuint counterNameLength, GLchar *counterName, GLuint counterDescLength, GLchar *counterDesc, GLuint *counterOffset, GLuint *counterDataSize, GLuint *counterTypeEnum, GLuint *counterDataTypeEnum, GLuint64 *rawCounterMaxValue); +typedef void (GL_APIENTRYP PFNGLGETPERFQUERYDATAINTELPROC) (GLuint queryHandle, GLuint flags, GLsizei dataSize, void *data, GLuint *bytesWritten); +typedef void (GL_APIENTRYP PFNGLGETPERFQUERYIDBYNAMEINTELPROC) (GLchar *queryName, GLuint *queryId); +typedef void (GL_APIENTRYP PFNGLGETPERFQUERYINFOINTELPROC) (GLuint queryId, GLuint queryNameLength, GLchar *queryName, GLuint *dataSize, GLuint *noCounters, GLuint *noInstances, GLuint *capsMask); +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glBeginPerfQueryINTEL (GLuint queryHandle); +GL_APICALL void GL_APIENTRY glCreatePerfQueryINTEL (GLuint queryId, GLuint *queryHandle); +GL_APICALL void GL_APIENTRY glDeletePerfQueryINTEL (GLuint queryHandle); +GL_APICALL void GL_APIENTRY glEndPerfQueryINTEL (GLuint queryHandle); +GL_APICALL void GL_APIENTRY glGetFirstPerfQueryIdINTEL (GLuint *queryId); +GL_APICALL void GL_APIENTRY glGetNextPerfQueryIdINTEL (GLuint queryId, GLuint *nextQueryId); +GL_APICALL void GL_APIENTRY glGetPerfCounterInfoINTEL (GLuint queryId, GLuint counterId, GLuint counterNameLength, GLchar *counterName, GLuint counterDescLength, GLchar *counterDesc, GLuint *counterOffset, GLuint *counterDataSize, GLuint *counterTypeEnum, GLuint *counterDataTypeEnum, GLuint64 *rawCounterMaxValue); +GL_APICALL void GL_APIENTRY glGetPerfQueryDataINTEL (GLuint queryHandle, GLuint flags, GLsizei dataSize, void *data, GLuint *bytesWritten); +GL_APICALL void GL_APIENTRY glGetPerfQueryIdByNameINTEL (GLchar *queryName, GLuint *queryId); +GL_APICALL void GL_APIENTRY glGetPerfQueryInfoINTEL (GLuint queryId, GLuint queryNameLength, GLchar *queryName, GLuint *dataSize, GLuint *noCounters, GLuint *noInstances, GLuint *capsMask); +#endif +#endif /* GL_INTEL_performance_query */ + +#ifndef GL_MESA_bgra +#define GL_MESA_bgra 1 +#define GL_BGR_EXT 0x80E0 +#endif /* GL_MESA_bgra */ + +#ifndef GL_MESA_framebuffer_flip_x +#define GL_MESA_framebuffer_flip_x 1 +#define GL_FRAMEBUFFER_FLIP_X_MESA 0x8BBC +#endif /* GL_MESA_framebuffer_flip_x */ + +#ifndef GL_MESA_framebuffer_flip_y +#define GL_MESA_framebuffer_flip_y 1 +#define GL_FRAMEBUFFER_FLIP_Y_MESA 0x8BBB +typedef void (GL_APIENTRYP PFNGLFRAMEBUFFERPARAMETERIMESAPROC) (GLenum target, GLenum pname, GLint param); +typedef void (GL_APIENTRYP PFNGLGETFRAMEBUFFERPARAMETERIVMESAPROC) (GLenum target, GLenum pname, GLint *params); +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glFramebufferParameteriMESA (GLenum target, GLenum pname, GLint param); +GL_APICALL void GL_APIENTRY glGetFramebufferParameterivMESA (GLenum target, GLenum pname, GLint *params); +#endif +#endif /* GL_MESA_framebuffer_flip_y */ + +#ifndef GL_MESA_framebuffer_swap_xy +#define GL_MESA_framebuffer_swap_xy 1 +#define GL_FRAMEBUFFER_SWAP_XY_MESA 0x8BBD +#endif /* GL_MESA_framebuffer_swap_xy */ + +#ifndef GL_MESA_program_binary_formats +#define GL_MESA_program_binary_formats 1 +#define GL_PROGRAM_BINARY_FORMAT_MESA 0x875F +#endif /* GL_MESA_program_binary_formats */ + +#ifndef GL_MESA_shader_integer_functions +#define GL_MESA_shader_integer_functions 1 +#endif /* GL_MESA_shader_integer_functions */ + +#ifndef GL_NVX_blend_equation_advanced_multi_draw_buffers +#define GL_NVX_blend_equation_advanced_multi_draw_buffers 1 +#endif /* GL_NVX_blend_equation_advanced_multi_draw_buffers */ + +#ifndef GL_NV_bindless_texture +#define GL_NV_bindless_texture 1 +typedef GLuint64 (GL_APIENTRYP PFNGLGETTEXTUREHANDLENVPROC) (GLuint texture); +typedef GLuint64 (GL_APIENTRYP PFNGLGETTEXTURESAMPLERHANDLENVPROC) (GLuint texture, GLuint sampler); +typedef void (GL_APIENTRYP PFNGLMAKETEXTUREHANDLERESIDENTNVPROC) (GLuint64 handle); +typedef void (GL_APIENTRYP PFNGLMAKETEXTUREHANDLENONRESIDENTNVPROC) (GLuint64 handle); +typedef GLuint64 (GL_APIENTRYP PFNGLGETIMAGEHANDLENVPROC) (GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum format); +typedef void (GL_APIENTRYP PFNGLMAKEIMAGEHANDLERESIDENTNVPROC) (GLuint64 handle, GLenum access); +typedef void (GL_APIENTRYP PFNGLMAKEIMAGEHANDLENONRESIDENTNVPROC) (GLuint64 handle); +typedef void (GL_APIENTRYP PFNGLUNIFORMHANDLEUI64NVPROC) (GLint location, GLuint64 value); +typedef void (GL_APIENTRYP PFNGLUNIFORMHANDLEUI64VNVPROC) (GLint location, GLsizei count, const GLuint64 *value); +typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORMHANDLEUI64NVPROC) (GLuint program, GLint location, GLuint64 value); +typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORMHANDLEUI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64 *values); +typedef GLboolean (GL_APIENTRYP PFNGLISTEXTUREHANDLERESIDENTNVPROC) (GLuint64 handle); +typedef GLboolean (GL_APIENTRYP PFNGLISIMAGEHANDLERESIDENTNVPROC) (GLuint64 handle); +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL GLuint64 GL_APIENTRY glGetTextureHandleNV (GLuint texture); +GL_APICALL GLuint64 GL_APIENTRY glGetTextureSamplerHandleNV (GLuint texture, GLuint sampler); +GL_APICALL void GL_APIENTRY glMakeTextureHandleResidentNV (GLuint64 handle); +GL_APICALL void GL_APIENTRY glMakeTextureHandleNonResidentNV (GLuint64 handle); +GL_APICALL GLuint64 GL_APIENTRY glGetImageHandleNV (GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum format); +GL_APICALL void GL_APIENTRY glMakeImageHandleResidentNV (GLuint64 handle, GLenum access); +GL_APICALL void GL_APIENTRY glMakeImageHandleNonResidentNV (GLuint64 handle); +GL_APICALL void GL_APIENTRY glUniformHandleui64NV (GLint location, GLuint64 value); +GL_APICALL void GL_APIENTRY glUniformHandleui64vNV (GLint location, GLsizei count, const GLuint64 *value); +GL_APICALL void GL_APIENTRY glProgramUniformHandleui64NV (GLuint program, GLint location, GLuint64 value); +GL_APICALL void GL_APIENTRY glProgramUniformHandleui64vNV (GLuint program, GLint location, GLsizei count, const GLuint64 *values); +GL_APICALL GLboolean GL_APIENTRY glIsTextureHandleResidentNV (GLuint64 handle); +GL_APICALL GLboolean GL_APIENTRY glIsImageHandleResidentNV (GLuint64 handle); +#endif +#endif /* GL_NV_bindless_texture */ + +#ifndef GL_NV_blend_equation_advanced +#define GL_NV_blend_equation_advanced 1 +#define GL_BLEND_OVERLAP_NV 0x9281 +#define GL_BLEND_PREMULTIPLIED_SRC_NV 0x9280 +#define GL_BLUE_NV 0x1905 +#define GL_COLORBURN_NV 0x929A +#define GL_COLORDODGE_NV 0x9299 +#define GL_CONJOINT_NV 0x9284 +#define GL_CONTRAST_NV 0x92A1 +#define GL_DARKEN_NV 0x9297 +#define GL_DIFFERENCE_NV 0x929E +#define GL_DISJOINT_NV 0x9283 +#define GL_DST_ATOP_NV 0x928F +#define GL_DST_IN_NV 0x928B +#define GL_DST_NV 0x9287 +#define GL_DST_OUT_NV 0x928D +#define GL_DST_OVER_NV 0x9289 +#define GL_EXCLUSION_NV 0x92A0 +#define GL_GREEN_NV 0x1904 +#define GL_HARDLIGHT_NV 0x929B +#define GL_HARDMIX_NV 0x92A9 +#define GL_HSL_COLOR_NV 0x92AF +#define GL_HSL_HUE_NV 0x92AD +#define GL_HSL_LUMINOSITY_NV 0x92B0 +#define GL_HSL_SATURATION_NV 0x92AE +#define GL_INVERT_OVG_NV 0x92B4 +#define GL_INVERT_RGB_NV 0x92A3 +#define GL_LIGHTEN_NV 0x9298 +#define GL_LINEARBURN_NV 0x92A5 +#define GL_LINEARDODGE_NV 0x92A4 +#define GL_LINEARLIGHT_NV 0x92A7 +#define GL_MINUS_CLAMPED_NV 0x92B3 +#define GL_MINUS_NV 0x929F +#define GL_MULTIPLY_NV 0x9294 +#define GL_OVERLAY_NV 0x9296 +#define GL_PINLIGHT_NV 0x92A8 +#define GL_PLUS_CLAMPED_ALPHA_NV 0x92B2 +#define GL_PLUS_CLAMPED_NV 0x92B1 +#define GL_PLUS_DARKER_NV 0x9292 +#define GL_PLUS_NV 0x9291 +#define GL_RED_NV 0x1903 +#define GL_SCREEN_NV 0x9295 +#define GL_SOFTLIGHT_NV 0x929C +#define GL_SRC_ATOP_NV 0x928E +#define GL_SRC_IN_NV 0x928A +#define GL_SRC_NV 0x9286 +#define GL_SRC_OUT_NV 0x928C +#define GL_SRC_OVER_NV 0x9288 +#define GL_UNCORRELATED_NV 0x9282 +#define GL_VIVIDLIGHT_NV 0x92A6 +#define GL_XOR_NV 0x1506 +typedef void (GL_APIENTRYP PFNGLBLENDPARAMETERINVPROC) (GLenum pname, GLint value); +typedef void (GL_APIENTRYP PFNGLBLENDBARRIERNVPROC) (void); +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glBlendParameteriNV (GLenum pname, GLint value); +GL_APICALL void GL_APIENTRY glBlendBarrierNV (void); +#endif +#endif /* GL_NV_blend_equation_advanced */ + +#ifndef GL_NV_blend_equation_advanced_coherent +#define GL_NV_blend_equation_advanced_coherent 1 +#define GL_BLEND_ADVANCED_COHERENT_NV 0x9285 +#endif /* GL_NV_blend_equation_advanced_coherent */ + +#ifndef GL_NV_blend_minmax_factor +#define GL_NV_blend_minmax_factor 1 +#define GL_FACTOR_MIN_AMD 0x901C +#define GL_FACTOR_MAX_AMD 0x901D +#endif /* GL_NV_blend_minmax_factor */ + +#ifndef GL_NV_clip_space_w_scaling +#define GL_NV_clip_space_w_scaling 1 +#define GL_VIEWPORT_POSITION_W_SCALE_NV 0x937C +#define GL_VIEWPORT_POSITION_W_SCALE_X_COEFF_NV 0x937D +#define GL_VIEWPORT_POSITION_W_SCALE_Y_COEFF_NV 0x937E +typedef void (GL_APIENTRYP PFNGLVIEWPORTPOSITIONWSCALENVPROC) (GLuint index, GLfloat xcoeff, GLfloat ycoeff); +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glViewportPositionWScaleNV (GLuint index, GLfloat xcoeff, GLfloat ycoeff); +#endif +#endif /* GL_NV_clip_space_w_scaling */ + +#ifndef GL_NV_compute_shader_derivatives +#define GL_NV_compute_shader_derivatives 1 +#endif /* GL_NV_compute_shader_derivatives */ + +#ifndef GL_NV_conditional_render +#define GL_NV_conditional_render 1 +#define GL_QUERY_WAIT_NV 0x8E13 +#define GL_QUERY_NO_WAIT_NV 0x8E14 +#define GL_QUERY_BY_REGION_WAIT_NV 0x8E15 +#define GL_QUERY_BY_REGION_NO_WAIT_NV 0x8E16 +typedef void (GL_APIENTRYP PFNGLBEGINCONDITIONALRENDERNVPROC) (GLuint id, GLenum mode); +typedef void (GL_APIENTRYP PFNGLENDCONDITIONALRENDERNVPROC) (void); +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glBeginConditionalRenderNV (GLuint id, GLenum mode); +GL_APICALL void GL_APIENTRY glEndConditionalRenderNV (void); +#endif +#endif /* GL_NV_conditional_render */ + +#ifndef GL_NV_conservative_raster +#define GL_NV_conservative_raster 1 +#define GL_CONSERVATIVE_RASTERIZATION_NV 0x9346 +#define GL_SUBPIXEL_PRECISION_BIAS_X_BITS_NV 0x9347 +#define GL_SUBPIXEL_PRECISION_BIAS_Y_BITS_NV 0x9348 +#define GL_MAX_SUBPIXEL_PRECISION_BIAS_BITS_NV 0x9349 +typedef void (GL_APIENTRYP PFNGLSUBPIXELPRECISIONBIASNVPROC) (GLuint xbits, GLuint ybits); +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glSubpixelPrecisionBiasNV (GLuint xbits, GLuint ybits); +#endif +#endif /* GL_NV_conservative_raster */ + +#ifndef GL_NV_conservative_raster_pre_snap +#define GL_NV_conservative_raster_pre_snap 1 +#define GL_CONSERVATIVE_RASTER_MODE_PRE_SNAP_NV 0x9550 +#endif /* GL_NV_conservative_raster_pre_snap */ + +#ifndef GL_NV_conservative_raster_pre_snap_triangles +#define GL_NV_conservative_raster_pre_snap_triangles 1 +#define GL_CONSERVATIVE_RASTER_MODE_NV 0x954D +#define GL_CONSERVATIVE_RASTER_MODE_POST_SNAP_NV 0x954E +#define GL_CONSERVATIVE_RASTER_MODE_PRE_SNAP_TRIANGLES_NV 0x954F +typedef void (GL_APIENTRYP PFNGLCONSERVATIVERASTERPARAMETERINVPROC) (GLenum pname, GLint param); +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glConservativeRasterParameteriNV (GLenum pname, GLint param); +#endif +#endif /* GL_NV_conservative_raster_pre_snap_triangles */ + +#ifndef GL_NV_copy_buffer +#define GL_NV_copy_buffer 1 +#define GL_COPY_READ_BUFFER_NV 0x8F36 +#define GL_COPY_WRITE_BUFFER_NV 0x8F37 +typedef void (GL_APIENTRYP PFNGLCOPYBUFFERSUBDATANVPROC) (GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glCopyBufferSubDataNV (GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); +#endif +#endif /* GL_NV_copy_buffer */ + +#ifndef GL_NV_coverage_sample +#define GL_NV_coverage_sample 1 +#define GL_COVERAGE_COMPONENT_NV 0x8ED0 +#define GL_COVERAGE_COMPONENT4_NV 0x8ED1 +#define GL_COVERAGE_ATTACHMENT_NV 0x8ED2 +#define GL_COVERAGE_BUFFERS_NV 0x8ED3 +#define GL_COVERAGE_SAMPLES_NV 0x8ED4 +#define GL_COVERAGE_ALL_FRAGMENTS_NV 0x8ED5 +#define GL_COVERAGE_EDGE_FRAGMENTS_NV 0x8ED6 +#define GL_COVERAGE_AUTOMATIC_NV 0x8ED7 +#define GL_COVERAGE_BUFFER_BIT_NV 0x00008000 +typedef void (GL_APIENTRYP PFNGLCOVERAGEMASKNVPROC) (GLboolean mask); +typedef void (GL_APIENTRYP PFNGLCOVERAGEOPERATIONNVPROC) (GLenum operation); +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glCoverageMaskNV (GLboolean mask); +GL_APICALL void GL_APIENTRY glCoverageOperationNV (GLenum operation); +#endif +#endif /* GL_NV_coverage_sample */ + +#ifndef GL_NV_depth_nonlinear +#define GL_NV_depth_nonlinear 1 +#define GL_DEPTH_COMPONENT16_NONLINEAR_NV 0x8E2C +#endif /* GL_NV_depth_nonlinear */ + +#ifndef GL_NV_draw_buffers +#define GL_NV_draw_buffers 1 +#define GL_MAX_DRAW_BUFFERS_NV 0x8824 +#define GL_DRAW_BUFFER0_NV 0x8825 +#define GL_DRAW_BUFFER1_NV 0x8826 +#define GL_DRAW_BUFFER2_NV 0x8827 +#define GL_DRAW_BUFFER3_NV 0x8828 +#define GL_DRAW_BUFFER4_NV 0x8829 +#define GL_DRAW_BUFFER5_NV 0x882A +#define GL_DRAW_BUFFER6_NV 0x882B +#define GL_DRAW_BUFFER7_NV 0x882C +#define GL_DRAW_BUFFER8_NV 0x882D +#define GL_DRAW_BUFFER9_NV 0x882E +#define GL_DRAW_BUFFER10_NV 0x882F +#define GL_DRAW_BUFFER11_NV 0x8830 +#define GL_DRAW_BUFFER12_NV 0x8831 +#define GL_DRAW_BUFFER13_NV 0x8832 +#define GL_DRAW_BUFFER14_NV 0x8833 +#define GL_DRAW_BUFFER15_NV 0x8834 +#define GL_COLOR_ATTACHMENT0_NV 0x8CE0 +#define GL_COLOR_ATTACHMENT1_NV 0x8CE1 +#define GL_COLOR_ATTACHMENT2_NV 0x8CE2 +#define GL_COLOR_ATTACHMENT3_NV 0x8CE3 +#define GL_COLOR_ATTACHMENT4_NV 0x8CE4 +#define GL_COLOR_ATTACHMENT5_NV 0x8CE5 +#define GL_COLOR_ATTACHMENT6_NV 0x8CE6 +#define GL_COLOR_ATTACHMENT7_NV 0x8CE7 +#define GL_COLOR_ATTACHMENT8_NV 0x8CE8 +#define GL_COLOR_ATTACHMENT9_NV 0x8CE9 +#define GL_COLOR_ATTACHMENT10_NV 0x8CEA +#define GL_COLOR_ATTACHMENT11_NV 0x8CEB +#define GL_COLOR_ATTACHMENT12_NV 0x8CEC +#define GL_COLOR_ATTACHMENT13_NV 0x8CED +#define GL_COLOR_ATTACHMENT14_NV 0x8CEE +#define GL_COLOR_ATTACHMENT15_NV 0x8CEF +typedef void (GL_APIENTRYP PFNGLDRAWBUFFERSNVPROC) (GLsizei n, const GLenum *bufs); +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glDrawBuffersNV (GLsizei n, const GLenum *bufs); +#endif +#endif /* GL_NV_draw_buffers */ + +#ifndef GL_NV_draw_instanced +#define GL_NV_draw_instanced 1 +typedef void (GL_APIENTRYP PFNGLDRAWARRAYSINSTANCEDNVPROC) (GLenum mode, GLint first, GLsizei count, GLsizei primcount); +typedef void (GL_APIENTRYP PFNGLDRAWELEMENTSINSTANCEDNVPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei primcount); +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glDrawArraysInstancedNV (GLenum mode, GLint first, GLsizei count, GLsizei primcount); +GL_APICALL void GL_APIENTRY glDrawElementsInstancedNV (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei primcount); +#endif +#endif /* GL_NV_draw_instanced */ + +#ifndef GL_NV_draw_vulkan_image +#define GL_NV_draw_vulkan_image 1 +typedef void (GL_APIENTRY *GLVULKANPROCNV)(void); +typedef void (GL_APIENTRYP PFNGLDRAWVKIMAGENVPROC) (GLuint64 vkImage, GLuint sampler, GLfloat x0, GLfloat y0, GLfloat x1, GLfloat y1, GLfloat z, GLfloat s0, GLfloat t0, GLfloat s1, GLfloat t1); +typedef GLVULKANPROCNV (GL_APIENTRYP PFNGLGETVKPROCADDRNVPROC) (const GLchar *name); +typedef void (GL_APIENTRYP PFNGLWAITVKSEMAPHORENVPROC) (GLuint64 vkSemaphore); +typedef void (GL_APIENTRYP PFNGLSIGNALVKSEMAPHORENVPROC) (GLuint64 vkSemaphore); +typedef void (GL_APIENTRYP PFNGLSIGNALVKFENCENVPROC) (GLuint64 vkFence); +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glDrawVkImageNV (GLuint64 vkImage, GLuint sampler, GLfloat x0, GLfloat y0, GLfloat x1, GLfloat y1, GLfloat z, GLfloat s0, GLfloat t0, GLfloat s1, GLfloat t1); +GL_APICALL GLVULKANPROCNV GL_APIENTRY glGetVkProcAddrNV (const GLchar *name); +GL_APICALL void GL_APIENTRY glWaitVkSemaphoreNV (GLuint64 vkSemaphore); +GL_APICALL void GL_APIENTRY glSignalVkSemaphoreNV (GLuint64 vkSemaphore); +GL_APICALL void GL_APIENTRY glSignalVkFenceNV (GLuint64 vkFence); +#endif +#endif /* GL_NV_draw_vulkan_image */ + +#ifndef GL_NV_explicit_attrib_location +#define GL_NV_explicit_attrib_location 1 +#endif /* GL_NV_explicit_attrib_location */ + +#ifndef GL_NV_fbo_color_attachments +#define GL_NV_fbo_color_attachments 1 +#define GL_MAX_COLOR_ATTACHMENTS_NV 0x8CDF +#endif /* GL_NV_fbo_color_attachments */ + +#ifndef GL_NV_fence +#define GL_NV_fence 1 +#define GL_ALL_COMPLETED_NV 0x84F2 +#define GL_FENCE_STATUS_NV 0x84F3 +#define GL_FENCE_CONDITION_NV 0x84F4 +typedef void (GL_APIENTRYP PFNGLDELETEFENCESNVPROC) (GLsizei n, const GLuint *fences); +typedef void (GL_APIENTRYP PFNGLGENFENCESNVPROC) (GLsizei n, GLuint *fences); +typedef GLboolean (GL_APIENTRYP PFNGLISFENCENVPROC) (GLuint fence); +typedef GLboolean (GL_APIENTRYP PFNGLTESTFENCENVPROC) (GLuint fence); +typedef void (GL_APIENTRYP PFNGLGETFENCEIVNVPROC) (GLuint fence, GLenum pname, GLint *params); +typedef void (GL_APIENTRYP PFNGLFINISHFENCENVPROC) (GLuint fence); +typedef void (GL_APIENTRYP PFNGLSETFENCENVPROC) (GLuint fence, GLenum condition); +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glDeleteFencesNV (GLsizei n, const GLuint *fences); +GL_APICALL void GL_APIENTRY glGenFencesNV (GLsizei n, GLuint *fences); +GL_APICALL GLboolean GL_APIENTRY glIsFenceNV (GLuint fence); +GL_APICALL GLboolean GL_APIENTRY glTestFenceNV (GLuint fence); +GL_APICALL void GL_APIENTRY glGetFenceivNV (GLuint fence, GLenum pname, GLint *params); +GL_APICALL void GL_APIENTRY glFinishFenceNV (GLuint fence); +GL_APICALL void GL_APIENTRY glSetFenceNV (GLuint fence, GLenum condition); +#endif +#endif /* GL_NV_fence */ + +#ifndef GL_NV_fill_rectangle +#define GL_NV_fill_rectangle 1 +#define GL_FILL_RECTANGLE_NV 0x933C +#endif /* GL_NV_fill_rectangle */ + +#ifndef GL_NV_fragment_coverage_to_color +#define GL_NV_fragment_coverage_to_color 1 +#define GL_FRAGMENT_COVERAGE_TO_COLOR_NV 0x92DD +#define GL_FRAGMENT_COVERAGE_COLOR_NV 0x92DE +typedef void (GL_APIENTRYP PFNGLFRAGMENTCOVERAGECOLORNVPROC) (GLuint color); +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glFragmentCoverageColorNV (GLuint color); +#endif +#endif /* GL_NV_fragment_coverage_to_color */ + +#ifndef GL_NV_fragment_shader_barycentric +#define GL_NV_fragment_shader_barycentric 1 +#endif /* GL_NV_fragment_shader_barycentric */ + +#ifndef GL_NV_fragment_shader_interlock +#define GL_NV_fragment_shader_interlock 1 +#endif /* GL_NV_fragment_shader_interlock */ + +#ifndef GL_NV_framebuffer_blit +#define GL_NV_framebuffer_blit 1 +#define GL_READ_FRAMEBUFFER_NV 0x8CA8 +#define GL_DRAW_FRAMEBUFFER_NV 0x8CA9 +#define GL_DRAW_FRAMEBUFFER_BINDING_NV 0x8CA6 +#define GL_READ_FRAMEBUFFER_BINDING_NV 0x8CAA +typedef void (GL_APIENTRYP PFNGLBLITFRAMEBUFFERNVPROC) (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glBlitFramebufferNV (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); +#endif +#endif /* GL_NV_framebuffer_blit */ + +#ifndef GL_NV_framebuffer_mixed_samples +#define GL_NV_framebuffer_mixed_samples 1 +#define GL_COVERAGE_MODULATION_TABLE_NV 0x9331 +#define GL_COLOR_SAMPLES_NV 0x8E20 +#define GL_DEPTH_SAMPLES_NV 0x932D +#define GL_STENCIL_SAMPLES_NV 0x932E +#define GL_MIXED_DEPTH_SAMPLES_SUPPORTED_NV 0x932F +#define GL_MIXED_STENCIL_SAMPLES_SUPPORTED_NV 0x9330 +#define GL_COVERAGE_MODULATION_NV 0x9332 +#define GL_COVERAGE_MODULATION_TABLE_SIZE_NV 0x9333 +typedef void (GL_APIENTRYP PFNGLCOVERAGEMODULATIONTABLENVPROC) (GLsizei n, const GLfloat *v); +typedef void (GL_APIENTRYP PFNGLGETCOVERAGEMODULATIONTABLENVPROC) (GLsizei bufSize, GLfloat *v); +typedef void (GL_APIENTRYP PFNGLCOVERAGEMODULATIONNVPROC) (GLenum components); +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glCoverageModulationTableNV (GLsizei n, const GLfloat *v); +GL_APICALL void GL_APIENTRY glGetCoverageModulationTableNV (GLsizei bufSize, GLfloat *v); +GL_APICALL void GL_APIENTRY glCoverageModulationNV (GLenum components); +#endif +#endif /* GL_NV_framebuffer_mixed_samples */ + +#ifndef GL_NV_framebuffer_multisample +#define GL_NV_framebuffer_multisample 1 +#define GL_RENDERBUFFER_SAMPLES_NV 0x8CAB +#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE_NV 0x8D56 +#define GL_MAX_SAMPLES_NV 0x8D57 +typedef void (GL_APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLENVPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glRenderbufferStorageMultisampleNV (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); +#endif +#endif /* GL_NV_framebuffer_multisample */ + +#ifndef GL_NV_generate_mipmap_sRGB +#define GL_NV_generate_mipmap_sRGB 1 +#endif /* GL_NV_generate_mipmap_sRGB */ + +#ifndef GL_NV_geometry_shader_passthrough +#define GL_NV_geometry_shader_passthrough 1 +#endif /* GL_NV_geometry_shader_passthrough */ + +#ifndef GL_NV_gpu_shader5 +#define GL_NV_gpu_shader5 1 +typedef khronos_int64_t GLint64EXT; +typedef khronos_uint64_t GLuint64EXT; +#define GL_INT64_NV 0x140E +#define GL_UNSIGNED_INT64_NV 0x140F +#define GL_INT8_NV 0x8FE0 +#define GL_INT8_VEC2_NV 0x8FE1 +#define GL_INT8_VEC3_NV 0x8FE2 +#define GL_INT8_VEC4_NV 0x8FE3 +#define GL_INT16_NV 0x8FE4 +#define GL_INT16_VEC2_NV 0x8FE5 +#define GL_INT16_VEC3_NV 0x8FE6 +#define GL_INT16_VEC4_NV 0x8FE7 +#define GL_INT64_VEC2_NV 0x8FE9 +#define GL_INT64_VEC3_NV 0x8FEA +#define GL_INT64_VEC4_NV 0x8FEB +#define GL_UNSIGNED_INT8_NV 0x8FEC +#define GL_UNSIGNED_INT8_VEC2_NV 0x8FED +#define GL_UNSIGNED_INT8_VEC3_NV 0x8FEE +#define GL_UNSIGNED_INT8_VEC4_NV 0x8FEF +#define GL_UNSIGNED_INT16_NV 0x8FF0 +#define GL_UNSIGNED_INT16_VEC2_NV 0x8FF1 +#define GL_UNSIGNED_INT16_VEC3_NV 0x8FF2 +#define GL_UNSIGNED_INT16_VEC4_NV 0x8FF3 +#define GL_UNSIGNED_INT64_VEC2_NV 0x8FF5 +#define GL_UNSIGNED_INT64_VEC3_NV 0x8FF6 +#define GL_UNSIGNED_INT64_VEC4_NV 0x8FF7 +#define GL_FLOAT16_NV 0x8FF8 +#define GL_FLOAT16_VEC2_NV 0x8FF9 +#define GL_FLOAT16_VEC3_NV 0x8FFA +#define GL_FLOAT16_VEC4_NV 0x8FFB +#define GL_PATCHES 0x000E +typedef void (GL_APIENTRYP PFNGLUNIFORM1I64NVPROC) (GLint location, GLint64EXT x); +typedef void (GL_APIENTRYP PFNGLUNIFORM2I64NVPROC) (GLint location, GLint64EXT x, GLint64EXT y); +typedef void (GL_APIENTRYP PFNGLUNIFORM3I64NVPROC) (GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z); +typedef void (GL_APIENTRYP PFNGLUNIFORM4I64NVPROC) (GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w); +typedef void (GL_APIENTRYP PFNGLUNIFORM1I64VNVPROC) (GLint location, GLsizei count, const GLint64EXT *value); +typedef void (GL_APIENTRYP PFNGLUNIFORM2I64VNVPROC) (GLint location, GLsizei count, const GLint64EXT *value); +typedef void (GL_APIENTRYP PFNGLUNIFORM3I64VNVPROC) (GLint location, GLsizei count, const GLint64EXT *value); +typedef void (GL_APIENTRYP PFNGLUNIFORM4I64VNVPROC) (GLint location, GLsizei count, const GLint64EXT *value); +typedef void (GL_APIENTRYP PFNGLUNIFORM1UI64NVPROC) (GLint location, GLuint64EXT x); +typedef void (GL_APIENTRYP PFNGLUNIFORM2UI64NVPROC) (GLint location, GLuint64EXT x, GLuint64EXT y); +typedef void (GL_APIENTRYP PFNGLUNIFORM3UI64NVPROC) (GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z); +typedef void (GL_APIENTRYP PFNGLUNIFORM4UI64NVPROC) (GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w); +typedef void (GL_APIENTRYP PFNGLUNIFORM1UI64VNVPROC) (GLint location, GLsizei count, const GLuint64EXT *value); +typedef void (GL_APIENTRYP PFNGLUNIFORM2UI64VNVPROC) (GLint location, GLsizei count, const GLuint64EXT *value); +typedef void (GL_APIENTRYP PFNGLUNIFORM3UI64VNVPROC) (GLint location, GLsizei count, const GLuint64EXT *value); +typedef void (GL_APIENTRYP PFNGLUNIFORM4UI64VNVPROC) (GLint location, GLsizei count, const GLuint64EXT *value); +typedef void (GL_APIENTRYP PFNGLGETUNIFORMI64VNVPROC) (GLuint program, GLint location, GLint64EXT *params); +typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM1I64NVPROC) (GLuint program, GLint location, GLint64EXT x); +typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM2I64NVPROC) (GLuint program, GLint location, GLint64EXT x, GLint64EXT y); +typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM3I64NVPROC) (GLuint program, GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z); +typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM4I64NVPROC) (GLuint program, GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w); +typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM1I64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLint64EXT *value); +typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM2I64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLint64EXT *value); +typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM3I64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLint64EXT *value); +typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM4I64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLint64EXT *value); +typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM1UI64NVPROC) (GLuint program, GLint location, GLuint64EXT x); +typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM2UI64NVPROC) (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y); +typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM3UI64NVPROC) (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z); +typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM4UI64NVPROC) (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w); +typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM1UI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); +typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM2UI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); +typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM3UI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); +typedef void (GL_APIENTRYP PFNGLPROGRAMUNIFORM4UI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glUniform1i64NV (GLint location, GLint64EXT x); +GL_APICALL void GL_APIENTRY glUniform2i64NV (GLint location, GLint64EXT x, GLint64EXT y); +GL_APICALL void GL_APIENTRY glUniform3i64NV (GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z); +GL_APICALL void GL_APIENTRY glUniform4i64NV (GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w); +GL_APICALL void GL_APIENTRY glUniform1i64vNV (GLint location, GLsizei count, const GLint64EXT *value); +GL_APICALL void GL_APIENTRY glUniform2i64vNV (GLint location, GLsizei count, const GLint64EXT *value); +GL_APICALL void GL_APIENTRY glUniform3i64vNV (GLint location, GLsizei count, const GLint64EXT *value); +GL_APICALL void GL_APIENTRY glUniform4i64vNV (GLint location, GLsizei count, const GLint64EXT *value); +GL_APICALL void GL_APIENTRY glUniform1ui64NV (GLint location, GLuint64EXT x); +GL_APICALL void GL_APIENTRY glUniform2ui64NV (GLint location, GLuint64EXT x, GLuint64EXT y); +GL_APICALL void GL_APIENTRY glUniform3ui64NV (GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z); +GL_APICALL void GL_APIENTRY glUniform4ui64NV (GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w); +GL_APICALL void GL_APIENTRY glUniform1ui64vNV (GLint location, GLsizei count, const GLuint64EXT *value); +GL_APICALL void GL_APIENTRY glUniform2ui64vNV (GLint location, GLsizei count, const GLuint64EXT *value); +GL_APICALL void GL_APIENTRY glUniform3ui64vNV (GLint location, GLsizei count, const GLuint64EXT *value); +GL_APICALL void GL_APIENTRY glUniform4ui64vNV (GLint location, GLsizei count, const GLuint64EXT *value); +GL_APICALL void GL_APIENTRY glGetUniformi64vNV (GLuint program, GLint location, GLint64EXT *params); +GL_APICALL void GL_APIENTRY glProgramUniform1i64NV (GLuint program, GLint location, GLint64EXT x); +GL_APICALL void GL_APIENTRY glProgramUniform2i64NV (GLuint program, GLint location, GLint64EXT x, GLint64EXT y); +GL_APICALL void GL_APIENTRY glProgramUniform3i64NV (GLuint program, GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z); +GL_APICALL void GL_APIENTRY glProgramUniform4i64NV (GLuint program, GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w); +GL_APICALL void GL_APIENTRY glProgramUniform1i64vNV (GLuint program, GLint location, GLsizei count, const GLint64EXT *value); +GL_APICALL void GL_APIENTRY glProgramUniform2i64vNV (GLuint program, GLint location, GLsizei count, const GLint64EXT *value); +GL_APICALL void GL_APIENTRY glProgramUniform3i64vNV (GLuint program, GLint location, GLsizei count, const GLint64EXT *value); +GL_APICALL void GL_APIENTRY glProgramUniform4i64vNV (GLuint program, GLint location, GLsizei count, const GLint64EXT *value); +GL_APICALL void GL_APIENTRY glProgramUniform1ui64NV (GLuint program, GLint location, GLuint64EXT x); +GL_APICALL void GL_APIENTRY glProgramUniform2ui64NV (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y); +GL_APICALL void GL_APIENTRY glProgramUniform3ui64NV (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z); +GL_APICALL void GL_APIENTRY glProgramUniform4ui64NV (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w); +GL_APICALL void GL_APIENTRY glProgramUniform1ui64vNV (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); +GL_APICALL void GL_APIENTRY glProgramUniform2ui64vNV (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); +GL_APICALL void GL_APIENTRY glProgramUniform3ui64vNV (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); +GL_APICALL void GL_APIENTRY glProgramUniform4ui64vNV (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); +#endif +#endif /* GL_NV_gpu_shader5 */ + +#ifndef GL_NV_image_formats +#define GL_NV_image_formats 1 +#endif /* GL_NV_image_formats */ + +#ifndef GL_NV_instanced_arrays +#define GL_NV_instanced_arrays 1 +#define GL_VERTEX_ATTRIB_ARRAY_DIVISOR_NV 0x88FE +typedef void (GL_APIENTRYP PFNGLVERTEXATTRIBDIVISORNVPROC) (GLuint index, GLuint divisor); +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glVertexAttribDivisorNV (GLuint index, GLuint divisor); +#endif +#endif /* GL_NV_instanced_arrays */ + +#ifndef GL_NV_internalformat_sample_query +#define GL_NV_internalformat_sample_query 1 +#define GL_TEXTURE_2D_MULTISAMPLE 0x9100 +#define GL_TEXTURE_2D_MULTISAMPLE_ARRAY 0x9102 +#define GL_MULTISAMPLES_NV 0x9371 +#define GL_SUPERSAMPLE_SCALE_X_NV 0x9372 +#define GL_SUPERSAMPLE_SCALE_Y_NV 0x9373 +#define GL_CONFORMANT_NV 0x9374 +typedef void (GL_APIENTRYP PFNGLGETINTERNALFORMATSAMPLEIVNVPROC) (GLenum target, GLenum internalformat, GLsizei samples, GLenum pname, GLsizei count, GLint *params); +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glGetInternalformatSampleivNV (GLenum target, GLenum internalformat, GLsizei samples, GLenum pname, GLsizei count, GLint *params); +#endif +#endif /* GL_NV_internalformat_sample_query */ + +#ifndef GL_NV_memory_attachment +#define GL_NV_memory_attachment 1 +#define GL_ATTACHED_MEMORY_OBJECT_NV 0x95A4 +#define GL_ATTACHED_MEMORY_OFFSET_NV 0x95A5 +#define GL_MEMORY_ATTACHABLE_ALIGNMENT_NV 0x95A6 +#define GL_MEMORY_ATTACHABLE_SIZE_NV 0x95A7 +#define GL_MEMORY_ATTACHABLE_NV 0x95A8 +#define GL_DETACHED_MEMORY_INCARNATION_NV 0x95A9 +#define GL_DETACHED_TEXTURES_NV 0x95AA +#define GL_DETACHED_BUFFERS_NV 0x95AB +#define GL_MAX_DETACHED_TEXTURES_NV 0x95AC +#define GL_MAX_DETACHED_BUFFERS_NV 0x95AD +typedef void (GL_APIENTRYP PFNGLGETMEMORYOBJECTDETACHEDRESOURCESUIVNVPROC) (GLuint memory, GLenum pname, GLint first, GLsizei count, GLuint *params); +typedef void (GL_APIENTRYP PFNGLRESETMEMORYOBJECTPARAMETERNVPROC) (GLuint memory, GLenum pname); +typedef void (GL_APIENTRYP PFNGLTEXATTACHMEMORYNVPROC) (GLenum target, GLuint memory, GLuint64 offset); +typedef void (GL_APIENTRYP PFNGLBUFFERATTACHMEMORYNVPROC) (GLenum target, GLuint memory, GLuint64 offset); +typedef void (GL_APIENTRYP PFNGLTEXTUREATTACHMEMORYNVPROC) (GLuint texture, GLuint memory, GLuint64 offset); +typedef void (GL_APIENTRYP PFNGLNAMEDBUFFERATTACHMEMORYNVPROC) (GLuint buffer, GLuint memory, GLuint64 offset); +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glGetMemoryObjectDetachedResourcesuivNV (GLuint memory, GLenum pname, GLint first, GLsizei count, GLuint *params); +GL_APICALL void GL_APIENTRY glResetMemoryObjectParameterNV (GLuint memory, GLenum pname); +GL_APICALL void GL_APIENTRY glTexAttachMemoryNV (GLenum target, GLuint memory, GLuint64 offset); +GL_APICALL void GL_APIENTRY glBufferAttachMemoryNV (GLenum target, GLuint memory, GLuint64 offset); +GL_APICALL void GL_APIENTRY glTextureAttachMemoryNV (GLuint texture, GLuint memory, GLuint64 offset); +GL_APICALL void GL_APIENTRY glNamedBufferAttachMemoryNV (GLuint buffer, GLuint memory, GLuint64 offset); +#endif +#endif /* GL_NV_memory_attachment */ + +#ifndef GL_NV_memory_object_sparse +#define GL_NV_memory_object_sparse 1 +typedef void (GL_APIENTRYP PFNGLBUFFERPAGECOMMITMENTMEMNVPROC) (GLenum target, GLintptr offset, GLsizeiptr size, GLuint memory, GLuint64 memOffset, GLboolean commit); +typedef void (GL_APIENTRYP PFNGLTEXPAGECOMMITMENTMEMNVPROC) (GLenum target, GLint layer, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLuint memory, GLuint64 offset, GLboolean commit); +typedef void (GL_APIENTRYP PFNGLNAMEDBUFFERPAGECOMMITMENTMEMNVPROC) (GLuint buffer, GLintptr offset, GLsizeiptr size, GLuint memory, GLuint64 memOffset, GLboolean commit); +typedef void (GL_APIENTRYP PFNGLTEXTUREPAGECOMMITMENTMEMNVPROC) (GLuint texture, GLint layer, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLuint memory, GLuint64 offset, GLboolean commit); +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glBufferPageCommitmentMemNV (GLenum target, GLintptr offset, GLsizeiptr size, GLuint memory, GLuint64 memOffset, GLboolean commit); +GL_APICALL void GL_APIENTRY glTexPageCommitmentMemNV (GLenum target, GLint layer, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLuint memory, GLuint64 offset, GLboolean commit); +GL_APICALL void GL_APIENTRY glNamedBufferPageCommitmentMemNV (GLuint buffer, GLintptr offset, GLsizeiptr size, GLuint memory, GLuint64 memOffset, GLboolean commit); +GL_APICALL void GL_APIENTRY glTexturePageCommitmentMemNV (GLuint texture, GLint layer, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLuint memory, GLuint64 offset, GLboolean commit); +#endif +#endif /* GL_NV_memory_object_sparse */ + +#ifndef GL_NV_mesh_shader +#define GL_NV_mesh_shader 1 +#define GL_MESH_SHADER_NV 0x9559 +#define GL_TASK_SHADER_NV 0x955A +#define GL_MAX_MESH_UNIFORM_BLOCKS_NV 0x8E60 +#define GL_MAX_MESH_TEXTURE_IMAGE_UNITS_NV 0x8E61 +#define GL_MAX_MESH_IMAGE_UNIFORMS_NV 0x8E62 +#define GL_MAX_MESH_UNIFORM_COMPONENTS_NV 0x8E63 +#define GL_MAX_MESH_ATOMIC_COUNTER_BUFFERS_NV 0x8E64 +#define GL_MAX_MESH_ATOMIC_COUNTERS_NV 0x8E65 +#define GL_MAX_MESH_SHADER_STORAGE_BLOCKS_NV 0x8E66 +#define GL_MAX_COMBINED_MESH_UNIFORM_COMPONENTS_NV 0x8E67 +#define GL_MAX_TASK_UNIFORM_BLOCKS_NV 0x8E68 +#define GL_MAX_TASK_TEXTURE_IMAGE_UNITS_NV 0x8E69 +#define GL_MAX_TASK_IMAGE_UNIFORMS_NV 0x8E6A +#define GL_MAX_TASK_UNIFORM_COMPONENTS_NV 0x8E6B +#define GL_MAX_TASK_ATOMIC_COUNTER_BUFFERS_NV 0x8E6C +#define GL_MAX_TASK_ATOMIC_COUNTERS_NV 0x8E6D +#define GL_MAX_TASK_SHADER_STORAGE_BLOCKS_NV 0x8E6E +#define GL_MAX_COMBINED_TASK_UNIFORM_COMPONENTS_NV 0x8E6F +#define GL_MAX_MESH_WORK_GROUP_INVOCATIONS_NV 0x95A2 +#define GL_MAX_TASK_WORK_GROUP_INVOCATIONS_NV 0x95A3 +#define GL_MAX_MESH_TOTAL_MEMORY_SIZE_NV 0x9536 +#define GL_MAX_TASK_TOTAL_MEMORY_SIZE_NV 0x9537 +#define GL_MAX_MESH_OUTPUT_VERTICES_NV 0x9538 +#define GL_MAX_MESH_OUTPUT_PRIMITIVES_NV 0x9539 +#define GL_MAX_TASK_OUTPUT_COUNT_NV 0x953A +#define GL_MAX_DRAW_MESH_TASKS_COUNT_NV 0x953D +#define GL_MAX_MESH_VIEWS_NV 0x9557 +#define GL_MESH_OUTPUT_PER_VERTEX_GRANULARITY_NV 0x92DF +#define GL_MESH_OUTPUT_PER_PRIMITIVE_GRANULARITY_NV 0x9543 +#define GL_MAX_MESH_WORK_GROUP_SIZE_NV 0x953B +#define GL_MAX_TASK_WORK_GROUP_SIZE_NV 0x953C +#define GL_MESH_WORK_GROUP_SIZE_NV 0x953E +#define GL_TASK_WORK_GROUP_SIZE_NV 0x953F +#define GL_MESH_VERTICES_OUT_NV 0x9579 +#define GL_MESH_PRIMITIVES_OUT_NV 0x957A +#define GL_MESH_OUTPUT_TYPE_NV 0x957B +#define GL_UNIFORM_BLOCK_REFERENCED_BY_MESH_SHADER_NV 0x959C +#define GL_UNIFORM_BLOCK_REFERENCED_BY_TASK_SHADER_NV 0x959D +#define GL_REFERENCED_BY_MESH_SHADER_NV 0x95A0 +#define GL_REFERENCED_BY_TASK_SHADER_NV 0x95A1 +#define GL_MESH_SHADER_BIT_NV 0x00000040 +#define GL_TASK_SHADER_BIT_NV 0x00000080 +#define GL_MESH_SUBROUTINE_NV 0x957C +#define GL_TASK_SUBROUTINE_NV 0x957D +#define GL_MESH_SUBROUTINE_UNIFORM_NV 0x957E +#define GL_TASK_SUBROUTINE_UNIFORM_NV 0x957F +#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_MESH_SHADER_NV 0x959E +#define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_TASK_SHADER_NV 0x959F +typedef void (GL_APIENTRYP PFNGLDRAWMESHTASKSNVPROC) (GLuint first, GLuint count); +typedef void (GL_APIENTRYP PFNGLDRAWMESHTASKSINDIRECTNVPROC) (GLintptr indirect); +typedef void (GL_APIENTRYP PFNGLMULTIDRAWMESHTASKSINDIRECTNVPROC) (GLintptr indirect, GLsizei drawcount, GLsizei stride); +typedef void (GL_APIENTRYP PFNGLMULTIDRAWMESHTASKSINDIRECTCOUNTNVPROC) (GLintptr indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride); +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glDrawMeshTasksNV (GLuint first, GLuint count); +GL_APICALL void GL_APIENTRY glDrawMeshTasksIndirectNV (GLintptr indirect); +GL_APICALL void GL_APIENTRY glMultiDrawMeshTasksIndirectNV (GLintptr indirect, GLsizei drawcount, GLsizei stride); +GL_APICALL void GL_APIENTRY glMultiDrawMeshTasksIndirectCountNV (GLintptr indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride); +#endif +#endif /* GL_NV_mesh_shader */ + +#ifndef GL_NV_non_square_matrices +#define GL_NV_non_square_matrices 1 +#define GL_FLOAT_MAT2x3_NV 0x8B65 +#define GL_FLOAT_MAT2x4_NV 0x8B66 +#define GL_FLOAT_MAT3x2_NV 0x8B67 +#define GL_FLOAT_MAT3x4_NV 0x8B68 +#define GL_FLOAT_MAT4x2_NV 0x8B69 +#define GL_FLOAT_MAT4x3_NV 0x8B6A +typedef void (GL_APIENTRYP PFNGLUNIFORMMATRIX2X3FVNVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (GL_APIENTRYP PFNGLUNIFORMMATRIX3X2FVNVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (GL_APIENTRYP PFNGLUNIFORMMATRIX2X4FVNVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (GL_APIENTRYP PFNGLUNIFORMMATRIX4X2FVNVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (GL_APIENTRYP PFNGLUNIFORMMATRIX3X4FVNVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (GL_APIENTRYP PFNGLUNIFORMMATRIX4X3FVNVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glUniformMatrix2x3fvNV (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GL_APICALL void GL_APIENTRY glUniformMatrix3x2fvNV (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GL_APICALL void GL_APIENTRY glUniformMatrix2x4fvNV (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GL_APICALL void GL_APIENTRY glUniformMatrix4x2fvNV (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GL_APICALL void GL_APIENTRY glUniformMatrix3x4fvNV (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +GL_APICALL void GL_APIENTRY glUniformMatrix4x3fvNV (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +#endif +#endif /* GL_NV_non_square_matrices */ + +#ifndef GL_NV_path_rendering +#define GL_NV_path_rendering 1 +typedef double GLdouble; +#define GL_PATH_FORMAT_SVG_NV 0x9070 +#define GL_PATH_FORMAT_PS_NV 0x9071 +#define GL_STANDARD_FONT_NAME_NV 0x9072 +#define GL_SYSTEM_FONT_NAME_NV 0x9073 +#define GL_FILE_NAME_NV 0x9074 +#define GL_PATH_STROKE_WIDTH_NV 0x9075 +#define GL_PATH_END_CAPS_NV 0x9076 +#define GL_PATH_INITIAL_END_CAP_NV 0x9077 +#define GL_PATH_TERMINAL_END_CAP_NV 0x9078 +#define GL_PATH_JOIN_STYLE_NV 0x9079 +#define GL_PATH_MITER_LIMIT_NV 0x907A +#define GL_PATH_DASH_CAPS_NV 0x907B +#define GL_PATH_INITIAL_DASH_CAP_NV 0x907C +#define GL_PATH_TERMINAL_DASH_CAP_NV 0x907D +#define GL_PATH_DASH_OFFSET_NV 0x907E +#define GL_PATH_CLIENT_LENGTH_NV 0x907F +#define GL_PATH_FILL_MODE_NV 0x9080 +#define GL_PATH_FILL_MASK_NV 0x9081 +#define GL_PATH_FILL_COVER_MODE_NV 0x9082 +#define GL_PATH_STROKE_COVER_MODE_NV 0x9083 +#define GL_PATH_STROKE_MASK_NV 0x9084 +#define GL_COUNT_UP_NV 0x9088 +#define GL_COUNT_DOWN_NV 0x9089 +#define GL_PATH_OBJECT_BOUNDING_BOX_NV 0x908A +#define GL_CONVEX_HULL_NV 0x908B +#define GL_BOUNDING_BOX_NV 0x908D +#define GL_TRANSLATE_X_NV 0x908E +#define GL_TRANSLATE_Y_NV 0x908F +#define GL_TRANSLATE_2D_NV 0x9090 +#define GL_TRANSLATE_3D_NV 0x9091 +#define GL_AFFINE_2D_NV 0x9092 +#define GL_AFFINE_3D_NV 0x9094 +#define GL_TRANSPOSE_AFFINE_2D_NV 0x9096 +#define GL_TRANSPOSE_AFFINE_3D_NV 0x9098 +#define GL_UTF8_NV 0x909A +#define GL_UTF16_NV 0x909B +#define GL_BOUNDING_BOX_OF_BOUNDING_BOXES_NV 0x909C +#define GL_PATH_COMMAND_COUNT_NV 0x909D +#define GL_PATH_COORD_COUNT_NV 0x909E +#define GL_PATH_DASH_ARRAY_COUNT_NV 0x909F +#define GL_PATH_COMPUTED_LENGTH_NV 0x90A0 +#define GL_PATH_FILL_BOUNDING_BOX_NV 0x90A1 +#define GL_PATH_STROKE_BOUNDING_BOX_NV 0x90A2 +#define GL_SQUARE_NV 0x90A3 +#define GL_ROUND_NV 0x90A4 +#define GL_TRIANGULAR_NV 0x90A5 +#define GL_BEVEL_NV 0x90A6 +#define GL_MITER_REVERT_NV 0x90A7 +#define GL_MITER_TRUNCATE_NV 0x90A8 +#define GL_SKIP_MISSING_GLYPH_NV 0x90A9 +#define GL_USE_MISSING_GLYPH_NV 0x90AA +#define GL_PATH_ERROR_POSITION_NV 0x90AB +#define GL_ACCUM_ADJACENT_PAIRS_NV 0x90AD +#define GL_ADJACENT_PAIRS_NV 0x90AE +#define GL_FIRST_TO_REST_NV 0x90AF +#define GL_PATH_GEN_MODE_NV 0x90B0 +#define GL_PATH_GEN_COEFF_NV 0x90B1 +#define GL_PATH_GEN_COMPONENTS_NV 0x90B3 +#define GL_PATH_STENCIL_FUNC_NV 0x90B7 +#define GL_PATH_STENCIL_REF_NV 0x90B8 +#define GL_PATH_STENCIL_VALUE_MASK_NV 0x90B9 +#define GL_PATH_STENCIL_DEPTH_OFFSET_FACTOR_NV 0x90BD +#define GL_PATH_STENCIL_DEPTH_OFFSET_UNITS_NV 0x90BE +#define GL_PATH_COVER_DEPTH_FUNC_NV 0x90BF +#define GL_PATH_DASH_OFFSET_RESET_NV 0x90B4 +#define GL_MOVE_TO_RESETS_NV 0x90B5 +#define GL_MOVE_TO_CONTINUES_NV 0x90B6 +#define GL_CLOSE_PATH_NV 0x00 +#define GL_MOVE_TO_NV 0x02 +#define GL_RELATIVE_MOVE_TO_NV 0x03 +#define GL_LINE_TO_NV 0x04 +#define GL_RELATIVE_LINE_TO_NV 0x05 +#define GL_HORIZONTAL_LINE_TO_NV 0x06 +#define GL_RELATIVE_HORIZONTAL_LINE_TO_NV 0x07 +#define GL_VERTICAL_LINE_TO_NV 0x08 +#define GL_RELATIVE_VERTICAL_LINE_TO_NV 0x09 +#define GL_QUADRATIC_CURVE_TO_NV 0x0A +#define GL_RELATIVE_QUADRATIC_CURVE_TO_NV 0x0B +#define GL_CUBIC_CURVE_TO_NV 0x0C +#define GL_RELATIVE_CUBIC_CURVE_TO_NV 0x0D +#define GL_SMOOTH_QUADRATIC_CURVE_TO_NV 0x0E +#define GL_RELATIVE_SMOOTH_QUADRATIC_CURVE_TO_NV 0x0F +#define GL_SMOOTH_CUBIC_CURVE_TO_NV 0x10 +#define GL_RELATIVE_SMOOTH_CUBIC_CURVE_TO_NV 0x11 +#define GL_SMALL_CCW_ARC_TO_NV 0x12 +#define GL_RELATIVE_SMALL_CCW_ARC_TO_NV 0x13 +#define GL_SMALL_CW_ARC_TO_NV 0x14 +#define GL_RELATIVE_SMALL_CW_ARC_TO_NV 0x15 +#define GL_LARGE_CCW_ARC_TO_NV 0x16 +#define GL_RELATIVE_LARGE_CCW_ARC_TO_NV 0x17 +#define GL_LARGE_CW_ARC_TO_NV 0x18 +#define GL_RELATIVE_LARGE_CW_ARC_TO_NV 0x19 +#define GL_RESTART_PATH_NV 0xF0 +#define GL_DUP_FIRST_CUBIC_CURVE_TO_NV 0xF2 +#define GL_DUP_LAST_CUBIC_CURVE_TO_NV 0xF4 +#define GL_RECT_NV 0xF6 +#define GL_CIRCULAR_CCW_ARC_TO_NV 0xF8 +#define GL_CIRCULAR_CW_ARC_TO_NV 0xFA +#define GL_CIRCULAR_TANGENT_ARC_TO_NV 0xFC +#define GL_ARC_TO_NV 0xFE +#define GL_RELATIVE_ARC_TO_NV 0xFF +#define GL_BOLD_BIT_NV 0x01 +#define GL_ITALIC_BIT_NV 0x02 +#define GL_GLYPH_WIDTH_BIT_NV 0x01 +#define GL_GLYPH_HEIGHT_BIT_NV 0x02 +#define GL_GLYPH_HORIZONTAL_BEARING_X_BIT_NV 0x04 +#define GL_GLYPH_HORIZONTAL_BEARING_Y_BIT_NV 0x08 +#define GL_GLYPH_HORIZONTAL_BEARING_ADVANCE_BIT_NV 0x10 +#define GL_GLYPH_VERTICAL_BEARING_X_BIT_NV 0x20 +#define GL_GLYPH_VERTICAL_BEARING_Y_BIT_NV 0x40 +#define GL_GLYPH_VERTICAL_BEARING_ADVANCE_BIT_NV 0x80 +#define GL_GLYPH_HAS_KERNING_BIT_NV 0x100 +#define GL_FONT_X_MIN_BOUNDS_BIT_NV 0x00010000 +#define GL_FONT_Y_MIN_BOUNDS_BIT_NV 0x00020000 +#define GL_FONT_X_MAX_BOUNDS_BIT_NV 0x00040000 +#define GL_FONT_Y_MAX_BOUNDS_BIT_NV 0x00080000 +#define GL_FONT_UNITS_PER_EM_BIT_NV 0x00100000 +#define GL_FONT_ASCENDER_BIT_NV 0x00200000 +#define GL_FONT_DESCENDER_BIT_NV 0x00400000 +#define GL_FONT_HEIGHT_BIT_NV 0x00800000 +#define GL_FONT_MAX_ADVANCE_WIDTH_BIT_NV 0x01000000 +#define GL_FONT_MAX_ADVANCE_HEIGHT_BIT_NV 0x02000000 +#define GL_FONT_UNDERLINE_POSITION_BIT_NV 0x04000000 +#define GL_FONT_UNDERLINE_THICKNESS_BIT_NV 0x08000000 +#define GL_FONT_HAS_KERNING_BIT_NV 0x10000000 +#define GL_ROUNDED_RECT_NV 0xE8 +#define GL_RELATIVE_ROUNDED_RECT_NV 0xE9 +#define GL_ROUNDED_RECT2_NV 0xEA +#define GL_RELATIVE_ROUNDED_RECT2_NV 0xEB +#define GL_ROUNDED_RECT4_NV 0xEC +#define GL_RELATIVE_ROUNDED_RECT4_NV 0xED +#define GL_ROUNDED_RECT8_NV 0xEE +#define GL_RELATIVE_ROUNDED_RECT8_NV 0xEF +#define GL_RELATIVE_RECT_NV 0xF7 +#define GL_FONT_GLYPHS_AVAILABLE_NV 0x9368 +#define GL_FONT_TARGET_UNAVAILABLE_NV 0x9369 +#define GL_FONT_UNAVAILABLE_NV 0x936A +#define GL_FONT_UNINTELLIGIBLE_NV 0x936B +#define GL_CONIC_CURVE_TO_NV 0x1A +#define GL_RELATIVE_CONIC_CURVE_TO_NV 0x1B +#define GL_FONT_NUM_GLYPH_INDICES_BIT_NV 0x20000000 +#define GL_STANDARD_FONT_FORMAT_NV 0x936C +#define GL_PATH_PROJECTION_NV 0x1701 +#define GL_PATH_MODELVIEW_NV 0x1700 +#define GL_PATH_MODELVIEW_STACK_DEPTH_NV 0x0BA3 +#define GL_PATH_MODELVIEW_MATRIX_NV 0x0BA6 +#define GL_PATH_MAX_MODELVIEW_STACK_DEPTH_NV 0x0D36 +#define GL_PATH_TRANSPOSE_MODELVIEW_MATRIX_NV 0x84E3 +#define GL_PATH_PROJECTION_STACK_DEPTH_NV 0x0BA4 +#define GL_PATH_PROJECTION_MATRIX_NV 0x0BA7 +#define GL_PATH_MAX_PROJECTION_STACK_DEPTH_NV 0x0D38 +#define GL_PATH_TRANSPOSE_PROJECTION_MATRIX_NV 0x84E4 +#define GL_FRAGMENT_INPUT_NV 0x936D +typedef GLuint (GL_APIENTRYP PFNGLGENPATHSNVPROC) (GLsizei range); +typedef void (GL_APIENTRYP PFNGLDELETEPATHSNVPROC) (GLuint path, GLsizei range); +typedef GLboolean (GL_APIENTRYP PFNGLISPATHNVPROC) (GLuint path); +typedef void (GL_APIENTRYP PFNGLPATHCOMMANDSNVPROC) (GLuint path, GLsizei numCommands, const GLubyte *commands, GLsizei numCoords, GLenum coordType, const void *coords); +typedef void (GL_APIENTRYP PFNGLPATHCOORDSNVPROC) (GLuint path, GLsizei numCoords, GLenum coordType, const void *coords); +typedef void (GL_APIENTRYP PFNGLPATHSUBCOMMANDSNVPROC) (GLuint path, GLsizei commandStart, GLsizei commandsToDelete, GLsizei numCommands, const GLubyte *commands, GLsizei numCoords, GLenum coordType, const void *coords); +typedef void (GL_APIENTRYP PFNGLPATHSUBCOORDSNVPROC) (GLuint path, GLsizei coordStart, GLsizei numCoords, GLenum coordType, const void *coords); +typedef void (GL_APIENTRYP PFNGLPATHSTRINGNVPROC) (GLuint path, GLenum format, GLsizei length, const void *pathString); +typedef void (GL_APIENTRYP PFNGLPATHGLYPHSNVPROC) (GLuint firstPathName, GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLsizei numGlyphs, GLenum type, const void *charcodes, GLenum handleMissingGlyphs, GLuint pathParameterTemplate, GLfloat emScale); +typedef void (GL_APIENTRYP PFNGLPATHGLYPHRANGENVPROC) (GLuint firstPathName, GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLuint firstGlyph, GLsizei numGlyphs, GLenum handleMissingGlyphs, GLuint pathParameterTemplate, GLfloat emScale); +typedef void (GL_APIENTRYP PFNGLWEIGHTPATHSNVPROC) (GLuint resultPath, GLsizei numPaths, const GLuint *paths, const GLfloat *weights); +typedef void (GL_APIENTRYP PFNGLCOPYPATHNVPROC) (GLuint resultPath, GLuint srcPath); +typedef void (GL_APIENTRYP PFNGLINTERPOLATEPATHSNVPROC) (GLuint resultPath, GLuint pathA, GLuint pathB, GLfloat weight); +typedef void (GL_APIENTRYP PFNGLTRANSFORMPATHNVPROC) (GLuint resultPath, GLuint srcPath, GLenum transformType, const GLfloat *transformValues); +typedef void (GL_APIENTRYP PFNGLPATHPARAMETERIVNVPROC) (GLuint path, GLenum pname, const GLint *value); +typedef void (GL_APIENTRYP PFNGLPATHPARAMETERINVPROC) (GLuint path, GLenum pname, GLint value); +typedef void (GL_APIENTRYP PFNGLPATHPARAMETERFVNVPROC) (GLuint path, GLenum pname, const GLfloat *value); +typedef void (GL_APIENTRYP PFNGLPATHPARAMETERFNVPROC) (GLuint path, GLenum pname, GLfloat value); +typedef void (GL_APIENTRYP PFNGLPATHDASHARRAYNVPROC) (GLuint path, GLsizei dashCount, const GLfloat *dashArray); +typedef void (GL_APIENTRYP PFNGLPATHSTENCILFUNCNVPROC) (GLenum func, GLint ref, GLuint mask); +typedef void (GL_APIENTRYP PFNGLPATHSTENCILDEPTHOFFSETNVPROC) (GLfloat factor, GLfloat units); +typedef void (GL_APIENTRYP PFNGLSTENCILFILLPATHNVPROC) (GLuint path, GLenum fillMode, GLuint mask); +typedef void (GL_APIENTRYP PFNGLSTENCILSTROKEPATHNVPROC) (GLuint path, GLint reference, GLuint mask); +typedef void (GL_APIENTRYP PFNGLSTENCILFILLPATHINSTANCEDNVPROC) (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum fillMode, GLuint mask, GLenum transformType, const GLfloat *transformValues); +typedef void (GL_APIENTRYP PFNGLSTENCILSTROKEPATHINSTANCEDNVPROC) (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLint reference, GLuint mask, GLenum transformType, const GLfloat *transformValues); +typedef void (GL_APIENTRYP PFNGLPATHCOVERDEPTHFUNCNVPROC) (GLenum func); +typedef void (GL_APIENTRYP PFNGLCOVERFILLPATHNVPROC) (GLuint path, GLenum coverMode); +typedef void (GL_APIENTRYP PFNGLCOVERSTROKEPATHNVPROC) (GLuint path, GLenum coverMode); +typedef void (GL_APIENTRYP PFNGLCOVERFILLPATHINSTANCEDNVPROC) (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum coverMode, GLenum transformType, const GLfloat *transformValues); +typedef void (GL_APIENTRYP PFNGLCOVERSTROKEPATHINSTANCEDNVPROC) (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum coverMode, GLenum transformType, const GLfloat *transformValues); +typedef void (GL_APIENTRYP PFNGLGETPATHPARAMETERIVNVPROC) (GLuint path, GLenum pname, GLint *value); +typedef void (GL_APIENTRYP PFNGLGETPATHPARAMETERFVNVPROC) (GLuint path, GLenum pname, GLfloat *value); +typedef void (GL_APIENTRYP PFNGLGETPATHCOMMANDSNVPROC) (GLuint path, GLubyte *commands); +typedef void (GL_APIENTRYP PFNGLGETPATHCOORDSNVPROC) (GLuint path, GLfloat *coords); +typedef void (GL_APIENTRYP PFNGLGETPATHDASHARRAYNVPROC) (GLuint path, GLfloat *dashArray); +typedef void (GL_APIENTRYP PFNGLGETPATHMETRICSNVPROC) (GLbitfield metricQueryMask, GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLsizei stride, GLfloat *metrics); +typedef void (GL_APIENTRYP PFNGLGETPATHMETRICRANGENVPROC) (GLbitfield metricQueryMask, GLuint firstPathName, GLsizei numPaths, GLsizei stride, GLfloat *metrics); +typedef void (GL_APIENTRYP PFNGLGETPATHSPACINGNVPROC) (GLenum pathListMode, GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLfloat advanceScale, GLfloat kerningScale, GLenum transformType, GLfloat *returnedSpacing); +typedef GLboolean (GL_APIENTRYP PFNGLISPOINTINFILLPATHNVPROC) (GLuint path, GLuint mask, GLfloat x, GLfloat y); +typedef GLboolean (GL_APIENTRYP PFNGLISPOINTINSTROKEPATHNVPROC) (GLuint path, GLfloat x, GLfloat y); +typedef GLfloat (GL_APIENTRYP PFNGLGETPATHLENGTHNVPROC) (GLuint path, GLsizei startSegment, GLsizei numSegments); +typedef GLboolean (GL_APIENTRYP PFNGLPOINTALONGPATHNVPROC) (GLuint path, GLsizei startSegment, GLsizei numSegments, GLfloat distance, GLfloat *x, GLfloat *y, GLfloat *tangentX, GLfloat *tangentY); +typedef void (GL_APIENTRYP PFNGLMATRIXLOAD3X2FNVPROC) (GLenum matrixMode, const GLfloat *m); +typedef void (GL_APIENTRYP PFNGLMATRIXLOAD3X3FNVPROC) (GLenum matrixMode, const GLfloat *m); +typedef void (GL_APIENTRYP PFNGLMATRIXLOADTRANSPOSE3X3FNVPROC) (GLenum matrixMode, const GLfloat *m); +typedef void (GL_APIENTRYP PFNGLMATRIXMULT3X2FNVPROC) (GLenum matrixMode, const GLfloat *m); +typedef void (GL_APIENTRYP PFNGLMATRIXMULT3X3FNVPROC) (GLenum matrixMode, const GLfloat *m); +typedef void (GL_APIENTRYP PFNGLMATRIXMULTTRANSPOSE3X3FNVPROC) (GLenum matrixMode, const GLfloat *m); +typedef void (GL_APIENTRYP PFNGLSTENCILTHENCOVERFILLPATHNVPROC) (GLuint path, GLenum fillMode, GLuint mask, GLenum coverMode); +typedef void (GL_APIENTRYP PFNGLSTENCILTHENCOVERSTROKEPATHNVPROC) (GLuint path, GLint reference, GLuint mask, GLenum coverMode); +typedef void (GL_APIENTRYP PFNGLSTENCILTHENCOVERFILLPATHINSTANCEDNVPROC) (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum fillMode, GLuint mask, GLenum coverMode, GLenum transformType, const GLfloat *transformValues); +typedef void (GL_APIENTRYP PFNGLSTENCILTHENCOVERSTROKEPATHINSTANCEDNVPROC) (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLint reference, GLuint mask, GLenum coverMode, GLenum transformType, const GLfloat *transformValues); +typedef GLenum (GL_APIENTRYP PFNGLPATHGLYPHINDEXRANGENVPROC) (GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLuint pathParameterTemplate, GLfloat emScale, GLuint *baseAndCount); +typedef GLenum (GL_APIENTRYP PFNGLPATHGLYPHINDEXARRAYNVPROC) (GLuint firstPathName, GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLuint firstGlyphIndex, GLsizei numGlyphs, GLuint pathParameterTemplate, GLfloat emScale); +typedef GLenum (GL_APIENTRYP PFNGLPATHMEMORYGLYPHINDEXARRAYNVPROC) (GLuint firstPathName, GLenum fontTarget, GLsizeiptr fontSize, const void *fontData, GLsizei faceIndex, GLuint firstGlyphIndex, GLsizei numGlyphs, GLuint pathParameterTemplate, GLfloat emScale); +typedef void (GL_APIENTRYP PFNGLPROGRAMPATHFRAGMENTINPUTGENNVPROC) (GLuint program, GLint location, GLenum genMode, GLint components, const GLfloat *coeffs); +typedef void (GL_APIENTRYP PFNGLGETPROGRAMRESOURCEFVNVPROC) (GLuint program, GLenum programInterface, GLuint index, GLsizei propCount, const GLenum *props, GLsizei count, GLsizei *length, GLfloat *params); +typedef void (GL_APIENTRYP PFNGLMATRIXFRUSTUMEXTPROC) (GLenum mode, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); +typedef void (GL_APIENTRYP PFNGLMATRIXLOADIDENTITYEXTPROC) (GLenum mode); +typedef void (GL_APIENTRYP PFNGLMATRIXLOADTRANSPOSEFEXTPROC) (GLenum mode, const GLfloat *m); +typedef void (GL_APIENTRYP PFNGLMATRIXLOADTRANSPOSEDEXTPROC) (GLenum mode, const GLdouble *m); +typedef void (GL_APIENTRYP PFNGLMATRIXLOADFEXTPROC) (GLenum mode, const GLfloat *m); +typedef void (GL_APIENTRYP PFNGLMATRIXLOADDEXTPROC) (GLenum mode, const GLdouble *m); +typedef void (GL_APIENTRYP PFNGLMATRIXMULTTRANSPOSEFEXTPROC) (GLenum mode, const GLfloat *m); +typedef void (GL_APIENTRYP PFNGLMATRIXMULTTRANSPOSEDEXTPROC) (GLenum mode, const GLdouble *m); +typedef void (GL_APIENTRYP PFNGLMATRIXMULTFEXTPROC) (GLenum mode, const GLfloat *m); +typedef void (GL_APIENTRYP PFNGLMATRIXMULTDEXTPROC) (GLenum mode, const GLdouble *m); +typedef void (GL_APIENTRYP PFNGLMATRIXORTHOEXTPROC) (GLenum mode, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); +typedef void (GL_APIENTRYP PFNGLMATRIXPOPEXTPROC) (GLenum mode); +typedef void (GL_APIENTRYP PFNGLMATRIXPUSHEXTPROC) (GLenum mode); +typedef void (GL_APIENTRYP PFNGLMATRIXROTATEFEXTPROC) (GLenum mode, GLfloat angle, GLfloat x, GLfloat y, GLfloat z); +typedef void (GL_APIENTRYP PFNGLMATRIXROTATEDEXTPROC) (GLenum mode, GLdouble angle, GLdouble x, GLdouble y, GLdouble z); +typedef void (GL_APIENTRYP PFNGLMATRIXSCALEFEXTPROC) (GLenum mode, GLfloat x, GLfloat y, GLfloat z); +typedef void (GL_APIENTRYP PFNGLMATRIXSCALEDEXTPROC) (GLenum mode, GLdouble x, GLdouble y, GLdouble z); +typedef void (GL_APIENTRYP PFNGLMATRIXTRANSLATEFEXTPROC) (GLenum mode, GLfloat x, GLfloat y, GLfloat z); +typedef void (GL_APIENTRYP PFNGLMATRIXTRANSLATEDEXTPROC) (GLenum mode, GLdouble x, GLdouble y, GLdouble z); +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL GLuint GL_APIENTRY glGenPathsNV (GLsizei range); +GL_APICALL void GL_APIENTRY glDeletePathsNV (GLuint path, GLsizei range); +GL_APICALL GLboolean GL_APIENTRY glIsPathNV (GLuint path); +GL_APICALL void GL_APIENTRY glPathCommandsNV (GLuint path, GLsizei numCommands, const GLubyte *commands, GLsizei numCoords, GLenum coordType, const void *coords); +GL_APICALL void GL_APIENTRY glPathCoordsNV (GLuint path, GLsizei numCoords, GLenum coordType, const void *coords); +GL_APICALL void GL_APIENTRY glPathSubCommandsNV (GLuint path, GLsizei commandStart, GLsizei commandsToDelete, GLsizei numCommands, const GLubyte *commands, GLsizei numCoords, GLenum coordType, const void *coords); +GL_APICALL void GL_APIENTRY glPathSubCoordsNV (GLuint path, GLsizei coordStart, GLsizei numCoords, GLenum coordType, const void *coords); +GL_APICALL void GL_APIENTRY glPathStringNV (GLuint path, GLenum format, GLsizei length, const void *pathString); +GL_APICALL void GL_APIENTRY glPathGlyphsNV (GLuint firstPathName, GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLsizei numGlyphs, GLenum type, const void *charcodes, GLenum handleMissingGlyphs, GLuint pathParameterTemplate, GLfloat emScale); +GL_APICALL void GL_APIENTRY glPathGlyphRangeNV (GLuint firstPathName, GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLuint firstGlyph, GLsizei numGlyphs, GLenum handleMissingGlyphs, GLuint pathParameterTemplate, GLfloat emScale); +GL_APICALL void GL_APIENTRY glWeightPathsNV (GLuint resultPath, GLsizei numPaths, const GLuint *paths, const GLfloat *weights); +GL_APICALL void GL_APIENTRY glCopyPathNV (GLuint resultPath, GLuint srcPath); +GL_APICALL void GL_APIENTRY glInterpolatePathsNV (GLuint resultPath, GLuint pathA, GLuint pathB, GLfloat weight); +GL_APICALL void GL_APIENTRY glTransformPathNV (GLuint resultPath, GLuint srcPath, GLenum transformType, const GLfloat *transformValues); +GL_APICALL void GL_APIENTRY glPathParameterivNV (GLuint path, GLenum pname, const GLint *value); +GL_APICALL void GL_APIENTRY glPathParameteriNV (GLuint path, GLenum pname, GLint value); +GL_APICALL void GL_APIENTRY glPathParameterfvNV (GLuint path, GLenum pname, const GLfloat *value); +GL_APICALL void GL_APIENTRY glPathParameterfNV (GLuint path, GLenum pname, GLfloat value); +GL_APICALL void GL_APIENTRY glPathDashArrayNV (GLuint path, GLsizei dashCount, const GLfloat *dashArray); +GL_APICALL void GL_APIENTRY glPathStencilFuncNV (GLenum func, GLint ref, GLuint mask); +GL_APICALL void GL_APIENTRY glPathStencilDepthOffsetNV (GLfloat factor, GLfloat units); +GL_APICALL void GL_APIENTRY glStencilFillPathNV (GLuint path, GLenum fillMode, GLuint mask); +GL_APICALL void GL_APIENTRY glStencilStrokePathNV (GLuint path, GLint reference, GLuint mask); +GL_APICALL void GL_APIENTRY glStencilFillPathInstancedNV (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum fillMode, GLuint mask, GLenum transformType, const GLfloat *transformValues); +GL_APICALL void GL_APIENTRY glStencilStrokePathInstancedNV (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLint reference, GLuint mask, GLenum transformType, const GLfloat *transformValues); +GL_APICALL void GL_APIENTRY glPathCoverDepthFuncNV (GLenum func); +GL_APICALL void GL_APIENTRY glCoverFillPathNV (GLuint path, GLenum coverMode); +GL_APICALL void GL_APIENTRY glCoverStrokePathNV (GLuint path, GLenum coverMode); +GL_APICALL void GL_APIENTRY glCoverFillPathInstancedNV (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum coverMode, GLenum transformType, const GLfloat *transformValues); +GL_APICALL void GL_APIENTRY glCoverStrokePathInstancedNV (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum coverMode, GLenum transformType, const GLfloat *transformValues); +GL_APICALL void GL_APIENTRY glGetPathParameterivNV (GLuint path, GLenum pname, GLint *value); +GL_APICALL void GL_APIENTRY glGetPathParameterfvNV (GLuint path, GLenum pname, GLfloat *value); +GL_APICALL void GL_APIENTRY glGetPathCommandsNV (GLuint path, GLubyte *commands); +GL_APICALL void GL_APIENTRY glGetPathCoordsNV (GLuint path, GLfloat *coords); +GL_APICALL void GL_APIENTRY glGetPathDashArrayNV (GLuint path, GLfloat *dashArray); +GL_APICALL void GL_APIENTRY glGetPathMetricsNV (GLbitfield metricQueryMask, GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLsizei stride, GLfloat *metrics); +GL_APICALL void GL_APIENTRY glGetPathMetricRangeNV (GLbitfield metricQueryMask, GLuint firstPathName, GLsizei numPaths, GLsizei stride, GLfloat *metrics); +GL_APICALL void GL_APIENTRY glGetPathSpacingNV (GLenum pathListMode, GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLfloat advanceScale, GLfloat kerningScale, GLenum transformType, GLfloat *returnedSpacing); +GL_APICALL GLboolean GL_APIENTRY glIsPointInFillPathNV (GLuint path, GLuint mask, GLfloat x, GLfloat y); +GL_APICALL GLboolean GL_APIENTRY glIsPointInStrokePathNV (GLuint path, GLfloat x, GLfloat y); +GL_APICALL GLfloat GL_APIENTRY glGetPathLengthNV (GLuint path, GLsizei startSegment, GLsizei numSegments); +GL_APICALL GLboolean GL_APIENTRY glPointAlongPathNV (GLuint path, GLsizei startSegment, GLsizei numSegments, GLfloat distance, GLfloat *x, GLfloat *y, GLfloat *tangentX, GLfloat *tangentY); +GL_APICALL void GL_APIENTRY glMatrixLoad3x2fNV (GLenum matrixMode, const GLfloat *m); +GL_APICALL void GL_APIENTRY glMatrixLoad3x3fNV (GLenum matrixMode, const GLfloat *m); +GL_APICALL void GL_APIENTRY glMatrixLoadTranspose3x3fNV (GLenum matrixMode, const GLfloat *m); +GL_APICALL void GL_APIENTRY glMatrixMult3x2fNV (GLenum matrixMode, const GLfloat *m); +GL_APICALL void GL_APIENTRY glMatrixMult3x3fNV (GLenum matrixMode, const GLfloat *m); +GL_APICALL void GL_APIENTRY glMatrixMultTranspose3x3fNV (GLenum matrixMode, const GLfloat *m); +GL_APICALL void GL_APIENTRY glStencilThenCoverFillPathNV (GLuint path, GLenum fillMode, GLuint mask, GLenum coverMode); +GL_APICALL void GL_APIENTRY glStencilThenCoverStrokePathNV (GLuint path, GLint reference, GLuint mask, GLenum coverMode); +GL_APICALL void GL_APIENTRY glStencilThenCoverFillPathInstancedNV (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum fillMode, GLuint mask, GLenum coverMode, GLenum transformType, const GLfloat *transformValues); +GL_APICALL void GL_APIENTRY glStencilThenCoverStrokePathInstancedNV (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLint reference, GLuint mask, GLenum coverMode, GLenum transformType, const GLfloat *transformValues); +GL_APICALL GLenum GL_APIENTRY glPathGlyphIndexRangeNV (GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLuint pathParameterTemplate, GLfloat emScale, GLuint *baseAndCount); +GL_APICALL GLenum GL_APIENTRY glPathGlyphIndexArrayNV (GLuint firstPathName, GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLuint firstGlyphIndex, GLsizei numGlyphs, GLuint pathParameterTemplate, GLfloat emScale); +GL_APICALL GLenum GL_APIENTRY glPathMemoryGlyphIndexArrayNV (GLuint firstPathName, GLenum fontTarget, GLsizeiptr fontSize, const void *fontData, GLsizei faceIndex, GLuint firstGlyphIndex, GLsizei numGlyphs, GLuint pathParameterTemplate, GLfloat emScale); +GL_APICALL void GL_APIENTRY glProgramPathFragmentInputGenNV (GLuint program, GLint location, GLenum genMode, GLint components, const GLfloat *coeffs); +GL_APICALL void GL_APIENTRY glGetProgramResourcefvNV (GLuint program, GLenum programInterface, GLuint index, GLsizei propCount, const GLenum *props, GLsizei count, GLsizei *length, GLfloat *params); +GL_APICALL void GL_APIENTRY glMatrixFrustumEXT (GLenum mode, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); +GL_APICALL void GL_APIENTRY glMatrixLoadIdentityEXT (GLenum mode); +GL_APICALL void GL_APIENTRY glMatrixLoadTransposefEXT (GLenum mode, const GLfloat *m); +GL_APICALL void GL_APIENTRY glMatrixLoadTransposedEXT (GLenum mode, const GLdouble *m); +GL_APICALL void GL_APIENTRY glMatrixLoadfEXT (GLenum mode, const GLfloat *m); +GL_APICALL void GL_APIENTRY glMatrixLoaddEXT (GLenum mode, const GLdouble *m); +GL_APICALL void GL_APIENTRY glMatrixMultTransposefEXT (GLenum mode, const GLfloat *m); +GL_APICALL void GL_APIENTRY glMatrixMultTransposedEXT (GLenum mode, const GLdouble *m); +GL_APICALL void GL_APIENTRY glMatrixMultfEXT (GLenum mode, const GLfloat *m); +GL_APICALL void GL_APIENTRY glMatrixMultdEXT (GLenum mode, const GLdouble *m); +GL_APICALL void GL_APIENTRY glMatrixOrthoEXT (GLenum mode, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); +GL_APICALL void GL_APIENTRY glMatrixPopEXT (GLenum mode); +GL_APICALL void GL_APIENTRY glMatrixPushEXT (GLenum mode); +GL_APICALL void GL_APIENTRY glMatrixRotatefEXT (GLenum mode, GLfloat angle, GLfloat x, GLfloat y, GLfloat z); +GL_APICALL void GL_APIENTRY glMatrixRotatedEXT (GLenum mode, GLdouble angle, GLdouble x, GLdouble y, GLdouble z); +GL_APICALL void GL_APIENTRY glMatrixScalefEXT (GLenum mode, GLfloat x, GLfloat y, GLfloat z); +GL_APICALL void GL_APIENTRY glMatrixScaledEXT (GLenum mode, GLdouble x, GLdouble y, GLdouble z); +GL_APICALL void GL_APIENTRY glMatrixTranslatefEXT (GLenum mode, GLfloat x, GLfloat y, GLfloat z); +GL_APICALL void GL_APIENTRY glMatrixTranslatedEXT (GLenum mode, GLdouble x, GLdouble y, GLdouble z); +#endif +#endif /* GL_NV_path_rendering */ + +#ifndef GL_NV_path_rendering_shared_edge +#define GL_NV_path_rendering_shared_edge 1 +#define GL_SHARED_EDGE_NV 0xC0 +#endif /* GL_NV_path_rendering_shared_edge */ + +#ifndef GL_NV_pixel_buffer_object +#define GL_NV_pixel_buffer_object 1 +#define GL_PIXEL_PACK_BUFFER_NV 0x88EB +#define GL_PIXEL_UNPACK_BUFFER_NV 0x88EC +#define GL_PIXEL_PACK_BUFFER_BINDING_NV 0x88ED +#define GL_PIXEL_UNPACK_BUFFER_BINDING_NV 0x88EF +#endif /* GL_NV_pixel_buffer_object */ + +#ifndef GL_NV_polygon_mode +#define GL_NV_polygon_mode 1 +#define GL_POLYGON_MODE_NV 0x0B40 +#define GL_POLYGON_OFFSET_POINT_NV 0x2A01 +#define GL_POLYGON_OFFSET_LINE_NV 0x2A02 +#define GL_POINT_NV 0x1B00 +#define GL_LINE_NV 0x1B01 +#define GL_FILL_NV 0x1B02 +typedef void (GL_APIENTRYP PFNGLPOLYGONMODENVPROC) (GLenum face, GLenum mode); +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glPolygonModeNV (GLenum face, GLenum mode); +#endif +#endif /* GL_NV_polygon_mode */ + +#ifndef GL_NV_primitive_shading_rate +#define GL_NV_primitive_shading_rate 1 +#define GL_SHADING_RATE_IMAGE_PER_PRIMITIVE_NV 0x95B1 +#define GL_SHADING_RATE_IMAGE_PALETTE_COUNT_NV 0x95B2 +#endif /* GL_NV_primitive_shading_rate */ + +#ifndef GL_NV_read_buffer +#define GL_NV_read_buffer 1 +#define GL_READ_BUFFER_NV 0x0C02 +typedef void (GL_APIENTRYP PFNGLREADBUFFERNVPROC) (GLenum mode); +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glReadBufferNV (GLenum mode); +#endif +#endif /* GL_NV_read_buffer */ + +#ifndef GL_NV_read_buffer_front +#define GL_NV_read_buffer_front 1 +#endif /* GL_NV_read_buffer_front */ + +#ifndef GL_NV_read_depth +#define GL_NV_read_depth 1 +#endif /* GL_NV_read_depth */ + +#ifndef GL_NV_read_depth_stencil +#define GL_NV_read_depth_stencil 1 +#endif /* GL_NV_read_depth_stencil */ + +#ifndef GL_NV_read_stencil +#define GL_NV_read_stencil 1 +#endif /* GL_NV_read_stencil */ + +#ifndef GL_NV_representative_fragment_test +#define GL_NV_representative_fragment_test 1 +#define GL_REPRESENTATIVE_FRAGMENT_TEST_NV 0x937F +#endif /* GL_NV_representative_fragment_test */ + +#ifndef GL_NV_sRGB_formats +#define GL_NV_sRGB_formats 1 +#define GL_SLUMINANCE_NV 0x8C46 +#define GL_SLUMINANCE_ALPHA_NV 0x8C44 +#define GL_SRGB8_NV 0x8C41 +#define GL_SLUMINANCE8_NV 0x8C47 +#define GL_SLUMINANCE8_ALPHA8_NV 0x8C45 +#define GL_COMPRESSED_SRGB_S3TC_DXT1_NV 0x8C4C +#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_NV 0x8C4D +#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_NV 0x8C4E +#define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_NV 0x8C4F +#define GL_ETC1_SRGB8_NV 0x88EE +#endif /* GL_NV_sRGB_formats */ + +#ifndef GL_NV_sample_locations +#define GL_NV_sample_locations 1 +#define GL_SAMPLE_LOCATION_SUBPIXEL_BITS_NV 0x933D +#define GL_SAMPLE_LOCATION_PIXEL_GRID_WIDTH_NV 0x933E +#define GL_SAMPLE_LOCATION_PIXEL_GRID_HEIGHT_NV 0x933F +#define GL_PROGRAMMABLE_SAMPLE_LOCATION_TABLE_SIZE_NV 0x9340 +#define GL_SAMPLE_LOCATION_NV 0x8E50 +#define GL_PROGRAMMABLE_SAMPLE_LOCATION_NV 0x9341 +#define GL_FRAMEBUFFER_PROGRAMMABLE_SAMPLE_LOCATIONS_NV 0x9342 +#define GL_FRAMEBUFFER_SAMPLE_LOCATION_PIXEL_GRID_NV 0x9343 +typedef void (GL_APIENTRYP PFNGLFRAMEBUFFERSAMPLELOCATIONSFVNVPROC) (GLenum target, GLuint start, GLsizei count, const GLfloat *v); +typedef void (GL_APIENTRYP PFNGLNAMEDFRAMEBUFFERSAMPLELOCATIONSFVNVPROC) (GLuint framebuffer, GLuint start, GLsizei count, const GLfloat *v); +typedef void (GL_APIENTRYP PFNGLRESOLVEDEPTHVALUESNVPROC) (void); +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glFramebufferSampleLocationsfvNV (GLenum target, GLuint start, GLsizei count, const GLfloat *v); +GL_APICALL void GL_APIENTRY glNamedFramebufferSampleLocationsfvNV (GLuint framebuffer, GLuint start, GLsizei count, const GLfloat *v); +GL_APICALL void GL_APIENTRY glResolveDepthValuesNV (void); +#endif +#endif /* GL_NV_sample_locations */ + +#ifndef GL_NV_sample_mask_override_coverage +#define GL_NV_sample_mask_override_coverage 1 +#endif /* GL_NV_sample_mask_override_coverage */ + +#ifndef GL_NV_scissor_exclusive +#define GL_NV_scissor_exclusive 1 +#define GL_SCISSOR_TEST_EXCLUSIVE_NV 0x9555 +#define GL_SCISSOR_BOX_EXCLUSIVE_NV 0x9556 +typedef void (GL_APIENTRYP PFNGLSCISSOREXCLUSIVENVPROC) (GLint x, GLint y, GLsizei width, GLsizei height); +typedef void (GL_APIENTRYP PFNGLSCISSOREXCLUSIVEARRAYVNVPROC) (GLuint first, GLsizei count, const GLint *v); +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glScissorExclusiveNV (GLint x, GLint y, GLsizei width, GLsizei height); +GL_APICALL void GL_APIENTRY glScissorExclusiveArrayvNV (GLuint first, GLsizei count, const GLint *v); +#endif +#endif /* GL_NV_scissor_exclusive */ + +#ifndef GL_NV_shader_atomic_fp16_vector +#define GL_NV_shader_atomic_fp16_vector 1 +#endif /* GL_NV_shader_atomic_fp16_vector */ + +#ifndef GL_NV_shader_noperspective_interpolation +#define GL_NV_shader_noperspective_interpolation 1 +#endif /* GL_NV_shader_noperspective_interpolation */ + +#ifndef GL_NV_shader_subgroup_partitioned +#define GL_NV_shader_subgroup_partitioned 1 +#define GL_SUBGROUP_FEATURE_PARTITIONED_BIT_NV 0x00000100 +#endif /* GL_NV_shader_subgroup_partitioned */ + +#ifndef GL_NV_shader_texture_footprint +#define GL_NV_shader_texture_footprint 1 +#endif /* GL_NV_shader_texture_footprint */ + +#ifndef GL_NV_shading_rate_image +#define GL_NV_shading_rate_image 1 +#define GL_SHADING_RATE_IMAGE_NV 0x9563 +#define GL_SHADING_RATE_NO_INVOCATIONS_NV 0x9564 +#define GL_SHADING_RATE_1_INVOCATION_PER_PIXEL_NV 0x9565 +#define GL_SHADING_RATE_1_INVOCATION_PER_1X2_PIXELS_NV 0x9566 +#define GL_SHADING_RATE_1_INVOCATION_PER_2X1_PIXELS_NV 0x9567 +#define GL_SHADING_RATE_1_INVOCATION_PER_2X2_PIXELS_NV 0x9568 +#define GL_SHADING_RATE_1_INVOCATION_PER_2X4_PIXELS_NV 0x9569 +#define GL_SHADING_RATE_1_INVOCATION_PER_4X2_PIXELS_NV 0x956A +#define GL_SHADING_RATE_1_INVOCATION_PER_4X4_PIXELS_NV 0x956B +#define GL_SHADING_RATE_2_INVOCATIONS_PER_PIXEL_NV 0x956C +#define GL_SHADING_RATE_4_INVOCATIONS_PER_PIXEL_NV 0x956D +#define GL_SHADING_RATE_8_INVOCATIONS_PER_PIXEL_NV 0x956E +#define GL_SHADING_RATE_16_INVOCATIONS_PER_PIXEL_NV 0x956F +#define GL_SHADING_RATE_IMAGE_BINDING_NV 0x955B +#define GL_SHADING_RATE_IMAGE_TEXEL_WIDTH_NV 0x955C +#define GL_SHADING_RATE_IMAGE_TEXEL_HEIGHT_NV 0x955D +#define GL_SHADING_RATE_IMAGE_PALETTE_SIZE_NV 0x955E +#define GL_MAX_COARSE_FRAGMENT_SAMPLES_NV 0x955F +#define GL_SHADING_RATE_SAMPLE_ORDER_DEFAULT_NV 0x95AE +#define GL_SHADING_RATE_SAMPLE_ORDER_PIXEL_MAJOR_NV 0x95AF +#define GL_SHADING_RATE_SAMPLE_ORDER_SAMPLE_MAJOR_NV 0x95B0 +typedef void (GL_APIENTRYP PFNGLBINDSHADINGRATEIMAGENVPROC) (GLuint texture); +typedef void (GL_APIENTRYP PFNGLGETSHADINGRATEIMAGEPALETTENVPROC) (GLuint viewport, GLuint entry, GLenum *rate); +typedef void (GL_APIENTRYP PFNGLGETSHADINGRATESAMPLELOCATIONIVNVPROC) (GLenum rate, GLuint samples, GLuint index, GLint *location); +typedef void (GL_APIENTRYP PFNGLSHADINGRATEIMAGEBARRIERNVPROC) (GLboolean synchronize); +typedef void (GL_APIENTRYP PFNGLSHADINGRATEIMAGEPALETTENVPROC) (GLuint viewport, GLuint first, GLsizei count, const GLenum *rates); +typedef void (GL_APIENTRYP PFNGLSHADINGRATESAMPLEORDERNVPROC) (GLenum order); +typedef void (GL_APIENTRYP PFNGLSHADINGRATESAMPLEORDERCUSTOMNVPROC) (GLenum rate, GLuint samples, const GLint *locations); +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glBindShadingRateImageNV (GLuint texture); +GL_APICALL void GL_APIENTRY glGetShadingRateImagePaletteNV (GLuint viewport, GLuint entry, GLenum *rate); +GL_APICALL void GL_APIENTRY glGetShadingRateSampleLocationivNV (GLenum rate, GLuint samples, GLuint index, GLint *location); +GL_APICALL void GL_APIENTRY glShadingRateImageBarrierNV (GLboolean synchronize); +GL_APICALL void GL_APIENTRY glShadingRateImagePaletteNV (GLuint viewport, GLuint first, GLsizei count, const GLenum *rates); +GL_APICALL void GL_APIENTRY glShadingRateSampleOrderNV (GLenum order); +GL_APICALL void GL_APIENTRY glShadingRateSampleOrderCustomNV (GLenum rate, GLuint samples, const GLint *locations); +#endif +#endif /* GL_NV_shading_rate_image */ + +#ifndef GL_NV_shadow_samplers_array +#define GL_NV_shadow_samplers_array 1 +#define GL_SAMPLER_2D_ARRAY_SHADOW_NV 0x8DC4 +#endif /* GL_NV_shadow_samplers_array */ + +#ifndef GL_NV_shadow_samplers_cube +#define GL_NV_shadow_samplers_cube 1 +#define GL_SAMPLER_CUBE_SHADOW_NV 0x8DC5 +#endif /* GL_NV_shadow_samplers_cube */ + +#ifndef GL_NV_stereo_view_rendering +#define GL_NV_stereo_view_rendering 1 +#endif /* GL_NV_stereo_view_rendering */ + +#ifndef GL_NV_texture_border_clamp +#define GL_NV_texture_border_clamp 1 +#define GL_TEXTURE_BORDER_COLOR_NV 0x1004 +#define GL_CLAMP_TO_BORDER_NV 0x812D +#endif /* GL_NV_texture_border_clamp */ + +#ifndef GL_NV_texture_compression_s3tc_update +#define GL_NV_texture_compression_s3tc_update 1 +#endif /* GL_NV_texture_compression_s3tc_update */ + +#ifndef GL_NV_texture_npot_2D_mipmap +#define GL_NV_texture_npot_2D_mipmap 1 +#endif /* GL_NV_texture_npot_2D_mipmap */ + +#ifndef GL_NV_timeline_semaphore +#define GL_NV_timeline_semaphore 1 +#define GL_TIMELINE_SEMAPHORE_VALUE_NV 0x9595 +#define GL_SEMAPHORE_TYPE_NV 0x95B3 +#define GL_SEMAPHORE_TYPE_BINARY_NV 0x95B4 +#define GL_SEMAPHORE_TYPE_TIMELINE_NV 0x95B5 +#define GL_MAX_TIMELINE_SEMAPHORE_VALUE_DIFFERENCE_NV 0x95B6 +typedef void (GL_APIENTRYP PFNGLCREATESEMAPHORESNVPROC) (GLsizei n, GLuint *semaphores); +typedef void (GL_APIENTRYP PFNGLSEMAPHOREPARAMETERIVNVPROC) (GLuint semaphore, GLenum pname, const GLint *params); +typedef void (GL_APIENTRYP PFNGLGETSEMAPHOREPARAMETERIVNVPROC) (GLuint semaphore, GLenum pname, GLint *params); +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glCreateSemaphoresNV (GLsizei n, GLuint *semaphores); +GL_APICALL void GL_APIENTRY glSemaphoreParameterivNV (GLuint semaphore, GLenum pname, const GLint *params); +GL_APICALL void GL_APIENTRY glGetSemaphoreParameterivNV (GLuint semaphore, GLenum pname, GLint *params); +#endif +#endif /* GL_NV_timeline_semaphore */ + +#ifndef GL_NV_viewport_array +#define GL_NV_viewport_array 1 +#define GL_MAX_VIEWPORTS_NV 0x825B +#define GL_VIEWPORT_SUBPIXEL_BITS_NV 0x825C +#define GL_VIEWPORT_BOUNDS_RANGE_NV 0x825D +#define GL_VIEWPORT_INDEX_PROVOKING_VERTEX_NV 0x825F +typedef void (GL_APIENTRYP PFNGLVIEWPORTARRAYVNVPROC) (GLuint first, GLsizei count, const GLfloat *v); +typedef void (GL_APIENTRYP PFNGLVIEWPORTINDEXEDFNVPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat w, GLfloat h); +typedef void (GL_APIENTRYP PFNGLVIEWPORTINDEXEDFVNVPROC) (GLuint index, const GLfloat *v); +typedef void (GL_APIENTRYP PFNGLSCISSORARRAYVNVPROC) (GLuint first, GLsizei count, const GLint *v); +typedef void (GL_APIENTRYP PFNGLSCISSORINDEXEDNVPROC) (GLuint index, GLint left, GLint bottom, GLsizei width, GLsizei height); +typedef void (GL_APIENTRYP PFNGLSCISSORINDEXEDVNVPROC) (GLuint index, const GLint *v); +typedef void (GL_APIENTRYP PFNGLDEPTHRANGEARRAYFVNVPROC) (GLuint first, GLsizei count, const GLfloat *v); +typedef void (GL_APIENTRYP PFNGLDEPTHRANGEINDEXEDFNVPROC) (GLuint index, GLfloat n, GLfloat f); +typedef void (GL_APIENTRYP PFNGLGETFLOATI_VNVPROC) (GLenum target, GLuint index, GLfloat *data); +typedef void (GL_APIENTRYP PFNGLENABLEINVPROC) (GLenum target, GLuint index); +typedef void (GL_APIENTRYP PFNGLDISABLEINVPROC) (GLenum target, GLuint index); +typedef GLboolean (GL_APIENTRYP PFNGLISENABLEDINVPROC) (GLenum target, GLuint index); +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glViewportArrayvNV (GLuint first, GLsizei count, const GLfloat *v); +GL_APICALL void GL_APIENTRY glViewportIndexedfNV (GLuint index, GLfloat x, GLfloat y, GLfloat w, GLfloat h); +GL_APICALL void GL_APIENTRY glViewportIndexedfvNV (GLuint index, const GLfloat *v); +GL_APICALL void GL_APIENTRY glScissorArrayvNV (GLuint first, GLsizei count, const GLint *v); +GL_APICALL void GL_APIENTRY glScissorIndexedNV (GLuint index, GLint left, GLint bottom, GLsizei width, GLsizei height); +GL_APICALL void GL_APIENTRY glScissorIndexedvNV (GLuint index, const GLint *v); +GL_APICALL void GL_APIENTRY glDepthRangeArrayfvNV (GLuint first, GLsizei count, const GLfloat *v); +GL_APICALL void GL_APIENTRY glDepthRangeIndexedfNV (GLuint index, GLfloat n, GLfloat f); +GL_APICALL void GL_APIENTRY glGetFloati_vNV (GLenum target, GLuint index, GLfloat *data); +GL_APICALL void GL_APIENTRY glEnableiNV (GLenum target, GLuint index); +GL_APICALL void GL_APIENTRY glDisableiNV (GLenum target, GLuint index); +GL_APICALL GLboolean GL_APIENTRY glIsEnablediNV (GLenum target, GLuint index); +#endif +#endif /* GL_NV_viewport_array */ + +#ifndef GL_NV_viewport_array2 +#define GL_NV_viewport_array2 1 +#endif /* GL_NV_viewport_array2 */ + +#ifndef GL_NV_viewport_swizzle +#define GL_NV_viewport_swizzle 1 +#define GL_VIEWPORT_SWIZZLE_POSITIVE_X_NV 0x9350 +#define GL_VIEWPORT_SWIZZLE_NEGATIVE_X_NV 0x9351 +#define GL_VIEWPORT_SWIZZLE_POSITIVE_Y_NV 0x9352 +#define GL_VIEWPORT_SWIZZLE_NEGATIVE_Y_NV 0x9353 +#define GL_VIEWPORT_SWIZZLE_POSITIVE_Z_NV 0x9354 +#define GL_VIEWPORT_SWIZZLE_NEGATIVE_Z_NV 0x9355 +#define GL_VIEWPORT_SWIZZLE_POSITIVE_W_NV 0x9356 +#define GL_VIEWPORT_SWIZZLE_NEGATIVE_W_NV 0x9357 +#define GL_VIEWPORT_SWIZZLE_X_NV 0x9358 +#define GL_VIEWPORT_SWIZZLE_Y_NV 0x9359 +#define GL_VIEWPORT_SWIZZLE_Z_NV 0x935A +#define GL_VIEWPORT_SWIZZLE_W_NV 0x935B +typedef void (GL_APIENTRYP PFNGLVIEWPORTSWIZZLENVPROC) (GLuint index, GLenum swizzlex, GLenum swizzley, GLenum swizzlez, GLenum swizzlew); +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glViewportSwizzleNV (GLuint index, GLenum swizzlex, GLenum swizzley, GLenum swizzlez, GLenum swizzlew); +#endif +#endif /* GL_NV_viewport_swizzle */ + +#ifndef GL_OVR_multiview +#define GL_OVR_multiview 1 +#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_NUM_VIEWS_OVR 0x9630 +#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_BASE_VIEW_INDEX_OVR 0x9632 +#define GL_MAX_VIEWS_OVR 0x9631 +#define GL_FRAMEBUFFER_INCOMPLETE_VIEW_TARGETS_OVR 0x9633 +typedef void (GL_APIENTRYP PFNGLFRAMEBUFFERTEXTUREMULTIVIEWOVRPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint baseViewIndex, GLsizei numViews); +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glFramebufferTextureMultiviewOVR (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint baseViewIndex, GLsizei numViews); +#endif +#endif /* GL_OVR_multiview */ + +#ifndef GL_OVR_multiview2 +#define GL_OVR_multiview2 1 +#endif /* GL_OVR_multiview2 */ + +#ifndef GL_OVR_multiview_multisampled_render_to_texture +#define GL_OVR_multiview_multisampled_render_to_texture 1 +typedef void (GL_APIENTRYP PFNGLFRAMEBUFFERTEXTUREMULTISAMPLEMULTIVIEWOVRPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLsizei samples, GLint baseViewIndex, GLsizei numViews); +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glFramebufferTextureMultisampleMultiviewOVR (GLenum target, GLenum attachment, GLuint texture, GLint level, GLsizei samples, GLint baseViewIndex, GLsizei numViews); +#endif +#endif /* GL_OVR_multiview_multisampled_render_to_texture */ + +#ifndef GL_QCOM_YUV_texture_gather +#define GL_QCOM_YUV_texture_gather 1 +#endif /* GL_QCOM_YUV_texture_gather */ + +#ifndef GL_QCOM_alpha_test +#define GL_QCOM_alpha_test 1 +#define GL_ALPHA_TEST_QCOM 0x0BC0 +#define GL_ALPHA_TEST_FUNC_QCOM 0x0BC1 +#define GL_ALPHA_TEST_REF_QCOM 0x0BC2 +typedef void (GL_APIENTRYP PFNGLALPHAFUNCQCOMPROC) (GLenum func, GLclampf ref); +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glAlphaFuncQCOM (GLenum func, GLclampf ref); +#endif +#endif /* GL_QCOM_alpha_test */ + +#ifndef GL_QCOM_binning_control +#define GL_QCOM_binning_control 1 +#define GL_BINNING_CONTROL_HINT_QCOM 0x8FB0 +#define GL_CPU_OPTIMIZED_QCOM 0x8FB1 +#define GL_GPU_OPTIMIZED_QCOM 0x8FB2 +#define GL_RENDER_DIRECT_TO_FRAMEBUFFER_QCOM 0x8FB3 +#endif /* GL_QCOM_binning_control */ + +#ifndef GL_QCOM_driver_control +#define GL_QCOM_driver_control 1 +typedef void (GL_APIENTRYP PFNGLGETDRIVERCONTROLSQCOMPROC) (GLint *num, GLsizei size, GLuint *driverControls); +typedef void (GL_APIENTRYP PFNGLGETDRIVERCONTROLSTRINGQCOMPROC) (GLuint driverControl, GLsizei bufSize, GLsizei *length, GLchar *driverControlString); +typedef void (GL_APIENTRYP PFNGLENABLEDRIVERCONTROLQCOMPROC) (GLuint driverControl); +typedef void (GL_APIENTRYP PFNGLDISABLEDRIVERCONTROLQCOMPROC) (GLuint driverControl); +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glGetDriverControlsQCOM (GLint *num, GLsizei size, GLuint *driverControls); +GL_APICALL void GL_APIENTRY glGetDriverControlStringQCOM (GLuint driverControl, GLsizei bufSize, GLsizei *length, GLchar *driverControlString); +GL_APICALL void GL_APIENTRY glEnableDriverControlQCOM (GLuint driverControl); +GL_APICALL void GL_APIENTRY glDisableDriverControlQCOM (GLuint driverControl); +#endif +#endif /* GL_QCOM_driver_control */ + +#ifndef GL_QCOM_extended_get +#define GL_QCOM_extended_get 1 +#define GL_TEXTURE_WIDTH_QCOM 0x8BD2 +#define GL_TEXTURE_HEIGHT_QCOM 0x8BD3 +#define GL_TEXTURE_DEPTH_QCOM 0x8BD4 +#define GL_TEXTURE_INTERNAL_FORMAT_QCOM 0x8BD5 +#define GL_TEXTURE_FORMAT_QCOM 0x8BD6 +#define GL_TEXTURE_TYPE_QCOM 0x8BD7 +#define GL_TEXTURE_IMAGE_VALID_QCOM 0x8BD8 +#define GL_TEXTURE_NUM_LEVELS_QCOM 0x8BD9 +#define GL_TEXTURE_TARGET_QCOM 0x8BDA +#define GL_TEXTURE_OBJECT_VALID_QCOM 0x8BDB +#define GL_STATE_RESTORE 0x8BDC +typedef void (GL_APIENTRYP PFNGLEXTGETTEXTURESQCOMPROC) (GLuint *textures, GLint maxTextures, GLint *numTextures); +typedef void (GL_APIENTRYP PFNGLEXTGETBUFFERSQCOMPROC) (GLuint *buffers, GLint maxBuffers, GLint *numBuffers); +typedef void (GL_APIENTRYP PFNGLEXTGETRENDERBUFFERSQCOMPROC) (GLuint *renderbuffers, GLint maxRenderbuffers, GLint *numRenderbuffers); +typedef void (GL_APIENTRYP PFNGLEXTGETFRAMEBUFFERSQCOMPROC) (GLuint *framebuffers, GLint maxFramebuffers, GLint *numFramebuffers); +typedef void (GL_APIENTRYP PFNGLEXTGETTEXLEVELPARAMETERIVQCOMPROC) (GLuint texture, GLenum face, GLint level, GLenum pname, GLint *params); +typedef void (GL_APIENTRYP PFNGLEXTTEXOBJECTSTATEOVERRIDEIQCOMPROC) (GLenum target, GLenum pname, GLint param); +typedef void (GL_APIENTRYP PFNGLEXTGETTEXSUBIMAGEQCOMPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, void *texels); +typedef void (GL_APIENTRYP PFNGLEXTGETBUFFERPOINTERVQCOMPROC) (GLenum target, void **params); +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glExtGetTexturesQCOM (GLuint *textures, GLint maxTextures, GLint *numTextures); +GL_APICALL void GL_APIENTRY glExtGetBuffersQCOM (GLuint *buffers, GLint maxBuffers, GLint *numBuffers); +GL_APICALL void GL_APIENTRY glExtGetRenderbuffersQCOM (GLuint *renderbuffers, GLint maxRenderbuffers, GLint *numRenderbuffers); +GL_APICALL void GL_APIENTRY glExtGetFramebuffersQCOM (GLuint *framebuffers, GLint maxFramebuffers, GLint *numFramebuffers); +GL_APICALL void GL_APIENTRY glExtGetTexLevelParameterivQCOM (GLuint texture, GLenum face, GLint level, GLenum pname, GLint *params); +GL_APICALL void GL_APIENTRY glExtTexObjectStateOverrideiQCOM (GLenum target, GLenum pname, GLint param); +GL_APICALL void GL_APIENTRY glExtGetTexSubImageQCOM (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, void *texels); +GL_APICALL void GL_APIENTRY glExtGetBufferPointervQCOM (GLenum target, void **params); +#endif +#endif /* GL_QCOM_extended_get */ + +#ifndef GL_QCOM_extended_get2 +#define GL_QCOM_extended_get2 1 +typedef void (GL_APIENTRYP PFNGLEXTGETSHADERSQCOMPROC) (GLuint *shaders, GLint maxShaders, GLint *numShaders); +typedef void (GL_APIENTRYP PFNGLEXTGETPROGRAMSQCOMPROC) (GLuint *programs, GLint maxPrograms, GLint *numPrograms); +typedef GLboolean (GL_APIENTRYP PFNGLEXTISPROGRAMBINARYQCOMPROC) (GLuint program); +typedef void (GL_APIENTRYP PFNGLEXTGETPROGRAMBINARYSOURCEQCOMPROC) (GLuint program, GLenum shadertype, GLchar *source, GLint *length); +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glExtGetShadersQCOM (GLuint *shaders, GLint maxShaders, GLint *numShaders); +GL_APICALL void GL_APIENTRY glExtGetProgramsQCOM (GLuint *programs, GLint maxPrograms, GLint *numPrograms); +GL_APICALL GLboolean GL_APIENTRY glExtIsProgramBinaryQCOM (GLuint program); +GL_APICALL void GL_APIENTRY glExtGetProgramBinarySourceQCOM (GLuint program, GLenum shadertype, GLchar *source, GLint *length); +#endif +#endif /* GL_QCOM_extended_get2 */ + +#ifndef GL_QCOM_frame_extrapolation +#define GL_QCOM_frame_extrapolation 1 +typedef void (GL_APIENTRYP PFNGLEXTRAPOLATETEX2DQCOMPROC) (GLuint src1, GLuint src2, GLuint output, GLfloat scaleFactor); +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glExtrapolateTex2DQCOM (GLuint src1, GLuint src2, GLuint output, GLfloat scaleFactor); +#endif +#endif /* GL_QCOM_frame_extrapolation */ + +#ifndef GL_QCOM_framebuffer_foveated +#define GL_QCOM_framebuffer_foveated 1 +#define GL_FOVEATION_ENABLE_BIT_QCOM 0x00000001 +#define GL_FOVEATION_SCALED_BIN_METHOD_BIT_QCOM 0x00000002 +typedef void (GL_APIENTRYP PFNGLFRAMEBUFFERFOVEATIONCONFIGQCOMPROC) (GLuint framebuffer, GLuint numLayers, GLuint focalPointsPerLayer, GLuint requestedFeatures, GLuint *providedFeatures); +typedef void (GL_APIENTRYP PFNGLFRAMEBUFFERFOVEATIONPARAMETERSQCOMPROC) (GLuint framebuffer, GLuint layer, GLuint focalPoint, GLfloat focalX, GLfloat focalY, GLfloat gainX, GLfloat gainY, GLfloat foveaArea); +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glFramebufferFoveationConfigQCOM (GLuint framebuffer, GLuint numLayers, GLuint focalPointsPerLayer, GLuint requestedFeatures, GLuint *providedFeatures); +GL_APICALL void GL_APIENTRY glFramebufferFoveationParametersQCOM (GLuint framebuffer, GLuint layer, GLuint focalPoint, GLfloat focalX, GLfloat focalY, GLfloat gainX, GLfloat gainY, GLfloat foveaArea); +#endif +#endif /* GL_QCOM_framebuffer_foveated */ + +#ifndef GL_QCOM_motion_estimation +#define GL_QCOM_motion_estimation 1 +#define GL_MOTION_ESTIMATION_SEARCH_BLOCK_X_QCOM 0x8C90 +#define GL_MOTION_ESTIMATION_SEARCH_BLOCK_Y_QCOM 0x8C91 +typedef void (GL_APIENTRYP PFNGLTEXESTIMATEMOTIONQCOMPROC) (GLuint ref, GLuint target, GLuint output); +typedef void (GL_APIENTRYP PFNGLTEXESTIMATEMOTIONREGIONSQCOMPROC) (GLuint ref, GLuint target, GLuint output, GLuint mask); +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glTexEstimateMotionQCOM (GLuint ref, GLuint target, GLuint output); +GL_APICALL void GL_APIENTRY glTexEstimateMotionRegionsQCOM (GLuint ref, GLuint target, GLuint output, GLuint mask); +#endif +#endif /* GL_QCOM_motion_estimation */ + +#ifndef GL_QCOM_perfmon_global_mode +#define GL_QCOM_perfmon_global_mode 1 +#define GL_PERFMON_GLOBAL_MODE_QCOM 0x8FA0 +#endif /* GL_QCOM_perfmon_global_mode */ + +#ifndef GL_QCOM_render_shared_exponent +#define GL_QCOM_render_shared_exponent 1 +#endif /* GL_QCOM_render_shared_exponent */ + +#ifndef GL_QCOM_shader_framebuffer_fetch_noncoherent +#define GL_QCOM_shader_framebuffer_fetch_noncoherent 1 +#define GL_FRAMEBUFFER_FETCH_NONCOHERENT_QCOM 0x96A2 +typedef void (GL_APIENTRYP PFNGLFRAMEBUFFERFETCHBARRIERQCOMPROC) (void); +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glFramebufferFetchBarrierQCOM (void); +#endif +#endif /* GL_QCOM_shader_framebuffer_fetch_noncoherent */ + +#ifndef GL_QCOM_shader_framebuffer_fetch_rate +#define GL_QCOM_shader_framebuffer_fetch_rate 1 +#endif /* GL_QCOM_shader_framebuffer_fetch_rate */ + +#ifndef GL_QCOM_shading_rate +#define GL_QCOM_shading_rate 1 +#define GL_SHADING_RATE_QCOM 0x96A4 +#define GL_SHADING_RATE_PRESERVE_ASPECT_RATIO_QCOM 0x96A5 +#define GL_SHADING_RATE_1X1_PIXELS_QCOM 0x96A6 +#define GL_SHADING_RATE_1X2_PIXELS_QCOM 0x96A7 +#define GL_SHADING_RATE_2X1_PIXELS_QCOM 0x96A8 +#define GL_SHADING_RATE_2X2_PIXELS_QCOM 0x96A9 +#define GL_SHADING_RATE_4X2_PIXELS_QCOM 0x96AC +#define GL_SHADING_RATE_4X4_PIXELS_QCOM 0x96AE +typedef void (GL_APIENTRYP PFNGLSHADINGRATEQCOMPROC) (GLenum rate); +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glShadingRateQCOM (GLenum rate); +#endif +#endif /* GL_QCOM_shading_rate */ + +#ifndef GL_QCOM_texture_foveated +#define GL_QCOM_texture_foveated 1 +#define GL_TEXTURE_FOVEATED_FEATURE_BITS_QCOM 0x8BFB +#define GL_TEXTURE_FOVEATED_MIN_PIXEL_DENSITY_QCOM 0x8BFC +#define GL_TEXTURE_FOVEATED_FEATURE_QUERY_QCOM 0x8BFD +#define GL_TEXTURE_FOVEATED_NUM_FOCAL_POINTS_QUERY_QCOM 0x8BFE +#define GL_FRAMEBUFFER_INCOMPLETE_FOVEATION_QCOM 0x8BFF +typedef void (GL_APIENTRYP PFNGLTEXTUREFOVEATIONPARAMETERSQCOMPROC) (GLuint texture, GLuint layer, GLuint focalPoint, GLfloat focalX, GLfloat focalY, GLfloat gainX, GLfloat gainY, GLfloat foveaArea); +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glTextureFoveationParametersQCOM (GLuint texture, GLuint layer, GLuint focalPoint, GLfloat focalX, GLfloat focalY, GLfloat gainX, GLfloat gainY, GLfloat foveaArea); +#endif +#endif /* GL_QCOM_texture_foveated */ + +#ifndef GL_QCOM_texture_foveated2 +#define GL_QCOM_texture_foveated2 1 +#define GL_TEXTURE_FOVEATED_CUTOFF_DENSITY_QCOM 0x96A0 +#endif /* GL_QCOM_texture_foveated2 */ + +#ifndef GL_QCOM_texture_foveated_subsampled_layout +#define GL_QCOM_texture_foveated_subsampled_layout 1 +#define GL_FOVEATION_SUBSAMPLED_LAYOUT_METHOD_BIT_QCOM 0x00000004 +#define GL_MAX_SHADER_SUBSAMPLED_IMAGE_UNITS_QCOM 0x8FA1 +#endif /* GL_QCOM_texture_foveated_subsampled_layout */ + +#ifndef GL_QCOM_tiled_rendering +#define GL_QCOM_tiled_rendering 1 +#define GL_COLOR_BUFFER_BIT0_QCOM 0x00000001 +#define GL_COLOR_BUFFER_BIT1_QCOM 0x00000002 +#define GL_COLOR_BUFFER_BIT2_QCOM 0x00000004 +#define GL_COLOR_BUFFER_BIT3_QCOM 0x00000008 +#define GL_COLOR_BUFFER_BIT4_QCOM 0x00000010 +#define GL_COLOR_BUFFER_BIT5_QCOM 0x00000020 +#define GL_COLOR_BUFFER_BIT6_QCOM 0x00000040 +#define GL_COLOR_BUFFER_BIT7_QCOM 0x00000080 +#define GL_DEPTH_BUFFER_BIT0_QCOM 0x00000100 +#define GL_DEPTH_BUFFER_BIT1_QCOM 0x00000200 +#define GL_DEPTH_BUFFER_BIT2_QCOM 0x00000400 +#define GL_DEPTH_BUFFER_BIT3_QCOM 0x00000800 +#define GL_DEPTH_BUFFER_BIT4_QCOM 0x00001000 +#define GL_DEPTH_BUFFER_BIT5_QCOM 0x00002000 +#define GL_DEPTH_BUFFER_BIT6_QCOM 0x00004000 +#define GL_DEPTH_BUFFER_BIT7_QCOM 0x00008000 +#define GL_STENCIL_BUFFER_BIT0_QCOM 0x00010000 +#define GL_STENCIL_BUFFER_BIT1_QCOM 0x00020000 +#define GL_STENCIL_BUFFER_BIT2_QCOM 0x00040000 +#define GL_STENCIL_BUFFER_BIT3_QCOM 0x00080000 +#define GL_STENCIL_BUFFER_BIT4_QCOM 0x00100000 +#define GL_STENCIL_BUFFER_BIT5_QCOM 0x00200000 +#define GL_STENCIL_BUFFER_BIT6_QCOM 0x00400000 +#define GL_STENCIL_BUFFER_BIT7_QCOM 0x00800000 +#define GL_MULTISAMPLE_BUFFER_BIT0_QCOM 0x01000000 +#define GL_MULTISAMPLE_BUFFER_BIT1_QCOM 0x02000000 +#define GL_MULTISAMPLE_BUFFER_BIT2_QCOM 0x04000000 +#define GL_MULTISAMPLE_BUFFER_BIT3_QCOM 0x08000000 +#define GL_MULTISAMPLE_BUFFER_BIT4_QCOM 0x10000000 +#define GL_MULTISAMPLE_BUFFER_BIT5_QCOM 0x20000000 +#define GL_MULTISAMPLE_BUFFER_BIT6_QCOM 0x40000000 +#define GL_MULTISAMPLE_BUFFER_BIT7_QCOM 0x80000000 +typedef void (GL_APIENTRYP PFNGLSTARTTILINGQCOMPROC) (GLuint x, GLuint y, GLuint width, GLuint height, GLbitfield preserveMask); +typedef void (GL_APIENTRYP PFNGLENDTILINGQCOMPROC) (GLbitfield preserveMask); +#ifdef GL_GLEXT_PROTOTYPES +GL_APICALL void GL_APIENTRY glStartTilingQCOM (GLuint x, GLuint y, GLuint width, GLuint height, GLbitfield preserveMask); +GL_APICALL void GL_APIENTRY glEndTilingQCOM (GLbitfield preserveMask); +#endif +#endif /* GL_QCOM_tiled_rendering */ + +#ifndef GL_QCOM_writeonly_rendering +#define GL_QCOM_writeonly_rendering 1 +#define GL_WRITEONLY_RENDERING_QCOM 0x8823 +#endif /* GL_QCOM_writeonly_rendering */ + +#ifndef GL_VIV_shader_binary +#define GL_VIV_shader_binary 1 +#define GL_SHADER_BINARY_VIV 0x8FC4 +#endif /* GL_VIV_shader_binary */ + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/third_party/tlRender-install-Release/include/SDL2/SDL_opengles2_gl2platform.h b/third_party/tlRender-install-Release/include/SDL2/SDL_opengles2_gl2platform.h new file mode 100644 index 00000000..426796ef --- /dev/null +++ b/third_party/tlRender-install-Release/include/SDL2/SDL_opengles2_gl2platform.h @@ -0,0 +1,27 @@ +#ifndef __gl2platform_h_ +#define __gl2platform_h_ + +/* +** Copyright 2017-2020 The Khronos Group Inc. +** SPDX-License-Identifier: Apache-2.0 +*/ + +/* Platform-specific types and definitions for OpenGL ES 2.X gl2.h + * + * Adopters may modify khrplatform.h and this file to suit their platform. + * Please contribute modifications back to Khronos as pull requests on the + * public github repository: + * https://github.com/KhronosGroup/OpenGL-Registry + */ + +/*#include */ + +#ifndef GL_APICALL +#define GL_APICALL KHRONOS_APICALL +#endif + +#ifndef GL_APIENTRY +#define GL_APIENTRY KHRONOS_APIENTRY +#endif + +#endif /* __gl2platform_h_ */ diff --git a/third_party/tlRender-install-Release/include/SDL2/SDL_opengles2_khrplatform.h b/third_party/tlRender-install-Release/include/SDL2/SDL_opengles2_khrplatform.h new file mode 100644 index 00000000..01646449 --- /dev/null +++ b/third_party/tlRender-install-Release/include/SDL2/SDL_opengles2_khrplatform.h @@ -0,0 +1,311 @@ +#ifndef __khrplatform_h_ +#define __khrplatform_h_ + +/* +** Copyright (c) 2008-2018 The Khronos Group Inc. +** +** Permission is hereby granted, free of charge, to any person obtaining a +** copy of this software and/or associated documentation files (the +** "Materials"), to deal in the Materials without restriction, including +** without limitation the rights to use, copy, modify, merge, publish, +** distribute, sublicense, and/or sell copies of the Materials, and to +** permit persons to whom the Materials are furnished to do so, subject to +** the following conditions: +** +** The above copyright notice and this permission notice shall be included +** in all copies or substantial portions of the Materials. +** +** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. +*/ + +/* Khronos platform-specific types and definitions. + * + * The master copy of khrplatform.h is maintained in the Khronos EGL + * Registry repository at https://github.com/KhronosGroup/EGL-Registry + * The last semantic modification to khrplatform.h was at commit ID: + * 67a3e0864c2d75ea5287b9f3d2eb74a745936692 + * + * Adopters may modify this file to suit their platform. Adopters are + * encouraged to submit platform specific modifications to the Khronos + * group so that they can be included in future versions of this file. + * Please submit changes by filing pull requests or issues on + * the EGL Registry repository linked above. + * + * + * See the Implementer's Guidelines for information about where this file + * should be located on your system and for more details of its use: + * http://www.khronos.org/registry/implementers_guide.pdf + * + * This file should be included as + * #include + * by Khronos client API header files that use its types and defines. + * + * The types in khrplatform.h should only be used to define API-specific types. + * + * Types defined in khrplatform.h: + * khronos_int8_t signed 8 bit + * khronos_uint8_t unsigned 8 bit + * khronos_int16_t signed 16 bit + * khronos_uint16_t unsigned 16 bit + * khronos_int32_t signed 32 bit + * khronos_uint32_t unsigned 32 bit + * khronos_int64_t signed 64 bit + * khronos_uint64_t unsigned 64 bit + * khronos_intptr_t signed same number of bits as a pointer + * khronos_uintptr_t unsigned same number of bits as a pointer + * khronos_ssize_t signed size + * khronos_usize_t unsigned size + * khronos_float_t signed 32 bit floating point + * khronos_time_ns_t unsigned 64 bit time in nanoseconds + * khronos_utime_nanoseconds_t unsigned time interval or absolute time in + * nanoseconds + * khronos_stime_nanoseconds_t signed time interval in nanoseconds + * khronos_boolean_enum_t enumerated boolean type. This should + * only be used as a base type when a client API's boolean type is + * an enum. Client APIs which use an integer or other type for + * booleans cannot use this as the base type for their boolean. + * + * Tokens defined in khrplatform.h: + * + * KHRONOS_FALSE, KHRONOS_TRUE Enumerated boolean false/true values. + * + * KHRONOS_SUPPORT_INT64 is 1 if 64 bit integers are supported; otherwise 0. + * KHRONOS_SUPPORT_FLOAT is 1 if floats are supported; otherwise 0. + * + * Calling convention macros defined in this file: + * KHRONOS_APICALL + * KHRONOS_APIENTRY + * KHRONOS_APIATTRIBUTES + * + * These may be used in function prototypes as: + * + * KHRONOS_APICALL void KHRONOS_APIENTRY funcname( + * int arg1, + * int arg2) KHRONOS_APIATTRIBUTES; + */ + +#if defined(__SCITECH_SNAP__) && !defined(KHRONOS_STATIC) +# define KHRONOS_STATIC 1 +#endif + +/*------------------------------------------------------------------------- + * Definition of KHRONOS_APICALL + *------------------------------------------------------------------------- + * This precedes the return type of the function in the function prototype. + */ +#if defined(KHRONOS_STATIC) + /* If the preprocessor constant KHRONOS_STATIC is defined, make the + * header compatible with static linking. */ +# define KHRONOS_APICALL +#elif defined(_WIN32) +# define KHRONOS_APICALL __declspec(dllimport) +#elif defined (__SYMBIAN32__) +# define KHRONOS_APICALL IMPORT_C +#elif defined(__ANDROID__) +# define KHRONOS_APICALL __attribute__((visibility("default"))) +#else +# define KHRONOS_APICALL +#endif + +/*------------------------------------------------------------------------- + * Definition of KHRONOS_APIENTRY + *------------------------------------------------------------------------- + * This follows the return type of the function and precedes the function + * name in the function prototype. + */ +#if defined(_WIN32) && !defined(_WIN32_WCE) && !defined(__SCITECH_SNAP__) + /* Win32 but not WinCE */ +# define KHRONOS_APIENTRY __stdcall +#else +# define KHRONOS_APIENTRY +#endif + +/*------------------------------------------------------------------------- + * Definition of KHRONOS_APIATTRIBUTES + *------------------------------------------------------------------------- + * This follows the closing parenthesis of the function prototype arguments. + */ +#if defined (__ARMCC_2__) +#define KHRONOS_APIATTRIBUTES __softfp +#else +#define KHRONOS_APIATTRIBUTES +#endif + +/*------------------------------------------------------------------------- + * basic type definitions + *-----------------------------------------------------------------------*/ +#if (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) || defined(__GNUC__) || defined(__SCO__) || defined(__USLC__) + + +/* + * Using + */ +#include +typedef int32_t khronos_int32_t; +typedef uint32_t khronos_uint32_t; +typedef int64_t khronos_int64_t; +typedef uint64_t khronos_uint64_t; +#define KHRONOS_SUPPORT_INT64 1 +#define KHRONOS_SUPPORT_FLOAT 1 +/* + * To support platform where unsigned long cannot be used interchangeably with + * inptr_t (e.g. CHERI-extended ISAs), we can use the stdint.h intptr_t. + * Ideally, we could just use (u)intptr_t everywhere, but this could result in + * ABI breakage if khronos_uintptr_t is changed from unsigned long to + * unsigned long long or similar (this results in different C++ name mangling). + * To avoid changes for existing platforms, we restrict usage of intptr_t to + * platforms where the size of a pointer is larger than the size of long. + */ +#if defined(__SIZEOF_LONG__) && defined(__SIZEOF_POINTER__) +#if __SIZEOF_POINTER__ > __SIZEOF_LONG__ +#define KHRONOS_USE_INTPTR_T +#endif +#endif + +#elif defined(__VMS ) || defined(__sgi) + +/* + * Using + */ +#include +typedef int32_t khronos_int32_t; +typedef uint32_t khronos_uint32_t; +typedef int64_t khronos_int64_t; +typedef uint64_t khronos_uint64_t; +#define KHRONOS_SUPPORT_INT64 1 +#define KHRONOS_SUPPORT_FLOAT 1 + +#elif defined(_WIN32) && !defined(__SCITECH_SNAP__) + +/* + * Win32 + */ +typedef __int32 khronos_int32_t; +typedef unsigned __int32 khronos_uint32_t; +typedef __int64 khronos_int64_t; +typedef unsigned __int64 khronos_uint64_t; +#define KHRONOS_SUPPORT_INT64 1 +#define KHRONOS_SUPPORT_FLOAT 1 + +#elif defined(__sun__) || defined(__digital__) + +/* + * Sun or Digital + */ +typedef int khronos_int32_t; +typedef unsigned int khronos_uint32_t; +#if defined(__arch64__) || defined(_LP64) +typedef long int khronos_int64_t; +typedef unsigned long int khronos_uint64_t; +#else +typedef long long int khronos_int64_t; +typedef unsigned long long int khronos_uint64_t; +#endif /* __arch64__ */ +#define KHRONOS_SUPPORT_INT64 1 +#define KHRONOS_SUPPORT_FLOAT 1 + +#elif 0 + +/* + * Hypothetical platform with no float or int64 support + */ +typedef int khronos_int32_t; +typedef unsigned int khronos_uint32_t; +#define KHRONOS_SUPPORT_INT64 0 +#define KHRONOS_SUPPORT_FLOAT 0 + +#else + +/* + * Generic fallback + */ +#include +typedef int32_t khronos_int32_t; +typedef uint32_t khronos_uint32_t; +typedef int64_t khronos_int64_t; +typedef uint64_t khronos_uint64_t; +#define KHRONOS_SUPPORT_INT64 1 +#define KHRONOS_SUPPORT_FLOAT 1 + +#endif + + +/* + * Types that are (so far) the same on all platforms + */ +typedef signed char khronos_int8_t; +typedef unsigned char khronos_uint8_t; +typedef signed short int khronos_int16_t; +typedef unsigned short int khronos_uint16_t; + +/* + * Types that differ between LLP64 and LP64 architectures - in LLP64, + * pointers are 64 bits, but 'long' is still 32 bits. Win64 appears + * to be the only LLP64 architecture in current use. + */ +#ifdef KHRONOS_USE_INTPTR_T +typedef intptr_t khronos_intptr_t; +typedef uintptr_t khronos_uintptr_t; +#elif defined(_WIN64) +typedef signed long long int khronos_intptr_t; +typedef unsigned long long int khronos_uintptr_t; +#else +typedef signed long int khronos_intptr_t; +typedef unsigned long int khronos_uintptr_t; +#endif + +#if defined(_WIN64) +typedef signed long long int khronos_ssize_t; +typedef unsigned long long int khronos_usize_t; +#else +typedef signed long int khronos_ssize_t; +typedef unsigned long int khronos_usize_t; +#endif + +#if KHRONOS_SUPPORT_FLOAT +/* + * Float type + */ +typedef float khronos_float_t; +#endif + +#if KHRONOS_SUPPORT_INT64 +/* Time types + * + * These types can be used to represent a time interval in nanoseconds or + * an absolute Unadjusted System Time. Unadjusted System Time is the number + * of nanoseconds since some arbitrary system event (e.g. since the last + * time the system booted). The Unadjusted System Time is an unsigned + * 64 bit value that wraps back to 0 every 584 years. Time intervals + * may be either signed or unsigned. + */ +typedef khronos_uint64_t khronos_utime_nanoseconds_t; +typedef khronos_int64_t khronos_stime_nanoseconds_t; +#endif + +/* + * Dummy value used to pad enum types to 32 bits. + */ +#ifndef KHRONOS_MAX_ENUM +#define KHRONOS_MAX_ENUM 0x7FFFFFFF +#endif + +/* + * Enumerated boolean type + * + * Values other than zero should be considered to be true. Therefore + * comparisons should not be made against KHRONOS_TRUE. + */ +typedef enum { + KHRONOS_FALSE = 0, + KHRONOS_TRUE = 1, + KHRONOS_BOOLEAN_ENUM_FORCE_SIZE = KHRONOS_MAX_ENUM +} khronos_boolean_enum_t; + +#endif /* __khrplatform_h_ */ diff --git a/third_party/tlRender-install-Release/include/SDL2/SDL_pixels.h b/third_party/tlRender-install-Release/include/SDL2/SDL_pixels.h new file mode 100644 index 00000000..6f29811d --- /dev/null +++ b/third_party/tlRender-install-Release/include/SDL2/SDL_pixels.h @@ -0,0 +1,686 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2025 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +/** + * # CategoryPixels + * + * Header for the enumerated pixel format definitions. + */ + +#ifndef SDL_pixels_h_ +#define SDL_pixels_h_ + +#include "SDL_stdinc.h" +#include "SDL_endian.h" + +#include "begin_code.h" +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \name Transparency definitions + * + * These define alpha as the opacity of a surface. + */ +/* @{ */ +#define SDL_ALPHA_OPAQUE 255 +#define SDL_ALPHA_TRANSPARENT 0 +/* @} */ + +/** Pixel type. */ +typedef enum +{ + SDL_PIXELTYPE_UNKNOWN, + SDL_PIXELTYPE_INDEX1, + SDL_PIXELTYPE_INDEX4, + SDL_PIXELTYPE_INDEX8, + SDL_PIXELTYPE_PACKED8, + SDL_PIXELTYPE_PACKED16, + SDL_PIXELTYPE_PACKED32, + SDL_PIXELTYPE_ARRAYU8, + SDL_PIXELTYPE_ARRAYU16, + SDL_PIXELTYPE_ARRAYU32, + SDL_PIXELTYPE_ARRAYF16, + SDL_PIXELTYPE_ARRAYF32, + + /* This must be at the end of the list to avoid breaking the existing ABI */ + SDL_PIXELTYPE_INDEX2 +} SDL_PixelType; + +/** Bitmap pixel order, high bit -> low bit. */ +typedef enum +{ + SDL_BITMAPORDER_NONE, + SDL_BITMAPORDER_4321, + SDL_BITMAPORDER_1234 +} SDL_BitmapOrder; + +/** Packed component order, high bit -> low bit. */ +typedef enum +{ + SDL_PACKEDORDER_NONE, + SDL_PACKEDORDER_XRGB, + SDL_PACKEDORDER_RGBX, + SDL_PACKEDORDER_ARGB, + SDL_PACKEDORDER_RGBA, + SDL_PACKEDORDER_XBGR, + SDL_PACKEDORDER_BGRX, + SDL_PACKEDORDER_ABGR, + SDL_PACKEDORDER_BGRA +} SDL_PackedOrder; + +/** Array component order, low byte -> high byte. */ +/* !!! FIXME: in 2.1, make these not overlap differently with + !!! FIXME: SDL_PACKEDORDER_*, so we can simplify SDL_ISPIXELFORMAT_ALPHA */ +typedef enum +{ + SDL_ARRAYORDER_NONE, + SDL_ARRAYORDER_RGB, + SDL_ARRAYORDER_RGBA, + SDL_ARRAYORDER_ARGB, + SDL_ARRAYORDER_BGR, + SDL_ARRAYORDER_BGRA, + SDL_ARRAYORDER_ABGR +} SDL_ArrayOrder; + +/** Packed component layout. */ +typedef enum +{ + SDL_PACKEDLAYOUT_NONE, + SDL_PACKEDLAYOUT_332, + SDL_PACKEDLAYOUT_4444, + SDL_PACKEDLAYOUT_1555, + SDL_PACKEDLAYOUT_5551, + SDL_PACKEDLAYOUT_565, + SDL_PACKEDLAYOUT_8888, + SDL_PACKEDLAYOUT_2101010, + SDL_PACKEDLAYOUT_1010102 +} SDL_PackedLayout; + +#define SDL_DEFINE_PIXELFOURCC(A, B, C, D) SDL_FOURCC(A, B, C, D) + +#define SDL_DEFINE_PIXELFORMAT(type, order, layout, bits, bytes) \ + ((1 << 28) | ((type) << 24) | ((order) << 20) | ((layout) << 16) | \ + ((bits) << 8) | ((bytes) << 0)) + +#define SDL_PIXELFLAG(X) (((X) >> 28) & 0x0F) +#define SDL_PIXELTYPE(X) (((X) >> 24) & 0x0F) +#define SDL_PIXELORDER(X) (((X) >> 20) & 0x0F) +#define SDL_PIXELLAYOUT(X) (((X) >> 16) & 0x0F) +#define SDL_BITSPERPIXEL(X) (((X) >> 8) & 0xFF) +#define SDL_BYTESPERPIXEL(X) \ + (SDL_ISPIXELFORMAT_FOURCC(X) ? \ + ((((X) == SDL_PIXELFORMAT_YUY2) || \ + ((X) == SDL_PIXELFORMAT_UYVY) || \ + ((X) == SDL_PIXELFORMAT_YVYU)) ? 2 : 1) : (((X) >> 0) & 0xFF)) + +#define SDL_ISPIXELFORMAT_INDEXED(format) \ + (!SDL_ISPIXELFORMAT_FOURCC(format) && \ + ((SDL_PIXELTYPE(format) == SDL_PIXELTYPE_INDEX1) || \ + (SDL_PIXELTYPE(format) == SDL_PIXELTYPE_INDEX2) || \ + (SDL_PIXELTYPE(format) == SDL_PIXELTYPE_INDEX4) || \ + (SDL_PIXELTYPE(format) == SDL_PIXELTYPE_INDEX8))) + +#define SDL_ISPIXELFORMAT_PACKED(format) \ + (!SDL_ISPIXELFORMAT_FOURCC(format) && \ + ((SDL_PIXELTYPE(format) == SDL_PIXELTYPE_PACKED8) || \ + (SDL_PIXELTYPE(format) == SDL_PIXELTYPE_PACKED16) || \ + (SDL_PIXELTYPE(format) == SDL_PIXELTYPE_PACKED32))) + +#define SDL_ISPIXELFORMAT_ARRAY(format) \ + (!SDL_ISPIXELFORMAT_FOURCC(format) && \ + ((SDL_PIXELTYPE(format) == SDL_PIXELTYPE_ARRAYU8) || \ + (SDL_PIXELTYPE(format) == SDL_PIXELTYPE_ARRAYU16) || \ + (SDL_PIXELTYPE(format) == SDL_PIXELTYPE_ARRAYU32) || \ + (SDL_PIXELTYPE(format) == SDL_PIXELTYPE_ARRAYF16) || \ + (SDL_PIXELTYPE(format) == SDL_PIXELTYPE_ARRAYF32))) + +#define SDL_ISPIXELFORMAT_ALPHA(format) \ + ((SDL_ISPIXELFORMAT_PACKED(format) && \ + ((SDL_PIXELORDER(format) == SDL_PACKEDORDER_ARGB) || \ + (SDL_PIXELORDER(format) == SDL_PACKEDORDER_RGBA) || \ + (SDL_PIXELORDER(format) == SDL_PACKEDORDER_ABGR) || \ + (SDL_PIXELORDER(format) == SDL_PACKEDORDER_BGRA))) || \ + (SDL_ISPIXELFORMAT_ARRAY(format) && \ + ((SDL_PIXELORDER(format) == SDL_ARRAYORDER_ARGB) || \ + (SDL_PIXELORDER(format) == SDL_ARRAYORDER_RGBA) || \ + (SDL_PIXELORDER(format) == SDL_ARRAYORDER_ABGR) || \ + (SDL_PIXELORDER(format) == SDL_ARRAYORDER_BGRA)))) + +/* The flag is set to 1 because 0x1? is not in the printable ASCII range */ +#define SDL_ISPIXELFORMAT_FOURCC(format) \ + ((format) && (SDL_PIXELFLAG(format) != 1)) + +/* Note: If you modify this list, update SDL_GetPixelFormatName() */ +typedef enum +{ + SDL_PIXELFORMAT_UNKNOWN, + SDL_PIXELFORMAT_INDEX1LSB = + SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_INDEX1, SDL_BITMAPORDER_4321, 0, + 1, 0), + SDL_PIXELFORMAT_INDEX1MSB = + SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_INDEX1, SDL_BITMAPORDER_1234, 0, + 1, 0), + SDL_PIXELFORMAT_INDEX2LSB = + SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_INDEX2, SDL_BITMAPORDER_4321, 0, + 2, 0), + SDL_PIXELFORMAT_INDEX2MSB = + SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_INDEX2, SDL_BITMAPORDER_1234, 0, + 2, 0), + SDL_PIXELFORMAT_INDEX4LSB = + SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_INDEX4, SDL_BITMAPORDER_4321, 0, + 4, 0), + SDL_PIXELFORMAT_INDEX4MSB = + SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_INDEX4, SDL_BITMAPORDER_1234, 0, + 4, 0), + SDL_PIXELFORMAT_INDEX8 = + SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_INDEX8, 0, 0, 8, 1), + SDL_PIXELFORMAT_RGB332 = + SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED8, SDL_PACKEDORDER_XRGB, + SDL_PACKEDLAYOUT_332, 8, 1), + SDL_PIXELFORMAT_XRGB4444 = + SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_XRGB, + SDL_PACKEDLAYOUT_4444, 12, 2), + SDL_PIXELFORMAT_RGB444 = SDL_PIXELFORMAT_XRGB4444, + SDL_PIXELFORMAT_XBGR4444 = + SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_XBGR, + SDL_PACKEDLAYOUT_4444, 12, 2), + SDL_PIXELFORMAT_BGR444 = SDL_PIXELFORMAT_XBGR4444, + SDL_PIXELFORMAT_XRGB1555 = + SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_XRGB, + SDL_PACKEDLAYOUT_1555, 15, 2), + SDL_PIXELFORMAT_RGB555 = SDL_PIXELFORMAT_XRGB1555, + SDL_PIXELFORMAT_XBGR1555 = + SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_XBGR, + SDL_PACKEDLAYOUT_1555, 15, 2), + SDL_PIXELFORMAT_BGR555 = SDL_PIXELFORMAT_XBGR1555, + SDL_PIXELFORMAT_ARGB4444 = + SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_ARGB, + SDL_PACKEDLAYOUT_4444, 16, 2), + SDL_PIXELFORMAT_RGBA4444 = + SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_RGBA, + SDL_PACKEDLAYOUT_4444, 16, 2), + SDL_PIXELFORMAT_ABGR4444 = + SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_ABGR, + SDL_PACKEDLAYOUT_4444, 16, 2), + SDL_PIXELFORMAT_BGRA4444 = + SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_BGRA, + SDL_PACKEDLAYOUT_4444, 16, 2), + SDL_PIXELFORMAT_ARGB1555 = + SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_ARGB, + SDL_PACKEDLAYOUT_1555, 16, 2), + SDL_PIXELFORMAT_RGBA5551 = + SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_RGBA, + SDL_PACKEDLAYOUT_5551, 16, 2), + SDL_PIXELFORMAT_ABGR1555 = + SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_ABGR, + SDL_PACKEDLAYOUT_1555, 16, 2), + SDL_PIXELFORMAT_BGRA5551 = + SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_BGRA, + SDL_PACKEDLAYOUT_5551, 16, 2), + SDL_PIXELFORMAT_RGB565 = + SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_XRGB, + SDL_PACKEDLAYOUT_565, 16, 2), + SDL_PIXELFORMAT_BGR565 = + SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED16, SDL_PACKEDORDER_XBGR, + SDL_PACKEDLAYOUT_565, 16, 2), + SDL_PIXELFORMAT_RGB24 = + SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_ARRAYU8, SDL_ARRAYORDER_RGB, 0, + 24, 3), + SDL_PIXELFORMAT_BGR24 = + SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_ARRAYU8, SDL_ARRAYORDER_BGR, 0, + 24, 3), + SDL_PIXELFORMAT_XRGB8888 = + SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED32, SDL_PACKEDORDER_XRGB, + SDL_PACKEDLAYOUT_8888, 24, 4), + SDL_PIXELFORMAT_RGB888 = SDL_PIXELFORMAT_XRGB8888, + SDL_PIXELFORMAT_RGBX8888 = + SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED32, SDL_PACKEDORDER_RGBX, + SDL_PACKEDLAYOUT_8888, 24, 4), + SDL_PIXELFORMAT_XBGR8888 = + SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED32, SDL_PACKEDORDER_XBGR, + SDL_PACKEDLAYOUT_8888, 24, 4), + SDL_PIXELFORMAT_BGR888 = SDL_PIXELFORMAT_XBGR8888, + SDL_PIXELFORMAT_BGRX8888 = + SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED32, SDL_PACKEDORDER_BGRX, + SDL_PACKEDLAYOUT_8888, 24, 4), + SDL_PIXELFORMAT_ARGB8888 = + SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED32, SDL_PACKEDORDER_ARGB, + SDL_PACKEDLAYOUT_8888, 32, 4), + SDL_PIXELFORMAT_RGBA8888 = + SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED32, SDL_PACKEDORDER_RGBA, + SDL_PACKEDLAYOUT_8888, 32, 4), + SDL_PIXELFORMAT_ABGR8888 = + SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED32, SDL_PACKEDORDER_ABGR, + SDL_PACKEDLAYOUT_8888, 32, 4), + SDL_PIXELFORMAT_BGRA8888 = + SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED32, SDL_PACKEDORDER_BGRA, + SDL_PACKEDLAYOUT_8888, 32, 4), + SDL_PIXELFORMAT_ARGB2101010 = + SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED32, SDL_PACKEDORDER_ARGB, + SDL_PACKEDLAYOUT_2101010, 32, 4), + + /* Aliases for RGBA byte arrays of color data, for the current platform */ +#if SDL_BYTEORDER == SDL_BIG_ENDIAN + SDL_PIXELFORMAT_RGBA32 = SDL_PIXELFORMAT_RGBA8888, + SDL_PIXELFORMAT_ARGB32 = SDL_PIXELFORMAT_ARGB8888, + SDL_PIXELFORMAT_BGRA32 = SDL_PIXELFORMAT_BGRA8888, + SDL_PIXELFORMAT_ABGR32 = SDL_PIXELFORMAT_ABGR8888, + SDL_PIXELFORMAT_RGBX32 = SDL_PIXELFORMAT_RGBX8888, + SDL_PIXELFORMAT_XRGB32 = SDL_PIXELFORMAT_XRGB8888, + SDL_PIXELFORMAT_BGRX32 = SDL_PIXELFORMAT_BGRX8888, + SDL_PIXELFORMAT_XBGR32 = SDL_PIXELFORMAT_XBGR8888, +#else + SDL_PIXELFORMAT_RGBA32 = SDL_PIXELFORMAT_ABGR8888, + SDL_PIXELFORMAT_ARGB32 = SDL_PIXELFORMAT_BGRA8888, + SDL_PIXELFORMAT_BGRA32 = SDL_PIXELFORMAT_ARGB8888, + SDL_PIXELFORMAT_ABGR32 = SDL_PIXELFORMAT_RGBA8888, + SDL_PIXELFORMAT_RGBX32 = SDL_PIXELFORMAT_XBGR8888, + SDL_PIXELFORMAT_XRGB32 = SDL_PIXELFORMAT_BGRX8888, + SDL_PIXELFORMAT_BGRX32 = SDL_PIXELFORMAT_XRGB8888, + SDL_PIXELFORMAT_XBGR32 = SDL_PIXELFORMAT_RGBX8888, +#endif + + SDL_PIXELFORMAT_YV12 = /**< Planar mode: Y + V + U (3 planes) */ + SDL_DEFINE_PIXELFOURCC('Y', 'V', '1', '2'), + SDL_PIXELFORMAT_IYUV = /**< Planar mode: Y + U + V (3 planes) */ + SDL_DEFINE_PIXELFOURCC('I', 'Y', 'U', 'V'), + SDL_PIXELFORMAT_YUY2 = /**< Packed mode: Y0+U0+Y1+V0 (1 plane) */ + SDL_DEFINE_PIXELFOURCC('Y', 'U', 'Y', '2'), + SDL_PIXELFORMAT_UYVY = /**< Packed mode: U0+Y0+V0+Y1 (1 plane) */ + SDL_DEFINE_PIXELFOURCC('U', 'Y', 'V', 'Y'), + SDL_PIXELFORMAT_YVYU = /**< Packed mode: Y0+V0+Y1+U0 (1 plane) */ + SDL_DEFINE_PIXELFOURCC('Y', 'V', 'Y', 'U'), + SDL_PIXELFORMAT_NV12 = /**< Planar mode: Y + U/V interleaved (2 planes) */ + SDL_DEFINE_PIXELFOURCC('N', 'V', '1', '2'), + SDL_PIXELFORMAT_NV21 = /**< Planar mode: Y + V/U interleaved (2 planes) */ + SDL_DEFINE_PIXELFOURCC('N', 'V', '2', '1'), + SDL_PIXELFORMAT_EXTERNAL_OES = /**< Android video texture format */ + SDL_DEFINE_PIXELFOURCC('O', 'E', 'S', ' ') +} SDL_PixelFormatEnum; + +/** + * The bits of this structure can be directly reinterpreted as an + * integer-packed color which uses the SDL_PIXELFORMAT_RGBA32 format + * (SDL_PIXELFORMAT_ABGR8888 on little-endian systems and + * SDL_PIXELFORMAT_RGBA8888 on big-endian systems). + */ +typedef struct SDL_Color +{ + Uint8 r; + Uint8 g; + Uint8 b; + Uint8 a; +} SDL_Color; +#define SDL_Colour SDL_Color + +typedef struct SDL_Palette +{ + int ncolors; + SDL_Color *colors; + Uint32 version; + int refcount; +} SDL_Palette; + +/** + * A structure that contains pixel format information. + * + * Everything in the pixel format structure is read-only. + * + * A pixel format has either a palette or masks. If a palette is used `Rmask`, + * `Gmask`, `Bmask`, and `Amask` will be 0. + * + * An SDL_PixelFormat describes the format of the pixel data stored at the + * `pixels` field of an SDL_Surface. Every surface stores an SDL_PixelFormat + * in the `format` field. + * + * If you wish to do pixel level modifications on a surface, then + * understanding how SDL stores its color information is essential. + * + * For information on modern pixel color spaces, see the following Wikipedia + * article: http://en.wikipedia.org/wiki/RGBA_color_space + * + * \sa SDL_ConvertSurface + * \sa SDL_GetRGB + * \sa SDL_GetRGBA + * \sa SDL_MapRGB + * \sa SDL_MapRGBA + * \sa SDL_AllocFormat + * \sa SDL_FreeFormat + */ +typedef struct SDL_PixelFormat +{ + Uint32 format; + SDL_Palette *palette; + Uint8 BitsPerPixel; + Uint8 BytesPerPixel; + Uint8 padding[2]; + Uint32 Rmask; + Uint32 Gmask; + Uint32 Bmask; + Uint32 Amask; + Uint8 Rloss; + Uint8 Gloss; + Uint8 Bloss; + Uint8 Aloss; + Uint8 Rshift; + Uint8 Gshift; + Uint8 Bshift; + Uint8 Ashift; + int refcount; + struct SDL_PixelFormat *next; +} SDL_PixelFormat; + +/** + * Get the human readable name of a pixel format. + * + * \param format the pixel format to query. + * \returns the human readable name of the specified pixel format or + * `SDL_PIXELFORMAT_UNKNOWN` if the format isn't recognized. + * + * \since This function is available since SDL 2.0.0. + */ +extern DECLSPEC const char* SDLCALL SDL_GetPixelFormatName(Uint32 format); + +/** + * Convert one of the enumerated pixel formats to a bpp value and RGBA masks. + * + * \param format one of the SDL_PixelFormatEnum values. + * \param bpp a bits per pixel value; usually 15, 16, or 32. + * \param Rmask a pointer filled in with the red mask for the format. + * \param Gmask a pointer filled in with the green mask for the format. + * \param Bmask a pointer filled in with the blue mask for the format. + * \param Amask a pointer filled in with the alpha mask for the format. + * \returns SDL_TRUE on success or SDL_FALSE if the conversion wasn't + * possible; call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_MasksToPixelFormatEnum + */ +extern DECLSPEC SDL_bool SDLCALL SDL_PixelFormatEnumToMasks(Uint32 format, + int *bpp, + Uint32 * Rmask, + Uint32 * Gmask, + Uint32 * Bmask, + Uint32 * Amask); + +/** + * Convert a bpp value and RGBA masks to an enumerated pixel format. + * + * This will return `SDL_PIXELFORMAT_UNKNOWN` if the conversion wasn't + * possible. + * + * \param bpp a bits per pixel value; usually 15, 16, or 32. + * \param Rmask the red mask for the format. + * \param Gmask the green mask for the format. + * \param Bmask the blue mask for the format. + * \param Amask the alpha mask for the format. + * \returns one of the SDL_PixelFormatEnum values. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_PixelFormatEnumToMasks + */ +extern DECLSPEC Uint32 SDLCALL SDL_MasksToPixelFormatEnum(int bpp, + Uint32 Rmask, + Uint32 Gmask, + Uint32 Bmask, + Uint32 Amask); + +/** + * Create an SDL_PixelFormat structure corresponding to a pixel format. + * + * Returned structure may come from a shared global cache (i.e. not newly + * allocated), and hence should not be modified, especially the palette. Weird + * errors such as `Blit combination not supported` may occur. + * + * \param pixel_format one of the SDL_PixelFormatEnum values. + * \returns the new SDL_PixelFormat structure or NULL on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_FreeFormat + */ +extern DECLSPEC SDL_PixelFormat * SDLCALL SDL_AllocFormat(Uint32 pixel_format); + +/** + * Free an SDL_PixelFormat structure allocated by SDL_AllocFormat(). + * + * \param format the SDL_PixelFormat structure to free. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_AllocFormat + */ +extern DECLSPEC void SDLCALL SDL_FreeFormat(SDL_PixelFormat *format); + +/** + * Create a palette structure with the specified number of color entries. + * + * The palette entries are initialized to white. + * + * \param ncolors represents the number of color entries in the color palette. + * \returns a new SDL_Palette structure on success or NULL on failure (e.g. if + * there wasn't enough memory); call SDL_GetError() for more + * information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_FreePalette + */ +extern DECLSPEC SDL_Palette *SDLCALL SDL_AllocPalette(int ncolors); + +/** + * Set the palette for a pixel format structure. + * + * \param format the SDL_PixelFormat structure that will use the palette. + * \param palette the SDL_Palette structure that will be used. + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_AllocPalette + * \sa SDL_FreePalette + */ +extern DECLSPEC int SDLCALL SDL_SetPixelFormatPalette(SDL_PixelFormat * format, + SDL_Palette *palette); + +/** + * Set a range of colors in a palette. + * + * \param palette the SDL_Palette structure to modify. + * \param colors an array of SDL_Color structures to copy into the palette. + * \param firstcolor the index of the first palette entry to modify. + * \param ncolors the number of entries to modify. + * \returns 0 on success or a negative error code if not all of the colors + * could be set; call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_AllocPalette + * \sa SDL_CreateRGBSurface + */ +extern DECLSPEC int SDLCALL SDL_SetPaletteColors(SDL_Palette * palette, + const SDL_Color * colors, + int firstcolor, int ncolors); + +/** + * Free a palette created with SDL_AllocPalette(). + * + * \param palette the SDL_Palette structure to be freed. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_AllocPalette + */ +extern DECLSPEC void SDLCALL SDL_FreePalette(SDL_Palette * palette); + +/** + * Map an RGB triple to an opaque pixel value for a given pixel format. + * + * This function maps the RGB color value to the specified pixel format and + * returns the pixel value best approximating the given RGB color value for + * the given pixel format. + * + * If the format has a palette (8-bit) the index of the closest matching color + * in the palette will be returned. + * + * If the specified pixel format has an alpha component it will be returned as + * all 1 bits (fully opaque). + * + * If the pixel format bpp (color depth) is less than 32-bpp then the unused + * upper bits of the return value can safely be ignored (e.g., with a 16-bpp + * format the return value can be assigned to a Uint16, and similarly a Uint8 + * for an 8-bpp format). + * + * \param format an SDL_PixelFormat structure describing the pixel format. + * \param r the red component of the pixel in the range 0-255. + * \param g the green component of the pixel in the range 0-255. + * \param b the blue component of the pixel in the range 0-255. + * \returns a pixel value. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetRGB + * \sa SDL_GetRGBA + * \sa SDL_MapRGBA + */ +extern DECLSPEC Uint32 SDLCALL SDL_MapRGB(const SDL_PixelFormat * format, + Uint8 r, Uint8 g, Uint8 b); + +/** + * Map an RGBA quadruple to a pixel value for a given pixel format. + * + * This function maps the RGBA color value to the specified pixel format and + * returns the pixel value best approximating the given RGBA color value for + * the given pixel format. + * + * If the specified pixel format has no alpha component the alpha value will + * be ignored (as it will be in formats with a palette). + * + * If the format has a palette (8-bit) the index of the closest matching color + * in the palette will be returned. + * + * If the pixel format bpp (color depth) is less than 32-bpp then the unused + * upper bits of the return value can safely be ignored (e.g., with a 16-bpp + * format the return value can be assigned to a Uint16, and similarly a Uint8 + * for an 8-bpp format). + * + * \param format an SDL_PixelFormat structure describing the format of the + * pixel. + * \param r the red component of the pixel in the range 0-255. + * \param g the green component of the pixel in the range 0-255. + * \param b the blue component of the pixel in the range 0-255. + * \param a the alpha component of the pixel in the range 0-255. + * \returns a pixel value. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetRGB + * \sa SDL_GetRGBA + * \sa SDL_MapRGB + */ +extern DECLSPEC Uint32 SDLCALL SDL_MapRGBA(const SDL_PixelFormat * format, + Uint8 r, Uint8 g, Uint8 b, + Uint8 a); + +/** + * Get RGB values from a pixel in the specified format. + * + * This function uses the entire 8-bit [0..255] range when converting color + * components from pixel formats with less than 8-bits per RGB component + * (e.g., a completely white pixel in 16-bit RGB565 format would return [0xff, + * 0xff, 0xff] not [0xf8, 0xfc, 0xf8]). + * + * \param pixel a pixel value. + * \param format an SDL_PixelFormat structure describing the format of the + * pixel. + * \param r a pointer filled in with the red component. + * \param g a pointer filled in with the green component. + * \param b a pointer filled in with the blue component. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetRGBA + * \sa SDL_MapRGB + * \sa SDL_MapRGBA + */ +extern DECLSPEC void SDLCALL SDL_GetRGB(Uint32 pixel, + const SDL_PixelFormat * format, + Uint8 * r, Uint8 * g, Uint8 * b); + +/** + * Get RGBA values from a pixel in the specified format. + * + * This function uses the entire 8-bit [0..255] range when converting color + * components from pixel formats with less than 8-bits per RGB component + * (e.g., a completely white pixel in 16-bit RGB565 format would return [0xff, + * 0xff, 0xff] not [0xf8, 0xfc, 0xf8]). + * + * If the surface has no alpha component, the alpha will be returned as 0xff + * (100% opaque). + * + * \param pixel a pixel value. + * \param format an SDL_PixelFormat structure describing the format of the + * pixel. + * \param r a pointer filled in with the red component. + * \param g a pointer filled in with the green component. + * \param b a pointer filled in with the blue component. + * \param a a pointer filled in with the alpha component. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetRGB + * \sa SDL_MapRGB + * \sa SDL_MapRGBA + */ +extern DECLSPEC void SDLCALL SDL_GetRGBA(Uint32 pixel, + const SDL_PixelFormat * format, + Uint8 * r, Uint8 * g, Uint8 * b, + Uint8 * a); + +/** + * Calculate a 256 entry gamma ramp for a gamma value. + * + * \param gamma a gamma value where 0.0 is black and 1.0 is identity. + * \param ramp an array of 256 values filled in with the gamma ramp. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_SetWindowGammaRamp + */ +extern DECLSPEC void SDLCALL SDL_CalculateGammaRamp(float gamma, Uint16 * ramp); + + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include "close_code.h" + +#endif /* SDL_pixels_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/third_party/tlRender-install-Release/include/SDL2/SDL_platform.h b/third_party/tlRender-install-Release/include/SDL2/SDL_platform.h new file mode 100644 index 00000000..64ece4fe --- /dev/null +++ b/third_party/tlRender-install-Release/include/SDL2/SDL_platform.h @@ -0,0 +1,275 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2025 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +/** + * # CategoryPlatform + * + * Try to get a standard set of platform defines. + */ + +#ifndef SDL_platform_h_ +#define SDL_platform_h_ + +#if defined(_AIX) +#undef __AIX__ +#define __AIX__ 1 +#endif +#if defined(__HAIKU__) +#undef __HAIKU__ +#define __HAIKU__ 1 +#endif +#if defined(bsdi) || defined(__bsdi) || defined(__bsdi__) +#undef __BSDI__ +#define __BSDI__ 1 +#endif +#if defined(_arch_dreamcast) +#undef __DREAMCAST__ +#define __DREAMCAST__ 1 +#endif +#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__DragonFly__) +#undef __FREEBSD__ +#define __FREEBSD__ 1 +#endif +#if defined(hpux) || defined(__hpux) || defined(__hpux__) +#undef __HPUX__ +#define __HPUX__ 1 +#endif +#if defined(sgi) || defined(__sgi) || defined(__sgi__) || defined(_SGI_SOURCE) +#undef __IRIX__ +#define __IRIX__ 1 +#endif +#if (defined(linux) || defined(__linux) || defined(__linux__)) +#undef __LINUX__ +#define __LINUX__ 1 +#endif +#if defined(ANDROID) || defined(__ANDROID__) +#undef __ANDROID__ +#undef __LINUX__ /* do we need to do this? */ +#define __ANDROID__ 1 +#endif +#if defined(__NGAGE__) +#undef __NGAGE__ +#define __NGAGE__ 1 +#endif + +#if defined(__APPLE__) +/* lets us know what version of Mac OS X we're compiling on */ +#include +#ifndef __has_extension /* Older compilers don't support this */ +#define __has_extension(x) 0 +#include +#undef __has_extension +#else +#include +#endif + +/* Fix building with older SDKs that don't define these + See this for more information: + https://stackoverflow.com/questions/12132933/preprocessor-macro-for-os-x-targets +*/ +#ifndef TARGET_OS_MACCATALYST +#define TARGET_OS_MACCATALYST 0 +#endif +#ifndef TARGET_OS_IOS +#define TARGET_OS_IOS 0 +#endif +#ifndef TARGET_OS_IPHONE +#define TARGET_OS_IPHONE 0 +#endif +#ifndef TARGET_OS_TV +#define TARGET_OS_TV 0 +#endif +#ifndef TARGET_OS_SIMULATOR +#define TARGET_OS_SIMULATOR 0 +#endif + +#if TARGET_OS_TV +#undef __TVOS__ +#define __TVOS__ 1 +#endif +#if TARGET_OS_IPHONE +/* if compiling for iOS */ +#undef __IPHONEOS__ +#define __IPHONEOS__ 1 +#undef __MACOSX__ +#else +/* if not compiling for iOS */ +#undef __MACOSX__ +#define __MACOSX__ 1 +#if MAC_OS_X_VERSION_MIN_REQUIRED < 1070 +# error SDL for Mac OS X only supports deploying on 10.7 and above. +#endif /* MAC_OS_X_VERSION_MIN_REQUIRED < 1070 */ +#endif /* TARGET_OS_IPHONE */ +#endif /* defined(__APPLE__) */ + +#if defined(__NetBSD__) +#undef __NETBSD__ +#define __NETBSD__ 1 +#endif +#if defined(__OpenBSD__) +#undef __OPENBSD__ +#define __OPENBSD__ 1 +#endif +#if defined(__OS2__) || defined(__EMX__) +#undef __OS2__ +#define __OS2__ 1 +#endif +#if defined(osf) || defined(__osf) || defined(__osf__) || defined(_OSF_SOURCE) +#undef __OSF__ +#define __OSF__ 1 +#endif +#if defined(__QNXNTO__) +#undef __QNXNTO__ +#define __QNXNTO__ 1 +#endif +#if defined(riscos) || defined(__riscos) || defined(__riscos__) +#undef __RISCOS__ +#define __RISCOS__ 1 +#endif +#if defined(__sun) && defined(__SVR4) +#undef __SOLARIS__ +#define __SOLARIS__ 1 +#endif + +#if defined(WIN32) || defined(_WIN32) || defined(__CYGWIN__) || defined(__MINGW32__) +/* Try to find out if we're compiling for WinRT, GDK or non-WinRT/GDK */ +#if defined(_MSC_VER) && defined(__has_include) +#if __has_include() +#define HAVE_WINAPIFAMILY_H 1 +#else +#define HAVE_WINAPIFAMILY_H 0 +#endif + +/* If _USING_V110_SDK71_ is defined it means we are using the Windows XP toolset. */ +#elif defined(_MSC_VER) && (_MSC_VER >= 1700 && !_USING_V110_SDK71_) /* _MSC_VER == 1700 for Visual Studio 2012 */ +#define HAVE_WINAPIFAMILY_H 1 +#else +#define HAVE_WINAPIFAMILY_H 0 +#endif + +#if HAVE_WINAPIFAMILY_H +#include +#define WINAPI_FAMILY_WINRT (!WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) && WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP)) +#else +#define WINAPI_FAMILY_WINRT 0 +#endif /* HAVE_WINAPIFAMILY_H */ + +#if (HAVE_WINAPIFAMILY_H) && defined(WINAPI_FAMILY_PHONE_APP) +#define SDL_WINAPI_FAMILY_PHONE (WINAPI_FAMILY == WINAPI_FAMILY_PHONE_APP) +#else +#define SDL_WINAPI_FAMILY_PHONE 0 +#endif + +#if WINAPI_FAMILY_WINRT +#undef __WINRT__ +#define __WINRT__ 1 +#elif defined(_GAMING_DESKTOP) /* GDK project configuration always defines _GAMING_XXX */ +#undef __WINGDK__ +#define __WINGDK__ 1 +#elif defined(_GAMING_XBOX_XBOXONE) +#undef __XBOXONE__ +#define __XBOXONE__ 1 +#elif defined(_GAMING_XBOX_SCARLETT) +#undef __XBOXSERIES__ +#define __XBOXSERIES__ 1 +#else +#undef __WINDOWS__ +#define __WINDOWS__ 1 +#endif +#endif /* defined(WIN32) || defined(_WIN32) || defined(__CYGWIN__) */ + +#if defined(__WINDOWS__) +#undef __WIN32__ +#define __WIN32__ 1 +#endif +/* This is to support generic "any GDK" separate from a platform-specific GDK */ +#if defined(__WINGDK__) || defined(__XBOXONE__) || defined(__XBOXSERIES__) +#undef __GDK__ +#define __GDK__ 1 +#endif +#if defined(__PSP__) || defined(__psp__) +#ifdef __PSP__ +#undef __PSP__ +#endif +#define __PSP__ 1 +#endif +#if defined(PS2) +#define __PS2__ 1 +#endif + +/* The NACL compiler defines __native_client__ and __pnacl__ + * Ref: http://www.chromium.org/nativeclient/pnacl/stability-of-the-pnacl-bitcode-abi + */ +#if defined(__native_client__) +#undef __LINUX__ +#undef __NACL__ +#define __NACL__ 1 +#endif +#if defined(__pnacl__) +#undef __LINUX__ +#undef __PNACL__ +#define __PNACL__ 1 +/* PNACL with newlib supports static linking only */ +#define __SDL_NOGETPROCADDR__ +#endif + +#if defined(__vita__) +#define __VITA__ 1 +#endif + +#if defined(__3DS__) +#undef __3DS__ +#define __3DS__ 1 +#endif + +#include "begin_code.h" +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/** + * Get the name of the platform. + * + * Here are the names returned for some (but not all) supported platforms: + * + * - "Windows" + * - "Mac OS X" + * - "Linux" + * - "iOS" + * - "Android" + * + * \returns the name of the platform. If the correct platform name is not + * available, returns a string beginning with the text "Unknown". + * + * \since This function is available since SDL 2.0.0. + */ +extern DECLSPEC const char * SDLCALL SDL_GetPlatform (void); + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include "close_code.h" + +#endif /* SDL_platform_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/third_party/tlRender-install-Release/include/SDL2/SDL_power.h b/third_party/tlRender-install-Release/include/SDL2/SDL_power.h new file mode 100644 index 00000000..755c5d42 --- /dev/null +++ b/third_party/tlRender-install-Release/include/SDL2/SDL_power.h @@ -0,0 +1,87 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2025 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +#ifndef SDL_power_h_ +#define SDL_power_h_ + +/** + * # CategoryPower + * + * Header for the SDL power management routines. + */ + +#include "SDL_stdinc.h" + +#include "begin_code.h" +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/** + * The basic state for the system's power supply. + */ +typedef enum SDL_PowerState +{ + SDL_POWERSTATE_UNKNOWN, /**< cannot determine power status */ + SDL_POWERSTATE_ON_BATTERY, /**< Not plugged in, running on the battery */ + SDL_POWERSTATE_NO_BATTERY, /**< Plugged in, no battery available */ + SDL_POWERSTATE_CHARGING, /**< Plugged in, charging battery */ + SDL_POWERSTATE_CHARGED /**< Plugged in, battery charged */ +} SDL_PowerState; + +/** + * Get the current power supply details. + * + * You should never take a battery status as absolute truth. Batteries + * (especially failing batteries) are delicate hardware, and the values + * reported here are best estimates based on what that hardware reports. It's + * not uncommon for older batteries to lose stored power much faster than it + * reports, or completely drain when reporting it has 20 percent left, etc. + * + * Battery status can change at any time; if you are concerned with power + * state, you should call this function frequently, and perhaps ignore changes + * until they seem to be stable for a few seconds. + * + * It's possible a platform can only report battery percentage or time left + * but not both. + * + * \param seconds seconds of battery life left, you can pass a NULL here if + * you don't care, will return -1 if we can't determine a + * value, or we're not running on a battery. + * \param percent percentage of battery life left, between 0 and 100, you can + * pass a NULL here if you don't care, will return -1 if we + * can't determine a value, or we're not running on a battery. + * \returns an SDL_PowerState enum representing the current battery state. + * + * \since This function is available since SDL 2.0.0. + */ +extern DECLSPEC SDL_PowerState SDLCALL SDL_GetPowerInfo(int *seconds, int *percent); + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include "close_code.h" + +#endif /* SDL_power_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/third_party/tlRender-install-Release/include/SDL2/SDL_quit.h b/third_party/tlRender-install-Release/include/SDL2/SDL_quit.h new file mode 100644 index 00000000..03630e23 --- /dev/null +++ b/third_party/tlRender-install-Release/include/SDL2/SDL_quit.h @@ -0,0 +1,50 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2025 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +/** + * # CategoryQuit + * + * An SDL_QUIT event is generated when the user tries to close the application + * window. If it is ignored or filtered out, the window will remain open. If + * it is not ignored or filtered, it is queued normally and the window is + * allowed to close. When the window is closed, screen updates will complete, + * but have no effect. + * + * SDL_Init() installs signal handlers for SIGINT (keyboard interrupt) and + * SIGTERM (system termination request), if handlers do not already exist, + * that generate SDL_QUIT events as well. There is no way to determine the + * cause of an SDL_QUIT event, but setting a signal handler in your + * application will override the default generation of quit events for that + * signal. + */ + +#ifndef SDL_quit_h_ +#define SDL_quit_h_ + +#include "SDL_stdinc.h" +#include "SDL_error.h" + +/* There are no functions directly affecting the quit event */ + +#define SDL_QuitRequested() \ + (SDL_PumpEvents(), (SDL_PeepEvents(NULL,0,SDL_PEEKEVENT,SDL_QUIT,SDL_QUIT) > 0)) + +#endif /* SDL_quit_h_ */ diff --git a/third_party/tlRender-install-Release/include/SDL2/SDL_rect.h b/third_party/tlRender-install-Release/include/SDL2/SDL_rect.h new file mode 100644 index 00000000..b7e609d9 --- /dev/null +++ b/third_party/tlRender-install-Release/include/SDL2/SDL_rect.h @@ -0,0 +1,376 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2025 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +/** + * # CategoryRect + * + * Header file for SDL_rect definition and management functions. + */ + +#ifndef SDL_rect_h_ +#define SDL_rect_h_ + +#include "SDL_stdinc.h" +#include "SDL_error.h" +#include "SDL_pixels.h" +#include "SDL_rwops.h" + +#include "begin_code.h" +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/** + * The structure that defines a point (integer) + * + * \sa SDL_EnclosePoints + * \sa SDL_PointInRect + */ +typedef struct SDL_Point +{ + int x; + int y; +} SDL_Point; + +/** + * The structure that defines a point (floating point) + * + * \sa SDL_EncloseFPoints + * \sa SDL_PointInFRect + */ +typedef struct SDL_FPoint +{ + float x; + float y; +} SDL_FPoint; + + +/** + * A rectangle, with the origin at the upper left (integer). + * + * \sa SDL_RectEmpty + * \sa SDL_RectEquals + * \sa SDL_HasIntersection + * \sa SDL_IntersectRect + * \sa SDL_IntersectRectAndLine + * \sa SDL_UnionRect + * \sa SDL_EnclosePoints + */ +typedef struct SDL_Rect +{ + int x, y; + int w, h; +} SDL_Rect; + + +/** + * A rectangle, with the origin at the upper left (floating point). + * + * \sa SDL_FRectEmpty + * \sa SDL_FRectEquals + * \sa SDL_FRectEqualsEpsilon + * \sa SDL_HasIntersectionF + * \sa SDL_IntersectFRect + * \sa SDL_IntersectFRectAndLine + * \sa SDL_UnionFRect + * \sa SDL_EncloseFPoints + * \sa SDL_PointInFRect + */ +typedef struct SDL_FRect +{ + float x; + float y; + float w; + float h; +} SDL_FRect; + + +/** + * Returns true if point resides inside a rectangle. + */ +SDL_FORCE_INLINE SDL_bool SDL_PointInRect(const SDL_Point *p, const SDL_Rect *r) +{ + return ( (p->x >= r->x) && (p->x < (r->x + r->w)) && + (p->y >= r->y) && (p->y < (r->y + r->h)) ) ? SDL_TRUE : SDL_FALSE; +} + +/** + * Returns true if the rectangle has no area. + */ +SDL_FORCE_INLINE SDL_bool SDL_RectEmpty(const SDL_Rect *r) +{ + return ((!r) || (r->w <= 0) || (r->h <= 0)) ? SDL_TRUE : SDL_FALSE; +} + +/** + * Returns true if the two rectangles are equal. + */ +SDL_FORCE_INLINE SDL_bool SDL_RectEquals(const SDL_Rect *a, const SDL_Rect *b) +{ + return (a && b && (a->x == b->x) && (a->y == b->y) && + (a->w == b->w) && (a->h == b->h)) ? SDL_TRUE : SDL_FALSE; +} + +/** + * Determine whether two rectangles intersect. + * + * If either pointer is NULL the function will return SDL_FALSE. + * + * \param A an SDL_Rect structure representing the first rectangle. + * \param B an SDL_Rect structure representing the second rectangle. + * \returns SDL_TRUE if there is an intersection, SDL_FALSE otherwise. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_IntersectRect + */ +extern DECLSPEC SDL_bool SDLCALL SDL_HasIntersection(const SDL_Rect * A, + const SDL_Rect * B); + +/** + * Calculate the intersection of two rectangles. + * + * If `result` is NULL then this function will return SDL_FALSE. + * + * \param A an SDL_Rect structure representing the first rectangle. + * \param B an SDL_Rect structure representing the second rectangle. + * \param result an SDL_Rect structure filled in with the intersection of + * rectangles `A` and `B`. + * \returns SDL_TRUE if there is an intersection, SDL_FALSE otherwise. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_HasIntersection + */ +extern DECLSPEC SDL_bool SDLCALL SDL_IntersectRect(const SDL_Rect * A, + const SDL_Rect * B, + SDL_Rect * result); + +/** + * Calculate the union of two rectangles. + * + * \param A an SDL_Rect structure representing the first rectangle. + * \param B an SDL_Rect structure representing the second rectangle. + * \param result an SDL_Rect structure filled in with the union of rectangles + * `A` and `B`. + * + * \since This function is available since SDL 2.0.0. + */ +extern DECLSPEC void SDLCALL SDL_UnionRect(const SDL_Rect * A, + const SDL_Rect * B, + SDL_Rect * result); + +/** + * Calculate a minimal rectangle enclosing a set of points. + * + * If `clip` is not NULL then only points inside of the clipping rectangle are + * considered. + * + * \param points an array of SDL_Point structures representing points to be + * enclosed. + * \param count the number of structures in the `points` array. + * \param clip an SDL_Rect used for clipping or NULL to enclose all points. + * \param result an SDL_Rect structure filled in with the minimal enclosing + * rectangle. + * \returns SDL_TRUE if any points were enclosed or SDL_FALSE if all the + * points were outside of the clipping rectangle. + * + * \since This function is available since SDL 2.0.0. + */ +extern DECLSPEC SDL_bool SDLCALL SDL_EnclosePoints(const SDL_Point * points, + int count, + const SDL_Rect * clip, + SDL_Rect * result); + +/** + * Calculate the intersection of a rectangle and line segment. + * + * This function is used to clip a line segment to a rectangle. A line segment + * contained entirely within the rectangle or that does not intersect will + * remain unchanged. A line segment that crosses the rectangle at either or + * both ends will be clipped to the boundary of the rectangle and the new + * coordinates saved in `X1`, `Y1`, `X2`, and/or `Y2` as necessary. + * + * \param rect an SDL_Rect structure representing the rectangle to intersect. + * \param X1 a pointer to the starting X-coordinate of the line. + * \param Y1 a pointer to the starting Y-coordinate of the line. + * \param X2 a pointer to the ending X-coordinate of the line. + * \param Y2 a pointer to the ending Y-coordinate of the line. + * \returns SDL_TRUE if there is an intersection, SDL_FALSE otherwise. + * + * \since This function is available since SDL 2.0.0. + */ +extern DECLSPEC SDL_bool SDLCALL SDL_IntersectRectAndLine(const SDL_Rect * + rect, int *X1, + int *Y1, int *X2, + int *Y2); + + +/* SDL_FRect versions... */ + +/** + * Returns true if point resides inside a rectangle. + */ +SDL_FORCE_INLINE SDL_bool SDL_PointInFRect(const SDL_FPoint *p, const SDL_FRect *r) +{ + return ( (p->x >= r->x) && (p->x < (r->x + r->w)) && + (p->y >= r->y) && (p->y < (r->y + r->h)) ) ? SDL_TRUE : SDL_FALSE; +} + +/** + * Returns true if the rectangle has no area. + */ +SDL_FORCE_INLINE SDL_bool SDL_FRectEmpty(const SDL_FRect *r) +{ + return ((!r) || (r->w <= 0.0f) || (r->h <= 0.0f)) ? SDL_TRUE : SDL_FALSE; +} + +/** + * Returns true if the two rectangles are equal, within some given epsilon. + * + * \since This function is available since SDL 2.0.22. + */ +SDL_FORCE_INLINE SDL_bool SDL_FRectEqualsEpsilon(const SDL_FRect *a, const SDL_FRect *b, const float epsilon) +{ + return (a && b && ((a == b) || + ((SDL_fabsf(a->x - b->x) <= epsilon) && + (SDL_fabsf(a->y - b->y) <= epsilon) && + (SDL_fabsf(a->w - b->w) <= epsilon) && + (SDL_fabsf(a->h - b->h) <= epsilon)))) + ? SDL_TRUE : SDL_FALSE; +} + +/** + * Returns true if the two rectangles are equal, using a default epsilon. + * + * \since This function is available since SDL 2.0.22. + */ +SDL_FORCE_INLINE SDL_bool SDL_FRectEquals(const SDL_FRect *a, const SDL_FRect *b) +{ + return SDL_FRectEqualsEpsilon(a, b, SDL_FLT_EPSILON); +} + +/** + * Determine whether two rectangles intersect with float precision. + * + * If either pointer is NULL the function will return SDL_FALSE. + * + * \param A an SDL_FRect structure representing the first rectangle. + * \param B an SDL_FRect structure representing the second rectangle. + * \returns SDL_TRUE if there is an intersection, SDL_FALSE otherwise. + * + * \since This function is available since SDL 2.0.22. + * + * \sa SDL_IntersectRect + */ +extern DECLSPEC SDL_bool SDLCALL SDL_HasIntersectionF(const SDL_FRect * A, + const SDL_FRect * B); + +/** + * Calculate the intersection of two rectangles with float precision. + * + * If `result` is NULL then this function will return SDL_FALSE. + * + * \param A an SDL_FRect structure representing the first rectangle. + * \param B an SDL_FRect structure representing the second rectangle. + * \param result an SDL_FRect structure filled in with the intersection of + * rectangles `A` and `B`. + * \returns SDL_TRUE if there is an intersection, SDL_FALSE otherwise. + * + * \since This function is available since SDL 2.0.22. + * + * \sa SDL_HasIntersectionF + */ +extern DECLSPEC SDL_bool SDLCALL SDL_IntersectFRect(const SDL_FRect * A, + const SDL_FRect * B, + SDL_FRect * result); + +/** + * Calculate the union of two rectangles with float precision. + * + * \param A an SDL_FRect structure representing the first rectangle. + * \param B an SDL_FRect structure representing the second rectangle. + * \param result an SDL_FRect structure filled in with the union of rectangles + * `A` and `B`. + * + * \since This function is available since SDL 2.0.22. + */ +extern DECLSPEC void SDLCALL SDL_UnionFRect(const SDL_FRect * A, + const SDL_FRect * B, + SDL_FRect * result); + +/** + * Calculate a minimal rectangle enclosing a set of points with float + * precision. + * + * If `clip` is not NULL then only points inside of the clipping rectangle are + * considered. + * + * \param points an array of SDL_FPoint structures representing points to be + * enclosed. + * \param count the number of structures in the `points` array. + * \param clip an SDL_FRect used for clipping or NULL to enclose all points. + * \param result an SDL_FRect structure filled in with the minimal enclosing + * rectangle. + * \returns SDL_TRUE if any points were enclosed or SDL_FALSE if all the + * points were outside of the clipping rectangle. + * + * \since This function is available since SDL 2.0.22. + */ +extern DECLSPEC SDL_bool SDLCALL SDL_EncloseFPoints(const SDL_FPoint * points, + int count, + const SDL_FRect * clip, + SDL_FRect * result); + +/** + * Calculate the intersection of a rectangle and line segment with float + * precision. + * + * This function is used to clip a line segment to a rectangle. A line segment + * contained entirely within the rectangle or that does not intersect will + * remain unchanged. A line segment that crosses the rectangle at either or + * both ends will be clipped to the boundary of the rectangle and the new + * coordinates saved in `X1`, `Y1`, `X2`, and/or `Y2` as necessary. + * + * \param rect an SDL_FRect structure representing the rectangle to intersect. + * \param X1 a pointer to the starting X-coordinate of the line. + * \param Y1 a pointer to the starting Y-coordinate of the line. + * \param X2 a pointer to the ending X-coordinate of the line. + * \param Y2 a pointer to the ending Y-coordinate of the line. + * \returns SDL_TRUE if there is an intersection, SDL_FALSE otherwise. + * + * \since This function is available since SDL 2.0.22. + */ +extern DECLSPEC SDL_bool SDLCALL SDL_IntersectFRectAndLine(const SDL_FRect * + rect, float *X1, + float *Y1, float *X2, + float *Y2); + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include "close_code.h" + +#endif /* SDL_rect_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/third_party/tlRender-install-Release/include/SDL2/SDL_render.h b/third_party/tlRender-install-Release/include/SDL2/SDL_render.h new file mode 100644 index 00000000..52741721 --- /dev/null +++ b/third_party/tlRender-install-Release/include/SDL2/SDL_render.h @@ -0,0 +1,1932 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2025 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +/** + * # CategoryRender + * + * Header file for SDL 2D rendering functions. + * + * This API supports the following features: + * + * - single pixel points + * - single pixel lines + * - filled rectangles + * - texture images + * + * The primitives may be drawn in opaque, blended, or additive modes. + * + * The texture images may be drawn in opaque, blended, or additive modes. They + * can have an additional color tint or alpha modulation applied to them, and + * may also be stretched with linear interpolation. + * + * This API is designed to accelerate simple 2D operations. You may want more + * functionality such as polygons and particle effects and in that case you + * should use SDL's OpenGL/Direct3D support or one of the many good 3D + * engines. + * + * These functions must be called from the main thread. See this bug for + * details: https://github.com/libsdl-org/SDL/issues/986 + */ + +#ifndef SDL_render_h_ +#define SDL_render_h_ + +#include "SDL_stdinc.h" +#include "SDL_rect.h" +#include "SDL_video.h" + +#include "begin_code.h" +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/** + * Flags used when creating a rendering context + */ +typedef enum SDL_RendererFlags +{ + SDL_RENDERER_SOFTWARE = 0x00000001, /**< The renderer is a software fallback */ + SDL_RENDERER_ACCELERATED = 0x00000002, /**< The renderer uses hardware + acceleration */ + SDL_RENDERER_PRESENTVSYNC = 0x00000004, /**< Present is synchronized + with the refresh rate */ + SDL_RENDERER_TARGETTEXTURE = 0x00000008 /**< The renderer supports + rendering to texture */ +} SDL_RendererFlags; + +/** + * Information on the capabilities of a render driver or context. + */ +typedef struct SDL_RendererInfo +{ + const char *name; /**< The name of the renderer */ + Uint32 flags; /**< Supported SDL_RendererFlags */ + Uint32 num_texture_formats; /**< The number of available texture formats */ + Uint32 texture_formats[16]; /**< The available texture formats */ + int max_texture_width; /**< The maximum texture width */ + int max_texture_height; /**< The maximum texture height */ +} SDL_RendererInfo; + +/** + * Vertex structure + */ +typedef struct SDL_Vertex +{ + SDL_FPoint position; /**< Vertex position, in SDL_Renderer coordinates */ + SDL_Color color; /**< Vertex color */ + SDL_FPoint tex_coord; /**< Normalized texture coordinates, if needed */ +} SDL_Vertex; + +/** + * The scaling mode for a texture. + */ +typedef enum SDL_ScaleMode +{ + SDL_ScaleModeNearest, /**< nearest pixel sampling */ + SDL_ScaleModeLinear, /**< linear filtering */ + SDL_ScaleModeBest /**< anisotropic filtering */ +} SDL_ScaleMode; + +/** + * The access pattern allowed for a texture. + */ +typedef enum SDL_TextureAccess +{ + SDL_TEXTUREACCESS_STATIC, /**< Changes rarely, not lockable */ + SDL_TEXTUREACCESS_STREAMING, /**< Changes frequently, lockable */ + SDL_TEXTUREACCESS_TARGET /**< Texture can be used as a render target */ +} SDL_TextureAccess; + +/** + * The texture channel modulation used in SDL_RenderCopy(). + */ +typedef enum SDL_TextureModulate +{ + SDL_TEXTUREMODULATE_NONE = 0x00000000, /**< No modulation */ + SDL_TEXTUREMODULATE_COLOR = 0x00000001, /**< srcC = srcC * color */ + SDL_TEXTUREMODULATE_ALPHA = 0x00000002 /**< srcA = srcA * alpha */ +} SDL_TextureModulate; + +/** + * Flip constants for SDL_RenderCopyEx + */ +typedef enum SDL_RendererFlip +{ + SDL_FLIP_NONE = 0x00000000, /**< Do not flip */ + SDL_FLIP_HORIZONTAL = 0x00000001, /**< flip horizontally */ + SDL_FLIP_VERTICAL = 0x00000002 /**< flip vertically */ +} SDL_RendererFlip; + +/** + * A structure representing rendering state + */ +struct SDL_Renderer; +typedef struct SDL_Renderer SDL_Renderer; + +/** + * An efficient driver-specific representation of pixel data + */ +struct SDL_Texture; +typedef struct SDL_Texture SDL_Texture; + +/* Function prototypes */ + +/** + * Get the number of 2D rendering drivers available for the current display. + * + * A render driver is a set of code that handles rendering and texture + * management on a particular display. Normally there is only one, but some + * drivers may have several available with different capabilities. + * + * There may be none if SDL was compiled without render support. + * + * \returns a number >= 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CreateRenderer + * \sa SDL_GetRenderDriverInfo + */ +extern DECLSPEC int SDLCALL SDL_GetNumRenderDrivers(void); + +/** + * Get info about a specific 2D rendering driver for the current display. + * + * \param index the index of the driver to query information about. + * \param info an SDL_RendererInfo structure to be filled with information on + * the rendering driver. + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CreateRenderer + * \sa SDL_GetNumRenderDrivers + */ +extern DECLSPEC int SDLCALL SDL_GetRenderDriverInfo(int index, + SDL_RendererInfo * info); + +/** + * Create a window and default renderer. + * + * \param width the width of the window. + * \param height the height of the window. + * \param window_flags the flags used to create the window (see + * SDL_CreateWindow()). + * \param window a pointer filled with the window, or NULL on error. + * \param renderer a pointer filled with the renderer, or NULL on error. + * \returns 0 on success, or -1 on error; call SDL_GetError() for more + * information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CreateRenderer + * \sa SDL_CreateWindow + */ +extern DECLSPEC int SDLCALL SDL_CreateWindowAndRenderer( + int width, int height, Uint32 window_flags, + SDL_Window **window, SDL_Renderer **renderer); + + +/** + * Create a 2D rendering context for a window. + * + * \param window the window where rendering is displayed. + * \param index the index of the rendering driver to initialize, or -1 to + * initialize the first one supporting the requested flags. + * \param flags 0, or one or more SDL_RendererFlags OR'd together. + * \returns a valid rendering context or NULL if there was an error; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CreateSoftwareRenderer + * \sa SDL_DestroyRenderer + * \sa SDL_GetNumRenderDrivers + * \sa SDL_GetRendererInfo + */ +extern DECLSPEC SDL_Renderer * SDLCALL SDL_CreateRenderer(SDL_Window * window, + int index, Uint32 flags); + +/** + * Create a 2D software rendering context for a surface. + * + * Two other API which can be used to create SDL_Renderer: + * SDL_CreateRenderer() and SDL_CreateWindowAndRenderer(). These can _also_ + * create a software renderer, but they are intended to be used with an + * SDL_Window as the final destination and not an SDL_Surface. + * + * \param surface the SDL_Surface structure representing the surface where + * rendering is done. + * \returns a valid rendering context or NULL if there was an error; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CreateRenderer + * \sa SDL_CreateWindowAndRenderer + * \sa SDL_DestroyRenderer + */ +extern DECLSPEC SDL_Renderer * SDLCALL SDL_CreateSoftwareRenderer(SDL_Surface * surface); + +/** + * Get the renderer associated with a window. + * + * \param window the window to query. + * \returns the rendering context on success or NULL on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CreateRenderer + */ +extern DECLSPEC SDL_Renderer * SDLCALL SDL_GetRenderer(SDL_Window * window); + +/** + * Get the window associated with a renderer. + * + * \param renderer the renderer to query. + * \returns the window on success or NULL on failure; call SDL_GetError() for + * more information. + * + * \since This function is available since SDL 2.0.22. + */ +extern DECLSPEC SDL_Window * SDLCALL SDL_RenderGetWindow(SDL_Renderer *renderer); + +/** + * Get information about a rendering context. + * + * \param renderer the rendering context. + * \param info an SDL_RendererInfo structure filled with information about the + * current renderer. + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CreateRenderer + */ +extern DECLSPEC int SDLCALL SDL_GetRendererInfo(SDL_Renderer * renderer, + SDL_RendererInfo * info); + +/** + * Get the output size in pixels of a rendering context. + * + * Due to high-dpi displays, you might end up with a rendering context that + * has more pixels than the window that contains it, so use this instead of + * SDL_GetWindowSize() to decide how much drawing area you have. + * + * \param renderer the rendering context. + * \param w an int filled with the width. + * \param h an int filled with the height. + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetRenderer + */ +extern DECLSPEC int SDLCALL SDL_GetRendererOutputSize(SDL_Renderer * renderer, + int *w, int *h); + +/** + * Create a texture for a rendering context. + * + * You can set the texture scaling method by setting + * `SDL_HINT_RENDER_SCALE_QUALITY` before creating the texture. + * + * \param renderer the rendering context. + * \param format one of the enumerated values in SDL_PixelFormatEnum. + * \param access one of the enumerated values in SDL_TextureAccess. + * \param w the width of the texture in pixels. + * \param h the height of the texture in pixels. + * \returns a pointer to the created texture or NULL if no rendering context + * was active, the format was unsupported, or the width or height + * were out of range; call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CreateTextureFromSurface + * \sa SDL_DestroyTexture + * \sa SDL_QueryTexture + * \sa SDL_UpdateTexture + */ +extern DECLSPEC SDL_Texture * SDLCALL SDL_CreateTexture(SDL_Renderer * renderer, + Uint32 format, + int access, int w, + int h); + +/** + * Create a texture from an existing surface. + * + * The surface is not modified or freed by this function. + * + * The SDL_TextureAccess hint for the created texture is + * `SDL_TEXTUREACCESS_STATIC`. + * + * The pixel format of the created texture may be different from the pixel + * format of the surface. Use SDL_QueryTexture() to query the pixel format of + * the texture. + * + * \param renderer the rendering context. + * \param surface the SDL_Surface structure containing pixel data used to fill + * the texture. + * \returns the created texture or NULL on failure; call SDL_GetError() for + * more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CreateTexture + * \sa SDL_DestroyTexture + * \sa SDL_QueryTexture + */ +extern DECLSPEC SDL_Texture * SDLCALL SDL_CreateTextureFromSurface(SDL_Renderer * renderer, SDL_Surface * surface); + +/** + * Query the attributes of a texture. + * + * \param texture the texture to query. + * \param format a pointer filled in with the raw format of the texture; the + * actual format may differ, but pixel transfers will use this + * format (one of the SDL_PixelFormatEnum values). This argument + * can be NULL if you don't need this information. + * \param access a pointer filled in with the actual access to the texture + * (one of the SDL_TextureAccess values). This argument can be + * NULL if you don't need this information. + * \param w a pointer filled in with the width of the texture in pixels. This + * argument can be NULL if you don't need this information. + * \param h a pointer filled in with the height of the texture in pixels. This + * argument can be NULL if you don't need this information. + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CreateTexture + */ +extern DECLSPEC int SDLCALL SDL_QueryTexture(SDL_Texture * texture, + Uint32 * format, int *access, + int *w, int *h); + +/** + * Set an additional color value multiplied into render copy operations. + * + * When this texture is rendered, during the copy operation each source color + * channel is modulated by the appropriate color value according to the + * following formula: + * + * `srcC = srcC * (color / 255)` + * + * Color modulation is not always supported by the renderer; it will return -1 + * if color modulation is not supported. + * + * \param texture the texture to update. + * \param r the red color value multiplied into copy operations. + * \param g the green color value multiplied into copy operations. + * \param b the blue color value multiplied into copy operations. + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetTextureColorMod + * \sa SDL_SetTextureAlphaMod + */ +extern DECLSPEC int SDLCALL SDL_SetTextureColorMod(SDL_Texture * texture, + Uint8 r, Uint8 g, Uint8 b); + + +/** + * Get the additional color value multiplied into render copy operations. + * + * \param texture the texture to query. + * \param r a pointer filled in with the current red color value. + * \param g a pointer filled in with the current green color value. + * \param b a pointer filled in with the current blue color value. + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetTextureAlphaMod + * \sa SDL_SetTextureColorMod + */ +extern DECLSPEC int SDLCALL SDL_GetTextureColorMod(SDL_Texture * texture, + Uint8 * r, Uint8 * g, + Uint8 * b); + +/** + * Set an additional alpha value multiplied into render copy operations. + * + * When this texture is rendered, during the copy operation the source alpha + * value is modulated by this alpha value according to the following formula: + * + * `srcA = srcA * (alpha / 255)` + * + * Alpha modulation is not always supported by the renderer; it will return -1 + * if alpha modulation is not supported. + * + * \param texture the texture to update. + * \param alpha the source alpha value multiplied into copy operations. + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetTextureAlphaMod + * \sa SDL_SetTextureColorMod + */ +extern DECLSPEC int SDLCALL SDL_SetTextureAlphaMod(SDL_Texture * texture, + Uint8 alpha); + +/** + * Get the additional alpha value multiplied into render copy operations. + * + * \param texture the texture to query. + * \param alpha a pointer filled in with the current alpha value. + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetTextureColorMod + * \sa SDL_SetTextureAlphaMod + */ +extern DECLSPEC int SDLCALL SDL_GetTextureAlphaMod(SDL_Texture * texture, + Uint8 * alpha); + +/** + * Set the blend mode for a texture, used by SDL_RenderCopy(). + * + * If the blend mode is not supported, the closest supported mode is chosen + * and this function returns -1. + * + * \param texture the texture to update. + * \param blendMode the SDL_BlendMode to use for texture blending. + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetTextureBlendMode + * \sa SDL_RenderCopy + */ +extern DECLSPEC int SDLCALL SDL_SetTextureBlendMode(SDL_Texture * texture, + SDL_BlendMode blendMode); + +/** + * Get the blend mode used for texture copy operations. + * + * \param texture the texture to query. + * \param blendMode a pointer filled in with the current SDL_BlendMode. + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_SetTextureBlendMode + */ +extern DECLSPEC int SDLCALL SDL_GetTextureBlendMode(SDL_Texture * texture, + SDL_BlendMode *blendMode); + +/** + * Set the scale mode used for texture scale operations. + * + * If the scale mode is not supported, the closest supported mode is chosen. + * + * \param texture The texture to update. + * \param scaleMode the SDL_ScaleMode to use for texture scaling. + * \returns 0 on success, or -1 if the texture is not valid. + * + * \since This function is available since SDL 2.0.12. + * + * \sa SDL_GetTextureScaleMode + */ +extern DECLSPEC int SDLCALL SDL_SetTextureScaleMode(SDL_Texture * texture, + SDL_ScaleMode scaleMode); + +/** + * Get the scale mode used for texture scale operations. + * + * \param texture the texture to query. + * \param scaleMode a pointer filled in with the current scale mode. + * \return 0 on success, or -1 if the texture is not valid. + * + * \since This function is available since SDL 2.0.12. + * + * \sa SDL_SetTextureScaleMode + */ +extern DECLSPEC int SDLCALL SDL_GetTextureScaleMode(SDL_Texture * texture, + SDL_ScaleMode *scaleMode); + +/** + * Associate a user-specified pointer with a texture. + * + * \param texture the texture to update. + * \param userdata the pointer to associate with the texture. + * \returns 0 on success, or -1 if the texture is not valid. + * + * \since This function is available since SDL 2.0.18. + * + * \sa SDL_GetTextureUserData + */ +extern DECLSPEC int SDLCALL SDL_SetTextureUserData(SDL_Texture * texture, + void *userdata); + +/** + * Get the user-specified pointer associated with a texture + * + * \param texture the texture to query. + * \return the pointer associated with the texture, or NULL if the texture is + * not valid. + * + * \since This function is available since SDL 2.0.18. + * + * \sa SDL_SetTextureUserData + */ +extern DECLSPEC void * SDLCALL SDL_GetTextureUserData(SDL_Texture * texture); + +/** + * Update the given texture rectangle with new pixel data. + * + * The pixel data must be in the pixel format of the texture. Use + * SDL_QueryTexture() to query the pixel format of the texture. + * + * This is a fairly slow function, intended for use with static textures that + * do not change often. + * + * If the texture is intended to be updated often, it is preferred to create + * the texture as streaming and use the locking functions referenced below. + * While this function will work with streaming textures, for optimization + * reasons you may not get the pixels back if you lock the texture afterward. + * + * \param texture the texture to update. + * \param rect an SDL_Rect structure representing the area to update, or NULL + * to update the entire texture. + * \param pixels the raw pixel data in the format of the texture. + * \param pitch the number of bytes in a row of pixel data, including padding + * between lines. + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CreateTexture + * \sa SDL_LockTexture + * \sa SDL_UnlockTexture + */ +extern DECLSPEC int SDLCALL SDL_UpdateTexture(SDL_Texture * texture, + const SDL_Rect * rect, + const void *pixels, int pitch); + +/** + * Update a rectangle within a planar YV12 or IYUV texture with new pixel + * data. + * + * You can use SDL_UpdateTexture() as long as your pixel data is a contiguous + * block of Y and U/V planes in the proper order, but this function is + * available if your pixel data is not contiguous. + * + * \param texture the texture to update. + * \param rect a pointer to the rectangle of pixels to update, or NULL to + * update the entire texture. + * \param Yplane the raw pixel data for the Y plane. + * \param Ypitch the number of bytes between rows of pixel data for the Y + * plane. + * \param Uplane the raw pixel data for the U plane. + * \param Upitch the number of bytes between rows of pixel data for the U + * plane. + * \param Vplane the raw pixel data for the V plane. + * \param Vpitch the number of bytes between rows of pixel data for the V + * plane. + * \returns 0 on success or -1 if the texture is not valid; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.1. + * + * \sa SDL_UpdateTexture + */ +extern DECLSPEC int SDLCALL SDL_UpdateYUVTexture(SDL_Texture * texture, + const SDL_Rect * rect, + const Uint8 *Yplane, int Ypitch, + const Uint8 *Uplane, int Upitch, + const Uint8 *Vplane, int Vpitch); + +/** + * Update a rectangle within a planar NV12 or NV21 texture with new pixels. + * + * You can use SDL_UpdateTexture() as long as your pixel data is a contiguous + * block of NV12/21 planes in the proper order, but this function is available + * if your pixel data is not contiguous. + * + * \param texture the texture to update. + * \param rect a pointer to the rectangle of pixels to update, or NULL to + * update the entire texture. + * \param Yplane the raw pixel data for the Y plane. + * \param Ypitch the number of bytes between rows of pixel data for the Y + * plane. + * \param UVplane the raw pixel data for the UV plane. + * \param UVpitch the number of bytes between rows of pixel data for the UV + * plane. + * \return 0 on success, or -1 if the texture is not valid. + * + * \since This function is available since SDL 2.0.16. + */ +extern DECLSPEC int SDLCALL SDL_UpdateNVTexture(SDL_Texture * texture, + const SDL_Rect * rect, + const Uint8 *Yplane, int Ypitch, + const Uint8 *UVplane, int UVpitch); + +/** + * Lock a portion of the texture for **write-only** pixel access. + * + * As an optimization, the pixels made available for editing don't necessarily + * contain the old texture data. This is a write-only operation, and if you + * need to keep a copy of the texture data you should do that at the + * application level. + * + * You must use SDL_UnlockTexture() to unlock the pixels and apply any + * changes. + * + * \param texture the texture to lock for access, which was created with + * `SDL_TEXTUREACCESS_STREAMING`. + * \param rect an SDL_Rect structure representing the area to lock for access; + * NULL to lock the entire texture. + * \param pixels this is filled in with a pointer to the locked pixels, + * appropriately offset by the locked area. + * \param pitch this is filled in with the pitch of the locked pixels; the + * pitch is the length of one row in bytes. + * \returns 0 on success or a negative error code if the texture is not valid + * or was not created with `SDL_TEXTUREACCESS_STREAMING`; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_UnlockTexture + */ +extern DECLSPEC int SDLCALL SDL_LockTexture(SDL_Texture * texture, + const SDL_Rect * rect, + void **pixels, int *pitch); + +/** + * Lock a portion of the texture for **write-only** pixel access, and expose + * it as a SDL surface. + * + * Besides providing an SDL_Surface instead of raw pixel data, this function + * operates like SDL_LockTexture. + * + * As an optimization, the pixels made available for editing don't necessarily + * contain the old texture data. This is a write-only operation, and if you + * need to keep a copy of the texture data you should do that at the + * application level. + * + * You must use SDL_UnlockTexture() to unlock the pixels and apply any + * changes. + * + * The returned surface is freed internally after calling SDL_UnlockTexture() + * or SDL_DestroyTexture(). The caller should not free it. + * + * \param texture the texture to lock for access, which was created with + * `SDL_TEXTUREACCESS_STREAMING`. + * \param rect a pointer to the rectangle to lock for access. If the rect is + * NULL, the entire texture will be locked. + * \param surface this is filled in with an SDL surface representing the + * locked area. + * \returns 0 on success, or -1 if the texture is not valid or was not created + * with `SDL_TEXTUREACCESS_STREAMING`. + * + * \since This function is available since SDL 2.0.12. + * + * \sa SDL_LockTexture + * \sa SDL_UnlockTexture + */ +extern DECLSPEC int SDLCALL SDL_LockTextureToSurface(SDL_Texture *texture, + const SDL_Rect *rect, + SDL_Surface **surface); + +/** + * Unlock a texture, uploading the changes to video memory, if needed. + * + * **Warning**: Please note that SDL_LockTexture() is intended to be + * write-only; it will not guarantee the previous contents of the texture will + * be provided. You must fully initialize any area of a texture that you lock + * before unlocking it, as the pixels might otherwise be uninitialized memory. + * + * Which is to say: locking and immediately unlocking a texture can result in + * corrupted textures, depending on the renderer in use. + * + * \param texture a texture locked by SDL_LockTexture(). + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_LockTexture + */ +extern DECLSPEC void SDLCALL SDL_UnlockTexture(SDL_Texture * texture); + +/** + * Determine whether a renderer supports the use of render targets. + * + * \param renderer the renderer that will be checked. + * \returns SDL_TRUE if supported or SDL_FALSE if not. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_SetRenderTarget + */ +extern DECLSPEC SDL_bool SDLCALL SDL_RenderTargetSupported(SDL_Renderer *renderer); + +/** + * Set a texture as the current rendering target. + * + * Before using this function, you should check the + * `SDL_RENDERER_TARGETTEXTURE` bit in the flags of SDL_RendererInfo to see if + * render targets are supported. + * + * The default render target is the window for which the renderer was created. + * To stop rendering to a texture and render to the window again, call this + * function with a NULL `texture`. This will reset the renderer's viewport, + * clipping rectangle, and scaling settings to the state they were in before + * setting a non-NULL `texture` target, losing any changes made in the + * meantime. + * + * \param renderer the rendering context. + * \param texture the targeted texture, which must be created with the + * `SDL_TEXTUREACCESS_TARGET` flag, or NULL to render to the + * window instead of a texture. + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetRenderTarget + */ +extern DECLSPEC int SDLCALL SDL_SetRenderTarget(SDL_Renderer *renderer, + SDL_Texture *texture); + +/** + * Get the current render target. + * + * The default render target is the window for which the renderer was created, + * and is reported as NULL here. + * + * \param renderer the rendering context. + * \returns the current render target or NULL for the default render target. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_SetRenderTarget + */ +extern DECLSPEC SDL_Texture * SDLCALL SDL_GetRenderTarget(SDL_Renderer *renderer); + +/** + * Set a device independent resolution for rendering. + * + * This function uses the viewport and scaling functionality to allow a fixed + * logical resolution for rendering, regardless of the actual output + * resolution. If the actual output resolution doesn't have the same aspect + * ratio the output rendering will be centered within the output display. + * + * If the output display is a window, mouse and touch events in the window + * will be filtered and scaled so they seem to arrive within the logical + * resolution. The SDL_HINT_MOUSE_RELATIVE_SCALING hint controls whether + * relative motion events are also scaled. + * + * If this function results in scaling or subpixel drawing by the rendering + * backend, it will be handled using the appropriate quality hints. + * + * \param renderer the renderer for which resolution should be set. + * \param w the width of the logical resolution. + * \param h the height of the logical resolution. + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_RenderGetLogicalSize + */ +extern DECLSPEC int SDLCALL SDL_RenderSetLogicalSize(SDL_Renderer * renderer, int w, int h); + +/** + * Get device independent resolution for rendering. + * + * When using the main rendering target (eg no target texture is set): this + * may return 0 for `w` and `h` if the SDL_Renderer has never had its logical + * size set by SDL_RenderSetLogicalSize(). Otherwise it returns the logical + * width and height. + * + * When using a target texture: Never return 0 for `w` and `h` at first. Then + * it returns the logical width and height that are set. + * + * \param renderer a rendering context. + * \param w an int to be filled with the width. + * \param h an int to be filled with the height. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_RenderSetLogicalSize + */ +extern DECLSPEC void SDLCALL SDL_RenderGetLogicalSize(SDL_Renderer * renderer, int *w, int *h); + +/** + * Set whether to force integer scales for resolution-independent rendering. + * + * This function restricts the logical viewport to integer values - that is, + * when a resolution is between two multiples of a logical size, the viewport + * size is rounded down to the lower multiple. + * + * \param renderer the renderer for which integer scaling should be set. + * \param enable enable or disable the integer scaling for rendering. + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.5. + * + * \sa SDL_RenderGetIntegerScale + * \sa SDL_RenderSetLogicalSize + */ +extern DECLSPEC int SDLCALL SDL_RenderSetIntegerScale(SDL_Renderer * renderer, + SDL_bool enable); + +/** + * Get whether integer scales are forced for resolution-independent rendering. + * + * \param renderer the renderer from which integer scaling should be queried. + * \returns SDL_TRUE if integer scales are forced or SDL_FALSE if not and on + * failure; call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.5. + * + * \sa SDL_RenderSetIntegerScale + */ +extern DECLSPEC SDL_bool SDLCALL SDL_RenderGetIntegerScale(SDL_Renderer * renderer); + +/** + * Set the drawing area for rendering on the current target. + * + * When the window is resized, the viewport is reset to fill the entire new + * window size. + * + * \param renderer the rendering context. + * \param rect the SDL_Rect structure representing the drawing area, or NULL + * to set the viewport to the entire target. + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_RenderGetViewport + */ +extern DECLSPEC int SDLCALL SDL_RenderSetViewport(SDL_Renderer * renderer, + const SDL_Rect * rect); + +/** + * Get the drawing area for the current target. + * + * \param renderer the rendering context. + * \param rect an SDL_Rect structure filled in with the current drawing area. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_RenderSetViewport + */ +extern DECLSPEC void SDLCALL SDL_RenderGetViewport(SDL_Renderer * renderer, + SDL_Rect * rect); + +/** + * Set the clip rectangle for rendering on the specified target. + * + * \param renderer the rendering context for which clip rectangle should be + * set. + * \param rect an SDL_Rect structure representing the clip area, relative to + * the viewport, or NULL to disable clipping. + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_RenderGetClipRect + * \sa SDL_RenderIsClipEnabled + */ +extern DECLSPEC int SDLCALL SDL_RenderSetClipRect(SDL_Renderer * renderer, + const SDL_Rect * rect); + +/** + * Get the clip rectangle for the current target. + * + * \param renderer the rendering context from which clip rectangle should be + * queried. + * \param rect an SDL_Rect structure filled in with the current clipping area + * or an empty rectangle if clipping is disabled. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_RenderIsClipEnabled + * \sa SDL_RenderSetClipRect + */ +extern DECLSPEC void SDLCALL SDL_RenderGetClipRect(SDL_Renderer * renderer, + SDL_Rect * rect); + +/** + * Get whether clipping is enabled on the given renderer. + * + * \param renderer the renderer from which clip state should be queried. + * \returns SDL_TRUE if clipping is enabled or SDL_FALSE if not; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.4. + * + * \sa SDL_RenderGetClipRect + * \sa SDL_RenderSetClipRect + */ +extern DECLSPEC SDL_bool SDLCALL SDL_RenderIsClipEnabled(SDL_Renderer * renderer); + + +/** + * Set the drawing scale for rendering on the current target. + * + * The drawing coordinates are scaled by the x/y scaling factors before they + * are used by the renderer. This allows resolution independent drawing with a + * single coordinate system. + * + * If this results in scaling or subpixel drawing by the rendering backend, it + * will be handled using the appropriate quality hints. For best results use + * integer scaling factors. + * + * \param renderer a rendering context. + * \param scaleX the horizontal scaling factor. + * \param scaleY the vertical scaling factor. + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_RenderGetScale + * \sa SDL_RenderSetLogicalSize + */ +extern DECLSPEC int SDLCALL SDL_RenderSetScale(SDL_Renderer * renderer, + float scaleX, float scaleY); + +/** + * Get the drawing scale for the current target. + * + * \param renderer the renderer from which drawing scale should be queried. + * \param scaleX a pointer filled in with the horizontal scaling factor. + * \param scaleY a pointer filled in with the vertical scaling factor. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_RenderSetScale + */ +extern DECLSPEC void SDLCALL SDL_RenderGetScale(SDL_Renderer * renderer, + float *scaleX, float *scaleY); + +/** + * Get logical coordinates of point in renderer when given real coordinates of + * point in window. + * + * Logical coordinates will differ from real coordinates when render is scaled + * and logical renderer size set + * + * \param renderer the renderer from which the logical coordinates should be + * calculated. + * \param windowX the real X coordinate in the window. + * \param windowY the real Y coordinate in the window. + * \param logicalX the pointer filled with the logical x coordinate. + * \param logicalY the pointer filled with the logical y coordinate. + * + * \since This function is available since SDL 2.0.18. + * + * \sa SDL_RenderGetScale + * \sa SDL_RenderSetScale + * \sa SDL_RenderGetLogicalSize + * \sa SDL_RenderSetLogicalSize + */ +extern DECLSPEC void SDLCALL SDL_RenderWindowToLogical(SDL_Renderer * renderer, + int windowX, int windowY, + float *logicalX, float *logicalY); + + +/** + * Get real coordinates of point in window when given logical coordinates of + * point in renderer. + * + * Logical coordinates will differ from real coordinates when render is scaled + * and logical renderer size set + * + * \param renderer the renderer from which the window coordinates should be + * calculated. + * \param logicalX the logical x coordinate. + * \param logicalY the logical y coordinate. + * \param windowX the pointer filled with the real X coordinate in the window. + * \param windowY the pointer filled with the real Y coordinate in the window. + * + * \since This function is available since SDL 2.0.18. + * + * \sa SDL_RenderGetScale + * \sa SDL_RenderSetScale + * \sa SDL_RenderGetLogicalSize + * \sa SDL_RenderSetLogicalSize + */ +extern DECLSPEC void SDLCALL SDL_RenderLogicalToWindow(SDL_Renderer * renderer, + float logicalX, float logicalY, + int *windowX, int *windowY); + +/** + * Set the color used for drawing operations (Rect, Line and Clear). + * + * Set the color for drawing or filling rectangles, lines, and points, and for + * SDL_RenderClear(). + * + * \param renderer the rendering context. + * \param r the red value used to draw on the rendering target. + * \param g the green value used to draw on the rendering target. + * \param b the blue value used to draw on the rendering target. + * \param a the alpha value used to draw on the rendering target; usually + * `SDL_ALPHA_OPAQUE` (255). Use SDL_SetRenderDrawBlendMode to + * specify how the alpha channel is used. + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetRenderDrawColor + * \sa SDL_RenderClear + * \sa SDL_RenderDrawLine + * \sa SDL_RenderDrawLines + * \sa SDL_RenderDrawPoint + * \sa SDL_RenderDrawPoints + * \sa SDL_RenderDrawRect + * \sa SDL_RenderDrawRects + * \sa SDL_RenderFillRect + * \sa SDL_RenderFillRects + */ +extern DECLSPEC int SDLCALL SDL_SetRenderDrawColor(SDL_Renderer * renderer, + Uint8 r, Uint8 g, Uint8 b, + Uint8 a); + +/** + * Get the color used for drawing operations (Rect, Line and Clear). + * + * \param renderer the rendering context. + * \param r a pointer filled in with the red value used to draw on the + * rendering target. + * \param g a pointer filled in with the green value used to draw on the + * rendering target. + * \param b a pointer filled in with the blue value used to draw on the + * rendering target. + * \param a a pointer filled in with the alpha value used to draw on the + * rendering target; usually `SDL_ALPHA_OPAQUE` (255). + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_SetRenderDrawColor + */ +extern DECLSPEC int SDLCALL SDL_GetRenderDrawColor(SDL_Renderer * renderer, + Uint8 * r, Uint8 * g, Uint8 * b, + Uint8 * a); + +/** + * Set the blend mode used for drawing operations (Fill and Line). + * + * If the blend mode is not supported, the closest supported mode is chosen. + * + * \param renderer the rendering context. + * \param blendMode the SDL_BlendMode to use for blending. + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetRenderDrawBlendMode + * \sa SDL_RenderDrawLine + * \sa SDL_RenderDrawLines + * \sa SDL_RenderDrawPoint + * \sa SDL_RenderDrawPoints + * \sa SDL_RenderDrawRect + * \sa SDL_RenderDrawRects + * \sa SDL_RenderFillRect + * \sa SDL_RenderFillRects + */ +extern DECLSPEC int SDLCALL SDL_SetRenderDrawBlendMode(SDL_Renderer * renderer, + SDL_BlendMode blendMode); + +/** + * Get the blend mode used for drawing operations. + * + * \param renderer the rendering context. + * \param blendMode a pointer filled in with the current SDL_BlendMode. + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_SetRenderDrawBlendMode + */ +extern DECLSPEC int SDLCALL SDL_GetRenderDrawBlendMode(SDL_Renderer * renderer, + SDL_BlendMode *blendMode); + +/** + * Clear the current rendering target with the drawing color. + * + * This function clears the entire rendering target, ignoring the viewport and + * the clip rectangle. + * + * \param renderer the rendering context. + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_SetRenderDrawColor + */ +extern DECLSPEC int SDLCALL SDL_RenderClear(SDL_Renderer * renderer); + +/** + * Draw a point on the current rendering target. + * + * SDL_RenderDrawPoint() draws a single point. If you want to draw multiple, + * use SDL_RenderDrawPoints() instead. + * + * \param renderer the rendering context. + * \param x the x coordinate of the point. + * \param y the y coordinate of the point. + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_RenderDrawLine + * \sa SDL_RenderDrawLines + * \sa SDL_RenderDrawPoints + * \sa SDL_RenderDrawRect + * \sa SDL_RenderDrawRects + * \sa SDL_RenderFillRect + * \sa SDL_RenderFillRects + * \sa SDL_RenderPresent + * \sa SDL_SetRenderDrawBlendMode + * \sa SDL_SetRenderDrawColor + */ +extern DECLSPEC int SDLCALL SDL_RenderDrawPoint(SDL_Renderer * renderer, + int x, int y); + +/** + * Draw multiple points on the current rendering target. + * + * \param renderer the rendering context. + * \param points an array of SDL_Point structures that represent the points to + * draw. + * \param count the number of points to draw. + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_RenderDrawLine + * \sa SDL_RenderDrawLines + * \sa SDL_RenderDrawPoint + * \sa SDL_RenderDrawRect + * \sa SDL_RenderDrawRects + * \sa SDL_RenderFillRect + * \sa SDL_RenderFillRects + * \sa SDL_RenderPresent + * \sa SDL_SetRenderDrawBlendMode + * \sa SDL_SetRenderDrawColor + */ +extern DECLSPEC int SDLCALL SDL_RenderDrawPoints(SDL_Renderer * renderer, + const SDL_Point * points, + int count); + +/** + * Draw a line on the current rendering target. + * + * SDL_RenderDrawLine() draws the line to include both end points. If you want + * to draw multiple, connecting lines use SDL_RenderDrawLines() instead. + * + * \param renderer the rendering context. + * \param x1 the x coordinate of the start point. + * \param y1 the y coordinate of the start point. + * \param x2 the x coordinate of the end point. + * \param y2 the y coordinate of the end point. + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_RenderDrawLines + * \sa SDL_RenderDrawPoint + * \sa SDL_RenderDrawPoints + * \sa SDL_RenderDrawRect + * \sa SDL_RenderDrawRects + * \sa SDL_RenderFillRect + * \sa SDL_RenderFillRects + * \sa SDL_RenderPresent + * \sa SDL_SetRenderDrawBlendMode + * \sa SDL_SetRenderDrawColor + */ +extern DECLSPEC int SDLCALL SDL_RenderDrawLine(SDL_Renderer * renderer, + int x1, int y1, int x2, int y2); + +/** + * Draw a series of connected lines on the current rendering target. + * + * \param renderer the rendering context. + * \param points an array of SDL_Point structures representing points along + * the lines. + * \param count the number of points, drawing count-1 lines. + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_RenderDrawLine + * \sa SDL_RenderDrawPoint + * \sa SDL_RenderDrawPoints + * \sa SDL_RenderDrawRect + * \sa SDL_RenderDrawRects + * \sa SDL_RenderFillRect + * \sa SDL_RenderFillRects + * \sa SDL_RenderPresent + * \sa SDL_SetRenderDrawBlendMode + * \sa SDL_SetRenderDrawColor + */ +extern DECLSPEC int SDLCALL SDL_RenderDrawLines(SDL_Renderer * renderer, + const SDL_Point * points, + int count); + +/** + * Draw a rectangle on the current rendering target. + * + * \param renderer the rendering context. + * \param rect an SDL_Rect structure representing the rectangle to draw, or + * NULL to outline the entire rendering target. + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_RenderDrawLine + * \sa SDL_RenderDrawLines + * \sa SDL_RenderDrawPoint + * \sa SDL_RenderDrawPoints + * \sa SDL_RenderDrawRects + * \sa SDL_RenderFillRect + * \sa SDL_RenderFillRects + * \sa SDL_RenderPresent + * \sa SDL_SetRenderDrawBlendMode + * \sa SDL_SetRenderDrawColor + */ +extern DECLSPEC int SDLCALL SDL_RenderDrawRect(SDL_Renderer * renderer, + const SDL_Rect * rect); + +/** + * Draw some number of rectangles on the current rendering target. + * + * \param renderer the rendering context. + * \param rects an array of SDL_Rect structures representing the rectangles to + * be drawn. + * \param count the number of rectangles. + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_RenderDrawLine + * \sa SDL_RenderDrawLines + * \sa SDL_RenderDrawPoint + * \sa SDL_RenderDrawPoints + * \sa SDL_RenderDrawRect + * \sa SDL_RenderFillRect + * \sa SDL_RenderFillRects + * \sa SDL_RenderPresent + * \sa SDL_SetRenderDrawBlendMode + * \sa SDL_SetRenderDrawColor + */ +extern DECLSPEC int SDLCALL SDL_RenderDrawRects(SDL_Renderer * renderer, + const SDL_Rect * rects, + int count); + +/** + * Fill a rectangle on the current rendering target with the drawing color. + * + * The current drawing color is set by SDL_SetRenderDrawColor(), and the + * color's alpha value is ignored unless blending is enabled with the + * appropriate call to SDL_SetRenderDrawBlendMode(). + * + * \param renderer the rendering context. + * \param rect the SDL_Rect structure representing the rectangle to fill, or + * NULL for the entire rendering target. + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_RenderDrawLine + * \sa SDL_RenderDrawLines + * \sa SDL_RenderDrawPoint + * \sa SDL_RenderDrawPoints + * \sa SDL_RenderDrawRect + * \sa SDL_RenderDrawRects + * \sa SDL_RenderFillRects + * \sa SDL_RenderPresent + * \sa SDL_SetRenderDrawBlendMode + * \sa SDL_SetRenderDrawColor + */ +extern DECLSPEC int SDLCALL SDL_RenderFillRect(SDL_Renderer * renderer, + const SDL_Rect * rect); + +/** + * Fill some number of rectangles on the current rendering target with the + * drawing color. + * + * \param renderer the rendering context. + * \param rects an array of SDL_Rect structures representing the rectangles to + * be filled. + * \param count the number of rectangles. + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_RenderDrawLine + * \sa SDL_RenderDrawLines + * \sa SDL_RenderDrawPoint + * \sa SDL_RenderDrawPoints + * \sa SDL_RenderDrawRect + * \sa SDL_RenderDrawRects + * \sa SDL_RenderFillRect + * \sa SDL_RenderPresent + */ +extern DECLSPEC int SDLCALL SDL_RenderFillRects(SDL_Renderer * renderer, + const SDL_Rect * rects, + int count); + +/** + * Copy a portion of the texture to the current rendering target. + * + * The texture is blended with the destination based on its blend mode set + * with SDL_SetTextureBlendMode(). + * + * The texture color is affected based on its color modulation set by + * SDL_SetTextureColorMod(). + * + * The texture alpha is affected based on its alpha modulation set by + * SDL_SetTextureAlphaMod(). + * + * \param renderer the rendering context. + * \param texture the source texture. + * \param srcrect the source SDL_Rect structure or NULL for the entire + * texture. + * \param dstrect the destination SDL_Rect structure or NULL for the entire + * rendering target; the texture will be stretched to fill the + * given rectangle. + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_RenderCopyEx + * \sa SDL_SetTextureAlphaMod + * \sa SDL_SetTextureBlendMode + * \sa SDL_SetTextureColorMod + */ +extern DECLSPEC int SDLCALL SDL_RenderCopy(SDL_Renderer * renderer, + SDL_Texture * texture, + const SDL_Rect * srcrect, + const SDL_Rect * dstrect); + +/** + * Copy a portion of the texture to the current rendering, with optional + * rotation and flipping. + * + * Copy a portion of the texture to the current rendering target, optionally + * rotating it by angle around the given center and also flipping it + * top-bottom and/or left-right. + * + * The texture is blended with the destination based on its blend mode set + * with SDL_SetTextureBlendMode(). + * + * The texture color is affected based on its color modulation set by + * SDL_SetTextureColorMod(). + * + * The texture alpha is affected based on its alpha modulation set by + * SDL_SetTextureAlphaMod(). + * + * \param renderer the rendering context. + * \param texture the source texture. + * \param srcrect the source SDL_Rect structure or NULL for the entire + * texture. + * \param dstrect the destination SDL_Rect structure or NULL for the entire + * rendering target. + * \param angle an angle in degrees that indicates the rotation that will be + * applied to dstrect, rotating it in a clockwise direction. + * \param center a pointer to a point indicating the point around which + * dstrect will be rotated (if NULL, rotation will be done + * around `dstrect.w / 2`, `dstrect.h / 2`). + * \param flip a SDL_RendererFlip value stating which flipping actions should + * be performed on the texture. + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_RenderCopy + * \sa SDL_SetTextureAlphaMod + * \sa SDL_SetTextureBlendMode + * \sa SDL_SetTextureColorMod + */ +extern DECLSPEC int SDLCALL SDL_RenderCopyEx(SDL_Renderer * renderer, + SDL_Texture * texture, + const SDL_Rect * srcrect, + const SDL_Rect * dstrect, + const double angle, + const SDL_Point *center, + const SDL_RendererFlip flip); + + +/** + * Draw a point on the current rendering target at subpixel precision. + * + * \param renderer The renderer which should draw a point. + * \param x The x coordinate of the point. + * \param y The y coordinate of the point. + * \return 0 on success, or -1 on error. + * + * \since This function is available since SDL 2.0.10. + */ +extern DECLSPEC int SDLCALL SDL_RenderDrawPointF(SDL_Renderer * renderer, + float x, float y); + +/** + * Draw multiple points on the current rendering target at subpixel precision. + * + * \param renderer The renderer which should draw multiple points. + * \param points The points to draw. + * \param count The number of points to draw. + * \return 0 on success, or -1 on error. + * + * \since This function is available since SDL 2.0.10. + */ +extern DECLSPEC int SDLCALL SDL_RenderDrawPointsF(SDL_Renderer * renderer, + const SDL_FPoint * points, + int count); + +/** + * Draw a line on the current rendering target at subpixel precision. + * + * \param renderer The renderer which should draw a line. + * \param x1 The x coordinate of the start point. + * \param y1 The y coordinate of the start point. + * \param x2 The x coordinate of the end point. + * \param y2 The y coordinate of the end point. + * \return 0 on success, or -1 on error. + * + * \since This function is available since SDL 2.0.10. + */ +extern DECLSPEC int SDLCALL SDL_RenderDrawLineF(SDL_Renderer * renderer, + float x1, float y1, float x2, float y2); + +/** + * Draw a series of connected lines on the current rendering target at + * subpixel precision. + * + * \param renderer The renderer which should draw multiple lines. + * \param points The points along the lines. + * \param count The number of points, drawing count-1 lines. + * \return 0 on success, or -1 on error. + * + * \since This function is available since SDL 2.0.10. + */ +extern DECLSPEC int SDLCALL SDL_RenderDrawLinesF(SDL_Renderer * renderer, + const SDL_FPoint * points, + int count); + +/** + * Draw a rectangle on the current rendering target at subpixel precision. + * + * \param renderer The renderer which should draw a rectangle. + * \param rect A pointer to the destination rectangle, or NULL to outline the + * entire rendering target. + * \return 0 on success, or -1 on error. + * + * \since This function is available since SDL 2.0.10. + */ +extern DECLSPEC int SDLCALL SDL_RenderDrawRectF(SDL_Renderer * renderer, + const SDL_FRect * rect); + +/** + * Draw some number of rectangles on the current rendering target at subpixel + * precision. + * + * \param renderer The renderer which should draw multiple rectangles. + * \param rects A pointer to an array of destination rectangles. + * \param count The number of rectangles. + * \return 0 on success, or -1 on error. + * + * \since This function is available since SDL 2.0.10. + */ +extern DECLSPEC int SDLCALL SDL_RenderDrawRectsF(SDL_Renderer * renderer, + const SDL_FRect * rects, + int count); + +/** + * Fill a rectangle on the current rendering target with the drawing color at + * subpixel precision. + * + * \param renderer The renderer which should fill a rectangle. + * \param rect A pointer to the destination rectangle, or NULL for the entire + * rendering target. + * \return 0 on success, or -1 on error. + * + * \since This function is available since SDL 2.0.10. + */ +extern DECLSPEC int SDLCALL SDL_RenderFillRectF(SDL_Renderer * renderer, + const SDL_FRect * rect); + +/** + * Fill some number of rectangles on the current rendering target with the + * drawing color at subpixel precision. + * + * \param renderer The renderer which should fill multiple rectangles. + * \param rects A pointer to an array of destination rectangles. + * \param count The number of rectangles. + * \return 0 on success, or -1 on error. + * + * \since This function is available since SDL 2.0.10. + */ +extern DECLSPEC int SDLCALL SDL_RenderFillRectsF(SDL_Renderer * renderer, + const SDL_FRect * rects, + int count); + +/** + * Copy a portion of the texture to the current rendering target at subpixel + * precision. + * + * \param renderer The renderer which should copy parts of a texture. + * \param texture The source texture. + * \param srcrect A pointer to the source rectangle, or NULL for the entire + * texture. + * \param dstrect A pointer to the destination rectangle, or NULL for the + * entire rendering target. + * \return 0 on success, or -1 on error. + * + * \since This function is available since SDL 2.0.10. + */ +extern DECLSPEC int SDLCALL SDL_RenderCopyF(SDL_Renderer * renderer, + SDL_Texture * texture, + const SDL_Rect * srcrect, + const SDL_FRect * dstrect); + +/** + * Copy a portion of the source texture to the current rendering target, with + * rotation and flipping, at subpixel precision. + * + * \param renderer The renderer which should copy parts of a texture. + * \param texture The source texture. + * \param srcrect A pointer to the source rectangle, or NULL for the entire + * texture. + * \param dstrect A pointer to the destination rectangle, or NULL for the + * entire rendering target. + * \param angle An angle in degrees that indicates the rotation that will be + * applied to dstrect, rotating it in a clockwise direction. + * \param center A pointer to a point indicating the point around which + * dstrect will be rotated (if NULL, rotation will be done + * around dstrect.w/2, dstrect.h/2). + * \param flip An SDL_RendererFlip value stating which flipping actions should + * be performed on the texture. + * \return 0 on success, or -1 on error. + * + * \since This function is available since SDL 2.0.10. + */ +extern DECLSPEC int SDLCALL SDL_RenderCopyExF(SDL_Renderer * renderer, + SDL_Texture * texture, + const SDL_Rect * srcrect, + const SDL_FRect * dstrect, + const double angle, + const SDL_FPoint *center, + const SDL_RendererFlip flip); + +/** + * Render a list of triangles, optionally using a texture and indices into the + * vertex array Color and alpha modulation is done per vertex + * (SDL_SetTextureColorMod and SDL_SetTextureAlphaMod are ignored). + * + * \param renderer The rendering context. + * \param texture (optional) The SDL texture to use. + * \param vertices Vertices. + * \param num_vertices Number of vertices. + * \param indices (optional) An array of integer indices into the 'vertices' + * array, if NULL all vertices will be rendered in sequential + * order. + * \param num_indices Number of indices. + * \return 0 on success, or -1 if the operation is not supported. + * + * \since This function is available since SDL 2.0.18. + * + * \sa SDL_RenderGeometryRaw + * \sa SDL_Vertex + */ +extern DECLSPEC int SDLCALL SDL_RenderGeometry(SDL_Renderer *renderer, + SDL_Texture *texture, + const SDL_Vertex *vertices, int num_vertices, + const int *indices, int num_indices); + +/** + * Render a list of triangles, optionally using a texture and indices into the + * vertex arrays Color and alpha modulation is done per vertex + * (SDL_SetTextureColorMod and SDL_SetTextureAlphaMod are ignored). + * + * \param renderer The rendering context. + * \param texture (optional) The SDL texture to use. + * \param xy Vertex positions. + * \param xy_stride Byte size to move from one element to the next element. + * \param color Vertex colors (as SDL_Color). + * \param color_stride Byte size to move from one element to the next element. + * \param uv Vertex normalized texture coordinates. + * \param uv_stride Byte size to move from one element to the next element. + * \param num_vertices Number of vertices. + * \param indices (optional) An array of indices into the 'vertices' arrays, + * if NULL all vertices will be rendered in sequential order. + * \param num_indices Number of indices. + * \param size_indices Index size: 1 (byte), 2 (short), 4 (int). + * \return 0 on success, or -1 if the operation is not supported. + * + * \since This function is available since SDL 2.0.18. + * + * \sa SDL_RenderGeometry + * \sa SDL_Vertex + */ +extern DECLSPEC int SDLCALL SDL_RenderGeometryRaw(SDL_Renderer *renderer, + SDL_Texture *texture, + const float *xy, int xy_stride, + const SDL_Color *color, int color_stride, + const float *uv, int uv_stride, + int num_vertices, + const void *indices, int num_indices, int size_indices); + +/** + * Read pixels from the current rendering target to an array of pixels. + * + * **WARNING**: This is a very slow operation, and should not be used + * frequently. If you're using this on the main rendering target, it should be + * called after rendering and before SDL_RenderPresent(). + * + * `pitch` specifies the number of bytes between rows in the destination + * `pixels` data. This allows you to write to a subrectangle or have padded + * rows in the destination. Generally, `pitch` should equal the number of + * pixels per row in the `pixels` data times the number of bytes per pixel, + * but it might contain additional padding (for example, 24bit RGB Windows + * Bitmap data pads all rows to multiples of 4 bytes). + * + * \param renderer the rendering context. + * \param rect an SDL_Rect structure representing the area to read, or NULL + * for the entire render target. + * \param format an SDL_PixelFormatEnum value of the desired format of the + * pixel data, or 0 to use the format of the rendering target. + * \param pixels a pointer to the pixel data to copy into. + * \param pitch the pitch of the `pixels` parameter. + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + */ +extern DECLSPEC int SDLCALL SDL_RenderReadPixels(SDL_Renderer * renderer, + const SDL_Rect * rect, + Uint32 format, + void *pixels, int pitch); + +/** + * Update the screen with any rendering performed since the previous call. + * + * SDL's rendering functions operate on a backbuffer; that is, calling a + * rendering function such as SDL_RenderDrawLine() does not directly put a + * line on the screen, but rather updates the backbuffer. As such, you compose + * your entire scene and *present* the composed backbuffer to the screen as a + * complete picture. + * + * Therefore, when using SDL's rendering API, one does all drawing intended + * for the frame, and then calls this function once per frame to present the + * final drawing to the user. + * + * The backbuffer should be considered invalidated after each present; do not + * assume that previous contents will exist between frames. You are strongly + * encouraged to call SDL_RenderClear() to initialize the backbuffer before + * starting each new frame's drawing, even if you plan to overwrite every + * pixel. + * + * \param renderer the rendering context. + * + * \threadsafety You may only call this function on the main thread. If this + * happens to work on a background thread on any given platform + * or backend, it's purely by luck and you should not rely on it + * to work next time. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CreateRenderer + * \sa SDL_RenderClear + * \sa SDL_RenderDrawLine + * \sa SDL_RenderDrawLines + * \sa SDL_RenderDrawPoint + * \sa SDL_RenderDrawPoints + * \sa SDL_RenderDrawRect + * \sa SDL_RenderDrawRects + * \sa SDL_RenderFillRect + * \sa SDL_RenderFillRects + * \sa SDL_SetRenderDrawBlendMode + * \sa SDL_SetRenderDrawColor + */ +extern DECLSPEC void SDLCALL SDL_RenderPresent(SDL_Renderer * renderer); + +/** + * Destroy the specified texture. + * + * Passing NULL or an otherwise invalid texture will set the SDL error message + * to "Invalid texture". + * + * \param texture the texture to destroy. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CreateTexture + * \sa SDL_CreateTextureFromSurface + */ +extern DECLSPEC void SDLCALL SDL_DestroyTexture(SDL_Texture * texture); + +/** + * Destroy the rendering context for a window and free associated textures. + * + * If `renderer` is NULL, this function will return immediately after setting + * the SDL error message to "Invalid renderer". See SDL_GetError(). + * + * \param renderer the rendering context. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CreateRenderer + */ +extern DECLSPEC void SDLCALL SDL_DestroyRenderer(SDL_Renderer * renderer); + +/** + * Force the rendering context to flush any pending commands to the underlying + * rendering API. + * + * You do not need to (and in fact, shouldn't) call this function unless you + * are planning to call into OpenGL/Direct3D/Metal/whatever directly in + * addition to using an SDL_Renderer. + * + * This is for a very-specific case: if you are using SDL's render API, you + * asked for a specific renderer backend (OpenGL, Direct3D, etc), you set + * SDL_HINT_RENDER_BATCHING to "1", and you plan to make OpenGL/D3D/whatever + * calls in addition to SDL render API calls. If all of this applies, you + * should call SDL_RenderFlush() between calls to SDL's render API and the + * low-level API you're using in cooperation. + * + * In all other cases, you can ignore this function. This is only here to get + * maximum performance out of a specific situation. In all other cases, SDL + * will do the right thing, perhaps at a performance loss. + * + * This function is first available in SDL 2.0.10, and is not needed in 2.0.9 + * and earlier, as earlier versions did not queue rendering commands at all, + * instead flushing them to the OS immediately. + * + * \param renderer the rendering context. + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.10. + */ +extern DECLSPEC int SDLCALL SDL_RenderFlush(SDL_Renderer * renderer); + + +/** + * Bind an OpenGL/ES/ES2 texture to the current context. + * + * This is for use with OpenGL instructions when rendering OpenGL primitives + * directly. + * + * If not NULL, `texw` and `texh` will be filled with the width and height + * values suitable for the provided texture. In most cases, both will be 1.0, + * however, on systems that support the GL_ARB_texture_rectangle extension, + * these values will actually be the pixel width and height used to create the + * texture, so this factor needs to be taken into account when providing + * texture coordinates to OpenGL. + * + * You need a renderer to create an SDL_Texture, therefore you can only use + * this function with an implicit OpenGL context from SDL_CreateRenderer(), + * not with your own OpenGL context. If you need control over your OpenGL + * context, you need to write your own texture-loading methods. + * + * Also note that SDL may upload RGB textures as BGR (or vice-versa), and + * re-order the color channels in the shaders phase, so the uploaded texture + * may have swapped color channels. + * + * \param texture the texture to bind to the current OpenGL/ES/ES2 context. + * \param texw a pointer to a float value which will be filled with the + * texture width or NULL if you don't need that value. + * \param texh a pointer to a float value which will be filled with the + * texture height or NULL if you don't need that value. + * \returns 0 on success, or -1 if the operation is not supported; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GL_MakeCurrent + * \sa SDL_GL_UnbindTexture + */ +extern DECLSPEC int SDLCALL SDL_GL_BindTexture(SDL_Texture *texture, float *texw, float *texh); + +/** + * Unbind an OpenGL/ES/ES2 texture from the current context. + * + * See SDL_GL_BindTexture() for examples on how to use these functions + * + * \param texture the texture to unbind from the current OpenGL/ES/ES2 + * context. + * \returns 0 on success, or -1 if the operation is not supported. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GL_BindTexture + * \sa SDL_GL_MakeCurrent + */ +extern DECLSPEC int SDLCALL SDL_GL_UnbindTexture(SDL_Texture *texture); + +/** + * Get the CAMetalLayer associated with the given Metal renderer. + * + * This function returns `void *`, so SDL doesn't have to include Metal's + * headers, but it can be safely cast to a `CAMetalLayer *`. + * + * \param renderer The renderer to query. + * \returns a `CAMetalLayer *` on success, or NULL if the renderer isn't a + * Metal renderer. + * + * \since This function is available since SDL 2.0.8. + * + * \sa SDL_RenderGetMetalCommandEncoder + */ +extern DECLSPEC void *SDLCALL SDL_RenderGetMetalLayer(SDL_Renderer * renderer); + +/** + * Get the Metal command encoder for the current frame + * + * This function returns `void *`, so SDL doesn't have to include Metal's + * headers, but it can be safely cast to an `id`. + * + * Note that as of SDL 2.0.18, this will return NULL if Metal refuses to give + * SDL a drawable to render to, which might happen if the window is + * hidden/minimized/offscreen. This doesn't apply to command encoders for + * render targets, just the window's backbuffer. Check your return values! + * + * \param renderer The renderer to query. + * \returns an `id` on success, or NULL if the + * renderer isn't a Metal renderer or there was an error. + * + * \since This function is available since SDL 2.0.8. + * + * \sa SDL_RenderGetMetalLayer + */ +extern DECLSPEC void *SDLCALL SDL_RenderGetMetalCommandEncoder(SDL_Renderer * renderer); + +/** + * Toggle VSync of the given renderer. + * + * \param renderer The renderer to toggle. + * \param vsync 1 for on, 0 for off. All other values are reserved. + * \returns a 0 int on success, or non-zero on failure. + * + * \since This function is available since SDL 2.0.18. + */ +extern DECLSPEC int SDLCALL SDL_RenderSetVSync(SDL_Renderer* renderer, int vsync); + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include "close_code.h" + +#endif /* SDL_render_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/third_party/tlRender-install-Release/include/SDL2/SDL_revision.h b/third_party/tlRender-install-Release/include/SDL2/SDL_revision.h new file mode 100644 index 00000000..e3543ade --- /dev/null +++ b/third_party/tlRender-install-Release/include/SDL2/SDL_revision.h @@ -0,0 +1,8 @@ +/* #undef SDL_VENDOR_INFO */ +#define SDL_REVISION_NUMBER 0 + +#ifdef SDL_VENDOR_INFO +#define SDL_REVISION "SDL-release-2.32.10-0-g5d2495703 (" SDL_VENDOR_INFO ")" +#else +#define SDL_REVISION "SDL-release-2.32.10-0-g5d2495703" +#endif diff --git a/third_party/tlRender-install-Release/include/SDL2/SDL_rwops.h b/third_party/tlRender-install-Release/include/SDL2/SDL_rwops.h new file mode 100644 index 00000000..43c1b0ec --- /dev/null +++ b/third_party/tlRender-install-Release/include/SDL2/SDL_rwops.h @@ -0,0 +1,844 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2025 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +/* WIKI CATEGORY: RWOPS */ + +/** + * # CategoryRWOPS + * + * This file provides a general interface for SDL to read and write data + * streams. It can easily be extended to files, memory, etc. + */ + +#ifndef SDL_rwops_h_ +#define SDL_rwops_h_ + +#include "SDL_stdinc.h" +#include "SDL_error.h" + +#include "begin_code.h" +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/* RWops Types */ +#define SDL_RWOPS_UNKNOWN 0U /**< Unknown stream type */ +#define SDL_RWOPS_WINFILE 1U /**< Win32 file */ +#define SDL_RWOPS_STDFILE 2U /**< Stdio file */ +#define SDL_RWOPS_JNIFILE 3U /**< Android asset */ +#define SDL_RWOPS_MEMORY 4U /**< Memory stream */ +#define SDL_RWOPS_MEMORY_RO 5U /**< Read-Only memory stream */ + +/** + * This is the read/write operation structure -- very basic. + */ +typedef struct SDL_RWops +{ + /** + * Return the size of the file in this rwops, or -1 if unknown + */ + Sint64 (SDLCALL * size) (struct SDL_RWops * context); + + /** + * Seek to `offset` relative to `whence`, one of stdio's whence values: + * RW_SEEK_SET, RW_SEEK_CUR, RW_SEEK_END + * + * \return the final offset in the data stream, or -1 on error. + */ + Sint64 (SDLCALL * seek) (struct SDL_RWops * context, Sint64 offset, + int whence); + + /** + * Read up to `maxnum` objects each of size `size` from the data + * stream to the area pointed at by `ptr`. + * + * \return the number of objects read, or 0 at error or end of file. + */ + size_t (SDLCALL * read) (struct SDL_RWops * context, void *ptr, + size_t size, size_t maxnum); + + /** + * Write exactly `num` objects each of size `size` from the area + * pointed at by `ptr` to data stream. + * + * \return the number of objects written, or 0 at error or end of file. + */ + size_t (SDLCALL * write) (struct SDL_RWops * context, const void *ptr, + size_t size, size_t num); + + /** + * Close and free an allocated SDL_RWops structure. + * + * \return 0 if successful or -1 on write error when flushing data. + */ + int (SDLCALL * close) (struct SDL_RWops * context); + + Uint32 type; + union + { +#if defined(__ANDROID__) + struct + { + void *asset; + } androidio; +#elif defined(__WIN32__) || defined(__GDK__) + struct + { + SDL_bool append; + void *h; + struct + { + void *data; + size_t size; + size_t left; + } buffer; + } windowsio; +#endif + +#ifdef HAVE_STDIO_H + struct + { + SDL_bool autoclose; + FILE *fp; + } stdio; +#endif + struct + { + Uint8 *base; + Uint8 *here; + Uint8 *stop; + } mem; + struct + { + void *data1; + void *data2; + } unknown; + } hidden; + +} SDL_RWops; + + +/** + * \name RWFrom functions + * + * Functions to create SDL_RWops structures from various data streams. + */ +/* @{ */ + +/** + * Use this function to create a new SDL_RWops structure for reading from + * and/or writing to a named file. + * + * The `mode` string is treated roughly the same as in a call to the C + * library's fopen(), even if SDL doesn't happen to use fopen() behind the + * scenes. + * + * Available `mode` strings: + * + * - "r": Open a file for reading. The file must exist. + * - "w": Create an empty file for writing. If a file with the same name + * already exists its content is erased and the file is treated as a new + * empty file. + * - "a": Append to a file. Writing operations append data at the end of the + * file. The file is created if it does not exist. + * - "r+": Open a file for update both reading and writing. The file must + * exist. + * - "w+": Create an empty file for both reading and writing. If a file with + * the same name already exists its content is erased and the file is + * treated as a new empty file. + * - "a+": Open a file for reading and appending. All writing operations are + * performed at the end of the file, protecting the previous content to be + * overwritten. You can reposition (fseek, rewind) the internal pointer to + * anywhere in the file for reading, but writing operations will move it + * back to the end of file. The file is created if it does not exist. + * + * **NOTE**: In order to open a file as a binary file, a "b" character has to + * be included in the `mode` string. This additional "b" character can either + * be appended at the end of the string (thus making the following compound + * modes: "rb", "wb", "ab", "r+b", "w+b", "a+b") or be inserted between the + * letter and the "+" sign for the mixed modes ("rb+", "wb+", "ab+"). + * Additional characters may follow the sequence, although they should have no + * effect. For example, "t" is sometimes appended to make explicit the file is + * a text file. + * + * This function supports Unicode filenames, but they must be encoded in UTF-8 + * format, regardless of the underlying operating system. + * + * As a fallback, SDL_RWFromFile() will transparently open a matching filename + * in an Android app's `assets`. + * + * Closing the SDL_RWops will close the file handle SDL is holding internally. + * + * \param file a UTF-8 string representing the filename to open. + * \param mode an ASCII string representing the mode to be used for opening + * the file. + * \returns a pointer to the SDL_RWops structure that is created, or NULL on + * failure; call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_RWclose + * \sa SDL_RWFromConstMem + * \sa SDL_RWFromFP + * \sa SDL_RWFromMem + * \sa SDL_RWread + * \sa SDL_RWseek + * \sa SDL_RWtell + * \sa SDL_RWwrite + */ +extern DECLSPEC SDL_RWops *SDLCALL SDL_RWFromFile(const char *file, + const char *mode); + +#ifdef HAVE_STDIO_H + +extern DECLSPEC SDL_RWops *SDLCALL SDL_RWFromFP(FILE * fp, SDL_bool autoclose); + +#else + +/** + * Use this function to create an SDL_RWops structure from a standard I/O file + * pointer (stdio.h's `FILE*`). + * + * This function is not available on Windows, since files opened in an + * application on that platform cannot be used by a dynamically linked + * library. + * + * On some platforms, the first parameter is a `void*`, on others, it's a + * `FILE*`, depending on what system headers are available to SDL. It is + * always intended to be the `FILE*` type from the C runtime's stdio.h. + * + * \param fp the `FILE*` that feeds the SDL_RWops stream. + * \param autoclose SDL_TRUE to close the `FILE*` when closing the SDL_RWops, + * SDL_FALSE to leave the `FILE*` open when the RWops is + * closed. + * \returns a pointer to the SDL_RWops structure that is created, or NULL on + * failure; call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_RWclose + * \sa SDL_RWFromConstMem + * \sa SDL_RWFromFile + * \sa SDL_RWFromMem + * \sa SDL_RWread + * \sa SDL_RWseek + * \sa SDL_RWtell + * \sa SDL_RWwrite + */ +extern DECLSPEC SDL_RWops *SDLCALL SDL_RWFromFP(void * fp, + SDL_bool autoclose); +#endif + +/** + * Use this function to prepare a read-write memory buffer for use with + * SDL_RWops. + * + * This function sets up an SDL_RWops struct based on a memory area of a + * certain size, for both read and write access. + * + * This memory buffer is not copied by the RWops; the pointer you provide must + * remain valid until you close the stream. Closing the stream will not free + * the original buffer. + * + * If you need to make sure the RWops never writes to the memory buffer, you + * should use SDL_RWFromConstMem() with a read-only buffer of memory instead. + * + * \param mem a pointer to a buffer to feed an SDL_RWops stream. + * \param size the buffer size, in bytes. + * \returns a pointer to a new SDL_RWops structure, or NULL if it fails; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_RWclose + * \sa SDL_RWFromConstMem + * \sa SDL_RWFromFile + * \sa SDL_RWFromFP + * \sa SDL_RWFromMem + * \sa SDL_RWread + * \sa SDL_RWseek + * \sa SDL_RWtell + * \sa SDL_RWwrite + */ +extern DECLSPEC SDL_RWops *SDLCALL SDL_RWFromMem(void *mem, int size); + +/** + * Use this function to prepare a read-only memory buffer for use with RWops. + * + * This function sets up an SDL_RWops struct based on a memory area of a + * certain size. It assumes the memory area is not writable. + * + * Attempting to write to this RWops stream will report an error without + * writing to the memory buffer. + * + * This memory buffer is not copied by the RWops; the pointer you provide must + * remain valid until you close the stream. Closing the stream will not free + * the original buffer. + * + * If you need to write to a memory buffer, you should use SDL_RWFromMem() + * with a writable buffer of memory instead. + * + * \param mem a pointer to a read-only buffer to feed an SDL_RWops stream. + * \param size the buffer size, in bytes. + * \returns a pointer to a new SDL_RWops structure, or NULL if it fails; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_RWclose + * \sa SDL_RWFromConstMem + * \sa SDL_RWFromFile + * \sa SDL_RWFromFP + * \sa SDL_RWFromMem + * \sa SDL_RWread + * \sa SDL_RWseek + * \sa SDL_RWtell + */ +extern DECLSPEC SDL_RWops *SDLCALL SDL_RWFromConstMem(const void *mem, + int size); + +/* @} *//* RWFrom functions */ + + +/** + * Use this function to allocate an empty, unpopulated SDL_RWops structure. + * + * Applications do not need to use this function unless they are providing + * their own SDL_RWops implementation. If you just need a SDL_RWops to + * read/write a common data source, you should use the built-in + * implementations in SDL, like SDL_RWFromFile() or SDL_RWFromMem(), etc. + * + * You must free the returned pointer with SDL_FreeRW(). Depending on your + * operating system and compiler, there may be a difference between the + * malloc() and free() your program uses and the versions SDL calls + * internally. Trying to mix the two can cause crashing such as segmentation + * faults. Since all SDL_RWops must free themselves when their **close** + * method is called, all SDL_RWops must be allocated through this function, so + * they can all be freed correctly with SDL_FreeRW(). + * + * \returns a pointer to the allocated memory on success, or NULL on failure; + * call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_FreeRW + */ +extern DECLSPEC SDL_RWops *SDLCALL SDL_AllocRW(void); + +/** + * Use this function to free an SDL_RWops structure allocated by + * SDL_AllocRW(). + * + * Applications do not need to use this function unless they are providing + * their own SDL_RWops implementation. If you just need a SDL_RWops to + * read/write a common data source, you should use the built-in + * implementations in SDL, like SDL_RWFromFile() or SDL_RWFromMem(), etc, and + * call the **close** method on those SDL_RWops pointers when you are done + * with them. + * + * Only use SDL_FreeRW() on pointers returned by SDL_AllocRW(). The pointer is + * invalid as soon as this function returns. Any extra memory allocated during + * creation of the SDL_RWops is not freed by SDL_FreeRW(); the programmer must + * be responsible for managing that memory in their **close** method. + * + * \param area the SDL_RWops structure to be freed. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_AllocRW + */ +extern DECLSPEC void SDLCALL SDL_FreeRW(SDL_RWops * area); + +/* Possible `whence` values for SDL_RWops seeking... */ +#define RW_SEEK_SET 0 /**< Seek from the beginning of data */ +#define RW_SEEK_CUR 1 /**< Seek relative to current read point */ +#define RW_SEEK_END 2 /**< Seek relative to the end of data */ + +/** + * Use this function to get the size of the data stream in an SDL_RWops. + * + * Prior to SDL 2.0.10, this function was a macro. + * + * \param context the SDL_RWops to get the size of the data stream from. + * \returns the size of the data stream in the SDL_RWops on success, -1 if + * unknown or a negative error code on failure; call SDL_GetError() + * for more information. + * + * \since This function is available since SDL 2.0.10. + */ +extern DECLSPEC Sint64 SDLCALL SDL_RWsize(SDL_RWops *context); + +/** + * Seek within an SDL_RWops data stream. + * + * This function seeks to byte `offset`, relative to `whence`. + * + * `whence` may be any of the following values: + * + * - `RW_SEEK_SET`: seek from the beginning of data + * - `RW_SEEK_CUR`: seek relative to current read point + * - `RW_SEEK_END`: seek relative to the end of data + * + * If this stream can not seek, it will return -1. + * + * SDL_RWseek() is actually a wrapper function that calls the SDL_RWops's + * `seek` method appropriately, to simplify application development. + * + * Prior to SDL 2.0.10, this function was a macro. + * + * \param context a pointer to an SDL_RWops structure. + * \param offset an offset in bytes, relative to **whence** location; can be + * negative. + * \param whence any of `RW_SEEK_SET`, `RW_SEEK_CUR`, `RW_SEEK_END`. + * \returns the final offset in the data stream after the seek or -1 on error. + * + * \since This function is available since SDL 2.0.10. + * + * \sa SDL_RWclose + * \sa SDL_RWFromConstMem + * \sa SDL_RWFromFile + * \sa SDL_RWFromFP + * \sa SDL_RWFromMem + * \sa SDL_RWread + * \sa SDL_RWtell + * \sa SDL_RWwrite + */ +extern DECLSPEC Sint64 SDLCALL SDL_RWseek(SDL_RWops *context, + Sint64 offset, int whence); + +/** + * Determine the current read/write offset in an SDL_RWops data stream. + * + * SDL_RWtell is actually a wrapper function that calls the SDL_RWops's `seek` + * method, with an offset of 0 bytes from `RW_SEEK_CUR`, to simplify + * application development. + * + * Prior to SDL 2.0.10, this function was a macro. + * + * \param context a SDL_RWops data stream object from which to get the current + * offset. + * \returns the current offset in the stream, or -1 if the information can not + * be determined. + * + * \since This function is available since SDL 2.0.10. + * + * \sa SDL_RWclose + * \sa SDL_RWFromConstMem + * \sa SDL_RWFromFile + * \sa SDL_RWFromFP + * \sa SDL_RWFromMem + * \sa SDL_RWread + * \sa SDL_RWseek + * \sa SDL_RWwrite + */ +extern DECLSPEC Sint64 SDLCALL SDL_RWtell(SDL_RWops *context); + +/** + * Read from a data source. + * + * This function reads up to `maxnum` objects each of size `size` from the + * data source to the area pointed at by `ptr`. This function may read less + * objects than requested. It will return zero when there has been an error or + * the data stream is completely read. + * + * SDL_RWread() is actually a function wrapper that calls the SDL_RWops's + * `read` method appropriately, to simplify application development. + * + * Prior to SDL 2.0.10, this function was a macro. + * + * \param context a pointer to an SDL_RWops structure. + * \param ptr a pointer to a buffer to read data into. + * \param size the size of each object to read, in bytes. + * \param maxnum the maximum number of objects to be read. + * \returns the number of objects read, or 0 at error or end of file; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.10. + * + * \sa SDL_RWclose + * \sa SDL_RWFromConstMem + * \sa SDL_RWFromFile + * \sa SDL_RWFromFP + * \sa SDL_RWFromMem + * \sa SDL_RWseek + * \sa SDL_RWwrite + */ +extern DECLSPEC size_t SDLCALL SDL_RWread(SDL_RWops *context, + void *ptr, size_t size, + size_t maxnum); + +/** + * Write to an SDL_RWops data stream. + * + * This function writes exactly `num` objects each of size `size` from the + * area pointed at by `ptr` to the stream. If this fails for any reason, it'll + * return less than `num` to demonstrate how far the write progressed. On + * success, it returns `num`. + * + * SDL_RWwrite is actually a function wrapper that calls the SDL_RWops's + * `write` method appropriately, to simplify application development. + * + * Prior to SDL 2.0.10, this function was a macro. + * + * \param context a pointer to an SDL_RWops structure. + * \param ptr a pointer to a buffer containing data to write. + * \param size the size of an object to write, in bytes. + * \param num the number of objects to write. + * \returns the number of objects written, which will be less than **num** on + * error; call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.10. + * + * \sa SDL_RWclose + * \sa SDL_RWFromConstMem + * \sa SDL_RWFromFile + * \sa SDL_RWFromFP + * \sa SDL_RWFromMem + * \sa SDL_RWread + * \sa SDL_RWseek + */ +extern DECLSPEC size_t SDLCALL SDL_RWwrite(SDL_RWops *context, + const void *ptr, size_t size, + size_t num); + +/** + * Close and free an allocated SDL_RWops structure. + * + * SDL_RWclose() closes and cleans up the SDL_RWops stream. It releases any + * resources used by the stream and frees the SDL_RWops itself with + * SDL_FreeRW(). This returns 0 on success, or -1 if the stream failed to + * flush to its output (e.g. to disk). + * + * Note that if this fails to flush the stream to disk, this function reports + * an error, but the SDL_RWops is still invalid once this function returns. + * + * Prior to SDL 2.0.10, this function was a macro. + * + * \param context SDL_RWops structure to close. + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.10. + * + * \sa SDL_RWFromConstMem + * \sa SDL_RWFromFile + * \sa SDL_RWFromFP + * \sa SDL_RWFromMem + * \sa SDL_RWread + * \sa SDL_RWseek + * \sa SDL_RWwrite + */ +extern DECLSPEC int SDLCALL SDL_RWclose(SDL_RWops *context); + +/** + * Load all the data from an SDL data stream. + * + * The data is allocated with a zero byte at the end (null terminated) for + * convenience. This extra byte is not included in the value reported via + * `datasize`. + * + * The data should be freed with SDL_free(). + * + * \param src the SDL_RWops to read all available data from. + * \param datasize if not NULL, will store the number of bytes read. + * \param freesrc if non-zero, calls SDL_RWclose() on `src` before returning. + * \returns the data, or NULL if there was an error. + * + * \since This function is available since SDL 2.0.6. + */ +extern DECLSPEC void *SDLCALL SDL_LoadFile_RW(SDL_RWops *src, + size_t *datasize, + int freesrc); + +/** + * Load all the data from a file path. + * + * The data is allocated with a zero byte at the end (null terminated) for + * convenience. This extra byte is not included in the value reported via + * `datasize`. + * + * The data should be freed with SDL_free(). + * + * Prior to SDL 2.0.10, this function was a macro wrapping around + * SDL_LoadFile_RW. + * + * \param file the path to read all available data from. + * \param datasize if not NULL, will store the number of bytes read. + * \returns the data, or NULL if there was an error. + * + * \since This function is available since SDL 2.0.10. + */ +extern DECLSPEC void *SDLCALL SDL_LoadFile(const char *file, size_t *datasize); + +/** + * \name Read endian functions + * + * Read an item of the specified endianness and return in native format. + */ +/* @{ */ + +/** + * Use this function to read a byte from an SDL_RWops. + * + * \param src the SDL_RWops to read from. + * \returns the read byte on success or 0 on failure; call SDL_GetError() for + * more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_WriteU8 + */ +extern DECLSPEC Uint8 SDLCALL SDL_ReadU8(SDL_RWops * src); + +/** + * Use this function to read 16 bits of little-endian data from an SDL_RWops + * and return in native format. + * + * SDL byteswaps the data only if necessary, so the data returned will be in + * the native byte order. + * + * \param src the stream from which to read data. + * \returns 16 bits of data in the native byte order of the platform. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_ReadBE16 + */ +extern DECLSPEC Uint16 SDLCALL SDL_ReadLE16(SDL_RWops * src); + +/** + * Use this function to read 16 bits of big-endian data from an SDL_RWops and + * return in native format. + * + * SDL byteswaps the data only if necessary, so the data returned will be in + * the native byte order. + * + * \param src the stream from which to read data. + * \returns 16 bits of data in the native byte order of the platform. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_ReadLE16 + */ +extern DECLSPEC Uint16 SDLCALL SDL_ReadBE16(SDL_RWops * src); + +/** + * Use this function to read 32 bits of little-endian data from an SDL_RWops + * and return in native format. + * + * SDL byteswaps the data only if necessary, so the data returned will be in + * the native byte order. + * + * \param src the stream from which to read data. + * \returns 32 bits of data in the native byte order of the platform. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_ReadBE32 + */ +extern DECLSPEC Uint32 SDLCALL SDL_ReadLE32(SDL_RWops * src); + +/** + * Use this function to read 32 bits of big-endian data from an SDL_RWops and + * return in native format. + * + * SDL byteswaps the data only if necessary, so the data returned will be in + * the native byte order. + * + * \param src the stream from which to read data. + * \returns 32 bits of data in the native byte order of the platform. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_ReadLE32 + */ +extern DECLSPEC Uint32 SDLCALL SDL_ReadBE32(SDL_RWops * src); + +/** + * Use this function to read 64 bits of little-endian data from an SDL_RWops + * and return in native format. + * + * SDL byteswaps the data only if necessary, so the data returned will be in + * the native byte order. + * + * \param src the stream from which to read data. + * \returns 64 bits of data in the native byte order of the platform. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_ReadBE64 + */ +extern DECLSPEC Uint64 SDLCALL SDL_ReadLE64(SDL_RWops * src); + +/** + * Use this function to read 64 bits of big-endian data from an SDL_RWops and + * return in native format. + * + * SDL byteswaps the data only if necessary, so the data returned will be in + * the native byte order. + * + * \param src the stream from which to read data. + * \returns 64 bits of data in the native byte order of the platform. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_ReadLE64 + */ +extern DECLSPEC Uint64 SDLCALL SDL_ReadBE64(SDL_RWops * src); +/* @} *//* Read endian functions */ + +/** + * \name Write endian functions + * + * Write an item of native format to the specified endianness. + */ +/* @{ */ + +/** + * Use this function to write a byte to an SDL_RWops. + * + * \param dst the SDL_RWops to write to. + * \param value the byte value to write. + * \returns 1 on success or 0 on failure; call SDL_GetError() for more + * information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_ReadU8 + */ +extern DECLSPEC size_t SDLCALL SDL_WriteU8(SDL_RWops * dst, Uint8 value); + +/** + * Use this function to write 16 bits in native format to a SDL_RWops as + * little-endian data. + * + * SDL byteswaps the data only if necessary, so the application always + * specifies native format, and the data written will be in little-endian + * format. + * + * \param dst the stream to which data will be written. + * \param value the data to be written, in native format. + * \returns 1 on successful write, 0 on error. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_WriteBE16 + */ +extern DECLSPEC size_t SDLCALL SDL_WriteLE16(SDL_RWops * dst, Uint16 value); + +/** + * Use this function to write 16 bits in native format to a SDL_RWops as + * big-endian data. + * + * SDL byteswaps the data only if necessary, so the application always + * specifies native format, and the data written will be in big-endian format. + * + * \param dst the stream to which data will be written. + * \param value the data to be written, in native format. + * \returns 1 on successful write, 0 on error. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_WriteLE16 + */ +extern DECLSPEC size_t SDLCALL SDL_WriteBE16(SDL_RWops * dst, Uint16 value); + +/** + * Use this function to write 32 bits in native format to a SDL_RWops as + * little-endian data. + * + * SDL byteswaps the data only if necessary, so the application always + * specifies native format, and the data written will be in little-endian + * format. + * + * \param dst the stream to which data will be written. + * \param value the data to be written, in native format. + * \returns 1 on successful write, 0 on error. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_WriteBE32 + */ +extern DECLSPEC size_t SDLCALL SDL_WriteLE32(SDL_RWops * dst, Uint32 value); + +/** + * Use this function to write 32 bits in native format to a SDL_RWops as + * big-endian data. + * + * SDL byteswaps the data only if necessary, so the application always + * specifies native format, and the data written will be in big-endian format. + * + * \param dst the stream to which data will be written. + * \param value the data to be written, in native format. + * \returns 1 on successful write, 0 on error. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_WriteLE32 + */ +extern DECLSPEC size_t SDLCALL SDL_WriteBE32(SDL_RWops * dst, Uint32 value); + +/** + * Use this function to write 64 bits in native format to a SDL_RWops as + * little-endian data. + * + * SDL byteswaps the data only if necessary, so the application always + * specifies native format, and the data written will be in little-endian + * format. + * + * \param dst the stream to which data will be written. + * \param value the data to be written, in native format. + * \returns 1 on successful write, 0 on error. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_WriteBE64 + */ +extern DECLSPEC size_t SDLCALL SDL_WriteLE64(SDL_RWops * dst, Uint64 value); + +/** + * Use this function to write 64 bits in native format to a SDL_RWops as + * big-endian data. + * + * SDL byteswaps the data only if necessary, so the application always + * specifies native format, and the data written will be in big-endian format. + * + * \param dst the stream to which data will be written. + * \param value the data to be written, in native format. + * \returns 1 on successful write, 0 on error. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_WriteLE64 + */ +extern DECLSPEC size_t SDLCALL SDL_WriteBE64(SDL_RWops * dst, Uint64 value); +/* @} *//* Write endian functions */ + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include "close_code.h" + +#endif /* SDL_rwops_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/third_party/tlRender-install-Release/include/SDL2/SDL_scancode.h b/third_party/tlRender-install-Release/include/SDL2/SDL_scancode.h new file mode 100644 index 00000000..0652d7ef --- /dev/null +++ b/third_party/tlRender-install-Release/include/SDL2/SDL_scancode.h @@ -0,0 +1,438 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2025 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +/** + * # CategoryScancode + * + * Defines keyboard scancodes. + */ + +#ifndef SDL_scancode_h_ +#define SDL_scancode_h_ + +#include "SDL_stdinc.h" + +/** + * The SDL keyboard scancode representation. + * + * Values of this type are used to represent keyboard keys, among other places + * in the SDL_Keysym::scancode key.keysym.scancode field of the SDL_Event + * structure. + * + * The values in this enumeration are based on the USB usage page standard: + * https://www.usb.org/sites/default/files/documents/hut1_12v2.pdf + */ +typedef enum SDL_Scancode +{ + SDL_SCANCODE_UNKNOWN = 0, + + /** + * \name Usage page 0x07 + * + * These values are from usage page 0x07 (USB keyboard page). + */ + /* @{ */ + + SDL_SCANCODE_A = 4, + SDL_SCANCODE_B = 5, + SDL_SCANCODE_C = 6, + SDL_SCANCODE_D = 7, + SDL_SCANCODE_E = 8, + SDL_SCANCODE_F = 9, + SDL_SCANCODE_G = 10, + SDL_SCANCODE_H = 11, + SDL_SCANCODE_I = 12, + SDL_SCANCODE_J = 13, + SDL_SCANCODE_K = 14, + SDL_SCANCODE_L = 15, + SDL_SCANCODE_M = 16, + SDL_SCANCODE_N = 17, + SDL_SCANCODE_O = 18, + SDL_SCANCODE_P = 19, + SDL_SCANCODE_Q = 20, + SDL_SCANCODE_R = 21, + SDL_SCANCODE_S = 22, + SDL_SCANCODE_T = 23, + SDL_SCANCODE_U = 24, + SDL_SCANCODE_V = 25, + SDL_SCANCODE_W = 26, + SDL_SCANCODE_X = 27, + SDL_SCANCODE_Y = 28, + SDL_SCANCODE_Z = 29, + + SDL_SCANCODE_1 = 30, + SDL_SCANCODE_2 = 31, + SDL_SCANCODE_3 = 32, + SDL_SCANCODE_4 = 33, + SDL_SCANCODE_5 = 34, + SDL_SCANCODE_6 = 35, + SDL_SCANCODE_7 = 36, + SDL_SCANCODE_8 = 37, + SDL_SCANCODE_9 = 38, + SDL_SCANCODE_0 = 39, + + SDL_SCANCODE_RETURN = 40, + SDL_SCANCODE_ESCAPE = 41, + SDL_SCANCODE_BACKSPACE = 42, + SDL_SCANCODE_TAB = 43, + SDL_SCANCODE_SPACE = 44, + + SDL_SCANCODE_MINUS = 45, + SDL_SCANCODE_EQUALS = 46, + SDL_SCANCODE_LEFTBRACKET = 47, + SDL_SCANCODE_RIGHTBRACKET = 48, + SDL_SCANCODE_BACKSLASH = 49, /**< Located at the lower left of the return + * key on ISO keyboards and at the right end + * of the QWERTY row on ANSI keyboards. + * Produces REVERSE SOLIDUS (backslash) and + * VERTICAL LINE in a US layout, REVERSE + * SOLIDUS and VERTICAL LINE in a UK Mac + * layout, NUMBER SIGN and TILDE in a UK + * Windows layout, DOLLAR SIGN and POUND SIGN + * in a Swiss German layout, NUMBER SIGN and + * APOSTROPHE in a German layout, GRAVE + * ACCENT and POUND SIGN in a French Mac + * layout, and ASTERISK and MICRO SIGN in a + * French Windows layout. + */ + SDL_SCANCODE_NONUSHASH = 50, /**< ISO USB keyboards actually use this code + * instead of 49 for the same key, but all + * OSes I've seen treat the two codes + * identically. So, as an implementor, unless + * your keyboard generates both of those + * codes and your OS treats them differently, + * you should generate SDL_SCANCODE_BACKSLASH + * instead of this code. As a user, you + * should not rely on this code because SDL + * will never generate it with most (all?) + * keyboards. + */ + SDL_SCANCODE_SEMICOLON = 51, + SDL_SCANCODE_APOSTROPHE = 52, + SDL_SCANCODE_GRAVE = 53, /**< Located in the top left corner (on both ANSI + * and ISO keyboards). Produces GRAVE ACCENT and + * TILDE in a US Windows layout and in US and UK + * Mac layouts on ANSI keyboards, GRAVE ACCENT + * and NOT SIGN in a UK Windows layout, SECTION + * SIGN and PLUS-MINUS SIGN in US and UK Mac + * layouts on ISO keyboards, SECTION SIGN and + * DEGREE SIGN in a Swiss German layout (Mac: + * only on ISO keyboards), CIRCUMFLEX ACCENT and + * DEGREE SIGN in a German layout (Mac: only on + * ISO keyboards), SUPERSCRIPT TWO and TILDE in a + * French Windows layout, COMMERCIAL AT and + * NUMBER SIGN in a French Mac layout on ISO + * keyboards, and LESS-THAN SIGN and GREATER-THAN + * SIGN in a Swiss German, German, or French Mac + * layout on ANSI keyboards. + */ + SDL_SCANCODE_COMMA = 54, + SDL_SCANCODE_PERIOD = 55, + SDL_SCANCODE_SLASH = 56, + + SDL_SCANCODE_CAPSLOCK = 57, + + SDL_SCANCODE_F1 = 58, + SDL_SCANCODE_F2 = 59, + SDL_SCANCODE_F3 = 60, + SDL_SCANCODE_F4 = 61, + SDL_SCANCODE_F5 = 62, + SDL_SCANCODE_F6 = 63, + SDL_SCANCODE_F7 = 64, + SDL_SCANCODE_F8 = 65, + SDL_SCANCODE_F9 = 66, + SDL_SCANCODE_F10 = 67, + SDL_SCANCODE_F11 = 68, + SDL_SCANCODE_F12 = 69, + + SDL_SCANCODE_PRINTSCREEN = 70, + SDL_SCANCODE_SCROLLLOCK = 71, + SDL_SCANCODE_PAUSE = 72, + SDL_SCANCODE_INSERT = 73, /**< insert on PC, help on some Mac keyboards (but + does send code 73, not 117) */ + SDL_SCANCODE_HOME = 74, + SDL_SCANCODE_PAGEUP = 75, + SDL_SCANCODE_DELETE = 76, + SDL_SCANCODE_END = 77, + SDL_SCANCODE_PAGEDOWN = 78, + SDL_SCANCODE_RIGHT = 79, + SDL_SCANCODE_LEFT = 80, + SDL_SCANCODE_DOWN = 81, + SDL_SCANCODE_UP = 82, + + SDL_SCANCODE_NUMLOCKCLEAR = 83, /**< num lock on PC, clear on Mac keyboards + */ + SDL_SCANCODE_KP_DIVIDE = 84, + SDL_SCANCODE_KP_MULTIPLY = 85, + SDL_SCANCODE_KP_MINUS = 86, + SDL_SCANCODE_KP_PLUS = 87, + SDL_SCANCODE_KP_ENTER = 88, + SDL_SCANCODE_KP_1 = 89, + SDL_SCANCODE_KP_2 = 90, + SDL_SCANCODE_KP_3 = 91, + SDL_SCANCODE_KP_4 = 92, + SDL_SCANCODE_KP_5 = 93, + SDL_SCANCODE_KP_6 = 94, + SDL_SCANCODE_KP_7 = 95, + SDL_SCANCODE_KP_8 = 96, + SDL_SCANCODE_KP_9 = 97, + SDL_SCANCODE_KP_0 = 98, + SDL_SCANCODE_KP_PERIOD = 99, + + SDL_SCANCODE_NONUSBACKSLASH = 100, /**< This is the additional key that ISO + * keyboards have over ANSI ones, + * located between left shift and Y. + * Produces GRAVE ACCENT and TILDE in a + * US or UK Mac layout, REVERSE SOLIDUS + * (backslash) and VERTICAL LINE in a + * US or UK Windows layout, and + * LESS-THAN SIGN and GREATER-THAN SIGN + * in a Swiss German, German, or French + * layout. */ + SDL_SCANCODE_APPLICATION = 101, /**< windows contextual menu, compose */ + SDL_SCANCODE_POWER = 102, /**< The USB document says this is a status flag, + * not a physical key - but some Mac keyboards + * do have a power key. */ + SDL_SCANCODE_KP_EQUALS = 103, + SDL_SCANCODE_F13 = 104, + SDL_SCANCODE_F14 = 105, + SDL_SCANCODE_F15 = 106, + SDL_SCANCODE_F16 = 107, + SDL_SCANCODE_F17 = 108, + SDL_SCANCODE_F18 = 109, + SDL_SCANCODE_F19 = 110, + SDL_SCANCODE_F20 = 111, + SDL_SCANCODE_F21 = 112, + SDL_SCANCODE_F22 = 113, + SDL_SCANCODE_F23 = 114, + SDL_SCANCODE_F24 = 115, + SDL_SCANCODE_EXECUTE = 116, + SDL_SCANCODE_HELP = 117, /**< AL Integrated Help Center */ + SDL_SCANCODE_MENU = 118, /**< Menu (show menu) */ + SDL_SCANCODE_SELECT = 119, + SDL_SCANCODE_STOP = 120, /**< AC Stop */ + SDL_SCANCODE_AGAIN = 121, /**< AC Redo/Repeat */ + SDL_SCANCODE_UNDO = 122, /**< AC Undo */ + SDL_SCANCODE_CUT = 123, /**< AC Cut */ + SDL_SCANCODE_COPY = 124, /**< AC Copy */ + SDL_SCANCODE_PASTE = 125, /**< AC Paste */ + SDL_SCANCODE_FIND = 126, /**< AC Find */ + SDL_SCANCODE_MUTE = 127, + SDL_SCANCODE_VOLUMEUP = 128, + SDL_SCANCODE_VOLUMEDOWN = 129, +/* not sure whether there's a reason to enable these */ +/* SDL_SCANCODE_LOCKINGCAPSLOCK = 130, */ +/* SDL_SCANCODE_LOCKINGNUMLOCK = 131, */ +/* SDL_SCANCODE_LOCKINGSCROLLLOCK = 132, */ + SDL_SCANCODE_KP_COMMA = 133, + SDL_SCANCODE_KP_EQUALSAS400 = 134, + + SDL_SCANCODE_INTERNATIONAL1 = 135, /**< used on Asian keyboards, see + footnotes in USB doc */ + SDL_SCANCODE_INTERNATIONAL2 = 136, + SDL_SCANCODE_INTERNATIONAL3 = 137, /**< Yen */ + SDL_SCANCODE_INTERNATIONAL4 = 138, + SDL_SCANCODE_INTERNATIONAL5 = 139, + SDL_SCANCODE_INTERNATIONAL6 = 140, + SDL_SCANCODE_INTERNATIONAL7 = 141, + SDL_SCANCODE_INTERNATIONAL8 = 142, + SDL_SCANCODE_INTERNATIONAL9 = 143, + SDL_SCANCODE_LANG1 = 144, /**< Hangul/English toggle */ + SDL_SCANCODE_LANG2 = 145, /**< Hanja conversion */ + SDL_SCANCODE_LANG3 = 146, /**< Katakana */ + SDL_SCANCODE_LANG4 = 147, /**< Hiragana */ + SDL_SCANCODE_LANG5 = 148, /**< Zenkaku/Hankaku */ + SDL_SCANCODE_LANG6 = 149, /**< reserved */ + SDL_SCANCODE_LANG7 = 150, /**< reserved */ + SDL_SCANCODE_LANG8 = 151, /**< reserved */ + SDL_SCANCODE_LANG9 = 152, /**< reserved */ + + SDL_SCANCODE_ALTERASE = 153, /**< Erase-Eaze */ + SDL_SCANCODE_SYSREQ = 154, + SDL_SCANCODE_CANCEL = 155, /**< AC Cancel */ + SDL_SCANCODE_CLEAR = 156, + SDL_SCANCODE_PRIOR = 157, + SDL_SCANCODE_RETURN2 = 158, + SDL_SCANCODE_SEPARATOR = 159, + SDL_SCANCODE_OUT = 160, + SDL_SCANCODE_OPER = 161, + SDL_SCANCODE_CLEARAGAIN = 162, + SDL_SCANCODE_CRSEL = 163, + SDL_SCANCODE_EXSEL = 164, + + SDL_SCANCODE_KP_00 = 176, + SDL_SCANCODE_KP_000 = 177, + SDL_SCANCODE_THOUSANDSSEPARATOR = 178, + SDL_SCANCODE_DECIMALSEPARATOR = 179, + SDL_SCANCODE_CURRENCYUNIT = 180, + SDL_SCANCODE_CURRENCYSUBUNIT = 181, + SDL_SCANCODE_KP_LEFTPAREN = 182, + SDL_SCANCODE_KP_RIGHTPAREN = 183, + SDL_SCANCODE_KP_LEFTBRACE = 184, + SDL_SCANCODE_KP_RIGHTBRACE = 185, + SDL_SCANCODE_KP_TAB = 186, + SDL_SCANCODE_KP_BACKSPACE = 187, + SDL_SCANCODE_KP_A = 188, + SDL_SCANCODE_KP_B = 189, + SDL_SCANCODE_KP_C = 190, + SDL_SCANCODE_KP_D = 191, + SDL_SCANCODE_KP_E = 192, + SDL_SCANCODE_KP_F = 193, + SDL_SCANCODE_KP_XOR = 194, + SDL_SCANCODE_KP_POWER = 195, + SDL_SCANCODE_KP_PERCENT = 196, + SDL_SCANCODE_KP_LESS = 197, + SDL_SCANCODE_KP_GREATER = 198, + SDL_SCANCODE_KP_AMPERSAND = 199, + SDL_SCANCODE_KP_DBLAMPERSAND = 200, + SDL_SCANCODE_KP_VERTICALBAR = 201, + SDL_SCANCODE_KP_DBLVERTICALBAR = 202, + SDL_SCANCODE_KP_COLON = 203, + SDL_SCANCODE_KP_HASH = 204, + SDL_SCANCODE_KP_SPACE = 205, + SDL_SCANCODE_KP_AT = 206, + SDL_SCANCODE_KP_EXCLAM = 207, + SDL_SCANCODE_KP_MEMSTORE = 208, + SDL_SCANCODE_KP_MEMRECALL = 209, + SDL_SCANCODE_KP_MEMCLEAR = 210, + SDL_SCANCODE_KP_MEMADD = 211, + SDL_SCANCODE_KP_MEMSUBTRACT = 212, + SDL_SCANCODE_KP_MEMMULTIPLY = 213, + SDL_SCANCODE_KP_MEMDIVIDE = 214, + SDL_SCANCODE_KP_PLUSMINUS = 215, + SDL_SCANCODE_KP_CLEAR = 216, + SDL_SCANCODE_KP_CLEARENTRY = 217, + SDL_SCANCODE_KP_BINARY = 218, + SDL_SCANCODE_KP_OCTAL = 219, + SDL_SCANCODE_KP_DECIMAL = 220, + SDL_SCANCODE_KP_HEXADECIMAL = 221, + + SDL_SCANCODE_LCTRL = 224, + SDL_SCANCODE_LSHIFT = 225, + SDL_SCANCODE_LALT = 226, /**< alt, option */ + SDL_SCANCODE_LGUI = 227, /**< windows, command (apple), meta */ + SDL_SCANCODE_RCTRL = 228, + SDL_SCANCODE_RSHIFT = 229, + SDL_SCANCODE_RALT = 230, /**< alt gr, option */ + SDL_SCANCODE_RGUI = 231, /**< windows, command (apple), meta */ + + SDL_SCANCODE_MODE = 257, /**< I'm not sure if this is really not covered + * by any of the above, but since there's a + * special KMOD_MODE for it I'm adding it here + */ + + /* @} *//* Usage page 0x07 */ + + /** + * \name Usage page 0x0C + * + * These values are mapped from usage page 0x0C (USB consumer page). + * See https://usb.org/sites/default/files/hut1_2.pdf + * + * There are way more keys in the spec than we can represent in the + * current scancode range, so pick the ones that commonly come up in + * real world usage. + */ + /* @{ */ + + SDL_SCANCODE_AUDIONEXT = 258, + SDL_SCANCODE_AUDIOPREV = 259, + SDL_SCANCODE_AUDIOSTOP = 260, + SDL_SCANCODE_AUDIOPLAY = 261, + SDL_SCANCODE_AUDIOMUTE = 262, + SDL_SCANCODE_MEDIASELECT = 263, + SDL_SCANCODE_WWW = 264, /**< AL Internet Browser */ + SDL_SCANCODE_MAIL = 265, + SDL_SCANCODE_CALCULATOR = 266, /**< AL Calculator */ + SDL_SCANCODE_COMPUTER = 267, + SDL_SCANCODE_AC_SEARCH = 268, /**< AC Search */ + SDL_SCANCODE_AC_HOME = 269, /**< AC Home */ + SDL_SCANCODE_AC_BACK = 270, /**< AC Back */ + SDL_SCANCODE_AC_FORWARD = 271, /**< AC Forward */ + SDL_SCANCODE_AC_STOP = 272, /**< AC Stop */ + SDL_SCANCODE_AC_REFRESH = 273, /**< AC Refresh */ + SDL_SCANCODE_AC_BOOKMARKS = 274, /**< AC Bookmarks */ + + /* @} *//* Usage page 0x0C */ + + /** + * \name Walther keys + * + * These are values that Christian Walther added (for mac keyboard?). + */ + /* @{ */ + + SDL_SCANCODE_BRIGHTNESSDOWN = 275, + SDL_SCANCODE_BRIGHTNESSUP = 276, + SDL_SCANCODE_DISPLAYSWITCH = 277, /**< display mirroring/dual display + switch, video mode switch */ + SDL_SCANCODE_KBDILLUMTOGGLE = 278, + SDL_SCANCODE_KBDILLUMDOWN = 279, + SDL_SCANCODE_KBDILLUMUP = 280, + SDL_SCANCODE_EJECT = 281, + SDL_SCANCODE_SLEEP = 282, /**< SC System Sleep */ + + SDL_SCANCODE_APP1 = 283, + SDL_SCANCODE_APP2 = 284, + + /* @} *//* Walther keys */ + + /** + * \name Usage page 0x0C (additional media keys) + * + * These values are mapped from usage page 0x0C (USB consumer page). + */ + /* @{ */ + + SDL_SCANCODE_AUDIOREWIND = 285, + SDL_SCANCODE_AUDIOFASTFORWARD = 286, + + /* @} *//* Usage page 0x0C (additional media keys) */ + + /** + * \name Mobile keys + * + * These are values that are often used on mobile phones. + */ + /* @{ */ + + SDL_SCANCODE_SOFTLEFT = 287, /**< Usually situated below the display on phones and + used as a multi-function feature key for selecting + a software defined function shown on the bottom left + of the display. */ + SDL_SCANCODE_SOFTRIGHT = 288, /**< Usually situated below the display on phones and + used as a multi-function feature key for selecting + a software defined function shown on the bottom right + of the display. */ + SDL_SCANCODE_CALL = 289, /**< Used for accepting phone calls. */ + SDL_SCANCODE_ENDCALL = 290, /**< Used for rejecting phone calls. */ + + /* @} *//* Mobile keys */ + + /* Add any other keys here. */ + + SDL_NUM_SCANCODES = 512 /**< not a key, just marks the number of scancodes + for array bounds */ +} SDL_Scancode; + +#endif /* SDL_scancode_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/third_party/tlRender-install-Release/include/SDL2/SDL_sensor.h b/third_party/tlRender-install-Release/include/SDL2/SDL_sensor.h new file mode 100644 index 00000000..d4b1c511 --- /dev/null +++ b/third_party/tlRender-install-Release/include/SDL2/SDL_sensor.h @@ -0,0 +1,329 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2025 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +/** + * # CategorySensor + * + * Include file for SDL sensor event handling + */ + +#ifndef SDL_sensor_h_ +#define SDL_sensor_h_ + +#include "SDL_stdinc.h" +#include "SDL_error.h" + +#include "begin_code.h" +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +/* *INDENT-OFF* */ +extern "C" { +/* *INDENT-ON* */ +#endif + +/** + * \brief SDL_sensor.h + * + * In order to use these functions, SDL_Init() must have been called + * with the SDL_INIT_SENSOR flag. This causes SDL to scan the system + * for sensors, and load appropriate drivers. + */ + +struct _SDL_Sensor; +typedef struct _SDL_Sensor SDL_Sensor; + +/** + * This is a unique ID for a sensor for the time it is connected to the + * system, and is never reused for the lifetime of the application. + * + * The ID value starts at 0 and increments from there. The value -1 is an + * invalid ID. + */ +typedef Sint32 SDL_SensorID; + +/** + * The different sensors defined by SDL. + * + * Additional sensors may be available, using platform dependent semantics. + * + * Here are the additional Android sensors: + * + * https://developer.android.com/reference/android/hardware/SensorEvent.html#values + * + * Accelerometer sensor notes: + * + * The accelerometer returns the current acceleration in SI meters per second + * squared. This measurement includes the force of gravity, so a device at + * rest will have an value of SDL_STANDARD_GRAVITY away from the center of the + * earth, which is a positive Y value. + * + * - `values[0]`: Acceleration on the x axis + * - `values[1]`: Acceleration on the y axis + * - `values[2]`: Acceleration on the z axis + * + * For phones and tablets held in natural orientation and game controllers + * held in front of you, the axes are defined as follows: + * + * - -X ... +X : left ... right + * - -Y ... +Y : bottom ... top + * - -Z ... +Z : farther ... closer + * + * The accelerometer axis data is not changed when the device is rotated. + * + * Gyroscope sensor notes: + * + * The gyroscope returns the current rate of rotation in radians per second. + * The rotation is positive in the counter-clockwise direction. That is, an + * observer looking from a positive location on one of the axes would see + * positive rotation on that axis when it appeared to be rotating + * counter-clockwise. + * + * - `values[0]`: Angular speed around the x axis (pitch) + * - `values[1]`: Angular speed around the y axis (yaw) + * - `values[2]`: Angular speed around the z axis (roll) + * + * For phones and tablets held in natural orientation and game controllers + * held in front of you, the axes are defined as follows: + * + * - -X ... +X : left ... right + * - -Y ... +Y : bottom ... top + * - -Z ... +Z : farther ... closer + * + * The gyroscope axis data is not changed when the device is rotated. + * + * \sa SDL_GetDisplayOrientation + */ +typedef enum SDL_SensorType +{ + SDL_SENSOR_INVALID = -1, /**< Returned for an invalid sensor */ + SDL_SENSOR_UNKNOWN, /**< Unknown sensor type */ + SDL_SENSOR_ACCEL, /**< Accelerometer */ + SDL_SENSOR_GYRO, /**< Gyroscope */ + SDL_SENSOR_ACCEL_L, /**< Accelerometer for left Joy-Con controller and Wii nunchuk */ + SDL_SENSOR_GYRO_L, /**< Gyroscope for left Joy-Con controller */ + SDL_SENSOR_ACCEL_R, /**< Accelerometer for right Joy-Con controller */ + SDL_SENSOR_GYRO_R /**< Gyroscope for right Joy-Con controller */ +} SDL_SensorType; + +/** + * A constant to represent standard gravity for accelerometer sensors. + * + * The accelerometer returns the current acceleration in SI meters per second + * squared. This measurement includes the force of gravity, so a device at + * rest will have an value of SDL_STANDARD_GRAVITY away from the center of the + * earth, which is a positive Y value. + */ +#define SDL_STANDARD_GRAVITY 9.80665f + +/* Function prototypes */ + +/** + * Locking for multi-threaded access to the sensor API + * + * If you are using the sensor API or handling events from multiple threads + * you should use these locking functions to protect access to the sensors. + * + * In particular, you are guaranteed that the sensor list won't change, so the + * API functions that take a sensor index will be valid, and sensor events + * will not be delivered. + * + * \since This function is available since SDL 2.0.14. + */ +extern DECLSPEC void SDLCALL SDL_LockSensors(void); +extern DECLSPEC void SDLCALL SDL_UnlockSensors(void); + +/** + * Count the number of sensors attached to the system right now. + * + * \returns the number of sensors detected. + * + * \since This function is available since SDL 2.0.9. + */ +extern DECLSPEC int SDLCALL SDL_NumSensors(void); + +/** + * Get the implementation dependent name of a sensor. + * + * \param device_index The sensor to obtain name from. + * \returns the sensor name, or NULL if `device_index` is out of range. + * + * \since This function is available since SDL 2.0.9. + */ +extern DECLSPEC const char *SDLCALL SDL_SensorGetDeviceName(int device_index); + +/** + * Get the type of a sensor. + * + * \param device_index The sensor to get the type from. + * \returns the SDL_SensorType, or `SDL_SENSOR_INVALID` if `device_index` is + * out of range. + * + * \since This function is available since SDL 2.0.9. + */ +extern DECLSPEC SDL_SensorType SDLCALL SDL_SensorGetDeviceType(int device_index); + +/** + * Get the platform dependent type of a sensor. + * + * \param device_index The sensor to check. + * \returns the sensor platform dependent type, or -1 if `device_index` is out + * of range. + * + * \since This function is available since SDL 2.0.9. + */ +extern DECLSPEC int SDLCALL SDL_SensorGetDeviceNonPortableType(int device_index); + +/** + * Get the instance ID of a sensor. + * + * \param device_index The sensor to get instance id from. + * \returns the sensor instance ID, or -1 if `device_index` is out of range. + * + * \since This function is available since SDL 2.0.9. + */ +extern DECLSPEC SDL_SensorID SDLCALL SDL_SensorGetDeviceInstanceID(int device_index); + +/** + * Open a sensor for use. + * + * \param device_index The sensor to open. + * \returns an SDL_Sensor sensor object, or NULL if an error occurred. + * + * \since This function is available since SDL 2.0.9. + */ +extern DECLSPEC SDL_Sensor *SDLCALL SDL_SensorOpen(int device_index); + +/** + * Return the SDL_Sensor associated with an instance id. + * + * \param instance_id The sensor from instance id. + * \returns an SDL_Sensor object. + * + * \since This function is available since SDL 2.0.9. + */ +extern DECLSPEC SDL_Sensor *SDLCALL SDL_SensorFromInstanceID(SDL_SensorID instance_id); + +/** + * Get the implementation dependent name of a sensor + * + * \param sensor The SDL_Sensor object. + * \returns the sensor name, or NULL if `sensor` is NULL. + * + * \since This function is available since SDL 2.0.9. + */ +extern DECLSPEC const char *SDLCALL SDL_SensorGetName(SDL_Sensor *sensor); + +/** + * Get the type of a sensor. + * + * \param sensor The SDL_Sensor object to inspect. + * \returns the SDL_SensorType type, or `SDL_SENSOR_INVALID` if `sensor` is + * NULL. + * + * \since This function is available since SDL 2.0.9. + */ +extern DECLSPEC SDL_SensorType SDLCALL SDL_SensorGetType(SDL_Sensor *sensor); + +/** + * Get the platform dependent type of a sensor. + * + * \param sensor The SDL_Sensor object to inspect. + * \returns the sensor platform dependent type, or -1 if `sensor` is NULL. + * + * \since This function is available since SDL 2.0.9. + */ +extern DECLSPEC int SDLCALL SDL_SensorGetNonPortableType(SDL_Sensor *sensor); + +/** + * Get the instance ID of a sensor. + * + * \param sensor The SDL_Sensor object to inspect. + * \returns the sensor instance ID, or -1 if `sensor` is NULL. + * + * \since This function is available since SDL 2.0.9. + */ +extern DECLSPEC SDL_SensorID SDLCALL SDL_SensorGetInstanceID(SDL_Sensor *sensor); + +/** + * Get the current state of an opened sensor. + * + * The number of values and interpretation of the data is sensor dependent. + * + * \param sensor The SDL_Sensor object to query. + * \param data A pointer filled with the current sensor state. + * \param num_values The number of values to write to data. + * \returns 0 or -1 if an error occurred. + * + * \since This function is available since SDL 2.0.9. + */ +extern DECLSPEC int SDLCALL SDL_SensorGetData(SDL_Sensor *sensor, float *data, int num_values); + +/** + * Get the current state of an opened sensor with the timestamp of the last + * update. + * + * The number of values and interpretation of the data is sensor dependent. + * + * \param sensor The SDL_Sensor object to query. + * \param timestamp A pointer filled with the timestamp in microseconds of the + * current sensor reading if available, or 0 if not. + * \param data A pointer filled with the current sensor state. + * \param num_values The number of values to write to data. + * \returns 0 or -1 if an error occurred. + * + * \since This function is available since SDL 2.26.0. + */ +extern DECLSPEC int SDLCALL SDL_SensorGetDataWithTimestamp(SDL_Sensor *sensor, Uint64 *timestamp, float *data, int num_values); + +/** + * Close a sensor previously opened with SDL_SensorOpen(). + * + * \param sensor The SDL_Sensor object to close. + * + * \since This function is available since SDL 2.0.9. + */ +extern DECLSPEC void SDLCALL SDL_SensorClose(SDL_Sensor *sensor); + +/** + * Update the current state of the open sensors. + * + * This is called automatically by the event loop if sensor events are + * enabled. + * + * This needs to be called from the thread that initialized the sensor + * subsystem. + * + * \since This function is available since SDL 2.0.9. + */ +extern DECLSPEC void SDLCALL SDL_SensorUpdate(void); + + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +/* *INDENT-OFF* */ +} +/* *INDENT-ON* */ +#endif +#include "close_code.h" + +#endif /* SDL_sensor_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/third_party/tlRender-install-Release/include/SDL2/SDL_shape.h b/third_party/tlRender-install-Release/include/SDL2/SDL_shape.h new file mode 100644 index 00000000..d3560845 --- /dev/null +++ b/third_party/tlRender-install-Release/include/SDL2/SDL_shape.h @@ -0,0 +1,155 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2025 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +#ifndef SDL_shape_h_ +#define SDL_shape_h_ + +#include "SDL_stdinc.h" +#include "SDL_pixels.h" +#include "SDL_rect.h" +#include "SDL_surface.h" +#include "SDL_video.h" + +#include "begin_code.h" +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/** \file SDL_shape.h + * + * Header file for the shaped window API. + */ + +#define SDL_NONSHAPEABLE_WINDOW -1 +#define SDL_INVALID_SHAPE_ARGUMENT -2 +#define SDL_WINDOW_LACKS_SHAPE -3 + +/** + * Create a window that can be shaped with the specified position, dimensions, + * and flags. + * + * \param title The title of the window, in UTF-8 encoding. + * \param x The x position of the window, SDL_WINDOWPOS_CENTERED, or + * SDL_WINDOWPOS_UNDEFINED. + * \param y The y position of the window, SDL_WINDOWPOS_CENTERED, or + * SDL_WINDOWPOS_UNDEFINED. + * \param w The width of the window. + * \param h The height of the window. + * \param flags The flags for the window, a mask of SDL_WINDOW_BORDERLESS with + * any of the following: SDL_WINDOW_OPENGL, + * SDL_WINDOW_INPUT_GRABBED, SDL_WINDOW_HIDDEN, + * SDL_WINDOW_RESIZABLE, SDL_WINDOW_MAXIMIZED, + * SDL_WINDOW_MINIMIZED, SDL_WINDOW_BORDERLESS is always set, and + * SDL_WINDOW_FULLSCREEN is always unset. + * \return the window created, or NULL if window creation failed. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_DestroyWindow + */ +extern DECLSPEC SDL_Window * SDLCALL SDL_CreateShapedWindow(const char *title,unsigned int x,unsigned int y,unsigned int w,unsigned int h,Uint32 flags); + +/** + * Return whether the given window is a shaped window. + * + * \param window The window to query for being shaped. + * \return SDL_TRUE if the window is a window that can be shaped, SDL_FALSE if + * the window is unshaped or NULL. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CreateShapedWindow + */ +extern DECLSPEC SDL_bool SDLCALL SDL_IsShapedWindow(const SDL_Window *window); + +/** \brief An enum denoting the specific type of contents present in an SDL_WindowShapeParams union. */ +typedef enum { + /** \brief The default mode, a binarized alpha cutoff of 1. */ + ShapeModeDefault, + /** \brief A binarized alpha cutoff with a given integer value. */ + ShapeModeBinarizeAlpha, + /** \brief A binarized alpha cutoff with a given integer value, but with the opposite comparison. */ + ShapeModeReverseBinarizeAlpha, + /** \brief A color key is applied. */ + ShapeModeColorKey +} WindowShapeMode; + +#define SDL_SHAPEMODEALPHA(mode) (mode == ShapeModeDefault || mode == ShapeModeBinarizeAlpha || mode == ShapeModeReverseBinarizeAlpha) + +/** \brief A union containing parameters for shaped windows. */ +typedef union { + /** \brief A cutoff alpha value for binarization of the window shape's alpha channel. */ + Uint8 binarizationCutoff; + SDL_Color colorKey; +} SDL_WindowShapeParams; + +/** \brief A struct that tags the SDL_WindowShapeParams union with an enum describing the type of its contents. */ +typedef struct SDL_WindowShapeMode { + /** \brief The mode of these window-shape parameters. */ + WindowShapeMode mode; + /** \brief Window-shape parameters. */ + SDL_WindowShapeParams parameters; +} SDL_WindowShapeMode; + +/** + * Set the shape and parameters of a shaped window. + * + * \param window The shaped window whose parameters should be set. + * \param shape A surface encoding the desired shape for the window. + * \param shape_mode The parameters to set for the shaped window. + * \return 0 on success, SDL_INVALID_SHAPE_ARGUMENT on an invalid shape + * argument, or SDL_NONSHAPEABLE_WINDOW if the SDL_Window given does + * not reference a valid shaped window. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_WindowShapeMode + * \sa SDL_GetShapedWindowMode + */ +extern DECLSPEC int SDLCALL SDL_SetWindowShape(SDL_Window *window,SDL_Surface *shape,SDL_WindowShapeMode *shape_mode); + +/** + * Get the shape parameters of a shaped window. + * + * \param window The shaped window whose parameters should be retrieved. + * \param shape_mode An empty shape-mode structure to fill, or NULL to check + * whether the window has a shape. + * \return 0 if the window has a shape and, provided shape_mode was not NULL, + * shape_mode has been filled with the mode data, + * SDL_NONSHAPEABLE_WINDOW if the SDL_Window given is not a shaped + * window, or SDL_WINDOW_LACKS_SHAPE if the SDL_Window given is a + * shapeable window currently lacking a shape. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_WindowShapeMode + * \sa SDL_SetWindowShape + */ +extern DECLSPEC int SDLCALL SDL_GetShapedWindowMode(SDL_Window *window,SDL_WindowShapeMode *shape_mode); + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include "close_code.h" + +#endif /* SDL_shape_h_ */ diff --git a/third_party/tlRender-install-Release/include/SDL2/SDL_stdinc.h b/third_party/tlRender-install-Release/include/SDL2/SDL_stdinc.h new file mode 100644 index 00000000..1854698b --- /dev/null +++ b/third_party/tlRender-install-Release/include/SDL2/SDL_stdinc.h @@ -0,0 +1,873 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2025 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +/* WIKI CATEGORY: StdInc */ + +/** + * # CategoryStdInc + * + * This is a general header that includes C language support. + */ + +#ifndef SDL_stdinc_h_ +#define SDL_stdinc_h_ + +#include "SDL_config.h" + +#ifdef HAVE_SYS_TYPES_H +#include +#endif +#ifdef HAVE_STDIO_H +#include +#endif +#if defined(STDC_HEADERS) +# include +# include +# include +#else +# if defined(HAVE_STDLIB_H) +# include +# elif defined(HAVE_MALLOC_H) +# include +# endif +# if defined(HAVE_STDDEF_H) +# include +# endif +# if defined(HAVE_STDARG_H) +# include +# endif +#endif +#ifdef HAVE_STRING_H +# if !defined(STDC_HEADERS) && defined(HAVE_MEMORY_H) +# include +# endif +# include +#endif +#ifdef HAVE_STRINGS_H +# include +#endif +#ifdef HAVE_WCHAR_H +# include +#endif +#if defined(HAVE_INTTYPES_H) +# include +#elif defined(HAVE_STDINT_H) +# include +#endif +#ifdef HAVE_CTYPE_H +# include +#endif +#ifdef HAVE_MATH_H +# if defined(_MSC_VER) +/* Defining _USE_MATH_DEFINES is required to get M_PI to be defined on + Visual Studio. See http://msdn.microsoft.com/en-us/library/4hwaceh6.aspx + for more information. +*/ +# ifndef _USE_MATH_DEFINES +# define _USE_MATH_DEFINES +# endif +# endif +# include +#endif +#ifdef HAVE_FLOAT_H +# include +#endif +#if defined(HAVE_ALLOCA) && !defined(alloca) +# if defined(HAVE_ALLOCA_H) +# include +# elif defined(__GNUC__) +# define alloca __builtin_alloca +# elif defined(_MSC_VER) +# include +# define alloca _alloca +# elif defined(__WATCOMC__) +# include +# elif defined(__BORLANDC__) +# include +# elif defined(__DMC__) +# include +# elif defined(__AIX__) +#pragma alloca +# elif defined(__MRC__) +void *alloca(unsigned); +# else +void *alloca(size_t); +# endif +#endif + +#ifdef SIZE_MAX +# define SDL_SIZE_MAX SIZE_MAX +#else +# define SDL_SIZE_MAX ((size_t) -1) +#endif + +/** + * Check if the compiler supports a given builtin. + * Supported by virtually all clang versions and recent gcc. Use this + * instead of checking the clang version if possible. + */ +#ifdef __has_builtin +#define _SDL_HAS_BUILTIN(x) __has_builtin(x) +#else +#define _SDL_HAS_BUILTIN(x) 0 +#endif + +/** + * The number of elements in an array. + */ +#define SDL_arraysize(array) (sizeof(array)/sizeof(array[0])) +#define SDL_TABLESIZE(table) SDL_arraysize(table) + +/** + * Macro useful for building other macros with strings in them + * + * e.g: + * + * ```c + * #define LOG_ERROR(X) OutputDebugString(SDL_STRINGIFY_ARG(__FUNCTION__) ": " X "\n") + * ``` + */ +#define SDL_STRINGIFY_ARG(arg) #arg + +/** + * \name Cast operators + * + * Use proper C++ casts when compiled as C++ to be compatible with the option + * -Wold-style-cast of GCC (and -Werror=old-style-cast in GCC 4.2 and above). + */ +/* @{ */ +#ifdef __cplusplus +#define SDL_reinterpret_cast(type, expression) reinterpret_cast(expression) +#define SDL_static_cast(type, expression) static_cast(expression) +#define SDL_const_cast(type, expression) const_cast(expression) +#else +#define SDL_reinterpret_cast(type, expression) ((type)(expression)) +#define SDL_static_cast(type, expression) ((type)(expression)) +#define SDL_const_cast(type, expression) ((type)(expression)) +#endif +/* @} *//* Cast operators */ + +/* Define a four character code as a Uint32 */ +#define SDL_FOURCC(A, B, C, D) \ + ((SDL_static_cast(Uint32, SDL_static_cast(Uint8, (A))) << 0) | \ + (SDL_static_cast(Uint32, SDL_static_cast(Uint8, (B))) << 8) | \ + (SDL_static_cast(Uint32, SDL_static_cast(Uint8, (C))) << 16) | \ + (SDL_static_cast(Uint32, SDL_static_cast(Uint8, (D))) << 24)) + +/** + * \name Basic data types + */ +/* @{ */ + +#ifdef __CC_ARM +/* ARM's compiler throws warnings if we use an enum: like "SDL_bool x = a < b;" */ +#define SDL_FALSE 0 +#define SDL_TRUE 1 +typedef int SDL_bool; +#else +typedef enum +{ + SDL_FALSE = 0, + SDL_TRUE = 1 +} SDL_bool; +#endif + +/** + * A signed 8-bit integer type. + */ +typedef int8_t Sint8; +#define SDL_MAX_SINT8 ((Sint8)0x7F) /* 127 */ +#define SDL_MIN_SINT8 ((Sint8)(~0x7F)) /* -128 */ + +/** + * An unsigned 8-bit integer type. + */ +typedef uint8_t Uint8; +#define SDL_MAX_UINT8 ((Uint8)0xFF) /* 255 */ +#define SDL_MIN_UINT8 ((Uint8)0x00) /* 0 */ + +/** + * A signed 16-bit integer type. + */ +typedef int16_t Sint16; +#define SDL_MAX_SINT16 ((Sint16)0x7FFF) /* 32767 */ +#define SDL_MIN_SINT16 ((Sint16)(~0x7FFF)) /* -32768 */ + +/** + * An unsigned 16-bit integer type. + */ +typedef uint16_t Uint16; +#define SDL_MAX_UINT16 ((Uint16)0xFFFF) /* 65535 */ +#define SDL_MIN_UINT16 ((Uint16)0x0000) /* 0 */ + +/** + * A signed 32-bit integer type. + */ +typedef int32_t Sint32; +#define SDL_MAX_SINT32 ((Sint32)0x7FFFFFFF) /* 2147483647 */ +#define SDL_MIN_SINT32 ((Sint32)(~0x7FFFFFFF)) /* -2147483648 */ + +/** + * An unsigned 32-bit integer type. + */ +typedef uint32_t Uint32; +#define SDL_MAX_UINT32 ((Uint32)0xFFFFFFFFu) /* 4294967295 */ +#define SDL_MIN_UINT32 ((Uint32)0x00000000) /* 0 */ + +/** + * A signed 64-bit integer type. + */ +typedef int64_t Sint64; +#define SDL_MAX_SINT64 ((Sint64)0x7FFFFFFFFFFFFFFFll) /* 9223372036854775807 */ +#define SDL_MIN_SINT64 ((Sint64)(~0x7FFFFFFFFFFFFFFFll)) /* -9223372036854775808 */ + +/** + * An unsigned 64-bit integer type. + */ +typedef uint64_t Uint64; +#define SDL_MAX_UINT64 ((Uint64)0xFFFFFFFFFFFFFFFFull) /* 18446744073709551615 */ +#define SDL_MIN_UINT64 ((Uint64)(0x0000000000000000ull)) /* 0 */ + + +/* @} *//* Basic data types */ + +/** + * \name Floating-point constants + */ +/* @{ */ + +#ifdef FLT_EPSILON +#define SDL_FLT_EPSILON FLT_EPSILON +#else +#define SDL_FLT_EPSILON 1.1920928955078125e-07F /* 0x0.000002p0 */ +#endif + +/* @} *//* Floating-point constants */ + +/* Make sure we have macros for printing width-based integers. + * should define these but this is not true all platforms. + * (for example win32) */ +#ifndef SDL_PRIs64 +#if defined(__WIN32__) || defined(__GDK__) +#define SDL_PRIs64 "I64d" +#elif defined(PRId64) +#define SDL_PRIs64 PRId64 +#elif defined(__LP64__) && !defined(__APPLE__) && !defined(__EMSCRIPTEN__) +#define SDL_PRIs64 "ld" +#else +#define SDL_PRIs64 "lld" +#endif +#endif +#ifndef SDL_PRIu64 +#if defined(__WIN32__) || defined(__GDK__) +#define SDL_PRIu64 "I64u" +#elif defined(PRIu64) +#define SDL_PRIu64 PRIu64 +#elif defined(__LP64__) && !defined(__APPLE__) +#define SDL_PRIu64 "lu" +#else +#define SDL_PRIu64 "llu" +#endif +#endif +#ifndef SDL_PRIx64 +#if defined(__WIN32__) || defined(__GDK__) +#define SDL_PRIx64 "I64x" +#elif defined(PRIx64) +#define SDL_PRIx64 PRIx64 +#elif defined(__LP64__) && !defined(__APPLE__) +#define SDL_PRIx64 "lx" +#else +#define SDL_PRIx64 "llx" +#endif +#endif +#ifndef SDL_PRIX64 +#if defined(__WIN32__) || defined(__GDK__) +#define SDL_PRIX64 "I64X" +#elif defined(PRIX64) +#define SDL_PRIX64 PRIX64 +#elif defined(__LP64__) && !defined(__APPLE__) +#define SDL_PRIX64 "lX" +#else +#define SDL_PRIX64 "llX" +#endif +#endif +#ifndef SDL_PRIs32 +#ifdef PRId32 +#define SDL_PRIs32 PRId32 +#else +#define SDL_PRIs32 "d" +#endif +#endif +#ifndef SDL_PRIu32 +#ifdef PRIu32 +#define SDL_PRIu32 PRIu32 +#else +#define SDL_PRIu32 "u" +#endif +#endif +#ifndef SDL_PRIx32 +#ifdef PRIx32 +#define SDL_PRIx32 PRIx32 +#else +#define SDL_PRIx32 "x" +#endif +#endif +#ifndef SDL_PRIX32 +#ifdef PRIX32 +#define SDL_PRIX32 PRIX32 +#else +#define SDL_PRIX32 "X" +#endif +#endif + +/* Annotations to help code analysis tools */ +#ifdef SDL_DISABLE_ANALYZE_MACROS +#define SDL_IN_BYTECAP(x) +#define SDL_INOUT_Z_CAP(x) +#define SDL_OUT_Z_CAP(x) +#define SDL_OUT_CAP(x) +#define SDL_OUT_BYTECAP(x) +#define SDL_OUT_Z_BYTECAP(x) +#define SDL_PRINTF_FORMAT_STRING +#define SDL_SCANF_FORMAT_STRING +#define SDL_PRINTF_VARARG_FUNC( fmtargnumber ) +#define SDL_PRINTF_VARARG_FUNCV( fmtargnumber ) +#define SDL_SCANF_VARARG_FUNC( fmtargnumber ) +#define SDL_SCANF_VARARG_FUNCV( fmtargnumber ) +#else +#if defined(_MSC_VER) && (_MSC_VER >= 1600) /* VS 2010 and above */ +#include + +#define SDL_IN_BYTECAP(x) _In_bytecount_(x) +#define SDL_INOUT_Z_CAP(x) _Inout_z_cap_(x) +#define SDL_OUT_Z_CAP(x) _Out_z_cap_(x) +#define SDL_OUT_CAP(x) _Out_cap_(x) +#define SDL_OUT_BYTECAP(x) _Out_bytecap_(x) +#define SDL_OUT_Z_BYTECAP(x) _Out_z_bytecap_(x) + +#define SDL_PRINTF_FORMAT_STRING _Printf_format_string_ +#define SDL_SCANF_FORMAT_STRING _Scanf_format_string_impl_ +#else +#define SDL_IN_BYTECAP(x) +#define SDL_INOUT_Z_CAP(x) +#define SDL_OUT_Z_CAP(x) +#define SDL_OUT_CAP(x) +#define SDL_OUT_BYTECAP(x) +#define SDL_OUT_Z_BYTECAP(x) +#define SDL_PRINTF_FORMAT_STRING +#define SDL_SCANF_FORMAT_STRING +#endif +#if defined(__GNUC__) +#define SDL_PRINTF_VARARG_FUNC( fmtargnumber ) __attribute__ (( format( __printf__, fmtargnumber, fmtargnumber+1 ))) +#define SDL_PRINTF_VARARG_FUNCV( fmtargnumber ) __attribute__(( format( __printf__, fmtargnumber, 0 ))) +#define SDL_SCANF_VARARG_FUNC( fmtargnumber ) __attribute__ (( format( __scanf__, fmtargnumber, fmtargnumber+1 ))) +#define SDL_SCANF_VARARG_FUNCV( fmtargnumber ) __attribute__(( format( __scanf__, fmtargnumber, 0 ))) +#else +#define SDL_PRINTF_VARARG_FUNC( fmtargnumber ) +#define SDL_PRINTF_VARARG_FUNCV( fmtargnumber ) +#define SDL_SCANF_VARARG_FUNC( fmtargnumber ) +#define SDL_SCANF_VARARG_FUNCV( fmtargnumber ) +#endif +#endif /* SDL_DISABLE_ANALYZE_MACROS */ + +#ifndef SDL_COMPILE_TIME_ASSERT +#if defined(__cplusplus) +/* Keep C++ case alone: Some versions of gcc will define __STDC_VERSION__ even when compiling in C++ mode. */ +#if (__cplusplus >= 201103L) +#define SDL_COMPILE_TIME_ASSERT(name, x) static_assert(x, #x) +#endif +#elif defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 202311L) +#define SDL_COMPILE_TIME_ASSERT(name, x) static_assert(x, #x) +#elif defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 201112L) +#define SDL_COMPILE_TIME_ASSERT(name, x) _Static_assert(x, #x) +#endif +#endif /* !SDL_COMPILE_TIME_ASSERT */ + +#ifndef SDL_COMPILE_TIME_ASSERT +/* universal, but may trigger -Wunused-local-typedefs */ +#define SDL_COMPILE_TIME_ASSERT(name, x) \ + typedef int SDL_compile_time_assert_ ## name[(x) * 2 - 1] +#endif + +/** \cond */ +#ifndef DOXYGEN_SHOULD_IGNORE_THIS +SDL_COMPILE_TIME_ASSERT(uint8, sizeof(Uint8) == 1); +SDL_COMPILE_TIME_ASSERT(sint8, sizeof(Sint8) == 1); +SDL_COMPILE_TIME_ASSERT(uint16, sizeof(Uint16) == 2); +SDL_COMPILE_TIME_ASSERT(sint16, sizeof(Sint16) == 2); +SDL_COMPILE_TIME_ASSERT(uint32, sizeof(Uint32) == 4); +SDL_COMPILE_TIME_ASSERT(sint32, sizeof(Sint32) == 4); +SDL_COMPILE_TIME_ASSERT(uint64, sizeof(Uint64) == 8); +SDL_COMPILE_TIME_ASSERT(sint64, sizeof(Sint64) == 8); +#endif /* DOXYGEN_SHOULD_IGNORE_THIS */ +/** \endcond */ + +/* Check to make sure enums are the size of ints, for structure packing. + For both Watcom C/C++ and Borland C/C++ the compiler option that makes + enums having the size of an int must be enabled. + This is "-b" for Borland C/C++ and "-ei" for Watcom C/C++ (v11). +*/ + +/** \cond */ +#ifndef DOXYGEN_SHOULD_IGNORE_THIS +#if !defined(__VITA__) && !defined(__3DS__) +/* TODO: include/SDL_stdinc.h:422: error: size of array 'SDL_dummy_enum' is negative */ +typedef enum +{ + DUMMY_ENUM_VALUE +} SDL_DUMMY_ENUM; + +SDL_COMPILE_TIME_ASSERT(enum, sizeof(SDL_DUMMY_ENUM) == sizeof(int)); +#endif +#endif /* DOXYGEN_SHOULD_IGNORE_THIS */ +/** \endcond */ + +#include "begin_code.h" +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef HAVE_ALLOCA +#define SDL_stack_alloc(type, count) (type*)alloca(sizeof(type)*(count)) +#define SDL_stack_free(data) +#else +#define SDL_stack_alloc(type, count) (type*)SDL_malloc(sizeof(type)*(count)) +#define SDL_stack_free(data) SDL_free(data) +#endif + +extern DECLSPEC void *SDLCALL SDL_malloc(size_t size); +extern DECLSPEC void *SDLCALL SDL_calloc(size_t nmemb, size_t size); +extern DECLSPEC void *SDLCALL SDL_realloc(void *mem, size_t size); +extern DECLSPEC void SDLCALL SDL_free(void *mem); + +typedef void *(SDLCALL *SDL_malloc_func)(size_t size); +typedef void *(SDLCALL *SDL_calloc_func)(size_t nmemb, size_t size); +typedef void *(SDLCALL *SDL_realloc_func)(void *mem, size_t size); +typedef void (SDLCALL *SDL_free_func)(void *mem); + +/** + * Get the original set of SDL memory functions + * + * \since This function is available since SDL 2.24.0. + */ +extern DECLSPEC void SDLCALL SDL_GetOriginalMemoryFunctions(SDL_malloc_func *malloc_func, + SDL_calloc_func *calloc_func, + SDL_realloc_func *realloc_func, + SDL_free_func *free_func); + +/** + * Get the current set of SDL memory functions + * + * \since This function is available since SDL 2.0.7. + */ +extern DECLSPEC void SDLCALL SDL_GetMemoryFunctions(SDL_malloc_func *malloc_func, + SDL_calloc_func *calloc_func, + SDL_realloc_func *realloc_func, + SDL_free_func *free_func); + +/** + * Replace SDL's memory allocation functions with a custom set + * + * \since This function is available since SDL 2.0.7. + */ +extern DECLSPEC int SDLCALL SDL_SetMemoryFunctions(SDL_malloc_func malloc_func, + SDL_calloc_func calloc_func, + SDL_realloc_func realloc_func, + SDL_free_func free_func); + +/** + * Get the number of outstanding (unfreed) allocations + * + * \since This function is available since SDL 2.0.7. + */ +extern DECLSPEC int SDLCALL SDL_GetNumAllocations(void); + +extern DECLSPEC char *SDLCALL SDL_getenv(const char *name); +extern DECLSPEC int SDLCALL SDL_setenv(const char *name, const char *value, int overwrite); + +typedef int (SDLCALL *SDL_CompareCallback)(const void *, const void *); +extern DECLSPEC void SDLCALL SDL_qsort(void *base, size_t nmemb, size_t size, SDL_CompareCallback compare); +extern DECLSPEC void * SDLCALL SDL_bsearch(const void *key, const void *base, size_t nmemb, size_t size, SDL_CompareCallback compare); + +extern DECLSPEC int SDLCALL SDL_abs(int x); + +/* NOTE: these double-evaluate their arguments, so you should never have side effects in the parameters */ +#define SDL_min(x, y) (((x) < (y)) ? (x) : (y)) +#define SDL_max(x, y) (((x) > (y)) ? (x) : (y)) +#define SDL_clamp(x, a, b) (((x) < (a)) ? (a) : (((x) > (b)) ? (b) : (x))) + +extern DECLSPEC int SDLCALL SDL_isalpha(int x); +extern DECLSPEC int SDLCALL SDL_isalnum(int x); +extern DECLSPEC int SDLCALL SDL_isblank(int x); +extern DECLSPEC int SDLCALL SDL_iscntrl(int x); +extern DECLSPEC int SDLCALL SDL_isdigit(int x); +extern DECLSPEC int SDLCALL SDL_isxdigit(int x); +extern DECLSPEC int SDLCALL SDL_ispunct(int x); +extern DECLSPEC int SDLCALL SDL_isspace(int x); +extern DECLSPEC int SDLCALL SDL_isupper(int x); +extern DECLSPEC int SDLCALL SDL_islower(int x); +extern DECLSPEC int SDLCALL SDL_isprint(int x); +extern DECLSPEC int SDLCALL SDL_isgraph(int x); +extern DECLSPEC int SDLCALL SDL_toupper(int x); +extern DECLSPEC int SDLCALL SDL_tolower(int x); + +extern DECLSPEC Uint16 SDLCALL SDL_crc16(Uint16 crc, const void *data, size_t len); +extern DECLSPEC Uint32 SDLCALL SDL_crc32(Uint32 crc, const void *data, size_t len); + +extern DECLSPEC void *SDLCALL SDL_memset(SDL_OUT_BYTECAP(len) void *dst, int c, size_t len); + +/* Some safe(r) macros for zero'ing structures... */ +#define SDL_zero(x) SDL_memset(&(x), 0, sizeof((x))) +#define SDL_zerop(x) SDL_memset((x), 0, sizeof(*(x))) +#define SDL_zeroa(x) SDL_memset((x), 0, sizeof((x))) + +#define SDL_copyp(dst, src) \ + { SDL_COMPILE_TIME_ASSERT(SDL_copyp, sizeof (*(dst)) == sizeof (*(src))); } \ + SDL_memcpy((dst), (src), sizeof (*(src))) + + +/* Note that memset() is a byte assignment and this is a 32-bit assignment, so they're not directly equivalent. */ +SDL_FORCE_INLINE void SDL_memset4(void *dst, Uint32 val, size_t dwords) +{ +#if defined(__GNUC__) && defined(__i386__) + int u0, u1, u2; + __asm__ __volatile__ ( + "cld \n\t" + "rep ; stosl \n\t" + : "=&D" (u0), "=&a" (u1), "=&c" (u2) + : "0" (dst), "1" (val), "2" (SDL_static_cast(Uint32, dwords)) + : "memory" + ); +#else + size_t _n = (dwords + 3) / 4; + Uint32 *_p = SDL_static_cast(Uint32 *, dst); + Uint32 _val = (val); + if (dwords == 0) { + return; + } + switch (dwords % 4) { + case 0: do { *_p++ = _val; SDL_FALLTHROUGH; + case 3: *_p++ = _val; SDL_FALLTHROUGH; + case 2: *_p++ = _val; SDL_FALLTHROUGH; + case 1: *_p++ = _val; + } while ( --_n ); + } +#endif +} + +extern DECLSPEC void *SDLCALL SDL_memcpy(SDL_OUT_BYTECAP(len) void *dst, SDL_IN_BYTECAP(len) const void *src, size_t len); + +extern DECLSPEC void *SDLCALL SDL_memmove(SDL_OUT_BYTECAP(len) void *dst, SDL_IN_BYTECAP(len) const void *src, size_t len); +extern DECLSPEC int SDLCALL SDL_memcmp(const void *s1, const void *s2, size_t len); + +extern DECLSPEC size_t SDLCALL SDL_wcslen(const wchar_t *wstr); +extern DECLSPEC size_t SDLCALL SDL_wcslcpy(SDL_OUT_Z_CAP(maxlen) wchar_t *dst, const wchar_t *src, size_t maxlen); +extern DECLSPEC size_t SDLCALL SDL_wcslcat(SDL_INOUT_Z_CAP(maxlen) wchar_t *dst, const wchar_t *src, size_t maxlen); +extern DECLSPEC wchar_t *SDLCALL SDL_wcsdup(const wchar_t *wstr); +extern DECLSPEC wchar_t *SDLCALL SDL_wcsstr(const wchar_t *haystack, const wchar_t *needle); + +extern DECLSPEC int SDLCALL SDL_wcscmp(const wchar_t *str1, const wchar_t *str2); +extern DECLSPEC int SDLCALL SDL_wcsncmp(const wchar_t *str1, const wchar_t *str2, size_t maxlen); +extern DECLSPEC int SDLCALL SDL_wcscasecmp(const wchar_t *str1, const wchar_t *str2); +extern DECLSPEC int SDLCALL SDL_wcsncasecmp(const wchar_t *str1, const wchar_t *str2, size_t len); + +extern DECLSPEC size_t SDLCALL SDL_strlen(const char *str); +extern DECLSPEC size_t SDLCALL SDL_strlcpy(SDL_OUT_Z_CAP(maxlen) char *dst, const char *src, size_t maxlen); +extern DECLSPEC size_t SDLCALL SDL_utf8strlcpy(SDL_OUT_Z_CAP(dst_bytes) char *dst, const char *src, size_t dst_bytes); +extern DECLSPEC size_t SDLCALL SDL_strlcat(SDL_INOUT_Z_CAP(maxlen) char *dst, const char *src, size_t maxlen); +extern DECLSPEC char *SDLCALL SDL_strdup(const char *str); +extern DECLSPEC char *SDLCALL SDL_strrev(char *str); +extern DECLSPEC char *SDLCALL SDL_strupr(char *str); +extern DECLSPEC char *SDLCALL SDL_strlwr(char *str); +extern DECLSPEC char *SDLCALL SDL_strchr(const char *str, int c); +extern DECLSPEC char *SDLCALL SDL_strrchr(const char *str, int c); +extern DECLSPEC char *SDLCALL SDL_strstr(const char *haystack, const char *needle); +extern DECLSPEC char *SDLCALL SDL_strcasestr(const char *haystack, const char *needle); +extern DECLSPEC char *SDLCALL SDL_strtokr(char *s1, const char *s2, char **saveptr); +extern DECLSPEC size_t SDLCALL SDL_utf8strlen(const char *str); +extern DECLSPEC size_t SDLCALL SDL_utf8strnlen(const char *str, size_t bytes); + +extern DECLSPEC char *SDLCALL SDL_itoa(int value, char *str, int radix); +extern DECLSPEC char *SDLCALL SDL_uitoa(unsigned int value, char *str, int radix); +extern DECLSPEC char *SDLCALL SDL_ltoa(long value, char *str, int radix); +extern DECLSPEC char *SDLCALL SDL_ultoa(unsigned long value, char *str, int radix); +extern DECLSPEC char *SDLCALL SDL_lltoa(Sint64 value, char *str, int radix); +extern DECLSPEC char *SDLCALL SDL_ulltoa(Uint64 value, char *str, int radix); + +extern DECLSPEC int SDLCALL SDL_atoi(const char *str); +extern DECLSPEC double SDLCALL SDL_atof(const char *str); +extern DECLSPEC long SDLCALL SDL_strtol(const char *str, char **endp, int base); +extern DECLSPEC unsigned long SDLCALL SDL_strtoul(const char *str, char **endp, int base); +extern DECLSPEC Sint64 SDLCALL SDL_strtoll(const char *str, char **endp, int base); +extern DECLSPEC Uint64 SDLCALL SDL_strtoull(const char *str, char **endp, int base); +extern DECLSPEC double SDLCALL SDL_strtod(const char *str, char **endp); + +extern DECLSPEC int SDLCALL SDL_strcmp(const char *str1, const char *str2); +extern DECLSPEC int SDLCALL SDL_strncmp(const char *str1, const char *str2, size_t maxlen); +extern DECLSPEC int SDLCALL SDL_strcasecmp(const char *str1, const char *str2); +extern DECLSPEC int SDLCALL SDL_strncasecmp(const char *str1, const char *str2, size_t len); + +extern DECLSPEC int SDLCALL SDL_sscanf(const char *text, SDL_SCANF_FORMAT_STRING const char *fmt, ...) SDL_SCANF_VARARG_FUNC(2); +extern DECLSPEC int SDLCALL SDL_vsscanf(const char *text, SDL_SCANF_FORMAT_STRING const char *fmt, va_list ap) SDL_SCANF_VARARG_FUNCV(2); +extern DECLSPEC int SDLCALL SDL_snprintf(SDL_OUT_Z_CAP(maxlen) char *text, size_t maxlen, SDL_PRINTF_FORMAT_STRING const char *fmt, ... ) SDL_PRINTF_VARARG_FUNC(3); +extern DECLSPEC int SDLCALL SDL_vsnprintf(SDL_OUT_Z_CAP(maxlen) char *text, size_t maxlen, SDL_PRINTF_FORMAT_STRING const char *fmt, va_list ap) SDL_PRINTF_VARARG_FUNCV(3); +extern DECLSPEC int SDLCALL SDL_asprintf(char **strp, SDL_PRINTF_FORMAT_STRING const char *fmt, ...) SDL_PRINTF_VARARG_FUNC(2); +extern DECLSPEC int SDLCALL SDL_vasprintf(char **strp, SDL_PRINTF_FORMAT_STRING const char *fmt, va_list ap) SDL_PRINTF_VARARG_FUNCV(2); + +#ifndef HAVE_M_PI +#ifndef M_PI +#define M_PI 3.14159265358979323846264338327950288 /**< pi */ +#endif +#endif + +/** + * Use this function to compute arc cosine of `x`. + * + * The definition of `y = acos(x)` is `x = cos(y)`. + * + * Domain: `-1 <= x <= 1` + * + * Range: `0 <= y <= Pi` + * + * \param x floating point value, in radians. + * \returns arc cosine of `x`. + * + * \since This function is available since SDL 2.0.2. + */ +extern DECLSPEC double SDLCALL SDL_acos(double x); +extern DECLSPEC float SDLCALL SDL_acosf(float x); +extern DECLSPEC double SDLCALL SDL_asin(double x); +extern DECLSPEC float SDLCALL SDL_asinf(float x); +extern DECLSPEC double SDLCALL SDL_atan(double x); +extern DECLSPEC float SDLCALL SDL_atanf(float x); +extern DECLSPEC double SDLCALL SDL_atan2(double y, double x); +extern DECLSPEC float SDLCALL SDL_atan2f(float y, float x); +extern DECLSPEC double SDLCALL SDL_ceil(double x); +extern DECLSPEC float SDLCALL SDL_ceilf(float x); +extern DECLSPEC double SDLCALL SDL_copysign(double x, double y); +extern DECLSPEC float SDLCALL SDL_copysignf(float x, float y); +extern DECLSPEC double SDLCALL SDL_cos(double x); +extern DECLSPEC float SDLCALL SDL_cosf(float x); +extern DECLSPEC double SDLCALL SDL_exp(double x); +extern DECLSPEC float SDLCALL SDL_expf(float x); +extern DECLSPEC double SDLCALL SDL_fabs(double x); +extern DECLSPEC float SDLCALL SDL_fabsf(float x); +extern DECLSPEC double SDLCALL SDL_floor(double x); +extern DECLSPEC float SDLCALL SDL_floorf(float x); +extern DECLSPEC double SDLCALL SDL_trunc(double x); +extern DECLSPEC float SDLCALL SDL_truncf(float x); +extern DECLSPEC double SDLCALL SDL_fmod(double x, double y); +extern DECLSPEC float SDLCALL SDL_fmodf(float x, float y); +extern DECLSPEC double SDLCALL SDL_log(double x); +extern DECLSPEC float SDLCALL SDL_logf(float x); +extern DECLSPEC double SDLCALL SDL_log10(double x); +extern DECLSPEC float SDLCALL SDL_log10f(float x); +extern DECLSPEC double SDLCALL SDL_pow(double x, double y); +extern DECLSPEC float SDLCALL SDL_powf(float x, float y); +extern DECLSPEC double SDLCALL SDL_round(double x); +extern DECLSPEC float SDLCALL SDL_roundf(float x); +extern DECLSPEC long SDLCALL SDL_lround(double x); +extern DECLSPEC long SDLCALL SDL_lroundf(float x); +extern DECLSPEC double SDLCALL SDL_scalbn(double x, int n); +extern DECLSPEC float SDLCALL SDL_scalbnf(float x, int n); +extern DECLSPEC double SDLCALL SDL_sin(double x); +extern DECLSPEC float SDLCALL SDL_sinf(float x); +extern DECLSPEC double SDLCALL SDL_sqrt(double x); +extern DECLSPEC float SDLCALL SDL_sqrtf(float x); +extern DECLSPEC double SDLCALL SDL_tan(double x); +extern DECLSPEC float SDLCALL SDL_tanf(float x); + +/* The SDL implementation of iconv() returns these error codes */ +#define SDL_ICONV_ERROR (size_t)-1 +#define SDL_ICONV_E2BIG (size_t)-2 +#define SDL_ICONV_EILSEQ (size_t)-3 +#define SDL_ICONV_EINVAL (size_t)-4 + +/* SDL_iconv_* are now always real symbols/types, not macros or inlined. */ +typedef struct _SDL_iconv_t *SDL_iconv_t; +extern DECLSPEC SDL_iconv_t SDLCALL SDL_iconv_open(const char *tocode, + const char *fromcode); +extern DECLSPEC int SDLCALL SDL_iconv_close(SDL_iconv_t cd); +extern DECLSPEC size_t SDLCALL SDL_iconv(SDL_iconv_t cd, const char **inbuf, + size_t * inbytesleft, char **outbuf, + size_t * outbytesleft); + +/** + * This function converts a buffer or string between encodings in one pass, + * returning a string that must be freed with SDL_free() or NULL on error. + * + * \since This function is available since SDL 2.0.0. + */ +extern DECLSPEC char *SDLCALL SDL_iconv_string(const char *tocode, + const char *fromcode, + const char *inbuf, + size_t inbytesleft); + +/* Some helper macros for common cases... */ +#define SDL_iconv_utf8_locale(S) SDL_iconv_string("", "UTF-8", S, SDL_strlen(S)+1) +#define SDL_iconv_utf8_ucs2(S) (Uint16 *)SDL_iconv_string("UCS-2", "UTF-8", S, SDL_strlen(S)+1) +#define SDL_iconv_utf8_ucs4(S) (Uint32 *)SDL_iconv_string("UCS-4", "UTF-8", S, SDL_strlen(S)+1) +#define SDL_iconv_wchar_utf8(S) SDL_iconv_string("UTF-8", "WCHAR_T", (char *)S, (SDL_wcslen(S)+1)*sizeof(wchar_t)) + +/* force builds using Clang's static analysis tools to use literal C runtime + here, since there are possibly tests that are ineffective otherwise. */ +#if defined(__clang_analyzer__) && !defined(SDL_DISABLE_ANALYZE_MACROS) + +/* The analyzer knows about strlcpy even when the system doesn't provide it */ +#ifndef HAVE_STRLCPY +size_t strlcpy(char* dst, const char* src, size_t size); +#endif + +/* The analyzer knows about strlcat even when the system doesn't provide it */ +#ifndef HAVE_STRLCAT +size_t strlcat(char* dst, const char* src, size_t size); +#endif + +#ifndef HAVE_WCSLCPY +size_t wcslcpy(wchar_t *dst, const wchar_t *src, size_t size); +#endif + +#ifndef HAVE_WCSLCAT +size_t wcslcat(wchar_t *dst, const wchar_t *src, size_t size); +#endif + +#ifndef _WIN32 +/* strdup is not ANSI but POSIX, and its prototype might be hidden... */ +/* not for windows: might conflict with string.h where strdup may have + * dllimport attribute: https://github.com/libsdl-org/SDL/issues/12948 */ +char *strdup(const char *str); +#endif + +/* Starting LLVM 16, the analyser errors out if these functions do not have + their prototype defined (clang-diagnostic-implicit-function-declaration) */ +#include +#include +#include + +#define SDL_malloc malloc +#define SDL_calloc calloc +#define SDL_realloc realloc +#define SDL_free free +#define SDL_memset memset +#define SDL_memcpy memcpy +#define SDL_memmove memmove +#define SDL_memcmp memcmp +#define SDL_strlcpy strlcpy +#define SDL_strlcat strlcat +#define SDL_strlen strlen +#define SDL_wcslen wcslen +#define SDL_wcslcpy wcslcpy +#define SDL_wcslcat wcslcat +#define SDL_strdup strdup +#define SDL_wcsdup wcsdup +#define SDL_strchr strchr +#define SDL_strrchr strrchr +#define SDL_strstr strstr +#define SDL_wcsstr wcsstr +#define SDL_strtokr strtok_r +#define SDL_strcmp strcmp +#define SDL_wcscmp wcscmp +#define SDL_strncmp strncmp +#define SDL_wcsncmp wcsncmp +#define SDL_strcasecmp strcasecmp +#define SDL_strncasecmp strncasecmp +#define SDL_sscanf sscanf +#define SDL_vsscanf vsscanf +#define SDL_snprintf snprintf +#define SDL_vsnprintf vsnprintf +#endif + +SDL_FORCE_INLINE void *SDL_memcpy4(SDL_OUT_BYTECAP(dwords*4) void *dst, SDL_IN_BYTECAP(dwords*4) const void *src, size_t dwords) +{ + return SDL_memcpy(dst, src, dwords * 4); +} + +/** + * If a * b would overflow, return -1. + * + * Otherwise store a * b via ret and return 0. + * + * \since This function is available since SDL 2.24.0. + */ +SDL_FORCE_INLINE int SDL_size_mul_overflow (size_t a, + size_t b, + size_t *ret) +{ + if (a != 0 && b > SDL_SIZE_MAX / a) { + return -1; + } + *ret = a * b; + return 0; +} + +#if _SDL_HAS_BUILTIN(__builtin_mul_overflow) +/* This needs to be wrapped in an inline rather than being a direct #define, + * because __builtin_mul_overflow() is type-generic, but we want to be + * consistent about interpreting a and b as size_t. */ +SDL_FORCE_INLINE int _SDL_size_mul_overflow_builtin (size_t a, + size_t b, + size_t *ret) +{ + return __builtin_mul_overflow(a, b, ret) == 0 ? 0 : -1; +} +#define SDL_size_mul_overflow(a, b, ret) (_SDL_size_mul_overflow_builtin(a, b, ret)) +#endif + +/** + * If a + b would overflow, return -1. + * + * Otherwise store a + b via ret and return 0. + * + * \since This function is available since SDL 2.24.0. + */ +SDL_FORCE_INLINE int SDL_size_add_overflow (size_t a, + size_t b, + size_t *ret) +{ + if (b > SDL_SIZE_MAX - a) { + return -1; + } + *ret = a + b; + return 0; +} + +#if _SDL_HAS_BUILTIN(__builtin_add_overflow) +/* This needs to be wrapped in an inline rather than being a direct #define, + * the same as the call to __builtin_mul_overflow() above. */ +SDL_FORCE_INLINE int _SDL_size_add_overflow_builtin (size_t a, + size_t b, + size_t *ret) +{ + return __builtin_add_overflow(a, b, ret) == 0 ? 0 : -1; +} +#define SDL_size_add_overflow(a, b, ret) (_SDL_size_add_overflow_builtin(a, b, ret)) +#endif + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include "close_code.h" + +#endif /* SDL_stdinc_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/third_party/tlRender-install-Release/include/SDL2/SDL_surface.h b/third_party/tlRender-install-Release/include/SDL2/SDL_surface.h new file mode 100644 index 00000000..42ea5919 --- /dev/null +++ b/third_party/tlRender-install-Release/include/SDL2/SDL_surface.h @@ -0,0 +1,1001 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2025 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +/** + * # CategorySurface + * + * Header file for SDL_Surface definition and management functions. + */ + +#ifndef SDL_surface_h_ +#define SDL_surface_h_ + +#include "SDL_stdinc.h" +#include "SDL_pixels.h" +#include "SDL_rect.h" +#include "SDL_blendmode.h" +#include "SDL_rwops.h" + +#include "begin_code.h" +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \name Surface flags + * + * These are the currently supported flags for the SDL_Surface. + * + * \internal + * Used internally (read-only). + */ +/* @{ */ +#define SDL_SWSURFACE 0 /**< Just here for compatibility */ +#define SDL_PREALLOC 0x00000001 /**< Surface uses preallocated memory */ +#define SDL_RLEACCEL 0x00000002 /**< Surface is RLE encoded */ +#define SDL_DONTFREE 0x00000004 /**< Surface is referenced internally */ +#define SDL_SIMD_ALIGNED 0x00000008 /**< Surface uses aligned memory */ +/* @} *//* Surface flags */ + +/** + * Evaluates to true if the surface needs to be locked before access. + */ +#define SDL_MUSTLOCK(S) (((S)->flags & SDL_RLEACCEL) != 0) + +typedef struct SDL_BlitMap SDL_BlitMap; /* this is an opaque type. */ + +/** + * A collection of pixels used in software blitting. + * + * This structure should be treated as read-only, except for `pixels`, which, + * if not NULL, contains the raw pixel data for the surface. + */ +typedef struct SDL_Surface +{ + Uint32 flags; /**< Read-only */ + SDL_PixelFormat *format; /**< Read-only */ + int w, h; /**< Read-only */ + int pitch; /**< Read-only */ + void *pixels; /**< Read-write */ + + /** Application data associated with the surface */ + void *userdata; /**< Read-write */ + + /** information needed for surfaces requiring locks */ + int locked; /**< Read-only */ + + /** list of BlitMap that hold a reference to this surface */ + void *list_blitmap; /**< Private */ + + /** clipping information */ + SDL_Rect clip_rect; /**< Read-only */ + + /** info for fast blit mapping to other surfaces */ + SDL_BlitMap *map; /**< Private */ + + /** Reference count -- used when freeing surface */ + int refcount; /**< Read-mostly */ +} SDL_Surface; + +/** + * The type of function used for surface blitting functions. + */ +typedef int (SDLCALL *SDL_blit) (struct SDL_Surface * src, SDL_Rect * srcrect, + struct SDL_Surface * dst, SDL_Rect * dstrect); + +/** + * The formula used for converting between YUV and RGB + */ +typedef enum SDL_YUV_CONVERSION_MODE +{ + SDL_YUV_CONVERSION_JPEG, /**< Full range JPEG */ + SDL_YUV_CONVERSION_BT601, /**< BT.601 (the default) */ + SDL_YUV_CONVERSION_BT709, /**< BT.709 */ + SDL_YUV_CONVERSION_AUTOMATIC /**< BT.601 for SD content, BT.709 for HD content */ +} SDL_YUV_CONVERSION_MODE; + +/** + * Allocate a new RGB surface. + * + * If `depth` is 4 or 8 bits, an empty palette is allocated for the surface. + * If `depth` is greater than 8 bits, the pixel format is set using the + * [RGBA]mask parameters. + * + * The [RGBA]mask parameters are the bitmasks used to extract that color from + * a pixel. For instance, `Rmask` being 0xFF000000 means the red data is + * stored in the most significant byte. Using zeros for the RGB masks sets a + * default value, based on the depth. For example: + * + * ```c++ + * SDL_CreateRGBSurface(0,w,h,32,0,0,0,0); + * ``` + * + * However, using zero for the Amask results in an Amask of 0. + * + * By default surfaces with an alpha mask are set up for blending as with: + * + * ```c++ + * SDL_SetSurfaceBlendMode(surface, SDL_BLENDMODE_BLEND) + * ``` + * + * You can change this by calling SDL_SetSurfaceBlendMode() and selecting a + * different `blendMode`. + * + * \param flags the flags are unused and should be set to 0. + * \param width the width of the surface. + * \param height the height of the surface. + * \param depth the depth of the surface in bits. + * \param Rmask the red mask for the pixels. + * \param Gmask the green mask for the pixels. + * \param Bmask the blue mask for the pixels. + * \param Amask the alpha mask for the pixels. + * \returns the new SDL_Surface structure that is created or NULL if it fails; + * call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CreateRGBSurfaceFrom + * \sa SDL_CreateRGBSurfaceWithFormat + * \sa SDL_FreeSurface + */ +extern DECLSPEC SDL_Surface *SDLCALL SDL_CreateRGBSurface + (Uint32 flags, int width, int height, int depth, + Uint32 Rmask, Uint32 Gmask, Uint32 Bmask, Uint32 Amask); + + +/* !!! FIXME for 2.1: why does this ask for depth? Format provides that. */ + +/** + * Allocate a new RGB surface with a specific pixel format. + * + * This function operates mostly like SDL_CreateRGBSurface(), except instead + * of providing pixel color masks, you provide it with a predefined format + * from SDL_PixelFormatEnum. + * + * \param flags the flags are unused and should be set to 0. + * \param width the width of the surface. + * \param height the height of the surface. + * \param depth the depth of the surface in bits. + * \param format the SDL_PixelFormatEnum for the new surface's pixel format. + * \returns the new SDL_Surface structure that is created or NULL if it fails; + * call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.5. + * + * \sa SDL_CreateRGBSurface + * \sa SDL_CreateRGBSurfaceFrom + * \sa SDL_FreeSurface + */ +extern DECLSPEC SDL_Surface *SDLCALL SDL_CreateRGBSurfaceWithFormat + (Uint32 flags, int width, int height, int depth, Uint32 format); + +/** + * Allocate a new RGB surface with existing pixel data. + * + * This function operates mostly like SDL_CreateRGBSurface(), except it does + * not allocate memory for the pixel data, instead the caller provides an + * existing buffer of data for the surface to use. + * + * No copy is made of the pixel data. Pixel data is not managed automatically; + * you must free the surface before you free the pixel data. + * + * \param pixels a pointer to existing pixel data. + * \param width the width of the surface. + * \param height the height of the surface. + * \param depth the depth of the surface in bits. + * \param pitch the pitch of the surface in bytes. + * \param Rmask the red mask for the pixels. + * \param Gmask the green mask for the pixels. + * \param Bmask the blue mask for the pixels. + * \param Amask the alpha mask for the pixels. + * \returns the new SDL_Surface structure that is created or NULL if it fails; + * call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CreateRGBSurface + * \sa SDL_CreateRGBSurfaceWithFormat + * \sa SDL_CreateRGBSurfaceWithFormatFrom + * \sa SDL_FreeSurface + */ +extern DECLSPEC SDL_Surface *SDLCALL SDL_CreateRGBSurfaceFrom(void *pixels, + int width, + int height, + int depth, + int pitch, + Uint32 Rmask, + Uint32 Gmask, + Uint32 Bmask, + Uint32 Amask); + +/* !!! FIXME for 2.1: why does this ask for depth? Format provides that. */ + +/** + * Allocate a new RGB surface with with a specific pixel format and existing + * pixel data. + * + * This function operates mostly like SDL_CreateRGBSurfaceFrom(), except + * instead of providing pixel color masks, you provide it with a predefined + * format from SDL_PixelFormatEnum. + * + * No copy is made of the pixel data. Pixel data is not managed automatically; + * you must free the surface before you free the pixel data. + * + * \param pixels a pointer to existing pixel data. + * \param width the width of the surface. + * \param height the height of the surface. + * \param depth the depth of the surface in bits. + * \param pitch the pitch of the surface in bytes. + * \param format the SDL_PixelFormatEnum for the new surface's pixel format. + * \returns the new SDL_Surface structure that is created or NULL if it fails; + * call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.5. + * + * \sa SDL_CreateRGBSurfaceFrom + * \sa SDL_CreateRGBSurfaceWithFormat + * \sa SDL_FreeSurface + */ +extern DECLSPEC SDL_Surface *SDLCALL SDL_CreateRGBSurfaceWithFormatFrom + (void *pixels, int width, int height, int depth, int pitch, Uint32 format); + +/** + * Free an RGB surface. + * + * It is safe to pass NULL to this function. + * + * \param surface the SDL_Surface to free. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CreateRGBSurface + * \sa SDL_CreateRGBSurfaceFrom + * \sa SDL_LoadBMP + * \sa SDL_LoadBMP_RW + */ +extern DECLSPEC void SDLCALL SDL_FreeSurface(SDL_Surface * surface); + +/** + * Set the palette used by a surface. + * + * A single palette can be shared with many surfaces. + * + * \param surface the SDL_Surface structure to update. + * \param palette the SDL_Palette structure to use. + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + */ +extern DECLSPEC int SDLCALL SDL_SetSurfacePalette(SDL_Surface * surface, + SDL_Palette * palette); + +/** + * Set up a surface for directly accessing the pixels. + * + * Between calls to SDL_LockSurface() / SDL_UnlockSurface(), you can write to + * and read from `surface->pixels`, using the pixel format stored in + * `surface->format`. Once you are done accessing the surface, you should use + * SDL_UnlockSurface() to release it. + * + * Not all surfaces require locking. If `SDL_MUSTLOCK(surface)` evaluates to + * 0, then you can read and write to the surface at any time, and the pixel + * format of the surface will not change. + * + * \param surface the SDL_Surface structure to be locked. + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_MUSTLOCK + * \sa SDL_UnlockSurface + */ +extern DECLSPEC int SDLCALL SDL_LockSurface(SDL_Surface * surface); + +/** + * Release a surface after directly accessing the pixels. + * + * \param surface the SDL_Surface structure to be unlocked. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_LockSurface + */ +extern DECLSPEC void SDLCALL SDL_UnlockSurface(SDL_Surface * surface); + +/** + * Load a BMP image from a seekable SDL data stream. + * + * The new surface should be freed with SDL_FreeSurface(). Not doing so will + * result in a memory leak. + * + * src is an open SDL_RWops buffer, typically loaded with SDL_RWFromFile. + * Alternatively, you might also use the macro SDL_LoadBMP to load a bitmap + * from a file, convert it to an SDL_Surface and then close the file. + * + * \param src the data stream for the surface. + * \param freesrc non-zero to close the stream after being read. + * \returns a pointer to a new SDL_Surface structure or NULL if there was an + * error; call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_FreeSurface + * \sa SDL_RWFromFile + * \sa SDL_LoadBMP + * \sa SDL_SaveBMP_RW + */ +extern DECLSPEC SDL_Surface *SDLCALL SDL_LoadBMP_RW(SDL_RWops * src, + int freesrc); + +/** + * Load a surface from a file. + * + * Convenience macro. + */ +#define SDL_LoadBMP(file) SDL_LoadBMP_RW(SDL_RWFromFile(file, "rb"), 1) + +/** + * Save a surface to a seekable SDL data stream in BMP format. + * + * Surfaces with a 24-bit, 32-bit and paletted 8-bit format get saved in the + * BMP directly. Other RGB formats with 8-bit or higher get converted to a + * 24-bit surface or, if they have an alpha mask or a colorkey, to a 32-bit + * surface before they are saved. YUV and paletted 1-bit and 4-bit formats are + * not supported. + * + * \param surface the SDL_Surface structure containing the image to be saved. + * \param dst a data stream to save to. + * \param freedst non-zero to close the stream after being written. + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_LoadBMP_RW + * \sa SDL_SaveBMP + */ +extern DECLSPEC int SDLCALL SDL_SaveBMP_RW + (SDL_Surface * surface, SDL_RWops * dst, int freedst); + +/** + * Save a surface to a file. + * + * Convenience macro. + */ +#define SDL_SaveBMP(surface, file) \ + SDL_SaveBMP_RW(surface, SDL_RWFromFile(file, "wb"), 1) + +/** + * Set the RLE acceleration hint for a surface. + * + * If RLE is enabled, color key and alpha blending blits are much faster, but + * the surface must be locked before directly accessing the pixels. + * + * \param surface the SDL_Surface structure to optimize. + * \param flag 0 to disable, non-zero to enable RLE acceleration. + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_BlitSurface + * \sa SDL_LockSurface + * \sa SDL_UnlockSurface + */ +extern DECLSPEC int SDLCALL SDL_SetSurfaceRLE(SDL_Surface * surface, + int flag); + +/** + * Returns whether the surface is RLE enabled + * + * It is safe to pass a NULL `surface` here; it will return SDL_FALSE. + * + * \param surface the SDL_Surface structure to query. + * \returns SDL_TRUE if the surface is RLE enabled, SDL_FALSE otherwise. + * + * \since This function is available since SDL 2.0.14. + * + * \sa SDL_SetSurfaceRLE + */ +extern DECLSPEC SDL_bool SDLCALL SDL_HasSurfaceRLE(SDL_Surface * surface); + +/** + * Set the color key (transparent pixel) in a surface. + * + * The color key defines a pixel value that will be treated as transparent in + * a blit. For example, one can use this to specify that cyan pixels should be + * considered transparent, and therefore not rendered. + * + * It is a pixel of the format used by the surface, as generated by + * SDL_MapRGB(). + * + * RLE acceleration can substantially speed up blitting of images with large + * horizontal runs of transparent pixels. See SDL_SetSurfaceRLE() for details. + * + * \param surface the SDL_Surface structure to update. + * \param flag SDL_TRUE to enable color key, SDL_FALSE to disable color key. + * \param key the transparent pixel. + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_BlitSurface + * \sa SDL_GetColorKey + */ +extern DECLSPEC int SDLCALL SDL_SetColorKey(SDL_Surface * surface, + int flag, Uint32 key); + +/** + * Returns whether the surface has a color key + * + * It is safe to pass a NULL `surface` here; it will return SDL_FALSE. + * + * \param surface the SDL_Surface structure to query. + * \return SDL_TRUE if the surface has a color key, SDL_FALSE otherwise. + * + * \since This function is available since SDL 2.0.9. + * + * \sa SDL_SetColorKey + * \sa SDL_GetColorKey + */ +extern DECLSPEC SDL_bool SDLCALL SDL_HasColorKey(SDL_Surface * surface); + +/** + * Get the color key (transparent pixel) for a surface. + * + * The color key is a pixel of the format used by the surface, as generated by + * SDL_MapRGB(). + * + * If the surface doesn't have color key enabled this function returns -1. + * + * \param surface the SDL_Surface structure to query. + * \param key a pointer filled in with the transparent pixel. + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_BlitSurface + * \sa SDL_SetColorKey + */ +extern DECLSPEC int SDLCALL SDL_GetColorKey(SDL_Surface * surface, + Uint32 * key); + +/** + * Set an additional color value multiplied into blit operations. + * + * When this surface is blitted, during the blit operation each source color + * channel is modulated by the appropriate color value according to the + * following formula: + * + * `srcC = srcC * (color / 255)` + * + * \param surface the SDL_Surface structure to update. + * \param r the red color value multiplied into blit operations. + * \param g the green color value multiplied into blit operations. + * \param b the blue color value multiplied into blit operations. + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetSurfaceColorMod + * \sa SDL_SetSurfaceAlphaMod + */ +extern DECLSPEC int SDLCALL SDL_SetSurfaceColorMod(SDL_Surface * surface, + Uint8 r, Uint8 g, Uint8 b); + + +/** + * Get the additional color value multiplied into blit operations. + * + * \param surface the SDL_Surface structure to query. + * \param r a pointer filled in with the current red color value. + * \param g a pointer filled in with the current green color value. + * \param b a pointer filled in with the current blue color value. + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetSurfaceAlphaMod + * \sa SDL_SetSurfaceColorMod + */ +extern DECLSPEC int SDLCALL SDL_GetSurfaceColorMod(SDL_Surface * surface, + Uint8 * r, Uint8 * g, + Uint8 * b); + +/** + * Set an additional alpha value used in blit operations. + * + * When this surface is blitted, during the blit operation the source alpha + * value is modulated by this alpha value according to the following formula: + * + * `srcA = srcA * (alpha / 255)` + * + * \param surface the SDL_Surface structure to update. + * \param alpha the alpha value multiplied into blit operations. + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetSurfaceAlphaMod + * \sa SDL_SetSurfaceColorMod + */ +extern DECLSPEC int SDLCALL SDL_SetSurfaceAlphaMod(SDL_Surface * surface, + Uint8 alpha); + +/** + * Get the additional alpha value used in blit operations. + * + * \param surface the SDL_Surface structure to query. + * \param alpha a pointer filled in with the current alpha value. + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetSurfaceColorMod + * \sa SDL_SetSurfaceAlphaMod + */ +extern DECLSPEC int SDLCALL SDL_GetSurfaceAlphaMod(SDL_Surface * surface, + Uint8 * alpha); + +/** + * Set the blend mode used for blit operations. + * + * To copy a surface to another surface (or texture) without blending with the + * existing data, the blendmode of the SOURCE surface should be set to + * `SDL_BLENDMODE_NONE`. + * + * \param surface the SDL_Surface structure to update. + * \param blendMode the SDL_BlendMode to use for blit blending. + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetSurfaceBlendMode + */ +extern DECLSPEC int SDLCALL SDL_SetSurfaceBlendMode(SDL_Surface * surface, + SDL_BlendMode blendMode); + +/** + * Get the blend mode used for blit operations. + * + * \param surface the SDL_Surface structure to query. + * \param blendMode a pointer filled in with the current SDL_BlendMode. + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_SetSurfaceBlendMode + */ +extern DECLSPEC int SDLCALL SDL_GetSurfaceBlendMode(SDL_Surface * surface, + SDL_BlendMode *blendMode); + +/** + * Set the clipping rectangle for a surface. + * + * When `surface` is the destination of a blit, only the area within the clip + * rectangle is drawn into. + * + * Note that blits are automatically clipped to the edges of the source and + * destination surfaces. + * + * \param surface the SDL_Surface structure to be clipped. + * \param rect the SDL_Rect structure representing the clipping rectangle, or + * NULL to disable clipping. + * \returns SDL_TRUE if the rectangle intersects the surface, otherwise + * SDL_FALSE and blits will be completely clipped. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_BlitSurface + * \sa SDL_GetClipRect + */ +extern DECLSPEC SDL_bool SDLCALL SDL_SetClipRect(SDL_Surface * surface, + const SDL_Rect * rect); + +/** + * Get the clipping rectangle for a surface. + * + * When `surface` is the destination of a blit, only the area within the clip + * rectangle is drawn into. + * + * \param surface the SDL_Surface structure representing the surface to be + * clipped. + * \param rect an SDL_Rect structure filled in with the clipping rectangle for + * the surface. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_BlitSurface + * \sa SDL_SetClipRect + */ +extern DECLSPEC void SDLCALL SDL_GetClipRect(SDL_Surface * surface, + SDL_Rect * rect); + +/* + * Creates a new surface identical to the existing surface. + * + * The returned surface should be freed with SDL_FreeSurface(). + * + * \param surface the surface to duplicate. + * \returns a copy of the surface, or NULL on failure; call SDL_GetError() for + * more information. + */ +extern DECLSPEC SDL_Surface *SDLCALL SDL_DuplicateSurface(SDL_Surface * surface); + +/** + * Copy an existing surface to a new surface of the specified format. + * + * This function is used to optimize images for faster *repeat* blitting. This + * is accomplished by converting the original and storing the result as a new + * surface. The new, optimized surface can then be used as the source for + * future blits, making them faster. + * + * \param src the existing SDL_Surface structure to convert. + * \param fmt the SDL_PixelFormat structure that the new surface is optimized + * for. + * \param flags the flags are unused and should be set to 0; this is a + * leftover from SDL 1.2's API. + * \returns the new SDL_Surface structure that is created or NULL if it fails; + * call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_AllocFormat + * \sa SDL_ConvertSurfaceFormat + * \sa SDL_CreateRGBSurface + */ +extern DECLSPEC SDL_Surface *SDLCALL SDL_ConvertSurface + (SDL_Surface * src, const SDL_PixelFormat * fmt, Uint32 flags); + +/** + * Copy an existing surface to a new surface of the specified format enum. + * + * This function operates just like SDL_ConvertSurface(), but accepts an + * SDL_PixelFormatEnum value instead of an SDL_PixelFormat structure. As such, + * it might be easier to call but it doesn't have access to palette + * information for the destination surface, in case that would be important. + * + * \param src the existing SDL_Surface structure to convert. + * \param pixel_format the SDL_PixelFormatEnum that the new surface is + * optimized for. + * \param flags the flags are unused and should be set to 0; this is a + * leftover from SDL 1.2's API. + * \returns the new SDL_Surface structure that is created or NULL if it fails; + * call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_AllocFormat + * \sa SDL_ConvertSurface + * \sa SDL_CreateRGBSurface + */ +extern DECLSPEC SDL_Surface *SDLCALL SDL_ConvertSurfaceFormat + (SDL_Surface * src, Uint32 pixel_format, Uint32 flags); + +/** + * Copy a block of pixels of one format to another format. + * + * \param width the width of the block to copy, in pixels. + * \param height the height of the block to copy, in pixels. + * \param src_format an SDL_PixelFormatEnum value of the `src` pixels format. + * \param src a pointer to the source pixels. + * \param src_pitch the pitch of the source pixels, in bytes. + * \param dst_format an SDL_PixelFormatEnum value of the `dst` pixels format. + * \param dst a pointer to be filled in with new pixel data. + * \param dst_pitch the pitch of the destination pixels, in bytes. + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + */ +extern DECLSPEC int SDLCALL SDL_ConvertPixels(int width, int height, + Uint32 src_format, + const void * src, int src_pitch, + Uint32 dst_format, + void * dst, int dst_pitch); + +/** + * Premultiply the alpha on a block of pixels. + * + * This is safe to use with src == dst, but not for other overlapping areas. + * + * This function is currently only implemented for SDL_PIXELFORMAT_ARGB8888. + * + * \param width the width of the block to convert, in pixels. + * \param height the height of the block to convert, in pixels. + * \param src_format an SDL_PixelFormatEnum value of the `src` pixels format. + * \param src a pointer to the source pixels. + * \param src_pitch the pitch of the source pixels, in bytes. + * \param dst_format an SDL_PixelFormatEnum value of the `dst` pixels format. + * \param dst a pointer to be filled in with premultiplied pixel data. + * \param dst_pitch the pitch of the destination pixels, in bytes. + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.18. + */ +extern DECLSPEC int SDLCALL SDL_PremultiplyAlpha(int width, int height, + Uint32 src_format, + const void * src, int src_pitch, + Uint32 dst_format, + void * dst, int dst_pitch); + +/** + * Perform a fast fill of a rectangle with a specific color. + * + * `color` should be a pixel of the format used by the surface, and can be + * generated by SDL_MapRGB() or SDL_MapRGBA(). If the color value contains an + * alpha component then the destination is simply filled with that alpha + * information, no blending takes place. + * + * If there is a clip rectangle set on the destination (set via + * SDL_SetClipRect()), then this function will fill based on the intersection + * of the clip rectangle and `rect`. + * + * \param dst the SDL_Surface structure that is the drawing target. + * \param rect the SDL_Rect structure representing the rectangle to fill, or + * NULL to fill the entire surface. + * \param color the color to fill with. + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_FillRects + */ +extern DECLSPEC int SDLCALL SDL_FillRect + (SDL_Surface * dst, const SDL_Rect * rect, Uint32 color); + +/** + * Perform a fast fill of a set of rectangles with a specific color. + * + * `color` should be a pixel of the format used by the surface, and can be + * generated by SDL_MapRGB() or SDL_MapRGBA(). If the color value contains an + * alpha component then the destination is simply filled with that alpha + * information, no blending takes place. + * + * If there is a clip rectangle set on the destination (set via + * SDL_SetClipRect()), then this function will fill based on the intersection + * of the clip rectangle and `rect`. + * + * \param dst the SDL_Surface structure that is the drawing target. + * \param rects an array of SDL_Rect representing the rectangles to fill. + * \param count the number of rectangles in the array. + * \param color the color to fill with. + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_FillRect + */ +extern DECLSPEC int SDLCALL SDL_FillRects + (SDL_Surface * dst, const SDL_Rect * rects, int count, Uint32 color); + +/* !!! FIXME: merge this documentation with the wiki */ + +/** + * Performs a fast blit from the source surface to the destination surface. + * + * This assumes that the source and destination rectangles are the same size. + * If either `srcrect` or `dstrect` are NULL, the entire surface (`src` or + * `dst`) is copied. The final blit rectangle is saved in `dstrect` after + * all clipping is performed. + * + * The blit function should not be called on a locked surface. + * + * The blit semantics for surfaces with and without blending and colorkey are + * defined as follows: + * + * ``` + * RGBA->RGB: + * Source surface blend mode set to SDL_BLENDMODE_BLEND: + * alpha-blend (using the source alpha-channel and per-surface alpha) + * SDL_SRCCOLORKEY ignored. + * Source surface blend mode set to SDL_BLENDMODE_NONE: + * copy RGB. + * if SDL_SRCCOLORKEY set, only copy the pixels matching the + * RGB values of the source color key, ignoring alpha in the + * comparison. + * + * RGB->RGBA: + * Source surface blend mode set to SDL_BLENDMODE_BLEND: + * alpha-blend (using the source per-surface alpha) + * Source surface blend mode set to SDL_BLENDMODE_NONE: + * copy RGB, set destination alpha to source per-surface alpha value. + * both: + * if SDL_SRCCOLORKEY set, only copy the pixels matching the + * source color key. + * + * RGBA->RGBA: + * Source surface blend mode set to SDL_BLENDMODE_BLEND: + * alpha-blend (using the source alpha-channel and per-surface alpha) + * SDL_SRCCOLORKEY ignored. + * Source surface blend mode set to SDL_BLENDMODE_NONE: + * copy all of RGBA to the destination. + * if SDL_SRCCOLORKEY set, only copy the pixels matching the + * RGB values of the source color key, ignoring alpha in the + * comparison. + * + * RGB->RGB: + * Source surface blend mode set to SDL_BLENDMODE_BLEND: + * alpha-blend (using the source per-surface alpha) + * Source surface blend mode set to SDL_BLENDMODE_NONE: + * copy RGB. + * both: + * if SDL_SRCCOLORKEY set, only copy the pixels matching the + * source color key. + * ``` + * + * You should call SDL_BlitSurface() unless you know exactly how SDL blitting + * works internally and how to use the other blit functions. + * + * \returns 0 if the blit is successful, otherwise it returns -1. + */ +#define SDL_BlitSurface SDL_UpperBlit + +/** + * Perform a fast blit from the source surface to the destination surface. + * + * SDL_UpperBlit() has been replaced by SDL_BlitSurface(), which is merely a + * macro for this function with a less confusing name. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_BlitSurface + */ +extern DECLSPEC int SDLCALL SDL_UpperBlit + (SDL_Surface * src, const SDL_Rect * srcrect, + SDL_Surface * dst, SDL_Rect * dstrect); + +/** + * Perform low-level surface blitting only. + * + * This is a semi-private blit function and it performs low-level surface + * blitting, assuming the input rectangles have already been clipped. + * + * Unless you know what you're doing, you should be using SDL_BlitSurface() + * instead. + * + * \param src the SDL_Surface structure to be copied from. + * \param srcrect the SDL_Rect structure representing the rectangle to be + * copied, or NULL to copy the entire surface. + * \param dst the SDL_Surface structure that is the blit target. + * \param dstrect the SDL_Rect structure representing the rectangle that is + * copied into. + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_BlitSurface + */ +extern DECLSPEC int SDLCALL SDL_LowerBlit + (SDL_Surface * src, SDL_Rect * srcrect, + SDL_Surface * dst, SDL_Rect * dstrect); + + +/** + * Perform a fast, low quality, stretch blit between two surfaces of the same + * format. + * + * Please use SDL_BlitScaled() instead. + * + * \since This function is available since SDL 2.0.0. + */ +extern DECLSPEC int SDLCALL SDL_SoftStretch(SDL_Surface * src, + const SDL_Rect * srcrect, + SDL_Surface * dst, + const SDL_Rect * dstrect); + +/** + * Perform bilinear scaling between two surfaces of the same format, 32BPP. + * + * \since This function is available since SDL 2.0.16. + */ +extern DECLSPEC int SDLCALL SDL_SoftStretchLinear(SDL_Surface * src, + const SDL_Rect * srcrect, + SDL_Surface * dst, + const SDL_Rect * dstrect); + + +/** + * Perform a scaled surface copy to a destination surface. + * + * SDL_UpperBlitScaled() has been replaced by SDL_BlitScaled(), which is + * merely a macro for this function with a less confusing name. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_BlitScaled + */ +extern DECLSPEC int SDLCALL SDL_UpperBlitScaled + (SDL_Surface * src, const SDL_Rect * srcrect, + SDL_Surface * dst, SDL_Rect * dstrect); + +#define SDL_BlitScaled SDL_UpperBlitScaled + + +/** + * Perform low-level surface scaled blitting only. + * + * This is a semi-private function and it performs low-level surface blitting, + * assuming the input rectangles have already been clipped. + * + * \param src the SDL_Surface structure to be copied from. + * \param srcrect the SDL_Rect structure representing the rectangle to be + * copied. + * \param dst the SDL_Surface structure that is the blit target. + * \param dstrect the SDL_Rect structure representing the rectangle that is + * copied into. + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_BlitScaled + */ +extern DECLSPEC int SDLCALL SDL_LowerBlitScaled + (SDL_Surface * src, SDL_Rect * srcrect, + SDL_Surface * dst, SDL_Rect * dstrect); + +/** + * Set the YUV conversion mode + * + * \since This function is available since SDL 2.0.8. + */ +extern DECLSPEC void SDLCALL SDL_SetYUVConversionMode(SDL_YUV_CONVERSION_MODE mode); + +/** + * Get the YUV conversion mode + * + * \since This function is available since SDL 2.0.8. + */ +extern DECLSPEC SDL_YUV_CONVERSION_MODE SDLCALL SDL_GetYUVConversionMode(void); + +/** + * Get the YUV conversion mode, returning the correct mode for the resolution + * when the current conversion mode is SDL_YUV_CONVERSION_AUTOMATIC + * + * \since This function is available since SDL 2.0.8. + */ +extern DECLSPEC SDL_YUV_CONVERSION_MODE SDLCALL SDL_GetYUVConversionModeForResolution(int width, int height); + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include "close_code.h" + +#endif /* SDL_surface_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/third_party/tlRender-install-Release/include/SDL2/SDL_system.h b/third_party/tlRender-install-Release/include/SDL2/SDL_system.h new file mode 100644 index 00000000..2f7a236f --- /dev/null +++ b/third_party/tlRender-install-Release/include/SDL2/SDL_system.h @@ -0,0 +1,642 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2025 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +/** + * # CategorySystem + * + * Include file for platform specific SDL API functions + */ + +#ifndef SDL_system_h_ +#define SDL_system_h_ + +#include "SDL_stdinc.h" +#include "SDL_keyboard.h" +#include "SDL_render.h" +#include "SDL_video.h" + +#include "begin_code.h" +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + + +/* Platform specific functions for Windows */ +#if defined(__WIN32__) || defined(__GDK__) + +typedef void (SDLCALL * SDL_WindowsMessageHook)(void *userdata, void *hWnd, unsigned int message, Uint64 wParam, Sint64 lParam); + +/** + * Set a callback for every Windows message, run before TranslateMessage(). + * + * \param callback The SDL_WindowsMessageHook function to call. + * \param userdata a pointer to pass to every iteration of `callback`. + * + * \since This function is available since SDL 2.0.4. + */ +extern DECLSPEC void SDLCALL SDL_SetWindowsMessageHook(SDL_WindowsMessageHook callback, void *userdata); + +#endif /* defined(__WIN32__) || defined(__GDK__) */ + +#if defined(__WIN32__) || defined(__WINGDK__) + +/** + * Get the D3D9 adapter index that matches the specified display index. + * + * The returned adapter index can be passed to `IDirect3D9::CreateDevice` and + * controls on which monitor a full screen application will appear. + * + * \param displayIndex the display index for which to get the D3D9 adapter + * index. + * \returns the D3D9 adapter index on success or a negative error code on + * failure; call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.1. + */ +extern DECLSPEC int SDLCALL SDL_Direct3D9GetAdapterIndex( int displayIndex ); + +typedef struct IDirect3DDevice9 IDirect3DDevice9; + +/** + * Get the D3D9 device associated with a renderer. + * + * Once you are done using the device, you should release it to avoid a + * resource leak. + * + * \param renderer the renderer from which to get the associated D3D device. + * \returns the D3D9 device associated with given renderer or NULL if it is + * not a D3D9 renderer; call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.1. + */ +extern DECLSPEC IDirect3DDevice9* SDLCALL SDL_RenderGetD3D9Device(SDL_Renderer * renderer); + +typedef struct ID3D11Device ID3D11Device; + +/** + * Get the D3D11 device associated with a renderer. + * + * Once you are done using the device, you should release it to avoid a + * resource leak. + * + * \param renderer the renderer from which to get the associated D3D11 device. + * \returns the D3D11 device associated with given renderer or NULL if it is + * not a D3D11 renderer; call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.16. + */ +extern DECLSPEC ID3D11Device* SDLCALL SDL_RenderGetD3D11Device(SDL_Renderer * renderer); + +#endif /* defined(__WIN32__) || defined(__WINGDK__) */ + +#if defined(__WIN32__) || defined(__GDK__) + +typedef struct ID3D12Device ID3D12Device; + +/** + * Get the D3D12 device associated with a renderer. + * + * Once you are done using the device, you should release it to avoid a + * resource leak. + * + * \param renderer the renderer from which to get the associated D3D12 device. + * \returns the D3D12 device associated with given renderer or NULL if it is + * not a D3D12 renderer; call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.24.0. + */ +extern DECLSPEC ID3D12Device* SDLCALL SDL_RenderGetD3D12Device(SDL_Renderer* renderer); + +#endif /* defined(__WIN32__) || defined(__GDK__) */ + +#if defined(__WIN32__) || defined(__WINGDK__) + +/** + * Get the DXGI Adapter and Output indices for the specified display index. + * + * The DXGI Adapter and Output indices can be passed to `EnumAdapters` and + * `EnumOutputs` respectively to get the objects required to create a DX10 or + * DX11 device and swap chain. + * + * Before SDL 2.0.4 this function did not return a value. Since SDL 2.0.4 it + * returns an SDL_bool. + * + * \param displayIndex the display index for which to get both indices. + * \param adapterIndex a pointer to be filled in with the adapter index. + * \param outputIndex a pointer to be filled in with the output index. + * \returns SDL_TRUE on success or SDL_FALSE on failure; call SDL_GetError() + * for more information. + * + * \since This function is available since SDL 2.0.2. + */ +extern DECLSPEC SDL_bool SDLCALL SDL_DXGIGetOutputInfo( int displayIndex, int *adapterIndex, int *outputIndex ); + +#endif /* defined(__WIN32__) || defined(__WINGDK__) */ + +/* Platform specific functions for Linux */ +#ifdef __LINUX__ + +/** + * Sets the UNIX nice value for a thread. + * + * This uses setpriority() if possible, and RealtimeKit if available. + * + * \param threadID the Unix thread ID to change priority of. + * \param priority The new, Unix-specific, priority value. + * \returns 0 on success, or -1 on error. + * + * \since This function is available since SDL 2.0.9. + */ +extern DECLSPEC int SDLCALL SDL_LinuxSetThreadPriority(Sint64 threadID, int priority); + +/** + * Sets the priority (not nice level) and scheduling policy for a thread. + * + * This uses setpriority() if possible, and RealtimeKit if available. + * + * \param threadID The Unix thread ID to change priority of. + * \param sdlPriority The new SDL_ThreadPriority value. + * \param schedPolicy The new scheduling policy (SCHED_FIFO, SCHED_RR, + * SCHED_OTHER, etc...). + * \returns 0 on success, or -1 on error. + * + * \since This function is available since SDL 2.0.18. + */ +extern DECLSPEC int SDLCALL SDL_LinuxSetThreadPriorityAndPolicy(Sint64 threadID, int sdlPriority, int schedPolicy); + +#endif /* __LINUX__ */ + +/* Platform specific functions for iOS */ +#ifdef __IPHONEOS__ + +typedef void (SDLCALL *SDL_iOSAnimationCallback)(void*); + +/** + * Use this function to set the animation callback on Apple iOS. + * + * The function prototype for `callback` is: + * + * ```c + * void callback(void* callbackParam); + * ``` + * + * Where its parameter, `callbackParam`, is what was passed as `callbackParam` + * to SDL_iPhoneSetAnimationCallback(). + * + * This function is only available on Apple iOS. + * + * For more information see: + * https://github.com/libsdl-org/SDL/blob/main/docs/README-ios.md + * + * This functions is also accessible using the macro + * SDL_iOSSetAnimationCallback() since SDL 2.0.4. + * + * \param window the window for which the animation callback should be set. + * \param interval the number of frames after which **callback** will be + * called. + * \param callback the function to call for every frame. + * \param callbackParam a pointer that is passed to `callback`. + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_iPhoneSetEventPump + */ +extern DECLSPEC int SDLCALL SDL_iPhoneSetAnimationCallback(SDL_Window * window, int interval, SDL_iOSAnimationCallback callback, void *callbackParam); + +#define SDL_iOSSetAnimationCallback(window, interval, callback, callbackParam) SDL_iPhoneSetAnimationCallback(window, interval, callback, callbackParam) + + +/** + * Use this function to enable or disable the SDL event pump on Apple iOS. + * + * This function is only available on Apple iOS. + * + * This functions is also accessible using the macro SDL_iOSSetEventPump() + * since SDL 2.0.4. + * + * \param enabled SDL_TRUE to enable the event pump, SDL_FALSE to disable it. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_iPhoneSetAnimationCallback + */ +extern DECLSPEC void SDLCALL SDL_iPhoneSetEventPump(SDL_bool enabled); + +#define SDL_iOSSetEventPump(enabled) SDL_iPhoneSetEventPump(enabled) + +/* end of iOS-specific functions. */ +#endif /* __IPHONEOS__ */ + + +/* Platform specific functions for Android */ +#ifdef __ANDROID__ + +/** + * Get the Android Java Native Interface Environment of the current thread. + * + * This is the JNIEnv one needs to access the Java virtual machine from native + * code, and is needed for many Android APIs to be usable from C. + * + * The prototype of the function in SDL's code actually declare a void* return + * type, even if the implementation returns a pointer to a JNIEnv. The + * rationale being that the SDL headers can avoid including jni.h. + * + * \returns a pointer to Java native interface object (JNIEnv) to which the + * current thread is attached, or 0 on error. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_AndroidGetActivity + */ +extern DECLSPEC void * SDLCALL SDL_AndroidGetJNIEnv(void); + +/** + * Retrieve the Java instance of the Android activity class. + * + * The prototype of the function in SDL's code actually declares a void* + * return type, even if the implementation returns a jobject. The rationale + * being that the SDL headers can avoid including jni.h. + * + * The jobject returned by the function is a local reference and must be + * released by the caller. See the PushLocalFrame() and PopLocalFrame() or + * DeleteLocalRef() functions of the Java native interface: + * + * https://docs.oracle.com/javase/1.5.0/docs/guide/jni/spec/functions.html + * + * \returns the jobject representing the instance of the Activity class of the + * Android application, or NULL on error. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_AndroidGetJNIEnv + */ +extern DECLSPEC void * SDLCALL SDL_AndroidGetActivity(void); + +/** + * Query Android API level of the current device. + * + * - API level 31: Android 12 + * - API level 30: Android 11 + * - API level 29: Android 10 + * - API level 28: Android 9 + * - API level 27: Android 8.1 + * - API level 26: Android 8.0 + * - API level 25: Android 7.1 + * - API level 24: Android 7.0 + * - API level 23: Android 6.0 + * - API level 22: Android 5.1 + * - API level 21: Android 5.0 + * - API level 20: Android 4.4W + * - API level 19: Android 4.4 + * - API level 18: Android 4.3 + * - API level 17: Android 4.2 + * - API level 16: Android 4.1 + * - API level 15: Android 4.0.3 + * - API level 14: Android 4.0 + * - API level 13: Android 3.2 + * - API level 12: Android 3.1 + * - API level 11: Android 3.0 + * - API level 10: Android 2.3.3 + * + * \returns the Android API level. + * + * \since This function is available since SDL 2.0.12. + */ +extern DECLSPEC int SDLCALL SDL_GetAndroidSDKVersion(void); + +/** + * Query if the application is running on Android TV. + * + * \returns SDL_TRUE if this is Android TV, SDL_FALSE otherwise. + * + * \since This function is available since SDL 2.0.8. + */ +extern DECLSPEC SDL_bool SDLCALL SDL_IsAndroidTV(void); + +/** + * Query if the application is running on a Chromebook. + * + * \returns SDL_TRUE if this is a Chromebook, SDL_FALSE otherwise. + * + * \since This function is available since SDL 2.0.9. + */ +extern DECLSPEC SDL_bool SDLCALL SDL_IsChromebook(void); + +/** + * Query if the application is running on a Samsung DeX docking station. + * + * \returns SDL_TRUE if this is a DeX docking station, SDL_FALSE otherwise. + * + * \since This function is available since SDL 2.0.9. + */ +extern DECLSPEC SDL_bool SDLCALL SDL_IsDeXMode(void); + +/** + * Trigger the Android system back button behavior. + * + * \since This function is available since SDL 2.0.9. + */ +extern DECLSPEC void SDLCALL SDL_AndroidBackButton(void); + +/** + * See the official Android developer guide for more information: + * http://developer.android.com/guide/topics/data/data-storage.html + */ +#define SDL_ANDROID_EXTERNAL_STORAGE_READ 0x01 +#define SDL_ANDROID_EXTERNAL_STORAGE_WRITE 0x02 + +/** + * Get the path used for internal storage for this application. + * + * This path is unique to your application and cannot be written to by other + * applications. + * + * Your internal storage path is typically: + * `/data/data/your.app.package/files`. + * + * \returns the path used for internal storage or NULL on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_AndroidGetExternalStorageState + */ +extern DECLSPEC const char * SDLCALL SDL_AndroidGetInternalStoragePath(void); + +/** + * Get the current state of external storage. + * + * The current state of external storage, a bitmask of these values: + * `SDL_ANDROID_EXTERNAL_STORAGE_READ`, `SDL_ANDROID_EXTERNAL_STORAGE_WRITE`. + * + * If external storage is currently unavailable, this will return 0. + * + * \returns the current state of external storage on success or 0 on failure; + * call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_AndroidGetExternalStoragePath + */ +extern DECLSPEC int SDLCALL SDL_AndroidGetExternalStorageState(void); + +/** + * Get the path used for external storage for this application. + * + * This path is unique to your application, but is public and can be written + * to by other applications. + * + * Your external storage path is typically: + * `/storage/sdcard0/Android/data/your.app.package/files`. + * + * \returns the path used for external storage for this application on success + * or NULL on failure; call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_AndroidGetExternalStorageState + */ +extern DECLSPEC const char * SDLCALL SDL_AndroidGetExternalStoragePath(void); + +/** + * Request permissions at runtime. + * + * This blocks the calling thread until the permission is granted or denied. + * + * \param permission The permission to request. + * \returns SDL_TRUE if the permission was granted, SDL_FALSE otherwise. + * + * \since This function is available since SDL 2.0.14. + */ +extern DECLSPEC SDL_bool SDLCALL SDL_AndroidRequestPermission(const char *permission); + +/** + * Shows an Android toast notification. + * + * Toasts are a sort of lightweight notification that are unique to Android. + * + * https://developer.android.com/guide/topics/ui/notifiers/toasts + * + * Shows toast in UI thread. + * + * For the `gravity` parameter, choose a value from here, or -1 if you don't + * have a preference: + * + * https://developer.android.com/reference/android/view/Gravity + * + * \param message text message to be shown. + * \param duration 0=short, 1=long. + * \param gravity where the notification should appear on the screen. + * \param xoffset set this parameter only when gravity >=0. + * \param yoffset set this parameter only when gravity >=0. + * \returns 0 if success, -1 if any error occurs. + * + * \since This function is available since SDL 2.0.16. + */ +extern DECLSPEC int SDLCALL SDL_AndroidShowToast(const char* message, int duration, int gravity, int xoffset, int yoffset); + +/** + * Send a user command to SDLActivity. + * + * Override "boolean onUnhandledMessage(Message msg)" to handle the message. + * + * \param command user command that must be greater or equal to 0x8000. + * \param param user parameter. + * + * \since This function is available since SDL 2.0.22. + */ +extern DECLSPEC int SDLCALL SDL_AndroidSendMessage(Uint32 command, int param); + +#endif /* __ANDROID__ */ + +/* Platform specific functions for WinRT */ +#ifdef __WINRT__ + +/** + * WinRT / Windows Phone path types + */ +typedef enum SDL_WinRT_Path +{ + /** \brief The installed app's root directory. + Files here are likely to be read-only. */ + SDL_WINRT_PATH_INSTALLED_LOCATION, + + /** \brief The app's local data store. Files may be written here */ + SDL_WINRT_PATH_LOCAL_FOLDER, + + /** \brief The app's roaming data store. Unsupported on Windows Phone. + Files written here may be copied to other machines via a network + connection. + */ + SDL_WINRT_PATH_ROAMING_FOLDER, + + /** \brief The app's temporary data store. Unsupported on Windows Phone. + Files written here may be deleted at any time. */ + SDL_WINRT_PATH_TEMP_FOLDER +} SDL_WinRT_Path; + + +/** + * WinRT Device Family + */ +typedef enum SDL_WinRT_DeviceFamily +{ + /** \brief Unknown family */ + SDL_WINRT_DEVICEFAMILY_UNKNOWN, + + /** \brief Desktop family*/ + SDL_WINRT_DEVICEFAMILY_DESKTOP, + + /** \brief Mobile family (for example smartphone) */ + SDL_WINRT_DEVICEFAMILY_MOBILE, + + /** \brief XBox family */ + SDL_WINRT_DEVICEFAMILY_XBOX, +} SDL_WinRT_DeviceFamily; + + +/** + * Retrieve a WinRT defined path on the local file system. + * + * Not all paths are available on all versions of Windows. This is especially + * true on Windows Phone. Check the documentation for the given SDL_WinRT_Path + * for more information on which path types are supported where. + * + * Documentation on most app-specific path types on WinRT can be found on + * MSDN, at the URL: + * + * https://msdn.microsoft.com/en-us/library/windows/apps/hh464917.aspx + * + * \param pathType the type of path to retrieve, one of SDL_WinRT_Path. + * \returns a UCS-2 string (16-bit, wide-char) containing the path, or NULL if + * the path is not available for any reason; call SDL_GetError() for + * more information. + * + * \since This function is available since SDL 2.0.3. + * + * \sa SDL_WinRTGetFSPathUTF8 + */ +extern DECLSPEC const wchar_t * SDLCALL SDL_WinRTGetFSPathUNICODE(SDL_WinRT_Path pathType); + +/** + * Retrieve a WinRT defined path on the local file system. + * + * Not all paths are available on all versions of Windows. This is especially + * true on Windows Phone. Check the documentation for the given SDL_WinRT_Path + * for more information on which path types are supported where. + * + * Documentation on most app-specific path types on WinRT can be found on + * MSDN, at the URL: + * + * https://msdn.microsoft.com/en-us/library/windows/apps/hh464917.aspx + * + * \param pathType the type of path to retrieve, one of SDL_WinRT_Path. + * \returns a UTF-8 string (8-bit, multi-byte) containing the path, or NULL if + * the path is not available for any reason; call SDL_GetError() for + * more information. + * + * \since This function is available since SDL 2.0.3. + * + * \sa SDL_WinRTGetFSPathUNICODE + */ +extern DECLSPEC const char * SDLCALL SDL_WinRTGetFSPathUTF8(SDL_WinRT_Path pathType); + +/** + * Detects the device family of WinRT platform at runtime. + * + * \returns a value from the SDL_WinRT_DeviceFamily enum. + * + * \since This function is available since SDL 2.0.8. + */ +extern DECLSPEC SDL_WinRT_DeviceFamily SDLCALL SDL_WinRTGetDeviceFamily(); + +#endif /* __WINRT__ */ + +/** + * Query if the current device is a tablet. + * + * If SDL can't determine this, it will return SDL_FALSE. + * + * \returns SDL_TRUE if the device is a tablet, SDL_FALSE otherwise. + * + * \since This function is available since SDL 2.0.9. + */ +extern DECLSPEC SDL_bool SDLCALL SDL_IsTablet(void); + +/* Functions used by iOS application delegates to notify SDL about state changes */ +extern DECLSPEC void SDLCALL SDL_OnApplicationWillTerminate(void); +extern DECLSPEC void SDLCALL SDL_OnApplicationDidReceiveMemoryWarning(void); +extern DECLSPEC void SDLCALL SDL_OnApplicationWillResignActive(void); +extern DECLSPEC void SDLCALL SDL_OnApplicationDidEnterBackground(void); +extern DECLSPEC void SDLCALL SDL_OnApplicationWillEnterForeground(void); +extern DECLSPEC void SDLCALL SDL_OnApplicationDidBecomeActive(void); +#ifdef __IPHONEOS__ +extern DECLSPEC void SDLCALL SDL_OnApplicationDidChangeStatusBarOrientation(void); +#endif + +/* Functions used only by GDK */ +#if defined(__GDK__) +typedef struct XTaskQueueObject *XTaskQueueHandle; +typedef struct XUser *XUserHandle; + +/** + * Gets a reference to the global async task queue handle for GDK, + * initializing if needed. + * + * Once you are done with the task queue, you should call + * XTaskQueueCloseHandle to reduce the reference count to avoid a resource + * leak. + * + * \param outTaskQueue a pointer to be filled in with task queue handle. + * \returns 0 if success, -1 if any error occurs. + * + * \since This function is available since SDL 2.24.0. + */ +extern DECLSPEC int SDLCALL SDL_GDKGetTaskQueue(XTaskQueueHandle * outTaskQueue); + +/** + * Gets a reference to the default user handle for GDK. + * + * This is effectively a synchronous version of XUserAddAsync, which always + * prefers the default user and allows a sign-in UI. + * + * \param outUserHandle a pointer to be filled in with the default user + * handle. + * \returns 0 if success, -1 if any error occurs. + * + * \since This function is available since SDL 2.28.0. + */ +extern DECLSPEC int SDLCALL SDL_GDKGetDefaultUser(XUserHandle * outUserHandle); + +#endif + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include "close_code.h" + +#endif /* SDL_system_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/third_party/tlRender-install-Release/include/SDL2/SDL_syswm.h b/third_party/tlRender-install-Release/include/SDL2/SDL_syswm.h new file mode 100644 index 00000000..18f68732 --- /dev/null +++ b/third_party/tlRender-install-Release/include/SDL2/SDL_syswm.h @@ -0,0 +1,386 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2025 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +/* WIKI CATEGORY: SYSWM */ + +/* + * # CategorySYSWM + * + * Include file for SDL custom system window manager hooks. + * + * Your application has access to a special type of event SDL_SYSWMEVENT, + * which contains window-manager specific information and arrives whenever + * an unhandled window event occurs. This event is ignored by default, but + * you can enable it with SDL_EventState(). + */ + +#ifndef SDL_syswm_h_ +#define SDL_syswm_h_ + +#include "SDL_stdinc.h" +#include "SDL_error.h" +#include "SDL_video.h" +#include "SDL_version.h" + +struct SDL_SysWMinfo; + +#if !defined(SDL_PROTOTYPES_ONLY) + +#if defined(SDL_VIDEO_DRIVER_WINDOWS) +#ifndef WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN +#endif +#ifndef NOMINMAX /* don't define min() and max(). */ +#define NOMINMAX +#endif +#include +#endif + +#if defined(SDL_VIDEO_DRIVER_WINRT) +#include +#endif + +/* This is the structure for custom window manager events */ +#if defined(SDL_VIDEO_DRIVER_X11) +#if defined(__APPLE__) && defined(__MACH__) +/* conflicts with Quickdraw.h */ +#define Cursor X11Cursor +#endif + +#include +#include + +#if defined(__APPLE__) && defined(__MACH__) +/* matches the re-define above */ +#undef Cursor +#endif + +#endif /* defined(SDL_VIDEO_DRIVER_X11) */ + +#if defined(SDL_VIDEO_DRIVER_DIRECTFB) +#include +#endif + +#if defined(SDL_VIDEO_DRIVER_COCOA) +#ifdef __OBJC__ +@class NSWindow; +#else +typedef struct _NSWindow NSWindow; +#endif +#endif + +#if defined(SDL_VIDEO_DRIVER_UIKIT) +#ifdef __OBJC__ +#include +#else +typedef struct _UIWindow UIWindow; +typedef struct _UIViewController UIViewController; +#endif +typedef Uint32 GLuint; +#endif + +#if defined(SDL_VIDEO_VULKAN) || defined(SDL_VIDEO_METAL) +#define SDL_METALVIEW_TAG 255 +#endif + +#if defined(SDL_VIDEO_DRIVER_ANDROID) +typedef struct ANativeWindow ANativeWindow; +typedef void *EGLSurface; +#endif + +#if defined(SDL_VIDEO_DRIVER_VIVANTE) +#include "SDL_egl.h" +#endif + +#if defined(SDL_VIDEO_DRIVER_OS2) +#define INCL_WIN +#include +#endif +#endif /* SDL_PROTOTYPES_ONLY */ + +#if defined(SDL_VIDEO_DRIVER_KMSDRM) +struct gbm_device; +#endif + + +#include "begin_code.h" +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +#if !defined(SDL_PROTOTYPES_ONLY) + +/** + * These are the various supported windowing subsystems + */ +typedef enum SDL_SYSWM_TYPE +{ + SDL_SYSWM_UNKNOWN, + SDL_SYSWM_WINDOWS, + SDL_SYSWM_X11, + SDL_SYSWM_DIRECTFB, + SDL_SYSWM_COCOA, + SDL_SYSWM_UIKIT, + SDL_SYSWM_WAYLAND, + SDL_SYSWM_MIR, /* no longer available, left for API/ABI compatibility. Remove in 2.1! */ + SDL_SYSWM_WINRT, + SDL_SYSWM_ANDROID, + SDL_SYSWM_VIVANTE, + SDL_SYSWM_OS2, + SDL_SYSWM_HAIKU, + SDL_SYSWM_KMSDRM, + SDL_SYSWM_RISCOS +} SDL_SYSWM_TYPE; + +/** + * The custom event structure. + */ +struct SDL_SysWMmsg +{ + SDL_version version; + SDL_SYSWM_TYPE subsystem; + union + { +#if defined(SDL_VIDEO_DRIVER_WINDOWS) + struct { + HWND hwnd; /**< The window for the message */ + UINT msg; /**< The type of message */ + WPARAM wParam; /**< WORD message parameter */ + LPARAM lParam; /**< LONG message parameter */ + } win; +#endif +#if defined(SDL_VIDEO_DRIVER_X11) + struct { + XEvent event; + } x11; +#endif +#if defined(SDL_VIDEO_DRIVER_DIRECTFB) + struct { + DFBEvent event; + } dfb; +#endif +#if defined(SDL_VIDEO_DRIVER_COCOA) + struct + { + /* Latest version of Xcode clang complains about empty structs in C v. C++: + error: empty struct has size 0 in C, size 1 in C++ + */ + int dummy; + /* No Cocoa window events yet */ + } cocoa; +#endif +#if defined(SDL_VIDEO_DRIVER_UIKIT) + struct + { + int dummy; + /* No UIKit window events yet */ + } uikit; +#endif +#if defined(SDL_VIDEO_DRIVER_VIVANTE) + struct + { + int dummy; + /* No Vivante window events yet */ + } vivante; +#endif +#if defined(SDL_VIDEO_DRIVER_OS2) + struct + { + BOOL fFrame; /**< TRUE if hwnd is a frame window */ + HWND hwnd; /**< The window receiving the message */ + ULONG msg; /**< The message identifier */ + MPARAM mp1; /**< The first first message parameter */ + MPARAM mp2; /**< The second first message parameter */ + } os2; +#endif + /* Can't have an empty union */ + int dummy; + } msg; +}; + +/** + * The custom window manager information structure. + * + * When this structure is returned, it holds information about which low level + * system it is using, and will be one of SDL_SYSWM_TYPE. + */ +struct SDL_SysWMinfo +{ + SDL_version version; + SDL_SYSWM_TYPE subsystem; + union + { +#if defined(SDL_VIDEO_DRIVER_WINDOWS) + struct + { + HWND window; /**< The window handle */ + HDC hdc; /**< The window device context */ + HINSTANCE hinstance; /**< The instance handle */ + } win; +#endif +#if defined(SDL_VIDEO_DRIVER_WINRT) + struct + { + IInspectable * window; /**< The WinRT CoreWindow */ + } winrt; +#endif +#if defined(SDL_VIDEO_DRIVER_X11) + struct + { + Display *display; /**< The X11 display */ + Window window; /**< The X11 window */ + } x11; +#endif +#if defined(SDL_VIDEO_DRIVER_DIRECTFB) + struct + { + IDirectFB *dfb; /**< The directfb main interface */ + IDirectFBWindow *window; /**< The directfb window handle */ + IDirectFBSurface *surface; /**< The directfb client surface */ + } dfb; +#endif +#if defined(SDL_VIDEO_DRIVER_COCOA) + struct + { +#if defined(__OBJC__) && defined(__has_feature) + #if __has_feature(objc_arc) + NSWindow __unsafe_unretained *window; /**< The Cocoa window */ + #else + NSWindow *window; /**< The Cocoa window */ + #endif +#else + NSWindow *window; /**< The Cocoa window */ +#endif + } cocoa; +#endif +#if defined(SDL_VIDEO_DRIVER_UIKIT) + struct + { +#if defined(__OBJC__) && defined(__has_feature) + #if __has_feature(objc_arc) + UIWindow __unsafe_unretained *window; /**< The UIKit window */ + #else + UIWindow *window; /**< The UIKit window */ + #endif +#else + UIWindow *window; /**< The UIKit window */ +#endif + GLuint framebuffer; /**< The GL view's Framebuffer Object. It must be bound when rendering to the screen using GL. */ + GLuint colorbuffer; /**< The GL view's color Renderbuffer Object. It must be bound when SDL_GL_SwapWindow is called. */ + GLuint resolveFramebuffer; /**< The Framebuffer Object which holds the resolve color Renderbuffer, when MSAA is used. */ + } uikit; +#endif +#if defined(SDL_VIDEO_DRIVER_WAYLAND) + struct + { + struct wl_display *display; /**< Wayland display */ + struct wl_surface *surface; /**< Wayland surface */ + void *shell_surface; /**< DEPRECATED Wayland shell_surface (window manager handle) */ + struct wl_egl_window *egl_window; /**< Wayland EGL window (native window) */ + struct xdg_surface *xdg_surface; /**< Wayland xdg surface (window manager handle) */ + struct xdg_toplevel *xdg_toplevel; /**< Wayland xdg toplevel role */ + struct xdg_popup *xdg_popup; /**< Wayland xdg popup role */ + struct xdg_positioner *xdg_positioner; /**< Wayland xdg positioner, for popup */ + } wl; +#endif +#if defined(SDL_VIDEO_DRIVER_MIR) /* no longer available, left for API/ABI compatibility. Remove in 2.1! */ + struct + { + void *connection; /**< Mir display server connection */ + void *surface; /**< Mir surface */ + } mir; +#endif + +#if defined(SDL_VIDEO_DRIVER_ANDROID) + struct + { + ANativeWindow *window; + EGLSurface surface; + } android; +#endif + +#if defined(SDL_VIDEO_DRIVER_OS2) + struct + { + HWND hwnd; /**< The window handle */ + HWND hwndFrame; /**< The frame window handle */ + } os2; +#endif + +#if defined(SDL_VIDEO_DRIVER_VIVANTE) + struct + { + EGLNativeDisplayType display; + EGLNativeWindowType window; + } vivante; +#endif + +#if defined(SDL_VIDEO_DRIVER_KMSDRM) + struct + { + int dev_index; /**< Device index (ex: the X in /dev/dri/cardX) */ + int drm_fd; /**< DRM FD (unavailable on Vulkan windows) */ + struct gbm_device *gbm_dev; /**< GBM device (unavailable on Vulkan windows) */ + } kmsdrm; +#endif + + /* Make sure this union is always 64 bytes (8 64-bit pointers). */ + /* Be careful not to overflow this if you add a new target! */ + Uint8 dummy[64]; + } info; +}; + +#endif /* SDL_PROTOTYPES_ONLY */ + +typedef struct SDL_SysWMinfo SDL_SysWMinfo; + + +/** + * Get driver-specific information about a window. + * + * You must include SDL_syswm.h for the declaration of SDL_SysWMinfo. + * + * The caller must initialize the `info` structure's version by using + * `SDL_VERSION(&info.version)`, and then this function will fill in the rest + * of the structure with information about the given window. + * + * \param window the window about which information is being requested. + * \param info an SDL_SysWMinfo structure filled in with window information. + * \returns SDL_TRUE if the function is implemented and the `version` member + * of the `info` struct is valid, or SDL_FALSE if the information + * could not be retrieved; call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + */ +extern DECLSPEC SDL_bool SDLCALL SDL_GetWindowWMInfo(SDL_Window * window, + SDL_SysWMinfo * info); + + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include "close_code.h" + +#endif /* SDL_syswm_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/third_party/tlRender-install-Release/include/SDL2/SDL_test.h b/third_party/tlRender-install-Release/include/SDL2/SDL_test.h new file mode 100644 index 00000000..78a7e623 --- /dev/null +++ b/third_party/tlRender-install-Release/include/SDL2/SDL_test.h @@ -0,0 +1,69 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2025 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +/* + * \file SDL_test.h + * + * Include file for SDL test framework. + * + * This code is a part of the SDL2_test library, not the main SDL library. + */ + +#ifndef SDL_test_h_ +#define SDL_test_h_ + +#include "SDL.h" +#include "SDL_test_assert.h" +#include "SDL_test_common.h" +#include "SDL_test_compare.h" +#include "SDL_test_crc32.h" +#include "SDL_test_font.h" +#include "SDL_test_fuzzer.h" +#include "SDL_test_harness.h" +#include "SDL_test_images.h" +#include "SDL_test_log.h" +#include "SDL_test_md5.h" +#include "SDL_test_memory.h" +#include "SDL_test_random.h" + +#include "begin_code.h" +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/* Global definitions */ + +/* + * Note: Maximum size of SDLTest log message is less than SDL's limit + * to ensure we can fit additional information such as the timestamp. + */ +#define SDLTEST_MAX_LOGMESSAGE_LENGTH 3584 + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include "close_code.h" + +#endif /* SDL_test_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/third_party/tlRender-install-Release/include/SDL2/SDL_test_assert.h b/third_party/tlRender-install-Release/include/SDL2/SDL_test_assert.h new file mode 100644 index 00000000..ff3b6b6b --- /dev/null +++ b/third_party/tlRender-install-Release/include/SDL2/SDL_test_assert.h @@ -0,0 +1,105 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2025 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +/* + * \file SDL_test_assert.h + * + * Include file for SDL test framework. + * + * This code is a part of the SDL2_test library, not the main SDL library. + */ + +/* + * + * Assert API for test code and test cases + * + */ + +#ifndef SDL_test_assert_h_ +#define SDL_test_assert_h_ + +#include "begin_code.h" +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/* + * \brief Fails the assert. + */ +#define ASSERT_FAIL 0 + +/* + * \brief Passes the assert. + */ +#define ASSERT_PASS 1 + +/* + * \brief Assert that logs and break execution flow on failures. + * + * \param assertCondition Evaluated condition or variable to assert; fail (==0) or pass (!=0). + * \param assertDescription Message to log with the assert describing it. + */ +void SDLTest_Assert(int assertCondition, SDL_PRINTF_FORMAT_STRING const char *assertDescription, ...) SDL_PRINTF_VARARG_FUNC(2); + +/* + * \brief Assert for test cases that logs but does not break execution flow on failures. Updates assertion counters. + * + * \param assertCondition Evaluated condition or variable to assert; fail (==0) or pass (!=0). + * \param assertDescription Message to log with the assert describing it. + * + * \returns the assertCondition so it can be used to externally to break execution flow if desired. + */ +int SDLTest_AssertCheck(int assertCondition, SDL_PRINTF_FORMAT_STRING const char *assertDescription, ...) SDL_PRINTF_VARARG_FUNC(2); + +/* + * \brief Explicitly pass without checking an assertion condition. Updates assertion counter. + * + * \param assertDescription Message to log with the assert describing it. + */ +void SDLTest_AssertPass(SDL_PRINTF_FORMAT_STRING const char *assertDescription, ...) SDL_PRINTF_VARARG_FUNC(1); + +/* + * \brief Resets the assert summary counters to zero. + */ +void SDLTest_ResetAssertSummary(void); + +/* + * \brief Logs summary of all assertions (total, pass, fail) since last reset as INFO or ERROR. + */ +void SDLTest_LogAssertSummary(void); + + +/* + * \brief Converts the current assert summary state to a test result. + * + * \returns TEST_RESULT_PASSED, TEST_RESULT_FAILED, or TEST_RESULT_NO_ASSERT + */ +int SDLTest_AssertSummaryToTestResult(void); + +#ifdef __cplusplus +} +#endif +#include "close_code.h" + +#endif /* SDL_test_assert_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/third_party/tlRender-install-Release/include/SDL2/SDL_test_common.h b/third_party/tlRender-install-Release/include/SDL2/SDL_test_common.h new file mode 100644 index 00000000..64b5f83e --- /dev/null +++ b/third_party/tlRender-install-Release/include/SDL2/SDL_test_common.h @@ -0,0 +1,236 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2025 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +/* + * \file SDL_test_common.h + * + * Include file for SDL test framework. + * + * This code is a part of the SDL2_test library, not the main SDL library. + */ + +/* Ported from original test\common.h file. */ + +#ifndef SDL_test_common_h_ +#define SDL_test_common_h_ + +#include "SDL.h" + +#if defined(__PSP__) +#define DEFAULT_WINDOW_WIDTH 480 +#define DEFAULT_WINDOW_HEIGHT 272 +#elif defined(__VITA__) +#define DEFAULT_WINDOW_WIDTH 960 +#define DEFAULT_WINDOW_HEIGHT 544 +#else +#define DEFAULT_WINDOW_WIDTH 640 +#define DEFAULT_WINDOW_HEIGHT 480 +#endif + +#define VERBOSE_VIDEO 0x00000001 +#define VERBOSE_MODES 0x00000002 +#define VERBOSE_RENDER 0x00000004 +#define VERBOSE_EVENT 0x00000008 +#define VERBOSE_AUDIO 0x00000010 +#define VERBOSE_MOTION 0x00000020 + +typedef struct +{ + /* SDL init flags */ + char **argv; + Uint32 flags; + Uint32 verbose; + + /* Video info */ + const char *videodriver; + int display; + const char *window_title; + const char *window_icon; + Uint32 window_flags; + SDL_bool flash_on_focus_loss; + int window_x; + int window_y; + int window_w; + int window_h; + int window_minW; + int window_minH; + int window_maxW; + int window_maxH; + int logical_w; + int logical_h; + float scale; + int depth; + int refresh_rate; + int num_windows; + SDL_Window **windows; + + /* Renderer info */ + const char *renderdriver; + Uint32 render_flags; + SDL_bool skip_renderer; + SDL_Renderer **renderers; + SDL_Texture **targets; + + /* Audio info */ + const char *audiodriver; + SDL_AudioSpec audiospec; + + /* GL settings */ + int gl_red_size; + int gl_green_size; + int gl_blue_size; + int gl_alpha_size; + int gl_buffer_size; + int gl_depth_size; + int gl_stencil_size; + int gl_double_buffer; + int gl_accum_red_size; + int gl_accum_green_size; + int gl_accum_blue_size; + int gl_accum_alpha_size; + int gl_stereo; + int gl_multisamplebuffers; + int gl_multisamplesamples; + int gl_retained_backing; + int gl_accelerated; + int gl_major_version; + int gl_minor_version; + int gl_debug; + int gl_profile_mask; + + /* Additional fields added in 2.0.18 */ + SDL_Rect confine; + +} SDLTest_CommonState; + +#include "begin_code.h" +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/* Function prototypes */ + +/* + * \brief Parse command line parameters and create common state. + * + * \param argv Array of command line parameters + * \param flags Flags indicating which subsystem to initialize (i.e. SDL_INIT_VIDEO | SDL_INIT_AUDIO) + * + * \returns a newly allocated common state object. + */ +SDLTest_CommonState *SDLTest_CommonCreateState(char **argv, Uint32 flags); + +/* + * \brief Process one common argument. + * + * \param state The common state describing the test window to create. + * \param index The index of the argument to process in argv[]. + * + * \returns the number of arguments processed (i.e. 1 for --fullscreen, 2 for --video [videodriver], or -1 on error. + */ +int SDLTest_CommonArg(SDLTest_CommonState * state, int index); + + +/* + * \brief Logs command line usage info. + * + * This logs the appropriate command line options for the subsystems in use + * plus other common options, and then any application-specific options. + * This uses the SDL_Log() function and splits up output to be friendly to + * 80-character-wide terminals. + * + * \param state The common state describing the test window for the app. + * \param argv0 argv[0], as passed to main/SDL_main. + * \param options an array of strings for application specific options. The last element of the array should be NULL. + */ +void SDLTest_CommonLogUsage(SDLTest_CommonState * state, const char *argv0, const char **options); + +/* + * \brief Returns common usage information + * + * You should (probably) be using SDLTest_CommonLogUsage() instead, but this + * function remains for binary compatibility. Strings returned from this + * function are valid until SDLTest_CommonQuit() is called, in which case + * those strings' memory is freed and can no longer be used. + * + * \param state The common state describing the test window to create. + * \returns a string with usage information + */ +const char *SDLTest_CommonUsage(SDLTest_CommonState * state); + +/* + * \brief Open test window. + * + * \param state The common state describing the test window to create. + * + * \returns SDL_TRUE if initialization succeeded, false otherwise + */ +SDL_bool SDLTest_CommonInit(SDLTest_CommonState * state); + +/* + * \brief Easy argument handling when test app doesn't need any custom args. + * + * \param state The common state describing the test window to create. + * \param argc argc, as supplied to SDL_main + * \param argv argv, as supplied to SDL_main + * + * \returns SDL_FALSE if app should quit, true otherwise. + */ +SDL_bool SDLTest_CommonDefaultArgs(SDLTest_CommonState * state, const int argc, char **argv); + +/* + * \brief Common event handler for test windows. + * + * \param state The common state used to create test window. + * \param event The event to handle. + * \param done Flag indicating we are done. + * + */ +void SDLTest_CommonEvent(SDLTest_CommonState * state, SDL_Event * event, int *done); + +/* + * \brief Close test window. + * + * \param state The common state used to create test window. + * + */ +void SDLTest_CommonQuit(SDLTest_CommonState * state); + +/* + * \brief Draws various window information (position, size, etc.) to the renderer. + * + * \param renderer The renderer to draw to. + * \param window The window whose information should be displayed. + * \param usedHeight Returns the height used, so the caller can draw more below. + * + */ +void SDLTest_CommonDrawWindowInfo(SDL_Renderer * renderer, SDL_Window * window, int * usedHeight); + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include "close_code.h" + +#endif /* SDL_test_common_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/third_party/tlRender-install-Release/include/SDL2/SDL_test_compare.h b/third_party/tlRender-install-Release/include/SDL2/SDL_test_compare.h new file mode 100644 index 00000000..3fcb9359 --- /dev/null +++ b/third_party/tlRender-install-Release/include/SDL2/SDL_test_compare.h @@ -0,0 +1,69 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2025 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +/* + * \file SDL_test_compare.h + * + * Include file for SDL test framework. + * + * This code is a part of the SDL2_test library, not the main SDL library. + */ + +/* + + Defines comparison functions (i.e. for surfaces). + +*/ + +#ifndef SDL_test_compare_h_ +#define SDL_test_compare_h_ + +#include "SDL.h" + +#include "SDL_test_images.h" + +#include "begin_code.h" +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/* + * \brief Compares a surface and with reference image data for equality + * + * \param surface Surface used in comparison + * \param referenceSurface Test Surface used in comparison + * \param allowable_error Allowable difference (=sum of squared difference for each RGB component) in blending accuracy. + * + * \returns 0 if comparison succeeded, >0 (=number of pixels for which the comparison failed) if comparison failed, -1 if any of the surfaces were NULL, -2 if the surface sizes differ. + */ +int SDLTest_CompareSurfaces(SDL_Surface *surface, SDL_Surface *referenceSurface, int allowable_error); + + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include "close_code.h" + +#endif /* SDL_test_compare_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/third_party/tlRender-install-Release/include/SDL2/SDL_test_crc32.h b/third_party/tlRender-install-Release/include/SDL2/SDL_test_crc32.h new file mode 100644 index 00000000..1dbeef27 --- /dev/null +++ b/third_party/tlRender-install-Release/include/SDL2/SDL_test_crc32.h @@ -0,0 +1,124 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2025 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +/* + * \file SDL_test_crc32.h + * + * Include file for SDL test framework. + * + * This code is a part of the SDL2_test library, not the main SDL library. + */ + +/* + + Implements CRC32 calculations (default output is Perl String::CRC32 compatible). + +*/ + +#ifndef SDL_test_crc32_h_ +#define SDL_test_crc32_h_ + +#include "begin_code.h" +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + + +/* ------------ Definitions --------- */ + +/* Definition shared by all CRC routines */ + +#ifndef CrcUint32 + #define CrcUint32 unsigned int +#endif +#ifndef CrcUint8 + #define CrcUint8 unsigned char +#endif + +#ifdef ORIGINAL_METHOD + #define CRC32_POLY 0x04c11db7 /* AUTODIN II, Ethernet, & FDDI */ +#else + #define CRC32_POLY 0xEDB88320 /* Perl String::CRC32 compatible */ +#endif + +/* + * Data structure for CRC32 (checksum) computation + */ + typedef struct { + CrcUint32 crc32_table[256]; /* CRC table */ + } SDLTest_Crc32Context; + +/* ---------- Function Prototypes ------------- */ + +/* + * \brief Initialize the CRC context + * + * Note: The function initializes the crc table required for all crc calculations. + * + * \param crcContext pointer to context variable + * + * \returns 0 for OK, -1 on error + * + */ + int SDLTest_Crc32Init(SDLTest_Crc32Context * crcContext); + + +/* + * \brief calculate a crc32 from a data block + * + * \param crcContext pointer to context variable + * \param inBuf input buffer to checksum + * \param inLen length of input buffer + * \param crc32 pointer to Uint32 to store the final CRC into + * + * \returns 0 for OK, -1 on error + * + */ +int SDLTest_Crc32Calc(SDLTest_Crc32Context * crcContext, CrcUint8 *inBuf, CrcUint32 inLen, CrcUint32 *crc32); + +/* Same routine broken down into three steps */ +int SDLTest_Crc32CalcStart(SDLTest_Crc32Context * crcContext, CrcUint32 *crc32); +int SDLTest_Crc32CalcEnd(SDLTest_Crc32Context * crcContext, CrcUint32 *crc32); +int SDLTest_Crc32CalcBuffer(SDLTest_Crc32Context * crcContext, CrcUint8 *inBuf, CrcUint32 inLen, CrcUint32 *crc32); + + +/* + * \brief clean up CRC context + * + * \param crcContext pointer to context variable + * + * \returns 0 for OK, -1 on error + * +*/ + +int SDLTest_Crc32Done(SDLTest_Crc32Context * crcContext); + + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include "close_code.h" + +#endif /* SDL_test_crc32_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/third_party/tlRender-install-Release/include/SDL2/SDL_test_font.h b/third_party/tlRender-install-Release/include/SDL2/SDL_test_font.h new file mode 100644 index 00000000..0eade923 --- /dev/null +++ b/third_party/tlRender-install-Release/include/SDL2/SDL_test_font.h @@ -0,0 +1,168 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2025 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +/* + * \file SDL_test_font.h + * + * Include file for SDL test framework. + * + * This code is a part of the SDL2_test library, not the main SDL library. + */ + +#ifndef SDL_test_font_h_ +#define SDL_test_font_h_ + +#include "begin_code.h" +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/* Function prototypes */ + +#define FONT_CHARACTER_SIZE 8 +#define FONT_LINE_HEIGHT (FONT_CHARACTER_SIZE + 2) + +/* + * \brief Draw a string in the currently set font. + * + * \param renderer The renderer to draw on. + * \param x The X coordinate of the upper left corner of the character. + * \param y The Y coordinate of the upper left corner of the character. + * \param c The character to draw. + * + * \returns 0 on success, -1 on failure. + */ +int SDLTest_DrawCharacter(SDL_Renderer *renderer, int x, int y, Uint32 c); + +/* + * \brief Draw a UTF-8 string in the currently set font. + * + * The font currently only supports characters in the Basic Latin and Latin-1 Supplement sets. + * + * \param renderer The renderer to draw on. + * \param x The X coordinate of the upper left corner of the string. + * \param y The Y coordinate of the upper left corner of the string. + * \param s The string to draw. + * + * \returns 0 on success, -1 on failure. + */ +int SDLTest_DrawString(SDL_Renderer *renderer, int x, int y, const char *s); + +/* + * \brief Data used for multi-line text output + */ +typedef struct SDLTest_TextWindow +{ + SDL_Rect rect; + int current; + int numlines; + char **lines; +} SDLTest_TextWindow; + +/* + * \brief Create a multi-line text output window + * + * \param x The X coordinate of the upper left corner of the window. + * \param y The Y coordinate of the upper left corner of the window. + * \param w The width of the window (currently ignored) + * \param h The height of the window (currently ignored) + * + * \returns the new window, or NULL on failure. + * + * \since This function is available since SDL 2.24.0 + */ +SDLTest_TextWindow *SDLTest_TextWindowCreate(int x, int y, int w, int h); + +/* + * \brief Display a multi-line text output window + * + * This function should be called every frame to display the text + * + * \param textwin The text output window + * \param renderer The renderer to use for display + * + * \since This function is available since SDL 2.24.0 + */ +void SDLTest_TextWindowDisplay(SDLTest_TextWindow *textwin, SDL_Renderer *renderer); + +/* + * \brief Add text to a multi-line text output window + * + * Adds UTF-8 text to the end of the current text. The newline character starts a + * new line of text. The backspace character deletes the last character or, if the + * line is empty, deletes the line and goes to the end of the previous line. + * + * \param textwin The text output window + * \param fmt A printf() style format string + * \param ... additional parameters matching % tokens in the `fmt` string, if any + * + * \since This function is available since SDL 2.24.0 + */ +void SDLTest_TextWindowAddText(SDLTest_TextWindow *textwin, SDL_PRINTF_FORMAT_STRING const char *fmt, ...) SDL_PRINTF_VARARG_FUNC(2); + +/* + * \brief Add text to a multi-line text output window + * + * Adds UTF-8 text to the end of the current text. The newline character starts a + * new line of text. The backspace character deletes the last character or, if the + * line is empty, deletes the line and goes to the end of the previous line. + * + * \param textwin The text output window + * \param text The text to add to the window + * \param len The length, in bytes, of the text to add to the window + * + * \since This function is available since SDL 2.24.0 + */ +void SDLTest_TextWindowAddTextWithLength(SDLTest_TextWindow *textwin, const char *text, size_t len); + +/* + * \brief Clear the text in a multi-line text output window + * + * \param textwin The text output window + * + * \since This function is available since SDL 2.24.0 + */ +void SDLTest_TextWindowClear(SDLTest_TextWindow *textwin); + +/* + * \brief Free the storage associated with a multi-line text output window + * + * \param textwin The text output window + * + * \since This function is available since SDL 2.24.0 + */ +void SDLTest_TextWindowDestroy(SDLTest_TextWindow *textwin); + +/* + * \brief Cleanup textures used by font drawing functions. + */ +void SDLTest_CleanupTextDrawing(void); + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include "close_code.h" + +#endif /* SDL_test_font_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/third_party/tlRender-install-Release/include/SDL2/SDL_test_fuzzer.h b/third_party/tlRender-install-Release/include/SDL2/SDL_test_fuzzer.h new file mode 100644 index 00000000..c6978ac8 --- /dev/null +++ b/third_party/tlRender-install-Release/include/SDL2/SDL_test_fuzzer.h @@ -0,0 +1,387 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2025 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +/* + * \file SDL_test_fuzzer.h + * + * Include file for SDL test framework. + * + * This code is a part of the SDL2_test library, not the main SDL library. + */ + +/* + + Data generators for fuzzing test data in a reproducible way. + +*/ + +#ifndef SDL_test_fuzzer_h_ +#define SDL_test_fuzzer_h_ + +#include "begin_code.h" +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + + +/* + Based on GSOC code by Markus Kauppila +*/ + + +/* + * \file + * Note: The fuzzer implementation uses a static instance of random context + * internally which makes it thread-UNsafe. + */ + +/* + * Initializes the fuzzer for a test + * + * \param execKey Execution "Key" that initializes the random number generator uniquely for the test. + * + */ +void SDLTest_FuzzerInit(Uint64 execKey); + + +/* + * Returns a random Uint8 + * + * \returns a generated integer + */ +Uint8 SDLTest_RandomUint8(void); + +/* + * Returns a random Sint8 + * + * \returns a generated signed integer + */ +Sint8 SDLTest_RandomSint8(void); + + +/* + * Returns a random Uint16 + * + * \returns a generated integer + */ +Uint16 SDLTest_RandomUint16(void); + +/* + * Returns a random Sint16 + * + * \returns a generated signed integer + */ +Sint16 SDLTest_RandomSint16(void); + + +/* + * Returns a random integer + * + * \returns a generated integer + */ +Sint32 SDLTest_RandomSint32(void); + + +/* + * Returns a random positive integer + * + * \returns a generated integer + */ +Uint32 SDLTest_RandomUint32(void); + +/* + * Returns random Uint64. + * + * \returns a generated integer + */ +Uint64 SDLTest_RandomUint64(void); + + +/* + * Returns random Sint64. + * + * \returns a generated signed integer + */ +Sint64 SDLTest_RandomSint64(void); + +/* + * \returns a random float in range [0.0 - 1.0] + */ +float SDLTest_RandomUnitFloat(void); + +/* + * \returns a random double in range [0.0 - 1.0] + */ +double SDLTest_RandomUnitDouble(void); + +/* + * \returns a random float. + * + */ +float SDLTest_RandomFloat(void); + +/* + * \returns a random double. + * + */ +double SDLTest_RandomDouble(void); + +/* + * Returns a random boundary value for Uint8 within the given boundaries. + * Boundaries are inclusive, see the usage examples below. If validDomain + * is true, the function will only return valid boundaries, otherwise non-valid + * boundaries are also possible. + * If boundary1 > boundary2, the values are swapped + * + * Usage examples: + * RandomUint8BoundaryValue(10, 20, SDL_TRUE) returns 10, 11, 19 or 20 + * RandomUint8BoundaryValue(1, 20, SDL_FALSE) returns 0 or 21 + * RandomUint8BoundaryValue(0, 99, SDL_FALSE) returns 100 + * RandomUint8BoundaryValue(0, 255, SDL_FALSE) returns 0 (error set) + * + * \param boundary1 Lower boundary limit + * \param boundary2 Upper boundary limit + * \param validDomain Should the generated boundary be valid (=within the bounds) or not? + * + * \returns a random boundary value for the given range and domain or 0 with error set + */ +Uint8 SDLTest_RandomUint8BoundaryValue(Uint8 boundary1, Uint8 boundary2, SDL_bool validDomain); + +/* + * Returns a random boundary value for Uint16 within the given boundaries. + * Boundaries are inclusive, see the usage examples below. If validDomain + * is true, the function will only return valid boundaries, otherwise non-valid + * boundaries are also possible. + * If boundary1 > boundary2, the values are swapped + * + * Usage examples: + * RandomUint16BoundaryValue(10, 20, SDL_TRUE) returns 10, 11, 19 or 20 + * RandomUint16BoundaryValue(1, 20, SDL_FALSE) returns 0 or 21 + * RandomUint16BoundaryValue(0, 99, SDL_FALSE) returns 100 + * RandomUint16BoundaryValue(0, 0xFFFF, SDL_FALSE) returns 0 (error set) + * + * \param boundary1 Lower boundary limit + * \param boundary2 Upper boundary limit + * \param validDomain Should the generated boundary be valid (=within the bounds) or not? + * + * \returns a random boundary value for the given range and domain or 0 with error set + */ +Uint16 SDLTest_RandomUint16BoundaryValue(Uint16 boundary1, Uint16 boundary2, SDL_bool validDomain); + +/* + * Returns a random boundary value for Uint32 within the given boundaries. + * Boundaries are inclusive, see the usage examples below. If validDomain + * is true, the function will only return valid boundaries, otherwise non-valid + * boundaries are also possible. + * If boundary1 > boundary2, the values are swapped + * + * Usage examples: + * RandomUint32BoundaryValue(10, 20, SDL_TRUE) returns 10, 11, 19 or 20 + * RandomUint32BoundaryValue(1, 20, SDL_FALSE) returns 0 or 21 + * RandomUint32BoundaryValue(0, 99, SDL_FALSE) returns 100 + * RandomUint32BoundaryValue(0, 0xFFFFFFFF, SDL_FALSE) returns 0 (with error set) + * + * \param boundary1 Lower boundary limit + * \param boundary2 Upper boundary limit + * \param validDomain Should the generated boundary be valid (=within the bounds) or not? + * + * \returns a random boundary value for the given range and domain or 0 with error set + */ +Uint32 SDLTest_RandomUint32BoundaryValue(Uint32 boundary1, Uint32 boundary2, SDL_bool validDomain); + +/* + * Returns a random boundary value for Uint64 within the given boundaries. + * Boundaries are inclusive, see the usage examples below. If validDomain + * is true, the function will only return valid boundaries, otherwise non-valid + * boundaries are also possible. + * If boundary1 > boundary2, the values are swapped + * + * Usage examples: + * RandomUint64BoundaryValue(10, 20, SDL_TRUE) returns 10, 11, 19 or 20 + * RandomUint64BoundaryValue(1, 20, SDL_FALSE) returns 0 or 21 + * RandomUint64BoundaryValue(0, 99, SDL_FALSE) returns 100 + * RandomUint64BoundaryValue(0, 0xFFFFFFFFFFFFFFFF, SDL_FALSE) returns 0 (with error set) + * + * \param boundary1 Lower boundary limit + * \param boundary2 Upper boundary limit + * \param validDomain Should the generated boundary be valid (=within the bounds) or not? + * + * \returns a random boundary value for the given range and domain or 0 with error set + */ +Uint64 SDLTest_RandomUint64BoundaryValue(Uint64 boundary1, Uint64 boundary2, SDL_bool validDomain); + +/* + * Returns a random boundary value for Sint8 within the given boundaries. + * Boundaries are inclusive, see the usage examples below. If validDomain + * is true, the function will only return valid boundaries, otherwise non-valid + * boundaries are also possible. + * If boundary1 > boundary2, the values are swapped + * + * Usage examples: + * RandomSint8BoundaryValue(-10, 20, SDL_TRUE) returns -11, -10, 19 or 20 + * RandomSint8BoundaryValue(-100, -10, SDL_FALSE) returns -101 or -9 + * RandomSint8BoundaryValue(SINT8_MIN, 99, SDL_FALSE) returns 100 + * RandomSint8BoundaryValue(SINT8_MIN, SINT8_MAX, SDL_FALSE) returns SINT8_MIN (== error value) with error set + * + * \param boundary1 Lower boundary limit + * \param boundary2 Upper boundary limit + * \param validDomain Should the generated boundary be valid (=within the bounds) or not? + * + * \returns a random boundary value for the given range and domain or SINT8_MIN with error set + */ +Sint8 SDLTest_RandomSint8BoundaryValue(Sint8 boundary1, Sint8 boundary2, SDL_bool validDomain); + + +/* + * Returns a random boundary value for Sint16 within the given boundaries. + * Boundaries are inclusive, see the usage examples below. If validDomain + * is true, the function will only return valid boundaries, otherwise non-valid + * boundaries are also possible. + * If boundary1 > boundary2, the values are swapped + * + * Usage examples: + * RandomSint16BoundaryValue(-10, 20, SDL_TRUE) returns -11, -10, 19 or 20 + * RandomSint16BoundaryValue(-100, -10, SDL_FALSE) returns -101 or -9 + * RandomSint16BoundaryValue(SINT16_MIN, 99, SDL_FALSE) returns 100 + * RandomSint16BoundaryValue(SINT16_MIN, SINT16_MAX, SDL_FALSE) returns SINT16_MIN (== error value) with error set + * + * \param boundary1 Lower boundary limit + * \param boundary2 Upper boundary limit + * \param validDomain Should the generated boundary be valid (=within the bounds) or not? + * + * \returns a random boundary value for the given range and domain or SINT16_MIN with error set + */ +Sint16 SDLTest_RandomSint16BoundaryValue(Sint16 boundary1, Sint16 boundary2, SDL_bool validDomain); + +/* + * Returns a random boundary value for Sint32 within the given boundaries. + * Boundaries are inclusive, see the usage examples below. If validDomain + * is true, the function will only return valid boundaries, otherwise non-valid + * boundaries are also possible. + * If boundary1 > boundary2, the values are swapped + * + * Usage examples: + * RandomSint32BoundaryValue(-10, 20, SDL_TRUE) returns -11, -10, 19 or 20 + * RandomSint32BoundaryValue(-100, -10, SDL_FALSE) returns -101 or -9 + * RandomSint32BoundaryValue(SINT32_MIN, 99, SDL_FALSE) returns 100 + * RandomSint32BoundaryValue(SINT32_MIN, SINT32_MAX, SDL_FALSE) returns SINT32_MIN (== error value) + * + * \param boundary1 Lower boundary limit + * \param boundary2 Upper boundary limit + * \param validDomain Should the generated boundary be valid (=within the bounds) or not? + * + * \returns a random boundary value for the given range and domain or SINT32_MIN with error set + */ +Sint32 SDLTest_RandomSint32BoundaryValue(Sint32 boundary1, Sint32 boundary2, SDL_bool validDomain); + +/* + * Returns a random boundary value for Sint64 within the given boundaries. + * Boundaries are inclusive, see the usage examples below. If validDomain + * is true, the function will only return valid boundaries, otherwise non-valid + * boundaries are also possible. + * If boundary1 > boundary2, the values are swapped + * + * Usage examples: + * RandomSint64BoundaryValue(-10, 20, SDL_TRUE) returns -11, -10, 19 or 20 + * RandomSint64BoundaryValue(-100, -10, SDL_FALSE) returns -101 or -9 + * RandomSint64BoundaryValue(SINT64_MIN, 99, SDL_FALSE) returns 100 + * RandomSint64BoundaryValue(SINT64_MIN, SINT64_MAX, SDL_FALSE) returns SINT64_MIN (== error value) and error set + * + * \param boundary1 Lower boundary limit + * \param boundary2 Upper boundary limit + * \param validDomain Should the generated boundary be valid (=within the bounds) or not? + * + * \returns a random boundary value for the given range and domain or SINT64_MIN with error set + */ +Sint64 SDLTest_RandomSint64BoundaryValue(Sint64 boundary1, Sint64 boundary2, SDL_bool validDomain); + + +/* + * Returns integer in range [min, max] (inclusive). + * Min and max values can be negative values. + * If Max in smaller than min, then the values are swapped. + * Min and max are the same value, that value will be returned. + * + * \param min Minimum inclusive value of returned random number + * \param max Maximum inclusive value of returned random number + * + * \returns a generated random integer in range + */ +Sint32 SDLTest_RandomIntegerInRange(Sint32 min, Sint32 max); + + +/* + * Generates random null-terminated string. The minimum length for + * the string is 1 character, maximum length for the string is 255 + * characters and it can contain ASCII characters from 32 to 126. + * + * Note: Returned string needs to be deallocated. + * + * \returns a newly allocated random string; or NULL if length was invalid or string could not be allocated. + */ +char * SDLTest_RandomAsciiString(void); + + +/* + * Generates random null-terminated string. The maximum length for + * the string is defined by the maxLength parameter. + * String can contain ASCII characters from 32 to 126. + * + * Note: Returned string needs to be deallocated. + * + * \param maxLength The maximum length of the generated string. + * + * \returns a newly allocated random string; or NULL if maxLength was invalid or string could not be allocated. + */ +char * SDLTest_RandomAsciiStringWithMaximumLength(int maxLength); + + +/* + * Generates random null-terminated string. The length for + * the string is defined by the size parameter. + * String can contain ASCII characters from 32 to 126. + * + * Note: Returned string needs to be deallocated. + * + * \param size The length of the generated string + * + * \returns a newly allocated random string; or NULL if size was invalid or string could not be allocated. + */ +char * SDLTest_RandomAsciiStringOfSize(int size); + + +/* + * Get the invocation count for the fuzzer since last ...FuzzerInit. + * + * \returns the invocation count. + */ +int SDLTest_GetFuzzerInvocationCount(void); + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include "close_code.h" + +#endif /* SDL_test_fuzzer_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/third_party/tlRender-install-Release/include/SDL2/SDL_test_harness.h b/third_party/tlRender-install-Release/include/SDL2/SDL_test_harness.h new file mode 100644 index 00000000..cfd62e84 --- /dev/null +++ b/third_party/tlRender-install-Release/include/SDL2/SDL_test_harness.h @@ -0,0 +1,134 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2025 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +/* + * \file SDL_test_harness.h + * + * Include file for SDL test framework. + * + * This code is a part of the SDL2_test library, not the main SDL library. + */ + +/* + Defines types for test case definitions and the test execution harness API. + + Based on original GSOC code by Markus Kauppila +*/ + +#ifndef SDL_test_h_arness_h +#define SDL_test_h_arness_h + +#include "begin_code.h" +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + + +/* ! Definitions for test case structures */ +#define TEST_ENABLED 1 +#define TEST_DISABLED 0 + +/* ! Definition of all the possible test return values of the test case method */ +#define TEST_ABORTED -1 +#define TEST_STARTED 0 +#define TEST_COMPLETED 1 +#define TEST_SKIPPED 2 + +/* ! Definition of all the possible test results for the harness */ +#define TEST_RESULT_PASSED 0 +#define TEST_RESULT_FAILED 1 +#define TEST_RESULT_NO_ASSERT 2 +#define TEST_RESULT_SKIPPED 3 +#define TEST_RESULT_SETUP_FAILURE 4 + +/* !< Function pointer to a test case setup function (run before every test) */ +typedef void (*SDLTest_TestCaseSetUpFp)(void *arg); + +/* !< Function pointer to a test case function */ +typedef int (*SDLTest_TestCaseFp)(void *arg); + +/* !< Function pointer to a test case teardown function (run after every test) */ +typedef void (*SDLTest_TestCaseTearDownFp)(void *arg); + +/* + * Holds information about a single test case. + */ +typedef struct SDLTest_TestCaseReference { + /* !< Func2Stress */ + SDLTest_TestCaseFp testCase; + /* !< Short name (or function name) "Func2Stress" */ + const char *name; + /* !< Long name or full description "This test pushes func2() to the limit." */ + const char *description; + /* !< Set to TEST_ENABLED or TEST_DISABLED (test won't be run) */ + int enabled; +} SDLTest_TestCaseReference; + +/* + * Holds information about a test suite (multiple test cases). + */ +typedef struct SDLTest_TestSuiteReference { + /* !< "PlatformSuite" */ + const char *name; + /* !< The function that is run before each test. NULL skips. */ + SDLTest_TestCaseSetUpFp testSetUp; + /* !< The test cases that are run as part of the suite. Last item should be NULL. */ + const SDLTest_TestCaseReference **testCases; + /* !< The function that is run after each test. NULL skips. */ + SDLTest_TestCaseTearDownFp testTearDown; +} SDLTest_TestSuiteReference; + + +/* + * \brief Generates a random run seed string for the harness. The generated seed will contain alphanumeric characters (0-9A-Z). + * + * Note: The returned string needs to be deallocated by the caller. + * + * \param length The length of the seed string to generate + * + * \returns the generated seed string + */ +char *SDLTest_GenerateRunSeed(const int length); + +/* + * \brief Execute a test suite using the given run seed and execution key. + * + * \param testSuites Suites containing the test case. + * \param userRunSeed Custom run seed provided by user, or NULL to autogenerate one. + * \param userExecKey Custom execution key provided by user, or 0 to autogenerate one. + * \param filter Filter specification. NULL disables. Case sensitive. + * \param testIterations Number of iterations to run each test case. + * + * \returns the test run result: 0 when all tests passed, 1 if any tests failed. + */ +int SDLTest_RunSuites(SDLTest_TestSuiteReference *testSuites[], const char *userRunSeed, Uint64 userExecKey, const char *filter, int testIterations); + + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include "close_code.h" + +#endif /* SDL_test_h_arness_h */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/third_party/tlRender-install-Release/include/SDL2/SDL_test_images.h b/third_party/tlRender-install-Release/include/SDL2/SDL_test_images.h new file mode 100644 index 00000000..d593a315 --- /dev/null +++ b/third_party/tlRender-install-Release/include/SDL2/SDL_test_images.h @@ -0,0 +1,78 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2025 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +/* + * \file SDL_test_images.h + * + * Include file for SDL test framework. + * + * This code is a part of the SDL2_test library, not the main SDL library. + */ + +/* + + Defines some images for tests. + +*/ + +#ifndef SDL_test_images_h_ +#define SDL_test_images_h_ + +#include "SDL.h" + +#include "begin_code.h" +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/* + *Type for test images. + */ +typedef struct SDLTest_SurfaceImage_s { + int width; + int height; + unsigned int bytes_per_pixel; /* 3:RGB, 4:RGBA */ + const char *pixel_data; +} SDLTest_SurfaceImage_t; + +/* Test images */ +SDL_Surface *SDLTest_ImageBlit(void); +SDL_Surface *SDLTest_ImageBlitColor(void); +SDL_Surface *SDLTest_ImageBlitAlpha(void); +SDL_Surface *SDLTest_ImageBlitBlendAdd(void); +SDL_Surface *SDLTest_ImageBlitBlend(void); +SDL_Surface *SDLTest_ImageBlitBlendMod(void); +SDL_Surface *SDLTest_ImageBlitBlendNone(void); +SDL_Surface *SDLTest_ImageBlitBlendAll(void); +SDL_Surface *SDLTest_ImageFace(void); +SDL_Surface *SDLTest_ImagePrimitives(void); +SDL_Surface *SDLTest_ImagePrimitivesBlend(void); + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include "close_code.h" + +#endif /* SDL_test_images_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/third_party/tlRender-install-Release/include/SDL2/SDL_test_log.h b/third_party/tlRender-install-Release/include/SDL2/SDL_test_log.h new file mode 100644 index 00000000..6f7f6614 --- /dev/null +++ b/third_party/tlRender-install-Release/include/SDL2/SDL_test_log.h @@ -0,0 +1,67 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2025 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +/* + * \file SDL_test_log.h + * + * Include file for SDL test framework. + * + * This code is a part of the SDL2_test library, not the main SDL library. + */ + +/* + * + * Wrapper to log in the TEST category + * + */ + +#ifndef SDL_test_log_h_ +#define SDL_test_log_h_ + +#include "begin_code.h" +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/* + * \brief Prints given message with a timestamp in the TEST category and INFO priority. + * + * \param fmt Message to be logged + */ +void SDLTest_Log(SDL_PRINTF_FORMAT_STRING const char *fmt, ...) SDL_PRINTF_VARARG_FUNC(1); + +/* + * \brief Prints given message with a timestamp in the TEST category and the ERROR priority. + * + * \param fmt Message to be logged + */ +void SDLTest_LogError(SDL_PRINTF_FORMAT_STRING const char *fmt, ...) SDL_PRINTF_VARARG_FUNC(1); + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include "close_code.h" + +#endif /* SDL_test_log_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/third_party/tlRender-install-Release/include/SDL2/SDL_test_md5.h b/third_party/tlRender-install-Release/include/SDL2/SDL_test_md5.h new file mode 100644 index 00000000..edd79451 --- /dev/null +++ b/third_party/tlRender-install-Release/include/SDL2/SDL_test_md5.h @@ -0,0 +1,129 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2025 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +/* + * \file SDL_test_md5.h + * + * Include file for SDL test framework. + * + * This code is a part of the SDL2_test library, not the main SDL library. + */ + +/* + *********************************************************************** + ** Header file for implementation of MD5 ** + ** RSA Data Security, Inc. MD5 Message-Digest Algorithm ** + ** Created: 2/17/90 RLR ** + ** Revised: 12/27/90 SRD,AJ,BSK,JT Reference C version ** + ** Revised (for MD5): RLR 4/27/91 ** + ** -- G modified to have y&~z instead of y&z ** + ** -- FF, GG, HH modified to add in last register done ** + ** -- Access pattern: round 2 works mod 5, round 3 works mod 3 ** + ** -- distinct additive constant for each step ** + ** -- round 4 added, working mod 7 ** + *********************************************************************** +*/ + +/* + *********************************************************************** + ** Message-digest routines: ** + ** To form the message digest for a message M ** + ** (1) Initialize a context buffer mdContext using MD5Init ** + ** (2) Call MD5Update on mdContext and M ** + ** (3) Call MD5Final on mdContext ** + ** The message digest is now in mdContext->digest[0...15] ** + *********************************************************************** +*/ + +#ifndef SDL_test_md5_h_ +#define SDL_test_md5_h_ + +#include "begin_code.h" +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/* ------------ Definitions --------- */ + +/* typedef a 32-bit type */ + typedef unsigned long int MD5UINT4; + +/* Data structure for MD5 (Message-Digest) computation */ + typedef struct { + MD5UINT4 i[2]; /* number of _bits_ handled mod 2^64 */ + MD5UINT4 buf[4]; /* scratch buffer */ + unsigned char in[64]; /* input buffer */ + unsigned char digest[16]; /* actual digest after Md5Final call */ + } SDLTest_Md5Context; + +/* ---------- Function Prototypes ------------- */ + +/* + * \brief initialize the context + * + * \param mdContext pointer to context variable + * + * Note: The function initializes the message-digest context + * mdContext. Call before each new use of the context - + * all fields are set to zero. + */ + void SDLTest_Md5Init(SDLTest_Md5Context * mdContext); + + +/* + * \brief update digest from variable length data + * + * \param mdContext pointer to context variable + * \param inBuf pointer to data array/string + * \param inLen length of data array/string + * + * Note: The function updates the message-digest context to account + * for the presence of each of the characters inBuf[0..inLen-1] + * in the message whose digest is being computed. +*/ + + void SDLTest_Md5Update(SDLTest_Md5Context * mdContext, unsigned char *inBuf, + unsigned int inLen); + + +/* + * \brief complete digest computation + * + * \param mdContext pointer to context variable + * + * Note: The function terminates the message-digest computation and + * ends with the desired message digest in mdContext.digest[0..15]. + * Always call before using the digest[] variable. +*/ + + void SDLTest_Md5Final(SDLTest_Md5Context * mdContext); + + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include "close_code.h" + +#endif /* SDL_test_md5_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/third_party/tlRender-install-Release/include/SDL2/SDL_test_memory.h b/third_party/tlRender-install-Release/include/SDL2/SDL_test_memory.h new file mode 100644 index 00000000..e789fa80 --- /dev/null +++ b/third_party/tlRender-install-Release/include/SDL2/SDL_test_memory.h @@ -0,0 +1,63 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2025 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +/* + * \file SDL_test_memory.h + * + * Include file for SDL test framework. + * + * This code is a part of the SDL2_test library, not the main SDL library. + */ + +#ifndef SDL_test_memory_h_ +#define SDL_test_memory_h_ + +#include "begin_code.h" +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + + +/* + * \brief Start tracking SDL memory allocations + * + * \note This should be called before any other SDL functions for complete tracking coverage + */ +int SDLTest_TrackAllocations(void); + +/* + * \brief Print a log of any outstanding allocations + * + * \note This can be called after SDL_Quit() + */ +void SDLTest_LogAllocations(void); + + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include "close_code.h" + +#endif /* SDL_test_memory_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/third_party/tlRender-install-Release/include/SDL2/SDL_test_random.h b/third_party/tlRender-install-Release/include/SDL2/SDL_test_random.h new file mode 100644 index 00000000..05d6d3ee --- /dev/null +++ b/third_party/tlRender-install-Release/include/SDL2/SDL_test_random.h @@ -0,0 +1,115 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2025 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +/* + * \file SDL_test_random.h + * + * Include file for SDL test framework. + * + * This code is a part of the SDL2_test library, not the main SDL library. + */ + +/* + + A "32-bit Multiply with carry random number generator. Very fast. + Includes a list of recommended multipliers. + + multiply-with-carry generator: x(n) = a*x(n-1) + carry mod 2^32. + period: (a*2^31)-1 + +*/ + +#ifndef SDL_test_random_h_ +#define SDL_test_random_h_ + +#include "begin_code.h" +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/* --- Definitions */ + +/* + * Macros that return a random number in a specific format. + */ +#define SDLTest_RandomInt(c) ((int)SDLTest_Random(c)) + +/* + * Context structure for the random number generator state. + */ + typedef struct { + unsigned int a; + unsigned int x; + unsigned int c; + unsigned int ah; + unsigned int al; + } SDLTest_RandomContext; + + +/* --- Function prototypes */ + +/* + * \brief Initialize random number generator with two integers. + * + * Note: The random sequence of numbers returned by ...Random() is the + * same for the same two integers and has a period of 2^31. + * + * \param rndContext pointer to context structure + * \param xi integer that defines the random sequence + * \param ci integer that defines the random sequence + * + */ + void SDLTest_RandomInit(SDLTest_RandomContext * rndContext, unsigned int xi, + unsigned int ci); + +/* + * \brief Initialize random number generator based on current system time. + * + * \param rndContext pointer to context structure + * + */ + void SDLTest_RandomInitTime(SDLTest_RandomContext *rndContext); + + +/* + * \brief Initialize random number generator based on current system time. + * + * Note: ...RandomInit() or ...RandomInitTime() must have been called + * before using this function. + * + * \param rndContext pointer to context structure + * + * \returns a random number (32bit unsigned integer) + * + */ + unsigned int SDLTest_Random(SDLTest_RandomContext *rndContext); + + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include "close_code.h" + +#endif /* SDL_test_random_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/third_party/tlRender-install-Release/include/SDL2/SDL_thread.h b/third_party/tlRender-install-Release/include/SDL2/SDL_thread.h new file mode 100644 index 00000000..ac405d85 --- /dev/null +++ b/third_party/tlRender-install-Release/include/SDL2/SDL_thread.h @@ -0,0 +1,468 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2025 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +#ifndef SDL_thread_h_ +#define SDL_thread_h_ + +/** + * # CategoryThread + * + * Header for the SDL thread management routines. + */ + +#include "SDL_stdinc.h" +#include "SDL_error.h" + +/* Thread synchronization primitives */ +#include "SDL_atomic.h" +#include "SDL_mutex.h" + +#if (defined(__WIN32__) || defined(__GDK__)) && !defined(__WINRT__) +#include /* _beginthreadex() and _endthreadex() */ +#endif +#if defined(__OS2__) /* for _beginthread() and _endthread() */ +#ifndef __EMX__ +#include +#else +#include +#endif +#endif + +#include "begin_code.h" +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/* The SDL thread structure, defined in SDL_thread.c */ +struct SDL_Thread; +typedef struct SDL_Thread SDL_Thread; + +/* The SDL thread ID */ +typedef unsigned long SDL_threadID; + +/* Thread local storage ID, 0 is the invalid ID */ +typedef unsigned int SDL_TLSID; + +/** + * The SDL thread priority. + * + * SDL will make system changes as necessary in order to apply the thread + * priority. Code which attempts to control thread state related to priority + * should be aware that calling SDL_SetThreadPriority may alter such state. + * SDL_HINT_THREAD_PRIORITY_POLICY can be used to control aspects of this + * behavior. + * + * On many systems you require special privileges to set high or time critical + * priority. + */ +typedef enum SDL_ThreadPriority { + SDL_THREAD_PRIORITY_LOW, + SDL_THREAD_PRIORITY_NORMAL, + SDL_THREAD_PRIORITY_HIGH, + SDL_THREAD_PRIORITY_TIME_CRITICAL +} SDL_ThreadPriority; + +/** + * The function passed to SDL_CreateThread(). + * + * \param data what was passed as `data` to SDL_CreateThread(). + * \returns a value that can be reported through SDL_WaitThread(). + */ +typedef int (SDLCALL * SDL_ThreadFunction) (void *data); + + +#if (defined(__WIN32__) || defined(__GDK__)) && !defined(__WINRT__) +/** + * \file SDL_thread.h + * + * We compile SDL into a DLL. This means, that it's the DLL which + * creates a new thread for the calling process with the SDL_CreateThread() + * API. There is a problem with this, that only the RTL of the SDL2.DLL will + * be initialized for those threads, and not the RTL of the calling + * application! + * + * To solve this, we make a little hack here. + * + * We'll always use the caller's _beginthread() and _endthread() APIs to + * start a new thread. This way, if it's the SDL2.DLL which uses this API, + * then the RTL of SDL2.DLL will be used to create the new thread, and if it's + * the application, then the RTL of the application will be used. + * + * So, in short: + * Always use the _beginthread() and _endthread() of the calling runtime + * library! + */ +#define SDL_PASSED_BEGINTHREAD_ENDTHREAD + +typedef uintptr_t (__cdecl * pfnSDL_CurrentBeginThread) + (void *, unsigned, unsigned (__stdcall *func)(void *), + void * /*arg*/, unsigned, unsigned * /* threadID */); +typedef void (__cdecl * pfnSDL_CurrentEndThread) (unsigned code); + +#ifndef SDL_beginthread +#define SDL_beginthread _beginthreadex +#endif +#ifndef SDL_endthread +#define SDL_endthread _endthreadex +#endif + +extern DECLSPEC SDL_Thread *SDLCALL +SDL_CreateThread(SDL_ThreadFunction fn, const char *name, void *data, + pfnSDL_CurrentBeginThread pfnBeginThread, + pfnSDL_CurrentEndThread pfnEndThread); + +extern DECLSPEC SDL_Thread *SDLCALL +SDL_CreateThreadWithStackSize(SDL_ThreadFunction fn, + const char *name, const size_t stacksize, void *data, + pfnSDL_CurrentBeginThread pfnBeginThread, + pfnSDL_CurrentEndThread pfnEndThread); + + +#if defined(SDL_CreateThread) && SDL_DYNAMIC_API +#undef SDL_CreateThread +#define SDL_CreateThread(fn, name, data) SDL_CreateThread_REAL(fn, name, data, (pfnSDL_CurrentBeginThread)SDL_beginthread, (pfnSDL_CurrentEndThread)SDL_endthread) +#undef SDL_CreateThreadWithStackSize +#define SDL_CreateThreadWithStackSize(fn, name, stacksize, data) SDL_CreateThreadWithStackSize_REAL(fn, name, stacksize, data, (pfnSDL_CurrentBeginThread)SDL_beginthread, (pfnSDL_CurrentEndThread)SDL_endthread) +#else +#define SDL_CreateThread(fn, name, data) SDL_CreateThread(fn, name, data, (pfnSDL_CurrentBeginThread)SDL_beginthread, (pfnSDL_CurrentEndThread)SDL_endthread) +#define SDL_CreateThreadWithStackSize(fn, name, stacksize, data) SDL_CreateThreadWithStackSize(fn, name, stacksize, data, (pfnSDL_CurrentBeginThread)SDL_beginthread, (pfnSDL_CurrentEndThread)SDL_endthread) +#endif + +#elif defined(__OS2__) +/* + * just like the windows case above: We compile SDL2 + * into a dll with Watcom's runtime statically linked. + */ +#define SDL_PASSED_BEGINTHREAD_ENDTHREAD + +typedef int (*pfnSDL_CurrentBeginThread)(void (*func)(void *), void *, unsigned, void * /*arg*/); +typedef void (*pfnSDL_CurrentEndThread)(void); + +#ifndef SDL_beginthread +#define SDL_beginthread _beginthread +#endif +#ifndef SDL_endthread +#define SDL_endthread _endthread +#endif + +extern DECLSPEC SDL_Thread *SDLCALL +SDL_CreateThread(SDL_ThreadFunction fn, const char *name, void *data, + pfnSDL_CurrentBeginThread pfnBeginThread, + pfnSDL_CurrentEndThread pfnEndThread); +extern DECLSPEC SDL_Thread *SDLCALL +SDL_CreateThreadWithStackSize(SDL_ThreadFunction fn, const char *name, const size_t stacksize, void *data, + pfnSDL_CurrentBeginThread pfnBeginThread, + pfnSDL_CurrentEndThread pfnEndThread); + +#if defined(SDL_CreateThread) && SDL_DYNAMIC_API +#undef SDL_CreateThread +#define SDL_CreateThread(fn, name, data) SDL_CreateThread_REAL(fn, name, data, (pfnSDL_CurrentBeginThread)SDL_beginthread, (pfnSDL_CurrentEndThread)SDL_endthread) +#undef SDL_CreateThreadWithStackSize +#define SDL_CreateThreadWithStackSize(fn, name, stacksize, data) SDL_CreateThreadWithStackSize_REAL(fn, name, stacksize, data, (pfnSDL_CurrentBeginThread)SDL_beginthread, (pfnSDL_CurrentEndThread)SDL_endthread) +#else +#define SDL_CreateThread(fn, name, data) SDL_CreateThread(fn, name, data, (pfnSDL_CurrentBeginThread)SDL_beginthread, (pfnSDL_CurrentEndThread)SDL_endthread) +#define SDL_CreateThreadWithStackSize(fn, name, stacksize, data) SDL_CreateThreadWithStackSize(fn, name, stacksize, data, (pfnSDL_CurrentBeginThread)SDL_beginthread, (pfnSDL_CurrentEndThread)SDL_endthread) +#endif + +#else + +/** + * Create a new thread with a default stack size. + * + * This is equivalent to calling: + * + * ```c + * SDL_CreateThreadWithStackSize(fn, name, 0, data); + * ``` + * + * \param fn the SDL_ThreadFunction function to call in the new thread. + * \param name the name of the thread. + * \param data a pointer that is passed to `fn`. + * \returns an opaque pointer to the new thread object on success, NULL if the + * new thread could not be created; call SDL_GetError() for more + * information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CreateThreadWithStackSize + * \sa SDL_WaitThread + */ +extern DECLSPEC SDL_Thread *SDLCALL +SDL_CreateThread(SDL_ThreadFunction fn, const char *name, void *data); + +/** + * Create a new thread with a specific stack size. + * + * SDL makes an attempt to report `name` to the system, so that debuggers can + * display it. Not all platforms support this. + * + * Thread naming is a little complicated: Most systems have very small limits + * for the string length (Haiku has 32 bytes, Linux currently has 16, Visual + * C++ 6.0 has _nine_!), and possibly other arbitrary rules. You'll have to + * see what happens with your system's debugger. The name should be UTF-8 (but + * using the naming limits of C identifiers is a better bet). There are no + * requirements for thread naming conventions, so long as the string is + * null-terminated UTF-8, but these guidelines are helpful in choosing a name: + * + * https://stackoverflow.com/questions/149932/naming-conventions-for-threads + * + * If a system imposes requirements, SDL will try to munge the string for it + * (truncate, etc), but the original string contents will be available from + * SDL_GetThreadName(). + * + * The size (in bytes) of the new stack can be specified. Zero means "use the + * system default" which might be wildly different between platforms. x86 + * Linux generally defaults to eight megabytes, an embedded device might be a + * few kilobytes instead. You generally need to specify a stack that is a + * multiple of the system's page size (in many cases, this is 4 kilobytes, but + * check your system documentation). + * + * In SDL 2.1, stack size will be folded into the original SDL_CreateThread + * function, but for backwards compatibility, this is currently a separate + * function. + * + * \param fn the SDL_ThreadFunction function to call in the new thread. + * \param name the name of the thread. + * \param stacksize the size, in bytes, to allocate for the new thread stack. + * \param data a pointer that is passed to `fn`. + * \returns an opaque pointer to the new thread object on success, NULL if the + * new thread could not be created; call SDL_GetError() for more + * information. + * + * \since This function is available since SDL 2.0.9. + * + * \sa SDL_WaitThread + */ +extern DECLSPEC SDL_Thread *SDLCALL +SDL_CreateThreadWithStackSize(SDL_ThreadFunction fn, const char *name, const size_t stacksize, void *data); + +#endif + +/** + * Get the thread name as it was specified in SDL_CreateThread(). + * + * This is internal memory, not to be freed by the caller, and remains valid + * until the specified thread is cleaned up by SDL_WaitThread(). + * + * \param thread the thread to query. + * \returns a pointer to a UTF-8 string that names the specified thread, or + * NULL if it doesn't have a name. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CreateThread + */ +extern DECLSPEC const char *SDLCALL SDL_GetThreadName(SDL_Thread *thread); + +/** + * Get the thread identifier for the current thread. + * + * This thread identifier is as reported by the underlying operating system. + * If SDL is running on a platform that does not support threads the return + * value will always be zero. + * + * This function also returns a valid thread ID when called from the main + * thread. + * + * \returns the ID of the current thread. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetThreadID + */ +extern DECLSPEC SDL_threadID SDLCALL SDL_ThreadID(void); + +/** + * Get the thread identifier for the specified thread. + * + * This thread identifier is as reported by the underlying operating system. + * If SDL is running on a platform that does not support threads the return + * value will always be zero. + * + * \param thread the thread to query. + * \returns the ID of the specified thread, or the ID of the current thread if + * `thread` is NULL. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_ThreadID + */ +extern DECLSPEC SDL_threadID SDLCALL SDL_GetThreadID(SDL_Thread * thread); + +/** + * Set the priority for the current thread. + * + * Note that some platforms will not let you alter the priority (or at least, + * promote the thread to a higher priority) at all, and some require you to be + * an administrator account. Be prepared for this to fail. + * + * \param priority the SDL_ThreadPriority to set. + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + */ +extern DECLSPEC int SDLCALL SDL_SetThreadPriority(SDL_ThreadPriority priority); + +/** + * Wait for a thread to finish. + * + * Threads that haven't been detached will remain (as a "zombie") until this + * function cleans them up. Not doing so is a resource leak. + * + * Once a thread has been cleaned up through this function, the SDL_Thread + * that references it becomes invalid and should not be referenced again. As + * such, only one thread may call SDL_WaitThread() on another. + * + * The return code for the thread function is placed in the area pointed to by + * `status`, if `status` is not NULL. + * + * You may not wait on a thread that has been used in a call to + * SDL_DetachThread(). Use either that function or this one, but not both, or + * behavior is undefined. + * + * It is safe to pass a NULL thread to this function; it is a no-op. + * + * Note that the thread pointer is freed by this function and is not valid + * afterward. + * + * \param thread the SDL_Thread pointer that was returned from the + * SDL_CreateThread() call that started this thread. + * \param status pointer to an integer that will receive the value returned + * from the thread function by its 'return', or NULL to not + * receive such value back. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CreateThread + * \sa SDL_DetachThread + */ +extern DECLSPEC void SDLCALL SDL_WaitThread(SDL_Thread * thread, int *status); + +/** + * Let a thread clean up on exit without intervention. + * + * A thread may be "detached" to signify that it should not remain until + * another thread has called SDL_WaitThread() on it. Detaching a thread is + * useful for long-running threads that nothing needs to synchronize with or + * further manage. When a detached thread is done, it simply goes away. + * + * There is no way to recover the return code of a detached thread. If you + * need this, don't detach the thread and instead use SDL_WaitThread(). + * + * Once a thread is detached, you should usually assume the SDL_Thread isn't + * safe to reference again, as it will become invalid immediately upon the + * detached thread's exit, instead of remaining until someone has called + * SDL_WaitThread() to finally clean it up. As such, don't detach the same + * thread more than once. + * + * If a thread has already exited when passed to SDL_DetachThread(), it will + * stop waiting for a call to SDL_WaitThread() and clean up immediately. It is + * not safe to detach a thread that might be used with SDL_WaitThread(). + * + * You may not call SDL_WaitThread() on a thread that has been detached. Use + * either that function or this one, but not both, or behavior is undefined. + * + * It is safe to pass NULL to this function; it is a no-op. + * + * \param thread the SDL_Thread pointer that was returned from the + * SDL_CreateThread() call that started this thread. + * + * \since This function is available since SDL 2.0.2. + * + * \sa SDL_CreateThread + * \sa SDL_WaitThread + */ +extern DECLSPEC void SDLCALL SDL_DetachThread(SDL_Thread * thread); + +/** + * Create a piece of thread-local storage. + * + * This creates an identifier that is globally visible to all threads but + * refers to data that is thread-specific. + * + * \returns the newly created thread local storage identifier or 0 on error. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_TLSGet + * \sa SDL_TLSSet + */ +extern DECLSPEC SDL_TLSID SDLCALL SDL_TLSCreate(void); + +/** + * Get the current thread's value associated with a thread local storage ID. + * + * \param id the thread local storage ID. + * \returns the value associated with the ID for the current thread or NULL if + * no value has been set; call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_TLSCreate + * \sa SDL_TLSSet + */ +extern DECLSPEC void * SDLCALL SDL_TLSGet(SDL_TLSID id); + +typedef void (SDLCALL *SDL_TLSDestructorCallback)(void*); + +/** + * Set the current thread's value associated with a thread local storage ID. + * + * The function prototype for `destructor` is: + * + * ```c + * void destructor(void *value) + * ``` + * + * where its parameter `value` is what was passed as `value` to SDL_TLSSet(). + * + * \param id the thread local storage ID. + * \param value the value to associate with the ID for the current thread. + * \param destructor a function called when the thread exits, to free the + * value. + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_TLSCreate + * \sa SDL_TLSGet + */ +extern DECLSPEC int SDLCALL SDL_TLSSet(SDL_TLSID id, const void *value, SDL_TLSDestructorCallback destructor); + +/** + * Cleanup all TLS data for this thread. + * + * \since This function is available since SDL 2.0.16. + */ +extern DECLSPEC void SDLCALL SDL_TLSCleanup(void); + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include "close_code.h" + +#endif /* SDL_thread_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/third_party/tlRender-install-Release/include/SDL2/SDL_timer.h b/third_party/tlRender-install-Release/include/SDL2/SDL_timer.h new file mode 100644 index 00000000..60969690 --- /dev/null +++ b/third_party/tlRender-install-Release/include/SDL2/SDL_timer.h @@ -0,0 +1,222 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2025 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +#ifndef SDL_timer_h_ +#define SDL_timer_h_ + +/** + * # CategoryTimer + * + * Header for the SDL time management routines. + */ + +#include "SDL_stdinc.h" +#include "SDL_error.h" + +#include "begin_code.h" +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/** + * Get the number of milliseconds since SDL library initialization. + * + * This value wraps if the program runs for more than ~49 days. + * + * This function is not recommended as of SDL 2.0.18; use SDL_GetTicks64() + * instead, where the value doesn't wrap every ~49 days. There are places in + * SDL where we provide a 32-bit timestamp that can not change without + * breaking binary compatibility, though, so this function isn't officially + * deprecated. + * + * \returns an unsigned 32-bit value representing the number of milliseconds + * since the SDL library initialized. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_TICKS_PASSED + */ +extern DECLSPEC Uint32 SDLCALL SDL_GetTicks(void); + +/** + * Get the number of milliseconds since SDL library initialization. + * + * Note that you should not use the SDL_TICKS_PASSED macro with values + * returned by this function, as that macro does clever math to compensate for + * the 32-bit overflow every ~49 days that SDL_GetTicks() suffers from. 64-bit + * values from this function can be safely compared directly. + * + * For example, if you want to wait 100 ms, you could do this: + * + * ```c + * const Uint64 timeout = SDL_GetTicks64() + 100; + * while (SDL_GetTicks64() < timeout) { + * // ... do work until timeout has elapsed + * } + * ``` + * + * \returns an unsigned 64-bit value representing the number of milliseconds + * since the SDL library initialized. + * + * \since This function is available since SDL 2.0.18. + */ +extern DECLSPEC Uint64 SDLCALL SDL_GetTicks64(void); + +/** + * Compare 32-bit SDL ticks values, and return true if `A` has passed `B`. + * + * This should be used with results from SDL_GetTicks(), as this macro + * attempts to deal with the 32-bit counter wrapping back to zero every ~49 + * days, but should _not_ be used with SDL_GetTicks64(), which does not have + * that problem. + * + * For example, with SDL_GetTicks(), if you want to wait 100 ms, you could do + * this: + * + * ```c + * const Uint32 timeout = SDL_GetTicks() + 100; + * while (!SDL_TICKS_PASSED(SDL_GetTicks(), timeout)) { + * // ... do work until timeout has elapsed + * } + * ``` + * + * Note that this does not handle tick differences greater than 2^31 so take + * care when using the above kind of code with large timeout delays (tens of + * days). + */ +#define SDL_TICKS_PASSED(A, B) ((Sint32)((B) - (A)) <= 0) + +/** + * Get the current value of the high resolution counter. + * + * This function is typically used for profiling. + * + * The counter values are only meaningful relative to each other. Differences + * between values can be converted to times by using + * SDL_GetPerformanceFrequency(). + * + * \returns the current counter value. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetPerformanceFrequency + */ +extern DECLSPEC Uint64 SDLCALL SDL_GetPerformanceCounter(void); + +/** + * Get the count per second of the high resolution counter. + * + * \returns a platform-specific count per second. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetPerformanceCounter + */ +extern DECLSPEC Uint64 SDLCALL SDL_GetPerformanceFrequency(void); + +/** + * Wait a specified number of milliseconds before returning. + * + * This function waits a specified number of milliseconds before returning. It + * waits at least the specified time, but possibly longer due to OS + * scheduling. + * + * \param ms the number of milliseconds to delay. + * + * \since This function is available since SDL 2.0.0. + */ +extern DECLSPEC void SDLCALL SDL_Delay(Uint32 ms); + +/** + * Function prototype for the timer callback function. + * + * The callback function is passed the current timer interval and returns the + * next timer interval. If the returned value is the same as the one passed + * in, the periodic alarm continues, otherwise a new alarm is scheduled. If + * the callback returns 0, the periodic alarm is cancelled. + */ +typedef Uint32 (SDLCALL * SDL_TimerCallback) (Uint32 interval, void *param); + +/** + * Definition of the timer ID type. + */ +typedef int SDL_TimerID; + +/** + * Call a callback function at a future time. + * + * If you use this function, you must pass `SDL_INIT_TIMER` to SDL_Init(). + * + * The callback function is passed the current timer interval and the user + * supplied parameter from the SDL_AddTimer() call and should return the next + * timer interval. If the value returned from the callback is 0, the timer is + * canceled. + * + * The callback is run on a separate thread. + * + * Timers take into account the amount of time it took to execute the + * callback. For example, if the callback took 250 ms to execute and returned + * 1000 (ms), the timer would only wait another 750 ms before its next + * iteration. + * + * Timing may be inexact due to OS scheduling. Be sure to note the current + * time with SDL_GetTicks() or SDL_GetPerformanceCounter() in case your + * callback needs to adjust for variances. + * + * \param interval the timer delay, in milliseconds, passed to `callback`. + * \param callback the SDL_TimerCallback function to call when the specified + * `interval` elapses. + * \param param a pointer that is passed to `callback`. + * \returns a timer ID or 0 if an error occurs; call SDL_GetError() for more + * information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_RemoveTimer + */ +extern DECLSPEC SDL_TimerID SDLCALL SDL_AddTimer(Uint32 interval, + SDL_TimerCallback callback, + void *param); + +/** + * Remove a timer created with SDL_AddTimer(). + * + * \param id the ID of the timer to remove. + * \returns SDL_TRUE if the timer is removed or SDL_FALSE if the timer wasn't + * found. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_AddTimer + */ +extern DECLSPEC SDL_bool SDLCALL SDL_RemoveTimer(SDL_TimerID id); + + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include "close_code.h" + +#endif /* SDL_timer_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/third_party/tlRender-install-Release/include/SDL2/SDL_touch.h b/third_party/tlRender-install-Release/include/SDL2/SDL_touch.h new file mode 100644 index 00000000..80a0fef8 --- /dev/null +++ b/third_party/tlRender-install-Release/include/SDL2/SDL_touch.h @@ -0,0 +1,150 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2025 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +/** + * # CategoryTouch + * + * Include file for SDL touch event handling. + */ + +#ifndef SDL_touch_h_ +#define SDL_touch_h_ + +#include "SDL_stdinc.h" +#include "SDL_error.h" +#include "SDL_video.h" + +#include "begin_code.h" +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +typedef Sint64 SDL_TouchID; +typedef Sint64 SDL_FingerID; + +typedef enum +{ + SDL_TOUCH_DEVICE_INVALID = -1, + SDL_TOUCH_DEVICE_DIRECT, /* touch screen with window-relative coordinates */ + SDL_TOUCH_DEVICE_INDIRECT_ABSOLUTE, /* trackpad with absolute device coordinates */ + SDL_TOUCH_DEVICE_INDIRECT_RELATIVE /* trackpad with screen cursor-relative coordinates */ +} SDL_TouchDeviceType; + +typedef struct SDL_Finger +{ + SDL_FingerID id; + float x; + float y; + float pressure; +} SDL_Finger; + +/* Used as the device ID for mouse events simulated with touch input */ +#define SDL_TOUCH_MOUSEID ((Uint32)-1) + +/* Used as the SDL_TouchID for touch events simulated with mouse input */ +#define SDL_MOUSE_TOUCHID ((Sint64)-1) + + +/** + * Get the number of registered touch devices. + * + * On some platforms SDL first sees the touch device if it was actually used. + * Therefore SDL_GetNumTouchDevices() may return 0 although devices are + * available. After using all devices at least once the number will be + * correct. + * + * This was fixed for Android in SDL 2.0.1. + * + * \returns the number of registered touch devices. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetTouchDevice + */ +extern DECLSPEC int SDLCALL SDL_GetNumTouchDevices(void); + +/** + * Get the touch ID with the given index. + * + * \param index the touch device index. + * \returns the touch ID with the given index on success or 0 if the index is + * invalid; call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetNumTouchDevices + */ +extern DECLSPEC SDL_TouchID SDLCALL SDL_GetTouchDevice(int index); + +/** + * Get the touch device name as reported from the driver or NULL if the index + * is invalid. + * + * \since This function is available since SDL 2.0.22. + */ +extern DECLSPEC const char* SDLCALL SDL_GetTouchName(int index); + +/** + * Get the type of the given touch device. + * + * \since This function is available since SDL 2.0.10. + */ +extern DECLSPEC SDL_TouchDeviceType SDLCALL SDL_GetTouchDeviceType(SDL_TouchID touchID); + +/** + * Get the number of active fingers for a given touch device. + * + * \param touchID the ID of a touch device. + * \returns the number of active fingers for a given touch device on success + * or 0 on failure; call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetTouchFinger + */ +extern DECLSPEC int SDLCALL SDL_GetNumTouchFingers(SDL_TouchID touchID); + +/** + * Get the finger object for specified touch device ID and finger index. + * + * The returned resource is owned by SDL and should not be deallocated. + * + * \param touchID the ID of the requested touch device. + * \param index the index of the requested finger. + * \returns a pointer to the SDL_Finger object or NULL if no object at the + * given ID and index could be found. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_RecordGesture + */ +extern DECLSPEC SDL_Finger * SDLCALL SDL_GetTouchFinger(SDL_TouchID touchID, int index); + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include "close_code.h" + +#endif /* SDL_touch_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/third_party/tlRender-install-Release/include/SDL2/SDL_types.h b/third_party/tlRender-install-Release/include/SDL2/SDL_types.h new file mode 100644 index 00000000..cb3b4a8d --- /dev/null +++ b/third_party/tlRender-install-Release/include/SDL2/SDL_types.h @@ -0,0 +1,24 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2025 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +/* DEPRECATED */ + +#include "SDL_stdinc.h" diff --git a/third_party/tlRender-install-Release/include/SDL2/SDL_version.h b/third_party/tlRender-install-Release/include/SDL2/SDL_version.h new file mode 100644 index 00000000..b94e6d8b --- /dev/null +++ b/third_party/tlRender-install-Release/include/SDL2/SDL_version.h @@ -0,0 +1,205 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2025 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +/** + * # CategoryVersion + * + * This header defines the current SDL version. + */ + +#ifndef SDL_version_h_ +#define SDL_version_h_ + +#include "SDL_stdinc.h" + +#include "begin_code.h" +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/** + * Information about the version of SDL in use. + * + * Represents the library's version as three levels: major revision + * (increments with massive changes, additions, and enhancements), minor + * revision (increments with backwards-compatible changes to the major + * revision), and patchlevel (increments with fixes to the minor revision). + * + * \sa SDL_VERSION + * \sa SDL_GetVersion + */ +typedef struct SDL_version +{ + Uint8 major; /**< major version */ + Uint8 minor; /**< minor version */ + Uint8 patch; /**< update version */ +} SDL_version; + +/* Printable format: "%d.%d.%d", MAJOR, MINOR, PATCHLEVEL +*/ +#define SDL_MAJOR_VERSION 2 +#define SDL_MINOR_VERSION 32 +#define SDL_PATCHLEVEL 10 + +/** + * Macro to determine SDL version program was compiled against. + * + * This macro fills in a SDL_version structure with the version of the library + * you compiled against. This is determined by what header the compiler uses. + * Note that if you dynamically linked the library, you might have a slightly + * newer or older version at runtime. That version can be determined with + * SDL_GetVersion(), which, unlike SDL_VERSION(), is not a macro. + * + * \param x A pointer to a SDL_version struct to initialize. + * + * \sa SDL_version + * \sa SDL_GetVersion + */ +#define SDL_VERSION(x) \ +{ \ + (x)->major = SDL_MAJOR_VERSION; \ + (x)->minor = SDL_MINOR_VERSION; \ + (x)->patch = SDL_PATCHLEVEL; \ +} + +/* TODO: Remove this whole block in SDL 3 */ +#if SDL_MAJOR_VERSION < 3 + +/** + * This macro turns the version numbers into a numeric value: + * + * ``` + * (1,2,3) -> (1203) + * ``` + * + * This assumes that there will never be more than 100 patchlevels. + * + * In versions higher than 2.9.0, the minor version overflows into the + * thousands digit: for example, 2.23.0 is encoded as 4300, and 2.255.99 would + * be encoded as 25799. + * + * This macro will not be available in SDL 3.x. + */ +#define SDL_VERSIONNUM(X, Y, Z) \ + ((X)*1000 + (Y)*100 + (Z)) + +/** + * This is the version number macro for the current SDL version. + * + * In versions higher than 2.9.0, the minor version overflows into the + * thousands digit: for example, 2.23.0 is encoded as 4300. This macro will + * not be available in SDL 3.x. + * + * Deprecated, use SDL_VERSION_ATLEAST or SDL_VERSION instead. + */ +#define SDL_COMPILEDVERSION \ + SDL_VERSIONNUM(SDL_MAJOR_VERSION, SDL_MINOR_VERSION, SDL_PATCHLEVEL) +#endif /* SDL_MAJOR_VERSION < 3 */ + +/** + * This macro will evaluate to true if compiled with SDL at least X.Y.Z. + */ +#define SDL_VERSION_ATLEAST(X, Y, Z) \ + ((SDL_MAJOR_VERSION >= X) && \ + (SDL_MAJOR_VERSION > X || SDL_MINOR_VERSION >= Y) && \ + (SDL_MAJOR_VERSION > X || SDL_MINOR_VERSION > Y || SDL_PATCHLEVEL >= Z)) + +/** + * Get the version of SDL that is linked against your program. + * + * If you are linking to SDL dynamically, then it is possible that the current + * version will be different than the version you compiled against. This + * function returns the current version, while SDL_VERSION() is a macro that + * tells you what version you compiled with. + * + * This function may be called safely at any time, even before SDL_Init(). + * + * \param ver the SDL_version structure that contains the version information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetRevision + */ +extern DECLSPEC void SDLCALL SDL_GetVersion(SDL_version * ver); + +/** + * Get the code revision of SDL that is linked against your program. + * + * This value is the revision of the code you are linked with and may be + * different from the code you are compiling with, which is found in the + * constant SDL_REVISION. + * + * The revision is arbitrary string (a hash value) uniquely identifying the + * exact revision of the SDL library in use, and is only useful in comparing + * against other revisions. It is NOT an incrementing number. + * + * If SDL wasn't built from a git repository with the appropriate tools, this + * will return an empty string. + * + * Prior to SDL 2.0.16, before development moved to GitHub, this returned a + * hash for a Mercurial repository. + * + * You shouldn't use this function for anything but logging it for debugging + * purposes. The string is not intended to be reliable in any way. + * + * \returns an arbitrary string, uniquely identifying the exact revision of + * the SDL library in use. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetVersion + */ +extern DECLSPEC const char *SDLCALL SDL_GetRevision(void); + +/** + * Obsolete function, do not use. + * + * When SDL was hosted in a Mercurial repository, and was built carefully, + * this would return the revision number that the build was created from. This + * number was not reliable for several reasons, but more importantly, SDL is + * now hosted in a git repository, which does not offer numbers at all, only + * hashes. This function only ever returns zero now. Don't use it. + * + * Before SDL 2.0.16, this might have returned an unreliable, but non-zero + * number. + * + * \deprecated Use SDL_GetRevision() instead; if SDL was carefully built, it + * will return a git hash. + * + * \returns zero, always, in modern SDL releases. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetRevision + */ +extern SDL_DEPRECATED DECLSPEC int SDLCALL SDL_GetRevisionNumber(void); + + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include "close_code.h" + +#endif /* SDL_version_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/third_party/tlRender-install-Release/include/SDL2/SDL_video.h b/third_party/tlRender-install-Release/include/SDL2/SDL_video.h new file mode 100644 index 00000000..2db5552f --- /dev/null +++ b/third_party/tlRender-install-Release/include/SDL2/SDL_video.h @@ -0,0 +1,2228 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2025 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +/** + * # CategoryVideo + * + * Header file for SDL video functions. + */ + +#ifndef SDL_video_h_ +#define SDL_video_h_ + +#include "SDL_stdinc.h" +#include "SDL_pixels.h" +#include "SDL_rect.h" +#include "SDL_surface.h" + +#include "begin_code.h" +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/** + * The structure that defines a display mode + * + * \sa SDL_GetNumDisplayModes + * \sa SDL_GetDisplayMode + * \sa SDL_GetDesktopDisplayMode + * \sa SDL_GetCurrentDisplayMode + * \sa SDL_GetClosestDisplayMode + * \sa SDL_SetWindowDisplayMode + * \sa SDL_GetWindowDisplayMode + */ +typedef struct SDL_DisplayMode +{ + Uint32 format; /**< pixel format */ + int w; /**< width, in screen coordinates */ + int h; /**< height, in screen coordinates */ + int refresh_rate; /**< refresh rate (or zero for unspecified) */ + void *driverdata; /**< driver-specific data, initialize to 0 */ +} SDL_DisplayMode; + +/** + * The opaque type used to identify a window. + * + * \sa SDL_CreateWindow + * \sa SDL_CreateWindowFrom + * \sa SDL_DestroyWindow + * \sa SDL_FlashWindow + * \sa SDL_GetWindowData + * \sa SDL_GetWindowFlags + * \sa SDL_GetWindowGrab + * \sa SDL_GetWindowKeyboardGrab + * \sa SDL_GetWindowMouseGrab + * \sa SDL_GetWindowPosition + * \sa SDL_GetWindowSize + * \sa SDL_GetWindowTitle + * \sa SDL_HideWindow + * \sa SDL_MaximizeWindow + * \sa SDL_MinimizeWindow + * \sa SDL_RaiseWindow + * \sa SDL_RestoreWindow + * \sa SDL_SetWindowData + * \sa SDL_SetWindowFullscreen + * \sa SDL_SetWindowGrab + * \sa SDL_SetWindowKeyboardGrab + * \sa SDL_SetWindowMouseGrab + * \sa SDL_SetWindowIcon + * \sa SDL_SetWindowPosition + * \sa SDL_SetWindowSize + * \sa SDL_SetWindowBordered + * \sa SDL_SetWindowResizable + * \sa SDL_SetWindowTitle + * \sa SDL_ShowWindow + */ +typedef struct SDL_Window SDL_Window; + +/** + * The flags on a window + * + * \sa SDL_GetWindowFlags + */ +typedef enum SDL_WindowFlags +{ + SDL_WINDOW_FULLSCREEN = 0x00000001, /**< fullscreen window */ + SDL_WINDOW_OPENGL = 0x00000002, /**< window usable with OpenGL context */ + SDL_WINDOW_SHOWN = 0x00000004, /**< window is visible */ + SDL_WINDOW_HIDDEN = 0x00000008, /**< window is not visible */ + SDL_WINDOW_BORDERLESS = 0x00000010, /**< no window decoration */ + SDL_WINDOW_RESIZABLE = 0x00000020, /**< window can be resized */ + SDL_WINDOW_MINIMIZED = 0x00000040, /**< window is minimized */ + SDL_WINDOW_MAXIMIZED = 0x00000080, /**< window is maximized */ + SDL_WINDOW_MOUSE_GRABBED = 0x00000100, /**< window has grabbed mouse input */ + SDL_WINDOW_INPUT_FOCUS = 0x00000200, /**< window has input focus */ + SDL_WINDOW_MOUSE_FOCUS = 0x00000400, /**< window has mouse focus */ + SDL_WINDOW_FULLSCREEN_DESKTOP = ( SDL_WINDOW_FULLSCREEN | 0x00001000 ), + SDL_WINDOW_FOREIGN = 0x00000800, /**< window not created by SDL */ + SDL_WINDOW_ALLOW_HIGHDPI = 0x00002000, /**< window should be created in high-DPI mode if supported. + On macOS NSHighResolutionCapable must be set true in the + application's Info.plist for this to have any effect. */ + SDL_WINDOW_MOUSE_CAPTURE = 0x00004000, /**< window has mouse captured (unrelated to MOUSE_GRABBED) */ + SDL_WINDOW_ALWAYS_ON_TOP = 0x00008000, /**< window should always be above others */ + SDL_WINDOW_SKIP_TASKBAR = 0x00010000, /**< window should not be added to the taskbar */ + SDL_WINDOW_UTILITY = 0x00020000, /**< window should be treated as a utility window */ + SDL_WINDOW_TOOLTIP = 0x00040000, /**< window should be treated as a tooltip */ + SDL_WINDOW_POPUP_MENU = 0x00080000, /**< window should be treated as a popup menu */ + SDL_WINDOW_KEYBOARD_GRABBED = 0x00100000, /**< window has grabbed keyboard input */ + SDL_WINDOW_VULKAN = 0x10000000, /**< window usable for Vulkan surface */ + SDL_WINDOW_METAL = 0x20000000, /**< window usable for Metal view */ + + SDL_WINDOW_INPUT_GRABBED = SDL_WINDOW_MOUSE_GRABBED /**< equivalent to SDL_WINDOW_MOUSE_GRABBED for compatibility */ +} SDL_WindowFlags; + +/** + * Used to indicate that you don't care what the window position is. + */ +#define SDL_WINDOWPOS_UNDEFINED_MASK 0x1FFF0000u +#define SDL_WINDOWPOS_UNDEFINED_DISPLAY(X) (SDL_WINDOWPOS_UNDEFINED_MASK|(X)) +#define SDL_WINDOWPOS_UNDEFINED SDL_WINDOWPOS_UNDEFINED_DISPLAY(0) +#define SDL_WINDOWPOS_ISUNDEFINED(X) \ + (((X)&0xFFFF0000) == SDL_WINDOWPOS_UNDEFINED_MASK) + +/** + * Used to indicate that the window position should be centered. + */ +#define SDL_WINDOWPOS_CENTERED_MASK 0x2FFF0000u +#define SDL_WINDOWPOS_CENTERED_DISPLAY(X) (SDL_WINDOWPOS_CENTERED_MASK|(X)) +#define SDL_WINDOWPOS_CENTERED SDL_WINDOWPOS_CENTERED_DISPLAY(0) +#define SDL_WINDOWPOS_ISCENTERED(X) \ + (((X)&0xFFFF0000) == SDL_WINDOWPOS_CENTERED_MASK) + +/** + * Event subtype for window events + */ +typedef enum SDL_WindowEventID +{ + SDL_WINDOWEVENT_NONE, /**< Never used */ + SDL_WINDOWEVENT_SHOWN, /**< Window has been shown */ + SDL_WINDOWEVENT_HIDDEN, /**< Window has been hidden */ + SDL_WINDOWEVENT_EXPOSED, /**< Window has been exposed and should be + redrawn */ + SDL_WINDOWEVENT_MOVED, /**< Window has been moved to data1, data2 + */ + SDL_WINDOWEVENT_RESIZED, /**< Window has been resized to data1xdata2 */ + SDL_WINDOWEVENT_SIZE_CHANGED, /**< The window size has changed, either as + a result of an API call or through the + system or user changing the window size. */ + SDL_WINDOWEVENT_MINIMIZED, /**< Window has been minimized */ + SDL_WINDOWEVENT_MAXIMIZED, /**< Window has been maximized */ + SDL_WINDOWEVENT_RESTORED, /**< Window has been restored to normal size + and position */ + SDL_WINDOWEVENT_ENTER, /**< Window has gained mouse focus */ + SDL_WINDOWEVENT_LEAVE, /**< Window has lost mouse focus */ + SDL_WINDOWEVENT_FOCUS_GAINED, /**< Window has gained keyboard focus */ + SDL_WINDOWEVENT_FOCUS_LOST, /**< Window has lost keyboard focus */ + SDL_WINDOWEVENT_CLOSE, /**< The window manager requests that the window be closed */ + SDL_WINDOWEVENT_TAKE_FOCUS, /**< Window is being offered a focus (should SetWindowInputFocus() on itself or a subwindow, or ignore) */ + SDL_WINDOWEVENT_HIT_TEST, /**< Window had a hit test that wasn't SDL_HITTEST_NORMAL. */ + SDL_WINDOWEVENT_ICCPROF_CHANGED,/**< The ICC profile of the window's display has changed. */ + SDL_WINDOWEVENT_DISPLAY_CHANGED /**< Window has been moved to display data1. */ +} SDL_WindowEventID; + +/** + * Event subtype for display events + */ +typedef enum SDL_DisplayEventID +{ + SDL_DISPLAYEVENT_NONE, /**< Never used */ + SDL_DISPLAYEVENT_ORIENTATION, /**< Display orientation has changed to data1 */ + SDL_DISPLAYEVENT_CONNECTED, /**< Display has been added to the system */ + SDL_DISPLAYEVENT_DISCONNECTED, /**< Display has been removed from the system */ + SDL_DISPLAYEVENT_MOVED /**< Display has changed position */ +} SDL_DisplayEventID; + +/** + * Display orientation + */ +typedef enum SDL_DisplayOrientation +{ + SDL_ORIENTATION_UNKNOWN, /**< The display orientation can't be determined */ + SDL_ORIENTATION_LANDSCAPE, /**< The display is in landscape mode, with the right side up, relative to portrait mode */ + SDL_ORIENTATION_LANDSCAPE_FLIPPED, /**< The display is in landscape mode, with the left side up, relative to portrait mode */ + SDL_ORIENTATION_PORTRAIT, /**< The display is in portrait mode */ + SDL_ORIENTATION_PORTRAIT_FLIPPED /**< The display is in portrait mode, upside down */ +} SDL_DisplayOrientation; + +/** + * Window flash operation + */ +typedef enum SDL_FlashOperation +{ + SDL_FLASH_CANCEL, /**< Cancel any window flash state */ + SDL_FLASH_BRIEFLY, /**< Flash the window briefly to get attention */ + SDL_FLASH_UNTIL_FOCUSED /**< Flash the window until it gets focus */ +} SDL_FlashOperation; + +/** + * An opaque handle to an OpenGL context. + * + * \sa SDL_GL_CreateContext + */ +typedef void *SDL_GLContext; + +/** + * OpenGL configuration attributes. + * + * While you can set most OpenGL attributes normally, the attributes listed + * above must be known before SDL creates the window that will be used with + * the OpenGL context. These attributes are set and read with + * SDL_GL_SetAttribute and SDL_GL_GetAttribute. + * + * In some cases, these attributes are minimum requests; the GL does not + * promise to give you exactly what you asked for. It's possible to ask for a + * 16-bit depth buffer and get a 24-bit one instead, for example, or to ask + * for no stencil buffer and still have one available. Context creation should + * fail if the GL can't provide your requested attributes at a minimum, but + * you should check to see exactly what you got. + * + * + * [Multisample anti-aliasing](http://en.wikipedia.org/wiki/Multisample_anti-aliasing) + * is a type of full screen anti-aliasing. Multipsampling defaults to off but + * can be turned on by setting SDL_GL_MULTISAMPLEBUFFERS to 1 and + * SDL_GL_MULTISAMPLESAMPLES to a value greater than 0. Typical values are 2 + * and 4. + * + * SDL_GL_CONTEXT_PROFILE_MASK determines the type of context created, while + * both SDL_GL_CONTEXT_MAJOR_VERSION and SDL_GL_CONTEXT_MINOR_VERSION + * determine which version. All three attributes must be set prior to creating + * the first window, and in general you can't change the value of + * SDL_GL_CONTEXT_PROFILE_MASK without first destroying all windows created + * with the previous setting. + * + * SDL_GL_CONTEXT_RELEASE_BEHAVIOR can be set to + * SDL_GL_CONTEXT_RELEASE_BEHAVIOR_NONE or + * SDL_GL_CONTEXT_RELEASE_BEHAVIOR_FLUSH. + */ +typedef enum SDL_GLattr +{ + SDL_GL_RED_SIZE, /**< the minimum number of bits for the red channel of the color buffer; defaults to 3. */ + SDL_GL_GREEN_SIZE, /**< the minimum number of bits for the green channel of the color buffer; defaults to 3. */ + SDL_GL_BLUE_SIZE, /**< the minimum number of bits for the blue channel of the color buffer; defaults to 2. */ + SDL_GL_ALPHA_SIZE, /**< the minimum number of bits for the alpha channel of the color buffer; defaults to 0. */ + SDL_GL_BUFFER_SIZE, /**< the minimum number of bits for frame buffer size; defaults to 0. */ + SDL_GL_DOUBLEBUFFER, /**< whether the output is single or double buffered; defaults to double buffering on. */ + SDL_GL_DEPTH_SIZE, /**< the minimum number of bits in the depth buffer; defaults to 16. */ + SDL_GL_STENCIL_SIZE, /**< the minimum number of bits in the stencil buffer; defaults to 0. */ + SDL_GL_ACCUM_RED_SIZE, /**< the minimum number of bits for the red channel of the accumulation buffer; defaults to 0. */ + SDL_GL_ACCUM_GREEN_SIZE, /**< the minimum number of bits for the green channel of the accumulation buffer; defaults to 0. */ + SDL_GL_ACCUM_BLUE_SIZE, /**< the minimum number of bits for the blue channel of the accumulation buffer; defaults to 0. */ + SDL_GL_ACCUM_ALPHA_SIZE, /**< the minimum number of bits for the alpha channel of the accumulation buffer; defaults to 0. */ + SDL_GL_STEREO, /**< whether the output is stereo 3D; defaults to off. */ + SDL_GL_MULTISAMPLEBUFFERS, /**< the number of buffers used for multisample anti-aliasing; defaults to 0. */ + SDL_GL_MULTISAMPLESAMPLES, /**< the number of samples used around the current pixel used for multisample anti-aliasing. */ + SDL_GL_ACCELERATED_VISUAL, /**< set to 1 to require hardware acceleration, set to 0 to force software rendering; defaults to allow either. */ + SDL_GL_RETAINED_BACKING, /**< not used (deprecated). */ + SDL_GL_CONTEXT_MAJOR_VERSION, /**< OpenGL context major version. */ + SDL_GL_CONTEXT_MINOR_VERSION, /**< OpenGL context minor version. */ + SDL_GL_CONTEXT_EGL, /**< deprecated: set SDL_GL_CONTEXT_PROFILE_MASK to SDL_GL_CONTEXT_PROFILE_ES to enable instead. */ + SDL_GL_CONTEXT_FLAGS, /**< some combination of 0 or more of elements of the SDL_GLcontextFlag enumeration; defaults to 0. */ + SDL_GL_CONTEXT_PROFILE_MASK, /**< type of GL context (Core, Compatibility, ES). See SDL_GLprofile; default value depends on platform. */ + SDL_GL_SHARE_WITH_CURRENT_CONTEXT, /**< OpenGL context sharing; defaults to 0. */ + SDL_GL_FRAMEBUFFER_SRGB_CAPABLE, /**< requests sRGB capable visual; defaults to 0. (>= SDL 2.0.1) */ + SDL_GL_CONTEXT_RELEASE_BEHAVIOR, /**< sets context the release behavior; defaults to 1. (>= SDL 2.0.4) */ + SDL_GL_CONTEXT_RESET_NOTIFICATION, + SDL_GL_CONTEXT_NO_ERROR, + SDL_GL_FLOATBUFFERS +} SDL_GLattr; + +typedef enum SDL_GLprofile +{ + SDL_GL_CONTEXT_PROFILE_CORE = 0x0001, + SDL_GL_CONTEXT_PROFILE_COMPATIBILITY = 0x0002, + SDL_GL_CONTEXT_PROFILE_ES = 0x0004 /**< GLX_CONTEXT_ES2_PROFILE_BIT_EXT */ +} SDL_GLprofile; + +typedef enum SDL_GLcontextFlag +{ + SDL_GL_CONTEXT_DEBUG_FLAG = 0x0001, + SDL_GL_CONTEXT_FORWARD_COMPATIBLE_FLAG = 0x0002, + SDL_GL_CONTEXT_ROBUST_ACCESS_FLAG = 0x0004, + SDL_GL_CONTEXT_RESET_ISOLATION_FLAG = 0x0008 +} SDL_GLcontextFlag; + +typedef enum SDL_GLcontextReleaseFlag +{ + SDL_GL_CONTEXT_RELEASE_BEHAVIOR_NONE = 0x0000, + SDL_GL_CONTEXT_RELEASE_BEHAVIOR_FLUSH = 0x0001 +} SDL_GLcontextReleaseFlag; + +typedef enum SDL_GLContextResetNotification +{ + SDL_GL_CONTEXT_RESET_NO_NOTIFICATION = 0x0000, + SDL_GL_CONTEXT_RESET_LOSE_CONTEXT = 0x0001 +} SDL_GLContextResetNotification; + +/* Function prototypes */ + +/** + * Get the number of video drivers compiled into SDL. + * + * \returns a number >= 1 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetVideoDriver + */ +extern DECLSPEC int SDLCALL SDL_GetNumVideoDrivers(void); + +/** + * Get the name of a built in video driver. + * + * The video drivers are presented in the order in which they are normally + * checked during initialization. + * + * \param index the index of a video driver. + * \returns the name of the video driver with the given **index**. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetNumVideoDrivers + */ +extern DECLSPEC const char *SDLCALL SDL_GetVideoDriver(int index); + +/** + * Initialize the video subsystem, optionally specifying a video driver. + * + * This function initializes the video subsystem, setting up a connection to + * the window manager, etc, and determines the available display modes and + * pixel formats, but does not initialize a window or graphics mode. + * + * If you use this function and you haven't used the SDL_INIT_VIDEO flag with + * either SDL_Init() or SDL_InitSubSystem(), you should call SDL_VideoQuit() + * before calling SDL_Quit(). + * + * It is safe to call this function multiple times. SDL_VideoInit() will call + * SDL_VideoQuit() itself if the video subsystem has already been initialized. + * + * You can use SDL_GetNumVideoDrivers() and SDL_GetVideoDriver() to find a + * specific `driver_name`. + * + * \param driver_name the name of a video driver to initialize, or NULL for + * the default driver. + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetNumVideoDrivers + * \sa SDL_GetVideoDriver + * \sa SDL_InitSubSystem + * \sa SDL_VideoQuit + */ +extern DECLSPEC int SDLCALL SDL_VideoInit(const char *driver_name); + +/** + * Shut down the video subsystem, if initialized with SDL_VideoInit(). + * + * This function closes all windows, and restores the original video mode. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_VideoInit + */ +extern DECLSPEC void SDLCALL SDL_VideoQuit(void); + +/** + * Get the name of the currently initialized video driver. + * + * \returns the name of the current video driver or NULL if no driver has been + * initialized. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetNumVideoDrivers + * \sa SDL_GetVideoDriver + */ +extern DECLSPEC const char *SDLCALL SDL_GetCurrentVideoDriver(void); + +/** + * Get the number of available video displays. + * + * \returns a number >= 1 or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetDisplayBounds + */ +extern DECLSPEC int SDLCALL SDL_GetNumVideoDisplays(void); + +/** + * Get the name of a display in UTF-8 encoding. + * + * \param displayIndex the index of display from which the name should be + * queried. + * \returns the name of a display or NULL for an invalid display index or + * failure; call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetNumVideoDisplays + */ +extern DECLSPEC const char * SDLCALL SDL_GetDisplayName(int displayIndex); + +/** + * Get the desktop area represented by a display. + * + * The primary display (`displayIndex` zero) is always located at 0,0. + * + * \param displayIndex the index of the display to query. + * \param rect the SDL_Rect structure filled in with the display bounds. + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetNumVideoDisplays + */ +extern DECLSPEC int SDLCALL SDL_GetDisplayBounds(int displayIndex, SDL_Rect * rect); + +/** + * Get the usable desktop area represented by a display. + * + * The primary display (`displayIndex` zero) is always located at 0,0. + * + * This is the same area as SDL_GetDisplayBounds() reports, but with portions + * reserved by the system removed. For example, on Apple's macOS, this + * subtracts the area occupied by the menu bar and dock. + * + * Setting a window to be fullscreen generally bypasses these unusable areas, + * so these are good guidelines for the maximum space available to a + * non-fullscreen window. + * + * The parameter `rect` is ignored if it is NULL. + * + * This function also returns -1 if the parameter `displayIndex` is out of + * range. + * + * \param displayIndex the index of the display to query the usable bounds + * from. + * \param rect the SDL_Rect structure filled in with the display bounds. + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.5. + * + * \sa SDL_GetDisplayBounds + * \sa SDL_GetNumVideoDisplays + */ +extern DECLSPEC int SDLCALL SDL_GetDisplayUsableBounds(int displayIndex, SDL_Rect * rect); + +/** + * Get the dots/pixels-per-inch for a display. + * + * Diagonal, horizontal and vertical DPI can all be optionally returned if the + * appropriate parameter is non-NULL. + * + * A failure of this function usually means that either no DPI information is + * available or the `displayIndex` is out of range. + * + * **WARNING**: This reports the DPI that the hardware reports, and it is not + * always reliable! It is almost always better to use SDL_GetWindowSize() to + * find the window size, which might be in logical points instead of pixels, + * and then SDL_GL_GetDrawableSize(), SDL_Vulkan_GetDrawableSize(), + * SDL_Metal_GetDrawableSize(), or SDL_GetRendererOutputSize(), and compare + * the two values to get an actual scaling value between the two. We will be + * rethinking how high-dpi details should be managed in SDL3 to make things + * more consistent, reliable, and clear. + * + * \param displayIndex the index of the display from which DPI information + * should be queried. + * \param ddpi a pointer filled in with the diagonal DPI of the display; may + * be NULL. + * \param hdpi a pointer filled in with the horizontal DPI of the display; may + * be NULL. + * \param vdpi a pointer filled in with the vertical DPI of the display; may + * be NULL. + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.4. + * + * \sa SDL_GetNumVideoDisplays + */ +extern DECLSPEC int SDLCALL SDL_GetDisplayDPI(int displayIndex, float * ddpi, float * hdpi, float * vdpi); + +/** + * Get the orientation of a display. + * + * \param displayIndex the index of the display to query. + * \returns The SDL_DisplayOrientation enum value of the display, or + * `SDL_ORIENTATION_UNKNOWN` if it isn't available. + * + * \since This function is available since SDL 2.0.9. + * + * \sa SDL_GetNumVideoDisplays + */ +extern DECLSPEC SDL_DisplayOrientation SDLCALL SDL_GetDisplayOrientation(int displayIndex); + +/** + * Get the number of available display modes. + * + * The `displayIndex` needs to be in the range from 0 to + * SDL_GetNumVideoDisplays() - 1. + * + * \param displayIndex the index of the display to query. + * \returns a number >= 1 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetDisplayMode + * \sa SDL_GetNumVideoDisplays + */ +extern DECLSPEC int SDLCALL SDL_GetNumDisplayModes(int displayIndex); + +/** + * Get information about a specific display mode. + * + * The display modes are sorted in this priority: + * + * - width -> largest to smallest + * - height -> largest to smallest + * - bits per pixel -> more colors to fewer colors + * - packed pixel layout -> largest to smallest + * - refresh rate -> highest to lowest + * + * \param displayIndex the index of the display to query. + * \param modeIndex the index of the display mode to query. + * \param mode an SDL_DisplayMode structure filled in with the mode at + * `modeIndex`. + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetNumDisplayModes + */ +extern DECLSPEC int SDLCALL SDL_GetDisplayMode(int displayIndex, int modeIndex, + SDL_DisplayMode * mode); + +/** + * Get information about the desktop's display mode. + * + * There's a difference between this function and SDL_GetCurrentDisplayMode() + * when SDL runs fullscreen and has changed the resolution. In that case this + * function will return the previous native display mode, and not the current + * display mode. + * + * \param displayIndex the index of the display to query. + * \param mode an SDL_DisplayMode structure filled in with the current display + * mode. + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetCurrentDisplayMode + * \sa SDL_GetDisplayMode + * \sa SDL_SetWindowDisplayMode + */ +extern DECLSPEC int SDLCALL SDL_GetDesktopDisplayMode(int displayIndex, SDL_DisplayMode * mode); + +/** + * Get information about the current display mode. + * + * There's a difference between this function and SDL_GetDesktopDisplayMode() + * when SDL runs fullscreen and has changed the resolution. In that case this + * function will return the current display mode, and not the previous native + * display mode. + * + * \param displayIndex the index of the display to query. + * \param mode an SDL_DisplayMode structure filled in with the current display + * mode. + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetDesktopDisplayMode + * \sa SDL_GetDisplayMode + * \sa SDL_GetNumVideoDisplays + * \sa SDL_SetWindowDisplayMode + */ +extern DECLSPEC int SDLCALL SDL_GetCurrentDisplayMode(int displayIndex, SDL_DisplayMode * mode); + + +/** + * Get the closest match to the requested display mode. + * + * The available display modes are scanned and `closest` is filled in with the + * closest mode matching the requested mode and returned. The mode format and + * refresh rate default to the desktop mode if they are set to 0. The modes + * are scanned with size being first priority, format being second priority, + * and finally checking the refresh rate. If all the available modes are too + * small, then NULL is returned. + * + * \param displayIndex the index of the display to query. + * \param mode an SDL_DisplayMode structure containing the desired display + * mode. + * \param closest an SDL_DisplayMode structure filled in with the closest + * match of the available display modes. + * \returns the passed in value `closest` or NULL if no matching video mode + * was available; call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetDisplayMode + * \sa SDL_GetNumDisplayModes + */ +extern DECLSPEC SDL_DisplayMode * SDLCALL SDL_GetClosestDisplayMode(int displayIndex, const SDL_DisplayMode * mode, SDL_DisplayMode * closest); + +/** + * Get the index of the display containing a point + * + * \param point the point to query. + * \returns the index of the display containing the point or a negative error + * code on failure; call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.24.0. + * + * \sa SDL_GetDisplayBounds + * \sa SDL_GetNumVideoDisplays + */ +extern DECLSPEC int SDLCALL SDL_GetPointDisplayIndex(const SDL_Point * point); + +/** + * Get the index of the display primarily containing a rect + * + * \param rect the rect to query. + * \returns the index of the display entirely containing the rect or closest + * to the center of the rect on success or a negative error code on + * failure; call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.24.0. + * + * \sa SDL_GetDisplayBounds + * \sa SDL_GetNumVideoDisplays + */ +extern DECLSPEC int SDLCALL SDL_GetRectDisplayIndex(const SDL_Rect * rect); + +/** + * Get the index of the display associated with a window. + * + * \param window the window to query. + * \returns the index of the display containing the center of the window on + * success or a negative error code on failure; call SDL_GetError() + * for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetDisplayBounds + * \sa SDL_GetNumVideoDisplays + */ +extern DECLSPEC int SDLCALL SDL_GetWindowDisplayIndex(SDL_Window * window); + +/** + * Set the display mode to use when a window is visible at fullscreen. + * + * This only affects the display mode used when the window is fullscreen. To + * change the window size when the window is not fullscreen, use + * SDL_SetWindowSize(). + * + * \param window the window to affect. + * \param mode the SDL_DisplayMode structure representing the mode to use, or + * NULL to use the window's dimensions and the desktop's format + * and refresh rate. + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetWindowDisplayMode + * \sa SDL_SetWindowFullscreen + */ +extern DECLSPEC int SDLCALL SDL_SetWindowDisplayMode(SDL_Window * window, + const SDL_DisplayMode * mode); + +/** + * Query the display mode to use when a window is visible at fullscreen. + * + * \param window the window to query. + * \param mode an SDL_DisplayMode structure filled in with the fullscreen + * display mode. + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_SetWindowDisplayMode + * \sa SDL_SetWindowFullscreen + */ +extern DECLSPEC int SDLCALL SDL_GetWindowDisplayMode(SDL_Window * window, + SDL_DisplayMode * mode); + +/** + * Get the raw ICC profile data for the screen the window is currently on. + * + * Data returned should be freed with SDL_free. + * + * \param window the window to query. + * \param size the size of the ICC profile. + * \returns the raw ICC profile data on success or NULL on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.18. + */ +extern DECLSPEC void* SDLCALL SDL_GetWindowICCProfile(SDL_Window * window, size_t* size); + +/** + * Get the pixel format associated with the window. + * + * \param window the window to query. + * \returns the pixel format of the window on success or + * SDL_PIXELFORMAT_UNKNOWN on failure; call SDL_GetError() for more + * information. + * + * \since This function is available since SDL 2.0.0. + */ +extern DECLSPEC Uint32 SDLCALL SDL_GetWindowPixelFormat(SDL_Window * window); + +/** + * Create a window with the specified position, dimensions, and flags. + * + * `flags` may be any of the following OR'd together: + * + * - `SDL_WINDOW_FULLSCREEN`: fullscreen window + * - `SDL_WINDOW_FULLSCREEN_DESKTOP`: fullscreen window at desktop resolution + * - `SDL_WINDOW_OPENGL`: window usable with an OpenGL context + * - `SDL_WINDOW_VULKAN`: window usable with a Vulkan instance + * - `SDL_WINDOW_METAL`: window usable with a Metal instance + * - `SDL_WINDOW_HIDDEN`: window is not visible + * - `SDL_WINDOW_BORDERLESS`: no window decoration + * - `SDL_WINDOW_RESIZABLE`: window can be resized + * - `SDL_WINDOW_MINIMIZED`: window is minimized + * - `SDL_WINDOW_MAXIMIZED`: window is maximized + * - `SDL_WINDOW_INPUT_GRABBED`: window has grabbed input focus + * - `SDL_WINDOW_ALLOW_HIGHDPI`: window should be created in high-DPI mode if + * supported (>= SDL 2.0.1) + * + * `SDL_WINDOW_SHOWN` is ignored by SDL_CreateWindow(). The SDL_Window is + * implicitly shown if SDL_WINDOW_HIDDEN is not set. `SDL_WINDOW_SHOWN` may be + * queried later using SDL_GetWindowFlags(). + * + * On Apple's macOS, you **must** set the NSHighResolutionCapable Info.plist + * property to YES, otherwise you will not receive a High-DPI OpenGL canvas. + * + * If the window is created with the `SDL_WINDOW_ALLOW_HIGHDPI` flag, its size + * in pixels may differ from its size in screen coordinates on platforms with + * high-DPI support (e.g. iOS and macOS). Use SDL_GetWindowSize() to query the + * client area's size in screen coordinates, and SDL_GL_GetDrawableSize() or + * SDL_GetRendererOutputSize() to query the drawable size in pixels. Note that + * when this flag is set, the drawable size can vary after the window is + * created and should be queried after major window events such as when the + * window is resized or moved between displays. + * + * If the window is set fullscreen, the width and height parameters `w` and + * `h` will not be used. However, invalid size parameters (e.g. too large) may + * still fail. Window size is actually limited to 16384 x 16384 for all + * platforms at window creation. + * + * If the window is created with any of the SDL_WINDOW_OPENGL or + * SDL_WINDOW_VULKAN flags, then the corresponding LoadLibrary function + * (SDL_GL_LoadLibrary or SDL_Vulkan_LoadLibrary) is called and the + * corresponding UnloadLibrary function is called by SDL_DestroyWindow(). + * + * If SDL_WINDOW_VULKAN is specified and there isn't a working Vulkan driver, + * SDL_CreateWindow() will fail because SDL_Vulkan_LoadLibrary() will fail. + * + * If SDL_WINDOW_METAL is specified on an OS that does not support Metal, + * SDL_CreateWindow() will fail. + * + * On non-Apple devices, SDL requires you to either not link to the Vulkan + * loader or link to a dynamic library version. This limitation may be removed + * in a future version of SDL. + * + * \param title the title of the window, in UTF-8 encoding. + * \param x the x position of the window, `SDL_WINDOWPOS_CENTERED`, or + * `SDL_WINDOWPOS_UNDEFINED`. + * \param y the y position of the window, `SDL_WINDOWPOS_CENTERED`, or + * `SDL_WINDOWPOS_UNDEFINED`. + * \param w the width of the window, in screen coordinates. + * \param h the height of the window, in screen coordinates. + * \param flags 0, or one or more SDL_WindowFlags OR'd together. + * \returns the `SDL_Window` that was created or NULL on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CreateWindowFrom + * \sa SDL_DestroyWindow + */ +extern DECLSPEC SDL_Window * SDLCALL SDL_CreateWindow(const char *title, + int x, int y, int w, + int h, Uint32 flags); + +/** + * Create an SDL window from an existing native window. + * + * In some cases (e.g. OpenGL) and on some platforms (e.g. Microsoft Windows) + * the hint `SDL_HINT_VIDEO_WINDOW_SHARE_PIXEL_FORMAT` needs to be configured + * before using SDL_CreateWindowFrom(). + * + * \param data a pointer to driver-dependent window creation data, typically + * your native window cast to a void*. + * \returns the window that was created or NULL on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CreateWindow + * \sa SDL_DestroyWindow + */ +extern DECLSPEC SDL_Window * SDLCALL SDL_CreateWindowFrom(const void *data); + +/** + * Get the numeric ID of a window. + * + * The numeric ID is what SDL_WindowEvent references, and is necessary to map + * these events to specific SDL_Window objects. + * + * \param window the window to query. + * \returns the ID of the window on success or 0 on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetWindowFromID + */ +extern DECLSPEC Uint32 SDLCALL SDL_GetWindowID(SDL_Window * window); + +/** + * Get a window from a stored ID. + * + * The numeric ID is what SDL_WindowEvent references, and is necessary to map + * these events to specific SDL_Window objects. + * + * \param id the ID of the window. + * \returns the window associated with `id` or NULL if it doesn't exist; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetWindowID + */ +extern DECLSPEC SDL_Window * SDLCALL SDL_GetWindowFromID(Uint32 id); + +/** + * Get the window flags. + * + * \param window the window to query. + * \returns a mask of the SDL_WindowFlags associated with `window`. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CreateWindow + * \sa SDL_HideWindow + * \sa SDL_MaximizeWindow + * \sa SDL_MinimizeWindow + * \sa SDL_SetWindowFullscreen + * \sa SDL_SetWindowGrab + * \sa SDL_ShowWindow + */ +extern DECLSPEC Uint32 SDLCALL SDL_GetWindowFlags(SDL_Window * window); + +/** + * Set the title of a window. + * + * This string is expected to be in UTF-8 encoding. + * + * \param window the window to change. + * \param title the desired window title in UTF-8 format. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetWindowTitle + */ +extern DECLSPEC void SDLCALL SDL_SetWindowTitle(SDL_Window * window, + const char *title); + +/** + * Get the title of a window. + * + * \param window the window to query. + * \returns the title of the window in UTF-8 format or "" if there is no + * title. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_SetWindowTitle + */ +extern DECLSPEC const char *SDLCALL SDL_GetWindowTitle(SDL_Window * window); + +/** + * Set the icon for a window. + * + * \param window the window to change. + * \param icon an SDL_Surface structure containing the icon for the window. + * + * \since This function is available since SDL 2.0.0. + */ +extern DECLSPEC void SDLCALL SDL_SetWindowIcon(SDL_Window * window, + SDL_Surface * icon); + +/** + * Associate an arbitrary named pointer with a window. + * + * `name` is case-sensitive. + * + * \param window the window to associate with the pointer. + * \param name the name of the pointer. + * \param userdata the associated pointer. + * \returns the previous value associated with `name`. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetWindowData + */ +extern DECLSPEC void* SDLCALL SDL_SetWindowData(SDL_Window * window, + const char *name, + void *userdata); + +/** + * Retrieve the data pointer associated with a window. + * + * \param window the window to query. + * \param name the name of the pointer. + * \returns the value associated with `name`. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_SetWindowData + */ +extern DECLSPEC void *SDLCALL SDL_GetWindowData(SDL_Window * window, + const char *name); + +/** + * Set the position of a window. + * + * The window coordinate origin is the upper left of the display. + * + * \param window the window to reposition. + * \param x the x coordinate of the window in screen coordinates, or + * `SDL_WINDOWPOS_CENTERED` or `SDL_WINDOWPOS_UNDEFINED`. + * \param y the y coordinate of the window in screen coordinates, or + * `SDL_WINDOWPOS_CENTERED` or `SDL_WINDOWPOS_UNDEFINED`. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetWindowPosition + */ +extern DECLSPEC void SDLCALL SDL_SetWindowPosition(SDL_Window * window, + int x, int y); + +/** + * Get the position of a window. + * + * If you do not need the value for one of the positions a NULL may be passed + * in the `x` or `y` parameter. + * + * \param window the window to query. + * \param x a pointer filled in with the x position of the window, in screen + * coordinates, may be NULL. + * \param y a pointer filled in with the y position of the window, in screen + * coordinates, may be NULL. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_SetWindowPosition + */ +extern DECLSPEC void SDLCALL SDL_GetWindowPosition(SDL_Window * window, + int *x, int *y); + +/** + * Set the size of a window's client area. + * + * The window size in screen coordinates may differ from the size in pixels, + * if the window was created with `SDL_WINDOW_ALLOW_HIGHDPI` on a platform + * with high-dpi support (e.g. iOS or macOS). Use SDL_GL_GetDrawableSize() or + * SDL_GetRendererOutputSize() to get the real client area size in pixels. + * + * Fullscreen windows automatically match the size of the display mode, and + * you should use SDL_SetWindowDisplayMode() to change their size. + * + * \param window the window to change. + * \param w the width of the window in pixels, in screen coordinates, must be + * > 0. + * \param h the height of the window in pixels, in screen coordinates, must be + * > 0. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetWindowSize + * \sa SDL_SetWindowDisplayMode + */ +extern DECLSPEC void SDLCALL SDL_SetWindowSize(SDL_Window * window, int w, + int h); + +/** + * Get the size of a window's client area. + * + * NULL can safely be passed as the `w` or `h` parameter if the width or + * height value is not desired. + * + * The window size in screen coordinates may differ from the size in pixels, + * if the window was created with `SDL_WINDOW_ALLOW_HIGHDPI` on a platform + * with high-dpi support (e.g. iOS or macOS). Use SDL_GL_GetDrawableSize(), + * SDL_Vulkan_GetDrawableSize(), or SDL_GetRendererOutputSize() to get the + * real client area size in pixels. + * + * \param window the window to query the width and height from. + * \param w a pointer filled in with the width of the window, in screen + * coordinates, may be NULL. + * \param h a pointer filled in with the height of the window, in screen + * coordinates, may be NULL. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GL_GetDrawableSize + * \sa SDL_Vulkan_GetDrawableSize + * \sa SDL_SetWindowSize + */ +extern DECLSPEC void SDLCALL SDL_GetWindowSize(SDL_Window * window, int *w, + int *h); + +/** + * Get the size of a window's borders (decorations) around the client area. + * + * Note: If this function fails (returns -1), the size values will be + * initialized to 0, 0, 0, 0 (if a non-NULL pointer is provided), as if the + * window in question was borderless. + * + * Note: This function may fail on systems where the window has not yet been + * decorated by the display server (for example, immediately after calling + * SDL_CreateWindow). It is recommended that you wait at least until the + * window has been presented and composited, so that the window system has a + * chance to decorate the window and provide the border dimensions to SDL. + * + * This function also returns -1 if getting the information is not supported. + * + * \param window the window to query the size values of the border + * (decorations) from. + * \param top pointer to variable for storing the size of the top border; NULL + * is permitted. + * \param left pointer to variable for storing the size of the left border; + * NULL is permitted. + * \param bottom pointer to variable for storing the size of the bottom + * border; NULL is permitted. + * \param right pointer to variable for storing the size of the right border; + * NULL is permitted. + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.5. + * + * \sa SDL_GetWindowSize + */ +extern DECLSPEC int SDLCALL SDL_GetWindowBordersSize(SDL_Window * window, + int *top, int *left, + int *bottom, int *right); + +/** + * Get the size of a window in pixels. + * + * This may differ from SDL_GetWindowSize() if we're rendering to a high-DPI + * drawable, i.e. the window was created with `SDL_WINDOW_ALLOW_HIGHDPI` on a + * platform with high-DPI support (Apple calls this "Retina"), and not + * disabled by the `SDL_HINT_VIDEO_HIGHDPI_DISABLED` hint. + * + * \param window the window from which the drawable size should be queried. + * \param w a pointer to variable for storing the width in pixels, may be + * NULL. + * \param h a pointer to variable for storing the height in pixels, may be + * NULL. + * + * \since This function is available since SDL 2.26.0. + * + * \sa SDL_CreateWindow + * \sa SDL_GetWindowSize + */ +extern DECLSPEC void SDLCALL SDL_GetWindowSizeInPixels(SDL_Window * window, + int *w, int *h); + +/** + * Set the minimum size of a window's client area. + * + * \param window the window to change. + * \param min_w the minimum width of the window in pixels. + * \param min_h the minimum height of the window in pixels. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetWindowMinimumSize + * \sa SDL_SetWindowMaximumSize + */ +extern DECLSPEC void SDLCALL SDL_SetWindowMinimumSize(SDL_Window * window, + int min_w, int min_h); + +/** + * Get the minimum size of a window's client area. + * + * \param window the window to query. + * \param w a pointer filled in with the minimum width of the window, may be + * NULL. + * \param h a pointer filled in with the minimum height of the window, may be + * NULL. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetWindowMaximumSize + * \sa SDL_SetWindowMinimumSize + */ +extern DECLSPEC void SDLCALL SDL_GetWindowMinimumSize(SDL_Window * window, + int *w, int *h); + +/** + * Set the maximum size of a window's client area. + * + * \param window the window to change. + * \param max_w the maximum width of the window in pixels. + * \param max_h the maximum height of the window in pixels. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetWindowMaximumSize + * \sa SDL_SetWindowMinimumSize + */ +extern DECLSPEC void SDLCALL SDL_SetWindowMaximumSize(SDL_Window * window, + int max_w, int max_h); + +/** + * Get the maximum size of a window's client area. + * + * \param window the window to query. + * \param w a pointer filled in with the maximum width of the window, may be + * NULL. + * \param h a pointer filled in with the maximum height of the window, may be + * NULL. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetWindowMinimumSize + * \sa SDL_SetWindowMaximumSize + */ +extern DECLSPEC void SDLCALL SDL_GetWindowMaximumSize(SDL_Window * window, + int *w, int *h); + +/** + * Set the border state of a window. + * + * This will add or remove the window's `SDL_WINDOW_BORDERLESS` flag and add + * or remove the border from the actual window. This is a no-op if the + * window's border already matches the requested state. + * + * You can't change the border state of a fullscreen window. + * + * \param window the window of which to change the border state. + * \param bordered SDL_FALSE to remove border, SDL_TRUE to add border. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetWindowFlags + */ +extern DECLSPEC void SDLCALL SDL_SetWindowBordered(SDL_Window * window, + SDL_bool bordered); + +/** + * Set the user-resizable state of a window. + * + * This will add or remove the window's `SDL_WINDOW_RESIZABLE` flag and + * allow/disallow user resizing of the window. This is a no-op if the window's + * resizable state already matches the requested state. + * + * You can't change the resizable state of a fullscreen window. + * + * \param window the window of which to change the resizable state. + * \param resizable SDL_TRUE to allow resizing, SDL_FALSE to disallow. + * + * \since This function is available since SDL 2.0.5. + * + * \sa SDL_GetWindowFlags + */ +extern DECLSPEC void SDLCALL SDL_SetWindowResizable(SDL_Window * window, + SDL_bool resizable); + +/** + * Set the window to always be above the others. + * + * This will add or remove the window's `SDL_WINDOW_ALWAYS_ON_TOP` flag. This + * will bring the window to the front and keep the window above the rest. + * + * \param window The window of which to change the always on top state. + * \param on_top SDL_TRUE to set the window always on top, SDL_FALSE to + * disable. + * + * \since This function is available since SDL 2.0.16. + * + * \sa SDL_GetWindowFlags + */ +extern DECLSPEC void SDLCALL SDL_SetWindowAlwaysOnTop(SDL_Window * window, + SDL_bool on_top); + +/** + * Show a window. + * + * \param window the window to show. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_HideWindow + * \sa SDL_RaiseWindow + */ +extern DECLSPEC void SDLCALL SDL_ShowWindow(SDL_Window * window); + +/** + * Hide a window. + * + * \param window the window to hide. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_ShowWindow + */ +extern DECLSPEC void SDLCALL SDL_HideWindow(SDL_Window * window); + +/** + * Raise a window above other windows and set the input focus. + * + * \param window the window to raise. + * + * \since This function is available since SDL 2.0.0. + */ +extern DECLSPEC void SDLCALL SDL_RaiseWindow(SDL_Window * window); + +/** + * Make a window as large as possible. + * + * \param window the window to maximize. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_MinimizeWindow + * \sa SDL_RestoreWindow + */ +extern DECLSPEC void SDLCALL SDL_MaximizeWindow(SDL_Window * window); + +/** + * Minimize a window to an iconic representation. + * + * \param window the window to minimize. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_MaximizeWindow + * \sa SDL_RestoreWindow + */ +extern DECLSPEC void SDLCALL SDL_MinimizeWindow(SDL_Window * window); + +/** + * Restore the size and position of a minimized or maximized window. + * + * \param window the window to restore. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_MaximizeWindow + * \sa SDL_MinimizeWindow + */ +extern DECLSPEC void SDLCALL SDL_RestoreWindow(SDL_Window * window); + +/** + * Set a window's fullscreen state. + * + * `flags` may be `SDL_WINDOW_FULLSCREEN`, for "real" fullscreen with a + * videomode change; `SDL_WINDOW_FULLSCREEN_DESKTOP` for "fake" fullscreen + * that takes the size of the desktop; and 0 for windowed mode. + * + * Note that for some renderers, this function may trigger an + * SDL_RENDER_TARGETS_RESET event. Your application should be prepared to + * handle this event by reuploading textures! + * + * \param window the window to change. + * \param flags `SDL_WINDOW_FULLSCREEN`, `SDL_WINDOW_FULLSCREEN_DESKTOP` or 0. + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetWindowDisplayMode + * \sa SDL_SetWindowDisplayMode + */ +extern DECLSPEC int SDLCALL SDL_SetWindowFullscreen(SDL_Window * window, + Uint32 flags); + +/** + * Return whether the window has a surface associated with it. + * + * \returns SDL_TRUE if there is a surface associated with the window, or + * SDL_FALSE otherwise. + * + * \since This function is available since SDL 2.28.0. + * + * \sa SDL_GetWindowSurface + */ +extern DECLSPEC SDL_bool SDLCALL SDL_HasWindowSurface(SDL_Window *window); + +/** + * Get the SDL surface associated with the window. + * + * A new surface will be created with the optimal format for the window, if + * necessary. This surface will be freed when the window is destroyed. Do not + * free this surface. + * + * This surface will be invalidated if the window is resized. After resizing a + * window this function must be called again to return a valid surface. + * + * Note that on some platforms the pixels pointer of the surface may be + * modified after each call to SDL_UpdateWindowSurface(), so that the platform + * code can implement efficient double or triple buffering. + * + * You may not combine this with 3D or the rendering API on this window. + * + * This function is affected by `SDL_HINT_FRAMEBUFFER_ACCELERATION`. + * + * \param window the window to query. + * \returns the surface associated with the window, or NULL on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_DestroyWindowSurface + * \sa SDL_HasWindowSurface + * \sa SDL_UpdateWindowSurface + * \sa SDL_UpdateWindowSurfaceRects + */ +extern DECLSPEC SDL_Surface * SDLCALL SDL_GetWindowSurface(SDL_Window * window); + +/** + * Copy the window surface to the screen. + * + * This is the function you use to reflect any changes to the surface on the + * screen. + * + * This function is equivalent to the SDL 1.2 API SDL_Flip(). + * + * \param window the window to update. + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetWindowSurface + * \sa SDL_UpdateWindowSurfaceRects + */ +extern DECLSPEC int SDLCALL SDL_UpdateWindowSurface(SDL_Window * window); + +/** + * Copy areas of the window surface to the screen. + * + * This is the function you use to reflect changes to portions of the surface + * on the screen. + * + * This function is equivalent to the SDL 1.2 API SDL_UpdateRects(). + * + * Note that this function will update _at least_ the rectangles specified, + * but this is only intended as an optimization; in practice, this might + * update more of the screen (or all of the screen!), depending on what method + * SDL uses to send pixels to the system. + * + * \param window the window to update. + * \param rects an array of SDL_Rect structures representing areas of the + * surface to copy, in pixels. + * \param numrects the number of rectangles. + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetWindowSurface + * \sa SDL_UpdateWindowSurface + */ +extern DECLSPEC int SDLCALL SDL_UpdateWindowSurfaceRects(SDL_Window * window, + const SDL_Rect * rects, + int numrects); + +/** + * Destroy the surface associated with the window. + * + * \param window the window to update. + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.28.0. + * + * \sa SDL_GetWindowSurface + * \sa SDL_HasWindowSurface + */ +extern DECLSPEC int SDLCALL SDL_DestroyWindowSurface(SDL_Window *window); + +/** + * Set a window's input grab mode. + * + * When input is grabbed, the mouse is confined to the window. This function + * will also grab the keyboard if `SDL_HINT_GRAB_KEYBOARD` is set. To grab the + * keyboard without also grabbing the mouse, use SDL_SetWindowKeyboardGrab(). + * + * If the caller enables a grab while another window is currently grabbed, the + * other window loses its grab in favor of the caller's window. + * + * \param window the window for which the input grab mode should be set. + * \param grabbed SDL_TRUE to grab input or SDL_FALSE to release input. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetGrabbedWindow + * \sa SDL_GetWindowGrab + */ +extern DECLSPEC void SDLCALL SDL_SetWindowGrab(SDL_Window * window, + SDL_bool grabbed); + +/** + * Set a window's keyboard grab mode. + * + * Keyboard grab enables capture of system keyboard shortcuts like Alt+Tab or + * the Meta/Super key. Note that not all system keyboard shortcuts can be + * captured by applications (one example is Ctrl+Alt+Del on Windows). + * + * This is primarily intended for specialized applications such as VNC clients + * or VM frontends. Normal games should not use keyboard grab. + * + * When keyboard grab is enabled, SDL will continue to handle Alt+Tab when the + * window is full-screen to ensure the user is not trapped in your + * application. If you have a custom keyboard shortcut to exit fullscreen + * mode, you may suppress this behavior with + * `SDL_HINT_ALLOW_ALT_TAB_WHILE_GRABBED`. + * + * If the caller enables a grab while another window is currently grabbed, the + * other window loses its grab in favor of the caller's window. + * + * \param window The window for which the keyboard grab mode should be set. + * \param grabbed This is SDL_TRUE to grab keyboard, and SDL_FALSE to release. + * + * \since This function is available since SDL 2.0.16. + * + * \sa SDL_GetWindowKeyboardGrab + * \sa SDL_SetWindowMouseGrab + * \sa SDL_SetWindowGrab + */ +extern DECLSPEC void SDLCALL SDL_SetWindowKeyboardGrab(SDL_Window * window, + SDL_bool grabbed); + +/** + * Set a window's mouse grab mode. + * + * Mouse grab confines the mouse cursor to the window. + * + * \param window The window for which the mouse grab mode should be set. + * \param grabbed This is SDL_TRUE to grab mouse, and SDL_FALSE to release. + * + * \since This function is available since SDL 2.0.16. + * + * \sa SDL_GetWindowMouseGrab + * \sa SDL_SetWindowKeyboardGrab + * \sa SDL_SetWindowGrab + */ +extern DECLSPEC void SDLCALL SDL_SetWindowMouseGrab(SDL_Window * window, + SDL_bool grabbed); + +/** + * Get a window's input grab mode. + * + * \param window the window to query. + * \returns SDL_TRUE if input is grabbed, SDL_FALSE otherwise. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_SetWindowGrab + */ +extern DECLSPEC SDL_bool SDLCALL SDL_GetWindowGrab(SDL_Window * window); + +/** + * Get a window's keyboard grab mode. + * + * \param window the window to query. + * \returns SDL_TRUE if keyboard is grabbed, and SDL_FALSE otherwise. + * + * \since This function is available since SDL 2.0.16. + * + * \sa SDL_SetWindowKeyboardGrab + * \sa SDL_GetWindowGrab + */ +extern DECLSPEC SDL_bool SDLCALL SDL_GetWindowKeyboardGrab(SDL_Window * window); + +/** + * Get a window's mouse grab mode. + * + * \param window the window to query. + * \returns SDL_TRUE if mouse is grabbed, and SDL_FALSE otherwise. + * + * \since This function is available since SDL 2.0.16. + * + * \sa SDL_SetWindowKeyboardGrab + * \sa SDL_GetWindowGrab + */ +extern DECLSPEC SDL_bool SDLCALL SDL_GetWindowMouseGrab(SDL_Window * window); + +/** + * Get the window that currently has an input grab enabled. + * + * \returns the window if input is grabbed or NULL otherwise. + * + * \since This function is available since SDL 2.0.4. + * + * \sa SDL_GetWindowGrab + * \sa SDL_SetWindowGrab + */ +extern DECLSPEC SDL_Window * SDLCALL SDL_GetGrabbedWindow(void); + +/** + * Confines the cursor to the specified area of a window. + * + * Note that this does NOT grab the cursor, it only defines the area a cursor + * is restricted to when the window has mouse focus. + * + * \param window The window that will be associated with the barrier. + * \param rect A rectangle area in window-relative coordinates. If NULL the + * barrier for the specified window will be destroyed. + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.18. + * + * \sa SDL_GetWindowMouseRect + * \sa SDL_SetWindowMouseGrab + */ +extern DECLSPEC int SDLCALL SDL_SetWindowMouseRect(SDL_Window * window, const SDL_Rect * rect); + +/** + * Get the mouse confinement rectangle of a window. + * + * \param window The window to query. + * \returns A pointer to the mouse confinement rectangle of a window, or NULL + * if there isn't one. + * + * \since This function is available since SDL 2.0.18. + * + * \sa SDL_SetWindowMouseRect + */ +extern DECLSPEC const SDL_Rect * SDLCALL SDL_GetWindowMouseRect(SDL_Window * window); + +/** + * Set the brightness (gamma multiplier) for a given window's display. + * + * Despite the name and signature, this method sets the brightness of the + * entire display, not an individual window. A window is considered to be + * owned by the display that contains the window's center pixel. (The index of + * this display can be retrieved using SDL_GetWindowDisplayIndex().) The + * brightness set will not follow the window if it is moved to another + * display. + * + * Many platforms will refuse to set the display brightness in modern times. + * You are better off using a shader to adjust gamma during rendering, or + * something similar. + * + * \param window the window used to select the display whose brightness will + * be changed. + * \param brightness the brightness (gamma multiplier) value to set where 0.0 + * is completely dark and 1.0 is normal brightness. + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetWindowBrightness + * \sa SDL_SetWindowGammaRamp + */ +extern DECLSPEC int SDLCALL SDL_SetWindowBrightness(SDL_Window * window, float brightness); + +/** + * Get the brightness (gamma multiplier) for a given window's display. + * + * Despite the name and signature, this method retrieves the brightness of the + * entire display, not an individual window. A window is considered to be + * owned by the display that contains the window's center pixel. (The index of + * this display can be retrieved using SDL_GetWindowDisplayIndex().) + * + * \param window the window used to select the display whose brightness will + * be queried. + * \returns the brightness for the display where 0.0 is completely dark and + * 1.0 is normal brightness. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_SetWindowBrightness + */ +extern DECLSPEC float SDLCALL SDL_GetWindowBrightness(SDL_Window * window); + +/** + * Set the opacity for a window. + * + * The parameter `opacity` will be clamped internally between 0.0f + * (transparent) and 1.0f (opaque). + * + * This function also returns -1 if setting the opacity isn't supported. + * + * \param window the window which will be made transparent or opaque. + * \param opacity the opacity value (0.0f - transparent, 1.0f - opaque). + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.5. + * + * \sa SDL_GetWindowOpacity + */ +extern DECLSPEC int SDLCALL SDL_SetWindowOpacity(SDL_Window * window, float opacity); + +/** + * Get the opacity of a window. + * + * If transparency isn't supported on this platform, opacity will be reported + * as 1.0f without error. + * + * The parameter `opacity` is ignored if it is NULL. + * + * This function also returns -1 if an invalid window was provided. + * + * \param window the window to get the current opacity value from. + * \param out_opacity the float filled in (0.0f - transparent, 1.0f - opaque). + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.5. + * + * \sa SDL_SetWindowOpacity + */ +extern DECLSPEC int SDLCALL SDL_GetWindowOpacity(SDL_Window * window, float * out_opacity); + +/** + * Set the window as a modal for another window. + * + * \param modal_window the window that should be set modal. + * \param parent_window the parent window for the modal window. + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.5. + */ +extern DECLSPEC int SDLCALL SDL_SetWindowModalFor(SDL_Window * modal_window, SDL_Window * parent_window); + +/** + * Explicitly set input focus to the window. + * + * You almost certainly want SDL_RaiseWindow() instead of this function. Use + * this with caution, as you might give focus to a window that is completely + * obscured by other windows. + * + * \param window the window that should get the input focus. + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.5. + * + * \sa SDL_RaiseWindow + */ +extern DECLSPEC int SDLCALL SDL_SetWindowInputFocus(SDL_Window * window); + +/** + * Set the gamma ramp for the display that owns a given window. + * + * Set the gamma translation table for the red, green, and blue channels of + * the video hardware. Each table is an array of 256 16-bit quantities, + * representing a mapping between the input and output for that channel. The + * input is the index into the array, and the output is the 16-bit gamma value + * at that index, scaled to the output color precision. + * + * Despite the name and signature, this method sets the gamma ramp of the + * entire display, not an individual window. A window is considered to be + * owned by the display that contains the window's center pixel. (The index of + * this display can be retrieved using SDL_GetWindowDisplayIndex().) The gamma + * ramp set will not follow the window if it is moved to another display. + * + * \param window the window used to select the display whose gamma ramp will + * be changed. + * \param red a 256 element array of 16-bit quantities representing the + * translation table for the red channel, or NULL. + * \param green a 256 element array of 16-bit quantities representing the + * translation table for the green channel, or NULL. + * \param blue a 256 element array of 16-bit quantities representing the + * translation table for the blue channel, or NULL. + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GetWindowGammaRamp + */ +extern DECLSPEC int SDLCALL SDL_SetWindowGammaRamp(SDL_Window * window, + const Uint16 * red, + const Uint16 * green, + const Uint16 * blue); + +/** + * Get the gamma ramp for a given window's display. + * + * Despite the name and signature, this method retrieves the gamma ramp of the + * entire display, not an individual window. A window is considered to be + * owned by the display that contains the window's center pixel. (The index of + * this display can be retrieved using SDL_GetWindowDisplayIndex().) + * + * \param window the window used to select the display whose gamma ramp will + * be queried. + * \param red a 256 element array of 16-bit quantities filled in with the + * translation table for the red channel, or NULL. + * \param green a 256 element array of 16-bit quantities filled in with the + * translation table for the green channel, or NULL. + * \param blue a 256 element array of 16-bit quantities filled in with the + * translation table for the blue channel, or NULL. + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_SetWindowGammaRamp + */ +extern DECLSPEC int SDLCALL SDL_GetWindowGammaRamp(SDL_Window * window, + Uint16 * red, + Uint16 * green, + Uint16 * blue); + +/** + * Possible return values from the SDL_HitTest callback. + * + * \sa SDL_HitTest + */ +typedef enum SDL_HitTestResult +{ + SDL_HITTEST_NORMAL, /**< Region is normal. No special properties. */ + SDL_HITTEST_DRAGGABLE, /**< Region can drag entire window. */ + SDL_HITTEST_RESIZE_TOPLEFT, + SDL_HITTEST_RESIZE_TOP, + SDL_HITTEST_RESIZE_TOPRIGHT, + SDL_HITTEST_RESIZE_RIGHT, + SDL_HITTEST_RESIZE_BOTTOMRIGHT, + SDL_HITTEST_RESIZE_BOTTOM, + SDL_HITTEST_RESIZE_BOTTOMLEFT, + SDL_HITTEST_RESIZE_LEFT +} SDL_HitTestResult; + +/** + * Callback used for hit-testing. + * + * \param win the SDL_Window where hit-testing was set on. + * \param area an SDL_Point which should be hit-tested. + * \param data what was passed as `callback_data` to SDL_SetWindowHitTest(). + * \return an SDL_HitTestResult value. + * + * \sa SDL_SetWindowHitTest + */ +typedef SDL_HitTestResult (SDLCALL *SDL_HitTest)(SDL_Window *win, + const SDL_Point *area, + void *data); + +/** + * Provide a callback that decides if a window region has special properties. + * + * Normally windows are dragged and resized by decorations provided by the + * system window manager (a title bar, borders, etc), but for some apps, it + * makes sense to drag them from somewhere else inside the window itself; for + * example, one might have a borderless window that wants to be draggable from + * any part, or simulate its own title bar, etc. + * + * This function lets the app provide a callback that designates pieces of a + * given window as special. This callback is run during event processing if we + * need to tell the OS to treat a region of the window specially; the use of + * this callback is known as "hit testing." + * + * Mouse input may not be delivered to your application if it is within a + * special area; the OS will often apply that input to moving the window or + * resizing the window and not deliver it to the application. + * + * Specifying NULL for a callback disables hit-testing. Hit-testing is + * disabled by default. + * + * Platforms that don't support this functionality will return -1 + * unconditionally, even if you're attempting to disable hit-testing. + * + * Your callback may fire at any time, and its firing does not indicate any + * specific behavior (for example, on Windows, this certainly might fire when + * the OS is deciding whether to drag your window, but it fires for lots of + * other reasons, too, some unrelated to anything you probably care about _and + * when the mouse isn't actually at the location it is testing_). Since this + * can fire at any time, you should try to keep your callback efficient, + * devoid of allocations, etc. + * + * \param window the window to set hit-testing on. + * \param callback the function to call when doing a hit-test. + * \param callback_data an app-defined void pointer passed to **callback**. + * \returns 0 on success or -1 on error (including unsupported); call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.4. + */ +extern DECLSPEC int SDLCALL SDL_SetWindowHitTest(SDL_Window * window, + SDL_HitTest callback, + void *callback_data); + +/** + * Request a window to demand attention from the user. + * + * \param window the window to be flashed. + * \param operation the flash operation. + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.16. + */ +extern DECLSPEC int SDLCALL SDL_FlashWindow(SDL_Window * window, SDL_FlashOperation operation); + +/** + * Destroy a window. + * + * If `window` is NULL, this function will return immediately after setting + * the SDL error message to "Invalid window". See SDL_GetError(). + * + * \param window the window to destroy. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_CreateWindow + * \sa SDL_CreateWindowFrom + */ +extern DECLSPEC void SDLCALL SDL_DestroyWindow(SDL_Window * window); + + +/** + * Check whether the screensaver is currently enabled. + * + * The screensaver is disabled by default since SDL 2.0.2. Before SDL 2.0.2 + * the screensaver was enabled by default. + * + * The default can also be changed using `SDL_HINT_VIDEO_ALLOW_SCREENSAVER`. + * + * \returns SDL_TRUE if the screensaver is enabled, SDL_FALSE if it is + * disabled. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_DisableScreenSaver + * \sa SDL_EnableScreenSaver + */ +extern DECLSPEC SDL_bool SDLCALL SDL_IsScreenSaverEnabled(void); + +/** + * Allow the screen to be blanked by a screen saver. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_DisableScreenSaver + * \sa SDL_IsScreenSaverEnabled + */ +extern DECLSPEC void SDLCALL SDL_EnableScreenSaver(void); + +/** + * Prevent the screen from being blanked by a screen saver. + * + * If you disable the screensaver, it is automatically re-enabled when SDL + * quits. + * + * The screensaver is disabled by default since SDL 2.0.2. Before SDL 2.0.2 + * the screensaver was enabled by default. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_EnableScreenSaver + * \sa SDL_IsScreenSaverEnabled + */ +extern DECLSPEC void SDLCALL SDL_DisableScreenSaver(void); + + +/** + * \name OpenGL support functions + */ +/* @{ */ + +/** + * Dynamically load an OpenGL library. + * + * This should be done after initializing the video driver, but before + * creating any OpenGL windows. If no OpenGL library is loaded, the default + * library will be loaded upon creation of the first OpenGL window. + * + * If you do this, you need to retrieve all of the GL functions used in your + * program from the dynamic library using SDL_GL_GetProcAddress(). + * + * \param path the platform dependent OpenGL library name, or NULL to open the + * default OpenGL library. + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GL_GetProcAddress + * \sa SDL_GL_UnloadLibrary + */ +extern DECLSPEC int SDLCALL SDL_GL_LoadLibrary(const char *path); + +/** + * Get an OpenGL function by name. + * + * If the GL library is loaded at runtime with SDL_GL_LoadLibrary(), then all + * GL functions must be retrieved this way. Usually this is used to retrieve + * function pointers to OpenGL extensions. + * + * There are some quirks to looking up OpenGL functions that require some + * extra care from the application. If you code carefully, you can handle + * these quirks without any platform-specific code, though: + * + * - On Windows, function pointers are specific to the current GL context; + * this means you need to have created a GL context and made it current + * before calling SDL_GL_GetProcAddress(). If you recreate your context or + * create a second context, you should assume that any existing function + * pointers aren't valid to use with it. This is (currently) a + * Windows-specific limitation, and in practice lots of drivers don't suffer + * this limitation, but it is still the way the wgl API is documented to + * work and you should expect crashes if you don't respect it. Store a copy + * of the function pointers that comes and goes with context lifespan. + * - On X11, function pointers returned by this function are valid for any + * context, and can even be looked up before a context is created at all. + * This means that, for at least some common OpenGL implementations, if you + * look up a function that doesn't exist, you'll get a non-NULL result that + * is _NOT_ safe to call. You must always make sure the function is actually + * available for a given GL context before calling it, by checking for the + * existence of the appropriate extension with SDL_GL_ExtensionSupported(), + * or verifying that the version of OpenGL you're using offers the function + * as core functionality. + * - Some OpenGL drivers, on all platforms, *will* return NULL if a function + * isn't supported, but you can't count on this behavior. Check for + * extensions you use, and if you get a NULL anyway, act as if that + * extension wasn't available. This is probably a bug in the driver, but you + * can code defensively for this scenario anyhow. + * - Just because you're on Linux/Unix, don't assume you'll be using X11. + * Next-gen display servers are waiting to replace it, and may or may not + * make the same promises about function pointers. + * - OpenGL function pointers must be declared `APIENTRY` as in the example + * code. This will ensure the proper calling convention is followed on + * platforms where this matters (Win32) thereby avoiding stack corruption. + * + * \param proc the name of an OpenGL function. + * \returns a pointer to the named OpenGL function. The returned pointer + * should be cast to the appropriate function signature. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GL_ExtensionSupported + * \sa SDL_GL_LoadLibrary + * \sa SDL_GL_UnloadLibrary + */ +extern DECLSPEC void *SDLCALL SDL_GL_GetProcAddress(const char *proc); + +/** + * Unload the OpenGL library previously loaded by SDL_GL_LoadLibrary(). + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GL_LoadLibrary + */ +extern DECLSPEC void SDLCALL SDL_GL_UnloadLibrary(void); + +/** + * Check if an OpenGL extension is supported for the current context. + * + * This function operates on the current GL context; you must have created a + * context and it must be current before calling this function. Do not assume + * that all contexts you create will have the same set of extensions + * available, or that recreating an existing context will offer the same + * extensions again. + * + * While it's probably not a massive overhead, this function is not an O(1) + * operation. Check the extensions you care about after creating the GL + * context and save that information somewhere instead of calling the function + * every time you need to know. + * + * \param extension the name of the extension to check. + * \returns SDL_TRUE if the extension is supported, SDL_FALSE otherwise. + * + * \since This function is available since SDL 2.0.0. + */ +extern DECLSPEC SDL_bool SDLCALL SDL_GL_ExtensionSupported(const char + *extension); + +/** + * Reset all previously set OpenGL context attributes to their default values. + * + * \since This function is available since SDL 2.0.2. + * + * \sa SDL_GL_GetAttribute + * \sa SDL_GL_SetAttribute + */ +extern DECLSPEC void SDLCALL SDL_GL_ResetAttributes(void); + +/** + * Set an OpenGL window attribute before window creation. + * + * This function sets the OpenGL attribute `attr` to `value`. The requested + * attributes should be set before creating an OpenGL window. You should use + * SDL_GL_GetAttribute() to check the values after creating the OpenGL + * context, since the values obtained can differ from the requested ones. + * + * \param attr an SDL_GLattr enum value specifying the OpenGL attribute to + * set. + * \param value the desired value for the attribute. + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GL_GetAttribute + * \sa SDL_GL_ResetAttributes + */ +extern DECLSPEC int SDLCALL SDL_GL_SetAttribute(SDL_GLattr attr, int value); + +/** + * Get the actual value for an attribute from the current context. + * + * \param attr an SDL_GLattr enum value specifying the OpenGL attribute to + * get. + * \param value a pointer filled in with the current value of `attr`. + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GL_ResetAttributes + * \sa SDL_GL_SetAttribute + */ +extern DECLSPEC int SDLCALL SDL_GL_GetAttribute(SDL_GLattr attr, int *value); + +/** + * Create an OpenGL context for an OpenGL window, and make it current. + * + * Windows users new to OpenGL should note that, for historical reasons, GL + * functions added after OpenGL version 1.1 are not available by default. + * Those functions must be loaded at run-time, either with an OpenGL + * extension-handling library or with SDL_GL_GetProcAddress() and its related + * functions. + * + * SDL_GLContext is an alias for `void *`. It's opaque to the application. + * + * \param window the window to associate with the context. + * \returns the OpenGL context associated with `window` or NULL on error; call + * SDL_GetError() for more details. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GL_DeleteContext + * \sa SDL_GL_MakeCurrent + */ +extern DECLSPEC SDL_GLContext SDLCALL SDL_GL_CreateContext(SDL_Window * + window); + +/** + * Set up an OpenGL context for rendering into an OpenGL window. + * + * The context must have been created with a compatible window. + * + * \param window the window to associate with the context. + * \param context the OpenGL context to associate with the window. + * \returns 0 on success or a negative error code on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GL_CreateContext + */ +extern DECLSPEC int SDLCALL SDL_GL_MakeCurrent(SDL_Window * window, + SDL_GLContext context); + +/** + * Get the currently active OpenGL window. + * + * \returns the currently active OpenGL window on success or NULL on failure; + * call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + */ +extern DECLSPEC SDL_Window* SDLCALL SDL_GL_GetCurrentWindow(void); + +/** + * Get the currently active OpenGL context. + * + * \returns the currently active OpenGL context or NULL on failure; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GL_MakeCurrent + */ +extern DECLSPEC SDL_GLContext SDLCALL SDL_GL_GetCurrentContext(void); + +/** + * Get the size of a window's underlying drawable in pixels. + * + * This returns info useful for calling glViewport(). + * + * This may differ from SDL_GetWindowSize() if we're rendering to a high-DPI + * drawable, i.e. the window was created with `SDL_WINDOW_ALLOW_HIGHDPI` on a + * platform with high-DPI support (Apple calls this "Retina"), and not + * disabled by the `SDL_HINT_VIDEO_HIGHDPI_DISABLED` hint. + * + * \param window the window from which the drawable size should be queried. + * \param w a pointer to variable for storing the width in pixels, may be + * NULL. + * \param h a pointer to variable for storing the height in pixels, may be + * NULL. + * + * \since This function is available since SDL 2.0.1. + * + * \sa SDL_CreateWindow + * \sa SDL_GetWindowSize + */ +extern DECLSPEC void SDLCALL SDL_GL_GetDrawableSize(SDL_Window * window, int *w, + int *h); + +/** + * Set the swap interval for the current OpenGL context. + * + * Some systems allow specifying -1 for the interval, to enable adaptive + * vsync. Adaptive vsync works the same as vsync, but if you've already missed + * the vertical retrace for a given frame, it swaps buffers immediately, which + * might be less jarring for the user during occasional framerate drops. If an + * application requests adaptive vsync and the system does not support it, + * this function will fail and return -1. In such a case, you should probably + * retry the call with 1 for the interval. + * + * Adaptive vsync is implemented for some glX drivers with + * GLX_EXT_swap_control_tear, and for some Windows drivers with + * WGL_EXT_swap_control_tear. + * + * Read more on the Khronos wiki: + * https://www.khronos.org/opengl/wiki/Swap_Interval#Adaptive_Vsync + * + * \param interval 0 for immediate updates, 1 for updates synchronized with + * the vertical retrace, -1 for adaptive vsync. + * \returns 0 on success or -1 if setting the swap interval is not supported; + * call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GL_GetSwapInterval + */ +extern DECLSPEC int SDLCALL SDL_GL_SetSwapInterval(int interval); + +/** + * Get the swap interval for the current OpenGL context. + * + * If the system can't determine the swap interval, or there isn't a valid + * current context, this function will return 0 as a safe default. + * + * \returns 0 if there is no vertical retrace synchronization, 1 if the buffer + * swap is synchronized with the vertical retrace, and -1 if late + * swaps happen immediately instead of waiting for the next retrace; + * call SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GL_SetSwapInterval + */ +extern DECLSPEC int SDLCALL SDL_GL_GetSwapInterval(void); + +/** + * Update a window with OpenGL rendering. + * + * This is used with double-buffered OpenGL contexts, which are the default. + * + * On macOS, make sure you bind 0 to the draw framebuffer before swapping the + * window, otherwise nothing will happen. If you aren't using + * glBindFramebuffer(), this is the default and you won't have to do anything + * extra. + * + * \param window the window to change. + * + * \since This function is available since SDL 2.0.0. + */ +extern DECLSPEC void SDLCALL SDL_GL_SwapWindow(SDL_Window * window); + +/** + * Delete an OpenGL context. + * + * \param context the OpenGL context to be deleted. + * + * \since This function is available since SDL 2.0.0. + * + * \sa SDL_GL_CreateContext + */ +extern DECLSPEC void SDLCALL SDL_GL_DeleteContext(SDL_GLContext context); + +/* @} *//* OpenGL support functions */ + + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include "close_code.h" + +#endif /* SDL_video_h_ */ + +/* vi: set ts=4 sw=4 expandtab: */ diff --git a/third_party/tlRender-install-Release/include/SDL2/SDL_vulkan.h b/third_party/tlRender-install-Release/include/SDL2/SDL_vulkan.h new file mode 100644 index 00000000..e005ed37 --- /dev/null +++ b/third_party/tlRender-install-Release/include/SDL2/SDL_vulkan.h @@ -0,0 +1,219 @@ +/* + Simple DirectMedia Layer + Copyright (C) 2017, Mark Callow + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +/** + * # CategoryVulkan + * + * Header file for functions to creating Vulkan surfaces on SDL windows. + */ + +#ifndef SDL_vulkan_h_ +#define SDL_vulkan_h_ + +#include "SDL_video.h" + +#include "begin_code.h" +/* Set up for C function definitions, even when using C++ */ +#ifdef __cplusplus +extern "C" { +#endif + +/* Avoid including vulkan.h, don't define VkInstance if it's already included */ +#ifdef VULKAN_H_ +#define NO_SDL_VULKAN_TYPEDEFS +#endif +#ifndef NO_SDL_VULKAN_TYPEDEFS +#define VK_DEFINE_HANDLE(object) typedef struct object##_T* object; + +#if defined(__LP64__) || defined(_WIN64) || defined(__x86_64__) || defined(_M_X64) || defined(__ia64) || defined (_M_IA64) || defined(__aarch64__) || defined(__powerpc64__) +#define VK_DEFINE_NON_DISPATCHABLE_HANDLE(object) typedef struct object##_T *object; +#else +#define VK_DEFINE_NON_DISPATCHABLE_HANDLE(object) typedef uint64_t object; +#endif + +VK_DEFINE_HANDLE(VkInstance) +VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkSurfaceKHR) + +/* Make sure to undef to avoid issues in case of later vulkan include */ +#undef VK_DEFINE_HANDLE +#undef VK_DEFINE_NON_DISPATCHABLE_HANDLE + +#endif /* !NO_SDL_VULKAN_TYPEDEFS */ + +typedef VkInstance SDL_vulkanInstance; +typedef VkSurfaceKHR SDL_vulkanSurface; /* for compatibility with Tizen */ + +/** + * \name Vulkan support functions + * + * \note SDL_Vulkan_GetInstanceExtensions & SDL_Vulkan_CreateSurface API + * is compatable with Tizen's implementation of Vulkan in SDL. + */ +/* @{ */ + +/** + * Dynamically load the Vulkan loader library. + * + * This should be called after initializing the video driver, but before + * creating any Vulkan windows. If no Vulkan loader library is loaded, the + * default library will be loaded upon creation of the first Vulkan window. + * + * It is fairly common for Vulkan applications to link with libvulkan instead + * of explicitly loading it at run time. This will work with SDL provided the + * application links to a dynamic library and both it and SDL use the same + * search path. + * + * If you specify a non-NULL `path`, an application should retrieve all of the + * Vulkan functions it uses from the dynamic library using + * SDL_Vulkan_GetVkGetInstanceProcAddr unless you can guarantee `path` points + * to the same vulkan loader library the application linked to. + * + * On Apple devices, if `path` is NULL, SDL will attempt to find the + * `vkGetInstanceProcAddr` address within all the Mach-O images of the current + * process. This is because it is fairly common for Vulkan applications to + * link with libvulkan (and historically MoltenVK was provided as a static + * library). If it is not found, on macOS, SDL will attempt to load + * `vulkan.framework/vulkan`, `libvulkan.1.dylib`, + * `MoltenVK.framework/MoltenVK`, and `libMoltenVK.dylib`, in that order. On + * iOS, SDL will attempt to load `libMoltenVK.dylib`. Applications using a + * dynamic framework or .dylib must ensure it is included in its application + * bundle. + * + * On non-Apple devices, application linking with a static libvulkan is not + * supported. Either do not link to the Vulkan loader or link to a dynamic + * library version. + * + * \param path The platform dependent Vulkan loader library name or NULL. + * \returns 0 on success or -1 if the library couldn't be loaded; call + * SDL_GetError() for more information. + * + * \since This function is available since SDL 2.0.6. + * + * \sa SDL_Vulkan_GetVkGetInstanceProcAddr + * \sa SDL_Vulkan_UnloadLibrary + */ +extern DECLSPEC int SDLCALL SDL_Vulkan_LoadLibrary(const char *path); + +/** + * Get the address of the `vkGetInstanceProcAddr` function. + * + * This should be called after either calling SDL_Vulkan_LoadLibrary() or + * creating an SDL_Window with the `SDL_WINDOW_VULKAN` flag. + * + * \returns the function pointer for `vkGetInstanceProcAddr` or NULL on error. + * + * \since This function is available since SDL 2.0.6. + */ +extern DECLSPEC void *SDLCALL SDL_Vulkan_GetVkGetInstanceProcAddr(void); + +/** + * Unload the Vulkan library previously loaded by SDL_Vulkan_LoadLibrary() + * + * \since This function is available since SDL 2.0.6. + * + * \sa SDL_Vulkan_LoadLibrary + */ +extern DECLSPEC void SDLCALL SDL_Vulkan_UnloadLibrary(void); + +/** + * Get the names of the Vulkan instance extensions needed to create a surface + * with SDL_Vulkan_CreateSurface. + * + * If `pNames` is NULL, then the number of required Vulkan instance extensions + * is returned in `pCount`. Otherwise, `pCount` must point to a variable set + * to the number of elements in the `pNames` array, and on return the variable + * is overwritten with the number of names actually written to `pNames`. If + * `pCount` is less than the number of required extensions, at most `pCount` + * structures will be written. If `pCount` is smaller than the number of + * required extensions, SDL_FALSE will be returned instead of SDL_TRUE, to + * indicate that not all the required extensions were returned. + * + * The `window` parameter is currently needed to be valid as of SDL 2.0.8, + * however, this parameter will likely be removed in future releases + * + * \param window A window for which the required Vulkan instance extensions + * should be retrieved (will be deprecated in a future release). + * \param pCount A pointer to an unsigned int corresponding to the number of + * extensions to be returned. + * \param pNames NULL or a pointer to an array to be filled with required + * Vulkan instance extensions. + * \returns SDL_TRUE on success, SDL_FALSE on error. + * + * \since This function is available since SDL 2.0.6. + * + * \sa SDL_Vulkan_CreateSurface + */ +extern DECLSPEC SDL_bool SDLCALL SDL_Vulkan_GetInstanceExtensions(SDL_Window *window, + unsigned int *pCount, + const char **pNames); + +/** + * Create a Vulkan rendering surface for a window. + * + * The `window` must have been created with the `SDL_WINDOW_VULKAN` flag and + * `instance` must have been created with extensions returned by + * SDL_Vulkan_GetInstanceExtensions() enabled. + * + * \param window The window to which to attach the Vulkan surface. + * \param instance The Vulkan instance handle. + * \param surface A pointer to a VkSurfaceKHR handle to output the newly + * created surface. + * \returns SDL_TRUE on success, SDL_FALSE on error. + * + * \since This function is available since SDL 2.0.6. + * + * \sa SDL_Vulkan_GetInstanceExtensions + * \sa SDL_Vulkan_GetDrawableSize + */ +extern DECLSPEC SDL_bool SDLCALL SDL_Vulkan_CreateSurface(SDL_Window *window, + VkInstance instance, + VkSurfaceKHR* surface); + +/** + * Get the size of the window's underlying drawable dimensions in pixels. + * + * This may differ from SDL_GetWindowSize() if we're rendering to a high-DPI + * drawable, i.e. the window was created with `SDL_WINDOW_ALLOW_HIGHDPI` on a + * platform with high-DPI support (Apple calls this "Retina"), and not + * disabled by the `SDL_HINT_VIDEO_HIGHDPI_DISABLED` hint. + * + * \param window an SDL_Window for which the size is to be queried. + * \param w Pointer to the variable to write the width to or NULL. + * \param h Pointer to the variable to write the height to or NULL. + * + * \since This function is available since SDL 2.0.6. + * + * \sa SDL_GetWindowSize + * \sa SDL_CreateWindow + * \sa SDL_Vulkan_CreateSurface + */ +extern DECLSPEC void SDLCALL SDL_Vulkan_GetDrawableSize(SDL_Window * window, + int *w, int *h); + +/* @} *//* Vulkan support functions */ + +/* Ends C function definitions when using C++ */ +#ifdef __cplusplus +} +#endif +#include "close_code.h" + +#endif /* SDL_vulkan_h_ */ diff --git a/third_party/tlRender-install-Release/include/SDL2/begin_code.h b/third_party/tlRender-install-Release/include/SDL2/begin_code.h new file mode 100644 index 00000000..2044e5cb --- /dev/null +++ b/third_party/tlRender-install-Release/include/SDL2/begin_code.h @@ -0,0 +1,189 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2025 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +/* WIKI CATEGORY: BeginCode */ + +/** + * begin_code.h sets things up for C dynamic library function definitions, + * static inlined functions, and structures aligned at 4-byte alignment. + * If you don't like ugly C preprocessor code, don't look at this file. :) + */ + +/* This shouldn't be nested -- included it around code only. */ +#ifdef SDL_begin_code_h +#error Nested inclusion of begin_code.h +#endif +#define SDL_begin_code_h + +#ifndef SDL_DEPRECATED +# if defined(__GNUC__) && (__GNUC__ >= 4) /* technically, this arrived in gcc 3.1, but oh well. */ +# define SDL_DEPRECATED __attribute__((deprecated)) +# elif defined(_MSC_VER) +# define SDL_DEPRECATED __declspec(deprecated) +# else +# define SDL_DEPRECATED +# endif +#endif + +#ifndef SDL_UNUSED +# ifdef __GNUC__ +# define SDL_UNUSED __attribute__((unused)) +# else +# define SDL_UNUSED +# endif +#endif + +/* Some compilers use a special export keyword */ +#ifndef DECLSPEC +# if defined(__WIN32__) || defined(__WINRT__) || defined(__CYGWIN__) || defined(__GDK__) +# ifdef DLL_EXPORT +# define DECLSPEC __declspec(dllexport) +# else +# define DECLSPEC +# endif +# elif defined(__OS2__) +# ifdef BUILD_SDL +# define DECLSPEC __declspec(dllexport) +# else +# define DECLSPEC +# endif +# else +# if defined(__GNUC__) && __GNUC__ >= 4 +# define DECLSPEC __attribute__ ((visibility("default"))) +# else +# define DECLSPEC +# endif +# endif +#endif + +/* By default SDL uses the C calling convention */ +#ifndef SDLCALL +#if (defined(__WIN32__) || defined(__WINRT__) || defined(__GDK__)) && !defined(__GNUC__) +#define SDLCALL __cdecl +#elif defined(__OS2__) || defined(__EMX__) +#define SDLCALL _System +# if defined (__GNUC__) && !defined(_System) +# define _System /* for old EMX/GCC compat. */ +# endif +#else +#define SDLCALL +#endif +#endif /* SDLCALL */ + +/* Removed DECLSPEC on Symbian OS because SDL cannot be a DLL in EPOC */ +#ifdef __SYMBIAN32__ +#undef DECLSPEC +#define DECLSPEC +#endif /* __SYMBIAN32__ */ + +/* Force structure packing at 4 byte alignment. + This is necessary if the header is included in code which has structure + packing set to an alternate value, say for loading structures from disk. + The packing is reset to the previous value in close_code.h + */ +#if defined(_MSC_VER) || defined(__MWERKS__) || defined(__BORLANDC__) +#ifdef _MSC_VER +#pragma warning(disable: 4103) +#endif +#ifdef __clang__ +#pragma clang diagnostic ignored "-Wpragma-pack" +#endif +#ifdef __BORLANDC__ +#pragma nopackwarning +#endif +#ifdef _WIN64 +/* Use 8-byte alignment on 64-bit architectures, so pointers are aligned */ +#pragma pack(push,8) +#else +#pragma pack(push,4) +#endif +#endif /* Compiler needs structure packing set */ + +#ifndef SDL_INLINE +#if defined(__GNUC__) +#define SDL_INLINE __inline__ +#elif defined(_MSC_VER) || defined(__BORLANDC__) || \ + defined(__DMC__) || defined(__SC__) || \ + defined(__WATCOMC__) || defined(__LCC__) || \ + defined(__DECC) || defined(__CC_ARM) +#define SDL_INLINE __inline +#ifndef __inline__ +#define __inline__ __inline +#endif +#else +#define SDL_INLINE inline +#ifndef __inline__ +#define __inline__ inline +#endif +#endif +#endif /* SDL_INLINE not defined */ + +#ifndef SDL_FORCE_INLINE +#if defined(_MSC_VER) +#define SDL_FORCE_INLINE __forceinline +#elif ( (defined(__GNUC__) && (__GNUC__ >= 4)) || defined(__clang__) ) +#define SDL_FORCE_INLINE __attribute__((always_inline)) static __inline__ +#else +#define SDL_FORCE_INLINE static SDL_INLINE +#endif +#endif /* SDL_FORCE_INLINE not defined */ + +#ifndef SDL_NORETURN +#if defined(__GNUC__) +#define SDL_NORETURN __attribute__((noreturn)) +#elif defined(_MSC_VER) +#define SDL_NORETURN __declspec(noreturn) +#else +#define SDL_NORETURN +#endif +#endif /* SDL_NORETURN not defined */ + +/* Apparently this is needed by several Windows compilers */ +#if !defined(__MACH__) +#ifndef NULL +#ifdef __cplusplus +#define NULL 0 +#else +#define NULL ((void *)0) +#endif +#endif /* NULL */ +#endif /* ! Mac OS X - breaks precompiled headers */ + +#ifndef SDL_FALLTHROUGH +#if (defined(__cplusplus) && __cplusplus >= 201703L) || \ + (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 202000L) +#define SDL_FALLTHROUGH [[fallthrough]] +#else +#if defined(__has_attribute) && !defined(__SUNPRO_C) && !defined(__SUNPRO_CC) +#define SDL_HAS_FALLTHROUGH __has_attribute(__fallthrough__) +#else +#define SDL_HAS_FALLTHROUGH 0 +#endif /* __has_attribute */ +#if SDL_HAS_FALLTHROUGH && \ + ((defined(__GNUC__) && __GNUC__ >= 7) || \ + (defined(__clang_major__) && __clang_major__ >= 10)) +#define SDL_FALLTHROUGH __attribute__((__fallthrough__)) +#else +#define SDL_FALLTHROUGH do {} while (0) /* fallthrough */ +#endif /* SDL_HAS_FALLTHROUGH */ +#undef SDL_HAS_FALLTHROUGH +#endif /* C++17 or C2x */ +#endif /* SDL_FALLTHROUGH not defined */ diff --git a/third_party/tlRender-install-Release/include/SDL2/close_code.h b/third_party/tlRender-install-Release/include/SDL2/close_code.h new file mode 100644 index 00000000..f991f458 --- /dev/null +++ b/third_party/tlRender-install-Release/include/SDL2/close_code.h @@ -0,0 +1,40 @@ +/* + Simple DirectMedia Layer + Copyright (C) 1997-2025 Sam Lantinga + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +/** + * \file close_code.h + * + * This file reverses the effects of begin_code.h and should be included + * after you finish any function and structure declarations in your headers + */ + +#ifndef SDL_begin_code_h +#error close_code.h included without matching begin_code.h +#endif +#undef SDL_begin_code_h + +/* Reset structure packing at previous byte alignment */ +#if defined(_MSC_VER) || defined(__MWERKS__) || defined(__BORLANDC__) +#ifdef __BORLANDC__ +#pragma nopackwarning +#endif +#pragma pack(pop) +#endif /* Compiler needs structure packing set */ diff --git a/third_party/tlRender-install-Release/include/expat.h b/third_party/tlRender-install-Release/include/expat.h new file mode 100644 index 00000000..bb9cdedb --- /dev/null +++ b/third_party/tlRender-install-Release/include/expat.h @@ -0,0 +1,1090 @@ +/* + __ __ _ + ___\ \/ /_ __ __ _| |_ + / _ \\ /| '_ \ / _` | __| + | __// \| |_) | (_| | |_ + \___/_/\_\ .__/ \__,_|\__| + |_| XML parser + + Copyright (c) 1997-2000 Thai Open Source Software Center Ltd + Copyright (c) 2000 Clark Cooper + Copyright (c) 2000-2005 Fred L. Drake, Jr. + Copyright (c) 2001-2002 Greg Stein + Copyright (c) 2002-2016 Karl Waclawek + Copyright (c) 2016-2025 Sebastian Pipping + Copyright (c) 2016 Cristian Rodríguez + Copyright (c) 2016 Thomas Beutlich + Copyright (c) 2017 Rhodri James + Copyright (c) 2022 Thijs Schreijer + Copyright (c) 2023 Hanno Böck + Copyright (c) 2023 Sony Corporation / Snild Dolkow + Copyright (c) 2024 Taichi Haradaguchi <20001722@ymail.ne.jp> + Licensed under the MIT license: + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + "Software"), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to permit + persons to whom the Software is furnished to do so, subject to the + following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN + NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE + USE OR OTHER DEALINGS IN THE SOFTWARE. +*/ + +#ifndef Expat_INCLUDED +# define Expat_INCLUDED 1 + +# include +# include "expat_external.h" + +# ifdef __cplusplus +extern "C" { +# endif + +struct XML_ParserStruct; +typedef struct XML_ParserStruct *XML_Parser; + +typedef unsigned char XML_Bool; +# define XML_TRUE ((XML_Bool)1) +# define XML_FALSE ((XML_Bool)0) + +/* The XML_Status enum gives the possible return values for several + API functions. The preprocessor #defines are included so this + stanza can be added to code that still needs to support older + versions of Expat 1.95.x: + + #ifndef XML_STATUS_OK + #define XML_STATUS_OK 1 + #define XML_STATUS_ERROR 0 + #endif + + Otherwise, the #define hackery is quite ugly and would have been + dropped. +*/ +enum XML_Status { + XML_STATUS_ERROR = 0, +# define XML_STATUS_ERROR XML_STATUS_ERROR + XML_STATUS_OK = 1, +# define XML_STATUS_OK XML_STATUS_OK + XML_STATUS_SUSPENDED = 2 +# define XML_STATUS_SUSPENDED XML_STATUS_SUSPENDED +}; + +enum XML_Error { + XML_ERROR_NONE, + XML_ERROR_NO_MEMORY, + XML_ERROR_SYNTAX, + XML_ERROR_NO_ELEMENTS, + XML_ERROR_INVALID_TOKEN, + XML_ERROR_UNCLOSED_TOKEN, + XML_ERROR_PARTIAL_CHAR, + XML_ERROR_TAG_MISMATCH, + XML_ERROR_DUPLICATE_ATTRIBUTE, + XML_ERROR_JUNK_AFTER_DOC_ELEMENT, + XML_ERROR_PARAM_ENTITY_REF, + XML_ERROR_UNDEFINED_ENTITY, + XML_ERROR_RECURSIVE_ENTITY_REF, + XML_ERROR_ASYNC_ENTITY, + XML_ERROR_BAD_CHAR_REF, + XML_ERROR_BINARY_ENTITY_REF, + XML_ERROR_ATTRIBUTE_EXTERNAL_ENTITY_REF, + XML_ERROR_MISPLACED_XML_PI, + XML_ERROR_UNKNOWN_ENCODING, + XML_ERROR_INCORRECT_ENCODING, + XML_ERROR_UNCLOSED_CDATA_SECTION, + XML_ERROR_EXTERNAL_ENTITY_HANDLING, + XML_ERROR_NOT_STANDALONE, + XML_ERROR_UNEXPECTED_STATE, + XML_ERROR_ENTITY_DECLARED_IN_PE, + XML_ERROR_FEATURE_REQUIRES_XML_DTD, + XML_ERROR_CANT_CHANGE_FEATURE_ONCE_PARSING, + /* Added in 1.95.7. */ + XML_ERROR_UNBOUND_PREFIX, + /* Added in 1.95.8. */ + XML_ERROR_UNDECLARING_PREFIX, + XML_ERROR_INCOMPLETE_PE, + XML_ERROR_XML_DECL, + XML_ERROR_TEXT_DECL, + XML_ERROR_PUBLICID, + XML_ERROR_SUSPENDED, + XML_ERROR_NOT_SUSPENDED, + XML_ERROR_ABORTED, + XML_ERROR_FINISHED, + XML_ERROR_SUSPEND_PE, + /* Added in 2.0. */ + XML_ERROR_RESERVED_PREFIX_XML, + XML_ERROR_RESERVED_PREFIX_XMLNS, + XML_ERROR_RESERVED_NAMESPACE_URI, + /* Added in 2.2.1. */ + XML_ERROR_INVALID_ARGUMENT, + /* Added in 2.3.0. */ + XML_ERROR_NO_BUFFER, + /* Added in 2.4.0. */ + XML_ERROR_AMPLIFICATION_LIMIT_BREACH, + /* Added in 2.6.4. */ + XML_ERROR_NOT_STARTED, +}; + +enum XML_Content_Type { + XML_CTYPE_EMPTY = 1, + XML_CTYPE_ANY, + XML_CTYPE_MIXED, + XML_CTYPE_NAME, + XML_CTYPE_CHOICE, + XML_CTYPE_SEQ +}; + +enum XML_Content_Quant { + XML_CQUANT_NONE, + XML_CQUANT_OPT, + XML_CQUANT_REP, + XML_CQUANT_PLUS +}; + +/* If type == XML_CTYPE_EMPTY or XML_CTYPE_ANY, then quant will be + XML_CQUANT_NONE, and the other fields will be zero or NULL. + If type == XML_CTYPE_MIXED, then quant will be NONE or REP and + numchildren will contain number of elements that may be mixed in + and children point to an array of XML_Content cells that will be + all of XML_CTYPE_NAME type with no quantification. + + If type == XML_CTYPE_NAME, then the name points to the name, and + the numchildren field will be zero and children will be NULL. The + quant fields indicates any quantifiers placed on the name. + + CHOICE and SEQ will have name NULL, the number of children in + numchildren and children will point, recursively, to an array + of XML_Content cells. + + The EMPTY, ANY, and MIXED types will only occur at top level. +*/ + +typedef struct XML_cp XML_Content; + +struct XML_cp { + enum XML_Content_Type type; + enum XML_Content_Quant quant; + XML_Char *name; + unsigned int numchildren; + XML_Content *children; +}; + +/* This is called for an element declaration. See above for + description of the model argument. It's the user code's responsibility + to free model when finished with it. See XML_FreeContentModel. + There is no need to free the model from the handler, it can be kept + around and freed at a later stage. +*/ +typedef void(XMLCALL *XML_ElementDeclHandler)(void *userData, + const XML_Char *name, + XML_Content *model); + +XMLPARSEAPI(void) +XML_SetElementDeclHandler(XML_Parser parser, XML_ElementDeclHandler eldecl); + +/* The Attlist declaration handler is called for *each* attribute. So + a single Attlist declaration with multiple attributes declared will + generate multiple calls to this handler. The "default" parameter + may be NULL in the case of the "#IMPLIED" or "#REQUIRED" + keyword. The "isrequired" parameter will be true and the default + value will be NULL in the case of "#REQUIRED". If "isrequired" is + true and default is non-NULL, then this is a "#FIXED" default. +*/ +typedef void(XMLCALL *XML_AttlistDeclHandler)( + void *userData, const XML_Char *elname, const XML_Char *attname, + const XML_Char *att_type, const XML_Char *dflt, int isrequired); + +XMLPARSEAPI(void) +XML_SetAttlistDeclHandler(XML_Parser parser, XML_AttlistDeclHandler attdecl); + +/* The XML declaration handler is called for *both* XML declarations + and text declarations. The way to distinguish is that the version + parameter will be NULL for text declarations. The encoding + parameter may be NULL for XML declarations. The standalone + parameter will be -1, 0, or 1 indicating respectively that there + was no standalone parameter in the declaration, that it was given + as no, or that it was given as yes. +*/ +typedef void(XMLCALL *XML_XmlDeclHandler)(void *userData, + const XML_Char *version, + const XML_Char *encoding, + int standalone); + +XMLPARSEAPI(void) +XML_SetXmlDeclHandler(XML_Parser parser, XML_XmlDeclHandler xmldecl); + +typedef struct { + void *(*malloc_fcn)(size_t size); + void *(*realloc_fcn)(void *ptr, size_t size); + void (*free_fcn)(void *ptr); +} XML_Memory_Handling_Suite; + +/* Constructs a new parser; encoding is the encoding specified by the + external protocol or NULL if there is none specified. +*/ +XMLPARSEAPI(XML_Parser) +XML_ParserCreate(const XML_Char *encoding); + +/* Constructs a new parser and namespace processor. Element type + names and attribute names that belong to a namespace will be + expanded; unprefixed attribute names are never expanded; unprefixed + element type names are expanded only if there is a default + namespace. The expanded name is the concatenation of the namespace + URI, the namespace separator character, and the local part of the + name. If the namespace separator is '\0' then the namespace URI + and the local part will be concatenated without any separator. + It is a programming error to use the separator '\0' with namespace + triplets (see XML_SetReturnNSTriplet). + If a namespace separator is chosen that can be part of a URI or + part of an XML name, splitting an expanded name back into its + 1, 2 or 3 original parts on application level in the element handler + may end up vulnerable, so these are advised against; sane choices for + a namespace separator are e.g. '\n' (line feed) and '|' (pipe). + + Note that Expat does not validate namespace URIs (beyond encoding) + against RFC 3986 today (and is not required to do so with regard to + the XML 1.0 namespaces specification) but it may start doing that + in future releases. Before that, an application using Expat must + be ready to receive namespace URIs containing non-URI characters. +*/ +XMLPARSEAPI(XML_Parser) +XML_ParserCreateNS(const XML_Char *encoding, XML_Char namespaceSeparator); + +/* Constructs a new parser using the memory management suite referred to + by memsuite. If memsuite is NULL, then use the standard library memory + suite. If namespaceSeparator is non-NULL it creates a parser with + namespace processing as described above. The character pointed at + will serve as the namespace separator. + + All further memory operations used for the created parser will come from + the given suite. +*/ +XMLPARSEAPI(XML_Parser) +XML_ParserCreate_MM(const XML_Char *encoding, + const XML_Memory_Handling_Suite *memsuite, + const XML_Char *namespaceSeparator); + +/* Prepare a parser object to be reused. This is particularly + valuable when memory allocation overhead is disproportionately high, + such as when a large number of small documnents need to be parsed. + All handlers are cleared from the parser, except for the + unknownEncodingHandler. The parser's external state is re-initialized + except for the values of ns and ns_triplets. + + Added in Expat 1.95.3. +*/ +XMLPARSEAPI(XML_Bool) +XML_ParserReset(XML_Parser parser, const XML_Char *encoding); + +/* atts is array of name/value pairs, terminated by 0; + names and values are 0 terminated. +*/ +typedef void(XMLCALL *XML_StartElementHandler)(void *userData, + const XML_Char *name, + const XML_Char **atts); + +typedef void(XMLCALL *XML_EndElementHandler)(void *userData, + const XML_Char *name); + +/* s is not 0 terminated. */ +typedef void(XMLCALL *XML_CharacterDataHandler)(void *userData, + const XML_Char *s, int len); + +/* target and data are 0 terminated */ +typedef void(XMLCALL *XML_ProcessingInstructionHandler)(void *userData, + const XML_Char *target, + const XML_Char *data); + +/* data is 0 terminated */ +typedef void(XMLCALL *XML_CommentHandler)(void *userData, const XML_Char *data); + +typedef void(XMLCALL *XML_StartCdataSectionHandler)(void *userData); +typedef void(XMLCALL *XML_EndCdataSectionHandler)(void *userData); + +/* This is called for any characters in the XML document for which + there is no applicable handler. This includes both characters that + are part of markup which is of a kind that is not reported + (comments, markup declarations), or characters that are part of a + construct which could be reported but for which no handler has been + supplied. The characters are passed exactly as they were in the XML + document except that they will be encoded in UTF-8 or UTF-16. + Line boundaries are not normalized. Note that a byte order mark + character is not passed to the default handler. There are no + guarantees about how characters are divided between calls to the + default handler: for example, a comment might be split between + multiple calls. +*/ +typedef void(XMLCALL *XML_DefaultHandler)(void *userData, const XML_Char *s, + int len); + +/* This is called for the start of the DOCTYPE declaration, before + any DTD or internal subset is parsed. +*/ +typedef void(XMLCALL *XML_StartDoctypeDeclHandler)(void *userData, + const XML_Char *doctypeName, + const XML_Char *sysid, + const XML_Char *pubid, + int has_internal_subset); + +/* This is called for the end of the DOCTYPE declaration when the + closing > is encountered, but after processing any external + subset. +*/ +typedef void(XMLCALL *XML_EndDoctypeDeclHandler)(void *userData); + +/* This is called for entity declarations. The is_parameter_entity + argument will be non-zero if the entity is a parameter entity, zero + otherwise. + + For internal entities (), value will + be non-NULL and systemId, publicID, and notationName will be NULL. + The value string is NOT null-terminated; the length is provided in + the value_length argument. Since it is legal to have zero-length + values, do not use this argument to test for internal entities. + + For external entities, value will be NULL and systemId will be + non-NULL. The publicId argument will be NULL unless a public + identifier was provided. The notationName argument will have a + non-NULL value only for unparsed entity declarations. + + Note that is_parameter_entity can't be changed to XML_Bool, since + that would break binary compatibility. +*/ +typedef void(XMLCALL *XML_EntityDeclHandler)( + void *userData, const XML_Char *entityName, int is_parameter_entity, + const XML_Char *value, int value_length, const XML_Char *base, + const XML_Char *systemId, const XML_Char *publicId, + const XML_Char *notationName); + +XMLPARSEAPI(void) +XML_SetEntityDeclHandler(XML_Parser parser, XML_EntityDeclHandler handler); + +/* OBSOLETE -- OBSOLETE -- OBSOLETE + This handler has been superseded by the EntityDeclHandler above. + It is provided here for backward compatibility. + + This is called for a declaration of an unparsed (NDATA) entity. + The base argument is whatever was set by XML_SetBase. The + entityName, systemId and notationName arguments will never be + NULL. The other arguments may be. +*/ +typedef void(XMLCALL *XML_UnparsedEntityDeclHandler)( + void *userData, const XML_Char *entityName, const XML_Char *base, + const XML_Char *systemId, const XML_Char *publicId, + const XML_Char *notationName); + +/* This is called for a declaration of notation. The base argument is + whatever was set by XML_SetBase. The notationName will never be + NULL. The other arguments can be. +*/ +typedef void(XMLCALL *XML_NotationDeclHandler)(void *userData, + const XML_Char *notationName, + const XML_Char *base, + const XML_Char *systemId, + const XML_Char *publicId); + +/* When namespace processing is enabled, these are called once for + each namespace declaration. The call to the start and end element + handlers occur between the calls to the start and end namespace + declaration handlers. For an xmlns attribute, prefix will be + NULL. For an xmlns="" attribute, uri will be NULL. +*/ +typedef void(XMLCALL *XML_StartNamespaceDeclHandler)(void *userData, + const XML_Char *prefix, + const XML_Char *uri); + +typedef void(XMLCALL *XML_EndNamespaceDeclHandler)(void *userData, + const XML_Char *prefix); + +/* This is called if the document is not standalone, that is, it has an + external subset or a reference to a parameter entity, but does not + have standalone="yes". If this handler returns XML_STATUS_ERROR, + then processing will not continue, and the parser will return a + XML_ERROR_NOT_STANDALONE error. + If parameter entity parsing is enabled, then in addition to the + conditions above this handler will only be called if the referenced + entity was actually read. +*/ +typedef int(XMLCALL *XML_NotStandaloneHandler)(void *userData); + +/* This is called for a reference to an external parsed general + entity. The referenced entity is not automatically parsed. The + application can parse it immediately or later using + XML_ExternalEntityParserCreate. + + The parser argument is the parser parsing the entity containing the + reference; it can be passed as the parser argument to + XML_ExternalEntityParserCreate. The systemId argument is the + system identifier as specified in the entity declaration; it will + not be NULL. + + The base argument is the system identifier that should be used as + the base for resolving systemId if systemId was relative; this is + set by XML_SetBase; it may be NULL. + + The publicId argument is the public identifier as specified in the + entity declaration, or NULL if none was specified; the whitespace + in the public identifier will have been normalized as required by + the XML spec. + + The context argument specifies the parsing context in the format + expected by the context argument to XML_ExternalEntityParserCreate; + context is valid only until the handler returns, so if the + referenced entity is to be parsed later, it must be copied. + context is NULL only when the entity is a parameter entity. + + The handler should return XML_STATUS_ERROR if processing should not + continue because of a fatal error in the handling of the external + entity. In this case the calling parser will return an + XML_ERROR_EXTERNAL_ENTITY_HANDLING error. + + Note that unlike other handlers the first argument is the parser, + not userData. +*/ +typedef int(XMLCALL *XML_ExternalEntityRefHandler)(XML_Parser parser, + const XML_Char *context, + const XML_Char *base, + const XML_Char *systemId, + const XML_Char *publicId); + +/* This is called in two situations: + 1) An entity reference is encountered for which no declaration + has been read *and* this is not an error. + 2) An internal entity reference is read, but not expanded, because + XML_SetDefaultHandler has been called. + Note: skipped parameter entities in declarations and skipped general + entities in attribute values cannot be reported, because + the event would be out of sync with the reporting of the + declarations or attribute values +*/ +typedef void(XMLCALL *XML_SkippedEntityHandler)(void *userData, + const XML_Char *entityName, + int is_parameter_entity); + +/* This structure is filled in by the XML_UnknownEncodingHandler to + provide information to the parser about encodings that are unknown + to the parser. + + The map[b] member gives information about byte sequences whose + first byte is b. + + If map[b] is c where c is >= 0, then b by itself encodes the + Unicode scalar value c. + + If map[b] is -1, then the byte sequence is malformed. + + If map[b] is -n, where n >= 2, then b is the first byte of an + n-byte sequence that encodes a single Unicode scalar value. + + The data member will be passed as the first argument to the convert + function. + + The convert function is used to convert multibyte sequences; s will + point to a n-byte sequence where map[(unsigned char)*s] == -n. The + convert function must return the Unicode scalar value represented + by this byte sequence or -1 if the byte sequence is malformed. + + The convert function may be NULL if the encoding is a single-byte + encoding, that is if map[b] >= -1 for all bytes b. + + When the parser is finished with the encoding, then if release is + not NULL, it will call release passing it the data member; once + release has been called, the convert function will not be called + again. + + Expat places certain restrictions on the encodings that are supported + using this mechanism. + + 1. Every ASCII character that can appear in a well-formed XML document, + other than the characters + + $@\^`{}~ + + must be represented by a single byte, and that byte must be the + same byte that represents that character in ASCII. + + 2. No character may require more than 4 bytes to encode. + + 3. All characters encoded must have Unicode scalar values <= + 0xFFFF, (i.e., characters that would be encoded by surrogates in + UTF-16 are not allowed). Note that this restriction doesn't + apply to the built-in support for UTF-8 and UTF-16. + + 4. No Unicode character may be encoded by more than one distinct + sequence of bytes. +*/ +typedef struct { + int map[256]; + void *data; + int(XMLCALL *convert)(void *data, const char *s); + void(XMLCALL *release)(void *data); +} XML_Encoding; + +/* This is called for an encoding that is unknown to the parser. + + The encodingHandlerData argument is that which was passed as the + second argument to XML_SetUnknownEncodingHandler. + + The name argument gives the name of the encoding as specified in + the encoding declaration. + + If the callback can provide information about the encoding, it must + fill in the XML_Encoding structure, and return XML_STATUS_OK. + Otherwise it must return XML_STATUS_ERROR. + + If info does not describe a suitable encoding, then the parser will + return an XML_ERROR_UNKNOWN_ENCODING error. +*/ +typedef int(XMLCALL *XML_UnknownEncodingHandler)(void *encodingHandlerData, + const XML_Char *name, + XML_Encoding *info); + +XMLPARSEAPI(void) +XML_SetElementHandler(XML_Parser parser, XML_StartElementHandler start, + XML_EndElementHandler end); + +XMLPARSEAPI(void) +XML_SetStartElementHandler(XML_Parser parser, XML_StartElementHandler handler); + +XMLPARSEAPI(void) +XML_SetEndElementHandler(XML_Parser parser, XML_EndElementHandler handler); + +XMLPARSEAPI(void) +XML_SetCharacterDataHandler(XML_Parser parser, + XML_CharacterDataHandler handler); + +XMLPARSEAPI(void) +XML_SetProcessingInstructionHandler(XML_Parser parser, + XML_ProcessingInstructionHandler handler); +XMLPARSEAPI(void) +XML_SetCommentHandler(XML_Parser parser, XML_CommentHandler handler); + +XMLPARSEAPI(void) +XML_SetCdataSectionHandler(XML_Parser parser, + XML_StartCdataSectionHandler start, + XML_EndCdataSectionHandler end); + +XMLPARSEAPI(void) +XML_SetStartCdataSectionHandler(XML_Parser parser, + XML_StartCdataSectionHandler start); + +XMLPARSEAPI(void) +XML_SetEndCdataSectionHandler(XML_Parser parser, + XML_EndCdataSectionHandler end); + +/* This sets the default handler and also inhibits expansion of + internal entities. These entity references will be passed to the + default handler, or to the skipped entity handler, if one is set. +*/ +XMLPARSEAPI(void) +XML_SetDefaultHandler(XML_Parser parser, XML_DefaultHandler handler); + +/* This sets the default handler but does not inhibit expansion of + internal entities. The entity reference will not be passed to the + default handler. +*/ +XMLPARSEAPI(void) +XML_SetDefaultHandlerExpand(XML_Parser parser, XML_DefaultHandler handler); + +XMLPARSEAPI(void) +XML_SetDoctypeDeclHandler(XML_Parser parser, XML_StartDoctypeDeclHandler start, + XML_EndDoctypeDeclHandler end); + +XMLPARSEAPI(void) +XML_SetStartDoctypeDeclHandler(XML_Parser parser, + XML_StartDoctypeDeclHandler start); + +XMLPARSEAPI(void) +XML_SetEndDoctypeDeclHandler(XML_Parser parser, XML_EndDoctypeDeclHandler end); + +XMLPARSEAPI(void) +XML_SetUnparsedEntityDeclHandler(XML_Parser parser, + XML_UnparsedEntityDeclHandler handler); + +XMLPARSEAPI(void) +XML_SetNotationDeclHandler(XML_Parser parser, XML_NotationDeclHandler handler); + +XMLPARSEAPI(void) +XML_SetNamespaceDeclHandler(XML_Parser parser, + XML_StartNamespaceDeclHandler start, + XML_EndNamespaceDeclHandler end); + +XMLPARSEAPI(void) +XML_SetStartNamespaceDeclHandler(XML_Parser parser, + XML_StartNamespaceDeclHandler start); + +XMLPARSEAPI(void) +XML_SetEndNamespaceDeclHandler(XML_Parser parser, + XML_EndNamespaceDeclHandler end); + +XMLPARSEAPI(void) +XML_SetNotStandaloneHandler(XML_Parser parser, + XML_NotStandaloneHandler handler); + +XMLPARSEAPI(void) +XML_SetExternalEntityRefHandler(XML_Parser parser, + XML_ExternalEntityRefHandler handler); + +/* If a non-NULL value for arg is specified here, then it will be + passed as the first argument to the external entity ref handler + instead of the parser object. +*/ +XMLPARSEAPI(void) +XML_SetExternalEntityRefHandlerArg(XML_Parser parser, void *arg); + +XMLPARSEAPI(void) +XML_SetSkippedEntityHandler(XML_Parser parser, + XML_SkippedEntityHandler handler); + +XMLPARSEAPI(void) +XML_SetUnknownEncodingHandler(XML_Parser parser, + XML_UnknownEncodingHandler handler, + void *encodingHandlerData); + +/* This can be called within a handler for a start element, end + element, processing instruction or character data. It causes the + corresponding markup to be passed to the default handler. +*/ +XMLPARSEAPI(void) +XML_DefaultCurrent(XML_Parser parser); + +/* If do_nst is non-zero, and namespace processing is in effect, and + a name has a prefix (i.e. an explicit namespace qualifier) then + that name is returned as a triplet in a single string separated by + the separator character specified when the parser was created: URI + + sep + local_name + sep + prefix. + + If do_nst is zero, then namespace information is returned in the + default manner (URI + sep + local_name) whether or not the name + has a prefix. + + Note: Calling XML_SetReturnNSTriplet after XML_Parse or + XML_ParseBuffer has no effect. +*/ + +XMLPARSEAPI(void) +XML_SetReturnNSTriplet(XML_Parser parser, int do_nst); + +/* This value is passed as the userData argument to callbacks. */ +XMLPARSEAPI(void) +XML_SetUserData(XML_Parser parser, void *userData); + +/* Returns the last value set by XML_SetUserData or NULL. */ +# define XML_GetUserData(parser) (*(void **)(parser)) + +/* This is equivalent to supplying an encoding argument to + XML_ParserCreate. On success XML_SetEncoding returns non-zero, + zero otherwise. + Note: Calling XML_SetEncoding after XML_Parse or XML_ParseBuffer + has no effect and returns XML_STATUS_ERROR. +*/ +XMLPARSEAPI(enum XML_Status) +XML_SetEncoding(XML_Parser parser, const XML_Char *encoding); + +/* If this function is called, then the parser will be passed as the + first argument to callbacks instead of userData. The userData will + still be accessible using XML_GetUserData. +*/ +XMLPARSEAPI(void) +XML_UseParserAsHandlerArg(XML_Parser parser); + +/* If useDTD == XML_TRUE is passed to this function, then the parser + will assume that there is an external subset, even if none is + specified in the document. In such a case the parser will call the + externalEntityRefHandler with a value of NULL for the systemId + argument (the publicId and context arguments will be NULL as well). + Note: For the purpose of checking WFC: Entity Declared, passing + useDTD == XML_TRUE will make the parser behave as if the document + had a DTD with an external subset. + Note: If this function is called, then this must be done before + the first call to XML_Parse or XML_ParseBuffer, since it will + have no effect after that. Returns + XML_ERROR_CANT_CHANGE_FEATURE_ONCE_PARSING. + Note: If the document does not have a DOCTYPE declaration at all, + then startDoctypeDeclHandler and endDoctypeDeclHandler will not + be called, despite an external subset being parsed. + Note: If XML_DTD is not defined when Expat is compiled, returns + XML_ERROR_FEATURE_REQUIRES_XML_DTD. + Note: If parser == NULL, returns XML_ERROR_INVALID_ARGUMENT. +*/ +XMLPARSEAPI(enum XML_Error) +XML_UseForeignDTD(XML_Parser parser, XML_Bool useDTD); + +/* Sets the base to be used for resolving relative URIs in system + identifiers in declarations. Resolving relative identifiers is + left to the application: this value will be passed through as the + base argument to the XML_ExternalEntityRefHandler, + XML_NotationDeclHandler and XML_UnparsedEntityDeclHandler. The base + argument will be copied. Returns XML_STATUS_ERROR if out of memory, + XML_STATUS_OK otherwise. +*/ +XMLPARSEAPI(enum XML_Status) +XML_SetBase(XML_Parser parser, const XML_Char *base); + +XMLPARSEAPI(const XML_Char *) +XML_GetBase(XML_Parser parser); + +/* Returns the number of the attribute/value pairs passed in last call + to the XML_StartElementHandler that were specified in the start-tag + rather than defaulted. Each attribute/value pair counts as 2; thus + this corresponds to an index into the atts array passed to the + XML_StartElementHandler. Returns -1 if parser == NULL. +*/ +XMLPARSEAPI(int) +XML_GetSpecifiedAttributeCount(XML_Parser parser); + +/* Returns the index of the ID attribute passed in the last call to + XML_StartElementHandler, or -1 if there is no ID attribute or + parser == NULL. Each attribute/value pair counts as 2; thus this + corresponds to an index into the atts array passed to the + XML_StartElementHandler. +*/ +XMLPARSEAPI(int) +XML_GetIdAttributeIndex(XML_Parser parser); + +# ifdef XML_ATTR_INFO +/* Source file byte offsets for the start and end of attribute names and values. + The value indices are exclusive of surrounding quotes; thus in a UTF-8 source + file an attribute value of "blah" will yield: + info->valueEnd - info->valueStart = 4 bytes. +*/ +typedef struct { + XML_Index nameStart; /* Offset to beginning of the attribute name. */ + XML_Index nameEnd; /* Offset after the attribute name's last byte. */ + XML_Index valueStart; /* Offset to beginning of the attribute value. */ + XML_Index valueEnd; /* Offset after the attribute value's last byte. */ +} XML_AttrInfo; + +/* Returns an array of XML_AttrInfo structures for the attribute/value pairs + passed in last call to the XML_StartElementHandler that were specified + in the start-tag rather than defaulted. Each attribute/value pair counts + as 1; thus the number of entries in the array is + XML_GetSpecifiedAttributeCount(parser) / 2. +*/ +XMLPARSEAPI(const XML_AttrInfo *) +XML_GetAttributeInfo(XML_Parser parser); +# endif + +/* Parses some input. Returns XML_STATUS_ERROR if a fatal error is + detected. The last call to XML_Parse must have isFinal true; len + may be zero for this call (or any other). + + Though the return values for these functions has always been + described as a Boolean value, the implementation, at least for the + 1.95.x series, has always returned exactly one of the XML_Status + values. +*/ +XMLPARSEAPI(enum XML_Status) +XML_Parse(XML_Parser parser, const char *s, int len, int isFinal); + +XMLPARSEAPI(void *) +XML_GetBuffer(XML_Parser parser, int len); + +XMLPARSEAPI(enum XML_Status) +XML_ParseBuffer(XML_Parser parser, int len, int isFinal); + +/* Stops parsing, causing XML_Parse() or XML_ParseBuffer() to return. + Must be called from within a call-back handler, except when aborting + (resumable = 0) an already suspended parser. Some call-backs may + still follow because they would otherwise get lost. Examples: + - endElementHandler() for empty elements when stopped in + startElementHandler(), + - endNameSpaceDeclHandler() when stopped in endElementHandler(), + and possibly others. + + Can be called from most handlers, including DTD related call-backs, + except when parsing an external parameter entity and resumable != 0. + Returns XML_STATUS_OK when successful, XML_STATUS_ERROR otherwise. + Possible error codes: + - XML_ERROR_SUSPENDED: when suspending an already suspended parser. + - XML_ERROR_FINISHED: when the parser has already finished. + - XML_ERROR_SUSPEND_PE: when suspending while parsing an external PE. + + When resumable != 0 (true) then parsing is suspended, that is, + XML_Parse() and XML_ParseBuffer() return XML_STATUS_SUSPENDED. + Otherwise, parsing is aborted, that is, XML_Parse() and XML_ParseBuffer() + return XML_STATUS_ERROR with error code XML_ERROR_ABORTED. + + *Note*: + This will be applied to the current parser instance only, that is, if + there is a parent parser then it will continue parsing when the + externalEntityRefHandler() returns. It is up to the implementation of + the externalEntityRefHandler() to call XML_StopParser() on the parent + parser (recursively), if one wants to stop parsing altogether. + + When suspended, parsing can be resumed by calling XML_ResumeParser(). +*/ +XMLPARSEAPI(enum XML_Status) +XML_StopParser(XML_Parser parser, XML_Bool resumable); + +/* Resumes parsing after it has been suspended with XML_StopParser(). + Must not be called from within a handler call-back. Returns same + status codes as XML_Parse() or XML_ParseBuffer(). + Additional error code XML_ERROR_NOT_SUSPENDED possible. + + *Note*: + This must be called on the most deeply nested child parser instance + first, and on its parent parser only after the child parser has finished, + to be applied recursively until the document entity's parser is restarted. + That is, the parent parser will not resume by itself and it is up to the + application to call XML_ResumeParser() on it at the appropriate moment. +*/ +XMLPARSEAPI(enum XML_Status) +XML_ResumeParser(XML_Parser parser); + +enum XML_Parsing { XML_INITIALIZED, XML_PARSING, XML_FINISHED, XML_SUSPENDED }; + +typedef struct { + enum XML_Parsing parsing; + XML_Bool finalBuffer; +} XML_ParsingStatus; + +/* Returns status of parser with respect to being initialized, parsing, + finished, or suspended and processing the final buffer. + XXX XML_Parse() and XML_ParseBuffer() should return XML_ParsingStatus, + XXX with XML_FINISHED_OK or XML_FINISHED_ERROR replacing XML_FINISHED +*/ +XMLPARSEAPI(void) +XML_GetParsingStatus(XML_Parser parser, XML_ParsingStatus *status); + +/* Creates an XML_Parser object that can parse an external general + entity; context is a '\0'-terminated string specifying the parse + context; encoding is a '\0'-terminated string giving the name of + the externally specified encoding, or NULL if there is no + externally specified encoding. The context string consists of a + sequence of tokens separated by formfeeds (\f); a token consisting + of a name specifies that the general entity of the name is open; a + token of the form prefix=uri specifies the namespace for a + particular prefix; a token of the form =uri specifies the default + namespace. This can be called at any point after the first call to + an ExternalEntityRefHandler so longer as the parser has not yet + been freed. The new parser is completely independent and may + safely be used in a separate thread. The handlers and userData are + initialized from the parser argument. Returns NULL if out of memory. + Otherwise returns a new XML_Parser object. +*/ +XMLPARSEAPI(XML_Parser) +XML_ExternalEntityParserCreate(XML_Parser parser, const XML_Char *context, + const XML_Char *encoding); + +enum XML_ParamEntityParsing { + XML_PARAM_ENTITY_PARSING_NEVER, + XML_PARAM_ENTITY_PARSING_UNLESS_STANDALONE, + XML_PARAM_ENTITY_PARSING_ALWAYS +}; + +/* Controls parsing of parameter entities (including the external DTD + subset). If parsing of parameter entities is enabled, then + references to external parameter entities (including the external + DTD subset) will be passed to the handler set with + XML_SetExternalEntityRefHandler. The context passed will be 0. + + Unlike external general entities, external parameter entities can + only be parsed synchronously. If the external parameter entity is + to be parsed, it must be parsed during the call to the external + entity ref handler: the complete sequence of + XML_ExternalEntityParserCreate, XML_Parse/XML_ParseBuffer and + XML_ParserFree calls must be made during this call. After + XML_ExternalEntityParserCreate has been called to create the parser + for the external parameter entity (context must be 0 for this + call), it is illegal to make any calls on the old parser until + XML_ParserFree has been called on the newly created parser. + If the library has been compiled without support for parameter + entity parsing (ie without XML_DTD being defined), then + XML_SetParamEntityParsing will return 0 if parsing of parameter + entities is requested; otherwise it will return non-zero. + Note: If XML_SetParamEntityParsing is called after XML_Parse or + XML_ParseBuffer, then it has no effect and will always return 0. + Note: If parser == NULL, the function will do nothing and return 0. +*/ +XMLPARSEAPI(int) +XML_SetParamEntityParsing(XML_Parser parser, + enum XML_ParamEntityParsing parsing); + +/* Sets the hash salt to use for internal hash calculations. + Helps in preventing DoS attacks based on predicting hash + function behavior. This must be called before parsing is started. + Returns 1 if successful, 0 when called after parsing has started. + Note: If parser == NULL, the function will do nothing and return 0. +*/ +XMLPARSEAPI(int) +XML_SetHashSalt(XML_Parser parser, unsigned long hash_salt); + +/* If XML_Parse or XML_ParseBuffer have returned XML_STATUS_ERROR, then + XML_GetErrorCode returns information about the error. +*/ +XMLPARSEAPI(enum XML_Error) +XML_GetErrorCode(XML_Parser parser); + +/* These functions return information about the current parse + location. They may be called from any callback called to report + some parse event; in this case the location is the location of the + first of the sequence of characters that generated the event. When + called from callbacks generated by declarations in the document + prologue, the location identified isn't as neatly defined, but will + be within the relevant markup. When called outside of the callback + functions, the position indicated will be just past the last parse + event (regardless of whether there was an associated callback). + + They may also be called after returning from a call to XML_Parse + or XML_ParseBuffer. If the return value is XML_STATUS_ERROR then + the location is the location of the character at which the error + was detected; otherwise the location is the location of the last + parse event, as described above. + + Note: XML_GetCurrentLineNumber and XML_GetCurrentColumnNumber + return 0 to indicate an error. + Note: XML_GetCurrentByteIndex returns -1 to indicate an error. +*/ +XMLPARSEAPI(XML_Size) XML_GetCurrentLineNumber(XML_Parser parser); +XMLPARSEAPI(XML_Size) XML_GetCurrentColumnNumber(XML_Parser parser); +XMLPARSEAPI(XML_Index) XML_GetCurrentByteIndex(XML_Parser parser); + +/* Return the number of bytes in the current event. + Returns 0 if the event is in an internal entity. +*/ +XMLPARSEAPI(int) +XML_GetCurrentByteCount(XML_Parser parser); + +/* If XML_CONTEXT_BYTES is >=1, returns the input buffer, sets + the integer pointed to by offset to the offset within this buffer + of the current parse position, and sets the integer pointed to by size + to the size of this buffer (the number of input bytes). Otherwise + returns a NULL pointer. Also returns a NULL pointer if a parse isn't + active. + + NOTE: The character pointer returned should not be used outside + the handler that makes the call. +*/ +XMLPARSEAPI(const char *) +XML_GetInputContext(XML_Parser parser, int *offset, int *size); + +/* For backwards compatibility with previous versions. */ +# define XML_GetErrorLineNumber XML_GetCurrentLineNumber +# define XML_GetErrorColumnNumber XML_GetCurrentColumnNumber +# define XML_GetErrorByteIndex XML_GetCurrentByteIndex + +/* Frees the content model passed to the element declaration handler */ +XMLPARSEAPI(void) +XML_FreeContentModel(XML_Parser parser, XML_Content *model); + +/* Exposing the memory handling functions used in Expat */ +XMLPARSEAPI(void *) +XML_ATTR_MALLOC +XML_ATTR_ALLOC_SIZE(2) +XML_MemMalloc(XML_Parser parser, size_t size); + +XMLPARSEAPI(void *) +XML_ATTR_ALLOC_SIZE(3) +XML_MemRealloc(XML_Parser parser, void *ptr, size_t size); + +XMLPARSEAPI(void) +XML_MemFree(XML_Parser parser, void *ptr); + +/* Frees memory used by the parser. */ +XMLPARSEAPI(void) +XML_ParserFree(XML_Parser parser); + +/* Returns a string describing the error. */ +XMLPARSEAPI(const XML_LChar *) +XML_ErrorString(enum XML_Error code); + +/* Return a string containing the version number of this expat */ +XMLPARSEAPI(const XML_LChar *) +XML_ExpatVersion(void); + +typedef struct { + int major; + int minor; + int micro; +} XML_Expat_Version; + +/* Return an XML_Expat_Version structure containing numeric version + number information for this version of expat. +*/ +XMLPARSEAPI(XML_Expat_Version) +XML_ExpatVersionInfo(void); + +/* Added in Expat 1.95.5. */ +enum XML_FeatureEnum { + XML_FEATURE_END = 0, + XML_FEATURE_UNICODE, + XML_FEATURE_UNICODE_WCHAR_T, + XML_FEATURE_DTD, + XML_FEATURE_CONTEXT_BYTES, + XML_FEATURE_MIN_SIZE, + XML_FEATURE_SIZEOF_XML_CHAR, + XML_FEATURE_SIZEOF_XML_LCHAR, + XML_FEATURE_NS, + XML_FEATURE_LARGE_SIZE, + XML_FEATURE_ATTR_INFO, + /* Added in Expat 2.4.0. */ + XML_FEATURE_BILLION_LAUGHS_ATTACK_PROTECTION_MAXIMUM_AMPLIFICATION_DEFAULT, + XML_FEATURE_BILLION_LAUGHS_ATTACK_PROTECTION_ACTIVATION_THRESHOLD_DEFAULT, + /* Added in Expat 2.6.0. */ + XML_FEATURE_GE, + /* Added in Expat 2.7.2. */ + XML_FEATURE_ALLOC_TRACKER_MAXIMUM_AMPLIFICATION_DEFAULT, + XML_FEATURE_ALLOC_TRACKER_ACTIVATION_THRESHOLD_DEFAULT, + /* Additional features must be added to the end of this enum. */ +}; + +typedef struct { + enum XML_FeatureEnum feature; + const XML_LChar *name; + long int value; +} XML_Feature; + +XMLPARSEAPI(const XML_Feature *) +XML_GetFeatureList(void); + +# if defined(XML_DTD) || (defined(XML_GE) && XML_GE == 1) +/* Added in Expat 2.4.0 for XML_DTD defined and + * added in Expat 2.6.0 for XML_GE == 1. */ +XMLPARSEAPI(XML_Bool) +XML_SetBillionLaughsAttackProtectionMaximumAmplification( + XML_Parser parser, float maximumAmplificationFactor); + +/* Added in Expat 2.4.0 for XML_DTD defined and + * added in Expat 2.6.0 for XML_GE == 1. */ +XMLPARSEAPI(XML_Bool) +XML_SetBillionLaughsAttackProtectionActivationThreshold( + XML_Parser parser, unsigned long long activationThresholdBytes); + +/* Added in Expat 2.7.2. */ +XMLPARSEAPI(XML_Bool) +XML_SetAllocTrackerMaximumAmplification(XML_Parser parser, + float maximumAmplificationFactor); + +/* Added in Expat 2.7.2. */ +XMLPARSEAPI(XML_Bool) +XML_SetAllocTrackerActivationThreshold( + XML_Parser parser, unsigned long long activationThresholdBytes); +# endif + +/* Added in Expat 2.6.0. */ +XMLPARSEAPI(XML_Bool) +XML_SetReparseDeferralEnabled(XML_Parser parser, XML_Bool enabled); + +/* Expat follows the semantic versioning convention. + See https://semver.org +*/ +# define XML_MAJOR_VERSION 2 +# define XML_MINOR_VERSION 7 +# define XML_MICRO_VERSION 2 + +# ifdef __cplusplus +} +# endif + +#endif /* not Expat_INCLUDED */ diff --git a/third_party/tlRender-install-Release/include/expat_config.h b/third_party/tlRender-install-Release/include/expat_config.h new file mode 100644 index 00000000..fd9c2468 --- /dev/null +++ b/third_party/tlRender-install-Release/include/expat_config.h @@ -0,0 +1,122 @@ +/* expat_config.h.cmake. Based upon generated expat_config.h.in. */ + +#ifndef EXPAT_CONFIG_H +# define EXPAT_CONFIG_H 1 + +/* 1234 = LIL_ENDIAN, 4321 = BIGENDIAN */ +#define BYTEORDER 1234 + +/* Define to 1 if you have the `arc4random' function. */ +/* #undef HAVE_ARC4RANDOM */ + +/* Define to 1 if you have the `arc4random_buf' function. */ +/* #undef HAVE_ARC4RANDOM_BUF */ + +/* Define to 1 if you have the header file. */ +#define HAVE_DLFCN_H + +/* Define to 1 if you have the header file. */ +#define HAVE_FCNTL_H + +/* Define to 1 if you have the `getpagesize' function. */ +/* #undef HAVE_GETPAGESIZE */ + +/* Define to 1 if you have the `getrandom' function. */ +#define HAVE_GETRANDOM + +/* Define to 1 if you have the header file. */ +#define HAVE_INTTYPES_H + +/* Define to 1 if you have the `bsd' library (-lbsd). */ +/* #undef HAVE_LIBBSD */ + +/* Define to 1 if you have the header file. */ +#define HAVE_MEMORY_H + +/* Define to 1 if you have a working `mmap' system call. */ +#define HAVE_MMAP + +/* Define to 1 if you have the header file. */ +#define HAVE_STDINT_H + +/* Define to 1 if you have the header file. */ +#define HAVE_STDLIB_H + +/* Define to 1 if you have the header file. */ +#define HAVE_STRINGS_H + +/* Define to 1 if you have the header file. */ +#define HAVE_STRING_H + +/* Define to 1 if you have `syscall' and `SYS_getrandom'. */ +#define HAVE_SYSCALL_GETRANDOM + +/* Define to 1 if you have the header file. */ +#define HAVE_SYS_STAT_H + +/* Define to 1 if you have the header file. */ +#define HAVE_SYS_TYPES_H + +/* Define to 1 if you have the header file. */ +#define HAVE_UNISTD_H + +/* Name of package */ +# define PACKAGE "expat" + +/* Define to the address where bug reports for this package should be sent. */ +#define PACKAGE_BUGREPORT "https://github.com/libexpat/libexpat/issues" + +/* Define to the full name of this package. */ +#define PACKAGE_NAME "expat" + +/* Define to the full name and version of this package. */ +#define PACKAGE_STRING "expat 2.7.2" + +/* Define to the one symbol short name of this package. */ +#define PACKAGE_TARNAME "expat" + +/* Define to the home page for this package. */ +# define PACKAGE_URL "" + +/* Define to the version of this package. */ +#define PACKAGE_VERSION "2.7.2" + +/* Define to 1 if you have the ANSI C header files. */ +# ifndef STDC_HEADERS +#define STDC_HEADERS +# endif + +/* whether byteorder is bigendian */ +/* #undef WORDS_BIGENDIAN */ + +/* Define to allow retrieving the byte offsets for attribute names and values. + */ +/* #undef XML_ATTR_INFO */ + +/* Define to specify how much context to retain around the current parse + point, 0 to disable. */ +# define XML_CONTEXT_BYTES 1024 + +# if ! defined(_WIN32) +/* Define to include code reading entropy from `/dev/urandom'. */ +#define XML_DEV_URANDOM +# endif + +/* Define to make parameter entity parsing functionality available. */ +#define XML_DTD + +/* Define as 1/0 to enable/disable support for general entities. */ +# define XML_GE 1 + +/* Define to make XML Namespaces functionality available. */ +#define XML_NS + +/* Define to __FUNCTION__ or "" if `__func__' does not conform to ANSI C. */ +# ifdef _MSC_VER +# define __func__ __FUNCTION__ +# endif + +/* Define to `long' if does not define. */ +/* #undef off_t */ + +#endif // ndef EXPAT_CONFIG_H diff --git a/third_party/tlRender-install-Release/include/expat_external.h b/third_party/tlRender-install-Release/include/expat_external.h new file mode 100644 index 00000000..96f955ee --- /dev/null +++ b/third_party/tlRender-install-Release/include/expat_external.h @@ -0,0 +1,166 @@ +/* + __ __ _ + ___\ \/ /_ __ __ _| |_ + / _ \\ /| '_ \ / _` | __| + | __// \| |_) | (_| | |_ + \___/_/\_\ .__/ \__,_|\__| + |_| XML parser + + Copyright (c) 1997-2000 Thai Open Source Software Center Ltd + Copyright (c) 2000 Clark Cooper + Copyright (c) 2000-2004 Fred L. Drake, Jr. + Copyright (c) 2001-2002 Greg Stein + Copyright (c) 2002-2006 Karl Waclawek + Copyright (c) 2016 Cristian Rodríguez + Copyright (c) 2016-2019 Sebastian Pipping + Copyright (c) 2017 Rhodri James + Copyright (c) 2018 Yury Gribov + Licensed under the MIT license: + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + "Software"), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to permit + persons to whom the Software is furnished to do so, subject to the + following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN + NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE + USE OR OTHER DEALINGS IN THE SOFTWARE. +*/ + +#ifndef Expat_External_INCLUDED +# define Expat_External_INCLUDED 1 + +/* External API definitions */ + +/* Expat tries very hard to make the API boundary very specifically + defined. There are two macros defined to control this boundary; + each of these can be defined before including this header to + achieve some different behavior, but doing so it not recommended or + tested frequently. + + XMLCALL - The calling convention to use for all calls across the + "library boundary." This will default to cdecl, and + try really hard to tell the compiler that's what we + want. + + XMLIMPORT - Whatever magic is needed to note that a function is + to be imported from a dynamically loaded library + (.dll, .so, or .sl, depending on your platform). + + The XMLCALL macro was added in Expat 1.95.7. The only one which is + expected to be directly useful in client code is XMLCALL. + + Note that on at least some Unix versions, the Expat library must be + compiled with the cdecl calling convention as the default since + system headers may assume the cdecl convention. +*/ +# ifndef XMLCALL +# if defined(_MSC_VER) +# define XMLCALL __cdecl +# elif defined(__GNUC__) && defined(__i386) && ! defined(__INTEL_COMPILER) +# define XMLCALL __attribute__((cdecl)) +# else +/* For any platform which uses this definition and supports more than + one calling convention, we need to extend this definition to + declare the convention used on that platform, if it's possible to + do so. + + If this is the case for your platform, please file a bug report + with information on how to identify your platform via the C + pre-processor and how to specify the same calling convention as the + platform's malloc() implementation. +*/ +# define XMLCALL +# endif +# endif /* not defined XMLCALL */ + +# if ! defined(XML_STATIC) && ! defined(XMLIMPORT) +# ifndef XML_BUILDING_EXPAT +/* using Expat from an application */ + +# if defined(_MSC_EXTENSIONS) && ! defined(__BEOS__) \ + && ! defined(__CYGWIN__) +# define XMLIMPORT __declspec(dllimport) +# endif + +# endif +# endif /* not defined XML_STATIC */ + +# ifndef XML_ENABLE_VISIBILITY +# define XML_ENABLE_VISIBILITY 0 +# endif + +# if ! defined(XMLIMPORT) && XML_ENABLE_VISIBILITY +# define XMLIMPORT __attribute__((visibility("default"))) +# endif + +/* If we didn't define it above, define it away: */ +# ifndef XMLIMPORT +# define XMLIMPORT +# endif + +# if defined(__GNUC__) \ + && (__GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96)) +# define XML_ATTR_MALLOC __attribute__((__malloc__)) +# else +# define XML_ATTR_MALLOC +# endif + +# if defined(__GNUC__) \ + && ((__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)) +# define XML_ATTR_ALLOC_SIZE(x) __attribute__((__alloc_size__(x))) +# else +# define XML_ATTR_ALLOC_SIZE(x) +# endif + +# define XMLPARSEAPI(type) XMLIMPORT type XMLCALL + +# ifdef __cplusplus +extern "C" { +# endif + +# ifdef XML_UNICODE_WCHAR_T +# ifndef XML_UNICODE +# define XML_UNICODE +# endif +# if defined(__SIZEOF_WCHAR_T__) && (__SIZEOF_WCHAR_T__ != 2) +# error "sizeof(wchar_t) != 2; Need -fshort-wchar for both Expat and libc" +# endif +# endif + +# ifdef XML_UNICODE /* Information is UTF-16 encoded. */ +# ifdef XML_UNICODE_WCHAR_T +typedef wchar_t XML_Char; +typedef wchar_t XML_LChar; +# else +typedef unsigned short XML_Char; +typedef char XML_LChar; +# endif /* XML_UNICODE_WCHAR_T */ +# else /* Information is UTF-8 encoded. */ +typedef char XML_Char; +typedef char XML_LChar; +# endif /* XML_UNICODE */ + +# ifdef XML_LARGE_SIZE /* Use large integers for file/stream positions. */ +typedef long long XML_Index; +typedef unsigned long long XML_Size; +# else +typedef long XML_Index; +typedef unsigned long XML_Size; +# endif /* XML_LARGE_SIZE */ + +# ifdef __cplusplus +} +# endif + +#endif /* not Expat_External_INCLUDED */ diff --git a/third_party/tlRender-install-Release/include/freetype2/freetype/config/ftconfig.h b/third_party/tlRender-install-Release/include/freetype2/freetype/config/ftconfig.h new file mode 100644 index 00000000..c926b575 --- /dev/null +++ b/third_party/tlRender-install-Release/include/freetype2/freetype/config/ftconfig.h @@ -0,0 +1,52 @@ +/**************************************************************************** + * + * ftconfig.h.in + * + * UNIX-specific configuration file (specification only). + * + * Copyright (C) 1996-2025 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + + /************************************************************************** + * + * This header file contains a number of macro definitions that are used by + * the rest of the engine. Most of the macros here are automatically + * determined at compile time, and you should not need to change it to port + * FreeType, except to compile the library with a non-ANSI compiler. + * + * Note however that if some specific modifications are needed, we advise + * you to place a modified copy in your build directory. + * + * The build directory is usually `builds/`, and contains + * system-specific files that are always included first when building the + * library. + * + */ + +#ifndef FTCONFIG_H_ +#define FTCONFIG_H_ + +#include +#include FT_CONFIG_OPTIONS_H +#include FT_CONFIG_STANDARD_LIBRARY_H + +#define HAVE_UNISTD_H 1 +#define HAVE_FCNTL_H 1 + +#include +#include +#include + +#endif /* FTCONFIG_H_ */ + + +/* END */ diff --git a/third_party/tlRender-install-Release/include/freetype2/freetype/config/ftheader.h b/third_party/tlRender-install-Release/include/freetype2/freetype/config/ftheader.h new file mode 100644 index 00000000..16eab904 --- /dev/null +++ b/third_party/tlRender-install-Release/include/freetype2/freetype/config/ftheader.h @@ -0,0 +1,836 @@ +/**************************************************************************** + * + * ftheader.h + * + * Build macros of the FreeType 2 library. + * + * Copyright (C) 1996-2025 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + +#ifndef FTHEADER_H_ +#define FTHEADER_H_ + + + /*@***********************************************************************/ + /* */ + /* */ + /* FT_BEGIN_HEADER */ + /* */ + /* */ + /* This macro is used in association with @FT_END_HEADER in header */ + /* files to ensure that the declarations within are properly */ + /* encapsulated in an `extern "C" { .. }` block when included from a */ + /* C++ compiler. */ + /* */ +#ifndef FT_BEGIN_HEADER +# ifdef __cplusplus +# define FT_BEGIN_HEADER extern "C" { +# else +# define FT_BEGIN_HEADER /* nothing */ +# endif +#endif + + + /*@***********************************************************************/ + /* */ + /* */ + /* FT_END_HEADER */ + /* */ + /* */ + /* This macro is used in association with @FT_BEGIN_HEADER in header */ + /* files to ensure that the declarations within are properly */ + /* encapsulated in an `extern "C" { .. }` block when included from a */ + /* C++ compiler. */ + /* */ +#ifndef FT_END_HEADER +# ifdef __cplusplus +# define FT_END_HEADER } +# else +# define FT_END_HEADER /* nothing */ +# endif +#endif + + + /************************************************************************** + * + * Aliases for the FreeType 2 public and configuration files. + * + */ + + /************************************************************************** + * + * @section: + * header_file_macros + * + * @title: + * Header File Macros + * + * @abstract: + * Macro definitions used to `#include` specific header files. + * + * @description: + * In addition to the normal scheme of including header files like + * + * ``` + * #include + * #include + * #include + * ``` + * + * it is possible to used named macros instead. They can be used + * directly in `#include` statements as in + * + * ``` + * #include FT_FREETYPE_H + * #include FT_MULTIPLE_MASTERS_H + * #include FT_GLYPH_H + * ``` + * + * These macros were introduced to overcome the infamous 8.3~naming rule + * required by DOS (and `FT_MULTIPLE_MASTERS_H` is a lot more meaningful + * than `ftmm.h`). + * + */ + + + /* configuration files */ + + /************************************************************************** + * + * @macro: + * FT_CONFIG_CONFIG_H + * + * @description: + * A macro used in `#include` statements to name the file containing + * FreeType~2 configuration data. + * + */ +#ifndef FT_CONFIG_CONFIG_H +#define FT_CONFIG_CONFIG_H +#endif + + + /************************************************************************** + * + * @macro: + * FT_CONFIG_STANDARD_LIBRARY_H + * + * @description: + * A macro used in `#include` statements to name the file containing + * FreeType~2 interface to the standard C library functions. + * + */ +#ifndef FT_CONFIG_STANDARD_LIBRARY_H +#define FT_CONFIG_STANDARD_LIBRARY_H +#endif + + + /************************************************************************** + * + * @macro: + * FT_CONFIG_OPTIONS_H + * + * @description: + * A macro used in `#include` statements to name the file containing + * FreeType~2 project-specific configuration options. + * + */ +#ifndef FT_CONFIG_OPTIONS_H +#define FT_CONFIG_OPTIONS_H +#endif + + + /************************************************************************** + * + * @macro: + * FT_CONFIG_MODULES_H + * + * @description: + * A macro used in `#include` statements to name the file containing the + * list of FreeType~2 modules that are statically linked to new library + * instances in @FT_Init_FreeType. + * + */ +#ifndef FT_CONFIG_MODULES_H +#define FT_CONFIG_MODULES_H +#endif + + /* */ + + /* public headers */ + + /************************************************************************** + * + * @macro: + * FT_FREETYPE_H + * + * @description: + * A macro used in `#include` statements to name the file containing the + * base FreeType~2 API. + * + */ +#define FT_FREETYPE_H + + + /************************************************************************** + * + * @macro: + * FT_ERRORS_H + * + * @description: + * A macro used in `#include` statements to name the file containing the + * list of FreeType~2 error codes (and messages). + * + * It is included by @FT_FREETYPE_H. + * + */ +#define FT_ERRORS_H + + + /************************************************************************** + * + * @macro: + * FT_MODULE_ERRORS_H + * + * @description: + * A macro used in `#include` statements to name the file containing the + * list of FreeType~2 module error offsets (and messages). + * + */ +#define FT_MODULE_ERRORS_H + + + /************************************************************************** + * + * @macro: + * FT_SYSTEM_H + * + * @description: + * A macro used in `#include` statements to name the file containing the + * FreeType~2 interface to low-level operations (i.e., memory management + * and stream i/o). + * + * It is included by @FT_FREETYPE_H. + * + */ +#define FT_SYSTEM_H + + + /************************************************************************** + * + * @macro: + * FT_IMAGE_H + * + * @description: + * A macro used in `#include` statements to name the file containing type + * definitions related to glyph images (i.e., bitmaps, outlines, + * scan-converter parameters). + * + * It is included by @FT_FREETYPE_H. + * + */ +#define FT_IMAGE_H + + + /************************************************************************** + * + * @macro: + * FT_TYPES_H + * + * @description: + * A macro used in `#include` statements to name the file containing the + * basic data types defined by FreeType~2. + * + * It is included by @FT_FREETYPE_H. + * + */ +#define FT_TYPES_H + + + /************************************************************************** + * + * @macro: + * FT_LIST_H + * + * @description: + * A macro used in `#include` statements to name the file containing the + * list management API of FreeType~2. + * + * (Most applications will never need to include this file.) + * + */ +#define FT_LIST_H + + + /************************************************************************** + * + * @macro: + * FT_OUTLINE_H + * + * @description: + * A macro used in `#include` statements to name the file containing the + * scalable outline management API of FreeType~2. + * + */ +#define FT_OUTLINE_H + + + /************************************************************************** + * + * @macro: + * FT_SIZES_H + * + * @description: + * A macro used in `#include` statements to name the file containing the + * API which manages multiple @FT_Size objects per face. + * + */ +#define FT_SIZES_H + + + /************************************************************************** + * + * @macro: + * FT_MODULE_H + * + * @description: + * A macro used in `#include` statements to name the file containing the + * module management API of FreeType~2. + * + */ +#define FT_MODULE_H + + + /************************************************************************** + * + * @macro: + * FT_RENDER_H + * + * @description: + * A macro used in `#include` statements to name the file containing the + * renderer module management API of FreeType~2. + * + */ +#define FT_RENDER_H + + + /************************************************************************** + * + * @macro: + * FT_DRIVER_H + * + * @description: + * A macro used in `#include` statements to name the file containing + * structures and macros related to the driver modules. + * + */ +#define FT_DRIVER_H + + + /************************************************************************** + * + * @macro: + * FT_AUTOHINTER_H + * + * @description: + * A macro used in `#include` statements to name the file containing + * structures and macros related to the auto-hinting module. + * + * Deprecated since version~2.9; use @FT_DRIVER_H instead. + * + */ +#define FT_AUTOHINTER_H FT_DRIVER_H + + + /************************************************************************** + * + * @macro: + * FT_CFF_DRIVER_H + * + * @description: + * A macro used in `#include` statements to name the file containing + * structures and macros related to the CFF driver module. + * + * Deprecated since version~2.9; use @FT_DRIVER_H instead. + * + */ +#define FT_CFF_DRIVER_H FT_DRIVER_H + + + /************************************************************************** + * + * @macro: + * FT_TRUETYPE_DRIVER_H + * + * @description: + * A macro used in `#include` statements to name the file containing + * structures and macros related to the TrueType driver module. + * + * Deprecated since version~2.9; use @FT_DRIVER_H instead. + * + */ +#define FT_TRUETYPE_DRIVER_H FT_DRIVER_H + + + /************************************************************************** + * + * @macro: + * FT_PCF_DRIVER_H + * + * @description: + * A macro used in `#include` statements to name the file containing + * structures and macros related to the PCF driver module. + * + * Deprecated since version~2.9; use @FT_DRIVER_H instead. + * + */ +#define FT_PCF_DRIVER_H FT_DRIVER_H + + + /************************************************************************** + * + * @macro: + * FT_TYPE1_TABLES_H + * + * @description: + * A macro used in `#include` statements to name the file containing the + * types and API specific to the Type~1 format. + * + */ +#define FT_TYPE1_TABLES_H + + + /************************************************************************** + * + * @macro: + * FT_TRUETYPE_IDS_H + * + * @description: + * A macro used in `#include` statements to name the file containing the + * enumeration values which identify name strings, languages, encodings, + * etc. This file really contains a _large_ set of constant macro + * definitions, taken from the TrueType and OpenType specifications. + * + */ +#define FT_TRUETYPE_IDS_H + + + /************************************************************************** + * + * @macro: + * FT_TRUETYPE_TABLES_H + * + * @description: + * A macro used in `#include` statements to name the file containing the + * types and API specific to the TrueType (as well as OpenType) format. + * + */ +#define FT_TRUETYPE_TABLES_H + + + /************************************************************************** + * + * @macro: + * FT_TRUETYPE_TAGS_H + * + * @description: + * A macro used in `#include` statements to name the file containing the + * definitions of TrueType four-byte 'tags' which identify blocks in + * SFNT-based font formats (i.e., TrueType and OpenType). + * + */ +#define FT_TRUETYPE_TAGS_H + + + /************************************************************************** + * + * @macro: + * FT_BDF_H + * + * @description: + * A macro used in `#include` statements to name the file containing the + * definitions of an API which accesses BDF-specific strings from a face. + * + */ +#define FT_BDF_H + + + /************************************************************************** + * + * @macro: + * FT_CID_H + * + * @description: + * A macro used in `#include` statements to name the file containing the + * definitions of an API which access CID font information from a face. + * + */ +#define FT_CID_H + + + /************************************************************************** + * + * @macro: + * FT_GZIP_H + * + * @description: + * A macro used in `#include` statements to name the file containing the + * definitions of an API which supports gzip-compressed files. + * + */ +#define FT_GZIP_H + + + /************************************************************************** + * + * @macro: + * FT_LZW_H + * + * @description: + * A macro used in `#include` statements to name the file containing the + * definitions of an API which supports LZW-compressed files. + * + */ +#define FT_LZW_H + + + /************************************************************************** + * + * @macro: + * FT_BZIP2_H + * + * @description: + * A macro used in `#include` statements to name the file containing the + * definitions of an API which supports bzip2-compressed files. + * + */ +#define FT_BZIP2_H + + + /************************************************************************** + * + * @macro: + * FT_WINFONTS_H + * + * @description: + * A macro used in `#include` statements to name the file containing the + * definitions of an API which supports Windows FNT files. + * + */ +#define FT_WINFONTS_H + + + /************************************************************************** + * + * @macro: + * FT_GLYPH_H + * + * @description: + * A macro used in `#include` statements to name the file containing the + * API of the optional glyph management component. + * + */ +#define FT_GLYPH_H + + + /************************************************************************** + * + * @macro: + * FT_BITMAP_H + * + * @description: + * A macro used in `#include` statements to name the file containing the + * API of the optional bitmap conversion component. + * + */ +#define FT_BITMAP_H + + + /************************************************************************** + * + * @macro: + * FT_BBOX_H + * + * @description: + * A macro used in `#include` statements to name the file containing the + * API of the optional exact bounding box computation routines. + * + */ +#define FT_BBOX_H + + + /************************************************************************** + * + * @macro: + * FT_CACHE_H + * + * @description: + * A macro used in `#include` statements to name the file containing the + * API of the optional FreeType~2 cache sub-system. + * + */ +#define FT_CACHE_H + + + /************************************************************************** + * + * @macro: + * FT_MAC_H + * + * @description: + * A macro used in `#include` statements to name the file containing the + * Macintosh-specific FreeType~2 API. The latter is used to access fonts + * embedded in resource forks. + * + * This header file must be explicitly included by client applications + * compiled on the Mac (note that the base API still works though). + * + */ +#define FT_MAC_H + + + /************************************************************************** + * + * @macro: + * FT_MULTIPLE_MASTERS_H + * + * @description: + * A macro used in `#include` statements to name the file containing the + * optional multiple-masters management API of FreeType~2. + * + */ +#define FT_MULTIPLE_MASTERS_H + + + /************************************************************************** + * + * @macro: + * FT_SFNT_NAMES_H + * + * @description: + * A macro used in `#include` statements to name the file containing the + * optional FreeType~2 API which accesses embedded 'name' strings in + * SFNT-based font formats (i.e., TrueType and OpenType). + * + */ +#define FT_SFNT_NAMES_H + + + /************************************************************************** + * + * @macro: + * FT_OPENTYPE_VALIDATE_H + * + * @description: + * A macro used in `#include` statements to name the file containing the + * optional FreeType~2 API which validates OpenType tables ('BASE', + * 'GDEF', 'GPOS', 'GSUB', 'JSTF'). + * + */ +#define FT_OPENTYPE_VALIDATE_H + + + /************************************************************************** + * + * @macro: + * FT_GX_VALIDATE_H + * + * @description: + * A macro used in `#include` statements to name the file containing the + * optional FreeType~2 API which validates TrueTypeGX/AAT tables ('feat', + * 'mort', 'morx', 'bsln', 'just', 'kern', 'opbd', 'trak', 'prop'). + * + */ +#define FT_GX_VALIDATE_H + + + /************************************************************************** + * + * @macro: + * FT_PFR_H + * + * @description: + * A macro used in `#include` statements to name the file containing the + * FreeType~2 API which accesses PFR-specific data. + * + */ +#define FT_PFR_H + + + /************************************************************************** + * + * @macro: + * FT_STROKER_H + * + * @description: + * A macro used in `#include` statements to name the file containing the + * FreeType~2 API which provides functions to stroke outline paths. + */ +#define FT_STROKER_H + + + /************************************************************************** + * + * @macro: + * FT_SYNTHESIS_H + * + * @description: + * A macro used in `#include` statements to name the file containing the + * FreeType~2 API which performs artificial obliquing and emboldening. + */ +#define FT_SYNTHESIS_H + + + /************************************************************************** + * + * @macro: + * FT_FONT_FORMATS_H + * + * @description: + * A macro used in `#include` statements to name the file containing the + * FreeType~2 API which provides functions specific to font formats. + */ +#define FT_FONT_FORMATS_H + + /* deprecated */ +#define FT_XFREE86_H FT_FONT_FORMATS_H + + + /************************************************************************** + * + * @macro: + * FT_TRIGONOMETRY_H + * + * @description: + * A macro used in `#include` statements to name the file containing the + * FreeType~2 API which performs trigonometric computations (e.g., + * cosines and arc tangents). + */ +#define FT_TRIGONOMETRY_H + + + /************************************************************************** + * + * @macro: + * FT_LCD_FILTER_H + * + * @description: + * A macro used in `#include` statements to name the file containing the + * FreeType~2 API which performs color filtering for subpixel rendering. + */ +#define FT_LCD_FILTER_H + + + /************************************************************************** + * + * @macro: + * FT_INCREMENTAL_H + * + * @description: + * A macro used in `#include` statements to name the file containing the + * FreeType~2 API which performs incremental glyph loading. + */ +#define FT_INCREMENTAL_H + + + /************************************************************************** + * + * @macro: + * FT_GASP_H + * + * @description: + * A macro used in `#include` statements to name the file containing the + * FreeType~2 API which returns entries from the TrueType GASP table. + */ +#define FT_GASP_H + + + /************************************************************************** + * + * @macro: + * FT_ADVANCES_H + * + * @description: + * A macro used in `#include` statements to name the file containing the + * FreeType~2 API which returns individual and ranged glyph advances. + */ +#define FT_ADVANCES_H + + + /************************************************************************** + * + * @macro: + * FT_COLOR_H + * + * @description: + * A macro used in `#include` statements to name the file containing the + * FreeType~2 API which handles the OpenType 'CPAL' table. + */ +#define FT_COLOR_H + + + /************************************************************************** + * + * @macro: + * FT_OTSVG_H + * + * @description: + * A macro used in `#include` statements to name the file containing the + * FreeType~2 API which handles the OpenType 'SVG~' glyphs. + */ +#define FT_OTSVG_H + + + /* */ + + /* These header files don't need to be included by the user. */ +#define FT_ERROR_DEFINITIONS_H +#define FT_PARAMETER_TAGS_H + + /* Deprecated macros. */ +#define FT_UNPATENTED_HINTING_H +#define FT_TRUETYPE_UNPATENTED_H + + /* `FT_CACHE_H` is the only header file needed for the cache subsystem. */ +#define FT_CACHE_IMAGE_H FT_CACHE_H +#define FT_CACHE_SMALL_BITMAPS_H FT_CACHE_H +#define FT_CACHE_CHARMAP_H FT_CACHE_H + + /* The internals of the cache sub-system are no longer exposed. We */ + /* default to `FT_CACHE_H` at the moment just in case, but we know */ + /* of no rogue client that uses them. */ + /* */ +#define FT_CACHE_MANAGER_H FT_CACHE_H +#define FT_CACHE_INTERNAL_MRU_H FT_CACHE_H +#define FT_CACHE_INTERNAL_MANAGER_H FT_CACHE_H +#define FT_CACHE_INTERNAL_CACHE_H FT_CACHE_H +#define FT_CACHE_INTERNAL_GLYPH_H FT_CACHE_H +#define FT_CACHE_INTERNAL_IMAGE_H FT_CACHE_H +#define FT_CACHE_INTERNAL_SBITS_H FT_CACHE_H + +/* TODO(david): Move this section below to a different header */ +#ifdef FT2_BUILD_LIBRARY +#if defined( _MSC_VER ) /* Visual C++ (and Intel C++) */ + + /* We disable the warning `conditional expression is constant' here */ + /* in order to compile cleanly with the maximum level of warnings. */ + /* In particular, the warning complains about stuff like `while(0)' */ + /* which is very useful in macro definitions. There is no benefit */ + /* in having it enabled. */ +#pragma warning( disable : 4127 ) + +#endif /* _MSC_VER */ +#endif /* FT2_BUILD_LIBRARY */ + +#endif /* FTHEADER_H_ */ + + +/* END */ diff --git a/third_party/tlRender-install-Release/include/freetype2/freetype/config/ftmodule.h b/third_party/tlRender-install-Release/include/freetype2/freetype/config/ftmodule.h new file mode 100644 index 00000000..b315baba --- /dev/null +++ b/third_party/tlRender-install-Release/include/freetype2/freetype/config/ftmodule.h @@ -0,0 +1,33 @@ +/* + * This file registers the FreeType modules compiled into the library. + * + * If you use GNU make, this file IS NOT USED! Instead, it is created in + * the objects directory (normally `/objs/`) based on information + * from `/modules.cfg`. + * + * Please read `docs/INSTALL.ANY` and `docs/CUSTOMIZE` how to compile + * FreeType without GNU make. + * + */ + +FT_USE_MODULE( FT_Module_Class, autofit_module_class ) +FT_USE_MODULE( FT_Driver_ClassRec, tt_driver_class ) +FT_USE_MODULE( FT_Driver_ClassRec, t1_driver_class ) +FT_USE_MODULE( FT_Driver_ClassRec, cff_driver_class ) +FT_USE_MODULE( FT_Driver_ClassRec, t1cid_driver_class ) +FT_USE_MODULE( FT_Driver_ClassRec, pfr_driver_class ) +FT_USE_MODULE( FT_Driver_ClassRec, t42_driver_class ) +FT_USE_MODULE( FT_Driver_ClassRec, winfnt_driver_class ) +FT_USE_MODULE( FT_Driver_ClassRec, pcf_driver_class ) +FT_USE_MODULE( FT_Driver_ClassRec, bdf_driver_class ) +FT_USE_MODULE( FT_Module_Class, psaux_module_class ) +FT_USE_MODULE( FT_Module_Class, psnames_module_class ) +FT_USE_MODULE( FT_Module_Class, pshinter_module_class ) +FT_USE_MODULE( FT_Module_Class, sfnt_module_class ) +FT_USE_MODULE( FT_Renderer_Class, ft_smooth_renderer_class ) +FT_USE_MODULE( FT_Renderer_Class, ft_raster1_renderer_class ) +FT_USE_MODULE( FT_Renderer_Class, ft_sdf_renderer_class ) +FT_USE_MODULE( FT_Renderer_Class, ft_bitmap_sdf_renderer_class ) +FT_USE_MODULE( FT_Renderer_Class, ft_svg_renderer_class ) + +/* EOF */ diff --git a/third_party/tlRender-install-Release/include/freetype2/freetype/config/ftoption.h b/third_party/tlRender-install-Release/include/freetype2/freetype/config/ftoption.h new file mode 100644 index 00000000..77b68f22 --- /dev/null +++ b/third_party/tlRender-install-Release/include/freetype2/freetype/config/ftoption.h @@ -0,0 +1,1055 @@ +/**************************************************************************** + * + * ftoption.h + * + * User-selectable configuration macros (specification only). + * + * Copyright (C) 1996-2025 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + +#ifndef FTOPTION_H_ +#define FTOPTION_H_ + + +#include + + +FT_BEGIN_HEADER + + /************************************************************************** + * + * USER-SELECTABLE CONFIGURATION MACROS + * + * This file contains the default configuration macro definitions for a + * standard build of the FreeType library. There are three ways to use + * this file to build project-specific versions of the library: + * + * - You can modify this file by hand, but this is not recommended in + * cases where you would like to build several versions of the library + * from a single source directory. + * + * - You can put a copy of this file in your build directory, more + * precisely in `$BUILD/freetype/config/ftoption.h`, where `$BUILD` is + * the name of a directory that is included _before_ the FreeType include + * path during compilation. + * + * The default FreeType Makefiles use the build directory + * `builds/` by default, but you can easily change that for your + * own projects. + * + * - Copy the file to `$BUILD/ft2build.h` and modify it + * slightly to pre-define the macro `FT_CONFIG_OPTIONS_H` used to locate + * this file during the build. For example, + * + * ``` + * #define FT_CONFIG_OPTIONS_H + * #include + * ``` + * + * will use `$BUILD/myftoptions.h` instead of this file for macro + * definitions. + * + * Note also that you can similarly pre-define the macro + * `FT_CONFIG_MODULES_H` used to locate the file listing of the modules + * that are statically linked to the library at compile time. By + * default, this file is ``. + * + * We highly recommend using the third method whenever possible. + * + */ + + + /*************************************************************************/ + /*************************************************************************/ + /**** ****/ + /**** G E N E R A L F R E E T Y P E 2 C O N F I G U R A T I O N ****/ + /**** ****/ + /*************************************************************************/ + /*************************************************************************/ + + + /*#************************************************************************ + * + * If you enable this configuration option, FreeType recognizes an + * environment variable called `FREETYPE_PROPERTIES`, which can be used to + * control the various font drivers and modules. The controllable + * properties are listed in the section @properties. + * + * You have to undefine this configuration option on platforms that lack + * the concept of environment variables (and thus don't have the `getenv` + * function), for example Windows CE. + * + * `FREETYPE_PROPERTIES` has the following syntax form (broken here into + * multiple lines for better readability). + * + * ``` + * + * ':' + * '=' + * + * ':' + * '=' + * ... + * ``` + * + * Example: + * + * ``` + * FREETYPE_PROPERTIES=truetype:interpreter-version=35 \ + * cff:no-stem-darkening=1 + * ``` + * + */ +#define FT_CONFIG_OPTION_ENVIRONMENT_PROPERTIES + + + /************************************************************************** + * + * Uncomment the line below if you want to activate LCD rendering + * technology similar to ClearType in this build of the library. This + * technology triples the resolution in the direction color subpixels. To + * mitigate color fringes inherent to this technology, you also need to + * explicitly set up LCD filtering. + * + * When this macro is not defined, FreeType offers alternative LCD + * rendering technology that produces excellent output. + */ +/* #define FT_CONFIG_OPTION_SUBPIXEL_RENDERING */ + + + /************************************************************************** + * + * Many compilers provide a non-ANSI 64-bit data type that can be used by + * FreeType to speed up some computations. However, this will create some + * problems when compiling the library in strict ANSI mode. + * + * For this reason, the use of 64-bit integers is normally disabled when + * the `__STDC__` macro is defined. You can however disable this by + * defining the macro `FT_CONFIG_OPTION_FORCE_INT64` here. + * + * For most compilers, this will only create compilation warnings when + * building the library. + * + * ObNote: The compiler-specific 64-bit integers are detected in the + * file `ftconfig.h` either statically or through the `configure` + * script on supported platforms. + */ +#undef FT_CONFIG_OPTION_FORCE_INT64 + + + /************************************************************************** + * + * If this macro is defined, do not try to use an assembler version of + * performance-critical functions (e.g., @FT_MulFix). You should only do + * that to verify that the assembler function works properly, or to execute + * benchmark tests of the various implementations. + */ +/* #define FT_CONFIG_OPTION_NO_ASSEMBLER */ + + + /************************************************************************** + * + * If this macro is defined, try to use an inlined 64-bit or assembler + * version of the @FT_MulFix function, which is a 'hotspot' when loading + * and hinting glyphs, and which should be executed as fast as possible. + * + * If your compiler is not C99-compliant or CPU assembly is not supported, + * you can disable this option. + */ +#define FT_CONFIG_OPTION_INLINE_MULFIX + + + /************************************************************************** + * + * LZW-compressed file support. + * + * FreeType now handles font files that have been compressed with the + * `compress` program. This is mostly used to parse many of the PCF + * files that come with various X11 distributions. The implementation + * uses NetBSD's `zopen` to partially uncompress the file on the fly (see + * `src/lzw/ftgzip.c`). + * + * Define this macro if you want to enable this 'feature'. + */ +#define FT_CONFIG_OPTION_USE_LZW + + + /************************************************************************** + * + * Gzip-compressed file support. + * + * FreeType now handles font files that have been compressed with the + * `gzip` program. This is mostly used to parse many of the PCF files + * that come with XFree86. The implementation uses 'zlib' to partially + * uncompress the file on the fly (see `src/gzip/ftgzip.c`). + * + * Define this macro if you want to enable this 'feature'. See also the + * macro `FT_CONFIG_OPTION_SYSTEM_ZLIB` below. + */ +#define FT_CONFIG_OPTION_USE_ZLIB + + + /************************************************************************** + * + * ZLib library selection + * + * This macro is only used when `FT_CONFIG_OPTION_USE_ZLIB` is defined. + * It allows FreeType's 'ftgzip' component to link to the system's + * installation of the ZLib library. This is useful on systems like + * Unix or VMS where it generally is already available. + * + * If you let it undefined, the component will use its own copy of the + * zlib sources instead. These have been modified to be included + * directly within the component and **not** export external function + * names. This allows you to link any program with FreeType _and_ ZLib + * without linking conflicts. + * + * Do not `#undef` this macro here since the build system might define + * it for certain configurations only. + * + * If you use a build system like cmake or the `configure` script, + * options set by those programs have precedence, overwriting the value + * here with the configured one. + * + * If you use the GNU make build system directly (that is, without the + * `configure` script) and you define this macro, you also have to pass + * `SYSTEM_ZLIB=yes` as an argument to make. + */ +#define FT_CONFIG_OPTION_SYSTEM_ZLIB + + + /************************************************************************** + * + * Bzip2-compressed file support. + * + * FreeType now handles font files that have been compressed with the + * `bzip2` program. This is mostly used to parse many of the PCF files + * that come with XFree86. The implementation uses `libbz2` to partially + * uncompress the file on the fly (see `src/bzip2/ftbzip2.c`). Contrary + * to gzip, bzip2 currently is not included and need to use the system + * available bzip2 implementation. + * + * Define this macro if you want to enable this 'feature'. + * + * If you use a build system like cmake or the `configure` script, + * options set by those programs have precedence, overwriting the value + * here with the configured one. + */ +/* #define FT_CONFIG_OPTION_USE_BZIP2 */ + + + /************************************************************************** + * + * Define to disable the use of file stream functions and types, `FILE`, + * `fopen`, etc. Enables the use of smaller system libraries on embedded + * systems that have multiple system libraries, some with or without file + * stream support, in the cases where file stream support is not necessary + * such as memory loading of font files. + */ +/* #define FT_CONFIG_OPTION_DISABLE_STREAM_SUPPORT */ + + + /************************************************************************** + * + * PNG bitmap support. + * + * FreeType now handles loading color bitmap glyphs in the PNG format. + * This requires help from the external libpng library. Uncompressed + * color bitmaps do not need any external libraries and will be supported + * regardless of this configuration. + * + * Define this macro if you want to enable this 'feature'. + * + * If you use a build system like cmake or the `configure` script, + * options set by those programs have precedence, overwriting the value + * here with the configured one. + */ +/* #define FT_CONFIG_OPTION_USE_PNG */ + + + /************************************************************************** + * + * HarfBuzz support. + * + * FreeType uses the HarfBuzz library to improve auto-hinting of OpenType + * fonts. If available, many glyphs not directly addressable by a font's + * character map will be hinted also. + * + * Define this macro if you want to enable this 'feature'. + * + * If you use a build system like cmake or the `configure` script, + * options set by those programs have precedence, overwriting the value + * here with the configured one. + */ +/* #define FT_CONFIG_OPTION_USE_HARFBUZZ */ + + + /************************************************************************** + * + * HarfBuzz dynamic support. + * + * Define this macro if you want the HarfBuzz library to be loaded at + * runtime instead of being linked to FreeType. + * + * This option has no effect if `FT_CONFIG_OPTION_USE_HARFBUZZ` is not + * defined. + * + * When this option is enabled, FreeType will try to load the HarfBuzz + * library at runtime, using `dlopen` or `LoadLibrary`, depending on the + * platform. On Microsoft platforms, the library name looked up is + * `libharfbuzz-0.dll`. On Apple platforms, the library name looked up + * is `libharfbuzz.0.dylib`. On all other platforms, the library name + * looked up is `libharfbuzz.so.0`. This name can be overridden by + * defining the macro `FT_LIBHARFBUZZ` at FreeType compilation time. + * + * If you use a build system like cmake or the `configure` script, + * options set by those programs have precedence, overwriting the value + * here with the configured one. + */ +/* #define FT_CONFIG_OPTION_USE_HARFBUZZ_DYNAMIC */ + + + /************************************************************************** + * + * Brotli support. + * + * FreeType uses the Brotli library to provide support for decompressing + * WOFF2 streams. + * + * Define this macro if you want to enable this 'feature'. + * + * If you use a build system like cmake or the `configure` script, + * options set by those programs have precedence, overwriting the value + * here with the configured one. + */ +/* #define FT_CONFIG_OPTION_USE_BROTLI */ + + + /************************************************************************** + * + * Glyph Postscript Names handling + * + * By default, FreeType 2 is compiled with the 'psnames' module. This + * module is in charge of converting a glyph name string into a Unicode + * value, or return a Macintosh standard glyph name for the use with the + * TrueType 'post' table. + * + * Undefine this macro if you do not want 'psnames' compiled in your + * build of FreeType. This has the following effects: + * + * - The TrueType driver will provide its own set of glyph names, if you + * build it to support postscript names in the TrueType 'post' table, + * but will not synthesize a missing Unicode charmap. + * + * - The Type~1 driver will not be able to synthesize a Unicode charmap + * out of the glyphs found in the fonts. + * + * You would normally undefine this configuration macro when building a + * version of FreeType that doesn't contain a Type~1 or CFF driver. + */ +#define FT_CONFIG_OPTION_POSTSCRIPT_NAMES + + + /************************************************************************** + * + * Postscript Names to Unicode Values support + * + * By default, FreeType~2 is built with the 'psnames' module compiled in. + * Among other things, the module is used to convert a glyph name into a + * Unicode value. This is especially useful in order to synthesize on + * the fly a Unicode charmap from the CFF/Type~1 driver through a big + * table named the 'Adobe Glyph List' (AGL). + * + * Undefine this macro if you do not want the Adobe Glyph List compiled + * in your 'psnames' module. The Type~1 driver will not be able to + * synthesize a Unicode charmap out of the glyphs found in the fonts. + */ +#define FT_CONFIG_OPTION_ADOBE_GLYPH_LIST + + + /************************************************************************** + * + * Support for Mac fonts + * + * Define this macro if you want support for outline fonts in Mac format + * (mac dfont, mac resource, macbinary containing a mac resource) on + * non-Mac platforms. + * + * Note that the 'FOND' resource isn't checked. + */ +#define FT_CONFIG_OPTION_MAC_FONTS + + + /************************************************************************** + * + * Guessing methods to access embedded resource forks + * + * Enable extra Mac fonts support on non-Mac platforms (e.g., GNU/Linux). + * + * Resource forks which include fonts data are stored sometimes in + * locations which users or developers don't expected. In some cases, + * resource forks start with some offset from the head of a file. In + * other cases, the actual resource fork is stored in file different from + * what the user specifies. If this option is activated, FreeType tries + * to guess whether such offsets or different file names must be used. + * + * Note that normal, direct access of resource forks is controlled via + * the `FT_CONFIG_OPTION_MAC_FONTS` option. + */ +#ifdef FT_CONFIG_OPTION_MAC_FONTS +#define FT_CONFIG_OPTION_GUESSING_EMBEDDED_RFORK +#endif + + + /************************************************************************** + * + * Allow the use of `FT_Incremental_Interface` to load typefaces that + * contain no glyph data, but supply it via a callback function. This is + * required by clients supporting document formats which supply font data + * incrementally as the document is parsed, such as the Ghostscript + * interpreter for the PostScript language. + */ +#define FT_CONFIG_OPTION_INCREMENTAL + + + /************************************************************************** + * + * The size in bytes of the render pool used by the scan-line converter to + * do all of its work. + */ +#define FT_RENDER_POOL_SIZE 16384L + + + /************************************************************************** + * + * FT_MAX_MODULES + * + * The maximum number of modules that can be registered in a single + * FreeType library object. 32~is the default. + */ +#define FT_MAX_MODULES 32 + + + /************************************************************************** + * + * Debug level + * + * FreeType can be compiled in debug or trace mode. In debug mode, + * errors are reported through the 'ftdebug' component. In trace mode, + * additional messages are sent to the standard output during execution. + * + * Define `FT_DEBUG_LEVEL_ERROR` to build the library in debug mode. + * Define `FT_DEBUG_LEVEL_TRACE` to build it in trace mode. + * + * Don't define any of these macros to compile in 'release' mode! + * + * Do not `#undef` these macros here since the build system might define + * them for certain configurations only. + */ +/* #define FT_DEBUG_LEVEL_ERROR */ +/* #define FT_DEBUG_LEVEL_TRACE */ + + + /************************************************************************** + * + * Logging + * + * Compiling FreeType in debug or trace mode makes FreeType write error + * and trace log messages to `stderr`. Enabling this macro + * automatically forces the `FT_DEBUG_LEVEL_ERROR` and + * `FT_DEBUG_LEVEL_TRACE` macros and allows FreeType to write error and + * trace log messages to a file instead of `stderr`. For writing logs + * to a file, FreeType uses an the external `dlg` library (the source + * code is in `src/dlg`). + * + * This option needs a C99 compiler. + */ +/* #define FT_DEBUG_LOGGING */ + + + /************************************************************************** + * + * Autofitter debugging + * + * If `FT_DEBUG_AUTOFIT` is defined, FreeType provides some means to + * control the autofitter behaviour for debugging purposes with global + * boolean variables (consequently, you should **never** enable this + * while compiling in 'release' mode): + * + * ``` + * af_debug_disable_horz_hints_ + * af_debug_disable_vert_hints_ + * af_debug_disable_blue_hints_ + * ``` + * + * Additionally, the following functions provide dumps of various + * internal autofit structures to stdout (using `printf`): + * + * ``` + * af_glyph_hints_dump_points + * af_glyph_hints_dump_segments + * af_glyph_hints_dump_edges + * af_glyph_hints_get_num_segments + * af_glyph_hints_get_segment_offset + * ``` + * + * As an argument, they use another global variable: + * + * ``` + * af_debug_hints_ + * ``` + * + * Please have a look at the `ftgrid` demo program to see how those + * variables and macros should be used. + * + * Do not `#undef` these macros here since the build system might define + * them for certain configurations only. + */ +/* #define FT_DEBUG_AUTOFIT */ + + + /************************************************************************** + * + * Memory Debugging + * + * FreeType now comes with an integrated memory debugger that is capable + * of detecting simple errors like memory leaks or double deletes. To + * compile it within your build of the library, you should define + * `FT_DEBUG_MEMORY` here. + * + * Note that the memory debugger is only activated at runtime when when + * the _environment_ variable `FT2_DEBUG_MEMORY` is defined also! + * + * Do not `#undef` this macro here since the build system might define it + * for certain configurations only. + */ +/* #define FT_DEBUG_MEMORY */ + + + /************************************************************************** + * + * Module errors + * + * If this macro is set (which is _not_ the default), the higher byte of + * an error code gives the module in which the error has occurred, while + * the lower byte is the real error code. + * + * Setting this macro makes sense for debugging purposes only, since it + * would break source compatibility of certain programs that use + * FreeType~2. + * + * More details can be found in the files `ftmoderr.h` and `fterrors.h`. + */ +#undef FT_CONFIG_OPTION_USE_MODULE_ERRORS + + + /************************************************************************** + * + * OpenType SVG Glyph Support + * + * Setting this macro enables support for OpenType SVG glyphs. By + * default, FreeType can only fetch SVG documents. However, it can also + * render them if external rendering hook functions are plugged in at + * runtime. + * + * More details on the hooks can be found in file `otsvg.h`. + */ +#define FT_CONFIG_OPTION_SVG + + + /************************************************************************** + * + * Error Strings + * + * If this macro is set, `FT_Error_String` will return meaningful + * descriptions. This is not enabled by default to reduce the overall + * size of FreeType. + * + * More details can be found in the file `fterrors.h`. + */ +/* #define FT_CONFIG_OPTION_ERROR_STRINGS */ + + + /*************************************************************************/ + /*************************************************************************/ + /**** ****/ + /**** S F N T D R I V E R C O N F I G U R A T I O N ****/ + /**** ****/ + /*************************************************************************/ + /*************************************************************************/ + + + /************************************************************************** + * + * Define `TT_CONFIG_OPTION_EMBEDDED_BITMAPS` if you want to support + * embedded bitmaps in all formats using the 'sfnt' module (namely + * TrueType~& OpenType). + */ +#define TT_CONFIG_OPTION_EMBEDDED_BITMAPS + + + /************************************************************************** + * + * Define `TT_CONFIG_OPTION_COLOR_LAYERS` if you want to support colored + * outlines (from the 'COLR'/'CPAL' tables) in all formats using the 'sfnt' + * module (namely TrueType~& OpenType). + */ +#define TT_CONFIG_OPTION_COLOR_LAYERS + + + /************************************************************************** + * + * Define `TT_CONFIG_OPTION_POSTSCRIPT_NAMES` if you want to be able to + * load and enumerate Postscript names of glyphs in a TrueType or OpenType + * file. + * + * Note that if you do not compile the 'psnames' module by undefining the + * above `FT_CONFIG_OPTION_POSTSCRIPT_NAMES` macro, the 'sfnt' module will + * contain additional code to read the PostScript name table from a font. + * + * (By default, the module uses 'psnames' to extract glyph names.) + */ +#define TT_CONFIG_OPTION_POSTSCRIPT_NAMES + + + /************************************************************************** + * + * Define `TT_CONFIG_OPTION_SFNT_NAMES` if your applications need to access + * the internal name table in a SFNT-based format like TrueType or + * OpenType. The name table contains various strings used to describe the + * font, like family name, copyright, version, etc. It does not contain + * any glyph name though. + * + * Accessing SFNT names is done through the functions declared in + * `ftsnames.h`. + */ +#define TT_CONFIG_OPTION_SFNT_NAMES + + + /************************************************************************** + * + * TrueType CMap support + * + * Here you can fine-tune which TrueType CMap table format shall be + * supported. + */ +#define TT_CONFIG_CMAP_FORMAT_0 +#define TT_CONFIG_CMAP_FORMAT_2 +#define TT_CONFIG_CMAP_FORMAT_4 +#define TT_CONFIG_CMAP_FORMAT_6 +#define TT_CONFIG_CMAP_FORMAT_8 +#define TT_CONFIG_CMAP_FORMAT_10 +#define TT_CONFIG_CMAP_FORMAT_12 +#define TT_CONFIG_CMAP_FORMAT_13 +#define TT_CONFIG_CMAP_FORMAT_14 + + + /*************************************************************************/ + /*************************************************************************/ + /**** ****/ + /**** T R U E T Y P E D R I V E R C O N F I G U R A T I O N ****/ + /**** ****/ + /*************************************************************************/ + /*************************************************************************/ + + /************************************************************************** + * + * Define `TT_CONFIG_OPTION_BYTECODE_INTERPRETER` if you want to compile a + * bytecode interpreter in the TrueType driver. + * + * By undefining this, you will only compile the code necessary to load + * TrueType glyphs without hinting. + * + * Do not `#undef` this macro here, since the build system might define it + * for certain configurations only. + */ +#define TT_CONFIG_OPTION_BYTECODE_INTERPRETER + + + /************************************************************************** + * + * Define `TT_CONFIG_OPTION_SUBPIXEL_HINTING` if you want to compile + * subpixel hinting support into the TrueType driver. This modifies the + * TrueType hinting mechanism when anything but `FT_RENDER_MODE_MONO` is + * requested. + * + * In particular, it modifies the bytecode interpreter to interpret (or + * not) instructions in a certain way so that all TrueType fonts look like + * they do in a Windows ClearType (DirectWrite) environment. See [1] for a + * technical overview on what this means. See `ttinterp.h` for more + * details on this option. + * + * The new default mode focuses on applying a minimal set of rules to all + * fonts indiscriminately so that modern and web fonts render well while + * legacy fonts render okay. The corresponding interpreter version is v40. + * The so-called Infinality mode (v38) is no longer available in FreeType. + * + * By undefining these, you get rendering behavior like on Windows without + * ClearType, i.e., Windows XP without ClearType enabled and Win9x + * (interpreter version v35). Or not, depending on how much hinting blood + * and testing tears the font designer put into a given font. If you + * define one or both subpixel hinting options, you can switch between + * between v35 and the ones you define (using `FT_Property_Set`). + * + * This option requires `TT_CONFIG_OPTION_BYTECODE_INTERPRETER` to be + * defined. + * + * [1] + * https://learn.microsoft.com/typography/cleartype/truetypecleartype + */ +#define TT_CONFIG_OPTION_SUBPIXEL_HINTING + + + /************************************************************************** + * + * Define `TT_CONFIG_OPTION_COMPONENT_OFFSET_SCALED` to compile the + * TrueType glyph loader to use Apple's definition of how to handle + * component offsets in composite glyphs. + * + * Apple and MS disagree on the default behavior of component offsets in + * composites. Apple says that they should be scaled by the scaling + * factors in the transformation matrix (roughly, it's more complex) while + * MS says they should not. OpenType defines two bits in the composite + * flags array which can be used to disambiguate, but old fonts will not + * have them. + * + * https://learn.microsoft.com/typography/opentype/spec/glyf + * https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6glyf.html + */ +#undef TT_CONFIG_OPTION_COMPONENT_OFFSET_SCALED + + + /************************************************************************** + * + * Define `TT_CONFIG_OPTION_GX_VAR_SUPPORT` if you want to include support + * for Apple's distortable font technology ('fvar', 'gvar', 'cvar', and + * 'avar' tables). Tagged 'Font Variations', this is now part of OpenType + * also. This has many similarities to Type~1 Multiple Masters support. + */ +#define TT_CONFIG_OPTION_GX_VAR_SUPPORT + + + /************************************************************************** + * + * Define `TT_CONFIG_OPTION_NO_BORING_EXPANSION` if you want to exclude + * support for 'boring' OpenType specification expansions. + * + * https://github.com/harfbuzz/boring-expansion-spec + * + * Right now, the following features are covered: + * + * - 'avar' version 2.0 + * + * Most likely, this is a temporary configuration option to be removed in + * the near future, since it is assumed that eventually those features are + * added to the OpenType standard. + */ +/* #define TT_CONFIG_OPTION_NO_BORING_EXPANSION */ + + + /************************************************************************** + * + * Define `TT_CONFIG_OPTION_BDF` if you want to include support for an + * embedded 'BDF~' table within SFNT-based bitmap formats. + */ +#define TT_CONFIG_OPTION_BDF + + + /************************************************************************** + * + * Option `TT_CONFIG_OPTION_MAX_RUNNABLE_OPCODES` controls the maximum + * number of bytecode instructions executed for a single run of the + * bytecode interpreter, needed to prevent infinite loops. You don't want + * to change this except for very special situations (e.g., making a + * library fuzzer spend less time to handle broken fonts). + * + * It is not expected that this value is ever modified by a configuring + * script; instead, it gets surrounded with `#ifndef ... #endif` so that + * the value can be set as a preprocessor option on the compiler's command + * line. + */ +#ifndef TT_CONFIG_OPTION_MAX_RUNNABLE_OPCODES +#define TT_CONFIG_OPTION_MAX_RUNNABLE_OPCODES 1000000L +#endif + + + /************************************************************************** + * + * Option `TT_CONFIG_OPTION_GPOS_KERNING` enables a basic GPOS kerning + * implementation (for TrueType and OpenType fonts only). With this + * defined, FreeType is able to get kerning pair data from the GPOS 'kern' + * feature as well as legacy 'kern' tables; without this defined, FreeType + * will only be able to use legacy 'kern' tables. + * + * Note that FreeType does not support more advanced GPOS layout features; + * even the 'kern' feature implemented here doesn't handle more + * sophisticated kerning variants. Use a higher-level library like + * HarfBuzz instead for that. + */ +/* #define TT_CONFIG_OPTION_GPOS_KERNING */ + + + /*************************************************************************/ + /*************************************************************************/ + /**** ****/ + /**** T Y P E 1 D R I V E R C O N F I G U R A T I O N ****/ + /**** ****/ + /*************************************************************************/ + /*************************************************************************/ + + + /************************************************************************** + * + * `T1_MAX_DICT_DEPTH` is the maximum depth of nest dictionaries and arrays + * in the Type~1 stream (see `t1load.c`). A minimum of~4 is required. + */ +#define T1_MAX_DICT_DEPTH 5 + + + /************************************************************************** + * + * `T1_MAX_SUBRS_CALLS` details the maximum number of nested sub-routine + * calls during glyph loading. + */ +#define T1_MAX_SUBRS_CALLS 16 + + + /************************************************************************** + * + * `T1_MAX_CHARSTRING_OPERANDS` is the charstring stack's capacity. A + * minimum of~16 is required. + * + * The Chinese font 'MingTiEG-Medium' (covering the CNS 11643 character + * set) needs 256. + */ +#define T1_MAX_CHARSTRINGS_OPERANDS 256 + + + /************************************************************************** + * + * Define this configuration macro if you want to prevent the compilation + * of the 't1afm' module, which is in charge of reading Type~1 AFM files + * into an existing face. Note that if set, the Type~1 driver will be + * unable to produce kerning distances. + */ +#undef T1_CONFIG_OPTION_NO_AFM + + + /************************************************************************** + * + * Define this configuration macro if you want to prevent the compilation + * of the Multiple Masters font support in the Type~1 driver. + */ +#undef T1_CONFIG_OPTION_NO_MM_SUPPORT + + + /************************************************************************** + * + * `T1_CONFIG_OPTION_OLD_ENGINE` controls whether the pre-Adobe Type~1 + * engine gets compiled into FreeType. If defined, it is possible to + * switch between the two engines using the `hinting-engine` property of + * the 'type1' driver module. + */ +/* #define T1_CONFIG_OPTION_OLD_ENGINE */ + + + /*************************************************************************/ + /*************************************************************************/ + /**** ****/ + /**** C F F D R I V E R C O N F I G U R A T I O N ****/ + /**** ****/ + /*************************************************************************/ + /*************************************************************************/ + + + /************************************************************************** + * + * Using `CFF_CONFIG_OPTION_DARKENING_PARAMETER_{X,Y}{1,2,3,4}` it is + * possible to set up the default values of the four control points that + * define the stem darkening behaviour of the (new) CFF engine. For more + * details please read the documentation of the `darkening-parameters` + * property (file `ftdriver.h`), which allows the control at run-time. + * + * Do **not** undefine these macros! + */ +#define CFF_CONFIG_OPTION_DARKENING_PARAMETER_X1 500 +#define CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y1 400 + +#define CFF_CONFIG_OPTION_DARKENING_PARAMETER_X2 1000 +#define CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y2 275 + +#define CFF_CONFIG_OPTION_DARKENING_PARAMETER_X3 1667 +#define CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y3 275 + +#define CFF_CONFIG_OPTION_DARKENING_PARAMETER_X4 2333 +#define CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y4 0 + + + /************************************************************************** + * + * `CFF_CONFIG_OPTION_OLD_ENGINE` controls whether the pre-Adobe CFF engine + * gets compiled into FreeType. If defined, it is possible to switch + * between the two engines using the `hinting-engine` property of the 'cff' + * driver module. + */ +/* #define CFF_CONFIG_OPTION_OLD_ENGINE */ + + + /*************************************************************************/ + /*************************************************************************/ + /**** ****/ + /**** P C F D R I V E R C O N F I G U R A T I O N ****/ + /**** ****/ + /*************************************************************************/ + /*************************************************************************/ + + + /************************************************************************** + * + * There are many PCF fonts just called 'Fixed' which look completely + * different, and which have nothing to do with each other. When selecting + * 'Fixed' in KDE or Gnome one gets results that appear rather random, the + * style changes often if one changes the size and one cannot select some + * fonts at all. This option makes the 'pcf' module prepend the foundry + * name (plus a space) to the family name. + * + * We also check whether we have 'wide' characters; all put together, we + * get family names like 'Sony Fixed' or 'Misc Fixed Wide'. + * + * If this option is activated, it can be controlled with the + * `no-long-family-names` property of the 'pcf' driver module. + */ +/* #define PCF_CONFIG_OPTION_LONG_FAMILY_NAMES */ + + + /*************************************************************************/ + /*************************************************************************/ + /**** ****/ + /**** A U T O F I T M O D U L E C O N F I G U R A T I O N ****/ + /**** ****/ + /*************************************************************************/ + /*************************************************************************/ + + + /************************************************************************** + * + * Compile 'autofit' module with CJK (Chinese, Japanese, Korean) script + * support. + */ +#define AF_CONFIG_OPTION_CJK + + + /************************************************************************** + * + * Compile 'autofit' module with fallback Indic script support, covering + * some scripts that the 'latin' submodule of the 'autofit' module doesn't + * (yet) handle. Currently, this needs option `AF_CONFIG_OPTION_CJK`. + */ +#ifdef AF_CONFIG_OPTION_CJK +#define AF_CONFIG_OPTION_INDIC +#endif + + + /************************************************************************** + * + * Use TrueType-like size metrics for 'light' auto-hinting. + * + * It is strongly recommended to avoid this option, which exists only to + * help some legacy applications retain its appearance and behaviour with + * respect to auto-hinted TrueType fonts. + * + * The very reason this option exists at all are GNU/Linux distributions + * like Fedora that did not un-patch the following change (which was + * present in FreeType between versions 2.4.6 and 2.7.1, inclusive). + * + * ``` + * 2011-07-16 Steven Chu + * + * [truetype] Fix metrics on size request for scalable fonts. + * ``` + * + * This problematic commit is now reverted (more or less). + */ +/* #define AF_CONFIG_OPTION_TT_SIZE_METRICS */ + + /* */ + + + /* + * This macro is obsolete. Support has been removed in FreeType version + * 2.5. + */ +/* #define FT_CONFIG_OPTION_OLD_INTERNALS */ + + + /* + * The next two macros are defined if native TrueType hinting is + * requested by the definitions above. Don't change this. + */ +#ifdef TT_CONFIG_OPTION_BYTECODE_INTERPRETER +#define TT_USE_BYTECODE_INTERPRETER +#ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING +#define TT_SUPPORT_SUBPIXEL_HINTING_MINIMAL +#endif +#endif + + + /* + * The TT_SUPPORT_COLRV1 macro is defined to indicate to clients that this + * version of FreeType has support for 'COLR' v1 API. This definition is + * useful to FreeType clients that want to build in support for 'COLR' v1 + * depending on a tip-of-tree checkout before it is officially released in + * FreeType, and while the feature cannot yet be tested against using + * version macros. Don't change this macro. This may be removed once the + * feature is in a FreeType release version and version macros can be used + * to test for availability. + */ +#ifdef TT_CONFIG_OPTION_COLOR_LAYERS +#define TT_SUPPORT_COLRV1 +#endif + + + /* + * Check CFF darkening parameters. The checks are the same as in function + * `cff_property_set` in file `cffdrivr.c`. + */ +#if CFF_CONFIG_OPTION_DARKENING_PARAMETER_X1 < 0 || \ + CFF_CONFIG_OPTION_DARKENING_PARAMETER_X2 < 0 || \ + CFF_CONFIG_OPTION_DARKENING_PARAMETER_X3 < 0 || \ + CFF_CONFIG_OPTION_DARKENING_PARAMETER_X4 < 0 || \ + \ + CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y1 < 0 || \ + CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y2 < 0 || \ + CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y3 < 0 || \ + CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y4 < 0 || \ + \ + CFF_CONFIG_OPTION_DARKENING_PARAMETER_X1 > \ + CFF_CONFIG_OPTION_DARKENING_PARAMETER_X2 || \ + CFF_CONFIG_OPTION_DARKENING_PARAMETER_X2 > \ + CFF_CONFIG_OPTION_DARKENING_PARAMETER_X3 || \ + CFF_CONFIG_OPTION_DARKENING_PARAMETER_X3 > \ + CFF_CONFIG_OPTION_DARKENING_PARAMETER_X4 || \ + \ + CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y1 > 500 || \ + CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y2 > 500 || \ + CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y3 > 500 || \ + CFF_CONFIG_OPTION_DARKENING_PARAMETER_Y4 > 500 +#error "Invalid CFF darkening parameters!" +#endif + + +FT_END_HEADER + +#endif /* FTOPTION_H_ */ + + +/* END */ diff --git a/third_party/tlRender-install-Release/include/freetype2/freetype/config/ftstdlib.h b/third_party/tlRender-install-Release/include/freetype2/freetype/config/ftstdlib.h new file mode 100644 index 00000000..f846b445 --- /dev/null +++ b/third_party/tlRender-install-Release/include/freetype2/freetype/config/ftstdlib.h @@ -0,0 +1,185 @@ +/**************************************************************************** + * + * ftstdlib.h + * + * ANSI-specific library and header configuration file (specification + * only). + * + * Copyright (C) 2002-2025 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + + /************************************************************************** + * + * This file is used to group all `#includes` to the ANSI~C library that + * FreeType normally requires. It also defines macros to rename the + * standard functions within the FreeType source code. + * + * Load a file which defines `FTSTDLIB_H_` before this one to override it. + * + */ + + +#ifndef FTSTDLIB_H_ +#define FTSTDLIB_H_ + + +#include + +#define ft_ptrdiff_t ptrdiff_t + + + /************************************************************************** + * + * integer limits + * + * `UINT_MAX` and `ULONG_MAX` are used to automatically compute the size of + * `int` and `long` in bytes at compile-time. So far, this works for all + * platforms the library has been tested on. We also check `ULLONG_MAX` + * to see whether we can use 64-bit `long long` later on. + * + * Note that on the extremely rare platforms that do not provide integer + * types that are _exactly_ 16 and 32~bits wide (e.g., some old Crays where + * `int` is 36~bits), we do not make any guarantee about the correct + * behaviour of FreeType~2 with all fonts. + * + * In these cases, `ftconfig.h` will refuse to compile anyway with a + * message like 'couldn't find 32-bit type' or something similar. + * + */ + + +#include + +#define FT_CHAR_BIT CHAR_BIT +#define FT_USHORT_MAX USHRT_MAX +#define FT_INT_MAX INT_MAX +#define FT_INT_MIN INT_MIN +#define FT_UINT_MAX UINT_MAX +#define FT_LONG_MIN LONG_MIN +#define FT_LONG_MAX LONG_MAX +#define FT_ULONG_MAX ULONG_MAX +#ifdef LLONG_MAX +#define FT_LLONG_MAX LLONG_MAX +#endif +#ifdef LLONG_MIN +#define FT_LLONG_MIN LLONG_MIN +#endif +#ifdef ULLONG_MAX +#define FT_ULLONG_MAX ULLONG_MAX +#endif + + + /************************************************************************** + * + * character and string processing + * + */ + + +#include + +#define ft_memchr memchr +#define ft_memcmp memcmp +#define ft_memcpy memcpy +#define ft_memmove memmove +#define ft_memset memset +#define ft_strcat strcat +#define ft_strcmp strcmp +#define ft_strcpy strcpy +#define ft_strlen strlen +#define ft_strncmp strncmp +#define ft_strncpy strncpy +#define ft_strrchr strrchr +#define ft_strstr strstr + + + /************************************************************************** + * + * file handling + * + */ + + +#include + +#define FT_FILE FILE +#define ft_fclose fclose +#define ft_fopen fopen +#define ft_fread fread +#define ft_fseek fseek +#define ft_ftell ftell +#define ft_snprintf snprintf + + + /************************************************************************** + * + * sorting + * + */ + + +#include + +#define ft_qsort qsort + + + /************************************************************************** + * + * memory allocation + * + */ + + +#define ft_scalloc calloc +#define ft_sfree free +#define ft_smalloc malloc +#define ft_srealloc realloc + + + /************************************************************************** + * + * miscellaneous + * + */ + + +#define ft_strtol strtol +#define ft_getenv getenv + + + /************************************************************************** + * + * execution control + * + */ + + +#include + +#define ft_jmp_buf jmp_buf /* note: this cannot be a typedef since */ + /* `jmp_buf` is defined as a macro */ + /* on certain platforms */ + +#define ft_longjmp longjmp +#define ft_setjmp( b ) setjmp( *(ft_jmp_buf*) &(b) ) /* same thing here */ + + + /* The following is only used for debugging purposes, i.e., if */ + /* `FT_DEBUG_LEVEL_ERROR` or `FT_DEBUG_LEVEL_TRACE` are defined. */ + +#include + + +#endif /* FTSTDLIB_H_ */ + + +/* END */ diff --git a/third_party/tlRender-install-Release/include/freetype2/freetype/config/integer-types.h b/third_party/tlRender-install-Release/include/freetype2/freetype/config/integer-types.h new file mode 100644 index 00000000..a0b892ec --- /dev/null +++ b/third_party/tlRender-install-Release/include/freetype2/freetype/config/integer-types.h @@ -0,0 +1,277 @@ +/**************************************************************************** + * + * config/integer-types.h + * + * FreeType integer types definitions. + * + * Copyright (C) 1996-2025 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ +#ifndef FREETYPE_CONFIG_INTEGER_TYPES_H_ +#define FREETYPE_CONFIG_INTEGER_TYPES_H_ + +FT_BEGIN_HEADER + + /* There are systems (like the Texas Instruments 'C54x) where a `char` */ + /* has 16~bits. ANSI~C says that `sizeof(char)` is always~1. Since an */ + /* `int` has 16~bits also for this system, `sizeof(int)` gives~1 which */ + /* is probably unexpected. */ + /* */ + /* `CHAR_BIT` (defined in `limits.h`) gives the number of bits in a */ + /* `char` type. */ + +#ifndef FT_CHAR_BIT +#define FT_CHAR_BIT CHAR_BIT +#endif + +#ifndef FT_SIZEOF_INT + + /* The size of an `int` type. */ +#if FT_UINT_MAX == 0xFFFFUL +#define FT_SIZEOF_INT ( 16 / FT_CHAR_BIT ) +#elif FT_UINT_MAX == 0xFFFFFFFFUL +#define FT_SIZEOF_INT ( 32 / FT_CHAR_BIT ) +#elif FT_UINT_MAX > 0xFFFFFFFFUL && FT_UINT_MAX == 0xFFFFFFFFFFFFFFFFUL +#define FT_SIZEOF_INT ( 64 / FT_CHAR_BIT ) +#else +#error "Unsupported size of `int' type!" +#endif + +#endif /* !defined(FT_SIZEOF_INT) */ + +#ifndef FT_SIZEOF_LONG + + /* The size of a `long` type. A five-byte `long` (as used e.g. on the */ + /* DM642) is recognized but avoided. */ +#if FT_ULONG_MAX == 0xFFFFFFFFUL +#define FT_SIZEOF_LONG ( 32 / FT_CHAR_BIT ) +#elif FT_ULONG_MAX > 0xFFFFFFFFUL && FT_ULONG_MAX == 0xFFFFFFFFFFUL +#define FT_SIZEOF_LONG ( 32 / FT_CHAR_BIT ) +#elif FT_ULONG_MAX > 0xFFFFFFFFUL && FT_ULONG_MAX == 0xFFFFFFFFFFFFFFFFUL +#define FT_SIZEOF_LONG ( 64 / FT_CHAR_BIT ) +#else +#error "Unsupported size of `long' type!" +#endif + +#endif /* !defined(FT_SIZEOF_LONG) */ + +#ifndef FT_SIZEOF_LONG_LONG + + /* The size of a `long long` type if available */ +#if defined( FT_ULLONG_MAX ) && FT_ULLONG_MAX >= 0xFFFFFFFFFFFFFFFFULL +#define FT_SIZEOF_LONG_LONG ( 64 / FT_CHAR_BIT ) +#else +#define FT_SIZEOF_LONG_LONG 0 +#endif + +#endif /* !defined(FT_SIZEOF_LONG_LONG) */ + + + /************************************************************************** + * + * @section: + * basic_types + * + */ + + + /************************************************************************** + * + * @type: + * FT_Int16 + * + * @description: + * A typedef for a 16bit signed integer type. + */ + typedef signed short FT_Int16; + + + /************************************************************************** + * + * @type: + * FT_UInt16 + * + * @description: + * A typedef for a 16bit unsigned integer type. + */ + typedef unsigned short FT_UInt16; + + /* */ + + + /* this #if 0 ... #endif clause is for documentation purposes */ +#if 0 + + /************************************************************************** + * + * @type: + * FT_Int32 + * + * @description: + * A typedef for a 32bit signed integer type. The size depends on the + * configuration. + */ + typedef signed XXX FT_Int32; + + + /************************************************************************** + * + * @type: + * FT_UInt32 + * + * A typedef for a 32bit unsigned integer type. The size depends on the + * configuration. + */ + typedef unsigned XXX FT_UInt32; + + + /************************************************************************** + * + * @type: + * FT_Int64 + * + * A typedef for a 64bit signed integer type. The size depends on the + * configuration. Only defined if there is real 64bit support; + * otherwise, it gets emulated with a structure (if necessary). + */ + typedef signed XXX FT_Int64; + + + /************************************************************************** + * + * @type: + * FT_UInt64 + * + * A typedef for a 64bit unsigned integer type. The size depends on the + * configuration. Only defined if there is real 64bit support; + * otherwise, it gets emulated with a structure (if necessary). + */ + typedef unsigned XXX FT_UInt64; + + /* */ + +#endif + +#if FT_SIZEOF_INT == ( 32 / FT_CHAR_BIT ) + + typedef signed int FT_Int32; + typedef unsigned int FT_UInt32; + +#elif FT_SIZEOF_LONG == ( 32 / FT_CHAR_BIT ) + + typedef signed long FT_Int32; + typedef unsigned long FT_UInt32; + +#else +#error "no 32bit type found -- please check your configuration files" +#endif + + + /* look up an integer type that is at least 32~bits */ +#if FT_SIZEOF_INT >= ( 32 / FT_CHAR_BIT ) + + typedef int FT_Fast; + typedef unsigned int FT_UFast; + +#elif FT_SIZEOF_LONG >= ( 32 / FT_CHAR_BIT ) + + typedef long FT_Fast; + typedef unsigned long FT_UFast; + +#endif + + + /* determine whether we have a 64-bit integer type */ +#if FT_SIZEOF_LONG == ( 64 / FT_CHAR_BIT ) + +#define FT_INT64 long +#define FT_UINT64 unsigned long + +#elif FT_SIZEOF_LONG_LONG >= ( 64 / FT_CHAR_BIT ) + +#define FT_INT64 long long int +#define FT_UINT64 unsigned long long int + + /************************************************************************** + * + * A 64-bit data type may create compilation problems if you compile in + * strict ANSI mode. To avoid them, we disable other 64-bit data types if + * `__STDC__` is defined. You can however ignore this rule by defining the + * `FT_CONFIG_OPTION_FORCE_INT64` configuration macro. + */ +#elif !defined( __STDC__ ) || defined( FT_CONFIG_OPTION_FORCE_INT64 ) + +#if defined( _MSC_VER ) && _MSC_VER >= 900 /* Visual C++ (and Intel C++) */ + + /* this compiler provides the `__int64` type */ +#define FT_INT64 __int64 +#define FT_UINT64 unsigned __int64 + +#elif defined( __BORLANDC__ ) /* Borland C++ */ + + /* XXXX: We should probably check the value of `__BORLANDC__` in order */ + /* to test the compiler version. */ + + /* this compiler provides the `__int64` type */ +#define FT_INT64 __int64 +#define FT_UINT64 unsigned __int64 + +#elif defined( __WATCOMC__ ) && __WATCOMC__ >= 1100 /* Watcom C++ */ + +#define FT_INT64 long long int +#define FT_UINT64 unsigned long long int + +#elif defined( __MWERKS__ ) /* Metrowerks CodeWarrior */ + +#define FT_INT64 long long int +#define FT_UINT64 unsigned long long int + +#elif defined( __GNUC__ ) + + /* GCC provides the `long long` type */ +#define FT_INT64 long long int +#define FT_UINT64 unsigned long long int + +#endif /* !__STDC__ */ + +#endif /* FT_SIZEOF_LONG == (64 / FT_CHAR_BIT) */ + +#ifdef FT_INT64 + + typedef FT_INT64 FT_Int64; + typedef FT_UINT64 FT_UInt64; + +# define FT_INT64_ZERO 0 + +#else /* !FT_INT64 */ + + /* we need to emulate 64-bit data types if none are available */ + + typedef struct FT_Int64_ + { + FT_UInt32 lo; + FT_UInt32 hi; + + } FT_Int64; + + typedef struct FT_UInt64_ + { + FT_UInt32 lo; + FT_UInt32 hi; + + } FT_UInt64; + +# define FT_INT64_ZERO { 0, 0 } + +#endif /* !FT_INT64 */ + +FT_END_HEADER + +#endif /* FREETYPE_CONFIG_INTEGER_TYPES_H_ */ diff --git a/third_party/tlRender-install-Release/include/freetype2/freetype/config/mac-support.h b/third_party/tlRender-install-Release/include/freetype2/freetype/config/mac-support.h new file mode 100644 index 00000000..d1b6a989 --- /dev/null +++ b/third_party/tlRender-install-Release/include/freetype2/freetype/config/mac-support.h @@ -0,0 +1,49 @@ +/**************************************************************************** + * + * config/mac-support.h + * + * Mac/OS X support configuration header. + * + * Copyright (C) 1996-2025 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ +#ifndef FREETYPE_CONFIG_MAC_SUPPORT_H_ +#define FREETYPE_CONFIG_MAC_SUPPORT_H_ + + /************************************************************************** + * + * Mac support + * + * This is the only necessary change, so it is defined here instead + * providing a new configuration file. + */ +#if defined( __APPLE__ ) || ( defined( __MWERKS__ ) && defined( macintosh ) ) + /* No Carbon frameworks for 64bit 10.4.x. */ + /* `AvailabilityMacros.h` is available since Mac OS X 10.2, */ + /* so guess the system version by maximum errno before inclusion. */ +#include +#ifdef ECANCELED /* defined since 10.2 */ +#include "AvailabilityMacros.h" +#endif +#if defined( __LP64__ ) && \ + ( MAC_OS_X_VERSION_MIN_REQUIRED <= MAC_OS_X_VERSION_10_4 ) +#undef FT_MACINTOSH +#endif + +#elif defined( __SC__ ) || defined( __MRC__ ) + /* Classic MacOS compilers */ +#include "ConditionalMacros.h" +#if TARGET_OS_MAC +#define FT_MACINTOSH 1 +#endif + +#endif /* Mac support */ + +#endif /* FREETYPE_CONFIG_MAC_SUPPORT_H_ */ diff --git a/third_party/tlRender-install-Release/include/freetype2/freetype/config/public-macros.h b/third_party/tlRender-install-Release/include/freetype2/freetype/config/public-macros.h new file mode 100644 index 00000000..9f28b394 --- /dev/null +++ b/third_party/tlRender-install-Release/include/freetype2/freetype/config/public-macros.h @@ -0,0 +1,138 @@ +/**************************************************************************** + * + * config/public-macros.h + * + * Define a set of compiler macros used in public FreeType headers. + * + * Copyright (C) 2020-2025 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + /* + * The definitions in this file are used by the public FreeType headers + * and thus should be considered part of the public API. + * + * Other compiler-specific macro definitions that are not exposed by the + * FreeType API should go into + * `include/freetype/internal/compiler-macros.h` instead. + */ +#ifndef FREETYPE_CONFIG_PUBLIC_MACROS_H_ +#define FREETYPE_CONFIG_PUBLIC_MACROS_H_ + + /* + * `FT_BEGIN_HEADER` and `FT_END_HEADER` might have already been defined + * by `freetype/config/ftheader.h`, but we don't want to include this + * header here, so redefine the macros here only when needed. Their + * definition is very stable, so keeping them in sync with the ones in the + * header should not be a maintenance issue. + */ +#ifndef FT_BEGIN_HEADER +#ifdef __cplusplus +#define FT_BEGIN_HEADER extern "C" { +#else +#define FT_BEGIN_HEADER /* empty */ +#endif +#endif /* FT_BEGIN_HEADER */ + +#ifndef FT_END_HEADER +#ifdef __cplusplus +#define FT_END_HEADER } +#else +#define FT_END_HEADER /* empty */ +#endif +#endif /* FT_END_HEADER */ + + +FT_BEGIN_HEADER + + /* + * Mark a function declaration as public. This ensures it will be + * properly exported to client code. Place this before a function + * declaration. + * + * NOTE: This macro should be considered an internal implementation + * detail, and not part of the FreeType API. It is only defined here + * because it is needed by `FT_EXPORT`. + */ + + /* Visual C, MinGW, Cygwin */ +#if defined( _WIN32 ) || defined( __CYGWIN__ ) + +#if defined( FT2_BUILD_LIBRARY ) && defined( DLL_EXPORT ) +#define FT_PUBLIC_FUNCTION_ATTRIBUTE __declspec( dllexport ) +#elif defined( DLL_IMPORT ) +#define FT_PUBLIC_FUNCTION_ATTRIBUTE __declspec( dllimport ) +#endif + + /* gcc, clang */ +#elif ( defined( __GNUC__ ) && __GNUC__ >= 4 ) || defined( __clang__ ) +#define FT_PUBLIC_FUNCTION_ATTRIBUTE \ + __attribute__(( visibility( "default" ) )) + + /* Sun */ +#elif defined( __SUNPRO_C ) && __SUNPRO_C >= 0x550 +#define FT_PUBLIC_FUNCTION_ATTRIBUTE __global +#endif + + +#ifndef FT_PUBLIC_FUNCTION_ATTRIBUTE +#define FT_PUBLIC_FUNCTION_ATTRIBUTE /* empty */ +#endif + + + /* + * Define a public FreeType API function. This ensures it is properly + * exported or imported at build time. The macro parameter is the + * function's return type as in: + * + * FT_EXPORT( FT_Bool ) + * FT_Object_Method( FT_Object obj, + * ... ); + * + * NOTE: This requires that all `FT_EXPORT` uses are inside + * `FT_BEGIN_HEADER ... FT_END_HEADER` blocks. This guarantees that the + * functions are exported with C linkage, even when the header is included + * by a C++ source file. + */ +#define FT_EXPORT( x ) FT_PUBLIC_FUNCTION_ATTRIBUTE extern x + + + /* + * `FT_UNUSED` indicates that a given parameter is not used -- this is + * only used to get rid of unpleasant compiler warnings. + * + * Technically, this was not meant to be part of the public API, but some + * third-party code depends on it. + */ +#ifndef FT_UNUSED +#define FT_UNUSED( arg ) ( (arg) = (arg) ) +#endif + + + /* + * Support for casts in both C and C++. + */ +#ifdef __cplusplus +#define FT_STATIC_CAST( type, var ) static_cast(var) +#define FT_REINTERPRET_CAST( type, var ) reinterpret_cast(var) + +#define FT_STATIC_BYTE_CAST( type, var ) \ + static_cast( static_cast( var ) ) +#else +#define FT_STATIC_CAST( type, var ) (type)(var) +#define FT_REINTERPRET_CAST( type, var ) (type)(var) + +#define FT_STATIC_BYTE_CAST( type, var ) (type)(unsigned char)(var) +#endif + + +FT_END_HEADER + +#endif /* FREETYPE_CONFIG_PUBLIC_MACROS_H_ */ diff --git a/third_party/tlRender-install-Release/include/freetype2/freetype/freetype.h b/third_party/tlRender-install-Release/include/freetype2/freetype/freetype.h new file mode 100644 index 00000000..1e249235 --- /dev/null +++ b/third_party/tlRender-install-Release/include/freetype2/freetype/freetype.h @@ -0,0 +1,5293 @@ +/**************************************************************************** + * + * freetype.h + * + * FreeType high-level API and common types (specification only). + * + * Copyright (C) 1996-2025 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + +#ifndef FREETYPE_H_ +#define FREETYPE_H_ + + +#include +#include FT_CONFIG_CONFIG_H +#include +#include + + +FT_BEGIN_HEADER + + + + /************************************************************************** + * + * @section: + * preamble + * + * @title: + * Preamble + * + * @abstract: + * What FreeType is and isn't + * + * @description: + * FreeType is a library that provides access to glyphs in font files. It + * scales the glyph images and their metrics to a requested size, and it + * rasterizes the glyph images to produce pixel or subpixel alpha coverage + * bitmaps. + * + * Note that FreeType is _not_ a text layout engine. You have to use + * higher-level libraries like HarfBuzz, Pango, or ICU for that. + * + * Note also that FreeType does _not_ perform alpha blending or + * compositing the resulting bitmaps or pixmaps by itself. Use your + * favourite graphics library (for example, Cairo or Skia) to further + * process FreeType's output. + * + */ + + + /************************************************************************** + * + * @section: + * header_inclusion + * + * @title: + * FreeType's header inclusion scheme + * + * @abstract: + * How client applications should include FreeType header files. + * + * @description: + * To be as flexible as possible (and for historical reasons), you must + * load file `ft2build.h` first before other header files, for example + * + * ``` + * #include + * + * #include + * #include + * ``` + */ + + + /************************************************************************** + * + * @section: + * user_allocation + * + * @title: + * User allocation + * + * @abstract: + * How client applications should allocate FreeType data structures. + * + * @description: + * FreeType assumes that structures allocated by the user and passed as + * arguments are zeroed out except for the actual data. In other words, + * it is recommended to use `calloc` (or variants of it) instead of + * `malloc` for allocation. + * + */ + + + /************************************************************************** + * + * @section: + * font_testing_macros + * + * @title: + * Font Testing Macros + * + * @abstract: + * Macros to test various properties of fonts. + * + * @description: + * Macros to test the most important font properties. + * + * It is recommended to use these high-level macros instead of directly + * testing the corresponding flags, which are scattered over various + * structures. + * + * @order: + * FT_HAS_HORIZONTAL + * FT_HAS_VERTICAL + * FT_HAS_KERNING + * FT_HAS_FIXED_SIZES + * FT_HAS_GLYPH_NAMES + * FT_HAS_COLOR + * FT_HAS_MULTIPLE_MASTERS + * FT_HAS_SVG + * FT_HAS_SBIX + * FT_HAS_SBIX_OVERLAY + * + * FT_IS_SFNT + * FT_IS_SCALABLE + * FT_IS_FIXED_WIDTH + * FT_IS_CID_KEYED + * FT_IS_TRICKY + * FT_IS_NAMED_INSTANCE + * FT_IS_VARIATION + * + */ + + + /************************************************************************** + * + * @section: + * library_setup + * + * @title: + * Library Setup + * + * @abstract: + * Functions to start and end the usage of the FreeType library. + * + * @description: + * Functions to start and end the usage of the FreeType library. + * + * Note that @FT_Library_Version and @FREETYPE_XXX are of limited use + * because even a new release of FreeType with only documentation + * changes increases the version number. + * + * @order: + * FT_Library + * FT_Init_FreeType + * FT_Done_FreeType + * + * FT_Library_Version + * FREETYPE_XXX + * + */ + + + /************************************************************************** + * + * @section: + * face_creation + * + * @title: + * Face Creation + * + * @abstract: + * Functions to manage fonts. + * + * @description: + * The functions and structures collected in this section operate on + * fonts globally. + * + * @order: + * FT_Face + * FT_FaceRec + * FT_FACE_FLAG_XXX + * FT_STYLE_FLAG_XXX + * + * FT_New_Face + * FT_Done_Face + * FT_Reference_Face + * FT_New_Memory_Face + * FT_Face_Properties + * FT_Open_Face + * FT_Open_Args + * FT_OPEN_XXX + * FT_Parameter + * FT_Attach_File + * FT_Attach_Stream + * + */ + + + /************************************************************************** + * + * @section: + * sizing_and_scaling + * + * @title: + * Sizing and Scaling + * + * @abstract: + * Functions to manage font sizes. + * + * @description: + * The functions and structures collected in this section are related to + * selecting and manipulating the size of a font globally. + * + * @order: + * FT_Size + * FT_SizeRec + * FT_Size_Metrics + * + * FT_Bitmap_Size + * + * FT_Set_Char_Size + * FT_Set_Pixel_Sizes + * FT_Request_Size + * FT_Select_Size + * FT_Size_Request_Type + * FT_Size_RequestRec + * FT_Size_Request + * + * FT_Set_Transform + * FT_Get_Transform + * + */ + + + /************************************************************************** + * + * @section: + * glyph_retrieval + * + * @title: + * Glyph Retrieval + * + * @abstract: + * Functions to manage glyphs. + * + * @description: + * The functions and structures collected in this section operate on + * single glyphs, of which @FT_Load_Glyph is most important. + * + * @order: + * FT_GlyphSlot + * FT_GlyphSlotRec + * FT_Glyph_Metrics + * + * FT_Load_Glyph + * FT_LOAD_XXX + * FT_LOAD_TARGET_MODE + * FT_LOAD_TARGET_XXX + * + * FT_Render_Glyph + * FT_Render_Mode + * FT_Get_Kerning + * FT_Kerning_Mode + * FT_Get_Track_Kerning + * + */ + + + /************************************************************************** + * + * @section: + * character_mapping + * + * @title: + * Character Mapping + * + * @abstract: + * Functions to manage character-to-glyph maps. + * + * @description: + * This section holds functions and structures that are related to + * mapping character input codes to glyph indices. + * + * Note that for many scripts the simplistic approach used by FreeType + * of mapping a single character to a single glyph is not valid or + * possible! In general, a higher-level library like HarfBuzz or ICU + * should be used for handling text strings. + * + * @order: + * FT_CharMap + * FT_CharMapRec + * FT_Encoding + * FT_ENC_TAG + * + * FT_Select_Charmap + * FT_Set_Charmap + * FT_Get_Charmap_Index + * + * FT_Get_Char_Index + * FT_Get_First_Char + * FT_Get_Next_Char + * FT_Load_Char + * + */ + + + /************************************************************************** + * + * @section: + * information_retrieval + * + * @title: + * Information Retrieval + * + * @abstract: + * Functions to retrieve font and glyph information. + * + * @description: + * Functions to retrieve font and glyph information. Only some very + * basic data is covered; see also the chapter on the format-specific + * API for more. + * + * + * @order: + * FT_Get_Name_Index + * FT_Get_Glyph_Name + * FT_Get_Postscript_Name + * FT_Get_FSType_Flags + * FT_FSTYPE_XXX + * FT_Get_SubGlyph_Info + * FT_SUBGLYPH_FLAG_XXX + * + */ + + + /************************************************************************** + * + * @section: + * other_api_data + * + * @title: + * Other API Data + * + * @abstract: + * Other structures, enumerations, and macros. + * + * @description: + * Other structures, enumerations, and macros. Deprecated functions are + * also listed here. + * + * @order: + * FT_Face_Internal + * FT_Size_Internal + * FT_Slot_Internal + * + * FT_SubGlyph + * + * FT_HAS_FAST_GLYPHS + * FT_Face_CheckTrueTypePatents + * FT_Face_SetUnpatentedHinting + * + */ + + + /*************************************************************************/ + /*************************************************************************/ + /* */ + /* B A S I C T Y P E S */ + /* */ + /*************************************************************************/ + /*************************************************************************/ + + + /************************************************************************** + * + * @section: + * glyph_retrieval + * + */ + + /************************************************************************** + * + * @struct: + * FT_Glyph_Metrics + * + * @description: + * A structure to model the metrics of a single glyph. The values are + * expressed in 26.6 fractional pixel format; if the flag + * @FT_LOAD_NO_SCALE has been used while loading the glyph, values are + * expressed in font units instead. + * + * @fields: + * width :: + * The glyph's width. + * + * height :: + * The glyph's height. + * + * horiBearingX :: + * Left side bearing for horizontal layout. + * + * horiBearingY :: + * Top side bearing for horizontal layout. + * + * horiAdvance :: + * Advance width for horizontal layout. + * + * vertBearingX :: + * Left side bearing for vertical layout. + * + * vertBearingY :: + * Top side bearing for vertical layout. Larger positive values mean + * further below the vertical glyph origin. + * + * vertAdvance :: + * Advance height for vertical layout. Positive values mean the glyph + * has a positive advance downward. + * + * @note: + * If not disabled with @FT_LOAD_NO_HINTING, the values represent + * dimensions of the hinted glyph (in case hinting is applicable). + * + * Stroking a glyph with an outside border does not increase + * `horiAdvance` or `vertAdvance`; you have to manually adjust these + * values to account for the added width and height. + * + * FreeType doesn't use the 'VORG' table data for CFF fonts because it + * doesn't have an interface to quickly retrieve the glyph height. The + * y~coordinate of the vertical origin can be simply computed as + * `vertBearingY + height` after loading a glyph. + */ + typedef struct FT_Glyph_Metrics_ + { + FT_Pos width; + FT_Pos height; + + FT_Pos horiBearingX; + FT_Pos horiBearingY; + FT_Pos horiAdvance; + + FT_Pos vertBearingX; + FT_Pos vertBearingY; + FT_Pos vertAdvance; + + } FT_Glyph_Metrics; + + + /************************************************************************** + * + * @section: + * sizing_and_scaling + * + */ + + /************************************************************************** + * + * @struct: + * FT_Bitmap_Size + * + * @description: + * This structure models the metrics of a bitmap strike (i.e., a set of + * glyphs for a given point size and resolution) in a bitmap font. It is + * used for the `available_sizes` field of @FT_Face. + * + * @fields: + * height :: + * The vertical distance, in pixels, between two consecutive baselines. + * It is always positive. + * + * width :: + * The average width, in pixels, of all glyphs in the strike. + * + * size :: + * The nominal size of the strike in 26.6 fractional points. This + * field is not very useful. + * + * x_ppem :: + * The horizontal ppem (nominal width) in 26.6 fractional pixels. + * + * y_ppem :: + * The vertical ppem (nominal height) in 26.6 fractional pixels. + * + * @note: + * Windows FNT: + * The nominal size given in a FNT font is not reliable. If the driver + * finds it incorrect, it sets `size` to some calculated values, and + * `x_ppem` and `y_ppem` to the pixel width and height given in the + * font, respectively. + * + * TrueType embedded bitmaps: + * `size`, `width`, and `height` values are not contained in the bitmap + * strike itself. They are computed from the global font parameters. + */ + typedef struct FT_Bitmap_Size_ + { + FT_Short height; + FT_Short width; + + FT_Pos size; + + FT_Pos x_ppem; + FT_Pos y_ppem; + + } FT_Bitmap_Size; + + + /*************************************************************************/ + /*************************************************************************/ + /* */ + /* O B J E C T C L A S S E S */ + /* */ + /*************************************************************************/ + /*************************************************************************/ + + /************************************************************************** + * + * @section: + * library_setup + * + */ + + /************************************************************************** + * + * @type: + * FT_Library + * + * @description: + * A handle to a FreeType library instance. Each 'library' is completely + * independent from the others; it is the 'root' of a set of objects like + * fonts, faces, sizes, etc. + * + * It also embeds a memory manager (see @FT_Memory), as well as a + * scan-line converter object (see @FT_Raster). + * + * [Since 2.5.6] In multi-threaded applications it is easiest to use one + * `FT_Library` object per thread. In case this is too cumbersome, a + * single `FT_Library` object across threads is possible also, as long as + * a mutex lock is used around @FT_New_Face and @FT_Done_Face. + * + * @note: + * Library objects are normally created by @FT_Init_FreeType, and + * destroyed with @FT_Done_FreeType. If you need reference-counting + * (cf. @FT_Reference_Library), use @FT_New_Library and @FT_Done_Library. + */ + typedef struct FT_LibraryRec_ *FT_Library; + + + /************************************************************************** + * + * @section: + * module_management + * + */ + + /************************************************************************** + * + * @type: + * FT_Module + * + * @description: + * A handle to a given FreeType module object. A module can be a font + * driver, a renderer, or anything else that provides services to the + * former. + */ + typedef struct FT_ModuleRec_* FT_Module; + + + /************************************************************************** + * + * @type: + * FT_Driver + * + * @description: + * A handle to a given FreeType font driver object. A font driver is a + * module capable of creating faces from font files. + */ + typedef struct FT_DriverRec_* FT_Driver; + + + /************************************************************************** + * + * @type: + * FT_Renderer + * + * @description: + * A handle to a given FreeType renderer. A renderer is a module in + * charge of converting a glyph's outline image to a bitmap. It supports + * a single glyph image format, and one or more target surface depths. + */ + typedef struct FT_RendererRec_* FT_Renderer; + + + /************************************************************************** + * + * @section: + * face_creation + * + */ + + /************************************************************************** + * + * @type: + * FT_Face + * + * @description: + * A handle to a typographic face object. A face object models a given + * typeface, in a given style. + * + * @note: + * A face object also owns a single @FT_GlyphSlot object, as well as one + * or more @FT_Size objects. + * + * Use @FT_New_Face or @FT_Open_Face to create a new face object from a + * given filepath or a custom input stream. + * + * Use @FT_Done_Face to destroy it (along with its slot and sizes). + * + * An `FT_Face` object can only be safely used from one thread at a time. + * Similarly, creation and destruction of `FT_Face` with the same + * @FT_Library object can only be done from one thread at a time. On the + * other hand, functions like @FT_Load_Glyph and its siblings are + * thread-safe and do not need the lock to be held as long as the same + * `FT_Face` object is not used from multiple threads at the same time. + * + * @also: + * See @FT_FaceRec for the publicly accessible fields of a given face + * object. + */ + typedef struct FT_FaceRec_* FT_Face; + + + /************************************************************************** + * + * @section: + * sizing_and_scaling + * + */ + + /************************************************************************** + * + * @type: + * FT_Size + * + * @description: + * A handle to an object that models a face scaled to a given character + * size. + * + * @note: + * An @FT_Face has one _active_ `FT_Size` object that is used by + * functions like @FT_Load_Glyph to determine the scaling transformation + * that in turn is used to load and hint glyphs and metrics. + * + * A newly created `FT_Size` object contains only meaningless zero values. + * You must use @FT_Set_Char_Size, @FT_Set_Pixel_Sizes, @FT_Request_Size + * or even @FT_Select_Size to change the content (i.e., the scaling + * values) of the active `FT_Size`. Otherwise, the scaling and hinting + * will not be performed. + * + * You can use @FT_New_Size to create additional size objects for a given + * @FT_Face, but they won't be used by other functions until you activate + * it through @FT_Activate_Size. Only one size can be activated at any + * given time per face. + * + * @also: + * See @FT_SizeRec for the publicly accessible fields of a given size + * object. + */ + typedef struct FT_SizeRec_* FT_Size; + + + /************************************************************************** + * + * @section: + * glyph_retrieval + * + */ + + /************************************************************************** + * + * @type: + * FT_GlyphSlot + * + * @description: + * A handle to a given 'glyph slot'. A slot is a container that can hold + * any of the glyphs contained in its parent face. + * + * In other words, each time you call @FT_Load_Glyph or @FT_Load_Char, + * the slot's content is erased by the new glyph data, i.e., the glyph's + * metrics, its image (bitmap or outline), and other control information. + * + * @also: + * See @FT_GlyphSlotRec for the publicly accessible glyph fields. + */ + typedef struct FT_GlyphSlotRec_* FT_GlyphSlot; + + + /************************************************************************** + * + * @section: + * character_mapping + * + */ + + /************************************************************************** + * + * @type: + * FT_CharMap + * + * @description: + * A handle to a character map (usually abbreviated to 'charmap'). A + * charmap is used to translate character codes in a given encoding into + * glyph indexes for its parent's face. Some font formats may provide + * several charmaps per font. + * + * Each face object owns zero or more charmaps, but only one of them can + * be 'active', providing the data used by @FT_Get_Char_Index or + * @FT_Load_Char. + * + * The list of available charmaps in a face is available through the + * `face->num_charmaps` and `face->charmaps` fields of @FT_FaceRec. + * + * The currently active charmap is available as `face->charmap`. You + * should call @FT_Set_Charmap to change it. + * + * @note: + * When a new face is created (either through @FT_New_Face or + * @FT_Open_Face), the library looks for a Unicode charmap within the + * list and automatically activates it. If there is no Unicode charmap, + * FreeType doesn't set an 'active' charmap. + * + * @also: + * See @FT_CharMapRec for the publicly accessible fields of a given + * character map. + */ + typedef struct FT_CharMapRec_* FT_CharMap; + + + /************************************************************************** + * + * @macro: + * FT_ENC_TAG + * + * @description: + * This macro converts four-letter tags into an unsigned long. It is + * used to define 'encoding' identifiers (see @FT_Encoding). + * + * @note: + * Since many 16-bit compilers don't like 32-bit enumerations, you should + * redefine this macro in case of problems to something like this: + * + * ``` + * #define FT_ENC_TAG( value, a, b, c, d ) value + * ``` + * + * to get a simple enumeration without assigning special numbers. + */ + +#ifndef FT_ENC_TAG + +#define FT_ENC_TAG( value, a, b, c, d ) \ + value = ( ( FT_STATIC_BYTE_CAST( FT_UInt32, a ) << 24 ) | \ + ( FT_STATIC_BYTE_CAST( FT_UInt32, b ) << 16 ) | \ + ( FT_STATIC_BYTE_CAST( FT_UInt32, c ) << 8 ) | \ + FT_STATIC_BYTE_CAST( FT_UInt32, d ) ) + +#endif /* FT_ENC_TAG */ + + + /************************************************************************** + * + * @enum: + * FT_Encoding + * + * @description: + * An enumeration to specify character sets supported by charmaps. Used + * in the @FT_Select_Charmap API function. + * + * @note: + * Despite the name, this enumeration lists specific character + * repertoires (i.e., charsets), and not text encoding methods (e.g., + * UTF-8, UTF-16, etc.). + * + * Other encodings might be defined in the future. + * + * @values: + * FT_ENCODING_NONE :: + * The encoding value~0 is reserved for all formats except BDF, PCF, + * and Windows FNT; see below for more information. + * + * FT_ENCODING_UNICODE :: + * The Unicode character set. This value covers all versions of the + * Unicode repertoire, including ASCII and Latin-1. Most fonts include + * a Unicode charmap, but not all of them. + * + * For example, if you want to access Unicode value U+1F028 (and the + * font contains it), use value 0x1F028 as the input value for + * @FT_Get_Char_Index. + * + * FT_ENCODING_MS_SYMBOL :: + * Microsoft Symbol encoding, used to encode mathematical symbols and + * wingdings. For more information, see + * 'https://learn.microsoft.com/typography/opentype/spec/recom#non-standard-symbol-fonts', + * 'http://www.kostis.net/charsets/symbol.htm', and + * 'http://www.kostis.net/charsets/wingding.htm'. + * + * This encoding uses character codes from the PUA (Private Unicode + * Area) in the range U+F020-U+F0FF. + * + * FT_ENCODING_SJIS :: + * Shift JIS encoding for Japanese. More info at + * 'https://en.wikipedia.org/wiki/Shift_JIS'. See note on multi-byte + * encodings below. + * + * FT_ENCODING_PRC :: + * Corresponds to encoding systems mainly for Simplified Chinese as + * used in People's Republic of China (PRC). The encoding layout is + * based on GB~2312 and its supersets GBK and GB~18030. + * + * FT_ENCODING_BIG5 :: + * Corresponds to an encoding system for Traditional Chinese as used in + * Taiwan and Hong Kong. + * + * FT_ENCODING_WANSUNG :: + * Corresponds to the Korean encoding system known as Extended Wansung + * (MS Windows code page 949). For more information see + * 'https://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WindowsBestFit/bestfit949.txt'. + * + * FT_ENCODING_JOHAB :: + * The Korean standard character set (KS~C 5601-1992), which + * corresponds to MS Windows code page 1361. This character set + * includes all possible Hangul character combinations. + * + * FT_ENCODING_ADOBE_LATIN_1 :: + * Corresponds to a Latin-1 encoding as defined in a Type~1 PostScript + * font. It is limited to 256 character codes. + * + * FT_ENCODING_ADOBE_STANDARD :: + * Adobe Standard encoding, as found in Type~1, CFF, and OpenType/CFF + * fonts. It is limited to 256 character codes. + * + * FT_ENCODING_ADOBE_EXPERT :: + * Adobe Expert encoding, as found in Type~1, CFF, and OpenType/CFF + * fonts. It is limited to 256 character codes. + * + * FT_ENCODING_ADOBE_CUSTOM :: + * Corresponds to a custom encoding, as found in Type~1, CFF, and + * OpenType/CFF fonts. It is limited to 256 character codes. + * + * FT_ENCODING_APPLE_ROMAN :: + * Apple roman encoding. Many TrueType and OpenType fonts contain a + * charmap for this 8-bit encoding, since older versions of Mac OS are + * able to use it. + * + * FT_ENCODING_OLD_LATIN_2 :: + * This value is deprecated and was neither used nor reported by + * FreeType. Don't use or test for it. + * + * FT_ENCODING_MS_SJIS :: + * Same as FT_ENCODING_SJIS. Deprecated. + * + * FT_ENCODING_MS_GB2312 :: + * Same as FT_ENCODING_PRC. Deprecated. + * + * FT_ENCODING_MS_BIG5 :: + * Same as FT_ENCODING_BIG5. Deprecated. + * + * FT_ENCODING_MS_WANSUNG :: + * Same as FT_ENCODING_WANSUNG. Deprecated. + * + * FT_ENCODING_MS_JOHAB :: + * Same as FT_ENCODING_JOHAB. Deprecated. + * + * @note: + * When loading a font, FreeType makes a Unicode charmap active if + * possible (either if the font provides such a charmap, or if FreeType + * can synthesize one from PostScript glyph name dictionaries; in either + * case, the charmap is tagged with `FT_ENCODING_UNICODE`). If such a + * charmap is synthesized, it is placed at the first position of the + * charmap array. + * + * All other encodings are considered legacy and tagged only if + * explicitly defined in the font file. Otherwise, `FT_ENCODING_NONE` is + * used. + * + * `FT_ENCODING_NONE` is set by the BDF and PCF drivers if the charmap is + * neither Unicode nor ISO-8859-1 (otherwise it is set to + * `FT_ENCODING_UNICODE`). Use @FT_Get_BDF_Charset_ID to find out which + * encoding is really present. If, for example, the `cs_registry` field + * is 'KOI8' and the `cs_encoding` field is 'R', the font is encoded in + * KOI8-R. + * + * `FT_ENCODING_NONE` is always set (with a single exception) by the + * winfonts driver. Use @FT_Get_WinFNT_Header and examine the `charset` + * field of the @FT_WinFNT_HeaderRec structure to find out which encoding + * is really present. For example, @FT_WinFNT_ID_CP1251 (204) means + * Windows code page 1251 (for Russian). + * + * `FT_ENCODING_NONE` is set if `platform_id` is @TT_PLATFORM_MACINTOSH + * and `encoding_id` is not `TT_MAC_ID_ROMAN` (otherwise it is set to + * `FT_ENCODING_APPLE_ROMAN`). + * + * If `platform_id` is @TT_PLATFORM_MACINTOSH, use the function + * @FT_Get_CMap_Language_ID to query the Mac language ID that may be + * needed to be able to distinguish Apple encoding variants. See + * + * https://www.unicode.org/Public/MAPPINGS/VENDORS/APPLE/Readme.txt + * + * to get an idea how to do that. Basically, if the language ID is~0, + * don't use it, otherwise subtract 1 from the language ID. Then examine + * `encoding_id`. If, for example, `encoding_id` is `TT_MAC_ID_ROMAN` + * and the language ID (minus~1) is `TT_MAC_LANGID_GREEK`, it is the + * Greek encoding, not Roman. `TT_MAC_ID_ARABIC` with + * `TT_MAC_LANGID_FARSI` means the Farsi variant of the Arabic encoding. + */ + typedef enum FT_Encoding_ + { + FT_ENC_TAG( FT_ENCODING_NONE, 0, 0, 0, 0 ), + + FT_ENC_TAG( FT_ENCODING_MS_SYMBOL, 's', 'y', 'm', 'b' ), + FT_ENC_TAG( FT_ENCODING_UNICODE, 'u', 'n', 'i', 'c' ), + + FT_ENC_TAG( FT_ENCODING_SJIS, 's', 'j', 'i', 's' ), + FT_ENC_TAG( FT_ENCODING_PRC, 'g', 'b', ' ', ' ' ), + FT_ENC_TAG( FT_ENCODING_BIG5, 'b', 'i', 'g', '5' ), + FT_ENC_TAG( FT_ENCODING_WANSUNG, 'w', 'a', 'n', 's' ), + FT_ENC_TAG( FT_ENCODING_JOHAB, 'j', 'o', 'h', 'a' ), + + /* for backward compatibility */ + FT_ENCODING_GB2312 = FT_ENCODING_PRC, + FT_ENCODING_MS_SJIS = FT_ENCODING_SJIS, + FT_ENCODING_MS_GB2312 = FT_ENCODING_PRC, + FT_ENCODING_MS_BIG5 = FT_ENCODING_BIG5, + FT_ENCODING_MS_WANSUNG = FT_ENCODING_WANSUNG, + FT_ENCODING_MS_JOHAB = FT_ENCODING_JOHAB, + + FT_ENC_TAG( FT_ENCODING_ADOBE_STANDARD, 'A', 'D', 'O', 'B' ), + FT_ENC_TAG( FT_ENCODING_ADOBE_EXPERT, 'A', 'D', 'B', 'E' ), + FT_ENC_TAG( FT_ENCODING_ADOBE_CUSTOM, 'A', 'D', 'B', 'C' ), + FT_ENC_TAG( FT_ENCODING_ADOBE_LATIN_1, 'l', 'a', 't', '1' ), + + FT_ENC_TAG( FT_ENCODING_OLD_LATIN_2, 'l', 'a', 't', '2' ), + + FT_ENC_TAG( FT_ENCODING_APPLE_ROMAN, 'a', 'r', 'm', 'n' ) + + } FT_Encoding; + + + /* these constants are deprecated; use the corresponding `FT_Encoding` */ + /* values instead */ +#define ft_encoding_none FT_ENCODING_NONE +#define ft_encoding_unicode FT_ENCODING_UNICODE +#define ft_encoding_symbol FT_ENCODING_MS_SYMBOL +#define ft_encoding_latin_1 FT_ENCODING_ADOBE_LATIN_1 +#define ft_encoding_latin_2 FT_ENCODING_OLD_LATIN_2 +#define ft_encoding_sjis FT_ENCODING_SJIS +#define ft_encoding_gb2312 FT_ENCODING_PRC +#define ft_encoding_big5 FT_ENCODING_BIG5 +#define ft_encoding_wansung FT_ENCODING_WANSUNG +#define ft_encoding_johab FT_ENCODING_JOHAB + +#define ft_encoding_adobe_standard FT_ENCODING_ADOBE_STANDARD +#define ft_encoding_adobe_expert FT_ENCODING_ADOBE_EXPERT +#define ft_encoding_adobe_custom FT_ENCODING_ADOBE_CUSTOM +#define ft_encoding_apple_roman FT_ENCODING_APPLE_ROMAN + + + /************************************************************************** + * + * @struct: + * FT_CharMapRec + * + * @description: + * The base charmap structure. + * + * @fields: + * face :: + * A handle to the parent face object. + * + * encoding :: + * An @FT_Encoding tag identifying the charmap. Use this with + * @FT_Select_Charmap. + * + * platform_id :: + * An ID number describing the platform for the following encoding ID. + * This comes directly from the TrueType specification and gets + * emulated for other formats. + * + * encoding_id :: + * A platform-specific encoding number. This also comes from the + * TrueType specification and gets emulated similarly. + */ + typedef struct FT_CharMapRec_ + { + FT_Face face; + FT_Encoding encoding; + FT_UShort platform_id; + FT_UShort encoding_id; + + } FT_CharMapRec; + + + /*************************************************************************/ + /*************************************************************************/ + /* */ + /* B A S E O B J E C T C L A S S E S */ + /* */ + /*************************************************************************/ + /*************************************************************************/ + + + /************************************************************************** + * + * @section: + * other_api_data + * + */ + + /************************************************************************** + * + * @type: + * FT_Face_Internal + * + * @description: + * An opaque handle to an `FT_Face_InternalRec` structure that models the + * private data of a given @FT_Face object. + * + * This structure might change between releases of FreeType~2 and is not + * generally available to client applications. + */ + typedef struct FT_Face_InternalRec_* FT_Face_Internal; + + + /************************************************************************** + * + * @section: + * face_creation + * + */ + + /************************************************************************** + * + * @struct: + * FT_FaceRec + * + * @description: + * FreeType root face class structure. A face object models a typeface + * in a font file. + * + * @fields: + * num_faces :: + * The number of faces in the font file. Some font formats can have + * multiple faces in a single font file. + * + * face_index :: + * This field holds two different values. Bits 0-15 are the index of + * the face in the font file (starting with value~0). They are set + * to~0 if there is only one face in the font file. + * + * [Since 2.6.1] Bits 16-30 are relevant to TrueType GX and OpenType + * Font Variations only, holding the named instance index for the + * current face index (starting with value~1; value~0 indicates font + * access without a named instance). For non-variation fonts, bits + * 16-30 are ignored. If we have the third named instance of face~4, + * say, `face_index` is set to 0x00030004. + * + * Bit 31 is always zero (that is, `face_index` is always a positive + * value). + * + * [Since 2.9] Changing the design coordinates with + * @FT_Set_Var_Design_Coordinates or @FT_Set_Var_Blend_Coordinates does + * not influence the named instance index value (only + * @FT_Set_Named_Instance does that). + * + * face_flags :: + * A set of bit flags that give important information about the face; + * see @FT_FACE_FLAG_XXX for the details. + * + * style_flags :: + * The lower 16~bits contain a set of bit flags indicating the style of + * the face; see @FT_STYLE_FLAG_XXX for the details. + * + * [Since 2.6.1] Bits 16-30 hold the number of named instances + * available for the current face if we have a TrueType GX or OpenType + * Font Variation. Bit 31 is always zero (that is, `style_flags` is + * always a positive value). Note that a variation font has always at + * least one named instance, namely the default instance. + * + * num_glyphs :: + * The number of glyphs in the face. If the face is scalable and has + * sbits (see `num_fixed_sizes`), it is set to the number of outline + * glyphs. + * + * For CID-keyed fonts (not in an SFNT wrapper) this value gives the + * highest CID used in the font. + * + * family_name :: + * The face's family name. This is an ASCII string, usually in + * English, that describes the typeface's family (like 'Times New + * Roman', 'Bodoni', 'Garamond', etc). This is a least common + * denominator used to list fonts. Some formats (TrueType & OpenType) + * provide localized and Unicode versions of this string. Applications + * should use the format-specific interface to access them. Can be + * `NULL` (e.g., in fonts embedded in a PDF file). + * + * In case the font doesn't provide a specific family name entry, + * FreeType tries to synthesize one, deriving it from other name + * entries. + * + * style_name :: + * The face's style name. This is an ASCII string, usually in English, + * that describes the typeface's style (like 'Italic', 'Bold', + * 'Condensed', etc). Not all font formats provide a style name, so + * this field is optional, and can be set to `NULL`. As for + * `family_name`, some formats provide localized and Unicode versions + * of this string. Applications should use the format-specific + * interface to access them. + * + * num_fixed_sizes :: + * The number of bitmap strikes in the face. Even if the face is + * scalable, there might still be bitmap strikes, which are called + * 'sbits' in that case. + * + * available_sizes :: + * An array of @FT_Bitmap_Size for all bitmap strikes in the face. It + * is set to `NULL` if there is no bitmap strike. + * + * Note that FreeType tries to sanitize the strike data since they are + * sometimes sloppy or incorrect, but this can easily fail. + * + * num_charmaps :: + * The number of charmaps in the face. + * + * charmaps :: + * An array of the charmaps of the face. + * + * generic :: + * A field reserved for client uses. See the @FT_Generic type + * description. + * + * bbox :: + * The font bounding box. Coordinates are expressed in font units (see + * `units_per_EM`). The box is large enough to contain any glyph from + * the font. Thus, `bbox.yMax` can be seen as the 'maximum ascender', + * and `bbox.yMin` as the 'minimum descender'. Only relevant for + * scalable formats. + * + * Note that the bounding box might be off by (at least) one pixel for + * hinted fonts. See @FT_Size_Metrics for further discussion. + * + * Note that the bounding box does not vary in OpenType Font Variations + * and should only be used in relation to the default instance. + * + * units_per_EM :: + * The number of font units per EM square for this face. This is + * typically 2048 for TrueType fonts, and 1000 for Type~1 fonts. Only + * relevant for scalable formats. + * + * ascender :: + * The typographic ascender of the face, expressed in font units. For + * font formats not having this information, it is set to `bbox.yMax`. + * Only relevant for scalable formats. + * + * descender :: + * The typographic descender of the face, expressed in font units. For + * font formats not having this information, it is set to `bbox.yMin`. + * Note that this field is negative for values below the baseline. + * Only relevant for scalable formats. + * + * height :: + * This value is the vertical distance between two consecutive + * baselines, expressed in font units. It is always positive. Only + * relevant for scalable formats. + * + * If you want the global glyph height, use `ascender - descender`. + * + * max_advance_width :: + * The maximum advance width, in font units, for all glyphs in this + * face. This can be used to make word wrapping computations faster. + * Only relevant for scalable formats. + * + * max_advance_height :: + * The maximum advance height, in font units, for all glyphs in this + * face. This is only relevant for vertical layouts, and is set to + * `height` for fonts that do not provide vertical metrics. Only + * relevant for scalable formats. + * + * underline_position :: + * The position, in font units, of the underline line for this face. + * It is the center of the underlining stem. Only relevant for + * scalable formats. + * + * underline_thickness :: + * The thickness, in font units, of the underline for this face. Only + * relevant for scalable formats. + * + * glyph :: + * The face's associated glyph slot(s). + * + * size :: + * The current active size for this face. + * + * charmap :: + * The current active charmap for this face. + * + * @note: + * Fields may be changed after a call to @FT_Attach_File or + * @FT_Attach_Stream. + * + * For OpenType Font Variations, the values of the following fields can + * change after a call to @FT_Set_Var_Design_Coordinates (and friends) if + * the font contains an 'MVAR' table: `ascender`, `descender`, `height`, + * `underline_position`, and `underline_thickness`. + * + * Especially for TrueType fonts see also the documentation for + * @FT_Size_Metrics. + */ + typedef struct FT_FaceRec_ + { + FT_Long num_faces; + FT_Long face_index; + + FT_Long face_flags; + FT_Long style_flags; + + FT_Long num_glyphs; + + FT_String* family_name; + FT_String* style_name; + + FT_Int num_fixed_sizes; + FT_Bitmap_Size* available_sizes; + + FT_Int num_charmaps; + FT_CharMap* charmaps; + + FT_Generic generic; + + /* The following member variables (down to `underline_thickness`) */ + /* are only relevant to scalable outlines; cf. @FT_Bitmap_Size */ + /* for bitmap fonts. */ + FT_BBox bbox; + + FT_UShort units_per_EM; + FT_Short ascender; + FT_Short descender; + FT_Short height; + + FT_Short max_advance_width; + FT_Short max_advance_height; + + FT_Short underline_position; + FT_Short underline_thickness; + + FT_GlyphSlot glyph; + FT_Size size; + FT_CharMap charmap; + + /* private fields, internal to FreeType */ + + FT_Driver driver; + FT_Memory memory; + FT_Stream stream; + + FT_ListRec sizes_list; + + FT_Generic autohint; /* face-specific auto-hinter data */ + void* extensions; /* unused */ + + FT_Face_Internal internal; + + } FT_FaceRec; + + + /************************************************************************** + * + * @enum: + * FT_FACE_FLAG_XXX + * + * @description: + * A list of bit flags used in the `face_flags` field of the @FT_FaceRec + * structure. They inform client applications of properties of the + * corresponding face. + * + * @values: + * FT_FACE_FLAG_SCALABLE :: + * The face contains outline glyphs. Note that a face can contain + * bitmap strikes also, i.e., a face can have both this flag and + * @FT_FACE_FLAG_FIXED_SIZES set. + * + * FT_FACE_FLAG_FIXED_SIZES :: + * The face contains bitmap strikes. See also the `num_fixed_sizes` + * and `available_sizes` fields of @FT_FaceRec. + * + * FT_FACE_FLAG_FIXED_WIDTH :: + * The face contains fixed-width characters (like Courier, Lucida, + * MonoType, etc.). + * + * FT_FACE_FLAG_SFNT :: + * The face uses the SFNT storage scheme. For now, this means TrueType + * and OpenType. + * + * FT_FACE_FLAG_HORIZONTAL :: + * The face contains horizontal glyph metrics. This should be set for + * all common formats. + * + * FT_FACE_FLAG_VERTICAL :: + * The face contains vertical glyph metrics. This is only available in + * some formats, not all of them. + * + * FT_FACE_FLAG_KERNING :: + * The face contains kerning information. If set, the kerning distance + * can be retrieved using the function @FT_Get_Kerning. Otherwise the + * function always returns the vector (0,0). + * + * Note that for TrueType fonts only, FreeType supports both the 'kern' + * table and the basic, pair-wise kerning feature from the 'GPOS' table + * (with `TT_CONFIG_OPTION_GPOS_KERNING` enabled), though FreeType does + * not support the more advanced GPOS layout features; use a library + * like HarfBuzz for those instead. + * + * FT_FACE_FLAG_FAST_GLYPHS :: + * THIS FLAG IS DEPRECATED. DO NOT USE OR TEST IT. + * + * FT_FACE_FLAG_MULTIPLE_MASTERS :: + * The face contains multiple masters and is capable of interpolating + * between them. Supported formats are Adobe MM, TrueType GX, and + * OpenType Font Variations. + * + * See section @multiple_masters for API details. + * + * FT_FACE_FLAG_GLYPH_NAMES :: + * The face contains glyph names, which can be retrieved using + * @FT_Get_Glyph_Name. Note that some TrueType fonts contain broken + * glyph name tables. Use the function @FT_Has_PS_Glyph_Names when + * needed. + * + * FT_FACE_FLAG_EXTERNAL_STREAM :: + * Used internally by FreeType to indicate that a face's stream was + * provided by the client application and should not be destroyed when + * @FT_Done_Face is called. Don't read or test this flag. + * + * FT_FACE_FLAG_HINTER :: + * The font driver has a hinting machine of its own. For example, with + * TrueType fonts, it makes sense to use data from the SFNT 'gasp' + * table only if the native TrueType hinting engine (with the bytecode + * interpreter) is available and active. + * + * FT_FACE_FLAG_CID_KEYED :: + * The face is CID-keyed. In that case, the face is not accessed by + * glyph indices but by CID values. For subsetted CID-keyed fonts this + * has the consequence that not all index values are a valid argument + * to @FT_Load_Glyph. Only the CID values for which corresponding + * glyphs in the subsetted font exist make `FT_Load_Glyph` return + * successfully; in all other cases you get an + * `FT_Err_Invalid_Argument` error. + * + * Note that CID-keyed fonts that are in an SFNT wrapper (that is, all + * OpenType/CFF fonts) don't have this flag set since the glyphs are + * accessed in the normal way (using contiguous indices); the + * 'CID-ness' isn't visible to the application. + * + * FT_FACE_FLAG_TRICKY :: + * The face is 'tricky', that is, it always needs the font format's + * native hinting engine to get a reasonable result. A typical example + * is the old Chinese font `mingli.ttf` (but not `mingliu.ttc`) that + * uses TrueType bytecode instructions to move and scale all of its + * subglyphs. + * + * It is not possible to auto-hint such fonts using + * @FT_LOAD_FORCE_AUTOHINT; it will also ignore @FT_LOAD_NO_HINTING. + * You have to set both @FT_LOAD_NO_HINTING and @FT_LOAD_NO_AUTOHINT to + * really disable hinting; however, you probably never want this except + * for demonstration purposes. + * + * Currently, there are about a dozen TrueType fonts in the list of + * tricky fonts; they are hard-coded in file `ttobjs.c`. + * + * FT_FACE_FLAG_COLOR :: + * [Since 2.5.1] The face has color glyph tables. See @FT_LOAD_COLOR + * for more information. + * + * FT_FACE_FLAG_VARIATION :: + * [Since 2.9] Set if the current face (or named instance) has been + * altered with @FT_Set_MM_Design_Coordinates, + * @FT_Set_Var_Design_Coordinates, @FT_Set_Var_Blend_Coordinates, or + * @FT_Set_MM_WeightVector to select a non-default instance. + * + * FT_FACE_FLAG_SVG :: + * [Since 2.12] The face has an 'SVG~' OpenType table. + * + * FT_FACE_FLAG_SBIX :: + * [Since 2.12] The face has an 'sbix' OpenType table *and* outlines. + * For such fonts, @FT_FACE_FLAG_SCALABLE is not set by default to + * retain backward compatibility. + * + * FT_FACE_FLAG_SBIX_OVERLAY :: + * [Since 2.12] The face has an 'sbix' OpenType table where outlines + * should be drawn on top of bitmap strikes. + * + */ +#define FT_FACE_FLAG_SCALABLE ( 1L << 0 ) +#define FT_FACE_FLAG_FIXED_SIZES ( 1L << 1 ) +#define FT_FACE_FLAG_FIXED_WIDTH ( 1L << 2 ) +#define FT_FACE_FLAG_SFNT ( 1L << 3 ) +#define FT_FACE_FLAG_HORIZONTAL ( 1L << 4 ) +#define FT_FACE_FLAG_VERTICAL ( 1L << 5 ) +#define FT_FACE_FLAG_KERNING ( 1L << 6 ) +#define FT_FACE_FLAG_FAST_GLYPHS ( 1L << 7 ) +#define FT_FACE_FLAG_MULTIPLE_MASTERS ( 1L << 8 ) +#define FT_FACE_FLAG_GLYPH_NAMES ( 1L << 9 ) +#define FT_FACE_FLAG_EXTERNAL_STREAM ( 1L << 10 ) +#define FT_FACE_FLAG_HINTER ( 1L << 11 ) +#define FT_FACE_FLAG_CID_KEYED ( 1L << 12 ) +#define FT_FACE_FLAG_TRICKY ( 1L << 13 ) +#define FT_FACE_FLAG_COLOR ( 1L << 14 ) +#define FT_FACE_FLAG_VARIATION ( 1L << 15 ) +#define FT_FACE_FLAG_SVG ( 1L << 16 ) +#define FT_FACE_FLAG_SBIX ( 1L << 17 ) +#define FT_FACE_FLAG_SBIX_OVERLAY ( 1L << 18 ) + + + /************************************************************************** + * + * @section: + * font_testing_macros + * + */ + + /************************************************************************** + * + * @macro: + * FT_HAS_HORIZONTAL + * + * @description: + * A macro that returns true whenever a face object contains horizontal + * metrics (this is true for all font formats though). + * + * @also: + * @FT_HAS_VERTICAL can be used to check for vertical metrics. + * + */ +#define FT_HAS_HORIZONTAL( face ) \ + ( !!( (face)->face_flags & FT_FACE_FLAG_HORIZONTAL ) ) + + + /************************************************************************** + * + * @macro: + * FT_HAS_VERTICAL + * + * @description: + * A macro that returns true whenever a face object contains real + * vertical metrics (and not only synthesized ones). + * + */ +#define FT_HAS_VERTICAL( face ) \ + ( !!( (face)->face_flags & FT_FACE_FLAG_VERTICAL ) ) + + + /************************************************************************** + * + * @macro: + * FT_HAS_KERNING + * + * @description: + * A macro that returns true whenever a face object contains kerning data + * that can be accessed with @FT_Get_Kerning. + * + */ +#define FT_HAS_KERNING( face ) \ + ( !!( (face)->face_flags & FT_FACE_FLAG_KERNING ) ) + + + /************************************************************************** + * + * @macro: + * FT_IS_SCALABLE + * + * @description: + * A macro that returns true whenever a face object contains a scalable + * font face (true for TrueType, Type~1, Type~42, CID, OpenType/CFF, and + * PFR font formats). + * + */ +#define FT_IS_SCALABLE( face ) \ + ( !!( (face)->face_flags & FT_FACE_FLAG_SCALABLE ) ) + + + /************************************************************************** + * + * @macro: + * FT_IS_SFNT + * + * @description: + * A macro that returns true whenever a face object contains a font whose + * format is based on the SFNT storage scheme. This usually means: + * TrueType fonts, OpenType fonts, as well as SFNT-based embedded bitmap + * fonts. + * + * If this macro is true, all functions defined in @FT_SFNT_NAMES_H and + * @FT_TRUETYPE_TABLES_H are available. + * + */ +#define FT_IS_SFNT( face ) \ + ( !!( (face)->face_flags & FT_FACE_FLAG_SFNT ) ) + + + /************************************************************************** + * + * @macro: + * FT_IS_FIXED_WIDTH + * + * @description: + * A macro that returns true whenever a face object contains a font face + * that contains fixed-width (or 'monospace', 'fixed-pitch', etc.) + * glyphs. + * + */ +#define FT_IS_FIXED_WIDTH( face ) \ + ( !!( (face)->face_flags & FT_FACE_FLAG_FIXED_WIDTH ) ) + + + /************************************************************************** + * + * @macro: + * FT_HAS_FIXED_SIZES + * + * @description: + * A macro that returns true whenever a face object contains some + * embedded bitmaps. See the `available_sizes` field of the @FT_FaceRec + * structure. + * + */ +#define FT_HAS_FIXED_SIZES( face ) \ + ( !!( (face)->face_flags & FT_FACE_FLAG_FIXED_SIZES ) ) + + + /************************************************************************** + * + * @section: + * other_api_data + * + */ + + /************************************************************************** + * + * @macro: + * FT_HAS_FAST_GLYPHS + * + * @description: + * Deprecated. + * + */ +#define FT_HAS_FAST_GLYPHS( face ) 0 + + + /************************************************************************** + * + * @section: + * font_testing_macros + * + */ + + /************************************************************************** + * + * @macro: + * FT_HAS_GLYPH_NAMES + * + * @description: + * A macro that returns true whenever a face object contains some glyph + * names that can be accessed through @FT_Get_Glyph_Name. + * + */ +#define FT_HAS_GLYPH_NAMES( face ) \ + ( !!( (face)->face_flags & FT_FACE_FLAG_GLYPH_NAMES ) ) + + + /************************************************************************** + * + * @macro: + * FT_HAS_MULTIPLE_MASTERS + * + * @description: + * A macro that returns true whenever a face object contains some + * multiple masters. The functions provided by @FT_MULTIPLE_MASTERS_H + * are then available to choose the exact design you want. + * + */ +#define FT_HAS_MULTIPLE_MASTERS( face ) \ + ( !!( (face)->face_flags & FT_FACE_FLAG_MULTIPLE_MASTERS ) ) + + + /************************************************************************** + * + * @macro: + * FT_IS_NAMED_INSTANCE + * + * @description: + * A macro that returns true whenever a face object is a named instance + * of a TrueType GX or OpenType Font Variations. + * + * [Since 2.9] Changing the design coordinates with + * @FT_Set_Var_Design_Coordinates or @FT_Set_Var_Blend_Coordinates does + * not influence the return value of this macro (only + * @FT_Set_Named_Instance does that). + * + * @since: + * 2.7 + * + */ +#define FT_IS_NAMED_INSTANCE( face ) \ + ( !!( (face)->face_index & 0x7FFF0000L ) ) + + + /************************************************************************** + * + * @macro: + * FT_IS_VARIATION + * + * @description: + * A macro that returns true whenever a face object has been altered by + * @FT_Set_MM_Design_Coordinates, @FT_Set_Var_Design_Coordinates, + * @FT_Set_Var_Blend_Coordinates, or @FT_Set_MM_WeightVector. + * + * @since: + * 2.9 + * + */ +#define FT_IS_VARIATION( face ) \ + ( !!( (face)->face_flags & FT_FACE_FLAG_VARIATION ) ) + + + /************************************************************************** + * + * @macro: + * FT_IS_CID_KEYED + * + * @description: + * A macro that returns true whenever a face object contains a CID-keyed + * font. See the discussion of @FT_FACE_FLAG_CID_KEYED for more details. + * + * If this macro is true, all functions defined in @FT_CID_H are + * available. + * + */ +#define FT_IS_CID_KEYED( face ) \ + ( !!( (face)->face_flags & FT_FACE_FLAG_CID_KEYED ) ) + + + /************************************************************************** + * + * @macro: + * FT_IS_TRICKY + * + * @description: + * A macro that returns true whenever a face represents a 'tricky' font. + * See the discussion of @FT_FACE_FLAG_TRICKY for more details. + * + */ +#define FT_IS_TRICKY( face ) \ + ( !!( (face)->face_flags & FT_FACE_FLAG_TRICKY ) ) + + + /************************************************************************** + * + * @macro: + * FT_HAS_COLOR + * + * @description: + * A macro that returns true whenever a face object contains tables for + * color glyphs. + * + * @since: + * 2.5.1 + * + */ +#define FT_HAS_COLOR( face ) \ + ( !!( (face)->face_flags & FT_FACE_FLAG_COLOR ) ) + + + /************************************************************************** + * + * @macro: + * FT_HAS_SVG + * + * @description: + * A macro that returns true whenever a face object contains an 'SVG~' + * OpenType table. + * + * @since: + * 2.12 + */ +#define FT_HAS_SVG( face ) \ + ( !!( (face)->face_flags & FT_FACE_FLAG_SVG ) ) + + + /************************************************************************** + * + * @macro: + * FT_HAS_SBIX + * + * @description: + * A macro that returns true whenever a face object contains an 'sbix' + * OpenType table *and* outline glyphs. + * + * Currently, FreeType only supports bitmap glyphs in PNG format for this + * table (i.e., JPEG and TIFF formats are unsupported, as are + * Apple-specific formats not part of the OpenType specification). + * + * @note: + * For backward compatibility, a font with an 'sbix' table is treated as + * a bitmap-only face. Using @FT_Open_Face with + * @FT_PARAM_TAG_IGNORE_SBIX, an application can switch off 'sbix' + * handling so that the face is treated as an ordinary outline font with + * scalable outlines. + * + * Here is some pseudo code that roughly illustrates how to implement + * 'sbix' handling according to the OpenType specification. + * + * ``` + * if ( FT_HAS_SBIX( face ) ) + * { + * // open font as a scalable one without sbix handling + * FT_Face face2; + * FT_Parameter param = { FT_PARAM_TAG_IGNORE_SBIX, NULL }; + * FT_Open_Args args = { FT_OPEN_PARAMS | ..., + * ..., + * 1, ¶m }; + * + * + * FT_Open_Face( library, &args, 0, &face2 ); + * + * available_size` as necessary into + * `preferred_sizes`[*]> + * + * for ( i = 0; i < face->num_fixed_sizes; i++ ) + * { + * size = preferred_sizes[i].size; + * + * error = FT_Set_Pixel_Sizes( face, size, size ); + * + * + * // check whether we have a glyph in a bitmap strike + * error = FT_Load_Glyph( face, + * glyph_index, + * FT_LOAD_SBITS_ONLY | + * FT_LOAD_BITMAP_METRICS_ONLY ); + * if ( error == FT_Err_Invalid_Argument ) + * continue; + * else if ( error ) + * + * else + * break; + * } + * + * if ( i != face->num_fixed_sizes ) + * + * + * if ( i == face->num_fixed_sizes || + * FT_HAS_SBIX_OVERLAY( face ) ) + * + * } + * ``` + * + * [*] Assuming a target value of 400dpi and available strike sizes 100, + * 200, 300, and 400dpi, a possible order might be [400, 200, 300, 100]: + * scaling 200dpi to 400dpi usually gives better results than scaling + * 300dpi to 400dpi; it is also much faster. However, scaling 100dpi to + * 400dpi can yield a too pixelated result, thus the preference might be + * 300dpi over 100dpi. + * + * @since: + * 2.12 + */ +#define FT_HAS_SBIX( face ) \ + ( !!( (face)->face_flags & FT_FACE_FLAG_SBIX ) ) + + + /************************************************************************** + * + * @macro: + * FT_HAS_SBIX_OVERLAY + * + * @description: + * A macro that returns true whenever a face object contains an 'sbix' + * OpenType table with bit~1 in its `flags` field set, instructing the + * application to overlay the bitmap strike with the corresponding + * outline glyph. See @FT_HAS_SBIX for pseudo code how to use it. + * + * @since: + * 2.12 + */ +#define FT_HAS_SBIX_OVERLAY( face ) \ + ( !!( (face)->face_flags & FT_FACE_FLAG_SBIX_OVERLAY ) ) + + + /************************************************************************** + * + * @section: + * face_creation + * + */ + + /************************************************************************** + * + * @enum: + * FT_STYLE_FLAG_XXX + * + * @description: + * A list of bit flags to indicate the style of a given face. These are + * used in the `style_flags` field of @FT_FaceRec. + * + * @values: + * FT_STYLE_FLAG_ITALIC :: + * The face style is italic or oblique. + * + * FT_STYLE_FLAG_BOLD :: + * The face is bold. + * + * @note: + * The style information as provided by FreeType is very basic. More + * details are beyond the scope and should be done on a higher level (for + * example, by analyzing various fields of the 'OS/2' table in SFNT based + * fonts). + */ +#define FT_STYLE_FLAG_ITALIC ( 1 << 0 ) +#define FT_STYLE_FLAG_BOLD ( 1 << 1 ) + + + /************************************************************************** + * + * @section: + * other_api_data + * + */ + + /************************************************************************** + * + * @type: + * FT_Size_Internal + * + * @description: + * An opaque handle to an `FT_Size_InternalRec` structure, used to model + * private data of a given @FT_Size object. + */ + typedef struct FT_Size_InternalRec_* FT_Size_Internal; + + + /************************************************************************** + * + * @section: + * sizing_and_scaling + * + */ + + /************************************************************************** + * + * @struct: + * FT_Size_Metrics + * + * @description: + * The size metrics structure gives the metrics of a size object. + * + * @fields: + * x_ppem :: + * The width of the scaled EM square in pixels, hence the term 'ppem' + * (pixels per EM). It is also referred to as 'nominal width'. + * + * y_ppem :: + * The height of the scaled EM square in pixels, hence the term 'ppem' + * (pixels per EM). It is also referred to as 'nominal height'. + * + * x_scale :: + * A 16.16 fractional scaling value to convert horizontal metrics from + * font units to 26.6 fractional pixels. Only relevant for scalable + * font formats. + * + * y_scale :: + * A 16.16 fractional scaling value to convert vertical metrics from + * font units to 26.6 fractional pixels. Only relevant for scalable + * font formats. + * + * ascender :: + * The ascender in 26.6 fractional pixels, rounded up to an integer + * value. See @FT_FaceRec for the details. + * + * descender :: + * The descender in 26.6 fractional pixels, rounded down to an integer + * value. See @FT_FaceRec for the details. + * + * height :: + * The height in 26.6 fractional pixels, rounded to an integer value. + * See @FT_FaceRec for the details. + * + * max_advance :: + * The maximum advance width in 26.6 fractional pixels, rounded to an + * integer value. See @FT_FaceRec for the details. + * + * @note: + * The scaling values, if relevant, are determined first during a size + * changing operation. The remaining fields are then set by the driver. + * For scalable formats, they are usually set to scaled values of the + * corresponding fields in @FT_FaceRec. Some values like ascender or + * descender are rounded for historical reasons; more precise values (for + * outline fonts) can be derived by scaling the corresponding @FT_FaceRec + * values manually, with code similar to the following. + * + * ``` + * scaled_ascender = FT_MulFix( face->ascender, + * size_metrics->y_scale ); + * ``` + * + * Note that due to glyph hinting and the selected rendering mode these + * values are usually not exact; consequently, they must be treated as + * unreliable with an error margin of at least one pixel! + * + * Indeed, the only way to get the exact metrics is to render _all_ + * glyphs. As this would be a definite performance hit, it is up to + * client applications to perform such computations. + * + * The `FT_Size_Metrics` structure is valid for bitmap fonts also. + * + * + * **TrueType fonts with native bytecode hinting** + * + * All applications that handle TrueType fonts with native hinting must + * be aware that TTFs expect different rounding of vertical font + * dimensions. The application has to cater for this, especially if it + * wants to rely on a TTF's vertical data (for example, to properly align + * box characters vertically). + * + * Only the application knows _in advance_ that it is going to use native + * hinting for TTFs! FreeType, on the other hand, selects the hinting + * mode not at the time of creating an @FT_Size object but much later, + * namely while calling @FT_Load_Glyph. + * + * Here is some pseudo code that illustrates a possible solution. + * + * ``` + * font_format = FT_Get_Font_Format( face ); + * + * if ( !strcmp( font_format, "TrueType" ) && + * do_native_bytecode_hinting ) + * { + * ascender = ROUND( FT_MulFix( face->ascender, + * size_metrics->y_scale ) ); + * descender = ROUND( FT_MulFix( face->descender, + * size_metrics->y_scale ) ); + * } + * else + * { + * ascender = size_metrics->ascender; + * descender = size_metrics->descender; + * } + * + * height = size_metrics->height; + * max_advance = size_metrics->max_advance; + * ``` + */ + typedef struct FT_Size_Metrics_ + { + FT_UShort x_ppem; /* horizontal pixels per EM */ + FT_UShort y_ppem; /* vertical pixels per EM */ + + FT_Fixed x_scale; /* scaling values used to convert font */ + FT_Fixed y_scale; /* units to 26.6 fractional pixels */ + + FT_Pos ascender; /* ascender in 26.6 frac. pixels */ + FT_Pos descender; /* descender in 26.6 frac. pixels */ + FT_Pos height; /* text height in 26.6 frac. pixels */ + FT_Pos max_advance; /* max horizontal advance, in 26.6 pixels */ + + } FT_Size_Metrics; + + + /************************************************************************** + * + * @struct: + * FT_SizeRec + * + * @description: + * FreeType root size class structure. A size object models a face + * object at a given size. + * + * @fields: + * face :: + * Handle to the parent face object. + * + * generic :: + * A typeless pointer, unused by the FreeType library or any of its + * drivers. It can be used by client applications to link their own + * data to each size object. + * + * metrics :: + * Metrics for this size object. This field is read-only. + */ + typedef struct FT_SizeRec_ + { + FT_Face face; /* parent face object */ + FT_Generic generic; /* generic pointer for client uses */ + FT_Size_Metrics metrics; /* size metrics */ + FT_Size_Internal internal; + + } FT_SizeRec; + + + /************************************************************************** + * + * @section: + * other_api_data + * + */ + + /************************************************************************** + * + * @struct: + * FT_SubGlyph + * + * @description: + * The subglyph structure is an internal object used to describe + * subglyphs (for example, in the case of composites). + * + * @note: + * The subglyph implementation is not part of the high-level API, hence + * the forward structure declaration. + * + * You can however retrieve subglyph information with + * @FT_Get_SubGlyph_Info. + */ + typedef struct FT_SubGlyphRec_* FT_SubGlyph; + + + /************************************************************************** + * + * @type: + * FT_Slot_Internal + * + * @description: + * An opaque handle to an `FT_Slot_InternalRec` structure, used to model + * private data of a given @FT_GlyphSlot object. + */ + typedef struct FT_Slot_InternalRec_* FT_Slot_Internal; + + + /************************************************************************** + * + * @section: + * glyph_retrieval + * + */ + + /************************************************************************** + * + * @struct: + * FT_GlyphSlotRec + * + * @description: + * FreeType root glyph slot class structure. A glyph slot is a container + * where individual glyphs can be loaded, be they in outline or bitmap + * format. + * + * @fields: + * library :: + * A handle to the FreeType library instance this slot belongs to. + * + * face :: + * A handle to the parent face object. + * + * next :: + * In some cases (like some font tools), several glyph slots per face + * object can be a good thing. As this is rare, the glyph slots are + * listed through a direct, single-linked list using its `next` field. + * + * glyph_index :: + * [Since 2.10] The glyph index passed as an argument to @FT_Load_Glyph + * while initializing the glyph slot. + * + * generic :: + * A typeless pointer unused by the FreeType library or any of its + * drivers. It can be used by client applications to link their own + * data to each glyph slot object. + * + * metrics :: + * The metrics of the last loaded glyph in the slot. The returned + * values depend on the last load flags (see the @FT_Load_Glyph API + * function) and can be expressed either in 26.6 fractional pixels or + * font units. + * + * Note that even when the glyph image is transformed, the metrics are + * not. + * + * linearHoriAdvance :: + * The advance width of the unhinted glyph. Its value is expressed in + * 16.16 fractional pixels, unless @FT_LOAD_LINEAR_DESIGN is set when + * loading the glyph. This field can be important to perform correct + * WYSIWYG layout. Only relevant for scalable glyphs. + * + * linearVertAdvance :: + * The advance height of the unhinted glyph. Its value is expressed in + * 16.16 fractional pixels, unless @FT_LOAD_LINEAR_DESIGN is set when + * loading the glyph. This field can be important to perform correct + * WYSIWYG layout. Only relevant for scalable glyphs. + * + * advance :: + * This shorthand is, depending on @FT_LOAD_IGNORE_TRANSFORM, the + * transformed (hinted) advance width for the glyph, in 26.6 fractional + * pixel format. As specified with @FT_LOAD_VERTICAL_LAYOUT, it uses + * either the `horiAdvance` or the `vertAdvance` value of `metrics` + * field. + * + * format :: + * This field indicates the format of the image contained in the glyph + * slot. Typically @FT_GLYPH_FORMAT_BITMAP, @FT_GLYPH_FORMAT_OUTLINE, + * or @FT_GLYPH_FORMAT_COMPOSITE, but other values are possible. + * + * bitmap :: + * This field is used as a bitmap descriptor. Note that the address + * and content of the bitmap buffer can change between calls of + * @FT_Load_Glyph and a few other functions. + * + * bitmap_left :: + * The bitmap's left bearing expressed in integer pixels. + * + * bitmap_top :: + * The bitmap's top bearing expressed in integer pixels. This is the + * distance from the baseline to the top-most glyph scanline, upwards + * y~coordinates being **positive**. + * + * outline :: + * The outline descriptor for the current glyph image if its format is + * @FT_GLYPH_FORMAT_OUTLINE. Once a glyph is loaded, `outline` can be + * transformed, distorted, emboldened, etc. However, it must not be + * freed. + * + * [Since 2.10.1] If @FT_LOAD_NO_SCALE is set, outline coordinates of + * OpenType Font Variations for a selected instance are internally + * handled as 26.6 fractional font units but returned as (rounded) + * integers, as expected. To get unrounded font units, don't use + * @FT_LOAD_NO_SCALE but load the glyph with @FT_LOAD_NO_HINTING and + * scale it, using the font's `units_per_EM` value as the ppem. + * + * num_subglyphs :: + * The number of subglyphs in a composite glyph. This field is only + * valid for the composite glyph format that should normally only be + * loaded with the @FT_LOAD_NO_RECURSE flag. + * + * subglyphs :: + * An array of subglyph descriptors for composite glyphs. There are + * `num_subglyphs` elements in there. Currently internal to FreeType. + * + * control_data :: + * Certain font drivers can also return the control data for a given + * glyph image (e.g. TrueType bytecode, Type~1 charstrings, etc.). + * This field is a pointer to such data; it is currently internal to + * FreeType. + * + * control_len :: + * This is the length in bytes of the control data. Currently internal + * to FreeType. + * + * other :: + * Reserved. + * + * lsb_delta :: + * The difference between hinted and unhinted left side bearing while + * auto-hinting is active. Zero otherwise. + * + * rsb_delta :: + * The difference between hinted and unhinted right side bearing while + * auto-hinting is active. Zero otherwise. + * + * @note: + * If @FT_Load_Glyph is called with default flags (see @FT_LOAD_DEFAULT) + * the glyph image is loaded in the glyph slot in its native format + * (e.g., an outline glyph for TrueType and Type~1 formats). [Since 2.9] + * The prospective bitmap metrics are calculated according to + * @FT_LOAD_TARGET_XXX and other flags even for the outline glyph, even + * if @FT_LOAD_RENDER is not set. + * + * This image can later be converted into a bitmap by calling + * @FT_Render_Glyph. This function searches the current renderer for the + * native image's format, then invokes it. + * + * The renderer is in charge of transforming the native image through the + * slot's face transformation fields, then converting it into a bitmap + * that is returned in `slot->bitmap`. + * + * Note that `slot->bitmap_left` and `slot->bitmap_top` are also used to + * specify the position of the bitmap relative to the current pen + * position (e.g., coordinates (0,0) on the baseline). Of course, + * `slot->format` is also changed to @FT_GLYPH_FORMAT_BITMAP. + * + * Here is a small pseudo code fragment that shows how to use `lsb_delta` + * and `rsb_delta` to do fractional positioning of glyphs: + * + * ``` + * FT_GlyphSlot slot = face->glyph; + * FT_Pos origin_x = 0; + * + * + * for all glyphs do + * + * + * FT_Outline_Translate( slot->outline, origin_x & 63, 0 ); + * + * + * + * + * + * origin_x += slot->advance.x; + * origin_x += slot->lsb_delta - slot->rsb_delta; + * endfor + * ``` + * + * Here is another small pseudo code fragment that shows how to use + * `lsb_delta` and `rsb_delta` to improve integer positioning of glyphs: + * + * ``` + * FT_GlyphSlot slot = face->glyph; + * FT_Pos origin_x = 0; + * FT_Pos prev_rsb_delta = 0; + * + * + * for all glyphs do + * + * + * + * + * if ( prev_rsb_delta - slot->lsb_delta > 32 ) + * origin_x -= 64; + * else if ( prev_rsb_delta - slot->lsb_delta < -31 ) + * origin_x += 64; + * + * prev_rsb_delta = slot->rsb_delta; + * + * + * + * origin_x += slot->advance.x; + * endfor + * ``` + * + * If you use strong auto-hinting, you **must** apply these delta values! + * Otherwise you will experience far too large inter-glyph spacing at + * small rendering sizes in most cases. Note that it doesn't harm to use + * the above code for other hinting modes also, since the delta values + * are zero then. + */ + typedef struct FT_GlyphSlotRec_ + { + FT_Library library; + FT_Face face; + FT_GlyphSlot next; + FT_UInt glyph_index; /* new in 2.10; was reserved previously */ + FT_Generic generic; + + FT_Glyph_Metrics metrics; + FT_Fixed linearHoriAdvance; + FT_Fixed linearVertAdvance; + FT_Vector advance; + + FT_Glyph_Format format; + + FT_Bitmap bitmap; + FT_Int bitmap_left; + FT_Int bitmap_top; + + FT_Outline outline; + + FT_UInt num_subglyphs; + FT_SubGlyph subglyphs; + + void* control_data; + long control_len; + + FT_Pos lsb_delta; + FT_Pos rsb_delta; + + void* other; + + FT_Slot_Internal internal; + + } FT_GlyphSlotRec; + + + /*************************************************************************/ + /*************************************************************************/ + /* */ + /* F U N C T I O N S */ + /* */ + /*************************************************************************/ + /*************************************************************************/ + + + /************************************************************************** + * + * @section: + * library_setup + * + */ + + /************************************************************************** + * + * @function: + * FT_Init_FreeType + * + * @description: + * Initialize a new FreeType library object. The set of modules that are + * registered by this function is determined at build time. + * + * @output: + * alibrary :: + * A handle to a new library object. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * In case you want to provide your own memory allocating routines, use + * @FT_New_Library instead, followed by a call to @FT_Add_Default_Modules + * (or a series of calls to @FT_Add_Module) and + * @FT_Set_Default_Properties. + * + * See the documentation of @FT_Library and @FT_Face for multi-threading + * issues. + * + * If you need reference-counting (cf. @FT_Reference_Library), use + * @FT_New_Library and @FT_Done_Library. + * + * If compilation option `FT_CONFIG_OPTION_ENVIRONMENT_PROPERTIES` is + * set, this function reads the `FREETYPE_PROPERTIES` environment + * variable to control driver properties. See section @properties for + * more. + */ + FT_EXPORT( FT_Error ) + FT_Init_FreeType( FT_Library *alibrary ); + + + /************************************************************************** + * + * @function: + * FT_Done_FreeType + * + * @description: + * Destroy a given FreeType library object and all of its children, + * including resources, drivers, faces, sizes, etc. + * + * @input: + * library :: + * A handle to the target library object. + * + * @return: + * FreeType error code. 0~means success. + */ + FT_EXPORT( FT_Error ) + FT_Done_FreeType( FT_Library library ); + + + /************************************************************************** + * + * @section: + * face_creation + * + */ + + /************************************************************************** + * + * @enum: + * FT_OPEN_XXX + * + * @description: + * A list of bit field constants used within the `flags` field of the + * @FT_Open_Args structure. + * + * @values: + * FT_OPEN_MEMORY :: + * This is a memory-based stream. + * + * FT_OPEN_STREAM :: + * Copy the stream from the `stream` field. + * + * FT_OPEN_PATHNAME :: + * Create a new input stream from a C~path name. + * + * FT_OPEN_DRIVER :: + * Use the `driver` field. + * + * FT_OPEN_PARAMS :: + * Use the `num_params` and `params` fields. + * + * @note: + * The `FT_OPEN_MEMORY`, `FT_OPEN_STREAM`, and `FT_OPEN_PATHNAME` flags + * are mutually exclusive. + */ +#define FT_OPEN_MEMORY 0x1 +#define FT_OPEN_STREAM 0x2 +#define FT_OPEN_PATHNAME 0x4 +#define FT_OPEN_DRIVER 0x8 +#define FT_OPEN_PARAMS 0x10 + + + /* these constants are deprecated; use the corresponding `FT_OPEN_XXX` */ + /* values instead */ +#define ft_open_memory FT_OPEN_MEMORY +#define ft_open_stream FT_OPEN_STREAM +#define ft_open_pathname FT_OPEN_PATHNAME +#define ft_open_driver FT_OPEN_DRIVER +#define ft_open_params FT_OPEN_PARAMS + + + /************************************************************************** + * + * @struct: + * FT_Parameter + * + * @description: + * A simple structure to pass more or less generic parameters to + * @FT_Open_Face and @FT_Face_Properties. + * + * @fields: + * tag :: + * A four-byte identification tag. + * + * data :: + * A pointer to the parameter data. + * + * @note: + * The ID and function of parameters are driver-specific. See section + * @parameter_tags for more information. + */ + typedef struct FT_Parameter_ + { + FT_ULong tag; + FT_Pointer data; + + } FT_Parameter; + + + /************************************************************************** + * + * @struct: + * FT_Open_Args + * + * @description: + * A structure to indicate how to open a new font file or stream. A + * pointer to such a structure can be used as a parameter for the + * functions @FT_Open_Face and @FT_Attach_Stream. + * + * @fields: + * flags :: + * A set of bit flags indicating how to use the structure. + * + * memory_base :: + * The first byte of the file in memory. + * + * memory_size :: + * The size in bytes of the file in memory. + * + * pathname :: + * A pointer to an 8-bit file pathname, which must be a C~string (i.e., + * no null bytes except at the very end). The pointer is not owned by + * FreeType. + * + * stream :: + * A handle to a source stream object. + * + * driver :: + * This field is exclusively used by @FT_Open_Face; it simply specifies + * the font driver to use for opening the face. If set to `NULL`, + * FreeType tries to load the face with each one of the drivers in its + * list. + * + * num_params :: + * The number of extra parameters. + * + * params :: + * Extra parameters passed to the font driver when opening a new face. + * + * @note: + * The stream type is determined by the contents of `flags`: + * + * If the @FT_OPEN_MEMORY bit is set, assume that this is a memory file + * of `memory_size` bytes, located at `memory_address`. The data are not + * copied, and the client is responsible for releasing and destroying + * them _after_ the corresponding call to @FT_Done_Face. + * + * Otherwise, if the @FT_OPEN_STREAM bit is set, assume that a custom + * input stream `stream` is used. + * + * Otherwise, if the @FT_OPEN_PATHNAME bit is set, assume that this is a + * normal file and use `pathname` to open it. + * + * If none of the above bits are set or if multiple are set at the same + * time, the flags are invalid and @FT_Open_Face fails. + * + * If the @FT_OPEN_DRIVER bit is set, @FT_Open_Face only tries to open + * the file with the driver whose handler is in `driver`. + * + * If the @FT_OPEN_PARAMS bit is set, the parameters given by + * `num_params` and `params` is used. They are ignored otherwise. + * + * Ideally, both the `pathname` and `params` fields should be tagged as + * 'const'; this is missing for API backward compatibility. In other + * words, applications should treat them as read-only. + */ + typedef struct FT_Open_Args_ + { + FT_UInt flags; + const FT_Byte* memory_base; + FT_Long memory_size; + FT_String* pathname; + FT_Stream stream; + FT_Module driver; + FT_Int num_params; + FT_Parameter* params; + + } FT_Open_Args; + + + /************************************************************************** + * + * @function: + * FT_New_Face + * + * @description: + * Call @FT_Open_Face to open a font by its pathname. + * + * @inout: + * library :: + * A handle to the library resource. + * + * @input: + * pathname :: + * A path to the font file. + * + * face_index :: + * See @FT_Open_Face for a detailed description of this parameter. + * + * @output: + * aface :: + * A handle to a new face object. If `face_index` is greater than or + * equal to zero, it must be non-`NULL`. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * The `pathname` string should be recognizable as such by a standard + * `fopen` call on your system; in particular, this means that `pathname` + * must not contain null bytes. If that is not sufficient to address all + * file name possibilities (for example, to handle wide character file + * names on Windows in UTF-16 encoding) you might use @FT_Open_Face to + * pass a memory array or a stream object instead. + * + * Use @FT_Done_Face to destroy the created @FT_Face object (along with + * its slot and sizes). + */ + FT_EXPORT( FT_Error ) + FT_New_Face( FT_Library library, + const char* filepathname, + FT_Long face_index, + FT_Face *aface ); + + + /************************************************************************** + * + * @function: + * FT_New_Memory_Face + * + * @description: + * Call @FT_Open_Face to open a font that has been loaded into memory. + * + * @inout: + * library :: + * A handle to the library resource. + * + * @input: + * file_base :: + * A pointer to the beginning of the font data. + * + * file_size :: + * The size of the memory chunk used by the font data. + * + * face_index :: + * See @FT_Open_Face for a detailed description of this parameter. + * + * @output: + * aface :: + * A handle to a new face object. If `face_index` is greater than or + * equal to zero, it must be non-`NULL`. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * You must not deallocate the memory before calling @FT_Done_Face. + */ + FT_EXPORT( FT_Error ) + FT_New_Memory_Face( FT_Library library, + const FT_Byte* file_base, + FT_Long file_size, + FT_Long face_index, + FT_Face *aface ); + + + /************************************************************************** + * + * @function: + * FT_Open_Face + * + * @description: + * Create a face object from a given resource described by @FT_Open_Args. + * + * @inout: + * library :: + * A handle to the library resource. + * + * @input: + * args :: + * A pointer to an `FT_Open_Args` structure that must be filled by the + * caller. + * + * face_index :: + * This field holds two different values. Bits 0-15 are the index of + * the face in the font file (starting with value~0). Set it to~0 if + * there is only one face in the font file. + * + * [Since 2.6.1] Bits 16-30 are relevant to TrueType GX and OpenType + * Font Variations only, specifying the named instance index for the + * current face index (starting with value~1; value~0 makes FreeType + * ignore named instances). For non-variation fonts, bits 16-30 are + * ignored. Assuming that you want to access the third named instance + * in face~4, `face_index` should be set to 0x00030004. If you want + * to access face~4 without variation handling, simply set + * `face_index` to value~4. + * + * `FT_Open_Face` and its siblings can be used to quickly check whether + * the font format of a given font resource is supported by FreeType. + * In general, if the `face_index` argument is negative, the function's + * return value is~0 if the font format is recognized, or non-zero + * otherwise. The function allocates a more or less empty face handle + * in `*aface` (if `aface` isn't `NULL`); the only two useful fields in + * this special case are `face->num_faces` and `face->style_flags`. + * For any negative value of `face_index`, `face->num_faces` gives the + * number of faces within the font file. For the negative value + * '-(N+1)' (with 'N' a non-negative 16-bit value), bits 16-30 in + * `face->style_flags` give the number of named instances in face 'N' + * if we have a variation font (or zero otherwise). After examination, + * the returned @FT_Face structure should be deallocated with a call to + * @FT_Done_Face. + * + * @output: + * aface :: + * A handle to a new face object. If `face_index` is greater than or + * equal to zero, it must be non-`NULL`. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * Unlike FreeType 1.x, this function automatically creates a glyph slot + * for the face object that can be accessed directly through + * `face->glyph`. + * + * Each new face object created with this function also owns a default + * @FT_Size object, accessible as `face->size`. + * + * One @FT_Library instance can have multiple face objects, that is, + * @FT_Open_Face and its siblings can be called multiple times using the + * same `library` argument. + * + * See the discussion of reference counters in the description of + * @FT_Reference_Face. + * + * If `FT_OPEN_STREAM` is set in `args->flags`, the stream in + * `args->stream` is automatically closed before this function returns + * any error (including `FT_Err_Invalid_Argument`). + * + * @example: + * To loop over all faces, use code similar to the following snippet + * (omitting the error handling). + * + * ``` + * ... + * FT_Face face; + * FT_Long i, num_faces; + * + * + * error = FT_Open_Face( library, args, -1, &face ); + * if ( error ) { ... } + * + * num_faces = face->num_faces; + * FT_Done_Face( face ); + * + * for ( i = 0; i < num_faces; i++ ) + * { + * ... + * error = FT_Open_Face( library, args, i, &face ); + * ... + * FT_Done_Face( face ); + * ... + * } + * ``` + * + * To loop over all valid values for `face_index`, use something similar + * to the following snippet, again without error handling. The code + * accesses all faces immediately (thus only a single call of + * `FT_Open_Face` within the do-loop), with and without named instances. + * + * ``` + * ... + * FT_Face face; + * + * FT_Long num_faces = 0; + * FT_Long num_instances = 0; + * + * FT_Long face_idx = 0; + * FT_Long instance_idx = 0; + * + * + * do + * { + * FT_Long id = ( instance_idx << 16 ) + face_idx; + * + * + * error = FT_Open_Face( library, args, id, &face ); + * if ( error ) { ... } + * + * num_faces = face->num_faces; + * num_instances = face->style_flags >> 16; + * + * ... + * + * FT_Done_Face( face ); + * + * if ( instance_idx < num_instances ) + * instance_idx++; + * else + * { + * face_idx++; + * instance_idx = 0; + * } + * + * } while ( face_idx < num_faces ) + * ``` + */ + FT_EXPORT( FT_Error ) + FT_Open_Face( FT_Library library, + const FT_Open_Args* args, + FT_Long face_index, + FT_Face *aface ); + + + /************************************************************************** + * + * @function: + * FT_Attach_File + * + * @description: + * Call @FT_Attach_Stream to attach a file. + * + * @inout: + * face :: + * The target face object. + * + * @input: + * filepathname :: + * The pathname. + * + * @return: + * FreeType error code. 0~means success. + */ + FT_EXPORT( FT_Error ) + FT_Attach_File( FT_Face face, + const char* filepathname ); + + + /************************************************************************** + * + * @function: + * FT_Attach_Stream + * + * @description: + * 'Attach' data to a face object. Normally, this is used to read + * additional information for the face object. For example, you can + * attach an AFM file that comes with a Type~1 font to get the kerning + * values and other metrics. + * + * @inout: + * face :: + * The target face object. + * + * @input: + * parameters :: + * A pointer to @FT_Open_Args that must be filled by the caller. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * The meaning of the 'attach' (i.e., what really happens when the new + * file is read) is not fixed by FreeType itself. It really depends on + * the font format (and thus the font driver). + * + * Client applications are expected to know what they are doing when + * invoking this function. Most drivers simply do not implement file or + * stream attachments. + */ + FT_EXPORT( FT_Error ) + FT_Attach_Stream( FT_Face face, + const FT_Open_Args* parameters ); + + + /************************************************************************** + * + * @function: + * FT_Reference_Face + * + * @description: + * A counter gets initialized to~1 at the time an @FT_Face structure is + * created. This function increments the counter. @FT_Done_Face then + * only destroys a face if the counter is~1, otherwise it simply + * decrements the counter. + * + * This function helps in managing life-cycles of structures that + * reference @FT_Face objects. + * + * @input: + * face :: + * A handle to a target face object. + * + * @return: + * FreeType error code. 0~means success. + * + * @since: + * 2.4.2 + * + */ + FT_EXPORT( FT_Error ) + FT_Reference_Face( FT_Face face ); + + + /************************************************************************** + * + * @function: + * FT_Done_Face + * + * @description: + * Discard a given face object, as well as all of its child slots and + * sizes. + * + * @input: + * face :: + * A handle to a target face object. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * See the discussion of reference counters in the description of + * @FT_Reference_Face. + */ + FT_EXPORT( FT_Error ) + FT_Done_Face( FT_Face face ); + + + /************************************************************************** + * + * @section: + * sizing_and_scaling + * + */ + + /************************************************************************** + * + * @function: + * FT_Select_Size + * + * @description: + * Select a bitmap strike. To be more precise, this function sets the + * scaling factors of the active @FT_Size object in a face so that + * bitmaps from this particular strike are taken by @FT_Load_Glyph and + * friends. + * + * @inout: + * face :: + * A handle to a target face object. + * + * @input: + * strike_index :: + * The index of the bitmap strike in the `available_sizes` field of + * @FT_FaceRec structure. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * For bitmaps embedded in outline fonts it is common that only a subset + * of the available glyphs at a given ppem value is available. FreeType + * silently uses outlines if there is no bitmap for a given glyph index. + * + * For TrueType GX and OpenType Font Variations, a bitmap strike makes + * sense only if the default instance is active (that is, no glyph + * variation takes place); otherwise, FreeType simply ignores bitmap + * strikes. The same is true for all named instances that are different + * from the default instance. + * + * Don't use this function if you are using the FreeType cache API. + */ + FT_EXPORT( FT_Error ) + FT_Select_Size( FT_Face face, + FT_Int strike_index ); + + + /************************************************************************** + * + * @enum: + * FT_Size_Request_Type + * + * @description: + * An enumeration type that lists the supported size request types, i.e., + * what input size (in font units) maps to the requested output size (in + * pixels, as computed from the arguments of @FT_Size_Request). + * + * @values: + * FT_SIZE_REQUEST_TYPE_NOMINAL :: + * The nominal size. The `units_per_EM` field of @FT_FaceRec is used + * to determine both scaling values. + * + * This is the standard scaling found in most applications. In + * particular, use this size request type for TrueType fonts if they + * provide optical scaling or something similar. Note, however, that + * `units_per_EM` is a rather abstract value which bears no relation to + * the actual size of the glyphs in a font. + * + * FT_SIZE_REQUEST_TYPE_REAL_DIM :: + * The real dimension. The sum of the `ascender` and (minus of) the + * `descender` fields of @FT_FaceRec is used to determine both scaling + * values. + * + * FT_SIZE_REQUEST_TYPE_BBOX :: + * The font bounding box. The width and height of the `bbox` field of + * @FT_FaceRec are used to determine the horizontal and vertical + * scaling value, respectively. + * + * FT_SIZE_REQUEST_TYPE_CELL :: + * The `max_advance_width` field of @FT_FaceRec is used to determine + * the horizontal scaling value; the vertical scaling value is + * determined the same way as @FT_SIZE_REQUEST_TYPE_REAL_DIM does. + * Finally, both scaling values are set to the smaller one. This type + * is useful if you want to specify the font size for, say, a window of + * a given dimension and 80x24 cells. + * + * FT_SIZE_REQUEST_TYPE_SCALES :: + * Specify the scaling values directly. + * + * @note: + * The above descriptions only apply to scalable formats. For bitmap + * formats, the behaviour is up to the driver. + * + * See the note section of @FT_Size_Metrics if you wonder how size + * requesting relates to scaling values. + */ + typedef enum FT_Size_Request_Type_ + { + FT_SIZE_REQUEST_TYPE_NOMINAL, + FT_SIZE_REQUEST_TYPE_REAL_DIM, + FT_SIZE_REQUEST_TYPE_BBOX, + FT_SIZE_REQUEST_TYPE_CELL, + FT_SIZE_REQUEST_TYPE_SCALES, + + FT_SIZE_REQUEST_TYPE_MAX + + } FT_Size_Request_Type; + + + /************************************************************************** + * + * @struct: + * FT_Size_RequestRec + * + * @description: + * A structure to model a size request. + * + * @fields: + * type :: + * See @FT_Size_Request_Type. + * + * width :: + * The desired width, given as a 26.6 fractional point value (with 72pt + * = 1in). + * + * height :: + * The desired height, given as a 26.6 fractional point value (with + * 72pt = 1in). + * + * horiResolution :: + * The horizontal resolution (dpi, i.e., pixels per inch). If set to + * zero, `width` is treated as a 26.6 fractional **pixel** value, which + * gets internally rounded to an integer. + * + * vertResolution :: + * The vertical resolution (dpi, i.e., pixels per inch). If set to + * zero, `height` is treated as a 26.6 fractional **pixel** value, + * which gets internally rounded to an integer. + * + * @note: + * If `width` is zero, the horizontal scaling value is set equal to the + * vertical scaling value, and vice versa. + * + * If `type` is `FT_SIZE_REQUEST_TYPE_SCALES`, `width` and `height` are + * interpreted directly as 16.16 fractional scaling values, without any + * further modification, and both `horiResolution` and `vertResolution` + * are ignored. + */ + typedef struct FT_Size_RequestRec_ + { + FT_Size_Request_Type type; + FT_Long width; + FT_Long height; + FT_UInt horiResolution; + FT_UInt vertResolution; + + } FT_Size_RequestRec; + + + /************************************************************************** + * + * @struct: + * FT_Size_Request + * + * @description: + * A handle to a size request structure. + */ + typedef struct FT_Size_RequestRec_ *FT_Size_Request; + + + /************************************************************************** + * + * @function: + * FT_Request_Size + * + * @description: + * Resize the scale of the active @FT_Size object in a face. + * + * @inout: + * face :: + * A handle to a target face object. + * + * @input: + * req :: + * A pointer to a @FT_Size_RequestRec. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * Although drivers may select the bitmap strike matching the request, + * you should not rely on this if you intend to select a particular + * bitmap strike. Use @FT_Select_Size instead in that case. + * + * The relation between the requested size and the resulting glyph size + * is dependent entirely on how the size is defined in the source face. + * The font designer chooses the final size of each glyph relative to + * this size. For more information refer to + * 'https://freetype.org/freetype2/docs/glyphs/glyphs-2.html'. + * + * Contrary to @FT_Set_Char_Size, this function doesn't have special code + * to normalize zero-valued widths, heights, or resolutions, which are + * treated as @FT_LOAD_NO_SCALE. + * + * Don't use this function if you are using the FreeType cache API. + */ + FT_EXPORT( FT_Error ) + FT_Request_Size( FT_Face face, + FT_Size_Request req ); + + + /************************************************************************** + * + * @function: + * FT_Set_Char_Size + * + * @description: + * Call @FT_Request_Size to request the nominal size (in points). + * + * @inout: + * face :: + * A handle to a target face object. + * + * @input: + * char_width :: + * The nominal width, in 26.6 fractional points. + * + * char_height :: + * The nominal height, in 26.6 fractional points. + * + * horz_resolution :: + * The horizontal resolution in dpi. + * + * vert_resolution :: + * The vertical resolution in dpi. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * While this function allows fractional points as input values, the + * resulting ppem value for the given resolution is always rounded to the + * nearest integer. + * + * If either the character width or height is zero, it is set equal to + * the other value. + * + * If either the horizontal or vertical resolution is zero, it is set + * equal to the other value. + * + * A character width or height smaller than 1pt is set to 1pt; if both + * resolution values are zero, they are set to 72dpi. + * + * Don't use this function if you are using the FreeType cache API. + */ + FT_EXPORT( FT_Error ) + FT_Set_Char_Size( FT_Face face, + FT_F26Dot6 char_width, + FT_F26Dot6 char_height, + FT_UInt horz_resolution, + FT_UInt vert_resolution ); + + + /************************************************************************** + * + * @function: + * FT_Set_Pixel_Sizes + * + * @description: + * Call @FT_Request_Size to request the nominal size (in pixels). + * + * @inout: + * face :: + * A handle to the target face object. + * + * @input: + * pixel_width :: + * The nominal width, in pixels. + * + * pixel_height :: + * The nominal height, in pixels. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * You should not rely on the resulting glyphs matching or being + * constrained to this pixel size. Refer to @FT_Request_Size to + * understand how requested sizes relate to actual sizes. + * + * Don't use this function if you are using the FreeType cache API. + */ + FT_EXPORT( FT_Error ) + FT_Set_Pixel_Sizes( FT_Face face, + FT_UInt pixel_width, + FT_UInt pixel_height ); + + + /************************************************************************** + * + * @section: + * glyph_retrieval + * + */ + + /************************************************************************** + * + * @function: + * FT_Load_Glyph + * + * @description: + * Load a glyph into the glyph slot of a face object. + * + * @inout: + * face :: + * A handle to the target face object where the glyph is loaded. + * + * @input: + * glyph_index :: + * The index of the glyph in the font file. For CID-keyed fonts + * (either in PS or in CFF format) this argument specifies the CID + * value. + * + * load_flags :: + * A flag indicating what to load for this glyph. The @FT_LOAD_XXX + * flags can be used to control the glyph loading process (e.g., + * whether the outline should be scaled, whether to load bitmaps or + * not, whether to hint the outline, etc). + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * For proper scaling and hinting, the active @FT_Size object owned by + * the face has to be meaningfully initialized by calling + * @FT_Set_Char_Size before this function, for example. The loaded + * glyph may be transformed. See @FT_Set_Transform for the details. + * + * For subsetted CID-keyed fonts, `FT_Err_Invalid_Argument` is returned + * for invalid CID values (that is, for CID values that don't have a + * corresponding glyph in the font). See the discussion of the + * @FT_FACE_FLAG_CID_KEYED flag for more details. + * + * If you receive `FT_Err_Glyph_Too_Big`, try getting the glyph outline + * at EM size, then scale it manually and fill it as a graphics + * operation. + */ + FT_EXPORT( FT_Error ) + FT_Load_Glyph( FT_Face face, + FT_UInt glyph_index, + FT_Int32 load_flags ); + + + /************************************************************************** + * + * @section: + * character_mapping + * + */ + + /************************************************************************** + * + * @function: + * FT_Load_Char + * + * @description: + * Load a glyph into the glyph slot of a face object, accessed by its + * character code. + * + * @inout: + * face :: + * A handle to a target face object where the glyph is loaded. + * + * @input: + * char_code :: + * The glyph's character code, according to the current charmap used in + * the face. + * + * load_flags :: + * A flag indicating what to load for this glyph. The @FT_LOAD_XXX + * constants can be used to control the glyph loading process (e.g., + * whether the outline should be scaled, whether to load bitmaps or + * not, whether to hint the outline, etc). + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * This function simply calls @FT_Get_Char_Index and @FT_Load_Glyph. + * + * Many fonts contain glyphs that can't be loaded by this function since + * its glyph indices are not listed in any of the font's charmaps. + * + * If no active cmap is set up (i.e., `face->charmap` is zero), the call + * to @FT_Get_Char_Index is omitted, and the function behaves identically + * to @FT_Load_Glyph. + */ + FT_EXPORT( FT_Error ) + FT_Load_Char( FT_Face face, + FT_ULong char_code, + FT_Int32 load_flags ); + + + /************************************************************************** + * + * @section: + * glyph_retrieval + * + */ + + /************************************************************************** + * + * @enum: + * FT_LOAD_XXX + * + * @description: + * A list of bit field constants for @FT_Load_Glyph to indicate what kind + * of operations to perform during glyph loading. + * + * @values: + * FT_LOAD_DEFAULT :: + * Corresponding to~0, this value is used as the default glyph load + * operation. In this case, the following happens: + * + * 1. FreeType looks for a bitmap for the glyph corresponding to the + * face's current size. If one is found, the function returns. The + * bitmap data can be accessed from the glyph slot (see note below). + * + * 2. If no embedded bitmap is searched for or found, FreeType looks + * for a scalable outline. If one is found, it is loaded from the font + * file, scaled to device pixels, then 'hinted' to the pixel grid in + * order to optimize it. The outline data can be accessed from the + * glyph slot (see note below). + * + * Note that by default the glyph loader doesn't render outlines into + * bitmaps. The following flags are used to modify this default + * behaviour to more specific and useful cases. + * + * FT_LOAD_NO_SCALE :: + * Don't scale the loaded outline glyph but keep it in font units. + * This flag is also assumed if @FT_Size owned by the face was not + * properly initialized. + * + * This flag implies @FT_LOAD_NO_HINTING and @FT_LOAD_NO_BITMAP, and + * unsets @FT_LOAD_RENDER. + * + * If the font is 'tricky' (see @FT_FACE_FLAG_TRICKY for more), using + * `FT_LOAD_NO_SCALE` usually yields meaningless outlines because the + * subglyphs must be scaled and positioned with hinting instructions. + * This can be solved by loading the font without `FT_LOAD_NO_SCALE` + * and setting the character size to `font->units_per_EM`. + * + * FT_LOAD_NO_HINTING :: + * Disable hinting. This generally generates 'blurrier' bitmap glyphs + * when the glyphs are rendered in any of the anti-aliased modes. See + * also the note below. + * + * This flag is implied by @FT_LOAD_NO_SCALE. + * + * FT_LOAD_RENDER :: + * Call @FT_Render_Glyph after the glyph is loaded. By default, the + * glyph is rendered in @FT_RENDER_MODE_NORMAL mode. This can be + * overridden by @FT_LOAD_TARGET_XXX or @FT_LOAD_MONOCHROME. + * + * This flag is unset by @FT_LOAD_NO_SCALE. + * + * FT_LOAD_NO_BITMAP :: + * Ignore bitmap strikes when loading. Bitmap-only fonts ignore this + * flag. + * + * @FT_LOAD_NO_SCALE always sets this flag. + * + * FT_LOAD_SBITS_ONLY :: + * [Since 2.12] This is the opposite of @FT_LOAD_NO_BITMAP, more or + * less: @FT_Load_Glyph returns `FT_Err_Invalid_Argument` if the face + * contains a bitmap strike for the given size (or the strike selected + * by @FT_Select_Size) but there is no glyph in the strike. + * + * Note that this load flag was part of FreeType since version 2.0.6 + * but previously tagged as internal. + * + * FT_LOAD_VERTICAL_LAYOUT :: + * Load the glyph for vertical text layout. In particular, the + * `advance` value in the @FT_GlyphSlotRec structure is set to the + * `vertAdvance` value of the `metrics` field. + * + * In case @FT_HAS_VERTICAL doesn't return true, you shouldn't use this + * flag currently. Reason is that in this case vertical metrics get + * synthesized, and those values are not always consistent across + * various font formats. + * + * FT_LOAD_FORCE_AUTOHINT :: + * Prefer the auto-hinter over the font's native hinter. See also the + * note below. + * + * FT_LOAD_PEDANTIC :: + * Make the font driver perform pedantic verifications during glyph + * loading and hinting. This is mostly used to detect broken glyphs in + * fonts. By default, FreeType tries to handle broken fonts also. + * + * In particular, errors from the TrueType bytecode engine are not + * passed to the application if this flag is not set; this might result + * in partially hinted or distorted glyphs in case a glyph's bytecode + * is buggy. + * + * FT_LOAD_NO_RECURSE :: + * Don't load composite glyphs recursively. Instead, the font driver + * fills the `num_subglyph` and `subglyphs` values of the glyph slot; + * it also sets `glyph->format` to @FT_GLYPH_FORMAT_COMPOSITE. The + * description of subglyphs can then be accessed with + * @FT_Get_SubGlyph_Info. + * + * Don't use this flag for retrieving metrics information since some + * font drivers only return rudimentary data. + * + * This flag implies @FT_LOAD_NO_SCALE and @FT_LOAD_IGNORE_TRANSFORM. + * + * FT_LOAD_IGNORE_TRANSFORM :: + * Ignore the transform matrix set by @FT_Set_Transform. + * + * FT_LOAD_MONOCHROME :: + * This flag is used with @FT_LOAD_RENDER to indicate that you want to + * render an outline glyph to a 1-bit monochrome bitmap glyph, with + * 8~pixels packed into each byte of the bitmap data. + * + * Note that this has no effect on the hinting algorithm used. You + * should rather use @FT_LOAD_TARGET_MONO so that the + * monochrome-optimized hinting algorithm is used. + * + * FT_LOAD_LINEAR_DESIGN :: + * Keep `linearHoriAdvance` and `linearVertAdvance` fields of + * @FT_GlyphSlotRec in font units. See @FT_GlyphSlotRec for details. + * + * FT_LOAD_NO_AUTOHINT :: + * Disable the auto-hinter. See also the note below. + * + * FT_LOAD_COLOR :: + * Load colored glyphs. FreeType searches in the following order; + * there are slight differences depending on the font format. + * + * [Since 2.5] Load embedded color bitmap images (provided + * @FT_LOAD_NO_BITMAP is not set). The resulting color bitmaps, if + * available, have the @FT_PIXEL_MODE_BGRA format, with pre-multiplied + * color channels. If the flag is not set and color bitmaps are found, + * they are converted to 256-level gray bitmaps, using the + * @FT_PIXEL_MODE_GRAY format. + * + * [Since 2.12] If the glyph index maps to an entry in the face's + * 'SVG~' table, load the associated SVG document from this table and + * set the `format` field of @FT_GlyphSlotRec to @FT_GLYPH_FORMAT_SVG + * ([since 2.13.1] provided @FT_LOAD_NO_SVG is not set). Note that + * FreeType itself can't render SVG documents; however, the library + * provides hooks to seamlessly integrate an external renderer. See + * sections @ot_svg_driver and @svg_fonts for more. + * + * [Since 2.10, experimental] If the glyph index maps to an entry in + * the face's 'COLR' table with a 'CPAL' palette table (as defined in + * the OpenType specification), make @FT_Render_Glyph provide a default + * blending of the color glyph layers associated with the glyph index, + * using the same bitmap format as embedded color bitmap images. This + * is mainly for convenience and works only for glyphs in 'COLR' v0 + * tables. **There is no rendering support for 'COLR' v1** (with the + * exception of v1 tables that exclusively use v0 features)! You need + * a graphics library like Skia or Cairo to interpret the graphics + * commands stored in v1 tables. For full control of color layers use + * @FT_Get_Color_Glyph_Layer and FreeType's color functions like + * @FT_Palette_Select instead of setting @FT_LOAD_COLOR for rendering + * so that the client application can handle blending by itself. + * + * FT_LOAD_NO_SVG :: + * [Since 2.13.1] Ignore SVG glyph data when loading. + * + * FT_LOAD_COMPUTE_METRICS :: + * [Since 2.6.1] Compute glyph metrics from the glyph data, without the + * use of bundled metrics tables (for example, the 'hdmx' table in + * TrueType fonts). This flag is mainly used by font validating or + * font editing applications, which need to ignore, verify, or edit + * those tables. + * + * Currently, this flag is only implemented for TrueType fonts. + * + * FT_LOAD_BITMAP_METRICS_ONLY :: + * [Since 2.7.1] Request loading of the metrics and bitmap image + * information of a (possibly embedded) bitmap glyph without allocating + * or copying the bitmap image data itself. No effect if the target + * glyph is not a bitmap image. + * + * This flag unsets @FT_LOAD_RENDER. + * + * FT_LOAD_CROP_BITMAP :: + * Ignored. Deprecated. + * + * FT_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH :: + * Ignored. Deprecated. + * + * @note: + * By default, hinting is enabled and the font's native hinter (see + * @FT_FACE_FLAG_HINTER) is preferred over the auto-hinter. You can + * disable hinting by setting @FT_LOAD_NO_HINTING or change the + * precedence by setting @FT_LOAD_FORCE_AUTOHINT. You can also set + * @FT_LOAD_NO_AUTOHINT in case you don't want the auto-hinter to be used + * at all. + * + * See the description of @FT_FACE_FLAG_TRICKY for a special exception + * (affecting only a handful of Asian fonts). + * + * Besides deciding which hinter to use, you can also decide which + * hinting algorithm to use. See @FT_LOAD_TARGET_XXX for details. + * + * Note that the auto-hinter needs a valid Unicode cmap (either a native + * one or synthesized by FreeType) for producing correct results. If a + * font provides an incorrect mapping (for example, assigning the + * character code U+005A, LATIN CAPITAL LETTER~Z, to a glyph depicting a + * mathematical integral sign), the auto-hinter might produce useless + * results. + * + */ +#define FT_LOAD_DEFAULT 0x0 +#define FT_LOAD_NO_SCALE ( 1L << 0 ) +#define FT_LOAD_NO_HINTING ( 1L << 1 ) +#define FT_LOAD_RENDER ( 1L << 2 ) +#define FT_LOAD_NO_BITMAP ( 1L << 3 ) +#define FT_LOAD_VERTICAL_LAYOUT ( 1L << 4 ) +#define FT_LOAD_FORCE_AUTOHINT ( 1L << 5 ) +#define FT_LOAD_CROP_BITMAP ( 1L << 6 ) +#define FT_LOAD_PEDANTIC ( 1L << 7 ) +#define FT_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH ( 1L << 9 ) +#define FT_LOAD_NO_RECURSE ( 1L << 10 ) +#define FT_LOAD_IGNORE_TRANSFORM ( 1L << 11 ) +#define FT_LOAD_MONOCHROME ( 1L << 12 ) +#define FT_LOAD_LINEAR_DESIGN ( 1L << 13 ) +#define FT_LOAD_SBITS_ONLY ( 1L << 14 ) +#define FT_LOAD_NO_AUTOHINT ( 1L << 15 ) + /* Bits 16-19 are used by `FT_LOAD_TARGET_` */ +#define FT_LOAD_COLOR ( 1L << 20 ) +#define FT_LOAD_COMPUTE_METRICS ( 1L << 21 ) +#define FT_LOAD_BITMAP_METRICS_ONLY ( 1L << 22 ) +#define FT_LOAD_NO_SVG ( 1L << 24 ) + + /* */ + + /* used internally only by certain font drivers */ +#define FT_LOAD_ADVANCE_ONLY ( 1L << 8 ) +#define FT_LOAD_SVG_ONLY ( 1L << 23 ) + + + /************************************************************************** + * + * @enum: + * FT_LOAD_TARGET_XXX + * + * @description: + * A list of values to select a specific hinting algorithm for the + * hinter. You should OR one of these values to your `load_flags` when + * calling @FT_Load_Glyph. + * + * Note that a font's native hinters may ignore the hinting algorithm you + * have specified (e.g., the TrueType bytecode interpreter). You can set + * @FT_LOAD_FORCE_AUTOHINT to ensure that the auto-hinter is used. + * + * @values: + * FT_LOAD_TARGET_NORMAL :: + * The default hinting algorithm, optimized for standard gray-level + * rendering. For monochrome output, use @FT_LOAD_TARGET_MONO instead. + * + * FT_LOAD_TARGET_LIGHT :: + * A lighter hinting algorithm for gray-level modes. Many generated + * glyphs are fuzzier but better resemble their original shape. This + * is achieved by snapping glyphs to the pixel grid only vertically + * (Y-axis), as is done by FreeType's new CFF engine or Microsoft's + * ClearType font renderer. This preserves inter-glyph spacing in + * horizontal text. The snapping is done either by the native font + * driver, if the driver itself and the font support it, or by the + * auto-hinter. + * + * Advance widths are rounded to integer values; however, using the + * `lsb_delta` and `rsb_delta` fields of @FT_GlyphSlotRec, it is + * possible to get fractional advance widths for subpixel positioning + * (which is recommended to use). + * + * If configuration option `AF_CONFIG_OPTION_TT_SIZE_METRICS` is + * active, TrueType-like metrics are used to make this mode behave + * similarly as in unpatched FreeType versions between 2.4.6 and 2.7.1 + * (inclusive). + * + * FT_LOAD_TARGET_MONO :: + * Strong hinting algorithm that should only be used for monochrome + * output. The result is probably unpleasant if the glyph is rendered + * in non-monochrome modes. + * + * Note that for outline fonts only the TrueType font driver has proper + * monochrome hinting support, provided the TTFs contain hints for B/W + * rendering (which most fonts no longer provide). If these conditions + * are not met it is very likely that you get ugly results at smaller + * sizes. + * + * FT_LOAD_TARGET_LCD :: + * A variant of @FT_LOAD_TARGET_LIGHT optimized for horizontally + * decimated LCD displays. + * + * FT_LOAD_TARGET_LCD_V :: + * A variant of @FT_LOAD_TARGET_NORMAL optimized for vertically + * decimated LCD displays. + * + * @note: + * You should use only _one_ of the `FT_LOAD_TARGET_XXX` values in your + * `load_flags`. They can't be ORed. + * + * If @FT_LOAD_RENDER is also set, the glyph is rendered in the + * corresponding mode (i.e., the mode that matches the used algorithm + * best). An exception is `FT_LOAD_TARGET_MONO` since it implies + * @FT_LOAD_MONOCHROME. + * + * You can use a hinting algorithm that doesn't correspond to the same + * rendering mode. As an example, it is possible to use the 'light' + * hinting algorithm and have the results rendered in horizontal LCD + * pixel mode, with code like + * + * ``` + * FT_Load_Glyph( face, glyph_index, + * load_flags | FT_LOAD_TARGET_LIGHT ); + * + * FT_Render_Glyph( face->glyph, FT_RENDER_MODE_LCD ); + * ``` + * + * In general, you should stick with one rendering mode. For example, + * switching between @FT_LOAD_TARGET_NORMAL and @FT_LOAD_TARGET_MONO + * enforces a lot of recomputation for TrueType fonts, which is slow. + * Another reason is caching: Selecting a different mode usually causes + * changes in both the outlines and the rasterized bitmaps; it is thus + * necessary to empty the cache after a mode switch to avoid false hits. + * + */ +#define FT_LOAD_TARGET_( x ) ( FT_STATIC_CAST( FT_Int32, (x) & 15 ) << 16 ) + +#define FT_LOAD_TARGET_NORMAL FT_LOAD_TARGET_( FT_RENDER_MODE_NORMAL ) +#define FT_LOAD_TARGET_LIGHT FT_LOAD_TARGET_( FT_RENDER_MODE_LIGHT ) +#define FT_LOAD_TARGET_MONO FT_LOAD_TARGET_( FT_RENDER_MODE_MONO ) +#define FT_LOAD_TARGET_LCD FT_LOAD_TARGET_( FT_RENDER_MODE_LCD ) +#define FT_LOAD_TARGET_LCD_V FT_LOAD_TARGET_( FT_RENDER_MODE_LCD_V ) + + + /************************************************************************** + * + * @macro: + * FT_LOAD_TARGET_MODE + * + * @description: + * Return the @FT_Render_Mode corresponding to a given + * @FT_LOAD_TARGET_XXX value. + * + */ +#define FT_LOAD_TARGET_MODE( x ) \ + FT_STATIC_CAST( FT_Render_Mode, ( (x) >> 16 ) & 15 ) + + + /************************************************************************** + * + * @section: + * sizing_and_scaling + * + */ + + /************************************************************************** + * + * @function: + * FT_Set_Transform + * + * @description: + * Set the transformation that is applied to glyph images when they are + * loaded into a glyph slot through @FT_Load_Glyph. + * + * @inout: + * face :: + * A handle to the source face object. + * + * @input: + * matrix :: + * A pointer to the transformation's 2x2 matrix. Use `NULL` for the + * identity matrix. + * delta :: + * A pointer to the translation vector. Use `NULL` for the null + * vector. + * + * @note: + * This function is provided as a convenience, but keep in mind that + * @FT_Matrix coefficients are only 16.16 fixed-point values, which can + * limit the accuracy of the results. Using floating-point computations + * to perform the transform directly in client code instead will always + * yield better numbers. + * + * The transformation is only applied to scalable image formats after the + * glyph has been loaded. It means that hinting is unaltered by the + * transformation and is performed on the character size given in the + * last call to @FT_Set_Char_Size or @FT_Set_Pixel_Sizes. + * + * Note that this also transforms the `face.glyph.advance` field, but + * **not** the values in `face.glyph.metrics`. + */ + FT_EXPORT( void ) + FT_Set_Transform( FT_Face face, + FT_Matrix* matrix, + FT_Vector* delta ); + + + /************************************************************************** + * + * @function: + * FT_Get_Transform + * + * @description: + * Return the transformation that is applied to glyph images when they + * are loaded into a glyph slot through @FT_Load_Glyph. See + * @FT_Set_Transform for more details. + * + * @input: + * face :: + * A handle to the source face object. + * + * @output: + * matrix :: + * A pointer to a transformation's 2x2 matrix. Set this to NULL if you + * are not interested in the value. + * + * delta :: + * A pointer to a translation vector. Set this to NULL if you are not + * interested in the value. + * + * @since: + * 2.11 + * + */ + FT_EXPORT( void ) + FT_Get_Transform( FT_Face face, + FT_Matrix* matrix, + FT_Vector* delta ); + + + /************************************************************************** + * + * @section: + * glyph_retrieval + * + */ + + /************************************************************************** + * + * @enum: + * FT_Render_Mode + * + * @description: + * Render modes supported by FreeType~2. Each mode corresponds to a + * specific type of scanline conversion performed on the outline. + * + * For bitmap fonts and embedded bitmaps the `bitmap->pixel_mode` field + * in the @FT_GlyphSlotRec structure gives the format of the returned + * bitmap. + * + * All modes except @FT_RENDER_MODE_MONO use 256 levels of opacity, + * indicating pixel coverage. Use linear alpha blending and gamma + * correction to correctly render non-monochrome glyph bitmaps onto a + * surface; see @FT_Render_Glyph. + * + * The @FT_RENDER_MODE_SDF is a special render mode that uses up to 256 + * distance values, indicating the signed distance from the grid position + * to the nearest outline. + * + * @values: + * FT_RENDER_MODE_NORMAL :: + * Default render mode; it corresponds to 8-bit anti-aliased bitmaps. + * + * FT_RENDER_MODE_LIGHT :: + * This is equivalent to @FT_RENDER_MODE_NORMAL. It is only defined as + * a separate value because render modes are also used indirectly to + * define hinting algorithm selectors. See @FT_LOAD_TARGET_XXX for + * details. + * + * FT_RENDER_MODE_MONO :: + * This mode corresponds to 1-bit bitmaps (with 2~levels of opacity). + * + * FT_RENDER_MODE_LCD :: + * This mode corresponds to horizontal RGB and BGR subpixel displays + * like LCD screens. It produces 8-bit bitmaps that are 3~times the + * width of the original glyph outline in pixels, and which use the + * @FT_PIXEL_MODE_LCD mode. + * + * FT_RENDER_MODE_LCD_V :: + * This mode corresponds to vertical RGB and BGR subpixel displays + * (like PDA screens, rotated LCD displays, etc.). It produces 8-bit + * bitmaps that are 3~times the height of the original glyph outline in + * pixels and use the @FT_PIXEL_MODE_LCD_V mode. + * + * FT_RENDER_MODE_SDF :: + * The positive (unsigned) 8-bit bitmap values can be converted to the + * single-channel signed distance field (SDF) by subtracting 128, with + * the positive and negative results corresponding to the inside and + * the outside of a glyph contour, respectively. The distance units are + * arbitrarily determined by an adjustable @spread property. + * + * @note: + * The selected render mode only affects scalable vector glyphs of a font. + * Embedded bitmaps often have a different pixel mode like + * @FT_PIXEL_MODE_MONO. You can use @FT_Bitmap_Convert to transform them + * into 8-bit pixmaps. + * + */ + typedef enum FT_Render_Mode_ + { + FT_RENDER_MODE_NORMAL = 0, + FT_RENDER_MODE_LIGHT, + FT_RENDER_MODE_MONO, + FT_RENDER_MODE_LCD, + FT_RENDER_MODE_LCD_V, + FT_RENDER_MODE_SDF, + + FT_RENDER_MODE_MAX + + } FT_Render_Mode; + + + /* these constants are deprecated; use the corresponding */ + /* `FT_Render_Mode` values instead */ +#define ft_render_mode_normal FT_RENDER_MODE_NORMAL +#define ft_render_mode_mono FT_RENDER_MODE_MONO + + + /************************************************************************** + * + * @function: + * FT_Render_Glyph + * + * @description: + * Convert a given glyph image to a bitmap. It does so by inspecting the + * glyph image format, finding the relevant renderer, and invoking it. + * + * @inout: + * slot :: + * A handle to the glyph slot containing the image to convert. + * + * @input: + * render_mode :: + * The render mode used to render the glyph image into a bitmap. See + * @FT_Render_Mode for a list of possible values. + * + * If @FT_RENDER_MODE_NORMAL is used, a previous call of @FT_Load_Glyph + * with flag @FT_LOAD_COLOR makes `FT_Render_Glyph` provide a default + * blending of colored glyph layers associated with the current glyph + * slot (provided the font contains such layers) instead of rendering + * the glyph slot's outline. This is an experimental feature; see + * @FT_LOAD_COLOR for more information. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * When FreeType outputs a bitmap of a glyph, it really outputs an alpha + * coverage map. If a pixel is completely covered by a filled-in + * outline, the bitmap contains 0xFF at that pixel, meaning that + * 0xFF/0xFF fraction of that pixel is covered, meaning the pixel is 100% + * black (or 0% bright). If a pixel is only 50% covered (value 0x80), + * the pixel is made 50% black (50% bright or a middle shade of grey). + * 0% covered means 0% black (100% bright or white). + * + * On high-DPI screens like on smartphones and tablets, the pixels are so + * small that their chance of being completely covered and therefore + * completely black are fairly good. On the low-DPI screens, however, + * the situation is different. The pixels are too large for most of the + * details of a glyph and shades of gray are the norm rather than the + * exception. + * + * This is relevant because all our screens have a second problem: they + * are not linear. 1~+~1 is not~2. Twice the value does not result in + * twice the brightness. When a pixel is only 50% covered, the coverage + * map says 50% black, and this translates to a pixel value of 128 when + * you use 8~bits per channel (0-255). However, this does not translate + * to 50% brightness for that pixel on our sRGB and gamma~2.2 screens. + * Due to their non-linearity, they dwell longer in the darks and only a + * pixel value of about 186 results in 50% brightness -- 128 ends up too + * dark on both bright and dark backgrounds. The net result is that dark + * text looks burnt-out, pixely and blotchy on bright background, bright + * text too frail on dark backgrounds, and colored text on colored + * background (for example, red on green) seems to have dark halos or + * 'dirt' around it. The situation is especially ugly for diagonal stems + * like in 'w' glyph shapes where the quality of FreeType's anti-aliasing + * depends on the correct display of grays. On high-DPI screens where + * smaller, fully black pixels reign supreme, this doesn't matter, but on + * our low-DPI screens with all the gray shades, it does. 0% and 100% + * brightness are the same things in linear and non-linear space, just + * all the shades in-between aren't. + * + * The blending function for placing text over a background is + * + * ``` + * dst = alpha * src + (1 - alpha) * dst , + * ``` + * + * which is known as the OVER operator. + * + * To correctly composite an anti-aliased pixel of a glyph onto a + * surface, + * + * 1. take the foreground and background colors (e.g., in sRGB space) + * and apply gamma to get them in a linear space, + * + * 2. use OVER to blend the two linear colors using the glyph pixel + * as the alpha value (remember, the glyph bitmap is an alpha coverage + * bitmap), and + * + * 3. apply inverse gamma to the blended pixel and write it back to + * the image. + * + * Internal testing at Adobe found that a target inverse gamma of~1.8 for + * step~3 gives good results across a wide range of displays with an sRGB + * gamma curve or a similar one. + * + * This process can cost performance. There is an approximation that + * does not need to know about the background color; see + * https://web.archive.org/web/20211019204945/https://bel.fi/alankila/lcd/ + * and + * https://web.archive.org/web/20210211002939/https://bel.fi/alankila/lcd/alpcor.html + * for details. + * + * **ATTENTION**: Linear blending is even more important when dealing + * with subpixel-rendered glyphs to prevent color-fringing! A + * subpixel-rendered glyph must first be filtered with a filter that + * gives equal weight to the three color primaries and does not exceed a + * sum of 0x100, see section @lcd_rendering. Then the only difference to + * gray linear blending is that subpixel-rendered linear blending is done + * 3~times per pixel: red foreground subpixel to red background subpixel + * and so on for green and blue. + */ + FT_EXPORT( FT_Error ) + FT_Render_Glyph( FT_GlyphSlot slot, + FT_Render_Mode render_mode ); + + + /************************************************************************** + * + * @enum: + * FT_Kerning_Mode + * + * @description: + * An enumeration to specify the format of kerning values returned by + * @FT_Get_Kerning. + * + * @values: + * FT_KERNING_DEFAULT :: + * Return grid-fitted kerning distances in 26.6 fractional pixels. + * + * FT_KERNING_UNFITTED :: + * Return un-grid-fitted kerning distances in 26.6 fractional pixels. + * + * FT_KERNING_UNSCALED :: + * Return the kerning vector in original font units. + * + * @note: + * `FT_KERNING_DEFAULT` returns full pixel values; it also makes FreeType + * heuristically scale down kerning distances at small ppem values so + * that they don't become too big. + * + * Both `FT_KERNING_DEFAULT` and `FT_KERNING_UNFITTED` use the current + * horizontal scaling factor (as set e.g. with @FT_Set_Char_Size) to + * convert font units to pixels. + */ + typedef enum FT_Kerning_Mode_ + { + FT_KERNING_DEFAULT = 0, + FT_KERNING_UNFITTED, + FT_KERNING_UNSCALED + + } FT_Kerning_Mode; + + + /* these constants are deprecated; use the corresponding */ + /* `FT_Kerning_Mode` values instead */ +#define ft_kerning_default FT_KERNING_DEFAULT +#define ft_kerning_unfitted FT_KERNING_UNFITTED +#define ft_kerning_unscaled FT_KERNING_UNSCALED + + + /************************************************************************** + * + * @function: + * FT_Get_Kerning + * + * @description: + * Return the kerning vector between two glyphs of the same face. + * + * @input: + * face :: + * A handle to a source face object. + * + * left_glyph :: + * The index of the left glyph in the kern pair. + * + * right_glyph :: + * The index of the right glyph in the kern pair. + * + * kern_mode :: + * See @FT_Kerning_Mode for more information. Determines the scale and + * dimension of the returned kerning vector. + * + * @output: + * akerning :: + * The kerning vector. This is either in font units, fractional pixels + * (26.6 format), or pixels for scalable formats, and in pixels for + * fixed-sizes formats. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * Only horizontal layouts (left-to-right & right-to-left) are supported + * by this method. Other layouts, or more sophisticated kernings, are + * out of the scope of this API function -- they can be implemented + * through format-specific interfaces. + * + * Note that, for TrueType and OpenType fonts only, this can extract data + * from both the 'kern' table and the basic, pair-wise kerning feature + * from the GPOS table (with `TT_CONFIG_OPTION_GPOS_KERNING` enabled), + * though FreeType does not support the more advanced GPOS layout + * features; use a library like HarfBuzz for those instead. If a font + * has both a 'kern' table and kern features of a GPOS table, the 'kern' + * table will be used. + * + * Also note for right-to-left scripts, the functionality may differ for + * fonts with GPOS tables vs. 'kern' tables. For GPOS, right-to-left + * fonts typically use both a placement offset and an advance for pair + * positioning, which this API does not support, so it would output + * kerning values of zero; though if the right-to-left font used only + * advances in GPOS pair positioning, then this API could output kerning + * values for it, but it would use `left_glyph` to mean the first glyph + * for that case. Whereas 'kern' tables are always advance-only and + * always store the left glyph first. + * + * Use @FT_HAS_KERNING to find out whether a font has data that can be + * extracted with `FT_Get_Kerning`. + */ + FT_EXPORT( FT_Error ) + FT_Get_Kerning( FT_Face face, + FT_UInt left_glyph, + FT_UInt right_glyph, + FT_UInt kern_mode, + FT_Vector *akerning ); + + + /************************************************************************** + * + * @function: + * FT_Get_Track_Kerning + * + * @description: + * Return the track kerning for a given face object at a given size. + * + * @input: + * face :: + * A handle to a source face object. + * + * point_size :: + * The point size in 16.16 fractional points. + * + * degree :: + * The degree of tightness. Increasingly negative values represent + * tighter track kerning, while increasingly positive values represent + * looser track kerning. Value zero means no track kerning. + * + * @output: + * akerning :: + * The kerning in 16.16 fractional points, to be uniformly applied + * between all glyphs. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * Currently, only the Type~1 font driver supports track kerning, using + * data from AFM files (if attached with @FT_Attach_File or + * @FT_Attach_Stream). + * + * Only very few AFM files come with track kerning data; please refer to + * Adobe's AFM specification for more details. + */ + FT_EXPORT( FT_Error ) + FT_Get_Track_Kerning( FT_Face face, + FT_Fixed point_size, + FT_Int degree, + FT_Fixed* akerning ); + + + /************************************************************************** + * + * @section: + * character_mapping + * + */ + + /************************************************************************** + * + * @function: + * FT_Select_Charmap + * + * @description: + * Select a given charmap by its encoding tag (as listed in + * `freetype.h`). + * + * @inout: + * face :: + * A handle to the source face object. + * + * @input: + * encoding :: + * A handle to the selected encoding. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * This function returns an error if no charmap in the face corresponds + * to the encoding queried here. + * + * Because many fonts contain more than a single cmap for Unicode + * encoding, this function has some special code to select the one that + * covers Unicode best ('best' in the sense that a UCS-4 cmap is + * preferred to a UCS-2 cmap). It is thus preferable to @FT_Set_Charmap + * in this case. + */ + FT_EXPORT( FT_Error ) + FT_Select_Charmap( FT_Face face, + FT_Encoding encoding ); + + + /************************************************************************** + * + * @function: + * FT_Set_Charmap + * + * @description: + * Select a given charmap for character code to glyph index mapping. + * + * @inout: + * face :: + * A handle to the source face object. + * + * @input: + * charmap :: + * A handle to the selected charmap. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * This function returns an error if the charmap is not part of the face + * (i.e., if it is not listed in the `face->charmaps` table). + * + * It also fails if an OpenType type~14 charmap is selected (which + * doesn't map character codes to glyph indices at all). + */ + FT_EXPORT( FT_Error ) + FT_Set_Charmap( FT_Face face, + FT_CharMap charmap ); + + + /************************************************************************** + * + * @function: + * FT_Get_Charmap_Index + * + * @description: + * Retrieve index of a given charmap. + * + * @input: + * charmap :: + * A handle to a charmap. + * + * @return: + * The index into the array of character maps within the face to which + * `charmap` belongs. If an error occurs, -1 is returned. + * + */ + FT_EXPORT( FT_Int ) + FT_Get_Charmap_Index( FT_CharMap charmap ); + + + /************************************************************************** + * + * @function: + * FT_Get_Char_Index + * + * @description: + * Return the glyph index of a given character code. This function uses + * the currently selected charmap to do the mapping. + * + * @input: + * face :: + * A handle to the source face object. + * + * charcode :: + * The character code. + * + * @return: + * The glyph index. 0~means 'undefined character code'. + * + * @note: + * If you use FreeType to manipulate the contents of font files directly, + * be aware that the glyph index returned by this function doesn't always + * correspond to the internal indices used within the file. This is done + * to ensure that value~0 always corresponds to the 'missing glyph'. If + * the first glyph is not named '.notdef', then for Type~1 and Type~42 + * fonts, '.notdef' will be moved into the glyph ID~0 position, and + * whatever was there will be moved to the position '.notdef' had. For + * Type~1 fonts, if there is no '.notdef' glyph at all, then one will be + * created at index~0 and whatever was there will be moved to the last + * index -- Type~42 fonts are considered invalid under this condition. + */ + FT_EXPORT( FT_UInt ) + FT_Get_Char_Index( FT_Face face, + FT_ULong charcode ); + + + /************************************************************************** + * + * @function: + * FT_Get_First_Char + * + * @description: + * Return the first character code in the current charmap of a given + * face, together with its corresponding glyph index. + * + * @input: + * face :: + * A handle to the source face object. + * + * @output: + * agindex :: + * Glyph index of first character code. 0~if charmap is empty. + * + * @return: + * The charmap's first character code. + * + * @note: + * You should use this function together with @FT_Get_Next_Char to parse + * all character codes available in a given charmap. The code should + * look like this: + * + * ``` + * FT_ULong charcode; + * FT_UInt gindex; + * + * + * charcode = FT_Get_First_Char( face, &gindex ); + * while ( gindex != 0 ) + * { + * ... do something with (charcode,gindex) pair ... + * + * charcode = FT_Get_Next_Char( face, charcode, &gindex ); + * } + * ``` + * + * Be aware that character codes can have values up to 0xFFFFFFFF; this + * might happen for non-Unicode or malformed cmaps. However, even with + * regular Unicode encoding, so-called 'last resort fonts' (using SFNT + * cmap format 13, see function @FT_Get_CMap_Format) normally have + * entries for all Unicode characters up to 0x1FFFFF, which can cause *a + * lot* of iterations. + * + * Note that `*agindex` is set to~0 if the charmap is empty. The result + * itself can be~0 in two cases: if the charmap is empty or if the + * value~0 is the first valid character code. + */ + FT_EXPORT( FT_ULong ) + FT_Get_First_Char( FT_Face face, + FT_UInt *agindex ); + + + /************************************************************************** + * + * @function: + * FT_Get_Next_Char + * + * @description: + * Return the next character code in the current charmap of a given face + * following the value `char_code`, as well as the corresponding glyph + * index. + * + * @input: + * face :: + * A handle to the source face object. + * + * char_code :: + * The starting character code. + * + * @output: + * agindex :: + * Glyph index of next character code. 0~if charmap is empty. + * + * @return: + * The charmap's next character code. + * + * @note: + * You should use this function with @FT_Get_First_Char to walk over all + * character codes available in a given charmap. See the note for that + * function for a simple code example. + * + * Note that `*agindex` is set to~0 when there are no more codes in the + * charmap. + */ + FT_EXPORT( FT_ULong ) + FT_Get_Next_Char( FT_Face face, + FT_ULong char_code, + FT_UInt *agindex ); + + + /************************************************************************** + * + * @section: + * face_creation + * + */ + + /************************************************************************** + * + * @function: + * FT_Face_Properties + * + * @description: + * Set or override certain (library or module-wide) properties on a + * face-by-face basis. Useful for finer-grained control and avoiding + * locks on shared structures (threads can modify their own faces as they + * see fit). + * + * Contrary to @FT_Property_Set, this function uses @FT_Parameter so that + * you can pass multiple properties to the target face in one call. Note + * that only a subset of the available properties can be controlled. + * + * * @FT_PARAM_TAG_STEM_DARKENING (stem darkening, corresponding to the + * property `no-stem-darkening` provided by the 'autofit', 'cff', + * 'type1', and 't1cid' modules; see @no-stem-darkening). + * + * * @FT_PARAM_TAG_LCD_FILTER_WEIGHTS (LCD filter weights, corresponding + * to function @FT_Library_SetLcdFilterWeights). + * + * * @FT_PARAM_TAG_RANDOM_SEED (seed value for the CFF, Type~1, and CID + * 'random' operator, corresponding to the `random-seed` property + * provided by the 'cff', 'type1', and 't1cid' modules; see + * @random-seed). + * + * Pass `NULL` as `data` in @FT_Parameter for a given tag to reset the + * option and use the library or module default again. + * + * @input: + * face :: + * A handle to the source face object. + * + * num_properties :: + * The number of properties that follow. + * + * properties :: + * A handle to an @FT_Parameter array with `num_properties` elements. + * + * @return: + * FreeType error code. 0~means success. + * + * @example: + * Here is an example that sets three properties. You must define + * `FT_CONFIG_OPTION_SUBPIXEL_RENDERING` to make the LCD filter examples + * work. + * + * ``` + * FT_Parameter property1; + * FT_Bool darken_stems = 1; + * + * FT_Parameter property2; + * FT_LcdFiveTapFilter custom_weight = + * { 0x11, 0x44, 0x56, 0x44, 0x11 }; + * + * FT_Parameter property3; + * FT_Int32 random_seed = 314159265; + * + * FT_Parameter properties[3] = { property1, + * property2, + * property3 }; + * + * + * property1.tag = FT_PARAM_TAG_STEM_DARKENING; + * property1.data = &darken_stems; + * + * property2.tag = FT_PARAM_TAG_LCD_FILTER_WEIGHTS; + * property2.data = custom_weight; + * + * property3.tag = FT_PARAM_TAG_RANDOM_SEED; + * property3.data = &random_seed; + * + * FT_Face_Properties( face, 3, properties ); + * ``` + * + * The next example resets a single property to its default value. + * + * ``` + * FT_Parameter property; + * + * + * property.tag = FT_PARAM_TAG_LCD_FILTER_WEIGHTS; + * property.data = NULL; + * + * FT_Face_Properties( face, 1, &property ); + * ``` + * + * @since: + * 2.8 + * + */ + FT_EXPORT( FT_Error ) + FT_Face_Properties( FT_Face face, + FT_UInt num_properties, + FT_Parameter* properties ); + + + /************************************************************************** + * + * @section: + * information_retrieval + * + */ + + /************************************************************************** + * + * @function: + * FT_Get_Name_Index + * + * @description: + * Return the glyph index of a given glyph name. This only works + * for those faces where @FT_HAS_GLYPH_NAMES returns true. + * + * @input: + * face :: + * A handle to the source face object. + * + * glyph_name :: + * The glyph name. + * + * @return: + * The glyph index. 0~means 'undefined character code'. + * + * @note: + * Acceptable glyph names might come from the [Adobe Glyph + * List](https://github.com/adobe-type-tools/agl-aglfn). See + * @FT_Get_Glyph_Name for the inverse functionality. + * + * This function has limited capabilities if the config macro + * `FT_CONFIG_OPTION_POSTSCRIPT_NAMES` is not defined in `ftoption.h`: + * It then works only for fonts that actually embed glyph names (which + * many recent OpenType fonts do not). + */ + FT_EXPORT( FT_UInt ) + FT_Get_Name_Index( FT_Face face, + const FT_String* glyph_name ); + + + /************************************************************************** + * + * @function: + * FT_Get_Glyph_Name + * + * @description: + * Retrieve the ASCII name of a given glyph in a face. This only works + * for those faces where @FT_HAS_GLYPH_NAMES returns true. + * + * @input: + * face :: + * A handle to a source face object. + * + * glyph_index :: + * The glyph index. + * + * buffer_max :: + * The maximum number of bytes available in the buffer. + * + * @output: + * buffer :: + * A pointer to a target buffer where the name is copied to. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * An error is returned if the face doesn't provide glyph names or if the + * glyph index is invalid. In all cases of failure, the first byte of + * `buffer` is set to~0 to indicate an empty name. + * + * The glyph name is truncated to fit within the buffer if it is too + * long. The returned string is always zero-terminated. + * + * Be aware that FreeType reorders glyph indices internally so that glyph + * index~0 always corresponds to the 'missing glyph' (called '.notdef'). + * + * This function has limited capabilities if the config macro + * `FT_CONFIG_OPTION_POSTSCRIPT_NAMES` is not defined in `ftoption.h`: + * It then works only for fonts that actually embed glyph names (which + * many recent OpenType fonts do not). + */ + FT_EXPORT( FT_Error ) + FT_Get_Glyph_Name( FT_Face face, + FT_UInt glyph_index, + FT_Pointer buffer, + FT_UInt buffer_max ); + + + /************************************************************************** + * + * @function: + * FT_Get_Postscript_Name + * + * @description: + * Retrieve the ASCII PostScript name of a given face, if available. + * This only works with PostScript, TrueType, and OpenType fonts. + * + * @input: + * face :: + * A handle to the source face object. + * + * @return: + * A pointer to the face's PostScript name. `NULL` if unavailable. + * + * @note: + * The returned pointer is owned by the face and is destroyed with it. + * + * For variation fonts, this string changes if you select a different + * instance, and you have to call `FT_Get_PostScript_Name` again to + * retrieve it. FreeType follows Adobe TechNote #5902, 'Generating + * PostScript Names for Fonts Using OpenType Font Variations'. + * + * https://download.macromedia.com/pub/developer/opentype/tech-notes/5902.AdobePSNameGeneration.html + * + * [Since 2.9] Special PostScript names for named instances are only + * returned if the named instance is set with @FT_Set_Named_Instance (and + * the font has corresponding entries in its 'fvar' table or is the + * default named instance). If @FT_IS_VARIATION returns true, the + * algorithmically derived PostScript name is provided, not looking up + * special entries for named instances. + */ + FT_EXPORT( const char* ) + FT_Get_Postscript_Name( FT_Face face ); + + + /************************************************************************** + * + * @enum: + * FT_SUBGLYPH_FLAG_XXX + * + * @description: + * A list of constants describing subglyphs. Please refer to the 'glyf' + * table description in the OpenType specification for the meaning of the + * various flags (which get synthesized for non-OpenType subglyphs). + * + * https://learn.microsoft.com/typography/opentype/spec/glyf#composite-glyph-description + * + * @values: + * FT_SUBGLYPH_FLAG_ARGS_ARE_WORDS :: + * FT_SUBGLYPH_FLAG_ARGS_ARE_XY_VALUES :: + * FT_SUBGLYPH_FLAG_ROUND_XY_TO_GRID :: + * FT_SUBGLYPH_FLAG_SCALE :: + * FT_SUBGLYPH_FLAG_XY_SCALE :: + * FT_SUBGLYPH_FLAG_2X2 :: + * FT_SUBGLYPH_FLAG_USE_MY_METRICS :: + * + */ +#define FT_SUBGLYPH_FLAG_ARGS_ARE_WORDS 1 +#define FT_SUBGLYPH_FLAG_ARGS_ARE_XY_VALUES 2 +#define FT_SUBGLYPH_FLAG_ROUND_XY_TO_GRID 4 +#define FT_SUBGLYPH_FLAG_SCALE 8 +#define FT_SUBGLYPH_FLAG_XY_SCALE 0x40 +#define FT_SUBGLYPH_FLAG_2X2 0x80 +#define FT_SUBGLYPH_FLAG_USE_MY_METRICS 0x200 + + + /************************************************************************** + * + * @function: + * FT_Get_SubGlyph_Info + * + * @description: + * Retrieve a description of a given subglyph. Only use it if + * `glyph->format` is @FT_GLYPH_FORMAT_COMPOSITE; an error is returned + * otherwise. + * + * @input: + * glyph :: + * The source glyph slot. + * + * sub_index :: + * The index of the subglyph. Must be less than + * `glyph->num_subglyphs`. + * + * @output: + * p_index :: + * The glyph index of the subglyph. + * + * p_flags :: + * The subglyph flags, see @FT_SUBGLYPH_FLAG_XXX. + * + * p_arg1 :: + * The subglyph's first argument (if any). + * + * p_arg2 :: + * The subglyph's second argument (if any). + * + * p_transform :: + * The subglyph transformation (if any). + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * The values of `*p_arg1`, `*p_arg2`, and `*p_transform` must be + * interpreted depending on the flags returned in `*p_flags`. See the + * OpenType specification for details. + * + * https://learn.microsoft.com/typography/opentype/spec/glyf#composite-glyph-description + * + */ + FT_EXPORT( FT_Error ) + FT_Get_SubGlyph_Info( FT_GlyphSlot glyph, + FT_UInt sub_index, + FT_Int *p_index, + FT_UInt *p_flags, + FT_Int *p_arg1, + FT_Int *p_arg2, + FT_Matrix *p_transform ); + + + /************************************************************************** + * + * @enum: + * FT_FSTYPE_XXX + * + * @description: + * A list of bit flags used in the `fsType` field of the OS/2 table in a + * TrueType or OpenType font and the `FSType` entry in a PostScript font. + * These bit flags are returned by @FT_Get_FSType_Flags; they inform + * client applications of embedding and subsetting restrictions + * associated with a font. + * + * See + * https://adobe-type-tools.github.io/font-tech-notes/pdfs/AcrobatDC_FontPolicies.pdf + * for more details. + * + * @values: + * FT_FSTYPE_INSTALLABLE_EMBEDDING :: + * Fonts with no fsType bit set may be embedded and permanently + * installed on the remote system by an application. + * + * FT_FSTYPE_RESTRICTED_LICENSE_EMBEDDING :: + * Fonts that have only this bit set must not be modified, embedded or + * exchanged in any manner without first obtaining permission of the + * font software copyright owner. + * + * FT_FSTYPE_PREVIEW_AND_PRINT_EMBEDDING :: + * The font may be embedded and temporarily loaded on the remote + * system. Documents containing Preview & Print fonts must be opened + * 'read-only'; no edits can be applied to the document. + * + * FT_FSTYPE_EDITABLE_EMBEDDING :: + * The font may be embedded but must only be installed temporarily on + * other systems. In contrast to Preview & Print fonts, documents + * containing editable fonts may be opened for reading, editing is + * permitted, and changes may be saved. + * + * FT_FSTYPE_NO_SUBSETTING :: + * The font may not be subsetted prior to embedding. + * + * FT_FSTYPE_BITMAP_EMBEDDING_ONLY :: + * Only bitmaps contained in the font may be embedded; no outline data + * may be embedded. If there are no bitmaps available in the font, + * then the font is unembeddable. + * + * @note: + * The flags are ORed together, thus more than a single value can be + * returned. + * + * While the `fsType` flags can indicate that a font may be embedded, a + * license with the font vendor may be separately required to use the + * font in this way. + */ +#define FT_FSTYPE_INSTALLABLE_EMBEDDING 0x0000 +#define FT_FSTYPE_RESTRICTED_LICENSE_EMBEDDING 0x0002 +#define FT_FSTYPE_PREVIEW_AND_PRINT_EMBEDDING 0x0004 +#define FT_FSTYPE_EDITABLE_EMBEDDING 0x0008 +#define FT_FSTYPE_NO_SUBSETTING 0x0100 +#define FT_FSTYPE_BITMAP_EMBEDDING_ONLY 0x0200 + + + /************************************************************************** + * + * @function: + * FT_Get_FSType_Flags + * + * @description: + * Return the `fsType` flags for a font. + * + * @input: + * face :: + * A handle to the source face object. + * + * @return: + * The `fsType` flags, see @FT_FSTYPE_XXX. + * + * @note: + * Use this function rather than directly reading the `fs_type` field in + * the @PS_FontInfoRec structure, which is only guaranteed to return the + * correct results for Type~1 fonts. + * + * @since: + * 2.3.8 + * + */ + FT_EXPORT( FT_UShort ) + FT_Get_FSType_Flags( FT_Face face ); + + + /************************************************************************** + * + * @section: + * glyph_variants + * + * @title: + * Unicode Variation Sequences + * + * @abstract: + * The FreeType~2 interface to Unicode Variation Sequences (UVS), using + * the SFNT cmap format~14. + * + * @description: + * Many characters, especially for CJK scripts, have variant forms. They + * are a sort of grey area somewhere between being totally irrelevant and + * semantically distinct; for this reason, the Unicode consortium decided + * to introduce Variation Sequences (VS), consisting of a Unicode base + * character and a variation selector instead of further extending the + * already huge number of characters. + * + * Unicode maintains two different sets, namely 'Standardized Variation + * Sequences' and registered 'Ideographic Variation Sequences' (IVS), + * collected in the 'Ideographic Variation Database' (IVD). + * + * https://unicode.org/Public/UCD/latest/ucd/StandardizedVariants.txt + * https://unicode.org/reports/tr37/ https://unicode.org/ivd/ + * + * To date (January 2017), the character with the most ideographic + * variations is U+9089, having 32 such IVS. + * + * Three Mongolian Variation Selectors have the values U+180B-U+180D; 256 + * generic Variation Selectors are encoded in the ranges U+FE00-U+FE0F + * and U+E0100-U+E01EF. IVS currently use Variation Selectors from the + * range U+E0100-U+E01EF only. + * + * A VS consists of the base character value followed by a single + * Variation Selector. For example, to get the first variation of + * U+9089, you have to write the character sequence `U+9089 U+E0100`. + * + * Adobe and MS decided to support both standardized and ideographic VS + * with a new cmap subtable (format~14). It is an odd subtable because + * it is not a mapping of input code points to glyphs, but contains lists + * of all variations supported by the font. + * + * A variation may be either 'default' or 'non-default' for a given font. + * A default variation is the one you will get for that code point if you + * look it up in the standard Unicode cmap. A non-default variation is a + * different glyph. + * + */ + + + /************************************************************************** + * + * @function: + * FT_Face_GetCharVariantIndex + * + * @description: + * Return the glyph index of a given character code as modified by the + * variation selector. + * + * @input: + * face :: + * A handle to the source face object. + * + * charcode :: + * The character code point in Unicode. + * + * variantSelector :: + * The Unicode code point of the variation selector. + * + * @return: + * The glyph index. 0~means either 'undefined character code', or + * 'undefined selector code', or 'no variation selector cmap subtable', + * or 'current CharMap is not Unicode'. + * + * @note: + * If you use FreeType to manipulate the contents of font files directly, + * be aware that the glyph index returned by this function doesn't always + * correspond to the internal indices used within the file. This is done + * to ensure that value~0 always corresponds to the 'missing glyph'. + * + * This function is only meaningful if + * a) the font has a variation selector cmap sub table, and + * b) the current charmap has a Unicode encoding. + * + * @since: + * 2.3.6 + * + */ + FT_EXPORT( FT_UInt ) + FT_Face_GetCharVariantIndex( FT_Face face, + FT_ULong charcode, + FT_ULong variantSelector ); + + + /************************************************************************** + * + * @function: + * FT_Face_GetCharVariantIsDefault + * + * @description: + * Check whether this variation of this Unicode character is the one to + * be found in the charmap. + * + * @input: + * face :: + * A handle to the source face object. + * + * charcode :: + * The character codepoint in Unicode. + * + * variantSelector :: + * The Unicode codepoint of the variation selector. + * + * @return: + * 1~if found in the standard (Unicode) cmap, 0~if found in the variation + * selector cmap, or -1 if it is not a variation. + * + * @note: + * This function is only meaningful if the font has a variation selector + * cmap subtable. + * + * @since: + * 2.3.6 + * + */ + FT_EXPORT( FT_Int ) + FT_Face_GetCharVariantIsDefault( FT_Face face, + FT_ULong charcode, + FT_ULong variantSelector ); + + + /************************************************************************** + * + * @function: + * FT_Face_GetVariantSelectors + * + * @description: + * Return a zero-terminated list of Unicode variation selectors found in + * the font. + * + * @input: + * face :: + * A handle to the source face object. + * + * @return: + * A pointer to an array of selector code points, or `NULL` if there is + * no valid variation selector cmap subtable. + * + * @note: + * The last item in the array is~0; the array is owned by the @FT_Face + * object but can be overwritten or released on the next call to a + * FreeType function. + * + * @since: + * 2.3.6 + * + */ + FT_EXPORT( FT_UInt32* ) + FT_Face_GetVariantSelectors( FT_Face face ); + + + /************************************************************************** + * + * @function: + * FT_Face_GetVariantsOfChar + * + * @description: + * Return a zero-terminated list of Unicode variation selectors found for + * the specified character code. + * + * @input: + * face :: + * A handle to the source face object. + * + * charcode :: + * The character codepoint in Unicode. + * + * @return: + * A pointer to an array of variation selector code points that are + * active for the given character, or `NULL` if the corresponding list is + * empty. + * + * @note: + * The last item in the array is~0; the array is owned by the @FT_Face + * object but can be overwritten or released on the next call to a + * FreeType function. + * + * @since: + * 2.3.6 + * + */ + FT_EXPORT( FT_UInt32* ) + FT_Face_GetVariantsOfChar( FT_Face face, + FT_ULong charcode ); + + + /************************************************************************** + * + * @function: + * FT_Face_GetCharsOfVariant + * + * @description: + * Return a zero-terminated list of Unicode character codes found for the + * specified variation selector. + * + * @input: + * face :: + * A handle to the source face object. + * + * variantSelector :: + * The variation selector code point in Unicode. + * + * @return: + * A list of all the code points that are specified by this selector + * (both default and non-default codes are returned) or `NULL` if there + * is no valid cmap or the variation selector is invalid. + * + * @note: + * The last item in the array is~0; the array is owned by the @FT_Face + * object but can be overwritten or released on the next call to a + * FreeType function. + * + * @since: + * 2.3.6 + * + */ + FT_EXPORT( FT_UInt32* ) + FT_Face_GetCharsOfVariant( FT_Face face, + FT_ULong variantSelector ); + + + /************************************************************************** + * + * @section: + * computations + * + * @title: + * Computations + * + * @abstract: + * Crunching fixed numbers and vectors. + * + * @description: + * This section contains various functions used to perform computations + * on 16.16 fixed-point numbers or 2D vectors. FreeType does not use + * floating-point data types. + * + * **Attention**: Most arithmetic functions take `FT_Long` as arguments. + * For historical reasons, FreeType was designed under the assumption + * that `FT_Long` is a 32-bit integer; results can thus be undefined if + * the arguments don't fit into 32 bits. + * + * @order: + * FT_MulDiv + * FT_MulFix + * FT_DivFix + * FT_RoundFix + * FT_CeilFix + * FT_FloorFix + * FT_Vector_Transform + * FT_Matrix_Multiply + * FT_Matrix_Invert + * + */ + + + /************************************************************************** + * + * @function: + * FT_MulDiv + * + * @description: + * Compute `(a*b)/c` with maximum accuracy, using a 64-bit intermediate + * integer whenever necessary. + * + * This function isn't necessarily as fast as some processor-specific + * operations, but is at least completely portable. + * + * @input: + * a :: + * The first multiplier. + * + * b :: + * The second multiplier. + * + * c :: + * The divisor. + * + * @return: + * The result of `(a*b)/c`. This function never traps when trying to + * divide by zero; it simply returns 'MaxInt' or 'MinInt' depending on + * the signs of `a` and `b`. + */ + FT_EXPORT( FT_Long ) + FT_MulDiv( FT_Long a, + FT_Long b, + FT_Long c ); + + + /************************************************************************** + * + * @function: + * FT_MulFix + * + * @description: + * Compute `(a*b)/0x10000` with maximum accuracy. Its main use is to + * multiply a given value by a 16.16 fixed-point factor. + * + * @input: + * a :: + * The first multiplier. + * + * b :: + * The second multiplier. Use a 16.16 factor here whenever possible + * (see note below). + * + * @return: + * The result of `(a*b)/0x10000`. + * + * @note: + * This function has been optimized for the case where the absolute value + * of `a` is less than 2048, and `b` is a 16.16 scaling factor. As this + * happens mainly when scaling from notional units to fractional pixels + * in FreeType, it resulted in noticeable speed improvements between + * versions 2.x and 1.x. + * + * As a conclusion, always try to place a 16.16 factor as the _second_ + * argument of this function; this can make a great difference. + */ + FT_EXPORT( FT_Long ) + FT_MulFix( FT_Long a, + FT_Long b ); + + + /************************************************************************** + * + * @function: + * FT_DivFix + * + * @description: + * Compute `(a*0x10000)/b` with maximum accuracy. Its main use is to + * divide a given value by a 16.16 fixed-point factor. + * + * @input: + * a :: + * The numerator. + * + * b :: + * The denominator. Use a 16.16 factor here. + * + * @return: + * The result of `(a*0x10000)/b`. + */ + FT_EXPORT( FT_Long ) + FT_DivFix( FT_Long a, + FT_Long b ); + + + /************************************************************************** + * + * @function: + * FT_RoundFix + * + * @description: + * Round a 16.16 fixed number. + * + * @input: + * a :: + * The number to be rounded. + * + * @return: + * `a` rounded to the nearest 16.16 fixed integer, halfway cases away + * from zero. + * + * @note: + * The function uses wrap-around arithmetic. + */ + FT_EXPORT( FT_Fixed ) + FT_RoundFix( FT_Fixed a ); + + + /************************************************************************** + * + * @function: + * FT_CeilFix + * + * @description: + * Compute the smallest following integer of a 16.16 fixed number. + * + * @input: + * a :: + * The number for which the ceiling function is to be computed. + * + * @return: + * `a` rounded towards plus infinity. + * + * @note: + * The function uses wrap-around arithmetic. + */ + FT_EXPORT( FT_Fixed ) + FT_CeilFix( FT_Fixed a ); + + + /************************************************************************** + * + * @function: + * FT_FloorFix + * + * @description: + * Compute the largest previous integer of a 16.16 fixed number. + * + * @input: + * a :: + * The number for which the floor function is to be computed. + * + * @return: + * `a` rounded towards minus infinity. + */ + FT_EXPORT( FT_Fixed ) + FT_FloorFix( FT_Fixed a ); + + + /************************************************************************** + * + * @function: + * FT_Vector_Transform + * + * @description: + * Transform a single vector through a 2x2 matrix. + * + * @inout: + * vector :: + * The target vector to transform. + * + * @input: + * matrix :: + * A pointer to the source 2x2 matrix. + * + * @note: + * The result is undefined if either `vector` or `matrix` is invalid. + */ + FT_EXPORT( void ) + FT_Vector_Transform( FT_Vector* vector, + const FT_Matrix* matrix ); + + + /************************************************************************** + * + * @section: + * library_setup + * + */ + + /************************************************************************** + * + * @enum: + * FREETYPE_XXX + * + * @description: + * These three macros identify the FreeType source code version. Use + * @FT_Library_Version to access them at runtime. + * + * @values: + * FREETYPE_MAJOR :: + * The major version number. + * FREETYPE_MINOR :: + * The minor version number. + * FREETYPE_PATCH :: + * The patch level. + * + * @note: + * The version number of FreeType if built as a dynamic link library with + * the 'libtool' package is _not_ controlled by these three macros. + * + */ +#define FREETYPE_MAJOR 2 +#define FREETYPE_MINOR 14 +#define FREETYPE_PATCH 1 + + + /************************************************************************** + * + * @function: + * FT_Library_Version + * + * @description: + * Return the version of the FreeType library being used. This is useful + * when dynamically linking to the library, since one cannot use the + * macros @FREETYPE_MAJOR, @FREETYPE_MINOR, and @FREETYPE_PATCH. + * + * @input: + * library :: + * A source library handle. + * + * @output: + * amajor :: + * The major version number. + * + * aminor :: + * The minor version number. + * + * apatch :: + * The patch version number. + * + * @note: + * The reason why this function takes a `library` argument is because + * certain programs implement library initialization in a custom way that + * doesn't use @FT_Init_FreeType. + * + * In such cases, the library version might not be available before the + * library object has been created. + */ + FT_EXPORT( void ) + FT_Library_Version( FT_Library library, + FT_Int *amajor, + FT_Int *aminor, + FT_Int *apatch ); + + + /************************************************************************** + * + * @section: + * other_api_data + * + */ + + /************************************************************************** + * + * @function: + * FT_Face_CheckTrueTypePatents + * + * @description: + * Deprecated, does nothing. + * + * @input: + * face :: + * A face handle. + * + * @return: + * Always returns false. + * + * @note: + * Since May 2010, TrueType hinting is no longer patented. + * + * @since: + * 2.3.5 + * + */ + FT_EXPORT( FT_Bool ) + FT_Face_CheckTrueTypePatents( FT_Face face ); + + + /************************************************************************** + * + * @function: + * FT_Face_SetUnpatentedHinting + * + * @description: + * Deprecated, does nothing. + * + * @input: + * face :: + * A face handle. + * + * value :: + * New boolean setting. + * + * @return: + * Always returns false. + * + * @note: + * Since May 2010, TrueType hinting is no longer patented. + * + * @since: + * 2.3.5 + * + */ + FT_EXPORT( FT_Bool ) + FT_Face_SetUnpatentedHinting( FT_Face face, + FT_Bool value ); + + /* */ + + +FT_END_HEADER + +#endif /* FREETYPE_H_ */ + + +/* END */ diff --git a/third_party/tlRender-install-Release/include/freetype2/freetype/ftadvanc.h b/third_party/tlRender-install-Release/include/freetype2/freetype/ftadvanc.h new file mode 100644 index 00000000..62a856cc --- /dev/null +++ b/third_party/tlRender-install-Release/include/freetype2/freetype/ftadvanc.h @@ -0,0 +1,188 @@ +/**************************************************************************** + * + * ftadvanc.h + * + * Quick computation of advance widths (specification only). + * + * Copyright (C) 2008-2025 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + +#ifndef FTADVANC_H_ +#define FTADVANC_H_ + + +#include + +#ifdef FREETYPE_H +#error "freetype.h of FreeType 1 has been loaded!" +#error "Please fix the directory search order for header files" +#error "so that freetype.h of FreeType 2 is found first." +#endif + + +FT_BEGIN_HEADER + + + /************************************************************************** + * + * @section: + * quick_advance + * + * @title: + * Quick retrieval of advance values + * + * @abstract: + * Retrieve horizontal and vertical advance values without processing + * glyph outlines, if possible. + * + * @description: + * This section contains functions to quickly extract advance values + * without handling glyph outlines, if possible. + * + * @order: + * FT_Get_Advance + * FT_Get_Advances + * + */ + + + /************************************************************************** + * + * @enum: + * FT_ADVANCE_FLAG_FAST_ONLY + * + * @description: + * A bit-flag to be OR-ed with the `flags` parameter of the + * @FT_Get_Advance and @FT_Get_Advances functions. + * + * If set, it indicates that you want these functions to fail if the + * corresponding hinting mode or font driver doesn't allow for very quick + * advance computation. + * + * Typically, glyphs that are either unscaled, unhinted, bitmapped, or + * light-hinted can have their advance width computed very quickly. + * + * Normal and bytecode hinted modes that require loading, scaling, and + * hinting of the glyph outline, are extremely slow by comparison. + */ +#define FT_ADVANCE_FLAG_FAST_ONLY 0x20000000L + + + /************************************************************************** + * + * @function: + * FT_Get_Advance + * + * @description: + * Retrieve the advance value of a given glyph outline in an @FT_Face. + * + * @input: + * face :: + * The source @FT_Face handle. + * + * gindex :: + * The glyph index. + * + * load_flags :: + * A set of bit flags similar to those used when calling + * @FT_Load_Glyph, used to determine what kind of advances you need. + * + * @output: + * padvance :: + * The advance value. If scaling is performed (based on the value of + * `load_flags`), the advance value is in 16.16 format. Otherwise, it + * is in font units. + * + * If @FT_LOAD_VERTICAL_LAYOUT is set, this is the vertical advance + * corresponding to a vertical layout. Otherwise, it is the horizontal + * advance in a horizontal layout. + * + * @return: + * FreeType error code. 0 means success. + * + * @note: + * This function may fail if you use @FT_ADVANCE_FLAG_FAST_ONLY and if + * the corresponding font backend doesn't have a quick way to retrieve + * the advances. + * + * A scaled advance is returned in 16.16 format but isn't transformed by + * the affine transformation specified by @FT_Set_Transform. + */ + FT_EXPORT( FT_Error ) + FT_Get_Advance( FT_Face face, + FT_UInt gindex, + FT_Int32 load_flags, + FT_Fixed *padvance ); + + + /************************************************************************** + * + * @function: + * FT_Get_Advances + * + * @description: + * Retrieve the advance values of several glyph outlines in an @FT_Face. + * + * @input: + * face :: + * The source @FT_Face handle. + * + * start :: + * The first glyph index. + * + * count :: + * The number of advance values you want to retrieve. + * + * load_flags :: + * A set of bit flags similar to those used when calling + * @FT_Load_Glyph. + * + * @output: + * padvance :: + * The advance values. This array, to be provided by the caller, must + * contain at least `count` elements. + * + * If scaling is performed (based on the value of `load_flags`), the + * advance values are in 16.16 format. Otherwise, they are in font + * units. + * + * If @FT_LOAD_VERTICAL_LAYOUT is set, these are the vertical advances + * corresponding to a vertical layout. Otherwise, they are the + * horizontal advances in a horizontal layout. + * + * @return: + * FreeType error code. 0 means success. + * + * @note: + * This function may fail if you use @FT_ADVANCE_FLAG_FAST_ONLY and if + * the corresponding font backend doesn't have a quick way to retrieve + * the advances. + * + * Scaled advances are returned in 16.16 format but aren't transformed by + * the affine transformation specified by @FT_Set_Transform. + */ + FT_EXPORT( FT_Error ) + FT_Get_Advances( FT_Face face, + FT_UInt start, + FT_UInt count, + FT_Int32 load_flags, + FT_Fixed *padvances ); + + /* */ + + +FT_END_HEADER + +#endif /* FTADVANC_H_ */ + + +/* END */ diff --git a/third_party/tlRender-install-Release/include/freetype2/freetype/ftbbox.h b/third_party/tlRender-install-Release/include/freetype2/freetype/ftbbox.h new file mode 100644 index 00000000..348b4b3a --- /dev/null +++ b/third_party/tlRender-install-Release/include/freetype2/freetype/ftbbox.h @@ -0,0 +1,101 @@ +/**************************************************************************** + * + * ftbbox.h + * + * FreeType exact bbox computation (specification). + * + * Copyright (C) 1996-2025 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + + /************************************************************************** + * + * This component has a _single_ role: to compute exact outline bounding + * boxes. + * + * It is separated from the rest of the engine for various technical + * reasons. It may well be integrated in 'ftoutln' later. + * + */ + + +#ifndef FTBBOX_H_ +#define FTBBOX_H_ + + +#include + +#ifdef FREETYPE_H +#error "freetype.h of FreeType 1 has been loaded!" +#error "Please fix the directory search order for header files" +#error "so that freetype.h of FreeType 2 is found first." +#endif + + +FT_BEGIN_HEADER + + + /************************************************************************** + * + * @section: + * outline_processing + * + */ + + + /************************************************************************** + * + * @function: + * FT_Outline_Get_BBox + * + * @description: + * Compute the exact bounding box of an outline. This is slower than + * computing the control box. However, it uses an advanced algorithm + * that returns _very_ quickly when the two boxes coincide. Otherwise, + * the outline Bezier arcs are traversed to extract their extrema. + * + * @input: + * outline :: + * A pointer to the source outline. + * + * @output: + * abbox :: + * The outline's exact bounding box. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * If the font is tricky and the glyph has been loaded with + * @FT_LOAD_NO_SCALE, the resulting BBox is meaningless. To get + * reasonable values for the BBox it is necessary to load the glyph at a + * large ppem value (so that the hinting instructions can properly shift + * and scale the subglyphs), then extracting the BBox, which can be + * eventually converted back to font units. + */ + FT_EXPORT( FT_Error ) + FT_Outline_Get_BBox( FT_Outline* outline, + FT_BBox *abbox ); + + /* */ + + +FT_END_HEADER + +#endif /* FTBBOX_H_ */ + + +/* END */ + + +/* Local Variables: */ +/* coding: utf-8 */ +/* End: */ diff --git a/third_party/tlRender-install-Release/include/freetype2/freetype/ftbdf.h b/third_party/tlRender-install-Release/include/freetype2/freetype/ftbdf.h new file mode 100644 index 00000000..faad2568 --- /dev/null +++ b/third_party/tlRender-install-Release/include/freetype2/freetype/ftbdf.h @@ -0,0 +1,212 @@ +/**************************************************************************** + * + * ftbdf.h + * + * FreeType API for accessing BDF-specific strings (specification). + * + * Copyright (C) 2002-2025 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + +#ifndef FTBDF_H_ +#define FTBDF_H_ + +#include + +#ifdef FREETYPE_H +#error "freetype.h of FreeType 1 has been loaded!" +#error "Please fix the directory search order for header files" +#error "so that freetype.h of FreeType 2 is found first." +#endif + + +FT_BEGIN_HEADER + + + /************************************************************************** + * + * @section: + * bdf_fonts + * + * @title: + * BDF and PCF Files + * + * @abstract: + * BDF and PCF specific API. + * + * @description: + * This section contains the declaration of functions specific to BDF and + * PCF fonts. + * + */ + + + /************************************************************************** + * + * @enum: + * BDF_PropertyType + * + * @description: + * A list of BDF property types. + * + * @values: + * BDF_PROPERTY_TYPE_NONE :: + * Value~0 is used to indicate a missing property. + * + * BDF_PROPERTY_TYPE_ATOM :: + * Property is a string atom. + * + * BDF_PROPERTY_TYPE_INTEGER :: + * Property is a 32-bit signed integer. + * + * BDF_PROPERTY_TYPE_CARDINAL :: + * Property is a 32-bit unsigned integer. + */ + typedef enum BDF_PropertyType_ + { + BDF_PROPERTY_TYPE_NONE = 0, + BDF_PROPERTY_TYPE_ATOM = 1, + BDF_PROPERTY_TYPE_INTEGER = 2, + BDF_PROPERTY_TYPE_CARDINAL = 3 + + } BDF_PropertyType; + + + /************************************************************************** + * + * @type: + * BDF_Property + * + * @description: + * A handle to a @BDF_PropertyRec structure to model a given BDF/PCF + * property. + */ + typedef struct BDF_PropertyRec_* BDF_Property; + + + /************************************************************************** + * + * @struct: + * BDF_PropertyRec + * + * @description: + * This structure models a given BDF/PCF property. + * + * @fields: + * type :: + * The property type. + * + * u.atom :: + * The atom string, if type is @BDF_PROPERTY_TYPE_ATOM. May be + * `NULL`, indicating an empty string. + * + * u.integer :: + * A signed integer, if type is @BDF_PROPERTY_TYPE_INTEGER. + * + * u.cardinal :: + * An unsigned integer, if type is @BDF_PROPERTY_TYPE_CARDINAL. + */ + typedef struct BDF_PropertyRec_ + { + BDF_PropertyType type; + union { + const char* atom; + FT_Int32 integer; + FT_UInt32 cardinal; + + } u; + + } BDF_PropertyRec; + + + /************************************************************************** + * + * @function: + * FT_Get_BDF_Charset_ID + * + * @description: + * Retrieve a BDF font character set identity, according to the BDF + * specification. + * + * @input: + * face :: + * A handle to the input face. + * + * @output: + * acharset_encoding :: + * Charset encoding, as a C~string, owned by the face. + * + * acharset_registry :: + * Charset registry, as a C~string, owned by the face. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * This function only works with BDF faces, returning an error otherwise. + */ + FT_EXPORT( FT_Error ) + FT_Get_BDF_Charset_ID( FT_Face face, + const char* *acharset_encoding, + const char* *acharset_registry ); + + + /************************************************************************** + * + * @function: + * FT_Get_BDF_Property + * + * @description: + * Retrieve a BDF property from a BDF or PCF font file. + * + * @input: + * face :: + * A handle to the input face. + * + * name :: + * The property name. + * + * @output: + * aproperty :: + * The property. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * This function works with BDF _and_ PCF fonts. It returns an error + * otherwise. It also returns an error if the property is not in the + * font. + * + * A 'property' is a either key-value pair within the STARTPROPERTIES + * ... ENDPROPERTIES block of a BDF font or a key-value pair from the + * `info->props` array within a `FontRec` structure of a PCF font. + * + * Integer properties are always stored as 'signed' within PCF fonts; + * consequently, @BDF_PROPERTY_TYPE_CARDINAL is a possible return value + * for BDF fonts only. + * + * In case of error, `aproperty->type` is always set to + * @BDF_PROPERTY_TYPE_NONE. + */ + FT_EXPORT( FT_Error ) + FT_Get_BDF_Property( FT_Face face, + const char* prop_name, + BDF_PropertyRec *aproperty ); + + /* */ + +FT_END_HEADER + +#endif /* FTBDF_H_ */ + + +/* END */ diff --git a/third_party/tlRender-install-Release/include/freetype2/freetype/ftbitmap.h b/third_party/tlRender-install-Release/include/freetype2/freetype/ftbitmap.h new file mode 100644 index 00000000..a22d43ad --- /dev/null +++ b/third_party/tlRender-install-Release/include/freetype2/freetype/ftbitmap.h @@ -0,0 +1,329 @@ +/**************************************************************************** + * + * ftbitmap.h + * + * FreeType utility functions for bitmaps (specification). + * + * Copyright (C) 2004-2025 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + +#ifndef FTBITMAP_H_ +#define FTBITMAP_H_ + + +#include +#include + +#ifdef FREETYPE_H +#error "freetype.h of FreeType 1 has been loaded!" +#error "Please fix the directory search order for header files" +#error "so that freetype.h of FreeType 2 is found first." +#endif + + +FT_BEGIN_HEADER + + + /************************************************************************** + * + * @section: + * bitmap_handling + * + * @title: + * Bitmap Handling + * + * @abstract: + * Handling FT_Bitmap objects. + * + * @description: + * This section contains functions for handling @FT_Bitmap objects, + * automatically adjusting the target's bitmap buffer size as needed. + * + * Note that none of the functions changes the bitmap's 'flow' (as + * indicated by the sign of the `pitch` field in @FT_Bitmap). + * + * To set the flow, assign an appropriate positive or negative value to + * the `pitch` field of the target @FT_Bitmap object after calling + * @FT_Bitmap_Init but before calling any of the other functions + * described here. + */ + + + /************************************************************************** + * + * @function: + * FT_Bitmap_Init + * + * @description: + * Initialize a pointer to an @FT_Bitmap structure. + * + * @inout: + * abitmap :: + * A pointer to the bitmap structure. + * + * @note: + * A deprecated name for the same function is `FT_Bitmap_New`. + */ + FT_EXPORT( void ) + FT_Bitmap_Init( FT_Bitmap *abitmap ); + + + /* deprecated */ + FT_EXPORT( void ) + FT_Bitmap_New( FT_Bitmap *abitmap ); + + + /************************************************************************** + * + * @function: + * FT_Bitmap_Copy + * + * @description: + * Copy a bitmap into another one. + * + * @input: + * library :: + * A handle to a library object. + * + * source :: + * A handle to the source bitmap. + * + * @output: + * target :: + * A handle to the target bitmap. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * `source->buffer` and `target->buffer` must neither be equal nor + * overlap. + */ + FT_EXPORT( FT_Error ) + FT_Bitmap_Copy( FT_Library library, + const FT_Bitmap *source, + FT_Bitmap *target ); + + + /************************************************************************** + * + * @function: + * FT_Bitmap_Embolden + * + * @description: + * Embolden a bitmap. The new bitmap will be about `xStrength` pixels + * wider and `yStrength` pixels higher. The left and bottom borders are + * kept unchanged. + * + * @input: + * library :: + * A handle to a library object. + * + * xStrength :: + * How strong the glyph is emboldened horizontally. Expressed in 26.6 + * pixel format. + * + * yStrength :: + * How strong the glyph is emboldened vertically. Expressed in 26.6 + * pixel format. + * + * @inout: + * bitmap :: + * A handle to the target bitmap. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * The current implementation restricts `xStrength` to be less than or + * equal to~8 if bitmap is of pixel_mode @FT_PIXEL_MODE_MONO. + * + * If you want to embolden the bitmap owned by a @FT_GlyphSlotRec, you + * should call @FT_GlyphSlot_Own_Bitmap on the slot first. + * + * Bitmaps in @FT_PIXEL_MODE_GRAY2 and @FT_PIXEL_MODE_GRAY@ format are + * converted to @FT_PIXEL_MODE_GRAY format (i.e., 8bpp). + */ + FT_EXPORT( FT_Error ) + FT_Bitmap_Embolden( FT_Library library, + FT_Bitmap* bitmap, + FT_Pos xStrength, + FT_Pos yStrength ); + + + /************************************************************************** + * + * @function: + * FT_Bitmap_Convert + * + * @description: + * Convert a bitmap object with depth 1bpp, 2bpp, 4bpp, 8bpp or 32bpp to + * a bitmap object with depth 8bpp, making the number of used bytes per + * line (a.k.a. the 'pitch') a multiple of `alignment`. + * + * @input: + * library :: + * A handle to a library object. + * + * source :: + * The source bitmap. + * + * alignment :: + * The pitch of the bitmap is a multiple of this argument. Common + * values are 1, 2, or 4. + * + * @output: + * target :: + * The target bitmap. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * It is possible to call @FT_Bitmap_Convert multiple times without + * calling @FT_Bitmap_Done (the memory is simply reallocated). + * + * Use @FT_Bitmap_Done to finally remove the bitmap object. + * + * The `library` argument is taken to have access to FreeType's memory + * handling functions. + * + * `source->buffer` and `target->buffer` must neither be equal nor + * overlap. + */ + FT_EXPORT( FT_Error ) + FT_Bitmap_Convert( FT_Library library, + const FT_Bitmap *source, + FT_Bitmap *target, + FT_Int alignment ); + + + /************************************************************************** + * + * @function: + * FT_Bitmap_Blend + * + * @description: + * Blend a bitmap onto another bitmap, using a given color. + * + * @input: + * library :: + * A handle to a library object. + * + * source :: + * The source bitmap, which can have any @FT_Pixel_Mode format. + * + * source_offset :: + * The offset vector to the upper left corner of the source bitmap in + * 26.6 pixel format. It should represent an integer offset; the + * function will set the lowest six bits to zero to enforce that. + * + * color :: + * The color used to draw `source` onto `target`. + * + * @inout: + * target :: + * A handle to an `FT_Bitmap` object. It should be either initialized + * as empty with a call to @FT_Bitmap_Init, or it should be of type + * @FT_PIXEL_MODE_BGRA. + * + * atarget_offset :: + * The offset vector to the upper left corner of the target bitmap in + * 26.6 pixel format. It should represent an integer offset; the + * function will set the lowest six bits to zero to enforce that. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * This function doesn't perform clipping. + * + * The bitmap in `target` gets allocated or reallocated as needed; the + * vector `atarget_offset` is updated accordingly. + * + * In case of allocation or reallocation, the bitmap's pitch is set to + * `4 * width`. Both `source` and `target` must have the same bitmap + * flow (as indicated by the sign of the `pitch` field). + * + * `source->buffer` and `target->buffer` must neither be equal nor + * overlap. + * + * @since: + * 2.10 + */ + FT_EXPORT( FT_Error ) + FT_Bitmap_Blend( FT_Library library, + const FT_Bitmap* source, + const FT_Vector source_offset, + FT_Bitmap* target, + FT_Vector *atarget_offset, + FT_Color color ); + + + /************************************************************************** + * + * @function: + * FT_GlyphSlot_Own_Bitmap + * + * @description: + * Make sure that a glyph slot owns `slot->bitmap`. + * + * @input: + * slot :: + * The glyph slot. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * This function is to be used in combination with @FT_Bitmap_Embolden. + */ + FT_EXPORT( FT_Error ) + FT_GlyphSlot_Own_Bitmap( FT_GlyphSlot slot ); + + + /************************************************************************** + * + * @function: + * FT_Bitmap_Done + * + * @description: + * Destroy a bitmap object initialized with @FT_Bitmap_Init. + * + * @input: + * library :: + * A handle to a library object. + * + * bitmap :: + * The bitmap object to be freed. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * The `library` argument is taken to have access to FreeType's memory + * handling functions. + */ + FT_EXPORT( FT_Error ) + FT_Bitmap_Done( FT_Library library, + FT_Bitmap *bitmap ); + + + /* */ + + +FT_END_HEADER + +#endif /* FTBITMAP_H_ */ + + +/* END */ diff --git a/third_party/tlRender-install-Release/include/freetype2/freetype/ftbzip2.h b/third_party/tlRender-install-Release/include/freetype2/freetype/ftbzip2.h new file mode 100644 index 00000000..38b52458 --- /dev/null +++ b/third_party/tlRender-install-Release/include/freetype2/freetype/ftbzip2.h @@ -0,0 +1,102 @@ +/**************************************************************************** + * + * ftbzip2.h + * + * Bzip2-compressed stream support. + * + * Copyright (C) 2010-2025 by + * Joel Klinghed. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + +#ifndef FTBZIP2_H_ +#define FTBZIP2_H_ + +#include + +#ifdef FREETYPE_H +#error "freetype.h of FreeType 1 has been loaded!" +#error "Please fix the directory search order for header files" +#error "so that freetype.h of FreeType 2 is found first." +#endif + + +FT_BEGIN_HEADER + + /************************************************************************** + * + * @section: + * bzip2 + * + * @title: + * BZIP2 Streams + * + * @abstract: + * Using bzip2-compressed font files. + * + * @description: + * In certain builds of the library, bzip2 compression recognition is + * automatically handled when calling @FT_New_Face or @FT_Open_Face. + * This means that if no font driver is capable of handling the raw + * compressed file, the library will try to open a bzip2 compressed + * stream from it and re-open the face with it. + * + * The stream implementation is very basic and resets the decompression + * process each time seeking backwards is needed within the stream, + * which significantly undermines the performance. + * + * This section contains the declaration of Bzip2-specific functions. + * + */ + + + /************************************************************************** + * + * @function: + * FT_Stream_OpenBzip2 + * + * @description: + * Open a new stream to parse bzip2-compressed font files. This is + * mainly used to support the compressed `*.pcf.bz2` fonts that come with + * XFree86. + * + * @input: + * stream :: + * The target embedding stream. + * + * source :: + * The source stream. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * The source stream must be opened _before_ calling this function. + * + * Calling the internal function `FT_Stream_Close` on the new stream will + * **not** call `FT_Stream_Close` on the source stream. None of the + * stream objects will be released to the heap. + * + * This function may return `FT_Err_Unimplemented_Feature` if your build + * of FreeType was not compiled with bzip2 support. + */ + FT_EXPORT( FT_Error ) + FT_Stream_OpenBzip2( FT_Stream stream, + FT_Stream source ); + + /* */ + + +FT_END_HEADER + +#endif /* FTBZIP2_H_ */ + + +/* END */ diff --git a/third_party/tlRender-install-Release/include/freetype2/freetype/ftcache.h b/third_party/tlRender-install-Release/include/freetype2/freetype/ftcache.h new file mode 100644 index 00000000..865b743a --- /dev/null +++ b/third_party/tlRender-install-Release/include/freetype2/freetype/ftcache.h @@ -0,0 +1,1087 @@ +/**************************************************************************** + * + * ftcache.h + * + * FreeType Cache subsystem (specification). + * + * Copyright (C) 1996-2025 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + +#ifndef FTCACHE_H_ +#define FTCACHE_H_ + + +#include + + +FT_BEGIN_HEADER + + + /************************************************************************** + * + * @section: + * cache_subsystem + * + * @title: + * Cache Sub-System + * + * @abstract: + * How to cache face, size, and glyph data with FreeType~2. + * + * @description: + * This section describes the FreeType~2 cache sub-system, which is used + * to limit the number of concurrently opened @FT_Face and @FT_Size + * objects, as well as caching information like character maps and glyph + * images while limiting their maximum memory usage. + * + * Note that all types and functions begin with the `FTC_` prefix rather + * than the usual `FT_` prefix in the rest of FreeType. + * + * The cache is highly portable and, thus, doesn't know anything about + * the fonts installed on your system, or how to access them. Therefore, + * it requires the following. + * + * * @FTC_FaceID, an arbitrary non-zero value that uniquely identifies + * available or installed font faces, has to be provided to the + * cache by the client. Note that the cache only stores and compares + * these values and doesn't try to interpret them in any way, but they + * have to be persistent on the client side. + * + * * @FTC_Face_Requester, a method to convert an @FTC_FaceID into a new + * @FT_Face object when necessary, has to be provided to the cache by + * the client. The @FT_Face object is completely managed by the cache, + * including its termination through @FT_Done_Face. To monitor + * termination of face objects, the finalizer callback in the `generic` + * field of the @FT_Face object can be used, which might also be used + * to store the @FTC_FaceID of the face. + * + * Clients are free to map face IDs to anything useful. The most simple + * usage is, for example, to associate them to a `{pathname,face_index}` + * pair that is then used by @FTC_Face_Requester to call @FT_New_Face. + * However, more complex schemes are also possible. + * + * Note that for the cache to work correctly, the face ID values must be + * **persistent**, which means that the contents they point to should not + * change at runtime, or that their value should not become invalid. + * If this is unavoidable (e.g., when a font is uninstalled at runtime), + * you should call @FTC_Manager_RemoveFaceID as soon as possible to let + * the cache get rid of any references to the old @FTC_FaceID it may keep + * internally. Failure to do so will lead to incorrect behaviour or even + * crashes in @FTC_Face_Requester. + * + * To use the cache, start with calling @FTC_Manager_New to create a new + * @FTC_Manager object, which models a single cache instance. You can + * then look up @FT_Face and @FT_Size objects with + * @FTC_Manager_LookupFace and @FTC_Manager_LookupSize, respectively, and + * use them in any FreeType work stream. You can also cache other + * FreeType objects as follows. + * + * * If you want to use the charmap caching, call @FTC_CMapCache_New, + * then later use @FTC_CMapCache_Lookup to perform the equivalent of + * @FT_Get_Char_Index, only much faster. + * + * * If you want to use the @FT_Glyph caching, call @FTC_ImageCache_New, + * then later use @FTC_ImageCache_Lookup to retrieve the corresponding + * @FT_Glyph objects from the cache. + * + * * If you need lots of small bitmaps, it is much more memory-efficient + * to call @FTC_SBitCache_New followed by @FTC_SBitCache_Lookup. This + * returns @FTC_SBitRec structures, which are used to store small + * bitmaps directly. (A small bitmap is one whose metrics and + * dimensions all fit into 8-bit integers). + * + * @order: + * FTC_Manager + * FTC_FaceID + * FTC_Face_Requester + * + * FTC_Manager_New + * FTC_Manager_Reset + * FTC_Manager_Done + * FTC_Manager_LookupFace + * FTC_Manager_LookupSize + * FTC_Manager_RemoveFaceID + * + * FTC_Node + * FTC_Node_Unref + * + * FTC_ImageCache + * FTC_ImageCache_New + * FTC_ImageCache_Lookup + * + * FTC_SBit + * FTC_SBitCache + * FTC_SBitCache_New + * FTC_SBitCache_Lookup + * + * FTC_CMapCache + * FTC_CMapCache_New + * FTC_CMapCache_Lookup + * + *************************************************************************/ + + + /*************************************************************************/ + /*************************************************************************/ + /*************************************************************************/ + /***** *****/ + /***** BASIC TYPE DEFINITIONS *****/ + /***** *****/ + /*************************************************************************/ + /*************************************************************************/ + /*************************************************************************/ + + + /************************************************************************** + * + * @type: + * FTC_FaceID + * + * @description: + * An opaque pointer type that is used to identity face objects. The + * contents of such objects is application-dependent. + * + * These pointers are typically used to point to a user-defined structure + * containing a font file path, and face index. + * + * @note: + * Never use `NULL` as a valid @FTC_FaceID. + * + * Face IDs are passed by the client to the cache manager that calls, + * when needed, the @FTC_Face_Requester to translate them into new + * @FT_Face objects. + * + * If the content of a given face ID changes at runtime, or if the value + * becomes invalid (e.g., when uninstalling a font), you should + * immediately call @FTC_Manager_RemoveFaceID before any other cache + * function. + * + * Failure to do so will result in incorrect behaviour or even memory + * leaks and crashes. + */ + typedef FT_Pointer FTC_FaceID; + + + /************************************************************************** + * + * @functype: + * FTC_Face_Requester + * + * @description: + * A callback function provided by client applications. It is used by + * the cache manager to translate a given @FTC_FaceID into a new valid + * @FT_Face object, on demand. + * + * @input: + * face_id :: + * The face ID to resolve. + * + * library :: + * A handle to a FreeType library object. + * + * req_data :: + * Application-provided request data (see note below). + * + * @output: + * aface :: + * A new @FT_Face handle. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * The third parameter `req_data` is the same as the one passed by the + * client when @FTC_Manager_New is called. + * + * The face requester should not perform funny things on the returned + * face object, like creating a new @FT_Size for it, or setting a + * transformation through @FT_Set_Transform! + */ + typedef FT_Error + (*FTC_Face_Requester)( FTC_FaceID face_id, + FT_Library library, + FT_Pointer req_data, + FT_Face* aface ); + + /* */ + + + /*************************************************************************/ + /*************************************************************************/ + /*************************************************************************/ + /***** *****/ + /***** CACHE MANAGER OBJECT *****/ + /***** *****/ + /*************************************************************************/ + /*************************************************************************/ + /*************************************************************************/ + + + /************************************************************************** + * + * @type: + * FTC_Manager + * + * @description: + * This object corresponds to one instance of the cache-subsystem. It is + * used to cache one or more @FT_Face objects, along with corresponding + * @FT_Size objects. + * + * The manager intentionally limits the total number of opened @FT_Face + * and @FT_Size objects to control memory usage. See the `max_faces` and + * `max_sizes` parameters of @FTC_Manager_New. + * + * The manager is also used to cache 'nodes' of various types while + * limiting their total memory usage. + * + * All limitations are enforced by keeping lists of managed objects in + * most-recently-used order, and flushing old nodes to make room for new + * ones. + */ + typedef struct FTC_ManagerRec_* FTC_Manager; + + + /************************************************************************** + * + * @type: + * FTC_Node + * + * @description: + * An opaque handle to a cache node object. Each cache node is + * reference-counted. A node with a count of~0 might be flushed out of a + * full cache whenever a lookup request is performed. + * + * If you look up nodes, you have the ability to 'acquire' them, i.e., to + * increment their reference count. This will prevent the node from + * being flushed out of the cache until you explicitly 'release' it (see + * @FTC_Node_Unref). + * + * See also @FTC_SBitCache_Lookup and @FTC_ImageCache_Lookup. + */ + typedef struct FTC_NodeRec_* FTC_Node; + + + /************************************************************************** + * + * @function: + * FTC_Manager_New + * + * @description: + * Create a new cache manager. + * + * @input: + * library :: + * The parent FreeType library handle to use. + * + * max_faces :: + * Maximum number of opened @FT_Face objects managed by this cache + * instance. Use~0 for defaults. + * + * max_sizes :: + * Maximum number of opened @FT_Size objects managed by this cache + * instance. Use~0 for defaults. + * + * max_bytes :: + * Maximum number of bytes to use for cached data nodes. Use~0 for + * defaults. Note that this value does not account for managed + * @FT_Face and @FT_Size objects. + * + * requester :: + * An application-provided callback used to translate face IDs into + * real @FT_Face objects. + * + * req_data :: + * A generic pointer that is passed to the requester each time it is + * called (see @FTC_Face_Requester). + * + * @output: + * amanager :: + * A handle to a new manager object. 0~in case of failure. + * + * @return: + * FreeType error code. 0~means success. + */ + FT_EXPORT( FT_Error ) + FTC_Manager_New( FT_Library library, + FT_UInt max_faces, + FT_UInt max_sizes, + FT_ULong max_bytes, + FTC_Face_Requester requester, + FT_Pointer req_data, + FTC_Manager *amanager ); + + + /************************************************************************** + * + * @function: + * FTC_Manager_Reset + * + * @description: + * Empty a given cache manager. This simply gets rid of all the + * currently cached @FT_Face and @FT_Size objects within the manager. + * + * @inout: + * manager :: + * A handle to the manager. + */ + FT_EXPORT( void ) + FTC_Manager_Reset( FTC_Manager manager ); + + + /************************************************************************** + * + * @function: + * FTC_Manager_Done + * + * @description: + * Destroy a given manager after emptying it. + * + * @input: + * manager :: + * A handle to the target cache manager object. + */ + FT_EXPORT( void ) + FTC_Manager_Done( FTC_Manager manager ); + + + /************************************************************************** + * + * @function: + * FTC_Manager_LookupFace + * + * @description: + * Retrieve the @FT_Face object that corresponds to a given face ID + * through a cache manager. + * + * @input: + * manager :: + * A handle to the cache manager. + * + * face_id :: + * The ID of the face object. + * + * @output: + * aface :: + * A handle to the face object. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * The returned @FT_Face object is always owned by the manager. You + * should never try to discard it yourself. + * + * The @FT_Face object doesn't necessarily have a current size object + * (i.e., face->size can be~0). If you need a specific 'font size', use + * @FTC_Manager_LookupSize instead. + * + * Never change the face's transformation matrix (i.e., never call the + * @FT_Set_Transform function) on a returned face! If you need to + * transform glyphs, do it yourself after glyph loading. + * + * When you perform a lookup, out-of-memory errors are detected _within_ + * the lookup and force incremental flushes of the cache until enough + * memory is released for the lookup to succeed. + * + * If a lookup fails with `FT_Err_Out_Of_Memory` the cache has already + * been completely flushed, and still no memory was available for the + * operation. + */ + FT_EXPORT( FT_Error ) + FTC_Manager_LookupFace( FTC_Manager manager, + FTC_FaceID face_id, + FT_Face *aface ); + + + /************************************************************************** + * + * @struct: + * FTC_ScalerRec + * + * @description: + * A structure used to describe a given character size in either pixels + * or points to the cache manager. See @FTC_Manager_LookupSize. + * + * @fields: + * face_id :: + * The source face ID. + * + * width :: + * The character width. + * + * height :: + * The character height. + * + * pixel :: + * A Boolean. If 1, the `width` and `height` fields are interpreted as + * integer pixel character sizes. Otherwise, they are expressed as + * 1/64 of points. + * + * x_res :: + * Only used when `pixel` is value~0 to indicate the horizontal + * resolution in dpi. + * + * y_res :: + * Only used when `pixel` is value~0 to indicate the vertical + * resolution in dpi. + * + * @note: + * This type is mainly used to retrieve @FT_Size objects through the + * cache manager. + */ + typedef struct FTC_ScalerRec_ + { + FTC_FaceID face_id; + FT_UInt width; + FT_UInt height; + FT_Int pixel; + FT_UInt x_res; + FT_UInt y_res; + + } FTC_ScalerRec; + + + /************************************************************************** + * + * @struct: + * FTC_Scaler + * + * @description: + * A handle to an @FTC_ScalerRec structure. + */ + typedef struct FTC_ScalerRec_* FTC_Scaler; + + + /************************************************************************** + * + * @function: + * FTC_Manager_LookupSize + * + * @description: + * Retrieve the @FT_Size object that corresponds to a given + * @FTC_ScalerRec pointer through a cache manager. + * + * @input: + * manager :: + * A handle to the cache manager. + * + * scaler :: + * A scaler handle. + * + * @output: + * asize :: + * A handle to the size object. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * The returned @FT_Size object is always owned by the manager. You + * should never try to discard it by yourself. + * + * You can access the parent @FT_Face object simply as `size->face` if + * you need it. Note that this object is also owned by the manager. + * + * @note: + * When you perform a lookup, out-of-memory errors are detected _within_ + * the lookup and force incremental flushes of the cache until enough + * memory is released for the lookup to succeed. + * + * If a lookup fails with `FT_Err_Out_Of_Memory` the cache has already + * been completely flushed, and still no memory is available for the + * operation. + */ + FT_EXPORT( FT_Error ) + FTC_Manager_LookupSize( FTC_Manager manager, + FTC_Scaler scaler, + FT_Size *asize ); + + + /************************************************************************** + * + * @function: + * FTC_Node_Unref + * + * @description: + * Decrement a cache node's internal reference count. When the count + * reaches 0, it is not destroyed but becomes eligible for subsequent + * cache flushes. + * + * @input: + * node :: + * The cache node handle. + * + * manager :: + * The cache manager handle. + */ + FT_EXPORT( void ) + FTC_Node_Unref( FTC_Node node, + FTC_Manager manager ); + + + /************************************************************************** + * + * @function: + * FTC_Manager_RemoveFaceID + * + * @description: + * A special function used to indicate to the cache manager that a given + * @FTC_FaceID is no longer valid, either because its content changed, or + * because it was deallocated or uninstalled. + * + * @input: + * manager :: + * The cache manager handle. + * + * face_id :: + * The @FTC_FaceID to be removed. + * + * @note: + * This function flushes all nodes from the cache corresponding to this + * `face_id`, with the exception of nodes with a non-null reference + * count. + * + * Such nodes are however modified internally so as to never appear in + * later lookups with the same `face_id` value, and to be immediately + * destroyed when released by all their users. + * + */ + FT_EXPORT( void ) + FTC_Manager_RemoveFaceID( FTC_Manager manager, + FTC_FaceID face_id ); + + + /************************************************************************** + * + * @type: + * FTC_CMapCache + * + * @description: + * An opaque handle used to model a charmap cache. This cache is to hold + * character codes -> glyph indices mappings. + * + */ + typedef struct FTC_CMapCacheRec_* FTC_CMapCache; + + + /************************************************************************** + * + * @function: + * FTC_CMapCache_New + * + * @description: + * Create a new charmap cache. + * + * @input: + * manager :: + * A handle to the cache manager. + * + * @output: + * acache :: + * A new cache handle. `NULL` in case of error. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * Like all other caches, this one will be destroyed with the cache + * manager. + * + */ + FT_EXPORT( FT_Error ) + FTC_CMapCache_New( FTC_Manager manager, + FTC_CMapCache *acache ); + + + /************************************************************************** + * + * @function: + * FTC_CMapCache_Lookup + * + * @description: + * Translate a character code into a glyph index, using the charmap + * cache. + * + * @input: + * cache :: + * A charmap cache handle. + * + * face_id :: + * The source face ID. + * + * cmap_index :: + * The index of the charmap in the source face. Any negative value + * means to use the cache @FT_Face's default charmap. + * + * char_code :: + * The character code (in the corresponding charmap). + * + * @return: + * Glyph index. 0~means 'no glyph'. + * + */ + FT_EXPORT( FT_UInt ) + FTC_CMapCache_Lookup( FTC_CMapCache cache, + FTC_FaceID face_id, + FT_Int cmap_index, + FT_UInt32 char_code ); + + + /*************************************************************************/ + /*************************************************************************/ + /*************************************************************************/ + /***** *****/ + /***** IMAGE CACHE OBJECT *****/ + /***** *****/ + /*************************************************************************/ + /*************************************************************************/ + /*************************************************************************/ + + + /************************************************************************** + * + * @struct: + * FTC_ImageTypeRec + * + * @description: + * A structure used to model the type of images in a glyph cache. + * + * @fields: + * face_id :: + * The face ID. + * + * width :: + * The width in pixels. + * + * height :: + * The height in pixels. + * + * flags :: + * The load flags, as in @FT_Load_Glyph. + * + */ + typedef struct FTC_ImageTypeRec_ + { + FTC_FaceID face_id; + FT_UInt width; + FT_UInt height; + FT_Int32 flags; + + } FTC_ImageTypeRec; + + + /************************************************************************** + * + * @type: + * FTC_ImageType + * + * @description: + * A handle to an @FTC_ImageTypeRec structure. + * + */ + typedef struct FTC_ImageTypeRec_* FTC_ImageType; + + + /* */ + + +#define FTC_IMAGE_TYPE_COMPARE( d1, d2 ) \ + ( (d1)->face_id == (d2)->face_id && \ + (d1)->width == (d2)->width && \ + (d1)->flags == (d2)->flags ) + + + /************************************************************************** + * + * @type: + * FTC_ImageCache + * + * @description: + * A handle to a glyph image cache object. They are designed to hold + * many distinct glyph images while not exceeding a certain memory + * threshold. + */ + typedef struct FTC_ImageCacheRec_* FTC_ImageCache; + + + /************************************************************************** + * + * @function: + * FTC_ImageCache_New + * + * @description: + * Create a new glyph image cache. + * + * @input: + * manager :: + * The parent manager for the image cache. + * + * @output: + * acache :: + * A handle to the new glyph image cache object. + * + * @return: + * FreeType error code. 0~means success. + */ + FT_EXPORT( FT_Error ) + FTC_ImageCache_New( FTC_Manager manager, + FTC_ImageCache *acache ); + + + /************************************************************************** + * + * @function: + * FTC_ImageCache_Lookup + * + * @description: + * Retrieve a given glyph image from a glyph image cache. + * + * @input: + * cache :: + * A handle to the source glyph image cache. + * + * type :: + * A pointer to a glyph image type descriptor. + * + * gindex :: + * The glyph index to retrieve. + * + * @output: + * aglyph :: + * The corresponding @FT_Glyph object. 0~in case of failure. + * + * anode :: + * Used to return the address of the corresponding cache node after + * incrementing its reference count (see note below). + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * The returned glyph is owned and managed by the glyph image cache. + * Never try to transform or discard it manually! You can however create + * a copy with @FT_Glyph_Copy and modify the new one. + * + * If `anode` is _not_ `NULL`, it receives the address of the cache node + * containing the glyph image, after increasing its reference count. + * This ensures that the node (as well as the @FT_Glyph) will always be + * kept in the cache until you call @FTC_Node_Unref to 'release' it. + * + * If `anode` is `NULL`, the cache node is left unchanged, which means + * that the @FT_Glyph could be flushed out of the cache on the next call + * to one of the caching sub-system APIs. Don't assume that it is + * persistent! + */ + FT_EXPORT( FT_Error ) + FTC_ImageCache_Lookup( FTC_ImageCache cache, + FTC_ImageType type, + FT_UInt gindex, + FT_Glyph *aglyph, + FTC_Node *anode ); + + + /************************************************************************** + * + * @function: + * FTC_ImageCache_LookupScaler + * + * @description: + * A variant of @FTC_ImageCache_Lookup that uses an @FTC_ScalerRec to + * specify the face ID and its size. + * + * @input: + * cache :: + * A handle to the source glyph image cache. + * + * scaler :: + * A pointer to a scaler descriptor. + * + * load_flags :: + * The corresponding load flags. + * + * gindex :: + * The glyph index to retrieve. + * + * @output: + * aglyph :: + * The corresponding @FT_Glyph object. 0~in case of failure. + * + * anode :: + * Used to return the address of the corresponding cache node after + * incrementing its reference count (see note below). + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * The returned glyph is owned and managed by the glyph image cache. + * Never try to transform or discard it manually! You can however create + * a copy with @FT_Glyph_Copy and modify the new one. + * + * If `anode` is _not_ `NULL`, it receives the address of the cache node + * containing the glyph image, after increasing its reference count. + * This ensures that the node (as well as the @FT_Glyph) will always be + * kept in the cache until you call @FTC_Node_Unref to 'release' it. + * + * If `anode` is `NULL`, the cache node is left unchanged, which means + * that the @FT_Glyph could be flushed out of the cache on the next call + * to one of the caching sub-system APIs. Don't assume that it is + * persistent! + * + * Calls to @FT_Set_Char_Size and friends have no effect on cached + * glyphs; you should always use the FreeType cache API instead. + */ + FT_EXPORT( FT_Error ) + FTC_ImageCache_LookupScaler( FTC_ImageCache cache, + FTC_Scaler scaler, + FT_ULong load_flags, + FT_UInt gindex, + FT_Glyph *aglyph, + FTC_Node *anode ); + + + /************************************************************************** + * + * @type: + * FTC_SBit + * + * @description: + * A handle to a small bitmap descriptor. See the @FTC_SBitRec structure + * for details. + */ + typedef struct FTC_SBitRec_* FTC_SBit; + + + /************************************************************************** + * + * @struct: + * FTC_SBitRec + * + * @description: + * A very compact structure used to describe a small glyph bitmap. + * + * @fields: + * width :: + * The bitmap width in pixels. + * + * height :: + * The bitmap height in pixels. + * + * left :: + * The horizontal distance from the pen position to the left bitmap + * border (a.k.a. 'left side bearing', or 'lsb'). + * + * top :: + * The vertical distance from the pen position (on the baseline) to the + * upper bitmap border (a.k.a. 'top side bearing'). The distance is + * positive for upwards y~coordinates. + * + * format :: + * The format of the glyph bitmap (monochrome or gray). + * + * max_grays :: + * Maximum gray level value (in the range 1 to~255). + * + * pitch :: + * The number of bytes per bitmap line. May be positive or negative. + * + * xadvance :: + * The horizontal advance width in pixels. + * + * yadvance :: + * The vertical advance height in pixels. + * + * buffer :: + * A pointer to the bitmap pixels. + */ + typedef struct FTC_SBitRec_ + { + FT_Byte width; + FT_Byte height; + FT_Char left; + FT_Char top; + + FT_Byte format; + FT_Byte max_grays; + FT_Short pitch; + FT_Char xadvance; + FT_Char yadvance; + + FT_Byte* buffer; + + } FTC_SBitRec; + + + /************************************************************************** + * + * @type: + * FTC_SBitCache + * + * @description: + * A handle to a small bitmap cache. These are special cache objects + * used to store small glyph bitmaps (and anti-aliased pixmaps) in a much + * more efficient way than the traditional glyph image cache implemented + * by @FTC_ImageCache. + */ + typedef struct FTC_SBitCacheRec_* FTC_SBitCache; + + + /************************************************************************** + * + * @function: + * FTC_SBitCache_New + * + * @description: + * Create a new cache to store small glyph bitmaps. + * + * @input: + * manager :: + * A handle to the source cache manager. + * + * @output: + * acache :: + * A handle to the new sbit cache. `NULL` in case of error. + * + * @return: + * FreeType error code. 0~means success. + */ + FT_EXPORT( FT_Error ) + FTC_SBitCache_New( FTC_Manager manager, + FTC_SBitCache *acache ); + + + /************************************************************************** + * + * @function: + * FTC_SBitCache_Lookup + * + * @description: + * Look up a given small glyph bitmap in a given sbit cache and 'lock' it + * to prevent its flushing from the cache until needed. + * + * @input: + * cache :: + * A handle to the source sbit cache. + * + * type :: + * A pointer to the glyph image type descriptor. + * + * gindex :: + * The glyph index. + * + * @output: + * sbit :: + * A handle to a small bitmap descriptor. + * + * anode :: + * Used to return the address of the corresponding cache node after + * incrementing its reference count (see note below). + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * The small bitmap descriptor and its bit buffer are owned by the cache + * and should never be freed by the application. They might as well + * disappear from memory on the next cache lookup, so don't treat them as + * persistent data. + * + * The descriptor's `buffer` field is set to~0 to indicate a missing + * glyph bitmap. + * + * If `anode` is _not_ `NULL`, it receives the address of the cache node + * containing the bitmap, after increasing its reference count. This + * ensures that the node (as well as the image) will always be kept in + * the cache until you call @FTC_Node_Unref to 'release' it. + * + * If `anode` is `NULL`, the cache node is left unchanged, which means + * that the bitmap could be flushed out of the cache on the next call to + * one of the caching sub-system APIs. Don't assume that it is + * persistent! + */ + FT_EXPORT( FT_Error ) + FTC_SBitCache_Lookup( FTC_SBitCache cache, + FTC_ImageType type, + FT_UInt gindex, + FTC_SBit *sbit, + FTC_Node *anode ); + + + /************************************************************************** + * + * @function: + * FTC_SBitCache_LookupScaler + * + * @description: + * A variant of @FTC_SBitCache_Lookup that uses an @FTC_ScalerRec to + * specify the face ID and its size. + * + * @input: + * cache :: + * A handle to the source sbit cache. + * + * scaler :: + * A pointer to the scaler descriptor. + * + * load_flags :: + * The corresponding load flags. + * + * gindex :: + * The glyph index. + * + * @output: + * sbit :: + * A handle to a small bitmap descriptor. + * + * anode :: + * Used to return the address of the corresponding cache node after + * incrementing its reference count (see note below). + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * The small bitmap descriptor and its bit buffer are owned by the cache + * and should never be freed by the application. They might as well + * disappear from memory on the next cache lookup, so don't treat them as + * persistent data. + * + * The descriptor's `buffer` field is set to~0 to indicate a missing + * glyph bitmap. + * + * If `anode` is _not_ `NULL`, it receives the address of the cache node + * containing the bitmap, after increasing its reference count. This + * ensures that the node (as well as the image) will always be kept in + * the cache until you call @FTC_Node_Unref to 'release' it. + * + * If `anode` is `NULL`, the cache node is left unchanged, which means + * that the bitmap could be flushed out of the cache on the next call to + * one of the caching sub-system APIs. Don't assume that it is + * persistent! + */ + FT_EXPORT( FT_Error ) + FTC_SBitCache_LookupScaler( FTC_SBitCache cache, + FTC_Scaler scaler, + FT_ULong load_flags, + FT_UInt gindex, + FTC_SBit *sbit, + FTC_Node *anode ); + + /* */ + + +FT_END_HEADER + +#endif /* FTCACHE_H_ */ + + +/* END */ diff --git a/third_party/tlRender-install-Release/include/freetype2/freetype/ftchapters.h b/third_party/tlRender-install-Release/include/freetype2/freetype/ftchapters.h new file mode 100644 index 00000000..7566fbd1 --- /dev/null +++ b/third_party/tlRender-install-Release/include/freetype2/freetype/ftchapters.h @@ -0,0 +1,168 @@ +/**************************************************************************** + * + * This file defines the structure of the FreeType reference. + * It is used by the python script that generates the HTML files. + * + */ + + + /************************************************************************** + * + * @chapter: + * general_remarks + * + * @title: + * General Remarks + * + * @sections: + * preamble + * header_inclusion + * user_allocation + * + */ + + + /************************************************************************** + * + * @chapter: + * core_api + * + * @title: + * Core API + * + * @sections: + * basic_types + * library_setup + * face_creation + * font_testing_macros + * sizing_and_scaling + * glyph_retrieval + * character_mapping + * information_retrieval + * other_api_data + * + */ + + + /************************************************************************** + * + * @chapter: + * extended_api + * + * @title: + * Extended API + * + * @sections: + * glyph_variants + * color_management + * layer_management + * glyph_management + * mac_specific + * sizes_management + * header_file_macros + * + */ + + + /************************************************************************** + * + * @chapter: + * format_specific + * + * @title: + * Format-Specific API + * + * @sections: + * multiple_masters + * truetype_tables + * type1_tables + * sfnt_names + * bdf_fonts + * cid_fonts + * pfr_fonts + * winfnt_fonts + * svg_fonts + * font_formats + * gasp_table + * + */ + + + /************************************************************************** + * + * @chapter: + * module_specific + * + * @title: + * Controlling FreeType Modules + * + * @sections: + * auto_hinter + * cff_driver + * t1_cid_driver + * tt_driver + * pcf_driver + * ot_svg_driver + * properties + * parameter_tags + * lcd_rendering + * + */ + + + /************************************************************************** + * + * @chapter: + * cache_subsystem + * + * @title: + * Cache Sub-System + * + * @sections: + * cache_subsystem + * + */ + + + /************************************************************************** + * + * @chapter: + * support_api + * + * @title: + * Support API + * + * @sections: + * computations + * list_processing + * outline_processing + * quick_advance + * bitmap_handling + * raster + * glyph_stroker + * system_interface + * module_management + * gzip + * lzw + * bzip2 + * debugging_apis + * + */ + + + /************************************************************************** + * + * @chapter: + * error_codes + * + * @title: + * Error Codes + * + * @sections: + * error_enumerations + * error_code_values + * + */ + + +/* END */ diff --git a/third_party/tlRender-install-Release/include/freetype2/freetype/ftcid.h b/third_party/tlRender-install-Release/include/freetype2/freetype/ftcid.h new file mode 100644 index 00000000..7cda8ff3 --- /dev/null +++ b/third_party/tlRender-install-Release/include/freetype2/freetype/ftcid.h @@ -0,0 +1,167 @@ +/**************************************************************************** + * + * ftcid.h + * + * FreeType API for accessing CID font information (specification). + * + * Copyright (C) 2007-2025 by + * Dereg Clegg and Michael Toftdal. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + +#ifndef FTCID_H_ +#define FTCID_H_ + +#include + +#ifdef FREETYPE_H +#error "freetype.h of FreeType 1 has been loaded!" +#error "Please fix the directory search order for header files" +#error "so that freetype.h of FreeType 2 is found first." +#endif + + +FT_BEGIN_HEADER + + + /************************************************************************** + * + * @section: + * cid_fonts + * + * @title: + * CID Fonts + * + * @abstract: + * CID-keyed font-specific API. + * + * @description: + * This section contains the declaration of CID-keyed font-specific + * functions. + * + */ + + + /************************************************************************** + * + * @function: + * FT_Get_CID_Registry_Ordering_Supplement + * + * @description: + * Retrieve the Registry/Ordering/Supplement triple (also known as the + * "R/O/S") from a CID-keyed font. + * + * @input: + * face :: + * A handle to the input face. + * + * @output: + * registry :: + * The registry, as a C~string, owned by the face. + * + * ordering :: + * The ordering, as a C~string, owned by the face. + * + * supplement :: + * The supplement. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * This function only works with CID faces, returning an error + * otherwise. + * + * @since: + * 2.3.6 + */ + FT_EXPORT( FT_Error ) + FT_Get_CID_Registry_Ordering_Supplement( FT_Face face, + const char* *registry, + const char* *ordering, + FT_Int *supplement ); + + + /************************************************************************** + * + * @function: + * FT_Get_CID_Is_Internally_CID_Keyed + * + * @description: + * Retrieve the type of the input face, CID keyed or not. In contrast + * to the @FT_IS_CID_KEYED macro this function returns successfully also + * for CID-keyed fonts in an SFNT wrapper. + * + * @input: + * face :: + * A handle to the input face. + * + * @output: + * is_cid :: + * The type of the face as an @FT_Bool. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * This function only works with CID faces and OpenType fonts, returning + * an error otherwise. + * + * @since: + * 2.3.9 + */ + FT_EXPORT( FT_Error ) + FT_Get_CID_Is_Internally_CID_Keyed( FT_Face face, + FT_Bool *is_cid ); + + + /************************************************************************** + * + * @function: + * FT_Get_CID_From_Glyph_Index + * + * @description: + * Retrieve the CID of the input glyph index. + * + * @input: + * face :: + * A handle to the input face. + * + * glyph_index :: + * The input glyph index. + * + * @output: + * cid :: + * The CID as an @FT_UInt. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * This function only works with CID faces and OpenType fonts, returning + * an error otherwise. + * + * @since: + * 2.3.9 + */ + FT_EXPORT( FT_Error ) + FT_Get_CID_From_Glyph_Index( FT_Face face, + FT_UInt glyph_index, + FT_UInt *cid ); + + /* */ + + +FT_END_HEADER + +#endif /* FTCID_H_ */ + + +/* END */ diff --git a/third_party/tlRender-install-Release/include/freetype2/freetype/ftcolor.h b/third_party/tlRender-install-Release/include/freetype2/freetype/ftcolor.h new file mode 100644 index 00000000..129b1a23 --- /dev/null +++ b/third_party/tlRender-install-Release/include/freetype2/freetype/ftcolor.h @@ -0,0 +1,1676 @@ +/**************************************************************************** + * + * ftcolor.h + * + * FreeType's glyph color management (specification). + * + * Copyright (C) 2018-2025 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + +#ifndef FTCOLOR_H_ +#define FTCOLOR_H_ + +#include + +#ifdef FREETYPE_H +#error "freetype.h of FreeType 1 has been loaded!" +#error "Please fix the directory search order for header files" +#error "so that freetype.h of FreeType 2 is found first." +#endif + + +FT_BEGIN_HEADER + + + /************************************************************************** + * + * @section: + * color_management + * + * @title: + * Glyph Color Management + * + * @abstract: + * Retrieving and manipulating OpenType's 'CPAL' table data. + * + * @description: + * The functions described here allow access and manipulation of color + * palette entries in OpenType's 'CPAL' tables. + */ + + + /************************************************************************** + * + * @struct: + * FT_Color + * + * @description: + * This structure models a BGRA color value of a 'CPAL' palette entry. + * + * The used color space is sRGB; the colors are not pre-multiplied, and + * alpha values must be explicitly set. + * + * @fields: + * blue :: + * Blue value. + * + * green :: + * Green value. + * + * red :: + * Red value. + * + * alpha :: + * Alpha value, giving the red, green, and blue color's opacity. + * + * @since: + * 2.10 + */ + typedef struct FT_Color_ + { + FT_Byte blue; + FT_Byte green; + FT_Byte red; + FT_Byte alpha; + + } FT_Color; + + + /************************************************************************** + * + * @enum: + * FT_PALETTE_XXX + * + * @description: + * A list of bit field constants used in the `palette_flags` array of the + * @FT_Palette_Data structure to indicate for which background a palette + * with a given index is usable. + * + * @values: + * FT_PALETTE_FOR_LIGHT_BACKGROUND :: + * The palette is appropriate to use when displaying the font on a + * light background such as white. + * + * FT_PALETTE_FOR_DARK_BACKGROUND :: + * The palette is appropriate to use when displaying the font on a dark + * background such as black. + * + * @since: + * 2.10 + */ +#define FT_PALETTE_FOR_LIGHT_BACKGROUND 0x01 +#define FT_PALETTE_FOR_DARK_BACKGROUND 0x02 + + + /************************************************************************** + * + * @struct: + * FT_Palette_Data + * + * @description: + * This structure holds the data of the 'CPAL' table. + * + * @fields: + * num_palettes :: + * The number of palettes. + * + * palette_name_ids :: + * An optional read-only array of palette name IDs with `num_palettes` + * elements, corresponding to entries like 'dark' or 'light' in the + * font's 'name' table. + * + * An empty name ID in the 'CPAL' table gets represented as value + * 0xFFFF. + * + * `NULL` if the font's 'CPAL' table doesn't contain appropriate data. + * + * palette_flags :: + * An optional read-only array of palette flags with `num_palettes` + * elements. Possible values are an ORed combination of + * @FT_PALETTE_FOR_LIGHT_BACKGROUND and + * @FT_PALETTE_FOR_DARK_BACKGROUND. + * + * `NULL` if the font's 'CPAL' table doesn't contain appropriate data. + * + * num_palette_entries :: + * The number of entries in a single palette. All palettes have the + * same size. + * + * palette_entry_name_ids :: + * An optional read-only array of palette entry name IDs with + * `num_palette_entries`. In each palette, entries with the same index + * have the same function. For example, index~0 might correspond to + * string 'outline' in the font's 'name' table to indicate that this + * palette entry is used for outlines, index~1 might correspond to + * 'fill' to indicate the filling color palette entry, etc. + * + * An empty entry name ID in the 'CPAL' table gets represented as value + * 0xFFFF. + * + * `NULL` if the font's 'CPAL' table doesn't contain appropriate data. + * + * @note: + * Use function @FT_Get_Sfnt_Name to map name IDs and entry name IDs to + * name strings. + * + * Use function @FT_Palette_Select to get the colors associated with a + * palette entry. + * + * @since: + * 2.10 + */ + typedef struct FT_Palette_Data_ { + FT_UShort num_palettes; + const FT_UShort* palette_name_ids; + const FT_UShort* palette_flags; + + FT_UShort num_palette_entries; + const FT_UShort* palette_entry_name_ids; + + } FT_Palette_Data; + + + /************************************************************************** + * + * @function: + * FT_Palette_Data_Get + * + * @description: + * Retrieve the face's color palette data. + * + * @input: + * face :: + * The source face handle. + * + * @output: + * apalette :: + * A pointer to an @FT_Palette_Data structure. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * All arrays in the returned @FT_Palette_Data structure are read-only. + * + * This function always returns an error if the config macro + * `TT_CONFIG_OPTION_COLOR_LAYERS` is not defined in `ftoption.h`. + * + * @since: + * 2.10 + */ + FT_EXPORT( FT_Error ) + FT_Palette_Data_Get( FT_Face face, + FT_Palette_Data *apalette ); + + + /************************************************************************** + * + * @function: + * FT_Palette_Select + * + * @description: + * This function has two purposes. + * + * (1) It activates a palette for rendering color glyphs, and + * + * (2) it retrieves all (unmodified) color entries of this palette. This + * function returns a read-write array, which means that a calling + * application can modify the palette entries on demand. + * + * A corollary of (2) is that calling the function, then modifying some + * values, then calling the function again with the same arguments resets + * all color entries to the original 'CPAL' values; all user modifications + * are lost. + * + * @input: + * face :: + * The source face handle. + * + * palette_index :: + * The palette index. + * + * @output: + * apalette :: + * An array of color entries for a palette with index `palette_index`, + * having `num_palette_entries` elements (as found in the + * `FT_Palette_Data` structure). If `apalette` is set to `NULL`, no + * array gets returned (and no color entries can be modified). + * + * In case the font doesn't support color palettes, `NULL` is returned. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * The array pointed to by `apalette_entries` is owned and managed by + * FreeType. + * + * This function always returns an error if the config macro + * `TT_CONFIG_OPTION_COLOR_LAYERS` is not defined in `ftoption.h`. + * + * @since: + * 2.10 + */ + FT_EXPORT( FT_Error ) + FT_Palette_Select( FT_Face face, + FT_UShort palette_index, + FT_Color* *apalette ); + + + /************************************************************************** + * + * @function: + * FT_Palette_Set_Foreground_Color + * + * @description: + * 'COLR' uses palette index 0xFFFF to indicate a 'text foreground + * color'. This function sets this value. + * + * @input: + * face :: + * The source face handle. + * + * foreground_color :: + * An `FT_Color` structure to define the text foreground color. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * If this function isn't called, the text foreground color is set to + * white opaque (BGRA value 0xFFFFFFFF) if + * @FT_PALETTE_FOR_DARK_BACKGROUND is present for the current palette, + * and black opaque (BGRA value 0x000000FF) otherwise, including the case + * that no palette types are available in the 'CPAL' table. + * + * This function always returns an error if the config macro + * `TT_CONFIG_OPTION_COLOR_LAYERS` is not defined in `ftoption.h`. + * + * @since: + * 2.10 + */ + FT_EXPORT( FT_Error ) + FT_Palette_Set_Foreground_Color( FT_Face face, + FT_Color foreground_color ); + + + /************************************************************************** + * + * @section: + * layer_management + * + * @title: + * Glyph Layer Management + * + * @abstract: + * Retrieving and manipulating OpenType's 'COLR' table data. + * + * @description: + * The functions described here allow access of colored glyph layer data + * in OpenType's 'COLR' tables. + * + * Note that FreeType does *not* provide rendering in general of glyphs + * that use a 'COLR' table! While FreeType has very limited rendering + * support for 'COLR' v0 tables (without a possibility to change the + * color palette) via @FT_Render_Glyph, there is no such convenience + * code for 'COLR' v1 tables -- while it appears that v1 is simply an + * 'improved' version of v0, this is not the case: it is a completely + * different color font format, and you need a dedicated graphics + * library like Skia or Cairo to handle a v1 table's drawing commands. + */ + + + /************************************************************************** + * + * @struct: + * FT_LayerIterator + * + * @description: + * This iterator object is needed for @FT_Get_Color_Glyph_Layer. + * + * @fields: + * num_layers :: + * The number of glyph layers for the requested glyph index. Will be + * set by @FT_Get_Color_Glyph_Layer. + * + * layer :: + * The current layer. Will be set by @FT_Get_Color_Glyph_Layer. + * + * p :: + * An opaque pointer into 'COLR' table data. The caller must set this + * to `NULL` before the first call of @FT_Get_Color_Glyph_Layer. + */ + typedef struct FT_LayerIterator_ + { + FT_UInt num_layers; + FT_UInt layer; + FT_Byte* p; + + } FT_LayerIterator; + + + /************************************************************************** + * + * @function: + * FT_Get_Color_Glyph_Layer + * + * @description: + * This is an interface to the 'COLR' table in OpenType fonts to + * iteratively retrieve the colored glyph layers associated with the + * current glyph slot. + * + * https://learn.microsoft.com/typography/opentype/spec/colr + * + * The glyph layer data for a given glyph index, if present, provides an + * alternative, multi-color glyph representation: Instead of rendering + * the outline or bitmap with the given glyph index, glyphs with the + * indices and colors returned by this function are rendered layer by + * layer. + * + * The returned elements are ordered in the z~direction from bottom to + * top; the 'n'th element should be rendered with the associated palette + * color and blended on top of the already rendered layers (elements 0, + * 1, ..., n-1). + * + * @input: + * face :: + * A handle to the parent face object. + * + * base_glyph :: + * The glyph index the colored glyph layers are associated with. + * + * @inout: + * iterator :: + * An @FT_LayerIterator object. For the first call you should set + * `iterator->p` to `NULL`. For all following calls, simply use the + * same object again. + * + * @output: + * aglyph_index :: + * The glyph index of the current layer. + * + * acolor_index :: + * The color index into the font face's color palette of the current + * layer. The value 0xFFFF is special; it doesn't reference a palette + * entry but indicates that the text foreground color should be used + * instead (to be set up by the application outside of FreeType). + * + * The color palette can be retrieved with @FT_Palette_Select. + * + * @return: + * Value~1 if everything is OK. If there are no more layers (or if there + * are no layers at all), value~0 gets returned. In case of an error, + * value~0 is returned also. + * + * @note: + * This function is necessary if you want to handle glyph layers by + * yourself. In particular, functions that operate with @FT_GlyphRec + * objects (like @FT_Get_Glyph or @FT_Glyph_To_Bitmap) don't have access + * to this information. + * + * Note that @FT_Render_Glyph is able to handle colored glyph layers + * automatically if the @FT_LOAD_COLOR flag is passed to a previous call + * to @FT_Load_Glyph. [This is an experimental feature.] + * + * @example: + * ``` + * FT_Color* palette; + * FT_LayerIterator iterator; + * + * FT_Bool have_layers; + * FT_UInt layer_glyph_index; + * FT_UInt layer_color_index; + * + * + * error = FT_Palette_Select( face, palette_index, &palette ); + * if ( error ) + * palette = NULL; + * + * iterator.p = NULL; + * have_layers = FT_Get_Color_Glyph_Layer( face, + * glyph_index, + * &layer_glyph_index, + * &layer_color_index, + * &iterator ); + * + * if ( palette && have_layers ) + * { + * do + * { + * FT_Color layer_color; + * + * + * if ( layer_color_index == 0xFFFF ) + * layer_color = text_foreground_color; + * else + * layer_color = palette[layer_color_index]; + * + * // Load and render glyph `layer_glyph_index', then + * // blend resulting pixmap (using color `layer_color') + * // with previously created pixmaps. + * + * } while ( FT_Get_Color_Glyph_Layer( face, + * glyph_index, + * &layer_glyph_index, + * &layer_color_index, + * &iterator ) ); + * } + * ``` + * + * @since: + * 2.10 + */ + FT_EXPORT( FT_Bool ) + FT_Get_Color_Glyph_Layer( FT_Face face, + FT_UInt base_glyph, + FT_UInt *aglyph_index, + FT_UInt *acolor_index, + FT_LayerIterator* iterator ); + + + /************************************************************************** + * + * @enum: + * FT_PaintFormat + * + * @description: + * Enumeration describing the different paint format types of the v1 + * extensions to the 'COLR' table, see + * 'https://github.com/googlefonts/colr-gradients-spec'. + * + * The enumeration values loosely correspond with the format numbers of + * the specification: FreeType always returns a fully specified 'Paint' + * structure for the 'Transform', 'Translate', 'Scale', 'Rotate', and + * 'Skew' table types even though the specification has different formats + * depending on whether or not a center is specified, whether the scale + * is uniform in x and y~direction or not, etc. Also, only non-variable + * format identifiers are listed in this enumeration; as soon as support + * for variable 'COLR' v1 fonts is implemented, interpolation is + * performed dependent on axis coordinates, which are configured on the + * @FT_Face through @FT_Set_Var_Design_Coordinates. This implies that + * always static, readily interpolated values are returned in the 'Paint' + * structures. + * + * @since: + * 2.13 + */ + typedef enum FT_PaintFormat_ + { + FT_COLR_PAINTFORMAT_COLR_LAYERS = 1, + FT_COLR_PAINTFORMAT_SOLID = 2, + FT_COLR_PAINTFORMAT_LINEAR_GRADIENT = 4, + FT_COLR_PAINTFORMAT_RADIAL_GRADIENT = 6, + FT_COLR_PAINTFORMAT_SWEEP_GRADIENT = 8, + FT_COLR_PAINTFORMAT_GLYPH = 10, + FT_COLR_PAINTFORMAT_COLR_GLYPH = 11, + FT_COLR_PAINTFORMAT_TRANSFORM = 12, + FT_COLR_PAINTFORMAT_TRANSLATE = 14, + FT_COLR_PAINTFORMAT_SCALE = 16, + FT_COLR_PAINTFORMAT_ROTATE = 24, + FT_COLR_PAINTFORMAT_SKEW = 28, + FT_COLR_PAINTFORMAT_COMPOSITE = 32, + FT_COLR_PAINT_FORMAT_MAX = 33, + FT_COLR_PAINTFORMAT_UNSUPPORTED = 255 + + } FT_PaintFormat; + + + /************************************************************************** + * + * @struct: + * FT_ColorStopIterator + * + * @description: + * This iterator object is needed for @FT_Get_Colorline_Stops. It keeps + * state while iterating over the stops of an @FT_ColorLine, representing + * the `ColorLine` struct of the v1 extensions to 'COLR', see + * 'https://github.com/googlefonts/colr-gradients-spec'. Do not manually + * modify fields of this iterator. + * + * @fields: + * num_color_stops :: + * The number of color stops for the requested glyph index. Set by + * @FT_Get_Paint. + * + * current_color_stop :: + * The current color stop. Set by @FT_Get_Colorline_Stops. + * + * p :: + * An opaque pointer into 'COLR' table data. Set by @FT_Get_Paint. + * Updated by @FT_Get_Colorline_Stops. + * + * read_variable :: + * A boolean keeping track of whether variable color lines are to be + * read. Set by @FT_Get_Paint. + * + * @since: + * 2.13 + */ + typedef struct FT_ColorStopIterator_ + { + FT_UInt num_color_stops; + FT_UInt current_color_stop; + + FT_Byte* p; + + FT_Bool read_variable; + + } FT_ColorStopIterator; + + + /************************************************************************** + * + * @struct: + * FT_ColorIndex + * + * @description: + * A structure representing a `ColorIndex` value of the 'COLR' v1 + * extensions, see 'https://github.com/googlefonts/colr-gradients-spec'. + * + * @fields: + * palette_index :: + * The palette index into a 'CPAL' palette. + * + * alpha :: + * Alpha transparency value multiplied with the value from 'CPAL'. + * + * @since: + * 2.13 + */ + typedef struct FT_ColorIndex_ + { + FT_UInt16 palette_index; + FT_F2Dot14 alpha; + + } FT_ColorIndex; + + + /************************************************************************** + * + * @struct: + * FT_ColorStop + * + * @description: + * A structure representing a `ColorStop` value of the 'COLR' v1 + * extensions, see 'https://github.com/googlefonts/colr-gradients-spec'. + * + * @fields: + * stop_offset :: + * The stop offset along the gradient, expressed as a 16.16 fixed-point + * coordinate. + * + * color :: + * The color information for this stop, see @FT_ColorIndex. + * + * @since: + * 2.13 + */ + typedef struct FT_ColorStop_ + { + FT_Fixed stop_offset; + FT_ColorIndex color; + + } FT_ColorStop; + + + /************************************************************************** + * + * @enum: + * FT_PaintExtend + * + * @description: + * An enumeration representing the 'Extend' mode of the 'COLR' v1 + * extensions, see 'https://github.com/googlefonts/colr-gradients-spec'. + * It describes how the gradient fill continues at the other boundaries. + * + * @since: + * 2.13 + */ + typedef enum FT_PaintExtend_ + { + FT_COLR_PAINT_EXTEND_PAD = 0, + FT_COLR_PAINT_EXTEND_REPEAT = 1, + FT_COLR_PAINT_EXTEND_REFLECT = 2 + + } FT_PaintExtend; + + + /************************************************************************** + * + * @struct: + * FT_ColorLine + * + * @description: + * A structure representing a `ColorLine` value of the 'COLR' v1 + * extensions, see 'https://github.com/googlefonts/colr-gradients-spec'. + * It describes a list of color stops along the defined gradient. + * + * @fields: + * extend :: + * The extend mode at the outer boundaries, see @FT_PaintExtend. + * + * color_stop_iterator :: + * The @FT_ColorStopIterator used to enumerate and retrieve the + * actual @FT_ColorStop's. + * + * @since: + * 2.13 + */ + typedef struct FT_ColorLine_ + { + FT_PaintExtend extend; + FT_ColorStopIterator color_stop_iterator; + + } FT_ColorLine; + + + /************************************************************************** + * + * @struct: + * FT_Affine23 + * + * @description: + * A structure used to store a 2x3 matrix. Coefficients are in + * 16.16 fixed-point format. The computation performed is + * + * ``` + * x' = x*xx + y*xy + dx + * y' = x*yx + y*yy + dy + * ``` + * + * @fields: + * xx :: + * Matrix coefficient. + * + * xy :: + * Matrix coefficient. + * + * dx :: + * x translation. + * + * yx :: + * Matrix coefficient. + * + * yy :: + * Matrix coefficient. + * + * dy :: + * y translation. + * + * @since: + * 2.13 + */ + typedef struct FT_Affine_23_ + { + FT_Fixed xx, xy, dx; + FT_Fixed yx, yy, dy; + + } FT_Affine23; + + + /************************************************************************** + * + * @enum: + * FT_Composite_Mode + * + * @description: + * An enumeration listing the 'COLR' v1 composite modes used in + * @FT_PaintComposite. For more details on each paint mode, see + * 'https://www.w3.org/TR/compositing-1/#porterduffcompositingoperators'. + * + * @since: + * 2.13 + */ + typedef enum FT_Composite_Mode_ + { + FT_COLR_COMPOSITE_CLEAR = 0, + FT_COLR_COMPOSITE_SRC = 1, + FT_COLR_COMPOSITE_DEST = 2, + FT_COLR_COMPOSITE_SRC_OVER = 3, + FT_COLR_COMPOSITE_DEST_OVER = 4, + FT_COLR_COMPOSITE_SRC_IN = 5, + FT_COLR_COMPOSITE_DEST_IN = 6, + FT_COLR_COMPOSITE_SRC_OUT = 7, + FT_COLR_COMPOSITE_DEST_OUT = 8, + FT_COLR_COMPOSITE_SRC_ATOP = 9, + FT_COLR_COMPOSITE_DEST_ATOP = 10, + FT_COLR_COMPOSITE_XOR = 11, + FT_COLR_COMPOSITE_PLUS = 12, + FT_COLR_COMPOSITE_SCREEN = 13, + FT_COLR_COMPOSITE_OVERLAY = 14, + FT_COLR_COMPOSITE_DARKEN = 15, + FT_COLR_COMPOSITE_LIGHTEN = 16, + FT_COLR_COMPOSITE_COLOR_DODGE = 17, + FT_COLR_COMPOSITE_COLOR_BURN = 18, + FT_COLR_COMPOSITE_HARD_LIGHT = 19, + FT_COLR_COMPOSITE_SOFT_LIGHT = 20, + FT_COLR_COMPOSITE_DIFFERENCE = 21, + FT_COLR_COMPOSITE_EXCLUSION = 22, + FT_COLR_COMPOSITE_MULTIPLY = 23, + FT_COLR_COMPOSITE_HSL_HUE = 24, + FT_COLR_COMPOSITE_HSL_SATURATION = 25, + FT_COLR_COMPOSITE_HSL_COLOR = 26, + FT_COLR_COMPOSITE_HSL_LUMINOSITY = 27, + FT_COLR_COMPOSITE_MAX = 28 + + } FT_Composite_Mode; + + + /************************************************************************** + * + * @struct: + * FT_OpaquePaint + * + * @description: + * A structure representing an offset to a `Paint` value stored in any + * of the paint tables of a 'COLR' v1 font. Compare Offset<24> there. + * When 'COLR' v1 paint tables represented by FreeType objects such as + * @FT_PaintColrLayers, @FT_PaintComposite, or @FT_PaintTransform + * reference downstream nested paint tables, we do not immediately + * retrieve them but encapsulate their location in this type. Use + * @FT_Get_Paint to retrieve the actual @FT_COLR_Paint object that + * describes the details of the respective paint table. + * + * @fields: + * p :: + * An internal offset to a Paint table, needs to be set to NULL before + * passing this struct as an argument to @FT_Get_Paint. + * + * insert_root_transform :: + * An internal boolean to track whether an initial root transform is + * to be provided. Do not set this value. + * + * @since: + * 2.13 + */ + typedef struct FT_Opaque_Paint_ + { + FT_Byte* p; + FT_Bool insert_root_transform; + } FT_OpaquePaint; + + + /************************************************************************** + * + * @struct: + * FT_PaintColrLayers + * + * @description: + * A structure representing a `PaintColrLayers` table of a 'COLR' v1 + * font. This table describes a set of layers that are to be composited + * with composite mode `FT_COLR_COMPOSITE_SRC_OVER`. The return value + * of this function is an @FT_LayerIterator initialized so that it can + * be used with @FT_Get_Paint_Layers to retrieve the @FT_OpaquePaint + * objects as references to each layer. + * + * @fields: + * layer_iterator :: + * The layer iterator that describes the layers of this paint. + * + * @since: + * 2.13 + */ + typedef struct FT_PaintColrLayers_ + { + FT_LayerIterator layer_iterator; + + } FT_PaintColrLayers; + + + /************************************************************************** + * + * @struct: + * FT_PaintSolid + * + * @description: + * A structure representing a `PaintSolid` value of the 'COLR' v1 + * extensions, see 'https://github.com/googlefonts/colr-gradients-spec'. + * Using a `PaintSolid` value means that the glyph layer filled with + * this paint is solid-colored and does not contain a gradient. + * + * @fields: + * color :: + * The color information for this solid paint, see @FT_ColorIndex. + * + * @since: + * 2.13 + */ + typedef struct FT_PaintSolid_ + { + FT_ColorIndex color; + + } FT_PaintSolid; + + + /************************************************************************** + * + * @struct: + * FT_PaintLinearGradient + * + * @description: + * A structure representing a `PaintLinearGradient` value of the 'COLR' + * v1 extensions, see + * 'https://github.com/googlefonts/colr-gradients-spec'. The glyph + * layer filled with this paint is drawn filled with a linear gradient. + * + * @fields: + * colorline :: + * The @FT_ColorLine information for this paint, i.e., the list of + * color stops along the gradient. + * + * p0 :: + * The starting point of the gradient definition in font units + * represented as a 16.16 fixed-point `FT_Vector`. + * + * p1 :: + * The end point of the gradient definition in font units + * represented as a 16.16 fixed-point `FT_Vector`. + * + * p2 :: + * Optional point~p2 to rotate the gradient in font units + * represented as a 16.16 fixed-point `FT_Vector`. + * Otherwise equal to~p0. + * + * @since: + * 2.13 + */ + typedef struct FT_PaintLinearGradient_ + { + FT_ColorLine colorline; + + /* TODO: Potentially expose those as x0, y0 etc. */ + FT_Vector p0; + FT_Vector p1; + FT_Vector p2; + + } FT_PaintLinearGradient; + + + /************************************************************************** + * + * @struct: + * FT_PaintRadialGradient + * + * @description: + * A structure representing a `PaintRadialGradient` value of the 'COLR' + * v1 extensions, see + * 'https://github.com/googlefonts/colr-gradients-spec'. The glyph + * layer filled with this paint is drawn filled with a radial gradient. + * + * @fields: + * colorline :: + * The @FT_ColorLine information for this paint, i.e., the list of + * color stops along the gradient. + * + * c0 :: + * The center of the starting point of the radial gradient in font + * units represented as a 16.16 fixed-point `FT_Vector`. + * + * r0 :: + * The radius of the starting circle of the radial gradient in font + * units represented as a 16.16 fixed-point value. + * + * c1 :: + * The center of the end point of the radial gradient in font units + * represented as a 16.16 fixed-point `FT_Vector`. + * + * r1 :: + * The radius of the end circle of the radial gradient in font + * units represented as a 16.16 fixed-point value. + * + * @since: + * 2.13 + */ + typedef struct FT_PaintRadialGradient_ + { + FT_ColorLine colorline; + + FT_Vector c0; + FT_Pos r0; + FT_Vector c1; + FT_Pos r1; + + } FT_PaintRadialGradient; + + + /************************************************************************** + * + * @struct: + * FT_PaintSweepGradient + * + * @description: + * A structure representing a `PaintSweepGradient` value of the 'COLR' + * v1 extensions, see + * 'https://github.com/googlefonts/colr-gradients-spec'. The glyph + * layer filled with this paint is drawn filled with a sweep gradient + * from `start_angle` to `end_angle`. + * + * @fields: + * colorline :: + * The @FT_ColorLine information for this paint, i.e., the list of + * color stops along the gradient. + * + * center :: + * The center of the sweep gradient in font units represented as a + * vector of 16.16 fixed-point values. + * + * start_angle :: + * The start angle of the sweep gradient in 16.16 fixed-point + * format specifying degrees divided by 180.0 (as in the + * spec). Multiply by 180.0f to receive degrees value. Values are + * given counter-clockwise, starting from the (positive) y~axis. + * + * end_angle :: + * The end angle of the sweep gradient in 16.16 fixed-point + * format specifying degrees divided by 180.0 (as in the + * spec). Multiply by 180.0f to receive degrees value. Values are + * given counter-clockwise, starting from the (positive) y~axis. + * + * @since: + * 2.13 + */ + typedef struct FT_PaintSweepGradient_ + { + FT_ColorLine colorline; + + FT_Vector center; + FT_Fixed start_angle; + FT_Fixed end_angle; + + } FT_PaintSweepGradient; + + + /************************************************************************** + * + * @struct: + * FT_PaintGlyph + * + * @description: + * A structure representing a 'COLR' v1 `PaintGlyph` paint table. + * + * @fields: + * paint :: + * An opaque paint object pointing to a `Paint` table that serves as + * the fill for the glyph ID. + * + * glyphID :: + * The glyph ID from the 'glyf' table, which serves as the contour + * information that is filled with paint. + * + * @since: + * 2.13 + */ + typedef struct FT_PaintGlyph_ + { + FT_OpaquePaint paint; + FT_UInt glyphID; + + } FT_PaintGlyph; + + + /************************************************************************** + * + * @struct: + * FT_PaintColrGlyph + * + * @description: + * A structure representing a 'COLR' v1 `PaintColorGlyph` paint table. + * + * @fields: + * glyphID :: + * The glyph ID from the `BaseGlyphV1List` table that is drawn for + * this paint. + * + * @since: + * 2.13 + */ + typedef struct FT_PaintColrGlyph_ + { + FT_UInt glyphID; + + } FT_PaintColrGlyph; + + + /************************************************************************** + * + * @struct: + * FT_PaintTransform + * + * @description: + * A structure representing a 'COLR' v1 `PaintTransform` paint table. + * + * @fields: + * paint :: + * An opaque paint that is subject to being transformed. + * + * affine :: + * A 2x3 transformation matrix in @FT_Affine23 format containing + * 16.16 fixed-point values. + * + * @since: + * 2.13 + */ + typedef struct FT_PaintTransform_ + { + FT_OpaquePaint paint; + FT_Affine23 affine; + + } FT_PaintTransform; + + + /************************************************************************** + * + * @struct: + * FT_PaintTranslate + * + * @description: + * A structure representing a 'COLR' v1 `PaintTranslate` paint table. + * Used for translating downstream paints by a given x and y~delta. + * + * @fields: + * paint :: + * An @FT_OpaquePaint object referencing the paint that is to be + * rotated. + * + * dx :: + * Translation in x~direction in font units represented as a + * 16.16 fixed-point value. + * + * dy :: + * Translation in y~direction in font units represented as a + * 16.16 fixed-point value. + * + * @since: + * 2.13 + */ + typedef struct FT_PaintTranslate_ + { + FT_OpaquePaint paint; + + FT_Fixed dx; + FT_Fixed dy; + + } FT_PaintTranslate; + + + /************************************************************************** + * + * @struct: + * FT_PaintScale + * + * @description: + * A structure representing all of the 'COLR' v1 'PaintScale*' paint + * tables. Used for scaling downstream paints by a given x and y~scale, + * with a given center. This structure is used for all 'PaintScale*' + * types that are part of specification; fields of this structure are + * filled accordingly. If there is a center, the center values are set, + * otherwise they are set to the zero coordinate. If the source font + * file has 'PaintScaleUniform*' set, the scale values are set + * accordingly to the same value. + * + * @fields: + * paint :: + * An @FT_OpaquePaint object referencing the paint that is to be + * scaled. + * + * scale_x :: + * Scale factor in x~direction represented as a + * 16.16 fixed-point value. + * + * scale_y :: + * Scale factor in y~direction represented as a + * 16.16 fixed-point value. + * + * center_x :: + * x~coordinate of center point to scale from represented as a + * 16.16 fixed-point value. + * + * center_y :: + * y~coordinate of center point to scale from represented as a + * 16.16 fixed-point value. + * + * @since: + * 2.13 + */ + typedef struct FT_PaintScale_ + { + FT_OpaquePaint paint; + + FT_Fixed scale_x; + FT_Fixed scale_y; + + FT_Fixed center_x; + FT_Fixed center_y; + + } FT_PaintScale; + + + /************************************************************************** + * + * @struct: + * FT_PaintRotate + * + * @description: + * A structure representing a 'COLR' v1 `PaintRotate` paint table. Used + * for rotating downstream paints with a given center and angle. + * + * @fields: + * paint :: + * An @FT_OpaquePaint object referencing the paint that is to be + * rotated. + * + * angle :: + * The rotation angle that is to be applied in degrees divided by + * 180.0 (as in the spec) represented as a 16.16 fixed-point + * value. Multiply by 180.0f to receive degrees value. + * + * center_x :: + * The x~coordinate of the pivot point of the rotation in font + * units represented as a 16.16 fixed-point value. + * + * center_y :: + * The y~coordinate of the pivot point of the rotation in font + * units represented as a 16.16 fixed-point value. + * + * @since: + * 2.13 + */ + + typedef struct FT_PaintRotate_ + { + FT_OpaquePaint paint; + + FT_Fixed angle; + + FT_Fixed center_x; + FT_Fixed center_y; + + } FT_PaintRotate; + + + /************************************************************************** + * + * @struct: + * FT_PaintSkew + * + * @description: + * A structure representing a 'COLR' v1 `PaintSkew` paint table. Used + * for skewing or shearing downstream paints by a given center and + * angle. + * + * @fields: + * paint :: + * An @FT_OpaquePaint object referencing the paint that is to be + * skewed. + * + * x_skew_angle :: + * The skewing angle in x~direction in degrees divided by 180.0 + * (as in the spec) represented as a 16.16 fixed-point + * value. Multiply by 180.0f to receive degrees. + * + * y_skew_angle :: + * The skewing angle in y~direction in degrees divided by 180.0 + * (as in the spec) represented as a 16.16 fixed-point + * value. Multiply by 180.0f to receive degrees. + * + * center_x :: + * The x~coordinate of the pivot point of the skew in font units + * represented as a 16.16 fixed-point value. + * + * center_y :: + * The y~coordinate of the pivot point of the skew in font units + * represented as a 16.16 fixed-point value. + * + * @since: + * 2.13 + */ + typedef struct FT_PaintSkew_ + { + FT_OpaquePaint paint; + + FT_Fixed x_skew_angle; + FT_Fixed y_skew_angle; + + FT_Fixed center_x; + FT_Fixed center_y; + + } FT_PaintSkew; + + + /************************************************************************** + * + * @struct: + * FT_PaintComposite + * + * @description: + * A structure representing a 'COLR' v1 `PaintComposite` paint table. + * Used for compositing two paints in a 'COLR' v1 directed acyclic graph. + * + * @fields: + * source_paint :: + * An @FT_OpaquePaint object referencing the source that is to be + * composited. + * + * composite_mode :: + * An @FT_Composite_Mode enum value determining the composition + * operation. + * + * backdrop_paint :: + * An @FT_OpaquePaint object referencing the backdrop paint that + * `source_paint` is composited onto. + * + * @since: + * 2.13 + */ + typedef struct FT_PaintComposite_ + { + FT_OpaquePaint source_paint; + FT_Composite_Mode composite_mode; + FT_OpaquePaint backdrop_paint; + + } FT_PaintComposite; + + + /************************************************************************** + * + * @union: + * FT_COLR_Paint + * + * @description: + * A union object representing format and details of a paint table of a + * 'COLR' v1 font, see + * 'https://github.com/googlefonts/colr-gradients-spec'. Use + * @FT_Get_Paint to retrieve a @FT_COLR_Paint for an @FT_OpaquePaint + * object. + * + * @fields: + * format :: + * The gradient format for this Paint structure. + * + * u :: + * Union of all paint table types: + * + * * @FT_PaintColrLayers + * * @FT_PaintGlyph + * * @FT_PaintSolid + * * @FT_PaintLinearGradient + * * @FT_PaintRadialGradient + * * @FT_PaintSweepGradient + * * @FT_PaintTransform + * * @FT_PaintTranslate + * * @FT_PaintRotate + * * @FT_PaintSkew + * * @FT_PaintComposite + * * @FT_PaintColrGlyph + * + * @since: + * 2.13 + */ + typedef struct FT_COLR_Paint_ + { + FT_PaintFormat format; + + union + { + FT_PaintColrLayers colr_layers; + FT_PaintGlyph glyph; + FT_PaintSolid solid; + FT_PaintLinearGradient linear_gradient; + FT_PaintRadialGradient radial_gradient; + FT_PaintSweepGradient sweep_gradient; + FT_PaintTransform transform; + FT_PaintTranslate translate; + FT_PaintScale scale; + FT_PaintRotate rotate; + FT_PaintSkew skew; + FT_PaintComposite composite; + FT_PaintColrGlyph colr_glyph; + + } u; + + } FT_COLR_Paint; + + + /************************************************************************** + * + * @enum: + * FT_Color_Root_Transform + * + * @description: + * An enumeration to specify whether @FT_Get_Color_Glyph_Paint is to + * return a root transform to configure the client's graphics context + * matrix. + * + * @values: + * FT_COLOR_INCLUDE_ROOT_TRANSFORM :: + * Do include the root transform as the initial @FT_COLR_Paint object. + * + * FT_COLOR_NO_ROOT_TRANSFORM :: + * Do not output an initial root transform. + * + * @since: + * 2.13 + */ + typedef enum FT_Color_Root_Transform_ + { + FT_COLOR_INCLUDE_ROOT_TRANSFORM, + FT_COLOR_NO_ROOT_TRANSFORM, + + FT_COLOR_ROOT_TRANSFORM_MAX + + } FT_Color_Root_Transform; + + + /************************************************************************** + * + * @struct: + * FT_ClipBox + * + * @description: + * A structure representing a 'COLR' v1 'ClipBox' table. 'COLR' v1 + * glyphs may optionally define a clip box for aiding allocation or + * defining a maximum drawable region. Use @FT_Get_Color_Glyph_ClipBox + * to retrieve it. + * + * @fields: + * bottom_left :: + * The bottom left corner of the clip box as an @FT_Vector with + * fixed-point coordinates in 26.6 format. + * + * top_left :: + * The top left corner of the clip box as an @FT_Vector with + * fixed-point coordinates in 26.6 format. + * + * top_right :: + * The top right corner of the clip box as an @FT_Vector with + * fixed-point coordinates in 26.6 format. + * + * bottom_right :: + * The bottom right corner of the clip box as an @FT_Vector with + * fixed-point coordinates in 26.6 format. + * + * @since: + * 2.13 + */ + typedef struct FT_ClipBox_ + { + FT_Vector bottom_left; + FT_Vector top_left; + FT_Vector top_right; + FT_Vector bottom_right; + + } FT_ClipBox; + + + /************************************************************************** + * + * @function: + * FT_Get_Color_Glyph_Paint + * + * @description: + * This is the starting point and interface to color gradient + * information in a 'COLR' v1 table in OpenType fonts to recursively + * retrieve the paint tables for the directed acyclic graph of a colored + * glyph, given a glyph ID. + * + * https://github.com/googlefonts/colr-gradients-spec + * + * In a 'COLR' v1 font, each color glyph defines a directed acyclic + * graph of nested paint tables, such as `PaintGlyph`, `PaintSolid`, + * `PaintLinearGradient`, `PaintRadialGradient`, and so on. Using this + * function and specifying a glyph ID, one retrieves the root paint + * table for this glyph ID. + * + * This function allows control whether an initial root transform is + * returned to configure scaling, transform, and translation correctly + * on the client's graphics context. The initial root transform is + * computed and returned according to the values configured for @FT_Size + * and @FT_Set_Transform on the @FT_Face object, see below for details + * of the `root_transform` parameter. This has implications for a + * client 'COLR' v1 implementation: When this function returns an + * initially computed root transform, at the time of executing the + * @FT_PaintGlyph operation, the contours should be retrieved using + * @FT_Load_Glyph at unscaled, untransformed size. This is because the + * root transform applied to the graphics context will take care of + * correct scaling. + * + * Alternatively, to allow hinting of contours, at the time of executing + * @FT_Load_Glyph, the current graphics context transformation matrix + * can be decomposed into a scaling matrix and a remainder, and + * @FT_Load_Glyph can be used to retrieve the contours at scaled size. + * Care must then be taken to blit or clip to the graphics context with + * taking this remainder transformation into account. + * + * @input: + * face :: + * A handle to the parent face object. + * + * base_glyph :: + * The glyph index for which to retrieve the root paint table. + * + * root_transform :: + * Specifies whether an initially computed root is returned by the + * @FT_PaintTransform operation to account for the activated size + * (see @FT_Activate_Size) and the configured transform and translate + * (see @FT_Set_Transform). + * + * This root transform is returned before nodes of the glyph graph of + * the font are returned. Subsequent @FT_COLR_Paint structures + * contain unscaled and untransformed values. The inserted root + * transform enables the client application to apply an initial + * transform to its graphics context. When executing subsequent + * FT_COLR_Paint operations, values from @FT_COLR_Paint operations + * will ultimately be correctly scaled because of the root transform + * applied to the graphics context. Use + * @FT_COLOR_INCLUDE_ROOT_TRANSFORM to include the root transform, use + * @FT_COLOR_NO_ROOT_TRANSFORM to not include it. The latter may be + * useful when traversing the 'COLR' v1 glyph graph and reaching a + * @FT_PaintColrGlyph. When recursing into @FT_PaintColrGlyph and + * painting that inline, no additional root transform is needed as it + * has already been applied to the graphics context at the beginning + * of drawing this glyph. + * + * @output: + * paint :: + * The @FT_OpaquePaint object that references the actual paint table. + * + * The respective actual @FT_COLR_Paint object is retrieved via + * @FT_Get_Paint. + * + * @return: + * Value~1 if everything is OK. If no color glyph is found, or the root + * paint could not be retrieved, value~0 gets returned. In case of an + * error, value~0 is returned also. + * + * @since: + * 2.13 + */ + FT_EXPORT( FT_Bool ) + FT_Get_Color_Glyph_Paint( FT_Face face, + FT_UInt base_glyph, + FT_Color_Root_Transform root_transform, + FT_OpaquePaint* paint ); + + + /************************************************************************** + * + * @function: + * FT_Get_Color_Glyph_ClipBox + * + * @description: + * Search for a 'COLR' v1 clip box for the specified `base_glyph` and + * fill the `clip_box` parameter with the 'COLR' v1 'ClipBox' information + * if one is found. + * + * @input: + * face :: + * A handle to the parent face object. + * + * base_glyph :: + * The glyph index for which to retrieve the clip box. + * + * @output: + * clip_box :: + * The clip box for the requested `base_glyph` if one is found. The + * clip box is computed taking scale and transformations configured on + * the @FT_Face into account. @FT_ClipBox contains @FT_Vector values + * in 26.6 format. + * + * @return: + * Value~1 if a clip box is found. If no clip box is found or an error + * occurred, value~0 is returned. + * + * @note: + * To retrieve the clip box in font units, reset scale to units-per-em + * and remove transforms configured using @FT_Set_Transform. + * + * @since: + * 2.13 + */ + FT_EXPORT( FT_Bool ) + FT_Get_Color_Glyph_ClipBox( FT_Face face, + FT_UInt base_glyph, + FT_ClipBox* clip_box ); + + + /************************************************************************** + * + * @function: + * FT_Get_Paint_Layers + * + * @description: + * Access the layers of a `PaintColrLayers` table. + * + * If the root paint of a color glyph, or a nested paint of a 'COLR' + * glyph is a `PaintColrLayers` table, this function retrieves the + * layers of the `PaintColrLayers` table. + * + * The @FT_PaintColrLayers object contains an @FT_LayerIterator, which + * is used here to iterate over the layers. Each layer is returned as + * an @FT_OpaquePaint object, which then can be used with @FT_Get_Paint + * to retrieve the actual paint object. + * + * @input: + * face :: + * A handle to the parent face object. + * + * @inout: + * iterator :: + * The @FT_LayerIterator from an @FT_PaintColrLayers object, for which + * the layers are to be retrieved. The internal state of the iterator + * is incremented after one call to this function for retrieving one + * layer. + * + * @output: + * paint :: + * The @FT_OpaquePaint object that references the actual paint table. + * The respective actual @FT_COLR_Paint object is retrieved via + * @FT_Get_Paint. + * + * @return: + * Value~1 if everything is OK. Value~0 gets returned when the paint + * object can not be retrieved or any other error occurs. + * + * @since: + * 2.13 + */ + FT_EXPORT( FT_Bool ) + FT_Get_Paint_Layers( FT_Face face, + FT_LayerIterator* iterator, + FT_OpaquePaint* paint ); + + + /************************************************************************** + * + * @function: + * FT_Get_Colorline_Stops + * + * @description: + * This is an interface to color gradient information in a 'COLR' v1 + * table in OpenType fonts to iteratively retrieve the gradient and + * solid fill information for colored glyph layers for a specified glyph + * ID. + * + * https://github.com/googlefonts/colr-gradients-spec + * + * @input: + * face :: + * A handle to the parent face object. + * + * @inout: + * iterator :: + * The retrieved @FT_ColorStopIterator, configured on an @FT_ColorLine, + * which in turn got retrieved via paint information in + * @FT_PaintLinearGradient or @FT_PaintRadialGradient. + * + * @output: + * color_stop :: + * Color index and alpha value for the retrieved color stop. + * + * @return: + * Value~1 if everything is OK. If there are no more color stops, + * value~0 gets returned. In case of an error, value~0 is returned + * also. + * + * @since: + * 2.13 + */ + FT_EXPORT( FT_Bool ) + FT_Get_Colorline_Stops( FT_Face face, + FT_ColorStop* color_stop, + FT_ColorStopIterator* iterator ); + + + /************************************************************************** + * + * @function: + * FT_Get_Paint + * + * @description: + * Access the details of a paint using an @FT_OpaquePaint opaque paint + * object, which internally stores the offset to the respective `Paint` + * object in the 'COLR' table. + * + * @input: + * face :: + * A handle to the parent face object. + * + * opaque_paint :: + * The opaque paint object for which the underlying @FT_COLR_Paint + * data is to be retrieved. + * + * @output: + * paint :: + * The specific @FT_COLR_Paint object containing information coming + * from one of the font's `Paint*` tables. + * + * @return: + * Value~1 if everything is OK. Value~0 if no details can be found for + * this paint or any other error occurred. + * + * @since: + * 2.13 + */ + FT_EXPORT( FT_Bool ) + FT_Get_Paint( FT_Face face, + FT_OpaquePaint opaque_paint, + FT_COLR_Paint* paint ); + + /* */ + + +FT_END_HEADER + +#endif /* FTCOLOR_H_ */ + + +/* END */ diff --git a/third_party/tlRender-install-Release/include/freetype2/freetype/ftdriver.h b/third_party/tlRender-install-Release/include/freetype2/freetype/ftdriver.h new file mode 100644 index 00000000..b65a06ab --- /dev/null +++ b/third_party/tlRender-install-Release/include/freetype2/freetype/ftdriver.h @@ -0,0 +1,1320 @@ +/**************************************************************************** + * + * ftdriver.h + * + * FreeType API for controlling driver modules (specification only). + * + * Copyright (C) 2017-2025 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + +#ifndef FTDRIVER_H_ +#define FTDRIVER_H_ + +#include +#include + +#ifdef FREETYPE_H +#error "freetype.h of FreeType 1 has been loaded!" +#error "Please fix the directory search order for header files" +#error "so that freetype.h of FreeType 2 is found first." +#endif + + +FT_BEGIN_HEADER + + + /************************************************************************** + * + * @section: + * auto_hinter + * + * @title: + * The auto-hinter + * + * @abstract: + * Controlling the auto-hinting module. + * + * @description: + * While FreeType's auto-hinter doesn't expose API functions by itself, + * it is possible to control its behaviour with @FT_Property_Set and + * @FT_Property_Get. The following lists the available properties + * together with the necessary macros and structures. + * + * Note that the auto-hinter's module name is 'autofitter' for historical + * reasons. + * + * Available properties are @increase-x-height, @no-stem-darkening + * (experimental), @darkening-parameters (experimental), + * @glyph-to-script-map (experimental), @fallback-script (experimental), + * and @default-script (experimental), as documented in the @properties + * section. + * + */ + + + /************************************************************************** + * + * @section: + * cff_driver + * + * @title: + * The CFF driver + * + * @abstract: + * Controlling the CFF driver module. + * + * @description: + * While FreeType's CFF driver doesn't expose API functions by itself, it + * is possible to control its behaviour with @FT_Property_Set and + * @FT_Property_Get. + * + * The CFF driver's module name is 'cff'. + * + * Available properties are @hinting-engine, @no-stem-darkening, + * @darkening-parameters, and @random-seed, as documented in the + * @properties section. + * + * + * **Hinting and anti-aliasing principles of the new engine** + * + * The rasterizer is positioning horizontal features (e.g., ascender + * height & x-height, or crossbars) on the pixel grid and minimizing the + * amount of anti-aliasing applied to them, while placing vertical + * features (vertical stems) on the pixel grid without hinting, thus + * representing the stem position and weight accurately. Sometimes the + * vertical stems may be only partially black. In this context, + * 'anti-aliasing' means that stems are not positioned exactly on pixel + * borders, causing a fuzzy appearance. + * + * There are two principles behind this approach. + * + * 1) No hinting in the horizontal direction: Unlike 'superhinted' + * TrueType, which changes glyph widths to accommodate regular + * inter-glyph spacing, Adobe's approach is 'faithful to the design' in + * representing both the glyph width and the inter-glyph spacing designed + * for the font. This makes the screen display as close as it can be to + * the result one would get with infinite resolution, while preserving + * what is considered the key characteristics of each glyph. Note that + * the distances between unhinted and grid-fitted positions at small + * sizes are comparable to kerning values and thus would be noticeable + * (and distracting) while reading if hinting were applied. + * + * One of the reasons to not hint horizontally is anti-aliasing for LCD + * screens: The pixel geometry of modern displays supplies three vertical + * subpixels as the eye moves horizontally across each visible pixel. On + * devices where we can be certain this characteristic is present a + * rasterizer can take advantage of the subpixels to add increments of + * weight. In Western writing systems this turns out to be the more + * critical direction anyway; the weights and spacing of vertical stems + * (see above) are central to Armenian, Cyrillic, Greek, and Latin type + * designs. Even when the rasterizer uses greyscale anti-aliasing instead + * of color (a necessary compromise when one doesn't know the screen + * characteristics), the unhinted vertical features preserve the design's + * weight and spacing much better than aliased type would. + * + * 2) Alignment in the vertical direction: Weights and spacing along the + * y~axis are less critical; what is much more important is the visual + * alignment of related features (like cap-height and x-height). The + * sense of alignment for these is enhanced by the sharpness of grid-fit + * edges, while the cruder vertical resolution (full pixels instead of + * 1/3 pixels) is less of a problem. + * + * On the technical side, horizontal alignment zones for ascender, + * x-height, and other important height values (traditionally called + * 'blue zones') as defined in the font are positioned independently, + * each being rounded to the nearest pixel edge, taking care of overshoot + * suppression at small sizes, stem darkening, and scaling. + * + * Hstems (that is, hint values defined in the font to help align + * horizontal features) that fall within a blue zone are said to be + * 'captured' and are aligned to that zone. Uncaptured stems are moved + * in one of four ways, top edge up or down, bottom edge up or down. + * Unless there are conflicting hstems, the smallest movement is taken to + * minimize distortion. + * + */ + + + /************************************************************************** + * + * @section: + * pcf_driver + * + * @title: + * The PCF driver + * + * @abstract: + * Controlling the PCF driver module. + * + * @description: + * While FreeType's PCF driver doesn't expose API functions by itself, it + * is possible to control its behaviour with @FT_Property_Set and + * @FT_Property_Get. Right now, there is a single property + * @no-long-family-names available if FreeType is compiled with + * PCF_CONFIG_OPTION_LONG_FAMILY_NAMES. + * + * The PCF driver's module name is 'pcf'. + * + */ + + + /************************************************************************** + * + * @section: + * t1_cid_driver + * + * @title: + * The Type 1 and CID drivers + * + * @abstract: + * Controlling the Type~1 and CID driver modules. + * + * @description: + * It is possible to control the behaviour of FreeType's Type~1 and + * Type~1 CID drivers with @FT_Property_Set and @FT_Property_Get. + * + * Behind the scenes, both drivers use the Adobe CFF engine for hinting; + * however, the used properties must be specified separately. + * + * The Type~1 driver's module name is 'type1'; the CID driver's module + * name is 't1cid'. + * + * Available properties are @hinting-engine, @no-stem-darkening, + * @darkening-parameters, and @random-seed, as documented in the + * @properties section. + * + * Please see the @cff_driver section for more details on the new hinting + * engine. + * + */ + + + /************************************************************************** + * + * @section: + * tt_driver + * + * @title: + * The TrueType driver + * + * @abstract: + * Controlling the TrueType driver module. + * + * @description: + * While FreeType's TrueType driver doesn't expose API functions by + * itself, it is possible to control its behaviour with @FT_Property_Set + * and @FT_Property_Get. + * + * The TrueType driver's module name is 'truetype'; a single property + * @interpreter-version is available, as documented in the @properties + * section. + * + * To help understand the differences between interpreter versions, we + * introduce a list of definitions, kindly provided by Greg Hitchcock. + * + * _Bi-Level Rendering_ + * + * Monochromatic rendering, exclusively used in the early days of + * TrueType by both Apple and Microsoft. Microsoft's GDI interface + * supported hinting of the right-side bearing point, such that the + * advance width could be non-linear. Most often this was done to + * achieve some level of glyph symmetry. To enable reasonable + * performance (e.g., not having to run hinting on all glyphs just to get + * the widths) there was a bit in the head table indicating if the side + * bearing was hinted, and additional tables, 'hdmx' and 'LTSH', to cache + * hinting widths across multiple sizes and device aspect ratios. + * + * _Font Smoothing_ + * + * Microsoft's GDI implementation of anti-aliasing. Not traditional + * anti-aliasing as the outlines were hinted before the sampling. The + * widths matched the bi-level rendering. + * + * _ClearType Rendering_ + * + * Technique that uses physical subpixels to improve rendering on LCD + * (and other) displays. Because of the higher resolution, many methods + * of improving symmetry in glyphs through hinting the right-side bearing + * were no longer necessary. This lead to what GDI calls 'natural + * widths' ClearType, see + * http://rastertragedy.com/RTRCh4.htm#Sec21. Since hinting + * has extra resolution, most non-linearity went away, but it is still + * possible for hints to change the advance widths in this mode. + * + * _ClearType Compatible Widths_ + * + * One of the earliest challenges with ClearType was allowing the + * implementation in GDI to be selected without requiring all UI and + * documents to reflow. To address this, a compatible method of + * rendering ClearType was added where the font hints are executed once + * to determine the width in bi-level rendering, and then re-run in + * ClearType, with the difference in widths being absorbed in the font + * hints for ClearType (mostly in the white space of hints); see + * http://rastertragedy.com/RTRCh4.htm#Sec20. Somewhat by + * definition, compatible width ClearType allows for non-linear widths, + * but only when the bi-level version has non-linear widths. + * + * _ClearType Subpixel Positioning_ + * + * One of the nice benefits of ClearType is the ability to more crisply + * display fractional widths; unfortunately, the GDI model of integer + * bitmaps did not support this. However, the WPF and Direct Write + * frameworks do support fractional widths. DWrite calls this 'natural + * mode', not to be confused with GDI's 'natural widths'. Subpixel + * positioning, in the current implementation of Direct Write, + * unfortunately does not support hinted advance widths, see + * http://rastertragedy.com/RTRCh4.htm#Sec22. Note that the + * TrueType interpreter fully allows the advance width to be adjusted in + * this mode, just the DWrite client will ignore those changes. + * + * _ClearType Backward Compatibility_ + * + * This is a set of exceptions made in the TrueType interpreter to + * minimize hinting techniques that were problematic with the extra + * resolution of ClearType; see + * http://rastertragedy.com/RTRCh4.htm#Sec1 and + * https://learn.microsoft.com/typography/cleartype/truetypecleartype. + * This technique is not to be confused with ClearType compatible widths. + * ClearType backward compatibility has no direct impact on changing + * advance widths, but there might be an indirect impact on disabling + * some deltas. This could be worked around in backward compatibility + * mode. + * + * _Native ClearType Mode_ + * + * (Not to be confused with 'natural widths'.) This mode removes all the + * exceptions in the TrueType interpreter when running with ClearType. + * Any issues on widths would still apply, though. + * + */ + + + /************************************************************************** + * + * @section: + * ot_svg_driver + * + * @title: + * The SVG driver + * + * @abstract: + * Controlling the external rendering of OT-SVG glyphs. + * + * @description: + * By default, FreeType can only load the 'SVG~' table of OpenType fonts + * if configuration macro `FT_CONFIG_OPTION_SVG` is defined. To make it + * render SVG glyphs, an external SVG rendering library is needed. All + * details on the interface between FreeType and the external library + * via function hooks can be found in section @svg_fonts. + * + * The OT-SVG driver's module name is 'ot-svg'; it supports a single + * property called @svg-hooks, documented below in the @properties + * section. + * + */ + + + /************************************************************************** + * + * @section: + * properties + * + * @title: + * Driver properties + * + * @abstract: + * Controlling driver modules. + * + * @description: + * Driver modules can be controlled by setting and unsetting properties, + * using the functions @FT_Property_Set and @FT_Property_Get. This + * section documents the available properties, together with auxiliary + * macros and structures. + * + */ + + + /************************************************************************** + * + * @enum: + * FT_HINTING_XXX + * + * @description: + * A list of constants used for the @hinting-engine property to select + * the hinting engine for CFF, Type~1, and CID fonts. + * + * @values: + * FT_HINTING_FREETYPE :: + * Use the old FreeType hinting engine. + * + * FT_HINTING_ADOBE :: + * Use the hinting engine contributed by Adobe. + * + * @since: + * 2.9 + * + */ +#define FT_HINTING_FREETYPE 0 +#define FT_HINTING_ADOBE 1 + + /* these constants (introduced in 2.4.12) are deprecated */ +#define FT_CFF_HINTING_FREETYPE FT_HINTING_FREETYPE +#define FT_CFF_HINTING_ADOBE FT_HINTING_ADOBE + + + /************************************************************************** + * + * @property: + * hinting-engine + * + * @description: + * Thanks to Adobe, which contributed a new hinting (and parsing) engine, + * an application can select between 'freetype' and 'adobe' if compiled + * with `CFF_CONFIG_OPTION_OLD_ENGINE`. If this configuration macro + * isn't defined, 'hinting-engine' does nothing. + * + * The same holds for the Type~1 and CID modules if compiled with + * `T1_CONFIG_OPTION_OLD_ENGINE`. + * + * For the 'cff' module, the default engine is 'adobe'. For both the + * 'type1' and 't1cid' modules, the default engine is 'adobe', too. + * + * @note: + * This property can be used with @FT_Property_Get also. + * + * This property can be set via the `FREETYPE_PROPERTIES` environment + * variable (using values 'adobe' or 'freetype'). + * + * @example: + * The following example code demonstrates how to select Adobe's hinting + * engine for the 'cff' module (omitting the error handling). + * + * ``` + * FT_Library library; + * FT_UInt hinting_engine = FT_HINTING_ADOBE; + * + * + * FT_Init_FreeType( &library ); + * + * FT_Property_Set( library, "cff", + * "hinting-engine", &hinting_engine ); + * ``` + * + * @since: + * 2.4.12 (for 'cff' module) + * + * 2.9 (for 'type1' and 't1cid' modules) + * + */ + + + /************************************************************************** + * + * @property: + * no-stem-darkening + * + * @description: + * All glyphs that pass through the auto-hinter will be emboldened unless + * this property is set to TRUE. The same is true for the CFF, Type~1, + * and CID font modules if the 'Adobe' engine is selected (which is the + * default). + * + * Stem darkening emboldens glyphs at smaller sizes to make them more + * readable on common low-DPI screens when using linear alpha blending + * and gamma correction, see @FT_Render_Glyph. When not using linear + * alpha blending and gamma correction, glyphs will appear heavy and + * fuzzy! + * + * Gamma correction essentially lightens fonts since shades of grey are + * shifted to higher pixel values (=~higher brightness) to match the + * original intention to the reality of our screens. The side-effect is + * that glyphs 'thin out'. Mac OS~X and Adobe's proprietary font + * rendering library implement a counter-measure: stem darkening at + * smaller sizes where shades of gray dominate. By emboldening a glyph + * slightly in relation to its pixel size, individual pixels get higher + * coverage of filled-in outlines and are therefore 'blacker'. This + * counteracts the 'thinning out' of glyphs, making text remain readable + * at smaller sizes. + * + * For the auto-hinter, stem-darkening is experimental currently and thus + * switched off by default (that is, `no-stem-darkening` is set to TRUE + * by default). Total consistency with the CFF driver is not achieved + * right now because the emboldening method differs and glyphs must be + * scaled down on the Y-axis to keep outline points inside their + * precomputed blue zones. The smaller the size (especially 9ppem and + * down), the higher the loss of emboldening versus the CFF driver. + * + * Note that stem darkening is never applied if @FT_LOAD_NO_SCALE is set. + * + * @note: + * This property can be used with @FT_Property_Get also. + * + * This property can be set via the `FREETYPE_PROPERTIES` environment + * variable (using values 1 and 0 for 'on' and 'off', respectively). It + * can also be set per face using @FT_Face_Properties with + * @FT_PARAM_TAG_STEM_DARKENING. + * + * @example: + * ``` + * FT_Library library; + * FT_Bool no_stem_darkening = TRUE; + * + * + * FT_Init_FreeType( &library ); + * + * FT_Property_Set( library, "cff", + * "no-stem-darkening", &no_stem_darkening ); + * ``` + * + * @since: + * 2.4.12 (for 'cff' module) + * + * 2.6.2 (for 'autofitter' module) + * + * 2.9 (for 'type1' and 't1cid' modules) + * + */ + + + /************************************************************************** + * + * @property: + * darkening-parameters + * + * @description: + * By default, the Adobe hinting engine, as used by the CFF, Type~1, and + * CID font drivers, darkens stems as follows (if the `no-stem-darkening` + * property isn't set): + * + * ``` + * stem width <= 0.5px: darkening amount = 0.4px + * stem width = 1px: darkening amount = 0.275px + * stem width = 1.667px: darkening amount = 0.275px + * stem width >= 2.333px: darkening amount = 0px + * ``` + * + * and piecewise linear in-between. At configuration time, these four + * control points can be set with the macro + * `CFF_CONFIG_OPTION_DARKENING_PARAMETERS`; the CFF, Type~1, and CID + * drivers share these values. At runtime, the control points can be + * changed using the `darkening-parameters` property (see the example + * below that demonstrates this for the Type~1 driver). + * + * The x~values give the stem width, and the y~values the darkening + * amount. The unit is 1000th of pixels. All coordinate values must be + * positive; the x~values must be monotonically increasing; the y~values + * must be monotonically decreasing and smaller than or equal to 500 + * (corresponding to half a pixel); the slope of each linear piece must + * be shallower than -1 (e.g., -.4). + * + * The auto-hinter provides this property, too, as an experimental + * feature. See @no-stem-darkening for more. + * + * @note: + * This property can be used with @FT_Property_Get also. + * + * This property can be set via the `FREETYPE_PROPERTIES` environment + * variable, using eight comma-separated integers without spaces. Here + * the above example, using `\` to break the line for readability. + * + * ``` + * FREETYPE_PROPERTIES=\ + * type1:darkening-parameters=500,300,1000,200,1500,100,2000,0 + * ``` + * + * @example: + * ``` + * FT_Library library; + * FT_Int darken_params[8] = { 500, 300, // x1, y1 + * 1000, 200, // x2, y2 + * 1500, 100, // x3, y3 + * 2000, 0 }; // x4, y4 + * + * + * FT_Init_FreeType( &library ); + * + * FT_Property_Set( library, "type1", + * "darkening-parameters", darken_params ); + * ``` + * + * @since: + * 2.5.1 (for 'cff' module) + * + * 2.6.2 (for 'autofitter' module) + * + * 2.9 (for 'type1' and 't1cid' modules) + * + */ + + + /************************************************************************** + * + * @property: + * random-seed + * + * @description: + * By default, the seed value for the CFF 'random' operator and the + * similar '0 28 callothersubr pop' command for the Type~1 and CID + * drivers is set to a random value. However, mainly for debugging + * purposes, it is often necessary to use a known value as a seed so that + * the pseudo-random number sequences generated by 'random' are + * repeatable. + * + * The `random-seed` property does that. Its argument is a signed 32bit + * integer; if the value is zero or negative, the seed given by the + * `intitialRandomSeed` private DICT operator in a CFF file gets used (or + * a default value if there is no such operator). If the value is + * positive, use it instead of `initialRandomSeed`, which is consequently + * ignored. + * + * @note: + * This property can be set via the `FREETYPE_PROPERTIES` environment + * variable. It can also be set per face using @FT_Face_Properties with + * @FT_PARAM_TAG_RANDOM_SEED. + * + * @since: + * 2.8 (for 'cff' module) + * + * 2.9 (for 'type1' and 't1cid' modules) + * + */ + + + /************************************************************************** + * + * @property: + * no-long-family-names + * + * @description: + * If `PCF_CONFIG_OPTION_LONG_FAMILY_NAMES` is active while compiling + * FreeType, the PCF driver constructs long family names. + * + * There are many PCF fonts just called 'Fixed' which look completely + * different, and which have nothing to do with each other. When + * selecting 'Fixed' in KDE or Gnome one gets results that appear rather + * random, the style changes often if one changes the size and one cannot + * select some fonts at all. The improve this situation, the PCF module + * prepends the foundry name (plus a space) to the family name. It also + * checks whether there are 'wide' characters; all put together, family + * names like 'Sony Fixed' or 'Misc Fixed Wide' are constructed. + * + * If `no-long-family-names` is set, this feature gets switched off. + * + * @note: + * This property can be used with @FT_Property_Get also. + * + * This property can be set via the `FREETYPE_PROPERTIES` environment + * variable (using values 1 and 0 for 'on' and 'off', respectively). + * + * @example: + * ``` + * FT_Library library; + * FT_Bool no_long_family_names = TRUE; + * + * + * FT_Init_FreeType( &library ); + * + * FT_Property_Set( library, "pcf", + * "no-long-family-names", + * &no_long_family_names ); + * ``` + * + * @since: + * 2.8 + */ + + + /************************************************************************** + * + * @enum: + * TT_INTERPRETER_VERSION_XXX + * + * @description: + * A list of constants used for the @interpreter-version property to + * select the hinting engine for Truetype fonts. + * + * The numeric value in the constant names represents the version number + * as returned by the 'GETINFO' bytecode instruction. + * + * @values: + * TT_INTERPRETER_VERSION_35 :: + * Version~35 corresponds to MS rasterizer v.1.7 as used e.g. in + * Windows~98; only grayscale and B/W rasterizing is supported. + * + * TT_INTERPRETER_VERSION_38 :: + * Version~38 is the same Version~40. The original 'Infinality' code is + * no longer available. + * + * TT_INTERPRETER_VERSION_40 :: + * Version~40 corresponds to MS rasterizer v.2.1; it is roughly + * equivalent to the hinting provided by DirectWrite ClearType (as can + * be found, for example, in Microsoft's Edge Browser on Windows~10). + * It is used in FreeType to select the 'minimal' subpixel hinting + * code, a stripped-down and higher performance version of the + * 'Infinality' code. + * + * @note: + * This property controls the behaviour of the bytecode interpreter and + * thus how outlines get hinted. It does **not** control how glyph get + * rasterized! In particular, it does not control subpixel color + * filtering. + * + * If FreeType has not been compiled with the configuration option + * `TT_CONFIG_OPTION_SUBPIXEL_HINTING`, selecting version~38 or~40 causes + * an `FT_Err_Unimplemented_Feature` error. + * + * Depending on the graphics framework, Microsoft uses different bytecode + * and rendering engines. As a consequence, the version numbers returned + * by a call to the 'GETINFO' bytecode instruction are more convoluted + * than desired. + * + * Here are two tables that try to shed some light on the possible values + * for the MS rasterizer engine, together with the additional features + * introduced by it. + * + * ``` + * GETINFO framework version feature + * ------------------------------------------------------------------- + * 3 GDI (Win 3.1), v1.0 16-bit, first version + * TrueImage + * 33 GDI (Win NT 3.1), v1.5 32-bit + * HP Laserjet + * 34 GDI (Win 95) v1.6 font smoothing, + * new SCANTYPE opcode + * 35 GDI (Win 98/2000) v1.7 (UN)SCALED_COMPONENT_OFFSET + * bits in composite glyphs + * 36 MGDI (Win CE 2) v1.6+ classic ClearType + * 37 GDI (XP and later), v1.8 ClearType + * GDI+ old (before Vista) + * 38 GDI+ old (Vista, Win 7), v1.9 subpixel ClearType, + * WPF Y-direction ClearType, + * additional error checking + * 39 DWrite (before Win 8) v2.0 subpixel ClearType flags + * in GETINFO opcode, + * bug fixes + * 40 GDI+ (after Win 7), v2.1 Y-direction ClearType flag + * DWrite (Win 8) in GETINFO opcode, + * Gray ClearType + * ``` + * + * The 'version' field gives a rough orientation only, since some + * applications provided certain features much earlier (as an example, + * Microsoft Reader used subpixel and Y-direction ClearType already in + * Windows 2000). Similarly, updates to a given framework might include + * improved hinting support. + * + * ``` + * version sampling rendering comment + * x y x y + * -------------------------------------------------------------- + * v1.0 normal normal B/W B/W bi-level + * v1.6 high high gray gray grayscale + * v1.8 high normal color-filter B/W (GDI) ClearType + * v1.9 high high color-filter gray Color ClearType + * v2.1 high normal gray B/W Gray ClearType + * v2.1 high high gray gray Gray ClearType + * ``` + * + * Color and Gray ClearType are the two available variants of + * 'Y-direction ClearType', meaning grayscale rasterization along the + * Y-direction; the name used in the TrueType specification for this + * feature is 'symmetric smoothing'. 'Classic ClearType' is the original + * algorithm used before introducing a modified version in Win~XP. + * Another name for v1.6's grayscale rendering is 'font smoothing', and + * 'Color ClearType' is sometimes also called 'DWrite ClearType'. To + * differentiate between today's Color ClearType and the earlier + * ClearType variant with B/W rendering along the vertical axis, the + * latter is sometimes called 'GDI ClearType'. + * + * 'Normal' and 'high' sampling describe the (virtual) resolution to + * access the rasterized outline after the hinting process. 'Normal' + * means 1 sample per grid line (i.e., B/W). In the current Microsoft + * implementation, 'high' means an extra virtual resolution of 16x16 (or + * 16x1) grid lines per pixel for bytecode instructions like 'MIRP'. + * After hinting, these 16 grid lines are mapped to 6x5 (or 6x1) grid + * lines for color filtering if Color ClearType is activated. + * + * Note that 'Gray ClearType' is essentially the same as v1.6's grayscale + * rendering. However, the GETINFO instruction handles it differently: + * v1.6 returns bit~12 (hinting for grayscale), while v2.1 returns + * bits~13 (hinting for ClearType), 18 (symmetrical smoothing), and~19 + * (Gray ClearType). Also, this mode respects bits 2 and~3 for the + * version~1 gasp table exclusively (like Color ClearType), while v1.6 + * only respects the values of version~0 (bits 0 and~1). + * + * Keep in mind that the features of the above interpreter versions might + * not map exactly to FreeType features or behavior because it is a + * fundamentally different library with different internals. + * + */ +#define TT_INTERPRETER_VERSION_35 35 +#define TT_INTERPRETER_VERSION_38 38 +#define TT_INTERPRETER_VERSION_40 40 + + + /************************************************************************** + * + * @property: + * interpreter-version + * + * @description: + * Currently, three versions are available, two representing the bytecode + * interpreter with subpixel hinting support (old 'Infinality' code and + * new stripped-down and higher performance 'minimal' code) and one + * without, respectively. The default is subpixel support if + * `TT_CONFIG_OPTION_SUBPIXEL_HINTING` is defined, and no subpixel + * support otherwise (since it isn't available then). + * + * If subpixel hinting is on, many TrueType bytecode instructions behave + * differently compared to B/W or grayscale rendering (except if 'native + * ClearType' is selected by the font). Microsoft's main idea is to + * render at a much increased horizontal resolution, then sampling down + * the created output to subpixel precision. However, many older fonts + * are not suited to this and must be specially taken care of by applying + * (hardcoded) tweaks in Microsoft's interpreter. + * + * Details on subpixel hinting and some of the necessary tweaks can be + * found in Greg Hitchcock's whitepaper at + * 'https://learn.microsoft.com/typography/cleartype/truetypecleartype'. + * Note that FreeType currently doesn't really 'subpixel hint' (6x1, 6x2, + * or 6x5 supersampling) like discussed in the paper. Depending on the + * chosen interpreter, it simply ignores instructions on vertical stems + * to arrive at very similar results. + * + * @note: + * This property can be used with @FT_Property_Get also. + * + * This property can be set via the `FREETYPE_PROPERTIES` environment + * variable (using values '35', '38', or '40'). + * + * @example: + * The following example code demonstrates how to deactivate subpixel + * hinting (omitting the error handling). + * + * ``` + * FT_Library library; + * FT_Face face; + * FT_UInt interpreter_version = TT_INTERPRETER_VERSION_35; + * + * + * FT_Init_FreeType( &library ); + * + * FT_Property_Set( library, "truetype", + * "interpreter-version", + * &interpreter_version ); + * ``` + * + * @since: + * 2.5 + */ + + + /************************************************************************** + * + * @property: + * spread + * + * @description: + * This property of the 'sdf' and 'bsdf' renderers defines how the signed + * distance field (SDF) is represented in the output bitmap. The output + * values are calculated as follows, '128 * ( SDF / spread + 1 )', with + * the result clamped to the 8-bit range [0..255]. Therefore, 'spread' + * is also the maximum euclidean distance from the edge after which the + * values are clamped. The spread is specified in pixels with the + * default value of 8. For accurate SDF texture mapping (interpolation), + * the spread should be large enough to accommodate the target grid unit. + * + * @example: + * The following example code demonstrates how to set the SDF spread + * (omitting the error handling). + * + * ``` + * FT_Library library; + * FT_Int spread = 2; + * + * + * FT_Init_FreeType( &library ); + * + * FT_Property_Set( library, "sdf", "spread", &spread ); + * ``` + * + * @note: + * FreeType has two rasterizers for generating SDF, namely: + * + * 1. `sdf` for generating SDF directly from glyph's outline, and + * + * 2. `bsdf` for generating SDF from rasterized bitmaps. + * + * Depending on the glyph type (i.e., outline or bitmap), one of the two + * rasterizers is chosen at runtime and used for generating SDFs. To + * force the use of `bsdf` you should render the glyph with any of the + * FreeType's other rendering modes (e.g., `FT_RENDER_MODE_NORMAL`) and + * then re-render with `FT_RENDER_MODE_SDF`. + * + * There are some issues with stability and possible failures of the SDF + * renderers (specifically `sdf`). + * + * 1. The `sdf` rasterizer is sensitive to really small features (e.g., + * sharp turns that are less than 1~pixel) and imperfections in the + * glyph's outline, causing artifacts in the final output. + * + * 2. The `sdf` rasterizer has limited support for handling intersecting + * contours and *cannot* handle self-intersecting contours whatsoever. + * Self-intersection happens when a single connected contour + * intersects itself at some point; having these in your font + * definitely poses a problem to the rasterizer and cause artifacts, + * too. + * + * 3. Generating SDF for really small glyphs may result in undesirable + * output; the pixel grid (which stores distance information) becomes + * too coarse. + * + * 4. Since the output buffer is normalized, precision at smaller spreads + * is greater than precision at larger spread values because the + * output range of [0..255] gets mapped to a smaller SDF range. A + * spread of~2 should be sufficient in most cases. + * + * Points (1) and (2) can be avoided by using the `bsdf` rasterizer, + * which is more stable than the `sdf` rasterizer in general. + * + * @since: + * 2.11 + */ + + + /************************************************************************** + * + * @property: + * svg-hooks + * + * @description: + * Set up the interface between FreeType and an extern SVG rendering + * library like 'librsvg'. All details on the function hooks can be + * found in section @svg_fonts. + * + * @example: + * The following example code expects that the four hook functions + * `svg_*` are defined elsewhere. Error handling is omitted, too. + * + * ``` + * FT_Library library; + * SVG_RendererHooks hooks = { + * (SVG_Lib_Init_Func)svg_init, + * (SVG_Lib_Free_Func)svg_free, + * (SVG_Lib_Render_Func)svg_render, + * (SVG_Lib_Preset_Slot_Func)svg_preset_slot }; + * + * + * FT_Init_FreeType( &library ); + * + * FT_Property_Set( library, "ot-svg", + * "svg-hooks", &hooks ); + * ``` + * + * @since: + * 2.12 + */ + + + /************************************************************************** + * + * @property: + * glyph-to-script-map + * + * @description: + * **Experimental only** + * + * The auto-hinter provides various script modules to hint glyphs. + * Examples of supported scripts are Latin or CJK. Before a glyph is + * auto-hinted, the Unicode character map of the font gets examined, and + * the script is then determined based on Unicode character ranges, see + * below. + * + * OpenType fonts, however, often provide much more glyphs than character + * codes (small caps, superscripts, ligatures, swashes, etc.), to be + * controlled by so-called 'features'. Handling OpenType features can be + * quite complicated and thus needs a separate library on top of + * FreeType. + * + * The mapping between glyph indices and scripts (in the auto-hinter + * sense, see the @FT_AUTOHINTER_SCRIPT_XXX values) is stored as an array + * with `num_glyphs` elements, as found in the font's @FT_Face structure. + * The `glyph-to-script-map` property returns a pointer to this array, + * which can be modified as needed. Note that the modification should + * happen before the first glyph gets processed by the auto-hinter so + * that the global analysis of the font shapes actually uses the modified + * mapping. + * + * @example: + * The following example code demonstrates how to access it (omitting the + * error handling). + * + * ``` + * FT_Library library; + * FT_Face face; + * FT_Prop_GlyphToScriptMap prop; + * + * + * FT_Init_FreeType( &library ); + * FT_New_Face( library, "foo.ttf", 0, &face ); + * + * prop.face = face; + * + * FT_Property_Get( library, "autofitter", + * "glyph-to-script-map", &prop ); + * + * // adjust `prop.map' as needed right here + * + * FT_Load_Glyph( face, ..., FT_LOAD_FORCE_AUTOHINT ); + * ``` + * + * @since: + * 2.4.11 + * + */ + + + /************************************************************************** + * + * @enum: + * FT_AUTOHINTER_SCRIPT_XXX + * + * @description: + * **Experimental only** + * + * A list of constants used for the @glyph-to-script-map property to + * specify the script submodule the auto-hinter should use for hinting a + * particular glyph. + * + * @values: + * FT_AUTOHINTER_SCRIPT_NONE :: + * Don't auto-hint this glyph. + * + * FT_AUTOHINTER_SCRIPT_LATIN :: + * Apply the latin auto-hinter. For the auto-hinter, 'latin' is a very + * broad term, including Cyrillic and Greek also since characters from + * those scripts share the same design constraints. + * + * By default, characters from the following Unicode ranges are + * assigned to this submodule. + * + * ``` + * U+0020 - U+007F // Basic Latin (no control characters) + * U+00A0 - U+00FF // Latin-1 Supplement (no control characters) + * U+0100 - U+017F // Latin Extended-A + * U+0180 - U+024F // Latin Extended-B + * U+0250 - U+02AF // IPA Extensions + * U+02B0 - U+02FF // Spacing Modifier Letters + * U+0300 - U+036F // Combining Diacritical Marks + * U+0370 - U+03FF // Greek and Coptic + * U+0400 - U+04FF // Cyrillic + * U+0500 - U+052F // Cyrillic Supplement + * U+1D00 - U+1D7F // Phonetic Extensions + * U+1D80 - U+1DBF // Phonetic Extensions Supplement + * U+1DC0 - U+1DFF // Combining Diacritical Marks Supplement + * U+1E00 - U+1EFF // Latin Extended Additional + * U+1F00 - U+1FFF // Greek Extended + * U+2000 - U+206F // General Punctuation + * U+2070 - U+209F // Superscripts and Subscripts + * U+20A0 - U+20CF // Currency Symbols + * U+2150 - U+218F // Number Forms + * U+2460 - U+24FF // Enclosed Alphanumerics + * U+2C60 - U+2C7F // Latin Extended-C + * U+2DE0 - U+2DFF // Cyrillic Extended-A + * U+2E00 - U+2E7F // Supplemental Punctuation + * U+A640 - U+A69F // Cyrillic Extended-B + * U+A720 - U+A7FF // Latin Extended-D + * U+FB00 - U+FB06 // Alphab. Present. Forms (Latin Ligatures) + * U+1D400 - U+1D7FF // Mathematical Alphanumeric Symbols + * U+1F100 - U+1F1FF // Enclosed Alphanumeric Supplement + * ``` + * + * FT_AUTOHINTER_SCRIPT_CJK :: + * Apply the CJK auto-hinter, covering Chinese, Japanese, Korean, old + * Vietnamese, and some other scripts. + * + * By default, characters from the following Unicode ranges are + * assigned to this submodule. + * + * ``` + * U+1100 - U+11FF // Hangul Jamo + * U+2E80 - U+2EFF // CJK Radicals Supplement + * U+2F00 - U+2FDF // Kangxi Radicals + * U+2FF0 - U+2FFF // Ideographic Description Characters + * U+3000 - U+303F // CJK Symbols and Punctuation + * U+3040 - U+309F // Hiragana + * U+30A0 - U+30FF // Katakana + * U+3100 - U+312F // Bopomofo + * U+3130 - U+318F // Hangul Compatibility Jamo + * U+3190 - U+319F // Kanbun + * U+31A0 - U+31BF // Bopomofo Extended + * U+31C0 - U+31EF // CJK Strokes + * U+31F0 - U+31FF // Katakana Phonetic Extensions + * U+3200 - U+32FF // Enclosed CJK Letters and Months + * U+3300 - U+33FF // CJK Compatibility + * U+3400 - U+4DBF // CJK Unified Ideographs Extension A + * U+4DC0 - U+4DFF // Yijing Hexagram Symbols + * U+4E00 - U+9FFF // CJK Unified Ideographs + * U+A960 - U+A97F // Hangul Jamo Extended-A + * U+AC00 - U+D7AF // Hangul Syllables + * U+D7B0 - U+D7FF // Hangul Jamo Extended-B + * U+F900 - U+FAFF // CJK Compatibility Ideographs + * U+FE10 - U+FE1F // Vertical forms + * U+FE30 - U+FE4F // CJK Compatibility Forms + * U+FF00 - U+FFEF // Halfwidth and Fullwidth Forms + * U+1B000 - U+1B0FF // Kana Supplement + * U+1D300 - U+1D35F // Tai Xuan Hing Symbols + * U+1F200 - U+1F2FF // Enclosed Ideographic Supplement + * U+20000 - U+2A6DF // CJK Unified Ideographs Extension B + * U+2A700 - U+2B73F // CJK Unified Ideographs Extension C + * U+2B740 - U+2B81F // CJK Unified Ideographs Extension D + * U+2F800 - U+2FA1F // CJK Compatibility Ideographs Supplement + * ``` + * + * FT_AUTOHINTER_SCRIPT_INDIC :: + * Apply the indic auto-hinter, covering all major scripts from the + * Indian sub-continent and some other related scripts like Thai, Lao, + * or Tibetan. + * + * By default, characters from the following Unicode ranges are + * assigned to this submodule. + * + * ``` + * U+0900 - U+0DFF // Indic Range + * U+0F00 - U+0FFF // Tibetan + * U+1900 - U+194F // Limbu + * U+1B80 - U+1BBF // Sundanese + * U+A800 - U+A82F // Syloti Nagri + * U+ABC0 - U+ABFF // Meetei Mayek + * U+11800 - U+118DF // Sharada + * ``` + * + * Note that currently Indic support is rudimentary only, missing blue + * zone support. + * + * @since: + * 2.4.11 + * + */ +#define FT_AUTOHINTER_SCRIPT_NONE 0 +#define FT_AUTOHINTER_SCRIPT_LATIN 1 +#define FT_AUTOHINTER_SCRIPT_CJK 2 +#define FT_AUTOHINTER_SCRIPT_INDIC 3 + + + /************************************************************************** + * + * @struct: + * FT_Prop_GlyphToScriptMap + * + * @description: + * **Experimental only** + * + * The data exchange structure for the @glyph-to-script-map property. + * + * @since: + * 2.4.11 + * + */ + typedef struct FT_Prop_GlyphToScriptMap_ + { + FT_Face face; + FT_UShort* map; + + } FT_Prop_GlyphToScriptMap; + + + /************************************************************************** + * + * @property: + * fallback-script + * + * @description: + * **Experimental only** + * + * If no auto-hinter script module can be assigned to a glyph, a fallback + * script gets assigned to it (see also the @glyph-to-script-map + * property). By default, this is @FT_AUTOHINTER_SCRIPT_CJK. Using the + * `fallback-script` property, this fallback value can be changed. + * + * @note: + * This property can be used with @FT_Property_Get also. + * + * It's important to use the right timing for changing this value: The + * creation of the glyph-to-script map that eventually uses the fallback + * script value gets triggered either by setting or reading a + * face-specific property like @glyph-to-script-map, or by auto-hinting + * any glyph from that face. In particular, if you have already created + * an @FT_Face structure but not loaded any glyph (using the + * auto-hinter), a change of the fallback script will affect this face. + * + * @example: + * ``` + * FT_Library library; + * FT_UInt fallback_script = FT_AUTOHINTER_SCRIPT_NONE; + * + * + * FT_Init_FreeType( &library ); + * + * FT_Property_Set( library, "autofitter", + * "fallback-script", &fallback_script ); + * ``` + * + * @since: + * 2.4.11 + * + */ + + + /************************************************************************** + * + * @property: + * default-script + * + * @description: + * **Experimental only** + * + * If FreeType gets compiled with `FT_CONFIG_OPTION_USE_HARFBUZZ` to make + * the HarfBuzz library access OpenType features for getting better glyph + * coverages, this property sets the (auto-fitter) script to be used for + * the default (OpenType) script data of a font's GSUB table. Features + * for the default script are intended for all scripts not explicitly + * handled in GSUB; an example is a 'dlig' feature, containing the + * combination of the characters 'T', 'E', and 'L' to form a 'TEL' + * ligature. + * + * By default, this is @FT_AUTOHINTER_SCRIPT_LATIN. Using the + * `default-script` property, this default value can be changed. + * + * @note: + * This property can be used with @FT_Property_Get also. + * + * It's important to use the right timing for changing this value: The + * creation of the glyph-to-script map that eventually uses the default + * script value gets triggered either by setting or reading a + * face-specific property like @glyph-to-script-map, or by auto-hinting + * any glyph from that face. In particular, if you have already created + * an @FT_Face structure but not loaded any glyph (using the + * auto-hinter), a change of the default script will affect this face. + * + * @example: + * ``` + * FT_Library library; + * FT_UInt default_script = FT_AUTOHINTER_SCRIPT_NONE; + * + * + * FT_Init_FreeType( &library ); + * + * FT_Property_Set( library, "autofitter", + * "default-script", &default_script ); + * ``` + * + * @since: + * 2.5.3 + * + */ + + + /************************************************************************** + * + * @property: + * increase-x-height + * + * @description: + * For ppem values in the range 6~<= ppem <= `increase-x-height`, round + * up the font's x~height much more often than normally. If the value is + * set to~0, which is the default, this feature is switched off. Use + * this property to improve the legibility of small font sizes if + * necessary. + * + * @note: + * This property can be used with @FT_Property_Get also. + * + * Set this value right after calling @FT_Set_Char_Size, but before + * loading any glyph (using the auto-hinter). + * + * @example: + * ``` + * FT_Library library; + * FT_Face face; + * FT_Prop_IncreaseXHeight prop; + * + * + * FT_Init_FreeType( &library ); + * FT_New_Face( library, "foo.ttf", 0, &face ); + * FT_Set_Char_Size( face, 10 * 64, 0, 72, 0 ); + * + * prop.face = face; + * prop.limit = 14; + * + * FT_Property_Set( library, "autofitter", + * "increase-x-height", &prop ); + * ``` + * + * @since: + * 2.4.11 + * + */ + + + /************************************************************************** + * + * @struct: + * FT_Prop_IncreaseXHeight + * + * @description: + * The data exchange structure for the @increase-x-height property. + * + */ + typedef struct FT_Prop_IncreaseXHeight_ + { + FT_Face face; + FT_UInt limit; + + } FT_Prop_IncreaseXHeight; + + + /************************************************************************** + * + * @property: + * warping + * + * @description: + * **Obsolete** + * + * This property was always experimental and probably never worked + * correctly. It was entirely removed from the FreeType~2 sources. This + * entry is only here for historical reference. + * + * Warping only worked in 'normal' auto-hinting mode replacing it. The + * idea of the code was to slightly scale and shift a glyph along the + * non-hinted dimension (which is usually the horizontal axis) so that as + * much of its segments were aligned (more or less) to the grid. To find + * out a glyph's optimal scaling and shifting value, various parameter + * combinations were tried and scored. + * + * @since: + * 2.6 + * + */ + + + /* */ + + +FT_END_HEADER + + +#endif /* FTDRIVER_H_ */ + + +/* END */ diff --git a/third_party/tlRender-install-Release/include/freetype2/freetype/fterrdef.h b/third_party/tlRender-install-Release/include/freetype2/freetype/fterrdef.h new file mode 100644 index 00000000..3e591bed --- /dev/null +++ b/third_party/tlRender-install-Release/include/freetype2/freetype/fterrdef.h @@ -0,0 +1,283 @@ +/**************************************************************************** + * + * fterrdef.h + * + * FreeType error codes (specification). + * + * Copyright (C) 2002-2025 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + + /************************************************************************** + * + * @section: + * error_code_values + * + * @title: + * Error Code Values + * + * @abstract: + * All possible error codes returned by FreeType functions. + * + * @description: + * The list below is taken verbatim from the file `fterrdef.h` (loaded + * automatically by including `FT_FREETYPE_H`). The first argument of the + * `FT_ERROR_DEF_` macro is the error label; by default, the prefix + * `FT_Err_` gets added so that you get error names like + * `FT_Err_Cannot_Open_Resource`. The second argument is the error code, + * and the last argument an error string, which is not used by FreeType. + * + * Within your application you should **only** use error names and + * **never** its numeric values! The latter might (and actually do) + * change in forthcoming FreeType versions. + * + * Macro `FT_NOERRORDEF_` defines `FT_Err_Ok`, which is always zero. See + * the 'Error Enumerations' subsection how to automatically generate a + * list of error strings. + * + */ + + + /************************************************************************** + * + * @enum: + * FT_Err_XXX + * + */ + + /* generic errors */ + + FT_NOERRORDEF_( Ok, 0x00, + "no error" ) + + FT_ERRORDEF_( Cannot_Open_Resource, 0x01, + "cannot open resource" ) + FT_ERRORDEF_( Unknown_File_Format, 0x02, + "unknown file format" ) + FT_ERRORDEF_( Invalid_File_Format, 0x03, + "broken file" ) + FT_ERRORDEF_( Invalid_Version, 0x04, + "invalid FreeType version" ) + FT_ERRORDEF_( Lower_Module_Version, 0x05, + "module version is too low" ) + FT_ERRORDEF_( Invalid_Argument, 0x06, + "invalid argument" ) + FT_ERRORDEF_( Unimplemented_Feature, 0x07, + "unimplemented feature" ) + FT_ERRORDEF_( Invalid_Table, 0x08, + "broken table" ) + FT_ERRORDEF_( Invalid_Offset, 0x09, + "broken offset within table" ) + FT_ERRORDEF_( Array_Too_Large, 0x0A, + "array allocation size too large" ) + FT_ERRORDEF_( Missing_Module, 0x0B, + "missing module" ) + FT_ERRORDEF_( Missing_Property, 0x0C, + "missing property" ) + + /* glyph/character errors */ + + FT_ERRORDEF_( Invalid_Glyph_Index, 0x10, + "invalid glyph index" ) + FT_ERRORDEF_( Invalid_Character_Code, 0x11, + "invalid character code" ) + FT_ERRORDEF_( Invalid_Glyph_Format, 0x12, + "unsupported glyph image format" ) + FT_ERRORDEF_( Cannot_Render_Glyph, 0x13, + "cannot render this glyph format" ) + FT_ERRORDEF_( Invalid_Outline, 0x14, + "invalid outline" ) + FT_ERRORDEF_( Invalid_Composite, 0x15, + "invalid composite glyph" ) + FT_ERRORDEF_( Too_Many_Hints, 0x16, + "too many hints" ) + FT_ERRORDEF_( Invalid_Pixel_Size, 0x17, + "invalid pixel size" ) + FT_ERRORDEF_( Invalid_SVG_Document, 0x18, + "invalid SVG document" ) + + /* handle errors */ + + FT_ERRORDEF_( Invalid_Handle, 0x20, + "invalid object handle" ) + FT_ERRORDEF_( Invalid_Library_Handle, 0x21, + "invalid library handle" ) + FT_ERRORDEF_( Invalid_Driver_Handle, 0x22, + "invalid module handle" ) + FT_ERRORDEF_( Invalid_Face_Handle, 0x23, + "invalid face handle" ) + FT_ERRORDEF_( Invalid_Size_Handle, 0x24, + "invalid size handle" ) + FT_ERRORDEF_( Invalid_Slot_Handle, 0x25, + "invalid glyph slot handle" ) + FT_ERRORDEF_( Invalid_CharMap_Handle, 0x26, + "invalid charmap handle" ) + FT_ERRORDEF_( Invalid_Cache_Handle, 0x27, + "invalid cache manager handle" ) + FT_ERRORDEF_( Invalid_Stream_Handle, 0x28, + "invalid stream handle" ) + + /* driver errors */ + + FT_ERRORDEF_( Too_Many_Drivers, 0x30, + "too many modules" ) + FT_ERRORDEF_( Too_Many_Extensions, 0x31, + "too many extensions" ) + + /* memory errors */ + + FT_ERRORDEF_( Out_Of_Memory, 0x40, + "out of memory" ) + FT_ERRORDEF_( Unlisted_Object, 0x41, + "unlisted object" ) + + /* stream errors */ + + FT_ERRORDEF_( Cannot_Open_Stream, 0x51, + "cannot open stream" ) + FT_ERRORDEF_( Invalid_Stream_Seek, 0x52, + "invalid stream seek" ) + FT_ERRORDEF_( Invalid_Stream_Skip, 0x53, + "invalid stream skip" ) + FT_ERRORDEF_( Invalid_Stream_Read, 0x54, + "invalid stream read" ) + FT_ERRORDEF_( Invalid_Stream_Operation, 0x55, + "invalid stream operation" ) + FT_ERRORDEF_( Invalid_Frame_Operation, 0x56, + "invalid frame operation" ) + FT_ERRORDEF_( Nested_Frame_Access, 0x57, + "nested frame access" ) + FT_ERRORDEF_( Invalid_Frame_Read, 0x58, + "invalid frame read" ) + + /* raster errors */ + + FT_ERRORDEF_( Raster_Uninitialized, 0x60, + "raster uninitialized" ) + FT_ERRORDEF_( Raster_Corrupted, 0x61, + "raster corrupted" ) + FT_ERRORDEF_( Raster_Overflow, 0x62, + "raster overflow" ) + FT_ERRORDEF_( Raster_Negative_Height, 0x63, + "negative height while rastering" ) + + /* cache errors */ + + FT_ERRORDEF_( Too_Many_Caches, 0x70, + "too many registered caches" ) + + /* TrueType and SFNT errors */ + + FT_ERRORDEF_( Invalid_Opcode, 0x80, + "invalid opcode" ) + FT_ERRORDEF_( Too_Few_Arguments, 0x81, + "too few arguments" ) + FT_ERRORDEF_( Stack_Overflow, 0x82, + "stack overflow" ) + FT_ERRORDEF_( Code_Overflow, 0x83, + "code overflow" ) + FT_ERRORDEF_( Bad_Argument, 0x84, + "bad argument" ) + FT_ERRORDEF_( Divide_By_Zero, 0x85, + "division by zero" ) + FT_ERRORDEF_( Invalid_Reference, 0x86, + "invalid reference" ) + FT_ERRORDEF_( Debug_OpCode, 0x87, + "found debug opcode" ) + FT_ERRORDEF_( ENDF_In_Exec_Stream, 0x88, + "found ENDF opcode in execution stream" ) + FT_ERRORDEF_( Nested_DEFS, 0x89, + "nested DEFS" ) + FT_ERRORDEF_( Invalid_CodeRange, 0x8A, + "invalid code range" ) + FT_ERRORDEF_( Execution_Too_Long, 0x8B, + "execution context too long" ) + FT_ERRORDEF_( Too_Many_Function_Defs, 0x8C, + "too many function definitions" ) + FT_ERRORDEF_( Too_Many_Instruction_Defs, 0x8D, + "too many instruction definitions" ) + FT_ERRORDEF_( Table_Missing, 0x8E, + "SFNT font table missing" ) + FT_ERRORDEF_( Horiz_Header_Missing, 0x8F, + "horizontal header (hhea) table missing" ) + FT_ERRORDEF_( Locations_Missing, 0x90, + "locations (loca) table missing" ) + FT_ERRORDEF_( Name_Table_Missing, 0x91, + "name table missing" ) + FT_ERRORDEF_( CMap_Table_Missing, 0x92, + "character map (cmap) table missing" ) + FT_ERRORDEF_( Hmtx_Table_Missing, 0x93, + "horizontal metrics (hmtx) table missing" ) + FT_ERRORDEF_( Post_Table_Missing, 0x94, + "PostScript (post) table missing" ) + FT_ERRORDEF_( Invalid_Horiz_Metrics, 0x95, + "invalid horizontal metrics" ) + FT_ERRORDEF_( Invalid_CharMap_Format, 0x96, + "invalid character map (cmap) format" ) + FT_ERRORDEF_( Invalid_PPem, 0x97, + "invalid ppem value" ) + FT_ERRORDEF_( Invalid_Vert_Metrics, 0x98, + "invalid vertical metrics" ) + FT_ERRORDEF_( Could_Not_Find_Context, 0x99, + "could not find context" ) + FT_ERRORDEF_( Invalid_Post_Table_Format, 0x9A, + "invalid PostScript (post) table format" ) + FT_ERRORDEF_( Invalid_Post_Table, 0x9B, + "invalid PostScript (post) table" ) + FT_ERRORDEF_( DEF_In_Glyf_Bytecode, 0x9C, + "found FDEF or IDEF opcode in glyf bytecode" ) + FT_ERRORDEF_( Missing_Bitmap, 0x9D, + "missing bitmap in strike" ) + FT_ERRORDEF_( Missing_SVG_Hooks, 0x9E, + "SVG hooks have not been set" ) + + /* CFF, CID, and Type 1 errors */ + + FT_ERRORDEF_( Syntax_Error, 0xA0, + "opcode syntax error" ) + FT_ERRORDEF_( Stack_Underflow, 0xA1, + "argument stack underflow" ) + FT_ERRORDEF_( Ignore, 0xA2, + "ignore" ) + FT_ERRORDEF_( No_Unicode_Glyph_Name, 0xA3, + "no Unicode glyph name found" ) + FT_ERRORDEF_( Glyph_Too_Big, 0xA4, + "glyph too big for hinting" ) + + /* BDF errors */ + + FT_ERRORDEF_( Missing_Startfont_Field, 0xB0, + "`STARTFONT' field missing" ) + FT_ERRORDEF_( Missing_Font_Field, 0xB1, + "`FONT' field missing" ) + FT_ERRORDEF_( Missing_Size_Field, 0xB2, + "`SIZE' field missing" ) + FT_ERRORDEF_( Missing_Fontboundingbox_Field, 0xB3, + "`FONTBOUNDINGBOX' field missing" ) + FT_ERRORDEF_( Missing_Chars_Field, 0xB4, + "`CHARS' field missing" ) + FT_ERRORDEF_( Missing_Startchar_Field, 0xB5, + "`STARTCHAR' field missing" ) + FT_ERRORDEF_( Missing_Encoding_Field, 0xB6, + "`ENCODING' field missing" ) + FT_ERRORDEF_( Missing_Bbx_Field, 0xB7, + "`BBX' field missing" ) + FT_ERRORDEF_( Bbx_Too_Big, 0xB8, + "`BBX' too big" ) + FT_ERRORDEF_( Corrupted_Font_Header, 0xB9, + "Font header corrupted or missing fields" ) + FT_ERRORDEF_( Corrupted_Font_Glyphs, 0xBA, + "Font glyphs corrupted or missing fields" ) + + /* */ + + +/* END */ diff --git a/third_party/tlRender-install-Release/include/freetype2/freetype/fterrors.h b/third_party/tlRender-install-Release/include/freetype2/freetype/fterrors.h new file mode 100644 index 00000000..eca494f9 --- /dev/null +++ b/third_party/tlRender-install-Release/include/freetype2/freetype/fterrors.h @@ -0,0 +1,296 @@ +/**************************************************************************** + * + * fterrors.h + * + * FreeType error code handling (specification). + * + * Copyright (C) 1996-2025 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + + /************************************************************************** + * + * @section: + * error_enumerations + * + * @title: + * Error Enumerations + * + * @abstract: + * How to handle errors and error strings. + * + * @description: + * The header file `fterrors.h` (which is automatically included by + * `freetype.h`) defines the handling of FreeType's enumeration + * constants. It can also be used to generate error message strings + * with a small macro trick explained below. + * + * **Error Formats** + * + * The configuration macro `FT_CONFIG_OPTION_USE_MODULE_ERRORS` can be + * defined in `ftoption.h` in order to make the higher byte indicate the + * module where the error has happened (this is not compatible with + * standard builds of FreeType~2, however). See the file `ftmoderr.h` + * for more details. + * + * **Error Message Strings** + * + * Error definitions are set up with special macros that allow client + * applications to build a table of error message strings. The strings + * are not included in a normal build of FreeType~2 to save space (most + * client applications do not use them). + * + * To do so, you have to define the following macros before including + * this file. + * + * ``` + * FT_ERROR_START_LIST + * ``` + * + * This macro is called before anything else to define the start of the + * error list. It is followed by several `FT_ERROR_DEF` calls. + * + * ``` + * FT_ERROR_DEF( e, v, s ) + * ``` + * + * This macro is called to define one single error. 'e' is the error + * code identifier (e.g., `Invalid_Argument`), 'v' is the error's + * numerical value, and 's' is the corresponding error string. + * + * ``` + * FT_ERROR_END_LIST + * ``` + * + * This macro ends the list. + * + * Additionally, you have to undefine `FTERRORS_H_` before #including + * this file. + * + * Here is a simple example. + * + * ``` + * #undef FTERRORS_H_ + * #define FT_ERRORDEF( e, v, s ) { e, s }, + * #define FT_ERROR_START_LIST { + * #define FT_ERROR_END_LIST { 0, NULL } }; + * + * const struct + * { + * int err_code; + * const char* err_msg; + * } ft_errors[] = + * + * #include + * ``` + * + * An alternative to using an array is a switch statement. + * + * ``` + * #undef FTERRORS_H_ + * #define FT_ERROR_START_LIST switch ( error_code ) { + * #define FT_ERRORDEF( e, v, s ) case v: return s; + * #define FT_ERROR_END_LIST } + * ``` + * + * If you use `FT_CONFIG_OPTION_USE_MODULE_ERRORS`, `error_code` should + * be replaced with `FT_ERROR_BASE(error_code)` in the last example. + */ + + /* */ + + /* In previous FreeType versions we used `__FTERRORS_H__`. However, */ + /* using two successive underscores in a non-system symbol name */ + /* violates the C (and C++) standard, so it was changed to the */ + /* current form. In spite of this, we have to make */ + /* */ + /* ``` */ + /* #undefine __FTERRORS_H__ */ + /* ``` */ + /* */ + /* work for backward compatibility. */ + /* */ +#if !( defined( FTERRORS_H_ ) && defined ( __FTERRORS_H__ ) ) +#define FTERRORS_H_ +#define __FTERRORS_H__ + + + /* include module base error codes */ +#include + + + /*******************************************************************/ + /*******************************************************************/ + /***** *****/ + /***** SETUP MACROS *****/ + /***** *****/ + /*******************************************************************/ + /*******************************************************************/ + + +#undef FT_NEED_EXTERN_C + + + /* FT_ERR_PREFIX is used as a prefix for error identifiers. */ + /* By default, we use `FT_Err_`. */ + /* */ +#ifndef FT_ERR_PREFIX +#define FT_ERR_PREFIX FT_Err_ +#endif + + + /* FT_ERR_BASE is used as the base for module-specific errors. */ + /* */ +#ifdef FT_CONFIG_OPTION_USE_MODULE_ERRORS + +#ifndef FT_ERR_BASE +#define FT_ERR_BASE FT_Mod_Err_Base +#endif + +#else + +#undef FT_ERR_BASE +#define FT_ERR_BASE 0 + +#endif /* FT_CONFIG_OPTION_USE_MODULE_ERRORS */ + + + /* If FT_ERRORDEF is not defined, we need to define a simple */ + /* enumeration type. */ + /* */ +#ifndef FT_ERRORDEF + +#define FT_INCLUDE_ERR_PROTOS + +#define FT_ERRORDEF( e, v, s ) e = v, +#define FT_ERROR_START_LIST enum { +#define FT_ERROR_END_LIST FT_ERR_CAT( FT_ERR_PREFIX, Max ) }; + +#ifdef __cplusplus +#define FT_NEED_EXTERN_C + extern "C" { +#endif + +#endif /* !FT_ERRORDEF */ + + + /* this macro is used to define an error */ +#define FT_ERRORDEF_( e, v, s ) \ + FT_ERRORDEF( FT_ERR_CAT( FT_ERR_PREFIX, e ), v + FT_ERR_BASE, s ) + + /* this is only used for _Err_Ok, which must be 0! */ +#define FT_NOERRORDEF_( e, v, s ) \ + FT_ERRORDEF( FT_ERR_CAT( FT_ERR_PREFIX, e ), v, s ) + + +#ifdef FT_ERROR_START_LIST + FT_ERROR_START_LIST +#endif + + + /* now include the error codes */ +#include + + +#ifdef FT_ERROR_END_LIST + FT_ERROR_END_LIST +#endif + + + /*******************************************************************/ + /*******************************************************************/ + /***** *****/ + /***** SIMPLE CLEANUP *****/ + /***** *****/ + /*******************************************************************/ + /*******************************************************************/ + +#ifdef FT_NEED_EXTERN_C + } +#endif + +#undef FT_ERROR_START_LIST +#undef FT_ERROR_END_LIST + +#undef FT_ERRORDEF +#undef FT_ERRORDEF_ +#undef FT_NOERRORDEF_ + +#undef FT_NEED_EXTERN_C +#undef FT_ERR_BASE + + /* FT_ERR_PREFIX is needed internally */ +#ifndef FT2_BUILD_LIBRARY +#undef FT_ERR_PREFIX +#endif + + /* FT_INCLUDE_ERR_PROTOS: Control whether function prototypes should be */ + /* included with */ + /* */ + /* #include */ + /* */ + /* This is only true where `FT_ERRORDEF` is */ + /* undefined. */ + /* */ + /* FT_ERR_PROTOS_DEFINED: Actual multiple-inclusion protection of */ + /* `fterrors.h`. */ +#ifdef FT_INCLUDE_ERR_PROTOS +#undef FT_INCLUDE_ERR_PROTOS + +#ifndef FT_ERR_PROTOS_DEFINED +#define FT_ERR_PROTOS_DEFINED + + +FT_BEGIN_HEADER + + /************************************************************************** + * + * @function: + * FT_Error_String + * + * @description: + * Retrieve the description of a valid FreeType error code. + * + * @input: + * error_code :: + * A valid FreeType error code. + * + * @return: + * A C~string or `NULL`, if any error occurred. + * + * @note: + * FreeType has to be compiled with `FT_CONFIG_OPTION_ERROR_STRINGS` or + * `FT_DEBUG_LEVEL_ERROR` to get meaningful descriptions. + * 'error_string' will be `NULL` otherwise. + * + * Module identification will be ignored: + * + * ```c + * strcmp( FT_Error_String( FT_Err_Unknown_File_Format ), + * FT_Error_String( BDF_Err_Unknown_File_Format ) ) == 0; + * ``` + */ + FT_EXPORT( const char* ) + FT_Error_String( FT_Error error_code ); + + /* */ + +FT_END_HEADER + + +#endif /* FT_ERR_PROTOS_DEFINED */ + +#endif /* FT_INCLUDE_ERR_PROTOS */ + +#endif /* !(FTERRORS_H_ && __FTERRORS_H__) */ + + +/* END */ diff --git a/third_party/tlRender-install-Release/include/freetype2/freetype/ftfntfmt.h b/third_party/tlRender-install-Release/include/freetype2/freetype/ftfntfmt.h new file mode 100644 index 00000000..5df82447 --- /dev/null +++ b/third_party/tlRender-install-Release/include/freetype2/freetype/ftfntfmt.h @@ -0,0 +1,93 @@ +/**************************************************************************** + * + * ftfntfmt.h + * + * Support functions for font formats. + * + * Copyright (C) 2002-2025 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + +#ifndef FTFNTFMT_H_ +#define FTFNTFMT_H_ + +#include + +#ifdef FREETYPE_H +#error "freetype.h of FreeType 1 has been loaded!" +#error "Please fix the directory search order for header files" +#error "so that freetype.h of FreeType 2 is found first." +#endif + + +FT_BEGIN_HEADER + + + /************************************************************************** + * + * @section: + * font_formats + * + * @title: + * Font Formats + * + * @abstract: + * Getting the font format. + * + * @description: + * The single function in this section can be used to get the font format. + * Note that this information is not needed normally; however, there are + * special cases (like in PDF devices) where it is important to + * differentiate, in spite of FreeType's uniform API. + * + */ + + + /************************************************************************** + * + * @function: + * FT_Get_Font_Format + * + * @description: + * Return a string describing the format of a given face. Possible values + * are 'TrueType', 'Type~1', 'BDF', 'PCF', 'Type~42', 'CID~Type~1', 'CFF', + * 'PFR', and 'Windows~FNT'. + * + * The return value is suitable to be used as an X11 FONT_PROPERTY. + * + * @input: + * face :: + * Input face handle. + * + * @return: + * Font format string. `NULL` in case of error. + * + * @note: + * A deprecated name for the same function is `FT_Get_X11_Font_Format`. + */ + FT_EXPORT( const char* ) + FT_Get_Font_Format( FT_Face face ); + + + /* deprecated */ + FT_EXPORT( const char* ) + FT_Get_X11_Font_Format( FT_Face face ); + + + /* */ + + +FT_END_HEADER + +#endif /* FTFNTFMT_H_ */ + + +/* END */ diff --git a/third_party/tlRender-install-Release/include/freetype2/freetype/ftgasp.h b/third_party/tlRender-install-Release/include/freetype2/freetype/ftgasp.h new file mode 100644 index 00000000..77e5a7e7 --- /dev/null +++ b/third_party/tlRender-install-Release/include/freetype2/freetype/ftgasp.h @@ -0,0 +1,143 @@ +/**************************************************************************** + * + * ftgasp.h + * + * Access of TrueType's 'gasp' table (specification). + * + * Copyright (C) 2007-2025 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + +#ifndef FTGASP_H_ +#define FTGASP_H_ + +#include + +#ifdef FREETYPE_H +#error "freetype.h of FreeType 1 has been loaded!" +#error "Please fix the directory search order for header files" +#error "so that freetype.h of FreeType 2 is found first." +#endif + + +FT_BEGIN_HEADER + + + /************************************************************************** + * + * @section: + * gasp_table + * + * @title: + * Gasp Table + * + * @abstract: + * Retrieving TrueType 'gasp' table entries. + * + * @description: + * The function @FT_Get_Gasp can be used to query a TrueType or OpenType + * font for specific entries in its 'gasp' table, if any. This is mainly + * useful when implementing native TrueType hinting with the bytecode + * interpreter to duplicate the Windows text rendering results. + */ + + /************************************************************************** + * + * @enum: + * FT_GASP_XXX + * + * @description: + * A list of values and/or bit-flags returned by the @FT_Get_Gasp + * function. + * + * @values: + * FT_GASP_NO_TABLE :: + * This special value means that there is no GASP table in this face. + * It is up to the client to decide what to do. + * + * FT_GASP_DO_GRIDFIT :: + * Grid-fitting and hinting should be performed at the specified ppem. + * This **really** means TrueType bytecode interpretation. If this bit + * is not set, no hinting gets applied. + * + * FT_GASP_DO_GRAY :: + * Anti-aliased rendering should be performed at the specified ppem. + * If not set, do monochrome rendering. + * + * FT_GASP_SYMMETRIC_SMOOTHING :: + * If set, smoothing along multiple axes must be used with ClearType. + * + * FT_GASP_SYMMETRIC_GRIDFIT :: + * Grid-fitting must be used with ClearType's symmetric smoothing. + * + * @note: + * The bit-flags `FT_GASP_DO_GRIDFIT` and `FT_GASP_DO_GRAY` are to be + * used for standard font rasterization only. Independently of that, + * `FT_GASP_SYMMETRIC_SMOOTHING` and `FT_GASP_SYMMETRIC_GRIDFIT` are to + * be used if ClearType is enabled (and `FT_GASP_DO_GRIDFIT` and + * `FT_GASP_DO_GRAY` are consequently ignored). + * + * 'ClearType' is Microsoft's implementation of LCD rendering, partly + * protected by patents. + * + * @since: + * 2.3.0 + */ +#define FT_GASP_NO_TABLE -1 +#define FT_GASP_DO_GRIDFIT 0x01 +#define FT_GASP_DO_GRAY 0x02 +#define FT_GASP_SYMMETRIC_GRIDFIT 0x04 +#define FT_GASP_SYMMETRIC_SMOOTHING 0x08 + + + /************************************************************************** + * + * @function: + * FT_Get_Gasp + * + * @description: + * For a TrueType or OpenType font file, return the rasterizer behaviour + * flags from the font's 'gasp' table corresponding to a given character + * pixel size. + * + * @input: + * face :: + * The source face handle. + * + * ppem :: + * The vertical character pixel size. + * + * @return: + * Bit flags (see @FT_GASP_XXX), or @FT_GASP_NO_TABLE if there is no + * 'gasp' table in the face. + * + * @note: + * If you want to use the MM functionality of OpenType variation fonts + * (i.e., using @FT_Set_Var_Design_Coordinates and friends), call this + * function **after** setting an instance since the return values can + * change. + * + * @since: + * 2.3.0 + */ + FT_EXPORT( FT_Int ) + FT_Get_Gasp( FT_Face face, + FT_UInt ppem ); + + /* */ + + +FT_END_HEADER + +#endif /* FTGASP_H_ */ + + +/* END */ diff --git a/third_party/tlRender-install-Release/include/freetype2/freetype/ftglyph.h b/third_party/tlRender-install-Release/include/freetype2/freetype/ftglyph.h new file mode 100644 index 00000000..3691781c --- /dev/null +++ b/third_party/tlRender-install-Release/include/freetype2/freetype/ftglyph.h @@ -0,0 +1,750 @@ +/**************************************************************************** + * + * ftglyph.h + * + * FreeType convenience functions to handle glyphs (specification). + * + * Copyright (C) 1996-2025 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + + /************************************************************************** + * + * This file contains the definition of several convenience functions that + * can be used by client applications to easily retrieve glyph bitmaps and + * outlines from a given face. + * + * These functions should be optional if you are writing a font server or + * text layout engine on top of FreeType. However, they are pretty handy + * for many other simple uses of the library. + * + */ + + +#ifndef FTGLYPH_H_ +#define FTGLYPH_H_ + + +#include + +#ifdef FREETYPE_H +#error "freetype.h of FreeType 1 has been loaded!" +#error "Please fix the directory search order for header files" +#error "so that freetype.h of FreeType 2 is found first." +#endif + + +FT_BEGIN_HEADER + + + /************************************************************************** + * + * @section: + * glyph_management + * + * @title: + * Glyph Management + * + * @abstract: + * Generic interface to manage individual glyph data. + * + * @description: + * This section contains definitions used to manage glyph data through + * generic @FT_Glyph objects. Each of them can contain a bitmap, + * a vector outline, or even images in other formats. These objects are + * detached from @FT_Face, contrary to @FT_GlyphSlot. + * + */ + + + /* forward declaration to a private type */ + typedef struct FT_Glyph_Class_ FT_Glyph_Class; + + + /************************************************************************** + * + * @type: + * FT_Glyph + * + * @description: + * Handle to an object used to model generic glyph images. It is a + * pointer to the @FT_GlyphRec structure and can contain a glyph bitmap + * or pointer. + * + * @note: + * Glyph objects are not owned by the library. You must thus release + * them manually (through @FT_Done_Glyph) _before_ calling + * @FT_Done_FreeType. + */ + typedef struct FT_GlyphRec_* FT_Glyph; + + + /************************************************************************** + * + * @struct: + * FT_GlyphRec + * + * @description: + * The root glyph structure contains a given glyph image plus its advance + * width in 16.16 fixed-point format. + * + * @fields: + * library :: + * A handle to the FreeType library object. + * + * clazz :: + * A pointer to the glyph's class. Private. + * + * format :: + * The format of the glyph's image. + * + * advance :: + * A 16.16 vector that gives the glyph's advance width. + */ + typedef struct FT_GlyphRec_ + { + FT_Library library; + const FT_Glyph_Class* clazz; + FT_Glyph_Format format; + FT_Vector advance; + + } FT_GlyphRec; + + + /************************************************************************** + * + * @type: + * FT_BitmapGlyph + * + * @description: + * A handle to an object used to model a bitmap glyph image. This is a + * 'sub-class' of @FT_Glyph, and a pointer to @FT_BitmapGlyphRec. + */ + typedef struct FT_BitmapGlyphRec_* FT_BitmapGlyph; + + + /************************************************************************** + * + * @struct: + * FT_BitmapGlyphRec + * + * @description: + * A structure used for bitmap glyph images. This really is a + * 'sub-class' of @FT_GlyphRec. + * + * @fields: + * root :: + * The root fields of @FT_Glyph. + * + * left :: + * The left-side bearing, i.e., the horizontal distance from the + * current pen position to the left border of the glyph bitmap. + * + * top :: + * The top-side bearing, i.e., the vertical distance from the current + * pen position to the top border of the glyph bitmap. This distance + * is positive for upwards~y! + * + * bitmap :: + * A descriptor for the bitmap. + * + * @note: + * You can typecast an @FT_Glyph to @FT_BitmapGlyph if you have + * `glyph->format == FT_GLYPH_FORMAT_BITMAP`. This lets you access the + * bitmap's contents easily. + * + * The corresponding pixel buffer is always owned by @FT_BitmapGlyph and + * is thus created and destroyed with it. + */ + typedef struct FT_BitmapGlyphRec_ + { + FT_GlyphRec root; + FT_Int left; + FT_Int top; + FT_Bitmap bitmap; + + } FT_BitmapGlyphRec; + + + /************************************************************************** + * + * @type: + * FT_OutlineGlyph + * + * @description: + * A handle to an object used to model an outline glyph image. This is a + * 'sub-class' of @FT_Glyph, and a pointer to @FT_OutlineGlyphRec. + */ + typedef struct FT_OutlineGlyphRec_* FT_OutlineGlyph; + + + /************************************************************************** + * + * @struct: + * FT_OutlineGlyphRec + * + * @description: + * A structure used for outline (vectorial) glyph images. This really is + * a 'sub-class' of @FT_GlyphRec. + * + * @fields: + * root :: + * The root @FT_Glyph fields. + * + * outline :: + * A descriptor for the outline. + * + * @note: + * You can typecast an @FT_Glyph to @FT_OutlineGlyph if you have + * `glyph->format == FT_GLYPH_FORMAT_OUTLINE`. This lets you access the + * outline's content easily. + * + * As the outline is extracted from a glyph slot, its coordinates are + * expressed normally in 26.6 pixels, unless the flag @FT_LOAD_NO_SCALE + * was used in @FT_Load_Glyph or @FT_Load_Char. + * + * The outline's tables are always owned by the object and are destroyed + * with it. + */ + typedef struct FT_OutlineGlyphRec_ + { + FT_GlyphRec root; + FT_Outline outline; + + } FT_OutlineGlyphRec; + + + /************************************************************************** + * + * @type: + * FT_SvgGlyph + * + * @description: + * A handle to an object used to model an SVG glyph. This is a + * 'sub-class' of @FT_Glyph, and a pointer to @FT_SvgGlyphRec. + * + * @since: + * 2.12 + */ + typedef struct FT_SvgGlyphRec_* FT_SvgGlyph; + + + /************************************************************************** + * + * @struct: + * FT_SvgGlyphRec + * + * @description: + * A structure used for OT-SVG glyphs. This is a 'sub-class' of + * @FT_GlyphRec. + * + * @fields: + * root :: + * The root @FT_GlyphRec fields. + * + * svg_document :: + * A pointer to the SVG document. + * + * svg_document_length :: + * The length of `svg_document`. + * + * glyph_index :: + * The index of the glyph to be rendered. + * + * metrics :: + * A metrics object storing the size information. + * + * units_per_EM :: + * The size of the EM square. + * + * start_glyph_id :: + * The first glyph ID in the glyph range covered by this document. + * + * end_glyph_id :: + * The last glyph ID in the glyph range covered by this document. + * + * transform :: + * A 2x2 transformation matrix to apply to the glyph while rendering + * it. + * + * delta :: + * Translation to apply to the glyph while rendering. + * + * @note: + * The Glyph Management API requires @FT_Glyph or its 'sub-class' to have + * all the information needed to completely define the glyph's rendering. + * Outline-based glyphs can directly apply transformations to the outline + * but this is not possible for an SVG document that hasn't been parsed. + * Therefore, the transformation is stored along with the document. In + * the absence of a 'ViewBox' or 'Width'/'Height' attribute, the size of + * the ViewPort should be assumed to be 'units_per_EM'. + */ + typedef struct FT_SvgGlyphRec_ + { + FT_GlyphRec root; + + FT_Byte* svg_document; + FT_ULong svg_document_length; + + FT_UInt glyph_index; + + FT_Size_Metrics metrics; + FT_UShort units_per_EM; + + FT_UShort start_glyph_id; + FT_UShort end_glyph_id; + + FT_Matrix transform; + FT_Vector delta; + + } FT_SvgGlyphRec; + + + /************************************************************************** + * + * @function: + * FT_New_Glyph + * + * @description: + * A function used to create a new empty glyph image. Note that the + * created @FT_Glyph object must be released with @FT_Done_Glyph. + * + * @input: + * library :: + * A handle to the FreeType library object. + * + * format :: + * The format of the glyph's image. + * + * @output: + * aglyph :: + * A handle to the glyph object. + * + * @return: + * FreeType error code. 0~means success. + * + * @since: + * 2.10 + */ + FT_EXPORT( FT_Error ) + FT_New_Glyph( FT_Library library, + FT_Glyph_Format format, + FT_Glyph *aglyph ); + + + /************************************************************************** + * + * @function: + * FT_Get_Glyph + * + * @description: + * A function used to extract a glyph image from a slot. Note that the + * created @FT_Glyph object must be released with @FT_Done_Glyph. + * + * @input: + * slot :: + * A handle to the source glyph slot. + * + * @output: + * aglyph :: + * A handle to the glyph object. `NULL` in case of error. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * Because `*aglyph->advance.x` and `*aglyph->advance.y` are 16.16 + * fixed-point numbers, `slot->advance.x` and `slot->advance.y` (which + * are in 26.6 fixed-point format) must be in the range ]-32768;32768[. + */ + FT_EXPORT( FT_Error ) + FT_Get_Glyph( FT_GlyphSlot slot, + FT_Glyph *aglyph ); + + + /************************************************************************** + * + * @function: + * FT_Glyph_Copy + * + * @description: + * A function used to copy a glyph image. Note that the created + * @FT_Glyph object must be released with @FT_Done_Glyph. + * + * @input: + * source :: + * A handle to the source glyph object. + * + * @output: + * target :: + * A handle to the target glyph object. `NULL` in case of error. + * + * @return: + * FreeType error code. 0~means success. + */ + FT_EXPORT( FT_Error ) + FT_Glyph_Copy( FT_Glyph source, + FT_Glyph *target ); + + + /************************************************************************** + * + * @function: + * FT_Glyph_Transform + * + * @description: + * Transform a glyph image if its format is scalable. + * + * @inout: + * glyph :: + * A handle to the target glyph object. + * + * @input: + * matrix :: + * A pointer to a 2x2 matrix to apply. + * + * delta :: + * A pointer to a 2d vector to apply. Coordinates are expressed in + * 1/64 of a pixel. + * + * @return: + * FreeType error code (if not 0, the glyph format is not scalable). + * + * @note: + * The 2x2 transformation matrix is also applied to the glyph's advance + * vector. + */ + FT_EXPORT( FT_Error ) + FT_Glyph_Transform( FT_Glyph glyph, + const FT_Matrix* matrix, + const FT_Vector* delta ); + + + /************************************************************************** + * + * @enum: + * FT_Glyph_BBox_Mode + * + * @description: + * The mode how the values of @FT_Glyph_Get_CBox are returned. + * + * @values: + * FT_GLYPH_BBOX_UNSCALED :: + * Return unscaled font units. + * + * FT_GLYPH_BBOX_SUBPIXELS :: + * Return unfitted 26.6 coordinates. + * + * FT_GLYPH_BBOX_GRIDFIT :: + * Return grid-fitted 26.6 coordinates. + * + * FT_GLYPH_BBOX_TRUNCATE :: + * Return coordinates in integer pixels. + * + * FT_GLYPH_BBOX_PIXELS :: + * Return grid-fitted pixel coordinates. + */ + typedef enum FT_Glyph_BBox_Mode_ + { + FT_GLYPH_BBOX_UNSCALED = 0, + FT_GLYPH_BBOX_SUBPIXELS = 0, + FT_GLYPH_BBOX_GRIDFIT = 1, + FT_GLYPH_BBOX_TRUNCATE = 2, + FT_GLYPH_BBOX_PIXELS = 3 + + } FT_Glyph_BBox_Mode; + + + /* these constants are deprecated; use the corresponding */ + /* `FT_Glyph_BBox_Mode` values instead */ +#define ft_glyph_bbox_unscaled FT_GLYPH_BBOX_UNSCALED +#define ft_glyph_bbox_subpixels FT_GLYPH_BBOX_SUBPIXELS +#define ft_glyph_bbox_gridfit FT_GLYPH_BBOX_GRIDFIT +#define ft_glyph_bbox_truncate FT_GLYPH_BBOX_TRUNCATE +#define ft_glyph_bbox_pixels FT_GLYPH_BBOX_PIXELS + + + /************************************************************************** + * + * @function: + * FT_Glyph_Get_CBox + * + * @description: + * Return a glyph's 'control box'. The control box encloses all the + * outline's points, including Bezier control points. Though it + * coincides with the exact bounding box for most glyphs, it can be + * slightly larger in some situations (like when rotating an outline that + * contains Bezier outside arcs). + * + * Computing the control box is very fast, while getting the bounding box + * can take much more time as it needs to walk over all segments and arcs + * in the outline. To get the latter, you can use the 'ftbbox' + * component, which is dedicated to this single task. + * + * @input: + * glyph :: + * A handle to the source glyph object. + * + * mode :: + * The mode that indicates how to interpret the returned bounding box + * values. + * + * @output: + * acbox :: + * The glyph coordinate bounding box. Coordinates are expressed in + * 1/64 of pixels if it is grid-fitted. + * + * @note: + * Coordinates are relative to the glyph origin, using the y~upwards + * convention. + * + * If the glyph has been loaded with @FT_LOAD_NO_SCALE, `bbox_mode` must + * be set to @FT_GLYPH_BBOX_UNSCALED to get unscaled font units in 26.6 + * pixel format. The value @FT_GLYPH_BBOX_SUBPIXELS is another name for + * this constant. + * + * If the font is tricky and the glyph has been loaded with + * @FT_LOAD_NO_SCALE, the resulting CBox is meaningless. To get + * reasonable values for the CBox it is necessary to load the glyph at a + * large ppem value (so that the hinting instructions can properly shift + * and scale the subglyphs), then extracting the CBox, which can be + * eventually converted back to font units. + * + * Note that the maximum coordinates are exclusive, which means that one + * can compute the width and height of the glyph image (be it in integer + * or 26.6 pixels) as: + * + * ``` + * width = bbox.xMax - bbox.xMin; + * height = bbox.yMax - bbox.yMin; + * ``` + * + * Note also that for 26.6 coordinates, if `bbox_mode` is set to + * @FT_GLYPH_BBOX_GRIDFIT, the coordinates will also be grid-fitted, + * which corresponds to: + * + * ``` + * bbox.xMin = FLOOR(bbox.xMin); + * bbox.yMin = FLOOR(bbox.yMin); + * bbox.xMax = CEILING(bbox.xMax); + * bbox.yMax = CEILING(bbox.yMax); + * ``` + * + * To get the bbox in pixel coordinates, set `bbox_mode` to + * @FT_GLYPH_BBOX_TRUNCATE. + * + * To get the bbox in grid-fitted pixel coordinates, set `bbox_mode` to + * @FT_GLYPH_BBOX_PIXELS. + */ + FT_EXPORT( void ) + FT_Glyph_Get_CBox( FT_Glyph glyph, + FT_UInt bbox_mode, + FT_BBox *acbox ); + + + /************************************************************************** + * + * @function: + * FT_Glyph_To_Bitmap + * + * @description: + * Convert a given glyph object to a bitmap glyph object. + * + * @inout: + * the_glyph :: + * A pointer to a handle to the target glyph. + * + * @input: + * render_mode :: + * An enumeration that describes how the data is rendered. + * + * origin :: + * A pointer to a vector used to translate the glyph image before + * rendering. Can be~0 (if no translation). The origin is expressed + * in 26.6 pixels. + * + * destroy :: + * A boolean that indicates that the original glyph image should be + * destroyed by this function. It is never destroyed in case of error. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * This function does nothing if the glyph format isn't scalable. + * + * The glyph image is translated with the `origin` vector before + * rendering. + * + * The first parameter is a pointer to an @FT_Glyph handle that will be + * _replaced_ by this function (with newly allocated data). Typically, + * you would do something like the following (omitting error handling). + * + * ``` + * FT_Glyph glyph; + * FT_BitmapGlyph glyph_bitmap; + * + * + * // load glyph + * error = FT_Load_Char( face, glyph_index, FT_LOAD_DEFAULT ); + * + * // extract glyph image + * error = FT_Get_Glyph( face->glyph, &glyph ); + * + * // convert to a bitmap (default render mode + destroying old) + * if ( glyph->format != FT_GLYPH_FORMAT_BITMAP ) + * { + * error = FT_Glyph_To_Bitmap( &glyph, FT_RENDER_MODE_NORMAL, + * 0, 1 ); + * if ( error ) // `glyph' unchanged + * ... + * } + * + * // access bitmap content by typecasting + * glyph_bitmap = (FT_BitmapGlyph)glyph; + * + * // do funny stuff with it, like blitting/drawing + * ... + * + * // discard glyph image (bitmap or not) + * FT_Done_Glyph( glyph ); + * ``` + * + * Here is another example, again without error handling. + * + * ``` + * FT_Glyph glyphs[MAX_GLYPHS] + * + * + * ... + * + * for ( idx = 0; i < MAX_GLYPHS; i++ ) + * error = FT_Load_Glyph( face, idx, FT_LOAD_DEFAULT ) || + * FT_Get_Glyph ( face->glyph, &glyphs[idx] ); + * + * ... + * + * for ( idx = 0; i < MAX_GLYPHS; i++ ) + * { + * FT_Glyph bitmap = glyphs[idx]; + * + * + * ... + * + * // after this call, `bitmap' no longer points into + * // the `glyphs' array (and the old value isn't destroyed) + * FT_Glyph_To_Bitmap( &bitmap, FT_RENDER_MODE_MONO, 0, 0 ); + * + * ... + * + * FT_Done_Glyph( bitmap ); + * } + * + * ... + * + * for ( idx = 0; i < MAX_GLYPHS; i++ ) + * FT_Done_Glyph( glyphs[idx] ); + * ``` + */ + FT_EXPORT( FT_Error ) + FT_Glyph_To_Bitmap( FT_Glyph* the_glyph, + FT_Render_Mode render_mode, + const FT_Vector* origin, + FT_Bool destroy ); + + + /************************************************************************** + * + * @function: + * FT_Done_Glyph + * + * @description: + * Destroy a given glyph. + * + * @input: + * glyph :: + * A handle to the target glyph object. Can be `NULL`. + */ + FT_EXPORT( void ) + FT_Done_Glyph( FT_Glyph glyph ); + + /* */ + + + /* other helpful functions */ + + /************************************************************************** + * + * @section: + * computations + * + */ + + + /************************************************************************** + * + * @function: + * FT_Matrix_Multiply + * + * @description: + * Perform the matrix operation `b = a*b`. + * + * @input: + * a :: + * A pointer to matrix `a`. + * + * @inout: + * b :: + * A pointer to matrix `b`. + * + * @note: + * The result is undefined if either `a` or `b` is zero. + * + * Since the function uses wrap-around arithmetic, results become + * meaningless if the arguments are very large. + */ + FT_EXPORT( void ) + FT_Matrix_Multiply( const FT_Matrix* a, + FT_Matrix* b ); + + + /************************************************************************** + * + * @function: + * FT_Matrix_Invert + * + * @description: + * Invert a 2x2 matrix. Return an error if it can't be inverted. + * + * @inout: + * matrix :: + * A pointer to the target matrix. Remains untouched in case of error. + * + * @return: + * FreeType error code. 0~means success. + */ + FT_EXPORT( FT_Error ) + FT_Matrix_Invert( FT_Matrix* matrix ); + + /* */ + + +FT_END_HEADER + +#endif /* FTGLYPH_H_ */ + + +/* END */ + + +/* Local Variables: */ +/* coding: utf-8 */ +/* End: */ diff --git a/third_party/tlRender-install-Release/include/freetype2/freetype/ftgxval.h b/third_party/tlRender-install-Release/include/freetype2/freetype/ftgxval.h new file mode 100644 index 00000000..843e0bc9 --- /dev/null +++ b/third_party/tlRender-install-Release/include/freetype2/freetype/ftgxval.h @@ -0,0 +1,354 @@ +/**************************************************************************** + * + * ftgxval.h + * + * FreeType API for validating TrueTypeGX/AAT tables (specification). + * + * Copyright (C) 2004-2025 by + * Masatake YAMATO, Redhat K.K, + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + +/**************************************************************************** + * + * gxvalid is derived from both gxlayout module and otvalid module. + * Development of gxlayout is supported by the Information-technology + * Promotion Agency(IPA), Japan. + * + */ + + +#ifndef FTGXVAL_H_ +#define FTGXVAL_H_ + +#include + +#ifdef FREETYPE_H +#error "freetype.h of FreeType 1 has been loaded!" +#error "Please fix the directory search order for header files" +#error "so that freetype.h of FreeType 2 is found first." +#endif + + +FT_BEGIN_HEADER + + + /************************************************************************** + * + * @section: + * gx_validation + * + * @title: + * TrueTypeGX/AAT Validation + * + * @abstract: + * An API to validate TrueTypeGX/AAT tables. + * + * @description: + * This section contains the declaration of functions to validate some + * TrueTypeGX tables (feat, mort, morx, bsln, just, kern, opbd, trak, + * prop, lcar). + * + * @order: + * FT_TrueTypeGX_Validate + * FT_TrueTypeGX_Free + * + * FT_ClassicKern_Validate + * FT_ClassicKern_Free + * + * FT_VALIDATE_GX_LENGTH + * FT_VALIDATE_GXXXX + * FT_VALIDATE_CKERNXXX + * + */ + + /************************************************************************** + * + * + * Warning: Use `FT_VALIDATE_XXX` to validate a table. + * Following definitions are for gxvalid developers. + * + * + */ + +#define FT_VALIDATE_feat_INDEX 0 +#define FT_VALIDATE_mort_INDEX 1 +#define FT_VALIDATE_morx_INDEX 2 +#define FT_VALIDATE_bsln_INDEX 3 +#define FT_VALIDATE_just_INDEX 4 +#define FT_VALIDATE_kern_INDEX 5 +#define FT_VALIDATE_opbd_INDEX 6 +#define FT_VALIDATE_trak_INDEX 7 +#define FT_VALIDATE_prop_INDEX 8 +#define FT_VALIDATE_lcar_INDEX 9 +#define FT_VALIDATE_GX_LAST_INDEX FT_VALIDATE_lcar_INDEX + + + /************************************************************************** + * + * @macro: + * FT_VALIDATE_GX_LENGTH + * + * @description: + * The number of tables checked in this module. Use it as a parameter + * for the `table-length` argument of function @FT_TrueTypeGX_Validate. + */ +#define FT_VALIDATE_GX_LENGTH ( FT_VALIDATE_GX_LAST_INDEX + 1 ) + + /* */ + + /* Up to 0x1000 is used by otvalid. + Ox2xxx is reserved for feature OT extension. */ +#define FT_VALIDATE_GX_START 0x4000 +#define FT_VALIDATE_GX_BITFIELD( tag ) \ + ( FT_VALIDATE_GX_START << FT_VALIDATE_##tag##_INDEX ) + + + /************************************************************************** + * + * @enum: + * FT_VALIDATE_GXXXX + * + * @description: + * A list of bit-field constants used with @FT_TrueTypeGX_Validate to + * indicate which TrueTypeGX/AAT Type tables should be validated. + * + * @values: + * FT_VALIDATE_feat :: + * Validate 'feat' table. + * + * FT_VALIDATE_mort :: + * Validate 'mort' table. + * + * FT_VALIDATE_morx :: + * Validate 'morx' table. + * + * FT_VALIDATE_bsln :: + * Validate 'bsln' table. + * + * FT_VALIDATE_just :: + * Validate 'just' table. + * + * FT_VALIDATE_kern :: + * Validate 'kern' table. + * + * FT_VALIDATE_opbd :: + * Validate 'opbd' table. + * + * FT_VALIDATE_trak :: + * Validate 'trak' table. + * + * FT_VALIDATE_prop :: + * Validate 'prop' table. + * + * FT_VALIDATE_lcar :: + * Validate 'lcar' table. + * + * FT_VALIDATE_GX :: + * Validate all TrueTypeGX tables (feat, mort, morx, bsln, just, kern, + * opbd, trak, prop and lcar). + * + */ + +#define FT_VALIDATE_feat FT_VALIDATE_GX_BITFIELD( feat ) +#define FT_VALIDATE_mort FT_VALIDATE_GX_BITFIELD( mort ) +#define FT_VALIDATE_morx FT_VALIDATE_GX_BITFIELD( morx ) +#define FT_VALIDATE_bsln FT_VALIDATE_GX_BITFIELD( bsln ) +#define FT_VALIDATE_just FT_VALIDATE_GX_BITFIELD( just ) +#define FT_VALIDATE_kern FT_VALIDATE_GX_BITFIELD( kern ) +#define FT_VALIDATE_opbd FT_VALIDATE_GX_BITFIELD( opbd ) +#define FT_VALIDATE_trak FT_VALIDATE_GX_BITFIELD( trak ) +#define FT_VALIDATE_prop FT_VALIDATE_GX_BITFIELD( prop ) +#define FT_VALIDATE_lcar FT_VALIDATE_GX_BITFIELD( lcar ) + +#define FT_VALIDATE_GX ( FT_VALIDATE_feat | \ + FT_VALIDATE_mort | \ + FT_VALIDATE_morx | \ + FT_VALIDATE_bsln | \ + FT_VALIDATE_just | \ + FT_VALIDATE_kern | \ + FT_VALIDATE_opbd | \ + FT_VALIDATE_trak | \ + FT_VALIDATE_prop | \ + FT_VALIDATE_lcar ) + + + /************************************************************************** + * + * @function: + * FT_TrueTypeGX_Validate + * + * @description: + * Validate various TrueTypeGX tables to assure that all offsets and + * indices are valid. The idea is that a higher-level library that + * actually does the text layout can access those tables without error + * checking (which can be quite time consuming). + * + * @input: + * face :: + * A handle to the input face. + * + * validation_flags :: + * A bit field that specifies the tables to be validated. See + * @FT_VALIDATE_GXXXX for possible values. + * + * table_length :: + * The size of the `tables` array. Normally, @FT_VALIDATE_GX_LENGTH + * should be passed. + * + * @output: + * tables :: + * The array where all validated sfnt tables are stored. The array + * itself must be allocated by a client. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * This function only works with TrueTypeGX fonts, returning an error + * otherwise. + * + * After use, the application should deallocate the buffers pointed to by + * each `tables` element, by calling @FT_TrueTypeGX_Free. A `NULL` value + * indicates that the table either doesn't exist in the font, the + * application hasn't asked for validation, or the validator doesn't have + * the ability to validate the sfnt table. + */ + FT_EXPORT( FT_Error ) + FT_TrueTypeGX_Validate( FT_Face face, + FT_UInt validation_flags, + FT_Bytes tables[FT_VALIDATE_GX_LENGTH], + FT_UInt table_length ); + + + /************************************************************************** + * + * @function: + * FT_TrueTypeGX_Free + * + * @description: + * Free the buffer allocated by TrueTypeGX validator. + * + * @input: + * face :: + * A handle to the input face. + * + * table :: + * The pointer to the buffer allocated by @FT_TrueTypeGX_Validate. + * + * @note: + * This function must be used to free the buffer allocated by + * @FT_TrueTypeGX_Validate only. + */ + FT_EXPORT( void ) + FT_TrueTypeGX_Free( FT_Face face, + FT_Bytes table ); + + + /************************************************************************** + * + * @enum: + * FT_VALIDATE_CKERNXXX + * + * @description: + * A list of bit-field constants used with @FT_ClassicKern_Validate to + * indicate the classic kern dialect or dialects. If the selected type + * doesn't fit, @FT_ClassicKern_Validate regards the table as invalid. + * + * @values: + * FT_VALIDATE_MS :: + * Handle the 'kern' table as a classic Microsoft kern table. + * + * FT_VALIDATE_APPLE :: + * Handle the 'kern' table as a classic Apple kern table. + * + * FT_VALIDATE_CKERN :: + * Handle the 'kern' as either classic Apple or Microsoft kern table. + */ +#define FT_VALIDATE_MS ( FT_VALIDATE_GX_START << 0 ) +#define FT_VALIDATE_APPLE ( FT_VALIDATE_GX_START << 1 ) + +#define FT_VALIDATE_CKERN ( FT_VALIDATE_MS | FT_VALIDATE_APPLE ) + + + /************************************************************************** + * + * @function: + * FT_ClassicKern_Validate + * + * @description: + * Validate classic (16-bit format) kern table to assure that the + * offsets and indices are valid. The idea is that a higher-level + * library that actually does the text layout can access those tables + * without error checking (which can be quite time consuming). + * + * The 'kern' table validator in @FT_TrueTypeGX_Validate deals with both + * the new 32-bit format and the classic 16-bit format, while + * FT_ClassicKern_Validate only supports the classic 16-bit format. + * + * @input: + * face :: + * A handle to the input face. + * + * validation_flags :: + * A bit field that specifies the dialect to be validated. See + * @FT_VALIDATE_CKERNXXX for possible values. + * + * @output: + * ckern_table :: + * A pointer to the kern table. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * After use, the application should deallocate the buffers pointed to by + * `ckern_table`, by calling @FT_ClassicKern_Free. A `NULL` value + * indicates that the table doesn't exist in the font. + */ + FT_EXPORT( FT_Error ) + FT_ClassicKern_Validate( FT_Face face, + FT_UInt validation_flags, + FT_Bytes *ckern_table ); + + + /************************************************************************** + * + * @function: + * FT_ClassicKern_Free + * + * @description: + * Free the buffer allocated by classic Kern validator. + * + * @input: + * face :: + * A handle to the input face. + * + * table :: + * The pointer to the buffer that is allocated by + * @FT_ClassicKern_Validate. + * + * @note: + * This function must be used to free the buffer allocated by + * @FT_ClassicKern_Validate only. + */ + FT_EXPORT( void ) + FT_ClassicKern_Free( FT_Face face, + FT_Bytes table ); + + /* */ + + +FT_END_HEADER + +#endif /* FTGXVAL_H_ */ + + +/* END */ diff --git a/third_party/tlRender-install-Release/include/freetype2/freetype/ftgzip.h b/third_party/tlRender-install-Release/include/freetype2/freetype/ftgzip.h new file mode 100644 index 00000000..e26c334c --- /dev/null +++ b/third_party/tlRender-install-Release/include/freetype2/freetype/ftgzip.h @@ -0,0 +1,151 @@ +/**************************************************************************** + * + * ftgzip.h + * + * Gzip-compressed stream support. + * + * Copyright (C) 2002-2025 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + +#ifndef FTGZIP_H_ +#define FTGZIP_H_ + +#include + +#ifdef FREETYPE_H +#error "freetype.h of FreeType 1 has been loaded!" +#error "Please fix the directory search order for header files" +#error "so that freetype.h of FreeType 2 is found first." +#endif + + +FT_BEGIN_HEADER + + /************************************************************************** + * + * @section: + * gzip + * + * @title: + * GZIP Streams + * + * @abstract: + * Using gzip-compressed font files. + * + * @description: + * In certain builds of the library, gzip compression recognition is + * automatically handled when calling @FT_New_Face or @FT_Open_Face. + * This means that if no font driver is capable of handling the raw + * compressed file, the library will try to open a gzipped stream from it + * and re-open the face with it. + * + * The stream implementation is very basic and resets the decompression + * process each time seeking backwards is needed within the stream, + * which significantly undermines the performance. + * + * This section contains the declaration of Gzip-specific functions. + * + */ + + + /************************************************************************** + * + * @function: + * FT_Stream_OpenGzip + * + * @description: + * Open a new stream to parse gzip-compressed font files. This is mainly + * used to support the compressed `*.pcf.gz` fonts that come with + * XFree86. + * + * @input: + * stream :: + * The target embedding stream. + * + * source :: + * The source stream. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * The source stream must be opened _before_ calling this function. + * + * Calling the internal function `FT_Stream_Close` on the new stream will + * **not** call `FT_Stream_Close` on the source stream. None of the + * stream objects will be released to the heap. + * + * This function may return `FT_Err_Unimplemented_Feature` if your build + * of FreeType was not compiled with zlib support. + */ + FT_EXPORT( FT_Error ) + FT_Stream_OpenGzip( FT_Stream stream, + FT_Stream source ); + + + /************************************************************************** + * + * @function: + * FT_Gzip_Uncompress + * + * @description: + * Decompress a zipped input buffer into an output buffer. This function + * is modeled after zlib's `uncompress` function. + * + * @input: + * memory :: + * A FreeType memory handle. + * + * input :: + * The input buffer. + * + * input_len :: + * The length of the input buffer. + * + * @output: + * output :: + * The output buffer. + * + * @inout: + * output_len :: + * Before calling the function, this is the total size of the output + * buffer, which must be large enough to hold the entire uncompressed + * data (so the size of the uncompressed data must be known in + * advance). After calling the function, `output_len` is the size of + * the used data in `output`. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * This function may return `FT_Err_Unimplemented_Feature` if your build + * of FreeType was not compiled with zlib support. + * + * @since: + * 2.5.1 + */ + FT_EXPORT( FT_Error ) + FT_Gzip_Uncompress( FT_Memory memory, + FT_Byte* output, + FT_ULong* output_len, + const FT_Byte* input, + FT_ULong input_len ); + + /* */ + + +FT_END_HEADER + +#endif /* FTGZIP_H_ */ + + +/* END */ diff --git a/third_party/tlRender-install-Release/include/freetype2/freetype/ftimage.h b/third_party/tlRender-install-Release/include/freetype2/freetype/ftimage.h new file mode 100644 index 00000000..b0a0172e --- /dev/null +++ b/third_party/tlRender-install-Release/include/freetype2/freetype/ftimage.h @@ -0,0 +1,1293 @@ +/**************************************************************************** + * + * ftimage.h + * + * FreeType glyph image formats and default raster interface + * (specification). + * + * Copyright (C) 1996-2025 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + /************************************************************************** + * + * Note: A 'raster' is simply a scan-line converter, used to render + * `FT_Outline`s into `FT_Bitmap`s. + * + * Note: This file can be used for `STANDALONE_` compilation of raster + * (B/W) and smooth (anti-aliased) renderers. Therefore, it must + * rely on standard variable types only instead of aliases in + * `fttypes.h`. + * + */ + + +#ifndef FTIMAGE_H_ +#define FTIMAGE_H_ + + +FT_BEGIN_HEADER + + + /************************************************************************** + * + * @section: + * basic_types + * + */ + + + /************************************************************************** + * + * @type: + * FT_Pos + * + * @description: + * The type FT_Pos is used to store vectorial coordinates. Depending on + * the context, these can represent distances in integer font units, or + * 16.16, or 26.6 fixed-point pixel coordinates. + */ + typedef signed long FT_Pos; + + + /************************************************************************** + * + * @struct: + * FT_Vector + * + * @description: + * A simple structure used to store a 2D vector; coordinates are of the + * FT_Pos type. + * + * @fields: + * x :: + * The horizontal coordinate. + * y :: + * The vertical coordinate. + */ + typedef struct FT_Vector_ + { + FT_Pos x; + FT_Pos y; + + } FT_Vector; + + + /************************************************************************** + * + * @struct: + * FT_BBox + * + * @description: + * A structure used to hold an outline's bounding box, i.e., the + * coordinates of its extrema in the horizontal and vertical directions. + * + * @fields: + * xMin :: + * The horizontal minimum (left-most). + * + * yMin :: + * The vertical minimum (bottom-most). + * + * xMax :: + * The horizontal maximum (right-most). + * + * yMax :: + * The vertical maximum (top-most). + * + * @note: + * The bounding box is specified with the coordinates of the lower left + * and the upper right corner. In PostScript, those values are often + * called (llx,lly) and (urx,ury), respectively. + * + * If `yMin` is negative, this value gives the glyph's descender. + * Otherwise, the glyph doesn't descend below the baseline. Similarly, + * if `ymax` is positive, this value gives the glyph's ascender. + * + * `xMin` gives the horizontal distance from the glyph's origin to the + * left edge of the glyph's bounding box. If `xMin` is negative, the + * glyph extends to the left of the origin. + */ + typedef struct FT_BBox_ + { + FT_Pos xMin, yMin; + FT_Pos xMax, yMax; + + } FT_BBox; + + + /************************************************************************** + * + * @enum: + * FT_Pixel_Mode + * + * @description: + * An enumeration type used to describe the format of pixels in a given + * bitmap. Note that additional formats may be added in the future. + * + * @values: + * FT_PIXEL_MODE_NONE :: + * Value~0 is reserved. + * + * FT_PIXEL_MODE_MONO :: + * A monochrome bitmap, using 1~bit per pixel. Note that pixels are + * stored in most-significant order (MSB), which means that the + * left-most pixel in a byte has value 128. + * + * FT_PIXEL_MODE_GRAY :: + * An 8-bit bitmap, generally used to represent anti-aliased glyph + * images. Each pixel is stored in one byte. Note that the number of + * 'gray' levels is stored in the `num_grays` field of the @FT_Bitmap + * structure (it generally is 256). + * + * FT_PIXEL_MODE_GRAY2 :: + * A 2-bit per pixel bitmap, used to represent embedded anti-aliased + * bitmaps in font files according to the OpenType specification. We + * haven't found a single font using this format, however. + * + * FT_PIXEL_MODE_GRAY4 :: + * A 4-bit per pixel bitmap, representing embedded anti-aliased bitmaps + * in font files according to the OpenType specification. We haven't + * found a single font using this format, however. + * + * FT_PIXEL_MODE_LCD :: + * An 8-bit bitmap, representing RGB or BGR decimated glyph images used + * for display on LCD displays; the bitmap is three times wider than + * the original glyph image. See also @FT_RENDER_MODE_LCD. + * + * FT_PIXEL_MODE_LCD_V :: + * An 8-bit bitmap, representing RGB or BGR decimated glyph images used + * for display on rotated LCD displays; the bitmap is three times + * taller than the original glyph image. See also + * @FT_RENDER_MODE_LCD_V. + * + * FT_PIXEL_MODE_BGRA :: + * [Since 2.5] An image with four 8-bit channels per pixel, + * representing a color image (such as emoticons) with alpha channel. + * For each pixel, the format is BGRA, which means, the blue channel + * comes first in memory. The color channels are pre-multiplied and in + * the sRGB colorspace. For example, full red at half-translucent + * opacity will be represented as '00,00,80,80', not '00,00,FF,80'. + * See also @FT_LOAD_COLOR. + */ + typedef enum FT_Pixel_Mode_ + { + FT_PIXEL_MODE_NONE = 0, + FT_PIXEL_MODE_MONO, + FT_PIXEL_MODE_GRAY, + FT_PIXEL_MODE_GRAY2, + FT_PIXEL_MODE_GRAY4, + FT_PIXEL_MODE_LCD, + FT_PIXEL_MODE_LCD_V, + FT_PIXEL_MODE_BGRA, + + FT_PIXEL_MODE_MAX /* do not remove */ + + } FT_Pixel_Mode; + + + /* these constants are deprecated; use the corresponding `FT_Pixel_Mode` */ + /* values instead. */ +#define ft_pixel_mode_none FT_PIXEL_MODE_NONE +#define ft_pixel_mode_mono FT_PIXEL_MODE_MONO +#define ft_pixel_mode_grays FT_PIXEL_MODE_GRAY +#define ft_pixel_mode_pal2 FT_PIXEL_MODE_GRAY2 +#define ft_pixel_mode_pal4 FT_PIXEL_MODE_GRAY4 + + /* */ + + /* For debugging, the @FT_Pixel_Mode enumeration must stay in sync */ + /* with the `pixel_modes` array in file `ftobjs.c`. */ + + + /************************************************************************** + * + * @struct: + * FT_Bitmap + * + * @description: + * A structure used to describe a bitmap or pixmap to the raster. Note + * that we now manage pixmaps of various depths through the `pixel_mode` + * field. + * + * @fields: + * rows :: + * The number of bitmap rows. + * + * width :: + * The number of pixels in bitmap row. + * + * pitch :: + * The pitch's absolute value is the number of bytes taken by one + * bitmap row, including padding. However, the pitch is positive when + * the bitmap has a 'down' flow, and negative when it has an 'up' flow. + * In all cases, the pitch is an offset to add to a bitmap pointer in + * order to go down one row. + * + * Note that 'padding' means the alignment of a bitmap to a byte + * border, and FreeType functions normally align to the smallest + * possible integer value. + * + * For the B/W rasterizer, `pitch` is always an even number. + * + * To change the pitch of a bitmap (say, to make it a multiple of 4), + * use @FT_Bitmap_Convert. Alternatively, you might use callback + * functions to directly render to the application's surface; see the + * file `example2.cpp` in the tutorial for a demonstration. + * + * buffer :: + * A typeless pointer to the bitmap buffer. This value should be + * aligned on 32-bit boundaries in most cases. + * + * num_grays :: + * This field is only used with @FT_PIXEL_MODE_GRAY; it gives the + * number of gray levels used in the bitmap. + * + * pixel_mode :: + * The pixel mode, i.e., how pixel bits are stored. See @FT_Pixel_Mode + * for possible values. + * + * palette_mode :: + * This field is intended for paletted pixel modes; it indicates how + * the palette is stored. Not used currently. + * + * palette :: + * A typeless pointer to the bitmap palette; this field is intended for + * paletted pixel modes. Not used currently. + * + * @note: + * `width` and `rows` refer to the *physical* size of the bitmap, not the + * *logical* one. For example, if @FT_Pixel_Mode is set to + * `FT_PIXEL_MODE_LCD`, the logical width is a just a third of the + * physical one. + * + * An empty bitmap with a NULL `buffer` is valid, with `rows` and/or + * `pitch` also set to 0. Such bitmaps might be produced while rendering + * empty or degenerate outlines. + */ + typedef struct FT_Bitmap_ + { + unsigned int rows; + unsigned int width; + int pitch; + unsigned char* buffer; + unsigned short num_grays; + unsigned char pixel_mode; + unsigned char palette_mode; + void* palette; + + } FT_Bitmap; + + + /************************************************************************** + * + * @section: + * outline_processing + * + */ + + + /************************************************************************** + * + * @struct: + * FT_Outline + * + * @description: + * This structure is used to describe an outline to the scan-line + * converter. + * + * @fields: + * n_contours :: + * The number of contours in the outline. + * + * n_points :: + * The number of points in the outline. + * + * points :: + * A pointer to an array of `n_points` @FT_Vector elements, giving the + * outline's point coordinates. + * + * tags :: + * A pointer to an array of `n_points` chars, giving each outline + * point's type. + * + * If bit~0 is unset, the point is 'off' the curve, i.e., a Bezier + * control point, while it is 'on' if set. + * + * Bit~1 is meaningful for 'off' points only. If set, it indicates a + * third-order Bezier arc control point; and a second-order control + * point if unset. + * + * If bit~2 is set, bits 5-7 contain the drop-out mode (as defined in + * the OpenType specification; the value is the same as the argument to + * the 'SCANTYPE' instruction). + * + * Bits 3 and~4 are reserved for internal purposes. + * + * contours :: + * An array of `n_contours` shorts, giving the end point of each + * contour within the outline. For example, the first contour is + * defined by the points '0' to `contours[0]`, the second one is + * defined by the points `contours[0]+1` to `contours[1]`, etc. + * + * flags :: + * A set of bit flags used to characterize the outline and give hints + * to the scan-converter and hinter on how to convert/grid-fit it. See + * @FT_OUTLINE_XXX. + * + * @note: + * The B/W rasterizer only checks bit~2 in the `tags` array for the first + * point of each contour. The drop-out mode as given with + * @FT_OUTLINE_IGNORE_DROPOUTS, @FT_OUTLINE_SMART_DROPOUTS, and + * @FT_OUTLINE_INCLUDE_STUBS in `flags` is then overridden. + */ + typedef struct FT_Outline_ + { + unsigned short n_contours; /* number of contours in glyph */ + unsigned short n_points; /* number of points in the glyph */ + + FT_Vector* points; /* the outline's points */ + unsigned char* tags; /* the points flags */ + unsigned short* contours; /* the contour end points */ + + int flags; /* outline masks */ + + } FT_Outline; + + /* */ + + /* Following limits must be consistent with */ + /* FT_Outline.{n_contours,n_points} */ +#define FT_OUTLINE_CONTOURS_MAX USHRT_MAX +#define FT_OUTLINE_POINTS_MAX USHRT_MAX + + + /************************************************************************** + * + * @enum: + * FT_OUTLINE_XXX + * + * @description: + * A list of bit-field constants used for the flags in an outline's + * `flags` field. + * + * @values: + * FT_OUTLINE_NONE :: + * Value~0 is reserved. + * + * FT_OUTLINE_OWNER :: + * If set, this flag indicates that the outline's field arrays (i.e., + * `points`, `flags`, and `contours`) are 'owned' by the outline + * object, and should thus be freed when it is destroyed. + * + * FT_OUTLINE_EVEN_ODD_FILL :: + * By default, outlines are filled using the non-zero winding rule. If + * set to 1, the outline will be filled using the even-odd fill rule + * (only works with the smooth rasterizer). + * + * FT_OUTLINE_REVERSE_FILL :: + * By default, outside contours of an outline are oriented in + * clock-wise direction, as defined in the TrueType specification. + * This flag is set if the outline uses the opposite direction + * (typically for Type~1 fonts). This flag is ignored by the scan + * converter. + * + * FT_OUTLINE_IGNORE_DROPOUTS :: + * By default, the scan converter will try to detect drop-outs in an + * outline and correct the glyph bitmap to ensure consistent shape + * continuity. If set, this flag hints the scan-line converter to + * ignore such cases. See below for more information. + * + * FT_OUTLINE_SMART_DROPOUTS :: + * Select smart dropout control. If unset, use simple dropout control. + * Ignored if @FT_OUTLINE_IGNORE_DROPOUTS is set. See below for more + * information. + * + * FT_OUTLINE_INCLUDE_STUBS :: + * If set, turn pixels on for 'stubs', otherwise exclude them. Ignored + * if @FT_OUTLINE_IGNORE_DROPOUTS is set. See below for more + * information. + * + * FT_OUTLINE_OVERLAP :: + * [Since 2.10.3] This flag indicates that this outline contains + * overlapping contours and the anti-aliased renderer should perform + * oversampling to mitigate possible artifacts. This flag should _not_ + * be set for well designed glyphs without overlaps because it quadruples + * the rendering time. + * + * FT_OUTLINE_HIGH_PRECISION :: + * This flag indicates that the scan-line converter should try to + * convert this outline to bitmaps with the highest possible quality. + * It is typically set for small character sizes. Note that this is + * only a hint that might be completely ignored by a given + * scan-converter. + * + * FT_OUTLINE_SINGLE_PASS :: + * This flag is set to force a given scan-converter to only use a + * single pass over the outline to render a bitmap glyph image. + * Normally, it is set for very large character sizes. It is only a + * hint that might be completely ignored by a given scan-converter. + * + * @note: + * The flags @FT_OUTLINE_IGNORE_DROPOUTS, @FT_OUTLINE_SMART_DROPOUTS, and + * @FT_OUTLINE_INCLUDE_STUBS are ignored by the smooth rasterizer. + * + * There exists a second mechanism to pass the drop-out mode to the B/W + * rasterizer; see the `tags` field in @FT_Outline. + * + * Please refer to the description of the 'SCANTYPE' instruction in the + * [OpenType specification](https://learn.microsoft.com/typography/opentype/spec/tt_instructions#scantype) + * how simple drop-outs, smart drop-outs, and stubs are defined. + */ +#define FT_OUTLINE_NONE 0x0 +#define FT_OUTLINE_OWNER 0x1 +#define FT_OUTLINE_EVEN_ODD_FILL 0x2 +#define FT_OUTLINE_REVERSE_FILL 0x4 +#define FT_OUTLINE_IGNORE_DROPOUTS 0x8 +#define FT_OUTLINE_SMART_DROPOUTS 0x10 +#define FT_OUTLINE_INCLUDE_STUBS 0x20 +#define FT_OUTLINE_OVERLAP 0x40 + +#define FT_OUTLINE_HIGH_PRECISION 0x100 +#define FT_OUTLINE_SINGLE_PASS 0x200 + + + /* these constants are deprecated; use the corresponding */ + /* `FT_OUTLINE_XXX` values instead */ +#define ft_outline_none FT_OUTLINE_NONE +#define ft_outline_owner FT_OUTLINE_OWNER +#define ft_outline_even_odd_fill FT_OUTLINE_EVEN_ODD_FILL +#define ft_outline_reverse_fill FT_OUTLINE_REVERSE_FILL +#define ft_outline_ignore_dropouts FT_OUTLINE_IGNORE_DROPOUTS +#define ft_outline_high_precision FT_OUTLINE_HIGH_PRECISION +#define ft_outline_single_pass FT_OUTLINE_SINGLE_PASS + + /* */ + +#define FT_CURVE_TAG( flag ) ( flag & 0x03 ) + + /* see the `tags` field in `FT_Outline` for a description of the values */ +#define FT_CURVE_TAG_ON 0x01 +#define FT_CURVE_TAG_CONIC 0x00 +#define FT_CURVE_TAG_CUBIC 0x02 + +#define FT_CURVE_TAG_HAS_SCANMODE 0x04 + +#define FT_CURVE_TAG_TOUCH_X 0x08 /* reserved for TrueType hinter */ +#define FT_CURVE_TAG_TOUCH_Y 0x10 /* reserved for TrueType hinter */ + +#define FT_CURVE_TAG_TOUCH_BOTH ( FT_CURVE_TAG_TOUCH_X | \ + FT_CURVE_TAG_TOUCH_Y ) + /* values 0x20, 0x40, and 0x80 are reserved */ + + + /* these constants are deprecated; use the corresponding */ + /* `FT_CURVE_TAG_XXX` values instead */ +#define FT_Curve_Tag_On FT_CURVE_TAG_ON +#define FT_Curve_Tag_Conic FT_CURVE_TAG_CONIC +#define FT_Curve_Tag_Cubic FT_CURVE_TAG_CUBIC +#define FT_Curve_Tag_Touch_X FT_CURVE_TAG_TOUCH_X +#define FT_Curve_Tag_Touch_Y FT_CURVE_TAG_TOUCH_Y + + + /************************************************************************** + * + * @functype: + * FT_Outline_MoveToFunc + * + * @description: + * A function pointer type used to describe the signature of a 'move to' + * function during outline walking/decomposition. + * + * A 'move to' is emitted to start a new contour in an outline. + * + * @input: + * to :: + * A pointer to the target point of the 'move to'. + * + * user :: + * A typeless pointer, which is passed from the caller of the + * decomposition function. + * + * @return: + * Error code. 0~means success. + */ + typedef int + (*FT_Outline_MoveToFunc)( const FT_Vector* to, + void* user ); + +#define FT_Outline_MoveTo_Func FT_Outline_MoveToFunc + + + /************************************************************************** + * + * @functype: + * FT_Outline_LineToFunc + * + * @description: + * A function pointer type used to describe the signature of a 'line to' + * function during outline walking/decomposition. + * + * A 'line to' is emitted to indicate a segment in the outline. + * + * @input: + * to :: + * A pointer to the target point of the 'line to'. + * + * user :: + * A typeless pointer, which is passed from the caller of the + * decomposition function. + * + * @return: + * Error code. 0~means success. + */ + typedef int + (*FT_Outline_LineToFunc)( const FT_Vector* to, + void* user ); + +#define FT_Outline_LineTo_Func FT_Outline_LineToFunc + + + /************************************************************************** + * + * @functype: + * FT_Outline_ConicToFunc + * + * @description: + * A function pointer type used to describe the signature of a 'conic to' + * function during outline walking or decomposition. + * + * A 'conic to' is emitted to indicate a second-order Bezier arc in the + * outline. + * + * @input: + * control :: + * An intermediate control point between the last position and the new + * target in `to`. + * + * to :: + * A pointer to the target end point of the conic arc. + * + * user :: + * A typeless pointer, which is passed from the caller of the + * decomposition function. + * + * @return: + * Error code. 0~means success. + */ + typedef int + (*FT_Outline_ConicToFunc)( const FT_Vector* control, + const FT_Vector* to, + void* user ); + +#define FT_Outline_ConicTo_Func FT_Outline_ConicToFunc + + + /************************************************************************** + * + * @functype: + * FT_Outline_CubicToFunc + * + * @description: + * A function pointer type used to describe the signature of a 'cubic to' + * function during outline walking or decomposition. + * + * A 'cubic to' is emitted to indicate a third-order Bezier arc. + * + * @input: + * control1 :: + * A pointer to the first Bezier control point. + * + * control2 :: + * A pointer to the second Bezier control point. + * + * to :: + * A pointer to the target end point. + * + * user :: + * A typeless pointer, which is passed from the caller of the + * decomposition function. + * + * @return: + * Error code. 0~means success. + */ + typedef int + (*FT_Outline_CubicToFunc)( const FT_Vector* control1, + const FT_Vector* control2, + const FT_Vector* to, + void* user ); + +#define FT_Outline_CubicTo_Func FT_Outline_CubicToFunc + + + /************************************************************************** + * + * @struct: + * FT_Outline_Funcs + * + * @description: + * A structure to hold various function pointers used during outline + * decomposition in order to emit segments, conic, and cubic Beziers. + * + * @fields: + * move_to :: + * The 'move to' emitter. + * + * line_to :: + * The segment emitter. + * + * conic_to :: + * The second-order Bezier arc emitter. + * + * cubic_to :: + * The third-order Bezier arc emitter. + * + * shift :: + * The shift that is applied to coordinates before they are sent to the + * emitter. + * + * delta :: + * The delta that is applied to coordinates before they are sent to the + * emitter, but after the shift. + * + * @note: + * The point coordinates sent to the emitters are the transformed version + * of the original coordinates (this is important for high accuracy + * during scan-conversion). The transformation is simple: + * + * ``` + * x' = (x << shift) - delta + * y' = (y << shift) - delta + * ``` + * + * Set the values of `shift` and `delta` to~0 to get the original point + * coordinates. + */ + typedef struct FT_Outline_Funcs_ + { + FT_Outline_MoveToFunc move_to; + FT_Outline_LineToFunc line_to; + FT_Outline_ConicToFunc conic_to; + FT_Outline_CubicToFunc cubic_to; + + int shift; + FT_Pos delta; + + } FT_Outline_Funcs; + + + /************************************************************************** + * + * @section: + * basic_types + * + */ + + + /************************************************************************** + * + * @macro: + * FT_IMAGE_TAG + * + * @description: + * This macro converts four-letter tags to an unsigned long type. + * + * @note: + * Since many 16-bit compilers don't like 32-bit enumerations, you should + * redefine this macro in case of problems to something like this: + * + * ``` + * #define FT_IMAGE_TAG( value, _x1, _x2, _x3, _x4 ) value + * ``` + * + * to get a simple enumeration without assigning special numbers. + */ +#ifndef FT_IMAGE_TAG + +#define FT_IMAGE_TAG( value, _x1, _x2, _x3, _x4 ) \ + value = ( ( FT_STATIC_BYTE_CAST( unsigned long, _x1 ) << 24 ) | \ + ( FT_STATIC_BYTE_CAST( unsigned long, _x2 ) << 16 ) | \ + ( FT_STATIC_BYTE_CAST( unsigned long, _x3 ) << 8 ) | \ + FT_STATIC_BYTE_CAST( unsigned long, _x4 ) ) + +#endif /* FT_IMAGE_TAG */ + + + /************************************************************************** + * + * @enum: + * FT_Glyph_Format + * + * @description: + * An enumeration type used to describe the format of a given glyph + * image. Note that this version of FreeType only supports two image + * formats, even though future font drivers will be able to register + * their own format. + * + * @values: + * FT_GLYPH_FORMAT_NONE :: + * The value~0 is reserved. + * + * FT_GLYPH_FORMAT_COMPOSITE :: + * The glyph image is a composite of several other images. This format + * is _only_ used with @FT_LOAD_NO_RECURSE, and is used to report + * compound glyphs (like accented characters). + * + * FT_GLYPH_FORMAT_BITMAP :: + * The glyph image is a bitmap, and can be described as an @FT_Bitmap. + * You generally need to access the `bitmap` field of the + * @FT_GlyphSlotRec structure to read it. + * + * FT_GLYPH_FORMAT_OUTLINE :: + * The glyph image is a vectorial outline made of line segments and + * Bezier arcs; it can be described as an @FT_Outline; you generally + * want to access the `outline` field of the @FT_GlyphSlotRec structure + * to read it. + * + * FT_GLYPH_FORMAT_PLOTTER :: + * The glyph image is a vectorial path with no inside and outside + * contours. Some Type~1 fonts, like those in the Hershey family, + * contain glyphs in this format. These are described as @FT_Outline, + * but FreeType isn't currently capable of rendering them correctly. + * + * FT_GLYPH_FORMAT_SVG :: + * [Since 2.12] The glyph is represented by an SVG document in the + * 'SVG~' table. + */ + typedef enum FT_Glyph_Format_ + { + FT_IMAGE_TAG( FT_GLYPH_FORMAT_NONE, 0, 0, 0, 0 ), + + FT_IMAGE_TAG( FT_GLYPH_FORMAT_COMPOSITE, 'c', 'o', 'm', 'p' ), + FT_IMAGE_TAG( FT_GLYPH_FORMAT_BITMAP, 'b', 'i', 't', 's' ), + FT_IMAGE_TAG( FT_GLYPH_FORMAT_OUTLINE, 'o', 'u', 't', 'l' ), + FT_IMAGE_TAG( FT_GLYPH_FORMAT_PLOTTER, 'p', 'l', 'o', 't' ), + FT_IMAGE_TAG( FT_GLYPH_FORMAT_SVG, 'S', 'V', 'G', ' ' ) + + } FT_Glyph_Format; + + + /* these constants are deprecated; use the corresponding */ + /* `FT_Glyph_Format` values instead. */ +#define ft_glyph_format_none FT_GLYPH_FORMAT_NONE +#define ft_glyph_format_composite FT_GLYPH_FORMAT_COMPOSITE +#define ft_glyph_format_bitmap FT_GLYPH_FORMAT_BITMAP +#define ft_glyph_format_outline FT_GLYPH_FORMAT_OUTLINE +#define ft_glyph_format_plotter FT_GLYPH_FORMAT_PLOTTER + + + /*************************************************************************/ + /*************************************************************************/ + /*************************************************************************/ + /***** *****/ + /***** R A S T E R D E F I N I T I O N S *****/ + /***** *****/ + /*************************************************************************/ + /*************************************************************************/ + /*************************************************************************/ + + + + /************************************************************************** + * + * @section: + * raster + * + * @title: + * Scanline Converter + * + * @abstract: + * How vectorial outlines are converted into bitmaps and pixmaps. + * + * @description: + * A raster or a rasterizer is a scan converter in charge of producing a + * pixel coverage bitmap that can be used as an alpha channel when + * compositing a glyph with a background. FreeType comes with two + * rasterizers: bilevel `raster1` and anti-aliased `smooth` are two + * separate modules. They are usually called from the high-level + * @FT_Load_Glyph or @FT_Render_Glyph functions and produce the entire + * coverage bitmap at once, while staying largely invisible to users. + * + * Instead of working with complete coverage bitmaps, it is also possible + * to intercept consecutive pixel runs on the same scanline with the same + * coverage, called _spans_, and process them individually. Only the + * `smooth` rasterizer permits this when calling @FT_Outline_Render with + * @FT_Raster_Params as described below. + * + * Working with either complete bitmaps or spans it is important to think + * of them as colorless coverage objects suitable as alpha channels to + * blend arbitrary colors with a background. For best results, it is + * recommended to use gamma correction, too. + * + * This section also describes the public API needed to set up alternative + * @FT_Renderer modules. + * + * @order: + * FT_Span + * FT_SpanFunc + * FT_Raster_Params + * FT_RASTER_FLAG_XXX + * + * FT_Raster + * FT_Raster_NewFunc + * FT_Raster_DoneFunc + * FT_Raster_ResetFunc + * FT_Raster_SetModeFunc + * FT_Raster_RenderFunc + * FT_Raster_Funcs + * + */ + + + /************************************************************************** + * + * @struct: + * FT_Span + * + * @description: + * A structure to model a single span of consecutive pixels when + * rendering an anti-aliased bitmap. + * + * @fields: + * x :: + * The span's horizontal start position. + * + * len :: + * The span's length in pixels. + * + * coverage :: + * The span color/coverage, ranging from 0 (background) to 255 + * (foreground). + * + * @note: + * This structure is used by the span drawing callback type named + * @FT_SpanFunc that takes the y~coordinate of the span as a parameter. + * + * The anti-aliased rasterizer produces coverage values from 0 to 255, + * that is, from completely transparent to completely opaque. + */ + typedef struct FT_Span_ + { + short x; + unsigned short len; + unsigned char coverage; + + } FT_Span; + + + /************************************************************************** + * + * @functype: + * FT_SpanFunc + * + * @description: + * A function used as a call-back by the anti-aliased renderer in order + * to let client applications draw themselves the pixel spans on each + * scan line. + * + * @input: + * y :: + * The scanline's upward y~coordinate. + * + * count :: + * The number of spans to draw on this scanline. + * + * spans :: + * A table of `count` spans to draw on the scanline. + * + * user :: + * User-supplied data that is passed to the callback. + * + * @note: + * This callback allows client applications to directly render the spans + * of the anti-aliased bitmap to any kind of surfaces. + * + * This can be used to write anti-aliased outlines directly to a given + * background bitmap using alpha compositing. It can also be used for + * oversampling and averaging. + */ + typedef void + (*FT_SpanFunc)( int y, + int count, + const FT_Span* spans, + void* user ); + +#define FT_Raster_Span_Func FT_SpanFunc + + + /************************************************************************** + * + * @functype: + * FT_Raster_BitTest_Func + * + * @description: + * Deprecated, unimplemented. + */ + typedef int + (*FT_Raster_BitTest_Func)( int y, + int x, + void* user ); + + + /************************************************************************** + * + * @functype: + * FT_Raster_BitSet_Func + * + * @description: + * Deprecated, unimplemented. + */ + typedef void + (*FT_Raster_BitSet_Func)( int y, + int x, + void* user ); + + + /************************************************************************** + * + * @enum: + * FT_RASTER_FLAG_XXX + * + * @description: + * A list of bit flag constants as used in the `flags` field of a + * @FT_Raster_Params structure. + * + * @values: + * FT_RASTER_FLAG_DEFAULT :: + * This value is 0. + * + * FT_RASTER_FLAG_AA :: + * This flag is set to indicate that an anti-aliased glyph image should + * be generated. Otherwise, it will be monochrome (1-bit). + * + * FT_RASTER_FLAG_DIRECT :: + * This flag is set to indicate direct rendering. In this mode, client + * applications must provide their own span callback. This lets them + * directly draw or compose over an existing bitmap. If this bit is + * _not_ set, the target pixmap's buffer _must_ be zeroed before + * rendering and the output will be clipped to its size. + * + * Direct rendering is only possible with anti-aliased glyphs. + * + * FT_RASTER_FLAG_CLIP :: + * This flag is only used in direct rendering mode. If set, the output + * will be clipped to a box specified in the `clip_box` field of the + * @FT_Raster_Params structure. Otherwise, the `clip_box` is + * effectively set to the bounding box and all spans are generated. + * + * FT_RASTER_FLAG_SDF :: + * This flag is set to indicate that a signed distance field glyph + * image should be generated. This is only used while rendering with + * the @FT_RENDER_MODE_SDF render mode. + */ +#define FT_RASTER_FLAG_DEFAULT 0x0 +#define FT_RASTER_FLAG_AA 0x1 +#define FT_RASTER_FLAG_DIRECT 0x2 +#define FT_RASTER_FLAG_CLIP 0x4 +#define FT_RASTER_FLAG_SDF 0x8 + + /* these constants are deprecated; use the corresponding */ + /* `FT_RASTER_FLAG_XXX` values instead */ +#define ft_raster_flag_default FT_RASTER_FLAG_DEFAULT +#define ft_raster_flag_aa FT_RASTER_FLAG_AA +#define ft_raster_flag_direct FT_RASTER_FLAG_DIRECT +#define ft_raster_flag_clip FT_RASTER_FLAG_CLIP + + + /************************************************************************** + * + * @struct: + * FT_Raster_Params + * + * @description: + * A structure to hold the parameters used by a raster's render function, + * passed as an argument to @FT_Outline_Render. + * + * @fields: + * target :: + * The target bitmap. + * + * source :: + * A pointer to the source glyph image (e.g., an @FT_Outline). + * + * flags :: + * The rendering flags. + * + * gray_spans :: + * The gray span drawing callback. + * + * black_spans :: + * Unused. + * + * bit_test :: + * Unused. + * + * bit_set :: + * Unused. + * + * user :: + * User-supplied data that is passed to each drawing callback. + * + * clip_box :: + * An optional span clipping box expressed in _integer_ pixels + * (not in 26.6 fixed-point units). + * + * @note: + * The @FT_RASTER_FLAG_AA bit flag must be set in the `flags` to + * generate an anti-aliased glyph bitmap, otherwise a monochrome bitmap + * is generated. The `target` should have appropriate pixel mode and its + * dimensions define the clipping region. + * + * If both @FT_RASTER_FLAG_AA and @FT_RASTER_FLAG_DIRECT bit flags + * are set in `flags`, the raster calls an @FT_SpanFunc callback + * `gray_spans` with `user` data as an argument ignoring `target`. This + * allows direct composition over a pre-existing user surface to perform + * the span drawing and composition. To optionally clip the spans, set + * the @FT_RASTER_FLAG_CLIP flag and `clip_box`. The monochrome raster + * does not support the direct mode. + * + * The gray-level rasterizer always uses 256 gray levels. If you want + * fewer gray levels, you have to use @FT_RASTER_FLAG_DIRECT and reduce + * the levels in the callback function. + */ + typedef struct FT_Raster_Params_ + { + const FT_Bitmap* target; + const void* source; + int flags; + FT_SpanFunc gray_spans; + FT_SpanFunc black_spans; /* unused */ + FT_Raster_BitTest_Func bit_test; /* unused */ + FT_Raster_BitSet_Func bit_set; /* unused */ + void* user; + FT_BBox clip_box; + + } FT_Raster_Params; + + + /************************************************************************** + * + * @type: + * FT_Raster + * + * @description: + * An opaque handle (pointer) to a raster object. Each object can be + * used independently to convert an outline into a bitmap or pixmap. + * + * @note: + * In FreeType 2, all rasters are now encapsulated within specific + * @FT_Renderer modules and only used in their context. + * + */ + typedef struct FT_RasterRec_* FT_Raster; + + + /************************************************************************** + * + * @functype: + * FT_Raster_NewFunc + * + * @description: + * A function used to create a new raster object. + * + * @input: + * memory :: + * A handle to the memory allocator. + * + * @output: + * raster :: + * A handle to the new raster object. + * + * @return: + * Error code. 0~means success. + * + * @note: + * The `memory` parameter is a typeless pointer in order to avoid + * un-wanted dependencies on the rest of the FreeType code. In practice, + * it is an @FT_Memory object, i.e., a handle to the standard FreeType + * memory allocator. However, this field can be completely ignored by a + * given raster implementation. + */ + typedef int + (*FT_Raster_NewFunc)( void* memory, + FT_Raster* raster ); + +#define FT_Raster_New_Func FT_Raster_NewFunc + + + /************************************************************************** + * + * @functype: + * FT_Raster_DoneFunc + * + * @description: + * A function used to destroy a given raster object. + * + * @input: + * raster :: + * A handle to the raster object. + */ + typedef void + (*FT_Raster_DoneFunc)( FT_Raster raster ); + +#define FT_Raster_Done_Func FT_Raster_DoneFunc + + + /************************************************************************** + * + * @functype: + * FT_Raster_ResetFunc + * + * @description: + * FreeType used to provide an area of memory called the 'render pool' + * available to all registered rasterizers. This was not thread safe, + * however, and now FreeType never allocates this pool. + * + * This function is called after a new raster object is created. + * + * @input: + * raster :: + * A handle to the new raster object. + * + * pool_base :: + * Previously, the address in memory of the render pool. Set this to + * `NULL`. + * + * pool_size :: + * Previously, the size in bytes of the render pool. Set this to 0. + * + * @note: + * Rasterizers should rely on dynamic or stack allocation if they want to + * (a handle to the memory allocator is passed to the rasterizer + * constructor). + */ + typedef void + (*FT_Raster_ResetFunc)( FT_Raster raster, + unsigned char* pool_base, + unsigned long pool_size ); + +#define FT_Raster_Reset_Func FT_Raster_ResetFunc + + + /************************************************************************** + * + * @functype: + * FT_Raster_SetModeFunc + * + * @description: + * This function is a generic facility to change modes or attributes in a + * given raster. This can be used for debugging purposes, or simply to + * allow implementation-specific 'features' in a given raster module. + * + * @input: + * raster :: + * A handle to the new raster object. + * + * mode :: + * A 4-byte tag used to name the mode or property. + * + * args :: + * A pointer to the new mode/property to use. + */ + typedef int + (*FT_Raster_SetModeFunc)( FT_Raster raster, + unsigned long mode, + void* args ); + +#define FT_Raster_Set_Mode_Func FT_Raster_SetModeFunc + + + /************************************************************************** + * + * @functype: + * FT_Raster_RenderFunc + * + * @description: + * Invoke a given raster to scan-convert a given glyph image into a + * target bitmap. + * + * @input: + * raster :: + * A handle to the raster object. + * + * params :: + * A pointer to an @FT_Raster_Params structure used to store the + * rendering parameters. + * + * @return: + * Error code. 0~means success. + * + * @note: + * The exact format of the source image depends on the raster's glyph + * format defined in its @FT_Raster_Funcs structure. It can be an + * @FT_Outline or anything else in order to support a large array of + * glyph formats. + * + * Note also that the render function can fail and return a + * `FT_Err_Unimplemented_Feature` error code if the raster used does not + * support direct composition. + */ + typedef int + (*FT_Raster_RenderFunc)( FT_Raster raster, + const FT_Raster_Params* params ); + +#define FT_Raster_Render_Func FT_Raster_RenderFunc + + + /************************************************************************** + * + * @struct: + * FT_Raster_Funcs + * + * @description: + * A structure used to describe a given raster class to the library. + * + * @fields: + * glyph_format :: + * The supported glyph format for this raster. + * + * raster_new :: + * The raster constructor. + * + * raster_reset :: + * Used to reset the render pool within the raster. + * + * raster_render :: + * A function to render a glyph into a given bitmap. + * + * raster_done :: + * The raster destructor. + */ + typedef struct FT_Raster_Funcs_ + { + FT_Glyph_Format glyph_format; + + FT_Raster_NewFunc raster_new; + FT_Raster_ResetFunc raster_reset; + FT_Raster_SetModeFunc raster_set_mode; + FT_Raster_RenderFunc raster_render; + FT_Raster_DoneFunc raster_done; + + } FT_Raster_Funcs; + + /* */ + + +FT_END_HEADER + +#endif /* FTIMAGE_H_ */ + + +/* END */ + + +/* Local Variables: */ +/* coding: utf-8 */ +/* End: */ diff --git a/third_party/tlRender-install-Release/include/freetype2/freetype/ftincrem.h b/third_party/tlRender-install-Release/include/freetype2/freetype/ftincrem.h new file mode 100644 index 00000000..22330447 --- /dev/null +++ b/third_party/tlRender-install-Release/include/freetype2/freetype/ftincrem.h @@ -0,0 +1,348 @@ +/**************************************************************************** + * + * ftincrem.h + * + * FreeType incremental loading (specification). + * + * Copyright (C) 2002-2025 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + +#ifndef FTINCREM_H_ +#define FTINCREM_H_ + +#include +#include + +#ifdef FREETYPE_H +#error "freetype.h of FreeType 1 has been loaded!" +#error "Please fix the directory search order for header files" +#error "so that freetype.h of FreeType 2 is found first." +#endif + + +FT_BEGIN_HEADER + + /************************************************************************** + * + * @section: + * incremental + * + * @title: + * Incremental Loading + * + * @abstract: + * Custom Glyph Loading. + * + * @description: + * This section contains various functions used to perform so-called + * 'incremental' glyph loading. This is a mode where all glyphs loaded + * from a given @FT_Face are provided by the client application. + * + * Apart from that, all other tables are loaded normally from the font + * file. This mode is useful when FreeType is used within another + * engine, e.g., a PostScript Imaging Processor. + * + * To enable this mode, you must use @FT_Open_Face, passing an + * @FT_Parameter with the @FT_PARAM_TAG_INCREMENTAL tag and an + * @FT_Incremental_Interface value. See the comments for + * @FT_Incremental_InterfaceRec for an example. + * + */ + + + /************************************************************************** + * + * @type: + * FT_Incremental + * + * @description: + * An opaque type describing a user-provided object used to implement + * 'incremental' glyph loading within FreeType. This is used to support + * embedded fonts in certain environments (e.g., PostScript + * interpreters), where the glyph data isn't in the font file, or must be + * overridden by different values. + * + * @note: + * It is up to client applications to create and implement + * @FT_Incremental objects, as long as they provide implementations for + * the methods @FT_Incremental_GetGlyphDataFunc, + * @FT_Incremental_FreeGlyphDataFunc and + * @FT_Incremental_GetGlyphMetricsFunc. + * + * See the description of @FT_Incremental_InterfaceRec to understand how + * to use incremental objects with FreeType. + * + */ + typedef struct FT_IncrementalRec_* FT_Incremental; + + + /************************************************************************** + * + * @struct: + * FT_Incremental_MetricsRec + * + * @description: + * A small structure used to contain the basic glyph metrics returned by + * the @FT_Incremental_GetGlyphMetricsFunc method. + * + * @fields: + * bearing_x :: + * Left bearing, in font units. + * + * bearing_y :: + * Top bearing, in font units. + * + * advance :: + * Horizontal component of glyph advance, in font units. + * + * advance_v :: + * Vertical component of glyph advance, in font units. + * + * @note: + * These correspond to horizontal or vertical metrics depending on the + * value of the `vertical` argument to the function + * @FT_Incremental_GetGlyphMetricsFunc. + * + */ + typedef struct FT_Incremental_MetricsRec_ + { + FT_Long bearing_x; + FT_Long bearing_y; + FT_Long advance; + FT_Long advance_v; /* since 2.3.12 */ + + } FT_Incremental_MetricsRec; + + + /************************************************************************** + * + * @struct: + * FT_Incremental_Metrics + * + * @description: + * A handle to an @FT_Incremental_MetricsRec structure. + * + */ + typedef struct FT_Incremental_MetricsRec_* FT_Incremental_Metrics; + + + /************************************************************************** + * + * @type: + * FT_Incremental_GetGlyphDataFunc + * + * @description: + * A function called by FreeType to access a given glyph's data bytes + * during @FT_Load_Glyph or @FT_Load_Char if incremental loading is + * enabled. + * + * Note that the format of the glyph's data bytes depends on the font + * file format. For TrueType, it must correspond to the raw bytes within + * the 'glyf' table. For PostScript formats, it must correspond to the + * **unencrypted** charstring bytes, without any `lenIV` header. It is + * undefined for any other format. + * + * @input: + * incremental :: + * Handle to an opaque @FT_Incremental handle provided by the client + * application. + * + * glyph_index :: + * Index of relevant glyph. + * + * @output: + * adata :: + * A structure describing the returned glyph data bytes (which will be + * accessed as a read-only byte block). + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * If this function returns successfully the method + * @FT_Incremental_FreeGlyphDataFunc will be called later to release the + * data bytes. + * + * Nested calls to @FT_Incremental_GetGlyphDataFunc can happen for + * compound glyphs. + * + */ + typedef FT_Error + (*FT_Incremental_GetGlyphDataFunc)( FT_Incremental incremental, + FT_UInt glyph_index, + FT_Data* adata ); + + + /************************************************************************** + * + * @type: + * FT_Incremental_FreeGlyphDataFunc + * + * @description: + * A function used to release the glyph data bytes returned by a + * successful call to @FT_Incremental_GetGlyphDataFunc. + * + * @input: + * incremental :: + * A handle to an opaque @FT_Incremental handle provided by the client + * application. + * + * data :: + * A structure describing the glyph data bytes (which will be accessed + * as a read-only byte block). + * + */ + typedef void + (*FT_Incremental_FreeGlyphDataFunc)( FT_Incremental incremental, + FT_Data* data ); + + + /************************************************************************** + * + * @type: + * FT_Incremental_GetGlyphMetricsFunc + * + * @description: + * A function used to retrieve the basic metrics of a given glyph index + * before accessing its data. This allows for handling font types such + * as PCL~XL Format~1, Class~2 downloaded TrueType fonts, where the glyph + * metrics (`hmtx` and `vmtx` tables) are permitted to be omitted from + * the font, and the relevant metrics included in the header of the glyph + * outline data. Importantly, this is not intended to allow custom glyph + * metrics (for example, Postscript Metrics dictionaries), because that + * conflicts with the requirements of outline hinting. Such custom + * metrics must be handled separately, by the calling application. + * + * @input: + * incremental :: + * A handle to an opaque @FT_Incremental handle provided by the client + * application. + * + * glyph_index :: + * Index of relevant glyph. + * + * vertical :: + * If true, return vertical metrics. + * + * ametrics :: + * This parameter is used for both input and output. The original + * glyph metrics, if any, in font units. If metrics are not available + * all the values must be set to zero. + * + * @output: + * ametrics :: + * The glyph metrics in font units. + * + */ + typedef FT_Error + (*FT_Incremental_GetGlyphMetricsFunc) + ( FT_Incremental incremental, + FT_UInt glyph_index, + FT_Bool vertical, + FT_Incremental_MetricsRec *ametrics ); + + + /************************************************************************** + * + * @struct: + * FT_Incremental_FuncsRec + * + * @description: + * A table of functions for accessing fonts that load data incrementally. + * Used in @FT_Incremental_InterfaceRec. + * + * @fields: + * get_glyph_data :: + * The function to get glyph data. Must not be null. + * + * free_glyph_data :: + * The function to release glyph data. Must not be null. + * + * get_glyph_metrics :: + * The function to get glyph metrics. May be null if the font does not + * require it. + * + */ + typedef struct FT_Incremental_FuncsRec_ + { + FT_Incremental_GetGlyphDataFunc get_glyph_data; + FT_Incremental_FreeGlyphDataFunc free_glyph_data; + FT_Incremental_GetGlyphMetricsFunc get_glyph_metrics; + + } FT_Incremental_FuncsRec; + + + /************************************************************************** + * + * @struct: + * FT_Incremental_InterfaceRec + * + * @description: + * A structure to be used with @FT_Open_Face to indicate that the user + * wants to support incremental glyph loading. You should use it with + * @FT_PARAM_TAG_INCREMENTAL as in the following example: + * + * ``` + * FT_Incremental_InterfaceRec inc_int; + * FT_Parameter parameter; + * FT_Open_Args open_args; + * + * + * // set up incremental descriptor + * inc_int.funcs = my_funcs; + * inc_int.object = my_object; + * + * // set up optional parameter + * parameter.tag = FT_PARAM_TAG_INCREMENTAL; + * parameter.data = &inc_int; + * + * // set up FT_Open_Args structure + * open_args.flags = FT_OPEN_PATHNAME | FT_OPEN_PARAMS; + * open_args.pathname = my_font_pathname; + * open_args.num_params = 1; + * open_args.params = ¶meter; // we use one optional argument + * + * // open the font + * error = FT_Open_Face( library, &open_args, index, &face ); + * ... + * ``` + * + */ + typedef struct FT_Incremental_InterfaceRec_ + { + const FT_Incremental_FuncsRec* funcs; + FT_Incremental object; + + } FT_Incremental_InterfaceRec; + + + /************************************************************************** + * + * @type: + * FT_Incremental_Interface + * + * @description: + * A pointer to an @FT_Incremental_InterfaceRec structure. + * + */ + typedef FT_Incremental_InterfaceRec* FT_Incremental_Interface; + + + /* */ + + +FT_END_HEADER + +#endif /* FTINCREM_H_ */ + + +/* END */ diff --git a/third_party/tlRender-install-Release/include/freetype2/freetype/ftlcdfil.h b/third_party/tlRender-install-Release/include/freetype2/freetype/ftlcdfil.h new file mode 100644 index 00000000..a0a8e9da --- /dev/null +++ b/third_party/tlRender-install-Release/include/freetype2/freetype/ftlcdfil.h @@ -0,0 +1,323 @@ +/**************************************************************************** + * + * ftlcdfil.h + * + * FreeType API for color filtering of subpixel bitmap glyphs + * (specification). + * + * Copyright (C) 2006-2025 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + +#ifndef FTLCDFIL_H_ +#define FTLCDFIL_H_ + +#include +#include + +#ifdef FREETYPE_H +#error "freetype.h of FreeType 1 has been loaded!" +#error "Please fix the directory search order for header files" +#error "so that freetype.h of FreeType 2 is found first." +#endif + + +FT_BEGIN_HEADER + + /************************************************************************** + * + * @section: + * lcd_rendering + * + * @title: + * Subpixel Rendering + * + * @abstract: + * API to control subpixel rendering. + * + * @description: + * FreeType provides two alternative subpixel rendering technologies. + * Should you define `FT_CONFIG_OPTION_SUBPIXEL_RENDERING` in your + * `ftoption.h` file, this enables ClearType-style rendering. + * Otherwise, Harmony LCD rendering is enabled. These technologies are + * controlled differently and API described below, although always + * available, performs its function when appropriate method is enabled + * and does nothing otherwise. + * + * ClearType-style LCD rendering exploits the color-striped structure of + * LCD pixels, increasing the available resolution in the direction of + * the stripe (usually horizontal RGB) by a factor of~3. Using the + * subpixel coverages unfiltered can create severe color fringes + * especially when rendering thin features. Indeed, to produce + * black-on-white text, the nearby color subpixels must be dimmed + * evenly. Therefore, an equalizing 5-tap FIR filter should be applied + * to subpixel coverages regardless of pixel boundaries and should have + * these properties: + * + * 1. It should be symmetrical, like {~a, b, c, b, a~}, to avoid + * any shifts in appearance. + * + * 2. It should be color-balanced, meaning a~+ b~=~c, to reduce color + * fringes by distributing the computed coverage for one subpixel to + * all subpixels equally. + * + * 3. It should be normalized, meaning 2a~+ 2b~+ c~=~1.0 to maintain + * overall brightness. + * + * Boxy 3-tap filter {0, 1/3, 1/3, 1/3, 0} is sharper but is less + * forgiving of non-ideal gamma curves of a screen (and viewing angles), + * beveled filters are fuzzier but more tolerant. + * + * Use the @FT_Library_SetLcdFilter or @FT_Library_SetLcdFilterWeights + * API to specify a low-pass filter, which is then applied to + * subpixel-rendered bitmaps generated through @FT_Render_Glyph. + * + * Harmony LCD rendering is suitable to panels with any regular subpixel + * structure, not just monitors with 3 color striped subpixels, as long + * as the color subpixels have fixed positions relative to the pixel + * center. In this case, each color channel can be rendered separately + * after shifting the outline opposite to the subpixel shift so that the + * coverage maps are aligned. This method is immune to color fringes + * because the shifts do not change integral coverage. + * + * The subpixel geometry must be specified by xy-coordinates for each + * subpixel. By convention they may come in the RGB order: {{-1/3, 0}, + * {0, 0}, {1/3, 0}} for standard RGB striped panel or {{-1/6, 1/4}, + * {-1/6, -1/4}, {1/3, 0}} for a certain PenTile panel. + * + * Use the @FT_Library_SetLcdGeometry API to specify subpixel positions. + * If one follows the RGB order convention, the same order applies to the + * resulting @FT_PIXEL_MODE_LCD and @FT_PIXEL_MODE_LCD_V bitmaps. Note, + * however, that the coordinate frame for the latter must be rotated + * clockwise. Harmony with default LCD geometry is equivalent to + * ClearType with light filter. + * + * As a result of ClearType filtering or Harmony shifts, the resulting + * dimensions of LCD bitmaps can be slightly wider or taller than the + * dimensions the original outline with regard to the pixel grid. + * For example, for @FT_RENDER_MODE_LCD, the filter adds 2~subpixels to + * the left, and 2~subpixels to the right. The bitmap offset values are + * adjusted accordingly, so clients shouldn't need to modify their layout + * and glyph positioning code when enabling the filter. + * + * The ClearType and Harmony rendering is applicable to glyph bitmaps + * rendered through @FT_Render_Glyph, @FT_Load_Glyph, @FT_Load_Char, and + * @FT_Glyph_To_Bitmap, when @FT_RENDER_MODE_LCD or @FT_RENDER_MODE_LCD_V + * is specified. This API does not control @FT_Outline_Render and + * @FT_Outline_Get_Bitmap. + * + * The described algorithms can completely remove color artefacts when + * combined with gamma-corrected alpha blending in linear space. Each of + * the 3~alpha values (subpixels) must by independently used to blend one + * color channel. That is, red alpha blends the red channel of the text + * color with the red channel of the background pixel. + */ + + + /************************************************************************** + * + * @enum: + * FT_LcdFilter + * + * @description: + * A list of values to identify various types of LCD filters. + * + * @values: + * FT_LCD_FILTER_NONE :: + * Do not perform filtering. When used with subpixel rendering, this + * results in sometimes severe color fringes. + * + * FT_LCD_FILTER_DEFAULT :: + * This is a beveled, normalized, and color-balanced five-tap filter + * with weights of [0x08 0x4D 0x56 0x4D 0x08] in 1/256 units. + * + * FT_LCD_FILTER_LIGHT :: + * this is a boxy, normalized, and color-balanced three-tap filter with + * weights of [0x00 0x55 0x56 0x55 0x00] in 1/256 units. + * + * FT_LCD_FILTER_LEGACY :: + * FT_LCD_FILTER_LEGACY1 :: + * This filter corresponds to the original libXft color filter. It + * provides high contrast output but can exhibit really bad color + * fringes if glyphs are not extremely well hinted to the pixel grid. + * This filter is only provided for comparison purposes, and might be + * disabled or stay unsupported in the future. The second value is + * provided for compatibility with FontConfig, which historically used + * different enumeration, sometimes incorrectly forwarded to FreeType. + * + * @since: + * 2.3.0 (`FT_LCD_FILTER_LEGACY1` since 2.6.2) + */ + typedef enum FT_LcdFilter_ + { + FT_LCD_FILTER_NONE = 0, + FT_LCD_FILTER_DEFAULT = 1, + FT_LCD_FILTER_LIGHT = 2, + FT_LCD_FILTER_LEGACY1 = 3, + FT_LCD_FILTER_LEGACY = 16, + + FT_LCD_FILTER_MAX /* do not remove */ + + } FT_LcdFilter; + + + /************************************************************************** + * + * @function: + * FT_Library_SetLcdFilter + * + * @description: + * This function is used to change filter applied to LCD decimated + * bitmaps, like the ones used when calling @FT_Render_Glyph with + * @FT_RENDER_MODE_LCD or @FT_RENDER_MODE_LCD_V. + * + * @input: + * library :: + * A handle to the target library instance. + * + * filter :: + * The filter type. + * + * You can use @FT_LCD_FILTER_NONE here to disable this feature, or + * @FT_LCD_FILTER_DEFAULT to use a default filter that should work well + * on most LCD screens. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * Since 2.10.3 the LCD filtering is enabled with @FT_LCD_FILTER_DEFAULT. + * It is no longer necessary to call this function explicitly except + * to choose a different filter or disable filtering altogether with + * @FT_LCD_FILTER_NONE. + * + * This function does nothing but returns `FT_Err_Unimplemented_Feature` + * if the configuration macro `FT_CONFIG_OPTION_SUBPIXEL_RENDERING` is + * not defined in your build of the library. + * + * @since: + * 2.3.0 + */ + FT_EXPORT( FT_Error ) + FT_Library_SetLcdFilter( FT_Library library, + FT_LcdFilter filter ); + + + /************************************************************************** + * + * @function: + * FT_Library_SetLcdFilterWeights + * + * @description: + * This function can be used to enable LCD filter with custom weights, + * instead of using presets in @FT_Library_SetLcdFilter. + * + * @input: + * library :: + * A handle to the target library instance. + * + * weights :: + * A pointer to an array; the function copies the first five bytes and + * uses them to specify the filter weights in 1/256 units. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * This function does nothing but returns `FT_Err_Unimplemented_Feature` + * if the configuration macro `FT_CONFIG_OPTION_SUBPIXEL_RENDERING` is + * not defined in your build of the library. + * + * LCD filter weights can also be set per face using @FT_Face_Properties + * with @FT_PARAM_TAG_LCD_FILTER_WEIGHTS. + * + * @since: + * 2.4.0 + */ + FT_EXPORT( FT_Error ) + FT_Library_SetLcdFilterWeights( FT_Library library, + unsigned char *weights ); + + + /************************************************************************** + * + * @type: + * FT_LcdFiveTapFilter + * + * @description: + * A typedef for passing the five LCD filter weights to + * @FT_Face_Properties within an @FT_Parameter structure. + * + * @since: + * 2.8 + * + */ +#define FT_LCD_FILTER_FIVE_TAPS 5 + + typedef FT_Byte FT_LcdFiveTapFilter[FT_LCD_FILTER_FIVE_TAPS]; + + + /************************************************************************** + * + * @function: + * FT_Library_SetLcdGeometry + * + * @description: + * This function can be used to modify default positions of color + * subpixels, which controls Harmony LCD rendering. + * + * @input: + * library :: + * A handle to the target library instance. + * + * sub :: + * A pointer to an array of 3 vectors in 26.6 fractional pixel format; + * the function modifies the default values, see the note below. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * Subpixel geometry examples: + * + * - {{-21, 0}, {0, 0}, {21, 0}} is the default, corresponding to 3 color + * stripes shifted by a third of a pixel. This could be an RGB panel. + * + * - {{21, 0}, {0, 0}, {-21, 0}} looks the same as the default but can + * specify a BGR panel instead, while keeping the bitmap in the same + * RGB888 format. + * + * - {{0, 21}, {0, 0}, {0, -21}} is the vertical RGB, but the bitmap + * stays RGB888 as a result. + * + * - {{-11, 16}, {-11, -16}, {22, 0}} is a certain PenTile arrangement. + * + * This function does nothing and returns `FT_Err_Unimplemented_Feature` + * in the context of ClearType-style subpixel rendering when + * `FT_CONFIG_OPTION_SUBPIXEL_RENDERING` is defined in your build of the + * library. + * + * @since: + * 2.10.0 + */ + FT_EXPORT( FT_Error ) + FT_Library_SetLcdGeometry( FT_Library library, + FT_Vector sub[3] ); + + /* */ + + +FT_END_HEADER + +#endif /* FTLCDFIL_H_ */ + + +/* END */ diff --git a/third_party/tlRender-install-Release/include/freetype2/freetype/ftlist.h b/third_party/tlRender-install-Release/include/freetype2/freetype/ftlist.h new file mode 100644 index 00000000..14958b0f --- /dev/null +++ b/third_party/tlRender-install-Release/include/freetype2/freetype/ftlist.h @@ -0,0 +1,296 @@ +/**************************************************************************** + * + * ftlist.h + * + * Generic list support for FreeType (specification). + * + * Copyright (C) 1996-2025 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + + /************************************************************************** + * + * This file implements functions relative to list processing. Its data + * structures are defined in `freetype.h`. + * + */ + + +#ifndef FTLIST_H_ +#define FTLIST_H_ + + +#include + +#ifdef FREETYPE_H +#error "freetype.h of FreeType 1 has been loaded!" +#error "Please fix the directory search order for header files" +#error "so that freetype.h of FreeType 2 is found first." +#endif + + +FT_BEGIN_HEADER + + + /************************************************************************** + * + * @section: + * list_processing + * + * @title: + * List Processing + * + * @abstract: + * Simple management of lists. + * + * @description: + * This section contains various definitions related to list processing + * using doubly-linked nodes. + * + * @order: + * FT_List + * FT_ListNode + * FT_ListRec + * FT_ListNodeRec + * + * FT_List_Add + * FT_List_Insert + * FT_List_Find + * FT_List_Remove + * FT_List_Up + * FT_List_Iterate + * FT_List_Iterator + * FT_List_Finalize + * FT_List_Destructor + * + */ + + + /************************************************************************** + * + * @function: + * FT_List_Find + * + * @description: + * Find the list node for a given listed object. + * + * @input: + * list :: + * A pointer to the parent list. + * data :: + * The address of the listed object. + * + * @return: + * List node. `NULL` if it wasn't found. + */ + FT_EXPORT( FT_ListNode ) + FT_List_Find( FT_List list, + void* data ); + + + /************************************************************************** + * + * @function: + * FT_List_Add + * + * @description: + * Append an element to the end of a list. + * + * @inout: + * list :: + * A pointer to the parent list. + * node :: + * The node to append. + */ + FT_EXPORT( void ) + FT_List_Add( FT_List list, + FT_ListNode node ); + + + /************************************************************************** + * + * @function: + * FT_List_Insert + * + * @description: + * Insert an element at the head of a list. + * + * @inout: + * list :: + * A pointer to parent list. + * node :: + * The node to insert. + */ + FT_EXPORT( void ) + FT_List_Insert( FT_List list, + FT_ListNode node ); + + + /************************************************************************** + * + * @function: + * FT_List_Remove + * + * @description: + * Remove a node from a list. This function doesn't check whether the + * node is in the list! + * + * @input: + * node :: + * The node to remove. + * + * @inout: + * list :: + * A pointer to the parent list. + */ + FT_EXPORT( void ) + FT_List_Remove( FT_List list, + FT_ListNode node ); + + + /************************************************************************** + * + * @function: + * FT_List_Up + * + * @description: + * Move a node to the head/top of a list. Used to maintain LRU lists. + * + * @inout: + * list :: + * A pointer to the parent list. + * node :: + * The node to move. + */ + FT_EXPORT( void ) + FT_List_Up( FT_List list, + FT_ListNode node ); + + + /************************************************************************** + * + * @functype: + * FT_List_Iterator + * + * @description: + * An FT_List iterator function that is called during a list parse by + * @FT_List_Iterate. + * + * @input: + * node :: + * The current iteration list node. + * + * user :: + * A typeless pointer passed to @FT_List_Iterate. Can be used to point + * to the iteration's state. + */ + typedef FT_Error + (*FT_List_Iterator)( FT_ListNode node, + void* user ); + + + /************************************************************************** + * + * @function: + * FT_List_Iterate + * + * @description: + * Parse a list and calls a given iterator function on each element. + * Note that parsing is stopped as soon as one of the iterator calls + * returns a non-zero value. + * + * @input: + * list :: + * A handle to the list. + * iterator :: + * An iterator function, called on each node of the list. + * user :: + * A user-supplied field that is passed as the second argument to the + * iterator. + * + * @return: + * The result (a FreeType error code) of the last iterator call. + */ + FT_EXPORT( FT_Error ) + FT_List_Iterate( FT_List list, + FT_List_Iterator iterator, + void* user ); + + + /************************************************************************** + * + * @functype: + * FT_List_Destructor + * + * @description: + * An @FT_List iterator function that is called during a list + * finalization by @FT_List_Finalize to destroy all elements in a given + * list. + * + * @input: + * system :: + * The current system object. + * + * data :: + * The current object to destroy. + * + * user :: + * A typeless pointer passed to @FT_List_Iterate. It can be used to + * point to the iteration's state. + */ + typedef void + (*FT_List_Destructor)( FT_Memory memory, + void* data, + void* user ); + + + /************************************************************************** + * + * @function: + * FT_List_Finalize + * + * @description: + * Destroy all elements in the list as well as the list itself. + * + * @input: + * list :: + * A handle to the list. + * + * destroy :: + * A list destructor that will be applied to each element of the list. + * Set this to `NULL` if not needed. + * + * memory :: + * The current memory object that handles deallocation. + * + * user :: + * A user-supplied field that is passed as the last argument to the + * destructor. + * + * @note: + * This function expects that all nodes added by @FT_List_Add or + * @FT_List_Insert have been dynamically allocated. + */ + FT_EXPORT( void ) + FT_List_Finalize( FT_List list, + FT_List_Destructor destroy, + FT_Memory memory, + void* user ); + + /* */ + + +FT_END_HEADER + +#endif /* FTLIST_H_ */ + + +/* END */ diff --git a/third_party/tlRender-install-Release/include/freetype2/freetype/ftlogging.h b/third_party/tlRender-install-Release/include/freetype2/freetype/ftlogging.h new file mode 100644 index 00000000..d1551711 --- /dev/null +++ b/third_party/tlRender-install-Release/include/freetype2/freetype/ftlogging.h @@ -0,0 +1,184 @@ +/**************************************************************************** + * + * ftlogging.h + * + * Additional debugging APIs. + * + * Copyright (C) 2020-2025 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + +#ifndef FTLOGGING_H_ +#define FTLOGGING_H_ + + +#include +#include FT_CONFIG_CONFIG_H + + +FT_BEGIN_HEADER + + + /************************************************************************** + * + * @section: + * debugging_apis + * + * @title: + * External Debugging APIs + * + * @abstract: + * Public APIs to control the `FT_DEBUG_LOGGING` macro. + * + * @description: + * This section contains the declarations of public functions that + * enables fine control of what the `FT_DEBUG_LOGGING` macro outputs. + * + */ + + + /************************************************************************** + * + * @function: + * FT_Trace_Set_Level + * + * @description: + * Change the levels of tracing components of FreeType at run time. + * + * @input: + * tracing_level :: + * New tracing value. + * + * @example: + * The following call makes FreeType trace everything but the 'memory' + * component. + * + * ``` + * FT_Trace_Set_Level( "any:7 memory:0" ); + * ``` + * + * @note: + * This function does nothing if compilation option `FT_DEBUG_LOGGING` + * isn't set. + * + * @since: + * 2.11 + * + */ + FT_EXPORT( void ) + FT_Trace_Set_Level( const char* tracing_level ); + + + /************************************************************************** + * + * @function: + * FT_Trace_Set_Default_Level + * + * @description: + * Reset tracing value of FreeType's components to the default value + * (i.e., to the value of the `FT2_DEBUG` environment value or to NULL + * if `FT2_DEBUG` is not set). + * + * @note: + * This function does nothing if compilation option `FT_DEBUG_LOGGING` + * isn't set. + * + * @since: + * 2.11 + * + */ + FT_EXPORT( void ) + FT_Trace_Set_Default_Level( void ); + + + /************************************************************************** + * + * @functype: + * FT_Custom_Log_Handler + * + * @description: + * A function typedef that is used to handle the logging of tracing and + * debug messages on a file system. + * + * @input: + * ft_component :: + * The name of `FT_COMPONENT` from which the current debug or error + * message is produced. + * + * fmt :: + * Actual debug or tracing message. + * + * args:: + * Arguments of debug or tracing messages. + * + * @since: + * 2.11 + * + */ + typedef void + (*FT_Custom_Log_Handler)( const char* ft_component, + const char* fmt, + va_list args ); + + + /************************************************************************** + * + * @function: + * FT_Set_Log_Handler + * + * @description: + * A function to set a custom log handler. + * + * @input: + * handler :: + * New logging function. + * + * @note: + * This function does nothing if compilation option `FT_DEBUG_LOGGING` + * isn't set. + * + * @since: + * 2.11 + * + */ + FT_EXPORT( void ) + FT_Set_Log_Handler( FT_Custom_Log_Handler handler ); + + + /************************************************************************** + * + * @function: + * FT_Set_Default_Log_Handler + * + * @description: + * A function to undo the effect of @FT_Set_Log_Handler, resetting the + * log handler to FreeType's built-in version. + * + * @note: + * This function does nothing if compilation option `FT_DEBUG_LOGGING` + * isn't set. + * + * @since: + * 2.11 + * + */ + FT_EXPORT( void ) + FT_Set_Default_Log_Handler( void ); + + /* */ + + +FT_END_HEADER + +#endif /* FTLOGGING_H_ */ + + +/* END */ diff --git a/third_party/tlRender-install-Release/include/freetype2/freetype/ftlzw.h b/third_party/tlRender-install-Release/include/freetype2/freetype/ftlzw.h new file mode 100644 index 00000000..de14bcc6 --- /dev/null +++ b/third_party/tlRender-install-Release/include/freetype2/freetype/ftlzw.h @@ -0,0 +1,100 @@ +/**************************************************************************** + * + * ftlzw.h + * + * LZW-compressed stream support. + * + * Copyright (C) 2004-2025 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + +#ifndef FTLZW_H_ +#define FTLZW_H_ + +#include + +#ifdef FREETYPE_H +#error "freetype.h of FreeType 1 has been loaded!" +#error "Please fix the directory search order for header files" +#error "so that freetype.h of FreeType 2 is found first." +#endif + + +FT_BEGIN_HEADER + + /************************************************************************** + * + * @section: + * lzw + * + * @title: + * LZW Streams + * + * @abstract: + * Using LZW-compressed font files. + * + * @description: + * In certain builds of the library, LZW compression recognition is + * automatically handled when calling @FT_New_Face or @FT_Open_Face. + * This means that if no font driver is capable of handling the raw + * compressed file, the library will try to open a LZW stream from it and + * re-open the face with it. + * + * The stream implementation is very basic and resets the decompression + * process each time seeking backwards is needed within the stream, + * which significantly undermines the performance. + * + * This section contains the declaration of LZW-specific functions. + * + */ + + /************************************************************************** + * + * @function: + * FT_Stream_OpenLZW + * + * @description: + * Open a new stream to parse LZW-compressed font files. This is mainly + * used to support the compressed `*.pcf.Z` fonts that come with XFree86. + * + * @input: + * stream :: + * The target embedding stream. + * + * source :: + * The source stream. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * The source stream must be opened _before_ calling this function. + * + * Calling the internal function `FT_Stream_Close` on the new stream will + * **not** call `FT_Stream_Close` on the source stream. None of the + * stream objects will be released to the heap. + * + * This function may return `FT_Err_Unimplemented_Feature` if your build + * of FreeType was not compiled with LZW support. + */ + FT_EXPORT( FT_Error ) + FT_Stream_OpenLZW( FT_Stream stream, + FT_Stream source ); + + /* */ + + +FT_END_HEADER + +#endif /* FTLZW_H_ */ + + +/* END */ diff --git a/third_party/tlRender-install-Release/include/freetype2/freetype/ftmac.h b/third_party/tlRender-install-Release/include/freetype2/freetype/ftmac.h new file mode 100644 index 00000000..c5ac4910 --- /dev/null +++ b/third_party/tlRender-install-Release/include/freetype2/freetype/ftmac.h @@ -0,0 +1,289 @@ +/**************************************************************************** + * + * ftmac.h + * + * Additional Mac-specific API. + * + * Copyright (C) 1996-2025 by + * Just van Rossum, David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + +/**************************************************************************** + * + * NOTE: Include this file after `FT_FREETYPE_H` and after any + * Mac-specific headers (because this header uses Mac types such as + * 'Handle', 'FSSpec', 'FSRef', etc.) + * + */ + + +#ifndef FTMAC_H_ +#define FTMAC_H_ + + + + +FT_BEGIN_HEADER + + + /* gcc-3.1 and later can warn about functions tagged as deprecated */ +#ifndef FT_DEPRECATED_ATTRIBUTE +#if defined( __GNUC__ ) && \ + ( ( __GNUC__ >= 4 ) || \ + ( ( __GNUC__ == 3 ) && ( __GNUC_MINOR__ >= 1 ) ) ) +#define FT_DEPRECATED_ATTRIBUTE __attribute__(( deprecated )) +#else +#define FT_DEPRECATED_ATTRIBUTE +#endif +#endif + + + /************************************************************************** + * + * @section: + * mac_specific + * + * @title: + * Mac Specific Interface + * + * @abstract: + * Only available on the Macintosh. + * + * @description: + * The following definitions are only available if FreeType is compiled + * on a Macintosh. + * + */ + + + /************************************************************************** + * + * @function: + * FT_New_Face_From_FOND + * + * @description: + * Create a new face object from a FOND resource. + * + * @inout: + * library :: + * A handle to the library resource. + * + * @input: + * fond :: + * A FOND resource. + * + * face_index :: + * Only supported for the -1 'sanity check' special case. + * + * @output: + * aface :: + * A handle to a new face object. + * + * @return: + * FreeType error code. 0~means success. + * + * @example: + * This function can be used to create @FT_Face objects from fonts that + * are installed in the system as follows. + * + * ``` + * fond = GetResource( 'FOND', fontName ); + * error = FT_New_Face_From_FOND( library, fond, 0, &face ); + * ``` + */ + FT_EXPORT( FT_Error ) + FT_New_Face_From_FOND( FT_Library library, + Handle fond, + FT_Long face_index, + FT_Face *aface ) + FT_DEPRECATED_ATTRIBUTE; + + + /************************************************************************** + * + * @function: + * FT_GetFile_From_Mac_Name + * + * @description: + * Return an FSSpec for the disk file containing the named font. + * + * @input: + * fontName :: + * Mac OS name of the font (e.g., Times New Roman Bold). + * + * @output: + * pathSpec :: + * FSSpec to the file. For passing to @FT_New_Face_From_FSSpec. + * + * face_index :: + * Index of the face. For passing to @FT_New_Face_From_FSSpec. + * + * @return: + * FreeType error code. 0~means success. + */ + FT_EXPORT( FT_Error ) + FT_GetFile_From_Mac_Name( const char* fontName, + FSSpec* pathSpec, + FT_Long* face_index ) + FT_DEPRECATED_ATTRIBUTE; + + + /************************************************************************** + * + * @function: + * FT_GetFile_From_Mac_ATS_Name + * + * @description: + * Return an FSSpec for the disk file containing the named font. + * + * @input: + * fontName :: + * Mac OS name of the font in ATS framework. + * + * @output: + * pathSpec :: + * FSSpec to the file. For passing to @FT_New_Face_From_FSSpec. + * + * face_index :: + * Index of the face. For passing to @FT_New_Face_From_FSSpec. + * + * @return: + * FreeType error code. 0~means success. + */ + FT_EXPORT( FT_Error ) + FT_GetFile_From_Mac_ATS_Name( const char* fontName, + FSSpec* pathSpec, + FT_Long* face_index ) + FT_DEPRECATED_ATTRIBUTE; + + + /************************************************************************** + * + * @function: + * FT_GetFilePath_From_Mac_ATS_Name + * + * @description: + * Return a pathname of the disk file and face index for given font name + * that is handled by ATS framework. + * + * @input: + * fontName :: + * Mac OS name of the font in ATS framework. + * + * @output: + * path :: + * Buffer to store pathname of the file. For passing to @FT_New_Face. + * The client must allocate this buffer before calling this function. + * + * maxPathSize :: + * Lengths of the buffer `path` that client allocated. + * + * face_index :: + * Index of the face. For passing to @FT_New_Face. + * + * @return: + * FreeType error code. 0~means success. + */ + FT_EXPORT( FT_Error ) + FT_GetFilePath_From_Mac_ATS_Name( const char* fontName, + UInt8* path, + UInt32 maxPathSize, + FT_Long* face_index ) + FT_DEPRECATED_ATTRIBUTE; + + + /************************************************************************** + * + * @function: + * FT_New_Face_From_FSSpec + * + * @description: + * Create a new face object from a given resource and typeface index + * using an FSSpec to the font file. + * + * @inout: + * library :: + * A handle to the library resource. + * + * @input: + * spec :: + * FSSpec to the font file. + * + * face_index :: + * The index of the face within the resource. The first face has + * index~0. + * @output: + * aface :: + * A handle to a new face object. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * @FT_New_Face_From_FSSpec is identical to @FT_New_Face except it + * accepts an FSSpec instead of a path. + */ + FT_EXPORT( FT_Error ) + FT_New_Face_From_FSSpec( FT_Library library, + const FSSpec *spec, + FT_Long face_index, + FT_Face *aface ) + FT_DEPRECATED_ATTRIBUTE; + + + /************************************************************************** + * + * @function: + * FT_New_Face_From_FSRef + * + * @description: + * Create a new face object from a given resource and typeface index + * using an FSRef to the font file. + * + * @inout: + * library :: + * A handle to the library resource. + * + * @input: + * spec :: + * FSRef to the font file. + * + * face_index :: + * The index of the face within the resource. The first face has + * index~0. + * @output: + * aface :: + * A handle to a new face object. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * @FT_New_Face_From_FSRef is identical to @FT_New_Face except it accepts + * an FSRef instead of a path. + */ + FT_EXPORT( FT_Error ) + FT_New_Face_From_FSRef( FT_Library library, + const FSRef *ref, + FT_Long face_index, + FT_Face *aface ) + FT_DEPRECATED_ATTRIBUTE; + + /* */ + + +FT_END_HEADER + + +#endif /* FTMAC_H_ */ + + +/* END */ diff --git a/third_party/tlRender-install-Release/include/freetype2/freetype/ftmm.h b/third_party/tlRender-install-Release/include/freetype2/freetype/ftmm.h new file mode 100644 index 00000000..ff0bbab5 --- /dev/null +++ b/third_party/tlRender-install-Release/include/freetype2/freetype/ftmm.h @@ -0,0 +1,890 @@ +/**************************************************************************** + * + * ftmm.h + * + * FreeType variation font interface (specification). + * + * Copyright (C) 1996-2025 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + +#ifndef FTMM_H_ +#define FTMM_H_ + +#include + +#ifdef FREETYPE_H +#error "freetype.h of FreeType 1 has been loaded!" +#error "Please fix the directory search order for header files" +#error "so that freetype.h of FreeType 2 is found first." +#endif + + +FT_BEGIN_HEADER + + + /************************************************************************** + * + * @section: + * multiple_masters + * + * @title: + * OpenType Font Variations, TrueType GX, and Adobe MM Fonts + * + * @abstract: + * How to manage variable fonts with multiple design axes. + * + * @description: + * The following types and functions manage OpenType Font Variations, + * Adobe Multiple Master (MM) fonts, and Apple TrueType GX fonts. These + * formats have in common that they allow the selection of specific + * design instances by setting design coordinates for one or more axes + * like font weight or width. + * + * For historical reasons there are two interfaces. The first, older one + * can be used with Adobe MM fonts only, and the second, newer one is a + * unified interface that handles all three font formats. However, some + * differences remain and are documented accordingly; in particular, + * Adobe MM fonts don't have named instances (see below). + * + * For Adobe MM fonts, macro @FT_IS_SFNT returns false. For TrueType GX + * and OpenType Font Variations, it returns true. + * + * We use mostly the terminology of the OpenType standard. Here are some + * important technical terms. + * + * * A 'named instance' is a tuple of design coordinates that has a + * string ID (i.e., an index into the font's 'name' table) associated + * with it. The font can tell the user that, for example, + * [Weight=700,Width=110] is 'Bold'. Another name for 'named instance' + * is 'named style'. + * + * Adobe MM fonts don't have named instances. + * + * * The 'default instance' of a variation font is that instance for + * which the nth axis coordinate is equal to the nth default axis + * coordinate (i.e., `axis[n].def` as specified in the @FT_MM_Var + * structure), with~n covering all axes. In TrueType GX and OpenType + * Font Variations, the default instance is explicitly given. In Adobe + * MM fonts, the `WeightVector` entry as found in the font file is + * taken as the default instance. + * + * For TrueType GX and OpenType Font Variations, FreeType synthesizes + * a named instance for the default instance if the font does not + * contain such an entry. + * + * * 'Design coordinates' are the axis values found in a variation font + * file. Their meaning is specified by the font designer and the + * values are rather arbitrary. + * + * For example, the 'weight' axis in design coordinates might vary + * between 100 (thin) and 900 (heavy) in font~A, while font~B + * contains values between 400 (normal) and 800 (extra bold). + * + * * 'Normalized coordinates' are design coordinates mapped to a standard + * range; they are also called 'blend coordinates'. + * + * For TrueType GX and OpenType Font Variations, the range is [-1;1], + * with the minimum mapped to value~-1, the default mapped to + * value~0, and the maximum mapped to value~1, and all other + * coordinates mapped to intervening points. Please look up the + * [OpenType + * specification](https://learn.microsoft.com/en-us/typography/opentype/spec/otvaroverview) + * on how this mapping works in detail. + * + * For Adobe MM fonts, this standard range is [0;1], with the minimum + * mapped to value~0 and the maximum mapped to value~1, and all other + * coordinates mapped to intervening points. Please look up [Adobe + * TechNote + * #5015](https://adobe-type-tools.github.io/font-tech-notes/pdfs/5015.Type1_Supp.pdf) + * on how this mapping works in detail. + * + * Assuming that the two fonts in the previous example are OpenType + * Font Variations, both font~A's [100;900] and font~B's [400;800] + * coordinate ranges get mapped to [-1;1]. + */ + + + /************************************************************************** + * + * @enum: + * T1_MAX_MM_XXX + * + * @description: + * Adobe MM font limits as defined in their specifications. + * + * @values: + * T1_MAX_MM_AXIS :: + * The maximum number of Adobe MM font axes. + * + * T1_MAX_MM_DESIGNS :: + * The maximum number of Adobe MM font designs. + * + * T1_MAX_MM_MAP_POINTS :: + * The maximum number of elements in a design map. + * + */ +#define T1_MAX_MM_AXIS 4 +#define T1_MAX_MM_DESIGNS 16 +#define T1_MAX_MM_MAP_POINTS 20 + + + /************************************************************************** + * + * @struct: + * FT_MM_Axis + * + * @description: + * A structure to model a given axis in design space for Adobe MM fonts. + * + * This structure can't be used with TrueType GX or OpenType Font + * Variations. + * + * @fields: + * name :: + * The axis's name. + * + * minimum :: + * The axis's minimum design coordinate. + * + * maximum :: + * The axis's maximum design coordinate. + */ + typedef struct FT_MM_Axis_ + { + FT_String* name; + FT_Long minimum; + FT_Long maximum; + + } FT_MM_Axis; + + + /************************************************************************** + * + * @struct: + * FT_Multi_Master + * + * @description: + * A structure to model the axes and space of an Adobe MM font. + * + * This structure can't be used with TrueType GX or OpenType Font + * Variations. + * + * @fields: + * num_axis :: + * Number of axes. Cannot exceed~4. + * + * num_designs :: + * Number of designs; should be normally `2^num_axis` even though the + * Type~1 specification strangely allows for intermediate designs to be + * present. This number cannot exceed~16. + * + * axis :: + * A table of axis descriptors. + */ + typedef struct FT_Multi_Master_ + { + FT_UInt num_axis; + FT_UInt num_designs; + FT_MM_Axis axis[T1_MAX_MM_AXIS]; + + } FT_Multi_Master; + + + /************************************************************************** + * + * @struct: + * FT_Var_Axis + * + * @description: + * A structure to model a given axis in design space for Adobe MM fonts, + * TrueType GX, and OpenType Font Variations. + * + * @fields: + * name :: + * The axis's name. Not always meaningful for TrueType GX or OpenType + * Font Variations. + * + * minimum :: + * The axis's minimum design coordinate. + * + * def :: + * The axis's default design coordinate. FreeType computes meaningful + * default values for Adobe MM fonts. + * + * maximum :: + * The axis's maximum design coordinate. + * + * tag :: + * The axis's tag (the equivalent to 'name' for TrueType GX and + * OpenType Font Variations). FreeType provides default values for + * Adobe MM fonts if possible. + * + * strid :: + * The axis name entry in the font's 'name' table. This is another + * (and often better) version of the 'name' field for TrueType GX or + * OpenType Font Variations. Not meaningful for Adobe MM fonts. + * + * @note: + * The fields `minimum`, `def`, and `maximum` are 16.16 fractional values + * for TrueType GX and OpenType Font Variations. For Adobe MM fonts, the + * values are whole numbers (i.e., the fractional part is zero). + */ + typedef struct FT_Var_Axis_ + { + FT_String* name; + + FT_Fixed minimum; + FT_Fixed def; + FT_Fixed maximum; + + FT_ULong tag; + FT_UInt strid; + + } FT_Var_Axis; + + + /************************************************************************** + * + * @struct: + * FT_Var_Named_Style + * + * @description: + * A structure to model a named instance in a TrueType GX or OpenType + * Font Variations. + * + * This structure can't be used for Adobe MM fonts. + * + * @fields: + * coords :: + * The design coordinates for this instance. This is an array with one + * entry for each axis. + * + * strid :: + * An index into the 'name' table identifying this instance. + * + * psid :: + * An index into the 'name' table identifying a PostScript name for + * this instance. Value 0xFFFF indicates a missing entry. + */ + typedef struct FT_Var_Named_Style_ + { + FT_Fixed* coords; + FT_UInt strid; + FT_UInt psid; /* since 2.7.1 */ + + } FT_Var_Named_Style; + + + /************************************************************************** + * + * @struct: + * FT_MM_Var + * + * @description: + * A structure to model the axes and space of Adobe MM fonts, TrueType + * GX, or OpenType Font Variations. + * + * Some fields are specific to one format and not to the others. + * + * @fields: + * num_axis :: + * The number of axes. The maximum value is~4 for Adobe MM fonts; no + * limit in TrueType GX or OpenType Font Variations. + * + * num_designs :: + * The number of designs; should be normally `2^num_axis` for Adobe MM + * fonts. Not meaningful for TrueType GX or OpenType Font Variations + * (where every glyph could have a different number of designs). + * + * num_namedstyles :: + * The number of named instances. For Adobe MM fonts, this value is + * always zero. + * + * axis :: + * An axis descriptor table. TrueType GX and OpenType Font Variations + * contain slightly more data than Adobe MM fonts. Memory management + * of this pointer is done internally by FreeType. + * + * namedstyle :: + * An array of named instances. Only meaningful for TrueType GX and + * OpenType Font Variations. Memory management of this pointer is done + * internally by FreeType. + */ + typedef struct FT_MM_Var_ + { + FT_UInt num_axis; + FT_UInt num_designs; + FT_UInt num_namedstyles; + FT_Var_Axis* axis; + FT_Var_Named_Style* namedstyle; + + } FT_MM_Var; + + + /************************************************************************** + * + * @function: + * FT_Get_Multi_Master + * + * @description: + * Retrieve a variation descriptor of a given Adobe MM font. + * + * This function can't be used with TrueType GX or OpenType Font + * Variations. + * + * @input: + * face :: + * A handle to the source face. + * + * @output: + * amaster :: + * The Adobe MM font's variation descriptor. + * + * @return: + * FreeType error code. 0~means success. + */ + FT_EXPORT( FT_Error ) + FT_Get_Multi_Master( FT_Face face, + FT_Multi_Master *amaster ); + + + /************************************************************************** + * + * @function: + * FT_Get_MM_Var + * + * @description: + * Retrieve a variation descriptor for a given font. + * + * This function works with all supported variation formats. + * + * @input: + * face :: + * A handle to the source face. + * + * @output: + * amaster :: + * The variation descriptor. Allocates a data structure, which the + * user must deallocate with a call to @FT_Done_MM_Var after use. + * + * @return: + * FreeType error code. 0~means success. + */ + FT_EXPORT( FT_Error ) + FT_Get_MM_Var( FT_Face face, + FT_MM_Var* *amaster ); + + + /************************************************************************** + * + * @function: + * FT_Done_MM_Var + * + * @description: + * Free the memory allocated by @FT_Get_MM_Var. + * + * @input: + * library :: + * A handle of the face's parent library object that was used in the + * call to @FT_Get_MM_Var to create `amaster`. + * + * @return: + * FreeType error code. 0~means success. + */ + FT_EXPORT( FT_Error ) + FT_Done_MM_Var( FT_Library library, + FT_MM_Var *amaster ); + + + /************************************************************************** + * + * @function: + * FT_Set_MM_Design_Coordinates + * + * @description: + * For Adobe MM fonts, choose an interpolated font design through design + * coordinates. + * + * This function can't be used with TrueType GX or OpenType Font + * Variations. + * + * @inout: + * face :: + * A handle to the source face. + * + * @input: + * num_coords :: + * The number of available design coordinates. If it is larger than + * the number of axes, ignore the excess values. If it is smaller than + * the number of axes, use default values for the remaining axes. + * + * coords :: + * An array of design coordinates. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * [Since 2.8.1] To reset all axes to the default values, call the + * function with `num_coords` set to zero and `coords` set to `NULL`. + * + * [Since 2.9] If `num_coords` is larger than zero, this function sets + * the @FT_FACE_FLAG_VARIATION bit in @FT_Face's `face_flags` field + * (i.e., @FT_IS_VARIATION returns true). If `num_coords` is zero, this + * bit flag gets unset. + */ + FT_EXPORT( FT_Error ) + FT_Set_MM_Design_Coordinates( FT_Face face, + FT_UInt num_coords, + FT_Long* coords ); + + + /************************************************************************** + * + * @function: + * FT_Set_Var_Design_Coordinates + * + * @description: + * Choose an interpolated font design through design coordinates. + * + * This function works with all supported variation formats. + * + * @inout: + * face :: + * A handle to the source face. + * + * @input: + * num_coords :: + * The number of available design coordinates. If it is larger than + * the number of axes, ignore the excess values. If it is smaller than + * the number of axes, use default values for the remaining axes. + * + * coords :: + * An array of design coordinates. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * The design coordinates are 16.16 fractional values for TrueType GX and + * OpenType Font Variations. For Adobe MM fonts, the values are supposed + * to be whole numbers (i.e., the fractional part is zero). + * + * [Since 2.8.1] To reset all axes to the default values, call the + * function with `num_coords` set to zero and `coords` set to `NULL`. + * [Since 2.9] 'Default values' means the currently selected named + * instance (or the base font if no named instance is selected). + * + * [Since 2.9] If `num_coords` is larger than zero, this function sets + * the @FT_FACE_FLAG_VARIATION bit in @FT_Face's `face_flags` field + * (i.e., @FT_IS_VARIATION returns true). If `num_coords` is zero, this + * bit flag gets unset. + * + * [Since 2.14] This function also sets the @FT_FACE_FLAG_VARIATION bit + * in @FT_Face's `face_flags` field (i.e., @FT_IS_VARIATION returns + * true) if any of the provided coordinates is different from the face's + * default value for the corresponding axis, that is, the set up face is + * not at its default position. + */ + FT_EXPORT( FT_Error ) + FT_Set_Var_Design_Coordinates( FT_Face face, + FT_UInt num_coords, + FT_Fixed* coords ); + + + /************************************************************************** + * + * @function: + * FT_Get_Var_Design_Coordinates + * + * @description: + * Get the design coordinates of the currently selected interpolated + * font. + * + * This function works with all supported variation formats. + * + * @input: + * face :: + * A handle to the source face. + * + * num_coords :: + * The number of design coordinates to retrieve. If it is larger than + * the number of axes, set the excess values to~0. + * + * @output: + * coords :: + * The design coordinates array, which must be allocated by the user. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * The design coordinates are 16.16 fractional values for TrueType GX and + * OpenType Font Variations. For Adobe MM fonts, the values are whole + * numbers (i.e., the fractional part is zero). + * + * @since: + * 2.7.1 + */ + FT_EXPORT( FT_Error ) + FT_Get_Var_Design_Coordinates( FT_Face face, + FT_UInt num_coords, + FT_Fixed* coords ); + + + /************************************************************************** + * + * @function: + * FT_Set_MM_Blend_Coordinates + * + * @description: + * Choose an interpolated font design through normalized coordinates. + * + * This function works with all supported variation formats. + * + * @inout: + * face :: + * A handle to the source face. + * + * @input: + * num_coords :: + * The number of available design coordinates. If it is larger than + * the number of axes, ignore the excess values. If it is smaller than + * the number of axes, use default values for the remaining axes. + * + * coords :: + * The normalized coordinates array. Each element is a 16.16 + * fractional value and must be between 0 and 1.0 for Adobe MM fonts, + * and between -1.0 and 1.0 for TrueType GX and OpenType Font + * Variations. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * [Since 2.8.1] To reset all axes to the default values, call the + * function with `num_coords` set to zero and `coords` set to `NULL`. + * [Since 2.9] 'Default values' means the currently selected named + * instance (or the base font if no named instance is selected). + * + * [Since 2.9] If `num_coords` is larger than zero, this function sets + * the @FT_FACE_FLAG_VARIATION bit in @FT_Face's `face_flags` field + * (i.e., @FT_IS_VARIATION returns true). If `num_coords` is zero, this + * bit flag gets unset. + * + * [Since 2.14] This function also sets the @FT_FACE_FLAG_VARIATION bit + * in @FT_Face's `face_flags` field (i.e., @FT_IS_VARIATION returns + * true) if any of the provided coordinates is different from the face's + * default value for the corresponding axis, that is, the set up face is + * not at its default position. + */ + FT_EXPORT( FT_Error ) + FT_Set_MM_Blend_Coordinates( FT_Face face, + FT_UInt num_coords, + FT_Fixed* coords ); + + + /************************************************************************** + * + * @function: + * FT_Get_MM_Blend_Coordinates + * + * @description: + * Get the normalized coordinates of the currently selected interpolated + * font. + * + * This function works with all supported variation formats. + * + * @input: + * face :: + * A handle to the source face. + * + * num_coords :: + * The number of normalized coordinates to retrieve. If it is larger + * than the number of axes, set the excess values to~0.5 for Adobe MM + * fonts, and to~0 for TrueType GX and OpenType Font Variations. + * + * @output: + * coords :: + * The normalized coordinates array (as 16.16 fractional values), which + * must be allocated by the user. + * + * @return: + * FreeType error code. 0~means success. + * + * @since: + * 2.7.1 + */ + FT_EXPORT( FT_Error ) + FT_Get_MM_Blend_Coordinates( FT_Face face, + FT_UInt num_coords, + FT_Fixed* coords ); + + + /************************************************************************** + * + * @function: + * FT_Set_Var_Blend_Coordinates + * + * @description: + * This is another name of @FT_Set_MM_Blend_Coordinates. + */ + FT_EXPORT( FT_Error ) + FT_Set_Var_Blend_Coordinates( FT_Face face, + FT_UInt num_coords, + FT_Fixed* coords ); + + + /************************************************************************** + * + * @function: + * FT_Get_Var_Blend_Coordinates + * + * @description: + * This is another name of @FT_Get_MM_Blend_Coordinates. + * + * @since: + * 2.7.1 + */ + FT_EXPORT( FT_Error ) + FT_Get_Var_Blend_Coordinates( FT_Face face, + FT_UInt num_coords, + FT_Fixed* coords ); + + + /************************************************************************** + * + * @function: + * FT_Set_MM_WeightVector + * + * @description: + * For Adobe MM fonts, choose an interpolated font design by directly + * setting the weight vector. + * + * This function can't be used with TrueType GX or OpenType Font + * Variations. + * + * @inout: + * face :: + * A handle to the source face. + * + * @input: + * len :: + * The length of the weight vector array. If it is larger than the + * number of designs, the extra values are ignored. If it is less than + * the number of designs, the remaining values are set to zero. + * + * weightvector :: + * An array representing the weight vector. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * Adobe MM fonts limit the number of designs, and thus the length of the + * weight vector, to 16~elements. + * + * If `len` is larger than zero, this function sets the + * @FT_FACE_FLAG_VARIATION bit in @FT_Face's `face_flags` field (i.e., + * @FT_IS_VARIATION returns true). If `len` is zero, this bit flag is + * unset and the weight vector array is reset to the default values. + * + * The Adobe documentation also states that the values in the + * `WeightVector` array must total 1.0 +/-~0.001. In practice this does + * not seem to be enforced, so is not enforced here, either. + * + * @since: + * 2.10 + */ + FT_EXPORT( FT_Error ) + FT_Set_MM_WeightVector( FT_Face face, + FT_UInt len, + FT_Fixed* weightvector ); + + + /************************************************************************** + * + * @function: + * FT_Get_MM_WeightVector + * + * @description: + * For Adobe MM fonts, retrieve the current weight vector of the font. + * + * This function can't be used with TrueType GX or OpenType Font + * Variations. + * + * @inout: + * face :: + * A handle to the source face. + * + * len :: + * A pointer to the size of the array to be filled. If the size of the + * array is less than the number of designs, `FT_Err_Invalid_Argument` + * is returned, and `len` is set to the required size (the number of + * designs). If the size of the array is greater than the number of + * designs, the remaining entries are set to~0. On successful + * completion, `len` is set to the number of designs (i.e., the number + * of values written to the array). + * + * @output: + * weightvector :: + * An array to be filled; it must be allocated by the user. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * Adobe MM fonts limit the number of designs, and thus the length of the + * weight vector, to~16 elements. + * + * @since: + * 2.10 + */ + FT_EXPORT( FT_Error ) + FT_Get_MM_WeightVector( FT_Face face, + FT_UInt* len, + FT_Fixed* weightvector ); + + + /************************************************************************** + * + * @enum: + * FT_VAR_AXIS_FLAG_XXX + * + * @description: + * A list of bit flags used in the return value of + * @FT_Get_Var_Axis_Flags. + * + * @values: + * FT_VAR_AXIS_FLAG_HIDDEN :: + * The variation axis should not be exposed to user interfaces. + * + * @since: + * 2.8.1 + */ +#define FT_VAR_AXIS_FLAG_HIDDEN 1 + + + /************************************************************************** + * + * @function: + * FT_Get_Var_Axis_Flags + * + * @description: + * Get the 'flags' field of an OpenType Variation Axis Record. + * + * Not meaningful for Adobe MM fonts (`*flags` is always zero). + * + * @input: + * master :: + * The variation descriptor. + * + * axis_index :: + * The index of the requested variation axis. + * + * @output: + * flags :: + * The 'flags' field. See @FT_VAR_AXIS_FLAG_XXX for possible values. + * + * @return: + * FreeType error code. 0~means success. + * + * @since: + * 2.8.1 + */ + FT_EXPORT( FT_Error ) + FT_Get_Var_Axis_Flags( FT_MM_Var* master, + FT_UInt axis_index, + FT_UInt* flags ); + + + /************************************************************************** + * + * @function: + * FT_Set_Named_Instance + * + * @description: + * Set or change the current named instance. + * + * @input: + * face :: + * A handle to the source face. + * + * instance_index :: + * The index of the requested instance, starting with value~1. If set + * to value~0, FreeType switches to font access without a named + * instance. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * The function uses the value of `instance_index` to set bits 16-30 of + * the face's `face_index` field. It also resets any variation applied + * to the font, and the @FT_FACE_FLAG_VARIATION bit of the face's + * `face_flags` field gets reset to zero (i.e., @FT_IS_VARIATION returns + * false). + * + * For Adobe MM fonts, this function resets the current face to the + * default instance. + * + * @since: + * 2.9 + */ + FT_EXPORT( FT_Error ) + FT_Set_Named_Instance( FT_Face face, + FT_UInt instance_index ); + + + /************************************************************************** + * + * @function: + * FT_Get_Default_Named_Instance + * + * @description: + * Retrieve the index of the default named instance, to be used with + * @FT_Set_Named_Instance. + * + * FreeType synthesizes a named instance for the default instance if the + * font does not contain such an entry. + * + * @input: + * face :: + * A handle to the source face. + * + * @output: + * instance_index :: + * The index of the default named instance. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * For Adobe MM fonts, this function always returns zero for + * `instance_index`. + * + * @since: + * 2.13.1 + */ + FT_EXPORT( FT_Error ) + FT_Get_Default_Named_Instance( FT_Face face, + FT_UInt *instance_index ); + + /* */ + + +FT_END_HEADER + +#endif /* FTMM_H_ */ + + +/* END */ diff --git a/third_party/tlRender-install-Release/include/freetype2/freetype/ftmodapi.h b/third_party/tlRender-install-Release/include/freetype2/freetype/ftmodapi.h new file mode 100644 index 00000000..2669e4a0 --- /dev/null +++ b/third_party/tlRender-install-Release/include/freetype2/freetype/ftmodapi.h @@ -0,0 +1,807 @@ +/**************************************************************************** + * + * ftmodapi.h + * + * FreeType modules public interface (specification). + * + * Copyright (C) 1996-2025 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + +#ifndef FTMODAPI_H_ +#define FTMODAPI_H_ + + +#include + +#ifdef FREETYPE_H +#error "freetype.h of FreeType 1 has been loaded!" +#error "Please fix the directory search order for header files" +#error "so that freetype.h of FreeType 2 is found first." +#endif + + +FT_BEGIN_HEADER + + + /************************************************************************** + * + * @section: + * module_management + * + * @title: + * Module Management + * + * @abstract: + * How to add, upgrade, remove, and control modules from FreeType. + * + * @description: + * The definitions below are used to manage modules within FreeType. + * Internal and external modules can be added, upgraded, and removed at + * runtime. For example, an alternative renderer or proprietary font + * driver can be registered and prioritized. Additionally, some module + * properties can also be controlled. + * + * Here is a list of existing values of the `module_name` field in the + * @FT_Module_Class structure. + * + * ``` + * autofitter + * bdf + * cff + * gxvalid + * otvalid + * pcf + * pfr + * psaux + * pshinter + * psnames + * raster1 + * sfnt + * smooth + * truetype + * type1 + * type42 + * t1cid + * winfonts + * ``` + * + * Note that the FreeType Cache sub-system is not a FreeType module. + * + * @order: + * FT_Module + * FT_Module_Constructor + * FT_Module_Destructor + * FT_Module_Requester + * FT_Module_Class + * + * FT_Add_Module + * FT_Get_Module + * FT_Remove_Module + * FT_Add_Default_Modules + * + * FT_FACE_DRIVER_NAME + * FT_Property_Set + * FT_Property_Get + * FT_Set_Default_Properties + * + * FT_New_Library + * FT_Done_Library + * FT_Reference_Library + * + * FT_Renderer + * FT_Renderer_Class + * + * FT_Get_Renderer + * FT_Set_Renderer + * + * FT_Set_Debug_Hook + * + */ + + + /* module bit flags */ +#define FT_MODULE_FONT_DRIVER 1 /* this module is a font driver */ +#define FT_MODULE_RENDERER 2 /* this module is a renderer */ +#define FT_MODULE_HINTER 4 /* this module is a glyph hinter */ +#define FT_MODULE_STYLER 8 /* this module is a styler */ + +#define FT_MODULE_DRIVER_SCALABLE 0x100 /* the driver supports */ + /* scalable fonts */ +#define FT_MODULE_DRIVER_NO_OUTLINES 0x200 /* the driver does not */ + /* support vector outlines */ +#define FT_MODULE_DRIVER_HAS_HINTER 0x400 /* the driver provides its */ + /* own hinter */ +#define FT_MODULE_DRIVER_HINTS_LIGHTLY 0x800 /* the driver's hinter */ + /* produces LIGHT hints */ + + + /* deprecated values */ +#define ft_module_font_driver FT_MODULE_FONT_DRIVER +#define ft_module_renderer FT_MODULE_RENDERER +#define ft_module_hinter FT_MODULE_HINTER +#define ft_module_styler FT_MODULE_STYLER + +#define ft_module_driver_scalable FT_MODULE_DRIVER_SCALABLE +#define ft_module_driver_no_outlines FT_MODULE_DRIVER_NO_OUTLINES +#define ft_module_driver_has_hinter FT_MODULE_DRIVER_HAS_HINTER +#define ft_module_driver_hints_lightly FT_MODULE_DRIVER_HINTS_LIGHTLY + + + typedef FT_Pointer FT_Module_Interface; + + + /************************************************************************** + * + * @functype: + * FT_Module_Constructor + * + * @description: + * A function used to initialize (not create) a new module object. + * + * @input: + * module :: + * The module to initialize. + */ + typedef FT_Error + (*FT_Module_Constructor)( FT_Module module ); + + + /************************************************************************** + * + * @functype: + * FT_Module_Destructor + * + * @description: + * A function used to finalize (not destroy) a given module object. + * + * @input: + * module :: + * The module to finalize. + */ + typedef void + (*FT_Module_Destructor)( FT_Module module ); + + + /************************************************************************** + * + * @functype: + * FT_Module_Requester + * + * @description: + * A function used to query a given module for a specific interface. + * + * @input: + * module :: + * The module to be searched. + * + * name :: + * The name of the interface in the module. + */ + typedef FT_Module_Interface + (*FT_Module_Requester)( FT_Module module, + const char* name ); + + + /************************************************************************** + * + * @struct: + * FT_Module_Class + * + * @description: + * The module class descriptor. While being a public structure necessary + * for FreeType's module bookkeeping, most of the fields are essentially + * internal, not to be used directly by an application. + * + * @fields: + * module_flags :: + * Bit flags describing the module. + * + * module_size :: + * The size of one module object/instance in bytes. + * + * module_name :: + * The name of the module. + * + * module_version :: + * The version, as a 16.16 fixed number (major.minor). + * + * module_requires :: + * The version of FreeType this module requires, as a 16.16 fixed + * number (major.minor). Starts at version 2.0, i.e., 0x20000. + * + * module_interface :: + * A typeless pointer to a structure (which varies between different + * modules) that holds the module's interface functions. This is + * essentially what `get_interface` returns. + * + * module_init :: + * The initializing function. + * + * module_done :: + * The finalizing function. + * + * get_interface :: + * The interface requesting function. + */ + typedef struct FT_Module_Class_ + { + FT_ULong module_flags; + FT_Long module_size; + const FT_String* module_name; + FT_Fixed module_version; + FT_Fixed module_requires; + + const void* module_interface; + + FT_Module_Constructor module_init; + FT_Module_Destructor module_done; + FT_Module_Requester get_interface; + + } FT_Module_Class; + + + /************************************************************************** + * + * @function: + * FT_Add_Module + * + * @description: + * Add a new module to a given library instance. + * + * @inout: + * library :: + * A handle to the library object. + * + * @input: + * clazz :: + * A pointer to class descriptor for the module. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * An error will be returned if a module already exists by that name, or + * if the module requires a version of FreeType that is too great. + */ + FT_EXPORT( FT_Error ) + FT_Add_Module( FT_Library library, + const FT_Module_Class* clazz ); + + + /************************************************************************** + * + * @function: + * FT_Get_Module + * + * @description: + * Find a module by its name. + * + * @input: + * library :: + * A handle to the library object. + * + * module_name :: + * The module's name (as an ASCII string). + * + * @return: + * A module handle. 0~if none was found. + * + * @note: + * FreeType's internal modules aren't documented very well, and you + * should look up the source code for details. + */ + FT_EXPORT( FT_Module ) + FT_Get_Module( FT_Library library, + const char* module_name ); + + + /************************************************************************** + * + * @function: + * FT_Remove_Module + * + * @description: + * Remove a given module from a library instance. + * + * @inout: + * library :: + * A handle to a library object. + * + * @input: + * module :: + * A handle to a module object. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * The module object is destroyed by the function in case of success. + */ + FT_EXPORT( FT_Error ) + FT_Remove_Module( FT_Library library, + FT_Module module ); + + + /************************************************************************** + * + * @macro: + * FT_FACE_DRIVER_NAME + * + * @description: + * A macro that retrieves the name of a font driver from a face object. + * + * @note: + * The font driver name is a valid `module_name` for @FT_Property_Set + * and @FT_Property_Get. This is not the same as @FT_Get_Font_Format. + * + * @since: + * 2.11 + * + */ +#define FT_FACE_DRIVER_NAME( face ) \ + ( ( *FT_REINTERPRET_CAST( FT_Module_Class**, \ + ( face )->driver ) )->module_name ) + + + /************************************************************************** + * + * @function: + * FT_Property_Set + * + * @description: + * Set a property for a given module. + * + * @input: + * library :: + * A handle to the library the module is part of. + * + * module_name :: + * The module name. + * + * property_name :: + * The property name. Properties are described in section + * @properties. + * + * Note that only a few modules have properties. + * + * value :: + * A generic pointer to a variable or structure that gives the new + * value of the property. The exact definition of `value` is + * dependent on the property; see section @properties. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * If `module_name` isn't a valid module name, or `property_name` + * doesn't specify a valid property, or if `value` doesn't represent a + * valid value for the given property, an error is returned. + * + * The following example sets property 'bar' (a simple integer) in + * module 'foo' to value~1. + * + * ``` + * FT_UInt bar; + * + * + * bar = 1; + * FT_Property_Set( library, "foo", "bar", &bar ); + * ``` + * + * Note that the FreeType Cache sub-system doesn't recognize module + * property changes. To avoid glyph lookup confusion within the cache + * you should call @FTC_Manager_Reset to completely flush the cache if a + * module property gets changed after @FTC_Manager_New has been called. + * + * It is not possible to set properties of the FreeType Cache sub-system + * itself with FT_Property_Set; use @FTC_Property_Set instead. + * + * @since: + * 2.4.11 + * + */ + FT_EXPORT( FT_Error ) + FT_Property_Set( FT_Library library, + const FT_String* module_name, + const FT_String* property_name, + const void* value ); + + + /************************************************************************** + * + * @function: + * FT_Property_Get + * + * @description: + * Get a module's property value. + * + * @input: + * library :: + * A handle to the library the module is part of. + * + * module_name :: + * The module name. + * + * property_name :: + * The property name. Properties are described in section + * @properties. + * + * @inout: + * value :: + * A generic pointer to a variable or structure that gives the value + * of the property. The exact definition of `value` is dependent on + * the property; see section @properties. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * If `module_name` isn't a valid module name, or `property_name` + * doesn't specify a valid property, or if `value` doesn't represent a + * valid value for the given property, an error is returned. + * + * The following example gets property 'baz' (a range) in module 'foo'. + * + * ``` + * typedef range_ + * { + * FT_Int32 min; + * FT_Int32 max; + * + * } range; + * + * range baz; + * + * + * FT_Property_Get( library, "foo", "baz", &baz ); + * ``` + * + * It is not possible to retrieve properties of the FreeType Cache + * sub-system with FT_Property_Get; use @FTC_Property_Get instead. + * + * @since: + * 2.4.11 + * + */ + FT_EXPORT( FT_Error ) + FT_Property_Get( FT_Library library, + const FT_String* module_name, + const FT_String* property_name, + void* value ); + + + /************************************************************************** + * + * @function: + * FT_Set_Default_Properties + * + * @description: + * If compilation option `FT_CONFIG_OPTION_ENVIRONMENT_PROPERTIES` is + * set, this function reads the `FREETYPE_PROPERTIES` environment + * variable to control driver properties. See section @properties for + * more. + * + * If the compilation option is not set, this function does nothing. + * + * `FREETYPE_PROPERTIES` has the following syntax form (broken here into + * multiple lines for better readability). + * + * ``` + * + * ':' + * '=' + * + * ':' + * '=' + * ... + * ``` + * + * Example: + * + * ``` + * FREETYPE_PROPERTIES=truetype:interpreter-version=35 \ + * cff:no-stem-darkening=0 + * ``` + * + * @inout: + * library :: + * A handle to a new library object. + * + * @since: + * 2.8 + */ + FT_EXPORT( void ) + FT_Set_Default_Properties( FT_Library library ); + + + /************************************************************************** + * + * @function: + * FT_Reference_Library + * + * @description: + * A counter gets initialized to~1 at the time an @FT_Library structure + * is created. This function increments the counter. @FT_Done_Library + * then only destroys a library if the counter is~1, otherwise it simply + * decrements the counter. + * + * This function helps in managing life-cycles of structures that + * reference @FT_Library objects. + * + * @input: + * library :: + * A handle to a target library object. + * + * @return: + * FreeType error code. 0~means success. + * + * @since: + * 2.4.2 + */ + FT_EXPORT( FT_Error ) + FT_Reference_Library( FT_Library library ); + + + /************************************************************************** + * + * @function: + * FT_New_Library + * + * @description: + * This function is used to create a new FreeType library instance from a + * given memory object. It is thus possible to use libraries with + * distinct memory allocators within the same program. Note, however, + * that the used @FT_Memory structure is expected to remain valid for the + * life of the @FT_Library object. + * + * Normally, you would call this function (followed by a call to + * @FT_Add_Default_Modules or a series of calls to @FT_Add_Module, and a + * call to @FT_Set_Default_Properties) instead of @FT_Init_FreeType to + * initialize the FreeType library. + * + * Don't use @FT_Done_FreeType but @FT_Done_Library to destroy a library + * instance. + * + * @input: + * memory :: + * A handle to the original memory object. + * + * @output: + * alibrary :: + * A pointer to handle of a new library object. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * See the discussion of reference counters in the description of + * @FT_Reference_Library. + */ + FT_EXPORT( FT_Error ) + FT_New_Library( FT_Memory memory, + FT_Library *alibrary ); + + + /************************************************************************** + * + * @function: + * FT_Done_Library + * + * @description: + * Discard a given library object. This closes all drivers and discards + * all resource objects. + * + * @input: + * library :: + * A handle to the target library. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * See the discussion of reference counters in the description of + * @FT_Reference_Library. + */ + FT_EXPORT( FT_Error ) + FT_Done_Library( FT_Library library ); + + + /************************************************************************** + * + * @functype: + * FT_DebugHook_Func + * + * @description: + * A drop-in replacement (or rather a wrapper) for the bytecode or + * charstring interpreter's main loop function. + * + * Its job is essentially + * + * - to activate debug mode to enforce single-stepping, + * + * - to call the main loop function to interpret the next opcode, and + * + * - to show the changed context to the user. + * + * An example for such a main loop function is `TT_RunIns` (declared in + * FreeType's internal header file `src/truetype/ttinterp.h`). + * + * Have a look at the source code of the `ttdebug` FreeType demo program + * for an example of a drop-in replacement. + * + * @inout: + * arg :: + * A typeless pointer, to be cast to the main loop function's data + * structure (which depends on the font module). For TrueType fonts + * it is bytecode interpreter's execution context, `TT_ExecContext`, + * which is declared in FreeType's internal header file `tttypes.h`. + */ + typedef FT_Error + (*FT_DebugHook_Func)( void* arg ); + + + /************************************************************************** + * + * @enum: + * FT_DEBUG_HOOK_XXX + * + * @description: + * A list of named debug hook indices. + * + * @values: + * FT_DEBUG_HOOK_TRUETYPE:: + * This hook index identifies the TrueType bytecode debugger. + */ +#define FT_DEBUG_HOOK_TRUETYPE 0 + + + /************************************************************************** + * + * @function: + * FT_Set_Debug_Hook + * + * @description: + * Set a debug hook function for debugging the interpreter of a font + * format. + * + * While this is a public API function, an application needs access to + * FreeType's internal header files to do something useful. + * + * Have a look at the source code of the `ttdebug` FreeType demo program + * for an example of its usage. + * + * @inout: + * library :: + * A handle to the library object. + * + * @input: + * hook_index :: + * The index of the debug hook. You should use defined enumeration + * macros like @FT_DEBUG_HOOK_TRUETYPE. + * + * debug_hook :: + * The function used to debug the interpreter. + * + * @note: + * Currently, four debug hook slots are available, but only one (for the + * TrueType interpreter) is defined. + */ + FT_EXPORT( void ) + FT_Set_Debug_Hook( FT_Library library, + FT_UInt hook_index, + FT_DebugHook_Func debug_hook ); + + + /************************************************************************** + * + * @function: + * FT_Add_Default_Modules + * + * @description: + * Add the set of default drivers to a given library object. This is + * only useful when you create a library object with @FT_New_Library + * (usually to plug a custom memory manager). + * + * @inout: + * library :: + * A handle to a new library object. + */ + FT_EXPORT( void ) + FT_Add_Default_Modules( FT_Library library ); + + + + /************************************************************************** + * + * @section: + * truetype_engine + * + * @title: + * The TrueType Engine + * + * @abstract: + * TrueType bytecode support. + * + * @description: + * This section contains a function used to query the level of TrueType + * bytecode support compiled in this version of the library. + * + */ + + + /************************************************************************** + * + * @enum: + * FT_TrueTypeEngineType + * + * @description: + * A list of values describing which kind of TrueType bytecode engine is + * implemented in a given FT_Library instance. It is used by the + * @FT_Get_TrueType_Engine_Type function. + * + * @values: + * FT_TRUETYPE_ENGINE_TYPE_NONE :: + * The library doesn't implement any kind of bytecode interpreter. + * + * FT_TRUETYPE_ENGINE_TYPE_UNPATENTED :: + * Deprecated and removed. + * + * FT_TRUETYPE_ENGINE_TYPE_PATENTED :: + * The library implements a bytecode interpreter that covers the full + * instruction set of the TrueType virtual machine (this was governed + * by patents until May 2010, hence the name). + * + * @since: + * 2.2 + * + */ + typedef enum FT_TrueTypeEngineType_ + { + FT_TRUETYPE_ENGINE_TYPE_NONE = 0, + FT_TRUETYPE_ENGINE_TYPE_UNPATENTED, + FT_TRUETYPE_ENGINE_TYPE_PATENTED + + } FT_TrueTypeEngineType; + + + /************************************************************************** + * + * @function: + * FT_Get_TrueType_Engine_Type + * + * @description: + * Return an @FT_TrueTypeEngineType value to indicate which level of the + * TrueType virtual machine a given library instance supports. + * + * @input: + * library :: + * A library instance. + * + * @return: + * A value indicating which level is supported. + * + * @since: + * 2.2 + * + */ + FT_EXPORT( FT_TrueTypeEngineType ) + FT_Get_TrueType_Engine_Type( FT_Library library ); + + /* */ + + +FT_END_HEADER + +#endif /* FTMODAPI_H_ */ + + +/* END */ diff --git a/third_party/tlRender-install-Release/include/freetype2/freetype/ftmoderr.h b/third_party/tlRender-install-Release/include/freetype2/freetype/ftmoderr.h new file mode 100644 index 00000000..8e2ef2f0 --- /dev/null +++ b/third_party/tlRender-install-Release/include/freetype2/freetype/ftmoderr.h @@ -0,0 +1,204 @@ +/**************************************************************************** + * + * ftmoderr.h + * + * FreeType module error offsets (specification). + * + * Copyright (C) 2001-2025 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + + /************************************************************************** + * + * This file is used to define the FreeType module error codes. + * + * If the macro `FT_CONFIG_OPTION_USE_MODULE_ERRORS` in `ftoption.h` is + * set, the lower byte of an error value identifies the error code as + * usual. In addition, the higher byte identifies the module. For + * example, the error `FT_Err_Invalid_File_Format` has value 0x0003, the + * error `TT_Err_Invalid_File_Format` has value 0x1303, the error + * `T1_Err_Invalid_File_Format` has value 0x1403, etc. + * + * Note that `FT_Err_Ok`, `TT_Err_Ok`, etc. are always equal to zero, + * including the high byte. + * + * If `FT_CONFIG_OPTION_USE_MODULE_ERRORS` isn't set, the higher byte of an + * error value is set to zero. + * + * To hide the various `XXX_Err_` prefixes in the source code, FreeType + * provides some macros in `fttypes.h`. + * + * FT_ERR( err ) + * + * Add current error module prefix (as defined with the `FT_ERR_PREFIX` + * macro) to `err`. For example, in the BDF module the line + * + * ``` + * error = FT_ERR( Invalid_Outline ); + * ``` + * + * expands to + * + * ``` + * error = BDF_Err_Invalid_Outline; + * ``` + * + * For simplicity, you can always use `FT_Err_Ok` directly instead of + * `FT_ERR( Ok )`. + * + * FT_ERR_EQ( errcode, err ) + * FT_ERR_NEQ( errcode, err ) + * + * Compare error code `errcode` with the error `err` for equality and + * inequality, respectively. Example: + * + * ``` + * if ( FT_ERR_EQ( error, Invalid_Outline ) ) + * ... + * ``` + * + * Using this macro you don't have to think about error prefixes. Of + * course, if module errors are not active, the above example is the + * same as + * + * ``` + * if ( error == FT_Err_Invalid_Outline ) + * ... + * ``` + * + * FT_ERROR_BASE( errcode ) + * FT_ERROR_MODULE( errcode ) + * + * Get base error and module error code, respectively. + * + * It can also be used to create a module error message table easily with + * something like + * + * ``` + * #undef FTMODERR_H_ + * #define FT_MODERRDEF( e, v, s ) { FT_Mod_Err_ ## e, s }, + * #define FT_MODERR_START_LIST { + * #define FT_MODERR_END_LIST { 0, 0 } }; + * + * const struct + * { + * int mod_err_offset; + * const char* mod_err_msg + * } ft_mod_errors[] = + * + * #include + * ``` + * + */ + + +#ifndef FTMODERR_H_ +#define FTMODERR_H_ + + + /*******************************************************************/ + /*******************************************************************/ + /***** *****/ + /***** SETUP MACROS *****/ + /***** *****/ + /*******************************************************************/ + /*******************************************************************/ + + +#undef FT_NEED_EXTERN_C + +#ifndef FT_MODERRDEF + +#ifdef FT_CONFIG_OPTION_USE_MODULE_ERRORS +#define FT_MODERRDEF( e, v, s ) FT_Mod_Err_ ## e = v, +#else +#define FT_MODERRDEF( e, v, s ) FT_Mod_Err_ ## e = 0, +#endif + +#define FT_MODERR_START_LIST enum { +#define FT_MODERR_END_LIST FT_Mod_Err_Max }; + +#ifdef __cplusplus +#define FT_NEED_EXTERN_C + extern "C" { +#endif + +#endif /* !FT_MODERRDEF */ + + + /*******************************************************************/ + /*******************************************************************/ + /***** *****/ + /***** LIST MODULE ERROR BASES *****/ + /***** *****/ + /*******************************************************************/ + /*******************************************************************/ + + +#ifdef FT_MODERR_START_LIST + FT_MODERR_START_LIST +#endif + + + FT_MODERRDEF( Base, 0x000, "base module" ) + FT_MODERRDEF( Autofit, 0x100, "autofitter module" ) + FT_MODERRDEF( BDF, 0x200, "BDF module" ) + FT_MODERRDEF( Bzip2, 0x300, "Bzip2 module" ) + FT_MODERRDEF( Cache, 0x400, "cache module" ) + FT_MODERRDEF( CFF, 0x500, "CFF module" ) + FT_MODERRDEF( CID, 0x600, "CID module" ) + FT_MODERRDEF( Gzip, 0x700, "Gzip module" ) + FT_MODERRDEF( LZW, 0x800, "LZW module" ) + FT_MODERRDEF( OTvalid, 0x900, "OpenType validation module" ) + FT_MODERRDEF( PCF, 0xA00, "PCF module" ) + FT_MODERRDEF( PFR, 0xB00, "PFR module" ) + FT_MODERRDEF( PSaux, 0xC00, "PS auxiliary module" ) + FT_MODERRDEF( PShinter, 0xD00, "PS hinter module" ) + FT_MODERRDEF( PSnames, 0xE00, "PS names module" ) + FT_MODERRDEF( Raster, 0xF00, "raster module" ) + FT_MODERRDEF( SFNT, 0x1000, "SFNT module" ) + FT_MODERRDEF( Smooth, 0x1100, "smooth raster module" ) + FT_MODERRDEF( TrueType, 0x1200, "TrueType module" ) + FT_MODERRDEF( Type1, 0x1300, "Type 1 module" ) + FT_MODERRDEF( Type42, 0x1400, "Type 42 module" ) + FT_MODERRDEF( Winfonts, 0x1500, "Windows FON/FNT module" ) + FT_MODERRDEF( GXvalid, 0x1600, "GX validation module" ) + FT_MODERRDEF( Sdf, 0x1700, "Signed distance field raster module" ) + + +#ifdef FT_MODERR_END_LIST + FT_MODERR_END_LIST +#endif + + + /*******************************************************************/ + /*******************************************************************/ + /***** *****/ + /***** CLEANUP *****/ + /***** *****/ + /*******************************************************************/ + /*******************************************************************/ + + +#ifdef FT_NEED_EXTERN_C + } +#endif + +#undef FT_MODERR_START_LIST +#undef FT_MODERR_END_LIST +#undef FT_MODERRDEF +#undef FT_NEED_EXTERN_C + + +#endif /* FTMODERR_H_ */ + + +/* END */ diff --git a/third_party/tlRender-install-Release/include/freetype2/freetype/ftotval.h b/third_party/tlRender-install-Release/include/freetype2/freetype/ftotval.h new file mode 100644 index 00000000..f1cd22ac --- /dev/null +++ b/third_party/tlRender-install-Release/include/freetype2/freetype/ftotval.h @@ -0,0 +1,206 @@ +/**************************************************************************** + * + * ftotval.h + * + * FreeType API for validating OpenType tables (specification). + * + * Copyright (C) 2004-2025 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + +/**************************************************************************** + * + * + * Warning: This module might be moved to a different library in the + * future to avoid a tight dependency between FreeType and the + * OpenType specification. + * + * + */ + + +#ifndef FTOTVAL_H_ +#define FTOTVAL_H_ + +#include + +#ifdef FREETYPE_H +#error "freetype.h of FreeType 1 has been loaded!" +#error "Please fix the directory search order for header files" +#error "so that freetype.h of FreeType 2 is found first." +#endif + + +FT_BEGIN_HEADER + + + /************************************************************************** + * + * @section: + * ot_validation + * + * @title: + * OpenType Validation + * + * @abstract: + * An API to validate OpenType tables. + * + * @description: + * This section contains the declaration of functions to validate some + * OpenType tables (BASE, GDEF, GPOS, GSUB, JSTF, MATH). + * + * @order: + * FT_OpenType_Validate + * FT_OpenType_Free + * + * FT_VALIDATE_OTXXX + * + */ + + + /************************************************************************** + * + * @enum: + * FT_VALIDATE_OTXXX + * + * @description: + * A list of bit-field constants used with @FT_OpenType_Validate to + * indicate which OpenType tables should be validated. + * + * @values: + * FT_VALIDATE_BASE :: + * Validate BASE table. + * + * FT_VALIDATE_GDEF :: + * Validate GDEF table. + * + * FT_VALIDATE_GPOS :: + * Validate GPOS table. + * + * FT_VALIDATE_GSUB :: + * Validate GSUB table. + * + * FT_VALIDATE_JSTF :: + * Validate JSTF table. + * + * FT_VALIDATE_MATH :: + * Validate MATH table. + * + * FT_VALIDATE_OT :: + * Validate all OpenType tables (BASE, GDEF, GPOS, GSUB, JSTF, MATH). + * + */ +#define FT_VALIDATE_BASE 0x0100 +#define FT_VALIDATE_GDEF 0x0200 +#define FT_VALIDATE_GPOS 0x0400 +#define FT_VALIDATE_GSUB 0x0800 +#define FT_VALIDATE_JSTF 0x1000 +#define FT_VALIDATE_MATH 0x2000 + +#define FT_VALIDATE_OT ( FT_VALIDATE_BASE | \ + FT_VALIDATE_GDEF | \ + FT_VALIDATE_GPOS | \ + FT_VALIDATE_GSUB | \ + FT_VALIDATE_JSTF | \ + FT_VALIDATE_MATH ) + + + /************************************************************************** + * + * @function: + * FT_OpenType_Validate + * + * @description: + * Validate various OpenType tables to assure that all offsets and + * indices are valid. The idea is that a higher-level library that + * actually does the text layout can access those tables without error + * checking (which can be quite time consuming). + * + * @input: + * face :: + * A handle to the input face. + * + * validation_flags :: + * A bit field that specifies the tables to be validated. See + * @FT_VALIDATE_OTXXX for possible values. + * + * @output: + * BASE_table :: + * A pointer to the BASE table. + * + * GDEF_table :: + * A pointer to the GDEF table. + * + * GPOS_table :: + * A pointer to the GPOS table. + * + * GSUB_table :: + * A pointer to the GSUB table. + * + * JSTF_table :: + * A pointer to the JSTF table. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * This function only works with OpenType fonts, returning an error + * otherwise. + * + * After use, the application should deallocate the five tables with + * @FT_OpenType_Free. A `NULL` value indicates that the table either + * doesn't exist in the font, or the application hasn't asked for + * validation. + */ + FT_EXPORT( FT_Error ) + FT_OpenType_Validate( FT_Face face, + FT_UInt validation_flags, + FT_Bytes *BASE_table, + FT_Bytes *GDEF_table, + FT_Bytes *GPOS_table, + FT_Bytes *GSUB_table, + FT_Bytes *JSTF_table ); + + + /************************************************************************** + * + * @function: + * FT_OpenType_Free + * + * @description: + * Free the buffer allocated by OpenType validator. + * + * @input: + * face :: + * A handle to the input face. + * + * table :: + * The pointer to the buffer that is allocated by + * @FT_OpenType_Validate. + * + * @note: + * This function must be used to free the buffer allocated by + * @FT_OpenType_Validate only. + */ + FT_EXPORT( void ) + FT_OpenType_Free( FT_Face face, + FT_Bytes table ); + + + /* */ + + +FT_END_HEADER + +#endif /* FTOTVAL_H_ */ + + +/* END */ diff --git a/third_party/tlRender-install-Release/include/freetype2/freetype/ftoutln.h b/third_party/tlRender-install-Release/include/freetype2/freetype/ftoutln.h new file mode 100644 index 00000000..2545ca84 --- /dev/null +++ b/third_party/tlRender-install-Release/include/freetype2/freetype/ftoutln.h @@ -0,0 +1,588 @@ +/**************************************************************************** + * + * ftoutln.h + * + * Support for the FT_Outline type used to store glyph shapes of + * most scalable font formats (specification). + * + * Copyright (C) 1996-2025 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + +#ifndef FTOUTLN_H_ +#define FTOUTLN_H_ + + +#include + +#ifdef FREETYPE_H +#error "freetype.h of FreeType 1 has been loaded!" +#error "Please fix the directory search order for header files" +#error "so that freetype.h of FreeType 2 is found first." +#endif + + +FT_BEGIN_HEADER + + + /************************************************************************** + * + * @section: + * outline_processing + * + * @title: + * Outline Processing + * + * @abstract: + * Functions to create, transform, and render vectorial glyph images. + * + * @description: + * This section contains routines used to create and destroy scalable + * glyph images known as 'outlines'. These can also be measured, + * transformed, and converted into bitmaps and pixmaps. + * + * @order: + * FT_Outline + * FT_Outline_New + * FT_Outline_Done + * FT_Outline_Copy + * FT_Outline_Translate + * FT_Outline_Transform + * FT_Outline_Embolden + * FT_Outline_EmboldenXY + * FT_Outline_Reverse + * FT_Outline_Check + * + * FT_Outline_Get_CBox + * FT_Outline_Get_BBox + * + * FT_Outline_Get_Bitmap + * FT_Outline_Render + * FT_Outline_Decompose + * FT_Outline_Funcs + * FT_Outline_MoveToFunc + * FT_Outline_LineToFunc + * FT_Outline_ConicToFunc + * FT_Outline_CubicToFunc + * + * FT_Orientation + * FT_Outline_Get_Orientation + * + * FT_OUTLINE_XXX + * + */ + + + /************************************************************************** + * + * @function: + * FT_Outline_Decompose + * + * @description: + * Walk over an outline's structure to decompose it into individual + * segments and Bezier arcs. This function also emits 'move to' + * operations to indicate the start of new contours in the outline. + * + * @input: + * outline :: + * A pointer to the source target. + * + * func_interface :: + * A table of 'emitters', i.e., function pointers called during + * decomposition to indicate path operations. + * + * @inout: + * user :: + * A typeless pointer that is passed to each emitter during the + * decomposition. It can be used to store the state during the + * decomposition. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * Degenerate contours, segments, and Bezier arcs may be reported. In + * most cases, it is best to filter these out before using the outline + * for stroking or other path modification purposes (which may cause + * degenerate segments to become non-degenerate and visible, like when + * stroke caps are used or the path is otherwise outset). Some glyph + * outlines may contain deliberate degenerate single points for mark + * attachement. + * + * Similarly, the function returns success for an empty outline also + * (doing nothing, that is, not calling any emitter); if necessary, you + * should filter this out, too. + */ + FT_EXPORT( FT_Error ) + FT_Outline_Decompose( FT_Outline* outline, + const FT_Outline_Funcs* func_interface, + void* user ); + + + /************************************************************************** + * + * @function: + * FT_Outline_New + * + * @description: + * Create a new outline of a given size. + * + * @input: + * library :: + * A handle to the library object from where the outline is allocated. + * Note however that the new outline will **not** necessarily be + * **freed**, when destroying the library, by @FT_Done_FreeType. + * + * numPoints :: + * The maximum number of points within the outline. Must be smaller + * than or equal to 0xFFFF (65535). + * + * numContours :: + * The maximum number of contours within the outline. This value must + * be in the range 0 to `numPoints`. + * + * @output: + * anoutline :: + * A handle to the new outline. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * The reason why this function takes a `library` parameter is simply to + * use the library's memory allocator. + */ + FT_EXPORT( FT_Error ) + FT_Outline_New( FT_Library library, + FT_UInt numPoints, + FT_Int numContours, + FT_Outline *anoutline ); + + + /************************************************************************** + * + * @function: + * FT_Outline_Done + * + * @description: + * Destroy an outline created with @FT_Outline_New. + * + * @input: + * library :: + * A handle of the library object used to allocate the outline. + * + * outline :: + * A pointer to the outline object to be discarded. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * If the outline's 'owner' field is not set, only the outline descriptor + * will be released. + */ + FT_EXPORT( FT_Error ) + FT_Outline_Done( FT_Library library, + FT_Outline* outline ); + + + /************************************************************************** + * + * @function: + * FT_Outline_Check + * + * @description: + * Check the contents of an outline descriptor. + * + * @input: + * outline :: + * A handle to a source outline. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * An empty outline, or an outline with a single point only is also + * valid. + */ + FT_EXPORT( FT_Error ) + FT_Outline_Check( FT_Outline* outline ); + + + /************************************************************************** + * + * @function: + * FT_Outline_Get_CBox + * + * @description: + * Return an outline's 'control box'. The control box encloses all the + * outline's points, including Bezier control points. Though it + * coincides with the exact bounding box for most glyphs, it can be + * slightly larger in some situations (like when rotating an outline that + * contains Bezier outside arcs). + * + * Computing the control box is very fast, while getting the bounding box + * can take much more time as it needs to walk over all segments and arcs + * in the outline. To get the latter, you can use the 'ftbbox' + * component, which is dedicated to this single task. + * + * @input: + * outline :: + * A pointer to the source outline descriptor. + * + * @output: + * acbox :: + * The outline's control box. + * + * @note: + * See @FT_Glyph_Get_CBox for a discussion of tricky fonts. + */ + FT_EXPORT( void ) + FT_Outline_Get_CBox( const FT_Outline* outline, + FT_BBox *acbox ); + + + /************************************************************************** + * + * @function: + * FT_Outline_Translate + * + * @description: + * Apply a simple translation to the points of an outline. + * + * @inout: + * outline :: + * A pointer to the target outline descriptor. + * + * @input: + * xOffset :: + * The horizontal offset. + * + * yOffset :: + * The vertical offset. + */ + FT_EXPORT( void ) + FT_Outline_Translate( const FT_Outline* outline, + FT_Pos xOffset, + FT_Pos yOffset ); + + + /************************************************************************** + * + * @function: + * FT_Outline_Copy + * + * @description: + * Copy an outline into another one. Both objects must have the same + * sizes (number of points & number of contours) when this function is + * called. + * + * @input: + * source :: + * A handle to the source outline. + * + * @output: + * target :: + * A handle to the target outline. + * + * @return: + * FreeType error code. 0~means success. + */ + FT_EXPORT( FT_Error ) + FT_Outline_Copy( const FT_Outline* source, + FT_Outline *target ); + + + /************************************************************************** + * + * @function: + * FT_Outline_Transform + * + * @description: + * Apply a simple 2x2 matrix to all of an outline's points. Useful for + * applying rotations, slanting, flipping, etc. + * + * @inout: + * outline :: + * A pointer to the target outline descriptor. + * + * @input: + * matrix :: + * A pointer to the transformation matrix. + * + * @note: + * You can use @FT_Outline_Translate if you need to translate the + * outline's points. + */ + FT_EXPORT( void ) + FT_Outline_Transform( const FT_Outline* outline, + const FT_Matrix* matrix ); + + + /************************************************************************** + * + * @function: + * FT_Outline_Embolden + * + * @description: + * Embolden an outline. The new outline will be at most 4~times + * `strength` pixels wider and higher. You may think of the left and + * bottom borders as unchanged. + * + * Negative `strength` values to reduce the outline thickness are + * possible also. + * + * @inout: + * outline :: + * A handle to the target outline. + * + * @input: + * strength :: + * How strong the glyph is emboldened. Expressed in 26.6 pixel format. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * The used algorithm to increase or decrease the thickness of the glyph + * doesn't change the number of points; this means that certain + * situations like acute angles or intersections are sometimes handled + * incorrectly. + * + * If you need 'better' metrics values you should call + * @FT_Outline_Get_CBox or @FT_Outline_Get_BBox. + * + * To get meaningful results, font scaling values must be set with + * functions like @FT_Set_Char_Size before calling FT_Render_Glyph. + * + * @example: + * ``` + * FT_Load_Glyph( face, index, FT_LOAD_DEFAULT ); + * + * if ( face->glyph->format == FT_GLYPH_FORMAT_OUTLINE ) + * FT_Outline_Embolden( &face->glyph->outline, strength ); + * ``` + * + */ + FT_EXPORT( FT_Error ) + FT_Outline_Embolden( FT_Outline* outline, + FT_Pos strength ); + + + /************************************************************************** + * + * @function: + * FT_Outline_EmboldenXY + * + * @description: + * Embolden an outline. The new outline will be `xstrength` pixels wider + * and `ystrength` pixels higher. Otherwise, it is similar to + * @FT_Outline_Embolden, which uses the same strength in both directions. + * + * @since: + * 2.4.10 + */ + FT_EXPORT( FT_Error ) + FT_Outline_EmboldenXY( FT_Outline* outline, + FT_Pos xstrength, + FT_Pos ystrength ); + + + /************************************************************************** + * + * @function: + * FT_Outline_Reverse + * + * @description: + * Reverse the drawing direction of an outline. This is used to ensure + * consistent fill conventions for mirrored glyphs. + * + * @inout: + * outline :: + * A pointer to the target outline descriptor. + * + * @note: + * This function toggles the bit flag @FT_OUTLINE_REVERSE_FILL in the + * outline's `flags` field. + * + * It shouldn't be used by a normal client application, unless it knows + * what it is doing. + */ + FT_EXPORT( void ) + FT_Outline_Reverse( FT_Outline* outline ); + + + /************************************************************************** + * + * @function: + * FT_Outline_Get_Bitmap + * + * @description: + * Render an outline within a bitmap. The outline's image is simply + * OR-ed to the target bitmap. + * + * @input: + * library :: + * A handle to a FreeType library object. + * + * outline :: + * A pointer to the source outline descriptor. + * + * @inout: + * abitmap :: + * A pointer to the target bitmap descriptor. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * This function does **not create** the bitmap, it only renders an + * outline image within the one you pass to it! Consequently, the + * various fields in `abitmap` should be set accordingly. + * + * It will use the raster corresponding to the default glyph format. + * + * The value of the `num_grays` field in `abitmap` is ignored. If you + * select the gray-level rasterizer, and you want less than 256 gray + * levels, you have to use @FT_Outline_Render directly. + */ + FT_EXPORT( FT_Error ) + FT_Outline_Get_Bitmap( FT_Library library, + FT_Outline* outline, + const FT_Bitmap *abitmap ); + + + /************************************************************************** + * + * @function: + * FT_Outline_Render + * + * @description: + * Render an outline within a bitmap using the current scan-convert. + * + * @input: + * library :: + * A handle to a FreeType library object. + * + * outline :: + * A pointer to the source outline descriptor. + * + * @inout: + * params :: + * A pointer to an @FT_Raster_Params structure used to describe the + * rendering operation. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * This advanced function uses @FT_Raster_Params as an argument. + * The field `params.source` will be set to `outline` before the scan + * converter is called, which means that the value you give to it is + * actually ignored. Either `params.target` must point to preallocated + * bitmap, or @FT_RASTER_FLAG_DIRECT must be set in `params.flags` + * allowing FreeType rasterizer to be used for direct composition, + * translucency, etc. See @FT_Raster_Params for more details. + */ + FT_EXPORT( FT_Error ) + FT_Outline_Render( FT_Library library, + FT_Outline* outline, + FT_Raster_Params* params ); + + + /************************************************************************** + * + * @enum: + * FT_Orientation + * + * @description: + * A list of values used to describe an outline's contour orientation. + * + * The TrueType and PostScript specifications use different conventions + * to determine whether outline contours should be filled or unfilled. + * + * @values: + * FT_ORIENTATION_TRUETYPE :: + * According to the TrueType specification, clockwise contours must be + * filled, and counter-clockwise ones must be unfilled. + * + * FT_ORIENTATION_POSTSCRIPT :: + * According to the PostScript specification, counter-clockwise + * contours must be filled, and clockwise ones must be unfilled. + * + * FT_ORIENTATION_FILL_RIGHT :: + * This is identical to @FT_ORIENTATION_TRUETYPE, but is used to + * remember that in TrueType, everything that is to the right of the + * drawing direction of a contour must be filled. + * + * FT_ORIENTATION_FILL_LEFT :: + * This is identical to @FT_ORIENTATION_POSTSCRIPT, but is used to + * remember that in PostScript, everything that is to the left of the + * drawing direction of a contour must be filled. + * + * FT_ORIENTATION_NONE :: + * The orientation cannot be determined. That is, different parts of + * the glyph have different orientation. + * + */ + typedef enum FT_Orientation_ + { + FT_ORIENTATION_TRUETYPE = 0, + FT_ORIENTATION_POSTSCRIPT = 1, + FT_ORIENTATION_FILL_RIGHT = FT_ORIENTATION_TRUETYPE, + FT_ORIENTATION_FILL_LEFT = FT_ORIENTATION_POSTSCRIPT, + FT_ORIENTATION_NONE + + } FT_Orientation; + + + /************************************************************************** + * + * @function: + * FT_Outline_Get_Orientation + * + * @description: + * This function analyzes a glyph outline and tries to compute its fill + * orientation (see @FT_Orientation). This is done by integrating the + * total area covered by the outline. The positive integral corresponds + * to the clockwise orientation and @FT_ORIENTATION_POSTSCRIPT is + * returned. The negative integral corresponds to the counter-clockwise + * orientation and @FT_ORIENTATION_TRUETYPE is returned. + * + * Note that this will return @FT_ORIENTATION_TRUETYPE for empty + * outlines. + * + * @input: + * outline :: + * A handle to the source outline. + * + * @return: + * The orientation. + * + */ + FT_EXPORT( FT_Orientation ) + FT_Outline_Get_Orientation( FT_Outline* outline ); + + + /* */ + + +FT_END_HEADER + +#endif /* FTOUTLN_H_ */ + + +/* END */ + + +/* Local Variables: */ +/* coding: utf-8 */ +/* End: */ diff --git a/third_party/tlRender-install-Release/include/freetype2/freetype/ftparams.h b/third_party/tlRender-install-Release/include/freetype2/freetype/ftparams.h new file mode 100644 index 00000000..2c09db16 --- /dev/null +++ b/third_party/tlRender-install-Release/include/freetype2/freetype/ftparams.h @@ -0,0 +1,218 @@ +/**************************************************************************** + * + * ftparams.h + * + * FreeType API for possible FT_Parameter tags (specification only). + * + * Copyright (C) 2017-2025 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + +#ifndef FTPARAMS_H_ +#define FTPARAMS_H_ + +#include + +#ifdef FREETYPE_H +#error "freetype.h of FreeType 1 has been loaded!" +#error "Please fix the directory search order for header files" +#error "so that freetype.h of FreeType 2 is found first." +#endif + + +FT_BEGIN_HEADER + + + /************************************************************************** + * + * @section: + * parameter_tags + * + * @title: + * Parameter Tags + * + * @abstract: + * Macros for driver property and font loading parameter tags. + * + * @description: + * This section contains macros for the @FT_Parameter structure that are + * used with various functions to activate some special functionality or + * different behaviour of various components of FreeType. + * + */ + + + /************************************************************************** + * + * @enum: + * FT_PARAM_TAG_IGNORE_TYPOGRAPHIC_FAMILY + * + * @description: + * A tag for @FT_Parameter to make @FT_Open_Face ignore typographic + * family names in the 'name' table (introduced in OpenType version 1.4). + * Use this for backward compatibility with legacy systems that have a + * four-faces-per-family restriction. + * + * @since: + * 2.8 + * + */ +#define FT_PARAM_TAG_IGNORE_TYPOGRAPHIC_FAMILY \ + FT_MAKE_TAG( 'i', 'g', 'p', 'f' ) + + + /* this constant is deprecated */ +#define FT_PARAM_TAG_IGNORE_PREFERRED_FAMILY \ + FT_PARAM_TAG_IGNORE_TYPOGRAPHIC_FAMILY + + + /************************************************************************** + * + * @enum: + * FT_PARAM_TAG_IGNORE_TYPOGRAPHIC_SUBFAMILY + * + * @description: + * A tag for @FT_Parameter to make @FT_Open_Face ignore typographic + * subfamily names in the 'name' table (introduced in OpenType version + * 1.4). Use this for backward compatibility with legacy systems that + * have a four-faces-per-family restriction. + * + * @since: + * 2.8 + * + */ +#define FT_PARAM_TAG_IGNORE_TYPOGRAPHIC_SUBFAMILY \ + FT_MAKE_TAG( 'i', 'g', 'p', 's' ) + + + /* this constant is deprecated */ +#define FT_PARAM_TAG_IGNORE_PREFERRED_SUBFAMILY \ + FT_PARAM_TAG_IGNORE_TYPOGRAPHIC_SUBFAMILY + + + /************************************************************************** + * + * @enum: + * FT_PARAM_TAG_INCREMENTAL + * + * @description: + * An @FT_Parameter tag to be used with @FT_Open_Face to indicate + * incremental glyph loading. + * + */ +#define FT_PARAM_TAG_INCREMENTAL \ + FT_MAKE_TAG( 'i', 'n', 'c', 'r' ) + + + /************************************************************************** + * + * @enum: + * FT_PARAM_TAG_IGNORE_SBIX + * + * @description: + * A tag for @FT_Parameter to make @FT_Open_Face ignore an 'sbix' table + * while loading a font. Use this if @FT_FACE_FLAG_SBIX is set and you + * want to access the outline glyphs in the font. + * + */ +#define FT_PARAM_TAG_IGNORE_SBIX \ + FT_MAKE_TAG( 'i', 's', 'b', 'x' ) + + + /************************************************************************** + * + * @enum: + * FT_PARAM_TAG_LCD_FILTER_WEIGHTS + * + * @description: + * An @FT_Parameter tag to be used with @FT_Face_Properties. The + * corresponding argument specifies the five LCD filter weights for a + * given face (if using @FT_LOAD_TARGET_LCD, for example), overriding the + * global default values or the values set up with + * @FT_Library_SetLcdFilterWeights. + * + * @since: + * 2.8 + * + */ +#define FT_PARAM_TAG_LCD_FILTER_WEIGHTS \ + FT_MAKE_TAG( 'l', 'c', 'd', 'f' ) + + + /************************************************************************** + * + * @enum: + * FT_PARAM_TAG_RANDOM_SEED + * + * @description: + * An @FT_Parameter tag to be used with @FT_Face_Properties. The + * corresponding 32bit signed integer argument overrides the font + * driver's random seed value with a face-specific one; see @random-seed. + * + * @since: + * 2.8 + * + */ +#define FT_PARAM_TAG_RANDOM_SEED \ + FT_MAKE_TAG( 's', 'e', 'e', 'd' ) + + + /************************************************************************** + * + * @enum: + * FT_PARAM_TAG_STEM_DARKENING + * + * @description: + * An @FT_Parameter tag to be used with @FT_Face_Properties. The + * corresponding Boolean argument specifies whether to apply stem + * darkening, overriding the global default values or the values set up + * with @FT_Property_Set (see @no-stem-darkening). + * + * This is a passive setting that only takes effect if the font driver or + * autohinter honors it, which the CFF, Type~1, and CID drivers always + * do, but the autohinter only in 'light' hinting mode (as of version + * 2.9). + * + * @since: + * 2.8 + * + */ +#define FT_PARAM_TAG_STEM_DARKENING \ + FT_MAKE_TAG( 'd', 'a', 'r', 'k' ) + + + /************************************************************************** + * + * @enum: + * FT_PARAM_TAG_UNPATENTED_HINTING + * + * @description: + * Deprecated, no effect. + * + * Previously: A constant used as the tag of an @FT_Parameter structure + * to indicate that unpatented methods only should be used by the + * TrueType bytecode interpreter for a typeface opened by @FT_Open_Face. + * + */ +#define FT_PARAM_TAG_UNPATENTED_HINTING \ + FT_MAKE_TAG( 'u', 'n', 'p', 'a' ) + + + /* */ + + +FT_END_HEADER + + +#endif /* FTPARAMS_H_ */ + + +/* END */ diff --git a/third_party/tlRender-install-Release/include/freetype2/freetype/ftpfr.h b/third_party/tlRender-install-Release/include/freetype2/freetype/ftpfr.h new file mode 100644 index 00000000..399b5ca3 --- /dev/null +++ b/third_party/tlRender-install-Release/include/freetype2/freetype/ftpfr.h @@ -0,0 +1,179 @@ +/**************************************************************************** + * + * ftpfr.h + * + * FreeType API for accessing PFR-specific data (specification only). + * + * Copyright (C) 2002-2025 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + +#ifndef FTPFR_H_ +#define FTPFR_H_ + +#include + +#ifdef FREETYPE_H +#error "freetype.h of FreeType 1 has been loaded!" +#error "Please fix the directory search order for header files" +#error "so that freetype.h of FreeType 2 is found first." +#endif + + +FT_BEGIN_HEADER + + + /************************************************************************** + * + * @section: + * pfr_fonts + * + * @title: + * PFR Fonts + * + * @abstract: + * PFR/TrueDoc-specific API. + * + * @description: + * This section contains the declaration of PFR-specific functions. + * + */ + + + /************************************************************************** + * + * @function: + * FT_Get_PFR_Metrics + * + * @description: + * Return the outline and metrics resolutions of a given PFR face. + * + * @input: + * face :: + * Handle to the input face. It can be a non-PFR face. + * + * @output: + * aoutline_resolution :: + * Outline resolution. This is equivalent to `face->units_per_EM` for + * non-PFR fonts. Optional (parameter can be `NULL`). + * + * ametrics_resolution :: + * Metrics resolution. This is equivalent to `outline_resolution` for + * non-PFR fonts. Optional (parameter can be `NULL`). + * + * ametrics_x_scale :: + * A 16.16 fixed-point number used to scale distance expressed in + * metrics units to device subpixels. This is equivalent to + * `face->size->x_scale`, but for metrics only. Optional (parameter + * can be `NULL`). + * + * ametrics_y_scale :: + * Same as `ametrics_x_scale` but for the vertical direction. + * optional (parameter can be `NULL`). + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * If the input face is not a PFR, this function will return an error. + * However, in all cases, it will return valid values. + */ + FT_EXPORT( FT_Error ) + FT_Get_PFR_Metrics( FT_Face face, + FT_UInt *aoutline_resolution, + FT_UInt *ametrics_resolution, + FT_Fixed *ametrics_x_scale, + FT_Fixed *ametrics_y_scale ); + + + /************************************************************************** + * + * @function: + * FT_Get_PFR_Kerning + * + * @description: + * Return the kerning pair corresponding to two glyphs in a PFR face. + * The distance is expressed in metrics units, unlike the result of + * @FT_Get_Kerning. + * + * @input: + * face :: + * A handle to the input face. + * + * left :: + * Index of the left glyph. + * + * right :: + * Index of the right glyph. + * + * @output: + * avector :: + * A kerning vector. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * This function always return distances in original PFR metrics units. + * This is unlike @FT_Get_Kerning with the @FT_KERNING_UNSCALED mode, + * which always returns distances converted to outline units. + * + * You can use the value of the `x_scale` and `y_scale` parameters + * returned by @FT_Get_PFR_Metrics to scale these to device subpixels. + */ + FT_EXPORT( FT_Error ) + FT_Get_PFR_Kerning( FT_Face face, + FT_UInt left, + FT_UInt right, + FT_Vector *avector ); + + + /************************************************************************** + * + * @function: + * FT_Get_PFR_Advance + * + * @description: + * Return a given glyph advance, expressed in original metrics units, + * from a PFR font. + * + * @input: + * face :: + * A handle to the input face. + * + * gindex :: + * The glyph index. + * + * @output: + * aadvance :: + * The glyph advance in metrics units. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * You can use the `x_scale` or `y_scale` results of @FT_Get_PFR_Metrics + * to convert the advance to device subpixels (i.e., 1/64 of pixels). + */ + FT_EXPORT( FT_Error ) + FT_Get_PFR_Advance( FT_Face face, + FT_UInt gindex, + FT_Pos *aadvance ); + + /* */ + + +FT_END_HEADER + +#endif /* FTPFR_H_ */ + + +/* END */ diff --git a/third_party/tlRender-install-Release/include/freetype2/freetype/ftrender.h b/third_party/tlRender-install-Release/include/freetype2/freetype/ftrender.h new file mode 100644 index 00000000..cc310207 --- /dev/null +++ b/third_party/tlRender-install-Release/include/freetype2/freetype/ftrender.h @@ -0,0 +1,244 @@ +/**************************************************************************** + * + * ftrender.h + * + * FreeType renderer modules public interface (specification). + * + * Copyright (C) 1996-2025 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + +#ifndef FTRENDER_H_ +#define FTRENDER_H_ + + +#include +#include + + +FT_BEGIN_HEADER + + + /************************************************************************** + * + * @section: + * module_management + * + */ + + + /* create a new glyph object */ + typedef FT_Error + (*FT_Glyph_InitFunc)( FT_Glyph glyph, + FT_GlyphSlot slot ); + + /* destroys a given glyph object */ + typedef void + (*FT_Glyph_DoneFunc)( FT_Glyph glyph ); + + typedef void + (*FT_Glyph_TransformFunc)( FT_Glyph glyph, + const FT_Matrix* matrix, + const FT_Vector* delta ); + + typedef void + (*FT_Glyph_GetBBoxFunc)( FT_Glyph glyph, + FT_BBox* abbox ); + + typedef FT_Error + (*FT_Glyph_CopyFunc)( FT_Glyph source, + FT_Glyph target ); + + typedef FT_Error + (*FT_Glyph_PrepareFunc)( FT_Glyph glyph, + FT_GlyphSlot slot ); + +/* deprecated */ +#define FT_Glyph_Init_Func FT_Glyph_InitFunc +#define FT_Glyph_Done_Func FT_Glyph_DoneFunc +#define FT_Glyph_Transform_Func FT_Glyph_TransformFunc +#define FT_Glyph_BBox_Func FT_Glyph_GetBBoxFunc +#define FT_Glyph_Copy_Func FT_Glyph_CopyFunc +#define FT_Glyph_Prepare_Func FT_Glyph_PrepareFunc + + + struct FT_Glyph_Class_ + { + FT_Long glyph_size; + FT_Glyph_Format glyph_format; + + FT_Glyph_InitFunc glyph_init; + FT_Glyph_DoneFunc glyph_done; + FT_Glyph_CopyFunc glyph_copy; + FT_Glyph_TransformFunc glyph_transform; + FT_Glyph_GetBBoxFunc glyph_bbox; + FT_Glyph_PrepareFunc glyph_prepare; + }; + + + typedef FT_Error + (*FT_Renderer_RenderFunc)( FT_Renderer renderer, + FT_GlyphSlot slot, + FT_Render_Mode mode, + const FT_Vector* origin ); + + typedef FT_Error + (*FT_Renderer_TransformFunc)( FT_Renderer renderer, + FT_GlyphSlot slot, + const FT_Matrix* matrix, + const FT_Vector* delta ); + + + typedef void + (*FT_Renderer_GetCBoxFunc)( FT_Renderer renderer, + FT_GlyphSlot slot, + FT_BBox* cbox ); + + + typedef FT_Error + (*FT_Renderer_SetModeFunc)( FT_Renderer renderer, + FT_ULong mode_tag, + FT_Pointer mode_ptr ); + +/* deprecated identifiers */ +#define FTRenderer_render FT_Renderer_RenderFunc +#define FTRenderer_transform FT_Renderer_TransformFunc +#define FTRenderer_getCBox FT_Renderer_GetCBoxFunc +#define FTRenderer_setMode FT_Renderer_SetModeFunc + + + /************************************************************************** + * + * @struct: + * FT_Renderer_Class + * + * @description: + * The renderer module class descriptor. + * + * @fields: + * root :: + * The root @FT_Module_Class fields. + * + * glyph_format :: + * The glyph image format this renderer handles. + * + * render_glyph :: + * A method used to render the image that is in a given glyph slot into + * a bitmap. + * + * transform_glyph :: + * A method used to transform the image that is in a given glyph slot. + * + * get_glyph_cbox :: + * A method used to access the glyph's cbox. + * + * set_mode :: + * A method used to pass additional parameters. + * + * raster_class :: + * For @FT_GLYPH_FORMAT_OUTLINE renderers only. This is a pointer to + * its raster's class. + */ + typedef struct FT_Renderer_Class_ + { + FT_Module_Class root; + + FT_Glyph_Format glyph_format; + + FT_Renderer_RenderFunc render_glyph; + FT_Renderer_TransformFunc transform_glyph; + FT_Renderer_GetCBoxFunc get_glyph_cbox; + FT_Renderer_SetModeFunc set_mode; + + const FT_Raster_Funcs* raster_class; + + } FT_Renderer_Class; + + + /************************************************************************** + * + * @function: + * FT_Get_Renderer + * + * @description: + * Retrieve the current renderer for a given glyph format. + * + * @input: + * library :: + * A handle to the library object. + * + * format :: + * The glyph format. + * + * @return: + * A renderer handle. 0~if none found. + * + * @note: + * An error will be returned if a module already exists by that name, or + * if the module requires a version of FreeType that is too great. + * + * To add a new renderer, simply use @FT_Add_Module. To retrieve a + * renderer by its name, use @FT_Get_Module. + */ + FT_EXPORT( FT_Renderer ) + FT_Get_Renderer( FT_Library library, + FT_Glyph_Format format ); + + + /************************************************************************** + * + * @function: + * FT_Set_Renderer + * + * @description: + * Set the current renderer to use, and set additional mode. + * + * @inout: + * library :: + * A handle to the library object. + * + * @input: + * renderer :: + * A handle to the renderer object. + * + * num_params :: + * The number of additional parameters. + * + * parameters :: + * Additional parameters. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * In case of success, the renderer will be used to convert glyph images + * in the renderer's known format into bitmaps. + * + * This doesn't change the current renderer for other formats. + * + * Currently, no FreeType renderer module uses `parameters`; you should + * thus always pass `NULL` as the value. + */ + FT_EXPORT( FT_Error ) + FT_Set_Renderer( FT_Library library, + FT_Renderer renderer, + FT_UInt num_params, + FT_Parameter* parameters ); + + /* */ + + +FT_END_HEADER + +#endif /* FTRENDER_H_ */ + + +/* END */ diff --git a/third_party/tlRender-install-Release/include/freetype2/freetype/ftsizes.h b/third_party/tlRender-install-Release/include/freetype2/freetype/ftsizes.h new file mode 100644 index 00000000..fdb89f24 --- /dev/null +++ b/third_party/tlRender-install-Release/include/freetype2/freetype/ftsizes.h @@ -0,0 +1,159 @@ +/**************************************************************************** + * + * ftsizes.h + * + * FreeType size objects management (specification). + * + * Copyright (C) 1996-2025 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + + /************************************************************************** + * + * Typical application would normally not need to use these functions. + * However, they have been placed in a public API for the rare cases where + * they are needed. + * + */ + + +#ifndef FTSIZES_H_ +#define FTSIZES_H_ + + +#include + +#ifdef FREETYPE_H +#error "freetype.h of FreeType 1 has been loaded!" +#error "Please fix the directory search order for header files" +#error "so that freetype.h of FreeType 2 is found first." +#endif + + +FT_BEGIN_HEADER + + + /************************************************************************** + * + * @section: + * sizes_management + * + * @title: + * Size Management + * + * @abstract: + * Managing multiple sizes per face. + * + * @description: + * When creating a new face object (e.g., with @FT_New_Face), an @FT_Size + * object is automatically created and used to store all pixel-size + * dependent information, available in the `face->size` field. + * + * It is however possible to create more sizes for a given face, mostly + * in order to manage several character pixel sizes of the same font + * family and style. See @FT_New_Size and @FT_Done_Size. + * + * Note that @FT_Set_Pixel_Sizes and @FT_Set_Char_Size only modify the + * contents of the current 'active' size; you thus need to use + * @FT_Activate_Size to change it. + * + * 99% of applications won't need the functions provided here, especially + * if they use the caching sub-system, so be cautious when using these. + * + */ + + + /************************************************************************** + * + * @function: + * FT_New_Size + * + * @description: + * Create a new size object from a given face object. + * + * @input: + * face :: + * A handle to a parent face object. + * + * @output: + * asize :: + * A handle to a new size object. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * You need to call @FT_Activate_Size in order to select the new size for + * upcoming calls to @FT_Set_Pixel_Sizes, @FT_Set_Char_Size, + * @FT_Load_Glyph, @FT_Load_Char, etc. + */ + FT_EXPORT( FT_Error ) + FT_New_Size( FT_Face face, + FT_Size* size ); + + + /************************************************************************** + * + * @function: + * FT_Done_Size + * + * @description: + * Discard a given size object. Note that @FT_Done_Face automatically + * discards all size objects allocated with @FT_New_Size. + * + * @input: + * size :: + * A handle to a target size object. + * + * @return: + * FreeType error code. 0~means success. + */ + FT_EXPORT( FT_Error ) + FT_Done_Size( FT_Size size ); + + + /************************************************************************** + * + * @function: + * FT_Activate_Size + * + * @description: + * Even though it is possible to create several size objects for a given + * face (see @FT_New_Size for details), functions like @FT_Load_Glyph or + * @FT_Load_Char only use the one that has been activated last to + * determine the 'current character pixel size'. + * + * This function can be used to 'activate' a previously created size + * object. + * + * @input: + * size :: + * A handle to a target size object. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * If `face` is the size's parent face object, this function changes the + * value of `face->size` to the input size handle. + */ + FT_EXPORT( FT_Error ) + FT_Activate_Size( FT_Size size ); + + /* */ + + +FT_END_HEADER + +#endif /* FTSIZES_H_ */ + + +/* END */ diff --git a/third_party/tlRender-install-Release/include/freetype2/freetype/ftsnames.h b/third_party/tlRender-install-Release/include/freetype2/freetype/ftsnames.h new file mode 100644 index 00000000..99728574 --- /dev/null +++ b/third_party/tlRender-install-Release/include/freetype2/freetype/ftsnames.h @@ -0,0 +1,272 @@ +/**************************************************************************** + * + * ftsnames.h + * + * Simple interface to access SFNT 'name' tables (which are used + * to hold font names, copyright info, notices, etc.) (specification). + * + * This is _not_ used to retrieve glyph names! + * + * Copyright (C) 1996-2025 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + +#ifndef FTSNAMES_H_ +#define FTSNAMES_H_ + + +#include +#include + +#ifdef FREETYPE_H +#error "freetype.h of FreeType 1 has been loaded!" +#error "Please fix the directory search order for header files" +#error "so that freetype.h of FreeType 2 is found first." +#endif + + +FT_BEGIN_HEADER + + + /************************************************************************** + * + * @section: + * sfnt_names + * + * @title: + * SFNT Names + * + * @abstract: + * Access the names embedded in TrueType and OpenType files. + * + * @description: + * The TrueType and OpenType specifications allow the inclusion of a + * special names table ('name') in font files. This table contains + * textual (and internationalized) information regarding the font, like + * family name, copyright, version, etc. + * + * The definitions below are used to access them if available. + * + * Note that this has nothing to do with glyph names! + * + */ + + + /************************************************************************** + * + * @struct: + * FT_SfntName + * + * @description: + * A structure used to model an SFNT 'name' table entry. + * + * @fields: + * platform_id :: + * The platform ID for `string`. See @TT_PLATFORM_XXX for possible + * values. + * + * encoding_id :: + * The encoding ID for `string`. See @TT_APPLE_ID_XXX, @TT_MAC_ID_XXX, + * @TT_ISO_ID_XXX, @TT_MS_ID_XXX, and @TT_ADOBE_ID_XXX for possible + * values. + * + * language_id :: + * The language ID for `string`. See @TT_MAC_LANGID_XXX and + * @TT_MS_LANGID_XXX for possible values. + * + * Registered OpenType values for `language_id` are always smaller than + * 0x8000; values equal or larger than 0x8000 usually indicate a + * language tag string (introduced in OpenType version 1.6). Use + * function @FT_Get_Sfnt_LangTag with `language_id` as its argument to + * retrieve the associated language tag. + * + * name_id :: + * An identifier for `string`. See @TT_NAME_ID_XXX for possible + * values. + * + * string :: + * The 'name' string. Note that its format differs depending on the + * (platform,encoding) pair, being either a string of bytes (without a + * terminating `NULL` byte) or containing UTF-16BE entities. + * + * string_len :: + * The length of `string` in bytes. + * + * @note: + * Please refer to the TrueType or OpenType specification for more + * details. + */ + typedef struct FT_SfntName_ + { + FT_UShort platform_id; + FT_UShort encoding_id; + FT_UShort language_id; + FT_UShort name_id; + + FT_Byte* string; /* this string is *not* null-terminated! */ + FT_UInt string_len; /* in bytes */ + + } FT_SfntName; + + + /************************************************************************** + * + * @function: + * FT_Get_Sfnt_Name_Count + * + * @description: + * Retrieve the number of name strings in the SFNT 'name' table. + * + * @input: + * face :: + * A handle to the source face. + * + * @return: + * The number of strings in the 'name' table. + * + * @note: + * This function always returns an error if the config macro + * `TT_CONFIG_OPTION_SFNT_NAMES` is not defined in `ftoption.h`. + */ + FT_EXPORT( FT_UInt ) + FT_Get_Sfnt_Name_Count( FT_Face face ); + + + /************************************************************************** + * + * @function: + * FT_Get_Sfnt_Name + * + * @description: + * Retrieve a string of the SFNT 'name' table for a given index. + * + * @input: + * face :: + * A handle to the source face. + * + * idx :: + * The index of the 'name' string. + * + * @output: + * aname :: + * The indexed @FT_SfntName structure. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * The `string` array returned in the `aname` structure is not + * null-terminated. Note that you don't have to deallocate `string` by + * yourself; FreeType takes care of it if you call @FT_Done_Face. + * + * Use @FT_Get_Sfnt_Name_Count to get the total number of available + * 'name' table entries, then do a loop until you get the right platform, + * encoding, and name ID. + * + * 'name' table format~1 entries can use language tags also, see + * @FT_Get_Sfnt_LangTag. + * + * This function always returns an error if the config macro + * `TT_CONFIG_OPTION_SFNT_NAMES` is not defined in `ftoption.h`. + */ + FT_EXPORT( FT_Error ) + FT_Get_Sfnt_Name( FT_Face face, + FT_UInt idx, + FT_SfntName *aname ); + + + /************************************************************************** + * + * @struct: + * FT_SfntLangTag + * + * @description: + * A structure to model a language tag entry from an SFNT 'name' table. + * + * @fields: + * string :: + * The language tag string, encoded in UTF-16BE (without trailing + * `NULL` bytes). + * + * string_len :: + * The length of `string` in **bytes**. + * + * @note: + * Please refer to the TrueType or OpenType specification for more + * details. + * + * @since: + * 2.8 + */ + typedef struct FT_SfntLangTag_ + { + FT_Byte* string; /* this string is *not* null-terminated! */ + FT_UInt string_len; /* in bytes */ + + } FT_SfntLangTag; + + + /************************************************************************** + * + * @function: + * FT_Get_Sfnt_LangTag + * + * @description: + * Retrieve the language tag associated with a language ID of an SFNT + * 'name' table entry. + * + * @input: + * face :: + * A handle to the source face. + * + * langID :: + * The language ID, as returned by @FT_Get_Sfnt_Name. This is always a + * value larger than 0x8000. + * + * @output: + * alangTag :: + * The language tag associated with the 'name' table entry's language + * ID. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * The `string` array returned in the `alangTag` structure is not + * null-terminated. Note that you don't have to deallocate `string` by + * yourself; FreeType takes care of it if you call @FT_Done_Face. + * + * Only 'name' table format~1 supports language tags. For format~0 + * tables, this function always returns FT_Err_Invalid_Table. For + * invalid format~1 language ID values, FT_Err_Invalid_Argument is + * returned. + * + * This function always returns an error if the config macro + * `TT_CONFIG_OPTION_SFNT_NAMES` is not defined in `ftoption.h`. + * + * @since: + * 2.8 + */ + FT_EXPORT( FT_Error ) + FT_Get_Sfnt_LangTag( FT_Face face, + FT_UInt langID, + FT_SfntLangTag *alangTag ); + + + /* */ + + +FT_END_HEADER + +#endif /* FTSNAMES_H_ */ + + +/* END */ diff --git a/third_party/tlRender-install-Release/include/freetype2/freetype/ftstroke.h b/third_party/tlRender-install-Release/include/freetype2/freetype/ftstroke.h new file mode 100644 index 00000000..2c4761c7 --- /dev/null +++ b/third_party/tlRender-install-Release/include/freetype2/freetype/ftstroke.h @@ -0,0 +1,773 @@ +/**************************************************************************** + * + * ftstroke.h + * + * FreeType path stroker (specification). + * + * Copyright (C) 2002-2025 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + +#ifndef FTSTROKE_H_ +#define FTSTROKE_H_ + +#include +#include + + +FT_BEGIN_HEADER + + + /************************************************************************** + * + * @section: + * glyph_stroker + * + * @title: + * Glyph Stroker + * + * @abstract: + * Generating bordered and stroked glyphs. + * + * @description: + * This component generates stroked outlines of a given vectorial glyph. + * It also allows you to retrieve the 'outside' and/or the 'inside' + * borders of the stroke. + * + * This can be useful to generate 'bordered' glyph, i.e., glyphs + * displayed with a colored (and anti-aliased) border around their + * shape. + * + * @order: + * FT_Stroker + * + * FT_Stroker_LineJoin + * FT_Stroker_LineCap + * FT_StrokerBorder + * + * FT_Outline_GetInsideBorder + * FT_Outline_GetOutsideBorder + * + * FT_Glyph_Stroke + * FT_Glyph_StrokeBorder + * + * FT_Stroker_New + * FT_Stroker_Set + * FT_Stroker_Rewind + * FT_Stroker_ParseOutline + * FT_Stroker_Done + * + * FT_Stroker_BeginSubPath + * FT_Stroker_EndSubPath + * + * FT_Stroker_LineTo + * FT_Stroker_ConicTo + * FT_Stroker_CubicTo + * + * FT_Stroker_GetBorderCounts + * FT_Stroker_ExportBorder + * FT_Stroker_GetCounts + * FT_Stroker_Export + * + */ + + + /************************************************************************** + * + * @type: + * FT_Stroker + * + * @description: + * Opaque handle to a path stroker object. + */ + typedef struct FT_StrokerRec_* FT_Stroker; + + + /************************************************************************** + * + * @enum: + * FT_Stroker_LineJoin + * + * @description: + * These values determine how two joining lines are rendered in a + * stroker. + * + * @values: + * FT_STROKER_LINEJOIN_ROUND :: + * Used to render rounded line joins. Circular arcs are used to join + * two lines smoothly. + * + * FT_STROKER_LINEJOIN_BEVEL :: + * Used to render beveled line joins. The outer corner of the joined + * lines is filled by enclosing the triangular region of the corner + * with a straight line between the outer corners of each stroke. + * + * FT_STROKER_LINEJOIN_MITER_FIXED :: + * Used to render mitered line joins, with fixed bevels if the miter + * limit is exceeded. The outer edges of the strokes for the two + * segments are extended until they meet at an angle. A bevel join + * (see above) is used if the segments meet at too sharp an angle and + * the outer edges meet beyond a distance corresponding to the meter + * limit. This prevents long spikes being created. + * `FT_STROKER_LINEJOIN_MITER_FIXED` generates a miter line join as + * used in PostScript and PDF. + * + * FT_STROKER_LINEJOIN_MITER_VARIABLE :: + * FT_STROKER_LINEJOIN_MITER :: + * Used to render mitered line joins, with variable bevels if the miter + * limit is exceeded. The intersection of the strokes is clipped + * perpendicularly to the bisector, at a distance corresponding to + * the miter limit. This prevents long spikes being created. + * `FT_STROKER_LINEJOIN_MITER_VARIABLE` generates a mitered line join + * as used in XPS. `FT_STROKER_LINEJOIN_MITER` is an alias for + * `FT_STROKER_LINEJOIN_MITER_VARIABLE`, retained for backward + * compatibility. + */ + typedef enum FT_Stroker_LineJoin_ + { + FT_STROKER_LINEJOIN_ROUND = 0, + FT_STROKER_LINEJOIN_BEVEL = 1, + FT_STROKER_LINEJOIN_MITER_VARIABLE = 2, + FT_STROKER_LINEJOIN_MITER = FT_STROKER_LINEJOIN_MITER_VARIABLE, + FT_STROKER_LINEJOIN_MITER_FIXED = 3 + + } FT_Stroker_LineJoin; + + + /************************************************************************** + * + * @enum: + * FT_Stroker_LineCap + * + * @description: + * These values determine how the end of opened sub-paths are rendered in + * a stroke. + * + * @values: + * FT_STROKER_LINECAP_BUTT :: + * The end of lines is rendered as a full stop on the last point + * itself. + * + * FT_STROKER_LINECAP_ROUND :: + * The end of lines is rendered as a half-circle around the last point. + * + * FT_STROKER_LINECAP_SQUARE :: + * The end of lines is rendered as a square around the last point. + */ + typedef enum FT_Stroker_LineCap_ + { + FT_STROKER_LINECAP_BUTT = 0, + FT_STROKER_LINECAP_ROUND, + FT_STROKER_LINECAP_SQUARE + + } FT_Stroker_LineCap; + + + /************************************************************************** + * + * @enum: + * FT_StrokerBorder + * + * @description: + * These values are used to select a given stroke border in + * @FT_Stroker_GetBorderCounts and @FT_Stroker_ExportBorder. + * + * @values: + * FT_STROKER_BORDER_LEFT :: + * Select the left border, relative to the drawing direction. + * + * FT_STROKER_BORDER_RIGHT :: + * Select the right border, relative to the drawing direction. + * + * @note: + * Applications are generally interested in the 'inside' and 'outside' + * borders. However, there is no direct mapping between these and the + * 'left' and 'right' ones, since this really depends on the glyph's + * drawing orientation, which varies between font formats. + * + * You can however use @FT_Outline_GetInsideBorder and + * @FT_Outline_GetOutsideBorder to get these. + */ + typedef enum FT_StrokerBorder_ + { + FT_STROKER_BORDER_LEFT = 0, + FT_STROKER_BORDER_RIGHT + + } FT_StrokerBorder; + + + /************************************************************************** + * + * @function: + * FT_Outline_GetInsideBorder + * + * @description: + * Retrieve the @FT_StrokerBorder value corresponding to the 'inside' + * borders of a given outline. + * + * @input: + * outline :: + * The source outline handle. + * + * @return: + * The border index. @FT_STROKER_BORDER_RIGHT for empty or invalid + * outlines. + */ + FT_EXPORT( FT_StrokerBorder ) + FT_Outline_GetInsideBorder( FT_Outline* outline ); + + + /************************************************************************** + * + * @function: + * FT_Outline_GetOutsideBorder + * + * @description: + * Retrieve the @FT_StrokerBorder value corresponding to the 'outside' + * borders of a given outline. + * + * @input: + * outline :: + * The source outline handle. + * + * @return: + * The border index. @FT_STROKER_BORDER_LEFT for empty or invalid + * outlines. + */ + FT_EXPORT( FT_StrokerBorder ) + FT_Outline_GetOutsideBorder( FT_Outline* outline ); + + + /************************************************************************** + * + * @function: + * FT_Stroker_New + * + * @description: + * Create a new stroker object. + * + * @input: + * library :: + * FreeType library handle. + * + * @output: + * astroker :: + * A new stroker object handle. `NULL` in case of error. + * + * @return: + * FreeType error code. 0~means success. + */ + FT_EXPORT( FT_Error ) + FT_Stroker_New( FT_Library library, + FT_Stroker *astroker ); + + + /************************************************************************** + * + * @function: + * FT_Stroker_Set + * + * @description: + * Reset a stroker object's attributes. + * + * @input: + * stroker :: + * The target stroker handle. + * + * radius :: + * The border radius. + * + * line_cap :: + * The line cap style. + * + * line_join :: + * The line join style. + * + * miter_limit :: + * The maximum reciprocal sine of half-angle at the miter join, + * expressed as 16.16 fixed-point value. + * + * @note: + * The `radius` is expressed in the same units as the outline + * coordinates. + * + * The `miter_limit` multiplied by the `radius` gives the maximum size + * of a miter spike, at which it is clipped for + * @FT_STROKER_LINEJOIN_MITER_VARIABLE or replaced with a bevel join for + * @FT_STROKER_LINEJOIN_MITER_FIXED. + * + * This function calls @FT_Stroker_Rewind automatically. + */ + FT_EXPORT( void ) + FT_Stroker_Set( FT_Stroker stroker, + FT_Fixed radius, + FT_Stroker_LineCap line_cap, + FT_Stroker_LineJoin line_join, + FT_Fixed miter_limit ); + + + /************************************************************************** + * + * @function: + * FT_Stroker_Rewind + * + * @description: + * Reset a stroker object without changing its attributes. You should + * call this function before beginning a new series of calls to + * @FT_Stroker_BeginSubPath or @FT_Stroker_EndSubPath. + * + * @input: + * stroker :: + * The target stroker handle. + */ + FT_EXPORT( void ) + FT_Stroker_Rewind( FT_Stroker stroker ); + + + /************************************************************************** + * + * @function: + * FT_Stroker_ParseOutline + * + * @description: + * A convenience function used to parse a whole outline with the stroker. + * The resulting outline(s) can be retrieved later by functions like + * @FT_Stroker_GetCounts and @FT_Stroker_Export. + * + * @input: + * stroker :: + * The target stroker handle. + * + * outline :: + * The source outline. + * + * opened :: + * A boolean. If~1, the outline is treated as an open path instead of + * a closed one. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * If `opened` is~0 (the default), the outline is treated as a closed + * path, and the stroker generates two distinct 'border' outlines. + * + * If `opened` is~1, the outline is processed as an open path, and the + * stroker generates a single 'stroke' outline. + * + * This function calls @FT_Stroker_Rewind automatically. + */ + FT_EXPORT( FT_Error ) + FT_Stroker_ParseOutline( FT_Stroker stroker, + FT_Outline* outline, + FT_Bool opened ); + + + /************************************************************************** + * + * @function: + * FT_Stroker_BeginSubPath + * + * @description: + * Start a new sub-path in the stroker. + * + * @input: + * stroker :: + * The target stroker handle. + * + * to :: + * A pointer to the start vector. + * + * open :: + * A boolean. If~1, the sub-path is treated as an open one. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * This function is useful when you need to stroke a path that is not + * stored as an @FT_Outline object. + */ + FT_EXPORT( FT_Error ) + FT_Stroker_BeginSubPath( FT_Stroker stroker, + FT_Vector* to, + FT_Bool open ); + + + /************************************************************************** + * + * @function: + * FT_Stroker_EndSubPath + * + * @description: + * Close the current sub-path in the stroker. + * + * @input: + * stroker :: + * The target stroker handle. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * You should call this function after @FT_Stroker_BeginSubPath. If the + * subpath was not 'opened', this function 'draws' a single line segment + * to the start position when needed. + */ + FT_EXPORT( FT_Error ) + FT_Stroker_EndSubPath( FT_Stroker stroker ); + + + /************************************************************************** + * + * @function: + * FT_Stroker_LineTo + * + * @description: + * 'Draw' a single line segment in the stroker's current sub-path, from + * the last position. + * + * @input: + * stroker :: + * The target stroker handle. + * + * to :: + * A pointer to the destination point. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * You should call this function between @FT_Stroker_BeginSubPath and + * @FT_Stroker_EndSubPath. + */ + FT_EXPORT( FT_Error ) + FT_Stroker_LineTo( FT_Stroker stroker, + FT_Vector* to ); + + + /************************************************************************** + * + * @function: + * FT_Stroker_ConicTo + * + * @description: + * 'Draw' a single quadratic Bezier in the stroker's current sub-path, + * from the last position. + * + * @input: + * stroker :: + * The target stroker handle. + * + * control :: + * A pointer to a Bezier control point. + * + * to :: + * A pointer to the destination point. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * You should call this function between @FT_Stroker_BeginSubPath and + * @FT_Stroker_EndSubPath. + */ + FT_EXPORT( FT_Error ) + FT_Stroker_ConicTo( FT_Stroker stroker, + FT_Vector* control, + FT_Vector* to ); + + + /************************************************************************** + * + * @function: + * FT_Stroker_CubicTo + * + * @description: + * 'Draw' a single cubic Bezier in the stroker's current sub-path, from + * the last position. + * + * @input: + * stroker :: + * The target stroker handle. + * + * control1 :: + * A pointer to the first Bezier control point. + * + * control2 :: + * A pointer to second Bezier control point. + * + * to :: + * A pointer to the destination point. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * You should call this function between @FT_Stroker_BeginSubPath and + * @FT_Stroker_EndSubPath. + */ + FT_EXPORT( FT_Error ) + FT_Stroker_CubicTo( FT_Stroker stroker, + FT_Vector* control1, + FT_Vector* control2, + FT_Vector* to ); + + + /************************************************************************** + * + * @function: + * FT_Stroker_GetBorderCounts + * + * @description: + * Call this function once you have finished parsing your paths with the + * stroker. It returns the number of points and contours necessary to + * export one of the 'border' or 'stroke' outlines generated by the + * stroker. + * + * @input: + * stroker :: + * The target stroker handle. + * + * border :: + * The border index. + * + * @output: + * anum_points :: + * The number of points. + * + * anum_contours :: + * The number of contours. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * When an outline, or a sub-path, is 'closed', the stroker generates two + * independent 'border' outlines, named 'left' and 'right'. + * + * When the outline, or a sub-path, is 'opened', the stroker merges the + * 'border' outlines with caps. The 'left' border receives all points, + * while the 'right' border becomes empty. + * + * Use the function @FT_Stroker_GetCounts instead if you want to retrieve + * the counts associated to both borders. + */ + FT_EXPORT( FT_Error ) + FT_Stroker_GetBorderCounts( FT_Stroker stroker, + FT_StrokerBorder border, + FT_UInt *anum_points, + FT_UInt *anum_contours ); + + + /************************************************************************** + * + * @function: + * FT_Stroker_ExportBorder + * + * @description: + * Call this function after @FT_Stroker_GetBorderCounts to export the + * corresponding border to your own @FT_Outline structure. + * + * Note that this function appends the border points and contours to your + * outline, but does not try to resize its arrays. + * + * @input: + * stroker :: + * The target stroker handle. + * + * border :: + * The border index. + * + * outline :: + * The target outline handle. + * + * @note: + * Always call this function after @FT_Stroker_GetBorderCounts to get + * sure that there is enough room in your @FT_Outline object to receive + * all new data. + * + * When an outline, or a sub-path, is 'closed', the stroker generates two + * independent 'border' outlines, named 'left' and 'right'. + * + * When the outline, or a sub-path, is 'opened', the stroker merges the + * 'border' outlines with caps. The 'left' border receives all points, + * while the 'right' border becomes empty. + * + * Use the function @FT_Stroker_Export instead if you want to retrieve + * all borders at once. + */ + FT_EXPORT( void ) + FT_Stroker_ExportBorder( FT_Stroker stroker, + FT_StrokerBorder border, + FT_Outline* outline ); + + + /************************************************************************** + * + * @function: + * FT_Stroker_GetCounts + * + * @description: + * Call this function once you have finished parsing your paths with the + * stroker. It returns the number of points and contours necessary to + * export all points/borders from the stroked outline/path. + * + * @input: + * stroker :: + * The target stroker handle. + * + * @output: + * anum_points :: + * The number of points. + * + * anum_contours :: + * The number of contours. + * + * @return: + * FreeType error code. 0~means success. + */ + FT_EXPORT( FT_Error ) + FT_Stroker_GetCounts( FT_Stroker stroker, + FT_UInt *anum_points, + FT_UInt *anum_contours ); + + + /************************************************************************** + * + * @function: + * FT_Stroker_Export + * + * @description: + * Call this function after @FT_Stroker_GetBorderCounts to export all + * borders to your own @FT_Outline structure. + * + * Note that this function appends the border points and contours to your + * outline, but does not try to resize its arrays. + * + * @input: + * stroker :: + * The target stroker handle. + * + * outline :: + * The target outline handle. + */ + FT_EXPORT( void ) + FT_Stroker_Export( FT_Stroker stroker, + FT_Outline* outline ); + + + /************************************************************************** + * + * @function: + * FT_Stroker_Done + * + * @description: + * Destroy a stroker object. + * + * @input: + * stroker :: + * A stroker handle. Can be `NULL`. + */ + FT_EXPORT( void ) + FT_Stroker_Done( FT_Stroker stroker ); + + + /************************************************************************** + * + * @function: + * FT_Glyph_Stroke + * + * @description: + * Stroke a given outline glyph object with a given stroker. + * + * @inout: + * pglyph :: + * Source glyph handle on input, new glyph handle on output. + * + * @input: + * stroker :: + * A stroker handle. + * + * destroy :: + * A Boolean. If~1, the source glyph object is destroyed on success. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * The source glyph is untouched in case of error. + * + * Adding stroke may yield a significantly wider and taller glyph + * depending on how large of a radius was used to stroke the glyph. You + * may need to manually adjust horizontal and vertical advance amounts to + * account for this added size. + */ + FT_EXPORT( FT_Error ) + FT_Glyph_Stroke( FT_Glyph *pglyph, + FT_Stroker stroker, + FT_Bool destroy ); + + + /************************************************************************** + * + * @function: + * FT_Glyph_StrokeBorder + * + * @description: + * Stroke a given outline glyph object with a given stroker, but only + * return either its inside or outside border. + * + * @inout: + * pglyph :: + * Source glyph handle on input, new glyph handle on output. + * + * @input: + * stroker :: + * A stroker handle. + * + * inside :: + * A Boolean. If~1, return the inside border, otherwise the outside + * border. + * + * destroy :: + * A Boolean. If~1, the source glyph object is destroyed on success. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * The source glyph is untouched in case of error. + * + * Adding stroke may yield a significantly wider and taller glyph + * depending on how large of a radius was used to stroke the glyph. You + * may need to manually adjust horizontal and vertical advance amounts to + * account for this added size. + */ + FT_EXPORT( FT_Error ) + FT_Glyph_StrokeBorder( FT_Glyph *pglyph, + FT_Stroker stroker, + FT_Bool inside, + FT_Bool destroy ); + + /* */ + +FT_END_HEADER + +#endif /* FTSTROKE_H_ */ + + +/* END */ + + +/* Local Variables: */ +/* coding: utf-8 */ +/* End: */ diff --git a/third_party/tlRender-install-Release/include/freetype2/freetype/ftsynth.h b/third_party/tlRender-install-Release/include/freetype2/freetype/ftsynth.h new file mode 100644 index 00000000..93499a4b --- /dev/null +++ b/third_party/tlRender-install-Release/include/freetype2/freetype/ftsynth.h @@ -0,0 +1,104 @@ +/**************************************************************************** + * + * ftsynth.h + * + * FreeType synthesizing code for emboldening and slanting + * (specification). + * + * Copyright (C) 2000-2025 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + + /*************************************************************************/ + /*************************************************************************/ + /*************************************************************************/ + /*************************************************************************/ + /*************************************************************************/ + /********* *********/ + /********* WARNING, THIS IS ALPHA CODE! THIS API *********/ + /********* IS DUE TO CHANGE UNTIL STRICTLY NOTIFIED BY THE *********/ + /********* FREETYPE DEVELOPMENT TEAM *********/ + /********* *********/ + /*************************************************************************/ + /*************************************************************************/ + /*************************************************************************/ + /*************************************************************************/ + /*************************************************************************/ + + + /* Main reason for not lifting the functions in this module to a */ + /* 'standard' API is that the used parameters for emboldening and */ + /* slanting are not configurable. Consider the functions as a */ + /* code resource that should be copied into the application and */ + /* adapted to the particular needs. */ + + +#ifndef FTSYNTH_H_ +#define FTSYNTH_H_ + + +#include + +#ifdef FREETYPE_H +#error "freetype.h of FreeType 1 has been loaded!" +#error "Please fix the directory search order for header files" +#error "so that freetype.h of FreeType 2 is found first." +#endif + + +FT_BEGIN_HEADER + + /* Embolden a glyph by a 'reasonable' value (which is highly a matter of */ + /* taste). This function is actually a convenience function, providing */ + /* a wrapper for @FT_Outline_Embolden and @FT_Bitmap_Embolden. */ + /* */ + /* For emboldened outlines the height, width, and advance metrics are */ + /* increased by the strength of the emboldening -- this even affects */ + /* mono-width fonts! */ + /* */ + /* You can also call @FT_Outline_Get_CBox to get precise values. */ + FT_EXPORT( void ) + FT_GlyphSlot_Embolden( FT_GlyphSlot slot ); + + /* Precisely adjust the glyph weight either horizontally or vertically. */ + /* The `xdelta` and `ydelta` values are fractions of the face Em size */ + /* (in fixed-point format). Considering that a regular face would have */ + /* stem widths on the order of 0.1 Em, a delta of 0.05 (0x0CCC) should */ + /* be very noticeable. To increase or decrease the weight, use positive */ + /* or negative values, respectively. */ + FT_EXPORT( void ) + FT_GlyphSlot_AdjustWeight( FT_GlyphSlot slot, + FT_Fixed xdelta, + FT_Fixed ydelta ); + + + /* Slant an outline glyph to the right by about 12 degrees. */ + FT_EXPORT( void ) + FT_GlyphSlot_Oblique( FT_GlyphSlot slot ); + + /* Slant an outline glyph by a given sine of an angle. You can apply */ + /* slant along either x- or y-axis by choosing a corresponding non-zero */ + /* argument. If both slants are non-zero, some affine transformation */ + /* will result. */ + FT_EXPORT( void ) + FT_GlyphSlot_Slant( FT_GlyphSlot slot, + FT_Fixed xslant, + FT_Fixed yslant ); + + /* */ + + +FT_END_HEADER + +#endif /* FTSYNTH_H_ */ + + +/* END */ diff --git a/third_party/tlRender-install-Release/include/freetype2/freetype/ftsystem.h b/third_party/tlRender-install-Release/include/freetype2/freetype/ftsystem.h new file mode 100644 index 00000000..1de9f8e6 --- /dev/null +++ b/third_party/tlRender-install-Release/include/freetype2/freetype/ftsystem.h @@ -0,0 +1,350 @@ +/**************************************************************************** + * + * ftsystem.h + * + * FreeType low-level system interface definition (specification). + * + * Copyright (C) 1996-2025 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + +#ifndef FTSYSTEM_H_ +#define FTSYSTEM_H_ + + + + +FT_BEGIN_HEADER + + + /************************************************************************** + * + * @section: + * system_interface + * + * @title: + * System Interface + * + * @abstract: + * How FreeType manages memory and i/o. + * + * @description: + * This section contains various definitions related to memory management + * and i/o access. You need to understand this information if you want to + * use a custom memory manager or you own i/o streams. + * + */ + + + /************************************************************************** + * + * M E M O R Y M A N A G E M E N T + * + */ + + + /************************************************************************** + * + * @type: + * FT_Memory + * + * @description: + * A handle to a given memory manager object, defined with an + * @FT_MemoryRec structure. + * + */ + typedef struct FT_MemoryRec_* FT_Memory; + + + /************************************************************************** + * + * @functype: + * FT_Alloc_Func + * + * @description: + * A function used to allocate `size` bytes from `memory`. + * + * @input: + * memory :: + * A handle to the source memory manager. + * + * size :: + * The size in bytes to allocate. + * + * @return: + * Address of new memory block. 0~in case of failure. + * + */ + typedef void* + (*FT_Alloc_Func)( FT_Memory memory, + long size ); + + + /************************************************************************** + * + * @functype: + * FT_Free_Func + * + * @description: + * A function used to release a given block of memory. + * + * @input: + * memory :: + * A handle to the source memory manager. + * + * block :: + * The address of the target memory block. + * + */ + typedef void + (*FT_Free_Func)( FT_Memory memory, + void* block ); + + + /************************************************************************** + * + * @functype: + * FT_Realloc_Func + * + * @description: + * A function used to re-allocate a given block of memory. + * + * @input: + * memory :: + * A handle to the source memory manager. + * + * cur_size :: + * The block's current size in bytes. + * + * new_size :: + * The block's requested new size. + * + * block :: + * The block's current address. + * + * @return: + * New block address. 0~in case of memory shortage. + * + * @note: + * In case of error, the old block must still be available. + * + */ + typedef void* + (*FT_Realloc_Func)( FT_Memory memory, + long cur_size, + long new_size, + void* block ); + + + /************************************************************************** + * + * @struct: + * FT_MemoryRec + * + * @description: + * A structure used to describe a given memory manager to FreeType~2. + * + * @fields: + * user :: + * A generic typeless pointer for user data. + * + * alloc :: + * A pointer type to an allocation function. + * + * free :: + * A pointer type to an memory freeing function. + * + * realloc :: + * A pointer type to a reallocation function. + * + */ + struct FT_MemoryRec_ + { + void* user; + FT_Alloc_Func alloc; + FT_Free_Func free; + FT_Realloc_Func realloc; + }; + + + /************************************************************************** + * + * I / O M A N A G E M E N T + * + */ + + + /************************************************************************** + * + * @type: + * FT_Stream + * + * @description: + * A handle to an input stream. + * + * @also: + * See @FT_StreamRec for the publicly accessible fields of a given stream + * object. + * + */ + typedef struct FT_StreamRec_* FT_Stream; + + + /************************************************************************** + * + * @struct: + * FT_StreamDesc + * + * @description: + * A union type used to store either a long or a pointer. This is used + * to store a file descriptor or a `FILE*` in an input stream. + * + */ + typedef union FT_StreamDesc_ + { + long value; + void* pointer; + + } FT_StreamDesc; + + + /************************************************************************** + * + * @functype: + * FT_Stream_IoFunc + * + * @description: + * A function used to seek and read data from a given input stream. + * + * @input: + * stream :: + * A handle to the source stream. + * + * offset :: + * The offset from the start of the stream to seek to. + * + * buffer :: + * The address of the read buffer. + * + * count :: + * The number of bytes to read from the stream. + * + * @return: + * If count >~0, return the number of bytes effectively read by the + * stream (after seeking to `offset`). If count ==~0, return the status + * of the seek operation (non-zero indicates an error). + * + */ + typedef unsigned long + (*FT_Stream_IoFunc)( FT_Stream stream, + unsigned long offset, + unsigned char* buffer, + unsigned long count ); + + + /************************************************************************** + * + * @functype: + * FT_Stream_CloseFunc + * + * @description: + * A function used to close a given input stream. + * + * @input: + * stream :: + * A handle to the target stream. + * + */ + typedef void + (*FT_Stream_CloseFunc)( FT_Stream stream ); + + + /************************************************************************** + * + * @struct: + * FT_StreamRec + * + * @description: + * A structure used to describe an input stream. + * + * @input: + * base :: + * For memory-based streams, this is the address of the first stream + * byte in memory. This field should always be set to `NULL` for + * disk-based streams. + * + * size :: + * The stream size in bytes. + * + * In case of compressed streams where the size is unknown before + * actually doing the decompression, the value is set to 0x7FFFFFFF. + * (Note that this size value can occur for normal streams also; it is + * thus just a hint.) + * + * pos :: + * The current position within the stream. + * + * descriptor :: + * This field is a union that can hold an integer or a pointer. It is + * used by stream implementations to store file descriptors or `FILE*` + * pointers. + * + * pathname :: + * This field is completely ignored by FreeType. However, it is often + * useful during debugging to use it to store the stream's filename + * (where available). + * + * read :: + * The stream's input function. + * + * close :: + * The stream's close function. + * + * memory :: + * The memory manager to use to preload frames. This is set internally + * by FreeType and shouldn't be touched by stream implementations. + * + * cursor :: + * This field is set and used internally by FreeType when parsing + * frames. In particular, the `FT_GET_XXX` macros use this instead of + * the `pos` field. + * + * limit :: + * This field is set and used internally by FreeType when parsing + * frames. + * + */ + typedef struct FT_StreamRec_ + { + unsigned char* base; + unsigned long size; + unsigned long pos; + + FT_StreamDesc descriptor; + FT_StreamDesc pathname; + FT_Stream_IoFunc read; + FT_Stream_CloseFunc close; + + FT_Memory memory; + unsigned char* cursor; + unsigned char* limit; + + } FT_StreamRec; + + /* */ + + +FT_END_HEADER + +#endif /* FTSYSTEM_H_ */ + + +/* END */ diff --git a/third_party/tlRender-install-Release/include/freetype2/freetype/fttrigon.h b/third_party/tlRender-install-Release/include/freetype2/freetype/fttrigon.h new file mode 100644 index 00000000..ed7bd06a --- /dev/null +++ b/third_party/tlRender-install-Release/include/freetype2/freetype/fttrigon.h @@ -0,0 +1,350 @@ +/**************************************************************************** + * + * fttrigon.h + * + * FreeType trigonometric functions (specification). + * + * Copyright (C) 2001-2025 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + +#ifndef FTTRIGON_H_ +#define FTTRIGON_H_ + +#include + +#ifdef FREETYPE_H +#error "freetype.h of FreeType 1 has been loaded!" +#error "Please fix the directory search order for header files" +#error "so that freetype.h of FreeType 2 is found first." +#endif + + +FT_BEGIN_HEADER + + + /************************************************************************** + * + * @section: + * computations + * + */ + + + /************************************************************************** + * + * @type: + * FT_Angle + * + * @description: + * This type is used to model angle values in FreeType. Note that the + * angle is a 16.16 fixed-point value expressed in degrees. + * + */ + typedef FT_Fixed FT_Angle; + + + /************************************************************************** + * + * @macro: + * FT_ANGLE_PI + * + * @description: + * The angle pi expressed in @FT_Angle units. + * + */ +#define FT_ANGLE_PI ( 180L << 16 ) + + + /************************************************************************** + * + * @macro: + * FT_ANGLE_2PI + * + * @description: + * The angle 2*pi expressed in @FT_Angle units. + * + */ +#define FT_ANGLE_2PI ( FT_ANGLE_PI * 2 ) + + + /************************************************************************** + * + * @macro: + * FT_ANGLE_PI2 + * + * @description: + * The angle pi/2 expressed in @FT_Angle units. + * + */ +#define FT_ANGLE_PI2 ( FT_ANGLE_PI / 2 ) + + + /************************************************************************** + * + * @macro: + * FT_ANGLE_PI4 + * + * @description: + * The angle pi/4 expressed in @FT_Angle units. + * + */ +#define FT_ANGLE_PI4 ( FT_ANGLE_PI / 4 ) + + + /************************************************************************** + * + * @function: + * FT_Sin + * + * @description: + * Return the sinus of a given angle in fixed-point format. + * + * @input: + * angle :: + * The input angle. + * + * @return: + * The sinus value. + * + * @note: + * If you need both the sinus and cosinus for a given angle, use the + * function @FT_Vector_Unit. + * + */ + FT_EXPORT( FT_Fixed ) + FT_Sin( FT_Angle angle ); + + + /************************************************************************** + * + * @function: + * FT_Cos + * + * @description: + * Return the cosinus of a given angle in fixed-point format. + * + * @input: + * angle :: + * The input angle. + * + * @return: + * The cosinus value. + * + * @note: + * If you need both the sinus and cosinus for a given angle, use the + * function @FT_Vector_Unit. + * + */ + FT_EXPORT( FT_Fixed ) + FT_Cos( FT_Angle angle ); + + + /************************************************************************** + * + * @function: + * FT_Tan + * + * @description: + * Return the tangent of a given angle in fixed-point format. + * + * @input: + * angle :: + * The input angle. + * + * @return: + * The tangent value. + * + */ + FT_EXPORT( FT_Fixed ) + FT_Tan( FT_Angle angle ); + + + /************************************************************************** + * + * @function: + * FT_Atan2 + * + * @description: + * Return the arc-tangent corresponding to a given vector (x,y) in the 2d + * plane. + * + * @input: + * x :: + * The horizontal vector coordinate. + * + * y :: + * The vertical vector coordinate. + * + * @return: + * The arc-tangent value (i.e. angle). + * + */ + FT_EXPORT( FT_Angle ) + FT_Atan2( FT_Fixed x, + FT_Fixed y ); + + + /************************************************************************** + * + * @function: + * FT_Angle_Diff + * + * @description: + * Return the difference between two angles. The result is always + * constrained to the ]-PI..PI] interval. + * + * @input: + * angle1 :: + * First angle. + * + * angle2 :: + * Second angle. + * + * @return: + * Constrained value of `angle2-angle1`. + * + */ + FT_EXPORT( FT_Angle ) + FT_Angle_Diff( FT_Angle angle1, + FT_Angle angle2 ); + + + /************************************************************************** + * + * @function: + * FT_Vector_Unit + * + * @description: + * Return the unit vector corresponding to a given angle. After the + * call, the value of `vec.x` will be `cos(angle)`, and the value of + * `vec.y` will be `sin(angle)`. + * + * This function is useful to retrieve both the sinus and cosinus of a + * given angle quickly. + * + * @output: + * vec :: + * The address of target vector. + * + * @input: + * angle :: + * The input angle. + * + */ + FT_EXPORT( void ) + FT_Vector_Unit( FT_Vector* vec, + FT_Angle angle ); + + + /************************************************************************** + * + * @function: + * FT_Vector_Rotate + * + * @description: + * Rotate a vector by a given angle. + * + * @inout: + * vec :: + * The address of target vector. + * + * @input: + * angle :: + * The input angle. + * + */ + FT_EXPORT( void ) + FT_Vector_Rotate( FT_Vector* vec, + FT_Angle angle ); + + + /************************************************************************** + * + * @function: + * FT_Vector_Length + * + * @description: + * Return the length of a given vector. + * + * @input: + * vec :: + * The address of target vector. + * + * @return: + * The vector length, expressed in the same units that the original + * vector coordinates. + * + */ + FT_EXPORT( FT_Fixed ) + FT_Vector_Length( FT_Vector* vec ); + + + /************************************************************************** + * + * @function: + * FT_Vector_Polarize + * + * @description: + * Compute both the length and angle of a given vector. + * + * @input: + * vec :: + * The address of source vector. + * + * @output: + * length :: + * The vector length. + * + * angle :: + * The vector angle. + * + */ + FT_EXPORT( void ) + FT_Vector_Polarize( FT_Vector* vec, + FT_Fixed *length, + FT_Angle *angle ); + + + /************************************************************************** + * + * @function: + * FT_Vector_From_Polar + * + * @description: + * Compute vector coordinates from a length and angle. + * + * @output: + * vec :: + * The address of source vector. + * + * @input: + * length :: + * The vector length. + * + * angle :: + * The vector angle. + * + */ + FT_EXPORT( void ) + FT_Vector_From_Polar( FT_Vector* vec, + FT_Fixed length, + FT_Angle angle ); + + /* */ + + +FT_END_HEADER + +#endif /* FTTRIGON_H_ */ + + +/* END */ diff --git a/third_party/tlRender-install-Release/include/freetype2/freetype/fttypes.h b/third_party/tlRender-install-Release/include/freetype2/freetype/fttypes.h new file mode 100644 index 00000000..e207c5eb --- /dev/null +++ b/third_party/tlRender-install-Release/include/freetype2/freetype/fttypes.h @@ -0,0 +1,617 @@ +/**************************************************************************** + * + * fttypes.h + * + * FreeType simple types definitions (specification only). + * + * Copyright (C) 1996-2025 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + +#ifndef FTTYPES_H_ +#define FTTYPES_H_ + + +#include +#include FT_CONFIG_CONFIG_H +#include +#include + +#include + + +FT_BEGIN_HEADER + + + /************************************************************************** + * + * @section: + * basic_types + * + * @title: + * Basic Data Types + * + * @abstract: + * The basic data types defined by the library. + * + * @description: + * This section contains the basic data types defined by FreeType~2, + * ranging from simple scalar types to bitmap descriptors. More + * font-specific structures are defined in a different section. Note + * that FreeType does not use floating-point data types. Fractional + * values are represented by fixed-point integers, with lower bits + * storing the fractional part. + * + * @order: + * FT_Byte + * FT_Bytes + * FT_Char + * FT_Int + * FT_UInt + * FT_Int16 + * FT_UInt16 + * FT_Int32 + * FT_UInt32 + * FT_Int64 + * FT_UInt64 + * FT_Short + * FT_UShort + * FT_Long + * FT_ULong + * FT_Bool + * FT_Offset + * FT_PtrDist + * FT_String + * FT_Tag + * FT_Error + * FT_Fixed + * FT_Pointer + * FT_Pos + * FT_Vector + * FT_BBox + * FT_Matrix + * FT_FWord + * FT_UFWord + * FT_F2Dot14 + * FT_UnitVector + * FT_F26Dot6 + * FT_Data + * + * FT_MAKE_TAG + * + * FT_Generic + * FT_Generic_Finalizer + * + * FT_Bitmap + * FT_Pixel_Mode + * FT_Palette_Mode + * FT_Glyph_Format + * FT_IMAGE_TAG + * + */ + + + /************************************************************************** + * + * @type: + * FT_Bool + * + * @description: + * A typedef of unsigned char, used for simple booleans. As usual, + * values 1 and~0 represent true and false, respectively. + */ + typedef unsigned char FT_Bool; + + + /************************************************************************** + * + * @type: + * FT_FWord + * + * @description: + * A signed 16-bit integer used to store a distance in original font + * units. + */ + typedef signed short FT_FWord; /* distance in FUnits */ + + + /************************************************************************** + * + * @type: + * FT_UFWord + * + * @description: + * An unsigned 16-bit integer used to store a distance in original font + * units. + */ + typedef unsigned short FT_UFWord; /* unsigned distance */ + + + /************************************************************************** + * + * @type: + * FT_Char + * + * @description: + * A simple typedef for the _signed_ char type. + */ + typedef signed char FT_Char; + + + /************************************************************************** + * + * @type: + * FT_Byte + * + * @description: + * A simple typedef for the _unsigned_ char type. + */ + typedef unsigned char FT_Byte; + + + /************************************************************************** + * + * @type: + * FT_Bytes + * + * @description: + * A typedef for constant memory areas. + */ + typedef const FT_Byte* FT_Bytes; + + + /************************************************************************** + * + * @type: + * FT_Tag + * + * @description: + * A typedef for 32-bit tags (as used in the SFNT format). + */ + typedef FT_UInt32 FT_Tag; + + + /************************************************************************** + * + * @type: + * FT_String + * + * @description: + * A simple typedef for the char type, usually used for strings. + */ + typedef char FT_String; + + + /************************************************************************** + * + * @type: + * FT_Short + * + * @description: + * A typedef for signed short. + */ + typedef signed short FT_Short; + + + /************************************************************************** + * + * @type: + * FT_UShort + * + * @description: + * A typedef for unsigned short. + */ + typedef unsigned short FT_UShort; + + + /************************************************************************** + * + * @type: + * FT_Int + * + * @description: + * A typedef for the int type. + */ + typedef signed int FT_Int; + + + /************************************************************************** + * + * @type: + * FT_UInt + * + * @description: + * A typedef for the unsigned int type. + */ + typedef unsigned int FT_UInt; + + + /************************************************************************** + * + * @type: + * FT_Long + * + * @description: + * A typedef for signed long. + */ + typedef signed long FT_Long; + + + /************************************************************************** + * + * @type: + * FT_ULong + * + * @description: + * A typedef for unsigned long. + */ + typedef unsigned long FT_ULong; + + + /************************************************************************** + * + * @type: + * FT_F2Dot14 + * + * @description: + * A signed 2.14 fixed-point type used for unit vectors. + */ + typedef signed short FT_F2Dot14; + + + /************************************************************************** + * + * @type: + * FT_F26Dot6 + * + * @description: + * A signed 26.6 fixed-point type used for vectorial pixel coordinates. + */ + typedef signed long FT_F26Dot6; + + + /************************************************************************** + * + * @type: + * FT_Fixed + * + * @description: + * This type is used to store 16.16 fixed-point values, like scaling + * values or matrix coefficients. + */ + typedef signed long FT_Fixed; + + + /************************************************************************** + * + * @type: + * FT_Error + * + * @description: + * The FreeType error code type. A value of~0 is always interpreted as a + * successful operation. + */ + typedef int FT_Error; + + + /************************************************************************** + * + * @type: + * FT_Pointer + * + * @description: + * A simple typedef for a typeless pointer. + */ + typedef void* FT_Pointer; + + + /************************************************************************** + * + * @type: + * FT_Offset + * + * @description: + * This is equivalent to the ANSI~C `size_t` type, i.e., the largest + * _unsigned_ integer type used to express a file size or position, or a + * memory block size. + */ + typedef size_t FT_Offset; + + + /************************************************************************** + * + * @type: + * FT_PtrDist + * + * @description: + * This is equivalent to the ANSI~C `ptrdiff_t` type, i.e., the largest + * _signed_ integer type used to express the distance between two + * pointers. + */ + typedef ft_ptrdiff_t FT_PtrDist; + + + /************************************************************************** + * + * @struct: + * FT_UnitVector + * + * @description: + * A simple structure used to store a 2D vector unit vector. Uses + * FT_F2Dot14 types. + * + * @fields: + * x :: + * Horizontal coordinate. + * + * y :: + * Vertical coordinate. + */ + typedef struct FT_UnitVector_ + { + FT_F2Dot14 x; + FT_F2Dot14 y; + + } FT_UnitVector; + + + /************************************************************************** + * + * @struct: + * FT_Matrix + * + * @description: + * A simple structure used to store a 2x2 matrix. Coefficients are in + * 16.16 fixed-point format. The computation performed is: + * + * ``` + * x' = x*xx + y*xy + * y' = x*yx + y*yy + * ``` + * + * @fields: + * xx :: + * Matrix coefficient. + * + * xy :: + * Matrix coefficient. + * + * yx :: + * Matrix coefficient. + * + * yy :: + * Matrix coefficient. + */ + typedef struct FT_Matrix_ + { + FT_Fixed xx, xy; + FT_Fixed yx, yy; + + } FT_Matrix; + + + /************************************************************************** + * + * @struct: + * FT_Data + * + * @description: + * Read-only binary data represented as a pointer and a length. + * + * @fields: + * pointer :: + * The data. + * + * length :: + * The length of the data in bytes. + */ + typedef struct FT_Data_ + { + const FT_Byte* pointer; + FT_UInt length; + + } FT_Data; + + + /************************************************************************** + * + * @functype: + * FT_Generic_Finalizer + * + * @description: + * Describe a function used to destroy the 'client' data of any FreeType + * object. See the description of the @FT_Generic type for details of + * usage. + * + * @input: + * The address of the FreeType object that is under finalization. Its + * client data is accessed through its `generic` field. + */ + typedef void (*FT_Generic_Finalizer)( void* object ); + + + /************************************************************************** + * + * @struct: + * FT_Generic + * + * @description: + * Client applications often need to associate their own data to a + * variety of FreeType core objects. For example, a text layout API + * might want to associate a glyph cache to a given size object. + * + * Some FreeType object contains a `generic` field, of type `FT_Generic`, + * which usage is left to client applications and font servers. + * + * It can be used to store a pointer to client-specific data, as well as + * the address of a 'finalizer' function, which will be called by + * FreeType when the object is destroyed (for example, the previous + * client example would put the address of the glyph cache destructor in + * the `finalizer` field). + * + * @fields: + * data :: + * A typeless pointer to any client-specified data. This field is + * completely ignored by the FreeType library. + * + * finalizer :: + * A pointer to a 'generic finalizer' function, which will be called + * when the object is destroyed. If this field is set to `NULL`, no + * code will be called. + */ + typedef struct FT_Generic_ + { + void* data; + FT_Generic_Finalizer finalizer; + + } FT_Generic; + + + /************************************************************************** + * + * @macro: + * FT_MAKE_TAG + * + * @description: + * This macro converts four-letter tags that are used to label TrueType + * tables into an `FT_Tag` type, to be used within FreeType. + * + * @note: + * The produced values **must** be 32-bit integers. Don't redefine this + * macro. + */ +#define FT_MAKE_TAG( _x1, _x2, _x3, _x4 ) \ + ( ( FT_STATIC_BYTE_CAST( FT_Tag, _x1 ) << 24 ) | \ + ( FT_STATIC_BYTE_CAST( FT_Tag, _x2 ) << 16 ) | \ + ( FT_STATIC_BYTE_CAST( FT_Tag, _x3 ) << 8 ) | \ + FT_STATIC_BYTE_CAST( FT_Tag, _x4 ) ) + + + /*************************************************************************/ + /*************************************************************************/ + /* */ + /* L I S T M A N A G E M E N T */ + /* */ + /*************************************************************************/ + /*************************************************************************/ + + + /************************************************************************** + * + * @section: + * list_processing + * + */ + + + /************************************************************************** + * + * @type: + * FT_ListNode + * + * @description: + * Many elements and objects in FreeType are listed through an @FT_List + * record (see @FT_ListRec). As its name suggests, an FT_ListNode is a + * handle to a single list element. + */ + typedef struct FT_ListNodeRec_* FT_ListNode; + + + /************************************************************************** + * + * @type: + * FT_List + * + * @description: + * A handle to a list record (see @FT_ListRec). + */ + typedef struct FT_ListRec_* FT_List; + + + /************************************************************************** + * + * @struct: + * FT_ListNodeRec + * + * @description: + * A structure used to hold a single list element. + * + * @fields: + * prev :: + * The previous element in the list. `NULL` if first. + * + * next :: + * The next element in the list. `NULL` if last. + * + * data :: + * A typeless pointer to the listed object. + */ + typedef struct FT_ListNodeRec_ + { + FT_ListNode prev; + FT_ListNode next; + void* data; + + } FT_ListNodeRec; + + + /************************************************************************** + * + * @struct: + * FT_ListRec + * + * @description: + * A structure used to hold a simple doubly-linked list. These are used + * in many parts of FreeType. + * + * @fields: + * head :: + * The head (first element) of doubly-linked list. + * + * tail :: + * The tail (last element) of doubly-linked list. + */ + typedef struct FT_ListRec_ + { + FT_ListNode head; + FT_ListNode tail; + + } FT_ListRec; + + /* */ + + +#define FT_IS_EMPTY( list ) ( (list).head == 0 ) +#define FT_BOOL( x ) FT_STATIC_CAST( FT_Bool, (x) != 0 ) + + /* concatenate C tokens */ +#define FT_ERR_XCAT( x, y ) x ## y +#define FT_ERR_CAT( x, y ) FT_ERR_XCAT( x, y ) + + /* see `ftmoderr.h` for descriptions of the following macros */ + +#define FT_ERR( e ) FT_ERR_CAT( FT_ERR_PREFIX, e ) + +#define FT_ERROR_BASE( x ) ( (x) & 0xFF ) +#define FT_ERROR_MODULE( x ) ( (x) & 0xFF00U ) + +#define FT_ERR_EQ( x, e ) \ + ( FT_ERROR_BASE( x ) == FT_ERROR_BASE( FT_ERR( e ) ) ) +#define FT_ERR_NEQ( x, e ) \ + ( FT_ERROR_BASE( x ) != FT_ERROR_BASE( FT_ERR( e ) ) ) + + +FT_END_HEADER + +#endif /* FTTYPES_H_ */ + + +/* END */ diff --git a/third_party/tlRender-install-Release/include/freetype2/freetype/ftwinfnt.h b/third_party/tlRender-install-Release/include/freetype2/freetype/ftwinfnt.h new file mode 100644 index 00000000..78609d57 --- /dev/null +++ b/third_party/tlRender-install-Release/include/freetype2/freetype/ftwinfnt.h @@ -0,0 +1,275 @@ +/**************************************************************************** + * + * ftwinfnt.h + * + * FreeType API for accessing Windows fnt-specific data. + * + * Copyright (C) 2003-2025 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + +#ifndef FTWINFNT_H_ +#define FTWINFNT_H_ + +#include + +#ifdef FREETYPE_H +#error "freetype.h of FreeType 1 has been loaded!" +#error "Please fix the directory search order for header files" +#error "so that freetype.h of FreeType 2 is found first." +#endif + + +FT_BEGIN_HEADER + + + /************************************************************************** + * + * @section: + * winfnt_fonts + * + * @title: + * Window FNT Files + * + * @abstract: + * Windows FNT-specific API. + * + * @description: + * This section contains the declaration of Windows FNT-specific + * functions. + * + */ + + + /************************************************************************** + * + * @enum: + * FT_WinFNT_ID_XXX + * + * @description: + * A list of valid values for the `charset` byte in @FT_WinFNT_HeaderRec. + * Exact mapping tables for the various 'cpXXXX' encodings (except for + * 'cp1361') can be found at 'ftp://ftp.unicode.org/Public/' in the + * `MAPPINGS/VENDORS/MICSFT/WINDOWS` subdirectory. 'cp1361' is roughly a + * superset of `MAPPINGS/OBSOLETE/EASTASIA/KSC/JOHAB.TXT`. + * + * @values: + * FT_WinFNT_ID_DEFAULT :: + * This is used for font enumeration and font creation as a 'don't + * care' value. Valid font files don't contain this value. When + * querying for information about the character set of the font that is + * currently selected into a specified device context, this return + * value (of the related Windows API) simply denotes failure. + * + * FT_WinFNT_ID_SYMBOL :: + * There is no known mapping table available. + * + * FT_WinFNT_ID_MAC :: + * Mac Roman encoding. + * + * FT_WinFNT_ID_OEM :: + * From Michael Poettgen : + * + * The 'Windows Font Mapping' article says that `FT_WinFNT_ID_OEM` is + * used for the charset of vector fonts, like `modern.fon`, + * `roman.fon`, and `script.fon` on Windows. + * + * The 'CreateFont' documentation says: The `FT_WinFNT_ID_OEM` value + * specifies a character set that is operating-system dependent. + * + * The 'IFIMETRICS' documentation from the 'Windows Driver Development + * Kit' says: This font supports an OEM-specific character set. The + * OEM character set is system dependent. + * + * In general OEM, as opposed to ANSI (i.e., 'cp1252'), denotes the + * second default codepage that most international versions of Windows + * have. It is one of the OEM codepages from + * + * https://learn.microsoft.com/windows/win32/intl/code-page-identifiers , + * + * and is used for the 'DOS boxes', to support legacy applications. A + * German Windows version for example usually uses ANSI codepage 1252 + * and OEM codepage 850. + * + * FT_WinFNT_ID_CP874 :: + * A superset of Thai TIS 620 and ISO 8859-11. + * + * FT_WinFNT_ID_CP932 :: + * A superset of Japanese Shift-JIS (with minor deviations). + * + * FT_WinFNT_ID_CP936 :: + * A superset of simplified Chinese GB 2312-1980 (with different + * ordering and minor deviations). + * + * FT_WinFNT_ID_CP949 :: + * A superset of Korean Hangul KS~C 5601-1987 (with different ordering + * and minor deviations). + * + * FT_WinFNT_ID_CP950 :: + * A superset of traditional Chinese Big~5 ETen (with different + * ordering and minor deviations). + * + * FT_WinFNT_ID_CP1250 :: + * A superset of East European ISO 8859-2 (with slightly different + * ordering). + * + * FT_WinFNT_ID_CP1251 :: + * A superset of Russian ISO 8859-5 (with different ordering). + * + * FT_WinFNT_ID_CP1252 :: + * ANSI encoding. A superset of ISO 8859-1. + * + * FT_WinFNT_ID_CP1253 :: + * A superset of Greek ISO 8859-7 (with minor modifications). + * + * FT_WinFNT_ID_CP1254 :: + * A superset of Turkish ISO 8859-9. + * + * FT_WinFNT_ID_CP1255 :: + * A superset of Hebrew ISO 8859-8 (with some modifications). + * + * FT_WinFNT_ID_CP1256 :: + * A superset of Arabic ISO 8859-6 (with different ordering). + * + * FT_WinFNT_ID_CP1257 :: + * A superset of Baltic ISO 8859-13 (with some deviations). + * + * FT_WinFNT_ID_CP1258 :: + * For Vietnamese. This encoding doesn't cover all necessary + * characters. + * + * FT_WinFNT_ID_CP1361 :: + * Korean (Johab). + */ + +#define FT_WinFNT_ID_CP1252 0 +#define FT_WinFNT_ID_DEFAULT 1 +#define FT_WinFNT_ID_SYMBOL 2 +#define FT_WinFNT_ID_MAC 77 +#define FT_WinFNT_ID_CP932 128 +#define FT_WinFNT_ID_CP949 129 +#define FT_WinFNT_ID_CP1361 130 +#define FT_WinFNT_ID_CP936 134 +#define FT_WinFNT_ID_CP950 136 +#define FT_WinFNT_ID_CP1253 161 +#define FT_WinFNT_ID_CP1254 162 +#define FT_WinFNT_ID_CP1258 163 +#define FT_WinFNT_ID_CP1255 177 +#define FT_WinFNT_ID_CP1256 178 +#define FT_WinFNT_ID_CP1257 186 +#define FT_WinFNT_ID_CP1251 204 +#define FT_WinFNT_ID_CP874 222 +#define FT_WinFNT_ID_CP1250 238 +#define FT_WinFNT_ID_OEM 255 + + + /************************************************************************** + * + * @struct: + * FT_WinFNT_HeaderRec + * + * @description: + * Windows FNT Header info. + */ + typedef struct FT_WinFNT_HeaderRec_ + { + FT_UShort version; + FT_ULong file_size; + FT_Byte copyright[60]; + FT_UShort file_type; + FT_UShort nominal_point_size; + FT_UShort vertical_resolution; + FT_UShort horizontal_resolution; + FT_UShort ascent; + FT_UShort internal_leading; + FT_UShort external_leading; + FT_Byte italic; + FT_Byte underline; + FT_Byte strike_out; + FT_UShort weight; + FT_Byte charset; + FT_UShort pixel_width; + FT_UShort pixel_height; + FT_Byte pitch_and_family; + FT_UShort avg_width; + FT_UShort max_width; + FT_Byte first_char; + FT_Byte last_char; + FT_Byte default_char; + FT_Byte break_char; + FT_UShort bytes_per_row; + FT_ULong device_offset; + FT_ULong face_name_offset; + FT_ULong bits_pointer; + FT_ULong bits_offset; + FT_Byte reserved; + FT_ULong flags; + FT_UShort A_space; + FT_UShort B_space; + FT_UShort C_space; + FT_UShort color_table_offset; + FT_ULong reserved1[4]; + + } FT_WinFNT_HeaderRec; + + + /************************************************************************** + * + * @struct: + * FT_WinFNT_Header + * + * @description: + * A handle to an @FT_WinFNT_HeaderRec structure. + */ + typedef struct FT_WinFNT_HeaderRec_* FT_WinFNT_Header; + + + /************************************************************************** + * + * @function: + * FT_Get_WinFNT_Header + * + * @description: + * Retrieve a Windows FNT font info header. + * + * @input: + * face :: + * A handle to the input face. + * + * @output: + * aheader :: + * The WinFNT header. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * This function only works with Windows FNT faces, returning an error + * otherwise. + */ + FT_EXPORT( FT_Error ) + FT_Get_WinFNT_Header( FT_Face face, + FT_WinFNT_HeaderRec *aheader ); + + /* */ + + +FT_END_HEADER + +#endif /* FTWINFNT_H_ */ + + +/* END */ + + +/* Local Variables: */ +/* coding: utf-8 */ +/* End: */ diff --git a/third_party/tlRender-install-Release/include/freetype2/freetype/otsvg.h b/third_party/tlRender-install-Release/include/freetype2/freetype/otsvg.h new file mode 100644 index 00000000..326bbcd0 --- /dev/null +++ b/third_party/tlRender-install-Release/include/freetype2/freetype/otsvg.h @@ -0,0 +1,336 @@ +/**************************************************************************** + * + * otsvg.h + * + * Interface for OT-SVG support related things (specification). + * + * Copyright (C) 2022-2025 by + * David Turner, Robert Wilhelm, Werner Lemberg, and Moazin Khatti. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + +#ifndef OTSVG_H_ +#define OTSVG_H_ + +#include + +#ifdef FREETYPE_H +#error "freetype.h of FreeType 1 has been loaded!" +#error "Please fix the directory search order for header files" +#error "so that freetype.h of FreeType 2 is found first." +#endif + + +FT_BEGIN_HEADER + + + /************************************************************************** + * + * @section: + * svg_fonts + * + * @title: + * OpenType SVG Fonts + * + * @abstract: + * OT-SVG API between FreeType and an external SVG rendering library. + * + * @description: + * This section describes the four hooks necessary to render SVG + * 'documents' that are contained in an OpenType font's 'SVG~' table. + * + * For more information on the implementation, see our standard hooks + * based on 'librsvg' in the [FreeType Demo + * Programs](https://gitlab.freedesktop.org/freetype/freetype-demos) + * repository. + * + */ + + + /************************************************************************** + * + * @functype: + * SVG_Lib_Init_Func + * + * @description: + * A callback that is called when the first OT-SVG glyph is rendered in + * the lifetime of an @FT_Library object. In a typical implementation, + * one would want to allocate a structure and point the `data_pointer` + * to it and perform any library initializations that might be needed. + * + * @inout: + * data_pointer :: + * The SVG rendering module stores a pointer variable that can be used + * by clients to store any data that needs to be shared across + * different hooks. `data_pointer` is essentially a pointer to that + * pointer such that it can be written to as well as read from. + * + * @return: + * FreeType error code. 0 means success. + * + * @since: + * 2.12 + */ + typedef FT_Error + (*SVG_Lib_Init_Func)( FT_Pointer *data_pointer ); + + + /************************************************************************** + * + * @functype: + * SVG_Lib_Free_Func + * + * @description: + * A callback that is called when the `ot-svg` module is being freed. + * It is only called if the init hook was called earlier. This means + * that neither the init nor the free hook is called if no OT-SVG glyph + * is rendered. + * + * In a typical implementation, one would want to free any state + * structure that was allocated in the init hook and perform any + * library-related closure that might be needed. + * + * @inout: + * data_pointer :: + * The SVG rendering module stores a pointer variable that can be used + * by clients to store any data that needs to be shared across + * different hooks. `data_pointer` is essentially a pointer to that + * pointer such that it can be written to as well as read from. + * + * @since: + * 2.12 + */ + typedef void + (*SVG_Lib_Free_Func)( FT_Pointer *data_pointer ); + + + /************************************************************************** + * + * @functype: + * SVG_Lib_Render_Func + * + * @description: + * A callback that is called to render an OT-SVG glyph. This callback + * hook is called right after the preset hook @SVG_Lib_Preset_Slot_Func + * has been called with `cache` set to `TRUE`. The data necessary to + * render is available through the handle @FT_SVG_Document, which is set + * in the `other` field of @FT_GlyphSlotRec. + * + * The render hook is expected to render the SVG glyph to the bitmap + * buffer that is allocated already at `slot->bitmap.buffer`. It also + * sets the `num_grays` value as well as `slot->format`. + * + * @input: + * slot :: + * The slot to render. + * + * @inout: + * data_pointer :: + * The SVG rendering module stores a pointer variable that can be used + * by clients to store any data that needs to be shared across + * different hooks. `data_pointer` is essentially a pointer to that + * pointer such that it can be written to as well as read from. + * + * @return: + * FreeType error code. 0 means success. + * + * @since: + * 2.12 + */ + typedef FT_Error + (*SVG_Lib_Render_Func)( FT_GlyphSlot slot, + FT_Pointer *data_pointer ); + + + /************************************************************************** + * + * @functype: + * SVG_Lib_Preset_Slot_Func + * + * @description: + * A callback that is called to preset the glyph slot. It is called from + * two places. + * + * 1. When `FT_Load_Glyph` needs to preset the glyph slot. + * + * 2. Right before the `svg` module calls the render callback hook. + * + * When it is the former, the argument `cache` is set to `FALSE`. When + * it is the latter, the argument `cache` is set to `TRUE`. This + * distinction has been made because many calculations that are necessary + * for presetting a glyph slot are the same needed later for the render + * callback hook. Thus, if `cache` is `TRUE`, the hook can _cache_ those + * calculations in a memory block referenced by the state pointer. + * + * This hook is expected to preset the slot by setting parameters such as + * `bitmap_left`, `bitmap_top`, `width`, `rows`, `pitch`, and + * `pixel_mode`. It is also expected to set all the metrics for the slot + * including the vertical advance if it is not already set. Typically, + * fonts have horizontal advances but not vertical ones. If those are + * available, they had already been set, otherwise they have to be + * estimated and set manually. The hook must take into account the + * transformations that have been set, and translate the transformation + * matrices into the SVG coordinate system, as the original matrix is + * intended for the TTF/CFF coordinate system. + * + * @input: + * slot :: + * The glyph slot that has the SVG document loaded. + * + * cache :: + * See description. + * + * @inout: + * data_pointer :: + * The SVG rendering module stores a pointer variable that can be used + * by clients to store any data that needs to be shared across + * different hooks. `data_pointer` is essentially a pointer to that + * pointer such that it can be written to as well as read from. + * + * @return: + * FreeType error code. 0 means success. + * + * @since: + * 2.12 + */ + typedef FT_Error + (*SVG_Lib_Preset_Slot_Func)( FT_GlyphSlot slot, + FT_Bool cache, + FT_Pointer *state ); + + + /************************************************************************** + * + * @struct: + * SVG_RendererHooks + * + * @description: + * A structure that stores the four hooks needed to render OT-SVG glyphs + * properly. The structure is publicly used to set the hooks via the + * @svg-hooks driver property. + * + * The behavior of each hook is described in its documentation. One + * thing to note is that the preset hook and the render hook often need + * to do the same operations; therefore, it's better to cache the + * intermediate data in a state structure to avoid calculating it twice. + * For example, in the preset hook one can draw the glyph on a recorder + * surface and later create a bitmap surface from it in the render hook. + * + * All four hooks must be non-NULL. + * + * @fields: + * init_svg :: + * The initialization hook. + * + * free_svg :: + * The cleanup hook. + * + * render_hook :: + * The render hook. + * + * preset_slot :: + * The preset hook. + * + * @since: + * 2.12 + */ + typedef struct SVG_RendererHooks_ + { + SVG_Lib_Init_Func init_svg; + SVG_Lib_Free_Func free_svg; + SVG_Lib_Render_Func render_svg; + + SVG_Lib_Preset_Slot_Func preset_slot; + + } SVG_RendererHooks; + + + /************************************************************************** + * + * @struct: + * FT_SVG_DocumentRec + * + * @description: + * A structure that models one SVG document. + * + * @fields: + * svg_document :: + * A pointer to the SVG document. + * + * svg_document_length :: + * The length of `svg_document`. + * + * metrics :: + * A metrics object storing the size information. + * + * units_per_EM :: + * The size of the EM square. + * + * start_glyph_id :: + * The first glyph ID in the glyph range covered by this document. + * + * end_glyph_id :: + * The last glyph ID in the glyph range covered by this document. + * + * transform :: + * A 2x2 transformation matrix to apply to the glyph while rendering + * it. + * + * delta :: + * The translation to apply to the glyph while rendering. + * + * @note: + * When an @FT_GlyphSlot object `slot` is passed down to a renderer, the + * renderer can only access the `metrics` and `units_per_EM` fields via + * `slot->face`. However, when @FT_Glyph_To_Bitmap sets up a dummy + * object, it has no way to set a `face` object. Thus, metrics + * information and `units_per_EM` (which is necessary for OT-SVG) has to + * be stored separately. + * + * @since: + * 2.12 + */ + typedef struct FT_SVG_DocumentRec_ + { + FT_Byte* svg_document; + FT_ULong svg_document_length; + + FT_Size_Metrics metrics; + FT_UShort units_per_EM; + + FT_UShort start_glyph_id; + FT_UShort end_glyph_id; + + FT_Matrix transform; + FT_Vector delta; + + } FT_SVG_DocumentRec; + + + /************************************************************************** + * + * @type: + * FT_SVG_Document + * + * @description: + * A handle to an @FT_SVG_DocumentRec object. + * + * @since: + * 2.12 + */ + typedef struct FT_SVG_DocumentRec_* FT_SVG_Document; + + +FT_END_HEADER + +#endif /* OTSVG_H_ */ + + +/* END */ diff --git a/third_party/tlRender-install-Release/include/freetype2/freetype/t1tables.h b/third_party/tlRender-install-Release/include/freetype2/freetype/t1tables.h new file mode 100644 index 00000000..fc3c1706 --- /dev/null +++ b/third_party/tlRender-install-Release/include/freetype2/freetype/t1tables.h @@ -0,0 +1,735 @@ +/**************************************************************************** + * + * t1tables.h + * + * Basic Type 1/Type 2 tables definitions and interface (specification + * only). + * + * Copyright (C) 1996-2025 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + +#ifndef T1TABLES_H_ +#define T1TABLES_H_ + + +#include + +#ifdef FREETYPE_H +#error "freetype.h of FreeType 1 has been loaded!" +#error "Please fix the directory search order for header files" +#error "so that freetype.h of FreeType 2 is found first." +#endif + + +FT_BEGIN_HEADER + + + /************************************************************************** + * + * @section: + * type1_tables + * + * @title: + * Type 1 Tables + * + * @abstract: + * Type~1-specific font tables. + * + * @description: + * This section contains the definition of Type~1-specific tables, + * including structures related to other PostScript font formats. + * + * @order: + * PS_FontInfoRec + * PS_FontInfo + * PS_PrivateRec + * PS_Private + * + * CID_FaceDictRec + * CID_FaceDict + * CID_FaceInfoRec + * CID_FaceInfo + * + * FT_Has_PS_Glyph_Names + * FT_Get_PS_Font_Info + * FT_Get_PS_Font_Private + * FT_Get_PS_Font_Value + * + * T1_Blend_Flags + * T1_EncodingType + * PS_Dict_Keys + * + */ + + + /* Note that we separate font data in PS_FontInfoRec and PS_PrivateRec */ + /* structures in order to support Multiple Master fonts. */ + + + /************************************************************************** + * + * @struct: + * PS_FontInfoRec + * + * @description: + * A structure used to model a Type~1 or Type~2 FontInfo dictionary. + * Note that for Multiple Master fonts, each instance has its own + * FontInfo dictionary. + */ + typedef struct PS_FontInfoRec_ + { + FT_String* version; + FT_String* notice; + FT_String* full_name; + FT_String* family_name; + FT_String* weight; + FT_Long italic_angle; + FT_Bool is_fixed_pitch; + FT_Short underline_position; + FT_UShort underline_thickness; + + } PS_FontInfoRec; + + + /************************************************************************** + * + * @struct: + * PS_FontInfo + * + * @description: + * A handle to a @PS_FontInfoRec structure. + */ + typedef struct PS_FontInfoRec_* PS_FontInfo; + + + /************************************************************************** + * + * @struct: + * T1_FontInfo + * + * @description: + * This type is equivalent to @PS_FontInfoRec. It is deprecated but kept + * to maintain source compatibility between various versions of FreeType. + */ + typedef PS_FontInfoRec T1_FontInfo; + + + /************************************************************************** + * + * @struct: + * PS_PrivateRec + * + * @description: + * A structure used to model a Type~1 or Type~2 private dictionary. Note + * that for Multiple Master fonts, each instance has its own Private + * dictionary. + */ + typedef struct PS_PrivateRec_ + { + FT_Int unique_id; + FT_Int lenIV; + + FT_Byte num_blue_values; + FT_Byte num_other_blues; + FT_Byte num_family_blues; + FT_Byte num_family_other_blues; + + FT_Short blue_values[14]; + FT_Short other_blues[10]; + + FT_Short family_blues [14]; + FT_Short family_other_blues[10]; + + FT_Fixed blue_scale; + FT_Int blue_shift; + FT_Int blue_fuzz; + + FT_UShort standard_width[1]; + FT_UShort standard_height[1]; + + FT_Byte num_snap_widths; + FT_Byte num_snap_heights; + FT_Bool force_bold; + FT_Bool round_stem_up; + + FT_Short snap_widths [13]; /* including std width */ + FT_Short snap_heights[13]; /* including std height */ + + FT_Fixed expansion_factor; + + FT_Long language_group; + FT_Long password; + + FT_Short min_feature[2]; + + } PS_PrivateRec; + + + /************************************************************************** + * + * @struct: + * PS_Private + * + * @description: + * A handle to a @PS_PrivateRec structure. + */ + typedef struct PS_PrivateRec_* PS_Private; + + + /************************************************************************** + * + * @struct: + * T1_Private + * + * @description: + * This type is equivalent to @PS_PrivateRec. It is deprecated but kept + * to maintain source compatibility between various versions of FreeType. + */ + typedef PS_PrivateRec T1_Private; + + + /************************************************************************** + * + * @enum: + * T1_Blend_Flags + * + * @description: + * A set of flags used to indicate which fields are present in a given + * blend dictionary (font info or private). Used to support Multiple + * Masters fonts. + * + * @values: + * T1_BLEND_UNDERLINE_POSITION :: + * T1_BLEND_UNDERLINE_THICKNESS :: + * T1_BLEND_ITALIC_ANGLE :: + * T1_BLEND_BLUE_VALUES :: + * T1_BLEND_OTHER_BLUES :: + * T1_BLEND_STANDARD_WIDTH :: + * T1_BLEND_STANDARD_HEIGHT :: + * T1_BLEND_STEM_SNAP_WIDTHS :: + * T1_BLEND_STEM_SNAP_HEIGHTS :: + * T1_BLEND_BLUE_SCALE :: + * T1_BLEND_BLUE_SHIFT :: + * T1_BLEND_FAMILY_BLUES :: + * T1_BLEND_FAMILY_OTHER_BLUES :: + * T1_BLEND_FORCE_BOLD :: + */ + typedef enum T1_Blend_Flags_ + { + /* required fields in a FontInfo blend dictionary */ + T1_BLEND_UNDERLINE_POSITION = 0, + T1_BLEND_UNDERLINE_THICKNESS, + T1_BLEND_ITALIC_ANGLE, + + /* required fields in a Private blend dictionary */ + T1_BLEND_BLUE_VALUES, + T1_BLEND_OTHER_BLUES, + T1_BLEND_STANDARD_WIDTH, + T1_BLEND_STANDARD_HEIGHT, + T1_BLEND_STEM_SNAP_WIDTHS, + T1_BLEND_STEM_SNAP_HEIGHTS, + T1_BLEND_BLUE_SCALE, + T1_BLEND_BLUE_SHIFT, + T1_BLEND_FAMILY_BLUES, + T1_BLEND_FAMILY_OTHER_BLUES, + T1_BLEND_FORCE_BOLD, + + T1_BLEND_MAX /* do not remove */ + + } T1_Blend_Flags; + + + /* these constants are deprecated; use the corresponding */ + /* `T1_Blend_Flags` values instead */ +#define t1_blend_underline_position T1_BLEND_UNDERLINE_POSITION +#define t1_blend_underline_thickness T1_BLEND_UNDERLINE_THICKNESS +#define t1_blend_italic_angle T1_BLEND_ITALIC_ANGLE +#define t1_blend_blue_values T1_BLEND_BLUE_VALUES +#define t1_blend_other_blues T1_BLEND_OTHER_BLUES +#define t1_blend_standard_widths T1_BLEND_STANDARD_WIDTH +#define t1_blend_standard_height T1_BLEND_STANDARD_HEIGHT +#define t1_blend_stem_snap_widths T1_BLEND_STEM_SNAP_WIDTHS +#define t1_blend_stem_snap_heights T1_BLEND_STEM_SNAP_HEIGHTS +#define t1_blend_blue_scale T1_BLEND_BLUE_SCALE +#define t1_blend_blue_shift T1_BLEND_BLUE_SHIFT +#define t1_blend_family_blues T1_BLEND_FAMILY_BLUES +#define t1_blend_family_other_blues T1_BLEND_FAMILY_OTHER_BLUES +#define t1_blend_force_bold T1_BLEND_FORCE_BOLD +#define t1_blend_max T1_BLEND_MAX + + /* */ + + + /************************************************************************** + * + * @struct: + * CID_FaceDictRec + * + * @description: + * A structure used to represent data in a CID top-level dictionary. In + * most cases, they are part of the font's '/FDArray' array. Within a + * CID font file, such (internal) subfont dictionaries are enclosed by + * '%ADOBeginFontDict' and '%ADOEndFontDict' comments. + * + * Note that `CID_FaceDictRec` misses a field for the '/FontName' + * keyword, specifying the subfont's name (the top-level font name is + * given by the '/CIDFontName' keyword). This is an oversight, but it + * doesn't limit the 'cid' font module's functionality because FreeType + * neither needs this entry nor gives access to CID subfonts. + */ + typedef struct CID_FaceDictRec_ + { + PS_PrivateRec private_dict; + + FT_UInt len_buildchar; + FT_Fixed forcebold_threshold; + FT_Pos stroke_width; + FT_Fixed expansion_factor; /* this is a duplicate of */ + /* `private_dict->expansion_factor' */ + FT_Byte paint_type; + FT_Byte font_type; + FT_Matrix font_matrix; + FT_Vector font_offset; + + FT_UInt num_subrs; + FT_ULong subrmap_offset; + FT_UInt sd_bytes; + + } CID_FaceDictRec; + + + /************************************************************************** + * + * @struct: + * CID_FaceDict + * + * @description: + * A handle to a @CID_FaceDictRec structure. + */ + typedef struct CID_FaceDictRec_* CID_FaceDict; + + + /************************************************************************** + * + * @struct: + * CID_FontDict + * + * @description: + * This type is equivalent to @CID_FaceDictRec. It is deprecated but + * kept to maintain source compatibility between various versions of + * FreeType. + */ + typedef CID_FaceDictRec CID_FontDict; + + + /************************************************************************** + * + * @struct: + * CID_FaceInfoRec + * + * @description: + * A structure used to represent CID Face information. + */ + typedef struct CID_FaceInfoRec_ + { + FT_String* cid_font_name; + FT_Fixed cid_version; + FT_Int cid_font_type; + + FT_String* registry; + FT_String* ordering; + FT_Int supplement; + + PS_FontInfoRec font_info; + FT_BBox font_bbox; + FT_ULong uid_base; + + FT_Int num_xuid; + FT_ULong xuid[16]; + + FT_ULong cidmap_offset; + FT_UInt fd_bytes; + FT_UInt gd_bytes; + FT_ULong cid_count; + + FT_UInt num_dicts; + CID_FaceDict font_dicts; + + FT_ULong data_offset; + + } CID_FaceInfoRec; + + + /************************************************************************** + * + * @struct: + * CID_FaceInfo + * + * @description: + * A handle to a @CID_FaceInfoRec structure. + */ + typedef struct CID_FaceInfoRec_* CID_FaceInfo; + + + /************************************************************************** + * + * @struct: + * CID_Info + * + * @description: + * This type is equivalent to @CID_FaceInfoRec. It is deprecated but kept + * to maintain source compatibility between various versions of FreeType. + */ + typedef CID_FaceInfoRec CID_Info; + + + /************************************************************************** + * + * @function: + * FT_Has_PS_Glyph_Names + * + * @description: + * Return true if a given face provides reliable PostScript glyph names. + * This is similar to using the @FT_HAS_GLYPH_NAMES macro, except that + * certain fonts (mostly TrueType) contain incorrect glyph name tables. + * + * When this function returns true, the caller is sure that the glyph + * names returned by @FT_Get_Glyph_Name are reliable. + * + * @input: + * face :: + * face handle + * + * @return: + * Boolean. True if glyph names are reliable. + * + */ + FT_EXPORT( FT_Int ) + FT_Has_PS_Glyph_Names( FT_Face face ); + + + /************************************************************************** + * + * @function: + * FT_Get_PS_Font_Info + * + * @description: + * Retrieve the @PS_FontInfoRec structure corresponding to a given + * PostScript font. + * + * @input: + * face :: + * PostScript face handle. + * + * @output: + * afont_info :: + * A pointer to a @PS_FontInfoRec object. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * String pointers within the @PS_FontInfoRec structure are owned by the + * face and don't need to be freed by the caller. Missing entries in the + * font's FontInfo dictionary are represented by `NULL` pointers. + * + * The following font formats support this feature: 'Type~1', 'Type~42', + * 'CFF', 'CID~Type~1'. For other font formats this function returns the + * `FT_Err_Invalid_Argument` error code. + * + * @example: + * ``` + * PS_FontInfoRec font_info; + * + * + * error = FT_Get_PS_Font_Info( face, &font_info ); + * ... + * ``` + * + */ + FT_EXPORT( FT_Error ) + FT_Get_PS_Font_Info( FT_Face face, + PS_FontInfo afont_info ); + + + /************************************************************************** + * + * @function: + * FT_Get_PS_Font_Private + * + * @description: + * Retrieve the @PS_PrivateRec structure corresponding to a given + * PostScript font. + * + * @input: + * face :: + * PostScript face handle. + * + * @output: + * afont_private :: + * A pointer to a @PS_PrivateRec object. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * The string pointers within the @PS_PrivateRec structure are owned by + * the face and don't need to be freed by the caller. + * + * Only the 'Type~1' font format supports this feature. For other font + * formats this function returns the `FT_Err_Invalid_Argument` error + * code. + * + * @example: + * ``` + * PS_PrivateRec font_private; + * + * + * error = FT_Get_PS_Font_Private( face, &font_private ); + * ... + * ``` + * + */ + FT_EXPORT( FT_Error ) + FT_Get_PS_Font_Private( FT_Face face, + PS_Private afont_private ); + + + /************************************************************************** + * + * @enum: + * T1_EncodingType + * + * @description: + * An enumeration describing the 'Encoding' entry in a Type 1 dictionary. + * + * @values: + * T1_ENCODING_TYPE_NONE :: + * T1_ENCODING_TYPE_ARRAY :: + * T1_ENCODING_TYPE_STANDARD :: + * T1_ENCODING_TYPE_ISOLATIN1 :: + * T1_ENCODING_TYPE_EXPERT :: + * + * @since: + * 2.4.8 + */ + typedef enum T1_EncodingType_ + { + T1_ENCODING_TYPE_NONE = 0, + T1_ENCODING_TYPE_ARRAY, + T1_ENCODING_TYPE_STANDARD, + T1_ENCODING_TYPE_ISOLATIN1, + T1_ENCODING_TYPE_EXPERT + + } T1_EncodingType; + + + /************************************************************************** + * + * @enum: + * PS_Dict_Keys + * + * @description: + * An enumeration used in calls to @FT_Get_PS_Font_Value to identify the + * Type~1 dictionary entry to retrieve. + * + * @values: + * PS_DICT_FONT_TYPE :: + * PS_DICT_FONT_MATRIX :: + * PS_DICT_FONT_BBOX :: + * PS_DICT_PAINT_TYPE :: + * PS_DICT_FONT_NAME :: + * PS_DICT_UNIQUE_ID :: + * PS_DICT_NUM_CHAR_STRINGS :: + * PS_DICT_CHAR_STRING_KEY :: + * PS_DICT_CHAR_STRING :: + * PS_DICT_ENCODING_TYPE :: + * PS_DICT_ENCODING_ENTRY :: + * PS_DICT_NUM_SUBRS :: + * PS_DICT_SUBR :: + * PS_DICT_STD_HW :: + * PS_DICT_STD_VW :: + * PS_DICT_NUM_BLUE_VALUES :: + * PS_DICT_BLUE_VALUE :: + * PS_DICT_BLUE_FUZZ :: + * PS_DICT_NUM_OTHER_BLUES :: + * PS_DICT_OTHER_BLUE :: + * PS_DICT_NUM_FAMILY_BLUES :: + * PS_DICT_FAMILY_BLUE :: + * PS_DICT_NUM_FAMILY_OTHER_BLUES :: + * PS_DICT_FAMILY_OTHER_BLUE :: + * PS_DICT_BLUE_SCALE :: + * PS_DICT_BLUE_SHIFT :: + * PS_DICT_NUM_STEM_SNAP_H :: + * PS_DICT_STEM_SNAP_H :: + * PS_DICT_NUM_STEM_SNAP_V :: + * PS_DICT_STEM_SNAP_V :: + * PS_DICT_FORCE_BOLD :: + * PS_DICT_RND_STEM_UP :: + * PS_DICT_MIN_FEATURE :: + * PS_DICT_LEN_IV :: + * PS_DICT_PASSWORD :: + * PS_DICT_LANGUAGE_GROUP :: + * PS_DICT_VERSION :: + * PS_DICT_NOTICE :: + * PS_DICT_FULL_NAME :: + * PS_DICT_FAMILY_NAME :: + * PS_DICT_WEIGHT :: + * PS_DICT_IS_FIXED_PITCH :: + * PS_DICT_UNDERLINE_POSITION :: + * PS_DICT_UNDERLINE_THICKNESS :: + * PS_DICT_FS_TYPE :: + * PS_DICT_ITALIC_ANGLE :: + * + * @since: + * 2.4.8 + */ + typedef enum PS_Dict_Keys_ + { + /* conventionally in the font dictionary */ + PS_DICT_FONT_TYPE, /* FT_Byte */ + PS_DICT_FONT_MATRIX, /* FT_Fixed */ + PS_DICT_FONT_BBOX, /* FT_Fixed */ + PS_DICT_PAINT_TYPE, /* FT_Byte */ + PS_DICT_FONT_NAME, /* FT_String* */ + PS_DICT_UNIQUE_ID, /* FT_Int */ + PS_DICT_NUM_CHAR_STRINGS, /* FT_Int */ + PS_DICT_CHAR_STRING_KEY, /* FT_String* */ + PS_DICT_CHAR_STRING, /* FT_String* */ + PS_DICT_ENCODING_TYPE, /* T1_EncodingType */ + PS_DICT_ENCODING_ENTRY, /* FT_String* */ + + /* conventionally in the font Private dictionary */ + PS_DICT_NUM_SUBRS, /* FT_Int */ + PS_DICT_SUBR, /* FT_String* */ + PS_DICT_STD_HW, /* FT_UShort */ + PS_DICT_STD_VW, /* FT_UShort */ + PS_DICT_NUM_BLUE_VALUES, /* FT_Byte */ + PS_DICT_BLUE_VALUE, /* FT_Short */ + PS_DICT_BLUE_FUZZ, /* FT_Int */ + PS_DICT_NUM_OTHER_BLUES, /* FT_Byte */ + PS_DICT_OTHER_BLUE, /* FT_Short */ + PS_DICT_NUM_FAMILY_BLUES, /* FT_Byte */ + PS_DICT_FAMILY_BLUE, /* FT_Short */ + PS_DICT_NUM_FAMILY_OTHER_BLUES, /* FT_Byte */ + PS_DICT_FAMILY_OTHER_BLUE, /* FT_Short */ + PS_DICT_BLUE_SCALE, /* FT_Fixed */ + PS_DICT_BLUE_SHIFT, /* FT_Int */ + PS_DICT_NUM_STEM_SNAP_H, /* FT_Byte */ + PS_DICT_STEM_SNAP_H, /* FT_Short */ + PS_DICT_NUM_STEM_SNAP_V, /* FT_Byte */ + PS_DICT_STEM_SNAP_V, /* FT_Short */ + PS_DICT_FORCE_BOLD, /* FT_Bool */ + PS_DICT_RND_STEM_UP, /* FT_Bool */ + PS_DICT_MIN_FEATURE, /* FT_Short */ + PS_DICT_LEN_IV, /* FT_Int */ + PS_DICT_PASSWORD, /* FT_Long */ + PS_DICT_LANGUAGE_GROUP, /* FT_Long */ + + /* conventionally in the font FontInfo dictionary */ + PS_DICT_VERSION, /* FT_String* */ + PS_DICT_NOTICE, /* FT_String* */ + PS_DICT_FULL_NAME, /* FT_String* */ + PS_DICT_FAMILY_NAME, /* FT_String* */ + PS_DICT_WEIGHT, /* FT_String* */ + PS_DICT_IS_FIXED_PITCH, /* FT_Bool */ + PS_DICT_UNDERLINE_POSITION, /* FT_Short */ + PS_DICT_UNDERLINE_THICKNESS, /* FT_UShort */ + PS_DICT_FS_TYPE, /* FT_UShort */ + PS_DICT_ITALIC_ANGLE, /* FT_Long */ + + PS_DICT_MAX = PS_DICT_ITALIC_ANGLE + + } PS_Dict_Keys; + + + /************************************************************************** + * + * @function: + * FT_Get_PS_Font_Value + * + * @description: + * Retrieve the value for the supplied key from a PostScript font. + * + * @input: + * face :: + * PostScript face handle. + * + * key :: + * An enumeration value representing the dictionary key to retrieve. + * + * idx :: + * For array values, this specifies the index to be returned. + * + * value :: + * A pointer to memory into which to write the value. + * + * valen_len :: + * The size, in bytes, of the memory supplied for the value. + * + * @output: + * value :: + * The value matching the above key, if it exists. + * + * @return: + * The amount of memory (in bytes) required to hold the requested value + * (if it exists, -1 otherwise). + * + * @note: + * The values returned are not pointers into the internal structures of + * the face, but are 'fresh' copies, so that the memory containing them + * belongs to the calling application. This also enforces the + * 'read-only' nature of these values, i.e., this function cannot be + * used to manipulate the face. + * + * `value` is a void pointer because the values returned can be of + * various types. + * + * If either `value` is `NULL` or `value_len` is too small, just the + * required memory size for the requested entry is returned. + * + * The `idx` parameter is used, not only to retrieve elements of, for + * example, the FontMatrix or FontBBox, but also to retrieve name keys + * from the CharStrings dictionary, and the charstrings themselves. It + * is ignored for atomic values. + * + * `PS_DICT_BLUE_SCALE` returns a value that is scaled up by 1000. To + * get the value as in the font stream, you need to divide by 65536000.0 + * (to remove the FT_Fixed scale, and the x1000 scale). + * + * IMPORTANT: Only key/value pairs read by the FreeType interpreter can + * be retrieved. So, for example, PostScript procedures such as NP, ND, + * and RD are not available. Arbitrary keys are, obviously, not be + * available either. + * + * If the font's format is not PostScript-based, this function returns + * the `FT_Err_Invalid_Argument` error code. + * + * @since: + * 2.4.8 + * + */ + FT_EXPORT( FT_Long ) + FT_Get_PS_Font_Value( FT_Face face, + PS_Dict_Keys key, + FT_UInt idx, + void *value, + FT_Long value_len ); + + /* */ + +FT_END_HEADER + +#endif /* T1TABLES_H_ */ + + +/* END */ diff --git a/third_party/tlRender-install-Release/include/freetype2/freetype/ttnameid.h b/third_party/tlRender-install-Release/include/freetype2/freetype/ttnameid.h new file mode 100644 index 00000000..3ef61091 --- /dev/null +++ b/third_party/tlRender-install-Release/include/freetype2/freetype/ttnameid.h @@ -0,0 +1,1235 @@ +/**************************************************************************** + * + * ttnameid.h + * + * TrueType name ID definitions (specification only). + * + * Copyright (C) 1996-2025 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + +#ifndef TTNAMEID_H_ +#define TTNAMEID_H_ + + + + +FT_BEGIN_HEADER + + + /************************************************************************** + * + * @section: + * truetype_tables + */ + + + /************************************************************************** + * + * Possible values for the 'platform' identifier code in the name records + * of an SFNT 'name' table. + * + */ + + + /************************************************************************** + * + * @enum: + * TT_PLATFORM_XXX + * + * @description: + * A list of valid values for the `platform_id` identifier code in + * @FT_CharMapRec and @FT_SfntName structures. + * + * @values: + * TT_PLATFORM_APPLE_UNICODE :: + * Used by Apple to indicate a Unicode character map and/or name entry. + * See @TT_APPLE_ID_XXX for corresponding `encoding_id` values. Note + * that name entries in this format are coded as big-endian UCS-2 + * character codes _only_. + * + * TT_PLATFORM_MACINTOSH :: + * Used by Apple to indicate a MacOS-specific charmap and/or name + * entry. See @TT_MAC_ID_XXX for corresponding `encoding_id` values. + * Note that most TrueType fonts contain an Apple roman charmap to be + * usable on MacOS systems (even if they contain a Microsoft charmap as + * well). + * + * TT_PLATFORM_ISO :: + * This value was used to specify ISO/IEC 10646 charmaps. It is + * however now deprecated. See @TT_ISO_ID_XXX for a list of + * corresponding `encoding_id` values. + * + * TT_PLATFORM_MICROSOFT :: + * Used by Microsoft to indicate Windows-specific charmaps. See + * @TT_MS_ID_XXX for a list of corresponding `encoding_id` values. + * Note that most fonts contain a Unicode charmap using + * (`TT_PLATFORM_MICROSOFT`, @TT_MS_ID_UNICODE_CS). + * + * TT_PLATFORM_CUSTOM :: + * Used to indicate application-specific charmaps. + * + * TT_PLATFORM_ADOBE :: + * This value isn't part of any font format specification, but is used + * by FreeType to report Adobe-specific charmaps in an @FT_CharMapRec + * structure. See @TT_ADOBE_ID_XXX. + */ + +#define TT_PLATFORM_APPLE_UNICODE 0 +#define TT_PLATFORM_MACINTOSH 1 +#define TT_PLATFORM_ISO 2 /* deprecated */ +#define TT_PLATFORM_MICROSOFT 3 +#define TT_PLATFORM_CUSTOM 4 +#define TT_PLATFORM_ADOBE 7 /* artificial */ + + + /************************************************************************** + * + * @enum: + * TT_APPLE_ID_XXX + * + * @description: + * A list of valid values for the `encoding_id` for + * @TT_PLATFORM_APPLE_UNICODE charmaps and name entries. + * + * @values: + * TT_APPLE_ID_DEFAULT :: + * Unicode version 1.0. + * + * TT_APPLE_ID_UNICODE_1_1 :: + * Unicode 1.1; specifies Hangul characters starting at U+34xx. + * + * TT_APPLE_ID_ISO_10646 :: + * Deprecated (identical to preceding). + * + * TT_APPLE_ID_UNICODE_2_0 :: + * Unicode 2.0 and beyond (UTF-16 BMP only). + * + * TT_APPLE_ID_UNICODE_32 :: + * Unicode 3.1 and beyond, using UTF-32. + * + * TT_APPLE_ID_VARIANT_SELECTOR :: + * From Adobe, not Apple. Not a normal cmap. Specifies variations on + * a real cmap. + * + * TT_APPLE_ID_FULL_UNICODE :: + * Used for fallback fonts that provide complete Unicode coverage with + * a type~13 cmap. + */ + +#define TT_APPLE_ID_DEFAULT 0 /* Unicode 1.0 */ +#define TT_APPLE_ID_UNICODE_1_1 1 /* specify Hangul at U+34xx */ +#define TT_APPLE_ID_ISO_10646 2 /* deprecated */ +#define TT_APPLE_ID_UNICODE_2_0 3 /* or later */ +#define TT_APPLE_ID_UNICODE_32 4 /* 2.0 or later, full repertoire */ +#define TT_APPLE_ID_VARIANT_SELECTOR 5 /* variation selector data */ +#define TT_APPLE_ID_FULL_UNICODE 6 /* used with type 13 cmaps */ + + + /************************************************************************** + * + * @enum: + * TT_MAC_ID_XXX + * + * @description: + * A list of valid values for the `encoding_id` for + * @TT_PLATFORM_MACINTOSH charmaps and name entries. + */ + +#define TT_MAC_ID_ROMAN 0 +#define TT_MAC_ID_JAPANESE 1 +#define TT_MAC_ID_TRADITIONAL_CHINESE 2 +#define TT_MAC_ID_KOREAN 3 +#define TT_MAC_ID_ARABIC 4 +#define TT_MAC_ID_HEBREW 5 +#define TT_MAC_ID_GREEK 6 +#define TT_MAC_ID_RUSSIAN 7 +#define TT_MAC_ID_RSYMBOL 8 +#define TT_MAC_ID_DEVANAGARI 9 +#define TT_MAC_ID_GURMUKHI 10 +#define TT_MAC_ID_GUJARATI 11 +#define TT_MAC_ID_ORIYA 12 +#define TT_MAC_ID_BENGALI 13 +#define TT_MAC_ID_TAMIL 14 +#define TT_MAC_ID_TELUGU 15 +#define TT_MAC_ID_KANNADA 16 +#define TT_MAC_ID_MALAYALAM 17 +#define TT_MAC_ID_SINHALESE 18 +#define TT_MAC_ID_BURMESE 19 +#define TT_MAC_ID_KHMER 20 +#define TT_MAC_ID_THAI 21 +#define TT_MAC_ID_LAOTIAN 22 +#define TT_MAC_ID_GEORGIAN 23 +#define TT_MAC_ID_ARMENIAN 24 +#define TT_MAC_ID_MALDIVIAN 25 +#define TT_MAC_ID_SIMPLIFIED_CHINESE 25 +#define TT_MAC_ID_TIBETAN 26 +#define TT_MAC_ID_MONGOLIAN 27 +#define TT_MAC_ID_GEEZ 28 +#define TT_MAC_ID_SLAVIC 29 +#define TT_MAC_ID_VIETNAMESE 30 +#define TT_MAC_ID_SINDHI 31 +#define TT_MAC_ID_UNINTERP 32 + + + /************************************************************************** + * + * @enum: + * TT_ISO_ID_XXX + * + * @description: + * A list of valid values for the `encoding_id` for @TT_PLATFORM_ISO + * charmaps and name entries. + * + * Their use is now deprecated. + * + * @values: + * TT_ISO_ID_7BIT_ASCII :: + * ASCII. + * TT_ISO_ID_10646 :: + * ISO/10646. + * TT_ISO_ID_8859_1 :: + * Also known as Latin-1. + */ + +#define TT_ISO_ID_7BIT_ASCII 0 +#define TT_ISO_ID_10646 1 +#define TT_ISO_ID_8859_1 2 + + + /************************************************************************** + * + * @enum: + * TT_MS_ID_XXX + * + * @description: + * A list of valid values for the `encoding_id` for + * @TT_PLATFORM_MICROSOFT charmaps and name entries. + * + * @values: + * TT_MS_ID_SYMBOL_CS :: + * Microsoft symbol encoding. See @FT_ENCODING_MS_SYMBOL. + * + * TT_MS_ID_UNICODE_CS :: + * Microsoft WGL4 charmap, matching Unicode. See @FT_ENCODING_UNICODE. + * + * TT_MS_ID_SJIS :: + * Shift JIS Japanese encoding. See @FT_ENCODING_SJIS. + * + * TT_MS_ID_PRC :: + * Chinese encodings as used in the People's Republic of China (PRC). + * This means the encodings GB~2312 and its supersets GBK and GB~18030. + * See @FT_ENCODING_PRC. + * + * TT_MS_ID_BIG_5 :: + * Traditional Chinese as used in Taiwan and Hong Kong. See + * @FT_ENCODING_BIG5. + * + * TT_MS_ID_WANSUNG :: + * Korean Extended Wansung encoding. See @FT_ENCODING_WANSUNG. + * + * TT_MS_ID_JOHAB :: + * Korean Johab encoding. See @FT_ENCODING_JOHAB. + * + * TT_MS_ID_UCS_4 :: + * UCS-4 or UTF-32 charmaps. This has been added to the OpenType + * specification version 1.4 (mid-2001). + */ + +#define TT_MS_ID_SYMBOL_CS 0 +#define TT_MS_ID_UNICODE_CS 1 +#define TT_MS_ID_SJIS 2 +#define TT_MS_ID_PRC 3 +#define TT_MS_ID_BIG_5 4 +#define TT_MS_ID_WANSUNG 5 +#define TT_MS_ID_JOHAB 6 +#define TT_MS_ID_UCS_4 10 + + /* this value is deprecated */ +#define TT_MS_ID_GB2312 TT_MS_ID_PRC + + + /************************************************************************** + * + * @enum: + * TT_ADOBE_ID_XXX + * + * @description: + * A list of valid values for the `encoding_id` for @TT_PLATFORM_ADOBE + * charmaps. This is a FreeType-specific extension! + * + * @values: + * TT_ADOBE_ID_STANDARD :: + * Adobe standard encoding. + * TT_ADOBE_ID_EXPERT :: + * Adobe expert encoding. + * TT_ADOBE_ID_CUSTOM :: + * Adobe custom encoding. + * TT_ADOBE_ID_LATIN_1 :: + * Adobe Latin~1 encoding. + */ + +#define TT_ADOBE_ID_STANDARD 0 +#define TT_ADOBE_ID_EXPERT 1 +#define TT_ADOBE_ID_CUSTOM 2 +#define TT_ADOBE_ID_LATIN_1 3 + + + /************************************************************************** + * + * @enum: + * TT_MAC_LANGID_XXX + * + * @description: + * Possible values of the language identifier field in the name records + * of the SFNT 'name' table if the 'platform' identifier code is + * @TT_PLATFORM_MACINTOSH. These values are also used as return values + * for function @FT_Get_CMap_Language_ID. + * + * The canonical source for Apple's IDs is + * + * https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6name.html + */ + +#define TT_MAC_LANGID_ENGLISH 0 +#define TT_MAC_LANGID_FRENCH 1 +#define TT_MAC_LANGID_GERMAN 2 +#define TT_MAC_LANGID_ITALIAN 3 +#define TT_MAC_LANGID_DUTCH 4 +#define TT_MAC_LANGID_SWEDISH 5 +#define TT_MAC_LANGID_SPANISH 6 +#define TT_MAC_LANGID_DANISH 7 +#define TT_MAC_LANGID_PORTUGUESE 8 +#define TT_MAC_LANGID_NORWEGIAN 9 +#define TT_MAC_LANGID_HEBREW 10 +#define TT_MAC_LANGID_JAPANESE 11 +#define TT_MAC_LANGID_ARABIC 12 +#define TT_MAC_LANGID_FINNISH 13 +#define TT_MAC_LANGID_GREEK 14 +#define TT_MAC_LANGID_ICELANDIC 15 +#define TT_MAC_LANGID_MALTESE 16 +#define TT_MAC_LANGID_TURKISH 17 +#define TT_MAC_LANGID_CROATIAN 18 +#define TT_MAC_LANGID_CHINESE_TRADITIONAL 19 +#define TT_MAC_LANGID_URDU 20 +#define TT_MAC_LANGID_HINDI 21 +#define TT_MAC_LANGID_THAI 22 +#define TT_MAC_LANGID_KOREAN 23 +#define TT_MAC_LANGID_LITHUANIAN 24 +#define TT_MAC_LANGID_POLISH 25 +#define TT_MAC_LANGID_HUNGARIAN 26 +#define TT_MAC_LANGID_ESTONIAN 27 +#define TT_MAC_LANGID_LETTISH 28 +#define TT_MAC_LANGID_SAAMISK 29 +#define TT_MAC_LANGID_FAEROESE 30 +#define TT_MAC_LANGID_FARSI 31 +#define TT_MAC_LANGID_RUSSIAN 32 +#define TT_MAC_LANGID_CHINESE_SIMPLIFIED 33 +#define TT_MAC_LANGID_FLEMISH 34 +#define TT_MAC_LANGID_IRISH 35 +#define TT_MAC_LANGID_ALBANIAN 36 +#define TT_MAC_LANGID_ROMANIAN 37 +#define TT_MAC_LANGID_CZECH 38 +#define TT_MAC_LANGID_SLOVAK 39 +#define TT_MAC_LANGID_SLOVENIAN 40 +#define TT_MAC_LANGID_YIDDISH 41 +#define TT_MAC_LANGID_SERBIAN 42 +#define TT_MAC_LANGID_MACEDONIAN 43 +#define TT_MAC_LANGID_BULGARIAN 44 +#define TT_MAC_LANGID_UKRAINIAN 45 +#define TT_MAC_LANGID_BYELORUSSIAN 46 +#define TT_MAC_LANGID_UZBEK 47 +#define TT_MAC_LANGID_KAZAKH 48 +#define TT_MAC_LANGID_AZERBAIJANI 49 +#define TT_MAC_LANGID_AZERBAIJANI_CYRILLIC_SCRIPT 49 +#define TT_MAC_LANGID_AZERBAIJANI_ARABIC_SCRIPT 50 +#define TT_MAC_LANGID_ARMENIAN 51 +#define TT_MAC_LANGID_GEORGIAN 52 +#define TT_MAC_LANGID_MOLDAVIAN 53 +#define TT_MAC_LANGID_KIRGHIZ 54 +#define TT_MAC_LANGID_TAJIKI 55 +#define TT_MAC_LANGID_TURKMEN 56 +#define TT_MAC_LANGID_MONGOLIAN 57 +#define TT_MAC_LANGID_MONGOLIAN_MONGOLIAN_SCRIPT 57 +#define TT_MAC_LANGID_MONGOLIAN_CYRILLIC_SCRIPT 58 +#define TT_MAC_LANGID_PASHTO 59 +#define TT_MAC_LANGID_KURDISH 60 +#define TT_MAC_LANGID_KASHMIRI 61 +#define TT_MAC_LANGID_SINDHI 62 +#define TT_MAC_LANGID_TIBETAN 63 +#define TT_MAC_LANGID_NEPALI 64 +#define TT_MAC_LANGID_SANSKRIT 65 +#define TT_MAC_LANGID_MARATHI 66 +#define TT_MAC_LANGID_BENGALI 67 +#define TT_MAC_LANGID_ASSAMESE 68 +#define TT_MAC_LANGID_GUJARATI 69 +#define TT_MAC_LANGID_PUNJABI 70 +#define TT_MAC_LANGID_ORIYA 71 +#define TT_MAC_LANGID_MALAYALAM 72 +#define TT_MAC_LANGID_KANNADA 73 +#define TT_MAC_LANGID_TAMIL 74 +#define TT_MAC_LANGID_TELUGU 75 +#define TT_MAC_LANGID_SINHALESE 76 +#define TT_MAC_LANGID_BURMESE 77 +#define TT_MAC_LANGID_KHMER 78 +#define TT_MAC_LANGID_LAO 79 +#define TT_MAC_LANGID_VIETNAMESE 80 +#define TT_MAC_LANGID_INDONESIAN 81 +#define TT_MAC_LANGID_TAGALOG 82 +#define TT_MAC_LANGID_MALAY_ROMAN_SCRIPT 83 +#define TT_MAC_LANGID_MALAY_ARABIC_SCRIPT 84 +#define TT_MAC_LANGID_AMHARIC 85 +#define TT_MAC_LANGID_TIGRINYA 86 +#define TT_MAC_LANGID_GALLA 87 +#define TT_MAC_LANGID_SOMALI 88 +#define TT_MAC_LANGID_SWAHILI 89 +#define TT_MAC_LANGID_RUANDA 90 +#define TT_MAC_LANGID_RUNDI 91 +#define TT_MAC_LANGID_CHEWA 92 +#define TT_MAC_LANGID_MALAGASY 93 +#define TT_MAC_LANGID_ESPERANTO 94 +#define TT_MAC_LANGID_WELSH 128 +#define TT_MAC_LANGID_BASQUE 129 +#define TT_MAC_LANGID_CATALAN 130 +#define TT_MAC_LANGID_LATIN 131 +#define TT_MAC_LANGID_QUECHUA 132 +#define TT_MAC_LANGID_GUARANI 133 +#define TT_MAC_LANGID_AYMARA 134 +#define TT_MAC_LANGID_TATAR 135 +#define TT_MAC_LANGID_UIGHUR 136 +#define TT_MAC_LANGID_DZONGKHA 137 +#define TT_MAC_LANGID_JAVANESE 138 +#define TT_MAC_LANGID_SUNDANESE 139 + + /* The following codes are new as of 2000-03-10 */ +#define TT_MAC_LANGID_GALICIAN 140 +#define TT_MAC_LANGID_AFRIKAANS 141 +#define TT_MAC_LANGID_BRETON 142 +#define TT_MAC_LANGID_INUKTITUT 143 +#define TT_MAC_LANGID_SCOTTISH_GAELIC 144 +#define TT_MAC_LANGID_MANX_GAELIC 145 +#define TT_MAC_LANGID_IRISH_GAELIC 146 +#define TT_MAC_LANGID_TONGAN 147 +#define TT_MAC_LANGID_GREEK_POLYTONIC 148 +#define TT_MAC_LANGID_GREELANDIC 149 +#define TT_MAC_LANGID_AZERBAIJANI_ROMAN_SCRIPT 150 + + + /************************************************************************** + * + * @enum: + * TT_MS_LANGID_XXX + * + * @description: + * Possible values of the language identifier field in the name records + * of the SFNT 'name' table if the 'platform' identifier code is + * @TT_PLATFORM_MICROSOFT. These values are also used as return values + * for function @FT_Get_CMap_Language_ID. + * + * The canonical source for Microsoft's IDs is + * + * https://learn.microsoft.com/windows/win32/intl/language-identifier-constants-and-strings , + * + * however, we only provide macros for language identifiers present in + * the OpenType specification: Microsoft has abandoned the concept of + * LCIDs (language code identifiers), and format~1 of the 'name' table + * provides a better mechanism for languages not covered here. + * + * More legacy values not listed in the reference can be found in the + * @FT_TRUETYPE_IDS_H header file. + */ + +#define TT_MS_LANGID_ARABIC_SAUDI_ARABIA 0x0401 +#define TT_MS_LANGID_ARABIC_IRAQ 0x0801 +#define TT_MS_LANGID_ARABIC_EGYPT 0x0C01 +#define TT_MS_LANGID_ARABIC_LIBYA 0x1001 +#define TT_MS_LANGID_ARABIC_ALGERIA 0x1401 +#define TT_MS_LANGID_ARABIC_MOROCCO 0x1801 +#define TT_MS_LANGID_ARABIC_TUNISIA 0x1C01 +#define TT_MS_LANGID_ARABIC_OMAN 0x2001 +#define TT_MS_LANGID_ARABIC_YEMEN 0x2401 +#define TT_MS_LANGID_ARABIC_SYRIA 0x2801 +#define TT_MS_LANGID_ARABIC_JORDAN 0x2C01 +#define TT_MS_LANGID_ARABIC_LEBANON 0x3001 +#define TT_MS_LANGID_ARABIC_KUWAIT 0x3401 +#define TT_MS_LANGID_ARABIC_UAE 0x3801 +#define TT_MS_LANGID_ARABIC_BAHRAIN 0x3C01 +#define TT_MS_LANGID_ARABIC_QATAR 0x4001 +#define TT_MS_LANGID_BULGARIAN_BULGARIA 0x0402 +#define TT_MS_LANGID_CATALAN_CATALAN 0x0403 +#define TT_MS_LANGID_CHINESE_TAIWAN 0x0404 +#define TT_MS_LANGID_CHINESE_PRC 0x0804 +#define TT_MS_LANGID_CHINESE_HONG_KONG 0x0C04 +#define TT_MS_LANGID_CHINESE_SINGAPORE 0x1004 +#define TT_MS_LANGID_CHINESE_MACAO 0x1404 +#define TT_MS_LANGID_CZECH_CZECH_REPUBLIC 0x0405 +#define TT_MS_LANGID_DANISH_DENMARK 0x0406 +#define TT_MS_LANGID_GERMAN_GERMANY 0x0407 +#define TT_MS_LANGID_GERMAN_SWITZERLAND 0x0807 +#define TT_MS_LANGID_GERMAN_AUSTRIA 0x0C07 +#define TT_MS_LANGID_GERMAN_LUXEMBOURG 0x1007 +#define TT_MS_LANGID_GERMAN_LIECHTENSTEIN 0x1407 +#define TT_MS_LANGID_GREEK_GREECE 0x0408 +#define TT_MS_LANGID_ENGLISH_UNITED_STATES 0x0409 +#define TT_MS_LANGID_ENGLISH_UNITED_KINGDOM 0x0809 +#define TT_MS_LANGID_ENGLISH_AUSTRALIA 0x0C09 +#define TT_MS_LANGID_ENGLISH_CANADA 0x1009 +#define TT_MS_LANGID_ENGLISH_NEW_ZEALAND 0x1409 +#define TT_MS_LANGID_ENGLISH_IRELAND 0x1809 +#define TT_MS_LANGID_ENGLISH_SOUTH_AFRICA 0x1C09 +#define TT_MS_LANGID_ENGLISH_JAMAICA 0x2009 +#define TT_MS_LANGID_ENGLISH_CARIBBEAN 0x2409 +#define TT_MS_LANGID_ENGLISH_BELIZE 0x2809 +#define TT_MS_LANGID_ENGLISH_TRINIDAD 0x2C09 +#define TT_MS_LANGID_ENGLISH_ZIMBABWE 0x3009 +#define TT_MS_LANGID_ENGLISH_PHILIPPINES 0x3409 +#define TT_MS_LANGID_ENGLISH_INDIA 0x4009 +#define TT_MS_LANGID_ENGLISH_MALAYSIA 0x4409 +#define TT_MS_LANGID_ENGLISH_SINGAPORE 0x4809 +#define TT_MS_LANGID_SPANISH_SPAIN_TRADITIONAL_SORT 0x040A +#define TT_MS_LANGID_SPANISH_MEXICO 0x080A +#define TT_MS_LANGID_SPANISH_SPAIN_MODERN_SORT 0x0C0A +#define TT_MS_LANGID_SPANISH_GUATEMALA 0x100A +#define TT_MS_LANGID_SPANISH_COSTA_RICA 0x140A +#define TT_MS_LANGID_SPANISH_PANAMA 0x180A +#define TT_MS_LANGID_SPANISH_DOMINICAN_REPUBLIC 0x1C0A +#define TT_MS_LANGID_SPANISH_VENEZUELA 0x200A +#define TT_MS_LANGID_SPANISH_COLOMBIA 0x240A +#define TT_MS_LANGID_SPANISH_PERU 0x280A +#define TT_MS_LANGID_SPANISH_ARGENTINA 0x2C0A +#define TT_MS_LANGID_SPANISH_ECUADOR 0x300A +#define TT_MS_LANGID_SPANISH_CHILE 0x340A +#define TT_MS_LANGID_SPANISH_URUGUAY 0x380A +#define TT_MS_LANGID_SPANISH_PARAGUAY 0x3C0A +#define TT_MS_LANGID_SPANISH_BOLIVIA 0x400A +#define TT_MS_LANGID_SPANISH_EL_SALVADOR 0x440A +#define TT_MS_LANGID_SPANISH_HONDURAS 0x480A +#define TT_MS_LANGID_SPANISH_NICARAGUA 0x4C0A +#define TT_MS_LANGID_SPANISH_PUERTO_RICO 0x500A +#define TT_MS_LANGID_SPANISH_UNITED_STATES 0x540A +#define TT_MS_LANGID_FINNISH_FINLAND 0x040B +#define TT_MS_LANGID_FRENCH_FRANCE 0x040C +#define TT_MS_LANGID_FRENCH_BELGIUM 0x080C +#define TT_MS_LANGID_FRENCH_CANADA 0x0C0C +#define TT_MS_LANGID_FRENCH_SWITZERLAND 0x100C +#define TT_MS_LANGID_FRENCH_LUXEMBOURG 0x140C +#define TT_MS_LANGID_FRENCH_MONACO 0x180C +#define TT_MS_LANGID_HEBREW_ISRAEL 0x040D +#define TT_MS_LANGID_HUNGARIAN_HUNGARY 0x040E +#define TT_MS_LANGID_ICELANDIC_ICELAND 0x040F +#define TT_MS_LANGID_ITALIAN_ITALY 0x0410 +#define TT_MS_LANGID_ITALIAN_SWITZERLAND 0x0810 +#define TT_MS_LANGID_JAPANESE_JAPAN 0x0411 +#define TT_MS_LANGID_KOREAN_KOREA 0x0412 +#define TT_MS_LANGID_DUTCH_NETHERLANDS 0x0413 +#define TT_MS_LANGID_DUTCH_BELGIUM 0x0813 +#define TT_MS_LANGID_NORWEGIAN_NORWAY_BOKMAL 0x0414 +#define TT_MS_LANGID_NORWEGIAN_NORWAY_NYNORSK 0x0814 +#define TT_MS_LANGID_POLISH_POLAND 0x0415 +#define TT_MS_LANGID_PORTUGUESE_BRAZIL 0x0416 +#define TT_MS_LANGID_PORTUGUESE_PORTUGAL 0x0816 +#define TT_MS_LANGID_ROMANSH_SWITZERLAND 0x0417 +#define TT_MS_LANGID_ROMANIAN_ROMANIA 0x0418 +#define TT_MS_LANGID_RUSSIAN_RUSSIA 0x0419 +#define TT_MS_LANGID_CROATIAN_CROATIA 0x041A +#define TT_MS_LANGID_SERBIAN_SERBIA_LATIN 0x081A +#define TT_MS_LANGID_SERBIAN_SERBIA_CYRILLIC 0x0C1A +#define TT_MS_LANGID_CROATIAN_BOSNIA_HERZEGOVINA 0x101A +#define TT_MS_LANGID_BOSNIAN_BOSNIA_HERZEGOVINA 0x141A +#define TT_MS_LANGID_SERBIAN_BOSNIA_HERZ_LATIN 0x181A +#define TT_MS_LANGID_SERBIAN_BOSNIA_HERZ_CYRILLIC 0x1C1A +#define TT_MS_LANGID_BOSNIAN_BOSNIA_HERZ_CYRILLIC 0x201A +#define TT_MS_LANGID_SLOVAK_SLOVAKIA 0x041B +#define TT_MS_LANGID_ALBANIAN_ALBANIA 0x041C +#define TT_MS_LANGID_SWEDISH_SWEDEN 0x041D +#define TT_MS_LANGID_SWEDISH_FINLAND 0x081D +#define TT_MS_LANGID_THAI_THAILAND 0x041E +#define TT_MS_LANGID_TURKISH_TURKEY 0x041F +#define TT_MS_LANGID_URDU_PAKISTAN 0x0420 +#define TT_MS_LANGID_INDONESIAN_INDONESIA 0x0421 +#define TT_MS_LANGID_UKRAINIAN_UKRAINE 0x0422 +#define TT_MS_LANGID_BELARUSIAN_BELARUS 0x0423 +#define TT_MS_LANGID_SLOVENIAN_SLOVENIA 0x0424 +#define TT_MS_LANGID_ESTONIAN_ESTONIA 0x0425 +#define TT_MS_LANGID_LATVIAN_LATVIA 0x0426 +#define TT_MS_LANGID_LITHUANIAN_LITHUANIA 0x0427 +#define TT_MS_LANGID_TAJIK_TAJIKISTAN 0x0428 +#define TT_MS_LANGID_VIETNAMESE_VIET_NAM 0x042A +#define TT_MS_LANGID_ARMENIAN_ARMENIA 0x042B +#define TT_MS_LANGID_AZERI_AZERBAIJAN_LATIN 0x042C +#define TT_MS_LANGID_AZERI_AZERBAIJAN_CYRILLIC 0x082C +#define TT_MS_LANGID_BASQUE_BASQUE 0x042D +#define TT_MS_LANGID_UPPER_SORBIAN_GERMANY 0x042E +#define TT_MS_LANGID_LOWER_SORBIAN_GERMANY 0x082E +#define TT_MS_LANGID_MACEDONIAN_MACEDONIA 0x042F +#define TT_MS_LANGID_SETSWANA_SOUTH_AFRICA 0x0432 +#define TT_MS_LANGID_ISIXHOSA_SOUTH_AFRICA 0x0434 +#define TT_MS_LANGID_ISIZULU_SOUTH_AFRICA 0x0435 +#define TT_MS_LANGID_AFRIKAANS_SOUTH_AFRICA 0x0436 +#define TT_MS_LANGID_GEORGIAN_GEORGIA 0x0437 +#define TT_MS_LANGID_FAEROESE_FAEROE_ISLANDS 0x0438 +#define TT_MS_LANGID_HINDI_INDIA 0x0439 +#define TT_MS_LANGID_MALTESE_MALTA 0x043A +#define TT_MS_LANGID_SAMI_NORTHERN_NORWAY 0x043B +#define TT_MS_LANGID_SAMI_NORTHERN_SWEDEN 0x083B +#define TT_MS_LANGID_SAMI_NORTHERN_FINLAND 0x0C3B +#define TT_MS_LANGID_SAMI_LULE_NORWAY 0x103B +#define TT_MS_LANGID_SAMI_LULE_SWEDEN 0x143B +#define TT_MS_LANGID_SAMI_SOUTHERN_NORWAY 0x183B +#define TT_MS_LANGID_SAMI_SOUTHERN_SWEDEN 0x1C3B +#define TT_MS_LANGID_SAMI_SKOLT_FINLAND 0x203B +#define TT_MS_LANGID_SAMI_INARI_FINLAND 0x243B +#define TT_MS_LANGID_IRISH_IRELAND 0x083C +#define TT_MS_LANGID_MALAY_MALAYSIA 0x043E +#define TT_MS_LANGID_MALAY_BRUNEI_DARUSSALAM 0x083E +#define TT_MS_LANGID_KAZAKH_KAZAKHSTAN 0x043F +#define TT_MS_LANGID_KYRGYZ_KYRGYZSTAN /* Cyrillic */ 0x0440 +#define TT_MS_LANGID_KISWAHILI_KENYA 0x0441 +#define TT_MS_LANGID_TURKMEN_TURKMENISTAN 0x0442 +#define TT_MS_LANGID_UZBEK_UZBEKISTAN_LATIN 0x0443 +#define TT_MS_LANGID_UZBEK_UZBEKISTAN_CYRILLIC 0x0843 +#define TT_MS_LANGID_TATAR_RUSSIA 0x0444 +#define TT_MS_LANGID_BENGALI_INDIA 0x0445 +#define TT_MS_LANGID_BENGALI_BANGLADESH 0x0845 +#define TT_MS_LANGID_PUNJABI_INDIA 0x0446 +#define TT_MS_LANGID_GUJARATI_INDIA 0x0447 +#define TT_MS_LANGID_ODIA_INDIA 0x0448 +#define TT_MS_LANGID_TAMIL_INDIA 0x0449 +#define TT_MS_LANGID_TELUGU_INDIA 0x044A +#define TT_MS_LANGID_KANNADA_INDIA 0x044B +#define TT_MS_LANGID_MALAYALAM_INDIA 0x044C +#define TT_MS_LANGID_ASSAMESE_INDIA 0x044D +#define TT_MS_LANGID_MARATHI_INDIA 0x044E +#define TT_MS_LANGID_SANSKRIT_INDIA 0x044F +#define TT_MS_LANGID_MONGOLIAN_MONGOLIA /* Cyrillic */ 0x0450 +#define TT_MS_LANGID_MONGOLIAN_PRC 0x0850 +#define TT_MS_LANGID_TIBETAN_PRC 0x0451 +#define TT_MS_LANGID_WELSH_UNITED_KINGDOM 0x0452 +#define TT_MS_LANGID_KHMER_CAMBODIA 0x0453 +#define TT_MS_LANGID_LAO_LAOS 0x0454 +#define TT_MS_LANGID_GALICIAN_GALICIAN 0x0456 +#define TT_MS_LANGID_KONKANI_INDIA 0x0457 +#define TT_MS_LANGID_SYRIAC_SYRIA 0x045A +#define TT_MS_LANGID_SINHALA_SRI_LANKA 0x045B +#define TT_MS_LANGID_INUKTITUT_CANADA 0x045D +#define TT_MS_LANGID_INUKTITUT_CANADA_LATIN 0x085D +#define TT_MS_LANGID_AMHARIC_ETHIOPIA 0x045E +#define TT_MS_LANGID_TAMAZIGHT_ALGERIA 0x085F +#define TT_MS_LANGID_NEPALI_NEPAL 0x0461 +#define TT_MS_LANGID_FRISIAN_NETHERLANDS 0x0462 +#define TT_MS_LANGID_PASHTO_AFGHANISTAN 0x0463 +#define TT_MS_LANGID_FILIPINO_PHILIPPINES 0x0464 +#define TT_MS_LANGID_DHIVEHI_MALDIVES 0x0465 +#define TT_MS_LANGID_HAUSA_NIGERIA 0x0468 +#define TT_MS_LANGID_YORUBA_NIGERIA 0x046A +#define TT_MS_LANGID_QUECHUA_BOLIVIA 0x046B +#define TT_MS_LANGID_QUECHUA_ECUADOR 0x086B +#define TT_MS_LANGID_QUECHUA_PERU 0x0C6B +#define TT_MS_LANGID_SESOTHO_SA_LEBOA_SOUTH_AFRICA 0x046C +#define TT_MS_LANGID_BASHKIR_RUSSIA 0x046D +#define TT_MS_LANGID_LUXEMBOURGISH_LUXEMBOURG 0x046E +#define TT_MS_LANGID_GREENLANDIC_GREENLAND 0x046F +#define TT_MS_LANGID_IGBO_NIGERIA 0x0470 +#define TT_MS_LANGID_YI_PRC 0x0478 +#define TT_MS_LANGID_MAPUDUNGUN_CHILE 0x047A +#define TT_MS_LANGID_MOHAWK_MOHAWK 0x047C +#define TT_MS_LANGID_BRETON_FRANCE 0x047E +#define TT_MS_LANGID_UIGHUR_PRC 0x0480 +#define TT_MS_LANGID_MAORI_NEW_ZEALAND 0x0481 +#define TT_MS_LANGID_OCCITAN_FRANCE 0x0482 +#define TT_MS_LANGID_CORSICAN_FRANCE 0x0483 +#define TT_MS_LANGID_ALSATIAN_FRANCE 0x0484 +#define TT_MS_LANGID_YAKUT_RUSSIA 0x0485 +#define TT_MS_LANGID_KICHE_GUATEMALA 0x0486 +#define TT_MS_LANGID_KINYARWANDA_RWANDA 0x0487 +#define TT_MS_LANGID_WOLOF_SENEGAL 0x0488 +#define TT_MS_LANGID_DARI_AFGHANISTAN 0x048C + + /* */ + + + /* legacy macro definitions not present in OpenType 1.8.1 */ +#define TT_MS_LANGID_ARABIC_GENERAL 0x0001 +#define TT_MS_LANGID_CATALAN_SPAIN \ + TT_MS_LANGID_CATALAN_CATALAN +#define TT_MS_LANGID_CHINESE_GENERAL 0x0004 +#define TT_MS_LANGID_CHINESE_MACAU \ + TT_MS_LANGID_CHINESE_MACAO +#define TT_MS_LANGID_GERMAN_LIECHTENSTEI \ + TT_MS_LANGID_GERMAN_LIECHTENSTEIN +#define TT_MS_LANGID_ENGLISH_GENERAL 0x0009 +#define TT_MS_LANGID_ENGLISH_INDONESIA 0x3809 +#define TT_MS_LANGID_ENGLISH_HONG_KONG 0x3C09 +#define TT_MS_LANGID_SPANISH_SPAIN_INTERNATIONAL_SORT \ + TT_MS_LANGID_SPANISH_SPAIN_MODERN_SORT +#define TT_MS_LANGID_SPANISH_LATIN_AMERICA 0xE40AU +#define TT_MS_LANGID_FRENCH_WEST_INDIES 0x1C0C +#define TT_MS_LANGID_FRENCH_REUNION 0x200C +#define TT_MS_LANGID_FRENCH_CONGO 0x240C + /* which was formerly: */ +#define TT_MS_LANGID_FRENCH_ZAIRE \ + TT_MS_LANGID_FRENCH_CONGO +#define TT_MS_LANGID_FRENCH_SENEGAL 0x280C +#define TT_MS_LANGID_FRENCH_CAMEROON 0x2C0C +#define TT_MS_LANGID_FRENCH_COTE_D_IVOIRE 0x300C +#define TT_MS_LANGID_FRENCH_MALI 0x340C +#define TT_MS_LANGID_FRENCH_MOROCCO 0x380C +#define TT_MS_LANGID_FRENCH_HAITI 0x3C0C +#define TT_MS_LANGID_FRENCH_NORTH_AFRICA 0xE40CU +#define TT_MS_LANGID_KOREAN_EXTENDED_WANSUNG_KOREA \ + TT_MS_LANGID_KOREAN_KOREA +#define TT_MS_LANGID_KOREAN_JOHAB_KOREA 0x0812 +#define TT_MS_LANGID_RHAETO_ROMANIC_SWITZERLAND \ + TT_MS_LANGID_ROMANSH_SWITZERLAND +#define TT_MS_LANGID_MOLDAVIAN_MOLDAVIA 0x0818 +#define TT_MS_LANGID_RUSSIAN_MOLDAVIA 0x0819 +#define TT_MS_LANGID_URDU_INDIA 0x0820 +#define TT_MS_LANGID_CLASSIC_LITHUANIAN_LITHUANIA 0x0827 +#define TT_MS_LANGID_SLOVENE_SLOVENIA \ + TT_MS_LANGID_SLOVENIAN_SLOVENIA +#define TT_MS_LANGID_FARSI_IRAN 0x0429 +#define TT_MS_LANGID_BASQUE_SPAIN \ + TT_MS_LANGID_BASQUE_BASQUE +#define TT_MS_LANGID_SORBIAN_GERMANY \ + TT_MS_LANGID_UPPER_SORBIAN_GERMANY +#define TT_MS_LANGID_SUTU_SOUTH_AFRICA 0x0430 +#define TT_MS_LANGID_TSONGA_SOUTH_AFRICA 0x0431 +#define TT_MS_LANGID_TSWANA_SOUTH_AFRICA \ + TT_MS_LANGID_SETSWANA_SOUTH_AFRICA +#define TT_MS_LANGID_VENDA_SOUTH_AFRICA 0x0433 +#define TT_MS_LANGID_XHOSA_SOUTH_AFRICA \ + TT_MS_LANGID_ISIXHOSA_SOUTH_AFRICA +#define TT_MS_LANGID_ZULU_SOUTH_AFRICA \ + TT_MS_LANGID_ISIZULU_SOUTH_AFRICA +#define TT_MS_LANGID_SAAMI_LAPONIA 0x043B + /* the next two values are incorrectly inverted */ +#define TT_MS_LANGID_IRISH_GAELIC_IRELAND 0x043C +#define TT_MS_LANGID_SCOTTISH_GAELIC_UNITED_KINGDOM 0x083C +#define TT_MS_LANGID_YIDDISH_GERMANY 0x043D +#define TT_MS_LANGID_KAZAK_KAZAKSTAN \ + TT_MS_LANGID_KAZAKH_KAZAKHSTAN +#define TT_MS_LANGID_KIRGHIZ_KIRGHIZ_REPUBLIC \ + TT_MS_LANGID_KYRGYZ_KYRGYZSTAN +#define TT_MS_LANGID_KIRGHIZ_KIRGHIZSTAN \ + TT_MS_LANGID_KYRGYZ_KYRGYZSTAN +#define TT_MS_LANGID_SWAHILI_KENYA \ + TT_MS_LANGID_KISWAHILI_KENYA +#define TT_MS_LANGID_TATAR_TATARSTAN \ + TT_MS_LANGID_TATAR_RUSSIA +#define TT_MS_LANGID_PUNJABI_ARABIC_PAKISTAN 0x0846 +#define TT_MS_LANGID_ORIYA_INDIA \ + TT_MS_LANGID_ODIA_INDIA +#define TT_MS_LANGID_MONGOLIAN_MONGOLIA_MONGOLIAN \ + TT_MS_LANGID_MONGOLIAN_PRC +#define TT_MS_LANGID_TIBETAN_CHINA \ + TT_MS_LANGID_TIBETAN_PRC +#define TT_MS_LANGID_DZONGHKA_BHUTAN 0x0851 +#define TT_MS_LANGID_TIBETAN_BHUTAN \ + TT_MS_LANGID_DZONGHKA_BHUTAN +#define TT_MS_LANGID_WELSH_WALES \ + TT_MS_LANGID_WELSH_UNITED_KINGDOM +#define TT_MS_LANGID_BURMESE_MYANMAR 0x0455 +#define TT_MS_LANGID_GALICIAN_SPAIN \ + TT_MS_LANGID_GALICIAN_GALICIAN +#define TT_MS_LANGID_MANIPURI_INDIA /* Bengali */ 0x0458 +#define TT_MS_LANGID_SINDHI_INDIA /* Arabic */ 0x0459 +#define TT_MS_LANGID_SINDHI_PAKISTAN 0x0859 +#define TT_MS_LANGID_SINHALESE_SRI_LANKA \ + TT_MS_LANGID_SINHALA_SRI_LANKA +#define TT_MS_LANGID_CHEROKEE_UNITED_STATES 0x045C +#define TT_MS_LANGID_TAMAZIGHT_MOROCCO /* Arabic */ 0x045F +#define TT_MS_LANGID_TAMAZIGHT_MOROCCO_LATIN \ + TT_MS_LANGID_TAMAZIGHT_ALGERIA +#define TT_MS_LANGID_KASHMIRI_PAKISTAN /* Arabic */ 0x0460 +#define TT_MS_LANGID_KASHMIRI_SASIA 0x0860 +#define TT_MS_LANGID_KASHMIRI_INDIA \ + TT_MS_LANGID_KASHMIRI_SASIA +#define TT_MS_LANGID_NEPALI_INDIA 0x0861 +#define TT_MS_LANGID_DIVEHI_MALDIVES \ + TT_MS_LANGID_DHIVEHI_MALDIVES +#define TT_MS_LANGID_EDO_NIGERIA 0x0466 +#define TT_MS_LANGID_FULFULDE_NIGERIA 0x0467 +#define TT_MS_LANGID_IBIBIO_NIGERIA 0x0469 +#define TT_MS_LANGID_SEPEDI_SOUTH_AFRICA \ + TT_MS_LANGID_SESOTHO_SA_LEBOA_SOUTH_AFRICA +#define TT_MS_LANGID_SOTHO_SOUTHERN_SOUTH_AFRICA \ + TT_MS_LANGID_SESOTHO_SA_LEBOA_SOUTH_AFRICA +#define TT_MS_LANGID_KANURI_NIGERIA 0x0471 +#define TT_MS_LANGID_OROMO_ETHIOPIA 0x0472 +#define TT_MS_LANGID_TIGRIGNA_ETHIOPIA 0x0473 +#define TT_MS_LANGID_TIGRIGNA_ERYTHREA 0x0873 +#define TT_MS_LANGID_TIGRIGNA_ERYTREA \ + TT_MS_LANGID_TIGRIGNA_ERYTHREA +#define TT_MS_LANGID_GUARANI_PARAGUAY 0x0474 +#define TT_MS_LANGID_HAWAIIAN_UNITED_STATES 0x0475 +#define TT_MS_LANGID_LATIN 0x0476 +#define TT_MS_LANGID_SOMALI_SOMALIA 0x0477 +#define TT_MS_LANGID_YI_CHINA \ + TT_MS_LANGID_YI_PRC +#define TT_MS_LANGID_PAPIAMENTU_NETHERLANDS_ANTILLES 0x0479 +#define TT_MS_LANGID_UIGHUR_CHINA \ + TT_MS_LANGID_UIGHUR_PRC + + + /************************************************************************** + * + * @enum: + * TT_NAME_ID_XXX + * + * @description: + * Possible values of the 'name' identifier field in the name records of + * an SFNT 'name' table. These values are platform independent. + */ + +#define TT_NAME_ID_COPYRIGHT 0 +#define TT_NAME_ID_FONT_FAMILY 1 +#define TT_NAME_ID_FONT_SUBFAMILY 2 +#define TT_NAME_ID_UNIQUE_ID 3 +#define TT_NAME_ID_FULL_NAME 4 +#define TT_NAME_ID_VERSION_STRING 5 +#define TT_NAME_ID_PS_NAME 6 +#define TT_NAME_ID_TRADEMARK 7 + + /* the following values are from the OpenType spec */ +#define TT_NAME_ID_MANUFACTURER 8 +#define TT_NAME_ID_DESIGNER 9 +#define TT_NAME_ID_DESCRIPTION 10 +#define TT_NAME_ID_VENDOR_URL 11 +#define TT_NAME_ID_DESIGNER_URL 12 +#define TT_NAME_ID_LICENSE 13 +#define TT_NAME_ID_LICENSE_URL 14 + /* number 15 is reserved */ +#define TT_NAME_ID_TYPOGRAPHIC_FAMILY 16 +#define TT_NAME_ID_TYPOGRAPHIC_SUBFAMILY 17 +#define TT_NAME_ID_MAC_FULL_NAME 18 + + /* The following code is new as of 2000-01-21 */ +#define TT_NAME_ID_SAMPLE_TEXT 19 + + /* This is new in OpenType 1.3 */ +#define TT_NAME_ID_CID_FINDFONT_NAME 20 + + /* This is new in OpenType 1.5 */ +#define TT_NAME_ID_WWS_FAMILY 21 +#define TT_NAME_ID_WWS_SUBFAMILY 22 + + /* This is new in OpenType 1.7 */ +#define TT_NAME_ID_LIGHT_BACKGROUND 23 +#define TT_NAME_ID_DARK_BACKGROUND 24 + + /* This is new in OpenType 1.8 */ +#define TT_NAME_ID_VARIATIONS_PREFIX 25 + + /* these two values are deprecated */ +#define TT_NAME_ID_PREFERRED_FAMILY TT_NAME_ID_TYPOGRAPHIC_FAMILY +#define TT_NAME_ID_PREFERRED_SUBFAMILY TT_NAME_ID_TYPOGRAPHIC_SUBFAMILY + + + /************************************************************************** + * + * @enum: + * TT_UCR_XXX + * + * @description: + * Possible bit mask values for the `ulUnicodeRangeX` fields in an SFNT + * 'OS/2' table. + */ + + /* ulUnicodeRange1 */ + /* --------------- */ + + /* Bit 0 Basic Latin */ +#define TT_UCR_BASIC_LATIN (1UL << 0) /* U+0020-U+007E */ + /* Bit 1 C1 Controls and Latin-1 Supplement */ +#define TT_UCR_LATIN1_SUPPLEMENT (1UL << 1) /* U+0080-U+00FF */ + /* Bit 2 Latin Extended-A */ +#define TT_UCR_LATIN_EXTENDED_A (1UL << 2) /* U+0100-U+017F */ + /* Bit 3 Latin Extended-B */ +#define TT_UCR_LATIN_EXTENDED_B (1UL << 3) /* U+0180-U+024F */ + /* Bit 4 IPA Extensions */ + /* Phonetic Extensions */ + /* Phonetic Extensions Supplement */ +#define TT_UCR_IPA_EXTENSIONS (1UL << 4) /* U+0250-U+02AF */ + /* U+1D00-U+1D7F */ + /* U+1D80-U+1DBF */ + /* Bit 5 Spacing Modifier Letters */ + /* Modifier Tone Letters */ +#define TT_UCR_SPACING_MODIFIER (1UL << 5) /* U+02B0-U+02FF */ + /* U+A700-U+A71F */ + /* Bit 6 Combining Diacritical Marks */ + /* Combining Diacritical Marks Supplement */ +#define TT_UCR_COMBINING_DIACRITICAL_MARKS (1UL << 6) /* U+0300-U+036F */ + /* U+1DC0-U+1DFF */ + /* Bit 7 Greek and Coptic */ +#define TT_UCR_GREEK (1UL << 7) /* U+0370-U+03FF */ + /* Bit 8 Coptic */ +#define TT_UCR_COPTIC (1UL << 8) /* U+2C80-U+2CFF */ + /* Bit 9 Cyrillic */ + /* Cyrillic Supplement */ + /* Cyrillic Extended-A */ + /* Cyrillic Extended-B */ +#define TT_UCR_CYRILLIC (1UL << 9) /* U+0400-U+04FF */ + /* U+0500-U+052F */ + /* U+2DE0-U+2DFF */ + /* U+A640-U+A69F */ + /* Bit 10 Armenian */ +#define TT_UCR_ARMENIAN (1UL << 10) /* U+0530-U+058F */ + /* Bit 11 Hebrew */ +#define TT_UCR_HEBREW (1UL << 11) /* U+0590-U+05FF */ + /* Bit 12 Vai */ +#define TT_UCR_VAI (1UL << 12) /* U+A500-U+A63F */ + /* Bit 13 Arabic */ + /* Arabic Supplement */ +#define TT_UCR_ARABIC (1UL << 13) /* U+0600-U+06FF */ + /* U+0750-U+077F */ + /* Bit 14 NKo */ +#define TT_UCR_NKO (1UL << 14) /* U+07C0-U+07FF */ + /* Bit 15 Devanagari */ +#define TT_UCR_DEVANAGARI (1UL << 15) /* U+0900-U+097F */ + /* Bit 16 Bangla (Bengali) */ +#define TT_UCR_BENGALI (1UL << 16) /* U+0980-U+09FF */ + /* Bit 17 Gurmukhi */ +#define TT_UCR_GURMUKHI (1UL << 17) /* U+0A00-U+0A7F */ + /* Bit 18 Gujarati */ +#define TT_UCR_GUJARATI (1UL << 18) /* U+0A80-U+0AFF */ + /* Bit 19 Oriya (Odia) */ +#define TT_UCR_ORIYA (1UL << 19) /* U+0B00-U+0B7F */ + /* Bit 20 Tamil */ +#define TT_UCR_TAMIL (1UL << 20) /* U+0B80-U+0BFF */ + /* Bit 21 Telugu */ +#define TT_UCR_TELUGU (1UL << 21) /* U+0C00-U+0C7F */ + /* Bit 22 Kannada */ +#define TT_UCR_KANNADA (1UL << 22) /* U+0C80-U+0CFF */ + /* Bit 23 Malayalam */ +#define TT_UCR_MALAYALAM (1UL << 23) /* U+0D00-U+0D7F */ + /* Bit 24 Thai */ +#define TT_UCR_THAI (1UL << 24) /* U+0E00-U+0E7F */ + /* Bit 25 Lao */ +#define TT_UCR_LAO (1UL << 25) /* U+0E80-U+0EFF */ + /* Bit 26 Georgian */ + /* Georgian Supplement */ +#define TT_UCR_GEORGIAN (1UL << 26) /* U+10A0-U+10FF */ + /* U+2D00-U+2D2F */ + /* Bit 27 Balinese */ +#define TT_UCR_BALINESE (1UL << 27) /* U+1B00-U+1B7F */ + /* Bit 28 Hangul Jamo */ +#define TT_UCR_HANGUL_JAMO (1UL << 28) /* U+1100-U+11FF */ + /* Bit 29 Latin Extended Additional */ + /* Latin Extended-C */ + /* Latin Extended-D */ +#define TT_UCR_LATIN_EXTENDED_ADDITIONAL (1UL << 29) /* U+1E00-U+1EFF */ + /* U+2C60-U+2C7F */ + /* U+A720-U+A7FF */ + /* Bit 30 Greek Extended */ +#define TT_UCR_GREEK_EXTENDED (1UL << 30) /* U+1F00-U+1FFF */ + /* Bit 31 General Punctuation */ + /* Supplemental Punctuation */ +#define TT_UCR_GENERAL_PUNCTUATION (1UL << 31) /* U+2000-U+206F */ + /* U+2E00-U+2E7F */ + + /* ulUnicodeRange2 */ + /* --------------- */ + + /* Bit 32 Superscripts And Subscripts */ +#define TT_UCR_SUPERSCRIPTS_SUBSCRIPTS (1UL << 0) /* U+2070-U+209F */ + /* Bit 33 Currency Symbols */ +#define TT_UCR_CURRENCY_SYMBOLS (1UL << 1) /* U+20A0-U+20CF */ + /* Bit 34 Combining Diacritical Marks For Symbols */ +#define TT_UCR_COMBINING_DIACRITICAL_MARKS_SYMB \ + (1UL << 2) /* U+20D0-U+20FF */ + /* Bit 35 Letterlike Symbols */ +#define TT_UCR_LETTERLIKE_SYMBOLS (1UL << 3) /* U+2100-U+214F */ + /* Bit 36 Number Forms */ +#define TT_UCR_NUMBER_FORMS (1UL << 4) /* U+2150-U+218F */ + /* Bit 37 Arrows */ + /* Supplemental Arrows-A */ + /* Supplemental Arrows-B */ + /* Miscellaneous Symbols and Arrows */ +#define TT_UCR_ARROWS (1UL << 5) /* U+2190-U+21FF */ + /* U+27F0-U+27FF */ + /* U+2900-U+297F */ + /* U+2B00-U+2BFF */ + /* Bit 38 Mathematical Operators */ + /* Supplemental Mathematical Operators */ + /* Miscellaneous Mathematical Symbols-A */ + /* Miscellaneous Mathematical Symbols-B */ +#define TT_UCR_MATHEMATICAL_OPERATORS (1UL << 6) /* U+2200-U+22FF */ + /* U+2A00-U+2AFF */ + /* U+27C0-U+27EF */ + /* U+2980-U+29FF */ + /* Bit 39 Miscellaneous Technical */ +#define TT_UCR_MISCELLANEOUS_TECHNICAL (1UL << 7) /* U+2300-U+23FF */ + /* Bit 40 Control Pictures */ +#define TT_UCR_CONTROL_PICTURES (1UL << 8) /* U+2400-U+243F */ + /* Bit 41 Optical Character Recognition */ +#define TT_UCR_OCR (1UL << 9) /* U+2440-U+245F */ + /* Bit 42 Enclosed Alphanumerics */ +#define TT_UCR_ENCLOSED_ALPHANUMERICS (1UL << 10) /* U+2460-U+24FF */ + /* Bit 43 Box Drawing */ +#define TT_UCR_BOX_DRAWING (1UL << 11) /* U+2500-U+257F */ + /* Bit 44 Block Elements */ +#define TT_UCR_BLOCK_ELEMENTS (1UL << 12) /* U+2580-U+259F */ + /* Bit 45 Geometric Shapes */ +#define TT_UCR_GEOMETRIC_SHAPES (1UL << 13) /* U+25A0-U+25FF */ + /* Bit 46 Miscellaneous Symbols */ +#define TT_UCR_MISCELLANEOUS_SYMBOLS (1UL << 14) /* U+2600-U+26FF */ + /* Bit 47 Dingbats */ +#define TT_UCR_DINGBATS (1UL << 15) /* U+2700-U+27BF */ + /* Bit 48 CJK Symbols and Punctuation */ +#define TT_UCR_CJK_SYMBOLS (1UL << 16) /* U+3000-U+303F */ + /* Bit 49 Hiragana */ +#define TT_UCR_HIRAGANA (1UL << 17) /* U+3040-U+309F */ + /* Bit 50 Katakana */ + /* Katakana Phonetic Extensions */ +#define TT_UCR_KATAKANA (1UL << 18) /* U+30A0-U+30FF */ + /* U+31F0-U+31FF */ + /* Bit 51 Bopomofo */ + /* Bopomofo Extended */ +#define TT_UCR_BOPOMOFO (1UL << 19) /* U+3100-U+312F */ + /* U+31A0-U+31BF */ + /* Bit 52 Hangul Compatibility Jamo */ +#define TT_UCR_HANGUL_COMPATIBILITY_JAMO (1UL << 20) /* U+3130-U+318F */ + /* Bit 53 Phags-Pa */ +#define TT_UCR_PHAGSPA (1UL << 21) /* U+A840-U+A87F */ +#define TT_UCR_KANBUN TT_UCR_PHAGSPA /* deprecated */ +#define TT_UCR_CJK_MISC TT_UCR_PHAGSPA /* deprecated */ + /* Bit 54 Enclosed CJK Letters and Months */ +#define TT_UCR_ENCLOSED_CJK_LETTERS_MONTHS (1UL << 22) /* U+3200-U+32FF */ + /* Bit 55 CJK Compatibility */ +#define TT_UCR_CJK_COMPATIBILITY (1UL << 23) /* U+3300-U+33FF */ + /* Bit 56 Hangul Syllables */ +#define TT_UCR_HANGUL (1UL << 24) /* U+AC00-U+D7A3 */ + /* Bit 57 High Surrogates */ + /* High Private Use Surrogates */ + /* Low Surrogates */ + + /* According to OpenType specs v.1.3+, */ + /* setting bit 57 implies that there is */ + /* at least one codepoint beyond the */ + /* Basic Multilingual Plane that is */ + /* supported by this font. So it really */ + /* means >= U+10000. */ +#define TT_UCR_SURROGATES (1UL << 25) /* U+D800-U+DB7F */ + /* U+DB80-U+DBFF */ + /* U+DC00-U+DFFF */ +#define TT_UCR_NON_PLANE_0 TT_UCR_SURROGATES + /* Bit 58 Phoenician */ +#define TT_UCR_PHOENICIAN (1UL << 26) /*U+10900-U+1091F*/ + /* Bit 59 CJK Unified Ideographs */ + /* CJK Radicals Supplement */ + /* Kangxi Radicals */ + /* Ideographic Description Characters */ + /* CJK Unified Ideographs Extension A */ + /* CJK Unified Ideographs Extension B */ + /* Kanbun */ +#define TT_UCR_CJK_UNIFIED_IDEOGRAPHS (1UL << 27) /* U+4E00-U+9FFF */ + /* U+2E80-U+2EFF */ + /* U+2F00-U+2FDF */ + /* U+2FF0-U+2FFF */ + /* U+3400-U+4DB5 */ + /*U+20000-U+2A6DF*/ + /* U+3190-U+319F */ + /* Bit 60 Private Use */ +#define TT_UCR_PRIVATE_USE (1UL << 28) /* U+E000-U+F8FF */ + /* Bit 61 CJK Strokes */ + /* CJK Compatibility Ideographs */ + /* CJK Compatibility Ideographs Supplement */ +#define TT_UCR_CJK_COMPATIBILITY_IDEOGRAPHS (1UL << 29) /* U+31C0-U+31EF */ + /* U+F900-U+FAFF */ + /*U+2F800-U+2FA1F*/ + /* Bit 62 Alphabetic Presentation Forms */ +#define TT_UCR_ALPHABETIC_PRESENTATION_FORMS (1UL << 30) /* U+FB00-U+FB4F */ + /* Bit 63 Arabic Presentation Forms-A */ +#define TT_UCR_ARABIC_PRESENTATION_FORMS_A (1UL << 31) /* U+FB50-U+FDFF */ + + /* ulUnicodeRange3 */ + /* --------------- */ + + /* Bit 64 Combining Half Marks */ +#define TT_UCR_COMBINING_HALF_MARKS (1UL << 0) /* U+FE20-U+FE2F */ + /* Bit 65 Vertical forms */ + /* CJK Compatibility Forms */ +#define TT_UCR_CJK_COMPATIBILITY_FORMS (1UL << 1) /* U+FE10-U+FE1F */ + /* U+FE30-U+FE4F */ + /* Bit 66 Small Form Variants */ +#define TT_UCR_SMALL_FORM_VARIANTS (1UL << 2) /* U+FE50-U+FE6F */ + /* Bit 67 Arabic Presentation Forms-B */ +#define TT_UCR_ARABIC_PRESENTATION_FORMS_B (1UL << 3) /* U+FE70-U+FEFF */ + /* Bit 68 Halfwidth and Fullwidth Forms */ +#define TT_UCR_HALFWIDTH_FULLWIDTH_FORMS (1UL << 4) /* U+FF00-U+FFEF */ + /* Bit 69 Specials */ +#define TT_UCR_SPECIALS (1UL << 5) /* U+FFF0-U+FFFF */ + /* Bit 70 Tibetan */ +#define TT_UCR_TIBETAN (1UL << 6) /* U+0F00-U+0FFF */ + /* Bit 71 Syriac */ +#define TT_UCR_SYRIAC (1UL << 7) /* U+0700-U+074F */ + /* Bit 72 Thaana */ +#define TT_UCR_THAANA (1UL << 8) /* U+0780-U+07BF */ + /* Bit 73 Sinhala */ +#define TT_UCR_SINHALA (1UL << 9) /* U+0D80-U+0DFF */ + /* Bit 74 Myanmar */ +#define TT_UCR_MYANMAR (1UL << 10) /* U+1000-U+109F */ + /* Bit 75 Ethiopic */ + /* Ethiopic Supplement */ + /* Ethiopic Extended */ +#define TT_UCR_ETHIOPIC (1UL << 11) /* U+1200-U+137F */ + /* U+1380-U+139F */ + /* U+2D80-U+2DDF */ + /* Bit 76 Cherokee */ +#define TT_UCR_CHEROKEE (1UL << 12) /* U+13A0-U+13FF */ + /* Bit 77 Unified Canadian Aboriginal Syllabics */ +#define TT_UCR_CANADIAN_ABORIGINAL_SYLLABICS (1UL << 13) /* U+1400-U+167F */ + /* Bit 78 Ogham */ +#define TT_UCR_OGHAM (1UL << 14) /* U+1680-U+169F */ + /* Bit 79 Runic */ +#define TT_UCR_RUNIC (1UL << 15) /* U+16A0-U+16FF */ + /* Bit 80 Khmer */ + /* Khmer Symbols */ +#define TT_UCR_KHMER (1UL << 16) /* U+1780-U+17FF */ + /* U+19E0-U+19FF */ + /* Bit 81 Mongolian */ +#define TT_UCR_MONGOLIAN (1UL << 17) /* U+1800-U+18AF */ + /* Bit 82 Braille Patterns */ +#define TT_UCR_BRAILLE (1UL << 18) /* U+2800-U+28FF */ + /* Bit 83 Yi Syllables */ + /* Yi Radicals */ +#define TT_UCR_YI (1UL << 19) /* U+A000-U+A48F */ + /* U+A490-U+A4CF */ + /* Bit 84 Tagalog */ + /* Hanunoo */ + /* Buhid */ + /* Tagbanwa */ +#define TT_UCR_PHILIPPINE (1UL << 20) /* U+1700-U+171F */ + /* U+1720-U+173F */ + /* U+1740-U+175F */ + /* U+1760-U+177F */ + /* Bit 85 Old Italic */ +#define TT_UCR_OLD_ITALIC (1UL << 21) /*U+10300-U+1032F*/ + /* Bit 86 Gothic */ +#define TT_UCR_GOTHIC (1UL << 22) /*U+10330-U+1034F*/ + /* Bit 87 Deseret */ +#define TT_UCR_DESERET (1UL << 23) /*U+10400-U+1044F*/ + /* Bit 88 Byzantine Musical Symbols */ + /* Musical Symbols */ + /* Ancient Greek Musical Notation */ +#define TT_UCR_MUSICAL_SYMBOLS (1UL << 24) /*U+1D000-U+1D0FF*/ + /*U+1D100-U+1D1FF*/ + /*U+1D200-U+1D24F*/ + /* Bit 89 Mathematical Alphanumeric Symbols */ +#define TT_UCR_MATH_ALPHANUMERIC_SYMBOLS (1UL << 25) /*U+1D400-U+1D7FF*/ + /* Bit 90 Private Use (plane 15) */ + /* Private Use (plane 16) */ +#define TT_UCR_PRIVATE_USE_SUPPLEMENTARY (1UL << 26) /*U+F0000-U+FFFFD*/ + /*U+100000-U+10FFFD*/ + /* Bit 91 Variation Selectors */ + /* Variation Selectors Supplement */ +#define TT_UCR_VARIATION_SELECTORS (1UL << 27) /* U+FE00-U+FE0F */ + /*U+E0100-U+E01EF*/ + /* Bit 92 Tags */ +#define TT_UCR_TAGS (1UL << 28) /*U+E0000-U+E007F*/ + /* Bit 93 Limbu */ +#define TT_UCR_LIMBU (1UL << 29) /* U+1900-U+194F */ + /* Bit 94 Tai Le */ +#define TT_UCR_TAI_LE (1UL << 30) /* U+1950-U+197F */ + /* Bit 95 New Tai Lue */ +#define TT_UCR_NEW_TAI_LUE (1UL << 31) /* U+1980-U+19DF */ + + /* ulUnicodeRange4 */ + /* --------------- */ + + /* Bit 96 Buginese */ +#define TT_UCR_BUGINESE (1UL << 0) /* U+1A00-U+1A1F */ + /* Bit 97 Glagolitic */ +#define TT_UCR_GLAGOLITIC (1UL << 1) /* U+2C00-U+2C5F */ + /* Bit 98 Tifinagh */ +#define TT_UCR_TIFINAGH (1UL << 2) /* U+2D30-U+2D7F */ + /* Bit 99 Yijing Hexagram Symbols */ +#define TT_UCR_YIJING (1UL << 3) /* U+4DC0-U+4DFF */ + /* Bit 100 Syloti Nagri */ +#define TT_UCR_SYLOTI_NAGRI (1UL << 4) /* U+A800-U+A82F */ + /* Bit 101 Linear B Syllabary */ + /* Linear B Ideograms */ + /* Aegean Numbers */ +#define TT_UCR_LINEAR_B (1UL << 5) /*U+10000-U+1007F*/ + /*U+10080-U+100FF*/ + /*U+10100-U+1013F*/ + /* Bit 102 Ancient Greek Numbers */ +#define TT_UCR_ANCIENT_GREEK_NUMBERS (1UL << 6) /*U+10140-U+1018F*/ + /* Bit 103 Ugaritic */ +#define TT_UCR_UGARITIC (1UL << 7) /*U+10380-U+1039F*/ + /* Bit 104 Old Persian */ +#define TT_UCR_OLD_PERSIAN (1UL << 8) /*U+103A0-U+103DF*/ + /* Bit 105 Shavian */ +#define TT_UCR_SHAVIAN (1UL << 9) /*U+10450-U+1047F*/ + /* Bit 106 Osmanya */ +#define TT_UCR_OSMANYA (1UL << 10) /*U+10480-U+104AF*/ + /* Bit 107 Cypriot Syllabary */ +#define TT_UCR_CYPRIOT_SYLLABARY (1UL << 11) /*U+10800-U+1083F*/ + /* Bit 108 Kharoshthi */ +#define TT_UCR_KHAROSHTHI (1UL << 12) /*U+10A00-U+10A5F*/ + /* Bit 109 Tai Xuan Jing Symbols */ +#define TT_UCR_TAI_XUAN_JING (1UL << 13) /*U+1D300-U+1D35F*/ + /* Bit 110 Cuneiform */ + /* Cuneiform Numbers and Punctuation */ +#define TT_UCR_CUNEIFORM (1UL << 14) /*U+12000-U+123FF*/ + /*U+12400-U+1247F*/ + /* Bit 111 Counting Rod Numerals */ +#define TT_UCR_COUNTING_ROD_NUMERALS (1UL << 15) /*U+1D360-U+1D37F*/ + /* Bit 112 Sundanese */ +#define TT_UCR_SUNDANESE (1UL << 16) /* U+1B80-U+1BBF */ + /* Bit 113 Lepcha */ +#define TT_UCR_LEPCHA (1UL << 17) /* U+1C00-U+1C4F */ + /* Bit 114 Ol Chiki */ +#define TT_UCR_OL_CHIKI (1UL << 18) /* U+1C50-U+1C7F */ + /* Bit 115 Saurashtra */ +#define TT_UCR_SAURASHTRA (1UL << 19) /* U+A880-U+A8DF */ + /* Bit 116 Kayah Li */ +#define TT_UCR_KAYAH_LI (1UL << 20) /* U+A900-U+A92F */ + /* Bit 117 Rejang */ +#define TT_UCR_REJANG (1UL << 21) /* U+A930-U+A95F */ + /* Bit 118 Cham */ +#define TT_UCR_CHAM (1UL << 22) /* U+AA00-U+AA5F */ + /* Bit 119 Ancient Symbols */ +#define TT_UCR_ANCIENT_SYMBOLS (1UL << 23) /*U+10190-U+101CF*/ + /* Bit 120 Phaistos Disc */ +#define TT_UCR_PHAISTOS_DISC (1UL << 24) /*U+101D0-U+101FF*/ + /* Bit 121 Carian */ + /* Lycian */ + /* Lydian */ +#define TT_UCR_OLD_ANATOLIAN (1UL << 25) /*U+102A0-U+102DF*/ + /*U+10280-U+1029F*/ + /*U+10920-U+1093F*/ + /* Bit 122 Domino Tiles */ + /* Mahjong Tiles */ +#define TT_UCR_GAME_TILES (1UL << 26) /*U+1F030-U+1F09F*/ + /*U+1F000-U+1F02F*/ + /* Bit 123-127 Reserved for process-internal usage */ + + /* */ + + /* for backward compatibility with older FreeType versions */ +#define TT_UCR_ARABIC_PRESENTATION_A \ + TT_UCR_ARABIC_PRESENTATION_FORMS_A +#define TT_UCR_ARABIC_PRESENTATION_B \ + TT_UCR_ARABIC_PRESENTATION_FORMS_B + +#define TT_UCR_COMBINING_DIACRITICS \ + TT_UCR_COMBINING_DIACRITICAL_MARKS +#define TT_UCR_COMBINING_DIACRITICS_SYMB \ + TT_UCR_COMBINING_DIACRITICAL_MARKS_SYMB + + +FT_END_HEADER + +#endif /* TTNAMEID_H_ */ + + +/* END */ diff --git a/third_party/tlRender-install-Release/include/freetype2/freetype/tttables.h b/third_party/tlRender-install-Release/include/freetype2/freetype/tttables.h new file mode 100644 index 00000000..aa433643 --- /dev/null +++ b/third_party/tlRender-install-Release/include/freetype2/freetype/tttables.h @@ -0,0 +1,859 @@ +/**************************************************************************** + * + * tttables.h + * + * Basic SFNT/TrueType tables definitions and interface + * (specification only). + * + * Copyright (C) 1996-2025 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + +#ifndef TTTABLES_H_ +#define TTTABLES_H_ + + +#include + +#ifdef FREETYPE_H +#error "freetype.h of FreeType 1 has been loaded!" +#error "Please fix the directory search order for header files" +#error "so that freetype.h of FreeType 2 is found first." +#endif + + +FT_BEGIN_HEADER + + /************************************************************************** + * + * @section: + * truetype_tables + * + * @title: + * TrueType Tables + * + * @abstract: + * TrueType-specific table types and functions. + * + * @description: + * This section contains definitions of some basic tables specific to + * TrueType and OpenType as well as some routines used to access and + * process them. + * + * @order: + * TT_Header + * TT_HoriHeader + * TT_VertHeader + * TT_OS2 + * TT_Postscript + * TT_PCLT + * TT_MaxProfile + * + * FT_Sfnt_Tag + * FT_Get_Sfnt_Table + * FT_Load_Sfnt_Table + * FT_Sfnt_Table_Info + * + * FT_Get_CMap_Language_ID + * FT_Get_CMap_Format + * + * FT_PARAM_TAG_UNPATENTED_HINTING + * + */ + + + /************************************************************************** + * + * @struct: + * TT_Header + * + * @description: + * A structure to model a TrueType font header table. All fields follow + * the OpenType specification. The 64-bit timestamps are stored in + * two-element arrays `Created` and `Modified`, first the upper then + * the lower 32~bits. + */ + typedef struct TT_Header_ + { + FT_Fixed Table_Version; + FT_Fixed Font_Revision; + + FT_Long CheckSum_Adjust; + FT_Long Magic_Number; + + FT_UShort Flags; + FT_UShort Units_Per_EM; + + FT_ULong Created [2]; + FT_ULong Modified[2]; + + FT_Short xMin; + FT_Short yMin; + FT_Short xMax; + FT_Short yMax; + + FT_UShort Mac_Style; + FT_UShort Lowest_Rec_PPEM; + + FT_Short Font_Direction; + FT_Short Index_To_Loc_Format; + FT_Short Glyph_Data_Format; + + } TT_Header; + + + /************************************************************************** + * + * @struct: + * TT_HoriHeader + * + * @description: + * A structure to model a TrueType horizontal header, the 'hhea' table, + * as well as the corresponding horizontal metrics table, 'hmtx'. + * + * @fields: + * Version :: + * The table version. + * + * Ascender :: + * The font's ascender, i.e., the distance from the baseline to the + * top-most of all glyph points found in the font. + * + * This value is invalid in many fonts, as it is usually set by the + * font designer, and often reflects only a portion of the glyphs found + * in the font (maybe ASCII). + * + * You should use the `sTypoAscender` field of the 'OS/2' table instead + * if you want the correct one. + * + * Descender :: + * The font's descender, i.e., the distance from the baseline to the + * bottom-most of all glyph points found in the font. It is negative. + * + * This value is invalid in many fonts, as it is usually set by the + * font designer, and often reflects only a portion of the glyphs found + * in the font (maybe ASCII). + * + * You should use the `sTypoDescender` field of the 'OS/2' table + * instead if you want the correct one. + * + * Line_Gap :: + * The font's line gap, i.e., the distance to add to the ascender and + * descender to get the BTB, i.e., the baseline-to-baseline distance + * for the font. + * + * advance_Width_Max :: + * This field is the maximum of all advance widths found in the font. + * It can be used to compute the maximum width of an arbitrary string + * of text. + * + * min_Left_Side_Bearing :: + * The minimum left side bearing of all glyphs within the font. + * + * min_Right_Side_Bearing :: + * The minimum right side bearing of all glyphs within the font. + * + * xMax_Extent :: + * The maximum horizontal extent (i.e., the 'width' of a glyph's + * bounding box) for all glyphs in the font. + * + * caret_Slope_Rise :: + * The rise coefficient of the cursor's slope of the cursor + * (slope=rise/run). + * + * caret_Slope_Run :: + * The run coefficient of the cursor's slope. + * + * caret_Offset :: + * The cursor's offset for slanted fonts. + * + * Reserved :: + * 8~reserved bytes. + * + * metric_Data_Format :: + * Always~0. + * + * number_Of_HMetrics :: + * Number of HMetrics entries in the 'hmtx' table -- this value can be + * smaller than the total number of glyphs in the font. + * + * long_metrics :: + * A pointer into the 'hmtx' table. + * + * short_metrics :: + * A pointer into the 'hmtx' table. + * + * @note: + * For OpenType Font Variations, the values of the following fields can + * change after a call to @FT_Set_Var_Design_Coordinates (and friends) if + * the font contains an 'MVAR' table: `caret_Slope_Rise`, + * `caret_Slope_Run`, and `caret_Offset`. + */ + typedef struct TT_HoriHeader_ + { + FT_Fixed Version; + FT_Short Ascender; + FT_Short Descender; + FT_Short Line_Gap; + + FT_UShort advance_Width_Max; /* advance width maximum */ + + FT_Short min_Left_Side_Bearing; /* minimum left-sb */ + FT_Short min_Right_Side_Bearing; /* minimum right-sb */ + FT_Short xMax_Extent; /* xmax extents */ + FT_Short caret_Slope_Rise; + FT_Short caret_Slope_Run; + FT_Short caret_Offset; + + FT_Short Reserved[4]; + + FT_Short metric_Data_Format; + FT_UShort number_Of_HMetrics; + + /* The following fields are not defined by the OpenType specification */ + /* but they are used to connect the metrics header to the relevant */ + /* 'hmtx' table. */ + + void* long_metrics; + void* short_metrics; + + } TT_HoriHeader; + + + /************************************************************************** + * + * @struct: + * TT_VertHeader + * + * @description: + * A structure used to model a TrueType vertical header, the 'vhea' + * table, as well as the corresponding vertical metrics table, 'vmtx'. + * + * @fields: + * Version :: + * The table version. + * + * Ascender :: + * The font's ascender, i.e., the distance from the baseline to the + * top-most of all glyph points found in the font. + * + * This value is invalid in many fonts, as it is usually set by the + * font designer, and often reflects only a portion of the glyphs found + * in the font (maybe ASCII). + * + * You should use the `sTypoAscender` field of the 'OS/2' table instead + * if you want the correct one. + * + * Descender :: + * The font's descender, i.e., the distance from the baseline to the + * bottom-most of all glyph points found in the font. It is negative. + * + * This value is invalid in many fonts, as it is usually set by the + * font designer, and often reflects only a portion of the glyphs found + * in the font (maybe ASCII). + * + * You should use the `sTypoDescender` field of the 'OS/2' table + * instead if you want the correct one. + * + * Line_Gap :: + * The font's line gap, i.e., the distance to add to the ascender and + * descender to get the BTB, i.e., the baseline-to-baseline distance + * for the font. + * + * advance_Height_Max :: + * This field is the maximum of all advance heights found in the font. + * It can be used to compute the maximum height of an arbitrary string + * of text. + * + * min_Top_Side_Bearing :: + * The minimum top side bearing of all glyphs within the font. + * + * min_Bottom_Side_Bearing :: + * The minimum bottom side bearing of all glyphs within the font. + * + * yMax_Extent :: + * The maximum vertical extent (i.e., the 'height' of a glyph's + * bounding box) for all glyphs in the font. + * + * caret_Slope_Rise :: + * The rise coefficient of the cursor's slope of the cursor + * (slope=rise/run). + * + * caret_Slope_Run :: + * The run coefficient of the cursor's slope. + * + * caret_Offset :: + * The cursor's offset for slanted fonts. + * + * Reserved :: + * 8~reserved bytes. + * + * metric_Data_Format :: + * Always~0. + * + * number_Of_VMetrics :: + * Number of VMetrics entries in the 'vmtx' table -- this value can be + * smaller than the total number of glyphs in the font. + * + * long_metrics :: + * A pointer into the 'vmtx' table. + * + * short_metrics :: + * A pointer into the 'vmtx' table. + * + * @note: + * For OpenType Font Variations, the values of the following fields can + * change after a call to @FT_Set_Var_Design_Coordinates (and friends) if + * the font contains an 'MVAR' table: `Ascender`, `Descender`, + * `Line_Gap`, `caret_Slope_Rise`, `caret_Slope_Run`, and `caret_Offset`. + */ + typedef struct TT_VertHeader_ + { + FT_Fixed Version; + FT_Short Ascender; + FT_Short Descender; + FT_Short Line_Gap; + + FT_UShort advance_Height_Max; /* advance height maximum */ + + FT_Short min_Top_Side_Bearing; /* minimum top-sb */ + FT_Short min_Bottom_Side_Bearing; /* minimum bottom-sb */ + FT_Short yMax_Extent; /* ymax extents */ + FT_Short caret_Slope_Rise; + FT_Short caret_Slope_Run; + FT_Short caret_Offset; + + FT_Short Reserved[4]; + + FT_Short metric_Data_Format; + FT_UShort number_Of_VMetrics; + + /* The following fields are not defined by the OpenType specification */ + /* but they are used to connect the metrics header to the relevant */ + /* 'vmtx' table. */ + + void* long_metrics; + void* short_metrics; + + } TT_VertHeader; + + + /************************************************************************** + * + * @struct: + * TT_OS2 + * + * @description: + * A structure to model a TrueType 'OS/2' table. All fields comply to + * the OpenType specification. + * + * Note that we now support old Mac fonts that do not include an 'OS/2' + * table. In this case, the `version` field is always set to 0xFFFF. + * + * @note: + * For OpenType Font Variations, the values of the following fields can + * change after a call to @FT_Set_Var_Design_Coordinates (and friends) if + * the font contains an 'MVAR' table: `sCapHeight`, `sTypoAscender`, + * `sTypoDescender`, `sTypoLineGap`, `sxHeight`, `usWinAscent`, + * `usWinDescent`, `yStrikeoutPosition`, `yStrikeoutSize`, + * `ySubscriptXOffset`, `ySubScriptXSize`, `ySubscriptYOffset`, + * `ySubscriptYSize`, `ySuperscriptXOffset`, `ySuperscriptXSize`, + * `ySuperscriptYOffset`, and `ySuperscriptYSize`. + * + * Possible values for bits in the `ulUnicodeRangeX` fields are given by + * the @TT_UCR_XXX macros. + */ + + typedef struct TT_OS2_ + { + FT_UShort version; /* 0x0001 - more or 0xFFFF */ + FT_Short xAvgCharWidth; + FT_UShort usWeightClass; + FT_UShort usWidthClass; + FT_UShort fsType; + FT_Short ySubscriptXSize; + FT_Short ySubscriptYSize; + FT_Short ySubscriptXOffset; + FT_Short ySubscriptYOffset; + FT_Short ySuperscriptXSize; + FT_Short ySuperscriptYSize; + FT_Short ySuperscriptXOffset; + FT_Short ySuperscriptYOffset; + FT_Short yStrikeoutSize; + FT_Short yStrikeoutPosition; + FT_Short sFamilyClass; + + FT_Byte panose[10]; + + FT_ULong ulUnicodeRange1; /* Bits 0-31 */ + FT_ULong ulUnicodeRange2; /* Bits 32-63 */ + FT_ULong ulUnicodeRange3; /* Bits 64-95 */ + FT_ULong ulUnicodeRange4; /* Bits 96-127 */ + + FT_Char achVendID[4]; + + FT_UShort fsSelection; + FT_UShort usFirstCharIndex; + FT_UShort usLastCharIndex; + FT_Short sTypoAscender; + FT_Short sTypoDescender; + FT_Short sTypoLineGap; + FT_UShort usWinAscent; + FT_UShort usWinDescent; + + /* only version 1 and higher: */ + + FT_ULong ulCodePageRange1; /* Bits 0-31 */ + FT_ULong ulCodePageRange2; /* Bits 32-63 */ + + /* only version 2 and higher: */ + + FT_Short sxHeight; + FT_Short sCapHeight; + FT_UShort usDefaultChar; + FT_UShort usBreakChar; + FT_UShort usMaxContext; + + /* only version 5 and higher: */ + + FT_UShort usLowerOpticalPointSize; /* in twips (1/20 points) */ + FT_UShort usUpperOpticalPointSize; /* in twips (1/20 points) */ + + } TT_OS2; + + + /************************************************************************** + * + * @struct: + * TT_Postscript + * + * @description: + * A structure to model a TrueType 'post' table. All fields comply to + * the OpenType specification. This structure does not reference a + * font's PostScript glyph names; use @FT_Get_Glyph_Name to retrieve + * them. + * + * @note: + * For OpenType Font Variations, the values of the following fields can + * change after a call to @FT_Set_Var_Design_Coordinates (and friends) if + * the font contains an 'MVAR' table: `underlinePosition` and + * `underlineThickness`. + */ + typedef struct TT_Postscript_ + { + FT_Fixed FormatType; + FT_Fixed italicAngle; + FT_Short underlinePosition; + FT_Short underlineThickness; + FT_ULong isFixedPitch; + FT_ULong minMemType42; + FT_ULong maxMemType42; + FT_ULong minMemType1; + FT_ULong maxMemType1; + + /* Glyph names follow in the 'post' table, but we don't */ + /* load them by default. */ + + } TT_Postscript; + + + /************************************************************************** + * + * @struct: + * TT_PCLT + * + * @description: + * A structure to model a TrueType 'PCLT' table. All fields comply to + * the OpenType specification. + */ + typedef struct TT_PCLT_ + { + FT_Fixed Version; + FT_ULong FontNumber; + FT_UShort Pitch; + FT_UShort xHeight; + FT_UShort Style; + FT_UShort TypeFamily; + FT_UShort CapHeight; + FT_UShort SymbolSet; + FT_Char TypeFace[16]; + FT_Char CharacterComplement[8]; + FT_Char FileName[6]; + FT_Char StrokeWeight; + FT_Char WidthType; + FT_Byte SerifStyle; + FT_Byte Reserved; + + } TT_PCLT; + + + /************************************************************************** + * + * @struct: + * TT_MaxProfile + * + * @description: + * The maximum profile ('maxp') table contains many max values, which can + * be used to pre-allocate arrays for speeding up glyph loading and + * hinting. + * + * @fields: + * version :: + * The version number. + * + * numGlyphs :: + * The number of glyphs in this TrueType font. + * + * maxPoints :: + * The maximum number of points in a non-composite TrueType glyph. See + * also `maxCompositePoints`. + * + * maxContours :: + * The maximum number of contours in a non-composite TrueType glyph. + * See also `maxCompositeContours`. + * + * maxCompositePoints :: + * The maximum number of points in a composite TrueType glyph. See + * also `maxPoints`. + * + * maxCompositeContours :: + * The maximum number of contours in a composite TrueType glyph. See + * also `maxContours`. + * + * maxZones :: + * The maximum number of zones used for glyph hinting. + * + * maxTwilightPoints :: + * The maximum number of points in the twilight zone used for glyph + * hinting. + * + * maxStorage :: + * The maximum number of elements in the storage area used for glyph + * hinting. + * + * maxFunctionDefs :: + * The maximum number of function definitions in the TrueType bytecode + * for this font. + * + * maxInstructionDefs :: + * The maximum number of instruction definitions in the TrueType + * bytecode for this font. + * + * maxStackElements :: + * The maximum number of stack elements used during bytecode + * interpretation. + * + * maxSizeOfInstructions :: + * The maximum number of TrueType opcodes used for glyph hinting. + * + * maxComponentElements :: + * The maximum number of simple (i.e., non-composite) glyphs in a + * composite glyph. + * + * maxComponentDepth :: + * The maximum nesting depth of composite glyphs. + * + * @note: + * This structure is only used during font loading. + */ + typedef struct TT_MaxProfile_ + { + FT_Fixed version; + FT_UShort numGlyphs; + FT_UShort maxPoints; + FT_UShort maxContours; + FT_UShort maxCompositePoints; + FT_UShort maxCompositeContours; + FT_UShort maxZones; + FT_UShort maxTwilightPoints; + FT_UShort maxStorage; + FT_UShort maxFunctionDefs; + FT_UShort maxInstructionDefs; + FT_UShort maxStackElements; + FT_UShort maxSizeOfInstructions; + FT_UShort maxComponentElements; + FT_UShort maxComponentDepth; + + } TT_MaxProfile; + + + /************************************************************************** + * + * @enum: + * FT_Sfnt_Tag + * + * @description: + * An enumeration to specify indices of SFNT tables loaded and parsed by + * FreeType during initialization of an SFNT font. Used in the + * @FT_Get_Sfnt_Table API function. + * + * @values: + * FT_SFNT_HEAD :: + * To access the font's @TT_Header structure. + * + * FT_SFNT_MAXP :: + * To access the font's @TT_MaxProfile structure. + * + * FT_SFNT_OS2 :: + * To access the font's @TT_OS2 structure. + * + * FT_SFNT_HHEA :: + * To access the font's @TT_HoriHeader structure. + * + * FT_SFNT_VHEA :: + * To access the font's @TT_VertHeader structure. + * + * FT_SFNT_POST :: + * To access the font's @TT_Postscript structure. + * + * FT_SFNT_PCLT :: + * To access the font's @TT_PCLT structure. + */ + typedef enum FT_Sfnt_Tag_ + { + FT_SFNT_HEAD, + FT_SFNT_MAXP, + FT_SFNT_OS2, + FT_SFNT_HHEA, + FT_SFNT_VHEA, + FT_SFNT_POST, + FT_SFNT_PCLT, + + FT_SFNT_MAX + + } FT_Sfnt_Tag; + + /* these constants are deprecated; use the corresponding `FT_Sfnt_Tag` */ + /* values instead */ +#define ft_sfnt_head FT_SFNT_HEAD +#define ft_sfnt_maxp FT_SFNT_MAXP +#define ft_sfnt_os2 FT_SFNT_OS2 +#define ft_sfnt_hhea FT_SFNT_HHEA +#define ft_sfnt_vhea FT_SFNT_VHEA +#define ft_sfnt_post FT_SFNT_POST +#define ft_sfnt_pclt FT_SFNT_PCLT + + + /************************************************************************** + * + * @function: + * FT_Get_Sfnt_Table + * + * @description: + * Return a pointer to a given SFNT table stored within a face. + * + * @input: + * face :: + * A handle to the source. + * + * tag :: + * The index of the SFNT table. + * + * @return: + * A type-less pointer to the table. This will be `NULL` in case of + * error, or if the corresponding table was not found **OR** loaded from + * the file. + * + * Use a typecast according to `tag` to access the structure elements. + * + * @note: + * The table is owned by the face object and disappears with it. + * + * This function is only useful to access SFNT tables that are loaded by + * the sfnt, truetype, and opentype drivers. See @FT_Sfnt_Tag for a + * list. + * + * @example: + * Here is an example demonstrating access to the 'vhea' table. + * + * ``` + * TT_VertHeader* vert_header; + * + * + * vert_header = + * (TT_VertHeader*)FT_Get_Sfnt_Table( face, FT_SFNT_VHEA ); + * ``` + */ + FT_EXPORT( void* ) + FT_Get_Sfnt_Table( FT_Face face, + FT_Sfnt_Tag tag ); + + + /************************************************************************** + * + * @function: + * FT_Load_Sfnt_Table + * + * @description: + * Load any SFNT font table into client memory. + * + * @input: + * face :: + * A handle to the source face. + * + * tag :: + * The four-byte tag of the table to load. Use value~0 if you want to + * access the whole font file. Otherwise, you can use one of the + * definitions found in the @FT_TRUETYPE_TAGS_H file, or forge a new + * one with @FT_MAKE_TAG. + * + * [Since 2.14] Use value~1 if you want to access the table directory + * of the (currently selected) font. + * + * offset :: + * The starting offset in the table (or file if tag~==~0). + * + * @output: + * buffer :: + * The target buffer address. The client must ensure that the memory + * array is big enough to hold the data. + * + * @inout: + * length :: + * If the `length` parameter is `NULL`, try to load the whole table. + * Return an error code if it fails. + * + * Else, if `*length` is~0, exit immediately while returning the + * table's (or file) full size in it. + * + * Else the number of bytes to read from the table or file, from the + * starting offset. + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * If you need to determine the table's length you should first call this + * function with `*length` set to~0, as in the following example: + * + * ``` + * FT_ULong length = 0; + * + * + * error = FT_Load_Sfnt_Table( face, tag, 0, NULL, &length ); + * if ( error ) { ... table does not exist ... } + * + * buffer = malloc( length ); + * if ( buffer == NULL ) { ... not enough memory ... } + * + * error = FT_Load_Sfnt_Table( face, tag, 0, buffer, &length ); + * if ( error ) { ... could not load table ... } + * ``` + * + * Note that structures like @TT_Header or @TT_OS2 can't be used with + * this function; they are limited to @FT_Get_Sfnt_Table. Reason is that + * those structures depend on the processor architecture, with varying + * size (e.g. 32bit vs. 64bit) or order (big endian vs. little endian). + * + */ + FT_EXPORT( FT_Error ) + FT_Load_Sfnt_Table( FT_Face face, + FT_ULong tag, + FT_Long offset, + FT_Byte* buffer, + FT_ULong* length ); + + + /************************************************************************** + * + * @function: + * FT_Sfnt_Table_Info + * + * @description: + * Return information on an SFNT table. + * + * @input: + * face :: + * A handle to the source face. + * + * table_index :: + * The index of an SFNT table. The function returns + * FT_Err_Table_Missing for an invalid value. + * + * @inout: + * tag :: + * The name tag of the SFNT table. If the value is `NULL`, + * `table_index` is ignored, and `length` returns the number of SFNT + * tables in the font. + * + * @output: + * length :: + * The length of the SFNT table (or the number of SFNT tables, + * depending on `tag`). + * + * @return: + * FreeType error code. 0~means success. + * + * @note: + * While parsing fonts, FreeType handles SFNT tables with length zero as + * missing. + * + */ + FT_EXPORT( FT_Error ) + FT_Sfnt_Table_Info( FT_Face face, + FT_UInt table_index, + FT_ULong *tag, + FT_ULong *length ); + + + /************************************************************************** + * + * @function: + * FT_Get_CMap_Language_ID + * + * @description: + * Return cmap language ID as specified in the OpenType standard. + * Definitions of language ID values are in file @FT_TRUETYPE_IDS_H. + * + * @input: + * charmap :: + * The target charmap. + * + * @return: + * The language ID of `charmap`. If `charmap` doesn't belong to an SFNT + * face, just return~0 as the default value. + * + * For a format~14 cmap (to access Unicode IVS), the return value is + * 0xFFFFFFFF. + */ + FT_EXPORT( FT_ULong ) + FT_Get_CMap_Language_ID( FT_CharMap charmap ); + + + /************************************************************************** + * + * @function: + * FT_Get_CMap_Format + * + * @description: + * Return the format of an SFNT 'cmap' table. + * + * @input: + * charmap :: + * The target charmap. + * + * @return: + * The format of `charmap`. If `charmap` doesn't belong to an SFNT face + * (including the synthetic Unicode charmap sometimes created by + * FreeType), return -1. + */ + FT_EXPORT( FT_Long ) + FT_Get_CMap_Format( FT_CharMap charmap ); + + /* */ + + +FT_END_HEADER + +#endif /* TTTABLES_H_ */ + + +/* END */ diff --git a/third_party/tlRender-install-Release/include/freetype2/freetype/tttags.h b/third_party/tlRender-install-Release/include/freetype2/freetype/tttags.h new file mode 100644 index 00000000..56bb0a3e --- /dev/null +++ b/third_party/tlRender-install-Release/include/freetype2/freetype/tttags.h @@ -0,0 +1,124 @@ +/**************************************************************************** + * + * tttags.h + * + * Tags for TrueType and OpenType tables (specification only). + * + * Copyright (C) 1996-2025 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + +#ifndef TTAGS_H_ +#define TTAGS_H_ + + +#include + +#ifdef FREETYPE_H +#error "freetype.h of FreeType 1 has been loaded!" +#error "Please fix the directory search order for header files" +#error "so that freetype.h of FreeType 2 is found first." +#endif + + +FT_BEGIN_HEADER + + +#define TTAG_avar FT_MAKE_TAG( 'a', 'v', 'a', 'r' ) +#define TTAG_BASE FT_MAKE_TAG( 'B', 'A', 'S', 'E' ) +#define TTAG_bdat FT_MAKE_TAG( 'b', 'd', 'a', 't' ) +#define TTAG_BDF FT_MAKE_TAG( 'B', 'D', 'F', ' ' ) +#define TTAG_bhed FT_MAKE_TAG( 'b', 'h', 'e', 'd' ) +#define TTAG_bloc FT_MAKE_TAG( 'b', 'l', 'o', 'c' ) +#define TTAG_bsln FT_MAKE_TAG( 'b', 's', 'l', 'n' ) +#define TTAG_CBDT FT_MAKE_TAG( 'C', 'B', 'D', 'T' ) +#define TTAG_CBLC FT_MAKE_TAG( 'C', 'B', 'L', 'C' ) +#define TTAG_CFF FT_MAKE_TAG( 'C', 'F', 'F', ' ' ) +#define TTAG_CFF2 FT_MAKE_TAG( 'C', 'F', 'F', '2' ) +#define TTAG_CID FT_MAKE_TAG( 'C', 'I', 'D', ' ' ) +#define TTAG_cmap FT_MAKE_TAG( 'c', 'm', 'a', 'p' ) +#define TTAG_COLR FT_MAKE_TAG( 'C', 'O', 'L', 'R' ) +#define TTAG_CPAL FT_MAKE_TAG( 'C', 'P', 'A', 'L' ) +#define TTAG_cvar FT_MAKE_TAG( 'c', 'v', 'a', 'r' ) +#define TTAG_cvt FT_MAKE_TAG( 'c', 'v', 't', ' ' ) +#define TTAG_DSIG FT_MAKE_TAG( 'D', 'S', 'I', 'G' ) +#define TTAG_EBDT FT_MAKE_TAG( 'E', 'B', 'D', 'T' ) +#define TTAG_EBLC FT_MAKE_TAG( 'E', 'B', 'L', 'C' ) +#define TTAG_EBSC FT_MAKE_TAG( 'E', 'B', 'S', 'C' ) +#define TTAG_feat FT_MAKE_TAG( 'f', 'e', 'a', 't' ) +#define TTAG_FOND FT_MAKE_TAG( 'F', 'O', 'N', 'D' ) +#define TTAG_fpgm FT_MAKE_TAG( 'f', 'p', 'g', 'm' ) +#define TTAG_fvar FT_MAKE_TAG( 'f', 'v', 'a', 'r' ) +#define TTAG_gasp FT_MAKE_TAG( 'g', 'a', 's', 'p' ) +#define TTAG_GDEF FT_MAKE_TAG( 'G', 'D', 'E', 'F' ) +#define TTAG_glyf FT_MAKE_TAG( 'g', 'l', 'y', 'f' ) +#define TTAG_GPOS FT_MAKE_TAG( 'G', 'P', 'O', 'S' ) +#define TTAG_GSUB FT_MAKE_TAG( 'G', 'S', 'U', 'B' ) +#define TTAG_gvar FT_MAKE_TAG( 'g', 'v', 'a', 'r' ) +#define TTAG_HVAR FT_MAKE_TAG( 'H', 'V', 'A', 'R' ) +#define TTAG_hdmx FT_MAKE_TAG( 'h', 'd', 'm', 'x' ) +#define TTAG_head FT_MAKE_TAG( 'h', 'e', 'a', 'd' ) +#define TTAG_hhea FT_MAKE_TAG( 'h', 'h', 'e', 'a' ) +#define TTAG_hmtx FT_MAKE_TAG( 'h', 'm', 't', 'x' ) +#define TTAG_JSTF FT_MAKE_TAG( 'J', 'S', 'T', 'F' ) +#define TTAG_just FT_MAKE_TAG( 'j', 'u', 's', 't' ) +#define TTAG_kern FT_MAKE_TAG( 'k', 'e', 'r', 'n' ) +#define TTAG_lcar FT_MAKE_TAG( 'l', 'c', 'a', 'r' ) +#define TTAG_loca FT_MAKE_TAG( 'l', 'o', 'c', 'a' ) +#define TTAG_LTSH FT_MAKE_TAG( 'L', 'T', 'S', 'H' ) +#define TTAG_LWFN FT_MAKE_TAG( 'L', 'W', 'F', 'N' ) +#define TTAG_MATH FT_MAKE_TAG( 'M', 'A', 'T', 'H' ) +#define TTAG_maxp FT_MAKE_TAG( 'm', 'a', 'x', 'p' ) +#define TTAG_META FT_MAKE_TAG( 'M', 'E', 'T', 'A' ) +#define TTAG_MMFX FT_MAKE_TAG( 'M', 'M', 'F', 'X' ) +#define TTAG_MMSD FT_MAKE_TAG( 'M', 'M', 'S', 'D' ) +#define TTAG_mort FT_MAKE_TAG( 'm', 'o', 'r', 't' ) +#define TTAG_morx FT_MAKE_TAG( 'm', 'o', 'r', 'x' ) +#define TTAG_MVAR FT_MAKE_TAG( 'M', 'V', 'A', 'R' ) +#define TTAG_name FT_MAKE_TAG( 'n', 'a', 'm', 'e' ) +#define TTAG_opbd FT_MAKE_TAG( 'o', 'p', 'b', 'd' ) +#define TTAG_OS2 FT_MAKE_TAG( 'O', 'S', '/', '2' ) +#define TTAG_OTTO FT_MAKE_TAG( 'O', 'T', 'T', 'O' ) +#define TTAG_PCLT FT_MAKE_TAG( 'P', 'C', 'L', 'T' ) +#define TTAG_POST FT_MAKE_TAG( 'P', 'O', 'S', 'T' ) +#define TTAG_post FT_MAKE_TAG( 'p', 'o', 's', 't' ) +#define TTAG_prep FT_MAKE_TAG( 'p', 'r', 'e', 'p' ) +#define TTAG_prop FT_MAKE_TAG( 'p', 'r', 'o', 'p' ) +#define TTAG_sbix FT_MAKE_TAG( 's', 'b', 'i', 'x' ) +#define TTAG_sfnt FT_MAKE_TAG( 's', 'f', 'n', 't' ) +#define TTAG_SING FT_MAKE_TAG( 'S', 'I', 'N', 'G' ) +#define TTAG_SVG FT_MAKE_TAG( 'S', 'V', 'G', ' ' ) +#define TTAG_trak FT_MAKE_TAG( 't', 'r', 'a', 'k' ) +#define TTAG_true FT_MAKE_TAG( 't', 'r', 'u', 'e' ) +#define TTAG_ttc FT_MAKE_TAG( 't', 't', 'c', ' ' ) +#define TTAG_ttcf FT_MAKE_TAG( 't', 't', 'c', 'f' ) +#define TTAG_TYP1 FT_MAKE_TAG( 'T', 'Y', 'P', '1' ) +#define TTAG_typ1 FT_MAKE_TAG( 't', 'y', 'p', '1' ) +#define TTAG_VDMX FT_MAKE_TAG( 'V', 'D', 'M', 'X' ) +#define TTAG_vhea FT_MAKE_TAG( 'v', 'h', 'e', 'a' ) +#define TTAG_vmtx FT_MAKE_TAG( 'v', 'm', 't', 'x' ) +#define TTAG_VVAR FT_MAKE_TAG( 'V', 'V', 'A', 'R' ) +#define TTAG_wOFF FT_MAKE_TAG( 'w', 'O', 'F', 'F' ) +#define TTAG_wOF2 FT_MAKE_TAG( 'w', 'O', 'F', '2' ) + +/* used by "Keyboard.dfont" on legacy Mac OS X */ +#define TTAG_0xA5kbd FT_MAKE_TAG( 0xA5, 'k', 'b', 'd' ) + +/* used by "LastResort.dfont" on legacy Mac OS X */ +#define TTAG_0xA5lst FT_MAKE_TAG( 0xA5, 'l', 's', 't' ) + + +FT_END_HEADER + +#endif /* TTAGS_H_ */ + + +/* END */ diff --git a/third_party/tlRender-install-Release/include/freetype2/ft2build.h b/third_party/tlRender-install-Release/include/freetype2/ft2build.h new file mode 100644 index 00000000..3008aea7 --- /dev/null +++ b/third_party/tlRender-install-Release/include/freetype2/ft2build.h @@ -0,0 +1,42 @@ +/**************************************************************************** + * + * ft2build.h + * + * FreeType 2 build and setup macros. + * + * Copyright (C) 1996-2025 by + * David Turner, Robert Wilhelm, and Werner Lemberg. + * + * This file is part of the FreeType project, and may only be used, + * modified, and distributed under the terms of the FreeType project + * license, LICENSE.TXT. By continuing to use, modify, or distribute + * this file you indicate that you have read the license and + * understand and accept it fully. + * + */ + + + /************************************************************************** + * + * This is the 'entry point' for FreeType header file inclusions, to be + * loaded before all other header files. + * + * A typical example is + * + * ``` + * #include + * #include + * ``` + * + */ + + +#ifndef FT2BUILD_H_ +#define FT2BUILD_H_ + +#include + +#endif /* FT2BUILD_H_ */ + + +/* END */ diff --git a/third_party/tlRender-install-Release/include/ftk/Core/Assert.h b/third_party/tlRender-install-Release/include/ftk/Core/Assert.h new file mode 100644 index 00000000..b7724a2b --- /dev/null +++ b/third_party/tlRender-install-Release/include/ftk/Core/Assert.h @@ -0,0 +1,29 @@ +// SPDX-License-Identifier: BSD-3-Clause +// Copyright Contributors to the feather-tk project. + +#pragma once + +#include + +//! Project namespace +namespace ftk +{ + //! \name Assert + ///@{ + + //! Assert (for convenience use the FTK_ASSERT macro). + FTK_API void ftk_assert(const char* file, int line); + + ///@} +} + +//! Assert macro. +#if defined(FTK_ASSERT) +#undef FTK_ASSERT +#define FTK_ASSERT(value) \ + if (!(value)) \ + ftk::ftk_assert(__FILE__, __LINE__) +#else // FTK_ASSERT +#define FTK_ASSERT(value) +#endif // FTK_ASSERT + diff --git a/third_party/tlRender-install-Release/include/ftk/Core/Box.h b/third_party/tlRender-install-Release/include/ftk/Core/Box.h new file mode 100644 index 00000000..0dfd9100 --- /dev/null +++ b/third_party/tlRender-install-Release/include/ftk/Core/Box.h @@ -0,0 +1,187 @@ +// SPDX-License-Identifier: BSD-3-Clause +// Copyright Contributors to the feather-tk project. + +#pragma once + +#include +#include + +namespace ftk +{ + //! \name Boxes + ///@{ + + //! Base class for boxes. + template + class Box + { + public: + Box() = default; + constexpr Box(const Vector& min, const Vector& max); + constexpr Box(const Vector& min, const Size& max); + + Vector min; + Vector max; + + constexpr Size size() const; + + bool isValid() const; + }; + + //! Two-dimensional box. + template + class Box<2, T> + { + public: + Box() = default; + constexpr Box(const Vector<2, T>& min, const Vector<2, T>& max); + constexpr Box(const Vector<2, T>& min, const Size<2, T>& max); + constexpr Box(T x, T y, T width, T height); + + Vector<2, T> min; + Vector<2, T> max; + + constexpr T x() const; + constexpr T y() const; + + constexpr Size<2, T> size() const; + constexpr T w() const; + constexpr T h() const; + + bool isValid() const; + }; + + //! Three-dimensional box. + template + class Box<3, T> + { + public: + Box() = default; + constexpr Box(const Vector<3, T>& min, const Vector<3, T>& max); + constexpr Box(const Vector<3, T>& min, const Size<3, T>& max); + constexpr Box(T x, T y, T z, T width, T height, T depth); + + Vector<3, T> min; + Vector<3, T> max; + + constexpr T x() const; + constexpr T y() const; + constexpr T z() const; + + constexpr Size<3, T> size() const; + constexpr T w() const; + constexpr T h() const; + constexpr T d() const; + + bool isValid() const; + }; + + typedef Box<2, int> Box2I; + typedef Box<2, float> Box2F; + typedef Box<3, float> Box3F; + + //! Get the center of a box. + template + constexpr Vector center(const Box&); + + //! Get the area of a box. + template + constexpr float area(const Box<2, T>&); + + //! Get the volume of a box. + template + constexpr float volume(const Box<3, T>&); + + //! Move a box. + template + constexpr Box move(const Box&, const Vector&); + + //! Does a box contain another box? + template + constexpr bool contains(const Box<2, T>&, const Box<2, T>&); + + //! Does a box contain a vector? + template + constexpr bool contains(const Box<2, T>&, const Vector<2, T>&); + + //! Does a box intersect another box? + template + constexpr bool intersects(const Box<2, T>&, const Box<2, T>&); + + //! Get the intersection of the boxes. + template + constexpr Box<2, T> intersect(const Box<2, T>&, const Box<2, T>&); + + //! Expand a box with another box. + template + constexpr Box<2, T> expand(const Box<2, T>&, const Box<2, T>&); + + //! Expand a box with a vector. + template + constexpr Box<2, T> expand(const Box<2, T>&, const Vector<2, T>&); + + //! Add a margin to a box. + template + constexpr Box<2, T> margin(const Box<2, T>&, const Vector<2, T>&); + + //! Add a margin to a box. + template + constexpr Box<2, T> margin(const Box<2, T>&, T); + + //! Add a margin to a box. + template + constexpr Box<2, T> margin(const Box<2, T>&, T x, T y); + + //! Add a margin to a box. + template + constexpr Box<2, T> margin(const Box<2, T>&, T x0, T y0, T x1, T y1); + + //! Get the bounding box. + template + constexpr Box bbox(const std::vector >&); + + //! Get the bounding box. + template + constexpr Box bbox(const std::vector >&); + + //! Get the points of a box. + template + constexpr std::vector > points(const Box&); + + //! Convert box types. + constexpr Box<2, float> convert(const Box<2, int>&); + + FTK_API std::string to_string(const Box2I&); + FTK_API std::string to_string(const Box2F&); + FTK_API std::string to_string(const Box3F&); + + FTK_API bool from_string(const std::string&, Box2I&); + FTK_API bool from_string(const std::string&, Box2F&); + FTK_API bool from_string(const std::string&, Box3F&); + + FTK_API void to_json(nlohmann::json&, const Box2I&); + FTK_API void to_json(nlohmann::json&, const Box2F&); + FTK_API void to_json(nlohmann::json&, const Box3F&); + + FTK_API void from_json(const nlohmann::json&, Box2I&); + FTK_API void from_json(const nlohmann::json&, Box2F&); + FTK_API void from_json(const nlohmann::json&, Box3F&); + + template + constexpr Box operator + (const Box&, const Vector&); + template + constexpr Box operator - (const Box&, const Vector&); + + template + constexpr bool operator == (const Box&, const Box&); + template + constexpr bool operator != (const Box&, const Box&); + + template + std::ostream& operator << (std::ostream&, const Box&); + + ///@} +} + +#include + diff --git a/third_party/tlRender-install-Release/include/ftk/Core/BoxInline.h b/third_party/tlRender-install-Release/include/ftk/Core/BoxInline.h new file mode 100644 index 00000000..5f24c192 --- /dev/null +++ b/third_party/tlRender-install-Release/include/ftk/Core/BoxInline.h @@ -0,0 +1,469 @@ +// SPDX-License-Identifier: BSD-3-Clause +// Copyright Contributors to the feather-tk project. + +namespace ftk +{ + template + constexpr Box::Box(const Vector& min, const Vector& max) : + min(min), + max(max) + {} + + template + constexpr Box::Box(const Vector& min, const Size& size) : + min(min), + max(min + Vector(size)) + {} + + template + constexpr Size Box::size() const + { + Size out; + for (int c = 0; c < C; ++c) + { + out[c] = max[c] - min[c]; + } + return out; + } + + template + inline bool Box::isValid() const + { + return size().isValid(); + } + + template + constexpr Box<2, T>::Box(const Vector<2, T>& min, const Vector<2, T>& max) : + min(min), + max(max) + {} + + template + constexpr Box<2, T>::Box(const Vector<2, T>& min, const Size<2, T>& size) : + min(min), + max(min + Vector<2, T>(size)) + {} + + template<> + constexpr Box<2, int>::Box(const Vector<2, int>& min, const Size<2, int>& size) : + min(min), + max(min + Vector<2, int>(size) - 1) + {} + + template + constexpr Box<2, T>::Box(T x, T y, T width, T height) : + min(x, y), + max(x + width, y + height) + {} + + template<> + constexpr Box<2, int>::Box(int x, int y, int width, int height) : + min(x, y), + max(x + width - 1, y + height - 1) + {} + + template + constexpr T Box<2, T>::x() const + { + return min.x; + } + + template + constexpr T Box<2, T>::y() const + { + return min.y; + } + + template + constexpr Size<2, T> Box<2, T>::size() const + { + return Size<2, T>( + max.x - min.x, + max.y - min.y); + } + + template<> + constexpr Size<2, int> Box<2, int>::size() const + { + return Size<2, int>( + max.x - min.x + 1, + max.y - min.y + 1); + } + + template + constexpr T Box<2, T>::w() const + { + return size().w; + } + + template + constexpr T Box<2, T>::h() const + { + return size().h; + } + + template + inline bool Box<2, T>::isValid() const + { + return size().isValid(); + } + + template + constexpr Box<3, T>::Box(const Vector<3, T>& min, const Vector<3, T>& max) : + min(min), + max(max) + {} + + template + constexpr Box<3, T>::Box(const Vector<3, T>& min, const Size<3, T>& size) : + min(min), + max(min + Vector<3, T>(size)) + {} + + template + constexpr Box<3, T>::Box(T x, T y, T z, T width, T height, T depth) : + min(x, y, z), + max(x + width, y + height, z + depth) + {} + + template + constexpr T Box<3, T>::x() const + { + return min.x; + } + + template + constexpr T Box<3, T>::y() const + { + return min.y; + } + + template + constexpr T Box<3, T>::z() const + { + return min.z; + } + + template + constexpr Size<3, T> Box<3, T>::size() const + { + return Size<3, T>( + max.x - min.x, + max.y - min.y, + max.z - min.z); + } + + template + constexpr T Box<3, T>::w() const + { + return size().w; + } + + template + constexpr T Box<3, T>::h() const + { + return size().h; + } + + template + constexpr T Box<3, T>::d() const + { + return size().d; + } + + template + inline bool Box<3, T>::isValid() const + { + return size().isValid(); + } + + template + constexpr Vector center(const Box& a) + { + Vector out; + for (int c = 0; c < C; ++c) + { + out[c] = (a.min[c] + a.max[c]) / 2; + } + return out; + } + + template + constexpr float area(const Box<2, T>& a) + { + return area(a.size()); + } + + template + constexpr float volume(const Box<3, T>& a) + { + return volume(a.size()); + } + + template + constexpr Box move(const Box& a, const Vector& b) + { + return Box(a.min + b, a.size()); + } + + template<> + constexpr bool contains(const Box<2, int>& a, const Box<2, int>& b) + { + return + b.min.x >= a.min.x && b.max.x <= a.max.x && + b.min.y >= a.min.y && b.max.y <= a.max.y; + } + + template<> + constexpr bool contains(const Box<2, float>& a, const Box<2, float>& b) + { + return + b.min.x >= a.min.x && b.max.x <= a.max.x && + b.min.y >= a.min.y && b.max.y <= a.max.y; + } + + template<> + constexpr bool contains(const Box<2, int>& a, const Vector<2, int>& b) + { + return + b.x >= a.min.x && b.x < a.max.x && + b.y >= a.min.y && b.y < a.max.y; + } + + template<> + constexpr bool contains(const Box<2, float>& a, const Vector<2, float>& b) + { + return + b.x >= a.min.x && b.x <= a.max.x && + b.y >= a.min.y && b.y <= a.max.y; + } + + template<> + constexpr bool intersects(const Box<2, int>& a, const Box<2, int>& b) + { + return !( + b.max.x < a.min.x || + b.min.x > a.max.x || + b.max.y < a.min.y || + b.min.y > a.max.y); + } + + template<> + constexpr bool intersects(const Box<2, float>& a, const Box<2, float>& b) + { + return !( + b.max.x < a.min.x || + b.min.x > a.max.x || + b.max.y < a.min.y || + b.min.y > a.max.y); + } + + template + constexpr Box<2, T> intersect(const Box<2, T>& a, const Box<2, T>& b) + { + return Box<2, T>( + Vector<2, T>( + std::max(a.min.x, b.min.x), + std::max(a.min.y, b.min.y)), + Vector<2, T>( + std::min(a.max.x, b.max.x), + std::min(a.max.y, b.max.y))); + } + + template + constexpr Box<2, T> expand(const Box<2, T>& a, const Box<2, T>& b) + { + return Box<2, T>( + Vector<2, T>( + std::min(a.min.x, b.min.x), + std::min(a.min.y, b.min.y)), + Vector<2, T>( + std::max(a.max.x, b.max.x), + std::max(a.max.y, b.max.y))); + } + + template + constexpr Box<2, T> expand(const Box<2, T>& a, const Vector<2, T>& b) + { + return Box<2, T>( + Vector<2, T>( + std::min(a.min.x, b.x), + std::min(a.min.y, b.y)), + Vector<2, T>( + std::max(a.max.x, b.x), + std::max(a.max.y, b.y))); + } + + template + constexpr Box<2, T> margin(const Box<2, T>& a, const Vector<2, T>& b) + { + return Box<2, T>( + Vector<2, T>(a.min.x - b.x, a.min.y - b.y), + Vector<2, T>(a.max.x + b.x, a.max.y + b.y)); + } + + template + constexpr Box<2, T> margin(const Box<2, T>& a, T b) + { + return Box<2, T>( + Vector<2, T>(a.min.x - b, a.min.y - b), + Vector<2, T>(a.max.x + b, a.max.y + b)); + } + + template + constexpr Box<2, T> margin(const Box<2, T>& a, T x, T y) + { + return Box<2, T>( + Vector<2, T>(a.min.x - x, a.min.y - y), + Vector<2, T>(a.max.x + x, a.max.y + y)); + } + + template + constexpr Box<2, T> margin(const Box<2, T>& a, T x0, T y0, T x1, T y1) + { + return Box<2, T>( + Vector<2, T>(a.min.x - x0, a.min.y - y0), + Vector<2, T>(a.max.x + x1, a.max.y + y1)); + } + + template + constexpr Box<2, T> bbox(const std::vector >& b) + { + Box<2, T> out; + if (!b.empty()) + { + out.min = b[0].min; + out.max = b[0].max; + for (size_t i = 1; i < b.size(); ++i) + { + out.min.x = std::min(out.min.x, b[i].min.x); + out.min.y = std::min(out.min.y, b[i].min.y); + out.max.x = std::max(out.max.x, b[i].max.x); + out.max.y = std::max(out.max.y, b[i].max.y); + } + } + return out; + } + + template + constexpr Box<3, T> bbox(const std::vector >& b) + { + Box<3, T> out; + if (!b.empty()) + { + out.min = b[0].min; + out.max = b[0].max; + for (size_t i = 1; i < b.size(); ++i) + { + out.min.x = std::min(out.min.x, b[i].min.x); + out.min.y = std::min(out.min.y, b[i].min.y); + out.min.z = std::min(out.min.z, b[i].min.z); + out.max.x = std::max(out.max.x, b[i].max.x); + out.max.y = std::max(out.max.y, b[i].max.y); + out.max.z = std::max(out.max.z, b[i].max.z); + } + } + return out; + } + + template + constexpr Box<2, T> bbox(const std::vector >& v) + { + Box<2, T> out; + if (!v.empty()) + { + out.min = out.max = v[0]; + for (size_t i = 1; i < v.size(); ++i) + { + out.min.x = std::min(out.min.x, v[i].x); + out.min.y = std::min(out.min.y, v[i].y); + out.max.x = std::max(out.max.x, v[i].x); + out.max.y = std::max(out.max.y, v[i].y); + } + } + return out; + } + + template + constexpr Box<3, T> bbox(const std::vector >& v) + { + Box<3, T> out; + if (!v.empty()) + { + out.min = out.max = v[0]; + for (size_t i = 1; i < v.size(); ++i) + { + out.min.x = std::min(out.min.x, v[i].x); + out.min.y = std::min(out.min.y, v[i].y); + out.min.z = std::min(out.min.z, v[i].z); + out.max.x = std::max(out.max.x, v[i].x); + out.max.y = std::max(out.max.y, v[i].y); + out.max.z = std::max(out.max.z, v[i].z); + } + } + return out; + } + + template + constexpr std::vector > points(const Box<2, T>& a) + { + std::vector > v; + v.push_back(Vector<2, T>(a.min.x, a.min.y)); + v.push_back(Vector<2, T>(a.max.x, a.min.y)); + v.push_back(Vector<2, T>(a.max.x, a.max.y)); + v.push_back(Vector<2, T>(a.min.x, a.max.y)); + return v; + } + + template + constexpr std::vector > points(const Box<3, T>& a) + { + std::vector > v; + v.push_back(Vector<3, T>(a.max.x, a.max.y, a.max.z)); + v.push_back(Vector<3, T>(a.max.x, a.max.y, a.min.z)); + v.push_back(Vector<3, T>(a.min.x, a.max.y, a.min.z)); + v.push_back(Vector<3, T>(a.min.x, a.max.y, a.max.z)); + + v.push_back(Vector<3, T>(a.max.x, a.min.y, a.max.z)); + v.push_back(Vector<3, T>(a.max.x, a.min.y, a.min.z)); + v.push_back(Vector<3, T>(a.min.x, a.min.y, a.min.z)); + v.push_back(Vector<3, T>(a.min.x, a.min.y, a.max.z)); + return v; + } + + constexpr Box<2, float> convert(const Box<2, int>& value) + { + return Box<2, float>(value.x(), value.y(), value.w(), value.h()); + } + + template + constexpr Box operator + (const Box& a, const Vector& b) + { + return Box(a.min + b, a.size()); + } + + template + constexpr Box operator - (const Box& a, const Vector& b) + { + return Box(a.min - b, a.size()); + } + + template + constexpr bool operator == (const Box& a, const Box& b) + { + return a.min == b.min && a.max == b.max; + } + + template + constexpr bool operator != (const Box& a, const Box& b) + { + return !(a == b); + } + + template + inline std::ostream& operator << (std::ostream& os, const Box& v) + { + os << to_string(v); + return os; + } +} diff --git a/third_party/tlRender-install-Release/include/ftk/Core/BoxPack.h b/third_party/tlRender-install-Release/include/ftk/Core/BoxPack.h new file mode 100644 index 00000000..37f3638b --- /dev/null +++ b/third_party/tlRender-install-Release/include/ftk/Core/BoxPack.h @@ -0,0 +1,86 @@ +// SPDX-License-Identifier: BSD-3-Clause +// Copyright Contributors to the feather-tk project. + +#pragma once + +#include +#include + +#include +#include +#include +#include + +namespace ftk +{ + //! \name Box Packing + ///@{ + + //! Box packing ID. + typedef int64_t BoxPackID; + + //! Invalid box packing ID. + constexpr BoxPackID boxPackInvalidID = -1; + + //! Box packing timestamp. + typedef uint64_t BoxPackTimestamp; + + //! Box packing node. + //! + //! References: + //! - http://blackpawn.com/texts/lightmaps/ + struct FTK_API_TYPE BoxPackNode + { + Box2I box; + BoxPackID id = boxPackInvalidID; + BoxPackTimestamp timestamp = 0; + std::array, 2> children; + + FTK_API bool isBranch() const; + FTK_API bool isOccupied() const; + }; + + //! Pack boxes together. + class FTK_API_TYPE BoxPack : public std::enable_shared_from_this + { + FTK_NON_COPYABLE(BoxPack); + + private: + BoxPack() = default; + + public: + //! Create a new object. + FTK_API static std::shared_ptr create(const Size2I&, int border = 0); + + //! Get the root node. + FTK_API const std::shared_ptr& getRoot() const; + + //! Get the list of nodes. + FTK_API std::vector > getNodes() const; + + //! Get the node with the given ID. + FTK_API std::shared_ptr getNode(BoxPackID); + + //! Insert a node. + FTK_API std::shared_ptr insert(const Size2I&); + + private: + void _getNodes( + const std::shared_ptr&, + std::vector >&) const; + + std::shared_ptr _insert( + std::shared_ptr, + const Size2I&); + + void _removeFromMap(const std::shared_ptr&); + + int _border = 0; + std::shared_ptr _root; + BoxPackID _id = 0; + BoxPackTimestamp _timestamp = 0; + std::map> _idToNode; + }; + + ///@} +} diff --git a/third_party/tlRender-install-Release/include/ftk/Core/CmdLine.h b/third_party/tlRender-install-Release/include/ftk/Core/CmdLine.h new file mode 100644 index 00000000..08fede35 --- /dev/null +++ b/third_party/tlRender-install-Release/include/ftk/Core/CmdLine.h @@ -0,0 +1,203 @@ +// SPDX-License-Identifier: BSD-3-Clause +// Copyright Contributors to the feather-tk project. + +#pragma once + +#include + +#include +#include +#include +#include +#include + +namespace ftk +{ + //! Base class for command line options. + class FTK_API_TYPE ICmdLineOption : public std::enable_shared_from_this + { + FTK_NON_COPYABLE(ICmdLineOption); + + protected: + ICmdLineOption( + const std::vector& names, + const std::string& help, + const std::string& group = std::string()); + + public: + FTK_API virtual ~ICmdLineOption() = 0; + + //! Get the help. + const std::string& getHelp() const; + + //! Get the group. + const std::string& getGroup() const; + + //! Parse the option. + FTK_API virtual void parse(std::vector& args) = 0; + + //! Get whether the option was found. + FTK_API virtual bool found() const; + + //! Get the option name that was matched. + const std::string& getMatchedName() const; + + protected: + std::vector _names; + std::string _help; + std::string _group; + std::string _matchedName; + }; + + //! Command line flag. + class FTK_API_TYPE CmdLineFlag : public ICmdLineOption + { + protected: + CmdLineFlag( + const std::vector& names, + const std::string& help, + const std::string& group); + + public: + //! Create a new command line flag. + FTK_API static std::shared_ptr create( + const std::vector& names, + const std::string& help, + const std::string& group = std::string()); + + FTK_API void parse(std::vector& args) override; + }; + + //! Command line option. + template + class CmdLineOption : public ICmdLineOption + { + protected: + CmdLineOption( + const std::vector& names, + const std::string& help, + const std::string& group, + const std::optional& defaultValue, + const std::string& possibleValues); + + public: + //! Create a new command line option. + static std::shared_ptr > create( + const std::vector& names, + const std::string& help, + const std::string& group = std::string(), + const std::optional& defaultValue = std::optional(), + const std::string& possibleValues = std::string()); + + //! Get whether there is a value. The value is either from the command + //! line or the default value. + bool hasValue() const; + + //! Get the value. + const T& getValue() const; + + void parse(std::vector& args) override; + bool found() const override; + + private: + std::optional _value; + std::optional _defaultValue; + std::string _possibleValues; + }; + + //! Base class for command line arguments. + class FTK_API_TYPE ICmdLineArg : public std::enable_shared_from_this + { + protected: + ICmdLineArg( + const std::string& name, + const std::string& help, + bool optional); + + public: + FTK_API virtual ~ICmdLineArg() = 0; + + //! Parse the argument. + FTK_API virtual void parse(std::vector& args) = 0; + + //! Get the argument name. + const std::string& getName() const; + + //! Get the help. + const std::string& getHelp() const; + + //! Get whether this argument is optional. + bool isOptional() const; + + protected: + std::string _name; + std::string _help; + bool _optional = false; + }; + + //! Command line argument. + template + class CmdLineArg : public ICmdLineArg + { + protected: + CmdLineArg( + const std::string& name, + const std::string& help, + bool optional); + + public: + //! Create a new command line argument. + static std::shared_ptr > create( + const std::string& name, + const std::string& help, + bool optional = false); + + //! Get whether there is a value. + bool hasValue() const; + + //! Get the value. + const T& getValue() const; + + void parse(std::vector& args) override; + + private: + std::optional _value; + }; + + //! Command line list argument. This argument should come last since it + //! will take all of the remaining arguments. + template + class CmdLineListArg : public ICmdLineArg + { + protected: + CmdLineListArg( + const std::string& name, + const std::string& help, + bool optional); + + public: + //! Create a new command line argument. + static std::shared_ptr > create( + const std::string& name, + const std::string& help, + bool optional = false); + + //! Get the list. + const std::vector& getList() const; + + void parse(std::vector& args) override; + + private: + std::vector _list; + }; + + FTK_API bool cmdLineParse(std::vector&, std::vector::iterator&, std::string&); + FTK_API bool cmdLineParse(std::vector&, std::vector::iterator&, bool&); + FTK_API bool cmdLineParse(std::vector&, std::vector::iterator&, int&); + FTK_API bool cmdLineParse(std::vector&, std::vector::iterator&, float&); + FTK_API bool cmdLineParse(std::vector&, std::vector::iterator&, double&); + template + bool cmdLineParse(std::vector&, std::vector::iterator&, T&); +} + +#include diff --git a/third_party/tlRender-install-Release/include/ftk/Core/CmdLineInline.h b/third_party/tlRender-install-Release/include/ftk/Core/CmdLineInline.h new file mode 100644 index 00000000..49355d7a --- /dev/null +++ b/third_party/tlRender-install-Release/include/ftk/Core/CmdLineInline.h @@ -0,0 +1,259 @@ +// SPDX-License-Identifier: BSD-3-Clause +// Copyright Contributors to the feather-tk project. + +#include +#include + +#include + +namespace ftk +{ + inline const std::string& ICmdLineOption::getHelp() const + { + return _help; + } + + inline const std::string& ICmdLineOption::getGroup() const + { + return _group; + } + + inline const std::string& ICmdLineOption::getMatchedName() const + { + return _matchedName; + } + + template + inline CmdLineOption::CmdLineOption( + const std::vector& names, + const std::string& help, + const std::string& group, + const std::optional& defaultValue, + const std::string& possibleValues) : + ICmdLineOption(names, help, group), + _value(defaultValue), + _defaultValue(defaultValue), + _possibleValues(possibleValues) + { + _help = join(_names, ", ") + " (value) - " + help; + if (_defaultValue.has_value()) + { + std::stringstream ss; + ss << _defaultValue.value(); + _help += " Default: \"" + ss.str() + "\"."; + } + if (!_possibleValues.empty()) + { + _help += " Options: " + _possibleValues + "."; + } + } + + template + inline std::shared_ptr > CmdLineOption::create( + const std::vector& names, + const std::string& help, + const std::string& group, + const std::optional& defaultValue, + const std::string& possibleValues) + { + return std::shared_ptr >(new CmdLineOption( + names, + help, + group, + defaultValue, + possibleValues)); + } + + template + bool CmdLineOption::hasValue() const + { + return _value.has_value(); + } + + template + const T& CmdLineOption::getValue() const + { + return _value.value(); + } + + template + inline void CmdLineOption::parse(std::vector& args) + { + for (const auto& name : _names) + { + auto i = std::find(args.begin(), args.end(), name); + if (i != args.end()) + { + _matchedName = name; + i = args.erase(i); + _value = T(); + if (!cmdLineParse(args, i, *_value)) + { + throw ParseError(); + } + } + } + } + + template + inline bool CmdLineOption::found() const + { + return ICmdLineOption::found() && _value.has_value(); + } + + template<> + inline void CmdLineOption::parse(std::vector& args) + { + for (const auto& name : _names) + { + auto i = std::find(args.begin(), args.end(), name); + if (i != args.end()) + { + _matchedName = name; + i = args.erase(i); + if (i != args.end()) + { + _value = *i; + i = args.erase(i); + } + else + { + throw ParseError(); + } + } + } + } + + inline ICmdLineArg::ICmdLineArg( + const std::string& name, + const std::string& help, + bool optional) : + _name(name), + _help(help), + _optional(optional) + {} + + inline ICmdLineArg::~ICmdLineArg() + {} + + inline const std::string& ICmdLineArg::getName() const + { + return _name; + } + + inline const std::string& ICmdLineArg::getHelp() const + { + return _help; + } + + inline bool ICmdLineArg::isOptional() const + { + return _optional; + } + + template + inline CmdLineArg::CmdLineArg( + const std::string& name, + const std::string& help, + bool optional) : + ICmdLineArg(name, help, optional) + {} + + template + inline std::shared_ptr > CmdLineArg::create( + const std::string& name, + const std::string& help, + bool optional) + { + return std::shared_ptr >(new CmdLineArg(name, help, optional)); + } + + template + bool CmdLineArg::hasValue() const + { + return _value.has_value(); + } + + template + const T& CmdLineArg::getValue() const + { + return _value.value(); + } + + template + inline void CmdLineArg::parse(std::vector& args) + { + auto i = args.begin(); + _value = T(); + if (!cmdLineParse(args, i, *_value)) + { + throw ParseError(); + } + } + + template<> + inline void CmdLineArg::parse(std::vector& args) + { + auto i = args.begin(); + if (i != args.end()) + { + _value = *i; + i = args.erase(i); + } + else + { + throw ParseError(); + } + } + + template + inline CmdLineListArg::CmdLineListArg( + const std::string& name, + const std::string& help, + bool optional) : + ICmdLineArg(name, help, optional) + { } + + template + inline std::shared_ptr > CmdLineListArg::create( + const std::string& name, + const std::string& help, + bool optional) + { + return std::shared_ptr >(new CmdLineListArg(name, help, optional)); + } + + template + inline const std::vector& CmdLineListArg::getList() const + { + return _list; + } + + template + inline void CmdLineListArg::parse(std::vector& args) + { + auto i = args.begin(); + while (i != args.end()) + { + T value; + if (!cmdLineParse(args, i, value)) + { + throw ParseError(); + } + _list.push_back(value); + } + } + + template + inline bool cmdLineParse(std::vector& args, std::vector::iterator& it, T& value) + { + bool out = false; + if (it != args.end()) + { + from_string(*it, value); + it = args.erase(it); + out = true; + } + return out; + } +} diff --git a/third_party/tlRender-install-Release/include/ftk/Core/Color.h b/third_party/tlRender-install-Release/include/ftk/Core/Color.h new file mode 100644 index 00000000..59e83935 --- /dev/null +++ b/third_party/tlRender-install-Release/include/ftk/Core/Color.h @@ -0,0 +1,193 @@ +// SPDX-License-Identifier: BSD-3-Clause +// Copyright Contributors to the feather-tk project. + +#pragma once + +#include + +#include +#include + +namespace ftk +{ + //! \name Colors + ///@{ + + //! Color. + template + class Color + { + public: + constexpr Color(); + + constexpr T operator [] (int) const; + constexpr T& operator [] (int); + + constexpr const T* data() const; + constexpr T* data(); + + std::array e; + }; + + //! One channel color (luminance). + template + class Color<1, T> + { + public: + constexpr Color(); + explicit constexpr Color(T); + constexpr Color(const Color<1, T>&); + + constexpr T operator [] (int) const; + constexpr T& operator [] (int); + + constexpr const T* data() const; + constexpr T* data(); + + std::array e; + T& l; + + constexpr Color<1, T>& operator = (const Color<1, T>&); + }; + + //! Two channel color (luminance and alpha). + template + class Color<2, T> + { + public: + constexpr Color(); + explicit constexpr Color(T); + constexpr Color(T, T); + constexpr Color(const Color<2, T>&); + + constexpr T operator [] (int) const; + constexpr T& operator [] (int); + + constexpr const T* data() const; + constexpr T* data(); + + std::array e; + T& l; + T& a; + + constexpr Color<2, T>& operator = (const Color<2, T>&); + }; + + //! Three channel color (RGB). + template + class Color<3, T> + { + public: + constexpr Color(); + constexpr Color(T, T, T); + constexpr Color(const Color<3, T>&); + + constexpr T operator [] (int) const; + constexpr T& operator [] (int); + + constexpr const T* data() const; + constexpr T* data(); + + std::array e; + T& r; + T& g; + T& b; + + constexpr Color<3, T>& operator = (const Color<3, T>&); + }; + + //! Four channel color (RGBA). + template + class Color<4, T> + { + public: + constexpr Color(); + constexpr Color(T, T, T); + constexpr Color(T, T, T, T); + constexpr Color(const Color<4, T>&); + + constexpr T operator [] (int) const; + constexpr T& operator [] (int); + + constexpr const T* data() const; + constexpr T* data(); + + std::array e; + T& r; + T& g; + T& b; + T& a; + + constexpr Color<4, T>& operator = (const Color<4, T>&); + }; + + typedef Color<1, float> Color1F; + typedef Color<2, float> Color2F; + typedef Color<3, float> Color3F; + typedef Color<4, float> Color4F; + + //! Get a lighter color. + template + Color lighter(const Color&, float); + + //! Get a darker color. + template + Color darker(const Color&, float); + + //! Convert to greyscale. + FTK_API Color3F greyscale(const Color3F&); + + //! Convert to greyscale. + FTK_API Color4F greyscale(const Color4F&); + + //! Get a brightness color matrix. + FTK_API M44F brightness(const V3F&); + + //! Get a contrast color matrix. + FTK_API M44F contrast(const V3F&); + + //! Get a saturation color matrix. + FTK_API M44F saturation(const V3F&); + + //! Get a color matrix for changing the hue. + FTK_API M44F hue(float); + + //! Convert RGB to HSV. + FTK_API void rgbToHSV(const float in[3], float out[3]); + + //! Convert HSV to RGB. + FTK_API void hsvToRGB(const float in[3], float out[3]); + + FTK_API std::string to_string(const Color1F&); + FTK_API std::string to_string(const Color2F&); + FTK_API std::string to_string(const Color3F&); + FTK_API std::string to_string(const Color4F&); + + FTK_API bool from_string(const std::string&, Color1F&); + FTK_API bool from_string(const std::string&, Color2F&); + FTK_API bool from_string(const std::string&, Color3F&); + FTK_API bool from_string(const std::string&, Color4F&); + + FTK_API void to_json(nlohmann::json&, const Color1F&); + FTK_API void to_json(nlohmann::json&, const Color2F&); + FTK_API void to_json(nlohmann::json&, const Color3F&); + FTK_API void to_json(nlohmann::json&, const Color4F&); + + FTK_API void from_json(const nlohmann::json&, Color1F&); + FTK_API void from_json(const nlohmann::json&, Color2F&); + FTK_API void from_json(const nlohmann::json&, Color3F&); + FTK_API void from_json(const nlohmann::json&, Color4F&); + + template + constexpr bool operator == (const Color&, const Color&); + template + constexpr bool operator != (const Color&, const Color&); + + template + std::ostream& operator << (std::ostream&, const Color&); + + ///@} +} + +#include + diff --git a/third_party/tlRender-install-Release/include/ftk/Core/ColorInline.h b/third_party/tlRender-install-Release/include/ftk/Core/ColorInline.h new file mode 100644 index 00000000..7c13e7e7 --- /dev/null +++ b/third_party/tlRender-install-Release/include/ftk/Core/ColorInline.h @@ -0,0 +1,344 @@ +// SPDX-License-Identifier: BSD-3-Clause +// Copyright Contributors to the feather-tk project. + +namespace ftk +{ + template + constexpr Color::Color() + { + for (int c = 0; c < C; ++c) + { + e[c] = T(0); + } + } + + template + constexpr T Color::operator [] (int i) const + { + return e[i]; + } + + template + constexpr T& Color::operator [] (int i) + { + return e[i]; + } + + template + constexpr const T* Color::data() const + { + return e.data(); + } + + template + constexpr T* Color::data() + { + return e.data(); + } + + template + constexpr Color<1, T>::Color() : + e({ 0 }), + l(e[0]) + {} + + template + constexpr Color<1, T>::Color(T l) : + e({ l }), + l(e[0]) + {} + + template + constexpr Color<1, T>::Color(const Color<1, T>& v) : + e(v.e), + l(e[0]) + {} + + template + constexpr T Color<1, T>::operator [] (int i) const + { + return e[i]; + } + + template + constexpr T& Color<1, T>::operator [] (int i) + { + return e[i]; + } + + template + constexpr const T* Color<1, T>::data() const + { + return e.data(); + } + + template + constexpr T* Color<1, T>::data() + { + return e.data(); + } + + template + constexpr Color<1, T>& Color<1, T>::operator = (const Color<1, T>& v) + { + e = v.e; + return *this; + } + + template + constexpr Color<2, T>::Color() : + e({ 0, 0 }), + l(e[0]), + a(e[1]) + {} + + template + constexpr Color<2, T>::Color(T l, T a) : + e({ l, a }), + l(e[0]), + a(e[1]) + {} + + template<> + constexpr Color<2, float>::Color(float l) : + e({ l, 1.F }), + l(e[0]), + a(e[1]) + {} + + template + constexpr Color<2, T>::Color(const Color<2, T>& v) : + e(v.e), + l(e[0]), + a(e[1]) + {} + + template + constexpr T Color<2, T>::operator [] (int i) const + { + return e[i]; + } + + template + constexpr T& Color<2, T>::operator [] (int i) + { + return e[i]; + } + + template + constexpr const T* Color<2, T>::data() const + { + return e.data(); + } + + template + constexpr T* Color<2, T>::data() + { + return e.data(); + } + + template + constexpr Color<2, T>& Color<2, T>::operator = (const Color<2, T>& v) + { + e = v.e; + return *this; + } + + template + constexpr Color<3, T>::Color() : + e({ 0, 0, 0 }), + r(e[0]), + g(e[1]), + b(e[2]) + {} + + template + constexpr Color<3, T>::Color(T r, T g, T b) : + e({ r, g, b }), + r(e[0]), + g(e[1]), + b(e[2]) + {} + + template + constexpr Color<3, T>::Color(const Color<3, T>& v) : + e(v.e), + r(e[0]), + g(e[1]), + b(e[2]) + {} + + template + constexpr T Color<3, T>::operator [] (int i) const + { + return e[i]; + } + + template + constexpr T& Color<3, T>::operator [] (int i) + { + return e[i]; + } + + template + constexpr const T* Color<3, T>::data() const + { + return e.data(); + } + + template + constexpr T* Color<3, T>::data() + { + return e.data(); + } + + template + constexpr Color<3, T>& Color<3, T>::operator = (const Color<3, T>& v) + { + e = v.e; + return *this; + } + + template + constexpr Color<4, T>::Color() : + e({ 0, 0, 0, 0 }), + r(e[0]), + g(e[1]), + b(e[2]), + a(e[3]) + {} + + template + constexpr Color<4, T>::Color(T r, T g, T b, T a) : + e({ r, g, b, a }), + r(e[0]), + g(e[1]), + b(e[2]), + a(e[3]) + {} + + template<> + constexpr Color<4, float>::Color(float r, float g, float b) : + e({ r, g, b, 1.F }), + r(e[0]), + g(e[1]), + b(e[2]), + a(e[3]) + {} + + template + constexpr Color<4, T>::Color(const Color<4, T>& v) : + e(v.e), + r(e[0]), + g(e[1]), + b(e[2]), + a(e[3]) + {} + + template + constexpr T Color<4, T>::operator [] (int i) const + { + return e[i]; + } + + template + constexpr T& Color<4, T>::operator [] (int i) + { + return e[i]; + } + + template + constexpr const T* Color<4, T>::data() const + { + return e.data(); + } + + template + constexpr T* Color<4, T>::data() + { + return e.data(); + } + + template + constexpr Color<4, T>& Color<4, T>::operator = (const Color<4, T>& v) + { + e = v.e; + return *this; + } + + inline Color1F lighter(const Color1F& color, float value) + { + return Color1F(color.l + value); + } + + inline Color2F lighter(const Color2F& color, float value) + { + return Color2F(color.l + value, color.a); + } + + inline Color3F lighter(const Color3F& color, float value) + { + return Color3F(color.r + value, color.g + value, color.b + value); + } + + inline Color4F lighter(const Color4F& color, float value) + { + return Color4F(color.r + value, color.g + value, color.b + value, color.a); + } + + inline Color1F darker(const Color1F& color, float value) + { + return Color1F(color.l - value); + } + + inline Color2F darker(const Color2F& color, float value) + { + return Color2F(color.l - value, color.a); + } + + inline Color3F darker(const Color3F& color, float value) + { + return Color3F(color.r - value, color.g - value, color.b - value); + } + + inline Color4F darker(const Color4F& color, float value) + { + return Color4F(color.r - value, color.g - value, color.b - value, color.a); + } + + inline Color3F greyscale(const Color3F& value) + { + const float l = (value.r + value.g + value.b) / 3.F; + return Color3F(l, l, l); + } + + inline Color4F greyscale(const Color4F& value) + { + const float l = (value.r + value.g + value.b) / 3.F; + return Color4F(l, l, l, value.a); + } + + template + constexpr bool operator == (const Color& a, const Color& b) + { + bool out = true; + for (int c = 0; c < C; ++c) + { + out &= a[c] == b[c]; + } + return out; + } + + template + constexpr bool operator != (const Color& a, const Color& b) + { + return !(a == b); + } + + template + inline std::ostream& operator << (std::ostream& os, const Color& v) + { + os << to_string(v); + return os; + } +} diff --git a/third_party/tlRender-install-Release/include/ftk/Core/Command.h b/third_party/tlRender-install-Release/include/ftk/Core/Command.h new file mode 100644 index 00000000..8843d376 --- /dev/null +++ b/third_party/tlRender-install-Release/include/ftk/Core/Command.h @@ -0,0 +1,65 @@ +// SPDX-License-Identifier: BSD-3-Clause +// Copyright Contributors to the feather-tk project. + +#pragma once + +#include + +namespace ftk +{ + //! \name Commands + ///@{ + + //! Base class for commands. + class FTK_API_TYPE ICommand : public std::enable_shared_from_this + { + FTK_NON_COPYABLE(ICommand); + + protected: + ICommand() = default; + + public: + FTK_API virtual ~ICommand() = 0; + + FTK_API virtual void exec() = 0; + FTK_API virtual void undo() = 0; + }; + + //! Command stack. + class FTK_API_TYPE CommandStack : public std::enable_shared_from_this + { + FTK_NON_COPYABLE(CommandStack); + + protected: + CommandStack(); + + public: + FTK_API ~CommandStack(); + + //! Create a new command stack. + FTK_API static std::shared_ptr create(); + + //! Execute a command and push it onto the stack. + FTK_API void push(const std::shared_ptr&); + + //! Clear the stack. + FTK_API void clear(); + + //! Observer whether the stack can undo a command. + FTK_API std::shared_ptr > observeHasUndo() const; + + //! Observer whether the stack can redo a command. + FTK_API std::shared_ptr > observeHasRedo() const; + + //! Undo a command. + FTK_API void undo(); + + //! Redo a command. + FTK_API void redo(); + + private: + FTK_PRIVATE(); + }; + + ///@} +} diff --git a/third_party/tlRender-install-Release/include/ftk/Core/Context.h b/third_party/tlRender-install-Release/include/ftk/Core/Context.h new file mode 100644 index 00000000..9f15fddf --- /dev/null +++ b/third_party/tlRender-install-Release/include/ftk/Core/Context.h @@ -0,0 +1,67 @@ +// SPDX-License-Identifier: BSD-3-Clause +// Copyright Contributors to the feather-tk project. + +#pragma once + +#include + +#include +#include +#include +#include + +namespace ftk +{ + class IBaseSystem; + + //! The context provides centralized access to systems and other + //! resources. + class FTK_API_TYPE Context : public std::enable_shared_from_this + { + FTK_NON_COPYABLE(Context); + + protected: + void _init(); + + Context() = default; + + public: + FTK_API ~Context(); + + //! Create a new context. + FTK_API static std::shared_ptr create(); + + //! Add a system. + FTK_API void addSystem(const std::shared_ptr&); + + //! Get the systems. + FTK_API const std::list >& getSystems() const; + + //! Get a system by type. + template + std::shared_ptr getSystem() const; + + //! Get a system by name. + FTK_API std::shared_ptr getSystemByName(const std::string&) const; + + //! Get the log system. + const std::shared_ptr& getLogSystem() const; + + //! Print to the log. + FTK_API void log( + const std::string& prefix, + const std::string&, + LogType = LogType::Message); + + //! Tick the context. + FTK_API void tick(); + + private: + std::shared_ptr _logSystem; + std::list > _systems; + std::map, std::chrono::steady_clock::time_point> _systemTimes; + }; +} + +#include + diff --git a/third_party/tlRender-install-Release/include/ftk/Core/ContextInline.h b/third_party/tlRender-install-Release/include/ftk/Core/ContextInline.h new file mode 100644 index 00000000..88952758 --- /dev/null +++ b/third_party/tlRender-install-Release/include/ftk/Core/ContextInline.h @@ -0,0 +1,23 @@ +// SPDX-License-Identifier: BSD-3-Clause +// Copyright Contributors to the feather-tk project. + +namespace ftk +{ + template + inline std::shared_ptr Context::getSystem() const + { + for (const auto& i : _systems) + { + if (auto system = std::dynamic_pointer_cast(i)) + { + return system; + } + } + return nullptr; + } + + inline const std::shared_ptr& Context::getLogSystem() const + { + return _logSystem; + } +} diff --git a/third_party/tlRender-install-Release/include/ftk/Core/DiagSystem.h b/third_party/tlRender-install-Release/include/ftk/Core/DiagSystem.h new file mode 100644 index 00000000..6839be64 --- /dev/null +++ b/third_party/tlRender-install-Release/include/ftk/Core/DiagSystem.h @@ -0,0 +1,70 @@ +// SPDX-License-Identifier: BSD-3-Clause +// Copyright Contributors to the feather-tk project. + +#pragma once + +#include +#include + +#include + +namespace ftk +{ + class Context; + + //! \name Debugging + ///@{ + + //! Diagnostics system. + class FTK_API_TYPE DiagSystem : public ISystem + { + FTK_NON_COPYABLE(DiagSystem); + + protected: + DiagSystem(const std::shared_ptr&); + + public: + FTK_API virtual ~DiagSystem(); + + //! Create a new system. + FTK_API static std::shared_ptr create(const std::shared_ptr&); + + //! Add a sampler function. + FTK_API void addSampler(const std::string&, const std::function&); + + //! Get the sampler groups. + FTK_API const std::vector& getGroups() const; + + //! Get the sampler names in a group. + FTK_API std::vector getNames(const std::string& group) const; + + //! Get whether the sampler exists. + FTK_API bool hasSampler(const std::string&) const; + + //! Get the maximum number of samples. + FTK_API size_t getSamplesMax() const; + + //! Observe the maximum number of samples. + FTK_API std::shared_ptr > observeSamplesMax() const; + + //! Set the maximum number of samples. + FTK_API void setSamplesMax(size_t); + + //! Get the samples. + FTK_API const std::map >& getSamples() const; + + //! Observe the samples. + FTK_API std::shared_ptr > > observeSamples() const; + + //! Observe the samples increments. + FTK_API std::shared_ptr > observeSamplesInc() const; + + FTK_API void tick() override; + FTK_API std::chrono::milliseconds getTickTime() const override; + + private: + void _log(); + + FTK_PRIVATE(); + }; +} diff --git a/third_party/tlRender-install-Release/include/ftk/Core/Error.h b/third_party/tlRender-install-Release/include/ftk/Core/Error.h new file mode 100644 index 00000000..cbbfb9d5 --- /dev/null +++ b/third_party/tlRender-install-Release/include/ftk/Core/Error.h @@ -0,0 +1,28 @@ +// SPDX-License-Identifier: BSD-3-Clause +// Copyright Contributors to the feather-tk project. + +#pragma once + +#include + +#include + +namespace ftk +{ + //! \name Errors + ///@{ + + //! Parse error. + class FTK_API_TYPE ParseError : public std::invalid_argument + { + public: + FTK_API ParseError(); + }; + +#if defined(_WINDOWS) + //! Get an error string from a Windows system call. + FTK_API std::string getLastError(); +#endif // _WINDOWS + + ///@} +} diff --git a/third_party/tlRender-install-Release/include/ftk/Core/Export.h b/third_party/tlRender-install-Release/include/ftk/Core/Export.h new file mode 100644 index 00000000..3e16827c --- /dev/null +++ b/third_party/tlRender-install-Release/include/ftk/Core/Export.h @@ -0,0 +1,68 @@ +// SPDX-License-Identifier: BSD-3-Clause +// Copyright Contributors to the feather-tk project. + +#pragma once + +// For an explanation of how these export defines work, see: +// https://github.com/PixarAnimationStudios/OpenUSD/blob/dev/pxr/base/arch/export.h +#if defined(_WINDOWS) +# if defined(__GNUC__) && __GNUC__ >= 4 || defined(__clang__) +# define FEATHER_TK_EXPORT __attribute__((dllexport)) +# define FEATHER_TK_IMPORT __attribute__((dllimport)) +# define FEATHER_TK_HIDDEN +# define FEATHER_TK_EXPORT_TYPE +# define FEATHER_TK_IMPORT_TYPE +# else +# define FEATHER_TK_EXPORT __declspec(dllexport) +# define FEATHER_TK_IMPORT __declspec(dllimport) +# define FEATHER_TK_HIDDEN +# define FEATHER_TK_EXPORT_TYPE +# define FEATHER_TK_IMPORT_TYPE +# endif +#elif defined(__GNUC__) && __GNUC__ >= 4 || defined(__clang__) +# define FEATHER_TK_EXPORT __attribute__((visibility("default"))) +# define FEATHER_TK_IMPORT +# define FEATHER_TK_HIDDEN __attribute__((visibility("hidden"))) +# if defined(__clang__) +# define FEATHER_TK_EXPORT_TYPE \ + __attribute__((type_visibility("default"))) +# else +# define FEATHER_TK_EXPORT_TYPE \ + __attribute__((visibility("default"))) +# endif +# define FEATHER_TK_IMPORT_TYPE +#else +# define FEATHER_TK_EXPORT +# define FEATHER_TK_IMPORT +# define FEATHER_TK_HIDDEN +# define FEATHER_TK_EXPORT_TYPE +# define FEATHER_TK_IMPORT_TYPE +#endif +#define FEATHER_TK_EXPORT_TEMPLATE(type, ...) +#define FEATHER_TK_IMPORT_TEMPLATE(type, ...) \ + extern template type FEATHER_TK_IMPORT __VA_ARGS__ + +#if defined(FTK_STATIC) +# define FTK_API +# define FTK_API_TYPE +# define FTK_API_TEMPLATE_CLASS(...) +# define FTK_API_TEMPLATE_STRUCT(...) +# define FTK_LOCAL +#else +# if defined(FTK_EXPORTS) +# define FTK_API FEATHER_TK_EXPORT +# define FTK_API_TYPE FEATHER_TK_EXPORT_TYPE +# define FTK_API_TEMPLATE_CLASS(...) \ + FEATHER_TK_EXPORT_TEMPLATE(class, __VA_ARGS__) +# define FTK_API_TEMPLATE_STRUCT(...) \ + FEATHER_TK_EXPORT_TEMPLATE(struct, __VA_ARGS__) +# else +# define FTK_API FEATHER_TK_IMPORT +# define FTK_API_TYPE FEATHER_TK_IMPORT_TYPE +# define FTK_API_TEMPLATE_CLASS(...) \ + FEATHER_TK_IMPORT_TEMPLATE(class, __VA_ARGS__) +# define FTK_API_TEMPLATE_STRUCT(...) \ + FEATHER_TK_IMPORT_TEMPLATE(struct, __VA_ARGS__) +# endif +# define FTK_LOCAL FEATHER_TK_HIDDEN +#endif diff --git a/third_party/tlRender-install-Release/include/ftk/Core/FileIO.h b/third_party/tlRender-install-Release/include/ftk/Core/FileIO.h new file mode 100644 index 00000000..795cf309 --- /dev/null +++ b/third_party/tlRender-install-Release/include/ftk/Core/FileIO.h @@ -0,0 +1,229 @@ +// SPDX-License-Identifier: BSD-3-Clause +// Copyright Contributors to the feather-tk project. + +#pragma once + +#include +#include + +#include +#include + +namespace ftk +{ + //! \name File I/O + ///@{ + + //! File I/O modes. + enum class FTK_API_TYPE FileMode + { + Read, + Write, + ReadWrite, + Append, + + Count, + First = Read + }; + FTK_ENUM(FileMode); + + //! File read type. + enum class FTK_API_TYPE FileRead + { + Normal, + MMap, + + Count, + First = Normal + }; + FTK_ENUM(FileRead); + + //! In-memory file. + struct FTK_API_TYPE MemFile + { + MemFile() = default; + MemFile(const uint8_t*, size_t size); + + const uint8_t* p = nullptr; + size_t size = 0; + + bool operator == (const MemFile&) const; + bool operator != (const MemFile&) const; + }; + + //! Seek modes. + enum class FTK_API_TYPE SeekMode + { + Set, + Forward, + Reverse, + + Count, + First = Set + }; + FTK_ENUM(SeekMode); + + //! File I/O. + class FTK_API_TYPE FileIO : public std::enable_shared_from_this + { + FTK_NON_COPYABLE(FileIO); + + protected: + FileIO(); + + public: + FTK_API ~FileIO(); + + //! Create a new file I/O object. + FTK_API static std::shared_ptr create( + const std::filesystem::path&, + FileMode, + FileRead = FileRead::MMap); + + //! Create a new file I/O object. + FTK_API static std::shared_ptr create( + const std::string&, + FileMode, + FileRead = FileRead::MMap); + + //! Create a read-only file I/O object from memory. + FTK_API static std::shared_ptr create( + const std::filesystem::path&, + const MemFile&); + + //! Create a read-only file I/O object from memory. + FTK_API static std::shared_ptr create( + const std::string&, + const MemFile&); + + //! Get whether the file is open. + FTK_API bool isOpen() const; + + //! \name Information + ///@{ + + //! Get the file path. + FTK_API const std::filesystem::path& getPath() const; + + //! Get the file size. + FTK_API size_t getSize() const; + + ///@} + + //! \name Position + ///@{ + + //! Get the current file position. + FTK_API size_t getPos() const; + + //! Change the current file position. + FTK_API void seek(size_t, SeekMode); + + //! Get whether the file position is at the end of the file. + FTK_API bool isEOF() const; + + ///@} + + //! \name Read + ///@{ + + FTK_API void read(void*, size_t, size_t wordSize = 1); + + FTK_API void read8(int8_t*, size_t = 1); + FTK_API void readU8(uint8_t*, size_t = 1); + FTK_API void read16(int16_t*, size_t = 1); + FTK_API void readU16(uint16_t*, size_t = 1); + FTK_API void read32(int32_t*, size_t = 1); + FTK_API void readU32(uint32_t*, size_t = 1); + FTK_API void readF32(float*, size_t = 1); + + ///@} + + //! \name Write + ///@{ + + FTK_API void write(const void*, size_t, size_t wordSize = 1); + + FTK_API void write8(const int8_t*, size_t); + FTK_API void writeU8(const uint8_t*, size_t); + FTK_API void write16(const int16_t*, size_t); + FTK_API void writeU16(const uint16_t*, size_t); + FTK_API void write32(const int32_t*, size_t); + FTK_API void writeU32(const uint32_t*, size_t); + FTK_API void writeF32(const float*, size_t); + + FTK_API void write8(int8_t); + FTK_API void writeU8(uint8_t); + FTK_API void write16(int16_t); + FTK_API void writeU16(uint16_t); + FTK_API void write32(int32_t); + FTK_API void writeU32(uint32_t); + FTK_API void writeF32(float); + + FTK_API void write(const std::string&); + + ///@} + + //! \name Memory Mapping + ///@{ + + //! Get a pointer to the start of the file memory. + FTK_API const uint8_t* getMemStart() const; + + //! Get a pointer to the end of the file memory. + FTK_API const uint8_t* getMemEnd() const; + + //! Get the current file memory position. + FTK_API const uint8_t* getMemP() const; + + ///@} + + //! \name Endian + ///@{ + + //! Get whether automatic endian conversion is performed. + FTK_API bool hasEndianConversion() const; + + //! Set whether automatic endian conversion is performed. + FTK_API void setEndianConversion(bool); + + ///@} + + private: + void _open(const std::filesystem::path&, FileMode, FileRead); + bool _close(std::string* error = nullptr); + + FTK_PRIVATE(); + }; + + //! Read the contents from a file. + FTK_API std::string read(const std::shared_ptr&); + + //! Read a word from a file. + FTK_API void readWord(const std::shared_ptr&, char*, size_t maxLen = cStringSize); + + //! Read a line from a file. + FTK_API std::string readLine(const std::shared_ptr&); + + //! Read all the lines from a file. + FTK_API std::vector readLines(const std::filesystem::path&); + + //! Read all the lines from a file. + FTK_API std::vector readLines(const std::string&); + + //! Write lines to a file. + FTK_API void writeLines(const std::filesystem::path&, const std::vector&); + + //! Write lines to a file. + FTK_API void writeLines(const std::string&, const std::vector&); + + //! Truncate a file. + FTK_API void truncateFile(const std::filesystem::path&, size_t); + + //! Truncate a file. + FTK_API void truncateFile(const std::string&, size_t); + + ///@} +} + +#include diff --git a/third_party/tlRender-install-Release/include/ftk/Core/FileIOInline.h b/third_party/tlRender-install-Release/include/ftk/Core/FileIOInline.h new file mode 100644 index 00000000..a43c5a2b --- /dev/null +++ b/third_party/tlRender-install-Release/include/ftk/Core/FileIOInline.h @@ -0,0 +1,22 @@ +// SPDX-License-Identifier: BSD-3-Clause +// Copyright Contributors to the feather-tk project. + +namespace ftk +{ + inline MemFile::MemFile(const uint8_t* p, size_t size) : + p(p), + size(size) + {} + + inline bool MemFile::operator == (const MemFile& other) const + { + return + p == other.p && + size == other.size; + } + + inline bool MemFile::operator != (const MemFile& other) const + { + return !(*this == other); + } +} diff --git a/third_party/tlRender-install-Release/include/ftk/Core/FileLogSystem.h b/third_party/tlRender-install-Release/include/ftk/Core/FileLogSystem.h new file mode 100644 index 00000000..86d91917 --- /dev/null +++ b/third_party/tlRender-install-Release/include/ftk/Core/FileLogSystem.h @@ -0,0 +1,33 @@ +// SPDX-License-Identifier: BSD-3-Clause +// Copyright Contributors to the tlRender project. + +#pragma once + +#include + +#include + +namespace ftk +{ + //! File logging system. + class FTK_API_TYPE FileLogSystem : public ISystem + { + FTK_NON_COPYABLE(FileLogSystem); + + protected: + FileLogSystem( + const std::shared_ptr&, + const std::filesystem::path&); + + public: + FTK_API virtual ~FileLogSystem(); + + //! Create a new system. + FTK_API static std::shared_ptr create( + const std::shared_ptr&, + const std::filesystem::path&); + + private: + FTK_PRIVATE(); + }; +} diff --git a/third_party/tlRender-install-Release/include/ftk/Core/FontSystem.h b/third_party/tlRender-install-Release/include/ftk/Core/FontSystem.h new file mode 100644 index 00000000..78da12a6 --- /dev/null +++ b/third_party/tlRender-install-Release/include/ftk/Core/FontSystem.h @@ -0,0 +1,170 @@ +// SPDX-License-Identifier: BSD-3-Clause +// Copyright Contributors to the feather-tk project. + +#pragma once + +#include +#include +#include +#include +#include + +namespace ftk +{ + class Context; + + //! \name Fonts + ///@{ + + //! Font types. + enum class FTK_API_TYPE FontType + { + Regular, + Bold, + Mono, + Symbols, + + Count, + First = Regular + }; + FTK_ENUM(FontType); + + //! Get a built-in font. + FTK_API std::string getDefaultFont(FontType); + + //! Font information. + struct FTK_API_TYPE FontInfo + { + FontInfo() = default; + FontInfo(const std::string&, int size); + + std::string name = getDefaultFont(FontType::Regular); + int size = 12; + + bool operator == (const FontInfo&) const; + bool operator != (const FontInfo&) const; + bool operator < (const FontInfo&) const; + }; + + //! Font metrics. + struct FTK_API_TYPE FontMetrics + { + int ascender = 0; + int descender = 0; + int lineHeight = 0; + }; + + //! Font glyph information. + struct FTK_API_TYPE GlyphInfo + { + GlyphInfo() = default; + GlyphInfo(uint32_t code, const FontInfo&); + + uint32_t code = 0; + FontInfo fontInfo; + + bool operator == (const GlyphInfo&) const; + bool operator != (const GlyphInfo&) const; + bool operator < (const GlyphInfo&) const; + }; + + //! Font glyph. + struct FTK_API_TYPE Glyph + { + GlyphInfo info; + std::shared_ptr image; + V2I offset; + int advance = 0; + int32_t lsbDelta = 0; + int32_t rsbDelta = 0; + }; + + //! Font system. + //! + //! \todo Add text elide functionality. + //! \todo Add support for gamma correction? + //! - https://www.freetype.org/freetype2/docs/text-rendering-general.html + //! \todo Use a text-shaping library. + class FTK_API_TYPE FontSystem : public ISystem + { + FTK_NON_COPYABLE(FontSystem); + + protected: + FontSystem(const std::shared_ptr&); + + public: + FTK_API virtual ~FontSystem(); + + //! Create a new system. + FTK_API static std::shared_ptr create( + const std::shared_ptr&); + + //! \name Fonts + ///@{ + + FTK_API std::vector getFonts() const; + FTK_API std::shared_ptr > observeFonts() const; + FTK_API bool addFont(const std::string& name, const std::string& fileName); + FTK_API bool addFont(const std::string& name, const uint8_t*, size_t); + FTK_API void removeFont(const std::string&); + + ///@} + + //! \name Information + ///@{ + + FTK_API size_t getGlyphCacheSize() const; + FTK_API float getGlyphCachePercentage() const; + FTK_API std::shared_ptr > observeGlyphCacheSize() const; + FTK_API std::shared_ptr > observeGlyphCachePercentage() const; + + ///@} + + //! \name Measure + ///@{ + + //! Get font metrics. + FTK_API FontMetrics getMetrics(const FontInfo&); + + //! Get the size of the given string. + FTK_API Size2I getSize( + const std::string&, + const FontInfo&, + int maxLineWidth = 0); + + //! Get the character boxes for the given string. + FTK_API std::vector getBoxes( + const std::string&, + const FontInfo&, + int maxLineWidth = 0); + + ///@} + + //! \name Glyphs + ///@{ + + //! Get the glyphs for the given string. + FTK_API std::vector > getGlyphs( + const std::string&, + const FontInfo&); + + ///@} + + FTK_API void tick() override; + FTK_API std::chrono::milliseconds getTickTime() const override; + + private: + FTK_PRIVATE(); + }; + + FTK_API void to_json(nlohmann::json&, const FontInfo&); + + FTK_API void from_json(const nlohmann::json&, FontInfo&); + + FTK_API std::ostream& operator << (std::ostream&, const FontInfo&); + + ///@} +} + +#include + diff --git a/third_party/tlRender-install-Release/include/ftk/Core/FontSystemInline.h b/third_party/tlRender-install-Release/include/ftk/Core/FontSystemInline.h new file mode 100644 index 00000000..2c8a16e8 --- /dev/null +++ b/third_party/tlRender-install-Release/include/ftk/Core/FontSystemInline.h @@ -0,0 +1,45 @@ +// SPDX-License-Identifier: BSD-3-Clause +// Copyright Contributors to the feather-tk project. + +namespace ftk +{ + inline FontInfo::FontInfo(const std::string& name, int size) : + name(name), + size(size) + {} + + inline bool FontInfo::operator == (const FontInfo & other) const + { + return name == other.name && size == other.size; + } + + inline bool FontInfo::operator != (const FontInfo& other) const + { + return !(*this == other); + } + + inline bool FontInfo::operator < (const FontInfo& other) const + { + return std::tie(name, size) < std::tie(other.name, other.size); + } + + inline GlyphInfo::GlyphInfo(uint32_t code, const FontInfo& fontInfo) : + code(code), + fontInfo(fontInfo) + {} + + inline bool GlyphInfo::operator == (const GlyphInfo & other) const + { + return code == other.code && fontInfo == other.fontInfo; + } + + inline bool GlyphInfo::operator != (const GlyphInfo& other) const + { + return !(*this == other); + } + + inline bool GlyphInfo::operator < (const GlyphInfo& other) const + { + return std::tie(code, fontInfo) < std::tie(other.code, other.fontInfo); + } +} diff --git a/third_party/tlRender-install-Release/include/ftk/Core/Format.h b/third_party/tlRender-install-Release/include/ftk/Core/Format.h new file mode 100644 index 00000000..0f26ebe8 --- /dev/null +++ b/third_party/tlRender-install-Release/include/ftk/Core/Format.h @@ -0,0 +1,69 @@ +// SPDX-License-Identifier: BSD-3-Clause +// Copyright Contributors to the feather-tk project. + +#include + +#include +#include +#include +#include + +namespace ftk +{ + //! \name String Formatting + ///@{ + + //! String formatting. + //! + //! Example: + //! std::string result = Format("Testing {2} {1} {0}").arg("one").arg("two").arg("three"); + //! + //! Results in the string "Testing three two one". + class FTK_API_TYPE Format + { + public: + FTK_API Format(const std::string&); + + //! \name Arguments + //! Replace the next argument in the string with the given value. + //! Arguments consist of an integer enclosed by curly brackets (eg., "{0}"). + //! The argument with the smallest integer will be replaced. The + //! object is returned so that you can chain calls together. + ///@{ + + FTK_API Format& arg(const std::string&, int width = 0); + FTK_API Format& arg(int, int width = 0, char pad = ' '); + FTK_API Format& arg(int8_t, int width = 0, char pad = ' '); + FTK_API Format& arg(uint8_t, int width = 0, char pad = ' '); + FTK_API Format& arg(int16_t, int width = 0, char pad = ' '); + FTK_API Format& arg(uint16_t, int width = 0, char pad = ' '); + FTK_API Format& arg(float, int precision = -1, int width = 0, char pad = ' '); + FTK_API Format& arg(double, int precision = -1, int width = 0, char pad = ' '); + template + Format& arg(T); + + ///@} + + //! Get the string. + const std::string& str() const; + + //! Does the formatting have an error? + bool hasError() const; + + //! Get the error. + const std::string& getError() const; + + operator std::string() const; + + private: + std::string _text; + std::string _error; + }; + + FTK_API std::ostream& operator << (std::ostream&, const Format&); + + ///@} +} + +#include + diff --git a/third_party/tlRender-install-Release/include/ftk/Core/FormatInline.h b/third_party/tlRender-install-Release/include/ftk/Core/FormatInline.h new file mode 100644 index 00000000..67651700 --- /dev/null +++ b/third_party/tlRender-install-Release/include/ftk/Core/FormatInline.h @@ -0,0 +1,35 @@ +// SPDX-License-Identifier: BSD-3-Clause +// Copyright Contributors to the feather-tk project. + +#include + +namespace ftk +{ + template + inline Format& Format::arg(T value) + { + std::stringstream ss; + ss << value; + return arg(ss.str()); + } + + inline const std::string& Format::str() const + { + return _text; + } + + inline bool Format::hasError() const + { + return _error.size() > 0; + } + + inline const std::string& Format::getError() const + { + return _error; + } + + inline Format::operator std::string() const + { + return _text; + } +} diff --git a/third_party/tlRender-install-Release/include/ftk/Core/IApp.h b/third_party/tlRender-install-Release/include/ftk/Core/IApp.h new file mode 100644 index 00000000..78de3813 --- /dev/null +++ b/third_party/tlRender-install-Release/include/ftk/Core/IApp.h @@ -0,0 +1,83 @@ +// SPDX-License-Identifier: BSD-3-Clause +// Copyright Contributors to the feather-tk project. + +#pragma once + +#include + +#include +#include +#include + +#if defined(_WINDOWS) +#define FTK_MAIN() \ + int wmain(int argc, wchar_t* argv[]) +#else // _WINDOWS +#define FTK_MAIN() \ + int main(int argc, char* argv[]) +#endif // _WINDOWS + +namespace ftk +{ + class Context; + class ICmdLineArg; + class ICmdLineOption; + + //! Convert command line arguments. + FTK_API std::vector convert(int argc, char** argv); + + //! Convert command line arguments. + FTK_API std::vector convert(int argc, wchar_t* argv[]); + + //! Base class for applications. + class FTK_API_TYPE IApp : public std::enable_shared_from_this + { + FTK_NON_COPYABLE(IApp); + + protected: + void _init( + const std::shared_ptr&, + const std::vector& argv, + const std::string& name, + const std::string& summary, + const std::vector >& = {}, + const std::vector >& = {}); + + IApp(); + + public: + FTK_API virtual ~IApp() = 0; + + //! Get the executable file name. + FTK_API const std::string& getExeName() const; + + //! Get the exit code. + FTK_API int getExit() const; + + //! Get the context. + FTK_API const std::shared_ptr& getContext() const; + + //! Get the application name. + FTK_API const std::string& getName() const; + + //! Get the application summary. + FTK_API const std::string& getSummary() const; + + //! Run the application. + FTK_API virtual void run() {} + + protected: + void _print(const std::string&); + void _printError(const std::string&); + + std::shared_ptr _context; + + private: + int _parseCmdLine(); + void _printCmdLineHelp(); + + void _print(const std::vector&); + + FTK_PRIVATE(); + }; +} diff --git a/third_party/tlRender-install-Release/include/ftk/Core/IBaseSystem.h b/third_party/tlRender-install-Release/include/ftk/Core/IBaseSystem.h new file mode 100644 index 00000000..f61c14d1 --- /dev/null +++ b/third_party/tlRender-install-Release/include/ftk/Core/IBaseSystem.h @@ -0,0 +1,48 @@ +// SPDX-License-Identifier: BSD-3-Clause +// Copyright Contributors to the feather-tk project. + +#pragma once + +#include + +#include +#include +#include + +namespace ftk +{ + class Context; + + //! Base class for systems. + class FTK_API_TYPE IBaseSystem : public std::enable_shared_from_this + { + FTK_NON_COPYABLE(IBaseSystem); + + protected: + IBaseSystem( + const std::shared_ptr&, + const std::string& name); + + public: + FTK_API virtual ~IBaseSystem() = 0; + + //! Get the context. + std::shared_ptr getContext() const; + + //! Get the system name. + const std::string& getName() const; + + //! Tick the system. + FTK_API virtual void tick(); + + //! Get the system tick time interval. + FTK_API virtual std::chrono::milliseconds getTickTime() const; + + protected: + std::weak_ptr _context; + std::string _name; + }; +} + +#include + diff --git a/third_party/tlRender-install-Release/include/ftk/Core/IBaseSystemInline.h b/third_party/tlRender-install-Release/include/ftk/Core/IBaseSystemInline.h new file mode 100644 index 00000000..4ef67e72 --- /dev/null +++ b/third_party/tlRender-install-Release/include/ftk/Core/IBaseSystemInline.h @@ -0,0 +1,15 @@ +// SPDX-License-Identifier: BSD-3-Clause +// Copyright Contributors to the feather-tk project. + +namespace ftk +{ + inline std::shared_ptr IBaseSystem::getContext() const + { + return _context.lock(); + } + + inline const std::string& IBaseSystem::getName() const + { + return _name; + } +} diff --git a/third_party/tlRender-install-Release/include/ftk/Core/IRender.h b/third_party/tlRender-install-Release/include/ftk/Core/IRender.h new file mode 100644 index 00000000..3153087b --- /dev/null +++ b/third_party/tlRender-install-Release/include/ftk/Core/IRender.h @@ -0,0 +1,214 @@ +// SPDX-License-Identifier: BSD-3-Clause +// Copyright Contributors to the feather-tk project. + +#pragma once + +#include +#include +#include +#include +#include + +#include +#include + +namespace ftk +{ + class FontSystem; + class LogSystem; + + //! \name Rendering + ///@{ + + //! Render diagnostics. + struct FTK_API_TYPE RenderDiag + { + int64_t time = 0; + int64_t triangles = 0; + int64_t textures = 0; + int64_t glyphs = 0; + }; + + //! Base class for renderers. + class FTK_API_TYPE IRender : public std::enable_shared_from_this + { + FTK_NON_COPYABLE(IRender); + + protected: + void _init( + const std::shared_ptr&, + const std::shared_ptr&); + + IRender() = default; + + public: + FTK_API virtual ~IRender() = 0; + + //! Begin a render. + FTK_API virtual void begin( + const Size2I&, + const RenderOptions& = RenderOptions()) = 0; + + //! Finish a render. + FTK_API virtual void end() = 0; + + //! Get the render size. + FTK_API virtual Size2I getRenderSize() const = 0; + + //! Set the render size. + FTK_API virtual void setRenderSize(const Size2I&) = 0; + + //! Get the render options. + FTK_API virtual RenderOptions getRenderOptions() const = 0; + + //! Get the viewport. + FTK_API virtual Box2I getViewport() const = 0; + + //! Set the viewport. + FTK_API virtual void setViewport(const Box2I&) = 0; + + //! Clear the viewport. + FTK_API virtual void clearViewport(const Color4F&) = 0; + + //! Get whether the clipping rectangle is enabled. + FTK_API virtual bool getClipRectEnabled() const = 0; + + //! Set whether the clipping rectangle is enabled. + FTK_API virtual void setClipRectEnabled(bool) = 0; + + //! Get the clipping rectangle. + FTK_API virtual Box2I getClipRect() const = 0; + + //! Set the clipping rectangle. + FTK_API virtual void setClipRect(const Box2I&) = 0; + + //! Get the transformation matrix. + FTK_API virtual M44F getTransform() const = 0; + + //! Set the transformation matrix. + FTK_API virtual void setTransform(const M44F&) = 0; + + //! Draw a filled rectangle. + FTK_API virtual void drawRect( + const Box2F&, + const Color4F&) = 0; + + //! Draw a filled rectangle. + FTK_API virtual void drawRect( + const Box2I&, + const Color4F&); + + //! Draw filled rectangles. + FTK_API virtual void drawRects( + const std::vector&, + const Color4F&) = 0; + + //! Draw filled rectangles. + FTK_API virtual void drawRects( + const std::vector&, + const Color4F&); + + //! Draw a line. + FTK_API virtual void drawLine( + const V2F&, + const V2F&, + const Color4F&, + const LineOptions& = LineOptions()) = 0; + + //! Draw a line. + FTK_API virtual void drawLine( + const V2I&, + const V2I&, + const Color4F&, + const LineOptions& = LineOptions()); + + //! Draw multiple lines. + FTK_API virtual void drawLines( + const std::vector >&, + const Color4F&, + const LineOptions& = LineOptions()) = 0; + + //! Draw multiple lines. + FTK_API virtual void drawLines( + const std::vector >&, + const Color4F&, + const LineOptions& = LineOptions()); + + //! Draw a triangle mesh. + FTK_API virtual void drawMesh( + const TriMesh2F&, + const Color4F& = Color4F(1.F, 1.F, 1.F, 1.F), + const V2F& pos = V2F()) = 0; + + //! Draw a triangle mesh with vertex color information. + FTK_API virtual void drawColorMesh( + const TriMesh2F&, + const Color4F& = Color4F(1.F, 1.F, 1.F, 1.F), + const V2F& pos = V2F()) = 0; + + //! Draw a texture. + FTK_API virtual void drawTexture( + unsigned int, + const Box2I&, + bool mirrorV = false, + const Color4F& = Color4F(1.F, 1.F, 1.F), + AlphaBlend = AlphaBlend::Straight) = 0; + + //! Draw text. + FTK_API virtual void drawText( + const std::vector >&, + const FontMetrics&, + const V2F& position, + const Color4F& = Color4F(1.F, 1.F, 1.F, 1.F)) = 0; + + //! Draw text. + FTK_API virtual void drawText( + const std::vector >&, + const FontMetrics&, + const V2I& position, + const Color4F& = Color4F(1.F, 1.F, 1.F, 1.F)); + + //! Draw an image. + FTK_API virtual void drawImage( + const std::shared_ptr&, + const TriMesh2F&, + const Color4F& = Color4F(1.F, 1.F, 1.F, 1.F), + const ImageOptions& = ImageOptions()) = 0; + + //! Draw an image. + FTK_API virtual void drawImage( + const std::shared_ptr&, + const Box2F&, + const Color4F& = Color4F(1.F, 1.F, 1.F, 1.F), + const ImageOptions& = ImageOptions()) = 0; + + //! Draw an image. + FTK_API virtual void drawImage( + const std::shared_ptr&, + const Box2I&, + const Color4F& = Color4F(1.F, 1.F, 1.F, 1.F), + const ImageOptions& = ImageOptions()); + + //! Get diagnostics for the last render. + FTK_API virtual RenderDiag getDiag() const = 0; + + protected: + std::weak_ptr _logSystem; + std::weak_ptr _fontSystem; + }; + + //! Base class for render factories. + class FTK_API_TYPE IRenderFactory + { + public: + FTK_API virtual ~IRenderFactory() = 0; + + //! Create a new renderer. + FTK_API virtual std::shared_ptr createRender( + const std::shared_ptr&, + const std::shared_ptr&) = 0; + }; + + ///@} +} + diff --git a/third_party/tlRender-install-Release/include/ftk/Core/ISystem.h b/third_party/tlRender-install-Release/include/ftk/Core/ISystem.h new file mode 100644 index 00000000..b4acdcfa --- /dev/null +++ b/third_party/tlRender-install-Release/include/ftk/Core/ISystem.h @@ -0,0 +1,28 @@ +// SPDX-License-Identifier: BSD-3-Clause +// Copyright Contributors to the tlRender project. + +#pragma once + +#include +#include + +namespace ftk +{ + //! Base class for systems. + class FTK_API_TYPE ISystem : public IBaseSystem + { + protected: + ISystem( + const std::shared_ptr&, + const std::string& name); + + public: + FTK_API virtual ~ISystem(); + + protected: + FTK_API void _log(const std::string&, LogType = LogType::Message); + + private: + std::weak_ptr _logSystem; + }; +} diff --git a/third_party/tlRender-install-Release/include/ftk/Core/Image.h b/third_party/tlRender-install-Release/include/ftk/Core/Image.h new file mode 100644 index 00000000..865aed2e --- /dev/null +++ b/third_party/tlRender-install-Release/include/ftk/Core/Image.h @@ -0,0 +1,246 @@ +// SPDX-License-Identifier: BSD-3-Clause +// Copyright Contributors to the feather-tk project. + +#pragma once + +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +namespace ftk +{ + //! \name Images + ///@{ + + //! Image types. + enum class FTK_API_TYPE ImageType + { + None, + + L_U8, + L_U16, + L_U32, + L_F16, + L_F32, + + LA_U8, + LA_U16, + LA_U32, + LA_F16, + LA_F32, + + RGB_U8, + RGB_U10, + RGB_U16, + RGB_U32, + RGB_F16, + RGB_F32, + + RGBA_U8, + RGBA_U16, + RGBA_U32, + RGBA_F16, + RGBA_F32, + + YUV_420P_U8, + YUV_422P_U8, + YUV_444P_U8, + + YUV_420P_U16, + YUV_422P_U16, + YUV_444P_U16, + + ARGB_4444_Premult, + + Count, + First = None + }; + FTK_ENUM(ImageType); + + //! Get the number of channels for the given image type. + FTK_API int getChannelCount(ImageType); + + //! Get the bit-depth for the given image type. + FTK_API int getBitDepth(ImageType); + + //! Video levels. + enum class FTK_API_TYPE VideoLevels + { + FullRange, + LegalRange, + + Count, + First = FullRange + }; + FTK_ENUM(VideoLevels); + + //! YUV coefficients. + enum class FTK_API_TYPE YUVCoefficients + { + REC709, + BT2020, + + Count, + First = REC709 + }; + FTK_ENUM(YUVCoefficients); + + //! Get YUV coefficients. + FTK_API V4F getYUVCoefficients(YUVCoefficients); + + //! Image mirroring. + struct FTK_API_TYPE ImageMirror + { + ImageMirror() = default; + constexpr ImageMirror(bool x, bool y); + + bool x = false; + bool y = false; + + constexpr bool operator == (const ImageMirror&) const; + constexpr bool operator != (const ImageMirror&) const; + }; + + //! Image data layout. + struct FTK_API_TYPE ImageLayout + { + ImageLayout() = default; + ImageLayout( + const ImageMirror& mirrot, + int alignment = 1, + Endian endian = getEndian()); + + ImageMirror mirror; + int alignment = 1; + Endian endian = getEndian(); + + constexpr bool operator == (const ImageLayout&) const; + constexpr bool operator != (const ImageLayout&) const; + }; + + //! Image information. + struct FTK_API_TYPE ImageInfo + { + ImageInfo() = default; + ImageInfo(const Size2I&, ImageType); + ImageInfo(int w, int h, ImageType); + + std::string name = "Default"; + Size2I size; + ImageType type = ImageType::None; + float pixelAspectRatio = 1.F; + VideoLevels videoLevels = VideoLevels::FullRange; + YUVCoefficients yuvCoefficients = YUVCoefficients::REC709; + ImageLayout layout; + + //! Is the information valid? + bool isValid() const; + + //! Get the aspect ratio. + float getAspect() const; + + //! Get the number of bytes used to store an image. + size_t getByteCount() const; + + bool operator == (const ImageInfo&) const; + bool operator != (const ImageInfo&) const; + }; + + //! Get an image information label. + std::string getLabel(const ImageInfo&); + + //! Image tags. + typedef std::map ImageTags; + + //! Image. + class FTK_API_TYPE Image : public std::enable_shared_from_this + { + FTK_NON_COPYABLE(Image); + + protected: + Image(const ImageInfo&, uint8_t* externalData = nullptr); + + public: + FTK_API ~Image(); + + //! Create a new image. + FTK_API static std::shared_ptr create(const ImageInfo&); + + //! Create a new image. + FTK_API static std::shared_ptr create(const ImageInfo&, uint8_t* externalData); + + //! Create a new image. + FTK_API static std::shared_ptr create(const Size2I&, ImageType); + + //! Create a new image. + FTK_API static std::shared_ptr create(int w, int h, ImageType); + + //! Get the image information. + const ImageInfo& getInfo() const; + + //! Get the image size. + const Size2I& getSize() const; + + //! Get the image width. + int getWidth() const; + + //! Get the image height. + int getHeight() const; + + //! Get the aspect ratio. + float getAspect() const; + + //! Get the image type. + ImageType getType() const; + + //! Is the image valid? + bool isValid() const; + + //! Get the image tags. + const ImageTags& getTags() const; + + //! Set the image tags. + FTK_API void setTags(const ImageTags&); + + //! Get the number of bytes used to store the image data. + size_t getByteCount() const; + + //! Get the image data. + const uint8_t* getData() const; + + //! Get the image data. + uint8_t* getData(); + + //! Zero the image data. + FTK_API void zero(); + + //! Get the number of objects currenty instantiated. + FTK_API static size_t getObjectCount(); + + //! Get the total number of bytes currently used. + FTK_API static size_t getTotalByteCount(); + + private: + ImageInfo _info; + ImageTags _tags; + size_t _byteCount = 0; + uint8_t* _data = nullptr; + bool _externalData = false; + }; + + FTK_API void to_json(nlohmann::json&, const ImageMirror&); + + FTK_API void from_json(const nlohmann::json&, ImageMirror&); + + ///@} +} + +#include + diff --git a/third_party/tlRender-install-Release/include/ftk/Core/ImageIO.h b/third_party/tlRender-install-Release/include/ftk/Core/ImageIO.h new file mode 100644 index 00000000..f8124d18 --- /dev/null +++ b/third_party/tlRender-install-Release/include/ftk/Core/ImageIO.h @@ -0,0 +1,147 @@ +// SPDX-License-Identifier: BSD-3-Clause +// Copyright Contributors to the feather-tk project. + +#pragma once + +#include +#include +#include + +#include + +namespace ftk +{ + //! \name Image I/O + ///@{ + + //! Image I/O options. + typedef std::map ImageIOOptions; + + //! Merge image I/O options. + FTK_API ImageIOOptions merge(const ImageIOOptions&, const ImageIOOptions&); + + //! Base class for image readers. + class FTK_API_TYPE IImageReader + { + public: + FTK_API IImageReader( + const std::filesystem::path&, + const MemFile*, + const ImageIOOptions&); + + FTK_API virtual ~IImageReader() = 0; + + //! Get information about the image. + FTK_API virtual const ImageInfo& getInfo() const = 0; + + //! Read the image. + FTK_API virtual std::shared_ptr read() = 0; + + protected: + std::filesystem::path _path; + }; + + //! Base class for image writers. + class FTK_API_TYPE IImageWriter + { + public: + FTK_API IImageWriter( + const std::filesystem::path&, + const ImageIOOptions&); + + FTK_API virtual ~IImageWriter() = 0; + + //! Write the image. + FTK_API virtual void write(const std::shared_ptr&) = 0; + + protected: + std::filesystem::path _path; + }; + + //! Base class for image I/O plugins. + class FTK_API_TYPE IImagePlugin : std::enable_shared_from_this + { + FTK_NON_COPYABLE(IImagePlugin); + + protected: + IImagePlugin( + const std::string& name, + const std::vector& exts); + + public: + FTK_API virtual ~IImagePlugin() = 0; + + FTK_API const std::string& getName() const; + + FTK_API const std::vector& getExts() const; + + FTK_API virtual bool canRead( + const std::filesystem::path&, + const ImageIOOptions& = ImageIOOptions()); + + FTK_API virtual std::shared_ptr read( + const std::filesystem::path&, + const ImageIOOptions& = ImageIOOptions()); + + FTK_API virtual std::shared_ptr read( + const std::filesystem::path&, + const MemFile&, + const ImageIOOptions& = ImageIOOptions()); + + FTK_API virtual bool canWrite( + const std::filesystem::path&, + const ImageInfo&, + const ImageIOOptions& = ImageIOOptions()); + + FTK_API virtual std::shared_ptr write( + const std::filesystem::path&, + const ImageInfo&, + const ImageIOOptions& = ImageIOOptions()); + + private: + std::string _name; + std::vector _exts; + }; + + //! Image I/O system. + class FTK_API_TYPE ImageIO : public ISystem + { + protected: + ImageIO(const std::shared_ptr&); + + public: + FTK_API virtual ~ImageIO(); + + //! Create a new system. + FTK_API static std::shared_ptr create(const std::shared_ptr&); + + //! Get the plugins. + FTK_API const std::list >& getPlugins() const; + + //! Add a plugin. + FTK_API void addPlugin(const std::shared_ptr&); + + //! Get an image reader. + FTK_API std::shared_ptr read( + const std::filesystem::path&, + const ImageIOOptions& = ImageIOOptions()); + + //! Get an image reader. + FTK_API std::shared_ptr read( + const std::filesystem::path&, + const MemFile&, + const ImageIOOptions& = ImageIOOptions()); + + //! Get an image writer. + FTK_API std::shared_ptr write( + const std::filesystem::path&, + const ImageInfo&, + const ImageIOOptions& = ImageIOOptions()); + + private: + std::list > _plugins; + }; + + ///@} +} + diff --git a/third_party/tlRender-install-Release/include/ftk/Core/ImageInline.h b/third_party/tlRender-install-Release/include/ftk/Core/ImageInline.h new file mode 100644 index 00000000..7a1aa4d1 --- /dev/null +++ b/third_party/tlRender-install-Release/include/ftk/Core/ImageInline.h @@ -0,0 +1,134 @@ +// SPDX-License-Identifier: BSD-3-Clause +// Copyright Contributors to the feather-tk project. + +namespace ftk +{ + constexpr ImageMirror::ImageMirror(bool x, bool y) : + x(x), + y(y) + {} + + constexpr bool ImageMirror::operator == (const ImageMirror& other) const + { + return other.x == x && other.y == y; + } + + constexpr bool ImageMirror::operator != (const ImageMirror& other) const + { + return !(other == *this); + } + + inline ImageLayout::ImageLayout( + const ImageMirror& mirror, + int alignment, + Endian endian) : + mirror(mirror), + alignment(alignment), + endian(endian) + {} + + constexpr bool ImageLayout::operator == (const ImageLayout & other) const + { + return + other.mirror == mirror && + other.alignment == alignment && + other.endian == endian; + } + + constexpr bool ImageLayout::operator != (const ImageLayout & other) const + { + return !(other == *this); + } + + inline ImageInfo::ImageInfo(const Size2I& size, ImageType type) : + size(size), + type(type) + {} + + inline ImageInfo::ImageInfo(int w, int h, ImageType type) : + size(w, h), + type(type) + {} + + inline bool ImageInfo::isValid() const + { + return size.isValid() && type != ImageType::None; + } + + inline float ImageInfo::getAspect() const + { + return size.h > 0 ? (size.w / static_cast(size.h) * pixelAspectRatio) : 0; + } + + inline bool ImageInfo::operator == (const ImageInfo& other) const + { + return + name == other.name && + size == other.size && + type == other.type && + pixelAspectRatio == other.pixelAspectRatio && + videoLevels == other.videoLevels && + yuvCoefficients == other.yuvCoefficients && + layout == other.layout; + } + + inline bool ImageInfo::operator != (const ImageInfo& other) const + { + return !(*this == other); + } + + inline const ImageInfo& Image::getInfo() const + { + return _info; + } + + inline const Size2I& Image::getSize() const + { + return _info.size; + } + + inline int Image::getWidth() const + { + return _info.size.w; + } + + inline int Image::getHeight() const + { + return _info.size.h; + } + + inline float Image::getAspect() const + { + return _info.getAspect(); + } + + inline ImageType Image::getType() const + { + return _info.type; + } + + inline bool Image::isValid() const + { + return _info.isValid(); + } + + inline const ImageTags& Image::getTags() const + { + return _tags; + } + + inline size_t Image::getByteCount() const + { + return _byteCount; + } + + inline const uint8_t* Image::getData() const + { + return _data; + } + + inline uint8_t* Image::getData() + { + return _data; + } +} diff --git a/third_party/tlRender-install-Release/include/ftk/Core/LRUCache.h b/third_party/tlRender-install-Release/include/ftk/Core/LRUCache.h new file mode 100644 index 00000000..8ccc7669 --- /dev/null +++ b/third_party/tlRender-install-Release/include/ftk/Core/LRUCache.h @@ -0,0 +1,55 @@ +// SPDX-License-Identifier: BSD-3-Clause +// Copyright Contributors to the feather-tk project. + +#pragma once + +#include +#include +#include + +namespace ftk +{ + //! Least recently used (LRU) cache. + template + class LRUCache + { + public: + //! \name Size + ///@{ + + size_t getMax() const; + size_t getSize() const; + size_t getCount() const; + float getPercentage() const; + + void setMax(size_t); + + ///@} + + //! \name Contents + ///@{ + + bool contains(const T& key) const; + bool get(const T& key, U& value); + bool touch(const T& key); + + void add(const T& key, const U& value, size_t size = 1); + void remove(const T& key); + void clear(); + + std::vector getKeys() const; + std::vector getValues() const; + + ///@} + + private: + void _maxUpdate(); + + size_t _max = 10000; + std::map > _map; + std::map _counts; + int64_t _counter = 0; + }; +} + +#include diff --git a/third_party/tlRender-install-Release/include/ftk/Core/LRUCacheInline.h b/third_party/tlRender-install-Release/include/ftk/Core/LRUCacheInline.h new file mode 100644 index 00000000..820d66ce --- /dev/null +++ b/third_party/tlRender-install-Release/include/ftk/Core/LRUCacheInline.h @@ -0,0 +1,166 @@ +// SPDX-License-Identifier: BSD-3-Clause +// Copyright Contributors to the feather-tk project. + +#include + +namespace ftk +{ + template + inline std::size_t LRUCache::getMax() const + { + return _max; + } + + template + inline std::size_t LRUCache::getSize() const + { + size_t out = 0; + for (const auto& i : _map) + { + out += i.second.second; + } + return out; + } + + template + inline std::size_t LRUCache::getCount() const + { + return _map.size(); + } + + template + inline float LRUCache::getPercentage() const + { + return getSize() / static_cast(_max) * 100.F; + } + + template + inline void LRUCache::setMax(std::size_t value) + { + if (value == _max) + return; + _max = value; + _maxUpdate(); + } + + template + inline bool LRUCache::contains(const T& key) const + { + return _map.find(key) != _map.end(); + } + + template + inline bool LRUCache::get(const T& key, U& value) + { + const auto i = _map.find(key); + if (i != _map.end()) + { + value = i->second.first; + auto j = _counts.find(key); + if (j != _counts.end()) + { + ++_counter; + j->second = _counter; + } + } + return i != _map.end(); + } + + template + inline bool LRUCache::touch(const T& key) + { + const auto i = _map.find(key); + if (i != _map.end()) + { + auto j = _counts.find(key); + if (j != _counts.end()) + { + ++_counter; + j->second = _counter; + } + } + return i != _map.end(); + } + + template + inline void LRUCache::add(const T& key, const U& value, size_t size) + { + _map[key] = std::make_pair(value, size); + ++_counter; + _counts[key] = _counter; + _maxUpdate(); + } + + template + inline void LRUCache::remove(const T& key) + { + const auto i = _map.find(key); + if (i != _map.end()) + { + _map.erase(i); + } + const auto j = _counts.find(key); + if (j != _counts.end()) + { + _counts.erase(j); + } + _maxUpdate(); + } + + template + inline void LRUCache::clear() + { + _map.clear(); + } + + template + inline std::vector LRUCache::getKeys() const + { + std::vector out; + for (const auto& i : _map) + { + out.push_back(i.first); + } + return out; + } + + template + inline std::vector LRUCache::getValues() const + { + std::vector out; + for (const auto& i : _map) + { + out.push_back(i.second.first); + } + return out; + } + + template + inline void LRUCache::_maxUpdate() + { + size_t size = getSize(); + if (size > _max) + { + std::map sorted; + for (const auto& i : _counts) + { + sorted[i.second] = i.first; + } + while (getSize() > _max) + { + auto begin = sorted.begin(); + auto i = _map.find(begin->second); + if (i != _map.end()) + { + _map.erase(i); + } + auto j = _counts.find(begin->second); + if (j != _counts.end()) + { + _counts.erase(j); + } + sorted.erase(begin); + } + } + } +} diff --git a/third_party/tlRender-install-Release/include/ftk/Core/LogSystem.h b/third_party/tlRender-install-Release/include/ftk/Core/LogSystem.h new file mode 100644 index 00000000..037c7385 --- /dev/null +++ b/third_party/tlRender-install-Release/include/ftk/Core/LogSystem.h @@ -0,0 +1,72 @@ +// SPDX-License-Identifier: BSD-3-Clause +// Copyright Contributors to the feather-tk project. + +#pragma once + +#include +#include + +#include + +namespace ftk +{ + //! \name Log System + ///@{ + + //! Log types. + enum class FTK_API_TYPE LogType + { + Message, + Warning, + Error, + + Count, + First = Message + }; + FTK_ENUM(LogType); + + //! Log item. + struct FTK_API_TYPE LogItem + { + float time = 0.F; + std::string prefix; + std::string message; + LogType type = LogType::Message; + + bool operator == (const LogItem&) const; + bool operator != (const LogItem&) const; + }; + + //! Get a log item label. + FTK_API std::string getLabel(const LogItem&, bool brief = false); + + //! Log system. + class FTK_API_TYPE LogSystem : public IBaseSystem + { + protected: + LogSystem(const std::shared_ptr&); + + public: + FTK_API virtual ~LogSystem(); + + //! Create a new system. + FTK_API static std::shared_ptr create(const std::shared_ptr&); + + //! Print to the log. + FTK_API void print( + const std::string& prefix, + const std::string&, + LogType = LogType::Message); + + //! Observe the log items. + FTK_API std::shared_ptr > observeLogItems() const; + + FTK_API void tick() override; + FTK_API std::chrono::milliseconds getTickTime() const override; + + private: + FTK_PRIVATE(); + }; + + ///@} +} diff --git a/third_party/tlRender-install-Release/include/ftk/Core/Math.h b/third_party/tlRender-install-Release/include/ftk/Core/Math.h new file mode 100644 index 00000000..a680ecf4 --- /dev/null +++ b/third_party/tlRender-install-Release/include/ftk/Core/Math.h @@ -0,0 +1,52 @@ +// SPDX-License-Identifier: BSD-3-Clause +// Copyright Contributors to the feather-tk project. + +#pragma once + +#include + +#include + +namespace ftk +{ + //! \name Math + ///@{ + + //! Approximate value of PI. + constexpr float pi = 3.14159265359F; + + //! Approximate value of PI times two. + constexpr float pi2 = pi * 2.F; + + //! Convert degrees to radians. + constexpr float deg2rad(float); + + //! Convert radians to degrees. + constexpr float rad2deg(float); + + //! Clamp a value. + template + constexpr T clamp(T value, T min, T max); + + //! Linear interpolation. + template + constexpr T lerp(U value, T min, T max); + + //! Smooth step function. + template + constexpr T smoothStep(T value, T min, T max); + + //! Count the number of digits. + FTK_API size_t digits(int); + + //! Fuzzy double comparison. + FTK_API bool fuzzyCompare(double a, double b, double e = .1e-9); + + //! Fuzzy float comparison. + FTK_API bool fuzzyCompare(float a, float b, float e = .1e-6F); + + ///@} +} + +#include + diff --git a/third_party/tlRender-install-Release/include/ftk/Core/MathInline.h b/third_party/tlRender-install-Release/include/ftk/Core/MathInline.h new file mode 100644 index 00000000..3be1cdfc --- /dev/null +++ b/third_party/tlRender-install-Release/include/ftk/Core/MathInline.h @@ -0,0 +1,39 @@ +// SPDX-License-Identifier: BSD-3-Clause +// Copyright Contributors to the feather-tk project. + +#include + +namespace ftk +{ + constexpr float deg2rad(float value) + { + return value / 360.F * pi2; + } + + constexpr float rad2deg(float value) + { + return value / pi2 * 360.F; + } + + template + constexpr T clamp(T value, T min, T max) + { + return std::min(std::max(value, min), max); + } + + template + constexpr T lerp(U value, T min, T max) + { + return min + T(value * (max - min)); + } + + constexpr float smoothStep(float value, float min, float max) + { + return lerp(value * value * (3.F - (2.F * value)), min, max); + } + + constexpr double smoothStep(double value, double min, double max) + { + return lerp(value * value * (3. - (2. * value)), min, max); + } +} diff --git a/third_party/tlRender-install-Release/include/ftk/Core/Matrix.h b/third_party/tlRender-install-Release/include/ftk/Core/Matrix.h new file mode 100644 index 00000000..8de90528 --- /dev/null +++ b/third_party/tlRender-install-Release/include/ftk/Core/Matrix.h @@ -0,0 +1,150 @@ +// SPDX-License-Identifier: BSD-3-Clause +// Copyright Contributors to the feather-tk project. + +#pragma once + +#include + +namespace ftk +{ + //! \name Matrices + ///@{ + + //! Base class for matrices. Matrix elements are row-major. + template + class Matrix + { + public: + constexpr Matrix(); + + constexpr T get(int row, int column) const; + constexpr void set(int row, int column, T); + + constexpr T operator [] (int) const; + constexpr T& operator [] (int); + + constexpr const T* data() const; + constexpr T* data(); + + private: + std::array _e; + }; + + //! 3x3 matrix. + template + class Matrix<3, 3, T> + { + public: + constexpr Matrix(); + constexpr Matrix( + T e_0_0, T e_0_1, T e_0_2, + T e_1_0, T e_1_1, T e_1_2, + T e_2_0, T e_2_1, T e_2_2); + + constexpr T get(int row, int column) const; + constexpr void set(int row, int column, T); + + constexpr T operator [] (int) const; + constexpr T& operator [] (int); + + constexpr const T* data() const; + constexpr T* data(); + + private: + std::array _e; + }; + + //! 4x4 matrix. + template + class Matrix<4, 4, T> + { + public: + constexpr Matrix(); + constexpr Matrix( + T e_0_0, T e_0_1, T e_0_2, T e_0_3, + T e_1_0, T e_1_1, T e_1_2, T e_1_3, + T e_2_0, T e_2_1, T e_2_2, T e_2_3, + T e_3_0, T e_3_1, T e_3_2, T e_3_3); + + constexpr T get(int row, int column) const; + constexpr void set(int row, int column, T); + + constexpr T operator [] (int) const; + constexpr T& operator [] (int); + + constexpr const T* data() const; + constexpr T* data(); + + private: + std::array _e; + }; + + typedef Matrix<3, 3, float> M33F; + typedef Matrix<4, 4, float> M44F; + + //! Create a translation matrix. + template + constexpr Matrix<3, 3, T> translate(const Vector<2, T>&); + + //! Create a translation matrix. + template + constexpr Matrix<4, 4, T> translate(const Vector<3, T>&); + + //! Create a X rotation matrix. + template + Matrix<4, 4, T> rotateX(T); + + //! Create a Y rotation matrix. + template + Matrix<4, 4, T> rotateY(T); + + //! Create a Z rotation matrix. + template + Matrix<4, 4, T> rotateZ(T); + + //! Create a scale matrix. + template + constexpr Matrix<4, 4, T> scale(const Vector<3, T>&); + + //! Create an orthographic matrix. + template + constexpr Matrix<4, 4, T> ortho(T left, T right, T bottom, T top, T nearClip, T farClip); + + //! Create a perspective matrix. + template + constexpr Matrix<4, 4, T> perspective(T fov, T aspect, T nearClip, T farClip); + + //! Invert a matrix. + template + bool invert(const Matrix<4, 4, T>&, Matrix<4, 4, T>&); + + FTK_API void to_json(nlohmann::json&, const M33F&); + FTK_API void to_json(nlohmann::json&, const M44F&); + + FTK_API void from_json(const nlohmann::json&, M33F&); + FTK_API void from_json(const nlohmann::json&, M44F&); + + template + Matrix<3, 3, T> operator * (const Matrix<3, 3, T>&, const Matrix<3, 3, T>&); + template + Vector<2, T> operator * (const Matrix<3, 3, T>&, const Vector<2, T>&); + template + Matrix<4, 4, T> operator * (const Matrix<4, 4, T>&, const Matrix<4, 4, T>&); + template + Vector<3, T> operator * (const Matrix<4, 4, T>&, const Vector<3, T>&); + template + Vector<4, T> operator * (const Matrix<4, 4, T>&, const Vector<4, T>&); + + template + constexpr bool operator == (const Matrix&, const Matrix&); + template + constexpr bool operator != (const Matrix&, const Matrix&); + + template + std::ostream& operator << (std::ostream&, const Matrix&); + + ///@} +} + +#include + diff --git a/third_party/tlRender-install-Release/include/ftk/Core/MatrixInline.h b/third_party/tlRender-install-Release/include/ftk/Core/MatrixInline.h new file mode 100644 index 00000000..1846f46a --- /dev/null +++ b/third_party/tlRender-install-Release/include/ftk/Core/MatrixInline.h @@ -0,0 +1,521 @@ +// SPDX-License-Identifier: BSD-3-Clause +// Copyright Contributors to the feather-tk project. + +#include + +#include + +namespace ftk +{ + template + constexpr Matrix::Matrix() + { + for (int r = 0; r < R; ++r) + { + for (int c = 0; c < C; ++c) + { + _e[r * C + c] = T(0); + } + } + } + + template + constexpr T Matrix::get(int row, int column) const + { + return _e[row * C + column]; + } + + template + constexpr void Matrix::set(int row, int column, T v) + { + _e[row * C + column] = v; + } + + template + constexpr T Matrix::operator [] (int index) const + { + return _e[index]; + } + + template + constexpr T& Matrix::operator [] (int index) + { + return _e[index]; + } + + template + constexpr const T* Matrix::data() const + { + return _e.data(); + } + + template + constexpr T* Matrix::data() + { + return _e.data(); + } + + template + constexpr Matrix<3, 3, T>::Matrix() : + _e({ + T(1), T(0), T(0), + T(0), T(1), T(0), + T(0), T(0), T(1) + }) + {} + + template + constexpr Matrix<3, 3, T>::Matrix( + T e_0_0, T e_0_1, T e_0_2, + T e_1_0, T e_1_1, T e_1_2, + T e_2_0, T e_2_1, T e_2_2) : + _e({ + e_0_0, e_0_1, e_0_2, + e_1_0, e_1_1, e_1_2, + e_2_0, e_2_1, e_2_2 + }) + {} + + template + constexpr T Matrix<3, 3, T>::get(int row, int column) const + { + return _e[row * 3 + column]; + } + + template + constexpr void Matrix<3, 3, T>::set(int row, int column, T v) + { + _e[row * 3 + column] = v; + } + + template + constexpr T Matrix<3, 3, T>::operator [] (int index) const + { + return _e[index]; + } + + template + constexpr T& Matrix<3, 3, T>::operator [] (int index) + { + return _e[index]; + } + + template + constexpr const T* Matrix<3, 3, T>::data() const + { + return _e.data(); + } + + template + constexpr T* Matrix<3, 3, T>::data() + { + return _e.data(); + } + + template + constexpr Matrix<4, 4, T>::Matrix() : + _e({ + T(1), T(0), T(0), T(0), + T(0), T(1), T(0), T(0), + T(0), T(0), T(1), T(0), + T(0), T(0), T(0), T(1) + }) + {} + + template + constexpr Matrix<4, 4, T>::Matrix( + T e_0_0, T e_0_1, T e_0_2, T e_0_3, + T e_1_0, T e_1_1, T e_1_2, T e_1_3, + T e_2_0, T e_2_1, T e_2_2, T e_2_3, + T e_3_0, T e_3_1, T e_3_2, T e_3_3) : + _e({ + e_0_0, e_0_1, e_0_2, e_0_3, + e_1_0, e_1_1, e_1_2, e_1_3, + e_2_0, e_2_1, e_2_2, e_2_3, + e_3_0, e_3_1, e_3_2, e_3_3 + }) + {} + + template + constexpr T Matrix<4, 4, T>::get(int row, int column) const + { + return _e[row * 4 + column]; + } + + template + constexpr void Matrix<4, 4, T>::set(int row, int column, T v) + { + _e[row * 4 + column] = v; + } + + template + constexpr T Matrix<4, 4, T>::operator [] (int index) const + { + return _e[index]; + } + + template + constexpr T& Matrix<4, 4, T>::operator [] (int index) + { + return _e[index]; + } + + template + constexpr const T* Matrix<4, 4, T>::data() const + { + return _e.data(); + } + + template + constexpr T* Matrix<4, 4, T>::data() + { + return _e.data(); + } + + template + constexpr Matrix<3, 3, T> translate(const Vector<2, T>& value) + { + return Matrix<3, 3, T>( + T(1), T(0), value.x, + T(0), T(1), value.y, + T(0), T(0), T(1)); + } + + template + constexpr Matrix<4, 4, T> translate(const Vector<3, T>& value) + { + return Matrix<4, 4, T>( + T(1), T(0), T(0), value.x, + T(0), T(1), T(0), value.y, + T(0), T(0), T(1), value.z, + T(0), T(0), T(0), T(1)); + } + + template + inline Matrix<4, 4, T> rotateX(T angle) + { + const T a = std::cos(deg2rad(angle)); + const T b = std::sin(deg2rad(angle)); + return Matrix<4, 4, T>( + T(1), T(0), T(0), T(0), + T(0), a, -b, T(0), + T(0), b, a, T(0), + T(0), T(0), T(0), T(1)); + } + + template + inline Matrix<4, 4, T> rotateY(T angle) + { + const T a = std::cos(deg2rad(angle)); + const T b = std::sin(deg2rad(angle)); + return Matrix<4, 4, T>( + a, T(0), b, T(0), + T(0), T(1), T(0), T(0), + -b, T(0), a, T(0), + T(0), T(0), T(0), T(1)); + } + + template + inline Matrix<4, 4, T> rotateZ(T angle) + { + const T a = std::cos(deg2rad(angle)); + const T b = std::sin(deg2rad(angle)); + return Matrix<4, 4, T>( + a, b, T(0), T(0), + -b, a, T(0), T(0), + T(0), T(0), T(1), T(0), + T(0), T(0), T(0), T(1)); + } + + template + constexpr Matrix<4, 4, T> scale(const Vector<3, T>& value) + { + return Matrix<4, 4, T>( + value.x, T(0), T(0), T(0), + T(0), value.y, T(0), T(0), + T(0), T(0), value.z, T(0), + T(0), T(0), T(0), T(1)); + } + + template + constexpr Matrix<4, 4, T> ortho(T left, T right, T bottom, T top, T nearClip, T farClip) + { + const T a = T(2) / (right - left); + const T b = T(2) / (top - bottom); + const T c = T(-2) / (farClip - nearClip); + const T x = -(right + left) / (right - left); + const T y = -(top + bottom) / (top - bottom); + const T z = -(farClip + nearClip) / (farClip - nearClip); + return Matrix<4, 4, T>( + a, T(0), T(0), x, + T(0), b, T(0), y, + T(0), T(0), c, z, + T(0), T(0), T(0), T(1)); + } + + template + constexpr Matrix<4, 4, T> perspective(T fov, T aspect, T nearClip, T farClip) + { + const T t = std::tan(deg2rad(fov) / T(2)); + const T top = nearClip * t; + const T right = top * aspect; + const T a = nearClip / right; + const T b = nearClip / top; + const T c = -(farClip + nearClip) / (farClip - nearClip); + const T d = -(2 * farClip * nearClip) / (farClip - nearClip); + return Matrix<4, 4, T>( + a, T(0), T(0), T(0), + T(0), b, T(0), T(0), + T(0), T(0), c, d, + T(0), T(0), T(-1), T(0)); + } + + template + bool invert(const Matrix<4, 4, T>& m, Matrix<4, 4, T>& out) + { + Matrix<4, 4, T> inv; + inv[0] = + m[5] * m[10] * m[15] - + m[5] * m[11] * m[14] - + m[9] * m[6] * m[15] + + m[9] * m[7] * m[14] + + m[13] * m[6] * m[11] - + m[13] * m[7] * m[10]; + + inv[4] = + -m[4] * m[10] * m[15] + + m[4] * m[11] * m[14] + + m[8] * m[6] * m[15] - + m[8] * m[7] * m[14] - + m[12] * m[6] * m[11] + + m[12] * m[7] * m[10]; + + inv[8] = + m[4] * m[9] * m[15] - + m[4] * m[11] * m[13] - + m[8] * m[5] * m[15] + + m[8] * m[7] * m[13] + + m[12] * m[5] * m[11] - + m[12] * m[7] * m[9]; + + inv[12] = + -m[4] * m[9] * m[14] + + m[4] * m[10] * m[13] + + m[8] * m[5] * m[14] - + m[8] * m[6] * m[13] - + m[12] * m[5] * m[10] + + m[12] * m[6] * m[9]; + + inv[1] = + -m[1] * m[10] * m[15] + + m[1] * m[11] * m[14] + + m[9] * m[2] * m[15] - + m[9] * m[3] * m[14] - + m[13] * m[2] * m[11] + + m[13] * m[3] * m[10]; + + inv[5] = + m[0] * m[10] * m[15] - + m[0] * m[11] * m[14] - + m[8] * m[2] * m[15] + + m[8] * m[3] * m[14] + + m[12] * m[2] * m[11] - + m[12] * m[3] * m[10]; + + inv[9] = + -m[0] * m[9] * m[15] + + m[0] * m[11] * m[13] + + m[8] * m[1] * m[15] - + m[8] * m[3] * m[13] - + m[12] * m[1] * m[11] + + m[12] * m[3] * m[9]; + + inv[13] = + m[0] * m[9] * m[14] - + m[0] * m[10] * m[13] - + m[8] * m[1] * m[14] + + m[8] * m[2] * m[13] + + m[12] * m[1] * m[10] - + m[12] * m[2] * m[9]; + + inv[2] = + m[1] * m[6] * m[15] - + m[1] * m[7] * m[14] - + m[5] * m[2] * m[15] + + m[5] * m[3] * m[14] + + m[13] * m[2] * m[7] - + m[13] * m[3] * m[6]; + + inv[6] = + -m[0] * m[6] * m[15] + + m[0] * m[7] * m[14] + + m[4] * m[2] * m[15] - + m[4] * m[3] * m[14] - + m[12] * m[2] * m[7] + + m[12] * m[3] * m[6]; + + inv[10] = + m[0] * m[5] * m[15] - + m[0] * m[7] * m[13] - + m[4] * m[1] * m[15] + + m[4] * m[3] * m[13] + + m[12] * m[1] * m[7] - + m[12] * m[3] * m[5]; + + inv[14] = + -m[0] * m[5] * m[14] + + m[0] * m[6] * m[13] + + m[4] * m[1] * m[14] - + m[4] * m[2] * m[13] - + m[12] * m[1] * m[6] + + m[12] * m[2] * m[5]; + + inv[3] = + -m[1] * m[6] * m[11] + + m[1] * m[7] * m[10] + + m[5] * m[2] * m[11] - + m[5] * m[3] * m[10] - + m[9] * m[2] * m[7] + + m[9] * m[3] * m[6]; + + inv[7] = + m[0] * m[6] * m[11] - + m[0] * m[7] * m[10] - + m[4] * m[2] * m[11] + + m[4] * m[3] * m[10] + + m[8] * m[2] * m[7] - + m[8] * m[3] * m[6]; + + inv[11] = + -m[0] * m[5] * m[11] + + m[0] * m[7] * m[9] + + m[4] * m[1] * m[11] - + m[4] * m[3] * m[9] - + m[8] * m[1] * m[7] + + m[8] * m[3] * m[5]; + + inv[15] = + m[0] * m[5] * m[10] - + m[0] * m[6] * m[9] - + m[4] * m[1] * m[10] + + m[4] * m[2] * m[9] + + m[8] * m[1] * m[6] - + m[8] * m[2] * m[5]; + + T det = m[0] * inv[0] + m[1] * inv[4] + m[2] * inv[8] + m[3] * inv[12]; + const bool r = det != T(0); + if (r) + { + det = 1.0 / det; + for (int i = 0; i < 16; ++i) + { + out[i] = inv[i] * det; + } + } + return r; + } + + template + inline Matrix<3, 3, T> operator * (const Matrix<3, 3, T>& a, const Matrix<3, 3, T>& b) + { + Matrix<3, 3, T> out; + for (int i = 0; i < 3; ++i) + { + for (int j = 0; j < 3; ++j) + { + float tmp = 0.F; + for (int k = 0; k < 3; ++k) + { + tmp += a.get(i, k) * b.get(k, j); + } + out.set(i, j, tmp); + } + } + return out; + } + + template + inline Vector<2, T> operator * (const Matrix<3, 3, T>& m, const Vector<2, T>& v) + { + const T x = v[0] * m[0] + v[1] * m[1] + m[2]; + const T y = v[0] * m[3] + v[1] * m[4] + m[5]; + return Vector<2, T>(x, y); + } + + template + inline Matrix<4, 4, T> operator * (const Matrix<4, 4, T>& a, const Matrix<4, 4, T>& b) + { + Matrix<4, 4, T> out; + for (int i = 0; i < 4; ++i) + { + for (int j = 0; j < 4; ++j) + { + float tmp = 0.F; + for (int k = 0; k < 4; ++k) + { + tmp += a.get(i, k) * b.get(k, j); + } + out.set(i, j, tmp); + } + } + return out; + } + + template + inline Vector<3, T> operator * (const Matrix<4, 4, T>& m, const Vector<3, T>& v) + { + const T x = v[0] * m[ 0] + v[1] * m[ 1] + v[2] * m[ 2] + m[ 3]; + const T y = v[0] * m[ 4] + v[1] * m[ 5] + v[2] * m[ 6] + m[ 7]; + const T z = v[0] * m[ 8] + v[1] * m[ 9] + v[2] * m[10] + m[11]; + const T w = v[0] * m[12] + v[1] * m[13] + v[2] * m[14] + m[15]; + return Vector<3, T>(x / w, y / w, z / w); + } + + template + inline Vector<4, T> operator * (const Matrix<4, 4, T>& m, const Vector<4, T>& v) + { + Vector<4, T> out; + out.x = v[0] * m[ 0] + v[1] * m[ 1] + v[2] * m[ 2] + v[3] * m[ 3]; + out.y = v[0] * m[ 4] + v[1] * m[ 5] + v[2] * m[ 6] + v[3] * m[ 7]; + out.z = v[0] * m[ 8] + v[1] * m[ 9] + v[2] * m[10] + v[3] * m[11]; + out.w = v[0] * m[12] + v[1] * m[13] + v[2] * m[14] + v[3] * m[15]; + return out; + } + + template + constexpr bool operator == (const Matrix& a, const Matrix& b) + { + bool out = true; + for (int r = 0; r < R; ++r) + { + for (int c = 0; c < C; ++c) + { + out &= a.get(r, c) == b.get(r, c); + } + } + return out; + } + + template + constexpr bool operator != (const Matrix& a, const Matrix& b) + { + return !(a == b); + } + + template + inline std::ostream& operator << (std::ostream& os, const Matrix& m) + { + for (int r = 0; r < R; ++r) + { + for (int c = 0; c < C; ++c) + { + os << m.get(r, c); + if (r * C + c < R * C - 1) + { + os << " "; + } + } + } + return os; + } +} diff --git a/third_party/tlRender-install-Release/include/ftk/Core/Memory.h b/third_party/tlRender-install-Release/include/ftk/Core/Memory.h new file mode 100644 index 00000000..e933a402 --- /dev/null +++ b/third_party/tlRender-install-Release/include/ftk/Core/Memory.h @@ -0,0 +1,77 @@ +// SPDX-License-Identifier: BSD-3-Clause +// Copyright Contributors to the feather-tk project. + +#pragma once + +#include + +#include +#include +#include +#include + +namespace ftk +{ + //! \name Memory + ///@{ + + constexpr size_t kilobyte = 1024; //!< The number of bytes in a kilobyte + constexpr size_t megabyte = kilobyte * 1024; //!< The number of bytes in a megabyte + constexpr size_t gigabyte = megabyte * 1024; //!< The number of bytes in a gigabyte + constexpr size_t terabyte = gigabyte * 1024; //!< The number of bytes in a terabyte + + //! Get the aligned byte count. + FTK_API size_t getAlignedByteCount(size_t, size_t alignment); + + //! Endian type. + enum class FTK_API_TYPE Endian + { + MSB, //!< Most siginificant byte first + LSB, //!< Least significant byte first + + Count, + First = MSB + }; + FTK_ENUM(Endian); + + //! Get the current endian. + FTK_API Endian getEndian(); + + //! Get the opposite of the given endian. + constexpr Endian opposite(Endian); + + //! Convert the endianness of a block of memory in place. + FTK_API void endian( + void* in, + size_t size, + size_t wordSize); + + //! Convert the endianness of a block of memory. + FTK_API void endian( + const void* in, + void* out, + size_t size, + size_t wordSize); + + //! Get the given bit. + FTK_API bool getBit(unsigned int, int bit); + + //! Set the given bit. + FTK_API unsigned int setBit(unsigned int, int bit); + + //! Clear the given bit. + FTK_API unsigned int clearBit(unsigned int, int bit); + + //! Toggle the given bit. + FTK_API unsigned int toggleBit(unsigned int, int bit); + + //! Convert bits to a string for debugging. + FTK_API std::string getBitString(uint8_t); + + //! Convert bits to a string for debugging. + FTK_API std::string getBitString(uint16_t); + + ///@} +} + +#include diff --git a/third_party/tlRender-install-Release/include/ftk/Core/MemoryInline.h b/third_party/tlRender-install-Release/include/ftk/Core/MemoryInline.h new file mode 100644 index 00000000..5b7d0800 --- /dev/null +++ b/third_party/tlRender-install-Release/include/ftk/Core/MemoryInline.h @@ -0,0 +1,43 @@ +// SPDX-License-Identifier: BSD-3-Clause +// Copyright Contributors to the feather-tk project. + +#include + +namespace ftk +{ + inline size_t getAlignedByteCount(size_t value, size_t alignment) + { + return (value / alignment * alignment) + (value % alignment != 0 ? alignment : 0); + } + + inline Endian getEndian() + { + const uint32_t tmp = 1; + return *(reinterpret_cast(&tmp)) ? Endian::LSB : Endian::MSB; + } + + constexpr Endian opposite(Endian in) + { + return Endian::MSB == in ? Endian::LSB : Endian::MSB; + } + + inline bool getBit(unsigned int value, int bit) + { + return (value >> bit) & 0x01; + } + + inline unsigned int setBit(unsigned int value, int bit) + { + return value | (1 << bit); + } + + inline unsigned int clearBit(unsigned int value, int bit) + { + return value & ~(1 << bit); + } + + inline unsigned int toggleBit(unsigned int value, int bit) + { + return value ^ (1 << bit); + } +} diff --git a/third_party/tlRender-install-Release/include/ftk/Core/Mesh.h b/third_party/tlRender-install-Release/include/ftk/Core/Mesh.h new file mode 100644 index 00000000..15168b84 --- /dev/null +++ b/third_party/tlRender-install-Release/include/ftk/Core/Mesh.h @@ -0,0 +1,121 @@ +// SPDX-License-Identifier: BSD-3-Clause +// Copyright Contributors to the feather-tk project. + +#pragma once + +#include +#include + +#include +#include +#include + +namespace ftk +{ + //! \name Triangle Meshes + ///@{ + + //! Two-dimensional vertex. + struct FTK_API_TYPE Vertex2 + { + Vertex2() = default; + constexpr Vertex2(size_t v, size_t t = 0, size_t c = 0); + + size_t v = 0; + size_t t = 0; + size_t c = 0; + }; + + //! Three-dimensional vertex. + struct FTK_API_TYPE Vertex3 + { + Vertex3() = default; + constexpr Vertex3(size_t v, size_t t = 0, size_t n = 0, size_t c = 0); + + size_t v = 0; + size_t t = 0; + size_t n = 0; + size_t c = 0; + }; + + //! Two-dimensional triangle. + struct FTK_API_TYPE Triangle2 + { + Triangle2() = default; + constexpr Triangle2( + const Vertex2&, + const Vertex2&, + const Vertex2&); + + std::array v; + }; + + //! Three-dimensional triangle. + struct FTK_API_TYPE Triangle3 + { + Triangle3() = default; + constexpr Triangle3( + const Vertex3&, + const Vertex3&, + const Vertex3&); + + std::array v; + }; + + //! Two-dimensional triangle mesh. + template + struct TriangleMesh2 + { + std::vector > v; + std::vector > c; + std::vector > t; + std::vector triangles; + + size_t getByteCount() const; + }; + + //! Three-dimensional triangle mesh. + template + struct TriangleMesh3 + { + std::vector > v; + std::vector > c; + std::vector > t; + std::vector > n; + std::vector triangles; + + size_t getByteCount() const; + }; + + typedef TriangleMesh2 TriMesh2F; + typedef TriangleMesh3 TriMesh3F; + + //! Edge function. + FTK_API float edge(const V2F& p, const V2F& v0, const V2F& v1); + + //! Compute the bounding box of a mesh. + FTK_API Box3F bbox(const TriMesh3F&); + + //! Create a mesh from a box. + FTK_API TriMesh2F mesh(const Box2I&, bool mirrorV = false); + + //! Create a mesh from a box. + FTK_API TriMesh2F mesh(const Box2F&, bool mirrorV = false); + + //! Create a mesh for drawing checkers. + FTK_API TriMesh2F checkers( + const Box2I&, + const Color4F& color0, + const Color4F& color1, + const Size2I& checkerSize); + + //! Create a sphere triangle mesh. + FTK_API TriMesh3F sphere( + float radius, + size_t xResolution, + size_t yResolution); + + ///@} +} + +#include diff --git a/third_party/tlRender-install-Release/include/ftk/Core/MeshInline.h b/third_party/tlRender-install-Release/include/ftk/Core/MeshInline.h new file mode 100644 index 00000000..cdf0c5b1 --- /dev/null +++ b/third_party/tlRender-install-Release/include/ftk/Core/MeshInline.h @@ -0,0 +1,60 @@ +// SPDX-License-Identifier: BSD-3-Clause +// Copyright Contributors to the feather-tk project. + +namespace ftk +{ + constexpr Vertex2::Vertex2(size_t v, size_t t, size_t c) : + v(v), + t(t), + c(c) + {} + + constexpr Vertex3::Vertex3(size_t v, size_t t, size_t n, size_t c) : + v(v), + t(t), + n(n), + c(c) + {} + + constexpr Triangle2::Triangle2( + const Vertex2 & v0, + const Vertex2 & v1, + const Vertex2 & v2) : + v({ v0, v1, v2 }) + {} + + constexpr Triangle3::Triangle3( + const Vertex3& v0, + const Vertex3& v1, + const Vertex3& v2) : + v({ v0, v1, v2 }) + {} + + template + inline size_t TriangleMesh2::getByteCount() const + { + return + v.size() * sizeof(Vector<2, T>) + + c.size() * sizeof(Vector<4, T>) + + t.size() * sizeof(Vector<2, T>) + + triangles.size() * sizeof(Triangle2); + } + + template + inline size_t TriangleMesh3::getByteCount() const + { + return + v.size() * sizeof(Vector<3, T>) + + c.size() * sizeof(Vector<4, T>) + + t.size() * sizeof(Vector<2, T>) + + n.size() * sizeof(Vector<3, T>) + + triangles.size() * sizeof(Triangle3); + } + + inline float edge(const V2F& p, const V2F& v0, const V2F& v1) + { + return + (p.x - v0.x) * (v1.y - v0.y) - + (p.y - v0.y) * (v1.x - v0.x); + } +} diff --git a/third_party/tlRender-install-Release/include/ftk/Core/Noise.h b/third_party/tlRender-install-Release/include/ftk/Core/Noise.h new file mode 100644 index 00000000..1f838f58 --- /dev/null +++ b/third_party/tlRender-install-Release/include/ftk/Core/Noise.h @@ -0,0 +1,31 @@ +// SPDX-License-Identifier: BSD-3-Clause +// Copyright Contributors to the feather-tk project. + +#pragma once + +#include + +#include + +namespace ftk +{ + //! \name Noise + ///@{ + + //! Noise + //! + //! References: + //! - https://mrl.cs.nyu.edu/~perlin/noise/ + class FTK_API_TYPE Noise + { + public: + FTK_API Noise(); + + FTK_API double get(double x, double y, double z); + + private: + std::vector _p; + }; + + ///@} +} diff --git a/third_party/tlRender-install-Release/include/ftk/Core/OS.h b/third_party/tlRender-install-Release/include/ftk/Core/OS.h new file mode 100644 index 00000000..a1372274 --- /dev/null +++ b/third_party/tlRender-install-Release/include/ftk/Core/OS.h @@ -0,0 +1,76 @@ +// SPDX-License-Identifier: BSD-3-Clause +// Copyright Contributors to the feather-tk project. + +#pragma once + +#include + +#include +#include + +namespace ftk +{ + //! \name Operating System + ///@{ + + //! Operating system information. + struct FTK_API_TYPE SysInfo + { + std::string name; + size_t cores = 0; + size_t ram = 0; + size_t ramGB = 0; + }; + + //! Get operating system information. + FTK_API SysInfo getSysInfo(); + + //! Environment variable list separators. + const std::vector envListSeparators = { ':', ';' }; + + //! Environment variable list separator. +#if defined(_WINDOWS) + constexpr char envListSeparator = ';'; +#else // _WINDOWS + constexpr char envListSeparator = ':'; +#endif // _WINDOWS + + //! Get an environment variable. + //! + //! Throws: + //! - std::exception + FTK_API bool getEnv(const std::string& name, std::string&); + + //! Get an environment variable and convert it to an integer. If the + //! variable is empty then zero is returned. + //! + //! Throws: + //! - std::exception + FTK_API bool getEnv(const std::string& name, int& value); + + //! Get an environment variable and convert it to a list of strings. + //! + //! Throws: + //! - std::exception + FTK_API bool getEnv(const std::string& name, std::vector&); + + //! Set an environment variable. + //! + //! Throws: + //! - std::exception + FTK_API bool setEnv(const std::string& name, const std::string&); + + //! Delete an environment variable. + //! + //! Throws: + //! - std::exception + FTK_API bool delEnv(const std::string& name); + + //! Open the given URL in the default browser. + //! + //! Throws: + //! - std::exception + FTK_API void openURL(const std::string&); + + ///@} +} diff --git a/third_party/tlRender-install-Release/include/ftk/Core/Observable.h b/third_party/tlRender-install-Release/include/ftk/Core/Observable.h new file mode 100644 index 00000000..158f0af5 --- /dev/null +++ b/third_party/tlRender-install-Release/include/ftk/Core/Observable.h @@ -0,0 +1,115 @@ +// SPDX-License-Identifier: BSD-3-Clause +// Copyright Contributors to the feather-tk project. + +#pragma once + +#include + +#include +#include +#include + +namespace ftk +{ + //! \name Observables + ///@{ + + //! Observer actions. + enum class FTK_API_TYPE ObserverAction + { + Trigger, + Suppress + }; + + template + class IObservable; + + //! Value observer. + template + class Observer : public std::enable_shared_from_this > + { + FTK_NON_COPYABLE(Observer); + + protected: + void _init( + const std::shared_ptr >&, + const std::function&, + ObserverAction); + + Observer() = default; + + public: + ~Observer(); + + //! Create a new observer. + static std::shared_ptr > create( + const std::shared_ptr >&, + const std::function&, + ObserverAction = ObserverAction::Trigger); + + //! Execute the callback. + void doCallback(const T&); + + private: + std::function _callback; + std::weak_ptr > _value; + }; + + //! Base class for observable values. + template + class IObservable : public std::enable_shared_from_this > + { + public: + virtual ~IObservable() = 0; + + //! Get the value. + virtual const T& get() const = 0; + + //! Get the number of observers. + std::size_t getObserversCount() const; + + protected: + void _add(const std::weak_ptr >&); + void _removeExpired(); + + std::vector > > _observers; + + friend class Observer; + }; + + //! Observable value. + template + class Observable : public IObservable + { + FTK_NON_COPYABLE(Observable); + + protected: + Observable() = default; + explicit Observable(const T&); + + public: + //! Create a new observable. + static std::shared_ptr > create(); + + //! Create a new observable. + static std::shared_ptr > create(const T&); + + //! Set the value. + void setAlways(const T&); + + //! Set the value only if it has changed. + bool setIfChanged(const T&); + + const T& get() const override; + + private: + T _value = T(); + }; + + typedef Observer IntObserver; + typedef Observable IntObservable; + + ///@} +} + +#include diff --git a/third_party/tlRender-install-Release/include/ftk/Core/ObservableInline.h b/third_party/tlRender-install-Release/include/ftk/Core/ObservableInline.h new file mode 100644 index 00000000..aa38c7d1 --- /dev/null +++ b/third_party/tlRender-install-Release/include/ftk/Core/ObservableInline.h @@ -0,0 +1,136 @@ +// SPDX-License-Identifier: BSD-3-Clause +// Copyright Contributors to the feather-tk project. + +#include + +namespace ftk +{ + template + inline void Observer::_init( + const std::shared_ptr >& value, + const std::function& callback, + ObserverAction action) + { + _value = value; + _callback = callback; + if (auto value = _value.lock()) + { + value->_add(Observer::shared_from_this()); + if (ObserverAction::Trigger == action) + { + _callback(value->get()); + } + } + } + + template + inline Observer::~Observer() + { + if (auto value = _value.lock()) + { + value->_removeExpired(); + } + } + + template + inline std::shared_ptr > Observer::create( + const std::shared_ptr >& value, + const std::function& callback, + ObserverAction action) + { + std::shared_ptr > out(new Observer); + out->_init(value, callback, action); + return out; + } + + template + inline void Observer::doCallback(const T& value) + { + _callback(value); + } + + template + inline IObservable::~IObservable() + {} + + template + inline std::size_t IObservable::getObserversCount() const + { + return _observers.size(); + } + + template + inline void IObservable::_add(const std::weak_ptr >& observer) + { + _observers.push_back(observer); + } + + template + inline void IObservable::_removeExpired() + { + auto i = _observers.begin(); + while (i != _observers.end()) + { + if (i->expired()) + { + i = _observers.erase(i); + } + else + { + ++i; + } + } + } + + template + inline Observable::Observable(const T& value) : + _value(value) + {} + + template + inline std::shared_ptr > Observable::create() + { + return std::shared_ptr >(new Observable); + } + + template + inline std::shared_ptr > Observable::create(const T& value) + { + return std::shared_ptr >(new Observable(value)); + } + + template + inline void Observable::setAlways(const T& value) + { + _value = value; + for (const auto& i : IObservable::_observers) + { + if (auto observer = i.lock()) + { + observer->doCallback(_value); + } + } + } + + template + inline bool Observable::setIfChanged(const T& value) + { + if (value == _value) + return false; + _value = value; + for (const auto& i : IObservable::_observers) + { + if (auto observer = i.lock()) + { + observer->doCallback(_value); + } + } + return true; + } + + template + inline const T& Observable::get() const + { + return _value; + } +} diff --git a/third_party/tlRender-install-Release/include/ftk/Core/ObservableList.h b/third_party/tlRender-install-Release/include/ftk/Core/ObservableList.h new file mode 100644 index 00000000..4c5ed972 --- /dev/null +++ b/third_party/tlRender-install-Release/include/ftk/Core/ObservableList.h @@ -0,0 +1,160 @@ +// SPDX-License-Identifier: BSD-3-Clause +// Copyright Contributors to the feather-tk project. + +#pragma once + +#include +#include + +#include +#include +#include + +namespace ftk +{ + //! \name Observables + ///@{ + + template + class IObservableList; + + //! Invalid index. + constexpr size_t ObservableListInvalidIndex = static_cast(-1); + + //! List observer. + template + class ListObserver : public std::enable_shared_from_this > + { + FTK_NON_COPYABLE(ListObserver); + + protected: + void _init( + const std::shared_ptr >&, + const std::function&)>&, + ObserverAction); + + ListObserver() = default; + + public: + ~ListObserver(); + + //! Create a new list observer. + static std::shared_ptr > create( + const std::shared_ptr >&, + const std::function&)>&, + ObserverAction = ObserverAction::Trigger); + + //! Execute the callback. + void doCallback(const std::vector&); + + private: + std::function&)> _callback; + std::weak_ptr > _value; + }; + + //! Base class for observable lists. + template + class IObservableList + { + public: + virtual ~IObservableList() = 0; + + //! Get the list. + virtual const std::vector& get() const = 0; + + //! Get the list size. + virtual size_t getSize() const = 0; + + //! Get whether the list is empty. + virtual bool isEmpty() const = 0; + + //! Get a list item. + virtual T getItem(size_t) const = 0; + + //! Does the list contain the given item? + virtual bool contains(const T&) const = 0; + + //! Get the index of the given item. + virtual size_t indexOf(const T&) const = 0; + + //! Get the number of observers. + size_t getObserversCount() const; + + protected: + void _add(const std::weak_ptr >&); + void _removeExpired(); + + std::vector > > _observers; + + friend ListObserver; + }; + + //! Observable list. + template + class ObservableList : public IObservableList + { + FTK_NON_COPYABLE(ObservableList); + + protected: + ObservableList() = default; + explicit ObservableList(const std::vector&); + + public: + //! Create a new list. + static std::shared_ptr > create(); + + //! Create a new list with the given value. + static std::shared_ptr > create(const std::vector&); + + //! Set the list. + void setAlways(const std::vector&); + + //! Set the list only if it has changed. + bool setIfChanged(const std::vector&); + + //! Clear the list. + void clear(); + + //! Set an item. + void setItem(size_t, const T&); + + //! Set an item only if it has changed. + bool setItemOnlyIfChanged(size_t, const T&); + + //! Append an item. + void pushBack(const T&); + + //! Append a range of items. + void pushBack(const std::vector&); + + //! Insert an item. + void insertItem(size_t, const T&); + + //! Insert a range of items. + void insertItems(size_t, const std::vector&); + + //! Remove an item. + void removeItem(size_t); + + //! Remove a range of items. + void removeItems(size_t start, size_t end); + + //! Replace a range of items. + void replaceItems(size_t start, size_t end, const std::vector&); + + const std::vector& get() const override; + size_t getSize() const override; + bool isEmpty() const override; + T getItem(size_t) const override; + bool contains(const T&) const override; + size_t indexOf(const T&) const override; + + private: + std::vector _value; + }; + + ///@} +} + +#include + diff --git a/third_party/tlRender-install-Release/include/ftk/Core/ObservableListInline.h b/third_party/tlRender-install-Release/include/ftk/Core/ObservableListInline.h new file mode 100644 index 00000000..dc508cd7 --- /dev/null +++ b/third_party/tlRender-install-Release/include/ftk/Core/ObservableListInline.h @@ -0,0 +1,320 @@ +// SPDX-License-Identifier: BSD-3-Clause +// Copyright Contributors to the feather-tk project. + +#include + +namespace ftk +{ + template + inline void ListObserver::_init( + const std::shared_ptr >& value, + const std::function&)>& callback, + ObserverAction action) + { + _value = value; + _callback = callback; + if (auto value = _value.lock()) + { + value->_add(ListObserver::shared_from_this()); + if (ObserverAction::Trigger == action) + { + _callback(value->get()); + } + } + } + + template + inline ListObserver::~ListObserver() + { + if (auto value = _value.lock()) + { + value->_removeExpired(); + } + } + + template + inline std::shared_ptr > ListObserver::create( + const std::shared_ptr >& value, + const std::function&)>& callback, + ObserverAction action) + { + std::shared_ptr > out(new ListObserver); + out->_init(value, callback, action); + return out; + } + + template + inline void ListObserver::doCallback(const std::vector& value) + { + _callback(value); + } + + template + inline IObservableList::~IObservableList() + {} + + template + inline size_t IObservableList::getObserversCount() const + { + return _observers.size(); + } + + template + inline void IObservableList::_add(const std::weak_ptr >& observer) + { + _observers.push_back(observer); + } + + template + inline void IObservableList::_removeExpired() + { + auto i = _observers.begin(); + while (i != _observers.end()) + { + if (i->expired()) + { + i = _observers.erase(i); + } + else + { + ++i; + } + } + } + + template + inline ObservableList::ObservableList(const std::vector& value) : + _value(value) + {} + + template + inline std::shared_ptr > ObservableList::create() + { + return std::shared_ptr >(new ObservableList); + } + + template + inline std::shared_ptr > ObservableList::create(const std::vector& value) + { + return std::shared_ptr >(new ObservableList(value)); + } + + template + inline void ObservableList::setAlways(const std::vector& value) + { + _value = value; + for (const auto& i : IObservableList::_observers) + { + if (auto observer = i.lock()) + { + observer->doCallback(_value); + } + } + } + + template + inline bool ObservableList::setIfChanged(const std::vector& value) + { + if (value == _value) + return false; + _value = value; + for (const auto& i : IObservableList::_observers) + { + if (auto observer = i.lock()) + { + observer->doCallback(_value); + } + } + return true; + } + + template + inline void ObservableList::clear() + { + if (_value.size()) + { + _value.clear(); + for (const auto& i : IObservableList::_observers) + { + if (auto observer = i.lock()) + { + observer->doCallback(_value); + } + } + } + } + + template + inline void ObservableList::setItem(size_t index, const T& value) + { + _value[index] = value; + for (const auto& i : IObservableList::_observers) + { + if (auto observer = i.lock()) + { + observer->doCallback(_value); + } + } + } + + template + inline bool ObservableList::setItemOnlyIfChanged(size_t index, const T& value) + { + if (value == _value[index]) + return false; + _value[index] = value; + for (const auto& i : IObservableList::_observers) + { + if (auto observer = i.lock()) + { + observer->doCallback(_value); + } + } + return true; + } + + template + inline void ObservableList::pushBack(const T& value) + { + _value.push_back(value); + for (const auto& i : IObservableList::_observers) + { + if (auto observer = i.lock()) + { + observer->doCallback(_value); + } + } + } + + template + inline void ObservableList::pushBack(const std::vector& value) + { + _value.insert(_value.end(), value.begin(), value.end()); + for (const auto& i : IObservableList::_observers) + { + if (auto observer = i.lock()) + { + observer->doCallback(_value); + } + } + } + + template + inline void ObservableList::insertItem(size_t index, const T& value) + { + _value.insert(_value.begin() + index, value); + for (const auto& i : IObservableList::_observers) + { + if (auto observer = i.lock()) + { + observer->doCallback(_value); + } + } + } + + template + inline void ObservableList::insertItems(size_t index, const std::vector& value) + { + _value.insert(_value.begin() + index, value.begin(), value.end()); + for (const auto& i : IObservableList::_observers) + { + if (auto observer = i.lock()) + { + observer->doCallback(_value); + } + } + } + + template + inline void ObservableList::removeItem(size_t index) + { + _value.erase(_value.begin() + index); + for (const auto& i : IObservableList::_observers) + { + if (auto observer = i.lock()) + { + observer->doCallback(_value); + } + } + } + + template + inline void ObservableList::removeItems(size_t start, size_t end) + { + _value.erase(_value.begin() + start, _value.begin() + end); + for (const auto& i : IObservableList::_observers) + { + if (auto observer = i.lock()) + { + observer->doCallback(_value); + } + } + } + + template + inline void ObservableList::replaceItems( + size_t start, + size_t end, + const std::vector& items) + { + _value.erase(_value.begin() + start, _value.begin() + end); + _value.insert(_value.begin() + start, items.begin(), items.end()); + for (const auto& i : IObservableList::_observers) + { + if (auto observer = i.lock()) + { + observer->doCallback(_value); + } + } + } + + template + inline const std::vector& ObservableList::get() const + { + return _value; + } + + template + inline size_t ObservableList::getSize() const + { + return _value.size(); + } + + template + inline bool ObservableList::isEmpty() const + { + return _value.empty(); + } + + template + inline T ObservableList::getItem(size_t index) const + { + return _value[index]; + } + + template + inline bool ObservableList::contains(const T& value) const + { + const auto i = std::find_if( + _value.begin(), + _value.end(), + [value](const T& other) + { + return value == other; + }); + return i != _value.end(); + } + + template + inline size_t ObservableList::indexOf(const T& value) const + { + const auto i = std::find_if( + _value.begin(), + _value.end(), + [value](const T& other) + { + return value == other; + }); + return i != _value.end() ? i - _value.begin() : ObservableListInvalidIndex; + } +} diff --git a/third_party/tlRender-install-Release/include/ftk/Core/ObservableMap.h b/third_party/tlRender-install-Release/include/ftk/Core/ObservableMap.h new file mode 100644 index 00000000..1f3d672e --- /dev/null +++ b/third_party/tlRender-install-Release/include/ftk/Core/ObservableMap.h @@ -0,0 +1,135 @@ +// SPDX-License-Identifier: BSD-3-Clause +// Copyright Contributors to the feather-tk project. + +#pragma once + +#include +#include + +#include +#include +#include +#include + +namespace ftk +{ + //! \name Observables + ///@{ + + template + class IObservableMap; + + //! Map observer. + template + class MapObserver : public std::enable_shared_from_this > + { + FTK_NON_COPYABLE(MapObserver); + + void _init( + const std::shared_ptr >&, + const std::function&)>&, + ObserverAction); + + MapObserver() = default; + + public: + ~MapObserver(); + + //! Create a new map observer. + static std::shared_ptr > create( + const std::shared_ptr >&, + const std::function&)>&, + ObserverAction = ObserverAction::Trigger); + + //! Execute the callback. + void doCallback(const std::map&); + + private: + std::function&)> _callback; + std::weak_ptr > _value; + }; + + //! Base class for observable maps. + template + class IObservableMap + { + public: + virtual ~IObservableMap() = 0; + + //! Get the map. + virtual const std::map& get() const = 0; + + //! Get the map size. + virtual std::size_t getSize() const = 0; + + //! Get whether the map is empty. + virtual bool isEmpty() const = 0; + + //! Get the map keys. + virtual std::vector getKeys() const = 0; + + //! Does the given key exist? + virtual bool hasKey(const T&) = 0; + + //! Get a map item. + virtual const U& getItem(const T&) const = 0; + + //! Get the number of observers. + std::size_t getObserversCount() const; + + protected: + void _add(const std::weak_ptr >&); + void _removeExpired(); + + std::vector > > _observers; + + friend MapObserver; + }; + + //! Observable map. + template + class ObservableMap : public IObservableMap + { + FTK_NON_COPYABLE(ObservableMap); + + protected: + ObservableMap() = default; + explicit ObservableMap(const std::map&); + + public: + //! Create a new map. + static std::shared_ptr > create(); + + //! Create a new map. + static std::shared_ptr > create(const std::map&); + + //! Set the map. + void setAlways(const std::map&); + + //! Set the map only if it has changed. + bool setIfChanged(const std::map&); + + //! Clear the map. + void clear(); + + //! Set a map item. + void setItem(const T&, const U&); + + //! Set a map item only if it has changed. + bool setItemOnlyIfChanged(const T&, const U&); + + const std::map& get() const override; + std::size_t getSize() const override; + bool isEmpty() const override; + std::vector getKeys() const override; + bool hasKey(const T&) override; + const U& getItem(const T&) const override; + + private: + std::map _value; + }; + + ///@} +} + +#include diff --git a/third_party/tlRender-install-Release/include/ftk/Core/ObservableMapInline.h b/third_party/tlRender-install-Release/include/ftk/Core/ObservableMapInline.h new file mode 100644 index 00000000..1fd3ac23 --- /dev/null +++ b/third_party/tlRender-install-Release/include/ftk/Core/ObservableMapInline.h @@ -0,0 +1,218 @@ +// SPDX-License-Identifier: BSD-3-Clause +// Copyright Contributors to the feather-tk project. + +#include + +namespace ftk +{ + template + inline void MapObserver::_init( + const std::shared_ptr >& value, + const std::function&)>& callback, + ObserverAction action) + { + _value = value; + _callback = callback; + if (auto value = _value.lock()) + { + value->_add(MapObserver::shared_from_this()); + if (ObserverAction::Trigger == action) + { + _callback(value->get()); + } + } + } + + template + inline MapObserver::~MapObserver() + { + if (auto value = _value.lock()) + { + value->_removeExpired(); + } + } + + template + inline std::shared_ptr > MapObserver::create( + const std::shared_ptr >& value, + const std::function&)>& callback, + ObserverAction action) + { + std::shared_ptr > out(new MapObserver); + out->_init(value, callback, action); + return out; + } + + template + inline void MapObserver::doCallback(const std::map& value) + { + _callback(value); + } + + template + inline IObservableMap::~IObservableMap() + {} + + template + inline std::size_t IObservableMap::getObserversCount() const + { + return _observers.size(); + } + + template + inline void IObservableMap::_add(const std::weak_ptr >& observer) + { + _observers.push_back(observer); + } + + template + inline void IObservableMap::_removeExpired() + { + auto i = _observers.begin(); + while (i != _observers.end()) + { + if (i->expired()) + { + i = _observers.erase(i); + } + else + { + ++i; + } + } + } + + template + inline ObservableMap::ObservableMap(const std::map& value) : + _value(value) + {} + + template + inline std::shared_ptr > ObservableMap::create() + { + return std::shared_ptr >(new ObservableMap); + } + + template + inline std::shared_ptr > ObservableMap::create(const std::map& value) + { + return std::shared_ptr >(new ObservableMap(value)); + } + + template + inline void ObservableMap::setAlways(const std::map& value) + { + _value = value; + for (const auto& i : IObservableMap::_observers) + { + if (auto observer = i.lock()) + { + observer->doCallback(_value); + } + } + } + + template + inline bool ObservableMap::setIfChanged(const std::map& value) + { + if (value == _value) + return false; + _value = value; + for (const auto& i : IObservableMap::_observers) + { + if (auto observer = i.lock()) + { + observer->doCallback(_value); + } + } + return true; + } + + template + inline void ObservableMap::clear() + { + if (_value.size()) + { + _value.clear(); + for (const auto& s : IObservableMap::_observers) + { + if (auto observer = s.lock()) + { + observer->doCallback(_value); + } + } + } + } + + template + inline void ObservableMap::setItem(const T& key, const U& value) + { + _value[key] = value; + + for (const auto& s : IObservableMap::_observers) + { + if (auto observer = s.lock()) + { + observer->doCallback(_value); + } + } + } + + template + inline bool ObservableMap::setItemOnlyIfChanged(const T& key, const U& value) + { + const auto i = _value.find(key); + if (i != _value.end() && i->second == value) + return false; + _value[key] = value; + for (const auto& s : IObservableMap::_observers) + { + if (auto observer = s.lock()) + { + observer->doCallback(_value); + } + } + return true; + } + + template + inline const std::map& ObservableMap::get() const + { + return _value; + } + + template + inline std::size_t ObservableMap::getSize() const + { + return _value.size(); + } + + template + inline bool ObservableMap::isEmpty() const + { + return _value.empty(); + } + + template + inline std::vector ObservableMap::getKeys() const + { + std::vector out; + for (const auto i : _value) + { + out.push_back(i.first); + } + return out; + } + + template + inline bool ObservableMap::hasKey(const T& value) + { + return _value.find(value) != _value.end(); + } + + template + inline const U& ObservableMap::getItem(const T& key) const + { + return _value.find(key)->second; + } +} diff --git a/third_party/tlRender-install-Release/include/ftk/Core/PNG.h b/third_party/tlRender-install-Release/include/ftk/Core/PNG.h new file mode 100644 index 00000000..cfc1ffd1 --- /dev/null +++ b/third_party/tlRender-install-Release/include/ftk/Core/PNG.h @@ -0,0 +1,77 @@ +// SPDX-License-Identifier: BSD-3-Clause +// Copyright Contributors to the feather-tk project. + +#pragma once + +#include + +namespace ftk +{ + namespace png + { + //! \name PNG + ///@{ + + //! PNG image reader. + class FTK_API_TYPE ImageReader : public IImageReader + { + public: + FTK_API ImageReader( + const std::filesystem::path&, + const MemFile*, + const ImageIOOptions&); + + FTK_API virtual ~ImageReader(); + + FTK_API const ImageInfo& getInfo() const override; + FTK_API std::shared_ptr read() override; + + private: + FTK_PRIVATE(); + }; + + //! PNG image writer. + class FTK_API_TYPE ImageWriter : public IImageWriter + { + public: + FTK_API ImageWriter( + const std::filesystem::path&, + const ImageInfo&, + const ImageIOOptions&); + + FTK_API virtual ~ImageWriter(); + + FTK_API void write(const std::shared_ptr&) override; + + private: + FTK_PRIVATE(); + }; + + //! PNG image I/O plugin. + class FTK_API_TYPE ImagePlugin : public IImagePlugin + { + public: + FTK_API ImagePlugin(); + + FTK_API virtual ~ImagePlugin(); + + FTK_API std::shared_ptr read( + const std::filesystem::path&, + const ImageIOOptions& = ImageIOOptions()) override; + FTK_API std::shared_ptr read( + const std::filesystem::path&, + const MemFile&, + const ImageIOOptions& = ImageIOOptions()) override; + FTK_API bool canWrite( + const std::filesystem::path&, + const ImageInfo&, + const ImageIOOptions& = ImageIOOptions()) override; + FTK_API std::shared_ptr write( + const std::filesystem::path&, + const ImageInfo&, + const ImageIOOptions& = ImageIOOptions()) override; + }; + + ///@} + } +} diff --git a/third_party/tlRender-install-Release/include/ftk/Core/Path.h b/third_party/tlRender-install-Release/include/ftk/Core/Path.h new file mode 100644 index 00000000..06ed6f45 --- /dev/null +++ b/third_party/tlRender-install-Release/include/ftk/Core/Path.h @@ -0,0 +1,307 @@ +// SPDX-License-Identifier: BSD-3-Clause +// Copyright Contributors to the feather-tk project. + +#pragma once + +#include +#include + +#include +#include +#include +#include +#include + +namespace ftk +{ + //! \name File Paths + ///@{ + + //! Does the file name start with a dot? + FTK_API bool isDotFile(const std::string&); + + //! Split a path. + FTK_API std::vector split(std::filesystem::path); + + //! Append a path separator. + FTK_API std::string appendSeparator(const std::string&); + + //! Get the list of file system drives. + FTK_API std::vector getDrives(); + + //! User paths. + enum class FTK_API_TYPE UserPath + { + Home, + Desktop, + Documents, + Downloads, + + Count, + First = Home + }; + FTK_ENUM(UserPath); + + //! Get a user path. + FTK_API std::filesystem::path getUserPath(UserPath); + + //! Create a unique temporary directory. + FTK_API std::filesystem::path createTmpDir(); + + //! Create a temporary directory that will automatically be removed when + //! finished. + class FTK_API_TYPE TmpDir + { + FTK_NON_COPYABLE(TmpDir); + + public: + FTK_API TmpDir(); + + FTK_API ~TmpDir(); + + //! Get the path to the temporary directory. + FTK_API const std::filesystem::path& getPath() const; + + //! Remove the temporary directory (this will also be called + //! automatically in the destructor). + FTK_API void remove(); + + private: + std::filesystem::path _path; + }; + + //! Convert a frame number to a string. + FTK_API std::string toString(int64_t frame, int pad = 0); + + //! File path options. + struct FTK_API_TYPE PathOptions + { + bool seqNegative = true; + size_t seqMaxDigits = 9; + + bool operator == (const PathOptions&) const; + bool operator != (const PathOptions&) const; + }; + + //! Frame sequence. + struct FTK_API_TYPE FrameSeq + { + FrameSeq() = default; + explicit FrameSeq(const RangeI64&, int inc = 1); + FrameSeq(int64_t, int64_t, int inc = 1); + explicit FrameSeq(int64_t); + + RangeI64 range; + int inc = 1; + + bool operator == (const FrameSeq&) const; + bool operator != (const FrameSeq&) const; + }; + + //! Convert frames to frame sequences. + FTK_API std::vector toFrameSeq(const std::vector&); + + //! Convert a frame sequence to frames. + FTK_API std::vector toFrames(const FrameSeq&); + + //! Convert frame sequences to frames. + FTK_API std::vector toFrames(const std::vector&); + + //! Convert a frame sequence to a label. + FTK_API std::string getLabel(const FrameSeq&); + + //! Convert frame sequences to a label. + FTK_API std::string getLabel(const std::vector&); + + //! File path. + //! + //! Example: file:///tmp/render.0001.exr?user=foo;password=bar + //! * protocol: file:// + //! * dir: /tmp/ + //! * base: render. + //! * number: 0001 + //! * padding: 4 + //! * extension: .exr + //! * request: ?user=foo;password=bar + //! * file name: render.0001.exr + class FTK_API_TYPE Path + { + public: + Path() = default; + FTK_API explicit Path( + const std::string&, + const PathOptions& = PathOptions()); + FTK_API Path( + const std::string& dir, + const std::string& fileName, + const PathOptions& = PathOptions()); + + //! \name Path Options + ///@{ + + const PathOptions& getOptions(); + FTK_API void setOptions(const PathOptions&); + + ///@} + + //! \name Path Components + ///@{ + + const std::string& get() const; + bool isEmpty() const; + + bool hasProtocol() const; + bool hasDir() const; + bool hasBase() const; + bool hasNum() const; + bool hasExt() const; + bool hasRequest() const; + + std::string getProtocol() const; + std::string getDir() const; + std::string getBase() const; + std::string getNum() const; + int getPad() const; + std::string getExt() const; + std::string getRequest() const; + std::string getFileName(bool dir = false) const; + + FTK_API void setProtocol(const std::string&); + FTK_API void setDir(const std::string&); + FTK_API void setBase(const std::string&); + FTK_API void setNum(const std::string&); + FTK_API void setPad(int); + FTK_API void setExt(const std::string&); + FTK_API void setRequest(const std::string&); + FTK_API void setFileName(const std::string&); + + ///@} + + //! \name File Sequences + ///@{ + + const std::optional& getFrames() const; + FTK_API void setFrames(const RangeI64&); + + //! Get whether this is a sequence. + bool isSeq() const; + + //! Get whether this has a sequence wildcard ('#'). + bool hasSeqWildcard() const; + + //! Get a file name with the given frame number. + std::string getFrame(int64_t frame, bool dir = false) const; + + //! Get the frame range string. + std::string getFrameRange() const; + + //! Get whether a path is part of this sequence. + bool seq(const Path&) const; + + //! Add a path to this sequence. + FTK_API bool addSeq(const Path&); + + ///@} + + //! \name Utility + ///@{ + + //! Get whether the path is absolute. + bool isAbs() const; + + //! Test whether this extension matches one in the given list. + FTK_API bool testExt(const std::vector&) const; + + ///@} + + //! \name Constants + ///@{ + + static std::string getNumbers(); + static std::string getPathSeparators(); + + ///@} + + bool operator == (const Path&) const; + bool operator != (const Path&) const; + + private: + void _parse(const PathOptions&); + + std::string _path; + PathOptions _options; + static const std::pair _invalid; + std::pair _protocol = _invalid; + std::pair _dir = _invalid; + std::pair _base = _invalid; + std::pair _num = _invalid; + int _pad = 0; + std::pair _ext = _invalid; + std::pair _request = _invalid; + std::optional _frames; + }; + + //! Directory list sorting. + enum class FTK_API_TYPE DirListSort + { + Name, + Extension, + Size, + Time, + + Count, + First = Name + }; + FTK_ENUM(DirListSort); + + //! Directory list options. + struct FTK_API_TYPE DirListOptions + { + DirListSort sort = DirListSort::Name; + bool sortReverse = false; + std::string filter; + bool filterFiles = false; + std::vector filterExt; + bool seq = true; + std::vector seqExts; + bool seqNegative = true; + size_t seqMaxDigits = 9; + bool hidden = false; + + bool operator == (const DirListOptions&) const; + bool operator != (const DirListOptions&) const; + }; + + //! Directory list entry. + struct FTK_API_TYPE DirEntry + { + Path path; + bool isDir = false; + size_t size = 0; + std::filesystem::file_time_type time; + + bool operator == (const DirEntry&) const; + bool operator != (const DirEntry&) const; + }; + + //! List directory contents. + FTK_API std::vector dirList( + const std::filesystem::path&, + const DirListOptions& = DirListOptions()); + + //! Expand a file sequence. This function will search the directory for + //! other frames that match the given file name. + FTK_API Path expandSeq( + const Path&, + const PathOptions& = PathOptions()); + + FTK_API void to_json(nlohmann::json&, const PathOptions&); + FTK_API void to_json(nlohmann::json&, const DirListOptions&); + + FTK_API void from_json(const nlohmann::json&, PathOptions&); + FTK_API void from_json(const nlohmann::json&, DirListOptions&); + + ///@} +} + +#include diff --git a/third_party/tlRender-install-Release/include/ftk/Core/PathInline.h b/third_party/tlRender-install-Release/include/ftk/Core/PathInline.h new file mode 100644 index 00000000..50372045 --- /dev/null +++ b/third_party/tlRender-install-Release/include/ftk/Core/PathInline.h @@ -0,0 +1,160 @@ +// SPDX-License-Identifier: BSD-3-Clause +// Copyright Contributors to the feather-tk project. + +namespace ftk +{ + inline bool isDotFile(const std::string& fileName) + { + return !fileName.empty() && '.' == fileName[0]; + } + + inline const PathOptions& Path::getOptions() + { + return _options; + } + + inline const std::string& Path::get() const + { + return _path; + } + + inline bool Path::isEmpty() const + { + return _path.empty(); + } + + inline bool Path::hasProtocol() const + { + return _protocol != _invalid; + } + + inline bool Path::hasDir() const + { + return _dir != _invalid; + } + + inline bool Path::hasBase() const + { + return _base != _invalid; + } + + inline bool Path::hasNum() const + { + return _num != _invalid; + } + + inline bool Path::hasExt() const + { + return _ext != _invalid; + } + + inline bool Path::hasRequest() const + { + return _request != _invalid; + } + + inline std::string Path::getProtocol() const + { + return _protocol != _invalid ? + _path.substr(_protocol.first, _protocol.second) : + std::string(); + } + + inline std::string Path::getDir() const + { + return _dir != _invalid ? + _path.substr(_dir.first, _dir.second) : + std::string(); + } + + inline std::string Path::getBase() const + { + return _base != _invalid ? + _path.substr(_base.first, _base.second) : + std::string(); + } + + inline std::string Path::getNum() const + { + return _num != _invalid ? + _path.substr(_num.first, _num.second) : + std::string(); + } + + inline int Path::getPad() const + { + return _pad; + } + + inline std::string Path::getExt() const + { + return _ext != _invalid ? + _path.substr(_ext.first, _ext.second) : + std::string(); + } + + inline std::string Path::getRequest() const + { + return _request != _invalid ? + _path.substr(_request.first, _request.second) : + std::string(); + } + + inline std::string Path::getFileName(bool dir) const + { + return dir ? + getDir() + getBase() + getNum() + getExt() : + getBase() + getNum() + getExt(); + } + + inline const std::optional& Path::getFrames() const + { + return _frames; + } + + inline bool Path::isSeq() const + { + return hasNum() && _frames.has_value() && !_frames.value().equal(); + } + + inline bool Path::hasSeqWildcard() const + { + return "#" == getNum(); + } + + inline std::string Path::getFrame(int64_t frame, bool dir) const + { + return _num != _invalid ? + ((dir ? getDir() : std::string()) + getBase() + toString(frame, _pad) + getExt()) : + ((dir ? getDir() : std::string()) + getBase() + getExt()); + } + + inline std::string Path::getFrameRange() const + { + return _frames.has_value() ? + !_frames.value().equal() ? + toString(_frames.value().min(), _pad) + "-" + toString(_frames.value().max(), _pad) : + toString(_frames.value().min(), _pad) : + std::string(); + } + + inline bool Path::seq(const Path& other) const + { + return + (hasNum() || "#" == getNum()) && + other.hasNum() && + _dir == other._dir && + _base == other._base && + getExt() == other.getExt(); + } + + inline bool Path::operator == (const Path& other) const + { + return _path == other._path && _frames == other._frames; + } + + inline bool Path::operator != (const Path& other) const + { + return !(*this == other); + } +} diff --git a/third_party/tlRender-install-Release/include/ftk/Core/Random.h b/third_party/tlRender-install-Release/include/ftk/Core/Random.h new file mode 100644 index 00000000..3575d498 --- /dev/null +++ b/third_party/tlRender-install-Release/include/ftk/Core/Random.h @@ -0,0 +1,51 @@ +// SPDX-License-Identifier: BSD-3-Clause +// Copyright Contributors to the feather-tk project. + +#pragma once + +#include + +#include +#include + +namespace ftk +{ + //! Random numbers. + class FTK_API_TYPE Random + { + public: + FTK_API Random(); + + FTK_API ~Random(); + + //! Get a random number between zero and one. + FTK_API float getF(); + + //! Get a random number between zero and the given value. + FTK_API float getF(float); + + //! Get a random number between two values. + FTK_API float getF(float min, float max); + + //! Get a random number between zero and the given value. + FTK_API int getI(int); + + //! Get a random number between two values. + FTK_API int getI(int min, int max); + + //! Get a random item from a list. + template + const T& getItem(const std::vector&); + + //! Seed the random value generator. + FTK_API void setSeed(unsigned int); + + //! Seed the random value generator with the current time. + FTK_API void setSeed(); + + private: + FTK_PRIVATE(); + }; +} + +#include diff --git a/third_party/tlRender-install-Release/include/ftk/Core/RandomInline.h b/third_party/tlRender-install-Release/include/ftk/Core/RandomInline.h new file mode 100644 index 00000000..2c8cc942 --- /dev/null +++ b/third_party/tlRender-install-Release/include/ftk/Core/RandomInline.h @@ -0,0 +1,11 @@ +// SPDX-License-Identifier: BSD-3-Clause +// Copyright Contributors to the feather-tk project. + +namespace ftk +{ + template + inline const T& Random::getItem(const std::vector& value) + { + return value[getI(0, static_cast(value.size()) - 1)]; + } +} diff --git a/third_party/tlRender-install-Release/include/ftk/Core/Range.h b/third_party/tlRender-install-Release/include/ftk/Core/Range.h new file mode 100644 index 00000000..8aff8594 --- /dev/null +++ b/third_party/tlRender-install-Release/include/ftk/Core/Range.h @@ -0,0 +1,84 @@ +// SPDX-License-Identifier: BSD-3-Clause +// Copyright Contributors to the feather-tk project. + +#pragma once + +#include + +#include + +#include +#include +#include + +namespace ftk +{ + //! \name Ranges + ///@{ + + //! Numeric range. + template + class Range + { + public: + constexpr Range(); + constexpr Range(T min, T max); + + constexpr T min() const; + constexpr T max() const; + + constexpr T size() const; + + constexpr bool equal() const; + + constexpr bool operator == (const Range&) const; + constexpr bool operator != (const Range&) const; + constexpr bool operator < (const Range&) const; + + private: + T _min; + T _max; + }; + + typedef Range RangeI; + typedef Range RangeI64; + typedef Range RangeSizeT; + typedef Range RangeF; + typedef Range RangeD; + + //! Does the range contain the given number? + template + bool contains(const Range&, T); + + //! Does the range interset the given range? + template + bool intersects(const Range&, const Range&); + + //! Expand the range to include the given number. + template + Range expand(const Range&, T); + + //! Expand the range to include the given range. + template + Range expand(const Range&, const Range&); + + FTK_API void to_json(nlohmann::json&, const RangeI&); + FTK_API void to_json(nlohmann::json&, const RangeI64&); + FTK_API void to_json(nlohmann::json&, const RangeSizeT&); + FTK_API void to_json(nlohmann::json&, const RangeF&); + FTK_API void to_json(nlohmann::json&, const RangeD&); + + FTK_API void from_json(const nlohmann::json&, RangeI&); + FTK_API void from_json(const nlohmann::json&, RangeI64&); + FTK_API void from_json(const nlohmann::json&, RangeSizeT&); + FTK_API void from_json(const nlohmann::json&, RangeF&); + FTK_API void from_json(const nlohmann::json&, RangeD&); + + template + std::ostream& operator << (std::ostream&, const Range&); + + ///@} + +} + +#include diff --git a/third_party/tlRender-install-Release/include/ftk/Core/RangeInline.h b/third_party/tlRender-install-Release/include/ftk/Core/RangeInline.h new file mode 100644 index 00000000..ded34e28 --- /dev/null +++ b/third_party/tlRender-install-Release/include/ftk/Core/RangeInline.h @@ -0,0 +1,116 @@ +// SPDX-License-Identifier: BSD-3-Clause +// Copyright Contributors to the feather-tk project. + +#include + +namespace ftk +{ + template + constexpr Range::Range() : + _min(static_cast(0)), + _max(static_cast(0)) + {} + + template + constexpr Range::Range(T min, T max) : + _min(std::min(min, max)), + _max(std::max(min, max)) + {} + + template + constexpr T Range::min() const + { + return _min; + } + + template + constexpr T Range::max() const + { + return _max; + } + + template + constexpr T Range::size() const + { + return _max - _min; + } + + template<> + constexpr int Range::size() const + { + return _max - _min + 1; + } + + template<> + constexpr int64_t Range::size() const + { + return _max - _min + 1; + } + + template<> + constexpr size_t Range::size() const + { + return _max - _min + 1; + } + + template + constexpr bool Range::equal() const + { + return _min == _max; + } + + template + constexpr bool Range::operator == (const Range& value) const + { + return _min == value._min && _max == value._max; + } + + template + constexpr bool Range::operator != (const Range& value) const + { + return !(*this == value); + } + + template + constexpr bool Range::operator < (const Range& value) const + { + return _min < value._min; + } + + template + inline bool contains(const Range& range, T value) + { + return value >= range.min() && value <= range.max(); + } + + template + inline bool intersects(const Range& range, const Range& value) + { + return !( + value.max() < range.min() || + value.min() > range.max()); + } + + template + inline Range expand(const Range& range, T value) + { + return Range( + std::min(range.min(), value), + std::max(range.max(), value)); + } + + template + inline Range expand(const Range& range, const Range& value) + { + return Range( + std::min(range.min(), value.min()), + std::max(range.max(), value.max())); + } + + template + inline std::ostream& operator << (std::ostream& os, const Range& v) + { + os << v.min() << " " << v.max(); + return os; + } +} diff --git a/third_party/tlRender-install-Release/include/ftk/Core/RenderOptions.h b/third_party/tlRender-install-Release/include/ftk/Core/RenderOptions.h new file mode 100644 index 00000000..fdced6e7 --- /dev/null +++ b/third_party/tlRender-install-Release/include/ftk/Core/RenderOptions.h @@ -0,0 +1,140 @@ +// SPDX-License-Identifier: BSD-3-Clause +// Copyright Contributors to the feather-tk project. + +#pragma once + +#include +#include +#include + +#include +#include +#include + +namespace ftk +{ + //! \name Rendering + ///@{ + + //! Render options. + struct FTK_API_TYPE RenderOptions + { + //! Clear the canvas before rendering. + bool clear = true; + + //! Clear color. + Color4F clearColor = Color4F(0.F, 0.F, 0.F, 0.F); + + //! Texture cache byte count. + size_t textureCacheByteCount = gigabyte / 4; + + //! Glyph texture atlas size. + int glyphAtlasSize = +#if defined(FTK_API_GLES_2) + 2048; +#else // FTK_API_GLES_2 + 4096; +#endif // FTK_API_GLES_2 + + //! Enable logging. + bool log = true; + + bool operator == (const RenderOptions&) const; + bool operator != (const RenderOptions&) const; + }; + + //! Line drawing options. + struct FTK_API_TYPE LineOptions + { + float width = 1.F; + + bool operator == (const LineOptions&) const; + bool operator != (const LineOptions&) const; + }; + + //! Channel display. + enum class FTK_API_TYPE ChannelDisplay + { + Color, + Red, + Green, + Blue, + Alpha, + + Count, + First = Color + }; + FTK_ENUM(ChannelDisplay); + + //! Input video levels. + enum class FTK_API_TYPE InputVideoLevels + { + FromFile, + FullRange, + LegalRange, + + Count, + First = FromFile + }; + FTK_ENUM(InputVideoLevels); + + //! Alpha channel blending. + //! + //! References: + //! - https://microsoft.github.io/Win2D/html/PremultipliedAlpha.htm + enum class FTK_API_TYPE AlphaBlend + { + None, + Straight, + Premultiplied, + + Count, + First = None + }; + FTK_ENUM(AlphaBlend); + + //! Image filtering. + enum class FTK_API_TYPE ImageFilter + { + Nearest, + Linear, + + Count, + First = Nearest + }; + FTK_ENUM(ImageFilter); + + //! Image filters. + struct FTK_API_TYPE ImageFilters + { + ImageFilter minify = ImageFilter::Linear; + ImageFilter magnify = ImageFilter::Linear; + + bool operator == (const ImageFilters&) const; + bool operator != (const ImageFilters&) const; + }; + + //! Image options. + struct FTK_API_TYPE ImageOptions + { + ChannelDisplay channelDisplay = ChannelDisplay::Color; + InputVideoLevels videoLevels = InputVideoLevels::FromFile; + AlphaBlend alphaBlend = AlphaBlend::Straight; + ImageFilters imageFilters; + bool cache = true; + + bool operator == (const ImageOptions&) const; + bool operator != (const ImageOptions&) const; + }; + + FTK_API void to_json(nlohmann::json&, const ImageFilters&); + FTK_API void to_json(nlohmann::json&, const ImageOptions&); + + FTK_API void from_json(const nlohmann::json&, ImageFilters&); + FTK_API void from_json(const nlohmann::json&, ImageOptions&); + + ///@} +} + +#include + diff --git a/third_party/tlRender-install-Release/include/ftk/Core/RenderOptionsInline.h b/third_party/tlRender-install-Release/include/ftk/Core/RenderOptionsInline.h new file mode 100644 index 00000000..5836d90c --- /dev/null +++ b/third_party/tlRender-install-Release/include/ftk/Core/RenderOptionsInline.h @@ -0,0 +1,57 @@ +// SPDX-License-Identifier: BSD-3-Clause +// Copyright Contributors to the feather-tk project. + +namespace ftk +{ + inline bool RenderOptions::operator == (const RenderOptions& other) const + { + return + clear == other.clear && + clearColor == other.clearColor && + textureCacheByteCount == other.textureCacheByteCount && + glyphAtlasSize == other.glyphAtlasSize && + log == other.log; + } + + inline bool RenderOptions::operator != (const RenderOptions& other) const + { + return !(*this == other); + } + + inline bool LineOptions::operator == (const LineOptions& other) const + { + return width == other.width; + } + + inline bool LineOptions::operator != (const LineOptions& other) const + { + return !(*this == other); + } + + inline bool ImageFilters::operator == (const ImageFilters& other) const + { + return + minify == other.minify && + magnify == other.magnify; + } + + inline bool ImageFilters::operator != (const ImageFilters& other) const + { + return !(*this == other); + } + + inline bool ImageOptions::operator == (const ImageOptions& other) const + { + return + channelDisplay == other.channelDisplay && + videoLevels == other.videoLevels && + alphaBlend == other.alphaBlend && + imageFilters == other.imageFilters && + cache == other.cache; + } + + inline bool ImageOptions::operator != (const ImageOptions& other) const + { + return !(*this == other); + } +} diff --git a/third_party/tlRender-install-Release/include/ftk/Core/RenderUtil.h b/third_party/tlRender-install-Release/include/ftk/Core/RenderUtil.h new file mode 100644 index 00000000..91923eda --- /dev/null +++ b/third_party/tlRender-install-Release/include/ftk/Core/RenderUtil.h @@ -0,0 +1,81 @@ +// SPDX-License-Identifier: BSD-3-Clause +// Copyright Contributors to the feather-tk project. + +#pragma once + +#include +#include + +#include + +namespace ftk +{ + class IRender; + + //! \name Rendering + ///@{ + + //! Set and restore the render size. + class FTK_API_TYPE RenderSizeState + { + public: + FTK_API RenderSizeState(const std::shared_ptr&); + + FTK_API ~RenderSizeState(); + + private: + FTK_PRIVATE(); + }; + + //! Set and restore the viewport. + class FTK_API_TYPE ViewportState + { + public: + FTK_API ViewportState(const std::shared_ptr&); + + FTK_API ~ViewportState(); + + private: + FTK_PRIVATE(); + }; + + //! Set and restore whether the clipping rectangle is enabled. + class FTK_API_TYPE ClipRectEnabledState + { + public: + FTK_API ClipRectEnabledState(const std::shared_ptr&); + + FTK_API ~ClipRectEnabledState(); + + private: + FTK_PRIVATE(); + }; + + //! Set and restore the clipping rectangle. + class FTK_API_TYPE ClipRectState + { + public: + FTK_API ClipRectState(const std::shared_ptr&); + + FTK_API ~ClipRectState(); + + FTK_API const Box2I& getClipRect() const; + + private: + FTK_PRIVATE(); + }; + + //! Set and restore the transform. + class FTK_API_TYPE TransformState + { + public: + FTK_API TransformState(const std::shared_ptr&); + + FTK_API ~TransformState(); + + private: + FTK_PRIVATE(); + }; + + ///@} +} diff --git a/third_party/tlRender-install-Release/include/ftk/Core/Size.h b/third_party/tlRender-install-Release/include/ftk/Core/Size.h new file mode 100644 index 00000000..de1f3834 --- /dev/null +++ b/third_party/tlRender-install-Release/include/ftk/Core/Size.h @@ -0,0 +1,146 @@ +// SPDX-License-Identifier: BSD-3-Clause +// Copyright Contributors to the feather-tk project. + +#pragma once + +#include + +#include + +#include +#include + +namespace ftk +{ + //! \name Sizes + ///@{ + + //! Base class for sizes. + template + class Size + { + public: + Size(); + + constexpr T operator [] (int) const; + constexpr T& operator [] (int); + + constexpr const T* data() const; + constexpr T* data(); + + bool isValid() const; + + std::array e; + }; + + //! Two-dimensional size. + template + class Size<2, T> + { + public: + constexpr Size(); + constexpr Size(T, T); + constexpr Size(const Size<2, T>&); + + constexpr T operator [] (int) const; + constexpr T& operator [] (int); + + constexpr const T* data() const; + constexpr T* data(); + + std::array e; + T& w; + T& h; + + constexpr bool isValid() const; + + constexpr Size<2, T>& operator = (const Size<2, T>&); + }; + + //! Three-dimensional size. + template + class Size<3, T> + { + public: + constexpr Size(); + constexpr Size(T, T, T); + constexpr Size(const Size<3, T>&); + + constexpr T operator [] (int) const; + constexpr T& operator [] (int); + + constexpr const T* data() const; + constexpr T* data(); + + std::array e; + T& w; + T& h; + T& d; + + constexpr bool isValid() const; + + constexpr Size<3, T>& operator = (const Size<3, T>&); + }; + + typedef Size<2, int> Size2I; + typedef Size<2, float> Size2F; + typedef Size<3, float> Size3F; + + //! Get the aspect ratio of the given size. + template + constexpr float aspectRatio(const Size<2, T>&); + + //! Get the area of the given size. + template + constexpr float area(const Size<2, T>&); + + //! Get the volume of the given size. + template + constexpr float volume(const Size<3, T>&); + + //! Add a margin to a size. + template + constexpr Size margin(const Size&, T); + + //! Add a margin to a size. + template + constexpr Size<2, T> margin(const Size<2, T>&, T x, T y); + + FTK_API std::string to_string(const Size2I&); + FTK_API std::string to_string(const Size2F&); + FTK_API std::string to_string(const Size3F&); + + FTK_API bool from_string(const std::string&, Size2I&); + FTK_API bool from_string(const std::string&, Size2F&); + FTK_API bool from_string(const std::string&, Size3F&); + + FTK_API void to_json(nlohmann::json&, const Size2I&); + FTK_API void to_json(nlohmann::json&, const Size2F&); + FTK_API void to_json(nlohmann::json&, const Size3F&); + + FTK_API void from_json(const nlohmann::json&, Size2I&); + FTK_API void from_json(const nlohmann::json&, Size2F&); + FTK_API void from_json(const nlohmann::json&, Size3F&); + + template + constexpr Size operator + (const Size&, T); + template + constexpr Size operator - (const Size&, T); + template + constexpr Size operator * (const Size&, float); + template + constexpr Size operator / (const Size&, float); + + template + constexpr bool operator == (const Size&, const Size&); + template + constexpr bool operator != (const Size&, const Size&); + + template + std::ostream& operator << (std::ostream&, const Size&); + + ///@} +} + +#include + diff --git a/third_party/tlRender-install-Release/include/ftk/Core/SizeInline.h b/third_party/tlRender-install-Release/include/ftk/Core/SizeInline.h new file mode 100644 index 00000000..50285747 --- /dev/null +++ b/third_party/tlRender-install-Release/include/ftk/Core/SizeInline.h @@ -0,0 +1,273 @@ +// SPDX-License-Identifier: BSD-3-Clause +// Copyright Contributors to the feather-tk project. + +namespace ftk +{ + template + inline Size::Size() + { + for (int c = 0; c < C; ++c) + { + e[c] = T(0); + } + } + + template + constexpr T Size::operator [] (int c) const + { + return e[c]; + } + + template + constexpr T& Size::operator [] (int c) + { + return e[c]; + } + + template + constexpr const T* Size::data() const + { + return e.data(); + } + + template + constexpr T* Size::data() + { + return e.data(); + } + + template + inline bool Size::isValid() const + { + bool out = true; + for (int c = 0; c < C; ++c) + { + out &= e[c] > 0; + } + return out; + } + + template + constexpr Size<2, T>::Size() : + e({ T(0), T(0) }), + w(e[0]), + h(e[1]) + {} + + template + constexpr Size<2, T>::Size(T w, T h) : + e({ w, h }), + w(e[0]), + h(e[1]) + {} + + template + constexpr Size<2, T>::Size(const Size<2, T>& v) : + e(v.e), + w(e[0]), + h(e[1]) + {} + + template + constexpr T Size<2, T>::operator [] (int c) const + { + return e[c]; + } + + template + constexpr T& Size<2, T>::operator [] (int c) + { + return e[c]; + } + + template + constexpr const T* Size<2, T>::data() const + { + return e.data(); + } + + template + constexpr T* Size<2, T>::data() + { + return e.data(); + } + + template + constexpr bool Size<2, T>::isValid() const + { + return e[0] > 0 && e[1] > 0; + } + + template + constexpr Size<2, T>& Size<2, T>::operator = (const Size<2, T>& v) + { + e = v.e; + return *this; + } + + template + constexpr Size<3, T>::Size() : + e({ T(0), T(0), T(0) }), + w(e[0]), + h(e[1]), + d(e[2]) + {} + + template + constexpr Size<3, T>::Size(T w, T h, T d) : + e({ w, h, d }), + w(e[0]), + h(e[1]), + d(e[2]) + {} + + template + constexpr Size<3, T>::Size(const Size<3, T>& v) : + e(v.e), + w(e[0]), + h(e[1]), + d(e[2]) + {} + + template + constexpr T Size<3, T>::operator [] (int c) const + { + return e[c]; + } + + template + constexpr T& Size<3, T>::operator [] (int c) + { + return e[c]; + } + + template + constexpr const T* Size<3, T>::data() const + { + return e.data(); + } + + template + constexpr T* Size<3, T>::data() + { + return e.data(); + } + + template + constexpr bool Size<3, T>::isValid() const + { + return e[0] > 0 && e[1] > 0 && e[2] > 0; + } + + template + constexpr Size<3, T>& Size<3, T>::operator = (const Size<3, T>& v) + { + e = v.e; + return *this; + } + + constexpr float aspectRatio(const Size<2, int>& a) + { + return a.h > 0 ? (a.w / static_cast(a.h)) : 0.F; + } + + constexpr float aspectRatio(const Size<2, float>& a) + { + return a.h > 0.F ? (a.w / a.h) : 0.F; + } + + constexpr float area(const Size<2, int>& a) + { + return a.w * a.h; + } + + constexpr float area(const Size<2, float>& a) + { + return a.w * a.h; + } + + constexpr float volume(const Size<3, float>& a) + { + return a.w * a.h * a.d; + } + + template + constexpr Size margin(const Size& a, T b) + { + return a + (b * 2); + } + + template + constexpr Size<2, T> margin(const Size<2, T>& a, T x, T y) + { + return Size<2, T>(a.w + x * 2, a.h + y * 2); + } + + template + constexpr Size operator + (const Size& a, T b) + { + Size out; + for (int c = 0; c < C; ++c) + { + out[c] = a[c] + b; + } + return out; + } + + template + constexpr Size operator - (const Size& a, T b) + { + Size out; + for (int c = 0; c < C; ++c) + { + out[c] = a[c] - b; + } + return out; + } + + template + constexpr Size operator * (const Size& a, float b) + { + Size out; + for (int c = 0; c < C; ++c) + { + out[c] = a[c] * b; + } + return out; + } + + template + constexpr Size operator / (const Size& a, float b) + { + Size out; + for (int c = 0; c < C; ++c) + { + out[c] = a[c] / b; + } + return out; + } + + template + constexpr bool operator == (const Size& a, const Size& b) + { + bool out = true; + for (int c = 0; c < C; ++c) + { + out &= a[c] == b[c]; + } + return out; + } + + template + constexpr bool operator != (const Size& a, const Size& b) + { + return !(a == b); + } + + template + inline std::ostream& operator << (std::ostream& os, const Size& v) + { + os << to_string(v); + return os; + } +} diff --git a/third_party/tlRender-install-Release/include/ftk/Core/String.h b/third_party/tlRender-install-Release/include/ftk/Core/String.h new file mode 100644 index 00000000..caafa3c8 --- /dev/null +++ b/third_party/tlRender-install-Release/include/ftk/Core/String.h @@ -0,0 +1,100 @@ +// SPDX-License-Identifier: BSD-3-Clause +// Copyright Contributors to the feather-tk project. + +#pragma once + +#include + +#include +#include + +namespace ftk +{ + //! \name Strings + ///@{ + + //! Arbitrary C string size. + constexpr size_t cStringSize = 4096; + + //! String split options. + enum class FTK_API_TYPE SplitOptions + { + DiscardEmpty, + KeepEmpty + }; + + //! Split a string. + FTK_API std::vector split( + const std::string&, + char delimeter, + SplitOptions = SplitOptions::DiscardEmpty); + + //! Split a string. + FTK_API std::vector split( + const std::string&, + const std::vector& delimeters, + SplitOptions = SplitOptions::DiscardEmpty); + + //! Split a string on new-lines. + FTK_API std::vector splitLines(const std::string&); + + //! Join a list of strings. + FTK_API std::string join(const std::vector&, char delimeter); + + //! Join a list of strings. + FTK_API std::string join(const std::vector&, const std::string& delimeter); + + //! Join a list of strings with quotes. + FTK_API std::string quotes(const std::vector&); + + //! Convert to upper case. + FTK_API std::string toUpper(const std::string&); + + //! Convert to lower case. + FTK_API std::string toLower(const std::string&); + + //! Remove trailing newlines. + FTK_API void removeTrailingNewlines(std::string&); + + //! Elide a string. + FTK_API std::string elide(const std::string&, size_t = 32); + + //! Case compare. + enum class FTK_API_TYPE CaseCompare + { + Sensitive, + Insensitive + }; + + //! Compare strings. + FTK_API bool compare( + const std::string&, + const std::string&, + CaseCompare = CaseCompare::Sensitive); + + //! Does a string contain the sub string? + FTK_API bool contains( + const std::string&, + const std::string& substr, + CaseCompare = CaseCompare::Sensitive); + + //! Convert a regular string to a wide string. + FTK_API std::wstring toWide(const std::string&); + + //! Convert a wide string to a regular string. + FTK_API std::string fromWide(const std::wstring&); + + //! Get a boolean label. + FTK_API std::string boolLabel(bool); + + //! Convert a boolean label. + FTK_API bool toBool(const std::string&); + + //! Get filler text. + FTK_API std::vector getLoremIpsum(); + + //! Get filler text. + FTK_API std::string getLoremIpsum(size_t lineCount); + + ///@} +} diff --git a/third_party/tlRender-install-Release/include/ftk/Core/Time.h b/third_party/tlRender-install-Release/include/ftk/Core/Time.h new file mode 100644 index 00000000..31cc1a59 --- /dev/null +++ b/third_party/tlRender-install-Release/include/ftk/Core/Time.h @@ -0,0 +1,29 @@ +// SPDX-License-Identifier: BSD-3-Clause +// Copyright Contributors to the feather-tk project. + +#pragma once + +#include + +#include +#include + +namespace ftk +{ + //! \name Time + ///@{ + + //! Sleep for a given time. + FTK_API void sleep(const std::chrono::microseconds&); + + //! Sleep up to the given time. + FTK_API void sleep( + const std::chrono::microseconds&, + const std::chrono::steady_clock::time_point& t0, + const std::chrono::steady_clock::time_point& t1); + + //! Convert a floating point rate to a rational. + FTK_API std::pair toRational(double); + + ///@} +} diff --git a/third_party/tlRender-install-Release/include/ftk/Core/Timer.h b/third_party/tlRender-install-Release/include/ftk/Core/Timer.h new file mode 100644 index 00000000..9a8d84f8 --- /dev/null +++ b/third_party/tlRender-install-Release/include/ftk/Core/Timer.h @@ -0,0 +1,87 @@ +// SPDX-License-Identifier: BSD-3-Clause +// Copyright Contributors to the feather-tk project. + +#pragma once + +#include + +#include + +namespace ftk +{ + //! \name Timers + ///@{ + + //! Timer. + class FTK_API_TYPE Timer : public std::enable_shared_from_this + { + FTK_NON_COPYABLE(Timer); + + protected: + void _init(const std::shared_ptr&); + + Timer(); + + public: + FTK_API ~Timer(); + + //! Create a new timer. + FTK_API static std::shared_ptr create( + const std::shared_ptr&); + + //! Does the timer repeat? + FTK_API bool isRepeating() const; + + //! Set whether the timer repeats. + FTK_API void setRepeating(bool); + + //! Start the timer. + FTK_API void start( + const std::chrono::microseconds& timeout, + const std::function& callback); + + //! Start the timer. + FTK_API void start( + const std::chrono::microseconds& timeout, + const std::function& callback); + + //! Stop the timer. + FTK_API void stop(); + + //! Is the timer active? + FTK_API bool isActive() const; + + //! Get the timeout. + FTK_API const std::chrono::microseconds& getTimeout() const; + + FTK_API void tick(); + + private: + FTK_PRIVATE(); + }; + + //! Timer system. + class FTK_API_TYPE TimerSystem : public ISystem + { + protected: + TimerSystem(const std::shared_ptr&); + + public: + FTK_API virtual ~TimerSystem(); + + FTK_API static std::shared_ptr create( + const std::shared_ptr&); + + FTK_API void addTimer(const std::shared_ptr&); + + FTK_API void tick() override; + FTK_API std::chrono::milliseconds getTickTime() const override; + + private: + FTK_PRIVATE(); + }; + + ///@} +} diff --git a/third_party/tlRender-install-Release/include/ftk/Core/Util.h b/third_party/tlRender-install-Release/include/ftk/Core/Util.h new file mode 100644 index 00000000..1646c0ab --- /dev/null +++ b/third_party/tlRender-install-Release/include/ftk/Core/Util.h @@ -0,0 +1,97 @@ +// SPDX-License-Identifier: BSD-3-Clause +// Copyright Contributors to the feather-tk project. + +#pragma once + +#include + +//! Convenience macro for making a class non-copyable. +#define FTK_NON_COPYABLE(CLASS) \ + CLASS(const CLASS&) = delete; \ + CLASS& operator = (const CLASS&) = delete + +//! Convenience macro for private implementations. +//! +//! Required includes: +//! * memory +#define FTK_PRIVATE() \ + struct Private; \ + std::unique_ptr _p + +//! Convenience macro for accessing private implementations. +#define FTK_P() \ + auto& p = *_p + +//! Convenience macro for enum utilities. +//! +//! Required includes: +//! * iostream +//! * string +//! * vector +#define FTK_ENUM(ENUM) \ + FTK_API std::vector get##ENUM##Enums(); \ + FTK_API std::vector get##ENUM##Labels(); \ + FTK_API std::string getLabel(ENUM); \ + FTK_API std::string to_string(ENUM); \ + FTK_API bool from_string(const std::string&, ENUM&); \ + FTK_API std::ostream& operator << (std::ostream&, ENUM) + +//! Implementation macro for enum utilities. +//! +//! Required includes: +//! * ftk/core/Error.h +//! * ftk/core/String.h +//! * algorithm +//! * array +//! * sstream +#define FTK_ENUM_IMPL(ENUM, ...) \ + std::vector get##ENUM##Enums() \ + { \ + std::vector out; \ + for (std::size_t i = 0; i < static_cast(ENUM::Count); ++i) \ + { \ + out.push_back(static_cast(i)); \ + } \ + return out; \ + } \ + \ + std::vector get##ENUM##Labels() \ + { \ + return std::vector{ __VA_ARGS__ }; \ + } \ + \ + std::string getLabel(ENUM value) \ + { \ + const std::array(ENUM::Count)> data = { __VA_ARGS__ }; \ + return data[static_cast(value)]; \ + } \ + \ + std::string to_string(ENUM value) \ + { \ + return getLabel(value); \ + } \ + \ + bool from_string(const std::string& s, ENUM& value) \ + { \ + bool out = false; \ + const auto& labels = get##ENUM##Labels(); \ + const auto i = std::find_if( \ + labels.begin(), \ + labels.end(), \ + [s](const std::string& value) \ + { \ + return ftk::compare(s, value, ftk::CaseCompare::Insensitive); \ + }); \ + if (i != labels.end()) \ + { \ + value = static_cast(i - labels.begin()); \ + out = true; \ + } \ + return out; \ + } \ + \ + std::ostream& operator << (std::ostream& os, ENUM in) \ + { \ + os << get##ENUM##Labels()[static_cast(in)]; \ + return os; \ + } diff --git a/third_party/tlRender-install-Release/include/ftk/Core/Vector.h b/third_party/tlRender-install-Release/include/ftk/Core/Vector.h new file mode 100644 index 00000000..d0b2faa2 --- /dev/null +++ b/third_party/tlRender-install-Release/include/ftk/Core/Vector.h @@ -0,0 +1,193 @@ +// SPDX-License-Identifier: BSD-3-Clause +// Copyright Contributors to the feather-tk project. + +#pragma once + +#include + +namespace ftk +{ + //! \name Vectors + ///@{ + + //! Base class for vectors. + template + class Vector + { + public: + constexpr Vector(); + explicit constexpr Vector(const Size&); + + constexpr T operator [] (int) const; + constexpr T& operator [] (int); + + constexpr const T* data() const; + constexpr T* data(); + + std::array e; + }; + + //! Two-dimensional vector. + template + class Vector<2, T> + { + public: + constexpr Vector(); + constexpr Vector(T, T); + explicit constexpr Vector(const Size<2, T>&); + constexpr Vector(const Vector<2, T>&); + + constexpr T operator [] (int) const; + constexpr T& operator [] (int); + + constexpr const T* data() const; + constexpr T* data(); + + std::array e; + T& x; + T& y; + + constexpr Vector<2, T>& operator = (const Vector<2, T>&); + }; + + //! Three-dimensional vector. + template + class Vector<3, T> + { + public: + constexpr Vector(); + constexpr Vector(T, T, T); + explicit constexpr Vector(const Size<3, T>&); + constexpr Vector(const Vector<3, T>&); + + constexpr T operator [] (int) const; + constexpr T& operator [] (int); + + constexpr const T* data() const; + constexpr T* data(); + + std::array e; + T& x; + T& y; + T& z; + + constexpr Vector<3, T>& operator = (const Vector<3, T>&); + }; + + //! Four-dimensional vector. + template + class Vector<4, T> + { + public: + constexpr Vector(); + constexpr Vector(T, T, T, T = T(1)); + constexpr Vector(const Vector<4, T>&); + + constexpr T operator [] (int) const; + constexpr T& operator [] (int); + + constexpr const T* data() const; + constexpr T* data(); + + std::array e; + T& x; + T& y; + T& z; + T& w; + + constexpr Vector<4, T>& operator = (const Vector<4, T>&); + }; + + typedef Vector<2, int> V2I; + typedef Vector<2, float> V2F; + typedef Vector<3, float> V3F; + typedef Vector<4, float> V4F; + + //! Get the length of a vector. + template + T length(const Vector&); + + //! Normalize the given vector. + template + Vector normalize(const Vector&); + + //! Get the vector dot product. + template + constexpr T dot(const Vector&, const Vector&); + + //! Get the vector cross product. + template + constexpr Vector<3, T> cross(const Vector<3, T>&, const Vector<3, T>&); + + //! Get a vector perpindicular to the given vector in the clockwise + //! direction. + template + constexpr Vector<2, T> perpCW(const Vector<2, T>&); + + //! Get a vector perpindicular to the given vector in the + //! counter-clockwise direction. + template + constexpr Vector<2, T> perpCCW(const Vector<2, T>&); + + //! Convert vector types. + constexpr Vector<2, float> convert(const Vector<2, int>&); + + //! Round vector components. + FTK_API Vector<2, float> round(const Vector<2, float>&); + + //! Round vector components. + FTK_API Vector<2, float> floor(const Vector<2, float>&); + + //! Round vector components. + FTK_API Vector<2, float> ceil(const Vector<2, float>&); + + FTK_API std::string to_string(const V2I&); + FTK_API std::string to_string(const V2F&); + FTK_API std::string to_string(const V3F&); + FTK_API std::string to_string(const V4F&); + + FTK_API bool from_string(const std::string&, V2I&); + FTK_API bool from_string(const std::string&, V2F&); + FTK_API bool from_string(const std::string&, V3F&); + FTK_API bool from_string(const std::string&, V4F&); + + FTK_API void to_json(nlohmann::json&, const V2I&); + FTK_API void to_json(nlohmann::json&, const V2F&); + FTK_API void to_json(nlohmann::json&, const V3F&); + FTK_API void to_json(nlohmann::json&, const V4F&); + + FTK_API void from_json(const nlohmann::json&, V2I&); + FTK_API void from_json(const nlohmann::json&, V2F&); + FTK_API void from_json(const nlohmann::json&, V3F&); + FTK_API void from_json(const nlohmann::json&, V4F&); + + template + constexpr Vector operator + (const Vector&, const Vector&); + template + constexpr Vector operator + (const Vector&, T); + + template + constexpr Vector operator - (const Vector&, const Vector&); + template + constexpr Vector operator - (const Vector&); + template + constexpr Vector operator - (const Vector&, T); + + template + constexpr Vector operator * (const Vector&, float); + template + constexpr Vector operator / (const Vector&, float); + + template + constexpr bool operator == (const Vector&, const Vector&); + template + constexpr bool operator != (const Vector&, const Vector&); + + template + std::ostream& operator << (std::ostream&, const Vector&); + + ///@} +} + +#include + diff --git a/third_party/tlRender-install-Release/include/ftk/Core/VectorInline.h b/third_party/tlRender-install-Release/include/ftk/Core/VectorInline.h new file mode 100644 index 00000000..86f09d4f --- /dev/null +++ b/third_party/tlRender-install-Release/include/ftk/Core/VectorInline.h @@ -0,0 +1,408 @@ +// SPDX-License-Identifier: BSD-3-Clause +// Copyright Contributors to the feather-tk project. + +#include + +namespace ftk +{ + template + constexpr Vector::Vector() + { + for (int c = 0; c < C; ++c) + { + e[c] = T(0); + } + } + + template + constexpr Vector::Vector(const Size& size) + { + for (int c = 0; c < C; ++c) + { + e[c] = size[c]; + } + } + + template + constexpr T Vector::operator [] (int c) const + { + return e[c]; + } + + template + constexpr T& Vector::operator [] (int c) + { + return e[c]; + } + + template + constexpr const T* Vector::data() const + { + return e.data(); + } + + template + constexpr T* Vector::data() + { + return e.data(); + } + + template + constexpr Vector<2, T>::Vector() : + e({ T(0), T(0) }), + x(e[0]), + y(e[1]) + {} + + template + constexpr Vector<2, T>::Vector(T x, T y) : + e({ x, y }), + x(e[0]), + y(e[1]) + {} + + template + constexpr Vector<2, T>::Vector(const Size<2, T>& size) : + e({ size.w, size.h }), + x(e[0]), + y(e[1]) + {} + + template + constexpr Vector<2, T>::Vector(const Vector<2, T>& v) : + e(v.e), + x(e[0]), + y(e[1]) + {} + + template + constexpr T Vector<2, T>::operator [] (int c) const + { + return e[c]; + } + + template + constexpr T& Vector<2, T>::operator [] (int c) + { + return e[c]; + } + + template + constexpr const T* Vector<2, T>::data() const + { + return e.data(); + } + + template + constexpr T* Vector<2, T>::data() + { + return e.data(); + } + + template + constexpr Vector<2, T>& Vector<2, T>::operator = (const Vector<2, T>& v) + { + e = v.e; + return *this; + } + + template + constexpr Vector<3, T>::Vector() : + e({ T(0), T(0), T(0) }), + x(e[0]), + y(e[1]), + z(e[2]) + {} + + template + constexpr Vector<3, T>::Vector(T x, T y, T z) : + e({ x, y, z }), + x(e[0]), + y(e[1]), + z(e[2]) + {} + + template + constexpr Vector<3, T>::Vector(const Size<3, T>& size) : + e({ size.w, size.h, size.d }), + x(e[0]), + y(e[1]), + z(e[2]) + {} + + template + constexpr Vector<3, T>::Vector(const Vector<3, T>& v) : + e(v.e), + x(e[0]), + y(e[1]), + z(e[2]) + {} + + template + constexpr T Vector<3, T>::operator [] (int c) const + { + return e[c]; + } + + template + constexpr T& Vector<3, T>::operator [] (int c) + { + return e[c]; + } + + template + constexpr const T* Vector<3, T>::data() const + { + return e.data(); + } + + template + constexpr T* Vector<3, T>::data() + { + return e.data(); + } + + template + constexpr Vector<3, T>& Vector<3, T>::operator = (const Vector<3, T>& v) + { + e = v.e; + return *this; + } + + template + constexpr Vector<4, T>::Vector() : + e({ T(0), T(0), T(0), T(0) }), + x(e[0]), + y(e[1]), + z(e[2]), + w(e[3]) + {} + + template + constexpr Vector<4, T>::Vector(T x, T y, T z, T w) : + e({ x, y, z, w }), + x(e[0]), + y(e[1]), + z(e[2]), + w(e[3]) + {} + + template + constexpr Vector<4, T>::Vector(const Vector<4, T>& v) : + e(v.e), + x(e[0]), + y(e[1]), + z(e[2]), + w(e[3]) + {} + + template + constexpr T Vector<4, T>::operator [] (int c) const + { + return e[c]; + } + + template + constexpr T& Vector<4, T>::operator [] (int c) + { + return e[c]; + } + + template + constexpr const T* Vector<4, T>::data() const + { + return e.data(); + } + + template + constexpr T* Vector<4, T>::data() + { + return e.data(); + } + + template + constexpr Vector<4, T>& Vector<4, T>::operator = (const Vector<4, T>& v) + { + e = v.e; + return *this; + } + + template + inline T length(const Vector& v) + { + T s = T(0); + for (int c = 0; c < C; ++c) + { + s += v[c] * v[c]; + } + return std::sqrt(s); + } + + template + inline Vector normalize(const Vector& v) + { + Vector out = v; + const T l = length(v); + if(l > T(0)) + { + for (int c = 0; c < C; ++c) + { + out[c] /= l; + } + } + return out; + } + + template + constexpr T dot(const Vector& v0, const Vector& v1) + { + T out = T(0); + for (int c = 0; c < C; ++c) + { + out += v0[c] * v1[c]; + } + return out; + } + + template + constexpr Vector<3, T> cross(const Vector<3, T>& a, const Vector<3, T>& b) + { + return Vector<3, T>( + a.y * b.z - b.y * a.z, + a.z * b.x - b.z * a.x, + a.x * b.y - b.x * a.y); + } + + template + constexpr Vector<2, T> perpCW(const Vector<2, T>& v) + { + return Vector<2, T>(v[1], -v[0]); + } + + template + constexpr Vector<2, T> perpCCW(const Vector<2, T>& v) + { + return Vector<2, T>(-v[1], v[0]); + } + + constexpr Vector<2, float> convert(const Vector<2, int>& value) + { + return Vector<2, float>(value.x, value.y); + } + + inline Vector<2, float> round(const Vector<2, float>& value) + { + return Vector<2, float>(std::round(value.x), std::round(value.y)); + } + + inline Vector<2, float> floor(const Vector<2, float>& value) + { + return Vector<2, float>(std::floor(value.x), std::floor(value.y)); + } + + inline Vector<2, float> ceil(const Vector<2, float>& value) + { + return Vector<2, float>(std::ceil(value.x), std::ceil(value.y)); + } + + template + constexpr Vector operator + (const Vector& v0, const Vector& v1) + { + Vector out; + for (int c = 0; c < C; ++c) + { + out[c] = v0[c] + v1[c]; + } + return out; + } + + template + constexpr Vector operator + (const Vector& v, T s) + { + Vector out; + for (int c = 0; c < C; ++c) + { + out[c] = v[c] + s; + } + return out; + } + + template + constexpr Vector operator - (const Vector& v0, const Vector& v1) + { + Vector out; + for (int c = 0; c < C; ++c) + { + out[c] = v0[c] - v1[c]; + } + return out; + } + + template + constexpr Vector operator - (const Vector& v) + { + Vector out; + for (int c = 0; c < C; ++c) + { + out[c] = -v[c]; + } + return out; + } + + template + constexpr Vector operator - (const Vector& v, T s) + { + Vector out; + for (int c = 0; c < C; ++c) + { + out[c] = v[c] - s; + } + return out; + } + + template + constexpr Vector operator * (const Vector& v, float s) + { + Vector out; + for (int c = 0; c < C; ++c) + { + out[c] = v[c] * s; + } + return out; + } + + template + constexpr Vector operator / (const Vector& v, float s) + { + Vector out; + for (int c = 0; c < C; ++c) + { + out[c] = v[c] / s; + } + return out; + } + + template + constexpr bool operator == (const Vector& a, const Vector& b) + { + bool out = true; + for (int c = 0; c < C; ++c) + { + out &= a[c] == b[c]; + } + return out; + } + + template + constexpr bool operator != (const Vector& a, const Vector& b) + { + return !(a == b); + } + + template + inline std::ostream& operator << (std::ostream& os, const Vector& v) + { + os << to_string(v); + return os; + } +} diff --git a/third_party/tlRender-install-Release/include/ftk/GL/GL.h b/third_party/tlRender-install-Release/include/ftk/GL/GL.h new file mode 100644 index 00000000..764c5585 --- /dev/null +++ b/third_party/tlRender-install-Release/include/ftk/GL/GL.h @@ -0,0 +1,11 @@ +// SPDX-License-Identifier: BSD-3-Clause +// Copyright Contributors to the feather-tk project. + +#pragma once + +#if defined(FTK_API_GL_4_1) +#include +#elif defined(FTK_API_GLES_2) +#include +#endif // FTK_API_GL_4_1 + diff --git a/third_party/tlRender-install-Release/include/ftk/GL/Init.h b/third_party/tlRender-install-Release/include/ftk/GL/Init.h new file mode 100644 index 00000000..93b7af1d --- /dev/null +++ b/third_party/tlRender-install-Release/include/ftk/GL/Init.h @@ -0,0 +1,24 @@ +// SPDX-License-Identifier: BSD-3-Clause +// Copyright Contributors to the feather-tk project. + +#pragma once + +#include + +#include + +namespace ftk +{ + class Context; + + //! OpenGL support + namespace gl + { + //! Initialize the library. + FTK_API void init(const std::shared_ptr&); + + //! Initialize GLAD. + FTK_API void initGLAD(); + } +} + diff --git a/third_party/tlRender-install-Release/include/ftk/GL/Mesh.h b/third_party/tlRender-install-Release/include/ftk/GL/Mesh.h new file mode 100644 index 00000000..5121b60c --- /dev/null +++ b/third_party/tlRender-install-Release/include/ftk/GL/Mesh.h @@ -0,0 +1,125 @@ +// SPDX-License-Identifier: BSD-3-Clause +// Copyright Contributors to the feather-tk project. + +#pragma once + +#include +#include +#include + +#include +#include + +namespace ftk +{ + namespace gl + { + //! \name Meshes + ///@{ + + //! Vertex buffer object types. + enum class FTK_API_TYPE VBOType + { + Pos2_F32, + Pos2_F32_UV_U16, + Pos2_F32_Color_F32, + Pos3_F32, + Pos3_F32_UV_U16, + Pos3_F32_UV_U16_Normal_U10, + Pos3_F32_UV_U16_Normal_U10_Color_U8, + Pos3_F32_UV_F32_Normal_F32, + Pos3_F32_UV_F32_Normal_F32_Color_F32, + Pos3_F32_Color_U8, + + Count, + First = Pos2_F32 + }; + FTK_ENUM(VBOType); + + //! Get the number of bytes used to store vertex buffer object types. + FTK_API std::size_t getByteCount(VBOType); + + //! Convert a triangle mesh to vertex buffer data. + FTK_API std::vector convert(const TriMesh2F&, VBOType); + + //! Convert a triangle mesh to vertex buffer data. + FTK_API std::vector convert(const TriMesh2F&, VBOType, const RangeSizeT&); + + //! Convert a triangle mesh to vertex buffer data. + FTK_API std::vector convert(const TriMesh3F&, VBOType); + + //! Convert a triangle mesh to vertex buffer data. + FTK_API std::vector convert(const TriMesh3F&, VBOType, const RangeSizeT&); + + //! Vertex buffer object. + class FTK_API_TYPE VBO : public std::enable_shared_from_this + { + FTK_NON_COPYABLE(VBO); + + protected: + VBO(std::size_t size, VBOType); + + public: + FTK_API ~VBO(); + + //! Create a new object. + FTK_API static std::shared_ptr create(std::size_t size, VBOType); + + //! Get the size. + FTK_API std::size_t getSize() const; + + //! Get the type. + FTK_API VBOType getType() const; + + //! Get the OpenGL ID. + FTK_API unsigned int getID() const; + + //! \name Copy + //! Copy data to the vertex buffer object. + ///@{ + + FTK_API void copy(const std::vector&); + FTK_API void copy(const std::vector&, std::size_t offset, std::size_t size); + + ///@} + + //! Get the number of objects currenty instantiated. + FTK_API static size_t getObjectCount(); + + //! Get the total number of bytes currently used. + FTK_API static size_t getTotalByteCount(); + + private: + FTK_PRIVATE(); + }; + + //! Vertex array object. + class FTK_API_TYPE VAO : public std::enable_shared_from_this + { + FTK_NON_COPYABLE(VAO); + + protected: + VAO(VBOType, unsigned int vbo); + + public: + FTK_API ~VAO(); + + //! Create a new object. + FTK_API static std::shared_ptr create(VBOType, unsigned int vbo); + + //! Get the OpenGL ID. + FTK_API unsigned int getID() const; + + //! Bind the vertex array object. + FTK_API void bind(); + + //! Draw the vertex array object. + FTK_API void draw(unsigned int mode, std::size_t offset, std::size_t size); + + private: + FTK_PRIVATE(); + }; + + ///@} + } +} diff --git a/third_party/tlRender-install-Release/include/ftk/GL/OffscreenBuffer.h b/third_party/tlRender-install-Release/include/ftk/GL/OffscreenBuffer.h new file mode 100644 index 00000000..4f81369b --- /dev/null +++ b/third_party/tlRender-install-Release/include/ftk/GL/OffscreenBuffer.h @@ -0,0 +1,171 @@ +// SPDX-License-Identifier: BSD-3-Clause +// Copyright Contributors to the feather-tk project. + +#pragma once + +#include + +#include + +namespace ftk +{ + namespace gl + { + //! \name Offscreen Buffers + ///@{ + + //! Default offscreen color buffer. +#if defined(FTK_API_GL_4_1) + const TextureType offscreenColorDefault = TextureType::RGBA_F32; +#elif defined(FTK_API_GLES_2) + const TextureType offscreenColorDefault = TextureType::RGBA_U8; +#endif // FTK_API_GL_4_1 + + //! Offscreen buffer depth size. + enum class FTK_API_TYPE OffscreenDepth + { + None, + _16, + _24, + _32, + + Count, + First = None + }; + FTK_ENUM(OffscreenDepth); + + //! Default offscreen depth buffer. +#if defined(FTK_API_GL_4_1) + const OffscreenDepth offscreenDepthDefault = OffscreenDepth::_16; +#elif defined(FTK_API_GLES_2) + const OffscreenDepth offscreenDepthDefault = OffscreenDepth::_24; +#endif // FTK_API_GL_4_1 + + //! Offscreen buffer stencil size. + enum class FTK_API_TYPE OffscreenStencil + { + None, + _8, + + Count, + First = None + }; + FTK_ENUM(OffscreenStencil); + + //! Offscreen buffer multisampling. + enum class FTK_API_TYPE OffscreenSampling + { + None, + _2, + _4, + _8, + _16, + + Count, + First = None + }; + FTK_ENUM(OffscreenSampling); + + //! Offscreen buffer options. + struct FTK_API_TYPE OffscreenBufferOptions + { + ImageFilters colorFilters; + OffscreenDepth depth = OffscreenDepth::None; + OffscreenStencil stencil = OffscreenStencil::None; + OffscreenSampling sampling = OffscreenSampling::None; + + bool operator == (const OffscreenBufferOptions&) const; + bool operator != (const OffscreenBufferOptions&) const; + }; + + //! Offscreen buffer. + class FTK_API_TYPE OffscreenBuffer : public std::enable_shared_from_this + { + FTK_NON_COPYABLE(OffscreenBuffer); + + protected: + void _init( + const TextureInfo&, + const OffscreenBufferOptions&); + + OffscreenBuffer(); + + public: + FTK_API ~OffscreenBuffer(); + + //! Create a new offscreen buffer. + FTK_API static std::shared_ptr create( + const TextureInfo&, + const OffscreenBufferOptions& = OffscreenBufferOptions()); + + //! Create a new offscreen buffer. + FTK_API static std::shared_ptr create( + const Size2I&, + TextureType = offscreenColorDefault, + const OffscreenBufferOptions& = OffscreenBufferOptions()); + + //! Get the offscreen buffer information. + FTK_API const TextureInfo& getInfo() const; + + //! Get the offscreen buffer size. + FTK_API const Size2I& getSize() const; + + //! Get the offscreen buffer width. + FTK_API int getWidth() const; + + //! Get the offscreen buffer height. + FTK_API int getHeight() const; + + //! Get the offscreen color buffer type. + FTK_API TextureType getType() const; + + //! Get the offscreen buffer options. + FTK_API const OffscreenBufferOptions& getOptions() const; + + //! Get the offscreen buffer ID. + FTK_API unsigned int getID() const; + + //! Get the color texture ID. + FTK_API unsigned int getColorID() const; + + //! Bind the offscreen buffer. + FTK_API void bind(); + + //! Get the number of objects currenty instantiated. + FTK_API static size_t getObjectCount(); + + //! Get the total number of bytes currently used. + FTK_API static size_t getTotalByteCount(); + + private: + FTK_PRIVATE(); + }; + + //! Check whether the offscreen buffer should be created or re-created. + FTK_API bool doCreate( + const std::shared_ptr&, + const TextureInfo&, + const OffscreenBufferOptions & = OffscreenBufferOptions()); + + //! Check whether the offscreen buffer should be created or re-created. + FTK_API bool doCreate( + const std::shared_ptr&, + const Size2I&, + TextureType = offscreenColorDefault, + const OffscreenBufferOptions & = OffscreenBufferOptions()); + + //! Offscreen buffer binding. + class FTK_API_TYPE OffscreenBufferBinding + { + public: + FTK_API explicit OffscreenBufferBinding(const std::shared_ptr&); + + FTK_API ~OffscreenBufferBinding(); + + private: + FTK_PRIVATE(); + }; + + ///@} + } +} diff --git a/third_party/tlRender-install-Release/include/ftk/GL/Render.h b/third_party/tlRender-install-Release/include/ftk/GL/Render.h new file mode 100644 index 00000000..cd1b250a --- /dev/null +++ b/third_party/tlRender-install-Release/include/ftk/GL/Render.h @@ -0,0 +1,144 @@ +// SPDX-License-Identifier: BSD-3-Clause +// Copyright Contributors to the feather-tk project. + +#pragma once + +#include + +#include + +namespace ftk +{ + namespace gl + { + class Shader; + class Texture; + + //! \name Renderer + ///@{ + + //! Texture cache. + typedef LRUCache< + std::shared_ptr, + std::vector > > TextureCache; + + //! OpenGL renderer. + class FTK_API_TYPE Render : public IRender + { + protected: + void _init( + const std::shared_ptr&, + const std::shared_ptr&, + const std::shared_ptr&); + + Render(); + + public: + FTK_API virtual ~Render(); + + //! Create a new renderer. + FTK_API static std::shared_ptr create( + const std::shared_ptr&, + const std::shared_ptr&, + const std::shared_ptr& = nullptr); + + //! Get a shader. + FTK_API std::shared_ptr getShader(const std::string&); + + //! Get the texture cache. + FTK_API const std::shared_ptr& getTextureCache() const; + + FTK_API void begin( + const Size2I&, + const RenderOptions& = RenderOptions()) override; + FTK_API void end() override; + FTK_API Size2I getRenderSize() const override; + FTK_API void setRenderSize(const Size2I&) override; + FTK_API RenderOptions getRenderOptions() const override; + FTK_API Box2I getViewport() const override; + FTK_API void setViewport(const Box2I&) override; + FTK_API void clearViewport(const Color4F&) override; + FTK_API bool getClipRectEnabled() const override; + FTK_API void setClipRectEnabled(bool) override; + FTK_API Box2I getClipRect() const override; + FTK_API void setClipRect(const Box2I&) override; + FTK_API M44F getTransform() const override; + FTK_API void setTransform(const M44F&) override; + FTK_API void drawRect( + const Box2F&, + const Color4F&) override; + FTK_API void drawRects( + const std::vector&, + const Color4F&) override; + FTK_API void drawLine( + const V2F&, + const V2F&, + const Color4F&, + const LineOptions& = LineOptions()) override; + FTK_API void drawLines( + const std::vector >&, + const Color4F&, + const LineOptions& = LineOptions()) override; + FTK_API void drawMesh( + const TriMesh2F&, + const Color4F& = Color4F(1.F, 1.F, 1.F, 1.F), + const V2F& pos = V2F()) override; + FTK_API void drawColorMesh( + const TriMesh2F&, + const Color4F& = Color4F(1.F, 1.F, 1.F, 1.F), + const V2F& pos = V2F()) override; + FTK_API void drawTexture( + unsigned int, + const Box2I&, + bool mirrorV = false, + const Color4F& = Color4F(1.F, 1.F, 1.F), + AlphaBlend = AlphaBlend::Straight) override; + FTK_API void drawText( + const std::vector >&, + const FontMetrics&, + const V2F& position, + const Color4F& = Color4F(1.F, 1.F, 1.F, 1.F)) override; + FTK_API void drawImage( + const std::shared_ptr&, + const TriMesh2F&, + const Color4F & = Color4F(1.F, 1.F, 1.F, 1.F), + const ImageOptions & = ImageOptions()) override; + FTK_API void drawImage( + const std::shared_ptr&, + const Box2F&, + const Color4F& = Color4F(1.F, 1.F, 1.F, 1.F), + const ImageOptions& = ImageOptions()) override; + FTK_API RenderDiag getDiag() const override; + + private: + std::vector > _getTextures( + const ImageInfo&, + const ImageFilters&, + size_t offset = 0); + void _copyTextures( + const std::shared_ptr&, + const std::vector >&, + size_t offset = 0); + void _setActiveTextures( + const ImageInfo& info, + const std::vector >&, + size_t offset = 0); + + void _drawTextMesh(const TriMesh2F&); + + FTK_PRIVATE(); + }; + + //! OpenGL render factory. + class FTK_API_TYPE RenderFactory : public IRenderFactory + { + public: + FTK_API std::shared_ptr createRender( + const std::shared_ptr&, + const std::shared_ptr&) override; + }; + + ///@} + } +} + diff --git a/third_party/tlRender-install-Release/include/ftk/GL/Shader.h b/third_party/tlRender-install-Release/include/ftk/GL/Shader.h new file mode 100644 index 00000000..d1ef6ad9 --- /dev/null +++ b/third_party/tlRender-install-Release/include/ftk/GL/Shader.h @@ -0,0 +1,97 @@ +// SPDX-License-Identifier: BSD-3-Clause +// Copyright Contributors to the feather-tk project. + +#pragma once + +#include +#include +#include +#include + +#include +#include +#include + +namespace ftk +{ + namespace gl + { + //! \name Shaders + ///@{ + + //! Shader. + class FTK_API_TYPE Shader : public std::enable_shared_from_this + { + FTK_NON_COPYABLE(Shader); + + protected: + void _init(); + + Shader(); + + public: + FTK_API ~Shader(); + + //! Create a new shader. + FTK_API static std::shared_ptr create( + const std::string& vertexSource, + const std::string& fragmentSource); + + //! Get the vertex shader source. + FTK_API const std::string& getVertexSource() const; + + //! Get the fragment shader source. + FTK_API const std::string& getFragmentSource() const; + + //! Get the OpenGL shader program. + FTK_API unsigned int getProgram() const; + + //! Bind the shader. + FTK_API void bind(); + + //! \name Uniforms + //! Set uniform values. + ///@{ + + FTK_API void setUniform(int, int); + FTK_API void setUniform(int, float); + FTK_API void setUniform(int, const V2F&); + FTK_API void setUniform(int, const V3F&); + FTK_API void setUniform(int, const V4F&); + FTK_API void setUniform(int, const M33F&); + FTK_API void setUniform(int, const M44F&); + FTK_API void setUniform(int, const Color4F&); + FTK_API void setUniform(int, const float[4]); + + FTK_API void setUniform(int, const std::vector&); + FTK_API void setUniform(int, const std::vector&); + FTK_API void setUniform(int, const std::vector&); + FTK_API void setUniform(int, const std::vector&); + + FTK_API void setUniform(const std::string&, int); + FTK_API void setUniform(const std::string&, float); + FTK_API void setUniform(const std::string&, const V2F&); + FTK_API void setUniform(const std::string&, const V3F&); + FTK_API void setUniform(const std::string&, const V4F&); + FTK_API void setUniform(const std::string&, const M33F&); + FTK_API void setUniform(const std::string&, const M44F&); + FTK_API void setUniform(const std::string&, const Color4F&); + FTK_API void setUniform(const std::string&, const float[4]); + + FTK_API void setUniform(const std::string&, const std::vector&); + FTK_API void setUniform(const std::string&, const std::vector&); + FTK_API void setUniform(const std::string&, const std::vector&); + FTK_API void setUniform(const std::string&, const std::vector&); + + ///@} + + //! Get the number of objects currenty instantiated. + FTK_API static size_t getObjectCount(); + + private: + FTK_PRIVATE(); + }; + + ///@} + } +} diff --git a/third_party/tlRender-install-Release/include/ftk/GL/System.h b/third_party/tlRender-install-Release/include/ftk/GL/System.h new file mode 100644 index 00000000..bd218ca2 --- /dev/null +++ b/third_party/tlRender-install-Release/include/ftk/GL/System.h @@ -0,0 +1,36 @@ +// SPDX-License-Identifier: BSD-3-Clause +// Copyright Contributors to the feather-tk project. + +#pragma once + +#include + +namespace ftk +{ + class IRenderFactory; + + namespace gl + { + //! OpenGL system. + class FTK_API_TYPE System : public ISystem + { + protected: + System(const std::shared_ptr&); + + public: + FTK_API virtual ~System(); + + //! Create a new system. + FTK_API static std::shared_ptr create(const std::shared_ptr&); + + //! Get the render factory. + FTK_API const std::shared_ptr& getRenderFactory() const; + + //! Set the render factory. + FTK_API void setRenderFactory(const std::shared_ptr&); + + private: + FTK_PRIVATE(); + }; + } +} diff --git a/third_party/tlRender-install-Release/include/ftk/GL/Texture.h b/third_party/tlRender-install-Release/include/ftk/GL/Texture.h new file mode 100644 index 00000000..ffb20eb6 --- /dev/null +++ b/third_party/tlRender-install-Release/include/ftk/GL/Texture.h @@ -0,0 +1,164 @@ +// SPDX-License-Identifier: BSD-3-Clause +// Copyright Contributors to the feather-tk project. + +#pragma once + +#include + +namespace ftk +{ + namespace gl + { + //! \name Textures + ///@{ + + //! OpenGL texture types. + enum class FTK_API_TYPE TextureType + { + None, + + L_U8, + L_U16, + L_U32, + L_F16, + L_F32, + + LA_U8, + LA_U16, + LA_U32, + LA_F16, + LA_F32, + + RGB_U8, + RGB_U10, + RGB_U16, + RGB_U32, + RGB_F16, + RGB_F32, + + RGBA_U8, + RGBA_U16, + RGBA_U32, + RGBA_F16, + RGBA_F32, + + Count, + First = L_U8 + }; + FTK_ENUM(TextureType); + + //! Get a texture type for the given image type. + FTK_API TextureType getTextureType(ImageType); + + //! Get an image type for the given texture type. + FTK_API ImageType getImageType(TextureType); + + //! Get the OpenGL texture format. + FTK_API unsigned int getTextureFormat(TextureType); + + //! Get the OpenGL internal texture format. + FTK_API unsigned int getTextureInternalFormat(TextureType); + + //! Get the OpenGL texture type. + FTK_API unsigned int getTextureType(TextureType); + + //! Get the texture filter. + FTK_API unsigned int getTextureFilter(ImageFilter); + + //! Texture information. + struct FTK_API_TYPE TextureInfo + { + TextureInfo() = default; + FTK_API TextureInfo(const Size2I&, TextureType); + + Size2I size; + TextureType type = TextureType::None; + + FTK_API bool isValid() const; + FTK_API float getAspect() const; + FTK_API size_t getByteCount() const; + + FTK_API bool operator == (const TextureInfo&) const; + FTK_API bool operator != (const TextureInfo&) const; + }; + + //! Get a texture information label. + std::string getLabel(const TextureInfo&); + + //! Texture options. + struct FTK_API_TYPE TextureOptions + { + ImageFilters filters; + bool pbo = false; + + FTK_API bool operator == (const TextureOptions&) const; + FTK_API bool operator != (const TextureOptions&) const; + }; + + //! Texture. + class FTK_API_TYPE Texture : public std::enable_shared_from_this + { + FTK_NON_COPYABLE(Texture); + + protected: + Texture( + const ImageInfo&, + const TextureOptions&); + + public: + FTK_API ~Texture(); + + //! Create a new texture. + FTK_API static std::shared_ptr create( + const ImageInfo&, + const TextureOptions& = TextureOptions()); + + //! Get the texture information. + FTK_API const TextureInfo& getInfo() const; + + //! Get the image information. + FTK_API const ImageInfo& getImageInfo() const; + + //! Get the size. + FTK_API const Size2I& getSize() const; + + //! Get the width. + FTK_API int getWidth() const; + + //! Get the height. + FTK_API int getHeight() const; + + //! Get the texture type. + FTK_API TextureType getType() const; + + //! Get the OpenGL texture ID. + FTK_API unsigned int getID() const; + + //! \name Copy + //! Copy image data to the texture. + ///@{ + + FTK_API bool copy(const std::shared_ptr&); + FTK_API bool copy(const std::shared_ptr&, int x, int y); + FTK_API bool copy(const uint8_t*, const ImageInfo&); + + ///@} + + //! Bind the texture. + FTK_API void bind(); + + //! Get the number of objects currenty instantiated. + FTK_API static size_t getObjectCount(); + + //! Get the total number of bytes currently used. + FTK_API static size_t getTotalByteCount(); + + private: + bool _isCompatible(const ImageInfo&) const; + + FTK_PRIVATE(); + }; + + ///@} + } +} diff --git a/third_party/tlRender-install-Release/include/ftk/GL/TextureAtlas.h b/third_party/tlRender-install-Release/include/ftk/GL/TextureAtlas.h new file mode 100644 index 00000000..240388d4 --- /dev/null +++ b/third_party/tlRender-install-Release/include/ftk/GL/TextureAtlas.h @@ -0,0 +1,78 @@ +// SPDX-License-Identifier: BSD-3-Clause +// Copyright Contributors to the feather-tk project. + +#pragma once + +#include + +#include +#include +#include + +namespace ftk +{ + namespace gl + { + //! \name Texture Atlas + ///@{ + + //! Texture atlas item. + struct FTK_API_TYPE TextureAtlasItem + { + BoxPackID id = boxPackInvalidID; + Size2I size; + RangeF u; + RangeF v; + }; + + //! Texture atlas. + class FTK_API_TYPE TextureAtlas : public std::enable_shared_from_this + { + FTK_NON_COPYABLE(TextureAtlas); + + protected: + void _init( + int size, + ImageType, + ImageFilter, + int border); + + TextureAtlas(); + + public: + FTK_API ~TextureAtlas(); + + //! Create a new texture atlas. + FTK_API static std::shared_ptr create( + int size, + ImageType, + ImageFilter = ImageFilter::Linear, + int border = 1); + + //! Get the texture atlas size. + FTK_API int getSize() const; + + //! Get the texture atlas type. + FTK_API ImageType getType() const; + + //! Get the texture atlas ID. + FTK_API unsigned int getTexture() const; + + //! Get a texture atlas item. + FTK_API bool getItem(BoxPackID, TextureAtlasItem&); + + //! Add a texture atlas item. + FTK_API bool addItem(const std::shared_ptr&, TextureAtlasItem&); + + //! Get the percentage of the texture atlas that is in use. + FTK_API float getPercentageUsed() const; + + private: + void _toItem(const std::shared_ptr&, TextureAtlasItem&); + + FTK_PRIVATE(); + }; + + ///@} + } +} diff --git a/third_party/tlRender-install-Release/include/ftk/GL/Util.h b/third_party/tlRender-install-Release/include/ftk/GL/Util.h new file mode 100644 index 00000000..562956c2 --- /dev/null +++ b/third_party/tlRender-install-Release/include/ftk/GL/Util.h @@ -0,0 +1,48 @@ +// SPDX-License-Identifier: BSD-3-Clause +// Copyright Contributors to the feather-tk project. + +#pragma once + +#include + +#include +#include + +namespace ftk +{ + namespace gl + { + //! \name Utility + ///@{ + + //! Get the major version number from an OpenGL version string. + FTK_API int getMajorVersion(const std::string&); + + //! Get the glReadPixels format. + FTK_API unsigned int getReadPixelsFormat(ImageType); + + //! Get the glReadPixels type. + FTK_API unsigned int getReadPixelsType(ImageType); + + //! Set the alpha blending. + FTK_API void setAlphaBlend(AlphaBlend); + + //! Set whether an OpenGL capability is enabled and restore it to the + //! previous value when finished. + class FTK_API_TYPE SetAndRestore + { + public: + FTK_API SetAndRestore(unsigned int, bool); + + FTK_API ~SetAndRestore(); + + private: + FTK_PRIVATE(); + }; + + //! Get an OpenGL error label. + FTK_API std::string getErrorLabel(unsigned int); + + ///@} + } +} diff --git a/third_party/tlRender-install-Release/include/ftk/GL/Window.h b/third_party/tlRender-install-Release/include/ftk/GL/Window.h new file mode 100644 index 00000000..34ca5bcb --- /dev/null +++ b/third_party/tlRender-install-Release/include/ftk/GL/Window.h @@ -0,0 +1,133 @@ +// SPDX-License-Identifier: BSD-3-Clause +// Copyright Contributors to the feather-tk project. + +#pragma once + +#include + +namespace ftk +{ + class Context; + + namespace gl + { + //! \name Windows + ///@{ + + //! OpenGL information. + struct FTK_API_TYPE GLInfo + { + std::string vendor; + std::string renderer; + std::string version; + }; + + //! OpenGL window options. + enum class FTK_API_TYPE WindowOptions + { + None = 0, + Visible = 1, + DoubleBuffer = 2, + MakeCurrent = 4 + }; + + //! OpenGL window. + class FTK_API_TYPE Window : public std::enable_shared_from_this + { + FTK_NON_COPYABLE(Window); + + protected: + Window( + const std::shared_ptr&, + const std::string& title, + const Size2I&, + int options, + const std::shared_ptr& share); + + public: + FTK_API virtual ~Window(); + + //! Create a new window. + FTK_API static std::shared_ptr create( + const std::shared_ptr&, + const std::string& title, + const Size2I&, + int options = + static_cast(WindowOptions::Visible) | + static_cast(WindowOptions::DoubleBuffer) | + static_cast(WindowOptions::MakeCurrent), + const std::shared_ptr& share = nullptr); + + //! Get the window ID. + FTK_API uint32_t getID() const; + + //! Get the window title. + FTK_API std::string getTitle() const; + + //! Set the window title. + FTK_API void setTitle(const std::string&); + + //! Set the window size. + FTK_API void setSize(const Size2I&); + + //! Get the window minimum size. + FTK_API Size2I getMinSize() const; + + //! Set the window minimum size. + FTK_API void setMinSize(const Size2I&); + + //! Show the window. + FTK_API void show(); + + //! Hide the window. + FTK_API void hide(); + + //! Set the window icons + //! + //! Icon images should be of type ImageType::RGBA_U8, with no + //! mirroring, memory alignment of one, and LSB memory endian. + //! + //! Window icons are not supported on macOS. + FTK_API void setIcon(const std::shared_ptr&); + + //! Make this the current OpenGL context. + FTK_API void makeCurrent(); + + //! Clear the current OpenGL context. + FTK_API void clearCurrent(); + + //! Get which screen the window is on. + FTK_API int getScreen() const; + + //! Get whether the window is in full screen mode. + FTK_API bool isFullScreen() const; + + //! Set whether the window is in full screen mode. + FTK_API void setFullScreen(bool); + + //! Get whether the window is floating on top. + FTK_API bool isFloatOnTop() const; + + //! Set whether the window is floating on top. + FTK_API void setFloatOnTop(bool); + + //! Get whether the window has text input. + FTK_API bool hasTextInput() const; + + //! Set whether the window has text input. + FTK_API void setTextInput(bool); + + //! Swap the buffers. + FTK_API void swap(); + + //! Get the OpenGL information. + FTK_API const GLInfo& getGLInfo() const; + + private: + FTK_PRIVATE(); + }; + + ///@} + } +} + diff --git a/third_party/tlRender-install-Release/include/ftk/KHR/khrplatform.h b/third_party/tlRender-install-Release/include/ftk/KHR/khrplatform.h new file mode 100644 index 00000000..01646449 --- /dev/null +++ b/third_party/tlRender-install-Release/include/ftk/KHR/khrplatform.h @@ -0,0 +1,311 @@ +#ifndef __khrplatform_h_ +#define __khrplatform_h_ + +/* +** Copyright (c) 2008-2018 The Khronos Group Inc. +** +** Permission is hereby granted, free of charge, to any person obtaining a +** copy of this software and/or associated documentation files (the +** "Materials"), to deal in the Materials without restriction, including +** without limitation the rights to use, copy, modify, merge, publish, +** distribute, sublicense, and/or sell copies of the Materials, and to +** permit persons to whom the Materials are furnished to do so, subject to +** the following conditions: +** +** The above copyright notice and this permission notice shall be included +** in all copies or substantial portions of the Materials. +** +** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. +*/ + +/* Khronos platform-specific types and definitions. + * + * The master copy of khrplatform.h is maintained in the Khronos EGL + * Registry repository at https://github.com/KhronosGroup/EGL-Registry + * The last semantic modification to khrplatform.h was at commit ID: + * 67a3e0864c2d75ea5287b9f3d2eb74a745936692 + * + * Adopters may modify this file to suit their platform. Adopters are + * encouraged to submit platform specific modifications to the Khronos + * group so that they can be included in future versions of this file. + * Please submit changes by filing pull requests or issues on + * the EGL Registry repository linked above. + * + * + * See the Implementer's Guidelines for information about where this file + * should be located on your system and for more details of its use: + * http://www.khronos.org/registry/implementers_guide.pdf + * + * This file should be included as + * #include + * by Khronos client API header files that use its types and defines. + * + * The types in khrplatform.h should only be used to define API-specific types. + * + * Types defined in khrplatform.h: + * khronos_int8_t signed 8 bit + * khronos_uint8_t unsigned 8 bit + * khronos_int16_t signed 16 bit + * khronos_uint16_t unsigned 16 bit + * khronos_int32_t signed 32 bit + * khronos_uint32_t unsigned 32 bit + * khronos_int64_t signed 64 bit + * khronos_uint64_t unsigned 64 bit + * khronos_intptr_t signed same number of bits as a pointer + * khronos_uintptr_t unsigned same number of bits as a pointer + * khronos_ssize_t signed size + * khronos_usize_t unsigned size + * khronos_float_t signed 32 bit floating point + * khronos_time_ns_t unsigned 64 bit time in nanoseconds + * khronos_utime_nanoseconds_t unsigned time interval or absolute time in + * nanoseconds + * khronos_stime_nanoseconds_t signed time interval in nanoseconds + * khronos_boolean_enum_t enumerated boolean type. This should + * only be used as a base type when a client API's boolean type is + * an enum. Client APIs which use an integer or other type for + * booleans cannot use this as the base type for their boolean. + * + * Tokens defined in khrplatform.h: + * + * KHRONOS_FALSE, KHRONOS_TRUE Enumerated boolean false/true values. + * + * KHRONOS_SUPPORT_INT64 is 1 if 64 bit integers are supported; otherwise 0. + * KHRONOS_SUPPORT_FLOAT is 1 if floats are supported; otherwise 0. + * + * Calling convention macros defined in this file: + * KHRONOS_APICALL + * KHRONOS_APIENTRY + * KHRONOS_APIATTRIBUTES + * + * These may be used in function prototypes as: + * + * KHRONOS_APICALL void KHRONOS_APIENTRY funcname( + * int arg1, + * int arg2) KHRONOS_APIATTRIBUTES; + */ + +#if defined(__SCITECH_SNAP__) && !defined(KHRONOS_STATIC) +# define KHRONOS_STATIC 1 +#endif + +/*------------------------------------------------------------------------- + * Definition of KHRONOS_APICALL + *------------------------------------------------------------------------- + * This precedes the return type of the function in the function prototype. + */ +#if defined(KHRONOS_STATIC) + /* If the preprocessor constant KHRONOS_STATIC is defined, make the + * header compatible with static linking. */ +# define KHRONOS_APICALL +#elif defined(_WIN32) +# define KHRONOS_APICALL __declspec(dllimport) +#elif defined (__SYMBIAN32__) +# define KHRONOS_APICALL IMPORT_C +#elif defined(__ANDROID__) +# define KHRONOS_APICALL __attribute__((visibility("default"))) +#else +# define KHRONOS_APICALL +#endif + +/*------------------------------------------------------------------------- + * Definition of KHRONOS_APIENTRY + *------------------------------------------------------------------------- + * This follows the return type of the function and precedes the function + * name in the function prototype. + */ +#if defined(_WIN32) && !defined(_WIN32_WCE) && !defined(__SCITECH_SNAP__) + /* Win32 but not WinCE */ +# define KHRONOS_APIENTRY __stdcall +#else +# define KHRONOS_APIENTRY +#endif + +/*------------------------------------------------------------------------- + * Definition of KHRONOS_APIATTRIBUTES + *------------------------------------------------------------------------- + * This follows the closing parenthesis of the function prototype arguments. + */ +#if defined (__ARMCC_2__) +#define KHRONOS_APIATTRIBUTES __softfp +#else +#define KHRONOS_APIATTRIBUTES +#endif + +/*------------------------------------------------------------------------- + * basic type definitions + *-----------------------------------------------------------------------*/ +#if (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) || defined(__GNUC__) || defined(__SCO__) || defined(__USLC__) + + +/* + * Using + */ +#include +typedef int32_t khronos_int32_t; +typedef uint32_t khronos_uint32_t; +typedef int64_t khronos_int64_t; +typedef uint64_t khronos_uint64_t; +#define KHRONOS_SUPPORT_INT64 1 +#define KHRONOS_SUPPORT_FLOAT 1 +/* + * To support platform where unsigned long cannot be used interchangeably with + * inptr_t (e.g. CHERI-extended ISAs), we can use the stdint.h intptr_t. + * Ideally, we could just use (u)intptr_t everywhere, but this could result in + * ABI breakage if khronos_uintptr_t is changed from unsigned long to + * unsigned long long or similar (this results in different C++ name mangling). + * To avoid changes for existing platforms, we restrict usage of intptr_t to + * platforms where the size of a pointer is larger than the size of long. + */ +#if defined(__SIZEOF_LONG__) && defined(__SIZEOF_POINTER__) +#if __SIZEOF_POINTER__ > __SIZEOF_LONG__ +#define KHRONOS_USE_INTPTR_T +#endif +#endif + +#elif defined(__VMS ) || defined(__sgi) + +/* + * Using + */ +#include +typedef int32_t khronos_int32_t; +typedef uint32_t khronos_uint32_t; +typedef int64_t khronos_int64_t; +typedef uint64_t khronos_uint64_t; +#define KHRONOS_SUPPORT_INT64 1 +#define KHRONOS_SUPPORT_FLOAT 1 + +#elif defined(_WIN32) && !defined(__SCITECH_SNAP__) + +/* + * Win32 + */ +typedef __int32 khronos_int32_t; +typedef unsigned __int32 khronos_uint32_t; +typedef __int64 khronos_int64_t; +typedef unsigned __int64 khronos_uint64_t; +#define KHRONOS_SUPPORT_INT64 1 +#define KHRONOS_SUPPORT_FLOAT 1 + +#elif defined(__sun__) || defined(__digital__) + +/* + * Sun or Digital + */ +typedef int khronos_int32_t; +typedef unsigned int khronos_uint32_t; +#if defined(__arch64__) || defined(_LP64) +typedef long int khronos_int64_t; +typedef unsigned long int khronos_uint64_t; +#else +typedef long long int khronos_int64_t; +typedef unsigned long long int khronos_uint64_t; +#endif /* __arch64__ */ +#define KHRONOS_SUPPORT_INT64 1 +#define KHRONOS_SUPPORT_FLOAT 1 + +#elif 0 + +/* + * Hypothetical platform with no float or int64 support + */ +typedef int khronos_int32_t; +typedef unsigned int khronos_uint32_t; +#define KHRONOS_SUPPORT_INT64 0 +#define KHRONOS_SUPPORT_FLOAT 0 + +#else + +/* + * Generic fallback + */ +#include +typedef int32_t khronos_int32_t; +typedef uint32_t khronos_uint32_t; +typedef int64_t khronos_int64_t; +typedef uint64_t khronos_uint64_t; +#define KHRONOS_SUPPORT_INT64 1 +#define KHRONOS_SUPPORT_FLOAT 1 + +#endif + + +/* + * Types that are (so far) the same on all platforms + */ +typedef signed char khronos_int8_t; +typedef unsigned char khronos_uint8_t; +typedef signed short int khronos_int16_t; +typedef unsigned short int khronos_uint16_t; + +/* + * Types that differ between LLP64 and LP64 architectures - in LLP64, + * pointers are 64 bits, but 'long' is still 32 bits. Win64 appears + * to be the only LLP64 architecture in current use. + */ +#ifdef KHRONOS_USE_INTPTR_T +typedef intptr_t khronos_intptr_t; +typedef uintptr_t khronos_uintptr_t; +#elif defined(_WIN64) +typedef signed long long int khronos_intptr_t; +typedef unsigned long long int khronos_uintptr_t; +#else +typedef signed long int khronos_intptr_t; +typedef unsigned long int khronos_uintptr_t; +#endif + +#if defined(_WIN64) +typedef signed long long int khronos_ssize_t; +typedef unsigned long long int khronos_usize_t; +#else +typedef signed long int khronos_ssize_t; +typedef unsigned long int khronos_usize_t; +#endif + +#if KHRONOS_SUPPORT_FLOAT +/* + * Float type + */ +typedef float khronos_float_t; +#endif + +#if KHRONOS_SUPPORT_INT64 +/* Time types + * + * These types can be used to represent a time interval in nanoseconds or + * an absolute Unadjusted System Time. Unadjusted System Time is the number + * of nanoseconds since some arbitrary system event (e.g. since the last + * time the system booted). The Unadjusted System Time is an unsigned + * 64 bit value that wraps back to 0 every 584 years. Time intervals + * may be either signed or unsigned. + */ +typedef khronos_uint64_t khronos_utime_nanoseconds_t; +typedef khronos_int64_t khronos_stime_nanoseconds_t; +#endif + +/* + * Dummy value used to pad enum types to 32 bits. + */ +#ifndef KHRONOS_MAX_ENUM +#define KHRONOS_MAX_ENUM 0x7FFFFFFF +#endif + +/* + * Enumerated boolean type + * + * Values other than zero should be considered to be true. Therefore + * comparisons should not be made against KHRONOS_TRUE. + */ +typedef enum { + KHRONOS_FALSE = 0, + KHRONOS_TRUE = 1, + KHRONOS_BOOLEAN_ENUM_FORCE_SIZE = KHRONOS_MAX_ENUM +} khronos_boolean_enum_t; + +#endif /* __khrplatform_h_ */ diff --git a/third_party/tlRender-install-Release/include/ftk/UI/Action.h b/third_party/tlRender-install-Release/include/ftk/UI/Action.h new file mode 100644 index 00000000..b392f161 --- /dev/null +++ b/third_party/tlRender-install-Release/include/ftk/UI/Action.h @@ -0,0 +1,171 @@ +// SPDX-License-Identifier: BSD-3-Clause +// Copyright Contributors to the feather-tk project. + +#pragma once + +#include + +namespace ftk +{ + //! \name Actions + ///@{ + + //! Keyboard shortcut. + struct FTK_API_TYPE KeyShortcut + { + KeyShortcut() = default; + FTK_API KeyShortcut(Key, KeyModifier); + FTK_API KeyShortcut(Key, KeyModifier, KeyModifier); + FTK_API KeyShortcut(Key, KeyModifier, KeyModifier, KeyModifier); + FTK_API KeyShortcut(Key, int modifiers = 0); + + Key key = Key::Unknown; + int modifiers = 0; + + FTK_API bool operator == (const KeyShortcut&) const; + FTK_API bool operator != (const KeyShortcut&) const; + }; + + //! Action. + class FTK_API_TYPE Action : public std::enable_shared_from_this + { + protected: + void _init( + const std::string& text, + const std::string& icon, + const KeyShortcut& shortcut, + const std::function& callback, + const std::function& checkedCallback); + + Action(); + + public: + FTK_API ~Action(); + + //! \name Create + ///@{ + + FTK_API static std::shared_ptr create( + const std::string& text, + const std::function& callback); + + FTK_API static std::shared_ptr create( + const std::string& text, + const std::string& icon, + const std::function& callback); + + FTK_API static std::shared_ptr create( + const std::string& text, + const KeyShortcut& shortcut, + const std::function& callback); + + FTK_API static std::shared_ptr create( + const std::string& text, + const std::string& icon, + const KeyShortcut& shortcut, + const std::function& callback); + + FTK_API static std::shared_ptr create( + const std::string& text, + const std::function& checkedCallback); + + FTK_API static std::shared_ptr create( + const std::string& text, + const std::string& icon, + const std::function& checkedCallback); + + FTK_API static std::shared_ptr create( + const std::string& text, + const KeyShortcut& shortcut, + const std::function& checkedCallback); + + FTK_API static std::shared_ptr create( + const std::string& text, + const std::string& icon, + const KeyShortcut& shortcut, + const std::function& checkedCallback); + + ///@} + + //! \name Text + ///@{ + + FTK_API const std::string& getText() const; + FTK_API std::shared_ptr > observeText() const; + FTK_API void setText(const std::string&); + + ///@} + + //! \name Icon + ///@{ + + FTK_API const std::string& getIcon() const; + FTK_API const std::string& getCheckedIcon() const; + FTK_API std::shared_ptr > observeIcon() const; + FTK_API std::shared_ptr > observeCheckedIcon() const; + FTK_API void setIcon(const std::string&); + FTK_API void setCheckedIcon(const std::string&); + + ///@} + + //! \name Shortcut + ///@{ + + FTK_API const std::vector& getShortcuts() const; + FTK_API std::shared_ptr > observeShortcuts() const; + FTK_API void setShortcuts(const std::vector&); + + ///@} + + //! \name Callback + ///@{ + + FTK_API void doCallback(); + + ///@} + + //! \name Checkable + ///@{ + + FTK_API bool isCheckable() const; + FTK_API bool isChecked() const; + FTK_API std::shared_ptr > observeCheckable() const; + FTK_API std::shared_ptr > observeChecked() const; + FTK_API void setCheckable(bool); + FTK_API void setChecked(bool); + FTK_API void doCheckedCallback(bool); + + ///@} + + //! \name Enabled + ///@{ + + FTK_API bool isEnabled() const; + FTK_API std::shared_ptr > observeEnabled() const; + FTK_API void setEnabled(bool); + + ///@} + + //! \name Tooltip + ///@{ + + FTK_API const std::string& getTooltip() const; + FTK_API std::shared_ptr > observeTooltip() const; + FTK_API void setTooltip(const std::string&); + + ///@} + + private: + FTK_PRIVATE(); + }; + + FTK_API std::string to_string(const KeyShortcut&); + + FTK_API bool from_string(const std::string&, KeyShortcut&); + + FTK_API void to_json(nlohmann::json&, const KeyShortcut&); + + FTK_API void from_json(const nlohmann::json&, KeyShortcut&); + + ///@} +} diff --git a/third_party/tlRender-install-Release/include/ftk/UI/App.h b/third_party/tlRender-install-Release/include/ftk/UI/App.h new file mode 100644 index 00000000..9f88b1a6 --- /dev/null +++ b/third_party/tlRender-install-Release/include/ftk/UI/App.h @@ -0,0 +1,181 @@ +// SPDX-License-Identifier: BSD-3-Clause +// Copyright Contributors to the feather-tk project. + +#pragma once + +#include + +#include +#include +#include +#include +#include + +#include + +namespace ftk +{ + class FontSystem; + class IWidget; + class IWindow; + class IconSystem; + class TickEvent; + + //! Monitor information. + struct FTK_API_TYPE MonitorInfo + { + std::string name; + Size2I size; + int refreshRate = 0; + V2F dpi; + Box2I bounds; + + bool operator == (const MonitorInfo&) const; + bool operator != (const MonitorInfo&) const; + }; + + //! Color style. + enum class FTK_API_TYPE ColorStyle + { + Dark, + Light, + Custom, + + Count, + First = Dark + }; + FTK_ENUM(ColorStyle); + + //! Get custom color roles. + FTK_API std::map getCustomColorRoles(); + + //! Get display scales. + FTK_API std::vector getDisplayScales(); + + //! Base class for user interface applications. + class FTK_API_TYPE App : public IApp + { + protected: + void _init( + const std::shared_ptr&, + const std::vector&, + const std::string& name, + const std::string& summary, + const std::vector >& = {}, + const std::vector >& = {}); + + App(); + + public: + FTK_API virtual ~App(); + + //! Create a new application. + FTK_API static std::shared_ptr create( + const std::shared_ptr&, + int argc, char** argv, + const std::string& name, + const std::string& summary, + const std::vector >& = {}, + const std::vector >& = {}); + + //! Create a new application. + FTK_API static std::shared_ptr create( + const std::shared_ptr&, + int argc, wchar_t* argv[], + const std::string& name, + const std::string& summary, + const std::vector >& = {}, + const std::vector >& = {}); + + //! Create a new application. + FTK_API static std::shared_ptr create( + const std::shared_ptr&, + const std::vector&, + const std::string& name, + const std::string& summary, + const std::vector >& = {}, + const std::vector >& = {}); + + //! Get the font system. + FTK_API const std::shared_ptr& getFontSystem() const; + + //! Get the icon system. + FTK_API const std::shared_ptr& getIconSystem() const; + + //! Get the style. + FTK_API const std::shared_ptr